./PaxHeaders/lasso-2.8.20000644000000000000000000000013214404126166012006 xustar0030 mtime=1678814326.417984109 30 atime=1678814326.421984131 30 ctime=1678814326.417984109 lasso-2.8.2/0000755000175000017500000000000014404126166015176 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/PaxHeaders/README.WIN320000644000000000000000000000013113766621500013410 xustar0029 mtime=1608196928.71889494 30 atime=1678098070.001489133 30 ctime=1678814319.937947205 lasso-2.8.2/README.WIN320000644000175000017500000000121613766621500016661 0ustar00bdauvergnebdauvergne00000000000000====================== Using Lasso Win32 Port ====================== Compile ======= Execute:: ./autogen.sh --host=i686-pc-mingw32 --with-pkg-config-path=/usr/local/lib/pkgconfig and next ``make``. Know bugs ========= Windows 9x/ME ~~~~~~~~~~~~~ Description ----------- Some problem with link definition. Fix --- After the build error, edit the lasso/*/.libs/*.la files and remove any link calls to user32 and kernel32. Installation ~~~~~~~~~~~~ Description ----------- The ``.dll`` file is not copied to his destination directory. Fix --- Manually copy the ``.dll`` file (``lasso/.libs/liblasso-3.dll``) to its destination directory. lasso-2.8.2/PaxHeaders/.version0000644000000000000000000000013214404125706013413 xustar0030 mtime=1678814150.952993532 30 atime=1678814150.952993532 30 ctime=1678814319.945947251 lasso-2.8.2/.version0000644000175000017500000000000614404125706016657 0ustar00bdauvergnebdauvergne000000000000002.8.2 lasso-2.8.2/PaxHeaders/configure.ac0000644000000000000000000000013214401344336014212 xustar0030 mtime=1678100702.761160572 30 atime=1678814008.608164943 30 ctime=1678814319.873946842 lasso-2.8.2/configure.ac0000644000175000017500000007622714401344336017500 0ustar00bdauvergnebdauvergne00000000000000dnl -*- Mode: sh -*- dnl dnl configure.ac - top level autoconf file for Lasso dnl (Process this file with autoconf to produce a configure script.) dnl dnl dnl See COPYING at the top of this package for the full license terms. dnl dnl dnl Declare package and package version. dnl (r-c).a.r dnl - First number is the lowest supported API version number. dnl - Second number is the number of supported API versions where API version > dnl first number. dnl - Third number is the current API version implementation version number. dnl See libtool explanations about current, age and release, later in this file. AC_INIT([lasso], m4_esyscmd([tools/git-version-gen .tarball-version]), lasso-devel@lists.labs.libre-entreprise.org) dnl Check if autoconf ver > 2.53 AC_PREREQ(2.53) AC_CONFIG_MACRO_DIR([m4]) dnl Perform only subset commands and variable relevant to the host type. AC_CANONICAL_HOST AC_CANONICAL_SYSTEM dnl Check existence of a relative pathed source file. AC_CONFIG_SRCDIR(lasso/lasso.c) dnl Copy stamp REVISIO-INFO in the configure script. AC_REVISION($Revision$) dnl Run many macros mostly needed by configure.ac. AM_INIT_AUTOMAKE([foreign tar-pax]) dnl Support automake 1.11 silent mode m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) m4_ifdef([AM_SILENT_RULES],[HAVE_AM_SILENT_RULES=yes]) AM_CONDITIONAL(HAVE_AM_SILENT_RULES, test x$HAVE_AM_SILENT_RULES != x) dnl Create rules to automaticaly regenerate the config header. AM_CONFIG_HEADER([config.h lasso/lasso_config.h]) dnl Add --enable-maintainer-mode option to configure. AM_MAINTAINER_MODE([enable]) dnl ========================================================================== dnl Perform host specific configuration dnl ========================================================================== NULL= ### Sun Java environment needs to be told about platform... SUN_EXTRA_INCLUDE= case "${host}" in *-pc-mingw32) SUN_EXTRA_INCLUDE="win32" ;; *-pc-cygwin) SUN_EXTRA_INCLUDE="win32" ;; *linux*) SUN_EXTRA_INCLUDE="linux" ;; *solaris*) SUN_EXTRA_INCLUDE="solaris" ;; esac ### adapting build environment for different platforms... MINGW=0 DARWIN=0 case "${host}" in *aix*) CFLAGS="${CFLAGS} -D_ALL_SOURCE" ;; *-pc-mingw32) case "${build}" in *-pc-cygwin) CC="gcc -mno-cygwin" CFLAGS="${CFLAGS} -D_MSC_VER -DIN_LASSO -DMINGW -DWIN32 -D_WIN32 -I/usr/local/include" LDFLAGS="${LDFLAGS} -L/usr/local/lib" MINGW=1 ;; esac ;; *darwin*) DARWIN=1 ;; esac # OSX Fink if test -d /sw/bin ; then PATH=$PATH:/sw/bin fi dnl dnl Check for programs dnl AC_PROG_CC AM_CFLAGS="" AC_HEADER_STDC LT_AC_PROG_RC AC_EXEEXT AC_PROG_CC_C_O AM_SANITY_CHECK AC_PROG_AWK AC_PROG_LN_S AC_LIBTOOL_WIN32_DLL AM_PROG_LIBTOOL AC_SUBST(LIBTOOL_DEPS) AS_COMPILER_FLAGS(WARNING_FLAGS, "-Wall -Wextra -Wno-missing-field-initializers -Wno-unused-parameter -Wold-style-definition -Wdeclaration-after-statement -Wmissing-declarations -Wredundant-decls -Wmissing-noreturn -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -Winline -Wformat-nonliteral -Wformat-security -Wswitch-enum -Wswitch-default -Winit-self -Wmissing-include-dirs -Wundef -Waggregate-return -Wmissing-format-attribute -Wnested-externs") dnl Find tar command for make dist AC_CHECK_PROGS(TAR, gnutar gtar tar) dnl Check existence of binding programs AC_CHECK_CLASSPATH AC_PROG_JAVAC AC_PROG_JAVA AC_PROG_JAVAH AC_PROG_JAR DPS_XTRA_CLASSPATH(CLASSPATH_JUNIT, junit.framework.Test, junit.jar) old_cp=$CLASSPATH export CLASSPATH=${CLASSPATH}:${CLASSPATH_JUNIT} AC_CHECK_JUNIT if test "x$old_cp" = "x"; then unset CLASSPATH else $CLASSPATH=$old_cp fi unset old_cp dnl AC_CHECK_PROGS(JAVA, gij java) dnl AC_CHECK_PROGS(JAVAC, gcj javac) dnl AC_CHECK_PROGS(JAVAH, gjavah gcjh javah) 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(PHP7, php7.4 php7.3 php7.2 php7.1 php7.0 php7 php) AC_CHECK_PROGS(PHP7_CONFIG, php-config7.4 php-config7.3 php-config7.2 php-config7.1 php-config7.0 php-config7 php-config) AC_CHECK_PROGS(PYTHON, python3 python python2) AC_CHECK_PROGS(SWIG, swig) dnl Make sure we have an ANSI compiler test "z$U" != "z" && AC_MSG_ERROR(Compiler not ANSI compliant) dnl Check for variadic macros AC_CACHE_CHECK([for variadic cpp macros], [ac_cv_cpp_variadic_macros], [AC_TRY_COMPILE( [#include #define a(b,c...) printf(b,##c)], [a("foo");a("%s","bar");a("%s%s","baz","quux");], ac_cv_cpp_variadic_macros=yes, ac_cv_cpp_variadic_macros=no)]) if test "x${ac_cv_cpp_variadic_macros}" != "xno"; then AC_DEFINE(HAVE_VARIADIC_MACROS, 1, Support for variadic macros) fi dnl ========================================================================== dnl Version Super.Size.Me.L dnl ========================================================================== changequote(<<, >>)dnl VERSION_MAJOR=`echo $VERSION | $SED -e 's/^\([^\.]*\)\.\([^\.]*\)\.\(.*\)$/\1/'` VERSION_MINOR=`echo $VERSION | $SED -e 's/^\([^\.]*\)\.\([^\.]*\)\.\(.*\)$/\2/'` VERSION_RELEASE=`echo $VERSION | $SED -e 's/^\([^\.]*\)\.\([^\.]*\)\.\([0-9]*\).*$/\3/'` changequote([, ])dnl VERSION_UNDERSCORED=`echo $VERSION | $SED -e 's/\./_/g'` AC_SUBST(VERSION_UNDERSCORED) dnl Add versionning & package defines to lasso_.h AC_DEFINE_UNQUOTED(LASSO_VERSION_MAJOR, $VERSION_MAJOR, [Major version number]) AC_DEFINE_UNQUOTED(LASSO_VERSION_MINOR, $VERSION_MINOR, [Minor version number]) AC_DEFINE_UNQUOTED(LASSO_VERSION_SUBMINOR, $VERSION_RELEASE, [Release version number]) dnl Create an XMLSEC version number for tests AC_DEFINE(LASSO_XMLSEC_VERSION_NUMBER, [(((XMLSEC_VERSION_MAJOR * 0x010000) + (XMLSEC_VERSION_MINOR * 0x0100) + (XMLSEC_VERSION_SUBMINOR * 0x01)))], [XMLSEC Version number]) AH_BOTTOM([#include ]) dnl Dirty hack in order to have dynamic resource version numbering. WINDOWS_VERSION=`echo $VERSION_MAJOR,$VERSION_MINOR,$VERSION_RELEASE,0` AC_SUBST(WINDOWS_VERSION) dnl CURRENT, REVISION, AGE dnl - library source changed -> increment REVISION dnl - interfaces added/removed/changed -> increment CURRENT, REVISION = 0 dnl - interfaces added -> increment AGE dnl - interfaces removed -> AGE = 0 # syntax: CURRENT[:REVISION[:AGE]] # So if M=major, m=minor, r=release: # c = M + a = M + m; # m = a # r = r current=`expr $VERSION_MAJOR + $VERSION_MINOR` LASSO_VERSION_INFO="18:2:15" AC_SUBST(LASSO_VERSION_INFO) dnl Compute the minimal supported ABI version for Win32 scripts and resources files. minimal_version=`echo $LASSO_VERSION_INFO | $AWK -F: '{printf("%d\n",$1-$3)};'` UPCASED_DLL_FILENAME="LIBLASSO-$minimal_version.DLL" DLL_FILENAME="liblasso-$minimal_version.dll" AC_SUBST(UPCASED_DLL_FILENAME) AC_SUBST(DLL_FILENAME) dnl Detect available languages binding. languages_available= # ------------ # JAVA binding # ------------ dnl Check if java is explicitly disabled. AC_ARG_ENABLE(java, [ --enable-java enable the Java binding],, enable_java="no") AC_ARG_WITH(java-home, [ --with-java-home=(JAVA_HOME) set the full path to the java home directory.]) SUN=no dnl If the java compiler seems to be a Sun JDK-like compile (Kaffe, Sun JDK...) if test "x$JAVAC" = "xjavac"; then JAVAC_PATH=`which $JAVAC` if test "x$with_java_home" = "x"; then with_java_home=`readlink -f $JAVAC_PATH | sed s#/bin/.*##` fi dnl If we have a java compiler dnl need to change quotes to allow square brackets changequote(<<, >>)dnl JAVA_VERSION=`$JAVA -version 2>&1 | $SED -ne 's/\(openjdk\|java\) \(full\)*version "\([^"]*\)".*/\3/p' 2>/dev/null` changequote([, ])dnl dnl If no java version found, perphas it is a kaffee environment... if test "x$JAVA_VERSION" = x; then JAVA_VERSION=`$JAVA -version 2>&1 | grep "Java Version" | $SED 's/^.*Java Version: //g'` dnl If the java environment is kaffe, specify the JAVA_INCLUDE directory. else dnl We assume it is a SUN environment. SUN=yes fi CLASSPATH_OPT="-classpath" fi if test "x$with_java_home" != x; then JAVA_INCLUDE="$with_java_home/include" fi if ! test -f "$JAVA_INCLUDE/jni.h"; then JAVA_VERSION="" fi dnl GNU java environment if test "x$JAVAH" = "xgcjh" || test "x$JAVAH" = "xgjavah" ; then dnl JNI compatible header files. (not used with SWIG.) JAVAH_FLAGS="-jni" JAVA_INCLUDE="" fi dnl If the java compiler is the GNU Java Compiler. if echo "$JAVAC" | grep -q "gcj"; then changequote(<<, >>)dnl JAVA_VERSION=`$JAVAC --version 2>&1 | $SED -ne 's/gcj[^[:blank:]]* ([^)]*) \([^ ]*\).*/\1/p' 2>/dev/null` MAJOR=`echo $JAVA_VERSION | sed 's/.*[^[:digit:]]\?\([[:digit:]]\+\)\.[[:digit:]]\+\.[[:digit:]]\+/\1/'` MINOR=`echo $JAVA_VERSION | sed 's/.*[^[:digit:]]\?[[:digit:]]\+\.\([[:digit:]]\+\)\.[[:digit:]]\+/\1/'` RELEASE=`echo $JAVA_VERSION | sed 's/.*[^[:digit:]]\?[[:digit:]]\+\.[[:digit:]]\+\.\([[:digit:]]\+\).*/\1/'` changequote([, ])dnl dnl Byte-compiled .class file if test $MAJOR -gt 4 -o \( $MAJOR -eq 4 -a $MINOR -gt 1 \) -o \( $MAJOR -eq 4 -a $MINOR -eq 1 -a $RELEASE -ge 3 \); then JAVAC_FLAGS="-fsource=1.4 -ftarget=1.4" fi unset MAJOR unset MINOR unset RELEASE dnl Checking for jni.h if gcj is the java interpreter. AC_CHECK_HEADERS([jni.h], [], [JAVA_VERSION=""]) CLASSPATH_OPT="--classpath" fi dnl Now transform JAVA_INCLUDE in CFLAG option if applicable. if test "X$JAVA_INCLUDE" != "X"; then dnl If it is a sun environment if test "x$SUN" = "xyes"; then JAVA_INCLUDE="$JAVA_INCLUDE -I$JAVA_INCLUDE/$SUN_EXTRA_INCLUDE" fi JAVA_INCLUDE=-I$JAVA_INCLUDE fi dnl If we found a java version information, we have java compilation environment. if test "X$JAVA_VERSION" != "X" && test "X$JAR" != "X" && test "x$JAVAH" != "x"; then languages_available="$languages_available $JAVA($JAVA_VERSION)" else enable_java=no JAVA_VERSION="" fi dnl Support JNI under MacOsX if test "$DARWIN" = 1; then JNI_EXTRA_LDFLAGS="-shrext .jnilib" fi dnl Conditional java sub dir test. AM_CONDITIONAL([JAVA_ENABLED],[test "x$enable_java" = "xyes"]) AM_CONDITIONAL([JUNIT_ENABLED],[test "x$JUNIT" != "x"]) AC_SUBST(JAVA_VERSION) AC_SUBST(JAVAC_FLAGS) AC_SUBST(JAVAH_FLAGS) AC_SUBST(JAVA_INCLUDE) AC_SUBST(CLASSPATH_OPT) JDK_INCLUDE=$JAVA_INCLUDE AC_SUBST(JDK_INCLUDE) AC_SUBST(JNI_EXTRA_LDFLAGS) # -------------- # Python binding # -------------- dnl Check if python is explicitly disabled. AC_ARG_ENABLE(python, [ --disable-python disable the Python binding],, enable_python="yes") dnl Check if user passed a specific python program. AC_ARG_WITH(python, [ --with-python=(PYTHON) set the full path to the python program to use.]) dnl specific program passed, set PYTHON to it. if test "X$with_python" != "X"; then PYTHON=$with_python fi dnl need to change quotes to allow square brackets changequote(<<, >>)dnl PYTHON_VERSION=`$PYTHON -c 'from distutils import sysconfig ; print(sysconfig.get_config_var("VERSION"))'` changequote([, ])dnl test "x$PYTHON" != "x" || AC_MSG_ERROR(Python must be installed to compile lasso) AC_MSG_CHECKING(for Python development files) dnl Check if we were be able to extract a good version number. if test "X$PYTHON_VERSION" != "X"; then changequote(<<, >>)dnl PYTHON_INC=`$PYTHON -c 'from distutils import sysconfig ; print(sysconfig.get_python_inc())'` PYTHON_LIB=`$PYTHON -c 'from distutils import sysconfig ; print(sysconfig.get_python_lib(1))'` changequote([, ])dnl PYTHON_H=$PYTHON_INC/Python.h if test -f $PYTHON_H; then PY_CFLAGS="-I$PYTHON_INC" PY_MAKEFILE=`$PYTHON -c 'from distutils import sysconfig ; print(sysconfig.get_makefile_filename())'` PY_OTHER_LIBS=`$SED -n -e 's/^LIBS=\(.*\)/\1/p' $PY_MAKEFILE` PY_EXTRA_LIBS="$PY_LOCALMODLIBS $PY_BASEMODLIBS $PY_OTHER_LIBS" dnl this extracts the $libdir out of python lib directory, dnl replacing it by our own. PY_SUFFIX_LIB=`echo $PYTHON_LIB | $SED -e 's/.*python/python/'` PY_SITE_PACKAGES="\${libdir}/$PY_SUFFIX_LIB" AC_SUBST(PYTHON) AC_SUBST(PY_LIB_LOC) AC_SUBST(PY_CFLAGS) AC_SUBST(PY_EXTRA_LIBS) AC_SUBST(PY_DYNLOAD) AC_SUBST(PY_LIB_A) AC_SUBST(PY_SITE_PACKAGES) languages_available="$languages_available python($PYTHON_VERSION)" else enable_python=no fi else enable_python=no fi AM_CONDITIONAL([PYTHON_ENABLED],[test "x$enable_python" = "xyes"]) AC_MSG_RESULT($enable_python) AC_SUBST(PYTHON_VERSION) # ----------- # PHP 5 binding # ----------- dnl Check if php is explicitly enabled. AC_ARG_ENABLE(php5, [ --enable-php5 enable the PHP 5 binding],, enable_php5="yes") AC_ARG_WITH(php5-config, [ --with-php5-config=(PHP5_CONFIG) Specify full path to php-config5.]) AC_ARG_ENABLE(php5-force, [ --enable-php5-force always enable of the PHP 5 binding (win32)], [ENABLE_PHP5_FORCE="yes"], [ENABLE_PHP5_FORCE="no"]) dnl Check if user passed a specific php-config program. if test "X$with_php5_config" != "X" ; then PHP5_CONFIG=$with_php5_config fi if test "X$PHP5_CONFIG" != "X" ; then PHP5_INCLUDES=`$PHP5_CONFIG --includes` PHP5_LDFLAGS=`$PHP5_CONFIG --ldflags` PHP5_LIBS=`$PHP5_CONFIG --libs` PHP5_PREFIX=`$PHP5_CONFIG --prefix` PHP5_QUOTED_PREFIX=$(echo $PHP5_PREFIX | $SED 's/\//\\\//g') PHP5_UNPREFIXED_EXTENSION_DIR=$($PHP5_CONFIG --extension-dir | $SED "s/$PHP5_QUOTED_PREFIX//g") else # We assume PHP are in /usr/local directory. if test $MINGW -eq 1; then CFLAGS="$CFLAGS -DZTS -DZEND_WIN32 -DWIN32 -D_MBCS" fi PHP5_INCLUDES="-I/usr/local/include/php5 -I/usr/local/include/php5/main -I/usr/local/include/php5/Zend -I/usr/local/include/php5/TSRM -I/usr/local/include/php5/win32" PHP5_LDFLAGS= PHP5_LIBS="-lphp5ts -lxmlparse -lxmltok" PHP5_UNPREFIXED_EXTENSION_DIR= PHP5_PREFIX= fi AC_ARG_WITH(php5-include-dir, [ --with-php5-include-dir=(PHP5_INCLUDE_DIR) Specify full path to php 5 include dir.], [PHP5_INCLUDE_DIR="$withval"],[PHP5_INCLUDE_DIR=${datadir}/php]) AC_ARG_WITH(php5-config-dir, [ --with-php5-config-dir=(PHP5_CONFIG_DIR) Specify full path to php 5 config dir.], [PHP5_CONFIG_DIR="$withval"],[PHP5_CONFIG_DIR=${sysconfdir}/php5/conf.d/]) AC_SUBST(PHP5_INCLUDES) AC_SUBST(PHP5_LDFLAGS) AC_SUBST(PHP5_LIBS) AC_SUBST(PHP5_UNPREFIXED_EXTENSION_DIR) AC_SUBST(PHP5_EXTENSION_DIR) AC_SUBST(PHP5_PREFIX) AC_SUBST(PHP5_INCLUDE_DIR) AC_SUBST(PHP5_CONFIG_DIR) AC_MSG_CHECKING(for PHP 5 development files) if $PHP5_CONFIG --version | grep -q "^5" || test "x$ENABLE_PHP5_FORCE" = "xyes" then PHP5_VERSION=`$PHP5_CONFIG --version 2> /dev/null` languages_available="$languages_available php5($PHP5_VERSION)" else enable_php5=no fi AC_MSG_RESULT($enable_php5) AM_CONDITIONAL([PHP5_ENABLED], [test "x$enable_php5" = "xyes"]) AC_SUBST(PHP5_VERSION) # ----------- # PHP 7 binding # ----------- dnl Check if php is explicitly enabled. AC_ARG_ENABLE(php7, [ --enable-php7 enable the PHP 7 binding],, enable_php7="yes") AC_ARG_WITH(php7-config, [ --with-php7-config=(PHP7_CONFIG) Specify full path to php-config7.]) AC_ARG_ENABLE(php7-force, [ --enable-php7-force always enable of the PHP 7 binding (win32)], [ENABLE_PHP7_FORCE="yes"], [ENABLE_PHP7_FORCE="no"]) dnl Check if user passed a specific php-config program. if test "X$with_php7_config" != "X" ; then PHP7_CONFIG=$with_php7_config fi if test "X$PHP7_CONFIG" != "X" ; then PHP7_INCLUDES=`$PHP7_CONFIG --includes` PHP7_LDFLAGS=`$PHP7_CONFIG --ldflags` PHP7_LIBS=`$PHP7_CONFIG --libs` PHP7_PREFIX=`$PHP7_CONFIG --prefix` PHP7_QUOTED_PREFIX=$(echo $PHP7_PREFIX | $SED 's/\//\\\//g') PHP7_UNPREFIXED_EXTENSION_DIR=$($PHP7_CONFIG --extension-dir | $SED "s/$PHP7_QUOTED_PREFIX//g") else # We assume PHP are in /usr/local directory. if test $MINGW -eq 1; then CFLAGS="$CFLAGS -DZTS -DZEND_WIN32 -DWIN32 -D_MBCS" fi PHP7_INCLUDES="-I/usr/local/include/php7 -I/usr/local/include/php7/main -I/usr/local/include/php7/Zend -I/usr/local/include/php7/TSRM -I/usr/local/include/php7/win32" PHP7_LDFLAGS= PHP7_LIBS="-lphp7ts -lxmlparse -lxmltok" PHP7_UNPREFIXED_EXTENSION_DIR= PHP7_PREFIX= fi AC_ARG_WITH(php7, [ --with-php7=(PHP) Specify full path to php 7 executable.], [PHP7="$withval"],[PHP7_INCLUDE_DIR=php7]) AC_ARG_WITH(php7-include-dir, [ --with-php7-include-dir=(PHP7_INCLUDE_DIR) Specify full path to php 7 include dir.], [PHP7_INCLUDE_DIR="$withval"],[PHP7_INCLUDE_DIR=${datadir}/php]) AC_ARG_WITH(php7-config-dir, [ --with-php7-config-dir=(PHP7_CONFIG_DIR) Specify full path to php 7 config dir.], [PHP7_CONFIG_DIR="$withval"],[PHP7_CONFIG_DIR=${sysconfdir}/php7/conf.d/]) AC_SUBST(PHP7_INCLUDES) AC_SUBST(PHP7_LDFLAGS) AC_SUBST(PHP7_LIBS) AC_SUBST(PHP7_UNPREFIXED_EXTENSION_DIR) AC_SUBST(PHP7_EXTENSION_DIR) AC_SUBST(PHP7_PREFIX) AC_SUBST(PHP7_INCLUDE_DIR) AC_SUBST(PHP7_CONFIG_DIR) AC_MSG_CHECKING(for PHP 7 development files) if $PHP7_CONFIG --version | grep -q "^7" || test "x$ENABLE_PHP7_FORCE" = "xyes" then PHP7_VERSION=`$PHP7_CONFIG --version 2> /dev/null` languages_available="$languages_available php7($PHP7_VERSION)" else enable_php7=no fi AC_MSG_RESULT($enable_php7) AM_CONDITIONAL([PHP7_ENABLED], [test "x$enable_php7" = "xyes"]) AC_SUBST(PHP7_VERSION) ### # ---------- ### # C# binding (disabled for the moment) ### # ---------- ### ### AC_ARG_ENABLE(csharp, [ --disable-csharp disable the C Sharp binding],, ### enable_csharp="yes") ### ### AC_ARG_WITH(cil-interpreter, [ --with-cil-interpreter=path set location of CIL interpreter for CSharp],[CSHARPBIN="$withval"], [CSHARPBIN=]) ### AC_ARG_WITH(csharp-compiler, [ --with-csharp-compiler=path set location of CSharp compiler],[CSHARPCOMPILERBIN="$withval"], [CSHARPCOMPILERBIN=]) ### ### if test -z "$CSHARPCOMPILERBIN" ; then ### case $host in ### *-*-cygwin* | *-*-mingw*) ### AC_CHECK_PROGS(CSHARPCOMPILER, mcs.bat cscc csc);; ### *)AC_CHECK_PROGS(CSHARPCOMPILER, mcs cscc);; ### esac ### else ### CSHARPCOMPILER="$CSHARPCOMPILERBIN" ### fi ### ### CSHARPPATHSEPARATOR="/" ### CSHARPCYGPATH_W=echo ### if test -z "$CSHARPBIN" ; then ### #languages_available="$languages_available C#($CSHARPCOMPILER)" ### CSHARPCILINTERPRETER="" ### if test "cscc" = "$CSHARPCOMPILER" ; then ### AC_CHECK_PROGS(CSHARPCILINTERPRETER, ilrun) ### else ### if test "mcs" = "$CSHARPCOMPILER"; then ### # Check that mcs is the C# compiler and not the Unix mcs utility by examining the output of 'mcs --version' ### # The Mono compiler should emit: Mono C# compiler version a.b.c.d ### csharp_version_raw=`(mcs --version) 2>/dev/null` ### csharp_version_searched=`(mcs --version | sed -n "/C#\|Mono/p") 2>/dev/null` ### CSHARPCOMPILER=""; ### if test -n "$csharp_version_raw" ; then ### if test "$csharp_version_raw" = "$csharp_version_searched" ; then ### CSHARPCOMPILER="mcs" ### fi ### fi ### ### # mono interpreter (ver 0.26 doesn't seem to work on Windows platforms) ### case $host in ### *-*-cygwin* | *-*-mingw*) ### ;; ### *)AC_CHECK_PROGS(CSHARPCILINTERPRETER, mint);; ### esac ### else ### if test "csc" = "$CSHARPCOMPILER"; then ### CSHARPPATHSEPARATOR="\\\\" ### CSHARPCYGPATH_W='cygpath -w' ### fi ### fi ### fi ### else ### CSHARPCILINTERPRETER="$CSHARPBIN" ### fi # Cygwin requires the Windows standard (Pascal) calling convention as it is a Windows executable and not a Cygwin built executable case $host in *-*-cygwin* | *-*-mingw*) if test "$GCC" = yes; then CSHARPDYNAMICLINKING=" -Wl,--add-stdcall-alias" else CSHARPDYNAMICLINKING="" fi ;; *)CSHARPDYNAMICLINKING="";; esac AC_CHECK_PROGS(GACUTIL, gacutil) AC_SUBST(CSHARPCILINTERPRETER) AC_SUBST(CSHARPCYGPATH_W) AC_SUBST(CSHARPCOMPILER) AC_SUBST(CSHARPDYNAMICLINKING) AC_SUBST(CSHARPLIBRARYPREFIX) # Is this going to be used? AC_SUBST(GACUTIL) if test "X$CSHARPCOMPILER" = X; then enable_csharp=no fi if test "X$GACUTIL" = X; then enable_csharp=no fi AM_CONDITIONAL([CSHARP_ENABLED], [test "x$enable_csharp" = "xyes"]) # ------------ # Perl binding # ------------ AC_ARG_ENABLE(perl, [ --disable-perl disable the Perl binding],, enable_perl="yes") if test "X$PERL" != "X"; then PERLINSTALLSITEARCH=`$PERL -MConfig -e 'print $Config{installsitearch};'` PERLMAN3DIR=`$PERL -MConfig -e 'print $Config{man3dir};'` PERL_CFLAGS=$($PERL -V::ccflags: | tr -d "'") else PERLINSTALLSITEARCH=none PERLMAN3DIR=none PERL_CFLAGS= fi AC_SUBST(PERLINSTALLSITEARCH) AC_SUBST(PERLMAN3DIR) AC_SUBST(PERL_CFLAGS) AC_MSG_CHECKING(for Perl API) if test "X$enable_perl" != "Xno" ; then if test "X$enable_perl" != "Xyes"; then PERL=$enable_perl fi enable_perl=yes fi PERL_VERSION=`$PERL -MConfig -e 'print $Config{version}' 2>/dev/null` if test "X$PERL_VERSION" != "X"; then languages_available="$languages_available perl($PERL_VERSION)" if test $enable_perl = yes; then languages="$languages perl" fi fi AM_CONDITIONAL([PERL_ENABLED],[test "x$enable_perl" = "xyes"]) AC_MSG_RESULT($enable_perl) AC_SUBST(PERL_VERSION) dnl Checks for zlib library (code adapted from libxml2 configure.in) _cppflags="${CPPFLAGS}" _ldflags="${LDFLAGS}" AC_ARG_WITH(zlib, [ --with-zlib[[=DIR]] use libz in DIR],[ if test "$withval" != "no" -a "$withval" != "yes"; then Z_DIR=$withval CPPFLAGS="${CPPFLAGS} -I$withval/include" LDFLAGS="${LDFLAGS} -L$withval/lib" fi ]) saved_LIB=$LIBS LIBS= AC_CHECK_HEADERS(zlib.h, AC_SEARCH_LIBS(gzread, [z zlib1],[ AC_DEFINE([HAVE_LIBZ], [], [Have compression library]) if test "x${Z_DIR}" != "x"; then Z_CFLAGS="-I${Z_DIR}/include" Z_LIBS="-L${Z_DIR}/lib $LIBS" [case ${host} in *-*-solaris*) Z_LIBS="-L${Z_DIR}/lib -R${Z_DIR}/lib $LIBS" ;; esac] else Z_LIBS="$LIBS" fi])) LIBS=$saved_LIB test "z$Z_LIBS" != "z" || AC_MSG_ERROR(missing zlib) AC_SUBST(Z_CFLAGS) AC_SUBST(Z_LIBS) CPPFLAGS=${_cppflags} LDFLAGS=${_ldflags} dnl Final step, add missing programs. AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir) AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir) AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir) AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir) dnl API Reference documentation support # gtkdocize greps for ^GTK_DOC_CHECK and parses it, so you need to have # it on it's own line. m4_ifdef([GTK_DOC_CHECK], [ GTK_DOC_CHECK([1.14],[--flavour no-tmpl]) ],[ AM_CONDITIONAL([ENABLE_GTK_DOC],[false]) ]) if test "z$with_html_dir" != "z" ; then LASSO_DOCDIR=$with_html_dir else LASSO_DOCDIR='$(datadir)/doc/lasso' fi AC_SUBST(LASSO_DOCDIR) AC_ARG_WITH(html-dir, [ --with-html-dir=PATH path to installed docs ]) if test "x$with_html_dir" = "x" ; then HTML_DIR='${datadir}/gtk-doc/html' else HTML_DIR=$with_html_dir fi AC_SUBST(HTML_DIR) dnl pkg-config path AC_ARG_WITH(pkg-config, [ --with-pkg-config=PATH set pkg-config metadata search path.], PKG_CONFIG_PATH="${withval}", PKG_CONFIG_PATH="") if test "z$PKG_CONFIG_PATH" != "z"; then export PKG_CONFIG_PATH fi PKG_CHECK_MODULES(LASSO, glib-2.0 >= 2.17.0 gobject-2.0 >= 2.17.0 libxml-2.0 xmlsec1 >= 1.2.6 xmlsec1-openssl >= 1.2.6 openssl) dnl ========================================================================== dnl Test suite (requires check) dnl ========================================================================== dnl Check if user disabled the tests. AC_ARG_ENABLE(tests, [ --disable-tests disable the test suite],, enable_tests="yes") if test "x$enable_tests" = xyes ; then PKG_CHECK_MODULES(CHECK, check, [], [ AC_CHECK_LIB(check, srunner_set_log, enable_tests="yes", enable_tests="no") CHECK_CFLAGS="" CHECK_LIBS="-lcheck" ]) AC_SUBST(CHECK_CFLAGS) AC_SUBST(CHECK_LIBS) AC_CHECK_LIB(check, srunner_set_xml, [AC_DEFINE(CHECK_IS_XML, [], [Define if check available with XML support])]) fi AM_CONDITIONAL(WITH_TESTS, [test "x$enable_tests" = "xyes"]) AC_CHECK_PROGS(REST2HTML, rest2html rst2html) AM_CONDITIONAL(HAVE_REST2HTML, test -n "$ac_cv_prog_REST2HTML") AC_CHECK_PROGS(XSLTPROC, xsltproc) AM_CONDITIONAL(HAVE_XSLTPROC, test -n "$ac_cv_prog_XSLTPROC") AC_CHECK_PROGS(INKSCAPE, inkscape) AM_CONDITIONAL(HAVE_INKSCAPE, test -n "$ac_cv_prog_INKSCAPE") dnl Debug AC_MSG_CHECKING(for debugging) AC_ARG_ENABLE(debugging, [ --enable-debugging enable debuging optimization flags (no)]) if test "z$enable_debugging" = "zyes" ; then enable_debugging=yes LASSO_DEFINES="$LASSO_DEFINES -DLASSO_DEBUG" CFLAGS="$CFLAGS -O0 -g -Wall -Wextra" else enable_debugging=no fi AM_CONDITIONAL([DEBUGGING],[test "x$enable_debugging" = "xyes"]) AC_MSG_RESULT($enable_debugging) AC_SUBST(DEBUGGING) dnl Profiling AC_MSG_CHECKING(for profiling) AC_ARG_ENABLE(profiling, [ --enable-profiling enable profiling compilation flags (no)]) if test "z$enable_profiling" = "zyes" ; then AM_CFLAGS="$AM_CFLAGS -pg" AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) fi AC_ARG_WITH([default-sign-algo], [AS_HELP_STRING([--with-default-sign-algo=[rsa-sha1|rsa-sha256]], [Default signing algorithm (rsa-sha1)] ) ] ) SIGNING_ALGO=rsa-sha1 if test x"$with_default_sign_algo" != x; then if test ! "$with_default_sign_algo" = "rsa-sha1" -a ! "$with_default_sign_algo" = "rsa-sha256"; then AC_MSG_ERROR("Default signing algorithm must be either rsa-sha1 or rsa-sha256") else SIGNING_ALGO=$with_default_sign_algo fi fi AC_DEFINE_UNQUOTED(DEFAULT_SIGNING_ALGO, "$SIGNING_ALGO", ["The default signing algorithm"]) AC_ARG_WITH([min-hash-algo], [AS_HELP_STRING([--with-min-hash-algo=[sha1|sha256|sha384|sha512]], [Minimal allowed hash algorithm (rsa-sha1)] ) ] ) MIN_HASH_ALGO=sha1 if test x"$with_min_hash_algo" != x; then if test ! "$with_min_hash_algo" = "sha1" -a ! "$with_min_hash_algo" = "sha256" -a ! "$with_min_hash_algo" = "sha384" -a ! "$with_min_hash_algo" = "sha512"; then AC_MSG_ERROR("Minimal allowed hash algorithm must be one of sha1, sha256, sha384 or sha512) else MIN_HASH_ALGO=$with_min_hash_algo fi fi AC_DEFINE_UNQUOTED(MIN_HASH_ALGO, "$MIN_HASH_ALGO", ["The minimal hash algorithm"]) AC_ARG_WITH([default-key-encryption-method], [AS_HELP_STRING([--with-default-key-encryption-method=[rsa-pkcs1|rsa-oaep]], [Default key encryption method (rsa-oaep)] ) ] ) KEY_ENCRYPTION_METHOD=rsa-oaep if test x"$with_default_" != x; then if test ! "$with_default_key_encryption_method" = "rsa-pkcs1" -a ! "$with_default_key_encryption_method" = "rsa-oaep"; then AC_MSG_ERROR("Default key encryption method must be either rsa-pkcs1 or rsa-oaep") else SIGNING_ALGO=$with_default_key_encryption_method fi fi AC_DEFINE_UNQUOTED(DEFAULT_KEY_ENCRYPTION_METHOD, "$KEY_ENCRYPTION_METHOD", ["The default key encryption method"]) dnl ========================================================================== dnl Pedantic compilation dnl ========================================================================== AC_MSG_CHECKING(for pedantic) AC_ARG_ENABLE(pedantic, [ --enable-pedantic enable pedantic compilation flags (no)]) if test "z$enable_pedantic" = "zyes" ; then CFLAGS="$CFLAGS -O -pedantic -Wall -ansi -fno-inline -W -Wunused -Wimplicit -Wreturn-type -Wswitch -Wcomment -Wtrigraphs -Wformat -Wchar-subscripts -Wuninitialized -Wparentheses -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -Waggregate-return -Wmissing-prototypes -Wnested-externs -Winline -Wredundant-decls" AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) fi dnl ========================================================================== dnl Static linking dnl ========================================================================== LASSO_STATIC_BINARIES="" AC_MSG_CHECKING(for static linking) AC_ARG_ENABLE(static_linking, [ --enable-static-linking enable static linking (no)]) if test "z$enable_static_linking" = "zyes" ; then LASSO_STATIC_BINARIES="-static" AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) fi AC_SUBST(LASSO_STATIC_BINARIES) dnl ========================================================================== dnl Final steps: lasso config dnl ========================================================================== LASSO_PUB_CFLAGS="$LASSO_DEFINES" LASSO_CORE_CFLAGS="$LASSO_CFLAGS $LASSO_DEFINES $Z_CFLAGS -DLASSO_INTERNALS" if test $MINGW -eq 1; then LASSO_CORE_LIBS="-llasso-0" else LASSO_CORE_LIBS="-llasso " fi AC_SUBST(LASSO_CORE_CFLAGS) AC_SUBST(LASSO_CORE_LIBS) LASSO_CFLAGS="$LASSO_CFLAGS" LASSO_LIBS="-L${libdir} $Z_LIBS $LASSO_LIBS" AC_SUBST(LASSO_CFLAGS) AC_SUBST(LASSO_LIBS) AC_SUBST(LASSO_PUB_CFLAGS) AC_SUBST(LASSO_DEFINES) AC_SUBST(LASSO_APP_DEFINES) AC_SUBST(CFLAGS) AC_SUBST(AM_CFLAGS) AC_SUBST(CPPFLAGS) AC_SUBST(LDFLAGS) AC_SUBST(CLASSPATH_JUNIT) AC_SUBST(SWIG_VERSION) dnl Dirty system often means dirty hacks... AM_CONDITIONAL(MINGW, test $MINGW -eq 1) AM_CONDITIONAL(DARWIN, test $DARWIN -eq 1) dnl bindings dnl ========================================================================== dnl Writing result files dnl ========================================================================== AC_CONFIG_FILES([lasso-src-config], [chmod +x lasso-src-config]) AC_OUTPUT( [Makefile docs/Makefile docs/lasso-book/Makefile docs/lasso-book/figures/Makefile docs/reference/Makefile docs/reference/lasso/version.xml docs/reference/lasso/Makefile lasso/Makefile lasso/id-ff/Makefile lasso/saml-2.0/Makefile lasso/xml/Makefile lasso/xml/ecp/Makefile lasso/xml/saml-2.0/Makefile lasso/xml/soap-1.1/Makefile lasso/xml/dsig/Makefile tests/Makefile tests/data/Makefile lasso.pc bindings/Makefile bindings/java/Makefile bindings/python/Makefile bindings/python/tests/Makefile bindings/php5/Makefile bindings/php5/examples/Makefile bindings/php5/tests/Makefile bindings/php7/Makefile bindings/php7/examples/Makefile bindings/php7/tests/Makefile bindings/perl/Makefile ]) languages_available=`echo $languages_available | sed -e "s/^ //" ` AC_MSG_RESULT( ============= Configuration ============= Main ---- Compiler: ${CC} CFLAGS: ${AM_CFLAGS} ${CFLAGS} Install prefix: ${prefix} Debugging: $enable_debugging Optionals builds ---------------- Available languages: ${languages_available} Java binding: ${enable_java} Perl binding: ${enable_perl} PHP 5 binding: ${enable_php5} PHP 7 binding: ${enable_php7} Python binding: ${enable_python} C API references: ${enable_gtk_doc} Tests suite: ${enable_tests} Crypto settings --------------- Default signature: ${SIGNING_ALGO} Minimal accepted hash: ${MIN_HASH_ALGO} Key encryption method: ${KEY_ENCRYPTION_METHOD} ) lasso-2.8.2/PaxHeaders/tools0000644000000000000000000000013214377351116013015 xustar0030 mtime=1677578830.303504525 30 atime=1678814326.421984131 30 ctime=1678814319.925947137 lasso-2.8.2/tools/0000755000175000017500000000000014377351116016342 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tools/PaxHeaders/check-lasso-sections.py0000644000000000000000000000013214050545511017455 xustar0030 mtime=1621281609.275307814 30 atime=1678098069.985489007 30 ctime=1678814319.925947137 lasso-2.8.2/tools/check-lasso-sections.py0000755000175000017500000000257614050545511022742 0ustar00bdauvergnebdauvergne00000000000000#!/usr/bin/env python import sys import os.path import re from six import print_ if len(sys.argv) < 3: print_("Usage: check-lasso-sections.py " "lasso docs/referenrece/lasso/lasso-sections.txt", file=sys.stderr) sys.exit(1) source=sys.argv[1] lasso_sections_txt=sys.argv[2] methods=[] for dirpath, dirnames, filenames in os.walk(source): for filename in filenames: _, ext = os.path.splitext(filename) with open(os.path.join(dirpath, filename)) as f: lines = f.readlines() while lines: line, lines = lines[0], lines[1:] line=line.strip() if line.startswith('LASSO_EXPORT'): while not ';' in line: line=line.strip() line, lines = line + lines[0], lines[1:] line=line.strip() m=re.match(r'LASSO_EXPORT[^(]*[ \t*](\w+)\s*\(', line) if m: methods.append(m.group(1)) lasso_sections_txt=file(lasso_sections_txt).read() print_(' = Methods missing from lasso-sections.txt =\n') for method in methods: if not method in lasso_sections_txt: print_(method) print_(' = Methods in lasso-sections.txt which does not exist anymore = \n') for line in lasso_sections_txt.splitlines(): if line.startswith('lasso_'): if line not in methods: print_(line) lasso-2.8.2/tools/PaxHeaders/format-suppressions.py0000644000000000000000000000013214050545511017477 xustar0030 mtime=1621281609.275307814 30 atime=1678098069.985489007 30 ctime=1678814319.925947137 lasso-2.8.2/tools/format-suppressions.py0000644000175000017500000000151314050545511022747 0ustar00bdauvergnebdauvergne00000000000000import re from six import print_ valgrind_log = open('log','r').read() inblock = False l = 0 i = 0 keep = dict() limit_re = r'type' for line in valgrind_log.splitlines(): if line.startswith('{'): inblock = True block = [] continue if line.startswith('}'): inblock = False l = 0 i += 1 ok = False name = "" for x in block[2:]: name = name + x if re.search(limit_re, x): ok = True break if ok: keep[name] = block continue if inblock: block.append(line) i = 43 for x in keep: block = keep[x] print_("{") print_(" suppression", i) for x in block[1:]: print_(x) if re.search(limit_re, x): break print_('}') i += 1 lasso-2.8.2/tools/PaxHeaders/check-makefile.sh0000644000000000000000000000013213766621500016254 xustar0030 mtime=1608196928.966896974 30 atime=1678098069.985489007 30 ctime=1678814319.925947137 lasso-2.8.2/tools/check-makefile.sh0000755000175000017500000000035513766621500021532 0ustar00bdauvergnebdauvergne00000000000000#!/bin/bash echo Check makefiles for missing .c or .h files cd `dirname $0`/.. for i in `git ls-files *.c *.h`; do pushd `dirname $i` >/dev/null f=`basename $i` if ! grep -q $f Makefile.am; then echo $i fi popd >/dev/null done lasso-2.8.2/tools/PaxHeaders/api.py0000644000000000000000000000013214117162531014206 xustar0030 mtime=1631380825.856638071 30 atime=1678098069.985489007 30 ctime=1678814319.925947137 lasso-2.8.2/tools/api.py0000644000175000017500000000232314117162531017456 0ustar00bdauvergnebdauvergne00000000000000import sys import os.path sys.path.append(os.path.join(os.path.dirname(__file__),'../bindings')) import bindings from six import print_ def main(args): class opt(): pass options = opt() srcdir = args[1] options.srcdir = srcdir options.language = None options.exception_doc = None bindings.binding = bindings.BindingData(options) bindings.exclude_private = False bindings.parse_headers(srcdir) binding = bindings.binding d = {} for x in binding.constants: d[x[1]] = x for x in binding.enums: d[x] = None for x in binding.functions: d[x.name] = x for x in binding.structs: d[x.name] = x l = sorted(d.keys()) for x in l: if isinstance(d[x], bindings.Function): print_(d[x].return_type, " ",) print_(x, end='') print_('(', ', '.join(map(lambda x: x[0] + ' ' + x[1], d[x].args)), ')') elif isinstance(d[x], bindings.Struct): print_('struct', x, '{ ',) print_(', '.join(map(lambda x: x[0] + ' ' + x[1], d[x].members)), end='') print_(' }') else: print_(x) if __name__ == "__main__": main(sys.argv) lasso-2.8.2/tools/PaxHeaders/gitlog-to-changelog0000644000000000000000000000013113766621500016644 xustar0030 mtime=1608196928.966896974 29 atime=1678814023.86025629 30 ctime=1678814319.925947137 lasso-2.8.2/tools/gitlog-to-changelog0000755000175000017500000003220513766621500022122 0ustar00bdauvergnebdauvergne00000000000000eval '(exit $?0)' && eval 'exec perl -wS "$0" ${1+"$@"}' & eval 'exec perl -wS "$0" $argv:q' if 0; # Convert git log output to ChangeLog format. # Copied from GNULib the GNU Portability Library my $VERSION = '2012-07-29 06:11'; # UTC # The definition above must lie within the first 8 lines in order # for the Emacs time-stamp write hook (at end) to update it. # If you change this file with Emacs, please let the write hook # do its job. Otherwise, update this string manually. # Copyright (C) 2008-2014 Free Software Foundation, Inc. # 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 Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Written by Jim Meyering use strict; use warnings; use Getopt::Long; use POSIX qw(strftime); (my $ME = $0) =~ s|.*/||; # use File::Coda; # http://meyering.net/code/Coda/ END { defined fileno STDOUT or return; close STDOUT and return; warn "$ME: failed to close standard output: $!\n"; $? ||= 1; } sub usage ($) { my ($exit_code) = @_; my $STREAM = ($exit_code == 0 ? *STDOUT : *STDERR); if ($exit_code != 0) { print $STREAM "Try '$ME --help' for more information.\n"; } else { print $STREAM < ChangeLog $ME -- -n 5 foo > last-5-commits-to-branch-foo SPECIAL SYNTAX: The following types of strings are interpreted specially when they appear at the beginning of a log message line. They are not copied to the output. Copyright-paperwork-exempt: Yes Append the "(tiny change)" notation to the usual "date name email" ChangeLog header to mark a change that does not require a copyright assignment. Co-authored-by: Joe User List the specified name and email address on a second ChangeLog header, denoting a co-author. Signed-off-by: Joe User These lines are simply elided. In a FILE specified via --amend, comment lines (starting with "#") are ignored. FILE must consist of pairs where SHA is a 40-byte SHA1 (alone on a line) referring to a commit in the current project, and CODE refers to one or more consecutive lines of Perl code. Pairs must be separated by one or more blank line. Here is sample input for use with --amend=FILE, from coreutils: 3a169f4c5d9159283548178668d2fae6fced3030 # fix typo in title: s/all tile types/all file types/ 1379ed974f1fa39b12e2ffab18b3f7a607082202 # Due to a bug in vc-dwim, I mis-attributed a patch by Paul to myself. # Change the author to be Paul. Note the escaped "@": s,Jim .*>,Paul Eggert , EOF } exit $exit_code; } # If the string $S is a well-behaved file name, simply return it. # If it contains white space, quotes, etc., quote it, and return the new string. sub shell_quote($) { my ($s) = @_; if ($s =~ m![^\w+/.,-]!) { # Convert each single quote to '\'' $s =~ s/\'/\'\\\'\'/g; # Then single quote the string. $s = "'$s'"; } return $s; } sub quoted_cmd(@) { return join (' ', map {shell_quote $_} @_); } # Parse file F. # Comment lines (starting with "#") are ignored. # F must consist of pairs where SHA is a 40-byte SHA1 # (alone on a line) referring to a commit in the current project, and # CODE refers to one or more consecutive lines of Perl code. # Pairs must be separated by one or more blank line. sub parse_amend_file($) { my ($f) = @_; open F, '<', $f or die "$ME: $f: failed to open for reading: $!\n"; my $fail; my $h = {}; my $in_code = 0; my $sha; while (defined (my $line = )) { $line =~ /^\#/ and next; chomp $line; $line eq '' and $in_code = 0, next; if (!$in_code) { $line =~ /^([0-9a-fA-F]{40})$/ or (warn "$ME: $f:$.: invalid line; expected an SHA1\n"), $fail = 1, next; $sha = lc $1; $in_code = 1; exists $h->{$sha} and (warn "$ME: $f:$.: duplicate SHA1\n"), $fail = 1, next; } else { $h->{$sha} ||= ''; $h->{$sha} .= "$line\n"; } } close F; $fail and exit 1; return $h; } # git_dir_option $SRCDIR # # From $SRCDIR, the --git-dir option to pass to git (none if $SRCDIR # is undef). Return as a list (0 or 1 element). sub git_dir_option($) { my ($srcdir) = @_; my @res = (); if (defined $srcdir) { my $qdir = shell_quote $srcdir; my $cmd = "cd $qdir && git rev-parse --show-toplevel"; my $qcmd = shell_quote $cmd; my $git_dir = qx($cmd); defined $git_dir or die "$ME: cannot run $qcmd: $!\n"; $? == 0 or die "$ME: $qcmd had unexpected exit code or signal ($?)\n"; chomp $git_dir; push @res, "--git-dir=$git_dir/.git"; } @res; } { my $since_date; my $format_string = '%s%n%b%n'; my $amend_file; my $append_dot = 0; my $cluster = 1; my $strip_tab = 0; my $strip_cherry_pick = 0; my $srcdir; GetOptions ( help => sub { usage 0 }, version => sub { print "$ME version $VERSION\n"; exit }, 'since=s' => \$since_date, 'format=s' => \$format_string, 'amend=s' => \$amend_file, 'append-dot' => \$append_dot, 'cluster!' => \$cluster, 'strip-tab' => \$strip_tab, 'strip-cherry-pick' => \$strip_cherry_pick, 'srcdir=s' => \$srcdir, ) or usage 1; defined $since_date and unshift @ARGV, "--since=$since_date"; # This is a hash that maps an SHA1 to perl code (i.e., s/old/new/) # that makes a correction in the log or attribution of that commit. my $amend_code = defined $amend_file ? parse_amend_file $amend_file : {}; my @cmd = ('git', git_dir_option $srcdir, qw(log --log-size), '--pretty=format:%H:%ct %an <%ae>%n%n'.$format_string, @ARGV); open PIPE, '-|', @cmd or die ("$ME: failed to run '". quoted_cmd (@cmd) ."': $!\n" . "(Is your Git too old? Version 1.5.1 or later is required.)\n"); my $prev_multi_paragraph; my $prev_date_line = ''; my @prev_coauthors = (); while (1) { defined (my $in = ) or last; $in =~ /^log size (\d+)$/ or die "$ME:$.: Invalid line (expected log size):\n$in"; my $log_nbytes = $1; my $log; my $n_read = read PIPE, $log, $log_nbytes; $n_read == $log_nbytes or die "$ME:$.: unexpected EOF\n"; # Extract leading hash. my ($sha, $rest) = split ':', $log, 2; defined $sha or die "$ME:$.: malformed log entry\n"; $sha =~ /^[0-9a-fA-F]{40}$/ or die "$ME:$.: invalid SHA1: $sha\n"; # If this commit's log requires any transformation, do it now. my $code = $amend_code->{$sha}; if (defined $code) { eval 'use Safe'; my $s = new Safe; # Put the unpreprocessed entry into "$_". $_ = $rest; # Let $code operate on it, safely. my $r = $s->reval("$code") or die "$ME:$.:$sha: failed to eval \"$code\":\n$@\n"; # Note that we've used this entry. delete $amend_code->{$sha}; # Update $rest upon success. $rest = $_; } # Remove lines inserted by "git cherry-pick". if ($strip_cherry_pick) { $rest =~ s/^\s*Conflicts:\n.*//sm; $rest =~ s/^\s*\(cherry picked from commit [\da-f]+\)\n//m; } my @line = split "\n", $rest; my $author_line = shift @line; defined $author_line or die "$ME:$.: unexpected EOF\n"; $author_line =~ /^(\d+) (.*>)$/ or die "$ME:$.: Invalid line " . "(expected date/author/email):\n$author_line\n"; # Format 'Copyright-paperwork-exempt: Yes' as a standard ChangeLog # `(tiny change)' annotation. my $tiny = (grep (/^Copyright-paperwork-exempt:\s+[Yy]es$/, @line) ? ' (tiny change)' : ''); my $date_line = sprintf "%s %s$tiny\n", strftime ("%F", localtime ($1)), $2; my @coauthors = grep /^Co-authored-by:.*$/, @line; # Omit meta-data lines we've already interpreted. @line = grep !/^(?:Signed-off-by:[ ].*>$ |Co-authored-by:[ ] |Copyright-paperwork-exempt:[ ] )/x, @line; # Remove leading and trailing blank lines. if (@line) { while ($line[0] =~ /^\s*$/) { shift @line; } while ($line[$#line] =~ /^\s*$/) { pop @line; } } # Record whether there are two or more paragraphs. my $multi_paragraph = grep /^\s*$/, @line; # Format 'Co-authored-by: A U Thor ' lines in # standard multi-author ChangeLog format. for (@coauthors) { s/^Co-authored-by:\s*/\t /; s/\s*/ or warn "$ME: warning: missing email address for " . substr ($_, 5) . "\n"; } # If clustering of commit messages has been disabled, if this header # would be different from the previous date/name/email/coauthors header, # or if this or the previous entry consists of two or more paragraphs, # then print the header. if ( ! $cluster || $date_line ne $prev_date_line || "@coauthors" ne "@prev_coauthors" || $multi_paragraph || $prev_multi_paragraph) { $prev_date_line eq '' or print "\n"; print $date_line; @coauthors and print join ("\n", @coauthors), "\n"; } $prev_date_line = $date_line; @prev_coauthors = @coauthors; $prev_multi_paragraph = $multi_paragraph; # If there were any lines if (@line == 0) { warn "$ME: warning: empty commit message:\n $date_line\n"; } else { if ($append_dot) { # If the first line of the message has enough room, then if (length $line[0] < 72) { # append a dot if there is no other punctuation or blank # at the end. $line[0] =~ /[[:punct:]\s]$/ or $line[0] .= '.'; } } # Remove one additional leading TAB from each line. $strip_tab and map { s/^\t// } @line; # Prefix each non-empty line with a TAB. @line = map { length $_ ? "\t$_" : '' } @line; print "\n", join ("\n", @line), "\n"; } defined ($in = ) or last; $in ne "\n" and die "$ME:$.: unexpected line:\n$in"; } close PIPE or die "$ME: error closing pipe from " . quoted_cmd (@cmd) . "\n"; # FIXME-someday: include $PROCESS_STATUS in the diagnostic # Complain about any unused entry in the --amend=F specified file. my $fail = 0; foreach my $sha (keys %$amend_code) { warn "$ME:$amend_file: unused entry: $sha\n"; $fail = 1; } exit $fail; } # Local Variables: # mode: perl # indent-tabs-mode: nil # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "my $VERSION = '" # time-stamp-format: "%:y-%02m-%02d %02H:%02M" # time-stamp-time-zone: "UTC" # time-stamp-end: "'; # UTC" # End: lasso-2.8.2/tools/PaxHeaders/spatch0000644000000000000000000000013214050545511014267 xustar0030 mtime=1621281609.275307814 30 atime=1678814326.421984131 30 ctime=1678814319.925947137 lasso-2.8.2/tools/spatch/0000755000175000017500000000000014050545511017614 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tools/spatch/PaxHeaders/add-second-arg-to-class-init.cocci0000644000000000000000000000013214050545511022602 xustar0030 mtime=1621281609.275307814 30 atime=1678098069.985489007 30 ctime=1678814319.925947137 lasso-2.8.2/tools/spatch/add-second-arg-to-class-init.cocci0000644000175000017500000000014614050545511026053 0ustar00bdauvergnebdauvergne00000000000000@@ type T; identifier klass; @@ static void class_init( T klass + , void* unused ) { ... } lasso-2.8.2/tools/spatch/PaxHeaders/remove-gstrcmp.spatch0000644000000000000000000000013213766621500020530 xustar0030 mtime=1608196928.966896974 30 atime=1678098069.985489007 30 ctime=1678814319.925947137 lasso-2.8.2/tools/spatch/remove-gstrcmp.spatch0000644000175000017500000000027713766621500024006 0ustar00bdauvergnebdauvergne00000000000000@@ expression E,D; @@ - g_strcmp0(E,D) == 0 + lasso_strisequal(E,D) @@ expression E,D; @@ - g_strcmp0(E,D) != 0 + lasso_strisnotequal(E,D) @@ @@ - lasso_is_empty_string + lasso_strisempty lasso-2.8.2/tools/PaxHeaders/git-version-gen0000644000000000000000000000013213766621500016030 xustar0030 mtime=1608196928.966896974 30 atime=1678814108.868759032 30 ctime=1678814319.925947137 lasso-2.8.2/tools/git-version-gen0000755000175000017500000001751613766621500021315 0ustar00bdauvergnebdauvergne00000000000000#!/bin/sh # Print a version string. scriptversion=2012-12-31.23; # UTC # Copyright (C) 2007-2013 Free Software Foundation, Inc. # # 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 Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # This script is derived from GIT-VERSION-GEN from GIT: http://git.or.cz/. # It may be run two ways: # - from a git repository in which the "git describe" command below # produces useful output (thus requiring at least one signed tag) # - from a non-git-repo directory containing a .tarball-version file, which # presumes this script is invoked like "./git-version-gen .tarball-version". # In order to use intra-version strings in your project, you will need two # separate generated version string files: # # .tarball-version - present only in a distribution tarball, and not in # a checked-out repository. Created with contents that were learned at # the last time autoconf was run, and used by git-version-gen. Must not # be present in either $(srcdir) or $(builddir) for git-version-gen to # give accurate answers during normal development with a checked out tree, # but must be present in a tarball when there is no version control system. # Therefore, it cannot be used in any dependencies. GNUmakefile has # hooks to force a reconfigure at distribution time to get the value # correct, without penalizing normal development with extra reconfigures. # # .version - present in a checked-out repository and in a distribution # tarball. Usable in dependencies, particularly for files that don't # want to depend on config.h but do want to track version changes. # Delete this file prior to any autoconf run where you want to rebuild # files to pick up a version string change; and leave it stale to # minimize rebuild time after unrelated changes to configure sources. # # As with any generated file in a VC'd directory, you should add # /.version to .gitignore, so that you don't accidentally commit it. # .tarball-version is never generated in a VC'd directory, so needn't # be listed there. # # Use the following line in your configure.ac, so that $(VERSION) will # automatically be up-to-date each time configure is run (and note that # since configure.ac no longer includes a version string, Makefile rules # should not depend on configure.ac for version updates). # # AC_INIT([GNU project], # m4_esyscmd([build-aux/git-version-gen .tarball-version]), # [bug-project@example]) # # Then use the following lines in your Makefile.am, so that .version # will be present for dependencies, and so that .version and # .tarball-version will exist in distribution tarballs. # # EXTRA_DIST = $(top_srcdir)/.version # BUILT_SOURCES = $(top_srcdir)/.version # $(top_srcdir)/.version: # echo $(VERSION) > $@-t && mv $@-t $@ # dist-hook: # echo $(VERSION) > $(distdir)/.tarball-version me=$0 version="git-version-gen $scriptversion Copyright 2011 Free Software Foundation, Inc. There is NO warranty. You may redistribute this software under the terms of the GNU General Public License. For more information about these matters, see the files named COPYING." usage="\ Usage: $me [OPTION]... \$srcdir/.tarball-version [TAG-NORMALIZATION-SED-SCRIPT] Print a version string. Options: --prefix prefix of git tags (default 'v') --fallback fallback version to use if \"git --version\" fails --help display this help and exit --version output version information and exit Running without arguments will suffice in most cases." prefix=v fallback= while test $# -gt 0; do case $1 in --help) echo "$usage"; exit 0;; --version) echo "$version"; exit 0;; --prefix) shift; prefix="$1";; --fallback) shift; fallback="$1";; -*) echo "$0: Unknown option '$1'." >&2 echo "$0: Try '--help' for more information." >&2 exit 1;; *) if test "x$tarball_version_file" = x; then tarball_version_file="$1" elif test "x$tag_sed_script" = x; then tag_sed_script="$1" else echo "$0: extra non-option argument '$1'." >&2 exit 1 fi;; esac shift done if test "x$tarball_version_file" = x; then echo "$usage" exit 1 fi tag_sed_script="${tag_sed_script:-s/x/x/}" nl=' ' # Avoid meddling by environment variable of the same name. v= v_from_git= # First see if there is a tarball-only version file. # then try "git describe", then default. if test -f $tarball_version_file then v=`cat $tarball_version_file` || v= case $v in *$nl*) v= ;; # reject multi-line output [0-9]*) ;; *) v= ;; esac test "x$v" = x \ && echo "$0: WARNING: $tarball_version_file is missing or damaged" 1>&2 fi if test "x$v" != x then : # use $v # Otherwise, if there is at least one git commit involving the working # directory, and "git describe" output looks sensible, use that to # derive a version string. elif test "`git log -1 --pretty=format:x . 2>&1`" = x \ && v=`git describe --abbrev=4 --match="$prefix*" HEAD 2>/dev/null \ || git describe --abbrev=4 HEAD 2>/dev/null` \ && v=`printf '%s\n' "$v" | sed "$tag_sed_script"` \ && case $v in $prefix[0-9]*) ;; *) (exit 1) ;; esac then # Is this a new git that lists number of commits since the last # tag or the previous older version that did not? # Newer: v6.10-77-g0f8faeb # Older: v6.10-g0f8faeb case $v in *-*-*) : git describe is okay three part flavor ;; *-*) : git describe is older two part flavor # Recreate the number of commits and rewrite such that the # result is the same as if we were using the newer version # of git describe. vtag=`echo "$v" | sed 's/-.*//'` commit_list=`git rev-list "$vtag"..HEAD 2>/dev/null` \ || { commit_list=failed; echo "$0: WARNING: git rev-list failed" 1>&2; } numcommits=`echo "$commit_list" | wc -l` v=`echo "$v" | sed "s/\(.*\)-\(.*\)/\1-$numcommits-\2/"`; test "$commit_list" = failed && v=UNKNOWN ;; esac # Change the first '-' to a '.', so version-comparing tools work properly. # Remove the "g" in git describe's output string, to save a byte. v=`echo "$v" | sed 's/-/./;s/\(.*\)-g/\1.g/'`; v_from_git=1 elif test "x$fallback" = x || git --version >/dev/null 2>&1; then v=UNKNOWN else v=$fallback fi v=`echo "$v" |sed "s/^$prefix//"` # Test whether to append the "-dirty" suffix only if the version # string we're using came from git. I.e., skip the test if it's "UNKNOWN" # or if it came from .tarball-version. if test "x$v_from_git" != x; then # Don't declare a version "dirty" merely because a time stamp has changed. git update-index --refresh > /dev/null 2>&1 dirty=`exec 2>/dev/null;git diff-index --name-only HEAD` || dirty= case "$dirty" in '') ;; *) # Append the suffix only if there isn't one already. case $v in *-dirty) ;; *) v="$v-dirty" ;; esac ;; esac fi # Omit the trailing newline, so that m4_esyscmd can use the result directly. echo "$v" | tr -d "$nl" # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: lasso-2.8.2/PaxHeaders/HACKING0000644000000000000000000000013113766621500012716 xustar0029 mtime=1608196928.71889494 30 atime=1678098070.001489133 30 ctime=1678814319.941947229 lasso-2.8.2/HACKING0000644000175000017500000000365313766621500016176 0ustar00bdauvergnebdauvergne00000000000000============ Coding Style ============ - Use explicit ``!= NULL``, ``!= 0``, etc. This makes code easier to read and remove warnings on some platform. Don't forget SPACES before and after the comparison operator. Examples: BAD: ``if (a)`` BAD: ``if (a!=NULL)`` GOOD: ``if (a != NULL)`` GOOD: ``if (a != 0)`` - Put figure brackets ``{}`` even if you have only one operator in ``if``, ``for``, etc. This also makes code easier to read and saves a lot of time when you need to quickly change something. Examples: BAD: .. line-block:: if (a != NULL) message(G_LOG_LEVEL_MESSAGE, "Ko"); GOOD: .. line-block:: if (a != NULL) { message(G_LOG_LEVEL_MESSAGE, "Ok"); } - Put SPACES before the opening round bracket and after the closing round bracket with ``if``, ``for``, ``switch``, ``while``, etc. One more time, it improves the readability of the code. Examples: BAD: .. line-block:: if(a != NULL){ message(G_LOG_LEVEL_MESSAGE, "Ko"); } GOOD: .. line-block:: if (a != NULL) { message(G_LOG_LEVEL_MESSAGE, "Ok"); } - Limit line length to at most 100 characters. - Check for memory leaks. I recommend valgrind (http://valgrind.kde.org) utility with options: --leak-check=yes --show-reachable=yes --num-callers=32 --suppressions=tests/valgrind/openssl.supp GNU Emacs ========= :: (defun lasso-c-mode () "C mode with adjusted defaults for use with Lasso." (interactive) (c-mode) (c-set-style "K&R") (setq tab-width 8) (setq indent-tabs-mode t) (setq c-basic-offset 8)) This will define the M-x lasso-c-mode command. It can be switched on automatically in a given directory:: (setq auto-mode-alist (cons '("/usr/src/lasso.*/.*\\.[ch]$" . lasso-c-mode) auto-mode-alist)) lasso-2.8.2/PaxHeaders/INSTALL0000644000000000000000000000013013766621500012757 xustar0029 mtime=1608196928.71889494 29 atime=1678098069.96548885 30 ctime=1678814319.897946978 lasso-2.8.2/INSTALL0000644000175000017500000002264713766621500016244 0ustar00bdauvergnebdauvergne00000000000000================ Installing Lasso ================ Lasso uses the GNU automake and autoconf to handle system dependency checking. It is developed and built locally on GNU/Linux (Debian) both on x86 and PowerPC processors, but is also compiled via Debian infrastructure on several other architectures. Installing build dependencies ============================= If you are building from git you need to install the autotools on your distribution. Buid dependencies are: - libxml2 - libxslt - libxmlsec - python development files - php5 development files - jdk In all cases you need to install development packages for dependencies. On Debian 7.0 Wheezy: aptitude install libxml2-dev libxslt1-dev libxmlsec1-dev libxmlsec1-openssl \ libglib2.0-dev python-all-dev fastjar php5-dev php5-cli python-lxml Python bindings require the "six" library: pip install six Basic Installation ================== The 'configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a 'Makefile' in each directory of the package. It may also create one or more '.h' files containing system-dependent definitions. Finally, it creates a shell script 'config.status' that you can run in the future to recreate the current configuration, a file 'config.cache' that saves the results of its tests to speed up reconfiguring, and a file 'config.log' containing compiler output (useful mainly for debugging 'configure'). If you need to do unusual things to compile the package, please try to figure out how 'configure' could check whether to do them, and mail diffs or instructions to the address given in the README_ so they can be considered for the next release. If at some point 'config.cache' contains results you don't want to keep, you may remove or edit it. The file 'configure.in' is used to create 'configure' by a program called 'autoconf'. You only need 'configure.in' if you want to change it or regenerate 'configure' using a newer version of 'autoconf'. The simplest way to compile this package is: 1. ``cd`` to the directory containing the package's source code and type ``./configure`` to configure the package for your system. If you're using 'csh' on an old version of System V, you might need to type ``sh ./configure`` instead to prevent 'csh' from trying to execute 'configure' itself. Running 'configure' takes awhile. While running, it prints some messages telling which features it is checking for. 2. Type ``make`` to compile the package. 3. Optionally, type ``make check`` to run any self-tests that come with the package. 4. Type ``make install`` to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing ``make clean``. To also remove the files that 'configure' created (so you can compile the package for a different kind of computer), type ``make distclean``. There is also a ``make maintainer-clean`` target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. Creating 'configure' Program ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ If there is no 'configure' program, you can create it by running the 'autogen.sh' script, as long as you have the 'automake' and 'autoconf' tools. This is done by:: ./autogen.sh and you can also pass along arguments intended for 'configure' (see below for what these are):: ./autogen.sh --prefix=/usr/local/somewhere The 'automake' and 'autoconf' tools have many different versions and at present development is being done with automake 1.8, autoconf 2.59 and libtool 1.5.6. These are only needed when compiling from CVS sources. 'autogen.sh' enforces the requirements. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the 'configure' script does not know about. You can give 'configure' initial values for variables by setting them in the environment. Using a Bourne-compatible shell, you can do that on the command line like this:: CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure Or on systems that have the 'env' program, you can do it like this:: env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you must use a version of 'make' that supports the 'VPATH' variable, such as GNU 'make'. 'cd' to the directory where you want the object files and executables to go and run the 'configure' script. 'configure' automatically checks for the source code in the directory that 'configure' is in and in '..'. If you have to use a 'make' that does not supports the 'VPATH' variable, you have to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use 'make distclean' before reconfiguring for another architecture. Installation Names ================== By default, 'make install' will install the package's files in '/usr/local/bin', '/usr/local/man', etc. You can specify an installation prefix other than '/usr/local' by giving 'configure' the option '--prefix=PATH'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you give 'configure' the option '--exec-prefix=PATH', the package will use PATH as the prefix for installing programs and libraries. Documentation and other data files will still use the regular prefix. In addition, if you use an unusual directory layout you can give options like '--bindir=PATH' to specify different values for particular kinds of files. Run 'configure --help' for a list of the directories you can set and what kinds of files go in them. You can cause programs to be installed with an extra prefix or suffix on their names by giving 'configure' the option '--program-prefix=PREFIX' or '--program-suffix=SUFFIX'. Optional Features ================= These package pays attention to '--enable-FEATURE' or '--disable-FEATURE' options to 'configure', where FEATURE indicates an optional part of the package. It also pays attention to '--with-PACKAGE' options, where PACKAGE is something like 'gnu-ld' or 'pic'. 'configure' recognizes the following FEATUREs: debugging Display debugging messages in 'stderr'. gtk-doc Build Lasso API reference manual using gtk-doc system (enabled by default if gtk-doc is installed). tests Build unit test suite (enabled by default) 'configure' recognizes the following PACKAGEs: .. coldfusion Build Lasso ColdFusion binding (enabled by default, use ``--with-coldfusion=no`` to disable). java Build Lasso Java binding (enabled by default, use ``--with-java=no`` to disable). .. php Build Lasso PHP binding (enabled by default, use ``--with-php=no`` to disable). python Build Lasso Python binding (enabled by default, use ``--with-python=no`` to disable). Specifying the System Type ========================== There may be some features 'configure' can not figure out automatically, but needs to determine by the type of host the package will run on. Usually 'configure' can figure that out, but if it prints a message saying it can not guess the host type, give it the '--host=TYPE' option. TYPE can either be a short name for the system type, such as 'sun4', or a canonical name with three fields: CPU-COMPANY-SYSTEM See the file 'config.sub' for the possible values of each field. If 'config.sub' isn't included in this package, then this package doesn't need to know the host type. If you are building compiler tools for cross-compiling, you can also use the '--target=TYPE' option to select the type of system they will produce code for and the '--build=TYPE' option to select the type of system on which you are compiling the package. Sharing Defaults ================ If you want to set default values for 'configure' scripts to share, you can create a site shell script called 'config.site' that gives default values for variables like 'CC', 'cache_file', and 'prefix'. 'configure' looks for 'PREFIX/share/config.site' if it exists, then 'PREFIX/etc/config.site' if it exists. Or, you can set the 'CONFIG_SITE' environment variable to the location of the site script. A warning: not all 'configure' scripts look for a site script. Operation Controls ================== 'configure' recognizes the following options to control how it operates. --cache-file=FILE Use and save the results of the tests in FILE instead of './config.cache'. Set FILE to '/dev/null' to disable caching, for debugging 'configure'. --help Print a summary of the options to 'configure', and exit. -q, --quiet, --silent Do not print messages saying which checks are being made. To suppress all normal output, redirect it to '/dev/null' (any error messages will still be shown). --srcdir=DIR Look for the package's source code in directory DIR. Usually 'configure' can determine that directory automatically. --version Print the version of Autoconf used to generate the 'configure' script, and exit. 'configure' also accepts some other, not widely useful, options. lasso-2.8.2/PaxHeaders/Makefile.am0000644000000000000000000000013214117162531013757 xustar0030 mtime=1631380825.844637909 30 atime=1678814109.020759878 30 ctime=1678814319.845946682 lasso-2.8.2/Makefile.am0000644000175000017500000000207314117162531017231 0ustar00bdauvergnebdauvergne00000000000000ACLOCAL_AMFLAGS = -I m4 SUBDIRS = lasso \ tests \ bindings \ docs EXTRA_DIST = COPYING lasso.pc.in lasso-src-config.in autogen.sh tools abi \ lasso.doap README.JAVA README.WIN32 HACKING logos $(top_srcdir)/.version BUILT_SOURCES = $(top_srcdir)/.version MAINTAINERCLEANFILES = \ Makefile.in \ config.guess \ config.sub \ configure \ install-sh \ missing pkgconfig_DATA = lasso.pc pkgconfigdir = $(libdir)/pkgconfig clean-local: -rm -f lasso.pc dist-hook: @if test -d "$(srcdir)/.git"; \ then \ echo Creating ChangeLog && \ ( cd "$(top_srcdir)" && \ echo '# Generated by Makefile. Do not edit.'; echo; \ $(top_srcdir)/missing --run git log --stat ) > ChangeLog.tmp \ && mv -f ChangeLog.tmp $(distdir)/ChangeLog \ || ( rm -f ChangeLog.tmp ; \ echo Failed to generate ChangeLog >&2 ); \ else \ echo A git clone is required to generate a ChangeLog >&2; \ fi echo $(VERSION) > $(distdir)/.tarball-version DISTCHECK_CONFIGURE_FLAGS=--enable-gtk-doc $(top_srcdir)/.version: echo $(VERSION) > $@-t && mv $@-t $@ lasso-2.8.2/PaxHeaders/README0000644000000000000000000000013113766621500012607 xustar0029 mtime=1608196928.71889494 30 atime=1678098069.969488882 30 ctime=1678814319.901947001 lasso-2.8.2/README0000644000175000017500000000561413766621500016066 0ustar00bdauvergnebdauvergne00000000000000============== Lasso Overview ============== Current homepage: Lasso (Liberty Alliance Single Sign-On) is a free (GNU GPL) implementation of the Liberty Alliance specifications. Those define processes for federated identities, single sign-on and related protocols. Lasso provides both a C library and bindings for different languages. Liberty Alliance Project homepage: The latest version of Lasso can be found on the labs.libre-entreprise.org website, Lasso has several mailing lists: - lasso-devel@lists.labs.libre-entreprise.org The mailing list for Lasso users and developers; discussions about both development and deployment of Lasso have their place on this list. - lasso-cvs-commits@lists.labs.libre-entreprise.org This list just distributes notices about commits to the Lasso CVS tree. It has no discussions, and it is not interesting unless you wish to take part in development. There is also a bug tracking system on the labs.libre-entreprise.org website, Lasso was originally written by Nicolas Clapiès and Valéry Febvre. Please see the file AUTHORS_ for a list of major contributors, and the ChangeLog for a detailed listing of all contributions. :: Copyright (c) 2004-2008 Entr'ouvert Excepted the Lasso logo, copyright (c) 2004, Entr'ouvert & Florent Monnier 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 Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. In addition, as a special exception, Entr'ouvert gives permission to link the code of its release of Lasso with the OpenSSL project's "OpenSSL" library (or with modified versions of it that use the same license as the "OpenSSL" library), and distribute the linked executables. You must obey the GNU General Public License in all respects for all of the code used other than "OpenSSL". If you modify this file, you may extend this exception to your version of the file, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version. lasso-2.8.2/PaxHeaders/lasso.doap0000644000000000000000000000013214117162531013711 xustar0030 mtime=1631380825.848637964 30 atime=1678098069.997489101 30 ctime=1678814319.937947205 lasso-2.8.2/lasso.doap0000644000175000017500000001425514117162531017170 0ustar00bdauvergnebdauvergne00000000000000 Lasso lasso 2003-07-01 Lasso (Liberty Alliance Single Sign On) is a free (GNU GPL) implementation of the Liberty Alliance specifications. Those define protocols for federated identities, single sign-on, etc. Lasso supports ID-FF 1.2, SAML 2.0; it provides both a C library and bindings for several languages (Python, Java, Perl, PHP 4 and PHP 5). Free Software implementation of Liberty Alliance specifications C Python Java PHP Perl Liberty Alliance ID-FF 1.2 OASIS SAML 2.0 Benjamin Dauvergne Frédéric Péters Jérôme Schneider 2011-11-29 2.3.6 2011-01-05 2.3.5 2010-10-13 2.3.4 2010-10-01 2.3.3 2010-09-07 2.3.2 2010-09-07 2.3.1 2010-07-21 2.3.0 2010-01-26 2.2.91 2010-01-18 2.2.90 2009-03-27 2.2.2 2008-07-22 2.2.1 2008-05-28 2.2.0 2007-08-20 2.1.1 2007-08-13 2.1.0 2007-01-16 2.0.0 2006-12-19 1.9.9 2006-10-16 0.6.6 2006-03-21 0.6.5 2006-03-08 0.6.4 2005-09-30 0.6.3 2005-05-26 0.6.2 2005-02-22 0.6.1 2005-01-27 0.6.0 2004-11-09 0.5.0 2004-09-07 0.4.1 2004-09-06 0.4.0 2004-07-27 0.3.0 2004-06-01 0.2.0 lasso-2.8.2/PaxHeaders/lasso.pc.in0000644000000000000000000000013213766621500014002 xustar0030 mtime=1608196928.766895334 30 atime=1678814150.000988213 30 ctime=1678814319.881946887 lasso-2.8.2/lasso.pc.in0000644000175000017500000000051513766621500017253 0ustar00bdauvergnebdauvergne00000000000000prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ Name: lasso Version: @VERSION@ Description: A free implementation of the Liberty Alliance specifications Requires.private: libxml-2.0 libxslt xmlsec1 glib-2.0 gobject-2.0 Cflags: -I${includedir} @LASSO_PUB_CFLAGS@ Libs: -L${libdir} @LASSO_CORE_LIBS@ lasso-2.8.2/PaxHeaders/Makefile.in0000644000000000000000000000013114404125673013774 xustar0030 mtime=1678814139.176927778 29 atime=1678814149.74098676 30 ctime=1678814319.877946865 lasso-2.8.2/Makefile.in0000644000175000017500000010143114404125673017245 0ustar00bdauvergnebdauvergne00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ac_check_class.m4 \ $(top_srcdir)/m4/ac_check_classpath.m4 \ $(top_srcdir)/m4/ac_check_junit.m4 \ $(top_srcdir)/m4/ac_prog_jar.m4 \ $(top_srcdir)/m4/ac_prog_java.m4 \ $(top_srcdir)/m4/ac_prog_java_works.m4 \ $(top_srcdir)/m4/ac_prog_javac.m4 \ $(top_srcdir)/m4/ac_prog_javac_works.m4 \ $(top_srcdir)/m4/ac_prog_javah.m4 \ $(top_srcdir)/m4/ac_try_compile_java.m4 \ $(top_srcdir)/m4/as-compiler-flag.m4 \ $(top_srcdir)/m4/dps_java_check_class.m4 \ $(top_srcdir)/m4/dps_xtra_classpath.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ $(am__configure_deps) $(am__DIST_COMMON) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h $(top_builddir)/lasso/lasso_config.h CONFIG_CLEAN_FILES = lasso-src-config lasso.pc CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgconfigdir)" DATA = $(pkgconfig_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope distdir distdir-am dist dist-all distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(srcdir)/lasso-src-config.in $(srcdir)/lasso.pc.in AUTHORS \ COPYING ChangeLog INSTALL NEWS README compile config.guess \ config.sub install-sh ltmain.sh missing DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best DIST_TARGETS = dist-gzip # Exists only to be overridden by the user if desired. AM_DISTCHECK_DVI_TARGET = dvi distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CHECK_CFLAGS = @CHECK_CFLAGS@ CHECK_LIBS = @CHECK_LIBS@ CLASSPATH_JUNIT = @CLASSPATH_JUNIT@ CLASSPATH_OPT = @CLASSPATH_OPT@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CSHARPCILINTERPRETER = @CSHARPCILINTERPRETER@ CSHARPCOMPILER = @CSHARPCOMPILER@ CSHARPCYGPATH_W = @CSHARPCYGPATH_W@ CSHARPDYNAMICLINKING = @CSHARPDYNAMICLINKING@ CSHARPLIBRARYPREFIX = @CSHARPLIBRARYPREFIX@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEBUGGING = @DEBUGGING@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLL_FILENAME = @DLL_FILENAME@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GACUTIL = @GACUTIL@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HTML_DIR = @HTML_DIR@ INKSCAPE = @INKSCAPE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVAC_FLAGS = @JAVAC_FLAGS@ JAVAH = @JAVAH@ JAVAH_FLAGS = @JAVAH_FLAGS@ JAVA_INCLUDE = @JAVA_INCLUDE@ JAVA_JUNIT = @JAVA_JUNIT@ JAVA_VERSION = @JAVA_VERSION@ JDK_INCLUDE = @JDK_INCLUDE@ JNI_EXTRA_LDFLAGS = @JNI_EXTRA_LDFLAGS@ JUNIT = @JUNIT@ LASSO_APP_DEFINES = @LASSO_APP_DEFINES@ LASSO_CFLAGS = @LASSO_CFLAGS@ LASSO_CORE_CFLAGS = @LASSO_CORE_CFLAGS@ LASSO_CORE_LIBS = @LASSO_CORE_LIBS@ LASSO_DEFINES = @LASSO_DEFINES@ LASSO_DOCDIR = @LASSO_DOCDIR@ LASSO_LIBS = @LASSO_LIBS@ LASSO_PUB_CFLAGS = @LASSO_PUB_CFLAGS@ LASSO_STATIC_BINARIES = @LASSO_STATIC_BINARIES@ LASSO_VERSION_INFO = @LASSO_VERSION_INFO@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PERLINSTALLSITEARCH = @PERLINSTALLSITEARCH@ PERLMAN3DIR = @PERLMAN3DIR@ PERL_CFLAGS = @PERL_CFLAGS@ PERL_VERSION = @PERL_VERSION@ PHP5 = @PHP5@ PHP5_CONFIG = @PHP5_CONFIG@ PHP5_CONFIG_DIR = @PHP5_CONFIG_DIR@ PHP5_EXTENSION_DIR = @PHP5_EXTENSION_DIR@ PHP5_INCLUDES = @PHP5_INCLUDES@ PHP5_INCLUDE_DIR = @PHP5_INCLUDE_DIR@ PHP5_LDFLAGS = @PHP5_LDFLAGS@ PHP5_LIBS = @PHP5_LIBS@ PHP5_PREFIX = @PHP5_PREFIX@ PHP5_UNPREFIXED_EXTENSION_DIR = @PHP5_UNPREFIXED_EXTENSION_DIR@ PHP5_VERSION = @PHP5_VERSION@ PHP7 = @PHP7@ PHP7_CONFIG = @PHP7_CONFIG@ PHP7_CONFIG_DIR = @PHP7_CONFIG_DIR@ PHP7_EXTENSION_DIR = @PHP7_EXTENSION_DIR@ PHP7_INCLUDES = @PHP7_INCLUDES@ PHP7_INCLUDE_DIR = @PHP7_INCLUDE_DIR@ PHP7_LDFLAGS = @PHP7_LDFLAGS@ PHP7_LIBS = @PHP7_LIBS@ PHP7_PREFIX = @PHP7_PREFIX@ PHP7_UNPREFIXED_EXTENSION_DIR = @PHP7_UNPREFIXED_EXTENSION_DIR@ PHP7_VERSION = @PHP7_VERSION@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PYTHON = @PYTHON@ PYTHON_VERSION = @PYTHON_VERSION@ PY_CFLAGS = @PY_CFLAGS@ PY_DYNLOAD = @PY_DYNLOAD@ PY_EXTRA_LIBS = @PY_EXTRA_LIBS@ PY_LIB_A = @PY_LIB_A@ PY_LIB_LOC = @PY_LIB_LOC@ PY_SITE_PACKAGES = @PY_SITE_PACKAGES@ RANLIB = @RANLIB@ RC = @RC@ REST2HTML = @REST2HTML@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_VERSION = @SWIG_VERSION@ TAR = @TAR@ TESTS_JUNIT = @TESTS_JUNIT@ UPCASED_DLL_FILENAME = @UPCASED_DLL_FILENAME@ VERSION = @VERSION@ VERSION_UNDERSCORED = @VERSION_UNDERSCORED@ WINDOWS_VERSION = @WINDOWS_VERSION@ XSLTPROC = @XSLTPROC@ Z_CFLAGS = @Z_CFLAGS@ Z_LIBS = @Z_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ uudecode = @uudecode@ ACLOCAL_AMFLAGS = -I m4 SUBDIRS = lasso \ tests \ bindings \ docs EXTRA_DIST = COPYING lasso.pc.in lasso-src-config.in autogen.sh tools abi \ lasso.doap README.JAVA README.WIN32 HACKING logos $(top_srcdir)/.version BUILT_SOURCES = $(top_srcdir)/.version MAINTAINERCLEANFILES = \ Makefile.in \ config.guess \ config.sub \ configure \ install-sh \ missing pkgconfig_DATA = lasso.pc pkgconfigdir = $(libdir)/pkgconfig DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc all: $(BUILT_SOURCES) config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @test -f $@ || rm -f stamp-h1 @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 lasso-src-config: $(top_builddir)/config.status $(srcdir)/lasso-src-config.in cd $(top_builddir) && $(SHELL) ./config.status $@ lasso.pc: $(top_builddir)/config.status $(srcdir)/lasso.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool config.lt install-pkgconfigDATA: $(pkgconfig_DATA) @$(NORMAL_INSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ done uninstall-pkgconfigDATA: @$(NORMAL_UNINSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-zstd: distdir tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst $(am__post_remove_distdir) dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir @echo WARNING: "Support for shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ *.tar.zst*) \ zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build/sub \ && ../../configure \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ --srcdir=../.. --prefix="$$dc_install_base" \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) $(AM_DISTCHECK_DVI_TARGET) \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-recursive all-am: Makefile $(DATA) config.h installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(pkgconfigdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-recursive install-exec: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-recursive clean-am: clean-generic clean-libtool clean-local mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr \ distclean-libtool distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-pkgconfigDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-pkgconfigDATA .MAKE: $(am__recursive_targets) all check install install-am \ install-exec install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--refresh check check-am clean clean-cscope clean-generic \ clean-libtool clean-local cscope cscopelist-am ctags ctags-am \ dist dist-all dist-bzip2 dist-gzip dist-hook dist-lzip \ dist-shar dist-tarZ dist-xz dist-zip dist-zstd distcheck \ distclean distclean-generic distclean-hdr distclean-libtool \ distclean-tags distcleancheck distdir distuninstallcheck dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-pkgconfigDATA install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am \ uninstall-pkgconfigDATA .PRECIOUS: Makefile clean-local: -rm -f lasso.pc dist-hook: @if test -d "$(srcdir)/.git"; \ then \ echo Creating ChangeLog && \ ( cd "$(top_srcdir)" && \ echo '# Generated by Makefile. Do not edit.'; echo; \ $(top_srcdir)/missing --run git log --stat ) > ChangeLog.tmp \ && mv -f ChangeLog.tmp $(distdir)/ChangeLog \ || ( rm -f ChangeLog.tmp ; \ echo Failed to generate ChangeLog >&2 ); \ else \ echo A git clone is required to generate a ChangeLog >&2; \ fi echo $(VERSION) > $(distdir)/.tarball-version $(top_srcdir)/.version: echo $(VERSION) > $@-t && mv $@-t $@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lasso-2.8.2/PaxHeaders/m40000644000000000000000000000013214404126157012171 xustar0030 mtime=1678814319.873946842 30 atime=1678814326.421984131 30 ctime=1678814319.873946842 lasso-2.8.2/m4/0000755000175000017500000000000014404126157015516 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/m4/PaxHeaders/ac_check_class.m40000644000000000000000000000013214377347354015432 xustar0030 mtime=1677577964.999349691 30 atime=1678814109.372761834 30 ctime=1678814319.849946705 lasso-2.8.2/m4/ac_check_class.m40000644000175000017500000001241314377347354020703 0ustar00bdauvergnebdauvergne00000000000000##### http://autoconf-archive.cryp.to/ac_check_class.html # # SYNOPSIS # # AC_CHECK_CLASS # # DESCRIPTION # # AC_CHECK_CLASS tests the existence of a given Java class, either in # a jar or in a '.class' file. # # *Warning*: its success or failure can depend on a proper setting of # the CLASSPATH env. variable. # # Note: This is part of the set of autoconf M4 macros for Java # programs. It is VERY IMPORTANT that you download the whole set, # some macros depend on other. Unfortunately, the autoconf archive # does not support the concept of set of macros, so I had to break it # for submission. The general documentation, as well as the sample # configure.in, is included in the AC_PROG_JAVA macro. # # LAST MODIFICATION # # 2000-07-19 # # COPYLEFT # # Copyright (c) 2000 Stephane Bortzmeyer # # 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 Free Software Foundation; either version 2 of the # License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception, the respective Autoconf Macro's copyright # owner gives unlimited permission to copy, distribute and modify the # configure scripts that are the output of Autoconf when processing # the Macro. You need not follow the terms of the GNU General Public # License when using or distributing such scripts, even though # portions of the text of the Macro appear in them. The GNU General # Public License (GPL) does govern all other use of the material that # constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the # Autoconf Macro released by the Autoconf Macro Archive. When you # make and distribute a modified version of the Autoconf Macro, you # may extend this special exception to the GPL to apply to your # modified version as well. AC_DEFUN([AC_CHECK_CLASS],[ AC_REQUIRE([AC_PROG_JAVA]) ac_var_name=`echo $1 | sed 's/\./_/g'` dnl Normaly I'd use a AC_CACHE_CHECK here but since the variable name is dnl dynamic I need an extra level of extraction AC_MSG_CHECKING([for $1 class]) AC_CACHE_VAL(ac_cv_class_$ac_var_name, [ if test x$ac_cv_prog_uudecode_base64 = xyes; then dnl /** dnl * Test.java: used to test dynamicaly if a class exists. dnl */ dnl public class Test dnl { dnl dnl public static void dnl main( String[] argv ) dnl { dnl Class lib; dnl if (argv.length < 1) dnl { dnl System.err.println ("Missing argument"); dnl System.exit (77); dnl } dnl try dnl { dnl lib = Class.forName (argv[0]); dnl } dnl catch (ClassNotFoundException e) dnl { dnl System.exit (1); dnl } dnl lib = null; dnl System.exit (0); dnl } dnl dnl } cat << \EOF > Test.uue begin-base64 644 Test.class yv66vgADAC0AKQcAAgEABFRlc3QHAAQBABBqYXZhL2xhbmcvT2JqZWN0AQAE bWFpbgEAFihbTGphdmEvbGFuZy9TdHJpbmc7KVYBAARDb2RlAQAPTGluZU51 bWJlclRhYmxlDAAKAAsBAANlcnIBABVMamF2YS9pby9QcmludFN0cmVhbTsJ AA0ACQcADgEAEGphdmEvbGFuZy9TeXN0ZW0IABABABBNaXNzaW5nIGFyZ3Vt ZW50DAASABMBAAdwcmludGxuAQAVKExqYXZhL2xhbmcvU3RyaW5nOylWCgAV ABEHABYBABNqYXZhL2lvL1ByaW50U3RyZWFtDAAYABkBAARleGl0AQAEKEkp VgoADQAXDAAcAB0BAAdmb3JOYW1lAQAlKExqYXZhL2xhbmcvU3RyaW5nOylM amF2YS9sYW5nL0NsYXNzOwoAHwAbBwAgAQAPamF2YS9sYW5nL0NsYXNzBwAi AQAgamF2YS9sYW5nL0NsYXNzTm90Rm91bmRFeGNlcHRpb24BAAY8aW5pdD4B AAMoKVYMACMAJAoAAwAlAQAKU291cmNlRmlsZQEACVRlc3QuamF2YQAhAAEA AwAAAAAAAgAJAAUABgABAAcAAABtAAMAAwAAACkqvgSiABCyAAwSD7YAFBBN uAAaKgMyuAAeTKcACE0EuAAaAUwDuAAasQABABMAGgAdACEAAQAIAAAAKgAK AAAACgAAAAsABgANAA4ADgATABAAEwASAB4AFgAiABgAJAAZACgAGgABACMA JAABAAcAAAAhAAEAAQAAAAUqtwAmsQAAAAEACAAAAAoAAgAAAAQABAAEAAEA JwAAAAIAKA== ==== EOF if uudecode$EXEEXT Test.uue; then : else echo "configure: __oline__: uudecode had trouble decoding base 64 file 'Test.uue'" >&AC_FD_CC echo "configure: failed file was:" >&AC_FD_CC cat Test.uue >&AC_FD_CC ac_cv_prog_uudecode_base64=no fi rm -f Test.uue if AC_TRY_COMMAND($JAVA $JAVAFLAGS Test $1) >/dev/null 2>&1; then eval "ac_cv_class_$ac_var_name=yes" else eval "ac_cv_class_$ac_var_name=no" fi rm -f Test.class else AC_TRY_COMPILE_JAVA([$1], , [eval "ac_cv_class_$ac_var_name=yes"], [eval "ac_cv_class_$ac_var_name=no"]) fi eval "ac_var_val=$`eval echo ac_cv_class_$ac_var_name`" eval "HAVE_$ac_var_name=$`echo ac_cv_class_$ac_var_val`" HAVE_LAST_CLASS=$ac_var_val if test x$ac_var_val = xyes; then ifelse([$2], , :, [$2]) else ifelse([$3], , :, [$3]) fi ]) dnl for some reason the above statment didn't fall though here? dnl do scripts have variable scoping? eval "ac_var_val=$`eval echo ac_cv_class_$ac_var_name`" AC_MSG_RESULT($ac_var_val) ]) lasso-2.8.2/m4/PaxHeaders/ltversion.m40000644000000000000000000000013214404125665014540 xustar0030 mtime=1678814133.664897034 30 atime=1678814133.968898729 30 ctime=1678814319.873946842 lasso-2.8.2/m4/ltversion.m40000644000175000017500000000131214404125665020005 0ustar00bdauvergnebdauvergne00000000000000# ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004, 2011-2019, 2021-2022 Free Software Foundation, # Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # @configure_input@ # serial 4245 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.4.7]) m4_define([LT_PACKAGE_REVISION], [2.4.7]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.4.7' macro_revision='2.4.7' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) lasso-2.8.2/m4/PaxHeaders/dps_java_check_class.m40000644000000000000000000000013114377347355016636 xustar0029 mtime=1677577965.00334971 30 atime=1678814109.368761811 30 ctime=1678814319.865946796 lasso-2.8.2/m4/dps_java_check_class.m40000644000175000017500000000632414377347355022114 0ustar00bdauvergnebdauvergne00000000000000##### http://autoconf-archive.cryp.to/dps_java_check_class.html # # SYNOPSIS # # DPS_JAVA_CHECK_CLASS(,,) # # DESCRIPTION # # Test if a Java class is available. Based on AC_PROG_JAVAC_WORKS. # This version uses a cache variable which is both compiler, options # and classpath dependent (so if you switch from javac to gcj it # correctly notices and redoes the test). # # The macro tries to compile a minimal program importing . # Some newer compilers moan about the failure to use this but fail or # produce a class file anyway. All moaing is sunk to /dev/null since # I only wanted to know if the class could be imported. This is a # recommended followup to DPS_CHECK_JAVA_PLUGIN with classpath # appropriately adjusted. # # LAST MODIFICATION # # 2008-01-28 # # COPYLEFT # # Copyright (c) 2008 Duncan Simpson # # 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 Free Software Foundation; either version 2 of the # License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception, the respective Autoconf Macro's copyright # owner gives unlimited permission to copy, distribute and modify the # configure scripts that are the output of Autoconf when processing # the Macro. You need not follow the terms of the GNU General Public # License when using or distributing such scripts, even though # portions of the text of the Macro appear in them. The GNU General # Public License (GPL) does govern all other use of the material that # constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the # Autoconf Macro released by the Autoconf Macro Archive. When you # make and distribute a modified version of the Autoconf Macro, you # may extend this special exception to the GPL to apply to your # modified version as well. AC_DEFUN([DPS_JAVA_CHECK_CLASS],[ m4_define([cache_val],[m4_translit(dps_cv_have_java_class_$1, " ." ,"__")]) if test "x$CLASSPATH" != "x"; then xtra=" with classpath ${CLASSPATH}" xopts=`echo ${CLASSPATH} | ${SED} 's/^ *://'` xopts="-classpath $xopts" else xtra=""; xopts=""; fi cache_var="cache_val"AS_TR_SH([_Jc_${JAVAC}_Cp_${CLASSPATH}]) AC_CACHE_CHECK([if the $1 class is available$xtra], [$cache_var], [ JAVA_TEST=Testing.java CLASS_TEST=Testing.class cat << \EOF > $JAVA_TEST /* [#]xline __oline__ "configure" */ import $1; public class Testing { } EOF if AC_TRY_COMMAND($JAVAC $JAVACFLAGS $xopts $JAVA_TEST) >/dev/null 2>&1; then eval "${cache_var}=yes" else eval "${cache_var}=no" echo "configure: failed program was:" >&AC_FD_CC cat $JAVA_TEST >&AC_FD_CC fi rm -f $JAVA_TEST $CLASS_TEST ]) if eval 'test "x$'${cache_var}'" = "xyes"'; then $2 true; else $3 false; fi]) lasso-2.8.2/m4/PaxHeaders/ac_prog_java_works.m40000644000000000000000000000013114377347355016365 xustar0029 mtime=1677577965.00334971 30 atime=1678814109.372761834 30 ctime=1678814319.857946751 lasso-2.8.2/m4/ac_prog_java_works.m40000644000175000017500000001061514377347355021641 0ustar00bdauvergnebdauvergne00000000000000##### http://autoconf-archive.cryp.to/ac_prog_java_works.html # # SYNOPSIS # # AC_PROG_JAVA_WORKS # # DESCRIPTION # # Internal use ONLY. # # Note: This is part of the set of autoconf M4 macros for Java # programs. It is VERY IMPORTANT that you download the whole set, # some macros depend on other. Unfortunately, the autoconf archive # does not support the concept of set of macros, so I had to break it # for submission. The general documentation, as well as the sample # configure.in, is included in the AC_PROG_JAVA macro. # # LAST MODIFICATION # # 2000-07-19 # # COPYLEFT # # Copyright (c) 2000 Stephane Bortzmeyer # # 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 Free Software Foundation; either version 2 of the # License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception, the respective Autoconf Macro's copyright # owner gives unlimited permission to copy, distribute and modify the # configure scripts that are the output of Autoconf when processing # the Macro. You need not follow the terms of the GNU General Public # License when using or distributing such scripts, even though # portions of the text of the Macro appear in them. The GNU General # Public License (GPL) does govern all other use of the material that # constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the # Autoconf Macro released by the Autoconf Macro Archive. When you # make and distribute a modified version of the Autoconf Macro, you # may extend this special exception to the GPL to apply to your # modified version as well. AC_DEFUN([AC_PROG_JAVA_WORKS], [ AC_CHECK_PROG(uudecode, uudecode$EXEEXT, yes) if test x$uudecode = xyes; then AC_CACHE_CHECK([if uudecode can decode base 64 file], ac_cv_prog_uudecode_base64, [ dnl /** dnl * Test.java: used to test if java compiler works. dnl */ dnl public class Test dnl { dnl dnl public static void dnl main( String[] argv ) dnl { dnl System.exit (0); dnl } dnl dnl } cat << \EOF > Test.uue begin-base64 644 Test.class yv66vgADAC0AFQcAAgEABFRlc3QHAAQBABBqYXZhL2xhbmcvT2JqZWN0AQAE bWFpbgEAFihbTGphdmEvbGFuZy9TdHJpbmc7KVYBAARDb2RlAQAPTGluZU51 bWJlclRhYmxlDAAKAAsBAARleGl0AQAEKEkpVgoADQAJBwAOAQAQamF2YS9s YW5nL1N5c3RlbQEABjxpbml0PgEAAygpVgwADwAQCgADABEBAApTb3VyY2VG aWxlAQAJVGVzdC5qYXZhACEAAQADAAAAAAACAAkABQAGAAEABwAAACEAAQAB AAAABQO4AAyxAAAAAQAIAAAACgACAAAACgAEAAsAAQAPABAAAQAHAAAAIQAB AAEAAAAFKrcAErEAAAABAAgAAAAKAAIAAAAEAAQABAABABMAAAACABQ= ==== EOF if uudecode$EXEEXT Test.uue; then ac_cv_prog_uudecode_base64=yes else echo "configure: __oline__: uudecode had trouble decoding base 64 file 'Test.uue'" >&AC_FD_CC echo "configure: failed file was:" >&AC_FD_CC cat Test.uue >&AC_FD_CC ac_cv_prog_uudecode_base64=no fi rm -f Test.uue]) fi if test x$ac_cv_prog_uudecode_base64 != xyes; then rm -f Test.class AC_MSG_WARN([I have to compile Test.class from scratch]) if test x$ac_cv_prog_javac_works = xno; then true fi if test x$ac_cv_prog_javac_works = x; then AC_PROG_JAVAC fi fi AC_CACHE_CHECK(if $JAVA works, ac_cv_prog_java_works, [ JAVA_TEST=Test.java CLASS_TEST=Test.class TEST=Test changequote(, )dnl cat << \EOF > $JAVA_TEST /* [#]line __oline__ "configure" */ public class Test { public static void main (String args[]) { System.exit (0); } } EOF changequote([, ])dnl if test x$ac_cv_prog_uudecode_base64 != xyes; then if AC_TRY_COMMAND($JAVAC $JAVACFLAGS $JAVA_TEST) && test -s $CLASS_TEST; then : else echo "configure: failed program was:" >&AC_FD_CC cat $JAVA_TEST >&AC_FD_CC true fi fi if AC_TRY_COMMAND($JAVA $JAVAFLAGS $TEST) >/dev/null 2>&1; then ac_cv_prog_java_works=yes else echo "configure: failed program was:" >&AC_FD_CC cat $JAVA_TEST >&AC_FD_CC true fi rm -fr $JAVA_TEST $CLASS_TEST Test.uue ]) AC_PROVIDE([$0])dnl ] ) lasso-2.8.2/m4/PaxHeaders/gtk-doc.m40000644000000000000000000000007414010230124014024 xustar0030 atime=1678814109.368761811 30 ctime=1678814319.865946796 lasso-2.8.2/m4/gtk-doc.m40000644000175000017500000001066014010230124017272 0ustar00bdauvergnebdauvergne00000000000000# -*- mode: autoconf -*- # # gtk-doc.m4 - configure macro to check for gtk-doc # Copyright (C) 2003 James Henstridge # 2007-2017 Stefan Sauer # # 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 Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # # As a special exception, the above copyright owner gives unlimited # permission to copy, distribute and modify the configure scripts that # are the output of Autoconf when processing the Macro. You need not # follow the terms of the GNU General Public License when using or # distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # serial 2 dnl Usage: dnl GTK_DOC_CHECK([minimum-gtk-doc-version]) AC_DEFUN([GTK_DOC_CHECK], [ AC_REQUIRE([PKG_PROG_PKG_CONFIG]) AC_BEFORE([AC_PROG_LIBTOOL],[$0])dnl setup libtool first AC_BEFORE([AM_PROG_LIBTOOL],[$0])dnl setup libtool first ifelse([$1],[],[gtk_doc_requires="gtk-doc"],[gtk_doc_requires="gtk-doc >= $1"]) AC_MSG_CHECKING([for gtk-doc]) PKG_CHECK_EXISTS([$gtk_doc_requires],[have_gtk_doc=yes],[have_gtk_doc=no]) AC_MSG_RESULT($have_gtk_doc) if test "$have_gtk_doc" = "no"; then AC_MSG_WARN([ You will not be able to create source packages with 'make dist' because $gtk_doc_requires is not found.]) fi dnl check for tools we added during development dnl Use AC_CHECK_PROG to avoid the check target using an absolute path that dnl may not be writable by the user. Currently, automake requires that the dnl test name must end in '.test'. dnl https://bugzilla.gnome.org/show_bug.cgi?id=701638 AC_CHECK_PROG([GTKDOC_CHECK],[gtkdoc-check],[gtkdoc-check.test]) AC_PATH_PROG([GTKDOC_CHECK_PATH],[gtkdoc-check]) AC_PATH_PROGS([GTKDOC_REBASE],[gtkdoc-rebase],[true]) AC_PATH_PROG([GTKDOC_MKPDF],[gtkdoc-mkpdf]) dnl for overriding the documentation installation directory AC_ARG_WITH([html-dir], AS_HELP_STRING([--with-html-dir=PATH], [path to installed docs]),, [with_html_dir='${datadir}/gtk-doc/html']) HTML_DIR="$with_html_dir" AC_SUBST([HTML_DIR]) dnl enable/disable documentation building AC_ARG_ENABLE([gtk-doc], AS_HELP_STRING([--enable-gtk-doc], [use gtk-doc to build documentation [[default=no]]]),, [enable_gtk_doc=no]) AC_MSG_CHECKING([whether to build gtk-doc documentation]) AC_MSG_RESULT($enable_gtk_doc) if test "x$enable_gtk_doc" = "xyes" && test "$have_gtk_doc" = "no"; then AC_MSG_ERROR([ You must have $gtk_doc_requires installed to build documentation for $PACKAGE_NAME. Please install gtk-doc or disable building the documentation by adding '--disable-gtk-doc' to '[$]0'.]) fi dnl don't check for glib if we build glib if test "x$PACKAGE_NAME" != "xglib"; then dnl don't fail if someone does not have glib PKG_CHECK_MODULES(GTKDOC_DEPS, glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0,,[:]) fi dnl enable/disable output formats AC_ARG_ENABLE([gtk-doc-html], AS_HELP_STRING([--enable-gtk-doc-html], [build documentation in html format [[default=yes]]]),, [enable_gtk_doc_html=yes]) AC_ARG_ENABLE([gtk-doc-pdf], AS_HELP_STRING([--enable-gtk-doc-pdf], [build documentation in pdf format [[default=no]]]),, [enable_gtk_doc_pdf=no]) if test -z "$GTKDOC_MKPDF"; then enable_gtk_doc_pdf=no fi if test -z "$AM_DEFAULT_VERBOSITY"; then AM_DEFAULT_VERBOSITY=1 fi AC_SUBST([AM_DEFAULT_VERBOSITY]) AM_CONDITIONAL([HAVE_GTK_DOC], [test x$have_gtk_doc = xyes]) AM_CONDITIONAL([ENABLE_GTK_DOC], [test x$enable_gtk_doc = xyes]) AM_CONDITIONAL([GTK_DOC_BUILD_HTML], [test x$enable_gtk_doc_html = xyes]) AM_CONDITIONAL([GTK_DOC_BUILD_PDF], [test x$enable_gtk_doc_pdf = xyes]) AM_CONDITIONAL([GTK_DOC_USE_LIBTOOL], [test -n "$LIBTOOL"]) AM_CONDITIONAL([GTK_DOC_USE_REBASE], [test -n "$GTKDOC_REBASE"]) ]) lasso-2.8.2/m4/PaxHeaders/ac_prog_java.m40000644000000000000000000000013114377347355015140 xustar0029 mtime=1677577965.00334971 30 atime=1678814109.372761834 30 ctime=1678814319.853946727 lasso-2.8.2/m4/ac_prog_java.m40000644000175000017500000000774514377347355020426 0ustar00bdauvergnebdauvergne00000000000000##### http://autoconf-archive.cryp.to/ac_prog_java.html # # SYNOPSIS # # AC_PROG_JAVA # # DESCRIPTION # # Here is a summary of the main macros: # # AC_PROG_JAVAC: finds a Java compiler. # # AC_PROG_JAVA: finds a Java virtual machine. # # AC_CHECK_CLASS: finds if we have the given class (beware of # CLASSPATH!). # # AC_CHECK_RQRD_CLASS: finds if we have the given class and stops # otherwise. # # AC_TRY_COMPILE_JAVA: attempt to compile user given source. # # AC_TRY_RUN_JAVA: attempt to compile and run user given source. # # AC_JAVA_OPTIONS: adds Java configure options. # # AC_PROG_JAVA tests an existing Java virtual machine. It uses the # environment variable JAVA then tests in sequence various common # Java virtual machines. For political reasons, it starts with the # free ones. You *must* call [AC_PROG_JAVAC] before. # # If you want to force a specific VM: # # - at the configure.in level, set JAVA=yourvm before calling # AC_PROG_JAVA # # (but after AC_INIT) # # - at the configure level, setenv JAVA # # You can use the JAVA variable in your Makefile.in, with @JAVA@. # # *Warning*: its success or failure can depend on a proper setting of # the CLASSPATH env. variable. # # TODO: allow to exclude virtual machines (rationale: most Java # programs cannot run with some VM like kaffe). # # Note: This is part of the set of autoconf M4 macros for Java # programs. It is VERY IMPORTANT that you download the whole set, # some macros depend on other. Unfortunately, the autoconf archive # does not support the concept of set of macros, so I had to break it # for submission. # # A Web page, with a link to the latest CVS snapshot is at # . # # This is a sample configure.in Process this file with autoconf to # produce a configure script. # # AC_INIT(UnTag.java) # # dnl Checks for programs. # AC_CHECK_CLASSPATH # AC_PROG_JAVAC # AC_PROG_JAVA # # dnl Checks for classes # AC_CHECK_RQRD_CLASS(org.xml.sax.Parser) # AC_CHECK_RQRD_CLASS(com.jclark.xml.sax.Driver) # # AC_OUTPUT(Makefile) # # LAST MODIFICATION # # 2000-07-19 # # COPYLEFT # # Copyright (c) 2000 Stephane Bortzmeyer # # 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 Free Software Foundation; either version 2 of the # License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception, the respective Autoconf Macro's copyright # owner gives unlimited permission to copy, distribute and modify the # configure scripts that are the output of Autoconf when processing # the Macro. You need not follow the terms of the GNU General Public # License when using or distributing such scripts, even though # portions of the text of the Macro appear in them. The GNU General # Public License (GPL) does govern all other use of the material that # constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the # Autoconf Macro released by the Autoconf Macro Archive. When you # make and distribute a modified version of the Autoconf Macro, you # may extend this special exception to the GPL to apply to your # modified version as well. AC_DEFUN([AC_PROG_JAVA],[ AC_REQUIRE([AC_EXEEXT])dnl if test x$JAVAPREFIX = x; then test x$JAVA = x && AC_CHECK_PROGS(JAVA, kaffe$EXEEXT java$EXEEXT) else test x$JAVA = x && AC_CHECK_PROGS(JAVA, kaffe$EXEEXT java$EXEEXT, $JAVAPREFIX) fi true AC_PROG_JAVA_WORKS AC_PROVIDE([$0])dnl ]) lasso-2.8.2/m4/PaxHeaders/ac_check_junit.m40000644000000000000000000000013214377347354015456 xustar0030 mtime=1677577964.999349691 30 atime=1678814109.372761834 30 ctime=1678814319.853946727 lasso-2.8.2/m4/ac_check_junit.m40000644000175000017500000000364314377347354020734 0ustar00bdauvergnebdauvergne00000000000000##### http://autoconf-archive.cryp.to/ac_check_junit.html # # SYNOPSIS # # AC_CHECK_JUNIT # # DESCRIPTION # # AC_CHECK_JUNIT tests the availability of the Junit testing # framework, and set some variables for conditional compilation of # the test suite by automake. # # If available, JUNIT is set to a command launching the text based # user interface of Junit, @JAVA_JUNIT@ is set to $JAVA_JUNIT and # @TESTS_JUNIT@ is set to $TESTS_JUNIT, otherwise they are set to # empty values. # # You can use these variables in your Makefile.am file like this : # # # Some of the following classes are built only if junit is available # JAVA_JUNIT = Class1Test.java Class2Test.java AllJunitTests.java # # noinst_JAVA = Example1.java Example2.java @JAVA_JUNIT@ # # EXTRA_JAVA = $(JAVA_JUNIT) # # TESTS_JUNIT = AllJunitTests # # TESTS = StandaloneTest1 StandaloneTest2 @TESTS_JUNIT@ # # EXTRA_TESTS = $(TESTS_JUNIT) # # AllJunitTests : # echo "#! /bin/sh" > $@ # echo "exec @JUNIT@ my.package.name.AllJunitTests" >> $@ # chmod +x $@ # # LAST MODIFICATION # # 2001-03-02 # # COPYLEFT # # Copyright (c) 2001 Luc Maisonobe # # Copying and distribution of this file, with or without # modification, are permitted in any medium without royalty provided # the copyright notice and this notice are preserved. AC_DEFUN([AC_CHECK_JUNIT],[ AC_CACHE_VAL(ac_cv_prog_JUNIT,[ AC_CHECK_CLASS(junit.textui.TestRunner) if test x"`eval 'echo $ac_cv_class_junit_textui_TestRunner'`" != xno ; then ac_cv_prog_JUNIT='$(CLASSPATH_ENV) $(JAVA) $(JAVAFLAGS) junit.textui.TestRunner' fi]) AC_MSG_CHECKING([for junit]) if test x"`eval 'echo $ac_cv_prog_JUNIT'`" != x ; then JUNIT="$ac_cv_prog_JUNIT" JAVA_JUNIT='$(JAVA_JUNIT)' TESTS_JUNIT='$(TESTS_JUNIT)' else JUNIT= JAVA_JUNIT= TESTS_JUNIT= fi AC_MSG_RESULT($JUNIT) AC_SUBST(JUNIT) AC_SUBST(JAVA_JUNIT) AC_SUBST(TESTS_JUNIT)]) lasso-2.8.2/m4/PaxHeaders/as-compiler-flag.m40000644000000000000000000000013114377347355015647 xustar0029 mtime=1677577965.00334971 30 atime=1678814109.368761811 30 ctime=1678814319.861946773 lasso-2.8.2/m4/as-compiler-flag.m40000644000175000017500000000273714377347355021131 0ustar00bdauvergnebdauvergne00000000000000dnl as-compiler-flag.m4 0.1.0 dnl autostars m4 macro for detection of compiler flags dnl David Schleef dnl $Id: as-compiler-flag.m4,v 1.1 2005/12/15 23:35:19 ds Exp $ dnl AS_COMPILER_FLAG(CFLAGS, ACTION-IF-ACCEPTED, [ACTION-IF-NOT-ACCEPTED]) dnl Tries to compile with the given CFLAGS. dnl Runs ACTION-IF-ACCEPTED if the compiler can compile with the flags, dnl and ACTION-IF-NOT-ACCEPTED otherwise. AC_DEFUN([AS_COMPILER_FLAG], [ AC_MSG_CHECKING([to see if compiler understands $1]) save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $1" AC_TRY_COMPILE([ ], [], [flag_ok=yes], [flag_ok=no]) CFLAGS="$save_CFLAGS" if test "X$flag_ok" = Xyes ; then m4_ifvaln([$2],[$2]) true else m4_ifvaln([$3],[$3]) true fi AC_MSG_RESULT([$flag_ok]) ]) dnl AS_COMPILER_FLAGS(VAR, FLAGS) dnl Tries to compile with the given CFLAGS. AC_DEFUN([AS_COMPILER_FLAGS], [ list=$2 flags_supported="" flags_unsupported="" AC_MSG_CHECKING([for supported compiler flags]) for each in $list do save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $each" AC_TRY_COMPILE([ ], [], [flag_ok=yes], [flag_ok=no]) CFLAGS="$save_CFLAGS" if test "X$flag_ok" = Xyes ; then flags_supported="$flags_supported $each" else flags_unsupported="$flags_unsupported $each" fi done AC_MSG_RESULT([$flags_supported]) if test "X$flags_unsupported" != X ; then AC_MSG_WARN([unsupported compiler flags: $flags_unsupported]) fi $1="$$1 $flags_supported" ]) lasso-2.8.2/m4/PaxHeaders/ltoptions.m40000644000000000000000000000013214404125665014546 xustar0030 mtime=1678814133.652896967 30 atime=1678814133.968898729 30 ctime=1678814319.869946818 lasso-2.8.2/m4/ltoptions.m40000644000175000017500000003427514404125665020031 0ustar00bdauvergnebdauvergne00000000000000# Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004-2005, 2007-2009, 2011-2019, 2021-2022 Free # Software Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 8 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) # ------------------------------------------ m4_define([_LT_MANGLE_OPTION], [[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) # _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) # --------------------------------------- # Set option OPTION-NAME for macro MACRO-NAME, and if there is a # matching handler defined, dispatch to it. Other OPTION-NAMEs are # saved as a flag. m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), [m4_warning([Unknown $1 option '$2'])])[]dnl ]) # _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) # ------------------------------------------------------------ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. m4_define([_LT_IF_OPTION], [m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) # _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) # ------------------------------------------------------- # Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME # are set. m4_define([_LT_UNLESS_OPTIONS], [m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), [m4_define([$0_found])])])[]dnl m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ])[]dnl ]) # _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) # ---------------------------------------- # OPTION-LIST is a space-separated list of Libtool options associated # with MACRO-NAME. If any OPTION has a matching handler declared with # LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about # the unknown option and exit. m4_defun([_LT_SET_OPTIONS], [# Set options m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [_LT_SET_OPTION([$1], _LT_Option)]) m4_if([$1],[LT_INIT],[ dnl dnl Simply set some default values (i.e off) if boolean options were not dnl specified: _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ]) _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ]) dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither dnl 'shared' nor 'disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], [_LT_ENABLE_FAST_INSTALL]) _LT_UNLESS_OPTIONS([LT_INIT], [aix-soname=aix aix-soname=both aix-soname=svr4], [_LT_WITH_AIX_SONAME([aix])]) ]) ])# _LT_SET_OPTIONS ## --------------------------------- ## ## Macros to handle LT_INIT options. ## ## --------------------------------- ## # _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) # ----------------------------------------- m4_define([_LT_MANGLE_DEFUN], [[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) # LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) # ----------------------------------------------- m4_define([LT_OPTION_DEFINE], [m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ])# LT_OPTION_DEFINE # dlopen # ------ LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ]) AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) # win32-dll # --------- # Declare package support for building win32 dll's. LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; esac test -z "$AS" && AS=as _LT_DECL([], [AS], [1], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl ])# win32-dll AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- # implement the --enable-shared flag, and supports the 'shared' and # 'disable-shared' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS=$lt_save_ifs ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) _LT_DECL([build_libtool_libs], [enable_shared], [0], [Whether or not to build shared libraries]) ])# _LT_ENABLE_SHARED LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) # Old names: AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_SHARED], []) dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- # implement the --enable-static flag, and support the 'static' and # 'disable-static' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS=$lt_save_ifs ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) _LT_DECL([build_old_libs], [enable_static], [0], [Whether or not to build static libraries]) ])# _LT_ENABLE_STATIC LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) # Old names: AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_STATIC], []) dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- # implement the --enable-fast-install flag, and support the 'fast-install' # and 'disable-fast-install' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS=$lt_save_ifs ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) _LT_DECL([fast_install], [enable_fast_install], [0], [Whether or not to optimize for fast installation])dnl ])# _LT_ENABLE_FAST_INSTALL LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) # Old names: AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_AIX_SONAME([DEFAULT]) # ---------------------------------- # implement the --with-aix-soname flag, and support the `aix-soname=aix' # and `aix-soname=both' and `aix-soname=svr4' LT_INIT options. DEFAULT # is either `aix', `both' or `svr4'. If omitted, it defaults to `aix'. m4_define([_LT_WITH_AIX_SONAME], [m4_define([_LT_WITH_AIX_SONAME_DEFAULT], [m4_if($1, svr4, svr4, m4_if($1, both, both, aix))])dnl shared_archive_member_spec= case $host,$enable_shared in power*-*-aix[[5-9]]*,yes) AC_MSG_CHECKING([which variant of shared library versioning to provide]) AC_ARG_WITH([aix-soname], [AS_HELP_STRING([--with-aix-soname=aix|svr4|both], [shared library versioning (aka "SONAME") variant to provide on AIX, @<:@default=]_LT_WITH_AIX_SONAME_DEFAULT[@:>@.])], [case $withval in aix|svr4|both) ;; *) AC_MSG_ERROR([Unknown argument to --with-aix-soname]) ;; esac lt_cv_with_aix_soname=$with_aix_soname], [AC_CACHE_VAL([lt_cv_with_aix_soname], [lt_cv_with_aix_soname=]_LT_WITH_AIX_SONAME_DEFAULT) with_aix_soname=$lt_cv_with_aix_soname]) AC_MSG_RESULT([$with_aix_soname]) if test aix != "$with_aix_soname"; then # For the AIX way of multilib, we name the shared archive member # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, # the AIX toolchain works better with OBJECT_MODE set (default 32). if test 64 = "${OBJECT_MODE-32}"; then shared_archive_member_spec=shr_64 else shared_archive_member_spec=shr fi fi ;; *) with_aix_soname=aix ;; esac _LT_DECL([], [shared_archive_member_spec], [0], [Shared archive member basename, for filename based shared library versioning on AIX])dnl ])# _LT_WITH_AIX_SONAME LT_OPTION_DEFINE([LT_INIT], [aix-soname=aix], [_LT_WITH_AIX_SONAME([aix])]) LT_OPTION_DEFINE([LT_INIT], [aix-soname=both], [_LT_WITH_AIX_SONAME([both])]) LT_OPTION_DEFINE([LT_INIT], [aix-soname=svr4], [_LT_WITH_AIX_SONAME([svr4])]) # _LT_WITH_PIC([MODE]) # -------------------- # implement the --with-pic flag, and support the 'pic-only' and 'no-pic' # LT_INIT options. # MODE is either 'yes' or 'no'. If omitted, it defaults to 'both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for lt_pkg in $withval; do IFS=$lt_save_ifs if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS=$lt_save_ifs ;; esac], [pic_mode=m4_default([$1], [default])]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) ## ----------------- ## ## LTDL_INIT Options ## ## ----------------- ## m4_define([_LTDL_MODE], []) LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], [m4_define([_LTDL_MODE], [nonrecursive])]) LT_OPTION_DEFINE([LTDL_INIT], [recursive], [m4_define([_LTDL_MODE], [recursive])]) LT_OPTION_DEFINE([LTDL_INIT], [subproject], [m4_define([_LTDL_MODE], [subproject])]) m4_define([_LTDL_TYPE], []) LT_OPTION_DEFINE([LTDL_INIT], [installable], [m4_define([_LTDL_TYPE], [installable])]) LT_OPTION_DEFINE([LTDL_INIT], [convenience], [m4_define([_LTDL_TYPE], [convenience])]) lasso-2.8.2/m4/PaxHeaders/libtool.m40000644000000000000000000000013214404125665014157 xustar0030 mtime=1678814133.648896945 30 atime=1678814133.972898752 30 ctime=1678814319.869946818 lasso-2.8.2/m4/libtool.m40000644000175000017500000113165214404125665017440 0ustar00bdauvergnebdauvergne00000000000000# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996-2001, 2003-2019, 2021-2022 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl # Copyright (C) 2014 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program or library that is built # using GNU Libtool, you may include this file under the same # distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . ]) # serial 59 LT_INIT # LT_PREREQ(VERSION) # ------------------ # Complain and exit if this libtool version is less that VERSION. m4_defun([LT_PREREQ], [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, [m4_default([$3], [m4_fatal([Libtool version $1 or higher is required], 63)])], [$2])]) # _LT_CHECK_BUILDDIR # ------------------ # Complain if the absolute build directory name contains unusual characters m4_defun([_LT_CHECK_BUILDDIR], [case `pwd` in *\ * | *\ *) AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; esac ]) # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], [AC_PREREQ([2.62])dnl We use AC_PATH_PROGS_FEATURE_CHECK AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl AC_BEFORE([$0], [LTDL_INIT])dnl m4_require([_LT_CHECK_BUILDDIR])dnl dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 dnl unless we require an AC_DEFUNed macro: AC_REQUIRE([LTOPTIONS_VERSION])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([LTOBSOLETE_VERSION])dnl m4_require([_LT_PROG_LTMAIN])dnl _LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed LIBTOOL_DEPS=$ltmain # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl _LT_SETUP # Only expand once: m4_define([LT_INIT]) ])# LT_INIT # Old names: AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) # _LT_PREPARE_CC_BASENAME # ----------------------- m4_defun([_LT_PREPARE_CC_BASENAME], [ # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. func_cc_basename () { for cc_temp in @S|@*""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` } ])# _LT_PREPARE_CC_BASENAME # _LT_CC_BASENAME(CC) # ------------------- # It would be clearer to call AC_REQUIREs from _LT_PREPARE_CC_BASENAME, # but that macro is also expanded into generated libtool script, which # arranges for $SED and $ECHO to be set by different means. m4_defun([_LT_CC_BASENAME], [m4_require([_LT_PREPARE_CC_BASENAME])dnl AC_REQUIRE([_LT_DECL_SED])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl func_cc_basename $1 cc_basename=$func_cc_basename_result ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set # sensibly after 'm4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} ])# _LT_FILEUTILS_DEFAULTS # _LT_SETUP # --------- m4_defun([_LT_SETUP], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl _LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl dnl _LT_DECL([], [build_alias], [0], [The build system])dnl _LT_DECL([], [build], [0])dnl _LT_DECL([], [build_os], [0])dnl dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl dnl AC_REQUIRE([AC_PROG_LN_S])dnl test -z "$LN_S" && LN_S="ln -s" _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl dnl AC_REQUIRE([LT_CMD_MAX_LEN])dnl _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_DECL_FILECMD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_WITH_SYSROOT])dnl m4_require([_LT_CMD_TRUNCATE])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi ]) if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi _LT_CHECK_OBJDIR m4_require([_LT_TAG_COMPILER])dnl case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a '.a' archive for static linking (except MSVC and # ICC, which need '.lib'). libext=a with_gnu_ld=$lt_cv_prog_gnu_ld old_CC=$CC old_CFLAGS=$CFLAGS # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PREPARE_SED_QUOTE_VARS # -------------------------- # Define a few sed substitution that help us do robust quoting. m4_defun([_LT_PREPARE_SED_QUOTE_VARS], [# Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ]) # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from 'configure', and 'config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # 'config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain=$ac_aux_dir/ltmain.sh ])# _LT_PROG_LTMAIN ## ------------------------------------- ## ## Accumulate code for creating libtool. ## ## ------------------------------------- ## # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS # in macros and then make a single call at the end using the 'libtool' # label. # _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) # ---------------------------------------- # Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL_INIT], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_INIT], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_INIT]) # _LT_CONFIG_LIBTOOL([COMMANDS]) # ------------------------------ # Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) # _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) # ----------------------------------------------------- m4_defun([_LT_CONFIG_SAVE_COMMANDS], [_LT_CONFIG_LIBTOOL([$1]) _LT_CONFIG_LIBTOOL_INIT([$2]) ]) # _LT_FORMAT_COMMENT([COMMENT]) # ----------------------------- # Add leading comment marks to the start of each line, and a trailing # full-stop to the whole comment if one is not present already. m4_define([_LT_FORMAT_COMMENT], [m4_ifval([$1], [ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) )]) ## ------------------------ ## ## FIXME: Eliminate VARNAME ## ## ------------------------ ## # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) # ------------------------------------------------------------------- # CONFIGNAME is the name given to the value in the libtool script. # VARNAME is the (base) name used in the configure script. # VALUE may be 0, 1 or 2 for a computed quote escaped value based on # VARNAME. Any other value will be used directly. m4_define([_LT_DECL], [lt_if_append_uniq([lt_decl_varnames], [$2], [, ], [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], [m4_ifval([$1], [$1], [$2])]) lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) m4_ifval([$4], [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) lt_dict_add_subkey([lt_decl_dict], [$2], [tagged?], [m4_ifval([$5], [yes], [no])])]) ]) # _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) # -------------------------------------------------------- m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) # lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_tag_varnames], [_lt_decl_filter([tagged?], [yes], $@)]) # _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) # --------------------------------------------------------- m4_define([_lt_decl_filter], [m4_case([$#], [0], [m4_fatal([$0: too few arguments: $#])], [1], [m4_fatal([$0: too few arguments: $#: $1])], [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], [lt_dict_filter([lt_decl_dict], $@)])[]dnl ]) # lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) # -------------------------------------------------- m4_define([lt_decl_quote_varnames], [_lt_decl_filter([value], [1], $@)]) # lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_dquote_varnames], [_lt_decl_filter([value], [2], $@)]) # lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_varnames_tagged], [m4_assert([$# <= 2])dnl _$0(m4_quote(m4_default([$1], [[, ]])), m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) m4_define([_lt_decl_varnames_tagged], [m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) # lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_all_varnames], [_$0(m4_quote(m4_default([$1], [[, ]])), m4_if([$2], [], m4_quote(lt_decl_varnames), m4_quote(m4_shift($@))))[]dnl ]) m4_define([_lt_decl_all_varnames], [lt_join($@, lt_decl_varnames_tagged([$1], lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ]) # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ # Quote a variable value, and forward it to 'config.status' so that its # declaration there will have the same value as in 'configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) # _LT_CONFIG_STATUS_DECLARATIONS # ------------------------------ # We delimit libtool config variables with single quotes, so when # we write them to config.status, we have to be sure to quote all # embedded single quotes properly. In configure, this macro expands # each variable declared with _LT_DECL (and _LT_TAGDECL) into: # # ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAGS # ---------------- # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl available_tags='_LT_TAGS'dnl ]) # _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) # ----------------------------------- # Extract the dictionary values for VARNAME (optionally with TAG) and # expand to a commented shell variable setting: # # # Some comment about what VAR is for. # visible_name=$lt_internal_name m4_define([_LT_LIBTOOL_DECLARE], [_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [description])))[]dnl m4_pushdef([_libtool_name], m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), [0], [_libtool_name=[$]$1], [1], [_libtool_name=$lt_[]$1], [2], [_libtool_name=$lt_[]$1], [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ]) # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables # suitable for insertion in the LIBTOOL CONFIG section of the 'libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], [m4_foreach([_lt_var], m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAG_VARS(TAG) # ------------------------- m4_define([_LT_LIBTOOL_TAG_VARS], [m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) # _LT_TAGVAR(VARNAME, [TAGNAME]) # ------------------------------ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # _LT_CONFIG_COMMANDS # ------------------- # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations # into 'config.status', and then the shell code to quote escape them in # for loops in 'config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], dnl If the libtool generation code has been placed in $CONFIG_LT, dnl instead of duplicating it all over again into config.status, dnl then we will have config.status run $CONFIG_LT later, so it dnl needs to know what name is stored there: [AC_CONFIG_COMMANDS([libtool], [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], dnl If the libtool generation code is destined for config.status, dnl expand the accumulated commands and init code now: [AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ])#_LT_CONFIG_COMMANDS # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], [ # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' _LT_CONFIG_STATUS_DECLARATIONS LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$[]1 _LTECHO_EOF' } # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done _LT_OUTPUT_LIBTOOL_INIT ]) # _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) # ------------------------------------ # Generate a child script FILE with all initialization necessary to # reuse the environment learned by the parent script, and make the # file executable. If COMMENT is supplied, it is inserted after the # '#!' sequence but before initialization text begins. After this # macro, additional text can be appended to FILE to form the body of # the child script. The macro ends with non-zero status if the # file could not be fully written (such as if the disk is full). m4_ifdef([AS_INIT_GENERATED], [m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], [m4_defun([_LT_GENERATED_FILE_INIT], [m4_require([AS_PREPARE])]dnl [m4_pushdef([AS_MESSAGE_LOG_FD])]dnl [lt_write_fail=0 cat >$1 <<_ASEOF || lt_write_fail=1 #! $SHELL # Generated by $as_me. $2 SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$1 <<\_ASEOF || lt_write_fail=1 AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 _ASEOF test 0 = "$lt_write_fail" && chmod +x $1[]dnl m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before # AC_OUTPUT is called), incase it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) _LT_GENERATED_FILE_INIT(["$CONFIG_LT"], [# Run this file to recreate a libtool stub with the current configuration.]) cat >>"$CONFIG_LT" <<\_LTEOF lt_cl_silent=false exec AS_MESSAGE_LOG_FD>>config.log { echo AS_BOX([Running $as_me.]) } >&AS_MESSAGE_LOG_FD lt_cl_help="\ '$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. Usage: $[0] [[OPTIONS]] -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files Report bugs to ." lt_cl_version="\ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. Copyright (C) 2011 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." while test 0 != $[#] do case $[1] in --version | --v* | -V ) echo "$lt_cl_version"; exit 0 ;; --help | --h* | -h ) echo "$lt_cl_help"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --quiet | --q* | --silent | --s* | -q ) lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] Try '$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] Try '$[0] --help' for more information.]) ;; esac shift done if $lt_cl_silent; then exec AS_MESSAGE_FD>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF _LT_OUTPUT_LIBTOOL_COMMANDS_INIT _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AC_MSG_NOTICE([creating $ofile]) _LT_OUTPUT_LIBTOOL_COMMANDS AS_EXIT(0) _LTEOF chmod +x "$CONFIG_LT" # configure is writing to config.log, but config.lt does its own redirection, # appending to config.log, which fails on DOS, as config.log is still kept # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. lt_cl_success=: test yes = "$silent" && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec AS_MESSAGE_LOG_FD>>config.log $lt_cl_success || AS_EXIT(1) ])# LT_OUTPUT # _LT_CONFIG(TAG) # --------------- # If TAG is the built-in tag, create an initial libtool script with a # default configuration from the untagged config vars. Otherwise add code # to config.status for appending the configuration named by TAG from the # matching tagged config vars. m4_defun([_LT_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi cfgfile=${ofile}T trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # Generated automatically by $as_me ($PACKAGE) $VERSION # NOTE: Changes made to this file will be lost: look at ltmain.sh. # Provide generalized library-building support services. # Written by Gordon Matzigkeit, 1996 _LT_COPYING _LT_LIBTOOL_TAGS # Configured defaults for sys_lib_dlsearch_path munging. : \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF cat <<'_LT_EOF' >> "$cfgfile" # ### BEGIN FUNCTIONS SHARED WITH CONFIGURE _LT_PREPARE_MUNGE_PATH_LIST _LT_PREPARE_CC_BASENAME # ### END FUNCTIONS SHARED WITH CONFIGURE _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac _LT_PROG_LTMAIN # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? $SED '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], [cat <<_LT_EOF >> "$ofile" dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded dnl in a comment (ie after a #). # ### BEGIN LIBTOOL TAG CONFIG: $1 _LT_LIBTOOL_TAG_VARS(_LT_TAG) # ### END LIBTOOL TAG CONFIG: $1 _LT_EOF ])dnl /m4_if ], [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS ])# _LT_CONFIG # LT_SUPPORTED_TAG(TAG) # --------------------- # Trace this macro to discover what tags are supported by the libtool # --tag option, using: # autoconf --trace 'LT_SUPPORTED_TAG:$1' AC_DEFUN([LT_SUPPORTED_TAG], []) # C support is built-in for now m4_define([_LT_LANG_C_enabled], []) m4_define([_LT_TAGS], []) # LT_LANG(LANG) # ------------- # Enable libtool support for the given language if not already enabled. AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Go], [_LT_LANG(GO)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], [Windows Resource], [_LT_LANG(RC)], [m4_ifdef([_LT_LANG_]$1[_CONFIG], [_LT_LANG($1)], [m4_fatal([$0: unsupported language: "$1"])])])dnl ])# LT_LANG # _LT_LANG(LANGNAME) # ------------------ m4_defun([_LT_LANG], [m4_ifdef([_LT_LANG_]$1[_enabled], [], [LT_SUPPORTED_TAG([$1])dnl m4_append([_LT_TAGS], [$1 ])dnl m4_define([_LT_LANG_]$1[_enabled], [])dnl _LT_LANG_$1_CONFIG($1)])dnl ])# _LT_LANG m4_ifndef([AC_PROG_GO], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_GO. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_GO], [AC_LANG_PUSH(Go)dnl AC_ARG_VAR([GOC], [Go compiler command])dnl AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl _AC_ARG_VAR_LDFLAGS()dnl AC_CHECK_TOOL(GOC, gccgo) if test -z "$GOC"; then if test -n "$ac_tool_prefix"; then AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) fi fi if test -z "$GOC"; then AC_CHECK_PROG(GOC, gccgo, gccgo, false) fi ])#m4_defun ])#m4_ifndef # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], [AC_PROVIDE_IFELSE([AC_PROG_CXX], [LT_LANG(CXX)], [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) AC_PROVIDE_IFELSE([AC_PROG_F77], [LT_LANG(F77)], [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) AC_PROVIDE_IFELSE([AC_PROG_FC], [LT_LANG(FC)], [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal dnl pulling things in needlessly. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([LT_PROG_GCJ], [LT_LANG(GCJ)], [m4_ifdef([AC_PROG_GCJ], [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([A][M_PROG_GCJ], [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) AC_PROVIDE_IFELSE([AC_PROG_GO], [LT_LANG(GO)], [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ])# _LT_LANG_DEFAULT_CONFIG # Obsolete macros: AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_CXX], []) dnl AC_DEFUN([AC_LIBTOOL_F77], []) dnl AC_DEFUN([AC_LIBTOOL_FC], []) dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) dnl AC_DEFUN([AC_LIBTOOL_RC], []) # _LT_TAG_COMPILER # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl _LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_TAG_COMPILER # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. m4_defun([_LT_COMPILER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. m4_defun([_LT_LINKER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CHECK_TOOL([LIPO], [lipo], [:]) AC_CHECK_TOOL([OTOOL], [otool], [:]) AC_CHECK_TOOL([OTOOL64], [otool64], [:]) _LT_DECL([], [DSYMUTIL], [1], [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) _LT_DECL([], [NMEDIT], [1], [Tool to change global to local symbols on Mac OS X]) _LT_DECL([], [LIPO], [1], [Tool to manipulate fat objects and archives on Mac OS X]) _LT_DECL([], [OTOOL], [1], [ldd/readelf like tool for Mach-O binaries on Mac OS X]) _LT_DECL([], [OTOOL64], [1], [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "$LT_MULTI_MODULE"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test 0 = "$_lt_result"; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -rf libconftest.dylib* rm -f conftest.* fi]) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS=$save_LDFLAGS ]) AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], [lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD echo "$AR $AR_FLAGS libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD $AR $AR_FLAGS libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then lt_cv_ld_force_load=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM ]) case $host_os in rhapsody* | darwin1.[[012]]) _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; darwin*) case $MACOSX_DEPLOYMENT_TARGET,$host in 10.[[012]],*|,*powerpc*-darwin[[5-8]]*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; *) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test yes = "$lt_cv_apple_cc_single_mod"; then _lt_dar_single_mod='$single_module' fi if test yes = "$lt_cv_ld_exported_symbols_list"; then _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' fi if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES([TAG]) # --------------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported if test yes = "$lt_cv_ld_force_load"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) else _LT_TAGVAR(whole_archive_flag_spec, $1)='' fi _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=$_lt_dar_allow_undefined case $cc_basename in ifort*|nagfor*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test yes = "$_lt_dar_can_shared"; then output_verbose_link_cmd=func_echo_all _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" _LT_TAGVAR(archive_expsym_cmds, $1)="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" _LT_TAGVAR(module_expsym_cmds, $1)="$SED -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" m4_if([$1], [CXX], [ if test yes != "$lt_cv_apple_cc_single_mod"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil" _LT_TAGVAR(archive_expsym_cmds, $1)="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" fi ],[]) else _LT_TAGVAR(ld_shlibs, $1)=no fi ]) # _LT_SYS_MODULE_PATH_AIX([TAGNAME]) # ---------------------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. # Store the results from the different compilers for each TAGNAME. # Allow to override them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ lt_aix_libpath_sed='[ /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }]' _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=/usr/lib:/lib fi ]) aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [m4_divert_text([M4SH-INIT], [$1 ])])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Find how we can fake an echo command that does not interpret backslash. # In particular, with Autoconf 2.60 or later we add some code to the start # of the generated configure script that will find a shell with a builtin # printf (that we can use as an echo command). m4_defun([_LT_PROG_ECHO_BACKSLASH], [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO AC_MSG_CHECKING([how to print strings]) # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $[]1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } case $ECHO in printf*) AC_MSG_RESULT([printf]) ;; print*) AC_MSG_RESULT([print -r]) ;; *) AC_MSG_RESULT([cat]) ;; esac m4_ifdef([_AS_DETECT_SUGGESTED], [_AS_DETECT_SUGGESTED([ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test "X`printf %s $ECHO`" = "X$ECHO" \ || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_WITH_SYSROOT # ---------------- AC_DEFUN([_LT_WITH_SYSROOT], [m4_require([_LT_DECL_SED])dnl AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], [AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@], [Search for dependent libraries within DIR (or the compiler's sysroot if not specified).])], [], [with_sysroot=no]) dnl lt_sysroot will always be passed unquoted. We quote it here dnl in case the user passed a directory name. lt_sysroot= case $with_sysroot in #( yes) if test yes = "$GCC"; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | $SED -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) AC_MSG_RESULT([$with_sysroot]) AC_MSG_ERROR([The sysroot must be an absolute path.]) ;; esac AC_MSG_RESULT([${lt_sysroot:-no}]) _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl [dependent libraries, and where our libraries should be installed.])]) # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test no = "$enable_libtool_lock" || enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out what ABI is being produced by ac_compile, and set mode # options accordingly. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `$FILECMD conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE=32 ;; *ELF-64*) HPUX_IA64_MODE=64 ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test yes = "$lt_cv_prog_gnu_ld"; then case `$FILECMD conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `$FILECMD conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; mips64*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then emul=elf case `$FILECMD conftest.$ac_objext` in *32-bit*) emul="${emul}32" ;; *64-bit*) emul="${emul}64" ;; esac case `$FILECMD conftest.$ac_objext` in *MSB*) emul="${emul}btsmip" ;; *LSB*) emul="${emul}ltsmip" ;; esac case `$FILECMD conftest.$ac_objext` in *N32*) emul="${emul}n32" ;; esac LD="${LD-ld} -m $emul" fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. Note that the listed cases only cover the # situations where additional linker options are needed (such as when # doing 32-bit compilation for a host where ld defaults to 64-bit, or # vice versa); the common cases where no linker options are needed do # not appear in the list. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `$FILECMD conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) case `$FILECMD conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" ;; *) LD="${LD-ld} -m elf_i386" ;; esac ;; powerpc64le-*linux*) LD="${LD-ld} -m elf32lppclinux" ;; powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; powerpcle-*linux*) LD="${LD-ld} -m elf64lppc" ;; powerpc-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test yes != "$lt_cv_cc_needs_belf"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS=$SAVE_CFLAGS fi ;; *-*solaris*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `$FILECMD conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*|x86_64-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD=${LD-ld}_sol2 fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks=$enable_libtool_lock ])# _LT_ENABLE_LOCK # _LT_PROG_AR # ----------- m4_defun([_LT_PROG_AR], [AC_CHECK_TOOLS(AR, [ar], false) : ${AR=ar} _LT_DECL([], [AR], [1], [The archiver]) # Use ARFLAGS variable as AR's operation code to sync the variable naming with # Automake. If both AR_FLAGS and ARFLAGS are specified, AR_FLAGS should have # higher priority because thats what people were doing historically (setting # ARFLAGS for automake and AR_FLAGS for libtool). FIXME: Make the AR_FLAGS # variable obsoleted/removed. test ${AR_FLAGS+y} || AR_FLAGS=${ARFLAGS-cr} lt_ar_flags=$AR_FLAGS _LT_DECL([], [lt_ar_flags], [0], [Flags to create an archive (by configure)]) # Make AR_FLAGS overridable by 'make ARFLAGS='. Don't try to run-time override # by AR_FLAGS because that was never working and AR_FLAGS is about to die. _LT_DECL([], [AR_FLAGS], [\@S|@{ARFLAGS-"\@S|@lt_ar_flags"}], [Flags to create an archive]) AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], [lt_cv_ar_at_file=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM], [echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([lt_ar_try]) if test 0 -eq "$ac_status"; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a AC_TRY_EVAL([lt_ar_try]) if test 0 -ne "$ac_status"; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a ]) ]) if test no = "$lt_cv_ar_at_file"; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi _LT_DECL([], [archiver_list_spec], [1], [How to feed a file listing to the archiver]) ])# _LT_PROG_AR # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [_LT_PROG_AR AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in bitrig* | openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac _LT_DECL([], [old_postinstall_cmds], [2]) _LT_DECL([], [old_postuninstall_cmds], [2]) _LT_TAGDECL([], [old_archive_cmds], [2], [Commands used to build an old-style archive]) _LT_DECL([], [lock_old_archive_extraction], [0], [Whether to use a lock for old archive extraction]) ])# _LT_CMD_OLD_ARCHIVE # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $RM conftest* ]) if test yes = "[$]$2"; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ])# _LT_COMPILER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) # _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------- # Check whether the given linker option works AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS ]) if test yes = "[$]$2"; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ])# _LT_LINKER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) # LT_CMD_MAX_LEN #--------------- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl # find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring=ABCD case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; bitrig* | darwin* | dragonfly* | freebsd* | midnightbsd* | netbsd* | openbsd*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | $SED 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len" && \ test undefined != "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test X`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test 17 != "$i" # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n "$lt_cv_sys_max_cmd_len"; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi max_cmd_len=$lt_cv_sys_max_cmd_len _LT_DECL([], [max_cmd_len], [0], [What is the maximum length of a command?]) ])# LT_CMD_MAX_LEN # Old name: AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) # _LT_HEADER_DLFCN # ---------------- m4_defun([_LT_HEADER_DLFCN], [AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ])# _LT_HEADER_DLFCN # _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test yes = "$cross_compiling"; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF [#line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; }] _LT_EOF if AC_TRY_EVAL(ac_link) && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_TRY_DLOPEN_SELF # LT_SYS_DLOPEN_SELF # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test yes != "$enable_dlopen"; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen=load_add_on lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen=LoadLibrary lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen=dlopen lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],[ lt_cv_dlopen=dyld lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; tpf*) # Don't try to run any link tests for TPF. We know it's impossible # because TPF is a cross-compiler, and we know how we open DSOs. lt_cv_dlopen=dlopen lt_cv_dlopen_libs= lt_cv_dlopen_self=no ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen=shl_load], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen=dlopen], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld]) ]) ]) ]) ]) ]) ;; esac if test no = "$lt_cv_dlopen"; then enable_dlopen=no else enable_dlopen=yes fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS=$CPPFLAGS test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS=$LDFLAGS wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS=$LIBS LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test yes = "$lt_cv_dlopen_self"; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS=$save_CPPFLAGS LDFLAGS=$save_LDFLAGS LIBS=$save_LIBS ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi _LT_DECL([dlopen_support], [enable_dlopen], [0], [Whether dlopen is supported]) _LT_DECL([dlopen_self], [enable_dlopen_self], [0], [Whether dlopen of programs is supported]) _LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], [Whether dlopen of statically linked programs is supported]) ])# LT_SYS_DLOPEN_SELF # Old name: AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) # _LT_COMPILER_C_O([TAGNAME]) # --------------------------- # Check to see if options -c and -o are simultaneously supported by compiler. # This macro does not hard code the compiler like AC_PROG_CC_C_O. m4_defun([_LT_COMPILER_C_O], [m4_require([_LT_DECL_SED])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ]) _LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], [Does compiler simultaneously support -c and -o options?]) ])# _LT_COMPILER_C_O # _LT_COMPILER_FILE_LOCKS([TAGNAME]) # ---------------------------------- # Check to see if we can do hard links to lock some files if needed m4_defun([_LT_COMPILER_FILE_LOCKS], [m4_require([_LT_ENABLE_LOCK])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) hard_links=nottested if test no = "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test no = "$hard_links"; then AC_MSG_WARN(['$CC' does not support '-c -o', so 'make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi _LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ])# _LT_COMPILER_FILE_LOCKS # _LT_CHECK_OBJDIR # ---------------- m4_defun([_LT_CHECK_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl AC_DEFINE_UNQUOTED([LT_OBJDIR], "$lt_cv_objdir/", [Define to the sub-directory where libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR # _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) # -------------------------------------- # Check hardcoding attributes. m4_defun([_LT_LINKER_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || test yes = "$_LT_TAGVAR(hardcode_automatic, $1)"; then # We can hardcode non-existent directories. if test no != "$_LT_TAGVAR(hardcode_direct, $1)" && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" && test no != "$_LT_TAGVAR(hardcode_minus_L, $1)"; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) if test relink = "$_LT_TAGVAR(hardcode_action, $1)" || test yes = "$_LT_TAGVAR(inherit_rpath, $1)"; then # Fast installation is not supported enable_fast_install=no elif test yes = "$shlibpath_overrides_runpath" || test no = "$enable_shared"; then # Fast installation is not necessary enable_fast_install=needless fi _LT_TAGDECL([], [hardcode_action], [0], [How to hardcode a shared library path into an executable]) ])# _LT_LINKER_HARDCODE_LIBPATH # _LT_CMD_STRIPLIB # ---------------- m4_defun([_LT_CMD_STRIPLIB], [m4_require([_LT_DECL_EGREP]) striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -z "$STRIP"; then AC_MSG_RESULT([no]) else if $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then old_striplib="$STRIP --strip-debug" striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else case $host_os in darwin*) # FIXME - insert some real tests, host_os isn't really good enough striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) ;; freebsd*) if $STRIP -V 2>&1 | $GREP "elftoolchain" >/dev/null; then old_striplib="$STRIP --strip-debug" striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB # _LT_PREPARE_MUNGE_PATH_LIST # --------------------------- # Make sure func_munge_path_list() is defined correctly. m4_defun([_LT_PREPARE_MUNGE_PATH_LIST], [[# func_munge_path_list VARIABLE PATH # ----------------------------------- # VARIABLE is name of variable containing _space_ separated list of # directories to be munged by the contents of PATH, which is string # having a format: # "DIR[:DIR]:" # string "DIR[ DIR]" will be prepended to VARIABLE # ":DIR[:DIR]" # string "DIR[ DIR]" will be appended to VARIABLE # "DIRP[:DIRP]::[DIRA:]DIRA" # string "DIRP[ DIRP]" will be prepended to VARIABLE and string # "DIRA[ DIRA]" will be appended to VARIABLE # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { case x@S|@2 in x) ;; *:) eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'` \@S|@@S|@1\" ;; x:*) eval @S|@1=\"\@S|@@S|@1 `$ECHO @S|@2 | $SED 's/:/ /g'`\" ;; *::*) eval @S|@1=\"\@S|@@S|@1\ `$ECHO @S|@2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" eval @S|@1=\"`$ECHO @S|@2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \@S|@@S|@1\" ;; *) eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'`\" ;; esac } ]])# _LT_PREPARE_PATH_LIST # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics m4_defun([_LT_SYS_DYNAMIC_LINKER], [AC_REQUIRE([AC_CANONICAL_HOST])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PREPARE_MUNGE_PATH_LIST])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test yes = "$GCC"; then case $host_os in darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; *) lt_awk_arg='/^libraries:/' ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq='s|=\([[A-Za-z]]:\)|\1|g' ;; *) lt_sed_strip_eq='s|=/|/|g' ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary... lt_tmp_lt_search_path_spec= lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` # ...but if some path component already ends with the multilib dir we assume # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). case "$lt_multi_os_dir; $lt_search_path_spec " in "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) lt_multi_os_dir= ;; esac for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" elif test -n "$lt_multi_os_dir"; then test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS = " "; FS = "/|\n";} { lt_foo = ""; lt_count = 0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo = "/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's|/\([[A-Za-z]]:\)|\1|g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=.so postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown AC_ARG_VAR([LT_SYS_LIBRARY_PATH], [User-defined run-time library search path.]) case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='$libname$release$shared_ext$major' ;; aix[[4-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test ia64 = "$host_cpu"; then # AIX 5 supports IA64 library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line '#! .'. This would cause the generated library to # depend on '.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # Using Import Files as archive members, it is possible to support # filename-based versioning of shared library archives on AIX. While # this would work for both with and without runtime linking, it will # prevent static linking of such archives. So we do filename-based # shared library versioning with .so extension only, which is used # when both runtime linking and shared linking is enabled. # Unfortunately, runtime linking may impact performance, so we do # not want this to be the default eventually. Also, we use the # versioned .so libs for executables only if there is the -brtl # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. # To allow for filename-based versioning support, we need to create # libNAME.so.V as an archive file, containing: # *) an Import File, referring to the versioned filename of the # archive as well as the shared archive member, telling the # bitwidth (32 or 64) of that shared object, and providing the # list of exported symbols of that shared object, eventually # decorated with the 'weak' keyword # *) the shared object with the F_LOADONLY flag set, to really avoid # it being seen by the linker. # At run time we better use the real file rather than another symlink, # but for link time we create the symlink libNAME.so -> libNAME.so.V case $with_aix_soname,$aix_use_runtimelinking in # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. aix,yes) # traditional libtool dynamic_linker='AIX unversionable lib.so' # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; aix,no) # traditional AIX only dynamic_linker='AIX lib.a[(]lib.so.V[)]' # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' ;; svr4,*) # full svr4 only dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)]" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,yes) # both, prefer svr4 dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)], lib.a[(]lib.so.V[)]" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # unpreferred sharedlib libNAME.a needs extra handling postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,no) # both, prefer aix dynamic_linker="AIX lib.a[(]lib.so.V[)], lib.so.V[(]$shared_archive_member_spec.o[)]" library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' ;; esac shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='$libname$shared_ext' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo $libname | $SED -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo $libname | $SED -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl* | *,icl*) # Native MSVC or ICC libname_spec='$name' soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' library_names_spec='$libname.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec=$LIB if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC and ICC wrapper library_names_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' soname_spec='$libname$release$major$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly* | midnightbsd*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[23]].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=no sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' if test 32 = "$HPUX_IA64_MODE"; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" sys_lib_dlsearch_path_spec=/usr/lib/hpux32 else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" sys_lib_dlsearch_path_spec=/usr/lib/hpux64 fi ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[[3-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test yes = "$lt_cv_prog_gnu_ld"; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; linux*android*) version_type=none # Android doesn't support versioned libraries. need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext' soname_spec='$libname$release$shared_ext' finish_cmds= shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes dynamic_linker='Android linker' # Don't embed -rpath directories since the linker doesn't support them. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], [lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], [lt_cv_shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir ]) shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Ideally, we could use ldconfig to report *all* directores which are # searched for libraries, however this is still not possible. Aside from not # being certain /sbin/ldconfig is available, command # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, # even though it is searched at run-time. Try to do the best guess by # appending ld.so.conf contents (and includes) to the search path. if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd* | bitrig*) version_type=sunos sys_lib_dlsearch_path_spec=/usr/lib need_lib_prefix=no if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then need_version=no else need_version=yes fi library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; os2*) libname_spec='$name' version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no # OS/2 can only load a DLL with a base name of 8 characters or less. soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; v=$($ECHO $release$versuffix | tr -d .-); n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); $ECHO $n$v`$shared_ext' library_names_spec='${libname}_dll.$libext' dynamic_linker='OS/2 ld.exe' shlibpath_var=BEGINLIBPATH sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test yes = "$with_gnu_ld"; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec; then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' soname_spec='$libname$shared_ext.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=sco need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test yes = "$with_gnu_ld"; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test yes = "$GCC"; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec fi if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec fi # remember unaugmented sys_lib_dlsearch_path content for libtool script decls... configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec # ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" # to be used as default LT_SYS_LIBRARY_PATH value in generated libtool configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) _LT_DECL([], [need_lib_prefix], [0], [Do we need the "lib" prefix for modules?]) _LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) _LT_DECL([], [version_type], [0], [Library versioning type]) _LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) _LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) _LT_DECL([], [shlibpath_overrides_runpath], [0], [Is shlibpath searched before the hard-coded library search path?]) _LT_DECL([], [libname_spec], [1], [Format of library name prefix]) _LT_DECL([], [library_names_spec], [1], [[List of archive names. First name is the real one, the rest are links. The last name is the one that the linker finds with -lNAME]]) _LT_DECL([], [soname_spec], [1], [[The coded name of the library, if different from the real name]]) _LT_DECL([], [install_override_mode], [1], [Permission mode override for installation of shared libraries]) _LT_DECL([], [postinstall_cmds], [2], [Command to use after installation of a shared archive]) _LT_DECL([], [postuninstall_cmds], [2], [Command to use after uninstallation of a shared archive]) _LT_DECL([], [finish_cmds], [2], [Commands used to finish a libtool library installation in a directory]) _LT_DECL([], [finish_eval], [1], [[As "finish_cmds", except a single script fragment to be evaled but not shown]]) _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) _LT_DECL([sys_lib_dlsearch_path_spec], [configure_time_dlsearch_path], [2], [Detected run-time system search path for libraries]) _LT_DECL([], [configure_time_lt_sys_library_path], [2], [Explicit LT_SYS_LIBRARY_PATH set during ./configure time]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- # find a file program that can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD=$MAGIC_CMD lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$1"; then lt_cv_path_MAGIC_CMD=$ac_dir/"$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac]) MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi _LT_DECL([], [MAGIC_CMD], [0], [Used to examine libraries when file_magic_cmd begins with "file"])dnl ])# _LT_PATH_TOOL_PREFIX # Old name: AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- # find a file program that can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# _LT_PATH_MAGIC # LT_PATH_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PROG_ECHO_BACKSLASH])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test no = "$withval" || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return, which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD=$ac_prog ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test yes = "$with_gnu_ld"; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD=$ac_dir/$ac_prog # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &1 conftest.i cat conftest.i conftest.i >conftest2.i : ${lt_DD:=$DD} AC_PATH_PROGS_FEATURE_CHECK([lt_DD], [dd], [if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: fi]) rm -f conftest.i conftest2.i conftest.out]) ])# _LT_PATH_DD # _LT_CMD_TRUNCATE # ---------------- # find command to truncate a binary pipe m4_defun([_LT_CMD_TRUNCATE], [m4_require([_LT_PATH_DD]) AC_CACHE_CHECK([how to truncate binary pipes], [lt_cv_truncate_bin], [printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i lt_cv_truncate_bin= if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" fi rm -f conftest.i conftest2.i conftest.out test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"]) _LT_DECL([lt_truncate_bin], [lt_cv_truncate_bin], [1], [Command to truncate a binary pipe]) ])# _LT_CMD_TRUNCATE # _LT_CHECK_MAGIC_METHOD # ---------------------- # how to check for library dependencies # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_MAGIC_METHOD], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) AC_CACHE_CHECK([how to recognize dependent libraries], lt_cv_deplibs_check_method, [lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # 'unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # that responds to the $file_magic_cmd with a given extended regex. # If you have 'file' or equivalent on your system and you're not sure # whether 'pass_all' will *always* work, you probably want this one. case $host_os in aix[[4-9]]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[[45]]*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='$FILECMD -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. if ( file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly* | midnightbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=$FILECMD lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=$FILECMD case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[[3-9]]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=$FILECMD lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd* | bitrig*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; os2*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown _LT_DECL([], [deplibs_check_method], [1], [Method to check whether dependent libraries are shared objects]) _LT_DECL([], [file_magic_cmd], [1], [Command to use when deplibs_check_method = "file_magic"]) _LT_DECL([], [file_magic_glob], [1], [How to find potential files when deplibs_check_method = "file_magic"]) _LT_DECL([], [want_nocaseglob], [1], [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) ])# _LT_CHECK_MAGIC_METHOD # LT_PATH_NM # ---------- # find the pathname to a BSD- or MS-compatible name lister AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM=$NM else lt_nm_to_check=${ac_tool_prefix}nm if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. tmp_nm=$ac_dir/$lt_tmp_nm if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then # Check to see if the nm accepts a BSD-compat flag. # Adding the 'sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty case $build_os in mingw*) lt_bad_file=conftest.nm/nofile ;; *) lt_bad_file=/dev/null ;; esac case `"$tmp_nm" -B $lt_bad_file 2>&1 | $SED '1q'` in *$lt_bad_file* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break 2 ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | $SED '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break 2 ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS=$lt_save_ifs done : ${lt_cv_path_NM=no} fi]) if test no != "$lt_cv_path_NM"; then NM=$lt_cv_path_NM else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) case `$DUMPBIN -symbols -headers /dev/null 2>&1 | $SED '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols -headers" ;; *) DUMPBIN=: ;; esac fi AC_SUBST([DUMPBIN]) if test : != "$DUMPBIN"; then NM=$DUMPBIN fi fi test -z "$NM" && NM=nm AC_SUBST([NM]) _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], [lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) cat conftest.out >&AS_MESSAGE_LOG_FD if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest*]) ])# LT_PATH_NM # Old names: AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_NM], []) dnl AC_DEFUN([AC_PROG_NM], []) # _LT_CHECK_SHAREDLIB_FROM_LINKLIB # -------------------------------- # how to determine the name of the shared library # associated with a specific link library. # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) m4_require([_LT_DECL_DLLTOOL]) AC_CACHE_CHECK([how to associate runtime and link libraries], lt_cv_sharedlib_from_linklib_cmd, [lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh; # decide which one to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd=$ECHO ;; esac ]) sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO _LT_DECL([], [sharedlib_from_linklib_cmd], [1], [Command to associate shared and link libraries]) ])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB # _LT_PATH_MANIFEST_TOOL # ---------------------- # locate the manifest tool m4_defun([_LT_PATH_MANIFEST_TOOL], [AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], [lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&AS_MESSAGE_LOG_FD if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest*]) if test yes != "$lt_cv_path_mainfest_tool"; then MANIFEST_TOOL=: fi _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl ])# _LT_PATH_MANIFEST_TOOL # _LT_DLL_DEF_P([FILE]) # --------------------- # True iff FILE is a Windows DLL '.def' file. # Keep in sync with func_dll_def_p in the libtool script AC_DEFUN([_LT_DLL_DEF_P], [dnl test DEF = "`$SED -n dnl -e '\''s/^[[ ]]*//'\'' dnl Strip leading whitespace -e '\''/^\(;.*\)*$/d'\'' dnl Delete empty lines and comments -e '\''s/^\(EXPORTS\|LIBRARY\)\([[ ]].*\)*$/DEF/p'\'' dnl -e q dnl Only consider the first "real" line $1`" dnl ])# _LT_DLL_DEF_P # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM=-lmw) AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM=-lm) ;; esac AC_SUBST([LIBM]) ])# LT_LIB_M # Old name: AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_CHECK_LIBM], []) # _LT_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------- m4_defun([_LT_COMPILER_NO_RTTI], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test yes = "$GCC"; then case $cc_basename in nvcc*) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; *) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; esac _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], [Compiler flag to turn off builtin functions]) ])# _LT_COMPILER_NO_RTTI # _LT_CMD_GLOBAL_SYMBOLS # ---------------------- m4_defun([_LT_CMD_GLOBAL_SYMBOLS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([LT_PATH_NM])dnl AC_REQUIRE([LT_PATH_LD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_TAG_COMPILER])dnl # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) if test ia64 = "$host_cpu"; then symcode='[[ABCDEGRST]]' fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris*) symcode='[[BDRT]]' ;; sco3.2v5*) symcode='[[DT]]' ;; sysv4.2uw2*) symcode='[[DT]]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[[ABDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Gets list of data symbols to import. lt_cv_sys_global_symbol_to_import="$SED -n -e 's/^I .* \(.*\)$/\1/p'" # Adjust the below global symbol transforms to fixup imported variables. lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" lt_c_name_lib_hook="\ -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" else # Disable hooks by default. lt_cv_sys_global_symbol_to_import= lt_cdecl_hook= lt_c_name_hook= lt_c_name_lib_hook= fi # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="$SED -n"\ $lt_cdecl_hook\ " -e 's/^T .* \(.*\)$/extern int \1();/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="$SED -n"\ $lt_c_name_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" # Transform an extracted symbol line into symbol name with lib prefix and # symbol address. lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="$SED -n"\ $lt_c_name_lib_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function, # D for any global variable and I for any imported variable. # Also find C++ and __fastcall symbols from MSVC++ or ICC, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ " /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ " /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ " {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ " s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="$SED -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | $SED '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. nlist=conftest.nm $ECHO "$as_me:$LINENO: $NM conftest.$ac_objext | $lt_cv_sys_global_symbol_pipe > $nlist" >&AS_MESSAGE_LOG_FD if eval "$NM" conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist 2>&AS_MESSAGE_LOG_FD && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT@&t@_DLSYM_CONST #elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT@&t@_DLSYM_CONST #else # define LT@&t@_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT@&t@_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS=conftstm.$ac_objext CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest$ac_exeext; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test yes = "$pipe_works"; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then nm_file_list_spec='@' fi _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) _LT_DECL([global_symbol_to_import], [lt_cv_sys_global_symbol_to_import], [1], [Transform the output of nm into a list of symbols to manually relocate]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) _LT_DECL([nm_interface], [lt_cv_nm_interface], [1], [The name lister interface]) _LT_DECL([], [nm_file_list_spec], [1], [Specify filename containing input files for $NM]) ]) # _LT_CMD_GLOBAL_SYMBOLS # _LT_COMPILER_PIC([TAGNAME]) # --------------------------- m4_defun([_LT_COMPILER_PIC], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_wl, $1)= _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test yes = "$GXX"; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix[[4-9]]*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; dgux*) case $cc_basename in ec++*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | dragonfly* | midnightbsd*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' if test ia64 != "$host_cpu"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # KAI C++ Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64, which still supported -KPIC. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL 8.0, 9.0 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | $SED 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd* | netbsdelf*-gnu) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx*) # Digital/Compaq C++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc*) # Lucid _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test yes = "$GCC"; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' case $cc_basename in nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; hpux9* | hpux10* | hpux11*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64, which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # flang / f18. f95 an alias for gfortran or flang on Debian flang* | f18* | f95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # Lahey Fortran 8.1. lf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; tcc*) # Fabrice Bellard et al's Tiny C Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | $SED 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; *Sun\ F* | *Sun*Fortran*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; *Intel*\ [[CF]]*Compiler*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; *Portland\ Group*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; esac ;; newsos6) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; solaris*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) case $host_os in # For platforms that do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac AC_CACHE_CHECK([for $compiler option to produce PIC], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # Check to make sure the static flag actually works. # wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], [Compiler flag to prevent dynamic linking]) ])# _LT_COMPILER_PIC # _LT_LINKER_SHLIBS([TAGNAME]) # ---------------------------- # See if the linker supports building shared libraries. m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)=$ltdll_cmds ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl* | icl*) _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] ;; esac ;; linux* | k*bsd*-gnu | gnu*) _LT_TAGVAR(link_all_deplibs, $1)=no ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac ], [ runpath_var= _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_cmds, $1)= _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(old_archive_from_new_cmds, $1)= _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_TAGVAR(thread_safe_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ' (' and ')$', so one must not match beginning or # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', # as well as any symbol that contains 'd'. _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ and ICC port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++ or Intel C++ Compiler. if test yes != "$GCC"; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++ or ICC) with_gnu_ld=yes ;; openbsd* | bitrig*) with_gnu_ld=no ;; linux* | k*bsd*-gnu | gnu*) _LT_TAGVAR(link_all_deplibs, $1)=no ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test yes = "$with_gnu_ld"; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test yes = "$lt_use_gnu_ld_interface"; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='$wl' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v | $SED -e 's/([[^)]]\+)\s\+//' 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test ia64 != "$host_cpu"; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test linux-dietlibc = "$host_os"; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test no = "$tmp_diet" then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; nagfor*) # NAGFOR 5.3 tmp_sharedflag='-Wl,-shared' ;; xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes ;; esac case `$CC -V 2>&1 | $SED 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi case $cc_basename in tcc*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='-rdynamic' ;; xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test no = "$_LT_TAGVAR(ld_shlibs, $1)"; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix[[4-9]]*) if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag= else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then aix_use_runtimelinking=yes break fi done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # traditional, no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no ;; esac if test yes = "$GCC"; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag="$shared_flag "'$wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; bsdi[[45]]*) _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++ or Intel C++ Compiler. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl* | icl*) # Native MSVC or ICC _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC and ICC wrapper _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly* | midnightbsd*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' ;; hpux10*) if test yes,no = "$GCC,$with_gnu_ld"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test no = "$with_gnu_ld"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test yes,no = "$GCC,$with_gnu_ld"; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) m4_if($1, [], [ # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) _LT_LINKER_OPTION([if $CC understands -b], _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) ;; esac fi if test no = "$with_gnu_ld"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], [lt_cv_irix_exported_symbol], [save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" AC_LINK_IFELSE( [AC_LANG_SOURCE( [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], [C++], [[int foo (void) { return 0; }]], [Fortran 77], [[ subroutine foo end]], [Fortran], [[ subroutine foo end]])])], [lt_cv_irix_exported_symbol=yes], [lt_cv_irix_exported_symbol=no]) LDFLAGS=$save_LDFLAGS]) if test yes = "$lt_cv_irix_exported_symbol"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi _LT_TAGVAR(link_all_deplibs, $1)=no else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; linux*) case $cc_basename in tcc*) # Fabrice Bellard et al's Tiny C Compiler _LT_TAGVAR(ld_shlibs, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' ;; esac ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *nto* | *qnx*) ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' fi else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' ;; osf3*) if test yes = "$GCC"; then _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test yes = "$GCC"; then _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test yes = "$GCC"; then wlarc='$wl' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' _LT_TAGVAR(archive_cmds, $1)='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='$wl' _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. GCC discards it without '$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test yes = "$GCC"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test sequent = "$host_vendor"; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(ld_shlibs, $1)=no ;; esac if test sni = "$host_vendor"; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld _LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl _LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl _LT_DECL([], [extract_expsyms_cmds], [2], [The commands to extract the exported symbol list from a shared archive]) # # Do we need to explicitly link libc? # case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes if test yes,yes = "$GCC,$enable_shared"; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_CACHE_CHECK([whether -lc should be explicitly linked in], [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), [$RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no else lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ]) _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e impossible to change by setting $shlibpath_var if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [postlink_cmds], [2], [Commands necessary for finishing linking programs]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to 'libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC=$CC AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB # Report what library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP CC=$lt_save_CC ])# _LT_LANG_C_CONFIG # _LT_LANG_CXX_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to 'libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl if test -n "$CXX" && ( test no != "$CXX" && ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) || (test g++ != "$CXX"))); then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes fi AC_LANG_PUSH(C++) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_caught_CXX_error"; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test yes = "$GXX"; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test yes = "$GXX"; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test yes = "$with_gnu_ld"; then _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='$wl' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag= else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no ;; esac if test yes = "$GXX"; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag=$shared_flag' $wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. # The "-G" linker flag allows undefined symbols. _LT_TAGVAR(no_undefined_flag, $1)='-bernotok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared # libraries. Need -bnortl late, we may have -brtl in LDFLAGS. _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl* | ,icl* | no,icl*) # Native MSVC or ICC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ func_to_tool_file "$lt_outputfile"~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly* | midnightbsd*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; hpux9*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP " \-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes = "$GXX"; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test no = "$with_gnu_ld"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP " \-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes = "$GXX"; then if test no = "$with_gnu_ld"; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test yes = "$GXX"; then if test no = "$with_gnu_ld"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl--rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' ;; cxx*) # Compaq C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib $wl-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | $SED 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) _LT_TAGVAR(ld_shlibs, $1)=yes ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; cxx*) case $host in osf3*) _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~ $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes,no = "$GXX,$with_gnu_ld"; then _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' case $host in osf3*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test yes,no = "$GXX,$with_gnu_ld"; then _LT_TAGVAR(no_undefined_flag, $1)=' $wl-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"' else # g++ 2.7 appears to require '-G' NOT '-shared' on this # platform. _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ '"$_LT_TAGVAR(old_archive_cmds, $1)" _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ '"$_LT_TAGVAR(reload_cmds, $1)" ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no _LT_TAGVAR(GCC, $1)=$GXX _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test yes != "$_lt_caught_CXX_error" AC_LANG_POP ])# _LT_LANG_CXX_CONFIG # _LT_FUNC_STRIPNAME_CNF # ---------------------- # func_stripname_cnf prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # # This function is identical to the (non-XSI) version of func_stripname, # except this one can be used by m4 code that may be executed by configure, # rather than the libtool script. m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl AC_REQUIRE([_LT_DECL_SED]) AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) func_stripname_cnf () { case @S|@2 in .*) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%\\\\@S|@2\$%%"`;; *) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%@S|@2\$%%"`;; esac } # func_stripname_cnf ])# _LT_FUNC_STRIPNAME_CNF # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= _LT_TAGVAR(predeps, $1)= _LT_TAGVAR(postdeps, $1)= _LT_TAGVAR(compiler_lib_search_path, $1)= dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF int a; void foo (void) { a = 0; } _LT_EOF ], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF ], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer*4 a a=0 return end _LT_EOF ], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF public class foo { private int a; public void bar (void) { a = 0; } }; _LT_EOF ], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF package foo func foo() { } _LT_EOF ]) _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case $prev$p in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test x-L = "$p" || test x-R = "$p"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test no = "$pre_test_object_deps_done"; then case $prev in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then _LT_TAGVAR(compiler_lib_search_path, $1)=$prev$p else _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} $prev$p" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then _LT_TAGVAR(postdeps, $1)=$prev$p else _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} $prev$p" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test no = "$pre_test_object_deps_done"; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then _LT_TAGVAR(predep_objects, $1)=$p else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then _LT_TAGVAR(postdep_objects, $1)=$p else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling $1 test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], [case $host_os in interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_TAGVAR(predep_objects,$1)= _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; esac ]) case " $_LT_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | $SED -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) _LT_TAGDECL([], [predep_objects], [1], [Dependencies to place before and after the objects being linked to create a shared library]) _LT_TAGDECL([], [postdep_objects], [1]) _LT_TAGDECL([], [predeps], [1]) _LT_TAGDECL([], [postdeps], [1]) _LT_TAGDECL([], [compiler_lib_search_path], [1], [The library search path used internally by the compiler when linking a shared library]) ])# _LT_SYS_HIDDEN_LIBDEPS # _LT_LANG_F77_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_LANG_PUSH(Fortran 77) if test -z "$F77" || test no = "$F77"; then _lt_disable_F77=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_disable_F77"; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) GCC=$G77 if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)=$G77 _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test yes != "$_lt_disable_F77" AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_LANG_FC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_LANG_PUSH(Fortran) if test -z "$FC" || test no = "$FC"; then _lt_disable_FC=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_disable_FC"; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} CFLAGS=$FCFLAGS compiler=$CC GCC=$ac_cv_fc_compiler_gnu _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)=$ac_cv_fc_compiler_gnu _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test yes != "$_lt_disable_FC" AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} CFLAGS=$GCJFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)=$LD _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_GO_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Go compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_GO_CONFIG], [AC_REQUIRE([LT_PROG_GO])dnl AC_LANG_SAVE # Source file extension for Go test sources. ac_ext=go # Object file extension for compiled Go test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="package main; func main() { }" # Code to be used in simple link tests lt_simple_link_test_code='package main; func main() { }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GOC-"gccgo"} CFLAGS=$GOFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)=$LD _LT_CC_BASENAME([$compiler]) # Go did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GO_CONFIG # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code=$lt_simple_compile_test_code # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= CC=${RC-"windres"} CFLAGS= compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes if test -n "$compiler"; then : _LT_CONFIG($1) fi GCC=$lt_save_GCC AC_LANG_RESTORE CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_RC_CONFIG # LT_PROG_GCJ # ----------- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) test set = "${GCJFLAGS+set}" || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) # Old name: AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_GCJ], []) # LT_PROG_GO # ---------- AC_DEFUN([LT_PROG_GO], [AC_CHECK_TOOL(GOC, gccgo,) ]) # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) # Old name: AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_RC], []) # _LT_DECL_EGREP # -------------- # If we don't have a new enough Autoconf to choose the best grep # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep _LT_DECL([], [GREP], [1], [A grep program that handles long lines]) _LT_DECL([], [EGREP], [1], [An ERE matcher]) _LT_DECL([], [FGREP], [1], [A literal string matcher]) dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) # _LT_DECL_OBJDUMP # -------------- # If we don't have a new enough Autoconf to choose the best objdump # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_OBJDUMP], [AC_CHECK_TOOL(OBJDUMP, objdump, false) test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) AC_SUBST([OBJDUMP]) ]) # _LT_DECL_DLLTOOL # ---------------- # Ensure DLLTOOL variable is set. m4_defun([_LT_DECL_DLLTOOL], [AC_CHECK_TOOL(DLLTOOL, dlltool, false) test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program]) AC_SUBST([DLLTOOL]) ]) # _LT_DECL_FILECMD # ---------------- # Check for a file(cmd) program that can be used to detect file type and magic m4_defun([_LT_DECL_FILECMD], [AC_CHECK_TOOL([FILECMD], [file], [:]) _LT_DECL([], [FILECMD], [1], [A file(cmd) program that detects file types]) ])# _LD_DECL_FILECMD # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED m4_ifndef([AC_PROG_SED], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f "$lt_ac_sed" && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test 10 -lt "$lt_ac_count" && break lt_ac_count=`expr $lt_ac_count + 1` if test "$lt_ac_count" -gt "$lt_ac_max"; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ])#AC_PROG_SED ])#m4_ifndef # Old name: AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) # _LT_CHECK_SHELL_FEATURES # ------------------------ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], [if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi _LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES # _LT_PATH_CONVERSION_FUNCTIONS # ----------------------------- # Determine what file name conversion functions should be used by # func_to_host_file (and, implicitly, by func_to_host_path). These are needed # for certain cross-compile configurations and native mingw. m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_MSG_CHECKING([how to convert $build file names to $host format]) AC_CACHE_VAL(lt_cv_to_host_file_cmd, [case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac ]) to_host_file_cmd=$lt_cv_to_host_file_cmd AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) _LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], [0], [convert $build file names to $host format])dnl AC_MSG_CHECKING([how to convert $build file names to toolchain format]) AC_CACHE_VAL(lt_cv_to_tool_file_cmd, [#assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac ]) to_tool_file_cmd=$lt_cv_to_tool_file_cmd AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) _LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], [0], [convert $build files to toolchain format])dnl ])# _LT_PATH_CONVERSION_FUNCTIONS lasso-2.8.2/m4/PaxHeaders/ac_try_compile_java.m40000644000000000000000000000013114377347355016517 xustar0029 mtime=1677577965.00334971 30 atime=1678814109.368761811 30 ctime=1678814319.861946773 lasso-2.8.2/m4/ac_try_compile_java.m40000644000175000017500000000272414377347355021775 0ustar00bdauvergnebdauvergne00000000000000##### http://autoconf-archive.cryp.to/ac_try_compile_java.html # # SYNOPSIS # # AC_TRY_COMPILE_JAVA # # DESCRIPTION # # AC_TRY_COMPILE_JAVA attempt to compile user given source. # # *Warning*: its success or failure can depend on a proper setting of # the CLASSPATH env. variable. # # Note: This is part of the set of autoconf M4 macros for Java # programs. It is VERY IMPORTANT that you download the whole set, # some macros depend on other. Unfortunately, the autoconf archive # does not support the concept of set of macros, so I had to break it # for submission. The general documentation, as well as the sample # configure.in, is included in the AC_PROG_JAVA macro. # # LAST MODIFICATION # # 2000-07-19 # # COPYLEFT # # Copyright (c) 2000 Devin Weaver # # Copying and distribution of this file, with or without # modification, are permitted in any medium without royalty provided # the copyright notice and this notice are preserved. AC_DEFUN([AC_TRY_COMPILE_JAVA],[ AC_REQUIRE([AC_PROG_JAVAC])dnl cat << \EOF > Test.java /* [#]line __oline__ "configure" */ ifelse([$1], , , [import $1;]) public class Test { [$2] } EOF if AC_TRY_COMMAND($JAVAC $JAVACFLAGS Test.java) && test -s Test.class then dnl Don't remove the temporary files here, so they can be examined. ifelse([$3], , :, [$3]) else echo "configure: failed program was:" >&AC_FD_CC cat Test.java >&AC_FD_CC ifelse([$4], , , [ rm -fr Test* $4 ])dnl fi rm -fr Test*]) lasso-2.8.2/m4/PaxHeaders/lt~obsolete.m40000644000000000000000000000013214404125665015065 xustar0030 mtime=1678814133.668897056 30 atime=1678814133.968898729 30 ctime=1678814319.873946842 lasso-2.8.2/m4/lt~obsolete.m40000644000175000017500000001400714404125665020337 0ustar00bdauvergnebdauvergne00000000000000# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004-2005, 2007, 2009, 2011-2019, 2021-2022 Free # Software Foundation, Inc. # Written by Scott James Remnant, 2004. # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 5 lt~obsolete.m4 # These exist entirely to fool aclocal when bootstrapping libtool. # # In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN), # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # # The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN # in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us # using a macro with the same name in our local m4/libtool.m4 it'll # pull the old libtool.m4 in (it doesn't see our shiny new m4_define # and doesn't know about Autoconf macros at all.) # # So we provide this file, which has a silly filename so it's always # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. # We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until # we give up compatibility with versions before 1.7, at which point # we need to keep only those names which we still refer to. # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) lasso-2.8.2/m4/PaxHeaders/ltsugar.m40000644000000000000000000000013214404125665014174 xustar0030 mtime=1678814133.656896989 30 atime=1678814133.968898729 30 ctime=1678814319.869946818 lasso-2.8.2/m4/ltsugar.m40000644000175000017500000001045314404125665017447 0ustar00bdauvergnebdauvergne00000000000000# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # # Copyright (C) 2004-2005, 2007-2008, 2011-2019, 2021-2022 Free Software # Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 6 ltsugar.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) # lt_join(SEP, ARG1, [ARG2...]) # ----------------------------- # Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their # associated separator. # Needed until we can rely on m4_join from Autoconf 2.62, since all earlier # versions in m4sugar had bugs. m4_define([lt_join], [m4_if([$#], [1], [], [$#], [2], [[$2]], [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) m4_define([_lt_join], [m4_if([$#$2], [2], [], [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) # lt_car(LIST) # lt_cdr(LIST) # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support # Autoconf-2.59, which quotes differently. m4_define([lt_car], [[$1]]) m4_define([lt_cdr], [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], [$#], 1, [], [m4_dquote(m4_shift($@))])]) m4_define([lt_unquote], $1) # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ # Redefine MACRO-NAME to hold its former content plus 'SEPARATOR''STRING'. # Note that neither SEPARATOR nor STRING are expanded; they are appended # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). # No SEPARATOR is output if MACRO-NAME was previously undefined (different # than defined and empty). # # This macro is needed until we can rely on Autoconf 2.62, since earlier # versions of m4sugar mistakenly expanded SEPARATOR but not STRING. m4_define([lt_append], [m4_define([$1], m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) # lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) # ---------------------------------------------------------- # Produce a SEP delimited list of all paired combinations of elements of # PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list # has the form PREFIXmINFIXSUFFIXn. # Needed until we can rely on m4_combine added in Autoconf 2.62. m4_define([lt_combine], [m4_if(m4_eval([$# > 3]), [1], [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl [[m4_foreach([_Lt_prefix], [$2], [m4_foreach([_Lt_suffix], ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) # lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) # ----------------------------------------------------------------------- # Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited # by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. m4_define([lt_if_append_uniq], [m4_ifdef([$1], [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], [lt_append([$1], [$2], [$3])$4], [$5])], [lt_append([$1], [$2], [$3])$4])]) # lt_dict_add(DICT, KEY, VALUE) # ----------------------------- m4_define([lt_dict_add], [m4_define([$1($2)], [$3])]) # lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) # -------------------------------------------- m4_define([lt_dict_add_subkey], [m4_define([$1($2:$3)], [$4])]) # lt_dict_fetch(DICT, KEY, [SUBKEY]) # ---------------------------------- m4_define([lt_dict_fetch], [m4_ifval([$3], m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) # lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) # ----------------------------------------------------------------- m4_define([lt_if_dict_fetch], [m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], [$5], [$6])]) # lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) # -------------------------------------------------------------- m4_define([lt_dict_filter], [m4_if([$5], [], [], [lt_join(m4_quote(m4_default([$4], [[, ]])), lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ]) lasso-2.8.2/m4/PaxHeaders/ac_check_classpath.m40000644000000000000000000000013214377347354016307 xustar0030 mtime=1677577964.999349691 30 atime=1678814109.372761834 30 ctime=1678814319.849946705 lasso-2.8.2/m4/ac_check_classpath.m40000644000175000017500000000455214377347354021565 0ustar00bdauvergnebdauvergne00000000000000##### http://autoconf-archive.cryp.to/ac_check_classpath.html # # SYNOPSIS # # AC_CHECK_CLASSPATH # # DESCRIPTION # # AC_CHECK_CLASSPATH just displays the CLASSPATH, for the edification # of the user. # # Note: This is part of the set of autoconf M4 macros for Java # programs. It is VERY IMPORTANT that you download the whole set, # some macros depend on other. Unfortunately, the autoconf archive # does not support the concept of set of macros, so I had to break it # for submission. The general documentation, as well as the sample # configure.in, is included in the AC_PROG_JAVA macro. # # LAST MODIFICATION # # 2000-07-19 # # COPYLEFT # # Copyright (c) 2000 Stephane Bortzmeyer # # 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 Free Software Foundation; either version 2 of the # License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception, the respective Autoconf Macro's copyright # owner gives unlimited permission to copy, distribute and modify the # configure scripts that are the output of Autoconf when processing # the Macro. You need not follow the terms of the GNU General Public # License when using or distributing such scripts, even though # portions of the text of the Macro appear in them. The GNU General # Public License (GPL) does govern all other use of the material that # constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the # Autoconf Macro released by the Autoconf Macro Archive. When you # make and distribute a modified version of the Autoconf Macro, you # may extend this special exception to the GPL to apply to your # modified version as well. AC_DEFUN([AC_CHECK_CLASSPATH],[ if test "x$CLASSPATH" = x; then echo "You have no CLASSPATH, I hope it is good" else echo "You have CLASSPATH $CLASSPATH, hope it is correct" fi ]) lasso-2.8.2/m4/PaxHeaders/dps_xtra_classpath.m40000644000000000000000000000013214377347355016414 xustar0030 mtime=1677577965.007349729 30 atime=1678814109.368761811 30 ctime=1678814319.865946796 lasso-2.8.2/m4/dps_xtra_classpath.m40000644000175000017500000000513514377347355021670 0ustar00bdauvergnebdauvergne00000000000000##### http://autoconf-archive.cryp.to/dps_xtra_classpath.html # # SYNOPSIS # # DPS_XTRA_CLASSPATH(,,,,) # # DESCRIPTION # # Set $1 to extra classpath components required for class $2 found in # a jar file in $3. If the class is found do $4 and otherwise do $5. # Uses DPS_JAVA_CHECK_CLASS for testing whether a class is avialable # # LAST MODIFICATION # # 2008-01-28 # # COPYLEFT # # Copyright (c) 2008 Duncan Simpson # # 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 Free Software Foundation; either version 2 of the # License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception, the respective Autoconf Macro's copyright # owner gives unlimited permission to copy, distribute and modify the # configure scripts that are the output of Autoconf when processing # the Macro. You need not follow the terms of the GNU General Public # License when using or distributing such scripts, even though # portions of the text of the Macro appear in them. The GNU General # Public License (GPL) does govern all other use of the material that # constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the # Autoconf Macro released by the Autoconf Macro Archive. When you # make and distribute a modified version of the Autoconf Macro, you # may extend this special exception to the GPL to apply to your # modified version as well. AC_DEFUN([DPS_XTRA_CLASSPATH],[ AC_CHECK_PROG(SED, sed) DPS_JAVA_CHECK_CLASS([$2],[got="yes"],[got="no"]) cpxtra=""; saved_cp="${CLASSPATH}"; for jhome in `ls -dr /usr/share/java /usr/java/* /usr/local/java/* 2> /dev/null`; do for jdir in lib jre/lib . ; do for jfile in $3; do if test "x$got" != "xyes" && test -f "$jhome/$jdir/$jfile"; then CLASSPATH="${saved_cp}:$jhome/$jdir/$jfile" DPS_JAVA_CHECK_CLASS([$2],[got="yes"; cpxtra="$jhome/$jdir/$jfile:"],[got="no"]) fi; done; done; done if test "x${saved_cp}" != "x"; then CLASSPATH="${saved_cp}" else unset CLASSPATH; fi if test "x$got" = "xyes"; then $1="$cpxtra" $4 true; else $5 false; fi ]) lasso-2.8.2/m4/PaxHeaders/ac_prog_javac_works.m40000644000000000000000000000013114377347355016530 xustar0029 mtime=1677577965.00334971 30 atime=1678814109.372761834 30 ctime=1678814319.857946751 lasso-2.8.2/m4/ac_prog_javac_works.m40000644000175000017500000000507314377347355022006 0ustar00bdauvergnebdauvergne00000000000000##### http://autoconf-archive.cryp.to/ac_prog_javac_works.html # # SYNOPSIS # # AC_PROG_JAVAC_WORKS # # DESCRIPTION # # Internal use ONLY. # # Note: This is part of the set of autoconf M4 macros for Java # programs. It is VERY IMPORTANT that you download the whole set, # some macros depend on other. Unfortunately, the autoconf archive # does not support the concept of set of macros, so I had to break it # for submission. The general documentation, as well as the sample # configure.in, is included in the AC_PROG_JAVA macro. # # LAST MODIFICATION # # 2000-07-19 # # COPYLEFT # # Copyright (c) 2000 Stephane Bortzmeyer # # 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 Free Software Foundation; either version 2 of the # License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception, the respective Autoconf Macro's copyright # owner gives unlimited permission to copy, distribute and modify the # configure scripts that are the output of Autoconf when processing # the Macro. You need not follow the terms of the GNU General Public # License when using or distributing such scripts, even though # portions of the text of the Macro appear in them. The GNU General # Public License (GPL) does govern all other use of the material that # constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the # Autoconf Macro released by the Autoconf Macro Archive. When you # make and distribute a modified version of the Autoconf Macro, you # may extend this special exception to the GPL to apply to your # modified version as well. AC_DEFUN([AC_PROG_JAVAC_WORKS],[ AC_CACHE_CHECK([if $JAVAC works], ac_cv_prog_javac_works, [ JAVA_TEST=Test.java CLASS_TEST=Test.class cat << \EOF > $JAVA_TEST /* [#]line __oline__ "configure" */ public class Test { } EOF if AC_TRY_COMMAND($JAVAC $JAVACFLAGS $JAVA_TEST) >/dev/null 2>&1; then ac_cv_prog_javac_works=yes else true echo "configure: failed program was:" >&AC_FD_CC cat $JAVA_TEST >&AC_FD_CC fi rm -f $JAVA_TEST $CLASS_TEST ]) AC_PROVIDE([$0])dnl ]) lasso-2.8.2/m4/PaxHeaders/ac_prog_javac.m40000644000000000000000000000013114377347355015303 xustar0029 mtime=1677577965.00334971 30 atime=1678814109.372761834 30 ctime=1678814319.857946751 lasso-2.8.2/m4/ac_prog_javac.m40000644000175000017500000000616014377347355020557 0ustar00bdauvergnebdauvergne00000000000000##### http://autoconf-archive.cryp.to/ac_prog_javac.html # # SYNOPSIS # # AC_PROG_JAVAC # # DESCRIPTION # # AC_PROG_JAVAC tests an existing Java compiler. It uses the # environment variable JAVAC then tests in sequence various common # Java compilers. For political reasons, it starts with the free # ones. # # If you want to force a specific compiler: # # - at the configure.in level, set JAVAC=yourcompiler before calling # AC_PROG_JAVAC # # - at the configure level, setenv JAVAC # # You can use the JAVAC variable in your Makefile.in, with @JAVAC@. # # *Warning*: its success or failure can depend on a proper setting of # the CLASSPATH env. variable. # # TODO: allow to exclude compilers (rationale: most Java programs # cannot compile with some compilers like guavac). # # Note: This is part of the set of autoconf M4 macros for Java # programs. It is VERY IMPORTANT that you download the whole set, # some macros depend on other. Unfortunately, the autoconf archive # does not support the concept of set of macros, so I had to break it # for submission. The general documentation, as well as the sample # configure.in, is included in the AC_PROG_JAVA macro. # # LAST MODIFICATION # # 2000-07-19 # # COPYLEFT # # Copyright (c) 2000 Stephane Bortzmeyer # # 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 Free Software Foundation; either version 2 of the # License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception, the respective Autoconf Macro's copyright # owner gives unlimited permission to copy, distribute and modify the # configure scripts that are the output of Autoconf when processing # the Macro. You need not follow the terms of the GNU General Public # License when using or distributing such scripts, even though # portions of the text of the Macro appear in them. The GNU General # Public License (GPL) does govern all other use of the material that # constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the # Autoconf Macro released by the Autoconf Macro Archive. When you # make and distribute a modified version of the Autoconf Macro, you # may extend this special exception to the GPL to apply to your # modified version as well. AC_DEFUN([AC_PROG_JAVAC],[ AC_REQUIRE([AC_EXEEXT])dnl if test "x$JAVAPREFIX" = x; then test "x$JAVAC" = x && AC_CHECK_PROGS(JAVAC, "gcj$EXEEXT -C" jikes$EXEEXT guavac$EXEEXT javac$EXEEXT) else test "x$JAVAC" = x && AC_CHECK_PROGS(JAVAC, "gcj$EXEEXT -C" jikes$EXEEXT guavac$EXEEXT javac$EXEEXT, $JAVAPREFIX) fi true AC_PROG_JAVAC_WORKS AC_PROVIDE([$0])dnl ]) lasso-2.8.2/m4/PaxHeaders/ac_prog_jar.m40000644000000000000000000000013114377347355014773 xustar0029 mtime=1677577965.00334971 30 atime=1678814109.372761834 30 ctime=1678814319.853946727 lasso-2.8.2/m4/ac_prog_jar.m40000644000175000017500000000271214377347355020246 0ustar00bdauvergnebdauvergne00000000000000##### http://autoconf-archive.cryp.to/ac_prog_jar.html # # SYNOPSIS # # AC_PROG_JAR # # DESCRIPTION # # AC_PROG_JAR tests for an existing jar program. It uses the # environment variable JAR then tests in sequence various common jar # programs. # # If you want to force a specific compiler: # # - at the configure.in level, set JAR=yourcompiler before calling # AC_PROG_JAR # # - at the configure level, setenv JAR # # You can use the JAR variable in your Makefile.in, with @JAR@. # # Note: This macro depends on the autoconf M4 macros for Java # programs. It is VERY IMPORTANT that you download that whole set, # some macros depend on other. Unfortunately, the autoconf archive # does not support the concept of set of macros, so I had to break it # for submission. # # The general documentation of those macros, as well as the sample # configure.in, is included in the AC_PROG_JAVA macro. # # LAST MODIFICATION # # 2000-07-19 # # COPYLEFT # # Copyright (c) 2000 Egon Willighagen # # Copying and distribution of this file, with or without # modification, are permitted in any medium without royalty provided # the copyright notice and this notice are preserved. AC_DEFUN([AC_PROG_JAR],[ AC_REQUIRE([AC_EXEEXT])dnl if test "x$JAVAPREFIX" = x; then test "x$JAR" = x && AC_CHECK_PROGS(JAR, jar$EXEEXT) else test "x$JAR" = x && AC_CHECK_PROGS(JAR, jar, $JAVAPREFIX) fi true AC_PROVIDE([$0])dnl ]) lasso-2.8.2/m4/PaxHeaders/ac_prog_javah.m40000644000000000000000000000013114377347355015310 xustar0029 mtime=1677577965.00334971 30 atime=1678814109.368761811 30 ctime=1678814319.861946773 lasso-2.8.2/m4/ac_prog_javah.m40000644000175000017500000000244314377347355020564 0ustar00bdauvergnebdauvergne00000000000000##### http://autoconf-archive.cryp.to/ac_prog_javah.html # # SYNOPSIS # # AC_PROG_JAVAH # # DESCRIPTION # # AC_PROG_JAVAH tests the availability of the javah header generator # and looks for the jni.h header file. If available, JAVAH is set to # the full path of javah and CPPFLAGS is updated accordingly. # # LAST MODIFICATION # # 2002-03-25 # # COPYLEFT # # Copyright (c) 2002 Luc Maisonobe # # Copying and distribution of this file, with or without # modification, are permitted in any medium without royalty provided # the copyright notice and this notice are preserved. AC_DEFUN([AC_PROG_JAVAH],[ AC_REQUIRE([AC_CANONICAL_SYSTEM])dnl AC_REQUIRE([AC_PROG_CPP])dnl test "x$JAVAH" = x && AC_CHECK_PROGS(JAVAH,gjavah gcjh javah) if test "x$JAVAH" != x ; then AC_TRY_CPP([#include ],,[ ac_save_CPPFLAGS="$CPPFLAGS" changequote(, )dnl ac_dir=`echo $ac_cv_path_JAVAH | sed 's,\(.*\)/[^/]*/[^/]*$,\1/include,'` ac_machdep=`echo $build_os | sed 's,[-0-9].*,,' | sed 's,cygwin,win32,'` changequote([, ])dnl CPPFLAGS="$ac_save_CPPFLAGS -I$ac_dir -I$ac_dir/$ac_machdep" AC_TRY_CPP([#include ], ac_save_CPPFLAGS="$CPPFLAGS", AC_MSG_WARN([unable to include ])) CPPFLAGS="$ac_save_CPPFLAGS"]) else true fi]) lasso-2.8.2/PaxHeaders/README.JAVA0000644000000000000000000000013113766621500013327 xustar0029 mtime=1608196928.71889494 30 atime=1678098069.997489101 30 ctime=1678814319.937947205 lasso-2.8.2/README.JAVA0000644000175000017500000000044613766621500016604 0ustar00bdauvergnebdauvergne00000000000000In order to use gcj to compile the java binding, you must also have development files of libgcj. On Debian systems that translates to: - gcj 3.3 -> libgcj4-dev - gcj 3.4 -> libgcj5-dev - gcj 4.0 -> libgcj6-dev - gcj 4.1 -> libgcj7-dev - gcj 4.2 -> libgcj8-dev - gcj 4.3 -> libgcj9-dev lasso-2.8.2/PaxHeaders/NEWS0000644000000000000000000000013214404125446012425 xustar0030 mtime=1678813990.828058466 30 atime=1678814008.604164919 30 ctime=1678814319.897946978 lasso-2.8.2/NEWS0000644000175000017500000011636014404125446015704 0ustar00bdauvergnebdauvergne00000000000000NEWS ==== 2.8.2 - March 14th 2023 ----------------------- - Compatibility with EVP API of openssl 1.x, thanks to Maxime Besson from Worteks. 2.8.1 - February 28th 2023 -------------------------- - Major overhaul of OpenSSL API usage by using only the EVP API as the low level API (RSA*, HMAC*) is deprecated. - Fix wrong parsing of Count attribute on saml:ProxyRestriction, thanks to Maxime Besson from Worteks. - Perl: pass LDFLAGS to Makefile.PL - Replace use of deprecated xmlSecBase64Decode by xmlSecBase64Decode_ex - Fix overwrite of profile.signature_status in lasso_saml20_login_process_response_status_and_assertion - Fix lot of GCC warnings 2.8.0 - March 15th 2022 ----------------------- 22 commits, 585 files changed, 2448 insertions, 69478 deletions * Removal of all win32 and ID-WSF related source code obsoleted a long time ago * Improve choice of signature method and of allowed signature method (by Jakub * Hrozek ), it's now possible to completely forbid SHA1 for example * Change default RSA encryption padding to OAEP * Fix: HMAC signature other than SHA1 (jhrozek@redhat.com) * Fix: prevent multiple OneTimeUse elements 2.7.0 - June 1st 2021 ---------------------- 36 commits, 45 files changed, 1945 insertions, 177 deletions * CVE-2021-28091: Fix signature checking on unsigned response with multiple assertions https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-28091 When AuthnResponse messages are not signed (which is permitted by the specifiation), all assertion's signatures should be checked, but currently after the first signed assertion is checked all following assertions are accepted without checking their signature, and the last one is considered the main assertion. This patch : * check signatures from all assertions if the message is not signed, * refuse messages with assertion from different issuers than the one on the message, to prevent assertion bundling event if they are signed. * Python: improve display of warnings in the binding generator * replace deprecated index() by strchr() (#51385) * Fix: new provider reference count is incremented one time too many (#51420) * docs: update gtk-doc-tools integration (#50441) * bindings: disable java tests when java is disabled * Fix: python3 bindings (#51249) * configure.ac: disable java bindings * build: update to use origin/main * debian: add packaging for debian-buster * jenkins.sh: build against all available python versions (#44287) * python: do not leak out_pyvalue if method call protocol is not respected (#44287) * python: do not raise in valid_seq() (#44287) * python: return NULL if get_list_of_strings() fails (#44287) * python: return NULL if get_list_of_pygobject fails (#44287) * python: return NULL if get_list_of_xml_nodes fails (#44287) * python: return NULL if set_list_of_pygobject fails (#44287) * python: return NULL if set_list_of_xml_nodes fails (#44287) * python: return NULL if set_list_of_strings fails (#44287) * python: return NULL if set_hashtable_of_strings fails (#44287) * python: return NULL if set_hashtable_of_pygobject fails (#44287) * python: free internal string buffer if needed in set_list_of_strings (#44287) * python: check if hashtable is NULL before deallocatio (#44287)n * python: add a failure label to method wrappers (#44287) * python: add macro for early return (#44287) * python: remove newline before method call (#44287) * python: simplify get_logger_object (#44287) * python: fix warning about discarded const modifier (#44287) * python: replace exception by warning on logging path (#44287) * python: use simpler call format to prevent warning about PY_SSIZE_T_CLEAN (#44287) * python: remove deprecated PyErr_Warn (#44287) * python: remove unused PyString_Size (#44287) * python: Exception.message was removed in python3 (#45995) * tools: reimplement xmlURIEscapeStr to respect RFC3986 (#45581) * configure.ac: support php7 interpreter on CentOS 8 (#42299) 2.6.1 - April 22th 2020 ---------------------- 42 commits, 425 files changed, 3894 insertions, 795 deletions - Keep order of SessionIndexes - Clear SessionIndex when private SessionIndexes is empty (#41950) - misc: clear warnings about class_init signature using coccinelle - tests: fix compilation with check>0.12 (#39101) - Sort input file lists to make build deterministic (#40454) - debian: disable php7 (#28608) - Modify .gitignore for PHP 7 binding (#28608) - Add PHP 7 binding (#28608) - Fix tests broken by new DEBUG logs (#12829) - Improve error logging during node parsing (#12829) - Improve configure compatibility (#32425) - Improve compatibility with Solaris (#32425) - Fix reference count in lasso_server_add_provider2 (fixes #35061) - Fix python multi-version builds on jessie and stretch - docs: do not use Internet to fetch DTDs, entities or documents (#35590) - fix missing include for index() (fixes #33791) - PAOS: Do not populate "Destination" attribute (Dmitrii Shcherbakov) - export symbol lasso_log (#33784) - Do not ignore WantAuthnRequestSigned value with hint MAYBE (#33354) - Use io.open(encoding=utf8) in extract_symbols/sections.py (#33360) - xml: adapt schema in saml2:AuthnContext (#29340) - Fix ECP signature not found error when only assertion is signed (#26828) - autoconf: search python interpreters by versions (John Dennis) - python: make tools compatible with Py3 (John Dennis) - python: run tests and tools with same interpreter as binding target (John Dennis) - improve resiliency of lasso_inflate (#24853) - fix segfault in lasso_get_saml_message (#24830) - python: add classmethod Profile.getIssuer (#24831) - website: add news about 2.6.0 release - debian: sync with debian package (#24595) - faq: fix references to lasso.profileGetIssuer (#24832) - python: add a classmethod for lasso.profileGetIssuer (#24831) - tools: fix segfault in lasso_get_saml_message (fixes #24830) - jenkins.sh: add a make clean to prevent previous build to break new ones - tools: set output buffer size in lasso_inflate to 20 times the input size (fixes #24853) - Use python interpreter specified configure script - Make Python scripts compatible with both Py2 and Py3 - fix duplicate definition of LogoutTestCase and logoutSuite - Downcase UTF-8 file encoding name - Make more Python scripts compatible with both Py2 and Py3 - Configure should search for versioned Python interpreter. - Clean python cache when building python3 binding - Move AC_SUBST declaration for AM_CFLAGS with alike (#24771) - Remove -Werror from --enable-debugging (fixes #24771) - xml: fix parsing of saml:AuthnContext (fixes #25640) 2.6.0 - June 1st 2018 --------------------- 32 commits, 73 files changed, 1920 insertions, 696 deletions - add inline implementation of lasso_log - Choose the Reference transform based on the chosen Signature transform (fixes #10155) - add support for C14N 1.1 methods and C14N withComments methods (fixes #4863) - remove DGME specific commented out code - add docstring on SHA-2 signature method enum - tests: silence unused variable warning - check node names in lasso_node_impl_init_from_xml() (fixes #47) - fix segfault when parsed node has no namespace (#47) - do not call xmlSecKeyDuplicate is source key is NULL - enable user supplied CFLAGS - Fix ecp test validate_idp_list() (fixes #11421) - tests: convert log level as string - fix definitions of error, critical and warning macros (fixes #12830) - jenkins.sh: add V=1 - add defined for the XML namespace - ignore unknown attributes from the xsi: namespace - saml-2.0: improve support for free content inside samlp2:Extensions (fixes #18581) - debian: initialize stretch packaging with a copy of upstream debian (#21772) - replace use of which is deprecated (fixes #18771) - fix get_issuer and get_in_response_to - route logs from libxml2 and libxmlsec through GLib logging - tests: prevent crash in glib caused by abort on recursive logging - java: stop setting a bytecode version target - add xmlsec_soap.h to Makefile - python: route logs for libxml2 and libxmlsec2 to their own logger - perl: force use of the in-tree lasso when running tests (fixes #23276) - perl: set DESTDIR and PREFIX at Makefile's creation - Replace xmlSecSoap functions with lasso implementations - add a pem-public-key runtime flag - deprecate loading PEM formatted public keys in lasso_xmlsec_load_key_info - perl/tests: build Makefile.perl before running the tests 2.5.1 - February 19th 2016 --------------------------- 17 commits, 16 files changed, 1096 insertions, 42 deletions - Add missing urn constants used in PAOS HTTP header - Set NotBefore in SAML 2.0 login assertions - tests: fix leak in test test16_test_get_issuer - id-ff: fix leak of profile->private_data->message_id - saml-2.0: fix leak of message_id in lasso_profile_saml20_build_paos_request_msg - tests: fix leaks in test_ecp - xml: fix wrong termination of comment - xml: fix leak in lasso_soap_envelope_new_full - profile: fix leak of private idp_list field - saml-2.0: fix leaks of url - tests: fix leak - tests: update valgrind suppressions - perl: remove quotes from $PERL -V::ccflags: output (#9572) - Fix wrong snippet type (fixes #9616). Thanks to Brett Gardner for the patch. - tools.c: use correct NID and digest length when building RSA signature using SHA-2 digest (fixes #10019) Thanks to Brett Gardner for the patch. - bindings/php5: fix enum getters and setters (fixes #10032). Thanks to Brett Gardner for the bug report. - fix warning about INCLUDES directive 2.5.0 - September 2nd 2015 -------------------------- 151 commits, 180 files changed, 8391 insertions, 1339 deletions - lots of bugfixes (reported by static analysis tools like clang, coverity and manual inspection) thanks to Simo Sorce and John Dennis from RedHat - xsd:choices are now parsed correctly by implementing a real finite automata for parsing XML documents. New flag for jumping forward and backward in schema snippets have been added. It fixes parsing of message from third party not following the ordre from the schema (they are entitled to do it but most SAML implementations do not) - added C CGI examples for SP and IdP side - removed the _POSIX_SOURCE declaration - added support for the SHA-2 family of hash functions - fixed protocol profile selection when parsing AuthnRequest - added support for Python 3, thanks to Houzéfa Abbasbhay from XCG Consulting - fixed default value of WantAuthnRequestSigned in metadata parsing - SAML 2.0 ECP is now functionnal, thanks to John Dennis from RedHat - added two new API function to LassoProfile to extract the Issuer and InResponseTo attribute of messages, allowing pre-treatment before parsing the message, to load the metadata of the remote provider, or find the request which the response matches. - fixed segfault when parsing HTTP-Redirect marlformed base64 content - added support for automake 1.15 (jdennis) 2.4.1 - August 28th 2014 --------------------------- 56 commits, 35 files changed, 12590 insertions(+), 31117 deletions(-) - fix bug #4455 runtime bug in perl binding on debian wheezy 32bits # - fix warning on g_type_init() on GLib > 2.36 - lot of null pointer, boundary checks, and dead code removal after validation using Coverity and Clang static analyzer (Simo Sorce) - always set NotOnOrAfter on the Condition element - fix pkg-config typo (Simon Josefsson) - Python binding now conserve the order of session indexes values - fix memory leaks - Python bindings now automatically convert unicode values to UTF-8 2.4.0 - January 7th 2014 ------------------------ 281 commits, 933 files changed, 45384 insertions, 6313 deletions Minor version number increase since ABI was extended (new methods). - Key rollover support: Lasso is now able to accept messages signed by any key declared as a signing key in a metadata and not just the last one. You can also decrypt encrypted nodes using any of a list of private keys, allowing roll-over of encryption certificates. Signing key roll-over is automatic, your provider just have to provide the new signing key in their metadata. For multiple-encryption key you can load another private key than the one loaded in the LassoServer constuctor with code like that: >>> import lasso >>> server = lasso.Server(our_metadata, first_private_key_path) >>> server.setEncryptionPrivateKey(second_private_key_path) See the FAQ file for the workflow of a proper key roll-over. - Partial logout response now produces a specific error code when parsed by lasso_logout_process_response_msg() - Bugs in lasso_assertion_query_build_request_msg() were fixed - Processing of assertions is not stopped when checking that first level status code is not success, so that later code can check the second level status code. - A new generic error for denied request was added, LASSO_PROFILE_ERROR_REQUEST_DENIED - A new API lasso_server_load_metadata() was added to load federation files (XML files containing metadata from multiple providers) and to check signatures on them. - Better warning and errors are reported in logs when failing to load a metadata file. - Bugs around missing namespace declaration for dump file were fixed, it prevented reloading dumped object (like LassoLogin). - lasso_node_get_xml_node_for_any_type() must be able to copy the content of an XML node to another (namespace, attribute and children). It did not, now it is fixed. It can be used for example to add specific attribute like « xsi:type="string" » to a Saml2AttributeValue. Here is a python snippet to do that: >>> import lasso >>> a = lasso.Saml2AttributeValue() >>> a.setOriginalXmlnode('Value') >>> print a.debug(0) Value - support for symetric keys signatures: for a long time XMLDsig standard has supported HMAC signature, or signature based on a shared secret key an hash algorithm. Lasso now supports to share a key with another Lasso using service or identity provider and to verify and sign SAML exchange using this key. Performance can be 100 times more than with assymetric cryptography, i.e. RSA. - nodes able to hold any XML attribyte (like saml:AttributeValue) contains a hashtable to for holding those attributes, those hashtable have a new syntax for attributes of another namespace than the current node namespace, inspired by the Python ElementTree library: {the_namespace}the_attribute_name ex: {http://www.w3.org/2001/XMLSchema-instance}type for the classic xsi:type attribute. - xmldsig:X509Data node now possess a binding as a Lasso object. You can use it combined with the new class LassoSaml2KeyInformationDataType to use the holder-of-key subject confirmation method. - The perfs benchmarking tools now allows to select a different metadata set (for example to test with different public key sizes). - Perl minimal version for the binding was downgraded to 5 - pseudo-XSchema validation: the new XML deserializer does more to enforce constraints of the schema defining SAML messages. It means Lasso is less forgiving with non-conform implementation of SAML. - thin-sessions mode: A new flag was added named thin-session, you can set it using lasso_set_flag("thin-sessions") or by setting the LASSO_FLAG environement variable to the string "thin-sessions". The effect of this flag is to remove complete storage of assertions in the LassoSession object, which was made mainly to support logout and the artifact binding for ID-FF 1.2. A new thinner structure is used for supporting logout, and ID-FF 1.2 can now use the same storage mechanism as the SAML 2 implementation for the artifact binding (i.e. using lasso_profile_get_artifact_message after artifact generation and lasso_profile_set_artifact_message before artifact retrieval). - better initialization and access to SessionIndex in logout requests: LassoSession now store all generated SessionIndex for a session using a small structure, using it the LassoLogout profile can now initialize LassoLogout message with all of them. It's not necessary to implement this functionnalitý in your service or identity provider anymore. - new LassoKey object: this new class was introduced to simplify management of keys when using shared key signature. But you can also use it to load assymetric keys. In the future it should gain API to do XML signature and encryptiong independently of any SAML 2.0 or ID-FF 1.2 exchange. Providing the first simple binding of libxmlsec to Python. - Improvements to autoconf and automake files to compile under Darwin (Mac Os X) and Fedora. - a FAQ file was started. - added API: LASSO_LOGOUT_ERROR_PARTIAL_LOGOUT LASSO_PROFILE_ERROR_ENDPOINT_INDEX_NOT_FOUND LASSO_PROFILE_ERROR_REQUEST_DENIED LASSO_PROVIDER_ROLE_ALL LASSO_SERVER_ERROR_NO_PROVIDER_LOADED LASSO_SERVER_LOAD_METADATA_FLAG_CHECK_ENTITIES_DESCRIPTOR_SIGNATURE LASSO_SERVER_LOAD_METADATA_FLAG_CHECK_ENTITY_DESCRIPTOR_SIGNATURE LASSO_SERVER_LOAD_METADATA_FLAG_DEFAULT LASSO_SERVER_LOAD_METADATA_FLAG_INHERIT_SIGNATURE LASSO_SIGNATURE_METHOD_HMAC_SHA1 LASSO_SIGNATURE_METHOD_NONE LASSO_XMLENC_ERROR_INVALID_ENCRYPTED_DATA LASSO_XMLENC_HREF LASSO_XMLENC_PREFIX struct LassoDsX509Data { LassoDsX509DataPrivate* private_data } struct LassoKey { LassoKeyPrivate* private_data } struct LassoSaml2KeyInfoConfirmationDataType { LassoSaml2KeyInfoConfirmationDataTypePrivate* private_data } LassoServerLoadMetadataFlag LassoDsX509Data* lasso_ds_key_value_get_x509_data ( LassoDsKeyValue* key_value ) None lasso_ds_key_value_set_x509_data ( LassoDsKeyValue* key_value, LassoDsX509Data* x509_data ) const char* lasso_ds_x509_data_get_certificate ( LassoDsX509Data* x509_data ) const char* lasso_ds_x509_data_get_crl ( LassoDsX509Data* x509_data ) const char* lasso_ds_x509_data_get_subject_name ( LassoDsX509Data* x509_data ) GType lasso_ds_x509_data_get_type ( ) LassoDsX509Data* lasso_ds_x509_data_new ( ) None lasso_ds_x509_data_set_certificate ( LassoDsX509Data* x509_data, const char* certificate ) None lasso_ds_x509_data_set_crl ( LassoDsX509Data* x509_data, const char* crl ) None lasso_ds_x509_data_set_subject_name ( LassoDsX509Data* x509_data, const char* subject_name ) GType lasso_key_get_type ( ) LassoKey* lasso_key_new_for_signature_from_base64_string ( char* base64_string, char* password, LassoSignatureMethod signature_method, char* certificate ) LassoKey* lasso_key_new_for_signature_from_file ( char* filename_or_buffer, char* password, LassoSignatureMethod signature_method, char* certificate ) char* lasso_key_query_sign ( LassoKey* key, const char* query ) lasso_error_t lasso_key_query_verify ( LassoKey* key, const char* query ) xmlNode* lasso_key_saml2_xml_sign ( LassoKey* key, const char* id, xmlNode* document ) lasso_error_t lasso_key_saml2_xml_verify ( LassoKey* key, char* id, xmlNode* document ) GList* lasso_lib_logout_request_get_session_indexes ( LassoLibLogoutRequest* lib_logout_request ) None lasso_lib_logout_request_set_session_indexes ( LassoLibLogoutRequest* lib_logout_request, GList* session_indexes ) lasso_error_t lasso_provider_add_key ( LassoProvider* provider, LassoKey* key, gboolean after ) lasso_error_t lasso_provider_set_server_signing_key ( LassoProvider* provider, LassoKey* key ) int lasso_provider_verify_signature ( LassoProvider* provider, const char* message, const char* id_attr_name, LassoMessageFormat format ) GList* lasso_saml2_key_info_confirmation_data_type_get_key_info ( LassoSaml2KeyInfoConfirmationDataType* kicdt ) GType lasso_saml2_key_info_confirmation_data_type_get_type ( ) LassoNode* lasso_saml2_key_info_confirmation_data_type_new ( ) None lasso_saml2_key_info_confirmation_data_type_set_key_info ( LassoSaml2KeyInfoConfirmationDataType* kicdt, GList* key_infos ) gboolean lasso_saml_name_identifier_equals ( LassoSamlNameIdentifier* a, LassoSamlNameIdentifier* b ) lasso_error_t lasso_server_add_provider2 ( LassoServer* server, LassoProvider* provider ) lasso_error_t lasso_server_load_metadata ( LassoServer* server, LassoProviderRole role, const gchar* federation_file, const gchar* trusted_roots, GList* blacklisted_entity_ids, GList** loaded_entity_ids, LassoServerLoadMetadataFlag flags ) GList* lasso_session_get_assertion_ids ( LassoSession* session, const gchar* providerID ) GList* lasso_session_get_name_ids ( LassoSession* session, const gchar* providerID ) GList* lasso_session_get_session_indexes ( LassoSession* session, const gchar* providerID, LassoNode* name_id ) 2.3.6 - November 29th 2011 -------------------------- 2 commits, 2 files changed, 28 insertions, 2 deletions * fix a bug when receiving a signature using the InclusiveNamespaces PrefixList by copying namespace declaration from upper level at the level of the signed node. * fix compilation warning on recent version of GCC 2.3.5 - January 11th 2010 ------------------------- 36 commits, 31 files changed, 240 insertions, 92 deletions Generic: * add more backward compatible replacement for GHashTable methods (to compile under centos5) * a generic way to attach encryption parameters to LassoNode has been added, a future major release should see the removal of specific field for storing those parameters in node supporting encryption. * The way we format encrypted node is now more compatible with Shibboleth and I hope with other implementations: the KeyInfo is kept inside the EncryptedData element, and not repeated inside a child of the EncryptedElement. * Fixed: LASSO_SIGNATURE_VERIFY_HINT_FORCE did not force checking signature on messages * Fixed: lasso_provider_get_first_http_method broke when an unknown binding was found in an endpoint declaration SAMLv2: * Fixed: segfault when checking signature on logout responses (introduced in 2.3.4) * SPNameQualifier is more set on subject NameID of assertions, as it should be reserved for Affiliation members (and it broke shibboleth which only expect this to be used for affiliation, wrongly I think). * Conditions->notBefore/notOnOrAfter is motre setted by lasso_login_build_assertion, only notOnOrAfter on SubjectConfirmationData, which is more inline with the specification. * the logout profile now use the session to initialize the NameID in requests, not the identity. It allow to have a transient federation in the session but a persistent one in the identity * fixed support for the POST binding * Fixed: it seems that strtol does not reset errno under Centos 5, we do it by hand. Python binding: * constructors now raise a lasso.Error instead of a simple Exception when failing PHP5 binding: * removed dependency upon an internal function of liblasso3 2.3.4 - Otober 8th 2010 ----------------------- 21 commits, 18 files changed, 312 insertions, 58 deletions Generic * fix warning for compiling on Pardus and EL5 * the release tarball now contains the figures for the documentation * lasso_login_process_authn_request documentation gained details on returned errors SAMLv2: * report unknown provider instead of an error on parameter value when resolving and artifact in an assertionConsumer endpoint and the provider is not registered into the server object. * lasso_provider_get_assertion_consumer_url now use specific SAMLv2 methods * fixed a bug in the ordering of indexed endpoints which produced error when looking up the default assertion consumer. It also improved ordering in presence of the attribute isDefault="false". A non-regression test was added for this functionality. ID-FFv1.2: * respect the signature verify hint when handling authn requests 2.3.3 - October 1st 2010 ------------------------ 44 commits, 264 files changed, 858 insertions, 401 deletions Generic: * Fixed a lot of memleaks thanks to valgrind, the greatest tool on earth (with coccinelle). * Add missing annotation creating memleaks in python binding (on lasso_*_dump king of methods). * Fix bad inclusion of an ID-WSF include file when ID-WSF support is not enabled * Benchmarking program was updated to measure each part of a WebSSO independently (AuthnRequest generation/processing, AuthnResponse generation/processing). * Add new macro lasso_strisequal and lasso_strisnotequal to avoid errors with strcmp. (Thanks to coccinelle semantic patches). SAMLv2: * Add uniform support for LassoProfileVerifySignatureHint for other profiles than WebSSO. * Report signature errors in response to NameIDNanagement requests * Fix wrong use of macro lasso_foreach breaking the mecanism for finding a default assertion consumer. * Behaviour of lasso_login_build_assertion was modified: - when the NameIDPolicy lacks a Format attribute or the Format attribute is the unspecified format (see the spec for the corresponding URN). Now it results in a transient nameid being generated. If you want it to be persistent you must change it before calling this method. - the setting of the SubjectConfirmationData->NotOnOrAfter attribute was restored as it is mandated by the WebSSO profile. It's the same value as Conditions->NotOnOrAfter. * Fix missing initialization of Destination attribute on Samlp2StatusResponse object for synchronous bindings (Redirect & Post) 2.3.2 - September 7th 2010 -------------------------- * Fix bug in increment of the libtool version info, increasing the SONAME uselessly. 2.3.1 - September 7th 2010 -------------------------- 31 commits, 23 files changed, 523 insertions, 356 deletions * An ABI breakage was introduced in 2.3.0 with change of value for enumeration values LASSO_PROVIDER_ROLE_SP and LASSO_PROVIDER_ROLE_IDP, it breaked code compiled with previous version and dumps of server objects. This release fix it. * SAMLv2 handling of the artifact binding for the WebSSO profile is now simpler, no more dumping of the response nodes and signing at the artifact building time, the final response is signed when the artifact is generated and when unserialized later it is only manipulated as XML for not breaking the signature. It fixes usage of ciphered private keys with the HTTP-Artifact binding. * SAMLv2 internal storage of endpoints was modified to better keep the ordering between endpoints, which is espacially important for AssertionConsumerService endpoints and difficult to implement well. 2.3.0 - July 21th 2010 ---------------------- 391 commits, 332 files changed, 13919 insertions, 7137 deletions So what's new ? * Misc: - a public key is no more mandatory for building a LassoProvider - date parsing now conforms to XSD and ISO8601 specification, especially with respect to milliseconds (they are just ignored, but parsing do not fails now). - the encryption private key can be loaded with a password (SAMLv2 support only) - keep on replacing direct glib data structure manipulation function by safer lasso macros. - remove useless verbosity when there is already some error reporting through method return value. - add a signature_verify_hint parameter to all profiles, which can be used to specify the policy for verifying signatures. The choices are: - maybe, i.e. let Lasso decides, - force, i.e. always verify, even when it is not needed by the spec, - ignore, i.e. verify, but do not block processing on signature verifications error. - add a new snippet type: SNIPPET_COLLECT_NAMESPACES, to collect all declared namespaces in the context of a node. It is needed for interpreting a string value which depend on the locally declared namespaces (like XPath queries). - support full syntax for query strings (lasso missed support for semi-colon separator between query string key-value pairs). - make LassoServer load its public key like LassoProvider - lasso_build_unique_id is now part of the public API - add lasso_profile_sso_role_with to decide on the role we have toward another provider (depending on the Identity, the Session or the Server object in this order). - add a lasso_node_debug method wich output a human friendly dump (i.e. indented) of a serialized LassoNode, contrary to dump which returns a computer friendly one (dump will conserve signature values, not debug). * SAMLv2: - constraint on the number of SessionIndex value in a LogoutRequest was worked-around (see lasso_samlp2_logout_request_get/set_session_indexes) - full support for encrypted signing key (ID-FFv1.2 is coming in next release) - The treatment of assertions consumer endpoints metadata was improved to be what the specification says, i.e find the best default. - lasso_assertion_query_build_request_msg now properly initialize the Subject of the query from all possibles sources (first profile->nameIdentifier, then from the identity dump and finally from the session). - when a parsed Assertion contains a signature, we return the original_xmlnode instead of serializing the LassoNode content when calling lasso_node_get_xmlNode. This is in order to keep canonical representation of signed assertions. The result is that parsed and signed assertions should be considered read-only with respect to serialization. - lasso_login_build_assertion no longer initialize sessionNotOnOrAfter, it must be done explicitely by the IdP implementation. Only the assertion lifetime is set by the arguments. - when loading metadata for a provider, we verify that a role descriptor exists for the prescribed role: i.e if you do server.addProvider(lasso.PROVIDER_ROLE_SP, "metadata.xml"), lasso checks that the metadata contain a descriptor for the role "SPSSO". - new helper methods to manipulate and check conditions on SAMLv2 assertions. - move strings to their own header (but keep retro-compatibility through inclusion in xml/strings.h). * Bindings: - improve general use of bindings/utils.py module inside the bindings to share type matching logic. * Python binding: - Glib warning are tunneled through python logging API - camelcasing of uppercase starting fields for python and java bindings has been fixed, old orthograph has been also kept for compatibility. The problem could be seen on LassoAssertion object where the field ID was renamed iD which was difficult to guess. - node class now supports pickling by leveraging existing XML serialization. It posseses the same limitations as the existing XML serialization, for example serializing a LassProfile is not an idempotent operation, it will miss the server, identity and session fields. - empty GList now return an empty tuple, not None (it fixes a lot list traversal codes) - do not forget to emit 'pass' in declaration of class without any content (no method, no field, no constructor) - the code to emit 'freeing' code for values was factorized and improved. - for empty lists returns an empty pyhon list, not None. * Perl binding: - support for out parameters was added. - better memory freeing * Java binding: - finished exception support for error returning methods. - optimize the makefile for file listing generation - for NULL GList returns an empty ArrayList object, not null. * Documentation: - add examples to LassoLogout documentation - fix missing or deprecated methods in lasso-sections.txt - document LassoIdWsf2Profile methods - document runtime flags * Tests: - new macros to help in testing (see tests/tests.h), they also make better error reporting (when comparing values, they show the expected and the obtained value). - SAMLv2 AuthnRequest through HTTP-Artifact binding is tested - SAMLv2 LogoutRequest with multiple SessionIndex is tested - force C locale for integration test (we match UI strings, so it is needed). - SAMLv2, test websso with encrypted private keys (idp and sp side) - SAMLv2, add a python test for attribute authority * ID-WSF 2.0: - constant strings were moved to their own header (lasso/xml/id-wsf-2.0/idwsf2_strings.h) - add helper method to retrieve the bootstrap EPR from an assertion and to mint assertion to use as WS-Security tokens. - add method lasso_idwsf2_data_service_get_query_item_result_content to retrieve DST query result as text - sign SAMLv2 assertion used as WS-Security tokens And many minor bug-fixes... 2.2.91 - January 26th 2010 -------------------------- A new Perl binding, fix for backward compatibility with old versions of glib, LassoLogout API is more robust since it does not need anymore for all SP logout to finish to work, new macro lasso_list_add_new_xml_node, add support for WS-Security UsernameToken (equivalent of poor man HTTP Digest Authentication), make public internal APIs: lasso_session_add_assertion, lasso_session_get_assertion and lasso_session_remove_assertion. 2.2.90 - January 18th 2010 -------------------------- Lots of internal changes and some external one too. There is a new api to force, forbid or let Lasso sign messages, it is called lasso_profile_set_signature_hint. Big overhaul of the ID-WSF 1 and 2 codes, and of the SAML 2.0 profiles. Now all SAML 2.0 profile use common internal functions from the lasso_saml20_profile_ namespace to handle bindings (SOAP,Redirect,POST,Artifact,PAOS). New internal API to load SSL keys from many more formats from the public API. In ID-WSF 2.0, Data Service Template has been simplified, we no more try to apply queries, it is the responsability of the using code to handle them. In bindings land, the file bindings/utils.py has been stuffed with utility function to manipulate 'type' tuple, with are now used to transfer argument and type description, their schema is (name, C-type, { dictionary of options } ), they are now used everywhere in the different bindings. We support output argument in PHP5, Python and Java, i.e. pointer of pointer arguments with are written to in order to return multiple values. For language where the binding convert error codes to exceptions (all of them now), the ouput value is returned as the normal return value of the method, so only one output argument is handled for now. We now use GObject-introspection annotations in the documentation to transfer to the binding generator the necessary metadata about the API (content of lists, hashtables, wheter pointer are caller/callee owned, can be NULL or if argument have a default value). The file bindings/override.xml is now deprecated. In documentation land, the main reference documentation was reorganizaed and more symbols have been added to it. Many more functions are documented. There is now tools to control the evolution of the ABI/API of Lasso. 2.2.2 - March 24th 2009 ----------------------- Many fixes and improvements to the ID-WSF 1 support, new API to load SSL keys off memory, documentation for ID-WSF methods, general robustness and memory leak fixes. 2.2.1 - July 22nd 2008 ---------------------- Fixed problems with signed SAML 2.0 URL strings and checks against existing assertions to tell if authentication was required. 2.2.0 - May 28th 2008 --------------------- Added support for encrypted NameIdentifier in ID-FF 1.2, fixed various minor issues with ID-WSF support and several bugs and memory management issues; also replaced bindings for Java, PHP 5 and Python with new ones, created by a custom code generator. 2.1.1 - August 21st 2007 ------------------------ Added support for LassoSignatureType to bindings (support was already but implicitely present for Python), fixed references to Node and String lists in all bindings. 2.1.0 - August 13rd 2007 ------------------------ Added preliminary support for ID-WSF 2, Discovery and Data Service Template, added missing accessors for class elements in SAML 2 language bindings, fixed potential DoS in message parsing. 2.0.0 - January 16th 2007 ------------------------- Completed SAMLv2 support, passed conformance event organized by the Liberty Alliance from December 4th to 8th 2006. Gratuitous giant version bump to mark this step. Fixed memory leaks and potential segmentation faults. 1.9.9 - December 19th 2006 -------------------------- [Test version, news copied over to 2.0.0] 0.6.6 - October 16th 2006 ----------------------- Fixed issues in ID-WSF Data and Interaction services support, fixed a few robustness issues in corner cases. [This version was finally not released due to decision to first finish SAMLv2 support and pass the conformance tests.] 0.6.5 - March 21st 2006 ----------------------- Fixed support for SWIG 1.3.28 (now required), fixed a win32 build issue, fixed documentation. 0.6.4 - March 8th 2006 ---------------------- Added first draft of ID-WSF Interaction Service support, added message signatures to ID-WSF messages, added first draft of SAML 2 support (only Web-SSO and part of Single Logout for the moment), fixed some corner cases, improved error detection in different places, upgraded SWIG support to 1.3.28 and generally improved the bindings. 0.6.3 - September 30th 2005 --------------------------- Improved behaviour when confronted to other Liberty providers that do not implement all the mandatory Liberty requirements, improved error status code reporting, completed support for public keys embedded in metadata files, fixed a few corner case bugs. Also continued work on ID-WSF support, implementing Discovery and DST services but still considered experimental and disabled by default. 0.6.2 - May 26th 2005 --------------------- Fixed usage of NameIdentifiers after calls to Register Name Identifier profile, improved robustness against other Liberty implementations, improved loading of metadata, fixed minor bugs and memory leaks. Continued work on ID-WSF support, still partial and disabled by default. 0.6.1 - February 22nd 2005 -------------------------- Completed support, added full bidirectional query string support for AuthnContextStatementRef, AuthnContextClassRef and AuthnContextComparison, fixed a crasher-bug in a rare case of single sign on profile, tested and shipped with Microsoft Visual Studio project files. 0.6.0 - January 27th 2005 ------------------------- Rewrote library internals to use standard structures instead of libxml2 nodes; this allows faster processing, more flexibility and better support for language bindings. Documented all the API functions. Fixed and improved the rest. 0.5.0 - November 9th 2004 ------------------------- All features of SP Basic, SP, IDP, and LECP profiles for Liberty IDFF 1.2 Static Conformance are now implemented, except for "Backward Compatibility". Extended features are also supported, except for "Affiliations". Compatible with the demo application of the last Beta version of SourceID Liberty 2.0. Improved metadata support, a lot of new feature and bugfixes. API, ABI, and dump format of messages have changed, so this release is not compatible with previous versions. 0.4.1 - September 7th 2004 -------------------------- Small bug fixes. Windows DLL are now linked with standard call aliases. 0.4.0 - September 6th 2004 -------------------------- Complete support for the main profiles of Liberty Alliance IF-FF 1.2 (Single Sign On, Single Logout, and Federation Termination). Revamped language bindings to use SWIG (supported languages are noew Python, PHP, Java and C#). More unit tests. Bugs fixed. 0.3.0 - July 27th 2004 ---------------------- Improved support for Single Sign On and Single Logout profiles. Python and Java bindings. Unit tests. Bugs fixed. 0.2.0 - June 1st 2004 --------------------- First release as a C library. lasso-2.8.2/PaxHeaders/lasso-src-config.in0000644000000000000000000000013213766621500015431 xustar0030 mtime=1608196928.766895334 30 atime=1678814149.728986694 30 ctime=1678814319.881946887 lasso-2.8.2/lasso-src-config.in0000644000175000017500000000371013766621500020702 0ustar00bdauvergnebdauvergne00000000000000#!/bin/sh # # $Id$ # # Copyright (C) 2002-2004 David Beckett - http://purl.org/net/dajobe/ # Institute for Learning and Research Technology - http://www.ilrt.bris.ac.uk/ # University of Bristol - http://www.bristol.ac.uk/ # # This package is Free Software or Open Source available under the # following licenses (these are alternatives): # 1. GNU Lesser General Public License (LGPL) # 2. GNU General Public License (GPL) # 3. Mozilla Public License (MPL) # # See LICENSE.html or LICENSE.txt at the top of this package for the # full license terms. # # # usage() { cat<&2 fi while test $# -gt 0; do case "$1" in -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac case $1 in --version) echo @VERSION@ exit 0 ;; --cflags) echo_cflags=yes ;; --libs) echo_libs=yes ;; --usage) usage 0 1>&2 ;; --run) lpath=@abs_top_builddir@/lasso/.libs if test -d .libs; then lpath=".libs:$lpath" fi if test `uname` = Darwin; then DYLD_LIBRARY_PATH=$lpath:$DYLD_LIBRARY_PATH export DYLD_LIBRARY_PATH else LD_LIBRARY_PATH=$lpath:$LD_LIBRARY_PATH export LD_LIBRARY_PATH fi shift exec ${1+"$@"} ;; *) usage 1 1>&2 ;; esac shift done if test "$echo_cflags" = "yes"; then echo -I@abs_top_srcdir@/lasso fi if test "$echo_libs" = "yes"; then echo -L@abs_top_builddir@/lasso/.libs @LASSO_CORE_LIBS@ @LASSO_LIBS@ fi lasso-2.8.2/PaxHeaders/abi0000644000000000000000000000013113766621500012405 xustar0029 mtime=1608196928.71889494 30 atime=1678814326.421984131 30 ctime=1678814319.933947183 lasso-2.8.2/abi/0000755000175000017500000000000013766621500015733 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/abi/PaxHeaders/abi-2.3.60000644000000000000000000000013113766621500013604 xustar0029 mtime=1608196928.71889494 30 atime=1678098069.993489071 30 ctime=1678814319.933947183 lasso-2.8.2/abi/abi-2.3.60000644000175000017500000021073613766621500017066 0ustar00bdauvergnebdauvergne00000000000000BACKWARD_COMP_H LASSO_ASSERTION_QUERY_ERROR_ATTRIBUTE_REQUEST_ALREADY_EXIST LASSO_ASSERTION_QUERY_ERROR_NOT_AN_ATTRIBUTE_QUERY LASSO_ASSERTION_QUERY_REQUEST_TYPE_ASSERTION_ID LASSO_ASSERTION_QUERY_REQUEST_TYPE_ATTRIBUTE LASSO_ASSERTION_QUERY_REQUEST_TYPE_AUTHN LASSO_ASSERTION_QUERY_REQUEST_TYPE_AUTHZ_DECISION LASSO_ASSERTION_QUERY_REQUEST_TYPE_LAST LASSO_ASSERTION_QUERY_REQUEST_TYPE_UNSET LASSO_CERTIFICATE_ATTRIBUTE LASSO_CHECK_VERSIONABI_COMPATIBLE LASSO_CHECK_VERSION_EXACT LASSO_CHECK_VERSION_NUMERIC LASSO_DATA_SERVICE_ERROR_CANNOT_ADD_ITEM LASSO_DATA_SERVICE_ERROR_UNREGISTERED_DST LASSO_DEFEDERATION_ERROR_MISSING_NAME_IDENTIFIER LASSO_DISCOVERY_ERROR_FAILED_TO_BUILD_ENDPOINT_REFERENCE LASSO_DISCOVERY_ERROR_MISSING_REQUESTED_SERVICE LASSO_DISCOVERY_ERROR_SVC_METADATA_ASSOCIATION_ADD_FAILED LASSO_DISCOVERY_ERROR_SVC_METADATA_REGISTER_FAILED LASSO_DST_ERROR_EMPTY_REQUEST LASSO_DST_ERROR_MALFORMED_QUERY LASSO_DST_ERROR_MISSING_SERVICE_DATA LASSO_DST_ERROR_MODIFY_FAILED LASSO_DST_ERROR_MODIFY_PARTIALLY_FAILED LASSO_DST_ERROR_NEW_DATA_MISSING LASSO_DST_ERROR_NO_DATA LASSO_DST_ERROR_QUERY_FAILED LASSO_DST_ERROR_QUERY_NOT_FOUND LASSO_DST_ERROR_QUERY_PARTIALLY_FAILED LASSO_DS_ERROR_CA_CERT_CHAIN_LOAD_FAILED LASSO_DS_ERROR_CERTIFICATE_LOAD_FAILED LASSO_DS_ERROR_CONTEXT_CREATION_FAILED LASSO_DS_ERROR_DECRYPTION_FAILED LASSO_DS_ERROR_DECRYPTION_FAILED_MISSING_PRIVATE_KEY LASSO_DS_ERROR_DIGEST_COMPUTE_FAILED LASSO_DS_ERROR_ENCRYPTION_FAILED LASSO_DS_ERROR_INVALID_REFERENCE_FOR_SAML LASSO_DS_ERROR_INVALID_SIGALG LASSO_DS_ERROR_INVALID_SIGNATURE LASSO_DS_ERROR_KEYS_MNGR_CREATION_FAILED LASSO_DS_ERROR_KEYS_MNGR_INIT_FAILED LASSO_DS_ERROR_PRIVATE_KEY_LOAD_FAILED LASSO_DS_ERROR_PUBLIC_KEY_LOAD_FAILED LASSO_DS_ERROR_SIGNATURE_FAILED LASSO_DS_ERROR_SIGNATURE_NOT_FOUND LASSO_DS_ERROR_SIGNATURE_TEMPLATE_NOT_FOUND LASSO_DS_ERROR_SIGNATURE_TMPL_CREATION_FAILED LASSO_DS_ERROR_SIGNATURE_VERIFICATION_FAILED LASSO_DS_ERROR_TOO_MUCH_REFERENCES LASSO_DS_HREF LASSO_DS_PREFIX LASSO_DURATION_DAY LASSO_DURATION_HOUR LASSO_DURATION_MINUTE LASSO_DURATION_WEEK LASSO_ECP_HREF LASSO_ECP_PREFIX LASSO_ENCRYPTION_MODE_ASSERTION LASSO_ENCRYPTION_MODE_NAMEID LASSO_ENCRYPTION_MODE_NONE LASSO_ENCRYPTION_SYM_KEY_TYPE_3DES LASSO_ENCRYPTION_SYM_KEY_TYPE_AES_128 LASSO_ENCRYPTION_SYM_KEY_TYPE_AES_256 LASSO_ENCRYPTION_SYM_KEY_TYPE_DEFAULT LASSO_ENCRYTPION_SYM_KEY_TYPE_LAST LASSO_ERROR_CAST_FAILED LASSO_ERROR_OUT_OF_MEMORY LASSO_ERROR_UNDEFINED LASSO_ERROR_UNIMPLEMENTED LASSO_HTTP_METHOD_ANY LASSO_HTTP_METHOD_ARTIFACT_GET LASSO_HTTP_METHOD_ARTIFACT_POST LASSO_HTTP_METHOD_GET LASSO_HTTP_METHOD_IDP_INITIATED LASSO_HTTP_METHOD_LAST LASSO_HTTP_METHOD_NONE LASSO_HTTP_METHOD_PAOS LASSO_HTTP_METHOD_POST LASSO_HTTP_METHOD_REDIRECT LASSO_HTTP_METHOD_SOAP LASSO_IDWSF2_DISCOVERY_ERROR_DUPLICATE LASSO_IDWSF2_DISCOVERY_ERROR_FAILED LASSO_IDWSF2_DISCOVERY_ERROR_FORBIDDEN LASSO_IDWSF2_DISCOVERY_ERROR_LOGICAL_DUPLICATE LASSO_IDWSF2_DISCOVERY_ERROR_NOT_FOUND LASSO_IDWSF2_DISCOVERY_ERROR_NO_RESULTS LASSO_IDWSF2_DST_ERROR_DUPLICATE_ITEM LASSO_IDWSF2_DST_ERROR_ITEM_NOT_FOUND LASSO_IDWSF2_DST_ERROR_PARTIAL_FAILURE LASSO_IDWSF2_DST_ERROR_UNKNOWN_STATUS_CODE LASSO_LASSO_HREF LASSO_LASSO_PREFIX LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_INTERNET_PROTOCOL LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_INTERNET_PROTOCOL_PASSWORD LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_ONE_FACTOR_CONTRACT LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_ONE_FACTOR_UNREGISTERED LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_TWO_FACTOR_CONTRACT LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_TWO_FACTOR_UNREGISTERED LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PASSWORD LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PASSWORD_PROTECTED_TRANSPORT LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PREVIOUS_SESSION LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SMARTCARD LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SMARTCARD_PKI LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SOFTWARE_PKI LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_TIME_SYNC_TOKEN LASSO_LIB_AUTHN_CONTEXT_COMPARISON_BETTER LASSO_LIB_AUTHN_CONTEXT_COMPARISON_EXACT LASSO_LIB_AUTHN_CONTEXT_COMPARISON_MAXIMUM LASSO_LIB_AUTHN_CONTEXT_COMPARISON_MINIMUM LASSO_LIB_CONSENT_INAPPLICABLE LASSO_LIB_CONSENT_OBTAINED LASSO_LIB_CONSENT_OBTAINED_CURRENT_EXPLICIT LASSO_LIB_CONSENT_OBTAINED_CURRENT_IMPLICIT LASSO_LIB_CONSENT_OBTAINED_PRIOR LASSO_LIB_CONSENT_UNAVAILABLE LASSO_LIB_HREF LASSO_LIB_MAJOR_VERSION_N LASSO_LIB_MINOR_VERSION_N LASSO_LIB_NAMEID_POLICY_TYPE_ANY LASSO_LIB_NAMEID_POLICY_TYPE_FEDERATED LASSO_LIB_NAMEID_POLICY_TYPE_NONE LASSO_LIB_NAMEID_POLICY_TYPE_ONE_TIME LASSO_LIB_NAME_IDENTIFIER_FORMAT_ENCRYPTED LASSO_LIB_NAME_IDENTIFIER_FORMAT_ENTITYID LASSO_LIB_NAME_IDENTIFIER_FORMAT_FEDERATED LASSO_LIB_NAME_IDENTIFIER_FORMAT_ONE_TIME LASSO_LIB_PREFIX LASSO_LIB_PROTOCOL_PROFILE_BRWS_ART LASSO_LIB_PROTOCOL_PROFILE_BRWS_LECP LASSO_LIB_PROTOCOL_PROFILE_BRWS_POST LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_IDP_HTTP LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_IDP_SOAP LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_SP_SOAP LASSO_LIB_PROTOCOL_PROFILE_NIM_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_RNI_IDP_HTTP LASSO_LIB_PROTOCOL_PROFILE_RNI_IDP_SOAP LASSO_LIB_PROTOCOL_PROFILE_RNI_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_RNI_SP_SOAP LASSO_LIB_PROTOCOL_PROFILE_SLO_IDP_HTTP LASSO_LIB_PROTOCOL_PROFILE_SLO_IDP_SOAP LASSO_LIB_PROTOCOL_PROFILE_SLO_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_SLO_SP_SOAP LASSO_LIB_STATUS_CODE_FEDERATION_DOES_NOT_EXIST LASSO_LIB_STATUS_CODE_INVALID_ASSERTION_CONSUMER_SERVICE_INDEX LASSO_LIB_STATUS_CODE_INVALID_SIGNATURE LASSO_LIB_STATUS_CODE_NO_AUTHN_CONTEXT LASSO_LIB_STATUS_CODE_NO_AVAILABLEIDP LASSO_LIB_STATUS_CODE_NO_PASSIVE LASSO_LIB_STATUS_CODE_NO_SUPPORTEDIDP LASSO_LIB_STATUS_CODE_PROXY_COUNT_EXCEEDED LASSO_LIB_STATUS_CODE_UNKNOWN_PRINCIPAL LASSO_LIB_STATUS_CODE_UNSIGNED_AUTHN_REQUEST LASSO_LIB_STATUS_CODE_UNSUPPORTED_PROFILE LASSO_LOGIN_ERROR_ASSERTION_DOES_NOT_MATCH_REQUEST_ID LASSO_LOGIN_ERROR_ASSERTION_REPLAY LASSO_LOGIN_ERROR_CONSENT_NOT_OBTAINED LASSO_LOGIN_ERROR_FEDERATION_NOT_FOUND LASSO_LOGIN_ERROR_INVALID_ASSERTION_SIGNATURE LASSO_LOGIN_ERROR_INVALID_NAMEIDPOLICY LASSO_LOGIN_ERROR_INVALID_SIGNATURE LASSO_LOGIN_ERROR_NO_DEFAULT_ENDPOINT LASSO_LOGIN_ERROR_REQUEST_DENIED LASSO_LOGIN_ERROR_STATUS_NOT_SUCCESS LASSO_LOGIN_ERROR_UNKNOWN_PRINCIPAL LASSO_LOGIN_ERROR_UNSIGNED_AUTHN_REQUEST LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_ART LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_LECP LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_POST LASSO_LOGIN_PROTOCOL_PROFILE_REDIRECT LASSO_LOGOUT_ERROR_FEDERATION_NOT_FOUND LASSO_LOGOUT_ERROR_REQUEST_DENIED LASSO_LOGOUT_ERROR_UNKNOWN_PRINCIPAL LASSO_LOGOUT_ERROR_UNSUPPORTED_PROFILE LASSO_MD_PROTOCOL_TYPE_ARTIFACT_RESOLUTION LASSO_MD_PROTOCOL_TYPE_ASSERTION_ID_REQUEST LASSO_MD_PROTOCOL_TYPE_ATTRIBUTE LASSO_MD_PROTOCOL_TYPE_AUTHN_QUERY LASSO_MD_PROTOCOL_TYPE_AUTHZ LASSO_MD_PROTOCOL_TYPE_FEDERATION_TERMINATION LASSO_MD_PROTOCOL_TYPE_LAST LASSO_MD_PROTOCOL_TYPE_MANAGE_NAME_ID LASSO_MD_PROTOCOL_TYPE_NAME_IDENTIFIER_MAPPING LASSO_MD_PROTOCOL_TYPE_REGISTER_NAME_IDENTIFIER LASSO_MD_PROTOCOL_TYPE_SINGLE_LOGOUT LASSO_MD_PROTOCOL_TYPE_SINGLE_SIGN_ON LASSO_MESSAGE_FORMAT_BASE64 LASSO_MESSAGE_FORMAT_ERROR LASSO_MESSAGE_FORMAT_QUERY LASSO_MESSAGE_FORMAT_SOAP LASSO_MESSAGE_FORMAT_UNKNOWN LASSO_MESSAGE_FORMAT_XML LASSO_MESSAGE_FORMAT_XSCHEMA_ERROR LASSO_METADATA_HREF LASSO_METADATA_PREFIX LASSO_NAME_IDENTIFIER_MAPPING_ERROR_FORBIDDEN_CALL_ON_THIS_SIDE LASSO_NAME_IDENTIFIER_MAPPING_ERROR_MISSING_TARGET_IDENTIFIER LASSO_NAME_IDENTIFIER_MAPPING_ERROR_MISSING_TARGET_NAMESPACE LASSO_PAOS_HREF LASSO_PAOS_PREFIX LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ LASSO_PARAM_ERROR_CHECK_FAILED LASSO_PARAM_ERROR_INVALID_VALUE LASSO_PARAM_ERROR_NON_INITIALIZED_OBJECT LASSO_PRIVATE_KEY_ATTRIBUTE LASSO_PRIVATE_KEY_PASSWORD_ATTRIBUTE LASSO_PRIVATE_STATUS_CODE_FAILED_TO_RESTORE_ARTIFACT LASSO_PROFILE_ERROR_BAD_IDENTITY_DUMP LASSO_PROFILE_ERROR_BAD_SESSION_DUMP LASSO_PROFILE_ERROR_BUILDING_MESSAGE_FAILED LASSO_PROFILE_ERROR_BUILDING_QUERY_FAILED LASSO_PROFILE_ERROR_BUILDING_REQUEST_FAILED LASSO_PROFILE_ERROR_BUILDING_RESPONSE_FAILED LASSO_PROFILE_ERROR_CANNOT_FIND_A_PROVIDER LASSO_PROFILE_ERROR_CANNOT_VERIFY_SIGNATURE LASSO_PROFILE_ERROR_FEDERATION_NOT_FOUND LASSO_PROFILE_ERROR_IDENTITY_NOT_FOUND LASSO_PROFILE_ERROR_INVALID_ARTIFACT LASSO_PROFILE_ERROR_INVALID_ASSERTION LASSO_PROFILE_ERROR_INVALID_ASSERTION_CONDITIONS LASSO_PROFILE_ERROR_INVALID_HTTP_METHOD LASSO_PROFILE_ERROR_INVALID_ISSUER LASSO_PROFILE_ERROR_INVALID_MSG LASSO_PROFILE_ERROR_INVALID_POST_MSG LASSO_PROFILE_ERROR_INVALID_PROTOCOLPROFILE LASSO_PROFILE_ERROR_INVALID_QUERY LASSO_PROFILE_ERROR_INVALID_REQUEST LASSO_PROFILE_ERROR_INVALID_RESPONSE LASSO_PROFILE_ERROR_INVALID_SOAP_MSG LASSO_PROFILE_ERROR_ISSUER_IS_NOT_AN_IDP LASSO_PROFILE_ERROR_MISSING_ARTIFACT LASSO_PROFILE_ERROR_MISSING_ASSERTION LASSO_PROFILE_ERROR_MISSING_ENCRYPTION_PRIVATE_KEY LASSO_PROFILE_ERROR_MISSING_ENDPOINT_REFERENCE LASSO_PROFILE_ERROR_MISSING_ENDPOINT_REFERENCE_ADDRESS LASSO_PROFILE_ERROR_MISSING_ISSUER LASSO_PROFILE_ERROR_MISSING_NAME_IDENTIFIER LASSO_PROFILE_ERROR_MISSING_REMOTE_PROVIDERID LASSO_PROFILE_ERROR_MISSING_REQUEST LASSO_PROFILE_ERROR_MISSING_RESOURCE_OFFERING LASSO_PROFILE_ERROR_MISSING_RESPONSE LASSO_PROFILE_ERROR_MISSING_SERVER LASSO_PROFILE_ERROR_MISSING_SERVICE_DESCRIPTION LASSO_PROFILE_ERROR_MISSING_SERVICE_INSTANCE LASSO_PROFILE_ERROR_MISSING_SERVICE_TYPE LASSO_PROFILE_ERROR_MISSING_STATUS_CODE LASSO_PROFILE_ERROR_MISSING_SUBJECT LASSO_PROFILE_ERROR_NAME_IDENTIFIER_NOT_FOUND LASSO_PROFILE_ERROR_RESPONSE_DOES_NOT_MATCH_REQUEST LASSO_PROFILE_ERROR_SESSION_NOT_FOUND LASSO_PROFILE_ERROR_STATUS_NOT_SUCCESS LASSO_PROFILE_ERROR_UNKNOWN_ISSUER LASSO_PROFILE_ERROR_UNKNOWN_PROFILE_URL LASSO_PROFILE_ERROR_UNKNOWN_PROVIDER LASSO_PROFILE_ERROR_UNSUPPORTED_BINDING LASSO_PROFILE_ERROR_UNSUPPORTED_PROFILE LASSO_PROFILE_SIGNATURE_HINT_FORBID LASSO_PROFILE_SIGNATURE_HINT_FORCE LASSO_PROFILE_SIGNATURE_HINT_MAYBE LASSO_PROFILE_SIGNATURE_VERIFY_HINT_FORCE LASSO_PROFILE_SIGNATURE_VERIFY_HINT_IGNORE LASSO_PROFILE_SIGNATURE_VERIFY_HINT_LAST LASSO_PROFILE_SIGNATURE_VERIFY_HINT_MAYBE LASSO_PROTOCOL_LIBERTY_1_0 LASSO_PROTOCOL_LIBERTY_1_1 LASSO_PROTOCOL_LIBERTY_1_2 LASSO_PROTOCOL_NONE LASSO_PROTOCOL_SAML_2_0 LASSO_PROVIDER_ERROR_MISSING_PUBLIC_KEY LASSO_PROVIDER_ROLE_ANY LASSO_PROVIDER_ROLE_ATTRIBUTE_AUTHORITY LASSO_PROVIDER_ROLE_AUTHN_AUTHORITY LASSO_PROVIDER_ROLE_AUTHZ_AUTHORITY LASSO_PROVIDER_ROLE_BOTH LASSO_PROVIDER_ROLE_IDP LASSO_PROVIDER_ROLE_LAST LASSO_PROVIDER_ROLE_NONE LASSO_PROVIDER_ROLE_SP LASSO_PYTHON_HREF LASSO_REGISTRY_ERROR_KEY_EXISTS LASSO_REQUEST_TYPE_DEFEDERATION LASSO_REQUEST_TYPE_DISCO_MODIFY LASSO_REQUEST_TYPE_DISCO_QUERY LASSO_REQUEST_TYPE_DST_MODIFY LASSO_REQUEST_TYPE_DST_QUERY LASSO_REQUEST_TYPE_IDWSF2_DISCO_QUERY LASSO_REQUEST_TYPE_IDWSF2_DISCO_SVCMD_ASSOCIATION_ADD LASSO_REQUEST_TYPE_IDWSF2_DISCO_SVCMD_REGISTER LASSO_REQUEST_TYPE_INVALID LASSO_REQUEST_TYPE_LECP LASSO_REQUEST_TYPE_LOGIN LASSO_REQUEST_TYPE_LOGOUT LASSO_REQUEST_TYPE_NAME_IDENTIFIER_MAPPING LASSO_REQUEST_TYPE_NAME_ID_MANAGEMENT LASSO_REQUEST_TYPE_NAME_REGISTRATION LASSO_REQUEST_TYPE_SASL_REQUEST LASSO_SAML2_ACTION_GHPP_GET LASSO_SAML2_ACTION_GHPP_HEAD LASSO_SAML2_ACTION_GHPP_POST LASSO_SAML2_ACTION_GHPP_PUT LASSO_SAML2_ACTION_NAMESPACE_GHPP LASSO_SAML2_ACTION_NAMESPACE_RWEDC LASSO_SAML2_ACTION_NAMESPACE_RWEDC_NEGATION LASSO_SAML2_ACTION_NAMESPACE_UNIX LASSO_SAML2_ACTION_RWEDC_CONTROL LASSO_SAML2_ACTION_RWEDC_DELETE LASSO_SAML2_ACTION_RWEDC_EXECUTE LASSO_SAML2_ACTION_RWEDC_NEGATION LASSO_SAML2_ACTION_RWEDC_READ LASSO_SAML2_ACTION_RWEDC_WRITE LASSO_SAML2_ASSERTION_HREF LASSO_SAML2_ASSERTION_INDETERMINATE LASSO_SAML2_ASSERTION_INVALID LASSO_SAML2_ASSERTION_PREFIX LASSO_SAML2_ASSERTION_VALID LASSO_SAML2_ATTRIBUTE_NAME_EPR LASSO_SAML2_ATTRIBUTE_NAME_FORMAT_BASIC LASSO_SAML2_ATTRIBUTE_NAME_FORMAT_UNSPECIFIED LASSO_SAML2_ATTRIBUTE_NAME_FORMAT_URI LASSO_SAML2_ATTRIBUTE_PROFILE_BASIC LASSO_SAML2_ATTRIBUTE_PROFILE_DCE LASSO_SAML2_ATTRIBUTE_PROFILE_UUID LASSO_SAML2_ATTRIBUTE_PROFILE_X500 LASSO_SAML2_AUTHN_CONTEXT_AUTHENTICATED_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_INTERNET_PROTOCOL LASSO_SAML2_AUTHN_CONTEXT_INTERNET_PROTOCOL_PASSWORD LASSO_SAML2_AUTHN_CONTEXT_KERBEROS LASSO_SAML2_AUTHN_CONTEXT_MOBILE_ONE_FACTOR_CONTRACT LASSO_SAML2_AUTHN_CONTEXT_MOBILE_ONE_FACTOR_UNREGISTERED LASSO_SAML2_AUTHN_CONTEXT_MOBILE_TWO_FACTOR_CONTRACT LASSO_SAML2_AUTHN_CONTEXT_MOBILE_TWO_FACTOR_UNREGISTERED LASSO_SAML2_AUTHN_CONTEXT_NOMAD_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_PASSWORD LASSO_SAML2_AUTHN_CONTEXT_PASSWORD_PROTECTED_TRANSPORT LASSO_SAML2_AUTHN_CONTEXT_PERSONALIZED_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_PGP LASSO_SAML2_AUTHN_CONTEXT_PREVIOUS_SESSION LASSO_SAML2_AUTHN_CONTEXT_SECURE_REMOTE_PASSWORD LASSO_SAML2_AUTHN_CONTEXT_SMARTCARD LASSO_SAML2_AUTHN_CONTEXT_SMARTCARD_PKI LASSO_SAML2_AUTHN_CONTEXT_SOFTWARE_PKI LASSO_SAML2_AUTHN_CONTEXT_SPKI LASSO_SAML2_AUTHN_CONTEXT_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_TIME_SYNC_TOKEN LASSO_SAML2_AUTHN_CONTEXT_TLS_CLIENT LASSO_SAML2_AUTHN_CONTEXT_UNSPECIFIED LASSO_SAML2_AUTHN_CONTEXT_X509 LASSO_SAML2_AUTHN_CONTEXT_XMLDSIG LASSO_SAML2_CONFIRMATION_METHOD_BEARER LASSO_SAML2_CONFIRMATION_METHOD_HOLDER_OF_KEY LASSO_SAML2_CONSENT_EXPLICIT LASSO_SAML2_CONSENT_IMPLICIT LASSO_SAML2_CONSENT_INAPPLICABLE LASSO_SAML2_CONSENT_OBTAINED LASSO_SAML2_CONSENT_PRIOR LASSO_SAML2_CONSENT_UNAVAILABLE LASSO_SAML2_DEFLATE_ENCODING LASSO_SAML2_FIELD_ARTIFACT LASSO_SAML2_FIELD_ENCODING LASSO_SAML2_FIELD_RELAYSTATE LASSO_SAML2_FIELD_REQUEST LASSO_SAML2_FIELD_RESPONSE LASSO_SAML2_FIELD_SIGALG LASSO_SAML2_FIELD_SIGNATURE LASSO_SAML2_METADATA_BINDING_ARTIFACT LASSO_SAML2_METADATA_BINDING_PAOS LASSO_SAML2_METADATA_BINDING_POST LASSO_SAML2_METADATA_BINDING_REDIRECT LASSO_SAML2_METADATA_BINDING_SOAP LASSO_SAML2_METADATA_BINDING_URI LASSO_SAML2_METADATA_HREF LASSO_SAML2_METADATA_PREFIX LASSO_SAML2_NAME_IDENTIFIER_FORMAT_EMAIL LASSO_SAML2_NAME_IDENTIFIER_FORMAT_ENCRYPTED LASSO_SAML2_NAME_IDENTIFIER_FORMAT_ENTITY LASSO_SAML2_NAME_IDENTIFIER_FORMAT_KERBEROS LASSO_SAML2_NAME_IDENTIFIER_FORMAT_PERSISTENT LASSO_SAML2_NAME_IDENTIFIER_FORMAT_TRANSIENT LASSO_SAML2_NAME_IDENTIFIER_FORMAT_UNSPECIFIED LASSO_SAML2_NAME_IDENTIFIER_FORMAT_WINDOWS LASSO_SAML2_NAME_IDENTIFIER_FORMAT_X509 LASSO_SAML2_PROTOCOL_HREF LASSO_SAML2_PROTOCOL_PREFIX LASSO_SAML2_STATUS_CODE_AUTHN_FAILED LASSO_SAML2_STATUS_CODE_INVALID_ATTR_NAME LASSO_SAML2_STATUS_CODE_INVALID_NAME_ID_POLICY LASSO_SAML2_STATUS_CODE_NO_AUTHN_CONTEXT LASSO_SAML2_STATUS_CODE_NO_AVAILABLE_IDP LASSO_SAML2_STATUS_CODE_NO_PASSIVE LASSO_SAML2_STATUS_CODE_NO_SUPPORTED_IDP LASSO_SAML2_STATUS_CODE_PARTIAL_LOGOUT LASSO_SAML2_STATUS_CODE_PROXY_COUNT_EXCEEDED LASSO_SAML2_STATUS_CODE_REQUESTER LASSO_SAML2_STATUS_CODE_REQUEST_DENIED LASSO_SAML2_STATUS_CODE_REQUEST_UNSUPPORTED LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_DEPRECATED LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_TOO_HIGH LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_TOO_LOW LASSO_SAML2_STATUS_CODE_RESOURCE_NOT_RECOGNIZED LASSO_SAML2_STATUS_CODE_RESPONDER LASSO_SAML2_STATUS_CODE_SUCCESS LASSO_SAML2_STATUS_CODE_TOO_MANY_RESPONSES LASSO_SAML2_STATUS_CODE_UNKNOWN_ATTR_PROFILE LASSO_SAML2_STATUS_CODE_UNKNOWN_PRINCIPAL LASSO_SAML2_STATUS_CODE_UNSUPPORTED_BINDING LASSO_SAML2_STATUS_CODE_VERSION_MISMATCH LASSO_SAML_ASSERTION_HREF LASSO_SAML_ASSERTION_PREFIX LASSO_SAML_AUTHENTICATION_METHODS_PKI LASSO_SAML_AUTHENTICATION_METHOD_HARDWARE_TOKEN LASSO_SAML_AUTHENTICATION_METHOD_KERBEROS LASSO_SAML_AUTHENTICATION_METHOD_LIBERTY LASSO_SAML_AUTHENTICATION_METHOD_PASSWORD LASSO_SAML_AUTHENTICATION_METHOD_PGP LASSO_SAML_AUTHENTICATION_METHOD_SECURE_REMOTE_PASSWORD LASSO_SAML_AUTHENTICATION_METHOD_SMARTCARD_PKI LASSO_SAML_AUTHENTICATION_METHOD_SOFTWARE_PKI LASSO_SAML_AUTHENTICATION_METHOD_UNSPECIFIED LASSO_SAML_AUTHENTICATION_METHOD_XKMS LASSO_SAML_AUTHENTICATION_METHOD_XMLD_SIG LASSO_SAML_CONFIRMATION_METHOD_ARTIFACT LASSO_SAML_CONFIRMATION_METHOD_ARTIFACT01 LASSO_SAML_CONFIRMATION_METHOD_BEARER LASSO_SAML_CONFIRMATION_METHOD_HOLDER_OF_KEY LASSO_SAML_CONFIRMATION_METHOD_SENDER_VOUCHES LASSO_SAML_MAJOR_VERSION_N LASSO_SAML_MINOR_VERSION_N LASSO_SAML_PROTOCOL_HREF LASSO_SAML_PROTOCOL_PREFIX LASSO_SAML_STATUS_CODE_REQUESTER LASSO_SAML_STATUS_CODE_REQUEST_DENIED LASSO_SAML_STATUS_CODE_REQUEST_VERSION_DEPRECATED LASSO_SAML_STATUS_CODE_REQUEST_VERSION_TOO_HIGH LASSO_SAML_STATUS_CODE_REQUEST_VERSION_TOO_LOW LASSO_SAML_STATUS_CODE_RESOURCE_NOT_RECOGNIZED LASSO_SAML_STATUS_CODE_RESPONDER LASSO_SAML_STATUS_CODE_SUCCESS LASSO_SAML_STATUS_CODE_TOO_MANY_RESPONSES LASSO_SAML_STATUS_CODE_VERSION_MISMATCH LASSO_SERVER_ERROR_ADD_PROVIDER_FAILED LASSO_SERVER_ERROR_ADD_PROVIDER_PROTOCOL_MISMATCH LASSO_SERVER_ERROR_INVALID_XML LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND LASSO_SERVER_ERROR_SET_ENCRYPTION_PRIVATE_KEY_FAILED LASSO_SIGNATURE_METHOD_ATTRIBUTE LASSO_SIGNATURE_METHOD_DSA_SHA1 LASSO_SIGNATURE_METHOD_LAST LASSO_SIGNATURE_METHOD_RSA_SHA1 LASSO_SIGNATURE_TYPE_ATTRIBUTE LASSO_SIGNATURE_TYPE_LAST LASSO_SIGNATURE_TYPE_NONE LASSO_SIGNATURE_TYPE_SIMPLE LASSO_SIGNATURE_TYPE_WITHX509 LASSO_SOAP_ENV_ACTOR LASSO_SOAP_ENV_HREF LASSO_SOAP_ENV_PREFIX LASSO_SOAP_ERROR_MISSING_BODY LASSO_SOAP_ERROR_MISSING_ENVELOPE LASSO_SOAP_ERROR_MISSING_HEADER LASSO_SOAP_ERROR_MISSING_SOAP_FAULT_DETAIL LASSO_SOAP_ERROR_REDIRECT_REQUEST_FAULT LASSO_SOAP_FAULT_CODE_CLIENT LASSO_SOAP_FAULT_CODE_MUST_UNDERSTAND LASSO_SOAP_FAULT_CODE_SERVER LASSO_SOAP_FAULT_CODE_VERSION_MISMATCH LASSO_SOAP_FAULT_REDIRECT_REQUEST LASSO_WSF_ENABLED LASSO_WSF_PROFILE_ERROR_INVALID_OR_MISSING_REFERENCE_TO_MESSAGE_ID LASSO_WSF_PROFILE_ERROR_MISSING_ASSERTION_ID LASSO_WSF_PROFILE_ERROR_MISSING_CORRELATION LASSO_WSF_PROFILE_ERROR_MISSING_CREDENTIAL_REF LASSO_WSF_PROFILE_ERROR_MISSING_DESCRIPTION LASSO_WSF_PROFILE_ERROR_MISSING_ENDPOINT LASSO_WSF_PROFILE_ERROR_MISSING_RESOURCE_ID LASSO_WSF_PROFILE_ERROR_MISSING_SECURITY LASSO_WSF_PROFILE_ERROR_MISSING_SENDER_ID LASSO_WSF_PROFILE_ERROR_REDIRECT_REQUEST LASSO_WSF_PROFILE_ERROR_REDIRECT_REQUEST_UNSUPPORTED_BY_REQUESTER LASSO_WSF_PROFILE_ERROR_SECURITY_MECHANISM_CHECK_FAILED LASSO_WSF_PROFILE_ERROR_SERVER_INTERACTION_REQUIRED LASSO_WSF_PROFILE_ERROR_SERVER_INTERACTION_REQUIRED_FOR_DATA LASSO_WSF_PROFILE_ERROR_SOAP_FAULT LASSO_WSF_PROFILE_ERROR_UNKNOWN_STATUS_CODE LASSO_WSF_PROFILE_ERROR_UNSUPPORTED_SECURITY_MECHANISM LASSO_WSSEC_ERROR_BAD_PASSWORD LASSO_WSSEC_ERROR_MISSING_SECURITY_TOKEN LASSO_WSUTIL1_HREF LASSO_WSUTIL1_PREFIX LASSO_XML_ERROR_ATTR_NOT_FOUND LASSO_XML_ERROR_ATTR_VALUE_NOT_FOUND LASSO_XML_ERROR_INVALID_FILE LASSO_XML_ERROR_MISSING_NAMESPACE LASSO_XML_ERROR_NODE_CONTENT_NOT_FOUND LASSO_XML_ERROR_NODE_NOT_FOUND LASSO_XML_ERROR_OBJECT_CONSTRUCTION_FAILED LASSO_XML_ERROR_SCHEMA_INVALID_FRAGMENT LASSO_XSI_HREF LASSO_XSI_PREFIX struct LassoAssertionQuery { LassoAssertionQueryPrivate* private_data } LassoAssertionQueryRequestType LassoCheckVersionMode struct LassoDefederation { } struct LassoDsKeyInfo { LassoDsKeyValue* KeyValue } struct LassoDsKeyValue { LassoDsRsaKeyValue* RSAKeyValue } struct LassoDsRsaKeyValue { char* Modulus, char* Exponent } struct LassoEcp { gchar* assertionConsumerURL, LassoEcpPrivate* private_data } LassoEncryptionMode LassoEncryptionSymKeyType struct LassoFederation { gchar* remote_providerID, LassoNode* local_nameIdentifier, LassoNode* remote_nameIdentifier, LassoFederationPrivate* private_data } LassoHttpMethod struct LassoIdentity { GHashTable* federations, gboolean is_dirty, LassoIdentityPrivate* private_data } struct LassoLecp { LassoLibAuthnRequestEnvelope* authnRequestEnvelope, LassoLibAuthnResponseEnvelope* authnResponseEnvelope, char* assertionConsumerServiceURL } struct LassoLibAssertion { char* InResponseTo } struct LassoLibAuthenticationStatement { LassoLibAuthnContext* AuthnContext, char* ReauthenticateOnOrAfter, char* SessionIndex } struct LassoLibAuthnContext { char* AuthnContextClassRef, char* AuthnContextStatementRef } struct LassoLibAuthnRequest { GList* Extension, char* ProviderID, char* AffiliationID, char* NameIDPolicy, gboolean ForceAuthn, gboolean IsPassive, char* ProtocolProfile, char* AssertionConsumerServiceID, LassoLibRequestAuthnContext* RequestAuthnContext, char* RelayState, LassoLibScoping* Scoping, char* consent } struct LassoLibAuthnRequestEnvelope { GList* Extension, LassoLibAuthnRequest* AuthnRequest, char* ProviderID, char* ProviderName, char* AssertionConsumerServiceURL, LassoLibIDPList* IDPList, gboolean IsPassive } struct LassoLibAuthnResponse { GList* Extension, char* ProviderID, char* RelayState, char* consent } struct LassoLibAuthnResponseEnvelope { GList* Extension, LassoLibAuthnResponse* AuthnResponse, char* AssertionConsumerServiceURL } struct LassoLibFederationTerminationNotification { GList* Extension, char* ProviderID, LassoSamlNameIdentifier* NameIdentifier, char* consent, char* RelayState } struct LassoLibIDPEntries { GList* IDPEntry } struct LassoLibIDPEntry { char* ProviderID, char* ProviderName, char* Loc } struct LassoLibIDPList { LassoLibIDPEntries* IDPEntries, char* GetComplete } struct LassoLibLogoutRequest { GList* Extension, char* ProviderID, LassoSamlNameIdentifier* NameIdentifier, char* SessionIndex, char* RelayState, char* consent, char* NotOnOrAfter } struct LassoLibLogoutResponse { } struct LassoLibNameIdentifierMappingRequest { GList* Extension, char* ProviderID, LassoSamlNameIdentifier* NameIdentifier, char* TargetNamespace, char* consent } struct LassoLibNameIdentifierMappingResponse { GList* Extension, char* ProviderID, LassoSamlpStatus* Status, LassoSamlNameIdentifier* NameIdentifier } struct LassoLibRegisterNameIdentifierRequest { GList* Extension, char* ProviderID, LassoSamlNameIdentifier* IDPProvidedNameIdentifier, LassoSamlNameIdentifier* SPProvidedNameIdentifier, LassoSamlNameIdentifier* OldProvidedNameIdentifier, char* RelayState } struct LassoLibRegisterNameIdentifierResponse { } struct LassoLibRequestAuthnContext { GList* AuthnContextClassRef, GList* AuthnContextStatementRef, char* AuthnContextComparison } struct LassoLibScoping { int ProxyCount, LassoLibIDPList* IDPList } struct LassoLibStatusResponse { GList* Extension, char* ProviderID, LassoSamlpStatus* Status, char* RelayState } struct LassoLibSubject { LassoSamlNameIdentifier* IDPProvidedNameIdentifier } struct LassoLogin { LassoLoginProtocolProfile protocolProfile, gchar* assertionArtifact, LassoSamlAssertion* assertion, gchar* nameIDPolicy, LassoHttpMethod http_method, LassoLoginPrivate* private_data } LassoLoginProtocolProfile struct LassoLogout { LassoNode* initial_request, LassoNode* initial_response, gchar* initial_remote_providerID, gint providerID_index, LassoHttpMethod initial_http_request_method, LassoLogoutPrivate* private_data } LassoMdProtocolType LassoMessageFormat struct LassoMiscTextNode { char* content, char* name, char* ns_href, char* ns_prefix, gboolean text_child } struct LassoNameIdManagement { } struct LassoNameIdentifierMapping { gchar* targetNameIdentifier } struct LassoNameRegistration { LassoSamlNameIdentifier* oldNameIdentifier } struct LassoNode { } struct LassoProfile { LassoServer* server, LassoNode* request, LassoNode* response, LassoNode* nameIdentifier, gchar* remote_providerID, gchar* msg_url, gchar* msg_body, gchar* msg_relayState, LassoIdentity* identity, LassoSession* session, LassoHttpMethod http_request_method, gint signature_status, LassoProfilePrivate* private_data } LassoProfileSignatureHint LassoProfileSignatureVerifyHint LassoProtocolConformance struct LassoProvider { gchar* ProviderID, LassoProviderRole role, char* metadata_filename, gchar* public_key, gchar* ca_cert_chain, LassoProviderPrivate* private_data } LassoProviderRole LassoRequestType struct LassoSaml2Action { char* content, char* Namespace } struct LassoSaml2Advice { GList* AssertionIDRef, GList* AssertionURIRef, GList* Assertion, GList* EncryptedAssertion } struct LassoSaml2Assertion { LassoSaml2NameID* Issuer, LassoSaml2Subject* Subject, LassoSaml2Conditions* Conditions, LassoSaml2Advice* Advice, GList* Statement, GList* AuthnStatement, GList* AuthzDecisionStatement, GList* AttributeStatement, char* Version, char* ID, char* IssueInstant, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file, gboolean encryption_activated, char* encryption_public_key_str, LassoEncryptionSymKeyType encryption_sym_key_type } LassoSaml2AssertionValidationState struct LassoSaml2Attribute { GList* AttributeValue, char* Name, char* NameFormat, char* FriendlyName } struct LassoSaml2AttributeStatement { GList* Attribute, GList* EncryptedAttribute } struct LassoSaml2AttributeValue { GList* any } struct LassoSaml2AudienceRestriction { char* Audience } struct LassoSaml2AuthnContext { char* AuthnContextClassRef, char* AuthnContextDeclRef, char* AuthenticatingAuthority } struct LassoSaml2AuthnStatement { LassoSaml2SubjectLocality* SubjectLocality, LassoSaml2AuthnContext* AuthnContext, char* AuthnInstant, char* SessionIndex, char* SessionNotOnOrAfter } struct LassoSaml2AuthzDecisionStatement { LassoSaml2Action* Action, LassoSaml2Evidence* Evidence, char* Resource, char* Decision } struct LassoSaml2BaseIDAbstract { char* NameQualifier, char* SPNameQualifier } struct LassoSaml2ConditionAbstract { } struct LassoSaml2Conditions { GList* Condition, GList* AudienceRestriction, GList* OneTimeUse, GList* ProxyRestriction, char* NotBefore, char* NotOnOrAfter } struct LassoSaml2EncryptedElement { xmlNode* EncryptedData, GList* EncryptedKey, LassoNode* original_data } struct LassoSaml2Evidence { GList* AssertionIDRef, GList* AssertionURIRef, GList* Assertion, GList* EncryptedAssertion } struct LassoSaml2KeyInfoConfirmationData { } struct LassoSaml2NameID { char* content, char* Format, char* SPProvidedID, char* NameQualifier, char* SPNameQualifier } struct LassoSaml2OneTimeUse { } struct LassoSaml2ProxyRestriction { char* Audience, char* Count } struct LassoSaml2StatementAbstract { } struct LassoSaml2Subject { LassoSaml2BaseIDAbstract* BaseID, LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, LassoSaml2SubjectConfirmation* SubjectConfirmation } struct LassoSaml2SubjectConfirmation { LassoSaml2BaseIDAbstract* BaseID, LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, LassoSaml2SubjectConfirmationData* SubjectConfirmationData, char* Method } struct LassoSaml2SubjectConfirmationData { char* NotBefore, char* NotOnOrAfter, char* Recipient, char* InResponseTo, char* Address } struct LassoSaml2SubjectLocality { char* Address, char* DNSName } struct LassoSamlAdvice { GList* AssertionIDReference, LassoNode* Assertion } struct LassoSamlAssertion { LassoSamlConditions* Conditions, LassoSamlAdvice* Advice, LassoSamlSubjectStatement* SubjectStatement, LassoSamlAuthenticationStatement* AuthenticationStatement, LassoSamlAttributeStatement* AttributeStatement, int MajorVersion, int MinorVersion, char* AssertionID, char* Issuer, char* IssueInstant, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlAttribute { gchar* attributeName, gchar* attributeNameSpace, GList* AttributeValue } struct LassoSamlAttributeDesignator { char* AttributeName, char* AttributeNamespace } struct LassoSamlAttributeStatement { GList* Attribute } struct LassoSamlAttributeValue { GList* any } struct LassoSamlAudienceRestrictionCondition { GList* Audience } struct LassoSamlAuthenticationStatement { LassoSamlSubjectLocality* SubjectLocality, GList* AuthorityBinding, char* AuthenticationMethod, char* AuthenticationInstant } struct LassoSamlAuthorityBinding { char* AuthorityKind, char* Location, char* Binding } struct LassoSamlConditionAbstract { } struct LassoSamlConditions { GList* Condition, GList* AudienceRestrictionCondition, char* NotBefore, char* NotOnOrAfter } struct LassoSamlNameIdentifier { char* NameQualifier, char* Format, char* content } struct LassoSamlStatementAbstract { } struct LassoSamlSubject { LassoSamlNameIdentifier* NameIdentifier, LassoSamlSubjectConfirmation* SubjectConfirmation, LassoSaml2EncryptedElement* EncryptedNameIdentifier } struct LassoSamlSubjectConfirmation { GList* ConfirmationMethod, char* SubjectConfirmationData, LassoDsKeyInfo* KeyInfo } struct LassoSamlSubjectLocality { char* IPAddress, char* DNSAddress } struct LassoSamlSubjectStatement { } struct LassoSamlSubjectStatementAbstract { LassoSamlSubject* Subject } struct LassoSamlp2ArtifactResolve { char* Artifact } struct LassoSamlp2ArtifactResponse { LassoNode* any } struct LassoSamlp2AssertionIDRequest { char* AssertionIDRef } struct LassoSamlp2AttributeQuery { GList* Attribute } struct LassoSamlp2AuthnQuery { LassoSamlp2RequestedAuthnContext* RequestedAuthnContext, char* SessionIndex } struct LassoSamlp2AuthnRequest { LassoSaml2Subject* Subject, LassoSamlp2NameIDPolicy* NameIDPolicy, LassoSaml2Conditions* Conditions, LassoSamlp2RequestedAuthnContext* RequestedAuthnContext, LassoSamlp2Scoping* Scoping, gboolean ForceAuthn, gboolean IsPassive, char* ProtocolBinding, int AssertionConsumerServiceIndex, char* AssertionConsumerServiceURL, int AttributeConsumingServiceIndex, char* ProviderName, G_GNUC_DEPRECATED char } struct LassoSamlp2AuthzDecisionQuery { LassoSaml2Action* Action, LassoSaml2Evidence* Evidence, char* Resource } struct LassoSamlp2Extensions { } struct LassoSamlp2IDPEntry { char* ProviderID, char* Name, char* Loc } struct LassoSamlp2IDPList { LassoSamlp2IDPEntry* IDPEntry, char* GetComplete } struct LassoSamlp2LogoutRequest { LassoSaml2BaseIDAbstract* BaseID, LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, char* SessionIndex, char* Reason, char* NotOnOrAfter, G_GNUC_DEPRECATED char } struct LassoSamlp2LogoutResponse { G_GNUC_DEPRECATED char } struct LassoSamlp2ManageNameIDRequest { LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, char* NewID, LassoSaml2EncryptedElement* NewEncryptedID, LassoSamlp2Terminate* Terminate } struct LassoSamlp2ManageNameIDResponse { } struct LassoSamlp2NameIDMappingRequest { LassoSaml2BaseIDAbstract* BaseID, LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, LassoSamlp2NameIDPolicy* NameIDPolicy } struct LassoSamlp2NameIDMappingResponse { LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID } struct LassoSamlp2NameIDPolicy { char* Format, char* SPNameQualifier, gboolean AllowCreate } struct LassoSamlp2RequestAbstract { LassoSaml2NameID* Issuer, LassoSamlp2Extensions* Extensions, char* ID, char* Version, char* IssueInstant, char* Destination, char* Consent, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlp2RequestedAuthnContext { GList* AuthnContextClassRef, GList* AuthnContextDeclRef, char* Comparison } struct LassoSamlp2Response { GList* Assertion, GList* EncryptedAssertion } struct LassoSamlp2Scoping { LassoSamlp2IDPList* IDPList, char* RequesterID, char* ProxyCount } struct LassoSamlp2Status { LassoSamlp2StatusCode* StatusCode, char* StatusMessage, LassoSamlp2StatusDetail* StatusDetail } struct LassoSamlp2StatusCode { LassoSamlp2StatusCode* StatusCode, char* Value } struct LassoSamlp2StatusDetail { } struct LassoSamlp2StatusResponse { LassoSaml2NameID* Issuer, LassoSamlp2Extensions* Extensions, LassoSamlp2Status* Status, char* ID, char* InResponseTo, char* Version, char* IssueInstant, char* Destination, char* Consent, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlp2SubjectQueryAbstract { LassoSaml2Subject* Subject } struct LassoSamlp2Terminate { } struct LassoSamlpRequest { char* AssertionArtifact } struct LassoSamlpRequestAbstract { GList* RespondWith, char* RequestID, int MajorVersion, int MinorVersion, char* IssueInstant, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlpResponse { LassoSamlpStatus* Status, GList* Assertion } struct LassoSamlpResponseAbstract { char* ResponseID, char* InResponseTo, int MajorVersion, int MinorVersion, char* IssueInstant, char* Recipient, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlpStatus { LassoSamlpStatusCode* StatusCode, char* StatusMessage } struct LassoSamlpStatusCode { LassoSamlpStatusCode* StatusCode, char* Value } struct LassoServer { GHashTable* providers, GHashTable* services, gchar* private_key, gchar* private_key_password, gchar* certificate, LassoSignatureMethod signature_method, LassoServerPrivate* private_data } struct LassoSession { GHashTable* assertions, gboolean is_dirty, LassoSessionPrivate* private_data } LassoSignatureMethod LassoSignatureType struct LassoSoapBody { GList* any, gchar* Id } struct LassoSoapDetail { GList* any } struct LassoSoapEnvelope { LassoSoapHeader* Header, LassoSoapBody* Body } struct LassoSoapFault { gchar* faultcode, gchar* faultstring, GList* faultactor, LassoSoapDetail* Detail } struct LassoSoapHeader { GList* Other } lasso_error_t lasso_assertion_query_add_attribute_request ( LassoAssertionQuery* assertion_query, char* format, char* name ) lasso_error_t lasso_assertion_query_build_request_msg ( LassoAssertionQuery* assertion_query ) lasso_error_t lasso_assertion_query_build_response_msg ( LassoAssertionQuery* assertion_query ) None lasso_assertion_query_destroy ( LassoAssertionQuery* assertion_query ) LassoAssertionQueryRequestType lasso_assertion_query_get_request_type ( LassoAssertionQuery* assertion_query ) GType lasso_assertion_query_get_type ( ) lasso_error_t lasso_assertion_query_init_request ( LassoAssertionQuery* assertion_query, char* remote_provider_id, LassoHttpMethod http_method, LassoAssertionQueryRequestType query_request_type ) LassoAssertionQuery* lasso_assertion_query_new ( LassoServer* server ) lasso_error_t lasso_assertion_query_process_request_msg ( LassoAssertionQuery* assertion_query, gchar* request_msg ) lasso_error_t lasso_assertion_query_process_response_msg ( LassoAssertionQuery* assertion_query, gchar* response_msg ) lasso_error_t lasso_assertion_query_validate_request ( LassoAssertionQuery* assertion_query ) char* lasso_build_unique_id ( unsigned int size ) int lasso_check_version ( int major, int minor, int subminor, LassoCheckVersionMode mode ) lasso_error_t lasso_defederation_build_notification_msg ( LassoDefederation* defederation ) None lasso_defederation_destroy ( LassoDefederation* defederation ) GType lasso_defederation_get_type ( ) lasso_error_t lasso_defederation_init_notification ( LassoDefederation* defederation, gchar* remote_providerID, LassoHttpMethod http_method ) LassoDefederation* lasso_defederation_new ( LassoServer* server ) lasso_error_t lasso_defederation_process_notification_msg ( LassoDefederation* defederation, gchar* notification_msg ) lasso_error_t lasso_defederation_validate_notification ( LassoDefederation* defederation ) GType lasso_ds_key_info_get_type ( ) LassoDsKeyInfo* lasso_ds_key_info_new ( ) GType lasso_ds_key_value_get_type ( ) LassoDsKeyValue* lasso_ds_key_value_new ( ) GType lasso_ds_rsa_key_value_get_type ( ) LassoDsRsaKeyValue* lasso_ds_rsa_key_value_new ( ) None lasso_ecp_destroy ( LassoEcp* ecp ) GType lasso_ecp_get_type ( ) LassoEcp* lasso_ecp_new ( LassoServer* server ) lasso_error_t lasso_ecp_process_authn_request_msg ( LassoEcp* ecp, const char* authn_request_msg ) lasso_error_t lasso_ecp_process_response_msg ( LassoEcp* ecp, const char* response_msg ) None lasso_federation_build_local_name_identifier ( LassoFederation* federation, const gchar* nameQualifier, const gchar* format, const gchar* content ) None lasso_federation_destroy ( LassoFederation* federation ) GType lasso_federation_get_type ( ) LassoFederation* lasso_federation_new ( const gchar* remote_providerID ) gboolean lasso_federation_verify_name_identifier ( LassoFederation* federation, LassoNode* name_identifier ) char* lasso_get_prefix_for_dst_service_href ( const char* href ) gchar* lasso_get_prefix_for_idwsf2_dst_service_href ( const gchar* href ) None lasso_identity_destroy ( LassoIdentity* identity ) gchar* lasso_identity_dump ( LassoIdentity* identity ) LassoFederation* lasso_identity_get_federation ( LassoIdentity* identity, const char* providerID ) GType lasso_identity_get_type ( ) LassoIdentity* lasso_identity_new ( ) LassoIdentity* lasso_identity_new_from_dump ( const gchar* dump ) lasso_error_t lasso_init ( ) lasso_error_t lasso_lecp_build_authn_request_envelope_msg ( LassoLecp* lecp ) lasso_error_t lasso_lecp_build_authn_request_msg ( LassoLecp* lecp ) lasso_error_t lasso_lecp_build_authn_response_envelope_msg ( LassoLecp* lecp ) lasso_error_t lasso_lecp_build_authn_response_msg ( LassoLecp* lecp ) None lasso_lecp_destroy ( LassoLecp* lecp ) GType lasso_lecp_get_type ( ) lasso_error_t lasso_lecp_init_authn_request ( LassoLecp* lecp, const char* remote_providerID ) LassoLecp* lasso_lecp_new ( LassoServer* server ) lasso_error_t lasso_lecp_process_authn_request_envelope_msg ( LassoLecp* lecp, const char* request_msg ) lasso_error_t lasso_lecp_process_authn_request_msg ( LassoLecp* lecp, const char* authn_request_msg ) lasso_error_t lasso_lecp_process_authn_response_envelope_msg ( LassoLecp* lecp, const char* response_msg ) GType lasso_lib_assertion_get_type ( ) LassoLibAssertion* lasso_lib_assertion_new ( ) LassoLibAssertion* lasso_lib_assertion_new_full ( const char* issuer, const char* requestID, const char* audience, const char* notBefore, const char* notOnOrAfter ) GType lasso_lib_authentication_statement_get_type ( ) LassoLibAuthenticationStatement* lasso_lib_authentication_statement_new ( ) LassoLibAuthenticationStatement* lasso_lib_authentication_statement_new_full ( const char* authenticationMethod, const char* authenticationInstant, const char* reauthenticateOnOrAfter, LassoSamlNameIdentifier* sp_identifier, LassoSamlNameIdentifier* idp_identifier ) GType lasso_lib_authn_context_get_type ( ) LassoNode* lasso_lib_authn_context_new ( ) GType lasso_lib_authn_request_envelope_get_type ( ) LassoLibAuthnRequestEnvelope* lasso_lib_authn_request_envelope_new ( ) LassoLibAuthnRequestEnvelope* lasso_lib_authn_request_envelope_new_full ( LassoLibAuthnRequest* authnRequest, char* providerID, char* assertionConsumerServiceURL ) GType lasso_lib_authn_request_get_type ( ) LassoLibAuthnRequest* lasso_lib_authn_request_new ( ) GType lasso_lib_authn_response_envelope_get_type ( ) LassoLibAuthnResponseEnvelope* lasso_lib_authn_response_envelope_new ( LassoLibAuthnResponse* response, char* assertionConsumerServiceURL ) GType lasso_lib_authn_response_get_type ( ) LassoNode* lasso_lib_authn_response_new ( char* providerID, LassoLibAuthnRequest* request ) GType lasso_lib_federation_termination_notification_get_type ( ) LassoNode* lasso_lib_federation_termination_notification_new ( ) LassoNode* lasso_lib_federation_termination_notification_new_full ( char* providerID, LassoSamlNameIdentifier* nameIdentifier, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_idp_entries_get_type ( ) LassoNode* lasso_lib_idp_entries_new ( ) GType lasso_lib_idp_entry_get_type ( ) LassoNode* lasso_lib_idp_entry_new ( ) GType lasso_lib_idp_list_get_type ( ) LassoNode* lasso_lib_idp_list_new ( ) GType lasso_lib_logout_request_get_type ( ) LassoNode* lasso_lib_logout_request_new ( ) LassoNode* lasso_lib_logout_request_new_full ( char* providerID, LassoSamlNameIdentifier* nameIdentifier, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_logout_response_get_type ( ) LassoNode* lasso_lib_logout_response_new ( ) LassoNode* lasso_lib_logout_response_new_full ( char* providerID, const char* statusCodeValue, LassoLibLogoutRequest* request, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_name_identifier_mapping_request_get_type ( ) LassoNode* lasso_lib_name_identifier_mapping_request_new ( ) LassoNode* lasso_lib_name_identifier_mapping_request_new_full ( char* providerID, LassoSamlNameIdentifier* nameIdentifier, const char* targetNamespace, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_name_identifier_mapping_response_get_type ( ) LassoNode* lasso_lib_name_identifier_mapping_response_new ( ) LassoNode* lasso_lib_name_identifier_mapping_response_new_full ( char* provideRID, const char* statusCodeValue, LassoLibNameIdentifierMappingRequest* request, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_register_name_identifier_request_get_type ( ) LassoNode* lasso_lib_register_name_identifier_request_new ( ) LassoNode* lasso_lib_register_name_identifier_request_new_full ( const char* providerID, LassoSamlNameIdentifier* idpNameIdentifier, LassoSamlNameIdentifier* spNameIdentifier, LassoSamlNameIdentifier* oldNameIdentifier, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_register_name_identifier_response_get_type ( ) LassoNode* lasso_lib_register_name_identifier_response_new ( ) LassoNode* lasso_lib_register_name_identifier_response_new_full ( const char* providerID, const char* statusCodeValue, LassoLibRegisterNameIdentifierRequest* request, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_request_authn_context_get_type ( ) LassoLibRequestAuthnContext* lasso_lib_request_authn_context_new ( ) GType lasso_lib_scoping_get_type ( ) LassoLibScoping* lasso_lib_scoping_new ( ) GType lasso_lib_status_response_get_type ( ) LassoNode* lasso_lib_status_response_new ( ) GType lasso_lib_subject_get_type ( ) LassoLibSubject* lasso_lib_subject_new ( ) lasso_error_t lasso_login_accept_sso ( LassoLogin* login ) lasso_error_t lasso_login_build_artifact_msg ( LassoLogin* login, LassoHttpMethod http_method ) lasso_error_t lasso_login_build_assertion ( LassoLogin* login, const char* authenticationMethod, const char* authenticationInstant, const char* reauthenticateOnOrAfter, const char* notBefore, const char* notOnOrAfter ) lasso_error_t lasso_login_build_authn_request_msg ( LassoLogin* login ) lasso_error_t lasso_login_build_authn_response_msg ( LassoLogin* login ) lasso_error_t lasso_login_build_request_msg ( LassoLogin* login ) lasso_error_t lasso_login_build_response_msg ( LassoLogin* login, gchar* remote_providerID ) None lasso_login_destroy ( LassoLogin* login ) gchar* lasso_login_dump ( LassoLogin* login ) LassoNode* lasso_login_get_assertion ( LassoLogin* login ) GType lasso_login_get_type ( ) lasso_error_t lasso_login_init_authn_request ( LassoLogin* login, const gchar* remote_providerID, LassoHttpMethod http_method ) lasso_error_t lasso_login_init_idp_initiated_authn_request ( LassoLogin* login, const gchar* remote_providerID ) lasso_error_t lasso_login_init_request ( LassoLogin* login, gchar* response_msg, LassoHttpMethod response_http_method ) gboolean lasso_login_must_ask_for_consent ( LassoLogin* login ) gboolean lasso_login_must_authenticate ( LassoLogin* login ) LassoLogin* lasso_login_new ( LassoServer* server ) LassoLogin* lasso_login_new_from_dump ( LassoServer* server, const gchar* dump ) lasso_error_t lasso_login_process_authn_request_msg ( LassoLogin* login, const char* authn_request_msg ) lasso_error_t lasso_login_process_authn_response_msg ( LassoLogin* login, gchar* authn_response_msg ) lasso_error_t lasso_login_process_paos_response_msg ( LassoLogin* login, gchar* msg ) lasso_error_t lasso_login_process_request_msg ( LassoLogin* login, gchar* request_msg ) lasso_error_t lasso_login_process_response_msg ( LassoLogin* login, gchar* response_msg ) lasso_error_t lasso_login_validate_request_msg ( LassoLogin* login, gboolean authentication_result, gboolean is_consent_obtained ) lasso_error_t lasso_logout_build_request_msg ( LassoLogout* logout ) lasso_error_t lasso_logout_build_response_msg ( LassoLogout* logout ) None lasso_logout_destroy ( LassoLogout* logout ) gchar* lasso_logout_dump ( LassoLogout* logout ) gchar* lasso_logout_get_next_providerID ( LassoLogout* logout ) GType lasso_logout_get_type ( ) lasso_error_t lasso_logout_init_request ( LassoLogout* logout, gchar* remote_providerID, LassoHttpMethod request_method ) LassoLogout* lasso_logout_new ( LassoServer* server ) LassoLogout* lasso_logout_new_from_dump ( LassoServer* server, const gchar* dump ) lasso_error_t lasso_logout_process_request_msg ( LassoLogout* logout, gchar* request_msg ) lasso_error_t lasso_logout_process_response_msg ( LassoLogout* logout, gchar* response_msg ) lasso_error_t lasso_logout_reset_providerID_index ( LassoLogout* logout ) lasso_error_t lasso_logout_validate_request ( LassoLogout* logout ) GType lasso_misc_text_node_get_type ( ) xmlNode* lasso_misc_text_node_get_xml_content ( LassoMiscTextNode* misc_text_node ) LassoNode* lasso_misc_text_node_new ( ) LassoMiscTextNode* lasso_misc_text_node_new_with_string ( const char* content ) LassoMiscTextNode* lasso_misc_text_node_new_with_xml_node ( xmlNode* xml_node ) None lasso_misc_text_node_set_xml_content ( LassoMiscTextNode* misc_text_node, xmlNode* node ) lasso_error_t lasso_name_id_management_build_request_msg ( LassoNameIdManagement* name_id_management ) lasso_error_t lasso_name_id_management_build_response_msg ( LassoNameIdManagement* name_id_management ) None lasso_name_id_management_destroy ( LassoNameIdManagement* name_id_management ) char* lasso_name_id_management_dump ( LassoNameIdManagement* name_id_management ) GType lasso_name_id_management_get_type ( ) lasso_error_t lasso_name_id_management_init_request ( LassoNameIdManagement* name_id_management, char* remote_provider_id, char* new_name_id, LassoHttpMethod http_method ) LassoNameIdManagement* lasso_name_id_management_new ( LassoServer* server ) LassoNameIdManagement* lasso_name_id_management_new_from_dump ( LassoServer* server, const char* dump ) lasso_error_t lasso_name_id_management_process_request_msg ( LassoNameIdManagement* name_id_management, gchar* request_msg ) lasso_error_t lasso_name_id_management_process_response_msg ( LassoNameIdManagement* name_id_management, gchar* response_msg ) lasso_error_t lasso_name_id_management_validate_request ( LassoNameIdManagement* name_id_management ) lasso_error_t lasso_name_identifier_mapping_build_request_msg ( LassoNameIdentifierMapping* mapping ) lasso_error_t lasso_name_identifier_mapping_build_response_msg ( LassoNameIdentifierMapping* mapping ) None lasso_name_identifier_mapping_destroy ( LassoNameIdentifierMapping* mapping ) GType lasso_name_identifier_mapping_get_type ( ) lasso_error_t lasso_name_identifier_mapping_init_request ( LassoNameIdentifierMapping* mapping, gchar* targetNamespace, gchar* remote_providerID ) LassoNameIdentifierMapping* lasso_name_identifier_mapping_new ( LassoServer* server ) lasso_error_t lasso_name_identifier_mapping_process_request_msg ( LassoNameIdentifierMapping* mapping, gchar* request_msg ) lasso_error_t lasso_name_identifier_mapping_process_response_msg ( LassoNameIdentifierMapping* mapping, gchar* response_msg ) lasso_error_t lasso_name_identifier_mapping_validate_request ( LassoNameIdentifierMapping* mapping ) lasso_error_t lasso_name_registration_build_request_msg ( LassoNameRegistration* name_registration ) lasso_error_t lasso_name_registration_build_response_msg ( LassoNameRegistration* name_registration ) None lasso_name_registration_destroy ( LassoNameRegistration* name_registration ) gchar* lasso_name_registration_dump ( LassoNameRegistration* name_registration ) GType lasso_name_registration_get_type ( ) lasso_error_t lasso_name_registration_init_request ( LassoNameRegistration* name_registration, char* remote_providerID, LassoHttpMethod http_method ) LassoNameRegistration* lasso_name_registration_new ( LassoServer* server ) LassoNameRegistration* lasso_name_registration_new_from_dump ( LassoServer* server, const char* dump ) lasso_error_t lasso_name_registration_process_request_msg ( LassoNameRegistration* name_registration, gchar* request_msg ) lasso_error_t lasso_name_registration_process_response_msg ( LassoNameRegistration* name_registration, gchar* response_msg ) lasso_error_t lasso_name_registration_validate_request ( LassoNameRegistration* name_registration ) None lasso_node_cleanup_original_xmlnodes ( LassoNode* node ) char* lasso_node_debug ( LassoNode* node, int level ) None lasso_node_destroy ( LassoNode* node ) char* lasso_node_dump ( LassoNode* node ) char* lasso_node_export_to_base64 ( LassoNode* node ) char* lasso_node_export_to_ecp_soap_response ( LassoNode* node, const char* assertionConsumerURL ) char* lasso_node_export_to_paos_request ( LassoNode* node, const char* issuer, const char* responseConsumerURL, const char* relay_state ) char* lasso_node_export_to_query ( LassoNode* node, LassoSignatureMethod sign_method, const char* private_key_file ) char* lasso_node_export_to_query_with_password ( LassoNode* node, LassoSignatureMethod sign_method, const char* private_key_file, const char* private_key_file_password ) char* lasso_node_export_to_soap ( LassoNode* node ) gchar* lasso_node_export_to_xml ( LassoNode* node ) const char* lasso_node_get_name ( LassoNode* node ) const char* lasso_node_get_namespace ( LassoNode* node ) xmlNode* lasso_node_get_original_xmlnode ( LassoNode* node ) GType lasso_node_get_type ( ) xmlNode* lasso_node_get_xmlNode ( LassoNode* node, gboolean lasso_dump ) LassoMessageFormat lasso_node_init_from_message ( LassoNode* node, const char* message ) gboolean lasso_node_init_from_query ( LassoNode* node, const char* query ) lasso_error_t lasso_node_init_from_xml ( LassoNode* node, xmlNode* xmlnode ) LassoNode* lasso_node_new ( ) LassoNode* lasso_node_new_from_dump ( const char* dump ) LassoNode* lasso_node_new_from_soap ( const char* soap ) LassoNode* lasso_node_new_from_xmlNode ( xmlNode* node ) None lasso_node_set_custom_namespace ( LassoNode* node, const char* prefix, const char* href ) None lasso_node_set_custom_nodename ( LassoNode* node, const char* nodename ) None lasso_node_set_original_xmlnode ( LassoNode* node, xmlNode* xmlnode ) char* lasso_profile_get_artifact ( LassoProfile* profile ) char* lasso_profile_get_artifact_message ( LassoProfile* profile ) LassoIdentity* lasso_profile_get_identity ( LassoProfile* profile ) LassoNode* lasso_profile_get_nameIdentifier ( LassoProfile* profile ) LassoRequestType lasso_profile_get_request_type_from_soap_msg ( const gchar* soap ) LassoSession* lasso_profile_get_session ( LassoProfile* profile ) LassoProfileSignatureHint lasso_profile_get_signature_hint ( LassoProfile* profile ) lasso_error_t lasso_profile_get_signature_status ( LassoProfile* profile ) LassoProfileSignatureVerifyHint lasso_profile_get_signature_verify_hint ( LassoProfile* profile ) GType lasso_profile_get_type ( ) gboolean lasso_profile_is_identity_dirty ( LassoProfile* profile ) gboolean lasso_profile_is_liberty_query ( const gchar* query ) gboolean lasso_profile_is_saml_query ( const gchar* query ) gboolean lasso_profile_is_session_dirty ( LassoProfile* profile ) None lasso_profile_set_artifact_message ( LassoProfile* profile, const char* message ) lasso_error_t lasso_profile_set_identity_from_dump ( LassoProfile* profile, const gchar* dump ) lasso_error_t lasso_profile_set_session_from_dump ( LassoProfile* profile, const gchar* dump ) None lasso_profile_set_signature_hint ( LassoProfile* profile, LassoProfileSignatureHint signature_hint ) None lasso_profile_set_signature_verify_hint ( LassoProfile* profile, LassoProfileSignatureVerifyHint signature_verify_hint ) lasso_error_t lasso_profile_set_soap_fault_response ( LassoProfile* profile, const char* faultcode, const char* faultstring, GList* details ) LassoProviderRole lasso_profile_sso_role_with ( LassoProfile* profile, const char* remote_provider_id ) gboolean lasso_provider_accept_http_method ( LassoProvider* provider, LassoProvider* remote_provider, LassoMdProtocolType protocol_type, LassoHttpMethod http_method, gboolean initiate_profile ) gchar* lasso_provider_get_assertion_consumer_service_url ( LassoProvider* provider, const char* service_id ) gchar* lasso_provider_get_base64_succinct_id ( const LassoProvider* provider ) char* lasso_provider_get_cache_duration ( LassoProvider* provider ) gchar* lasso_provider_get_default_name_id_format ( LassoProvider* provider ) LassoEncryptionMode lasso_provider_get_encryption_mode ( LassoProvider* provider ) LassoHttpMethod lasso_provider_get_first_http_method ( LassoProvider* provider, LassoProvider* remote_provider, LassoMdProtocolType protocol_type ) GList* lasso_provider_get_idp_supported_attributes ( LassoProvider* provider ) GList* lasso_provider_get_metadata_keys_for_role ( LassoProvider* provider, LassoProviderRole role ) GList* lasso_provider_get_metadata_list ( LassoProvider* provider, const char* name ) GList* lasso_provider_get_metadata_list_for_role ( const LassoProvider* provider, LassoProviderRole role, const char* name ) gchar* lasso_provider_get_metadata_one ( LassoProvider* provider, const char* name ) char* lasso_provider_get_metadata_one_for_role ( LassoProvider* provider, LassoProviderRole role, const char* name ) xmlNode* lasso_provider_get_organization ( const LassoProvider* provider ) LassoProtocolConformance lasso_provider_get_protocol_conformance ( const LassoProvider* provider ) LassoProviderRole lasso_provider_get_roles ( LassoProvider* provider ) const char* lasso_provider_get_sp_name_qualifier ( LassoProvider* provider ) GType lasso_provider_get_type ( ) char* lasso_provider_get_valid_until ( LassoProvider* provider ) gboolean lasso_provider_has_protocol_profile ( LassoProvider* provider, LassoMdProtocolType protocol_type, const char* protocol_profile ) gboolean lasso_provider_match_conformance ( LassoProvider* provider, LassoProvider* another_provider ) LassoProvider* lasso_provider_new ( LassoProviderRole role, const char* metadata, const char* public_key, const char* ca_cert_chain ) LassoProvider* lasso_provider_new_from_buffer ( LassoProviderRole role, const char* metadata, const char* public_key, const char* ca_cert_chain ) LassoProvider* lasso_provider_new_from_dump ( const gchar* dump ) LassoSaml2EncryptedElement* lasso_provider_saml2_node_encrypt ( const LassoProvider* provider, LassoNode* lasso_node ) None lasso_provider_set_encryption_mode ( LassoProvider* provider, LassoEncryptionMode encryption_mode ) None lasso_provider_set_encryption_sym_key_type ( LassoProvider* provider, LassoEncryptionSymKeyType encryption_sym_key_type ) lasso_error_t lasso_provider_verify_single_node_signature ( LassoProvider* provider, LassoNode* node, const char* id_attr_name ) None lasso_register_dst_service ( const char* prefix, const char* href ) None lasso_register_idwsf2_dst_service ( const gchar* prefix, const gchar* href ) GType lasso_saml2_action_get_type ( ) LassoNode* lasso_saml2_action_new ( ) LassoNode* lasso_saml2_action_new_with_string ( char* content ) GType lasso_saml2_advice_get_type ( ) LassoNode* lasso_saml2_advice_new ( ) lasso_error_t lasso_saml2_assertion_add_attribute_with_node ( LassoSaml2Assertion* assertion, const char* name, const char* nameformat, LassoNode* content ) None lasso_saml2_assertion_add_audience_restriction ( LassoSaml2Assertion* saml2_assertion, const char* providerID ) None lasso_saml2_assertion_add_proxy_limit ( LassoSaml2Assertion* saml2_assertion, int proxy_count, GList* proxy_audiences ) LassoSaml2AssertionValidationState lasso_saml2_assertion_allows_proxying ( LassoSaml2Assertion* saml2_assertion ) LassoSaml2AssertionValidationState lasso_saml2_assertion_allows_proxying_to ( LassoSaml2Assertion* saml2_assertion, const char* audience ) lasso_error_t lasso_saml2_assertion_decrypt_subject ( LassoSaml2Assertion* assertion, LassoServer* server ) const char* lasso_saml2_assertion_get_in_response_to ( LassoSaml2Assertion* assertion ) LassoProvider* lasso_saml2_assertion_get_issuer_provider ( const LassoSaml2Assertion* saml2_assertion, const LassoServer* server ) LassoSaml2SubjectConfirmationData* lasso_saml2_assertion_get_subject_confirmation_data ( LassoSaml2Assertion* saml2_assertion, gboolean create ) GType lasso_saml2_assertion_get_type ( ) gboolean lasso_saml2_assertion_has_audience_restriction ( LassoSaml2Assertion* saml2_assertion ) gboolean lasso_saml2_assertion_has_one_time_use ( LassoSaml2Assertion* saml2_assertion ) gboolean lasso_saml2_assertion_is_audience_restricted ( LassoSaml2Assertion* saml2_assertion, char* providerID ) LassoNode* lasso_saml2_assertion_new ( ) None lasso_saml2_assertion_set_basic_conditions ( LassoSaml2Assertion* saml2_assertion, time_t tolerance, time_t length, gboolean one_time_use ) None lasso_saml2_assertion_set_one_time_use ( LassoSaml2Assertion* saml2_assertion, gboolean one_time_use ) None lasso_saml2_assertion_set_subject_confirmation_data ( LassoSaml2Assertion* saml2_assertion, time_t tolerance, time_t length, const char* Recipient, const char* InResponseTo, const char* Address ) None lasso_saml2_assertion_set_subject_confirmation_name_id ( LassoSaml2Assertion* saml2_assertion, LassoNode* node ) None lasso_saml2_assertion_set_subject_name_id ( LassoSaml2Assertion* saml2_assertion, LassoNode* node ) LassoSaml2AssertionValidationState lasso_saml2_assertion_validate_audience ( LassoSaml2Assertion* saml2_assertion, const gchar* audience ) LassoSaml2AssertionValidationState lasso_saml2_assertion_validate_conditions ( LassoSaml2Assertion* saml2_assertion, const char* relaying_party_providerID ) LassoSaml2AssertionValidationState lasso_saml2_assertion_validate_time_checks ( LassoSaml2Assertion* saml2_assertion, unsigned int tolerance, time_t now ) GType lasso_saml2_attribute_get_type ( ) LassoNode* lasso_saml2_attribute_new ( ) GType lasso_saml2_attribute_statement_get_type ( ) LassoNode* lasso_saml2_attribute_statement_new ( ) GType lasso_saml2_attribute_value_get_type ( ) LassoSaml2AttributeValue* lasso_saml2_attribute_value_new ( ) GType lasso_saml2_audience_restriction_get_type ( ) LassoNode* lasso_saml2_audience_restriction_new ( ) GType lasso_saml2_authn_context_get_type ( ) LassoNode* lasso_saml2_authn_context_new ( ) GType lasso_saml2_authn_statement_get_type ( ) LassoNode* lasso_saml2_authn_statement_new ( ) GType lasso_saml2_authz_decision_statement_get_type ( ) LassoNode* lasso_saml2_authz_decision_statement_new ( ) GType lasso_saml2_base_idabstract_get_type ( ) LassoNode* lasso_saml2_base_idabstract_new ( ) GType lasso_saml2_condition_abstract_get_type ( ) LassoNode* lasso_saml2_condition_abstract_new ( ) GType lasso_saml2_conditions_get_type ( ) LassoNode* lasso_saml2_conditions_new ( ) LassoSaml2EncryptedElement* lasso_saml2_encrypted_element_build_encrypted_persistent_name_id ( const char* id, const char* idpID, const LassoProvider* provider ) GType lasso_saml2_encrypted_element_get_type ( ) LassoNode* lasso_saml2_encrypted_element_new ( ) lasso_error_t lasso_saml2_encrypted_element_server_decrypt ( LassoSaml2EncryptedElement* encrypted_element, LassoServer* server, LassoNode** decrypted_node ) GType lasso_saml2_evidence_get_type ( ) LassoNode* lasso_saml2_evidence_new ( ) GType lasso_saml2_key_info_confirmation_data_get_type ( ) LassoNode* lasso_saml2_key_info_confirmation_data_new ( ) LassoSaml2NameID* lasso_saml2_name_id_build_persistent ( const char* id, const char* idpID, const char* providerID ) gboolean lasso_saml2_name_id_equals ( LassoSaml2NameID* name_id, LassoSaml2NameID* other_name_id ) GType lasso_saml2_name_id_get_type ( ) LassoNode* lasso_saml2_name_id_new ( ) LassoSaml2NameID* lasso_saml2_name_id_new_with_persistent_format ( const char* id, const char* idpID, const char* providerID ) LassoNode* lasso_saml2_name_id_new_with_string ( char* content ) GType lasso_saml2_one_time_use_get_type ( ) LassoNode* lasso_saml2_one_time_use_new ( ) GType lasso_saml2_proxy_restriction_get_type ( ) LassoNode* lasso_saml2_proxy_restriction_new ( ) GType lasso_saml2_statement_abstract_get_type ( ) LassoNode* lasso_saml2_statement_abstract_new ( ) GType lasso_saml2_subject_confirmation_data_get_type ( ) LassoNode* lasso_saml2_subject_confirmation_data_new ( ) GType lasso_saml2_subject_confirmation_get_type ( ) LassoNode* lasso_saml2_subject_confirmation_new ( ) GType lasso_saml2_subject_get_type ( ) GType lasso_saml2_subject_locality_get_type ( ) LassoNode* lasso_saml2_subject_locality_new ( ) LassoNode* lasso_saml2_subject_new ( ) GType lasso_saml_advice_get_type ( ) LassoNode* lasso_saml_advice_new ( ) GType lasso_saml_assertion_get_type ( ) LassoSamlAssertion* lasso_saml_assertion_new ( ) GType lasso_saml_attribute_designator_get_type ( ) LassoNode* lasso_saml_attribute_designator_new ( ) GType lasso_saml_attribute_get_type ( ) LassoSamlAttribute* lasso_saml_attribute_new ( ) GType lasso_saml_attribute_statement_get_type ( ) LassoSamlAttributeStatement* lasso_saml_attribute_statement_new ( ) GType lasso_saml_attribute_value_get_type ( ) LassoSamlAttributeValue* lasso_saml_attribute_value_new ( ) GType lasso_saml_audience_restriction_condition_get_type ( ) LassoSamlAudienceRestrictionCondition* lasso_saml_audience_restriction_condition_new ( ) LassoSamlAudienceRestrictionCondition* lasso_saml_audience_restriction_condition_new_full ( const char* audience ) GType lasso_saml_authentication_statement_get_type ( ) LassoNode* lasso_saml_authentication_statement_new ( ) GType lasso_saml_authority_binding_get_type ( ) LassoNode* lasso_saml_authority_binding_new ( ) GType lasso_saml_condition_abstract_get_type ( ) GType lasso_saml_conditions_get_type ( ) LassoSamlConditions* lasso_saml_conditions_new ( ) GType lasso_saml_name_identifier_get_type ( ) LassoSamlNameIdentifier* lasso_saml_name_identifier_new ( ) LassoSamlNameIdentifier* lasso_saml_name_identifier_new_from_xmlNode ( xmlNode* xmlnode ) GType lasso_saml_statement_abstract_get_type ( ) GType lasso_saml_subject_confirmation_get_type ( ) LassoSamlSubjectConfirmation* lasso_saml_subject_confirmation_new ( ) GType lasso_saml_subject_get_type ( ) GType lasso_saml_subject_locality_get_type ( ) LassoNode* lasso_saml_subject_locality_new ( ) LassoNode* lasso_saml_subject_new ( ) GType lasso_saml_subject_statement_abstract_get_type ( ) GType lasso_saml_subject_statement_get_type ( ) LassoNode* lasso_saml_subject_statement_new ( ) GType lasso_samlp2_artifact_resolve_get_type ( ) LassoNode* lasso_samlp2_artifact_resolve_new ( ) GType lasso_samlp2_artifact_response_get_type ( ) LassoNode* lasso_samlp2_artifact_response_new ( ) GType lasso_samlp2_assertion_id_request_get_type ( ) LassoNode* lasso_samlp2_assertion_id_request_new ( ) GType lasso_samlp2_attribute_query_get_type ( ) LassoNode* lasso_samlp2_attribute_query_new ( ) GType lasso_samlp2_authn_query_get_type ( ) LassoNode* lasso_samlp2_authn_query_new ( ) GType lasso_samlp2_authn_request_get_type ( ) LassoNode* lasso_samlp2_authn_request_new ( ) GType lasso_samlp2_authz_decision_query_get_type ( ) LassoNode* lasso_samlp2_authz_decision_query_new ( ) GType lasso_samlp2_extensions_get_type ( ) LassoNode* lasso_samlp2_extensions_new ( ) GType lasso_samlp2_idp_entry_get_type ( ) LassoNode* lasso_samlp2_idp_entry_new ( ) GType lasso_samlp2_idp_list_get_type ( ) LassoNode* lasso_samlp2_idp_list_new ( ) GList* lasso_samlp2_logout_request_get_session_indexes ( LassoSamlp2LogoutRequest* logout_request ) GType lasso_samlp2_logout_request_get_type ( ) LassoNode* lasso_samlp2_logout_request_new ( ) None lasso_samlp2_logout_request_set_session_indexes ( LassoSamlp2LogoutRequest* logout_request, GList* session_index ) GType lasso_samlp2_logout_response_get_type ( ) LassoNode* lasso_samlp2_logout_response_new ( ) GType lasso_samlp2_manage_name_id_request_get_type ( ) LassoNode* lasso_samlp2_manage_name_id_request_new ( ) GType lasso_samlp2_manage_name_id_response_get_type ( ) LassoNode* lasso_samlp2_manage_name_id_response_new ( ) GType lasso_samlp2_name_id_mapping_request_get_type ( ) LassoNode* lasso_samlp2_name_id_mapping_request_new ( ) GType lasso_samlp2_name_id_mapping_response_get_type ( ) LassoNode* lasso_samlp2_name_id_mapping_response_new ( ) GType lasso_samlp2_name_id_policy_get_type ( ) LassoNode* lasso_samlp2_name_id_policy_new ( ) GType lasso_samlp2_request_abstract_get_type ( ) LassoNode* lasso_samlp2_request_abstract_new ( ) GType lasso_samlp2_requested_authn_context_get_type ( ) LassoNode* lasso_samlp2_requested_authn_context_new ( ) GType lasso_samlp2_response_get_type ( ) LassoNode* lasso_samlp2_response_new ( ) GType lasso_samlp2_scoping_get_type ( ) LassoNode* lasso_samlp2_scoping_new ( ) GType lasso_samlp2_status_code_get_type ( ) LassoNode* lasso_samlp2_status_code_new ( ) GType lasso_samlp2_status_detail_get_type ( ) LassoNode* lasso_samlp2_status_detail_new ( ) GType lasso_samlp2_status_get_type ( ) LassoNode* lasso_samlp2_status_new ( ) GType lasso_samlp2_status_response_get_type ( ) LassoNode* lasso_samlp2_status_response_new ( ) GType lasso_samlp2_subject_query_abstract_get_type ( ) LassoNode* lasso_samlp2_subject_query_abstract_new ( ) GType lasso_samlp2_terminate_get_type ( ) LassoNode* lasso_samlp2_terminate_new ( ) GType lasso_samlp_request_abstract_get_type ( ) GType lasso_samlp_request_get_type ( ) LassoNode* lasso_samlp_request_new ( ) None lasso_samlp_response_abstract_fill ( LassoSamlpResponseAbstract* response, const char* InResponseTo, const char* Recipient ) GType lasso_samlp_response_abstract_get_type ( ) GType lasso_samlp_response_get_type ( ) LassoNode* lasso_samlp_response_new ( ) GType lasso_samlp_status_code_get_type ( ) LassoSamlpStatusCode* lasso_samlp_status_code_new ( ) GType lasso_samlp_status_get_type ( ) LassoSamlpStatus* lasso_samlp_status_new ( ) lasso_error_t lasso_server_add_provider ( LassoServer* server, LassoProviderRole role, const gchar* metadata, const gchar* public_key, const gchar* ca_cert_chain ) lasso_error_t lasso_server_add_provider_from_buffer ( LassoServer* server, LassoProviderRole role, const gchar* metadata, const gchar* public_key, const gchar* ca_cert_chain ) None lasso_server_destroy ( LassoServer* server ) gchar* lasso_server_dump ( LassoServer* server ) LassoProvider* lasso_server_get_provider ( const LassoServer* server, const gchar* providerID ) GType lasso_server_get_type ( ) lasso_error_t lasso_server_load_affiliation ( LassoServer* server, const gchar* filename ) LassoServer* lasso_server_new ( const gchar* metadata, const gchar* private_key, const gchar* private_key_password, const gchar* certificate ) LassoServer* lasso_server_new_from_buffers ( const gchar* metadata, const gchar* private_key_content, const gchar* private_key_password, const gchar* certificate_content ) LassoServer* lasso_server_new_from_dump ( const gchar* dump ) lasso_error_t lasso_server_saml2_assertion_setup_signature ( LassoServer* server, LassoSaml2Assertion* saml2_assertion ) lasso_error_t lasso_server_set_encryption_private_key ( LassoServer* server, const gchar* filename_or_buffer ) lasso_error_t lasso_server_set_encryption_private_key_with_password ( LassoServer* server, const gchar* filename_or_buffer, const gchar* password ) lasso_error_t lasso_session_add_assertion ( LassoSession* session, const char* providerID, LassoNode* assertion ) None lasso_session_destroy ( LassoSession* session ) gchar* lasso_session_dump ( LassoSession* session ) LassoNode* lasso_session_get_assertion ( LassoSession* session, const gchar* providerID ) GList* lasso_session_get_assertions ( LassoSession* session, const char* provider_id ) gchar* lasso_session_get_provider_index ( LassoSession* session, gint index ) GType lasso_session_get_type ( ) gboolean lasso_session_is_empty ( LassoSession* session ) LassoSession* lasso_session_new ( ) LassoSession* lasso_session_new_from_dump ( const gchar* dump ) lasso_error_t lasso_session_remove_assertion ( LassoSession* session, const gchar* providerID ) None lasso_set_flag ( char* flag ) lasso_error_t lasso_shutdown ( ) GType lasso_soap_body_get_type ( ) LassoSoapBody* lasso_soap_body_new ( ) LassoSoapBody* lasso_soap_body_new_from_message ( const gchar* message ) GType lasso_soap_detail_get_type ( ) LassoSoapDetail* lasso_soap_detail_new ( ) LassoSoapDetail* lasso_soap_detail_new_from_message ( const gchar* message ) GType lasso_soap_envelope_get_type ( ) LassoSoapEnvelope* lasso_soap_envelope_new ( LassoSoapBody* body ) LassoSoapEnvelope* lasso_soap_envelope_new_from_message ( const gchar* message ) GType lasso_soap_fault_get_type ( ) LassoSoapFault* lasso_soap_fault_new ( ) LassoSoapFault* lasso_soap_fault_new_from_message ( const gchar* message ) LassoSoapFault* lasso_soap_fault_new_full ( const char* faultcode, const char* faultstring ) GType lasso_soap_header_get_type ( ) LassoSoapHeader* lasso_soap_header_new ( ) LassoSoapHeader* lasso_soap_header_new_from_message ( const gchar* message ) const char* lasso_strerror ( int error_code ) lasso-2.8.2/abi/PaxHeaders/abi-2.3.40000644000000000000000000000013113766621500013602 xustar0029 mtime=1608196928.71889494 30 atime=1678098069.993489071 30 ctime=1678814319.933947183 lasso-2.8.2/abi/abi-2.3.40000644000175000017500000021067313766621500017064 0ustar00bdauvergnebdauvergne00000000000000BACKWARD_COMP_H LASSO_ASSERTION_QUERY_ERROR_ATTRIBUTE_REQUEST_ALREADY_EXIST LASSO_ASSERTION_QUERY_ERROR_NOT_AN_ATTRIBUTE_QUERY LASSO_ASSERTION_QUERY_REQUEST_TYPE_ASSERTION_ID LASSO_ASSERTION_QUERY_REQUEST_TYPE_ATTRIBUTE LASSO_ASSERTION_QUERY_REQUEST_TYPE_AUTHN LASSO_ASSERTION_QUERY_REQUEST_TYPE_AUTHZ_DECISION LASSO_ASSERTION_QUERY_REQUEST_TYPE_LAST LASSO_ASSERTION_QUERY_REQUEST_TYPE_UNSET LASSO_CERTIFICATE_ATTRIBUTE LASSO_CHECK_VERSIONABI_COMPATIBLE LASSO_CHECK_VERSION_EXACT LASSO_CHECK_VERSION_NUMERIC LASSO_DATA_SERVICE_ERROR_CANNOT_ADD_ITEM LASSO_DATA_SERVICE_ERROR_UNREGISTERED_DST LASSO_DEFEDERATION_ERROR_MISSING_NAME_IDENTIFIER LASSO_DISCOVERY_ERROR_FAILED_TO_BUILD_ENDPOINT_REFERENCE LASSO_DISCOVERY_ERROR_MISSING_REQUESTED_SERVICE LASSO_DISCOVERY_ERROR_SVC_METADATA_ASSOCIATION_ADD_FAILED LASSO_DISCOVERY_ERROR_SVC_METADATA_REGISTER_FAILED LASSO_DST_ERROR_EMPTY_REQUEST LASSO_DST_ERROR_MALFORMED_QUERY LASSO_DST_ERROR_MISSING_SERVICE_DATA LASSO_DST_ERROR_MODIFY_FAILED LASSO_DST_ERROR_MODIFY_PARTIALLY_FAILED LASSO_DST_ERROR_NEW_DATA_MISSING LASSO_DST_ERROR_NO_DATA LASSO_DST_ERROR_QUERY_FAILED LASSO_DST_ERROR_QUERY_NOT_FOUND LASSO_DST_ERROR_QUERY_PARTIALLY_FAILED LASSO_DS_ERROR_CA_CERT_CHAIN_LOAD_FAILED LASSO_DS_ERROR_CERTIFICATE_LOAD_FAILED LASSO_DS_ERROR_CONTEXT_CREATION_FAILED LASSO_DS_ERROR_DECRYPTION_FAILED LASSO_DS_ERROR_DECRYPTION_FAILED_MISSING_PRIVATE_KEY LASSO_DS_ERROR_DIGEST_COMPUTE_FAILED LASSO_DS_ERROR_ENCRYPTION_FAILED LASSO_DS_ERROR_INVALID_REFERENCE_FOR_SAML LASSO_DS_ERROR_INVALID_SIGALG LASSO_DS_ERROR_INVALID_SIGNATURE LASSO_DS_ERROR_KEYS_MNGR_CREATION_FAILED LASSO_DS_ERROR_KEYS_MNGR_INIT_FAILED LASSO_DS_ERROR_PRIVATE_KEY_LOAD_FAILED LASSO_DS_ERROR_PUBLIC_KEY_LOAD_FAILED LASSO_DS_ERROR_SIGNATURE_FAILED LASSO_DS_ERROR_SIGNATURE_NOT_FOUND LASSO_DS_ERROR_SIGNATURE_TEMPLATE_NOT_FOUND LASSO_DS_ERROR_SIGNATURE_TMPL_CREATION_FAILED LASSO_DS_ERROR_SIGNATURE_VERIFICATION_FAILED LASSO_DS_ERROR_TOO_MUCH_REFERENCES LASSO_DS_HREF LASSO_DS_PREFIX LASSO_DURATION_DAY LASSO_DURATION_HOUR LASSO_DURATION_MINUTE LASSO_DURATION_WEEK LASSO_ECP_HREF LASSO_ECP_PREFIX LASSO_ENCRYPTION_MODE_ASSERTION LASSO_ENCRYPTION_MODE_NAMEID LASSO_ENCRYPTION_MODE_NONE LASSO_ENCRYPTION_SYM_KEY_TYPE_3DES LASSO_ENCRYPTION_SYM_KEY_TYPE_AES_128 LASSO_ENCRYPTION_SYM_KEY_TYPE_AES_256 LASSO_ENCRYPTION_SYM_KEY_TYPE_DEFAULT LASSO_ERROR_CAST_FAILED LASSO_ERROR_OUT_OF_MEMORY LASSO_ERROR_UNDEFINED LASSO_ERROR_UNIMPLEMENTED LASSO_HTTP_METHOD_ANY LASSO_HTTP_METHOD_ARTIFACT_GET LASSO_HTTP_METHOD_ARTIFACT_POST LASSO_HTTP_METHOD_GET LASSO_HTTP_METHOD_IDP_INITIATED LASSO_HTTP_METHOD_LAST LASSO_HTTP_METHOD_NONE LASSO_HTTP_METHOD_PAOS LASSO_HTTP_METHOD_POST LASSO_HTTP_METHOD_REDIRECT LASSO_HTTP_METHOD_SOAP LASSO_IDWSF2_DISCOVERY_ERROR_DUPLICATE LASSO_IDWSF2_DISCOVERY_ERROR_FAILED LASSO_IDWSF2_DISCOVERY_ERROR_FORBIDDEN LASSO_IDWSF2_DISCOVERY_ERROR_LOGICAL_DUPLICATE LASSO_IDWSF2_DISCOVERY_ERROR_NOT_FOUND LASSO_IDWSF2_DISCOVERY_ERROR_NO_RESULTS LASSO_IDWSF2_DST_ERROR_DUPLICATE_ITEM LASSO_IDWSF2_DST_ERROR_ITEM_NOT_FOUND LASSO_IDWSF2_DST_ERROR_PARTIAL_FAILURE LASSO_IDWSF2_DST_ERROR_UNKNOWN_STATUS_CODE LASSO_LASSO_HREF LASSO_LASSO_PREFIX LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_INTERNET_PROTOCOL LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_INTERNET_PROTOCOL_PASSWORD LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_ONE_FACTOR_CONTRACT LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_ONE_FACTOR_UNREGISTERED LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_TWO_FACTOR_CONTRACT LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_TWO_FACTOR_UNREGISTERED LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PASSWORD LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PASSWORD_PROTECTED_TRANSPORT LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PREVIOUS_SESSION LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SMARTCARD LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SMARTCARD_PKI LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SOFTWARE_PKI LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_TIME_SYNC_TOKEN LASSO_LIB_AUTHN_CONTEXT_COMPARISON_BETTER LASSO_LIB_AUTHN_CONTEXT_COMPARISON_EXACT LASSO_LIB_AUTHN_CONTEXT_COMPARISON_MAXIMUM LASSO_LIB_AUTHN_CONTEXT_COMPARISON_MINIMUM LASSO_LIB_CONSENT_INAPPLICABLE LASSO_LIB_CONSENT_OBTAINED LASSO_LIB_CONSENT_OBTAINED_CURRENT_EXPLICIT LASSO_LIB_CONSENT_OBTAINED_CURRENT_IMPLICIT LASSO_LIB_CONSENT_OBTAINED_PRIOR LASSO_LIB_CONSENT_UNAVAILABLE LASSO_LIB_HREF LASSO_LIB_MAJOR_VERSION_N LASSO_LIB_MINOR_VERSION_N LASSO_LIB_NAMEID_POLICY_TYPE_ANY LASSO_LIB_NAMEID_POLICY_TYPE_FEDERATED LASSO_LIB_NAMEID_POLICY_TYPE_NONE LASSO_LIB_NAMEID_POLICY_TYPE_ONE_TIME LASSO_LIB_NAME_IDENTIFIER_FORMAT_ENCRYPTED LASSO_LIB_NAME_IDENTIFIER_FORMAT_ENTITYID LASSO_LIB_NAME_IDENTIFIER_FORMAT_FEDERATED LASSO_LIB_NAME_IDENTIFIER_FORMAT_ONE_TIME LASSO_LIB_PREFIX LASSO_LIB_PROTOCOL_PROFILE_BRWS_ART LASSO_LIB_PROTOCOL_PROFILE_BRWS_LECP LASSO_LIB_PROTOCOL_PROFILE_BRWS_POST LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_IDP_HTTP LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_IDP_SOAP LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_SP_SOAP LASSO_LIB_PROTOCOL_PROFILE_NIM_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_RNI_IDP_HTTP LASSO_LIB_PROTOCOL_PROFILE_RNI_IDP_SOAP LASSO_LIB_PROTOCOL_PROFILE_RNI_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_RNI_SP_SOAP LASSO_LIB_PROTOCOL_PROFILE_SLO_IDP_HTTP LASSO_LIB_PROTOCOL_PROFILE_SLO_IDP_SOAP LASSO_LIB_PROTOCOL_PROFILE_SLO_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_SLO_SP_SOAP LASSO_LIB_STATUS_CODE_FEDERATION_DOES_NOT_EXIST LASSO_LIB_STATUS_CODE_INVALID_ASSERTION_CONSUMER_SERVICE_INDEX LASSO_LIB_STATUS_CODE_INVALID_SIGNATURE LASSO_LIB_STATUS_CODE_NO_AUTHN_CONTEXT LASSO_LIB_STATUS_CODE_NO_AVAILABLEIDP LASSO_LIB_STATUS_CODE_NO_PASSIVE LASSO_LIB_STATUS_CODE_NO_SUPPORTEDIDP LASSO_LIB_STATUS_CODE_PROXY_COUNT_EXCEEDED LASSO_LIB_STATUS_CODE_UNKNOWN_PRINCIPAL LASSO_LIB_STATUS_CODE_UNSIGNED_AUTHN_REQUEST LASSO_LIB_STATUS_CODE_UNSUPPORTED_PROFILE LASSO_LOGIN_ERROR_ASSERTION_DOES_NOT_MATCH_REQUEST_ID LASSO_LOGIN_ERROR_ASSERTION_REPLAY LASSO_LOGIN_ERROR_CONSENT_NOT_OBTAINED LASSO_LOGIN_ERROR_FEDERATION_NOT_FOUND LASSO_LOGIN_ERROR_INVALID_ASSERTION_SIGNATURE LASSO_LOGIN_ERROR_INVALID_NAMEIDPOLICY LASSO_LOGIN_ERROR_INVALID_SIGNATURE LASSO_LOGIN_ERROR_NO_DEFAULT_ENDPOINT LASSO_LOGIN_ERROR_REQUEST_DENIED LASSO_LOGIN_ERROR_STATUS_NOT_SUCCESS LASSO_LOGIN_ERROR_UNKNOWN_PRINCIPAL LASSO_LOGIN_ERROR_UNSIGNED_AUTHN_REQUEST LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_ART LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_LECP LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_POST LASSO_LOGIN_PROTOCOL_PROFILE_REDIRECT LASSO_LOGOUT_ERROR_FEDERATION_NOT_FOUND LASSO_LOGOUT_ERROR_REQUEST_DENIED LASSO_LOGOUT_ERROR_UNKNOWN_PRINCIPAL LASSO_LOGOUT_ERROR_UNSUPPORTED_PROFILE LASSO_MD_PROTOCOL_TYPE_ARTIFACT_RESOLUTION LASSO_MD_PROTOCOL_TYPE_ASSERTION_ID_REQUEST LASSO_MD_PROTOCOL_TYPE_ATTRIBUTE LASSO_MD_PROTOCOL_TYPE_AUTHN_QUERY LASSO_MD_PROTOCOL_TYPE_AUTHZ LASSO_MD_PROTOCOL_TYPE_FEDERATION_TERMINATION LASSO_MD_PROTOCOL_TYPE_LAST LASSO_MD_PROTOCOL_TYPE_MANAGE_NAME_ID LASSO_MD_PROTOCOL_TYPE_NAME_IDENTIFIER_MAPPING LASSO_MD_PROTOCOL_TYPE_REGISTER_NAME_IDENTIFIER LASSO_MD_PROTOCOL_TYPE_SINGLE_LOGOUT LASSO_MD_PROTOCOL_TYPE_SINGLE_SIGN_ON LASSO_MESSAGE_FORMAT_BASE64 LASSO_MESSAGE_FORMAT_ERROR LASSO_MESSAGE_FORMAT_QUERY LASSO_MESSAGE_FORMAT_SOAP LASSO_MESSAGE_FORMAT_UNKNOWN LASSO_MESSAGE_FORMAT_XML LASSO_MESSAGE_FORMAT_XSCHEMA_ERROR LASSO_METADATA_HREF LASSO_METADATA_PREFIX LASSO_NAME_IDENTIFIER_MAPPING_ERROR_FORBIDDEN_CALL_ON_THIS_SIDE LASSO_NAME_IDENTIFIER_MAPPING_ERROR_MISSING_TARGET_IDENTIFIER LASSO_NAME_IDENTIFIER_MAPPING_ERROR_MISSING_TARGET_NAMESPACE LASSO_PAOS_HREF LASSO_PAOS_PREFIX LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ LASSO_PARAM_ERROR_CHECK_FAILED LASSO_PARAM_ERROR_INVALID_VALUE LASSO_PARAM_ERROR_NON_INITIALIZED_OBJECT LASSO_PRIVATE_KEY_ATTRIBUTE LASSO_PRIVATE_KEY_PASSWORD_ATTRIBUTE LASSO_PRIVATE_STATUS_CODE_FAILED_TO_RESTORE_ARTIFACT LASSO_PROFILE_ERROR_BAD_IDENTITY_DUMP LASSO_PROFILE_ERROR_BAD_SESSION_DUMP LASSO_PROFILE_ERROR_BUILDING_MESSAGE_FAILED LASSO_PROFILE_ERROR_BUILDING_QUERY_FAILED LASSO_PROFILE_ERROR_BUILDING_REQUEST_FAILED LASSO_PROFILE_ERROR_BUILDING_RESPONSE_FAILED LASSO_PROFILE_ERROR_CANNOT_FIND_A_PROVIDER LASSO_PROFILE_ERROR_CANNOT_VERIFY_SIGNATURE LASSO_PROFILE_ERROR_FEDERATION_NOT_FOUND LASSO_PROFILE_ERROR_IDENTITY_NOT_FOUND LASSO_PROFILE_ERROR_INVALID_ARTIFACT LASSO_PROFILE_ERROR_INVALID_ASSERTION LASSO_PROFILE_ERROR_INVALID_ASSERTION_CONDITIONS LASSO_PROFILE_ERROR_INVALID_HTTP_METHOD LASSO_PROFILE_ERROR_INVALID_ISSUER LASSO_PROFILE_ERROR_INVALID_MSG LASSO_PROFILE_ERROR_INVALID_POST_MSG LASSO_PROFILE_ERROR_INVALID_PROTOCOLPROFILE LASSO_PROFILE_ERROR_INVALID_QUERY LASSO_PROFILE_ERROR_INVALID_REQUEST LASSO_PROFILE_ERROR_INVALID_RESPONSE LASSO_PROFILE_ERROR_INVALID_SOAP_MSG LASSO_PROFILE_ERROR_ISSUER_IS_NOT_AN_IDP LASSO_PROFILE_ERROR_MISSING_ARTIFACT LASSO_PROFILE_ERROR_MISSING_ASSERTION LASSO_PROFILE_ERROR_MISSING_ENCRYPTION_PRIVATE_KEY LASSO_PROFILE_ERROR_MISSING_ENDPOINT_REFERENCE LASSO_PROFILE_ERROR_MISSING_ENDPOINT_REFERENCE_ADDRESS LASSO_PROFILE_ERROR_MISSING_ISSUER LASSO_PROFILE_ERROR_MISSING_NAME_IDENTIFIER LASSO_PROFILE_ERROR_MISSING_REMOTE_PROVIDERID LASSO_PROFILE_ERROR_MISSING_REQUEST LASSO_PROFILE_ERROR_MISSING_RESOURCE_OFFERING LASSO_PROFILE_ERROR_MISSING_RESPONSE LASSO_PROFILE_ERROR_MISSING_SERVER LASSO_PROFILE_ERROR_MISSING_SERVICE_DESCRIPTION LASSO_PROFILE_ERROR_MISSING_SERVICE_INSTANCE LASSO_PROFILE_ERROR_MISSING_SERVICE_TYPE LASSO_PROFILE_ERROR_MISSING_STATUS_CODE LASSO_PROFILE_ERROR_MISSING_SUBJECT LASSO_PROFILE_ERROR_NAME_IDENTIFIER_NOT_FOUND LASSO_PROFILE_ERROR_RESPONSE_DOES_NOT_MATCH_REQUEST LASSO_PROFILE_ERROR_SESSION_NOT_FOUND LASSO_PROFILE_ERROR_STATUS_NOT_SUCCESS LASSO_PROFILE_ERROR_UNKNOWN_ISSUER LASSO_PROFILE_ERROR_UNKNOWN_PROFILE_URL LASSO_PROFILE_ERROR_UNKNOWN_PROVIDER LASSO_PROFILE_ERROR_UNSUPPORTED_BINDING LASSO_PROFILE_ERROR_UNSUPPORTED_PROFILE LASSO_PROFILE_SIGNATURE_HINT_FORBID LASSO_PROFILE_SIGNATURE_HINT_FORCE LASSO_PROFILE_SIGNATURE_HINT_MAYBE LASSO_PROFILE_SIGNATURE_VERIFY_HINT_FORCE LASSO_PROFILE_SIGNATURE_VERIFY_HINT_IGNORE LASSO_PROFILE_SIGNATURE_VERIFY_HINT_LAST LASSO_PROFILE_SIGNATURE_VERIFY_HINT_MAYBE LASSO_PROTOCOL_LIBERTY_1_0 LASSO_PROTOCOL_LIBERTY_1_1 LASSO_PROTOCOL_LIBERTY_1_2 LASSO_PROTOCOL_NONE LASSO_PROTOCOL_SAML_2_0 LASSO_PROVIDER_ERROR_MISSING_PUBLIC_KEY LASSO_PROVIDER_ROLE_ANY LASSO_PROVIDER_ROLE_ATTRIBUTE_AUTHORITY LASSO_PROVIDER_ROLE_AUTHN_AUTHORITY LASSO_PROVIDER_ROLE_AUTHZ_AUTHORITY LASSO_PROVIDER_ROLE_BOTH LASSO_PROVIDER_ROLE_IDP LASSO_PROVIDER_ROLE_LAST LASSO_PROVIDER_ROLE_NONE LASSO_PROVIDER_ROLE_SP LASSO_PYTHON_HREF LASSO_REGISTRY_ERROR_KEY_EXISTS LASSO_REQUEST_TYPE_DEFEDERATION LASSO_REQUEST_TYPE_DISCO_MODIFY LASSO_REQUEST_TYPE_DISCO_QUERY LASSO_REQUEST_TYPE_DST_MODIFY LASSO_REQUEST_TYPE_DST_QUERY LASSO_REQUEST_TYPE_IDWSF2_DISCO_QUERY LASSO_REQUEST_TYPE_IDWSF2_DISCO_SVCMD_ASSOCIATION_ADD LASSO_REQUEST_TYPE_IDWSF2_DISCO_SVCMD_REGISTER LASSO_REQUEST_TYPE_INVALID LASSO_REQUEST_TYPE_LECP LASSO_REQUEST_TYPE_LOGIN LASSO_REQUEST_TYPE_LOGOUT LASSO_REQUEST_TYPE_NAME_IDENTIFIER_MAPPING LASSO_REQUEST_TYPE_NAME_ID_MANAGEMENT LASSO_REQUEST_TYPE_NAME_REGISTRATION LASSO_REQUEST_TYPE_SASL_REQUEST LASSO_SAML2_ACTION_GHPP_GET LASSO_SAML2_ACTION_GHPP_HEAD LASSO_SAML2_ACTION_GHPP_POST LASSO_SAML2_ACTION_GHPP_PUT LASSO_SAML2_ACTION_NAMESPACE_GHPP LASSO_SAML2_ACTION_NAMESPACE_RWEDC LASSO_SAML2_ACTION_NAMESPACE_RWEDC_NEGATION LASSO_SAML2_ACTION_NAMESPACE_UNIX LASSO_SAML2_ACTION_RWEDC_CONTROL LASSO_SAML2_ACTION_RWEDC_DELETE LASSO_SAML2_ACTION_RWEDC_EXECUTE LASSO_SAML2_ACTION_RWEDC_NEGATION LASSO_SAML2_ACTION_RWEDC_READ LASSO_SAML2_ACTION_RWEDC_WRITE LASSO_SAML2_ASSERTION_HREF LASSO_SAML2_ASSERTION_INDETERMINATE LASSO_SAML2_ASSERTION_INVALID LASSO_SAML2_ASSERTION_PREFIX LASSO_SAML2_ASSERTION_VALID LASSO_SAML2_ATTRIBUTE_NAME_EPR LASSO_SAML2_ATTRIBUTE_NAME_FORMAT_BASIC LASSO_SAML2_ATTRIBUTE_NAME_FORMAT_UNSPECIFIED LASSO_SAML2_ATTRIBUTE_NAME_FORMAT_URI LASSO_SAML2_ATTRIBUTE_PROFILE_BASIC LASSO_SAML2_ATTRIBUTE_PROFILE_DCE LASSO_SAML2_ATTRIBUTE_PROFILE_UUID LASSO_SAML2_ATTRIBUTE_PROFILE_X500 LASSO_SAML2_AUTHN_CONTEXT_AUTHENTICATED_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_INTERNET_PROTOCOL LASSO_SAML2_AUTHN_CONTEXT_INTERNET_PROTOCOL_PASSWORD LASSO_SAML2_AUTHN_CONTEXT_KERBEROS LASSO_SAML2_AUTHN_CONTEXT_MOBILE_ONE_FACTOR_CONTRACT LASSO_SAML2_AUTHN_CONTEXT_MOBILE_ONE_FACTOR_UNREGISTERED LASSO_SAML2_AUTHN_CONTEXT_MOBILE_TWO_FACTOR_CONTRACT LASSO_SAML2_AUTHN_CONTEXT_MOBILE_TWO_FACTOR_UNREGISTERED LASSO_SAML2_AUTHN_CONTEXT_NOMAD_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_PASSWORD LASSO_SAML2_AUTHN_CONTEXT_PASSWORD_PROTECTED_TRANSPORT LASSO_SAML2_AUTHN_CONTEXT_PERSONALIZED_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_PGP LASSO_SAML2_AUTHN_CONTEXT_PREVIOUS_SESSION LASSO_SAML2_AUTHN_CONTEXT_SECURE_REMOTE_PASSWORD LASSO_SAML2_AUTHN_CONTEXT_SMARTCARD LASSO_SAML2_AUTHN_CONTEXT_SMARTCARD_PKI LASSO_SAML2_AUTHN_CONTEXT_SOFTWARE_PKI LASSO_SAML2_AUTHN_CONTEXT_SPKI LASSO_SAML2_AUTHN_CONTEXT_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_TIME_SYNC_TOKEN LASSO_SAML2_AUTHN_CONTEXT_TLS_CLIENT LASSO_SAML2_AUTHN_CONTEXT_UNSPECIFIED LASSO_SAML2_AUTHN_CONTEXT_X509 LASSO_SAML2_AUTHN_CONTEXT_XMLDSIG LASSO_SAML2_CONFIRMATION_METHOD_BEARER LASSO_SAML2_CONFIRMATION_METHOD_HOLDER_OF_KEY LASSO_SAML2_CONSENT_EXPLICIT LASSO_SAML2_CONSENT_IMPLICIT LASSO_SAML2_CONSENT_INAPPLICABLE LASSO_SAML2_CONSENT_OBTAINED LASSO_SAML2_CONSENT_PRIOR LASSO_SAML2_CONSENT_UNAVAILABLE LASSO_SAML2_DEFLATE_ENCODING LASSO_SAML2_FIELD_ARTIFACT LASSO_SAML2_FIELD_ENCODING LASSO_SAML2_FIELD_RELAYSTATE LASSO_SAML2_FIELD_REQUEST LASSO_SAML2_FIELD_RESPONSE LASSO_SAML2_FIELD_SIGALG LASSO_SAML2_FIELD_SIGNATURE LASSO_SAML2_METADATA_BINDING_ARTIFACT LASSO_SAML2_METADATA_BINDING_PAOS LASSO_SAML2_METADATA_BINDING_POST LASSO_SAML2_METADATA_BINDING_REDIRECT LASSO_SAML2_METADATA_BINDING_SOAP LASSO_SAML2_METADATA_BINDING_URI LASSO_SAML2_METADATA_HREF LASSO_SAML2_METADATA_PREFIX LASSO_SAML2_NAME_IDENTIFIER_FORMAT_EMAIL LASSO_SAML2_NAME_IDENTIFIER_FORMAT_ENCRYPTED LASSO_SAML2_NAME_IDENTIFIER_FORMAT_ENTITY LASSO_SAML2_NAME_IDENTIFIER_FORMAT_KERBEROS LASSO_SAML2_NAME_IDENTIFIER_FORMAT_PERSISTENT LASSO_SAML2_NAME_IDENTIFIER_FORMAT_TRANSIENT LASSO_SAML2_NAME_IDENTIFIER_FORMAT_UNSPECIFIED LASSO_SAML2_NAME_IDENTIFIER_FORMAT_WINDOWS LASSO_SAML2_NAME_IDENTIFIER_FORMAT_X509 LASSO_SAML2_PROTOCOL_HREF LASSO_SAML2_PROTOCOL_PREFIX LASSO_SAML2_STATUS_CODE_AUTHN_FAILED LASSO_SAML2_STATUS_CODE_INVALID_ATTR_NAME LASSO_SAML2_STATUS_CODE_INVALID_NAME_ID_POLICY LASSO_SAML2_STATUS_CODE_NO_AUTHN_CONTEXT LASSO_SAML2_STATUS_CODE_NO_AVAILABLE_IDP LASSO_SAML2_STATUS_CODE_NO_PASSIVE LASSO_SAML2_STATUS_CODE_NO_SUPPORTED_IDP LASSO_SAML2_STATUS_CODE_PARTIAL_LOGOUT LASSO_SAML2_STATUS_CODE_PROXY_COUNT_EXCEEDED LASSO_SAML2_STATUS_CODE_REQUESTER LASSO_SAML2_STATUS_CODE_REQUEST_DENIED LASSO_SAML2_STATUS_CODE_REQUEST_UNSUPPORTED LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_DEPRECATED LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_TOO_HIGH LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_TOO_LOW LASSO_SAML2_STATUS_CODE_RESOURCE_NOT_RECOGNIZED LASSO_SAML2_STATUS_CODE_RESPONDER LASSO_SAML2_STATUS_CODE_SUCCESS LASSO_SAML2_STATUS_CODE_TOO_MANY_RESPONSES LASSO_SAML2_STATUS_CODE_UNKNOWN_ATTR_PROFILE LASSO_SAML2_STATUS_CODE_UNKNOWN_PRINCIPAL LASSO_SAML2_STATUS_CODE_UNSUPPORTED_BINDING LASSO_SAML2_STATUS_CODE_VERSION_MISMATCH LASSO_SAML_ASSERTION_HREF LASSO_SAML_ASSERTION_PREFIX LASSO_SAML_AUTHENTICATION_METHODS_PKI LASSO_SAML_AUTHENTICATION_METHOD_HARDWARE_TOKEN LASSO_SAML_AUTHENTICATION_METHOD_KERBEROS LASSO_SAML_AUTHENTICATION_METHOD_LIBERTY LASSO_SAML_AUTHENTICATION_METHOD_PASSWORD LASSO_SAML_AUTHENTICATION_METHOD_PGP LASSO_SAML_AUTHENTICATION_METHOD_SECURE_REMOTE_PASSWORD LASSO_SAML_AUTHENTICATION_METHOD_SMARTCARD_PKI LASSO_SAML_AUTHENTICATION_METHOD_SOFTWARE_PKI LASSO_SAML_AUTHENTICATION_METHOD_UNSPECIFIED LASSO_SAML_AUTHENTICATION_METHOD_XKMS LASSO_SAML_AUTHENTICATION_METHOD_XMLD_SIG LASSO_SAML_CONFIRMATION_METHOD_ARTIFACT LASSO_SAML_CONFIRMATION_METHOD_ARTIFACT01 LASSO_SAML_CONFIRMATION_METHOD_BEARER LASSO_SAML_CONFIRMATION_METHOD_HOLDER_OF_KEY LASSO_SAML_CONFIRMATION_METHOD_SENDER_VOUCHES LASSO_SAML_MAJOR_VERSION_N LASSO_SAML_MINOR_VERSION_N LASSO_SAML_PROTOCOL_HREF LASSO_SAML_PROTOCOL_PREFIX LASSO_SAML_STATUS_CODE_REQUESTER LASSO_SAML_STATUS_CODE_REQUEST_DENIED LASSO_SAML_STATUS_CODE_REQUEST_VERSION_DEPRECATED LASSO_SAML_STATUS_CODE_REQUEST_VERSION_TOO_HIGH LASSO_SAML_STATUS_CODE_REQUEST_VERSION_TOO_LOW LASSO_SAML_STATUS_CODE_RESOURCE_NOT_RECOGNIZED LASSO_SAML_STATUS_CODE_RESPONDER LASSO_SAML_STATUS_CODE_SUCCESS LASSO_SAML_STATUS_CODE_TOO_MANY_RESPONSES LASSO_SAML_STATUS_CODE_VERSION_MISMATCH LASSO_SERVER_ERROR_ADD_PROVIDER_FAILED LASSO_SERVER_ERROR_ADD_PROVIDER_PROTOCOL_MISMATCH LASSO_SERVER_ERROR_INVALID_XML LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND LASSO_SERVER_ERROR_SET_ENCRYPTION_PRIVATE_KEY_FAILED LASSO_SIGNATURE_METHOD_ATTRIBUTE LASSO_SIGNATURE_METHOD_DSA_SHA1 LASSO_SIGNATURE_METHOD_LAST LASSO_SIGNATURE_METHOD_RSA_SHA1 LASSO_SIGNATURE_TYPE_ATTRIBUTE LASSO_SIGNATURE_TYPE_LAST LASSO_SIGNATURE_TYPE_NONE LASSO_SIGNATURE_TYPE_SIMPLE LASSO_SIGNATURE_TYPE_WITHX509 LASSO_SOAP_ENV_ACTOR LASSO_SOAP_ENV_HREF LASSO_SOAP_ENV_PREFIX LASSO_SOAP_ERROR_MISSING_BODY LASSO_SOAP_ERROR_MISSING_ENVELOPE LASSO_SOAP_ERROR_MISSING_HEADER LASSO_SOAP_ERROR_MISSING_SOAP_FAULT_DETAIL LASSO_SOAP_ERROR_REDIRECT_REQUEST_FAULT LASSO_SOAP_FAULT_CODE_CLIENT LASSO_SOAP_FAULT_CODE_MUST_UNDERSTAND LASSO_SOAP_FAULT_CODE_SERVER LASSO_SOAP_FAULT_CODE_VERSION_MISMATCH LASSO_SOAP_FAULT_REDIRECT_REQUEST LASSO_WSF_ENABLED LASSO_WSF_PROFILE_ERROR_INVALID_OR_MISSING_REFERENCE_TO_MESSAGE_ID LASSO_WSF_PROFILE_ERROR_MISSING_ASSERTION_ID LASSO_WSF_PROFILE_ERROR_MISSING_CORRELATION LASSO_WSF_PROFILE_ERROR_MISSING_CREDENTIAL_REF LASSO_WSF_PROFILE_ERROR_MISSING_DESCRIPTION LASSO_WSF_PROFILE_ERROR_MISSING_ENDPOINT LASSO_WSF_PROFILE_ERROR_MISSING_RESOURCE_ID LASSO_WSF_PROFILE_ERROR_MISSING_SECURITY LASSO_WSF_PROFILE_ERROR_MISSING_SENDER_ID LASSO_WSF_PROFILE_ERROR_REDIRECT_REQUEST LASSO_WSF_PROFILE_ERROR_REDIRECT_REQUEST_UNSUPPORTED_BY_REQUESTER LASSO_WSF_PROFILE_ERROR_SECURITY_MECHANISM_CHECK_FAILED LASSO_WSF_PROFILE_ERROR_SERVER_INTERACTION_REQUIRED LASSO_WSF_PROFILE_ERROR_SERVER_INTERACTION_REQUIRED_FOR_DATA LASSO_WSF_PROFILE_ERROR_SOAP_FAULT LASSO_WSF_PROFILE_ERROR_UNKNOWN_STATUS_CODE LASSO_WSF_PROFILE_ERROR_UNSUPPORTED_SECURITY_MECHANISM LASSO_WSSEC_ERROR_BAD_PASSWORD LASSO_WSSEC_ERROR_MISSING_SECURITY_TOKEN LASSO_WSUTIL1_HREF LASSO_WSUTIL1_PREFIX LASSO_XML_ERROR_ATTR_NOT_FOUND LASSO_XML_ERROR_ATTR_VALUE_NOT_FOUND LASSO_XML_ERROR_INVALID_FILE LASSO_XML_ERROR_MISSING_NAMESPACE LASSO_XML_ERROR_NODE_CONTENT_NOT_FOUND LASSO_XML_ERROR_NODE_NOT_FOUND LASSO_XML_ERROR_OBJECT_CONSTRUCTION_FAILED LASSO_XML_ERROR_SCHEMA_INVALID_FRAGMENT LASSO_XSI_HREF LASSO_XSI_PREFIX struct LassoAssertionQuery { LassoAssertionQueryPrivate* private_data } LassoAssertionQueryRequestType LassoCheckVersionMode struct LassoDefederation { } struct LassoDsKeyInfo { LassoDsKeyValue* KeyValue } struct LassoDsKeyValue { LassoDsRsaKeyValue* RSAKeyValue } struct LassoDsRsaKeyValue { char* Modulus, char* Exponent } struct LassoEcp { gchar* assertionConsumerURL, LassoEcpPrivate* private_data } LassoEncryptionMode LassoEncryptionSymKeyType struct LassoFederation { gchar* remote_providerID, LassoNode* local_nameIdentifier, LassoNode* remote_nameIdentifier, LassoFederationPrivate* private_data } LassoHttpMethod struct LassoIdentity { GHashTable* federations, gboolean is_dirty, LassoIdentityPrivate* private_data } struct LassoLecp { LassoLibAuthnRequestEnvelope* authnRequestEnvelope, LassoLibAuthnResponseEnvelope* authnResponseEnvelope, char* assertionConsumerServiceURL } struct LassoLibAssertion { char* InResponseTo } struct LassoLibAuthenticationStatement { LassoLibAuthnContext* AuthnContext, char* ReauthenticateOnOrAfter, char* SessionIndex } struct LassoLibAuthnContext { char* AuthnContextClassRef, char* AuthnContextStatementRef } struct LassoLibAuthnRequest { GList* Extension, char* ProviderID, char* AffiliationID, char* NameIDPolicy, gboolean ForceAuthn, gboolean IsPassive, char* ProtocolProfile, char* AssertionConsumerServiceID, LassoLibRequestAuthnContext* RequestAuthnContext, char* RelayState, LassoLibScoping* Scoping, char* consent } struct LassoLibAuthnRequestEnvelope { GList* Extension, LassoLibAuthnRequest* AuthnRequest, char* ProviderID, char* ProviderName, char* AssertionConsumerServiceURL, LassoLibIDPList* IDPList, gboolean IsPassive } struct LassoLibAuthnResponse { GList* Extension, char* ProviderID, char* RelayState, char* consent } struct LassoLibAuthnResponseEnvelope { GList* Extension, LassoLibAuthnResponse* AuthnResponse, char* AssertionConsumerServiceURL } struct LassoLibFederationTerminationNotification { GList* Extension, char* ProviderID, LassoSamlNameIdentifier* NameIdentifier, char* consent, char* RelayState } struct LassoLibIDPEntries { GList* IDPEntry } struct LassoLibIDPEntry { char* ProviderID, char* ProviderName, char* Loc } struct LassoLibIDPList { LassoLibIDPEntries* IDPEntries, char* GetComplete } struct LassoLibLogoutRequest { GList* Extension, char* ProviderID, LassoSamlNameIdentifier* NameIdentifier, char* SessionIndex, char* RelayState, char* consent, char* NotOnOrAfter } struct LassoLibLogoutResponse { } struct LassoLibNameIdentifierMappingRequest { GList* Extension, char* ProviderID, LassoSamlNameIdentifier* NameIdentifier, char* TargetNamespace, char* consent } struct LassoLibNameIdentifierMappingResponse { GList* Extension, char* ProviderID, LassoSamlpStatus* Status, LassoSamlNameIdentifier* NameIdentifier } struct LassoLibRegisterNameIdentifierRequest { GList* Extension, char* ProviderID, LassoSamlNameIdentifier* IDPProvidedNameIdentifier, LassoSamlNameIdentifier* SPProvidedNameIdentifier, LassoSamlNameIdentifier* OldProvidedNameIdentifier, char* RelayState } struct LassoLibRegisterNameIdentifierResponse { } struct LassoLibRequestAuthnContext { GList* AuthnContextClassRef, GList* AuthnContextStatementRef, char* AuthnContextComparison } struct LassoLibScoping { int ProxyCount, LassoLibIDPList* IDPList } struct LassoLibStatusResponse { GList* Extension, char* ProviderID, LassoSamlpStatus* Status, char* RelayState } struct LassoLibSubject { LassoSamlNameIdentifier* IDPProvidedNameIdentifier } struct LassoLogin { LassoLoginProtocolProfile protocolProfile, gchar* assertionArtifact, LassoSamlAssertion* assertion, gchar* nameIDPolicy, LassoHttpMethod http_method, LassoLoginPrivate* private_data } LassoLoginProtocolProfile struct LassoLogout { LassoNode* initial_request, LassoNode* initial_response, gchar* initial_remote_providerID, gint providerID_index, LassoHttpMethod initial_http_request_method, LassoLogoutPrivate* private_data } LassoMdProtocolType LassoMessageFormat struct LassoMiscTextNode { char* content, char* name, char* ns_href, char* ns_prefix, gboolean text_child } struct LassoNameIdManagement { } struct LassoNameIdentifierMapping { gchar* targetNameIdentifier } struct LassoNameRegistration { LassoSamlNameIdentifier* oldNameIdentifier } struct LassoNode { } struct LassoProfile { LassoServer* server, LassoNode* request, LassoNode* response, LassoNode* nameIdentifier, gchar* remote_providerID, gchar* msg_url, gchar* msg_body, gchar* msg_relayState, LassoIdentity* identity, LassoSession* session, LassoHttpMethod http_request_method, gint signature_status, LassoProfilePrivate* private_data } LassoProfileSignatureHint LassoProfileSignatureVerifyHint LassoProtocolConformance struct LassoProvider { gchar* ProviderID, LassoProviderRole role, char* metadata_filename, gchar* public_key, gchar* ca_cert_chain, LassoProviderPrivate* private_data } LassoProviderRole LassoRequestType struct LassoSaml2Action { char* content, char* Namespace } struct LassoSaml2Advice { GList* AssertionIDRef, GList* AssertionURIRef, GList* Assertion, GList* EncryptedAssertion } struct LassoSaml2Assertion { LassoSaml2NameID* Issuer, LassoSaml2Subject* Subject, LassoSaml2Conditions* Conditions, LassoSaml2Advice* Advice, GList* Statement, GList* AuthnStatement, GList* AuthzDecisionStatement, GList* AttributeStatement, char* Version, char* ID, char* IssueInstant, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file, gboolean encryption_activated, char* encryption_public_key_str, LassoEncryptionSymKeyType encryption_sym_key_type } LassoSaml2AssertionValidationState struct LassoSaml2Attribute { GList* AttributeValue, char* Name, char* NameFormat, char* FriendlyName } struct LassoSaml2AttributeStatement { GList* Attribute, GList* EncryptedAttribute } struct LassoSaml2AttributeValue { GList* any } struct LassoSaml2AudienceRestriction { char* Audience } struct LassoSaml2AuthnContext { char* AuthnContextClassRef, char* AuthnContextDeclRef, char* AuthenticatingAuthority } struct LassoSaml2AuthnStatement { LassoSaml2SubjectLocality* SubjectLocality, LassoSaml2AuthnContext* AuthnContext, char* AuthnInstant, char* SessionIndex, char* SessionNotOnOrAfter } struct LassoSaml2AuthzDecisionStatement { LassoSaml2Action* Action, LassoSaml2Evidence* Evidence, char* Resource, char* Decision } struct LassoSaml2BaseIDAbstract { char* NameQualifier, char* SPNameQualifier } struct LassoSaml2ConditionAbstract { } struct LassoSaml2Conditions { GList* Condition, GList* AudienceRestriction, GList* OneTimeUse, GList* ProxyRestriction, char* NotBefore, char* NotOnOrAfter } struct LassoSaml2EncryptedElement { xmlNode* EncryptedData, GList* EncryptedKey, LassoNode* original_data } struct LassoSaml2Evidence { GList* AssertionIDRef, GList* AssertionURIRef, GList* Assertion, GList* EncryptedAssertion } struct LassoSaml2KeyInfoConfirmationData { } struct LassoSaml2NameID { char* content, char* Format, char* SPProvidedID, char* NameQualifier, char* SPNameQualifier } struct LassoSaml2OneTimeUse { } struct LassoSaml2ProxyRestriction { char* Audience, char* Count } struct LassoSaml2StatementAbstract { } struct LassoSaml2Subject { LassoSaml2BaseIDAbstract* BaseID, LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, LassoSaml2SubjectConfirmation* SubjectConfirmation } struct LassoSaml2SubjectConfirmation { LassoSaml2BaseIDAbstract* BaseID, LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, LassoSaml2SubjectConfirmationData* SubjectConfirmationData, char* Method } struct LassoSaml2SubjectConfirmationData { char* NotBefore, char* NotOnOrAfter, char* Recipient, char* InResponseTo, char* Address } struct LassoSaml2SubjectLocality { char* Address, char* DNSName } struct LassoSamlAdvice { GList* AssertionIDReference, LassoNode* Assertion } struct LassoSamlAssertion { LassoSamlConditions* Conditions, LassoSamlAdvice* Advice, LassoSamlSubjectStatement* SubjectStatement, LassoSamlAuthenticationStatement* AuthenticationStatement, LassoSamlAttributeStatement* AttributeStatement, int MajorVersion, int MinorVersion, char* AssertionID, char* Issuer, char* IssueInstant, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlAttribute { gchar* attributeName, gchar* attributeNameSpace, GList* AttributeValue } struct LassoSamlAttributeDesignator { char* AttributeName, char* AttributeNamespace } struct LassoSamlAttributeStatement { GList* Attribute } struct LassoSamlAttributeValue { GList* any } struct LassoSamlAudienceRestrictionCondition { GList* Audience } struct LassoSamlAuthenticationStatement { LassoSamlSubjectLocality* SubjectLocality, GList* AuthorityBinding, char* AuthenticationMethod, char* AuthenticationInstant } struct LassoSamlAuthorityBinding { char* AuthorityKind, char* Location, char* Binding } struct LassoSamlConditionAbstract { } struct LassoSamlConditions { GList* Condition, GList* AudienceRestrictionCondition, char* NotBefore, char* NotOnOrAfter } struct LassoSamlNameIdentifier { char* NameQualifier, char* Format, char* content } struct LassoSamlStatementAbstract { } struct LassoSamlSubject { LassoSamlNameIdentifier* NameIdentifier, LassoSamlSubjectConfirmation* SubjectConfirmation, LassoSaml2EncryptedElement* EncryptedNameIdentifier } struct LassoSamlSubjectConfirmation { GList* ConfirmationMethod, char* SubjectConfirmationData, LassoDsKeyInfo* KeyInfo } struct LassoSamlSubjectLocality { char* IPAddress, char* DNSAddress } struct LassoSamlSubjectStatement { } struct LassoSamlSubjectStatementAbstract { LassoSamlSubject* Subject } struct LassoSamlp2ArtifactResolve { char* Artifact } struct LassoSamlp2ArtifactResponse { LassoNode* any } struct LassoSamlp2AssertionIDRequest { char* AssertionIDRef } struct LassoSamlp2AttributeQuery { GList* Attribute } struct LassoSamlp2AuthnQuery { LassoSamlp2RequestedAuthnContext* RequestedAuthnContext, char* SessionIndex } struct LassoSamlp2AuthnRequest { LassoSaml2Subject* Subject, LassoSamlp2NameIDPolicy* NameIDPolicy, LassoSaml2Conditions* Conditions, LassoSamlp2RequestedAuthnContext* RequestedAuthnContext, LassoSamlp2Scoping* Scoping, gboolean ForceAuthn, gboolean IsPassive, char* ProtocolBinding, int AssertionConsumerServiceIndex, char* AssertionConsumerServiceURL, int AttributeConsumingServiceIndex, char* ProviderName, G_GNUC_DEPRECATED char } struct LassoSamlp2AuthzDecisionQuery { LassoSaml2Action* Action, LassoSaml2Evidence* Evidence, char* Resource } struct LassoSamlp2Extensions { } struct LassoSamlp2IDPEntry { char* ProviderID, char* Name, char* Loc } struct LassoSamlp2IDPList { LassoSamlp2IDPEntry* IDPEntry, char* GetComplete } struct LassoSamlp2LogoutRequest { LassoSaml2BaseIDAbstract* BaseID, LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, char* SessionIndex, char* Reason, char* NotOnOrAfter, G_GNUC_DEPRECATED char } struct LassoSamlp2LogoutResponse { G_GNUC_DEPRECATED char } struct LassoSamlp2ManageNameIDRequest { LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, char* NewID, LassoSaml2EncryptedElement* NewEncryptedID, LassoSamlp2Terminate* Terminate } struct LassoSamlp2ManageNameIDResponse { } struct LassoSamlp2NameIDMappingRequest { LassoSaml2BaseIDAbstract* BaseID, LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, LassoSamlp2NameIDPolicy* NameIDPolicy } struct LassoSamlp2NameIDMappingResponse { LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID } struct LassoSamlp2NameIDPolicy { char* Format, char* SPNameQualifier, gboolean AllowCreate } struct LassoSamlp2RequestAbstract { LassoSaml2NameID* Issuer, LassoSamlp2Extensions* Extensions, char* ID, char* Version, char* IssueInstant, char* Destination, char* Consent, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlp2RequestedAuthnContext { GList* AuthnContextClassRef, GList* AuthnContextDeclRef, char* Comparison } struct LassoSamlp2Response { GList* Assertion, GList* EncryptedAssertion } struct LassoSamlp2Scoping { LassoSamlp2IDPList* IDPList, char* RequesterID, char* ProxyCount } struct LassoSamlp2Status { LassoSamlp2StatusCode* StatusCode, char* StatusMessage, LassoSamlp2StatusDetail* StatusDetail } struct LassoSamlp2StatusCode { LassoSamlp2StatusCode* StatusCode, char* Value } struct LassoSamlp2StatusDetail { } struct LassoSamlp2StatusResponse { LassoSaml2NameID* Issuer, LassoSamlp2Extensions* Extensions, LassoSamlp2Status* Status, char* ID, char* InResponseTo, char* Version, char* IssueInstant, char* Destination, char* Consent, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlp2SubjectQueryAbstract { LassoSaml2Subject* Subject } struct LassoSamlp2Terminate { } struct LassoSamlpRequest { char* AssertionArtifact } struct LassoSamlpRequestAbstract { GList* RespondWith, char* RequestID, int MajorVersion, int MinorVersion, char* IssueInstant, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlpResponse { LassoSamlpStatus* Status, GList* Assertion } struct LassoSamlpResponseAbstract { char* ResponseID, char* InResponseTo, int MajorVersion, int MinorVersion, char* IssueInstant, char* Recipient, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlpStatus { LassoSamlpStatusCode* StatusCode, char* StatusMessage } struct LassoSamlpStatusCode { LassoSamlpStatusCode* StatusCode, char* Value } struct LassoServer { GHashTable* providers, GHashTable* services, gchar* private_key, gchar* private_key_password, gchar* certificate, LassoSignatureMethod signature_method, LassoServerPrivate* private_data } struct LassoSession { GHashTable* assertions, gboolean is_dirty, LassoSessionPrivate* private_data } LassoSignatureMethod LassoSignatureType struct LassoSoapBody { GList* any, gchar* Id } struct LassoSoapDetail { GList* any } struct LassoSoapEnvelope { LassoSoapHeader* Header, LassoSoapBody* Body } struct LassoSoapFault { gchar* faultcode, gchar* faultstring, GList* faultactor, LassoSoapDetail* Detail } struct LassoSoapHeader { GList* Other } lasso_error_t lasso_assertion_query_add_attribute_request ( LassoAssertionQuery* assertion_query, char* format, char* name ) lasso_error_t lasso_assertion_query_build_request_msg ( LassoAssertionQuery* assertion_query ) lasso_error_t lasso_assertion_query_build_response_msg ( LassoAssertionQuery* assertion_query ) None lasso_assertion_query_destroy ( LassoAssertionQuery* assertion_query ) LassoAssertionQueryRequestType lasso_assertion_query_get_request_type ( LassoAssertionQuery* assertion_query ) GType lasso_assertion_query_get_type ( ) lasso_error_t lasso_assertion_query_init_request ( LassoAssertionQuery* assertion_query, char* remote_provider_id, LassoHttpMethod http_method, LassoAssertionQueryRequestType query_request_type ) LassoAssertionQuery* lasso_assertion_query_new ( LassoServer* server ) lasso_error_t lasso_assertion_query_process_request_msg ( LassoAssertionQuery* assertion_query, gchar* request_msg ) lasso_error_t lasso_assertion_query_process_response_msg ( LassoAssertionQuery* assertion_query, gchar* response_msg ) lasso_error_t lasso_assertion_query_validate_request ( LassoAssertionQuery* assertion_query ) char* lasso_build_unique_id ( unsigned int size ) int lasso_check_version ( int major, int minor, int subminor, LassoCheckVersionMode mode ) lasso_error_t lasso_defederation_build_notification_msg ( LassoDefederation* defederation ) None lasso_defederation_destroy ( LassoDefederation* defederation ) GType lasso_defederation_get_type ( ) lasso_error_t lasso_defederation_init_notification ( LassoDefederation* defederation, gchar* remote_providerID, LassoHttpMethod http_method ) LassoDefederation* lasso_defederation_new ( LassoServer* server ) lasso_error_t lasso_defederation_process_notification_msg ( LassoDefederation* defederation, gchar* notification_msg ) lasso_error_t lasso_defederation_validate_notification ( LassoDefederation* defederation ) GType lasso_ds_key_info_get_type ( ) LassoDsKeyInfo* lasso_ds_key_info_new ( ) GType lasso_ds_key_value_get_type ( ) LassoDsKeyValue* lasso_ds_key_value_new ( ) GType lasso_ds_rsa_key_value_get_type ( ) LassoDsRsaKeyValue* lasso_ds_rsa_key_value_new ( ) None lasso_ecp_destroy ( LassoEcp* ecp ) GType lasso_ecp_get_type ( ) LassoEcp* lasso_ecp_new ( LassoServer* server ) lasso_error_t lasso_ecp_process_authn_request_msg ( LassoEcp* ecp, const char* authn_request_msg ) lasso_error_t lasso_ecp_process_response_msg ( LassoEcp* ecp, const char* response_msg ) None lasso_federation_build_local_name_identifier ( LassoFederation* federation, const gchar* nameQualifier, const gchar* format, const gchar* content ) None lasso_federation_destroy ( LassoFederation* federation ) GType lasso_federation_get_type ( ) LassoFederation* lasso_federation_new ( const gchar* remote_providerID ) gboolean lasso_federation_verify_name_identifier ( LassoFederation* federation, LassoNode* name_identifier ) char* lasso_get_prefix_for_dst_service_href ( const char* href ) gchar* lasso_get_prefix_for_idwsf2_dst_service_href ( const gchar* href ) None lasso_identity_destroy ( LassoIdentity* identity ) gchar* lasso_identity_dump ( LassoIdentity* identity ) LassoFederation* lasso_identity_get_federation ( LassoIdentity* identity, const char* providerID ) GType lasso_identity_get_type ( ) LassoIdentity* lasso_identity_new ( ) LassoIdentity* lasso_identity_new_from_dump ( const gchar* dump ) lasso_error_t lasso_init ( ) lasso_error_t lasso_lecp_build_authn_request_envelope_msg ( LassoLecp* lecp ) lasso_error_t lasso_lecp_build_authn_request_msg ( LassoLecp* lecp ) lasso_error_t lasso_lecp_build_authn_response_envelope_msg ( LassoLecp* lecp ) lasso_error_t lasso_lecp_build_authn_response_msg ( LassoLecp* lecp ) None lasso_lecp_destroy ( LassoLecp* lecp ) GType lasso_lecp_get_type ( ) lasso_error_t lasso_lecp_init_authn_request ( LassoLecp* lecp, const char* remote_providerID ) LassoLecp* lasso_lecp_new ( LassoServer* server ) lasso_error_t lasso_lecp_process_authn_request_envelope_msg ( LassoLecp* lecp, const char* request_msg ) lasso_error_t lasso_lecp_process_authn_request_msg ( LassoLecp* lecp, const char* authn_request_msg ) lasso_error_t lasso_lecp_process_authn_response_envelope_msg ( LassoLecp* lecp, const char* response_msg ) GType lasso_lib_assertion_get_type ( ) LassoLibAssertion* lasso_lib_assertion_new ( ) LassoLibAssertion* lasso_lib_assertion_new_full ( const char* issuer, const char* requestID, const char* audience, const char* notBefore, const char* notOnOrAfter ) GType lasso_lib_authentication_statement_get_type ( ) LassoLibAuthenticationStatement* lasso_lib_authentication_statement_new ( ) LassoLibAuthenticationStatement* lasso_lib_authentication_statement_new_full ( const char* authenticationMethod, const char* authenticationInstant, const char* reauthenticateOnOrAfter, LassoSamlNameIdentifier* sp_identifier, LassoSamlNameIdentifier* idp_identifier ) GType lasso_lib_authn_context_get_type ( ) LassoNode* lasso_lib_authn_context_new ( ) GType lasso_lib_authn_request_envelope_get_type ( ) LassoLibAuthnRequestEnvelope* lasso_lib_authn_request_envelope_new ( ) LassoLibAuthnRequestEnvelope* lasso_lib_authn_request_envelope_new_full ( LassoLibAuthnRequest* authnRequest, char* providerID, char* assertionConsumerServiceURL ) GType lasso_lib_authn_request_get_type ( ) LassoLibAuthnRequest* lasso_lib_authn_request_new ( ) GType lasso_lib_authn_response_envelope_get_type ( ) LassoLibAuthnResponseEnvelope* lasso_lib_authn_response_envelope_new ( LassoLibAuthnResponse* response, char* assertionConsumerServiceURL ) GType lasso_lib_authn_response_get_type ( ) LassoNode* lasso_lib_authn_response_new ( char* providerID, LassoLibAuthnRequest* request ) GType lasso_lib_federation_termination_notification_get_type ( ) LassoNode* lasso_lib_federation_termination_notification_new ( ) LassoNode* lasso_lib_federation_termination_notification_new_full ( char* providerID, LassoSamlNameIdentifier* nameIdentifier, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_idp_entries_get_type ( ) LassoNode* lasso_lib_idp_entries_new ( ) GType lasso_lib_idp_entry_get_type ( ) LassoNode* lasso_lib_idp_entry_new ( ) GType lasso_lib_idp_list_get_type ( ) LassoNode* lasso_lib_idp_list_new ( ) GType lasso_lib_logout_request_get_type ( ) LassoNode* lasso_lib_logout_request_new ( ) LassoNode* lasso_lib_logout_request_new_full ( char* providerID, LassoSamlNameIdentifier* nameIdentifier, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_logout_response_get_type ( ) LassoNode* lasso_lib_logout_response_new ( ) LassoNode* lasso_lib_logout_response_new_full ( char* providerID, const char* statusCodeValue, LassoLibLogoutRequest* request, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_name_identifier_mapping_request_get_type ( ) LassoNode* lasso_lib_name_identifier_mapping_request_new ( ) LassoNode* lasso_lib_name_identifier_mapping_request_new_full ( char* providerID, LassoSamlNameIdentifier* nameIdentifier, const char* targetNamespace, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_name_identifier_mapping_response_get_type ( ) LassoNode* lasso_lib_name_identifier_mapping_response_new ( ) LassoNode* lasso_lib_name_identifier_mapping_response_new_full ( char* provideRID, const char* statusCodeValue, LassoLibNameIdentifierMappingRequest* request, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_register_name_identifier_request_get_type ( ) LassoNode* lasso_lib_register_name_identifier_request_new ( ) LassoNode* lasso_lib_register_name_identifier_request_new_full ( const char* providerID, LassoSamlNameIdentifier* idpNameIdentifier, LassoSamlNameIdentifier* spNameIdentifier, LassoSamlNameIdentifier* oldNameIdentifier, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_register_name_identifier_response_get_type ( ) LassoNode* lasso_lib_register_name_identifier_response_new ( ) LassoNode* lasso_lib_register_name_identifier_response_new_full ( const char* providerID, const char* statusCodeValue, LassoLibRegisterNameIdentifierRequest* request, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_request_authn_context_get_type ( ) LassoLibRequestAuthnContext* lasso_lib_request_authn_context_new ( ) GType lasso_lib_scoping_get_type ( ) LassoLibScoping* lasso_lib_scoping_new ( ) GType lasso_lib_status_response_get_type ( ) LassoNode* lasso_lib_status_response_new ( ) GType lasso_lib_subject_get_type ( ) LassoLibSubject* lasso_lib_subject_new ( ) lasso_error_t lasso_login_accept_sso ( LassoLogin* login ) lasso_error_t lasso_login_build_artifact_msg ( LassoLogin* login, LassoHttpMethod http_method ) lasso_error_t lasso_login_build_assertion ( LassoLogin* login, const char* authenticationMethod, const char* authenticationInstant, const char* reauthenticateOnOrAfter, const char* notBefore, const char* notOnOrAfter ) lasso_error_t lasso_login_build_authn_request_msg ( LassoLogin* login ) lasso_error_t lasso_login_build_authn_response_msg ( LassoLogin* login ) lasso_error_t lasso_login_build_request_msg ( LassoLogin* login ) lasso_error_t lasso_login_build_response_msg ( LassoLogin* login, gchar* remote_providerID ) None lasso_login_destroy ( LassoLogin* login ) gchar* lasso_login_dump ( LassoLogin* login ) LassoNode* lasso_login_get_assertion ( LassoLogin* login ) GType lasso_login_get_type ( ) lasso_error_t lasso_login_init_authn_request ( LassoLogin* login, const gchar* remote_providerID, LassoHttpMethod http_method ) lasso_error_t lasso_login_init_idp_initiated_authn_request ( LassoLogin* login, const gchar* remote_providerID ) lasso_error_t lasso_login_init_request ( LassoLogin* login, gchar* response_msg, LassoHttpMethod response_http_method ) gboolean lasso_login_must_ask_for_consent ( LassoLogin* login ) gboolean lasso_login_must_authenticate ( LassoLogin* login ) LassoLogin* lasso_login_new ( LassoServer* server ) LassoLogin* lasso_login_new_from_dump ( LassoServer* server, const gchar* dump ) lasso_error_t lasso_login_process_authn_request_msg ( LassoLogin* login, const char* authn_request_msg ) lasso_error_t lasso_login_process_authn_response_msg ( LassoLogin* login, gchar* authn_response_msg ) lasso_error_t lasso_login_process_paos_response_msg ( LassoLogin* login, gchar* msg ) lasso_error_t lasso_login_process_request_msg ( LassoLogin* login, gchar* request_msg ) lasso_error_t lasso_login_process_response_msg ( LassoLogin* login, gchar* response_msg ) lasso_error_t lasso_login_validate_request_msg ( LassoLogin* login, gboolean authentication_result, gboolean is_consent_obtained ) lasso_error_t lasso_logout_build_request_msg ( LassoLogout* logout ) lasso_error_t lasso_logout_build_response_msg ( LassoLogout* logout ) None lasso_logout_destroy ( LassoLogout* logout ) gchar* lasso_logout_dump ( LassoLogout* logout ) gchar* lasso_logout_get_next_providerID ( LassoLogout* logout ) GType lasso_logout_get_type ( ) lasso_error_t lasso_logout_init_request ( LassoLogout* logout, gchar* remote_providerID, LassoHttpMethod request_method ) LassoLogout* lasso_logout_new ( LassoServer* server ) LassoLogout* lasso_logout_new_from_dump ( LassoServer* server, const gchar* dump ) lasso_error_t lasso_logout_process_request_msg ( LassoLogout* logout, gchar* request_msg ) lasso_error_t lasso_logout_process_response_msg ( LassoLogout* logout, gchar* response_msg ) lasso_error_t lasso_logout_reset_providerID_index ( LassoLogout* logout ) lasso_error_t lasso_logout_validate_request ( LassoLogout* logout ) GType lasso_misc_text_node_get_type ( ) xmlNode* lasso_misc_text_node_get_xml_content ( LassoMiscTextNode* misc_text_node ) LassoNode* lasso_misc_text_node_new ( ) LassoMiscTextNode* lasso_misc_text_node_new_with_string ( const char* content ) LassoMiscTextNode* lasso_misc_text_node_new_with_xml_node ( xmlNode* xml_node ) None lasso_misc_text_node_set_xml_content ( LassoMiscTextNode* misc_text_node, xmlNode* node ) lasso_error_t lasso_name_id_management_build_request_msg ( LassoNameIdManagement* name_id_management ) lasso_error_t lasso_name_id_management_build_response_msg ( LassoNameIdManagement* name_id_management ) None lasso_name_id_management_destroy ( LassoNameIdManagement* name_id_management ) char* lasso_name_id_management_dump ( LassoNameIdManagement* name_id_management ) GType lasso_name_id_management_get_type ( ) lasso_error_t lasso_name_id_management_init_request ( LassoNameIdManagement* name_id_management, char* remote_provider_id, char* new_name_id, LassoHttpMethod http_method ) LassoNameIdManagement* lasso_name_id_management_new ( LassoServer* server ) LassoNameIdManagement* lasso_name_id_management_new_from_dump ( LassoServer* server, const char* dump ) lasso_error_t lasso_name_id_management_process_request_msg ( LassoNameIdManagement* name_id_management, gchar* request_msg ) lasso_error_t lasso_name_id_management_process_response_msg ( LassoNameIdManagement* name_id_management, gchar* response_msg ) lasso_error_t lasso_name_id_management_validate_request ( LassoNameIdManagement* name_id_management ) lasso_error_t lasso_name_identifier_mapping_build_request_msg ( LassoNameIdentifierMapping* mapping ) lasso_error_t lasso_name_identifier_mapping_build_response_msg ( LassoNameIdentifierMapping* mapping ) None lasso_name_identifier_mapping_destroy ( LassoNameIdentifierMapping* mapping ) GType lasso_name_identifier_mapping_get_type ( ) lasso_error_t lasso_name_identifier_mapping_init_request ( LassoNameIdentifierMapping* mapping, gchar* targetNamespace, gchar* remote_providerID ) LassoNameIdentifierMapping* lasso_name_identifier_mapping_new ( LassoServer* server ) lasso_error_t lasso_name_identifier_mapping_process_request_msg ( LassoNameIdentifierMapping* mapping, gchar* request_msg ) lasso_error_t lasso_name_identifier_mapping_process_response_msg ( LassoNameIdentifierMapping* mapping, gchar* response_msg ) lasso_error_t lasso_name_identifier_mapping_validate_request ( LassoNameIdentifierMapping* mapping ) lasso_error_t lasso_name_registration_build_request_msg ( LassoNameRegistration* name_registration ) lasso_error_t lasso_name_registration_build_response_msg ( LassoNameRegistration* name_registration ) None lasso_name_registration_destroy ( LassoNameRegistration* name_registration ) gchar* lasso_name_registration_dump ( LassoNameRegistration* name_registration ) GType lasso_name_registration_get_type ( ) lasso_error_t lasso_name_registration_init_request ( LassoNameRegistration* name_registration, char* remote_providerID, LassoHttpMethod http_method ) LassoNameRegistration* lasso_name_registration_new ( LassoServer* server ) LassoNameRegistration* lasso_name_registration_new_from_dump ( LassoServer* server, const char* dump ) lasso_error_t lasso_name_registration_process_request_msg ( LassoNameRegistration* name_registration, gchar* request_msg ) lasso_error_t lasso_name_registration_process_response_msg ( LassoNameRegistration* name_registration, gchar* response_msg ) lasso_error_t lasso_name_registration_validate_request ( LassoNameRegistration* name_registration ) None lasso_node_cleanup_original_xmlnodes ( LassoNode* node ) char* lasso_node_debug ( LassoNode* node, int level ) None lasso_node_destroy ( LassoNode* node ) char* lasso_node_dump ( LassoNode* node ) char* lasso_node_export_to_base64 ( LassoNode* node ) char* lasso_node_export_to_ecp_soap_response ( LassoNode* node, const char* assertionConsumerURL ) char* lasso_node_export_to_paos_request ( LassoNode* node, const char* issuer, const char* responseConsumerURL, const char* relay_state ) char* lasso_node_export_to_query ( LassoNode* node, LassoSignatureMethod sign_method, const char* private_key_file ) char* lasso_node_export_to_query_with_password ( LassoNode* node, LassoSignatureMethod sign_method, const char* private_key_file, const char* private_key_file_password ) char* lasso_node_export_to_soap ( LassoNode* node ) gchar* lasso_node_export_to_xml ( LassoNode* node ) const char* lasso_node_get_name ( LassoNode* node ) const char* lasso_node_get_namespace ( LassoNode* node ) xmlNode* lasso_node_get_original_xmlnode ( LassoNode* node ) GType lasso_node_get_type ( ) xmlNode* lasso_node_get_xmlNode ( LassoNode* node, gboolean lasso_dump ) LassoMessageFormat lasso_node_init_from_message ( LassoNode* node, const char* message ) gboolean lasso_node_init_from_query ( LassoNode* node, const char* query ) lasso_error_t lasso_node_init_from_xml ( LassoNode* node, xmlNode* xmlnode ) LassoNode* lasso_node_new ( ) LassoNode* lasso_node_new_from_dump ( const char* dump ) LassoNode* lasso_node_new_from_soap ( const char* soap ) LassoNode* lasso_node_new_from_xmlNode ( xmlNode* node ) None lasso_node_set_custom_namespace ( LassoNode* node, const char* prefix, const char* href ) None lasso_node_set_custom_nodename ( LassoNode* node, const char* nodename ) None lasso_node_set_original_xmlnode ( LassoNode* node, xmlNode* xmlnode ) char* lasso_profile_get_artifact ( LassoProfile* profile ) char* lasso_profile_get_artifact_message ( LassoProfile* profile ) LassoIdentity* lasso_profile_get_identity ( LassoProfile* profile ) LassoNode* lasso_profile_get_nameIdentifier ( LassoProfile* profile ) LassoRequestType lasso_profile_get_request_type_from_soap_msg ( const gchar* soap ) LassoSession* lasso_profile_get_session ( LassoProfile* profile ) LassoProfileSignatureHint lasso_profile_get_signature_hint ( LassoProfile* profile ) lasso_error_t lasso_profile_get_signature_status ( LassoProfile* profile ) LassoProfileSignatureVerifyHint lasso_profile_get_signature_verify_hint ( LassoProfile* profile ) GType lasso_profile_get_type ( ) gboolean lasso_profile_is_identity_dirty ( LassoProfile* profile ) gboolean lasso_profile_is_liberty_query ( const gchar* query ) gboolean lasso_profile_is_saml_query ( const gchar* query ) gboolean lasso_profile_is_session_dirty ( LassoProfile* profile ) None lasso_profile_set_artifact_message ( LassoProfile* profile, const char* message ) lasso_error_t lasso_profile_set_identity_from_dump ( LassoProfile* profile, const gchar* dump ) lasso_error_t lasso_profile_set_session_from_dump ( LassoProfile* profile, const gchar* dump ) None lasso_profile_set_signature_hint ( LassoProfile* profile, LassoProfileSignatureHint signature_hint ) None lasso_profile_set_signature_verify_hint ( LassoProfile* profile, LassoProfileSignatureVerifyHint signature_verify_hint ) lasso_error_t lasso_profile_set_soap_fault_response ( LassoProfile* profile, const char* faultcode, const char* faultstring, GList* details ) LassoProviderRole lasso_profile_sso_role_with ( LassoProfile* profile, const char* remote_provider_id ) gboolean lasso_provider_accept_http_method ( LassoProvider* provider, LassoProvider* remote_provider, LassoMdProtocolType protocol_type, LassoHttpMethod http_method, gboolean initiate_profile ) gchar* lasso_provider_get_assertion_consumer_service_url ( LassoProvider* provider, const char* service_id ) gchar* lasso_provider_get_base64_succinct_id ( const LassoProvider* provider ) char* lasso_provider_get_cache_duration ( LassoProvider* provider ) gchar* lasso_provider_get_default_name_id_format ( LassoProvider* provider ) LassoEncryptionMode lasso_provider_get_encryption_mode ( LassoProvider* provider ) LassoHttpMethod lasso_provider_get_first_http_method ( LassoProvider* provider, LassoProvider* remote_provider, LassoMdProtocolType protocol_type ) GList* lasso_provider_get_idp_supported_attributes ( LassoProvider* provider ) GList* lasso_provider_get_metadata_keys_for_role ( LassoProvider* provider, LassoProviderRole role ) GList* lasso_provider_get_metadata_list ( LassoProvider* provider, const char* name ) GList* lasso_provider_get_metadata_list_for_role ( const LassoProvider* provider, LassoProviderRole role, const char* name ) gchar* lasso_provider_get_metadata_one ( LassoProvider* provider, const char* name ) char* lasso_provider_get_metadata_one_for_role ( LassoProvider* provider, LassoProviderRole role, const char* name ) xmlNode* lasso_provider_get_organization ( const LassoProvider* provider ) LassoProtocolConformance lasso_provider_get_protocol_conformance ( const LassoProvider* provider ) LassoProviderRole lasso_provider_get_roles ( LassoProvider* provider ) const char* lasso_provider_get_sp_name_qualifier ( LassoProvider* provider ) GType lasso_provider_get_type ( ) char* lasso_provider_get_valid_until ( LassoProvider* provider ) gboolean lasso_provider_has_protocol_profile ( LassoProvider* provider, LassoMdProtocolType protocol_type, const char* protocol_profile ) gboolean lasso_provider_match_conformance ( LassoProvider* provider, LassoProvider* another_provider ) LassoProvider* lasso_provider_new ( LassoProviderRole role, const char* metadata, const char* public_key, const char* ca_cert_chain ) LassoProvider* lasso_provider_new_from_buffer ( LassoProviderRole role, const char* metadata, const char* public_key, const char* ca_cert_chain ) LassoProvider* lasso_provider_new_from_dump ( const gchar* dump ) LassoSaml2EncryptedElement* lasso_provider_saml2_node_encrypt ( const LassoProvider* provider, LassoNode* lasso_node ) None lasso_provider_set_encryption_mode ( LassoProvider* provider, LassoEncryptionMode encryption_mode ) None lasso_provider_set_encryption_sym_key_type ( LassoProvider* provider, LassoEncryptionSymKeyType encryption_sym_key_type ) lasso_error_t lasso_provider_verify_single_node_signature ( LassoProvider* provider, LassoNode* node, const char* id_attr_name ) None lasso_register_dst_service ( const char* prefix, const char* href ) None lasso_register_idwsf2_dst_service ( const gchar* prefix, const gchar* href ) GType lasso_saml2_action_get_type ( ) LassoNode* lasso_saml2_action_new ( ) LassoNode* lasso_saml2_action_new_with_string ( char* content ) GType lasso_saml2_advice_get_type ( ) LassoNode* lasso_saml2_advice_new ( ) lasso_error_t lasso_saml2_assertion_add_attribute_with_node ( LassoSaml2Assertion* assertion, const char* name, const char* nameformat, LassoNode* content ) None lasso_saml2_assertion_add_audience_restriction ( LassoSaml2Assertion* saml2_assertion, const char* providerID ) None lasso_saml2_assertion_add_proxy_limit ( LassoSaml2Assertion* saml2_assertion, int proxy_count, GList* proxy_audiences ) LassoSaml2AssertionValidationState lasso_saml2_assertion_allows_proxying ( LassoSaml2Assertion* saml2_assertion ) LassoSaml2AssertionValidationState lasso_saml2_assertion_allows_proxying_to ( LassoSaml2Assertion* saml2_assertion, const char* audience ) lasso_error_t lasso_saml2_assertion_decrypt_subject ( LassoSaml2Assertion* assertion, LassoServer* server ) const char* lasso_saml2_assertion_get_in_response_to ( LassoSaml2Assertion* assertion ) LassoProvider* lasso_saml2_assertion_get_issuer_provider ( const LassoSaml2Assertion* saml2_assertion, const LassoServer* server ) LassoSaml2SubjectConfirmationData* lasso_saml2_assertion_get_subject_confirmation_data ( LassoSaml2Assertion* saml2_assertion, gboolean create ) GType lasso_saml2_assertion_get_type ( ) gboolean lasso_saml2_assertion_has_audience_restriction ( LassoSaml2Assertion* saml2_assertion ) gboolean lasso_saml2_assertion_has_one_time_use ( LassoSaml2Assertion* saml2_assertion ) gboolean lasso_saml2_assertion_is_audience_restricted ( LassoSaml2Assertion* saml2_assertion, char* providerID ) LassoNode* lasso_saml2_assertion_new ( ) None lasso_saml2_assertion_set_basic_conditions ( LassoSaml2Assertion* saml2_assertion, time_t tolerance, time_t length, gboolean one_time_use ) None lasso_saml2_assertion_set_one_time_use ( LassoSaml2Assertion* saml2_assertion, gboolean one_time_use ) None lasso_saml2_assertion_set_subject_confirmation_data ( LassoSaml2Assertion* saml2_assertion, time_t tolerance, time_t length, const char* Recipient, const char* InResponseTo, const char* Address ) None lasso_saml2_assertion_set_subject_confirmation_name_id ( LassoSaml2Assertion* saml2_assertion, LassoNode* node ) None lasso_saml2_assertion_set_subject_name_id ( LassoSaml2Assertion* saml2_assertion, LassoNode* node ) LassoSaml2AssertionValidationState lasso_saml2_assertion_validate_audience ( LassoSaml2Assertion* saml2_assertion, const gchar* audience ) LassoSaml2AssertionValidationState lasso_saml2_assertion_validate_conditions ( LassoSaml2Assertion* saml2_assertion, const char* relaying_party_providerID ) LassoSaml2AssertionValidationState lasso_saml2_assertion_validate_time_checks ( LassoSaml2Assertion* saml2_assertion, unsigned int tolerance, time_t now ) GType lasso_saml2_attribute_get_type ( ) LassoNode* lasso_saml2_attribute_new ( ) GType lasso_saml2_attribute_statement_get_type ( ) LassoNode* lasso_saml2_attribute_statement_new ( ) GType lasso_saml2_attribute_value_get_type ( ) LassoSaml2AttributeValue* lasso_saml2_attribute_value_new ( ) GType lasso_saml2_audience_restriction_get_type ( ) LassoNode* lasso_saml2_audience_restriction_new ( ) GType lasso_saml2_authn_context_get_type ( ) LassoNode* lasso_saml2_authn_context_new ( ) GType lasso_saml2_authn_statement_get_type ( ) LassoNode* lasso_saml2_authn_statement_new ( ) GType lasso_saml2_authz_decision_statement_get_type ( ) LassoNode* lasso_saml2_authz_decision_statement_new ( ) GType lasso_saml2_base_idabstract_get_type ( ) LassoNode* lasso_saml2_base_idabstract_new ( ) GType lasso_saml2_condition_abstract_get_type ( ) LassoNode* lasso_saml2_condition_abstract_new ( ) GType lasso_saml2_conditions_get_type ( ) LassoNode* lasso_saml2_conditions_new ( ) LassoSaml2EncryptedElement* lasso_saml2_encrypted_element_build_encrypted_persistent_name_id ( const char* id, const char* idpID, const LassoProvider* provider ) GType lasso_saml2_encrypted_element_get_type ( ) LassoNode* lasso_saml2_encrypted_element_new ( ) lasso_error_t lasso_saml2_encrypted_element_server_decrypt ( LassoSaml2EncryptedElement* encrypted_element, LassoServer* server, LassoNode** decrypted_node ) GType lasso_saml2_evidence_get_type ( ) LassoNode* lasso_saml2_evidence_new ( ) GType lasso_saml2_key_info_confirmation_data_get_type ( ) LassoNode* lasso_saml2_key_info_confirmation_data_new ( ) LassoSaml2NameID* lasso_saml2_name_id_build_persistent ( const char* id, const char* idpID, const char* providerID ) gboolean lasso_saml2_name_id_equals ( LassoSaml2NameID* name_id, LassoSaml2NameID* other_name_id ) GType lasso_saml2_name_id_get_type ( ) LassoNode* lasso_saml2_name_id_new ( ) LassoSaml2NameID* lasso_saml2_name_id_new_with_persistent_format ( const char* id, const char* idpID, const char* providerID ) LassoNode* lasso_saml2_name_id_new_with_string ( char* content ) GType lasso_saml2_one_time_use_get_type ( ) LassoNode* lasso_saml2_one_time_use_new ( ) GType lasso_saml2_proxy_restriction_get_type ( ) LassoNode* lasso_saml2_proxy_restriction_new ( ) GType lasso_saml2_statement_abstract_get_type ( ) LassoNode* lasso_saml2_statement_abstract_new ( ) GType lasso_saml2_subject_confirmation_data_get_type ( ) LassoNode* lasso_saml2_subject_confirmation_data_new ( ) GType lasso_saml2_subject_confirmation_get_type ( ) LassoNode* lasso_saml2_subject_confirmation_new ( ) GType lasso_saml2_subject_get_type ( ) GType lasso_saml2_subject_locality_get_type ( ) LassoNode* lasso_saml2_subject_locality_new ( ) LassoNode* lasso_saml2_subject_new ( ) GType lasso_saml_advice_get_type ( ) LassoNode* lasso_saml_advice_new ( ) GType lasso_saml_assertion_get_type ( ) LassoSamlAssertion* lasso_saml_assertion_new ( ) GType lasso_saml_attribute_designator_get_type ( ) LassoNode* lasso_saml_attribute_designator_new ( ) GType lasso_saml_attribute_get_type ( ) LassoSamlAttribute* lasso_saml_attribute_new ( ) GType lasso_saml_attribute_statement_get_type ( ) LassoSamlAttributeStatement* lasso_saml_attribute_statement_new ( ) GType lasso_saml_attribute_value_get_type ( ) LassoSamlAttributeValue* lasso_saml_attribute_value_new ( ) GType lasso_saml_audience_restriction_condition_get_type ( ) LassoSamlAudienceRestrictionCondition* lasso_saml_audience_restriction_condition_new ( ) LassoSamlAudienceRestrictionCondition* lasso_saml_audience_restriction_condition_new_full ( const char* audience ) GType lasso_saml_authentication_statement_get_type ( ) LassoNode* lasso_saml_authentication_statement_new ( ) GType lasso_saml_authority_binding_get_type ( ) LassoNode* lasso_saml_authority_binding_new ( ) GType lasso_saml_condition_abstract_get_type ( ) GType lasso_saml_conditions_get_type ( ) LassoSamlConditions* lasso_saml_conditions_new ( ) GType lasso_saml_name_identifier_get_type ( ) LassoSamlNameIdentifier* lasso_saml_name_identifier_new ( ) LassoSamlNameIdentifier* lasso_saml_name_identifier_new_from_xmlNode ( xmlNode* xmlnode ) GType lasso_saml_statement_abstract_get_type ( ) GType lasso_saml_subject_confirmation_get_type ( ) LassoSamlSubjectConfirmation* lasso_saml_subject_confirmation_new ( ) GType lasso_saml_subject_get_type ( ) GType lasso_saml_subject_locality_get_type ( ) LassoNode* lasso_saml_subject_locality_new ( ) LassoNode* lasso_saml_subject_new ( ) GType lasso_saml_subject_statement_abstract_get_type ( ) GType lasso_saml_subject_statement_get_type ( ) LassoNode* lasso_saml_subject_statement_new ( ) GType lasso_samlp2_artifact_resolve_get_type ( ) LassoNode* lasso_samlp2_artifact_resolve_new ( ) GType lasso_samlp2_artifact_response_get_type ( ) LassoNode* lasso_samlp2_artifact_response_new ( ) GType lasso_samlp2_assertion_id_request_get_type ( ) LassoNode* lasso_samlp2_assertion_id_request_new ( ) GType lasso_samlp2_attribute_query_get_type ( ) LassoNode* lasso_samlp2_attribute_query_new ( ) GType lasso_samlp2_authn_query_get_type ( ) LassoNode* lasso_samlp2_authn_query_new ( ) GType lasso_samlp2_authn_request_get_type ( ) LassoNode* lasso_samlp2_authn_request_new ( ) GType lasso_samlp2_authz_decision_query_get_type ( ) LassoNode* lasso_samlp2_authz_decision_query_new ( ) GType lasso_samlp2_extensions_get_type ( ) LassoNode* lasso_samlp2_extensions_new ( ) GType lasso_samlp2_idp_entry_get_type ( ) LassoNode* lasso_samlp2_idp_entry_new ( ) GType lasso_samlp2_idp_list_get_type ( ) LassoNode* lasso_samlp2_idp_list_new ( ) GList* lasso_samlp2_logout_request_get_session_indexes ( LassoSamlp2LogoutRequest* logout_request ) GType lasso_samlp2_logout_request_get_type ( ) LassoNode* lasso_samlp2_logout_request_new ( ) None lasso_samlp2_logout_request_set_session_indexes ( LassoSamlp2LogoutRequest* logout_request, GList* session_index ) GType lasso_samlp2_logout_response_get_type ( ) LassoNode* lasso_samlp2_logout_response_new ( ) GType lasso_samlp2_manage_name_id_request_get_type ( ) LassoNode* lasso_samlp2_manage_name_id_request_new ( ) GType lasso_samlp2_manage_name_id_response_get_type ( ) LassoNode* lasso_samlp2_manage_name_id_response_new ( ) GType lasso_samlp2_name_id_mapping_request_get_type ( ) LassoNode* lasso_samlp2_name_id_mapping_request_new ( ) GType lasso_samlp2_name_id_mapping_response_get_type ( ) LassoNode* lasso_samlp2_name_id_mapping_response_new ( ) GType lasso_samlp2_name_id_policy_get_type ( ) LassoNode* lasso_samlp2_name_id_policy_new ( ) GType lasso_samlp2_request_abstract_get_type ( ) LassoNode* lasso_samlp2_request_abstract_new ( ) GType lasso_samlp2_requested_authn_context_get_type ( ) LassoNode* lasso_samlp2_requested_authn_context_new ( ) GType lasso_samlp2_response_get_type ( ) LassoNode* lasso_samlp2_response_new ( ) GType lasso_samlp2_scoping_get_type ( ) LassoNode* lasso_samlp2_scoping_new ( ) GType lasso_samlp2_status_code_get_type ( ) LassoNode* lasso_samlp2_status_code_new ( ) GType lasso_samlp2_status_detail_get_type ( ) LassoNode* lasso_samlp2_status_detail_new ( ) GType lasso_samlp2_status_get_type ( ) LassoNode* lasso_samlp2_status_new ( ) GType lasso_samlp2_status_response_get_type ( ) LassoNode* lasso_samlp2_status_response_new ( ) GType lasso_samlp2_subject_query_abstract_get_type ( ) LassoNode* lasso_samlp2_subject_query_abstract_new ( ) GType lasso_samlp2_terminate_get_type ( ) LassoNode* lasso_samlp2_terminate_new ( ) GType lasso_samlp_request_abstract_get_type ( ) GType lasso_samlp_request_get_type ( ) LassoNode* lasso_samlp_request_new ( ) None lasso_samlp_response_abstract_fill ( LassoSamlpResponseAbstract* response, const char* InResponseTo, const char* Recipient ) GType lasso_samlp_response_abstract_get_type ( ) GType lasso_samlp_response_get_type ( ) LassoNode* lasso_samlp_response_new ( ) GType lasso_samlp_status_code_get_type ( ) LassoSamlpStatusCode* lasso_samlp_status_code_new ( ) GType lasso_samlp_status_get_type ( ) LassoSamlpStatus* lasso_samlp_status_new ( ) lasso_error_t lasso_server_add_provider ( LassoServer* server, LassoProviderRole role, const gchar* metadata, const gchar* public_key, const gchar* ca_cert_chain ) lasso_error_t lasso_server_add_provider_from_buffer ( LassoServer* server, LassoProviderRole role, const gchar* metadata, const gchar* public_key, const gchar* ca_cert_chain ) None lasso_server_destroy ( LassoServer* server ) gchar* lasso_server_dump ( LassoServer* server ) LassoProvider* lasso_server_get_provider ( const LassoServer* server, const gchar* providerID ) GType lasso_server_get_type ( ) lasso_error_t lasso_server_load_affiliation ( LassoServer* server, const gchar* filename ) LassoServer* lasso_server_new ( const gchar* metadata, const gchar* private_key, const gchar* private_key_password, const gchar* certificate ) LassoServer* lasso_server_new_from_buffers ( const gchar* metadata, const gchar* private_key_content, const gchar* private_key_password, const gchar* certificate_content ) LassoServer* lasso_server_new_from_dump ( const gchar* dump ) lasso_error_t lasso_server_saml2_assertion_setup_signature ( LassoServer* server, LassoSaml2Assertion* saml2_assertion ) lasso_error_t lasso_server_set_encryption_private_key ( LassoServer* server, const gchar* filename_or_buffer ) lasso_error_t lasso_server_set_encryption_private_key_with_password ( LassoServer* server, const gchar* filename_or_buffer, const gchar* password ) lasso_error_t lasso_session_add_assertion ( LassoSession* session, const char* providerID, LassoNode* assertion ) None lasso_session_destroy ( LassoSession* session ) gchar* lasso_session_dump ( LassoSession* session ) LassoNode* lasso_session_get_assertion ( LassoSession* session, const gchar* providerID ) GList* lasso_session_get_assertions ( LassoSession* session, const char* provider_id ) gchar* lasso_session_get_provider_index ( LassoSession* session, gint index ) GType lasso_session_get_type ( ) gboolean lasso_session_is_empty ( LassoSession* session ) LassoSession* lasso_session_new ( ) LassoSession* lasso_session_new_from_dump ( const gchar* dump ) lasso_error_t lasso_session_remove_assertion ( LassoSession* session, const gchar* providerID ) None lasso_set_flag ( char* flag ) lasso_error_t lasso_shutdown ( ) GType lasso_soap_body_get_type ( ) LassoSoapBody* lasso_soap_body_new ( ) LassoSoapBody* lasso_soap_body_new_from_message ( const gchar* message ) GType lasso_soap_detail_get_type ( ) LassoSoapDetail* lasso_soap_detail_new ( ) LassoSoapDetail* lasso_soap_detail_new_from_message ( const gchar* message ) GType lasso_soap_envelope_get_type ( ) LassoSoapEnvelope* lasso_soap_envelope_new ( LassoSoapBody* body ) LassoSoapEnvelope* lasso_soap_envelope_new_from_message ( const gchar* message ) GType lasso_soap_fault_get_type ( ) LassoSoapFault* lasso_soap_fault_new ( ) LassoSoapFault* lasso_soap_fault_new_from_message ( const gchar* message ) LassoSoapFault* lasso_soap_fault_new_full ( const char* faultcode, const char* faultstring ) GType lasso_soap_header_get_type ( ) LassoSoapHeader* lasso_soap_header_new ( ) LassoSoapHeader* lasso_soap_header_new_from_message ( const gchar* message ) const char* lasso_strerror ( int error_code ) lasso-2.8.2/abi/PaxHeaders/abi-2.3.50000644000000000000000000000013113766621500013603 xustar0029 mtime=1608196928.71889494 30 atime=1678098069.993489071 30 ctime=1678814319.933947183 lasso-2.8.2/abi/abi-2.3.50000644000175000017500000021073613766621500017065 0ustar00bdauvergnebdauvergne00000000000000BACKWARD_COMP_H LASSO_ASSERTION_QUERY_ERROR_ATTRIBUTE_REQUEST_ALREADY_EXIST LASSO_ASSERTION_QUERY_ERROR_NOT_AN_ATTRIBUTE_QUERY LASSO_ASSERTION_QUERY_REQUEST_TYPE_ASSERTION_ID LASSO_ASSERTION_QUERY_REQUEST_TYPE_ATTRIBUTE LASSO_ASSERTION_QUERY_REQUEST_TYPE_AUTHN LASSO_ASSERTION_QUERY_REQUEST_TYPE_AUTHZ_DECISION LASSO_ASSERTION_QUERY_REQUEST_TYPE_LAST LASSO_ASSERTION_QUERY_REQUEST_TYPE_UNSET LASSO_CERTIFICATE_ATTRIBUTE LASSO_CHECK_VERSIONABI_COMPATIBLE LASSO_CHECK_VERSION_EXACT LASSO_CHECK_VERSION_NUMERIC LASSO_DATA_SERVICE_ERROR_CANNOT_ADD_ITEM LASSO_DATA_SERVICE_ERROR_UNREGISTERED_DST LASSO_DEFEDERATION_ERROR_MISSING_NAME_IDENTIFIER LASSO_DISCOVERY_ERROR_FAILED_TO_BUILD_ENDPOINT_REFERENCE LASSO_DISCOVERY_ERROR_MISSING_REQUESTED_SERVICE LASSO_DISCOVERY_ERROR_SVC_METADATA_ASSOCIATION_ADD_FAILED LASSO_DISCOVERY_ERROR_SVC_METADATA_REGISTER_FAILED LASSO_DST_ERROR_EMPTY_REQUEST LASSO_DST_ERROR_MALFORMED_QUERY LASSO_DST_ERROR_MISSING_SERVICE_DATA LASSO_DST_ERROR_MODIFY_FAILED LASSO_DST_ERROR_MODIFY_PARTIALLY_FAILED LASSO_DST_ERROR_NEW_DATA_MISSING LASSO_DST_ERROR_NO_DATA LASSO_DST_ERROR_QUERY_FAILED LASSO_DST_ERROR_QUERY_NOT_FOUND LASSO_DST_ERROR_QUERY_PARTIALLY_FAILED LASSO_DS_ERROR_CA_CERT_CHAIN_LOAD_FAILED LASSO_DS_ERROR_CERTIFICATE_LOAD_FAILED LASSO_DS_ERROR_CONTEXT_CREATION_FAILED LASSO_DS_ERROR_DECRYPTION_FAILED LASSO_DS_ERROR_DECRYPTION_FAILED_MISSING_PRIVATE_KEY LASSO_DS_ERROR_DIGEST_COMPUTE_FAILED LASSO_DS_ERROR_ENCRYPTION_FAILED LASSO_DS_ERROR_INVALID_REFERENCE_FOR_SAML LASSO_DS_ERROR_INVALID_SIGALG LASSO_DS_ERROR_INVALID_SIGNATURE LASSO_DS_ERROR_KEYS_MNGR_CREATION_FAILED LASSO_DS_ERROR_KEYS_MNGR_INIT_FAILED LASSO_DS_ERROR_PRIVATE_KEY_LOAD_FAILED LASSO_DS_ERROR_PUBLIC_KEY_LOAD_FAILED LASSO_DS_ERROR_SIGNATURE_FAILED LASSO_DS_ERROR_SIGNATURE_NOT_FOUND LASSO_DS_ERROR_SIGNATURE_TEMPLATE_NOT_FOUND LASSO_DS_ERROR_SIGNATURE_TMPL_CREATION_FAILED LASSO_DS_ERROR_SIGNATURE_VERIFICATION_FAILED LASSO_DS_ERROR_TOO_MUCH_REFERENCES LASSO_DS_HREF LASSO_DS_PREFIX LASSO_DURATION_DAY LASSO_DURATION_HOUR LASSO_DURATION_MINUTE LASSO_DURATION_WEEK LASSO_ECP_HREF LASSO_ECP_PREFIX LASSO_ENCRYPTION_MODE_ASSERTION LASSO_ENCRYPTION_MODE_NAMEID LASSO_ENCRYPTION_MODE_NONE LASSO_ENCRYPTION_SYM_KEY_TYPE_3DES LASSO_ENCRYPTION_SYM_KEY_TYPE_AES_128 LASSO_ENCRYPTION_SYM_KEY_TYPE_AES_256 LASSO_ENCRYPTION_SYM_KEY_TYPE_DEFAULT LASSO_ENCRYTPION_SYM_KEY_TYPE_LAST LASSO_ERROR_CAST_FAILED LASSO_ERROR_OUT_OF_MEMORY LASSO_ERROR_UNDEFINED LASSO_ERROR_UNIMPLEMENTED LASSO_HTTP_METHOD_ANY LASSO_HTTP_METHOD_ARTIFACT_GET LASSO_HTTP_METHOD_ARTIFACT_POST LASSO_HTTP_METHOD_GET LASSO_HTTP_METHOD_IDP_INITIATED LASSO_HTTP_METHOD_LAST LASSO_HTTP_METHOD_NONE LASSO_HTTP_METHOD_PAOS LASSO_HTTP_METHOD_POST LASSO_HTTP_METHOD_REDIRECT LASSO_HTTP_METHOD_SOAP LASSO_IDWSF2_DISCOVERY_ERROR_DUPLICATE LASSO_IDWSF2_DISCOVERY_ERROR_FAILED LASSO_IDWSF2_DISCOVERY_ERROR_FORBIDDEN LASSO_IDWSF2_DISCOVERY_ERROR_LOGICAL_DUPLICATE LASSO_IDWSF2_DISCOVERY_ERROR_NOT_FOUND LASSO_IDWSF2_DISCOVERY_ERROR_NO_RESULTS LASSO_IDWSF2_DST_ERROR_DUPLICATE_ITEM LASSO_IDWSF2_DST_ERROR_ITEM_NOT_FOUND LASSO_IDWSF2_DST_ERROR_PARTIAL_FAILURE LASSO_IDWSF2_DST_ERROR_UNKNOWN_STATUS_CODE LASSO_LASSO_HREF LASSO_LASSO_PREFIX LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_INTERNET_PROTOCOL LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_INTERNET_PROTOCOL_PASSWORD LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_ONE_FACTOR_CONTRACT LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_ONE_FACTOR_UNREGISTERED LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_TWO_FACTOR_CONTRACT LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_TWO_FACTOR_UNREGISTERED LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PASSWORD LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PASSWORD_PROTECTED_TRANSPORT LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PREVIOUS_SESSION LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SMARTCARD LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SMARTCARD_PKI LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SOFTWARE_PKI LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_TIME_SYNC_TOKEN LASSO_LIB_AUTHN_CONTEXT_COMPARISON_BETTER LASSO_LIB_AUTHN_CONTEXT_COMPARISON_EXACT LASSO_LIB_AUTHN_CONTEXT_COMPARISON_MAXIMUM LASSO_LIB_AUTHN_CONTEXT_COMPARISON_MINIMUM LASSO_LIB_CONSENT_INAPPLICABLE LASSO_LIB_CONSENT_OBTAINED LASSO_LIB_CONSENT_OBTAINED_CURRENT_EXPLICIT LASSO_LIB_CONSENT_OBTAINED_CURRENT_IMPLICIT LASSO_LIB_CONSENT_OBTAINED_PRIOR LASSO_LIB_CONSENT_UNAVAILABLE LASSO_LIB_HREF LASSO_LIB_MAJOR_VERSION_N LASSO_LIB_MINOR_VERSION_N LASSO_LIB_NAMEID_POLICY_TYPE_ANY LASSO_LIB_NAMEID_POLICY_TYPE_FEDERATED LASSO_LIB_NAMEID_POLICY_TYPE_NONE LASSO_LIB_NAMEID_POLICY_TYPE_ONE_TIME LASSO_LIB_NAME_IDENTIFIER_FORMAT_ENCRYPTED LASSO_LIB_NAME_IDENTIFIER_FORMAT_ENTITYID LASSO_LIB_NAME_IDENTIFIER_FORMAT_FEDERATED LASSO_LIB_NAME_IDENTIFIER_FORMAT_ONE_TIME LASSO_LIB_PREFIX LASSO_LIB_PROTOCOL_PROFILE_BRWS_ART LASSO_LIB_PROTOCOL_PROFILE_BRWS_LECP LASSO_LIB_PROTOCOL_PROFILE_BRWS_POST LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_IDP_HTTP LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_IDP_SOAP LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_SP_SOAP LASSO_LIB_PROTOCOL_PROFILE_NIM_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_RNI_IDP_HTTP LASSO_LIB_PROTOCOL_PROFILE_RNI_IDP_SOAP LASSO_LIB_PROTOCOL_PROFILE_RNI_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_RNI_SP_SOAP LASSO_LIB_PROTOCOL_PROFILE_SLO_IDP_HTTP LASSO_LIB_PROTOCOL_PROFILE_SLO_IDP_SOAP LASSO_LIB_PROTOCOL_PROFILE_SLO_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_SLO_SP_SOAP LASSO_LIB_STATUS_CODE_FEDERATION_DOES_NOT_EXIST LASSO_LIB_STATUS_CODE_INVALID_ASSERTION_CONSUMER_SERVICE_INDEX LASSO_LIB_STATUS_CODE_INVALID_SIGNATURE LASSO_LIB_STATUS_CODE_NO_AUTHN_CONTEXT LASSO_LIB_STATUS_CODE_NO_AVAILABLEIDP LASSO_LIB_STATUS_CODE_NO_PASSIVE LASSO_LIB_STATUS_CODE_NO_SUPPORTEDIDP LASSO_LIB_STATUS_CODE_PROXY_COUNT_EXCEEDED LASSO_LIB_STATUS_CODE_UNKNOWN_PRINCIPAL LASSO_LIB_STATUS_CODE_UNSIGNED_AUTHN_REQUEST LASSO_LIB_STATUS_CODE_UNSUPPORTED_PROFILE LASSO_LOGIN_ERROR_ASSERTION_DOES_NOT_MATCH_REQUEST_ID LASSO_LOGIN_ERROR_ASSERTION_REPLAY LASSO_LOGIN_ERROR_CONSENT_NOT_OBTAINED LASSO_LOGIN_ERROR_FEDERATION_NOT_FOUND LASSO_LOGIN_ERROR_INVALID_ASSERTION_SIGNATURE LASSO_LOGIN_ERROR_INVALID_NAMEIDPOLICY LASSO_LOGIN_ERROR_INVALID_SIGNATURE LASSO_LOGIN_ERROR_NO_DEFAULT_ENDPOINT LASSO_LOGIN_ERROR_REQUEST_DENIED LASSO_LOGIN_ERROR_STATUS_NOT_SUCCESS LASSO_LOGIN_ERROR_UNKNOWN_PRINCIPAL LASSO_LOGIN_ERROR_UNSIGNED_AUTHN_REQUEST LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_ART LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_LECP LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_POST LASSO_LOGIN_PROTOCOL_PROFILE_REDIRECT LASSO_LOGOUT_ERROR_FEDERATION_NOT_FOUND LASSO_LOGOUT_ERROR_REQUEST_DENIED LASSO_LOGOUT_ERROR_UNKNOWN_PRINCIPAL LASSO_LOGOUT_ERROR_UNSUPPORTED_PROFILE LASSO_MD_PROTOCOL_TYPE_ARTIFACT_RESOLUTION LASSO_MD_PROTOCOL_TYPE_ASSERTION_ID_REQUEST LASSO_MD_PROTOCOL_TYPE_ATTRIBUTE LASSO_MD_PROTOCOL_TYPE_AUTHN_QUERY LASSO_MD_PROTOCOL_TYPE_AUTHZ LASSO_MD_PROTOCOL_TYPE_FEDERATION_TERMINATION LASSO_MD_PROTOCOL_TYPE_LAST LASSO_MD_PROTOCOL_TYPE_MANAGE_NAME_ID LASSO_MD_PROTOCOL_TYPE_NAME_IDENTIFIER_MAPPING LASSO_MD_PROTOCOL_TYPE_REGISTER_NAME_IDENTIFIER LASSO_MD_PROTOCOL_TYPE_SINGLE_LOGOUT LASSO_MD_PROTOCOL_TYPE_SINGLE_SIGN_ON LASSO_MESSAGE_FORMAT_BASE64 LASSO_MESSAGE_FORMAT_ERROR LASSO_MESSAGE_FORMAT_QUERY LASSO_MESSAGE_FORMAT_SOAP LASSO_MESSAGE_FORMAT_UNKNOWN LASSO_MESSAGE_FORMAT_XML LASSO_MESSAGE_FORMAT_XSCHEMA_ERROR LASSO_METADATA_HREF LASSO_METADATA_PREFIX LASSO_NAME_IDENTIFIER_MAPPING_ERROR_FORBIDDEN_CALL_ON_THIS_SIDE LASSO_NAME_IDENTIFIER_MAPPING_ERROR_MISSING_TARGET_IDENTIFIER LASSO_NAME_IDENTIFIER_MAPPING_ERROR_MISSING_TARGET_NAMESPACE LASSO_PAOS_HREF LASSO_PAOS_PREFIX LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ LASSO_PARAM_ERROR_CHECK_FAILED LASSO_PARAM_ERROR_INVALID_VALUE LASSO_PARAM_ERROR_NON_INITIALIZED_OBJECT LASSO_PRIVATE_KEY_ATTRIBUTE LASSO_PRIVATE_KEY_PASSWORD_ATTRIBUTE LASSO_PRIVATE_STATUS_CODE_FAILED_TO_RESTORE_ARTIFACT LASSO_PROFILE_ERROR_BAD_IDENTITY_DUMP LASSO_PROFILE_ERROR_BAD_SESSION_DUMP LASSO_PROFILE_ERROR_BUILDING_MESSAGE_FAILED LASSO_PROFILE_ERROR_BUILDING_QUERY_FAILED LASSO_PROFILE_ERROR_BUILDING_REQUEST_FAILED LASSO_PROFILE_ERROR_BUILDING_RESPONSE_FAILED LASSO_PROFILE_ERROR_CANNOT_FIND_A_PROVIDER LASSO_PROFILE_ERROR_CANNOT_VERIFY_SIGNATURE LASSO_PROFILE_ERROR_FEDERATION_NOT_FOUND LASSO_PROFILE_ERROR_IDENTITY_NOT_FOUND LASSO_PROFILE_ERROR_INVALID_ARTIFACT LASSO_PROFILE_ERROR_INVALID_ASSERTION LASSO_PROFILE_ERROR_INVALID_ASSERTION_CONDITIONS LASSO_PROFILE_ERROR_INVALID_HTTP_METHOD LASSO_PROFILE_ERROR_INVALID_ISSUER LASSO_PROFILE_ERROR_INVALID_MSG LASSO_PROFILE_ERROR_INVALID_POST_MSG LASSO_PROFILE_ERROR_INVALID_PROTOCOLPROFILE LASSO_PROFILE_ERROR_INVALID_QUERY LASSO_PROFILE_ERROR_INVALID_REQUEST LASSO_PROFILE_ERROR_INVALID_RESPONSE LASSO_PROFILE_ERROR_INVALID_SOAP_MSG LASSO_PROFILE_ERROR_ISSUER_IS_NOT_AN_IDP LASSO_PROFILE_ERROR_MISSING_ARTIFACT LASSO_PROFILE_ERROR_MISSING_ASSERTION LASSO_PROFILE_ERROR_MISSING_ENCRYPTION_PRIVATE_KEY LASSO_PROFILE_ERROR_MISSING_ENDPOINT_REFERENCE LASSO_PROFILE_ERROR_MISSING_ENDPOINT_REFERENCE_ADDRESS LASSO_PROFILE_ERROR_MISSING_ISSUER LASSO_PROFILE_ERROR_MISSING_NAME_IDENTIFIER LASSO_PROFILE_ERROR_MISSING_REMOTE_PROVIDERID LASSO_PROFILE_ERROR_MISSING_REQUEST LASSO_PROFILE_ERROR_MISSING_RESOURCE_OFFERING LASSO_PROFILE_ERROR_MISSING_RESPONSE LASSO_PROFILE_ERROR_MISSING_SERVER LASSO_PROFILE_ERROR_MISSING_SERVICE_DESCRIPTION LASSO_PROFILE_ERROR_MISSING_SERVICE_INSTANCE LASSO_PROFILE_ERROR_MISSING_SERVICE_TYPE LASSO_PROFILE_ERROR_MISSING_STATUS_CODE LASSO_PROFILE_ERROR_MISSING_SUBJECT LASSO_PROFILE_ERROR_NAME_IDENTIFIER_NOT_FOUND LASSO_PROFILE_ERROR_RESPONSE_DOES_NOT_MATCH_REQUEST LASSO_PROFILE_ERROR_SESSION_NOT_FOUND LASSO_PROFILE_ERROR_STATUS_NOT_SUCCESS LASSO_PROFILE_ERROR_UNKNOWN_ISSUER LASSO_PROFILE_ERROR_UNKNOWN_PROFILE_URL LASSO_PROFILE_ERROR_UNKNOWN_PROVIDER LASSO_PROFILE_ERROR_UNSUPPORTED_BINDING LASSO_PROFILE_ERROR_UNSUPPORTED_PROFILE LASSO_PROFILE_SIGNATURE_HINT_FORBID LASSO_PROFILE_SIGNATURE_HINT_FORCE LASSO_PROFILE_SIGNATURE_HINT_MAYBE LASSO_PROFILE_SIGNATURE_VERIFY_HINT_FORCE LASSO_PROFILE_SIGNATURE_VERIFY_HINT_IGNORE LASSO_PROFILE_SIGNATURE_VERIFY_HINT_LAST LASSO_PROFILE_SIGNATURE_VERIFY_HINT_MAYBE LASSO_PROTOCOL_LIBERTY_1_0 LASSO_PROTOCOL_LIBERTY_1_1 LASSO_PROTOCOL_LIBERTY_1_2 LASSO_PROTOCOL_NONE LASSO_PROTOCOL_SAML_2_0 LASSO_PROVIDER_ERROR_MISSING_PUBLIC_KEY LASSO_PROVIDER_ROLE_ANY LASSO_PROVIDER_ROLE_ATTRIBUTE_AUTHORITY LASSO_PROVIDER_ROLE_AUTHN_AUTHORITY LASSO_PROVIDER_ROLE_AUTHZ_AUTHORITY LASSO_PROVIDER_ROLE_BOTH LASSO_PROVIDER_ROLE_IDP LASSO_PROVIDER_ROLE_LAST LASSO_PROVIDER_ROLE_NONE LASSO_PROVIDER_ROLE_SP LASSO_PYTHON_HREF LASSO_REGISTRY_ERROR_KEY_EXISTS LASSO_REQUEST_TYPE_DEFEDERATION LASSO_REQUEST_TYPE_DISCO_MODIFY LASSO_REQUEST_TYPE_DISCO_QUERY LASSO_REQUEST_TYPE_DST_MODIFY LASSO_REQUEST_TYPE_DST_QUERY LASSO_REQUEST_TYPE_IDWSF2_DISCO_QUERY LASSO_REQUEST_TYPE_IDWSF2_DISCO_SVCMD_ASSOCIATION_ADD LASSO_REQUEST_TYPE_IDWSF2_DISCO_SVCMD_REGISTER LASSO_REQUEST_TYPE_INVALID LASSO_REQUEST_TYPE_LECP LASSO_REQUEST_TYPE_LOGIN LASSO_REQUEST_TYPE_LOGOUT LASSO_REQUEST_TYPE_NAME_IDENTIFIER_MAPPING LASSO_REQUEST_TYPE_NAME_ID_MANAGEMENT LASSO_REQUEST_TYPE_NAME_REGISTRATION LASSO_REQUEST_TYPE_SASL_REQUEST LASSO_SAML2_ACTION_GHPP_GET LASSO_SAML2_ACTION_GHPP_HEAD LASSO_SAML2_ACTION_GHPP_POST LASSO_SAML2_ACTION_GHPP_PUT LASSO_SAML2_ACTION_NAMESPACE_GHPP LASSO_SAML2_ACTION_NAMESPACE_RWEDC LASSO_SAML2_ACTION_NAMESPACE_RWEDC_NEGATION LASSO_SAML2_ACTION_NAMESPACE_UNIX LASSO_SAML2_ACTION_RWEDC_CONTROL LASSO_SAML2_ACTION_RWEDC_DELETE LASSO_SAML2_ACTION_RWEDC_EXECUTE LASSO_SAML2_ACTION_RWEDC_NEGATION LASSO_SAML2_ACTION_RWEDC_READ LASSO_SAML2_ACTION_RWEDC_WRITE LASSO_SAML2_ASSERTION_HREF LASSO_SAML2_ASSERTION_INDETERMINATE LASSO_SAML2_ASSERTION_INVALID LASSO_SAML2_ASSERTION_PREFIX LASSO_SAML2_ASSERTION_VALID LASSO_SAML2_ATTRIBUTE_NAME_EPR LASSO_SAML2_ATTRIBUTE_NAME_FORMAT_BASIC LASSO_SAML2_ATTRIBUTE_NAME_FORMAT_UNSPECIFIED LASSO_SAML2_ATTRIBUTE_NAME_FORMAT_URI LASSO_SAML2_ATTRIBUTE_PROFILE_BASIC LASSO_SAML2_ATTRIBUTE_PROFILE_DCE LASSO_SAML2_ATTRIBUTE_PROFILE_UUID LASSO_SAML2_ATTRIBUTE_PROFILE_X500 LASSO_SAML2_AUTHN_CONTEXT_AUTHENTICATED_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_INTERNET_PROTOCOL LASSO_SAML2_AUTHN_CONTEXT_INTERNET_PROTOCOL_PASSWORD LASSO_SAML2_AUTHN_CONTEXT_KERBEROS LASSO_SAML2_AUTHN_CONTEXT_MOBILE_ONE_FACTOR_CONTRACT LASSO_SAML2_AUTHN_CONTEXT_MOBILE_ONE_FACTOR_UNREGISTERED LASSO_SAML2_AUTHN_CONTEXT_MOBILE_TWO_FACTOR_CONTRACT LASSO_SAML2_AUTHN_CONTEXT_MOBILE_TWO_FACTOR_UNREGISTERED LASSO_SAML2_AUTHN_CONTEXT_NOMAD_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_PASSWORD LASSO_SAML2_AUTHN_CONTEXT_PASSWORD_PROTECTED_TRANSPORT LASSO_SAML2_AUTHN_CONTEXT_PERSONALIZED_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_PGP LASSO_SAML2_AUTHN_CONTEXT_PREVIOUS_SESSION LASSO_SAML2_AUTHN_CONTEXT_SECURE_REMOTE_PASSWORD LASSO_SAML2_AUTHN_CONTEXT_SMARTCARD LASSO_SAML2_AUTHN_CONTEXT_SMARTCARD_PKI LASSO_SAML2_AUTHN_CONTEXT_SOFTWARE_PKI LASSO_SAML2_AUTHN_CONTEXT_SPKI LASSO_SAML2_AUTHN_CONTEXT_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_TIME_SYNC_TOKEN LASSO_SAML2_AUTHN_CONTEXT_TLS_CLIENT LASSO_SAML2_AUTHN_CONTEXT_UNSPECIFIED LASSO_SAML2_AUTHN_CONTEXT_X509 LASSO_SAML2_AUTHN_CONTEXT_XMLDSIG LASSO_SAML2_CONFIRMATION_METHOD_BEARER LASSO_SAML2_CONFIRMATION_METHOD_HOLDER_OF_KEY LASSO_SAML2_CONSENT_EXPLICIT LASSO_SAML2_CONSENT_IMPLICIT LASSO_SAML2_CONSENT_INAPPLICABLE LASSO_SAML2_CONSENT_OBTAINED LASSO_SAML2_CONSENT_PRIOR LASSO_SAML2_CONSENT_UNAVAILABLE LASSO_SAML2_DEFLATE_ENCODING LASSO_SAML2_FIELD_ARTIFACT LASSO_SAML2_FIELD_ENCODING LASSO_SAML2_FIELD_RELAYSTATE LASSO_SAML2_FIELD_REQUEST LASSO_SAML2_FIELD_RESPONSE LASSO_SAML2_FIELD_SIGALG LASSO_SAML2_FIELD_SIGNATURE LASSO_SAML2_METADATA_BINDING_ARTIFACT LASSO_SAML2_METADATA_BINDING_PAOS LASSO_SAML2_METADATA_BINDING_POST LASSO_SAML2_METADATA_BINDING_REDIRECT LASSO_SAML2_METADATA_BINDING_SOAP LASSO_SAML2_METADATA_BINDING_URI LASSO_SAML2_METADATA_HREF LASSO_SAML2_METADATA_PREFIX LASSO_SAML2_NAME_IDENTIFIER_FORMAT_EMAIL LASSO_SAML2_NAME_IDENTIFIER_FORMAT_ENCRYPTED LASSO_SAML2_NAME_IDENTIFIER_FORMAT_ENTITY LASSO_SAML2_NAME_IDENTIFIER_FORMAT_KERBEROS LASSO_SAML2_NAME_IDENTIFIER_FORMAT_PERSISTENT LASSO_SAML2_NAME_IDENTIFIER_FORMAT_TRANSIENT LASSO_SAML2_NAME_IDENTIFIER_FORMAT_UNSPECIFIED LASSO_SAML2_NAME_IDENTIFIER_FORMAT_WINDOWS LASSO_SAML2_NAME_IDENTIFIER_FORMAT_X509 LASSO_SAML2_PROTOCOL_HREF LASSO_SAML2_PROTOCOL_PREFIX LASSO_SAML2_STATUS_CODE_AUTHN_FAILED LASSO_SAML2_STATUS_CODE_INVALID_ATTR_NAME LASSO_SAML2_STATUS_CODE_INVALID_NAME_ID_POLICY LASSO_SAML2_STATUS_CODE_NO_AUTHN_CONTEXT LASSO_SAML2_STATUS_CODE_NO_AVAILABLE_IDP LASSO_SAML2_STATUS_CODE_NO_PASSIVE LASSO_SAML2_STATUS_CODE_NO_SUPPORTED_IDP LASSO_SAML2_STATUS_CODE_PARTIAL_LOGOUT LASSO_SAML2_STATUS_CODE_PROXY_COUNT_EXCEEDED LASSO_SAML2_STATUS_CODE_REQUESTER LASSO_SAML2_STATUS_CODE_REQUEST_DENIED LASSO_SAML2_STATUS_CODE_REQUEST_UNSUPPORTED LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_DEPRECATED LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_TOO_HIGH LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_TOO_LOW LASSO_SAML2_STATUS_CODE_RESOURCE_NOT_RECOGNIZED LASSO_SAML2_STATUS_CODE_RESPONDER LASSO_SAML2_STATUS_CODE_SUCCESS LASSO_SAML2_STATUS_CODE_TOO_MANY_RESPONSES LASSO_SAML2_STATUS_CODE_UNKNOWN_ATTR_PROFILE LASSO_SAML2_STATUS_CODE_UNKNOWN_PRINCIPAL LASSO_SAML2_STATUS_CODE_UNSUPPORTED_BINDING LASSO_SAML2_STATUS_CODE_VERSION_MISMATCH LASSO_SAML_ASSERTION_HREF LASSO_SAML_ASSERTION_PREFIX LASSO_SAML_AUTHENTICATION_METHODS_PKI LASSO_SAML_AUTHENTICATION_METHOD_HARDWARE_TOKEN LASSO_SAML_AUTHENTICATION_METHOD_KERBEROS LASSO_SAML_AUTHENTICATION_METHOD_LIBERTY LASSO_SAML_AUTHENTICATION_METHOD_PASSWORD LASSO_SAML_AUTHENTICATION_METHOD_PGP LASSO_SAML_AUTHENTICATION_METHOD_SECURE_REMOTE_PASSWORD LASSO_SAML_AUTHENTICATION_METHOD_SMARTCARD_PKI LASSO_SAML_AUTHENTICATION_METHOD_SOFTWARE_PKI LASSO_SAML_AUTHENTICATION_METHOD_UNSPECIFIED LASSO_SAML_AUTHENTICATION_METHOD_XKMS LASSO_SAML_AUTHENTICATION_METHOD_XMLD_SIG LASSO_SAML_CONFIRMATION_METHOD_ARTIFACT LASSO_SAML_CONFIRMATION_METHOD_ARTIFACT01 LASSO_SAML_CONFIRMATION_METHOD_BEARER LASSO_SAML_CONFIRMATION_METHOD_HOLDER_OF_KEY LASSO_SAML_CONFIRMATION_METHOD_SENDER_VOUCHES LASSO_SAML_MAJOR_VERSION_N LASSO_SAML_MINOR_VERSION_N LASSO_SAML_PROTOCOL_HREF LASSO_SAML_PROTOCOL_PREFIX LASSO_SAML_STATUS_CODE_REQUESTER LASSO_SAML_STATUS_CODE_REQUEST_DENIED LASSO_SAML_STATUS_CODE_REQUEST_VERSION_DEPRECATED LASSO_SAML_STATUS_CODE_REQUEST_VERSION_TOO_HIGH LASSO_SAML_STATUS_CODE_REQUEST_VERSION_TOO_LOW LASSO_SAML_STATUS_CODE_RESOURCE_NOT_RECOGNIZED LASSO_SAML_STATUS_CODE_RESPONDER LASSO_SAML_STATUS_CODE_SUCCESS LASSO_SAML_STATUS_CODE_TOO_MANY_RESPONSES LASSO_SAML_STATUS_CODE_VERSION_MISMATCH LASSO_SERVER_ERROR_ADD_PROVIDER_FAILED LASSO_SERVER_ERROR_ADD_PROVIDER_PROTOCOL_MISMATCH LASSO_SERVER_ERROR_INVALID_XML LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND LASSO_SERVER_ERROR_SET_ENCRYPTION_PRIVATE_KEY_FAILED LASSO_SIGNATURE_METHOD_ATTRIBUTE LASSO_SIGNATURE_METHOD_DSA_SHA1 LASSO_SIGNATURE_METHOD_LAST LASSO_SIGNATURE_METHOD_RSA_SHA1 LASSO_SIGNATURE_TYPE_ATTRIBUTE LASSO_SIGNATURE_TYPE_LAST LASSO_SIGNATURE_TYPE_NONE LASSO_SIGNATURE_TYPE_SIMPLE LASSO_SIGNATURE_TYPE_WITHX509 LASSO_SOAP_ENV_ACTOR LASSO_SOAP_ENV_HREF LASSO_SOAP_ENV_PREFIX LASSO_SOAP_ERROR_MISSING_BODY LASSO_SOAP_ERROR_MISSING_ENVELOPE LASSO_SOAP_ERROR_MISSING_HEADER LASSO_SOAP_ERROR_MISSING_SOAP_FAULT_DETAIL LASSO_SOAP_ERROR_REDIRECT_REQUEST_FAULT LASSO_SOAP_FAULT_CODE_CLIENT LASSO_SOAP_FAULT_CODE_MUST_UNDERSTAND LASSO_SOAP_FAULT_CODE_SERVER LASSO_SOAP_FAULT_CODE_VERSION_MISMATCH LASSO_SOAP_FAULT_REDIRECT_REQUEST LASSO_WSF_ENABLED LASSO_WSF_PROFILE_ERROR_INVALID_OR_MISSING_REFERENCE_TO_MESSAGE_ID LASSO_WSF_PROFILE_ERROR_MISSING_ASSERTION_ID LASSO_WSF_PROFILE_ERROR_MISSING_CORRELATION LASSO_WSF_PROFILE_ERROR_MISSING_CREDENTIAL_REF LASSO_WSF_PROFILE_ERROR_MISSING_DESCRIPTION LASSO_WSF_PROFILE_ERROR_MISSING_ENDPOINT LASSO_WSF_PROFILE_ERROR_MISSING_RESOURCE_ID LASSO_WSF_PROFILE_ERROR_MISSING_SECURITY LASSO_WSF_PROFILE_ERROR_MISSING_SENDER_ID LASSO_WSF_PROFILE_ERROR_REDIRECT_REQUEST LASSO_WSF_PROFILE_ERROR_REDIRECT_REQUEST_UNSUPPORTED_BY_REQUESTER LASSO_WSF_PROFILE_ERROR_SECURITY_MECHANISM_CHECK_FAILED LASSO_WSF_PROFILE_ERROR_SERVER_INTERACTION_REQUIRED LASSO_WSF_PROFILE_ERROR_SERVER_INTERACTION_REQUIRED_FOR_DATA LASSO_WSF_PROFILE_ERROR_SOAP_FAULT LASSO_WSF_PROFILE_ERROR_UNKNOWN_STATUS_CODE LASSO_WSF_PROFILE_ERROR_UNSUPPORTED_SECURITY_MECHANISM LASSO_WSSEC_ERROR_BAD_PASSWORD LASSO_WSSEC_ERROR_MISSING_SECURITY_TOKEN LASSO_WSUTIL1_HREF LASSO_WSUTIL1_PREFIX LASSO_XML_ERROR_ATTR_NOT_FOUND LASSO_XML_ERROR_ATTR_VALUE_NOT_FOUND LASSO_XML_ERROR_INVALID_FILE LASSO_XML_ERROR_MISSING_NAMESPACE LASSO_XML_ERROR_NODE_CONTENT_NOT_FOUND LASSO_XML_ERROR_NODE_NOT_FOUND LASSO_XML_ERROR_OBJECT_CONSTRUCTION_FAILED LASSO_XML_ERROR_SCHEMA_INVALID_FRAGMENT LASSO_XSI_HREF LASSO_XSI_PREFIX struct LassoAssertionQuery { LassoAssertionQueryPrivate* private_data } LassoAssertionQueryRequestType LassoCheckVersionMode struct LassoDefederation { } struct LassoDsKeyInfo { LassoDsKeyValue* KeyValue } struct LassoDsKeyValue { LassoDsRsaKeyValue* RSAKeyValue } struct LassoDsRsaKeyValue { char* Modulus, char* Exponent } struct LassoEcp { gchar* assertionConsumerURL, LassoEcpPrivate* private_data } LassoEncryptionMode LassoEncryptionSymKeyType struct LassoFederation { gchar* remote_providerID, LassoNode* local_nameIdentifier, LassoNode* remote_nameIdentifier, LassoFederationPrivate* private_data } LassoHttpMethod struct LassoIdentity { GHashTable* federations, gboolean is_dirty, LassoIdentityPrivate* private_data } struct LassoLecp { LassoLibAuthnRequestEnvelope* authnRequestEnvelope, LassoLibAuthnResponseEnvelope* authnResponseEnvelope, char* assertionConsumerServiceURL } struct LassoLibAssertion { char* InResponseTo } struct LassoLibAuthenticationStatement { LassoLibAuthnContext* AuthnContext, char* ReauthenticateOnOrAfter, char* SessionIndex } struct LassoLibAuthnContext { char* AuthnContextClassRef, char* AuthnContextStatementRef } struct LassoLibAuthnRequest { GList* Extension, char* ProviderID, char* AffiliationID, char* NameIDPolicy, gboolean ForceAuthn, gboolean IsPassive, char* ProtocolProfile, char* AssertionConsumerServiceID, LassoLibRequestAuthnContext* RequestAuthnContext, char* RelayState, LassoLibScoping* Scoping, char* consent } struct LassoLibAuthnRequestEnvelope { GList* Extension, LassoLibAuthnRequest* AuthnRequest, char* ProviderID, char* ProviderName, char* AssertionConsumerServiceURL, LassoLibIDPList* IDPList, gboolean IsPassive } struct LassoLibAuthnResponse { GList* Extension, char* ProviderID, char* RelayState, char* consent } struct LassoLibAuthnResponseEnvelope { GList* Extension, LassoLibAuthnResponse* AuthnResponse, char* AssertionConsumerServiceURL } struct LassoLibFederationTerminationNotification { GList* Extension, char* ProviderID, LassoSamlNameIdentifier* NameIdentifier, char* consent, char* RelayState } struct LassoLibIDPEntries { GList* IDPEntry } struct LassoLibIDPEntry { char* ProviderID, char* ProviderName, char* Loc } struct LassoLibIDPList { LassoLibIDPEntries* IDPEntries, char* GetComplete } struct LassoLibLogoutRequest { GList* Extension, char* ProviderID, LassoSamlNameIdentifier* NameIdentifier, char* SessionIndex, char* RelayState, char* consent, char* NotOnOrAfter } struct LassoLibLogoutResponse { } struct LassoLibNameIdentifierMappingRequest { GList* Extension, char* ProviderID, LassoSamlNameIdentifier* NameIdentifier, char* TargetNamespace, char* consent } struct LassoLibNameIdentifierMappingResponse { GList* Extension, char* ProviderID, LassoSamlpStatus* Status, LassoSamlNameIdentifier* NameIdentifier } struct LassoLibRegisterNameIdentifierRequest { GList* Extension, char* ProviderID, LassoSamlNameIdentifier* IDPProvidedNameIdentifier, LassoSamlNameIdentifier* SPProvidedNameIdentifier, LassoSamlNameIdentifier* OldProvidedNameIdentifier, char* RelayState } struct LassoLibRegisterNameIdentifierResponse { } struct LassoLibRequestAuthnContext { GList* AuthnContextClassRef, GList* AuthnContextStatementRef, char* AuthnContextComparison } struct LassoLibScoping { int ProxyCount, LassoLibIDPList* IDPList } struct LassoLibStatusResponse { GList* Extension, char* ProviderID, LassoSamlpStatus* Status, char* RelayState } struct LassoLibSubject { LassoSamlNameIdentifier* IDPProvidedNameIdentifier } struct LassoLogin { LassoLoginProtocolProfile protocolProfile, gchar* assertionArtifact, LassoSamlAssertion* assertion, gchar* nameIDPolicy, LassoHttpMethod http_method, LassoLoginPrivate* private_data } LassoLoginProtocolProfile struct LassoLogout { LassoNode* initial_request, LassoNode* initial_response, gchar* initial_remote_providerID, gint providerID_index, LassoHttpMethod initial_http_request_method, LassoLogoutPrivate* private_data } LassoMdProtocolType LassoMessageFormat struct LassoMiscTextNode { char* content, char* name, char* ns_href, char* ns_prefix, gboolean text_child } struct LassoNameIdManagement { } struct LassoNameIdentifierMapping { gchar* targetNameIdentifier } struct LassoNameRegistration { LassoSamlNameIdentifier* oldNameIdentifier } struct LassoNode { } struct LassoProfile { LassoServer* server, LassoNode* request, LassoNode* response, LassoNode* nameIdentifier, gchar* remote_providerID, gchar* msg_url, gchar* msg_body, gchar* msg_relayState, LassoIdentity* identity, LassoSession* session, LassoHttpMethod http_request_method, gint signature_status, LassoProfilePrivate* private_data } LassoProfileSignatureHint LassoProfileSignatureVerifyHint LassoProtocolConformance struct LassoProvider { gchar* ProviderID, LassoProviderRole role, char* metadata_filename, gchar* public_key, gchar* ca_cert_chain, LassoProviderPrivate* private_data } LassoProviderRole LassoRequestType struct LassoSaml2Action { char* content, char* Namespace } struct LassoSaml2Advice { GList* AssertionIDRef, GList* AssertionURIRef, GList* Assertion, GList* EncryptedAssertion } struct LassoSaml2Assertion { LassoSaml2NameID* Issuer, LassoSaml2Subject* Subject, LassoSaml2Conditions* Conditions, LassoSaml2Advice* Advice, GList* Statement, GList* AuthnStatement, GList* AuthzDecisionStatement, GList* AttributeStatement, char* Version, char* ID, char* IssueInstant, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file, gboolean encryption_activated, char* encryption_public_key_str, LassoEncryptionSymKeyType encryption_sym_key_type } LassoSaml2AssertionValidationState struct LassoSaml2Attribute { GList* AttributeValue, char* Name, char* NameFormat, char* FriendlyName } struct LassoSaml2AttributeStatement { GList* Attribute, GList* EncryptedAttribute } struct LassoSaml2AttributeValue { GList* any } struct LassoSaml2AudienceRestriction { char* Audience } struct LassoSaml2AuthnContext { char* AuthnContextClassRef, char* AuthnContextDeclRef, char* AuthenticatingAuthority } struct LassoSaml2AuthnStatement { LassoSaml2SubjectLocality* SubjectLocality, LassoSaml2AuthnContext* AuthnContext, char* AuthnInstant, char* SessionIndex, char* SessionNotOnOrAfter } struct LassoSaml2AuthzDecisionStatement { LassoSaml2Action* Action, LassoSaml2Evidence* Evidence, char* Resource, char* Decision } struct LassoSaml2BaseIDAbstract { char* NameQualifier, char* SPNameQualifier } struct LassoSaml2ConditionAbstract { } struct LassoSaml2Conditions { GList* Condition, GList* AudienceRestriction, GList* OneTimeUse, GList* ProxyRestriction, char* NotBefore, char* NotOnOrAfter } struct LassoSaml2EncryptedElement { xmlNode* EncryptedData, GList* EncryptedKey, LassoNode* original_data } struct LassoSaml2Evidence { GList* AssertionIDRef, GList* AssertionURIRef, GList* Assertion, GList* EncryptedAssertion } struct LassoSaml2KeyInfoConfirmationData { } struct LassoSaml2NameID { char* content, char* Format, char* SPProvidedID, char* NameQualifier, char* SPNameQualifier } struct LassoSaml2OneTimeUse { } struct LassoSaml2ProxyRestriction { char* Audience, char* Count } struct LassoSaml2StatementAbstract { } struct LassoSaml2Subject { LassoSaml2BaseIDAbstract* BaseID, LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, LassoSaml2SubjectConfirmation* SubjectConfirmation } struct LassoSaml2SubjectConfirmation { LassoSaml2BaseIDAbstract* BaseID, LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, LassoSaml2SubjectConfirmationData* SubjectConfirmationData, char* Method } struct LassoSaml2SubjectConfirmationData { char* NotBefore, char* NotOnOrAfter, char* Recipient, char* InResponseTo, char* Address } struct LassoSaml2SubjectLocality { char* Address, char* DNSName } struct LassoSamlAdvice { GList* AssertionIDReference, LassoNode* Assertion } struct LassoSamlAssertion { LassoSamlConditions* Conditions, LassoSamlAdvice* Advice, LassoSamlSubjectStatement* SubjectStatement, LassoSamlAuthenticationStatement* AuthenticationStatement, LassoSamlAttributeStatement* AttributeStatement, int MajorVersion, int MinorVersion, char* AssertionID, char* Issuer, char* IssueInstant, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlAttribute { gchar* attributeName, gchar* attributeNameSpace, GList* AttributeValue } struct LassoSamlAttributeDesignator { char* AttributeName, char* AttributeNamespace } struct LassoSamlAttributeStatement { GList* Attribute } struct LassoSamlAttributeValue { GList* any } struct LassoSamlAudienceRestrictionCondition { GList* Audience } struct LassoSamlAuthenticationStatement { LassoSamlSubjectLocality* SubjectLocality, GList* AuthorityBinding, char* AuthenticationMethod, char* AuthenticationInstant } struct LassoSamlAuthorityBinding { char* AuthorityKind, char* Location, char* Binding } struct LassoSamlConditionAbstract { } struct LassoSamlConditions { GList* Condition, GList* AudienceRestrictionCondition, char* NotBefore, char* NotOnOrAfter } struct LassoSamlNameIdentifier { char* NameQualifier, char* Format, char* content } struct LassoSamlStatementAbstract { } struct LassoSamlSubject { LassoSamlNameIdentifier* NameIdentifier, LassoSamlSubjectConfirmation* SubjectConfirmation, LassoSaml2EncryptedElement* EncryptedNameIdentifier } struct LassoSamlSubjectConfirmation { GList* ConfirmationMethod, char* SubjectConfirmationData, LassoDsKeyInfo* KeyInfo } struct LassoSamlSubjectLocality { char* IPAddress, char* DNSAddress } struct LassoSamlSubjectStatement { } struct LassoSamlSubjectStatementAbstract { LassoSamlSubject* Subject } struct LassoSamlp2ArtifactResolve { char* Artifact } struct LassoSamlp2ArtifactResponse { LassoNode* any } struct LassoSamlp2AssertionIDRequest { char* AssertionIDRef } struct LassoSamlp2AttributeQuery { GList* Attribute } struct LassoSamlp2AuthnQuery { LassoSamlp2RequestedAuthnContext* RequestedAuthnContext, char* SessionIndex } struct LassoSamlp2AuthnRequest { LassoSaml2Subject* Subject, LassoSamlp2NameIDPolicy* NameIDPolicy, LassoSaml2Conditions* Conditions, LassoSamlp2RequestedAuthnContext* RequestedAuthnContext, LassoSamlp2Scoping* Scoping, gboolean ForceAuthn, gboolean IsPassive, char* ProtocolBinding, int AssertionConsumerServiceIndex, char* AssertionConsumerServiceURL, int AttributeConsumingServiceIndex, char* ProviderName, G_GNUC_DEPRECATED char } struct LassoSamlp2AuthzDecisionQuery { LassoSaml2Action* Action, LassoSaml2Evidence* Evidence, char* Resource } struct LassoSamlp2Extensions { } struct LassoSamlp2IDPEntry { char* ProviderID, char* Name, char* Loc } struct LassoSamlp2IDPList { LassoSamlp2IDPEntry* IDPEntry, char* GetComplete } struct LassoSamlp2LogoutRequest { LassoSaml2BaseIDAbstract* BaseID, LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, char* SessionIndex, char* Reason, char* NotOnOrAfter, G_GNUC_DEPRECATED char } struct LassoSamlp2LogoutResponse { G_GNUC_DEPRECATED char } struct LassoSamlp2ManageNameIDRequest { LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, char* NewID, LassoSaml2EncryptedElement* NewEncryptedID, LassoSamlp2Terminate* Terminate } struct LassoSamlp2ManageNameIDResponse { } struct LassoSamlp2NameIDMappingRequest { LassoSaml2BaseIDAbstract* BaseID, LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, LassoSamlp2NameIDPolicy* NameIDPolicy } struct LassoSamlp2NameIDMappingResponse { LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID } struct LassoSamlp2NameIDPolicy { char* Format, char* SPNameQualifier, gboolean AllowCreate } struct LassoSamlp2RequestAbstract { LassoSaml2NameID* Issuer, LassoSamlp2Extensions* Extensions, char* ID, char* Version, char* IssueInstant, char* Destination, char* Consent, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlp2RequestedAuthnContext { GList* AuthnContextClassRef, GList* AuthnContextDeclRef, char* Comparison } struct LassoSamlp2Response { GList* Assertion, GList* EncryptedAssertion } struct LassoSamlp2Scoping { LassoSamlp2IDPList* IDPList, char* RequesterID, char* ProxyCount } struct LassoSamlp2Status { LassoSamlp2StatusCode* StatusCode, char* StatusMessage, LassoSamlp2StatusDetail* StatusDetail } struct LassoSamlp2StatusCode { LassoSamlp2StatusCode* StatusCode, char* Value } struct LassoSamlp2StatusDetail { } struct LassoSamlp2StatusResponse { LassoSaml2NameID* Issuer, LassoSamlp2Extensions* Extensions, LassoSamlp2Status* Status, char* ID, char* InResponseTo, char* Version, char* IssueInstant, char* Destination, char* Consent, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlp2SubjectQueryAbstract { LassoSaml2Subject* Subject } struct LassoSamlp2Terminate { } struct LassoSamlpRequest { char* AssertionArtifact } struct LassoSamlpRequestAbstract { GList* RespondWith, char* RequestID, int MajorVersion, int MinorVersion, char* IssueInstant, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlpResponse { LassoSamlpStatus* Status, GList* Assertion } struct LassoSamlpResponseAbstract { char* ResponseID, char* InResponseTo, int MajorVersion, int MinorVersion, char* IssueInstant, char* Recipient, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlpStatus { LassoSamlpStatusCode* StatusCode, char* StatusMessage } struct LassoSamlpStatusCode { LassoSamlpStatusCode* StatusCode, char* Value } struct LassoServer { GHashTable* providers, GHashTable* services, gchar* private_key, gchar* private_key_password, gchar* certificate, LassoSignatureMethod signature_method, LassoServerPrivate* private_data } struct LassoSession { GHashTable* assertions, gboolean is_dirty, LassoSessionPrivate* private_data } LassoSignatureMethod LassoSignatureType struct LassoSoapBody { GList* any, gchar* Id } struct LassoSoapDetail { GList* any } struct LassoSoapEnvelope { LassoSoapHeader* Header, LassoSoapBody* Body } struct LassoSoapFault { gchar* faultcode, gchar* faultstring, GList* faultactor, LassoSoapDetail* Detail } struct LassoSoapHeader { GList* Other } lasso_error_t lasso_assertion_query_add_attribute_request ( LassoAssertionQuery* assertion_query, char* format, char* name ) lasso_error_t lasso_assertion_query_build_request_msg ( LassoAssertionQuery* assertion_query ) lasso_error_t lasso_assertion_query_build_response_msg ( LassoAssertionQuery* assertion_query ) None lasso_assertion_query_destroy ( LassoAssertionQuery* assertion_query ) LassoAssertionQueryRequestType lasso_assertion_query_get_request_type ( LassoAssertionQuery* assertion_query ) GType lasso_assertion_query_get_type ( ) lasso_error_t lasso_assertion_query_init_request ( LassoAssertionQuery* assertion_query, char* remote_provider_id, LassoHttpMethod http_method, LassoAssertionQueryRequestType query_request_type ) LassoAssertionQuery* lasso_assertion_query_new ( LassoServer* server ) lasso_error_t lasso_assertion_query_process_request_msg ( LassoAssertionQuery* assertion_query, gchar* request_msg ) lasso_error_t lasso_assertion_query_process_response_msg ( LassoAssertionQuery* assertion_query, gchar* response_msg ) lasso_error_t lasso_assertion_query_validate_request ( LassoAssertionQuery* assertion_query ) char* lasso_build_unique_id ( unsigned int size ) int lasso_check_version ( int major, int minor, int subminor, LassoCheckVersionMode mode ) lasso_error_t lasso_defederation_build_notification_msg ( LassoDefederation* defederation ) None lasso_defederation_destroy ( LassoDefederation* defederation ) GType lasso_defederation_get_type ( ) lasso_error_t lasso_defederation_init_notification ( LassoDefederation* defederation, gchar* remote_providerID, LassoHttpMethod http_method ) LassoDefederation* lasso_defederation_new ( LassoServer* server ) lasso_error_t lasso_defederation_process_notification_msg ( LassoDefederation* defederation, gchar* notification_msg ) lasso_error_t lasso_defederation_validate_notification ( LassoDefederation* defederation ) GType lasso_ds_key_info_get_type ( ) LassoDsKeyInfo* lasso_ds_key_info_new ( ) GType lasso_ds_key_value_get_type ( ) LassoDsKeyValue* lasso_ds_key_value_new ( ) GType lasso_ds_rsa_key_value_get_type ( ) LassoDsRsaKeyValue* lasso_ds_rsa_key_value_new ( ) None lasso_ecp_destroy ( LassoEcp* ecp ) GType lasso_ecp_get_type ( ) LassoEcp* lasso_ecp_new ( LassoServer* server ) lasso_error_t lasso_ecp_process_authn_request_msg ( LassoEcp* ecp, const char* authn_request_msg ) lasso_error_t lasso_ecp_process_response_msg ( LassoEcp* ecp, const char* response_msg ) None lasso_federation_build_local_name_identifier ( LassoFederation* federation, const gchar* nameQualifier, const gchar* format, const gchar* content ) None lasso_federation_destroy ( LassoFederation* federation ) GType lasso_federation_get_type ( ) LassoFederation* lasso_federation_new ( const gchar* remote_providerID ) gboolean lasso_federation_verify_name_identifier ( LassoFederation* federation, LassoNode* name_identifier ) char* lasso_get_prefix_for_dst_service_href ( const char* href ) gchar* lasso_get_prefix_for_idwsf2_dst_service_href ( const gchar* href ) None lasso_identity_destroy ( LassoIdentity* identity ) gchar* lasso_identity_dump ( LassoIdentity* identity ) LassoFederation* lasso_identity_get_federation ( LassoIdentity* identity, const char* providerID ) GType lasso_identity_get_type ( ) LassoIdentity* lasso_identity_new ( ) LassoIdentity* lasso_identity_new_from_dump ( const gchar* dump ) lasso_error_t lasso_init ( ) lasso_error_t lasso_lecp_build_authn_request_envelope_msg ( LassoLecp* lecp ) lasso_error_t lasso_lecp_build_authn_request_msg ( LassoLecp* lecp ) lasso_error_t lasso_lecp_build_authn_response_envelope_msg ( LassoLecp* lecp ) lasso_error_t lasso_lecp_build_authn_response_msg ( LassoLecp* lecp ) None lasso_lecp_destroy ( LassoLecp* lecp ) GType lasso_lecp_get_type ( ) lasso_error_t lasso_lecp_init_authn_request ( LassoLecp* lecp, const char* remote_providerID ) LassoLecp* lasso_lecp_new ( LassoServer* server ) lasso_error_t lasso_lecp_process_authn_request_envelope_msg ( LassoLecp* lecp, const char* request_msg ) lasso_error_t lasso_lecp_process_authn_request_msg ( LassoLecp* lecp, const char* authn_request_msg ) lasso_error_t lasso_lecp_process_authn_response_envelope_msg ( LassoLecp* lecp, const char* response_msg ) GType lasso_lib_assertion_get_type ( ) LassoLibAssertion* lasso_lib_assertion_new ( ) LassoLibAssertion* lasso_lib_assertion_new_full ( const char* issuer, const char* requestID, const char* audience, const char* notBefore, const char* notOnOrAfter ) GType lasso_lib_authentication_statement_get_type ( ) LassoLibAuthenticationStatement* lasso_lib_authentication_statement_new ( ) LassoLibAuthenticationStatement* lasso_lib_authentication_statement_new_full ( const char* authenticationMethod, const char* authenticationInstant, const char* reauthenticateOnOrAfter, LassoSamlNameIdentifier* sp_identifier, LassoSamlNameIdentifier* idp_identifier ) GType lasso_lib_authn_context_get_type ( ) LassoNode* lasso_lib_authn_context_new ( ) GType lasso_lib_authn_request_envelope_get_type ( ) LassoLibAuthnRequestEnvelope* lasso_lib_authn_request_envelope_new ( ) LassoLibAuthnRequestEnvelope* lasso_lib_authn_request_envelope_new_full ( LassoLibAuthnRequest* authnRequest, char* providerID, char* assertionConsumerServiceURL ) GType lasso_lib_authn_request_get_type ( ) LassoLibAuthnRequest* lasso_lib_authn_request_new ( ) GType lasso_lib_authn_response_envelope_get_type ( ) LassoLibAuthnResponseEnvelope* lasso_lib_authn_response_envelope_new ( LassoLibAuthnResponse* response, char* assertionConsumerServiceURL ) GType lasso_lib_authn_response_get_type ( ) LassoNode* lasso_lib_authn_response_new ( char* providerID, LassoLibAuthnRequest* request ) GType lasso_lib_federation_termination_notification_get_type ( ) LassoNode* lasso_lib_federation_termination_notification_new ( ) LassoNode* lasso_lib_federation_termination_notification_new_full ( char* providerID, LassoSamlNameIdentifier* nameIdentifier, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_idp_entries_get_type ( ) LassoNode* lasso_lib_idp_entries_new ( ) GType lasso_lib_idp_entry_get_type ( ) LassoNode* lasso_lib_idp_entry_new ( ) GType lasso_lib_idp_list_get_type ( ) LassoNode* lasso_lib_idp_list_new ( ) GType lasso_lib_logout_request_get_type ( ) LassoNode* lasso_lib_logout_request_new ( ) LassoNode* lasso_lib_logout_request_new_full ( char* providerID, LassoSamlNameIdentifier* nameIdentifier, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_logout_response_get_type ( ) LassoNode* lasso_lib_logout_response_new ( ) LassoNode* lasso_lib_logout_response_new_full ( char* providerID, const char* statusCodeValue, LassoLibLogoutRequest* request, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_name_identifier_mapping_request_get_type ( ) LassoNode* lasso_lib_name_identifier_mapping_request_new ( ) LassoNode* lasso_lib_name_identifier_mapping_request_new_full ( char* providerID, LassoSamlNameIdentifier* nameIdentifier, const char* targetNamespace, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_name_identifier_mapping_response_get_type ( ) LassoNode* lasso_lib_name_identifier_mapping_response_new ( ) LassoNode* lasso_lib_name_identifier_mapping_response_new_full ( char* provideRID, const char* statusCodeValue, LassoLibNameIdentifierMappingRequest* request, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_register_name_identifier_request_get_type ( ) LassoNode* lasso_lib_register_name_identifier_request_new ( ) LassoNode* lasso_lib_register_name_identifier_request_new_full ( const char* providerID, LassoSamlNameIdentifier* idpNameIdentifier, LassoSamlNameIdentifier* spNameIdentifier, LassoSamlNameIdentifier* oldNameIdentifier, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_register_name_identifier_response_get_type ( ) LassoNode* lasso_lib_register_name_identifier_response_new ( ) LassoNode* lasso_lib_register_name_identifier_response_new_full ( const char* providerID, const char* statusCodeValue, LassoLibRegisterNameIdentifierRequest* request, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_request_authn_context_get_type ( ) LassoLibRequestAuthnContext* lasso_lib_request_authn_context_new ( ) GType lasso_lib_scoping_get_type ( ) LassoLibScoping* lasso_lib_scoping_new ( ) GType lasso_lib_status_response_get_type ( ) LassoNode* lasso_lib_status_response_new ( ) GType lasso_lib_subject_get_type ( ) LassoLibSubject* lasso_lib_subject_new ( ) lasso_error_t lasso_login_accept_sso ( LassoLogin* login ) lasso_error_t lasso_login_build_artifact_msg ( LassoLogin* login, LassoHttpMethod http_method ) lasso_error_t lasso_login_build_assertion ( LassoLogin* login, const char* authenticationMethod, const char* authenticationInstant, const char* reauthenticateOnOrAfter, const char* notBefore, const char* notOnOrAfter ) lasso_error_t lasso_login_build_authn_request_msg ( LassoLogin* login ) lasso_error_t lasso_login_build_authn_response_msg ( LassoLogin* login ) lasso_error_t lasso_login_build_request_msg ( LassoLogin* login ) lasso_error_t lasso_login_build_response_msg ( LassoLogin* login, gchar* remote_providerID ) None lasso_login_destroy ( LassoLogin* login ) gchar* lasso_login_dump ( LassoLogin* login ) LassoNode* lasso_login_get_assertion ( LassoLogin* login ) GType lasso_login_get_type ( ) lasso_error_t lasso_login_init_authn_request ( LassoLogin* login, const gchar* remote_providerID, LassoHttpMethod http_method ) lasso_error_t lasso_login_init_idp_initiated_authn_request ( LassoLogin* login, const gchar* remote_providerID ) lasso_error_t lasso_login_init_request ( LassoLogin* login, gchar* response_msg, LassoHttpMethod response_http_method ) gboolean lasso_login_must_ask_for_consent ( LassoLogin* login ) gboolean lasso_login_must_authenticate ( LassoLogin* login ) LassoLogin* lasso_login_new ( LassoServer* server ) LassoLogin* lasso_login_new_from_dump ( LassoServer* server, const gchar* dump ) lasso_error_t lasso_login_process_authn_request_msg ( LassoLogin* login, const char* authn_request_msg ) lasso_error_t lasso_login_process_authn_response_msg ( LassoLogin* login, gchar* authn_response_msg ) lasso_error_t lasso_login_process_paos_response_msg ( LassoLogin* login, gchar* msg ) lasso_error_t lasso_login_process_request_msg ( LassoLogin* login, gchar* request_msg ) lasso_error_t lasso_login_process_response_msg ( LassoLogin* login, gchar* response_msg ) lasso_error_t lasso_login_validate_request_msg ( LassoLogin* login, gboolean authentication_result, gboolean is_consent_obtained ) lasso_error_t lasso_logout_build_request_msg ( LassoLogout* logout ) lasso_error_t lasso_logout_build_response_msg ( LassoLogout* logout ) None lasso_logout_destroy ( LassoLogout* logout ) gchar* lasso_logout_dump ( LassoLogout* logout ) gchar* lasso_logout_get_next_providerID ( LassoLogout* logout ) GType lasso_logout_get_type ( ) lasso_error_t lasso_logout_init_request ( LassoLogout* logout, gchar* remote_providerID, LassoHttpMethod request_method ) LassoLogout* lasso_logout_new ( LassoServer* server ) LassoLogout* lasso_logout_new_from_dump ( LassoServer* server, const gchar* dump ) lasso_error_t lasso_logout_process_request_msg ( LassoLogout* logout, gchar* request_msg ) lasso_error_t lasso_logout_process_response_msg ( LassoLogout* logout, gchar* response_msg ) lasso_error_t lasso_logout_reset_providerID_index ( LassoLogout* logout ) lasso_error_t lasso_logout_validate_request ( LassoLogout* logout ) GType lasso_misc_text_node_get_type ( ) xmlNode* lasso_misc_text_node_get_xml_content ( LassoMiscTextNode* misc_text_node ) LassoNode* lasso_misc_text_node_new ( ) LassoMiscTextNode* lasso_misc_text_node_new_with_string ( const char* content ) LassoMiscTextNode* lasso_misc_text_node_new_with_xml_node ( xmlNode* xml_node ) None lasso_misc_text_node_set_xml_content ( LassoMiscTextNode* misc_text_node, xmlNode* node ) lasso_error_t lasso_name_id_management_build_request_msg ( LassoNameIdManagement* name_id_management ) lasso_error_t lasso_name_id_management_build_response_msg ( LassoNameIdManagement* name_id_management ) None lasso_name_id_management_destroy ( LassoNameIdManagement* name_id_management ) char* lasso_name_id_management_dump ( LassoNameIdManagement* name_id_management ) GType lasso_name_id_management_get_type ( ) lasso_error_t lasso_name_id_management_init_request ( LassoNameIdManagement* name_id_management, char* remote_provider_id, char* new_name_id, LassoHttpMethod http_method ) LassoNameIdManagement* lasso_name_id_management_new ( LassoServer* server ) LassoNameIdManagement* lasso_name_id_management_new_from_dump ( LassoServer* server, const char* dump ) lasso_error_t lasso_name_id_management_process_request_msg ( LassoNameIdManagement* name_id_management, gchar* request_msg ) lasso_error_t lasso_name_id_management_process_response_msg ( LassoNameIdManagement* name_id_management, gchar* response_msg ) lasso_error_t lasso_name_id_management_validate_request ( LassoNameIdManagement* name_id_management ) lasso_error_t lasso_name_identifier_mapping_build_request_msg ( LassoNameIdentifierMapping* mapping ) lasso_error_t lasso_name_identifier_mapping_build_response_msg ( LassoNameIdentifierMapping* mapping ) None lasso_name_identifier_mapping_destroy ( LassoNameIdentifierMapping* mapping ) GType lasso_name_identifier_mapping_get_type ( ) lasso_error_t lasso_name_identifier_mapping_init_request ( LassoNameIdentifierMapping* mapping, gchar* targetNamespace, gchar* remote_providerID ) LassoNameIdentifierMapping* lasso_name_identifier_mapping_new ( LassoServer* server ) lasso_error_t lasso_name_identifier_mapping_process_request_msg ( LassoNameIdentifierMapping* mapping, gchar* request_msg ) lasso_error_t lasso_name_identifier_mapping_process_response_msg ( LassoNameIdentifierMapping* mapping, gchar* response_msg ) lasso_error_t lasso_name_identifier_mapping_validate_request ( LassoNameIdentifierMapping* mapping ) lasso_error_t lasso_name_registration_build_request_msg ( LassoNameRegistration* name_registration ) lasso_error_t lasso_name_registration_build_response_msg ( LassoNameRegistration* name_registration ) None lasso_name_registration_destroy ( LassoNameRegistration* name_registration ) gchar* lasso_name_registration_dump ( LassoNameRegistration* name_registration ) GType lasso_name_registration_get_type ( ) lasso_error_t lasso_name_registration_init_request ( LassoNameRegistration* name_registration, char* remote_providerID, LassoHttpMethod http_method ) LassoNameRegistration* lasso_name_registration_new ( LassoServer* server ) LassoNameRegistration* lasso_name_registration_new_from_dump ( LassoServer* server, const char* dump ) lasso_error_t lasso_name_registration_process_request_msg ( LassoNameRegistration* name_registration, gchar* request_msg ) lasso_error_t lasso_name_registration_process_response_msg ( LassoNameRegistration* name_registration, gchar* response_msg ) lasso_error_t lasso_name_registration_validate_request ( LassoNameRegistration* name_registration ) None lasso_node_cleanup_original_xmlnodes ( LassoNode* node ) char* lasso_node_debug ( LassoNode* node, int level ) None lasso_node_destroy ( LassoNode* node ) char* lasso_node_dump ( LassoNode* node ) char* lasso_node_export_to_base64 ( LassoNode* node ) char* lasso_node_export_to_ecp_soap_response ( LassoNode* node, const char* assertionConsumerURL ) char* lasso_node_export_to_paos_request ( LassoNode* node, const char* issuer, const char* responseConsumerURL, const char* relay_state ) char* lasso_node_export_to_query ( LassoNode* node, LassoSignatureMethod sign_method, const char* private_key_file ) char* lasso_node_export_to_query_with_password ( LassoNode* node, LassoSignatureMethod sign_method, const char* private_key_file, const char* private_key_file_password ) char* lasso_node_export_to_soap ( LassoNode* node ) gchar* lasso_node_export_to_xml ( LassoNode* node ) const char* lasso_node_get_name ( LassoNode* node ) const char* lasso_node_get_namespace ( LassoNode* node ) xmlNode* lasso_node_get_original_xmlnode ( LassoNode* node ) GType lasso_node_get_type ( ) xmlNode* lasso_node_get_xmlNode ( LassoNode* node, gboolean lasso_dump ) LassoMessageFormat lasso_node_init_from_message ( LassoNode* node, const char* message ) gboolean lasso_node_init_from_query ( LassoNode* node, const char* query ) lasso_error_t lasso_node_init_from_xml ( LassoNode* node, xmlNode* xmlnode ) LassoNode* lasso_node_new ( ) LassoNode* lasso_node_new_from_dump ( const char* dump ) LassoNode* lasso_node_new_from_soap ( const char* soap ) LassoNode* lasso_node_new_from_xmlNode ( xmlNode* node ) None lasso_node_set_custom_namespace ( LassoNode* node, const char* prefix, const char* href ) None lasso_node_set_custom_nodename ( LassoNode* node, const char* nodename ) None lasso_node_set_original_xmlnode ( LassoNode* node, xmlNode* xmlnode ) char* lasso_profile_get_artifact ( LassoProfile* profile ) char* lasso_profile_get_artifact_message ( LassoProfile* profile ) LassoIdentity* lasso_profile_get_identity ( LassoProfile* profile ) LassoNode* lasso_profile_get_nameIdentifier ( LassoProfile* profile ) LassoRequestType lasso_profile_get_request_type_from_soap_msg ( const gchar* soap ) LassoSession* lasso_profile_get_session ( LassoProfile* profile ) LassoProfileSignatureHint lasso_profile_get_signature_hint ( LassoProfile* profile ) lasso_error_t lasso_profile_get_signature_status ( LassoProfile* profile ) LassoProfileSignatureVerifyHint lasso_profile_get_signature_verify_hint ( LassoProfile* profile ) GType lasso_profile_get_type ( ) gboolean lasso_profile_is_identity_dirty ( LassoProfile* profile ) gboolean lasso_profile_is_liberty_query ( const gchar* query ) gboolean lasso_profile_is_saml_query ( const gchar* query ) gboolean lasso_profile_is_session_dirty ( LassoProfile* profile ) None lasso_profile_set_artifact_message ( LassoProfile* profile, const char* message ) lasso_error_t lasso_profile_set_identity_from_dump ( LassoProfile* profile, const gchar* dump ) lasso_error_t lasso_profile_set_session_from_dump ( LassoProfile* profile, const gchar* dump ) None lasso_profile_set_signature_hint ( LassoProfile* profile, LassoProfileSignatureHint signature_hint ) None lasso_profile_set_signature_verify_hint ( LassoProfile* profile, LassoProfileSignatureVerifyHint signature_verify_hint ) lasso_error_t lasso_profile_set_soap_fault_response ( LassoProfile* profile, const char* faultcode, const char* faultstring, GList* details ) LassoProviderRole lasso_profile_sso_role_with ( LassoProfile* profile, const char* remote_provider_id ) gboolean lasso_provider_accept_http_method ( LassoProvider* provider, LassoProvider* remote_provider, LassoMdProtocolType protocol_type, LassoHttpMethod http_method, gboolean initiate_profile ) gchar* lasso_provider_get_assertion_consumer_service_url ( LassoProvider* provider, const char* service_id ) gchar* lasso_provider_get_base64_succinct_id ( const LassoProvider* provider ) char* lasso_provider_get_cache_duration ( LassoProvider* provider ) gchar* lasso_provider_get_default_name_id_format ( LassoProvider* provider ) LassoEncryptionMode lasso_provider_get_encryption_mode ( LassoProvider* provider ) LassoHttpMethod lasso_provider_get_first_http_method ( LassoProvider* provider, LassoProvider* remote_provider, LassoMdProtocolType protocol_type ) GList* lasso_provider_get_idp_supported_attributes ( LassoProvider* provider ) GList* lasso_provider_get_metadata_keys_for_role ( LassoProvider* provider, LassoProviderRole role ) GList* lasso_provider_get_metadata_list ( LassoProvider* provider, const char* name ) GList* lasso_provider_get_metadata_list_for_role ( const LassoProvider* provider, LassoProviderRole role, const char* name ) gchar* lasso_provider_get_metadata_one ( LassoProvider* provider, const char* name ) char* lasso_provider_get_metadata_one_for_role ( LassoProvider* provider, LassoProviderRole role, const char* name ) xmlNode* lasso_provider_get_organization ( const LassoProvider* provider ) LassoProtocolConformance lasso_provider_get_protocol_conformance ( const LassoProvider* provider ) LassoProviderRole lasso_provider_get_roles ( LassoProvider* provider ) const char* lasso_provider_get_sp_name_qualifier ( LassoProvider* provider ) GType lasso_provider_get_type ( ) char* lasso_provider_get_valid_until ( LassoProvider* provider ) gboolean lasso_provider_has_protocol_profile ( LassoProvider* provider, LassoMdProtocolType protocol_type, const char* protocol_profile ) gboolean lasso_provider_match_conformance ( LassoProvider* provider, LassoProvider* another_provider ) LassoProvider* lasso_provider_new ( LassoProviderRole role, const char* metadata, const char* public_key, const char* ca_cert_chain ) LassoProvider* lasso_provider_new_from_buffer ( LassoProviderRole role, const char* metadata, const char* public_key, const char* ca_cert_chain ) LassoProvider* lasso_provider_new_from_dump ( const gchar* dump ) LassoSaml2EncryptedElement* lasso_provider_saml2_node_encrypt ( const LassoProvider* provider, LassoNode* lasso_node ) None lasso_provider_set_encryption_mode ( LassoProvider* provider, LassoEncryptionMode encryption_mode ) None lasso_provider_set_encryption_sym_key_type ( LassoProvider* provider, LassoEncryptionSymKeyType encryption_sym_key_type ) lasso_error_t lasso_provider_verify_single_node_signature ( LassoProvider* provider, LassoNode* node, const char* id_attr_name ) None lasso_register_dst_service ( const char* prefix, const char* href ) None lasso_register_idwsf2_dst_service ( const gchar* prefix, const gchar* href ) GType lasso_saml2_action_get_type ( ) LassoNode* lasso_saml2_action_new ( ) LassoNode* lasso_saml2_action_new_with_string ( char* content ) GType lasso_saml2_advice_get_type ( ) LassoNode* lasso_saml2_advice_new ( ) lasso_error_t lasso_saml2_assertion_add_attribute_with_node ( LassoSaml2Assertion* assertion, const char* name, const char* nameformat, LassoNode* content ) None lasso_saml2_assertion_add_audience_restriction ( LassoSaml2Assertion* saml2_assertion, const char* providerID ) None lasso_saml2_assertion_add_proxy_limit ( LassoSaml2Assertion* saml2_assertion, int proxy_count, GList* proxy_audiences ) LassoSaml2AssertionValidationState lasso_saml2_assertion_allows_proxying ( LassoSaml2Assertion* saml2_assertion ) LassoSaml2AssertionValidationState lasso_saml2_assertion_allows_proxying_to ( LassoSaml2Assertion* saml2_assertion, const char* audience ) lasso_error_t lasso_saml2_assertion_decrypt_subject ( LassoSaml2Assertion* assertion, LassoServer* server ) const char* lasso_saml2_assertion_get_in_response_to ( LassoSaml2Assertion* assertion ) LassoProvider* lasso_saml2_assertion_get_issuer_provider ( const LassoSaml2Assertion* saml2_assertion, const LassoServer* server ) LassoSaml2SubjectConfirmationData* lasso_saml2_assertion_get_subject_confirmation_data ( LassoSaml2Assertion* saml2_assertion, gboolean create ) GType lasso_saml2_assertion_get_type ( ) gboolean lasso_saml2_assertion_has_audience_restriction ( LassoSaml2Assertion* saml2_assertion ) gboolean lasso_saml2_assertion_has_one_time_use ( LassoSaml2Assertion* saml2_assertion ) gboolean lasso_saml2_assertion_is_audience_restricted ( LassoSaml2Assertion* saml2_assertion, char* providerID ) LassoNode* lasso_saml2_assertion_new ( ) None lasso_saml2_assertion_set_basic_conditions ( LassoSaml2Assertion* saml2_assertion, time_t tolerance, time_t length, gboolean one_time_use ) None lasso_saml2_assertion_set_one_time_use ( LassoSaml2Assertion* saml2_assertion, gboolean one_time_use ) None lasso_saml2_assertion_set_subject_confirmation_data ( LassoSaml2Assertion* saml2_assertion, time_t tolerance, time_t length, const char* Recipient, const char* InResponseTo, const char* Address ) None lasso_saml2_assertion_set_subject_confirmation_name_id ( LassoSaml2Assertion* saml2_assertion, LassoNode* node ) None lasso_saml2_assertion_set_subject_name_id ( LassoSaml2Assertion* saml2_assertion, LassoNode* node ) LassoSaml2AssertionValidationState lasso_saml2_assertion_validate_audience ( LassoSaml2Assertion* saml2_assertion, const gchar* audience ) LassoSaml2AssertionValidationState lasso_saml2_assertion_validate_conditions ( LassoSaml2Assertion* saml2_assertion, const char* relaying_party_providerID ) LassoSaml2AssertionValidationState lasso_saml2_assertion_validate_time_checks ( LassoSaml2Assertion* saml2_assertion, unsigned int tolerance, time_t now ) GType lasso_saml2_attribute_get_type ( ) LassoNode* lasso_saml2_attribute_new ( ) GType lasso_saml2_attribute_statement_get_type ( ) LassoNode* lasso_saml2_attribute_statement_new ( ) GType lasso_saml2_attribute_value_get_type ( ) LassoSaml2AttributeValue* lasso_saml2_attribute_value_new ( ) GType lasso_saml2_audience_restriction_get_type ( ) LassoNode* lasso_saml2_audience_restriction_new ( ) GType lasso_saml2_authn_context_get_type ( ) LassoNode* lasso_saml2_authn_context_new ( ) GType lasso_saml2_authn_statement_get_type ( ) LassoNode* lasso_saml2_authn_statement_new ( ) GType lasso_saml2_authz_decision_statement_get_type ( ) LassoNode* lasso_saml2_authz_decision_statement_new ( ) GType lasso_saml2_base_idabstract_get_type ( ) LassoNode* lasso_saml2_base_idabstract_new ( ) GType lasso_saml2_condition_abstract_get_type ( ) LassoNode* lasso_saml2_condition_abstract_new ( ) GType lasso_saml2_conditions_get_type ( ) LassoNode* lasso_saml2_conditions_new ( ) LassoSaml2EncryptedElement* lasso_saml2_encrypted_element_build_encrypted_persistent_name_id ( const char* id, const char* idpID, const LassoProvider* provider ) GType lasso_saml2_encrypted_element_get_type ( ) LassoNode* lasso_saml2_encrypted_element_new ( ) lasso_error_t lasso_saml2_encrypted_element_server_decrypt ( LassoSaml2EncryptedElement* encrypted_element, LassoServer* server, LassoNode** decrypted_node ) GType lasso_saml2_evidence_get_type ( ) LassoNode* lasso_saml2_evidence_new ( ) GType lasso_saml2_key_info_confirmation_data_get_type ( ) LassoNode* lasso_saml2_key_info_confirmation_data_new ( ) LassoSaml2NameID* lasso_saml2_name_id_build_persistent ( const char* id, const char* idpID, const char* providerID ) gboolean lasso_saml2_name_id_equals ( LassoSaml2NameID* name_id, LassoSaml2NameID* other_name_id ) GType lasso_saml2_name_id_get_type ( ) LassoNode* lasso_saml2_name_id_new ( ) LassoSaml2NameID* lasso_saml2_name_id_new_with_persistent_format ( const char* id, const char* idpID, const char* providerID ) LassoNode* lasso_saml2_name_id_new_with_string ( char* content ) GType lasso_saml2_one_time_use_get_type ( ) LassoNode* lasso_saml2_one_time_use_new ( ) GType lasso_saml2_proxy_restriction_get_type ( ) LassoNode* lasso_saml2_proxy_restriction_new ( ) GType lasso_saml2_statement_abstract_get_type ( ) LassoNode* lasso_saml2_statement_abstract_new ( ) GType lasso_saml2_subject_confirmation_data_get_type ( ) LassoNode* lasso_saml2_subject_confirmation_data_new ( ) GType lasso_saml2_subject_confirmation_get_type ( ) LassoNode* lasso_saml2_subject_confirmation_new ( ) GType lasso_saml2_subject_get_type ( ) GType lasso_saml2_subject_locality_get_type ( ) LassoNode* lasso_saml2_subject_locality_new ( ) LassoNode* lasso_saml2_subject_new ( ) GType lasso_saml_advice_get_type ( ) LassoNode* lasso_saml_advice_new ( ) GType lasso_saml_assertion_get_type ( ) LassoSamlAssertion* lasso_saml_assertion_new ( ) GType lasso_saml_attribute_designator_get_type ( ) LassoNode* lasso_saml_attribute_designator_new ( ) GType lasso_saml_attribute_get_type ( ) LassoSamlAttribute* lasso_saml_attribute_new ( ) GType lasso_saml_attribute_statement_get_type ( ) LassoSamlAttributeStatement* lasso_saml_attribute_statement_new ( ) GType lasso_saml_attribute_value_get_type ( ) LassoSamlAttributeValue* lasso_saml_attribute_value_new ( ) GType lasso_saml_audience_restriction_condition_get_type ( ) LassoSamlAudienceRestrictionCondition* lasso_saml_audience_restriction_condition_new ( ) LassoSamlAudienceRestrictionCondition* lasso_saml_audience_restriction_condition_new_full ( const char* audience ) GType lasso_saml_authentication_statement_get_type ( ) LassoNode* lasso_saml_authentication_statement_new ( ) GType lasso_saml_authority_binding_get_type ( ) LassoNode* lasso_saml_authority_binding_new ( ) GType lasso_saml_condition_abstract_get_type ( ) GType lasso_saml_conditions_get_type ( ) LassoSamlConditions* lasso_saml_conditions_new ( ) GType lasso_saml_name_identifier_get_type ( ) LassoSamlNameIdentifier* lasso_saml_name_identifier_new ( ) LassoSamlNameIdentifier* lasso_saml_name_identifier_new_from_xmlNode ( xmlNode* xmlnode ) GType lasso_saml_statement_abstract_get_type ( ) GType lasso_saml_subject_confirmation_get_type ( ) LassoSamlSubjectConfirmation* lasso_saml_subject_confirmation_new ( ) GType lasso_saml_subject_get_type ( ) GType lasso_saml_subject_locality_get_type ( ) LassoNode* lasso_saml_subject_locality_new ( ) LassoNode* lasso_saml_subject_new ( ) GType lasso_saml_subject_statement_abstract_get_type ( ) GType lasso_saml_subject_statement_get_type ( ) LassoNode* lasso_saml_subject_statement_new ( ) GType lasso_samlp2_artifact_resolve_get_type ( ) LassoNode* lasso_samlp2_artifact_resolve_new ( ) GType lasso_samlp2_artifact_response_get_type ( ) LassoNode* lasso_samlp2_artifact_response_new ( ) GType lasso_samlp2_assertion_id_request_get_type ( ) LassoNode* lasso_samlp2_assertion_id_request_new ( ) GType lasso_samlp2_attribute_query_get_type ( ) LassoNode* lasso_samlp2_attribute_query_new ( ) GType lasso_samlp2_authn_query_get_type ( ) LassoNode* lasso_samlp2_authn_query_new ( ) GType lasso_samlp2_authn_request_get_type ( ) LassoNode* lasso_samlp2_authn_request_new ( ) GType lasso_samlp2_authz_decision_query_get_type ( ) LassoNode* lasso_samlp2_authz_decision_query_new ( ) GType lasso_samlp2_extensions_get_type ( ) LassoNode* lasso_samlp2_extensions_new ( ) GType lasso_samlp2_idp_entry_get_type ( ) LassoNode* lasso_samlp2_idp_entry_new ( ) GType lasso_samlp2_idp_list_get_type ( ) LassoNode* lasso_samlp2_idp_list_new ( ) GList* lasso_samlp2_logout_request_get_session_indexes ( LassoSamlp2LogoutRequest* logout_request ) GType lasso_samlp2_logout_request_get_type ( ) LassoNode* lasso_samlp2_logout_request_new ( ) None lasso_samlp2_logout_request_set_session_indexes ( LassoSamlp2LogoutRequest* logout_request, GList* session_index ) GType lasso_samlp2_logout_response_get_type ( ) LassoNode* lasso_samlp2_logout_response_new ( ) GType lasso_samlp2_manage_name_id_request_get_type ( ) LassoNode* lasso_samlp2_manage_name_id_request_new ( ) GType lasso_samlp2_manage_name_id_response_get_type ( ) LassoNode* lasso_samlp2_manage_name_id_response_new ( ) GType lasso_samlp2_name_id_mapping_request_get_type ( ) LassoNode* lasso_samlp2_name_id_mapping_request_new ( ) GType lasso_samlp2_name_id_mapping_response_get_type ( ) LassoNode* lasso_samlp2_name_id_mapping_response_new ( ) GType lasso_samlp2_name_id_policy_get_type ( ) LassoNode* lasso_samlp2_name_id_policy_new ( ) GType lasso_samlp2_request_abstract_get_type ( ) LassoNode* lasso_samlp2_request_abstract_new ( ) GType lasso_samlp2_requested_authn_context_get_type ( ) LassoNode* lasso_samlp2_requested_authn_context_new ( ) GType lasso_samlp2_response_get_type ( ) LassoNode* lasso_samlp2_response_new ( ) GType lasso_samlp2_scoping_get_type ( ) LassoNode* lasso_samlp2_scoping_new ( ) GType lasso_samlp2_status_code_get_type ( ) LassoNode* lasso_samlp2_status_code_new ( ) GType lasso_samlp2_status_detail_get_type ( ) LassoNode* lasso_samlp2_status_detail_new ( ) GType lasso_samlp2_status_get_type ( ) LassoNode* lasso_samlp2_status_new ( ) GType lasso_samlp2_status_response_get_type ( ) LassoNode* lasso_samlp2_status_response_new ( ) GType lasso_samlp2_subject_query_abstract_get_type ( ) LassoNode* lasso_samlp2_subject_query_abstract_new ( ) GType lasso_samlp2_terminate_get_type ( ) LassoNode* lasso_samlp2_terminate_new ( ) GType lasso_samlp_request_abstract_get_type ( ) GType lasso_samlp_request_get_type ( ) LassoNode* lasso_samlp_request_new ( ) None lasso_samlp_response_abstract_fill ( LassoSamlpResponseAbstract* response, const char* InResponseTo, const char* Recipient ) GType lasso_samlp_response_abstract_get_type ( ) GType lasso_samlp_response_get_type ( ) LassoNode* lasso_samlp_response_new ( ) GType lasso_samlp_status_code_get_type ( ) LassoSamlpStatusCode* lasso_samlp_status_code_new ( ) GType lasso_samlp_status_get_type ( ) LassoSamlpStatus* lasso_samlp_status_new ( ) lasso_error_t lasso_server_add_provider ( LassoServer* server, LassoProviderRole role, const gchar* metadata, const gchar* public_key, const gchar* ca_cert_chain ) lasso_error_t lasso_server_add_provider_from_buffer ( LassoServer* server, LassoProviderRole role, const gchar* metadata, const gchar* public_key, const gchar* ca_cert_chain ) None lasso_server_destroy ( LassoServer* server ) gchar* lasso_server_dump ( LassoServer* server ) LassoProvider* lasso_server_get_provider ( const LassoServer* server, const gchar* providerID ) GType lasso_server_get_type ( ) lasso_error_t lasso_server_load_affiliation ( LassoServer* server, const gchar* filename ) LassoServer* lasso_server_new ( const gchar* metadata, const gchar* private_key, const gchar* private_key_password, const gchar* certificate ) LassoServer* lasso_server_new_from_buffers ( const gchar* metadata, const gchar* private_key_content, const gchar* private_key_password, const gchar* certificate_content ) LassoServer* lasso_server_new_from_dump ( const gchar* dump ) lasso_error_t lasso_server_saml2_assertion_setup_signature ( LassoServer* server, LassoSaml2Assertion* saml2_assertion ) lasso_error_t lasso_server_set_encryption_private_key ( LassoServer* server, const gchar* filename_or_buffer ) lasso_error_t lasso_server_set_encryption_private_key_with_password ( LassoServer* server, const gchar* filename_or_buffer, const gchar* password ) lasso_error_t lasso_session_add_assertion ( LassoSession* session, const char* providerID, LassoNode* assertion ) None lasso_session_destroy ( LassoSession* session ) gchar* lasso_session_dump ( LassoSession* session ) LassoNode* lasso_session_get_assertion ( LassoSession* session, const gchar* providerID ) GList* lasso_session_get_assertions ( LassoSession* session, const char* provider_id ) gchar* lasso_session_get_provider_index ( LassoSession* session, gint index ) GType lasso_session_get_type ( ) gboolean lasso_session_is_empty ( LassoSession* session ) LassoSession* lasso_session_new ( ) LassoSession* lasso_session_new_from_dump ( const gchar* dump ) lasso_error_t lasso_session_remove_assertion ( LassoSession* session, const gchar* providerID ) None lasso_set_flag ( char* flag ) lasso_error_t lasso_shutdown ( ) GType lasso_soap_body_get_type ( ) LassoSoapBody* lasso_soap_body_new ( ) LassoSoapBody* lasso_soap_body_new_from_message ( const gchar* message ) GType lasso_soap_detail_get_type ( ) LassoSoapDetail* lasso_soap_detail_new ( ) LassoSoapDetail* lasso_soap_detail_new_from_message ( const gchar* message ) GType lasso_soap_envelope_get_type ( ) LassoSoapEnvelope* lasso_soap_envelope_new ( LassoSoapBody* body ) LassoSoapEnvelope* lasso_soap_envelope_new_from_message ( const gchar* message ) GType lasso_soap_fault_get_type ( ) LassoSoapFault* lasso_soap_fault_new ( ) LassoSoapFault* lasso_soap_fault_new_from_message ( const gchar* message ) LassoSoapFault* lasso_soap_fault_new_full ( const char* faultcode, const char* faultstring ) GType lasso_soap_header_get_type ( ) LassoSoapHeader* lasso_soap_header_new ( ) LassoSoapHeader* lasso_soap_header_new_from_message ( const gchar* message ) const char* lasso_strerror ( int error_code ) lasso-2.8.2/abi/PaxHeaders/abi-2.2.20000644000000000000000000000013113766621500013577 xustar0029 mtime=1608196928.71889494 30 atime=1678098069.989489039 30 ctime=1678814319.929947161 lasso-2.8.2/abi/abi-2.2.20000644000175000017500000016625713766621500017071 0ustar00bdauvergnebdauvergne00000000000000LASSO_ASSERTION_QUERY_REQUEST_TYPE_ASSERTION_ID LASSO_ASSERTION_QUERY_REQUEST_TYPE_ATTRIBUTE LASSO_ASSERTION_QUERY_REQUEST_TYPE_AUTHN LASSO_ASSERTION_QUERY_REQUEST_TYPE_AUTHZ_DECISION LASSO_ASSERTION_QUERY_REQUEST_TYPE_UNSET LASSO_CHECK_VERSIONABI_COMPATIBLE LASSO_CHECK_VERSION_EXACT LASSO_CHECK_VERSION_NUMERIC LASSO_DATA_SERVICE_ERROR_UNREGISTERED_DST LASSO_DEFEDERATION_ERROR_MISSING_NAME_IDENTIFIER LASSO_DISCOVERY_ERROR_FAILED_TO_BUILD_ENDPOINT_REFERENCE LASSO_DISCOVERY_ERROR_MISSING_REQUESTED_SERVICE LASSO_DISCOVERY_ERROR_SVC_METADATA_ASSOCIATION_ADD_FAILED LASSO_DISCOVERY_ERROR_SVC_METADATA_REGISTER_FAILED LASSO_DISCO_HREF LASSO_DISCO_PREFIX LASSO_DISCO_STATUS_CODE_DIRECTIVES LASSO_DISCO_STATUS_CODE_DISCO_OK LASSO_DISCO_STATUS_CODE_FAILED LASSO_DISCO_STATUS_CODE_FORBIDDEN LASSO_DISCO_STATUS_CODE_NO_RESULTS LASSO_DISCO_STATUS_CODE_OK LASSO_DISCO_STATUS_CODE_REMOVE_ENTRY LASSO_DST_ERROR_MISSING_SERVICE_DATA LASSO_DST_ERROR_MODIFY_FAILED LASSO_DST_ERROR_MODIFY_PARTIALLY_FAILED LASSO_DST_ERROR_NEW_DATA_MISSING LASSO_DST_ERROR_QUERY_FAILED LASSO_DST_ERROR_QUERY_PARTIALLY_FAILED LASSO_DST_STATUS_CODE_ACTION_NOT_AUTHORIZED LASSO_DST_STATUS_CODE_ACTION_NOT_SUPPORTED LASSO_DST_STATUS_CODE_ALL_RETURNED LASSO_DST_STATUS_CODE_CHANGED_SINCE_RETURNS_ALL LASSO_DST_STATUS_CODE_CHANGE_HISTORY_NOT_SUPPORTED LASSO_DST_STATUS_CODE_DATA_TOO_LONG LASSO_DST_STATUS_CODE_EXISTS_ALREADY LASSO_DST_STATUS_CODE_EXTENSION_NOT_SUPPORTED LASSO_DST_STATUS_CODE_FAILED LASSO_DST_STATUS_CODE_INVALID_DATA LASSO_DST_STATUS_CODE_INVALID_RESOURCE_ID LASSO_DST_STATUS_CODE_INVALID_SELECT LASSO_DST_STATUS_CODE_MISSING_NEW_DATA_ELEMENT LASSO_DST_STATUS_CODE_MISSING_RESOURCE_ID_ELEMENT LASSO_DST_STATUS_CODE_MISSING_SELECT LASSO_DST_STATUS_CODE_MODIFIED_SINCE LASSO_DST_STATUS_CODE_NO_MORE_ELEMENTS LASSO_DST_STATUS_CODE_NO_MULTIPLE_ALLOWED LASSO_DST_STATUS_CODE_NO_MULTIPLE_RESOURCES LASSO_DST_STATUS_CODE_OK LASSO_DST_STATUS_CODE_PARTIAL LASSO_DST_STATUS_CODE_TIME_OUT LASSO_DST_STATUS_CODE_UNEXPECTED_ERROR LASSO_DS_ERROR_CA_CERT_CHAIN_LOAD_FAILED LASSO_DS_ERROR_CERTIFICATE_LOAD_FAILED LASSO_DS_ERROR_CONTEXT_CREATION_FAILED LASSO_DS_ERROR_DECRYPTION_FAILED LASSO_DS_ERROR_DIGEST_COMPUTE_FAILED LASSO_DS_ERROR_INVALID_REFERENCE_FOR_SAML LASSO_DS_ERROR_INVALID_SIGALG LASSO_DS_ERROR_INVALID_SIGNATURE LASSO_DS_ERROR_KEYS_MNGR_CREATION_FAILED LASSO_DS_ERROR_KEYS_MNGR_INIT_FAILED LASSO_DS_ERROR_PRIVATE_KEY_LOAD_FAILED LASSO_DS_ERROR_PUBLIC_KEY_LOAD_FAILED LASSO_DS_ERROR_SIGNATURE_FAILED LASSO_DS_ERROR_SIGNATURE_NOT_FOUND LASSO_DS_ERROR_SIGNATURE_TEMPLATE_NOT_FOUND LASSO_DS_ERROR_SIGNATURE_TMPL_CREATION_FAILED LASSO_DS_ERROR_SIGNATURE_VERIFICATION_FAILED LASSO_DS_ERROR_TOO_MUCH_REFERENCES LASSO_DS_HREF LASSO_DS_PREFIX LASSO_ECP_HREF LASSO_ECP_PREFIX LASSO_ENCRYPTION_MODE_ASSERTION LASSO_ENCRYPTION_MODE_NAMEID LASSO_ENCRYPTION_MODE_NONE LASSO_ENCRYPTION_SYM_KEY_TYPE_3DES LASSO_ENCRYPTION_SYM_KEY_TYPE_AES_128 LASSO_ENCRYPTION_SYM_KEY_TYPE_AES_256 LASSO_ENCRYPTION_SYM_KEY_TYPE_DEFAULT LASSO_EP_HREF LASSO_EP_PREFIX LASSO_ERROR_OUT_OF_MEMORY LASSO_ERROR_UNDEFINED LASSO_ERROR_UNIMPLEMENTED LASSO_GOBJECT_NAMESPACE LASSO_HTTP_METHOD_ANY LASSO_HTTP_METHOD_ARTIFACT_GET LASSO_HTTP_METHOD_ARTIFACT_POST LASSO_HTTP_METHOD_GET LASSO_HTTP_METHOD_IDP_INITIATED LASSO_HTTP_METHOD_LAST LASSO_HTTP_METHOD_NONE LASSO_HTTP_METHOD_POST LASSO_HTTP_METHOD_REDIRECT LASSO_HTTP_METHOD_SOAP LASSO_IDWSF2_DISCO_HREF LASSO_IDWSF2_DISCO_PREFIX LASSO_IDWSF2_DSTREF_HREF LASSO_IDWSF2_DSTREF_PREFIX LASSO_IDWSF2_DST_HREF LASSO_IDWSF2_DST_PREFIX LASSO_IDWSF2_IMS_HREF LASSO_IDWSF2_IMS_PREFIX LASSO_IDWSF2_IS_HREF LASSO_IDWSF2_IS_PREFIX LASSO_IDWSF2_PS_HREF LASSO_IDWSF2_PS_PREFIX LASSO_IDWSF2_SB2_HREF LASSO_IDWSF2_SB2_PREFIX LASSO_IDWSF2_SBF_HREF LASSO_IDWSF2_SBF_PREFIX LASSO_IDWSF2_SEC_HREF LASSO_IDWSF2_SEC_PREFIX LASSO_IDWSF2_SUBSREF_HREF LASSO_IDWSF2_SUBSREF_PREFIX LASSO_IDWSF2_SUBS_HREF LASSO_IDWSF2_SUBS_PREFIX LASSO_IDWSF2_UTIL_HREF LASSO_IDWSF2_UTIL_PREFIX LASSO_IS_HREF LASSO_IS_INTERACT_ATTR_DO_NOT_INTERACT LASSO_IS_INTERACT_ATTR_DO_NOT_INTERACT_FOR_DATA LASSO_IS_INTERACT_ATTR_INTERACT_IF_NEEDED LASSO_IS_PREFIX LASSO_LASSO_HREF LASSO_LASSO_PREFIX LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_INTERNET_PROTOCOL LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_INTERNET_PROTOCOL_PASSWORD LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_ONE_FACTOR_CONTRACT LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_ONE_FACTOR_UNREGISTERED LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_TWO_FACTOR_CONTRACT LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_TWO_FACTOR_UNREGISTERED LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PASSWORD LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PASSWORD_PROTECTED_TRANSPORT LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PREVIOUS_SESSION LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SMARTCARD LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SMARTCARD_PKI LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SOFTWARE_PKI LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_TIME_SYNC_TOKEN LASSO_LIB_AUTHN_CONTEXT_COMPARISON_BETTER LASSO_LIB_AUTHN_CONTEXT_COMPARISON_EXACT LASSO_LIB_AUTHN_CONTEXT_COMPARISON_MAXIMUM LASSO_LIB_AUTHN_CONTEXT_COMPARISON_MINIMUM LASSO_LIB_CONSENT_INAPPLICABLE LASSO_LIB_CONSENT_OBTAINED LASSO_LIB_CONSENT_OBTAINED_CURRENT_EXPLICIT LASSO_LIB_CONSENT_OBTAINED_CURRENT_IMPLICIT LASSO_LIB_CONSENT_OBTAINED_PRIOR LASSO_LIB_CONSENT_UNAVAILABLE LASSO_LIB_HREF LASSO_LIB_MAJOR_VERSION_N LASSO_LIB_MINOR_VERSION_N LASSO_LIB_NAMEID_POLICY_TYPE_ANY LASSO_LIB_NAMEID_POLICY_TYPE_FEDERATED LASSO_LIB_NAMEID_POLICY_TYPE_NONE LASSO_LIB_NAMEID_POLICY_TYPE_ONE_TIME LASSO_LIB_NAME_IDENTIFIER_FORMAT_ENCRYPTED LASSO_LIB_NAME_IDENTIFIER_FORMAT_ENTITYID LASSO_LIB_NAME_IDENTIFIER_FORMAT_FEDERATED LASSO_LIB_NAME_IDENTIFIER_FORMAT_ONE_TIME LASSO_LIB_PREFIX LASSO_LIB_PROTOCOL_PROFILE_BRWS_ART LASSO_LIB_PROTOCOL_PROFILE_BRWS_LECP LASSO_LIB_PROTOCOL_PROFILE_BRWS_POST LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_IDP_HTTP LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_IDP_SOAP LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_SP_SOAP LASSO_LIB_PROTOCOL_PROFILE_NIM_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_RNI_IDP_HTTP LASSO_LIB_PROTOCOL_PROFILE_RNI_IDP_SOAP LASSO_LIB_PROTOCOL_PROFILE_RNI_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_RNI_SP_SOAP LASSO_LIB_PROTOCOL_PROFILE_SLO_IDP_HTTP LASSO_LIB_PROTOCOL_PROFILE_SLO_IDP_SOAP LASSO_LIB_PROTOCOL_PROFILE_SLO_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_SLO_SP_SOAP LASSO_LIB_STATUS_CODE_FEDERATION_DOES_NOT_EXIST LASSO_LIB_STATUS_CODE_INVALID_ASSERTION_CONSUMER_SERVICE_INDEX LASSO_LIB_STATUS_CODE_INVALID_SIGNATURE LASSO_LIB_STATUS_CODE_NO_AUTHN_CONTEXT LASSO_LIB_STATUS_CODE_NO_AVAILABLEIDP LASSO_LIB_STATUS_CODE_NO_PASSIVE LASSO_LIB_STATUS_CODE_NO_SUPPORTEDIDP LASSO_LIB_STATUS_CODE_PROXY_COUNT_EXCEEDED LASSO_LIB_STATUS_CODE_UNKNOWN_PRINCIPAL LASSO_LIB_STATUS_CODE_UNSIGNED_AUTHN_REQUEST LASSO_LIB_STATUS_CODE_UNSUPPORTED_PROFILE LASSO_LOGIN_ERROR_ASSERTION_DOES_NOT_MATCH_REQUEST_ID LASSO_LOGIN_ERROR_ASSERTION_REPLAY LASSO_LOGIN_ERROR_CONSENT_NOT_OBTAINED LASSO_LOGIN_ERROR_FEDERATION_NOT_FOUND LASSO_LOGIN_ERROR_INVALID_NAMEIDPOLICY LASSO_LOGIN_ERROR_INVALID_SIGNATURE LASSO_LOGIN_ERROR_NO_DEFAULT_ENDPOINT LASSO_LOGIN_ERROR_REQUEST_DENIED LASSO_LOGIN_ERROR_STATUS_NOT_SUCCESS LASSO_LOGIN_ERROR_UNKNOWN_PRINCIPAL LASSO_LOGIN_ERROR_UNSIGNED_AUTHN_REQUEST LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_ART LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_LECP LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_POST LASSO_LOGIN_PROTOCOL_PROFILE_REDIRECT LASSO_LOGOUT_ERROR_FEDERATION_NOT_FOUND LASSO_LOGOUT_ERROR_REQUEST_DENIED LASSO_LOGOUT_ERROR_UNKNOWN_PRINCIPAL LASSO_LOGOUT_ERROR_UNSUPPORTED_PROFILE LASSO_MD_PROTOCOL_TYPE_ARTIFACT_RESOLUTION LASSO_MD_PROTOCOL_TYPE_ASSERTION_ID_REQUEST LASSO_MD_PROTOCOL_TYPE_FEDERATION_TERMINATION LASSO_MD_PROTOCOL_TYPE_MANAGE_NAME_ID LASSO_MD_PROTOCOL_TYPE_NAME_IDENTIFIER_MAPPING LASSO_MD_PROTOCOL_TYPE_REGISTER_NAME_IDENTIFIER LASSO_MD_PROTOCOL_TYPE_SINGLE_LOGOUT LASSO_MD_PROTOCOL_TYPE_SINGLE_SIGN_ON LASSO_MESSAGE_FORMAT_BASE64 LASSO_MESSAGE_FORMAT_ERROR LASSO_MESSAGE_FORMAT_QUERY LASSO_MESSAGE_FORMAT_SOAP LASSO_MESSAGE_FORMAT_UNKNOWN LASSO_MESSAGE_FORMAT_XML LASSO_MESSAGE_FORMAT_XSCHEMA_ERROR LASSO_METADATA_HREF LASSO_METADATA_PREFIX LASSO_NAME_IDENTIFIER_MAPPING_ERROR_FORBIDDEN_CALL_ON_THIS_SIDE LASSO_NAME_IDENTIFIER_MAPPING_ERROR_MISSING_TARGET_IDENTIFIER LASSO_NAME_IDENTIFIER_MAPPING_ERROR_MISSING_TARGET_NAMESPACE LASSO_PAOS_HREF LASSO_PAOS_PREFIX LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ LASSO_PARAM_ERROR_CHECK_FAILED LASSO_PARAM_ERROR_INVALID_VALUE LASSO_PARAM_ERROR_NON_INITIALIZED_OBJECT LASSO_PP_HREF LASSO_PP_PREFIX LASSO_PROFILE_ERROR_BAD_IDENTITY_DUMP LASSO_PROFILE_ERROR_BAD_SESSION_DUMP LASSO_PROFILE_ERROR_BUILDING_MESSAGE_FAILED LASSO_PROFILE_ERROR_BUILDING_QUERY_FAILED LASSO_PROFILE_ERROR_BUILDING_REQUEST_FAILED LASSO_PROFILE_ERROR_BUILDING_RESPONSE_FAILED LASSO_PROFILE_ERROR_CANNOT_FIND_A_PROVIDER LASSO_PROFILE_ERROR_CANNOT_VERIFY_SIGNATURE LASSO_PROFILE_ERROR_FEDERATION_NOT_FOUND LASSO_PROFILE_ERROR_IDENTITY_NOT_FOUND LASSO_PROFILE_ERROR_INVALID_ARTIFACT LASSO_PROFILE_ERROR_INVALID_HTTP_METHOD LASSO_PROFILE_ERROR_INVALID_ISSUER LASSO_PROFILE_ERROR_INVALID_MSG LASSO_PROFILE_ERROR_INVALID_POST_MSG LASSO_PROFILE_ERROR_INVALID_PROTOCOLPROFILE LASSO_PROFILE_ERROR_INVALID_QUERY LASSO_PROFILE_ERROR_INVALID_SOAP_MSG LASSO_PROFILE_ERROR_MISSING_ARTIFACT LASSO_PROFILE_ERROR_MISSING_ASSERTION LASSO_PROFILE_ERROR_MISSING_ENCRYPTION_PRIVATE_KEY LASSO_PROFILE_ERROR_MISSING_ENDPOINT_REFERENCE LASSO_PROFILE_ERROR_MISSING_ENDPOINT_REFERENCE_ADDRESS LASSO_PROFILE_ERROR_MISSING_ISSUER LASSO_PROFILE_ERROR_MISSING_NAME_IDENTIFIER LASSO_PROFILE_ERROR_MISSING_REMOTE_PROVIDERID LASSO_PROFILE_ERROR_MISSING_REQUEST LASSO_PROFILE_ERROR_MISSING_RESOURCE_OFFERING LASSO_PROFILE_ERROR_MISSING_RESPONSE LASSO_PROFILE_ERROR_MISSING_SERVER LASSO_PROFILE_ERROR_MISSING_SERVICE_DESCRIPTION LASSO_PROFILE_ERROR_MISSING_SERVICE_INSTANCE LASSO_PROFILE_ERROR_MISSING_SERVICE_TYPE LASSO_PROFILE_ERROR_MISSING_STATUS_CODE LASSO_PROFILE_ERROR_MISSING_SUBJECT LASSO_PROFILE_ERROR_NAME_IDENTIFIER_NOT_FOUND LASSO_PROFILE_ERROR_RESPONSE_DOES_NOT_MATCH_REQUEST LASSO_PROFILE_ERROR_SESSION_NOT_FOUND LASSO_PROFILE_ERROR_STATUS_NOT_SUCCESS LASSO_PROFILE_ERROR_UNKNOWN_PROFILE_URL LASSO_PROFILE_ERROR_UNKNOWN_PROVIDER LASSO_PROFILE_ERROR_UNSUPPORTED_PROFILE LASSO_PROTOCOL_LIBERTY_1_0 LASSO_PROTOCOL_LIBERTY_1_1 LASSO_PROTOCOL_LIBERTY_1_2 LASSO_PROTOCOL_NONE LASSO_PROTOCOL_SAML_2_0 LASSO_PROVIDER_ERROR_MISSING_PUBLIC_KEY LASSO_PROVIDER_ROLE_IDP LASSO_PROVIDER_ROLE_NONE LASSO_PROVIDER_ROLE_SP LASSO_PYTHON_HREF LASSO_PYTHON_NAMESPACE LASSO_REGISTRY_ERROR_KEY_EXISTS LASSO_REQUEST_TYPE_DEFEDERATION LASSO_REQUEST_TYPE_DISCO_MODIFY LASSO_REQUEST_TYPE_DISCO_QUERY LASSO_REQUEST_TYPE_DST_MODIFY LASSO_REQUEST_TYPE_DST_QUERY LASSO_REQUEST_TYPE_IDWSF2_DISCO_QUERY LASSO_REQUEST_TYPE_IDWSF2_DISCO_SVCMD_ASSOCIATION_ADD LASSO_REQUEST_TYPE_IDWSF2_DISCO_SVCMD_REGISTER LASSO_REQUEST_TYPE_INVALID LASSO_REQUEST_TYPE_LECP LASSO_REQUEST_TYPE_LOGIN LASSO_REQUEST_TYPE_LOGOUT LASSO_REQUEST_TYPE_NAME_IDENTIFIER_MAPPING LASSO_REQUEST_TYPE_NAME_ID_MANAGEMENT LASSO_REQUEST_TYPE_NAME_REGISTRATION LASSO_REQUEST_TYPE_SASL_REQUEST LASSO_SAML2_ASSERTION_HREF LASSO_SAML2_ASSERTION_PREFIX LASSO_SAML2_ATTRIBUTE_NAME_EPR LASSO_SAML2_ATTRIBUTE_NAME_FORMAT_URI LASSO_SAML2_AUTHN_CONTEXT_AUTHENTICATED_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_INTERNET_PROTOCOL LASSO_SAML2_AUTHN_CONTEXT_INTERNET_PROTOCOL_PASSWORD LASSO_SAML2_AUTHN_CONTEXT_KERBEROS LASSO_SAML2_AUTHN_CONTEXT_MOBILE_ONE_FACTOR_CONTRACT LASSO_SAML2_AUTHN_CONTEXT_MOBILE_ONE_FACTOR_UNREGISTERED LASSO_SAML2_AUTHN_CONTEXT_MOBILE_TWO_FACTOR_CONTRACT LASSO_SAML2_AUTHN_CONTEXT_MOBILE_TWO_FACTOR_UNREGISTERED LASSO_SAML2_AUTHN_CONTEXT_NOMAD_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_PASSWORD LASSO_SAML2_AUTHN_CONTEXT_PASSWORD_PROTECTED_TRANSPORT LASSO_SAML2_AUTHN_CONTEXT_PERSONALIZED_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_PGP LASSO_SAML2_AUTHN_CONTEXT_PREVIOUS_SESSION LASSO_SAML2_AUTHN_CONTEXT_SECURE_REMOTE_PASSWORD LASSO_SAML2_AUTHN_CONTEXT_SMARTCARD LASSO_SAML2_AUTHN_CONTEXT_SMARTCARD_PKI LASSO_SAML2_AUTHN_CONTEXT_SOFTWARE_PKI LASSO_SAML2_AUTHN_CONTEXT_SPKI LASSO_SAML2_AUTHN_CONTEXT_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_TIME_SYNC_TOKEN LASSO_SAML2_AUTHN_CONTEXT_TLS_CLIENT LASSO_SAML2_AUTHN_CONTEXT_X509 LASSO_SAML2_AUTHN_CONTEXT_XMLDSIG LASSO_SAML2_CONFIRMATION_METHOD_BEARER LASSO_SAML2_CONSENT_EXPLICIT LASSO_SAML2_CONSENT_IMPLICIT LASSO_SAML2_CONSENT_INAPPLICABLE LASSO_SAML2_CONSENT_OBTAINED LASSO_SAML2_CONSENT_PRIOR LASSO_SAML2_CONSENT_UNAVAILABLE LASSO_SAML2_DEFLATE_ENCODING LASSO_SAML2_METADATA_BINDING_ARTIFACT LASSO_SAML2_METADATA_BINDING_PAOS LASSO_SAML2_METADATA_BINDING_POST LASSO_SAML2_METADATA_BINDING_REDIRECT LASSO_SAML2_METADATA_BINDING_SOAP LASSO_SAML2_METADATA_HREF LASSO_SAML2_NAME_IDENTIFIER_FORMAT_EMAIL LASSO_SAML2_NAME_IDENTIFIER_FORMAT_ENCRYPTED LASSO_SAML2_NAME_IDENTIFIER_FORMAT_ENTITY LASSO_SAML2_NAME_IDENTIFIER_FORMAT_KERBEROS LASSO_SAML2_NAME_IDENTIFIER_FORMAT_PERSISTENT LASSO_SAML2_NAME_IDENTIFIER_FORMAT_TRANSIENT LASSO_SAML2_NAME_IDENTIFIER_FORMAT_UNSPECIFIED LASSO_SAML2_NAME_IDENTIFIER_FORMAT_WINDOWS LASSO_SAML2_NAME_IDENTIFIER_FORMAT_X509 LASSO_SAML2_PROTOCOL_HREF LASSO_SAML2_PROTOCOL_PREFIX LASSO_SAML2_STATUS_CODE_AUTHN_FAILED LASSO_SAML2_STATUS_CODE_INVALID_ATTR_NAME LASSO_SAML2_STATUS_CODE_INVALID_NAME_ID_POLICY LASSO_SAML2_STATUS_CODE_NO_AUTHN_CONTEXT LASSO_SAML2_STATUS_CODE_NO_AVAILABLE_IDP LASSO_SAML2_STATUS_CODE_NO_PASSIVE LASSO_SAML2_STATUS_CODE_NO_SUPPORTED_IDP LASSO_SAML2_STATUS_CODE_PARTIAL_LOGOUT LASSO_SAML2_STATUS_CODE_PROXY_COUNT_EXCEEDED LASSO_SAML2_STATUS_CODE_REQUESTER LASSO_SAML2_STATUS_CODE_REQUEST_DENIED LASSO_SAML2_STATUS_CODE_REQUEST_UNSUPPORTED LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_DEPRECATED LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_TOO_HIGH LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_TOO_LOW LASSO_SAML2_STATUS_CODE_RESOURCE_NOT_RECOGNIZED LASSO_SAML2_STATUS_CODE_RESPONDER LASSO_SAML2_STATUS_CODE_SUCCESS LASSO_SAML2_STATUS_CODE_TOO_MANY_RESPONSES LASSO_SAML2_STATUS_CODE_UNKNOWN_ATTR_PROFILE LASSO_SAML2_STATUS_CODE_UNKNOWN_PRINCIPAL LASSO_SAML2_STATUS_CODE_UNSUPPORTED_BINDING LASSO_SAML2_STATUS_CODE_VERSION_MISMATCH LASSO_SAML_ASSERTION_HREF LASSO_SAML_ASSERTION_PREFIX LASSO_SAML_AUTHENTICATION_METHODS_PKI LASSO_SAML_AUTHENTICATION_METHOD_HARDWARE_TOKEN LASSO_SAML_AUTHENTICATION_METHOD_KERBEROS LASSO_SAML_AUTHENTICATION_METHOD_LIBERTY LASSO_SAML_AUTHENTICATION_METHOD_PASSWORD LASSO_SAML_AUTHENTICATION_METHOD_PGP LASSO_SAML_AUTHENTICATION_METHOD_SECURE_REMOTE_PASSWORD LASSO_SAML_AUTHENTICATION_METHOD_SMARTCARD_PKI LASSO_SAML_AUTHENTICATION_METHOD_SOFTWARE_PKI LASSO_SAML_AUTHENTICATION_METHOD_UNSPECIFIED LASSO_SAML_AUTHENTICATION_METHOD_XKMS LASSO_SAML_AUTHENTICATION_METHOD_XMLD_SIG LASSO_SAML_CONFIRMATION_METHOD_ARTIFACT LASSO_SAML_CONFIRMATION_METHOD_ARTIFACT01 LASSO_SAML_CONFIRMATION_METHOD_BEARER LASSO_SAML_CONFIRMATION_METHOD_HOLDER_OF_KEY LASSO_SAML_CONFIRMATION_METHOD_SENDER_VOUCHES LASSO_SAML_MAJOR_VERSION_N LASSO_SAML_MINOR_VERSION_N LASSO_SAML_PROTOCOL_HREF LASSO_SAML_PROTOCOL_PREFIX LASSO_SAML_STATUS_CODE_REQUESTER LASSO_SAML_STATUS_CODE_REQUEST_DENIED LASSO_SAML_STATUS_CODE_REQUEST_VERSION_DEPRECATED LASSO_SAML_STATUS_CODE_REQUEST_VERSION_TOO_HIGH LASSO_SAML_STATUS_CODE_REQUEST_VERSION_TOO_LOW LASSO_SAML_STATUS_CODE_RESOURCE_NOT_RECOGNIZED LASSO_SAML_STATUS_CODE_RESPONDER LASSO_SAML_STATUS_CODE_SUCCESS LASSO_SAML_STATUS_CODE_TOO_MANY_RESPONSES LASSO_SAML_STATUS_CODE_VERSION_MISMATCH LASSO_SA_HREF LASSO_SA_PREFIX LASSO_SA_SASL_SERVICE_NAME LASSO_SA_STATUS_CODE_ABORT LASSO_SA_STATUS_CODE_CONTINUE LASSO_SA_STATUS_CODE_OK LASSO_SECURITY11_MECH_BEARER LASSO_SECURITY11_MECH_SAML LASSO_SECURITY11_MECH_TLS_BEARER LASSO_SECURITY11_MECH_TLS_SAML LASSO_SECURITY11_MECH_TLS_X509 LASSO_SECURITY11_MECH_X509 LASSO_SECURITY_MECH_BEARER LASSO_SECURITY_MECH_CLIENT_TLS LASSO_SECURITY_MECH_CLIENT_TLS_BEARER LASSO_SECURITY_MECH_CLIENT_TLS_SAML LASSO_SECURITY_MECH_CLIENT_TLS_X509 LASSO_SECURITY_MECH_NULL LASSO_SECURITY_MECH_SAML LASSO_SECURITY_MECH_TLS LASSO_SECURITY_MECH_TLS_BEARER LASSO_SECURITY_MECH_TLS_SAML LASSO_SECURITY_MECH_TLS_X509 LASSO_SECURITY_MECH_X509 LASSO_SEC_HREF LASSO_SEC_PREFIX LASSO_SERVER_ERROR_ADD_PROVIDER_FAILED LASSO_SERVER_ERROR_ADD_PROVIDER_PROTOCOL_MISMATCH LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND LASSO_SERVER_ERROR_SET_ENCRYPTION_PRIVATE_KEY_FAILED LASSO_SIGNATURE_METHOD_DSA_SHA1 LASSO_SIGNATURE_METHOD_RSA_SHA1 LASSO_SIGNATURE_TYPE_NONE LASSO_SIGNATURE_TYPE_SIMPLE LASSO_SIGNATURE_TYPE_WITHX509 LASSO_SOAP_BINDING_EXT_HREF LASSO_SOAP_BINDING_EXT_PREFIX LASSO_SOAP_BINDING_HREF LASSO_SOAP_BINDING_PREFIX LASSO_SOAP_BINDING_PROCESS_CONTEXT_PRINCIPAL_OFFLINE LASSO_SOAP_BINDING_PROCESS_CONTEXT_PRINCIPAL_ONLINE LASSO_SOAP_BINDING_PROCESS_CONTEXT_SIMULATE LASSO_SOAP_ENV_ACTOR LASSO_SOAP_ENV_HREF LASSO_SOAP_ENV_PREFIX LASSO_SOAP_ERROR_MISSING_BODY LASSO_SOAP_ERROR_MISSING_ENVELOPE LASSO_SOAP_ERROR_MISSING_HEADER LASSO_SOAP_ERROR_MISSING_SOAP_FAULT_DETAIL LASSO_SOAP_FAULT_CODE_SERVER LASSO_WSA_HREF LASSO_WSA_PREFIX LASSO_WSF_ENABLED LASSO_WSF_PROFILE_ERROR_MISSING_ASSERTION_ID LASSO_WSF_PROFILE_ERROR_MISSING_CORRELATION LASSO_WSF_PROFILE_ERROR_MISSING_CREDENTIAL_REF LASSO_WSF_PROFILE_ERROR_MISSING_DESCRIPTION LASSO_WSF_PROFILE_ERROR_MISSING_ENDPOINT LASSO_WSF_PROFILE_ERROR_MISSING_RESOURCE_ID LASSO_WSF_PROFILE_ERROR_MISSING_SECURITY LASSO_WSF_PROFILE_ERROR_SOAP_FAULT LASSO_WSF_PROFILE_ERROR_UNSUPPORTED_SECURITY_MECHANISM LASSO_WSSE1_HREF LASSO_WSSE1_PREFIX LASSO_WSSE_200401_HREF LASSO_WSSE_200401_PREFIX LASSO_WSSE_HREF LASSO_WSSE_PREFIX LASSO_WSUTIL1_HREF LASSO_WSUTIL1_PREFIX LASSO_WSU_HREF LASSO_WSU_PREFIX LASSO_XML_ERROR_ATTR_NOT_FOUND LASSO_XML_ERROR_ATTR_VALUE_NOT_FOUND LASSO_XML_ERROR_INVALID_FILE LASSO_XML_ERROR_MISSING_NAMESPACE LASSO_XML_ERROR_NODE_CONTENT_NOT_FOUND LASSO_XML_ERROR_NODE_NOT_FOUND LASSO_XML_ERROR_OBJECT_CONSTRUCTION_FAILED LASSO_XSI_HREF LASSO_XSI_PREFIX struct LassoAssertionQuery { LassoAssertionQueryPrivate* private_data } LassoAssertionQueryRequestType LassoCheckVersionMode struct LassoDefederation { void* private_data } struct LassoDsKeyInfo { LassoDsKeyValue* KeyValue } struct LassoDsKeyValue { LassoDsRsaKeyValue* RSAKeyValue } struct LassoDsRsaKeyValue { char* Modulus, char* Exponent } struct LassoEcp { gchar* assertionConsumerURL, LassoEcpPrivate* private_data } LassoEncryptionMode LassoEncryptionSymKeyType struct LassoFederation { gchar* remote_providerID, LassoNode* local_nameIdentifier, LassoNode* remote_nameIdentifier, LassoFederationPrivate* private_data } LassoHttpMethod struct LassoIdentity { GHashTable* federations, gboolean is_dirty, LassoIdentityPrivate* private_data } struct LassoLecp { LassoLibAuthnRequestEnvelope* authnRequestEnvelope, LassoLibAuthnResponseEnvelope* authnResponseEnvelope, char* assertionConsumerServiceURL, void* private_data } struct LassoLibAssertion { char* InResponseTo } struct LassoLibAuthenticationStatement { LassoLibAuthnContext* AuthnContext, char* ReauthenticateOnOrAfter, char* SessionIndex } struct LassoLibAuthnContext { char* AuthnContextClassRef, char* AuthnContextStatementRef, void* AuthenticationContextStatement } struct LassoLibAuthnRequest { GList* Extension, char* ProviderID, char* AffiliationID, char* NameIDPolicy, gboolean ForceAuthn, gboolean IsPassive, char* ProtocolProfile, char* AssertionConsumerServiceID, LassoLibRequestAuthnContext* RequestAuthnContext, char* RelayState, LassoLibScoping* Scoping, char* consent } struct LassoLibAuthnRequestEnvelope { GList* Extension, LassoLibAuthnRequest* AuthnRequest, char* ProviderID, char* ProviderName, char* AssertionConsumerServiceURL, LassoLibIDPList* IDPList, gboolean IsPassive } struct LassoLibAuthnResponse { GList* Extension, char* ProviderID, char* RelayState, char* consent } struct LassoLibAuthnResponseEnvelope { GList* Extension, LassoLibAuthnResponse* AuthnResponse, char* AssertionConsumerServiceURL } struct LassoLibFederationTerminationNotification { GList* Extension, char* ProviderID, LassoSamlNameIdentifier* NameIdentifier, char* consent, char* RelayState } struct LassoLibIDPEntries { GList* IDPEntry } struct LassoLibIDPEntry { char* ProviderID, char* ProviderName, char* Loc } struct LassoLibIDPList { LassoLibIDPEntries* IDPEntries, char* GetComplete } struct LassoLibLogoutRequest { GList* Extension, char* ProviderID, LassoSamlNameIdentifier* NameIdentifier, char* SessionIndex, char* RelayState, char* consent, char* NotOnOrAfter } struct LassoLibLogoutResponse { } struct LassoLibNameIdentifierMappingRequest { GList* Extension, char* ProviderID, LassoSamlNameIdentifier* NameIdentifier, char* TargetNamespace, char* consent } struct LassoLibNameIdentifierMappingResponse { GList* Extension, char* ProviderID, LassoSamlpStatus* Status, LassoSamlNameIdentifier* NameIdentifier } struct LassoLibRegisterNameIdentifierRequest { GList* Extension, char* ProviderID, LassoSamlNameIdentifier* IDPProvidedNameIdentifier, LassoSamlNameIdentifier* SPProvidedNameIdentifier, LassoSamlNameIdentifier* OldProvidedNameIdentifier, char* RelayState } struct LassoLibRegisterNameIdentifierResponse { } struct LassoLibRequestAuthnContext { GList* AuthnContextClassRef, GList* AuthnContextStatementRef, char* AuthnContextComparison } struct LassoLibScoping { int ProxyCount, LassoLibIDPList* IDPList } struct LassoLibStatusResponse { GList* Extension, char* ProviderID, LassoSamlpStatus* Status, char* RelayState } struct LassoLibSubject { LassoSamlNameIdentifier* IDPProvidedNameIdentifier } struct LassoLogin { LassoLoginProtocolProfile protocolProfile, gchar* assertionArtifact, LassoSamlAssertion* assertion, gchar* nameIDPolicy, LassoHttpMethod http_method, LassoLoginPrivate* private_data } LassoLoginProtocolProfile struct LassoLogout { LassoNode* initial_request, LassoNode* initial_response, gchar* initial_remote_providerID, gint providerID_index, LassoHttpMethod initial_http_request_method, LassoLogoutPrivate* private_data } LassoMdProtocolType LassoMessageFormat struct LassoMiscTextNode { char* content, char* name, char* ns_href, char* ns_prefix, gboolean text_child } struct LassoNameIdManagement { void* private_data } struct LassoNameIdentifierMapping { gchar* targetNameIdentifier, void* private_data } struct LassoNameRegistration { LassoSamlNameIdentifier* oldNameIdentifier, void* private_data } struct LassoNode { } struct LassoProfile { LassoServer* server, LassoNode* request, LassoNode* response, LassoNode* nameIdentifier, gchar* remote_providerID, gchar* msg_url, gchar* msg_body, gchar* msg_relayState, LassoIdentity* identity, LassoSession* session, LassoHttpMethod http_request_method, gint signature_status, LassoProfilePrivate* private_data } LassoProtocolConformance struct LassoProvider { gchar* ProviderID, LassoProviderRole role, char* metadata_filename, gchar* public_key, gchar* ca_cert_chain, LassoProviderPrivate* private_data } LassoProviderRole LassoRequestType struct LassoSaml2Action { char* content, char* Namespace } struct LassoSaml2Advice { GList* AssertionIDRef, GList* AssertionURIRef, GList* Assertion, GList* EncryptedAssertion } struct LassoSaml2Assertion { LassoSaml2NameID* Issuer, LassoSaml2Subject* Subject, LassoSaml2Conditions* Conditions, LassoSaml2Advice* Advice, GList* Statement, GList* AuthnStatement, GList* AuthzDecisionStatement, GList* AttributeStatement, char* Version, char* ID, char* IssueInstant, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file, gboolean encryption_activated, char* encryption_public_key_str, LassoEncryptionSymKeyType encryption_sym_key_type } struct LassoSaml2Attribute { GList* AttributeValue, char* Name, char* NameFormat, char* FriendlyName } struct LassoSaml2AttributeStatement { GList* Attribute, GList* EncryptedAttribute } struct LassoSaml2AttributeValue { GList* any } struct LassoSaml2AudienceRestriction { char* Audience } struct LassoSaml2AuthnContext { char* AuthnContextClassRef, char* AuthnContextDeclRef, char* AuthenticatingAuthority } struct LassoSaml2AuthnStatement { LassoSaml2SubjectLocality* SubjectLocality, LassoSaml2AuthnContext* AuthnContext, char* AuthnInstant, char* SessionIndex, char* SessionNotOnOrAfter } struct LassoSaml2AuthzDecisionStatement { LassoSaml2Action* Action, LassoSaml2Evidence* Evidence, char* Resource, char* Decision } struct LassoSaml2BaseIDAbstract { char* NameQualifier, char* SPNameQualifier } struct LassoSaml2ConditionAbstract { } struct LassoSaml2Conditions { GList* Condition, GList* AudienceRestriction, GList* OneTimeUse, GList* ProxyRestriction, char* NotBefore, char* NotOnOrAfter } struct LassoSaml2EncryptedElement { xmlNode* EncryptedData, GList* EncryptedKey, LassoNode* original_data } struct LassoSaml2Evidence { GList* AssertionIDRef, GList* AssertionURIRef, GList* Assertion, GList* EncryptedAssertion } struct LassoSaml2KeyInfoConfirmationData { } struct LassoSaml2NameID { char* content, char* Format, char* SPProvidedID, char* NameQualifier, char* SPNameQualifier } struct LassoSaml2OneTimeUse { } struct LassoSaml2ProxyRestriction { char* Audience, char* Count } struct LassoSaml2StatementAbstract { } struct LassoSaml2Subject { LassoSaml2BaseIDAbstract* BaseID, LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, LassoSaml2SubjectConfirmation* SubjectConfirmation } struct LassoSaml2SubjectConfirmation { LassoSaml2BaseIDAbstract* BaseID, LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, LassoSaml2SubjectConfirmationData* SubjectConfirmationData, char* Method } struct LassoSaml2SubjectConfirmationData { char* NotBefore, char* NotOnOrAfter, char* Recipient, char* InResponseTo, char* Address } struct LassoSaml2SubjectLocality { char* Address, char* DNSName } struct LassoSamlAdvice { GList* any } struct LassoSamlAssertion { LassoSamlConditions* Conditions, LassoSamlAdvice* Advice, void* Statement, LassoSamlSubjectStatement* SubjectStatement, LassoSamlAuthenticationStatement* AuthenticationStatement, void* AuthorizationDecisionStatement, LassoSamlAttributeStatement* AttributeStatement, int MajorVersion, int MinorVersion, char* AssertionID, char* Issuer, char* IssueInstant, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlAttribute { gchar* attributeName, gchar* attributeNameSpace, GList* AttributeValue } struct LassoSamlAttributeDesignator { char* AttributeName, char* AttributeNamespace } struct LassoSamlAttributeStatement { GList* Attribute } struct LassoSamlAttributeValue { GList* any } struct LassoSamlAudienceRestrictionCondition { GList* Audience } struct LassoSamlAuthenticationStatement { LassoSamlSubjectLocality* SubjectLocality, GList* AuthorityBinding, char* AuthenticationMethod, char* AuthenticationInstant } struct LassoSamlAuthorityBinding { char* AuthorityKind, char* Location, char* Binding } struct LassoSamlConditionAbstract { } struct LassoSamlConditions { GList* Condition, GList* AudienceRestrictionCondition, char* NotBefore, char* NotOnOrAfter } struct LassoSamlNameIdentifier { char* NameQualifier, char* Format, char* content } struct LassoSamlStatementAbstract { } struct LassoSamlSubject { LassoSamlNameIdentifier* NameIdentifier, LassoSamlSubjectConfirmation* SubjectConfirmation, LassoSaml2EncryptedElement* EncryptedNameIdentifier } struct LassoSamlSubjectConfirmation { GList* ConfirmationMethod, char* SubjectConfirmationData, LassoDsKeyInfo* KeyInfo } struct LassoSamlSubjectLocality { char* IPAddress, char* DNSAddress } struct LassoSamlSubjectStatement { } struct LassoSamlSubjectStatementAbstract { LassoSamlSubject* Subject } struct LassoSamlp2ArtifactResolve { char* Artifact } struct LassoSamlp2ArtifactResponse { LassoNode* any } struct LassoSamlp2AssertionIDRequest { char* AssertionIDRef } struct LassoSamlp2AttributeQuery { GList* Attribute } struct LassoSamlp2AuthnQuery { LassoSamlp2RequestedAuthnContext* RequestedAuthnContext, char* SessionIndex } struct LassoSamlp2AuthnRequest { LassoSaml2Subject* Subject, LassoSamlp2NameIDPolicy* NameIDPolicy, LassoSaml2Conditions* Conditions, LassoSamlp2RequestedAuthnContext* RequestedAuthnContext, LassoSamlp2Scoping* Scoping, gboolean ForceAuthn, gboolean IsPassive, char* ProtocolBinding, int AssertionConsumerServiceIndex, char* AssertionConsumerServiceURL, int AttributeConsumingServiceIndex, char* ProviderName, G_GNUC_DEPRECATED char } struct LassoSamlp2AuthzDecisionQuery { LassoSaml2Action* Action, LassoSaml2Evidence* Evidence, char* Resource } struct LassoSamlp2Extensions { } struct LassoSamlp2IDPEntry { char* ProviderID, char* Name, char* Loc } struct LassoSamlp2IDPList { LassoSamlp2IDPEntry* IDPEntry, char* GetComplete } struct LassoSamlp2LogoutRequest { LassoSaml2BaseIDAbstract* BaseID, LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, char* SessionIndex, char* Reason, char* NotOnOrAfter, G_GNUC_DEPRECATED char } struct LassoSamlp2LogoutResponse { G_GNUC_DEPRECATED char } struct LassoSamlp2ManageNameIDRequest { LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, char* NewID, LassoSaml2EncryptedElement* NewEncryptedID, LassoSamlp2Terminate* Terminate } struct LassoSamlp2ManageNameIDResponse { } struct LassoSamlp2NameIDMappingRequest { LassoSaml2BaseIDAbstract* BaseID, LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, LassoSamlp2NameIDPolicy* NameIDPolicy } struct LassoSamlp2NameIDMappingResponse { LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID } struct LassoSamlp2NameIDPolicy { char* Format, char* SPNameQualifier, gboolean AllowCreate } struct LassoSamlp2RequestAbstract { LassoSaml2NameID* Issuer, LassoSamlp2Extensions* Extensions, char* ID, char* Version, char* IssueInstant, char* Destination, char* Consent, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlp2RequestedAuthnContext { GList* AuthnContextClassRef, GList* AuthnContextDeclRef, char* Comparison } struct LassoSamlp2Response { GList* Assertion, GList* EncryptedAssertion } struct LassoSamlp2Scoping { LassoSamlp2IDPList* IDPList, char* RequesterID, char* ProxyCount } struct LassoSamlp2Status { LassoSamlp2StatusCode* StatusCode, char* StatusMessage, LassoSamlp2StatusDetail* StatusDetail } struct LassoSamlp2StatusCode { LassoSamlp2StatusCode* StatusCode, char* Value } struct LassoSamlp2StatusDetail { } struct LassoSamlp2StatusResponse { LassoSaml2NameID* Issuer, LassoSamlp2Extensions* Extensions, LassoSamlp2Status* Status, char* ID, char* InResponseTo, char* Version, char* IssueInstant, char* Destination, char* Consent, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlp2SubjectQueryAbstract { LassoSaml2Subject* Subject } struct LassoSamlp2Terminate { } struct LassoSamlpRequest { char* AssertionArtifact } struct LassoSamlpRequestAbstract { GList* RespondWith, char* RequestID, int MajorVersion, int MinorVersion, char* IssueInstant, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlpResponse { LassoSamlpStatus* Status, GList* Assertion } struct LassoSamlpResponseAbstract { char* ResponseID, char* InResponseTo, int MajorVersion, int MinorVersion, char* IssueInstant, char* Recipient, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlpStatus { LassoSamlpStatusCode* StatusCode, char* StatusMessage } struct LassoSamlpStatusCode { LassoSamlpStatusCode* StatusCode, char* Value } struct LassoServer { GHashTable* providers, GHashTable* services, gchar* private_key, gchar* private_key_password, gchar* certificate, LassoSignatureMethod signature_method, LassoServerPrivate* private_data } struct LassoSession { GHashTable* assertions, gboolean is_dirty, LassoSessionPrivate* private_data } LassoSignatureMethod LassoSignatureType GList* OFTYPE ( LassoNode) lasso_session_get_assertions( LassoSession* session, const char* provider_id ) gint lasso_assertion_query_build_request_msg ( LassoAssertionQuery* assertion_query ) int lasso_assertion_query_build_response_msg ( LassoAssertionQuery* assertion_query ) None lasso_assertion_query_destroy ( LassoAssertionQuery* assertion_query ) GType lasso_assertion_query_get_type ( ) gint lasso_assertion_query_init_request ( LassoAssertionQuery* assertion_query, char* remote_provider_id, LassoHttpMethod http_method, LassoAssertionQueryRequestType query_request_type ) LassoAssertionQuery* lasso_assertion_query_new ( LassoServer* server ) gint lasso_assertion_query_process_request_msg ( LassoAssertionQuery* assertion_query, gchar* request_msg ) gint lasso_assertion_query_process_response_msg ( LassoAssertionQuery* assertion_query, gchar* response_msg ) gint lasso_assertion_query_validate_request ( LassoAssertionQuery* assertion_query ) int lasso_check_version ( int major, int minor, int subminor, LassoCheckVersionMode mode ) gint lasso_defederation_build_notification_msg ( LassoDefederation* defederation ) None lasso_defederation_destroy ( LassoDefederation* defederation ) GType lasso_defederation_get_type ( ) gint lasso_defederation_init_notification ( LassoDefederation* defederation, gchar* remote_providerID, LassoHttpMethod http_method ) LassoDefederation* lasso_defederation_new ( LassoServer* server ) gint lasso_defederation_process_notification_msg ( LassoDefederation* defederation, gchar* notification_msg ) gint lasso_defederation_validate_notification ( LassoDefederation* defederation ) GType lasso_ds_key_info_get_type ( ) LassoDsKeyInfo* lasso_ds_key_info_new ( ) GType lasso_ds_key_value_get_type ( ) LassoDsKeyValue* lasso_ds_key_value_new ( ) GType lasso_ds_rsa_key_value_get_type ( ) LassoDsRsaKeyValue* lasso_ds_rsa_key_value_new ( ) None lasso_ecp_destroy ( LassoEcp* ecp ) GType lasso_ecp_get_type ( ) LassoEcp* lasso_ecp_new ( LassoServer* server ) int lasso_ecp_process_authn_request_msg ( LassoEcp* ecp, const char* authn_request_msg ) int lasso_ecp_process_response_msg ( LassoEcp* ecp, const char* response_msg ) None lasso_federation_build_local_name_identifier ( LassoFederation* federation, const gchar* nameQualifier, const gchar* format, const gchar* content ) None lasso_federation_destroy ( LassoFederation* federation ) GType lasso_federation_get_type ( ) LassoFederation* lasso_federation_new ( gchar* remote_providerID ) gboolean lasso_federation_verify_name_identifier ( LassoFederation* federation, LassoNode* name_identifier ) char* lasso_get_prefix_for_dst_service_href ( const char* href ) gchar* lasso_get_prefix_for_idwsf2_dst_service_href ( const gchar* href ) None lasso_identity_destroy ( LassoIdentity* identity ) gchar* lasso_identity_dump ( LassoIdentity* identity ) LassoFederation* lasso_identity_get_federation ( LassoIdentity* identity, const char* providerID ) GType lasso_identity_get_type ( ) LassoIdentity* lasso_identity_new ( ) LassoIdentity* lasso_identity_new_from_dump ( const gchar* dump ) int lasso_init ( ) int lasso_lecp_build_authn_request_envelope_msg ( LassoLecp* lecp ) int lasso_lecp_build_authn_request_msg ( LassoLecp* lecp ) int lasso_lecp_build_authn_response_envelope_msg ( LassoLecp* lecp ) int lasso_lecp_build_authn_response_msg ( LassoLecp* lecp ) None lasso_lecp_destroy ( LassoLecp* lecp ) GType lasso_lecp_get_type ( ) int lasso_lecp_init_authn_request ( LassoLecp* lecp, const char* remote_providerID ) LassoLecp* lasso_lecp_new ( LassoServer* server ) int lasso_lecp_process_authn_request_envelope_msg ( LassoLecp* lecp, const char* request_msg ) int lasso_lecp_process_authn_request_msg ( LassoLecp* lecp, const char* authn_request_msg ) int lasso_lecp_process_authn_response_envelope_msg ( LassoLecp* lecp, const char* response_msg ) GType lasso_lib_assertion_get_type ( ) LassoLibAssertion* lasso_lib_assertion_new ( ) LassoLibAssertion* lasso_lib_assertion_new_full ( const char* issuer, const char* requestID, const char* audience, const char* notBefore, const char* notOnOrAfter ) GType lasso_lib_authentication_statement_get_type ( ) LassoLibAuthenticationStatement* lasso_lib_authentication_statement_new ( ) LassoLibAuthenticationStatement* lasso_lib_authentication_statement_new_full ( const char* authenticationMethod, const char* authenticationInstant, const char* reauthenticateOnOrAfter, LassoSamlNameIdentifier* sp_identifier, LassoSamlNameIdentifier* idp_identifier ) GType lasso_lib_authn_context_get_type ( ) LassoNode* lasso_lib_authn_context_new ( ) GType lasso_lib_authn_request_envelope_get_type ( ) LassoLibAuthnRequestEnvelope* lasso_lib_authn_request_envelope_new ( ) LassoLibAuthnRequestEnvelope* lasso_lib_authn_request_envelope_new_full ( LassoLibAuthnRequest* authnRequest, char* providerID, char* assertionConsumerServiceURL ) GType lasso_lib_authn_request_get_type ( ) LassoLibAuthnRequest* lasso_lib_authn_request_new ( ) GType lasso_lib_authn_response_envelope_get_type ( ) LassoLibAuthnResponseEnvelope* lasso_lib_authn_response_envelope_new ( LassoLibAuthnResponse* response, char* assertionConsumerServiceURL ) GType lasso_lib_authn_response_get_type ( ) LassoNode* lasso_lib_authn_response_new ( char* providerID, LassoLibAuthnRequest* request ) GType lasso_lib_federation_termination_notification_get_type ( ) LassoNode* lasso_lib_federation_termination_notification_new ( ) LassoLibFederationTerminationNotification* lasso_lib_federation_termination_notification_new_full ( char* providerID, LassoSamlNameIdentifier* nameIdentifier, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_idp_entries_get_type ( ) LassoNode* lasso_lib_idp_entries_new ( ) GType lasso_lib_idp_entry_get_type ( ) LassoNode* lasso_lib_idp_entry_new ( ) GType lasso_lib_idp_list_get_type ( ) LassoNode* lasso_lib_idp_list_new ( ) GType lasso_lib_logout_request_get_type ( ) LassoNode* lasso_lib_logout_request_new ( ) LassoLibLogoutRequest* lasso_lib_logout_request_new_full ( char* providerID, LassoSamlNameIdentifier* nameIdentifier, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_logout_response_get_type ( ) LassoNode* lasso_lib_logout_response_new ( ) LassoLibLogoutResponse* lasso_lib_logout_response_new_full ( char* providerID, const char* statusCodeValue, LassoLibLogoutRequest* request, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_name_identifier_mapping_request_get_type ( ) LassoNode* lasso_lib_name_identifier_mapping_request_new ( ) LassoLibNameIdentifierMappingRequest* lasso_lib_name_identifier_mapping_request_new_full ( char* providerID, LassoSamlNameIdentifier* nameIdentifier, const char* targetNamespace, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_name_identifier_mapping_response_get_type ( ) LassoNode* lasso_lib_name_identifier_mapping_response_new ( ) LassoLibNameIdentifierMappingResponse* lasso_lib_name_identifier_mapping_response_new_full ( char* provideRID, const char* statusCodeValue, LassoLibNameIdentifierMappingRequest* request, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_register_name_identifier_request_get_type ( ) LassoNode* lasso_lib_register_name_identifier_request_new ( ) LassoLibRegisterNameIdentifierRequest* lasso_lib_register_name_identifier_request_new_full ( const char* providerID, LassoSamlNameIdentifier* idpNameIdentifier, LassoSamlNameIdentifier* spNameIdentifier, LassoSamlNameIdentifier* oldNameIdentifier, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_register_name_identifier_response_get_type ( ) LassoNode* lasso_lib_register_name_identifier_response_new ( ) LassoLibRegisterNameIdentifierResponse* lasso_lib_register_name_identifier_response_new_full ( const char* providerID, const char* statusCodeValue, LassoLibRegisterNameIdentifierRequest* request, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_request_authn_context_get_type ( ) LassoLibRequestAuthnContext* lasso_lib_request_authn_context_new ( ) GType lasso_lib_scoping_get_type ( ) LassoLibScoping* lasso_lib_scoping_new ( ) GType lasso_lib_status_response_get_type ( ) LassoNode* lasso_lib_status_response_new ( ) GType lasso_lib_subject_get_type ( ) LassoLibSubject* lasso_lib_subject_new ( ) gint lasso_login_accept_sso ( LassoLogin* login ) gint lasso_login_build_artifact_msg ( LassoLogin* login, LassoHttpMethod http_method ) int lasso_login_build_assertion ( LassoLogin* login, const char* authenticationMethod, const char* authenticationInstant, const char* reauthenticateOnOrAfter, const char* notBefore, const char* notOnOrAfter ) gint lasso_login_build_authn_request_msg ( LassoLogin* login ) gint lasso_login_build_authn_response_msg ( LassoLogin* login ) gint lasso_login_build_request_msg ( LassoLogin* login ) gint lasso_login_build_response_msg ( LassoLogin* login, gchar* remote_providerID ) None lasso_login_destroy ( LassoLogin* login ) gchar* lasso_login_dump ( LassoLogin* login ) GType lasso_login_get_type ( ) gint lasso_login_init_authn_request ( LassoLogin* login, const gchar* remote_providerID, LassoHttpMethod http_method ) gint lasso_login_init_idp_initiated_authn_request ( LassoLogin* login, const gchar* remote_providerID ) gint lasso_login_init_request ( LassoLogin* login, gchar* response_msg, LassoHttpMethod response_http_method ) gboolean lasso_login_must_ask_for_consent ( LassoLogin* login ) gboolean lasso_login_must_authenticate ( LassoLogin* login ) LassoLogin* lasso_login_new ( LassoServer* server ) LassoLogin* lasso_login_new_from_dump ( LassoServer* server, const gchar* dump ) int lasso_login_process_authn_request_msg ( LassoLogin* login, const char* authn_request_msg ) gint lasso_login_process_authn_response_msg ( LassoLogin* login, gchar* authn_response_msg ) int lasso_login_process_paos_response_msg ( LassoLogin* login, gchar* msg ) gint lasso_login_process_request_msg ( LassoLogin* login, gchar* request_msg ) gint lasso_login_process_response_msg ( LassoLogin* login, gchar* response_msg ) int lasso_login_set_resourceId ( LassoLogin* login, const char* content ) int lasso_login_validate_request_msg ( LassoLogin* login, gboolean authentication_result, gboolean is_consent_obtained ) gint lasso_logout_build_request_msg ( LassoLogout* logout ) gint lasso_logout_build_response_msg ( LassoLogout* logout ) None lasso_logout_destroy ( LassoLogout* logout ) gchar* lasso_logout_dump ( LassoLogout* logout ) gchar* lasso_logout_get_next_providerID ( LassoLogout* logout ) GType lasso_logout_get_type ( ) gint lasso_logout_init_request ( LassoLogout* logout, gchar* remote_providerID, LassoHttpMethod request_method ) LassoLogout* lasso_logout_new ( LassoServer* server ) LassoLogout* lasso_logout_new_from_dump ( LassoServer* server, const gchar* dump ) gint lasso_logout_process_request_msg ( LassoLogout* logout, gchar* request_msg ) gint lasso_logout_process_response_msg ( LassoLogout* logout, gchar* response_msg ) gint lasso_logout_reset_providerID_index ( LassoLogout* logout ) gint lasso_logout_validate_request ( LassoLogout* logout ) GType lasso_misc_text_node_get_type ( ) LassoNode* lasso_misc_text_node_new ( ) LassoMiscTextNode* lasso_misc_text_node_new_with_string ( char* content ) gint lasso_name_id_management_build_request_msg ( LassoNameIdManagement* name_id_management ) int lasso_name_id_management_build_response_msg ( LassoNameIdManagement* name_id_management ) None lasso_name_id_management_destroy ( LassoNameIdManagement* name_id_management ) char* lasso_name_id_management_dump ( LassoNameIdManagement* name_id_management ) GType lasso_name_id_management_get_type ( ) gint lasso_name_id_management_init_request ( LassoNameIdManagement* name_id_management, char* remote_provider_id, char* new_name_id, LassoHttpMethod http_method ) LassoNameIdManagement* lasso_name_id_management_new ( LassoServer* server ) LassoNameIdManagement* lasso_name_id_management_new_from_dump ( LassoServer* server, const char* dump ) gint lasso_name_id_management_process_request_msg ( LassoNameIdManagement* name_id_management, gchar* request_msg ) gint lasso_name_id_management_process_response_msg ( LassoNameIdManagement* name_id_management, gchar* response_msg ) gint lasso_name_id_management_validate_request ( LassoNameIdManagement* name_id_management ) gint lasso_name_identifier_mapping_build_request_msg ( LassoNameIdentifierMapping* mapping ) gint lasso_name_identifier_mapping_build_response_msg ( LassoNameIdentifierMapping* mapping ) None lasso_name_identifier_mapping_destroy ( LassoNameIdentifierMapping* mapping ) GType lasso_name_identifier_mapping_get_type ( ) gint lasso_name_identifier_mapping_init_request ( LassoNameIdentifierMapping* mapping, gchar* targetNamespace, gchar* remote_providerID ) LassoNameIdentifierMapping* lasso_name_identifier_mapping_new ( LassoServer* server ) gint lasso_name_identifier_mapping_process_request_msg ( LassoNameIdentifierMapping* mapping, gchar* request_msg ) gint lasso_name_identifier_mapping_process_response_msg ( LassoNameIdentifierMapping* mapping, gchar* response_msg ) gint lasso_name_identifier_mapping_validate_request ( LassoNameIdentifierMapping* mapping ) gint lasso_name_registration_build_request_msg ( LassoNameRegistration* name_registration ) gint lasso_name_registration_build_response_msg ( LassoNameRegistration* name_registration ) None lasso_name_registration_destroy ( LassoNameRegistration* name_registration ) gchar* lasso_name_registration_dump ( LassoNameRegistration* name_registration ) GType lasso_name_registration_get_type ( ) gint lasso_name_registration_init_request ( LassoNameRegistration* name_registration, char* remote_providerID, LassoHttpMethod http_method ) LassoNameRegistration* lasso_name_registration_new ( LassoServer* server ) LassoNameRegistration* lasso_name_registration_new_from_dump ( LassoServer* server, const char* dump ) gint lasso_name_registration_process_request_msg ( LassoNameRegistration* name_registration, gchar* request_msg ) gint lasso_name_registration_process_response_msg ( LassoNameRegistration* name_registration, gchar* response_msg ) gint lasso_name_registration_validate_request ( LassoNameRegistration* name_registration ) None lasso_node_cleanup_original_xmlnodes ( LassoNode* node ) None lasso_node_destroy ( LassoNode* node ) char* lasso_node_dump ( LassoNode* node ) char* lasso_node_export_to_base64 ( LassoNode* node ) char* lasso_node_export_to_ecp_soap_response ( LassoNode* node, const char* assertionConsumerURL ) char* lasso_node_export_to_paos_request ( LassoNode* node, const char* issuer, const char* responseConsumerURL, const char* relay_state ) char* lasso_node_export_to_query ( LassoNode* node, LassoSignatureMethod sign_method, const char* private_key_file ) char* lasso_node_export_to_soap ( LassoNode* node ) gchar* lasso_node_export_to_xml ( LassoNode* node ) xmlNode* lasso_node_get_original_xmlnode ( LassoNode* node ) GType lasso_node_get_type ( ) xmlNode* lasso_node_get_xmlNode ( LassoNode* node, gboolean lasso_dump ) LassoMessageFormat lasso_node_init_from_message ( LassoNode* node, const char* message ) gboolean lasso_node_init_from_query ( LassoNode* node, const char* query ) int lasso_node_init_from_xml ( LassoNode* node, xmlNode* xmlnode ) LassoNode* lasso_node_new ( ) LassoNode* lasso_node_new_from_dump ( const char* dump ) LassoNode* lasso_node_new_from_soap ( const char* soap ) LassoNode* lasso_node_new_from_xmlNode ( xmlNode* node ) None lasso_node_set_original_xmlnode ( LassoNode* node, xmlNode* xmlNode ) char* lasso_profile_get_artifact ( LassoProfile* profile ) char* lasso_profile_get_artifact_message ( LassoProfile* profile ) LassoIdentity* lasso_profile_get_identity ( LassoProfile* profile ) LassoNode* lasso_profile_get_nameIdentifier ( LassoProfile* profile ) LassoRequestType lasso_profile_get_request_type_from_soap_msg ( const gchar* soap ) LassoSession* lasso_profile_get_session ( LassoProfile* profile ) GType lasso_profile_get_type ( ) gboolean lasso_profile_is_identity_dirty ( LassoProfile* profile ) gboolean lasso_profile_is_liberty_query ( const gchar* query ) gboolean lasso_profile_is_saml_query ( const gchar* query ) gboolean lasso_profile_is_session_dirty ( LassoProfile* profile ) None lasso_profile_set_artifact_message ( LassoProfile* profile, char* message ) gint lasso_profile_set_identity_from_dump ( LassoProfile* profile, const gchar* dump ) gint lasso_profile_set_session_from_dump ( LassoProfile* profile, const gchar* dump ) gboolean lasso_provider_accept_http_method ( LassoProvider* provider, LassoProvider* remote_provider, LassoMdProtocolType protocol_type, LassoHttpMethod http_method, gboolean initiate_profile ) gchar* lasso_provider_get_assertion_consumer_service_url ( LassoProvider* provider, const char* service_id ) gchar* lasso_provider_get_base64_succinct_id ( LassoProvider* provider ) LassoHttpMethod lasso_provider_get_first_http_method ( LassoProvider* provider, LassoProvider* remote_provider, LassoMdProtocolType protocol_type ) GList* lasso_provider_get_metadata_list ( LassoProvider* provider, const char* name ) gchar* lasso_provider_get_metadata_one ( LassoProvider* provider, const char* name ) xmlNode* lasso_provider_get_organization ( LassoProvider* provider ) LassoProtocolConformance lasso_provider_get_protocol_conformance ( LassoProvider* provider ) GType lasso_provider_get_type ( ) gboolean lasso_provider_has_protocol_profile ( LassoProvider* provider, LassoMdProtocolType protocol_type, const char* protocol_profile ) LassoProvider* lasso_provider_new ( LassoProviderRole role, const char* metadata, const char* public_key, const char* ca_cert_chain ) LassoProvider* lasso_provider_new_from_buffer ( LassoProviderRole role, const char* metadata, const char* public_key, const char* ca_cert_chain ) LassoProvider* lasso_provider_new_from_dump ( const gchar* dump ) None lasso_provider_set_encryption_mode ( LassoProvider* provider, LassoEncryptionMode encryption_mode ) None lasso_provider_set_encryption_sym_key_type ( LassoProvider* provider, LassoEncryptionSymKeyType encryption_sym_key_type ) None lasso_register_dst_service ( const char* prefix, const char* href ) None lasso_register_idwsf2_dst_service ( const gchar* prefix, const gchar* href ) GType lasso_saml2_action_get_type ( ) LassoNode* lasso_saml2_action_new ( ) LassoSaml2Action* lasso_saml2_action_new_with_string ( char* content ) GType lasso_saml2_advice_get_type ( ) LassoNode* lasso_saml2_advice_new ( ) GType lasso_saml2_assertion_get_type ( ) LassoNode* lasso_saml2_assertion_new ( ) GType lasso_saml2_attribute_get_type ( ) LassoNode* lasso_saml2_attribute_new ( ) GType lasso_saml2_attribute_statement_get_type ( ) LassoNode* lasso_saml2_attribute_statement_new ( ) GType lasso_saml2_attribute_value_get_type ( ) LassoSaml2AttributeValue* lasso_saml2_attribute_value_new ( ) GType lasso_saml2_audience_restriction_get_type ( ) LassoNode* lasso_saml2_audience_restriction_new ( ) GType lasso_saml2_authn_context_get_type ( ) LassoNode* lasso_saml2_authn_context_new ( ) GType lasso_saml2_authn_statement_get_type ( ) LassoNode* lasso_saml2_authn_statement_new ( ) GType lasso_saml2_authz_decision_statement_get_type ( ) LassoNode* lasso_saml2_authz_decision_statement_new ( ) GType lasso_saml2_base_idabstract_get_type ( ) LassoNode* lasso_saml2_base_idabstract_new ( ) GType lasso_saml2_condition_abstract_get_type ( ) LassoNode* lasso_saml2_condition_abstract_new ( ) GType lasso_saml2_conditions_get_type ( ) LassoNode* lasso_saml2_conditions_new ( ) GType lasso_saml2_encrypted_element_get_type ( ) LassoNode* lasso_saml2_encrypted_element_new ( ) GType lasso_saml2_evidence_get_type ( ) LassoNode* lasso_saml2_evidence_new ( ) GType lasso_saml2_key_info_confirmation_data_get_type ( ) LassoNode* lasso_saml2_key_info_confirmation_data_new ( ) GType lasso_saml2_name_id_get_type ( ) LassoNode* lasso_saml2_name_id_new ( ) LassoSaml2NameID* lasso_saml2_name_id_new_with_string ( char* content ) GType lasso_saml2_one_time_use_get_type ( ) LassoNode* lasso_saml2_one_time_use_new ( ) GType lasso_saml2_proxy_restriction_get_type ( ) LassoNode* lasso_saml2_proxy_restriction_new ( ) GType lasso_saml2_statement_abstract_get_type ( ) LassoNode* lasso_saml2_statement_abstract_new ( ) GType lasso_saml2_subject_confirmation_data_get_type ( ) LassoNode* lasso_saml2_subject_confirmation_data_new ( ) GType lasso_saml2_subject_confirmation_get_type ( ) LassoNode* lasso_saml2_subject_confirmation_new ( ) GType lasso_saml2_subject_get_type ( ) GType lasso_saml2_subject_locality_get_type ( ) LassoNode* lasso_saml2_subject_locality_new ( ) LassoNode* lasso_saml2_subject_new ( ) GType lasso_saml_advice_get_type ( ) LassoNode* lasso_saml_advice_new ( ) GType lasso_saml_assertion_get_type ( ) LassoSamlAssertion* lasso_saml_assertion_new ( ) GType lasso_saml_attribute_designator_get_type ( ) LassoNode* lasso_saml_attribute_designator_new ( ) GType lasso_saml_attribute_get_type ( ) LassoSamlAttribute* lasso_saml_attribute_new ( ) GType lasso_saml_attribute_statement_get_type ( ) LassoSamlAttributeStatement* lasso_saml_attribute_statement_new ( ) GType lasso_saml_attribute_value_get_type ( ) LassoSamlAttributeValue* lasso_saml_attribute_value_new ( ) GType lasso_saml_audience_restriction_condition_get_type ( ) LassoSamlAudienceRestrictionCondition* lasso_saml_audience_restriction_condition_new ( ) LassoSamlAudienceRestrictionCondition* lasso_saml_audience_restriction_condition_new_full ( const char* audience ) GType lasso_saml_authentication_statement_get_type ( ) LassoNode* lasso_saml_authentication_statement_new ( ) GType lasso_saml_authority_binding_get_type ( ) LassoNode* lasso_saml_authority_binding_new ( ) GType lasso_saml_condition_abstract_get_type ( ) GType lasso_saml_conditions_get_type ( ) LassoSamlConditions* lasso_saml_conditions_new ( ) GType lasso_saml_name_identifier_get_type ( ) LassoSamlNameIdentifier* lasso_saml_name_identifier_new ( ) LassoSamlNameIdentifier* lasso_saml_name_identifier_new_from_xmlNode ( xmlNode* xmlnode ) GType lasso_saml_statement_abstract_get_type ( ) GType lasso_saml_subject_confirmation_get_type ( ) LassoSamlSubjectConfirmation* lasso_saml_subject_confirmation_new ( ) GType lasso_saml_subject_get_type ( ) GType lasso_saml_subject_locality_get_type ( ) LassoNode* lasso_saml_subject_locality_new ( ) LassoNode* lasso_saml_subject_new ( ) GType lasso_saml_subject_statement_abstract_get_type ( ) GType lasso_saml_subject_statement_get_type ( ) LassoNode* lasso_saml_subject_statement_new ( ) GType lasso_samlp2_artifact_resolve_get_type ( ) LassoNode* lasso_samlp2_artifact_resolve_new ( ) GType lasso_samlp2_artifact_response_get_type ( ) LassoNode* lasso_samlp2_artifact_response_new ( ) GType lasso_samlp2_assertion_id_request_get_type ( ) LassoNode* lasso_samlp2_assertion_id_request_new ( ) GType lasso_samlp2_attribute_query_get_type ( ) LassoNode* lasso_samlp2_attribute_query_new ( ) GType lasso_samlp2_authn_query_get_type ( ) LassoNode* lasso_samlp2_authn_query_new ( ) GType lasso_samlp2_authn_request_get_type ( ) LassoNode* lasso_samlp2_authn_request_new ( ) GType lasso_samlp2_authz_decision_query_get_type ( ) LassoNode* lasso_samlp2_authz_decision_query_new ( ) GType lasso_samlp2_extensions_get_type ( ) LassoNode* lasso_samlp2_extensions_new ( ) GType lasso_samlp2_idp_entry_get_type ( ) LassoNode* lasso_samlp2_idp_entry_new ( ) GType lasso_samlp2_idp_list_get_type ( ) LassoNode* lasso_samlp2_idp_list_new ( ) GType lasso_samlp2_logout_request_get_type ( ) LassoNode* lasso_samlp2_logout_request_new ( ) GType lasso_samlp2_logout_response_get_type ( ) LassoNode* lasso_samlp2_logout_response_new ( ) GType lasso_samlp2_manage_name_id_request_get_type ( ) LassoNode* lasso_samlp2_manage_name_id_request_new ( ) GType lasso_samlp2_manage_name_id_response_get_type ( ) LassoNode* lasso_samlp2_manage_name_id_response_new ( ) GType lasso_samlp2_name_id_mapping_request_get_type ( ) LassoNode* lasso_samlp2_name_id_mapping_request_new ( ) GType lasso_samlp2_name_id_mapping_response_get_type ( ) LassoNode* lasso_samlp2_name_id_mapping_response_new ( ) GType lasso_samlp2_name_id_policy_get_type ( ) LassoNode* lasso_samlp2_name_id_policy_new ( ) GType lasso_samlp2_request_abstract_get_type ( ) LassoNode* lasso_samlp2_request_abstract_new ( ) GType lasso_samlp2_requested_authn_context_get_type ( ) LassoNode* lasso_samlp2_requested_authn_context_new ( ) GType lasso_samlp2_response_get_type ( ) LassoNode* lasso_samlp2_response_new ( ) GType lasso_samlp2_scoping_get_type ( ) LassoNode* lasso_samlp2_scoping_new ( ) GType lasso_samlp2_status_code_get_type ( ) LassoNode* lasso_samlp2_status_code_new ( ) GType lasso_samlp2_status_detail_get_type ( ) LassoNode* lasso_samlp2_status_detail_new ( ) GType lasso_samlp2_status_get_type ( ) LassoNode* lasso_samlp2_status_new ( ) GType lasso_samlp2_status_response_get_type ( ) LassoNode* lasso_samlp2_status_response_new ( ) GType lasso_samlp2_subject_query_abstract_get_type ( ) LassoNode* lasso_samlp2_subject_query_abstract_new ( ) GType lasso_samlp2_terminate_get_type ( ) LassoNode* lasso_samlp2_terminate_new ( ) GType lasso_samlp_request_abstract_get_type ( ) GType lasso_samlp_request_get_type ( ) LassoNode* lasso_samlp_request_new ( ) None lasso_samlp_response_abstract_fill ( LassoSamlpResponseAbstract* response, const char* InResponseTo, const char* Recipient ) GType lasso_samlp_response_abstract_get_type ( ) GType lasso_samlp_response_get_type ( ) LassoNode* lasso_samlp_response_new ( ) GType lasso_samlp_status_code_get_type ( ) LassoSamlpStatusCode* lasso_samlp_status_code_new ( ) GType lasso_samlp_status_get_type ( ) LassoSamlpStatus* lasso_samlp_status_new ( ) gint lasso_server_add_provider ( LassoServer* server, LassoProviderRole role, const gchar* metadata, const gchar* public_key, const gchar* ca_cert_chain ) gint lasso_server_add_provider_from_buffer ( LassoServer* server, LassoProviderRole role, const gchar* metadata, const gchar* public_key, const gchar* ca_cert_chain ) gint lasso_server_add_service ( LassoServer* server, LassoNode* service ) gint lasso_server_add_service_from_dump ( LassoServer* server, const gchar* dump ) None lasso_server_destroy ( LassoServer* server ) gchar* lasso_server_dump ( LassoServer* server ) LassoProvider* lasso_server_get_provider ( LassoServer* server, const gchar* providerID ) GType lasso_server_get_type ( ) int lasso_server_load_affiliation ( LassoServer* server, const gchar* filename ) LassoServer* lasso_server_new ( const gchar* metadata, const gchar* private_key, const gchar* private_key_password, const gchar* certificate ) LassoServer* lasso_server_new_from_buffers ( const gchar* metadata, const gchar* private_key, const gchar* private_key_password, const gchar* certificate ) LassoServer* lasso_server_new_from_dump ( const gchar* dump ) int lasso_server_set_encryption_private_key ( LassoServer* server, const gchar* filename ) None lasso_session_destroy ( LassoSession* session ) gchar* lasso_session_dump ( LassoSession* session ) gchar* lasso_session_get_provider_index ( LassoSession* session, gint index ) GType lasso_session_get_type ( ) gboolean lasso_session_is_empty ( LassoSession* session ) LassoSession* lasso_session_new ( ) LassoSession* lasso_session_new_from_dump ( const gchar* dump ) None lasso_set_flag ( char* flag ) int lasso_shutdown ( ) const char* lasso_strerror ( int error_code ) lasso-2.8.2/abi/PaxHeaders/abi-2.3.20000644000000000000000000000013113766621500013600 xustar0029 mtime=1608196928.71889494 30 atime=1678098069.993489071 30 ctime=1678814319.933947183 lasso-2.8.2/abi/abi-2.3.20000644000175000017500000020626113766621500017060 0ustar00bdauvergnebdauvergne00000000000000BACKWARD_COMP_H LASSO_ASSERTION_QUERY_ERROR_ATTRIBUTE_REQUEST_ALREADY_EXIST LASSO_ASSERTION_QUERY_ERROR_NOT_AN_ATTRIBUTE_QUERY LASSO_ASSERTION_QUERY_REQUEST_TYPE_ASSERTION_ID LASSO_ASSERTION_QUERY_REQUEST_TYPE_ATTRIBUTE LASSO_ASSERTION_QUERY_REQUEST_TYPE_AUTHN LASSO_ASSERTION_QUERY_REQUEST_TYPE_AUTHZ_DECISION LASSO_ASSERTION_QUERY_REQUEST_TYPE_LAST LASSO_ASSERTION_QUERY_REQUEST_TYPE_UNSET LASSO_CERTIFICATE_ATTRIBUTE LASSO_CHECK_VERSIONABI_COMPATIBLE LASSO_CHECK_VERSION_EXACT LASSO_CHECK_VERSION_NUMERIC LASSO_DATA_SERVICE_ERROR_CANNOT_ADD_ITEM LASSO_DATA_SERVICE_ERROR_UNREGISTERED_DST LASSO_DEFEDERATION_ERROR_MISSING_NAME_IDENTIFIER LASSO_DISCOVERY_ERROR_FAILED_TO_BUILD_ENDPOINT_REFERENCE LASSO_DISCOVERY_ERROR_MISSING_REQUESTED_SERVICE LASSO_DISCOVERY_ERROR_SVC_METADATA_ASSOCIATION_ADD_FAILED LASSO_DISCOVERY_ERROR_SVC_METADATA_REGISTER_FAILED LASSO_DST_ERROR_EMPTY_REQUEST LASSO_DST_ERROR_MALFORMED_QUERY LASSO_DST_ERROR_MISSING_SERVICE_DATA LASSO_DST_ERROR_MODIFY_FAILED LASSO_DST_ERROR_MODIFY_PARTIALLY_FAILED LASSO_DST_ERROR_NEW_DATA_MISSING LASSO_DST_ERROR_NO_DATA LASSO_DST_ERROR_QUERY_FAILED LASSO_DST_ERROR_QUERY_NOT_FOUND LASSO_DST_ERROR_QUERY_PARTIALLY_FAILED LASSO_DS_ERROR_CA_CERT_CHAIN_LOAD_FAILED LASSO_DS_ERROR_CERTIFICATE_LOAD_FAILED LASSO_DS_ERROR_CONTEXT_CREATION_FAILED LASSO_DS_ERROR_DECRYPTION_FAILED LASSO_DS_ERROR_DECRYPTION_FAILED_MISSING_PRIVATE_KEY LASSO_DS_ERROR_DIGEST_COMPUTE_FAILED LASSO_DS_ERROR_ENCRYPTION_FAILED LASSO_DS_ERROR_INVALID_REFERENCE_FOR_SAML LASSO_DS_ERROR_INVALID_SIGALG LASSO_DS_ERROR_INVALID_SIGNATURE LASSO_DS_ERROR_KEYS_MNGR_CREATION_FAILED LASSO_DS_ERROR_KEYS_MNGR_INIT_FAILED LASSO_DS_ERROR_PRIVATE_KEY_LOAD_FAILED LASSO_DS_ERROR_PUBLIC_KEY_LOAD_FAILED LASSO_DS_ERROR_SIGNATURE_FAILED LASSO_DS_ERROR_SIGNATURE_NOT_FOUND LASSO_DS_ERROR_SIGNATURE_TEMPLATE_NOT_FOUND LASSO_DS_ERROR_SIGNATURE_TMPL_CREATION_FAILED LASSO_DS_ERROR_SIGNATURE_VERIFICATION_FAILED LASSO_DS_ERROR_TOO_MUCH_REFERENCES LASSO_DS_HREF LASSO_DS_PREFIX LASSO_DURATION_DAY LASSO_DURATION_HOUR LASSO_DURATION_MINUTE LASSO_DURATION_WEEK LASSO_ECP_HREF LASSO_ECP_PREFIX LASSO_ENCRYPTION_MODE_ASSERTION LASSO_ENCRYPTION_MODE_NAMEID LASSO_ENCRYPTION_MODE_NONE LASSO_ENCRYPTION_SYM_KEY_TYPE_3DES LASSO_ENCRYPTION_SYM_KEY_TYPE_AES_128 LASSO_ENCRYPTION_SYM_KEY_TYPE_AES_256 LASSO_ENCRYPTION_SYM_KEY_TYPE_DEFAULT LASSO_ERROR_CAST_FAILED LASSO_ERROR_OUT_OF_MEMORY LASSO_ERROR_UNDEFINED LASSO_ERROR_UNIMPLEMENTED LASSO_HTTP_METHOD_ANY LASSO_HTTP_METHOD_ARTIFACT_GET LASSO_HTTP_METHOD_ARTIFACT_POST LASSO_HTTP_METHOD_GET LASSO_HTTP_METHOD_IDP_INITIATED LASSO_HTTP_METHOD_LAST LASSO_HTTP_METHOD_NONE LASSO_HTTP_METHOD_PAOS LASSO_HTTP_METHOD_POST LASSO_HTTP_METHOD_REDIRECT LASSO_HTTP_METHOD_SOAP LASSO_IDWSF2_DISCOVERY_ERROR_DUPLICATE LASSO_IDWSF2_DISCOVERY_ERROR_FAILED LASSO_IDWSF2_DISCOVERY_ERROR_FORBIDDEN LASSO_IDWSF2_DISCOVERY_ERROR_LOGICAL_DUPLICATE LASSO_IDWSF2_DISCOVERY_ERROR_NOT_FOUND LASSO_IDWSF2_DISCOVERY_ERROR_NO_RESULTS LASSO_IDWSF2_DST_ERROR_DUPLICATE_ITEM LASSO_IDWSF2_DST_ERROR_ITEM_NOT_FOUND LASSO_IDWSF2_DST_ERROR_PARTIAL_FAILURE LASSO_IDWSF2_DST_ERROR_UNKNOWN_STATUS_CODE LASSO_LASSO_HREF LASSO_LASSO_PREFIX LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_INTERNET_PROTOCOL LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_INTERNET_PROTOCOL_PASSWORD LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_ONE_FACTOR_CONTRACT LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_ONE_FACTOR_UNREGISTERED LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_TWO_FACTOR_CONTRACT LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_TWO_FACTOR_UNREGISTERED LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PASSWORD LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PASSWORD_PROTECTED_TRANSPORT LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PREVIOUS_SESSION LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SMARTCARD LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SMARTCARD_PKI LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SOFTWARE_PKI LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_TIME_SYNC_TOKEN LASSO_LIB_AUTHN_CONTEXT_COMPARISON_BETTER LASSO_LIB_AUTHN_CONTEXT_COMPARISON_EXACT LASSO_LIB_AUTHN_CONTEXT_COMPARISON_MAXIMUM LASSO_LIB_AUTHN_CONTEXT_COMPARISON_MINIMUM LASSO_LIB_CONSENT_INAPPLICABLE LASSO_LIB_CONSENT_OBTAINED LASSO_LIB_CONSENT_OBTAINED_CURRENT_EXPLICIT LASSO_LIB_CONSENT_OBTAINED_CURRENT_IMPLICIT LASSO_LIB_CONSENT_OBTAINED_PRIOR LASSO_LIB_CONSENT_UNAVAILABLE LASSO_LIB_HREF LASSO_LIB_MAJOR_VERSION_N LASSO_LIB_MINOR_VERSION_N LASSO_LIB_NAMEID_POLICY_TYPE_ANY LASSO_LIB_NAMEID_POLICY_TYPE_FEDERATED LASSO_LIB_NAMEID_POLICY_TYPE_NONE LASSO_LIB_NAMEID_POLICY_TYPE_ONE_TIME LASSO_LIB_NAME_IDENTIFIER_FORMAT_ENCRYPTED LASSO_LIB_NAME_IDENTIFIER_FORMAT_ENTITYID LASSO_LIB_NAME_IDENTIFIER_FORMAT_FEDERATED LASSO_LIB_NAME_IDENTIFIER_FORMAT_ONE_TIME LASSO_LIB_PREFIX LASSO_LIB_PROTOCOL_PROFILE_BRWS_ART LASSO_LIB_PROTOCOL_PROFILE_BRWS_LECP LASSO_LIB_PROTOCOL_PROFILE_BRWS_POST LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_IDP_HTTP LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_IDP_SOAP LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_SP_SOAP LASSO_LIB_PROTOCOL_PROFILE_NIM_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_RNI_IDP_HTTP LASSO_LIB_PROTOCOL_PROFILE_RNI_IDP_SOAP LASSO_LIB_PROTOCOL_PROFILE_RNI_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_RNI_SP_SOAP LASSO_LIB_PROTOCOL_PROFILE_SLO_IDP_HTTP LASSO_LIB_PROTOCOL_PROFILE_SLO_IDP_SOAP LASSO_LIB_PROTOCOL_PROFILE_SLO_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_SLO_SP_SOAP LASSO_LIB_STATUS_CODE_FEDERATION_DOES_NOT_EXIST LASSO_LIB_STATUS_CODE_INVALID_ASSERTION_CONSUMER_SERVICE_INDEX LASSO_LIB_STATUS_CODE_INVALID_SIGNATURE LASSO_LIB_STATUS_CODE_NO_AUTHN_CONTEXT LASSO_LIB_STATUS_CODE_NO_AVAILABLEIDP LASSO_LIB_STATUS_CODE_NO_PASSIVE LASSO_LIB_STATUS_CODE_NO_SUPPORTEDIDP LASSO_LIB_STATUS_CODE_PROXY_COUNT_EXCEEDED LASSO_LIB_STATUS_CODE_UNKNOWN_PRINCIPAL LASSO_LIB_STATUS_CODE_UNSIGNED_AUTHN_REQUEST LASSO_LIB_STATUS_CODE_UNSUPPORTED_PROFILE LASSO_LOGIN_ERROR_ASSERTION_DOES_NOT_MATCH_REQUEST_ID LASSO_LOGIN_ERROR_ASSERTION_REPLAY LASSO_LOGIN_ERROR_CONSENT_NOT_OBTAINED LASSO_LOGIN_ERROR_FEDERATION_NOT_FOUND LASSO_LOGIN_ERROR_INVALID_ASSERTION_SIGNATURE LASSO_LOGIN_ERROR_INVALID_NAMEIDPOLICY LASSO_LOGIN_ERROR_INVALID_SIGNATURE LASSO_LOGIN_ERROR_NO_DEFAULT_ENDPOINT LASSO_LOGIN_ERROR_REQUEST_DENIED LASSO_LOGIN_ERROR_STATUS_NOT_SUCCESS LASSO_LOGIN_ERROR_UNKNOWN_PRINCIPAL LASSO_LOGIN_ERROR_UNSIGNED_AUTHN_REQUEST LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_ART LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_LECP LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_POST LASSO_LOGIN_PROTOCOL_PROFILE_REDIRECT LASSO_LOGOUT_ERROR_FEDERATION_NOT_FOUND LASSO_LOGOUT_ERROR_REQUEST_DENIED LASSO_LOGOUT_ERROR_UNKNOWN_PRINCIPAL LASSO_LOGOUT_ERROR_UNSUPPORTED_PROFILE LASSO_MD_PROTOCOL_TYPE_ARTIFACT_RESOLUTION LASSO_MD_PROTOCOL_TYPE_ASSERTION_ID_REQUEST LASSO_MD_PROTOCOL_TYPE_ATTRIBUTE LASSO_MD_PROTOCOL_TYPE_AUTHN_QUERY LASSO_MD_PROTOCOL_TYPE_AUTHZ LASSO_MD_PROTOCOL_TYPE_FEDERATION_TERMINATION LASSO_MD_PROTOCOL_TYPE_LAST LASSO_MD_PROTOCOL_TYPE_MANAGE_NAME_ID LASSO_MD_PROTOCOL_TYPE_NAME_IDENTIFIER_MAPPING LASSO_MD_PROTOCOL_TYPE_REGISTER_NAME_IDENTIFIER LASSO_MD_PROTOCOL_TYPE_SINGLE_LOGOUT LASSO_MD_PROTOCOL_TYPE_SINGLE_SIGN_ON LASSO_MESSAGE_FORMAT_BASE64 LASSO_MESSAGE_FORMAT_ERROR LASSO_MESSAGE_FORMAT_QUERY LASSO_MESSAGE_FORMAT_SOAP LASSO_MESSAGE_FORMAT_UNKNOWN LASSO_MESSAGE_FORMAT_XML LASSO_MESSAGE_FORMAT_XSCHEMA_ERROR LASSO_METADATA_HREF LASSO_METADATA_PREFIX LASSO_NAME_IDENTIFIER_MAPPING_ERROR_FORBIDDEN_CALL_ON_THIS_SIDE LASSO_NAME_IDENTIFIER_MAPPING_ERROR_MISSING_TARGET_IDENTIFIER LASSO_NAME_IDENTIFIER_MAPPING_ERROR_MISSING_TARGET_NAMESPACE LASSO_PAOS_HREF LASSO_PAOS_PREFIX LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ LASSO_PARAM_ERROR_CHECK_FAILED LASSO_PARAM_ERROR_INVALID_VALUE LASSO_PARAM_ERROR_NON_INITIALIZED_OBJECT LASSO_PRIVATE_KEY_ATTRIBUTE LASSO_PRIVATE_KEY_PASSWORD_ATTRIBUTE LASSO_PRIVATE_STATUS_CODE_FAILED_TO_RESTORE_ARTIFACT LASSO_PROFILE_ERROR_BAD_IDENTITY_DUMP LASSO_PROFILE_ERROR_BAD_SESSION_DUMP LASSO_PROFILE_ERROR_BUILDING_MESSAGE_FAILED LASSO_PROFILE_ERROR_BUILDING_QUERY_FAILED LASSO_PROFILE_ERROR_BUILDING_REQUEST_FAILED LASSO_PROFILE_ERROR_BUILDING_RESPONSE_FAILED LASSO_PROFILE_ERROR_CANNOT_FIND_A_PROVIDER LASSO_PROFILE_ERROR_CANNOT_VERIFY_SIGNATURE LASSO_PROFILE_ERROR_FEDERATION_NOT_FOUND LASSO_PROFILE_ERROR_IDENTITY_NOT_FOUND LASSO_PROFILE_ERROR_INVALID_ARTIFACT LASSO_PROFILE_ERROR_INVALID_ASSERTION LASSO_PROFILE_ERROR_INVALID_ASSERTION_CONDITIONS LASSO_PROFILE_ERROR_INVALID_HTTP_METHOD LASSO_PROFILE_ERROR_INVALID_ISSUER LASSO_PROFILE_ERROR_INVALID_MSG LASSO_PROFILE_ERROR_INVALID_POST_MSG LASSO_PROFILE_ERROR_INVALID_PROTOCOLPROFILE LASSO_PROFILE_ERROR_INVALID_QUERY LASSO_PROFILE_ERROR_INVALID_REQUEST LASSO_PROFILE_ERROR_INVALID_RESPONSE LASSO_PROFILE_ERROR_INVALID_SOAP_MSG LASSO_PROFILE_ERROR_ISSUER_IS_NOT_AN_IDP LASSO_PROFILE_ERROR_MISSING_ARTIFACT LASSO_PROFILE_ERROR_MISSING_ASSERTION LASSO_PROFILE_ERROR_MISSING_ENCRYPTION_PRIVATE_KEY LASSO_PROFILE_ERROR_MISSING_ENDPOINT_REFERENCE LASSO_PROFILE_ERROR_MISSING_ENDPOINT_REFERENCE_ADDRESS LASSO_PROFILE_ERROR_MISSING_ISSUER LASSO_PROFILE_ERROR_MISSING_NAME_IDENTIFIER LASSO_PROFILE_ERROR_MISSING_REMOTE_PROVIDERID LASSO_PROFILE_ERROR_MISSING_REQUEST LASSO_PROFILE_ERROR_MISSING_RESOURCE_OFFERING LASSO_PROFILE_ERROR_MISSING_RESPONSE LASSO_PROFILE_ERROR_MISSING_SERVER LASSO_PROFILE_ERROR_MISSING_SERVICE_DESCRIPTION LASSO_PROFILE_ERROR_MISSING_SERVICE_INSTANCE LASSO_PROFILE_ERROR_MISSING_SERVICE_TYPE LASSO_PROFILE_ERROR_MISSING_STATUS_CODE LASSO_PROFILE_ERROR_MISSING_SUBJECT LASSO_PROFILE_ERROR_NAME_IDENTIFIER_NOT_FOUND LASSO_PROFILE_ERROR_RESPONSE_DOES_NOT_MATCH_REQUEST LASSO_PROFILE_ERROR_SESSION_NOT_FOUND LASSO_PROFILE_ERROR_STATUS_NOT_SUCCESS LASSO_PROFILE_ERROR_UNKNOWN_ISSUER LASSO_PROFILE_ERROR_UNKNOWN_PROFILE_URL LASSO_PROFILE_ERROR_UNKNOWN_PROVIDER LASSO_PROFILE_ERROR_UNSUPPORTED_BINDING LASSO_PROFILE_ERROR_UNSUPPORTED_PROFILE LASSO_PROFILE_SIGNATURE_HINT_FORBID LASSO_PROFILE_SIGNATURE_HINT_FORCE LASSO_PROFILE_SIGNATURE_HINT_MAYBE LASSO_PROFILE_SIGNATURE_VERIFY_HINT_FORCE LASSO_PROFILE_SIGNATURE_VERIFY_HINT_IGNORE LASSO_PROFILE_SIGNATURE_VERIFY_HINT_LAST LASSO_PROFILE_SIGNATURE_VERIFY_HINT_MAYBE LASSO_PROTOCOL_LIBERTY_1_0 LASSO_PROTOCOL_LIBERTY_1_1 LASSO_PROTOCOL_LIBERTY_1_2 LASSO_PROTOCOL_NONE LASSO_PROTOCOL_SAML_2_0 LASSO_PROVIDER_ERROR_MISSING_PUBLIC_KEY LASSO_PROVIDER_ROLE_ANY LASSO_PROVIDER_ROLE_ATTRIBUTE_AUTHORITY LASSO_PROVIDER_ROLE_AUTHN_AUTHORITY LASSO_PROVIDER_ROLE_AUTHZ_AUTHORITY LASSO_PROVIDER_ROLE_BOTH LASSO_PROVIDER_ROLE_IDP LASSO_PROVIDER_ROLE_LAST LASSO_PROVIDER_ROLE_NONE LASSO_PROVIDER_ROLE_SP LASSO_PYTHON_HREF LASSO_REGISTRY_ERROR_KEY_EXISTS LASSO_REQUEST_TYPE_DEFEDERATION LASSO_REQUEST_TYPE_DISCO_MODIFY LASSO_REQUEST_TYPE_DISCO_QUERY LASSO_REQUEST_TYPE_DST_MODIFY LASSO_REQUEST_TYPE_DST_QUERY LASSO_REQUEST_TYPE_IDWSF2_DISCO_QUERY LASSO_REQUEST_TYPE_IDWSF2_DISCO_SVCMD_ASSOCIATION_ADD LASSO_REQUEST_TYPE_IDWSF2_DISCO_SVCMD_REGISTER LASSO_REQUEST_TYPE_INVALID LASSO_REQUEST_TYPE_LECP LASSO_REQUEST_TYPE_LOGIN LASSO_REQUEST_TYPE_LOGOUT LASSO_REQUEST_TYPE_NAME_IDENTIFIER_MAPPING LASSO_REQUEST_TYPE_NAME_ID_MANAGEMENT LASSO_REQUEST_TYPE_NAME_REGISTRATION LASSO_REQUEST_TYPE_SASL_REQUEST LASSO_SAML2_ACTION_GHPP_GET LASSO_SAML2_ACTION_GHPP_HEAD LASSO_SAML2_ACTION_GHPP_POST LASSO_SAML2_ACTION_GHPP_PUT LASSO_SAML2_ACTION_NAMESPACE_GHPP LASSO_SAML2_ACTION_NAMESPACE_RWEDC LASSO_SAML2_ACTION_NAMESPACE_RWEDC_NEGATION LASSO_SAML2_ACTION_NAMESPACE_UNIX LASSO_SAML2_ACTION_RWEDC_CONTROL LASSO_SAML2_ACTION_RWEDC_DELETE LASSO_SAML2_ACTION_RWEDC_EXECUTE LASSO_SAML2_ACTION_RWEDC_NEGATION LASSO_SAML2_ACTION_RWEDC_READ LASSO_SAML2_ACTION_RWEDC_WRITE LASSO_SAML2_ASSERTION_HREF LASSO_SAML2_ASSERTION_INDETERMINATE LASSO_SAML2_ASSERTION_INVALID LASSO_SAML2_ASSERTION_PREFIX LASSO_SAML2_ASSERTION_VALID LASSO_SAML2_ATTRIBUTE_NAME_EPR LASSO_SAML2_ATTRIBUTE_NAME_FORMAT_BASIC LASSO_SAML2_ATTRIBUTE_NAME_FORMAT_UNSPECIFIED LASSO_SAML2_ATTRIBUTE_NAME_FORMAT_URI LASSO_SAML2_ATTRIBUTE_PROFILE_BASIC LASSO_SAML2_ATTRIBUTE_PROFILE_DCE LASSO_SAML2_ATTRIBUTE_PROFILE_UUID LASSO_SAML2_ATTRIBUTE_PROFILE_X500 LASSO_SAML2_AUTHN_CONTEXT_AUTHENTICATED_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_INTERNET_PROTOCOL LASSO_SAML2_AUTHN_CONTEXT_INTERNET_PROTOCOL_PASSWORD LASSO_SAML2_AUTHN_CONTEXT_KERBEROS LASSO_SAML2_AUTHN_CONTEXT_MOBILE_ONE_FACTOR_CONTRACT LASSO_SAML2_AUTHN_CONTEXT_MOBILE_ONE_FACTOR_UNREGISTERED LASSO_SAML2_AUTHN_CONTEXT_MOBILE_TWO_FACTOR_CONTRACT LASSO_SAML2_AUTHN_CONTEXT_MOBILE_TWO_FACTOR_UNREGISTERED LASSO_SAML2_AUTHN_CONTEXT_NOMAD_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_PASSWORD LASSO_SAML2_AUTHN_CONTEXT_PASSWORD_PROTECTED_TRANSPORT LASSO_SAML2_AUTHN_CONTEXT_PERSONALIZED_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_PGP LASSO_SAML2_AUTHN_CONTEXT_PREVIOUS_SESSION LASSO_SAML2_AUTHN_CONTEXT_SECURE_REMOTE_PASSWORD LASSO_SAML2_AUTHN_CONTEXT_SMARTCARD LASSO_SAML2_AUTHN_CONTEXT_SMARTCARD_PKI LASSO_SAML2_AUTHN_CONTEXT_SOFTWARE_PKI LASSO_SAML2_AUTHN_CONTEXT_SPKI LASSO_SAML2_AUTHN_CONTEXT_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_TIME_SYNC_TOKEN LASSO_SAML2_AUTHN_CONTEXT_TLS_CLIENT LASSO_SAML2_AUTHN_CONTEXT_UNSPECIFIED LASSO_SAML2_AUTHN_CONTEXT_X509 LASSO_SAML2_AUTHN_CONTEXT_XMLDSIG LASSO_SAML2_CONFIRMATION_METHOD_BEARER LASSO_SAML2_CONFIRMATION_METHOD_HOLDER_OF_KEY LASSO_SAML2_CONSENT_EXPLICIT LASSO_SAML2_CONSENT_IMPLICIT LASSO_SAML2_CONSENT_INAPPLICABLE LASSO_SAML2_CONSENT_OBTAINED LASSO_SAML2_CONSENT_PRIOR LASSO_SAML2_CONSENT_UNAVAILABLE LASSO_SAML2_DEFLATE_ENCODING LASSO_SAML2_FIELD_ARTIFACT LASSO_SAML2_FIELD_ENCODING LASSO_SAML2_FIELD_RELAYSTATE LASSO_SAML2_FIELD_REQUEST LASSO_SAML2_FIELD_RESPONSE LASSO_SAML2_FIELD_SIGALG LASSO_SAML2_FIELD_SIGNATURE LASSO_SAML2_METADATA_BINDING_ARTIFACT LASSO_SAML2_METADATA_BINDING_PAOS LASSO_SAML2_METADATA_BINDING_POST LASSO_SAML2_METADATA_BINDING_REDIRECT LASSO_SAML2_METADATA_BINDING_SOAP LASSO_SAML2_METADATA_BINDING_URI LASSO_SAML2_METADATA_HREF LASSO_SAML2_METADATA_PREFIX LASSO_SAML2_NAME_IDENTIFIER_FORMAT_EMAIL LASSO_SAML2_NAME_IDENTIFIER_FORMAT_ENCRYPTED LASSO_SAML2_NAME_IDENTIFIER_FORMAT_ENTITY LASSO_SAML2_NAME_IDENTIFIER_FORMAT_KERBEROS LASSO_SAML2_NAME_IDENTIFIER_FORMAT_PERSISTENT LASSO_SAML2_NAME_IDENTIFIER_FORMAT_TRANSIENT LASSO_SAML2_NAME_IDENTIFIER_FORMAT_UNSPECIFIED LASSO_SAML2_NAME_IDENTIFIER_FORMAT_WINDOWS LASSO_SAML2_NAME_IDENTIFIER_FORMAT_X509 LASSO_SAML2_PROTOCOL_HREF LASSO_SAML2_PROTOCOL_PREFIX LASSO_SAML2_STATUS_CODE_AUTHN_FAILED LASSO_SAML2_STATUS_CODE_INVALID_ATTR_NAME LASSO_SAML2_STATUS_CODE_INVALID_NAME_ID_POLICY LASSO_SAML2_STATUS_CODE_NO_AUTHN_CONTEXT LASSO_SAML2_STATUS_CODE_NO_AVAILABLE_IDP LASSO_SAML2_STATUS_CODE_NO_PASSIVE LASSO_SAML2_STATUS_CODE_NO_SUPPORTED_IDP LASSO_SAML2_STATUS_CODE_PARTIAL_LOGOUT LASSO_SAML2_STATUS_CODE_PROXY_COUNT_EXCEEDED LASSO_SAML2_STATUS_CODE_REQUESTER LASSO_SAML2_STATUS_CODE_REQUEST_DENIED LASSO_SAML2_STATUS_CODE_REQUEST_UNSUPPORTED LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_DEPRECATED LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_TOO_HIGH LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_TOO_LOW LASSO_SAML2_STATUS_CODE_RESOURCE_NOT_RECOGNIZED LASSO_SAML2_STATUS_CODE_RESPONDER LASSO_SAML2_STATUS_CODE_SUCCESS LASSO_SAML2_STATUS_CODE_TOO_MANY_RESPONSES LASSO_SAML2_STATUS_CODE_UNKNOWN_ATTR_PROFILE LASSO_SAML2_STATUS_CODE_UNKNOWN_PRINCIPAL LASSO_SAML2_STATUS_CODE_UNSUPPORTED_BINDING LASSO_SAML2_STATUS_CODE_VERSION_MISMATCH LASSO_SAML_ASSERTION_HREF LASSO_SAML_ASSERTION_PREFIX LASSO_SAML_AUTHENTICATION_METHODS_PKI LASSO_SAML_AUTHENTICATION_METHOD_HARDWARE_TOKEN LASSO_SAML_AUTHENTICATION_METHOD_KERBEROS LASSO_SAML_AUTHENTICATION_METHOD_LIBERTY LASSO_SAML_AUTHENTICATION_METHOD_PASSWORD LASSO_SAML_AUTHENTICATION_METHOD_PGP LASSO_SAML_AUTHENTICATION_METHOD_SECURE_REMOTE_PASSWORD LASSO_SAML_AUTHENTICATION_METHOD_SMARTCARD_PKI LASSO_SAML_AUTHENTICATION_METHOD_SOFTWARE_PKI LASSO_SAML_AUTHENTICATION_METHOD_UNSPECIFIED LASSO_SAML_AUTHENTICATION_METHOD_XKMS LASSO_SAML_AUTHENTICATION_METHOD_XMLD_SIG LASSO_SAML_CONFIRMATION_METHOD_ARTIFACT LASSO_SAML_CONFIRMATION_METHOD_ARTIFACT01 LASSO_SAML_CONFIRMATION_METHOD_BEARER LASSO_SAML_CONFIRMATION_METHOD_HOLDER_OF_KEY LASSO_SAML_CONFIRMATION_METHOD_SENDER_VOUCHES LASSO_SAML_MAJOR_VERSION_N LASSO_SAML_MINOR_VERSION_N LASSO_SAML_PROTOCOL_HREF LASSO_SAML_PROTOCOL_PREFIX LASSO_SAML_STATUS_CODE_REQUESTER LASSO_SAML_STATUS_CODE_REQUEST_DENIED LASSO_SAML_STATUS_CODE_REQUEST_VERSION_DEPRECATED LASSO_SAML_STATUS_CODE_REQUEST_VERSION_TOO_HIGH LASSO_SAML_STATUS_CODE_REQUEST_VERSION_TOO_LOW LASSO_SAML_STATUS_CODE_RESOURCE_NOT_RECOGNIZED LASSO_SAML_STATUS_CODE_RESPONDER LASSO_SAML_STATUS_CODE_SUCCESS LASSO_SAML_STATUS_CODE_TOO_MANY_RESPONSES LASSO_SAML_STATUS_CODE_VERSION_MISMATCH LASSO_SERVER_ERROR_ADD_PROVIDER_FAILED LASSO_SERVER_ERROR_ADD_PROVIDER_PROTOCOL_MISMATCH LASSO_SERVER_ERROR_INVALID_XML LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND LASSO_SERVER_ERROR_SET_ENCRYPTION_PRIVATE_KEY_FAILED LASSO_SIGNATURE_METHOD_ATTRIBUTE LASSO_SIGNATURE_METHOD_DSA_SHA1 LASSO_SIGNATURE_METHOD_LAST LASSO_SIGNATURE_METHOD_RSA_SHA1 LASSO_SIGNATURE_TYPE_ATTRIBUTE LASSO_SIGNATURE_TYPE_LAST LASSO_SIGNATURE_TYPE_NONE LASSO_SIGNATURE_TYPE_SIMPLE LASSO_SIGNATURE_TYPE_WITHX509 LASSO_SOAP_ENV_ACTOR LASSO_SOAP_ENV_HREF LASSO_SOAP_ENV_PREFIX LASSO_SOAP_ERROR_MISSING_BODY LASSO_SOAP_ERROR_MISSING_ENVELOPE LASSO_SOAP_ERROR_MISSING_HEADER LASSO_SOAP_ERROR_MISSING_SOAP_FAULT_DETAIL LASSO_SOAP_ERROR_REDIRECT_REQUEST_FAULT LASSO_SOAP_FAULT_CODE_CLIENT LASSO_SOAP_FAULT_CODE_MUST_UNDERSTAND LASSO_SOAP_FAULT_CODE_SERVER LASSO_SOAP_FAULT_CODE_VERSION_MISMATCH LASSO_SOAP_FAULT_REDIRECT_REQUEST LASSO_WSF_ENABLED LASSO_WSF_PROFILE_ERROR_INVALID_OR_MISSING_REFERENCE_TO_MESSAGE_ID LASSO_WSF_PROFILE_ERROR_MISSING_ASSERTION_ID LASSO_WSF_PROFILE_ERROR_MISSING_CORRELATION LASSO_WSF_PROFILE_ERROR_MISSING_CREDENTIAL_REF LASSO_WSF_PROFILE_ERROR_MISSING_DESCRIPTION LASSO_WSF_PROFILE_ERROR_MISSING_ENDPOINT LASSO_WSF_PROFILE_ERROR_MISSING_RESOURCE_ID LASSO_WSF_PROFILE_ERROR_MISSING_SECURITY LASSO_WSF_PROFILE_ERROR_MISSING_SENDER_ID LASSO_WSF_PROFILE_ERROR_REDIRECT_REQUEST LASSO_WSF_PROFILE_ERROR_REDIRECT_REQUEST_UNSUPPORTED_BY_REQUESTER LASSO_WSF_PROFILE_ERROR_SECURITY_MECHANISM_CHECK_FAILED LASSO_WSF_PROFILE_ERROR_SERVER_INTERACTION_REQUIRED LASSO_WSF_PROFILE_ERROR_SERVER_INTERACTION_REQUIRED_FOR_DATA LASSO_WSF_PROFILE_ERROR_SOAP_FAULT LASSO_WSF_PROFILE_ERROR_UNKNOWN_STATUS_CODE LASSO_WSF_PROFILE_ERROR_UNSUPPORTED_SECURITY_MECHANISM LASSO_WSSEC_ERROR_BAD_PASSWORD LASSO_WSSEC_ERROR_MISSING_SECURITY_TOKEN LASSO_XML_ERROR_ATTR_NOT_FOUND LASSO_XML_ERROR_ATTR_VALUE_NOT_FOUND LASSO_XML_ERROR_INVALID_FILE LASSO_XML_ERROR_MISSING_NAMESPACE LASSO_XML_ERROR_NODE_CONTENT_NOT_FOUND LASSO_XML_ERROR_NODE_NOT_FOUND LASSO_XML_ERROR_OBJECT_CONSTRUCTION_FAILED LASSO_XML_ERROR_SCHEMA_INVALID_FRAGMENT LASSO_XSI_HREF LASSO_XSI_PREFIX struct LassoAssertionQuery { LassoAssertionQueryPrivate* private_data } LassoAssertionQueryRequestType LassoCheckVersionMode struct LassoDefederation { } struct LassoDsKeyInfo { LassoDsKeyValue* KeyValue } struct LassoDsKeyValue { LassoDsRsaKeyValue* RSAKeyValue } struct LassoDsRsaKeyValue { char* Modulus, char* Exponent } struct LassoEcp { gchar* assertionConsumerURL, LassoEcpPrivate* private_data } LassoEncryptionMode LassoEncryptionSymKeyType struct LassoFederation { gchar* remote_providerID, LassoNode* local_nameIdentifier, LassoNode* remote_nameIdentifier, LassoFederationPrivate* private_data } LassoHttpMethod struct LassoIdentity { GHashTable* federations, gboolean is_dirty, LassoIdentityPrivate* private_data } struct LassoLecp { LassoLibAuthnRequestEnvelope* authnRequestEnvelope, LassoLibAuthnResponseEnvelope* authnResponseEnvelope, char* assertionConsumerServiceURL } struct LassoLibAssertion { char* InResponseTo } struct LassoLibAuthenticationStatement { LassoLibAuthnContext* AuthnContext, char* ReauthenticateOnOrAfter, char* SessionIndex } struct LassoLibAuthnContext { char* AuthnContextClassRef, char* AuthnContextStatementRef } struct LassoLibAuthnRequest { GList* Extension, char* ProviderID, char* AffiliationID, char* NameIDPolicy, gboolean ForceAuthn, gboolean IsPassive, char* ProtocolProfile, char* AssertionConsumerServiceID, LassoLibRequestAuthnContext* RequestAuthnContext, char* RelayState, LassoLibScoping* Scoping, char* consent } struct LassoLibAuthnRequestEnvelope { GList* Extension, LassoLibAuthnRequest* AuthnRequest, char* ProviderID, char* ProviderName, char* AssertionConsumerServiceURL, LassoLibIDPList* IDPList, gboolean IsPassive } struct LassoLibAuthnResponse { GList* Extension, char* ProviderID, char* RelayState, char* consent } struct LassoLibAuthnResponseEnvelope { GList* Extension, LassoLibAuthnResponse* AuthnResponse, char* AssertionConsumerServiceURL } struct LassoLibFederationTerminationNotification { GList* Extension, char* ProviderID, LassoSamlNameIdentifier* NameIdentifier, char* consent, char* RelayState } struct LassoLibIDPEntries { GList* IDPEntry } struct LassoLibIDPEntry { char* ProviderID, char* ProviderName, char* Loc } struct LassoLibIDPList { LassoLibIDPEntries* IDPEntries, char* GetComplete } struct LassoLibLogoutRequest { GList* Extension, char* ProviderID, LassoSamlNameIdentifier* NameIdentifier, char* SessionIndex, char* RelayState, char* consent, char* NotOnOrAfter } struct LassoLibLogoutResponse { } struct LassoLibNameIdentifierMappingRequest { GList* Extension, char* ProviderID, LassoSamlNameIdentifier* NameIdentifier, char* TargetNamespace, char* consent } struct LassoLibNameIdentifierMappingResponse { GList* Extension, char* ProviderID, LassoSamlpStatus* Status, LassoSamlNameIdentifier* NameIdentifier } struct LassoLibRegisterNameIdentifierRequest { GList* Extension, char* ProviderID, LassoSamlNameIdentifier* IDPProvidedNameIdentifier, LassoSamlNameIdentifier* SPProvidedNameIdentifier, LassoSamlNameIdentifier* OldProvidedNameIdentifier, char* RelayState } struct LassoLibRegisterNameIdentifierResponse { } struct LassoLibRequestAuthnContext { GList* AuthnContextClassRef, GList* AuthnContextStatementRef, char* AuthnContextComparison } struct LassoLibScoping { int ProxyCount, LassoLibIDPList* IDPList } struct LassoLibStatusResponse { GList* Extension, char* ProviderID, LassoSamlpStatus* Status, char* RelayState } struct LassoLibSubject { LassoSamlNameIdentifier* IDPProvidedNameIdentifier } struct LassoLogin { LassoLoginProtocolProfile protocolProfile, gchar* assertionArtifact, LassoSamlAssertion* assertion, gchar* nameIDPolicy, LassoHttpMethod http_method, LassoLoginPrivate* private_data } LassoLoginProtocolProfile struct LassoLogout { LassoNode* initial_request, LassoNode* initial_response, gchar* initial_remote_providerID, gint providerID_index, LassoHttpMethod initial_http_request_method, LassoLogoutPrivate* private_data } LassoMdProtocolType LassoMessageFormat struct LassoMiscTextNode { char* content, char* name, char* ns_href, char* ns_prefix, gboolean text_child } struct LassoNameIdManagement { } struct LassoNameIdentifierMapping { gchar* targetNameIdentifier } struct LassoNameRegistration { LassoSamlNameIdentifier* oldNameIdentifier } struct LassoNode { } struct LassoProfile { LassoServer* server, LassoNode* request, LassoNode* response, LassoNode* nameIdentifier, gchar* remote_providerID, gchar* msg_url, gchar* msg_body, gchar* msg_relayState, LassoIdentity* identity, LassoSession* session, LassoHttpMethod http_request_method, gint signature_status, LassoProfilePrivate* private_data } LassoProfileSignatureHint LassoProfileSignatureVerifyHint LassoProtocolConformance struct LassoProvider { gchar* ProviderID, LassoProviderRole role, char* metadata_filename, gchar* public_key, gchar* ca_cert_chain, LassoProviderPrivate* private_data } LassoProviderRole LassoRequestType struct LassoSaml2Action { char* content, char* Namespace } struct LassoSaml2Advice { GList* AssertionIDRef, GList* AssertionURIRef, GList* Assertion, GList* EncryptedAssertion } struct LassoSaml2Assertion { LassoSaml2NameID* Issuer, LassoSaml2Subject* Subject, LassoSaml2Conditions* Conditions, LassoSaml2Advice* Advice, GList* Statement, GList* AuthnStatement, GList* AuthzDecisionStatement, GList* AttributeStatement, char* Version, char* ID, char* IssueInstant, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file, gboolean encryption_activated, char* encryption_public_key_str, LassoEncryptionSymKeyType encryption_sym_key_type } LassoSaml2AssertionValidationState struct LassoSaml2Attribute { GList* AttributeValue, char* Name, char* NameFormat, char* FriendlyName } struct LassoSaml2AttributeStatement { GList* Attribute, GList* EncryptedAttribute } struct LassoSaml2AttributeValue { GList* any } struct LassoSaml2AudienceRestriction { char* Audience } struct LassoSaml2AuthnContext { char* AuthnContextClassRef, char* AuthnContextDeclRef, char* AuthenticatingAuthority } struct LassoSaml2AuthnStatement { LassoSaml2SubjectLocality* SubjectLocality, LassoSaml2AuthnContext* AuthnContext, char* AuthnInstant, char* SessionIndex, char* SessionNotOnOrAfter } struct LassoSaml2AuthzDecisionStatement { LassoSaml2Action* Action, LassoSaml2Evidence* Evidence, char* Resource, char* Decision } struct LassoSaml2BaseIDAbstract { char* NameQualifier, char* SPNameQualifier } struct LassoSaml2ConditionAbstract { } struct LassoSaml2Conditions { GList* Condition, GList* AudienceRestriction, GList* OneTimeUse, GList* ProxyRestriction, char* NotBefore, char* NotOnOrAfter } struct LassoSaml2EncryptedElement { xmlNode* EncryptedData, GList* EncryptedKey, LassoNode* original_data } struct LassoSaml2Evidence { GList* AssertionIDRef, GList* AssertionURIRef, GList* Assertion, GList* EncryptedAssertion } struct LassoSaml2KeyInfoConfirmationData { } struct LassoSaml2NameID { char* content, char* Format, char* SPProvidedID, char* NameQualifier, char* SPNameQualifier } struct LassoSaml2OneTimeUse { } struct LassoSaml2ProxyRestriction { char* Audience, char* Count } struct LassoSaml2StatementAbstract { } struct LassoSaml2Subject { LassoSaml2BaseIDAbstract* BaseID, LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, LassoSaml2SubjectConfirmation* SubjectConfirmation } struct LassoSaml2SubjectConfirmation { LassoSaml2BaseIDAbstract* BaseID, LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, LassoSaml2SubjectConfirmationData* SubjectConfirmationData, char* Method } struct LassoSaml2SubjectConfirmationData { char* NotBefore, char* NotOnOrAfter, char* Recipient, char* InResponseTo, char* Address } struct LassoSaml2SubjectLocality { char* Address, char* DNSName } struct LassoSamlAdvice { GList* AssertionIDReference, LassoNode* Assertion } struct LassoSamlAssertion { LassoSamlConditions* Conditions, LassoSamlAdvice* Advice, LassoSamlSubjectStatement* SubjectStatement, LassoSamlAuthenticationStatement* AuthenticationStatement, LassoSamlAttributeStatement* AttributeStatement, int MajorVersion, int MinorVersion, char* AssertionID, char* Issuer, char* IssueInstant, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlAttribute { gchar* attributeName, gchar* attributeNameSpace, GList* AttributeValue } struct LassoSamlAttributeDesignator { char* AttributeName, char* AttributeNamespace } struct LassoSamlAttributeStatement { GList* Attribute } struct LassoSamlAttributeValue { GList* any } struct LassoSamlAudienceRestrictionCondition { GList* Audience } struct LassoSamlAuthenticationStatement { LassoSamlSubjectLocality* SubjectLocality, GList* AuthorityBinding, char* AuthenticationMethod, char* AuthenticationInstant } struct LassoSamlAuthorityBinding { char* AuthorityKind, char* Location, char* Binding } struct LassoSamlConditionAbstract { } struct LassoSamlConditions { GList* Condition, GList* AudienceRestrictionCondition, char* NotBefore, char* NotOnOrAfter } struct LassoSamlNameIdentifier { char* NameQualifier, char* Format, char* content } struct LassoSamlStatementAbstract { } struct LassoSamlSubject { LassoSamlNameIdentifier* NameIdentifier, LassoSamlSubjectConfirmation* SubjectConfirmation, LassoSaml2EncryptedElement* EncryptedNameIdentifier } struct LassoSamlSubjectConfirmation { GList* ConfirmationMethod, char* SubjectConfirmationData, LassoDsKeyInfo* KeyInfo } struct LassoSamlSubjectLocality { char* IPAddress, char* DNSAddress } struct LassoSamlSubjectStatement { } struct LassoSamlSubjectStatementAbstract { LassoSamlSubject* Subject } struct LassoSamlp2ArtifactResolve { char* Artifact } struct LassoSamlp2ArtifactResponse { LassoNode* any } struct LassoSamlp2AssertionIDRequest { char* AssertionIDRef } struct LassoSamlp2AttributeQuery { GList* Attribute } struct LassoSamlp2AuthnQuery { LassoSamlp2RequestedAuthnContext* RequestedAuthnContext, char* SessionIndex } struct LassoSamlp2AuthnRequest { LassoSaml2Subject* Subject, LassoSamlp2NameIDPolicy* NameIDPolicy, LassoSaml2Conditions* Conditions, LassoSamlp2RequestedAuthnContext* RequestedAuthnContext, LassoSamlp2Scoping* Scoping, gboolean ForceAuthn, gboolean IsPassive, char* ProtocolBinding, int AssertionConsumerServiceIndex, char* AssertionConsumerServiceURL, int AttributeConsumingServiceIndex, char* ProviderName, G_GNUC_DEPRECATED char } struct LassoSamlp2AuthzDecisionQuery { LassoSaml2Action* Action, LassoSaml2Evidence* Evidence, char* Resource } struct LassoSamlp2Extensions { } struct LassoSamlp2IDPEntry { char* ProviderID, char* Name, char* Loc } struct LassoSamlp2IDPList { LassoSamlp2IDPEntry* IDPEntry, char* GetComplete } struct LassoSamlp2LogoutRequest { LassoSaml2BaseIDAbstract* BaseID, LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, char* SessionIndex, char* Reason, char* NotOnOrAfter, G_GNUC_DEPRECATED char } struct LassoSamlp2LogoutResponse { G_GNUC_DEPRECATED char } struct LassoSamlp2ManageNameIDRequest { LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, char* NewID, LassoSaml2EncryptedElement* NewEncryptedID, LassoSamlp2Terminate* Terminate } struct LassoSamlp2ManageNameIDResponse { } struct LassoSamlp2NameIDMappingRequest { LassoSaml2BaseIDAbstract* BaseID, LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, LassoSamlp2NameIDPolicy* NameIDPolicy } struct LassoSamlp2NameIDMappingResponse { LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID } struct LassoSamlp2NameIDPolicy { char* Format, char* SPNameQualifier, gboolean AllowCreate } struct LassoSamlp2RequestAbstract { LassoSaml2NameID* Issuer, LassoSamlp2Extensions* Extensions, char* ID, char* Version, char* IssueInstant, char* Destination, char* Consent, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlp2RequestedAuthnContext { GList* AuthnContextClassRef, GList* AuthnContextDeclRef, char* Comparison } struct LassoSamlp2Response { GList* Assertion, GList* EncryptedAssertion } struct LassoSamlp2Scoping { LassoSamlp2IDPList* IDPList, char* RequesterID, char* ProxyCount } struct LassoSamlp2Status { LassoSamlp2StatusCode* StatusCode, char* StatusMessage, LassoSamlp2StatusDetail* StatusDetail } struct LassoSamlp2StatusCode { LassoSamlp2StatusCode* StatusCode, char* Value } struct LassoSamlp2StatusDetail { } struct LassoSamlp2StatusResponse { LassoSaml2NameID* Issuer, LassoSamlp2Extensions* Extensions, LassoSamlp2Status* Status, char* ID, char* InResponseTo, char* Version, char* IssueInstant, char* Destination, char* Consent, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlp2SubjectQueryAbstract { LassoSaml2Subject* Subject } struct LassoSamlp2Terminate { } struct LassoSamlpRequest { char* AssertionArtifact } struct LassoSamlpRequestAbstract { GList* RespondWith, char* RequestID, int MajorVersion, int MinorVersion, char* IssueInstant, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlpResponse { LassoSamlpStatus* Status, GList* Assertion } struct LassoSamlpResponseAbstract { char* ResponseID, char* InResponseTo, int MajorVersion, int MinorVersion, char* IssueInstant, char* Recipient, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlpStatus { LassoSamlpStatusCode* StatusCode, char* StatusMessage } struct LassoSamlpStatusCode { LassoSamlpStatusCode* StatusCode, char* Value } struct LassoServer { GHashTable* providers, GHashTable* services, gchar* private_key, gchar* private_key_password, gchar* certificate, LassoSignatureMethod signature_method, LassoServerPrivate* private_data } struct LassoSession { GHashTable* assertions, gboolean is_dirty, LassoSessionPrivate* private_data } LassoSignatureMethod LassoSignatureType lasso_error_t lasso_assertion_query_add_attribute_request ( LassoAssertionQuery* assertion_query, char* format, char* name ) lasso_error_t lasso_assertion_query_build_request_msg ( LassoAssertionQuery* assertion_query ) lasso_error_t lasso_assertion_query_build_response_msg ( LassoAssertionQuery* assertion_query ) None lasso_assertion_query_destroy ( LassoAssertionQuery* assertion_query ) LassoAssertionQueryRequestType lasso_assertion_query_get_request_type ( LassoAssertionQuery* assertion_query ) GType lasso_assertion_query_get_type ( ) lasso_error_t lasso_assertion_query_init_request ( LassoAssertionQuery* assertion_query, char* remote_provider_id, LassoHttpMethod http_method, LassoAssertionQueryRequestType query_request_type ) LassoAssertionQuery* lasso_assertion_query_new ( LassoServer* server ) lasso_error_t lasso_assertion_query_process_request_msg ( LassoAssertionQuery* assertion_query, gchar* request_msg ) lasso_error_t lasso_assertion_query_process_response_msg ( LassoAssertionQuery* assertion_query, gchar* response_msg ) lasso_error_t lasso_assertion_query_validate_request ( LassoAssertionQuery* assertion_query ) char* lasso_build_unique_id ( unsigned int size ) int lasso_check_version ( int major, int minor, int subminor, LassoCheckVersionMode mode ) lasso_error_t lasso_defederation_build_notification_msg ( LassoDefederation* defederation ) None lasso_defederation_destroy ( LassoDefederation* defederation ) GType lasso_defederation_get_type ( ) lasso_error_t lasso_defederation_init_notification ( LassoDefederation* defederation, gchar* remote_providerID, LassoHttpMethod http_method ) LassoDefederation* lasso_defederation_new ( LassoServer* server ) lasso_error_t lasso_defederation_process_notification_msg ( LassoDefederation* defederation, gchar* notification_msg ) lasso_error_t lasso_defederation_validate_notification ( LassoDefederation* defederation ) GType lasso_ds_key_info_get_type ( ) LassoDsKeyInfo* lasso_ds_key_info_new ( ) GType lasso_ds_key_value_get_type ( ) LassoDsKeyValue* lasso_ds_key_value_new ( ) GType lasso_ds_rsa_key_value_get_type ( ) LassoDsRsaKeyValue* lasso_ds_rsa_key_value_new ( ) None lasso_ecp_destroy ( LassoEcp* ecp ) GType lasso_ecp_get_type ( ) LassoEcp* lasso_ecp_new ( LassoServer* server ) lasso_error_t lasso_ecp_process_authn_request_msg ( LassoEcp* ecp, const char* authn_request_msg ) lasso_error_t lasso_ecp_process_response_msg ( LassoEcp* ecp, const char* response_msg ) None lasso_federation_build_local_name_identifier ( LassoFederation* federation, const gchar* nameQualifier, const gchar* format, const gchar* content ) None lasso_federation_destroy ( LassoFederation* federation ) GType lasso_federation_get_type ( ) LassoFederation* lasso_federation_new ( const gchar* remote_providerID ) gboolean lasso_federation_verify_name_identifier ( LassoFederation* federation, LassoNode* name_identifier ) char* lasso_get_prefix_for_dst_service_href ( const char* href ) gchar* lasso_get_prefix_for_idwsf2_dst_service_href ( const gchar* href ) None lasso_identity_destroy ( LassoIdentity* identity ) gchar* lasso_identity_dump ( LassoIdentity* identity ) LassoFederation* lasso_identity_get_federation ( LassoIdentity* identity, const char* providerID ) GType lasso_identity_get_type ( ) LassoIdentity* lasso_identity_new ( ) LassoIdentity* lasso_identity_new_from_dump ( const gchar* dump ) lasso_error_t lasso_init ( ) lasso_error_t lasso_lecp_build_authn_request_envelope_msg ( LassoLecp* lecp ) lasso_error_t lasso_lecp_build_authn_request_msg ( LassoLecp* lecp ) lasso_error_t lasso_lecp_build_authn_response_envelope_msg ( LassoLecp* lecp ) lasso_error_t lasso_lecp_build_authn_response_msg ( LassoLecp* lecp ) None lasso_lecp_destroy ( LassoLecp* lecp ) GType lasso_lecp_get_type ( ) lasso_error_t lasso_lecp_init_authn_request ( LassoLecp* lecp, const char* remote_providerID ) LassoLecp* lasso_lecp_new ( LassoServer* server ) lasso_error_t lasso_lecp_process_authn_request_envelope_msg ( LassoLecp* lecp, const char* request_msg ) lasso_error_t lasso_lecp_process_authn_request_msg ( LassoLecp* lecp, const char* authn_request_msg ) lasso_error_t lasso_lecp_process_authn_response_envelope_msg ( LassoLecp* lecp, const char* response_msg ) GType lasso_lib_assertion_get_type ( ) LassoLibAssertion* lasso_lib_assertion_new ( ) LassoLibAssertion* lasso_lib_assertion_new_full ( const char* issuer, const char* requestID, const char* audience, const char* notBefore, const char* notOnOrAfter ) GType lasso_lib_authentication_statement_get_type ( ) LassoLibAuthenticationStatement* lasso_lib_authentication_statement_new ( ) LassoLibAuthenticationStatement* lasso_lib_authentication_statement_new_full ( const char* authenticationMethod, const char* authenticationInstant, const char* reauthenticateOnOrAfter, LassoSamlNameIdentifier* sp_identifier, LassoSamlNameIdentifier* idp_identifier ) GType lasso_lib_authn_context_get_type ( ) LassoNode* lasso_lib_authn_context_new ( ) GType lasso_lib_authn_request_envelope_get_type ( ) LassoLibAuthnRequestEnvelope* lasso_lib_authn_request_envelope_new ( ) LassoLibAuthnRequestEnvelope* lasso_lib_authn_request_envelope_new_full ( LassoLibAuthnRequest* authnRequest, char* providerID, char* assertionConsumerServiceURL ) GType lasso_lib_authn_request_get_type ( ) LassoLibAuthnRequest* lasso_lib_authn_request_new ( ) GType lasso_lib_authn_response_envelope_get_type ( ) LassoLibAuthnResponseEnvelope* lasso_lib_authn_response_envelope_new ( LassoLibAuthnResponse* response, char* assertionConsumerServiceURL ) GType lasso_lib_authn_response_get_type ( ) LassoNode* lasso_lib_authn_response_new ( char* providerID, LassoLibAuthnRequest* request ) GType lasso_lib_federation_termination_notification_get_type ( ) LassoNode* lasso_lib_federation_termination_notification_new ( ) LassoNode* lasso_lib_federation_termination_notification_new_full ( char* providerID, LassoSamlNameIdentifier* nameIdentifier, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_idp_entries_get_type ( ) LassoNode* lasso_lib_idp_entries_new ( ) GType lasso_lib_idp_entry_get_type ( ) LassoNode* lasso_lib_idp_entry_new ( ) GType lasso_lib_idp_list_get_type ( ) LassoNode* lasso_lib_idp_list_new ( ) GType lasso_lib_logout_request_get_type ( ) LassoNode* lasso_lib_logout_request_new ( ) LassoNode* lasso_lib_logout_request_new_full ( char* providerID, LassoSamlNameIdentifier* nameIdentifier, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_logout_response_get_type ( ) LassoNode* lasso_lib_logout_response_new ( ) LassoNode* lasso_lib_logout_response_new_full ( char* providerID, const char* statusCodeValue, LassoLibLogoutRequest* request, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_name_identifier_mapping_request_get_type ( ) LassoNode* lasso_lib_name_identifier_mapping_request_new ( ) LassoNode* lasso_lib_name_identifier_mapping_request_new_full ( char* providerID, LassoSamlNameIdentifier* nameIdentifier, const char* targetNamespace, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_name_identifier_mapping_response_get_type ( ) LassoNode* lasso_lib_name_identifier_mapping_response_new ( ) LassoNode* lasso_lib_name_identifier_mapping_response_new_full ( char* provideRID, const char* statusCodeValue, LassoLibNameIdentifierMappingRequest* request, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_register_name_identifier_request_get_type ( ) LassoNode* lasso_lib_register_name_identifier_request_new ( ) LassoNode* lasso_lib_register_name_identifier_request_new_full ( const char* providerID, LassoSamlNameIdentifier* idpNameIdentifier, LassoSamlNameIdentifier* spNameIdentifier, LassoSamlNameIdentifier* oldNameIdentifier, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_register_name_identifier_response_get_type ( ) LassoNode* lasso_lib_register_name_identifier_response_new ( ) LassoNode* lasso_lib_register_name_identifier_response_new_full ( const char* providerID, const char* statusCodeValue, LassoLibRegisterNameIdentifierRequest* request, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_request_authn_context_get_type ( ) LassoLibRequestAuthnContext* lasso_lib_request_authn_context_new ( ) GType lasso_lib_scoping_get_type ( ) LassoLibScoping* lasso_lib_scoping_new ( ) GType lasso_lib_status_response_get_type ( ) LassoNode* lasso_lib_status_response_new ( ) GType lasso_lib_subject_get_type ( ) LassoLibSubject* lasso_lib_subject_new ( ) lasso_error_t lasso_login_accept_sso ( LassoLogin* login ) lasso_error_t lasso_login_build_artifact_msg ( LassoLogin* login, LassoHttpMethod http_method ) lasso_error_t lasso_login_build_assertion ( LassoLogin* login, const char* authenticationMethod, const char* authenticationInstant, const char* reauthenticateOnOrAfter, const char* notBefore, const char* notOnOrAfter ) lasso_error_t lasso_login_build_authn_request_msg ( LassoLogin* login ) lasso_error_t lasso_login_build_authn_response_msg ( LassoLogin* login ) lasso_error_t lasso_login_build_request_msg ( LassoLogin* login ) lasso_error_t lasso_login_build_response_msg ( LassoLogin* login, gchar* remote_providerID ) None lasso_login_destroy ( LassoLogin* login ) gchar* lasso_login_dump ( LassoLogin* login ) LassoNode* lasso_login_get_assertion ( LassoLogin* login ) GType lasso_login_get_type ( ) lasso_error_t lasso_login_init_authn_request ( LassoLogin* login, const gchar* remote_providerID, LassoHttpMethod http_method ) lasso_error_t lasso_login_init_idp_initiated_authn_request ( LassoLogin* login, const gchar* remote_providerID ) lasso_error_t lasso_login_init_request ( LassoLogin* login, gchar* response_msg, LassoHttpMethod response_http_method ) gboolean lasso_login_must_ask_for_consent ( LassoLogin* login ) gboolean lasso_login_must_authenticate ( LassoLogin* login ) LassoLogin* lasso_login_new ( LassoServer* server ) LassoLogin* lasso_login_new_from_dump ( LassoServer* server, const gchar* dump ) lasso_error_t lasso_login_process_authn_request_msg ( LassoLogin* login, const char* authn_request_msg ) lasso_error_t lasso_login_process_authn_response_msg ( LassoLogin* login, gchar* authn_response_msg ) lasso_error_t lasso_login_process_paos_response_msg ( LassoLogin* login, gchar* msg ) lasso_error_t lasso_login_process_request_msg ( LassoLogin* login, gchar* request_msg ) lasso_error_t lasso_login_process_response_msg ( LassoLogin* login, gchar* response_msg ) lasso_error_t lasso_login_validate_request_msg ( LassoLogin* login, gboolean authentication_result, gboolean is_consent_obtained ) lasso_error_t lasso_logout_build_request_msg ( LassoLogout* logout ) lasso_error_t lasso_logout_build_response_msg ( LassoLogout* logout ) None lasso_logout_destroy ( LassoLogout* logout ) gchar* lasso_logout_dump ( LassoLogout* logout ) gchar* lasso_logout_get_next_providerID ( LassoLogout* logout ) GType lasso_logout_get_type ( ) lasso_error_t lasso_logout_init_request ( LassoLogout* logout, gchar* remote_providerID, LassoHttpMethod request_method ) LassoLogout* lasso_logout_new ( LassoServer* server ) LassoLogout* lasso_logout_new_from_dump ( LassoServer* server, const gchar* dump ) lasso_error_t lasso_logout_process_request_msg ( LassoLogout* logout, gchar* request_msg ) lasso_error_t lasso_logout_process_response_msg ( LassoLogout* logout, gchar* response_msg ) lasso_error_t lasso_logout_reset_providerID_index ( LassoLogout* logout ) lasso_error_t lasso_logout_validate_request ( LassoLogout* logout ) GType lasso_misc_text_node_get_type ( ) xmlNode* lasso_misc_text_node_get_xml_content ( LassoMiscTextNode* misc_text_node ) LassoNode* lasso_misc_text_node_new ( ) LassoMiscTextNode* lasso_misc_text_node_new_with_string ( const char* content ) LassoMiscTextNode* lasso_misc_text_node_new_with_xml_node ( xmlNode* xml_node ) None lasso_misc_text_node_set_xml_content ( LassoMiscTextNode* misc_text_node, xmlNode* node ) lasso_error_t lasso_name_id_management_build_request_msg ( LassoNameIdManagement* name_id_management ) lasso_error_t lasso_name_id_management_build_response_msg ( LassoNameIdManagement* name_id_management ) None lasso_name_id_management_destroy ( LassoNameIdManagement* name_id_management ) char* lasso_name_id_management_dump ( LassoNameIdManagement* name_id_management ) GType lasso_name_id_management_get_type ( ) lasso_error_t lasso_name_id_management_init_request ( LassoNameIdManagement* name_id_management, char* remote_provider_id, char* new_name_id, LassoHttpMethod http_method ) LassoNameIdManagement* lasso_name_id_management_new ( LassoServer* server ) LassoNameIdManagement* lasso_name_id_management_new_from_dump ( LassoServer* server, const char* dump ) lasso_error_t lasso_name_id_management_process_request_msg ( LassoNameIdManagement* name_id_management, gchar* request_msg ) lasso_error_t lasso_name_id_management_process_response_msg ( LassoNameIdManagement* name_id_management, gchar* response_msg ) lasso_error_t lasso_name_id_management_validate_request ( LassoNameIdManagement* name_id_management ) lasso_error_t lasso_name_identifier_mapping_build_request_msg ( LassoNameIdentifierMapping* mapping ) lasso_error_t lasso_name_identifier_mapping_build_response_msg ( LassoNameIdentifierMapping* mapping ) None lasso_name_identifier_mapping_destroy ( LassoNameIdentifierMapping* mapping ) GType lasso_name_identifier_mapping_get_type ( ) lasso_error_t lasso_name_identifier_mapping_init_request ( LassoNameIdentifierMapping* mapping, gchar* targetNamespace, gchar* remote_providerID ) LassoNameIdentifierMapping* lasso_name_identifier_mapping_new ( LassoServer* server ) lasso_error_t lasso_name_identifier_mapping_process_request_msg ( LassoNameIdentifierMapping* mapping, gchar* request_msg ) lasso_error_t lasso_name_identifier_mapping_process_response_msg ( LassoNameIdentifierMapping* mapping, gchar* response_msg ) lasso_error_t lasso_name_identifier_mapping_validate_request ( LassoNameIdentifierMapping* mapping ) lasso_error_t lasso_name_registration_build_request_msg ( LassoNameRegistration* name_registration ) lasso_error_t lasso_name_registration_build_response_msg ( LassoNameRegistration* name_registration ) None lasso_name_registration_destroy ( LassoNameRegistration* name_registration ) gchar* lasso_name_registration_dump ( LassoNameRegistration* name_registration ) GType lasso_name_registration_get_type ( ) lasso_error_t lasso_name_registration_init_request ( LassoNameRegistration* name_registration, char* remote_providerID, LassoHttpMethod http_method ) LassoNameRegistration* lasso_name_registration_new ( LassoServer* server ) LassoNameRegistration* lasso_name_registration_new_from_dump ( LassoServer* server, const char* dump ) lasso_error_t lasso_name_registration_process_request_msg ( LassoNameRegistration* name_registration, gchar* request_msg ) lasso_error_t lasso_name_registration_process_response_msg ( LassoNameRegistration* name_registration, gchar* response_msg ) lasso_error_t lasso_name_registration_validate_request ( LassoNameRegistration* name_registration ) None lasso_node_cleanup_original_xmlnodes ( LassoNode* node ) char* lasso_node_debug ( LassoNode* node, int level ) None lasso_node_destroy ( LassoNode* node ) char* lasso_node_dump ( LassoNode* node ) char* lasso_node_export_to_base64 ( LassoNode* node ) char* lasso_node_export_to_ecp_soap_response ( LassoNode* node, const char* assertionConsumerURL ) char* lasso_node_export_to_paos_request ( LassoNode* node, const char* issuer, const char* responseConsumerURL, const char* relay_state ) char* lasso_node_export_to_query ( LassoNode* node, LassoSignatureMethod sign_method, const char* private_key_file ) char* lasso_node_export_to_query_with_password ( LassoNode* node, LassoSignatureMethod sign_method, const char* private_key_file, const char* private_key_file_password ) char* lasso_node_export_to_soap ( LassoNode* node ) gchar* lasso_node_export_to_xml ( LassoNode* node ) const char* lasso_node_get_name ( LassoNode* node ) const char* lasso_node_get_namespace ( LassoNode* node ) xmlNode* lasso_node_get_original_xmlnode ( LassoNode* node ) GType lasso_node_get_type ( ) xmlNode* lasso_node_get_xmlNode ( LassoNode* node, gboolean lasso_dump ) LassoMessageFormat lasso_node_init_from_message ( LassoNode* node, const char* message ) gboolean lasso_node_init_from_query ( LassoNode* node, const char* query ) lasso_error_t lasso_node_init_from_xml ( LassoNode* node, xmlNode* xmlnode ) LassoNode* lasso_node_new ( ) LassoNode* lasso_node_new_from_dump ( const char* dump ) LassoNode* lasso_node_new_from_soap ( const char* soap ) LassoNode* lasso_node_new_from_xmlNode ( xmlNode* node ) None lasso_node_set_custom_namespace ( LassoNode* node, const char* prefix, const char* href ) None lasso_node_set_custom_nodename ( LassoNode* node, const char* nodename ) None lasso_node_set_original_xmlnode ( LassoNode* node, xmlNode* xmlnode ) char* lasso_profile_get_artifact ( LassoProfile* profile ) char* lasso_profile_get_artifact_message ( LassoProfile* profile ) LassoIdentity* lasso_profile_get_identity ( LassoProfile* profile ) LassoNode* lasso_profile_get_nameIdentifier ( LassoProfile* profile ) LassoRequestType lasso_profile_get_request_type_from_soap_msg ( const gchar* soap ) LassoSession* lasso_profile_get_session ( LassoProfile* profile ) LassoProfileSignatureHint lasso_profile_get_signature_hint ( LassoProfile* profile ) lasso_error_t lasso_profile_get_signature_status ( LassoProfile* profile ) LassoProfileSignatureVerifyHint lasso_profile_get_signature_verify_hint ( LassoProfile* profile ) GType lasso_profile_get_type ( ) gboolean lasso_profile_is_identity_dirty ( LassoProfile* profile ) gboolean lasso_profile_is_liberty_query ( const gchar* query ) gboolean lasso_profile_is_saml_query ( const gchar* query ) gboolean lasso_profile_is_session_dirty ( LassoProfile* profile ) None lasso_profile_set_artifact_message ( LassoProfile* profile, const char* message ) lasso_error_t lasso_profile_set_identity_from_dump ( LassoProfile* profile, const gchar* dump ) lasso_error_t lasso_profile_set_session_from_dump ( LassoProfile* profile, const gchar* dump ) None lasso_profile_set_signature_hint ( LassoProfile* profile, LassoProfileSignatureHint signature_hint ) None lasso_profile_set_signature_verify_hint ( LassoProfile* profile, LassoProfileSignatureVerifyHint signature_verify_hint ) lasso_error_t lasso_profile_set_soap_fault_response ( LassoProfile* profile, const char* faultcode, const char* faultstring, GList* details ) LassoProviderRole lasso_profile_sso_role_with ( LassoProfile* profile, const char* remote_provider_id ) gboolean lasso_provider_accept_http_method ( LassoProvider* provider, LassoProvider* remote_provider, LassoMdProtocolType protocol_type, LassoHttpMethod http_method, gboolean initiate_profile ) gchar* lasso_provider_get_assertion_consumer_service_url ( LassoProvider* provider, const char* service_id ) gchar* lasso_provider_get_base64_succinct_id ( const LassoProvider* provider ) char* lasso_provider_get_cache_duration ( LassoProvider* provider ) gchar* lasso_provider_get_default_name_id_format ( LassoProvider* provider ) LassoEncryptionMode lasso_provider_get_encryption_mode ( LassoProvider* provider ) LassoHttpMethod lasso_provider_get_first_http_method ( LassoProvider* provider, LassoProvider* remote_provider, LassoMdProtocolType protocol_type ) GList* lasso_provider_get_idp_supported_attributes ( LassoProvider* provider ) GList* lasso_provider_get_metadata_keys_for_role ( LassoProvider* provider, LassoProviderRole role ) GList* lasso_provider_get_metadata_list ( LassoProvider* provider, const char* name ) GList* lasso_provider_get_metadata_list_for_role ( const LassoProvider* provider, LassoProviderRole role, const char* name ) gchar* lasso_provider_get_metadata_one ( LassoProvider* provider, const char* name ) char* lasso_provider_get_metadata_one_for_role ( LassoProvider* provider, LassoProviderRole role, const char* name ) xmlNode* lasso_provider_get_organization ( const LassoProvider* provider ) LassoProtocolConformance lasso_provider_get_protocol_conformance ( const LassoProvider* provider ) LassoProviderRole lasso_provider_get_roles ( LassoProvider* provider ) const char* lasso_provider_get_sp_name_qualifier ( LassoProvider* provider ) GType lasso_provider_get_type ( ) char* lasso_provider_get_valid_until ( LassoProvider* provider ) gboolean lasso_provider_has_protocol_profile ( LassoProvider* provider, LassoMdProtocolType protocol_type, const char* protocol_profile ) gboolean lasso_provider_match_conformance ( LassoProvider* provider, LassoProvider* another_provider ) LassoProvider* lasso_provider_new ( LassoProviderRole role, const char* metadata, const char* public_key, const char* ca_cert_chain ) LassoProvider* lasso_provider_new_from_buffer ( LassoProviderRole role, const char* metadata, const char* public_key, const char* ca_cert_chain ) LassoProvider* lasso_provider_new_from_dump ( const gchar* dump ) LassoSaml2EncryptedElement* lasso_provider_saml2_node_encrypt ( const LassoProvider* provider, LassoNode* lasso_node ) None lasso_provider_set_encryption_mode ( LassoProvider* provider, LassoEncryptionMode encryption_mode ) None lasso_provider_set_encryption_sym_key_type ( LassoProvider* provider, LassoEncryptionSymKeyType encryption_sym_key_type ) lasso_error_t lasso_provider_verify_single_node_signature ( LassoProvider* provider, LassoNode* node, const char* id_attr_name ) None lasso_register_dst_service ( const char* prefix, const char* href ) None lasso_register_idwsf2_dst_service ( const gchar* prefix, const gchar* href ) GType lasso_saml2_action_get_type ( ) LassoNode* lasso_saml2_action_new ( ) LassoNode* lasso_saml2_action_new_with_string ( char* content ) GType lasso_saml2_advice_get_type ( ) LassoNode* lasso_saml2_advice_new ( ) lasso_error_t lasso_saml2_assertion_add_attribute_with_node ( LassoSaml2Assertion* assertion, const char* name, const char* nameformat, LassoNode* content ) None lasso_saml2_assertion_add_audience_restriction ( LassoSaml2Assertion* saml2_assertion, const char* providerID ) None lasso_saml2_assertion_add_proxy_limit ( LassoSaml2Assertion* saml2_assertion, int proxy_count, GList* proxy_audiences ) LassoSaml2AssertionValidationState lasso_saml2_assertion_allows_proxying ( LassoSaml2Assertion* saml2_assertion ) LassoSaml2AssertionValidationState lasso_saml2_assertion_allows_proxying_to ( LassoSaml2Assertion* saml2_assertion, const char* audience ) lasso_error_t lasso_saml2_assertion_decrypt_subject ( LassoSaml2Assertion* assertion, LassoServer* server ) const char* lasso_saml2_assertion_get_in_response_to ( LassoSaml2Assertion* assertion ) LassoProvider* lasso_saml2_assertion_get_issuer_provider ( const LassoSaml2Assertion* saml2_assertion, const LassoServer* server ) LassoSaml2SubjectConfirmationData* lasso_saml2_assertion_get_subject_confirmation_data ( LassoSaml2Assertion* saml2_assertion, gboolean create ) GType lasso_saml2_assertion_get_type ( ) gboolean lasso_saml2_assertion_has_audience_restriction ( LassoSaml2Assertion* saml2_assertion ) gboolean lasso_saml2_assertion_has_one_time_use ( LassoSaml2Assertion* saml2_assertion ) gboolean lasso_saml2_assertion_is_audience_restricted ( LassoSaml2Assertion* saml2_assertion, char* providerID ) LassoNode* lasso_saml2_assertion_new ( ) None lasso_saml2_assertion_set_basic_conditions ( LassoSaml2Assertion* saml2_assertion, time_t tolerance, time_t length, gboolean one_time_use ) None lasso_saml2_assertion_set_one_time_use ( LassoSaml2Assertion* saml2_assertion, gboolean one_time_use ) None lasso_saml2_assertion_set_subject_confirmation_data ( LassoSaml2Assertion* saml2_assertion, time_t tolerance, time_t length, const char* Recipient, const char* InResponseTo, const char* Address ) None lasso_saml2_assertion_set_subject_confirmation_name_id ( LassoSaml2Assertion* saml2_assertion, LassoNode* node ) None lasso_saml2_assertion_set_subject_name_id ( LassoSaml2Assertion* saml2_assertion, LassoNode* node ) LassoSaml2AssertionValidationState lasso_saml2_assertion_validate_audience ( LassoSaml2Assertion* saml2_assertion, const gchar* audience ) LassoSaml2AssertionValidationState lasso_saml2_assertion_validate_conditions ( LassoSaml2Assertion* saml2_assertion, const char* relaying_party_providerID ) LassoSaml2AssertionValidationState lasso_saml2_assertion_validate_time_checks ( LassoSaml2Assertion* saml2_assertion, unsigned int tolerance, time_t now ) GType lasso_saml2_attribute_get_type ( ) LassoNode* lasso_saml2_attribute_new ( ) GType lasso_saml2_attribute_statement_get_type ( ) LassoNode* lasso_saml2_attribute_statement_new ( ) GType lasso_saml2_attribute_value_get_type ( ) LassoSaml2AttributeValue* lasso_saml2_attribute_value_new ( ) GType lasso_saml2_audience_restriction_get_type ( ) LassoNode* lasso_saml2_audience_restriction_new ( ) GType lasso_saml2_authn_context_get_type ( ) LassoNode* lasso_saml2_authn_context_new ( ) GType lasso_saml2_authn_statement_get_type ( ) LassoNode* lasso_saml2_authn_statement_new ( ) GType lasso_saml2_authz_decision_statement_get_type ( ) LassoNode* lasso_saml2_authz_decision_statement_new ( ) GType lasso_saml2_base_idabstract_get_type ( ) LassoNode* lasso_saml2_base_idabstract_new ( ) GType lasso_saml2_condition_abstract_get_type ( ) LassoNode* lasso_saml2_condition_abstract_new ( ) GType lasso_saml2_conditions_get_type ( ) LassoNode* lasso_saml2_conditions_new ( ) LassoSaml2EncryptedElement* lasso_saml2_encrypted_element_build_encrypted_persistent_name_id ( const char* id, const char* idpID, const LassoProvider* provider ) GType lasso_saml2_encrypted_element_get_type ( ) LassoNode* lasso_saml2_encrypted_element_new ( ) lasso_error_t lasso_saml2_encrypted_element_server_decrypt ( LassoSaml2EncryptedElement* encrypted_element, LassoServer* server, LassoNode** decrypted_node ) GType lasso_saml2_evidence_get_type ( ) LassoNode* lasso_saml2_evidence_new ( ) GType lasso_saml2_key_info_confirmation_data_get_type ( ) LassoNode* lasso_saml2_key_info_confirmation_data_new ( ) LassoSaml2NameID* lasso_saml2_name_id_build_persistent ( const char* id, const char* idpID, const char* providerID ) gboolean lasso_saml2_name_id_equals ( LassoSaml2NameID* name_id, LassoSaml2NameID* other_name_id ) GType lasso_saml2_name_id_get_type ( ) LassoNode* lasso_saml2_name_id_new ( ) LassoSaml2NameID* lasso_saml2_name_id_new_with_persistent_format ( const char* id, const char* idpID, const char* providerID ) LassoNode* lasso_saml2_name_id_new_with_string ( char* content ) GType lasso_saml2_one_time_use_get_type ( ) LassoNode* lasso_saml2_one_time_use_new ( ) GType lasso_saml2_proxy_restriction_get_type ( ) LassoNode* lasso_saml2_proxy_restriction_new ( ) GType lasso_saml2_statement_abstract_get_type ( ) LassoNode* lasso_saml2_statement_abstract_new ( ) GType lasso_saml2_subject_confirmation_data_get_type ( ) LassoNode* lasso_saml2_subject_confirmation_data_new ( ) GType lasso_saml2_subject_confirmation_get_type ( ) LassoNode* lasso_saml2_subject_confirmation_new ( ) GType lasso_saml2_subject_get_type ( ) GType lasso_saml2_subject_locality_get_type ( ) LassoNode* lasso_saml2_subject_locality_new ( ) LassoNode* lasso_saml2_subject_new ( ) GType lasso_saml_advice_get_type ( ) LassoNode* lasso_saml_advice_new ( ) GType lasso_saml_assertion_get_type ( ) LassoSamlAssertion* lasso_saml_assertion_new ( ) GType lasso_saml_attribute_designator_get_type ( ) LassoNode* lasso_saml_attribute_designator_new ( ) GType lasso_saml_attribute_get_type ( ) LassoSamlAttribute* lasso_saml_attribute_new ( ) GType lasso_saml_attribute_statement_get_type ( ) LassoSamlAttributeStatement* lasso_saml_attribute_statement_new ( ) GType lasso_saml_attribute_value_get_type ( ) LassoSamlAttributeValue* lasso_saml_attribute_value_new ( ) GType lasso_saml_audience_restriction_condition_get_type ( ) LassoSamlAudienceRestrictionCondition* lasso_saml_audience_restriction_condition_new ( ) LassoSamlAudienceRestrictionCondition* lasso_saml_audience_restriction_condition_new_full ( const char* audience ) GType lasso_saml_authentication_statement_get_type ( ) LassoNode* lasso_saml_authentication_statement_new ( ) GType lasso_saml_authority_binding_get_type ( ) LassoNode* lasso_saml_authority_binding_new ( ) GType lasso_saml_condition_abstract_get_type ( ) GType lasso_saml_conditions_get_type ( ) LassoSamlConditions* lasso_saml_conditions_new ( ) GType lasso_saml_name_identifier_get_type ( ) LassoSamlNameIdentifier* lasso_saml_name_identifier_new ( ) LassoSamlNameIdentifier* lasso_saml_name_identifier_new_from_xmlNode ( xmlNode* xmlnode ) GType lasso_saml_statement_abstract_get_type ( ) GType lasso_saml_subject_confirmation_get_type ( ) LassoSamlSubjectConfirmation* lasso_saml_subject_confirmation_new ( ) GType lasso_saml_subject_get_type ( ) GType lasso_saml_subject_locality_get_type ( ) LassoNode* lasso_saml_subject_locality_new ( ) LassoNode* lasso_saml_subject_new ( ) GType lasso_saml_subject_statement_abstract_get_type ( ) GType lasso_saml_subject_statement_get_type ( ) LassoNode* lasso_saml_subject_statement_new ( ) GType lasso_samlp2_artifact_resolve_get_type ( ) LassoNode* lasso_samlp2_artifact_resolve_new ( ) GType lasso_samlp2_artifact_response_get_type ( ) LassoNode* lasso_samlp2_artifact_response_new ( ) GType lasso_samlp2_assertion_id_request_get_type ( ) LassoNode* lasso_samlp2_assertion_id_request_new ( ) GType lasso_samlp2_attribute_query_get_type ( ) LassoNode* lasso_samlp2_attribute_query_new ( ) GType lasso_samlp2_authn_query_get_type ( ) LassoNode* lasso_samlp2_authn_query_new ( ) GType lasso_samlp2_authn_request_get_type ( ) LassoNode* lasso_samlp2_authn_request_new ( ) GType lasso_samlp2_authz_decision_query_get_type ( ) LassoNode* lasso_samlp2_authz_decision_query_new ( ) GType lasso_samlp2_extensions_get_type ( ) LassoNode* lasso_samlp2_extensions_new ( ) GType lasso_samlp2_idp_entry_get_type ( ) LassoNode* lasso_samlp2_idp_entry_new ( ) GType lasso_samlp2_idp_list_get_type ( ) LassoNode* lasso_samlp2_idp_list_new ( ) GList* lasso_samlp2_logout_request_get_session_indexes ( LassoSamlp2LogoutRequest* logout_request ) GType lasso_samlp2_logout_request_get_type ( ) LassoNode* lasso_samlp2_logout_request_new ( ) None lasso_samlp2_logout_request_set_session_indexes ( LassoSamlp2LogoutRequest* logout_request, GList* session_index ) GType lasso_samlp2_logout_response_get_type ( ) LassoNode* lasso_samlp2_logout_response_new ( ) GType lasso_samlp2_manage_name_id_request_get_type ( ) LassoNode* lasso_samlp2_manage_name_id_request_new ( ) GType lasso_samlp2_manage_name_id_response_get_type ( ) LassoNode* lasso_samlp2_manage_name_id_response_new ( ) GType lasso_samlp2_name_id_mapping_request_get_type ( ) LassoNode* lasso_samlp2_name_id_mapping_request_new ( ) GType lasso_samlp2_name_id_mapping_response_get_type ( ) LassoNode* lasso_samlp2_name_id_mapping_response_new ( ) GType lasso_samlp2_name_id_policy_get_type ( ) LassoNode* lasso_samlp2_name_id_policy_new ( ) GType lasso_samlp2_request_abstract_get_type ( ) LassoNode* lasso_samlp2_request_abstract_new ( ) GType lasso_samlp2_requested_authn_context_get_type ( ) LassoNode* lasso_samlp2_requested_authn_context_new ( ) GType lasso_samlp2_response_get_type ( ) LassoNode* lasso_samlp2_response_new ( ) GType lasso_samlp2_scoping_get_type ( ) LassoNode* lasso_samlp2_scoping_new ( ) GType lasso_samlp2_status_code_get_type ( ) LassoNode* lasso_samlp2_status_code_new ( ) GType lasso_samlp2_status_detail_get_type ( ) LassoNode* lasso_samlp2_status_detail_new ( ) GType lasso_samlp2_status_get_type ( ) LassoNode* lasso_samlp2_status_new ( ) GType lasso_samlp2_status_response_get_type ( ) LassoNode* lasso_samlp2_status_response_new ( ) GType lasso_samlp2_subject_query_abstract_get_type ( ) LassoNode* lasso_samlp2_subject_query_abstract_new ( ) GType lasso_samlp2_terminate_get_type ( ) LassoNode* lasso_samlp2_terminate_new ( ) GType lasso_samlp_request_abstract_get_type ( ) GType lasso_samlp_request_get_type ( ) LassoNode* lasso_samlp_request_new ( ) None lasso_samlp_response_abstract_fill ( LassoSamlpResponseAbstract* response, const char* InResponseTo, const char* Recipient ) GType lasso_samlp_response_abstract_get_type ( ) GType lasso_samlp_response_get_type ( ) LassoNode* lasso_samlp_response_new ( ) GType lasso_samlp_status_code_get_type ( ) LassoSamlpStatusCode* lasso_samlp_status_code_new ( ) GType lasso_samlp_status_get_type ( ) LassoSamlpStatus* lasso_samlp_status_new ( ) lasso_error_t lasso_server_add_provider ( LassoServer* server, LassoProviderRole role, const gchar* metadata, const gchar* public_key, const gchar* ca_cert_chain ) lasso_error_t lasso_server_add_provider_from_buffer ( LassoServer* server, LassoProviderRole role, const gchar* metadata, const gchar* public_key, const gchar* ca_cert_chain ) None lasso_server_destroy ( LassoServer* server ) gchar* lasso_server_dump ( LassoServer* server ) LassoProvider* lasso_server_get_provider ( const LassoServer* server, const gchar* providerID ) GType lasso_server_get_type ( ) lasso_error_t lasso_server_load_affiliation ( LassoServer* server, const gchar* filename ) LassoServer* lasso_server_new ( const gchar* metadata, const gchar* private_key, const gchar* private_key_password, const gchar* certificate ) LassoServer* lasso_server_new_from_buffers ( const gchar* metadata, const gchar* private_key_content, const gchar* private_key_password, const gchar* certificate_content ) LassoServer* lasso_server_new_from_dump ( const gchar* dump ) lasso_error_t lasso_server_saml2_assertion_setup_signature ( LassoServer* server, LassoSaml2Assertion* saml2_assertion ) lasso_error_t lasso_server_set_encryption_private_key ( LassoServer* server, const gchar* filename_or_buffer ) lasso_error_t lasso_server_set_encryption_private_key_with_password ( LassoServer* server, const gchar* filename_or_buffer, const gchar* password ) lasso_error_t lasso_session_add_assertion ( LassoSession* session, const char* providerID, LassoNode* assertion ) None lasso_session_destroy ( LassoSession* session ) gchar* lasso_session_dump ( LassoSession* session ) LassoNode* lasso_session_get_assertion ( LassoSession* session, const gchar* providerID ) GList* lasso_session_get_assertions ( LassoSession* session, const char* provider_id ) gchar* lasso_session_get_provider_index ( LassoSession* session, gint index ) GType lasso_session_get_type ( ) gboolean lasso_session_is_empty ( LassoSession* session ) LassoSession* lasso_session_new ( ) LassoSession* lasso_session_new_from_dump ( const gchar* dump ) lasso_error_t lasso_session_remove_assertion ( LassoSession* session, const gchar* providerID ) None lasso_set_flag ( char* flag ) lasso_error_t lasso_shutdown ( ) const char* lasso_strerror ( int error_code ) lasso-2.8.2/abi/PaxHeaders/abi-2.3.30000644000000000000000000000013113766621500013601 xustar0029 mtime=1608196928.71889494 30 atime=1678098069.993489071 30 ctime=1678814319.933947183 lasso-2.8.2/abi/abi-2.3.30000644000175000017500000021067313766621500017063 0ustar00bdauvergnebdauvergne00000000000000BACKWARD_COMP_H LASSO_ASSERTION_QUERY_ERROR_ATTRIBUTE_REQUEST_ALREADY_EXIST LASSO_ASSERTION_QUERY_ERROR_NOT_AN_ATTRIBUTE_QUERY LASSO_ASSERTION_QUERY_REQUEST_TYPE_ASSERTION_ID LASSO_ASSERTION_QUERY_REQUEST_TYPE_ATTRIBUTE LASSO_ASSERTION_QUERY_REQUEST_TYPE_AUTHN LASSO_ASSERTION_QUERY_REQUEST_TYPE_AUTHZ_DECISION LASSO_ASSERTION_QUERY_REQUEST_TYPE_LAST LASSO_ASSERTION_QUERY_REQUEST_TYPE_UNSET LASSO_CERTIFICATE_ATTRIBUTE LASSO_CHECK_VERSIONABI_COMPATIBLE LASSO_CHECK_VERSION_EXACT LASSO_CHECK_VERSION_NUMERIC LASSO_DATA_SERVICE_ERROR_CANNOT_ADD_ITEM LASSO_DATA_SERVICE_ERROR_UNREGISTERED_DST LASSO_DEFEDERATION_ERROR_MISSING_NAME_IDENTIFIER LASSO_DISCOVERY_ERROR_FAILED_TO_BUILD_ENDPOINT_REFERENCE LASSO_DISCOVERY_ERROR_MISSING_REQUESTED_SERVICE LASSO_DISCOVERY_ERROR_SVC_METADATA_ASSOCIATION_ADD_FAILED LASSO_DISCOVERY_ERROR_SVC_METADATA_REGISTER_FAILED LASSO_DST_ERROR_EMPTY_REQUEST LASSO_DST_ERROR_MALFORMED_QUERY LASSO_DST_ERROR_MISSING_SERVICE_DATA LASSO_DST_ERROR_MODIFY_FAILED LASSO_DST_ERROR_MODIFY_PARTIALLY_FAILED LASSO_DST_ERROR_NEW_DATA_MISSING LASSO_DST_ERROR_NO_DATA LASSO_DST_ERROR_QUERY_FAILED LASSO_DST_ERROR_QUERY_NOT_FOUND LASSO_DST_ERROR_QUERY_PARTIALLY_FAILED LASSO_DS_ERROR_CA_CERT_CHAIN_LOAD_FAILED LASSO_DS_ERROR_CERTIFICATE_LOAD_FAILED LASSO_DS_ERROR_CONTEXT_CREATION_FAILED LASSO_DS_ERROR_DECRYPTION_FAILED LASSO_DS_ERROR_DECRYPTION_FAILED_MISSING_PRIVATE_KEY LASSO_DS_ERROR_DIGEST_COMPUTE_FAILED LASSO_DS_ERROR_ENCRYPTION_FAILED LASSO_DS_ERROR_INVALID_REFERENCE_FOR_SAML LASSO_DS_ERROR_INVALID_SIGALG LASSO_DS_ERROR_INVALID_SIGNATURE LASSO_DS_ERROR_KEYS_MNGR_CREATION_FAILED LASSO_DS_ERROR_KEYS_MNGR_INIT_FAILED LASSO_DS_ERROR_PRIVATE_KEY_LOAD_FAILED LASSO_DS_ERROR_PUBLIC_KEY_LOAD_FAILED LASSO_DS_ERROR_SIGNATURE_FAILED LASSO_DS_ERROR_SIGNATURE_NOT_FOUND LASSO_DS_ERROR_SIGNATURE_TEMPLATE_NOT_FOUND LASSO_DS_ERROR_SIGNATURE_TMPL_CREATION_FAILED LASSO_DS_ERROR_SIGNATURE_VERIFICATION_FAILED LASSO_DS_ERROR_TOO_MUCH_REFERENCES LASSO_DS_HREF LASSO_DS_PREFIX LASSO_DURATION_DAY LASSO_DURATION_HOUR LASSO_DURATION_MINUTE LASSO_DURATION_WEEK LASSO_ECP_HREF LASSO_ECP_PREFIX LASSO_ENCRYPTION_MODE_ASSERTION LASSO_ENCRYPTION_MODE_NAMEID LASSO_ENCRYPTION_MODE_NONE LASSO_ENCRYPTION_SYM_KEY_TYPE_3DES LASSO_ENCRYPTION_SYM_KEY_TYPE_AES_128 LASSO_ENCRYPTION_SYM_KEY_TYPE_AES_256 LASSO_ENCRYPTION_SYM_KEY_TYPE_DEFAULT LASSO_ERROR_CAST_FAILED LASSO_ERROR_OUT_OF_MEMORY LASSO_ERROR_UNDEFINED LASSO_ERROR_UNIMPLEMENTED LASSO_HTTP_METHOD_ANY LASSO_HTTP_METHOD_ARTIFACT_GET LASSO_HTTP_METHOD_ARTIFACT_POST LASSO_HTTP_METHOD_GET LASSO_HTTP_METHOD_IDP_INITIATED LASSO_HTTP_METHOD_LAST LASSO_HTTP_METHOD_NONE LASSO_HTTP_METHOD_PAOS LASSO_HTTP_METHOD_POST LASSO_HTTP_METHOD_REDIRECT LASSO_HTTP_METHOD_SOAP LASSO_IDWSF2_DISCOVERY_ERROR_DUPLICATE LASSO_IDWSF2_DISCOVERY_ERROR_FAILED LASSO_IDWSF2_DISCOVERY_ERROR_FORBIDDEN LASSO_IDWSF2_DISCOVERY_ERROR_LOGICAL_DUPLICATE LASSO_IDWSF2_DISCOVERY_ERROR_NOT_FOUND LASSO_IDWSF2_DISCOVERY_ERROR_NO_RESULTS LASSO_IDWSF2_DST_ERROR_DUPLICATE_ITEM LASSO_IDWSF2_DST_ERROR_ITEM_NOT_FOUND LASSO_IDWSF2_DST_ERROR_PARTIAL_FAILURE LASSO_IDWSF2_DST_ERROR_UNKNOWN_STATUS_CODE LASSO_LASSO_HREF LASSO_LASSO_PREFIX LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_INTERNET_PROTOCOL LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_INTERNET_PROTOCOL_PASSWORD LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_ONE_FACTOR_CONTRACT LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_ONE_FACTOR_UNREGISTERED LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_TWO_FACTOR_CONTRACT LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_TWO_FACTOR_UNREGISTERED LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PASSWORD LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PASSWORD_PROTECTED_TRANSPORT LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PREVIOUS_SESSION LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SMARTCARD LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SMARTCARD_PKI LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SOFTWARE_PKI LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_TIME_SYNC_TOKEN LASSO_LIB_AUTHN_CONTEXT_COMPARISON_BETTER LASSO_LIB_AUTHN_CONTEXT_COMPARISON_EXACT LASSO_LIB_AUTHN_CONTEXT_COMPARISON_MAXIMUM LASSO_LIB_AUTHN_CONTEXT_COMPARISON_MINIMUM LASSO_LIB_CONSENT_INAPPLICABLE LASSO_LIB_CONSENT_OBTAINED LASSO_LIB_CONSENT_OBTAINED_CURRENT_EXPLICIT LASSO_LIB_CONSENT_OBTAINED_CURRENT_IMPLICIT LASSO_LIB_CONSENT_OBTAINED_PRIOR LASSO_LIB_CONSENT_UNAVAILABLE LASSO_LIB_HREF LASSO_LIB_MAJOR_VERSION_N LASSO_LIB_MINOR_VERSION_N LASSO_LIB_NAMEID_POLICY_TYPE_ANY LASSO_LIB_NAMEID_POLICY_TYPE_FEDERATED LASSO_LIB_NAMEID_POLICY_TYPE_NONE LASSO_LIB_NAMEID_POLICY_TYPE_ONE_TIME LASSO_LIB_NAME_IDENTIFIER_FORMAT_ENCRYPTED LASSO_LIB_NAME_IDENTIFIER_FORMAT_ENTITYID LASSO_LIB_NAME_IDENTIFIER_FORMAT_FEDERATED LASSO_LIB_NAME_IDENTIFIER_FORMAT_ONE_TIME LASSO_LIB_PREFIX LASSO_LIB_PROTOCOL_PROFILE_BRWS_ART LASSO_LIB_PROTOCOL_PROFILE_BRWS_LECP LASSO_LIB_PROTOCOL_PROFILE_BRWS_POST LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_IDP_HTTP LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_IDP_SOAP LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_SP_SOAP LASSO_LIB_PROTOCOL_PROFILE_NIM_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_RNI_IDP_HTTP LASSO_LIB_PROTOCOL_PROFILE_RNI_IDP_SOAP LASSO_LIB_PROTOCOL_PROFILE_RNI_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_RNI_SP_SOAP LASSO_LIB_PROTOCOL_PROFILE_SLO_IDP_HTTP LASSO_LIB_PROTOCOL_PROFILE_SLO_IDP_SOAP LASSO_LIB_PROTOCOL_PROFILE_SLO_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_SLO_SP_SOAP LASSO_LIB_STATUS_CODE_FEDERATION_DOES_NOT_EXIST LASSO_LIB_STATUS_CODE_INVALID_ASSERTION_CONSUMER_SERVICE_INDEX LASSO_LIB_STATUS_CODE_INVALID_SIGNATURE LASSO_LIB_STATUS_CODE_NO_AUTHN_CONTEXT LASSO_LIB_STATUS_CODE_NO_AVAILABLEIDP LASSO_LIB_STATUS_CODE_NO_PASSIVE LASSO_LIB_STATUS_CODE_NO_SUPPORTEDIDP LASSO_LIB_STATUS_CODE_PROXY_COUNT_EXCEEDED LASSO_LIB_STATUS_CODE_UNKNOWN_PRINCIPAL LASSO_LIB_STATUS_CODE_UNSIGNED_AUTHN_REQUEST LASSO_LIB_STATUS_CODE_UNSUPPORTED_PROFILE LASSO_LOGIN_ERROR_ASSERTION_DOES_NOT_MATCH_REQUEST_ID LASSO_LOGIN_ERROR_ASSERTION_REPLAY LASSO_LOGIN_ERROR_CONSENT_NOT_OBTAINED LASSO_LOGIN_ERROR_FEDERATION_NOT_FOUND LASSO_LOGIN_ERROR_INVALID_ASSERTION_SIGNATURE LASSO_LOGIN_ERROR_INVALID_NAMEIDPOLICY LASSO_LOGIN_ERROR_INVALID_SIGNATURE LASSO_LOGIN_ERROR_NO_DEFAULT_ENDPOINT LASSO_LOGIN_ERROR_REQUEST_DENIED LASSO_LOGIN_ERROR_STATUS_NOT_SUCCESS LASSO_LOGIN_ERROR_UNKNOWN_PRINCIPAL LASSO_LOGIN_ERROR_UNSIGNED_AUTHN_REQUEST LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_ART LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_LECP LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_POST LASSO_LOGIN_PROTOCOL_PROFILE_REDIRECT LASSO_LOGOUT_ERROR_FEDERATION_NOT_FOUND LASSO_LOGOUT_ERROR_REQUEST_DENIED LASSO_LOGOUT_ERROR_UNKNOWN_PRINCIPAL LASSO_LOGOUT_ERROR_UNSUPPORTED_PROFILE LASSO_MD_PROTOCOL_TYPE_ARTIFACT_RESOLUTION LASSO_MD_PROTOCOL_TYPE_ASSERTION_ID_REQUEST LASSO_MD_PROTOCOL_TYPE_ATTRIBUTE LASSO_MD_PROTOCOL_TYPE_AUTHN_QUERY LASSO_MD_PROTOCOL_TYPE_AUTHZ LASSO_MD_PROTOCOL_TYPE_FEDERATION_TERMINATION LASSO_MD_PROTOCOL_TYPE_LAST LASSO_MD_PROTOCOL_TYPE_MANAGE_NAME_ID LASSO_MD_PROTOCOL_TYPE_NAME_IDENTIFIER_MAPPING LASSO_MD_PROTOCOL_TYPE_REGISTER_NAME_IDENTIFIER LASSO_MD_PROTOCOL_TYPE_SINGLE_LOGOUT LASSO_MD_PROTOCOL_TYPE_SINGLE_SIGN_ON LASSO_MESSAGE_FORMAT_BASE64 LASSO_MESSAGE_FORMAT_ERROR LASSO_MESSAGE_FORMAT_QUERY LASSO_MESSAGE_FORMAT_SOAP LASSO_MESSAGE_FORMAT_UNKNOWN LASSO_MESSAGE_FORMAT_XML LASSO_MESSAGE_FORMAT_XSCHEMA_ERROR LASSO_METADATA_HREF LASSO_METADATA_PREFIX LASSO_NAME_IDENTIFIER_MAPPING_ERROR_FORBIDDEN_CALL_ON_THIS_SIDE LASSO_NAME_IDENTIFIER_MAPPING_ERROR_MISSING_TARGET_IDENTIFIER LASSO_NAME_IDENTIFIER_MAPPING_ERROR_MISSING_TARGET_NAMESPACE LASSO_PAOS_HREF LASSO_PAOS_PREFIX LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ LASSO_PARAM_ERROR_CHECK_FAILED LASSO_PARAM_ERROR_INVALID_VALUE LASSO_PARAM_ERROR_NON_INITIALIZED_OBJECT LASSO_PRIVATE_KEY_ATTRIBUTE LASSO_PRIVATE_KEY_PASSWORD_ATTRIBUTE LASSO_PRIVATE_STATUS_CODE_FAILED_TO_RESTORE_ARTIFACT LASSO_PROFILE_ERROR_BAD_IDENTITY_DUMP LASSO_PROFILE_ERROR_BAD_SESSION_DUMP LASSO_PROFILE_ERROR_BUILDING_MESSAGE_FAILED LASSO_PROFILE_ERROR_BUILDING_QUERY_FAILED LASSO_PROFILE_ERROR_BUILDING_REQUEST_FAILED LASSO_PROFILE_ERROR_BUILDING_RESPONSE_FAILED LASSO_PROFILE_ERROR_CANNOT_FIND_A_PROVIDER LASSO_PROFILE_ERROR_CANNOT_VERIFY_SIGNATURE LASSO_PROFILE_ERROR_FEDERATION_NOT_FOUND LASSO_PROFILE_ERROR_IDENTITY_NOT_FOUND LASSO_PROFILE_ERROR_INVALID_ARTIFACT LASSO_PROFILE_ERROR_INVALID_ASSERTION LASSO_PROFILE_ERROR_INVALID_ASSERTION_CONDITIONS LASSO_PROFILE_ERROR_INVALID_HTTP_METHOD LASSO_PROFILE_ERROR_INVALID_ISSUER LASSO_PROFILE_ERROR_INVALID_MSG LASSO_PROFILE_ERROR_INVALID_POST_MSG LASSO_PROFILE_ERROR_INVALID_PROTOCOLPROFILE LASSO_PROFILE_ERROR_INVALID_QUERY LASSO_PROFILE_ERROR_INVALID_REQUEST LASSO_PROFILE_ERROR_INVALID_RESPONSE LASSO_PROFILE_ERROR_INVALID_SOAP_MSG LASSO_PROFILE_ERROR_ISSUER_IS_NOT_AN_IDP LASSO_PROFILE_ERROR_MISSING_ARTIFACT LASSO_PROFILE_ERROR_MISSING_ASSERTION LASSO_PROFILE_ERROR_MISSING_ENCRYPTION_PRIVATE_KEY LASSO_PROFILE_ERROR_MISSING_ENDPOINT_REFERENCE LASSO_PROFILE_ERROR_MISSING_ENDPOINT_REFERENCE_ADDRESS LASSO_PROFILE_ERROR_MISSING_ISSUER LASSO_PROFILE_ERROR_MISSING_NAME_IDENTIFIER LASSO_PROFILE_ERROR_MISSING_REMOTE_PROVIDERID LASSO_PROFILE_ERROR_MISSING_REQUEST LASSO_PROFILE_ERROR_MISSING_RESOURCE_OFFERING LASSO_PROFILE_ERROR_MISSING_RESPONSE LASSO_PROFILE_ERROR_MISSING_SERVER LASSO_PROFILE_ERROR_MISSING_SERVICE_DESCRIPTION LASSO_PROFILE_ERROR_MISSING_SERVICE_INSTANCE LASSO_PROFILE_ERROR_MISSING_SERVICE_TYPE LASSO_PROFILE_ERROR_MISSING_STATUS_CODE LASSO_PROFILE_ERROR_MISSING_SUBJECT LASSO_PROFILE_ERROR_NAME_IDENTIFIER_NOT_FOUND LASSO_PROFILE_ERROR_RESPONSE_DOES_NOT_MATCH_REQUEST LASSO_PROFILE_ERROR_SESSION_NOT_FOUND LASSO_PROFILE_ERROR_STATUS_NOT_SUCCESS LASSO_PROFILE_ERROR_UNKNOWN_ISSUER LASSO_PROFILE_ERROR_UNKNOWN_PROFILE_URL LASSO_PROFILE_ERROR_UNKNOWN_PROVIDER LASSO_PROFILE_ERROR_UNSUPPORTED_BINDING LASSO_PROFILE_ERROR_UNSUPPORTED_PROFILE LASSO_PROFILE_SIGNATURE_HINT_FORBID LASSO_PROFILE_SIGNATURE_HINT_FORCE LASSO_PROFILE_SIGNATURE_HINT_MAYBE LASSO_PROFILE_SIGNATURE_VERIFY_HINT_FORCE LASSO_PROFILE_SIGNATURE_VERIFY_HINT_IGNORE LASSO_PROFILE_SIGNATURE_VERIFY_HINT_LAST LASSO_PROFILE_SIGNATURE_VERIFY_HINT_MAYBE LASSO_PROTOCOL_LIBERTY_1_0 LASSO_PROTOCOL_LIBERTY_1_1 LASSO_PROTOCOL_LIBERTY_1_2 LASSO_PROTOCOL_NONE LASSO_PROTOCOL_SAML_2_0 LASSO_PROVIDER_ERROR_MISSING_PUBLIC_KEY LASSO_PROVIDER_ROLE_ANY LASSO_PROVIDER_ROLE_ATTRIBUTE_AUTHORITY LASSO_PROVIDER_ROLE_AUTHN_AUTHORITY LASSO_PROVIDER_ROLE_AUTHZ_AUTHORITY LASSO_PROVIDER_ROLE_BOTH LASSO_PROVIDER_ROLE_IDP LASSO_PROVIDER_ROLE_LAST LASSO_PROVIDER_ROLE_NONE LASSO_PROVIDER_ROLE_SP LASSO_PYTHON_HREF LASSO_REGISTRY_ERROR_KEY_EXISTS LASSO_REQUEST_TYPE_DEFEDERATION LASSO_REQUEST_TYPE_DISCO_MODIFY LASSO_REQUEST_TYPE_DISCO_QUERY LASSO_REQUEST_TYPE_DST_MODIFY LASSO_REQUEST_TYPE_DST_QUERY LASSO_REQUEST_TYPE_IDWSF2_DISCO_QUERY LASSO_REQUEST_TYPE_IDWSF2_DISCO_SVCMD_ASSOCIATION_ADD LASSO_REQUEST_TYPE_IDWSF2_DISCO_SVCMD_REGISTER LASSO_REQUEST_TYPE_INVALID LASSO_REQUEST_TYPE_LECP LASSO_REQUEST_TYPE_LOGIN LASSO_REQUEST_TYPE_LOGOUT LASSO_REQUEST_TYPE_NAME_IDENTIFIER_MAPPING LASSO_REQUEST_TYPE_NAME_ID_MANAGEMENT LASSO_REQUEST_TYPE_NAME_REGISTRATION LASSO_REQUEST_TYPE_SASL_REQUEST LASSO_SAML2_ACTION_GHPP_GET LASSO_SAML2_ACTION_GHPP_HEAD LASSO_SAML2_ACTION_GHPP_POST LASSO_SAML2_ACTION_GHPP_PUT LASSO_SAML2_ACTION_NAMESPACE_GHPP LASSO_SAML2_ACTION_NAMESPACE_RWEDC LASSO_SAML2_ACTION_NAMESPACE_RWEDC_NEGATION LASSO_SAML2_ACTION_NAMESPACE_UNIX LASSO_SAML2_ACTION_RWEDC_CONTROL LASSO_SAML2_ACTION_RWEDC_DELETE LASSO_SAML2_ACTION_RWEDC_EXECUTE LASSO_SAML2_ACTION_RWEDC_NEGATION LASSO_SAML2_ACTION_RWEDC_READ LASSO_SAML2_ACTION_RWEDC_WRITE LASSO_SAML2_ASSERTION_HREF LASSO_SAML2_ASSERTION_INDETERMINATE LASSO_SAML2_ASSERTION_INVALID LASSO_SAML2_ASSERTION_PREFIX LASSO_SAML2_ASSERTION_VALID LASSO_SAML2_ATTRIBUTE_NAME_EPR LASSO_SAML2_ATTRIBUTE_NAME_FORMAT_BASIC LASSO_SAML2_ATTRIBUTE_NAME_FORMAT_UNSPECIFIED LASSO_SAML2_ATTRIBUTE_NAME_FORMAT_URI LASSO_SAML2_ATTRIBUTE_PROFILE_BASIC LASSO_SAML2_ATTRIBUTE_PROFILE_DCE LASSO_SAML2_ATTRIBUTE_PROFILE_UUID LASSO_SAML2_ATTRIBUTE_PROFILE_X500 LASSO_SAML2_AUTHN_CONTEXT_AUTHENTICATED_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_INTERNET_PROTOCOL LASSO_SAML2_AUTHN_CONTEXT_INTERNET_PROTOCOL_PASSWORD LASSO_SAML2_AUTHN_CONTEXT_KERBEROS LASSO_SAML2_AUTHN_CONTEXT_MOBILE_ONE_FACTOR_CONTRACT LASSO_SAML2_AUTHN_CONTEXT_MOBILE_ONE_FACTOR_UNREGISTERED LASSO_SAML2_AUTHN_CONTEXT_MOBILE_TWO_FACTOR_CONTRACT LASSO_SAML2_AUTHN_CONTEXT_MOBILE_TWO_FACTOR_UNREGISTERED LASSO_SAML2_AUTHN_CONTEXT_NOMAD_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_PASSWORD LASSO_SAML2_AUTHN_CONTEXT_PASSWORD_PROTECTED_TRANSPORT LASSO_SAML2_AUTHN_CONTEXT_PERSONALIZED_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_PGP LASSO_SAML2_AUTHN_CONTEXT_PREVIOUS_SESSION LASSO_SAML2_AUTHN_CONTEXT_SECURE_REMOTE_PASSWORD LASSO_SAML2_AUTHN_CONTEXT_SMARTCARD LASSO_SAML2_AUTHN_CONTEXT_SMARTCARD_PKI LASSO_SAML2_AUTHN_CONTEXT_SOFTWARE_PKI LASSO_SAML2_AUTHN_CONTEXT_SPKI LASSO_SAML2_AUTHN_CONTEXT_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_TIME_SYNC_TOKEN LASSO_SAML2_AUTHN_CONTEXT_TLS_CLIENT LASSO_SAML2_AUTHN_CONTEXT_UNSPECIFIED LASSO_SAML2_AUTHN_CONTEXT_X509 LASSO_SAML2_AUTHN_CONTEXT_XMLDSIG LASSO_SAML2_CONFIRMATION_METHOD_BEARER LASSO_SAML2_CONFIRMATION_METHOD_HOLDER_OF_KEY LASSO_SAML2_CONSENT_EXPLICIT LASSO_SAML2_CONSENT_IMPLICIT LASSO_SAML2_CONSENT_INAPPLICABLE LASSO_SAML2_CONSENT_OBTAINED LASSO_SAML2_CONSENT_PRIOR LASSO_SAML2_CONSENT_UNAVAILABLE LASSO_SAML2_DEFLATE_ENCODING LASSO_SAML2_FIELD_ARTIFACT LASSO_SAML2_FIELD_ENCODING LASSO_SAML2_FIELD_RELAYSTATE LASSO_SAML2_FIELD_REQUEST LASSO_SAML2_FIELD_RESPONSE LASSO_SAML2_FIELD_SIGALG LASSO_SAML2_FIELD_SIGNATURE LASSO_SAML2_METADATA_BINDING_ARTIFACT LASSO_SAML2_METADATA_BINDING_PAOS LASSO_SAML2_METADATA_BINDING_POST LASSO_SAML2_METADATA_BINDING_REDIRECT LASSO_SAML2_METADATA_BINDING_SOAP LASSO_SAML2_METADATA_BINDING_URI LASSO_SAML2_METADATA_HREF LASSO_SAML2_METADATA_PREFIX LASSO_SAML2_NAME_IDENTIFIER_FORMAT_EMAIL LASSO_SAML2_NAME_IDENTIFIER_FORMAT_ENCRYPTED LASSO_SAML2_NAME_IDENTIFIER_FORMAT_ENTITY LASSO_SAML2_NAME_IDENTIFIER_FORMAT_KERBEROS LASSO_SAML2_NAME_IDENTIFIER_FORMAT_PERSISTENT LASSO_SAML2_NAME_IDENTIFIER_FORMAT_TRANSIENT LASSO_SAML2_NAME_IDENTIFIER_FORMAT_UNSPECIFIED LASSO_SAML2_NAME_IDENTIFIER_FORMAT_WINDOWS LASSO_SAML2_NAME_IDENTIFIER_FORMAT_X509 LASSO_SAML2_PROTOCOL_HREF LASSO_SAML2_PROTOCOL_PREFIX LASSO_SAML2_STATUS_CODE_AUTHN_FAILED LASSO_SAML2_STATUS_CODE_INVALID_ATTR_NAME LASSO_SAML2_STATUS_CODE_INVALID_NAME_ID_POLICY LASSO_SAML2_STATUS_CODE_NO_AUTHN_CONTEXT LASSO_SAML2_STATUS_CODE_NO_AVAILABLE_IDP LASSO_SAML2_STATUS_CODE_NO_PASSIVE LASSO_SAML2_STATUS_CODE_NO_SUPPORTED_IDP LASSO_SAML2_STATUS_CODE_PARTIAL_LOGOUT LASSO_SAML2_STATUS_CODE_PROXY_COUNT_EXCEEDED LASSO_SAML2_STATUS_CODE_REQUESTER LASSO_SAML2_STATUS_CODE_REQUEST_DENIED LASSO_SAML2_STATUS_CODE_REQUEST_UNSUPPORTED LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_DEPRECATED LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_TOO_HIGH LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_TOO_LOW LASSO_SAML2_STATUS_CODE_RESOURCE_NOT_RECOGNIZED LASSO_SAML2_STATUS_CODE_RESPONDER LASSO_SAML2_STATUS_CODE_SUCCESS LASSO_SAML2_STATUS_CODE_TOO_MANY_RESPONSES LASSO_SAML2_STATUS_CODE_UNKNOWN_ATTR_PROFILE LASSO_SAML2_STATUS_CODE_UNKNOWN_PRINCIPAL LASSO_SAML2_STATUS_CODE_UNSUPPORTED_BINDING LASSO_SAML2_STATUS_CODE_VERSION_MISMATCH LASSO_SAML_ASSERTION_HREF LASSO_SAML_ASSERTION_PREFIX LASSO_SAML_AUTHENTICATION_METHODS_PKI LASSO_SAML_AUTHENTICATION_METHOD_HARDWARE_TOKEN LASSO_SAML_AUTHENTICATION_METHOD_KERBEROS LASSO_SAML_AUTHENTICATION_METHOD_LIBERTY LASSO_SAML_AUTHENTICATION_METHOD_PASSWORD LASSO_SAML_AUTHENTICATION_METHOD_PGP LASSO_SAML_AUTHENTICATION_METHOD_SECURE_REMOTE_PASSWORD LASSO_SAML_AUTHENTICATION_METHOD_SMARTCARD_PKI LASSO_SAML_AUTHENTICATION_METHOD_SOFTWARE_PKI LASSO_SAML_AUTHENTICATION_METHOD_UNSPECIFIED LASSO_SAML_AUTHENTICATION_METHOD_XKMS LASSO_SAML_AUTHENTICATION_METHOD_XMLD_SIG LASSO_SAML_CONFIRMATION_METHOD_ARTIFACT LASSO_SAML_CONFIRMATION_METHOD_ARTIFACT01 LASSO_SAML_CONFIRMATION_METHOD_BEARER LASSO_SAML_CONFIRMATION_METHOD_HOLDER_OF_KEY LASSO_SAML_CONFIRMATION_METHOD_SENDER_VOUCHES LASSO_SAML_MAJOR_VERSION_N LASSO_SAML_MINOR_VERSION_N LASSO_SAML_PROTOCOL_HREF LASSO_SAML_PROTOCOL_PREFIX LASSO_SAML_STATUS_CODE_REQUESTER LASSO_SAML_STATUS_CODE_REQUEST_DENIED LASSO_SAML_STATUS_CODE_REQUEST_VERSION_DEPRECATED LASSO_SAML_STATUS_CODE_REQUEST_VERSION_TOO_HIGH LASSO_SAML_STATUS_CODE_REQUEST_VERSION_TOO_LOW LASSO_SAML_STATUS_CODE_RESOURCE_NOT_RECOGNIZED LASSO_SAML_STATUS_CODE_RESPONDER LASSO_SAML_STATUS_CODE_SUCCESS LASSO_SAML_STATUS_CODE_TOO_MANY_RESPONSES LASSO_SAML_STATUS_CODE_VERSION_MISMATCH LASSO_SERVER_ERROR_ADD_PROVIDER_FAILED LASSO_SERVER_ERROR_ADD_PROVIDER_PROTOCOL_MISMATCH LASSO_SERVER_ERROR_INVALID_XML LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND LASSO_SERVER_ERROR_SET_ENCRYPTION_PRIVATE_KEY_FAILED LASSO_SIGNATURE_METHOD_ATTRIBUTE LASSO_SIGNATURE_METHOD_DSA_SHA1 LASSO_SIGNATURE_METHOD_LAST LASSO_SIGNATURE_METHOD_RSA_SHA1 LASSO_SIGNATURE_TYPE_ATTRIBUTE LASSO_SIGNATURE_TYPE_LAST LASSO_SIGNATURE_TYPE_NONE LASSO_SIGNATURE_TYPE_SIMPLE LASSO_SIGNATURE_TYPE_WITHX509 LASSO_SOAP_ENV_ACTOR LASSO_SOAP_ENV_HREF LASSO_SOAP_ENV_PREFIX LASSO_SOAP_ERROR_MISSING_BODY LASSO_SOAP_ERROR_MISSING_ENVELOPE LASSO_SOAP_ERROR_MISSING_HEADER LASSO_SOAP_ERROR_MISSING_SOAP_FAULT_DETAIL LASSO_SOAP_ERROR_REDIRECT_REQUEST_FAULT LASSO_SOAP_FAULT_CODE_CLIENT LASSO_SOAP_FAULT_CODE_MUST_UNDERSTAND LASSO_SOAP_FAULT_CODE_SERVER LASSO_SOAP_FAULT_CODE_VERSION_MISMATCH LASSO_SOAP_FAULT_REDIRECT_REQUEST LASSO_WSF_ENABLED LASSO_WSF_PROFILE_ERROR_INVALID_OR_MISSING_REFERENCE_TO_MESSAGE_ID LASSO_WSF_PROFILE_ERROR_MISSING_ASSERTION_ID LASSO_WSF_PROFILE_ERROR_MISSING_CORRELATION LASSO_WSF_PROFILE_ERROR_MISSING_CREDENTIAL_REF LASSO_WSF_PROFILE_ERROR_MISSING_DESCRIPTION LASSO_WSF_PROFILE_ERROR_MISSING_ENDPOINT LASSO_WSF_PROFILE_ERROR_MISSING_RESOURCE_ID LASSO_WSF_PROFILE_ERROR_MISSING_SECURITY LASSO_WSF_PROFILE_ERROR_MISSING_SENDER_ID LASSO_WSF_PROFILE_ERROR_REDIRECT_REQUEST LASSO_WSF_PROFILE_ERROR_REDIRECT_REQUEST_UNSUPPORTED_BY_REQUESTER LASSO_WSF_PROFILE_ERROR_SECURITY_MECHANISM_CHECK_FAILED LASSO_WSF_PROFILE_ERROR_SERVER_INTERACTION_REQUIRED LASSO_WSF_PROFILE_ERROR_SERVER_INTERACTION_REQUIRED_FOR_DATA LASSO_WSF_PROFILE_ERROR_SOAP_FAULT LASSO_WSF_PROFILE_ERROR_UNKNOWN_STATUS_CODE LASSO_WSF_PROFILE_ERROR_UNSUPPORTED_SECURITY_MECHANISM LASSO_WSSEC_ERROR_BAD_PASSWORD LASSO_WSSEC_ERROR_MISSING_SECURITY_TOKEN LASSO_WSUTIL1_HREF LASSO_WSUTIL1_PREFIX LASSO_XML_ERROR_ATTR_NOT_FOUND LASSO_XML_ERROR_ATTR_VALUE_NOT_FOUND LASSO_XML_ERROR_INVALID_FILE LASSO_XML_ERROR_MISSING_NAMESPACE LASSO_XML_ERROR_NODE_CONTENT_NOT_FOUND LASSO_XML_ERROR_NODE_NOT_FOUND LASSO_XML_ERROR_OBJECT_CONSTRUCTION_FAILED LASSO_XML_ERROR_SCHEMA_INVALID_FRAGMENT LASSO_XSI_HREF LASSO_XSI_PREFIX struct LassoAssertionQuery { LassoAssertionQueryPrivate* private_data } LassoAssertionQueryRequestType LassoCheckVersionMode struct LassoDefederation { } struct LassoDsKeyInfo { LassoDsKeyValue* KeyValue } struct LassoDsKeyValue { LassoDsRsaKeyValue* RSAKeyValue } struct LassoDsRsaKeyValue { char* Modulus, char* Exponent } struct LassoEcp { gchar* assertionConsumerURL, LassoEcpPrivate* private_data } LassoEncryptionMode LassoEncryptionSymKeyType struct LassoFederation { gchar* remote_providerID, LassoNode* local_nameIdentifier, LassoNode* remote_nameIdentifier, LassoFederationPrivate* private_data } LassoHttpMethod struct LassoIdentity { GHashTable* federations, gboolean is_dirty, LassoIdentityPrivate* private_data } struct LassoLecp { LassoLibAuthnRequestEnvelope* authnRequestEnvelope, LassoLibAuthnResponseEnvelope* authnResponseEnvelope, char* assertionConsumerServiceURL } struct LassoLibAssertion { char* InResponseTo } struct LassoLibAuthenticationStatement { LassoLibAuthnContext* AuthnContext, char* ReauthenticateOnOrAfter, char* SessionIndex } struct LassoLibAuthnContext { char* AuthnContextClassRef, char* AuthnContextStatementRef } struct LassoLibAuthnRequest { GList* Extension, char* ProviderID, char* AffiliationID, char* NameIDPolicy, gboolean ForceAuthn, gboolean IsPassive, char* ProtocolProfile, char* AssertionConsumerServiceID, LassoLibRequestAuthnContext* RequestAuthnContext, char* RelayState, LassoLibScoping* Scoping, char* consent } struct LassoLibAuthnRequestEnvelope { GList* Extension, LassoLibAuthnRequest* AuthnRequest, char* ProviderID, char* ProviderName, char* AssertionConsumerServiceURL, LassoLibIDPList* IDPList, gboolean IsPassive } struct LassoLibAuthnResponse { GList* Extension, char* ProviderID, char* RelayState, char* consent } struct LassoLibAuthnResponseEnvelope { GList* Extension, LassoLibAuthnResponse* AuthnResponse, char* AssertionConsumerServiceURL } struct LassoLibFederationTerminationNotification { GList* Extension, char* ProviderID, LassoSamlNameIdentifier* NameIdentifier, char* consent, char* RelayState } struct LassoLibIDPEntries { GList* IDPEntry } struct LassoLibIDPEntry { char* ProviderID, char* ProviderName, char* Loc } struct LassoLibIDPList { LassoLibIDPEntries* IDPEntries, char* GetComplete } struct LassoLibLogoutRequest { GList* Extension, char* ProviderID, LassoSamlNameIdentifier* NameIdentifier, char* SessionIndex, char* RelayState, char* consent, char* NotOnOrAfter } struct LassoLibLogoutResponse { } struct LassoLibNameIdentifierMappingRequest { GList* Extension, char* ProviderID, LassoSamlNameIdentifier* NameIdentifier, char* TargetNamespace, char* consent } struct LassoLibNameIdentifierMappingResponse { GList* Extension, char* ProviderID, LassoSamlpStatus* Status, LassoSamlNameIdentifier* NameIdentifier } struct LassoLibRegisterNameIdentifierRequest { GList* Extension, char* ProviderID, LassoSamlNameIdentifier* IDPProvidedNameIdentifier, LassoSamlNameIdentifier* SPProvidedNameIdentifier, LassoSamlNameIdentifier* OldProvidedNameIdentifier, char* RelayState } struct LassoLibRegisterNameIdentifierResponse { } struct LassoLibRequestAuthnContext { GList* AuthnContextClassRef, GList* AuthnContextStatementRef, char* AuthnContextComparison } struct LassoLibScoping { int ProxyCount, LassoLibIDPList* IDPList } struct LassoLibStatusResponse { GList* Extension, char* ProviderID, LassoSamlpStatus* Status, char* RelayState } struct LassoLibSubject { LassoSamlNameIdentifier* IDPProvidedNameIdentifier } struct LassoLogin { LassoLoginProtocolProfile protocolProfile, gchar* assertionArtifact, LassoSamlAssertion* assertion, gchar* nameIDPolicy, LassoHttpMethod http_method, LassoLoginPrivate* private_data } LassoLoginProtocolProfile struct LassoLogout { LassoNode* initial_request, LassoNode* initial_response, gchar* initial_remote_providerID, gint providerID_index, LassoHttpMethod initial_http_request_method, LassoLogoutPrivate* private_data } LassoMdProtocolType LassoMessageFormat struct LassoMiscTextNode { char* content, char* name, char* ns_href, char* ns_prefix, gboolean text_child } struct LassoNameIdManagement { } struct LassoNameIdentifierMapping { gchar* targetNameIdentifier } struct LassoNameRegistration { LassoSamlNameIdentifier* oldNameIdentifier } struct LassoNode { } struct LassoProfile { LassoServer* server, LassoNode* request, LassoNode* response, LassoNode* nameIdentifier, gchar* remote_providerID, gchar* msg_url, gchar* msg_body, gchar* msg_relayState, LassoIdentity* identity, LassoSession* session, LassoHttpMethod http_request_method, gint signature_status, LassoProfilePrivate* private_data } LassoProfileSignatureHint LassoProfileSignatureVerifyHint LassoProtocolConformance struct LassoProvider { gchar* ProviderID, LassoProviderRole role, char* metadata_filename, gchar* public_key, gchar* ca_cert_chain, LassoProviderPrivate* private_data } LassoProviderRole LassoRequestType struct LassoSaml2Action { char* content, char* Namespace } struct LassoSaml2Advice { GList* AssertionIDRef, GList* AssertionURIRef, GList* Assertion, GList* EncryptedAssertion } struct LassoSaml2Assertion { LassoSaml2NameID* Issuer, LassoSaml2Subject* Subject, LassoSaml2Conditions* Conditions, LassoSaml2Advice* Advice, GList* Statement, GList* AuthnStatement, GList* AuthzDecisionStatement, GList* AttributeStatement, char* Version, char* ID, char* IssueInstant, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file, gboolean encryption_activated, char* encryption_public_key_str, LassoEncryptionSymKeyType encryption_sym_key_type } LassoSaml2AssertionValidationState struct LassoSaml2Attribute { GList* AttributeValue, char* Name, char* NameFormat, char* FriendlyName } struct LassoSaml2AttributeStatement { GList* Attribute, GList* EncryptedAttribute } struct LassoSaml2AttributeValue { GList* any } struct LassoSaml2AudienceRestriction { char* Audience } struct LassoSaml2AuthnContext { char* AuthnContextClassRef, char* AuthnContextDeclRef, char* AuthenticatingAuthority } struct LassoSaml2AuthnStatement { LassoSaml2SubjectLocality* SubjectLocality, LassoSaml2AuthnContext* AuthnContext, char* AuthnInstant, char* SessionIndex, char* SessionNotOnOrAfter } struct LassoSaml2AuthzDecisionStatement { LassoSaml2Action* Action, LassoSaml2Evidence* Evidence, char* Resource, char* Decision } struct LassoSaml2BaseIDAbstract { char* NameQualifier, char* SPNameQualifier } struct LassoSaml2ConditionAbstract { } struct LassoSaml2Conditions { GList* Condition, GList* AudienceRestriction, GList* OneTimeUse, GList* ProxyRestriction, char* NotBefore, char* NotOnOrAfter } struct LassoSaml2EncryptedElement { xmlNode* EncryptedData, GList* EncryptedKey, LassoNode* original_data } struct LassoSaml2Evidence { GList* AssertionIDRef, GList* AssertionURIRef, GList* Assertion, GList* EncryptedAssertion } struct LassoSaml2KeyInfoConfirmationData { } struct LassoSaml2NameID { char* content, char* Format, char* SPProvidedID, char* NameQualifier, char* SPNameQualifier } struct LassoSaml2OneTimeUse { } struct LassoSaml2ProxyRestriction { char* Audience, char* Count } struct LassoSaml2StatementAbstract { } struct LassoSaml2Subject { LassoSaml2BaseIDAbstract* BaseID, LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, LassoSaml2SubjectConfirmation* SubjectConfirmation } struct LassoSaml2SubjectConfirmation { LassoSaml2BaseIDAbstract* BaseID, LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, LassoSaml2SubjectConfirmationData* SubjectConfirmationData, char* Method } struct LassoSaml2SubjectConfirmationData { char* NotBefore, char* NotOnOrAfter, char* Recipient, char* InResponseTo, char* Address } struct LassoSaml2SubjectLocality { char* Address, char* DNSName } struct LassoSamlAdvice { GList* AssertionIDReference, LassoNode* Assertion } struct LassoSamlAssertion { LassoSamlConditions* Conditions, LassoSamlAdvice* Advice, LassoSamlSubjectStatement* SubjectStatement, LassoSamlAuthenticationStatement* AuthenticationStatement, LassoSamlAttributeStatement* AttributeStatement, int MajorVersion, int MinorVersion, char* AssertionID, char* Issuer, char* IssueInstant, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlAttribute { gchar* attributeName, gchar* attributeNameSpace, GList* AttributeValue } struct LassoSamlAttributeDesignator { char* AttributeName, char* AttributeNamespace } struct LassoSamlAttributeStatement { GList* Attribute } struct LassoSamlAttributeValue { GList* any } struct LassoSamlAudienceRestrictionCondition { GList* Audience } struct LassoSamlAuthenticationStatement { LassoSamlSubjectLocality* SubjectLocality, GList* AuthorityBinding, char* AuthenticationMethod, char* AuthenticationInstant } struct LassoSamlAuthorityBinding { char* AuthorityKind, char* Location, char* Binding } struct LassoSamlConditionAbstract { } struct LassoSamlConditions { GList* Condition, GList* AudienceRestrictionCondition, char* NotBefore, char* NotOnOrAfter } struct LassoSamlNameIdentifier { char* NameQualifier, char* Format, char* content } struct LassoSamlStatementAbstract { } struct LassoSamlSubject { LassoSamlNameIdentifier* NameIdentifier, LassoSamlSubjectConfirmation* SubjectConfirmation, LassoSaml2EncryptedElement* EncryptedNameIdentifier } struct LassoSamlSubjectConfirmation { GList* ConfirmationMethod, char* SubjectConfirmationData, LassoDsKeyInfo* KeyInfo } struct LassoSamlSubjectLocality { char* IPAddress, char* DNSAddress } struct LassoSamlSubjectStatement { } struct LassoSamlSubjectStatementAbstract { LassoSamlSubject* Subject } struct LassoSamlp2ArtifactResolve { char* Artifact } struct LassoSamlp2ArtifactResponse { LassoNode* any } struct LassoSamlp2AssertionIDRequest { char* AssertionIDRef } struct LassoSamlp2AttributeQuery { GList* Attribute } struct LassoSamlp2AuthnQuery { LassoSamlp2RequestedAuthnContext* RequestedAuthnContext, char* SessionIndex } struct LassoSamlp2AuthnRequest { LassoSaml2Subject* Subject, LassoSamlp2NameIDPolicy* NameIDPolicy, LassoSaml2Conditions* Conditions, LassoSamlp2RequestedAuthnContext* RequestedAuthnContext, LassoSamlp2Scoping* Scoping, gboolean ForceAuthn, gboolean IsPassive, char* ProtocolBinding, int AssertionConsumerServiceIndex, char* AssertionConsumerServiceURL, int AttributeConsumingServiceIndex, char* ProviderName, G_GNUC_DEPRECATED char } struct LassoSamlp2AuthzDecisionQuery { LassoSaml2Action* Action, LassoSaml2Evidence* Evidence, char* Resource } struct LassoSamlp2Extensions { } struct LassoSamlp2IDPEntry { char* ProviderID, char* Name, char* Loc } struct LassoSamlp2IDPList { LassoSamlp2IDPEntry* IDPEntry, char* GetComplete } struct LassoSamlp2LogoutRequest { LassoSaml2BaseIDAbstract* BaseID, LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, char* SessionIndex, char* Reason, char* NotOnOrAfter, G_GNUC_DEPRECATED char } struct LassoSamlp2LogoutResponse { G_GNUC_DEPRECATED char } struct LassoSamlp2ManageNameIDRequest { LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, char* NewID, LassoSaml2EncryptedElement* NewEncryptedID, LassoSamlp2Terminate* Terminate } struct LassoSamlp2ManageNameIDResponse { } struct LassoSamlp2NameIDMappingRequest { LassoSaml2BaseIDAbstract* BaseID, LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, LassoSamlp2NameIDPolicy* NameIDPolicy } struct LassoSamlp2NameIDMappingResponse { LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID } struct LassoSamlp2NameIDPolicy { char* Format, char* SPNameQualifier, gboolean AllowCreate } struct LassoSamlp2RequestAbstract { LassoSaml2NameID* Issuer, LassoSamlp2Extensions* Extensions, char* ID, char* Version, char* IssueInstant, char* Destination, char* Consent, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlp2RequestedAuthnContext { GList* AuthnContextClassRef, GList* AuthnContextDeclRef, char* Comparison } struct LassoSamlp2Response { GList* Assertion, GList* EncryptedAssertion } struct LassoSamlp2Scoping { LassoSamlp2IDPList* IDPList, char* RequesterID, char* ProxyCount } struct LassoSamlp2Status { LassoSamlp2StatusCode* StatusCode, char* StatusMessage, LassoSamlp2StatusDetail* StatusDetail } struct LassoSamlp2StatusCode { LassoSamlp2StatusCode* StatusCode, char* Value } struct LassoSamlp2StatusDetail { } struct LassoSamlp2StatusResponse { LassoSaml2NameID* Issuer, LassoSamlp2Extensions* Extensions, LassoSamlp2Status* Status, char* ID, char* InResponseTo, char* Version, char* IssueInstant, char* Destination, char* Consent, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlp2SubjectQueryAbstract { LassoSaml2Subject* Subject } struct LassoSamlp2Terminate { } struct LassoSamlpRequest { char* AssertionArtifact } struct LassoSamlpRequestAbstract { GList* RespondWith, char* RequestID, int MajorVersion, int MinorVersion, char* IssueInstant, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlpResponse { LassoSamlpStatus* Status, GList* Assertion } struct LassoSamlpResponseAbstract { char* ResponseID, char* InResponseTo, int MajorVersion, int MinorVersion, char* IssueInstant, char* Recipient, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlpStatus { LassoSamlpStatusCode* StatusCode, char* StatusMessage } struct LassoSamlpStatusCode { LassoSamlpStatusCode* StatusCode, char* Value } struct LassoServer { GHashTable* providers, GHashTable* services, gchar* private_key, gchar* private_key_password, gchar* certificate, LassoSignatureMethod signature_method, LassoServerPrivate* private_data } struct LassoSession { GHashTable* assertions, gboolean is_dirty, LassoSessionPrivate* private_data } LassoSignatureMethod LassoSignatureType struct LassoSoapBody { GList* any, gchar* Id } struct LassoSoapDetail { GList* any } struct LassoSoapEnvelope { LassoSoapHeader* Header, LassoSoapBody* Body } struct LassoSoapFault { gchar* faultcode, gchar* faultstring, GList* faultactor, LassoSoapDetail* Detail } struct LassoSoapHeader { GList* Other } lasso_error_t lasso_assertion_query_add_attribute_request ( LassoAssertionQuery* assertion_query, char* format, char* name ) lasso_error_t lasso_assertion_query_build_request_msg ( LassoAssertionQuery* assertion_query ) lasso_error_t lasso_assertion_query_build_response_msg ( LassoAssertionQuery* assertion_query ) None lasso_assertion_query_destroy ( LassoAssertionQuery* assertion_query ) LassoAssertionQueryRequestType lasso_assertion_query_get_request_type ( LassoAssertionQuery* assertion_query ) GType lasso_assertion_query_get_type ( ) lasso_error_t lasso_assertion_query_init_request ( LassoAssertionQuery* assertion_query, char* remote_provider_id, LassoHttpMethod http_method, LassoAssertionQueryRequestType query_request_type ) LassoAssertionQuery* lasso_assertion_query_new ( LassoServer* server ) lasso_error_t lasso_assertion_query_process_request_msg ( LassoAssertionQuery* assertion_query, gchar* request_msg ) lasso_error_t lasso_assertion_query_process_response_msg ( LassoAssertionQuery* assertion_query, gchar* response_msg ) lasso_error_t lasso_assertion_query_validate_request ( LassoAssertionQuery* assertion_query ) char* lasso_build_unique_id ( unsigned int size ) int lasso_check_version ( int major, int minor, int subminor, LassoCheckVersionMode mode ) lasso_error_t lasso_defederation_build_notification_msg ( LassoDefederation* defederation ) None lasso_defederation_destroy ( LassoDefederation* defederation ) GType lasso_defederation_get_type ( ) lasso_error_t lasso_defederation_init_notification ( LassoDefederation* defederation, gchar* remote_providerID, LassoHttpMethod http_method ) LassoDefederation* lasso_defederation_new ( LassoServer* server ) lasso_error_t lasso_defederation_process_notification_msg ( LassoDefederation* defederation, gchar* notification_msg ) lasso_error_t lasso_defederation_validate_notification ( LassoDefederation* defederation ) GType lasso_ds_key_info_get_type ( ) LassoDsKeyInfo* lasso_ds_key_info_new ( ) GType lasso_ds_key_value_get_type ( ) LassoDsKeyValue* lasso_ds_key_value_new ( ) GType lasso_ds_rsa_key_value_get_type ( ) LassoDsRsaKeyValue* lasso_ds_rsa_key_value_new ( ) None lasso_ecp_destroy ( LassoEcp* ecp ) GType lasso_ecp_get_type ( ) LassoEcp* lasso_ecp_new ( LassoServer* server ) lasso_error_t lasso_ecp_process_authn_request_msg ( LassoEcp* ecp, const char* authn_request_msg ) lasso_error_t lasso_ecp_process_response_msg ( LassoEcp* ecp, const char* response_msg ) None lasso_federation_build_local_name_identifier ( LassoFederation* federation, const gchar* nameQualifier, const gchar* format, const gchar* content ) None lasso_federation_destroy ( LassoFederation* federation ) GType lasso_federation_get_type ( ) LassoFederation* lasso_federation_new ( const gchar* remote_providerID ) gboolean lasso_federation_verify_name_identifier ( LassoFederation* federation, LassoNode* name_identifier ) char* lasso_get_prefix_for_dst_service_href ( const char* href ) gchar* lasso_get_prefix_for_idwsf2_dst_service_href ( const gchar* href ) None lasso_identity_destroy ( LassoIdentity* identity ) gchar* lasso_identity_dump ( LassoIdentity* identity ) LassoFederation* lasso_identity_get_federation ( LassoIdentity* identity, const char* providerID ) GType lasso_identity_get_type ( ) LassoIdentity* lasso_identity_new ( ) LassoIdentity* lasso_identity_new_from_dump ( const gchar* dump ) lasso_error_t lasso_init ( ) lasso_error_t lasso_lecp_build_authn_request_envelope_msg ( LassoLecp* lecp ) lasso_error_t lasso_lecp_build_authn_request_msg ( LassoLecp* lecp ) lasso_error_t lasso_lecp_build_authn_response_envelope_msg ( LassoLecp* lecp ) lasso_error_t lasso_lecp_build_authn_response_msg ( LassoLecp* lecp ) None lasso_lecp_destroy ( LassoLecp* lecp ) GType lasso_lecp_get_type ( ) lasso_error_t lasso_lecp_init_authn_request ( LassoLecp* lecp, const char* remote_providerID ) LassoLecp* lasso_lecp_new ( LassoServer* server ) lasso_error_t lasso_lecp_process_authn_request_envelope_msg ( LassoLecp* lecp, const char* request_msg ) lasso_error_t lasso_lecp_process_authn_request_msg ( LassoLecp* lecp, const char* authn_request_msg ) lasso_error_t lasso_lecp_process_authn_response_envelope_msg ( LassoLecp* lecp, const char* response_msg ) GType lasso_lib_assertion_get_type ( ) LassoLibAssertion* lasso_lib_assertion_new ( ) LassoLibAssertion* lasso_lib_assertion_new_full ( const char* issuer, const char* requestID, const char* audience, const char* notBefore, const char* notOnOrAfter ) GType lasso_lib_authentication_statement_get_type ( ) LassoLibAuthenticationStatement* lasso_lib_authentication_statement_new ( ) LassoLibAuthenticationStatement* lasso_lib_authentication_statement_new_full ( const char* authenticationMethod, const char* authenticationInstant, const char* reauthenticateOnOrAfter, LassoSamlNameIdentifier* sp_identifier, LassoSamlNameIdentifier* idp_identifier ) GType lasso_lib_authn_context_get_type ( ) LassoNode* lasso_lib_authn_context_new ( ) GType lasso_lib_authn_request_envelope_get_type ( ) LassoLibAuthnRequestEnvelope* lasso_lib_authn_request_envelope_new ( ) LassoLibAuthnRequestEnvelope* lasso_lib_authn_request_envelope_new_full ( LassoLibAuthnRequest* authnRequest, char* providerID, char* assertionConsumerServiceURL ) GType lasso_lib_authn_request_get_type ( ) LassoLibAuthnRequest* lasso_lib_authn_request_new ( ) GType lasso_lib_authn_response_envelope_get_type ( ) LassoLibAuthnResponseEnvelope* lasso_lib_authn_response_envelope_new ( LassoLibAuthnResponse* response, char* assertionConsumerServiceURL ) GType lasso_lib_authn_response_get_type ( ) LassoNode* lasso_lib_authn_response_new ( char* providerID, LassoLibAuthnRequest* request ) GType lasso_lib_federation_termination_notification_get_type ( ) LassoNode* lasso_lib_federation_termination_notification_new ( ) LassoNode* lasso_lib_federation_termination_notification_new_full ( char* providerID, LassoSamlNameIdentifier* nameIdentifier, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_idp_entries_get_type ( ) LassoNode* lasso_lib_idp_entries_new ( ) GType lasso_lib_idp_entry_get_type ( ) LassoNode* lasso_lib_idp_entry_new ( ) GType lasso_lib_idp_list_get_type ( ) LassoNode* lasso_lib_idp_list_new ( ) GType lasso_lib_logout_request_get_type ( ) LassoNode* lasso_lib_logout_request_new ( ) LassoNode* lasso_lib_logout_request_new_full ( char* providerID, LassoSamlNameIdentifier* nameIdentifier, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_logout_response_get_type ( ) LassoNode* lasso_lib_logout_response_new ( ) LassoNode* lasso_lib_logout_response_new_full ( char* providerID, const char* statusCodeValue, LassoLibLogoutRequest* request, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_name_identifier_mapping_request_get_type ( ) LassoNode* lasso_lib_name_identifier_mapping_request_new ( ) LassoNode* lasso_lib_name_identifier_mapping_request_new_full ( char* providerID, LassoSamlNameIdentifier* nameIdentifier, const char* targetNamespace, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_name_identifier_mapping_response_get_type ( ) LassoNode* lasso_lib_name_identifier_mapping_response_new ( ) LassoNode* lasso_lib_name_identifier_mapping_response_new_full ( char* provideRID, const char* statusCodeValue, LassoLibNameIdentifierMappingRequest* request, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_register_name_identifier_request_get_type ( ) LassoNode* lasso_lib_register_name_identifier_request_new ( ) LassoNode* lasso_lib_register_name_identifier_request_new_full ( const char* providerID, LassoSamlNameIdentifier* idpNameIdentifier, LassoSamlNameIdentifier* spNameIdentifier, LassoSamlNameIdentifier* oldNameIdentifier, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_register_name_identifier_response_get_type ( ) LassoNode* lasso_lib_register_name_identifier_response_new ( ) LassoNode* lasso_lib_register_name_identifier_response_new_full ( const char* providerID, const char* statusCodeValue, LassoLibRegisterNameIdentifierRequest* request, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_request_authn_context_get_type ( ) LassoLibRequestAuthnContext* lasso_lib_request_authn_context_new ( ) GType lasso_lib_scoping_get_type ( ) LassoLibScoping* lasso_lib_scoping_new ( ) GType lasso_lib_status_response_get_type ( ) LassoNode* lasso_lib_status_response_new ( ) GType lasso_lib_subject_get_type ( ) LassoLibSubject* lasso_lib_subject_new ( ) lasso_error_t lasso_login_accept_sso ( LassoLogin* login ) lasso_error_t lasso_login_build_artifact_msg ( LassoLogin* login, LassoHttpMethod http_method ) lasso_error_t lasso_login_build_assertion ( LassoLogin* login, const char* authenticationMethod, const char* authenticationInstant, const char* reauthenticateOnOrAfter, const char* notBefore, const char* notOnOrAfter ) lasso_error_t lasso_login_build_authn_request_msg ( LassoLogin* login ) lasso_error_t lasso_login_build_authn_response_msg ( LassoLogin* login ) lasso_error_t lasso_login_build_request_msg ( LassoLogin* login ) lasso_error_t lasso_login_build_response_msg ( LassoLogin* login, gchar* remote_providerID ) None lasso_login_destroy ( LassoLogin* login ) gchar* lasso_login_dump ( LassoLogin* login ) LassoNode* lasso_login_get_assertion ( LassoLogin* login ) GType lasso_login_get_type ( ) lasso_error_t lasso_login_init_authn_request ( LassoLogin* login, const gchar* remote_providerID, LassoHttpMethod http_method ) lasso_error_t lasso_login_init_idp_initiated_authn_request ( LassoLogin* login, const gchar* remote_providerID ) lasso_error_t lasso_login_init_request ( LassoLogin* login, gchar* response_msg, LassoHttpMethod response_http_method ) gboolean lasso_login_must_ask_for_consent ( LassoLogin* login ) gboolean lasso_login_must_authenticate ( LassoLogin* login ) LassoLogin* lasso_login_new ( LassoServer* server ) LassoLogin* lasso_login_new_from_dump ( LassoServer* server, const gchar* dump ) lasso_error_t lasso_login_process_authn_request_msg ( LassoLogin* login, const char* authn_request_msg ) lasso_error_t lasso_login_process_authn_response_msg ( LassoLogin* login, gchar* authn_response_msg ) lasso_error_t lasso_login_process_paos_response_msg ( LassoLogin* login, gchar* msg ) lasso_error_t lasso_login_process_request_msg ( LassoLogin* login, gchar* request_msg ) lasso_error_t lasso_login_process_response_msg ( LassoLogin* login, gchar* response_msg ) lasso_error_t lasso_login_validate_request_msg ( LassoLogin* login, gboolean authentication_result, gboolean is_consent_obtained ) lasso_error_t lasso_logout_build_request_msg ( LassoLogout* logout ) lasso_error_t lasso_logout_build_response_msg ( LassoLogout* logout ) None lasso_logout_destroy ( LassoLogout* logout ) gchar* lasso_logout_dump ( LassoLogout* logout ) gchar* lasso_logout_get_next_providerID ( LassoLogout* logout ) GType lasso_logout_get_type ( ) lasso_error_t lasso_logout_init_request ( LassoLogout* logout, gchar* remote_providerID, LassoHttpMethod request_method ) LassoLogout* lasso_logout_new ( LassoServer* server ) LassoLogout* lasso_logout_new_from_dump ( LassoServer* server, const gchar* dump ) lasso_error_t lasso_logout_process_request_msg ( LassoLogout* logout, gchar* request_msg ) lasso_error_t lasso_logout_process_response_msg ( LassoLogout* logout, gchar* response_msg ) lasso_error_t lasso_logout_reset_providerID_index ( LassoLogout* logout ) lasso_error_t lasso_logout_validate_request ( LassoLogout* logout ) GType lasso_misc_text_node_get_type ( ) xmlNode* lasso_misc_text_node_get_xml_content ( LassoMiscTextNode* misc_text_node ) LassoNode* lasso_misc_text_node_new ( ) LassoMiscTextNode* lasso_misc_text_node_new_with_string ( const char* content ) LassoMiscTextNode* lasso_misc_text_node_new_with_xml_node ( xmlNode* xml_node ) None lasso_misc_text_node_set_xml_content ( LassoMiscTextNode* misc_text_node, xmlNode* node ) lasso_error_t lasso_name_id_management_build_request_msg ( LassoNameIdManagement* name_id_management ) lasso_error_t lasso_name_id_management_build_response_msg ( LassoNameIdManagement* name_id_management ) None lasso_name_id_management_destroy ( LassoNameIdManagement* name_id_management ) char* lasso_name_id_management_dump ( LassoNameIdManagement* name_id_management ) GType lasso_name_id_management_get_type ( ) lasso_error_t lasso_name_id_management_init_request ( LassoNameIdManagement* name_id_management, char* remote_provider_id, char* new_name_id, LassoHttpMethod http_method ) LassoNameIdManagement* lasso_name_id_management_new ( LassoServer* server ) LassoNameIdManagement* lasso_name_id_management_new_from_dump ( LassoServer* server, const char* dump ) lasso_error_t lasso_name_id_management_process_request_msg ( LassoNameIdManagement* name_id_management, gchar* request_msg ) lasso_error_t lasso_name_id_management_process_response_msg ( LassoNameIdManagement* name_id_management, gchar* response_msg ) lasso_error_t lasso_name_id_management_validate_request ( LassoNameIdManagement* name_id_management ) lasso_error_t lasso_name_identifier_mapping_build_request_msg ( LassoNameIdentifierMapping* mapping ) lasso_error_t lasso_name_identifier_mapping_build_response_msg ( LassoNameIdentifierMapping* mapping ) None lasso_name_identifier_mapping_destroy ( LassoNameIdentifierMapping* mapping ) GType lasso_name_identifier_mapping_get_type ( ) lasso_error_t lasso_name_identifier_mapping_init_request ( LassoNameIdentifierMapping* mapping, gchar* targetNamespace, gchar* remote_providerID ) LassoNameIdentifierMapping* lasso_name_identifier_mapping_new ( LassoServer* server ) lasso_error_t lasso_name_identifier_mapping_process_request_msg ( LassoNameIdentifierMapping* mapping, gchar* request_msg ) lasso_error_t lasso_name_identifier_mapping_process_response_msg ( LassoNameIdentifierMapping* mapping, gchar* response_msg ) lasso_error_t lasso_name_identifier_mapping_validate_request ( LassoNameIdentifierMapping* mapping ) lasso_error_t lasso_name_registration_build_request_msg ( LassoNameRegistration* name_registration ) lasso_error_t lasso_name_registration_build_response_msg ( LassoNameRegistration* name_registration ) None lasso_name_registration_destroy ( LassoNameRegistration* name_registration ) gchar* lasso_name_registration_dump ( LassoNameRegistration* name_registration ) GType lasso_name_registration_get_type ( ) lasso_error_t lasso_name_registration_init_request ( LassoNameRegistration* name_registration, char* remote_providerID, LassoHttpMethod http_method ) LassoNameRegistration* lasso_name_registration_new ( LassoServer* server ) LassoNameRegistration* lasso_name_registration_new_from_dump ( LassoServer* server, const char* dump ) lasso_error_t lasso_name_registration_process_request_msg ( LassoNameRegistration* name_registration, gchar* request_msg ) lasso_error_t lasso_name_registration_process_response_msg ( LassoNameRegistration* name_registration, gchar* response_msg ) lasso_error_t lasso_name_registration_validate_request ( LassoNameRegistration* name_registration ) None lasso_node_cleanup_original_xmlnodes ( LassoNode* node ) char* lasso_node_debug ( LassoNode* node, int level ) None lasso_node_destroy ( LassoNode* node ) char* lasso_node_dump ( LassoNode* node ) char* lasso_node_export_to_base64 ( LassoNode* node ) char* lasso_node_export_to_ecp_soap_response ( LassoNode* node, const char* assertionConsumerURL ) char* lasso_node_export_to_paos_request ( LassoNode* node, const char* issuer, const char* responseConsumerURL, const char* relay_state ) char* lasso_node_export_to_query ( LassoNode* node, LassoSignatureMethod sign_method, const char* private_key_file ) char* lasso_node_export_to_query_with_password ( LassoNode* node, LassoSignatureMethod sign_method, const char* private_key_file, const char* private_key_file_password ) char* lasso_node_export_to_soap ( LassoNode* node ) gchar* lasso_node_export_to_xml ( LassoNode* node ) const char* lasso_node_get_name ( LassoNode* node ) const char* lasso_node_get_namespace ( LassoNode* node ) xmlNode* lasso_node_get_original_xmlnode ( LassoNode* node ) GType lasso_node_get_type ( ) xmlNode* lasso_node_get_xmlNode ( LassoNode* node, gboolean lasso_dump ) LassoMessageFormat lasso_node_init_from_message ( LassoNode* node, const char* message ) gboolean lasso_node_init_from_query ( LassoNode* node, const char* query ) lasso_error_t lasso_node_init_from_xml ( LassoNode* node, xmlNode* xmlnode ) LassoNode* lasso_node_new ( ) LassoNode* lasso_node_new_from_dump ( const char* dump ) LassoNode* lasso_node_new_from_soap ( const char* soap ) LassoNode* lasso_node_new_from_xmlNode ( xmlNode* node ) None lasso_node_set_custom_namespace ( LassoNode* node, const char* prefix, const char* href ) None lasso_node_set_custom_nodename ( LassoNode* node, const char* nodename ) None lasso_node_set_original_xmlnode ( LassoNode* node, xmlNode* xmlnode ) char* lasso_profile_get_artifact ( LassoProfile* profile ) char* lasso_profile_get_artifact_message ( LassoProfile* profile ) LassoIdentity* lasso_profile_get_identity ( LassoProfile* profile ) LassoNode* lasso_profile_get_nameIdentifier ( LassoProfile* profile ) LassoRequestType lasso_profile_get_request_type_from_soap_msg ( const gchar* soap ) LassoSession* lasso_profile_get_session ( LassoProfile* profile ) LassoProfileSignatureHint lasso_profile_get_signature_hint ( LassoProfile* profile ) lasso_error_t lasso_profile_get_signature_status ( LassoProfile* profile ) LassoProfileSignatureVerifyHint lasso_profile_get_signature_verify_hint ( LassoProfile* profile ) GType lasso_profile_get_type ( ) gboolean lasso_profile_is_identity_dirty ( LassoProfile* profile ) gboolean lasso_profile_is_liberty_query ( const gchar* query ) gboolean lasso_profile_is_saml_query ( const gchar* query ) gboolean lasso_profile_is_session_dirty ( LassoProfile* profile ) None lasso_profile_set_artifact_message ( LassoProfile* profile, const char* message ) lasso_error_t lasso_profile_set_identity_from_dump ( LassoProfile* profile, const gchar* dump ) lasso_error_t lasso_profile_set_session_from_dump ( LassoProfile* profile, const gchar* dump ) None lasso_profile_set_signature_hint ( LassoProfile* profile, LassoProfileSignatureHint signature_hint ) None lasso_profile_set_signature_verify_hint ( LassoProfile* profile, LassoProfileSignatureVerifyHint signature_verify_hint ) lasso_error_t lasso_profile_set_soap_fault_response ( LassoProfile* profile, const char* faultcode, const char* faultstring, GList* details ) LassoProviderRole lasso_profile_sso_role_with ( LassoProfile* profile, const char* remote_provider_id ) gboolean lasso_provider_accept_http_method ( LassoProvider* provider, LassoProvider* remote_provider, LassoMdProtocolType protocol_type, LassoHttpMethod http_method, gboolean initiate_profile ) gchar* lasso_provider_get_assertion_consumer_service_url ( LassoProvider* provider, const char* service_id ) gchar* lasso_provider_get_base64_succinct_id ( const LassoProvider* provider ) char* lasso_provider_get_cache_duration ( LassoProvider* provider ) gchar* lasso_provider_get_default_name_id_format ( LassoProvider* provider ) LassoEncryptionMode lasso_provider_get_encryption_mode ( LassoProvider* provider ) LassoHttpMethod lasso_provider_get_first_http_method ( LassoProvider* provider, LassoProvider* remote_provider, LassoMdProtocolType protocol_type ) GList* lasso_provider_get_idp_supported_attributes ( LassoProvider* provider ) GList* lasso_provider_get_metadata_keys_for_role ( LassoProvider* provider, LassoProviderRole role ) GList* lasso_provider_get_metadata_list ( LassoProvider* provider, const char* name ) GList* lasso_provider_get_metadata_list_for_role ( const LassoProvider* provider, LassoProviderRole role, const char* name ) gchar* lasso_provider_get_metadata_one ( LassoProvider* provider, const char* name ) char* lasso_provider_get_metadata_one_for_role ( LassoProvider* provider, LassoProviderRole role, const char* name ) xmlNode* lasso_provider_get_organization ( const LassoProvider* provider ) LassoProtocolConformance lasso_provider_get_protocol_conformance ( const LassoProvider* provider ) LassoProviderRole lasso_provider_get_roles ( LassoProvider* provider ) const char* lasso_provider_get_sp_name_qualifier ( LassoProvider* provider ) GType lasso_provider_get_type ( ) char* lasso_provider_get_valid_until ( LassoProvider* provider ) gboolean lasso_provider_has_protocol_profile ( LassoProvider* provider, LassoMdProtocolType protocol_type, const char* protocol_profile ) gboolean lasso_provider_match_conformance ( LassoProvider* provider, LassoProvider* another_provider ) LassoProvider* lasso_provider_new ( LassoProviderRole role, const char* metadata, const char* public_key, const char* ca_cert_chain ) LassoProvider* lasso_provider_new_from_buffer ( LassoProviderRole role, const char* metadata, const char* public_key, const char* ca_cert_chain ) LassoProvider* lasso_provider_new_from_dump ( const gchar* dump ) LassoSaml2EncryptedElement* lasso_provider_saml2_node_encrypt ( const LassoProvider* provider, LassoNode* lasso_node ) None lasso_provider_set_encryption_mode ( LassoProvider* provider, LassoEncryptionMode encryption_mode ) None lasso_provider_set_encryption_sym_key_type ( LassoProvider* provider, LassoEncryptionSymKeyType encryption_sym_key_type ) lasso_error_t lasso_provider_verify_single_node_signature ( LassoProvider* provider, LassoNode* node, const char* id_attr_name ) None lasso_register_dst_service ( const char* prefix, const char* href ) None lasso_register_idwsf2_dst_service ( const gchar* prefix, const gchar* href ) GType lasso_saml2_action_get_type ( ) LassoNode* lasso_saml2_action_new ( ) LassoNode* lasso_saml2_action_new_with_string ( char* content ) GType lasso_saml2_advice_get_type ( ) LassoNode* lasso_saml2_advice_new ( ) lasso_error_t lasso_saml2_assertion_add_attribute_with_node ( LassoSaml2Assertion* assertion, const char* name, const char* nameformat, LassoNode* content ) None lasso_saml2_assertion_add_audience_restriction ( LassoSaml2Assertion* saml2_assertion, const char* providerID ) None lasso_saml2_assertion_add_proxy_limit ( LassoSaml2Assertion* saml2_assertion, int proxy_count, GList* proxy_audiences ) LassoSaml2AssertionValidationState lasso_saml2_assertion_allows_proxying ( LassoSaml2Assertion* saml2_assertion ) LassoSaml2AssertionValidationState lasso_saml2_assertion_allows_proxying_to ( LassoSaml2Assertion* saml2_assertion, const char* audience ) lasso_error_t lasso_saml2_assertion_decrypt_subject ( LassoSaml2Assertion* assertion, LassoServer* server ) const char* lasso_saml2_assertion_get_in_response_to ( LassoSaml2Assertion* assertion ) LassoProvider* lasso_saml2_assertion_get_issuer_provider ( const LassoSaml2Assertion* saml2_assertion, const LassoServer* server ) LassoSaml2SubjectConfirmationData* lasso_saml2_assertion_get_subject_confirmation_data ( LassoSaml2Assertion* saml2_assertion, gboolean create ) GType lasso_saml2_assertion_get_type ( ) gboolean lasso_saml2_assertion_has_audience_restriction ( LassoSaml2Assertion* saml2_assertion ) gboolean lasso_saml2_assertion_has_one_time_use ( LassoSaml2Assertion* saml2_assertion ) gboolean lasso_saml2_assertion_is_audience_restricted ( LassoSaml2Assertion* saml2_assertion, char* providerID ) LassoNode* lasso_saml2_assertion_new ( ) None lasso_saml2_assertion_set_basic_conditions ( LassoSaml2Assertion* saml2_assertion, time_t tolerance, time_t length, gboolean one_time_use ) None lasso_saml2_assertion_set_one_time_use ( LassoSaml2Assertion* saml2_assertion, gboolean one_time_use ) None lasso_saml2_assertion_set_subject_confirmation_data ( LassoSaml2Assertion* saml2_assertion, time_t tolerance, time_t length, const char* Recipient, const char* InResponseTo, const char* Address ) None lasso_saml2_assertion_set_subject_confirmation_name_id ( LassoSaml2Assertion* saml2_assertion, LassoNode* node ) None lasso_saml2_assertion_set_subject_name_id ( LassoSaml2Assertion* saml2_assertion, LassoNode* node ) LassoSaml2AssertionValidationState lasso_saml2_assertion_validate_audience ( LassoSaml2Assertion* saml2_assertion, const gchar* audience ) LassoSaml2AssertionValidationState lasso_saml2_assertion_validate_conditions ( LassoSaml2Assertion* saml2_assertion, const char* relaying_party_providerID ) LassoSaml2AssertionValidationState lasso_saml2_assertion_validate_time_checks ( LassoSaml2Assertion* saml2_assertion, unsigned int tolerance, time_t now ) GType lasso_saml2_attribute_get_type ( ) LassoNode* lasso_saml2_attribute_new ( ) GType lasso_saml2_attribute_statement_get_type ( ) LassoNode* lasso_saml2_attribute_statement_new ( ) GType lasso_saml2_attribute_value_get_type ( ) LassoSaml2AttributeValue* lasso_saml2_attribute_value_new ( ) GType lasso_saml2_audience_restriction_get_type ( ) LassoNode* lasso_saml2_audience_restriction_new ( ) GType lasso_saml2_authn_context_get_type ( ) LassoNode* lasso_saml2_authn_context_new ( ) GType lasso_saml2_authn_statement_get_type ( ) LassoNode* lasso_saml2_authn_statement_new ( ) GType lasso_saml2_authz_decision_statement_get_type ( ) LassoNode* lasso_saml2_authz_decision_statement_new ( ) GType lasso_saml2_base_idabstract_get_type ( ) LassoNode* lasso_saml2_base_idabstract_new ( ) GType lasso_saml2_condition_abstract_get_type ( ) LassoNode* lasso_saml2_condition_abstract_new ( ) GType lasso_saml2_conditions_get_type ( ) LassoNode* lasso_saml2_conditions_new ( ) LassoSaml2EncryptedElement* lasso_saml2_encrypted_element_build_encrypted_persistent_name_id ( const char* id, const char* idpID, const LassoProvider* provider ) GType lasso_saml2_encrypted_element_get_type ( ) LassoNode* lasso_saml2_encrypted_element_new ( ) lasso_error_t lasso_saml2_encrypted_element_server_decrypt ( LassoSaml2EncryptedElement* encrypted_element, LassoServer* server, LassoNode** decrypted_node ) GType lasso_saml2_evidence_get_type ( ) LassoNode* lasso_saml2_evidence_new ( ) GType lasso_saml2_key_info_confirmation_data_get_type ( ) LassoNode* lasso_saml2_key_info_confirmation_data_new ( ) LassoSaml2NameID* lasso_saml2_name_id_build_persistent ( const char* id, const char* idpID, const char* providerID ) gboolean lasso_saml2_name_id_equals ( LassoSaml2NameID* name_id, LassoSaml2NameID* other_name_id ) GType lasso_saml2_name_id_get_type ( ) LassoNode* lasso_saml2_name_id_new ( ) LassoSaml2NameID* lasso_saml2_name_id_new_with_persistent_format ( const char* id, const char* idpID, const char* providerID ) LassoNode* lasso_saml2_name_id_new_with_string ( char* content ) GType lasso_saml2_one_time_use_get_type ( ) LassoNode* lasso_saml2_one_time_use_new ( ) GType lasso_saml2_proxy_restriction_get_type ( ) LassoNode* lasso_saml2_proxy_restriction_new ( ) GType lasso_saml2_statement_abstract_get_type ( ) LassoNode* lasso_saml2_statement_abstract_new ( ) GType lasso_saml2_subject_confirmation_data_get_type ( ) LassoNode* lasso_saml2_subject_confirmation_data_new ( ) GType lasso_saml2_subject_confirmation_get_type ( ) LassoNode* lasso_saml2_subject_confirmation_new ( ) GType lasso_saml2_subject_get_type ( ) GType lasso_saml2_subject_locality_get_type ( ) LassoNode* lasso_saml2_subject_locality_new ( ) LassoNode* lasso_saml2_subject_new ( ) GType lasso_saml_advice_get_type ( ) LassoNode* lasso_saml_advice_new ( ) GType lasso_saml_assertion_get_type ( ) LassoSamlAssertion* lasso_saml_assertion_new ( ) GType lasso_saml_attribute_designator_get_type ( ) LassoNode* lasso_saml_attribute_designator_new ( ) GType lasso_saml_attribute_get_type ( ) LassoSamlAttribute* lasso_saml_attribute_new ( ) GType lasso_saml_attribute_statement_get_type ( ) LassoSamlAttributeStatement* lasso_saml_attribute_statement_new ( ) GType lasso_saml_attribute_value_get_type ( ) LassoSamlAttributeValue* lasso_saml_attribute_value_new ( ) GType lasso_saml_audience_restriction_condition_get_type ( ) LassoSamlAudienceRestrictionCondition* lasso_saml_audience_restriction_condition_new ( ) LassoSamlAudienceRestrictionCondition* lasso_saml_audience_restriction_condition_new_full ( const char* audience ) GType lasso_saml_authentication_statement_get_type ( ) LassoNode* lasso_saml_authentication_statement_new ( ) GType lasso_saml_authority_binding_get_type ( ) LassoNode* lasso_saml_authority_binding_new ( ) GType lasso_saml_condition_abstract_get_type ( ) GType lasso_saml_conditions_get_type ( ) LassoSamlConditions* lasso_saml_conditions_new ( ) GType lasso_saml_name_identifier_get_type ( ) LassoSamlNameIdentifier* lasso_saml_name_identifier_new ( ) LassoSamlNameIdentifier* lasso_saml_name_identifier_new_from_xmlNode ( xmlNode* xmlnode ) GType lasso_saml_statement_abstract_get_type ( ) GType lasso_saml_subject_confirmation_get_type ( ) LassoSamlSubjectConfirmation* lasso_saml_subject_confirmation_new ( ) GType lasso_saml_subject_get_type ( ) GType lasso_saml_subject_locality_get_type ( ) LassoNode* lasso_saml_subject_locality_new ( ) LassoNode* lasso_saml_subject_new ( ) GType lasso_saml_subject_statement_abstract_get_type ( ) GType lasso_saml_subject_statement_get_type ( ) LassoNode* lasso_saml_subject_statement_new ( ) GType lasso_samlp2_artifact_resolve_get_type ( ) LassoNode* lasso_samlp2_artifact_resolve_new ( ) GType lasso_samlp2_artifact_response_get_type ( ) LassoNode* lasso_samlp2_artifact_response_new ( ) GType lasso_samlp2_assertion_id_request_get_type ( ) LassoNode* lasso_samlp2_assertion_id_request_new ( ) GType lasso_samlp2_attribute_query_get_type ( ) LassoNode* lasso_samlp2_attribute_query_new ( ) GType lasso_samlp2_authn_query_get_type ( ) LassoNode* lasso_samlp2_authn_query_new ( ) GType lasso_samlp2_authn_request_get_type ( ) LassoNode* lasso_samlp2_authn_request_new ( ) GType lasso_samlp2_authz_decision_query_get_type ( ) LassoNode* lasso_samlp2_authz_decision_query_new ( ) GType lasso_samlp2_extensions_get_type ( ) LassoNode* lasso_samlp2_extensions_new ( ) GType lasso_samlp2_idp_entry_get_type ( ) LassoNode* lasso_samlp2_idp_entry_new ( ) GType lasso_samlp2_idp_list_get_type ( ) LassoNode* lasso_samlp2_idp_list_new ( ) GList* lasso_samlp2_logout_request_get_session_indexes ( LassoSamlp2LogoutRequest* logout_request ) GType lasso_samlp2_logout_request_get_type ( ) LassoNode* lasso_samlp2_logout_request_new ( ) None lasso_samlp2_logout_request_set_session_indexes ( LassoSamlp2LogoutRequest* logout_request, GList* session_index ) GType lasso_samlp2_logout_response_get_type ( ) LassoNode* lasso_samlp2_logout_response_new ( ) GType lasso_samlp2_manage_name_id_request_get_type ( ) LassoNode* lasso_samlp2_manage_name_id_request_new ( ) GType lasso_samlp2_manage_name_id_response_get_type ( ) LassoNode* lasso_samlp2_manage_name_id_response_new ( ) GType lasso_samlp2_name_id_mapping_request_get_type ( ) LassoNode* lasso_samlp2_name_id_mapping_request_new ( ) GType lasso_samlp2_name_id_mapping_response_get_type ( ) LassoNode* lasso_samlp2_name_id_mapping_response_new ( ) GType lasso_samlp2_name_id_policy_get_type ( ) LassoNode* lasso_samlp2_name_id_policy_new ( ) GType lasso_samlp2_request_abstract_get_type ( ) LassoNode* lasso_samlp2_request_abstract_new ( ) GType lasso_samlp2_requested_authn_context_get_type ( ) LassoNode* lasso_samlp2_requested_authn_context_new ( ) GType lasso_samlp2_response_get_type ( ) LassoNode* lasso_samlp2_response_new ( ) GType lasso_samlp2_scoping_get_type ( ) LassoNode* lasso_samlp2_scoping_new ( ) GType lasso_samlp2_status_code_get_type ( ) LassoNode* lasso_samlp2_status_code_new ( ) GType lasso_samlp2_status_detail_get_type ( ) LassoNode* lasso_samlp2_status_detail_new ( ) GType lasso_samlp2_status_get_type ( ) LassoNode* lasso_samlp2_status_new ( ) GType lasso_samlp2_status_response_get_type ( ) LassoNode* lasso_samlp2_status_response_new ( ) GType lasso_samlp2_subject_query_abstract_get_type ( ) LassoNode* lasso_samlp2_subject_query_abstract_new ( ) GType lasso_samlp2_terminate_get_type ( ) LassoNode* lasso_samlp2_terminate_new ( ) GType lasso_samlp_request_abstract_get_type ( ) GType lasso_samlp_request_get_type ( ) LassoNode* lasso_samlp_request_new ( ) None lasso_samlp_response_abstract_fill ( LassoSamlpResponseAbstract* response, const char* InResponseTo, const char* Recipient ) GType lasso_samlp_response_abstract_get_type ( ) GType lasso_samlp_response_get_type ( ) LassoNode* lasso_samlp_response_new ( ) GType lasso_samlp_status_code_get_type ( ) LassoSamlpStatusCode* lasso_samlp_status_code_new ( ) GType lasso_samlp_status_get_type ( ) LassoSamlpStatus* lasso_samlp_status_new ( ) lasso_error_t lasso_server_add_provider ( LassoServer* server, LassoProviderRole role, const gchar* metadata, const gchar* public_key, const gchar* ca_cert_chain ) lasso_error_t lasso_server_add_provider_from_buffer ( LassoServer* server, LassoProviderRole role, const gchar* metadata, const gchar* public_key, const gchar* ca_cert_chain ) None lasso_server_destroy ( LassoServer* server ) gchar* lasso_server_dump ( LassoServer* server ) LassoProvider* lasso_server_get_provider ( const LassoServer* server, const gchar* providerID ) GType lasso_server_get_type ( ) lasso_error_t lasso_server_load_affiliation ( LassoServer* server, const gchar* filename ) LassoServer* lasso_server_new ( const gchar* metadata, const gchar* private_key, const gchar* private_key_password, const gchar* certificate ) LassoServer* lasso_server_new_from_buffers ( const gchar* metadata, const gchar* private_key_content, const gchar* private_key_password, const gchar* certificate_content ) LassoServer* lasso_server_new_from_dump ( const gchar* dump ) lasso_error_t lasso_server_saml2_assertion_setup_signature ( LassoServer* server, LassoSaml2Assertion* saml2_assertion ) lasso_error_t lasso_server_set_encryption_private_key ( LassoServer* server, const gchar* filename_or_buffer ) lasso_error_t lasso_server_set_encryption_private_key_with_password ( LassoServer* server, const gchar* filename_or_buffer, const gchar* password ) lasso_error_t lasso_session_add_assertion ( LassoSession* session, const char* providerID, LassoNode* assertion ) None lasso_session_destroy ( LassoSession* session ) gchar* lasso_session_dump ( LassoSession* session ) LassoNode* lasso_session_get_assertion ( LassoSession* session, const gchar* providerID ) GList* lasso_session_get_assertions ( LassoSession* session, const char* provider_id ) gchar* lasso_session_get_provider_index ( LassoSession* session, gint index ) GType lasso_session_get_type ( ) gboolean lasso_session_is_empty ( LassoSession* session ) LassoSession* lasso_session_new ( ) LassoSession* lasso_session_new_from_dump ( const gchar* dump ) lasso_error_t lasso_session_remove_assertion ( LassoSession* session, const gchar* providerID ) None lasso_set_flag ( char* flag ) lasso_error_t lasso_shutdown ( ) GType lasso_soap_body_get_type ( ) LassoSoapBody* lasso_soap_body_new ( ) LassoSoapBody* lasso_soap_body_new_from_message ( const gchar* message ) GType lasso_soap_detail_get_type ( ) LassoSoapDetail* lasso_soap_detail_new ( ) LassoSoapDetail* lasso_soap_detail_new_from_message ( const gchar* message ) GType lasso_soap_envelope_get_type ( ) LassoSoapEnvelope* lasso_soap_envelope_new ( LassoSoapBody* body ) LassoSoapEnvelope* lasso_soap_envelope_new_from_message ( const gchar* message ) GType lasso_soap_fault_get_type ( ) LassoSoapFault* lasso_soap_fault_new ( ) LassoSoapFault* lasso_soap_fault_new_from_message ( const gchar* message ) LassoSoapFault* lasso_soap_fault_new_full ( const char* faultcode, const char* faultstring ) GType lasso_soap_header_get_type ( ) LassoSoapHeader* lasso_soap_header_new ( ) LassoSoapHeader* lasso_soap_header_new_from_message ( const gchar* message ) const char* lasso_strerror ( int error_code ) lasso-2.8.2/abi/PaxHeaders/abi-2.4.00000644000000000000000000000013113766621500013577 xustar0029 mtime=1608196928.71889494 30 atime=1678098069.993489071 30 ctime=1678814319.933947183 lasso-2.8.2/abi/abi-2.4.00000644000175000017500000022045413766621500017057 0ustar00bdauvergnebdauvergne00000000000000BACKWARD_COMP_H LASSO_ASSERTION_QUERY_ERROR_ATTRIBUTE_REQUEST_ALREADY_EXIST LASSO_ASSERTION_QUERY_ERROR_NOT_AN_ATTRIBUTE_QUERY LASSO_ASSERTION_QUERY_REQUEST_TYPE_ASSERTION_ID LASSO_ASSERTION_QUERY_REQUEST_TYPE_ATTRIBUTE LASSO_ASSERTION_QUERY_REQUEST_TYPE_AUTHN LASSO_ASSERTION_QUERY_REQUEST_TYPE_AUTHZ_DECISION LASSO_ASSERTION_QUERY_REQUEST_TYPE_LAST LASSO_ASSERTION_QUERY_REQUEST_TYPE_UNSET LASSO_CERTIFICATE_ATTRIBUTE LASSO_CHECK_VERSIONABI_COMPATIBLE LASSO_CHECK_VERSION_EXACT LASSO_CHECK_VERSION_NUMERIC LASSO_DATA_SERVICE_ERROR_CANNOT_ADD_ITEM LASSO_DATA_SERVICE_ERROR_UNREGISTERED_DST LASSO_DEFEDERATION_ERROR_MISSING_NAME_IDENTIFIER LASSO_DISCOVERY_ERROR_FAILED_TO_BUILD_ENDPOINT_REFERENCE LASSO_DISCOVERY_ERROR_MISSING_REQUESTED_SERVICE LASSO_DISCOVERY_ERROR_SVC_METADATA_ASSOCIATION_ADD_FAILED LASSO_DISCOVERY_ERROR_SVC_METADATA_REGISTER_FAILED LASSO_DST_ERROR_EMPTY_REQUEST LASSO_DST_ERROR_MALFORMED_QUERY LASSO_DST_ERROR_MISSING_SERVICE_DATA LASSO_DST_ERROR_MODIFY_FAILED LASSO_DST_ERROR_MODIFY_PARTIALLY_FAILED LASSO_DST_ERROR_NEW_DATA_MISSING LASSO_DST_ERROR_NO_DATA LASSO_DST_ERROR_QUERY_FAILED LASSO_DST_ERROR_QUERY_NOT_FOUND LASSO_DST_ERROR_QUERY_PARTIALLY_FAILED LASSO_DS_ERROR_CA_CERT_CHAIN_LOAD_FAILED LASSO_DS_ERROR_CERTIFICATE_LOAD_FAILED LASSO_DS_ERROR_CONTEXT_CREATION_FAILED LASSO_DS_ERROR_DECRYPTION_FAILED LASSO_DS_ERROR_DECRYPTION_FAILED_MISSING_PRIVATE_KEY LASSO_DS_ERROR_DIGEST_COMPUTE_FAILED LASSO_DS_ERROR_ENCRYPTION_FAILED LASSO_DS_ERROR_INVALID_REFERENCE_FOR_SAML LASSO_DS_ERROR_INVALID_SIGALG LASSO_DS_ERROR_INVALID_SIGNATURE LASSO_DS_ERROR_KEYS_MNGR_CREATION_FAILED LASSO_DS_ERROR_KEYS_MNGR_INIT_FAILED LASSO_DS_ERROR_PRIVATE_KEY_LOAD_FAILED LASSO_DS_ERROR_PUBLIC_KEY_LOAD_FAILED LASSO_DS_ERROR_SIGNATURE_FAILED LASSO_DS_ERROR_SIGNATURE_NOT_FOUND LASSO_DS_ERROR_SIGNATURE_TEMPLATE_NOT_FOUND LASSO_DS_ERROR_SIGNATURE_TMPL_CREATION_FAILED LASSO_DS_ERROR_SIGNATURE_VERIFICATION_FAILED LASSO_DS_ERROR_TOO_MUCH_REFERENCES LASSO_DS_HREF LASSO_DS_PREFIX LASSO_DURATION_DAY LASSO_DURATION_HOUR LASSO_DURATION_MINUTE LASSO_DURATION_WEEK LASSO_ECP_HREF LASSO_ECP_PREFIX LASSO_ENCRYPTION_MODE_ASSERTION LASSO_ENCRYPTION_MODE_NAMEID LASSO_ENCRYPTION_MODE_NONE LASSO_ENCRYPTION_SYM_KEY_TYPE_3DES LASSO_ENCRYPTION_SYM_KEY_TYPE_AES_128 LASSO_ENCRYPTION_SYM_KEY_TYPE_AES_256 LASSO_ENCRYPTION_SYM_KEY_TYPE_DEFAULT LASSO_ENCRYTPION_SYM_KEY_TYPE_LAST LASSO_ERROR_CAST_FAILED LASSO_ERROR_OUT_OF_MEMORY LASSO_ERROR_UNDEFINED LASSO_ERROR_UNIMPLEMENTED LASSO_HTTP_METHOD_ANY LASSO_HTTP_METHOD_ARTIFACT_GET LASSO_HTTP_METHOD_ARTIFACT_POST LASSO_HTTP_METHOD_GET LASSO_HTTP_METHOD_IDP_INITIATED LASSO_HTTP_METHOD_LAST LASSO_HTTP_METHOD_NONE LASSO_HTTP_METHOD_PAOS LASSO_HTTP_METHOD_POST LASSO_HTTP_METHOD_REDIRECT LASSO_HTTP_METHOD_SOAP LASSO_IDWSF2_DISCOVERY_ERROR_DUPLICATE LASSO_IDWSF2_DISCOVERY_ERROR_FAILED LASSO_IDWSF2_DISCOVERY_ERROR_FORBIDDEN LASSO_IDWSF2_DISCOVERY_ERROR_LOGICAL_DUPLICATE LASSO_IDWSF2_DISCOVERY_ERROR_NOT_FOUND LASSO_IDWSF2_DISCOVERY_ERROR_NO_RESULTS LASSO_IDWSF2_DST_ERROR_DUPLICATE_ITEM LASSO_IDWSF2_DST_ERROR_ITEM_NOT_FOUND LASSO_IDWSF2_DST_ERROR_PARTIAL_FAILURE LASSO_IDWSF2_DST_ERROR_UNKNOWN_STATUS_CODE LASSO_LASSO_HREF LASSO_LASSO_PREFIX LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_INTERNET_PROTOCOL LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_INTERNET_PROTOCOL_PASSWORD LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_ONE_FACTOR_CONTRACT LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_ONE_FACTOR_UNREGISTERED LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_TWO_FACTOR_CONTRACT LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_TWO_FACTOR_UNREGISTERED LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PASSWORD LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PASSWORD_PROTECTED_TRANSPORT LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PREVIOUS_SESSION LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SMARTCARD LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SMARTCARD_PKI LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SOFTWARE_PKI LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_TIME_SYNC_TOKEN LASSO_LIB_AUTHN_CONTEXT_COMPARISON_BETTER LASSO_LIB_AUTHN_CONTEXT_COMPARISON_EXACT LASSO_LIB_AUTHN_CONTEXT_COMPARISON_MAXIMUM LASSO_LIB_AUTHN_CONTEXT_COMPARISON_MINIMUM LASSO_LIB_CONSENT_INAPPLICABLE LASSO_LIB_CONSENT_OBTAINED LASSO_LIB_CONSENT_OBTAINED_CURRENT_EXPLICIT LASSO_LIB_CONSENT_OBTAINED_CURRENT_IMPLICIT LASSO_LIB_CONSENT_OBTAINED_PRIOR LASSO_LIB_CONSENT_UNAVAILABLE LASSO_LIB_HREF LASSO_LIB_MAJOR_VERSION_N LASSO_LIB_MINOR_VERSION_N LASSO_LIB_NAMEID_POLICY_TYPE_ANY LASSO_LIB_NAMEID_POLICY_TYPE_FEDERATED LASSO_LIB_NAMEID_POLICY_TYPE_NONE LASSO_LIB_NAMEID_POLICY_TYPE_ONE_TIME LASSO_LIB_NAME_IDENTIFIER_FORMAT_ENCRYPTED LASSO_LIB_NAME_IDENTIFIER_FORMAT_ENTITYID LASSO_LIB_NAME_IDENTIFIER_FORMAT_FEDERATED LASSO_LIB_NAME_IDENTIFIER_FORMAT_ONE_TIME LASSO_LIB_PREFIX LASSO_LIB_PROTOCOL_PROFILE_BRWS_ART LASSO_LIB_PROTOCOL_PROFILE_BRWS_LECP LASSO_LIB_PROTOCOL_PROFILE_BRWS_POST LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_IDP_HTTP LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_IDP_SOAP LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_SP_SOAP LASSO_LIB_PROTOCOL_PROFILE_NIM_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_RNI_IDP_HTTP LASSO_LIB_PROTOCOL_PROFILE_RNI_IDP_SOAP LASSO_LIB_PROTOCOL_PROFILE_RNI_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_RNI_SP_SOAP LASSO_LIB_PROTOCOL_PROFILE_SLO_IDP_HTTP LASSO_LIB_PROTOCOL_PROFILE_SLO_IDP_SOAP LASSO_LIB_PROTOCOL_PROFILE_SLO_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_SLO_SP_SOAP LASSO_LIB_STATUS_CODE_FEDERATION_DOES_NOT_EXIST LASSO_LIB_STATUS_CODE_INVALID_ASSERTION_CONSUMER_SERVICE_INDEX LASSO_LIB_STATUS_CODE_INVALID_SIGNATURE LASSO_LIB_STATUS_CODE_NO_AUTHN_CONTEXT LASSO_LIB_STATUS_CODE_NO_AVAILABLEIDP LASSO_LIB_STATUS_CODE_NO_PASSIVE LASSO_LIB_STATUS_CODE_NO_SUPPORTEDIDP LASSO_LIB_STATUS_CODE_PROXY_COUNT_EXCEEDED LASSO_LIB_STATUS_CODE_UNKNOWN_PRINCIPAL LASSO_LIB_STATUS_CODE_UNSIGNED_AUTHN_REQUEST LASSO_LIB_STATUS_CODE_UNSUPPORTED_PROFILE LASSO_LOGIN_ERROR_ASSERTION_DOES_NOT_MATCH_REQUEST_ID LASSO_LOGIN_ERROR_ASSERTION_REPLAY LASSO_LOGIN_ERROR_CONSENT_NOT_OBTAINED LASSO_LOGIN_ERROR_FEDERATION_NOT_FOUND LASSO_LOGIN_ERROR_INVALID_ASSERTION_SIGNATURE LASSO_LOGIN_ERROR_INVALID_NAMEIDPOLICY LASSO_LOGIN_ERROR_INVALID_SIGNATURE LASSO_LOGIN_ERROR_NO_DEFAULT_ENDPOINT LASSO_LOGIN_ERROR_REQUEST_DENIED LASSO_LOGIN_ERROR_STATUS_NOT_SUCCESS LASSO_LOGIN_ERROR_UNKNOWN_PRINCIPAL LASSO_LOGIN_ERROR_UNSIGNED_AUTHN_REQUEST LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_ART LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_LECP LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_POST LASSO_LOGIN_PROTOCOL_PROFILE_REDIRECT LASSO_LOGOUT_ERROR_FEDERATION_NOT_FOUND LASSO_LOGOUT_ERROR_PARTIAL_LOGOUT LASSO_LOGOUT_ERROR_REQUEST_DENIED LASSO_LOGOUT_ERROR_UNKNOWN_PRINCIPAL LASSO_LOGOUT_ERROR_UNSUPPORTED_PROFILE LASSO_MD_PROTOCOL_TYPE_ARTIFACT_RESOLUTION LASSO_MD_PROTOCOL_TYPE_ASSERTION_ID_REQUEST LASSO_MD_PROTOCOL_TYPE_ATTRIBUTE LASSO_MD_PROTOCOL_TYPE_AUTHN_QUERY LASSO_MD_PROTOCOL_TYPE_AUTHZ LASSO_MD_PROTOCOL_TYPE_FEDERATION_TERMINATION LASSO_MD_PROTOCOL_TYPE_LAST LASSO_MD_PROTOCOL_TYPE_MANAGE_NAME_ID LASSO_MD_PROTOCOL_TYPE_NAME_IDENTIFIER_MAPPING LASSO_MD_PROTOCOL_TYPE_REGISTER_NAME_IDENTIFIER LASSO_MD_PROTOCOL_TYPE_SINGLE_LOGOUT LASSO_MD_PROTOCOL_TYPE_SINGLE_SIGN_ON LASSO_MESSAGE_FORMAT_BASE64 LASSO_MESSAGE_FORMAT_ERROR LASSO_MESSAGE_FORMAT_QUERY LASSO_MESSAGE_FORMAT_SOAP LASSO_MESSAGE_FORMAT_UNKNOWN LASSO_MESSAGE_FORMAT_XML LASSO_MESSAGE_FORMAT_XSCHEMA_ERROR LASSO_METADATA_HREF LASSO_METADATA_PREFIX LASSO_NAME_IDENTIFIER_MAPPING_ERROR_FORBIDDEN_CALL_ON_THIS_SIDE LASSO_NAME_IDENTIFIER_MAPPING_ERROR_MISSING_TARGET_IDENTIFIER LASSO_NAME_IDENTIFIER_MAPPING_ERROR_MISSING_TARGET_NAMESPACE LASSO_PAOS_HREF LASSO_PAOS_PREFIX LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ LASSO_PARAM_ERROR_CHECK_FAILED LASSO_PARAM_ERROR_INVALID_VALUE LASSO_PARAM_ERROR_NON_INITIALIZED_OBJECT LASSO_PRIVATE_KEY_ATTRIBUTE LASSO_PRIVATE_KEY_PASSWORD_ATTRIBUTE LASSO_PRIVATE_STATUS_CODE_FAILED_TO_RESTORE_ARTIFACT LASSO_PROFILE_ERROR_BAD_IDENTITY_DUMP LASSO_PROFILE_ERROR_BAD_SESSION_DUMP LASSO_PROFILE_ERROR_BUILDING_MESSAGE_FAILED LASSO_PROFILE_ERROR_BUILDING_QUERY_FAILED LASSO_PROFILE_ERROR_BUILDING_REQUEST_FAILED LASSO_PROFILE_ERROR_BUILDING_RESPONSE_FAILED LASSO_PROFILE_ERROR_CANNOT_FIND_A_PROVIDER LASSO_PROFILE_ERROR_CANNOT_VERIFY_SIGNATURE LASSO_PROFILE_ERROR_ENDPOINT_INDEX_NOT_FOUND LASSO_PROFILE_ERROR_FEDERATION_NOT_FOUND LASSO_PROFILE_ERROR_IDENTITY_NOT_FOUND LASSO_PROFILE_ERROR_INVALID_ARTIFACT LASSO_PROFILE_ERROR_INVALID_ASSERTION LASSO_PROFILE_ERROR_INVALID_ASSERTION_CONDITIONS LASSO_PROFILE_ERROR_INVALID_HTTP_METHOD LASSO_PROFILE_ERROR_INVALID_ISSUER LASSO_PROFILE_ERROR_INVALID_MSG LASSO_PROFILE_ERROR_INVALID_POST_MSG LASSO_PROFILE_ERROR_INVALID_PROTOCOLPROFILE LASSO_PROFILE_ERROR_INVALID_QUERY LASSO_PROFILE_ERROR_INVALID_REQUEST LASSO_PROFILE_ERROR_INVALID_RESPONSE LASSO_PROFILE_ERROR_INVALID_SOAP_MSG LASSO_PROFILE_ERROR_ISSUER_IS_NOT_AN_IDP LASSO_PROFILE_ERROR_MISSING_ARTIFACT LASSO_PROFILE_ERROR_MISSING_ASSERTION LASSO_PROFILE_ERROR_MISSING_ENCRYPTION_PRIVATE_KEY LASSO_PROFILE_ERROR_MISSING_ENDPOINT_REFERENCE LASSO_PROFILE_ERROR_MISSING_ENDPOINT_REFERENCE_ADDRESS LASSO_PROFILE_ERROR_MISSING_ISSUER LASSO_PROFILE_ERROR_MISSING_NAME_IDENTIFIER LASSO_PROFILE_ERROR_MISSING_REMOTE_PROVIDERID LASSO_PROFILE_ERROR_MISSING_REQUEST LASSO_PROFILE_ERROR_MISSING_RESOURCE_OFFERING LASSO_PROFILE_ERROR_MISSING_RESPONSE LASSO_PROFILE_ERROR_MISSING_SERVER LASSO_PROFILE_ERROR_MISSING_SERVICE_DESCRIPTION LASSO_PROFILE_ERROR_MISSING_SERVICE_INSTANCE LASSO_PROFILE_ERROR_MISSING_SERVICE_TYPE LASSO_PROFILE_ERROR_MISSING_STATUS_CODE LASSO_PROFILE_ERROR_MISSING_SUBJECT LASSO_PROFILE_ERROR_NAME_IDENTIFIER_NOT_FOUND LASSO_PROFILE_ERROR_REQUEST_DENIED LASSO_PROFILE_ERROR_RESPONSE_DOES_NOT_MATCH_REQUEST LASSO_PROFILE_ERROR_SESSION_NOT_FOUND LASSO_PROFILE_ERROR_STATUS_NOT_SUCCESS LASSO_PROFILE_ERROR_UNKNOWN_ISSUER LASSO_PROFILE_ERROR_UNKNOWN_PROFILE_URL LASSO_PROFILE_ERROR_UNKNOWN_PROVIDER LASSO_PROFILE_ERROR_UNSUPPORTED_BINDING LASSO_PROFILE_ERROR_UNSUPPORTED_PROFILE LASSO_PROFILE_SIGNATURE_HINT_FORBID LASSO_PROFILE_SIGNATURE_HINT_FORCE LASSO_PROFILE_SIGNATURE_HINT_MAYBE LASSO_PROFILE_SIGNATURE_VERIFY_HINT_FORCE LASSO_PROFILE_SIGNATURE_VERIFY_HINT_IGNORE LASSO_PROFILE_SIGNATURE_VERIFY_HINT_LAST LASSO_PROFILE_SIGNATURE_VERIFY_HINT_MAYBE LASSO_PROTOCOL_LIBERTY_1_0 LASSO_PROTOCOL_LIBERTY_1_1 LASSO_PROTOCOL_LIBERTY_1_2 LASSO_PROTOCOL_NONE LASSO_PROTOCOL_SAML_2_0 LASSO_PROVIDER_ERROR_MISSING_PUBLIC_KEY LASSO_PROVIDER_ROLE_ALL LASSO_PROVIDER_ROLE_ANY LASSO_PROVIDER_ROLE_ATTRIBUTE_AUTHORITY LASSO_PROVIDER_ROLE_AUTHN_AUTHORITY LASSO_PROVIDER_ROLE_AUTHZ_AUTHORITY LASSO_PROVIDER_ROLE_BOTH LASSO_PROVIDER_ROLE_IDP LASSO_PROVIDER_ROLE_LAST LASSO_PROVIDER_ROLE_NONE LASSO_PROVIDER_ROLE_SP LASSO_PYTHON_HREF LASSO_REGISTRY_ERROR_KEY_EXISTS LASSO_REQUEST_TYPE_DEFEDERATION LASSO_REQUEST_TYPE_DISCO_MODIFY LASSO_REQUEST_TYPE_DISCO_QUERY LASSO_REQUEST_TYPE_DST_MODIFY LASSO_REQUEST_TYPE_DST_QUERY LASSO_REQUEST_TYPE_IDWSF2_DISCO_QUERY LASSO_REQUEST_TYPE_IDWSF2_DISCO_SVCMD_ASSOCIATION_ADD LASSO_REQUEST_TYPE_IDWSF2_DISCO_SVCMD_REGISTER LASSO_REQUEST_TYPE_INVALID LASSO_REQUEST_TYPE_LECP LASSO_REQUEST_TYPE_LOGIN LASSO_REQUEST_TYPE_LOGOUT LASSO_REQUEST_TYPE_NAME_IDENTIFIER_MAPPING LASSO_REQUEST_TYPE_NAME_ID_MANAGEMENT LASSO_REQUEST_TYPE_NAME_REGISTRATION LASSO_REQUEST_TYPE_SASL_REQUEST LASSO_SAML2_ACTION_GHPP_GET LASSO_SAML2_ACTION_GHPP_HEAD LASSO_SAML2_ACTION_GHPP_POST LASSO_SAML2_ACTION_GHPP_PUT LASSO_SAML2_ACTION_NAMESPACE_GHPP LASSO_SAML2_ACTION_NAMESPACE_RWEDC LASSO_SAML2_ACTION_NAMESPACE_RWEDC_NEGATION LASSO_SAML2_ACTION_NAMESPACE_UNIX LASSO_SAML2_ACTION_RWEDC_CONTROL LASSO_SAML2_ACTION_RWEDC_DELETE LASSO_SAML2_ACTION_RWEDC_EXECUTE LASSO_SAML2_ACTION_RWEDC_NEGATION LASSO_SAML2_ACTION_RWEDC_READ LASSO_SAML2_ACTION_RWEDC_WRITE LASSO_SAML2_ASSERTION_HREF LASSO_SAML2_ASSERTION_INDETERMINATE LASSO_SAML2_ASSERTION_INVALID LASSO_SAML2_ASSERTION_PREFIX LASSO_SAML2_ASSERTION_VALID LASSO_SAML2_ATTRIBUTE_NAME_EPR LASSO_SAML2_ATTRIBUTE_NAME_FORMAT_BASIC LASSO_SAML2_ATTRIBUTE_NAME_FORMAT_UNSPECIFIED LASSO_SAML2_ATTRIBUTE_NAME_FORMAT_URI LASSO_SAML2_ATTRIBUTE_PROFILE_BASIC LASSO_SAML2_ATTRIBUTE_PROFILE_DCE LASSO_SAML2_ATTRIBUTE_PROFILE_UUID LASSO_SAML2_ATTRIBUTE_PROFILE_X500 LASSO_SAML2_AUTHN_CONTEXT_AUTHENTICATED_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_INTERNET_PROTOCOL LASSO_SAML2_AUTHN_CONTEXT_INTERNET_PROTOCOL_PASSWORD LASSO_SAML2_AUTHN_CONTEXT_KERBEROS LASSO_SAML2_AUTHN_CONTEXT_MOBILE_ONE_FACTOR_CONTRACT LASSO_SAML2_AUTHN_CONTEXT_MOBILE_ONE_FACTOR_UNREGISTERED LASSO_SAML2_AUTHN_CONTEXT_MOBILE_TWO_FACTOR_CONTRACT LASSO_SAML2_AUTHN_CONTEXT_MOBILE_TWO_FACTOR_UNREGISTERED LASSO_SAML2_AUTHN_CONTEXT_NOMAD_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_PASSWORD LASSO_SAML2_AUTHN_CONTEXT_PASSWORD_PROTECTED_TRANSPORT LASSO_SAML2_AUTHN_CONTEXT_PERSONALIZED_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_PGP LASSO_SAML2_AUTHN_CONTEXT_PREVIOUS_SESSION LASSO_SAML2_AUTHN_CONTEXT_SECURE_REMOTE_PASSWORD LASSO_SAML2_AUTHN_CONTEXT_SMARTCARD LASSO_SAML2_AUTHN_CONTEXT_SMARTCARD_PKI LASSO_SAML2_AUTHN_CONTEXT_SOFTWARE_PKI LASSO_SAML2_AUTHN_CONTEXT_SPKI LASSO_SAML2_AUTHN_CONTEXT_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_TIME_SYNC_TOKEN LASSO_SAML2_AUTHN_CONTEXT_TLS_CLIENT LASSO_SAML2_AUTHN_CONTEXT_UNSPECIFIED LASSO_SAML2_AUTHN_CONTEXT_X509 LASSO_SAML2_AUTHN_CONTEXT_XMLDSIG LASSO_SAML2_CONFIRMATION_METHOD_BEARER LASSO_SAML2_CONFIRMATION_METHOD_HOLDER_OF_KEY LASSO_SAML2_CONSENT_EXPLICIT LASSO_SAML2_CONSENT_IMPLICIT LASSO_SAML2_CONSENT_INAPPLICABLE LASSO_SAML2_CONSENT_OBTAINED LASSO_SAML2_CONSENT_PRIOR LASSO_SAML2_CONSENT_UNAVAILABLE LASSO_SAML2_DEFLATE_ENCODING LASSO_SAML2_FIELD_ARTIFACT LASSO_SAML2_FIELD_ENCODING LASSO_SAML2_FIELD_RELAYSTATE LASSO_SAML2_FIELD_REQUEST LASSO_SAML2_FIELD_RESPONSE LASSO_SAML2_FIELD_SIGALG LASSO_SAML2_FIELD_SIGNATURE LASSO_SAML2_METADATA_BINDING_ARTIFACT LASSO_SAML2_METADATA_BINDING_PAOS LASSO_SAML2_METADATA_BINDING_POST LASSO_SAML2_METADATA_BINDING_REDIRECT LASSO_SAML2_METADATA_BINDING_SOAP LASSO_SAML2_METADATA_BINDING_URI LASSO_SAML2_METADATA_HREF LASSO_SAML2_METADATA_PREFIX LASSO_SAML2_NAME_IDENTIFIER_FORMAT_EMAIL LASSO_SAML2_NAME_IDENTIFIER_FORMAT_ENCRYPTED LASSO_SAML2_NAME_IDENTIFIER_FORMAT_ENTITY LASSO_SAML2_NAME_IDENTIFIER_FORMAT_KERBEROS LASSO_SAML2_NAME_IDENTIFIER_FORMAT_PERSISTENT LASSO_SAML2_NAME_IDENTIFIER_FORMAT_TRANSIENT LASSO_SAML2_NAME_IDENTIFIER_FORMAT_UNSPECIFIED LASSO_SAML2_NAME_IDENTIFIER_FORMAT_WINDOWS LASSO_SAML2_NAME_IDENTIFIER_FORMAT_X509 LASSO_SAML2_PROTOCOL_HREF LASSO_SAML2_PROTOCOL_PREFIX LASSO_SAML2_STATUS_CODE_AUTHN_FAILED LASSO_SAML2_STATUS_CODE_INVALID_ATTR_NAME LASSO_SAML2_STATUS_CODE_INVALID_NAME_ID_POLICY LASSO_SAML2_STATUS_CODE_NO_AUTHN_CONTEXT LASSO_SAML2_STATUS_CODE_NO_AVAILABLE_IDP LASSO_SAML2_STATUS_CODE_NO_PASSIVE LASSO_SAML2_STATUS_CODE_NO_SUPPORTED_IDP LASSO_SAML2_STATUS_CODE_PARTIAL_LOGOUT LASSO_SAML2_STATUS_CODE_PROXY_COUNT_EXCEEDED LASSO_SAML2_STATUS_CODE_REQUESTER LASSO_SAML2_STATUS_CODE_REQUEST_DENIED LASSO_SAML2_STATUS_CODE_REQUEST_UNSUPPORTED LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_DEPRECATED LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_TOO_HIGH LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_TOO_LOW LASSO_SAML2_STATUS_CODE_RESOURCE_NOT_RECOGNIZED LASSO_SAML2_STATUS_CODE_RESPONDER LASSO_SAML2_STATUS_CODE_SUCCESS LASSO_SAML2_STATUS_CODE_TOO_MANY_RESPONSES LASSO_SAML2_STATUS_CODE_UNKNOWN_ATTR_PROFILE LASSO_SAML2_STATUS_CODE_UNKNOWN_PRINCIPAL LASSO_SAML2_STATUS_CODE_UNSUPPORTED_BINDING LASSO_SAML2_STATUS_CODE_VERSION_MISMATCH LASSO_SAML_ASSERTION_HREF LASSO_SAML_ASSERTION_PREFIX LASSO_SAML_AUTHENTICATION_METHODS_PKI LASSO_SAML_AUTHENTICATION_METHOD_HARDWARE_TOKEN LASSO_SAML_AUTHENTICATION_METHOD_KERBEROS LASSO_SAML_AUTHENTICATION_METHOD_LIBERTY LASSO_SAML_AUTHENTICATION_METHOD_PASSWORD LASSO_SAML_AUTHENTICATION_METHOD_PGP LASSO_SAML_AUTHENTICATION_METHOD_SECURE_REMOTE_PASSWORD LASSO_SAML_AUTHENTICATION_METHOD_SMARTCARD_PKI LASSO_SAML_AUTHENTICATION_METHOD_SOFTWARE_PKI LASSO_SAML_AUTHENTICATION_METHOD_UNSPECIFIED LASSO_SAML_AUTHENTICATION_METHOD_XKMS LASSO_SAML_AUTHENTICATION_METHOD_XMLD_SIG LASSO_SAML_CONFIRMATION_METHOD_ARTIFACT LASSO_SAML_CONFIRMATION_METHOD_ARTIFACT01 LASSO_SAML_CONFIRMATION_METHOD_BEARER LASSO_SAML_CONFIRMATION_METHOD_HOLDER_OF_KEY LASSO_SAML_CONFIRMATION_METHOD_SENDER_VOUCHES LASSO_SAML_MAJOR_VERSION_N LASSO_SAML_MINOR_VERSION_N LASSO_SAML_PROTOCOL_HREF LASSO_SAML_PROTOCOL_PREFIX LASSO_SAML_STATUS_CODE_REQUESTER LASSO_SAML_STATUS_CODE_REQUEST_DENIED LASSO_SAML_STATUS_CODE_REQUEST_VERSION_DEPRECATED LASSO_SAML_STATUS_CODE_REQUEST_VERSION_TOO_HIGH LASSO_SAML_STATUS_CODE_REQUEST_VERSION_TOO_LOW LASSO_SAML_STATUS_CODE_RESOURCE_NOT_RECOGNIZED LASSO_SAML_STATUS_CODE_RESPONDER LASSO_SAML_STATUS_CODE_SUCCESS LASSO_SAML_STATUS_CODE_TOO_MANY_RESPONSES LASSO_SAML_STATUS_CODE_VERSION_MISMATCH LASSO_SERVER_ERROR_ADD_PROVIDER_FAILED LASSO_SERVER_ERROR_ADD_PROVIDER_PROTOCOL_MISMATCH LASSO_SERVER_ERROR_INVALID_XML LASSO_SERVER_ERROR_NO_PROVIDER_LOADED LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND LASSO_SERVER_ERROR_SET_ENCRYPTION_PRIVATE_KEY_FAILED LASSO_SERVER_LOAD_METADATA_FLAG_CHECK_ENTITIES_DESCRIPTOR_SIGNATURE LASSO_SERVER_LOAD_METADATA_FLAG_CHECK_ENTITY_DESCRIPTOR_SIGNATURE LASSO_SERVER_LOAD_METADATA_FLAG_DEFAULT LASSO_SERVER_LOAD_METADATA_FLAG_INHERIT_SIGNATURE LASSO_SIGNATURE_METHOD_ATTRIBUTE LASSO_SIGNATURE_METHOD_DSA_SHA1 LASSO_SIGNATURE_METHOD_HMAC_SHA1 LASSO_SIGNATURE_METHOD_LAST LASSO_SIGNATURE_METHOD_NONE LASSO_SIGNATURE_METHOD_RSA_SHA1 LASSO_SIGNATURE_TYPE_ATTRIBUTE LASSO_SIGNATURE_TYPE_LAST LASSO_SIGNATURE_TYPE_NONE LASSO_SIGNATURE_TYPE_SIMPLE LASSO_SIGNATURE_TYPE_WITHX509 LASSO_SOAP_ENV_ACTOR LASSO_SOAP_ENV_HREF LASSO_SOAP_ENV_PREFIX LASSO_SOAP_ERROR_MISSING_BODY LASSO_SOAP_ERROR_MISSING_ENVELOPE LASSO_SOAP_ERROR_MISSING_HEADER LASSO_SOAP_ERROR_MISSING_SOAP_FAULT_DETAIL LASSO_SOAP_ERROR_REDIRECT_REQUEST_FAULT LASSO_SOAP_FAULT_CODE_CLIENT LASSO_SOAP_FAULT_CODE_MUST_UNDERSTAND LASSO_SOAP_FAULT_CODE_SERVER LASSO_SOAP_FAULT_CODE_VERSION_MISMATCH LASSO_SOAP_FAULT_REDIRECT_REQUEST LASSO_WSF_ENABLED LASSO_WSF_PROFILE_ERROR_INVALID_OR_MISSING_REFERENCE_TO_MESSAGE_ID LASSO_WSF_PROFILE_ERROR_MISSING_ASSERTION_ID LASSO_WSF_PROFILE_ERROR_MISSING_CORRELATION LASSO_WSF_PROFILE_ERROR_MISSING_CREDENTIAL_REF LASSO_WSF_PROFILE_ERROR_MISSING_DESCRIPTION LASSO_WSF_PROFILE_ERROR_MISSING_ENDPOINT LASSO_WSF_PROFILE_ERROR_MISSING_RESOURCE_ID LASSO_WSF_PROFILE_ERROR_MISSING_SECURITY LASSO_WSF_PROFILE_ERROR_MISSING_SENDER_ID LASSO_WSF_PROFILE_ERROR_REDIRECT_REQUEST LASSO_WSF_PROFILE_ERROR_REDIRECT_REQUEST_UNSUPPORTED_BY_REQUESTER LASSO_WSF_PROFILE_ERROR_SECURITY_MECHANISM_CHECK_FAILED LASSO_WSF_PROFILE_ERROR_SERVER_INTERACTION_REQUIRED LASSO_WSF_PROFILE_ERROR_SERVER_INTERACTION_REQUIRED_FOR_DATA LASSO_WSF_PROFILE_ERROR_SOAP_FAULT LASSO_WSF_PROFILE_ERROR_UNKNOWN_STATUS_CODE LASSO_WSF_PROFILE_ERROR_UNSUPPORTED_SECURITY_MECHANISM LASSO_WSSEC_ERROR_BAD_PASSWORD LASSO_WSSEC_ERROR_MISSING_SECURITY_TOKEN LASSO_WSUTIL1_HREF LASSO_WSUTIL1_PREFIX LASSO_XMLENC_ERROR_INVALID_ENCRYPTED_DATA LASSO_XMLENC_HREF LASSO_XMLENC_PREFIX LASSO_XML_ERROR_ATTR_NOT_FOUND LASSO_XML_ERROR_ATTR_VALUE_NOT_FOUND LASSO_XML_ERROR_INVALID_FILE LASSO_XML_ERROR_MISSING_NAMESPACE LASSO_XML_ERROR_NODE_CONTENT_NOT_FOUND LASSO_XML_ERROR_NODE_NOT_FOUND LASSO_XML_ERROR_OBJECT_CONSTRUCTION_FAILED LASSO_XML_ERROR_SCHEMA_INVALID_FRAGMENT LASSO_XSI_HREF LASSO_XSI_PREFIX struct LassoAssertionQuery { LassoAssertionQueryPrivate* private_data } LassoAssertionQueryRequestType LassoCheckVersionMode struct LassoDefederation { } struct LassoDsKeyInfo { LassoDsKeyValue* KeyValue } struct LassoDsKeyValue { LassoDsRsaKeyValue* RSAKeyValue } struct LassoDsRsaKeyValue { char* Modulus, char* Exponent } struct LassoDsX509Data { LassoDsX509DataPrivate* private_data } struct LassoEcp { gchar* assertionConsumerURL, LassoEcpPrivate* private_data } LassoEncryptionMode LassoEncryptionSymKeyType struct LassoFederation { gchar* remote_providerID, LassoNode* local_nameIdentifier, LassoNode* remote_nameIdentifier, LassoFederationPrivate* private_data } LassoHttpMethod struct LassoIdentity { GHashTable* federations, gboolean is_dirty, LassoIdentityPrivate* private_data } struct LassoKey { LassoKeyPrivate* private_data } struct LassoLecp { LassoLibAuthnRequestEnvelope* authnRequestEnvelope, LassoLibAuthnResponseEnvelope* authnResponseEnvelope, char* assertionConsumerServiceURL } struct LassoLibAssertion { char* InResponseTo } struct LassoLibAuthenticationStatement { LassoLibAuthnContext* AuthnContext, char* ReauthenticateOnOrAfter, char* SessionIndex } struct LassoLibAuthnContext { char* AuthnContextClassRef, char* AuthnContextStatementRef } struct LassoLibAuthnRequest { GList* Extension, char* ProviderID, char* AffiliationID, char* NameIDPolicy, gboolean ForceAuthn, gboolean IsPassive, char* ProtocolProfile, char* AssertionConsumerServiceID, LassoLibRequestAuthnContext* RequestAuthnContext, char* RelayState, LassoLibScoping* Scoping, char* consent } struct LassoLibAuthnRequestEnvelope { GList* Extension, LassoLibAuthnRequest* AuthnRequest, char* ProviderID, char* ProviderName, char* AssertionConsumerServiceURL, LassoLibIDPList* IDPList, gboolean IsPassive } struct LassoLibAuthnResponse { GList* Extension, char* ProviderID, char* RelayState, char* consent } struct LassoLibAuthnResponseEnvelope { GList* Extension, LassoLibAuthnResponse* AuthnResponse, char* AssertionConsumerServiceURL } struct LassoLibFederationTerminationNotification { GList* Extension, char* ProviderID, LassoSamlNameIdentifier* NameIdentifier, char* consent, char* RelayState } struct LassoLibIDPEntries { GList* IDPEntry } struct LassoLibIDPEntry { char* ProviderID, char* ProviderName, char* Loc } struct LassoLibIDPList { LassoLibIDPEntries* IDPEntries, char* GetComplete } struct LassoLibLogoutRequest { GList* Extension, char* ProviderID, LassoSamlNameIdentifier* NameIdentifier, char* SessionIndex, char* RelayState, char* consent, char* NotOnOrAfter } struct LassoLibLogoutResponse { } struct LassoLibNameIdentifierMappingRequest { GList* Extension, char* ProviderID, LassoSamlNameIdentifier* NameIdentifier, char* TargetNamespace, char* consent } struct LassoLibNameIdentifierMappingResponse { GList* Extension, char* ProviderID, LassoSamlpStatus* Status, LassoSamlNameIdentifier* NameIdentifier } struct LassoLibRegisterNameIdentifierRequest { GList* Extension, char* ProviderID, LassoSamlNameIdentifier* IDPProvidedNameIdentifier, LassoSamlNameIdentifier* SPProvidedNameIdentifier, LassoSamlNameIdentifier* OldProvidedNameIdentifier, char* RelayState } struct LassoLibRegisterNameIdentifierResponse { } struct LassoLibRequestAuthnContext { GList* AuthnContextClassRef, GList* AuthnContextStatementRef, char* AuthnContextComparison } struct LassoLibScoping { int ProxyCount, LassoLibIDPList* IDPList } struct LassoLibStatusResponse { GList* Extension, char* ProviderID, LassoSamlpStatus* Status, char* RelayState } struct LassoLibSubject { LassoSamlNameIdentifier* IDPProvidedNameIdentifier } struct LassoLogin { LassoLoginProtocolProfile protocolProfile, gchar* assertionArtifact, LassoSamlAssertion* assertion, gchar* nameIDPolicy, LassoHttpMethod http_method, LassoLoginPrivate* private_data } LassoLoginProtocolProfile struct LassoLogout { LassoNode* initial_request, LassoNode* initial_response, gchar* initial_remote_providerID, gint providerID_index, LassoHttpMethod initial_http_request_method, LassoLogoutPrivate* private_data } LassoMdProtocolType LassoMessageFormat struct LassoMiscTextNode { char* content, char* name, char* ns_href, char* ns_prefix, gboolean text_child } struct LassoNameIdManagement { } struct LassoNameIdentifierMapping { gchar* targetNameIdentifier } struct LassoNameRegistration { LassoSamlNameIdentifier* oldNameIdentifier } struct LassoNode { } struct LassoProfile { LassoServer* server, LassoNode* request, LassoNode* response, LassoNode* nameIdentifier, gchar* remote_providerID, gchar* msg_url, gchar* msg_body, gchar* msg_relayState, LassoIdentity* identity, LassoSession* session, LassoHttpMethod http_request_method, gint signature_status, LassoProfilePrivate* private_data } LassoProfileSignatureHint LassoProfileSignatureVerifyHint LassoProtocolConformance struct LassoProvider { gchar* ProviderID, LassoProviderRole role, char* metadata_filename, gchar* public_key, gchar* ca_cert_chain, LassoProviderPrivate* private_data } LassoProviderRole LassoRequestType struct LassoSaml2Action { char* content, char* Namespace } struct LassoSaml2Advice { GList* AssertionIDRef, GList* AssertionURIRef, GList* Assertion, GList* EncryptedAssertion } struct LassoSaml2Assertion { LassoSaml2NameID* Issuer, LassoSaml2Subject* Subject, LassoSaml2Conditions* Conditions, LassoSaml2Advice* Advice, GList* Statement, GList* AuthnStatement, GList* AuthzDecisionStatement, GList* AttributeStatement, char* Version, char* ID, char* IssueInstant, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file, gboolean encryption_activated, char* encryption_public_key_str, LassoEncryptionSymKeyType encryption_sym_key_type } LassoSaml2AssertionValidationState struct LassoSaml2Attribute { GList* AttributeValue, char* Name, char* NameFormat, char* FriendlyName } struct LassoSaml2AttributeStatement { GList* Attribute, GList* EncryptedAttribute } struct LassoSaml2AttributeValue { GList* any } struct LassoSaml2AudienceRestriction { char* Audience } struct LassoSaml2AuthnContext { char* AuthnContextClassRef, char* AuthnContextDeclRef, char* AuthenticatingAuthority } struct LassoSaml2AuthnStatement { LassoSaml2SubjectLocality* SubjectLocality, LassoSaml2AuthnContext* AuthnContext, char* AuthnInstant, char* SessionIndex, char* SessionNotOnOrAfter } struct LassoSaml2AuthzDecisionStatement { LassoSaml2Action* Action, LassoSaml2Evidence* Evidence, char* Resource, char* Decision } struct LassoSaml2BaseIDAbstract { char* NameQualifier, char* SPNameQualifier } struct LassoSaml2ConditionAbstract { } struct LassoSaml2Conditions { GList* Condition, GList* AudienceRestriction, GList* OneTimeUse, GList* ProxyRestriction, char* NotBefore, char* NotOnOrAfter } struct LassoSaml2EncryptedElement { xmlNode* EncryptedData, GList* EncryptedKey, LassoNode* original_data } struct LassoSaml2Evidence { GList* AssertionIDRef, GList* AssertionURIRef, GList* Assertion, GList* EncryptedAssertion } struct LassoSaml2KeyInfoConfirmationData { } struct LassoSaml2KeyInfoConfirmationDataType { LassoSaml2KeyInfoConfirmationDataTypePrivate* private_data } struct LassoSaml2NameID { char* content, char* Format, char* SPProvidedID, char* NameQualifier, char* SPNameQualifier } struct LassoSaml2OneTimeUse { } struct LassoSaml2ProxyRestriction { char* Audience, char* Count } struct LassoSaml2StatementAbstract { } struct LassoSaml2Subject { LassoSaml2BaseIDAbstract* BaseID, LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, LassoSaml2SubjectConfirmation* SubjectConfirmation } struct LassoSaml2SubjectConfirmation { LassoSaml2BaseIDAbstract* BaseID, LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, LassoSaml2SubjectConfirmationData* SubjectConfirmationData, char* Method } struct LassoSaml2SubjectConfirmationData { char* NotBefore, char* NotOnOrAfter, char* Recipient, char* InResponseTo, char* Address } struct LassoSaml2SubjectLocality { char* Address, char* DNSName } struct LassoSamlAdvice { GList* AssertionIDReference, LassoSamlAssertion* Assertion } struct LassoSamlAssertion { LassoSamlConditions* Conditions, LassoSamlAdvice* Advice, LassoSamlSubjectStatement* SubjectStatement, LassoSamlAuthenticationStatement* AuthenticationStatement, LassoSamlAttributeStatement* AttributeStatement, int MajorVersion, int MinorVersion, char* AssertionID, char* Issuer, char* IssueInstant, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlAttribute { gchar* attributeName, gchar* attributeNameSpace, GList* AttributeValue } struct LassoSamlAttributeDesignator { char* AttributeName, char* AttributeNamespace } struct LassoSamlAttributeStatement { GList* Attribute } struct LassoSamlAttributeValue { GList* any } struct LassoSamlAudienceRestrictionCondition { GList* Audience } struct LassoSamlAuthenticationStatement { LassoSamlSubjectLocality* SubjectLocality, GList* AuthorityBinding, char* AuthenticationMethod, char* AuthenticationInstant } struct LassoSamlAuthorityBinding { char* AuthorityKind, char* Location, char* Binding } struct LassoSamlConditionAbstract { } struct LassoSamlConditions { GList* Condition, GList* AudienceRestrictionCondition, char* NotBefore, char* NotOnOrAfter } struct LassoSamlNameIdentifier { char* NameQualifier, char* Format, char* content } struct LassoSamlStatementAbstract { } struct LassoSamlSubject { LassoSamlNameIdentifier* NameIdentifier, LassoSamlSubjectConfirmation* SubjectConfirmation, LassoSaml2EncryptedElement* EncryptedNameIdentifier } struct LassoSamlSubjectConfirmation { GList* ConfirmationMethod, char* SubjectConfirmationData, LassoDsKeyInfo* KeyInfo } struct LassoSamlSubjectLocality { char* IPAddress, char* DNSAddress } struct LassoSamlSubjectStatement { } struct LassoSamlSubjectStatementAbstract { LassoSamlSubject* Subject } struct LassoSamlp2ArtifactResolve { char* Artifact } struct LassoSamlp2ArtifactResponse { LassoNode* any } struct LassoSamlp2AssertionIDRequest { char* AssertionIDRef } struct LassoSamlp2AttributeQuery { GList* Attribute } struct LassoSamlp2AuthnQuery { LassoSamlp2RequestedAuthnContext* RequestedAuthnContext, char* SessionIndex } struct LassoSamlp2AuthnRequest { LassoSaml2Subject* Subject, LassoSamlp2NameIDPolicy* NameIDPolicy, LassoSaml2Conditions* Conditions, LassoSamlp2RequestedAuthnContext* RequestedAuthnContext, LassoSamlp2Scoping* Scoping, gboolean ForceAuthn, gboolean IsPassive, char* ProtocolBinding, int AssertionConsumerServiceIndex, char* AssertionConsumerServiceURL, int AttributeConsumingServiceIndex, char* ProviderName, G_GNUC_DEPRECATED char } struct LassoSamlp2AuthzDecisionQuery { LassoSaml2Action* Action, LassoSaml2Evidence* Evidence, char* Resource } struct LassoSamlp2Extensions { } struct LassoSamlp2IDPEntry { char* ProviderID, char* Name, char* Loc } struct LassoSamlp2IDPList { LassoSamlp2IDPEntry* IDPEntry, char* GetComplete } struct LassoSamlp2LogoutRequest { LassoSaml2BaseIDAbstract* BaseID, LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, char* SessionIndex, char* Reason, char* NotOnOrAfter, G_GNUC_DEPRECATED char } struct LassoSamlp2LogoutResponse { G_GNUC_DEPRECATED char } struct LassoSamlp2ManageNameIDRequest { LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, char* NewID, LassoSaml2EncryptedElement* NewEncryptedID, LassoSamlp2Terminate* Terminate } struct LassoSamlp2ManageNameIDResponse { } struct LassoSamlp2NameIDMappingRequest { LassoSaml2BaseIDAbstract* BaseID, LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, LassoSamlp2NameIDPolicy* NameIDPolicy } struct LassoSamlp2NameIDMappingResponse { LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID } struct LassoSamlp2NameIDPolicy { char* Format, char* SPNameQualifier, gboolean AllowCreate } struct LassoSamlp2RequestAbstract { LassoSaml2NameID* Issuer, LassoSamlp2Extensions* Extensions, char* ID, char* Version, char* IssueInstant, char* Destination, char* Consent, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlp2RequestedAuthnContext { GList* AuthnContextClassRef, GList* AuthnContextDeclRef, char* Comparison } struct LassoSamlp2Response { GList* Assertion, GList* EncryptedAssertion } struct LassoSamlp2Scoping { LassoSamlp2IDPList* IDPList, char* RequesterID, char* ProxyCount } struct LassoSamlp2Status { LassoSamlp2StatusCode* StatusCode, char* StatusMessage, LassoSamlp2StatusDetail* StatusDetail } struct LassoSamlp2StatusCode { LassoSamlp2StatusCode* StatusCode, char* Value } struct LassoSamlp2StatusDetail { } struct LassoSamlp2StatusResponse { LassoSaml2NameID* Issuer, LassoSamlp2Extensions* Extensions, LassoSamlp2Status* Status, char* ID, char* InResponseTo, char* Version, char* IssueInstant, char* Destination, char* Consent, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlp2SubjectQueryAbstract { LassoSaml2Subject* Subject } struct LassoSamlp2Terminate { } struct LassoSamlpRequest { char* AssertionArtifact } struct LassoSamlpRequestAbstract { GList* RespondWith, char* RequestID, int MajorVersion, int MinorVersion, char* IssueInstant, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlpResponse { LassoSamlpStatus* Status, GList* Assertion } struct LassoSamlpResponseAbstract { char* ResponseID, char* InResponseTo, int MajorVersion, int MinorVersion, char* IssueInstant, char* Recipient, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlpStatus { LassoSamlpStatusCode* StatusCode, char* StatusMessage } struct LassoSamlpStatusCode { LassoSamlpStatusCode* StatusCode, char* Value } struct LassoServer { GHashTable* providers, GHashTable* services, gchar* private_key, gchar* private_key_password, gchar* certificate, LassoSignatureMethod signature_method, LassoServerPrivate* private_data } LassoServerLoadMetadataFlag struct LassoSession { GHashTable* assertions, gboolean is_dirty, LassoSessionPrivate* private_data } LassoSignatureMethod LassoSignatureType struct LassoSoapBody { GList* any, gchar* Id } struct LassoSoapDetail { GList* any } struct LassoSoapEnvelope { LassoSoapHeader* Header, LassoSoapBody* Body } struct LassoSoapFault { gchar* faultcode, gchar* faultstring, GList* faultactor, LassoSoapDetail* Detail } struct LassoSoapHeader { GList* Other } lasso_error_t lasso_assertion_query_add_attribute_request ( LassoAssertionQuery* assertion_query, char* format, char* name ) lasso_error_t lasso_assertion_query_build_request_msg ( LassoAssertionQuery* assertion_query ) lasso_error_t lasso_assertion_query_build_response_msg ( LassoAssertionQuery* assertion_query ) None lasso_assertion_query_destroy ( LassoAssertionQuery* assertion_query ) LassoAssertionQueryRequestType lasso_assertion_query_get_request_type ( LassoAssertionQuery* assertion_query ) GType lasso_assertion_query_get_type ( ) lasso_error_t lasso_assertion_query_init_request ( LassoAssertionQuery* assertion_query, char* remote_provider_id, LassoHttpMethod http_method, LassoAssertionQueryRequestType query_request_type ) LassoAssertionQuery* lasso_assertion_query_new ( LassoServer* server ) lasso_error_t lasso_assertion_query_process_request_msg ( LassoAssertionQuery* assertion_query, gchar* request_msg ) lasso_error_t lasso_assertion_query_process_response_msg ( LassoAssertionQuery* assertion_query, gchar* response_msg ) lasso_error_t lasso_assertion_query_validate_request ( LassoAssertionQuery* assertion_query ) char* lasso_build_unique_id ( unsigned int size ) int lasso_check_version ( int major, int minor, int subminor, LassoCheckVersionMode mode ) lasso_error_t lasso_defederation_build_notification_msg ( LassoDefederation* defederation ) None lasso_defederation_destroy ( LassoDefederation* defederation ) GType lasso_defederation_get_type ( ) lasso_error_t lasso_defederation_init_notification ( LassoDefederation* defederation, gchar* remote_providerID, LassoHttpMethod http_method ) LassoDefederation* lasso_defederation_new ( LassoServer* server ) lasso_error_t lasso_defederation_process_notification_msg ( LassoDefederation* defederation, gchar* notification_msg ) lasso_error_t lasso_defederation_validate_notification ( LassoDefederation* defederation ) GType lasso_ds_key_info_get_type ( ) LassoDsKeyInfo* lasso_ds_key_info_new ( ) GType lasso_ds_key_value_get_type ( ) LassoDsX509Data* lasso_ds_key_value_get_x509_data ( LassoDsKeyValue* key_value ) LassoDsKeyValue* lasso_ds_key_value_new ( ) None lasso_ds_key_value_set_x509_data ( LassoDsKeyValue* key_value, LassoDsX509Data* x509_data ) GType lasso_ds_rsa_key_value_get_type ( ) LassoDsRsaKeyValue* lasso_ds_rsa_key_value_new ( ) const char* lasso_ds_x509_data_get_certificate ( LassoDsX509Data* x509_data ) const char* lasso_ds_x509_data_get_crl ( LassoDsX509Data* x509_data ) const char* lasso_ds_x509_data_get_subject_name ( LassoDsX509Data* x509_data ) GType lasso_ds_x509_data_get_type ( ) LassoDsX509Data* lasso_ds_x509_data_new ( ) None lasso_ds_x509_data_set_certificate ( LassoDsX509Data* x509_data, const char* certificate ) None lasso_ds_x509_data_set_crl ( LassoDsX509Data* x509_data, const char* crl ) None lasso_ds_x509_data_set_subject_name ( LassoDsX509Data* x509_data, const char* subject_name ) None lasso_ecp_destroy ( LassoEcp* ecp ) GType lasso_ecp_get_type ( ) LassoEcp* lasso_ecp_new ( LassoServer* server ) lasso_error_t lasso_ecp_process_authn_request_msg ( LassoEcp* ecp, const char* authn_request_msg ) lasso_error_t lasso_ecp_process_response_msg ( LassoEcp* ecp, const char* response_msg ) None lasso_federation_build_local_name_identifier ( LassoFederation* federation, const gchar* nameQualifier, const gchar* format, const gchar* content ) None lasso_federation_destroy ( LassoFederation* federation ) GType lasso_federation_get_type ( ) LassoFederation* lasso_federation_new ( const gchar* remote_providerID ) gboolean lasso_federation_verify_name_identifier ( LassoFederation* federation, LassoNode* name_identifier ) char* lasso_get_prefix_for_dst_service_href ( const char* href ) gchar* lasso_get_prefix_for_idwsf2_dst_service_href ( const gchar* href ) None lasso_identity_destroy ( LassoIdentity* identity ) gchar* lasso_identity_dump ( LassoIdentity* identity ) LassoFederation* lasso_identity_get_federation ( LassoIdentity* identity, const char* providerID ) GType lasso_identity_get_type ( ) LassoIdentity* lasso_identity_new ( ) LassoIdentity* lasso_identity_new_from_dump ( const gchar* dump ) lasso_error_t lasso_init ( ) GType lasso_key_get_type ( ) LassoKey* lasso_key_new_for_signature_from_base64_string ( char* base64_string, char* password, LassoSignatureMethod signature_method, char* certificate ) LassoKey* lasso_key_new_for_signature_from_file ( char* filename_or_buffer, char* password, LassoSignatureMethod signature_method, char* certificate ) char* lasso_key_query_sign ( LassoKey* key, const char* query ) lasso_error_t lasso_key_query_verify ( LassoKey* key, const char* query ) xmlNode* lasso_key_saml2_xml_sign ( LassoKey* key, const char* id, xmlNode* document ) lasso_error_t lasso_key_saml2_xml_verify ( LassoKey* key, char* id, xmlNode* document ) lasso_error_t lasso_lecp_build_authn_request_envelope_msg ( LassoLecp* lecp ) lasso_error_t lasso_lecp_build_authn_request_msg ( LassoLecp* lecp ) lasso_error_t lasso_lecp_build_authn_response_envelope_msg ( LassoLecp* lecp ) lasso_error_t lasso_lecp_build_authn_response_msg ( LassoLecp* lecp ) None lasso_lecp_destroy ( LassoLecp* lecp ) GType lasso_lecp_get_type ( ) lasso_error_t lasso_lecp_init_authn_request ( LassoLecp* lecp, const char* remote_providerID ) LassoLecp* lasso_lecp_new ( LassoServer* server ) lasso_error_t lasso_lecp_process_authn_request_envelope_msg ( LassoLecp* lecp, const char* request_msg ) lasso_error_t lasso_lecp_process_authn_request_msg ( LassoLecp* lecp, const char* authn_request_msg ) lasso_error_t lasso_lecp_process_authn_response_envelope_msg ( LassoLecp* lecp, const char* response_msg ) GType lasso_lib_assertion_get_type ( ) LassoLibAssertion* lasso_lib_assertion_new ( ) LassoLibAssertion* lasso_lib_assertion_new_full ( const char* issuer, const char* requestID, const char* audience, const char* notBefore, const char* notOnOrAfter ) GType lasso_lib_authentication_statement_get_type ( ) LassoLibAuthenticationStatement* lasso_lib_authentication_statement_new ( ) LassoLibAuthenticationStatement* lasso_lib_authentication_statement_new_full ( const char* authenticationMethod, const char* authenticationInstant, const char* reauthenticateOnOrAfter, LassoSamlNameIdentifier* sp_identifier, LassoSamlNameIdentifier* idp_identifier ) GType lasso_lib_authn_context_get_type ( ) LassoNode* lasso_lib_authn_context_new ( ) GType lasso_lib_authn_request_envelope_get_type ( ) LassoLibAuthnRequestEnvelope* lasso_lib_authn_request_envelope_new ( ) LassoLibAuthnRequestEnvelope* lasso_lib_authn_request_envelope_new_full ( LassoLibAuthnRequest* authnRequest, char* providerID, char* assertionConsumerServiceURL ) GType lasso_lib_authn_request_get_type ( ) LassoLibAuthnRequest* lasso_lib_authn_request_new ( ) GType lasso_lib_authn_response_envelope_get_type ( ) LassoLibAuthnResponseEnvelope* lasso_lib_authn_response_envelope_new ( LassoLibAuthnResponse* response, char* assertionConsumerServiceURL ) GType lasso_lib_authn_response_get_type ( ) LassoNode* lasso_lib_authn_response_new ( char* providerID, LassoLibAuthnRequest* request ) GType lasso_lib_federation_termination_notification_get_type ( ) LassoNode* lasso_lib_federation_termination_notification_new ( ) LassoNode* lasso_lib_federation_termination_notification_new_full ( char* providerID, LassoSamlNameIdentifier* nameIdentifier, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_idp_entries_get_type ( ) LassoNode* lasso_lib_idp_entries_new ( ) GType lasso_lib_idp_entry_get_type ( ) LassoNode* lasso_lib_idp_entry_new ( ) GType lasso_lib_idp_list_get_type ( ) LassoNode* lasso_lib_idp_list_new ( ) GList* lasso_lib_logout_request_get_session_indexes ( LassoLibLogoutRequest* lib_logout_request ) GType lasso_lib_logout_request_get_type ( ) LassoNode* lasso_lib_logout_request_new ( ) LassoNode* lasso_lib_logout_request_new_full ( char* providerID, LassoSamlNameIdentifier* nameIdentifier, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) None lasso_lib_logout_request_set_session_indexes ( LassoLibLogoutRequest* lib_logout_request, GList* session_indexes ) GType lasso_lib_logout_response_get_type ( ) LassoNode* lasso_lib_logout_response_new ( ) LassoNode* lasso_lib_logout_response_new_full ( char* providerID, const char* statusCodeValue, LassoLibLogoutRequest* request, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_name_identifier_mapping_request_get_type ( ) LassoNode* lasso_lib_name_identifier_mapping_request_new ( ) LassoNode* lasso_lib_name_identifier_mapping_request_new_full ( char* providerID, LassoSamlNameIdentifier* nameIdentifier, const char* targetNamespace, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_name_identifier_mapping_response_get_type ( ) LassoNode* lasso_lib_name_identifier_mapping_response_new ( ) LassoNode* lasso_lib_name_identifier_mapping_response_new_full ( char* provideRID, const char* statusCodeValue, LassoLibNameIdentifierMappingRequest* request, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_register_name_identifier_request_get_type ( ) LassoNode* lasso_lib_register_name_identifier_request_new ( ) LassoNode* lasso_lib_register_name_identifier_request_new_full ( const char* providerID, LassoSamlNameIdentifier* idpNameIdentifier, LassoSamlNameIdentifier* spNameIdentifier, LassoSamlNameIdentifier* oldNameIdentifier, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_register_name_identifier_response_get_type ( ) LassoNode* lasso_lib_register_name_identifier_response_new ( ) LassoNode* lasso_lib_register_name_identifier_response_new_full ( const char* providerID, const char* statusCodeValue, LassoLibRegisterNameIdentifierRequest* request, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_request_authn_context_get_type ( ) LassoLibRequestAuthnContext* lasso_lib_request_authn_context_new ( ) GType lasso_lib_scoping_get_type ( ) LassoLibScoping* lasso_lib_scoping_new ( ) GType lasso_lib_status_response_get_type ( ) LassoNode* lasso_lib_status_response_new ( ) GType lasso_lib_subject_get_type ( ) LassoLibSubject* lasso_lib_subject_new ( ) lasso_error_t lasso_login_accept_sso ( LassoLogin* login ) lasso_error_t lasso_login_build_artifact_msg ( LassoLogin* login, LassoHttpMethod http_method ) lasso_error_t lasso_login_build_assertion ( LassoLogin* login, const char* authenticationMethod, const char* authenticationInstant, const char* reauthenticateOnOrAfter, const char* notBefore, const char* notOnOrAfter ) lasso_error_t lasso_login_build_authn_request_msg ( LassoLogin* login ) lasso_error_t lasso_login_build_authn_response_msg ( LassoLogin* login ) lasso_error_t lasso_login_build_request_msg ( LassoLogin* login ) lasso_error_t lasso_login_build_response_msg ( LassoLogin* login, gchar* remote_providerID ) None lasso_login_destroy ( LassoLogin* login ) gchar* lasso_login_dump ( LassoLogin* login ) LassoNode* lasso_login_get_assertion ( LassoLogin* login ) GType lasso_login_get_type ( ) lasso_error_t lasso_login_init_authn_request ( LassoLogin* login, const gchar* remote_providerID, LassoHttpMethod http_method ) lasso_error_t lasso_login_init_idp_initiated_authn_request ( LassoLogin* login, const gchar* remote_providerID ) lasso_error_t lasso_login_init_request ( LassoLogin* login, gchar* response_msg, LassoHttpMethod response_http_method ) gboolean lasso_login_must_ask_for_consent ( LassoLogin* login ) gboolean lasso_login_must_authenticate ( LassoLogin* login ) LassoLogin* lasso_login_new ( LassoServer* server ) LassoLogin* lasso_login_new_from_dump ( LassoServer* server, const gchar* dump ) lasso_error_t lasso_login_process_authn_request_msg ( LassoLogin* login, const char* authn_request_msg ) lasso_error_t lasso_login_process_authn_response_msg ( LassoLogin* login, gchar* authn_response_msg ) lasso_error_t lasso_login_process_paos_response_msg ( LassoLogin* login, gchar* msg ) lasso_error_t lasso_login_process_request_msg ( LassoLogin* login, gchar* request_msg ) lasso_error_t lasso_login_process_response_msg ( LassoLogin* login, gchar* response_msg ) lasso_error_t lasso_login_validate_request_msg ( LassoLogin* login, gboolean authentication_result, gboolean is_consent_obtained ) lasso_error_t lasso_logout_build_request_msg ( LassoLogout* logout ) lasso_error_t lasso_logout_build_response_msg ( LassoLogout* logout ) None lasso_logout_destroy ( LassoLogout* logout ) gchar* lasso_logout_dump ( LassoLogout* logout ) gchar* lasso_logout_get_next_providerID ( LassoLogout* logout ) GType lasso_logout_get_type ( ) lasso_error_t lasso_logout_init_request ( LassoLogout* logout, gchar* remote_providerID, LassoHttpMethod request_method ) LassoLogout* lasso_logout_new ( LassoServer* server ) LassoLogout* lasso_logout_new_from_dump ( LassoServer* server, const gchar* dump ) lasso_error_t lasso_logout_process_request_msg ( LassoLogout* logout, gchar* request_msg ) lasso_error_t lasso_logout_process_response_msg ( LassoLogout* logout, gchar* response_msg ) lasso_error_t lasso_logout_reset_providerID_index ( LassoLogout* logout ) lasso_error_t lasso_logout_validate_request ( LassoLogout* logout ) GType lasso_misc_text_node_get_type ( ) xmlNode* lasso_misc_text_node_get_xml_content ( LassoMiscTextNode* misc_text_node ) LassoNode* lasso_misc_text_node_new ( ) LassoMiscTextNode* lasso_misc_text_node_new_with_string ( const char* content ) LassoMiscTextNode* lasso_misc_text_node_new_with_xml_node ( xmlNode* xml_node ) None lasso_misc_text_node_set_xml_content ( LassoMiscTextNode* misc_text_node, xmlNode* node ) lasso_error_t lasso_name_id_management_build_request_msg ( LassoNameIdManagement* name_id_management ) lasso_error_t lasso_name_id_management_build_response_msg ( LassoNameIdManagement* name_id_management ) None lasso_name_id_management_destroy ( LassoNameIdManagement* name_id_management ) char* lasso_name_id_management_dump ( LassoNameIdManagement* name_id_management ) GType lasso_name_id_management_get_type ( ) lasso_error_t lasso_name_id_management_init_request ( LassoNameIdManagement* name_id_management, char* remote_provider_id, char* new_name_id, LassoHttpMethod http_method ) LassoNameIdManagement* lasso_name_id_management_new ( LassoServer* server ) LassoNameIdManagement* lasso_name_id_management_new_from_dump ( LassoServer* server, const char* dump ) lasso_error_t lasso_name_id_management_process_request_msg ( LassoNameIdManagement* name_id_management, gchar* request_msg ) lasso_error_t lasso_name_id_management_process_response_msg ( LassoNameIdManagement* name_id_management, gchar* response_msg ) lasso_error_t lasso_name_id_management_validate_request ( LassoNameIdManagement* name_id_management ) lasso_error_t lasso_name_identifier_mapping_build_request_msg ( LassoNameIdentifierMapping* mapping ) lasso_error_t lasso_name_identifier_mapping_build_response_msg ( LassoNameIdentifierMapping* mapping ) None lasso_name_identifier_mapping_destroy ( LassoNameIdentifierMapping* mapping ) GType lasso_name_identifier_mapping_get_type ( ) lasso_error_t lasso_name_identifier_mapping_init_request ( LassoNameIdentifierMapping* mapping, gchar* targetNamespace, gchar* remote_providerID ) LassoNameIdentifierMapping* lasso_name_identifier_mapping_new ( LassoServer* server ) lasso_error_t lasso_name_identifier_mapping_process_request_msg ( LassoNameIdentifierMapping* mapping, gchar* request_msg ) lasso_error_t lasso_name_identifier_mapping_process_response_msg ( LassoNameIdentifierMapping* mapping, gchar* response_msg ) lasso_error_t lasso_name_identifier_mapping_validate_request ( LassoNameIdentifierMapping* mapping ) lasso_error_t lasso_name_registration_build_request_msg ( LassoNameRegistration* name_registration ) lasso_error_t lasso_name_registration_build_response_msg ( LassoNameRegistration* name_registration ) None lasso_name_registration_destroy ( LassoNameRegistration* name_registration ) gchar* lasso_name_registration_dump ( LassoNameRegistration* name_registration ) GType lasso_name_registration_get_type ( ) lasso_error_t lasso_name_registration_init_request ( LassoNameRegistration* name_registration, char* remote_providerID, LassoHttpMethod http_method ) LassoNameRegistration* lasso_name_registration_new ( LassoServer* server ) LassoNameRegistration* lasso_name_registration_new_from_dump ( LassoServer* server, const char* dump ) lasso_error_t lasso_name_registration_process_request_msg ( LassoNameRegistration* name_registration, gchar* request_msg ) lasso_error_t lasso_name_registration_process_response_msg ( LassoNameRegistration* name_registration, gchar* response_msg ) lasso_error_t lasso_name_registration_validate_request ( LassoNameRegistration* name_registration ) None lasso_node_cleanup_original_xmlnodes ( LassoNode* node ) char* lasso_node_debug ( LassoNode* node, int level ) None lasso_node_destroy ( LassoNode* node ) char* lasso_node_dump ( LassoNode* node ) char* lasso_node_export_to_base64 ( LassoNode* node ) char* lasso_node_export_to_ecp_soap_response ( LassoNode* node, const char* assertionConsumerURL ) char* lasso_node_export_to_paos_request ( LassoNode* node, const char* issuer, const char* responseConsumerURL, const char* relay_state ) char* lasso_node_export_to_query ( LassoNode* node, LassoSignatureMethod sign_method, const char* private_key_file ) char* lasso_node_export_to_query_with_password ( LassoNode* node, LassoSignatureMethod sign_method, const char* private_key_file, const char* private_key_file_password ) char* lasso_node_export_to_soap ( LassoNode* node ) gchar* lasso_node_export_to_xml ( LassoNode* node ) const char* lasso_node_get_name ( LassoNode* node ) const char* lasso_node_get_namespace ( LassoNode* node ) xmlNode* lasso_node_get_original_xmlnode ( LassoNode* node ) GType lasso_node_get_type ( ) xmlNode* lasso_node_get_xmlNode ( LassoNode* node, gboolean lasso_dump ) LassoMessageFormat lasso_node_init_from_message ( LassoNode* node, const char* message ) gboolean lasso_node_init_from_query ( LassoNode* node, const char* query ) lasso_error_t lasso_node_init_from_xml ( LassoNode* node, xmlNode* xmlnode ) LassoNode* lasso_node_new ( ) LassoNode* lasso_node_new_from_dump ( const char* dump ) LassoNode* lasso_node_new_from_soap ( const char* soap ) LassoNode* lasso_node_new_from_xmlNode ( xmlNode* node ) None lasso_node_set_custom_namespace ( LassoNode* node, const char* prefix, const char* href ) None lasso_node_set_custom_nodename ( LassoNode* node, const char* nodename ) None lasso_node_set_original_xmlnode ( LassoNode* node, xmlNode* xmlnode ) char* lasso_profile_get_artifact ( LassoProfile* profile ) char* lasso_profile_get_artifact_message ( LassoProfile* profile ) LassoIdentity* lasso_profile_get_identity ( LassoProfile* profile ) LassoNode* lasso_profile_get_nameIdentifier ( LassoProfile* profile ) LassoRequestType lasso_profile_get_request_type_from_soap_msg ( const gchar* soap ) LassoSession* lasso_profile_get_session ( LassoProfile* profile ) LassoProfileSignatureHint lasso_profile_get_signature_hint ( LassoProfile* profile ) lasso_error_t lasso_profile_get_signature_status ( LassoProfile* profile ) LassoProfileSignatureVerifyHint lasso_profile_get_signature_verify_hint ( LassoProfile* profile ) GType lasso_profile_get_type ( ) gboolean lasso_profile_is_identity_dirty ( LassoProfile* profile ) gboolean lasso_profile_is_liberty_query ( const gchar* query ) gboolean lasso_profile_is_saml_query ( const gchar* query ) gboolean lasso_profile_is_session_dirty ( LassoProfile* profile ) None lasso_profile_set_artifact_message ( LassoProfile* profile, const char* message ) lasso_error_t lasso_profile_set_identity_from_dump ( LassoProfile* profile, const gchar* dump ) lasso_error_t lasso_profile_set_session_from_dump ( LassoProfile* profile, const gchar* dump ) None lasso_profile_set_signature_hint ( LassoProfile* profile, LassoProfileSignatureHint signature_hint ) None lasso_profile_set_signature_verify_hint ( LassoProfile* profile, LassoProfileSignatureVerifyHint signature_verify_hint ) lasso_error_t lasso_profile_set_soap_fault_response ( LassoProfile* profile, const char* faultcode, const char* faultstring, GList* details ) LassoProviderRole lasso_profile_sso_role_with ( LassoProfile* profile, const char* remote_provider_id ) gboolean lasso_provider_accept_http_method ( LassoProvider* provider, LassoProvider* remote_provider, LassoMdProtocolType protocol_type, LassoHttpMethod http_method, gboolean initiate_profile ) lasso_error_t lasso_provider_add_key ( LassoProvider* provider, LassoKey* key, gboolean after ) gchar* lasso_provider_get_assertion_consumer_service_url ( LassoProvider* provider, const char* service_id ) gchar* lasso_provider_get_base64_succinct_id ( const LassoProvider* provider ) char* lasso_provider_get_cache_duration ( LassoProvider* provider ) gchar* lasso_provider_get_default_name_id_format ( LassoProvider* provider ) LassoEncryptionMode lasso_provider_get_encryption_mode ( LassoProvider* provider ) LassoHttpMethod lasso_provider_get_first_http_method ( LassoProvider* provider, LassoProvider* remote_provider, LassoMdProtocolType protocol_type ) GList* lasso_provider_get_idp_supported_attributes ( LassoProvider* provider ) GList* lasso_provider_get_metadata_keys_for_role ( LassoProvider* provider, LassoProviderRole role ) GList* lasso_provider_get_metadata_list ( LassoProvider* provider, const char* name ) GList* lasso_provider_get_metadata_list_for_role ( const LassoProvider* provider, LassoProviderRole role, const char* name ) gchar* lasso_provider_get_metadata_one ( LassoProvider* provider, const char* name ) char* lasso_provider_get_metadata_one_for_role ( LassoProvider* provider, LassoProviderRole role, const char* name ) xmlNode* lasso_provider_get_organization ( const LassoProvider* provider ) LassoProtocolConformance lasso_provider_get_protocol_conformance ( const LassoProvider* provider ) LassoProviderRole lasso_provider_get_roles ( LassoProvider* provider ) const char* lasso_provider_get_sp_name_qualifier ( LassoProvider* provider ) GType lasso_provider_get_type ( ) char* lasso_provider_get_valid_until ( LassoProvider* provider ) gboolean lasso_provider_has_protocol_profile ( LassoProvider* provider, LassoMdProtocolType protocol_type, const char* protocol_profile ) gboolean lasso_provider_match_conformance ( LassoProvider* provider, LassoProvider* another_provider ) LassoProvider* lasso_provider_new ( LassoProviderRole role, const char* metadata, const char* public_key, const char* ca_cert_chain ) LassoProvider* lasso_provider_new_from_buffer ( LassoProviderRole role, const char* metadata, const char* public_key, const char* ca_cert_chain ) LassoProvider* lasso_provider_new_from_dump ( const gchar* dump ) LassoSaml2EncryptedElement* lasso_provider_saml2_node_encrypt ( const LassoProvider* provider, LassoNode* lasso_node ) None lasso_provider_set_encryption_mode ( LassoProvider* provider, LassoEncryptionMode encryption_mode ) None lasso_provider_set_encryption_sym_key_type ( LassoProvider* provider, LassoEncryptionSymKeyType encryption_sym_key_type ) lasso_error_t lasso_provider_set_server_signing_key ( LassoProvider* provider, LassoKey* key ) int lasso_provider_verify_signature ( LassoProvider* provider, const char* message, const char* id_attr_name, LassoMessageFormat format ) lasso_error_t lasso_provider_verify_single_node_signature ( LassoProvider* provider, LassoNode* node, const char* id_attr_name ) None lasso_register_dst_service ( const char* prefix, const char* href ) None lasso_register_idwsf2_dst_service ( const gchar* prefix, const gchar* href ) GType lasso_saml2_action_get_type ( ) LassoNode* lasso_saml2_action_new ( ) LassoNode* lasso_saml2_action_new_with_string ( char* content ) GType lasso_saml2_advice_get_type ( ) LassoNode* lasso_saml2_advice_new ( ) lasso_error_t lasso_saml2_assertion_add_attribute_with_node ( LassoSaml2Assertion* assertion, const char* name, const char* nameformat, LassoNode* content ) None lasso_saml2_assertion_add_audience_restriction ( LassoSaml2Assertion* saml2_assertion, const char* providerID ) None lasso_saml2_assertion_add_proxy_limit ( LassoSaml2Assertion* saml2_assertion, int proxy_count, GList* proxy_audiences ) LassoSaml2AssertionValidationState lasso_saml2_assertion_allows_proxying ( LassoSaml2Assertion* saml2_assertion ) LassoSaml2AssertionValidationState lasso_saml2_assertion_allows_proxying_to ( LassoSaml2Assertion* saml2_assertion, const char* audience ) lasso_error_t lasso_saml2_assertion_decrypt_subject ( LassoSaml2Assertion* assertion, LassoServer* server ) const char* lasso_saml2_assertion_get_in_response_to ( LassoSaml2Assertion* assertion ) LassoProvider* lasso_saml2_assertion_get_issuer_provider ( const LassoSaml2Assertion* saml2_assertion, const LassoServer* server ) LassoSaml2SubjectConfirmationData* lasso_saml2_assertion_get_subject_confirmation_data ( LassoSaml2Assertion* saml2_assertion, gboolean create ) GType lasso_saml2_assertion_get_type ( ) gboolean lasso_saml2_assertion_has_audience_restriction ( LassoSaml2Assertion* saml2_assertion ) gboolean lasso_saml2_assertion_has_one_time_use ( LassoSaml2Assertion* saml2_assertion ) gboolean lasso_saml2_assertion_is_audience_restricted ( LassoSaml2Assertion* saml2_assertion, char* providerID ) LassoNode* lasso_saml2_assertion_new ( ) None lasso_saml2_assertion_set_basic_conditions ( LassoSaml2Assertion* saml2_assertion, time_t tolerance, time_t length, gboolean one_time_use ) None lasso_saml2_assertion_set_one_time_use ( LassoSaml2Assertion* saml2_assertion, gboolean one_time_use ) None lasso_saml2_assertion_set_subject_confirmation_data ( LassoSaml2Assertion* saml2_assertion, time_t tolerance, time_t length, const char* Recipient, const char* InResponseTo, const char* Address ) None lasso_saml2_assertion_set_subject_confirmation_name_id ( LassoSaml2Assertion* saml2_assertion, LassoNode* node ) None lasso_saml2_assertion_set_subject_name_id ( LassoSaml2Assertion* saml2_assertion, LassoNode* node ) LassoSaml2AssertionValidationState lasso_saml2_assertion_validate_audience ( LassoSaml2Assertion* saml2_assertion, const gchar* audience ) LassoSaml2AssertionValidationState lasso_saml2_assertion_validate_conditions ( LassoSaml2Assertion* saml2_assertion, const char* relaying_party_providerID ) LassoSaml2AssertionValidationState lasso_saml2_assertion_validate_time_checks ( LassoSaml2Assertion* saml2_assertion, unsigned int tolerance, time_t now ) GType lasso_saml2_attribute_get_type ( ) LassoNode* lasso_saml2_attribute_new ( ) GType lasso_saml2_attribute_statement_get_type ( ) LassoNode* lasso_saml2_attribute_statement_new ( ) GType lasso_saml2_attribute_value_get_type ( ) LassoSaml2AttributeValue* lasso_saml2_attribute_value_new ( ) GType lasso_saml2_audience_restriction_get_type ( ) LassoNode* lasso_saml2_audience_restriction_new ( ) GType lasso_saml2_authn_context_get_type ( ) LassoNode* lasso_saml2_authn_context_new ( ) GType lasso_saml2_authn_statement_get_type ( ) LassoNode* lasso_saml2_authn_statement_new ( ) GType lasso_saml2_authz_decision_statement_get_type ( ) LassoNode* lasso_saml2_authz_decision_statement_new ( ) GType lasso_saml2_base_idabstract_get_type ( ) LassoNode* lasso_saml2_base_idabstract_new ( ) GType lasso_saml2_condition_abstract_get_type ( ) LassoNode* lasso_saml2_condition_abstract_new ( ) GType lasso_saml2_conditions_get_type ( ) LassoNode* lasso_saml2_conditions_new ( ) LassoSaml2EncryptedElement* lasso_saml2_encrypted_element_build_encrypted_persistent_name_id ( const char* id, const char* idpID, const LassoProvider* provider ) GType lasso_saml2_encrypted_element_get_type ( ) LassoNode* lasso_saml2_encrypted_element_new ( ) lasso_error_t lasso_saml2_encrypted_element_server_decrypt ( LassoSaml2EncryptedElement* encrypted_element, LassoServer* server, LassoNode** decrypted_node ) GType lasso_saml2_evidence_get_type ( ) LassoNode* lasso_saml2_evidence_new ( ) GType lasso_saml2_key_info_confirmation_data_get_type ( ) LassoNode* lasso_saml2_key_info_confirmation_data_new ( ) GList* lasso_saml2_key_info_confirmation_data_type_get_key_info ( LassoSaml2KeyInfoConfirmationDataType* kicdt ) GType lasso_saml2_key_info_confirmation_data_type_get_type ( ) LassoNode* lasso_saml2_key_info_confirmation_data_type_new ( ) None lasso_saml2_key_info_confirmation_data_type_set_key_info ( LassoSaml2KeyInfoConfirmationDataType* kicdt, GList* key_infos ) LassoSaml2NameID* lasso_saml2_name_id_build_persistent ( const char* id, const char* idpID, const char* providerID ) gboolean lasso_saml2_name_id_equals ( LassoSaml2NameID* name_id, LassoSaml2NameID* other_name_id ) GType lasso_saml2_name_id_get_type ( ) LassoNode* lasso_saml2_name_id_new ( ) LassoSaml2NameID* lasso_saml2_name_id_new_with_persistent_format ( const char* id, const char* idpID, const char* providerID ) LassoNode* lasso_saml2_name_id_new_with_string ( char* content ) GType lasso_saml2_one_time_use_get_type ( ) LassoNode* lasso_saml2_one_time_use_new ( ) GType lasso_saml2_proxy_restriction_get_type ( ) LassoNode* lasso_saml2_proxy_restriction_new ( ) GType lasso_saml2_statement_abstract_get_type ( ) LassoNode* lasso_saml2_statement_abstract_new ( ) GType lasso_saml2_subject_confirmation_data_get_type ( ) LassoNode* lasso_saml2_subject_confirmation_data_new ( ) GType lasso_saml2_subject_confirmation_get_type ( ) LassoNode* lasso_saml2_subject_confirmation_new ( ) GType lasso_saml2_subject_get_type ( ) GType lasso_saml2_subject_locality_get_type ( ) LassoNode* lasso_saml2_subject_locality_new ( ) LassoNode* lasso_saml2_subject_new ( ) GType lasso_saml_advice_get_type ( ) LassoNode* lasso_saml_advice_new ( ) GType lasso_saml_assertion_get_type ( ) LassoSamlAssertion* lasso_saml_assertion_new ( ) GType lasso_saml_attribute_designator_get_type ( ) LassoNode* lasso_saml_attribute_designator_new ( ) GType lasso_saml_attribute_get_type ( ) LassoSamlAttribute* lasso_saml_attribute_new ( ) GType lasso_saml_attribute_statement_get_type ( ) LassoSamlAttributeStatement* lasso_saml_attribute_statement_new ( ) GType lasso_saml_attribute_value_get_type ( ) LassoSamlAttributeValue* lasso_saml_attribute_value_new ( ) GType lasso_saml_audience_restriction_condition_get_type ( ) LassoSamlAudienceRestrictionCondition* lasso_saml_audience_restriction_condition_new ( ) LassoSamlAudienceRestrictionCondition* lasso_saml_audience_restriction_condition_new_full ( const char* audience ) GType lasso_saml_authentication_statement_get_type ( ) LassoNode* lasso_saml_authentication_statement_new ( ) GType lasso_saml_authority_binding_get_type ( ) LassoNode* lasso_saml_authority_binding_new ( ) GType lasso_saml_condition_abstract_get_type ( ) GType lasso_saml_conditions_get_type ( ) LassoSamlConditions* lasso_saml_conditions_new ( ) gboolean lasso_saml_name_identifier_equals ( LassoSamlNameIdentifier* a, LassoSamlNameIdentifier* b ) GType lasso_saml_name_identifier_get_type ( ) LassoSamlNameIdentifier* lasso_saml_name_identifier_new ( ) LassoSamlNameIdentifier* lasso_saml_name_identifier_new_from_xmlNode ( xmlNode* xmlnode ) GType lasso_saml_statement_abstract_get_type ( ) GType lasso_saml_subject_confirmation_get_type ( ) LassoSamlSubjectConfirmation* lasso_saml_subject_confirmation_new ( ) GType lasso_saml_subject_get_type ( ) GType lasso_saml_subject_locality_get_type ( ) LassoNode* lasso_saml_subject_locality_new ( ) LassoNode* lasso_saml_subject_new ( ) GType lasso_saml_subject_statement_abstract_get_type ( ) GType lasso_saml_subject_statement_get_type ( ) LassoNode* lasso_saml_subject_statement_new ( ) GType lasso_samlp2_artifact_resolve_get_type ( ) LassoNode* lasso_samlp2_artifact_resolve_new ( ) GType lasso_samlp2_artifact_response_get_type ( ) LassoNode* lasso_samlp2_artifact_response_new ( ) GType lasso_samlp2_assertion_id_request_get_type ( ) LassoNode* lasso_samlp2_assertion_id_request_new ( ) GType lasso_samlp2_attribute_query_get_type ( ) LassoNode* lasso_samlp2_attribute_query_new ( ) GType lasso_samlp2_authn_query_get_type ( ) LassoNode* lasso_samlp2_authn_query_new ( ) GType lasso_samlp2_authn_request_get_type ( ) LassoNode* lasso_samlp2_authn_request_new ( ) GType lasso_samlp2_authz_decision_query_get_type ( ) LassoNode* lasso_samlp2_authz_decision_query_new ( ) GType lasso_samlp2_extensions_get_type ( ) LassoNode* lasso_samlp2_extensions_new ( ) GType lasso_samlp2_idp_entry_get_type ( ) LassoNode* lasso_samlp2_idp_entry_new ( ) GType lasso_samlp2_idp_list_get_type ( ) LassoNode* lasso_samlp2_idp_list_new ( ) GList* lasso_samlp2_logout_request_get_session_indexes ( LassoSamlp2LogoutRequest* logout_request ) GType lasso_samlp2_logout_request_get_type ( ) LassoNode* lasso_samlp2_logout_request_new ( ) None lasso_samlp2_logout_request_set_session_indexes ( LassoSamlp2LogoutRequest* logout_request, GList* session_index ) GType lasso_samlp2_logout_response_get_type ( ) LassoNode* lasso_samlp2_logout_response_new ( ) GType lasso_samlp2_manage_name_id_request_get_type ( ) LassoNode* lasso_samlp2_manage_name_id_request_new ( ) GType lasso_samlp2_manage_name_id_response_get_type ( ) LassoNode* lasso_samlp2_manage_name_id_response_new ( ) GType lasso_samlp2_name_id_mapping_request_get_type ( ) LassoNode* lasso_samlp2_name_id_mapping_request_new ( ) GType lasso_samlp2_name_id_mapping_response_get_type ( ) LassoNode* lasso_samlp2_name_id_mapping_response_new ( ) GType lasso_samlp2_name_id_policy_get_type ( ) LassoNode* lasso_samlp2_name_id_policy_new ( ) GType lasso_samlp2_request_abstract_get_type ( ) LassoNode* lasso_samlp2_request_abstract_new ( ) GType lasso_samlp2_requested_authn_context_get_type ( ) LassoNode* lasso_samlp2_requested_authn_context_new ( ) GType lasso_samlp2_response_get_type ( ) LassoNode* lasso_samlp2_response_new ( ) GType lasso_samlp2_scoping_get_type ( ) LassoNode* lasso_samlp2_scoping_new ( ) GType lasso_samlp2_status_code_get_type ( ) LassoNode* lasso_samlp2_status_code_new ( ) GType lasso_samlp2_status_detail_get_type ( ) LassoNode* lasso_samlp2_status_detail_new ( ) GType lasso_samlp2_status_get_type ( ) LassoNode* lasso_samlp2_status_new ( ) GType lasso_samlp2_status_response_get_type ( ) LassoNode* lasso_samlp2_status_response_new ( ) GType lasso_samlp2_subject_query_abstract_get_type ( ) LassoNode* lasso_samlp2_subject_query_abstract_new ( ) GType lasso_samlp2_terminate_get_type ( ) LassoNode* lasso_samlp2_terminate_new ( ) GType lasso_samlp_request_abstract_get_type ( ) GType lasso_samlp_request_get_type ( ) LassoNode* lasso_samlp_request_new ( ) None lasso_samlp_response_abstract_fill ( LassoSamlpResponseAbstract* response, const char* InResponseTo, const char* Recipient ) GType lasso_samlp_response_abstract_get_type ( ) GType lasso_samlp_response_get_type ( ) LassoNode* lasso_samlp_response_new ( ) GType lasso_samlp_status_code_get_type ( ) LassoSamlpStatusCode* lasso_samlp_status_code_new ( ) GType lasso_samlp_status_get_type ( ) LassoSamlpStatus* lasso_samlp_status_new ( ) lasso_error_t lasso_server_add_provider ( LassoServer* server, LassoProviderRole role, const gchar* metadata, const gchar* public_key, const gchar* ca_cert_chain ) lasso_error_t lasso_server_add_provider2 ( LassoServer* server, LassoProvider* provider ) lasso_error_t lasso_server_add_provider_from_buffer ( LassoServer* server, LassoProviderRole role, const gchar* metadata, const gchar* public_key, const gchar* ca_cert_chain ) None lasso_server_destroy ( LassoServer* server ) gchar* lasso_server_dump ( LassoServer* server ) LassoProvider* lasso_server_get_provider ( const LassoServer* server, const gchar* providerID ) GType lasso_server_get_type ( ) lasso_error_t lasso_server_load_affiliation ( LassoServer* server, const gchar* filename ) lasso_error_t lasso_server_load_metadata ( LassoServer* server, LassoProviderRole role, const gchar* federation_file, const gchar* trusted_roots, GList* blacklisted_entity_ids, GList** loaded_entity_ids, LassoServerLoadMetadataFlag flags ) LassoServer* lasso_server_new ( const gchar* metadata, const gchar* private_key, const gchar* private_key_password, const gchar* certificate ) LassoServer* lasso_server_new_from_buffers ( const gchar* metadata, const gchar* private_key_content, const gchar* private_key_password, const gchar* certificate_content ) LassoServer* lasso_server_new_from_dump ( const gchar* dump ) lasso_error_t lasso_server_saml2_assertion_setup_signature ( LassoServer* server, LassoSaml2Assertion* saml2_assertion ) lasso_error_t lasso_server_set_encryption_private_key ( LassoServer* server, const gchar* filename_or_buffer ) lasso_error_t lasso_server_set_encryption_private_key_with_password ( LassoServer* server, const gchar* filename_or_buffer, const gchar* password ) lasso_error_t lasso_session_add_assertion ( LassoSession* session, const char* providerID, LassoNode* assertion ) None lasso_session_destroy ( LassoSession* session ) gchar* lasso_session_dump ( LassoSession* session ) LassoNode* lasso_session_get_assertion ( LassoSession* session, const gchar* providerID ) GList* lasso_session_get_assertion_ids ( LassoSession* session, const gchar* providerID ) GList* lasso_session_get_assertions ( LassoSession* session, const char* provider_id ) GList* lasso_session_get_name_ids ( LassoSession* session, const gchar* providerID ) gchar* lasso_session_get_provider_index ( LassoSession* session, gint index ) GList* lasso_session_get_session_indexes ( LassoSession* session, const gchar* providerID, LassoNode* name_id ) GType lasso_session_get_type ( ) gboolean lasso_session_is_empty ( LassoSession* session ) LassoSession* lasso_session_new ( ) LassoSession* lasso_session_new_from_dump ( const gchar* dump ) lasso_error_t lasso_session_remove_assertion ( LassoSession* session, const gchar* providerID ) None lasso_set_flag ( char* flag ) lasso_error_t lasso_shutdown ( ) GType lasso_soap_body_get_type ( ) LassoSoapBody* lasso_soap_body_new ( ) LassoSoapBody* lasso_soap_body_new_from_message ( const gchar* message ) GType lasso_soap_detail_get_type ( ) LassoSoapDetail* lasso_soap_detail_new ( ) LassoSoapDetail* lasso_soap_detail_new_from_message ( const gchar* message ) GType lasso_soap_envelope_get_type ( ) LassoSoapEnvelope* lasso_soap_envelope_new ( LassoSoapBody* body ) LassoSoapEnvelope* lasso_soap_envelope_new_from_message ( const gchar* message ) GType lasso_soap_fault_get_type ( ) LassoSoapFault* lasso_soap_fault_new ( ) LassoSoapFault* lasso_soap_fault_new_from_message ( const gchar* message ) LassoSoapFault* lasso_soap_fault_new_full ( const char* faultcode, const char* faultstring ) GType lasso_soap_header_get_type ( ) LassoSoapHeader* lasso_soap_header_new ( ) LassoSoapHeader* lasso_soap_header_new_from_message ( const gchar* message ) const char* lasso_strerror ( int error_code ) lasso-2.8.2/abi/PaxHeaders/abi-2.2.10000644000000000000000000000013113766621500013576 xustar0029 mtime=1608196928.71889494 30 atime=1678098069.989489039 30 ctime=1678814319.929947161 lasso-2.8.2/abi/abi-2.2.10000644000175000017500000015164513766621500017063 0ustar00bdauvergnebdauvergne00000000000000LASSO_ASSERTION_QUERY_REQUEST_TYPE_ASSERTION_ID LASSO_ASSERTION_QUERY_REQUEST_TYPE_ATTRIBUTE LASSO_ASSERTION_QUERY_REQUEST_TYPE_AUTHN LASSO_ASSERTION_QUERY_REQUEST_TYPE_AUTHZ_DECISION LASSO_ASSERTION_QUERY_REQUEST_TYPE_UNSET LASSO_CHECK_VERSIONABI_COMPATIBLE LASSO_CHECK_VERSION_EXACT LASSO_CHECK_VERSION_NUMERIC LASSO_DEFEDERATION_ERROR_MISSING_NAME_IDENTIFIER LASSO_DS_HREF LASSO_DS_PREFIX LASSO_ECP_HREF LASSO_ECP_PREFIX LASSO_ENCRYPTION_MODE_ASSERTION LASSO_ENCRYPTION_MODE_NAMEID LASSO_ENCRYPTION_MODE_NONE LASSO_ENCRYPTION_SYM_KEY_TYPE_3DES LASSO_ENCRYPTION_SYM_KEY_TYPE_AES_128 LASSO_ENCRYPTION_SYM_KEY_TYPE_AES_256 LASSO_ENCRYPTION_SYM_KEY_TYPE_DEFAULT LASSO_ERROR_UNDEFINED LASSO_ERROR_UNIMPLEMENTED LASSO_HTTP_METHOD_ANY LASSO_HTTP_METHOD_ARTIFACT_GET LASSO_HTTP_METHOD_ARTIFACT_POST LASSO_HTTP_METHOD_GET LASSO_HTTP_METHOD_IDP_INITIATED LASSO_HTTP_METHOD_NONE LASSO_HTTP_METHOD_POST LASSO_HTTP_METHOD_REDIRECT LASSO_HTTP_METHOD_SOAP LASSO_LASSO_HREF LASSO_LASSO_PREFIX LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_INTERNET_PROTOCOL LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_INTERNET_PROTOCOL_PASSWORD LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_ONE_FACTOR_CONTRACT LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_ONE_FACTOR_UNREGISTERED LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_TWO_FACTOR_CONTRACT LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_TWO_FACTOR_UNREGISTERED LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PASSWORD LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PASSWORD_PROTECTED_TRANSPORT LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PREVIOUS_SESSION LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SMARTCARD LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SMARTCARD_PKI LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SOFTWARE_PKI LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_TIME_SYNC_TOKEN LASSO_LIB_AUTHN_CONTEXT_COMPARISON_BETTER LASSO_LIB_AUTHN_CONTEXT_COMPARISON_EXACT LASSO_LIB_AUTHN_CONTEXT_COMPARISON_MAXIMUM LASSO_LIB_AUTHN_CONTEXT_COMPARISON_MINIMUM LASSO_LIB_CONSENT_INAPPLICABLE LASSO_LIB_CONSENT_OBTAINED LASSO_LIB_CONSENT_OBTAINED_CURRENT_EXPLICIT LASSO_LIB_CONSENT_OBTAINED_CURRENT_IMPLICIT LASSO_LIB_CONSENT_OBTAINED_PRIOR LASSO_LIB_CONSENT_UNAVAILABLE LASSO_LIB_HREF LASSO_LIB_MAJOR_VERSION_N LASSO_LIB_MINOR_VERSION_N LASSO_LIB_NAMEID_POLICY_TYPE_ANY LASSO_LIB_NAMEID_POLICY_TYPE_FEDERATED LASSO_LIB_NAMEID_POLICY_TYPE_NONE LASSO_LIB_NAMEID_POLICY_TYPE_ONE_TIME LASSO_LIB_NAME_IDENTIFIER_FORMAT_ENCRYPTED LASSO_LIB_NAME_IDENTIFIER_FORMAT_ENTITYID LASSO_LIB_NAME_IDENTIFIER_FORMAT_FEDERATED LASSO_LIB_NAME_IDENTIFIER_FORMAT_ONE_TIME LASSO_LIB_PREFIX LASSO_LIB_PROTOCOL_PROFILE_BRWS_ART LASSO_LIB_PROTOCOL_PROFILE_BRWS_LECP LASSO_LIB_PROTOCOL_PROFILE_BRWS_POST LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_IDP_HTTP LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_IDP_SOAP LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_SP_SOAP LASSO_LIB_PROTOCOL_PROFILE_NIM_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_RNI_IDP_HTTP LASSO_LIB_PROTOCOL_PROFILE_RNI_IDP_SOAP LASSO_LIB_PROTOCOL_PROFILE_RNI_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_RNI_SP_SOAP LASSO_LIB_PROTOCOL_PROFILE_SLO_IDP_HTTP LASSO_LIB_PROTOCOL_PROFILE_SLO_IDP_SOAP LASSO_LIB_PROTOCOL_PROFILE_SLO_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_SLO_SP_SOAP LASSO_LIB_STATUS_CODE_FEDERATION_DOES_NOT_EXIST LASSO_LIB_STATUS_CODE_INVALID_ASSERTION_CONSUMER_SERVICE_INDEX LASSO_LIB_STATUS_CODE_INVALID_SIGNATURE LASSO_LIB_STATUS_CODE_NO_AUTHN_CONTEXT LASSO_LIB_STATUS_CODE_NO_AVAILABLEIDP LASSO_LIB_STATUS_CODE_NO_PASSIVE LASSO_LIB_STATUS_CODE_NO_SUPPORTEDIDP LASSO_LIB_STATUS_CODE_PROXY_COUNT_EXCEEDED LASSO_LIB_STATUS_CODE_UNKNOWN_PRINCIPAL LASSO_LIB_STATUS_CODE_UNSIGNED_AUTHN_REQUEST LASSO_LIB_STATUS_CODE_UNSUPPORTED_PROFILE LASSO_LOGIN_ERROR_ASSERTION_REPLAY LASSO_LOGIN_ERROR_CONSENT_NOT_OBTAINED LASSO_LOGIN_ERROR_FEDERATION_NOT_FOUND LASSO_LOGIN_ERROR_INVALID_NAMEIDPOLICY LASSO_LOGIN_ERROR_INVALID_SIGNATURE LASSO_LOGIN_ERROR_NO_DEFAULT_ENDPOINT LASSO_LOGIN_ERROR_REQUEST_DENIED LASSO_LOGIN_ERROR_STATUS_NOT_SUCCESS LASSO_LOGIN_ERROR_UNKNOWN_PRINCIPAL LASSO_LOGIN_ERROR_UNSIGNED_AUTHN_REQUEST LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_ART LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_LECP LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_POST LASSO_LOGIN_PROTOCOL_PROFILE_REDIRECT LASSO_LOGOUT_ERROR_FEDERATION_NOT_FOUND LASSO_LOGOUT_ERROR_REQUEST_DENIED LASSO_LOGOUT_ERROR_UNKNOWN_PRINCIPAL LASSO_LOGOUT_ERROR_UNSUPPORTED_PROFILE LASSO_MD_PROTOCOL_TYPE_ARTIFACT_RESOLUTION LASSO_MD_PROTOCOL_TYPE_ASSERTION_ID_REQUEST LASSO_MD_PROTOCOL_TYPE_FEDERATION_TERMINATION LASSO_MD_PROTOCOL_TYPE_MANAGE_NAME_ID LASSO_MD_PROTOCOL_TYPE_NAME_IDENTIFIER_MAPPING LASSO_MD_PROTOCOL_TYPE_REGISTER_NAME_IDENTIFIER LASSO_MD_PROTOCOL_TYPE_SINGLE_LOGOUT LASSO_MD_PROTOCOL_TYPE_SINGLE_SIGN_ON LASSO_MESSAGE_FORMAT_BASE64 LASSO_MESSAGE_FORMAT_ERROR LASSO_MESSAGE_FORMAT_QUERY LASSO_MESSAGE_FORMAT_SOAP LASSO_MESSAGE_FORMAT_UNKNOWN LASSO_MESSAGE_FORMAT_XML LASSO_METADATA_HREF LASSO_METADATA_PREFIX LASSO_NAME_IDENTIFIER_MAPPING_ERROR_FORBIDDEN_CALL_ON_THIS_SIDE LASSO_NAME_IDENTIFIER_MAPPING_ERROR_MISSING_TARGET_IDENTIFIER LASSO_NAME_IDENTIFIER_MAPPING_ERROR_MISSING_TARGET_NAMESPACE LASSO_PAOS_HREF LASSO_PAOS_PREFIX LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ LASSO_PARAM_ERROR_CHECK_FAILED LASSO_PARAM_ERROR_INVALID_VALUE LASSO_PARAM_ERROR_NON_INITIALIZED_OBJECT LASSO_PROFILE_ERROR_BAD_IDENTITY_DUMP LASSO_PROFILE_ERROR_BAD_SESSION_DUMP LASSO_PROFILE_ERROR_BUILDING_MESSAGE_FAILED LASSO_PROFILE_ERROR_BUILDING_QUERY_FAILED LASSO_PROFILE_ERROR_BUILDING_REQUEST_FAILED LASSO_PROFILE_ERROR_BUILDING_RESPONSE_FAILED LASSO_PROFILE_ERROR_FEDERATION_NOT_FOUND LASSO_PROFILE_ERROR_IDENTITY_NOT_FOUND LASSO_PROFILE_ERROR_INVALID_ARTIFACT LASSO_PROFILE_ERROR_INVALID_HTTP_METHOD LASSO_PROFILE_ERROR_INVALID_MSG LASSO_PROFILE_ERROR_INVALID_POST_MSG LASSO_PROFILE_ERROR_INVALID_PROTOCOLPROFILE LASSO_PROFILE_ERROR_INVALID_QUERY LASSO_PROFILE_ERROR_INVALID_SOAP_MSG LASSO_PROFILE_ERROR_MISSING_ARTIFACT LASSO_PROFILE_ERROR_MISSING_ASSERTION LASSO_PROFILE_ERROR_MISSING_ENCRYPTION_PRIVATE_KEY LASSO_PROFILE_ERROR_MISSING_ENDPOINT_REFERENCE LASSO_PROFILE_ERROR_MISSING_ENDPOINT_REFERENCE_ADDRESS LASSO_PROFILE_ERROR_MISSING_ISSUER LASSO_PROFILE_ERROR_MISSING_NAME_IDENTIFIER LASSO_PROFILE_ERROR_MISSING_REMOTE_PROVIDERID LASSO_PROFILE_ERROR_MISSING_REQUEST LASSO_PROFILE_ERROR_MISSING_RESOURCE_OFFERING LASSO_PROFILE_ERROR_MISSING_RESPONSE LASSO_PROFILE_ERROR_MISSING_SERVICE_DESCRIPTION LASSO_PROFILE_ERROR_MISSING_SERVICE_INSTANCE LASSO_PROFILE_ERROR_MISSING_SERVICE_TYPE LASSO_PROFILE_ERROR_MISSING_STATUS_CODE LASSO_PROFILE_ERROR_MISSING_SUBJECT LASSO_PROFILE_ERROR_NAME_IDENTIFIER_NOT_FOUND LASSO_PROFILE_ERROR_SESSION_NOT_FOUND LASSO_PROFILE_ERROR_STATUS_NOT_SUCCESS LASSO_PROFILE_ERROR_UNKNOWN_PROFILE_URL LASSO_PROFILE_ERROR_UNSUPPORTED_PROFILE LASSO_PROTOCOL_LIBERTY_1_0 LASSO_PROTOCOL_LIBERTY_1_1 LASSO_PROTOCOL_LIBERTY_1_2 LASSO_PROTOCOL_NONE LASSO_PROTOCOL_SAML_2_0 LASSO_PROVIDER_ROLE_IDP LASSO_PROVIDER_ROLE_NONE LASSO_PROVIDER_ROLE_SP LASSO_REQUEST_TYPE_DEFEDERATION LASSO_REQUEST_TYPE_INVALID LASSO_REQUEST_TYPE_LECP LASSO_REQUEST_TYPE_LOGIN LASSO_REQUEST_TYPE_LOGOUT LASSO_REQUEST_TYPE_NAME_IDENTIFIER_MAPPING LASSO_REQUEST_TYPE_NAME_ID_MANAGEMENT LASSO_REQUEST_TYPE_NAME_REGISTRATION LASSO_REQUEST_TYPE_SASL_REQUEST LASSO_SAML2_ASSERTION_HREF LASSO_SAML2_ASSERTION_PREFIX LASSO_SAML2_ATTRIBUTE_NAME_EPR LASSO_SAML2_ATTRIBUTE_NAME_FORMAT_URI LASSO_SAML2_AUTHN_CONTEXT_AUTHENTICATED_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_INTERNET_PROTOCOL LASSO_SAML2_AUTHN_CONTEXT_INTERNET_PROTOCOL_PASSWORD LASSO_SAML2_AUTHN_CONTEXT_KERBEROS LASSO_SAML2_AUTHN_CONTEXT_MOBILE_ONE_FACTOR_CONTRACT LASSO_SAML2_AUTHN_CONTEXT_MOBILE_ONE_FACTOR_UNREGISTERED LASSO_SAML2_AUTHN_CONTEXT_MOBILE_TWO_FACTOR_CONTRACT LASSO_SAML2_AUTHN_CONTEXT_MOBILE_TWO_FACTOR_UNREGISTERED LASSO_SAML2_AUTHN_CONTEXT_NOMAD_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_PASSWORD LASSO_SAML2_AUTHN_CONTEXT_PASSWORD_PROTECTED_TRANSPORT LASSO_SAML2_AUTHN_CONTEXT_PERSONALIZED_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_PGP LASSO_SAML2_AUTHN_CONTEXT_PREVIOUS_SESSION LASSO_SAML2_AUTHN_CONTEXT_SECURE_REMOTE_PASSWORD LASSO_SAML2_AUTHN_CONTEXT_SMARTCARD LASSO_SAML2_AUTHN_CONTEXT_SMARTCARD_PKI LASSO_SAML2_AUTHN_CONTEXT_SOFTWARE_PKI LASSO_SAML2_AUTHN_CONTEXT_SPKI LASSO_SAML2_AUTHN_CONTEXT_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_TIME_SYNC_TOKEN LASSO_SAML2_AUTHN_CONTEXT_TLS_CLIENT LASSO_SAML2_AUTHN_CONTEXT_X509 LASSO_SAML2_AUTHN_CONTEXT_XMLDSIG LASSO_SAML2_CONFIRMATION_METHOD_BEARER LASSO_SAML2_CONSENT_EXPLICIT LASSO_SAML2_CONSENT_IMPLICIT LASSO_SAML2_CONSENT_INAPPLICABLE LASSO_SAML2_CONSENT_OBTAINED LASSO_SAML2_CONSENT_PRIOR LASSO_SAML2_CONSENT_UNAVAILABLE LASSO_SAML2_DEFLATE_ENCODING LASSO_SAML2_METADATA_BINDING_ARTIFACT LASSO_SAML2_METADATA_BINDING_PAOS LASSO_SAML2_METADATA_BINDING_POST LASSO_SAML2_METADATA_BINDING_REDIRECT LASSO_SAML2_METADATA_BINDING_SOAP LASSO_SAML2_METADATA_HREF LASSO_SAML2_NAME_IDENTIFIER_FORMAT_EMAIL LASSO_SAML2_NAME_IDENTIFIER_FORMAT_ENCRYPTED LASSO_SAML2_NAME_IDENTIFIER_FORMAT_ENTITY LASSO_SAML2_NAME_IDENTIFIER_FORMAT_KERBEROS LASSO_SAML2_NAME_IDENTIFIER_FORMAT_PERSISTENT LASSO_SAML2_NAME_IDENTIFIER_FORMAT_TRANSIENT LASSO_SAML2_NAME_IDENTIFIER_FORMAT_UNSPECIFIED LASSO_SAML2_NAME_IDENTIFIER_FORMAT_WINDOWS LASSO_SAML2_NAME_IDENTIFIER_FORMAT_X509 LASSO_SAML2_PROTOCOL_HREF LASSO_SAML2_PROTOCOL_PREFIX LASSO_SAML2_STATUS_CODE_AUTHN_FAILED LASSO_SAML2_STATUS_CODE_INVALID_ATTR_NAME LASSO_SAML2_STATUS_CODE_INVALID_NAME_ID_POLICY LASSO_SAML2_STATUS_CODE_NO_AUTHN_CONTEXT LASSO_SAML2_STATUS_CODE_NO_AVAILABLE_IDP LASSO_SAML2_STATUS_CODE_NO_PASSIVE LASSO_SAML2_STATUS_CODE_NO_SUPPORTED_IDP LASSO_SAML2_STATUS_CODE_PARTIAL_LOGOUT LASSO_SAML2_STATUS_CODE_PROXY_COUNT_EXCEEDED LASSO_SAML2_STATUS_CODE_REQUESTER LASSO_SAML2_STATUS_CODE_REQUEST_DENIED LASSO_SAML2_STATUS_CODE_REQUEST_UNSUPPORTED LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_DEPRECATED LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_TOO_HIGH LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_TOO_LOW LASSO_SAML2_STATUS_CODE_RESOURCE_NOT_RECOGNIZED LASSO_SAML2_STATUS_CODE_RESPONDER LASSO_SAML2_STATUS_CODE_SUCCESS LASSO_SAML2_STATUS_CODE_TOO_MANY_RESPONSES LASSO_SAML2_STATUS_CODE_UNKNOWN_ATTR_PROFILE LASSO_SAML2_STATUS_CODE_UNKNOWN_PRINCIPAL LASSO_SAML2_STATUS_CODE_UNSUPPORTED_BINDING LASSO_SAML2_STATUS_CODE_VERSION_MISMATCH LASSO_SAML_ASSERTION_HREF LASSO_SAML_ASSERTION_PREFIX LASSO_SAML_AUTHENTICATION_METHODS_PKI LASSO_SAML_AUTHENTICATION_METHOD_HARDWARE_TOKEN LASSO_SAML_AUTHENTICATION_METHOD_KERBEROS LASSO_SAML_AUTHENTICATION_METHOD_LIBERTY LASSO_SAML_AUTHENTICATION_METHOD_PASSWORD LASSO_SAML_AUTHENTICATION_METHOD_PGP LASSO_SAML_AUTHENTICATION_METHOD_SECURE_REMOTE_PASSWORD LASSO_SAML_AUTHENTICATION_METHOD_SMARTCARD_PKI LASSO_SAML_AUTHENTICATION_METHOD_SOFTWARE_PKI LASSO_SAML_AUTHENTICATION_METHOD_UNSPECIFIED LASSO_SAML_AUTHENTICATION_METHOD_XKMS LASSO_SAML_AUTHENTICATION_METHOD_XMLD_SIG LASSO_SAML_CONFIRMATION_METHOD_ARTIFACT LASSO_SAML_CONFIRMATION_METHOD_ARTIFACT01 LASSO_SAML_CONFIRMATION_METHOD_BEARER LASSO_SAML_CONFIRMATION_METHOD_HOLDER_OF_KEY LASSO_SAML_CONFIRMATION_METHOD_SENDER_VOUCHES LASSO_SAML_MAJOR_VERSION_N LASSO_SAML_MINOR_VERSION_N LASSO_SAML_PROTOCOL_HREF LASSO_SAML_PROTOCOL_PREFIX LASSO_SAML_STATUS_CODE_REQUESTER LASSO_SAML_STATUS_CODE_REQUEST_DENIED LASSO_SAML_STATUS_CODE_REQUEST_VERSION_DEPRECATED LASSO_SAML_STATUS_CODE_REQUEST_VERSION_TOO_HIGH LASSO_SAML_STATUS_CODE_REQUEST_VERSION_TOO_LOW LASSO_SAML_STATUS_CODE_RESOURCE_NOT_RECOGNIZED LASSO_SAML_STATUS_CODE_RESPONDER LASSO_SAML_STATUS_CODE_SUCCESS LASSO_SAML_STATUS_CODE_TOO_MANY_RESPONSES LASSO_SAML_STATUS_CODE_VERSION_MISMATCH LASSO_SERVER_ERROR_ADD_PROVIDER_FAILED LASSO_SERVER_ERROR_ADD_PROVIDER_PROTOCOL_MISMATCH LASSO_SERVER_ERROR_INVALID_XML LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND LASSO_SERVER_ERROR_SET_ENCRYPTION_PRIVATE_KEY_FAILED LASSO_SIGNATURE_METHOD_DSA_SHA1 LASSO_SIGNATURE_METHOD_RSA_SHA1 LASSO_SIGNATURE_TYPE_NONE LASSO_SIGNATURE_TYPE_SIMPLE LASSO_SIGNATURE_TYPE_WITHX509 LASSO_SOAP_ENV_ACTOR LASSO_SOAP_ENV_HREF LASSO_SOAP_ENV_PREFIX LASSO_SOAP_ERROR_MISSING_BODY LASSO_SOAP_ERROR_MISSING_ENVELOPE LASSO_SOAP_ERROR_MISSING_HEADER LASSO_SOAP_ERROR_MISSING_SOAP_FAULT_DETAIL LASSO_SOAP_FAULT_CODE_SERVER LASSO_XML_ERROR_ATTR_NOT_FOUND LASSO_XML_ERROR_ATTR_VALUE_NOT_FOUND LASSO_XML_ERROR_INVALID_FILE LASSO_XML_ERROR_MISSING_NAMESPACE LASSO_XML_ERROR_NODE_CONTENT_NOT_FOUND LASSO_XML_ERROR_NODE_NOT_FOUND LASSO_XML_ERROR_OBJECT_CONSTRUCTION_FAILED LASSO_XSI_HREF LASSO_XSI_PREFIX struct LassoAssertionQuery { LassoAssertionQueryPrivate* private_data } LassoAssertionQueryRequestType LassoCheckVersionMode struct LassoDefederation { void* private_data } struct LassoDsKeyInfo { LassoDsKeyValue* KeyValue } struct LassoDsKeyValue { LassoDsRsaKeyValue* RSAKeyValue } struct LassoDsRsaKeyValue { char* Modulus, char* Exponent } struct LassoEcp { gchar* assertionConsumerURL, LassoEcpPrivate* private_data } LassoEncryptionMode LassoEncryptionSymKeyType struct LassoFederation { gchar* remote_providerID, LassoNode* local_nameIdentifier, LassoNode* remote_nameIdentifier, LassoFederationPrivate* private_data } LassoHttpMethod struct LassoIdentity { GHashTable* federations, gboolean is_dirty, LassoIdentityPrivate* private_data } struct LassoLecp { LassoLibAuthnRequestEnvelope* authnRequestEnvelope, LassoLibAuthnResponseEnvelope* authnResponseEnvelope, char* assertionConsumerServiceURL, void* private_data } struct LassoLibAssertion { char* InResponseTo } struct LassoLibAuthenticationStatement { LassoLibAuthnContext* AuthnContext, char* ReauthenticateOnOrAfter, char* SessionIndex } struct LassoLibAuthnContext { char* AuthnContextClassRef, char* AuthnContextStatementRef, void* AuthenticationContextStatement } struct LassoLibAuthnRequest { GList* Extension, char* ProviderID, char* AffiliationID, char* NameIDPolicy, gboolean ForceAuthn, gboolean IsPassive, char* ProtocolProfile, char* AssertionConsumerServiceID, LassoLibRequestAuthnContext* RequestAuthnContext, char* RelayState, LassoLibScoping* Scoping, char* consent } struct LassoLibAuthnRequestEnvelope { GList* Extension, LassoLibAuthnRequest* AuthnRequest, char* ProviderID, char* ProviderName, char* AssertionConsumerServiceURL, LassoLibIDPList* IDPList, gboolean IsPassive } struct LassoLibAuthnResponse { GList* Extension, char* ProviderID, char* RelayState, char* consent } struct LassoLibAuthnResponseEnvelope { GList* Extension, LassoLibAuthnResponse* AuthnResponse, char* AssertionConsumerServiceURL } struct LassoLibFederationTerminationNotification { GList* Extension, char* ProviderID, LassoSamlNameIdentifier* NameIdentifier, char* consent, char* RelayState } struct LassoLibIDPEntries { GList* IDPEntry } struct LassoLibIDPEntry { char* ProviderID, char* ProviderName, char* Loc } struct LassoLibIDPList { LassoLibIDPEntries* IDPEntries, char* GetComplete } struct LassoLibLogoutRequest { GList* Extension, char* ProviderID, LassoSamlNameIdentifier* NameIdentifier, char* SessionIndex, char* RelayState, char* consent, char* NotOnOrAfter } struct LassoLibLogoutResponse { } struct LassoLibNameIdentifierMappingRequest { GList* Extension, char* ProviderID, LassoSamlNameIdentifier* NameIdentifier, char* TargetNamespace, char* consent } struct LassoLibNameIdentifierMappingResponse { GList* Extension, char* ProviderID, LassoSamlpStatus* Status, LassoSamlNameIdentifier* NameIdentifier } struct LassoLibRegisterNameIdentifierRequest { GList* Extension, char* ProviderID, LassoSamlNameIdentifier* IDPProvidedNameIdentifier, LassoSamlNameIdentifier* SPProvidedNameIdentifier, LassoSamlNameIdentifier* OldProvidedNameIdentifier, char* RelayState } struct LassoLibRegisterNameIdentifierResponse { } struct LassoLibRequestAuthnContext { GList* AuthnContextClassRef, GList* AuthnContextStatementRef, char* AuthnContextComparison } struct LassoLibScoping { int ProxyCount, LassoLibIDPList* IDPList } struct LassoLibStatusResponse { GList* Extension, char* ProviderID, LassoSamlpStatus* Status, char* RelayState } struct LassoLibSubject { LassoSamlNameIdentifier* IDPProvidedNameIdentifier } struct LassoLogin { LassoLoginProtocolProfile protocolProfile, gchar* assertionArtifact, LassoSamlAssertion* assertion, gchar* nameIDPolicy, LassoHttpMethod http_method, LassoLoginPrivate* private_data } LassoLoginProtocolProfile struct LassoLogout { LassoNode* initial_request, LassoNode* initial_response, gchar* initial_remote_providerID, gint providerID_index, LassoHttpMethod initial_http_request_method, LassoLogoutPrivate* private_data } LassoMdProtocolType LassoMessageFormat struct LassoMiscTextNode { char* content, char* name, char* ns_href, char* ns_prefix, gboolean text_child } struct LassoNameIdManagement { void* private_data } struct LassoNameIdentifierMapping { gchar* targetNameIdentifier, void* private_data } struct LassoNameRegistration { LassoSamlNameIdentifier* oldNameIdentifier, void* private_data } struct LassoNode { } struct LassoProfile { LassoServer* server, LassoNode* request, LassoNode* response, LassoNode* nameIdentifier, gchar* remote_providerID, gchar* msg_url, gchar* msg_body, gchar* msg_relayState, LassoIdentity* identity, LassoSession* session, LassoHttpMethod http_request_method, gint signature_status, LassoProfilePrivate* private_data } LassoProtocolConformance struct LassoProvider { gchar* ProviderID, LassoProviderRole role, char* metadata_filename, gchar* public_key, gchar* ca_cert_chain, LassoProviderPrivate* private_data } LassoProviderRole LassoRequestType struct LassoSaml2Action { char* content, char* Namespace } struct LassoSaml2Advice { GList* AssertionIDRef, GList* AssertionURIRef, GList* Assertion, GList* EncryptedAssertion } struct LassoSaml2Assertion { LassoSaml2NameID* Issuer, LassoSaml2Subject* Subject, LassoSaml2Conditions* Conditions, LassoSaml2Advice* Advice, GList* Statement, GList* AuthnStatement, GList* AuthzDecisionStatement, GList* AttributeStatement, char* Version, char* ID, char* IssueInstant, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file, gboolean encryption_activated, char* encryption_public_key_str, LassoEncryptionSymKeyType encryption_sym_key_type } struct LassoSaml2Attribute { GList* AttributeValue, char* Name, char* NameFormat, char* FriendlyName } struct LassoSaml2AttributeStatement { GList* Attribute, GList* EncryptedAttribute } struct LassoSaml2AttributeValue { GList* any } struct LassoSaml2AudienceRestriction { char* Audience } struct LassoSaml2AuthnContext { char* AuthnContextClassRef, char* AuthnContextDeclRef, char* AuthenticatingAuthority } struct LassoSaml2AuthnStatement { LassoSaml2SubjectLocality* SubjectLocality, LassoSaml2AuthnContext* AuthnContext, char* AuthnInstant, char* SessionIndex, char* SessionNotOnOrAfter } struct LassoSaml2AuthzDecisionStatement { LassoSaml2Action* Action, LassoSaml2Evidence* Evidence, char* Resource, char* Decision } struct LassoSaml2BaseIDAbstract { char* NameQualifier, char* SPNameQualifier } struct LassoSaml2ConditionAbstract { } struct LassoSaml2Conditions { GList* Condition, GList* AudienceRestriction, GList* OneTimeUse, GList* ProxyRestriction, char* NotBefore, char* NotOnOrAfter } struct LassoSaml2EncryptedElement { xmlNode* EncryptedData, GList* EncryptedKey, LassoNode* original_data } struct LassoSaml2Evidence { GList* AssertionIDRef, GList* AssertionURIRef, GList* Assertion, GList* EncryptedAssertion } struct LassoSaml2KeyInfoConfirmationData { } struct LassoSaml2NameID { char* content, char* Format, char* SPProvidedID, char* NameQualifier, char* SPNameQualifier } struct LassoSaml2OneTimeUse { } struct LassoSaml2ProxyRestriction { char* Audience, char* Count } struct LassoSaml2StatementAbstract { } struct LassoSaml2Subject { LassoSaml2BaseIDAbstract* BaseID, LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, LassoSaml2SubjectConfirmation* SubjectConfirmation } struct LassoSaml2SubjectConfirmation { LassoSaml2BaseIDAbstract* BaseID, LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, LassoSaml2SubjectConfirmationData* SubjectConfirmationData, char* Method } struct LassoSaml2SubjectConfirmationData { char* NotBefore, char* NotOnOrAfter, char* Recipient, char* InResponseTo, char* Address } struct LassoSaml2SubjectLocality { char* Address, char* DNSName } struct LassoSamlAdvice { GList* AssertionIDReference, LassoNode* Assertion } struct LassoSamlAssertion { LassoSamlConditions* Conditions, LassoSamlAdvice* Advice, void* Statement, LassoSamlSubjectStatement* SubjectStatement, LassoSamlAuthenticationStatement* AuthenticationStatement, void* AuthorizationDecisionStatement, LassoSamlAttributeStatement* AttributeStatement, int MajorVersion, int MinorVersion, char* AssertionID, char* Issuer, char* IssueInstant, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlAttribute { gchar* attributeName, gchar* attributeNameSpace, GList* AttributeValue } struct LassoSamlAttributeDesignator { char* AttributeName, char* AttributeNamespace } struct LassoSamlAttributeStatement { GList* Attribute } struct LassoSamlAttributeValue { GList* any } struct LassoSamlAudienceRestrictionCondition { GList* Audience } struct LassoSamlAuthenticationStatement { LassoSamlSubjectLocality* SubjectLocality, GList* AuthorityBinding, char* AuthenticationMethod, char* AuthenticationInstant } struct LassoSamlAuthorityBinding { char* AuthorityKind, char* Location, char* Binding } struct LassoSamlConditionAbstract { } struct LassoSamlConditions { GList* Condition, GList* AudienceRestrictionCondition, char* NotBefore, char* NotOnOrAfter } struct LassoSamlNameIdentifier { char* NameQualifier, char* Format, char* content } struct LassoSamlStatementAbstract { } struct LassoSamlSubject { LassoSamlNameIdentifier* NameIdentifier, LassoSamlSubjectConfirmation* SubjectConfirmation, LassoSaml2EncryptedElement* EncryptedNameIdentifier } struct LassoSamlSubjectConfirmation { GList* ConfirmationMethod, char* SubjectConfirmationData, LassoDsKeyInfo* KeyInfo } struct LassoSamlSubjectLocality { char* IPAddress, char* DNSAddress } struct LassoSamlSubjectStatement { } struct LassoSamlSubjectStatementAbstract { LassoSamlSubject* Subject } struct LassoSamlp2ArtifactResolve { char* Artifact } struct LassoSamlp2ArtifactResponse { LassoNode* any } struct LassoSamlp2AssertionIDRequest { char* AssertionIDRef } struct LassoSamlp2AttributeQuery { GList* Attribute } struct LassoSamlp2AuthnQuery { LassoSamlp2RequestedAuthnContext* RequestedAuthnContext, char* SessionIndex } struct LassoSamlp2AuthnRequest { LassoSaml2Subject* Subject, LassoSamlp2NameIDPolicy* NameIDPolicy, LassoSaml2Conditions* Conditions, LassoSamlp2RequestedAuthnContext* RequestedAuthnContext, LassoSamlp2Scoping* Scoping, gboolean ForceAuthn, gboolean IsPassive, char* ProtocolBinding, int AssertionConsumerServiceIndex, char* AssertionConsumerServiceURL, int AttributeConsumingServiceIndex, char* ProviderName, char* relayState } struct LassoSamlp2AuthzDecisionQuery { LassoSaml2Action* Action, LassoSaml2Evidence* Evidence, char* Resource } struct LassoSamlp2Extensions { } struct LassoSamlp2IDPEntry { char* ProviderID, char* Name, char* Loc } struct LassoSamlp2IDPList { LassoSamlp2IDPEntry* IDPEntry, char* GetComplete } struct LassoSamlp2LogoutRequest { LassoSaml2BaseIDAbstract* BaseID, LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, char* SessionIndex, char* Reason, char* NotOnOrAfter, char* relayState } struct LassoSamlp2LogoutResponse { char* relayState } struct LassoSamlp2ManageNameIDRequest { LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, char* NewID, LassoSaml2EncryptedElement* NewEncryptedID, LassoSamlp2Terminate* Terminate } struct LassoSamlp2ManageNameIDResponse { } struct LassoSamlp2NameIDMappingRequest { LassoSaml2BaseIDAbstract* BaseID, LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, LassoSamlp2NameIDPolicy* NameIDPolicy } struct LassoSamlp2NameIDMappingResponse { LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID } struct LassoSamlp2NameIDPolicy { char* Format, char* SPNameQualifier, gboolean AllowCreate } struct LassoSamlp2RequestAbstract { LassoSaml2NameID* Issuer, LassoSamlp2Extensions* Extensions, char* ID, char* Version, char* IssueInstant, char* Destination, char* Consent, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlp2RequestedAuthnContext { GList* AuthnContextClassRef, GList* AuthnContextDeclRef, char* Comparison } struct LassoSamlp2Response { GList* Assertion, GList* EncryptedAssertion } struct LassoSamlp2Scoping { LassoSamlp2IDPList* IDPList, char* RequesterID, char* ProxyCount } struct LassoSamlp2Status { LassoSamlp2StatusCode* StatusCode, char* StatusMessage, LassoSamlp2StatusDetail* StatusDetail } struct LassoSamlp2StatusCode { LassoSamlp2StatusCode* StatusCode, char* Value } struct LassoSamlp2StatusDetail { } struct LassoSamlp2StatusResponse { LassoSaml2NameID* Issuer, LassoSamlp2Extensions* Extensions, LassoSamlp2Status* Status, char* ID, char* InResponseTo, char* Version, char* IssueInstant, char* Destination, char* Consent, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlp2SubjectQueryAbstract { LassoSaml2Subject* Subject } struct LassoSamlp2Terminate { } struct LassoSamlpRequest { char* AssertionArtifact } struct LassoSamlpRequestAbstract { GList* RespondWith, char* RequestID, int MajorVersion, int MinorVersion, char* IssueInstant, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlpResponse { LassoSamlpStatus* Status, GList* Assertion } struct LassoSamlpResponseAbstract { char* ResponseID, char* InResponseTo, int MajorVersion, int MinorVersion, char* IssueInstant, char* Recipient, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlpStatus { LassoSamlpStatusCode* StatusCode, char* StatusMessage } struct LassoSamlpStatusCode { LassoSamlpStatusCode* StatusCode, char* Value } struct LassoServer { GHashTable* providers, GHashTable* services, gchar* private_key, gchar* private_key_password, gchar* certificate, LassoSignatureMethod signature_method, LassoServerPrivate* private_data } struct LassoSession { GHashTable* assertions, gboolean is_dirty, LassoSessionPrivate* private_data } LassoSignatureMethod LassoSignatureType gint lasso_assertion_query_build_request_msg ( LassoAssertionQuery* assertion_query ) int lasso_assertion_query_build_response_msg ( LassoAssertionQuery* assertion_query ) None lasso_assertion_query_destroy ( LassoAssertionQuery* assertion_query ) GType lasso_assertion_query_get_type ( ) gint lasso_assertion_query_init_request ( LassoAssertionQuery* assertion_query, char* remote_provider_id, LassoHttpMethod http_method, LassoAssertionQueryRequestType query_request_type ) LassoAssertionQuery* lasso_assertion_query_new ( LassoServer* server ) gint lasso_assertion_query_process_request_msg ( LassoAssertionQuery* assertion_query, gchar* request_msg ) gint lasso_assertion_query_process_response_msg ( LassoAssertionQuery* assertion_query, gchar* response_msg ) gint lasso_assertion_query_validate_request ( LassoAssertionQuery* assertion_query ) int lasso_check_version ( int major, int minor, int subminor, LassoCheckVersionMode mode ) gint lasso_defederation_build_notification_msg ( LassoDefederation* defederation ) None lasso_defederation_destroy ( LassoDefederation* defederation ) GType lasso_defederation_get_type ( ) gint lasso_defederation_init_notification ( LassoDefederation* defederation, gchar* remote_providerID, LassoHttpMethod http_method ) LassoDefederation* lasso_defederation_new ( LassoServer* server ) gint lasso_defederation_process_notification_msg ( LassoDefederation* defederation, gchar* notification_msg ) gint lasso_defederation_validate_notification ( LassoDefederation* defederation ) GType lasso_ds_key_info_get_type ( ) LassoDsKeyInfo* lasso_ds_key_info_new ( ) GType lasso_ds_key_value_get_type ( ) LassoDsKeyValue* lasso_ds_key_value_new ( ) GType lasso_ds_rsa_key_value_get_type ( ) LassoDsRsaKeyValue* lasso_ds_rsa_key_value_new ( ) None lasso_ecp_destroy ( LassoEcp* ecp ) GType lasso_ecp_get_type ( ) LassoEcp* lasso_ecp_new ( LassoServer* server ) int lasso_ecp_process_authn_request_msg ( LassoEcp* ecp, const char* authn_request_msg ) int lasso_ecp_process_response_msg ( LassoEcp* ecp, const char* response_msg ) None lasso_federation_build_local_name_identifier ( LassoFederation* federation, const gchar* nameQualifier, const gchar* format, const gchar* content ) None lasso_federation_destroy ( LassoFederation* federation ) GType lasso_federation_get_type ( ) LassoFederation* lasso_federation_new ( gchar* remote_providerID ) gboolean lasso_federation_verify_name_identifier ( LassoFederation* federation, LassoNode* name_identifier ) char* lasso_get_prefix_for_dst_service_href ( const char* href ) gchar* lasso_get_prefix_for_idwsf2_dst_service_href ( const gchar* href ) None lasso_identity_destroy ( LassoIdentity* identity ) gchar* lasso_identity_dump ( LassoIdentity* identity ) LassoFederation* lasso_identity_get_federation ( LassoIdentity* identity, const char* providerID ) GType lasso_identity_get_type ( ) LassoIdentity* lasso_identity_new ( ) LassoIdentity* lasso_identity_new_from_dump ( const gchar* dump ) int lasso_init ( ) int lasso_lecp_build_authn_request_envelope_msg ( LassoLecp* lecp ) int lasso_lecp_build_authn_request_msg ( LassoLecp* lecp ) int lasso_lecp_build_authn_response_envelope_msg ( LassoLecp* lecp ) int lasso_lecp_build_authn_response_msg ( LassoLecp* lecp ) None lasso_lecp_destroy ( LassoLecp* lecp ) GType lasso_lecp_get_type ( ) int lasso_lecp_init_authn_request ( LassoLecp* lecp, const char* remote_providerID ) LassoLecp* lasso_lecp_new ( LassoServer* server ) int lasso_lecp_process_authn_request_envelope_msg ( LassoLecp* lecp, const char* request_msg ) int lasso_lecp_process_authn_request_msg ( LassoLecp* lecp, const char* authn_request_msg ) int lasso_lecp_process_authn_response_envelope_msg ( LassoLecp* lecp, const char* response_msg ) GType lasso_lib_assertion_get_type ( ) LassoLibAssertion* lasso_lib_assertion_new ( ) LassoLibAssertion* lasso_lib_assertion_new_full ( const char* issuer, const char* requestID, const char* audience, const char* notBefore, const char* notOnOrAfter ) GType lasso_lib_authentication_statement_get_type ( ) LassoLibAuthenticationStatement* lasso_lib_authentication_statement_new ( ) LassoLibAuthenticationStatement* lasso_lib_authentication_statement_new_full ( const char* authenticationMethod, const char* authenticationInstant, const char* reauthenticateOnOrAfter, LassoSamlNameIdentifier* sp_identifier, LassoSamlNameIdentifier* idp_identifier ) GType lasso_lib_authn_context_get_type ( ) LassoNode* lasso_lib_authn_context_new ( ) GType lasso_lib_authn_request_envelope_get_type ( ) LassoLibAuthnRequestEnvelope* lasso_lib_authn_request_envelope_new ( ) LassoLibAuthnRequestEnvelope* lasso_lib_authn_request_envelope_new_full ( LassoLibAuthnRequest* authnRequest, char* providerID, char* assertionConsumerServiceURL ) GType lasso_lib_authn_request_get_type ( ) LassoLibAuthnRequest* lasso_lib_authn_request_new ( ) GType lasso_lib_authn_response_envelope_get_type ( ) LassoLibAuthnResponseEnvelope* lasso_lib_authn_response_envelope_new ( LassoLibAuthnResponse* response, char* assertionConsumerServiceURL ) GType lasso_lib_authn_response_get_type ( ) LassoNode* lasso_lib_authn_response_new ( char* providerID, LassoLibAuthnRequest* request ) GType lasso_lib_federation_termination_notification_get_type ( ) LassoNode* lasso_lib_federation_termination_notification_new ( ) LassoLibFederationTerminationNotification* lasso_lib_federation_termination_notification_new_full ( char* providerID, LassoSamlNameIdentifier* nameIdentifier, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_idp_entries_get_type ( ) LassoNode* lasso_lib_idp_entries_new ( ) GType lasso_lib_idp_entry_get_type ( ) LassoNode* lasso_lib_idp_entry_new ( ) GType lasso_lib_idp_list_get_type ( ) LassoNode* lasso_lib_idp_list_new ( ) GType lasso_lib_logout_request_get_type ( ) LassoNode* lasso_lib_logout_request_new ( ) LassoLibLogoutRequest* lasso_lib_logout_request_new_full ( char* providerID, LassoSamlNameIdentifier* nameIdentifier, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_logout_response_get_type ( ) LassoNode* lasso_lib_logout_response_new ( ) LassoLibLogoutResponse* lasso_lib_logout_response_new_full ( char* providerID, const char* statusCodeValue, LassoLibLogoutRequest* request, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_name_identifier_mapping_request_get_type ( ) LassoNode* lasso_lib_name_identifier_mapping_request_new ( ) LassoLibNameIdentifierMappingRequest* lasso_lib_name_identifier_mapping_request_new_full ( char* providerID, LassoSamlNameIdentifier* nameIdentifier, const char* targetNamespace, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_name_identifier_mapping_response_get_type ( ) LassoNode* lasso_lib_name_identifier_mapping_response_new ( ) LassoLibNameIdentifierMappingResponse* lasso_lib_name_identifier_mapping_response_new_full ( char* provideRID, const char* statusCodeValue, LassoLibNameIdentifierMappingRequest* request, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_register_name_identifier_request_get_type ( ) LassoNode* lasso_lib_register_name_identifier_request_new ( ) LassoLibRegisterNameIdentifierRequest* lasso_lib_register_name_identifier_request_new_full ( const char* providerID, LassoSamlNameIdentifier* idpNameIdentifier, LassoSamlNameIdentifier* spNameIdentifier, LassoSamlNameIdentifier* oldNameIdentifier, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_register_name_identifier_response_get_type ( ) LassoNode* lasso_lib_register_name_identifier_response_new ( ) LassoLibRegisterNameIdentifierResponse* lasso_lib_register_name_identifier_response_new_full ( const char* providerID, const char* statusCodeValue, LassoLibRegisterNameIdentifierRequest* request, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_request_authn_context_get_type ( ) LassoLibRequestAuthnContext* lasso_lib_request_authn_context_new ( ) GType lasso_lib_scoping_get_type ( ) LassoLibScoping* lasso_lib_scoping_new ( ) GType lasso_lib_status_response_get_type ( ) LassoNode* lasso_lib_status_response_new ( ) GType lasso_lib_subject_get_type ( ) LassoLibSubject* lasso_lib_subject_new ( ) gint lasso_login_accept_sso ( LassoLogin* login ) gint lasso_login_build_artifact_msg ( LassoLogin* login, LassoHttpMethod http_method ) int lasso_login_build_assertion ( LassoLogin* login, const char* authenticationMethod, const char* authenticationInstant, const char* reauthenticateOnOrAfter, const char* notBefore, const char* notOnOrAfter ) gint lasso_login_build_authn_request_msg ( LassoLogin* login ) gint lasso_login_build_authn_response_msg ( LassoLogin* login ) gint lasso_login_build_request_msg ( LassoLogin* login ) gint lasso_login_build_response_msg ( LassoLogin* login, gchar* remote_providerID ) None lasso_login_destroy ( LassoLogin* login ) gchar* lasso_login_dump ( LassoLogin* login ) GType lasso_login_get_type ( ) gint lasso_login_init_authn_request ( LassoLogin* login, const gchar* remote_providerID, LassoHttpMethod http_method ) gint lasso_login_init_idp_initiated_authn_request ( LassoLogin* login, const gchar* remote_providerID ) gint lasso_login_init_request ( LassoLogin* login, gchar* response_msg, LassoHttpMethod response_http_method ) gboolean lasso_login_must_ask_for_consent ( LassoLogin* login ) gboolean lasso_login_must_authenticate ( LassoLogin* login ) LassoLogin* lasso_login_new ( LassoServer* server ) LassoLogin* lasso_login_new_from_dump ( LassoServer* server, const gchar* dump ) int lasso_login_process_authn_request_msg ( LassoLogin* login, const char* authn_request_msg ) gint lasso_login_process_authn_response_msg ( LassoLogin* login, gchar* authn_response_msg ) int lasso_login_process_paos_response_msg ( LassoLogin* login, gchar* msg ) gint lasso_login_process_request_msg ( LassoLogin* login, gchar* request_msg ) gint lasso_login_process_response_msg ( LassoLogin* login, gchar* response_msg ) int lasso_login_validate_request_msg ( LassoLogin* login, gboolean authentication_result, gboolean is_consent_obtained ) gint lasso_logout_build_request_msg ( LassoLogout* logout ) gint lasso_logout_build_response_msg ( LassoLogout* logout ) None lasso_logout_destroy ( LassoLogout* logout ) gchar* lasso_logout_dump ( LassoLogout* logout ) gchar* lasso_logout_get_next_providerID ( LassoLogout* logout ) GType lasso_logout_get_type ( ) gint lasso_logout_init_request ( LassoLogout* logout, gchar* remote_providerID, LassoHttpMethod request_method ) LassoLogout* lasso_logout_new ( LassoServer* server ) LassoLogout* lasso_logout_new_from_dump ( LassoServer* server, const gchar* dump ) gint lasso_logout_process_request_msg ( LassoLogout* logout, gchar* request_msg ) gint lasso_logout_process_response_msg ( LassoLogout* logout, gchar* response_msg ) gint lasso_logout_reset_providerID_index ( LassoLogout* logout ) gint lasso_logout_validate_request ( LassoLogout* logout ) GType lasso_misc_text_node_get_type ( ) LassoNode* lasso_misc_text_node_new ( ) LassoMiscTextNode* lasso_misc_text_node_new_with_string ( char* content ) gint lasso_name_id_management_build_request_msg ( LassoNameIdManagement* name_id_management ) int lasso_name_id_management_build_response_msg ( LassoNameIdManagement* name_id_management ) None lasso_name_id_management_destroy ( LassoNameIdManagement* name_id_management ) char* lasso_name_id_management_dump ( LassoNameIdManagement* name_id_management ) GType lasso_name_id_management_get_type ( ) gint lasso_name_id_management_init_request ( LassoNameIdManagement* name_id_management, char* remote_provider_id, char* new_name_id, LassoHttpMethod http_method ) LassoNameIdManagement* lasso_name_id_management_new ( LassoServer* server ) LassoNameIdManagement* lasso_name_id_management_new_from_dump ( LassoServer* server, const char* dump ) gint lasso_name_id_management_process_request_msg ( LassoNameIdManagement* name_id_management, gchar* request_msg ) gint lasso_name_id_management_process_response_msg ( LassoNameIdManagement* name_id_management, gchar* response_msg ) gint lasso_name_id_management_validate_request ( LassoNameIdManagement* name_id_management ) gint lasso_name_identifier_mapping_build_request_msg ( LassoNameIdentifierMapping* mapping ) gint lasso_name_identifier_mapping_build_response_msg ( LassoNameIdentifierMapping* mapping ) None lasso_name_identifier_mapping_destroy ( LassoNameIdentifierMapping* mapping ) GType lasso_name_identifier_mapping_get_type ( ) gint lasso_name_identifier_mapping_init_request ( LassoNameIdentifierMapping* mapping, gchar* targetNamespace, gchar* remote_providerID ) LassoNameIdentifierMapping* lasso_name_identifier_mapping_new ( LassoServer* server ) gint lasso_name_identifier_mapping_process_request_msg ( LassoNameIdentifierMapping* mapping, gchar* request_msg ) gint lasso_name_identifier_mapping_process_response_msg ( LassoNameIdentifierMapping* mapping, gchar* response_msg ) gint lasso_name_identifier_mapping_validate_request ( LassoNameIdentifierMapping* mapping ) gint lasso_name_registration_build_request_msg ( LassoNameRegistration* name_registration ) gint lasso_name_registration_build_response_msg ( LassoNameRegistration* name_registration ) None lasso_name_registration_destroy ( LassoNameRegistration* name_registration ) gchar* lasso_name_registration_dump ( LassoNameRegistration* name_registration ) GType lasso_name_registration_get_type ( ) gint lasso_name_registration_init_request ( LassoNameRegistration* name_registration, char* remote_providerID, LassoHttpMethod http_method ) LassoNameRegistration* lasso_name_registration_new ( LassoServer* server ) LassoNameRegistration* lasso_name_registration_new_from_dump ( LassoServer* server, const char* dump ) gint lasso_name_registration_process_request_msg ( LassoNameRegistration* name_registration, gchar* request_msg ) gint lasso_name_registration_process_response_msg ( LassoNameRegistration* name_registration, gchar* response_msg ) gint lasso_name_registration_validate_request ( LassoNameRegistration* name_registration ) None lasso_node_destroy ( LassoNode* node ) char* lasso_node_dump ( LassoNode* node ) char* lasso_node_export_to_base64 ( LassoNode* node ) char* lasso_node_export_to_ecp_soap_response ( LassoNode* node, const char* assertionConsumerURL ) char* lasso_node_export_to_paos_request ( LassoNode* node, const char* issuer, const char* responseConsumerURL, const char* relay_state ) char* lasso_node_export_to_query ( LassoNode* node, LassoSignatureMethod sign_method, const char* private_key_file ) char* lasso_node_export_to_soap ( LassoNode* node ) gchar* lasso_node_export_to_xml ( LassoNode* node ) GType lasso_node_get_type ( ) xmlNode* lasso_node_get_xmlNode ( LassoNode* node, gboolean lasso_dump ) LassoMessageFormat lasso_node_init_from_message ( LassoNode* node, const char* message ) gboolean lasso_node_init_from_query ( LassoNode* node, const char* query ) int lasso_node_init_from_xml ( LassoNode* node, xmlNode* xmlnode ) LassoNode* lasso_node_new ( ) LassoNode* lasso_node_new_from_dump ( const char* dump ) LassoNode* lasso_node_new_from_soap ( const char* soap ) LassoNode* lasso_node_new_from_xmlNode ( xmlNode* node ) char* lasso_profile_get_artifact ( LassoProfile* profile ) char* lasso_profile_get_artifact_message ( LassoProfile* profile ) LassoIdentity* lasso_profile_get_identity ( LassoProfile* profile ) LassoNode* lasso_profile_get_nameIdentifier ( LassoProfile* profile ) LassoRequestType lasso_profile_get_request_type_from_soap_msg ( const gchar* soap ) LassoSession* lasso_profile_get_session ( LassoProfile* profile ) GType lasso_profile_get_type ( ) gboolean lasso_profile_is_identity_dirty ( LassoProfile* profile ) gboolean lasso_profile_is_liberty_query ( const gchar* query ) gboolean lasso_profile_is_saml_query ( const gchar* query ) gboolean lasso_profile_is_session_dirty ( LassoProfile* profile ) None lasso_profile_set_artifact_message ( LassoProfile* profile, char* message ) gint lasso_profile_set_identity_from_dump ( LassoProfile* profile, const gchar* dump ) gint lasso_profile_set_session_from_dump ( LassoProfile* profile, const gchar* dump ) gboolean lasso_provider_accept_http_method ( LassoProvider* provider, LassoProvider* remote_provider, LassoMdProtocolType protocol_type, LassoHttpMethod http_method, gboolean initiate_profile ) gchar* lasso_provider_get_assertion_consumer_service_url ( LassoProvider* provider, const char* service_id ) gchar* lasso_provider_get_base64_succinct_id ( LassoProvider* provider ) LassoHttpMethod lasso_provider_get_first_http_method ( LassoProvider* provider, LassoProvider* remote_provider, LassoMdProtocolType protocol_type ) GList* lasso_provider_get_metadata_list ( LassoProvider* provider, const char* name ) gchar* lasso_provider_get_metadata_one ( LassoProvider* provider, const char* name ) xmlNode* lasso_provider_get_organization ( LassoProvider* provider ) LassoProtocolConformance lasso_provider_get_protocol_conformance ( LassoProvider* provider ) GType lasso_provider_get_type ( ) gboolean lasso_provider_has_protocol_profile ( LassoProvider* provider, LassoMdProtocolType protocol_type, const char* protocol_profile ) LassoProvider* lasso_provider_new ( LassoProviderRole role, const char* metadata, const char* public_key, const char* ca_cert_chain ) LassoProvider* lasso_provider_new_from_dump ( const gchar* dump ) None lasso_provider_set_encryption_mode ( LassoProvider* provider, LassoEncryptionMode encryption_mode ) None lasso_provider_set_encryption_sym_key_type ( LassoProvider* provider, LassoEncryptionSymKeyType encryption_sym_key_type ) None lasso_register_dst_service ( const char* prefix, const char* href ) None lasso_register_idwsf2_dst_service ( const gchar* prefix, const gchar* href ) GType lasso_saml2_action_get_type ( ) LassoNode* lasso_saml2_action_new ( ) LassoSaml2Action* lasso_saml2_action_new_with_string ( char* content ) GType lasso_saml2_advice_get_type ( ) LassoNode* lasso_saml2_advice_new ( ) GType lasso_saml2_assertion_get_type ( ) LassoNode* lasso_saml2_assertion_new ( ) GType lasso_saml2_attribute_get_type ( ) LassoNode* lasso_saml2_attribute_new ( ) GType lasso_saml2_attribute_statement_get_type ( ) LassoNode* lasso_saml2_attribute_statement_new ( ) GType lasso_saml2_attribute_value_get_type ( ) LassoSaml2AttributeValue* lasso_saml2_attribute_value_new ( ) GType lasso_saml2_audience_restriction_get_type ( ) LassoNode* lasso_saml2_audience_restriction_new ( ) GType lasso_saml2_authn_context_get_type ( ) LassoNode* lasso_saml2_authn_context_new ( ) GType lasso_saml2_authn_statement_get_type ( ) LassoNode* lasso_saml2_authn_statement_new ( ) GType lasso_saml2_authz_decision_statement_get_type ( ) LassoNode* lasso_saml2_authz_decision_statement_new ( ) GType lasso_saml2_base_idabstract_get_type ( ) LassoNode* lasso_saml2_base_idabstract_new ( ) GType lasso_saml2_condition_abstract_get_type ( ) LassoNode* lasso_saml2_condition_abstract_new ( ) GType lasso_saml2_conditions_get_type ( ) LassoNode* lasso_saml2_conditions_new ( ) GType lasso_saml2_encrypted_element_get_type ( ) LassoNode* lasso_saml2_encrypted_element_new ( ) GType lasso_saml2_evidence_get_type ( ) LassoNode* lasso_saml2_evidence_new ( ) GType lasso_saml2_key_info_confirmation_data_get_type ( ) LassoNode* lasso_saml2_key_info_confirmation_data_new ( ) GType lasso_saml2_name_id_get_type ( ) LassoNode* lasso_saml2_name_id_new ( ) LassoSaml2NameID* lasso_saml2_name_id_new_with_string ( char* content ) GType lasso_saml2_one_time_use_get_type ( ) LassoNode* lasso_saml2_one_time_use_new ( ) GType lasso_saml2_proxy_restriction_get_type ( ) LassoNode* lasso_saml2_proxy_restriction_new ( ) GType lasso_saml2_statement_abstract_get_type ( ) LassoNode* lasso_saml2_statement_abstract_new ( ) GType lasso_saml2_subject_confirmation_data_get_type ( ) LassoNode* lasso_saml2_subject_confirmation_data_new ( ) GType lasso_saml2_subject_confirmation_get_type ( ) LassoNode* lasso_saml2_subject_confirmation_new ( ) GType lasso_saml2_subject_get_type ( ) GType lasso_saml2_subject_locality_get_type ( ) LassoNode* lasso_saml2_subject_locality_new ( ) LassoNode* lasso_saml2_subject_new ( ) GType lasso_saml_advice_get_type ( ) LassoNode* lasso_saml_advice_new ( ) GType lasso_saml_assertion_get_type ( ) LassoSamlAssertion* lasso_saml_assertion_new ( ) GType lasso_saml_attribute_designator_get_type ( ) LassoNode* lasso_saml_attribute_designator_new ( ) GType lasso_saml_attribute_get_type ( ) LassoSamlAttribute* lasso_saml_attribute_new ( ) GType lasso_saml_attribute_statement_get_type ( ) LassoSamlAttributeStatement* lasso_saml_attribute_statement_new ( ) GType lasso_saml_attribute_value_get_type ( ) LassoSamlAttributeValue* lasso_saml_attribute_value_new ( ) GType lasso_saml_audience_restriction_condition_get_type ( ) LassoSamlAudienceRestrictionCondition* lasso_saml_audience_restriction_condition_new ( ) LassoSamlAudienceRestrictionCondition* lasso_saml_audience_restriction_condition_new_full ( const char* audience ) GType lasso_saml_authentication_statement_get_type ( ) LassoNode* lasso_saml_authentication_statement_new ( ) GType lasso_saml_authority_binding_get_type ( ) LassoNode* lasso_saml_authority_binding_new ( ) GType lasso_saml_condition_abstract_get_type ( ) GType lasso_saml_conditions_get_type ( ) LassoSamlConditions* lasso_saml_conditions_new ( ) GType lasso_saml_name_identifier_get_type ( ) LassoSamlNameIdentifier* lasso_saml_name_identifier_new ( ) LassoSamlNameIdentifier* lasso_saml_name_identifier_new_from_xmlNode ( xmlNode* xmlnode ) GType lasso_saml_statement_abstract_get_type ( ) GType lasso_saml_subject_confirmation_get_type ( ) LassoSamlSubjectConfirmation* lasso_saml_subject_confirmation_new ( ) GType lasso_saml_subject_get_type ( ) GType lasso_saml_subject_locality_get_type ( ) LassoNode* lasso_saml_subject_locality_new ( ) LassoNode* lasso_saml_subject_new ( ) GType lasso_saml_subject_statement_abstract_get_type ( ) GType lasso_saml_subject_statement_get_type ( ) LassoNode* lasso_saml_subject_statement_new ( ) GType lasso_samlp2_artifact_resolve_get_type ( ) LassoNode* lasso_samlp2_artifact_resolve_new ( ) GType lasso_samlp2_artifact_response_get_type ( ) LassoNode* lasso_samlp2_artifact_response_new ( ) GType lasso_samlp2_assertion_id_request_get_type ( ) LassoNode* lasso_samlp2_assertion_id_request_new ( ) GType lasso_samlp2_attribute_query_get_type ( ) LassoNode* lasso_samlp2_attribute_query_new ( ) GType lasso_samlp2_authn_query_get_type ( ) LassoNode* lasso_samlp2_authn_query_new ( ) GType lasso_samlp2_authn_request_get_type ( ) LassoNode* lasso_samlp2_authn_request_new ( ) GType lasso_samlp2_authz_decision_query_get_type ( ) LassoNode* lasso_samlp2_authz_decision_query_new ( ) GType lasso_samlp2_extensions_get_type ( ) LassoNode* lasso_samlp2_extensions_new ( ) GType lasso_samlp2_idp_entry_get_type ( ) LassoNode* lasso_samlp2_idp_entry_new ( ) GType lasso_samlp2_idp_list_get_type ( ) LassoNode* lasso_samlp2_idp_list_new ( ) GType lasso_samlp2_logout_request_get_type ( ) LassoNode* lasso_samlp2_logout_request_new ( ) GType lasso_samlp2_logout_response_get_type ( ) LassoNode* lasso_samlp2_logout_response_new ( ) GType lasso_samlp2_manage_name_id_request_get_type ( ) LassoNode* lasso_samlp2_manage_name_id_request_new ( ) GType lasso_samlp2_manage_name_id_response_get_type ( ) LassoNode* lasso_samlp2_manage_name_id_response_new ( ) GType lasso_samlp2_name_id_mapping_request_get_type ( ) LassoNode* lasso_samlp2_name_id_mapping_request_new ( ) GType lasso_samlp2_name_id_mapping_response_get_type ( ) LassoNode* lasso_samlp2_name_id_mapping_response_new ( ) GType lasso_samlp2_name_id_policy_get_type ( ) LassoNode* lasso_samlp2_name_id_policy_new ( ) GType lasso_samlp2_request_abstract_get_type ( ) LassoNode* lasso_samlp2_request_abstract_new ( ) GType lasso_samlp2_requested_authn_context_get_type ( ) LassoNode* lasso_samlp2_requested_authn_context_new ( ) GType lasso_samlp2_response_get_type ( ) LassoNode* lasso_samlp2_response_new ( ) GType lasso_samlp2_scoping_get_type ( ) LassoNode* lasso_samlp2_scoping_new ( ) GType lasso_samlp2_status_code_get_type ( ) LassoNode* lasso_samlp2_status_code_new ( ) GType lasso_samlp2_status_detail_get_type ( ) LassoNode* lasso_samlp2_status_detail_new ( ) GType lasso_samlp2_status_get_type ( ) LassoNode* lasso_samlp2_status_new ( ) GType lasso_samlp2_status_response_get_type ( ) LassoNode* lasso_samlp2_status_response_new ( ) GType lasso_samlp2_subject_query_abstract_get_type ( ) LassoNode* lasso_samlp2_subject_query_abstract_new ( ) GType lasso_samlp2_terminate_get_type ( ) LassoNode* lasso_samlp2_terminate_new ( ) GType lasso_samlp_request_abstract_get_type ( ) GType lasso_samlp_request_get_type ( ) LassoNode* lasso_samlp_request_new ( ) None lasso_samlp_response_abstract_fill ( LassoSamlpResponseAbstract* response, const char* InResponseTo, const char* Recipient ) GType lasso_samlp_response_abstract_get_type ( ) GType lasso_samlp_response_get_type ( ) LassoNode* lasso_samlp_response_new ( ) GType lasso_samlp_status_code_get_type ( ) LassoSamlpStatusCode* lasso_samlp_status_code_new ( ) GType lasso_samlp_status_get_type ( ) LassoSamlpStatus* lasso_samlp_status_new ( ) gint lasso_server_add_provider ( LassoServer* server, LassoProviderRole role, const gchar* metadata, const gchar* public_key, const gchar* ca_cert_chain ) None lasso_server_destroy ( LassoServer* server ) gchar* lasso_server_dump ( LassoServer* server ) LassoProvider* lasso_server_get_provider ( LassoServer* server, const gchar* providerID ) GType lasso_server_get_type ( ) int lasso_server_load_affiliation ( LassoServer* server, const gchar* filename ) LassoServer* lasso_server_new ( const gchar* metadata, const gchar* private_key, const gchar* private_key_password, const gchar* certificate ) LassoServer* lasso_server_new_from_dump ( const gchar* dump ) int lasso_server_set_encryption_private_key ( LassoServer* server, const gchar* filename ) None lasso_session_destroy ( LassoSession* session ) gchar* lasso_session_dump ( LassoSession* session ) GList* lasso_session_get_assertions ( LassoSession* session, const char* provider_id ) gchar* lasso_session_get_provider_index ( LassoSession* session, gint index ) GType lasso_session_get_type ( ) gboolean lasso_session_is_empty ( LassoSession* session ) LassoSession* lasso_session_new ( ) LassoSession* lasso_session_new_from_dump ( const gchar* dump ) int lasso_shutdown ( ) const char* lasso_strerror ( int error_code ) lasso-2.8.2/abi/PaxHeaders/abi-2.2.900000644000000000000000000000013113766621500013666 xustar0029 mtime=1608196928.71889494 30 atime=1678098069.993489071 30 ctime=1678814319.929947161 lasso-2.8.2/abi/abi-2.2.900000644000175000017500000017153113766621500017147 0ustar00bdauvergnebdauvergne00000000000000LASSO_ASSERTION_QUERY_REQUEST_TYPE_ASSERTION_ID LASSO_ASSERTION_QUERY_REQUEST_TYPE_ATTRIBUTE LASSO_ASSERTION_QUERY_REQUEST_TYPE_AUTHN LASSO_ASSERTION_QUERY_REQUEST_TYPE_AUTHZ_DECISION LASSO_ASSERTION_QUERY_REQUEST_TYPE_UNSET LASSO_CHECK_VERSIONABI_COMPATIBLE LASSO_CHECK_VERSION_EXACT LASSO_CHECK_VERSION_NUMERIC LASSO_DATA_SERVICE_ERROR_CANNOT_ADD_ITEM LASSO_DATA_SERVICE_ERROR_UNREGISTERED_DST LASSO_DEFEDERATION_ERROR_MISSING_NAME_IDENTIFIER LASSO_DISCOVERY_ERROR_FAILED_TO_BUILD_ENDPOINT_REFERENCE LASSO_DISCOVERY_ERROR_MISSING_REQUESTED_SERVICE LASSO_DISCOVERY_ERROR_SVC_METADATA_ASSOCIATION_ADD_FAILED LASSO_DISCOVERY_ERROR_SVC_METADATA_REGISTER_FAILED LASSO_DST_ERROR_EMPTY_REQUEST LASSO_DST_ERROR_MALFORMED_QUERY LASSO_DST_ERROR_MISSING_SERVICE_DATA LASSO_DST_ERROR_MODIFY_FAILED LASSO_DST_ERROR_MODIFY_PARTIALLY_FAILED LASSO_DST_ERROR_NEW_DATA_MISSING LASSO_DST_ERROR_NO_DATA LASSO_DST_ERROR_QUERY_FAILED LASSO_DST_ERROR_QUERY_NOT_FOUND LASSO_DST_ERROR_QUERY_PARTIALLY_FAILED LASSO_DS_ERROR_CA_CERT_CHAIN_LOAD_FAILED LASSO_DS_ERROR_CERTIFICATE_LOAD_FAILED LASSO_DS_ERROR_CONTEXT_CREATION_FAILED LASSO_DS_ERROR_DECRYPTION_FAILED LASSO_DS_ERROR_DIGEST_COMPUTE_FAILED LASSO_DS_ERROR_ENCRYPTION_FAILED LASSO_DS_ERROR_INVALID_REFERENCE_FOR_SAML LASSO_DS_ERROR_INVALID_SIGALG LASSO_DS_ERROR_INVALID_SIGNATURE LASSO_DS_ERROR_KEYS_MNGR_CREATION_FAILED LASSO_DS_ERROR_KEYS_MNGR_INIT_FAILED LASSO_DS_ERROR_PRIVATE_KEY_LOAD_FAILED LASSO_DS_ERROR_PUBLIC_KEY_LOAD_FAILED LASSO_DS_ERROR_SIGNATURE_FAILED LASSO_DS_ERROR_SIGNATURE_NOT_FOUND LASSO_DS_ERROR_SIGNATURE_TEMPLATE_NOT_FOUND LASSO_DS_ERROR_SIGNATURE_TMPL_CREATION_FAILED LASSO_DS_ERROR_SIGNATURE_VERIFICATION_FAILED LASSO_DS_ERROR_TOO_MUCH_REFERENCES LASSO_DS_HREF LASSO_DS_PREFIX LASSO_DURATION_DAY LASSO_DURATION_HOUR LASSO_DURATION_MINUTE LASSO_DURATION_WEEK LASSO_ECP_HREF LASSO_ECP_PREFIX LASSO_ENCRYPTION_MODE_ASSERTION LASSO_ENCRYPTION_MODE_NAMEID LASSO_ENCRYPTION_MODE_NONE LASSO_ENCRYPTION_SYM_KEY_TYPE_3DES LASSO_ENCRYPTION_SYM_KEY_TYPE_AES_128 LASSO_ENCRYPTION_SYM_KEY_TYPE_AES_256 LASSO_ENCRYPTION_SYM_KEY_TYPE_DEFAULT LASSO_ERROR_CAST_FAILED LASSO_ERROR_OUT_OF_MEMORY LASSO_ERROR_UNDEFINED LASSO_ERROR_UNIMPLEMENTED LASSO_HTTP_METHOD_ANY LASSO_HTTP_METHOD_ARTIFACT_GET LASSO_HTTP_METHOD_ARTIFACT_POST LASSO_HTTP_METHOD_GET LASSO_HTTP_METHOD_IDP_INITIATED LASSO_HTTP_METHOD_LAST LASSO_HTTP_METHOD_NONE LASSO_HTTP_METHOD_PAOS LASSO_HTTP_METHOD_POST LASSO_HTTP_METHOD_REDIRECT LASSO_HTTP_METHOD_SOAP LASSO_IDWSF2_DISCOVERY_ERROR_DUPLICATE LASSO_IDWSF2_DISCOVERY_ERROR_FAILED LASSO_IDWSF2_DISCOVERY_ERROR_FORBIDDEN LASSO_IDWSF2_DISCOVERY_ERROR_LOGICAL_DUPLICATE LASSO_IDWSF2_DISCOVERY_ERROR_NOT_FOUND LASSO_IDWSF2_DISCOVERY_ERROR_NO_RESULTS LASSO_IDWSF2_DST_ERROR_DUPLICATE_ITEM LASSO_IDWSF2_DST_ERROR_ITEM_NOT_FOUND LASSO_IDWSF2_DST_ERROR_PARTIAL_FAILURE LASSO_IDWSF2_DST_ERROR_UNKNOWN_STATUS_CODE LASSO_LASSO_HREF LASSO_LASSO_PREFIX LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_INTERNET_PROTOCOL LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_INTERNET_PROTOCOL_PASSWORD LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_ONE_FACTOR_CONTRACT LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_ONE_FACTOR_UNREGISTERED LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_TWO_FACTOR_CONTRACT LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_TWO_FACTOR_UNREGISTERED LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PASSWORD LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PASSWORD_PROTECTED_TRANSPORT LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PREVIOUS_SESSION LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SMARTCARD LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SMARTCARD_PKI LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SOFTWARE_PKI LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_TIME_SYNC_TOKEN LASSO_LIB_AUTHN_CONTEXT_COMPARISON_BETTER LASSO_LIB_AUTHN_CONTEXT_COMPARISON_EXACT LASSO_LIB_AUTHN_CONTEXT_COMPARISON_MAXIMUM LASSO_LIB_AUTHN_CONTEXT_COMPARISON_MINIMUM LASSO_LIB_CONSENT_INAPPLICABLE LASSO_LIB_CONSENT_OBTAINED LASSO_LIB_CONSENT_OBTAINED_CURRENT_EXPLICIT LASSO_LIB_CONSENT_OBTAINED_CURRENT_IMPLICIT LASSO_LIB_CONSENT_OBTAINED_PRIOR LASSO_LIB_CONSENT_UNAVAILABLE LASSO_LIB_HREF LASSO_LIB_MAJOR_VERSION_N LASSO_LIB_MINOR_VERSION_N LASSO_LIB_NAMEID_POLICY_TYPE_ANY LASSO_LIB_NAMEID_POLICY_TYPE_FEDERATED LASSO_LIB_NAMEID_POLICY_TYPE_NONE LASSO_LIB_NAMEID_POLICY_TYPE_ONE_TIME LASSO_LIB_NAME_IDENTIFIER_FORMAT_ENCRYPTED LASSO_LIB_NAME_IDENTIFIER_FORMAT_ENTITYID LASSO_LIB_NAME_IDENTIFIER_FORMAT_FEDERATED LASSO_LIB_NAME_IDENTIFIER_FORMAT_ONE_TIME LASSO_LIB_PREFIX LASSO_LIB_PROTOCOL_PROFILE_BRWS_ART LASSO_LIB_PROTOCOL_PROFILE_BRWS_LECP LASSO_LIB_PROTOCOL_PROFILE_BRWS_POST LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_IDP_HTTP LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_IDP_SOAP LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_SP_SOAP LASSO_LIB_PROTOCOL_PROFILE_NIM_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_RNI_IDP_HTTP LASSO_LIB_PROTOCOL_PROFILE_RNI_IDP_SOAP LASSO_LIB_PROTOCOL_PROFILE_RNI_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_RNI_SP_SOAP LASSO_LIB_PROTOCOL_PROFILE_SLO_IDP_HTTP LASSO_LIB_PROTOCOL_PROFILE_SLO_IDP_SOAP LASSO_LIB_PROTOCOL_PROFILE_SLO_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_SLO_SP_SOAP LASSO_LIB_STATUS_CODE_FEDERATION_DOES_NOT_EXIST LASSO_LIB_STATUS_CODE_INVALID_ASSERTION_CONSUMER_SERVICE_INDEX LASSO_LIB_STATUS_CODE_INVALID_SIGNATURE LASSO_LIB_STATUS_CODE_NO_AUTHN_CONTEXT LASSO_LIB_STATUS_CODE_NO_AVAILABLEIDP LASSO_LIB_STATUS_CODE_NO_PASSIVE LASSO_LIB_STATUS_CODE_NO_SUPPORTEDIDP LASSO_LIB_STATUS_CODE_PROXY_COUNT_EXCEEDED LASSO_LIB_STATUS_CODE_UNKNOWN_PRINCIPAL LASSO_LIB_STATUS_CODE_UNSIGNED_AUTHN_REQUEST LASSO_LIB_STATUS_CODE_UNSUPPORTED_PROFILE LASSO_LOGIN_ERROR_ASSERTION_DOES_NOT_MATCH_REQUEST_ID LASSO_LOGIN_ERROR_ASSERTION_REPLAY LASSO_LOGIN_ERROR_CONSENT_NOT_OBTAINED LASSO_LOGIN_ERROR_FEDERATION_NOT_FOUND LASSO_LOGIN_ERROR_INVALID_NAMEIDPOLICY LASSO_LOGIN_ERROR_INVALID_SIGNATURE LASSO_LOGIN_ERROR_NO_DEFAULT_ENDPOINT LASSO_LOGIN_ERROR_REQUEST_DENIED LASSO_LOGIN_ERROR_STATUS_NOT_SUCCESS LASSO_LOGIN_ERROR_UNKNOWN_PRINCIPAL LASSO_LOGIN_ERROR_UNSIGNED_AUTHN_REQUEST LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_ART LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_LECP LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_POST LASSO_LOGIN_PROTOCOL_PROFILE_REDIRECT LASSO_LOGOUT_ERROR_FEDERATION_NOT_FOUND LASSO_LOGOUT_ERROR_REQUEST_DENIED LASSO_LOGOUT_ERROR_UNKNOWN_PRINCIPAL LASSO_LOGOUT_ERROR_UNSUPPORTED_PROFILE LASSO_MD_PROTOCOL_TYPE_ARTIFACT_RESOLUTION LASSO_MD_PROTOCOL_TYPE_ASSERTION_ID_REQUEST LASSO_MD_PROTOCOL_TYPE_FEDERATION_TERMINATION LASSO_MD_PROTOCOL_TYPE_MANAGE_NAME_ID LASSO_MD_PROTOCOL_TYPE_NAME_IDENTIFIER_MAPPING LASSO_MD_PROTOCOL_TYPE_REGISTER_NAME_IDENTIFIER LASSO_MD_PROTOCOL_TYPE_SINGLE_LOGOUT LASSO_MD_PROTOCOL_TYPE_SINGLE_SIGN_ON LASSO_MESSAGE_FORMAT_BASE64 LASSO_MESSAGE_FORMAT_ERROR LASSO_MESSAGE_FORMAT_QUERY LASSO_MESSAGE_FORMAT_SOAP LASSO_MESSAGE_FORMAT_UNKNOWN LASSO_MESSAGE_FORMAT_XML LASSO_MESSAGE_FORMAT_XSCHEMA_ERROR LASSO_METADATA_HREF LASSO_METADATA_PREFIX LASSO_NAME_IDENTIFIER_MAPPING_ERROR_FORBIDDEN_CALL_ON_THIS_SIDE LASSO_NAME_IDENTIFIER_MAPPING_ERROR_MISSING_TARGET_IDENTIFIER LASSO_NAME_IDENTIFIER_MAPPING_ERROR_MISSING_TARGET_NAMESPACE LASSO_PAOS_HREF LASSO_PAOS_PREFIX LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ LASSO_PARAM_ERROR_CHECK_FAILED LASSO_PARAM_ERROR_INVALID_VALUE LASSO_PARAM_ERROR_NON_INITIALIZED_OBJECT LASSO_PROFILE_ERROR_BAD_IDENTITY_DUMP LASSO_PROFILE_ERROR_BAD_SESSION_DUMP LASSO_PROFILE_ERROR_BUILDING_MESSAGE_FAILED LASSO_PROFILE_ERROR_BUILDING_QUERY_FAILED LASSO_PROFILE_ERROR_BUILDING_REQUEST_FAILED LASSO_PROFILE_ERROR_BUILDING_RESPONSE_FAILED LASSO_PROFILE_ERROR_CANNOT_FIND_A_PROVIDER LASSO_PROFILE_ERROR_CANNOT_VERIFY_SIGNATURE LASSO_PROFILE_ERROR_FEDERATION_NOT_FOUND LASSO_PROFILE_ERROR_IDENTITY_NOT_FOUND LASSO_PROFILE_ERROR_INVALID_ARTIFACT LASSO_PROFILE_ERROR_INVALID_HTTP_METHOD LASSO_PROFILE_ERROR_INVALID_ISSUER LASSO_PROFILE_ERROR_INVALID_MSG LASSO_PROFILE_ERROR_INVALID_POST_MSG LASSO_PROFILE_ERROR_INVALID_PROTOCOLPROFILE LASSO_PROFILE_ERROR_INVALID_QUERY LASSO_PROFILE_ERROR_INVALID_REQUEST LASSO_PROFILE_ERROR_INVALID_RESPONSE LASSO_PROFILE_ERROR_INVALID_SOAP_MSG LASSO_PROFILE_ERROR_MISSING_ARTIFACT LASSO_PROFILE_ERROR_MISSING_ASSERTION LASSO_PROFILE_ERROR_MISSING_ENCRYPTION_PRIVATE_KEY LASSO_PROFILE_ERROR_MISSING_ENDPOINT_REFERENCE LASSO_PROFILE_ERROR_MISSING_ENDPOINT_REFERENCE_ADDRESS LASSO_PROFILE_ERROR_MISSING_ISSUER LASSO_PROFILE_ERROR_MISSING_NAME_IDENTIFIER LASSO_PROFILE_ERROR_MISSING_REMOTE_PROVIDERID LASSO_PROFILE_ERROR_MISSING_REQUEST LASSO_PROFILE_ERROR_MISSING_RESOURCE_OFFERING LASSO_PROFILE_ERROR_MISSING_RESPONSE LASSO_PROFILE_ERROR_MISSING_SERVER LASSO_PROFILE_ERROR_MISSING_SERVICE_DESCRIPTION LASSO_PROFILE_ERROR_MISSING_SERVICE_INSTANCE LASSO_PROFILE_ERROR_MISSING_SERVICE_TYPE LASSO_PROFILE_ERROR_MISSING_STATUS_CODE LASSO_PROFILE_ERROR_MISSING_SUBJECT LASSO_PROFILE_ERROR_NAME_IDENTIFIER_NOT_FOUND LASSO_PROFILE_ERROR_RESPONSE_DOES_NOT_MATCH_REQUEST LASSO_PROFILE_ERROR_SESSION_NOT_FOUND LASSO_PROFILE_ERROR_STATUS_NOT_SUCCESS LASSO_PROFILE_ERROR_UNKNOWN_PROFILE_URL LASSO_PROFILE_ERROR_UNKNOWN_PROVIDER LASSO_PROFILE_ERROR_UNSUPPORTED_BINDING LASSO_PROFILE_ERROR_UNSUPPORTED_PROFILE LASSO_PROFILE_SIGNATURE_HINT_FORBID LASSO_PROFILE_SIGNATURE_HINT_FORCE LASSO_PROFILE_SIGNATURE_HINT_MAYBE LASSO_PROTOCOL_LIBERTY_1_0 LASSO_PROTOCOL_LIBERTY_1_1 LASSO_PROTOCOL_LIBERTY_1_2 LASSO_PROTOCOL_NONE LASSO_PROTOCOL_SAML_2_0 LASSO_PROVIDER_ERROR_MISSING_PUBLIC_KEY LASSO_PROVIDER_ROLE_BOTH LASSO_PROVIDER_ROLE_IDP LASSO_PROVIDER_ROLE_NONE LASSO_PROVIDER_ROLE_SP LASSO_PYTHON_HREF LASSO_REGISTRY_ERROR_KEY_EXISTS LASSO_REQUEST_TYPE_DEFEDERATION LASSO_REQUEST_TYPE_DISCO_MODIFY LASSO_REQUEST_TYPE_DISCO_QUERY LASSO_REQUEST_TYPE_DST_MODIFY LASSO_REQUEST_TYPE_DST_QUERY LASSO_REQUEST_TYPE_IDWSF2_DISCO_QUERY LASSO_REQUEST_TYPE_IDWSF2_DISCO_SVCMD_ASSOCIATION_ADD LASSO_REQUEST_TYPE_IDWSF2_DISCO_SVCMD_REGISTER LASSO_REQUEST_TYPE_INVALID LASSO_REQUEST_TYPE_LECP LASSO_REQUEST_TYPE_LOGIN LASSO_REQUEST_TYPE_LOGOUT LASSO_REQUEST_TYPE_NAME_IDENTIFIER_MAPPING LASSO_REQUEST_TYPE_NAME_ID_MANAGEMENT LASSO_REQUEST_TYPE_NAME_REGISTRATION LASSO_REQUEST_TYPE_SASL_REQUEST LASSO_SAML2_ASSERTION_HREF LASSO_SAML2_ASSERTION_INDETERMINATE LASSO_SAML2_ASSERTION_INVALID LASSO_SAML2_ASSERTION_PREFIX LASSO_SAML2_ASSERTION_VALID LASSO_SAML2_ATTRIBUTE_NAME_EPR LASSO_SAML2_ATTRIBUTE_NAME_FORMAT_URI LASSO_SAML2_AUTHN_CONTEXT_AUTHENTICATED_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_INTERNET_PROTOCOL LASSO_SAML2_AUTHN_CONTEXT_INTERNET_PROTOCOL_PASSWORD LASSO_SAML2_AUTHN_CONTEXT_KERBEROS LASSO_SAML2_AUTHN_CONTEXT_MOBILE_ONE_FACTOR_CONTRACT LASSO_SAML2_AUTHN_CONTEXT_MOBILE_ONE_FACTOR_UNREGISTERED LASSO_SAML2_AUTHN_CONTEXT_MOBILE_TWO_FACTOR_CONTRACT LASSO_SAML2_AUTHN_CONTEXT_MOBILE_TWO_FACTOR_UNREGISTERED LASSO_SAML2_AUTHN_CONTEXT_NOMAD_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_PASSWORD LASSO_SAML2_AUTHN_CONTEXT_PASSWORD_PROTECTED_TRANSPORT LASSO_SAML2_AUTHN_CONTEXT_PERSONALIZED_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_PGP LASSO_SAML2_AUTHN_CONTEXT_PREVIOUS_SESSION LASSO_SAML2_AUTHN_CONTEXT_SECURE_REMOTE_PASSWORD LASSO_SAML2_AUTHN_CONTEXT_SMARTCARD LASSO_SAML2_AUTHN_CONTEXT_SMARTCARD_PKI LASSO_SAML2_AUTHN_CONTEXT_SOFTWARE_PKI LASSO_SAML2_AUTHN_CONTEXT_SPKI LASSO_SAML2_AUTHN_CONTEXT_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_TIME_SYNC_TOKEN LASSO_SAML2_AUTHN_CONTEXT_TLS_CLIENT LASSO_SAML2_AUTHN_CONTEXT_UNSPECIFIED LASSO_SAML2_AUTHN_CONTEXT_X509 LASSO_SAML2_AUTHN_CONTEXT_XMLDSIG LASSO_SAML2_CONFIRMATION_METHOD_BEARER LASSO_SAML2_CONFIRMATION_METHOD_HOLDER_OF_KEY LASSO_SAML2_CONSENT_EXPLICIT LASSO_SAML2_CONSENT_IMPLICIT LASSO_SAML2_CONSENT_INAPPLICABLE LASSO_SAML2_CONSENT_OBTAINED LASSO_SAML2_CONSENT_PRIOR LASSO_SAML2_CONSENT_UNAVAILABLE LASSO_SAML2_DEFLATE_ENCODING LASSO_SAML2_METADATA_BINDING_ARTIFACT LASSO_SAML2_METADATA_BINDING_PAOS LASSO_SAML2_METADATA_BINDING_POST LASSO_SAML2_METADATA_BINDING_REDIRECT LASSO_SAML2_METADATA_BINDING_SOAP LASSO_SAML2_METADATA_HREF LASSO_SAML2_NAME_IDENTIFIER_FORMAT_EMAIL LASSO_SAML2_NAME_IDENTIFIER_FORMAT_ENCRYPTED LASSO_SAML2_NAME_IDENTIFIER_FORMAT_ENTITY LASSO_SAML2_NAME_IDENTIFIER_FORMAT_KERBEROS LASSO_SAML2_NAME_IDENTIFIER_FORMAT_PERSISTENT LASSO_SAML2_NAME_IDENTIFIER_FORMAT_TRANSIENT LASSO_SAML2_NAME_IDENTIFIER_FORMAT_UNSPECIFIED LASSO_SAML2_NAME_IDENTIFIER_FORMAT_WINDOWS LASSO_SAML2_NAME_IDENTIFIER_FORMAT_X509 LASSO_SAML2_PROTOCOL_HREF LASSO_SAML2_PROTOCOL_PREFIX LASSO_SAML2_STATUS_CODE_AUTHN_FAILED LASSO_SAML2_STATUS_CODE_INVALID_ATTR_NAME LASSO_SAML2_STATUS_CODE_INVALID_NAME_ID_POLICY LASSO_SAML2_STATUS_CODE_NO_AUTHN_CONTEXT LASSO_SAML2_STATUS_CODE_NO_AVAILABLE_IDP LASSO_SAML2_STATUS_CODE_NO_PASSIVE LASSO_SAML2_STATUS_CODE_NO_SUPPORTED_IDP LASSO_SAML2_STATUS_CODE_PARTIAL_LOGOUT LASSO_SAML2_STATUS_CODE_PROXY_COUNT_EXCEEDED LASSO_SAML2_STATUS_CODE_REQUESTER LASSO_SAML2_STATUS_CODE_REQUEST_DENIED LASSO_SAML2_STATUS_CODE_REQUEST_UNSUPPORTED LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_DEPRECATED LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_TOO_HIGH LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_TOO_LOW LASSO_SAML2_STATUS_CODE_RESOURCE_NOT_RECOGNIZED LASSO_SAML2_STATUS_CODE_RESPONDER LASSO_SAML2_STATUS_CODE_SUCCESS LASSO_SAML2_STATUS_CODE_TOO_MANY_RESPONSES LASSO_SAML2_STATUS_CODE_UNKNOWN_ATTR_PROFILE LASSO_SAML2_STATUS_CODE_UNKNOWN_PRINCIPAL LASSO_SAML2_STATUS_CODE_UNSUPPORTED_BINDING LASSO_SAML2_STATUS_CODE_VERSION_MISMATCH LASSO_SAML_ASSERTION_HREF LASSO_SAML_ASSERTION_PREFIX LASSO_SAML_AUTHENTICATION_METHODS_PKI LASSO_SAML_AUTHENTICATION_METHOD_HARDWARE_TOKEN LASSO_SAML_AUTHENTICATION_METHOD_KERBEROS LASSO_SAML_AUTHENTICATION_METHOD_LIBERTY LASSO_SAML_AUTHENTICATION_METHOD_PASSWORD LASSO_SAML_AUTHENTICATION_METHOD_PGP LASSO_SAML_AUTHENTICATION_METHOD_SECURE_REMOTE_PASSWORD LASSO_SAML_AUTHENTICATION_METHOD_SMARTCARD_PKI LASSO_SAML_AUTHENTICATION_METHOD_SOFTWARE_PKI LASSO_SAML_AUTHENTICATION_METHOD_UNSPECIFIED LASSO_SAML_AUTHENTICATION_METHOD_XKMS LASSO_SAML_AUTHENTICATION_METHOD_XMLD_SIG LASSO_SAML_CONFIRMATION_METHOD_ARTIFACT LASSO_SAML_CONFIRMATION_METHOD_ARTIFACT01 LASSO_SAML_CONFIRMATION_METHOD_BEARER LASSO_SAML_CONFIRMATION_METHOD_HOLDER_OF_KEY LASSO_SAML_CONFIRMATION_METHOD_SENDER_VOUCHES LASSO_SAML_MAJOR_VERSION_N LASSO_SAML_MINOR_VERSION_N LASSO_SAML_PROTOCOL_HREF LASSO_SAML_PROTOCOL_PREFIX LASSO_SAML_STATUS_CODE_REQUESTER LASSO_SAML_STATUS_CODE_REQUEST_DENIED LASSO_SAML_STATUS_CODE_REQUEST_VERSION_DEPRECATED LASSO_SAML_STATUS_CODE_REQUEST_VERSION_TOO_HIGH LASSO_SAML_STATUS_CODE_REQUEST_VERSION_TOO_LOW LASSO_SAML_STATUS_CODE_RESOURCE_NOT_RECOGNIZED LASSO_SAML_STATUS_CODE_RESPONDER LASSO_SAML_STATUS_CODE_SUCCESS LASSO_SAML_STATUS_CODE_TOO_MANY_RESPONSES LASSO_SAML_STATUS_CODE_VERSION_MISMATCH LASSO_SERVER_ERROR_ADD_PROVIDER_FAILED LASSO_SERVER_ERROR_ADD_PROVIDER_PROTOCOL_MISMATCH LASSO_SERVER_ERROR_INVALID_XML LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND LASSO_SERVER_ERROR_SET_ENCRYPTION_PRIVATE_KEY_FAILED LASSO_SIGNATURE_METHOD_DSA_SHA1 LASSO_SIGNATURE_METHOD_RSA_SHA1 LASSO_SIGNATURE_TYPE_NONE LASSO_SIGNATURE_TYPE_SIMPLE LASSO_SIGNATURE_TYPE_WITHX509 LASSO_SOAP_ENV_ACTOR LASSO_SOAP_ENV_HREF LASSO_SOAP_ENV_PREFIX LASSO_SOAP_ERROR_MISSING_BODY LASSO_SOAP_ERROR_MISSING_ENVELOPE LASSO_SOAP_ERROR_MISSING_HEADER LASSO_SOAP_ERROR_MISSING_SOAP_FAULT_DETAIL LASSO_SOAP_ERROR_REDIRECT_REQUEST_FAULT LASSO_SOAP_FAULT_CODE_CLIENT LASSO_SOAP_FAULT_CODE_MUST_UNDERSTAND LASSO_SOAP_FAULT_CODE_SERVER LASSO_SOAP_FAULT_CODE_VERSION_MISMATCH LASSO_WSF_ENABLED LASSO_WSF_PROFILE_ERROR_INVALID_OR_MISSING_REFERENCE_TO_MESSAGE_ID LASSO_WSF_PROFILE_ERROR_MISSING_ASSERTION_ID LASSO_WSF_PROFILE_ERROR_MISSING_CORRELATION LASSO_WSF_PROFILE_ERROR_MISSING_CREDENTIAL_REF LASSO_WSF_PROFILE_ERROR_MISSING_DESCRIPTION LASSO_WSF_PROFILE_ERROR_MISSING_ENDPOINT LASSO_WSF_PROFILE_ERROR_MISSING_RESOURCE_ID LASSO_WSF_PROFILE_ERROR_MISSING_SECURITY LASSO_WSF_PROFILE_ERROR_REDIRECT_REQUEST LASSO_WSF_PROFILE_ERROR_SECURITY_MECHANISM_CHECK_FAILED LASSO_WSF_PROFILE_ERROR_SERVER_INTERACTION_REQUIRED LASSO_WSF_PROFILE_ERROR_SERVER_INTERACTION_REQUIRED_FOR_DATA LASSO_WSF_PROFILE_ERROR_SOAP_FAULT LASSO_WSF_PROFILE_ERROR_UNKNOWN_STATUS_CODE LASSO_WSF_PROFILE_ERROR_UNSUPPORTED_SECURITY_MECHANISM LASSO_WSSEC_ERROR_MISSING_SECURITY_TOKEN LASSO_XML_ERROR_ATTR_NOT_FOUND LASSO_XML_ERROR_ATTR_VALUE_NOT_FOUND LASSO_XML_ERROR_INVALID_FILE LASSO_XML_ERROR_MISSING_NAMESPACE LASSO_XML_ERROR_NODE_CONTENT_NOT_FOUND LASSO_XML_ERROR_NODE_NOT_FOUND LASSO_XML_ERROR_OBJECT_CONSTRUCTION_FAILED LASSO_XSI_HREF LASSO_XSI_PREFIX struct LassoAssertionQuery { LassoAssertionQueryPrivate* private_data } LassoAssertionQueryRequestType LassoCheckVersionMode struct LassoDefederation { void* private_data } struct LassoDsKeyInfo { LassoDsKeyValue* KeyValue } struct LassoDsKeyValue { LassoDsRsaKeyValue* RSAKeyValue } struct LassoDsRsaKeyValue { char* Modulus, char* Exponent } struct LassoEcp { gchar* assertionConsumerURL, LassoEcpPrivate* private_data } LassoEncryptionMode LassoEncryptionSymKeyType struct LassoFederation { gchar* remote_providerID, LassoNode* local_nameIdentifier, LassoNode* remote_nameIdentifier, LassoFederationPrivate* private_data } LassoHttpMethod struct LassoIdentity { GHashTable* federations, gboolean is_dirty, LassoIdentityPrivate* private_data } struct LassoLecp { LassoLibAuthnRequestEnvelope* authnRequestEnvelope, LassoLibAuthnResponseEnvelope* authnResponseEnvelope, char* assertionConsumerServiceURL, void* private_data } struct LassoLibAssertion { char* InResponseTo } struct LassoLibAuthenticationStatement { LassoLibAuthnContext* AuthnContext, char* ReauthenticateOnOrAfter, char* SessionIndex } struct LassoLibAuthnContext { char* AuthnContextClassRef, char* AuthnContextStatementRef, void* AuthenticationContextStatement } struct LassoLibAuthnRequest { GList* Extension, char* ProviderID, char* AffiliationID, char* NameIDPolicy, gboolean ForceAuthn, gboolean IsPassive, char* ProtocolProfile, char* AssertionConsumerServiceID, LassoLibRequestAuthnContext* RequestAuthnContext, char* RelayState, LassoLibScoping* Scoping, char* consent } struct LassoLibAuthnRequestEnvelope { GList* Extension, LassoLibAuthnRequest* AuthnRequest, char* ProviderID, char* ProviderName, char* AssertionConsumerServiceURL, LassoLibIDPList* IDPList, gboolean IsPassive } struct LassoLibAuthnResponse { GList* Extension, char* ProviderID, char* RelayState, char* consent } struct LassoLibAuthnResponseEnvelope { GList* Extension, LassoLibAuthnResponse* AuthnResponse, char* AssertionConsumerServiceURL } struct LassoLibFederationTerminationNotification { GList* Extension, char* ProviderID, LassoSamlNameIdentifier* NameIdentifier, char* consent, char* RelayState } struct LassoLibIDPEntries { GList* IDPEntry } struct LassoLibIDPEntry { char* ProviderID, char* ProviderName, char* Loc } struct LassoLibIDPList { LassoLibIDPEntries* IDPEntries, char* GetComplete } struct LassoLibLogoutRequest { GList* Extension, char* ProviderID, LassoSamlNameIdentifier* NameIdentifier, char* SessionIndex, char* RelayState, char* consent, char* NotOnOrAfter } struct LassoLibLogoutResponse { } struct LassoLibNameIdentifierMappingRequest { GList* Extension, char* ProviderID, LassoSamlNameIdentifier* NameIdentifier, char* TargetNamespace, char* consent } struct LassoLibNameIdentifierMappingResponse { GList* Extension, char* ProviderID, LassoSamlpStatus* Status, LassoSamlNameIdentifier* NameIdentifier } struct LassoLibRegisterNameIdentifierRequest { GList* Extension, char* ProviderID, LassoSamlNameIdentifier* IDPProvidedNameIdentifier, LassoSamlNameIdentifier* SPProvidedNameIdentifier, LassoSamlNameIdentifier* OldProvidedNameIdentifier, char* RelayState } struct LassoLibRegisterNameIdentifierResponse { } struct LassoLibRequestAuthnContext { GList* AuthnContextClassRef, GList* AuthnContextStatementRef, char* AuthnContextComparison } struct LassoLibScoping { int ProxyCount, LassoLibIDPList* IDPList } struct LassoLibStatusResponse { GList* Extension, char* ProviderID, LassoSamlpStatus* Status, char* RelayState } struct LassoLibSubject { LassoSamlNameIdentifier* IDPProvidedNameIdentifier } struct LassoLogin { LassoLoginProtocolProfile protocolProfile, gchar* assertionArtifact, LassoSamlAssertion* assertion, gchar* nameIDPolicy, LassoHttpMethod http_method, LassoLoginPrivate* private_data } LassoLoginProtocolProfile struct LassoLogout { LassoNode* initial_request, LassoNode* initial_response, gchar* initial_remote_providerID, gint providerID_index, LassoHttpMethod initial_http_request_method, LassoLogoutPrivate* private_data } LassoMdProtocolType LassoMessageFormat struct LassoMiscTextNode { char* content, char* name, char* ns_href, char* ns_prefix, gboolean text_child } struct LassoNameIdManagement { void* private_data } struct LassoNameIdentifierMapping { gchar* targetNameIdentifier, void* private_data } struct LassoNameRegistration { LassoSamlNameIdentifier* oldNameIdentifier, void* private_data } struct LassoNode { } struct LassoProfile { LassoServer* server, LassoNode* request, LassoNode* response, LassoNode* nameIdentifier, gchar* remote_providerID, gchar* msg_url, gchar* msg_body, gchar* msg_relayState, LassoIdentity* identity, LassoSession* session, LassoHttpMethod http_request_method, gint signature_status, LassoProfilePrivate* private_data } LassoProfileSignatureHint LassoProtocolConformance struct LassoProvider { gchar* ProviderID, LassoProviderRole role, char* metadata_filename, gchar* public_key, gchar* ca_cert_chain, LassoProviderPrivate* private_data } LassoProviderRole LassoRequestType struct LassoSaml2Action { char* content, char* Namespace } struct LassoSaml2Advice { GList* AssertionIDRef, GList* AssertionURIRef, GList* Assertion, GList* EncryptedAssertion } struct LassoSaml2Assertion { LassoSaml2NameID* Issuer, LassoSaml2Subject* Subject, LassoSaml2Conditions* Conditions, LassoSaml2Advice* Advice, GList* Statement, GList* AuthnStatement, GList* AuthzDecisionStatement, GList* AttributeStatement, char* Version, char* ID, char* IssueInstant, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file, gboolean encryption_activated, char* encryption_public_key_str, LassoEncryptionSymKeyType encryption_sym_key_type } LassoSaml2AssertionValidationState struct LassoSaml2Attribute { GList* AttributeValue, char* Name, char* NameFormat, char* FriendlyName } struct LassoSaml2AttributeStatement { GList* Attribute, GList* EncryptedAttribute } struct LassoSaml2AttributeValue { GList* any } struct LassoSaml2AudienceRestriction { char* Audience } struct LassoSaml2AuthnContext { char* AuthnContextClassRef, char* AuthnContextDeclRef, char* AuthenticatingAuthority } struct LassoSaml2AuthnStatement { LassoSaml2SubjectLocality* SubjectLocality, LassoSaml2AuthnContext* AuthnContext, char* AuthnInstant, char* SessionIndex, char* SessionNotOnOrAfter } struct LassoSaml2AuthzDecisionStatement { LassoSaml2Action* Action, LassoSaml2Evidence* Evidence, char* Resource, char* Decision } struct LassoSaml2BaseIDAbstract { char* NameQualifier, char* SPNameQualifier } struct LassoSaml2ConditionAbstract { } struct LassoSaml2Conditions { GList* Condition, GList* AudienceRestriction, GList* OneTimeUse, GList* ProxyRestriction, char* NotBefore, char* NotOnOrAfter } struct LassoSaml2EncryptedElement { xmlNode* EncryptedData, GList* EncryptedKey, LassoNode* original_data } struct LassoSaml2Evidence { GList* AssertionIDRef, GList* AssertionURIRef, GList* Assertion, GList* EncryptedAssertion } struct LassoSaml2KeyInfoConfirmationData { } struct LassoSaml2NameID { char* content, char* Format, char* SPProvidedID, char* NameQualifier, char* SPNameQualifier } struct LassoSaml2OneTimeUse { } struct LassoSaml2ProxyRestriction { char* Audience, char* Count } struct LassoSaml2StatementAbstract { } struct LassoSaml2Subject { LassoSaml2BaseIDAbstract* BaseID, LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, LassoSaml2SubjectConfirmation* SubjectConfirmation } struct LassoSaml2SubjectConfirmation { LassoSaml2BaseIDAbstract* BaseID, LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, LassoSaml2SubjectConfirmationData* SubjectConfirmationData, char* Method } struct LassoSaml2SubjectConfirmationData { char* NotBefore, char* NotOnOrAfter, char* Recipient, char* InResponseTo, char* Address } struct LassoSaml2SubjectLocality { char* Address, char* DNSName } struct LassoSamlAdvice { GList* any } struct LassoSamlAssertion { LassoSamlConditions* Conditions, LassoSamlAdvice* Advice, void* Statement, LassoSamlSubjectStatement* SubjectStatement, LassoSamlAuthenticationStatement* AuthenticationStatement, void* AuthorizationDecisionStatement, LassoSamlAttributeStatement* AttributeStatement, int MajorVersion, int MinorVersion, char* AssertionID, char* Issuer, char* IssueInstant, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlAttribute { gchar* attributeName, gchar* attributeNameSpace, GList* AttributeValue } struct LassoSamlAttributeDesignator { char* AttributeName, char* AttributeNamespace } struct LassoSamlAttributeStatement { GList* Attribute } struct LassoSamlAttributeValue { GList* any } struct LassoSamlAudienceRestrictionCondition { GList* Audience } struct LassoSamlAuthenticationStatement { LassoSamlSubjectLocality* SubjectLocality, GList* AuthorityBinding, char* AuthenticationMethod, char* AuthenticationInstant } struct LassoSamlAuthorityBinding { char* AuthorityKind, char* Location, char* Binding } struct LassoSamlConditionAbstract { } struct LassoSamlConditions { GList* Condition, GList* AudienceRestrictionCondition, char* NotBefore, char* NotOnOrAfter } struct LassoSamlNameIdentifier { char* NameQualifier, char* Format, char* content } struct LassoSamlStatementAbstract { } struct LassoSamlSubject { LassoSamlNameIdentifier* NameIdentifier, LassoSamlSubjectConfirmation* SubjectConfirmation, LassoSaml2EncryptedElement* EncryptedNameIdentifier } struct LassoSamlSubjectConfirmation { GList* ConfirmationMethod, char* SubjectConfirmationData, LassoDsKeyInfo* KeyInfo } struct LassoSamlSubjectLocality { char* IPAddress, char* DNSAddress } struct LassoSamlSubjectStatement { } struct LassoSamlSubjectStatementAbstract { LassoSamlSubject* Subject } struct LassoSamlp2ArtifactResolve { char* Artifact } struct LassoSamlp2ArtifactResponse { LassoNode* any } struct LassoSamlp2AssertionIDRequest { char* AssertionIDRef } struct LassoSamlp2AttributeQuery { GList* Attribute } struct LassoSamlp2AuthnQuery { LassoSamlp2RequestedAuthnContext* RequestedAuthnContext, char* SessionIndex } struct LassoSamlp2AuthnRequest { LassoSaml2Subject* Subject, LassoSamlp2NameIDPolicy* NameIDPolicy, LassoSaml2Conditions* Conditions, LassoSamlp2RequestedAuthnContext* RequestedAuthnContext, LassoSamlp2Scoping* Scoping, gboolean ForceAuthn, gboolean IsPassive, char* ProtocolBinding, int AssertionConsumerServiceIndex, char* AssertionConsumerServiceURL, int AttributeConsumingServiceIndex, char* ProviderName, G_GNUC_DEPRECATED char } struct LassoSamlp2AuthzDecisionQuery { LassoSaml2Action* Action, LassoSaml2Evidence* Evidence, char* Resource } struct LassoSamlp2Extensions { } struct LassoSamlp2IDPEntry { char* ProviderID, char* Name, char* Loc } struct LassoSamlp2IDPList { LassoSamlp2IDPEntry* IDPEntry, char* GetComplete } struct LassoSamlp2LogoutRequest { LassoSaml2BaseIDAbstract* BaseID, LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, char* SessionIndex, char* Reason, char* NotOnOrAfter, G_GNUC_DEPRECATED char } struct LassoSamlp2LogoutResponse { G_GNUC_DEPRECATED char } struct LassoSamlp2ManageNameIDRequest { LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, char* NewID, LassoSaml2EncryptedElement* NewEncryptedID, LassoSamlp2Terminate* Terminate } struct LassoSamlp2ManageNameIDResponse { } struct LassoSamlp2NameIDMappingRequest { LassoSaml2BaseIDAbstract* BaseID, LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, LassoSamlp2NameIDPolicy* NameIDPolicy } struct LassoSamlp2NameIDMappingResponse { LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID } struct LassoSamlp2NameIDPolicy { char* Format, char* SPNameQualifier, gboolean AllowCreate } struct LassoSamlp2RequestAbstract { LassoSaml2NameID* Issuer, LassoSamlp2Extensions* Extensions, char* ID, char* Version, char* IssueInstant, char* Destination, char* Consent, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlp2RequestedAuthnContext { GList* AuthnContextClassRef, GList* AuthnContextDeclRef, char* Comparison } struct LassoSamlp2Response { GList* Assertion, GList* EncryptedAssertion } struct LassoSamlp2Scoping { LassoSamlp2IDPList* IDPList, char* RequesterID, char* ProxyCount } struct LassoSamlp2Status { LassoSamlp2StatusCode* StatusCode, char* StatusMessage, LassoSamlp2StatusDetail* StatusDetail } struct LassoSamlp2StatusCode { LassoSamlp2StatusCode* StatusCode, char* Value } struct LassoSamlp2StatusDetail { } struct LassoSamlp2StatusResponse { LassoSaml2NameID* Issuer, LassoSamlp2Extensions* Extensions, LassoSamlp2Status* Status, char* ID, char* InResponseTo, char* Version, char* IssueInstant, char* Destination, char* Consent, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlp2SubjectQueryAbstract { LassoSaml2Subject* Subject } struct LassoSamlp2Terminate { } struct LassoSamlpRequest { char* AssertionArtifact } struct LassoSamlpRequestAbstract { GList* RespondWith, char* RequestID, int MajorVersion, int MinorVersion, char* IssueInstant, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlpResponse { LassoSamlpStatus* Status, GList* Assertion } struct LassoSamlpResponseAbstract { char* ResponseID, char* InResponseTo, int MajorVersion, int MinorVersion, char* IssueInstant, char* Recipient, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlpStatus { LassoSamlpStatusCode* StatusCode, char* StatusMessage } struct LassoSamlpStatusCode { LassoSamlpStatusCode* StatusCode, char* Value } struct LassoServer { GHashTable* providers, GHashTable* services, gchar* private_key, gchar* private_key_password, gchar* certificate, LassoSignatureMethod signature_method, LassoServerPrivate* private_data } struct LassoSession { GHashTable* assertions, gboolean is_dirty, LassoSessionPrivate* private_data } LassoSignatureMethod LassoSignatureType gint lasso_assertion_query_build_request_msg ( LassoAssertionQuery* assertion_query ) int lasso_assertion_query_build_response_msg ( LassoAssertionQuery* assertion_query ) None lasso_assertion_query_destroy ( LassoAssertionQuery* assertion_query ) GType lasso_assertion_query_get_type ( ) gint lasso_assertion_query_init_request ( LassoAssertionQuery* assertion_query, char* remote_provider_id, LassoHttpMethod http_method, LassoAssertionQueryRequestType query_request_type ) LassoAssertionQuery* lasso_assertion_query_new ( LassoServer* server ) gint lasso_assertion_query_process_request_msg ( LassoAssertionQuery* assertion_query, gchar* request_msg ) gint lasso_assertion_query_process_response_msg ( LassoAssertionQuery* assertion_query, gchar* response_msg ) gint lasso_assertion_query_validate_request ( LassoAssertionQuery* assertion_query ) int lasso_check_version ( int major, int minor, int subminor, LassoCheckVersionMode mode ) gint lasso_defederation_build_notification_msg ( LassoDefederation* defederation ) None lasso_defederation_destroy ( LassoDefederation* defederation ) GType lasso_defederation_get_type ( ) gint lasso_defederation_init_notification ( LassoDefederation* defederation, gchar* remote_providerID, LassoHttpMethod http_method ) LassoDefederation* lasso_defederation_new ( LassoServer* server ) gint lasso_defederation_process_notification_msg ( LassoDefederation* defederation, gchar* notification_msg ) gint lasso_defederation_validate_notification ( LassoDefederation* defederation ) GType lasso_ds_key_info_get_type ( ) LassoDsKeyInfo* lasso_ds_key_info_new ( ) GType lasso_ds_key_value_get_type ( ) LassoDsKeyValue* lasso_ds_key_value_new ( ) GType lasso_ds_rsa_key_value_get_type ( ) LassoDsRsaKeyValue* lasso_ds_rsa_key_value_new ( ) None lasso_ecp_destroy ( LassoEcp* ecp ) GType lasso_ecp_get_type ( ) LassoEcp* lasso_ecp_new ( LassoServer* server ) int lasso_ecp_process_authn_request_msg ( LassoEcp* ecp, const char* authn_request_msg ) int lasso_ecp_process_response_msg ( LassoEcp* ecp, const char* response_msg ) None lasso_federation_build_local_name_identifier ( LassoFederation* federation, const gchar* nameQualifier, const gchar* format, const gchar* content ) None lasso_federation_destroy ( LassoFederation* federation ) GType lasso_federation_get_type ( ) LassoFederation* lasso_federation_new ( gchar* remote_providerID ) gboolean lasso_federation_verify_name_identifier ( LassoFederation* federation, LassoNode* name_identifier ) char* lasso_get_prefix_for_dst_service_href ( const char* href ) gchar* lasso_get_prefix_for_idwsf2_dst_service_href ( const gchar* href ) None lasso_identity_destroy ( LassoIdentity* identity ) gchar* lasso_identity_dump ( LassoIdentity* identity ) LassoFederation* lasso_identity_get_federation ( LassoIdentity* identity, const char* providerID ) GType lasso_identity_get_type ( ) LassoIdentity* lasso_identity_new ( ) LassoIdentity* lasso_identity_new_from_dump ( const gchar* dump ) int lasso_init ( ) int lasso_lecp_build_authn_request_envelope_msg ( LassoLecp* lecp ) int lasso_lecp_build_authn_request_msg ( LassoLecp* lecp ) int lasso_lecp_build_authn_response_envelope_msg ( LassoLecp* lecp ) int lasso_lecp_build_authn_response_msg ( LassoLecp* lecp ) None lasso_lecp_destroy ( LassoLecp* lecp ) GType lasso_lecp_get_type ( ) int lasso_lecp_init_authn_request ( LassoLecp* lecp, const char* remote_providerID ) LassoLecp* lasso_lecp_new ( LassoServer* server ) int lasso_lecp_process_authn_request_envelope_msg ( LassoLecp* lecp, const char* request_msg ) int lasso_lecp_process_authn_request_msg ( LassoLecp* lecp, const char* authn_request_msg ) int lasso_lecp_process_authn_response_envelope_msg ( LassoLecp* lecp, const char* response_msg ) GType lasso_lib_assertion_get_type ( ) LassoLibAssertion* lasso_lib_assertion_new ( ) LassoLibAssertion* lasso_lib_assertion_new_full ( const char* issuer, const char* requestID, const char* audience, const char* notBefore, const char* notOnOrAfter ) GType lasso_lib_authentication_statement_get_type ( ) LassoLibAuthenticationStatement* lasso_lib_authentication_statement_new ( ) LassoLibAuthenticationStatement* lasso_lib_authentication_statement_new_full ( const char* authenticationMethod, const char* authenticationInstant, const char* reauthenticateOnOrAfter, LassoSamlNameIdentifier* sp_identifier, LassoSamlNameIdentifier* idp_identifier ) GType lasso_lib_authn_context_get_type ( ) LassoNode* lasso_lib_authn_context_new ( ) GType lasso_lib_authn_request_envelope_get_type ( ) LassoLibAuthnRequestEnvelope* lasso_lib_authn_request_envelope_new ( ) LassoLibAuthnRequestEnvelope* lasso_lib_authn_request_envelope_new_full ( LassoLibAuthnRequest* authnRequest, char* providerID, char* assertionConsumerServiceURL ) GType lasso_lib_authn_request_get_type ( ) LassoLibAuthnRequest* lasso_lib_authn_request_new ( ) GType lasso_lib_authn_response_envelope_get_type ( ) LassoLibAuthnResponseEnvelope* lasso_lib_authn_response_envelope_new ( LassoLibAuthnResponse* response, char* assertionConsumerServiceURL ) GType lasso_lib_authn_response_get_type ( ) LassoNode* lasso_lib_authn_response_new ( char* providerID, LassoLibAuthnRequest* request ) GType lasso_lib_federation_termination_notification_get_type ( ) LassoNode* lasso_lib_federation_termination_notification_new ( ) LassoLibFederationTerminationNotification* lasso_lib_federation_termination_notification_new_full ( char* providerID, LassoSamlNameIdentifier* nameIdentifier, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_idp_entries_get_type ( ) LassoNode* lasso_lib_idp_entries_new ( ) GType lasso_lib_idp_entry_get_type ( ) LassoNode* lasso_lib_idp_entry_new ( ) GType lasso_lib_idp_list_get_type ( ) LassoNode* lasso_lib_idp_list_new ( ) GType lasso_lib_logout_request_get_type ( ) LassoNode* lasso_lib_logout_request_new ( ) LassoLibLogoutRequest* lasso_lib_logout_request_new_full ( char* providerID, LassoSamlNameIdentifier* nameIdentifier, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_logout_response_get_type ( ) LassoNode* lasso_lib_logout_response_new ( ) LassoLibLogoutResponse* lasso_lib_logout_response_new_full ( char* providerID, const char* statusCodeValue, LassoLibLogoutRequest* request, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_name_identifier_mapping_request_get_type ( ) LassoNode* lasso_lib_name_identifier_mapping_request_new ( ) LassoLibNameIdentifierMappingRequest* lasso_lib_name_identifier_mapping_request_new_full ( char* providerID, LassoSamlNameIdentifier* nameIdentifier, const char* targetNamespace, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_name_identifier_mapping_response_get_type ( ) LassoNode* lasso_lib_name_identifier_mapping_response_new ( ) LassoLibNameIdentifierMappingResponse* lasso_lib_name_identifier_mapping_response_new_full ( char* provideRID, const char* statusCodeValue, LassoLibNameIdentifierMappingRequest* request, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_register_name_identifier_request_get_type ( ) LassoNode* lasso_lib_register_name_identifier_request_new ( ) LassoLibRegisterNameIdentifierRequest* lasso_lib_register_name_identifier_request_new_full ( const char* providerID, LassoSamlNameIdentifier* idpNameIdentifier, LassoSamlNameIdentifier* spNameIdentifier, LassoSamlNameIdentifier* oldNameIdentifier, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_register_name_identifier_response_get_type ( ) LassoNode* lasso_lib_register_name_identifier_response_new ( ) LassoLibRegisterNameIdentifierResponse* lasso_lib_register_name_identifier_response_new_full ( const char* providerID, const char* statusCodeValue, LassoLibRegisterNameIdentifierRequest* request, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_request_authn_context_get_type ( ) LassoLibRequestAuthnContext* lasso_lib_request_authn_context_new ( ) GType lasso_lib_scoping_get_type ( ) LassoLibScoping* lasso_lib_scoping_new ( ) GType lasso_lib_status_response_get_type ( ) LassoNode* lasso_lib_status_response_new ( ) GType lasso_lib_subject_get_type ( ) LassoLibSubject* lasso_lib_subject_new ( ) gint lasso_login_accept_sso ( LassoLogin* login ) gint lasso_login_build_artifact_msg ( LassoLogin* login, LassoHttpMethod http_method ) int lasso_login_build_assertion ( LassoLogin* login, const char* authenticationMethod, const char* authenticationInstant, const char* reauthenticateOnOrAfter, const char* notBefore, const char* notOnOrAfter ) gint lasso_login_build_authn_request_msg ( LassoLogin* login ) gint lasso_login_build_authn_response_msg ( LassoLogin* login ) gint lasso_login_build_request_msg ( LassoLogin* login ) gint lasso_login_build_response_msg ( LassoLogin* login, gchar* remote_providerID ) None lasso_login_destroy ( LassoLogin* login ) gchar* lasso_login_dump ( LassoLogin* login ) LassoNode* lasso_login_get_assertion ( LassoLogin* login ) GType lasso_login_get_type ( ) gint lasso_login_init_authn_request ( LassoLogin* login, const gchar* remote_providerID, LassoHttpMethod http_method ) gint lasso_login_init_idp_initiated_authn_request ( LassoLogin* login, const gchar* remote_providerID ) gint lasso_login_init_request ( LassoLogin* login, gchar* response_msg, LassoHttpMethod response_http_method ) gboolean lasso_login_must_ask_for_consent ( LassoLogin* login ) gboolean lasso_login_must_authenticate ( LassoLogin* login ) LassoLogin* lasso_login_new ( LassoServer* server ) LassoLogin* lasso_login_new_from_dump ( LassoServer* server, const gchar* dump ) int lasso_login_process_authn_request_msg ( LassoLogin* login, const char* authn_request_msg ) gint lasso_login_process_authn_response_msg ( LassoLogin* login, gchar* authn_response_msg ) int lasso_login_process_paos_response_msg ( LassoLogin* login, gchar* msg ) gint lasso_login_process_request_msg ( LassoLogin* login, gchar* request_msg ) gint lasso_login_process_response_msg ( LassoLogin* login, gchar* response_msg ) int lasso_login_validate_request_msg ( LassoLogin* login, gboolean authentication_result, gboolean is_consent_obtained ) gint lasso_logout_build_request_msg ( LassoLogout* logout ) gint lasso_logout_build_response_msg ( LassoLogout* logout ) None lasso_logout_destroy ( LassoLogout* logout ) gchar* lasso_logout_dump ( LassoLogout* logout ) gchar* lasso_logout_get_next_providerID ( LassoLogout* logout ) GType lasso_logout_get_type ( ) gint lasso_logout_init_request ( LassoLogout* logout, gchar* remote_providerID, LassoHttpMethod request_method ) LassoLogout* lasso_logout_new ( LassoServer* server ) LassoLogout* lasso_logout_new_from_dump ( LassoServer* server, const gchar* dump ) gint lasso_logout_process_request_msg ( LassoLogout* logout, gchar* request_msg ) gint lasso_logout_process_response_msg ( LassoLogout* logout, gchar* response_msg ) gint lasso_logout_reset_providerID_index ( LassoLogout* logout ) gint lasso_logout_validate_request ( LassoLogout* logout ) GType lasso_misc_text_node_get_type ( ) xmlNode* lasso_misc_text_node_get_xml_content ( LassoMiscTextNode* misc_text_node ) LassoNode* lasso_misc_text_node_new ( ) LassoMiscTextNode* lasso_misc_text_node_new_with_string ( const char* content ) LassoMiscTextNode* lasso_misc_text_node_new_with_xml_node ( xmlNode* xml_node ) None lasso_misc_text_node_set_xml_content ( LassoMiscTextNode* misc_text_node, xmlNode* node ) gint lasso_name_id_management_build_request_msg ( LassoNameIdManagement* name_id_management ) int lasso_name_id_management_build_response_msg ( LassoNameIdManagement* name_id_management ) None lasso_name_id_management_destroy ( LassoNameIdManagement* name_id_management ) char* lasso_name_id_management_dump ( LassoNameIdManagement* name_id_management ) GType lasso_name_id_management_get_type ( ) gint lasso_name_id_management_init_request ( LassoNameIdManagement* name_id_management, char* remote_provider_id, char* new_name_id, LassoHttpMethod http_method ) LassoNameIdManagement* lasso_name_id_management_new ( LassoServer* server ) LassoNameIdManagement* lasso_name_id_management_new_from_dump ( LassoServer* server, const char* dump ) gint lasso_name_id_management_process_request_msg ( LassoNameIdManagement* name_id_management, gchar* request_msg ) gint lasso_name_id_management_process_response_msg ( LassoNameIdManagement* name_id_management, gchar* response_msg ) gint lasso_name_id_management_validate_request ( LassoNameIdManagement* name_id_management ) gint lasso_name_identifier_mapping_build_request_msg ( LassoNameIdentifierMapping* mapping ) gint lasso_name_identifier_mapping_build_response_msg ( LassoNameIdentifierMapping* mapping ) None lasso_name_identifier_mapping_destroy ( LassoNameIdentifierMapping* mapping ) GType lasso_name_identifier_mapping_get_type ( ) gint lasso_name_identifier_mapping_init_request ( LassoNameIdentifierMapping* mapping, gchar* targetNamespace, gchar* remote_providerID ) LassoNameIdentifierMapping* lasso_name_identifier_mapping_new ( LassoServer* server ) gint lasso_name_identifier_mapping_process_request_msg ( LassoNameIdentifierMapping* mapping, gchar* request_msg ) gint lasso_name_identifier_mapping_process_response_msg ( LassoNameIdentifierMapping* mapping, gchar* response_msg ) gint lasso_name_identifier_mapping_validate_request ( LassoNameIdentifierMapping* mapping ) gint lasso_name_registration_build_request_msg ( LassoNameRegistration* name_registration ) gint lasso_name_registration_build_response_msg ( LassoNameRegistration* name_registration ) None lasso_name_registration_destroy ( LassoNameRegistration* name_registration ) gchar* lasso_name_registration_dump ( LassoNameRegistration* name_registration ) GType lasso_name_registration_get_type ( ) gint lasso_name_registration_init_request ( LassoNameRegistration* name_registration, char* remote_providerID, LassoHttpMethod http_method ) LassoNameRegistration* lasso_name_registration_new ( LassoServer* server ) LassoNameRegistration* lasso_name_registration_new_from_dump ( LassoServer* server, const char* dump ) gint lasso_name_registration_process_request_msg ( LassoNameRegistration* name_registration, gchar* request_msg ) gint lasso_name_registration_process_response_msg ( LassoNameRegistration* name_registration, gchar* response_msg ) gint lasso_name_registration_validate_request ( LassoNameRegistration* name_registration ) None lasso_node_cleanup_original_xmlnodes ( LassoNode* node ) None lasso_node_destroy ( LassoNode* node ) char* lasso_node_dump ( LassoNode* node ) char* lasso_node_export_to_base64 ( LassoNode* node ) char* lasso_node_export_to_ecp_soap_response ( LassoNode* node, const char* assertionConsumerURL ) char* lasso_node_export_to_paos_request ( LassoNode* node, const char* issuer, const char* responseConsumerURL, const char* relay_state ) char* lasso_node_export_to_query ( LassoNode* node, LassoSignatureMethod sign_method, const char* private_key_file ) char* lasso_node_export_to_soap ( LassoNode* node ) gchar* lasso_node_export_to_xml ( LassoNode* node ) const char* lasso_node_get_name ( LassoNode* node ) xmlNode* lasso_node_get_original_xmlnode ( LassoNode* node ) GType lasso_node_get_type ( ) xmlNode* lasso_node_get_xmlNode ( LassoNode* node, gboolean lasso_dump ) LassoMessageFormat lasso_node_init_from_message ( LassoNode* node, const char* message ) gboolean lasso_node_init_from_query ( LassoNode* node, const char* query ) int lasso_node_init_from_xml ( LassoNode* node, xmlNode* xmlnode ) LassoNode* lasso_node_new ( ) LassoNode* lasso_node_new_from_dump ( const char* dump ) LassoNode* lasso_node_new_from_soap ( const char* soap ) LassoNode* lasso_node_new_from_xmlNode ( xmlNode* node ) None lasso_node_set_custom_namespace ( LassoNode* node, char* prefix, char* href ) None lasso_node_set_custom_nodename ( LassoNode* node, char* nodename ) None lasso_node_set_original_xmlnode ( LassoNode* node, xmlNode* xmlnode ) char* lasso_profile_get_artifact ( LassoProfile* profile ) char* lasso_profile_get_artifact_message ( LassoProfile* profile ) LassoIdentity* lasso_profile_get_identity ( LassoProfile* profile ) LassoNode* lasso_profile_get_nameIdentifier ( LassoProfile* profile ) LassoRequestType lasso_profile_get_request_type_from_soap_msg ( const gchar* soap ) LassoSession* lasso_profile_get_session ( LassoProfile* profile ) LassoProfileSignatureHint lasso_profile_get_signature_hint ( LassoProfile* profile ) GType lasso_profile_get_type ( ) gboolean lasso_profile_is_identity_dirty ( LassoProfile* profile ) gboolean lasso_profile_is_liberty_query ( const gchar* query ) gboolean lasso_profile_is_saml_query ( const gchar* query ) gboolean lasso_profile_is_session_dirty ( LassoProfile* profile ) None lasso_profile_set_artifact_message ( LassoProfile* profile, char* message ) gint lasso_profile_set_identity_from_dump ( LassoProfile* profile, const gchar* dump ) gint lasso_profile_set_session_from_dump ( LassoProfile* profile, const gchar* dump ) None lasso_profile_set_signature_hint ( LassoProfile* profile, LassoProfileSignatureHint signature_hint ) gboolean lasso_provider_accept_http_method ( LassoProvider* provider, const LassoProvider* remote_provider, LassoMdProtocolType protocol_type, LassoHttpMethod http_method, gboolean initiate_profile ) gchar* lasso_provider_get_assertion_consumer_service_url ( const LassoProvider* provider, const char* service_id ) gchar* lasso_provider_get_base64_succinct_id ( const LassoProvider* provider ) gchar* lasso_provider_get_default_name_id_format ( const LassoProvider* provider ) LassoEncryptionMode lasso_provider_get_encryption_mode ( LassoProvider* provider ) LassoHttpMethod lasso_provider_get_first_http_method ( LassoProvider* provider, const LassoProvider* remote_provider, LassoMdProtocolType protocol_type ) const GList* lasso_provider_get_metadata_list ( const LassoProvider* provider, const char* name ) gchar* lasso_provider_get_metadata_one ( const LassoProvider* provider, const char* name ) xmlNode* lasso_provider_get_organization ( const LassoProvider* provider ) LassoProtocolConformance lasso_provider_get_protocol_conformance ( const LassoProvider* provider ) char* lasso_provider_get_sp_name_qualifier ( LassoProvider* provider ) GType lasso_provider_get_type ( ) gboolean lasso_provider_has_protocol_profile ( const LassoProvider* provider, LassoMdProtocolType protocol_type, const char* protocol_profile ) LassoProvider* lasso_provider_new ( LassoProviderRole role, const char* metadata, const char* public_key, const char* ca_cert_chain ) LassoProvider* lasso_provider_new_from_buffer ( LassoProviderRole role, const char* metadata, const char* public_key, const char* ca_cert_chain ) LassoProvider* lasso_provider_new_from_dump ( const gchar* dump ) LassoSaml2EncryptedElement* lasso_provider_saml2_node_encrypt ( const LassoProvider* provider, LassoNode* lasso_node ) None lasso_provider_set_encryption_mode ( LassoProvider* provider, LassoEncryptionMode encryption_mode ) None lasso_provider_set_encryption_sym_key_type ( LassoProvider* provider, LassoEncryptionSymKeyType encryption_sym_key_type ) int lasso_provider_verify_single_node_signature ( LassoProvider* provider, LassoNode* node, const char* id_attr_name ) None lasso_register_dst_service ( const char* prefix, const char* href ) None lasso_register_idwsf2_dst_service ( const gchar* prefix, const gchar* href ) GType lasso_saml2_action_get_type ( ) LassoNode* lasso_saml2_action_new ( ) LassoSaml2Action* lasso_saml2_action_new_with_string ( char* content ) GType lasso_saml2_advice_get_type ( ) LassoNode* lasso_saml2_advice_new ( ) int lasso_saml2_assertion_add_attribute_with_node ( LassoSaml2Assertion* assertion, const char* name, const char* nameformat, LassoNode* content ) None lasso_saml2_assertion_add_audience_restriction ( LassoSaml2Assertion* saml2_assertion, const char* providerID ) None lasso_saml2_assertion_add_proxy_limit ( LassoSaml2Assertion* saml2_assertion, int proxy_count, GList* proxy_audiences ) LassoProvider* lasso_saml2_assertion_get_issuer_provider ( const LassoSaml2Assertion* saml2_assertion, const LassoServer* server ) LassoSaml2SubjectConfirmationData* lasso_saml2_assertion_get_subject_confirmation_data ( LassoSaml2Assertion* saml2_assertion, gboolean create ) GType lasso_saml2_assertion_get_type ( ) gboolean lasso_saml2_assertion_has_audience_restriction ( LassoSaml2Assertion* saml2_assertion ) gboolean lasso_saml2_assertion_is_audience_restricted ( LassoSaml2Assertion* saml2_assertion, char* providerID ) LassoNode* lasso_saml2_assertion_new ( ) None lasso_saml2_assertion_set_basic_conditions ( LassoSaml2Assertion* saml2_assertion, time_t tolerance, time_t length, gboolean one_time_use ) None lasso_saml2_assertion_set_subject_confirmation_data ( LassoSaml2Assertion* saml2_assertion, time_t tolerance, time_t length, const char* Recipient, const char* InResponseTo, const char* Address ) None lasso_saml2_assertion_set_subject_confirmation_name_id ( LassoSaml2Assertion* saml2_assertion, LassoNode* node ) None lasso_saml2_assertion_set_subject_name_id ( LassoSaml2Assertion* saml2_assertion, LassoNode* node ) LassoSaml2AssertionValidationState lasso_saml2_assertion_validate_conditions ( LassoSaml2Assertion* saml2_assertion, const char* relaying_party_providerID ) GType lasso_saml2_attribute_get_type ( ) LassoNode* lasso_saml2_attribute_new ( ) GType lasso_saml2_attribute_statement_get_type ( ) LassoNode* lasso_saml2_attribute_statement_new ( ) GType lasso_saml2_attribute_value_get_type ( ) LassoSaml2AttributeValue* lasso_saml2_attribute_value_new ( ) GType lasso_saml2_audience_restriction_get_type ( ) LassoNode* lasso_saml2_audience_restriction_new ( ) GType lasso_saml2_authn_context_get_type ( ) LassoNode* lasso_saml2_authn_context_new ( ) GType lasso_saml2_authn_statement_get_type ( ) LassoNode* lasso_saml2_authn_statement_new ( ) GType lasso_saml2_authz_decision_statement_get_type ( ) LassoNode* lasso_saml2_authz_decision_statement_new ( ) GType lasso_saml2_base_idabstract_get_type ( ) LassoNode* lasso_saml2_base_idabstract_new ( ) GType lasso_saml2_condition_abstract_get_type ( ) LassoNode* lasso_saml2_condition_abstract_new ( ) GType lasso_saml2_conditions_get_type ( ) LassoNode* lasso_saml2_conditions_new ( ) LassoSaml2EncryptedElement* lasso_saml2_encrypted_element_build_encrypted_persistent_name_id ( const char* id, const char* idpID, const LassoProvider* provider ) GType lasso_saml2_encrypted_element_get_type ( ) LassoNode* lasso_saml2_encrypted_element_new ( ) GType lasso_saml2_evidence_get_type ( ) LassoNode* lasso_saml2_evidence_new ( ) GType lasso_saml2_key_info_confirmation_data_get_type ( ) LassoNode* lasso_saml2_key_info_confirmation_data_new ( ) LassoSaml2NameID* lasso_saml2_name_id_build_persistent ( const char* id, const char* idpID, const char* providerID ) gboolean lasso_saml2_name_id_equals ( LassoSaml2NameID* name_id, LassoSaml2NameID* other_name_id ) GType lasso_saml2_name_id_get_type ( ) LassoNode* lasso_saml2_name_id_new ( ) LassoSaml2NameID* lasso_saml2_name_id_new_with_string ( char* content ) GType lasso_saml2_one_time_use_get_type ( ) LassoNode* lasso_saml2_one_time_use_new ( ) GType lasso_saml2_proxy_restriction_get_type ( ) LassoNode* lasso_saml2_proxy_restriction_new ( ) GType lasso_saml2_statement_abstract_get_type ( ) LassoNode* lasso_saml2_statement_abstract_new ( ) GType lasso_saml2_subject_confirmation_data_get_type ( ) LassoNode* lasso_saml2_subject_confirmation_data_new ( ) GType lasso_saml2_subject_confirmation_get_type ( ) LassoNode* lasso_saml2_subject_confirmation_new ( ) GType lasso_saml2_subject_get_type ( ) GType lasso_saml2_subject_locality_get_type ( ) LassoNode* lasso_saml2_subject_locality_new ( ) LassoNode* lasso_saml2_subject_new ( ) GType lasso_saml_advice_get_type ( ) LassoNode* lasso_saml_advice_new ( ) GType lasso_saml_assertion_get_type ( ) LassoSamlAssertion* lasso_saml_assertion_new ( ) GType lasso_saml_attribute_designator_get_type ( ) LassoNode* lasso_saml_attribute_designator_new ( ) GType lasso_saml_attribute_get_type ( ) LassoSamlAttribute* lasso_saml_attribute_new ( ) GType lasso_saml_attribute_statement_get_type ( ) LassoSamlAttributeStatement* lasso_saml_attribute_statement_new ( ) GType lasso_saml_attribute_value_get_type ( ) LassoSamlAttributeValue* lasso_saml_attribute_value_new ( ) GType lasso_saml_audience_restriction_condition_get_type ( ) LassoSamlAudienceRestrictionCondition* lasso_saml_audience_restriction_condition_new ( ) LassoSamlAudienceRestrictionCondition* lasso_saml_audience_restriction_condition_new_full ( const char* audience ) GType lasso_saml_authentication_statement_get_type ( ) LassoNode* lasso_saml_authentication_statement_new ( ) GType lasso_saml_authority_binding_get_type ( ) LassoNode* lasso_saml_authority_binding_new ( ) GType lasso_saml_condition_abstract_get_type ( ) GType lasso_saml_conditions_get_type ( ) LassoSamlConditions* lasso_saml_conditions_new ( ) GType lasso_saml_name_identifier_get_type ( ) LassoSamlNameIdentifier* lasso_saml_name_identifier_new ( ) LassoSamlNameIdentifier* lasso_saml_name_identifier_new_from_xmlNode ( xmlNode* xmlnode ) GType lasso_saml_statement_abstract_get_type ( ) GType lasso_saml_subject_confirmation_get_type ( ) LassoSamlSubjectConfirmation* lasso_saml_subject_confirmation_new ( ) GType lasso_saml_subject_get_type ( ) GType lasso_saml_subject_locality_get_type ( ) LassoNode* lasso_saml_subject_locality_new ( ) LassoNode* lasso_saml_subject_new ( ) GType lasso_saml_subject_statement_abstract_get_type ( ) GType lasso_saml_subject_statement_get_type ( ) LassoNode* lasso_saml_subject_statement_new ( ) GType lasso_samlp2_artifact_resolve_get_type ( ) LassoNode* lasso_samlp2_artifact_resolve_new ( ) GType lasso_samlp2_artifact_response_get_type ( ) LassoNode* lasso_samlp2_artifact_response_new ( ) GType lasso_samlp2_assertion_id_request_get_type ( ) LassoNode* lasso_samlp2_assertion_id_request_new ( ) GType lasso_samlp2_attribute_query_get_type ( ) LassoNode* lasso_samlp2_attribute_query_new ( ) GType lasso_samlp2_authn_query_get_type ( ) LassoNode* lasso_samlp2_authn_query_new ( ) GType lasso_samlp2_authn_request_get_type ( ) LassoNode* lasso_samlp2_authn_request_new ( ) GType lasso_samlp2_authz_decision_query_get_type ( ) LassoNode* lasso_samlp2_authz_decision_query_new ( ) GType lasso_samlp2_extensions_get_type ( ) LassoNode* lasso_samlp2_extensions_new ( ) GType lasso_samlp2_idp_entry_get_type ( ) LassoNode* lasso_samlp2_idp_entry_new ( ) GType lasso_samlp2_idp_list_get_type ( ) LassoNode* lasso_samlp2_idp_list_new ( ) GType lasso_samlp2_logout_request_get_type ( ) LassoNode* lasso_samlp2_logout_request_new ( ) GType lasso_samlp2_logout_response_get_type ( ) LassoNode* lasso_samlp2_logout_response_new ( ) GType lasso_samlp2_manage_name_id_request_get_type ( ) LassoNode* lasso_samlp2_manage_name_id_request_new ( ) GType lasso_samlp2_manage_name_id_response_get_type ( ) LassoNode* lasso_samlp2_manage_name_id_response_new ( ) GType lasso_samlp2_name_id_mapping_request_get_type ( ) LassoNode* lasso_samlp2_name_id_mapping_request_new ( ) GType lasso_samlp2_name_id_mapping_response_get_type ( ) LassoNode* lasso_samlp2_name_id_mapping_response_new ( ) GType lasso_samlp2_name_id_policy_get_type ( ) LassoNode* lasso_samlp2_name_id_policy_new ( ) GType lasso_samlp2_request_abstract_get_type ( ) LassoNode* lasso_samlp2_request_abstract_new ( ) GType lasso_samlp2_requested_authn_context_get_type ( ) LassoNode* lasso_samlp2_requested_authn_context_new ( ) GType lasso_samlp2_response_get_type ( ) LassoNode* lasso_samlp2_response_new ( ) GType lasso_samlp2_scoping_get_type ( ) LassoNode* lasso_samlp2_scoping_new ( ) GType lasso_samlp2_status_code_get_type ( ) LassoNode* lasso_samlp2_status_code_new ( ) GType lasso_samlp2_status_detail_get_type ( ) LassoNode* lasso_samlp2_status_detail_new ( ) GType lasso_samlp2_status_get_type ( ) LassoNode* lasso_samlp2_status_new ( ) GType lasso_samlp2_status_response_get_type ( ) LassoNode* lasso_samlp2_status_response_new ( ) GType lasso_samlp2_subject_query_abstract_get_type ( ) LassoNode* lasso_samlp2_subject_query_abstract_new ( ) GType lasso_samlp2_terminate_get_type ( ) LassoNode* lasso_samlp2_terminate_new ( ) GType lasso_samlp_request_abstract_get_type ( ) GType lasso_samlp_request_get_type ( ) LassoNode* lasso_samlp_request_new ( ) None lasso_samlp_response_abstract_fill ( LassoSamlpResponseAbstract* response, const char* InResponseTo, const char* Recipient ) GType lasso_samlp_response_abstract_get_type ( ) GType lasso_samlp_response_get_type ( ) LassoNode* lasso_samlp_response_new ( ) GType lasso_samlp_status_code_get_type ( ) LassoSamlpStatusCode* lasso_samlp_status_code_new ( ) GType lasso_samlp_status_get_type ( ) LassoSamlpStatus* lasso_samlp_status_new ( ) gint lasso_server_add_provider ( LassoServer* server, LassoProviderRole role, const gchar* metadata, const gchar* public_key, const gchar* ca_cert_chain ) gint lasso_server_add_provider_from_buffer ( LassoServer* server, LassoProviderRole role, const gchar* metadata, const gchar* public_key, const gchar* ca_cert_chain ) None lasso_server_destroy ( LassoServer* server ) gchar* lasso_server_dump ( LassoServer* server ) LassoProvider* lasso_server_get_provider ( const LassoServer* server, const gchar* providerID ) GType lasso_server_get_type ( ) int lasso_server_load_affiliation ( LassoServer* server, const gchar* filename ) LassoServer* lasso_server_new ( const gchar* metadata, const gchar* private_key, const gchar* private_key_password, const gchar* certificate ) LassoServer* lasso_server_new_from_buffers ( const gchar* metadata, const gchar* private_key, const gchar* private_key_password, const gchar* certificate ) LassoServer* lasso_server_new_from_dump ( const gchar* dump ) int lasso_server_saml2_assertion_setup_signature ( LassoServer* server, LassoSaml2Assertion* saml2_assertion ) int lasso_server_set_encryption_private_key ( LassoServer* server, const gchar* filename ) None lasso_session_destroy ( LassoSession* session ) gchar* lasso_session_dump ( LassoSession* session ) GList* lasso_session_get_assertions ( LassoSession* session, const char* provider_id ) gchar* lasso_session_get_provider_index ( LassoSession* session, gint index ) GType lasso_session_get_type ( ) gboolean lasso_session_is_empty ( LassoSession* session ) LassoSession* lasso_session_new ( ) LassoSession* lasso_session_new_from_dump ( const gchar* dump ) None lasso_set_flag ( char* flag ) int lasso_shutdown ( ) const char* lasso_strerror ( int error_code ) lasso-2.8.2/abi/PaxHeaders/abi-2.3.00000644000000000000000000000013113766621500013576 xustar0029 mtime=1608196928.71889494 30 atime=1678098069.993489071 30 ctime=1678814319.929947161 lasso-2.8.2/abi/abi-2.3.00000644000175000017500000020565113766621500017060 0ustar00bdauvergnebdauvergne00000000000000BACKWARD_COMP_H LASSO_ASSERTION_QUERY_ERROR_ATTRIBUTE_REQUEST_ALREADY_EXIST LASSO_ASSERTION_QUERY_ERROR_NOT_AN_ATTRIBUTE_QUERY LASSO_ASSERTION_QUERY_REQUEST_TYPE_ASSERTION_ID LASSO_ASSERTION_QUERY_REQUEST_TYPE_ATTRIBUTE LASSO_ASSERTION_QUERY_REQUEST_TYPE_AUTHN LASSO_ASSERTION_QUERY_REQUEST_TYPE_AUTHZ_DECISION LASSO_ASSERTION_QUERY_REQUEST_TYPE_LAST LASSO_ASSERTION_QUERY_REQUEST_TYPE_UNSET LASSO_CHECK_VERSIONABI_COMPATIBLE LASSO_CHECK_VERSION_EXACT LASSO_CHECK_VERSION_NUMERIC LASSO_DATA_SERVICE_ERROR_CANNOT_ADD_ITEM LASSO_DATA_SERVICE_ERROR_UNREGISTERED_DST LASSO_DEFEDERATION_ERROR_MISSING_NAME_IDENTIFIER LASSO_DISCOVERY_ERROR_FAILED_TO_BUILD_ENDPOINT_REFERENCE LASSO_DISCOVERY_ERROR_MISSING_REQUESTED_SERVICE LASSO_DISCOVERY_ERROR_SVC_METADATA_ASSOCIATION_ADD_FAILED LASSO_DISCOVERY_ERROR_SVC_METADATA_REGISTER_FAILED LASSO_DST_ERROR_EMPTY_REQUEST LASSO_DST_ERROR_MALFORMED_QUERY LASSO_DST_ERROR_MISSING_SERVICE_DATA LASSO_DST_ERROR_MODIFY_FAILED LASSO_DST_ERROR_MODIFY_PARTIALLY_FAILED LASSO_DST_ERROR_NEW_DATA_MISSING LASSO_DST_ERROR_NO_DATA LASSO_DST_ERROR_QUERY_FAILED LASSO_DST_ERROR_QUERY_NOT_FOUND LASSO_DST_ERROR_QUERY_PARTIALLY_FAILED LASSO_DS_ERROR_CA_CERT_CHAIN_LOAD_FAILED LASSO_DS_ERROR_CERTIFICATE_LOAD_FAILED LASSO_DS_ERROR_CONTEXT_CREATION_FAILED LASSO_DS_ERROR_DECRYPTION_FAILED LASSO_DS_ERROR_DECRYPTION_FAILED_MISSING_PRIVATE_KEY LASSO_DS_ERROR_DIGEST_COMPUTE_FAILED LASSO_DS_ERROR_ENCRYPTION_FAILED LASSO_DS_ERROR_INVALID_REFERENCE_FOR_SAML LASSO_DS_ERROR_INVALID_SIGALG LASSO_DS_ERROR_INVALID_SIGNATURE LASSO_DS_ERROR_KEYS_MNGR_CREATION_FAILED LASSO_DS_ERROR_KEYS_MNGR_INIT_FAILED LASSO_DS_ERROR_PRIVATE_KEY_LOAD_FAILED LASSO_DS_ERROR_PUBLIC_KEY_LOAD_FAILED LASSO_DS_ERROR_SIGNATURE_FAILED LASSO_DS_ERROR_SIGNATURE_NOT_FOUND LASSO_DS_ERROR_SIGNATURE_TEMPLATE_NOT_FOUND LASSO_DS_ERROR_SIGNATURE_TMPL_CREATION_FAILED LASSO_DS_ERROR_SIGNATURE_VERIFICATION_FAILED LASSO_DS_ERROR_TOO_MUCH_REFERENCES LASSO_DS_HREF LASSO_DS_PREFIX LASSO_DURATION_DAY LASSO_DURATION_HOUR LASSO_DURATION_MINUTE LASSO_DURATION_WEEK LASSO_ECP_HREF LASSO_ECP_PREFIX LASSO_ENCRYPTION_MODE_ASSERTION LASSO_ENCRYPTION_MODE_NAMEID LASSO_ENCRYPTION_MODE_NONE LASSO_ENCRYPTION_SYM_KEY_TYPE_3DES LASSO_ENCRYPTION_SYM_KEY_TYPE_AES_128 LASSO_ENCRYPTION_SYM_KEY_TYPE_AES_256 LASSO_ENCRYPTION_SYM_KEY_TYPE_DEFAULT LASSO_ERROR_CAST_FAILED LASSO_ERROR_OUT_OF_MEMORY LASSO_ERROR_UNDEFINED LASSO_ERROR_UNIMPLEMENTED LASSO_HTTP_METHOD_ANY LASSO_HTTP_METHOD_ARTIFACT_GET LASSO_HTTP_METHOD_ARTIFACT_POST LASSO_HTTP_METHOD_GET LASSO_HTTP_METHOD_IDP_INITIATED LASSO_HTTP_METHOD_LAST LASSO_HTTP_METHOD_NONE LASSO_HTTP_METHOD_PAOS LASSO_HTTP_METHOD_POST LASSO_HTTP_METHOD_REDIRECT LASSO_HTTP_METHOD_SOAP LASSO_IDWSF2_DISCOVERY_ERROR_DUPLICATE LASSO_IDWSF2_DISCOVERY_ERROR_FAILED LASSO_IDWSF2_DISCOVERY_ERROR_FORBIDDEN LASSO_IDWSF2_DISCOVERY_ERROR_LOGICAL_DUPLICATE LASSO_IDWSF2_DISCOVERY_ERROR_NOT_FOUND LASSO_IDWSF2_DISCOVERY_ERROR_NO_RESULTS LASSO_IDWSF2_DST_ERROR_DUPLICATE_ITEM LASSO_IDWSF2_DST_ERROR_ITEM_NOT_FOUND LASSO_IDWSF2_DST_ERROR_PARTIAL_FAILURE LASSO_IDWSF2_DST_ERROR_UNKNOWN_STATUS_CODE LASSO_LASSO_HREF LASSO_LASSO_PREFIX LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_INTERNET_PROTOCOL LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_INTERNET_PROTOCOL_PASSWORD LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_ONE_FACTOR_CONTRACT LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_ONE_FACTOR_UNREGISTERED LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_TWO_FACTOR_CONTRACT LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_TWO_FACTOR_UNREGISTERED LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PASSWORD LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PASSWORD_PROTECTED_TRANSPORT LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PREVIOUS_SESSION LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SMARTCARD LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SMARTCARD_PKI LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SOFTWARE_PKI LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_TIME_SYNC_TOKEN LASSO_LIB_AUTHN_CONTEXT_COMPARISON_BETTER LASSO_LIB_AUTHN_CONTEXT_COMPARISON_EXACT LASSO_LIB_AUTHN_CONTEXT_COMPARISON_MAXIMUM LASSO_LIB_AUTHN_CONTEXT_COMPARISON_MINIMUM LASSO_LIB_CONSENT_INAPPLICABLE LASSO_LIB_CONSENT_OBTAINED LASSO_LIB_CONSENT_OBTAINED_CURRENT_EXPLICIT LASSO_LIB_CONSENT_OBTAINED_CURRENT_IMPLICIT LASSO_LIB_CONSENT_OBTAINED_PRIOR LASSO_LIB_CONSENT_UNAVAILABLE LASSO_LIB_HREF LASSO_LIB_MAJOR_VERSION_N LASSO_LIB_MINOR_VERSION_N LASSO_LIB_NAMEID_POLICY_TYPE_ANY LASSO_LIB_NAMEID_POLICY_TYPE_FEDERATED LASSO_LIB_NAMEID_POLICY_TYPE_NONE LASSO_LIB_NAMEID_POLICY_TYPE_ONE_TIME LASSO_LIB_NAME_IDENTIFIER_FORMAT_ENCRYPTED LASSO_LIB_NAME_IDENTIFIER_FORMAT_ENTITYID LASSO_LIB_NAME_IDENTIFIER_FORMAT_FEDERATED LASSO_LIB_NAME_IDENTIFIER_FORMAT_ONE_TIME LASSO_LIB_PREFIX LASSO_LIB_PROTOCOL_PROFILE_BRWS_ART LASSO_LIB_PROTOCOL_PROFILE_BRWS_LECP LASSO_LIB_PROTOCOL_PROFILE_BRWS_POST LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_IDP_HTTP LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_IDP_SOAP LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_SP_SOAP LASSO_LIB_PROTOCOL_PROFILE_NIM_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_RNI_IDP_HTTP LASSO_LIB_PROTOCOL_PROFILE_RNI_IDP_SOAP LASSO_LIB_PROTOCOL_PROFILE_RNI_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_RNI_SP_SOAP LASSO_LIB_PROTOCOL_PROFILE_SLO_IDP_HTTP LASSO_LIB_PROTOCOL_PROFILE_SLO_IDP_SOAP LASSO_LIB_PROTOCOL_PROFILE_SLO_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_SLO_SP_SOAP LASSO_LIB_STATUS_CODE_FEDERATION_DOES_NOT_EXIST LASSO_LIB_STATUS_CODE_INVALID_ASSERTION_CONSUMER_SERVICE_INDEX LASSO_LIB_STATUS_CODE_INVALID_SIGNATURE LASSO_LIB_STATUS_CODE_NO_AUTHN_CONTEXT LASSO_LIB_STATUS_CODE_NO_AVAILABLEIDP LASSO_LIB_STATUS_CODE_NO_PASSIVE LASSO_LIB_STATUS_CODE_NO_SUPPORTEDIDP LASSO_LIB_STATUS_CODE_PROXY_COUNT_EXCEEDED LASSO_LIB_STATUS_CODE_UNKNOWN_PRINCIPAL LASSO_LIB_STATUS_CODE_UNSIGNED_AUTHN_REQUEST LASSO_LIB_STATUS_CODE_UNSUPPORTED_PROFILE LASSO_LOGIN_ERROR_ASSERTION_DOES_NOT_MATCH_REQUEST_ID LASSO_LOGIN_ERROR_ASSERTION_REPLAY LASSO_LOGIN_ERROR_CONSENT_NOT_OBTAINED LASSO_LOGIN_ERROR_FEDERATION_NOT_FOUND LASSO_LOGIN_ERROR_INVALID_ASSERTION_SIGNATURE LASSO_LOGIN_ERROR_INVALID_NAMEIDPOLICY LASSO_LOGIN_ERROR_INVALID_SIGNATURE LASSO_LOGIN_ERROR_NO_DEFAULT_ENDPOINT LASSO_LOGIN_ERROR_REQUEST_DENIED LASSO_LOGIN_ERROR_STATUS_NOT_SUCCESS LASSO_LOGIN_ERROR_UNKNOWN_PRINCIPAL LASSO_LOGIN_ERROR_UNSIGNED_AUTHN_REQUEST LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_ART LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_LECP LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_POST LASSO_LOGIN_PROTOCOL_PROFILE_REDIRECT LASSO_LOGOUT_ERROR_FEDERATION_NOT_FOUND LASSO_LOGOUT_ERROR_REQUEST_DENIED LASSO_LOGOUT_ERROR_UNKNOWN_PRINCIPAL LASSO_LOGOUT_ERROR_UNSUPPORTED_PROFILE LASSO_MD_PROTOCOL_TYPE_ARTIFACT_RESOLUTION LASSO_MD_PROTOCOL_TYPE_ASSERTION_ID_REQUEST LASSO_MD_PROTOCOL_TYPE_ATTRIBUTE LASSO_MD_PROTOCOL_TYPE_AUTHN_QUERY LASSO_MD_PROTOCOL_TYPE_AUTHZ LASSO_MD_PROTOCOL_TYPE_FEDERATION_TERMINATION LASSO_MD_PROTOCOL_TYPE_LAST LASSO_MD_PROTOCOL_TYPE_MANAGE_NAME_ID LASSO_MD_PROTOCOL_TYPE_NAME_IDENTIFIER_MAPPING LASSO_MD_PROTOCOL_TYPE_REGISTER_NAME_IDENTIFIER LASSO_MD_PROTOCOL_TYPE_SINGLE_LOGOUT LASSO_MD_PROTOCOL_TYPE_SINGLE_SIGN_ON LASSO_MESSAGE_FORMAT_BASE64 LASSO_MESSAGE_FORMAT_ERROR LASSO_MESSAGE_FORMAT_QUERY LASSO_MESSAGE_FORMAT_SOAP LASSO_MESSAGE_FORMAT_UNKNOWN LASSO_MESSAGE_FORMAT_XML LASSO_MESSAGE_FORMAT_XSCHEMA_ERROR LASSO_METADATA_HREF LASSO_METADATA_PREFIX LASSO_NAME_IDENTIFIER_MAPPING_ERROR_FORBIDDEN_CALL_ON_THIS_SIDE LASSO_NAME_IDENTIFIER_MAPPING_ERROR_MISSING_TARGET_IDENTIFIER LASSO_NAME_IDENTIFIER_MAPPING_ERROR_MISSING_TARGET_NAMESPACE LASSO_PAOS_HREF LASSO_PAOS_PREFIX LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ LASSO_PARAM_ERROR_CHECK_FAILED LASSO_PARAM_ERROR_INVALID_VALUE LASSO_PARAM_ERROR_NON_INITIALIZED_OBJECT LASSO_PROFILE_ERROR_BAD_IDENTITY_DUMP LASSO_PROFILE_ERROR_BAD_SESSION_DUMP LASSO_PROFILE_ERROR_BUILDING_MESSAGE_FAILED LASSO_PROFILE_ERROR_BUILDING_QUERY_FAILED LASSO_PROFILE_ERROR_BUILDING_REQUEST_FAILED LASSO_PROFILE_ERROR_BUILDING_RESPONSE_FAILED LASSO_PROFILE_ERROR_CANNOT_FIND_A_PROVIDER LASSO_PROFILE_ERROR_CANNOT_VERIFY_SIGNATURE LASSO_PROFILE_ERROR_FEDERATION_NOT_FOUND LASSO_PROFILE_ERROR_IDENTITY_NOT_FOUND LASSO_PROFILE_ERROR_INVALID_ARTIFACT LASSO_PROFILE_ERROR_INVALID_ASSERTION LASSO_PROFILE_ERROR_INVALID_ASSERTION_CONDITIONS LASSO_PROFILE_ERROR_INVALID_HTTP_METHOD LASSO_PROFILE_ERROR_INVALID_ISSUER LASSO_PROFILE_ERROR_INVALID_MSG LASSO_PROFILE_ERROR_INVALID_POST_MSG LASSO_PROFILE_ERROR_INVALID_PROTOCOLPROFILE LASSO_PROFILE_ERROR_INVALID_QUERY LASSO_PROFILE_ERROR_INVALID_REQUEST LASSO_PROFILE_ERROR_INVALID_RESPONSE LASSO_PROFILE_ERROR_INVALID_SOAP_MSG LASSO_PROFILE_ERROR_ISSUER_IS_NOT_AN_IDP LASSO_PROFILE_ERROR_MISSING_ARTIFACT LASSO_PROFILE_ERROR_MISSING_ASSERTION LASSO_PROFILE_ERROR_MISSING_ENCRYPTION_PRIVATE_KEY LASSO_PROFILE_ERROR_MISSING_ENDPOINT_REFERENCE LASSO_PROFILE_ERROR_MISSING_ENDPOINT_REFERENCE_ADDRESS LASSO_PROFILE_ERROR_MISSING_ISSUER LASSO_PROFILE_ERROR_MISSING_NAME_IDENTIFIER LASSO_PROFILE_ERROR_MISSING_REMOTE_PROVIDERID LASSO_PROFILE_ERROR_MISSING_REQUEST LASSO_PROFILE_ERROR_MISSING_RESOURCE_OFFERING LASSO_PROFILE_ERROR_MISSING_RESPONSE LASSO_PROFILE_ERROR_MISSING_SERVER LASSO_PROFILE_ERROR_MISSING_SERVICE_DESCRIPTION LASSO_PROFILE_ERROR_MISSING_SERVICE_INSTANCE LASSO_PROFILE_ERROR_MISSING_SERVICE_TYPE LASSO_PROFILE_ERROR_MISSING_STATUS_CODE LASSO_PROFILE_ERROR_MISSING_SUBJECT LASSO_PROFILE_ERROR_NAME_IDENTIFIER_NOT_FOUND LASSO_PROFILE_ERROR_RESPONSE_DOES_NOT_MATCH_REQUEST LASSO_PROFILE_ERROR_SESSION_NOT_FOUND LASSO_PROFILE_ERROR_STATUS_NOT_SUCCESS LASSO_PROFILE_ERROR_UNKNOWN_ISSUER LASSO_PROFILE_ERROR_UNKNOWN_PROFILE_URL LASSO_PROFILE_ERROR_UNKNOWN_PROVIDER LASSO_PROFILE_ERROR_UNSUPPORTED_BINDING LASSO_PROFILE_ERROR_UNSUPPORTED_PROFILE LASSO_PROFILE_SIGNATURE_HINT_FORBID LASSO_PROFILE_SIGNATURE_HINT_FORCE LASSO_PROFILE_SIGNATURE_HINT_MAYBE LASSO_PROFILE_SIGNATURE_VERIFY_HINT_FORCE LASSO_PROFILE_SIGNATURE_VERIFY_HINT_IGNORE LASSO_PROFILE_SIGNATURE_VERIFY_HINT_LAST LASSO_PROFILE_SIGNATURE_VERIFY_HINT_MAYBE LASSO_PROTOCOL_LIBERTY_1_0 LASSO_PROTOCOL_LIBERTY_1_1 LASSO_PROTOCOL_LIBERTY_1_2 LASSO_PROTOCOL_NONE LASSO_PROTOCOL_SAML_2_0 LASSO_PROVIDER_ERROR_MISSING_PUBLIC_KEY LASSO_PROVIDER_ROLE_ANY LASSO_PROVIDER_ROLE_ATTRIBUTE_AUTHORITY LASSO_PROVIDER_ROLE_AUTHN_AUTHORITY LASSO_PROVIDER_ROLE_AUTHZ_AUTHORITY LASSO_PROVIDER_ROLE_BOTH LASSO_PROVIDER_ROLE_IDP LASSO_PROVIDER_ROLE_LAST LASSO_PROVIDER_ROLE_NONE LASSO_PROVIDER_ROLE_SP LASSO_PYTHON_HREF LASSO_REGISTRY_ERROR_KEY_EXISTS LASSO_REQUEST_TYPE_DEFEDERATION LASSO_REQUEST_TYPE_DISCO_MODIFY LASSO_REQUEST_TYPE_DISCO_QUERY LASSO_REQUEST_TYPE_DST_MODIFY LASSO_REQUEST_TYPE_DST_QUERY LASSO_REQUEST_TYPE_IDWSF2_DISCO_QUERY LASSO_REQUEST_TYPE_IDWSF2_DISCO_SVCMD_ASSOCIATION_ADD LASSO_REQUEST_TYPE_IDWSF2_DISCO_SVCMD_REGISTER LASSO_REQUEST_TYPE_INVALID LASSO_REQUEST_TYPE_LECP LASSO_REQUEST_TYPE_LOGIN LASSO_REQUEST_TYPE_LOGOUT LASSO_REQUEST_TYPE_NAME_IDENTIFIER_MAPPING LASSO_REQUEST_TYPE_NAME_ID_MANAGEMENT LASSO_REQUEST_TYPE_NAME_REGISTRATION LASSO_REQUEST_TYPE_SASL_REQUEST LASSO_SAML2_ACTION_GHPP_GET LASSO_SAML2_ACTION_GHPP_HEAD LASSO_SAML2_ACTION_GHPP_POST LASSO_SAML2_ACTION_GHPP_PUT LASSO_SAML2_ACTION_NAMESPACE_GHPP LASSO_SAML2_ACTION_NAMESPACE_RWEDC LASSO_SAML2_ACTION_NAMESPACE_RWEDC_NEGATION LASSO_SAML2_ACTION_NAMESPACE_UNIX LASSO_SAML2_ACTION_RWEDC_CONTROL LASSO_SAML2_ACTION_RWEDC_DELETE LASSO_SAML2_ACTION_RWEDC_EXECUTE LASSO_SAML2_ACTION_RWEDC_NEGATION LASSO_SAML2_ACTION_RWEDC_READ LASSO_SAML2_ACTION_RWEDC_WRITE LASSO_SAML2_ASSERTION_HREF LASSO_SAML2_ASSERTION_INDETERMINATE LASSO_SAML2_ASSERTION_INVALID LASSO_SAML2_ASSERTION_PREFIX LASSO_SAML2_ASSERTION_VALID LASSO_SAML2_ATTRIBUTE_NAME_EPR LASSO_SAML2_ATTRIBUTE_NAME_FORMAT_BASIC LASSO_SAML2_ATTRIBUTE_NAME_FORMAT_UNSPECIFIED LASSO_SAML2_ATTRIBUTE_NAME_FORMAT_URI LASSO_SAML2_ATTRIBUTE_PROFILE_BASIC LASSO_SAML2_ATTRIBUTE_PROFILE_DCE LASSO_SAML2_ATTRIBUTE_PROFILE_UUID LASSO_SAML2_ATTRIBUTE_PROFILE_X500 LASSO_SAML2_AUTHN_CONTEXT_AUTHENTICATED_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_INTERNET_PROTOCOL LASSO_SAML2_AUTHN_CONTEXT_INTERNET_PROTOCOL_PASSWORD LASSO_SAML2_AUTHN_CONTEXT_KERBEROS LASSO_SAML2_AUTHN_CONTEXT_MOBILE_ONE_FACTOR_CONTRACT LASSO_SAML2_AUTHN_CONTEXT_MOBILE_ONE_FACTOR_UNREGISTERED LASSO_SAML2_AUTHN_CONTEXT_MOBILE_TWO_FACTOR_CONTRACT LASSO_SAML2_AUTHN_CONTEXT_MOBILE_TWO_FACTOR_UNREGISTERED LASSO_SAML2_AUTHN_CONTEXT_NOMAD_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_PASSWORD LASSO_SAML2_AUTHN_CONTEXT_PASSWORD_PROTECTED_TRANSPORT LASSO_SAML2_AUTHN_CONTEXT_PERSONALIZED_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_PGP LASSO_SAML2_AUTHN_CONTEXT_PREVIOUS_SESSION LASSO_SAML2_AUTHN_CONTEXT_SECURE_REMOTE_PASSWORD LASSO_SAML2_AUTHN_CONTEXT_SMARTCARD LASSO_SAML2_AUTHN_CONTEXT_SMARTCARD_PKI LASSO_SAML2_AUTHN_CONTEXT_SOFTWARE_PKI LASSO_SAML2_AUTHN_CONTEXT_SPKI LASSO_SAML2_AUTHN_CONTEXT_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_TIME_SYNC_TOKEN LASSO_SAML2_AUTHN_CONTEXT_TLS_CLIENT LASSO_SAML2_AUTHN_CONTEXT_UNSPECIFIED LASSO_SAML2_AUTHN_CONTEXT_X509 LASSO_SAML2_AUTHN_CONTEXT_XMLDSIG LASSO_SAML2_CONFIRMATION_METHOD_BEARER LASSO_SAML2_CONFIRMATION_METHOD_HOLDER_OF_KEY LASSO_SAML2_CONSENT_EXPLICIT LASSO_SAML2_CONSENT_IMPLICIT LASSO_SAML2_CONSENT_INAPPLICABLE LASSO_SAML2_CONSENT_OBTAINED LASSO_SAML2_CONSENT_PRIOR LASSO_SAML2_CONSENT_UNAVAILABLE LASSO_SAML2_DEFLATE_ENCODING LASSO_SAML2_FIELD_ARTIFACT LASSO_SAML2_FIELD_ENCODING LASSO_SAML2_FIELD_RELAYSTATE LASSO_SAML2_FIELD_REQUEST LASSO_SAML2_FIELD_RESPONSE LASSO_SAML2_FIELD_SIGALG LASSO_SAML2_FIELD_SIGNATURE LASSO_SAML2_METADATA_BINDING_ARTIFACT LASSO_SAML2_METADATA_BINDING_PAOS LASSO_SAML2_METADATA_BINDING_POST LASSO_SAML2_METADATA_BINDING_REDIRECT LASSO_SAML2_METADATA_BINDING_SOAP LASSO_SAML2_METADATA_BINDING_URI LASSO_SAML2_METADATA_HREF LASSO_SAML2_METADATA_PREFIX LASSO_SAML2_NAME_IDENTIFIER_FORMAT_EMAIL LASSO_SAML2_NAME_IDENTIFIER_FORMAT_ENCRYPTED LASSO_SAML2_NAME_IDENTIFIER_FORMAT_ENTITY LASSO_SAML2_NAME_IDENTIFIER_FORMAT_KERBEROS LASSO_SAML2_NAME_IDENTIFIER_FORMAT_PERSISTENT LASSO_SAML2_NAME_IDENTIFIER_FORMAT_TRANSIENT LASSO_SAML2_NAME_IDENTIFIER_FORMAT_UNSPECIFIED LASSO_SAML2_NAME_IDENTIFIER_FORMAT_WINDOWS LASSO_SAML2_NAME_IDENTIFIER_FORMAT_X509 LASSO_SAML2_PROTOCOL_HREF LASSO_SAML2_PROTOCOL_PREFIX LASSO_SAML2_STATUS_CODE_AUTHN_FAILED LASSO_SAML2_STATUS_CODE_INVALID_ATTR_NAME LASSO_SAML2_STATUS_CODE_INVALID_NAME_ID_POLICY LASSO_SAML2_STATUS_CODE_NO_AUTHN_CONTEXT LASSO_SAML2_STATUS_CODE_NO_AVAILABLE_IDP LASSO_SAML2_STATUS_CODE_NO_PASSIVE LASSO_SAML2_STATUS_CODE_NO_SUPPORTED_IDP LASSO_SAML2_STATUS_CODE_PARTIAL_LOGOUT LASSO_SAML2_STATUS_CODE_PROXY_COUNT_EXCEEDED LASSO_SAML2_STATUS_CODE_REQUESTER LASSO_SAML2_STATUS_CODE_REQUEST_DENIED LASSO_SAML2_STATUS_CODE_REQUEST_UNSUPPORTED LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_DEPRECATED LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_TOO_HIGH LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_TOO_LOW LASSO_SAML2_STATUS_CODE_RESOURCE_NOT_RECOGNIZED LASSO_SAML2_STATUS_CODE_RESPONDER LASSO_SAML2_STATUS_CODE_SUCCESS LASSO_SAML2_STATUS_CODE_TOO_MANY_RESPONSES LASSO_SAML2_STATUS_CODE_UNKNOWN_ATTR_PROFILE LASSO_SAML2_STATUS_CODE_UNKNOWN_PRINCIPAL LASSO_SAML2_STATUS_CODE_UNSUPPORTED_BINDING LASSO_SAML2_STATUS_CODE_VERSION_MISMATCH LASSO_SAML_ASSERTION_HREF LASSO_SAML_ASSERTION_PREFIX LASSO_SAML_AUTHENTICATION_METHODS_PKI LASSO_SAML_AUTHENTICATION_METHOD_HARDWARE_TOKEN LASSO_SAML_AUTHENTICATION_METHOD_KERBEROS LASSO_SAML_AUTHENTICATION_METHOD_LIBERTY LASSO_SAML_AUTHENTICATION_METHOD_PASSWORD LASSO_SAML_AUTHENTICATION_METHOD_PGP LASSO_SAML_AUTHENTICATION_METHOD_SECURE_REMOTE_PASSWORD LASSO_SAML_AUTHENTICATION_METHOD_SMARTCARD_PKI LASSO_SAML_AUTHENTICATION_METHOD_SOFTWARE_PKI LASSO_SAML_AUTHENTICATION_METHOD_UNSPECIFIED LASSO_SAML_AUTHENTICATION_METHOD_XKMS LASSO_SAML_AUTHENTICATION_METHOD_XMLD_SIG LASSO_SAML_CONFIRMATION_METHOD_ARTIFACT LASSO_SAML_CONFIRMATION_METHOD_ARTIFACT01 LASSO_SAML_CONFIRMATION_METHOD_BEARER LASSO_SAML_CONFIRMATION_METHOD_HOLDER_OF_KEY LASSO_SAML_CONFIRMATION_METHOD_SENDER_VOUCHES LASSO_SAML_MAJOR_VERSION_N LASSO_SAML_MINOR_VERSION_N LASSO_SAML_PROTOCOL_HREF LASSO_SAML_PROTOCOL_PREFIX LASSO_SAML_STATUS_CODE_REQUESTER LASSO_SAML_STATUS_CODE_REQUEST_DENIED LASSO_SAML_STATUS_CODE_REQUEST_VERSION_DEPRECATED LASSO_SAML_STATUS_CODE_REQUEST_VERSION_TOO_HIGH LASSO_SAML_STATUS_CODE_REQUEST_VERSION_TOO_LOW LASSO_SAML_STATUS_CODE_RESOURCE_NOT_RECOGNIZED LASSO_SAML_STATUS_CODE_RESPONDER LASSO_SAML_STATUS_CODE_SUCCESS LASSO_SAML_STATUS_CODE_TOO_MANY_RESPONSES LASSO_SAML_STATUS_CODE_VERSION_MISMATCH LASSO_SERVER_ERROR_ADD_PROVIDER_FAILED LASSO_SERVER_ERROR_ADD_PROVIDER_PROTOCOL_MISMATCH LASSO_SERVER_ERROR_INVALID_XML LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND LASSO_SERVER_ERROR_SET_ENCRYPTION_PRIVATE_KEY_FAILED LASSO_SIGNATURE_METHOD_DSA_SHA1 LASSO_SIGNATURE_METHOD_RSA_SHA1 LASSO_SIGNATURE_TYPE_NONE LASSO_SIGNATURE_TYPE_SIMPLE LASSO_SIGNATURE_TYPE_WITHX509 LASSO_SOAP_ENV_ACTOR LASSO_SOAP_ENV_HREF LASSO_SOAP_ENV_PREFIX LASSO_SOAP_ERROR_MISSING_BODY LASSO_SOAP_ERROR_MISSING_ENVELOPE LASSO_SOAP_ERROR_MISSING_HEADER LASSO_SOAP_ERROR_MISSING_SOAP_FAULT_DETAIL LASSO_SOAP_ERROR_REDIRECT_REQUEST_FAULT LASSO_SOAP_FAULT_CODE_CLIENT LASSO_SOAP_FAULT_CODE_MUST_UNDERSTAND LASSO_SOAP_FAULT_CODE_SERVER LASSO_SOAP_FAULT_CODE_VERSION_MISMATCH LASSO_SOAP_FAULT_REDIRECT_REQUEST LASSO_WSF_ENABLED LASSO_WSF_PROFILE_ERROR_INVALID_OR_MISSING_REFERENCE_TO_MESSAGE_ID LASSO_WSF_PROFILE_ERROR_MISSING_ASSERTION_ID LASSO_WSF_PROFILE_ERROR_MISSING_CORRELATION LASSO_WSF_PROFILE_ERROR_MISSING_CREDENTIAL_REF LASSO_WSF_PROFILE_ERROR_MISSING_DESCRIPTION LASSO_WSF_PROFILE_ERROR_MISSING_ENDPOINT LASSO_WSF_PROFILE_ERROR_MISSING_RESOURCE_ID LASSO_WSF_PROFILE_ERROR_MISSING_SECURITY LASSO_WSF_PROFILE_ERROR_MISSING_SENDER_ID LASSO_WSF_PROFILE_ERROR_REDIRECT_REQUEST LASSO_WSF_PROFILE_ERROR_REDIRECT_REQUEST_UNSUPPORTED_BY_REQUESTER LASSO_WSF_PROFILE_ERROR_SECURITY_MECHANISM_CHECK_FAILED LASSO_WSF_PROFILE_ERROR_SERVER_INTERACTION_REQUIRED LASSO_WSF_PROFILE_ERROR_SERVER_INTERACTION_REQUIRED_FOR_DATA LASSO_WSF_PROFILE_ERROR_SOAP_FAULT LASSO_WSF_PROFILE_ERROR_UNKNOWN_STATUS_CODE LASSO_WSF_PROFILE_ERROR_UNSUPPORTED_SECURITY_MECHANISM LASSO_WSSEC_ERROR_BAD_PASSWORD LASSO_WSSEC_ERROR_MISSING_SECURITY_TOKEN LASSO_XML_ERROR_ATTR_NOT_FOUND LASSO_XML_ERROR_ATTR_VALUE_NOT_FOUND LASSO_XML_ERROR_INVALID_FILE LASSO_XML_ERROR_MISSING_NAMESPACE LASSO_XML_ERROR_NODE_CONTENT_NOT_FOUND LASSO_XML_ERROR_NODE_NOT_FOUND LASSO_XML_ERROR_OBJECT_CONSTRUCTION_FAILED LASSO_XML_ERROR_SCHEMA_INVALID_FRAGMENT LASSO_XSI_HREF LASSO_XSI_PREFIX struct LassoAssertionQuery { LassoAssertionQueryPrivate* private_data } LassoAssertionQueryRequestType LassoCheckVersionMode struct LassoDefederation { } struct LassoDsKeyInfo { LassoDsKeyValue* KeyValue } struct LassoDsKeyValue { LassoDsRsaKeyValue* RSAKeyValue } struct LassoDsRsaKeyValue { char* Modulus, char* Exponent } struct LassoEcp { gchar* assertionConsumerURL, LassoEcpPrivate* private_data } LassoEncryptionMode LassoEncryptionSymKeyType struct LassoFederation { gchar* remote_providerID, LassoNode* local_nameIdentifier, LassoNode* remote_nameIdentifier, LassoFederationPrivate* private_data } LassoHttpMethod struct LassoIdentity { GHashTable* federations, gboolean is_dirty, LassoIdentityPrivate* private_data } struct LassoLecp { LassoLibAuthnRequestEnvelope* authnRequestEnvelope, LassoLibAuthnResponseEnvelope* authnResponseEnvelope, char* assertionConsumerServiceURL } struct LassoLibAssertion { char* InResponseTo } struct LassoLibAuthenticationStatement { LassoLibAuthnContext* AuthnContext, char* ReauthenticateOnOrAfter, char* SessionIndex } struct LassoLibAuthnContext { char* AuthnContextClassRef, char* AuthnContextStatementRef } struct LassoLibAuthnRequest { GList* Extension, char* ProviderID, char* AffiliationID, char* NameIDPolicy, gboolean ForceAuthn, gboolean IsPassive, char* ProtocolProfile, char* AssertionConsumerServiceID, LassoLibRequestAuthnContext* RequestAuthnContext, char* RelayState, LassoLibScoping* Scoping, char* consent } struct LassoLibAuthnRequestEnvelope { GList* Extension, LassoLibAuthnRequest* AuthnRequest, char* ProviderID, char* ProviderName, char* AssertionConsumerServiceURL, LassoLibIDPList* IDPList, gboolean IsPassive } struct LassoLibAuthnResponse { GList* Extension, char* ProviderID, char* RelayState, char* consent } struct LassoLibAuthnResponseEnvelope { GList* Extension, LassoLibAuthnResponse* AuthnResponse, char* AssertionConsumerServiceURL } struct LassoLibFederationTerminationNotification { GList* Extension, char* ProviderID, LassoSamlNameIdentifier* NameIdentifier, char* consent, char* RelayState } struct LassoLibIDPEntries { GList* IDPEntry } struct LassoLibIDPEntry { char* ProviderID, char* ProviderName, char* Loc } struct LassoLibIDPList { LassoLibIDPEntries* IDPEntries, char* GetComplete } struct LassoLibLogoutRequest { GList* Extension, char* ProviderID, LassoSamlNameIdentifier* NameIdentifier, char* SessionIndex, char* RelayState, char* consent, char* NotOnOrAfter } struct LassoLibLogoutResponse { } struct LassoLibNameIdentifierMappingRequest { GList* Extension, char* ProviderID, LassoSamlNameIdentifier* NameIdentifier, char* TargetNamespace, char* consent } struct LassoLibNameIdentifierMappingResponse { GList* Extension, char* ProviderID, LassoSamlpStatus* Status, LassoSamlNameIdentifier* NameIdentifier } struct LassoLibRegisterNameIdentifierRequest { GList* Extension, char* ProviderID, LassoSamlNameIdentifier* IDPProvidedNameIdentifier, LassoSamlNameIdentifier* SPProvidedNameIdentifier, LassoSamlNameIdentifier* OldProvidedNameIdentifier, char* RelayState } struct LassoLibRegisterNameIdentifierResponse { } struct LassoLibRequestAuthnContext { GList* AuthnContextClassRef, GList* AuthnContextStatementRef, char* AuthnContextComparison } struct LassoLibScoping { int ProxyCount, LassoLibIDPList* IDPList } struct LassoLibStatusResponse { GList* Extension, char* ProviderID, LassoSamlpStatus* Status, char* RelayState } struct LassoLibSubject { LassoSamlNameIdentifier* IDPProvidedNameIdentifier } struct LassoLogin { LassoLoginProtocolProfile protocolProfile, gchar* assertionArtifact, LassoSamlAssertion* assertion, gchar* nameIDPolicy, LassoHttpMethod http_method, LassoLoginPrivate* private_data } LassoLoginProtocolProfile struct LassoLogout { LassoNode* initial_request, LassoNode* initial_response, gchar* initial_remote_providerID, gint providerID_index, LassoHttpMethod initial_http_request_method, LassoLogoutPrivate* private_data } LassoMdProtocolType LassoMessageFormat struct LassoMiscTextNode { char* content, char* name, char* ns_href, char* ns_prefix, gboolean text_child } struct LassoNameIdManagement { } struct LassoNameIdentifierMapping { gchar* targetNameIdentifier } struct LassoNameRegistration { LassoSamlNameIdentifier* oldNameIdentifier } struct LassoNode { } struct LassoProfile { LassoServer* server, LassoNode* request, LassoNode* response, LassoNode* nameIdentifier, gchar* remote_providerID, gchar* msg_url, gchar* msg_body, gchar* msg_relayState, LassoIdentity* identity, LassoSession* session, LassoHttpMethod http_request_method, gint signature_status, LassoProfilePrivate* private_data } LassoProfileSignatureHint LassoProfileSignatureVerifyHint LassoProtocolConformance struct LassoProvider { gchar* ProviderID, LassoProviderRole role, char* metadata_filename, gchar* public_key, gchar* ca_cert_chain, LassoProviderPrivate* private_data } LassoProviderRole LassoRequestType struct LassoSaml2Action { char* content, char* Namespace } struct LassoSaml2Advice { GList* AssertionIDRef, GList* AssertionURIRef, GList* Assertion, GList* EncryptedAssertion } struct LassoSaml2Assertion { LassoSaml2NameID* Issuer, LassoSaml2Subject* Subject, LassoSaml2Conditions* Conditions, LassoSaml2Advice* Advice, GList* Statement, GList* AuthnStatement, GList* AuthzDecisionStatement, GList* AttributeStatement, char* Version, char* ID, char* IssueInstant, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file, gboolean encryption_activated, char* encryption_public_key_str, LassoEncryptionSymKeyType encryption_sym_key_type } LassoSaml2AssertionValidationState struct LassoSaml2Attribute { GList* AttributeValue, char* Name, char* NameFormat, char* FriendlyName } struct LassoSaml2AttributeStatement { GList* Attribute, GList* EncryptedAttribute } struct LassoSaml2AttributeValue { GList* any } struct LassoSaml2AudienceRestriction { char* Audience } struct LassoSaml2AuthnContext { char* AuthnContextClassRef, char* AuthnContextDeclRef, char* AuthenticatingAuthority } struct LassoSaml2AuthnStatement { LassoSaml2SubjectLocality* SubjectLocality, LassoSaml2AuthnContext* AuthnContext, char* AuthnInstant, char* SessionIndex, char* SessionNotOnOrAfter } struct LassoSaml2AuthzDecisionStatement { LassoSaml2Action* Action, LassoSaml2Evidence* Evidence, char* Resource, char* Decision } struct LassoSaml2BaseIDAbstract { char* NameQualifier, char* SPNameQualifier } struct LassoSaml2ConditionAbstract { } struct LassoSaml2Conditions { GList* Condition, GList* AudienceRestriction, GList* OneTimeUse, GList* ProxyRestriction, char* NotBefore, char* NotOnOrAfter } struct LassoSaml2EncryptedElement { xmlNode* EncryptedData, GList* EncryptedKey, LassoNode* original_data } struct LassoSaml2Evidence { GList* AssertionIDRef, GList* AssertionURIRef, GList* Assertion, GList* EncryptedAssertion } struct LassoSaml2KeyInfoConfirmationData { } struct LassoSaml2NameID { char* content, char* Format, char* SPProvidedID, char* NameQualifier, char* SPNameQualifier } struct LassoSaml2OneTimeUse { } struct LassoSaml2ProxyRestriction { char* Audience, char* Count } struct LassoSaml2StatementAbstract { } struct LassoSaml2Subject { LassoSaml2BaseIDAbstract* BaseID, LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, LassoSaml2SubjectConfirmation* SubjectConfirmation } struct LassoSaml2SubjectConfirmation { LassoSaml2BaseIDAbstract* BaseID, LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, LassoSaml2SubjectConfirmationData* SubjectConfirmationData, char* Method } struct LassoSaml2SubjectConfirmationData { char* NotBefore, char* NotOnOrAfter, char* Recipient, char* InResponseTo, char* Address } struct LassoSaml2SubjectLocality { char* Address, char* DNSName } struct LassoSamlAdvice { GList* AssertionIDReference, LassoNode* Assertion } struct LassoSamlAssertion { LassoSamlConditions* Conditions, LassoSamlAdvice* Advice, LassoSamlSubjectStatement* SubjectStatement, LassoSamlAuthenticationStatement* AuthenticationStatement, LassoSamlAttributeStatement* AttributeStatement, int MajorVersion, int MinorVersion, char* AssertionID, char* Issuer, char* IssueInstant, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlAttribute { gchar* attributeName, gchar* attributeNameSpace, GList* AttributeValue } struct LassoSamlAttributeDesignator { char* AttributeName, char* AttributeNamespace } struct LassoSamlAttributeStatement { GList* Attribute } struct LassoSamlAttributeValue { GList* any } struct LassoSamlAudienceRestrictionCondition { GList* Audience } struct LassoSamlAuthenticationStatement { LassoSamlSubjectLocality* SubjectLocality, GList* AuthorityBinding, char* AuthenticationMethod, char* AuthenticationInstant } struct LassoSamlAuthorityBinding { char* AuthorityKind, char* Location, char* Binding } struct LassoSamlConditionAbstract { } struct LassoSamlConditions { GList* Condition, GList* AudienceRestrictionCondition, char* NotBefore, char* NotOnOrAfter } struct LassoSamlNameIdentifier { char* NameQualifier, char* Format, char* content } struct LassoSamlStatementAbstract { } struct LassoSamlSubject { LassoSamlNameIdentifier* NameIdentifier, LassoSamlSubjectConfirmation* SubjectConfirmation, LassoSaml2EncryptedElement* EncryptedNameIdentifier } struct LassoSamlSubjectConfirmation { GList* ConfirmationMethod, char* SubjectConfirmationData, LassoDsKeyInfo* KeyInfo } struct LassoSamlSubjectLocality { char* IPAddress, char* DNSAddress } struct LassoSamlSubjectStatement { } struct LassoSamlSubjectStatementAbstract { LassoSamlSubject* Subject } struct LassoSamlp2ArtifactResolve { char* Artifact } struct LassoSamlp2ArtifactResponse { LassoNode* any } struct LassoSamlp2AssertionIDRequest { char* AssertionIDRef } struct LassoSamlp2AttributeQuery { GList* Attribute } struct LassoSamlp2AuthnQuery { LassoSamlp2RequestedAuthnContext* RequestedAuthnContext, char* SessionIndex } struct LassoSamlp2AuthnRequest { LassoSaml2Subject* Subject, LassoSamlp2NameIDPolicy* NameIDPolicy, LassoSaml2Conditions* Conditions, LassoSamlp2RequestedAuthnContext* RequestedAuthnContext, LassoSamlp2Scoping* Scoping, gboolean ForceAuthn, gboolean IsPassive, char* ProtocolBinding, int AssertionConsumerServiceIndex, char* AssertionConsumerServiceURL, int AttributeConsumingServiceIndex, char* ProviderName, G_GNUC_DEPRECATED char } struct LassoSamlp2AuthzDecisionQuery { LassoSaml2Action* Action, LassoSaml2Evidence* Evidence, char* Resource } struct LassoSamlp2Extensions { } struct LassoSamlp2IDPEntry { char* ProviderID, char* Name, char* Loc } struct LassoSamlp2IDPList { LassoSamlp2IDPEntry* IDPEntry, char* GetComplete } struct LassoSamlp2LogoutRequest { LassoSaml2BaseIDAbstract* BaseID, LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, char* SessionIndex, char* Reason, char* NotOnOrAfter, G_GNUC_DEPRECATED char } struct LassoSamlp2LogoutResponse { G_GNUC_DEPRECATED char } struct LassoSamlp2ManageNameIDRequest { LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, char* NewID, LassoSaml2EncryptedElement* NewEncryptedID, LassoSamlp2Terminate* Terminate } struct LassoSamlp2ManageNameIDResponse { } struct LassoSamlp2NameIDMappingRequest { LassoSaml2BaseIDAbstract* BaseID, LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, LassoSamlp2NameIDPolicy* NameIDPolicy } struct LassoSamlp2NameIDMappingResponse { LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID } struct LassoSamlp2NameIDPolicy { char* Format, char* SPNameQualifier, gboolean AllowCreate } struct LassoSamlp2RequestAbstract { LassoSaml2NameID* Issuer, LassoSamlp2Extensions* Extensions, char* ID, char* Version, char* IssueInstant, char* Destination, char* Consent, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlp2RequestedAuthnContext { GList* AuthnContextClassRef, GList* AuthnContextDeclRef, char* Comparison } struct LassoSamlp2Response { GList* Assertion, GList* EncryptedAssertion } struct LassoSamlp2Scoping { LassoSamlp2IDPList* IDPList, char* RequesterID, char* ProxyCount } struct LassoSamlp2Status { LassoSamlp2StatusCode* StatusCode, char* StatusMessage, LassoSamlp2StatusDetail* StatusDetail } struct LassoSamlp2StatusCode { LassoSamlp2StatusCode* StatusCode, char* Value } struct LassoSamlp2StatusDetail { } struct LassoSamlp2StatusResponse { LassoSaml2NameID* Issuer, LassoSamlp2Extensions* Extensions, LassoSamlp2Status* Status, char* ID, char* InResponseTo, char* Version, char* IssueInstant, char* Destination, char* Consent, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlp2SubjectQueryAbstract { LassoSaml2Subject* Subject } struct LassoSamlp2Terminate { } struct LassoSamlpRequest { char* AssertionArtifact } struct LassoSamlpRequestAbstract { GList* RespondWith, char* RequestID, int MajorVersion, int MinorVersion, char* IssueInstant, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlpResponse { LassoSamlpStatus* Status, GList* Assertion } struct LassoSamlpResponseAbstract { char* ResponseID, char* InResponseTo, int MajorVersion, int MinorVersion, char* IssueInstant, char* Recipient, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlpStatus { LassoSamlpStatusCode* StatusCode, char* StatusMessage } struct LassoSamlpStatusCode { LassoSamlpStatusCode* StatusCode, char* Value } struct LassoServer { GHashTable* providers, GHashTable* services, gchar* private_key, gchar* private_key_password, gchar* certificate, LassoSignatureMethod signature_method, LassoServerPrivate* private_data } struct LassoSession { GHashTable* assertions, gboolean is_dirty, LassoSessionPrivate* private_data } LassoSignatureMethod LassoSignatureType lasso_error_t lasso_assertion_query_add_attribute_request ( LassoAssertionQuery* assertion_query, char* format, char* name ) lasso_error_t lasso_assertion_query_build_request_msg ( LassoAssertionQuery* assertion_query ) lasso_error_t lasso_assertion_query_build_response_msg ( LassoAssertionQuery* assertion_query ) None lasso_assertion_query_destroy ( LassoAssertionQuery* assertion_query ) LassoAssertionQueryRequestType lasso_assertion_query_get_request_type ( LassoAssertionQuery* assertion_query ) GType lasso_assertion_query_get_type ( ) lasso_error_t lasso_assertion_query_init_request ( LassoAssertionQuery* assertion_query, char* remote_provider_id, LassoHttpMethod http_method, LassoAssertionQueryRequestType query_request_type ) LassoAssertionQuery* lasso_assertion_query_new ( LassoServer* server ) lasso_error_t lasso_assertion_query_process_request_msg ( LassoAssertionQuery* assertion_query, gchar* request_msg ) lasso_error_t lasso_assertion_query_process_response_msg ( LassoAssertionQuery* assertion_query, gchar* response_msg ) lasso_error_t lasso_assertion_query_validate_request ( LassoAssertionQuery* assertion_query ) char* lasso_build_unique_id ( unsigned int size ) int lasso_check_version ( int major, int minor, int subminor, LassoCheckVersionMode mode ) lasso_error_t lasso_defederation_build_notification_msg ( LassoDefederation* defederation ) None lasso_defederation_destroy ( LassoDefederation* defederation ) GType lasso_defederation_get_type ( ) lasso_error_t lasso_defederation_init_notification ( LassoDefederation* defederation, gchar* remote_providerID, LassoHttpMethod http_method ) LassoDefederation* lasso_defederation_new ( LassoServer* server ) lasso_error_t lasso_defederation_process_notification_msg ( LassoDefederation* defederation, gchar* notification_msg ) lasso_error_t lasso_defederation_validate_notification ( LassoDefederation* defederation ) GType lasso_ds_key_info_get_type ( ) LassoDsKeyInfo* lasso_ds_key_info_new ( ) GType lasso_ds_key_value_get_type ( ) LassoDsKeyValue* lasso_ds_key_value_new ( ) GType lasso_ds_rsa_key_value_get_type ( ) LassoDsRsaKeyValue* lasso_ds_rsa_key_value_new ( ) None lasso_ecp_destroy ( LassoEcp* ecp ) GType lasso_ecp_get_type ( ) LassoEcp* lasso_ecp_new ( LassoServer* server ) lasso_error_t lasso_ecp_process_authn_request_msg ( LassoEcp* ecp, const char* authn_request_msg ) lasso_error_t lasso_ecp_process_response_msg ( LassoEcp* ecp, const char* response_msg ) None lasso_federation_build_local_name_identifier ( LassoFederation* federation, const gchar* nameQualifier, const gchar* format, const gchar* content ) None lasso_federation_destroy ( LassoFederation* federation ) GType lasso_federation_get_type ( ) LassoFederation* lasso_federation_new ( const gchar* remote_providerID ) gboolean lasso_federation_verify_name_identifier ( LassoFederation* federation, LassoNode* name_identifier ) char* lasso_get_prefix_for_dst_service_href ( const char* href ) gchar* lasso_get_prefix_for_idwsf2_dst_service_href ( const gchar* href ) None lasso_identity_destroy ( LassoIdentity* identity ) gchar* lasso_identity_dump ( LassoIdentity* identity ) LassoFederation* lasso_identity_get_federation ( LassoIdentity* identity, const char* providerID ) GType lasso_identity_get_type ( ) LassoIdentity* lasso_identity_new ( ) LassoIdentity* lasso_identity_new_from_dump ( const gchar* dump ) lasso_error_t lasso_init ( ) lasso_error_t lasso_lecp_build_authn_request_envelope_msg ( LassoLecp* lecp ) lasso_error_t lasso_lecp_build_authn_request_msg ( LassoLecp* lecp ) lasso_error_t lasso_lecp_build_authn_response_envelope_msg ( LassoLecp* lecp ) lasso_error_t lasso_lecp_build_authn_response_msg ( LassoLecp* lecp ) None lasso_lecp_destroy ( LassoLecp* lecp ) GType lasso_lecp_get_type ( ) lasso_error_t lasso_lecp_init_authn_request ( LassoLecp* lecp, const char* remote_providerID ) LassoLecp* lasso_lecp_new ( LassoServer* server ) lasso_error_t lasso_lecp_process_authn_request_envelope_msg ( LassoLecp* lecp, const char* request_msg ) lasso_error_t lasso_lecp_process_authn_request_msg ( LassoLecp* lecp, const char* authn_request_msg ) lasso_error_t lasso_lecp_process_authn_response_envelope_msg ( LassoLecp* lecp, const char* response_msg ) GType lasso_lib_assertion_get_type ( ) LassoLibAssertion* lasso_lib_assertion_new ( ) LassoLibAssertion* lasso_lib_assertion_new_full ( const char* issuer, const char* requestID, const char* audience, const char* notBefore, const char* notOnOrAfter ) GType lasso_lib_authentication_statement_get_type ( ) LassoLibAuthenticationStatement* lasso_lib_authentication_statement_new ( ) LassoLibAuthenticationStatement* lasso_lib_authentication_statement_new_full ( const char* authenticationMethod, const char* authenticationInstant, const char* reauthenticateOnOrAfter, LassoSamlNameIdentifier* sp_identifier, LassoSamlNameIdentifier* idp_identifier ) GType lasso_lib_authn_context_get_type ( ) LassoNode* lasso_lib_authn_context_new ( ) GType lasso_lib_authn_request_envelope_get_type ( ) LassoLibAuthnRequestEnvelope* lasso_lib_authn_request_envelope_new ( ) LassoLibAuthnRequestEnvelope* lasso_lib_authn_request_envelope_new_full ( LassoLibAuthnRequest* authnRequest, char* providerID, char* assertionConsumerServiceURL ) GType lasso_lib_authn_request_get_type ( ) LassoLibAuthnRequest* lasso_lib_authn_request_new ( ) GType lasso_lib_authn_response_envelope_get_type ( ) LassoLibAuthnResponseEnvelope* lasso_lib_authn_response_envelope_new ( LassoLibAuthnResponse* response, char* assertionConsumerServiceURL ) GType lasso_lib_authn_response_get_type ( ) LassoNode* lasso_lib_authn_response_new ( char* providerID, LassoLibAuthnRequest* request ) GType lasso_lib_federation_termination_notification_get_type ( ) LassoNode* lasso_lib_federation_termination_notification_new ( ) LassoNode* lasso_lib_federation_termination_notification_new_full ( char* providerID, LassoSamlNameIdentifier* nameIdentifier, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_idp_entries_get_type ( ) LassoNode* lasso_lib_idp_entries_new ( ) GType lasso_lib_idp_entry_get_type ( ) LassoNode* lasso_lib_idp_entry_new ( ) GType lasso_lib_idp_list_get_type ( ) LassoNode* lasso_lib_idp_list_new ( ) GType lasso_lib_logout_request_get_type ( ) LassoNode* lasso_lib_logout_request_new ( ) LassoNode* lasso_lib_logout_request_new_full ( char* providerID, LassoSamlNameIdentifier* nameIdentifier, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_logout_response_get_type ( ) LassoNode* lasso_lib_logout_response_new ( ) LassoNode* lasso_lib_logout_response_new_full ( char* providerID, const char* statusCodeValue, LassoLibLogoutRequest* request, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_name_identifier_mapping_request_get_type ( ) LassoNode* lasso_lib_name_identifier_mapping_request_new ( ) LassoNode* lasso_lib_name_identifier_mapping_request_new_full ( char* providerID, LassoSamlNameIdentifier* nameIdentifier, const char* targetNamespace, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_name_identifier_mapping_response_get_type ( ) LassoNode* lasso_lib_name_identifier_mapping_response_new ( ) LassoNode* lasso_lib_name_identifier_mapping_response_new_full ( char* provideRID, const char* statusCodeValue, LassoLibNameIdentifierMappingRequest* request, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_register_name_identifier_request_get_type ( ) LassoNode* lasso_lib_register_name_identifier_request_new ( ) LassoNode* lasso_lib_register_name_identifier_request_new_full ( const char* providerID, LassoSamlNameIdentifier* idpNameIdentifier, LassoSamlNameIdentifier* spNameIdentifier, LassoSamlNameIdentifier* oldNameIdentifier, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_register_name_identifier_response_get_type ( ) LassoNode* lasso_lib_register_name_identifier_response_new ( ) LassoNode* lasso_lib_register_name_identifier_response_new_full ( const char* providerID, const char* statusCodeValue, LassoLibRegisterNameIdentifierRequest* request, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_request_authn_context_get_type ( ) LassoLibRequestAuthnContext* lasso_lib_request_authn_context_new ( ) GType lasso_lib_scoping_get_type ( ) LassoLibScoping* lasso_lib_scoping_new ( ) GType lasso_lib_status_response_get_type ( ) LassoNode* lasso_lib_status_response_new ( ) GType lasso_lib_subject_get_type ( ) LassoLibSubject* lasso_lib_subject_new ( ) lasso_error_t lasso_login_accept_sso ( LassoLogin* login ) lasso_error_t lasso_login_build_artifact_msg ( LassoLogin* login, LassoHttpMethod http_method ) lasso_error_t lasso_login_build_assertion ( LassoLogin* login, const char* authenticationMethod, const char* authenticationInstant, const char* reauthenticateOnOrAfter, const char* notBefore, const char* notOnOrAfter ) lasso_error_t lasso_login_build_authn_request_msg ( LassoLogin* login ) lasso_error_t lasso_login_build_authn_response_msg ( LassoLogin* login ) lasso_error_t lasso_login_build_request_msg ( LassoLogin* login ) lasso_error_t lasso_login_build_response_msg ( LassoLogin* login, gchar* remote_providerID ) None lasso_login_destroy ( LassoLogin* login ) gchar* lasso_login_dump ( LassoLogin* login ) LassoNode* lasso_login_get_assertion ( LassoLogin* login ) GType lasso_login_get_type ( ) lasso_error_t lasso_login_init_authn_request ( LassoLogin* login, const gchar* remote_providerID, LassoHttpMethod http_method ) lasso_error_t lasso_login_init_idp_initiated_authn_request ( LassoLogin* login, const gchar* remote_providerID ) lasso_error_t lasso_login_init_request ( LassoLogin* login, gchar* response_msg, LassoHttpMethod response_http_method ) gboolean lasso_login_must_ask_for_consent ( LassoLogin* login ) gboolean lasso_login_must_authenticate ( LassoLogin* login ) LassoLogin* lasso_login_new ( LassoServer* server ) LassoLogin* lasso_login_new_from_dump ( LassoServer* server, const gchar* dump ) lasso_error_t lasso_login_process_authn_request_msg ( LassoLogin* login, const char* authn_request_msg ) lasso_error_t lasso_login_process_authn_response_msg ( LassoLogin* login, gchar* authn_response_msg ) lasso_error_t lasso_login_process_paos_response_msg ( LassoLogin* login, gchar* msg ) lasso_error_t lasso_login_process_request_msg ( LassoLogin* login, gchar* request_msg ) lasso_error_t lasso_login_process_response_msg ( LassoLogin* login, gchar* response_msg ) lasso_error_t lasso_login_validate_request_msg ( LassoLogin* login, gboolean authentication_result, gboolean is_consent_obtained ) lasso_error_t lasso_logout_build_request_msg ( LassoLogout* logout ) lasso_error_t lasso_logout_build_response_msg ( LassoLogout* logout ) None lasso_logout_destroy ( LassoLogout* logout ) gchar* lasso_logout_dump ( LassoLogout* logout ) gchar* lasso_logout_get_next_providerID ( LassoLogout* logout ) GType lasso_logout_get_type ( ) lasso_error_t lasso_logout_init_request ( LassoLogout* logout, gchar* remote_providerID, LassoHttpMethod request_method ) LassoLogout* lasso_logout_new ( LassoServer* server ) LassoLogout* lasso_logout_new_from_dump ( LassoServer* server, const gchar* dump ) lasso_error_t lasso_logout_process_request_msg ( LassoLogout* logout, gchar* request_msg ) lasso_error_t lasso_logout_process_response_msg ( LassoLogout* logout, gchar* response_msg ) lasso_error_t lasso_logout_reset_providerID_index ( LassoLogout* logout ) lasso_error_t lasso_logout_validate_request ( LassoLogout* logout ) GType lasso_misc_text_node_get_type ( ) xmlNode* lasso_misc_text_node_get_xml_content ( LassoMiscTextNode* misc_text_node ) LassoNode* lasso_misc_text_node_new ( ) LassoMiscTextNode* lasso_misc_text_node_new_with_string ( const char* content ) LassoMiscTextNode* lasso_misc_text_node_new_with_xml_node ( xmlNode* xml_node ) None lasso_misc_text_node_set_xml_content ( LassoMiscTextNode* misc_text_node, xmlNode* node ) lasso_error_t lasso_name_id_management_build_request_msg ( LassoNameIdManagement* name_id_management ) lasso_error_t lasso_name_id_management_build_response_msg ( LassoNameIdManagement* name_id_management ) None lasso_name_id_management_destroy ( LassoNameIdManagement* name_id_management ) char* lasso_name_id_management_dump ( LassoNameIdManagement* name_id_management ) GType lasso_name_id_management_get_type ( ) lasso_error_t lasso_name_id_management_init_request ( LassoNameIdManagement* name_id_management, char* remote_provider_id, char* new_name_id, LassoHttpMethod http_method ) LassoNameIdManagement* lasso_name_id_management_new ( LassoServer* server ) LassoNameIdManagement* lasso_name_id_management_new_from_dump ( LassoServer* server, const char* dump ) lasso_error_t lasso_name_id_management_process_request_msg ( LassoNameIdManagement* name_id_management, gchar* request_msg ) lasso_error_t lasso_name_id_management_process_response_msg ( LassoNameIdManagement* name_id_management, gchar* response_msg ) lasso_error_t lasso_name_id_management_validate_request ( LassoNameIdManagement* name_id_management ) lasso_error_t lasso_name_identifier_mapping_build_request_msg ( LassoNameIdentifierMapping* mapping ) lasso_error_t lasso_name_identifier_mapping_build_response_msg ( LassoNameIdentifierMapping* mapping ) None lasso_name_identifier_mapping_destroy ( LassoNameIdentifierMapping* mapping ) GType lasso_name_identifier_mapping_get_type ( ) lasso_error_t lasso_name_identifier_mapping_init_request ( LassoNameIdentifierMapping* mapping, gchar* targetNamespace, gchar* remote_providerID ) LassoNameIdentifierMapping* lasso_name_identifier_mapping_new ( LassoServer* server ) lasso_error_t lasso_name_identifier_mapping_process_request_msg ( LassoNameIdentifierMapping* mapping, gchar* request_msg ) lasso_error_t lasso_name_identifier_mapping_process_response_msg ( LassoNameIdentifierMapping* mapping, gchar* response_msg ) lasso_error_t lasso_name_identifier_mapping_validate_request ( LassoNameIdentifierMapping* mapping ) lasso_error_t lasso_name_registration_build_request_msg ( LassoNameRegistration* name_registration ) lasso_error_t lasso_name_registration_build_response_msg ( LassoNameRegistration* name_registration ) None lasso_name_registration_destroy ( LassoNameRegistration* name_registration ) gchar* lasso_name_registration_dump ( LassoNameRegistration* name_registration ) GType lasso_name_registration_get_type ( ) lasso_error_t lasso_name_registration_init_request ( LassoNameRegistration* name_registration, char* remote_providerID, LassoHttpMethod http_method ) LassoNameRegistration* lasso_name_registration_new ( LassoServer* server ) LassoNameRegistration* lasso_name_registration_new_from_dump ( LassoServer* server, const char* dump ) lasso_error_t lasso_name_registration_process_request_msg ( LassoNameRegistration* name_registration, gchar* request_msg ) lasso_error_t lasso_name_registration_process_response_msg ( LassoNameRegistration* name_registration, gchar* response_msg ) lasso_error_t lasso_name_registration_validate_request ( LassoNameRegistration* name_registration ) None lasso_node_cleanup_original_xmlnodes ( LassoNode* node ) char* lasso_node_debug ( LassoNode* node, int level ) None lasso_node_destroy ( LassoNode* node ) char* lasso_node_dump ( LassoNode* node ) char* lasso_node_export_to_base64 ( LassoNode* node ) char* lasso_node_export_to_ecp_soap_response ( LassoNode* node, const char* assertionConsumerURL ) char* lasso_node_export_to_paos_request ( LassoNode* node, const char* issuer, const char* responseConsumerURL, const char* relay_state ) char* lasso_node_export_to_query ( LassoNode* node, LassoSignatureMethod sign_method, const char* private_key_file ) char* lasso_node_export_to_query_with_password ( LassoNode* node, LassoSignatureMethod sign_method, const char* private_key_file, const char* private_key_file_password ) char* lasso_node_export_to_soap ( LassoNode* node ) gchar* lasso_node_export_to_xml ( LassoNode* node ) const char* lasso_node_get_name ( LassoNode* node ) const char* lasso_node_get_namespace ( LassoNode* node ) xmlNode* lasso_node_get_original_xmlnode ( LassoNode* node ) GType lasso_node_get_type ( ) xmlNode* lasso_node_get_xmlNode ( LassoNode* node, gboolean lasso_dump ) LassoMessageFormat lasso_node_init_from_message ( LassoNode* node, const char* message ) gboolean lasso_node_init_from_query ( LassoNode* node, const char* query ) lasso_error_t lasso_node_init_from_xml ( LassoNode* node, xmlNode* xmlnode ) LassoNode* lasso_node_new ( ) LassoNode* lasso_node_new_from_dump ( const char* dump ) LassoNode* lasso_node_new_from_soap ( const char* soap ) LassoNode* lasso_node_new_from_xmlNode ( xmlNode* node ) None lasso_node_set_custom_namespace ( LassoNode* node, const char* prefix, const char* href ) None lasso_node_set_custom_nodename ( LassoNode* node, const char* nodename ) None lasso_node_set_original_xmlnode ( LassoNode* node, xmlNode* xmlnode ) char* lasso_profile_get_artifact ( LassoProfile* profile ) char* lasso_profile_get_artifact_message ( LassoProfile* profile ) LassoIdentity* lasso_profile_get_identity ( LassoProfile* profile ) LassoNode* lasso_profile_get_nameIdentifier ( LassoProfile* profile ) LassoRequestType lasso_profile_get_request_type_from_soap_msg ( const gchar* soap ) LassoSession* lasso_profile_get_session ( LassoProfile* profile ) LassoProfileSignatureHint lasso_profile_get_signature_hint ( LassoProfile* profile ) lasso_error_t lasso_profile_get_signature_status ( LassoProfile* profile ) LassoProfileSignatureVerifyHint lasso_profile_get_signature_verify_hint ( LassoProfile* profile ) GType lasso_profile_get_type ( ) gboolean lasso_profile_is_identity_dirty ( LassoProfile* profile ) gboolean lasso_profile_is_liberty_query ( const gchar* query ) gboolean lasso_profile_is_saml_query ( const gchar* query ) gboolean lasso_profile_is_session_dirty ( LassoProfile* profile ) None lasso_profile_set_artifact_message ( LassoProfile* profile, const char* message ) lasso_error_t lasso_profile_set_identity_from_dump ( LassoProfile* profile, const gchar* dump ) lasso_error_t lasso_profile_set_session_from_dump ( LassoProfile* profile, const gchar* dump ) None lasso_profile_set_signature_hint ( LassoProfile* profile, LassoProfileSignatureHint signature_hint ) None lasso_profile_set_signature_verify_hint ( LassoProfile* profile, LassoProfileSignatureVerifyHint signature_verify_hint ) lasso_error_t lasso_profile_set_soap_fault_response ( LassoProfile* profile, const char* faultcode, const char* faultstring, GList* details ) LassoProviderRole lasso_profile_sso_role_with ( LassoProfile* profile, const char* remote_provider_id ) gboolean lasso_provider_accept_http_method ( LassoProvider* provider, LassoProvider* remote_provider, LassoMdProtocolType protocol_type, LassoHttpMethod http_method, gboolean initiate_profile ) gchar* lasso_provider_get_assertion_consumer_service_url ( LassoProvider* provider, const char* service_id ) gchar* lasso_provider_get_base64_succinct_id ( const LassoProvider* provider ) char* lasso_provider_get_cache_duration ( LassoProvider* provider ) gchar* lasso_provider_get_default_name_id_format ( LassoProvider* provider ) LassoEncryptionMode lasso_provider_get_encryption_mode ( LassoProvider* provider ) LassoHttpMethod lasso_provider_get_first_http_method ( LassoProvider* provider, LassoProvider* remote_provider, LassoMdProtocolType protocol_type ) GList* lasso_provider_get_idp_supported_attributes ( LassoProvider* provider ) GList* lasso_provider_get_metadata_keys_for_role ( LassoProvider* provider, LassoProviderRole role ) GList* lasso_provider_get_metadata_list ( LassoProvider* provider, const char* name ) GList* lasso_provider_get_metadata_list_for_role ( const LassoProvider* provider, LassoProviderRole role, const char* name ) gchar* lasso_provider_get_metadata_one ( LassoProvider* provider, const char* name ) char* lasso_provider_get_metadata_one_for_role ( LassoProvider* provider, LassoProviderRole role, const char* name ) xmlNode* lasso_provider_get_organization ( const LassoProvider* provider ) LassoProtocolConformance lasso_provider_get_protocol_conformance ( const LassoProvider* provider ) LassoProviderRole lasso_provider_get_roles ( LassoProvider* provider ) const char* lasso_provider_get_sp_name_qualifier ( LassoProvider* provider ) GType lasso_provider_get_type ( ) char* lasso_provider_get_valid_until ( LassoProvider* provider ) gboolean lasso_provider_has_protocol_profile ( LassoProvider* provider, LassoMdProtocolType protocol_type, const char* protocol_profile ) gboolean lasso_provider_match_conformance ( LassoProvider* provider, LassoProvider* another_provider ) LassoProvider* lasso_provider_new ( LassoProviderRole role, const char* metadata, const char* public_key, const char* ca_cert_chain ) LassoProvider* lasso_provider_new_from_buffer ( LassoProviderRole role, const char* metadata, const char* public_key, const char* ca_cert_chain ) LassoProvider* lasso_provider_new_from_dump ( const gchar* dump ) LassoSaml2EncryptedElement* lasso_provider_saml2_node_encrypt ( const LassoProvider* provider, LassoNode* lasso_node ) None lasso_provider_set_encryption_mode ( LassoProvider* provider, LassoEncryptionMode encryption_mode ) None lasso_provider_set_encryption_sym_key_type ( LassoProvider* provider, LassoEncryptionSymKeyType encryption_sym_key_type ) lasso_error_t lasso_provider_verify_single_node_signature ( LassoProvider* provider, LassoNode* node, const char* id_attr_name ) None lasso_register_dst_service ( const char* prefix, const char* href ) None lasso_register_idwsf2_dst_service ( const gchar* prefix, const gchar* href ) GType lasso_saml2_action_get_type ( ) LassoNode* lasso_saml2_action_new ( ) LassoNode* lasso_saml2_action_new_with_string ( char* content ) GType lasso_saml2_advice_get_type ( ) LassoNode* lasso_saml2_advice_new ( ) lasso_error_t lasso_saml2_assertion_add_attribute_with_node ( LassoSaml2Assertion* assertion, const char* name, const char* nameformat, LassoNode* content ) None lasso_saml2_assertion_add_audience_restriction ( LassoSaml2Assertion* saml2_assertion, const char* providerID ) None lasso_saml2_assertion_add_proxy_limit ( LassoSaml2Assertion* saml2_assertion, int proxy_count, GList* proxy_audiences ) LassoSaml2AssertionValidationState lasso_saml2_assertion_allows_proxying ( LassoSaml2Assertion* saml2_assertion ) LassoSaml2AssertionValidationState lasso_saml2_assertion_allows_proxying_to ( LassoSaml2Assertion* saml2_assertion, const char* audience ) lasso_error_t lasso_saml2_assertion_decrypt_subject ( LassoSaml2Assertion* assertion, LassoServer* server ) const char* lasso_saml2_assertion_get_in_response_to ( LassoSaml2Assertion* assertion ) LassoProvider* lasso_saml2_assertion_get_issuer_provider ( const LassoSaml2Assertion* saml2_assertion, const LassoServer* server ) LassoSaml2SubjectConfirmationData* lasso_saml2_assertion_get_subject_confirmation_data ( LassoSaml2Assertion* saml2_assertion, gboolean create ) GType lasso_saml2_assertion_get_type ( ) gboolean lasso_saml2_assertion_has_audience_restriction ( LassoSaml2Assertion* saml2_assertion ) gboolean lasso_saml2_assertion_has_one_time_use ( LassoSaml2Assertion* saml2_assertion ) gboolean lasso_saml2_assertion_is_audience_restricted ( LassoSaml2Assertion* saml2_assertion, char* providerID ) LassoNode* lasso_saml2_assertion_new ( ) None lasso_saml2_assertion_set_basic_conditions ( LassoSaml2Assertion* saml2_assertion, time_t tolerance, time_t length, gboolean one_time_use ) None lasso_saml2_assertion_set_one_time_use ( LassoSaml2Assertion* saml2_assertion, gboolean one_time_use ) None lasso_saml2_assertion_set_subject_confirmation_data ( LassoSaml2Assertion* saml2_assertion, time_t tolerance, time_t length, const char* Recipient, const char* InResponseTo, const char* Address ) None lasso_saml2_assertion_set_subject_confirmation_name_id ( LassoSaml2Assertion* saml2_assertion, LassoNode* node ) None lasso_saml2_assertion_set_subject_name_id ( LassoSaml2Assertion* saml2_assertion, LassoNode* node ) LassoSaml2AssertionValidationState lasso_saml2_assertion_validate_audience ( LassoSaml2Assertion* saml2_assertion, const gchar* audience ) LassoSaml2AssertionValidationState lasso_saml2_assertion_validate_conditions ( LassoSaml2Assertion* saml2_assertion, const char* relaying_party_providerID ) LassoSaml2AssertionValidationState lasso_saml2_assertion_validate_time_checks ( LassoSaml2Assertion* saml2_assertion, unsigned int tolerance, time_t now ) GType lasso_saml2_attribute_get_type ( ) LassoNode* lasso_saml2_attribute_new ( ) GType lasso_saml2_attribute_statement_get_type ( ) LassoNode* lasso_saml2_attribute_statement_new ( ) GType lasso_saml2_attribute_value_get_type ( ) LassoSaml2AttributeValue* lasso_saml2_attribute_value_new ( ) GType lasso_saml2_audience_restriction_get_type ( ) LassoNode* lasso_saml2_audience_restriction_new ( ) GType lasso_saml2_authn_context_get_type ( ) LassoNode* lasso_saml2_authn_context_new ( ) GType lasso_saml2_authn_statement_get_type ( ) LassoNode* lasso_saml2_authn_statement_new ( ) GType lasso_saml2_authz_decision_statement_get_type ( ) LassoNode* lasso_saml2_authz_decision_statement_new ( ) GType lasso_saml2_base_idabstract_get_type ( ) LassoNode* lasso_saml2_base_idabstract_new ( ) GType lasso_saml2_condition_abstract_get_type ( ) LassoNode* lasso_saml2_condition_abstract_new ( ) GType lasso_saml2_conditions_get_type ( ) LassoNode* lasso_saml2_conditions_new ( ) LassoSaml2EncryptedElement* lasso_saml2_encrypted_element_build_encrypted_persistent_name_id ( const char* id, const char* idpID, const LassoProvider* provider ) GType lasso_saml2_encrypted_element_get_type ( ) LassoNode* lasso_saml2_encrypted_element_new ( ) lasso_error_t lasso_saml2_encrypted_element_server_decrypt ( LassoSaml2EncryptedElement* encrypted_element, LassoServer* server, LassoNode** decrypted_node ) GType lasso_saml2_evidence_get_type ( ) LassoNode* lasso_saml2_evidence_new ( ) GType lasso_saml2_key_info_confirmation_data_get_type ( ) LassoNode* lasso_saml2_key_info_confirmation_data_new ( ) LassoSaml2NameID* lasso_saml2_name_id_build_persistent ( const char* id, const char* idpID, const char* providerID ) gboolean lasso_saml2_name_id_equals ( LassoSaml2NameID* name_id, LassoSaml2NameID* other_name_id ) GType lasso_saml2_name_id_get_type ( ) LassoNode* lasso_saml2_name_id_new ( ) LassoSaml2NameID* lasso_saml2_name_id_new_with_persistent_format ( const char* id, const char* idpID, const char* providerID ) LassoNode* lasso_saml2_name_id_new_with_string ( char* content ) GType lasso_saml2_one_time_use_get_type ( ) LassoNode* lasso_saml2_one_time_use_new ( ) GType lasso_saml2_proxy_restriction_get_type ( ) LassoNode* lasso_saml2_proxy_restriction_new ( ) GType lasso_saml2_statement_abstract_get_type ( ) LassoNode* lasso_saml2_statement_abstract_new ( ) GType lasso_saml2_subject_confirmation_data_get_type ( ) LassoNode* lasso_saml2_subject_confirmation_data_new ( ) GType lasso_saml2_subject_confirmation_get_type ( ) LassoNode* lasso_saml2_subject_confirmation_new ( ) GType lasso_saml2_subject_get_type ( ) GType lasso_saml2_subject_locality_get_type ( ) LassoNode* lasso_saml2_subject_locality_new ( ) LassoNode* lasso_saml2_subject_new ( ) GType lasso_saml_advice_get_type ( ) LassoNode* lasso_saml_advice_new ( ) GType lasso_saml_assertion_get_type ( ) LassoSamlAssertion* lasso_saml_assertion_new ( ) GType lasso_saml_attribute_designator_get_type ( ) LassoNode* lasso_saml_attribute_designator_new ( ) GType lasso_saml_attribute_get_type ( ) LassoSamlAttribute* lasso_saml_attribute_new ( ) GType lasso_saml_attribute_statement_get_type ( ) LassoSamlAttributeStatement* lasso_saml_attribute_statement_new ( ) GType lasso_saml_attribute_value_get_type ( ) LassoSamlAttributeValue* lasso_saml_attribute_value_new ( ) GType lasso_saml_audience_restriction_condition_get_type ( ) LassoSamlAudienceRestrictionCondition* lasso_saml_audience_restriction_condition_new ( ) LassoSamlAudienceRestrictionCondition* lasso_saml_audience_restriction_condition_new_full ( const char* audience ) GType lasso_saml_authentication_statement_get_type ( ) LassoNode* lasso_saml_authentication_statement_new ( ) GType lasso_saml_authority_binding_get_type ( ) LassoNode* lasso_saml_authority_binding_new ( ) GType lasso_saml_condition_abstract_get_type ( ) GType lasso_saml_conditions_get_type ( ) LassoSamlConditions* lasso_saml_conditions_new ( ) GType lasso_saml_name_identifier_get_type ( ) LassoSamlNameIdentifier* lasso_saml_name_identifier_new ( ) LassoSamlNameIdentifier* lasso_saml_name_identifier_new_from_xmlNode ( xmlNode* xmlnode ) GType lasso_saml_statement_abstract_get_type ( ) GType lasso_saml_subject_confirmation_get_type ( ) LassoSamlSubjectConfirmation* lasso_saml_subject_confirmation_new ( ) GType lasso_saml_subject_get_type ( ) GType lasso_saml_subject_locality_get_type ( ) LassoNode* lasso_saml_subject_locality_new ( ) LassoNode* lasso_saml_subject_new ( ) GType lasso_saml_subject_statement_abstract_get_type ( ) GType lasso_saml_subject_statement_get_type ( ) LassoNode* lasso_saml_subject_statement_new ( ) GType lasso_samlp2_artifact_resolve_get_type ( ) LassoNode* lasso_samlp2_artifact_resolve_new ( ) GType lasso_samlp2_artifact_response_get_type ( ) LassoNode* lasso_samlp2_artifact_response_new ( ) GType lasso_samlp2_assertion_id_request_get_type ( ) LassoNode* lasso_samlp2_assertion_id_request_new ( ) GType lasso_samlp2_attribute_query_get_type ( ) LassoNode* lasso_samlp2_attribute_query_new ( ) GType lasso_samlp2_authn_query_get_type ( ) LassoNode* lasso_samlp2_authn_query_new ( ) GType lasso_samlp2_authn_request_get_type ( ) LassoNode* lasso_samlp2_authn_request_new ( ) GType lasso_samlp2_authz_decision_query_get_type ( ) LassoNode* lasso_samlp2_authz_decision_query_new ( ) GType lasso_samlp2_extensions_get_type ( ) LassoNode* lasso_samlp2_extensions_new ( ) GType lasso_samlp2_idp_entry_get_type ( ) LassoNode* lasso_samlp2_idp_entry_new ( ) GType lasso_samlp2_idp_list_get_type ( ) LassoNode* lasso_samlp2_idp_list_new ( ) GList* lasso_samlp2_logout_request_get_session_indexes ( LassoSamlp2LogoutRequest* logout_request ) GType lasso_samlp2_logout_request_get_type ( ) LassoNode* lasso_samlp2_logout_request_new ( ) None lasso_samlp2_logout_request_set_session_indexes ( LassoSamlp2LogoutRequest* logout_request, GList* session_index ) GType lasso_samlp2_logout_response_get_type ( ) LassoNode* lasso_samlp2_logout_response_new ( ) GType lasso_samlp2_manage_name_id_request_get_type ( ) LassoNode* lasso_samlp2_manage_name_id_request_new ( ) GType lasso_samlp2_manage_name_id_response_get_type ( ) LassoNode* lasso_samlp2_manage_name_id_response_new ( ) GType lasso_samlp2_name_id_mapping_request_get_type ( ) LassoNode* lasso_samlp2_name_id_mapping_request_new ( ) GType lasso_samlp2_name_id_mapping_response_get_type ( ) LassoNode* lasso_samlp2_name_id_mapping_response_new ( ) GType lasso_samlp2_name_id_policy_get_type ( ) LassoNode* lasso_samlp2_name_id_policy_new ( ) GType lasso_samlp2_request_abstract_get_type ( ) LassoNode* lasso_samlp2_request_abstract_new ( ) GType lasso_samlp2_requested_authn_context_get_type ( ) LassoNode* lasso_samlp2_requested_authn_context_new ( ) GType lasso_samlp2_response_get_type ( ) LassoNode* lasso_samlp2_response_new ( ) GType lasso_samlp2_scoping_get_type ( ) LassoNode* lasso_samlp2_scoping_new ( ) GType lasso_samlp2_status_code_get_type ( ) LassoNode* lasso_samlp2_status_code_new ( ) GType lasso_samlp2_status_detail_get_type ( ) LassoNode* lasso_samlp2_status_detail_new ( ) GType lasso_samlp2_status_get_type ( ) LassoNode* lasso_samlp2_status_new ( ) GType lasso_samlp2_status_response_get_type ( ) LassoNode* lasso_samlp2_status_response_new ( ) GType lasso_samlp2_subject_query_abstract_get_type ( ) LassoNode* lasso_samlp2_subject_query_abstract_new ( ) GType lasso_samlp2_terminate_get_type ( ) LassoNode* lasso_samlp2_terminate_new ( ) GType lasso_samlp_request_abstract_get_type ( ) GType lasso_samlp_request_get_type ( ) LassoNode* lasso_samlp_request_new ( ) None lasso_samlp_response_abstract_fill ( LassoSamlpResponseAbstract* response, const char* InResponseTo, const char* Recipient ) GType lasso_samlp_response_abstract_get_type ( ) GType lasso_samlp_response_get_type ( ) LassoNode* lasso_samlp_response_new ( ) GType lasso_samlp_status_code_get_type ( ) LassoSamlpStatusCode* lasso_samlp_status_code_new ( ) GType lasso_samlp_status_get_type ( ) LassoSamlpStatus* lasso_samlp_status_new ( ) lasso_error_t lasso_server_add_provider ( LassoServer* server, LassoProviderRole role, const gchar* metadata, const gchar* public_key, const gchar* ca_cert_chain ) lasso_error_t lasso_server_add_provider_from_buffer ( LassoServer* server, LassoProviderRole role, const gchar* metadata, const gchar* public_key, const gchar* ca_cert_chain ) None lasso_server_destroy ( LassoServer* server ) gchar* lasso_server_dump ( LassoServer* server ) LassoProvider* lasso_server_get_provider ( const LassoServer* server, const gchar* providerID ) GType lasso_server_get_type ( ) lasso_error_t lasso_server_load_affiliation ( LassoServer* server, const gchar* filename ) LassoServer* lasso_server_new ( const gchar* metadata, const gchar* private_key, const gchar* private_key_password, const gchar* certificate ) LassoServer* lasso_server_new_from_buffers ( const gchar* metadata, const gchar* private_key_content, const gchar* private_key_password, const gchar* certificate_content ) LassoServer* lasso_server_new_from_dump ( const gchar* dump ) lasso_error_t lasso_server_saml2_assertion_setup_signature ( LassoServer* server, LassoSaml2Assertion* saml2_assertion ) lasso_error_t lasso_server_set_encryption_private_key ( LassoServer* server, const gchar* filename_or_buffer ) lasso_error_t lasso_server_set_encryption_private_key_with_password ( LassoServer* server, const gchar* filename_or_buffer, const gchar* password ) lasso_error_t lasso_session_add_assertion ( LassoSession* session, const char* providerID, LassoNode* assertion ) None lasso_session_destroy ( LassoSession* session ) gchar* lasso_session_dump ( LassoSession* session ) LassoNode* lasso_session_get_assertion ( LassoSession* session, const gchar* providerID ) GList* lasso_session_get_assertions ( LassoSession* session, const char* provider_id ) gchar* lasso_session_get_provider_index ( LassoSession* session, gint index ) GType lasso_session_get_type ( ) gboolean lasso_session_is_empty ( LassoSession* session ) LassoSession* lasso_session_new ( ) LassoSession* lasso_session_new_from_dump ( const gchar* dump ) lasso_error_t lasso_session_remove_assertion ( LassoSession* session, const gchar* providerID ) None lasso_set_flag ( char* flag ) lasso_error_t lasso_shutdown ( ) const char* lasso_strerror ( int error_code ) lasso-2.8.2/abi/PaxHeaders/abi-2.3.10000644000000000000000000000013113766621500013577 xustar0029 mtime=1608196928.71889494 30 atime=1678098069.993489071 30 ctime=1678814319.933947183 lasso-2.8.2/abi/abi-2.3.10000644000175000017500000020626113766621500017057 0ustar00bdauvergnebdauvergne00000000000000BACKWARD_COMP_H LASSO_ASSERTION_QUERY_ERROR_ATTRIBUTE_REQUEST_ALREADY_EXIST LASSO_ASSERTION_QUERY_ERROR_NOT_AN_ATTRIBUTE_QUERY LASSO_ASSERTION_QUERY_REQUEST_TYPE_ASSERTION_ID LASSO_ASSERTION_QUERY_REQUEST_TYPE_ATTRIBUTE LASSO_ASSERTION_QUERY_REQUEST_TYPE_AUTHN LASSO_ASSERTION_QUERY_REQUEST_TYPE_AUTHZ_DECISION LASSO_ASSERTION_QUERY_REQUEST_TYPE_LAST LASSO_ASSERTION_QUERY_REQUEST_TYPE_UNSET LASSO_CERTIFICATE_ATTRIBUTE LASSO_CHECK_VERSIONABI_COMPATIBLE LASSO_CHECK_VERSION_EXACT LASSO_CHECK_VERSION_NUMERIC LASSO_DATA_SERVICE_ERROR_CANNOT_ADD_ITEM LASSO_DATA_SERVICE_ERROR_UNREGISTERED_DST LASSO_DEFEDERATION_ERROR_MISSING_NAME_IDENTIFIER LASSO_DISCOVERY_ERROR_FAILED_TO_BUILD_ENDPOINT_REFERENCE LASSO_DISCOVERY_ERROR_MISSING_REQUESTED_SERVICE LASSO_DISCOVERY_ERROR_SVC_METADATA_ASSOCIATION_ADD_FAILED LASSO_DISCOVERY_ERROR_SVC_METADATA_REGISTER_FAILED LASSO_DST_ERROR_EMPTY_REQUEST LASSO_DST_ERROR_MALFORMED_QUERY LASSO_DST_ERROR_MISSING_SERVICE_DATA LASSO_DST_ERROR_MODIFY_FAILED LASSO_DST_ERROR_MODIFY_PARTIALLY_FAILED LASSO_DST_ERROR_NEW_DATA_MISSING LASSO_DST_ERROR_NO_DATA LASSO_DST_ERROR_QUERY_FAILED LASSO_DST_ERROR_QUERY_NOT_FOUND LASSO_DST_ERROR_QUERY_PARTIALLY_FAILED LASSO_DS_ERROR_CA_CERT_CHAIN_LOAD_FAILED LASSO_DS_ERROR_CERTIFICATE_LOAD_FAILED LASSO_DS_ERROR_CONTEXT_CREATION_FAILED LASSO_DS_ERROR_DECRYPTION_FAILED LASSO_DS_ERROR_DECRYPTION_FAILED_MISSING_PRIVATE_KEY LASSO_DS_ERROR_DIGEST_COMPUTE_FAILED LASSO_DS_ERROR_ENCRYPTION_FAILED LASSO_DS_ERROR_INVALID_REFERENCE_FOR_SAML LASSO_DS_ERROR_INVALID_SIGALG LASSO_DS_ERROR_INVALID_SIGNATURE LASSO_DS_ERROR_KEYS_MNGR_CREATION_FAILED LASSO_DS_ERROR_KEYS_MNGR_INIT_FAILED LASSO_DS_ERROR_PRIVATE_KEY_LOAD_FAILED LASSO_DS_ERROR_PUBLIC_KEY_LOAD_FAILED LASSO_DS_ERROR_SIGNATURE_FAILED LASSO_DS_ERROR_SIGNATURE_NOT_FOUND LASSO_DS_ERROR_SIGNATURE_TEMPLATE_NOT_FOUND LASSO_DS_ERROR_SIGNATURE_TMPL_CREATION_FAILED LASSO_DS_ERROR_SIGNATURE_VERIFICATION_FAILED LASSO_DS_ERROR_TOO_MUCH_REFERENCES LASSO_DS_HREF LASSO_DS_PREFIX LASSO_DURATION_DAY LASSO_DURATION_HOUR LASSO_DURATION_MINUTE LASSO_DURATION_WEEK LASSO_ECP_HREF LASSO_ECP_PREFIX LASSO_ENCRYPTION_MODE_ASSERTION LASSO_ENCRYPTION_MODE_NAMEID LASSO_ENCRYPTION_MODE_NONE LASSO_ENCRYPTION_SYM_KEY_TYPE_3DES LASSO_ENCRYPTION_SYM_KEY_TYPE_AES_128 LASSO_ENCRYPTION_SYM_KEY_TYPE_AES_256 LASSO_ENCRYPTION_SYM_KEY_TYPE_DEFAULT LASSO_ERROR_CAST_FAILED LASSO_ERROR_OUT_OF_MEMORY LASSO_ERROR_UNDEFINED LASSO_ERROR_UNIMPLEMENTED LASSO_HTTP_METHOD_ANY LASSO_HTTP_METHOD_ARTIFACT_GET LASSO_HTTP_METHOD_ARTIFACT_POST LASSO_HTTP_METHOD_GET LASSO_HTTP_METHOD_IDP_INITIATED LASSO_HTTP_METHOD_LAST LASSO_HTTP_METHOD_NONE LASSO_HTTP_METHOD_PAOS LASSO_HTTP_METHOD_POST LASSO_HTTP_METHOD_REDIRECT LASSO_HTTP_METHOD_SOAP LASSO_IDWSF2_DISCOVERY_ERROR_DUPLICATE LASSO_IDWSF2_DISCOVERY_ERROR_FAILED LASSO_IDWSF2_DISCOVERY_ERROR_FORBIDDEN LASSO_IDWSF2_DISCOVERY_ERROR_LOGICAL_DUPLICATE LASSO_IDWSF2_DISCOVERY_ERROR_NOT_FOUND LASSO_IDWSF2_DISCOVERY_ERROR_NO_RESULTS LASSO_IDWSF2_DST_ERROR_DUPLICATE_ITEM LASSO_IDWSF2_DST_ERROR_ITEM_NOT_FOUND LASSO_IDWSF2_DST_ERROR_PARTIAL_FAILURE LASSO_IDWSF2_DST_ERROR_UNKNOWN_STATUS_CODE LASSO_LASSO_HREF LASSO_LASSO_PREFIX LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_INTERNET_PROTOCOL LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_INTERNET_PROTOCOL_PASSWORD LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_ONE_FACTOR_CONTRACT LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_ONE_FACTOR_UNREGISTERED LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_TWO_FACTOR_CONTRACT LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_TWO_FACTOR_UNREGISTERED LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PASSWORD LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PASSWORD_PROTECTED_TRANSPORT LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PREVIOUS_SESSION LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SMARTCARD LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SMARTCARD_PKI LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SOFTWARE_PKI LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_TIME_SYNC_TOKEN LASSO_LIB_AUTHN_CONTEXT_COMPARISON_BETTER LASSO_LIB_AUTHN_CONTEXT_COMPARISON_EXACT LASSO_LIB_AUTHN_CONTEXT_COMPARISON_MAXIMUM LASSO_LIB_AUTHN_CONTEXT_COMPARISON_MINIMUM LASSO_LIB_CONSENT_INAPPLICABLE LASSO_LIB_CONSENT_OBTAINED LASSO_LIB_CONSENT_OBTAINED_CURRENT_EXPLICIT LASSO_LIB_CONSENT_OBTAINED_CURRENT_IMPLICIT LASSO_LIB_CONSENT_OBTAINED_PRIOR LASSO_LIB_CONSENT_UNAVAILABLE LASSO_LIB_HREF LASSO_LIB_MAJOR_VERSION_N LASSO_LIB_MINOR_VERSION_N LASSO_LIB_NAMEID_POLICY_TYPE_ANY LASSO_LIB_NAMEID_POLICY_TYPE_FEDERATED LASSO_LIB_NAMEID_POLICY_TYPE_NONE LASSO_LIB_NAMEID_POLICY_TYPE_ONE_TIME LASSO_LIB_NAME_IDENTIFIER_FORMAT_ENCRYPTED LASSO_LIB_NAME_IDENTIFIER_FORMAT_ENTITYID LASSO_LIB_NAME_IDENTIFIER_FORMAT_FEDERATED LASSO_LIB_NAME_IDENTIFIER_FORMAT_ONE_TIME LASSO_LIB_PREFIX LASSO_LIB_PROTOCOL_PROFILE_BRWS_ART LASSO_LIB_PROTOCOL_PROFILE_BRWS_LECP LASSO_LIB_PROTOCOL_PROFILE_BRWS_POST LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_IDP_HTTP LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_IDP_SOAP LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_SP_SOAP LASSO_LIB_PROTOCOL_PROFILE_NIM_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_RNI_IDP_HTTP LASSO_LIB_PROTOCOL_PROFILE_RNI_IDP_SOAP LASSO_LIB_PROTOCOL_PROFILE_RNI_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_RNI_SP_SOAP LASSO_LIB_PROTOCOL_PROFILE_SLO_IDP_HTTP LASSO_LIB_PROTOCOL_PROFILE_SLO_IDP_SOAP LASSO_LIB_PROTOCOL_PROFILE_SLO_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_SLO_SP_SOAP LASSO_LIB_STATUS_CODE_FEDERATION_DOES_NOT_EXIST LASSO_LIB_STATUS_CODE_INVALID_ASSERTION_CONSUMER_SERVICE_INDEX LASSO_LIB_STATUS_CODE_INVALID_SIGNATURE LASSO_LIB_STATUS_CODE_NO_AUTHN_CONTEXT LASSO_LIB_STATUS_CODE_NO_AVAILABLEIDP LASSO_LIB_STATUS_CODE_NO_PASSIVE LASSO_LIB_STATUS_CODE_NO_SUPPORTEDIDP LASSO_LIB_STATUS_CODE_PROXY_COUNT_EXCEEDED LASSO_LIB_STATUS_CODE_UNKNOWN_PRINCIPAL LASSO_LIB_STATUS_CODE_UNSIGNED_AUTHN_REQUEST LASSO_LIB_STATUS_CODE_UNSUPPORTED_PROFILE LASSO_LOGIN_ERROR_ASSERTION_DOES_NOT_MATCH_REQUEST_ID LASSO_LOGIN_ERROR_ASSERTION_REPLAY LASSO_LOGIN_ERROR_CONSENT_NOT_OBTAINED LASSO_LOGIN_ERROR_FEDERATION_NOT_FOUND LASSO_LOGIN_ERROR_INVALID_ASSERTION_SIGNATURE LASSO_LOGIN_ERROR_INVALID_NAMEIDPOLICY LASSO_LOGIN_ERROR_INVALID_SIGNATURE LASSO_LOGIN_ERROR_NO_DEFAULT_ENDPOINT LASSO_LOGIN_ERROR_REQUEST_DENIED LASSO_LOGIN_ERROR_STATUS_NOT_SUCCESS LASSO_LOGIN_ERROR_UNKNOWN_PRINCIPAL LASSO_LOGIN_ERROR_UNSIGNED_AUTHN_REQUEST LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_ART LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_LECP LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_POST LASSO_LOGIN_PROTOCOL_PROFILE_REDIRECT LASSO_LOGOUT_ERROR_FEDERATION_NOT_FOUND LASSO_LOGOUT_ERROR_REQUEST_DENIED LASSO_LOGOUT_ERROR_UNKNOWN_PRINCIPAL LASSO_LOGOUT_ERROR_UNSUPPORTED_PROFILE LASSO_MD_PROTOCOL_TYPE_ARTIFACT_RESOLUTION LASSO_MD_PROTOCOL_TYPE_ASSERTION_ID_REQUEST LASSO_MD_PROTOCOL_TYPE_ATTRIBUTE LASSO_MD_PROTOCOL_TYPE_AUTHN_QUERY LASSO_MD_PROTOCOL_TYPE_AUTHZ LASSO_MD_PROTOCOL_TYPE_FEDERATION_TERMINATION LASSO_MD_PROTOCOL_TYPE_LAST LASSO_MD_PROTOCOL_TYPE_MANAGE_NAME_ID LASSO_MD_PROTOCOL_TYPE_NAME_IDENTIFIER_MAPPING LASSO_MD_PROTOCOL_TYPE_REGISTER_NAME_IDENTIFIER LASSO_MD_PROTOCOL_TYPE_SINGLE_LOGOUT LASSO_MD_PROTOCOL_TYPE_SINGLE_SIGN_ON LASSO_MESSAGE_FORMAT_BASE64 LASSO_MESSAGE_FORMAT_ERROR LASSO_MESSAGE_FORMAT_QUERY LASSO_MESSAGE_FORMAT_SOAP LASSO_MESSAGE_FORMAT_UNKNOWN LASSO_MESSAGE_FORMAT_XML LASSO_MESSAGE_FORMAT_XSCHEMA_ERROR LASSO_METADATA_HREF LASSO_METADATA_PREFIX LASSO_NAME_IDENTIFIER_MAPPING_ERROR_FORBIDDEN_CALL_ON_THIS_SIDE LASSO_NAME_IDENTIFIER_MAPPING_ERROR_MISSING_TARGET_IDENTIFIER LASSO_NAME_IDENTIFIER_MAPPING_ERROR_MISSING_TARGET_NAMESPACE LASSO_PAOS_HREF LASSO_PAOS_PREFIX LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ LASSO_PARAM_ERROR_CHECK_FAILED LASSO_PARAM_ERROR_INVALID_VALUE LASSO_PARAM_ERROR_NON_INITIALIZED_OBJECT LASSO_PRIVATE_KEY_ATTRIBUTE LASSO_PRIVATE_KEY_PASSWORD_ATTRIBUTE LASSO_PRIVATE_STATUS_CODE_FAILED_TO_RESTORE_ARTIFACT LASSO_PROFILE_ERROR_BAD_IDENTITY_DUMP LASSO_PROFILE_ERROR_BAD_SESSION_DUMP LASSO_PROFILE_ERROR_BUILDING_MESSAGE_FAILED LASSO_PROFILE_ERROR_BUILDING_QUERY_FAILED LASSO_PROFILE_ERROR_BUILDING_REQUEST_FAILED LASSO_PROFILE_ERROR_BUILDING_RESPONSE_FAILED LASSO_PROFILE_ERROR_CANNOT_FIND_A_PROVIDER LASSO_PROFILE_ERROR_CANNOT_VERIFY_SIGNATURE LASSO_PROFILE_ERROR_FEDERATION_NOT_FOUND LASSO_PROFILE_ERROR_IDENTITY_NOT_FOUND LASSO_PROFILE_ERROR_INVALID_ARTIFACT LASSO_PROFILE_ERROR_INVALID_ASSERTION LASSO_PROFILE_ERROR_INVALID_ASSERTION_CONDITIONS LASSO_PROFILE_ERROR_INVALID_HTTP_METHOD LASSO_PROFILE_ERROR_INVALID_ISSUER LASSO_PROFILE_ERROR_INVALID_MSG LASSO_PROFILE_ERROR_INVALID_POST_MSG LASSO_PROFILE_ERROR_INVALID_PROTOCOLPROFILE LASSO_PROFILE_ERROR_INVALID_QUERY LASSO_PROFILE_ERROR_INVALID_REQUEST LASSO_PROFILE_ERROR_INVALID_RESPONSE LASSO_PROFILE_ERROR_INVALID_SOAP_MSG LASSO_PROFILE_ERROR_ISSUER_IS_NOT_AN_IDP LASSO_PROFILE_ERROR_MISSING_ARTIFACT LASSO_PROFILE_ERROR_MISSING_ASSERTION LASSO_PROFILE_ERROR_MISSING_ENCRYPTION_PRIVATE_KEY LASSO_PROFILE_ERROR_MISSING_ENDPOINT_REFERENCE LASSO_PROFILE_ERROR_MISSING_ENDPOINT_REFERENCE_ADDRESS LASSO_PROFILE_ERROR_MISSING_ISSUER LASSO_PROFILE_ERROR_MISSING_NAME_IDENTIFIER LASSO_PROFILE_ERROR_MISSING_REMOTE_PROVIDERID LASSO_PROFILE_ERROR_MISSING_REQUEST LASSO_PROFILE_ERROR_MISSING_RESOURCE_OFFERING LASSO_PROFILE_ERROR_MISSING_RESPONSE LASSO_PROFILE_ERROR_MISSING_SERVER LASSO_PROFILE_ERROR_MISSING_SERVICE_DESCRIPTION LASSO_PROFILE_ERROR_MISSING_SERVICE_INSTANCE LASSO_PROFILE_ERROR_MISSING_SERVICE_TYPE LASSO_PROFILE_ERROR_MISSING_STATUS_CODE LASSO_PROFILE_ERROR_MISSING_SUBJECT LASSO_PROFILE_ERROR_NAME_IDENTIFIER_NOT_FOUND LASSO_PROFILE_ERROR_RESPONSE_DOES_NOT_MATCH_REQUEST LASSO_PROFILE_ERROR_SESSION_NOT_FOUND LASSO_PROFILE_ERROR_STATUS_NOT_SUCCESS LASSO_PROFILE_ERROR_UNKNOWN_ISSUER LASSO_PROFILE_ERROR_UNKNOWN_PROFILE_URL LASSO_PROFILE_ERROR_UNKNOWN_PROVIDER LASSO_PROFILE_ERROR_UNSUPPORTED_BINDING LASSO_PROFILE_ERROR_UNSUPPORTED_PROFILE LASSO_PROFILE_SIGNATURE_HINT_FORBID LASSO_PROFILE_SIGNATURE_HINT_FORCE LASSO_PROFILE_SIGNATURE_HINT_MAYBE LASSO_PROFILE_SIGNATURE_VERIFY_HINT_FORCE LASSO_PROFILE_SIGNATURE_VERIFY_HINT_IGNORE LASSO_PROFILE_SIGNATURE_VERIFY_HINT_LAST LASSO_PROFILE_SIGNATURE_VERIFY_HINT_MAYBE LASSO_PROTOCOL_LIBERTY_1_0 LASSO_PROTOCOL_LIBERTY_1_1 LASSO_PROTOCOL_LIBERTY_1_2 LASSO_PROTOCOL_NONE LASSO_PROTOCOL_SAML_2_0 LASSO_PROVIDER_ERROR_MISSING_PUBLIC_KEY LASSO_PROVIDER_ROLE_ANY LASSO_PROVIDER_ROLE_ATTRIBUTE_AUTHORITY LASSO_PROVIDER_ROLE_AUTHN_AUTHORITY LASSO_PROVIDER_ROLE_AUTHZ_AUTHORITY LASSO_PROVIDER_ROLE_BOTH LASSO_PROVIDER_ROLE_IDP LASSO_PROVIDER_ROLE_LAST LASSO_PROVIDER_ROLE_NONE LASSO_PROVIDER_ROLE_SP LASSO_PYTHON_HREF LASSO_REGISTRY_ERROR_KEY_EXISTS LASSO_REQUEST_TYPE_DEFEDERATION LASSO_REQUEST_TYPE_DISCO_MODIFY LASSO_REQUEST_TYPE_DISCO_QUERY LASSO_REQUEST_TYPE_DST_MODIFY LASSO_REQUEST_TYPE_DST_QUERY LASSO_REQUEST_TYPE_IDWSF2_DISCO_QUERY LASSO_REQUEST_TYPE_IDWSF2_DISCO_SVCMD_ASSOCIATION_ADD LASSO_REQUEST_TYPE_IDWSF2_DISCO_SVCMD_REGISTER LASSO_REQUEST_TYPE_INVALID LASSO_REQUEST_TYPE_LECP LASSO_REQUEST_TYPE_LOGIN LASSO_REQUEST_TYPE_LOGOUT LASSO_REQUEST_TYPE_NAME_IDENTIFIER_MAPPING LASSO_REQUEST_TYPE_NAME_ID_MANAGEMENT LASSO_REQUEST_TYPE_NAME_REGISTRATION LASSO_REQUEST_TYPE_SASL_REQUEST LASSO_SAML2_ACTION_GHPP_GET LASSO_SAML2_ACTION_GHPP_HEAD LASSO_SAML2_ACTION_GHPP_POST LASSO_SAML2_ACTION_GHPP_PUT LASSO_SAML2_ACTION_NAMESPACE_GHPP LASSO_SAML2_ACTION_NAMESPACE_RWEDC LASSO_SAML2_ACTION_NAMESPACE_RWEDC_NEGATION LASSO_SAML2_ACTION_NAMESPACE_UNIX LASSO_SAML2_ACTION_RWEDC_CONTROL LASSO_SAML2_ACTION_RWEDC_DELETE LASSO_SAML2_ACTION_RWEDC_EXECUTE LASSO_SAML2_ACTION_RWEDC_NEGATION LASSO_SAML2_ACTION_RWEDC_READ LASSO_SAML2_ACTION_RWEDC_WRITE LASSO_SAML2_ASSERTION_HREF LASSO_SAML2_ASSERTION_INDETERMINATE LASSO_SAML2_ASSERTION_INVALID LASSO_SAML2_ASSERTION_PREFIX LASSO_SAML2_ASSERTION_VALID LASSO_SAML2_ATTRIBUTE_NAME_EPR LASSO_SAML2_ATTRIBUTE_NAME_FORMAT_BASIC LASSO_SAML2_ATTRIBUTE_NAME_FORMAT_UNSPECIFIED LASSO_SAML2_ATTRIBUTE_NAME_FORMAT_URI LASSO_SAML2_ATTRIBUTE_PROFILE_BASIC LASSO_SAML2_ATTRIBUTE_PROFILE_DCE LASSO_SAML2_ATTRIBUTE_PROFILE_UUID LASSO_SAML2_ATTRIBUTE_PROFILE_X500 LASSO_SAML2_AUTHN_CONTEXT_AUTHENTICATED_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_INTERNET_PROTOCOL LASSO_SAML2_AUTHN_CONTEXT_INTERNET_PROTOCOL_PASSWORD LASSO_SAML2_AUTHN_CONTEXT_KERBEROS LASSO_SAML2_AUTHN_CONTEXT_MOBILE_ONE_FACTOR_CONTRACT LASSO_SAML2_AUTHN_CONTEXT_MOBILE_ONE_FACTOR_UNREGISTERED LASSO_SAML2_AUTHN_CONTEXT_MOBILE_TWO_FACTOR_CONTRACT LASSO_SAML2_AUTHN_CONTEXT_MOBILE_TWO_FACTOR_UNREGISTERED LASSO_SAML2_AUTHN_CONTEXT_NOMAD_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_PASSWORD LASSO_SAML2_AUTHN_CONTEXT_PASSWORD_PROTECTED_TRANSPORT LASSO_SAML2_AUTHN_CONTEXT_PERSONALIZED_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_PGP LASSO_SAML2_AUTHN_CONTEXT_PREVIOUS_SESSION LASSO_SAML2_AUTHN_CONTEXT_SECURE_REMOTE_PASSWORD LASSO_SAML2_AUTHN_CONTEXT_SMARTCARD LASSO_SAML2_AUTHN_CONTEXT_SMARTCARD_PKI LASSO_SAML2_AUTHN_CONTEXT_SOFTWARE_PKI LASSO_SAML2_AUTHN_CONTEXT_SPKI LASSO_SAML2_AUTHN_CONTEXT_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_TIME_SYNC_TOKEN LASSO_SAML2_AUTHN_CONTEXT_TLS_CLIENT LASSO_SAML2_AUTHN_CONTEXT_UNSPECIFIED LASSO_SAML2_AUTHN_CONTEXT_X509 LASSO_SAML2_AUTHN_CONTEXT_XMLDSIG LASSO_SAML2_CONFIRMATION_METHOD_BEARER LASSO_SAML2_CONFIRMATION_METHOD_HOLDER_OF_KEY LASSO_SAML2_CONSENT_EXPLICIT LASSO_SAML2_CONSENT_IMPLICIT LASSO_SAML2_CONSENT_INAPPLICABLE LASSO_SAML2_CONSENT_OBTAINED LASSO_SAML2_CONSENT_PRIOR LASSO_SAML2_CONSENT_UNAVAILABLE LASSO_SAML2_DEFLATE_ENCODING LASSO_SAML2_FIELD_ARTIFACT LASSO_SAML2_FIELD_ENCODING LASSO_SAML2_FIELD_RELAYSTATE LASSO_SAML2_FIELD_REQUEST LASSO_SAML2_FIELD_RESPONSE LASSO_SAML2_FIELD_SIGALG LASSO_SAML2_FIELD_SIGNATURE LASSO_SAML2_METADATA_BINDING_ARTIFACT LASSO_SAML2_METADATA_BINDING_PAOS LASSO_SAML2_METADATA_BINDING_POST LASSO_SAML2_METADATA_BINDING_REDIRECT LASSO_SAML2_METADATA_BINDING_SOAP LASSO_SAML2_METADATA_BINDING_URI LASSO_SAML2_METADATA_HREF LASSO_SAML2_METADATA_PREFIX LASSO_SAML2_NAME_IDENTIFIER_FORMAT_EMAIL LASSO_SAML2_NAME_IDENTIFIER_FORMAT_ENCRYPTED LASSO_SAML2_NAME_IDENTIFIER_FORMAT_ENTITY LASSO_SAML2_NAME_IDENTIFIER_FORMAT_KERBEROS LASSO_SAML2_NAME_IDENTIFIER_FORMAT_PERSISTENT LASSO_SAML2_NAME_IDENTIFIER_FORMAT_TRANSIENT LASSO_SAML2_NAME_IDENTIFIER_FORMAT_UNSPECIFIED LASSO_SAML2_NAME_IDENTIFIER_FORMAT_WINDOWS LASSO_SAML2_NAME_IDENTIFIER_FORMAT_X509 LASSO_SAML2_PROTOCOL_HREF LASSO_SAML2_PROTOCOL_PREFIX LASSO_SAML2_STATUS_CODE_AUTHN_FAILED LASSO_SAML2_STATUS_CODE_INVALID_ATTR_NAME LASSO_SAML2_STATUS_CODE_INVALID_NAME_ID_POLICY LASSO_SAML2_STATUS_CODE_NO_AUTHN_CONTEXT LASSO_SAML2_STATUS_CODE_NO_AVAILABLE_IDP LASSO_SAML2_STATUS_CODE_NO_PASSIVE LASSO_SAML2_STATUS_CODE_NO_SUPPORTED_IDP LASSO_SAML2_STATUS_CODE_PARTIAL_LOGOUT LASSO_SAML2_STATUS_CODE_PROXY_COUNT_EXCEEDED LASSO_SAML2_STATUS_CODE_REQUESTER LASSO_SAML2_STATUS_CODE_REQUEST_DENIED LASSO_SAML2_STATUS_CODE_REQUEST_UNSUPPORTED LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_DEPRECATED LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_TOO_HIGH LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_TOO_LOW LASSO_SAML2_STATUS_CODE_RESOURCE_NOT_RECOGNIZED LASSO_SAML2_STATUS_CODE_RESPONDER LASSO_SAML2_STATUS_CODE_SUCCESS LASSO_SAML2_STATUS_CODE_TOO_MANY_RESPONSES LASSO_SAML2_STATUS_CODE_UNKNOWN_ATTR_PROFILE LASSO_SAML2_STATUS_CODE_UNKNOWN_PRINCIPAL LASSO_SAML2_STATUS_CODE_UNSUPPORTED_BINDING LASSO_SAML2_STATUS_CODE_VERSION_MISMATCH LASSO_SAML_ASSERTION_HREF LASSO_SAML_ASSERTION_PREFIX LASSO_SAML_AUTHENTICATION_METHODS_PKI LASSO_SAML_AUTHENTICATION_METHOD_HARDWARE_TOKEN LASSO_SAML_AUTHENTICATION_METHOD_KERBEROS LASSO_SAML_AUTHENTICATION_METHOD_LIBERTY LASSO_SAML_AUTHENTICATION_METHOD_PASSWORD LASSO_SAML_AUTHENTICATION_METHOD_PGP LASSO_SAML_AUTHENTICATION_METHOD_SECURE_REMOTE_PASSWORD LASSO_SAML_AUTHENTICATION_METHOD_SMARTCARD_PKI LASSO_SAML_AUTHENTICATION_METHOD_SOFTWARE_PKI LASSO_SAML_AUTHENTICATION_METHOD_UNSPECIFIED LASSO_SAML_AUTHENTICATION_METHOD_XKMS LASSO_SAML_AUTHENTICATION_METHOD_XMLD_SIG LASSO_SAML_CONFIRMATION_METHOD_ARTIFACT LASSO_SAML_CONFIRMATION_METHOD_ARTIFACT01 LASSO_SAML_CONFIRMATION_METHOD_BEARER LASSO_SAML_CONFIRMATION_METHOD_HOLDER_OF_KEY LASSO_SAML_CONFIRMATION_METHOD_SENDER_VOUCHES LASSO_SAML_MAJOR_VERSION_N LASSO_SAML_MINOR_VERSION_N LASSO_SAML_PROTOCOL_HREF LASSO_SAML_PROTOCOL_PREFIX LASSO_SAML_STATUS_CODE_REQUESTER LASSO_SAML_STATUS_CODE_REQUEST_DENIED LASSO_SAML_STATUS_CODE_REQUEST_VERSION_DEPRECATED LASSO_SAML_STATUS_CODE_REQUEST_VERSION_TOO_HIGH LASSO_SAML_STATUS_CODE_REQUEST_VERSION_TOO_LOW LASSO_SAML_STATUS_CODE_RESOURCE_NOT_RECOGNIZED LASSO_SAML_STATUS_CODE_RESPONDER LASSO_SAML_STATUS_CODE_SUCCESS LASSO_SAML_STATUS_CODE_TOO_MANY_RESPONSES LASSO_SAML_STATUS_CODE_VERSION_MISMATCH LASSO_SERVER_ERROR_ADD_PROVIDER_FAILED LASSO_SERVER_ERROR_ADD_PROVIDER_PROTOCOL_MISMATCH LASSO_SERVER_ERROR_INVALID_XML LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND LASSO_SERVER_ERROR_SET_ENCRYPTION_PRIVATE_KEY_FAILED LASSO_SIGNATURE_METHOD_ATTRIBUTE LASSO_SIGNATURE_METHOD_DSA_SHA1 LASSO_SIGNATURE_METHOD_LAST LASSO_SIGNATURE_METHOD_RSA_SHA1 LASSO_SIGNATURE_TYPE_ATTRIBUTE LASSO_SIGNATURE_TYPE_LAST LASSO_SIGNATURE_TYPE_NONE LASSO_SIGNATURE_TYPE_SIMPLE LASSO_SIGNATURE_TYPE_WITHX509 LASSO_SOAP_ENV_ACTOR LASSO_SOAP_ENV_HREF LASSO_SOAP_ENV_PREFIX LASSO_SOAP_ERROR_MISSING_BODY LASSO_SOAP_ERROR_MISSING_ENVELOPE LASSO_SOAP_ERROR_MISSING_HEADER LASSO_SOAP_ERROR_MISSING_SOAP_FAULT_DETAIL LASSO_SOAP_ERROR_REDIRECT_REQUEST_FAULT LASSO_SOAP_FAULT_CODE_CLIENT LASSO_SOAP_FAULT_CODE_MUST_UNDERSTAND LASSO_SOAP_FAULT_CODE_SERVER LASSO_SOAP_FAULT_CODE_VERSION_MISMATCH LASSO_SOAP_FAULT_REDIRECT_REQUEST LASSO_WSF_ENABLED LASSO_WSF_PROFILE_ERROR_INVALID_OR_MISSING_REFERENCE_TO_MESSAGE_ID LASSO_WSF_PROFILE_ERROR_MISSING_ASSERTION_ID LASSO_WSF_PROFILE_ERROR_MISSING_CORRELATION LASSO_WSF_PROFILE_ERROR_MISSING_CREDENTIAL_REF LASSO_WSF_PROFILE_ERROR_MISSING_DESCRIPTION LASSO_WSF_PROFILE_ERROR_MISSING_ENDPOINT LASSO_WSF_PROFILE_ERROR_MISSING_RESOURCE_ID LASSO_WSF_PROFILE_ERROR_MISSING_SECURITY LASSO_WSF_PROFILE_ERROR_MISSING_SENDER_ID LASSO_WSF_PROFILE_ERROR_REDIRECT_REQUEST LASSO_WSF_PROFILE_ERROR_REDIRECT_REQUEST_UNSUPPORTED_BY_REQUESTER LASSO_WSF_PROFILE_ERROR_SECURITY_MECHANISM_CHECK_FAILED LASSO_WSF_PROFILE_ERROR_SERVER_INTERACTION_REQUIRED LASSO_WSF_PROFILE_ERROR_SERVER_INTERACTION_REQUIRED_FOR_DATA LASSO_WSF_PROFILE_ERROR_SOAP_FAULT LASSO_WSF_PROFILE_ERROR_UNKNOWN_STATUS_CODE LASSO_WSF_PROFILE_ERROR_UNSUPPORTED_SECURITY_MECHANISM LASSO_WSSEC_ERROR_BAD_PASSWORD LASSO_WSSEC_ERROR_MISSING_SECURITY_TOKEN LASSO_XML_ERROR_ATTR_NOT_FOUND LASSO_XML_ERROR_ATTR_VALUE_NOT_FOUND LASSO_XML_ERROR_INVALID_FILE LASSO_XML_ERROR_MISSING_NAMESPACE LASSO_XML_ERROR_NODE_CONTENT_NOT_FOUND LASSO_XML_ERROR_NODE_NOT_FOUND LASSO_XML_ERROR_OBJECT_CONSTRUCTION_FAILED LASSO_XML_ERROR_SCHEMA_INVALID_FRAGMENT LASSO_XSI_HREF LASSO_XSI_PREFIX struct LassoAssertionQuery { LassoAssertionQueryPrivate* private_data } LassoAssertionQueryRequestType LassoCheckVersionMode struct LassoDefederation { } struct LassoDsKeyInfo { LassoDsKeyValue* KeyValue } struct LassoDsKeyValue { LassoDsRsaKeyValue* RSAKeyValue } struct LassoDsRsaKeyValue { char* Modulus, char* Exponent } struct LassoEcp { gchar* assertionConsumerURL, LassoEcpPrivate* private_data } LassoEncryptionMode LassoEncryptionSymKeyType struct LassoFederation { gchar* remote_providerID, LassoNode* local_nameIdentifier, LassoNode* remote_nameIdentifier, LassoFederationPrivate* private_data } LassoHttpMethod struct LassoIdentity { GHashTable* federations, gboolean is_dirty, LassoIdentityPrivate* private_data } struct LassoLecp { LassoLibAuthnRequestEnvelope* authnRequestEnvelope, LassoLibAuthnResponseEnvelope* authnResponseEnvelope, char* assertionConsumerServiceURL } struct LassoLibAssertion { char* InResponseTo } struct LassoLibAuthenticationStatement { LassoLibAuthnContext* AuthnContext, char* ReauthenticateOnOrAfter, char* SessionIndex } struct LassoLibAuthnContext { char* AuthnContextClassRef, char* AuthnContextStatementRef } struct LassoLibAuthnRequest { GList* Extension, char* ProviderID, char* AffiliationID, char* NameIDPolicy, gboolean ForceAuthn, gboolean IsPassive, char* ProtocolProfile, char* AssertionConsumerServiceID, LassoLibRequestAuthnContext* RequestAuthnContext, char* RelayState, LassoLibScoping* Scoping, char* consent } struct LassoLibAuthnRequestEnvelope { GList* Extension, LassoLibAuthnRequest* AuthnRequest, char* ProviderID, char* ProviderName, char* AssertionConsumerServiceURL, LassoLibIDPList* IDPList, gboolean IsPassive } struct LassoLibAuthnResponse { GList* Extension, char* ProviderID, char* RelayState, char* consent } struct LassoLibAuthnResponseEnvelope { GList* Extension, LassoLibAuthnResponse* AuthnResponse, char* AssertionConsumerServiceURL } struct LassoLibFederationTerminationNotification { GList* Extension, char* ProviderID, LassoSamlNameIdentifier* NameIdentifier, char* consent, char* RelayState } struct LassoLibIDPEntries { GList* IDPEntry } struct LassoLibIDPEntry { char* ProviderID, char* ProviderName, char* Loc } struct LassoLibIDPList { LassoLibIDPEntries* IDPEntries, char* GetComplete } struct LassoLibLogoutRequest { GList* Extension, char* ProviderID, LassoSamlNameIdentifier* NameIdentifier, char* SessionIndex, char* RelayState, char* consent, char* NotOnOrAfter } struct LassoLibLogoutResponse { } struct LassoLibNameIdentifierMappingRequest { GList* Extension, char* ProviderID, LassoSamlNameIdentifier* NameIdentifier, char* TargetNamespace, char* consent } struct LassoLibNameIdentifierMappingResponse { GList* Extension, char* ProviderID, LassoSamlpStatus* Status, LassoSamlNameIdentifier* NameIdentifier } struct LassoLibRegisterNameIdentifierRequest { GList* Extension, char* ProviderID, LassoSamlNameIdentifier* IDPProvidedNameIdentifier, LassoSamlNameIdentifier* SPProvidedNameIdentifier, LassoSamlNameIdentifier* OldProvidedNameIdentifier, char* RelayState } struct LassoLibRegisterNameIdentifierResponse { } struct LassoLibRequestAuthnContext { GList* AuthnContextClassRef, GList* AuthnContextStatementRef, char* AuthnContextComparison } struct LassoLibScoping { int ProxyCount, LassoLibIDPList* IDPList } struct LassoLibStatusResponse { GList* Extension, char* ProviderID, LassoSamlpStatus* Status, char* RelayState } struct LassoLibSubject { LassoSamlNameIdentifier* IDPProvidedNameIdentifier } struct LassoLogin { LassoLoginProtocolProfile protocolProfile, gchar* assertionArtifact, LassoSamlAssertion* assertion, gchar* nameIDPolicy, LassoHttpMethod http_method, LassoLoginPrivate* private_data } LassoLoginProtocolProfile struct LassoLogout { LassoNode* initial_request, LassoNode* initial_response, gchar* initial_remote_providerID, gint providerID_index, LassoHttpMethod initial_http_request_method, LassoLogoutPrivate* private_data } LassoMdProtocolType LassoMessageFormat struct LassoMiscTextNode { char* content, char* name, char* ns_href, char* ns_prefix, gboolean text_child } struct LassoNameIdManagement { } struct LassoNameIdentifierMapping { gchar* targetNameIdentifier } struct LassoNameRegistration { LassoSamlNameIdentifier* oldNameIdentifier } struct LassoNode { } struct LassoProfile { LassoServer* server, LassoNode* request, LassoNode* response, LassoNode* nameIdentifier, gchar* remote_providerID, gchar* msg_url, gchar* msg_body, gchar* msg_relayState, LassoIdentity* identity, LassoSession* session, LassoHttpMethod http_request_method, gint signature_status, LassoProfilePrivate* private_data } LassoProfileSignatureHint LassoProfileSignatureVerifyHint LassoProtocolConformance struct LassoProvider { gchar* ProviderID, LassoProviderRole role, char* metadata_filename, gchar* public_key, gchar* ca_cert_chain, LassoProviderPrivate* private_data } LassoProviderRole LassoRequestType struct LassoSaml2Action { char* content, char* Namespace } struct LassoSaml2Advice { GList* AssertionIDRef, GList* AssertionURIRef, GList* Assertion, GList* EncryptedAssertion } struct LassoSaml2Assertion { LassoSaml2NameID* Issuer, LassoSaml2Subject* Subject, LassoSaml2Conditions* Conditions, LassoSaml2Advice* Advice, GList* Statement, GList* AuthnStatement, GList* AuthzDecisionStatement, GList* AttributeStatement, char* Version, char* ID, char* IssueInstant, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file, gboolean encryption_activated, char* encryption_public_key_str, LassoEncryptionSymKeyType encryption_sym_key_type } LassoSaml2AssertionValidationState struct LassoSaml2Attribute { GList* AttributeValue, char* Name, char* NameFormat, char* FriendlyName } struct LassoSaml2AttributeStatement { GList* Attribute, GList* EncryptedAttribute } struct LassoSaml2AttributeValue { GList* any } struct LassoSaml2AudienceRestriction { char* Audience } struct LassoSaml2AuthnContext { char* AuthnContextClassRef, char* AuthnContextDeclRef, char* AuthenticatingAuthority } struct LassoSaml2AuthnStatement { LassoSaml2SubjectLocality* SubjectLocality, LassoSaml2AuthnContext* AuthnContext, char* AuthnInstant, char* SessionIndex, char* SessionNotOnOrAfter } struct LassoSaml2AuthzDecisionStatement { LassoSaml2Action* Action, LassoSaml2Evidence* Evidence, char* Resource, char* Decision } struct LassoSaml2BaseIDAbstract { char* NameQualifier, char* SPNameQualifier } struct LassoSaml2ConditionAbstract { } struct LassoSaml2Conditions { GList* Condition, GList* AudienceRestriction, GList* OneTimeUse, GList* ProxyRestriction, char* NotBefore, char* NotOnOrAfter } struct LassoSaml2EncryptedElement { xmlNode* EncryptedData, GList* EncryptedKey, LassoNode* original_data } struct LassoSaml2Evidence { GList* AssertionIDRef, GList* AssertionURIRef, GList* Assertion, GList* EncryptedAssertion } struct LassoSaml2KeyInfoConfirmationData { } struct LassoSaml2NameID { char* content, char* Format, char* SPProvidedID, char* NameQualifier, char* SPNameQualifier } struct LassoSaml2OneTimeUse { } struct LassoSaml2ProxyRestriction { char* Audience, char* Count } struct LassoSaml2StatementAbstract { } struct LassoSaml2Subject { LassoSaml2BaseIDAbstract* BaseID, LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, LassoSaml2SubjectConfirmation* SubjectConfirmation } struct LassoSaml2SubjectConfirmation { LassoSaml2BaseIDAbstract* BaseID, LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, LassoSaml2SubjectConfirmationData* SubjectConfirmationData, char* Method } struct LassoSaml2SubjectConfirmationData { char* NotBefore, char* NotOnOrAfter, char* Recipient, char* InResponseTo, char* Address } struct LassoSaml2SubjectLocality { char* Address, char* DNSName } struct LassoSamlAdvice { GList* AssertionIDReference, LassoNode* Assertion } struct LassoSamlAssertion { LassoSamlConditions* Conditions, LassoSamlAdvice* Advice, LassoSamlSubjectStatement* SubjectStatement, LassoSamlAuthenticationStatement* AuthenticationStatement, LassoSamlAttributeStatement* AttributeStatement, int MajorVersion, int MinorVersion, char* AssertionID, char* Issuer, char* IssueInstant, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlAttribute { gchar* attributeName, gchar* attributeNameSpace, GList* AttributeValue } struct LassoSamlAttributeDesignator { char* AttributeName, char* AttributeNamespace } struct LassoSamlAttributeStatement { GList* Attribute } struct LassoSamlAttributeValue { GList* any } struct LassoSamlAudienceRestrictionCondition { GList* Audience } struct LassoSamlAuthenticationStatement { LassoSamlSubjectLocality* SubjectLocality, GList* AuthorityBinding, char* AuthenticationMethod, char* AuthenticationInstant } struct LassoSamlAuthorityBinding { char* AuthorityKind, char* Location, char* Binding } struct LassoSamlConditionAbstract { } struct LassoSamlConditions { GList* Condition, GList* AudienceRestrictionCondition, char* NotBefore, char* NotOnOrAfter } struct LassoSamlNameIdentifier { char* NameQualifier, char* Format, char* content } struct LassoSamlStatementAbstract { } struct LassoSamlSubject { LassoSamlNameIdentifier* NameIdentifier, LassoSamlSubjectConfirmation* SubjectConfirmation, LassoSaml2EncryptedElement* EncryptedNameIdentifier } struct LassoSamlSubjectConfirmation { GList* ConfirmationMethod, char* SubjectConfirmationData, LassoDsKeyInfo* KeyInfo } struct LassoSamlSubjectLocality { char* IPAddress, char* DNSAddress } struct LassoSamlSubjectStatement { } struct LassoSamlSubjectStatementAbstract { LassoSamlSubject* Subject } struct LassoSamlp2ArtifactResolve { char* Artifact } struct LassoSamlp2ArtifactResponse { LassoNode* any } struct LassoSamlp2AssertionIDRequest { char* AssertionIDRef } struct LassoSamlp2AttributeQuery { GList* Attribute } struct LassoSamlp2AuthnQuery { LassoSamlp2RequestedAuthnContext* RequestedAuthnContext, char* SessionIndex } struct LassoSamlp2AuthnRequest { LassoSaml2Subject* Subject, LassoSamlp2NameIDPolicy* NameIDPolicy, LassoSaml2Conditions* Conditions, LassoSamlp2RequestedAuthnContext* RequestedAuthnContext, LassoSamlp2Scoping* Scoping, gboolean ForceAuthn, gboolean IsPassive, char* ProtocolBinding, int AssertionConsumerServiceIndex, char* AssertionConsumerServiceURL, int AttributeConsumingServiceIndex, char* ProviderName, G_GNUC_DEPRECATED char } struct LassoSamlp2AuthzDecisionQuery { LassoSaml2Action* Action, LassoSaml2Evidence* Evidence, char* Resource } struct LassoSamlp2Extensions { } struct LassoSamlp2IDPEntry { char* ProviderID, char* Name, char* Loc } struct LassoSamlp2IDPList { LassoSamlp2IDPEntry* IDPEntry, char* GetComplete } struct LassoSamlp2LogoutRequest { LassoSaml2BaseIDAbstract* BaseID, LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, char* SessionIndex, char* Reason, char* NotOnOrAfter, G_GNUC_DEPRECATED char } struct LassoSamlp2LogoutResponse { G_GNUC_DEPRECATED char } struct LassoSamlp2ManageNameIDRequest { LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, char* NewID, LassoSaml2EncryptedElement* NewEncryptedID, LassoSamlp2Terminate* Terminate } struct LassoSamlp2ManageNameIDResponse { } struct LassoSamlp2NameIDMappingRequest { LassoSaml2BaseIDAbstract* BaseID, LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, LassoSamlp2NameIDPolicy* NameIDPolicy } struct LassoSamlp2NameIDMappingResponse { LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID } struct LassoSamlp2NameIDPolicy { char* Format, char* SPNameQualifier, gboolean AllowCreate } struct LassoSamlp2RequestAbstract { LassoSaml2NameID* Issuer, LassoSamlp2Extensions* Extensions, char* ID, char* Version, char* IssueInstant, char* Destination, char* Consent, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlp2RequestedAuthnContext { GList* AuthnContextClassRef, GList* AuthnContextDeclRef, char* Comparison } struct LassoSamlp2Response { GList* Assertion, GList* EncryptedAssertion } struct LassoSamlp2Scoping { LassoSamlp2IDPList* IDPList, char* RequesterID, char* ProxyCount } struct LassoSamlp2Status { LassoSamlp2StatusCode* StatusCode, char* StatusMessage, LassoSamlp2StatusDetail* StatusDetail } struct LassoSamlp2StatusCode { LassoSamlp2StatusCode* StatusCode, char* Value } struct LassoSamlp2StatusDetail { } struct LassoSamlp2StatusResponse { LassoSaml2NameID* Issuer, LassoSamlp2Extensions* Extensions, LassoSamlp2Status* Status, char* ID, char* InResponseTo, char* Version, char* IssueInstant, char* Destination, char* Consent, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlp2SubjectQueryAbstract { LassoSaml2Subject* Subject } struct LassoSamlp2Terminate { } struct LassoSamlpRequest { char* AssertionArtifact } struct LassoSamlpRequestAbstract { GList* RespondWith, char* RequestID, int MajorVersion, int MinorVersion, char* IssueInstant, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlpResponse { LassoSamlpStatus* Status, GList* Assertion } struct LassoSamlpResponseAbstract { char* ResponseID, char* InResponseTo, int MajorVersion, int MinorVersion, char* IssueInstant, char* Recipient, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlpStatus { LassoSamlpStatusCode* StatusCode, char* StatusMessage } struct LassoSamlpStatusCode { LassoSamlpStatusCode* StatusCode, char* Value } struct LassoServer { GHashTable* providers, GHashTable* services, gchar* private_key, gchar* private_key_password, gchar* certificate, LassoSignatureMethod signature_method, LassoServerPrivate* private_data } struct LassoSession { GHashTable* assertions, gboolean is_dirty, LassoSessionPrivate* private_data } LassoSignatureMethod LassoSignatureType lasso_error_t lasso_assertion_query_add_attribute_request ( LassoAssertionQuery* assertion_query, char* format, char* name ) lasso_error_t lasso_assertion_query_build_request_msg ( LassoAssertionQuery* assertion_query ) lasso_error_t lasso_assertion_query_build_response_msg ( LassoAssertionQuery* assertion_query ) None lasso_assertion_query_destroy ( LassoAssertionQuery* assertion_query ) LassoAssertionQueryRequestType lasso_assertion_query_get_request_type ( LassoAssertionQuery* assertion_query ) GType lasso_assertion_query_get_type ( ) lasso_error_t lasso_assertion_query_init_request ( LassoAssertionQuery* assertion_query, char* remote_provider_id, LassoHttpMethod http_method, LassoAssertionQueryRequestType query_request_type ) LassoAssertionQuery* lasso_assertion_query_new ( LassoServer* server ) lasso_error_t lasso_assertion_query_process_request_msg ( LassoAssertionQuery* assertion_query, gchar* request_msg ) lasso_error_t lasso_assertion_query_process_response_msg ( LassoAssertionQuery* assertion_query, gchar* response_msg ) lasso_error_t lasso_assertion_query_validate_request ( LassoAssertionQuery* assertion_query ) char* lasso_build_unique_id ( unsigned int size ) int lasso_check_version ( int major, int minor, int subminor, LassoCheckVersionMode mode ) lasso_error_t lasso_defederation_build_notification_msg ( LassoDefederation* defederation ) None lasso_defederation_destroy ( LassoDefederation* defederation ) GType lasso_defederation_get_type ( ) lasso_error_t lasso_defederation_init_notification ( LassoDefederation* defederation, gchar* remote_providerID, LassoHttpMethod http_method ) LassoDefederation* lasso_defederation_new ( LassoServer* server ) lasso_error_t lasso_defederation_process_notification_msg ( LassoDefederation* defederation, gchar* notification_msg ) lasso_error_t lasso_defederation_validate_notification ( LassoDefederation* defederation ) GType lasso_ds_key_info_get_type ( ) LassoDsKeyInfo* lasso_ds_key_info_new ( ) GType lasso_ds_key_value_get_type ( ) LassoDsKeyValue* lasso_ds_key_value_new ( ) GType lasso_ds_rsa_key_value_get_type ( ) LassoDsRsaKeyValue* lasso_ds_rsa_key_value_new ( ) None lasso_ecp_destroy ( LassoEcp* ecp ) GType lasso_ecp_get_type ( ) LassoEcp* lasso_ecp_new ( LassoServer* server ) lasso_error_t lasso_ecp_process_authn_request_msg ( LassoEcp* ecp, const char* authn_request_msg ) lasso_error_t lasso_ecp_process_response_msg ( LassoEcp* ecp, const char* response_msg ) None lasso_federation_build_local_name_identifier ( LassoFederation* federation, const gchar* nameQualifier, const gchar* format, const gchar* content ) None lasso_federation_destroy ( LassoFederation* federation ) GType lasso_federation_get_type ( ) LassoFederation* lasso_federation_new ( const gchar* remote_providerID ) gboolean lasso_federation_verify_name_identifier ( LassoFederation* federation, LassoNode* name_identifier ) char* lasso_get_prefix_for_dst_service_href ( const char* href ) gchar* lasso_get_prefix_for_idwsf2_dst_service_href ( const gchar* href ) None lasso_identity_destroy ( LassoIdentity* identity ) gchar* lasso_identity_dump ( LassoIdentity* identity ) LassoFederation* lasso_identity_get_federation ( LassoIdentity* identity, const char* providerID ) GType lasso_identity_get_type ( ) LassoIdentity* lasso_identity_new ( ) LassoIdentity* lasso_identity_new_from_dump ( const gchar* dump ) lasso_error_t lasso_init ( ) lasso_error_t lasso_lecp_build_authn_request_envelope_msg ( LassoLecp* lecp ) lasso_error_t lasso_lecp_build_authn_request_msg ( LassoLecp* lecp ) lasso_error_t lasso_lecp_build_authn_response_envelope_msg ( LassoLecp* lecp ) lasso_error_t lasso_lecp_build_authn_response_msg ( LassoLecp* lecp ) None lasso_lecp_destroy ( LassoLecp* lecp ) GType lasso_lecp_get_type ( ) lasso_error_t lasso_lecp_init_authn_request ( LassoLecp* lecp, const char* remote_providerID ) LassoLecp* lasso_lecp_new ( LassoServer* server ) lasso_error_t lasso_lecp_process_authn_request_envelope_msg ( LassoLecp* lecp, const char* request_msg ) lasso_error_t lasso_lecp_process_authn_request_msg ( LassoLecp* lecp, const char* authn_request_msg ) lasso_error_t lasso_lecp_process_authn_response_envelope_msg ( LassoLecp* lecp, const char* response_msg ) GType lasso_lib_assertion_get_type ( ) LassoLibAssertion* lasso_lib_assertion_new ( ) LassoLibAssertion* lasso_lib_assertion_new_full ( const char* issuer, const char* requestID, const char* audience, const char* notBefore, const char* notOnOrAfter ) GType lasso_lib_authentication_statement_get_type ( ) LassoLibAuthenticationStatement* lasso_lib_authentication_statement_new ( ) LassoLibAuthenticationStatement* lasso_lib_authentication_statement_new_full ( const char* authenticationMethod, const char* authenticationInstant, const char* reauthenticateOnOrAfter, LassoSamlNameIdentifier* sp_identifier, LassoSamlNameIdentifier* idp_identifier ) GType lasso_lib_authn_context_get_type ( ) LassoNode* lasso_lib_authn_context_new ( ) GType lasso_lib_authn_request_envelope_get_type ( ) LassoLibAuthnRequestEnvelope* lasso_lib_authn_request_envelope_new ( ) LassoLibAuthnRequestEnvelope* lasso_lib_authn_request_envelope_new_full ( LassoLibAuthnRequest* authnRequest, char* providerID, char* assertionConsumerServiceURL ) GType lasso_lib_authn_request_get_type ( ) LassoLibAuthnRequest* lasso_lib_authn_request_new ( ) GType lasso_lib_authn_response_envelope_get_type ( ) LassoLibAuthnResponseEnvelope* lasso_lib_authn_response_envelope_new ( LassoLibAuthnResponse* response, char* assertionConsumerServiceURL ) GType lasso_lib_authn_response_get_type ( ) LassoNode* lasso_lib_authn_response_new ( char* providerID, LassoLibAuthnRequest* request ) GType lasso_lib_federation_termination_notification_get_type ( ) LassoNode* lasso_lib_federation_termination_notification_new ( ) LassoNode* lasso_lib_federation_termination_notification_new_full ( char* providerID, LassoSamlNameIdentifier* nameIdentifier, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_idp_entries_get_type ( ) LassoNode* lasso_lib_idp_entries_new ( ) GType lasso_lib_idp_entry_get_type ( ) LassoNode* lasso_lib_idp_entry_new ( ) GType lasso_lib_idp_list_get_type ( ) LassoNode* lasso_lib_idp_list_new ( ) GType lasso_lib_logout_request_get_type ( ) LassoNode* lasso_lib_logout_request_new ( ) LassoNode* lasso_lib_logout_request_new_full ( char* providerID, LassoSamlNameIdentifier* nameIdentifier, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_logout_response_get_type ( ) LassoNode* lasso_lib_logout_response_new ( ) LassoNode* lasso_lib_logout_response_new_full ( char* providerID, const char* statusCodeValue, LassoLibLogoutRequest* request, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_name_identifier_mapping_request_get_type ( ) LassoNode* lasso_lib_name_identifier_mapping_request_new ( ) LassoNode* lasso_lib_name_identifier_mapping_request_new_full ( char* providerID, LassoSamlNameIdentifier* nameIdentifier, const char* targetNamespace, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_name_identifier_mapping_response_get_type ( ) LassoNode* lasso_lib_name_identifier_mapping_response_new ( ) LassoNode* lasso_lib_name_identifier_mapping_response_new_full ( char* provideRID, const char* statusCodeValue, LassoLibNameIdentifierMappingRequest* request, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_register_name_identifier_request_get_type ( ) LassoNode* lasso_lib_register_name_identifier_request_new ( ) LassoNode* lasso_lib_register_name_identifier_request_new_full ( const char* providerID, LassoSamlNameIdentifier* idpNameIdentifier, LassoSamlNameIdentifier* spNameIdentifier, LassoSamlNameIdentifier* oldNameIdentifier, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_register_name_identifier_response_get_type ( ) LassoNode* lasso_lib_register_name_identifier_response_new ( ) LassoNode* lasso_lib_register_name_identifier_response_new_full ( const char* providerID, const char* statusCodeValue, LassoLibRegisterNameIdentifierRequest* request, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_request_authn_context_get_type ( ) LassoLibRequestAuthnContext* lasso_lib_request_authn_context_new ( ) GType lasso_lib_scoping_get_type ( ) LassoLibScoping* lasso_lib_scoping_new ( ) GType lasso_lib_status_response_get_type ( ) LassoNode* lasso_lib_status_response_new ( ) GType lasso_lib_subject_get_type ( ) LassoLibSubject* lasso_lib_subject_new ( ) lasso_error_t lasso_login_accept_sso ( LassoLogin* login ) lasso_error_t lasso_login_build_artifact_msg ( LassoLogin* login, LassoHttpMethod http_method ) lasso_error_t lasso_login_build_assertion ( LassoLogin* login, const char* authenticationMethod, const char* authenticationInstant, const char* reauthenticateOnOrAfter, const char* notBefore, const char* notOnOrAfter ) lasso_error_t lasso_login_build_authn_request_msg ( LassoLogin* login ) lasso_error_t lasso_login_build_authn_response_msg ( LassoLogin* login ) lasso_error_t lasso_login_build_request_msg ( LassoLogin* login ) lasso_error_t lasso_login_build_response_msg ( LassoLogin* login, gchar* remote_providerID ) None lasso_login_destroy ( LassoLogin* login ) gchar* lasso_login_dump ( LassoLogin* login ) LassoNode* lasso_login_get_assertion ( LassoLogin* login ) GType lasso_login_get_type ( ) lasso_error_t lasso_login_init_authn_request ( LassoLogin* login, const gchar* remote_providerID, LassoHttpMethod http_method ) lasso_error_t lasso_login_init_idp_initiated_authn_request ( LassoLogin* login, const gchar* remote_providerID ) lasso_error_t lasso_login_init_request ( LassoLogin* login, gchar* response_msg, LassoHttpMethod response_http_method ) gboolean lasso_login_must_ask_for_consent ( LassoLogin* login ) gboolean lasso_login_must_authenticate ( LassoLogin* login ) LassoLogin* lasso_login_new ( LassoServer* server ) LassoLogin* lasso_login_new_from_dump ( LassoServer* server, const gchar* dump ) lasso_error_t lasso_login_process_authn_request_msg ( LassoLogin* login, const char* authn_request_msg ) lasso_error_t lasso_login_process_authn_response_msg ( LassoLogin* login, gchar* authn_response_msg ) lasso_error_t lasso_login_process_paos_response_msg ( LassoLogin* login, gchar* msg ) lasso_error_t lasso_login_process_request_msg ( LassoLogin* login, gchar* request_msg ) lasso_error_t lasso_login_process_response_msg ( LassoLogin* login, gchar* response_msg ) lasso_error_t lasso_login_validate_request_msg ( LassoLogin* login, gboolean authentication_result, gboolean is_consent_obtained ) lasso_error_t lasso_logout_build_request_msg ( LassoLogout* logout ) lasso_error_t lasso_logout_build_response_msg ( LassoLogout* logout ) None lasso_logout_destroy ( LassoLogout* logout ) gchar* lasso_logout_dump ( LassoLogout* logout ) gchar* lasso_logout_get_next_providerID ( LassoLogout* logout ) GType lasso_logout_get_type ( ) lasso_error_t lasso_logout_init_request ( LassoLogout* logout, gchar* remote_providerID, LassoHttpMethod request_method ) LassoLogout* lasso_logout_new ( LassoServer* server ) LassoLogout* lasso_logout_new_from_dump ( LassoServer* server, const gchar* dump ) lasso_error_t lasso_logout_process_request_msg ( LassoLogout* logout, gchar* request_msg ) lasso_error_t lasso_logout_process_response_msg ( LassoLogout* logout, gchar* response_msg ) lasso_error_t lasso_logout_reset_providerID_index ( LassoLogout* logout ) lasso_error_t lasso_logout_validate_request ( LassoLogout* logout ) GType lasso_misc_text_node_get_type ( ) xmlNode* lasso_misc_text_node_get_xml_content ( LassoMiscTextNode* misc_text_node ) LassoNode* lasso_misc_text_node_new ( ) LassoMiscTextNode* lasso_misc_text_node_new_with_string ( const char* content ) LassoMiscTextNode* lasso_misc_text_node_new_with_xml_node ( xmlNode* xml_node ) None lasso_misc_text_node_set_xml_content ( LassoMiscTextNode* misc_text_node, xmlNode* node ) lasso_error_t lasso_name_id_management_build_request_msg ( LassoNameIdManagement* name_id_management ) lasso_error_t lasso_name_id_management_build_response_msg ( LassoNameIdManagement* name_id_management ) None lasso_name_id_management_destroy ( LassoNameIdManagement* name_id_management ) char* lasso_name_id_management_dump ( LassoNameIdManagement* name_id_management ) GType lasso_name_id_management_get_type ( ) lasso_error_t lasso_name_id_management_init_request ( LassoNameIdManagement* name_id_management, char* remote_provider_id, char* new_name_id, LassoHttpMethod http_method ) LassoNameIdManagement* lasso_name_id_management_new ( LassoServer* server ) LassoNameIdManagement* lasso_name_id_management_new_from_dump ( LassoServer* server, const char* dump ) lasso_error_t lasso_name_id_management_process_request_msg ( LassoNameIdManagement* name_id_management, gchar* request_msg ) lasso_error_t lasso_name_id_management_process_response_msg ( LassoNameIdManagement* name_id_management, gchar* response_msg ) lasso_error_t lasso_name_id_management_validate_request ( LassoNameIdManagement* name_id_management ) lasso_error_t lasso_name_identifier_mapping_build_request_msg ( LassoNameIdentifierMapping* mapping ) lasso_error_t lasso_name_identifier_mapping_build_response_msg ( LassoNameIdentifierMapping* mapping ) None lasso_name_identifier_mapping_destroy ( LassoNameIdentifierMapping* mapping ) GType lasso_name_identifier_mapping_get_type ( ) lasso_error_t lasso_name_identifier_mapping_init_request ( LassoNameIdentifierMapping* mapping, gchar* targetNamespace, gchar* remote_providerID ) LassoNameIdentifierMapping* lasso_name_identifier_mapping_new ( LassoServer* server ) lasso_error_t lasso_name_identifier_mapping_process_request_msg ( LassoNameIdentifierMapping* mapping, gchar* request_msg ) lasso_error_t lasso_name_identifier_mapping_process_response_msg ( LassoNameIdentifierMapping* mapping, gchar* response_msg ) lasso_error_t lasso_name_identifier_mapping_validate_request ( LassoNameIdentifierMapping* mapping ) lasso_error_t lasso_name_registration_build_request_msg ( LassoNameRegistration* name_registration ) lasso_error_t lasso_name_registration_build_response_msg ( LassoNameRegistration* name_registration ) None lasso_name_registration_destroy ( LassoNameRegistration* name_registration ) gchar* lasso_name_registration_dump ( LassoNameRegistration* name_registration ) GType lasso_name_registration_get_type ( ) lasso_error_t lasso_name_registration_init_request ( LassoNameRegistration* name_registration, char* remote_providerID, LassoHttpMethod http_method ) LassoNameRegistration* lasso_name_registration_new ( LassoServer* server ) LassoNameRegistration* lasso_name_registration_new_from_dump ( LassoServer* server, const char* dump ) lasso_error_t lasso_name_registration_process_request_msg ( LassoNameRegistration* name_registration, gchar* request_msg ) lasso_error_t lasso_name_registration_process_response_msg ( LassoNameRegistration* name_registration, gchar* response_msg ) lasso_error_t lasso_name_registration_validate_request ( LassoNameRegistration* name_registration ) None lasso_node_cleanup_original_xmlnodes ( LassoNode* node ) char* lasso_node_debug ( LassoNode* node, int level ) None lasso_node_destroy ( LassoNode* node ) char* lasso_node_dump ( LassoNode* node ) char* lasso_node_export_to_base64 ( LassoNode* node ) char* lasso_node_export_to_ecp_soap_response ( LassoNode* node, const char* assertionConsumerURL ) char* lasso_node_export_to_paos_request ( LassoNode* node, const char* issuer, const char* responseConsumerURL, const char* relay_state ) char* lasso_node_export_to_query ( LassoNode* node, LassoSignatureMethod sign_method, const char* private_key_file ) char* lasso_node_export_to_query_with_password ( LassoNode* node, LassoSignatureMethod sign_method, const char* private_key_file, const char* private_key_file_password ) char* lasso_node_export_to_soap ( LassoNode* node ) gchar* lasso_node_export_to_xml ( LassoNode* node ) const char* lasso_node_get_name ( LassoNode* node ) const char* lasso_node_get_namespace ( LassoNode* node ) xmlNode* lasso_node_get_original_xmlnode ( LassoNode* node ) GType lasso_node_get_type ( ) xmlNode* lasso_node_get_xmlNode ( LassoNode* node, gboolean lasso_dump ) LassoMessageFormat lasso_node_init_from_message ( LassoNode* node, const char* message ) gboolean lasso_node_init_from_query ( LassoNode* node, const char* query ) lasso_error_t lasso_node_init_from_xml ( LassoNode* node, xmlNode* xmlnode ) LassoNode* lasso_node_new ( ) LassoNode* lasso_node_new_from_dump ( const char* dump ) LassoNode* lasso_node_new_from_soap ( const char* soap ) LassoNode* lasso_node_new_from_xmlNode ( xmlNode* node ) None lasso_node_set_custom_namespace ( LassoNode* node, const char* prefix, const char* href ) None lasso_node_set_custom_nodename ( LassoNode* node, const char* nodename ) None lasso_node_set_original_xmlnode ( LassoNode* node, xmlNode* xmlnode ) char* lasso_profile_get_artifact ( LassoProfile* profile ) char* lasso_profile_get_artifact_message ( LassoProfile* profile ) LassoIdentity* lasso_profile_get_identity ( LassoProfile* profile ) LassoNode* lasso_profile_get_nameIdentifier ( LassoProfile* profile ) LassoRequestType lasso_profile_get_request_type_from_soap_msg ( const gchar* soap ) LassoSession* lasso_profile_get_session ( LassoProfile* profile ) LassoProfileSignatureHint lasso_profile_get_signature_hint ( LassoProfile* profile ) lasso_error_t lasso_profile_get_signature_status ( LassoProfile* profile ) LassoProfileSignatureVerifyHint lasso_profile_get_signature_verify_hint ( LassoProfile* profile ) GType lasso_profile_get_type ( ) gboolean lasso_profile_is_identity_dirty ( LassoProfile* profile ) gboolean lasso_profile_is_liberty_query ( const gchar* query ) gboolean lasso_profile_is_saml_query ( const gchar* query ) gboolean lasso_profile_is_session_dirty ( LassoProfile* profile ) None lasso_profile_set_artifact_message ( LassoProfile* profile, const char* message ) lasso_error_t lasso_profile_set_identity_from_dump ( LassoProfile* profile, const gchar* dump ) lasso_error_t lasso_profile_set_session_from_dump ( LassoProfile* profile, const gchar* dump ) None lasso_profile_set_signature_hint ( LassoProfile* profile, LassoProfileSignatureHint signature_hint ) None lasso_profile_set_signature_verify_hint ( LassoProfile* profile, LassoProfileSignatureVerifyHint signature_verify_hint ) lasso_error_t lasso_profile_set_soap_fault_response ( LassoProfile* profile, const char* faultcode, const char* faultstring, GList* details ) LassoProviderRole lasso_profile_sso_role_with ( LassoProfile* profile, const char* remote_provider_id ) gboolean lasso_provider_accept_http_method ( LassoProvider* provider, LassoProvider* remote_provider, LassoMdProtocolType protocol_type, LassoHttpMethod http_method, gboolean initiate_profile ) gchar* lasso_provider_get_assertion_consumer_service_url ( LassoProvider* provider, const char* service_id ) gchar* lasso_provider_get_base64_succinct_id ( const LassoProvider* provider ) char* lasso_provider_get_cache_duration ( LassoProvider* provider ) gchar* lasso_provider_get_default_name_id_format ( LassoProvider* provider ) LassoEncryptionMode lasso_provider_get_encryption_mode ( LassoProvider* provider ) LassoHttpMethod lasso_provider_get_first_http_method ( LassoProvider* provider, LassoProvider* remote_provider, LassoMdProtocolType protocol_type ) GList* lasso_provider_get_idp_supported_attributes ( LassoProvider* provider ) GList* lasso_provider_get_metadata_keys_for_role ( LassoProvider* provider, LassoProviderRole role ) GList* lasso_provider_get_metadata_list ( LassoProvider* provider, const char* name ) GList* lasso_provider_get_metadata_list_for_role ( const LassoProvider* provider, LassoProviderRole role, const char* name ) gchar* lasso_provider_get_metadata_one ( LassoProvider* provider, const char* name ) char* lasso_provider_get_metadata_one_for_role ( LassoProvider* provider, LassoProviderRole role, const char* name ) xmlNode* lasso_provider_get_organization ( const LassoProvider* provider ) LassoProtocolConformance lasso_provider_get_protocol_conformance ( const LassoProvider* provider ) LassoProviderRole lasso_provider_get_roles ( LassoProvider* provider ) const char* lasso_provider_get_sp_name_qualifier ( LassoProvider* provider ) GType lasso_provider_get_type ( ) char* lasso_provider_get_valid_until ( LassoProvider* provider ) gboolean lasso_provider_has_protocol_profile ( LassoProvider* provider, LassoMdProtocolType protocol_type, const char* protocol_profile ) gboolean lasso_provider_match_conformance ( LassoProvider* provider, LassoProvider* another_provider ) LassoProvider* lasso_provider_new ( LassoProviderRole role, const char* metadata, const char* public_key, const char* ca_cert_chain ) LassoProvider* lasso_provider_new_from_buffer ( LassoProviderRole role, const char* metadata, const char* public_key, const char* ca_cert_chain ) LassoProvider* lasso_provider_new_from_dump ( const gchar* dump ) LassoSaml2EncryptedElement* lasso_provider_saml2_node_encrypt ( const LassoProvider* provider, LassoNode* lasso_node ) None lasso_provider_set_encryption_mode ( LassoProvider* provider, LassoEncryptionMode encryption_mode ) None lasso_provider_set_encryption_sym_key_type ( LassoProvider* provider, LassoEncryptionSymKeyType encryption_sym_key_type ) lasso_error_t lasso_provider_verify_single_node_signature ( LassoProvider* provider, LassoNode* node, const char* id_attr_name ) None lasso_register_dst_service ( const char* prefix, const char* href ) None lasso_register_idwsf2_dst_service ( const gchar* prefix, const gchar* href ) GType lasso_saml2_action_get_type ( ) LassoNode* lasso_saml2_action_new ( ) LassoNode* lasso_saml2_action_new_with_string ( char* content ) GType lasso_saml2_advice_get_type ( ) LassoNode* lasso_saml2_advice_new ( ) lasso_error_t lasso_saml2_assertion_add_attribute_with_node ( LassoSaml2Assertion* assertion, const char* name, const char* nameformat, LassoNode* content ) None lasso_saml2_assertion_add_audience_restriction ( LassoSaml2Assertion* saml2_assertion, const char* providerID ) None lasso_saml2_assertion_add_proxy_limit ( LassoSaml2Assertion* saml2_assertion, int proxy_count, GList* proxy_audiences ) LassoSaml2AssertionValidationState lasso_saml2_assertion_allows_proxying ( LassoSaml2Assertion* saml2_assertion ) LassoSaml2AssertionValidationState lasso_saml2_assertion_allows_proxying_to ( LassoSaml2Assertion* saml2_assertion, const char* audience ) lasso_error_t lasso_saml2_assertion_decrypt_subject ( LassoSaml2Assertion* assertion, LassoServer* server ) const char* lasso_saml2_assertion_get_in_response_to ( LassoSaml2Assertion* assertion ) LassoProvider* lasso_saml2_assertion_get_issuer_provider ( const LassoSaml2Assertion* saml2_assertion, const LassoServer* server ) LassoSaml2SubjectConfirmationData* lasso_saml2_assertion_get_subject_confirmation_data ( LassoSaml2Assertion* saml2_assertion, gboolean create ) GType lasso_saml2_assertion_get_type ( ) gboolean lasso_saml2_assertion_has_audience_restriction ( LassoSaml2Assertion* saml2_assertion ) gboolean lasso_saml2_assertion_has_one_time_use ( LassoSaml2Assertion* saml2_assertion ) gboolean lasso_saml2_assertion_is_audience_restricted ( LassoSaml2Assertion* saml2_assertion, char* providerID ) LassoNode* lasso_saml2_assertion_new ( ) None lasso_saml2_assertion_set_basic_conditions ( LassoSaml2Assertion* saml2_assertion, time_t tolerance, time_t length, gboolean one_time_use ) None lasso_saml2_assertion_set_one_time_use ( LassoSaml2Assertion* saml2_assertion, gboolean one_time_use ) None lasso_saml2_assertion_set_subject_confirmation_data ( LassoSaml2Assertion* saml2_assertion, time_t tolerance, time_t length, const char* Recipient, const char* InResponseTo, const char* Address ) None lasso_saml2_assertion_set_subject_confirmation_name_id ( LassoSaml2Assertion* saml2_assertion, LassoNode* node ) None lasso_saml2_assertion_set_subject_name_id ( LassoSaml2Assertion* saml2_assertion, LassoNode* node ) LassoSaml2AssertionValidationState lasso_saml2_assertion_validate_audience ( LassoSaml2Assertion* saml2_assertion, const gchar* audience ) LassoSaml2AssertionValidationState lasso_saml2_assertion_validate_conditions ( LassoSaml2Assertion* saml2_assertion, const char* relaying_party_providerID ) LassoSaml2AssertionValidationState lasso_saml2_assertion_validate_time_checks ( LassoSaml2Assertion* saml2_assertion, unsigned int tolerance, time_t now ) GType lasso_saml2_attribute_get_type ( ) LassoNode* lasso_saml2_attribute_new ( ) GType lasso_saml2_attribute_statement_get_type ( ) LassoNode* lasso_saml2_attribute_statement_new ( ) GType lasso_saml2_attribute_value_get_type ( ) LassoSaml2AttributeValue* lasso_saml2_attribute_value_new ( ) GType lasso_saml2_audience_restriction_get_type ( ) LassoNode* lasso_saml2_audience_restriction_new ( ) GType lasso_saml2_authn_context_get_type ( ) LassoNode* lasso_saml2_authn_context_new ( ) GType lasso_saml2_authn_statement_get_type ( ) LassoNode* lasso_saml2_authn_statement_new ( ) GType lasso_saml2_authz_decision_statement_get_type ( ) LassoNode* lasso_saml2_authz_decision_statement_new ( ) GType lasso_saml2_base_idabstract_get_type ( ) LassoNode* lasso_saml2_base_idabstract_new ( ) GType lasso_saml2_condition_abstract_get_type ( ) LassoNode* lasso_saml2_condition_abstract_new ( ) GType lasso_saml2_conditions_get_type ( ) LassoNode* lasso_saml2_conditions_new ( ) LassoSaml2EncryptedElement* lasso_saml2_encrypted_element_build_encrypted_persistent_name_id ( const char* id, const char* idpID, const LassoProvider* provider ) GType lasso_saml2_encrypted_element_get_type ( ) LassoNode* lasso_saml2_encrypted_element_new ( ) lasso_error_t lasso_saml2_encrypted_element_server_decrypt ( LassoSaml2EncryptedElement* encrypted_element, LassoServer* server, LassoNode** decrypted_node ) GType lasso_saml2_evidence_get_type ( ) LassoNode* lasso_saml2_evidence_new ( ) GType lasso_saml2_key_info_confirmation_data_get_type ( ) LassoNode* lasso_saml2_key_info_confirmation_data_new ( ) LassoSaml2NameID* lasso_saml2_name_id_build_persistent ( const char* id, const char* idpID, const char* providerID ) gboolean lasso_saml2_name_id_equals ( LassoSaml2NameID* name_id, LassoSaml2NameID* other_name_id ) GType lasso_saml2_name_id_get_type ( ) LassoNode* lasso_saml2_name_id_new ( ) LassoSaml2NameID* lasso_saml2_name_id_new_with_persistent_format ( const char* id, const char* idpID, const char* providerID ) LassoNode* lasso_saml2_name_id_new_with_string ( char* content ) GType lasso_saml2_one_time_use_get_type ( ) LassoNode* lasso_saml2_one_time_use_new ( ) GType lasso_saml2_proxy_restriction_get_type ( ) LassoNode* lasso_saml2_proxy_restriction_new ( ) GType lasso_saml2_statement_abstract_get_type ( ) LassoNode* lasso_saml2_statement_abstract_new ( ) GType lasso_saml2_subject_confirmation_data_get_type ( ) LassoNode* lasso_saml2_subject_confirmation_data_new ( ) GType lasso_saml2_subject_confirmation_get_type ( ) LassoNode* lasso_saml2_subject_confirmation_new ( ) GType lasso_saml2_subject_get_type ( ) GType lasso_saml2_subject_locality_get_type ( ) LassoNode* lasso_saml2_subject_locality_new ( ) LassoNode* lasso_saml2_subject_new ( ) GType lasso_saml_advice_get_type ( ) LassoNode* lasso_saml_advice_new ( ) GType lasso_saml_assertion_get_type ( ) LassoSamlAssertion* lasso_saml_assertion_new ( ) GType lasso_saml_attribute_designator_get_type ( ) LassoNode* lasso_saml_attribute_designator_new ( ) GType lasso_saml_attribute_get_type ( ) LassoSamlAttribute* lasso_saml_attribute_new ( ) GType lasso_saml_attribute_statement_get_type ( ) LassoSamlAttributeStatement* lasso_saml_attribute_statement_new ( ) GType lasso_saml_attribute_value_get_type ( ) LassoSamlAttributeValue* lasso_saml_attribute_value_new ( ) GType lasso_saml_audience_restriction_condition_get_type ( ) LassoSamlAudienceRestrictionCondition* lasso_saml_audience_restriction_condition_new ( ) LassoSamlAudienceRestrictionCondition* lasso_saml_audience_restriction_condition_new_full ( const char* audience ) GType lasso_saml_authentication_statement_get_type ( ) LassoNode* lasso_saml_authentication_statement_new ( ) GType lasso_saml_authority_binding_get_type ( ) LassoNode* lasso_saml_authority_binding_new ( ) GType lasso_saml_condition_abstract_get_type ( ) GType lasso_saml_conditions_get_type ( ) LassoSamlConditions* lasso_saml_conditions_new ( ) GType lasso_saml_name_identifier_get_type ( ) LassoSamlNameIdentifier* lasso_saml_name_identifier_new ( ) LassoSamlNameIdentifier* lasso_saml_name_identifier_new_from_xmlNode ( xmlNode* xmlnode ) GType lasso_saml_statement_abstract_get_type ( ) GType lasso_saml_subject_confirmation_get_type ( ) LassoSamlSubjectConfirmation* lasso_saml_subject_confirmation_new ( ) GType lasso_saml_subject_get_type ( ) GType lasso_saml_subject_locality_get_type ( ) LassoNode* lasso_saml_subject_locality_new ( ) LassoNode* lasso_saml_subject_new ( ) GType lasso_saml_subject_statement_abstract_get_type ( ) GType lasso_saml_subject_statement_get_type ( ) LassoNode* lasso_saml_subject_statement_new ( ) GType lasso_samlp2_artifact_resolve_get_type ( ) LassoNode* lasso_samlp2_artifact_resolve_new ( ) GType lasso_samlp2_artifact_response_get_type ( ) LassoNode* lasso_samlp2_artifact_response_new ( ) GType lasso_samlp2_assertion_id_request_get_type ( ) LassoNode* lasso_samlp2_assertion_id_request_new ( ) GType lasso_samlp2_attribute_query_get_type ( ) LassoNode* lasso_samlp2_attribute_query_new ( ) GType lasso_samlp2_authn_query_get_type ( ) LassoNode* lasso_samlp2_authn_query_new ( ) GType lasso_samlp2_authn_request_get_type ( ) LassoNode* lasso_samlp2_authn_request_new ( ) GType lasso_samlp2_authz_decision_query_get_type ( ) LassoNode* lasso_samlp2_authz_decision_query_new ( ) GType lasso_samlp2_extensions_get_type ( ) LassoNode* lasso_samlp2_extensions_new ( ) GType lasso_samlp2_idp_entry_get_type ( ) LassoNode* lasso_samlp2_idp_entry_new ( ) GType lasso_samlp2_idp_list_get_type ( ) LassoNode* lasso_samlp2_idp_list_new ( ) GList* lasso_samlp2_logout_request_get_session_indexes ( LassoSamlp2LogoutRequest* logout_request ) GType lasso_samlp2_logout_request_get_type ( ) LassoNode* lasso_samlp2_logout_request_new ( ) None lasso_samlp2_logout_request_set_session_indexes ( LassoSamlp2LogoutRequest* logout_request, GList* session_index ) GType lasso_samlp2_logout_response_get_type ( ) LassoNode* lasso_samlp2_logout_response_new ( ) GType lasso_samlp2_manage_name_id_request_get_type ( ) LassoNode* lasso_samlp2_manage_name_id_request_new ( ) GType lasso_samlp2_manage_name_id_response_get_type ( ) LassoNode* lasso_samlp2_manage_name_id_response_new ( ) GType lasso_samlp2_name_id_mapping_request_get_type ( ) LassoNode* lasso_samlp2_name_id_mapping_request_new ( ) GType lasso_samlp2_name_id_mapping_response_get_type ( ) LassoNode* lasso_samlp2_name_id_mapping_response_new ( ) GType lasso_samlp2_name_id_policy_get_type ( ) LassoNode* lasso_samlp2_name_id_policy_new ( ) GType lasso_samlp2_request_abstract_get_type ( ) LassoNode* lasso_samlp2_request_abstract_new ( ) GType lasso_samlp2_requested_authn_context_get_type ( ) LassoNode* lasso_samlp2_requested_authn_context_new ( ) GType lasso_samlp2_response_get_type ( ) LassoNode* lasso_samlp2_response_new ( ) GType lasso_samlp2_scoping_get_type ( ) LassoNode* lasso_samlp2_scoping_new ( ) GType lasso_samlp2_status_code_get_type ( ) LassoNode* lasso_samlp2_status_code_new ( ) GType lasso_samlp2_status_detail_get_type ( ) LassoNode* lasso_samlp2_status_detail_new ( ) GType lasso_samlp2_status_get_type ( ) LassoNode* lasso_samlp2_status_new ( ) GType lasso_samlp2_status_response_get_type ( ) LassoNode* lasso_samlp2_status_response_new ( ) GType lasso_samlp2_subject_query_abstract_get_type ( ) LassoNode* lasso_samlp2_subject_query_abstract_new ( ) GType lasso_samlp2_terminate_get_type ( ) LassoNode* lasso_samlp2_terminate_new ( ) GType lasso_samlp_request_abstract_get_type ( ) GType lasso_samlp_request_get_type ( ) LassoNode* lasso_samlp_request_new ( ) None lasso_samlp_response_abstract_fill ( LassoSamlpResponseAbstract* response, const char* InResponseTo, const char* Recipient ) GType lasso_samlp_response_abstract_get_type ( ) GType lasso_samlp_response_get_type ( ) LassoNode* lasso_samlp_response_new ( ) GType lasso_samlp_status_code_get_type ( ) LassoSamlpStatusCode* lasso_samlp_status_code_new ( ) GType lasso_samlp_status_get_type ( ) LassoSamlpStatus* lasso_samlp_status_new ( ) lasso_error_t lasso_server_add_provider ( LassoServer* server, LassoProviderRole role, const gchar* metadata, const gchar* public_key, const gchar* ca_cert_chain ) lasso_error_t lasso_server_add_provider_from_buffer ( LassoServer* server, LassoProviderRole role, const gchar* metadata, const gchar* public_key, const gchar* ca_cert_chain ) None lasso_server_destroy ( LassoServer* server ) gchar* lasso_server_dump ( LassoServer* server ) LassoProvider* lasso_server_get_provider ( const LassoServer* server, const gchar* providerID ) GType lasso_server_get_type ( ) lasso_error_t lasso_server_load_affiliation ( LassoServer* server, const gchar* filename ) LassoServer* lasso_server_new ( const gchar* metadata, const gchar* private_key, const gchar* private_key_password, const gchar* certificate ) LassoServer* lasso_server_new_from_buffers ( const gchar* metadata, const gchar* private_key_content, const gchar* private_key_password, const gchar* certificate_content ) LassoServer* lasso_server_new_from_dump ( const gchar* dump ) lasso_error_t lasso_server_saml2_assertion_setup_signature ( LassoServer* server, LassoSaml2Assertion* saml2_assertion ) lasso_error_t lasso_server_set_encryption_private_key ( LassoServer* server, const gchar* filename_or_buffer ) lasso_error_t lasso_server_set_encryption_private_key_with_password ( LassoServer* server, const gchar* filename_or_buffer, const gchar* password ) lasso_error_t lasso_session_add_assertion ( LassoSession* session, const char* providerID, LassoNode* assertion ) None lasso_session_destroy ( LassoSession* session ) gchar* lasso_session_dump ( LassoSession* session ) LassoNode* lasso_session_get_assertion ( LassoSession* session, const gchar* providerID ) GList* lasso_session_get_assertions ( LassoSession* session, const char* provider_id ) gchar* lasso_session_get_provider_index ( LassoSession* session, gint index ) GType lasso_session_get_type ( ) gboolean lasso_session_is_empty ( LassoSession* session ) LassoSession* lasso_session_new ( ) LassoSession* lasso_session_new_from_dump ( const gchar* dump ) lasso_error_t lasso_session_remove_assertion ( LassoSession* session, const gchar* providerID ) None lasso_set_flag ( char* flag ) lasso_error_t lasso_shutdown ( ) const char* lasso_strerror ( int error_code ) lasso-2.8.2/abi/PaxHeaders/abi-2.2.910000644000000000000000000000013113766621500013667 xustar0029 mtime=1608196928.71889494 30 atime=1678098069.993489071 30 ctime=1678814319.929947161 lasso-2.8.2/abi/abi-2.2.910000644000175000017500000017167213766621500017156 0ustar00bdauvergnebdauvergne00000000000000LASSO_ASSERTION_QUERY_REQUEST_TYPE_ASSERTION_ID LASSO_ASSERTION_QUERY_REQUEST_TYPE_ATTRIBUTE LASSO_ASSERTION_QUERY_REQUEST_TYPE_AUTHN LASSO_ASSERTION_QUERY_REQUEST_TYPE_AUTHZ_DECISION LASSO_ASSERTION_QUERY_REQUEST_TYPE_UNSET LASSO_CHECK_VERSIONABI_COMPATIBLE LASSO_CHECK_VERSION_EXACT LASSO_CHECK_VERSION_NUMERIC LASSO_DATA_SERVICE_ERROR_CANNOT_ADD_ITEM LASSO_DATA_SERVICE_ERROR_UNREGISTERED_DST LASSO_DEFEDERATION_ERROR_MISSING_NAME_IDENTIFIER LASSO_DISCOVERY_ERROR_FAILED_TO_BUILD_ENDPOINT_REFERENCE LASSO_DISCOVERY_ERROR_MISSING_REQUESTED_SERVICE LASSO_DISCOVERY_ERROR_SVC_METADATA_ASSOCIATION_ADD_FAILED LASSO_DISCOVERY_ERROR_SVC_METADATA_REGISTER_FAILED LASSO_DST_ERROR_EMPTY_REQUEST LASSO_DST_ERROR_MALFORMED_QUERY LASSO_DST_ERROR_MISSING_SERVICE_DATA LASSO_DST_ERROR_MODIFY_FAILED LASSO_DST_ERROR_MODIFY_PARTIALLY_FAILED LASSO_DST_ERROR_NEW_DATA_MISSING LASSO_DST_ERROR_NO_DATA LASSO_DST_ERROR_QUERY_FAILED LASSO_DST_ERROR_QUERY_NOT_FOUND LASSO_DST_ERROR_QUERY_PARTIALLY_FAILED LASSO_DS_ERROR_CA_CERT_CHAIN_LOAD_FAILED LASSO_DS_ERROR_CERTIFICATE_LOAD_FAILED LASSO_DS_ERROR_CONTEXT_CREATION_FAILED LASSO_DS_ERROR_DECRYPTION_FAILED LASSO_DS_ERROR_DIGEST_COMPUTE_FAILED LASSO_DS_ERROR_ENCRYPTION_FAILED LASSO_DS_ERROR_INVALID_REFERENCE_FOR_SAML LASSO_DS_ERROR_INVALID_SIGALG LASSO_DS_ERROR_INVALID_SIGNATURE LASSO_DS_ERROR_KEYS_MNGR_CREATION_FAILED LASSO_DS_ERROR_KEYS_MNGR_INIT_FAILED LASSO_DS_ERROR_PRIVATE_KEY_LOAD_FAILED LASSO_DS_ERROR_PUBLIC_KEY_LOAD_FAILED LASSO_DS_ERROR_SIGNATURE_FAILED LASSO_DS_ERROR_SIGNATURE_NOT_FOUND LASSO_DS_ERROR_SIGNATURE_TEMPLATE_NOT_FOUND LASSO_DS_ERROR_SIGNATURE_TMPL_CREATION_FAILED LASSO_DS_ERROR_SIGNATURE_VERIFICATION_FAILED LASSO_DS_ERROR_TOO_MUCH_REFERENCES LASSO_DS_HREF LASSO_DS_PREFIX LASSO_DURATION_DAY LASSO_DURATION_HOUR LASSO_DURATION_MINUTE LASSO_DURATION_WEEK LASSO_ECP_HREF LASSO_ECP_PREFIX LASSO_ENCRYPTION_MODE_ASSERTION LASSO_ENCRYPTION_MODE_NAMEID LASSO_ENCRYPTION_MODE_NONE LASSO_ENCRYPTION_SYM_KEY_TYPE_3DES LASSO_ENCRYPTION_SYM_KEY_TYPE_AES_128 LASSO_ENCRYPTION_SYM_KEY_TYPE_AES_256 LASSO_ENCRYPTION_SYM_KEY_TYPE_DEFAULT LASSO_ERROR_CAST_FAILED LASSO_ERROR_OUT_OF_MEMORY LASSO_ERROR_UNDEFINED LASSO_ERROR_UNIMPLEMENTED LASSO_HTTP_METHOD_ANY LASSO_HTTP_METHOD_ARTIFACT_GET LASSO_HTTP_METHOD_ARTIFACT_POST LASSO_HTTP_METHOD_GET LASSO_HTTP_METHOD_IDP_INITIATED LASSO_HTTP_METHOD_LAST LASSO_HTTP_METHOD_NONE LASSO_HTTP_METHOD_PAOS LASSO_HTTP_METHOD_POST LASSO_HTTP_METHOD_REDIRECT LASSO_HTTP_METHOD_SOAP LASSO_IDWSF2_DISCOVERY_ERROR_DUPLICATE LASSO_IDWSF2_DISCOVERY_ERROR_FAILED LASSO_IDWSF2_DISCOVERY_ERROR_FORBIDDEN LASSO_IDWSF2_DISCOVERY_ERROR_LOGICAL_DUPLICATE LASSO_IDWSF2_DISCOVERY_ERROR_NOT_FOUND LASSO_IDWSF2_DISCOVERY_ERROR_NO_RESULTS LASSO_IDWSF2_DST_ERROR_DUPLICATE_ITEM LASSO_IDWSF2_DST_ERROR_ITEM_NOT_FOUND LASSO_IDWSF2_DST_ERROR_PARTIAL_FAILURE LASSO_IDWSF2_DST_ERROR_UNKNOWN_STATUS_CODE LASSO_LASSO_HREF LASSO_LASSO_PREFIX LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_INTERNET_PROTOCOL LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_INTERNET_PROTOCOL_PASSWORD LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_ONE_FACTOR_CONTRACT LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_ONE_FACTOR_UNREGISTERED LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_TWO_FACTOR_CONTRACT LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_TWO_FACTOR_UNREGISTERED LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PASSWORD LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PASSWORD_PROTECTED_TRANSPORT LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PREVIOUS_SESSION LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SMARTCARD LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SMARTCARD_PKI LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SOFTWARE_PKI LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_TIME_SYNC_TOKEN LASSO_LIB_AUTHN_CONTEXT_COMPARISON_BETTER LASSO_LIB_AUTHN_CONTEXT_COMPARISON_EXACT LASSO_LIB_AUTHN_CONTEXT_COMPARISON_MAXIMUM LASSO_LIB_AUTHN_CONTEXT_COMPARISON_MINIMUM LASSO_LIB_CONSENT_INAPPLICABLE LASSO_LIB_CONSENT_OBTAINED LASSO_LIB_CONSENT_OBTAINED_CURRENT_EXPLICIT LASSO_LIB_CONSENT_OBTAINED_CURRENT_IMPLICIT LASSO_LIB_CONSENT_OBTAINED_PRIOR LASSO_LIB_CONSENT_UNAVAILABLE LASSO_LIB_HREF LASSO_LIB_MAJOR_VERSION_N LASSO_LIB_MINOR_VERSION_N LASSO_LIB_NAMEID_POLICY_TYPE_ANY LASSO_LIB_NAMEID_POLICY_TYPE_FEDERATED LASSO_LIB_NAMEID_POLICY_TYPE_NONE LASSO_LIB_NAMEID_POLICY_TYPE_ONE_TIME LASSO_LIB_NAME_IDENTIFIER_FORMAT_ENCRYPTED LASSO_LIB_NAME_IDENTIFIER_FORMAT_ENTITYID LASSO_LIB_NAME_IDENTIFIER_FORMAT_FEDERATED LASSO_LIB_NAME_IDENTIFIER_FORMAT_ONE_TIME LASSO_LIB_PREFIX LASSO_LIB_PROTOCOL_PROFILE_BRWS_ART LASSO_LIB_PROTOCOL_PROFILE_BRWS_LECP LASSO_LIB_PROTOCOL_PROFILE_BRWS_POST LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_IDP_HTTP LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_IDP_SOAP LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_SP_SOAP LASSO_LIB_PROTOCOL_PROFILE_NIM_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_RNI_IDP_HTTP LASSO_LIB_PROTOCOL_PROFILE_RNI_IDP_SOAP LASSO_LIB_PROTOCOL_PROFILE_RNI_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_RNI_SP_SOAP LASSO_LIB_PROTOCOL_PROFILE_SLO_IDP_HTTP LASSO_LIB_PROTOCOL_PROFILE_SLO_IDP_SOAP LASSO_LIB_PROTOCOL_PROFILE_SLO_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_SLO_SP_SOAP LASSO_LIB_STATUS_CODE_FEDERATION_DOES_NOT_EXIST LASSO_LIB_STATUS_CODE_INVALID_ASSERTION_CONSUMER_SERVICE_INDEX LASSO_LIB_STATUS_CODE_INVALID_SIGNATURE LASSO_LIB_STATUS_CODE_NO_AUTHN_CONTEXT LASSO_LIB_STATUS_CODE_NO_AVAILABLEIDP LASSO_LIB_STATUS_CODE_NO_PASSIVE LASSO_LIB_STATUS_CODE_NO_SUPPORTEDIDP LASSO_LIB_STATUS_CODE_PROXY_COUNT_EXCEEDED LASSO_LIB_STATUS_CODE_UNKNOWN_PRINCIPAL LASSO_LIB_STATUS_CODE_UNSIGNED_AUTHN_REQUEST LASSO_LIB_STATUS_CODE_UNSUPPORTED_PROFILE LASSO_LOGIN_ERROR_ASSERTION_DOES_NOT_MATCH_REQUEST_ID LASSO_LOGIN_ERROR_ASSERTION_REPLAY LASSO_LOGIN_ERROR_CONSENT_NOT_OBTAINED LASSO_LOGIN_ERROR_FEDERATION_NOT_FOUND LASSO_LOGIN_ERROR_INVALID_NAMEIDPOLICY LASSO_LOGIN_ERROR_INVALID_SIGNATURE LASSO_LOGIN_ERROR_NO_DEFAULT_ENDPOINT LASSO_LOGIN_ERROR_REQUEST_DENIED LASSO_LOGIN_ERROR_STATUS_NOT_SUCCESS LASSO_LOGIN_ERROR_UNKNOWN_PRINCIPAL LASSO_LOGIN_ERROR_UNSIGNED_AUTHN_REQUEST LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_ART LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_LECP LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_POST LASSO_LOGIN_PROTOCOL_PROFILE_REDIRECT LASSO_LOGOUT_ERROR_FEDERATION_NOT_FOUND LASSO_LOGOUT_ERROR_REQUEST_DENIED LASSO_LOGOUT_ERROR_UNKNOWN_PRINCIPAL LASSO_LOGOUT_ERROR_UNSUPPORTED_PROFILE LASSO_MD_PROTOCOL_TYPE_ARTIFACT_RESOLUTION LASSO_MD_PROTOCOL_TYPE_ASSERTION_ID_REQUEST LASSO_MD_PROTOCOL_TYPE_FEDERATION_TERMINATION LASSO_MD_PROTOCOL_TYPE_MANAGE_NAME_ID LASSO_MD_PROTOCOL_TYPE_NAME_IDENTIFIER_MAPPING LASSO_MD_PROTOCOL_TYPE_REGISTER_NAME_IDENTIFIER LASSO_MD_PROTOCOL_TYPE_SINGLE_LOGOUT LASSO_MD_PROTOCOL_TYPE_SINGLE_SIGN_ON LASSO_MESSAGE_FORMAT_BASE64 LASSO_MESSAGE_FORMAT_ERROR LASSO_MESSAGE_FORMAT_QUERY LASSO_MESSAGE_FORMAT_SOAP LASSO_MESSAGE_FORMAT_UNKNOWN LASSO_MESSAGE_FORMAT_XML LASSO_MESSAGE_FORMAT_XSCHEMA_ERROR LASSO_METADATA_HREF LASSO_METADATA_PREFIX LASSO_NAME_IDENTIFIER_MAPPING_ERROR_FORBIDDEN_CALL_ON_THIS_SIDE LASSO_NAME_IDENTIFIER_MAPPING_ERROR_MISSING_TARGET_IDENTIFIER LASSO_NAME_IDENTIFIER_MAPPING_ERROR_MISSING_TARGET_NAMESPACE LASSO_PAOS_HREF LASSO_PAOS_PREFIX LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ LASSO_PARAM_ERROR_CHECK_FAILED LASSO_PARAM_ERROR_INVALID_VALUE LASSO_PARAM_ERROR_NON_INITIALIZED_OBJECT LASSO_PROFILE_ERROR_BAD_IDENTITY_DUMP LASSO_PROFILE_ERROR_BAD_SESSION_DUMP LASSO_PROFILE_ERROR_BUILDING_MESSAGE_FAILED LASSO_PROFILE_ERROR_BUILDING_QUERY_FAILED LASSO_PROFILE_ERROR_BUILDING_REQUEST_FAILED LASSO_PROFILE_ERROR_BUILDING_RESPONSE_FAILED LASSO_PROFILE_ERROR_CANNOT_FIND_A_PROVIDER LASSO_PROFILE_ERROR_CANNOT_VERIFY_SIGNATURE LASSO_PROFILE_ERROR_FEDERATION_NOT_FOUND LASSO_PROFILE_ERROR_IDENTITY_NOT_FOUND LASSO_PROFILE_ERROR_INVALID_ARTIFACT LASSO_PROFILE_ERROR_INVALID_HTTP_METHOD LASSO_PROFILE_ERROR_INVALID_ISSUER LASSO_PROFILE_ERROR_INVALID_MSG LASSO_PROFILE_ERROR_INVALID_POST_MSG LASSO_PROFILE_ERROR_INVALID_PROTOCOLPROFILE LASSO_PROFILE_ERROR_INVALID_QUERY LASSO_PROFILE_ERROR_INVALID_REQUEST LASSO_PROFILE_ERROR_INVALID_RESPONSE LASSO_PROFILE_ERROR_INVALID_SOAP_MSG LASSO_PROFILE_ERROR_MISSING_ARTIFACT LASSO_PROFILE_ERROR_MISSING_ASSERTION LASSO_PROFILE_ERROR_MISSING_ENCRYPTION_PRIVATE_KEY LASSO_PROFILE_ERROR_MISSING_ENDPOINT_REFERENCE LASSO_PROFILE_ERROR_MISSING_ENDPOINT_REFERENCE_ADDRESS LASSO_PROFILE_ERROR_MISSING_ISSUER LASSO_PROFILE_ERROR_MISSING_NAME_IDENTIFIER LASSO_PROFILE_ERROR_MISSING_REMOTE_PROVIDERID LASSO_PROFILE_ERROR_MISSING_REQUEST LASSO_PROFILE_ERROR_MISSING_RESOURCE_OFFERING LASSO_PROFILE_ERROR_MISSING_RESPONSE LASSO_PROFILE_ERROR_MISSING_SERVER LASSO_PROFILE_ERROR_MISSING_SERVICE_DESCRIPTION LASSO_PROFILE_ERROR_MISSING_SERVICE_INSTANCE LASSO_PROFILE_ERROR_MISSING_SERVICE_TYPE LASSO_PROFILE_ERROR_MISSING_STATUS_CODE LASSO_PROFILE_ERROR_MISSING_SUBJECT LASSO_PROFILE_ERROR_NAME_IDENTIFIER_NOT_FOUND LASSO_PROFILE_ERROR_RESPONSE_DOES_NOT_MATCH_REQUEST LASSO_PROFILE_ERROR_SESSION_NOT_FOUND LASSO_PROFILE_ERROR_STATUS_NOT_SUCCESS LASSO_PROFILE_ERROR_UNKNOWN_PROFILE_URL LASSO_PROFILE_ERROR_UNKNOWN_PROVIDER LASSO_PROFILE_ERROR_UNSUPPORTED_BINDING LASSO_PROFILE_ERROR_UNSUPPORTED_PROFILE LASSO_PROFILE_SIGNATURE_HINT_FORBID LASSO_PROFILE_SIGNATURE_HINT_FORCE LASSO_PROFILE_SIGNATURE_HINT_MAYBE LASSO_PROTOCOL_LIBERTY_1_0 LASSO_PROTOCOL_LIBERTY_1_1 LASSO_PROTOCOL_LIBERTY_1_2 LASSO_PROTOCOL_NONE LASSO_PROTOCOL_SAML_2_0 LASSO_PROVIDER_ERROR_MISSING_PUBLIC_KEY LASSO_PROVIDER_ROLE_BOTH LASSO_PROVIDER_ROLE_IDP LASSO_PROVIDER_ROLE_NONE LASSO_PROVIDER_ROLE_SP LASSO_PYTHON_HREF LASSO_REGISTRY_ERROR_KEY_EXISTS LASSO_REQUEST_TYPE_DEFEDERATION LASSO_REQUEST_TYPE_DISCO_MODIFY LASSO_REQUEST_TYPE_DISCO_QUERY LASSO_REQUEST_TYPE_DST_MODIFY LASSO_REQUEST_TYPE_DST_QUERY LASSO_REQUEST_TYPE_IDWSF2_DISCO_QUERY LASSO_REQUEST_TYPE_IDWSF2_DISCO_SVCMD_ASSOCIATION_ADD LASSO_REQUEST_TYPE_IDWSF2_DISCO_SVCMD_REGISTER LASSO_REQUEST_TYPE_INVALID LASSO_REQUEST_TYPE_LECP LASSO_REQUEST_TYPE_LOGIN LASSO_REQUEST_TYPE_LOGOUT LASSO_REQUEST_TYPE_NAME_IDENTIFIER_MAPPING LASSO_REQUEST_TYPE_NAME_ID_MANAGEMENT LASSO_REQUEST_TYPE_NAME_REGISTRATION LASSO_REQUEST_TYPE_SASL_REQUEST LASSO_SAML2_ASSERTION_HREF LASSO_SAML2_ASSERTION_INDETERMINATE LASSO_SAML2_ASSERTION_INVALID LASSO_SAML2_ASSERTION_PREFIX LASSO_SAML2_ASSERTION_VALID LASSO_SAML2_ATTRIBUTE_NAME_EPR LASSO_SAML2_ATTRIBUTE_NAME_FORMAT_URI LASSO_SAML2_AUTHN_CONTEXT_AUTHENTICATED_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_INTERNET_PROTOCOL LASSO_SAML2_AUTHN_CONTEXT_INTERNET_PROTOCOL_PASSWORD LASSO_SAML2_AUTHN_CONTEXT_KERBEROS LASSO_SAML2_AUTHN_CONTEXT_MOBILE_ONE_FACTOR_CONTRACT LASSO_SAML2_AUTHN_CONTEXT_MOBILE_ONE_FACTOR_UNREGISTERED LASSO_SAML2_AUTHN_CONTEXT_MOBILE_TWO_FACTOR_CONTRACT LASSO_SAML2_AUTHN_CONTEXT_MOBILE_TWO_FACTOR_UNREGISTERED LASSO_SAML2_AUTHN_CONTEXT_NOMAD_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_PASSWORD LASSO_SAML2_AUTHN_CONTEXT_PASSWORD_PROTECTED_TRANSPORT LASSO_SAML2_AUTHN_CONTEXT_PERSONALIZED_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_PGP LASSO_SAML2_AUTHN_CONTEXT_PREVIOUS_SESSION LASSO_SAML2_AUTHN_CONTEXT_SECURE_REMOTE_PASSWORD LASSO_SAML2_AUTHN_CONTEXT_SMARTCARD LASSO_SAML2_AUTHN_CONTEXT_SMARTCARD_PKI LASSO_SAML2_AUTHN_CONTEXT_SOFTWARE_PKI LASSO_SAML2_AUTHN_CONTEXT_SPKI LASSO_SAML2_AUTHN_CONTEXT_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_TIME_SYNC_TOKEN LASSO_SAML2_AUTHN_CONTEXT_TLS_CLIENT LASSO_SAML2_AUTHN_CONTEXT_UNSPECIFIED LASSO_SAML2_AUTHN_CONTEXT_X509 LASSO_SAML2_AUTHN_CONTEXT_XMLDSIG LASSO_SAML2_CONFIRMATION_METHOD_BEARER LASSO_SAML2_CONFIRMATION_METHOD_HOLDER_OF_KEY LASSO_SAML2_CONSENT_EXPLICIT LASSO_SAML2_CONSENT_IMPLICIT LASSO_SAML2_CONSENT_INAPPLICABLE LASSO_SAML2_CONSENT_OBTAINED LASSO_SAML2_CONSENT_PRIOR LASSO_SAML2_CONSENT_UNAVAILABLE LASSO_SAML2_DEFLATE_ENCODING LASSO_SAML2_METADATA_BINDING_ARTIFACT LASSO_SAML2_METADATA_BINDING_PAOS LASSO_SAML2_METADATA_BINDING_POST LASSO_SAML2_METADATA_BINDING_REDIRECT LASSO_SAML2_METADATA_BINDING_SOAP LASSO_SAML2_METADATA_HREF LASSO_SAML2_NAME_IDENTIFIER_FORMAT_EMAIL LASSO_SAML2_NAME_IDENTIFIER_FORMAT_ENCRYPTED LASSO_SAML2_NAME_IDENTIFIER_FORMAT_ENTITY LASSO_SAML2_NAME_IDENTIFIER_FORMAT_KERBEROS LASSO_SAML2_NAME_IDENTIFIER_FORMAT_PERSISTENT LASSO_SAML2_NAME_IDENTIFIER_FORMAT_TRANSIENT LASSO_SAML2_NAME_IDENTIFIER_FORMAT_UNSPECIFIED LASSO_SAML2_NAME_IDENTIFIER_FORMAT_WINDOWS LASSO_SAML2_NAME_IDENTIFIER_FORMAT_X509 LASSO_SAML2_PROTOCOL_HREF LASSO_SAML2_PROTOCOL_PREFIX LASSO_SAML2_STATUS_CODE_AUTHN_FAILED LASSO_SAML2_STATUS_CODE_INVALID_ATTR_NAME LASSO_SAML2_STATUS_CODE_INVALID_NAME_ID_POLICY LASSO_SAML2_STATUS_CODE_NO_AUTHN_CONTEXT LASSO_SAML2_STATUS_CODE_NO_AVAILABLE_IDP LASSO_SAML2_STATUS_CODE_NO_PASSIVE LASSO_SAML2_STATUS_CODE_NO_SUPPORTED_IDP LASSO_SAML2_STATUS_CODE_PARTIAL_LOGOUT LASSO_SAML2_STATUS_CODE_PROXY_COUNT_EXCEEDED LASSO_SAML2_STATUS_CODE_REQUESTER LASSO_SAML2_STATUS_CODE_REQUEST_DENIED LASSO_SAML2_STATUS_CODE_REQUEST_UNSUPPORTED LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_DEPRECATED LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_TOO_HIGH LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_TOO_LOW LASSO_SAML2_STATUS_CODE_RESOURCE_NOT_RECOGNIZED LASSO_SAML2_STATUS_CODE_RESPONDER LASSO_SAML2_STATUS_CODE_SUCCESS LASSO_SAML2_STATUS_CODE_TOO_MANY_RESPONSES LASSO_SAML2_STATUS_CODE_UNKNOWN_ATTR_PROFILE LASSO_SAML2_STATUS_CODE_UNKNOWN_PRINCIPAL LASSO_SAML2_STATUS_CODE_UNSUPPORTED_BINDING LASSO_SAML2_STATUS_CODE_VERSION_MISMATCH LASSO_SAML_ASSERTION_HREF LASSO_SAML_ASSERTION_PREFIX LASSO_SAML_AUTHENTICATION_METHODS_PKI LASSO_SAML_AUTHENTICATION_METHOD_HARDWARE_TOKEN LASSO_SAML_AUTHENTICATION_METHOD_KERBEROS LASSO_SAML_AUTHENTICATION_METHOD_LIBERTY LASSO_SAML_AUTHENTICATION_METHOD_PASSWORD LASSO_SAML_AUTHENTICATION_METHOD_PGP LASSO_SAML_AUTHENTICATION_METHOD_SECURE_REMOTE_PASSWORD LASSO_SAML_AUTHENTICATION_METHOD_SMARTCARD_PKI LASSO_SAML_AUTHENTICATION_METHOD_SOFTWARE_PKI LASSO_SAML_AUTHENTICATION_METHOD_UNSPECIFIED LASSO_SAML_AUTHENTICATION_METHOD_XKMS LASSO_SAML_AUTHENTICATION_METHOD_XMLD_SIG LASSO_SAML_CONFIRMATION_METHOD_ARTIFACT LASSO_SAML_CONFIRMATION_METHOD_ARTIFACT01 LASSO_SAML_CONFIRMATION_METHOD_BEARER LASSO_SAML_CONFIRMATION_METHOD_HOLDER_OF_KEY LASSO_SAML_CONFIRMATION_METHOD_SENDER_VOUCHES LASSO_SAML_MAJOR_VERSION_N LASSO_SAML_MINOR_VERSION_N LASSO_SAML_PROTOCOL_HREF LASSO_SAML_PROTOCOL_PREFIX LASSO_SAML_STATUS_CODE_REQUESTER LASSO_SAML_STATUS_CODE_REQUEST_DENIED LASSO_SAML_STATUS_CODE_REQUEST_VERSION_DEPRECATED LASSO_SAML_STATUS_CODE_REQUEST_VERSION_TOO_HIGH LASSO_SAML_STATUS_CODE_REQUEST_VERSION_TOO_LOW LASSO_SAML_STATUS_CODE_RESOURCE_NOT_RECOGNIZED LASSO_SAML_STATUS_CODE_RESPONDER LASSO_SAML_STATUS_CODE_SUCCESS LASSO_SAML_STATUS_CODE_TOO_MANY_RESPONSES LASSO_SAML_STATUS_CODE_VERSION_MISMATCH LASSO_SERVER_ERROR_ADD_PROVIDER_FAILED LASSO_SERVER_ERROR_ADD_PROVIDER_PROTOCOL_MISMATCH LASSO_SERVER_ERROR_INVALID_XML LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND LASSO_SERVER_ERROR_SET_ENCRYPTION_PRIVATE_KEY_FAILED LASSO_SIGNATURE_METHOD_DSA_SHA1 LASSO_SIGNATURE_METHOD_RSA_SHA1 LASSO_SIGNATURE_TYPE_NONE LASSO_SIGNATURE_TYPE_SIMPLE LASSO_SIGNATURE_TYPE_WITHX509 LASSO_SOAP_ENV_ACTOR LASSO_SOAP_ENV_HREF LASSO_SOAP_ENV_PREFIX LASSO_SOAP_ERROR_MISSING_BODY LASSO_SOAP_ERROR_MISSING_ENVELOPE LASSO_SOAP_ERROR_MISSING_HEADER LASSO_SOAP_ERROR_MISSING_SOAP_FAULT_DETAIL LASSO_SOAP_ERROR_REDIRECT_REQUEST_FAULT LASSO_SOAP_FAULT_CODE_CLIENT LASSO_SOAP_FAULT_CODE_MUST_UNDERSTAND LASSO_SOAP_FAULT_CODE_SERVER LASSO_SOAP_FAULT_CODE_VERSION_MISMATCH LASSO_SOAP_FAULT_REDIRECT_REQUEST LASSO_WSF_ENABLED LASSO_WSF_PROFILE_ERROR_INVALID_OR_MISSING_REFERENCE_TO_MESSAGE_ID LASSO_WSF_PROFILE_ERROR_MISSING_ASSERTION_ID LASSO_WSF_PROFILE_ERROR_MISSING_CORRELATION LASSO_WSF_PROFILE_ERROR_MISSING_CREDENTIAL_REF LASSO_WSF_PROFILE_ERROR_MISSING_DESCRIPTION LASSO_WSF_PROFILE_ERROR_MISSING_ENDPOINT LASSO_WSF_PROFILE_ERROR_MISSING_RESOURCE_ID LASSO_WSF_PROFILE_ERROR_MISSING_SECURITY LASSO_WSF_PROFILE_ERROR_REDIRECT_REQUEST LASSO_WSF_PROFILE_ERROR_SECURITY_MECHANISM_CHECK_FAILED LASSO_WSF_PROFILE_ERROR_SERVER_INTERACTION_REQUIRED LASSO_WSF_PROFILE_ERROR_SERVER_INTERACTION_REQUIRED_FOR_DATA LASSO_WSF_PROFILE_ERROR_SOAP_FAULT LASSO_WSF_PROFILE_ERROR_UNKNOWN_STATUS_CODE LASSO_WSF_PROFILE_ERROR_UNSUPPORTED_SECURITY_MECHANISM LASSO_WSSEC_ERROR_BAD_PASSWORD LASSO_WSSEC_ERROR_MISSING_SECURITY_TOKEN LASSO_XML_ERROR_ATTR_NOT_FOUND LASSO_XML_ERROR_ATTR_VALUE_NOT_FOUND LASSO_XML_ERROR_INVALID_FILE LASSO_XML_ERROR_MISSING_NAMESPACE LASSO_XML_ERROR_NODE_CONTENT_NOT_FOUND LASSO_XML_ERROR_NODE_NOT_FOUND LASSO_XML_ERROR_OBJECT_CONSTRUCTION_FAILED LASSO_XSI_HREF LASSO_XSI_PREFIX struct LassoAssertionQuery { LassoAssertionQueryPrivate* private_data } LassoAssertionQueryRequestType LassoCheckVersionMode struct LassoDefederation { } struct LassoDsKeyInfo { LassoDsKeyValue* KeyValue } struct LassoDsKeyValue { LassoDsRsaKeyValue* RSAKeyValue } struct LassoDsRsaKeyValue { char* Modulus, char* Exponent } struct LassoEcp { gchar* assertionConsumerURL, LassoEcpPrivate* private_data } LassoEncryptionMode LassoEncryptionSymKeyType struct LassoFederation { gchar* remote_providerID, LassoNode* local_nameIdentifier, LassoNode* remote_nameIdentifier, LassoFederationPrivate* private_data } LassoHttpMethod struct LassoIdentity { GHashTable* federations, gboolean is_dirty, LassoIdentityPrivate* private_data } struct LassoLecp { LassoLibAuthnRequestEnvelope* authnRequestEnvelope, LassoLibAuthnResponseEnvelope* authnResponseEnvelope, char* assertionConsumerServiceURL } struct LassoLibAssertion { char* InResponseTo } struct LassoLibAuthenticationStatement { LassoLibAuthnContext* AuthnContext, char* ReauthenticateOnOrAfter, char* SessionIndex } struct LassoLibAuthnContext { char* AuthnContextClassRef, char* AuthnContextStatementRef } struct LassoLibAuthnRequest { GList* Extension, char* ProviderID, char* AffiliationID, char* NameIDPolicy, gboolean ForceAuthn, gboolean IsPassive, char* ProtocolProfile, char* AssertionConsumerServiceID, LassoLibRequestAuthnContext* RequestAuthnContext, char* RelayState, LassoLibScoping* Scoping, char* consent } struct LassoLibAuthnRequestEnvelope { GList* Extension, LassoLibAuthnRequest* AuthnRequest, char* ProviderID, char* ProviderName, char* AssertionConsumerServiceURL, LassoLibIDPList* IDPList, gboolean IsPassive } struct LassoLibAuthnResponse { GList* Extension, char* ProviderID, char* RelayState, char* consent } struct LassoLibAuthnResponseEnvelope { GList* Extension, LassoLibAuthnResponse* AuthnResponse, char* AssertionConsumerServiceURL } struct LassoLibFederationTerminationNotification { GList* Extension, char* ProviderID, LassoSamlNameIdentifier* NameIdentifier, char* consent, char* RelayState } struct LassoLibIDPEntries { GList* IDPEntry } struct LassoLibIDPEntry { char* ProviderID, char* ProviderName, char* Loc } struct LassoLibIDPList { LassoLibIDPEntries* IDPEntries, char* GetComplete } struct LassoLibLogoutRequest { GList* Extension, char* ProviderID, LassoSamlNameIdentifier* NameIdentifier, char* SessionIndex, char* RelayState, char* consent, char* NotOnOrAfter } struct LassoLibLogoutResponse { } struct LassoLibNameIdentifierMappingRequest { GList* Extension, char* ProviderID, LassoSamlNameIdentifier* NameIdentifier, char* TargetNamespace, char* consent } struct LassoLibNameIdentifierMappingResponse { GList* Extension, char* ProviderID, LassoSamlpStatus* Status, LassoSamlNameIdentifier* NameIdentifier } struct LassoLibRegisterNameIdentifierRequest { GList* Extension, char* ProviderID, LassoSamlNameIdentifier* IDPProvidedNameIdentifier, LassoSamlNameIdentifier* SPProvidedNameIdentifier, LassoSamlNameIdentifier* OldProvidedNameIdentifier, char* RelayState } struct LassoLibRegisterNameIdentifierResponse { } struct LassoLibRequestAuthnContext { GList* AuthnContextClassRef, GList* AuthnContextStatementRef, char* AuthnContextComparison } struct LassoLibScoping { int ProxyCount, LassoLibIDPList* IDPList } struct LassoLibStatusResponse { GList* Extension, char* ProviderID, LassoSamlpStatus* Status, char* RelayState } struct LassoLibSubject { LassoSamlNameIdentifier* IDPProvidedNameIdentifier } struct LassoLogin { LassoLoginProtocolProfile protocolProfile, gchar* assertionArtifact, LassoSamlAssertion* assertion, gchar* nameIDPolicy, LassoHttpMethod http_method, LassoLoginPrivate* private_data } LassoLoginProtocolProfile struct LassoLogout { LassoNode* initial_request, LassoNode* initial_response, gchar* initial_remote_providerID, gint providerID_index, LassoHttpMethod initial_http_request_method, LassoLogoutPrivate* private_data } LassoMdProtocolType LassoMessageFormat struct LassoMiscTextNode { char* content, char* name, char* ns_href, char* ns_prefix, gboolean text_child } struct LassoNameIdManagement { } struct LassoNameIdentifierMapping { gchar* targetNameIdentifier } struct LassoNameRegistration { LassoSamlNameIdentifier* oldNameIdentifier } struct LassoNode { } struct LassoProfile { LassoServer* server, LassoNode* request, LassoNode* response, LassoNode* nameIdentifier, gchar* remote_providerID, gchar* msg_url, gchar* msg_body, gchar* msg_relayState, LassoIdentity* identity, LassoSession* session, LassoHttpMethod http_request_method, gint signature_status, LassoProfilePrivate* private_data } LassoProfileSignatureHint LassoProtocolConformance struct LassoProvider { gchar* ProviderID, LassoProviderRole role, char* metadata_filename, gchar* public_key, gchar* ca_cert_chain, LassoProviderPrivate* private_data } LassoProviderRole LassoRequestType struct LassoSaml2Action { char* content, char* Namespace } struct LassoSaml2Advice { GList* AssertionIDRef, GList* AssertionURIRef, GList* Assertion, GList* EncryptedAssertion } struct LassoSaml2Assertion { LassoSaml2NameID* Issuer, LassoSaml2Subject* Subject, LassoSaml2Conditions* Conditions, LassoSaml2Advice* Advice, GList* Statement, GList* AuthnStatement, GList* AuthzDecisionStatement, GList* AttributeStatement, char* Version, char* ID, char* IssueInstant, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file, gboolean encryption_activated, char* encryption_public_key_str, LassoEncryptionSymKeyType encryption_sym_key_type } LassoSaml2AssertionValidationState struct LassoSaml2Attribute { GList* AttributeValue, char* Name, char* NameFormat, char* FriendlyName } struct LassoSaml2AttributeStatement { GList* Attribute, GList* EncryptedAttribute } struct LassoSaml2AttributeValue { GList* any } struct LassoSaml2AudienceRestriction { char* Audience } struct LassoSaml2AuthnContext { char* AuthnContextClassRef, char* AuthnContextDeclRef, char* AuthenticatingAuthority } struct LassoSaml2AuthnStatement { LassoSaml2SubjectLocality* SubjectLocality, LassoSaml2AuthnContext* AuthnContext, char* AuthnInstant, char* SessionIndex, char* SessionNotOnOrAfter } struct LassoSaml2AuthzDecisionStatement { LassoSaml2Action* Action, LassoSaml2Evidence* Evidence, char* Resource, char* Decision } struct LassoSaml2BaseIDAbstract { char* NameQualifier, char* SPNameQualifier } struct LassoSaml2ConditionAbstract { } struct LassoSaml2Conditions { GList* Condition, GList* AudienceRestriction, GList* OneTimeUse, GList* ProxyRestriction, char* NotBefore, char* NotOnOrAfter } struct LassoSaml2EncryptedElement { xmlNode* EncryptedData, GList* EncryptedKey, LassoNode* original_data } struct LassoSaml2Evidence { GList* AssertionIDRef, GList* AssertionURIRef, GList* Assertion, GList* EncryptedAssertion } struct LassoSaml2KeyInfoConfirmationData { } struct LassoSaml2NameID { char* content, char* Format, char* SPProvidedID, char* NameQualifier, char* SPNameQualifier } struct LassoSaml2OneTimeUse { } struct LassoSaml2ProxyRestriction { char* Audience, char* Count } struct LassoSaml2StatementAbstract { } struct LassoSaml2Subject { LassoSaml2BaseIDAbstract* BaseID, LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, LassoSaml2SubjectConfirmation* SubjectConfirmation } struct LassoSaml2SubjectConfirmation { LassoSaml2BaseIDAbstract* BaseID, LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, LassoSaml2SubjectConfirmationData* SubjectConfirmationData, char* Method } struct LassoSaml2SubjectConfirmationData { char* NotBefore, char* NotOnOrAfter, char* Recipient, char* InResponseTo, char* Address } struct LassoSaml2SubjectLocality { char* Address, char* DNSName } struct LassoSamlAdvice { GList* AssertionIDReference, LassoNode* Assertion } struct LassoSamlAssertion { LassoSamlConditions* Conditions, LassoSamlAdvice* Advice, LassoSamlSubjectStatement* SubjectStatement, LassoSamlAuthenticationStatement* AuthenticationStatement, LassoSamlAttributeStatement* AttributeStatement, int MajorVersion, int MinorVersion, char* AssertionID, char* Issuer, char* IssueInstant, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlAttribute { gchar* attributeName, gchar* attributeNameSpace, GList* AttributeValue } struct LassoSamlAttributeDesignator { char* AttributeName, char* AttributeNamespace } struct LassoSamlAttributeStatement { GList* Attribute } struct LassoSamlAttributeValue { GList* any } struct LassoSamlAudienceRestrictionCondition { GList* Audience } struct LassoSamlAuthenticationStatement { LassoSamlSubjectLocality* SubjectLocality, GList* AuthorityBinding, char* AuthenticationMethod, char* AuthenticationInstant } struct LassoSamlAuthorityBinding { char* AuthorityKind, char* Location, char* Binding } struct LassoSamlConditionAbstract { } struct LassoSamlConditions { GList* Condition, GList* AudienceRestrictionCondition, char* NotBefore, char* NotOnOrAfter } struct LassoSamlNameIdentifier { char* NameQualifier, char* Format, char* content } struct LassoSamlStatementAbstract { } struct LassoSamlSubject { LassoSamlNameIdentifier* NameIdentifier, LassoSamlSubjectConfirmation* SubjectConfirmation, LassoSaml2EncryptedElement* EncryptedNameIdentifier } struct LassoSamlSubjectConfirmation { GList* ConfirmationMethod, char* SubjectConfirmationData, LassoDsKeyInfo* KeyInfo } struct LassoSamlSubjectLocality { char* IPAddress, char* DNSAddress } struct LassoSamlSubjectStatement { } struct LassoSamlSubjectStatementAbstract { LassoSamlSubject* Subject } struct LassoSamlp2ArtifactResolve { char* Artifact } struct LassoSamlp2ArtifactResponse { LassoNode* any } struct LassoSamlp2AssertionIDRequest { char* AssertionIDRef } struct LassoSamlp2AttributeQuery { GList* Attribute } struct LassoSamlp2AuthnQuery { LassoSamlp2RequestedAuthnContext* RequestedAuthnContext, char* SessionIndex } struct LassoSamlp2AuthnRequest { LassoSaml2Subject* Subject, LassoSamlp2NameIDPolicy* NameIDPolicy, LassoSaml2Conditions* Conditions, LassoSamlp2RequestedAuthnContext* RequestedAuthnContext, LassoSamlp2Scoping* Scoping, gboolean ForceAuthn, gboolean IsPassive, char* ProtocolBinding, int AssertionConsumerServiceIndex, char* AssertionConsumerServiceURL, int AttributeConsumingServiceIndex, char* ProviderName, G_GNUC_DEPRECATED char } struct LassoSamlp2AuthzDecisionQuery { LassoSaml2Action* Action, LassoSaml2Evidence* Evidence, char* Resource } struct LassoSamlp2Extensions { } struct LassoSamlp2IDPEntry { char* ProviderID, char* Name, char* Loc } struct LassoSamlp2IDPList { LassoSamlp2IDPEntry* IDPEntry, char* GetComplete } struct LassoSamlp2LogoutRequest { LassoSaml2BaseIDAbstract* BaseID, LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, char* SessionIndex, char* Reason, char* NotOnOrAfter, G_GNUC_DEPRECATED char } struct LassoSamlp2LogoutResponse { G_GNUC_DEPRECATED char } struct LassoSamlp2ManageNameIDRequest { LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, char* NewID, LassoSaml2EncryptedElement* NewEncryptedID, LassoSamlp2Terminate* Terminate } struct LassoSamlp2ManageNameIDResponse { } struct LassoSamlp2NameIDMappingRequest { LassoSaml2BaseIDAbstract* BaseID, LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, LassoSamlp2NameIDPolicy* NameIDPolicy } struct LassoSamlp2NameIDMappingResponse { LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID } struct LassoSamlp2NameIDPolicy { char* Format, char* SPNameQualifier, gboolean AllowCreate } struct LassoSamlp2RequestAbstract { LassoSaml2NameID* Issuer, LassoSamlp2Extensions* Extensions, char* ID, char* Version, char* IssueInstant, char* Destination, char* Consent, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlp2RequestedAuthnContext { GList* AuthnContextClassRef, GList* AuthnContextDeclRef, char* Comparison } struct LassoSamlp2Response { GList* Assertion, GList* EncryptedAssertion } struct LassoSamlp2Scoping { LassoSamlp2IDPList* IDPList, char* RequesterID, char* ProxyCount } struct LassoSamlp2Status { LassoSamlp2StatusCode* StatusCode, char* StatusMessage, LassoSamlp2StatusDetail* StatusDetail } struct LassoSamlp2StatusCode { LassoSamlp2StatusCode* StatusCode, char* Value } struct LassoSamlp2StatusDetail { } struct LassoSamlp2StatusResponse { LassoSaml2NameID* Issuer, LassoSamlp2Extensions* Extensions, LassoSamlp2Status* Status, char* ID, char* InResponseTo, char* Version, char* IssueInstant, char* Destination, char* Consent, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlp2SubjectQueryAbstract { LassoSaml2Subject* Subject } struct LassoSamlp2Terminate { } struct LassoSamlpRequest { char* AssertionArtifact } struct LassoSamlpRequestAbstract { GList* RespondWith, char* RequestID, int MajorVersion, int MinorVersion, char* IssueInstant, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlpResponse { LassoSamlpStatus* Status, GList* Assertion } struct LassoSamlpResponseAbstract { char* ResponseID, char* InResponseTo, int MajorVersion, int MinorVersion, char* IssueInstant, char* Recipient, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlpStatus { LassoSamlpStatusCode* StatusCode, char* StatusMessage } struct LassoSamlpStatusCode { LassoSamlpStatusCode* StatusCode, char* Value } struct LassoServer { GHashTable* providers, GHashTable* services, gchar* private_key, gchar* private_key_password, gchar* certificate, LassoSignatureMethod signature_method, LassoServerPrivate* private_data } struct LassoSession { GHashTable* assertions, gboolean is_dirty, LassoSessionPrivate* private_data } LassoSignatureMethod LassoSignatureType gint lasso_assertion_query_build_request_msg ( LassoAssertionQuery* assertion_query ) int lasso_assertion_query_build_response_msg ( LassoAssertionQuery* assertion_query ) None lasso_assertion_query_destroy ( LassoAssertionQuery* assertion_query ) GType lasso_assertion_query_get_type ( ) gint lasso_assertion_query_init_request ( LassoAssertionQuery* assertion_query, char* remote_provider_id, LassoHttpMethod http_method, LassoAssertionQueryRequestType query_request_type ) LassoAssertionQuery* lasso_assertion_query_new ( LassoServer* server ) gint lasso_assertion_query_process_request_msg ( LassoAssertionQuery* assertion_query, gchar* request_msg ) gint lasso_assertion_query_process_response_msg ( LassoAssertionQuery* assertion_query, gchar* response_msg ) gint lasso_assertion_query_validate_request ( LassoAssertionQuery* assertion_query ) int lasso_check_version ( int major, int minor, int subminor, LassoCheckVersionMode mode ) gint lasso_defederation_build_notification_msg ( LassoDefederation* defederation ) None lasso_defederation_destroy ( LassoDefederation* defederation ) GType lasso_defederation_get_type ( ) gint lasso_defederation_init_notification ( LassoDefederation* defederation, gchar* remote_providerID, LassoHttpMethod http_method ) LassoDefederation* lasso_defederation_new ( LassoServer* server ) gint lasso_defederation_process_notification_msg ( LassoDefederation* defederation, gchar* notification_msg ) gint lasso_defederation_validate_notification ( LassoDefederation* defederation ) GType lasso_ds_key_info_get_type ( ) LassoDsKeyInfo* lasso_ds_key_info_new ( ) GType lasso_ds_key_value_get_type ( ) LassoDsKeyValue* lasso_ds_key_value_new ( ) GType lasso_ds_rsa_key_value_get_type ( ) LassoDsRsaKeyValue* lasso_ds_rsa_key_value_new ( ) None lasso_ecp_destroy ( LassoEcp* ecp ) GType lasso_ecp_get_type ( ) LassoEcp* lasso_ecp_new ( LassoServer* server ) int lasso_ecp_process_authn_request_msg ( LassoEcp* ecp, const char* authn_request_msg ) int lasso_ecp_process_response_msg ( LassoEcp* ecp, const char* response_msg ) None lasso_federation_build_local_name_identifier ( LassoFederation* federation, const gchar* nameQualifier, const gchar* format, const gchar* content ) None lasso_federation_destroy ( LassoFederation* federation ) GType lasso_federation_get_type ( ) LassoFederation* lasso_federation_new ( gchar* remote_providerID ) gboolean lasso_federation_verify_name_identifier ( LassoFederation* federation, LassoNode* name_identifier ) char* lasso_get_prefix_for_dst_service_href ( const char* href ) gchar* lasso_get_prefix_for_idwsf2_dst_service_href ( const gchar* href ) None lasso_identity_destroy ( LassoIdentity* identity ) gchar* lasso_identity_dump ( LassoIdentity* identity ) LassoFederation* lasso_identity_get_federation ( LassoIdentity* identity, const char* providerID ) GType lasso_identity_get_type ( ) LassoIdentity* lasso_identity_new ( ) LassoIdentity* lasso_identity_new_from_dump ( const gchar* dump ) int lasso_init ( ) int lasso_lecp_build_authn_request_envelope_msg ( LassoLecp* lecp ) int lasso_lecp_build_authn_request_msg ( LassoLecp* lecp ) int lasso_lecp_build_authn_response_envelope_msg ( LassoLecp* lecp ) int lasso_lecp_build_authn_response_msg ( LassoLecp* lecp ) None lasso_lecp_destroy ( LassoLecp* lecp ) GType lasso_lecp_get_type ( ) int lasso_lecp_init_authn_request ( LassoLecp* lecp, const char* remote_providerID ) LassoLecp* lasso_lecp_new ( LassoServer* server ) int lasso_lecp_process_authn_request_envelope_msg ( LassoLecp* lecp, const char* request_msg ) int lasso_lecp_process_authn_request_msg ( LassoLecp* lecp, const char* authn_request_msg ) int lasso_lecp_process_authn_response_envelope_msg ( LassoLecp* lecp, const char* response_msg ) GType lasso_lib_assertion_get_type ( ) LassoLibAssertion* lasso_lib_assertion_new ( ) LassoLibAssertion* lasso_lib_assertion_new_full ( const char* issuer, const char* requestID, const char* audience, const char* notBefore, const char* notOnOrAfter ) GType lasso_lib_authentication_statement_get_type ( ) LassoLibAuthenticationStatement* lasso_lib_authentication_statement_new ( ) LassoLibAuthenticationStatement* lasso_lib_authentication_statement_new_full ( const char* authenticationMethod, const char* authenticationInstant, const char* reauthenticateOnOrAfter, LassoSamlNameIdentifier* sp_identifier, LassoSamlNameIdentifier* idp_identifier ) GType lasso_lib_authn_context_get_type ( ) LassoNode* lasso_lib_authn_context_new ( ) GType lasso_lib_authn_request_envelope_get_type ( ) LassoLibAuthnRequestEnvelope* lasso_lib_authn_request_envelope_new ( ) LassoLibAuthnRequestEnvelope* lasso_lib_authn_request_envelope_new_full ( LassoLibAuthnRequest* authnRequest, char* providerID, char* assertionConsumerServiceURL ) GType lasso_lib_authn_request_get_type ( ) LassoLibAuthnRequest* lasso_lib_authn_request_new ( ) GType lasso_lib_authn_response_envelope_get_type ( ) LassoLibAuthnResponseEnvelope* lasso_lib_authn_response_envelope_new ( LassoLibAuthnResponse* response, char* assertionConsumerServiceURL ) GType lasso_lib_authn_response_get_type ( ) LassoNode* lasso_lib_authn_response_new ( char* providerID, LassoLibAuthnRequest* request ) GType lasso_lib_federation_termination_notification_get_type ( ) LassoNode* lasso_lib_federation_termination_notification_new ( ) LassoNode* lasso_lib_federation_termination_notification_new_full ( char* providerID, LassoSamlNameIdentifier* nameIdentifier, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_idp_entries_get_type ( ) LassoNode* lasso_lib_idp_entries_new ( ) GType lasso_lib_idp_entry_get_type ( ) LassoNode* lasso_lib_idp_entry_new ( ) GType lasso_lib_idp_list_get_type ( ) LassoNode* lasso_lib_idp_list_new ( ) GType lasso_lib_logout_request_get_type ( ) LassoNode* lasso_lib_logout_request_new ( ) LassoNode* lasso_lib_logout_request_new_full ( char* providerID, LassoSamlNameIdentifier* nameIdentifier, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_logout_response_get_type ( ) LassoNode* lasso_lib_logout_response_new ( ) LassoNode* lasso_lib_logout_response_new_full ( char* providerID, const char* statusCodeValue, LassoLibLogoutRequest* request, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_name_identifier_mapping_request_get_type ( ) LassoNode* lasso_lib_name_identifier_mapping_request_new ( ) LassoNode* lasso_lib_name_identifier_mapping_request_new_full ( char* providerID, LassoSamlNameIdentifier* nameIdentifier, const char* targetNamespace, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_name_identifier_mapping_response_get_type ( ) LassoNode* lasso_lib_name_identifier_mapping_response_new ( ) LassoNode* lasso_lib_name_identifier_mapping_response_new_full ( char* provideRID, const char* statusCodeValue, LassoLibNameIdentifierMappingRequest* request, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_register_name_identifier_request_get_type ( ) LassoNode* lasso_lib_register_name_identifier_request_new ( ) LassoNode* lasso_lib_register_name_identifier_request_new_full ( const char* providerID, LassoSamlNameIdentifier* idpNameIdentifier, LassoSamlNameIdentifier* spNameIdentifier, LassoSamlNameIdentifier* oldNameIdentifier, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_register_name_identifier_response_get_type ( ) LassoNode* lasso_lib_register_name_identifier_response_new ( ) LassoNode* lasso_lib_register_name_identifier_response_new_full ( const char* providerID, const char* statusCodeValue, LassoLibRegisterNameIdentifierRequest* request, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_request_authn_context_get_type ( ) LassoLibRequestAuthnContext* lasso_lib_request_authn_context_new ( ) GType lasso_lib_scoping_get_type ( ) LassoLibScoping* lasso_lib_scoping_new ( ) GType lasso_lib_status_response_get_type ( ) LassoNode* lasso_lib_status_response_new ( ) GType lasso_lib_subject_get_type ( ) LassoLibSubject* lasso_lib_subject_new ( ) gint lasso_login_accept_sso ( LassoLogin* login ) gint lasso_login_build_artifact_msg ( LassoLogin* login, LassoHttpMethod http_method ) int lasso_login_build_assertion ( LassoLogin* login, const char* authenticationMethod, const char* authenticationInstant, const char* reauthenticateOnOrAfter, const char* notBefore, const char* notOnOrAfter ) gint lasso_login_build_authn_request_msg ( LassoLogin* login ) gint lasso_login_build_authn_response_msg ( LassoLogin* login ) gint lasso_login_build_request_msg ( LassoLogin* login ) gint lasso_login_build_response_msg ( LassoLogin* login, gchar* remote_providerID ) None lasso_login_destroy ( LassoLogin* login ) gchar* lasso_login_dump ( LassoLogin* login ) LassoNode* lasso_login_get_assertion ( LassoLogin* login ) GType lasso_login_get_type ( ) gint lasso_login_init_authn_request ( LassoLogin* login, const gchar* remote_providerID, LassoHttpMethod http_method ) gint lasso_login_init_idp_initiated_authn_request ( LassoLogin* login, const gchar* remote_providerID ) gint lasso_login_init_request ( LassoLogin* login, gchar* response_msg, LassoHttpMethod response_http_method ) gboolean lasso_login_must_ask_for_consent ( LassoLogin* login ) gboolean lasso_login_must_authenticate ( LassoLogin* login ) LassoLogin* lasso_login_new ( LassoServer* server ) LassoLogin* lasso_login_new_from_dump ( LassoServer* server, const gchar* dump ) int lasso_login_process_authn_request_msg ( LassoLogin* login, const char* authn_request_msg ) gint lasso_login_process_authn_response_msg ( LassoLogin* login, gchar* authn_response_msg ) int lasso_login_process_paos_response_msg ( LassoLogin* login, gchar* msg ) gint lasso_login_process_request_msg ( LassoLogin* login, gchar* request_msg ) gint lasso_login_process_response_msg ( LassoLogin* login, gchar* response_msg ) int lasso_login_validate_request_msg ( LassoLogin* login, gboolean authentication_result, gboolean is_consent_obtained ) gint lasso_logout_build_request_msg ( LassoLogout* logout ) gint lasso_logout_build_response_msg ( LassoLogout* logout ) None lasso_logout_destroy ( LassoLogout* logout ) gchar* lasso_logout_dump ( LassoLogout* logout ) gchar* lasso_logout_get_next_providerID ( LassoLogout* logout ) GType lasso_logout_get_type ( ) gint lasso_logout_init_request ( LassoLogout* logout, gchar* remote_providerID, LassoHttpMethod request_method ) LassoLogout* lasso_logout_new ( LassoServer* server ) LassoLogout* lasso_logout_new_from_dump ( LassoServer* server, const gchar* dump ) gint lasso_logout_process_request_msg ( LassoLogout* logout, gchar* request_msg ) gint lasso_logout_process_response_msg ( LassoLogout* logout, gchar* response_msg ) gint lasso_logout_reset_providerID_index ( LassoLogout* logout ) gint lasso_logout_validate_request ( LassoLogout* logout ) GType lasso_misc_text_node_get_type ( ) xmlNode* lasso_misc_text_node_get_xml_content ( LassoMiscTextNode* misc_text_node ) LassoNode* lasso_misc_text_node_new ( ) LassoMiscTextNode* lasso_misc_text_node_new_with_string ( const char* content ) LassoMiscTextNode* lasso_misc_text_node_new_with_xml_node ( xmlNode* xml_node ) None lasso_misc_text_node_set_xml_content ( LassoMiscTextNode* misc_text_node, xmlNode* node ) gint lasso_name_id_management_build_request_msg ( LassoNameIdManagement* name_id_management ) int lasso_name_id_management_build_response_msg ( LassoNameIdManagement* name_id_management ) None lasso_name_id_management_destroy ( LassoNameIdManagement* name_id_management ) char* lasso_name_id_management_dump ( LassoNameIdManagement* name_id_management ) GType lasso_name_id_management_get_type ( ) gint lasso_name_id_management_init_request ( LassoNameIdManagement* name_id_management, char* remote_provider_id, char* new_name_id, LassoHttpMethod http_method ) LassoNameIdManagement* lasso_name_id_management_new ( LassoServer* server ) LassoNameIdManagement* lasso_name_id_management_new_from_dump ( LassoServer* server, const char* dump ) gint lasso_name_id_management_process_request_msg ( LassoNameIdManagement* name_id_management, gchar* request_msg ) gint lasso_name_id_management_process_response_msg ( LassoNameIdManagement* name_id_management, gchar* response_msg ) gint lasso_name_id_management_validate_request ( LassoNameIdManagement* name_id_management ) gint lasso_name_identifier_mapping_build_request_msg ( LassoNameIdentifierMapping* mapping ) gint lasso_name_identifier_mapping_build_response_msg ( LassoNameIdentifierMapping* mapping ) None lasso_name_identifier_mapping_destroy ( LassoNameIdentifierMapping* mapping ) GType lasso_name_identifier_mapping_get_type ( ) gint lasso_name_identifier_mapping_init_request ( LassoNameIdentifierMapping* mapping, gchar* targetNamespace, gchar* remote_providerID ) LassoNameIdentifierMapping* lasso_name_identifier_mapping_new ( LassoServer* server ) gint lasso_name_identifier_mapping_process_request_msg ( LassoNameIdentifierMapping* mapping, gchar* request_msg ) gint lasso_name_identifier_mapping_process_response_msg ( LassoNameIdentifierMapping* mapping, gchar* response_msg ) gint lasso_name_identifier_mapping_validate_request ( LassoNameIdentifierMapping* mapping ) gint lasso_name_registration_build_request_msg ( LassoNameRegistration* name_registration ) gint lasso_name_registration_build_response_msg ( LassoNameRegistration* name_registration ) None lasso_name_registration_destroy ( LassoNameRegistration* name_registration ) gchar* lasso_name_registration_dump ( LassoNameRegistration* name_registration ) GType lasso_name_registration_get_type ( ) gint lasso_name_registration_init_request ( LassoNameRegistration* name_registration, char* remote_providerID, LassoHttpMethod http_method ) LassoNameRegistration* lasso_name_registration_new ( LassoServer* server ) LassoNameRegistration* lasso_name_registration_new_from_dump ( LassoServer* server, const char* dump ) gint lasso_name_registration_process_request_msg ( LassoNameRegistration* name_registration, gchar* request_msg ) gint lasso_name_registration_process_response_msg ( LassoNameRegistration* name_registration, gchar* response_msg ) gint lasso_name_registration_validate_request ( LassoNameRegistration* name_registration ) None lasso_node_cleanup_original_xmlnodes ( LassoNode* node ) None lasso_node_destroy ( LassoNode* node ) char* lasso_node_dump ( LassoNode* node ) char* lasso_node_export_to_base64 ( LassoNode* node ) char* lasso_node_export_to_ecp_soap_response ( LassoNode* node, const char* assertionConsumerURL ) char* lasso_node_export_to_paos_request ( LassoNode* node, const char* issuer, const char* responseConsumerURL, const char* relay_state ) char* lasso_node_export_to_query ( LassoNode* node, LassoSignatureMethod sign_method, const char* private_key_file ) char* lasso_node_export_to_soap ( LassoNode* node ) gchar* lasso_node_export_to_xml ( LassoNode* node ) const char* lasso_node_get_name ( LassoNode* node ) const char* lasso_node_get_namespace ( LassoNode* node ) xmlNode* lasso_node_get_original_xmlnode ( LassoNode* node ) GType lasso_node_get_type ( ) xmlNode* lasso_node_get_xmlNode ( LassoNode* node, gboolean lasso_dump ) LassoMessageFormat lasso_node_init_from_message ( LassoNode* node, const char* message ) gboolean lasso_node_init_from_query ( LassoNode* node, const char* query ) int lasso_node_init_from_xml ( LassoNode* node, xmlNode* xmlnode ) LassoNode* lasso_node_new ( ) LassoNode* lasso_node_new_from_dump ( const char* dump ) LassoNode* lasso_node_new_from_soap ( const char* soap ) LassoNode* lasso_node_new_from_xmlNode ( xmlNode* node ) None lasso_node_set_custom_namespace ( LassoNode* node, const char* prefix, const char* href ) None lasso_node_set_custom_nodename ( LassoNode* node, const char* nodename ) None lasso_node_set_original_xmlnode ( LassoNode* node, xmlNode* xmlnode ) char* lasso_profile_get_artifact ( LassoProfile* profile ) char* lasso_profile_get_artifact_message ( LassoProfile* profile ) LassoIdentity* lasso_profile_get_identity ( LassoProfile* profile ) LassoNode* lasso_profile_get_nameIdentifier ( LassoProfile* profile ) LassoRequestType lasso_profile_get_request_type_from_soap_msg ( const gchar* soap ) LassoSession* lasso_profile_get_session ( LassoProfile* profile ) LassoProfileSignatureHint lasso_profile_get_signature_hint ( LassoProfile* profile ) GType lasso_profile_get_type ( ) gboolean lasso_profile_is_identity_dirty ( LassoProfile* profile ) gboolean lasso_profile_is_liberty_query ( const gchar* query ) gboolean lasso_profile_is_saml_query ( const gchar* query ) gboolean lasso_profile_is_session_dirty ( LassoProfile* profile ) None lasso_profile_set_artifact_message ( LassoProfile* profile, char* message ) gint lasso_profile_set_identity_from_dump ( LassoProfile* profile, const gchar* dump ) gint lasso_profile_set_session_from_dump ( LassoProfile* profile, const gchar* dump ) None lasso_profile_set_signature_hint ( LassoProfile* profile, LassoProfileSignatureHint signature_hint ) gboolean lasso_provider_accept_http_method ( LassoProvider* provider, const LassoProvider* remote_provider, LassoMdProtocolType protocol_type, LassoHttpMethod http_method, gboolean initiate_profile ) gchar* lasso_provider_get_assertion_consumer_service_url ( const LassoProvider* provider, const char* service_id ) gchar* lasso_provider_get_base64_succinct_id ( const LassoProvider* provider ) gchar* lasso_provider_get_default_name_id_format ( const LassoProvider* provider ) LassoEncryptionMode lasso_provider_get_encryption_mode ( LassoProvider* provider ) LassoHttpMethod lasso_provider_get_first_http_method ( LassoProvider* provider, const LassoProvider* remote_provider, LassoMdProtocolType protocol_type ) const GList* lasso_provider_get_metadata_list ( const LassoProvider* provider, const char* name ) gchar* lasso_provider_get_metadata_one ( const LassoProvider* provider, const char* name ) xmlNode* lasso_provider_get_organization ( const LassoProvider* provider ) LassoProtocolConformance lasso_provider_get_protocol_conformance ( const LassoProvider* provider ) char* lasso_provider_get_sp_name_qualifier ( LassoProvider* provider ) GType lasso_provider_get_type ( ) gboolean lasso_provider_has_protocol_profile ( const LassoProvider* provider, LassoMdProtocolType protocol_type, const char* protocol_profile ) LassoProvider* lasso_provider_new ( LassoProviderRole role, const char* metadata, const char* public_key, const char* ca_cert_chain ) LassoProvider* lasso_provider_new_from_buffer ( LassoProviderRole role, const char* metadata, const char* public_key, const char* ca_cert_chain ) LassoProvider* lasso_provider_new_from_dump ( const gchar* dump ) LassoSaml2EncryptedElement* lasso_provider_saml2_node_encrypt ( const LassoProvider* provider, LassoNode* lasso_node ) None lasso_provider_set_encryption_mode ( LassoProvider* provider, LassoEncryptionMode encryption_mode ) None lasso_provider_set_encryption_sym_key_type ( LassoProvider* provider, LassoEncryptionSymKeyType encryption_sym_key_type ) int lasso_provider_verify_single_node_signature ( LassoProvider* provider, LassoNode* node, const char* id_attr_name ) None lasso_register_dst_service ( const char* prefix, const char* href ) None lasso_register_idwsf2_dst_service ( const gchar* prefix, const gchar* href ) GType lasso_saml2_action_get_type ( ) LassoNode* lasso_saml2_action_new ( ) LassoNode* lasso_saml2_action_new_with_string ( char* content ) GType lasso_saml2_advice_get_type ( ) LassoNode* lasso_saml2_advice_new ( ) int lasso_saml2_assertion_add_attribute_with_node ( LassoSaml2Assertion* assertion, const char* name, const char* nameformat, LassoNode* content ) None lasso_saml2_assertion_add_audience_restriction ( LassoSaml2Assertion* saml2_assertion, const char* providerID ) None lasso_saml2_assertion_add_proxy_limit ( LassoSaml2Assertion* saml2_assertion, int proxy_count, GList* proxy_audiences ) LassoProvider* lasso_saml2_assertion_get_issuer_provider ( const LassoSaml2Assertion* saml2_assertion, const LassoServer* server ) LassoSaml2SubjectConfirmationData* lasso_saml2_assertion_get_subject_confirmation_data ( LassoSaml2Assertion* saml2_assertion, gboolean create ) GType lasso_saml2_assertion_get_type ( ) gboolean lasso_saml2_assertion_has_audience_restriction ( LassoSaml2Assertion* saml2_assertion ) gboolean lasso_saml2_assertion_is_audience_restricted ( LassoSaml2Assertion* saml2_assertion, char* providerID ) LassoNode* lasso_saml2_assertion_new ( ) None lasso_saml2_assertion_set_basic_conditions ( LassoSaml2Assertion* saml2_assertion, time_t tolerance, time_t length, gboolean one_time_use ) None lasso_saml2_assertion_set_subject_confirmation_data ( LassoSaml2Assertion* saml2_assertion, time_t tolerance, time_t length, const char* Recipient, const char* InResponseTo, const char* Address ) None lasso_saml2_assertion_set_subject_confirmation_name_id ( LassoSaml2Assertion* saml2_assertion, LassoNode* node ) None lasso_saml2_assertion_set_subject_name_id ( LassoSaml2Assertion* saml2_assertion, LassoNode* node ) LassoSaml2AssertionValidationState lasso_saml2_assertion_validate_conditions ( LassoSaml2Assertion* saml2_assertion, const char* relaying_party_providerID ) GType lasso_saml2_attribute_get_type ( ) LassoNode* lasso_saml2_attribute_new ( ) GType lasso_saml2_attribute_statement_get_type ( ) LassoNode* lasso_saml2_attribute_statement_new ( ) GType lasso_saml2_attribute_value_get_type ( ) LassoSaml2AttributeValue* lasso_saml2_attribute_value_new ( ) GType lasso_saml2_audience_restriction_get_type ( ) LassoNode* lasso_saml2_audience_restriction_new ( ) GType lasso_saml2_authn_context_get_type ( ) LassoNode* lasso_saml2_authn_context_new ( ) GType lasso_saml2_authn_statement_get_type ( ) LassoNode* lasso_saml2_authn_statement_new ( ) GType lasso_saml2_authz_decision_statement_get_type ( ) LassoNode* lasso_saml2_authz_decision_statement_new ( ) GType lasso_saml2_base_idabstract_get_type ( ) LassoNode* lasso_saml2_base_idabstract_new ( ) GType lasso_saml2_condition_abstract_get_type ( ) LassoNode* lasso_saml2_condition_abstract_new ( ) GType lasso_saml2_conditions_get_type ( ) LassoNode* lasso_saml2_conditions_new ( ) LassoSaml2EncryptedElement* lasso_saml2_encrypted_element_build_encrypted_persistent_name_id ( const char* id, const char* idpID, const LassoProvider* provider ) GType lasso_saml2_encrypted_element_get_type ( ) LassoNode* lasso_saml2_encrypted_element_new ( ) GType lasso_saml2_evidence_get_type ( ) LassoNode* lasso_saml2_evidence_new ( ) GType lasso_saml2_key_info_confirmation_data_get_type ( ) LassoNode* lasso_saml2_key_info_confirmation_data_new ( ) LassoSaml2NameID* lasso_saml2_name_id_build_persistent ( const char* id, const char* idpID, const char* providerID ) gboolean lasso_saml2_name_id_equals ( LassoSaml2NameID* name_id, LassoSaml2NameID* other_name_id ) GType lasso_saml2_name_id_get_type ( ) LassoNode* lasso_saml2_name_id_new ( ) LassoNode* lasso_saml2_name_id_new_with_string ( char* content ) GType lasso_saml2_one_time_use_get_type ( ) LassoNode* lasso_saml2_one_time_use_new ( ) GType lasso_saml2_proxy_restriction_get_type ( ) LassoNode* lasso_saml2_proxy_restriction_new ( ) GType lasso_saml2_statement_abstract_get_type ( ) LassoNode* lasso_saml2_statement_abstract_new ( ) GType lasso_saml2_subject_confirmation_data_get_type ( ) LassoNode* lasso_saml2_subject_confirmation_data_new ( ) GType lasso_saml2_subject_confirmation_get_type ( ) LassoNode* lasso_saml2_subject_confirmation_new ( ) GType lasso_saml2_subject_get_type ( ) GType lasso_saml2_subject_locality_get_type ( ) LassoNode* lasso_saml2_subject_locality_new ( ) LassoNode* lasso_saml2_subject_new ( ) GType lasso_saml_advice_get_type ( ) LassoNode* lasso_saml_advice_new ( ) GType lasso_saml_assertion_get_type ( ) LassoSamlAssertion* lasso_saml_assertion_new ( ) GType lasso_saml_attribute_designator_get_type ( ) LassoNode* lasso_saml_attribute_designator_new ( ) GType lasso_saml_attribute_get_type ( ) LassoSamlAttribute* lasso_saml_attribute_new ( ) GType lasso_saml_attribute_statement_get_type ( ) LassoSamlAttributeStatement* lasso_saml_attribute_statement_new ( ) GType lasso_saml_attribute_value_get_type ( ) LassoSamlAttributeValue* lasso_saml_attribute_value_new ( ) GType lasso_saml_audience_restriction_condition_get_type ( ) LassoSamlAudienceRestrictionCondition* lasso_saml_audience_restriction_condition_new ( ) LassoSamlAudienceRestrictionCondition* lasso_saml_audience_restriction_condition_new_full ( const char* audience ) GType lasso_saml_authentication_statement_get_type ( ) LassoNode* lasso_saml_authentication_statement_new ( ) GType lasso_saml_authority_binding_get_type ( ) LassoNode* lasso_saml_authority_binding_new ( ) GType lasso_saml_condition_abstract_get_type ( ) GType lasso_saml_conditions_get_type ( ) LassoSamlConditions* lasso_saml_conditions_new ( ) GType lasso_saml_name_identifier_get_type ( ) LassoSamlNameIdentifier* lasso_saml_name_identifier_new ( ) LassoSamlNameIdentifier* lasso_saml_name_identifier_new_from_xmlNode ( xmlNode* xmlnode ) GType lasso_saml_statement_abstract_get_type ( ) GType lasso_saml_subject_confirmation_get_type ( ) LassoSamlSubjectConfirmation* lasso_saml_subject_confirmation_new ( ) GType lasso_saml_subject_get_type ( ) GType lasso_saml_subject_locality_get_type ( ) LassoNode* lasso_saml_subject_locality_new ( ) LassoNode* lasso_saml_subject_new ( ) GType lasso_saml_subject_statement_abstract_get_type ( ) GType lasso_saml_subject_statement_get_type ( ) LassoNode* lasso_saml_subject_statement_new ( ) GType lasso_samlp2_artifact_resolve_get_type ( ) LassoNode* lasso_samlp2_artifact_resolve_new ( ) GType lasso_samlp2_artifact_response_get_type ( ) LassoNode* lasso_samlp2_artifact_response_new ( ) GType lasso_samlp2_assertion_id_request_get_type ( ) LassoNode* lasso_samlp2_assertion_id_request_new ( ) GType lasso_samlp2_attribute_query_get_type ( ) LassoNode* lasso_samlp2_attribute_query_new ( ) GType lasso_samlp2_authn_query_get_type ( ) LassoNode* lasso_samlp2_authn_query_new ( ) GType lasso_samlp2_authn_request_get_type ( ) LassoNode* lasso_samlp2_authn_request_new ( ) GType lasso_samlp2_authz_decision_query_get_type ( ) LassoNode* lasso_samlp2_authz_decision_query_new ( ) GType lasso_samlp2_extensions_get_type ( ) LassoNode* lasso_samlp2_extensions_new ( ) GType lasso_samlp2_idp_entry_get_type ( ) LassoNode* lasso_samlp2_idp_entry_new ( ) GType lasso_samlp2_idp_list_get_type ( ) LassoNode* lasso_samlp2_idp_list_new ( ) GType lasso_samlp2_logout_request_get_type ( ) LassoNode* lasso_samlp2_logout_request_new ( ) GType lasso_samlp2_logout_response_get_type ( ) LassoNode* lasso_samlp2_logout_response_new ( ) GType lasso_samlp2_manage_name_id_request_get_type ( ) LassoNode* lasso_samlp2_manage_name_id_request_new ( ) GType lasso_samlp2_manage_name_id_response_get_type ( ) LassoNode* lasso_samlp2_manage_name_id_response_new ( ) GType lasso_samlp2_name_id_mapping_request_get_type ( ) LassoNode* lasso_samlp2_name_id_mapping_request_new ( ) GType lasso_samlp2_name_id_mapping_response_get_type ( ) LassoNode* lasso_samlp2_name_id_mapping_response_new ( ) GType lasso_samlp2_name_id_policy_get_type ( ) LassoNode* lasso_samlp2_name_id_policy_new ( ) GType lasso_samlp2_request_abstract_get_type ( ) LassoNode* lasso_samlp2_request_abstract_new ( ) GType lasso_samlp2_requested_authn_context_get_type ( ) LassoNode* lasso_samlp2_requested_authn_context_new ( ) GType lasso_samlp2_response_get_type ( ) LassoNode* lasso_samlp2_response_new ( ) GType lasso_samlp2_scoping_get_type ( ) LassoNode* lasso_samlp2_scoping_new ( ) GType lasso_samlp2_status_code_get_type ( ) LassoNode* lasso_samlp2_status_code_new ( ) GType lasso_samlp2_status_detail_get_type ( ) LassoNode* lasso_samlp2_status_detail_new ( ) GType lasso_samlp2_status_get_type ( ) LassoNode* lasso_samlp2_status_new ( ) GType lasso_samlp2_status_response_get_type ( ) LassoNode* lasso_samlp2_status_response_new ( ) GType lasso_samlp2_subject_query_abstract_get_type ( ) LassoNode* lasso_samlp2_subject_query_abstract_new ( ) GType lasso_samlp2_terminate_get_type ( ) LassoNode* lasso_samlp2_terminate_new ( ) GType lasso_samlp_request_abstract_get_type ( ) GType lasso_samlp_request_get_type ( ) LassoNode* lasso_samlp_request_new ( ) None lasso_samlp_response_abstract_fill ( LassoSamlpResponseAbstract* response, const char* InResponseTo, const char* Recipient ) GType lasso_samlp_response_abstract_get_type ( ) GType lasso_samlp_response_get_type ( ) LassoNode* lasso_samlp_response_new ( ) GType lasso_samlp_status_code_get_type ( ) LassoSamlpStatusCode* lasso_samlp_status_code_new ( ) GType lasso_samlp_status_get_type ( ) LassoSamlpStatus* lasso_samlp_status_new ( ) gint lasso_server_add_provider ( LassoServer* server, LassoProviderRole role, const gchar* metadata, const gchar* public_key, const gchar* ca_cert_chain ) gint lasso_server_add_provider_from_buffer ( LassoServer* server, LassoProviderRole role, const gchar* metadata, const gchar* public_key, const gchar* ca_cert_chain ) None lasso_server_destroy ( LassoServer* server ) gchar* lasso_server_dump ( LassoServer* server ) LassoProvider* lasso_server_get_provider ( const LassoServer* server, const gchar* providerID ) GType lasso_server_get_type ( ) int lasso_server_load_affiliation ( LassoServer* server, const gchar* filename ) LassoServer* lasso_server_new ( const gchar* metadata, const gchar* private_key, const gchar* private_key_password, const gchar* certificate ) LassoServer* lasso_server_new_from_buffers ( const gchar* metadata, const gchar* private_key, const gchar* private_key_password, const gchar* certificate ) LassoServer* lasso_server_new_from_dump ( const gchar* dump ) int lasso_server_saml2_assertion_setup_signature ( LassoServer* server, LassoSaml2Assertion* saml2_assertion ) int lasso_server_set_encryption_private_key ( LassoServer* server, const gchar* filename ) gint lasso_session_add_assertion ( LassoSession* session, const char* providerID, LassoNode* assertion ) None lasso_session_destroy ( LassoSession* session ) gchar* lasso_session_dump ( LassoSession* session ) LassoNode* lasso_session_get_assertion ( LassoSession* session, const gchar* providerID ) GList* lasso_session_get_assertions ( LassoSession* session, const char* provider_id ) gchar* lasso_session_get_provider_index ( LassoSession* session, gint index ) GType lasso_session_get_type ( ) gboolean lasso_session_is_empty ( LassoSession* session ) LassoSession* lasso_session_new ( ) LassoSession* lasso_session_new_from_dump ( const gchar* dump ) gint lasso_session_remove_assertion ( LassoSession* session, const gchar* providerID ) None lasso_set_flag ( char* flag ) int lasso_shutdown ( ) const char* lasso_strerror ( int error_code ) lasso-2.8.2/abi/PaxHeaders/abi-2.1.10000644000000000000000000000013113766621500013575 xustar0029 mtime=1608196928.71889494 30 atime=1678098069.989489039 30 ctime=1678814319.929947161 lasso-2.8.2/abi/abi-2.1.10000644000175000017500000014725013766621500017057 0ustar00bdauvergnebdauvergne00000000000000LASSO_CHECK_VERSIONABI_COMPATIBLE LASSO_CHECK_VERSION_EXACT LASSO_CHECK_VERSION_NUMERIC LASSO_DEFEDERATION_ERROR_MISSING_NAME_IDENTIFIER LASSO_DS_HREF LASSO_DS_PREFIX LASSO_ECP_HREF LASSO_ECP_PREFIX LASSO_ENCRYPTION_MODE_ASSERTION LASSO_ENCRYPTION_MODE_NAMEID LASSO_ENCRYPTION_MODE_NONE LASSO_ENCRYPTION_SYM_KEY_TYPE_3DES LASSO_ENCRYPTION_SYM_KEY_TYPE_AES_128 LASSO_ENCRYPTION_SYM_KEY_TYPE_AES_256 LASSO_ENCRYPTION_SYM_KEY_TYPE_DEFAULT LASSO_ERROR_UNDEFINED LASSO_ERROR_UNIMPLEMENTED LASSO_HTTP_METHOD_ANY LASSO_HTTP_METHOD_ARTIFACT_GET LASSO_HTTP_METHOD_ARTIFACT_POST LASSO_HTTP_METHOD_GET LASSO_HTTP_METHOD_IDP_INITIATED LASSO_HTTP_METHOD_NONE LASSO_HTTP_METHOD_POST LASSO_HTTP_METHOD_REDIRECT LASSO_HTTP_METHOD_SOAP LASSO_LASSO_HREF LASSO_LASSO_PREFIX LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_INTERNET_PROTOCOL LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_INTERNET_PROTOCOL_PASSWORD LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_ONE_FACTOR_CONTRACT LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_ONE_FACTOR_UNREGISTERED LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_TWO_FACTOR_CONTRACT LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_TWO_FACTOR_UNREGISTERED LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PASSWORD LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PASSWORD_PROTECTED_TRANSPORT LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PREVIOUS_SESSION LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SMARTCARD LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SMARTCARD_PKI LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SOFTWARE_PKI LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_TIME_SYNC_TOKEN LASSO_LIB_AUTHN_CONTEXT_COMPARISON_BETTER LASSO_LIB_AUTHN_CONTEXT_COMPARISON_EXACT LASSO_LIB_AUTHN_CONTEXT_COMPARISON_MAXIMUM LASSO_LIB_AUTHN_CONTEXT_COMPARISON_MINIMUM LASSO_LIB_CONSENT_INAPPLICABLE LASSO_LIB_CONSENT_OBTAINED LASSO_LIB_CONSENT_OBTAINED_CURRENT_EXPLICIT LASSO_LIB_CONSENT_OBTAINED_CURRENT_IMPLICIT LASSO_LIB_CONSENT_OBTAINED_PRIOR LASSO_LIB_CONSENT_UNAVAILABLE LASSO_LIB_HREF LASSO_LIB_MAJOR_VERSION_N LASSO_LIB_MINOR_VERSION_N LASSO_LIB_NAMEID_POLICY_TYPE_ANY LASSO_LIB_NAMEID_POLICY_TYPE_FEDERATED LASSO_LIB_NAMEID_POLICY_TYPE_NONE LASSO_LIB_NAMEID_POLICY_TYPE_ONE_TIME LASSO_LIB_NAME_IDENTIFIER_FORMAT_ENCRYPTED LASSO_LIB_NAME_IDENTIFIER_FORMAT_ENTITYID LASSO_LIB_NAME_IDENTIFIER_FORMAT_FEDERATED LASSO_LIB_NAME_IDENTIFIER_FORMAT_ONE_TIME LASSO_LIB_PREFIX LASSO_LIB_PROTOCOL_PROFILE_BRWS_ART LASSO_LIB_PROTOCOL_PROFILE_BRWS_LECP LASSO_LIB_PROTOCOL_PROFILE_BRWS_POST LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_IDP_HTTP LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_IDP_SOAP LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_SP_SOAP LASSO_LIB_PROTOCOL_PROFILE_NIM_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_RNI_IDP_HTTP LASSO_LIB_PROTOCOL_PROFILE_RNI_IDP_SOAP LASSO_LIB_PROTOCOL_PROFILE_RNI_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_RNI_SP_SOAP LASSO_LIB_PROTOCOL_PROFILE_SLO_IDP_HTTP LASSO_LIB_PROTOCOL_PROFILE_SLO_IDP_SOAP LASSO_LIB_PROTOCOL_PROFILE_SLO_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_SLO_SP_SOAP LASSO_LIB_STATUS_CODE_FEDERATION_DOES_NOT_EXIST LASSO_LIB_STATUS_CODE_INVALID_ASSERTION_CONSUMER_SERVICE_INDEX LASSO_LIB_STATUS_CODE_INVALID_SIGNATURE LASSO_LIB_STATUS_CODE_NO_AUTHN_CONTEXT LASSO_LIB_STATUS_CODE_NO_AVAILABLEIDP LASSO_LIB_STATUS_CODE_NO_PASSIVE LASSO_LIB_STATUS_CODE_NO_SUPPORTEDIDP LASSO_LIB_STATUS_CODE_PROXY_COUNT_EXCEEDED LASSO_LIB_STATUS_CODE_UNKNOWN_PRINCIPAL LASSO_LIB_STATUS_CODE_UNSIGNED_AUTHN_REQUEST LASSO_LIB_STATUS_CODE_UNSUPPORTED_PROFILE LASSO_LOGIN_ERROR_ASSERTION_REPLAY LASSO_LOGIN_ERROR_CONSENT_NOT_OBTAINED LASSO_LOGIN_ERROR_FEDERATION_NOT_FOUND LASSO_LOGIN_ERROR_INVALID_NAMEIDPOLICY LASSO_LOGIN_ERROR_INVALID_SIGNATURE LASSO_LOGIN_ERROR_NO_DEFAULT_ENDPOINT LASSO_LOGIN_ERROR_REQUEST_DENIED LASSO_LOGIN_ERROR_STATUS_NOT_SUCCESS LASSO_LOGIN_ERROR_UNKNOWN_PRINCIPAL LASSO_LOGIN_ERROR_UNSIGNED_AUTHN_REQUEST LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_ART LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_LECP LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_POST LASSO_LOGOUT_ERROR_FEDERATION_NOT_FOUND LASSO_LOGOUT_ERROR_REQUEST_DENIED LASSO_LOGOUT_ERROR_UNKNOWN_PRINCIPAL LASSO_LOGOUT_ERROR_UNSUPPORTED_PROFILE LASSO_MD_PROTOCOL_TYPE_ARTIFACT_RESOLUTION LASSO_MD_PROTOCOL_TYPE_ASSERTION_ID_REQUEST LASSO_MD_PROTOCOL_TYPE_FEDERATION_TERMINATION LASSO_MD_PROTOCOL_TYPE_MANAGE_NAME_ID LASSO_MD_PROTOCOL_TYPE_NAME_IDENTIFIER_MAPPING LASSO_MD_PROTOCOL_TYPE_REGISTER_NAME_IDENTIFIER LASSO_MD_PROTOCOL_TYPE_SINGLE_LOGOUT LASSO_MD_PROTOCOL_TYPE_SINGLE_SIGN_ON LASSO_MESSAGE_FORMAT_BASE64 LASSO_MESSAGE_FORMAT_ERROR LASSO_MESSAGE_FORMAT_QUERY LASSO_MESSAGE_FORMAT_SOAP LASSO_MESSAGE_FORMAT_UNKNOWN LASSO_MESSAGE_FORMAT_XML LASSO_METADATA_HREF LASSO_METADATA_PREFIX LASSO_NAME_IDENTIFIER_MAPPING_ERROR_FORBIDDEN_CALL_ON_THIS_SIDE LASSO_NAME_IDENTIFIER_MAPPING_ERROR_MISSING_TARGET_IDENTIFIER LASSO_NAME_IDENTIFIER_MAPPING_ERROR_MISSING_TARGET_NAMESPACE LASSO_PAOS_HREF LASSO_PAOS_PREFIX LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ LASSO_PARAM_ERROR_CHECK_FAILED LASSO_PARAM_ERROR_INVALID_VALUE LASSO_PROFILE_ERROR_BAD_IDENTITY_DUMP LASSO_PROFILE_ERROR_BAD_SESSION_DUMP LASSO_PROFILE_ERROR_BUILDING_MESSAGE_FAILED LASSO_PROFILE_ERROR_BUILDING_QUERY_FAILED LASSO_PROFILE_ERROR_BUILDING_REQUEST_FAILED LASSO_PROFILE_ERROR_BUILDING_RESPONSE_FAILED LASSO_PROFILE_ERROR_FEDERATION_NOT_FOUND LASSO_PROFILE_ERROR_IDENTITY_NOT_FOUND LASSO_PROFILE_ERROR_INVALID_ARTIFACT LASSO_PROFILE_ERROR_INVALID_HTTP_METHOD LASSO_PROFILE_ERROR_INVALID_MSG LASSO_PROFILE_ERROR_INVALID_POST_MSG LASSO_PROFILE_ERROR_INVALID_PROTOCOLPROFILE LASSO_PROFILE_ERROR_INVALID_QUERY LASSO_PROFILE_ERROR_INVALID_SOAP_MSG LASSO_PROFILE_ERROR_MISSING_ARTIFACT LASSO_PROFILE_ERROR_MISSING_ASSERTION LASSO_PROFILE_ERROR_MISSING_ENCRYPTION_PRIVATE_KEY LASSO_PROFILE_ERROR_MISSING_ENDPOINT_REFERENCE LASSO_PROFILE_ERROR_MISSING_ENDPOINT_REFERENCE_ADDRESS LASSO_PROFILE_ERROR_MISSING_ISSUER LASSO_PROFILE_ERROR_MISSING_NAME_IDENTIFIER LASSO_PROFILE_ERROR_MISSING_REMOTE_PROVIDERID LASSO_PROFILE_ERROR_MISSING_REQUEST LASSO_PROFILE_ERROR_MISSING_RESOURCE_OFFERING LASSO_PROFILE_ERROR_MISSING_RESPONSE LASSO_PROFILE_ERROR_MISSING_SERVICE_DESCRIPTION LASSO_PROFILE_ERROR_MISSING_SERVICE_INSTANCE LASSO_PROFILE_ERROR_MISSING_SERVICE_TYPE LASSO_PROFILE_ERROR_MISSING_STATUS_CODE LASSO_PROFILE_ERROR_MISSING_SUBJECT LASSO_PROFILE_ERROR_NAME_IDENTIFIER_NOT_FOUND LASSO_PROFILE_ERROR_SESSION_NOT_FOUND LASSO_PROFILE_ERROR_STATUS_NOT_SUCCESS LASSO_PROFILE_ERROR_UNKNOWN_PROFILE_URL LASSO_PROFILE_ERROR_UNSUPPORTED_PROFILE LASSO_PROTOCOL_LIBERTY_1_0 LASSO_PROTOCOL_LIBERTY_1_1 LASSO_PROTOCOL_LIBERTY_1_2 LASSO_PROTOCOL_SAML_2_0 LASSO_PROVIDER_ROLE_IDP LASSO_PROVIDER_ROLE_NONE LASSO_PROVIDER_ROLE_SP LASSO_REQUEST_TYPE_DEFEDERATION LASSO_REQUEST_TYPE_INVALID LASSO_REQUEST_TYPE_LECP LASSO_REQUEST_TYPE_LOGIN LASSO_REQUEST_TYPE_LOGOUT LASSO_REQUEST_TYPE_NAME_IDENTIFIER_MAPPING LASSO_REQUEST_TYPE_NAME_ID_MANAGEMENT LASSO_REQUEST_TYPE_NAME_REGISTRATION LASSO_REQUEST_TYPE_SASL_REQUEST LASSO_SAML2_ASSERTION_HREF LASSO_SAML2_ASSERTION_PREFIX LASSO_SAML2_ATTRIBUTE_NAME_EPR LASSO_SAML2_ATTRIBUTE_NAME_FORMAT_URI LASSO_SAML2_AUTHN_CONTEXT_AUTHENTICATED_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_INTERNET_PROTOCOL LASSO_SAML2_AUTHN_CONTEXT_INTERNET_PROTOCOL_PASSWORD LASSO_SAML2_AUTHN_CONTEXT_KERBEROS LASSO_SAML2_AUTHN_CONTEXT_MOBILE_ONE_FACTOR_CONTRACT LASSO_SAML2_AUTHN_CONTEXT_MOBILE_ONE_FACTOR_UNREGISTERED LASSO_SAML2_AUTHN_CONTEXT_MOBILE_TWO_FACTOR_CONTRACT LASSO_SAML2_AUTHN_CONTEXT_MOBILE_TWO_FACTOR_UNREGISTERED LASSO_SAML2_AUTHN_CONTEXT_NOMAD_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_PASSWORD LASSO_SAML2_AUTHN_CONTEXT_PASSWORD_PROTECTED_TRANSPORT LASSO_SAML2_AUTHN_CONTEXT_PERSONALIZED_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_PGP LASSO_SAML2_AUTHN_CONTEXT_PREVIOUS_SESSION LASSO_SAML2_AUTHN_CONTEXT_SECURE_REMOTE_PASSWORD LASSO_SAML2_AUTHN_CONTEXT_SMARTCARD LASSO_SAML2_AUTHN_CONTEXT_SMARTCARD_PKI LASSO_SAML2_AUTHN_CONTEXT_SOFTWARE_PKI LASSO_SAML2_AUTHN_CONTEXT_SPKI LASSO_SAML2_AUTHN_CONTEXT_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_TIME_SYNC_TOKEN LASSO_SAML2_AUTHN_CONTEXT_TLS_CLIENT LASSO_SAML2_AUTHN_CONTEXT_X509 LASSO_SAML2_AUTHN_CONTEXT_XMLDSIG LASSO_SAML2_CONFIRMATION_METHOD_BEARER LASSO_SAML2_CONSENT_EXPLICIT LASSO_SAML2_CONSENT_IMPLICIT LASSO_SAML2_CONSENT_INAPPLICABLE LASSO_SAML2_CONSENT_OBTAINED LASSO_SAML2_CONSENT_PRIOR LASSO_SAML2_CONSENT_UNAVAILABLE LASSO_SAML2_DEFLATE_ENCODING LASSO_SAML2_METADATA_BINDING_ARTIFACT LASSO_SAML2_METADATA_BINDING_PAOS LASSO_SAML2_METADATA_BINDING_POST LASSO_SAML2_METADATA_BINDING_REDIRECT LASSO_SAML2_METADATA_BINDING_SOAP LASSO_SAML2_METADATA_HREF LASSO_SAML2_NAME_IDENTIFIER_FORMAT_ENCRYPTED LASSO_SAML2_NAME_IDENTIFIER_FORMAT_ENTITY LASSO_SAML2_NAME_IDENTIFIER_FORMAT_KERBEROS LASSO_SAML2_NAME_IDENTIFIER_FORMAT_PERSISTENT LASSO_SAML2_NAME_IDENTIFIER_FORMAT_TRANSIENT LASSO_SAML2_PROTOCOL_HREF LASSO_SAML2_PROTOCOL_PREFIX LASSO_SAML2_STATUS_CODE_AUTHN_FAILED LASSO_SAML2_STATUS_CODE_INVALID_ATTR_NAME LASSO_SAML2_STATUS_CODE_INVALID_NAME_ID_POLICY LASSO_SAML2_STATUS_CODE_NO_AUTHN_CONTEXT LASSO_SAML2_STATUS_CODE_NO_AVAILABLE_IDP LASSO_SAML2_STATUS_CODE_NO_PASSIVE LASSO_SAML2_STATUS_CODE_NO_SUPPORTED_IDP LASSO_SAML2_STATUS_CODE_PARTIAL_LOGOUT LASSO_SAML2_STATUS_CODE_PROXY_COUNT_EXCEEDED LASSO_SAML2_STATUS_CODE_REQUESTER LASSO_SAML2_STATUS_CODE_REQUEST_DENIED LASSO_SAML2_STATUS_CODE_REQUEST_UNSUPPORTED LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_DEPRECATED LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_TOO_HIGH LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_TOO_LOW LASSO_SAML2_STATUS_CODE_RESOURCE_NOT_RECOGNIZED LASSO_SAML2_STATUS_CODE_RESPONDER LASSO_SAML2_STATUS_CODE_SUCCESS LASSO_SAML2_STATUS_CODE_TOO_MANY_RESPONSES LASSO_SAML2_STATUS_CODE_UNKNOWN_ATTR_PROFILE LASSO_SAML2_STATUS_CODE_UNKNOWN_PRINCIPAL LASSO_SAML2_STATUS_CODE_UNSUPPORTED_BINDING LASSO_SAML2_STATUS_CODE_VERSION_MISMATCH LASSO_SAML_ASSERTION_HREF LASSO_SAML_ASSERTION_PREFIX LASSO_SAML_AUTHENTICATION_METHODS_PKI LASSO_SAML_AUTHENTICATION_METHOD_HARDWARE_TOKEN LASSO_SAML_AUTHENTICATION_METHOD_KERBEROS LASSO_SAML_AUTHENTICATION_METHOD_LIBERTY LASSO_SAML_AUTHENTICATION_METHOD_PASSWORD LASSO_SAML_AUTHENTICATION_METHOD_PGP LASSO_SAML_AUTHENTICATION_METHOD_SECURE_REMOTE_PASSWORD LASSO_SAML_AUTHENTICATION_METHOD_SMARTCARD_PKI LASSO_SAML_AUTHENTICATION_METHOD_SOFTWARE_PKI LASSO_SAML_AUTHENTICATION_METHOD_UNSPECIFIED LASSO_SAML_AUTHENTICATION_METHOD_XKMS LASSO_SAML_AUTHENTICATION_METHOD_XMLD_SIG LASSO_SAML_CONFIRMATION_METHOD_ARTIFACT LASSO_SAML_CONFIRMATION_METHOD_ARTIFACT01 LASSO_SAML_CONFIRMATION_METHOD_BEARER LASSO_SAML_CONFIRMATION_METHOD_HOLDER_OF_KEY LASSO_SAML_CONFIRMATION_METHOD_SENDER_VOUCHES LASSO_SAML_MAJOR_VERSION_N LASSO_SAML_MINOR_VERSION_N LASSO_SAML_PROTOCOL_HREF LASSO_SAML_PROTOCOL_PREFIX LASSO_SAML_STATUS_CODE_REQUESTER LASSO_SAML_STATUS_CODE_REQUEST_DENIED LASSO_SAML_STATUS_CODE_REQUEST_VERSION_DEPRECATED LASSO_SAML_STATUS_CODE_REQUEST_VERSION_TOO_HIGH LASSO_SAML_STATUS_CODE_REQUEST_VERSION_TOO_LOW LASSO_SAML_STATUS_CODE_RESOURCE_NOT_RECOGNIZED LASSO_SAML_STATUS_CODE_RESPONDER LASSO_SAML_STATUS_CODE_SUCCESS LASSO_SAML_STATUS_CODE_TOO_MANY_RESPONSES LASSO_SAML_STATUS_CODE_VERSION_MISMATCH LASSO_SERVER_ERROR_ADD_PROVIDER_FAILED LASSO_SERVER_ERROR_ADD_PROVIDER_PROTOCOL_MISMATCH LASSO_SERVER_ERROR_INVALID_XML LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND LASSO_SERVER_ERROR_SET_ENCRYPTION_PRIVATE_KEY_FAILED LASSO_SIGNATURE_METHOD_DSA_SHA1 LASSO_SIGNATURE_METHOD_RSA_SHA1 LASSO_SIGNATURE_TYPE_NONE LASSO_SIGNATURE_TYPE_SIMPLE LASSO_SIGNATURE_TYPE_WITHX509 LASSO_SOAP_ENV_ACTOR LASSO_SOAP_ENV_HREF LASSO_SOAP_ENV_PREFIX LASSO_SOAP_ERROR_MISSING_BODY LASSO_SOAP_ERROR_MISSING_ENVELOPE LASSO_SOAP_ERROR_MISSING_HEADER LASSO_SOAP_ERROR_MISSING_SOAP_FAULT_DETAIL LASSO_SOAP_FAULT_CODE_SERVER LASSO_XML_ERROR_ATTR_NOT_FOUND LASSO_XML_ERROR_ATTR_VALUE_NOT_FOUND LASSO_XML_ERROR_INVALID_FILE LASSO_XML_ERROR_MISSING_NAMESPACE LASSO_XML_ERROR_NODE_CONTENT_NOT_FOUND LASSO_XML_ERROR_NODE_NOT_FOUND LASSO_XML_ERROR_OBJECT_CONSTRUCTION_FAILED LASSO_XSI_HREF LASSO_XSI_PREFIX LassoCheckVersionMode struct LassoDefederation { void* private_data } struct LassoDsKeyInfo { LassoDsKeyValue* KeyValue } struct LassoDsKeyValue { LassoDsRsaKeyValue* RSAKeyValue } struct LassoDsRsaKeyValue { char* Modulus, char* Exponent } struct LassoEcp { gchar* assertionConsumerURL, LassoEcpPrivate* private_data } LassoEncryptionMode LassoEncryptionSymKeyType struct LassoFederation { gchar* remote_providerID, LassoNode* local_nameIdentifier, LassoNode* remote_nameIdentifier, LassoFederationPrivate* private_data } LassoHttpMethod struct LassoIdentity { GHashTable* federations, gboolean is_dirty, LassoIdentityPrivate* private_data } struct LassoLecp { LassoLibAuthnRequestEnvelope* authnRequestEnvelope, LassoLibAuthnResponseEnvelope* authnResponseEnvelope, char* assertionConsumerServiceURL, void* private_data } struct LassoLibAssertion { char* InResponseTo } struct LassoLibAuthenticationStatement { LassoLibAuthnContext* AuthnContext, char* ReauthenticateOnOrAfter, char* SessionIndex } struct LassoLibAuthnContext { char* AuthnContextClassRef, char* AuthnContextStatementRef, void* AuthenticationContextStatement } struct LassoLibAuthnRequest { GList* Extension, char* ProviderID, char* AffiliationID, char* NameIDPolicy, gboolean ForceAuthn, gboolean IsPassive, char* ProtocolProfile, char* AssertionConsumerServiceID, LassoLibRequestAuthnContext* RequestAuthnContext, char* RelayState, LassoLibScoping* Scoping, char* consent } struct LassoLibAuthnRequestEnvelope { GList* Extension, LassoLibAuthnRequest* AuthnRequest, char* ProviderID, char* ProviderName, char* AssertionConsumerServiceURL, LassoLibIDPList* IDPList, gboolean IsPassive } struct LassoLibAuthnResponse { GList* Extension, char* ProviderID, char* RelayState, char* consent } struct LassoLibAuthnResponseEnvelope { GList* Extension, LassoLibAuthnResponse* AuthnResponse, char* AssertionConsumerServiceURL } struct LassoLibFederationTerminationNotification { GList* Extension, char* ProviderID, LassoSamlNameIdentifier* NameIdentifier, char* consent, char* RelayState } struct LassoLibIDPEntries { GList* IDPEntry } struct LassoLibIDPEntry { char* ProviderID, char* ProviderName, char* Loc } struct LassoLibIDPList { LassoLibIDPEntries* IDPEntries, char* GetComplete } struct LassoLibLogoutRequest { GList* Extension, char* ProviderID, LassoSamlNameIdentifier* NameIdentifier, char* SessionIndex, char* RelayState, char* consent, char* NotOnOrAfter } struct LassoLibLogoutResponse { } struct LassoLibNameIdentifierMappingRequest { GList* Extension, char* ProviderID, LassoSamlNameIdentifier* NameIdentifier, char* TargetNamespace, char* consent } struct LassoLibNameIdentifierMappingResponse { GList* Extension, char* ProviderID, LassoSamlpStatus* Status, LassoSamlNameIdentifier* NameIdentifier } struct LassoLibRegisterNameIdentifierRequest { GList* Extension, char* ProviderID, LassoSamlNameIdentifier* IDPProvidedNameIdentifier, LassoSamlNameIdentifier* SPProvidedNameIdentifier, LassoSamlNameIdentifier* OldProvidedNameIdentifier, char* RelayState } struct LassoLibRegisterNameIdentifierResponse { } struct LassoLibRequestAuthnContext { GList* AuthnContextClassRef, GList* AuthnContextStatementRef, char* AuthnContextComparison } struct LassoLibScoping { int ProxyCount, LassoLibIDPList* IDPList } struct LassoLibStatusResponse { GList* Extension, char* ProviderID, LassoSamlpStatus* Status, char* RelayState } struct LassoLibSubject { LassoSamlNameIdentifier* IDPProvidedNameIdentifier } struct LassoLogin { LassoLoginProtocolProfile protocolProfile, gchar* assertionArtifact, LassoSamlAssertion* assertion, gchar* nameIDPolicy, LassoHttpMethod http_method, LassoLoginPrivate* private_data } LassoLoginProtocolProfile struct LassoLogout { LassoNode* initial_request, LassoNode* initial_response, gchar* initial_remote_providerID, gint providerID_index, LassoHttpMethod initial_http_request_method, LassoLogoutPrivate* private_data } LassoMdProtocolType LassoMessageFormat struct LassoMiscTextNode { char* content, char* name, char* ns_href, char* ns_prefix, gboolean text_child } struct LassoNameIdManagement { void* private_data } struct LassoNameIdentifierMapping { gchar* targetNameIdentifier, void* private_data } struct LassoNameRegistration { LassoSamlNameIdentifier* oldNameIdentifier, void* private_data } struct LassoNode { } struct LassoProfile { LassoServer* server, LassoNode* request, LassoNode* response, LassoNode* nameIdentifier, gchar* remote_providerID, gchar* msg_url, gchar* msg_body, gchar* msg_relayState, LassoIdentity* identity, LassoSession* session, LassoHttpMethod http_request_method, gint signature_status, LassoProfilePrivate* private_data } LassoProtocolConformance struct LassoProvider { gchar* ProviderID, LassoProviderRole role, char* metadata_filename, gchar* public_key, gchar* ca_cert_chain, LassoProviderPrivate* private_data } LassoProviderRole LassoRequestType struct LassoSaml2Action { char* content, char* Namespace } struct LassoSaml2Advice { GList* AssertionIDRef, GList* AssertionURIRef, GList* Assertion, GList* EncryptedAssertion } struct LassoSaml2Assertion { LassoSaml2NameID* Issuer, LassoSaml2Subject* Subject, LassoSaml2Conditions* Conditions, LassoSaml2Advice* Advice, GList* Statement, GList* AuthnStatement, GList* AuthzDecisionStatement, GList* AttributeStatement, char* Version, char* ID, char* IssueInstant, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file, gboolean encryption_activated, char* encryption_public_key_str, LassoEncryptionSymKeyType encryption_sym_key_type } struct LassoSaml2Attribute { GList* AttributeValue, char* Name, char* NameFormat, char* FriendlyName } struct LassoSaml2AttributeStatement { GList* Attribute, GList* EncryptedAttribute } struct LassoSaml2AttributeValue { GList* any } struct LassoSaml2AudienceRestriction { char* Audience } struct LassoSaml2AuthnContext { char* AuthnContextClassRef, char* AuthnContextDeclRef, char* AuthenticatingAuthority } struct LassoSaml2AuthnStatement { LassoSaml2SubjectLocality* SubjectLocality, LassoSaml2AuthnContext* AuthnContext, char* AuthnInstant, char* SessionIndex, char* SessionNotOnOrAfter } struct LassoSaml2AuthzDecisionStatement { LassoSaml2Action* Action, LassoSaml2Evidence* Evidence, char* Resource, char* Decision } struct LassoSaml2BaseIDAbstract { char* NameQualifier, char* SPNameQualifier } struct LassoSaml2ConditionAbstract { } struct LassoSaml2Conditions { GList* Condition, GList* AudienceRestriction, GList* OneTimeUse, GList* ProxyRestriction, char* NotBefore, char* NotOnOrAfter } struct LassoSaml2EncryptedElement { xmlNode* EncryptedData, GList* EncryptedKey, LassoNode* original_data } struct LassoSaml2Evidence { GList* AssertionIDRef, GList* AssertionURIRef, GList* Assertion, GList* EncryptedAssertion } struct LassoSaml2KeyInfoConfirmationData { } struct LassoSaml2NameID { char* content, char* Format, char* SPProvidedID, char* NameQualifier, char* SPNameQualifier } struct LassoSaml2OneTimeUse { } struct LassoSaml2ProxyRestriction { char* Audience, char* Count } struct LassoSaml2StatementAbstract { } struct LassoSaml2Subject { LassoSaml2BaseIDAbstract* BaseID, LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, LassoSaml2SubjectConfirmation* SubjectConfirmation } struct LassoSaml2SubjectConfirmation { LassoSaml2BaseIDAbstract* BaseID, LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, LassoSaml2SubjectConfirmationData* SubjectConfirmationData, char* Method } struct LassoSaml2SubjectConfirmationData { char* NotBefore, char* NotOnOrAfter, char* Recipient, char* InResponseTo, char* Address } struct LassoSaml2SubjectLocality { char* Address, char* DNSName } struct LassoSamlAdvice { GList* AssertionIDReference, LassoNode* Assertion } struct LassoSamlAssertion { LassoSamlConditions* Conditions, LassoSamlAdvice* Advice, void* Statement, LassoSamlSubjectStatement* SubjectStatement, LassoSamlAuthenticationStatement* AuthenticationStatement, void* AuthorizationDecisionStatement, LassoSamlAttributeStatement* AttributeStatement, int MajorVersion, int MinorVersion, char* AssertionID, char* Issuer, char* IssueInstant, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlAttribute { gchar* attributeName, gchar* attributeNameSpace, GList* AttributeValue } struct LassoSamlAttributeDesignator { char* AttributeName, char* AttributeNamespace } struct LassoSamlAttributeStatement { GList* Attribute } struct LassoSamlAttributeValue { GList* any } struct LassoSamlAudienceRestrictionCondition { GList* Audience } struct LassoSamlAuthenticationStatement { LassoSamlSubjectLocality* SubjectLocality, GList* AuthorityBinding, char* AuthenticationMethod, char* AuthenticationInstant } struct LassoSamlAuthorityBinding { char* AuthorityKind, char* Location, char* Binding } struct LassoSamlConditionAbstract { } struct LassoSamlConditions { GList* Condition, GList* AudienceRestrictionCondition, char* NotBefore, char* NotOnOrAfter } struct LassoSamlNameIdentifier { char* NameQualifier, char* Format, char* content } struct LassoSamlStatementAbstract { } struct LassoSamlSubject { LassoSamlNameIdentifier* NameIdentifier, LassoSamlSubjectConfirmation* SubjectConfirmation } struct LassoSamlSubjectConfirmation { GList* ConfirmationMethod, char* SubjectConfirmationData, LassoDsKeyInfo* KeyInfo } struct LassoSamlSubjectLocality { char* IPAddress, char* DNSAddress } struct LassoSamlSubjectStatement { } struct LassoSamlSubjectStatementAbstract { LassoSamlSubject* Subject } struct LassoSamlp2ArtifactResolve { char* Artifact } struct LassoSamlp2ArtifactResponse { LassoNode* any } struct LassoSamlp2AssertionIDRequest { char* AssertionIDRef } struct LassoSamlp2AttributeQuery { LassoSaml2Attribute* Attribute } struct LassoSamlp2AuthnQuery { LassoSamlp2RequestedAuthnContext* RequestedAuthnContext, char* SessionIndex } struct LassoSamlp2AuthnRequest { LassoSaml2Subject* Subject, LassoSamlp2NameIDPolicy* NameIDPolicy, LassoSaml2Conditions* Conditions, LassoSamlp2RequestedAuthnContext* RequestedAuthnContext, LassoSamlp2Scoping* Scoping, gboolean ForceAuthn, gboolean IsPassive, char* ProtocolBinding, int AssertionConsumerServiceIndex, char* AssertionConsumerServiceURL, int AttributeConsumingServiceIndex, char* ProviderName, char* relayState } struct LassoSamlp2AuthzDecisionQuery { LassoSaml2Action* Action, LassoSaml2Evidence* Evidence, char* Resource } struct LassoSamlp2Extensions { } struct LassoSamlp2IDPEntry { char* ProviderID, char* Name, char* Loc } struct LassoSamlp2IDPList { LassoSamlp2IDPEntry* IDPEntry, char* GetComplete } struct LassoSamlp2LogoutRequest { LassoSaml2BaseIDAbstract* BaseID, LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, char* SessionIndex, char* Reason, char* NotOnOrAfter, char* relayState } struct LassoSamlp2LogoutResponse { char* relayState } struct LassoSamlp2ManageNameIDRequest { LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, char* NewID, LassoSaml2EncryptedElement* NewEncryptedID, LassoSamlp2Terminate* Terminate } struct LassoSamlp2ManageNameIDResponse { } struct LassoSamlp2NameIDMappingRequest { LassoSaml2BaseIDAbstract* BaseID, LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID, LassoSamlp2NameIDPolicy* NameIDPolicy } struct LassoSamlp2NameIDMappingResponse { LassoSaml2NameID* NameID, LassoSaml2EncryptedElement* EncryptedID } struct LassoSamlp2NameIDPolicy { char* Format, char* SPNameQualifier, gboolean AllowCreate } struct LassoSamlp2RequestAbstract { LassoSaml2NameID* Issuer, LassoSamlp2Extensions* Extensions, char* ID, char* Version, char* IssueInstant, char* Destination, char* Consent, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlp2RequestedAuthnContext { GList* AuthnContextClassRef, GList* AuthnContextDeclRef, char* Comparison } struct LassoSamlp2Response { GList* Assertion, GList* EncryptedAssertion } struct LassoSamlp2Scoping { LassoSamlp2IDPList* IDPList, char* RequesterID, char* ProxyCount } struct LassoSamlp2Status { LassoSamlp2StatusCode* StatusCode, char* StatusMessage, LassoSamlp2StatusDetail* StatusDetail } struct LassoSamlp2StatusCode { LassoSamlp2StatusCode* StatusCode, char* Value } struct LassoSamlp2StatusDetail { } struct LassoSamlp2StatusResponse { LassoSaml2NameID* Issuer, LassoSamlp2Extensions* Extensions, LassoSamlp2Status* Status, char* ID, char* InResponseTo, char* Version, char* IssueInstant, char* Destination, char* Consent, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlp2SubjectQueryAbstract { LassoSaml2Subject* Subject } struct LassoSamlp2Terminate { } struct LassoSamlpRequest { char* AssertionArtifact } struct LassoSamlpRequestAbstract { GList* RespondWith, char* RequestID, int MajorVersion, int MinorVersion, char* IssueInstant, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlpResponse { LassoSamlpStatus* Status, GList* Assertion } struct LassoSamlpResponseAbstract { char* ResponseID, char* InResponseTo, int MajorVersion, int MinorVersion, char* IssueInstant, char* Recipient, LassoSignatureType sign_type, LassoSignatureMethod sign_method, char* private_key_file, char* certificate_file } struct LassoSamlpStatus { LassoSamlpStatusCode* StatusCode, char* StatusMessage } struct LassoSamlpStatusCode { LassoSamlpStatusCode* StatusCode, char* Value } struct LassoServer { GHashTable* providers, GHashTable* services, gchar* private_key, gchar* private_key_password, gchar* certificate, LassoSignatureMethod signature_method, LassoServerPrivate* private_data } struct LassoSession { GHashTable* assertions, gboolean is_dirty, LassoSessionPrivate* private_data } LassoSignatureMethod LassoSignatureType int lasso_check_version ( int major, int minor, int subminor, LassoCheckVersionMode mode ) gint lasso_defederation_build_notification_msg ( LassoDefederation* defederation ) None lasso_defederation_destroy ( LassoDefederation* defederation ) GType lasso_defederation_get_type ( ) gint lasso_defederation_init_notification ( LassoDefederation* defederation, gchar* remote_providerID, LassoHttpMethod http_method ) LassoDefederation* lasso_defederation_new ( LassoServer* server ) gint lasso_defederation_process_notification_msg ( LassoDefederation* defederation, gchar* notification_msg ) gint lasso_defederation_validate_notification ( LassoDefederation* defederation ) GType lasso_ds_key_info_get_type ( ) LassoDsKeyInfo* lasso_ds_key_info_new ( ) GType lasso_ds_key_value_get_type ( ) LassoDsKeyValue* lasso_ds_key_value_new ( ) GType lasso_ds_rsa_key_value_get_type ( ) LassoDsRsaKeyValue* lasso_ds_rsa_key_value_new ( ) None lasso_ecp_destroy ( LassoEcp* ecp ) GType lasso_ecp_get_type ( ) LassoEcp* lasso_ecp_new ( LassoServer* server ) int lasso_ecp_process_authn_request_msg ( LassoEcp* ecp, const char* authn_request_msg ) int lasso_ecp_process_response_msg ( LassoEcp* ecp, const char* response_msg ) None lasso_federation_build_local_name_identifier ( LassoFederation* federation, const gchar* nameQualifier, const gchar* format, const gchar* content ) None lasso_federation_destroy ( LassoFederation* federation ) GType lasso_federation_get_type ( ) LassoFederation* lasso_federation_new ( gchar* remote_providerID ) gboolean lasso_federation_verify_name_identifier ( LassoFederation* federation, LassoNode* name_identifier ) char* lasso_get_prefix_for_dst_service_href ( const char* href ) gchar* lasso_get_prefix_for_idwsf2_dst_service_href ( const gchar* href ) None lasso_identity_destroy ( LassoIdentity* identity ) gchar* lasso_identity_dump ( LassoIdentity* identity ) LassoFederation* lasso_identity_get_federation ( LassoIdentity* identity, const char* providerID ) GType lasso_identity_get_type ( ) LassoIdentity* lasso_identity_new ( ) LassoIdentity* lasso_identity_new_from_dump ( const gchar* dump ) int lasso_init ( ) int lasso_lecp_build_authn_request_envelope_msg ( LassoLecp* lecp ) int lasso_lecp_build_authn_request_msg ( LassoLecp* lecp ) int lasso_lecp_build_authn_response_envelope_msg ( LassoLecp* lecp ) int lasso_lecp_build_authn_response_msg ( LassoLecp* lecp ) None lasso_lecp_destroy ( LassoLecp* lecp ) GType lasso_lecp_get_type ( ) int lasso_lecp_init_authn_request ( LassoLecp* lecp, const char* remote_providerID ) LassoLecp* lasso_lecp_new ( LassoServer* server ) int lasso_lecp_process_authn_request_envelope_msg ( LassoLecp* lecp, const char* request_msg ) int lasso_lecp_process_authn_request_msg ( LassoLecp* lecp, const char* authn_request_msg ) int lasso_lecp_process_authn_response_envelope_msg ( LassoLecp* lecp, const char* response_msg ) GType lasso_lib_assertion_get_type ( ) LassoLibAssertion* lasso_lib_assertion_new ( ) LassoLibAssertion* lasso_lib_assertion_new_full ( const char* issuer, const char* requestID, const char* audience, const char* notBefore, const char* notOnOrAfter ) GType lasso_lib_authentication_statement_get_type ( ) LassoLibAuthenticationStatement* lasso_lib_authentication_statement_new ( ) LassoLibAuthenticationStatement* lasso_lib_authentication_statement_new_full ( const char* authenticationMethod, const char* authenticationInstant, const char* reauthenticateOnOrAfter, LassoSamlNameIdentifier* sp_identifier, LassoSamlNameIdentifier* idp_identifier ) GType lasso_lib_authn_context_get_type ( ) LassoNode* lasso_lib_authn_context_new ( ) GType lasso_lib_authn_request_envelope_get_type ( ) LassoLibAuthnRequestEnvelope* lasso_lib_authn_request_envelope_new ( ) LassoLibAuthnRequestEnvelope* lasso_lib_authn_request_envelope_new_full ( LassoLibAuthnRequest* authnRequest, char* providerID, char* assertionConsumerServiceURL ) GType lasso_lib_authn_request_get_type ( ) LassoLibAuthnRequest* lasso_lib_authn_request_new ( ) GType lasso_lib_authn_response_envelope_get_type ( ) LassoLibAuthnResponseEnvelope* lasso_lib_authn_response_envelope_new ( LassoLibAuthnResponse* response, char* assertionConsumerServiceURL ) GType lasso_lib_authn_response_get_type ( ) LassoNode* lasso_lib_authn_response_new ( char* providerID, LassoLibAuthnRequest* request ) GType lasso_lib_federation_termination_notification_get_type ( ) LassoNode* lasso_lib_federation_termination_notification_new ( ) LassoLibFederationTerminationNotification* lasso_lib_federation_termination_notification_new_full ( char* providerID, LassoSamlNameIdentifier* nameIdentifier, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_idp_entries_get_type ( ) LassoNode* lasso_lib_idp_entries_new ( ) GType lasso_lib_idp_entry_get_type ( ) LassoNode* lasso_lib_idp_entry_new ( ) GType lasso_lib_idp_list_get_type ( ) LassoNode* lasso_lib_idp_list_new ( ) GType lasso_lib_logout_request_get_type ( ) LassoNode* lasso_lib_logout_request_new ( ) LassoLibLogoutRequest* lasso_lib_logout_request_new_full ( char* providerID, LassoSamlNameIdentifier* nameIdentifier, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_logout_response_get_type ( ) LassoNode* lasso_lib_logout_response_new ( ) LassoLibLogoutResponse* lasso_lib_logout_response_new_full ( char* providerID, const char* statusCodeValue, LassoLibLogoutRequest* request, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_name_identifier_mapping_request_get_type ( ) LassoNode* lasso_lib_name_identifier_mapping_request_new ( ) LassoLibNameIdentifierMappingRequest* lasso_lib_name_identifier_mapping_request_new_full ( char* providerID, LassoSamlNameIdentifier* nameIdentifier, const char* targetNamespace, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_name_identifier_mapping_response_get_type ( ) LassoNode* lasso_lib_name_identifier_mapping_response_new ( ) LassoLibNameIdentifierMappingResponse* lasso_lib_name_identifier_mapping_response_new_full ( char* provideRID, const char* statusCodeValue, LassoLibNameIdentifierMappingRequest* request, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_register_name_identifier_request_get_type ( ) LassoNode* lasso_lib_register_name_identifier_request_new ( ) LassoLibRegisterNameIdentifierRequest* lasso_lib_register_name_identifier_request_new_full ( const char* providerID, LassoSamlNameIdentifier* idpNameIdentifier, LassoSamlNameIdentifier* spNameIdentifier, LassoSamlNameIdentifier* oldNameIdentifier, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_register_name_identifier_response_get_type ( ) LassoNode* lasso_lib_register_name_identifier_response_new ( ) LassoLibRegisterNameIdentifierResponse* lasso_lib_register_name_identifier_response_new_full ( const char* providerID, const char* statusCodeValue, LassoLibRegisterNameIdentifierRequest* request, LassoSignatureType sign_type, LassoSignatureMethod sign_method ) GType lasso_lib_request_authn_context_get_type ( ) LassoLibRequestAuthnContext* lasso_lib_request_authn_context_new ( ) GType lasso_lib_scoping_get_type ( ) LassoLibScoping* lasso_lib_scoping_new ( ) GType lasso_lib_status_response_get_type ( ) LassoNode* lasso_lib_status_response_new ( ) GType lasso_lib_subject_get_type ( ) LassoLibSubject* lasso_lib_subject_new ( ) gint lasso_login_accept_sso ( LassoLogin* login ) gint lasso_login_build_artifact_msg ( LassoLogin* login, LassoHttpMethod http_method ) int lasso_login_build_assertion ( LassoLogin* login, const char* authenticationMethod, const char* authenticationInstant, const char* reauthenticateOnOrAfter, const char* notBefore, const char* notOnOrAfter ) gint lasso_login_build_authn_request_msg ( LassoLogin* login ) gint lasso_login_build_authn_response_msg ( LassoLogin* login ) gint lasso_login_build_request_msg ( LassoLogin* login ) gint lasso_login_build_response_msg ( LassoLogin* login, gchar* remote_providerID ) None lasso_login_destroy ( LassoLogin* login ) gchar* lasso_login_dump ( LassoLogin* login ) GType lasso_login_get_type ( ) gint lasso_login_init_authn_request ( LassoLogin* login, const gchar* remote_providerID, LassoHttpMethod http_method ) gint lasso_login_init_idp_initiated_authn_request ( LassoLogin* login, const gchar* remote_providerID ) gint lasso_login_init_request ( LassoLogin* login, gchar* response_msg, LassoHttpMethod response_http_method ) gboolean lasso_login_must_ask_for_consent ( LassoLogin* login ) gboolean lasso_login_must_authenticate ( LassoLogin* login ) LassoLogin* lasso_login_new ( LassoServer* server ) LassoLogin* lasso_login_new_from_dump ( LassoServer* server, const gchar* dump ) int lasso_login_process_authn_request_msg ( LassoLogin* login, const char* authn_request_msg ) gint lasso_login_process_authn_response_msg ( LassoLogin* login, gchar* authn_response_msg ) int lasso_login_process_paos_response_msg ( LassoLogin* login, gchar* msg ) gint lasso_login_process_request_msg ( LassoLogin* login, gchar* request_msg ) gint lasso_login_process_response_msg ( LassoLogin* login, gchar* response_msg ) int lasso_login_set_resourceId ( LassoLogin* login, const char* content ) int lasso_login_validate_request_msg ( LassoLogin* login, gboolean authentication_result, gboolean is_consent_obtained ) gint lasso_logout_build_request_msg ( LassoLogout* logout ) gint lasso_logout_build_response_msg ( LassoLogout* logout ) None lasso_logout_destroy ( LassoLogout* logout ) gchar* lasso_logout_dump ( LassoLogout* logout ) gchar* lasso_logout_get_next_providerID ( LassoLogout* logout ) GType lasso_logout_get_type ( ) gint lasso_logout_init_request ( LassoLogout* logout, gchar* remote_providerID, LassoHttpMethod request_method ) LassoLogout* lasso_logout_new ( LassoServer* server ) LassoLogout* lasso_logout_new_from_dump ( LassoServer* server, const gchar* dump ) gint lasso_logout_process_request_msg ( LassoLogout* logout, gchar* request_msg ) gint lasso_logout_process_response_msg ( LassoLogout* logout, gchar* response_msg ) gint lasso_logout_reset_providerID_index ( LassoLogout* logout ) gint lasso_logout_validate_request ( LassoLogout* logout ) GType lasso_misc_text_node_get_type ( ) LassoNode* lasso_misc_text_node_new ( ) LassoMiscTextNode* lasso_misc_text_node_new_with_string ( char* content ) gint lasso_name_id_management_build_request_msg ( LassoNameIdManagement* name_id_management ) int lasso_name_id_management_build_response_msg ( LassoNameIdManagement* name_id_management ) None lasso_name_id_management_destroy ( LassoNameIdManagement* name_id_management ) char* lasso_name_id_management_dump ( LassoNameIdManagement* name_id_management ) GType lasso_name_id_management_get_type ( ) gint lasso_name_id_management_init_request ( LassoNameIdManagement* name_id_management, char* remote_provider_id, char* new_name_id, LassoHttpMethod http_method ) LassoNameIdManagement* lasso_name_id_management_new ( LassoServer* server ) LassoNameIdManagement* lasso_name_id_management_new_from_dump ( LassoServer* server, const char* dump ) gint lasso_name_id_management_process_request_msg ( LassoNameIdManagement* name_id_management, gchar* request_msg ) gint lasso_name_id_management_process_response_msg ( LassoNameIdManagement* name_id_management, gchar* response_msg ) gint lasso_name_id_management_validate_request ( LassoNameIdManagement* name_id_management ) gint lasso_name_identifier_mapping_build_request_msg ( LassoNameIdentifierMapping* mapping ) gint lasso_name_identifier_mapping_build_response_msg ( LassoNameIdentifierMapping* mapping ) None lasso_name_identifier_mapping_destroy ( LassoNameIdentifierMapping* mapping ) GType lasso_name_identifier_mapping_get_type ( ) gint lasso_name_identifier_mapping_init_request ( LassoNameIdentifierMapping* mapping, gchar* targetNameSpace, gchar* remote_providerID ) LassoNameIdentifierMapping* lasso_name_identifier_mapping_new ( LassoServer* server ) gint lasso_name_identifier_mapping_process_request_msg ( LassoNameIdentifierMapping* mapping, gchar* request_msg ) gint lasso_name_identifier_mapping_process_response_msg ( LassoNameIdentifierMapping* mapping, gchar* response_msg ) gint lasso_name_identifier_mapping_validate_request ( LassoNameIdentifierMapping* mapping ) gint lasso_name_registration_build_request_msg ( LassoNameRegistration* name_registration ) gint lasso_name_registration_build_response_msg ( LassoNameRegistration* name_registration ) None lasso_name_registration_destroy ( LassoNameRegistration* name_registration ) gchar* lasso_name_registration_dump ( LassoNameRegistration* name_registration ) GType lasso_name_registration_get_type ( ) gint lasso_name_registration_init_request ( LassoNameRegistration* name_registration, char* remote_providerID, LassoHttpMethod http_method ) LassoNameRegistration* lasso_name_registration_new ( LassoServer* server ) LassoNameRegistration* lasso_name_registration_new_from_dump ( LassoServer* server, const char* dump ) gint lasso_name_registration_process_request_msg ( LassoNameRegistration* name_registration, gchar* request_msg ) gint lasso_name_registration_process_response_msg ( LassoNameRegistration* name_registration, gchar* response_msg ) gint lasso_name_registration_validate_request ( LassoNameRegistration* name_registration ) None lasso_node_destroy ( LassoNode* node ) char* lasso_node_dump ( LassoNode* node ) char* lasso_node_export_to_base64 ( LassoNode* node ) char* lasso_node_export_to_ecp_soap_response ( LassoNode* node, const char* assertionConsumerURL ) char* lasso_node_export_to_paos_request ( LassoNode* node, const char* issuer, const char* responseConsumerURL, const char* relay_state ) char* lasso_node_export_to_query ( LassoNode* node, LassoSignatureMethod sign_method, const char* private_key_file ) char* lasso_node_export_to_soap ( LassoNode* node ) gchar* lasso_node_export_to_xml ( LassoNode* node ) GType lasso_node_get_type ( ) xmlNode* lasso_node_get_xmlNode ( LassoNode* node, gboolean lasso_dump ) LassoMessageFormat lasso_node_init_from_message ( LassoNode* node, const char* message ) gboolean lasso_node_init_from_query ( LassoNode* node, const char* query ) int lasso_node_init_from_xml ( LassoNode* node, xmlNode* xmlnode ) LassoNode* lasso_node_new ( ) LassoNode* lasso_node_new_from_dump ( const char* dump ) LassoNode* lasso_node_new_from_soap ( const char* soap ) LassoNode* lasso_node_new_from_xmlNode ( xmlNode* node ) char* lasso_profile_get_artifact ( LassoProfile* profile ) char* lasso_profile_get_artifact_message ( LassoProfile* profile ) LassoIdentity* lasso_profile_get_identity ( LassoProfile* profile ) LassoNode* lasso_profile_get_nameIdentifier ( LassoProfile* profile ) LassoRequestType lasso_profile_get_request_type_from_soap_msg ( const gchar* soap ) LassoSession* lasso_profile_get_session ( LassoProfile* profile ) GType lasso_profile_get_type ( ) gboolean lasso_profile_is_identity_dirty ( LassoProfile* profile ) gboolean lasso_profile_is_liberty_query ( const gchar* query ) gboolean lasso_profile_is_saml_query ( const gchar* query ) gboolean lasso_profile_is_session_dirty ( LassoProfile* profile ) None lasso_profile_set_artifact_message ( LassoProfile* profile, char* message ) gint lasso_profile_set_identity_from_dump ( LassoProfile* profile, const gchar* dump ) gint lasso_profile_set_session_from_dump ( LassoProfile* profile, const gchar* dump ) gboolean lasso_provider_accept_http_method ( LassoProvider* provider, LassoProvider* remote_provider, LassoMdProtocolType protocol_type, LassoHttpMethod http_method, gboolean initiate_profile ) gchar* lasso_provider_get_assertion_consumer_service_url ( LassoProvider* provider, const char* service_id ) gchar* lasso_provider_get_base64_succinct_id ( LassoProvider* provider ) LassoHttpMethod lasso_provider_get_first_http_method ( LassoProvider* provider, LassoProvider* remote_provider, LassoMdProtocolType protocol_type ) GList* lasso_provider_get_metadata_list ( LassoProvider* provider, const char* name ) gchar* lasso_provider_get_metadata_one ( LassoProvider* provider, const char* name ) xmlNode* lasso_provider_get_organization ( LassoProvider* provider ) LassoProtocolConformance lasso_provider_get_protocol_conformance ( LassoProvider* provider ) GType lasso_provider_get_type ( ) gboolean lasso_provider_has_protocol_profile ( LassoProvider* provider, LassoMdProtocolType protocol_type, const char* protocol_profile ) LassoProvider* lasso_provider_new ( LassoProviderRole role, const char* metadata, const char* public_key, const char* ca_cert_chain ) LassoProvider* lasso_provider_new_from_dump ( const gchar* dump ) None lasso_provider_set_encryption_mode ( LassoProvider* provider, LassoEncryptionMode encryption_mode ) None lasso_provider_set_encryption_sym_key_type ( LassoProvider* provider, LassoEncryptionSymKeyType encryption_sym_key_type ) None lasso_register_dst_service ( const char* prefix, const char* href ) None lasso_register_idwsf2_dst_service ( const gchar* prefix, const gchar* href ) GType lasso_saml2_action_get_type ( ) LassoNode* lasso_saml2_action_new ( ) LassoSaml2Action* lasso_saml2_action_new_with_string ( char* content ) GType lasso_saml2_advice_get_type ( ) LassoNode* lasso_saml2_advice_new ( ) GType lasso_saml2_assertion_get_type ( ) LassoNode* lasso_saml2_assertion_new ( ) GType lasso_saml2_attribute_get_type ( ) LassoNode* lasso_saml2_attribute_new ( ) GType lasso_saml2_attribute_statement_get_type ( ) LassoNode* lasso_saml2_attribute_statement_new ( ) GType lasso_saml2_attribute_value_get_type ( ) LassoSaml2AttributeValue* lasso_saml2_attribute_value_new ( ) GType lasso_saml2_audience_restriction_get_type ( ) LassoNode* lasso_saml2_audience_restriction_new ( ) GType lasso_saml2_authn_context_get_type ( ) LassoNode* lasso_saml2_authn_context_new ( ) GType lasso_saml2_authn_statement_get_type ( ) LassoNode* lasso_saml2_authn_statement_new ( ) GType lasso_saml2_authz_decision_statement_get_type ( ) LassoNode* lasso_saml2_authz_decision_statement_new ( ) GType lasso_saml2_base_idabstract_get_type ( ) LassoNode* lasso_saml2_base_idabstract_new ( ) GType lasso_saml2_condition_abstract_get_type ( ) LassoNode* lasso_saml2_condition_abstract_new ( ) GType lasso_saml2_conditions_get_type ( ) LassoNode* lasso_saml2_conditions_new ( ) GType lasso_saml2_encrypted_element_get_type ( ) LassoNode* lasso_saml2_encrypted_element_new ( ) GType lasso_saml2_evidence_get_type ( ) LassoNode* lasso_saml2_evidence_new ( ) GType lasso_saml2_key_info_confirmation_data_get_type ( ) LassoNode* lasso_saml2_key_info_confirmation_data_new ( ) GType lasso_saml2_name_id_get_type ( ) LassoNode* lasso_saml2_name_id_new ( ) LassoSaml2NameID* lasso_saml2_name_id_new_with_string ( char* content ) GType lasso_saml2_one_time_use_get_type ( ) LassoNode* lasso_saml2_one_time_use_new ( ) GType lasso_saml2_proxy_restriction_get_type ( ) LassoNode* lasso_saml2_proxy_restriction_new ( ) GType lasso_saml2_statement_abstract_get_type ( ) LassoNode* lasso_saml2_statement_abstract_new ( ) GType lasso_saml2_subject_confirmation_data_get_type ( ) LassoNode* lasso_saml2_subject_confirmation_data_new ( ) GType lasso_saml2_subject_confirmation_get_type ( ) LassoNode* lasso_saml2_subject_confirmation_new ( ) GType lasso_saml2_subject_get_type ( ) GType lasso_saml2_subject_locality_get_type ( ) LassoNode* lasso_saml2_subject_locality_new ( ) LassoNode* lasso_saml2_subject_new ( ) GType lasso_saml_advice_get_type ( ) LassoNode* lasso_saml_advice_new ( ) GType lasso_saml_assertion_get_type ( ) LassoSamlAssertion* lasso_saml_assertion_new ( ) GType lasso_saml_attribute_designator_get_type ( ) LassoNode* lasso_saml_attribute_designator_new ( ) GType lasso_saml_attribute_get_type ( ) LassoSamlAttribute* lasso_saml_attribute_new ( ) GType lasso_saml_attribute_statement_get_type ( ) LassoSamlAttributeStatement* lasso_saml_attribute_statement_new ( ) GType lasso_saml_attribute_value_get_type ( ) LassoSamlAttributeValue* lasso_saml_attribute_value_new ( ) GType lasso_saml_audience_restriction_condition_get_type ( ) LassoSamlAudienceRestrictionCondition* lasso_saml_audience_restriction_condition_new ( ) LassoSamlAudienceRestrictionCondition* lasso_saml_audience_restriction_condition_new_full ( const char* audience ) GType lasso_saml_authentication_statement_get_type ( ) LassoNode* lasso_saml_authentication_statement_new ( ) GType lasso_saml_authority_binding_get_type ( ) LassoNode* lasso_saml_authority_binding_new ( ) GType lasso_saml_condition_abstract_get_type ( ) GType lasso_saml_conditions_get_type ( ) LassoSamlConditions* lasso_saml_conditions_new ( ) GType lasso_saml_name_identifier_get_type ( ) LassoSamlNameIdentifier* lasso_saml_name_identifier_new ( ) assoSamlNameIdentifier* lasso_saml_name_identifier_new_from_xmlNode ( xmlNode* node ) GType lasso_saml_statement_abstract_get_type ( ) GType lasso_saml_subject_confirmation_get_type ( ) LassoSamlSubjectConfirmation* lasso_saml_subject_confirmation_new ( ) GType lasso_saml_subject_get_type ( ) GType lasso_saml_subject_locality_get_type ( ) LassoNode* lasso_saml_subject_locality_new ( ) LassoNode* lasso_saml_subject_new ( ) GType lasso_saml_subject_statement_abstract_get_type ( ) GType lasso_saml_subject_statement_get_type ( ) LassoNode* lasso_saml_subject_statement_new ( ) GType lasso_samlp2_artifact_resolve_get_type ( ) LassoNode* lasso_samlp2_artifact_resolve_new ( ) GType lasso_samlp2_artifact_response_get_type ( ) LassoNode* lasso_samlp2_artifact_response_new ( ) GType lasso_samlp2_assertion_idrequest_get_type ( ) LassoNode* lasso_samlp2_assertion_idrequest_new ( ) GType lasso_samlp2_attribute_query_get_type ( ) LassoNode* lasso_samlp2_attribute_query_new ( ) GType lasso_samlp2_authn_query_get_type ( ) LassoNode* lasso_samlp2_authn_query_new ( ) GType lasso_samlp2_authn_request_get_type ( ) LassoNode* lasso_samlp2_authn_request_new ( ) GType lasso_samlp2_authz_decision_query_get_type ( ) LassoNode* lasso_samlp2_authz_decision_query_new ( ) GType lasso_samlp2_extensions_get_type ( ) LassoNode* lasso_samlp2_extensions_new ( ) GType lasso_samlp2_idp_entry_get_type ( ) LassoNode* lasso_samlp2_idp_entry_new ( ) GType lasso_samlp2_idp_list_get_type ( ) LassoNode* lasso_samlp2_idp_list_new ( ) GType lasso_samlp2_logout_request_get_type ( ) LassoNode* lasso_samlp2_logout_request_new ( ) GType lasso_samlp2_logout_response_get_type ( ) LassoNode* lasso_samlp2_logout_response_new ( ) GType lasso_samlp2_manage_name_id_request_get_type ( ) LassoNode* lasso_samlp2_manage_name_id_request_new ( ) GType lasso_samlp2_manage_name_id_response_get_type ( ) LassoNode* lasso_samlp2_manage_name_id_response_new ( ) GType lasso_samlp2_name_id_mapping_request_get_type ( ) LassoNode* lasso_samlp2_name_id_mapping_request_new ( ) GType lasso_samlp2_name_id_mapping_response_get_type ( ) LassoNode* lasso_samlp2_name_id_mapping_response_new ( ) GType lasso_samlp2_name_id_policy_get_type ( ) LassoNode* lasso_samlp2_name_id_policy_new ( ) GType lasso_samlp2_request_abstract_get_type ( ) LassoNode* lasso_samlp2_request_abstract_new ( ) GType lasso_samlp2_requested_authn_context_get_type ( ) LassoNode* lasso_samlp2_requested_authn_context_new ( ) GType lasso_samlp2_response_get_type ( ) LassoNode* lasso_samlp2_response_new ( ) GType lasso_samlp2_scoping_get_type ( ) LassoNode* lasso_samlp2_scoping_new ( ) GType lasso_samlp2_status_code_get_type ( ) LassoNode* lasso_samlp2_status_code_new ( ) GType lasso_samlp2_status_detail_get_type ( ) LassoNode* lasso_samlp2_status_detail_new ( ) GType lasso_samlp2_status_get_type ( ) LassoNode* lasso_samlp2_status_new ( ) GType lasso_samlp2_status_response_get_type ( ) LassoNode* lasso_samlp2_status_response_new ( ) GType lasso_samlp2_subject_query_abstract_get_type ( ) LassoNode* lasso_samlp2_subject_query_abstract_new ( ) GType lasso_samlp2_terminate_get_type ( ) LassoNode* lasso_samlp2_terminate_new ( ) GType lasso_samlp_request_abstract_get_type ( ) GType lasso_samlp_request_get_type ( ) LassoNode* lasso_samlp_request_new ( ) None lasso_samlp_response_abstract_fill ( LassoSamlpResponseAbstract* response, const char* InResponseTo, const char* Recipient ) GType lasso_samlp_response_abstract_get_type ( ) GType lasso_samlp_response_get_type ( ) LassoNode* lasso_samlp_response_new ( ) GType lasso_samlp_status_code_get_type ( ) LassoSamlpStatusCode* lasso_samlp_status_code_new ( ) GType lasso_samlp_status_get_type ( ) LassoSamlpStatus* lasso_samlp_status_new ( ) gint lasso_server_add_provider ( LassoServer* server, LassoProviderRole role, const gchar* metadata, const gchar* public_key, const gchar* ca_cert_chain ) gint lasso_server_add_service ( LassoServer* server, LassoNode* service ) gint lasso_server_add_service_from_dump ( LassoServer* server, const gchar* dump ) None lasso_server_destroy ( LassoServer* server ) gchar* lasso_server_dump ( LassoServer* server ) LassoProvider* lasso_server_get_provider ( LassoServer* server, const gchar* providerID ) GType lasso_server_get_type ( ) int lasso_server_load_affiliation ( LassoServer* server, const gchar* filename ) LassoServer* lasso_server_new ( const gchar* metadata, const gchar* private_key, const gchar* private_key_password, const gchar* certificate ) LassoServer* lasso_server_new_from_dump ( const gchar* dump ) int lasso_server_set_encryption_private_key ( LassoServer* server, const gchar* filename ) None lasso_session_destroy ( LassoSession* session ) gchar* lasso_session_dump ( LassoSession* session ) GList* lasso_session_get_assertions ( LassoSession* session, const char* provider_id ) gchar* lasso_session_get_provider_index ( LassoSession* session, gint index ) GType lasso_session_get_type ( ) gboolean lasso_session_is_empty ( LassoSession* session ) LassoSession* lasso_session_new ( ) LassoSession* lasso_session_new_from_dump ( const gchar* dump ) int lasso_shutdown ( ) const char* lasso_strerror ( int error_code ) lasso-2.8.2/PaxHeaders/.tarball-version0000644000000000000000000000013214404126166015033 xustar0030 mtime=1678814326.417984109 30 atime=1678814326.417984109 30 ctime=1678814326.417984109 lasso-2.8.2/.tarball-version0000644000175000017500000000000614404126166020277 0ustar00bdauvergnebdauvergne000000000000002.8.2 lasso-2.8.2/PaxHeaders/missing0000644000000000000000000000007414215102164013317 xustar0030 atime=1678814115.312794853 30 ctime=1678814319.917947092 lasso-2.8.2/missing0000755000175000017500000001533614215102164016575 0ustar00bdauvergnebdauvergne00000000000000#! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2018-03-07.03; # UTC # Copyright (C) 1996-2021 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # 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 Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try '$0 --help' for more information" exit 1 fi case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: unknown '$1' option" echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # Also exit now if we it failed (or wasn't found), and '--version' was # passed; such an option is passed most likely to detect whether the # program is present and works. case $2 in --version|--help) exit $st;; esac # Exit code 63 means version mismatch. This often happens when the user # tries to use an ancient version of a tool on a file that requires a # minimum version. if test $st -eq 63; then msg="probably too old" elif test $st -eq 127; then # Program was missing. msg="missing on your system" else # Program was found and executed, but failed. Give up. exit $st fi perl_URL=https://www.perl.org/ flex_URL=https://github.com/westes/flex gnu_software_URL=https://www.gnu.org/software program_details () { case $1 in aclocal|automake) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/autoconf>" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; autoconf|autom4te|autoheader) echo "The '$1' program is part of the GNU Autoconf package:" echo "<$gnu_software_URL/autoconf/>" echo "It also requires GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; esac } give_advice () { # Normalize program name to check for. normalized_program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" case $normalized_program in autoconf*) echo "You should only need it if you modified 'configure.ac'," echo "or m4 files included by it." program_details 'autoconf' ;; autoheader*) echo "You should only need it if you modified 'acconfig.h' or" echo "$configure_deps." program_details 'autoheader' ;; automake*) echo "You should only need it if you modified 'Makefile.am' or" echo "$configure_deps." program_details 'automake' ;; aclocal*) echo "You should only need it if you modified 'acinclude.m4' or" echo "$configure_deps." program_details 'aclocal' ;; autom4te*) echo "You might have modified some maintainer files that require" echo "the 'autom4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) echo "You should only need it if you modified a '.y' file." echo "You may want to install the GNU Bison package:" echo "<$gnu_software_URL/bison/>" ;; lex*|flex*) echo "You should only need it if you modified a '.l' file." echo "You may want to install the Fast Lexical Analyzer package:" echo "<$flex_URL>" ;; help2man*) echo "You should only need it if you modified a dependency" \ "of a man page." echo "You may want to install the GNU Help2man package:" echo "<$gnu_software_URL/help2man/>" ;; makeinfo*) echo "You should only need it if you modified a '.texi' file, or" echo "any other file indirectly affecting the aspect of the manual." echo "You might want to install the Texinfo package:" echo "<$gnu_software_URL/texinfo/>" echo "The spurious makeinfo call might also be the consequence of" echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" echo "want to install GNU make:" echo "<$gnu_software_URL/make/>" ;; *) echo "You might have modified some files without having the proper" echo "tools for further handling them. Check the 'README' file, it" echo "often tells you about the needed prerequisites for installing" echo "this package. You may also peek at any GNU archive site, in" echo "case some other package contains this missing '$1' program." ;; esac } give_advice "$1" | sed -e '1s/^/WARNING: /' \ -e '2,$s/^/ /' >&2 # Propagate the correct exit status (expected to be 127 for a program # not found, 63 for a program that failed due to version mismatch). exit $st # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: lasso-2.8.2/PaxHeaders/logos0000644000000000000000000000013113766621500012775 xustar0029 mtime=1608196928.93089668 30 atime=1678814326.421984131 30 ctime=1678814319.945947251 lasso-2.8.2/logos/0000755000175000017500000000000013766621500016323 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/logos/PaxHeaders/lasso-233x66.png0000644000000000000000000000013113766621500015552 xustar0029 mtime=1608196928.93089668 30 atime=1678098070.005489164 30 ctime=1678814319.945947251 lasso-2.8.2/logos/lasso-233x66.png0000644000175000017500000003115313766621500021026 0ustar00bdauvergnebdauvergne00000000000000‰PNG  IHDRéB=Žf™22IDATxÚíy˜]ÅuàÏ©ª»¾µ©[ûÖ BÄ"@f³18ÁØŒÇvˆLÛ3‰ãñÄó!±ãŒíØÎÌ$ñ*Ìbl#À`0/,ƒ¡íûÞ{¿ýÝ¥êÌõÞíÛ¯ŸZÝHò’Q©¿Öë»þ^Õ©sOsª.œ-gËï`a¿i€³åly›å¬ìž-¿«Eü¦þ]•¦"þÿÆÐ”ä´3àY{÷ËÛ®ÀÓØ–¿ Å8õ[ŸDv=’=ö×8ËðëÄø`¨Öå7¥Œãп» ñ³Þžvù÷Á?ñÔšìmÀ:kBL´D5¦?Œaäèó¿†qbD7ÿÝOtäÙ=‘àž9ÿø-dˆZht‰_ë¥a ¼­†lÀ˜É>œ"ÃzcC=Œ®ñ´Åè]ò;Z8â@pº¥çD5ø»Â5ª)¥þ—DdŒE¿GÿÙÐc4^`´¬DúwS††§…áDQUhÙîÈãœ7Ü:Ž:CÃFožÑ”AT§Ez"èÑ Ù”!NòÛÀm‘RJ)Ã0 ‚ Ã0 •R†a!8çú€0 £–ãœsÎõ^Ý„‘ 5Óx"YÑwÑúO!„ašA)Áia-Q‰cèaè«I)‰HÔKtëÑ q"††ÒÄ¿GÔºD¬cËÄÄ{XT‰Q=2Æ¢cF×È„Æ i`ÐQCrÎOÊ©7)eAxžçû¾mÛ---BŒ¨Õ †††Ž= ³fÍ✠ÄE¼A˜â #º]CUè ÃÐ÷}ß÷=Ï3MS3˜¦gÃ0—Ë;vÌ÷ýÙ³g†144AÄݽAªâ ‘<èß*V¢ž£I„---¶mÇ1<ÏËç󃃃Ñ×BÄõñ 3?j-8Z"šÅó¼ro/îÙ•*ŒÑ¨éÇúÝjÿéþÅ…àíÖ‚.7“1M3úñÓ Z8Êýý´g+–âcè·CR.1Ƹ༽Õ\Ðå¶´h†¨5eÈ•Šj„¼ e„¾T«-—œôiÓô‰M‹nlÃ0 T*½°ùAÓ’†!¸B‹·fŒ™DëØ ºä˃ùpÄ!Ê0žxU_zîÅçÜ8{öl-úM‹¾”}ß~ÃCh” Cƒ n˜"›6ægÝvÓ4µÎŽˆ(ê$º •|>Ü#q@))CÒ÷Ï È.=gÕ¬Y³Ä®¡*Ž=ºõà‹` ç‚sÎ8ãœsC¤Ób~K¢#Îp"›¸QïêÊ ÃÐó¼jµZ.—s==ðÀÃm¯m5 QäGÛ†¤üw‚ sB¶¥s7¯J\w㺺iQ3ø¾¯òám{qƒ% …Î"j)ŒD˜F±h£9  ÎÐ*“Ì_¥só n2UPC®0tЄµ­3PIèWUEIPÓo¼øKmÙαp‘BÛ¶ƒÄËÒ9Z\pƘ¨¢ÈQÊ)\5Ã~wÒMŤ”ÃõPȨ>m¿4Ó>E ¤Â°eÕùÿ8mòܱ"Õ†aPú­ªxMZœ Ư¢‘§Doñ²Ö{RnVknDÔ‚«*•J¡X8Pþ©jyÖJU€¸ Yà“WUU%-vþu—Ü•MµŸ´*¦OŸžn½áWï)ñ͆Ʉ@ÆCÎPÀí-.›nÞ–I´i†uþ¹Ï}®ApueU*•B¡Ð{ø0»ëKv  ‘rÀ 8§á¦ˆ)B¥@JC $…!œðG‚” 1_Ší{+å<[¸€s®)µ¦©T*Åb±¿»;üüW§¼¸Q„ €1NÄë¿£P)%„ÂByB¥€ˆ…Jì9èõtÃçr!tƒi3±Z­ …þ¾íþ—Ý©/p*Ea(½jP.ú¥‚xǹ_îlŸ¼J)ûûû»ûŽW«ži˜Ñ—Š—·Ž<¢xãPJ`L’8ó$ÕùB£ëa`p`[ùŸéÏr(Ea ½jX.ùż¼|î=s§]Ððˆ<Þw¬\ªœˆaDZg=Ø‹\"“€ €*2ŽäÂ}®\lpSŸÕC±XÚšÿ†9ýqaú¤H†Ê÷ÃjÅ/=œ{óÒ/fR­q ß÷uíé?Z©Tmˉ¤mÓ’ºâ`ÿ_&%$†DÆñœÜa‹MaG¶ïIôn\é–J¥\.—ÿö}çî8„–É”D `ŒsŽÃ]µžÓ6²”*”* e(¥’RÀþEDÎ @*°þjqþ<±â gèûþÃç¾¾ FÀAÈ8rÎ9C8Â:Ô$¡”¡"m™‘ä5’ "g$ ”ŠØë·”ç¿hܰJ›C>Ÿß>ðpfÑ«–T¨BéûP©¨bQÎL½oFÇüèîžçýüW?xuëƒùÊ~"O)aóÎÅóÞý®«ÿ8›ÉÆ CV¸äÀ)ÎYJ°¶.ÿl®ñ®HáyžW.—óùüöÞ'“‹ž'0¥B%e@¥ªJEÙ"n:gæ%ÑŃ X÷ÆOÖm\=PÜITUЬ}ÑÌëo¾úÏ&OêÉ }¨pÉ‘3BΘ ÍÝG*OÚÆíŒ1Ý}ß× ;ºa-ø) )”A€^EUŠ*(w¼{ù=©D&j…|!ÿ³WîݰsM%8B$Iqל~тۮ¿üRÉ”ÆHØ©ËfüÏŸïû¨ÂLN`“ˆ‹Ã‡«ºþh³!néFŸ‡e7¢éNV*•ºh{ñ hŒY°›Û6&È ª" ‚0¤ PÕªW…ª”R(¥R'ð#@È@J"` ‘1|öoéÝÏ"†¾ãÇÝg×I"¡$(ň¢Å…eÛܲÁ4 mÃÄH…Òò½°Z­ù¡ ¤$©Fw"B€!”@D 1þ³+W^¦Ÿ­zV*•úúû*‰§Ó(â X(•ïSµ"Ë%\|îmqÁýׇ?ydða€“B"¡øû_Þöõ-{Öþ×oò¤ŽèÖRJR$ň!…@’€€•ŒçK•«u›E²;88X°žLj ¥d¾OÕŠ*—ä‹n‹,0 ï{âîíGïç‚j 2¼#ö~ç­}kÿüŽÕ³gvEÀJ*‰$Å ‘P@¨«¿*”¯ã¼s1är¹þÄTá+Å@±0 ߣJY °rÞgÚ²‘ í9°íÁg?Y ÷0 ˆ@…ì]÷Ö?nÜýã;oþêÜY 5FK²cQë_lü0d’@C@®¬×†Jï4Œ©ú¡1ú¹qB½[.—û·mŸáIgÌ4 '‘(8ÖSƒ=y ¨[½#dWÊÀ;³i†$¥ %‘Ä1ÜXsþ‘à`bÿ‘J>oF$7•J¥oïÞ®\I¡àŒY†á¸nѱŸÍõ–€s` ë6/"¡#Õ--.2P¤¤$¨©ÞÑ ô5ƒq¬¯Ô×oÙvÔf•JåøÀ³«_)¦M bè+ß“äOélŸUݺ7ë)?“Ì2ÃDÆ„y`\ËÛyöŸþä?üý°Ü!‘""¦(@E\ÁÄ`¾x̵]Í u^Ïà1>õ˜R ™E2Ta@¾'ýª3}Ò¢èÛlÚñÒîÞ0-Î8Õ*eU-úÁÓ÷Wüía €JäŒ Î ¹ò¡¤“ÑýAÛ}ƒ}ÐrP*T$U€WU•²Ìð«Ï»:rÎì?¼óŸ„¬ÞTš È€„!ùUåUU¹²ãÝù±÷>8sÚ\-‘çt^³«yàÿŠ1BH ˆ+28²|°·Uv(¥´³¯¹·Avµa^ÒÊ9·L«ã²Ÿ¯9T)˜eŠí¾qÕ­m– ñÕ:RJC Cô¿RÑ^@íå¨V«åA$PÀ9ç¦iör\þó‡OJòßÎ]öù®%¶”2 •”ÔÌóD IaˆAB¥’”R·YÍÞ-å\ RDŒH‘R†ødPkܶ¿g›bn‚›62¤ TµŒ\ 28ÐóR†z0JDD &BBPRQ¨0dú²1è¡}¡”'’ZàH)!…¾RAÒ¶ì¨ùöu¿ä¦ÀMrÓaœ#„>UmÅ ‰=Å …b!“®=Ù¥ª ¬1H¢Paˆ ”RjûM3K9•ñ•$ÆHJ |åWTµלÿÇÑ0´\.­yñSF¢ÏNpËf¨Ën@^+%¬pU)¿ïÉOýŇp„ Ûï|£ïWÜ ÆC¥($ ¥'óZF .ÄsϵvŒd¾ïaH ý ‚?Ñ{ä¤âǪå'z°fÞfâiJE1/fä ‚0îcŒ1!~Ü{x<$÷îßî'Âq´·e,"PDJRaŒ¡î( ”ÒD¤@I!Uý¢R*ºF*Ñb;ÌN0'ÉÜ$K¤X"ÅižHóDŠ+óÈîoéfè:æÃ¡Ús¡Þ§@I÷"k†À÷k:ºÖåAI’’‚ ¢¥\—¤Ûji†sSÌM17Íi¦1L7¿mï+š!_ÊýÈ"7#QÔ$†+!¾û¾¯$‘‚zÏ!¯ªL5þŒ #zaãƒØ–ÌòTV$³<™©ÿdy*+RžH1Ûe•7ž{mMô@žÓ¾‚é2$¥H‘"PµöPcyôõnä…–RJ%Io"‚6Ó:©¸èÒnÚÐü~ѱ­~“xÔªÖrj¤¾$¢vÆq”cåâOû¾'ÑjV*¾ïëøÖ ¨H_™F2DíÔè#‚Š×W.—Òé â²sî8öæ9/sŽB G D„L=úòŸ/ëÿC˶v<$ÜJ}œ©ë‚ê†W­âEJ†Ò b ©Šƒ¹¾D"¡.šÿî]ý÷2ÞÇrˆÀFâŽ(ŸÝø×¥]©d˾ÁÇÉ:Î8o¦aˆ`Dü¬Þ•¥FTŠdO~•ºÚ¯Õ(WÊ[Þ輦›âŽË «Æ@ ¤$.€” Cùòæï\³ü½:xašædçʾðA% xÝ× ¤Ôp@wt›±QÔñ}ÍGª¤’AðîÖ)ŸœAÚ0MÎM.XÜm`raržÆŸÎ;ï–¶)aœè®c”x±FPSlDDJ*Á-mS>Ùµ¸Å´ÂHfÂ4-a4½à·wm&×å–¥ãa ‘E)E*Ò‹5»…ƒ[v¿}ÇÙSÞ´øß’ü²0°Â” Bކ‰–ÃÜ$cÎñ G¾°áÈßJ¾[˜È2-¹#E‡ @×C¼.õX½M»1LjrËÅßl1VIß•) z(, ´t’ÜH m9þ•×ÿM7&ÓöLíKÅûf³Ä¥TMv%ÈŸ|fNvqì9òXG³]f:̰˜0PL˜hX̲™í0ÇeN‚Y–ÂÝ»¼Uÿ:Ø‘\.C"U뾺Á#Цít˜0ii ¢P†žçñRéŸ,ý_Ë®)'ÐÚúþGV?³s‹>eñ”Ïÿá§P0ò™Ïk=7añJÑ:<†žç¹¥Ò?-Xú•¥+Ãd2ȶܵæÑÑ×{úàîc+äÛ6 Ã÷}­BÆÏ« ¨‡ã0\ 7ðùÿr᢫]ÇÕ 0ÆÅó¦}k ßÓ]Ø:XÞ>TÙ=$÷t„ó’i™À˜3fÈy-ÀÒ,:ؘ¥ÿ!ã( ×ïX}Ùâ÷´¶´i†Y gLþçÁBOaÛ@iÛ`ewÎßãÓ!Æ ¦¥È@ÆÁ´˜å0ÃD=ÐmŽp‚άMRP-ó¢Ãõ¿b9hÙÌ´PÈ9êQ4hcեР™å‘YaFEî>ü«ó,ÕUÐêvɦŸyø1eg¬ùj5]W÷ða¹l¥2ˆà&DÌÔcD™ª¥2 åÂB¡Z©xž§­ì n¬²FTY}{D¶RF˜R¡e}ÿµuÑé]SwwÕŸ=)Ü¿ý/§Í7,Kxމ͆F©iÒÝkz9Ga a¡ia¾¼ñáµ_¾ã¦OGQ(Îù¤–)“Z¦­)e¡”;žÛy°oÝÁÁg?hXh˜È²˜±IÍ7` ç… 0B a1Óbùò¬½ëÞýy×MÔšƒ±¶Ì¤¶Ì$¢«4C©RìÎí>Ô÷òþµî2,0Lä2ÙÜØ cd7†šmJ?÷e:•ÌDÇ•÷˜& ¹¨÷Šú£Ž1 Â@ÃD]ÂÀã;¢sSv»’¶RU3 /'yŒj!RJ…aày^¥\‹E( T9,» ”JP(Èb±R.{ž÷v”nLÛ4ñÅ“Ô\WA¹Lå2T«ÏïÙ±w 7:ò+w|tNû°'õ»;6*Çfu³áäÃÇ@†À8 M‹Ù.³]¶åð7¿µæ¯úú{˜õPLÑ’i[4sÅ ý凮xô¢i+X»VÞú9±«ŸHn8Õúi¡fØßÿãÿû£9vðD ™TvÁôe«–üù‡®üáe³¿bòÃVÇIcÔfU)‚§"z²—º[F]¢þíC¦É ¹€ª?]Ö†R–¶`|â{rFúÎ|Ï#ÏߊÉ.ø>yžïy:ð‚Û̾o©£Ñ·”ˆqõ–×¢ƒfd[o˜>ï΋/¶léïYŸ@Û6LóD^îq–È`Z6: ›dýòƒï~dí?<²? æ2‡ˆŽí.ïºýº®ïr5S[¢Ã4î>Ž:„ƒ0д™í2ÍÐW~þë?ºõÁŸ|aÏþA4}D´LkÉìß¹ð^Î×NƒñÜyXûB4¬ÕÑô‘Y2LÕB®¬þ˜ŠUÔkqäGg#%¨QëŽE7ž9î5ÓYÕ冤D-7ñ¢Ä’¯ßžµ0¡‚ŒC¤Ù³5Úøó.6 …Ÿsá=k ëVÍwvm¾tñåÂ4…º_Â]1ä ‹Y”$`¼J÷+»ÿ×ËÛ¿žqÌì¸xÆäÅS'-ìhŸžJ¦âÊ;[æ^¦¾ôÒÑ?䢢pÄšwu" ˆÀ&Z.Ó‘KÆÑ«ä6ú— {¿•´æÍœ¼tFÇ’©“v¶ÏL§Òq!"¶¦:®šý¥ŸøýŒëN9†úhH©Õ23¡VçÍ®Uß‚Èj1Y!†=WRJ"oüŒKv£.·½F‹æHƒ~"â0á¢ÍJahYkí.ø^T;^°r¹9ܸvf×Úý;õöìÞú¥¥+]Û6Êeß÷OjòŽÃDr`mø*ðƒj°eÛÑ-[’’”Î:sfu.»èœw-ša”˜;£mQgÿí=Á½Œ#cµàÄ„žúá¡”Às4-ô=2vììÞ±íèJ"¨DÊš5³ãâ æßxÁÂK£L½öô´9Éî«|‘sDŒbÌÉo_û?ùR¹¨ý\ˆ˜ug÷ªWN^³u‡c{fN´­T*j…ñ®‹3†%ª·Žµw¸ºßþó:VoÈBpÓ$ÇY½sS´kyçŒóœäóX(|ôÜ¥ÑöA¯òè‘}è8F=Kx‚#<«uŒV~ܲ…›äÉ,O·ˆL«H·‰T Oey"ƒ–›Ï‡o¾±÷ÿöãÛ¿ñƒÏz^½!vµÝúLÉ wtýÔ®9͈€ nÚÂI²d†§[yºU¤[Eº•§²<™F+Q*«·6X½ú©~ý¾OŠ…ˆaþ¤wI?)%‘¢zÞèx› –‹•ž#Ñ;2‘Rõ'?à®Û:JÁ¬ÎeQC !z8‘>|Æ×tЦH°XyûŒˆ 9ç†a€mïòË뎌v~xÑEèyP­BµzëÌ®v'íúîÎMä8üíŽØj>:EJ‚ !ô)ð©MÜúŽy^7ÿG“RW9.K¤yª…gZE¶MdÚE¦M¤[E2ÃÝ3LùÖÁûŸ{õ±HP'§gRÐ)Cm5N ¥–gPàS’­¼föo\ðØ´Ì{l—%R<•™V‘iÙ6‘Ö Yî&™iÓ¾Þ§žzî[C&ÑjÒ¼šWuœÕýÚretàøÃá±I+H¦”U‹²Œ¬@-²”$S- g_ZÛKtlp2ˆFxãiž3+»‘à†aY–eYz¦ÇÛ_¬Ç8ç²Ðqîß»MÖ+Îâý‹.ŒÁåâç «Þ_Ù·?ðÀ¶u®Ï„îsÒŽã{UV¦¬ìúÓÛºfM^tåÜ¿á¶æ&y"]ÓÁé‘Ö 8Ím— ·ïÿEtM!„‰S”"RÃÏГ2PMp)ô•_U^9qŬ»fMZ4½½ëêùŸb’i37ÉžÊòT‹H·j‘ÈpÛe†;>GÃî6tùt-jãa¨ûFXm¼Åî8ø‹è‚-éöN÷2$E¹Oõ±)R’t*HÐ9S?›i©};¢ƒýÏiëå$ÞX9ƒ² ®eY®ë&’Éd2™H$¬·©üj9ËœqÃ0˜e…Žý½›£ÝïZ¸drK+8$àº`Y¹detItïÞ­è8zÄö6¬VÕñ¤jY †c¹zWkªƒ©)ˆ ÃW¶¥p7ų&Lä|ÄèB ‡]¹ã‚R¤j ¤J“³É6½'á$]6Ô|gN”VÁÝs¼Œ£h8øq¢„¿‘©ßŒçÀ äÏ­?rü`´kÙ¬ÿ$ý–0 B-ùaDöžò=…áäk—þ§è²G{ä‚ L»„ÇÝ,gJv£™Ÿ¦i:®k§Óݶ±[ ™N»‰„eYuwÕD¯ZÓâè8Ïõß—v^<»ký`ïúRn}µ¸¾RX_ LsvÌÑ{ïΡc3Û>yjÎèR÷ ɪeåW‡wrÎ';Wʈ¹@a`ͯ}õr†‹»nˆN eXöŽ5š…'e KàU”WQ5‰•2 E€ ™@!jw×®ÞÜëâIÜ…ÊQ ñ-X·tC.Ð0Ð0‘•6Ü©ÞöìÔ &ÿµ_å¯Â€´ÖA¸À#¿ªªeå•w,þÛöÖÉÆë{î¦/DñÐgǼÂÞÜàóýÝ«×(ujìÄµÔ ð«ÄDWÌûøO6oò½MŒq€È¼S ‚¹ïYqÑM‘Üô áœ$ÛŒBRšA7‚áâ98¾éµrõ—@Œ @¨ÝZ'‘‚ÎÌ•×]ö¡ˆ!_*»|ø!cÀ 4L0-4-¶yÿ÷¯8ògMŸ«1.˜u“¶çþÁ´|=1€ˆd~UUJªZ²¯ìúÛ¥‹VEí:0ôp²e8Ö8ÎJ9Íz7~Gm˜–U¶Ì»·¿®«ùÇÇö¯÷ŠÂ²„Ðá— <#´Ö†¶=ÄÙ#{·Mï;»6AlÄÖŒz¬2ln#„>•ÌÞzá7g8æ•Z«eò*ªZV^Ey"¿sùœÿ~绿å[Ñæƒk ãSOÆ”fðG08¶sË’/ÏK}:,O©–¨ZQõ’^ëyS?þG·þ‹Î8Ó [þX>–Š9.MÁš63mÆÌâš_ÜyQcË»Þù´o`õ‚r‘*EY.ªRA–ò`…ËoYò½Ëß nµZ]»ñnîÔãä¨ïãiŽñêÝ“\l¸†˜©¹ cA5–3„¦É9gˆrµ¥{¡6Aç†i¢m?|hw1ðÇ •Göl\¾*[wôNHñS}jžÖ| §!@ÂI^sî.U>ztð­¡ò>ÏÏ™¢5kÏ™>i‘ë¸ñ'õ‘î½»ûHfë) ã 5ÆÜ”5¥£Ø-˾üœ;—zwØ>PÞUõ žIÛ³¦·›J¦ãfÒÀPïæ#ÿf§éÙ[ã¯DÆ8“YØ.;žnͳ_{ÿMù°çu.Õ¾úpÿöã¹7=oÈL´tÎZ:³cAÜZ Ãð‰_ýc‰^MÚ<žÔ6Î2›!rÐ6Õ–8¢@}¬B12A‘ ÐsÿÇ¿š "rÆ„apÛ&×]ýò¦qž/¥0øÁÁ]:y¦0ÍZjαš¤^bé2ñ HºÉR³T"ÊüäO §(´Õ=!¹idht«kÇvæM½h\Ô”JåâãëÿšÄ1arΑa½ ôÖõÆç -à †´aßÿ5žµïÓsIÑ0Œ9‹çt.nŠþë¾¶è{©,Ó3,‡ àÇ!»‘k*Zx‡±&BÆ`ä².zÕFޝAϬ$Öfu<Â4Mpœ]^ù¥˜[÷«7ßqóÌ.¨TÀ@ÕƒÕŒ`YÊuß±ú«‡rµQÝwwnú“Ù ¹mÕªÎ=P'Y-eXbt³1œc±x<Ó4‰(ŸÏ' cdm*¸Žì|âµO+k[Òæ†‰L ²ñºã#+°ž„ %ÙW*—Ò©4 !„ã8M§ƒÇŽ÷~ü•Ï–Ù¯RI­í b§Ø rà³]C.%ÉWv}y°pøöë>Ó0)ºƒˆû~üò=½Õ'“f»µœIÆ'†1.½[ËåÜ0 Ã0À4Á0S- MÓ´,"Ò󜄶Á²À©w'fäBMã aš–á8˜H|o监[7iZw.\’)W!Pà† ÍÎÁpóÃ\ò÷/<­åø¡­^é¼Dªgi†Rªñð Ô2w ó¥Ýϼ|ïµËþC†ÿâC…#«.ýƒsk\CSQwß±—7?¸½û>']J&¹å0a ¯»3Ç+4P* &C³ÿÉuÿû]—®]÷àþc®Yö¡ó.7 ³)ÃÀPÿ+o­Ùtè[Vr0‘äum‡±é'»ýpF®£âŠEiWˆrwÏ÷¿òÀËW-ùÄe¼3™LÁÈÅ© —Ï­ßúøë{ÿ…Ù݉4w’5"ãPWÿã­Ž“Èn}Žã‚›¦iÛ¶™H`"ŽñiˆàºJqǶAÊÚsÅq •ó$w H½2س¡»Þÿµ×_á…Æ.\Ó¸–eÙ S© ™¼/~Ï¢%äP©@©D¥’ò#ë©ïîyë¯`AàèZ‚TðF¾}w¾ðýWÞpÃ¥—^Ú¤*2ކ –Ü$½¶ÿó¯îø× ü`€¾ù“·&Ï[0ãªé“ÏO''[Üñdµ\èØy {}_ù5Ë­¸i榸írÓŠÒg!%ië¦Ü[¯e¹^sEqÅŠMúO- ,ÛÑó­ý( Àóûˆè¾gšY·`þô•3:/Ȧ:-‘”W©æz†vì^ß]Xo8y'Å)î$˜i£0‡G¤`çÖüæ—ŽÉG¯º$¸êª«šÉD­6¸Ã" ×9a W9¸öÍOÿòÍ/Ïé¼jÖ”¥íÙ™œ›Rz}Cö¼~dpš}N’»Iî$¸í2úw,êi°Gqã‹Ý•žÇV.§›nºÉ²šÌ7;™ÞE=ºg¦a:Žc¦R˜NC6 ™ ĽܜC6 à8èû ”–]°,H&Ç „Á_Þúriˆè›{¾µzõ{ßûÞO}êSP·SôÜ`ÇuY: --Ïõî¹u?´ìJàô<Õúâvˆh–¥½‘ó'w^9÷œçöl×§<°}ã=WÜhIɉ (WŠ^õ3Þz:ß«èþ½«zèú믯TÏ@!дPº@\¨Àp¤P’¤¢ªÜüæÍö" 2ÒÉŠ†Å’-h»µÖ2m4L¦-Ñ -^U}ãoö¾ðÄ ’tàþï®Y¹rå=÷ÜÓ(¸ `úÕœ É–\IR¹sË‘›ëddšA a¡›e¶Ë—Ù fÙL ÃÖBÐ÷þáÀ3õÉ€öõ“Ë–-û¾а2_­·1àµ^§×—C.Ð0UÕV~U~Ͼíéû‘äêª&Úif¹B§ëÃ}”¤‡þùðcßî}Ú÷Ã{×.Y²äÛßþöœ9sNj3 C\X–e&“O•¿½c}_èƒalî>´»¿çšï}½¶D’ª‡ëV½G£d7–zO÷Þ—ŠƒQ“”ò‡?üa{{ûûÞ÷>¨)]ÛæÉä}}‡ŸÚùúëýLJá¿úÒÏþ”S„ù'Óç/5M¬ÖbŒs0ÍïÝ÷øÆ Ç ¹è¬£ÅüM~wªéüÞäé·§'YR}õðާr=ƒRêé§ŸÎd2ûØÇb÷d5ƒˆ1ަ…aÀ”)Iÿ–!)IJAÔ`Ñ$ =aKKm“ykþµû—õG ˆž{î¹/~ñ‹ºÇÛƒs3b`µ€$YO²– ‰Z Ä´˜i£Y›“S³tãÆÅOïï}ê¢a†õë×ß}÷ÝwÝuW¥Vߺ%ø¨MÎó=øšª¶Œî?¢‘¡®qcýçùÇþ·c¤†6nÜø‰O|â±ÇkèB'³°î¦5׫…÷¬{2læÌ/zÕçöî€q¥¢tÊÃAõg…þQ‚MkÖ¬¹õÖ[ãzwuÏnyyô‘?ݶQ~h×–­×¾·Cˆ0 õTø‡{}à•µM~y`7<¸kóã—Ýx™á®<6ú˜'Ÿ|òƒü DYÔ5 '#´PJÐ9 JÕDGIÐsTk38 ‡Ù äõÖöŽ @µ¢~ö£Ñ k×®½óÎ;¡nUÔŒcŽ5Ç‹ Ó")¤N΢¨#E²«m·ˆA˜zÎBm2Yœ! híC£›wݺup]·©x†(ô—$L4}Òžê 7ÕÂȹ@a¢aÔtúˆ5j<ý@ßh]÷ꫯ¾ùæ›—\rɸe·^aˆˆŒoÈõ…§%1WJª¯¤{<ô}¢Ñ¶y.—ƒZÞcœ­ìûª¹ÀßZê4“‘CäžccŸB/tÏoŸ^MÖ@)‹ÝÝÝét:ª ½ze= µUÎÔ'tÔd(ª¤šªæzí4`¼îá¤A@(æd1×d¨çy===íííqqa„ˆ ˜@ª'Eèà™RPÛ¢F0Dœ»¢FøÅÊ5ÐŒfð»»{ô#{øú¨“€™ö‘¬÷áa 6Ü“GÎGùæÀóèøÁ&n{¥Ô¾}û&"»Po"Rry¦Ý@Ð)L:¨7©e7ËGÝh:k§X,êÄC%å5­ß:²{Œ«¶šÖâDVUkc5’òÚö)_Û³e¬•T®mëL"³•©‘²¬––=¯˜¢µè0µUjj“R‘†×xˆµk-ª ëèf^'Á-›…A#ç<«ñ`5¿á8@OR¨uÖœÀvY"Í«åÆöeŒe³Y¬KYÓ™\ˆÀ9¡ê«DA]ý×b¬V8šA˜˜iM»ñ¤I“¶4‘ÝX€©6;7ô}I6ûÔïúÖá]yÖœ £á„’Rf†r’Y­ê|†Ù†½ÄN½Q-ÔãVµ²jÕªHvƒ0¬zÞZ§ËV=9p,'%°ør„¤¦YîŸL¨R_C„{Þ­ÙŽ‡WÜøX÷¡!ŒZùOµpã÷;f^Ÿn¯ W§ÚžÊõ4¯X±¢½½½§§GÇÓtÂ9"i\ZàpÖv-©µ;(r Äe¥YHÀM±e«ÒÏ=6ذwéÒ¥S§Nííí­3 Gü›2€^$j„c€æ=Go1-\qcæ‰Õ} {.\ØÕÕ500€P_5¡Y3kY$@$½>HÃl¶1táVÞÒòàW7lŸ;wîhÏO£ìbÌ´ÔËS© ½j• ×&’ï8ÿr°,bùjQÞ÷©Z•år¥\ÃP Ä¿éìúø‘m‡ƒá¼¬ /¼ð“Ÿü¤¶“ÀÃrµšÈÞŸi¿£sÖðÝ¡ža†äyT©TK%½.Dô]~/ÑúûçMÓ>@Ÿ¾O•Š_(øž÷×óöz¥ÕRÔ%ººº>ó™ÏԓݘN©PÃ*8> ¶¦‘€â›âûÇ\ý@Wö‡ÿjꑽþîÍùa³gÏþÜç>§b-±á`„Û?Þ¹›÷Ö«ÃëeM™2åî»ï6M“1†Èt,šˆB“Ö#mf Ž-/5åuó“v¾Yyã¹|´£­­ík_ûÚhƒ»‰ìF‹ÿS­´óeÈ«U ÃÐ(W¸àµÕÏÇ_´s\Ê0ü Ðs‰I)貜ïw-ýa¾wCPbË–\síµ·Ývcl``€1†Ž—AÒóL¥¤Q­pè§aý²JÊ0¨_¶f3)¥Lßå2&Z3^*XF§Lfâ{s/ZSè}¥’ .<+ßÿþ÷[–544Ä97…íU@¤LɸPÍâîœsÖ :Ù6q×wÎù壹M/Då¼+V\uÇw$‰¡¡!ƘaØ•*†!Jq& Ù™`H¦Ùgÿuþ Oäß|!O…s.]vÅ>ðl6«LÓÎWyJI†Šðõpr1‹ÁrðÓ_Ÿ÷òSÅ×~‘ rs–_xåG>ò‘¹sçŽTÑðw B$gÍ<ÆÈ!eJÉ=ŸˆÂ0ðx•Eîì L,…hy)½@š^ H€Ú„ñg³óçÎ1ÿç_¦R)ÆXµZÕ¯ˆIN™rÔbY/DJÓó™Ðî¥á‹ëU³ô¢oÑLO’RÏÊ9Ë£•®‡—û""ÆR†øÃI3nŸq1|þ³™l–sîyž~oGKbò¾£ÉL[I˜’1ŸÕ¬Sx¯x"TvBÜü¡Žëo;oNøw­ÙV!„~ïˆa™D˱ã-mSú C2Ûç€\Û½§•L®ßäU·ÎŸV¹grkgœ!é$÷÷Lg ÅlñL0" ®~OÛU7ÏèÈß3½cŽëºMEmXvã‚«§è´ttì=î”Mû¸°=%‚P¿GhÂi§P{œÕYª .ñ t튤Î/‹1¤³Ù]KÏñâ&½Š¾†cÈëÂ3¼>ã¨å8Ö§ŸÃ$5=g’q@ †ù•—L²mÍMUJ§ÒþîKÊs~Æ8C ƒ „‰¤øÙ`€À€8a(‰áÐen»ñŽiš 7GVssNÈ0ˆ¡Àèô30¢@.Mµd"Ã0LÓt]׸ªËþ£¶l»ëºf}н˜1]{vUy̲C†8= ¤‘,äŒÒÁ+ç:©¥£Ac@’ÏÝ·JþQÓ ðô3¨Rž/Ÿ ïh›¦FÏn¬õ–ø"1Tc¥RÑïÉår¹\®X,=ZÞwÊåáï)ô.†LpfY–ÛÙÙ~Áù“¦NÍd2ÉdÒqýÄø{Jr¹\>Ÿ/ ƒÝÝŽû Pa3‘HÄWé;åE™0z«+f}°1ض­´m[¿ÒñL04ÔCCÓzˆ^Äpê Œ1ÝZ›4,£ADÑTˆHèz8] úʺ"ód‹5Mhñtpô–çSìdqÖÈ×ðrä4bÐ_)zîiYò,®rôÝ£7ëÆ;O4D×Cô¦é3Ê´fˆç$E¯™>C mgˆ4´ã8‘<œ^­ÑšÊCtððçz4|ÔBÛ£ÞzpºÖÉÃúL̈¸¡µâ 4òµö§—!Ò:ë¯ÿ­eˆ0ÎCÓu·Dâ &¾c0ÄkŸ£{† ‘NYãŽÆ+¹¦†³ ¿6†˜_?CÓÚ}ÌðŸñÛ7EC¸OîI<Ó ãÁ8Ëð›eh"Ê£­…Ó t¶œ-§^šKsSSá7NùÛÀð›Å8ËÐÀÐd×X¿Nâ!þškíDvÞY†ß†œ5ΖßÑrÆ×=?[Ζ3TÎÊîÙò»ZÎÊîÙò»Zþuå>pX¼ŠIEND®B`‚lasso-2.8.2/PaxHeaders/ltmain.sh0000644000000000000000000000013114404125665013550 xustar0029 mtime=1678814133.58889661 30 atime=1678814150.900993242 30 ctime=1678814319.917947092 lasso-2.8.2/ltmain.sh0000755000175000017500000121320114404125665017024 0ustar00bdauvergnebdauvergne00000000000000#! /usr/bin/env sh ## DO NOT EDIT - This file generated from ./build-aux/ltmain.in ## by inline-source v2019-02-19.15 # libtool (GNU libtool) 2.4.7 # Provide generalized library-building support services. # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996-2019, 2021-2022 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . PROGRAM=libtool PACKAGE=libtool VERSION="2.4.7 Debian-2.4.7-5" package_revision=2.4.7 ## ------ ## ## Usage. ## ## ------ ## # Run './libtool --help' for help with using this script from the # command line. ## ------------------------------- ## ## User overridable command paths. ## ## ------------------------------- ## # After configure completes, it has a better idea of some of the # shell tools we need than the defaults used by the functions shared # with bootstrap, so set those here where they can still be over- # ridden by the user, but otherwise take precedence. : ${AUTOCONF="autoconf"} : ${AUTOMAKE="automake"} ## -------------------------- ## ## Source external libraries. ## ## -------------------------- ## # Much of our low-level functionality needs to be sourced from external # libraries, which are installed to $pkgauxdir. # Set a version string for this script. scriptversion=2019-02-19.15; # UTC # General shell script boiler plate, and helper functions. # Written by Gary V. Vaughan, 2004 # This is free software. There is NO warranty; not even for # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # # Copyright (C) 2004-2019, 2021 Bootstrap Authors # # This file is dual licensed under the terms of the MIT license # , and GPL version 2 or later # . You must apply one of # these licenses when using or redistributing this software or any of # the files within it. See the URLs above, or the file `LICENSE` # included in the Bootstrap distribution for the full license texts. # Please report bugs or propose patches to: # ## ------ ## ## Usage. ## ## ------ ## # Evaluate this file near the top of your script to gain access to # the functions and variables defined here: # # . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh # # If you need to override any of the default environment variable # settings, do that before evaluating this file. ## -------------------- ## ## Shell normalisation. ## ## -------------------- ## # Some shells need a little help to be as Bourne compatible as possible. # Before doing anything else, make sure all that help has been provided! DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # NLS nuisances: We save the old values in case they are required later. _G_user_locale= _G_safe_locale= for _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test set = \"\${$_G_var+set}\"; then save_$_G_var=\$$_G_var $_G_var=C export $_G_var _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" fi" done # These NLS vars are set unconditionally (bootstrap issue #24). Unset those # in case the environment reset is needed later and the $save_* variant is not # defined (see the code above). LC_ALL=C LANGUAGE=C export LANGUAGE LC_ALL # Make sure IFS has a sensible default sp=' ' nl=' ' IFS="$sp $nl" # There are apparently some retarded systems that use ';' as a PATH separator! if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # func_unset VAR # -------------- # Portably unset VAR. # In some shells, an 'unset VAR' statement leaves a non-zero return # status if VAR is already unset, which might be problematic if the # statement is used at the end of a function (thus poisoning its return # value) or when 'set -e' is active (causing even a spurious abort of # the script in this case). func_unset () { { eval $1=; (eval unset $1) >/dev/null 2>&1 && eval unset $1 || : ; } } # Make sure CDPATH doesn't cause `cd` commands to output the target dir. func_unset CDPATH # Make sure ${,E,F}GREP behave sanely. func_unset GREP_OPTIONS ## ------------------------- ## ## Locate command utilities. ## ## ------------------------- ## # func_executable_p FILE # ---------------------- # Check that FILE is an executable regular file. func_executable_p () { test -f "$1" && test -x "$1" } # func_path_progs PROGS_LIST CHECK_FUNC [PATH] # -------------------------------------------- # Search for either a program that responds to --version with output # containing "GNU", or else returned by CHECK_FUNC otherwise, by # trying all the directories in PATH with each of the elements of # PROGS_LIST. # # CHECK_FUNC should accept the path to a candidate program, and # set $func_check_prog_result if it truncates its output less than # $_G_path_prog_max characters. func_path_progs () { _G_progs_list=$1 _G_check_func=$2 _G_PATH=${3-"$PATH"} _G_path_prog_max=0 _G_path_prog_found=false _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} for _G_dir in $_G_PATH; do IFS=$_G_save_IFS test -z "$_G_dir" && _G_dir=. for _G_prog_name in $_G_progs_list; do for _exeext in '' .EXE; do _G_path_prog=$_G_dir/$_G_prog_name$_exeext func_executable_p "$_G_path_prog" || continue case `"$_G_path_prog" --version 2>&1` in *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; *) $_G_check_func $_G_path_prog func_path_progs_result=$func_check_prog_result ;; esac $_G_path_prog_found && break 3 done done done IFS=$_G_save_IFS test -z "$func_path_progs_result" && { echo "no acceptable sed could be found in \$PATH" >&2 exit 1 } } # We want to be able to use the functions in this file before configure # has figured out where the best binaries are kept, which means we have # to search for them ourselves - except when the results are already set # where we skip the searches. # Unless the user overrides by setting SED, search the path for either GNU # sed, or the sed that truncates its output the least. test -z "$SED" && { _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for _G_i in 1 2 3 4 5 6 7; do _G_sed_script=$_G_sed_script$nl$_G_sed_script done echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed _G_sed_script= func_check_prog_sed () { _G_path_prog=$1 _G_count=0 printf 0123456789 >conftest.in while : do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo '' >> conftest.nl "$_G_path_prog" -f conftest.sed conftest.out 2>/dev/null || break diff conftest.out conftest.nl >/dev/null 2>&1 || break _G_count=`expr $_G_count + 1` if test "$_G_count" -gt "$_G_path_prog_max"; then # Best one so far, save it but keep looking for a better one func_check_prog_result=$_G_path_prog _G_path_prog_max=$_G_count fi # 10*(2^10) chars as input seems more than enough test 10 -lt "$_G_count" && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out } func_path_progs "sed gsed" func_check_prog_sed "$PATH:/usr/xpg4/bin" rm -f conftest.sed SED=$func_path_progs_result } # Unless the user overrides by setting GREP, search the path for either GNU # grep, or the grep that truncates its output the least. test -z "$GREP" && { func_check_prog_grep () { _G_path_prog=$1 _G_count=0 _G_path_prog_max=0 printf 0123456789 >conftest.in while : do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo 'GREP' >> conftest.nl "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' conftest.out 2>/dev/null || break diff conftest.out conftest.nl >/dev/null 2>&1 || break _G_count=`expr $_G_count + 1` if test "$_G_count" -gt "$_G_path_prog_max"; then # Best one so far, save it but keep looking for a better one func_check_prog_result=$_G_path_prog _G_path_prog_max=$_G_count fi # 10*(2^10) chars as input seems more than enough test 10 -lt "$_G_count" && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out } func_path_progs "grep ggrep" func_check_prog_grep "$PATH:/usr/xpg4/bin" GREP=$func_path_progs_result } ## ------------------------------- ## ## User overridable command paths. ## ## ------------------------------- ## # All uppercase variable names are used for environment variables. These # variables can be overridden by the user before calling a script that # uses them if a suitable command of that name is not already available # in the command search PATH. : ${CP="cp -f"} : ${ECHO="printf %s\n"} : ${EGREP="$GREP -E"} : ${FGREP="$GREP -F"} : ${LN_S="ln -s"} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} ## -------------------- ## ## Useful sed snippets. ## ## -------------------- ## sed_dirname='s|/[^/]*$||' sed_basename='s|^.*/||' # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='s|\([`"$\\]\)|\\\1|g' # Same as above, but do not quote variable references. sed_double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution that turns a string into a regex matching for the # string literally. sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g' # Sed substitution that converts a w32 file name or path # that contains forward slashes, into one that contains # (escaped) backslashes. A very naive implementation. sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Re-'\' parameter expansions in output of sed_double_quote_subst that # were '\'-ed in input to the same. If an odd number of '\' preceded a # '$' in input to sed_double_quote_subst, that '$' was protected from # expansion. Since each input '\' is now two '\'s, look for any number # of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'. _G_bs='\\' _G_bs2='\\\\' _G_bs4='\\\\\\\\' _G_dollar='\$' sed_double_backslash="\ s/$_G_bs4/&\\ /g s/^$_G_bs2$_G_dollar/$_G_bs&/ s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g s/\n//g" # require_check_ifs_backslash # --------------------------- # Check if we can use backslash as IFS='\' separator, and set # $check_ifs_backshlash_broken to ':' or 'false'. require_check_ifs_backslash=func_require_check_ifs_backslash func_require_check_ifs_backslash () { _G_save_IFS=$IFS IFS='\' _G_check_ifs_backshlash='a\\b' for _G_i in $_G_check_ifs_backshlash do case $_G_i in a) check_ifs_backshlash_broken=false ;; '') break ;; *) check_ifs_backshlash_broken=: break ;; esac done IFS=$_G_save_IFS require_check_ifs_backslash=: } ## ----------------- ## ## Global variables. ## ## ----------------- ## # Except for the global variables explicitly listed below, the following # functions in the '^func_' namespace, and the '^require_' namespace # variables initialised in the 'Resource management' section, sourcing # this file will not pollute your global namespace with anything # else. There's no portable way to scope variables in Bourne shell # though, so actually running these functions will sometimes place # results into a variable named after the function, and often use # temporary variables in the '^_G_' namespace. If you are careful to # avoid using those namespaces casually in your sourcing script, things # should continue to work as you expect. And, of course, you can freely # overwrite any of the functions or variables defined here before # calling anything to customize them. EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. # Allow overriding, eg assuming that you follow the convention of # putting '$debug_cmd' at the start of all your functions, you can get # bash to show function call trace with: # # debug_cmd='echo "${FUNCNAME[0]} $*" >&2' bash your-script-name debug_cmd=${debug_cmd-":"} exit_cmd=: # By convention, finish your script with: # # exit $exit_status # # so that you can set exit_status to non-zero if you want to indicate # something went wrong during execution without actually bailing out at # the point of failure. exit_status=$EXIT_SUCCESS # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath=$0 # The name of this program. progname=`$ECHO "$progpath" |$SED "$sed_basename"` # Make sure we have an absolute progpath for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` progdir=`cd "$progdir" && pwd` progpath=$progdir/$progname ;; *) _G_IFS=$IFS IFS=${PATH_SEPARATOR-:} for progdir in $PATH; do IFS=$_G_IFS test -x "$progdir/$progname" && break done IFS=$_G_IFS test -n "$progdir" || progdir=`pwd` progpath=$progdir/$progname ;; esac ## ----------------- ## ## Standard options. ## ## ----------------- ## # The following options affect the operation of the functions defined # below, and should be set appropriately depending on run-time para- # meters passed on the command line. opt_dry_run=false opt_quiet=false opt_verbose=false # Categories 'all' and 'none' are always available. Append any others # you will pass as the first argument to func_warning from your own # code. warning_categories= # By default, display warnings according to 'opt_warning_types'. Set # 'warning_func' to ':' to elide all warnings, or func_fatal_error to # treat the next displayed warning as a fatal error. warning_func=func_warn_and_continue # Set to 'all' to display all warnings, 'none' to suppress all # warnings, or a space delimited list of some subset of # 'warning_categories' to display only the listed warnings. opt_warning_types=all ## -------------------- ## ## Resource management. ## ## -------------------- ## # This section contains definitions for functions that each ensure a # particular resource (a file, or a non-empty configuration variable for # example) is available, and if appropriate to extract default values # from pertinent package files. Call them using their associated # 'require_*' variable to ensure that they are executed, at most, once. # # It's entirely deliberate that calling these functions can set # variables that don't obey the namespace limitations obeyed by the rest # of this file, in order that that they be as useful as possible to # callers. # require_term_colors # ------------------- # Allow display of bold text on terminals that support it. require_term_colors=func_require_term_colors func_require_term_colors () { $debug_cmd test -t 1 && { # COLORTERM and USE_ANSI_COLORS environment variables take # precedence, because most terminfo databases neglect to describe # whether color sequences are supported. test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} if test 1 = "$USE_ANSI_COLORS"; then # Standard ANSI escape sequences tc_reset='' tc_bold=''; tc_standout='' tc_red=''; tc_green='' tc_blue=''; tc_cyan='' else # Otherwise trust the terminfo database after all. test -n "`tput sgr0 2>/dev/null`" && { tc_reset=`tput sgr0` test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` tc_standout=$tc_bold test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` } fi } require_term_colors=: } ## ----------------- ## ## Function library. ## ## ----------------- ## # This section contains a variety of useful functions to call in your # scripts. Take note of the portable wrappers for features provided by # some modern shells, which will fall back to slower equivalents on # less featureful shells. # func_append VAR VALUE # --------------------- # Append VALUE onto the existing contents of VAR. # We should try to minimise forks, especially on Windows where they are # unreasonably slow, so skip the feature probes when bash or zsh are # being used: if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then : ${_G_HAVE_ARITH_OP="yes"} : ${_G_HAVE_XSI_OPS="yes"} # The += operator was introduced in bash 3.1 case $BASH_VERSION in [12].* | 3.0 | 3.0*) ;; *) : ${_G_HAVE_PLUSEQ_OP="yes"} ;; esac fi # _G_HAVE_PLUSEQ_OP # Can be empty, in which case the shell is probed, "yes" if += is # useable or anything else if it does not work. test -z "$_G_HAVE_PLUSEQ_OP" \ && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ && _G_HAVE_PLUSEQ_OP=yes if test yes = "$_G_HAVE_PLUSEQ_OP" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_append () { $debug_cmd eval "$1+=\$2" }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_append () { $debug_cmd eval "$1=\$$1\$2" } fi # func_append_quoted VAR VALUE # ---------------------------- # Quote VALUE and append to the end of shell variable VAR, separated # by a space. if test yes = "$_G_HAVE_PLUSEQ_OP"; then eval 'func_append_quoted () { $debug_cmd func_quote_arg pretty "$2" eval "$1+=\\ \$func_quote_arg_result" }' else func_append_quoted () { $debug_cmd func_quote_arg pretty "$2" eval "$1=\$$1\\ \$func_quote_arg_result" } fi # func_append_uniq VAR VALUE # -------------------------- # Append unique VALUE onto the existing contents of VAR, assuming # entries are delimited by the first character of VALUE. For example: # # func_append_uniq options " --another-option option-argument" # # will only append to $options if " --another-option option-argument " # is not already present somewhere in $options already (note spaces at # each end implied by leading space in second argument). func_append_uniq () { $debug_cmd eval _G_current_value='`$ECHO $'$1'`' _G_delim=`expr "$2" : '\(.\)'` case $_G_delim$_G_current_value$_G_delim in *"$2$_G_delim"*) ;; *) func_append "$@" ;; esac } # func_arith TERM... # ------------------ # Set func_arith_result to the result of evaluating TERMs. test -z "$_G_HAVE_ARITH_OP" \ && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ && _G_HAVE_ARITH_OP=yes if test yes = "$_G_HAVE_ARITH_OP"; then eval 'func_arith () { $debug_cmd func_arith_result=$(( $* )) }' else func_arith () { $debug_cmd func_arith_result=`expr "$@"` } fi # func_basename FILE # ------------------ # Set func_basename_result to FILE with everything up to and including # the last / stripped. if test yes = "$_G_HAVE_XSI_OPS"; then # If this shell supports suffix pattern removal, then use it to avoid # forking. Hide the definitions single quotes in case the shell chokes # on unsupported syntax... _b='func_basename_result=${1##*/}' _d='case $1 in */*) func_dirname_result=${1%/*}$2 ;; * ) func_dirname_result=$3 ;; esac' else # ...otherwise fall back to using sed. _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` if test "X$func_dirname_result" = "X$1"; then func_dirname_result=$3 else func_append func_dirname_result "$2" fi' fi eval 'func_basename () { $debug_cmd '"$_b"' }' # func_dirname FILE APPEND NONDIR_REPLACEMENT # ------------------------------------------- # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. eval 'func_dirname () { $debug_cmd '"$_d"' }' # func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT # -------------------------------------------------------- # Perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # For efficiency, we do not delegate to the functions above but instead # duplicate the functionality here. eval 'func_dirname_and_basename () { $debug_cmd '"$_b"' '"$_d"' }' # func_echo ARG... # ---------------- # Echo program name prefixed message. func_echo () { $debug_cmd _G_message=$* func_echo_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_IFS $ECHO "$progname: $_G_line" done IFS=$func_echo_IFS } # func_echo_all ARG... # -------------------- # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } # func_echo_infix_1 INFIX ARG... # ------------------------------ # Echo program name, followed by INFIX on the first line, with any # additional lines not showing INFIX. func_echo_infix_1 () { $debug_cmd $require_term_colors _G_infix=$1; shift _G_indent=$_G_infix _G_prefix="$progname: $_G_infix: " _G_message=$* # Strip color escape sequences before counting printable length for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" do test -n "$_G_tc" && { _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` } done _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes func_echo_infix_1_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_infix_1_IFS $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 _G_prefix=$_G_indent done IFS=$func_echo_infix_1_IFS } # func_error ARG... # ----------------- # Echo program name prefixed message to standard error. func_error () { $debug_cmd $require_term_colors func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 } # func_fatal_error ARG... # ----------------------- # Echo program name prefixed message to standard error, and exit. func_fatal_error () { $debug_cmd func_error "$*" exit $EXIT_FAILURE } # func_grep EXPRESSION FILENAME # ----------------------------- # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $debug_cmd $GREP "$1" "$2" >/dev/null 2>&1 } # func_len STRING # --------------- # Set func_len_result to the length of STRING. STRING may not # start with a hyphen. test -z "$_G_HAVE_XSI_OPS" \ && (eval 'x=a/b/c; test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ && _G_HAVE_XSI_OPS=yes if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_len () { $debug_cmd func_len_result=${#1} }' else func_len () { $debug_cmd func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` } fi # func_mkdir_p DIRECTORY-PATH # --------------------------- # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { $debug_cmd _G_directory_path=$1 _G_dir_list= if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then # Protect directory names starting with '-' case $_G_directory_path in -*) _G_directory_path=./$_G_directory_path ;; esac # While some portion of DIR does not yet exist... while test ! -d "$_G_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. _G_dir_list=$_G_directory_path:$_G_dir_list # If the last portion added has no slash in it, the list is done case $_G_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` done _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` func_mkdir_p_IFS=$IFS; IFS=: for _G_dir in $_G_dir_list; do IFS=$func_mkdir_p_IFS # mkdir can fail with a 'File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$_G_dir" 2>/dev/null || : done IFS=$func_mkdir_p_IFS # Bail out if we (or some other process) failed to create a directory. test -d "$_G_directory_path" || \ func_fatal_error "Failed to create '$1'" fi } # func_mktempdir [BASENAME] # ------------------------- # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, BASENAME is the basename for that directory. func_mktempdir () { $debug_cmd _G_template=${TMPDIR-/tmp}/${1-$progname} if test : = "$opt_dry_run"; then # Return a directory name, but don't create it in dry-run mode _G_tmpdir=$_G_template-$$ else # If mktemp works, use that first and foremost _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` if test ! -d "$_G_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race _G_tmpdir=$_G_template-${RANDOM-0}$$ func_mktempdir_umask=`umask` umask 0077 $MKDIR "$_G_tmpdir" umask $func_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$_G_tmpdir" || \ func_fatal_error "cannot create temporary directory '$_G_tmpdir'" fi $ECHO "$_G_tmpdir" } # func_normal_abspath PATH # ------------------------ # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. func_normal_abspath () { $debug_cmd # These SED scripts presuppose an absolute path with a trailing slash. _G_pathcar='s|^/\([^/]*\).*$|\1|' _G_pathcdr='s|^/[^/]*||' _G_removedotparts=':dotsl s|/\./|/|g t dotsl s|/\.$|/|' _G_collapseslashes='s|/\{1,\}|/|g' _G_finalslash='s|/*$|/|' # Start from root dir and reassemble the path. func_normal_abspath_result= func_normal_abspath_tpath=$1 func_normal_abspath_altnamespace= case $func_normal_abspath_tpath in "") # Empty path, that just means $cwd. func_stripname '' '/' "`pwd`" func_normal_abspath_result=$func_stripname_result return ;; # The next three entries are used to spot a run of precisely # two leading slashes without using negated character classes; # we take advantage of case's first-match behaviour. ///*) # Unusual form of absolute path, do nothing. ;; //*) # Not necessarily an ordinary path; POSIX reserves leading '//' # and for example Cygwin uses it to access remote file shares # over CIFS/SMB, so we conserve a leading double slash if found. func_normal_abspath_altnamespace=/ ;; /*) # Absolute path, do nothing. ;; *) # Relative path, prepend $cwd. func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac # Cancel out all the simple stuff to save iterations. We also want # the path to end with a slash for ease of parsing, so make sure # there is one (and only one) here. func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"` while :; do # Processed it all yet? if test / = "$func_normal_abspath_tpath"; then # If we ascended to the root using ".." the result may be empty now. if test -z "$func_normal_abspath_result"; then func_normal_abspath_result=/ fi break fi func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_pathcar"` func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_pathcdr"` # Figure out what to do with it case $func_normal_abspath_tcomponent in "") # Trailing empty path component, ignore it. ;; ..) # Parent dir; strip last assembled component from result. func_dirname "$func_normal_abspath_result" func_normal_abspath_result=$func_dirname_result ;; *) # Actual path component, append it. func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent" ;; esac done # Restore leading double-slash if one was found on entry. func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } # func_notquiet ARG... # -------------------- # Echo program name prefixed message only when not in quiet mode. func_notquiet () { $debug_cmd $opt_quiet || func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_relative_path SRCDIR DSTDIR # -------------------------------- # Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. func_relative_path () { $debug_cmd func_relative_path_result= func_normal_abspath "$1" func_relative_path_tlibdir=$func_normal_abspath_result func_normal_abspath "$2" func_relative_path_tbindir=$func_normal_abspath_result # Ascend the tree starting from libdir while :; do # check if we have found a prefix of bindir case $func_relative_path_tbindir in $func_relative_path_tlibdir) # found an exact match func_relative_path_tcancelled= break ;; $func_relative_path_tlibdir*) # found a matching prefix func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" func_relative_path_tcancelled=$func_stripname_result if test -z "$func_relative_path_result"; then func_relative_path_result=. fi break ;; *) func_dirname $func_relative_path_tlibdir func_relative_path_tlibdir=$func_dirname_result if test -z "$func_relative_path_tlibdir"; then # Have to descend all the way to the root! func_relative_path_result=../$func_relative_path_result func_relative_path_tcancelled=$func_relative_path_tbindir break fi func_relative_path_result=../$func_relative_path_result ;; esac done # Now calculate path; take care to avoid doubling-up slashes. func_stripname '' '/' "$func_relative_path_result" func_relative_path_result=$func_stripname_result func_stripname '/' '/' "$func_relative_path_tcancelled" if test -n "$func_stripname_result"; then func_append func_relative_path_result "/$func_stripname_result" fi # Normalisation. If bindir is libdir, return '.' else relative path. if test -n "$func_relative_path_result"; then func_stripname './' '' "$func_relative_path_result" func_relative_path_result=$func_stripname_result fi test -n "$func_relative_path_result" || func_relative_path_result=. : } # func_quote_portable EVAL ARG # ---------------------------- # Internal function to portably implement func_quote_arg. Note that we still # keep attention to performance here so we as much as possible try to avoid # calling sed binary (so far O(N) complexity as long as func_append is O(1)). func_quote_portable () { $debug_cmd $require_check_ifs_backslash func_quote_portable_result=$2 # one-time-loop (easy break) while true do if $1; then func_quote_portable_result=`$ECHO "$2" | $SED \ -e "$sed_double_quote_subst" -e "$sed_double_backslash"` break fi # Quote for eval. case $func_quote_portable_result in *[\\\`\"\$]*) # Fallback to sed for $func_check_bs_ifs_broken=:, or when the string # contains the shell wildcard characters. case $check_ifs_backshlash_broken$func_quote_portable_result in :*|*[\[\*\?]*) func_quote_portable_result=`$ECHO "$func_quote_portable_result" \ | $SED "$sed_quote_subst"` break ;; esac func_quote_portable_old_IFS=$IFS for _G_char in '\' '`' '"' '$' do # STATE($1) PREV($2) SEPARATOR($3) set start "" "" func_quote_portable_result=dummy"$_G_char$func_quote_portable_result$_G_char"dummy IFS=$_G_char for _G_part in $func_quote_portable_result do case $1 in quote) func_append func_quote_portable_result "$3$2" set quote "$_G_part" "\\$_G_char" ;; start) set first "" "" func_quote_portable_result= ;; first) set quote "$_G_part" "" ;; esac done done IFS=$func_quote_portable_old_IFS ;; *) ;; esac break done func_quote_portable_unquoted_result=$func_quote_portable_result case $func_quote_portable_result in # double-quote args containing shell metacharacters to delay # word splitting, command substitution and variable expansion # for a subsequent eval. # many bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") func_quote_portable_result=\"$func_quote_portable_result\" ;; esac } # func_quotefast_eval ARG # ----------------------- # Quote one ARG (internal). This is equivalent to 'func_quote_arg eval ARG', # but optimized for speed. Result is stored in $func_quotefast_eval. if test xyes = `(x=; printf -v x %q yes; echo x"$x") 2>/dev/null`; then printf -v _GL_test_printf_tilde %q '~' if test '\~' = "$_GL_test_printf_tilde"; then func_quotefast_eval () { printf -v func_quotefast_eval_result %q "$1" } else # Broken older Bash implementations. Make those faster too if possible. func_quotefast_eval () { case $1 in '~'*) func_quote_portable false "$1" func_quotefast_eval_result=$func_quote_portable_result ;; *) printf -v func_quotefast_eval_result %q "$1" ;; esac } fi else func_quotefast_eval () { func_quote_portable false "$1" func_quotefast_eval_result=$func_quote_portable_result } fi # func_quote_arg MODEs ARG # ------------------------ # Quote one ARG to be evaled later. MODEs argument may contain zero or more # specifiers listed below separated by ',' character. This function returns two # values: # i) func_quote_arg_result # double-quoted (when needed), suitable for a subsequent eval # ii) func_quote_arg_unquoted_result # has all characters that are still active within double # quotes backslashified. Available only if 'unquoted' is specified. # # Available modes: # ---------------- # 'eval' (default) # - escape shell special characters # 'expand' # - the same as 'eval'; but do not quote variable references # 'pretty' # - request aesthetic output, i.e. '"a b"' instead of 'a\ b'. This might # be used later in func_quote to get output like: 'echo "a b"' instead # of 'echo a\ b'. This is slower than default on some shells. # 'unquoted' # - produce also $func_quote_arg_unquoted_result which does not contain # wrapping double-quotes. # # Examples for 'func_quote_arg pretty,unquoted string': # # string | *_result | *_unquoted_result # ------------+-----------------------+------------------- # " | \" | \" # a b | "a b" | a b # "a b" | "\"a b\"" | \"a b\" # * | "*" | * # z="${x-$y}" | "z=\"\${x-\$y}\"" | z=\"\${x-\$y}\" # # Examples for 'func_quote_arg pretty,unquoted,expand string': # # string | *_result | *_unquoted_result # --------------+---------------------+-------------------- # z="${x-$y}" | "z=\"${x-$y}\"" | z=\"${x-$y}\" func_quote_arg () { _G_quote_expand=false case ,$1, in *,expand,*) _G_quote_expand=: ;; esac case ,$1, in *,pretty,*|*,expand,*|*,unquoted,*) func_quote_portable $_G_quote_expand "$2" func_quote_arg_result=$func_quote_portable_result func_quote_arg_unquoted_result=$func_quote_portable_unquoted_result ;; *) # Faster quote-for-eval for some shells. func_quotefast_eval "$2" func_quote_arg_result=$func_quotefast_eval_result ;; esac } # func_quote MODEs ARGs... # ------------------------ # Quote all ARGs to be evaled later and join them into single command. See # func_quote_arg's description for more info. func_quote () { $debug_cmd _G_func_quote_mode=$1 ; shift func_quote_result= while test 0 -lt $#; do func_quote_arg "$_G_func_quote_mode" "$1" if test -n "$func_quote_result"; then func_append func_quote_result " $func_quote_arg_result" else func_append func_quote_result "$func_quote_arg_result" fi shift done } # func_stripname PREFIX SUFFIX NAME # --------------------------------- # strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_stripname () { $debug_cmd # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary variable first. func_stripname_result=$3 func_stripname_result=${func_stripname_result#"$1"} func_stripname_result=${func_stripname_result%"$2"} }' else func_stripname () { $debug_cmd case $2 in .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; esac } fi # func_show_eval CMD [FAIL_EXP] # ----------------------------- # Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { $debug_cmd _G_cmd=$1 _G_fail_exp=${2-':'} func_quote_arg pretty,expand "$_G_cmd" eval "func_notquiet $func_quote_arg_result" $opt_dry_run || { eval "$_G_cmd" _G_status=$? if test 0 -ne "$_G_status"; then eval "(exit $_G_status); $_G_fail_exp" fi } } # func_show_eval_locale CMD [FAIL_EXP] # ------------------------------------ # Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { $debug_cmd _G_cmd=$1 _G_fail_exp=${2-':'} $opt_quiet || { func_quote_arg expand,pretty "$_G_cmd" eval "func_echo $func_quote_arg_result" } $opt_dry_run || { eval "$_G_user_locale $_G_cmd" _G_status=$? eval "$_G_safe_locale" if test 0 -ne "$_G_status"; then eval "(exit $_G_status); $_G_fail_exp" fi } } # func_tr_sh # ---------- # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { $debug_cmd case $1 in [0-9]* | *[!a-zA-Z0-9_]*) func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` ;; * ) func_tr_sh_result=$1 ;; esac } # func_verbose ARG... # ------------------- # Echo program name prefixed message in verbose mode only. func_verbose () { $debug_cmd $opt_verbose && func_echo "$*" : } # func_warn_and_continue ARG... # ----------------------------- # Echo program name prefixed warning message to standard error. func_warn_and_continue () { $debug_cmd $require_term_colors func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 } # func_warning CATEGORY ARG... # ---------------------------- # Echo program name prefixed warning message to standard error. Warning # messages can be filtered according to CATEGORY, where this function # elides messages where CATEGORY is not listed in the global variable # 'opt_warning_types'. func_warning () { $debug_cmd # CATEGORY must be in the warning_categories list! case " $warning_categories " in *" $1 "*) ;; *) func_internal_error "invalid warning category '$1'" ;; esac _G_category=$1 shift case " $opt_warning_types " in *" $_G_category "*) $warning_func ${1+"$@"} ;; esac } # func_sort_ver VER1 VER2 # ----------------------- # 'sort -V' is not generally available. # Note this deviates from the version comparison in automake # in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a # but this should suffice as we won't be specifying old # version formats or redundant trailing .0 in bootstrap.conf. # If we did want full compatibility then we should probably # use m4_version_compare from autoconf. func_sort_ver () { $debug_cmd printf '%s\n%s\n' "$1" "$2" \ | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n } # func_lt_ver PREV CURR # --------------------- # Return true if PREV and CURR are in the correct order according to # func_sort_ver, otherwise false. Use it like this: # # func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." func_lt_ver () { $debug_cmd test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` } # Local variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" # time-stamp-time-zone: "UTC" # End: #! /bin/sh # A portable, pluggable option parser for Bourne shell. # Written by Gary V. Vaughan, 2010 # This is free software. There is NO warranty; not even for # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # # Copyright (C) 2010-2019, 2021 Bootstrap Authors # # This file is dual licensed under the terms of the MIT license # , and GPL version 2 or later # . You must apply one of # these licenses when using or redistributing this software or any of # the files within it. See the URLs above, or the file `LICENSE` # included in the Bootstrap distribution for the full license texts. # Please report bugs or propose patches to: # # Set a version string for this script. scriptversion=2019-02-19.15; # UTC ## ------ ## ## Usage. ## ## ------ ## # This file is a library for parsing options in your shell scripts along # with assorted other useful supporting features that you can make use # of too. # # For the simplest scripts you might need only: # # #!/bin/sh # . relative/path/to/funclib.sh # . relative/path/to/options-parser # scriptversion=1.0 # func_options ${1+"$@"} # eval set dummy "$func_options_result"; shift # ...rest of your script... # # In order for the '--version' option to work, you will need to have a # suitably formatted comment like the one at the top of this file # starting with '# Written by ' and ending with '# Copyright'. # # For '-h' and '--help' to work, you will also need a one line # description of your script's purpose in a comment directly above the # '# Written by ' line, like the one at the top of this file. # # The default options also support '--debug', which will turn on shell # execution tracing (see the comment above debug_cmd below for another # use), and '--verbose' and the func_verbose function to allow your script # to display verbose messages only when your user has specified # '--verbose'. # # After sourcing this file, you can plug in processing for additional # options by amending the variables from the 'Configuration' section # below, and following the instructions in the 'Option parsing' # section further down. ## -------------- ## ## Configuration. ## ## -------------- ## # You should override these variables in your script after sourcing this # file so that they reflect the customisations you have added to the # option parser. # The usage line for option parsing errors and the start of '-h' and # '--help' output messages. You can embed shell variables for delayed # expansion at the time the message is displayed, but you will need to # quote other shell meta-characters carefully to prevent them being # expanded when the contents are evaled. usage='$progpath [OPTION]...' # Short help message in response to '-h' and '--help'. Add to this or # override it after sourcing this library to reflect the full set of # options your script accepts. usage_message="\ --debug enable verbose shell tracing -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] -v, --verbose verbosely report processing --version print version information and exit -h, --help print short or long help message and exit " # Additional text appended to 'usage_message' in response to '--help'. long_help_message=" Warning categories include: 'all' show all warnings 'none' turn off all the warnings 'error' warnings are treated as fatal errors" # Help message printed before fatal option parsing errors. fatal_help="Try '\$progname --help' for more information." ## ------------------------- ## ## Hook function management. ## ## ------------------------- ## # This section contains functions for adding, removing, and running hooks # in the main code. A hook is just a list of function names that can be # run in order later on. # func_hookable FUNC_NAME # ----------------------- # Declare that FUNC_NAME will run hooks added with # 'func_add_hook FUNC_NAME ...'. func_hookable () { $debug_cmd func_append hookable_fns " $1" } # func_add_hook FUNC_NAME HOOK_FUNC # --------------------------------- # Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must # first have been declared "hookable" by a call to 'func_hookable'. func_add_hook () { $debug_cmd case " $hookable_fns " in *" $1 "*) ;; *) func_fatal_error "'$1' does not accept hook functions." ;; esac eval func_append ${1}_hooks '" $2"' } # func_remove_hook FUNC_NAME HOOK_FUNC # ------------------------------------ # Remove HOOK_FUNC from the list of hook functions to be called by # FUNC_NAME. func_remove_hook () { $debug_cmd eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' } # func_propagate_result FUNC_NAME_A FUNC_NAME_B # --------------------------------------------- # If the *_result variable of FUNC_NAME_A _is set_, assign its value to # *_result variable of FUNC_NAME_B. func_propagate_result () { $debug_cmd func_propagate_result_result=: if eval "test \"\${${1}_result+set}\" = set" then eval "${2}_result=\$${1}_result" else func_propagate_result_result=false fi } # func_run_hooks FUNC_NAME [ARG]... # --------------------------------- # Run all hook functions registered to FUNC_NAME. # It's assumed that the list of hook functions contains nothing more # than a whitespace-delimited list of legal shell function names, and # no effort is wasted trying to catch shell meta-characters or preserve # whitespace. func_run_hooks () { $debug_cmd _G_rc_run_hooks=false case " $hookable_fns " in *" $1 "*) ;; *) func_fatal_error "'$1' does not support hook functions." ;; esac eval _G_hook_fns=\$$1_hooks; shift for _G_hook in $_G_hook_fns; do func_unset "${_G_hook}_result" eval $_G_hook '${1+"$@"}' func_propagate_result $_G_hook func_run_hooks if $func_propagate_result_result; then eval set dummy "$func_run_hooks_result"; shift fi done } ## --------------- ## ## Option parsing. ## ## --------------- ## # In order to add your own option parsing hooks, you must accept the # full positional parameter list from your hook function. You may remove # or edit any options that you action, and then pass back the remaining # unprocessed options in '_result', escaped # suitably for 'eval'. # # The '_result' variable is automatically unset # before your hook gets called; for best performance, only set the # *_result variable when necessary (i.e. don't call the 'func_quote' # function unnecessarily because it can be an expensive operation on some # machines). # # Like this: # # my_options_prep () # { # $debug_cmd # # # Extend the existing usage message. # usage_message=$usage_message' # -s, --silent don'\''t print informational messages # ' # # No change in '$@' (ignored completely by this hook). Leave # # my_options_prep_result variable intact. # } # func_add_hook func_options_prep my_options_prep # # # my_silent_option () # { # $debug_cmd # # args_changed=false # # # Note that, for efficiency, we parse as many options as we can # # recognise in a loop before passing the remainder back to the # # caller on the first unrecognised argument we encounter. # while test $# -gt 0; do # opt=$1; shift # case $opt in # --silent|-s) opt_silent=: # args_changed=: # ;; # # Separate non-argument short options: # -s*) func_split_short_opt "$_G_opt" # set dummy "$func_split_short_opt_name" \ # "-$func_split_short_opt_arg" ${1+"$@"} # shift # args_changed=: # ;; # *) # Make sure the first unrecognised option "$_G_opt" # # is added back to "$@" in case we need it later, # # if $args_changed was set to 'true'. # set dummy "$_G_opt" ${1+"$@"}; shift; break ;; # esac # done # # # Only call 'func_quote' here if we processed at least one argument. # if $args_changed; then # func_quote eval ${1+"$@"} # my_silent_option_result=$func_quote_result # fi # } # func_add_hook func_parse_options my_silent_option # # # my_option_validation () # { # $debug_cmd # # $opt_silent && $opt_verbose && func_fatal_help "\ # '--silent' and '--verbose' options are mutually exclusive." # } # func_add_hook func_validate_options my_option_validation # # You'll also need to manually amend $usage_message to reflect the extra # options you parse. It's preferable to append if you can, so that # multiple option parsing hooks can be added safely. # func_options_finish [ARG]... # ---------------------------- # Finishing the option parse loop (call 'func_options' hooks ATM). func_options_finish () { $debug_cmd func_run_hooks func_options ${1+"$@"} func_propagate_result func_run_hooks func_options_finish } # func_options [ARG]... # --------------------- # All the functions called inside func_options are hookable. See the # individual implementations for details. func_hookable func_options func_options () { $debug_cmd _G_options_quoted=false for my_func in options_prep parse_options validate_options options_finish do func_unset func_${my_func}_result func_unset func_run_hooks_result eval func_$my_func '${1+"$@"}' func_propagate_result func_$my_func func_options if $func_propagate_result_result; then eval set dummy "$func_options_result"; shift _G_options_quoted=: fi done $_G_options_quoted || { # As we (func_options) are top-level options-parser function and # nobody quoted "$@" for us yet, we need to do it explicitly for # caller. func_quote eval ${1+"$@"} func_options_result=$func_quote_result } } # func_options_prep [ARG]... # -------------------------- # All initialisations required before starting the option parse loop. # Note that when calling hook functions, we pass through the list of # positional parameters. If a hook function modifies that list, and # needs to propagate that back to rest of this script, then the complete # modified list must be put in 'func_run_hooks_result' before returning. func_hookable func_options_prep func_options_prep () { $debug_cmd # Option defaults: opt_verbose=false opt_warning_types= func_run_hooks func_options_prep ${1+"$@"} func_propagate_result func_run_hooks func_options_prep } # func_parse_options [ARG]... # --------------------------- # The main option parsing loop. func_hookable func_parse_options func_parse_options () { $debug_cmd _G_parse_options_requote=false # this just eases exit handling while test $# -gt 0; do # Defer to hook functions for initial option parsing, so they # get priority in the event of reusing an option name. func_run_hooks func_parse_options ${1+"$@"} func_propagate_result func_run_hooks func_parse_options if $func_propagate_result_result; then eval set dummy "$func_parse_options_result"; shift # Even though we may have changed "$@", we passed the "$@" array # down into the hook and it quoted it for us (because we are in # this if-branch). No need to quote it again. _G_parse_options_requote=false fi # Break out of the loop if we already parsed every option. test $# -gt 0 || break # We expect that one of the options parsed in this function matches # and thus we remove _G_opt from "$@" and need to re-quote. _G_match_parse_options=: _G_opt=$1 shift case $_G_opt in --debug|-x) debug_cmd='set -x' func_echo "enabling shell trace mode" >&2 $debug_cmd ;; --no-warnings|--no-warning|--no-warn) set dummy --warnings none ${1+"$@"} shift ;; --warnings|--warning|-W) if test $# = 0 && func_missing_arg $_G_opt; then _G_parse_options_requote=: break fi case " $warning_categories $1" in *" $1 "*) # trailing space prevents matching last $1 above func_append_uniq opt_warning_types " $1" ;; *all) opt_warning_types=$warning_categories ;; *none) opt_warning_types=none warning_func=: ;; *error) opt_warning_types=$warning_categories warning_func=func_fatal_error ;; *) func_fatal_error \ "unsupported warning category: '$1'" ;; esac shift ;; --verbose|-v) opt_verbose=: ;; --version) func_version ;; -\?|-h) func_usage ;; --help) func_help ;; # Separate optargs to long options (plugins may need this): --*=*) func_split_equals "$_G_opt" set dummy "$func_split_equals_lhs" \ "$func_split_equals_rhs" ${1+"$@"} shift ;; # Separate optargs to short options: -W*) func_split_short_opt "$_G_opt" set dummy "$func_split_short_opt_name" \ "$func_split_short_opt_arg" ${1+"$@"} shift ;; # Separate non-argument short options: -\?*|-h*|-v*|-x*) func_split_short_opt "$_G_opt" set dummy "$func_split_short_opt_name" \ "-$func_split_short_opt_arg" ${1+"$@"} shift ;; --) _G_parse_options_requote=: ; break ;; -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; *) set dummy "$_G_opt" ${1+"$@"}; shift _G_match_parse_options=false break ;; esac if $_G_match_parse_options; then _G_parse_options_requote=: fi done if $_G_parse_options_requote; then # save modified positional parameters for caller func_quote eval ${1+"$@"} func_parse_options_result=$func_quote_result fi } # func_validate_options [ARG]... # ------------------------------ # Perform any sanity checks on option settings and/or unconsumed # arguments. func_hookable func_validate_options func_validate_options () { $debug_cmd # Display all warnings if -W was not given. test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" func_run_hooks func_validate_options ${1+"$@"} func_propagate_result func_run_hooks func_validate_options # Bail if the options were screwed! $exit_cmd $EXIT_FAILURE } ## ----------------- ## ## Helper functions. ## ## ----------------- ## # This section contains the helper functions used by the rest of the # hookable option parser framework in ascii-betical order. # func_fatal_help ARG... # ---------------------- # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { $debug_cmd eval \$ECHO \""Usage: $usage"\" eval \$ECHO \""$fatal_help"\" func_error ${1+"$@"} exit $EXIT_FAILURE } # func_help # --------- # Echo long help message to standard output and exit. func_help () { $debug_cmd func_usage_message $ECHO "$long_help_message" exit 0 } # func_missing_arg ARGNAME # ------------------------ # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { $debug_cmd func_error "Missing argument for '$1'." exit_cmd=exit } # func_split_equals STRING # ------------------------ # Set func_split_equals_lhs and func_split_equals_rhs shell variables # after splitting STRING at the '=' sign. test -z "$_G_HAVE_XSI_OPS" \ && (eval 'x=a/b/c; test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ && _G_HAVE_XSI_OPS=yes if test yes = "$_G_HAVE_XSI_OPS" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_split_equals () { $debug_cmd func_split_equals_lhs=${1%%=*} func_split_equals_rhs=${1#*=} if test "x$func_split_equals_lhs" = "x$1"; then func_split_equals_rhs= fi }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_split_equals () { $debug_cmd func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` func_split_equals_rhs= test "x$func_split_equals_lhs=" = "x$1" \ || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` } fi #func_split_equals # func_split_short_opt SHORTOPT # ----------------------------- # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. if test yes = "$_G_HAVE_XSI_OPS" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_split_short_opt () { $debug_cmd func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"} }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_split_short_opt () { $debug_cmd func_split_short_opt_name=`expr "x$1" : 'x\(-.\)'` func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` } fi #func_split_short_opt # func_usage # ---------- # Echo short help message to standard output and exit. func_usage () { $debug_cmd func_usage_message $ECHO "Run '$progname --help |${PAGER-more}' for full usage" exit 0 } # func_usage_message # ------------------ # Echo short help message to standard output. func_usage_message () { $debug_cmd eval \$ECHO \""Usage: $usage"\" echo $SED -n 's|^# || /^Written by/{ x;p;x } h /^Written by/q' < "$progpath" echo eval \$ECHO \""$usage_message"\" } # func_version # ------------ # Echo version message to standard output and exit. # The version message is extracted from the calling file's header # comments, with leading '# ' stripped: # 1. First display the progname and version # 2. Followed by the header comment line matching /^# Written by / # 3. Then a blank line followed by the first following line matching # /^# Copyright / # 4. Immediately followed by any lines between the previous matches, # except lines preceding the intervening completely blank line. # For example, see the header comments of this file. func_version () { $debug_cmd printf '%s\n' "$progname $scriptversion" $SED -n ' /^# Written by /!b s|^# ||; p; n :fwd2blnk /./ { n b fwd2blnk } p; n :holdwrnt s|^# || s|^# *$|| /^Copyright /!{ /./H n b holdwrnt } s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| G s|\(\n\)\n*|\1|g p; q' < "$progpath" exit $? } # Local variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-pattern: "30/scriptversion=%:y-%02m-%02d.%02H; # UTC" # time-stamp-time-zone: "UTC" # End: # Set a version string. scriptversion='(GNU libtool) 2.4.7' # func_echo ARG... # ---------------- # Libtool also displays the current mode in messages, so override # funclib.sh func_echo with this custom definition. func_echo () { $debug_cmd _G_message=$* func_echo_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_IFS $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" done IFS=$func_echo_IFS } # func_warning ARG... # ------------------- # Libtool warnings are not categorized, so override funclib.sh # func_warning with this simpler definition. func_warning () { $debug_cmd $warning_func ${1+"$@"} } ## ---------------- ## ## Options parsing. ## ## ---------------- ## # Hook in the functions to make sure our own options are parsed during # the option parsing loop. usage='$progpath [OPTION]... [MODE-ARG]...' # Short help message in response to '-h'. usage_message="Options: --config show all configuration variables --debug enable verbose shell tracing -n, --dry-run display commands without modifying any files --features display basic configuration information and exit --mode=MODE use operation mode MODE --no-warnings equivalent to '-Wnone' --preserve-dup-deps don't remove duplicate dependency libraries --quiet, --silent don't print informational messages --tag=TAG use configuration variables from tag TAG -v, --verbose print more informational messages than default --version print version information -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] -h, --help, --help-all print short, long, or detailed help message " # Additional text appended to 'usage_message' in response to '--help'. func_help () { $debug_cmd func_usage_message $ECHO "$long_help_message MODE must be one of the following: clean remove files from the build directory compile compile a source file into a libtool object execute automatically set library path, then run a program finish complete the installation of libtool libraries install install libraries or executables link create a library or an executable uninstall remove libraries from an installed directory MODE-ARGS vary depending on the MODE. When passed as first option, '--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. Try '$progname --help --mode=MODE' for a more detailed description of MODE. When reporting a bug, please describe a test case to reproduce it and include the following information: host-triplet: $host shell: $SHELL compiler: $LTCC compiler flags: $LTCFLAGS linker: $LD (gnu? $with_gnu_ld) version: $progname $scriptversion Debian-2.4.7-5 automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` Report bugs to . GNU libtool home page: . General help using GNU software: ." exit 0 } # func_lo2o OBJECT-NAME # --------------------- # Transform OBJECT-NAME from a '.lo' suffix to the platform specific # object suffix. lo2o=s/\\.lo\$/.$objext/ o2lo=s/\\.$objext\$/.lo/ if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_lo2o () { case $1 in *.lo) func_lo2o_result=${1%.lo}.$objext ;; * ) func_lo2o_result=$1 ;; esac }' # func_xform LIBOBJ-OR-SOURCE # --------------------------- # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) # suffix to a '.lo' libtool-object suffix. eval 'func_xform () { func_xform_result=${1%.*}.lo }' else # ...otherwise fall back to using sed. func_lo2o () { func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` } func_xform () { func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` } fi # func_fatal_configuration ARG... # ------------------------------- # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { func_fatal_error ${1+"$@"} \ "See the $PACKAGE documentation for more information." \ "Fatal configuration error." } # func_config # ----------- # Display the configuration for all the tags in this script. func_config () { re_begincf='^# ### BEGIN LIBTOOL' re_endcf='^# ### END LIBTOOL' # Default configuration. $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" # Now print the configurations for the tags. for tagname in $taglist; do $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" done exit $? } # func_features # ------------- # Display the features supported by this script. func_features () { echo "host: $host" if test yes = "$build_libtool_libs"; then echo "enable shared libraries" else echo "disable shared libraries" fi if test yes = "$build_old_libs"; then echo "enable static libraries" else echo "disable static libraries" fi exit $? } # func_enable_tag TAGNAME # ----------------------- # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { # Global variable: tagname=$1 re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" sed_extractcf=/$re_begincf/,/$re_endcf/p # Validate tagname. case $tagname in *[!-_A-Za-z0-9,/]*) func_fatal_error "invalid tag name: $tagname" ;; esac # Don't test for the "default" C tag, as we know it's # there but not specially marked. case $tagname in CC) ;; *) if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # func_check_version_match # ------------------------ # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } # libtool_options_prep [ARG]... # ----------------------------- # Preparation for options parsed by libtool. libtool_options_prep () { $debug_mode # Option defaults: opt_config=false opt_dlopen= opt_dry_run=false opt_help=false opt_mode= opt_preserve_dup_deps=false opt_quiet=false nonopt= preserve_args= _G_rc_lt_options_prep=: _G_rc_lt_options_prep=: # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; *) _G_rc_lt_options_prep=false ;; esac if $_G_rc_lt_options_prep; then # Pass back the list of options. func_quote eval ${1+"$@"} libtool_options_prep_result=$func_quote_result fi } func_add_hook func_options_prep libtool_options_prep # libtool_parse_options [ARG]... # --------------------------------- # Provide handling for libtool specific options. libtool_parse_options () { $debug_cmd _G_rc_lt_parse_options=false # Perform our own loop to consume as many options as possible in # each iteration. while test $# -gt 0; do _G_match_lt_parse_options=: _G_opt=$1 shift case $_G_opt in --dry-run|--dryrun|-n) opt_dry_run=: ;; --config) func_config ;; --dlopen|-dlopen) opt_dlopen="${opt_dlopen+$opt_dlopen }$1" shift ;; --preserve-dup-deps) opt_preserve_dup_deps=: ;; --features) func_features ;; --finish) set dummy --mode finish ${1+"$@"}; shift ;; --help) opt_help=: ;; --help-all) opt_help=': help-all' ;; --mode) test $# = 0 && func_missing_arg $_G_opt && break opt_mode=$1 case $1 in # Valid mode arguments: clean|compile|execute|finish|install|link|relink|uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $_G_opt" exit_cmd=exit break ;; esac shift ;; --no-silent|--no-quiet) opt_quiet=false func_append preserve_args " $_G_opt" ;; --no-warnings|--no-warning|--no-warn) opt_warning=false func_append preserve_args " $_G_opt" ;; --no-verbose) opt_verbose=false func_append preserve_args " $_G_opt" ;; --silent|--quiet) opt_quiet=: opt_verbose=false func_append preserve_args " $_G_opt" ;; --tag) test $# = 0 && func_missing_arg $_G_opt && break opt_tag=$1 func_append preserve_args " $_G_opt $1" func_enable_tag "$1" shift ;; --verbose|-v) opt_quiet=false opt_verbose=: func_append preserve_args " $_G_opt" ;; # An option not handled by this hook function: *) set dummy "$_G_opt" ${1+"$@"} ; shift _G_match_lt_parse_options=false break ;; esac $_G_match_lt_parse_options && _G_rc_lt_parse_options=: done if $_G_rc_lt_parse_options; then # save modified positional parameters for caller func_quote eval ${1+"$@"} libtool_parse_options_result=$func_quote_result fi } func_add_hook func_parse_options libtool_parse_options # libtool_validate_options [ARG]... # --------------------------------- # Perform any sanity checks on option settings and/or unconsumed # arguments. libtool_validate_options () { # save first non-option argument if test 0 -lt $#; then nonopt=$1 shift fi # preserve --debug test : = "$debug_cmd" || func_append preserve_args " --debug" case $host in # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps ;; esac $opt_help || { # Sanity checks first: func_check_version_match test yes != "$build_libtool_libs" \ && test yes != "$build_old_libs" \ && func_fatal_configuration "not configured to build any kind of library" # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$opt_dlopen" && test execute != "$opt_mode"; then func_error "unrecognized option '-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help=$help help="Try '$progname --help --mode=$opt_mode' for more information." } # Pass back the unparsed argument list func_quote eval ${1+"$@"} libtool_validate_options_result=$func_quote_result } func_add_hook func_validate_options libtool_validate_options # Process options as early as possible so that --help and --version # can return quickly. func_options ${1+"$@"} eval set dummy "$func_options_result"; shift ## ----------- ## ## Main. ## ## ----------- ## magic='%%%MAGIC variable%%%' magic_exe='%%%MAGIC EXE variable%%%' # Global variables. extracted_archives= extracted_serial=0 # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # func_generated_by_libtool # True iff stdin has been generated by Libtool. This function is only # a basic sanity check; it will hardly flush out determined imposters. func_generated_by_libtool_p () { $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_p file # True iff FILE is a libtool '.la' library or '.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p } # func_lalib_unsafe_p file # True iff FILE is a libtool '.la' library or '.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if 'file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case $lalib_p_line in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test yes = "$lalib_p" } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { test -f "$1" && $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $debug_cmd save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$sp$nl eval cmd=\"$cmd\" IFS=$save_ifs func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # 'FILE.' does not work on cygwin managed mounts. func_source () { $debug_cmd case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_resolve_sysroot PATH # Replace a leading = in PATH with a sysroot. Store the result into # func_resolve_sysroot_result func_resolve_sysroot () { func_resolve_sysroot_result=$1 case $func_resolve_sysroot_result in =*) func_stripname '=' '' "$func_resolve_sysroot_result" func_resolve_sysroot_result=$lt_sysroot$func_stripname_result ;; esac } # func_replace_sysroot PATH # If PATH begins with the sysroot, replace it with = and # store the result into func_replace_sysroot_result. func_replace_sysroot () { case $lt_sysroot:$1 in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" func_replace_sysroot_result='='$func_stripname_result ;; *) # Including no sysroot. func_replace_sysroot_result=$1 ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $debug_cmd if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case "$@ " in " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with '--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=$1 if test yes = "$build_libtool_libs"; then write_lobj=\'$2\' else write_lobj=none fi if test yes = "$build_old_libs"; then write_oldobj=\'$3\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T </dev/null` if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | $SED -e "$sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi fi } # end: func_convert_core_file_wine_to_w32 # func_convert_core_path_wine_to_w32 ARG # Helper function used by path conversion functions when $build is *nix, and # $host is mingw, cygwin, or some other w32 environment. Relies on a correctly # configured wine environment available, with the winepath program in $build's # $PATH. Assumes ARG has no leading or trailing path separator characters. # # ARG is path to be converted from $build format to win32. # Result is available in $func_convert_core_path_wine_to_w32_result. # Unconvertible file (directory) names in ARG are skipped; if no directory names # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { $debug_cmd # unfortunately, winepath doesn't convert paths, only file names func_convert_core_path_wine_to_w32_result= if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" if test -n "$func_convert_core_file_wine_to_w32_result"; then if test -z "$func_convert_core_path_wine_to_w32_result"; then func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi fi done IFS=$oldIFS fi } # end: func_convert_core_path_wine_to_w32 # func_cygpath ARGS... # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or # (2), returns the Cygwin file name or path in func_cygpath_result (input # file name or path is assumed to be in w32 format, as previously converted # from $build's *nix or MSYS format). In case (3), returns the w32 file name # or path in func_cygpath_result (input file name or path is assumed to be in # Cygwin format). Returns an empty string on error. # # ARGS are passed to cygpath, with the last one being the file name or path to # be converted. # # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH # environment variable; do not put it in $PATH. func_cygpath () { $debug_cmd if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then # on failure, ensure result is empty func_cygpath_result= fi else func_cygpath_result= func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" fi } #end: func_cygpath # func_convert_core_msys_to_w32 ARG # Convert file name or path ARG from MSYS format to w32 format. Return # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { $debug_cmd # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 # func_convert_file_check ARG1 ARG2 # Verify that ARG1 (a file name in $build format) was converted to $host # format in ARG2. Otherwise, emit an error message, but continue (resetting # func_to_host_file_result to ARG1). func_convert_file_check () { $debug_cmd if test -z "$2" && test -n "$1"; then func_error "Could not determine host file name corresponding to" func_error " '$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_file_result=$1 fi } # end func_convert_file_check # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH # Verify that FROM_PATH (a path in $build format) was converted to $host # format in TO_PATH. Otherwise, emit an error message, but continue, resetting # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { $debug_cmd if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" func_error " '$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. if test "x$1" != "x$2"; then lt_replace_pathsep_chars="s|$1|$2|g" func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else func_to_host_path_result=$3 fi fi } # end func_convert_path_check # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { $debug_cmd case $4 in $1 ) func_to_host_path_result=$3$func_to_host_path_result ;; esac case $4 in $2 ) func_append func_to_host_path_result "$3" ;; esac } # end func_convert_path_front_back_pathsep ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## # invoked via '$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. # func_to_host_file ARG # Converts the file name ARG from $build format to $host format. Return result # in func_to_host_file_result. func_to_host_file () { $debug_cmd $to_host_file_cmd "$1" } # end func_to_host_file # func_to_tool_file ARG LAZY # converts the file name ARG from $build format to toolchain format. Return # result in func_to_tool_file_result. If the conversion in use is listed # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { $debug_cmd case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 ;; *) $to_tool_file_cmd "$1" func_to_tool_file_result=$func_to_host_file_result ;; esac } # end func_to_tool_file # func_convert_file_noop ARG # Copy ARG to func_to_host_file_result. func_convert_file_noop () { func_to_host_file_result=$1 } # end func_convert_file_noop # func_convert_file_msys_to_w32 ARG # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_file_result. func_convert_file_msys_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_to_host_file_result=$func_convert_core_msys_to_w32_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_w32 # func_convert_file_cygwin_to_w32 ARG # Convert file name ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. func_to_host_file_result=`cygpath -m "$1"` fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_cygwin_to_w32 # func_convert_file_nix_to_w32 ARG # Convert file name ARG from *nix to w32 format. Requires a wine environment # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" func_to_host_file_result=$func_convert_core_file_wine_to_w32_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_w32 # func_convert_file_msys_to_cygwin ARG # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" func_to_host_file_result=$func_cygpath_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_cygwin # func_convert_file_nix_to_cygwin ARG # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed # in a wine environment, working winepath, and LT_CYGPATH set. Returns result # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" func_to_host_file_result=$func_cygpath_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_cygwin ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# # invoked via '$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. # # Path separators are also converted from $build format to $host format. If # ARG begins or ends with a path separator character, it is preserved (but # converted to $host format) on output. # # All path conversion functions are named using the following convention: # file name conversion function : func_convert_file_X_to_Y () # path conversion function : func_convert_path_X_to_Y () # where, for any given $build/$host combination the 'X_to_Y' value is the # same. If conversion functions are added for new $build/$host combinations, # the two new functions must follow this pattern, or func_init_to_host_path_cmd # will break. # func_init_to_host_path_cmd # Ensures that function "pointer" variable $to_host_path_cmd is set to the # appropriate value, based on the value of $to_host_file_cmd. to_host_path_cmd= func_init_to_host_path_cmd () { $debug_cmd if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" to_host_path_cmd=func_convert_path_$func_stripname_result fi } # func_to_host_path ARG # Converts the path ARG from $build format to $host format. Return result # in func_to_host_path_result. func_to_host_path () { $debug_cmd func_init_to_host_path_cmd $to_host_path_cmd "$1" } # end func_to_host_path # func_convert_path_noop ARG # Copy ARG to func_to_host_path_result. func_convert_path_noop () { func_to_host_path_result=$1 } # end func_convert_path_noop # func_convert_path_msys_to_w32 ARG # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_path_result. func_convert_path_msys_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # Remove leading and trailing path separator characters from ARG. MSYS # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; # and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result=$func_convert_core_msys_to_w32_result func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_msys_to_w32 # func_convert_path_cygwin_to_w32 ARG # Convert path ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_cygwin_to_w32 # func_convert_path_nix_to_w32 ARG # Convert path ARG from *nix to w32 format. Requires a wine environment and # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result=$func_convert_core_path_wine_to_w32_result func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_nix_to_w32 # func_convert_path_msys_to_cygwin ARG # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" func_to_host_path_result=$func_cygpath_result func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_msys_to_cygwin # func_convert_path_nix_to_cygwin ARG # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a # a wine environment, working winepath, and LT_CYGPATH set. Returns result in # func_to_host_file_result. func_convert_path_nix_to_cygwin () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" func_to_host_path_result=$func_cygpath_result func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_nix_to_cygwin # func_dll_def_p FILE # True iff FILE is a Windows DLL '.def' file. # Keep in sync with _LT_DLL_DEF_P in libtool.m4 func_dll_def_p () { $debug_cmd func_dll_def_p_tmp=`$SED -n \ -e 's/^[ ]*//' \ -e '/^\(;.*\)*$/d' \ -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ -e q \ "$1"` test DEF = "$func_dll_def_p_tmp" } # func_mode_compile arg... func_mode_compile () { $debug_cmd # Get the compilation command and the source file. base_compile= srcfile=$nonopt # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= pie_flag= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg=$arg arg_mode=normal ;; target ) libobj=$arg arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) test -n "$libobj" && \ func_fatal_error "you cannot specify '-o' more than once" arg_mode=target continue ;; -pie | -fpie | -fPIE) func_append pie_flag " $arg" continue ;; -shared | -static | -prefer-pic | -prefer-non-pic) func_append later " $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= save_ifs=$IFS; IFS=, for arg in $args; do IFS=$save_ifs func_append_quoted lastarg "$arg" done IFS=$save_ifs func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result # Add the arguments to base_compile. func_append base_compile " $lastarg" continue ;; *) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg=$srcfile srcfile=$arg ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. func_append_quoted base_compile "$lastarg" done # for arg case $arg_mode in arg) func_fatal_error "you must specify an argument for -Xcompile" ;; target) func_fatal_error "you must specify a target with '-o'" ;; *) # Get the name of the library object. test -z "$libobj" && { func_basename "$srcfile" libobj=$func_basename_result } ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo case $libobj in *.[cCFSifmso] | \ *.ada | *.adb | *.ads | *.asm | \ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) func_xform "$libobj" libobj=$func_xform_result ;; esac case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) func_fatal_error "cannot determine name of library object from '$libobj'" ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -shared) test yes = "$build_libtool_libs" \ || func_fatal_configuration "cannot build a shared library" build_old_libs=no continue ;; -static) build_libtool_libs=no build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done func_quote_arg pretty "$libobj" test "X$libobj" != "X$func_quote_arg_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name '$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname=$func_basename_result xdir=$func_dirname_result lobj=$xdir$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test yes = "$build_old_libs"; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test no = "$compiler_c_o"; then output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext lockfile=$output_obj.lock else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test yes = "$need_locks"; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test warn = "$need_locks"; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi func_append removelist " $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist func_append removelist " $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result func_quote_arg pretty "$srcfile" qsrcfile=$func_quote_arg_result # Only build a PIC object if we are building libtool libraries. if test yes = "$build_libtool_libs"; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test no != "$pic_mode"; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir func_append command " -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test warn = "$need_locks" && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test yes = "$suppress_opt"; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test yes = "$build_old_libs"; then if test yes != "$pic_mode"; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test yes = "$compiler_c_o"; then func_append command " -o $obj" fi # Suppress compiler output if we already did a PIC compilation. func_append command "$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test warn = "$need_locks" && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test no != "$need_locks"; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test compile = "$opt_mode" && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $opt_mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only -shared do not build a '.o' file suitable for static linking -static only build a '.o' file suitable for static linking -Wc,FLAG -Xcompiler FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a 'standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix '.c' with the library object suffix, '.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to '-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the '--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the 'install' or 'cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE use a list of object files found in FILE to specify objects -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler -Wa,FLAG -Xassembler FLAG pass linker-specific FLAG directly to the assembler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) All other options (arguments beginning with '-') are ignored. Every other argument is treated as a filename. Files ending in '.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in '.la', then a libtool library is created, only library objects ('.lo' files) may be specified, and '-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created using 'ar' and 'ranlib', or on Windows using 'lib'. If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode '$opt_mode'" ;; esac echo $ECHO "Try '$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then if test : = "$opt_help"; then func_mode_help else { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done } | $SED -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done } | $SED '1d /^When reporting/,/^Report/{ H d } $x /information about other modes/d /more detailed .*MODE/d s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' fi exit $? fi # func_mode_execute arg... func_mode_execute () { $debug_cmd # The first argument is the command name. cmd=$nonopt test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $opt_dlopen; do test -f "$file" \ || func_fatal_help "'$file' is not a file" dir= case $file in *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "'$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "'$file' was not linked with '-export-dynamic'" continue fi func_dirname "$file" "" "." dir=$func_dirname_result if test -f "$dir/$objdir/$dlname"; then func_append dir "/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir=$func_dirname_result ;; *) func_warning "'-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir=$absdir # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic=$magic # Check if any of the arguments is a wrapper script. args= for file do case $file in -* | *.la | *.lo ) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file=$progdir/$program elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file=$progdir/$program fi ;; esac # Quote arguments (to preserve shell metacharacters). func_append_quoted args "$file" done if $opt_dry_run; then # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" echo "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS else if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd=\$cmd$args fi } test execute = "$opt_mode" && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $debug_cmd libs= libdirs= admincmds= for opt in "$nonopt" ${1+"$@"} do if test -d "$opt"; then func_append libdirs " $opt" elif test -f "$opt"; then if func_lalib_unsafe_p "$opt"; then func_append libs " $opt" else func_warning "'$opt' is not a valid libtool archive" fi else func_fatal_error "invalid argument '$opt'" fi done if test -n "$libs"; then if test -n "$lt_sysroot"; then sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" else sysroot_cmd= fi # Remove sysroot references if $opt_dry_run; then for lib in $libs; do echo "removing references to $lt_sysroot and '=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done ${RM}r "$tmpdir" fi fi if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || func_append admincmds " $cmds" fi done fi # Exit here if they wanted silent mode. $opt_quiet && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use the '-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the '$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the '$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the '$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" echo "pages." ;; *) echo "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac echo "----------------------------------------------------------------------" fi exit $EXIT_SUCCESS } test finish = "$opt_mode" && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $debug_cmd # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || # Allow the use of GNU shtool's install command. case $nonopt in *shtool*) :;; *) false;; esac then # Aesthetically quote it. func_quote_arg pretty "$nonopt" install_prog="$func_quote_arg_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_arg pretty "$arg" func_append install_prog "$func_quote_arg_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; *) install_cp=false ;; esac # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=false stripme= no_mode=: for arg do arg2= if test -n "$dest"; then func_append files " $dest" dest=$arg continue fi case $arg in -d) isdir=: ;; -f) if $install_cp; then :; else prev=$arg fi ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then if test X-m = "X$prev" && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_arg pretty "$arg" func_append install_prog " $func_quote_arg_result" if test -n "$arg2"; then func_quote_arg pretty "$arg2" fi func_append install_shared_prog " $func_quote_arg_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the '$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_arg pretty "$install_override_mode" func_append install_shared_prog " -m $func_quote_arg_result" fi fi if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=: if $isdir; then destdir=$dest destname= else func_dirname_and_basename "$dest" "" "." destdir=$func_dirname_result destname=$func_basename_result # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "'$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "'$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic=$magic staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. func_append staticlibs " $file" ;; *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "'$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) func_append current_libdirs " $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) func_append future_libdirs " $libdir" ;; esac fi func_dirname "$file" "/" "" dir=$func_dirname_result func_append dir "$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi func_warning "relinking '$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname=$1 shift srcname=$realname test -n "$relink_command" && srcname=${realname}T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme=$stripme case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme= ;; esac ;; os2*) case $realname in *_dll.a) tstripme= ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try 'ln -sf' first, because the 'ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib=$destdir/$realname func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name=$func_basename_result instname=$dir/${name}i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && func_append staticlibs " $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile=$destdir/$destname else func_basename "$file" destfile=$func_basename_result destfile=$destdir/$destfile fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest=$destfile destfile= ;; *) func_fatal_help "cannot copy a libtool object to '$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test yes = "$build_old_libs"; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile=$destdir/$destname else func_basename "$file" destfile=$func_basename_result destfile=$destdir/$destfile fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext= case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=.exe fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script '$wrapper'" finalize=: for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` if test -n "$libdir" && test ! -f "$libfile"; then func_warning "'$lib' has not been installed in '$libdir'" finalize=false fi done relink_command= func_source "$wrapper" outputname= if test no = "$fast_install" && test -n "$relink_command"; then $opt_dry_run || { if $finalize; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file=$func_basename_result outputname=$tmpdir/$file # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_quiet || { func_quote_arg expand,pretty "$relink_command" eval "func_echo $func_quote_arg_result" } if eval "$relink_command"; then : else func_error "error: relink '$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file=$outputname else func_warning "cannot relink '$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name=$func_basename_result # Set up the ranlib parameters. oldlib=$destdir/$name func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $tool_oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run '$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test install = "$opt_mode" && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $debug_cmd my_outputname=$1 my_originator=$2 my_pic_p=${3-false} my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms=${my_outputname}S.c else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist=$output_objdir/$my_outputname.nm func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif #if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) /* External symbol declarations for the compiler. */\ " if test yes = "$dlself"; then func_verbose "generating symbol list for '$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 func_verbose "extracting global C symbols from '$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols=$output_objdir/$outputname.exp $opt_dry_run || { $RM $export_symbols eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from '$dlprefile'" func_basename "$dlprefile" name=$func_basename_result case $host in *cygwin* | *mingw* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" dlprefile_dlbasename= if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` if test -n "$dlprefile_dlname"; then func_basename "$dlprefile_dlname" dlprefile_dlbasename=$func_basename_result else # no lafile. user explicitly requested -dlpreopen . $sharedlib_from_linklib_cmd "$dlprefile" dlprefile_dlbasename=$sharedlib_from_linklib_result fi fi $opt_dry_run || { if test -n "$dlprefile_dlbasename"; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" eval '$ECHO ": $name " >> "$nlist"' fi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" } else # not an import lib $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } fi ;; *) $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } ;; esac done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi func_show_eval '$RM "${nlist}I"' if test -n "$global_symbol_to_import"; then eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' fi echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[];\ " if test -s "$nlist"I; then echo >> "$output_objdir/$my_dlsyms" "\ static void lt_syminit(void) { LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; for (; symbol->name; ++symbol) {" $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" echo >> "$output_objdir/$my_dlsyms" "\ } }" fi echo >> "$output_objdir/$my_dlsyms" "\ LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = { {\"$my_originator\", (void *) 0}," if test -s "$nlist"I; then echo >> "$output_objdir/$my_dlsyms" "\ {\"@INIT@\", (void *) <_syminit}," fi case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac echo >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) $my_pic_p && pic_flag_for_symtable=" $pic_flag" ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) func_append symtab_cflags " $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' # Transform the symbol file into the correct name. symfileobj=$output_objdir/${my_outputname}S.$objext case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for '$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` fi } # func_cygming_gnu_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is a GNU/binutils-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_gnu_implib_p () { $debug_cmd func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` test -n "$func_cygming_gnu_implib_tmp" } # func_cygming_ms_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is an MS-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_ms_implib_p () { $debug_cmd func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` test -n "$func_cygming_ms_implib_tmp" } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. # Despite the name, also deal with 64 bit binaries. func_win32_libid () { $debug_cmd win32_libid_type=unknown win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then case $nm_interface in "MS dumpbin") if func_cygming_ms_implib_p "$1" || func_cygming_gnu_implib_p "$1" then win32_nmres=import else win32_nmres= fi ;; *) func_to_tool_file "$1" func_convert_file_msys_to_w32 win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | $SED -n -e ' 1,100{ / I /{ s|.*|import| p q } }'` ;; esac case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_cygming_dll_for_implib ARG # # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { $debug_cmd sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs # # The is the core of a fallback implementation of a # platform-specific function to extract the name of the # DLL associated with the specified import library LIBNAME. # # SECTION_NAME is either .idata$6 or .idata$7, depending # on the platform and compiler that created the implib. # # Echos the name of the DLL associated with the # specified import library. func_cygming_dll_for_implib_fallback_core () { $debug_cmd match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ # Place marker at beginning of archive member dllname section s/.*/====MARK====/ p d } # These lines can sometimes be longer than 43 characters, but # are always uninteresting /:[ ]*file format pe[i]\{,1\}-/d /^In archive [^:]*:/d # Ensure marker is printed /^====MARK====/p # Remove all lines with less than 43 characters /^.\{43\}/!d # From remaining lines, remove first 43 characters s/^.\{43\}//' | $SED -n ' # Join marker and all lines until next marker into a single line /^====MARK====/ b para H $ b para b :para x s/\n//g # Remove the marker s/^====MARK====// # Remove trailing dots and whitespace s/[\. \t]*$// # Print /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the # archive that possess that section. Heuristic: eliminate # all those that have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually # begins with a literal '.' or a single character followed by # a '.'. # # Of those that remain, print the first one. $SED -e '/^\./d;/^.\./d;q' } # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # # This fallback implementation is for use when $DLLTOOL # does not support the --identify-strict option. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { $debug_cmd if func_cygming_gnu_implib_p "$1"; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` elif func_cygming_ms_implib_p "$1"; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown sharedlib_from_linklib_result= fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { $debug_cmd f_ex_an_ar_dir=$1; shift f_ex_an_ar_oldlib=$1 if test yes = "$lock_old_archive_extraction"; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' if test yes = "$lock_old_archive_extraction"; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $debug_cmd my_gentop=$1; shift my_oldlibs=${1+"$@"} my_oldobjs= my_xlib= my_xabs= my_xdir= for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib=$func_basename_result my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir=$my_gentop/$my_xlib_u func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` func_basename "$darwin_archive" darwin_base_archive=$func_basename_result darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches; do func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" cd "unfat-$$/$darwin_base_archive-$darwin_arch" func_extract_an_archive "`pwd`" "$darwin_base_archive" cd "$darwin_curdir" $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done func_extract_archives_result=$my_oldobjs } # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory where it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=${1-no} $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" func_quote_arg pretty "$ECHO" qECHO=$func_quote_arg_result $ECHO "\ # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } ECHO=$qECHO fi # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper # /script/ and the wrapper /executable/ that is used only on # windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options that match # this pattern). # # There are only two supported options: --lt-debug and # --lt-dump-script. There is, deliberately, no --lt-help. # # The first argument to this parsing function should be the # script's $0 value, followed by "$@". lt_option_debug= func_parse_lt_options () { lt_script_arg0=\$0 shift for lt_opt do case \"\$lt_opt\" in --lt-debug) lt_option_debug=1 ;; --lt-dump-script) lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` cat \"\$lt_dump_D/\$lt_dump_F\" exit 0 ;; --lt-*) \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 exit 1 ;; esac done # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 fi } # Used when --lt-debug. Prints its arguments to stdout # (redirection is the responsibility of the caller) func_lt_dump_args () { lt_dump_args_N=1; for lt_arg do \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } # Core function for launching the target application func_exec_program_core () { " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 } # A function to encapsulate launching the target application # Strips options in the --lt-* namespace from \$@ and # launches target application with the remaining arguments. func_exec_program () { case \" \$* \" in *\\ --lt-*) for lt_wr_arg do case \$lt_wr_arg in --lt-*) ;; *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; esac shift done ;; esac func_exec_program_core \${1+\"\$@\"} } # Parse options func_parse_lt_options \"\$0\" \${1+\"\$@\"} # Find the directory that this script lives in. thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test yes = "$fast_install"; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else \$ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # fixup the dll searchpath if we need to. # # Fix the DLL searchpath if we need to. Do this before prepending # to shlibpath, because on Windows, both are PATH and uninstalled # libraries must come first. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi # Export our shlibpath_var if we have one. if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` export $shlibpath_var " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. func_exec_program \${1+\"\$@\"} fi else # The program doesn't exist. \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat < #include #ifdef _MSC_VER # include # include # include #else # include # include # ifdef __CYGWIN__ # include # endif #endif #include #include #include #include #include #include #include #include #define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) /* declarations of non-ANSI functions */ #if defined __MINGW32__ # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif #elif defined __CYGWIN__ # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif /* #elif defined other_platform || defined ... */ #endif /* portability defines, excluding path handling macros */ #if defined _MSC_VER # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC #elif defined __MINGW32__ # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv #elif defined __CYGWIN__ # define HAVE_SETENV # define FOPEN_WB "wb" /* #elif defined other platforms ... */ #endif #if defined PATH_MAX # define LT_PATHMAX PATH_MAX #elif defined MAXPATHLEN # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif /* path handling portability macros */ #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ defined __OS2__ # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free (stale); stale = 0; } \ } while (0) #if defined LT_DEBUGWRAPPER static int lt_debug = 1; #else static int lt_debug = 0; #endif const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_debugprintf (const char *file, int line, const char *fmt, ...); void lt_fatal (const char *file, int line, const char *message, ...); static const char *nonnull (const char *s); static const char *nonempty (const char *s); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); char **prepare_spawn (char **argv); void lt_dump_script (FILE *f); EOF cat <= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; size_t tmp_len; char *concat_name; lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", nonempty (wrapper)); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined HAVE_DOS_BASED_FILE_SYSTEM if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined HAVE_DOS_BASED_FILE_SYSTEM } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = (size_t) (q - p); p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { lt_debugprintf (__FILE__, __LINE__, "checking path component for symlinks: %s\n", tmp_pathspec); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { lt_fatal (__FILE__, __LINE__, "error accessing file \"%s\": %s", tmp_pathspec, nonnull (strerror (errno))); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal (__FILE__, __LINE__, "could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (STREQ (str, pat)) *str = '\0'; } return str; } void lt_debugprintf (const char *file, int line, const char *fmt, ...) { va_list args; if (lt_debug) { (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } } static void lt_error_core (int exit_status, const char *file, int line, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *file, int line, const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); va_end (ap); } static const char * nonnull (const char *s) { return s ? s : "(null)"; } static const char * nonempty (const char *s) { return (s && !*s) ? "(empty)" : nonnull (s); } void lt_setenv (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_setenv) setting '%s' to '%s'\n", nonnull (name), nonnull (value)); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else size_t len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { size_t orig_value_len = strlen (orig_value); size_t add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } void lt_update_exe_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ size_t len = strlen (new_value); while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[--len] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF case $host_os in mingw*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Win32 CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" */ #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" char ** prepare_spawn (char **argv) { size_t argc; char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = XMALLOC (char *, argc + 1); /* Put quoted arguments into the new argument vector. */ for (i = 0; i < argc; i++) { const char *string = argv[i]; if (string[0] == '\0') new_argv[i] = xstrdup ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; char *quoted_string; char *p; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; quoted_string = XMALLOC (char, length + 1); p = quoted_string; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p = '\0'; new_argv[i] = quoted_string; } else new_argv[i] = (char *) string; } new_argv[argc] = NULL; return new_argv; } EOF ;; esac cat <<"EOF" void lt_dump_script (FILE* f) { EOF func_emit_wrapper yes | $SED -n -e ' s/^\(.\{79\}\)\(..*\)/\1\ \2/ h s/\([\\"]\)/\\\1/g s/$/\\n/ s/\([^\n]*\).*/ fputs ("\1", f);/p g D' cat <<"EOF" } EOF } # end: func_emit_cwrapperexe_src # func_win32_import_lib_p ARG # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { $debug_cmd case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } # func_suncc_cstd_abi # !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! # Several compiler flags select an ABI that is incompatible with the # Cstd library. Avoid specifying it if any are in CXXFLAGS. func_suncc_cstd_abi () { $debug_cmd case " $compile_command " in *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) suncc_use_cstd_abi=no ;; *) suncc_use_cstd_abi=yes ;; esac } # func_mode_link arg... func_mode_link () { $debug_cmd case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # what system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll that has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no bindir= dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= os2dllname= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=false prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module=$wl-single_module func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test yes != "$build_libtool_libs" \ && func_fatal_configuration "cannot build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg=$1 shift func_quote_arg pretty,unquoted "$arg" qarg=$func_quote_arg_unquoted_result func_append libtool_args " $func_quote_arg_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in bindir) bindir=$arg prev= continue ;; dlfiles|dlprefiles) $preload || { # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=: } case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test no = "$dlself"; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test dlprefiles = "$prev"; then dlself=yes elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test dlfiles = "$prev"; then func_append dlfiles " $arg" else func_append dlprefiles " $arg" fi prev= continue ;; esac ;; expsyms) export_symbols=$arg test -f "$arg" \ || func_fatal_error "symbol file '$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex=$arg prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) func_append deplibs " $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir=$arg prev= continue ;; mllvm) # Clang does not use LLVM to link, so we can simply discard any # '-mllvm $arg' options when doing the link step. prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # func_append moreargs " $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test none = "$pic_object" && test none = "$non_pic_object"; then func_fatal_error "cannot find name of object for '$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result if test none != "$pic_object"; then # Prepend the subdirectory the object is found in. pic_object=$xdir$pic_object if test dlfiles = "$prev"; then if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test dlprefiles = "$prev"; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg=$pic_object fi # Non-PIC object. if test none != "$non_pic_object"; then # Prepend the subdirectory the object is found in. non_pic_object=$xdir$non_pic_object # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test none = "$pic_object"; then arg=$non_pic_object fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object=$pic_object func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "'$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file '$arg' does not exist" fi arg=$save_arg prev= continue ;; os2dllname) os2dllname=$arg prev= continue ;; precious_regex) precious_files_regex=$arg prev= continue ;; release) release=-$arg prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test rpath = "$prev"; then case "$rpath " in *" $arg "*) ;; *) func_append rpath " $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) func_append xrpath " $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds=$arg prev= continue ;; weak) func_append weak_libs " $arg" prev= continue ;; xassembler) func_append compiler_flags " -Xassembler $qarg" prev= func_append compile_command " -Xassembler $qarg" func_append finalize_command " -Xassembler $qarg" continue ;; xcclinker) func_append linker_flags " $qarg" func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) func_append linker_flags " $qarg" func_append compiler_flags " $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg=$arg case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "'-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -bindir) prev=bindir continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test X-export-symbols = "X$arg"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname "-L" '' "$arg" if test -z "$func_stripname_result"; then if test "$#" -gt 0; then func_fatal_error "require no space between '-L' and '$1'" else func_fatal_error "need path for '-L' option" fi fi func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of '$dir'" dir=$absdir ;; esac case "$deplibs " in *" -L$dir "* | *" $arg "*) # Will only happen for absolute or sysroot arguments ;; *) # Preserve sysroot, but never include relative directories case $dir in [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; *) func_append deplibs " -L$dir" ;; esac func_append lib_search_path " $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) func_append dllsearchpath ":$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac continue ;; -l*) if test X-lc = "X$arg" || test X-lm = "X$arg"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test X-lc = "X$arg" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig* | *-*-midnightbsd*) # Do not include libc due to us having libc/libc_r. test X-lc = "X$arg" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework func_append deplibs " System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test X-lc = "X$arg" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test X-lc = "X$arg" && continue ;; esac elif test X-lc_r = "X$arg"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig* | *-*-midnightbsd*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi func_append deplibs " $arg" continue ;; -mllvm) prev=mllvm continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot|--sysroot) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; # Solaris ld rejects as of 11.4. Refer to Oracle bug 22985199. -pthread) case $host in *solaris2*) ;; *) case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) func_append new_inherited_linker_flags " $arg" ;; esac ;; esac continue ;; -mt|-mthreads|-kthread|-Kthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) func_append new_inherited_linker_flags " $arg" ;; esac continue ;; -multi_module) single_module=$wl-multi_module continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "'-no-install' is ignored for $host" func_warning "assuming '-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -os2dllname) prev=os2dllname continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; =*) func_stripname '=' '' "$dir" dir=$lt_sysroot$func_stripname_result ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs=$IFS; IFS=, for flag in $args; do IFS=$save_ifs func_quote_arg pretty "$flag" func_append arg " $func_quote_arg_result" func_append compiler_flags " $func_quote_arg_result" done IFS=$save_ifs func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs=$IFS; IFS=, for flag in $args; do IFS=$save_ifs func_quote_arg pretty "$flag" func_append arg " $wl$func_quote_arg_result" func_append compiler_flags " $wl$func_quote_arg_result" func_append linker_flags " $func_quote_arg_result" done IFS=$save_ifs func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xassembler) prev=xassembler continue ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_arg pretty "$arg" arg=$func_quote_arg_result ;; # Flags to be passed through unchanged, with rationale: # -64, -mips[0-9] enable 64-bit mode for the SGI compiler # -r[0-9][0-9]* specify processor for the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler # +DA*, +DD* enable 64-bit mode for the HP compiler # -q* compiler args for the IBM compiler # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC # -fstack-protector* stack protector flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization # -specs=* GCC specs files # -stdlib=* select c++ std lib with clang # -fsanitize=* Clang/GCC memory and address sanitizer # -fuse-ld=* Linker select flags for GCC # -static-* direct GCC to link specific libraries statically # -fcilkplus Cilk Plus language extension features for C/C++ # -Wa,* Pass flags directly to the assembler -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ -specs=*|-fsanitize=*|-fuse-ld=*|-static-*|-fcilkplus|-Wa,*) func_quote_arg pretty "$arg" arg=$func_quote_arg_result func_append compile_command " $arg" func_append finalize_command " $arg" func_append compiler_flags " $arg" continue ;; -Z*) if test os2 = "`expr $host : '.*\(os2\)'`"; then # OS/2 uses -Zxxx to specify OS/2-specific options compiler_flags="$compiler_flags $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case $arg in -Zlinker | -Zstack) prev=xcompiler ;; esac continue else # Otherwise treat like 'Some other compiler flag' below func_quote_arg pretty "$arg" arg=$func_quote_arg_result fi ;; # Some other compiler flag. -* | +*) func_quote_arg pretty "$arg" arg=$func_quote_arg_result ;; *.$objext) # A standard object. func_append objs " $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test none = "$pic_object" && test none = "$non_pic_object"; then func_fatal_error "cannot find name of object for '$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result test none = "$pic_object" || { # Prepend the subdirectory the object is found in. pic_object=$xdir$pic_object if test dlfiles = "$prev"; then if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test dlprefiles = "$prev"; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg=$pic_object } # Non-PIC object. if test none != "$non_pic_object"; then # Prepend the subdirectory the object is found in. non_pic_object=$xdir$non_pic_object # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test none = "$pic_object"; then arg=$non_pic_object fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object=$pic_object func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "'$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. func_append deplibs " $arg" func_append old_deplibs " $arg" continue ;; *.la) # A libtool-controlled library. func_resolve_sysroot "$arg" if test dlfiles = "$prev"; then # This library was specified with -dlopen. func_append dlfiles " $func_resolve_sysroot_result" prev= elif test dlprefiles = "$prev"; then # The library was specified with -dlpreopen. func_append dlprefiles " $func_resolve_sysroot_result" prev= else func_append deplibs " $func_resolve_sysroot_result" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_arg pretty "$arg" arg=$func_quote_arg_result ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then func_append compile_command " $arg" func_append finalize_command " $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the '$prevarg' option requires an argument" if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname=$func_basename_result libobjs_save=$libobjs if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" # Definition is injected by LT_CONFIG during libtool generation. func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" func_dirname "$output" "/" "" output_objdir=$func_dirname_result$objdir func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_preserve_dup_deps; then case "$libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append libs " $deplib" done if test lib = "$linkmode"; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; esac func_append pre_post_deps " $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=false newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test lib,link = "$linkmode,$pass"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs=$tmp_deplibs fi if test lib,link = "$linkmode,$pass" || test prog,scan = "$linkmode,$pass"; then libs=$deplibs deplibs= fi if test prog = "$linkmode"; then case $pass in dlopen) libs=$dlfiles ;; dlpreopen) libs=$dlprefiles ;; link) libs="$deplibs %DEPLIBS%" test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" ;; esac fi if test lib,dlpreopen = "$linkmode,$pass"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= func_resolve_sysroot "$lib" case $lib in *.la) func_source "$func_resolve_sysroot_result" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do func_basename "$deplib" deplib_base=$func_basename_result case " $weak_libs " in *" $deplib_base "*) ;; *) func_append deplibs " $deplib" ;; esac done done libs=$dlprefiles fi if test dlopen = "$pass"; then # Collect dlpreopened libraries save_deplibs=$deplibs deplibs= fi for deplib in $libs; do lib= found=false case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append compiler_flags " $deplib" if test lib = "$linkmode"; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -l*) if test lib != "$linkmode" && test prog != "$linkmode"; then func_warning "'-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test lib = "$linkmode"; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib=$searchdir/lib$name$search_ext if test -f "$lib"; then if test .la = "$search_ext"; then found=: else found=false fi break 2 fi done done if $found; then # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll=$l done if test "X$ll" = "X$old_library"; then # only static version available found=false func_dirname "$lib" "" "." ladir=$func_dirname_result lib=$ladir/$old_library if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi else # deplib doesn't seem to be a libtool library if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" fi continue fi ;; # -l *.ltframework) if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test lib = "$linkmode"; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test conv = "$pass" && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; prog) if test conv = "$pass"; then deplibs="$deplib $deplibs" continue fi if test scan = "$pass"; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; *) func_warning "'-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test link = "$pass"; then func_stripname '-R' '' "$deplib" func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) func_resolve_sysroot "$deplib" lib=$func_resolve_sysroot_result ;; *.$libext) if test conv = "$pass"; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=false case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=: fi ;; pass_all) valid_a_lib=: ;; esac if $valid_a_lib; then echo $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" else echo $ECHO "*** Warning: Trying to link with static lib archive $deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because the file extensions .$libext of this argument makes me believe" echo "*** that it is just a static archive that I should not use here." fi ;; esac continue ;; prog) if test link != "$pass"; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test conv = "$pass"; then deplibs="$deplib $deplibs" elif test prog = "$linkmode"; then if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then # If there is no dlopen support or we're linking statically, # we need to preload. func_append newdlprefiles " $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append newdlfiles " $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=: continue ;; esac # case $deplib $found || test -f "$lib" \ || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'" # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "'$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir=$func_dirname_result dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` if test lib,link = "$linkmode,$pass" || test prog,scan = "$linkmode,$pass" || { test prog != "$linkmode" && test lib != "$linkmode"; }; then test -n "$dlopen" && func_append dlfiles " $dlopen" test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" fi if test conv = "$pass"; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for '$lib'" fi # It is a libtool convenience library, so add in its objects. func_append convenience " $ladir/$objdir/$old_library" func_append old_convenience " $ladir/$objdir/$old_library" tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done elif test prog != "$linkmode" && test lib != "$linkmode"; then func_fatal_error "'$lib' is not a convenience library" fi continue fi # $pass = conv # Get the name of the library we link against. linklib= if test -n "$old_library" && { test yes = "$prefer_static_libs" || test built,no = "$prefer_static_libs,$installed"; }; then linklib=$old_library else for l in $old_library $library_names; do linklib=$l done fi if test -z "$linklib"; then func_fatal_error "cannot find name of link library for '$lib'" fi # This library was specified with -dlopen. if test dlopen = "$pass"; then test -z "$libdir" \ && func_fatal_error "cannot -dlopen a convenience library: '$lib'" if test -z "$dlname" || test yes != "$dlopen_support" || test no = "$build_libtool_libs" then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. func_append dlprefiles " $lib $dependency_libs" else func_append newdlfiles " $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of '$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir=$ladir fi ;; esac func_basename "$lib" laname=$func_basename_result # Find the relevant object directory and library name. if test yes = "$installed"; then if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library '$lib' was moved." dir=$ladir absdir=$abs_ladir libdir=$abs_ladir else dir=$lt_sysroot$libdir absdir=$lt_sysroot$libdir fi test yes = "$hardcode_automatic" && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir=$ladir absdir=$abs_ladir # Remove this search path later func_append notinst_path " $abs_ladir" else dir=$ladir/$objdir absdir=$abs_ladir/$objdir # Remove this search path later func_append notinst_path " $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test dlpreopen = "$pass"; then if test -z "$libdir" && test prog = "$linkmode"; then func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'" fi case $host in # special handling for platforms with PE-DLLs. *cygwin* | *mingw* | *cegcc* ) # Linker will automatically link against shared library if both # static and shared are present. Therefore, ensure we extract # symbols from the import library if a shared library is present # (otherwise, the dlopen module name will be incorrect). We do # this by putting the import library name into $newdlprefiles. # We recover the dlopen module name by 'saving' the la file # name in a special purpose variable, and (later) extracting the # dlname from the la file. if test -n "$dlname"; then func_tr_sh "$dir/$linklib" eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" func_append newdlprefiles " $dir/$linklib" else func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" fi ;; * ) # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then func_append newdlprefiles " $dir/$dlname" else func_append newdlprefiles " $dir/$linklib" fi ;; esac fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test lib = "$linkmode"; then deplibs="$dir/$old_library $deplibs" elif test prog,link = "$linkmode,$pass"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test prog = "$linkmode" && test link != "$pass"; then func_append newlib_search_path " $ladir" deplibs="$lib $deplibs" linkalldeplibs=false if test no != "$link_all_deplibs" || test -z "$library_names" || test no = "$build_libtool_libs"; then linkalldeplibs=: fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; esac # Need to link against all dependency_libs? if $linkalldeplibs; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done # for deplib continue fi # $linkmode = prog... if test prog,link = "$linkmode,$pass"; then if test -n "$library_names" && { { test no = "$prefer_static_libs" || test built,yes = "$prefer_static_libs,$installed"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then # Make sure the rpath contains only unique directories. case $temp_rpath: in *"$absdir:"*) ;; *) func_append temp_rpath "$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi # $linkmode,$pass = prog,link... if $alldeplibs && { test pass_all = "$deplibs_check_method" || { test yes = "$build_libtool_libs" && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test built = "$use_static_libs" && test yes = "$installed"; then use_static_libs=no fi if test -n "$library_names" && { test no = "$use_static_libs" || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc* | *os2*) # No point in relinking DLLs because paths are not encoded func_append notinst_deplibs " $lib" need_relink=no ;; *) if test no = "$installed"; then func_append notinst_deplibs " $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule= for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule=$dlpremoduletest break fi done if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then echo if test prog = "$linkmode"; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi if test lib = "$linkmode" && test yes = "$hardcode_into_libs"; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname=$1 shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname=$dlname elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc* | *os2*) func_arith $current - $age major=$func_arith_result versuffix=-$major ;; esac eval soname=\"$soname_spec\" else soname=$realname fi # Make a new name for the extract_expsyms_cmds to use soroot=$soname func_basename "$soroot" soname=$func_basename_result func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from '$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for '$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test prog = "$linkmode" || test relink != "$opt_mode"; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test no = "$hardcode_direct"; then add=$dir/$linklib case $host in *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; *-*-sysv4*uw2*) add_dir=-L$dir ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir=-L$dir ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we cannot # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library"; then echo echo "*** And there doesn't seem to be a static archive available" echo "*** The link will probably fail, sorry" else add=$dir/$old_library fi elif test -n "$old_library"; then add=$dir/$old_library fi fi esac elif test no = "$hardcode_minus_L"; then case $host in *-*-sunos*) add_shlibpath=$dir ;; esac add_dir=-L$dir add=-l$name elif test no = "$hardcode_shlibpath_var"; then add_shlibpath=$dir add=-l$name else lib_linked=no fi ;; relink) if test yes = "$hardcode_direct" && test no = "$hardcode_direct_absolute"; then add=$dir/$linklib elif test yes = "$hardcode_minus_L"; then add_dir=-L$absdir # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add=-l$name elif test yes = "$hardcode_shlibpath_var"; then add_shlibpath=$dir add=-l$name else lib_linked=no fi ;; *) lib_linked=no ;; esac if test yes != "$lib_linked"; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) func_append compile_shlibpath "$add_shlibpath:" ;; esac fi if test prog = "$linkmode"; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test yes != "$hardcode_direct" && test yes != "$hardcode_minus_L" && test yes = "$hardcode_shlibpath_var"; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac fi fi fi if test prog = "$linkmode" || test relink = "$opt_mode"; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test yes = "$hardcode_direct" && test no = "$hardcode_direct_absolute"; then add=$libdir/$linklib elif test yes = "$hardcode_minus_L"; then add_dir=-L$libdir add=-l$name elif test yes = "$hardcode_shlibpath_var"; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac add=-l$name elif test yes = "$hardcode_automatic"; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib"; then add=$inst_prefix_dir$libdir/$linklib else add=$libdir/$linklib fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir=-L$libdir # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add=-l$name fi if test prog = "$linkmode"; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test prog = "$linkmode"; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test unsupported != "$hardcode_direct"; then test -n "$old_library" && linklib=$old_library compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test yes = "$build_libtool_libs"; then # Not a shared library if test pass_all != "$deplibs_check_method"; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. echo $ECHO "*** Warning: This system cannot link to static lib archive $lib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." if test yes = "$module"; then echo "*** But as you try to build a module library, libtool will still create " echo "*** a static module, that should work as long as the dlopening application" echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using 'nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** 'nm' from GNU binutils and a full rebuild may help." fi if test no = "$build_old_libs"; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test lib = "$linkmode"; then if test -n "$dependency_libs" && { test yes != "$hardcode_into_libs" || test yes = "$build_old_libs" || test yes = "$link_static"; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) func_append xrpath " $temp_xrpath";; esac;; *) func_append temp_deplibs " $libdir";; esac done dependency_libs=$temp_deplibs fi func_append newlib_search_path " $absdir" # Link against this library test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result";; *) func_resolve_sysroot "$deplib" ;; esac if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $func_resolve_sysroot_result "*) func_append specialdeplibs " $func_resolve_sysroot_result" ;; esac fi func_append tmp_libs " $func_resolve_sysroot_result" done if test no != "$link_all_deplibs"; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in -L*) path=$deplib ;; *.la) func_resolve_sysroot "$deplib" deplib=$func_resolve_sysroot_result func_dirname "$deplib" "" "." dir=$func_dirname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of '$dir'" absdir=$dir fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names"; then for tmp in $deplibrary_names; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl"; then depdepl=$absdir/$objdir/$depdepl darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl" func_append linker_flags " -dylib_file $darwin_install_name:$depdepl" path= fi fi ;; *) path=-L$absdir/$objdir ;; esac else eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "'$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ func_warning "'$deplib' seems to be moved" path=-L$absdir fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test link = "$pass"; then if test prog = "$linkmode"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs=$newdependency_libs if test dlpreopen = "$pass"; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test dlopen != "$pass"; then test conv = "$pass" || { # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) func_append lib_search_path " $dir" ;; esac done newlib_search_path= } if test prog,link = "$linkmode,$pass"; then vars="compile_deplibs finalize_deplibs" else vars=deplibs fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) func_append tmp_libs " $deplib" ;; esac ;; *) func_append tmp_libs " $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Add Sun CC postdeps if required: test CXX = "$tagname" && { case $host_os in linux*) case `$CC -V 2>&1 | $SED 5q` in *Sun\ C*) # Sun C++ 5.9 func_suncc_cstd_abi if test no != "$suncc_use_cstd_abi"; then func_append postdeps ' -library=Cstd -library=Crun' fi ;; esac ;; solaris*) func_cc_basename "$CC" case $func_cc_basename_result in CC* | sunCC*) func_suncc_cstd_abi if test no != "$suncc_use_cstd_abi"; then func_append postdeps ' -library=Cstd -library=Crun' fi ;; esac ;; esac } # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i= ;; esac if test -n "$i"; then func_append tmp_libs " $i" fi done dependency_libs=$tmp_libs done # for pass if test prog = "$linkmode"; then dlfiles=$newdlfiles fi if test prog = "$linkmode" || test lib = "$linkmode"; then dlprefiles=$newdlprefiles fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then func_warning "'-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "'-l' and '-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "'-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "'-R' is ignored for archives" test -n "$vinfo" && \ func_warning "'-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "'-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "'-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs=$output func_append objs "$old_deplibs" ;; lib) # Make sure we only generate libraries of the form 'libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test no = "$module" \ && func_fatal_help "libtool library '$output' must begin with 'lib'" if test no != "$need_lib_prefix"; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test pass_all != "$deplibs_check_method"; then func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs" else echo $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" func_append libobjs " $objs" fi fi test no = "$dlself" \ || func_warning "'-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test 1 -lt "$#" \ && func_warning "ignoring multiple '-rpath's for a libtool library" install_libdir=$1 oldlibs= if test -z "$rpath"; then if test yes = "$build_libtool_libs"; then # Building a libtool convenience library. # Some compilers have problems with a '.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "'-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "'-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs=$IFS; IFS=: set dummy $vinfo 0 0 0 shift IFS=$save_ifs test -n "$7" && \ func_fatal_help "too many parameters to '-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major=$1 number_minor=$2 number_revision=$3 # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # that has an extra 1 added just for fun # case $version_type in # correct linux to gnu/linux during the next big refactor darwin|freebsd-elf|linux|midnightbsd-elf|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age=$number_minor revision=$number_revision ;; freebsd-aout|qnx|sunos) current=$number_major revision=$number_minor age=0 ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age=$number_minor revision=$number_minor lt_irix_increment=no ;; *) func_fatal_configuration "$modename: unknown library version type '$version_type'" ;; esac ;; no) current=$1 revision=$2 age=$3 ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT '$current' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION '$revision' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE '$age' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE '$age' is greater than the current interface number '$current'" func_fatal_error "'$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" # On Darwin other compilers case $CC in nagfor*) verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" ;; *) verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; esac ;; freebsd-aout) major=.$current versuffix=.$current.$revision ;; freebsd-elf | midnightbsd-elf) func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision ;; irix | nonstopux) if test no = "$lt_irix_increment"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring=$verstring_prefix$major.$revision # Add in all the interfaces that we are compatible with. loop=$revision while test 0 -ne "$loop"; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring=$verstring_prefix$major.$iface:$verstring done # Before this point, $major must not contain '.'. major=.$major versuffix=$major.$revision ;; linux) # correct to gnu/linux during the next big refactor func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=.$current.$age.$revision verstring=$current.$age.$revision # Add in all the interfaces that we are compatible with. loop=$age while test 0 -ne "$loop"; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring=$verstring:$iface.0 done # Make executables depend on our current version. func_append verstring ":$current.0" ;; qnx) major=.$current versuffix=.$current ;; sco) major=.$current versuffix=.$current ;; sunos) major=.$current versuffix=.$current.$revision ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 file systems. func_arith $current - $age major=$func_arith_result versuffix=-$major ;; *) func_fatal_configuration "unknown library version type '$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring=0.0 ;; esac if test no = "$need_version"; then versuffix= else versuffix=.0.0 fi fi # Remove version info from name if versioning should be avoided if test yes,no = "$avoid_version,$need_version"; then major= versuffix= verstring= fi # Check to see if the archive will have undefined symbols. if test yes = "$allow_undefined"; then if test unsupported = "$allow_undefined_flag"; then if test yes = "$build_old_libs"; then func_warning "undefined symbols not allowed in $host shared libraries; building static only" build_libtool_libs=no else func_fatal_error "can't build $host shared library unless -no-undefined is specified" fi fi else # Don't allow undefined symbols. allow_undefined_flag=$no_undefined_flag fi fi func_generate_dlsyms "$libname" "$libname" : func_append libobjs " $symfileobj" test " " = "$libobjs" && libobjs= if test relink != "$opt_mode"; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*) if test -n "$precious_files_regex"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi func_append removelist " $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then func_append oldlibs " $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do func_replace_sysroot "$libdir" func_append temp_xrpath " -R$func_replace_sysroot_result" case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles=$dlfiles dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) func_append dlfiles " $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles=$dlprefiles dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) func_append dlprefiles " $lib" ;; esac done if test yes = "$build_libtool_libs"; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework func_append deplibs " System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-midnightbsd*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test yes = "$build_libtool_need_lc"; then func_append deplibs " -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release= versuffix= major= newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c </dev/null` $nocaseglob else potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` fi for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib=$potent_lib while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | $SED 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;; *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib= break 2 fi done done fi if test -n "$a_deplib"; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib"; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" a_deplib= ;; esac fi if test -n "$a_deplib"; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib=$potent_lib # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib= break 2 fi done done fi if test -n "$a_deplib"; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib"; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs= tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` if test yes = "$allow_libtool_libs_with_static_runtimes"; then for i in $predeps $postdeps; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` done fi case $tmp_deplibs in *[!\ \ ]*) echo if test none = "$deplibs_check_method"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." fi echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes ;; esac ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac if test yes = "$droppeddeps"; then if test yes = "$module"; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" echo "*** a static module, that should work as long as the dlopening" echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using 'nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** 'nm' from GNU binutils and a full rebuild may help." fi if test no = "$build_old_libs"; then oldlibs=$output_objdir/$libname.$libext build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else echo "*** The inter-library dependencies that have been dropped here will be" echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." if test no = "$allow_undefined"; then echo echo "*** Since this library must not contain undefined symbols," echo "*** because either the platform does not support them or" echo "*** it was explicitly requested with -no-undefined," echo "*** libtool will only create a static version of it." if test no = "$build_old_libs"; then oldlibs=$output_objdir/$libname.$libext build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done deplibs=$new_libs # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test yes = "$build_libtool_libs"; then # Remove $wl instances when linking with ld. # FIXME: should test the right _cmds variable. case $archive_cmds in *\$LD\ *) wl= ;; esac if test yes = "$hardcode_into_libs"; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath=$finalize_rpath test relink = "$opt_mode" || rpath=$compile_rpath$rpath for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then func_replace_sysroot "$libdir" libdir=$func_replace_sysroot_result if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append dep_rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath=$finalize_shlibpath test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname=$1 shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname=$realname fi if test -z "$dlname"; then dlname=$soname fi lib=$output_objdir/$realname linknames= for link do func_append linknames " $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols=$output_objdir/$libname.uexp func_append delfiles " $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile func_dll_def_p "$export_symbols" || { # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols=$export_symbols export_symbols= always_export_symbols=yes } fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for '$libname.la'" export_symbols=$output_objdir/$libname.exp $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs=$IFS; IFS='~' for cmd1 in $cmds; do IFS=$save_ifs # Take the normal branch if the nm_file_list_spec branch # doesn't work or if tool conversion is not needed. case $nm_file_list_spec~$to_tool_file_cmd in *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) try_normal_branch=yes eval cmd=\"$cmd1\" func_len " $cmd" len=$func_len_result ;; *) try_normal_branch=no ;; esac if test yes = "$try_normal_branch" \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then func_show_eval "$cmd" 'exit $?' skipped_export=false elif test -n "$nm_file_list_spec"; then func_basename "$output" output_la=$func_basename_result save_libobjs=$libobjs save_output=$output output=$output_objdir/$output_la.nm func_to_tool_file "$output" libobjs=$nm_file_list_spec$func_to_tool_file_result func_append delfiles " $output" func_verbose "creating $NM input file list: $output" for obj in $save_libobjs; do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > "$output" eval cmd=\"$cmd1\" func_show_eval "$cmd" 'exit $?' output=$save_output libobjs=$save_libobjs skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS=$save_ifs if test -n "$export_symbols_regex" && test : != "$skipped_export"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols=$export_symbols test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test : != "$skipped_export" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for '$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands, which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) func_append tmp_deplibs " $test_deplib" ;; esac done deplibs=$tmp_deplibs if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test yes = "$compiler_needs_object" && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $convenience func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" func_append linker_flags " $flag" fi # Make a backup of the uninstalled library when relinking if test relink = "$opt_mode"; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test yes = "$module" && test -n "$module_cmds"; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test : != "$skipped_export" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output func_basename "$output" output_la=$func_basename_result # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then output=$output_objdir/$output_la.lnkscript func_verbose "creating GNU ld script: $output" echo 'INPUT (' > $output for obj in $save_libobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done echo ')' >> $output func_append delfiles " $output" func_to_tool_file "$output" output=$func_to_tool_file_result elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then output=$output_objdir/$output_la.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test yes = "$compiler_needs_object"; then firstobj="$1 " shift fi for obj do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done func_append delfiles " $output" func_to_tool_file "$output" output=$firstobj\"$file_list_spec$func_to_tool_file_result\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-$k.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test -z "$objlist" || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test 1 -eq "$k"; then # The first file doesn't have a previous command to add. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" else # All subsequent reloadable object files will link in # the last one created. reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-$k.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-$k.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds$reload_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi func_append delfiles " $output" else output= fi ${skipped_export-false} && { func_verbose "generating symbol list for '$libname.la'" export_symbols=$output_objdir/$libname.exp $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi } test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs=$IFS; IFS='~' for cmd in $concat_cmds; do IFS=$save_ifs $opt_quiet || { func_quote_arg expand,pretty "$cmd" eval "func_echo $func_quote_arg_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test relink = "$opt_mode"; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS=$save_ifs if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi ${skipped_export-false} && { if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols=$export_symbols test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for '$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands, which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi } libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test yes = "$module" && test -n "$module_cmds"; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs=$IFS; IFS='~' for cmd in $cmds; do IFS=$sp$nl eval cmd=\"$cmd\" IFS=$save_ifs $opt_quiet || { func_quote_arg expand,pretty "$cmd" eval "func_echo $func_quote_arg_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test relink = "$opt_mode"; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS=$save_ifs # Restore the uninstalled library and exit if test relink = "$opt_mode"; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test yes = "$module" || test yes = "$export_dynamic"; then # On all known operating systems, these are identical. dlname=$soname fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then func_warning "'-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "'-l' and '-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "'-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "'-R' is ignored for objects" test -n "$vinfo" && \ func_warning "'-version-info' is ignored for objects" test -n "$release" && \ func_warning "'-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object '$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj=$output ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # if reload_cmds runs $LD directly, get rid of -Wl from # whole_archive_flag_spec and hope we can get by with turning comma # into space. case $reload_cmds in *\$LD[\ \$]*) wl= ;; esac if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags else gentop=$output_objdir/${obj}x func_append generated " $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # If we're not building shared, we need to use non_pic_objs test yes = "$build_libtool_libs" || libobjs=$non_pic_objects # Create the old-style object. reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs output=$obj func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi test yes = "$build_libtool_libs" || { if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS } if test -n "$pic_flag" || test default != "$pic_mode"; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output=$libobj func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "'-version-info' is ignored for programs" test -n "$release" && \ func_warning "'-release' is ignored for programs" $preload \ && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test CXX = "$tagname"; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) func_append compile_command " $wl-bind_at_load" func_append finalize_command " $wl-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done compile_deplibs=$new_libs func_append compile_command " $compile_deplibs" func_append finalize_command " $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) func_append dllsearchpath ":$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath=$rpath rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) func_append finalize_perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath=$rpath if test -n "$libobjs" && test yes = "$build_old_libs"; then # Transform all the library objects into standard objects. compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" false # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=: case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. wrappers_required=false ;; *cygwin* | *mingw* ) test yes = "$build_libtool_libs" || wrappers_required=false ;; *) if test no = "$need_relink" || test yes != "$build_libtool_libs"; then wrappers_required=false fi ;; esac $wrappers_required || { # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` link_command=$compile_command$compile_rpath # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Delete the generated files. if test -f "$output_objdir/${outputname}S.$objext"; then func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' fi exit $exit_status } if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do func_append rpath "$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test yes = "$no_install"; then # We don't need to create a wrapper script. link_command=$compile_var$compile_command$compile_rpath # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi exit $EXIT_SUCCESS fi case $hardcode_action,$fast_install in relink,*) # Fast installation is not supported link_command=$compile_var$compile_command$compile_rpath relink_command=$finalize_var$finalize_command$finalize_rpath func_warning "this platform does not like uninstalled shared libraries" func_warning "'$output' will be relinked during installation" ;; *,yes) link_command=$finalize_var$compile_command$finalize_rpath relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` ;; *,no) link_command=$compile_var$compile_command$compile_rpath relink_command=$finalize_var$finalize_command$finalize_rpath ;; *,needless) link_command=$finalize_var$compile_command$finalize_rpath relink_command= ;; esac # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output_objdir/$outputname" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_arg pretty "$var_value" relink_command="$var=$func_quote_arg_result; export $var; $relink_command" fi done func_quote eval cd "`pwd`" func_quote_arg pretty,unquoted "($func_quote_result; $relink_command)" relink_command=$func_quote_arg_unquoted_result fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource=$output_path/$objdir/lt-$output_name.c cwrapper=$output_path/$output_name.exe $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host"; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do case $build_libtool_libs in convenience) oldobjs="$libobjs_save $symfileobj" addlibs=$convenience build_libtool_libs=no ;; module) oldobjs=$libobjs_save addlibs=$old_convenience build_libtool_libs=no ;; *) oldobjs="$old_deplibs $non_pic_objects" $preload && test -f "$symfileobj" \ && func_append oldobjs " $symfileobj" addlibs=$old_convenience ;; esac if test -n "$addlibs"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $addlibs func_append oldobjs " $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append oldobjs " $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else echo "copying selected object files to avoid basename conflicts..." gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase=$func_basename_result case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" func_append oldobjs " $gentop/$newobj" ;; *) func_append oldobjs " $obj" ;; esac done fi func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds elif test -n "$archiver_list_spec"; then func_verbose "using command file archive linking..." for obj in $oldobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > $output_objdir/$libname.libcmd func_to_tool_file "$output_objdir/$libname.libcmd" oldobjs=" $archiver_list_spec$func_to_tool_file_result" cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result func_append objlist " $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj"; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test -z "$oldobjs"; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test yes = "$build_old_libs" && old_library=$libname.$libext func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_arg pretty,unquoted "$var_value" relink_command="$var=$func_quote_arg_unquoted_result; export $var; $relink_command" fi done # Quote the link command for shipping. func_quote eval cd "`pwd`" relink_command="($func_quote_result; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" func_quote_arg pretty,unquoted "$relink_command" relink_command=$func_quote_arg_unquoted_result if test yes = "$hardcode_automatic"; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test yes = "$installed"; then if test -z "$install_libdir"; then break fi output=$output_objdir/${outputname}i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name=$func_basename_result func_resolve_sysroot "$deplib" eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` test -z "$libdir" && \ func_fatal_error "'$deplib' is not a valid libtool archive" func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" ;; -L*) func_stripname -L '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -L$func_replace_sysroot_result" ;; -R*) func_stripname -R '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -R$func_replace_sysroot_result" ;; *) func_append newdependency_libs " $deplib" ;; esac done dependency_libs=$newdependency_libs newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name=$func_basename_result eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "'$lib' is not a valid libtool archive" func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; *) func_append newdlfiles " $lib" ;; esac done dlfiles=$newdlfiles newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name=$func_basename_result eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "'$lib' is not a valid libtool archive" func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" ;; esac done dlprefiles=$newdlprefiles else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlfiles " $abs" done dlfiles=$newdlfiles newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlprefiles " $abs" done dlprefiles=$newdlprefiles fi $RM $output # place dlname in correct position for cygwin # In fact, it would be nice if we could use this code for all target # systems that can't hard-code library paths into their executables # and that have no shared library path variable independent of PATH, # but it turns out we can't easily determine that from inspecting # libtool variables, so we have to hard-code the OSs to which it # applies here; at the moment, that means platforms that use the PE # object format with DLL files. See the long comment at the top of # tests/bindir.at for full details. tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. if test -n "$bindir"; then func_relative_path "$install_libdir" "$bindir" tdlname=$func_relative_path_result/$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname fi ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that cannot go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test no,yes = "$installed,$need_relink"; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } if test link = "$opt_mode" || test relink = "$opt_mode"; then func_mode_link ${1+"$@"} fi # func_mode_uninstall arg... func_mode_uninstall () { $debug_cmd RM=$nonopt files= rmforce=false exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic=$magic for arg do case $arg in -f) func_append RM " $arg"; rmforce=: ;; -*) func_append RM " $arg" ;; *) func_append files " $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= for file in $files; do func_dirname "$file" "" "." dir=$func_dirname_result if test . = "$dir"; then odir=$objdir else odir=$dir/$objdir fi func_basename "$file" name=$func_basename_result test uninstall = "$opt_mode" && odir=$dir # Remember odir for removal later, being careful to avoid duplicates if test clean = "$opt_mode"; then case " $rmdirs " in *" $odir "*) ;; *) func_append rmdirs " $odir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif $rmforce; then continue fi rmfiles=$file case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do func_append rmfiles " $odir/$n" done test -n "$old_library" && func_append rmfiles " $odir/$old_library" case $opt_mode in clean) case " $library_names " in *" $dlname "*) ;; *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; esac test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test none != "$pic_object"; then func_append rmfiles " $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test none != "$non_pic_object"; then func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) if test clean = "$opt_mode"; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe func_append rmfiles " $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result func_append rmfiles " $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles func_append rmfiles " $odir/$name $odir/${name}S.$objext" if test yes = "$fast_install" && test -n "$relink_command"; then func_append rmfiles " $odir/lt-$name" fi if test "X$noexename" != "X$name"; then func_append rmfiles " $odir/lt-$noexename.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done # Try to remove the $objdir's in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then func_mode_uninstall ${1+"$@"} fi test -z "$opt_mode" && { help=$generic_help func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode '$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # where we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: lasso-2.8.2/PaxHeaders/ChangeLog0000644000000000000000000000013214404126166013500 xustar0030 mtime=1678814326.401984018 30 atime=1678814323.213965859 30 ctime=1678814326.417984109 lasso-2.8.2/ChangeLog0000644000175000017500001332727114404126166016770 0ustar00bdauvergnebdauvergne00000000000000# Generated by Makefile. Do not edit. commit d457886486985cb460edf254edf5f945abae8de1 Author: Benjamin Dauvergne Date: Sat Mar 4 14:09:01 2023 +0100 Release 2.8.2 (#74996) - Compatibility with EVP API of openssl 1.x, thanks to Maxime Besson from Worteks. ChangeLog | 23 +++++++++++++++++++++++ NEWS | 6 ++++++ configure.ac | 2 +- website/web/doap.rdf | 4 ++++ website/web/news/30-release-2.8.2.xml | 15 +++++++++++++++ 5 files changed, 49 insertions(+), 1 deletion(-) commit 7ac76525be5f79fc4561afc6d843e6d641e1c3d9 Author: Benjamin Dauvergne Date: Sat Mar 4 14:06:40 2023 +0100 Compatibility with EVP API of openssl 1.x (#74996) Thanks to Maxime Besson from Worteks. lasso/xml/tools.c | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) commit 614cf17d991f458038fe793fb22b64e2c4e297a4 Author: Benjamin Dauvergne Date: Wed Nov 2 10:11:35 2022 +0100 Release 2.8.1 -·Major·overhaul·of·OpenSSL·API·usage·by·using·only·the·EVP·API·as·the·low¶ ··level·API·(RSA*,·HMAC*)·is·deprecated.¶ -·Fix·wrong·parsing·of·Count·attribute·on·saml:ProxyRestriction,·thanks·to¶ ··Maxime·Besson·from·Worteks.¶ -·Perl:·pass·LDFLAGS·to·Makefile.PL¶ -·Replace·use·of·deprecated·xmlSecBase64Decode·by·xmlSecBase64Decode_ex¶ -·Fix·overwrite·of·profile.signature_status·in·lasso_saml20_login_process_response_status_and_assertion¶ -·Fix·lot·of·GCC·warnings¶ ChangeLog | 81 ++++++++++++++++++++++++++++++++++- NEWS | 12 ++++-- configure.ac | 2 +- website/web/doap.rdf | 4 ++ website/web/news/29-release-2.8.1.xml | 15 +++++++ 5 files changed, 109 insertions(+), 5 deletions(-) commit 089a2a00032543443158465859c3b4b1cb838bea Author: Agate Date: Mon Feb 20 15:09:38 2023 +0100 Prepare Jenkinsfile for Gitea migration (#74572) Jenkinsfile | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) commit 8d43785224184e3ccf29d097b13dff51a952dcdb Author: Frédéric Péters Date: Thu Feb 9 11:12:21 2023 +0100 debian: introduce autopkgtests (#74360) debian-bullseye/tests/control | 3 +++ debian-bullseye/tests/sso.py | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) commit 8d48a768029cd9c5d8ee89cbaf2519273e5b3222 Author: Frédéric Péters Date: Thu Dec 22 17:21:27 2022 +0100 ci: only build package for bullseye (#72729) Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 16148102e5e35262ac9536b1f2cf4a2370731466 Author: Benjamin Dauvergne Date: Thu Nov 17 10:43:34 2022 +0100 In lasso_saml20_login_process_response_status_and_assertion does not overwirte signature_status with rc which is always at 0 (#54689) We are losing information in this case, like if the response was not signed. lasso/saml-2.0/login.c | 5 ----- 1 file changed, 5 deletions(-) commit 2d7863482750891e11d5baa6d612235c6b52055c Author: Jakub Hrozek Date: Mon Jul 26 16:25:52 2021 +0200 In lasso_saml20_login_process_response_status_and_assertion remove dead switch (#54689) In case VERIFY_HINT was set to IGNORE and the login signature was incorrect, lasso_saml20_login_process_response_status_and_assertion would have jumped straight to the cleanup label which just returns the return code. Related: https://dev.entrouvert.org/issues/54689 License: MIT lasso/saml-2.0/login.c | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) commit d10c0f66935f961d1e0dec9bc5bc8a44a0ed423a Author: Benjamin Dauvergne Date: Wed Nov 16 17:22:07 2022 +0100 Fix unused parameters warnings (#71400) lasso/lasso.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 72b778e47e207f2da7de7254c7ce733a15498782 Author: Benjamin Dauvergne Date: Wed Nov 16 17:08:31 2022 +0100 Fix all cast-function-type warnings (#71400) lasso/id-ff/federation.c | 2 +- lasso/id-ff/identity.c | 2 +- lasso/id-ff/lecp.c | 2 +- lasso/id-ff/login.c | 2 +- lasso/id-ff/logout.c | 2 +- lasso/id-ff/name_registration.c | 2 +- lasso/id-ff/profile.c | 2 +- lasso/id-ff/provider.c | 2 +- lasso/id-ff/server.c | 5 +++-- lasso/id-ff/session.c | 8 ++++---- lasso/key.c | 2 +- lasso/saml-2.0/assertion_query.c | 2 +- lasso/saml-2.0/ecp.c | 2 +- lasso/utils.c | 6 +++++- lasso/xml/dsig/ds_x509_data.c | 2 +- lasso/xml/ecp/ecp_request.c | 2 +- lasso/xml/lib_authn_request.c | 2 +- lasso/xml/lib_scoping.c | 2 +- lasso/xml/saml-2.0/saml2_assertion.c | 2 +- lasso/xml/saml-2.0/saml2_key_info_confirmation_data_type.c | 2 +- lasso/xml/saml-2.0/samlp2_authn_request.c | 2 +- lasso/xml/saml-2.0/samlp2_request_abstract.c | 2 +- lasso/xml/saml-2.0/samlp2_status_response.c | 2 +- lasso/xml/samlp_request_abstract.c | 2 +- lasso/xml/samlp_response_abstract.c | 2 +- 25 files changed, 34 insertions(+), 29 deletions(-) commit 69b1ea1c2f01ad8c3d6e7a078760537531ec321b Author: Benjamin Dauvergne Date: Wed Nov 16 16:37:10 2022 +0100 Fix warning about enum conversion (#71400) lasso/id-ff/profile.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 99fe56bec485066bb50669fbf38a722938683850 Author: Benjamin Dauvergne Date: Wed Nov 16 16:21:12 2022 +0100 Fix all warnings in tests (#71400) tests/Makefile.am | 1 + tests/basic_tests.c | 244 +++++++++++++++++++++++----------------------- tests/login_tests.c | 140 +++++++++++++------------- tests/login_tests_saml2.c | 114 +++++++++++----------- tests/metadata_tests.c | 14 +-- tests/random_tests.c | 114 +++++++++++----------- tests/tests.c | 8 +- tests/tests.h | 25 ++--- 8 files changed, 328 insertions(+), 332 deletions(-) commit 0c4d3014a48011f0efe926bf0d1ca0d3c424007b Author: Benjamin Dauvergne Date: Wed Nov 16 13:08:37 2022 +0100 Fix use of wrong enumeration NULL value (#71400) It produced a cast warning. lasso/xml/private.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 6389b2ca4847820340cc026061e5228e73615498 Author: Benjamin Dauvergne Date: Wed Nov 16 15:41:16 2022 +0100 Fix warnings about type casts (#71400) lasso/xml/tools.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 8a588a8acb4a9cb7c7cb4dfd91a8278264a6d15a Author: Benjamin Dauvergne Date: Wed Nov 16 15:40:19 2022 +0100 Replace all use of xmlSecBase64Decode by lasso_base64_decode (#71399) lasso/id-ff/login.c | 12 +++- lasso/id-ff/provider.c | 8 +-- lasso/id-ff/session.c | 15 ++-- lasso/saml-2.0/profile.c | 35 ++++------ lasso/xml/tools.c | 176 +++++++++++++++++++---------------------------- lasso/xml/xml.c | 16 ++--- 6 files changed, 112 insertions(+), 150 deletions(-) commit 1aa6271f93e48b24f42991aba8906dfd073a1fe3 Author: Benjamin Dauvergne Date: Wed Nov 16 15:38:35 2022 +0100 Adapt lasso_base64_decode to the deprecation of xmlSecBase64Decode (#71399) We now use the non-deprecated new API (since xmlsec 1.2.35) xmlSecBase64Decode_ex. lasso/xml/tools.c | 54 ++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 42 insertions(+), 12 deletions(-) commit b263815fa495371adc1bb59045cf0c33fa3fb71a Author: Benjamin Dauvergne Date: Wed Nov 16 13:08:04 2022 +0100 Add new define LASSO_XMLSEC_VERSION_NUMBER allow version check on libxmlsec (#71399) configure.ac | 4 ++++ 1 file changed, 4 insertions(+) commit 228ac9470f383c5c9dad9f4d314b708c9fd45f16 Author: Benjamin Dauvergne Date: Wed Nov 16 15:36:53 2022 +0100 Make lasso_inflate output the inflated buffer size (#71399) lasso/xml/tools.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) commit 66ebd11166038c23e642c4f9ed2f036815872e41 Author: Benjamin Dauvergne Date: Wed Nov 16 15:35:27 2022 +0100 Use OpenSSL EVP API to work around deprecation of low level APIs in OpenSSL 3 (#71313) OpenSSL API is used to sign query-string values in the SAML 2.0 Redirect binding. Other binding only need the libxmlsec API as signature are XML DSIG signatures. lasso/id-ff/provider.c | 2 +- lasso/xml/private.h | 4 +- lasso/xml/tools.c | 325 ++++++++++++++++++++++++------------------------- 3 files changed, 162 insertions(+), 169 deletions(-) commit 0705940804c8f5652167e5bc61099e75949d93bd Author: Benjamin Dauvergne Date: Thu Nov 17 16:48:20 2022 +0100 Prevent loading of default cert file during tests (#71396) tests/Makefile.am | 2 ++ 1 file changed, 2 insertions(+) commit d4488c2f72979313aea5dd9f425ca041ce86b85b Author: Frédéric Péters Date: Sun Nov 20 12:26:39 2022 +0100 debian: sync with upstream packaging changes debian-bullseye/changelog | 29 +++++++++++++++++++++++++++++ debian-bullseye/control | 1 + debian-bullseye/liblasso3.symbols | 8 +++++++- debian-bullseye/rules | 3 +++ 4 files changed, 40 insertions(+), 1 deletion(-) commit e4f50c8b257b9ec2301632fef07ae7e5b86bb8c4 Author: Frédéric Péters Date: Thu Nov 17 09:55:44 2022 +0100 perl: pass $(LDFLAGS) to Makefile.PL (#71393) LDFLAGS is set during the Debian build to pass hardening flags and we want them to be applied to the perl module. bindings/perl/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 3a7ad3610f64cfa4a231fb543712371c1828e5e4 Author: Benjamin Dauvergne Date: Wed Sep 28 18:18:36 2022 +0200 Fix parsing of Count attribute of saml:ProxyRestriction (#69673) NEWS | 6 ++++++ lasso/xml/saml-2.0/saml2_proxy_restriction.c | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) commit f83d02f3140ae50a266bec2193587bdfe05fbcf0 Author: Benjamin Dauvergne Date: Wed Apr 27 14:54:06 2022 +0200 Revert "Use the AM_PATH_PYTHON macro instead of custom macros" This reverts commit 23d91efac34fed8c338a388449e763e58527b3d3. bindings/python/Makefile.am | 1 + configure.ac | 39 ++++++++++++++++++++++++++++++++------- 2 files changed, 33 insertions(+), 7 deletions(-) commit 23d91efac34fed8c338a388449e763e58527b3d3 Author: Benjamin Dauvergne Date: Wed Apr 27 10:44:57 2022 +0200 Use the AM_PATH_PYTHON macro instead of custom macros bindings/python/Makefile.am | 1 - configure.ac | 39 +++++++-------------------------------- 2 files changed, 7 insertions(+), 33 deletions(-) commit 7aa61446894665a3c030672138f7fb789afbc57b Author: Benjamin Dauvergne Date: Tue Mar 15 15:33:51 2022 +0100 website: update for 2.8.0 website/web/doap.rdf | 4 ++++ website/web/news/28-release-2.8.0.xml | 15 +++++++++++++++ 2 files changed, 19 insertions(+) commit 6e1306c0f8ff40a50ca82cbb61597cf30c863c9f Author: Benjamin Dauvergne Date: Tue Mar 15 13:11:01 2022 +0100 Release 2.8.0 ChangeLog | 960 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ NEWS | 13 + configure.ac | 2 +- 3 files changed, 974 insertions(+), 1 deletion(-) commit ade143667509b1bdb73a288cc57fcb44cae4d297 Author: Frédéric Péters Date: Mon Mar 14 21:29:50 2022 +0100 debian: sync bullseye packaging with upstream debian.org (#62756) debian-bullseye/changelog | 14 ++++++++++++++ debian-bullseye/compat | 1 - debian-bullseye/control | 10 ++++------ debian-bullseye/files | 1 - debian-bullseye/php5-lasso.install | 3 --- debian-bullseye/php5-lasso.postinst | 7 ------- debian-bullseye/php5-lasso.prerm | 7 ------- debian-bullseye/php5-lasso.substvars | 4 ---- debian-bullseye/rules | 2 +- 9 files changed, 19 insertions(+), 30 deletions(-) commit 904361430f106392cf375cf7b46f1fff715e7006 Author: Frédéric Péters Date: Mon Feb 28 15:37:52 2022 +0100 jenkins: add bullseye to packaging targets Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit d4259f05175b18f70d7e3d267a468e2fdf28f837 Author: Frédéric Péters Date: Sat Nov 20 10:19:36 2021 +0100 debian: sync bullseye packaging with upstream debian.org (#58788) debian-bullseye/changelog | 88 ++++++++++++++++++++++++++ debian-bullseye/compat | 2 +- debian-bullseye/control | 50 +-------------- debian-bullseye/files | 1 + debian-bullseye/liblasso-java.dirs | 1 - debian-bullseye/liblasso-java.install | 2 - debian-bullseye/liblasso3.symbols | 8 +-- debian-bullseye/python-lasso.install | 2 - debian-bullseye/rules | 115 +++++++++++----------------------- 9 files changed, 132 insertions(+), 137 deletions(-) commit 71d4bf9c08863acf7a28db1373fd833a53d13a89 Author: Frédéric Péters Date: Sat Nov 20 10:14:53 2021 +0100 debian: init debian-bullseye as a copy of debian buster (#58788) debian-bullseye/changelog | 479 ++++++++++++++++++++++++++ debian-bullseye/compat | 1 + debian-bullseye/control | 115 +++++++ debian-bullseye/control.in | 115 +++++++ debian-bullseye/copyright | 44 +++ debian-bullseye/dirs | 2 + debian-bullseye/liblasso-java.dirs | 1 + debian-bullseye/liblasso-java.install | 2 + debian-bullseye/liblasso-perl.install.in | 1 + debian-bullseye/liblasso3-dev.dirs | 2 + debian-bullseye/liblasso3-dev.install | 4 + debian-bullseye/liblasso3.dirs | 1 + debian-bullseye/liblasso3.docs | 2 + debian-bullseye/liblasso3.install | 1 + debian-bullseye/liblasso3.symbols | 572 +++++++++++++++++++++++++++++++ debian-bullseye/patches/series | 0 debian-bullseye/php5-lasso.install | 3 + debian-bullseye/php5-lasso.postinst | 7 + debian-bullseye/php5-lasso.prerm | 7 + debian-bullseye/php5-lasso.substvars | 4 + debian-bullseye/python-lasso.install | 2 + debian-bullseye/python3-lasso.install | 2 + debian-bullseye/rules | 186 ++++++++++ debian-bullseye/source/format | 1 + debian-bullseye/watch | 2 + 25 files changed, 1556 insertions(+) commit a28fb8c8e1a01c7c226e016c91bef2e5b4436e23 Author: Benjamin Dauvergne Date: Mon Sep 27 14:14:23 2021 +0200 Does not decref boolean constants (#57268) TRUE/FALSE are special references in CPython bindings whose reference count must never be updated. bindings/python/lang.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit d80357e22635888764c9a07eb2604a6d0cb56f91 Author: Benjamin Dauvergne Date: Mon Sep 13 11:20:52 2021 +0200 Keep ABI stability (#56883) The following functions where part of the experimental ID-WSF support recently removed but where incorrectly included in the official ABI, so we restore dummy versions of them (they do nothing or return NULL): - lasso_get_prefix_for_dst_service_href - lasso_get_prefix_for_idwsf2_dst_service_href - lasso_register_dst_service - lasso_register_idwsf2_dst_service debian-buster/liblasso3.symbols | 4 ++++ debian-stretch/liblasso3.symbols | 4 ++++ lasso/lasso.c | 17 +++++++++++++++++ lasso/lasso.h | 6 ++++++ 4 files changed, 31 insertions(+) commit aab962cb69ca35207fb24144197c5ec5d070f2c7 Author: Benjamin Dauvergne Date: Sat Sep 11 20:21:00 2021 +0200 debian: update liblasso3.symbols debian-buster/liblasso3.symbols | 11 +++++++---- debian-stretch/liblasso3.symbols | 11 +++++++---- 2 files changed, 14 insertions(+), 8 deletions(-) commit 23035115a3cdb3b54e0027e3742974e071d32ed3 Author: Benjamin Dauvergne Date: Sat Sep 4 10:44:39 2021 +0200 Clear Python error indicator after logging (#56572) Lasso log using the GLib logging API and the Python binding install a hook to delegate logging to a Python logger named "lasso". During the logging call the error indicator can be set to signal an exception. The indicator will still be set when we return from the Lasso API call, and is not handled by the Python wrapping of the C functions. If our function returns a non-NULL value, the Python interpreter will raise because this situation is forbidden. To prevent it, if we detect that an exception occurred during logging calls, we print it to stderr, clear the error indicator and return immediately. bindings/python/wrapper_top.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) commit 53b0bd356982eb970581aa360d750c8a0e7132a0 Author: Benjamin Dauvergne Date: Fri Sep 3 07:48:35 2021 +0200 Change default key encryption padding algorithm to RSA-OAEP (#56023) The key encryption padding algorithm is now configurable, the default being changed to OAEP. It's possible to set the default through ./configure with: --with-default-key-encryption-method=[rsa-pkcs1|rsa-oaep] at initialization time with an environment variable: LASSO_DEFAULT_KEY_ENCRYPTION_METHOD=[rsa-pkcs1|rsa-oaep] or at runtime for a service provider: lasso_provider_set_key_encryption_method(LassoProvider *provider, LassoKeyEncryptionMethod key_encryption_method) The setting is global for all encrypted nodes (Assertion or NameID). bindings/python/tests/profiles_tests.py | 52 ++++++++++++++++++++++++++++++ configure.ac | 19 +++++++++++ lasso/id-ff/login.c | 1 + lasso/id-ff/provider.c | 38 ++++++++++++++++++++++ lasso/id-ff/provider.h | 6 ++++ lasso/id-ff/providerprivate.h | 2 ++ lasso/lasso.c | 33 +++++++++++++++++++ lasso/saml-2.0/login.c | 4 ++- lasso/saml-2.0/profile.c | 1 + lasso/saml-2.0/provider.c | 1 + lasso/xml/private.h | 11 +++++-- lasso/xml/tools.c | 7 +++-- lasso/xml/xml.c | 56 ++++++++++++++++++++++++++++++--- lasso/xml/xml.h | 7 +++++ lasso/xml/xml_enc.h | 15 +++++++++ 15 files changed, 242 insertions(+), 11 deletions(-) commit 1e718bd3aaa4bc203c6418d3cce0e0bc1f0d19b3 Author: Benjamin Dauvergne Date: Fri Sep 3 11:13:49 2021 +0200 Python: fix formatting (#56023) bindings/python/tests/profiles_tests.py | 60 +++++++++++++++------------------ 1 file changed, 27 insertions(+), 33 deletions(-) commit 906edf55994a6ca814c778b323a03be281908e53 Author: Benjamin Dauvergne Date: Sat Sep 4 00:36:57 2021 +0200 Remove win32 directory (#56645) It's obsolete. Makefile.am | 1 - configure.ac | 14 - win32/Makefile.am | 4 - win32/lasso.rc.in | 102 ---- win32/msvc/Makefile.am | 4 - win32/msvc/java/Makefile.am | 2 - win32/msvc/java/java.dsp | 108 ---- win32/msvc/lasso.dsp.in | 1215 ----------------------------------------- win32/msvc/lasso.dsw | 74 --- win32/msvc/lasso_config.h.in | 33 -- win32/msvc/php/Makefile.am | 2 - win32/msvc/php/php.dsp | 110 ---- win32/msvc/python/Makefile.am | 2 - win32/msvc/python/python.dsp | 106 ---- win32/nsis/Makefile.am | 3 - win32/nsis/jlasso-lite.nsi.in | 109 ---- win32/nsis/lasso-deps.nsi.in | 170 ------ win32/nsis/lasso-full.nsi.in | 176 ------ win32/nsis/lasso-lite.nsi.in | 113 ---- win32/nsis/lasso.ico | Bin 2190 -> 0 bytes win32/nsis/python.nsi.in | 146 ----- 21 files changed, 2494 deletions(-) commit 4a880977d126d89ac4e9c5e15b55acda81de85f3 Author: Benjamin Dauvergne Date: Sat Sep 4 00:02:14 2021 +0200 Remove ID-WSF 1.0, 2.0 and WS-* support (#56644) It has been deprecated for a long time. bindings/bindings.py | 21 +- bindings/java/Makefile.am | 4 - bindings/overrides.xml | 37 - bindings/perl/Makefile.am | 4 - bindings/perl/lang.py | 4 +- bindings/php5/Makefile.am | 5 - bindings/php5/php_code.py | 3 - bindings/php7/Makefile.am | 5 - bindings/php7/php_code.py | 4 - bindings/python/Makefile.am | 4 - bindings/python/lang.py | 11 - bindings/python/tests/Makefile.am | 7 +- bindings/python/tests/idwsf2_tests.py | 796 ----- bindings/python/tests/tests.py | 3 - bindings/utils.py | 3 - configure.ac | 32 - docs/reference/lasso/Makefile.am | 20 +- docs/reference/lasso/lasso-docs.xml | 227 -- docs/reference/lasso/lasso-sections.txt | 3552 +------------------- docs/reference/lasso/lasso.types | 126 + docs/reference/lasso/lasso.types.in | 346 -- lasso.doap | 2 +- lasso/Makefile.am | 19 - lasso/errors.h | 282 -- lasso/extract_sections.py | 7 +- lasso/extract_symbols.py | 24 +- lasso/extract_types.py | 29 +- lasso/id-ff/identity.c | 74 - lasso/id-ff/identityprivate.h | 5 - lasso/id-ff/login.c | 13 - lasso/id-ff/loginprivate.h | 9 - lasso/id-ff/profile.c | 26 - lasso/id-ff/profile.h | 18 - lasso/id-ff/provider.h | 2 +- lasso/id-ff/server.c | 20 - lasso/id-ff/session.c | 43 - lasso/id-ff/sessionprivate.h | 3 - lasso/id-wsf-2.0/Makefile.am | 40 - lasso/id-wsf-2.0/data_service.c | 1062 ------ lasso/id-wsf-2.0/data_service.h | 145 - lasso/id-wsf-2.0/discovery.c | 1538 --------- lasso/id-wsf-2.0/discovery.h | 153 - lasso/id-wsf-2.0/id_wsf_2.h | 34 - lasso/id-wsf-2.0/identity.c | 54 - lasso/id-wsf-2.0/identity.h | 44 - lasso/id-wsf-2.0/idwsf2_helper.c | 381 --- lasso/id-wsf-2.0/idwsf2_helper.h | 74 - lasso/id-wsf-2.0/private.h | 37 - lasso/id-wsf-2.0/profile.c | 1004 ------ lasso/id-wsf-2.0/profile.h | 110 - lasso/id-wsf-2.0/saml2_login.c | 293 -- lasso/id-wsf-2.0/saml2_login.h | 54 - lasso/id-wsf-2.0/server.c | 146 - lasso/id-wsf-2.0/server.h | 51 - lasso/id-wsf-2.0/serverprivate.h | 44 - lasso/id-wsf-2.0/session.c | 192 -- lasso/id-wsf-2.0/session.h | 49 - lasso/id-wsf-2.0/sessionprivate.h | 43 - lasso/id-wsf-2.0/soap_binding.c | 496 --- lasso/id-wsf-2.0/soap_binding.h | 107 - lasso/id-wsf/Makefile.am | 42 - lasso/id-wsf/authentication.c | 762 ----- lasso/id-wsf/authentication.h | 111 - lasso/id-wsf/data_service.c | 1269 ------- lasso/id-wsf/data_service.h | 130 - lasso/id-wsf/discovery.c | 1349 -------- lasso/id-wsf/discovery.h | 123 - lasso/id-wsf/id_ff_extensions.c | 381 --- lasso/id-wsf/id_ff_extensions.h | 62 - lasso/id-wsf/id_ff_extensions_private.h | 46 - lasso/id-wsf/id_wsf.h | 37 - lasso/id-wsf/interaction_profile_service.c | 172 - lasso/id-wsf/interaction_profile_service.h | 86 - lasso/id-wsf/personal_profile_service.c | 155 - lasso/id-wsf/personal_profile_service.h | 78 - lasso/id-wsf/wsf_profile.c | 1578 --------- lasso/id-wsf/wsf_profile.h | 186 - lasso/id-wsf/wsf_profile_private.h | 55 - lasso/id-wsf/wsf_utils.c | 152 - lasso/id-wsf/wsf_utils.h | 33 - lasso/lasso_config.h.in | 2 - lasso/xml/Makefile.am | 134 +- lasso/xml/disco_authenticate_requester.c | 102 - lasso/xml/disco_authenticate_requester.h | 69 - lasso/xml/disco_authenticate_session_context.c | 102 - lasso/xml/disco_authenticate_session_context.h | 72 - lasso/xml/disco_authorize_requester.c | 102 - lasso/xml/disco_authorize_requester.h | 69 - lasso/xml/disco_credentials.c | 104 - lasso/xml/disco_credentials.h | 65 - lasso/xml/disco_description.c | 279 -- lasso/xml/disco_description.h | 106 - lasso/xml/disco_encrypt_resource_id.c | 102 - lasso/xml/disco_encrypt_resource_id.h | 69 - lasso/xml/disco_encrypted_resource_id.c | 109 - lasso/xml/disco_encrypted_resource_id.h | 69 - lasso/xml/disco_generate_bearer_token.c | 102 - lasso/xml/disco_generate_bearer_token.h | 69 - lasso/xml/disco_insert_entry.c | 108 - lasso/xml/disco_insert_entry.h | 70 - lasso/xml/disco_modify.c | 119 - lasso/xml/disco_modify.h | 73 - lasso/xml/disco_modify_response.c | 156 - lasso/xml/disco_modify_response.h | 82 - lasso/xml/disco_options.c | 98 - lasso/xml/disco_options.h | 66 - lasso/xml/disco_query.c | 125 - lasso/xml/disco_query.h | 71 - lasso/xml/disco_query_response.c | 152 - lasso/xml/disco_query_response.h | 73 - lasso/xml/disco_remove_entry.c | 109 - lasso/xml/disco_remove_entry.h | 68 - lasso/xml/disco_requested_service_type.c | 113 - lasso/xml/disco_requested_service_type.h | 70 - lasso/xml/disco_resource_id.c | 108 - lasso/xml/disco_resource_id.h | 70 - lasso/xml/disco_resource_offering.c | 127 - lasso/xml/disco_resource_offering.h | 87 - lasso/xml/disco_send_single_logout.c | 105 - lasso/xml/disco_send_single_logout.h | 69 - lasso/xml/disco_service_instance.c | 150 - lasso/xml/disco_service_instance.h | 76 - lasso/xml/dst_data.c | 120 - lasso/xml/dst_data.h | 65 - lasso/xml/dst_modification.c | 128 - lasso/xml/dst_modification.h | 72 - lasso/xml/dst_modify.c | 184 - lasso/xml/dst_modify.h | 78 - lasso/xml/dst_modify_response.c | 166 - lasso/xml/dst_modify_response.h | 77 - lasso/xml/dst_new_data.c | 107 - lasso/xml/dst_new_data.h | 65 - lasso/xml/dst_query.c | 189 -- lasso/xml/dst_query.h | 77 - lasso/xml/dst_query_item.c | 133 - lasso/xml/dst_query_item.h | 70 - lasso/xml/dst_query_response.c | 181 - lasso/xml/dst_query_response.h | 78 - lasso/xml/id-wsf-2.0/Makefile.am | 287 -- lasso/xml/id-wsf-2.0/disco_abstract.c | 126 - lasso/xml/id-wsf-2.0/disco_abstract.h | 80 - lasso/xml/id-wsf-2.0/disco_endpoint_context.c | 137 - lasso/xml/id-wsf-2.0/disco_endpoint_context.h | 86 - lasso/xml/id-wsf-2.0/disco_keys.c | 114 - lasso/xml/id-wsf-2.0/disco_keys.h | 80 - lasso/xml/id-wsf-2.0/disco_options.c | 111 - lasso/xml/id-wsf-2.0/disco_options.h | 80 - lasso/xml/id-wsf-2.0/disco_provider_id.c | 126 - lasso/xml/id-wsf-2.0/disco_provider_id.h | 81 - lasso/xml/id-wsf-2.0/disco_query.c | 125 - lasso/xml/id-wsf-2.0/disco_query.h | 82 - lasso/xml/id-wsf-2.0/disco_query_response.c | 128 - lasso/xml/id-wsf-2.0/disco_query_response.h | 84 - lasso/xml/id-wsf-2.0/disco_requested_service.c | 148 - lasso/xml/id-wsf-2.0/disco_requested_service.h | 90 - lasso/xml/id-wsf-2.0/disco_security_context.c | 122 - lasso/xml/id-wsf-2.0/disco_security_context.h | 82 - lasso/xml/id-wsf-2.0/disco_service_context.c | 135 - lasso/xml/id-wsf-2.0/disco_service_context.h | 85 - lasso/xml/id-wsf-2.0/disco_service_type.c | 126 - lasso/xml/id-wsf-2.0/disco_service_type.h | 81 - .../xml/id-wsf-2.0/disco_svc_md_association_add.c | 120 - .../xml/id-wsf-2.0/disco_svc_md_association_add.h | 81 - .../disco_svc_md_association_add_response.c | 122 - .../disco_svc_md_association_add_response.h | 85 - .../id-wsf-2.0/disco_svc_md_association_delete.c | 120 - .../id-wsf-2.0/disco_svc_md_association_delete.h | 83 - .../disco_svc_md_association_delete_response.c | 122 - .../disco_svc_md_association_delete_response.h | 85 - .../id-wsf-2.0/disco_svc_md_association_query.c | 120 - .../id-wsf-2.0/disco_svc_md_association_query.h | 83 - .../disco_svc_md_association_query_response.c | 125 - .../disco_svc_md_association_query_response.h | 86 - lasso/xml/id-wsf-2.0/disco_svc_md_delete.c | 120 - lasso/xml/id-wsf-2.0/disco_svc_md_delete.h | 82 - .../xml/id-wsf-2.0/disco_svc_md_delete_response.c | 121 - .../xml/id-wsf-2.0/disco_svc_md_delete_response.h | 82 - lasso/xml/id-wsf-2.0/disco_svc_md_query.c | 122 - lasso/xml/id-wsf-2.0/disco_svc_md_query.h | 82 - lasso/xml/id-wsf-2.0/disco_svc_md_query_response.c | 125 - lasso/xml/id-wsf-2.0/disco_svc_md_query_response.h | 86 - lasso/xml/id-wsf-2.0/disco_svc_md_register.c | 151 - lasso/xml/id-wsf-2.0/disco_svc_md_register.h | 85 - .../id-wsf-2.0/disco_svc_md_register_response.c | 130 - .../id-wsf-2.0/disco_svc_md_register_response.h | 86 - lasso/xml/id-wsf-2.0/disco_svc_md_replace.c | 121 - lasso/xml/id-wsf-2.0/disco_svc_md_replace.h | 82 - .../xml/id-wsf-2.0/disco_svc_md_replace_response.c | 121 - .../xml/id-wsf-2.0/disco_svc_md_replace_response.h | 84 - lasso/xml/id-wsf-2.0/disco_svc_metadata.c | 145 - lasso/xml/id-wsf-2.0/disco_svc_metadata.h | 87 - lasso/xml/id-wsf-2.0/dst_data_response_base.c | 113 - lasso/xml/id-wsf-2.0/dst_data_response_base.h | 81 - lasso/xml/id-wsf-2.0/dst_delete_item_base.c | 120 - lasso/xml/id-wsf-2.0/dst_delete_item_base.h | 84 - lasso/xml/id-wsf-2.0/dst_delete_response.c | 108 - lasso/xml/id-wsf-2.0/dst_delete_response.h | 79 - lasso/xml/id-wsf-2.0/dst_request.c | 124 - lasso/xml/id-wsf-2.0/dst_request.h | 83 - lasso/xml/id-wsf-2.0/dst_result_query_base.c | 132 - lasso/xml/id-wsf-2.0/dst_result_query_base.h | 88 - lasso/xml/id-wsf-2.0/dst_test_item_base.c | 117 - lasso/xml/id-wsf-2.0/dst_test_item_base.h | 83 - lasso/xml/id-wsf-2.0/dstref_app_data.c | 111 - lasso/xml/id-wsf-2.0/dstref_app_data.h | 78 - lasso/xml/id-wsf-2.0/dstref_create.c | 120 - lasso/xml/id-wsf-2.0/dstref_create.h | 82 - lasso/xml/id-wsf-2.0/dstref_create_item.c | 119 - lasso/xml/id-wsf-2.0/dstref_create_item.h | 85 - lasso/xml/id-wsf-2.0/dstref_create_response.c | 107 - lasso/xml/id-wsf-2.0/dstref_create_response.h | 80 - lasso/xml/id-wsf-2.0/dstref_data.c | 122 - lasso/xml/id-wsf-2.0/dstref_data.h | 83 - lasso/xml/id-wsf-2.0/dstref_data_response.c | 116 - lasso/xml/id-wsf-2.0/dstref_data_response.h | 81 - lasso/xml/id-wsf-2.0/dstref_delete.c | 116 - lasso/xml/id-wsf-2.0/dstref_delete.h | 81 - lasso/xml/id-wsf-2.0/dstref_delete_item.c | 115 - lasso/xml/id-wsf-2.0/dstref_delete_item.h | 81 - lasso/xml/id-wsf-2.0/dstref_delete_response.c | 108 - lasso/xml/id-wsf-2.0/dstref_delete_response.h | 80 - lasso/xml/id-wsf-2.0/dstref_item_data.c | 117 - lasso/xml/id-wsf-2.0/dstref_item_data.h | 83 - lasso/xml/id-wsf-2.0/dstref_modify.c | 155 - lasso/xml/id-wsf-2.0/dstref_modify.h | 86 - lasso/xml/id-wsf-2.0/dstref_modify_item.c | 141 - lasso/xml/id-wsf-2.0/dstref_modify_item.h | 89 - lasso/xml/id-wsf-2.0/dstref_modify_response.c | 146 - lasso/xml/id-wsf-2.0/dstref_modify_response.h | 84 - lasso/xml/id-wsf-2.0/dstref_query.c | 157 - lasso/xml/id-wsf-2.0/dstref_query.h | 86 - lasso/xml/id-wsf-2.0/dstref_query_item.c | 140 - lasso/xml/id-wsf-2.0/dstref_query_item.h | 86 - lasso/xml/id-wsf-2.0/dstref_query_response.c | 157 - lasso/xml/id-wsf-2.0/dstref_query_response.h | 87 - lasso/xml/id-wsf-2.0/dstref_result_query.c | 121 - lasso/xml/id-wsf-2.0/dstref_result_query.h | 83 - lasso/xml/id-wsf-2.0/dstref_test_item.c | 115 - lasso/xml/id-wsf-2.0/dstref_test_item.h | 81 - lasso/xml/id-wsf-2.0/idwsf2_strings.h | 938 ------ .../xml/id-wsf-2.0/ims_identity_mapping_request.c | 120 - .../xml/id-wsf-2.0/ims_identity_mapping_request.h | 83 - .../xml/id-wsf-2.0/ims_identity_mapping_response.c | 124 - .../xml/id-wsf-2.0/ims_identity_mapping_response.h | 85 - lasso/xml/id-wsf-2.0/ims_mapping_input.c | 119 - lasso/xml/id-wsf-2.0/ims_mapping_input.h | 85 - lasso/xml/id-wsf-2.0/ims_mapping_output.c | 114 - lasso/xml/id-wsf-2.0/ims_mapping_output.h | 83 - lasso/xml/id-wsf-2.0/is_help.c | 115 - lasso/xml/id-wsf-2.0/is_help.h | 82 - lasso/xml/id-wsf-2.0/is_inquiry.c | 129 - lasso/xml/id-wsf-2.0/is_inquiry.h | 87 - lasso/xml/id-wsf-2.0/is_inquiry_element.c | 123 - lasso/xml/id-wsf-2.0/is_inquiry_element.h | 86 - lasso/xml/id-wsf-2.0/is_interaction_request.c | 126 - lasso/xml/id-wsf-2.0/is_interaction_request.h | 87 - lasso/xml/id-wsf-2.0/is_interaction_response.c | 121 - lasso/xml/id-wsf-2.0/is_interaction_response.h | 83 - lasso/xml/id-wsf-2.0/is_interaction_statement.c | 142 - lasso/xml/id-wsf-2.0/is_interaction_statement.h | 85 - lasso/xml/id-wsf-2.0/is_item.c | 119 - lasso/xml/id-wsf-2.0/is_item.h | 83 - lasso/xml/id-wsf-2.0/is_parameter.c | 112 - lasso/xml/id-wsf-2.0/is_parameter.h | 81 - lasso/xml/id-wsf-2.0/is_select.c | 118 - lasso/xml/id-wsf-2.0/is_select.h | 81 - lasso/xml/id-wsf-2.0/is_text.c | 119 - lasso/xml/id-wsf-2.0/is_text.h | 83 - lasso/xml/id-wsf-2.0/ps_add_collection_request.c | 118 - lasso/xml/id-wsf-2.0/ps_add_collection_request.h | 85 - lasso/xml/id-wsf-2.0/ps_add_collection_response.c | 115 - lasso/xml/id-wsf-2.0/ps_add_collection_response.h | 83 - lasso/xml/id-wsf-2.0/ps_add_entity_request.c | 128 - lasso/xml/id-wsf-2.0/ps_add_entity_request.h | 88 - lasso/xml/id-wsf-2.0/ps_add_entity_response.c | 121 - lasso/xml/id-wsf-2.0/ps_add_entity_response.h | 84 - lasso/xml/id-wsf-2.0/ps_add_known_entity_request.c | 129 - lasso/xml/id-wsf-2.0/ps_add_known_entity_request.h | 91 - .../xml/id-wsf-2.0/ps_add_known_entity_response.c | 121 - .../xml/id-wsf-2.0/ps_add_known_entity_response.h | 83 - .../xml/id-wsf-2.0/ps_add_to_collection_request.c | 121 - .../xml/id-wsf-2.0/ps_add_to_collection_request.h | 83 - lasso/xml/id-wsf-2.0/ps_get_object_info_request.c | 118 - lasso/xml/id-wsf-2.0/ps_get_object_info_request.h | 84 - lasso/xml/id-wsf-2.0/ps_get_object_info_response.c | 115 - lasso/xml/id-wsf-2.0/ps_get_object_info_response.h | 84 - lasso/xml/id-wsf-2.0/ps_item_data.c | 111 - lasso/xml/id-wsf-2.0/ps_item_data.h | 81 - lasso/xml/id-wsf-2.0/ps_list_members_request.c | 133 - lasso/xml/id-wsf-2.0/ps_list_members_request.h | 87 - lasso/xml/id-wsf-2.0/ps_list_members_response.c | 115 - lasso/xml/id-wsf-2.0/ps_list_members_response.h | 79 - lasso/xml/id-wsf-2.0/ps_notification.c | 115 - lasso/xml/id-wsf-2.0/ps_notification.h | 81 - lasso/xml/id-wsf-2.0/ps_notify.c | 118 - lasso/xml/id-wsf-2.0/ps_notify.h | 83 - lasso/xml/id-wsf-2.0/ps_object.c | 133 - lasso/xml/id-wsf-2.0/ps_object.h | 88 - lasso/xml/id-wsf-2.0/ps_query_objects_request.c | 130 - lasso/xml/id-wsf-2.0/ps_query_objects_request.h | 84 - lasso/xml/id-wsf-2.0/ps_query_objects_response.c | 115 - lasso/xml/id-wsf-2.0/ps_query_objects_response.h | 82 - .../xml/id-wsf-2.0/ps_remove_collection_request.c | 115 - .../xml/id-wsf-2.0/ps_remove_collection_request.h | 82 - lasso/xml/id-wsf-2.0/ps_remove_entity_request.c | 115 - lasso/xml/id-wsf-2.0/ps_remove_entity_request.h | 79 - .../id-wsf-2.0/ps_remove_from_collection_request.c | 121 - .../id-wsf-2.0/ps_remove_from_collection_request.h | 85 - lasso/xml/id-wsf-2.0/ps_request_abstract.c | 115 - lasso/xml/id-wsf-2.0/ps_request_abstract.h | 80 - .../xml/id-wsf-2.0/ps_resolve_identifier_request.c | 115 - .../xml/id-wsf-2.0/ps_resolve_identifier_request.h | 82 - .../id-wsf-2.0/ps_resolve_identifier_response.c | 115 - .../id-wsf-2.0/ps_resolve_identifier_response.h | 82 - lasso/xml/id-wsf-2.0/ps_resolve_input.c | 115 - lasso/xml/id-wsf-2.0/ps_resolve_input.h | 81 - lasso/xml/id-wsf-2.0/ps_response_abstract.c | 121 - lasso/xml/id-wsf-2.0/ps_response_abstract.h | 83 - lasso/xml/id-wsf-2.0/ps_set_object_info_request.c | 118 - lasso/xml/id-wsf-2.0/ps_set_object_info_request.h | 84 - lasso/xml/id-wsf-2.0/ps_test_membership_request.c | 122 - lasso/xml/id-wsf-2.0/ps_test_membership_request.h | 86 - lasso/xml/id-wsf-2.0/ps_test_membership_response.c | 115 - lasso/xml/id-wsf-2.0/ps_test_membership_response.h | 80 - lasso/xml/id-wsf-2.0/sb2_consent.c | 121 - lasso/xml/id-wsf-2.0/sb2_consent.h | 82 - lasso/xml/id-wsf-2.0/sb2_credentials_context.c | 124 - lasso/xml/id-wsf-2.0/sb2_credentials_context.h | 84 - lasso/xml/id-wsf-2.0/sb2_endpoint_update.c | 113 - lasso/xml/id-wsf-2.0/sb2_endpoint_update.h | 81 - lasso/xml/id-wsf-2.0/sb2_redirect_request.c | 121 - lasso/xml/id-wsf-2.0/sb2_redirect_request.h | 82 - lasso/xml/id-wsf-2.0/sb2_sender.c | 121 - lasso/xml/id-wsf-2.0/sb2_sender.h | 82 - lasso/xml/id-wsf-2.0/sb2_target_identity.c | 120 - lasso/xml/id-wsf-2.0/sb2_target_identity.h | 81 - lasso/xml/id-wsf-2.0/sb2_timeout.c | 118 - lasso/xml/id-wsf-2.0/sb2_timeout.h | 81 - lasso/xml/id-wsf-2.0/sb2_usage_directive.c | 122 - lasso/xml/id-wsf-2.0/sb2_usage_directive.h | 81 - lasso/xml/id-wsf-2.0/sb2_user_interaction_header.c | 137 - lasso/xml/id-wsf-2.0/sb2_user_interaction_header.h | 85 - lasso/xml/id-wsf-2.0/sbf_framework.c | 132 - lasso/xml/id-wsf-2.0/sbf_framework.h | 81 - lasso/xml/id-wsf-2.0/sec_token.c | 121 - lasso/xml/id-wsf-2.0/sec_token.h | 84 - lasso/xml/id-wsf-2.0/sec_token_policy.c | 132 - lasso/xml/id-wsf-2.0/sec_token_policy.h | 86 - lasso/xml/id-wsf-2.0/sec_transited_provider_path.c | 113 - lasso/xml/id-wsf-2.0/sec_transited_provider_path.h | 79 - lasso/xml/id-wsf-2.0/subs_notification.c | 124 - lasso/xml/id-wsf-2.0/subs_notification.h | 85 - lasso/xml/id-wsf-2.0/subs_notify_response.c | 108 - lasso/xml/id-wsf-2.0/subs_notify_response.h | 79 - lasso/xml/id-wsf-2.0/subs_ref_item.c | 112 - lasso/xml/id-wsf-2.0/subs_ref_item.h | 81 - lasso/xml/id-wsf-2.0/subs_subscription.c | 144 - lasso/xml/id-wsf-2.0/subs_subscription.h | 89 - lasso/xml/id-wsf-2.0/subsref_app_data.c | 106 - lasso/xml/id-wsf-2.0/subsref_app_data.h | 81 - lasso/xml/id-wsf-2.0/subsref_create.c | 121 - lasso/xml/id-wsf-2.0/subsref_create.h | 83 - lasso/xml/id-wsf-2.0/subsref_create_item.c | 118 - lasso/xml/id-wsf-2.0/subsref_create_item.h | 85 - lasso/xml/id-wsf-2.0/subsref_create_response.c | 108 - lasso/xml/id-wsf-2.0/subsref_create_response.h | 80 - lasso/xml/id-wsf-2.0/subsref_data.c | 122 - lasso/xml/id-wsf-2.0/subsref_data.h | 83 - lasso/xml/id-wsf-2.0/subsref_data_response.c | 115 - lasso/xml/id-wsf-2.0/subsref_data_response.h | 82 - lasso/xml/id-wsf-2.0/subsref_delete.c | 115 - lasso/xml/id-wsf-2.0/subsref_delete.h | 81 - lasso/xml/id-wsf-2.0/subsref_delete_item.c | 115 - lasso/xml/id-wsf-2.0/subsref_delete_item.h | 81 - lasso/xml/id-wsf-2.0/subsref_delete_response.c | 108 - lasso/xml/id-wsf-2.0/subsref_delete_response.h | 80 - lasso/xml/id-wsf-2.0/subsref_item_data.c | 117 - lasso/xml/id-wsf-2.0/subsref_item_data.h | 83 - lasso/xml/id-wsf-2.0/subsref_modify.c | 121 - lasso/xml/id-wsf-2.0/subsref_modify.h | 83 - lasso/xml/id-wsf-2.0/subsref_modify_item.c | 123 - lasso/xml/id-wsf-2.0/subsref_modify_item.h | 87 - lasso/xml/id-wsf-2.0/subsref_modify_response.c | 108 - lasso/xml/id-wsf-2.0/subsref_modify_response.h | 80 - lasso/xml/id-wsf-2.0/subsref_notification.c | 115 - lasso/xml/id-wsf-2.0/subsref_notification.h | 82 - lasso/xml/id-wsf-2.0/subsref_notify.c | 118 - lasso/xml/id-wsf-2.0/subsref_notify.h | 83 - lasso/xml/id-wsf-2.0/subsref_notify_response.c | 108 - lasso/xml/id-wsf-2.0/subsref_notify_response.h | 80 - lasso/xml/id-wsf-2.0/subsref_query.c | 121 - lasso/xml/id-wsf-2.0/subsref_query.h | 83 - lasso/xml/id-wsf-2.0/subsref_query_item.c | 125 - lasso/xml/id-wsf-2.0/subsref_query_item.h | 84 - lasso/xml/id-wsf-2.0/subsref_query_response.c | 119 - lasso/xml/id-wsf-2.0/subsref_query_response.h | 83 - lasso/xml/id-wsf-2.0/subsref_result_query.c | 118 - lasso/xml/id-wsf-2.0/subsref_result_query.h | 83 - lasso/xml/id-wsf-2.0/subsref_subscription.c | 122 - lasso/xml/id-wsf-2.0/subsref_subscription.h | 84 - lasso/xml/id-wsf-2.0/subsref_test_item.c | 115 - lasso/xml/id-wsf-2.0/subsref_test_item.h | 81 - lasso/xml/id-wsf-2.0/util_empty.c | 111 - lasso/xml/id-wsf-2.0/util_empty.h | 78 - lasso/xml/id-wsf-2.0/util_extension.c | 113 - lasso/xml/id-wsf-2.0/util_extension.h | 78 - lasso/xml/id-wsf-2.0/util_response.c | 183 - lasso/xml/id-wsf-2.0/util_response.h | 89 - lasso/xml/id-wsf-2.0/util_status.c | 153 - lasso/xml/id-wsf-2.0/util_status.h | 85 - lasso/xml/id-wsf-2.0/xml_idwsf2.h | 164 - lasso/xml/idwsf_strings.h | 450 --- lasso/xml/is_help.c | 105 - lasso/xml/is_help.h | 65 - lasso/xml/is_inquiry.c | 116 - lasso/xml/is_inquiry.h | 70 - lasso/xml/is_inquiry_element.c | 112 - lasso/xml/is_inquiry_element.h | 73 - lasso/xml/is_interaction_request.c | 126 - lasso/xml/is_interaction_request.h | 81 - lasso/xml/is_interaction_response.c | 115 - lasso/xml/is_interaction_response.h | 71 - lasso/xml/is_interaction_statement.c | 108 - lasso/xml/is_interaction_statement.h | 70 - lasso/xml/is_item.c | 112 - lasso/xml/is_item.h | 65 - lasso/xml/is_parameter.c | 106 - lasso/xml/is_parameter.h | 66 - lasso/xml/is_redirect_request.c | 104 - lasso/xml/is_redirect_request.h | 68 - lasso/xml/is_select.c | 110 - lasso/xml/is_select.h | 67 - lasso/xml/is_text.c | 110 - lasso/xml/is_text.h | 65 - lasso/xml/is_user_interaction.c | 123 - lasso/xml/is_user_interaction.h | 76 - lasso/xml/sa_credentials.c | 103 - lasso/xml/sa_credentials.h | 67 - lasso/xml/sa_parameter.c | 112 - lasso/xml/sa_parameter.h | 67 - lasso/xml/sa_password_transforms.c | 124 - lasso/xml/sa_password_transforms.h | 68 - lasso/xml/sa_sasl_request.c | 130 - lasso/xml/sa_sasl_request.h | 73 - lasso/xml/sa_sasl_response.c | 167 - lasso/xml/sa_sasl_response.h | 79 - lasso/xml/sa_transform.c | 119 - lasso/xml/sa_transform.h | 70 - lasso/xml/saml-2.0/saml2_strings.h | 11 - lasso/xml/sec_resource_access_statement.c | 112 - lasso/xml/sec_resource_access_statement.h | 69 - lasso/xml/soap_binding.c | 77 - lasso/xml/soap_binding.h | 42 - lasso/xml/soap_binding_consent.c | 115 - lasso/xml/soap_binding_consent.h | 71 - lasso/xml/soap_binding_correlation.c | 116 - lasso/xml/soap_binding_correlation.h | 74 - lasso/xml/soap_binding_ext_credential.c | 113 - lasso/xml/soap_binding_ext_credential.h | 77 - lasso/xml/soap_binding_ext_credentials_context.c | 117 - lasso/xml/soap_binding_ext_credentials_context.h | 81 - .../xml/soap_binding_ext_service_instance_update.c | 125 - .../xml/soap_binding_ext_service_instance_update.h | 83 - lasso/xml/soap_binding_ext_timeout.c | 112 - lasso/xml/soap_binding_ext_timeout.h | 71 - lasso/xml/soap_binding_processing_context.c | 112 - lasso/xml/soap_binding_processing_context.h | 71 - lasso/xml/soap_binding_provider.c | 114 - lasso/xml/soap_binding_provider.h | 72 - lasso/xml/soap_binding_usage_directive.c | 116 - lasso/xml/soap_binding_usage_directive.h | 73 - lasso/xml/utility_status.c | 120 - lasso/xml/utility_status.h | 67 - lasso/xml/ws/Makefile.am | 48 - lasso/xml/ws/wsa_attributed_any.c | 114 - lasso/xml/ws/wsa_attributed_any.h | 82 - lasso/xml/ws/wsa_attributed_qname.c | 134 - lasso/xml/ws/wsa_attributed_qname.h | 83 - lasso/xml/ws/wsa_attributed_unsigned_long.c | 115 - lasso/xml/ws/wsa_attributed_unsigned_long.h | 83 - lasso/xml/ws/wsa_attributed_uri.c | 141 - lasso/xml/ws/wsa_attributed_uri.h | 83 - lasso/xml/ws/wsa_endpoint_reference.c | 133 - lasso/xml/ws/wsa_endpoint_reference.h | 88 - lasso/xml/ws/wsa_metadata.c | 114 - lasso/xml/ws/wsa_metadata.h | 82 - lasso/xml/ws/wsa_problem_action.c | 118 - lasso/xml/ws/wsa_problem_action.h | 84 - lasso/xml/ws/wsa_reference_parameters.c | 114 - lasso/xml/ws/wsa_reference_parameters.h | 82 - lasso/xml/ws/wsa_relates_to.c | 138 - lasso/xml/ws/wsa_relates_to.h | 84 - lasso/xml/ws/wsse_embedded.c | 119 - lasso/xml/ws/wsse_embedded.h | 81 - lasso/xml/ws/wsse_reference.c | 119 - lasso/xml/ws/wsse_reference.h | 82 - lasso/xml/ws/wsse_security_header.c | 137 - lasso/xml/ws/wsse_security_header.h | 82 - lasso/xml/ws/wsse_security_token_reference.c | 121 - lasso/xml/ws/wsse_security_token_reference.h | 83 - lasso/xml/ws/wsse_transformation_parameters.c | 122 - lasso/xml/ws/wsse_transformation_parameters.h | 81 - lasso/xml/ws/wsse_username_token.c | 371 -- lasso/xml/ws/wsse_username_token.h | 88 - lasso/xml/ws/wsu_timestamp.c | 127 - lasso/xml/ws/wsu_timestamp.h | 84 - lasso/xml/ws/xml_ws.h | 44 - lasso/xml/xml.c | 135 +- lasso/xml/xml.h | 8 - lasso/xml/xml_idwsf.h | 86 - tests/Makefile.am | 8 +- tests/basic_tests.c | 1147 +------ tests/idwsf2_tests.c | 276 -- tests/tests.c | 6 - tools/api.py | 1 - tools/generate_idwsf2_classes.py | 1813 ---------- website/convert-to-static.py | 5 +- win32/msvc/lasso_config.h.in | 8 - 518 files changed, 170 insertions(+), 66748 deletions(-) commit d4ccf1590281279c555c912e1bfa5a84fecf18d3 Author: Benjamin Dauvergne Date: Fri Sep 3 07:52:20 2021 +0200 Fix warning about int conversion saml2_authn_context.c:77:3: warning: initialization of ‘unsigned int’ from ‘void *’ makes integer from pointer without a cast [-Wint-conversion] lasso/xml/saml-2.0/saml2_authn_context.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 663c094ec7c299efc0545d8a415b36a12875772d Author: Benjamin Dauvergne Date: Thu Jun 24 02:21:14 2021 +0200 Prevent multiple OneTimeUse elements (#52961) "A SAML authority MUST NOT include more than one element within a element of an assertion" lasso/saml-2.0/saml2_helper.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) commit 149de8cd0b495d9aad8cb449142b5908122026f7 Author: Benjamin Dauvergne Date: Tue Jul 13 13:21:01 2021 +0200 python: clear warnings about PY_SSIZE_T_CLEAN (#55561) Using the python3 bindings on recent python3 >=3.8 versions shows: DeprecationWarning: PY_SSIZE_T_CLEAN will be required for '#' formats https://docs.python.org/3.9/whatsnew/changelog.html?highlight=py_ssize_t_clean#id193 bindings/python/wrapper_top.c | 2 ++ 1 file changed, 2 insertions(+) commit b6321b4db2ba02b67efda7dd5418511db3353d93 Author: Benjamin Dauvergne Date: Tue Jul 13 13:20:47 2021 +0200 python: clear warnings about assertX methods (#55561) bindings/python/tests/binding_tests.py | 198 ++++++++++++++++---------------- bindings/python/tests/profiles_tests.py | 26 ++--- 2 files changed, 112 insertions(+), 112 deletions(-) commit 1b0000e0163edc9d831894bf4aac7503f0294062 Author: Jakub Hrozek Date: Fri Jun 18 18:45:38 2021 +0200 test13_test_lasso_server_load_metadata: Don't verify signature if lasso is not configured with sha-1 (#54037) tests/basic_tests.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) commit f70eee9ef7faa9ccfb6f815977431ae2e02260bc Author: Jakub Hrozek Date: Wed Jun 16 12:23:47 2021 +0200 python: Skip the DSA key test unless SHA-1 is configured (#54037) lasso supports DSA-XXX only with SHA-1. The alternative is to use DSA-SHA256. bindings/python/tests/profiles_tests.py | 4 ++++ 1 file changed, 4 insertions(+) commit f9a3aca0cb31a412faae25dd9fdbbf3fb61cb62f Author: Jakub Hrozek Date: Tue Jun 15 15:08:44 2021 +0200 Check if the signature method is allowed in addition to being valid (#54037) Adds a new utility function lasso_allowed_signature_method() that checks if the signature method is allowed. Previously, the code would only check if the method was valid. This new function is used whenever lasso_validate_signature_method was previously used through lasso_ok_signature_method() which wraps both validate and allowed. lasso_allowed_signature_method() is also used on a couple of places, notably lasso_query_verify_helper(). Related: https://dev.entrouvert.org/issues/54037 lasso/id-ff/server.c | 4 ++-- lasso/saml-2.0/profile.c | 4 ++-- lasso/xml/tools.c | 11 ++++++++++- lasso/xml/xml.c | 5 +++-- lasso/xml/xml.h | 13 +++++++++++++ 5 files changed, 30 insertions(+), 7 deletions(-) commit 0d34c97be1c761a9eb12692e4cc4eac58feb7d19 Author: Jakub Hrozek Date: Tue Jun 15 14:45:14 2021 +0200 Mass-replace LASSO_SIGNATURE_METHOD_RSA_SHA1 with lasso_get_default_signature_method() (#54037) This should be backwards-compatible but at the same time use the selected default instead of RSA-SHA1. Related: https://dev.entrouvert.org/issues/54037 lasso/id-ff/defederation.c | 2 +- lasso/id-ff/logout.c | 6 +++--- lasso/id-ff/name_identifier_mapping.c | 4 ++-- lasso/id-ff/name_registration.c | 4 ++-- lasso/id-ff/provider.c | 2 +- lasso/xml/tools.c | 2 +- tests/basic_tests.c | 6 +++--- 7 files changed, 13 insertions(+), 13 deletions(-) commit f095ac8f5740b6eee687cac97840bc7e72992999 Author: Jakub Hrozek Date: Mon Jun 7 12:27:15 2021 +0200 Make the default signature method and the minimal hash strength configurable (#54037) Adds two new configure options: --with-default-sign-algo --min-hash-algo --with-default-sign-algo sets the default signing algorithm and defaults to rsa-sha1. At the moment, two algorithms are supported: rsa-sha1 and rsa-sha256. --min-hash-algo sets the minimum hash algorithm to be accepted. The default is sha1 for backwards compatibility as well. Related: https://dev.entrouvert.org/issues/54037 configure.ac | 42 +++++++++++++++++++++++++++++++++++ lasso/id-ff/server.c | 2 +- lasso/id-ff/server.h | 2 ++ lasso/lasso.c | 51 ++++++++++++++++++++++++++++++++++++++++++ lasso/xml/tools.c | 63 +++++++++++++++++++++++++++++++++++++++++----------- lasso/xml/xml.c | 24 ++++++++++++++++++++ lasso/xml/xml.h | 9 ++++++++ tests/random_tests.c | 6 ++--- 8 files changed, 182 insertions(+), 17 deletions(-) commit f625eaa007fa3a1f6c846be0d70d26de33887714 Author: Jakub Hrozek Date: Wed Jun 16 10:28:53 2021 +0200 tests: Move test08_lasso_key and test07_saml2_query_verify_signature to SHA256 (#54037) These tests use a hardcoded query and private key which makes it unsuitable to make the tests use the configured default digest. Let's just convert them to SHA256 unconditionally. tests/random_tests.c | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) commit 8b8fd22a168860c5034822472d1fb5745f8fa0f5 Author: Jakub Hrozek Date: Wed Jun 16 10:18:30 2021 +0200 Fix lasso_query_sign HMAC other than SHA1 (#54037) The switch clause was using SHA1 digests for all digest types when signing. This obviously breaks verifying the signatures if HMAC-SHAXXX is used and XXX is something else than 1. lasso/xml/tools.c | 35 +++++++++++++++++++++++------------ tests/login_tests_saml2.c | 6 +++--- 2 files changed, 26 insertions(+), 15 deletions(-) commit 076a37d7f0eb74001127481da2d355683693cde9 Author: Benjamin Dauvergne Date: Tue Jun 1 11:44:46 2021 +0200 Release 2.7.0 NEWS | 56 ++++++++++++++++++++++++++++++++++- website/web/doap.rdf | 4 +++ website/web/download/index.xml | 2 +- website/web/news/27-release-2.7.0.xml | 15 ++++++++++ 4 files changed, 75 insertions(+), 2 deletions(-) commit ea7e5efe9741e1b1787a58af16cb15b40c23be5a Author: Benjamin Dauvergne Date: Mon Mar 8 11:33:26 2021 +0100 Fix signature checking on unsigned response with multiple assertions CVE-2021-28091 : when AuthnResponse messages are not signed (which is permitted by the specifiation), all assertion's signatures should be checked, but currently after the first signed assertion is checked all following assertions are accepted without checking their signature, and the last one is considered the main assertion. This patch : * check signatures from all assertions if the message is not signed, * refuse messages with assertion from different issuers than the one on the message, to prevent assertion bundling event if they are signed. lasso/saml-2.0/login.c | 102 +++++++++++++++++++++++++++++++++++-------------- 1 file changed, 73 insertions(+), 29 deletions(-) commit d9db91ec9f4dbf3052673babbf153ab13625da92 Author: Benjamin Dauvergne Date: Wed Apr 7 18:06:11 2021 +0200 Jenkinsfile: update name of main branch Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit bd7acfd2f31eba20b388cdd32120df0c5af75134 Author: Benjamin Dauvergne Date: Mon Mar 8 11:23:56 2021 +0100 Python: improve display of warnings in the binding generator bindings/python/lang.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit f912e8d1efe89e22c26078e4c869ffe4f393e4e7 Author: Benjamin Dauvergne Date: Thu Jan 21 15:09:43 2021 +0100 replace deprecated index() by strchr() (#51385) lasso/xml/tools.c | 4 ++-- tests/basic_tests.c | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) commit cbbea83e3fabe6dc9f407f773968636ef5a18912 Author: Benjamin Dauvergne Date: Thu Feb 25 00:17:49 2021 +0100 Fix: new provider reference count is incremented one time too many (#51420) lasso/id-ff/server.c | 1 - 1 file changed, 1 deletion(-) commit 3d6bc260211ac4629f78e4d43608f6d462fdf65f Author: Benjamin Dauvergne Date: Tue Feb 23 20:39:25 2021 +0100 docs: update gtk-doc-tools integration (#50441) Using reference documentation on https://developer.gnome.org/gtk-doc-manual/stable/index.html.en configure.ac | 2 +- docs/reference/lasso/Makefile.am | 42 ++++++++++++++++------ .../lasso/{lasso-docs.sgml => lasso-docs.xml} | 37 ++++++++++++------- 3 files changed, 56 insertions(+), 25 deletions(-) commit 9b1e68f6835bd5006b547a98f28e1182970e7d09 Author: Benjamin Dauvergne Date: Wed Feb 24 23:01:08 2021 +0100 bindings: disable java tests when java is disabled bindings/java/Makefile.am | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) commit 2dbca5edf3a74437d0d8cc098c556a4a18ddb247 Author: Benjamin Dauvergne Date: Wed Feb 24 22:59:24 2021 +0100 Fix: python3 bindings (#51249) The __str__ method called itself, resulting in an RecursionError. ====================================================================== ERROR: test14 (__main__.BindingTestCase) ---------------------------------------------------------------------- Traceback (most recent call last): File "./binding_tests.py", line 336, in test14 assert isinstance(str(cm.exception), str) File "../lasso.py", line 69, in __str__ return '' % (self.__class__.__name__, self) File "../lasso.py", line 69, in __str__ return '' % (self.__class__.__name__, self) File "../lasso.py", line 69, in __str__ return '' % (self.__class__.__name__, self) [Previous line repeated 489 more times] File "../lasso.py", line 68, in __str__ if sys.version_info >= (3,): RecursionError: maximum recursion depth exceeded in comparison ---------------------------------------------------------------------- bindings/python/lang.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 86aa6a602f9e202643af004b69231416e4089dfc Author: Benjamin Dauvergne Date: Thu Jan 21 12:31:00 2021 +0100 configure.ac: disable java bindings configure.ac | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 34ad2ce2dc6ef4eadf336dbc5bc49c81e8a33875 Author: Frédéric Péters Date: Sat Dec 26 15:22:15 2020 +0100 build: update to use origin/main Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit f465304319d50cfa8ef8e7bd9c3f03502082c499 Author: Benjamin Dauvergne Date: Tue Jul 28 10:58:00 2020 +0200 debian: add packaging for debian-buster debian-buster/changelog | 479 ++++++++++++++++++++++++++++ debian-buster/compat | 1 + debian-buster/control | 115 +++++++ debian-buster/control.in | 115 +++++++ debian-buster/copyright | 44 +++ debian-buster/dirs | 2 + debian-buster/liblasso-java.dirs | 1 + debian-buster/liblasso-java.install | 2 + debian-buster/liblasso-perl.install.in | 1 + debian-buster/liblasso3-dev.dirs | 2 + debian-buster/liblasso3-dev.install | 4 + debian-buster/liblasso3.dirs | 1 + debian-buster/liblasso3.docs | 2 + debian-buster/liblasso3.install | 1 + debian-buster/liblasso3.symbols | 565 +++++++++++++++++++++++++++++++++ debian-buster/patches/series | 0 debian-buster/php5-lasso.install | 3 + debian-buster/php5-lasso.postinst | 7 + debian-buster/php5-lasso.prerm | 7 + debian-buster/php5-lasso.substvars | 4 + debian-buster/python-lasso.install | 2 + debian-buster/python3-lasso.install | 2 + debian-buster/rules | 186 +++++++++++ debian-buster/source/format | 1 + debian-buster/watch | 2 + 25 files changed, 1549 insertions(+) commit 0d0e5286a7884a58023b69b905e2b3a8fd1f73d1 Author: Benjamin Dauvergne Date: Sat Jun 20 13:53:11 2020 +0200 jenkins.sh: build against all available python versions (#44287) jenkins.sh | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) commit 6c166563b25bd828ef6501d23ba6fbf101d37b19 Author: Benjamin Dauvergne Date: Sat Jun 20 09:16:22 2020 +0200 python: do not leak out_pyvalue if method call protocol is not respected (#44287) bindings/python/lang.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) commit 4696e2709b04aff284b1c78d600153de4febb61f Author: Benjamin Dauvergne Date: Sat Jun 20 07:26:17 2020 +0200 python: do not raise in valid_seq() (#44287) bindings/python/wrapper_top.c | 1 - 1 file changed, 1 deletion(-) commit 77bed35c426136a034f4d98f8effd8fffcc4ccc5 Author: Benjamin Dauvergne Date: Sat Jun 20 09:17:56 2020 +0200 python: return NULL if get_list_of_strings() fails (#44287) bindings/python/wrapper_top.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 5f5bc888b165f9c81331168c28727aceb3200644 Author: Benjamin Dauvergne Date: Sat Jun 20 12:27:54 2020 +0200 python: return NULL if get_list_of_pygobject fails (#44287) bindings/python/wrapper_top.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 6ed8e04ff114d319f2c2dd33bbd3e0193e5d7462 Author: Benjamin Dauvergne Date: Sat Jun 20 12:25:21 2020 +0200 python: return NULL if get_list_of_xml_nodes fails (#44287) bindings/python/wrapper_top.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 4cf6bd4ff7d68f4b19bc7260e1d04532412c82f1 Author: Benjamin Dauvergne Date: Sat Jun 20 08:33:35 2020 +0200 python: return NULL if set_list_of_pygobject fails (#44287) bindings/python/lang.py | 4 ++-- bindings/python/tests/binding_tests.py | 9 +++++++++ bindings/python/wrapper_top.c | 13 +++++++++---- 3 files changed, 20 insertions(+), 6 deletions(-) commit c844abd8e46269c563321c085ba47b5aefc7dcce Author: Benjamin Dauvergne Date: Sat Jun 20 08:18:30 2020 +0200 python: return NULL if set_list_of_xml_nodes fails (#44287) bindings/python/lang.py | 4 ++-- bindings/python/wrapper_top.c | 20 +++++++++++++++----- 2 files changed, 17 insertions(+), 7 deletions(-) commit c53b6b5a7377892c4302b55f5422b81fbcb77be6 Author: Benjamin Dauvergne Date: Sat Jun 20 07:59:49 2020 +0200 python: return NULL if set_list_of_strings fails (#44287) bindings/python/lang.py | 4 ++-- bindings/python/tests/binding_tests.py | 8 ++++++-- bindings/python/wrapper_top.c | 13 +++++++++---- 3 files changed, 17 insertions(+), 8 deletions(-) commit ed528ce26ac3842148b3c3cc4e9580a6cd860200 Author: Benjamin Dauvergne Date: Sat Jun 20 07:36:23 2020 +0200 python: return NULL if set_hashtable_of_strings fails (#44287) bindings/python/lang.py | 4 ++-- bindings/python/wrapper_top.c | 11 ++++++----- 2 files changed, 8 insertions(+), 7 deletions(-) commit 57ee8d2f2a6566c997cb1c5e0054fdd1c62e1094 Author: Benjamin Dauvergne Date: Sat Jun 20 07:32:09 2020 +0200 python: return NULL if set_hashtable_of_pygobject fails (#44287) bindings/python/lang.py | 2 +- bindings/python/wrapper_top.c | 11 ++++++----- 2 files changed, 7 insertions(+), 6 deletions(-) commit 8591451270b0ef550add12c2cb51407287bae146 Author: Benjamin Dauvergne Date: Sat Jun 20 08:12:05 2020 +0200 python: free internal string buffer if needed in set_list_of_strings (#44287) bindings/python/wrapper_top.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit f80b2bb50ed6060b99f3d8f9abd25589c2ca08cb Author: Benjamin Dauvergne Date: Sat Jun 20 08:04:25 2020 +0200 python: check if hashtable is NULL before deallocatio (#44287)n bindings/python/lang.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 0289da907f8ef3558a9ff553b0e19ed60fdb37b8 Author: Benjamin Dauvergne Date: Sat Jun 20 12:33:39 2020 +0200 python: add a failure label to method wrappers (#44287) To separate wrapping code from unwinding and error handling code. bindings/python/lang.py | 17 ++++++++++++++--- bindings/python/wrapper_top.c | 1 + 2 files changed, 15 insertions(+), 3 deletions(-) commit 35682272ece5fbc02cdf06fc0032714f7fa1dbdd Author: Benjamin Dauvergne Date: Sat Jun 20 08:07:22 2020 +0200 python: add macro for early return (#44287) bindings/python/wrapper_top.c | 2 ++ 1 file changed, 2 insertions(+) commit 05dea2eab5813a1b539ae20608a37ae6ecfe0034 Author: Benjamin Dauvergne Date: Sat Jun 20 08:04:55 2020 +0200 python: remove newline before method call (#44287) bindings/python/lang.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 9db28c0c32bbeddca42de831f20273d2675a69c5 Author: Benjamin Dauvergne Date: Fri Jun 19 21:08:14 2020 +0200 python: simplify get_logger_object (#44287) bindings/python/wrapper_top.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) commit a8f82e67efb28a36f3a78350566b213f895e5c40 Author: Benjamin Dauvergne Date: Fri Jun 19 21:06:11 2020 +0200 python: fix warning about discarded const modifier (#44287) bindings/python/wrapper_top.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) commit 637514a874885dcb67efb93f1b9c640f9c899873 Author: Benjamin Dauvergne Date: Fri Jun 19 21:05:23 2020 +0200 python: replace exception by warning on logging path (#44287) bindings/python/wrapper_top.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) commit 8ae9d3a09b35fb15b047ff3d2c92535d9ce32697 Author: Benjamin Dauvergne Date: Fri Jun 19 21:04:59 2020 +0200 python: use simpler call format to prevent warning about PY_SSIZE_T_CLEAN (#44287) bindings/python/wrapper_top.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 11bc68bbbcf223efdc40a82136595067c49123bb Author: Benjamin Dauvergne Date: Fri Jun 19 21:02:56 2020 +0200 python: remove deprecated PyErr_Warn (#44287) bindings/python/wrapper_top.c | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) commit a1dbd489fc5f393d97b21e84eb129f94ca08063b Author: Benjamin Dauvergne Date: Fri Jun 19 21:02:25 2020 +0200 python: remove unused PyString_Size (#44287) bindings/python/wrapper_top.c | 8 -------- 1 file changed, 8 deletions(-) commit 04ded420c8bd92eb5694c27433ded5829b0b80aa Author: Benjamin Dauvergne Date: Fri Aug 21 11:48:19 2020 +0200 python: Exception.message was removed in python3 (#45995) bindings/python/lang.py | 5 ++++- bindings/python/tests/binding_tests.py | 8 ++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) commit 0b742b1f6dcb97d1bdc71a3fb7268f1ce03c0c85 Author: Benjamin Dauvergne Date: Tue Aug 11 11:30:51 2020 +0200 tools: reimplement xmlURIEscapeStr to respect RFC3986 (#45581) Bugfix by Emmanuel Dreyfus. License: MIT AUTHORS | 1 + lasso/id-ff/login.c | 4 ++-- lasso/xml/private.h | 1 + lasso/xml/tools.c | 61 ++++++++++++++++++++++++++++++++++++++++++++++++----- lasso/xml/xml.c | 8 +++---- 5 files changed, 64 insertions(+), 11 deletions(-) commit 15b8cd7ab1bedb7f05e10cb8a3f0d848b4ad9c36 Author: Benjamin Dauvergne Date: Tue Aug 11 15:35:56 2020 +0200 configure.ac: support php7 interpreter on CentOS 8 (#42299) configure.ac | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 4bae1c8b7c688373a8264e4fff9ef17d5b36a49f Author: Benjamin Dauvergne Date: Tue Jul 24 16:55:07 2018 +0200 Release 2.6.1 NEWS | 50 +++++++++++++++++++++++++++++++++++ configure.ac | 2 +- lasso/xml/tools.c | 2 +- tests/data/Makefile.am | 3 ++- website/web/doap.rdf | 28 +++++++++----------- website/web/download/index.xml | 18 ++++++------- website/web/news/26-release-2.6.1.xml | 15 +++++++++++ 7 files changed, 91 insertions(+), 27 deletions(-) commit 92d12b995459c01ccba48d8b99bd69b09f00f5b1 Author: Benjamin Dauvergne Date: Wed Apr 22 04:45:52 2020 +0200 Keep order of SessionIndexes bindings/python/tests/binding_tests.py | 9 +++++++++ lasso/xml/saml-2.0/samlp2_logout_request.c | 12 +++++------- 2 files changed, 14 insertions(+), 7 deletions(-) commit 55feba5762d78cdbbad8b738eb975b791537a004 Author: Benjamin Dauvergne Date: Wed Apr 22 04:30:27 2020 +0200 Clear SessionIndex when private SessionIndexes is empty (#41950) lasso/xml/saml-2.0/samlp2_logout_request.c | 2 ++ 1 file changed, 2 insertions(+) commit e5ad4b1702af09b271165ebf0187ec5ec75a5497 Author: Benjamin Dauvergne Date: Thu Mar 26 21:58:07 2020 +0100 misc: clear warnings about class_init signature using coccinelle $ spatch --in-place --sp-file add-second-arg-to-class-init.cocci `git grep -l -C1 ^class_init \*.c` $ sed -i 's/\*unused\>/*unused G_GNUC_UNUSED/' `git grep -l 'void \*unused'` lasso/id-ff/defederation.c | 2 +- lasso/id-ff/federation.c | 2 +- lasso/id-ff/identity.c | 2 +- lasso/id-ff/lecp.c | 2 +- lasso/id-ff/login.c | 2 +- lasso/id-ff/logout.c | 2 +- lasso/id-ff/name_identifier_mapping.c | 2 +- lasso/id-ff/name_registration.c | 2 +- lasso/id-ff/profile.c | 2 +- lasso/id-ff/provider.c | 2 +- lasso/id-ff/server.c | 2 +- lasso/id-ff/session.c | 2 +- lasso/id-wsf-2.0/data_service.c | 2 +- lasso/id-wsf-2.0/discovery.c | 2 +- lasso/id-wsf-2.0/profile.c | 2 +- lasso/id-wsf/authentication.c | 2 +- lasso/id-wsf/data_service.c | 2 +- lasso/id-wsf/discovery.c | 2 +- lasso/id-wsf/interaction_profile_service.c | 2 +- lasso/id-wsf/wsf_profile.c | 2 +- lasso/key.c | 2 +- lasso/saml-2.0/assertion_query.c | 2 +- lasso/saml-2.0/ecp.c | 2 +- lasso/saml-2.0/name_id_management.c | 2 +- lasso/utils.h | 2 +- lasso/xml/disco_authenticate_requester.c | 2 +- lasso/xml/disco_authenticate_session_context.c | 2 +- lasso/xml/disco_authorize_requester.c | 2 +- lasso/xml/disco_credentials.c | 2 +- lasso/xml/disco_description.c | 2 +- lasso/xml/disco_encrypt_resource_id.c | 2 +- lasso/xml/disco_encrypted_resource_id.c | 2 +- lasso/xml/disco_generate_bearer_token.c | 2 +- lasso/xml/disco_insert_entry.c | 2 +- lasso/xml/disco_modify.c | 2 +- lasso/xml/disco_modify_response.c | 2 +- lasso/xml/disco_options.c | 2 +- lasso/xml/disco_query.c | 2 +- lasso/xml/disco_query_response.c | 2 +- lasso/xml/disco_remove_entry.c | 2 +- lasso/xml/disco_requested_service_type.c | 2 +- lasso/xml/disco_resource_id.c | 2 +- lasso/xml/disco_resource_offering.c | 2 +- lasso/xml/disco_send_single_logout.c | 2 +- lasso/xml/disco_service_instance.c | 2 +- lasso/xml/dsig/ds_key_info.c | 2 +- lasso/xml/dsig/ds_key_value.c | 2 +- lasso/xml/dsig/ds_rsa_key_value.c | 2 +- lasso/xml/dsig/ds_x509_data.c | 2 +- lasso/xml/dst_data.c | 2 +- lasso/xml/dst_modification.c | 2 +- lasso/xml/dst_modify.c | 2 +- lasso/xml/dst_modify_response.c | 2 +- lasso/xml/dst_new_data.c | 2 +- lasso/xml/dst_query.c | 2 +- lasso/xml/dst_query_item.c | 2 +- lasso/xml/dst_query_response.c | 2 +- lasso/xml/ecp/ecp_relaystate.c | 2 +- lasso/xml/ecp/ecp_request.c | 2 +- lasso/xml/ecp/ecp_response.c | 2 +- lasso/xml/id-wsf-2.0/disco_abstract.c | 2 +- lasso/xml/id-wsf-2.0/disco_endpoint_context.c | 2 +- lasso/xml/id-wsf-2.0/disco_keys.c | 2 +- lasso/xml/id-wsf-2.0/disco_options.c | 2 +- lasso/xml/id-wsf-2.0/disco_provider_id.c | 2 +- lasso/xml/id-wsf-2.0/disco_query.c | 2 +- lasso/xml/id-wsf-2.0/disco_query_response.c | 2 +- lasso/xml/id-wsf-2.0/disco_requested_service.c | 2 +- lasso/xml/id-wsf-2.0/disco_security_context.c | 2 +- lasso/xml/id-wsf-2.0/disco_service_context.c | 2 +- lasso/xml/id-wsf-2.0/disco_service_type.c | 2 +- lasso/xml/id-wsf-2.0/disco_svc_md_association_add.c | 2 +- lasso/xml/id-wsf-2.0/disco_svc_md_association_add_response.c | 3 ++- lasso/xml/id-wsf-2.0/disco_svc_md_association_delete.c | 2 +- .../id-wsf-2.0/disco_svc_md_association_delete_response.c | 3 ++- lasso/xml/id-wsf-2.0/disco_svc_md_association_query.c | 2 +- .../xml/id-wsf-2.0/disco_svc_md_association_query_response.c | 3 ++- lasso/xml/id-wsf-2.0/disco_svc_md_delete.c | 2 +- lasso/xml/id-wsf-2.0/disco_svc_md_delete_response.c | 2 +- lasso/xml/id-wsf-2.0/disco_svc_md_query.c | 2 +- lasso/xml/id-wsf-2.0/disco_svc_md_query_response.c | 2 +- lasso/xml/id-wsf-2.0/disco_svc_md_register.c | 2 +- lasso/xml/id-wsf-2.0/disco_svc_md_register_response.c | 2 +- lasso/xml/id-wsf-2.0/disco_svc_md_replace.c | 2 +- lasso/xml/id-wsf-2.0/disco_svc_md_replace_response.c | 2 +- lasso/xml/id-wsf-2.0/disco_svc_metadata.c | 2 +- lasso/xml/id-wsf-2.0/dst_data_response_base.c | 2 +- lasso/xml/id-wsf-2.0/dst_delete_item_base.c | 2 +- lasso/xml/id-wsf-2.0/dst_delete_response.c | 2 +- lasso/xml/id-wsf-2.0/dst_request.c | 2 +- lasso/xml/id-wsf-2.0/dst_result_query_base.c | 2 +- lasso/xml/id-wsf-2.0/dst_test_item_base.c | 2 +- lasso/xml/id-wsf-2.0/dstref_app_data.c | 2 +- lasso/xml/id-wsf-2.0/dstref_create.c | 2 +- lasso/xml/id-wsf-2.0/dstref_create_item.c | 2 +- lasso/xml/id-wsf-2.0/dstref_create_response.c | 2 +- lasso/xml/id-wsf-2.0/dstref_data.c | 2 +- lasso/xml/id-wsf-2.0/dstref_data_response.c | 2 +- lasso/xml/id-wsf-2.0/dstref_delete.c | 2 +- lasso/xml/id-wsf-2.0/dstref_delete_item.c | 2 +- lasso/xml/id-wsf-2.0/dstref_delete_response.c | 2 +- lasso/xml/id-wsf-2.0/dstref_item_data.c | 2 +- lasso/xml/id-wsf-2.0/dstref_modify.c | 2 +- lasso/xml/id-wsf-2.0/dstref_modify_item.c | 2 +- lasso/xml/id-wsf-2.0/dstref_modify_response.c | 2 +- lasso/xml/id-wsf-2.0/dstref_query.c | 2 +- lasso/xml/id-wsf-2.0/dstref_query_item.c | 2 +- lasso/xml/id-wsf-2.0/dstref_query_response.c | 2 +- lasso/xml/id-wsf-2.0/dstref_result_query.c | 2 +- lasso/xml/id-wsf-2.0/dstref_test_item.c | 2 +- lasso/xml/id-wsf-2.0/ims_identity_mapping_request.c | 2 +- lasso/xml/id-wsf-2.0/ims_identity_mapping_response.c | 2 +- lasso/xml/id-wsf-2.0/ims_mapping_input.c | 2 +- lasso/xml/id-wsf-2.0/ims_mapping_output.c | 2 +- lasso/xml/id-wsf-2.0/is_help.c | 2 +- lasso/xml/id-wsf-2.0/is_inquiry.c | 2 +- lasso/xml/id-wsf-2.0/is_inquiry_element.c | 2 +- lasso/xml/id-wsf-2.0/is_interaction_request.c | 2 +- lasso/xml/id-wsf-2.0/is_interaction_response.c | 2 +- lasso/xml/id-wsf-2.0/is_interaction_statement.c | 2 +- lasso/xml/id-wsf-2.0/is_item.c | 2 +- lasso/xml/id-wsf-2.0/is_parameter.c | 2 +- lasso/xml/id-wsf-2.0/is_select.c | 2 +- lasso/xml/id-wsf-2.0/is_text.c | 2 +- lasso/xml/id-wsf-2.0/ps_add_collection_request.c | 2 +- lasso/xml/id-wsf-2.0/ps_add_collection_response.c | 2 +- lasso/xml/id-wsf-2.0/ps_add_entity_request.c | 2 +- lasso/xml/id-wsf-2.0/ps_add_entity_response.c | 2 +- lasso/xml/id-wsf-2.0/ps_add_known_entity_request.c | 2 +- lasso/xml/id-wsf-2.0/ps_add_known_entity_response.c | 2 +- lasso/xml/id-wsf-2.0/ps_add_to_collection_request.c | 2 +- lasso/xml/id-wsf-2.0/ps_get_object_info_request.c | 2 +- lasso/xml/id-wsf-2.0/ps_get_object_info_response.c | 2 +- lasso/xml/id-wsf-2.0/ps_item_data.c | 2 +- lasso/xml/id-wsf-2.0/ps_list_members_request.c | 2 +- lasso/xml/id-wsf-2.0/ps_list_members_response.c | 2 +- lasso/xml/id-wsf-2.0/ps_notification.c | 2 +- lasso/xml/id-wsf-2.0/ps_notify.c | 2 +- lasso/xml/id-wsf-2.0/ps_object.c | 2 +- lasso/xml/id-wsf-2.0/ps_query_objects_request.c | 2 +- lasso/xml/id-wsf-2.0/ps_query_objects_response.c | 2 +- lasso/xml/id-wsf-2.0/ps_remove_collection_request.c | 2 +- lasso/xml/id-wsf-2.0/ps_remove_entity_request.c | 2 +- lasso/xml/id-wsf-2.0/ps_remove_from_collection_request.c | 2 +- lasso/xml/id-wsf-2.0/ps_request_abstract.c | 2 +- lasso/xml/id-wsf-2.0/ps_resolve_identifier_request.c | 2 +- lasso/xml/id-wsf-2.0/ps_resolve_identifier_response.c | 2 +- lasso/xml/id-wsf-2.0/ps_resolve_input.c | 2 +- lasso/xml/id-wsf-2.0/ps_response_abstract.c | 2 +- lasso/xml/id-wsf-2.0/ps_set_object_info_request.c | 2 +- lasso/xml/id-wsf-2.0/ps_test_membership_request.c | 2 +- lasso/xml/id-wsf-2.0/ps_test_membership_response.c | 2 +- lasso/xml/id-wsf-2.0/sb2_consent.c | 2 +- lasso/xml/id-wsf-2.0/sb2_credentials_context.c | 2 +- lasso/xml/id-wsf-2.0/sb2_endpoint_update.c | 2 +- lasso/xml/id-wsf-2.0/sb2_redirect_request.c | 2 +- lasso/xml/id-wsf-2.0/sb2_sender.c | 2 +- lasso/xml/id-wsf-2.0/sb2_target_identity.c | 2 +- lasso/xml/id-wsf-2.0/sb2_timeout.c | 2 +- lasso/xml/id-wsf-2.0/sb2_usage_directive.c | 2 +- lasso/xml/id-wsf-2.0/sb2_user_interaction_header.c | 2 +- lasso/xml/id-wsf-2.0/sbf_framework.c | 2 +- lasso/xml/id-wsf-2.0/sec_token.c | 2 +- lasso/xml/id-wsf-2.0/sec_token_policy.c | 2 +- lasso/xml/id-wsf-2.0/sec_transited_provider_path.c | 2 +- lasso/xml/id-wsf-2.0/subs_notification.c | 2 +- lasso/xml/id-wsf-2.0/subs_notify_response.c | 2 +- lasso/xml/id-wsf-2.0/subs_ref_item.c | 2 +- lasso/xml/id-wsf-2.0/subs_subscription.c | 2 +- lasso/xml/id-wsf-2.0/subsref_app_data.c | 2 +- lasso/xml/id-wsf-2.0/subsref_create.c | 2 +- lasso/xml/id-wsf-2.0/subsref_create_item.c | 2 +- lasso/xml/id-wsf-2.0/subsref_create_response.c | 2 +- lasso/xml/id-wsf-2.0/subsref_data.c | 2 +- lasso/xml/id-wsf-2.0/subsref_data_response.c | 2 +- lasso/xml/id-wsf-2.0/subsref_delete.c | 2 +- lasso/xml/id-wsf-2.0/subsref_delete_item.c | 2 +- lasso/xml/id-wsf-2.0/subsref_delete_response.c | 2 +- lasso/xml/id-wsf-2.0/subsref_item_data.c | 2 +- lasso/xml/id-wsf-2.0/subsref_modify.c | 2 +- lasso/xml/id-wsf-2.0/subsref_modify_item.c | 2 +- lasso/xml/id-wsf-2.0/subsref_modify_response.c | 2 +- lasso/xml/id-wsf-2.0/subsref_notification.c | 2 +- lasso/xml/id-wsf-2.0/subsref_notify.c | 2 +- lasso/xml/id-wsf-2.0/subsref_notify_response.c | 2 +- lasso/xml/id-wsf-2.0/subsref_query.c | 2 +- lasso/xml/id-wsf-2.0/subsref_query_item.c | 2 +- lasso/xml/id-wsf-2.0/subsref_query_response.c | 2 +- lasso/xml/id-wsf-2.0/subsref_result_query.c | 2 +- lasso/xml/id-wsf-2.0/subsref_subscription.c | 2 +- lasso/xml/id-wsf-2.0/subsref_test_item.c | 2 +- lasso/xml/id-wsf-2.0/util_empty.c | 2 +- lasso/xml/id-wsf-2.0/util_extension.c | 2 +- lasso/xml/id-wsf-2.0/util_response.c | 2 +- lasso/xml/id-wsf-2.0/util_status.c | 2 +- lasso/xml/is_help.c | 2 +- lasso/xml/is_inquiry.c | 2 +- lasso/xml/is_inquiry_element.c | 2 +- lasso/xml/is_interaction_request.c | 2 +- lasso/xml/is_interaction_response.c | 2 +- lasso/xml/is_interaction_statement.c | 2 +- lasso/xml/is_item.c | 2 +- lasso/xml/is_parameter.c | 2 +- lasso/xml/is_redirect_request.c | 2 +- lasso/xml/is_select.c | 2 +- lasso/xml/is_text.c | 2 +- lasso/xml/is_user_interaction.c | 2 +- lasso/xml/lib_assertion.c | 2 +- lasso/xml/lib_authentication_statement.c | 2 +- lasso/xml/lib_authn_context.c | 2 +- lasso/xml/lib_authn_request.c | 2 +- lasso/xml/lib_authn_request_envelope.c | 2 +- lasso/xml/lib_authn_response.c | 2 +- lasso/xml/lib_authn_response_envelope.c | 2 +- lasso/xml/lib_federation_termination_notification.c | 3 ++- lasso/xml/lib_idp_entries.c | 2 +- lasso/xml/lib_idp_entry.c | 2 +- lasso/xml/lib_idp_list.c | 2 +- lasso/xml/lib_logout_request.c | 2 +- lasso/xml/lib_logout_response.c | 2 +- lasso/xml/lib_name_identifier_mapping_request.c | 2 +- lasso/xml/lib_name_identifier_mapping_response.c | 2 +- lasso/xml/lib_register_name_identifier_request.c | 2 +- lasso/xml/lib_register_name_identifier_response.c | 2 +- lasso/xml/lib_request_authn_context.c | 2 +- lasso/xml/lib_scoping.c | 2 +- lasso/xml/lib_status_response.c | 2 +- lasso/xml/lib_subject.c | 2 +- lasso/xml/misc_text_node.c | 2 +- lasso/xml/paos_request.c | 2 +- lasso/xml/paos_response.c | 2 +- lasso/xml/sa_credentials.c | 2 +- lasso/xml/sa_parameter.c | 2 +- lasso/xml/sa_password_transforms.c | 2 +- lasso/xml/sa_sasl_request.c | 2 +- lasso/xml/sa_sasl_response.c | 2 +- lasso/xml/sa_transform.c | 2 +- lasso/xml/saml-2.0/saml2_action.c | 2 +- lasso/xml/saml-2.0/saml2_advice.c | 2 +- lasso/xml/saml-2.0/saml2_assertion.c | 2 +- lasso/xml/saml-2.0/saml2_attribute.c | 2 +- lasso/xml/saml-2.0/saml2_attribute_statement.c | 2 +- lasso/xml/saml-2.0/saml2_attribute_value.c | 2 +- lasso/xml/saml-2.0/saml2_audience_restriction.c | 2 +- lasso/xml/saml-2.0/saml2_authn_context.c | 2 +- lasso/xml/saml-2.0/saml2_authn_statement.c | 2 +- lasso/xml/saml-2.0/saml2_authz_decision_statement.c | 2 +- lasso/xml/saml-2.0/saml2_base_idabstract.c | 2 +- lasso/xml/saml-2.0/saml2_condition_abstract.c | 2 +- lasso/xml/saml-2.0/saml2_conditions.c | 2 +- lasso/xml/saml-2.0/saml2_encrypted_element.c | 2 +- lasso/xml/saml-2.0/saml2_evidence.c | 2 +- lasso/xml/saml-2.0/saml2_key_info_confirmation_data.c | 2 +- lasso/xml/saml-2.0/saml2_key_info_confirmation_data_type.c | 2 +- lasso/xml/saml-2.0/saml2_name_id.c | 2 +- lasso/xml/saml-2.0/saml2_one_time_use.c | 2 +- lasso/xml/saml-2.0/saml2_proxy_restriction.c | 2 +- lasso/xml/saml-2.0/saml2_statement_abstract.c | 2 +- lasso/xml/saml-2.0/saml2_subject.c | 2 +- lasso/xml/saml-2.0/saml2_subject_confirmation.c | 2 +- lasso/xml/saml-2.0/saml2_subject_confirmation_data.c | 2 +- lasso/xml/saml-2.0/saml2_subject_locality.c | 2 +- lasso/xml/saml-2.0/samlp2_artifact_resolve.c | 2 +- lasso/xml/saml-2.0/samlp2_artifact_response.c | 2 +- lasso/xml/saml-2.0/samlp2_assertion_id_request.c | 2 +- lasso/xml/saml-2.0/samlp2_attribute_query.c | 2 +- lasso/xml/saml-2.0/samlp2_authn_query.c | 2 +- lasso/xml/saml-2.0/samlp2_authn_request.c | 2 +- lasso/xml/saml-2.0/samlp2_authz_decision_query.c | 2 +- lasso/xml/saml-2.0/samlp2_extensions.c | 2 +- lasso/xml/saml-2.0/samlp2_idp_entry.c | 2 +- lasso/xml/saml-2.0/samlp2_idp_list.c | 2 +- lasso/xml/saml-2.0/samlp2_logout_request.c | 2 +- lasso/xml/saml-2.0/samlp2_logout_response.c | 2 +- lasso/xml/saml-2.0/samlp2_manage_name_id_request.c | 2 +- lasso/xml/saml-2.0/samlp2_manage_name_id_response.c | 2 +- lasso/xml/saml-2.0/samlp2_name_id_mapping_request.c | 2 +- lasso/xml/saml-2.0/samlp2_name_id_mapping_response.c | 2 +- lasso/xml/saml-2.0/samlp2_name_id_policy.c | 2 +- lasso/xml/saml-2.0/samlp2_request_abstract.c | 2 +- lasso/xml/saml-2.0/samlp2_requested_authn_context.c | 2 +- lasso/xml/saml-2.0/samlp2_response.c | 2 +- lasso/xml/saml-2.0/samlp2_scoping.c | 2 +- lasso/xml/saml-2.0/samlp2_status.c | 2 +- lasso/xml/saml-2.0/samlp2_status_code.c | 2 +- lasso/xml/saml-2.0/samlp2_status_detail.c | 2 +- lasso/xml/saml-2.0/samlp2_status_response.c | 2 +- lasso/xml/saml-2.0/samlp2_subject_query_abstract.c | 2 +- lasso/xml/saml-2.0/samlp2_terminate.c | 2 +- lasso/xml/saml_advice.c | 2 +- lasso/xml/saml_assertion.c | 2 +- lasso/xml/saml_attribute.c | 2 +- lasso/xml/saml_attribute_designator.c | 2 +- lasso/xml/saml_attribute_statement.c | 2 +- lasso/xml/saml_attribute_value.c | 2 +- lasso/xml/saml_audience_restriction_condition.c | 2 +- lasso/xml/saml_authentication_statement.c | 2 +- lasso/xml/saml_authority_binding.c | 2 +- lasso/xml/saml_condition_abstract.c | 2 +- lasso/xml/saml_conditions.c | 2 +- lasso/xml/saml_name_identifier.c | 2 +- lasso/xml/saml_statement_abstract.c | 2 +- lasso/xml/saml_subject.c | 2 +- lasso/xml/saml_subject_confirmation.c | 2 +- lasso/xml/saml_subject_locality.c | 2 +- lasso/xml/saml_subject_statement.c | 2 +- lasso/xml/saml_subject_statement_abstract.c | 2 +- lasso/xml/samlp_request.c | 2 +- lasso/xml/samlp_request_abstract.c | 2 +- lasso/xml/samlp_response.c | 2 +- lasso/xml/samlp_response_abstract.c | 2 +- lasso/xml/samlp_status.c | 2 +- lasso/xml/samlp_status_code.c | 2 +- lasso/xml/sec_resource_access_statement.c | 2 +- lasso/xml/soap-1.1/soap_body.c | 2 +- lasso/xml/soap-1.1/soap_detail.c | 2 +- lasso/xml/soap-1.1/soap_envelope.c | 2 +- lasso/xml/soap-1.1/soap_fault.c | 2 +- lasso/xml/soap-1.1/soap_header.c | 2 +- lasso/xml/soap_binding_consent.c | 2 +- lasso/xml/soap_binding_correlation.c | 2 +- lasso/xml/soap_binding_ext_credential.c | 2 +- lasso/xml/soap_binding_ext_credentials_context.c | 2 +- lasso/xml/soap_binding_ext_service_instance_update.c | 2 +- lasso/xml/soap_binding_ext_timeout.c | 2 +- lasso/xml/soap_binding_processing_context.c | 2 +- lasso/xml/soap_binding_provider.c | 2 +- lasso/xml/soap_binding_usage_directive.c | 2 +- lasso/xml/utility_status.c | 2 +- lasso/xml/ws/wsa_attributed_any.c | 2 +- lasso/xml/ws/wsa_attributed_qname.c | 2 +- lasso/xml/ws/wsa_attributed_unsigned_long.c | 2 +- lasso/xml/ws/wsa_attributed_uri.c | 2 +- lasso/xml/ws/wsa_endpoint_reference.c | 2 +- lasso/xml/ws/wsa_metadata.c | 2 +- lasso/xml/ws/wsa_problem_action.c | 2 +- lasso/xml/ws/wsa_reference_parameters.c | 2 +- lasso/xml/ws/wsa_relates_to.c | 2 +- lasso/xml/ws/wsse_embedded.c | 2 +- lasso/xml/ws/wsse_reference.c | 2 +- lasso/xml/ws/wsse_security_header.c | 2 +- lasso/xml/ws/wsse_security_token_reference.c | 2 +- lasso/xml/ws/wsse_transformation_parameters.c | 2 +- lasso/xml/ws/wsse_username_token.c | 2 +- lasso/xml/ws/wsu_timestamp.c | 2 +- lasso/xml/xml.c | 2 +- tests/basic_tests.c | 2 +- tools/spatch/add-second-arg-to-class-init.cocci | 12 ++++++++++++ 348 files changed, 363 insertions(+), 347 deletions(-) commit 6a0708ed5c663fc07f9df5079ec09c0eb35c2689 Author: Benjamin Dauvergne Date: Thu Mar 26 20:19:25 2020 +0100 tests: fix compilation with check>0.12 (#39101) tests/non_regression_tests.c | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) commit 1b51873ccfccf9dde981ef4aecba7656bad4056b Author: Bernhard M. Wiedemann Date: Tue Mar 3 11:31:56 2020 +0100 Sort input file lists (#40454) so that lasso.py, lasso/types.c and liblasso.so.3.13.0 build reproducibly in spite of indeterministic filesystem readdir order. For some reason, lasso/extract_sections.py lasso/extract_symbols.py do not need such patches to get a reproducible openSUSE package. See https://reproducible-builds.org/ for why this is good. This patch was done while working on reproducible builds for openSUSE. License: MIT Signed-off-by: Bernhard M. Wiedemann bindings/bindings.py | 2 ++ lasso/extract_types.py | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) commit af8f88cec5c1821d19bb772c3cf5bcdd128e6b2d Author: Benjamin Dauvergne Date: Mon Sep 9 13:35:36 2019 +0200 debian: disable php7 (#28608) debian-jessie/rules | 1 + debian-stretch/rules | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) commit e2ec5a7349d5e5608e7edb94d0184385417abc92 Author: Tomohiro "Tomo-p" KATO Date: Wed Dec 5 05:22:12 2018 +0900 Modify .gitignore for PHP 7 binding (#28608) License: MIT .gitignore | 3 +++ 1 file changed, 3 insertions(+) commit 9c8c4b99379e4c9c27807b1b08fb30b1cf28af5a Author: Tomohiro "Tomo-p" KATO Date: Wed Dec 5 05:22:07 2018 +0900 Add PHP 7 binding (#28608) License: MIT bindings/Makefile.am | 8 +- bindings/bindings.py | 5 + bindings/overrides.xml | 8 +- bindings/php7/Makefile.am | 41 ++ bindings/php7/__init__.py | 0 bindings/php7/examples/Makefile.am | 2 + .../examples/get_attributes_from_assertion.php | 11 + bindings/php7/lang.py | 43 ++ bindings/php7/lasso.ini | 2 + bindings/php7/php_code.py | 511 +++++++++++++++++++ bindings/php7/tests/Makefile.am | 8 + bindings/php7/tests/binding_tests.php | 211 ++++++++ bindings/php7/tests/binding_tests.sh | 3 + bindings/php7/tests/profile_tests.php | 224 +++++++++ bindings/php7/tests/profile_tests.sh | 3 + bindings/php7/wrapper_header.py | 64 +++ bindings/php7/wrapper_source.py | 550 +++++++++++++++++++++ bindings/php7/wrapper_source_top.c | 380 ++++++++++++++ configure.ac | 81 +++ 19 files changed, 2150 insertions(+), 5 deletions(-) commit 37a0fa6f8b072b3b90e3ec2bf6e8152d2717370d Author: Benjamin Dauvergne Date: Mon Sep 9 13:30:26 2019 +0200 Fix tests broken by new DEBUG logs (#12829) tests/tests.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit db7e25287aa48f6c5830f9e5c37b2bafb3f8bd6c Author: Benjamin Dauvergne Date: Fri Sep 6 14:50:24 2019 +0200 Improve error logging during node parsing (#12829) lasso/xml/xml.c | 66 ++++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 47 insertions(+), 19 deletions(-) commit caecf46be47f712893046a7c6ac1ac9cbbc11779 Author: Benjamin Dauvergne Date: Fri Sep 6 14:43:31 2019 +0200 Improve configure compatibility (#32425) configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 84bc5b48d3094cd6d69c562eb70e62dd7c81d796 Author: Benjamin Dauvergne Date: Fri Sep 6 14:42:44 2019 +0200 Improve compatibility with Solaris (#32425) lasso/xml/tools.c | 2 ++ 1 file changed, 2 insertions(+) commit 6c852f8c0bdca7cc85dd1edbdb939887bd35ffe3 Author: Benjamin Dauvergne Date: Tue Sep 3 13:39:05 2019 +0200 Fix reference count in lasso_server_add_provider2 (fixes #35061) As implemented lasso_server_add_provider2 could not be used as a publik API as it dit not increase the reference count of the LassoProvider object before adding it to the providers hashtable. lasso_server_add_provider_helper had to be modified to decrement the reference count of the new LassoProvider object after using lasso_server_add_provider2. lasso/id-ff/server.c | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) commit 0a5a222e171958a13d66a28b8c2269c609838d2d Author: Benjamin Dauvergne Date: Tue Sep 3 14:19:40 2019 +0200 Fix python multi-version builds on jessie and stretch debian/rules supposed that lasso Makefile would always prefer python2 to python3, it's not the case anymore. Also recent python3 improvements to bindings scripts did not work with python 3.5 on jessie (on jessie/3.5 default open() encoding is still ASCII not UTF-8 as with the default UTF-8 of later python3 versions). bindings/bindings.py | 14 ++++++++++---- debian-jessie/rules | 34 ++++++++++------------------------ debian-stretch/rules | 38 ++++++++++++-------------------------- 3 files changed, 32 insertions(+), 54 deletions(-) commit 18cc55d7735756f03180d95bb8ae87767634cbee Author: Thomas NOEL Date: Tue Aug 27 11:03:58 2019 +0200 docs/xsltproc: do not use Internet to fetch DTDs, entities or documents (#35590) docs/lasso-book/figures/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 3b72ad847c813fc4d2c3f63786810d6d1cca5416 Author: Benjamin Dauvergne Date: Thu Jul 4 16:12:42 2019 +0200 fix missing include for index() (fixes #33791) tests/basic_tests.c:2141:7: warning: implicit declaration of function 'index' [-Wimplicit-function-declaration] qs = index(authnRequestUrl, '?') + 1; ^~~~~ tests/basic_tests.c:2141:7: warning: incompatible implicit declaration of built-in function 'index' tests/basic_tests.c | 1 + 1 file changed, 1 insertion(+) commit 1e85f1b2bd30c0d93b4a2ef37b35abeae3d15b56 Author: Dmitrii Shcherbakov Date: Fri Jun 28 02:36:19 2019 +0300 PAOS: Do not populate "Destination" attribute When ECP profile (saml-ecp-v2.0-cs01) is used with PAOS binding Lasso populates an AuthnRequest with the "Destination" attribute set to AssertionConsumerURL of an SP - this leads to IdP-side errors because the destination attribute in the request does not match the IdP URL. The "Destination" attribute is mandatory only for HTTP Redirect and HTTP Post bindings when AuthRequests are signed per saml-bindings-2.0-os (sections 3.4.5.2 and 3.5.5.2). Specifically for PAOS it makes sense to avoid setting that optional attribute because an ECP decides which IdP to use, not the SP. Fixes Bug: 34409 License: MIT Signed-off-by: Dmitrii Shcherbakov lasso/saml-2.0/login.c | 18 +++++++++--------- lasso/saml-2.0/profile.c | 10 +++++++++- 2 files changed, 18 insertions(+), 10 deletions(-) commit 5853fbc15024643448b407d93baf0c5b64f259bd Author: Benjamin Dauvergne Date: Tue Jul 2 11:57:08 2019 +0200 export symbol lasso_log (#33784) The symbol lasso_log has to be exported, otherwise Solaris run-time linker fails due to an unresolved symbol dependency. lasso/logging.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 7c075657a4d64f4d8dbcd03521a0694287d5059f Author: Benjamin Dauvergne Date: Tue Jun 11 10:10:42 2019 +0200 tests: use self-generated certificate to sign federation metadata file (#33823) Generation procedure : openssl genrsa -out rootCA.key 4096 openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 99999 -out rootCA.crt openssl genrsa -out lasso.key 2048 openssl req -new -sha256 -key lasso.key -subj "/C=FR/CN=Lasso" -out lasso.csr openssl x509 -req -in lasso.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out lasso.crt -days 99999 -sha256 openssl pkcs12 -export -inkey lasso.key -password pass: -in lasso.crt -name lasso -out lasso.pkcs12 xmlsec1 --sign --output renater.xml --trusted-pem rootCA.crt --pwd "" --pkcs12 lasso.pkcs12 metadata/renater-metadata.xml xmlsec1 --verify --trusted-pem rootCA.crt metadata/renater-metadata.xml tests/basic_tests.c | 13 +--- tests/data/lasso.crt | 23 +++++++ tests/data/lasso.csr | 15 +++++ tests/data/lasso.key | 27 ++++++++ tests/data/lasso.pkcs12 | Bin 0 -> 2664 bytes .../data/metadata/metadata-federation-renater.crt | 15 ----- tests/data/metadata/renater-metadata.xml | 69 +++++++++++++-------- tests/data/rootCA.crt | 32 ++++++++++ tests/data/rootCA.key | 51 +++++++++++++++ tests/data/rootCA.srl | 1 + 10 files changed, 192 insertions(+), 54 deletions(-) commit b0fb24c95150c2f4f8eb681fcd9a9f3d7fb2a566 Author: Benjamin Dauvergne Date: Thu May 23 10:02:33 2019 +0200 Do not ignore WantAuthnRequestSigned value with hint MAYBE (fixes #33354) Bug introduced in commit 394680712. lasso/saml-2.0/login.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 16aa8a74130b3d175c8c547a3c8ba38d5526cce1 Author: Benjamin Dauvergne Date: Fri Jan 11 16:07:41 2019 +0100 Use io.open(encoding=utf8) in extract_symbols/sections.py (fixes #33360) lasso/extract_sections.py | 6 +++--- lasso/extract_symbols.py | 3 ++- 2 files changed, 5 insertions(+), 4 deletions(-) commit 151ad17e0422f77efe3d55038398a510364b850e Author: Benjamin Dauvergne Date: Mon Jan 7 11:10:10 2019 +0100 xml: adapt schema in saml2:AuthnContext (#29340) saml2:AuthnContext XML schema indicate that AuthenticatingAuthority is an optional unbounded list of nodes, but the current Lasso schema only handle an unique element. To prevent Lasso from refusing perfectly legal messages, we add a rule to the Lasso ignoring other nodes after the first one. lasso/xml/saml-2.0/saml2_authn_context.c | 4 ++++ 1 file changed, 4 insertions(+) commit 642182bdf49c9c93a86b093ad7335c8a7a5ae8cc Author: John Dennis Date: Wed Jan 9 17:23:09 2019 -0500 Fix ECP signature not found error when only assertion is signed (#26828) With a SAML Authn Response either the message or the assertion contained in the response message or both can be signed. Most IdP's sign the message. This fixes a bug when processing an ECP authn response when only the assertion is signed. lasso_saml20_profile_process_soap_response_with_headers() performs a signature check on the SAML message. A signature can also appear on the assertion which is checked by lasso_saml20_login_process_response_status_and_assertion() The problem occurred when the message was not signed and lasso_saml20_profile_process_soap_response_with_headers() returned LASSO_DS_ERROR_SIGNATURE_NOT_FOUND as an error code which is not actually an error because we haven't checked the signature on the assertion yet. We were returning the first LASSO_DS_ERROR_SIGNATURE_NOT_FOUND error when in fact the subsequent signature check in lasso_saml20_login_process_response_status_and_assertion() succeeded. The ECP unit tests were enhanced to cover these cases. The enhanced unit test revealed a problem in two switch statements operating on the return value of lasso_profile_get_signature_verify_hint() which were missing a case statement for LASSO_PROFILE_SIGNATURE_VERIFY_HINT_FORCE which caused an abort due to an unknown enumeration value. Fixes Bug: 26828 License: MIT Signed-off-by: John Dennis lasso/saml-2.0/login.c | 29 +++++++++----- lasso/saml-2.0/profile.c | 2 + tests/login_tests_saml2.c | 97 ++++++++++++++++++++++++++++++++++++----------- 3 files changed, 95 insertions(+), 33 deletions(-) commit 580aca65b12255d8672eae1e373396bf54460960 Author: Benjamin Dauvergne Date: Mon Oct 15 11:27:09 2018 +0200 extract_types.py: force io to use UTF-8 encoding (fixes #27332) lasso/extract_types.py | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) commit 14febd3c5f693c928b5f99eb83bc9a2385f4d176 Author: Benjamin Dauvergne Date: Sun Oct 14 20:40:55 2018 +0200 add Jenkinsfile Jenkinsfile | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) commit 5070a06a9a7256ea66a49b534f734abc79ac100e Author: Benjamin Dauvergne Date: Tue Sep 4 10:42:13 2018 +0200 xml: fix parsing of saml:AuthnContext (fixes #25640) Decl/DeclRef are alternatives, when matching a Decl we should jump over the DeclRef. lasso/xml/saml-2.0/saml2_authn_context.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 50b5cdac871e9af45b10cf8a548c1d1db290dfeb Author: Benjamin Dauvergne Date: Tue Jul 24 12:38:26 2018 +0200 Remove -Werror from --enable-debugging (fixes #24771) GCC 8 has better warnings and it breaks the build on platform already using it and wanting debugging symbols. configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 62d2f4bff71d876b1768ca0d96cb000c9cbcabd3 Author: Benjamin Dauvergne Date: Tue Jul 24 12:37:50 2018 +0200 Move AC_SUBST declaration for AM_CFLAGS with alike (#24771) Just to reorder things properly in configure.ac. configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 150de26bffa4dbf3bd4568a34f5a84ec4ae4efd6 Author: Benjamin Dauvergne Date: Tue Jul 24 11:29:28 2018 +0200 Clean python cache when building python3 binding Python3 store .pyc cache in hidden directory __pycache__, distcheck complained that the source directory was not completely clean after a distclean. bindings/python/Makefile.am | 3 +++ 1 file changed, 3 insertions(+) commit 28d3705d5a6e9b649e7aa16324b17e1a2727781b 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 configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 3d9d58d52c5daf7315e3b28968b94761298ba0ec Author: John Dennis Date: Mon Jun 25 18:52:16 2018 -0400 Make more Python scripts compatible with both Py2 and Py3 While porting other Python code in the repo to run under Py3 (as well as Py2) it was discovered there were a number of other Python scripts which also needed porting. However these scripts are never invoked during a build so there was no easy way to test the porting work. I assume these scripts are for developers only and/or are historical. Because there was no way for me to test the porting changes on these scripts I did not want to include the changes in the patch for the Py3 porting which fixed scripts that are invoked during the build (the former patch is mandatory, this patch is optional at the moment). I did verify the scripts compile cleanly under both Py2 and Py3, however it's possible I missed porting something or the error does not show up until run-time. 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) * Python PEP 3113 removed tuple parameter unpacking. Therefore you can no longer define a formal parameter list that contains tuple notation representing a single parameter that is unpacked into multiple arguments. License: MIT Signed-off-by: John Dennis bindings/php5/php_code.py | 7 +++-- bindings/php5/wrapper_source.py | 5 ++-- bindings/python/tests/XmlTestRunner.py | 19 ++++++------ bindings/python/tests/tests.py | 19 ++++++------ docs/lasso-book/check-functions.py | 24 +++++++-------- lasso/extract_sections.py | 19 ++++++------ tests/integration/saml2/__init__.py | 14 +++++---- tools/api.py | 20 ++++++------- tools/check-lasso-sections.py | 16 ++++++---- tools/format-suppressions.py | 9 +++--- tools/generate_idwsf2_classes.py | 29 ++++++++++--------- website/convert-to-static.py | 53 ++++++++++++++++++++++------------ website/ezt.py | 14 ++++----- 13 files changed, 139 insertions(+), 109 deletions(-) commit a76390813a7bcd17313c99ddf2ec0f93d6e0000a Author: John Dennis Date: Mon Jun 25 18:04:18 2018 -0400 Downcase UTF-8 file encoding name Python and Emacs (and others?) recognize a special directive line in a file that identifies what encoding the file is encoded in. See Python PEP 263. For example: The general form of the directive is: where xxx is the name of a codec. Python codec names are lower case with underscores used to seperate words. In both Python and Emacs one can create aliases for the codecs so you can use an alternate name to refer to the same codec. Python is forgiving with respect to case, underscore and hyphens. Python will automatically create an alias for a codec name by downcasing it and replacing hyphens with underscores, thus "UTF-8" is actually an alias for the "utf_8" codec. Unfortunately emacs does not automatically create such aliases, although one can add aliases via a custom initialization file, but doing so requires every user using emacs to edit the files to manually create their own aliases. If you try to write a file in emacs with the "UTF-8" codec name it won't recognize it as "utf-8", instead you'll get errors like this: Warning (mule): Invalid coding system ‘UTF-8’ is specified for the current buffer/file by the :coding tag. It is highly recommended to fix it before writing to a file. and you must force the file to be written by responding to additional propmpts. This patch simply downcases the the "UTF-8" codec name to "utf-8" so that both Python and Emacs will accept the codec name. License: MIT Signed-off-by: John Dennis bindings/python/tests/XmlTestRunner.py | 2 +- bindings/python/tests/binding_tests.py | 2 +- bindings/python/tests/idwsf1_tests.py | 2 +- bindings/python/tests/idwsf2_tests.py | 2 +- bindings/python/tests/profiles_tests.py | 2 +- bindings/python/tests/tests.py | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) commit 2ca030352498bdef82f6496fb487be5fce8c98eb 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 bindings/python/tests/profiles_tests.py | 34 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 18 deletions(-) commit 17c39c3990bd1e9e26ba005bc7879b8b7e5820b7 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 .../examples/get_attributes_from_assertion.py | 6 ++- bindings/python/tests/binding_tests.py | 4 +- bindings/python/tests/idwsf2_tests.py | 24 +++++----- lasso/build_strerror.py | 56 +++++++++++----------- 4 files changed, 46 insertions(+), 44 deletions(-) commit 87040110ed85ca2f9eb09f34d430e9ae83ad98b1 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 bindings/java/Makefile.am | 2 +- bindings/python/tests/Makefile.am | 3 +++ lasso/Makefile.am | 2 +- tools/check-lasso-sections.py | 2 +- 4 files changed, 6 insertions(+), 3 deletions(-) commit f33d51db53373eb1f0a6429320e9de60210d5270 Author: Benjamin Dauvergne Date: Thu Jun 28 23:16:18 2018 +0200 tools: set output buffer size in lasso_inflate to 20 times the input size (fixes #24853) lasso/xml/tools.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 9e3701667372568d5d990b5abd8dd23c7b0fe03c Author: Benjamin Dauvergne Date: Thu Jun 28 11:32:33 2018 +0200 jenkins.sh: add a make clean to prevent previous build to break new ones jenkins.sh | 1 + 1 file changed, 1 insertion(+) commit e29de3160d71d215be51f74783006d382f366f97 Author: Benjamin Dauvergne Date: Wed Jun 27 19:27:33 2018 +0200 tools: fix segfault in lasso_get_saml_message (fixes #24830) We reuse the "message" local variable but we should not. Also fix a segfault in lasso_xmltextreader_from_message() when getting the length of "message" before checking if it is NULL or not. lasso/xml/tools.c | 7 ++++--- tests/basic_tests.c | 8 +++++++- 2 files changed, 11 insertions(+), 4 deletions(-) commit eb6e0e23b4f984d77c014d45a375b3474ced34e2 Author: Frédéric Péters Date: Wed Jun 27 19:29:40 2018 +0200 python: add a classmethod for lasso.profileGetIssuer (#24831) FAQ.rst | 6 +++--- bindings/python/lang.py | 5 +++++ 2 files changed, 8 insertions(+), 3 deletions(-) commit 591acb5170571c23e9998cfce3b225d6c0a0c435 Author: Frédéric Péters Date: Wed Jun 27 18:16:46 2018 +0200 faq: fix references to lasso.profileGetIssuer (#24832) FAQ.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 9147093b673d8bba32e2e3480f8f7467fcf09293 Author: Frédéric Péters Date: Fri Jun 15 22:02:47 2018 +0200 debian: sync with debian package (#24595) debian-stretch/changelog | 32 ++ debian-stretch/compat | 2 +- debian-stretch/control | 18 +- debian-stretch/control.in | 20 +- debian-stretch/{docs => liblasso3.docs} | 0 debian-stretch/liblasso3.symbols | 565 ++++++++++++++++++++++++++++++++ debian-stretch/patches/series | 0 debian-stretch/rules | 7 +- debian-stretch/watch | 2 + 9 files changed, 625 insertions(+), 21 deletions(-) commit d8ea60e6f2019984b7b7355c27958887c9491615 Author: Benjamin Dauvergne Date: Thu Jun 14 13:19:24 2018 +0200 website: add news about 2.6.0 release website/web/news/25-release-2.6.0.xml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) commit 796a5cb60c607a9facea26b41cd43371fa8fd1b1 Author: Benjamin Dauvergne Date: Wed May 30 17:06:47 2018 +0200 Release 2.6.0 NEWS | 36 ++++++++++++++++++++++++++++++++++++ configure.ac | 2 +- website/web/doap.rdf | 4 ++++ website/web/download/index.xml | 2 +- 4 files changed, 42 insertions(+), 2 deletions(-) commit 9853289bc7c4660a330af44e0f8e88097437829d Author: Benjamin Dauvergne Date: Wed May 30 16:50:00 2018 +0200 perl/tests: build Makefile.perl before running the tests bindings/perl/Makefile.am | 2 ++ 1 file changed, 2 insertions(+) commit 877f9e7888c4608448c9e192379122e6a5709722 Author: Benjamin Dauvergne Date: Tue May 1 11:14:14 2018 +0200 deprecate loading PEM formatted public keys in lasso_xmlsec_load_key_info Also ensure work-around bug[1] in libxmlsec 1.2.24 and 1.2.25. [1]: https://github.com/lsh123/xmlsec/issues/164 lasso/xml/tools.c | 78 ++++++++++++---------- tests/data/idp10-512-saml2/metadata.xml | 24 +------ tests/data/idp11-multikey-saml2/metadata.xml | 38 +---------- tests/data/idp12-dsa-saml2/metadata.xml | 47 +------------ .../metadata.xml | 46 +------------ tests/data/idp5-saml2/metadata.xml | 46 +------------ tests/data/idp6-saml2/metadata.xml | 46 +------------ tests/data/idp7-saml2/metadata.xml | 46 +------------ tests/data/idp9-1024-saml2/metadata.xml | 30 +-------- tests/data/sp10-512-saml2/metadata.xml | 20 +----- tests/data/sp5-saml2/metadata.xml | 46 +------------ tests/data/sp6-saml2/metadata.xml | 46 +------------ tests/data/sp7-saml2/metadata.xml | 5 +- tests/data/sp7-saml2/private-key.pem | 35 +++++++--- tests/data/sp9-1024-saml2/metadata.xml | 30 +-------- tests/metadata_tests.c | 23 +++++++ 16 files changed, 116 insertions(+), 490 deletions(-) commit 81a628202d2ea0da9f6466a6edb48cdd3a6757b4 Author: Benjamin Dauvergne Date: Tue May 1 10:51:46 2018 +0200 add a pem-public-key runtime flag We want to deprecate support for loading PEM formatted key from ds:KeyValue nodes, before final removal it will have to be activated through a runtime flag (using LASSO_FLAG environment variable). lasso/debug.h | 1 + lasso/lasso.c | 9 +++++++++ 2 files changed, 10 insertions(+) commit 760eb947ab5888992dff39c76b7129178fd134f1 Author: John Dennis Date: Tue Apr 3 19:49:31 2018 -0400 Replace xmlSecSoap functions with lasso implementations xmlsec has removed support for SOAP. The missing xmlSecSoap* functions and their dependent utiliity functions were added to Lasso following the model of the existing xmlSec implmentations. Note: Lasso tried to accommodate both SOAP 1.1 and SOAP 1.2 but SAML2 *only* uses SOAP 1.1 thus the SOAP 1.2 support was superfluous and confused matters. Therefire the SOAP 1.2 support was removed. The following new functions were added to Lasso to support SOAP: * lasso_xml_next_element_node * lasso_xml_get_node_ns_href * lasso_xml_is_element_node * lasso_xml_soap11_get_header * lasso_xml_soap11_get_body The following is the mapping from the deprecated xmlSecSoap symbols to the new Lasso symbols: xmlSecSoap11Ns -> LASSO_SOAP_ENV_HREF xmlSecGetNextElementNode -> lasso_xml_next_element_node xmlSecGetNodeNsHref -> lasso_xml_get_node_ns_href xmlSecCheckNodeName -> lasso_xml_is_element_node xmlSecSoap11GetHeader -> lasso_xml_soap11_get_header xmlSecSoap11GetBody -> lasso_xml_soap11_get_body This patch also extends the automake version support in autogen.sh to the current 1.16 version. License: MIT Signed-off-by: John Dennis autogen.sh | 5 +- lasso/id-wsf/wsf_profile.c | 5 +- lasso/xml/Makefile.am | 1 - lasso/xml/private.h | 11 ++++ lasso/xml/tools.c | 147 +++++++++++++++++++++++++++++++++++++++++---- lasso/xml/xmlsec_soap.h | 112 ---------------------------------- 6 files changed, 153 insertions(+), 128 deletions(-) commit 39ca2d48330c8968df1a01268606ac9ab659ac51 Author: Benjamin Dauvergne Date: Mon Apr 30 16:01:50 2018 +0200 perl: set DESTDIR and PREFIX at Makefile's creation bindings/perl/Makefile.am | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit aace9d318290e0be1209485d90de56756ed39a25 Author: Benjamin Dauvergne Date: Sun Apr 29 20:17:27 2018 +0200 perl: force use of the in-tree lasso when running tests (fixes #23276) bindings/perl/test.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 187b4b1b28cd62843612cf43594d9ad7ad4dbf65 Author: Benjamin Dauvergne Date: Sun Apr 29 19:59:56 2018 +0200 python: route logs for libxml2 and libxmlsec2 to their own logger bindings/python/wrapper_top.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit a354701fae8bd35de5accba4d3f3af290126b98a Author: Benjamin Dauvergne Date: Fri Apr 6 22:39:54 2018 +0200 add xmlsec_soap.h to Makefile lasso/xml/Makefile.am | 1 + 1 file changed, 1 insertion(+) commit 3fb0d627679f4fc45b9d15ce95d01749d14d0c46 Author: Benjamin Dauvergne Date: Fri Apr 6 17:21:00 2018 +0200 java: stop setting a bytecode version target configure.ac | 1 - 1 file changed, 1 deletion(-) commit 87da2e6e1471616805c6dabaaa6e8e58890384ca Author: Benjamin Dauvergne Date: Fri Apr 6 15:11:03 2018 +0200 tests: prevent crash in glib caused by abort on recursive logging The fail() function from libcheck is doing a longjump() from inside the logging subsystem, preventing the depth counter to be reinitialised to 0. (Seen with g_private_get(&g_log_depth) in a gdb session). tests/tests.c | 32 +++++++++++++++++++++++++++----- tests/tests.h | 7 +++---- 2 files changed, 30 insertions(+), 9 deletions(-) commit 48fb1c37ecdffd614803dbff91679ef11076e079 Author: Benjamin Dauvergne Date: Fri Apr 6 15:09:12 2018 +0200 route logs from libxml2 and libxmlsec through GLib logging lasso/lasso.c | 18 ++++++++++++------ tests/basic_tests.c | 12 ++++++------ tests/login_tests.c | 4 ++-- tests/tests.h | 8 ++++---- 4 files changed, 24 insertions(+), 18 deletions(-) commit 6dd28b20d395f7826a2da493d7fd1b0deed441fa Author: Benjamin Dauvergne Date: Fri Apr 6 10:46:33 2018 +0200 fix get_issuer and get_in_response_to lasso/id-ff/login.c | 15 +++--- lasso/id-ff/profile.c | 8 +-- lasso/saml-2.0/profile.c | 9 ++-- lasso/utils.h | 12 +++++ lasso/xml/private.h | 4 +- lasso/xml/tools.c | 134 +++++++++++++++++++++++++++++++++-------------- lasso/xml/xml.c | 8 +-- tests/basic_tests.c | 71 +++++++++++++++++++++++++ 8 files changed, 199 insertions(+), 62 deletions(-) commit c1bd8ca117b8c1808c425352797e25622dc53529 Author: Benjamin Dauvergne Date: Fri Apr 6 10:45:36 2018 +0200 fix warnings lasso/id-ff/lecp.c | 2 +- lasso/id-ff/login.c | 10 +++++----- lasso/id-ff/name_identifier_mapping.c | 4 ++-- lasso/id-ff/name_registration.c | 24 ++++++++++++------------ lasso/saml-2.0/name_id_management.c | 2 +- 5 files changed, 21 insertions(+), 21 deletions(-) commit 1d56cd1e31ce993ad17f4b4bbc31c12ffff1311f Author: Benjamin Dauvergne Date: Fri Oct 6 10:28:22 2017 +0200 replace use of which is deprecated (fixes #18771) lasso/id-wsf/wsf_profile.c | 2 +- lasso/xml/tools.c | 2 +- lasso/xml/xmlsec_soap.h | 112 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 114 insertions(+), 2 deletions(-) commit 75d3a2ca460478b3026eefa97892afa608732f74 Author: Frédéric Péters Date: Sat Feb 10 15:53:13 2018 +0100 debian: initialize stretch packaging with a copy of upstream debian (#21772) debian-stretch/changelog | 447 ++++++++++++++++++++++++++++++++ debian-stretch/compat | 1 + debian-stretch/control | 113 ++++++++ debian-stretch/control.in | 113 ++++++++ debian-stretch/copyright | 44 ++++ debian-stretch/dirs | 2 + debian-stretch/docs | 2 + debian-stretch/liblasso-java.dirs | 1 + debian-stretch/liblasso-java.install | 2 + debian-stretch/liblasso-perl.install.in | 1 + debian-stretch/liblasso3-dev.dirs | 2 + debian-stretch/liblasso3-dev.install | 4 + debian-stretch/liblasso3.dirs | 1 + debian-stretch/liblasso3.install | 1 + debian-stretch/php5-lasso.install | 3 + debian-stretch/php5-lasso.postinst | 7 + debian-stretch/php5-lasso.prerm | 7 + debian-stretch/php5-lasso.substvars | 4 + debian-stretch/python-lasso.install | 2 + debian-stretch/python3-lasso.install | 2 + debian-stretch/rules | 199 ++++++++++++++ debian-stretch/source/format | 1 + 22 files changed, 959 insertions(+) commit 81fad67ad2058b65a3cfd7a84eac564f5cc8668c Author: Benjamin Dauvergne Date: Mon Sep 11 12:07:48 2017 +0200 saml-2.0: improve support for free content inside samlp2:Extensions (fixes #18581) Four new accesors: lasso_samlp2_extensions_get_any lasso_samlp2_extensions_set_any lasso_samlp2_extensions_get_attributes lasso_samlp2_extensions_set_attributes The two new pseudo field are fully supported in the python binding. node = lasso.Samlp2Extensions() node.any = 'ok' node.attributes = {'{http://entrouvert.org/}attribute1': 'value'} print node.dump() bindings/bindings.py | 2 +- bindings/overrides.xml | 4 ++ bindings/python/lang.py | 36 +++++++++---- bindings/python/tests/binding_tests.py | 22 ++++++++ bindings/python/wrapper_top.c | 24 +++++---- lasso/utils.h | 26 ++++++++++ lasso/xml/saml-2.0/samlp2_extensions.c | 95 +++++++++++++++++++++++++++++----- lasso/xml/saml-2.0/samlp2_extensions.h | 5 +- 8 files changed, 178 insertions(+), 36 deletions(-) commit 51b5874c38cd703842d4b2faf644a68e1eab3133 Author: Benjamin Dauvergne Date: Fri Nov 11 10:04:54 2016 +0100 ignore unknown attributes from the xsi: namespace lasso/xml/xml.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) commit f0733e145fe26eb9e44cbb7fe03daa56aa11bf94 Author: Benjamin Dauvergne Date: Wed Oct 12 18:37:52 2016 +0200 add defined for the XML namespace lasso/xml/strings.h | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) commit 804db0bbd45c7a4ce570cdfad7a81a2cb2dd5f6f Author: Benjamin Dauvergne Date: Sat Aug 12 10:31:58 2017 +0200 jenkins.sh: add V=1 jenkins.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 5798311da12161fbfa3011a29bb72e5e23e7d126 Author: Benjamin Dauvergne Date: Thu Aug 4 00:51:12 2016 +0200 fix definitions of error, critical and warning macros (fixes #12830) They all log at the DEBUG level instead of their respective levels. lasso/logging.h | 12 ++++++------ tests/login_tests.c | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) commit a69c61f41913fdd818f9d07d9a69fa299f0b64ca Author: Benjamin Dauvergne Date: Thu Aug 4 13:12:22 2016 +0200 tests: convert log level as string tests/tests.c | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) commit fad04ed1c9718ae50ed0191c9a47cdf574798554 Author: John Dennis Date: Fri Jun 17 11:58:24 2016 -0400 Fix ecp test validate_idp_list() (fixes #11421) validate_idp_list was not using the correct list elements when it iterated over the known_sp_provided_idp_entries_supporting_ecp list. It treated them as lists of strings instead of lists of LassoSamlp2IDPEntry. Signed-off-by: John Dennis License: MIT tests/login_tests_saml2.c | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) commit ed74f24155635beeae2312fe589366e77827be94 Author: John Dennis Date: Wed Jun 15 11:50:24 2016 -0400 enable user supplied CFLAGS CFLAGS is initialized to the empty string in configure.ac, this effectively turned off user supplied values for CFLAGS preventing site specific values from being used. A further complicating factor was of all the user supplied values documented in Automake only CFLAGS was disabled allowing all other user supplied variables to take effect. Some variables must be coordinated (e.g. CFLAGS with LDFLAGS), the fact LDFLAGS was picked up from the environment but CFLAGS was discarded caused build failures due to incompatible combination of compiler and linker options. The problem was first introduced in commit: 73d9c98f "Reset CFLAGS when --enable-debugging is used". This patch simply removes hardcoding CFLAGS to the empty string and appends the debug options (--enable-debugging) to the existing CFLAGS. Proper use of the variables is described in the Automake documentation in the section "Flag Variables Ordering" https://www.gnu.org/software/automake/manual/html_node/Flag-Variables-Ordering.html Although the Automake documentation claims manipulating CFLAGS directly is improper use there are many examples of this in the existing configure.ac, this patch makes no attempt at addressing this issue, rather it makes existing usage consistent. In the particular case of debug flags appending to CFLAGS is probably the only valid solution because the debug flags must appear at the end of the list of flags in order to override earlier flags, CFLAGS always appears last in the Makefile (see above Automake doc). Signed-off-by: John Dennis License: MIT configure.ac | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit a71e682905d9a429d43d514fa1f169ebba6bec19 Author: Benjamin Dauvergne Date: Tue Apr 26 14:43:43 2016 +0200 do not call xmlSecKeyDuplicate is source key is NULL lasso/utils.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit f673208a622eb0bac2b1e03cd189b6a7acd3569d Author: Benjamin Dauvergne Date: Fri Mar 11 16:25:56 2016 +0100 fix segfault when parsed node has no namespace (#47) This bug was introduced in commit 8d06806d, the check for a correct namespace on head node of parsed XML fragments does not handle the case where the node has no namespace. Using lasso_equal_namespace() fix this. lasso/xml/xml.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) commit 8d06806db6869cbc2ac8df13128d401d241c9744 Author: Benjamin Dauvergne Date: Mon Mar 7 12:48:29 2016 +0100 check node names in lasso_node_impl_init_from_xml() (fixes #47) lasso/xml/saml-2.0/saml2_name_id.c | 4 ++++ lasso/xml/xml.c | 26 ++++++++++++++++++++++++++ 2 files changed, 30 insertions(+) commit 84f1b2f601f4f16475417e2680e24c776107fe40 Author: Benjamin Dauvergne Date: Mon Mar 7 00:14:39 2016 +0100 tests: silence unused variable warning tests/login_tests_saml2.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 7ed88f3490001661dba2c7aca581abfce4306740 Author: Benjamin Dauvergne Date: Sun Mar 6 17:18:29 2016 +0100 add docstring on SHA-2 signature method enum lasso/xml/xml.h | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) commit f80d3b291160d7e7996e71b59d7bd5dd221f9260 Author: Benjamin Dauvergne Date: Sun Mar 6 14:09:23 2016 +0100 remove DGME specific commented out code lasso/xml/xml.c | 5 ----- 1 file changed, 5 deletions(-) commit 1194b3e670c2927ce43aaff9eccd110d9642d5ba Author: Benjamin Dauvergne Date: Sun Mar 6 13:44:41 2016 +0100 add support for C14N 1.1 methods and C14N withComments methods (fixes #4863) lasso/xml/tools.c | 8 ++++++++ 1 file changed, 8 insertions(+) commit 9525237236eef4097300d9b6e93d2178a7a72267 Author: Benjamin Dauvergne Date: Fri Mar 4 10:38:07 2016 +0100 Choose the Reference transform based on the chosen Signature transform (fixes #10155) i.e. if the signature use SHA2 then use SHA2 of the same strength for digesting references. lasso/xml/tools.c | 41 +++++++++++++++++++++++++++++++++-------- tests/login_tests_saml2.c | 45 +++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 76 insertions(+), 10 deletions(-) commit d8e3ae85044a23424e8fcccc4af2ce7ce883ef74 Author: John Dennis Date: Tue Feb 23 20:00:45 2016 -0500 add inline implementation of lasso_log lasso_log is a private function of lasso and as such cannot be referenced by the loader. This is equivalent to commit e0bda691 in the PHP binding which exhibited the same problem. lasso_log is referenced in jobject_to_gobject() because of lasso_assign_gobject macro, which includes the lasso_release_gobject macro which invokes the message macro which expands to lasso_log. License: MIT Signed-off-by: John Dennis bindings/java/wrapper_top.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) commit c62ad0047eafb6eaaf1370fea6f35214cc85e02e Author: Benjamin Dauvergne Date: Thu Feb 18 23:45:39 2016 +0100 Release 2.5.1 ChangeLog | 975 +++++++++++++++++++++++++++++++++- NEWS | 26 +- configure.ac | 2 +- website/web/doap.rdf | 4 + website/web/download/index.xml | 2 +- website/web/news/24-release-2.5.1.xml | 15 + 6 files changed, 1019 insertions(+), 5 deletions(-) commit 5e799c389807137ec4b62f86195d03c4657060ef Author: Benjamin Dauvergne Date: Thu Feb 18 23:58:13 2016 +0100 fix warning about INCLUDES directive lasso/xml/ecp/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 022375809ae8e69ab9f1c8d3048c54a271b7e066 Author: Benjamin Dauvergne Date: Thu Feb 18 23:06:17 2016 +0100 bindings/php5: fix enum getters and setters (fixes #10032) enumeration type were being wrongly interpreted as objects types because is_object() was used instead of the local specialisation done in PhpCode.is_object(). Also fix docstring of getters/setters. bindings/php5/php_code.py | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) commit 74e8705b57b6fd5972f28c646d84087c8011bb54 Author: Benjamin Dauvergne Date: Thu Feb 18 22:52:18 2016 +0100 tools.c: use correct NID and digest length when building RSA signature using SHA-2 digest (fixes #10019) Thanks to Brett Gardner for the bug report and patch. Licence: MIT lasso/xml/tools.c | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) commit 675858f43cfc33216e6b7b9c8a62b826a8a1ef4a Author: Benjamin Dauvergne Date: Wed Jan 13 09:50:18 2016 +0100 Fix wrong snippet type (fixes #9616) In elements samlp2:RequestedAuthnContext, Comparison is an attribute, not a text child node. lasso/xml/saml-2.0/samlp2_requested_authn_context.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit e0afa0b99587f0721f69849304a6fa2b2b9911eb Author: Frédéric Péters Date: Mon Jan 11 09:15:27 2016 +0100 perl: remove quotes from $PERL -V::ccflags: output (#9572) configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 8e78d90d5476322a0c4914bbbe5e5092c59db034 Author: Benjamin Dauvergne Date: Wed Nov 25 04:13:58 2015 +0100 tests: update valgrind suppressions tests/valgrind/glib.supp | 15 +++++++++++++++ tests/valgrind/lasso.supp | 13 +------------ tests/valgrind/openssl.supp | 22 ++++++++++++++++++++++ 3 files changed, 38 insertions(+), 12 deletions(-) commit 89ba752aa5fa41de4b1bf76a5c334ec4c1fbb35b Author: Benjamin Dauvergne Date: Wed Nov 25 04:15:05 2015 +0100 tests: fix leak tests/basic_tests.c | 1 + 1 file changed, 1 insertion(+) commit 6b88c5b946c8c6aa4cbe02d7f8b8a9ae0c792a6d Author: Benjamin Dauvergne Date: Wed Nov 25 04:14:17 2015 +0100 saml-2.0: fix leaks of url lasso/saml-2.0/login.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit 56c9fb65e811204af0276d8b4384683374b78d8d Author: Benjamin Dauvergne Date: Wed Nov 25 03:08:58 2015 +0100 profile: fix leak of private idp_list field lasso/id-ff/profile.c | 1 + 1 file changed, 1 insertion(+) commit 3c2f30d2fe07300b25979c42fad985ba95cc1758 Author: Benjamin Dauvergne Date: Wed Nov 25 03:08:38 2015 +0100 xml: fix leak in lasso_soap_envelope_new_full lasso/xml/soap-1.1/soap_envelope.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) commit 882e8e21f8128ee754682d1c4489c4f3fb4697b6 Author: Benjamin Dauvergne Date: Tue Nov 24 19:32:09 2015 +0100 xml: fix wrong termination of comment lasso/xml/strings.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit cd515cb82c0b959c8519dae2de303c8e238626d1 Author: Benjamin Dauvergne Date: Tue Nov 24 19:29:43 2015 +0100 tests: fix leaks in test_ecp tests/login_tests_saml2.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit ab7c12e1634e5c8a1f9ccae0d53aef894e21ca41 Author: Benjamin Dauvergne Date: Tue Nov 24 19:22:18 2015 +0100 saml-2.0: fix leak of message_id in lasso_profile_saml20_build_paos_request_msg lasso/saml-2.0/profile.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit 7ecf6c18678d55425ab3a2053ba70bebe9814497 Author: Benjamin Dauvergne Date: Tue Nov 24 19:19:18 2015 +0100 id-ff: fix leak of profile->private_data->message_id lasso/id-ff/profile.c | 2 ++ 1 file changed, 2 insertions(+) commit 5d77950b4cc2d86ce6d0919faa74883d9a5b2508 Author: Benjamin Dauvergne Date: Tue Nov 24 19:17:06 2015 +0100 tests: fix leak in test test16_test_get_issuer tests/basic_tests.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) commit 9bf43a8ea582d290d10ad5beba41aa511979770f Author: Rob Crittenden Date: Mon Oct 19 13:48:40 2015 -0400 Set NotBefore in SAML 2.0 login assertions License: MIT Signed-off-by: Rob Crittenden lasso/saml-2.0/login.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit eadc660d35e14eba9d3a9c199f10cc293857b747 Author: John Dennis Date: Thu Oct 15 11:32:50 2015 -0400 Add missing urn constants used in PAOS HTTP header The new OASIS "SAML V2.0 Enhanced Client or Proxy Profile Version 2.0" specification added new options that can appear in the PAOS HTTP header. Section 2.3.1 enumerates the following URN options which can appear in the PAOS HEADER: urn:oasis:names:tc:SAML:protocol:ext:channel-binding urn:oasis:names:tc:SAML:2.0:cm:holder-of-key urn:oasis:names:tc:SAML:2.0:profiles:SSO:ecp:2.0:WantAuthnRequestsSigned urn:oasis:names:tc:SAML:2.0:conditions:delegation Of these only the holder-of-key was previously defined in Lasso, this patch adds the other 3 constants. License: MIT Signed-off-by: John Dennis lasso/xml/saml-2.0/saml2_strings.h | 9 +++++++++ lasso/xml/strings.h | 10 ++++++++++ 2 files changed, 19 insertions(+) commit eaabf4c611efa14bb8615ec51169716df967e445 Author: Benjamin Dauvergne Date: Wed Sep 2 10:59:17 2015 +0200 Release 2.5.0 NEWS | 26 ++++++++++++++++++++++++++ configure.ac | 2 +- website/web/doap.rdf | 4 ++++ website/web/download/index.xml | 2 +- website/web/news/23-release-2.5.0.xml | 15 +++++++++++++++ 5 files changed, 47 insertions(+), 2 deletions(-) commit 959ad0eadf6cf68ce7189f3ded16460cfadb34b6 Author: Benjamin Dauvergne Date: Wed Sep 2 16:19:58 2015 +0200 remove errors.c, it breaks computation of version from tags lasso/errors.c | 406 --------------------------------------------------------- 1 file changed, 406 deletions(-) commit 0099e845ec3624bdcd483dfd30fdccec3e3f6e6c Author: Benjamin Dauvergne Date: Wed Sep 2 11:54:50 2015 +0200 java: fix AllJunitTests generation when building out of source directory bindings/java/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 8d4c940ac115424726ef184dbad15f57827f6aa9 Author: Benjamin Dauvergne Date: Tue Sep 1 18:04:46 2015 +0200 Revert "Add messageID and idp_list to profile properties" This reverts commit b10c48058ed5942b135712f46888e0697fb593ff. lasso/id-ff/profile.h | 7 ------- 1 file changed, 7 deletions(-) commit 247b69b1cf4252ce4e5dc4081d60d8d6f7128298 Author: John Dennis Date: Tue Aug 18 13:36:40 2015 -0400 fix test08_lasso_key test failure Note: the rest of this message is formatted as reStructuredText (rst). Test Failure ============ The unit tests run by "make check" fail with the following error: :: tests.c:61:F:Lasso keys:test08_lasso_key:0: No logging output expected: message «ID _E3F8E9116EE08F0E2607CF9789649BB4 already defined » was emitted for domain «Lasso» at the level «128» This is not a regression in Lasso, rather the failure is caused by one of the components Lasso is dependent upon. It was first observed when the identical Lasso package was built in Fedora 22, no problems were observed in Fedora 21. This implies one or more updated components in Fedora 22 is the cause. This was a particularity difficult error to track down, first one had to identify who was emitting the message and on what file descriptor (stream) and who was triggering on the message emission and causing a check failure. The obvious assumption the check library was responsible for detecting the message emission and failing the test is wrong. Who is emitting the message and why? ------------------------------------ The message is emitted by libxml2 in the function `xmlAddID()` (valid.c:2578). It occurs at the end of xmlAddID() when it detects the ID (which is supposed to be unique to the document is already defined, which for valid XML is illegal (violates uniquenesss constraint). The message emission occurs because of the code fragment :: if (xmlHashAddEntry(table, value, ret) < 0) { #ifdef LIBXML_VALID_ENABLED /* * The id is already defined in this DTD. */ xmlErrValidNode(ctxt, attr->parent, XML_DTD_ID_REDEFINED, "ID %s already defined\n", value, NULL, NULL); #endif /* LIBXML_VALID_ENABLED */ xmlFreeID(ret); return(NULL); } Why is the message emission different between libxml2 versions? --------------------------------------------------------------- The change occured between libxml2 version 2.9.1 and 2.9.2 in commit a16eb968075a82ec33b2c1e77db8909a35b44620 :: commit a16eb968075a82ec33b2c1e77db8909a35b44620 Author: Daniel Veillard Date: Tue Jun 10 16:06:14 2014 +0800 erroneously ignores a validation error if no error callback set Reported by Stefan Behnel https://bugzilla.gnome.org/show_bug.cgi?id=724903 diff --git a/valid.c b/valid.c index aedd9d7..1e03a7c 100644 --- a/valid.c +++ b/valid.c @@ -2633,11 +2633,8 @@ xmlAddID(xmlValidCtxtPtr ctxt, xmlDocPtr doc, const xmlChar *value, /* * The id is already defined in this DTD. */ - if ((ctxt != NULL) && (ctxt->error != NULL)) { - xmlErrValidNode(ctxt, attr->parent, XML_DTD_ID_REDEFINED, - "ID %s already defined\n", - value, NULL, NULL); - } + xmlErrValidNode(ctxt, attr->parent, XML_DTD_ID_REDEFINED, + "ID %s already defined\n", value, NULL, NULL); #endif /* LIBXML_VALID_ENABLED */ xmlFreeID(ret); return(NULL); In both versions of libxml2 the conditional complilation LIBXML_VALID_ENABLED is enabled by default via the configure script. What is different is the the requirement ctxt be non-NULL. Lasso invokes xmlAddID with a NULL ctxt parameter. Because the NULL test for ctxt is absent in libxlm2 2.9.2 the message is now emitted where previously it was not. Who triggers on messge emission and fails the test? --------------------------------------------------- This is a Lasso feature, it is not part of libcheck. In tests/tests.c is the following function :: void error_logger(const gchar *log_domain, GLogLevelFlags log_level, const gchar *message, G_GNUC_UNUSED gpointer user_data) { fail("No logging output expected: message «%s» was emitted for domain «%s» at the level" " «%d»", message, log_domain, log_level); } Before the test are run the error_logger function is installed as a glib handler :: g_log_set_default_handler(error_logger, NULL); When the message is emitted the error_logger traps it and invokes the libcheck (deprecated) function fail() which aborts the test case. Why does `test08_lasso_key` cause an XML validation failure? ------------------------------------------------------------ `test08_lasso_key` invokes `lasso_key_saml2_xml_verify()` twice on the same XML document. Any time `lasso_key_saml2_xml_verify()` is called more than once the XML validation will fail on the second and subsequent invocations. This occurs because `lasso_key_saml2_xml_verify()` invokes `lasso_verify_signature()` passing it the node id in the `id_attr_name` parameter. Inside `lasso_verify_signature()` is this code fragment: :: /* Find ID */ if (id_attr_name) { id = xmlGetProp(signed_node, (xmlChar*)id_attr_name); if (id) { xmlAddID(NULL, doc, id, xmlHasProp(signed_node, (xmlChar*)id_attr_name)); } } Note that it unconditionally invokes `xmlAddID()`, which adds the ID to the set of unique element ID's in the document. But if you invoke `xmlAddID()` more than once with the same ID in the same document you violate the uniqueness constraint. The ID needs to be registered in the document because the element of the may utilize an XPointer reference to the signed data. In it's simplest form the XPointer reference is an ID attribute on a node. Thus to locate the signed data referenced by the ID it should (must?) be in a table of ID's for the document. Simple Solution (patch) ----------------------- The solution is simple now that the problem is understood. The ID should not be unconditionally added to the document, instead it should only be added if it's not already registered. Prior to calling `xmlAddID()` one should call `xmlGetID()` and test for a NULL result indicating the ID has not be registered previously. Signed-off-by: John Dennis License: MIT lasso/xml/tools.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 640f96c8c6c5ea313ddeb3235ddaa9823d8d81c4 Author: John Dennis Date: Tue Jul 14 10:20:00 2015 -0400 add support for automake 1.15 Signed-off-by: John Dennis License: MIT autogen.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit 29897506c70c08ef17527df12eee6511311a2bad Author: John Dennis Date: Tue Jun 23 10:31:24 2015 -0400 Fix coverity lasso_get_hmac_key() warning lasso_get_hmac_key() did not check return value. Now check the return code, emit a critical message and return early with cleanup. Signed-off-by: John Dennis License: MIT lasso/xml/tools.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) commit b10c48058ed5942b135712f46888e0697fb593ff Author: John Dennis Date: Thu May 28 13:39:20 2015 -0400 Add messageID and idp_list to profile properties ECP needs a place to store the messageID and idp_list. Normally values like this would located in a "context" passed to the relevant routines. But currently there is no such context, the closest thing to a context we have is the profile so we add them here in the profile private data using accessors. They are currently not relevant outside of ECP. Adds functions: lasso_profile_get_message_id() lasso_profile_set_message_id() lasso_profile_get_idp_list() lasso_profile_set_idp_list() Signed-off-by: John Dennis License: MIT lasso/id-ff/profile.h | 7 +++++++ 1 file changed, 7 insertions(+) commit 262d1dae918a3e48d068c4636517cc876f03c0af Author: Benjamin Dauvergne Date: Mon Aug 24 16:57:49 2015 +0200 configure.ac: move test framework detection after pkg-config detection configure.ac | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) commit 911e3d279b19fcc8a5833c1e43eaebde3484b1bc Author: Benjamin Dauvergne Date: Mon Aug 24 16:36:35 2015 +0200 debian-jessie: add build dependency on pkg-config debian-jessie/control | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 8b17576c90ea04f73c9b728b22992b3fb32f1d7d Merge: 83f6319c dc7374e9 Author: Benjamin Dauvergne Date: Mon Aug 24 16:35:56 2015 +0200 Add 'debian-jessie/' from commit 'dc7374e9f41214557dd45735789a7535d6bbe681' git-subtree-dir: debian-jessie git-subtree-mainline: 83f6319c01ef633fe17625d9ec8d15f1f9dbfc36 git-subtree-split: dc7374e9f41214557dd45735789a7535d6bbe681 commit 83f6319c01ef633fe17625d9ec8d15f1f9dbfc36 Author: Benjamin Dauvergne Date: Mon Aug 24 16:18:33 2015 +0200 bindings/java: fix test script generation bindings/java/Makefile.am | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) commit 964530aacaa272ecf4aad72494b574f4ab3c26c3 Author: John Dennis Date: Fri Jun 5 07:51:38 2015 -0400 add ECP unit test Test ECP. 3 different variations of the SP provided IDP List are exercised. Signed-off-by: John Dennis License: MIT tests/login_tests_saml2.c | 385 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 385 insertions(+) commit 9a2f8d404e659df76ef91ce80e762ccdc2590f2b Author: John Dennis Date: Thu May 28 14:04:32 2015 -0400 Implement PAOS request and response messages Re-implement lasso_profile_saml20_build_paos_request_msg() and lasso_saml20_login_process_paos_response_msg() to use the functionality introduced by earlier patches and to assure they are functionally complete. Signed-off-by: John Dennis License: MIT lasso/saml-2.0/login.c | 68 ++++++++++++++++++++++++++++++++++++++++++++++-- lasso/saml-2.0/profile.c | 37 +++++++++++++++++++++----- 2 files changed, 97 insertions(+), 8 deletions(-) commit 43bcc8cddfca9b325b719e17c033b4ecc40eebd6 Author: John Dennis Date: Thu May 28 13:39:20 2015 -0400 Add messageID and idp_list to profile properties ECP needs a place to store the messageID and idp_list. Normally values like this would located in a "context" passed to the relevant routines. But currently there is no such context, the closest thing to a context we have is the profile so we add them here in the profile private data using accessors. They are currently not relevant outside of ECP. Adds functions: lasso_profile_get_message_id() lasso_profile_set_message_id() lasso_profile_get_idp_list() lasso_profile_set_idp_list() Signed-off-by: John Dennis License: MIT lasso/id-ff/profile.c | 70 ++++++++++++++++++++++++++++++++++++++++++++ lasso/id-ff/profile.h | 7 +++++ lasso/id-ff/profileprivate.h | 2 ++ 3 files changed, 79 insertions(+) commit bdecdc248c337bd53b70a486b326e1d2d4e08d2c Author: John Dennis Date: Thu May 28 13:30:23 2015 -0400 ECP and PAOS special handling ECP does not require an SP to know the remote IdP provider. Existing code made the assumption the remote provider always was necessary. Determination and setting of the remote consumer URL is different in the presence of ECP. Rework the logic to reflect differing requirements. Signed-off-by: John Dennis License: MIT lasso/id-ff/login.c | 17 +++++++-- lasso/saml-2.0/login.c | 30 ++++++++++++---- lasso/saml-2.0/profile.c | 90 ++++++++++++++++++++++++++---------------------- 3 files changed, 87 insertions(+), 50 deletions(-) commit 4544ea9e9d5dc81c856e0f0d3a090882149fe912 Author: John Dennis Date: Thu May 28 12:42:52 2015 -0400 Add function to set protocol conformance Lasso uses an internal private variable bound to the provider to indicate which protocol the provider is servicing. It is vital this value be correctly set because many Lasso routines used it to dispatch to the appropriate protocol handlers. Normally the provider's protocol conformance is set as a side-effect of parsing the XML metadata that describes the provider (e.g. an SP or IdP). However there are some providers (e.g. an ECP client) which do not have metadata. For providers lacking metadata it is essential there be a mechanism to set the protocol conformance otherwise the library will malfunction. The function comes with documentation that includes a clear warning this is to be used only in limited circumstances. Signed-off-by: John Dennis License: MIT docs/reference/lasso/lasso-sections.txt | 1 + lasso/id-ff/provider.c | 26 ++++++++++++++++++++++++++ lasso/id-ff/provider.h | 3 +++ 3 files changed, 30 insertions(+) commit 1c31736dedcf19193347061156cba2e6ff90cd4e Author: John Dennis Date: Thu May 28 12:09:14 2015 -0400 Implement ECP client functionality Implement everything needed to support a SAMLv2 ECP client. Re-implement lasso_ecp_process_authn_request_msg() and lasso_ecp_process_response_msg() to use the Lasso XML serialization subsystem with the ECP and PASO LassoNode's introduced earlier. This replaces one-off explicit direct use of the libxml API with Lasso common code. In the process provide support for 100% of the ECP and PAOS SAMLv2 parameters, not just a subset. Include support for receiving an IDPList from the SP in conjuction with selecting an IdP known to the ECP client. Add extensive documentation. Modify LassoSamlp2AuthnRequest to preserve it's original XML (enable keep_xmlnode flag) so that when serializing the SOAP request the LassoSamlp2AuthnRequest received from the SP is exactly duplicated. Add the following internal static utility functions: is_provider_in_sp_idplist() is_idp_entry_in_entity_id_list() intersect_sp_idplist_with_entity_id_list() Add the following exported utility functions: lasso_ecp_is_provider_in_sp_idplist() lasso_ecp_is_idp_entry_known_idp_supporting_ecp() lasso_ecp_set_known_sp_provided_idp_entries_supporting_ecp() lasso_ecp_has_sp_idplist() lasso_ecp_get_endpoint_url_by_entity_id() lasso_ecp_process_sp_idp_list() Add the following members to the ECP class: message_id response_consumer_url relaystate issuer provider_name is_passive sp_idp_list known_sp_provided_idp_entries_supporting_ecp known_idp_entity_ids_supporting_ecp Signed-off-by: John Dennis License: MIT docs/reference/lasso/lasso-sections.txt | 6 + lasso/saml-2.0/ecp.c | 844 +++++++++++++++++++++++++----- lasso/saml-2.0/ecp.h | 25 +- lasso/saml-2.0/ecpprivate.h | 3 +- lasso/xml/saml-2.0/samlp2_authn_request.c | 1 + 5 files changed, 749 insertions(+), 130 deletions(-) commit 75b0284c8e53307b951da1afb271b5e1ba760037 Author: John Dennis Date: Thu May 28 10:28:24 2015 -0400 Clean up ECP and PAOS XML generation Re-implement lasso_node_export_to_ecp_soap_response() and lasso_node_export_to_paos_request(). Add new function lasso_node_export_to_paos_request_full() with full functionality which deprecates lasso_node_export_to_paos_request(). The existing code had two significant deficiencies, it performed explicit direct xml manipulation using the libxml API rather than calling into Lasso's extensive XML utilities, this was in stark contrast the rest of the Lasso library. It also failed to handle a number of ECP parameters leaving a functionality gap in the API. The new code makes use of the Lasso XML serialization subsystem. Rather than hand crafted xml manipulation we use the ECP and PAOS LassoNode objects introduced in an earlier patch. This is consistent with the rest of Lasso and because those LassoNodes are used elsewhere we have a better guarantee of robustness because the same common code is being called from multiple places. Other Lasso common utilities (some introduced in previous patches) are invoked instead of handcrafted xml manipulation, once again common code is preferred. Finally lasso_node_export_to_paos_request_full() was introduced to expose in the Lasso API all ECP parameters. lasso_node_export_to_paos_request() now trivially calls into lasso_node_export_to_paos_request_full(). Signed-off-by: John Dennis License: MIT docs/reference/lasso/lasso-sections.txt | 1 + lasso/xml/xml.c | 162 ++++++++++++++------------------ lasso/xml/xml.h | 8 ++ 3 files changed, 82 insertions(+), 89 deletions(-) commit 6102c73fd7237964cab3c86fd2804f9cdf798f64 Author: John Dennis Date: Thu May 28 09:35:28 2015 -0400 Server utility returns list of providers supporting endpoint type Add lasso_server_get_filtered_provider_list() utility. Iterate over the server providers and build a list of provider EntityID's who have the specified role and at least one endpoint matching the protocol_type and http_method. Return a GList list of EntityID's Signed-off-by: John Dennis License: MIT docs/reference/lasso/lasso-sections.txt | 1 + lasso/id-ff/server.c | 57 +++++++++++++++++++++++++++++++++ lasso/id-ff/server.h | 4 +++ 3 files changed, 62 insertions(+) commit 237b7424bd596d3ffc9f5b53ea069eee5709cd93 Author: John Dennis Date: Thu May 28 09:26:35 2015 -0400 Add server utility lasso_server_get_endpoint_url_by_id() Locate the provider in the server's list of providers, then select an endpoint given the @endpoint_description and return that endpoint's URL. If the provider cannot be found or if the provider does not have a matching endpoint NULL will be returned. Signed-off-by: John Dennis License: MIT docs/reference/lasso/lasso-sections.txt | 1 + lasso/id-ff/server.c | 28 ++++++++++++++++++++++++++++ lasso/id-ff/server.h | 3 +++ 3 files changed, 32 insertions(+) commit 41d771c62817c42d088e3b5338446d1b19344dd7 Author: John Dennis Date: Thu May 28 08:32:54 2015 -0400 Add ECP and PAOS to prefix_from_href_and_nodename() prefix_from_href_and_nodename() did not know about the ECP and PAOS XML prefixes so add them. Signed-off-by: John Dennis License: MIT lasso/xml/xml.c | 4 ++++ 1 file changed, 4 insertions(+) commit a7a54cabad24e2d4388b633eb7a8166c793960aa Author: John Dennis Date: Thu May 28 08:14:35 2015 -0400 Export LassonNode to SOAP with arbitrary SOAP headers Add function lasso_node_export_to_soap_with_headers() Utility function to build a full SOAP envelope message with arbitrary headers. The LassoNode becomes the body of the SOAP envelope. The headers are passed as a GList of LassoNode's and are added as header elements to the SOAP envelope header. This is a flexible way to build a SOAP envelope that contains headers without constraints on the headers. Signed-off-by: John Dennis License: MIT bindings/overrides.xml | 5 +++ docs/reference/lasso/lasso-sections.txt | 1 + lasso/xml/xml.c | 68 ++++++++++++++++++++++++++++++++- lasso/xml/xml.h | 2 + 4 files changed, 75 insertions(+), 1 deletion(-) commit ad3751f2b02645165a9681907b251abef2884828 Author: John Dennis Date: Wed May 27 12:00:33 2015 -0400 LassoSamlp2IDPList is not list capable LassoSamlp2IDPList is supposed to handle a list of LassoSamlp2IDPEntry but in fact it had no list support. Change the snippet flag SNIPPET_NODE to SNIPPET_LIST_NODES and add the special list comment on the struct member so that the binding generator knows what type of GList it is. Signed-off-by: John Dennis License: MIT lasso/xml/saml-2.0/samlp2_idp_list.c | 2 +- lasso/xml/saml-2.0/samlp2_idp_list.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 9629925c1e67538bf01062ade7d07c01015b1f1c Author: John Dennis Date: Wed May 27 11:09:33 2015 -0400 Add LassoNode objects for ECP and PAOS The SAMLv2 protocol defines 5 XML types which we need to map to LassoNode objectes so thay can be serialized from XML and back into XML. ecp:RelayState ecp:Request ecp:Response paos:Request paso:Response This patch addes these 5 new LassoNode's and updates the build configuration to include them. Signed-off-by: John Dennis License: MIT bindings/bindings.py | 3 +- configure.ac | 1 + docs/reference/lasso/lasso-docs.sgml | 5 + docs/reference/lasso/lasso-sections.txt | 35 +++++ lasso/Makefile.am | 2 + lasso/xml/Makefile.am | 6 +- lasso/xml/ecp/Makefile.am | 21 +++ lasso/xml/ecp/ecp_relaystate.c | 197 ++++++++++++++++++++++++++++ lasso/xml/ecp/ecp_relaystate.h | 69 ++++++++++ lasso/xml/ecp/ecp_request.c | 219 +++++++++++++++++++++++++++++++ lasso/xml/ecp/ecp_request.h | 75 +++++++++++ lasso/xml/ecp/ecp_response.c | 194 ++++++++++++++++++++++++++++ lasso/xml/ecp/ecp_response.h | 69 ++++++++++ lasso/xml/paos_request.c | 221 ++++++++++++++++++++++++++++++++ lasso/xml/paos_request.h | 69 ++++++++++ lasso/xml/paos_response.c | 190 +++++++++++++++++++++++++++ lasso/xml/paos_response.h | 67 ++++++++++ lasso/xml/strings.h | 7 +- 18 files changed, 1443 insertions(+), 7 deletions(-) commit 904e23d7ff6283ece15dc0dffa7a61c03cc66a07 Author: John Dennis Date: Tue May 26 13:13:33 2015 -0400 Enhance process soap response to include processing soap headers The existing lasso_saml20_profile_process_soap_response() assumed there were no SOAP headers (prior to ECP none of the SOAP messages contained headers). A new function lasso_saml20_profile_process_soap_response_with_headers() was implemented that serializes from the XML SOAP headers into a LassoSoapHeader node and optionally will return the LassoSoapHeader node. The functionality in lasso_saml20_profile_process_soap_response() was moved into the new lasso_saml20_profile_process_soap_response_with_headers() and now lasso_saml20_profile_process_soap_response() simply calls lasso_saml20_profile_process_soap_response_with_headers() passing NULL for the header return. Signed-off-by: John Dennis License: MIT lasso/saml-2.0/profile.c | 58 ++++++++++++++++++++++++++++++++++++++++- lasso/saml-2.0/profileprivate.h | 2 ++ 2 files changed, 59 insertions(+), 1 deletion(-) commit a0909e732f3185f341e5e8e8f7ffe74bad3574e2 Author: John Dennis Date: Tue May 26 12:26:56 2015 -0400 Add new LassoSoapEnvelope constructor, lasso_soap_envelope_new_full() The existing LassoSoapEnvelope constructors did not populate the node with it's constituent members, namely a SOAP header (LassoSoapHeader) and a SOAP body (LassoSoapBody). lasso_soap_envelope_new_full() allows one to create a SOAP envelope and immediately begin to add header and body elements. Signed-off-by: John Dennis License: MIT docs/reference/lasso/lasso-sections.txt | 1 + lasso/xml/soap-1.1/soap_envelope.c | 55 +++++++++++++++++++++++++++++++++ lasso/xml/soap-1.1/soap_envelope.h | 2 ++ 3 files changed, 58 insertions(+) commit 27f98071e7be6bf62169fa99c4d3695915243473 Author: John Dennis Date: Tue May 26 11:28:15 2015 -0400 Fix LassoSoapHeader, was unable to serialize from XML. The existing Lasso code never made use of SOAP headers because up until now nothing used them. LassoSoapHeader was unable to serialize from XML into a GList of LassoNode objects because it was missing one of the necessary snippet flags. This corrects this omission and now parsing a SOAP header will yield a sequence of LassoNode's. Signed-off-by: John Dennis License: MIT lasso/xml/soap-1.1/soap_header.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit a3f01cd42cce9c3c616b93e6b8695953f3c0bb73 Author: John Dennis Date: Mon May 25 11:35:08 2015 -0400 Add new error codes and their matching error descriptions Signed-off-by: John Dennis License: MIT lasso/errors.c | 22 +++++++++++++++++++ lasso/errors.h | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 90 insertions(+) commit a6014fc51b2c1723ac65afe1026feff9a8670676 Author: John Dennis Date: Mon May 25 11:19:53 2015 -0400 Add lasso_is_in_list_of_strings macro to utils.h Add macro that tests to see if a string is a member in a list of strings. Signed-off-by: John Dennis License: MIT lasso/utils.h | 5 +++++ 1 file changed, 5 insertions(+) commit f3849b2664bb150d0d3364fbd9e070c049751e62 Author: John Dennis Date: Mon May 25 11:14:39 2015 -0400 Fix build failure, remove inclusion of xml/private.h in utils.h The public utils.h header includes the private xml/private.h file which is not installed. Therefore anyone trying to build against lasso and include utils.h will fail because xml/private.h cannot be found. There doesn't seem to be any need to include this file. Signed-off-by: John Dennis License: MIT lasso/utils.h | 1 - 1 file changed, 1 deletion(-) commit a7f6219f5a7e6f1edc6ba4380676d7a379fe0604 Author: John Dennis Date: Mon May 25 11:07:03 2015 -0400 Eliminate _BSD_SOURCE and _SVID_SOURCE deprecation warning Because all warnings are treated as errors and this warning is emitted: warning "_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE" the build fails. The fix is to define _DEFAULT_SOURCE in lasso/xml/tools.c The effect of defining the _DEFAULT_SOURCE macro is equivalent to the effect of explicitly defining three macros in earlier glibc versions: -D_BSD_SOURCE -D_SVID_SOURCE -D_POSIX_C_SOURCE=200809C Signed-off-by: John Dennis License: MIT lasso/xml/tools.c | 6 ++++++ 1 file changed, 6 insertions(+) commit eb6ed4f85a5bfe0a90137e673089db718001f209 Author: Benjamin Dauvergne Date: Mon Aug 24 14:27:11 2015 +0200 configure.ac: provide fallback for systems where libcheck is not installed with pkg-config bindings/java/Makefile.am | 5 ++++- configure.ac | 6 +++++- 2 files changed, 9 insertions(+), 2 deletions(-) commit 9e5c4389a8abff06b6f2082b4528c086fc59236c Author: Benjamin Dauvergne Date: Mon Aug 24 10:17:55 2015 +0200 Add checks for failure of an allocation function from libxml (#8070) g_malloc always trap on allocation errors but not xmlMalloc. tests/tests.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) commit 9854cd50f374ba8599a4333a692b1265af952da6 Author: Benjamin Dauvergne Date: Mon Aug 24 09:52:41 2015 +0200 xml: handle failure of xmlSecBase64Decode() (fixes #8070) Thanks to fpeters for the patch. lasso/xml/tools.c | 5 ++++ tests/non_regression_tests.c | 21 +++++++++++++++ tests/tests.c | 13 +++++++-- tests/tests.h | 63 ++++++++++++++++++++++++++++---------------- 4 files changed, 78 insertions(+), 24 deletions(-) commit 6e8326293df3a6803eead212160e7cb16819678a Author: Benjamin Dauvergne Date: Wed May 28 09:08:34 2014 +0200 FAQ: add section about getting the issuer before parsing the received message (#4378) FAQ.rst | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) commit 65bc7052357f4f45dfb438cb66807d3392b364f9 Author: Benjamin Dauvergne Date: Mon Mar 31 10:54:27 2014 +0200 profile: add two new class methods, lasso_profile_get_issuer and lasso_profile_get_in_response_to (#4378) The goal of those two methods is to allow IdP and SP to load metadata dynamically without processing completely the incoming. Currently it's impossible as message parsing and signature checking is done in the same function. lasso/id-ff/profile.c | 115 ++++++++++++++++++++++++++++++++++++++++++++ lasso/id-ff/profile.h | 2 + lasso/xml/private.h | 2 + lasso/xml/tools.c | 129 +++++++++++++++++++++++++++++++++++++++++--------- lasso/xml/xml.h | 1 + tests/basic_tests.c | 15 ++++++ tests/data/response-1 | 4 +- 7 files changed, 244 insertions(+), 24 deletions(-) commit 67d0a0349d60dffc6b017aad96577daa2b517684 Author: Benjamin Dauvergne Date: Mon Aug 24 10:24:29 2015 +0200 configure.ac: use pkg-config for libcheck configure.ac | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) commit 39468071222aecf4e95697c832870aecf8e0dd71 Author: Benjamin Dauvergne Date: Mon Aug 24 10:24:27 2015 +0200 saml-2.0/login.c: change default value of WantAuthnRequestSigned (fixes #8105) Specification says it should default to FALSE. We comply. lasso/saml-2.0/login.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) commit c5ec98a0180e157892d929d38ee1de8bde1d30f1 Author: Benjamin Dauvergne Date: Sun Jul 19 19:33:34 2015 +0200 Makefile.am: fix automake warning It fixes this warning: warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS') it seems INCLUDES is not to be used anymore. bindings/java/Makefile.am | 2 +- bindings/perl/Makefile.am | 2 +- bindings/php5/Makefile.am | 2 +- bindings/python/Makefile.am | 2 +- lasso/Makefile.am | 4 ++-- lasso/id-ff/Makefile.am | 2 +- lasso/id-wsf-2.0/Makefile.am | 2 +- lasso/id-wsf/Makefile.am | 2 +- lasso/saml-2.0/Makefile.am | 2 +- lasso/xml/Makefile.am | 2 +- lasso/xml/dsig/Makefile.am | 2 +- lasso/xml/id-wsf-2.0/Makefile.am | 2 +- lasso/xml/saml-2.0/Makefile.am | 2 +- lasso/xml/soap-1.1/Makefile.am | 2 +- lasso/xml/ws/Makefile.am | 2 +- tests/Makefile.am | 2 +- 16 files changed, 17 insertions(+), 17 deletions(-) commit 34ee3446e8aa24f8c6dbb376a70b5c8aa9294412 Merge: 80a2e0ea 33d67ddd Author: Benjamin Dauvergne Date: Fri Apr 3 10:01:56 2015 +0200 Add 'debian-squeeze/' from commit '33d67ddd1352a2db97d252c7d18f7806ec91e616' git-subtree-dir: debian-squeeze git-subtree-mainline: 80a2e0ea4763d3f0bc611ab98c8e207b6a82c099 git-subtree-split: 33d67ddd1352a2db97d252c7d18f7806ec91e616 commit 80a2e0ea4763d3f0bc611ab98c8e207b6a82c099 Merge: 9f99176b 0001ab9a Author: Benjamin Dauvergne Date: Fri Apr 3 10:01:19 2015 +0200 Add 'debian-wheezy/' from commit '0001ab9af1e3a7e19000a65b75ebc3c42f76a739' git-subtree-dir: debian-wheezy git-subtree-mainline: 9f99176b3c8dd2d7c9a6ebf9c619d9c7fea2b64b git-subtree-split: 0001ab9af1e3a7e19000a65b75ebc3c42f76a739 commit 9f99176b3c8dd2d7c9a6ebf9c619d9c7fea2b64b Author: Benjamin Dauvergne Date: Thu Mar 26 19:34:28 2015 +0100 SAML-2.0: rework on commit 05fe802b8d, improve handling of ProtocolBinding and AssertionConsumerServiceURL When the same URL was used for many bindings, the current code did not work. Now we use lasso_saml20_provider_check_assertion_consumer_service_url() to validate url and binding are matching, if no binding is suggested we take the first one defined for this URL. Using AssertionConsumerServiceIndex and any of the other assertion consumer designator attributes is still forbidden. lasso/saml-2.0/login.c | 39 +++++++++++++++++++-------------------- tests/data/sp5-saml2/metadata.xml | 6 ++++++ tests/login_tests_saml2.c | 24 ++++++++++++++++++++++++ 3 files changed, 49 insertions(+), 20 deletions(-) commit bbcee8a4801905bec8469fb0f5def44456a7ad20 Author: John Dennis Date: Sat Mar 21 10:57:26 2015 -0400 Fix build failures Fix a mistake in the documentation markup that prevented the doc from building, needed to reverse the order of two tags. Remove the $(PYTHON) from TESTS_ENVIRONMENT, it was causing python to be invoked passing /bin/sh to it as a script. License: MIT Signed-off-by: John Dennis bindings/python/tests/Makefile.am | 2 +- lasso/id-ff/server.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit ec73384ccf704096daf9b9151e5c5389e047ec96 Author: John Dennis Date: Tue Mar 10 17:52:52 2015 -0400 Add Destination attribute for SAML ECP Response The Destination attribute on SAML Response element was not being set when handling an ECP response. It is a requirement of SAML 2.0 that signed values contain a Destination attribute on the root element otherwise the client will reject the response. This is documented in the SAML Bindings Specification, Section 3.4.5.2 "Security Considerations": If the message is signed, the Destination XML attribute in the root SAML element of the protocol message MUST contain the URL to which the sender has instructed the user agent to deliver the message. The recipient MUST then verify that the value matches the location at which the message has been received. Normally on login one calls lasso_saml20_login_build_authn_response_msg() which then calls lasso_saml20_profile_build_response_msg() which sets the Destination attribute on the SAML Response. But when doing ECP you do not call lasso_saml20_login_build_authn_response_msg(), instead you call call lasso_saml20_login_build_response_msg() and if it's ECP it then calls lasso_node_export_to_ecp_soap_response(). Thus the ECP response never gets the Destination attribute set because of the different code path, plus for ECP the destination is different, it's the assertion consumer service. FWIW this line of code was copied almost verbatim from lasso_saml20_profile_build_response_msg which also sets the Destination attribute. License: MIT Signed-off-by: John Dennis lasso/saml-2.0/login.c | 4 ++++ 1 file changed, 4 insertions(+) commit dc7374e9f41214557dd45735789a7535d6bbe681 Author: Jérôme Schneider Date: Thu Feb 26 10:29:53 2015 +0100 php5-lasso.prerm: s/phpdismod/php5dismod/ php5-lasso.prerm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit e42b1dd7fc9ccc402ce3ec005609703bb86feefa Author: Jérôme Schneider Date: Thu Feb 26 10:24:18 2015 +0100 Merge with lasso in Jessie, re-activate java and gen-default-control.sh control | 14 +++++++ control.in | 98 ++++++++++++++++++++++++++++++++++++++++++++++++ gen-default-control.sh | 13 +++++++ liblasso-java.dirs | 1 + liblasso-java.install | 2 + liblasso-perl.install.in | 3 +- rules | 51 ++++++++++++++++++++----- 7 files changed, 170 insertions(+), 12 deletions(-) commit 2f8ed5a0b0cc53c49a368fee7062177a95b95762 Author: Jérôme Schneider Date: Thu Feb 26 09:13:03 2015 +0100 control: build depends on dh-python control | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 0001ab9af1e3a7e19000a65b75ebc3c42f76a739 Author: Jérôme Schneider Date: Wed Feb 25 19:58:57 2015 +0100 python-lasso.install: just install python 2 files python-lasso.install | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 5b21d1594d133e2ab57e3bed93f453c37020546a Author: Jérôme Schneider Date: Wed Feb 25 19:48:39 2015 +0100 python-lasso.install: python-lasso is for python2 only python-lasso.install | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit e5fb1e97a7897b38f01ea61e13284013f16e5cd2 Author: Jérôme Schneider Date: Wed Feb 25 19:27:59 2015 +0100 liblasso-perl.install.in: fixes path liblasso-perl.install.in | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 9e07e618fb34e4437e918aaefabacd8f3ee53d96 Author: Jérôme Schneider Date: Wed Feb 25 19:13:23 2015 +0100 rules: cleanning clean target rules | 6 ------ 1 file changed, 6 deletions(-) commit 15fd447eabc06b2063932835ce051cdf82fdccc5 Author: Jérôme Schneider Date: Wed Feb 25 19:11:38 2015 +0100 perl; fix build for Jessie liblasso-perl.install | 3 --- liblasso-perl.install.in | 2 ++ rules | 6 +++++- 3 files changed, 7 insertions(+), 4 deletions(-) commit 2f90b99650b16ec9d2b2e0694a81c03431c7ed1a Author: Jérôme Schneider Date: Wed Feb 25 18:17:28 2015 +0100 remove java support control.in | 97 --------------------------------------------------- liblasso-java.dirs | 1 - liblasso-java.install | 2 -- rules | 33 +----------------- 4 files changed, 1 insertion(+), 132 deletions(-) commit c54dbab12b8090361084e3eeac502812bd7d5319 Author: Jérôme Schneider Date: Wed Feb 25 18:00:46 2015 +0100 control: update build-dependencies for python3 control | 2 +- control.in | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 28faf9b25e5314a76aee268f84ed8390b202f6d7 Author: Jérôme Schneider Date: Wed Feb 25 17:57:47 2015 +0100 debian/control: like control.in, control must be updated control | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) commit 945fb5b2074fcc48de66a3713d0bd4d66c9a6282 Author: EO builder bot Date: Wed Feb 25 16:35:19 2015 +0100 debian: add python3 support control.in | 17 +++++++++++++++-- python3-lasso.install | 2 ++ rules | 23 +++++++++++++++++++---- 3 files changed, 36 insertions(+), 6 deletions(-) commit 2c5034d24002ce9c039ec0d6656cfab2b3baf03d Author: Benjamin Dauvergne Date: Fri Feb 13 14:37:57 2015 +0100 Re-add control for eobuilder control | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) commit f817e39e3ec05e1ef368e3b413c2210498ec1845 Author: Benjamin Dauvergne Date: Fri Feb 13 14:11:09 2015 +0100 Remove control and add python-six to control.in control | 72 -------------------------------------------------------------- control.in | 2 +- 2 files changed, 1 insertion(+), 73 deletions(-) commit 5dd34825c398ac6ebb83aecc08b84ad32b1c7131 Author: Benjamin Dauvergne Date: Fri Feb 13 10:29:38 2015 +0100 Revert "Remove control.in" This reverts commit 176e0716f8f8593860e0603697db5dec5675f5b3. control.in | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) commit 47fa21b757c5a9956baf67fff4a4620fbd2ae204 Author: Benjamin Dauvergne Date: Thu Feb 12 23:04:01 2015 +0100 Remove control.in control.in | 84 -------------------------------------------------------------- 1 file changed, 84 deletions(-) commit ae55fc9a98ff11360311081492c70ea9975893ea Author: Benjamin Dauvergne Date: Thu Feb 12 22:37:52 2015 +0100 Add dependency on python-six control | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 236410bf915f09003db735964fdbf7bccb518a99 Author: Benjamin Dauvergne Date: Thu Feb 12 19:21:01 2015 +0100 Update AUHTORS file AUTHORS | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) commit 5730f2aa65da86bae0408e4d2a3f6e6b22ca72a6 Author: Benjamin Dauvergne Date: Thu Feb 12 19:19:44 2015 +0100 Port Java binding generator to Python 3 bindings/java/lang.py | 499 +++++++++++++++++++++++++------------------------- 1 file changed, 250 insertions(+), 249 deletions(-) commit cf9ae3872dd9933cc94a30dc15c7e83d3b30eb85 Author: Benjamin Dauvergne Date: Thu Feb 12 19:19:24 2015 +0100 Port Perl binding generator to Python 3 bindings/perl/lang.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) commit b73f8f3ce521361835c1dfbbb1d2de09ed513729 Author: Benjamin Dauvergne Date: Wed Dec 3 02:02:31 2014 +0100 Port PHP5 binding generator to Python 3 bindings/php5/lang.py | 6 +- bindings/php5/php_code.py | 185 ++++++++++++------------ bindings/php5/wrapper_header.py | 13 +- bindings/php5/wrapper_source.py | 301 ++++++++++++++++++++-------------------- 4 files changed, 254 insertions(+), 251 deletions(-) commit a231eaff33d784b19f416f855f112c1fd0fd2b1d Author: Benjamin Dauvergne Date: Wed Dec 3 01:22:44 2014 +0100 Make python generator scripts and tests run with python >= 3.2 bindings/python/lang.py | 15 +++++--- bindings/python/tests/Makefile.am | 2 +- bindings/python/tests/binding_tests.py | 4 +-- bindings/python/tests/profiles_tests.py | 14 ++++---- bindings/python/wrapper_bottom.c | 3 +- bindings/python/wrapper_top.c | 64 +++++++++++++++++++++++++++++---- lasso/extract_symbols.py | 5 +-- lasso/extract_types.py | 26 +++++++------- 8 files changed, 95 insertions(+), 38 deletions(-) commit 8938f8722022aa4d3e514b62b4af94886a31bb88 Author: Houzéfa Abbasbhay Date: Tue Dec 2 16:31:29 2014 +0100 Python 3: Fix the pygobject init macro and restore it bindings/python/wrapper_bottom.c | 6 ------ bindings/python/wrapper_top.c | 3 +-- 2 files changed, 1 insertion(+), 8 deletions(-) commit efc5429cfc8f8ee1ecc95ef9bf757b4168661bc8 Author: Houzéfa Abbasbhay Date: Tue Dec 2 16:31:04 2014 +0100 Python 3: Fix a string conversion helper bindings/python/lang.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit e325164c8a4171627841559a566029d2d9507d38 Author: Houzéfa Abbasbhay Date: Mon Dec 1 17:04:25 2014 +0100 Python 3: Oops (see rev 279959f) bindings/python/wrapper_bottom.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 4c79280ed8f68f3ec6f92741a93266dea49a5b97 Author: Houzéfa Abbasbhay Date: Mon Dec 1 16:53:07 2014 +0100 Python 3: Fix Python 2 support (use six.print_) INSTALL | 4 + bindings/bindings.py | 11 +- bindings/python/lang.py | 411 ++++++++++++++++++++++++------------------------ 3 files changed, 216 insertions(+), 210 deletions(-) commit 32a4049cdcd4ae428c23ba6732a2080744d25dfb Author: Houzéfa Abbasbhay Date: Mon Dec 1 15:12:16 2014 +0100 Mention Python 3 support in the changelog ChangeLog | 4 ++++ 1 file changed, 4 insertions(+) commit 87efa7ee5588f5d8474ed62366118ab5c9adc5a4 Author: Houzéfa Abbasbhay Date: Mon Dec 1 15:05:44 2014 +0100 Python 3: Disable "PyGObjectPtrType" to avoid crashes (needs investigation) bindings/python/wrapper_bottom.c | 6 ++++++ 1 file changed, 6 insertions(+) commit 70b9d765bcbc20d4e570a23e0ab99efa493c4afb Author: Houzéfa Abbasbhay Date: Mon Dec 1 15:05:04 2014 +0100 Python 3: Fix a string function bindings/python/wrapper_top.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit a4b1749c3ca7baafbf188539d8b96f1cd131a968 Author: Houzéfa Abbasbhay Date: Mon Dec 1 12:54:01 2014 +0100 Python 3: Fix module init bindings/python/wrapper_bottom.c | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) commit e4ebeefab3791ebf665710fd5fbf3aa1313bc118 Author: Houzéfa Abbasbhay Date: Mon Dec 1 12:25:32 2014 +0100 Python 3: PyObject_HEAD_INIT(NULL) -> PyVarObject_HEAD_INIT(NULL, 0) (to play better with C strict aliasing rules - see PEP 3123) bindings/python/wrapper_top.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 25d2cec7abc4ee8be391dd13dd7fcd623e81408f Author: Houzéfa Abbasbhay Date: Mon Dec 1 12:21:05 2014 +0100 Python 3: Defs for int & string related functions bindings/python/wrapper_top.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) commit e5d5acf9df8d5b3cbabaa29d82ed025336fef900 Author: Houzéfa Abbasbhay Date: Mon Dec 1 11:46:21 2014 +0100 Python 3: - file(...) -> open(...) - print ... -> print(...) - print >> fd, ... -> print(..., file=fd) - basestring -> str - map(...) -> list(map(...)) bindings/bindings.py | 24 +-- bindings/python/lang.py | 462 ++++++++++++++++++++++++------------------------ bindings/utils.py | 14 +- 3 files changed, 250 insertions(+), 250 deletions(-) commit e315898e24795d9bd2df98f8930bce5635224e13 Author: Houzéfa Abbasbhay Date: Mon Dec 1 11:10:18 2014 +0100 Python 3: PyObject.ob_type is deeper in the structure; use the Py_TYPE macro instead bindings/python/wrapper_top.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 9137e8196697e990f426664a49028c38579d8aec Author: Houzéfa Abbasbhay Date: Mon Dec 1 11:02:35 2014 +0100 Python 3: Fix print calls in configure.ac configure.ac | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit aebd959589855acf1cbaa3960f70aedda11cb0ce Author: Houzéfa Abbasbhay Date: Mon Dec 1 11:02:11 2014 +0100 Ignore some Perl binding files .gitignore | 2 ++ 1 file changed, 2 insertions(+) commit 352ad0118f4bce37f8a28bc56050b780f27c044c Author: Houzéfa Abbasbhay Date: Mon Dec 1 10:57:15 2014 +0100 Ignore /test-driver .gitignore | 1 + 1 file changed, 1 insertion(+) commit 05fe802b8da581ea07f766698eab8a720e3b0a14 Author: Benjamin Dauvergne Date: Thu Feb 12 16:35:41 2015 +0100 SAML-2.0: Rework protocol profile selection when parsing AuthnRequest messages This commit also add tests around authn request parsing. lasso/saml-2.0/login.c | 74 ++++++++++++++++++++------------ tests/login_tests_saml2.c | 106 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 153 insertions(+), 27 deletions(-) commit 3e597eedb9209c844eaefb3a38ec63a8f07d9e18 Author: Benjamin Dauvergne Date: Mon Feb 9 18:53:02 2015 +0100 Add support for SHA-2 family of hash functions for RSA and HMAC signatures lasso/id-ff/server.c | 25 ++++- lasso/xml/private.h | 6 ++ lasso/xml/tools.c | 296 +++++++++++++++++++++++++++++++++++++++++++++------ lasso/xml/xml.h | 6 ++ 4 files changed, 302 insertions(+), 31 deletions(-) commit 4436c0d4e434f46b3428207bc6a4dd37529cd278 Author: Benjamin Dauvergne Date: Wed Jan 21 15:04:00 2015 +0100 Check return value of lasso_session_add_assertion() in lasso_login_build_assertion() lasso/id-ff/login.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit f46bc41cd7d5632eac409c7c136db5d8d6d706f4 Author: Benjamin Dauvergne Date: Wed Jan 21 15:03:09 2015 +0100 Remove _POSIX_SOURCE declaration as it's not needed lasso/saml-2.0/provider.c | 2 -- 1 file changed, 2 deletions(-) commit f9e3d85bf6914de465262926fc0e32b1ddeef692 Author: Simo Sorce Date: Mon Dec 8 17:41:38 2014 -0500 Fix coverity issue about unchecked return If find_path() does not find MinorVersion, then no value is changed and we repeate the search with the values for thr major version. Check if we have found anything and if not set the minor version to 0. License: MIT Signed-off-by: Simo Sorce lasso/xml/xml.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) commit e54e7d3474c8b447830c91b2037eab1c42ef755d Author: Benjamin Dauvergne Date: Fri Oct 17 23:02:12 2014 +0200 Improve top level commint in CGI script example examples/sp-cgi/main.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 3a7173ad3be58f6518eda5abb3a754012b2cb1b4 Author: Benjamin Dauvergne Date: Fri Oct 17 22:54:10 2014 +0200 Add simple example of a CGI service provider script written in C examples/sp-cgi/README | 26 +++ examples/sp-cgi/cert.pem | 21 ++ examples/sp-cgi/key.pem | 27 +++ examples/sp-cgi/main.c | 526 ++++++++++++++++++++++++++++++++++++++++++++ examples/sp-cgi/openidp.xml | 27 +++ examples/sp-cgi/test.cgi | 2 + 6 files changed, 629 insertions(+) commit 64f291c3f378a1e8b47f82d7a0f501c702160c0a Author: Benjamin Dauvergne Date: Thu Oct 2 21:23:56 2014 +0200 Remove dead code in the PHP5 binding bindings/php5/wrapper_source_top.c | 10 ---------- 1 file changed, 10 deletions(-) commit 4ad4b673940ef72de1a62d7589cd0d86290086b1 Author: Benjamin Dauvergne Date: Sat Jun 7 14:09:58 2014 +0200 xml: modify xschema snippets to handle xsd:choice constructs lasso/xml/saml-2.0/saml2_advice.c | 6 +++--- lasso/xml/saml-2.0/saml2_assertion.c | 6 +++--- lasso/xml/saml-2.0/saml2_attribute_statement.c | 2 +- lasso/xml/saml-2.0/saml2_authn_context.c | 10 +++++++--- lasso/xml/saml-2.0/saml2_conditions.c | 6 +++--- lasso/xml/saml-2.0/saml2_evidence.c | 16 +++++++++++++--- lasso/xml/saml-2.0/saml2_subject.c | 8 +++++--- lasso/xml/saml-2.0/saml2_subject_confirmation.c | 4 ++-- lasso/xml/saml-2.0/samlp2_logout_request.c | 4 ++-- lasso/xml/saml-2.0/samlp2_manage_name_id_request.c | 6 +++--- lasso/xml/saml-2.0/samlp2_name_id_mapping_request.c | 4 ++-- lasso/xml/saml-2.0/samlp2_name_id_mapping_response.c | 2 +- lasso/xml/saml-2.0/samlp2_requested_authn_context.c | 10 ++++++++-- lasso/xml/saml-2.0/samlp2_response.c | 5 +++-- lasso/xml/saml_advice.c | 2 +- lasso/xml/saml_assertion.c | 4 ++-- lasso/xml/saml_subject.c | 2 +- 17 files changed, 60 insertions(+), 37 deletions(-) commit a27d1686b387a045607b5f0802001ea8863342cb Author: Benjamin Dauvergne Date: Sat Jun 7 09:29:58 2014 +0200 xml: support xsd:choices by allowing to rewind or advance after match or miss of a snippet lasso/xml/private.h | 26 ++++++++++++++++++++++++- lasso/xml/xml.c | 56 +++++++++++++++++++++++++++++++++++++++-------------- 2 files changed, 66 insertions(+), 16 deletions(-) commit fda8ae9f8512d789c2e043f562f300c3400706ff Author: Simo Sorce Date: Thu Jul 31 13:53:28 2014 -0400 Fix header guard Found by clang License: MIT Signed-off-by: Simo Sorce lasso/debug.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 3bd2c479a036f41c50d38f639928b58463cc3bbb Author: Simo Sorce Date: Thu Jul 31 13:42:10 2014 -0400 Assert on missing id In this function id is required, so just assert if it is missing. This also silences a warning about "reference" being used unintialized if "id" is null. License: MIT Signed-off-by: Simo Sorce lasso/xml/tools.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) commit 23d961fe71652b59186368bf1458cf563a5ef646 Author: Simo Sorce Date: Thu Jul 31 13:36:03 2014 -0400 Missing variable initialization If name_id s unconditonally dereferenced in the cleanup code. If it is not initialized it may cause segfaults or other misbehaviors. License: MIT Signed-off-by: Simo Sorce lasso/id-ff/session.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit c4989dacfa9824271300794dd75572801c5d858a Author: Benjamin Dauvergne Date: Thu Aug 28 17:20:18 2014 +0200 Fix release date of 2.4.1 NEWS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit d95a7afcb6787c79b6d47265ab71fbfacc624f82 Author: Benjamin Dauvergne Date: Thu Aug 28 16:01:37 2014 +0200 Release 2.4.1 ChangeLog | 42781 +++++++++----------------------- NEWS | 12 +- configure.ac | 2 +- website/web/doap.rdf | 8 + website/web/download/index.xml | 2 +- website/web/news/22-release-2.4.1.xml | 15 + 6 files changed, 11886 insertions(+), 30934 deletions(-) commit 8484e7a065835daa94ac680445c9628afb01afa7 Author: Benjamin Dauvergne Date: Thu Aug 28 15:56:04 2014 +0200 Add tool gitlog-to-changelog tools/gitlog-to-changelog | 433 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 433 insertions(+) commit cad7b33c733e9b34b1bf930d6cfa7e3d7ed017eb Author: Frédéric Péters Date: Mon Aug 11 09:03:57 2014 +0200 saml-2.0: set NotOnOrAfter on the Conditions element (#5248) This is actually required for interoperability with Dropbox SAML support. lasso/saml-2.0/login.c | 1 + 1 file changed, 1 insertion(+) commit fd10b952a878c0d63c5dc639c688e21bbbae345f Author: Benjamin Dauvergne Date: Tue Aug 12 10:10:40 2014 +0200 doc: add lasso_server_add_provider2 and lasso_server_load_metadata docs/reference/lasso/lasso-sections.txt | 2 ++ 1 file changed, 2 insertions(+) commit 8b396a04a3e82f17560bfb19b0e073a963422d88 Author: Frédéric Péters Date: Mon Aug 11 10:32:29 2014 +0200 debian: don't move perl files liblasso-perl.install | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 20cc7fea79be4dc0a23e22dad7eb67b95f08c4ed Author: Frédéric Péters Date: Mon Aug 11 10:11:27 2014 +0200 debian: accomodate perl now installing in the right directory liblasso-perl.install | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit d297c88224b799711b5e5da4cf5545b6735d7654 Author: Frédéric Péters Date: Mon Aug 11 09:55:42 2014 +0200 perl: keep on using PREFIX, required for distcheck bindings/perl/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 9b99eaee8a9a74d8b422e0b02ebe783d347f3dc1 Author: Frédéric Péters Date: Mon Aug 11 09:41:36 2014 +0200 reformat gtk-doc function comment to work with gtk-doc 1.21 lasso/id-ff/login.c | 6 ++++-- lasso/id-wsf-2.0/profile.c | 3 ++- 2 files changed, 6 insertions(+), 3 deletions(-) commit ced1f047c2ad15389801536dbd7886116a91e543 Author: Simon Josefsson Date: Thu Mar 15 11:53:51 2012 +0100 fix pkg-config typo. docs/lasso-book/writing-a-c-sp.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit f53c1aaaacb67745a7bddfc1156f774bb41c317a Author: Niko Tyni Date: Tue Jun 24 23:15:29 2014 +0300 Use INSTALLDIRS=vendor for the Perl bindings, as per the Debian Perl policy Debian packaged Perl modules should be installed into the vendor directories (currently /usr/lib/perl5 and /usr/share/perl5), but the upstream default puts the into the 'site' ones (modified with the PREFIX setting.) Explicitly using INSTALLDIRS=vendor simplifies the install rules and removes the need for PREFIX, which has been deprecated in ExtUtils::MakeMaker for a long time. bindings/perl/Makefile.am | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 875f40832b7fe58c9ce2f0ae4a0d368f4c5d32ae Author: Benjamin Dauvergne Date: Wed Jul 30 17:17:08 2014 +0200 Restore not-unused code Clang was wrong on one instance, a value must be initialized to its NULL state before using any lasso_assign_ macro with it. Bug introduced in 4789e8d4d68eb. lasso/saml-2.0/profile.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit d911a2092f618bb4099925667dd656e0e7bfa0bd Author: Simo Sorce Date: Wed Jun 11 21:13:58 2014 -0400 One more uninitialized value encode_key may be release when not initialized if va_args returns null on the first while loop. License: MIT Signed-off-by: Simo Sorce lasso/xml/tools.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 99376a3c882e222abba92669611149a3d3651d67 Author: Simo Sorce Date: Tue Jun 10 15:31:46 2014 -0400 Fix potential null dereference errors Ina number of cases function inputs are not checked for NULL although values may end up with a NULL value and then they are dereferenced directly. Check values in the function (or the caller) if appropriate. License: MIT Signed-off-by: Simo Sorce lasso/id-ff/provider.c | 1 + lasso/saml-2.0/profile.c | 3 +++ 2 files changed, 4 insertions(+) commit 1b955021a57ab14e930df22f538be0e582cbec1c Author: Simo Sorce Date: Mon Jun 9 15:29:24 2014 -0400 Do not dereference null pointers Sounds like these should all be boolean 'OR's, otherwise, if profile is not in fact a lasso profile then profile->private_data will be dereferenced even if it is NULL. Found by Clang License: MIT Signed-off-by: Simo Sorce lasso/id-ff/profile.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit cb7ea06ca587e8db2d67345ff5245981f143ed3a Author: Simo Sorce Date: Mon Jun 9 14:09:20 2014 -0400 Rearrange case checking to avoid compiler warnings The compiler was complaining that 'compa' could be uninitialized. USe this occasion to make the code simpler to understand and assign actually meaningful values to the variable, even though the proper actions are not implemented yet. License: MIT Signed-off-by: Simo Sorce lasso/id-ff/login.c | 24 +++++++++++++++--------- lasso/saml-2.0/login.c | 30 ++++++++++++++++++------------ 2 files changed, 33 insertions(+), 21 deletions(-) commit 86bfc84ba1a424cd62cf2f59011a56aa632496c8 Author: Simo Sorce Date: Mon Jun 9 14:00:34 2014 -0400 Properly exit on error The rc error was being set but then it was being ignored. Get out immediately if an Issuer can't be found. License: MIT Signed-off-by: Simo Sorce lasso/saml-2.0/login.c | 1 + 1 file changed, 1 insertion(+) commit f91f4b4b8f31700858d6069a7b10afa5054f27de Author: Simo Sorce Date: Mon Jun 9 13:50:10 2014 -0400 Consistently check dsig_reference_ctx Check if this is not NULL in all cases, to avoid NULL pointer dereference. Found by clang License: MIT Signed-off-by: Simo Sorce lasso/xml/tools.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 4789e8d4d68eb4134292e7fa6d6425db91b501f8 Author: Simo Sorce Date: Mon Jun 9 13:42:19 2014 -0400 Trim unused code Clang complains these values are never used, avoid even assigning them. License: MIT Signed-off-by: Simo Sorce lasso/id-ff/provider.c | 2 +- lasso/saml-2.0/login.c | 2 -- lasso/saml-2.0/profile.c | 2 +- lasso/xml/xml.c | 3 +-- 4 files changed, 3 insertions(+), 6 deletions(-) commit b6b458e000ebb3e441000e002598782ce31111a6 Author: Simo Sorce Date: Mon Jun 9 13:25:09 2014 -0400 Trim dead code These conditions can never be reached as the list is filtered with and and to the value of 0xff, so just drop them, they are misleading. (Also silences checkers which were screaming of deadcode, for each and every unmatchable value ...) License: MIT Signed-off-by: Simo Sorce lasso/xml/xml.c | 10 ---------- 1 file changed, 10 deletions(-) commit be02981ff1f3f3829b38dc14b028c7de55dfda77 Author: Simo Sorce Date: Mon Jun 9 13:04:47 2014 -0400 Fix confusing loop test Coverity was marking the check for tsnippet after the while loop, confused by the check. Make it more readable, and in the process make checkers happy too. License: MIT Signed-off-by: Simo Sorce lasso/xml/xml.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) commit 1f97a06a01de7f901045be297a8244614191e552 Author: Simo Sorce Date: Mon Jun 9 12:52:20 2014 -0400 Fix some uninitialized value The compiler complain about these values not being initialized. come of them do not really matter as they are only really used when later initialized in the code and the code paths would not use them if not initialized in a previous block, however some of these seem real issues. In all cases make the compiler happy so we get less noise in the build and less false positives in code chckers. License: MIT Signed-off-by: Simo Sorce lasso/id-ff/provider.c | 2 +- lasso/saml-2.0/login.c | 2 +- lasso/xml/tools.c | 2 +- lasso/xml/xml.c | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) commit 80757431b36566655ca2e494a4765ffd32027efb Author: Simo Sorce Date: Mon Jun 9 12:44:48 2014 -0400 Missing check for Sig_Alg value Initialize the sig_alg value to NULL (The compilers was complaining it may be used initialized), but also make sure to check the re is any sig_alg at all, otherwise return a proper error. License: MIT Signed-off-by: Simo Sorce lasso/xml/tools.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit 899f5c8880b36fe6a4a27940ea92cf2361899133 Author: Simo Sorce Date: Mon Jun 9 12:34:20 2014 -0400 Fix boundary check Coverity was marking this as an array overun as the check would never be possible and wuld allow any value for query_request_type, including "unset" wihch is 0. fix the boundary checks. License: MIT Signed-off-by: Simo Sorce lasso/saml-2.0/assertion_query.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 661f81014e38ea4897c2ad5f340a45eb2dbef476 Author: Simo Sorce Date: Mon Jun 9 11:08:58 2014 -0400 Fix uninitialized values found by Coverity These values where being used without being initialized at least in some edge cases. Make Coverity happy by properly initializing them. Some of these are real bugs, not just silencing a tool. License: MIT Signed-off-by: Simo Sorce lasso/saml-2.0/provider.c | 4 ++-- lasso/xml/tools.c | 2 +- lasso/xml/xml.c | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) commit 86328f293700ae0fefd28647701905cfdd6aa51f Author: Simo Sorce Date: Mon Jun 9 11:04:44 2014 -0400 Fix format check for date Coverity was complaining that tm was used uninitialized, but the truth is that a third error condition where the string passed in matches no valid format was not handled. Just return an error in that case. License: MIT Signed-off-by: Simo Sorce lasso/xml/tools.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 0238e8a9869a3a11248b2c56108b2ba73c82b9ee Author: Simo Sorce Date: Sun Jun 8 14:51:29 2014 -0400 Fix error checking in xml.c Coverity was complaining that 'integer' was being used without initialization (from the caller). Turns out it was erroneously used to test the result instead of the just sourced 'what'. License: MIT Signed-off-by: Simo Sorce lasso/xml/xml.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 5aa184b6b4e6608851ebf4a2fefeecafb5640486 Author: Simo Sorce Date: Sun Jun 8 14:43:04 2014 -0400 Fixes for unchecked return values Coverity complains that in a number of places errors are not checked. Some of them are ok not to check so put a silencing (void). Check errors that need to be checked. Coverity also complains g_malloc() return is never checked but given it is never checked anywahere let it be for now. License: MIT Signed-off-by: Simo Sorce lasso/saml-2.0/login.c | 6 +++++- lasso/xml/xml.c | 3 +++ 2 files changed, 8 insertions(+), 1 deletion(-) commit b6a3ec78a0f6b8b5fda9dcee969785745376bc77 Author: Simo Sorce Date: Fri Jun 6 17:54:32 2014 -0400 Be correct in dealing with varargs Although in this cases it may be safe to omit va_end() that is not generally so with an arbitrary compiler on an arbitrary platform. Quoting from the spec: "Each invocation of va_start() must be matched by a corresponding invocation of va_end() in the same function." note the "must" Checker tools like Coverity complain if va_start() is not always paired with va_end(), so this patch mutes them. License: MIT Signed-off-by: Simo Sorce lasso/xml/tools.c | 2 ++ 1 file changed, 2 insertions(+) commit 82fd1bcd38957ed4a12eb867885ae3787b28144d Author: Benjamin Dauvergne Date: Sun Jun 8 12:50:26 2014 +0200 bindings/python/tests: session indexes storage preserves order now bindings/python/tests/profiles_tests.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit cabe31f5fceeaa37dd226619092b2e0e1a5620f1 Author: Benjamin Dauvergne Date: Sun Jun 8 12:13:49 2014 +0200 tests: add target to Makefile to produce valgrind suppression entries tests/Makefile.am | 5 +++++ 1 file changed, 5 insertions(+) commit d6ec62784466c6d9a9e658e66fe521a74264478d Author: Benjamin Dauvergne Date: Sun Jun 8 12:12:09 2014 +0200 tests/valgrind: add suppression of all leaks related to initialisation of the GLib type system tests/valgrind/glib.supp | 6 ++++++ 1 file changed, 6 insertions(+) commit a90d3ad1c82b63146a285a4e5d08f868fe16dd00 Author: Benjamin Dauvergne Date: Sun Jun 8 11:57:51 2014 +0200 tests: fix leaks tests/basic_tests.c | 2 ++ 1 file changed, 2 insertions(+) commit 5def9c160b5a293b11f6380436d8e99dc3fd5a19 Author: Benjamin Dauvergne Date: Sun Jun 8 12:15:01 2014 +0200 saml-2.0/profile: fix leak of xmlSecKey when building signed query strings lasso/saml-2.0/profile.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) commit 7d514b67fc548b0a1b2287776d6791de71ea0627 Author: Benjamin Dauvergne Date: Sun Jun 8 12:14:24 2014 +0200 id-ff/provider: fix leak of xmlSecKey lasso/id-ff/provider.c | 3 +++ 1 file changed, 3 insertions(+) commit 49a6e9a9833b1a6ee60e8abd850e1c378db65635 Author: Benjamin Dauvergne Date: Sun Jun 8 11:56:54 2014 +0200 xml/samlp2_logout_request: fix leaks around session indexes lasso/id-ff/session.c | 1 + lasso/xml/saml-2.0/samlp2_logout_request.c | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) commit e25968a9fdc9a225ac9bd3b9cc1efa0f2dfcc5bb Author: Benjamin Dauvergne Date: Sun Jun 8 11:18:01 2014 +0200 server: fix leak of xmlSecKey objects lasso/id-ff/server.c | 1 - 1 file changed, 1 deletion(-) commit 99f00e88bff32775ccbb5433bd269910216cf84a Author: Benjamin Dauvergne Date: Sun Jun 8 04:30:00 2014 +0200 session: fix leak of _NidAndSessionIndex structures lasso/id-ff/session.c | 1 + 1 file changed, 1 insertion(+) commit 3a2c8e62dd0bee619f9b658d8beadcacd1dda42a Author: Benjamin Dauvergne Date: Sat Jun 7 14:08:51 2014 +0200 saml-2.0/server: fix invalid memory access GList must never be allocated through malloc as it internally managed using gslice. Always use Glib constructors and methods. lasso/saml-2.0/server.c | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) commit b6282eda59717e61f3af54200fe7c58ead5d7adc Author: Benjamin Dauvergne Date: Sat Jun 7 12:54:09 2014 +0200 tests: fix leak in log message checker tests/tests.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit 880b833c6e77640bc5eb9103f3f79beeccf84f02 Author: Benjamin Dauvergne Date: Sat Jun 7 12:53:39 2014 +0200 tests: do not reuse tc_response_new_from_xmlNode test case tests/basic_tests.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) commit c3d451559a6e02b99a88aaebaaee767620d7f1cc Author: Benjamin Dauvergne Date: Wed May 28 09:13:34 2014 +0200 bindings/python: fix conversion of unicode value to UTF-8 for setters bindings/python/lang.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 73625674113f5bc5e6e18adc0ee218fcab17065f Author: Benjamin Dauvergne Date: Wed May 21 14:07:06 2014 +0200 login: complete document of lasso_login_process_authn_response_msg on expectable error codes lasso/id-ff/login.c | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) commit 6012c05951566e4eea9905cf69aa65e546adae3b Author: Benjamin Dauvergne Date: Thu Apr 24 12:44:24 2014 +0200 website: update links section website/web/links.xml | 41 +++++++---------------------------------- 1 file changed, 7 insertions(+), 34 deletions(-) commit 673b16831b8da54238e9c2b2266c3d1178df382f Author: Benjamin Dauvergne Date: Thu Apr 24 12:39:21 2014 +0200 website: add news about 2.4.0 release website/web/news/21-release-2.4.0.xml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) commit 2df12563afbf6d76c2218ce4333ac0711a9d595a Author: Benjamin Dauvergne Date: Thu Apr 24 12:37:13 2014 +0200 website: fix HTML grammar errors website/web/download/index.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) commit b64dc63580da940a42a41253b32f6062e0540659 Author: Benjamin Dauvergne Date: Thu Apr 24 01:30:49 2014 +0200 xml/xml.c: fix liberal use of casting for the SNIPPET_INTEGER and SNIPPET_BOOLEAN case Some behaviour are also made more explicit like the optional if equals to -1 case for integer fields, and the optional if FALSE for boolean fields. lasso/xml/xml.c | 55 ++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 34 insertions(+), 21 deletions(-) commit a0cbf32fc4f92ef82da437d49c41a43404c23b56 Author: Benjamin Dauvergne Date: Thu Apr 24 12:32:15 2014 +0200 INSTALL: add php-cli to needed dependencie when compiling on Debian INSTALL | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 59b05693418e92d6b77c469d77d71344113c8dd7 Author: Benjamin Dauvergne Date: Thu Apr 24 12:31:54 2014 +0200 tests: pass automake CFLAGS when compiling tests2 tests/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 6d854cef4211cdcdbc7446c978f23ab859847cdd Author: Benjamin Dauvergne Date: Thu Apr 24 12:31:13 2014 +0200 lasso/xml/tools.c: fix reference to unitialized memory lasso/xml/tools.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 7e6c7bf3f0fee1071c0cb3b3f3dd0076c4fc2d3f Author: Benjamin Dauvergne Date: Thu Apr 24 12:30:54 2014 +0200 NEWS: fix wrong date for 2.4.0 release NEWS | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 74eae762ad8e7e47276ec9491fbec1300b6d0089 Author: Benjamin Dauvergne Date: Thu Apr 24 12:29:40 2014 +0200 update website for 2.4.0 release - remove windows installer reference - update debian repository configuration - point to cgit browser and releases directory website/web/download/index.xml | 52 ++++++++++++++++++------------------------ website/web/index.xml | 7 ------ 2 files changed, 22 insertions(+), 37 deletions(-) commit 7a36f17982142a5c219008e7932887e7c8b412b4 Author: Simo Sorce Date: Thu Apr 17 18:10:31 2014 -0400 Fix generators for parsing of integer values All number types including enums are parse as if they were integers, this breaks in many ways, long and int are not the same size in all architectures as well as enum may vary in size depening on compiler, architecture and optimizations. Always pass an actual long to PyArg_ParseTuple() and rely on the a cast from long to the destination variable type in the following assignment. Signed-off-by: Simo Sorce bindings/python/lang.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 3d576e040a6d0a1462b620972d223d4326f9246b Author: Simo Sorce Date: Mon Apr 14 14:19:20 2014 -0400 Fix java version detection Signed-off-by: Simo Sorce configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit ce0065d9a524bca4f3548245071c5c963b93f0fe Author: Benjamin Dauvergne Date: Mon Mar 31 11:46:20 2014 +0200 update NEWS NEWS | 6 ++++++ 1 file changed, 6 insertions(+) commit 58c2c72bae059538fe747325344cc6aa171b76c1 Author: Benjamin Dauvergne Date: Mon Mar 31 11:09:30 2014 +0200 bindings/perl/Makefile: it's difficult to control produced code so disable warning on unused-but-set-variable bindings/perl/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 190c7743c28ffb6113b6b1e86600923611adb7eb Author: Frédéric Péters Date: Fri Mar 28 16:45:00 2014 +0100 perl: get required CFLAGS from $(perl -V::ccflags:) configure.ac | 3 +++ 1 file changed, 3 insertions(+) commit c141a04ec02c3878a26f1144841a9ac73e643cd4 Author: Benjamin Dauvergne Date: Tue Mar 25 07:31:42 2014 +0100 fix: remove warning by not calling g_type_init() with glib > 2.36 as it's deprecated lasso/lasso.c | 2 ++ 1 file changed, 2 insertions(+) commit 93b9b59e8f9ad9a2c1a5630545d247498ceef5e8 Author: Benjamin Dauvergne Date: Tue Jan 7 17:03:14 2014 +0100 configure.ac: update LASSO_VERSION_INFO configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 83dc14c307d1bab59986815c1d6306ec9c256600 Author: Benjamin Dauvergne Date: Tue Jan 7 01:30:55 2014 +0100 Revert "configure.ac: desactivate the PHP5 binding if no CLI interpreter is available" This reverts commit a3d53764fa75c30ee9a118088f0a224bc20059e4. configure.ac | 4 ---- 1 file changed, 4 deletions(-) commit ce3cab2e5ad4ffacf3e8678c782f970f45f6f26a Author: Benjamin Dauvergne Date: Tue Jan 7 01:15:43 2014 +0100 docs: remove section docs/reference/lasso/lasso-sections.txt | 1 - 1 file changed, 1 deletion(-) commit a3d53764fa75c30ee9a118088f0a224bc20059e4 Author: Benjamin Dauvergne Date: Mon Jan 6 15:43:12 2014 +0100 configure.ac: desactivate the PHP5 binding if no CLI interpreter is available configure.ac | 4 ++++ 1 file changed, 4 insertions(+) commit c6475ef51ca50a8755adc5ce9051247fcfa10c90 Author: Benjamin Dauvergne Date: Mon Jan 6 15:42:48 2014 +0100 configure.ac: remove checks for SWIG configure.ac | 38 -------------------------------------- 1 file changed, 38 deletions(-) commit c8a6863920cba83d33ae32049da0d10abd64953b Author: Frédéric Péters Date: Sun Dec 29 10:30:45 2013 +0100 import 2.3.6-3 changelog entry changelog | 11 +++++++++++ 1 file changed, 11 insertions(+) commit 9769c8bef35d376c2c0d355711954cef5984549c Author: Frédéric Péters Date: Sun Dec 29 10:30:02 2013 +0100 use php5enmod and php5dismod php5-lasso.postinst | 7 +++++++ php5-lasso.prerm | 7 +++++++ rules | 4 +++- 3 files changed, 17 insertions(+), 1 deletion(-) commit fba81e5d234ad2cb2e8d1bc8d3ec245d51f745e8 Author: Moritz Muehlenhoff Date: Sun Dec 29 10:27:20 2013 +0100 enable hardened build flags rules | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) commit dd8d85e2a83193951f8c70a0290669d4e44f0506 Author: Frédéric Péters Date: Sun Dec 29 10:25:52 2013 +0100 import 2.3.6-2.2 changelog entry changelog | 9 +++++++++ 1 file changed, 9 insertions(+) commit ee45e57f9243aad6b8cea5ee4d9571b13683a9de Author: Frédéric Péters Date: Sun Dec 29 10:24:54 2013 +0100 import 2.3.6-2.1 leftovers changelog | 7 +++++++ control | 1 - control.in | 1 - pycompat | 1 - 4 files changed, 7 insertions(+), 3 deletions(-) commit c5659068fec60144300fdc7590b19ea338dfd28a Author: Benjamin Dauvergne Date: Thu Dec 19 10:14:52 2013 +0100 configure.ac,fedora/lasso.spec: remove expat dependency configure.ac | 12 ------------ fedora/lasso.spec | 2 +- 2 files changed, 1 insertion(+), 13 deletions(-) commit ddc10efa2c271c3fcc71bc94f9f1a5655f87c04a Author: Benjamin Dauvergne Date: Thu Dec 19 10:05:28 2013 +0100 INSTALL: add paragraph about build dependencies INSTALL | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) commit eaf4069c9bf2add9ca248fdb60e23b75d505cddd Author: Benjamin Dauvergne Date: Wed Dec 18 18:53:21 2013 +0100 more work toward release 2.4.0 NEWS | 65 +++- abi/abi-2.3.6 | 1115 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ abi/abi-2.4.0 | 6 + 3 files changed, 1179 insertions(+), 7 deletions(-) commit b1601ac6933e90a2ee4bade4eaef7954dd3695a6 Author: Benjamin Dauvergne Date: Wed Dec 18 18:44:20 2013 +0100 id-ff/providerprivate.h,id-ff/provider.h: make lasso_provider_verify_signature public API It's necessary for the crudeSAML SASL mechanism. lasso/id-ff/provider.h | 3 +++ lasso/id-ff/providerprivate.h | 2 -- 2 files changed, 3 insertions(+), 2 deletions(-) commit 309a9ab6bc20159b2ad203d953d7b3e8e8c63669 Author: Benjamin Dauvergne Date: Wed Dec 11 15:35:17 2013 +0100 bindings/python: automatically encode string into utf-8 when passing unicode string to Lasso methods fixes #4077 bindings/python/lang.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) commit 33d67ddd1352a2db97d252c7d18f7806ec91e616 Author: Jérôme Schneider Date: Tue Dec 10 15:06:45 2013 +0100 python-lasso.install: replace site-packages by dist-packages python-lasso.install | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit e80648258e737428e322379c0c81b8d793a9269a Author: Jérôme Schneider Date: Tue Dec 10 14:53:57 2013 +0100 add python-lasso.install with python files python-lasso.install | 2 ++ rules | 2 -- 2 files changed, 2 insertions(+), 2 deletions(-) commit 81bb9bd73de7ec1d5b9d89cad7cbe8495e2b60ab Author: Benjamin Dauvergne Date: Sun Dec 8 23:43:49 2013 +0100 id-ff/session.c: fix wrong variable reference in init_from_xml_nid_and_session_index lasso/id-ff/session.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 6af6a0bcc564e8064b3590c14bb0fed0bd90d1c9 Author: Thomas NOEL Date: Sun Dec 8 17:32:45 2013 +0100 update control.in with control control.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 402bb580cb3a4a1225d29c619493b97eca866c96 Author: Benjamin Dauvergne Date: Wed Nov 20 16:27:33 2013 +0100 remove the debian directory from the project debian/changelog | 302 ------------------------------------------- debian/compat | 1 - debian/control | 85 ------------ debian/control.in | 85 ------------ debian/copyright | 44 ------- debian/dirs | 2 - debian/docs | 2 - debian/liblasso-java.dirs | 1 - debian/liblasso-java.install | 2 - debian/liblasso-perl.install | 3 - debian/liblasso3-dev.dirs | 2 - debian/liblasso3-dev.install | 5 - debian/liblasso3.dirs | 1 - debian/liblasso3.install | 1 - debian/php5-lasso.install | 3 - debian/pycompat | 1 - debian/python-lasso.install | 2 - debian/rules | 169 ------------------------ 18 files changed, 711 deletions(-) commit fb0e621c49977bcbf2823486cf73cd520f6403c0 Author: Jérôme Schneider Date: Fri Dec 6 09:36:40 2013 +0100 python-lasso.install: don't install old /usr/lib/python*/site-packages python-lasso.install | 2 -- 1 file changed, 2 deletions(-) commit b30e2463a73d3ace68957eb988b905b3c3b758a7 Author: Frédéric Péters Date: Fri Dec 6 02:13:03 2013 +0100 doc: remove broken gtk-doc tests for now docs/reference/lasso/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit af05f9b3179c19d8dcba641b38d76309631985ff Author: Frédéric Péters Date: Fri Dec 6 02:00:56 2013 +0100 perl: make it compatible with recent libxml2 bindings/perl/glist_handling.c | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) commit ff0b9ba8d40e77126f6b6edf337427eb98ccfaf1 Author: Frédéric Péters Date: Thu Dec 5 18:21:10 2013 +0100 doc: remove reference to init.xml that is not created anymore docs/reference/lasso/lasso-docs.sgml | 1 - 1 file changed, 1 deletion(-) commit 60d6858d148b3fa133abcaada130223603d2d184 Author: Frédéric Péters Date: Thu Dec 5 17:51:32 2013 +0100 build: replace python $libdir by our own configure.ac | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit 624d20244b2323d7969480a3376b3f1c43eb90df Author: Simo Sorce Date: Sat Sep 14 17:24:24 2013 -0400 Better python detection in configure.ac License: MIT Signed-off-by: Simo Sorce configure.ac | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) commit c8058668037110e35285913ab2f8c25741867cb9 Author: Simo Sorce Date: Sat Sep 14 14:46:45 2013 -0400 Support automake 1.13 and 1.14 License: MIT Signed-off-by: Simo Sorce autogen.sh | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) commit 1ce0510a234306ecc1e1687e89d11239e5ccbd70 Author: Jérôme Schneider Date: Wed Dec 4 18:04:53 2013 +0100 debian: replace dh_pycentral by dh_python control | 14 +------------- rules | 2 +- 2 files changed, 2 insertions(+), 14 deletions(-) commit 3a6b2fdee76b5f782094b6b268bfdf895263eda8 Author: Simo Sorce Date: Wed Nov 27 14:04:51 2013 -0500 Fix license boilerplates Instad of referring to an old FSF address, point the reader to the FSF website where the latest licenses and addresses are published. Signed-off-by: Simo Sorce COPYING | 2 +- README | 2 +- bindings/bindings.py | 3 +-- bindings/java/lang.py | 3 +-- bindings/java/tests/BindingTests.java | 3 +-- bindings/java/tests/LoginTest.java | 3 +-- bindings/perl/ghashtable_handling.c | 3 +-- bindings/perl/glist_handling.c | 3 +-- bindings/perl/gobject_handling.c | 3 +-- bindings/perl/lang.py | 3 +-- bindings/php5/lang.py | 3 +-- bindings/php5/php_code.py | 3 +-- bindings/php5/tests/binding_tests.php | 3 +-- bindings/php5/tests/profile_tests.php | 3 +-- bindings/php5/wrapper_header.py | 3 +-- bindings/php5/wrapper_source.py | 3 +-- bindings/python/lang.py | 3 +-- bindings/python/tests/XmlTestRunner.py | 3 +-- bindings/python/tests/binding_tests.py | 3 +-- bindings/python/tests/idwsf1_tests.py | 3 +-- bindings/python/tests/idwsf2_tests.py | 3 +-- bindings/python/tests/profiles_tests.py | 3 +-- bindings/python/tests/tests.py | 3 +-- bindings/utils.py | 3 +-- lasso/backward_comp.h | 3 +-- lasso/ctypes.h | 3 +-- lasso/debug.h | 3 +-- lasso/errors.c | 3 +-- lasso/errors.c.in | 3 +-- lasso/errors.h | 3 +-- lasso/export.h | 3 +-- lasso/id-ff/defederation.c | 3 +-- lasso/id-ff/defederation.h | 3 +-- lasso/id-ff/federation.c | 3 +-- lasso/id-ff/federation.h | 3 +-- lasso/id-ff/identity.c | 3 +-- lasso/id-ff/identity.h | 3 +-- lasso/id-ff/identityprivate.h | 3 +-- lasso/id-ff/lecp.c | 3 +-- lasso/id-ff/lecp.h | 3 +-- lasso/id-ff/login.c | 3 +-- lasso/id-ff/login.h | 3 +-- lasso/id-ff/loginprivate.h | 3 +-- lasso/id-ff/logout.c | 3 +-- lasso/id-ff/logout.h | 3 +-- lasso/id-ff/logoutprivate.h | 3 +-- lasso/id-ff/name_identifier_mapping.c | 3 +-- lasso/id-ff/name_identifier_mapping.h | 3 +-- lasso/id-ff/name_registration.c | 3 +-- lasso/id-ff/name_registration.h | 3 +-- lasso/id-ff/profile.c | 3 +-- lasso/id-ff/profile.h | 3 +-- lasso/id-ff/profileprivate.h | 3 +-- lasso/id-ff/provider.c | 3 +-- lasso/id-ff/provider.h | 3 +-- lasso/id-ff/providerprivate.h | 3 +-- lasso/id-ff/server.c | 3 +-- lasso/id-ff/server.h | 3 +-- lasso/id-ff/serverprivate.h | 3 +-- lasso/id-ff/session.c | 3 +-- lasso/id-ff/session.h | 3 +-- lasso/id-ff/sessionprivate.h | 3 +-- lasso/id-wsf-2.0/data_service.c | 3 +-- lasso/id-wsf-2.0/data_service.h | 3 +-- lasso/id-wsf-2.0/discovery.c | 3 +-- lasso/id-wsf-2.0/discovery.h | 3 +-- lasso/id-wsf-2.0/id_wsf_2.h | 3 +-- lasso/id-wsf-2.0/identity.c | 3 +-- lasso/id-wsf-2.0/identity.h | 3 +-- lasso/id-wsf-2.0/idwsf2_helper.c | 3 +-- lasso/id-wsf-2.0/idwsf2_helper.h | 3 +-- lasso/id-wsf-2.0/private.h | 3 +-- lasso/id-wsf-2.0/profile.c | 3 +-- lasso/id-wsf-2.0/profile.h | 3 +-- lasso/id-wsf-2.0/saml2_login.c | 3 +-- lasso/id-wsf-2.0/saml2_login.h | 3 +-- lasso/id-wsf-2.0/server.c | 3 +-- lasso/id-wsf-2.0/server.h | 3 +-- lasso/id-wsf-2.0/serverprivate.h | 3 +-- lasso/id-wsf-2.0/session.c | 3 +-- lasso/id-wsf-2.0/session.h | 3 +-- lasso/id-wsf-2.0/sessionprivate.h | 3 +-- lasso/id-wsf-2.0/soap_binding.c | 3 +-- lasso/id-wsf-2.0/soap_binding.h | 3 +-- lasso/id-wsf/authentication.c | 3 +-- lasso/id-wsf/authentication.h | 3 +-- lasso/id-wsf/data_service.c | 3 +-- lasso/id-wsf/data_service.h | 3 +-- lasso/id-wsf/discovery.c | 3 +-- lasso/id-wsf/discovery.h | 3 +-- lasso/id-wsf/id_ff_extensions.c | 3 +-- lasso/id-wsf/id_ff_extensions.h | 3 +-- lasso/id-wsf/id_ff_extensions_private.h | 3 +-- lasso/id-wsf/id_wsf.h | 3 +-- lasso/id-wsf/interaction_profile_service.c | 3 +-- lasso/id-wsf/interaction_profile_service.h | 3 +-- lasso/id-wsf/personal_profile_service.c | 3 +-- lasso/id-wsf/personal_profile_service.h | 3 +-- lasso/id-wsf/wsf_profile.c | 3 +-- lasso/id-wsf/wsf_profile.h | 3 +-- lasso/id-wsf/wsf_profile_private.h | 3 +-- lasso/id-wsf/wsf_utils.c | 3 +-- lasso/id-wsf/wsf_utils.h | 3 +-- lasso/key.c | 3 +-- lasso/key.h | 3 +-- lasso/keyprivate.h | 3 +-- lasso/lasso.c | 3 +-- lasso/lasso.h | 3 +-- lasso/logging.c | 3 +-- lasso/logging.h | 3 +-- lasso/registry-private.h | 3 +-- lasso/registry.c | 3 +-- lasso/registry.h | 3 +-- lasso/saml-2.0/assertion_query.c | 3 +-- lasso/saml-2.0/assertion_query.h | 3 +-- lasso/saml-2.0/ecp.c | 3 +-- lasso/saml-2.0/ecp.h | 3 +-- lasso/saml-2.0/ecpprivate.h | 3 +-- lasso/saml-2.0/federation.c | 3 +-- lasso/saml-2.0/federationprivate.h | 3 +-- lasso/saml-2.0/login.c | 3 +-- lasso/saml-2.0/loginprivate.h | 3 +-- lasso/saml-2.0/logout.c | 3 +-- lasso/saml-2.0/logoutprivate.h | 3 +-- lasso/saml-2.0/name_id_management.c | 3 +-- lasso/saml-2.0/name_id_management.h | 3 +-- lasso/saml-2.0/profile.c | 3 +-- lasso/saml-2.0/profile.h | 3 +-- lasso/saml-2.0/profileprivate.h | 3 +-- lasso/saml-2.0/provider.c | 3 +-- lasso/saml-2.0/provider.h | 3 +-- lasso/saml-2.0/providerprivate.h | 3 +-- lasso/saml-2.0/saml2_helper.c | 3 +-- lasso/saml-2.0/saml2_helper.h | 3 +-- lasso/saml-2.0/server.c | 3 +-- lasso/saml-2.0/serverprivate.h | 3 +-- lasso/utils.c | 3 +-- lasso/utils.h | 3 +-- lasso/xml/disco_authenticate_requester.c | 3 +-- lasso/xml/disco_authenticate_requester.h | 3 +-- lasso/xml/disco_authenticate_session_context.c | 3 +-- lasso/xml/disco_authenticate_session_context.h | 3 +-- lasso/xml/disco_authorize_requester.c | 3 +-- lasso/xml/disco_authorize_requester.h | 3 +-- lasso/xml/disco_credentials.c | 3 +-- lasso/xml/disco_credentials.h | 3 +-- lasso/xml/disco_description.c | 3 +-- lasso/xml/disco_description.h | 3 +-- lasso/xml/disco_encrypt_resource_id.c | 3 +-- lasso/xml/disco_encrypt_resource_id.h | 3 +-- lasso/xml/disco_encrypted_resource_id.c | 3 +-- lasso/xml/disco_encrypted_resource_id.h | 3 +-- lasso/xml/disco_generate_bearer_token.c | 3 +-- lasso/xml/disco_generate_bearer_token.h | 3 +-- lasso/xml/disco_insert_entry.c | 3 +-- lasso/xml/disco_insert_entry.h | 3 +-- lasso/xml/disco_modify.c | 3 +-- lasso/xml/disco_modify.h | 3 +-- lasso/xml/disco_modify_response.c | 3 +-- lasso/xml/disco_modify_response.h | 3 +-- lasso/xml/disco_options.c | 3 +-- lasso/xml/disco_options.h | 3 +-- lasso/xml/disco_query.c | 3 +-- lasso/xml/disco_query.h | 3 +-- lasso/xml/disco_query_response.c | 3 +-- lasso/xml/disco_query_response.h | 3 +-- lasso/xml/disco_remove_entry.c | 3 +-- lasso/xml/disco_remove_entry.h | 3 +-- lasso/xml/disco_requested_service_type.c | 3 +-- lasso/xml/disco_requested_service_type.h | 3 +-- lasso/xml/disco_resource_id.c | 3 +-- lasso/xml/disco_resource_id.h | 3 +-- lasso/xml/disco_resource_offering.c | 3 +-- lasso/xml/disco_resource_offering.h | 3 +-- lasso/xml/disco_send_single_logout.c | 3 +-- lasso/xml/disco_send_single_logout.h | 3 +-- lasso/xml/disco_service_instance.c | 3 +-- lasso/xml/disco_service_instance.h | 3 +-- lasso/xml/dsig/ds_key_info.c | 3 +-- lasso/xml/dsig/ds_key_info.h | 3 +-- lasso/xml/dsig/ds_key_value.c | 3 +-- lasso/xml/dsig/ds_key_value.h | 3 +-- lasso/xml/dsig/ds_rsa_key_value.c | 3 +-- lasso/xml/dsig/ds_rsa_key_value.h | 3 +-- lasso/xml/dsig/ds_x509_data.c | 3 +-- lasso/xml/dsig/ds_x509_data.h | 3 +-- lasso/xml/dsig/strings.h | 3 +-- lasso/xml/dsig/xml_dsig.h | 3 +-- lasso/xml/dst_data.c | 3 +-- lasso/xml/dst_data.h | 3 +-- lasso/xml/dst_modification.c | 3 +-- lasso/xml/dst_modification.h | 3 +-- lasso/xml/dst_modify.c | 3 +-- lasso/xml/dst_modify.h | 3 +-- lasso/xml/dst_modify_response.c | 3 +-- lasso/xml/dst_modify_response.h | 3 +-- lasso/xml/dst_new_data.c | 3 +-- lasso/xml/dst_new_data.h | 3 +-- lasso/xml/dst_query.c | 3 +-- lasso/xml/dst_query.h | 3 +-- lasso/xml/dst_query_item.c | 3 +-- lasso/xml/dst_query_item.h | 3 +-- lasso/xml/dst_query_response.c | 3 +-- lasso/xml/dst_query_response.h | 3 +-- lasso/xml/id-wsf-2.0/disco_abstract.c | 3 +-- lasso/xml/id-wsf-2.0/disco_abstract.h | 3 +-- lasso/xml/id-wsf-2.0/disco_endpoint_context.c | 3 +-- lasso/xml/id-wsf-2.0/disco_endpoint_context.h | 3 +-- lasso/xml/id-wsf-2.0/disco_keys.c | 3 +-- lasso/xml/id-wsf-2.0/disco_keys.h | 3 +-- lasso/xml/id-wsf-2.0/disco_options.c | 3 +-- lasso/xml/id-wsf-2.0/disco_options.h | 3 +-- lasso/xml/id-wsf-2.0/disco_provider_id.c | 3 +-- lasso/xml/id-wsf-2.0/disco_provider_id.h | 3 +-- lasso/xml/id-wsf-2.0/disco_query.c | 3 +-- lasso/xml/id-wsf-2.0/disco_query.h | 3 +-- lasso/xml/id-wsf-2.0/disco_query_response.c | 3 +-- lasso/xml/id-wsf-2.0/disco_query_response.h | 3 +-- lasso/xml/id-wsf-2.0/disco_requested_service.c | 3 +-- lasso/xml/id-wsf-2.0/disco_requested_service.h | 3 +-- lasso/xml/id-wsf-2.0/disco_security_context.c | 3 +-- lasso/xml/id-wsf-2.0/disco_security_context.h | 3 +-- lasso/xml/id-wsf-2.0/disco_service_context.c | 3 +-- lasso/xml/id-wsf-2.0/disco_service_context.h | 3 +-- lasso/xml/id-wsf-2.0/disco_service_type.c | 3 +-- lasso/xml/id-wsf-2.0/disco_service_type.h | 3 +-- lasso/xml/id-wsf-2.0/disco_svc_md_association_add.c | 3 +-- lasso/xml/id-wsf-2.0/disco_svc_md_association_add.h | 3 +-- lasso/xml/id-wsf-2.0/disco_svc_md_association_add_response.c | 3 +-- lasso/xml/id-wsf-2.0/disco_svc_md_association_add_response.h | 3 +-- lasso/xml/id-wsf-2.0/disco_svc_md_association_delete.c | 3 +-- lasso/xml/id-wsf-2.0/disco_svc_md_association_delete.h | 3 +-- lasso/xml/id-wsf-2.0/disco_svc_md_association_delete_response.c | 3 +-- lasso/xml/id-wsf-2.0/disco_svc_md_association_delete_response.h | 3 +-- lasso/xml/id-wsf-2.0/disco_svc_md_association_query.c | 3 +-- lasso/xml/id-wsf-2.0/disco_svc_md_association_query.h | 3 +-- lasso/xml/id-wsf-2.0/disco_svc_md_association_query_response.c | 3 +-- lasso/xml/id-wsf-2.0/disco_svc_md_association_query_response.h | 3 +-- lasso/xml/id-wsf-2.0/disco_svc_md_delete.c | 3 +-- lasso/xml/id-wsf-2.0/disco_svc_md_delete.h | 3 +-- lasso/xml/id-wsf-2.0/disco_svc_md_delete_response.c | 3 +-- lasso/xml/id-wsf-2.0/disco_svc_md_delete_response.h | 3 +-- lasso/xml/id-wsf-2.0/disco_svc_md_query.c | 3 +-- lasso/xml/id-wsf-2.0/disco_svc_md_query.h | 3 +-- lasso/xml/id-wsf-2.0/disco_svc_md_query_response.c | 3 +-- lasso/xml/id-wsf-2.0/disco_svc_md_query_response.h | 3 +-- lasso/xml/id-wsf-2.0/disco_svc_md_register.c | 3 +-- lasso/xml/id-wsf-2.0/disco_svc_md_register.h | 3 +-- lasso/xml/id-wsf-2.0/disco_svc_md_register_response.c | 3 +-- lasso/xml/id-wsf-2.0/disco_svc_md_register_response.h | 3 +-- lasso/xml/id-wsf-2.0/disco_svc_md_replace.c | 3 +-- lasso/xml/id-wsf-2.0/disco_svc_md_replace.h | 3 +-- lasso/xml/id-wsf-2.0/disco_svc_md_replace_response.c | 3 +-- lasso/xml/id-wsf-2.0/disco_svc_md_replace_response.h | 3 +-- lasso/xml/id-wsf-2.0/disco_svc_metadata.c | 3 +-- lasso/xml/id-wsf-2.0/disco_svc_metadata.h | 3 +-- lasso/xml/id-wsf-2.0/dst_data_response_base.c | 3 +-- lasso/xml/id-wsf-2.0/dst_data_response_base.h | 3 +-- lasso/xml/id-wsf-2.0/dst_delete_item_base.c | 3 +-- lasso/xml/id-wsf-2.0/dst_delete_item_base.h | 3 +-- lasso/xml/id-wsf-2.0/dst_delete_response.c | 3 +-- lasso/xml/id-wsf-2.0/dst_delete_response.h | 3 +-- lasso/xml/id-wsf-2.0/dst_request.c | 3 +-- lasso/xml/id-wsf-2.0/dst_request.h | 3 +-- lasso/xml/id-wsf-2.0/dst_result_query_base.c | 3 +-- lasso/xml/id-wsf-2.0/dst_result_query_base.h | 3 +-- lasso/xml/id-wsf-2.0/dst_test_item_base.c | 3 +-- lasso/xml/id-wsf-2.0/dst_test_item_base.h | 3 +-- lasso/xml/id-wsf-2.0/dstref_app_data.c | 3 +-- lasso/xml/id-wsf-2.0/dstref_app_data.h | 3 +-- lasso/xml/id-wsf-2.0/dstref_create.c | 3 +-- lasso/xml/id-wsf-2.0/dstref_create.h | 3 +-- lasso/xml/id-wsf-2.0/dstref_create_item.c | 3 +-- lasso/xml/id-wsf-2.0/dstref_create_item.h | 3 +-- lasso/xml/id-wsf-2.0/dstref_create_response.c | 3 +-- lasso/xml/id-wsf-2.0/dstref_create_response.h | 3 +-- lasso/xml/id-wsf-2.0/dstref_data.c | 3 +-- lasso/xml/id-wsf-2.0/dstref_data.h | 3 +-- lasso/xml/id-wsf-2.0/dstref_data_response.c | 3 +-- lasso/xml/id-wsf-2.0/dstref_data_response.h | 3 +-- lasso/xml/id-wsf-2.0/dstref_delete.c | 3 +-- lasso/xml/id-wsf-2.0/dstref_delete.h | 3 +-- lasso/xml/id-wsf-2.0/dstref_delete_item.c | 3 +-- lasso/xml/id-wsf-2.0/dstref_delete_item.h | 3 +-- lasso/xml/id-wsf-2.0/dstref_delete_response.c | 3 +-- lasso/xml/id-wsf-2.0/dstref_delete_response.h | 3 +-- lasso/xml/id-wsf-2.0/dstref_item_data.c | 3 +-- lasso/xml/id-wsf-2.0/dstref_item_data.h | 3 +-- lasso/xml/id-wsf-2.0/dstref_modify.c | 3 +-- lasso/xml/id-wsf-2.0/dstref_modify.h | 3 +-- lasso/xml/id-wsf-2.0/dstref_modify_item.c | 3 +-- lasso/xml/id-wsf-2.0/dstref_modify_item.h | 3 +-- lasso/xml/id-wsf-2.0/dstref_modify_response.c | 3 +-- lasso/xml/id-wsf-2.0/dstref_modify_response.h | 3 +-- lasso/xml/id-wsf-2.0/dstref_query.c | 3 +-- lasso/xml/id-wsf-2.0/dstref_query.h | 3 +-- lasso/xml/id-wsf-2.0/dstref_query_item.c | 3 +-- lasso/xml/id-wsf-2.0/dstref_query_item.h | 3 +-- lasso/xml/id-wsf-2.0/dstref_query_response.c | 3 +-- lasso/xml/id-wsf-2.0/dstref_query_response.h | 3 +-- lasso/xml/id-wsf-2.0/dstref_result_query.c | 3 +-- lasso/xml/id-wsf-2.0/dstref_result_query.h | 3 +-- lasso/xml/id-wsf-2.0/dstref_test_item.c | 3 +-- lasso/xml/id-wsf-2.0/dstref_test_item.h | 3 +-- lasso/xml/id-wsf-2.0/idwsf2_strings.h | 3 +-- lasso/xml/id-wsf-2.0/ims_identity_mapping_request.c | 3 +-- lasso/xml/id-wsf-2.0/ims_identity_mapping_request.h | 3 +-- lasso/xml/id-wsf-2.0/ims_identity_mapping_response.c | 3 +-- lasso/xml/id-wsf-2.0/ims_identity_mapping_response.h | 3 +-- lasso/xml/id-wsf-2.0/ims_mapping_input.c | 3 +-- lasso/xml/id-wsf-2.0/ims_mapping_input.h | 3 +-- lasso/xml/id-wsf-2.0/ims_mapping_output.c | 3 +-- lasso/xml/id-wsf-2.0/ims_mapping_output.h | 3 +-- lasso/xml/id-wsf-2.0/is_help.c | 3 +-- lasso/xml/id-wsf-2.0/is_help.h | 3 +-- lasso/xml/id-wsf-2.0/is_inquiry.c | 3 +-- lasso/xml/id-wsf-2.0/is_inquiry.h | 3 +-- lasso/xml/id-wsf-2.0/is_inquiry_element.c | 3 +-- lasso/xml/id-wsf-2.0/is_inquiry_element.h | 3 +-- lasso/xml/id-wsf-2.0/is_interaction_request.c | 3 +-- lasso/xml/id-wsf-2.0/is_interaction_request.h | 3 +-- lasso/xml/id-wsf-2.0/is_interaction_response.c | 3 +-- lasso/xml/id-wsf-2.0/is_interaction_response.h | 3 +-- lasso/xml/id-wsf-2.0/is_interaction_statement.c | 3 +-- lasso/xml/id-wsf-2.0/is_interaction_statement.h | 3 +-- lasso/xml/id-wsf-2.0/is_item.c | 3 +-- lasso/xml/id-wsf-2.0/is_item.h | 3 +-- lasso/xml/id-wsf-2.0/is_parameter.c | 3 +-- lasso/xml/id-wsf-2.0/is_parameter.h | 3 +-- lasso/xml/id-wsf-2.0/is_select.c | 3 +-- lasso/xml/id-wsf-2.0/is_select.h | 3 +-- lasso/xml/id-wsf-2.0/is_text.c | 3 +-- lasso/xml/id-wsf-2.0/is_text.h | 3 +-- lasso/xml/id-wsf-2.0/ps_add_collection_request.c | 3 +-- lasso/xml/id-wsf-2.0/ps_add_collection_request.h | 3 +-- lasso/xml/id-wsf-2.0/ps_add_collection_response.c | 3 +-- lasso/xml/id-wsf-2.0/ps_add_collection_response.h | 3 +-- lasso/xml/id-wsf-2.0/ps_add_entity_request.c | 3 +-- lasso/xml/id-wsf-2.0/ps_add_entity_request.h | 3 +-- lasso/xml/id-wsf-2.0/ps_add_entity_response.c | 3 +-- lasso/xml/id-wsf-2.0/ps_add_entity_response.h | 3 +-- lasso/xml/id-wsf-2.0/ps_add_known_entity_request.c | 3 +-- lasso/xml/id-wsf-2.0/ps_add_known_entity_request.h | 3 +-- lasso/xml/id-wsf-2.0/ps_add_known_entity_response.c | 3 +-- lasso/xml/id-wsf-2.0/ps_add_known_entity_response.h | 3 +-- lasso/xml/id-wsf-2.0/ps_add_to_collection_request.c | 3 +-- lasso/xml/id-wsf-2.0/ps_add_to_collection_request.h | 3 +-- lasso/xml/id-wsf-2.0/ps_get_object_info_request.c | 3 +-- lasso/xml/id-wsf-2.0/ps_get_object_info_request.h | 3 +-- lasso/xml/id-wsf-2.0/ps_get_object_info_response.c | 3 +-- lasso/xml/id-wsf-2.0/ps_get_object_info_response.h | 3 +-- lasso/xml/id-wsf-2.0/ps_item_data.c | 3 +-- lasso/xml/id-wsf-2.0/ps_item_data.h | 3 +-- lasso/xml/id-wsf-2.0/ps_list_members_request.c | 3 +-- lasso/xml/id-wsf-2.0/ps_list_members_request.h | 3 +-- lasso/xml/id-wsf-2.0/ps_list_members_response.c | 3 +-- lasso/xml/id-wsf-2.0/ps_list_members_response.h | 3 +-- lasso/xml/id-wsf-2.0/ps_notification.c | 3 +-- lasso/xml/id-wsf-2.0/ps_notification.h | 3 +-- lasso/xml/id-wsf-2.0/ps_notify.c | 3 +-- lasso/xml/id-wsf-2.0/ps_notify.h | 3 +-- lasso/xml/id-wsf-2.0/ps_object.c | 3 +-- lasso/xml/id-wsf-2.0/ps_object.h | 3 +-- lasso/xml/id-wsf-2.0/ps_query_objects_request.c | 3 +-- lasso/xml/id-wsf-2.0/ps_query_objects_request.h | 3 +-- lasso/xml/id-wsf-2.0/ps_query_objects_response.c | 3 +-- lasso/xml/id-wsf-2.0/ps_query_objects_response.h | 3 +-- lasso/xml/id-wsf-2.0/ps_remove_collection_request.c | 3 +-- lasso/xml/id-wsf-2.0/ps_remove_collection_request.h | 3 +-- lasso/xml/id-wsf-2.0/ps_remove_entity_request.c | 3 +-- lasso/xml/id-wsf-2.0/ps_remove_entity_request.h | 3 +-- lasso/xml/id-wsf-2.0/ps_remove_from_collection_request.c | 3 +-- lasso/xml/id-wsf-2.0/ps_remove_from_collection_request.h | 3 +-- lasso/xml/id-wsf-2.0/ps_request_abstract.c | 3 +-- lasso/xml/id-wsf-2.0/ps_request_abstract.h | 3 +-- lasso/xml/id-wsf-2.0/ps_resolve_identifier_request.c | 3 +-- lasso/xml/id-wsf-2.0/ps_resolve_identifier_request.h | 3 +-- lasso/xml/id-wsf-2.0/ps_resolve_identifier_response.c | 3 +-- lasso/xml/id-wsf-2.0/ps_resolve_identifier_response.h | 3 +-- lasso/xml/id-wsf-2.0/ps_resolve_input.c | 3 +-- lasso/xml/id-wsf-2.0/ps_resolve_input.h | 3 +-- lasso/xml/id-wsf-2.0/ps_response_abstract.c | 3 +-- lasso/xml/id-wsf-2.0/ps_response_abstract.h | 3 +-- lasso/xml/id-wsf-2.0/ps_set_object_info_request.c | 3 +-- lasso/xml/id-wsf-2.0/ps_set_object_info_request.h | 3 +-- lasso/xml/id-wsf-2.0/ps_test_membership_request.c | 3 +-- lasso/xml/id-wsf-2.0/ps_test_membership_request.h | 3 +-- lasso/xml/id-wsf-2.0/ps_test_membership_response.c | 3 +-- lasso/xml/id-wsf-2.0/ps_test_membership_response.h | 3 +-- lasso/xml/id-wsf-2.0/sb2_consent.c | 3 +-- lasso/xml/id-wsf-2.0/sb2_consent.h | 3 +-- lasso/xml/id-wsf-2.0/sb2_credentials_context.c | 3 +-- lasso/xml/id-wsf-2.0/sb2_credentials_context.h | 3 +-- lasso/xml/id-wsf-2.0/sb2_endpoint_update.c | 3 +-- lasso/xml/id-wsf-2.0/sb2_endpoint_update.h | 3 +-- lasso/xml/id-wsf-2.0/sb2_redirect_request.c | 3 +-- lasso/xml/id-wsf-2.0/sb2_redirect_request.h | 3 +-- lasso/xml/id-wsf-2.0/sb2_sender.c | 3 +-- lasso/xml/id-wsf-2.0/sb2_sender.h | 3 +-- lasso/xml/id-wsf-2.0/sb2_target_identity.c | 3 +-- lasso/xml/id-wsf-2.0/sb2_target_identity.h | 3 +-- lasso/xml/id-wsf-2.0/sb2_timeout.c | 3 +-- lasso/xml/id-wsf-2.0/sb2_timeout.h | 3 +-- lasso/xml/id-wsf-2.0/sb2_usage_directive.c | 3 +-- lasso/xml/id-wsf-2.0/sb2_usage_directive.h | 3 +-- lasso/xml/id-wsf-2.0/sb2_user_interaction_header.c | 3 +-- lasso/xml/id-wsf-2.0/sb2_user_interaction_header.h | 3 +-- lasso/xml/id-wsf-2.0/sbf_framework.c | 3 +-- lasso/xml/id-wsf-2.0/sbf_framework.h | 3 +-- lasso/xml/id-wsf-2.0/sec_token.c | 3 +-- lasso/xml/id-wsf-2.0/sec_token.h | 3 +-- lasso/xml/id-wsf-2.0/sec_token_policy.c | 3 +-- lasso/xml/id-wsf-2.0/sec_token_policy.h | 3 +-- lasso/xml/id-wsf-2.0/sec_transited_provider_path.c | 3 +-- lasso/xml/id-wsf-2.0/sec_transited_provider_path.h | 3 +-- lasso/xml/id-wsf-2.0/subs_notification.c | 3 +-- lasso/xml/id-wsf-2.0/subs_notification.h | 3 +-- lasso/xml/id-wsf-2.0/subs_notify_response.c | 3 +-- lasso/xml/id-wsf-2.0/subs_notify_response.h | 3 +-- lasso/xml/id-wsf-2.0/subs_ref_item.c | 3 +-- lasso/xml/id-wsf-2.0/subs_ref_item.h | 3 +-- lasso/xml/id-wsf-2.0/subs_subscription.c | 3 +-- lasso/xml/id-wsf-2.0/subs_subscription.h | 3 +-- lasso/xml/id-wsf-2.0/subsref_app_data.c | 3 +-- lasso/xml/id-wsf-2.0/subsref_app_data.h | 3 +-- lasso/xml/id-wsf-2.0/subsref_create.c | 3 +-- lasso/xml/id-wsf-2.0/subsref_create.h | 3 +-- lasso/xml/id-wsf-2.0/subsref_create_item.c | 3 +-- lasso/xml/id-wsf-2.0/subsref_create_item.h | 3 +-- lasso/xml/id-wsf-2.0/subsref_create_response.c | 3 +-- lasso/xml/id-wsf-2.0/subsref_create_response.h | 3 +-- lasso/xml/id-wsf-2.0/subsref_data.c | 3 +-- lasso/xml/id-wsf-2.0/subsref_data.h | 3 +-- lasso/xml/id-wsf-2.0/subsref_data_response.c | 3 +-- lasso/xml/id-wsf-2.0/subsref_data_response.h | 3 +-- lasso/xml/id-wsf-2.0/subsref_delete.c | 3 +-- lasso/xml/id-wsf-2.0/subsref_delete.h | 3 +-- lasso/xml/id-wsf-2.0/subsref_delete_item.c | 3 +-- lasso/xml/id-wsf-2.0/subsref_delete_item.h | 3 +-- lasso/xml/id-wsf-2.0/subsref_delete_response.c | 3 +-- lasso/xml/id-wsf-2.0/subsref_delete_response.h | 3 +-- lasso/xml/id-wsf-2.0/subsref_item_data.c | 3 +-- lasso/xml/id-wsf-2.0/subsref_item_data.h | 3 +-- lasso/xml/id-wsf-2.0/subsref_modify.c | 3 +-- lasso/xml/id-wsf-2.0/subsref_modify.h | 3 +-- lasso/xml/id-wsf-2.0/subsref_modify_item.c | 3 +-- lasso/xml/id-wsf-2.0/subsref_modify_item.h | 3 +-- lasso/xml/id-wsf-2.0/subsref_modify_response.c | 3 +-- lasso/xml/id-wsf-2.0/subsref_modify_response.h | 3 +-- lasso/xml/id-wsf-2.0/subsref_notification.c | 3 +-- lasso/xml/id-wsf-2.0/subsref_notification.h | 3 +-- lasso/xml/id-wsf-2.0/subsref_notify.c | 3 +-- lasso/xml/id-wsf-2.0/subsref_notify.h | 3 +-- lasso/xml/id-wsf-2.0/subsref_notify_response.c | 3 +-- lasso/xml/id-wsf-2.0/subsref_notify_response.h | 3 +-- lasso/xml/id-wsf-2.0/subsref_query.c | 3 +-- lasso/xml/id-wsf-2.0/subsref_query.h | 3 +-- lasso/xml/id-wsf-2.0/subsref_query_item.c | 3 +-- lasso/xml/id-wsf-2.0/subsref_query_item.h | 3 +-- lasso/xml/id-wsf-2.0/subsref_query_response.c | 3 +-- lasso/xml/id-wsf-2.0/subsref_query_response.h | 3 +-- lasso/xml/id-wsf-2.0/subsref_result_query.c | 3 +-- lasso/xml/id-wsf-2.0/subsref_result_query.h | 3 +-- lasso/xml/id-wsf-2.0/subsref_subscription.c | 3 +-- lasso/xml/id-wsf-2.0/subsref_subscription.h | 3 +-- lasso/xml/id-wsf-2.0/subsref_test_item.c | 3 +-- lasso/xml/id-wsf-2.0/subsref_test_item.h | 3 +-- lasso/xml/id-wsf-2.0/util_empty.c | 3 +-- lasso/xml/id-wsf-2.0/util_empty.h | 3 +-- lasso/xml/id-wsf-2.0/util_extension.c | 3 +-- lasso/xml/id-wsf-2.0/util_extension.h | 3 +-- lasso/xml/id-wsf-2.0/util_response.c | 3 +-- lasso/xml/id-wsf-2.0/util_response.h | 3 +-- lasso/xml/id-wsf-2.0/util_status.c | 3 +-- lasso/xml/id-wsf-2.0/util_status.h | 3 +-- lasso/xml/id-wsf-2.0/xml_idwsf2.h | 3 +-- lasso/xml/idwsf_strings.h | 3 +-- lasso/xml/is_help.c | 3 +-- lasso/xml/is_help.h | 3 +-- lasso/xml/is_inquiry.c | 3 +-- lasso/xml/is_inquiry.h | 3 +-- lasso/xml/is_inquiry_element.c | 3 +-- lasso/xml/is_inquiry_element.h | 3 +-- lasso/xml/is_interaction_request.c | 3 +-- lasso/xml/is_interaction_request.h | 3 +-- lasso/xml/is_interaction_response.c | 3 +-- lasso/xml/is_interaction_response.h | 3 +-- lasso/xml/is_interaction_statement.c | 3 +-- lasso/xml/is_interaction_statement.h | 3 +-- lasso/xml/is_item.c | 3 +-- lasso/xml/is_item.h | 3 +-- lasso/xml/is_parameter.c | 3 +-- lasso/xml/is_parameter.h | 3 +-- lasso/xml/is_redirect_request.c | 3 +-- lasso/xml/is_redirect_request.h | 3 +-- lasso/xml/is_select.c | 3 +-- lasso/xml/is_select.h | 3 +-- lasso/xml/is_text.c | 3 +-- lasso/xml/is_text.h | 3 +-- lasso/xml/is_user_interaction.c | 3 +-- lasso/xml/is_user_interaction.h | 3 +-- lasso/xml/lib_assertion.c | 3 +-- lasso/xml/lib_assertion.h | 3 +-- lasso/xml/lib_authentication_statement.c | 3 +-- lasso/xml/lib_authentication_statement.h | 3 +-- lasso/xml/lib_authn_context.c | 3 +-- lasso/xml/lib_authn_context.h | 3 +-- lasso/xml/lib_authn_request.c | 3 +-- lasso/xml/lib_authn_request.h | 3 +-- lasso/xml/lib_authn_request_envelope.c | 3 +-- lasso/xml/lib_authn_request_envelope.h | 3 +-- lasso/xml/lib_authn_response.c | 3 +-- lasso/xml/lib_authn_response.h | 3 +-- lasso/xml/lib_authn_response_envelope.c | 3 +-- lasso/xml/lib_authn_response_envelope.h | 3 +-- lasso/xml/lib_federation_termination_notification.c | 3 +-- lasso/xml/lib_federation_termination_notification.h | 3 +-- lasso/xml/lib_idp_entries.c | 3 +-- lasso/xml/lib_idp_entries.h | 3 +-- lasso/xml/lib_idp_entry.c | 3 +-- lasso/xml/lib_idp_entry.h | 3 +-- lasso/xml/lib_idp_list.c | 3 +-- lasso/xml/lib_idp_list.h | 3 +-- lasso/xml/lib_logout_request.c | 3 +-- lasso/xml/lib_logout_request.h | 3 +-- lasso/xml/lib_logout_response.c | 3 +-- lasso/xml/lib_logout_response.h | 3 +-- lasso/xml/lib_name_identifier_mapping_request.c | 3 +-- lasso/xml/lib_name_identifier_mapping_request.h | 3 +-- lasso/xml/lib_name_identifier_mapping_response.c | 3 +-- lasso/xml/lib_name_identifier_mapping_response.h | 3 +-- lasso/xml/lib_register_name_identifier_request.c | 3 +-- lasso/xml/lib_register_name_identifier_request.h | 3 +-- lasso/xml/lib_register_name_identifier_response.c | 3 +-- lasso/xml/lib_register_name_identifier_response.h | 3 +-- lasso/xml/lib_request_authn_context.c | 3 +-- lasso/xml/lib_request_authn_context.h | 3 +-- lasso/xml/lib_scoping.c | 3 +-- lasso/xml/lib_scoping.h | 3 +-- lasso/xml/lib_status_response.c | 3 +-- lasso/xml/lib_status_response.h | 3 +-- lasso/xml/lib_subject.c | 3 +-- lasso/xml/lib_subject.h | 3 +-- lasso/xml/misc_text_node.c | 3 +-- lasso/xml/misc_text_node.h | 3 +-- lasso/xml/private.h | 3 +-- lasso/xml/sa_credentials.c | 3 +-- lasso/xml/sa_credentials.h | 3 +-- lasso/xml/sa_parameter.c | 3 +-- lasso/xml/sa_parameter.h | 3 +-- lasso/xml/sa_password_transforms.c | 3 +-- lasso/xml/sa_password_transforms.h | 3 +-- lasso/xml/sa_sasl_request.c | 3 +-- lasso/xml/sa_sasl_request.h | 3 +-- lasso/xml/sa_sasl_response.c | 3 +-- lasso/xml/sa_sasl_response.h | 3 +-- lasso/xml/sa_transform.c | 3 +-- lasso/xml/sa_transform.h | 3 +-- lasso/xml/saml-2.0/saml2_action.c | 3 +-- lasso/xml/saml-2.0/saml2_action.h | 3 +-- lasso/xml/saml-2.0/saml2_advice.c | 3 +-- lasso/xml/saml-2.0/saml2_advice.h | 3 +-- lasso/xml/saml-2.0/saml2_assertion.c | 3 +-- lasso/xml/saml-2.0/saml2_assertion.h | 3 +-- lasso/xml/saml-2.0/saml2_attribute.c | 3 +-- lasso/xml/saml-2.0/saml2_attribute.h | 3 +-- lasso/xml/saml-2.0/saml2_attribute_statement.c | 3 +-- lasso/xml/saml-2.0/saml2_attribute_statement.h | 3 +-- lasso/xml/saml-2.0/saml2_attribute_value.c | 3 +-- lasso/xml/saml-2.0/saml2_attribute_value.h | 3 +-- lasso/xml/saml-2.0/saml2_audience_restriction.c | 3 +-- lasso/xml/saml-2.0/saml2_audience_restriction.h | 3 +-- lasso/xml/saml-2.0/saml2_authn_context.c | 3 +-- lasso/xml/saml-2.0/saml2_authn_context.h | 3 +-- lasso/xml/saml-2.0/saml2_authn_statement.c | 3 +-- lasso/xml/saml-2.0/saml2_authn_statement.h | 3 +-- lasso/xml/saml-2.0/saml2_authz_decision_statement.c | 3 +-- lasso/xml/saml-2.0/saml2_authz_decision_statement.h | 3 +-- lasso/xml/saml-2.0/saml2_base_idabstract.c | 3 +-- lasso/xml/saml-2.0/saml2_base_idabstract.h | 3 +-- lasso/xml/saml-2.0/saml2_condition_abstract.c | 3 +-- lasso/xml/saml-2.0/saml2_condition_abstract.h | 3 +-- lasso/xml/saml-2.0/saml2_conditions.c | 3 +-- lasso/xml/saml-2.0/saml2_conditions.h | 3 +-- lasso/xml/saml-2.0/saml2_encrypted_element.c | 3 +-- lasso/xml/saml-2.0/saml2_encrypted_element.h | 3 +-- lasso/xml/saml-2.0/saml2_evidence.c | 3 +-- lasso/xml/saml-2.0/saml2_evidence.h | 3 +-- lasso/xml/saml-2.0/saml2_key_info_confirmation_data.c | 3 +-- lasso/xml/saml-2.0/saml2_key_info_confirmation_data.h | 3 +-- lasso/xml/saml-2.0/saml2_key_info_confirmation_data_type.c | 3 +-- lasso/xml/saml-2.0/saml2_key_info_confirmation_data_type.h | 3 +-- lasso/xml/saml-2.0/saml2_name_id.c | 3 +-- lasso/xml/saml-2.0/saml2_name_id.h | 3 +-- lasso/xml/saml-2.0/saml2_one_time_use.c | 3 +-- lasso/xml/saml-2.0/saml2_one_time_use.h | 3 +-- lasso/xml/saml-2.0/saml2_proxy_restriction.c | 3 +-- lasso/xml/saml-2.0/saml2_proxy_restriction.h | 3 +-- lasso/xml/saml-2.0/saml2_statement_abstract.c | 3 +-- lasso/xml/saml-2.0/saml2_statement_abstract.h | 3 +-- lasso/xml/saml-2.0/saml2_strings.h | 3 +-- lasso/xml/saml-2.0/saml2_subject.c | 3 +-- lasso/xml/saml-2.0/saml2_subject.h | 3 +-- lasso/xml/saml-2.0/saml2_subject_confirmation.c | 3 +-- lasso/xml/saml-2.0/saml2_subject_confirmation.h | 3 +-- lasso/xml/saml-2.0/saml2_subject_confirmation_data.c | 3 +-- lasso/xml/saml-2.0/saml2_subject_confirmation_data.h | 3 +-- lasso/xml/saml-2.0/saml2_subject_locality.c | 3 +-- lasso/xml/saml-2.0/saml2_subject_locality.h | 3 +-- lasso/xml/saml-2.0/saml2_xsd.h | 3 +-- lasso/xml/saml-2.0/samlp2_artifact_resolve.c | 3 +-- lasso/xml/saml-2.0/samlp2_artifact_resolve.h | 3 +-- lasso/xml/saml-2.0/samlp2_artifact_response.c | 3 +-- lasso/xml/saml-2.0/samlp2_artifact_response.h | 3 +-- lasso/xml/saml-2.0/samlp2_assertion_id_request.c | 3 +-- lasso/xml/saml-2.0/samlp2_assertion_id_request.h | 3 +-- lasso/xml/saml-2.0/samlp2_attribute_query.c | 3 +-- lasso/xml/saml-2.0/samlp2_attribute_query.h | 3 +-- lasso/xml/saml-2.0/samlp2_authn_query.c | 3 +-- lasso/xml/saml-2.0/samlp2_authn_query.h | 3 +-- lasso/xml/saml-2.0/samlp2_authn_request.c | 3 +-- lasso/xml/saml-2.0/samlp2_authn_request.h | 3 +-- lasso/xml/saml-2.0/samlp2_authz_decision_query.c | 3 +-- lasso/xml/saml-2.0/samlp2_authz_decision_query.h | 3 +-- lasso/xml/saml-2.0/samlp2_extensions.c | 3 +-- lasso/xml/saml-2.0/samlp2_extensions.h | 3 +-- lasso/xml/saml-2.0/samlp2_idp_entry.c | 3 +-- lasso/xml/saml-2.0/samlp2_idp_entry.h | 3 +-- lasso/xml/saml-2.0/samlp2_idp_list.c | 3 +-- lasso/xml/saml-2.0/samlp2_idp_list.h | 3 +-- lasso/xml/saml-2.0/samlp2_logout_request.c | 3 +-- lasso/xml/saml-2.0/samlp2_logout_request.h | 3 +-- lasso/xml/saml-2.0/samlp2_logout_response.c | 3 +-- lasso/xml/saml-2.0/samlp2_logout_response.h | 3 +-- lasso/xml/saml-2.0/samlp2_manage_name_id_request.c | 3 +-- lasso/xml/saml-2.0/samlp2_manage_name_id_request.h | 3 +-- lasso/xml/saml-2.0/samlp2_manage_name_id_response.c | 3 +-- lasso/xml/saml-2.0/samlp2_manage_name_id_response.h | 3 +-- lasso/xml/saml-2.0/samlp2_name_id_mapping_request.c | 3 +-- lasso/xml/saml-2.0/samlp2_name_id_mapping_request.h | 3 +-- lasso/xml/saml-2.0/samlp2_name_id_mapping_response.c | 3 +-- lasso/xml/saml-2.0/samlp2_name_id_mapping_response.h | 3 +-- lasso/xml/saml-2.0/samlp2_name_id_policy.c | 3 +-- lasso/xml/saml-2.0/samlp2_name_id_policy.h | 3 +-- lasso/xml/saml-2.0/samlp2_request_abstract.c | 3 +-- lasso/xml/saml-2.0/samlp2_request_abstract.h | 3 +-- lasso/xml/saml-2.0/samlp2_requested_authn_context.c | 3 +-- lasso/xml/saml-2.0/samlp2_requested_authn_context.h | 3 +-- lasso/xml/saml-2.0/samlp2_response.c | 3 +-- lasso/xml/saml-2.0/samlp2_response.h | 3 +-- lasso/xml/saml-2.0/samlp2_scoping.c | 3 +-- lasso/xml/saml-2.0/samlp2_scoping.h | 3 +-- lasso/xml/saml-2.0/samlp2_status.c | 3 +-- lasso/xml/saml-2.0/samlp2_status.h | 3 +-- lasso/xml/saml-2.0/samlp2_status_code.c | 3 +-- lasso/xml/saml-2.0/samlp2_status_code.h | 3 +-- lasso/xml/saml-2.0/samlp2_status_detail.c | 3 +-- lasso/xml/saml-2.0/samlp2_status_detail.h | 3 +-- lasso/xml/saml-2.0/samlp2_status_response.c | 3 +-- lasso/xml/saml-2.0/samlp2_status_response.h | 3 +-- lasso/xml/saml-2.0/samlp2_subject_query_abstract.c | 3 +-- lasso/xml/saml-2.0/samlp2_subject_query_abstract.h | 3 +-- lasso/xml/saml-2.0/samlp2_terminate.c | 3 +-- lasso/xml/saml-2.0/samlp2_terminate.h | 3 +-- lasso/xml/saml-2.0/xml_saml2.h | 3 +-- lasso/xml/saml_advice.c | 3 +-- lasso/xml/saml_advice.h | 3 +-- lasso/xml/saml_assertion.c | 3 +-- lasso/xml/saml_assertion.h | 3 +-- lasso/xml/saml_attribute.c | 3 +-- lasso/xml/saml_attribute.h | 3 +-- lasso/xml/saml_attribute_designator.c | 3 +-- lasso/xml/saml_attribute_designator.h | 3 +-- lasso/xml/saml_attribute_statement.c | 3 +-- lasso/xml/saml_attribute_statement.h | 3 +-- lasso/xml/saml_attribute_value.c | 3 +-- lasso/xml/saml_attribute_value.h | 3 +-- lasso/xml/saml_audience_restriction_condition.c | 3 +-- lasso/xml/saml_audience_restriction_condition.h | 3 +-- lasso/xml/saml_authentication_statement.c | 3 +-- lasso/xml/saml_authentication_statement.h | 3 +-- lasso/xml/saml_authority_binding.c | 3 +-- lasso/xml/saml_authority_binding.h | 3 +-- lasso/xml/saml_condition_abstract.c | 3 +-- lasso/xml/saml_condition_abstract.h | 3 +-- lasso/xml/saml_conditions.c | 3 +-- lasso/xml/saml_conditions.h | 3 +-- lasso/xml/saml_name_identifier.c | 3 +-- lasso/xml/saml_name_identifier.h | 3 +-- lasso/xml/saml_statement_abstract.c | 3 +-- lasso/xml/saml_statement_abstract.h | 3 +-- lasso/xml/saml_subject.c | 3 +-- lasso/xml/saml_subject.h | 3 +-- lasso/xml/saml_subject_confirmation.c | 3 +-- lasso/xml/saml_subject_confirmation.h | 3 +-- lasso/xml/saml_subject_locality.c | 3 +-- lasso/xml/saml_subject_locality.h | 3 +-- lasso/xml/saml_subject_statement.c | 3 +-- lasso/xml/saml_subject_statement.h | 3 +-- lasso/xml/saml_subject_statement_abstract.c | 3 +-- lasso/xml/saml_subject_statement_abstract.h | 3 +-- lasso/xml/samlp_request.c | 3 +-- lasso/xml/samlp_request.h | 3 +-- lasso/xml/samlp_request_abstract.c | 3 +-- lasso/xml/samlp_request_abstract.h | 3 +-- lasso/xml/samlp_response.c | 3 +-- lasso/xml/samlp_response.h | 3 +-- lasso/xml/samlp_response_abstract.c | 3 +-- lasso/xml/samlp_response_abstract.h | 3 +-- lasso/xml/samlp_status.c | 3 +-- lasso/xml/samlp_status.h | 3 +-- lasso/xml/samlp_status_code.c | 3 +-- lasso/xml/samlp_status_code.h | 3 +-- lasso/xml/sec_resource_access_statement.c | 3 +-- lasso/xml/sec_resource_access_statement.h | 3 +-- lasso/xml/soap-1.1/soap_body.c | 3 +-- lasso/xml/soap-1.1/soap_body.h | 3 +-- lasso/xml/soap-1.1/soap_detail.c | 3 +-- lasso/xml/soap-1.1/soap_detail.h | 3 +-- lasso/xml/soap-1.1/soap_envelope.c | 3 +-- lasso/xml/soap-1.1/soap_envelope.h | 3 +-- lasso/xml/soap-1.1/soap_fault.c | 3 +-- lasso/xml/soap-1.1/soap_fault.h | 3 +-- lasso/xml/soap-1.1/soap_header.c | 3 +-- lasso/xml/soap-1.1/soap_header.h | 3 +-- lasso/xml/soap-1.1/xml_soap11.h | 3 +-- lasso/xml/soap_binding.c | 3 +-- lasso/xml/soap_binding.h | 3 +-- lasso/xml/soap_binding_consent.c | 3 +-- lasso/xml/soap_binding_consent.h | 3 +-- lasso/xml/soap_binding_correlation.c | 3 +-- lasso/xml/soap_binding_correlation.h | 3 +-- lasso/xml/soap_binding_ext_credential.c | 3 +-- lasso/xml/soap_binding_ext_credential.h | 3 +-- lasso/xml/soap_binding_ext_credentials_context.c | 3 +-- lasso/xml/soap_binding_ext_credentials_context.h | 3 +-- lasso/xml/soap_binding_ext_service_instance_update.c | 3 +-- lasso/xml/soap_binding_ext_service_instance_update.h | 3 +-- lasso/xml/soap_binding_ext_timeout.c | 3 +-- lasso/xml/soap_binding_ext_timeout.h | 3 +-- lasso/xml/soap_binding_processing_context.c | 3 +-- lasso/xml/soap_binding_processing_context.h | 3 +-- lasso/xml/soap_binding_provider.c | 3 +-- lasso/xml/soap_binding_provider.h | 3 +-- lasso/xml/soap_binding_usage_directive.c | 3 +-- lasso/xml/soap_binding_usage_directive.h | 3 +-- lasso/xml/strings.h | 3 +-- lasso/xml/tools.c | 3 +-- lasso/xml/tools.h | 3 +-- lasso/xml/utility_status.c | 3 +-- lasso/xml/utility_status.h | 3 +-- lasso/xml/ws/wsa_attributed_any.c | 3 +-- lasso/xml/ws/wsa_attributed_any.h | 3 +-- lasso/xml/ws/wsa_attributed_qname.c | 3 +-- lasso/xml/ws/wsa_attributed_qname.h | 3 +-- lasso/xml/ws/wsa_attributed_unsigned_long.c | 3 +-- lasso/xml/ws/wsa_attributed_unsigned_long.h | 3 +-- lasso/xml/ws/wsa_attributed_uri.c | 3 +-- lasso/xml/ws/wsa_attributed_uri.h | 3 +-- lasso/xml/ws/wsa_endpoint_reference.c | 3 +-- lasso/xml/ws/wsa_endpoint_reference.h | 3 +-- lasso/xml/ws/wsa_metadata.c | 3 +-- lasso/xml/ws/wsa_metadata.h | 3 +-- lasso/xml/ws/wsa_problem_action.c | 3 +-- lasso/xml/ws/wsa_problem_action.h | 3 +-- lasso/xml/ws/wsa_reference_parameters.c | 3 +-- lasso/xml/ws/wsa_reference_parameters.h | 3 +-- lasso/xml/ws/wsa_relates_to.c | 3 +-- lasso/xml/ws/wsa_relates_to.h | 3 +-- lasso/xml/ws/wsse_embedded.c | 3 +-- lasso/xml/ws/wsse_embedded.h | 3 +-- lasso/xml/ws/wsse_reference.c | 3 +-- lasso/xml/ws/wsse_reference.h | 3 +-- lasso/xml/ws/wsse_security_header.c | 3 +-- lasso/xml/ws/wsse_security_header.h | 3 +-- lasso/xml/ws/wsse_security_token_reference.c | 3 +-- lasso/xml/ws/wsse_security_token_reference.h | 3 +-- lasso/xml/ws/wsse_transformation_parameters.c | 3 +-- lasso/xml/ws/wsse_transformation_parameters.h | 3 +-- lasso/xml/ws/wsse_username_token.c | 3 +-- lasso/xml/ws/wsse_username_token.h | 3 +-- lasso/xml/ws/wsu_timestamp.c | 3 +-- lasso/xml/ws/wsu_timestamp.h | 3 +-- lasso/xml/ws/xml_ws.h | 3 +-- lasso/xml/xml.c | 3 +-- lasso/xml/xml.h | 3 +-- lasso/xml/xml_enc.h | 3 +-- lasso/xml/xml_idff.h | 3 +-- lasso/xml/xml_idwsf.h | 3 +-- m4/ac_check_class.m4 | 4 +--- m4/ac_check_classpath.m4 | 4 +--- m4/ac_check_java_home.m4 | 4 +--- m4/ac_check_rqrd_class.m4 | 4 +--- m4/ac_prog_java.m4 | 4 +--- m4/ac_prog_java_cc.m4 | 4 +--- m4/ac_prog_java_works.m4 | 4 +--- m4/ac_prog_javac.m4 | 4 +--- m4/ac_prog_javac_works.m4 | 4 +--- m4/dps_java_check_class.m4 | 4 +--- m4/dps_libgcj_jar.m4 | 4 +--- m4/dps_xtra_classpath.m4 | 4 +--- tests/assertion_query_saml2.c | 3 +-- tests/basic_tests.c | 3 +-- tests/idwsf2_tests.c | 3 +-- tests/login_tests.c | 3 +-- tests/login_tests_saml2.c | 3 +-- tests/metadata_tests.c | 3 +-- tests/non_regression_tests.c | 3 +-- tests/perfs.c | 3 +-- tests/random_tests.c | 3 +-- tests/tests.c | 3 +-- tests/tests.h | 3 +-- tools/generate_idwsf2_classes.py | 9 +++------ website/web/license.xml | 4 ++-- win32/lasso.rc.in | 3 +-- 815 files changed, 818 insertions(+), 1644 deletions(-) commit 9c08482b46e8d67085de2da38cd6c4b699674206 Author: Benjamin Dauvergne Date: Wed Nov 20 08:49:00 2013 +0100 jenkins.sh: do not ignore errors jenkins.sh | 1 + 1 file changed, 1 insertion(+) commit 080548538d4e2622c04f1a5f9370d8c1889c2959 Author: Frédéric Péters Date: Wed Oct 23 15:31:23 2013 +0200 python: do not fail displaying a non-C error (fixes #3866) The binding does a raise Error('failed to create object') but the local Error exception class expects a lasso error code, and will thus fail if printed. File ".../lasso.py", line 54, in __str__ return '' % (self.__class__.__name__, self.code, _lasso.strError(self.code)) TypeError: an integer is required bindings/python/lang.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit e50981372fb788f4a8b1d4a2e72e7a51fec3ddd1 Author: Benjamin Dauvergne Date: Fri Oct 11 16:35:03 2013 +0200 saml-2.0/provider: when looking for endpoints take a null role as meanning « take the first one » lasso/saml-2.0/provider.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) commit 0bb846a3558beb80ba5e7d4c6696f6cfb724b5f1 Author: Benjamin Dauvergne Date: Thu Oct 10 17:17:04 2013 +0200 saml-2.0/profile: fix typo in commit 8de55 lasso/saml-2.0/profile.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 8de55e4b2a13bf77e41b2355afaef92f351f53a9 Author: Benjamin Dauvergne Date: Thu Oct 10 17:08:20 2013 +0200 saml-2.0/profile: add warning message when unable to build an artifact response message due to an unfound artifact resolution endpoint lasso/saml-2.0/profile.c | 4 ++++ 1 file changed, 4 insertions(+) commit 618017e34e0ff6fc699c535e3a72ac48624badb9 Author: Benjamin Dauvergne Date: Tue Oct 1 15:49:38 2013 +0200 web: update mailing list urls website/web/mailinglists/index.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 680265581235592706cb8eab27c67b53749357b7 Author: Benjamin Dauvergne Date: Fri Sep 27 16:39:40 2013 +0200 debian: add a source/format file source/format | 1 + 1 file changed, 1 insertion(+) commit 25eb3edef9c031719574bdbf39f6dab1873a4781 Author: Benjamin Dauvergne Date: Fri Sep 27 16:39:12 2013 +0200 debian: add a source/format file source/format | 1 + 1 file changed, 1 insertion(+) commit cf1a4a79b007249cc348353a3a77bb0a75145449 Author: Benjamin Dauvergne Date: Fri Sep 27 16:19:03 2013 +0200 toosl/git-version-gen: use a dot to separate the commit string from the regular version tools/git-version-gen | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 1a1d443f91cfbb5100b5212bbd408ae7d8a271d0 Author: Benjamin Dauvergne Date: Fri Sep 27 15:51:02 2013 +0200 lasso/xml/tools.c: fix misuse of xmlURIUnescapeString If the length argument is NULL, the full string is unescaped; the behaviour we expected is to return a 0 length string. lasso/xml/tools.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) commit e70a5746d551aaa8f579c50c09a14e528e4cfcfc Author: Benjamin Dauvergne Date: Fri Sep 27 12:17:48 2013 +0200 tools/git-version-gen: keep the g before the git commit number tools/git-version-gen | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit ed8a8f18cbe1d85760a13de2c51b268324ee5a03 Author: Benjamin Dauvergne Date: Fri Sep 27 12:03:49 2013 +0200 debian: import current packging for debian wheezy changelog | 44 ++++++++++++++++++++++++++++++++++++++++++++ compat | 2 +- control | 24 ++++++++++++------------ control.in | 6 +++--- liblasso-perl.install | 6 +++--- liblasso3-dev.install | 1 - rules | 4 ++-- 7 files changed, 65 insertions(+), 22 deletions(-) commit e4e9c79d93f2953f34c702a6e466d6ef790a0ca4 Author: Benjamin Dauvergne Date: Fri Sep 27 11:57:47 2013 +0200 .gitignore: add more .gitignore | 3 +++ 1 file changed, 3 insertions(+) commit 4100e4bebb7eb55909378afcc38feaf6a1f601af Author: Benjamin Dauvergne Date: Fri Sep 27 09:59:55 2013 +0200 bindings/perl: fix type of size variable incompatible with 64 bits arch bindings/perl/glist_handling.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 8d3dc99d8a51e06d8841470601d014b16713ffeb Author: Benjamin Dauvergne Date: Thu Sep 26 16:38:05 2013 +0200 id-ff/login.c: initialize role status of sp and idp in lasso_login_init_authn_request lasso/id-ff/login.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) commit 310e12b2a1671aa1c65c1b48728f2ea9476d59bb Author: Benjamin Dauvergne Date: Thu Sep 26 15:53:20 2013 +0200 jenkins.sh: build a first time before running distcheck, in order to have the documentation compiled jenkins.sh | 1 + 1 file changed, 1 insertion(+) commit 16beadaff96e1450e5c532722fafb96f41495da6 Author: Benjamin Dauvergne Date: Thu Sep 26 15:51:24 2013 +0200 tests/data/Makefile: regenerate list of files and directories to distribute tests/data/Makefile.am | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) commit 078831bd0e700a08cccb61d6523456ac961dc449 Author: Benjamin Dauvergne Date: Thu Sep 26 15:48:39 2013 +0200 docs/Makefile: always set DIST_SUBDIRS docs/Makefile.am | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) commit cc6ab97ecf994c05713fc88531b68bc07ceb0b82 Author: Benjamin Dauvergne Date: Thu Sep 26 15:40:16 2013 +0200 add jenkins.sh script jenkins.sh | 3 +++ 1 file changed, 3 insertions(+) commit 566e29b3f870048a1cb6887bc7449e44a59ebc69 Author: Benjamin Dauvergne Date: Sun Sep 8 23:53:33 2013 +0200 saml2/profile.c: add resolving of the endpoint index in artifacts * lasso/saml-2.0/profile.c: add new argument role to lasso_saml20_profile_init_artifact_resolve() for looking up ArtifactResolutionService location; extract endpoint index from artifact and use it to resolve the endpoint location. * login.c: pass new argument ; force msg_url as it is preinitialized by lasso_saml20_profile_init_artifact_resolve() lasso/saml-2.0/login.c | 6 +++--- lasso/saml-2.0/profile.c | 22 ++++++++++++++++++---- lasso/saml-2.0/profileprivate.h | 2 +- 3 files changed, 22 insertions(+), 8 deletions(-) commit cfdd3daf208b822e8c6c792157b14861251b655e Author: Benjamin Dauvergne Date: Sun Sep 8 23:39:33 2013 +0200 saml2/provider.c: add new function lasso_saml20_provider_get_endpoint_url() for retrieving endpoint locations using the new endpoints list lasso/saml-2.0/provider.c | 57 ++++++++++++++++++++++++++++++++++++++++ lasso/saml-2.0/providerprivate.h | 3 +++ 2 files changed, 60 insertions(+) commit 3dc786380a4f93e583798d0fae2de1a7c5218d70 Author: Benjamin Dauvergne Date: Sun Sep 8 23:38:33 2013 +0200 errors.{c,h}: add new error LASSO_PROFILE_ERROR_ENDPOINT_INDEX_NOT_FOUND for reporting when a recevied artifact does match any declared endpoint lasso/errors.c | 2 ++ lasso/errors.h | 7 +++++++ 2 files changed, 9 insertions(+) commit 4799770a0d26a8ebb821d52f491d76a7c5b84544 Author: Benjamin Dauvergne Date: Sun Sep 8 21:31:18 2013 +0200 saml2/profile: fix missing ArtifactResolutionService index in artifacts lasso/saml-2.0/profile.c | 19 ++++++++++++------- lasso/saml-2.0/provider.c | 28 +++++++++++++++++++++++++++- lasso/saml-2.0/providerprivate.h | 2 ++ lasso/xml/saml-2.0/saml2_xsd.h | 1 + 4 files changed, 42 insertions(+), 8 deletions(-) commit bb84a8d1887b68619c44d6695b2b080576e70c45 Author: Benjamin Dauvergne Date: Sun Sep 8 21:24:27 2013 +0200 tests: add non-regression test to check that we correctly provide the ArtifactResolutionService index in artifacts .../certificate.pem | 22 +++++++++ .../password | 1 - .../private-key.pem | 53 ++++++++++------------ tests/non_regression_tests.c | 36 ++++++++++++++- 4 files changed, 82 insertions(+), 30 deletions(-) commit 9adc9bfaadac2bb4f450b77146dfa3f72c46084c Author: Benjamin Dauvergne Date: Sun Sep 8 21:21:41 2013 +0200 saml2/login: fix role of providers in process_authn_request() and idp_initiated_authn_request() It is necessary for endpoint resolution to know the role of providers. lasso/saml-2.0/login.c | 9 +++++++++ 1 file changed, 9 insertions(+) commit 53f6f5c5ef0e4b0564efbcf438ffb6a9dab65b65 Author: Benjamin Dauvergne Date: Sun Sep 8 21:19:57 2013 +0200 tests: in check_equals() and check_not_equals() macros use long long int as a catchall type for printing compared values tests/tests.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 05a01a824715de7e8e5d3d65b73e8fc855e5dad9 Author: Benjamin Dauvergne Date: Sun Sep 8 21:23:30 2013 +0200 fix compilation errors on 64bits architectures * sizeof(unsigned int) != sizeof(size_t) * INT_MAX != LONG_MAX lasso/saml-2.0/provider.c | 2 +- lasso/xml/tools.c | 2 +- lasso/xml/xml.c | 2 +- tests/basic_tests.c | 2 +- tests/login_tests.c | 2 +- tests/login_tests_saml2.c | 2 +- tests/tests2.c | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) commit b6faccae0fabfd7e47fc6b86a06fc78367446526 Author: Benjamin Dauvergne Date: Sun Sep 8 21:18:55 2013 +0200 fix warnings about unused but set variables lasso/id-ff/login.c | 2 - lasso/id-ff/logout.c | 5 -- lasso/id-ff/name_registration.c | 8 --- lasso/saml-2.0/login.c | 7 --- lasso/saml-2.0/name_id_management.c | 2 +- lasso/saml-2.0/profile.c | 12 ++-- lasso/saml-2.0/saml2_helper.c | 9 ++- lasso/xml/tools.c | 5 +- lasso/xml/xml.c | 5 +- tests/basic_tests.c | 3 +- .../metadata.xml | 70 ++++++++++++++++++++++ .../password | 1 + .../private-key.pem | 30 ++++++++++ 13 files changed, 115 insertions(+), 44 deletions(-) commit 72e1558b2149df0057cfbc8fc697e7d04d22a5a9 Author: Benjamin Dauvergne Date: Tue Aug 27 01:08:48 2013 +0200 Revert "doc: fix EXTRA_DIST definition in reference/lasso/Makefile.am" This reverts commit a223afc6077528792055def999c29ac5f4d8a418. It seems to be incompatible with recent version of gtk-doc, I need to investigate more this problem. docs/reference/lasso/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit a223afc6077528792055def999c29ac5f4d8a418 Author: Benjamin Dauvergne Date: Tue Aug 27 00:06:20 2013 +0200 doc: fix EXTRA_DIST definition in reference/lasso/Makefile.am docs/reference/lasso/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit f48cd5bbcf19736895d4ebd3f979381a004fcd15 Merge: 6af73738 bd0f935a Author: Benjamin Dauvergne Date: Tue Jul 30 15:31:26 2013 +0200 Merge remote-tracking branch 'origin/libxml2.9-compat' commit 6af73738f660661ce4c4a42e48f561306726d106 Author: Frédéric Péters Date: Sat Jul 20 09:46:34 2013 +0200 website: fix commercial licencee page location website/web/index.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 479eba57defc4fea68b6b901cd45e878cbae1245 Author: Tim Newsome Date: Thu Jun 13 14:16:18 2013 -0700 AM_C_PROTOTYPES is no longer supported in autoconf 1.12. configure.ac | 1 - 1 file changed, 1 deletion(-) commit e8d5b21637db1e06fbb938c1a888f4b988c3e10e Author: Tim Newsome Date: Thu Jun 13 14:15:53 2013 -0700 Add support for automake 1.12. autogen.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit d572326a2f5dbf2254edd304608086d12c09c5d7 Author: Benjamin Dauvergne Date: Tue Jun 4 18:57:03 2013 +0200 configure.ac: do not passe the full version suffix as the release number configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit d1c7f82a64b4455fc47f9d61ba373ba8086c4527 Author: Benjamin Dauvergne Date: Sat Jun 1 10:07:14 2013 +0200 FAQ.rst: start a FAQ file FAQ.rst | 230 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 230 insertions(+) commit 57435048a01fe5bbe2a7c80d879e3c60c5c7785b Author: Benjamin Dauvergne Date: Wed May 15 11:28:25 2013 +0200 configure: generate version number from git revision between tagged release The script git-version-gen is copied from the autoconf project. Makefile.am | 8 +- configure.ac | 2 +- tools/git-version-gen | 225 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 233 insertions(+), 2 deletions(-) commit aa43398da669f48653ce431763bd35264fd5e314 Author: Benjamin Dauvergne Date: Wed Mar 20 21:14:25 2013 +0100 python: fix logout request parsing test adapt to new checks done on logout request nodes bindings/python/tests/profiles_tests.py | 4 ++++ 1 file changed, 4 insertions(+) commit d06f6c698a821827884eb68c7a7e8a832acd1997 Author: Benjamin Dauvergne Date: Wed Mar 20 20:07:49 2013 +0100 tests: comment out dump/restore checks against complex nodes tests/basic_tests.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit b929bd4034c2f66140dd4b763cfeb364afcb4e61 Author: Benjamin Dauvergne Date: Wed Mar 20 20:03:48 2013 +0100 saml-2.0: fix missing signature on logout responses lasso/saml-2.0/logout.c | 3 +++ 1 file changed, 3 insertions(+) commit 1b653d7b272a8f462d4c370aade60472872819a4 Author: Benjamin Dauvergne Date: Thu Mar 7 13:52:03 2013 +0100 pkgconfig: do not leak lasso dependencies to users Change Require into Require.private Thanks to Thijs Kinkhorst and Olav Morken for the suggestion. lasso.pc.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 7994846dfaf74803d5619a7937cb794310eec33c Author: Benjamin Dauvergne Date: Tue Oct 9 16:52:27 2012 +0200 xml-saml-2.0: ManageNameIDRequest must have a NameID lasso/xml/saml-2.0/samlp2_manage_name_id_request.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) commit 0f3093dc56411d8d4042361ff23b5ed6a02a269b Author: Benjamin Dauvergne Date: Tue Oct 9 16:51:49 2012 +0200 xml-saml-2.0: LogoutRequest must have a NameID lasso/xml/saml-2.0/samlp2_logout_request.c | 8 ++++++++ 1 file changed, 8 insertions(+) commit 8e98e432ff221a98297b177ca40d6217f581c0b4 Author: Benjamin Dauvergne Date: Mon Oct 8 19:28:57 2012 +0200 xml: really enforce elements cardinality when parsing messages - add a new SNIPPET_MANDATORY: we could only indicate 0-1 and 0-* cardinalities, now we can also indicate 1-1 and 1-* cardinalities. - repect cadinalities when parsing an xmlNode tree into a LassoNode tree. lasso/xml/private.h | 1 + lasso/xml/xml.c | 112 ++++++++++++++++++++++++++++++++++++---------------- tests/basic_tests.c | 18 ++++++++- 3 files changed, 95 insertions(+), 36 deletions(-) commit 2663c5df950a4ad10aefaa5373fc00971534adb8 Author: Benjamin Dauvergne Date: Mon Oct 8 19:27:56 2012 +0200 xml-saml-2.0: add missing namespace declaration for the KeyInfoSujectConfirmationData sub-type lasso/xml/saml-2.0/saml2_key_info_confirmation_data_type.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 3b812d8d69f5842a91876a12e916b3e2a51fb2e1 Author: Benjamin Dauvergne Date: Mon Oct 8 17:30:55 2012 +0200 fix memory leak in lasso_node_impl_init_from_xml: release the class_list lasso/xml/xml.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) commit be5bcfbb593bda260acfecd56c0d053d1ebcd7a4 Author: Benjamin Dauvergne Date: Mon Oct 8 19:26:49 2012 +0200 utils: add a lasso_release_slist macro lasso/utils.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit a3fb13e36b92df2af83ce64dc342f55ca5a432db Author: Benjamin Dauvergne Date: Mon Oct 8 18:00:07 2012 +0200 add a lasso_release_slist lasso/utils.h | 3 +++ 1 file changed, 3 insertions(+) commit 5d8d8e8441a73728406ced22535646f014e4c17e Author: Benjamin Dauvergne Date: Mon Oct 8 17:29:09 2012 +0200 fix potential segfault in lasso_node_impl_init_from_xml lasso/xml/xml.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) commit 1ebcc767a98e3bd28a9e92734c4d5c8ce6829d96 Author: Benjamin Dauvergne Date: Mon Oct 1 10:55:39 2012 +0200 Fix distcheck build problem in docs/Makefile.am Bug introduced in commit e97a36fa docs/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 267f91a5ca1078b615838b391800955adbff57ce Author: Benjamin Dauvergne Date: Mon Oct 1 10:43:51 2012 +0200 fix warning in docs/reference/lasso/Makefile.am docs/reference/lasso/Makefile.am | 2 -- 1 file changed, 2 deletions(-) commit bd0f935a2450b5779a01e9e5053267ec4cac94d6 Author: Benjamin Dauvergne Date: Fri Sep 28 22:58:10 2012 +0200 Rewrite all xmlNode serialization code to be compatible with libxml 2.9.0 Libxml stopped exposing the internal of the xmlOutputBuffer structure; it was replace by proper use of the API and of the xmlBuffer structure. There could be regression for older version of libxml as some functions appeared in recent version of libxml; but the reference API document does not give any introduction date for functions so it's hard to be sure. bindings/java/wrapper_top.c | 40 +++++++++++++++++-------------- bindings/php5/wrapper_source_top.c | 42 ++++++++++++++++++++------------- bindings/python/wrapper_top.c | 34 +++++++++++++++++--------- docs/reference/lasso/lasso-sections.txt | 8 ++++++- lasso/id-ff/lecp.c | 24 +++---------------- lasso/id-ff/session.c | 23 ++++-------------- lasso/key.c | 6 ++--- lasso/saml-2.0/ecp.c | 25 ++++---------------- lasso/xml/tools.c | 39 +++++++++++++++--------------- 9 files changed, 112 insertions(+), 129 deletions(-) commit e94015f8bcc168c9882348d2e8c5a5138ea56676 Author: Benjamin Dauvergne Date: Wed Sep 26 20:52:59 2012 +0200 fix segfault in saml-2.0/provider.c:load_endpoint_type2 Thanks to Hiromitsu Fujita for the patch. fixes #1582. lasso/saml-2.0/provider.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 050afd224676807a8003315e13ba4aee74d7a18a Author: Benjamin Dauvergne Date: Wed Jul 11 10:57:35 2012 +0200 tests: add a SSO test with DSA keys to python bindings tests bindings/python/tests/profiles_tests.py | 28 +++++++++ tests/data/idp12-dsa-saml2/metadata.xml | 94 ++++++++++++++++++++++++++++++ tests/data/idp12-dsa-saml2/private-key.pem | 12 ++++ 3 files changed, 134 insertions(+) commit f8ea3cda2df9919d57047626ee571893818e9193 Author: Benjamin Dauvergne Date: Thu Jun 21 16:07:07 2012 +0200 Fix compilation on solaris Thanks Wojciech Lichota for the patch. Fixes #1516 configure.ac | 3 +++ lasso/logging.c | 1 + 2 files changed, 4 insertions(+) commit fe5b4da0cf065c5a73a9e51574b7f29a1a3c588d Author: Benjamin Dauvergne Date: Thu Jun 21 16:06:13 2012 +0200 fix SIGSEGV when loading metadata files Thanks Wojciech Lichota for the patch. Fixes #1516 lasso/saml-2.0/provider.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit a8e571b4dd29d2cbd2ac1155edc696fd5b06bb5e Author: Benjamin Dauvergne Date: Sat May 5 23:22:34 2012 +0200 [bindings/php5] remove redundant check to is_transfer_full bindings/php5/wrapper_source.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit b7958a2e3190adf1f157a90742e4dd00115fbd7b Author: Benjamin Dauvergne Date: Sat May 5 23:21:56 2012 +0200 [bindings/php5] add missing release for xmlnodes in return value wrapper bindings/php5/wrapper_source.py | 2 ++ 1 file changed, 2 insertions(+) commit 7e9fffe2b9f5b17e7e24e8f37449b83957144b6e Author: Benjamin Dauvergne Date: Sat May 5 23:18:50 2012 +0200 [abi] update for release 2.4.0 abi/abi-2.4.0 | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) commit e6d904800420ff67703f935184369450b4dfd086 Author: Benjamin Dauvergne Date: Sat May 5 23:18:32 2012 +0200 [bindings/python] in constructors wrappers build the return value before bindings/python/lang.py | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) commit 1473b92b8636bf9f7325ef304a627e5258fbc659 Author: Benjamin Dauvergne Date: Sat May 5 23:00:05 2012 +0200 [bindings/python] free xmlnode argument owned by the callee bindings/python/lang.py | 2 ++ 1 file changed, 2 insertions(+) commit f4fb55bd89f161f29fd99552ca3d33ca11dd59df Author: Benjamin Dauvergne Date: Sat May 5 22:58:26 2012 +0200 [bindings/python] fix some indentation bindings/python/lang.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit df3656df4d9b9ae79a176808a787ece778463ccc Author: Benjamin Dauvergne Date: Sat May 5 22:58:09 2012 +0200 [bindings/python] boolean values does not need to be released bindings/python/lang.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit ec23b2345515e4bbf91f07477950fd89f4ba71b6 Author: Benjamin Dauvergne Date: Sat May 5 22:55:57 2012 +0200 [bindings] add a default parameter to is_transfer_full whose default is False bindings/utils.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) commit b35fc7fffba107332ea8c29d1c98d2fb2f0dc97b Author: Benjamin Dauvergne Date: Sat May 5 22:55:20 2012 +0200 [bindings] improve matching for object types bindings/utils.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit e8e91cbd07caad62d61c0d6ca8226b0111bf3444 Author: Benjamin Dauvergne Date: Sat May 5 22:52:15 2012 +0200 [xml] fix wrong forward declaration lasso/xml/xml.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 8740ef5057c1575e6806fdc339e6a67977cb119d Author: Benjamin Dauvergne Date: Sat May 5 22:51:52 2012 +0200 [xml] add missing include lasso/xml/xml.c | 2 ++ 1 file changed, 2 insertions(+) commit 73a8c1faad7956940efc7c4ffab2e7b04813f8e3 Author: Benjamin Dauvergne Date: Sat May 5 22:51:43 2012 +0200 [xml] fix typos lasso/xml/tools.c | 8 ++++---- lasso/xml/xml.c | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) commit d90b4b4b5cdb998de9d464588ae0672a6720c0f6 Author: Benjamin Dauvergne Date: Sat May 5 22:50:17 2012 +0200 [lasso] add missing GObjectIntrospection annotations to lasso_node_get_original_xmlnode lasso/xml/xml.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit b7af02b1ac69b4a4400ffc99041783390248ad79 Author: Benjamin Dauvergne Date: Sat May 5 22:49:53 2012 +0200 [lasso] add missing GObjectIntrospection annotations to lasso_misc_text_node_get_xml_content lasso/xml/misc_text_node.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 0a483912c45fb2694d68aa8f49158434c7d91fe5 Author: Benjamin Dauvergne Date: Sat May 5 22:35:19 2012 +0200 [NEWS] improve 2.4.0 release notes NEWS | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) commit c7cf89b387cbc52d7d49d09b65a13af6bd0c47c2 Merge: d3c702e1 f3409ece Author: Benjamin Dauvergne Date: Sat May 5 22:32:48 2012 +0200 Merge branch 'release-2.4.0' commit d3c702e130ab654fd47081c1460f2f8527d10bc8 Author: Benjamin Dauvergne Date: Fri Apr 27 15:54:51 2012 +0200 fix wrong EXTRA_DIST in lasso/xml/dsig/Makefile.am lasso/xml/dsig/Makefile.am | 4 ++-- lasso/xml/dsig/xml_dsig.h | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 2 deletions(-) commit d2d26b7d56f07755c4203865ba09cc7e06dd0689 Author: Thomas NOEL Date: Thu Apr 26 15:26:51 2012 +0200 fix compilation error with xmlsec 1.2.18 / freebsd (#1365) see http://dev.entrouvert.org/issues/1365 lasso/xml/xml.c | 1 + 1 file changed, 1 insertion(+) commit e97a36faac64dea67b8c23e97876dd04363253ff Author: Frédéric Péters Date: Mon Apr 23 09:23:48 2012 +0200 Allow building from git without gtk-doc installed autogen.sh | 11 +++++++++-- configure.ac | 7 +++++++ docs/Makefile.am | 8 +++++++- docs/reference/lasso/Makefile.am | 2 ++ 4 files changed, 25 insertions(+), 3 deletions(-) commit f3409ece4dab64da843f118f2739481c1bff2613 Author: Benjamin Dauvergne Date: Fri Apr 6 09:46:34 2012 +0200 [saml2] modify behaviour of lasso_saml2_assertion_add_attribute_with_node If an AttributeStatement already exists, we add the new attribute to it. lasso/saml-2.0/saml2_helper.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) commit 952c0f552cddeeaa7d9b9c2914a2c651baceb58c Author: Frédéric Péters Date: Mon Apr 2 23:47:40 2012 +0200 build: do not include multiple glib headers configure.ac | 2 +- lasso/errors.c | 2 +- lasso/errors.c.in | 2 +- lasso/xml/xml.h | 1 - 4 files changed, 3 insertions(+), 4 deletions(-) commit 6125a2ad4fd04f886893a48390d6ececc5019036 Author: Benjamin Dauvergne Date: Sun Mar 25 17:22:30 2012 +0200 [core] including glib headers directly is deprecated, we must only use now lasso/errors.c | 2 +- lasso/errors.c.in | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 466b6f37468f1f9b2ed5aa6f7ffca8145a5f8ef0 Author: Benjamin Dauvergne Date: Sat Mar 17 15:26:57 2012 +0100 [tests] add test cases for the LassoKey class tests/basic_tests.c | 2 - tests/random_tests.c | 104 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 104 insertions(+), 2 deletions(-) commit f42bef083667ce29e43dced8947e905febd158ef Author: Benjamin Dauvergne Date: Sat Mar 17 15:26:21 2012 +0100 [key] add methods to send message using SAML 2.0 redirect and post bindings lasso/key.c | 153 +++++++++++++++++++++++++++++++++++++++++++++++++++- lasso/key.h | 10 +++- lasso/xml/private.h | 8 ++- lasso/xml/tools.c | 120 ++++++++++++++++++++++++++++++++++++++--- lasso/xml/xml.c | 143 +++++++++++++++++++++++++++--------------------- lasso/xml/xml.h | 5 ++ 6 files changed, 368 insertions(+), 71 deletions(-) commit f55c92725510f102a778878b45561aaba8ab887d Author: Benjamin Dauvergne Date: Sat Mar 17 15:21:23 2012 +0100 [saml2] fix handling of SingleSignOnServer in lasso_saml20_provider_get_first_http_method When checking if a synchronous http method can be used for sending a request to the SingleSignOnService we must check if the response can received by the AssertionConsumerService with a synchronous binding not the SingleSignOnService. lasso/saml-2.0/provider.c | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) commit 33bff4308fff6cd4e4283afb6486db4943c0344b Author: Frédéric Péters Date: Mon Mar 5 14:02:17 2012 +0100 php5: use zend_function_entry, for compatibility with PHP 5.4 bindings/php5/wrapper_source.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit d96960360496245a1a9e259b08b0afcabc9149e6 Author: Benjamin Dauvergne Date: Fri Mar 2 15:44:55 2012 +0100 [bindings php5] fix missing wrappers for constructors bindings/php5/php_code.py | 41 ++++++++++++++++++++++++++++++----------- 1 file changed, 30 insertions(+), 11 deletions(-) commit 2a9d50b69dd5149c0b26450a6f1fa417c1ae538c Author: Benjamin Dauvergne Date: Mon Feb 27 11:33:35 2012 +0100 [bindings php5] improve generation of php call stubs by using type case helpers, raise exception in unknown case bindings/php5/php_code.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) commit bb244a6ebedd7acd0f822874d6ad75da74284cf4 Author: Benjamin Dauvergne Date: Sat Feb 25 14:40:42 2012 +0100 [website] add piwik tracking code to base template website/templates/base.ezt | 12 ++++++++++++ 1 file changed, 12 insertions(+) commit 8aba7d48404f3345ce65496e50f5cfec1aafb6dc Author: Benjamin Dauvergne Date: Thu Dec 29 19:59:52 2011 +0100 update NEWS NEWS | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) commit 892ffac34f6c9b095025cb293438c030dd9d51a9 Author: Benjamin Dauvergne Date: Thu Jun 9 17:37:46 2011 +0200 Add release notes NEWS | 77 +++++++++++++++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 53 insertions(+), 24 deletions(-) commit bfaaa12144687e633346b269e99801457b6a54da Author: Benjamin Dauvergne Date: Fri Jun 3 09:27:14 2011 +0200 Add missing abi files abi/abi-2.3.3 | 1114 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ abi/abi-2.3.4 | 1114 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ abi/abi-2.3.5 | 1115 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 3343 insertions(+) commit 75d84acf57e2850ed1638944a10d33ace4200ddb Author: Benjamin Dauvergne Date: Sun May 8 04:48:48 2011 +0200 Update files for release 2.4.0 NEWS | 26 ++ abi/abi-2.4.0 | 1125 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ configure.ac | 4 +- 3 files changed, 1153 insertions(+), 2 deletions(-) commit 08ec0a6fb7d78277b9194d19b53b21c851afe326 Author: Benjamin Dauvergne Date: Thu Dec 29 11:52:38 2011 +0100 Incompatibility with clang: local functions with closure does not work lasso/xml/tools.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) commit 8f06751564ed5f767345e17ae0f09ee8199e4a49 Merge: 69c61627 af4c8de9 Author: Benjamin Dauvergne Date: Fri Dec 23 11:21:36 2011 +0100 Merge branch 'more-datas-in-sessions' commit af4c8de94722d51dd000276eb5e51c26c314f903 Author: Benjamin Dauvergne Date: Fri Dec 23 11:09:47 2011 +0100 [tests] remove work-around for letting ID-FF 1.2 tests work with the thin-sessions flag activated But when thin-sessions is activated we use the new way of passing artifact message content around. tests/login_tests.c | 45 ++++++++++++++++++++++++--------------------- 1 file changed, 24 insertions(+), 21 deletions(-) commit 7b3b7d690036f218e31d30fac12da3f089dbb737 Author: Benjamin Dauvergne Date: Fri Dec 23 10:56:27 2011 +0100 [id-ff 1.2] change websso with artifact binding to work as SAML 2.0 The old way of transmiting the assertion to return via the session is kept, but a new way more semblable to the one used in the SAML 2.0 code is added. After lasso_login_build_artifact_msg() you must save the return of lasso_profile_get_artifact_message() linked to the value of the artifact obtained via lasso_profile_get_artifact(). In the artifact-resolve endpoint you must find the artifact message corresponding to the return value of lasso_profile_get_artifact() reinstall the artifact message using lasso_profile_set_artifact_message() just before calling lasso_login_build_response_msg(). This change is necessary for ID-FF 1.2 SSO profile to work with the thin-sessions. lasso/id-ff/login.c | 69 +++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 48 insertions(+), 21 deletions(-) commit 1907d66f1adbe2223d34144646debea6c4b5de5a Author: Benjamin Dauvergne Date: Thu Dec 22 18:55:52 2011 +0100 [id-ff 1.2] in lasso_login_build_assertion() always add the assertion to the response lasso/id-ff/login.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) commit 56d584ca69bf83d71bff52ecbf8fa3df6216c790 Author: Benjamin Dauvergne Date: Thu Dec 22 18:22:12 2011 +0100 [tests] protect the ID-FF 1.2 test cases from effect of the thin-sessions flag until it is migrated to work also with thin sessions tests/login_tests.c | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) commit 3dca5c2afa97fd3f80fd2765d3e4d3d2bd2b9539 Author: Benjamin Dauvergne Date: Thu Dec 22 18:21:12 2011 +0100 [doc] do some documentation fixing docs/reference/lasso/lasso-docs.sgml | 2 +- docs/reference/lasso/lasso-sections.txt | 1 - lasso/id-ff/profile.c | 2 +- lasso/id-ff/profile.h | 3 +++ lasso/xml/strings.h | 6 +++--- 5 files changed, 8 insertions(+), 6 deletions(-) commit 26b341a2765aabbe9d90caf956a3bcaaba8b6dd1 Author: Benjamin Dauvergne Date: Thu Dec 22 18:19:29 2011 +0100 [id-ff 1.2] provision the SessionIndex into the assertions Without it SLO session management is broken. lasso/id-ff/login.c | 6 ++++++ 1 file changed, 6 insertions(+) commit b016558d06547c7514a2d0ada56980b8c10af744 Author: Benjamin Dauvergne Date: Thu Dec 22 18:18:23 2011 +0100 [id-ff 1.1] add support for multiple SessionIndex to lib:LogoutRequest Combined with the new LassoSession storage for SessionIndex, it should fix many bugs when doing SLO. lasso/id-ff/logout.c | 112 ++++++++++++----------------------------- lasso/xml/lib_logout_request.c | 64 +++++++++++++++++++++++ lasso/xml/lib_logout_request.h | 7 +++ 3 files changed, 103 insertions(+), 80 deletions(-) commit ee4058bc221af53b3195639470b43a504402b904 Author: Benjamin Dauvergne Date: Thu Dec 22 18:16:46 2011 +0100 [saml 2.0] use the new SessionIndex storage for SLO management It shoulf fix any missing functionnalities regarding missing session indexes in logout requests sent by identity providers or service providers. lasso/saml-2.0/login.c | 58 +++++++++++-------- lasso/saml-2.0/logout.c | 146 ++++++++++++++++++------------------------------ 2 files changed, 89 insertions(+), 115 deletions(-) commit 7498143628640ecd5606f2e05457118cb6aaadde Author: Benjamin Dauvergne Date: Thu Dec 22 18:13:48 2011 +0100 [core] add support for thin-sessions environment flag, to reduce size of LassoSession dumps lasso/debug.h | 1 + lasso/id-ff/session.c | 3 +++ lasso/lasso.c | 5 +++++ 3 files changed, 9 insertions(+) commit b6466549f650fe81024df25f91cc1523a16ad96f Author: Benjamin Dauvergne Date: Thu Dec 22 18:12:49 2011 +0100 [core] add simpler storage for SessionIndexes in the LassoSession lasso/id-ff/session.c | 417 +++++++++++++++++++++++++++++++++++++++---- lasso/id-ff/session.h | 7 + lasso/id-ff/sessionprivate.h | 6 + 3 files changed, 400 insertions(+), 30 deletions(-) commit ccfa38bf311f807f5163c8c69c7e12d7d37bfa7a Author: Benjamin Dauvergne Date: Mon Dec 19 17:38:10 2011 +0100 [id-ff 1.2] add lasso_saml_name_identifier_equals() to compare NameIDs lasso/xml/saml_name_identifier.c | 14 ++++++++++++++ lasso/xml/saml_name_identifier.h | 3 +++ 2 files changed, 17 insertions(+) commit 69c61627d3b8494c9f8544f19293c9b345ec103d Author: Benjamin Dauvergne Date: Mon Dec 19 15:34:06 2011 +0100 [website] remove the buildbox link for now website/templates/base.ezt | 2 -- 1 file changed, 2 deletions(-) commit eac3567fa7a08e026263f4d290b196c7ee2f1218 Author: Benjamin Dauvergne Date: Mon Dec 19 15:33:49 2011 +0100 [website] target the bug report link to on redmine website/templates/base.ezt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 476baa59f771fd15706668987be1ea6bc2e45f15 Author: Benjamin Dauvergne Date: Fri Dec 16 18:12:36 2011 +0100 [saml2] fix lasso_saml20_logout_validate_request when more than one SessionIndex is sent lasso/saml-2.0/logout.c | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) commit f407bdf6aa5bb9b2f0b0c67990b695aa73c00f84 Author: Benjamin Dauvergne Date: Fri Dec 16 18:11:54 2011 +0100 [Makefile] add strings.h to the dsig module includes lasso/xml/dsig/Makefile.am | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 10870cc327f8ecfad2acd66da71a3472e8bfb87d Author: Benjamin Dauvergne Date: Fri Dec 16 14:31:12 2011 +0100 [xml/saml2] replace magic string by a define lasso/xml/saml-2.0/saml2_encrypted_element.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 727f07b1ae92896912259453da126dd2cd1fd276 Author: Benjamin Dauvergne Date: Fri Dec 16 14:17:31 2011 +0100 Simplify useless complexity in include paths bindings/perl/lang.py | 6 +- lasso/errors.h | 2 +- lasso/export.h | 2 +- lasso/id-ff/profile.c | 2 +- lasso/id-ff/profileprivate.h | 2 +- lasso/id-ff/serverprivate.h | 2 +- lasso/id-wsf-2.0/data_service.c | 8 +- lasso/id-wsf-2.0/discovery.c | 8 +- lasso/id-wsf-2.0/idwsf2_helper.c | 2 +- lasso/id-wsf-2.0/idwsf2_helper.h | 2 +- lasso/id-wsf-2.0/profile.c | 4 +- lasso/id-wsf-2.0/saml2_login.c | 4 +- lasso/id-wsf-2.0/soap_binding.c | 2 +- lasso/id-wsf/authentication.c | 2 +- lasso/id-wsf/data_service.c | 6 +- lasso/id-wsf/discovery.c | 8 +- lasso/id-wsf/id_wsf.h | 18 +- lasso/id-wsf/interaction_profile_service.c | 4 +- lasso/id-wsf/personal_profile_service.c | 8 +- lasso/id-wsf/wsf_profile.c | 8 +- lasso/key.c | 6 +- lasso/key.h | 2 +- lasso/keyprivate.h | 2 +- lasso/lasso.c | 14 +- lasso/logging.c | 4 +- lasso/logging.h | 2 +- lasso/registry.c | 6 +- lasso/registry.h | 2 +- lasso/saml-2.0/assertion_query.c | 6 +- lasso/saml-2.0/login.c | 10 +- lasso/saml-2.0/profile.c | 8 +- lasso/saml-2.0/provider.c | 2 +- lasso/saml-2.0/saml2_helper.c | 4 +- lasso/utils.c | 2 +- lasso/utils.h | 8 +- lasso/xml/disco_authenticate_requester.c | 2 +- lasso/xml/disco_authenticate_session_context.c | 2 +- lasso/xml/disco_authorize_requester.c | 2 +- lasso/xml/disco_credentials.c | 2 +- lasso/xml/disco_description.c | 2 +- lasso/xml/disco_encrypt_resource_id.c | 2 +- lasso/xml/disco_encrypted_resource_id.c | 2 +- lasso/xml/disco_generate_bearer_token.c | 2 +- lasso/xml/disco_insert_entry.c | 2 +- lasso/xml/disco_modify.c | 2 +- lasso/xml/disco_modify_response.c | 2 +- lasso/xml/disco_options.c | 2 +- lasso/xml/disco_query.c | 2 +- lasso/xml/disco_query_response.c | 2 +- lasso/xml/disco_remove_entry.c | 2 +- lasso/xml/disco_requested_service_type.c | 2 +- lasso/xml/disco_resource_id.c | 2 +- lasso/xml/disco_resource_offering.c | 2 +- lasso/xml/disco_send_single_logout.c | 2 +- lasso/xml/disco_service_instance.c | 2 +- lasso/xml/dsig/ds_key_info.c | 2 +- lasso/xml/dsig/ds_key_info.h | 2 +- lasso/xml/dsig/ds_key_value.c | 2 +- lasso/xml/dsig/ds_key_value.h | 4 +- lasso/xml/dsig/ds_rsa_key_value.c | 2 +- lasso/xml/dsig/ds_x509_data.c | 2 +- lasso/xml/dst_data.c | 2 +- lasso/xml/dst_modification.c | 2 +- lasso/xml/dst_modify.c | 2 +- lasso/xml/dst_modify_response.c | 2 +- lasso/xml/dst_new_data.c | 2 +- lasso/xml/dst_query.c | 2 +- lasso/xml/dst_query_item.c | 2 +- lasso/xml/dst_query_response.c | 2 +- lasso/xml/id-wsf-2.0/disco_abstract.c | 2 +- lasso/xml/id-wsf-2.0/disco_endpoint_context.c | 2 +- lasso/xml/id-wsf-2.0/disco_keys.c | 2 +- lasso/xml/id-wsf-2.0/disco_options.c | 2 +- lasso/xml/id-wsf-2.0/disco_provider_id.c | 2 +- lasso/xml/id-wsf-2.0/disco_query.c | 2 +- lasso/xml/id-wsf-2.0/disco_query_response.c | 2 +- lasso/xml/id-wsf-2.0/disco_requested_service.c | 2 +- lasso/xml/id-wsf-2.0/disco_security_context.c | 2 +- lasso/xml/id-wsf-2.0/disco_service_context.c | 2 +- lasso/xml/id-wsf-2.0/disco_service_type.c | 2 +- .../xml/id-wsf-2.0/disco_svc_md_association_add.c | 2 +- .../disco_svc_md_association_add_response.c | 2 +- .../id-wsf-2.0/disco_svc_md_association_delete.c | 2 +- .../disco_svc_md_association_delete_response.c | 2 +- .../id-wsf-2.0/disco_svc_md_association_query.c | 2 +- .../disco_svc_md_association_query_response.c | 2 +- lasso/xml/id-wsf-2.0/disco_svc_md_delete.c | 2 +- .../xml/id-wsf-2.0/disco_svc_md_delete_response.c | 2 +- lasso/xml/id-wsf-2.0/disco_svc_md_query.c | 2 +- lasso/xml/id-wsf-2.0/disco_svc_md_query_response.c | 2 +- lasso/xml/id-wsf-2.0/disco_svc_md_register.c | 2 +- .../id-wsf-2.0/disco_svc_md_register_response.c | 2 +- lasso/xml/id-wsf-2.0/disco_svc_md_replace.c | 2 +- .../xml/id-wsf-2.0/disco_svc_md_replace_response.c | 2 +- lasso/xml/id-wsf-2.0/disco_svc_metadata.c | 2 +- lasso/xml/id-wsf-2.0/dst_data_response_base.c | 2 +- lasso/xml/id-wsf-2.0/dst_delete_item_base.c | 2 +- lasso/xml/id-wsf-2.0/dst_delete_response.c | 2 +- lasso/xml/id-wsf-2.0/dst_request.c | 2 +- lasso/xml/id-wsf-2.0/dst_result_query_base.c | 2 +- lasso/xml/id-wsf-2.0/dst_test_item_base.c | 2 +- lasso/xml/id-wsf-2.0/dstref_app_data.c | 2 +- lasso/xml/id-wsf-2.0/dstref_create.c | 2 +- lasso/xml/id-wsf-2.0/dstref_create_item.c | 2 +- lasso/xml/id-wsf-2.0/dstref_create_response.c | 2 +- lasso/xml/id-wsf-2.0/dstref_data.c | 2 +- lasso/xml/id-wsf-2.0/dstref_data_response.c | 2 +- lasso/xml/id-wsf-2.0/dstref_delete.c | 2 +- lasso/xml/id-wsf-2.0/dstref_delete_item.c | 2 +- lasso/xml/id-wsf-2.0/dstref_delete_response.c | 2 +- lasso/xml/id-wsf-2.0/dstref_item_data.c | 2 +- lasso/xml/id-wsf-2.0/dstref_modify.c | 2 +- lasso/xml/id-wsf-2.0/dstref_modify_item.c | 2 +- lasso/xml/id-wsf-2.0/dstref_modify_response.c | 2 +- lasso/xml/id-wsf-2.0/dstref_query.c | 2 +- lasso/xml/id-wsf-2.0/dstref_query_item.c | 2 +- lasso/xml/id-wsf-2.0/dstref_query_response.c | 2 +- lasso/xml/id-wsf-2.0/dstref_result_query.c | 2 +- lasso/xml/id-wsf-2.0/dstref_test_item.c | 2 +- .../xml/id-wsf-2.0/ims_identity_mapping_request.c | 2 +- .../xml/id-wsf-2.0/ims_identity_mapping_response.c | 2 +- lasso/xml/id-wsf-2.0/ims_mapping_input.c | 2 +- lasso/xml/id-wsf-2.0/ims_mapping_output.c | 2 +- lasso/xml/id-wsf-2.0/is_help.c | 2 +- lasso/xml/id-wsf-2.0/is_inquiry.c | 2 +- lasso/xml/id-wsf-2.0/is_inquiry_element.c | 2 +- lasso/xml/id-wsf-2.0/is_interaction_request.c | 2 +- lasso/xml/id-wsf-2.0/is_interaction_response.c | 2 +- lasso/xml/id-wsf-2.0/is_interaction_statement.c | 2 +- lasso/xml/id-wsf-2.0/is_item.c | 2 +- lasso/xml/id-wsf-2.0/is_parameter.c | 2 +- lasso/xml/id-wsf-2.0/is_select.c | 2 +- lasso/xml/id-wsf-2.0/is_text.c | 2 +- lasso/xml/id-wsf-2.0/ps_add_collection_request.c | 2 +- lasso/xml/id-wsf-2.0/ps_add_collection_response.c | 2 +- lasso/xml/id-wsf-2.0/ps_add_entity_request.c | 2 +- lasso/xml/id-wsf-2.0/ps_add_entity_response.c | 2 +- lasso/xml/id-wsf-2.0/ps_add_known_entity_request.c | 2 +- .../xml/id-wsf-2.0/ps_add_known_entity_response.c | 2 +- .../xml/id-wsf-2.0/ps_add_to_collection_request.c | 2 +- lasso/xml/id-wsf-2.0/ps_get_object_info_request.c | 2 +- lasso/xml/id-wsf-2.0/ps_get_object_info_response.c | 2 +- lasso/xml/id-wsf-2.0/ps_item_data.c | 2 +- lasso/xml/id-wsf-2.0/ps_list_members_request.c | 2 +- lasso/xml/id-wsf-2.0/ps_list_members_response.c | 2 +- lasso/xml/id-wsf-2.0/ps_notification.c | 2 +- lasso/xml/id-wsf-2.0/ps_notify.c | 2 +- lasso/xml/id-wsf-2.0/ps_object.c | 2 +- lasso/xml/id-wsf-2.0/ps_query_objects_request.c | 2 +- lasso/xml/id-wsf-2.0/ps_query_objects_response.c | 2 +- .../xml/id-wsf-2.0/ps_remove_collection_request.c | 2 +- lasso/xml/id-wsf-2.0/ps_remove_entity_request.c | 2 +- .../id-wsf-2.0/ps_remove_from_collection_request.c | 2 +- lasso/xml/id-wsf-2.0/ps_request_abstract.c | 2 +- .../xml/id-wsf-2.0/ps_resolve_identifier_request.c | 2 +- .../id-wsf-2.0/ps_resolve_identifier_response.c | 2 +- lasso/xml/id-wsf-2.0/ps_resolve_input.c | 2 +- lasso/xml/id-wsf-2.0/ps_response_abstract.c | 2 +- lasso/xml/id-wsf-2.0/ps_set_object_info_request.c | 2 +- lasso/xml/id-wsf-2.0/ps_test_membership_request.c | 2 +- lasso/xml/id-wsf-2.0/ps_test_membership_response.c | 2 +- lasso/xml/id-wsf-2.0/sb2_consent.c | 2 +- lasso/xml/id-wsf-2.0/sb2_credentials_context.c | 2 +- lasso/xml/id-wsf-2.0/sb2_endpoint_update.c | 2 +- lasso/xml/id-wsf-2.0/sb2_redirect_request.c | 2 +- lasso/xml/id-wsf-2.0/sb2_sender.c | 2 +- lasso/xml/id-wsf-2.0/sb2_target_identity.c | 2 +- lasso/xml/id-wsf-2.0/sb2_timeout.c | 2 +- lasso/xml/id-wsf-2.0/sb2_usage_directive.c | 2 +- lasso/xml/id-wsf-2.0/sb2_user_interaction_header.c | 2 +- lasso/xml/id-wsf-2.0/sbf_framework.c | 2 +- lasso/xml/id-wsf-2.0/sec_token.c | 2 +- lasso/xml/id-wsf-2.0/sec_token_policy.c | 2 +- lasso/xml/id-wsf-2.0/sec_transited_provider_path.c | 2 +- lasso/xml/id-wsf-2.0/subs_notification.c | 2 +- lasso/xml/id-wsf-2.0/subs_notify_response.c | 2 +- lasso/xml/id-wsf-2.0/subs_ref_item.c | 2 +- lasso/xml/id-wsf-2.0/subs_subscription.c | 2 +- lasso/xml/id-wsf-2.0/subsref_app_data.c | 2 +- lasso/xml/id-wsf-2.0/subsref_create.c | 2 +- lasso/xml/id-wsf-2.0/subsref_create_item.c | 2 +- lasso/xml/id-wsf-2.0/subsref_create_response.c | 2 +- lasso/xml/id-wsf-2.0/subsref_data.c | 2 +- lasso/xml/id-wsf-2.0/subsref_data_response.c | 2 +- lasso/xml/id-wsf-2.0/subsref_delete.c | 2 +- lasso/xml/id-wsf-2.0/subsref_delete_item.c | 2 +- lasso/xml/id-wsf-2.0/subsref_delete_response.c | 2 +- lasso/xml/id-wsf-2.0/subsref_item_data.c | 2 +- lasso/xml/id-wsf-2.0/subsref_modify.c | 2 +- lasso/xml/id-wsf-2.0/subsref_modify_item.c | 2 +- lasso/xml/id-wsf-2.0/subsref_modify_response.c | 2 +- lasso/xml/id-wsf-2.0/subsref_notification.c | 2 +- lasso/xml/id-wsf-2.0/subsref_notify.c | 2 +- lasso/xml/id-wsf-2.0/subsref_notify_response.c | 2 +- lasso/xml/id-wsf-2.0/subsref_query.c | 2 +- lasso/xml/id-wsf-2.0/subsref_query_item.c | 2 +- lasso/xml/id-wsf-2.0/subsref_query_response.c | 2 +- lasso/xml/id-wsf-2.0/subsref_result_query.c | 2 +- lasso/xml/id-wsf-2.0/subsref_subscription.c | 2 +- lasso/xml/id-wsf-2.0/subsref_test_item.c | 2 +- lasso/xml/id-wsf-2.0/util_empty.c | 2 +- lasso/xml/id-wsf-2.0/util_extension.c | 2 +- lasso/xml/id-wsf-2.0/util_response.c | 2 +- lasso/xml/id-wsf-2.0/util_status.c | 2 +- lasso/xml/id-wsf-2.0/xml_idwsf2.h | 272 ++++++++++----------- lasso/xml/is_help.c | 2 +- lasso/xml/is_inquiry.c | 2 +- lasso/xml/is_inquiry_element.c | 2 +- lasso/xml/is_interaction_request.c | 2 +- lasso/xml/is_interaction_response.c | 2 +- lasso/xml/is_interaction_statement.c | 2 +- lasso/xml/is_item.c | 2 +- lasso/xml/is_parameter.c | 2 +- lasso/xml/is_redirect_request.c | 2 +- lasso/xml/is_select.c | 2 +- lasso/xml/is_text.c | 2 +- lasso/xml/is_user_interaction.c | 2 +- lasso/xml/lib_register_name_identifier_request.c | 4 +- lasso/xml/misc_text_node.c | 4 +- lasso/xml/sa_credentials.c | 2 +- lasso/xml/sa_parameter.c | 2 +- lasso/xml/sa_password_transforms.c | 2 +- lasso/xml/sa_sasl_request.c | 2 +- lasso/xml/sa_sasl_response.c | 2 +- lasso/xml/sa_transform.c | 2 +- .../saml2_key_info_confirmation_data_type.h | 2 +- lasso/xml/saml-2.0/samlp2_response.c | 6 +- lasso/xml/saml-2.0/samlp2_status_response.c | 4 +- lasso/xml/saml-2.0/xml_saml2.h | 104 ++++---- lasso/xml/saml_subject_confirmation.h | 2 +- lasso/xml/sec_resource_access_statement.c | 2 +- lasso/xml/soap-1.1/soap_body.c | 2 +- lasso/xml/soap-1.1/soap_detail.c | 2 +- lasso/xml/soap-1.1/soap_envelope.c | 2 +- lasso/xml/soap-1.1/soap_envelope.h | 4 +- lasso/xml/soap-1.1/soap_fault.c | 2 +- lasso/xml/soap-1.1/soap_fault.h | 2 +- lasso/xml/soap-1.1/soap_header.c | 2 +- lasso/xml/soap-1.1/xml_soap11.h | 10 +- lasso/xml/soap_binding.h | 6 +- lasso/xml/soap_binding_consent.c | 2 +- lasso/xml/soap_binding_correlation.c | 2 +- lasso/xml/soap_binding_ext_credential.c | 2 +- lasso/xml/soap_binding_ext_credentials_context.c | 2 +- .../xml/soap_binding_ext_service_instance_update.c | 2 +- lasso/xml/soap_binding_ext_timeout.c | 2 +- lasso/xml/soap_binding_processing_context.c | 2 +- lasso/xml/soap_binding_provider.c | 2 +- lasso/xml/soap_binding_usage_directive.c | 2 +- lasso/xml/strings.h | 4 +- lasso/xml/ws/wsse_username_token.c | 2 +- lasso/xml/ws/xml_ws.h | 32 +-- lasso/xml/xml.c | 10 +- lasso/xml/xml_idff.h | 106 ++++---- lasso/xml/xml_idwsf.h | 116 ++++----- tests/assertion_query_saml2.c | 2 +- tests/basic_tests.c | 2 +- tests/idwsf2_tests.c | 22 +- tests/login_tests.c | 4 +- tests/login_tests_saml2.c | 2 +- tests/metadata_tests.c | 6 +- tests/non_regression_tests.c | 16 +- tests/perfs.c | 6 +- tests/random_tests.c | 10 +- 264 files changed, 672 insertions(+), 672 deletions(-) commit 4da50110018c69e926bd09bd16c6650f41c13db1 Author: Benjamin Dauvergne Date: Fri Dec 16 14:01:30 2011 +0100 [xml] in is_interaction_request.h move new field to the end of the structure fto limit ABI impact lasso/xml/is_interaction_request.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit ff3ae1ea77096ac48a42ad34850e5ad34f93f591 Merge: 5e5c38b4 e2c6b92f Author: Benjamin Dauvergne Date: Fri Dec 16 12:18:52 2011 +0100 Merge branch 'rewrite-node-impl' commit e2c6b92f3f7dec057700f07836c54f180bf1bada Author: Benjamin Dauvergne Date: Fri Dec 16 11:20:24 2011 +0100 [tests] fix tests to comply with new implementation of parsing The test around parsing of EncryptedAssertion was wrong since it was missing the XMLEnc namespace declaration. bindings/python/tests/profiles_tests.py | 8 +++--- tests/basic_tests.c | 46 +++++++++++++++++++++++---------- 2 files changed, 37 insertions(+), 17 deletions(-) commit 154812b401e3845977b3a4892dbc5e5a0b9d03cf Author: Benjamin Dauvergne Date: Fri Dec 16 11:12:58 2011 +0100 [xml] rewrite schema directed serialization/deserialization methods The new implementations of lasso_node_impl_init_from_xml now validate namespace of all child nodes befores parsing. It stops on any error. For node which implement their own parsing of an attribute or a node, it must declare an XmlSnippet with an offset field set to 0. The 0 value is invalid for public GObject structure (it's the place of the GObject machinery like the reference count). The 0 offset can be used for XmlSnippet in a private structure, so never set the offset to 0 with the flag SNIPPET_PRIVATE, for a field which is parsed by you get_xmlNode virtual method. Other ameliorations in this commit is the possibility to set attributes with namespace when using the flags SNIPPET_ATTRIBUTE|SNIPPET_ANY. The syntax for an attribute is inspired by the element tree API from Python: {namespace}attribute_name an example: {http://www.w3.org/2001/XMLSchema-instance}type for the classic xsi:type attribute. lasso/id-ff/defederation.c | 13 +- lasso/id-ff/federation.c | 1 + lasso/id-ff/login.c | 24 +- lasso/id-ff/logout.c | 1 + lasso/id-ff/name_registration.c | 1 + lasso/id-ff/profile.c | 76 +- lasso/id-ff/profileprivate.h | 3 + lasso/id-ff/provider.c | 3 + lasso/id-ff/server.c | 14 +- lasso/xml/lib_assertion.c | 3 +- lasso/xml/lib_authentication_statement.c | 3 +- lasso/xml/lib_subject.c | 3 +- lasso/xml/misc_text_node.c | 28 +- lasso/xml/private.h | 33 +- .../saml2_key_info_confirmation_data_type.c | 102 +-- .../saml2_key_info_confirmation_data_type.h | 14 +- lasso/xml/saml-2.0/samlp2_logout_request.c | 10 +- lasso/xml/soap-1.1/soap_body.c | 20 - lasso/xml/tools.c | 59 ++ lasso/xml/xml.c | 807 ++++++++++++--------- 20 files changed, 661 insertions(+), 557 deletions(-) commit 9a31985671edfaf877a1254e308bf7d61f1219fa Author: Benjamin Dauvergne Date: Fri Dec 16 10:55:37 2011 +0100 [xml] add LASSO_XMLENC_PREFIX and LASSO_XMLENC_HREF defines lasso/xml/strings.h | 14 ++++++++++++++ 1 file changed, 14 insertions(+) commit c087569c48fbe2ad981e5f4ef0f838b7920f5e2b Author: Benjamin Dauvergne Date: Fri Dec 16 10:42:14 2011 +0100 [xml] add missing nodes to LassoIsInteractionRequest lasso/xml/is_interaction_request.c | 6 ++++-- lasso/xml/is_interaction_request.h | 3 ++- 2 files changed, 6 insertions(+), 3 deletions(-) commit 591a47002d9d759256b4b29e56a1e1303a421167 Author: Benjamin Dauvergne Date: Fri Dec 16 10:02:14 2011 +0100 [xml] change saml_advice.h to declarer the real node type It also needed a change to bindings.py to parse struct as well as typedef node classes. bindings/bindings.py | 3 +++ lasso/xml/saml_advice.h | 3 +-- 2 files changed, 4 insertions(+), 2 deletions(-) commit ed9c981989f007a124dc22dcde28284395053764 Author: Benjamin Dauvergne Date: Fri Dec 16 09:59:40 2011 +0100 [xml] complete missing namespace declarations for child nodes To allow lasso_node_impl_init_from_xmlnode to do proper namespace checking, child node which are not of the same namespace as their parent in their XSD schema must have an explicit namespace declared in the XmlSnippet. lasso/xml/disco_encrypted_resource_id.c | 6 ++++-- lasso/xml/id-wsf-2.0/disco_endpoint_context.c | 3 ++- lasso/xml/id-wsf-2.0/disco_keys.c | 3 ++- lasso/xml/id-wsf-2.0/disco_query_response.c | 4 ++-- lasso/xml/id-wsf-2.0/disco_security_context.c | 3 ++- .../id-wsf-2.0/disco_svc_md_association_add_response.c | 2 +- .../id-wsf-2.0/disco_svc_md_association_delete_response.c | 2 +- .../id-wsf-2.0/disco_svc_md_association_query_response.c | 2 +- lasso/xml/id-wsf-2.0/disco_svc_md_delete_response.c | 2 +- lasso/xml/id-wsf-2.0/disco_svc_md_query_response.c | 2 +- lasso/xml/id-wsf-2.0/disco_svc_md_register_response.c | 2 +- lasso/xml/id-wsf-2.0/disco_svc_md_replace_response.c | 2 +- lasso/xml/id-wsf-2.0/dst_request.c | 2 +- lasso/xml/id-wsf-2.0/dstref_query_response.c | 3 ++- lasso/xml/id-wsf-2.0/ims_identity_mapping_response.c | 2 +- lasso/xml/id-wsf-2.0/ims_mapping_input.c | 6 ++++-- lasso/xml/id-wsf-2.0/ims_mapping_output.c | 2 +- lasso/xml/id-wsf-2.0/is_interaction_request.c | 2 +- lasso/xml/id-wsf-2.0/is_interaction_response.c | 2 +- lasso/xml/id-wsf-2.0/is_interaction_statement.c | 2 +- lasso/xml/id-wsf-2.0/ps_add_entity_request.c | 3 ++- lasso/xml/id-wsf-2.0/ps_add_known_entity_request.c | 6 ++++-- lasso/xml/id-wsf-2.0/ps_response_abstract.c | 2 +- lasso/xml/id-wsf-2.0/ps_test_membership_request.c | 3 ++- lasso/xml/id-wsf-2.0/sb2_credentials_context.c | 2 +- lasso/xml/id-wsf-2.0/sec_transited_provider_path.c | 3 ++- lasso/xml/id-wsf-2.0/subs_notification.c | 2 +- lasso/xml/id-wsf-2.0/subs_subscription.c | 2 +- lasso/xml/id-wsf-2.0/subsref_query_response.c | 2 +- lasso/xml/is_interaction_request.c | 10 ++++++---- lasso/xml/is_interaction_statement.c | 5 +++-- lasso/xml/lib_federation_termination_notification.c | 12 ++++++++---- lasso/xml/lib_logout_request.c | 3 ++- lasso/xml/lib_name_identifier_mapping_request.c | 3 ++- lasso/xml/lib_name_identifier_mapping_response.c | 6 ++++-- lasso/xml/lib_register_name_identifier_request.c | 15 +++++++++------ lasso/xml/lib_status_response.c | 3 ++- lasso/xml/lib_subject.c | 5 +++-- lasso/xml/sa_sasl_request.c | 3 ++- lasso/xml/sa_sasl_response.c | 3 ++- lasso/xml/saml-2.0/saml2_assertion.c | 2 +- lasso/xml/saml-2.0/saml2_attribute_value.c | 10 +++++++++- lasso/xml/saml-2.0/saml2_encrypted_element.c | 6 ++++-- lasso/xml/saml-2.0/saml2_subject_confirmation_data.c | 2 +- lasso/xml/saml-2.0/samlp2_assertion_id_request.c | 3 ++- lasso/xml/saml-2.0/samlp2_attribute_query.c | 3 ++- lasso/xml/saml-2.0/samlp2_authn_request.c | 6 ++++-- lasso/xml/saml-2.0/samlp2_authz_decision_query.c | 8 ++++---- lasso/xml/saml-2.0/samlp2_logout_request.c | 15 ++++++++------- lasso/xml/saml-2.0/samlp2_manage_name_id_request.c | 10 +++++----- lasso/xml/saml-2.0/samlp2_name_id_mapping_request.c | 14 +++++++------- lasso/xml/saml-2.0/samlp2_name_id_mapping_response.c | 10 +++++----- lasso/xml/saml-2.0/samlp2_request_abstract.c | 7 +++---- lasso/xml/saml-2.0/samlp2_response.c | 9 +++++---- lasso/xml/saml-2.0/samlp2_status_response.c | 5 +++-- lasso/xml/saml-2.0/samlp2_subject_query_abstract.c | 4 ++-- lasso/xml/saml_assertion.c | 2 +- lasso/xml/saml_subject_confirmation.c | 3 ++- lasso/xml/samlp_request_abstract.c | 2 +- lasso/xml/samlp_response.c | 3 ++- lasso/xml/samlp_response_abstract.c | 3 ++- lasso/xml/soap-1.1/soap_body.c | 5 ++++- lasso/xml/soap_binding_ext_credentials_context.c | 3 ++- 63 files changed, 168 insertions(+), 114 deletions(-) commit 41538948ce1701174db9621d41abb3b7701d61ff Author: Benjamin Dauvergne Date: Sat Dec 10 12:57:07 2011 +0100 [core] mark private_data field of the LassoKey structure as private lasso/key.h | 1 + 1 file changed, 1 insertion(+) commit 65b94cc1f5b3d169647703950a707b4efc7c1f81 Author: Benjamin Dauvergne Date: Sat Dec 10 12:56:34 2011 +0100 [tests] improve checking for log output - now any non expected log output is considered an error, by setting a g_log default handler. - block_lasso_logs()/unblock_lasso_logs() will block logging output at the DEBUG level - begin_check_do_log(level, message, endswith)/end_check_do_log() with check that the only message emitted between the two macros is one equals to "message" at the level "level", or ending (to work around variable parts in a log message) with "message" if "endswith" is True. tests/basic_tests.c | 8 +++++ tests/login_tests.c | 3 ++ tests/login_tests_saml2.c | 8 +++++ tests/non_regression_tests.c | 9 ------ tests/tests.c | 10 ++++++- tests/tests.h | 70 ++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 98 insertions(+), 10 deletions(-) commit c3467ed48c979a0f2029207a79f8f4e4c78ea513 Author: Benjamin Dauvergne Date: Sat Dec 10 12:05:31 2011 +0100 [tests] rename login test suite, with mentions of ID-FF 1.2 and SAML 2.0 tests/login_tests.c | 2 +- tests/login_tests_saml2.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit ba014d9ca6b6474ee34b08582283b72ab9ed89c6 Author: Benjamin Dauvergne Date: Sat Dec 10 12:04:59 2011 +0100 [Makefile] fix missing soap11 nodes when compiling for Mingw lasso/Makefile.am | 1 + 1 file changed, 1 insertion(+) commit 900de512f2cf99d6c6371de492926de11b17078e Author: Benjamin Dauvergne Date: Sat Dec 10 12:04:33 2011 +0100 [core] fix uninitialized pointer to a GError structure lasso/xml/tools.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit f4fc26bb39d2549b31c5dca77206198332a4c308 Author: Benjamin Dauvergne Date: Sat Dec 10 12:04:06 2011 +0100 [core] move XMLDsig related nodes in their own sub-library, add X509Data node implementation The goal is to use the KeyInfo structure as a transport format for our cryptographic keys configure.ac | 1 + lasso/Makefile.am | 2 + lasso/xml/Makefile.am | 8 +- lasso/xml/dsig/Makefile.am | 23 +++ lasso/xml/{ => dsig}/ds_key_info.c | 4 +- lasso/xml/{ => dsig}/ds_key_info.h | 4 +- lasso/xml/{ => dsig}/ds_key_value.c | 44 ++++- lasso/xml/{ => dsig}/ds_key_value.h | 8 +- lasso/xml/{ => dsig}/ds_rsa_key_value.c | 4 +- lasso/xml/{ => dsig}/ds_rsa_key_value.h | 2 +- lasso/xml/dsig/ds_x509_data.c | 204 +++++++++++++++++++++ lasso/xml/dsig/ds_x509_data.h | 76 ++++++++ lasso/xml/dsig/strings.h | 61 ++++++ .../saml2_key_info_confirmation_data_type.c | 2 +- .../saml2_key_info_confirmation_data_type.h | 2 +- lasso/xml/saml_subject_confirmation.h | 2 +- lasso/xml/strings.h | 17 +- lasso/xml/xml.c | 4 +- lasso/xml/xml_idff.h | 7 +- tests/basic_tests.c | 31 ++++ 20 files changed, 464 insertions(+), 42 deletions(-) commit c0d1dbbd95c8077bdd042f6fb3540fcc80ea0348 Author: Benjamin Dauvergne Date: Fri Dec 9 22:04:23 2011 +0100 remove debugging printf statement tests/login_tests_saml2.c | 2 -- 1 file changed, 2 deletions(-) commit 18a10593fc48ae3efe861d4ca664492d853e2ca7 Author: Benjamin Dauvergne Date: Thu Dec 8 18:11:46 2011 +0100 [provider] fix doc comment lasso/id-ff/provider.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) commit 4eb0ae483ee1017e380bfc62daf02d5af9089f80 Author: Benjamin Dauvergne Date: Thu Dec 8 10:47:52 2011 +0100 [id-ff] move LassoLogout to use LassoSignatureContext lasso/id-ff/logout.c | 233 ++++++++++++++++++++++----------------------------- 1 file changed, 98 insertions(+), 135 deletions(-) commit ba5746c39fc451c81ea19f5eabced24670f459b9 Author: Benjamin Dauvergne Date: Thu Dec 8 10:47:37 2011 +0100 [logging] add an error() macro lasso/logging.h | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) commit 641702b346456e47a5eb8a4adcf62ee841d1e47f Author: Benjamin Dauvergne Date: Fri Dec 2 19:30:31 2011 +0100 [id-ff] move LassoLogin to use LassoSignatureContext lasso/id-ff/login.c | 141 ++++++++++++++++++---------------------------------- 1 file changed, 49 insertions(+), 92 deletions(-) commit 5e5c38b451cfbefe67e836fb82a1719ce00894f3 Author: Benjamin Dauvergne Date: Mon Dec 5 14:25:34 2011 +0100 [core] rename lasso_provider_set_specific_signing_key to lasso_provider_set_server_signing_key lasso/id-ff/provider.c | 4 ++-- lasso/id-ff/provider.h | 2 +- tests/login_tests_saml2.c | 2 +- tests/perfs.c | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) commit a571c7517f71f67523c70386403bc6d66ee21ac7 Author: Benjamin Dauvergne Date: Mon Dec 5 11:53:49 2011 +0100 [perfs] add command line options, add option to use shared secret key cryptography Performance with HMAC-SHA1 is 100x the one with 2048 bits RSA. tests/perfs.c | 52 +++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 41 insertions(+), 11 deletions(-) commit 5ba292521bd6fbc2a2095769880f709042bcc68f Author: Benjamin Dauvergne Date: Mon Dec 5 13:09:22 2011 +0100 [core] add the HMAC-SHA1 shared secret signature method lasso/id-ff/server.c | 5 ++- lasso/xml/private.h | 6 +++ lasso/xml/tools.c | 83 ++++++++++++++++++++++++++++++++++++++ lasso/xml/xml.c | 10 +++++ lasso/xml/xml.h | 2 + tests/login_tests_saml2.c | 100 ++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 205 insertions(+), 1 deletion(-) commit 6c7114d5cee37e50837cf2b8d27a9f291a489773 Author: Benjamin Dauvergne Date: Mon Dec 5 13:09:07 2011 +0100 [core] refactor lasso_query_verify_signature and lasso_saml2_query_verify_signature This commit introduces lasso_query_verify_helper which factorize cryptographic operations. lasso/xml/tools.c | 257 +++++++++++++++++++++++------------------------------- 1 file changed, 108 insertions(+), 149 deletions(-) commit 42ca33315d23769b2e10f021c412b9f7951b8a7f Author: Benjamin Dauvergne Date: Fri Dec 2 19:28:41 2011 +0100 [tests] use helper macros in id-ff test case tests/login_tests.c | 57 ++++++++++++++++++++++++----------------------------- 1 file changed, 26 insertions(+), 31 deletions(-) commit 57241e3e86c40faf95e6dd5141b3fac2c67f9b4d Author: Benjamin Dauvergne Date: Mon Dec 5 12:00:30 2011 +0100 [core] add lasso_provider_add_key to add other key for signature validation The added key can be appended or prepended, depending on the need for the key: - rollover - improving performances (using simpler cryptographic algorithmss using shared secret keys) lasso/id-ff/provider.c | 41 +++++++++++++++++++++++++++++++++++++++++ lasso/id-ff/provider.h | 2 ++ 2 files changed, 43 insertions(+) commit 109c56226010c7d01c18c622466a97118b9a627b Author: Benjamin Dauvergne Date: Fri Dec 2 19:25:12 2011 +0100 [core] add method lasso_provider_set_specific_signing_key Using this method you can specify a signing which will be used for communication with the specified provider instead of the one configured on the LassoServer object. The main objective is to allow shared secret cryptography instead of public key cryptography. lasso/id-ff/provider.c | 28 ++++++++++++++++++++++++++++ lasso/id-ff/provider.h | 4 ++++ 2 files changed, 32 insertions(+) commit 9836f4a40be07086328b912dc6d6674b82f9f1f5 Author: Benjamin Dauvergne Date: Fri Dec 2 18:32:21 2011 +0100 [core] add a new class LassoKey LassoKey currenly store a LassoSignatureContext inside a reference-counted and bindable object. It will be used to export API around key management to bindings. bindings/overrides.xml | 1 + lasso/Makefile.am | 6 +- lasso/key.c | 236 +++++++++++++++++++++++++++++++++++++++++++++++++ lasso/key.h | 80 +++++++++++++++++ lasso/keyprivate.h | 40 +++++++++ tests/basic_tests.c | 30 +++++++ 6 files changed, 390 insertions(+), 3 deletions(-) commit 2a63167627137136fdd7bc64e53a500820a2096f Author: Benjamin Dauvergne Date: Fri Dec 2 18:31:06 2011 +0100 [core] set the xmlSec log handler globally The log handler is not set in lasso_init(). lasso/lasso.c | 11 +++++++++++ lasso/xml/tools.c | 14 -------------- 2 files changed, 11 insertions(+), 14 deletions(-) commit 0c45b252dc9f3e6c7aff8dd24e39b3f5596d35b0 Author: Benjamin Dauvergne Date: Fri Dec 2 18:30:24 2011 +0100 [saml2] introduce a lasso_saml2_assertion_get_audirence_restrictions to factorize some code lasso/saml-2.0/saml2_helper.c | 51 +++++++++++++++++++++++++++---------------- lasso/xml/tools.c | 2 +- 2 files changed, 33 insertions(+), 20 deletions(-) commit cd017964d04782f015771d00b6dffd360499c49a Author: Benjamin Dauvergne Date: Fri Dec 2 18:42:14 2011 +0100 [core] introduce the LassoSignatureContext context, to pass around signature parameters This structure is used to pass around the signature algorithm and the signature key. lasso/id-ff/profileprivate.h | 2 +- lasso/id-ff/provider.c | 4 +- lasso/id-ff/providerprivate.h | 5 + lasso/id-ff/server.c | 212 ++++++++++++++++++++---- lasso/id-ff/serverprivate.h | 19 +++ lasso/saml-2.0/profile.c | 119 ++------------ lasso/saml-2.0/saml2_helper.c | 22 +-- lasso/xml/private.h | 32 ++-- lasso/xml/tools.c | 374 ++++++++++++++++++++++-------------------- lasso/xml/xml.c | 309 +++++++++++++++++----------------- tests/random_tests.c | 6 +- 11 files changed, 608 insertions(+), 496 deletions(-) commit 71721b370caa64589b238b3c6d56f275a47eceb7 Author: Benjamin Dauvergne Date: Fri Dec 2 18:29:53 2011 +0100 [core] add a lasso_base64_decode function lasso/xml/private.h | 1 + lasso/xml/tools.c | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) commit dfacafb3b0fd17b6fd4064dffab5513d3d0bb750 Author: Benjamin Dauvergne Date: Fri Dec 2 10:35:29 2011 +0100 [core] replace explicit allocation of LassoProviderPrivate by use of g_type_class_add_private The private part is allocated contiguously to the public structure data. lasso/id-ff/provider.c | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) commit dd5afa952281c1634762383db54764277498a68c Author: Benjamin Dauvergne Date: Fri Dec 2 10:31:12 2011 +0100 [configure.ac] fix compilation on Mac Os X configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 490cc01bf21f44f431011a3c064b4a88fc921441 Author: Benjamin Dauvergne Date: Thu Dec 1 18:58:04 2011 +0100 [xml] use lasso_node_export_to_query_with_password to implement lasso_node_export_to_query lasso/xml/xml.c | 21 +++------------------ 1 file changed, 3 insertions(+), 18 deletions(-) commit e9212301d3b9267e1a146df47b2107485173436a Author: Benjamin Dauvergne Date: Thu Dec 1 18:57:05 2011 +0100 [tools] fix lasso_sha1 to return a glib allocated string lasso/xml/tools.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 5c2fc3b5dcbfb8d0753bef84c3861a3d29f02608 Author: Benjamin Dauvergne Date: Thu Dec 1 18:44:42 2011 +0100 [id-ff/saml2] add a lasso_server_add_provider2 It allows to add LassoProvider objects directly to a LassoServer object, without using the metadata loading methods. lasso/id-ff/server.c | 22 ++++++++++++++++++++++ lasso/id-ff/server.h | 2 ++ 2 files changed, 24 insertions(+) commit 10edf69bfc0a88df2d7f83c0bb45f0967f9fa3b9 Author: Benjamin Dauvergne Date: Thu Dec 1 18:43:39 2011 +0100 [utils] add lasso_crypto_memequal function This method compare byte strings in constant time. lasso/utils.h | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) commit 9de6450f4c0f2db9d87c30741a7229b22fb4744e Author: Benjamin Dauvergne Date: Thu Dec 1 18:43:10 2011 +0100 [tools] add a LassoSignatureContext structure to pass signature parameters around Signature parameters are mainly a LassoSignatureMethod and a xmlSecKey. lasso/xml/private.h | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) commit 5a9a447bad701dbb711c95481175cbd7ab3127f6 Author: Benjamin Dauvergne Date: Thu Dec 1 18:37:30 2011 +0100 [xml] add an inline function to validate LassoSignatureMethod values - add also a LASSO_SIGNATURE_METHOD_NONE value lasso/xml/tools.c | 2 ++ lasso/xml/xml.h | 9 ++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) commit 4ba067b828df150b0bf4e89298d997b00057f36f Author: Benjamin Dauvergne Date: Thu Dec 1 18:40:44 2011 +0100 [utils] add lasso_transfer_xml_node macros lasso/utils.h | 3 +++ 1 file changed, 3 insertions(+) commit ad51948373097d89a4c1822daa4d84b169f3decf Author: Benjamin Dauvergne Date: Mon Dec 5 11:58:32 2011 +0100 [core] simplify lasso_provider_load_public_key lasso/id-ff/provider.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) commit 654f9523c239319ce50a6a6a2751045358b928bb Author: Benjamin Dauvergne Date: Tue Nov 29 13:01:32 2011 +0100 [web] fix link on the download page website/web/download/index.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 29800377a38349c04e3744aa736fc9e70c2bf16a Merge: 92ebef91 b785881e Author: Benjamin Dauvergne Date: Tue Nov 29 12:36:47 2011 +0100 Merge branch 'multi-certificates' commit 92ebef91f584d3afd72ded1747c09981b4476c14 Merge: 055b4053 70aeff17 Author: Benjamin Dauvergne Date: Tue Nov 29 11:05:29 2011 +0100 Merge branch 'excl-c14n-fix' commit 70aeff17d27292d01fb32f587aad900b30a59f9a Author: Benjamin Dauvergne Date: Tue Nov 29 10:58:42 2011 +0100 [web] add release news for release 2.3.6 website/web/news/20-release-2.3.6.xml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) commit 5f25443c147f0c209861463ab120187c2eb0fac9 Author: Benjamin Dauvergne Date: Tue Nov 29 10:42:16 2011 +0100 [release] 2.3.6 NEWS | 11 +++++++++++ configure.ac | 4 ++-- lasso.doap | 4 ++++ website/web/doap.rdf | 4 ++++ website/web/index.xml | 6 +++--- 5 files changed, 24 insertions(+), 5 deletions(-) commit b785881e531116da7250190e632bd205212a9bdf Author: Benjamin Dauvergne Date: Tue Nov 22 18:50:35 2011 +0100 [integration tests] does not use full leak report tests/integration/valgrind-wrapper.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit d72cc313470470f3f2bbd5c5b5b73d88d99af864 Author: Benjamin Dauvergne Date: Tue Nov 22 18:49:41 2011 +0100 [integration tests] show more callers when using valgrind memcheck looking for leaks in authentic and lcs tests/integration/valgrind-wrapper.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 95137b1ad10b706c3ba99a0455c6db83a2b4be8b Author: Benjamin Dauvergne Date: Tue Nov 22 17:42:41 2011 +0100 [tests] add test for rollover on the SP side, i.e. rollover of encryption keys This test case is the first to abstract the workflow between two LassoLogin object (for the idp and sp side). This part of the code could be used to simplify the code of other tests in the future. tests/data/idp6-saml2/certificate.pem | 22 +++++ .../certificate-after-rollover.pem | 22 +++++ .../certificate-before-rollover.pem | 14 +++ .../metadata-after-rollover.xml | 88 +++++++++++++++++ .../metadata-before-rollover.xml | 88 +++++++++++++++++ .../private-key-after-rollover.pem | 27 ++++++ .../private-key-before-rollover.pem | 15 +++ tests/login_tests_saml2.c | 104 +++++++++++++++++++++ 8 files changed, 380 insertions(+) commit fd7af65e910b5aa2f5710863eb8ffb86b9f7ca2f Author: Benjamin Dauvergne Date: Tue Nov 22 16:55:30 2011 +0100 [core] do not emit a warning for expected decryption errors The only expected decryption error is on decryption of the symetric key used to crypt the data. All other errors are critical and must be logged. Client of lasso_node_decrypt_xmlnode can then log the decryption failure of the symetric if they tried with all possible keys (key rollover case). lasso/saml-2.0/login.c | 7 +++++-- lasso/xml/tools.c | 7 +++++-- 2 files changed, 10 insertions(+), 4 deletions(-) commit 5957f3e230d04703888910bb3fc3ca48afb4acc9 Author: Benjamin Dauvergne Date: Tue Nov 22 16:54:43 2011 +0100 [core] add a new class of errors for xml encryption errors add LASSO_XMLENC_ERROR_INVALID_ENCRYPTED_DATA for generic unrecoverable xml decryption errors. lasso/errors.c | 2 ++ lasso/errors.h | 7 +++++++ 2 files changed, 9 insertions(+) commit 26d6b35a498843f66c66d1d1ed1a28189ef15dd2 Author: Benjamin Dauvergne Date: Mon Nov 21 21:40:10 2011 +0100 [leakcheck] fix leaks seen by the unit tests This commit also improved valgrind suppression file to hide static allocations done by the GLib type system. lasso/id-wsf-2.0/saml2_login.c | 2 +- lasso/saml-2.0/login.c | 3 ++- lasso/saml-2.0/provider.c | 2 +- lasso/saml-2.0/server.c | 4 ++-- lasso/xml/xml.c | 1 + tests/basic_tests.c | 12 +++++++---- tests/non_regression_tests.c | 49 +++++++++++++++++++++++++++++++----------- tests/valgrind/lasso.supp | 39 +++++++++++++++++++++++++++++++++ 8 files changed, 91 insertions(+), 21 deletions(-) commit 9d13fb1933d401dd0e0855b1625f806f254b49d0 Author: Benjamin Dauvergne Date: Tue Nov 22 00:18:33 2011 +0100 [core] fix wrong XML canonicalization when assertion is extracted without its namespace context lasso/xml/xml.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) commit 699f0e42d57d252c02002d09cc4f1671f808d95c Author: Benjamin Dauvergne Date: Tue Oct 18 17:33:43 2011 +0200 [misc] apply changes to remove warning blocking compilation with gcc 4.5.2 and php 5.3.5 - gcc now warns when you compate a typedef to the anonymous enum which define it. - some inline function in the zend.h header do compare between signed and unsigned char. bindings/php5/Makefile.am | 2 +- lasso/saml-2.0/logout.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 5192cdf7a000c1086869df43d8153d3e344a3b91 Author: Benjamin Dauvergne Date: Mon May 23 12:56:54 2011 +0200 [core] multiple decryption keys support This commit complements the support for multiple signing certificate support in the metadata files. The use-case is still key roll-over. The structure LassoServerPrivateData was changed to accomodate multiple decryption keys, and so: xmlSecKey *encryption_private_key became: GList *encryption_private_keys All uses of this key were replaced by a loop over this list, terminating with the first key to be able to decrypt the content. The private key passed to lasso_server_new() or lasso_server_new_from_buffers() is first added to the list of decryption keys. Any other call to lasso_server_set_encryption_private_key_with_password() or lasso_server_set_encryption_private_key() will add a new key to the list. lasso/id-ff/login.c | 11 ++++++----- lasso/id-ff/provider.c | 24 +++++++++++------------- lasso/id-ff/server.c | 41 +++++++++++++++++++---------------------- lasso/id-ff/serverprivate.h | 4 ++-- lasso/saml-2.0/login.c | 17 ++++++++++++----- lasso/saml-2.0/profile.c | 37 +++++++++++++++++++++++++++---------- lasso/saml-2.0/saml2_helper.c | 16 +++++++++++++++- 7 files changed, 92 insertions(+), 58 deletions(-) commit 055b405387f7e510ff8b0d0dc044485ba4398e71 Merge: 80025021 f286c7cb Author: Benjamin Dauvergne Date: Fri Nov 18 15:36:57 2011 +0100 Merge branch 'extension-abi-respecting' commit f286c7cb5ced1d050520acd93fd05bb8c124eb32 Author: Benjamin Dauvergne Date: Tue Nov 15 18:04:55 2011 +0100 [saml2] add missing extension point for LassoSaml2SubjectConfirmationData - it can support any content and any attribute without validation xs:any with processContents="lax" lasso/xml/saml-2.0/saml2_subject_confirmation_data.c | 10 ++++++++++ 1 file changed, 10 insertions(+) commit 3ec4a2f2944c06b612d360659f3edc10f43fb123 Author: Benjamin Dauvergne Date: Tue Nov 15 17:34:13 2011 +0100 [xml] allow to store XSchema data into a private stucture - added new macros SNIPPET_STRUCT_MEMBER and SNIPPET_STRUCT_MEMBER_P replaces use of G_STRUCT_MEMBER/_P macros. - we use the GType of the class containing a given XmlSnippet to find the proper private structure. - added flag SNIPPET_PRIVATE to state XmlSnippet whose value should be extracted from the private structure and not the public one. lasso/xml/private.h | 24 ++++++++ lasso/xml/xml.c | 158 +++++++++++++++++++++++++++++++--------------------- 2 files changed, 117 insertions(+), 65 deletions(-) commit 0e0511c68692a08e6d810682c9a211c9051e2b1a Author: Benjamin Dauvergne Date: Mon Nov 7 16:59:58 2011 +0100 [binding python] prevent warning in wrapper_top.c under hardy with gcc 4.2.4 bindings/python/wrapper_top.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 773cdab883887751e727f31c60cae83b227526e2 Author: Benjamin Dauvergne Date: Tue Nov 15 12:48:27 2011 +0100 [core] add missing break to switch/case lasso/saml-2.0/profile.c | 1 + 1 file changed, 1 insertion(+) commit 8002502152456e2798b91d2369e95f3ec140de06 Author: Benjamin Dauvergne Date: Tue Nov 8 01:10:22 2011 +0100 [bindings] fix bug introduced in last commit bindings/bindings.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 3c6970e0471bb8cc9f0dfc124427119d1d48db2e Author: Benjamin Dauvergne Date: Tue Oct 18 17:35:55 2011 +0200 [bindings] fix tree traversal on windows - The file path separator is not / on all platforms, so do not use it when matching filenames. bindings/bindings.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) commit 4552f3029350cc4fd4d618a65e98d02ac4f312c0 Author: Benjamin Dauvergne Date: Tue Oct 18 17:33:43 2011 +0200 [misc] apply changes to remove warning blocking compilation with gcc 4.5.2 and php 5.3.5 - gcc now warns when you compate a typedef to the anonymous enum which define it. - some inline function in the zend.h header do compare between signed and unsigned char. bindings/php5/Makefile.am | 2 +- lasso/saml-2.0/logout.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit b8cf183c3708bed29d6b6f6a0685e66dc5ab13e6 Author: Benjamin Dauvergne Date: Tue Oct 18 17:32:56 2011 +0200 [xml saml-2.0] add missing annotation for binding generation to header for LassoKeyInformationDataType lasso/xml/saml-2.0/saml2_key_info_confirmation_data_type.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 94a9fe4f02872bfb4fcb1d115194dbb3f3061cc4 Author: Benjamin Dauvergne Date: Thu Oct 13 01:12:04 2011 +0200 [xml saml-2.0] add a class to handle the KeyInfoConfirmationData type * use a direct mapping to map this class to SubjectConfirmationData node having the xsi:type attribute. * overload get_xmlNode method to add the xsi:type attribute on output. lasso/xml/saml-2.0/Makefile.am | 2 + .../saml2_key_info_confirmation_data_type.c | 173 +++++++++++++++++++++ .../saml2_key_info_confirmation_data_type.h | 78 ++++++++++ lasso/xml/saml-2.0/xml_saml2.h | 1 + tests/basic_tests.c | 4 + 5 files changed, 258 insertions(+) commit f69b561c47b0a49c3a7c119cfe5008e3724b2467 Author: Benjamin Dauvergne Date: Thu Oct 13 01:09:29 2011 +0200 [xml] allow node classes to not defined their nodename, useful for simple Type lasso/xml/xml.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) commit c6d4076599c05e74b3d4ccbd5a735f09d4a5000e Author: Benjamin Dauvergne Date: Mon Oct 10 17:29:34 2011 +0200 [id-wsf2 profile] check provider->private_data->roles instead of provider->role Fixes #140. lasso/id-wsf-2.0/profile.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) commit 984759ea671cc4fa2ed047c17777ea1dfaa65544 Author: Benjamin Dauvergne Date: Mon Oct 10 17:26:09 2011 +0200 [id-wsf discovery] provider can now contain multiple public keys, only consider the first key for id-wsf token generation ID-WSF never contemplated the fact that sometimes key roll-over happend (SubjectConfirmation can only containg on ds:KeyInfo), whatever... lasso/id-wsf/discovery.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) commit b7a94f2db805ff6a4db1576eba48206aee945ada Author: Benjamin Dauvergne Date: Mon Oct 10 16:24:36 2011 +0200 [saml-2.0] augment lasso_saml20_provider_get_first_http_method to verify presence of synchronous bindings lasso/saml-2.0/provider.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) commit aa7fae5fc1e512ab5e9db883f13c1c34ec28cde7 Author: Benjamin Dauvergne Date: Mon Oct 10 16:18:22 2011 +0200 [xml] if a SNIPPET_LIST_NODES as the SNIPPET_ANY flag, allows really any kind of node through LassoMiscTextNode lasso/xml/xml.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) commit 7b1aa28c2c692d74abf7ed030721a29ea7f5cfa2 Author: Benjamin Dauvergne Date: Mon Oct 10 16:20:07 2011 +0200 [xml] allows LassoMiscText.init_from_xml to parse any xmlNode If the node has no attributes and has a simple string content, we use the classic embedding by setting, name, ns_href, ns_prefix. Otherwise the complete xmlNode is copied. lasso/xml/misc_text_node.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) commit 627294f52c045caecaced1cf42793f2ace1f0179 Author: Benjamin Dauvergne Date: Mon Oct 10 16:25:38 2011 +0200 [tests] add non-regression tests concerning the parsing of any xmlNode tree by LassoMiscTextNode when SNIPPET_ANY is used by a LassoNode tests/non_regression_tests.c | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) commit 94136d639b6dd82e1a2a99e9c9af9878da9a64f2 Author: Benjamin Dauvergne Date: Mon Oct 10 16:17:28 2011 +0200 [xml] only try to map an xmlNode to a class ame if the node has a namespace lasso/xml/xml.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit f638f379e7ce0787eafb7c6c3f7d751991705992 Author: Benjamin Dauvergne Date: Mon Oct 10 16:14:50 2011 +0200 [xml saml-2.0] change AttributeValue snippets to accept any children An AttributeValue has an XSchema type of xs:any. lasso/xml/saml-2.0/saml2_attribute_value.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit a7be1fa1142bcf875b290adf2972353342ba0d6b Author: Benjamin Dauvergne Date: Tue Sep 27 17:28:43 2011 +0200 [xml] create a static version of lasso_node_new_from_xmlNode_with_type without error logging When used inside lasso_node_impl_init_from_xml the error logging is prematurely sent as there is a backup procedure for parsing unknown nodes inside a SNIPPET_LIST_NODES by creating a LassoMiscTextNode containing a copy of the parsed xmlNode child. lasso/xml/xml.c | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) commit 943049196366cee18f20668dcc73519b95abb879 Author: Benjamin Dauvergne Date: Fri Sep 9 15:39:43 2011 +0200 [configure.ac] default AM_MAINTAINER_MODE to enable configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit da5260de18a6d1bec25331bca3c3a7d68c87be0a Author: Benjamin Dauvergne Date: Fri Jul 8 21:17:01 2011 +0200 [configure.ac] remove useless semi-colons configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit b1183fe34193527aece6a44dcd143c5a73dede71 Author: Benjamin Dauvergne Date: Fri Jul 8 21:15:20 2011 +0200 Fix wrong version exported in the PHP binding bindings/php5/wrapper_header.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 14b5c395cc3a4e9fcc0af456a5176f9a8a7cc897 Author: Benjamin Dauvergne Date: Fri Jun 3 11:22:25 2011 +0200 Change the glob expression to match darwin $host_os Also use the $DARWIN flag to control the setting of JNI_EXTRA_LDFLAGS. configure.ac | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) commit 8aadadef4d74937ee05e3d61c646ae148d3fad40 Author: Benjamin Dauvergne Date: Mon May 30 22:24:39 2011 +0200 [java] try to make test works under Mac Os X bindings/java/Makefile.am | 6 +++--- configure.ac | 7 +++++++ 2 files changed, 10 insertions(+), 3 deletions(-) commit 9cedec628ee6fceb41f6d54d1e7c228e7bb9ba0f Author: Benjamin Dauvergne Date: Mon May 30 22:24:37 2011 +0200 [core] finish transition from single encryption key to multiple ones Some code still reference provider->private->encryption_public_key, this commit make them use lasso_provider_get_encryption_public_key(). lasso/id-ff/login.c | 4 ++-- lasso/id-ff/provider.c | 15 +++++++-------- 2 files changed, 9 insertions(+), 10 deletions(-) commit 24a29f954ac15da645b62338d1dacc3c5e364b57 Author: Benjamin Dauvergne Date: Fri May 27 16:02:28 2011 +0200 [bindings perl] remove --as-needed from linker flags, it is not supported evrywhere It can come back if we add proper checking of the support on the platform, maybe we can leverage tests made by autoconf. bindings/perl/Makefile.PL | 1 - 1 file changed, 1 deletion(-) commit ed44ea81a83bef1a94b1cf244eca8214a3f5a926 Author: Benjamin Dauvergne Date: Fri May 27 16:01:44 2011 +0200 Disable metadata loading test with the UK federation files tests/basic_tests.c | 5 +++++ 1 file changed, 5 insertions(+) commit 8036813115926fbbe37fc84a70365c16d5762673 Merge: bd7e6492 81918374 Author: Benjamin Dauvergne Date: Mon May 23 10:53:50 2011 +0200 Merge branch 'multi-certificates' commit bd7e6492721173f79b52fc14dfc1ba4a1fdb748c Author: Benjamin Dauvergne Date: Thu May 19 17:53:27 2011 +0200 [bindings perl] in Makefile.am, gives a default template to mktemp Thanks to Nathan Sowatskey for the bug report and the fix. bindings/perl/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 8191837436a324b72db045ce9d418569a61b8686 Author: Benjamin Dauvergne Date: Thu May 19 01:31:54 2011 +0200 [core] start of support multiple keys for encryption lasso/id-ff/providerprivate.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 187cc7a5283ee605ab9a499361370c83571cd052 Author: Benjamin Dauvergne Date: Wed May 18 18:53:23 2011 +0200 [tests] add unit test for the provider with multiple key feature tests/login_tests_saml2.c | 120 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) commit 94a890ddda169d35dfb54cd9f732acc53cd41c4d Author: Benjamin Dauvergne Date: Wed May 18 17:51:29 2011 +0200 [tests] add sample metadata for testing metadata with multiple key descriptors tests/data/idp11-multikey-saml2/certificate-1.pem | 14 ++++ tests/data/idp11-multikey-saml2/certificate-2.pem | 22 ++++++ tests/data/idp11-multikey-saml2/metadata.xml | 85 +++++++++++++++++++++++ tests/data/idp11-multikey-saml2/private-key-1.pem | 15 ++++ tests/data/idp11-multikey-saml2/private-key-2.pem | 27 +++++++ 5 files changed, 163 insertions(+) commit e67f2bb6587770d024f740d92356c827a40120bb Author: Benjamin Dauvergne Date: Tue May 17 11:04:05 2011 +0200 [core] first try at multiple signing keys support The idea was to replace every use of an xmlSecKey* by a loop over a GList* of xmlSecKey*. - In the structure LassoProviderPrivate changed xmlSecKey*public_key -> GList* signing_public_keys xmlNode*signing_key_descriptor -> GList* signing_key_descriptors. - Renamed lasso_provider_try_loading_public_key to lasso_provider_try_loading_public_keys and chaned its signature accordingly - Renamed lasso_provider_get_public_key to lasso_provider_get_public_keys and changed the signature accordingly. - Changed lasso_provider_get_encryption_public_key to return the first signing key from the list as a temporary work around. Multiple encryption keys will be supported later. - Changed lasso_provider_load_public_key to load keys from the passed file on the LassoProvider constructor, from every key descriptors found for signing and eventually from the key descriptor marked for encryption. - Every failure to load from a file or an XML KeyInfo descriptor are noew reported as warning. - Query signature checking was completely moved to lasso_provider_verify_query_signature and lasso_provider_verify_signature now calls it. - lasso_provider_verify_signature is now using lasso_verify_signature from the xml/tools.o module. - lasso_provider_verify_single_signature was modified to support multiple signing keys. lasso/id-ff/provider.c | 253 +++++++++++++++++++++++------------------- lasso/id-ff/providerprivate.h | 6 +- 2 files changed, 143 insertions(+), 116 deletions(-) commit e14652e7a41332f954b72dd2fbc6f9962970e8c3 Author: Benjamin Dauvergne Date: Tue May 17 13:42:44 2011 +0200 [utils] add macros to append to and release a list of xmlSecKey* [core] make lasso_provider_verify_query_signature use lasso_provider_verify_signature lasso/id-ff/provider.c | 20 +------------------- lasso/utils.h | 9 +++++++++ 2 files changed, 10 insertions(+), 19 deletions(-) commit 298e6a50e24ced200cb71707b7af423c50f961d0 Author: Benjamin Dauvergne Date: Thu May 19 17:53:27 2011 +0200 [bindings perl] in Makefile.am, gives a default template to mktemp bindings/perl/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit b7cbdd0d774bbb5307511aacd8e09a873e7c894e Author: Benjamin Dauvergne Date: Wed May 18 23:44:10 2011 +0200 [xml] use g_strndup instead of strndup, as it is more portable lasso/xml/xml.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) commit f455be43878b906324f5fa1b59a70195e59e2fe9 Author: Benjamin Dauvergne Date: Tue May 17 14:47:45 2011 +0200 [tests] fix broken renater metadata file A modification was introduced which broke the signature, updating to the last version. tests/basic_tests.c | 6 +- tests/data/metadata/renater-metadata.xml | 6256 +++++++++++++++++++++--------- 2 files changed, 4458 insertions(+), 1804 deletions(-) commit ce93f3799226b99c4fb8dd37e18673c5d3abb8d3 Author: Benjamin Dauvergne Date: Mon May 16 09:37:04 2011 +0200 [tests] move renater metadata files into the metadata/ subdirectory tests/basic_tests.c | 4 ++-- tests/data/{ => metadata}/metadata-federation-renater.crt | 0 tests/data/{ => metadata}/renater-metadata.xml | 0 3 files changed, 2 insertions(+), 2 deletions(-) commit 2a3a56f8e196f080a0d2c51fd90f6ba64c3ba8c0 Author: Benjamin Dauvergne Date: Sun May 8 00:04:40 2011 +0200 [saml2] add proper error code for partial logout status code lasso/errors.c | 2 ++ lasso/errors.h | 6 ++++++ lasso/saml-2.0/logout.c | 4 ++++ 3 files changed, 12 insertions(+) commit cbeecfe280f14eae27a3e0937e54945aa162e8a2 Author: Benjamin Dauvergne Date: Sun May 8 00:02:52 2011 +0200 [saml2] fix build_request_msg for AuthzDecision assertion queries The servicepoints and roles arrays did not match the provider role enumerations. lasso/saml-2.0/assertion_query.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) commit 481aeef4e00c1c4193154674f15c8267f976641a Author: Benjamin Dauvergne Date: Thu Apr 21 11:06:04 2011 +0200 [saml2] if Status is not Success pass continue processing the response lasso_saml20_login_process_response_status_and_assertion does analyze the response status code login specific error codes, if the generic processing from lasso_saml20_profile_process_any_response returns a status of response is not success, we must continue processing. lasso/saml-2.0/login.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 7016e7c4530916bb26bfc57dd9f0d4dea544bfbb Author: Benjamin Dauvergne Date: Thu Apr 21 11:04:29 2011 +0200 [saml2] for any RequestDenied SAML2 response return LASSO_PROFILE_ERROR_REQUEST_DENIED as error lasso/saml-2.0/profile.c | 3 +++ 1 file changed, 3 insertions(+) commit ebd9266cb58f78d9647d76a9b8436ae58ce7fa14 Author: Benjamin Dauvergne Date: Thu Apr 21 11:01:36 2011 +0200 [core] add a generic LASSO_PROFILE_ERROR_REQUEST_DENIED lasso/errors.c | 2 ++ lasso/errors.h | 8 +++++++- 2 files changed, 9 insertions(+), 1 deletion(-) commit 3c260bfe4a97d659f9b6a5a06a9a4cac2150cb8e Author: Benjamin Dauvergne Date: Wed Apr 20 14:53:24 2011 +0200 [core] make LassoServerLoadMetadataFlag enum a typedef lasso/id-ff/server.c | 2 +- lasso/id-ff/server.h | 6 +++--- lasso/saml-2.0/server.c | 10 +++++----- lasso/saml-2.0/serverprivate.h | 2 +- 4 files changed, 10 insertions(+), 10 deletions(-) commit 0ae13fe29c229436dd915feddd3ab8458bb897c9 Merge: 3521c642 8b216a43 Author: Benjamin Dauvergne Date: Thu Apr 14 17:17:20 2011 +0200 Merge branch 'load-federation' commit 8b216a430727a3085fbc683d1108c43456165d49 Author: Benjamin Dauvergne Date: Thu Apr 14 17:15:42 2011 +0200 [tools] redirect xmlsec errors to lasso error handler lasso/xml/tools.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) commit 890d88c8c59cad7a6f11414d6d0ebe6fdb3ea612 Author: Benjamin Dauvergne Date: Thu Apr 14 17:15:31 2011 +0200 [tools] use LASSO_LOG_DOMAIN instead of magic constant lasso/xml/tools.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) commit 95f48822f41eede822bbc46a64aedcf1adee6dc7 Author: Benjamin Dauvergne Date: Thu Apr 14 17:12:29 2011 +0200 [Makefile] move lasso/xml/tools.h to public headers lasso/xml/Makefile.am | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 8be7b0414dc19cca7b892deeccc64b5fcedaf62c Author: Benjamin Dauvergne Date: Thu Apr 14 16:45:43 2011 +0200 [core] add flags parameter to lasso_server_load_metadata to tune signature checking on metadata files The flags parameter allows to control the checking of digital signature upon EntityDescriptor and EntitiesDescriptor nodes in SAML 2.0 metadata files. The default behaviour is to check all found signatures and to inherit signature from EntitiesDescriptor to their children. By only enabling checking of EntityDescrtiptor node signatures it's also possible to only check signature at the EntityDescriptor level and so only trust individual entities and not the aggregating provider. lasso/id-ff/server.c | 22 ++++++------ lasso/id-ff/server.h | 22 +++++++++++- lasso/saml-2.0/server.c | 77 ++++++++++++++++++++++++++++++++--------- lasso/saml-2.0/serverprivate.h | 4 ++- tests/basic_tests.c | 11 +++++- tests/data/renater-metadata.xml | 4 +-- 6 files changed, 109 insertions(+), 31 deletions(-) commit 1171ee2e8b2902b47b62e88a489c5cc6491f0e2e Author: Benjamin Dauvergne Date: Mon Apr 4 18:52:00 2011 +0200 [core] update documentation of lasso_server_load_metadata lasso/id-ff/server.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) commit cad3d305a90870abd9e48d8bd8370632fdc89941 Author: Benjamin Dauvergne Date: Mon Apr 4 11:50:45 2011 +0200 [core] make lasso_server_load_metadata load any metadata file The new code can load metadata file with a EntityDescriptor root node, and with nested EntitiesDescriptor. Idea and prototype by Olav Morken. lasso/errors.c | 2 + lasso/errors.h | 9 +++ lasso/id-ff/server.c | 3 +- lasso/saml-2.0/server.c | 130 ++++++++++++++++++++++++++++++----------- lasso/saml-2.0/serverprivate.h | 2 +- 5 files changed, 110 insertions(+), 36 deletions(-) commit 31a623aeeeee3174590aa984903abf46644bcc79 Author: Benjamin Dauvergne Date: Sat Apr 2 04:05:37 2011 +0200 [server] in lasso_server_load_metadata do not duplicate checks already made by lasso_verify_signature lasso_verify_signature already checks that reference is to the given signed node, be it referenced through an ID or through an empty reference. lasso/id-ff/server.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) commit 6477d6043c26dbb690e3065e30c622eec56516c6 Author: Benjamin Dauvergne Date: Sat Apr 2 04:03:13 2011 +0200 [xml] if signature reference is empty check that signed node is the document root An empty reference means the complete document, so the signed node is the root element of this document. We must check that the parameter signe_node dmatches our assumption. lasso/xml/tools.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit 345c3b50f80fc22fd99568469fb2a987f7178b71 Author: Benjamin Dauvergne Date: Fri Apr 1 19:34:30 2011 +0200 [core] rename lasso_server_load_federation to lasso_server_load_metadata The aim of this function is now to load any metadata file, and to replace completely the use of lasso_server_add_provider. The metadata content argument is replaced by a metadata file path to more closely match other APIs. bindings/overrides.xml | 2 +- lasso/id-ff/server.c | 11 ++++------- lasso/id-ff/server.h | 2 +- tests/basic_tests.c | 17 +++++++---------- 4 files changed, 13 insertions(+), 19 deletions(-) commit 3521c642be404171860483960be30d467a3d5179 Author: Benjamin Dauvergne Date: Mon Apr 4 11:52:29 2011 +0200 [web] update download page website/web/download/index.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit a9f9b3d9a2698fbe59f7088a2fa31078324cb523 Author: Benjamin Dauvergne Date: Wed Mar 30 14:20:45 2011 +0200 [core] add a loaded_entity_ids output parameter to lasso_server_load_federation It allows to know which entity has been loaded from the metadata file. It must be freed by the caller. bindings/overrides.xml | 1 + lasso/id-ff/server.c | 6 ++++-- lasso/id-ff/server.h | 2 +- lasso/saml-2.0/server.c | 12 +++++++++++- lasso/saml-2.0/serverprivate.h | 2 +- tests/basic_tests.c | 8 ++++++-- 6 files changed, 24 insertions(+), 7 deletions(-) commit a0aba29273d665691d4694c10ba058b538366cce Author: Benjamin Dauvergne Date: Wed Mar 30 11:15:39 2011 +0200 [core] add a blacklisted_entity_ids parameter to lasso_server_load_federation The goal is to prevent loading of provider known to have problems. lasso/id-ff/server.c | 6 ++++-- lasso/id-ff/server.h | 2 +- lasso/saml-2.0/server.c | 10 ++++++++-- lasso/saml-2.0/serverprivate.h | 3 ++- tests/basic_tests.c | 4 +++- 5 files changed, 18 insertions(+), 7 deletions(-) commit 70562db09ad9de5ab9b580c38aff249148115e12 Author: Benjamin Dauvergne Date: Tue Mar 29 18:42:55 2011 +0200 [tests] remove spurious output tests/login_tests.c | 2 -- 1 file changed, 2 deletions(-) commit fbb3e962ad433311a3ebd461d969bac215b66639 Author: Benjamin Dauvergne Date: Tue Mar 29 18:11:43 2011 +0200 [tests] continue improving the lasso_server_load_federation test cases tests/basic_tests.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit 77c6c49badd3e0566e76f3ebad2fa1ee5c2c06ed Author: Benjamin Dauvergne Date: Tue Mar 29 18:11:10 2011 +0200 [tests] test lasso_server_load_federation The test operates on the metadata file of the french university network Renater. tests/basic_tests.c | 23 +++++++++++++++++++++++ tests/data/metadata-federation-renater.crt | 15 +++++++++++++++ 2 files changed, 38 insertions(+) commit a77570b2db76302e30d1ab07274202984b4a371a Author: Benjamin Dauvergne Date: Tue Mar 29 18:45:23 2011 +0200 [tests] add renater federation metadata file for testing tests/data/renater-metadata.xml | 27414 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 27414 insertions(+) commit f289edb53447b5435d04f3bb8d3884f280c8eee6 Author: Benjamin Dauvergne Date: Tue Mar 29 18:12:44 2011 +0200 [core] add a lasso_server_load_federation method This method allows to load providers in bulk from what is called a federation file, i.e a SAML metadata file containing declarations for more than one provider. Those file are usually signed to bind some trust to its content, so lasso_server_load_federation can take an optional file path to a certificate chain file used to check the signature on the given XML content. Only same document signature is accepted (i.e. there must be only one XML signature reference and it should be to the empty string meaning the « current » document). lasso/id-ff/server.c | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++++ lasso/id-ff/server.h | 3 +++ 2 files changed, 74 insertions(+) commit f840037c6a89587958c570ed44f87bc1b35e8ce3 Author: Benjamin Dauvergne Date: Tue Mar 29 18:13:36 2011 +0200 [core] add a private constructor to build LassoProvider object from an xmlNode I'm not sure of the need outside lasso so I will let this method private for the moment. It's an helper method for the lasso_server_load_federation method which traverses an EntitiesDescriptor node to find all the EntityDescriptor contained inside. lasso/id-ff/provider.c | 53 +++++++++++++++++++++++++++++++------------ lasso/id-ff/provider.h | 3 ++- lasso/id-ff/providerprivate.h | 2 +- 3 files changed, 41 insertions(+), 17 deletions(-) commit dac3f345adeb18c7f449da1a28314abedb8e3a16 Author: Benjamin Dauvergne Date: Tue Mar 29 18:06:57 2011 +0200 [saml2] add and internal method to load a federation metadata file It only loads one kind of provider (idp or sp). It's currently impossible for a provider to have the two roles at the same time toward a given LassoServer object, i.e. the current service is a service provider or an identity provider, it cannot be the two at the same time. lasso/saml-2.0/server.c | 51 ++++++++++++++++++++++++++++++++++++++++++ lasso/saml-2.0/serverprivate.h | 1 + 2 files changed, 52 insertions(+) commit 8df7a0022c90b39ed2da8685d882a20d8d9b9c02 Author: Benjamin Dauvergne Date: Tue Mar 29 18:06:07 2011 +0200 [saml2] improve reporting of errors when loading a provider metadata file lasso/saml-2.0/provider.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) commit 04dd5610b0d5905a543774b0753e76f245456b37 Author: Benjamin Dauvergne Date: Tue Mar 29 17:39:41 2011 +0200 [xml] allow empty reference in XML signature (document signature) lasso/xml/private.h | 3 ++- lasso/xml/tools.c | 24 ++++++++++++++++++------ 2 files changed, 20 insertions(+), 7 deletions(-) commit e84a1e8a8a7a2cd4da099acf4b08a913a76f12f1 Author: Benjamin Dauvergne Date: Mon Mar 28 13:20:26 2011 +0200 [xml] make id_attr_name parameter optional for lasso_verify_signature lasso/xml/tools.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) commit 78c9a9382afe9b9edf68f78041b021a3f2611b7a Author: Benjamin Dauvergne Date: Mon Mar 7 16:25:17 2011 +0100 [xml] fix lasso_node_get_xmlnode_for_any_type xmlCopyPropList does not copy the property list into the target it just copy it with respect to the target (mainly for namespace references). This patch adds the real copy into the target node. lasso/xml/xml.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) commit 7ef67c8d7e0ded8cbf9abb274b4ef9655fda5731 Author: Benjamin Dauvergne Date: Mon Feb 28 15:51:04 2011 +0100 [core] add missing namespace definitions to internal objects Identity, Lecp, Login, Logout, NameIdentifierMapping, NameRegistration, Session, AssertionQuery, Ecp and NameIdManagement objects were missing a namespace association to their GObject class. It broke when you try to dump a node created by lasso_node_new_from_dump. lasso/id-ff/identity.c | 8 ++++++-- lasso/id-ff/lecp.c | 4 ++++ lasso/id-ff/login.c | 1 + lasso/id-ff/logout.c | 1 + lasso/id-ff/name_identifier_mapping.c | 12 +++++++++++- lasso/id-ff/name_registration.c | 3 ++- lasso/id-ff/session.c | 8 ++++++-- lasso/saml-2.0/assertion_query.c | 1 + lasso/saml-2.0/ecp.c | 4 ++++ lasso/saml-2.0/name_id_management.c | 1 + 10 files changed, 37 insertions(+), 6 deletions(-) commit ff065bf750768b0f0009bc40475f2f4cc0c34973 Author: Benjamin Dauvergne Date: Mon Feb 28 15:23:14 2011 +0100 [tests] add test case for multiple load and dump of the same object tests/login_tests.c | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) commit 24fa3f9fa6c8ae3f1a149fb90861c5c455b53ece Author: Frédéric Péters Date: Tue Feb 8 11:15:19 2011 +0100 [debian] adapt packaging to official section overrides control.in | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit e50d2d62064eefb47aac76b4e29ff6d5da3e750e Author: Frédéric Péters Date: Tue Feb 8 11:15:19 2011 +0100 [debian] adapt packaging to official section overrides debian/control.in | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit a0d546d765dd6b0a29209d5da59775e35955dd9c Author: Frédéric Péters Date: Tue Feb 8 11:14:28 2011 +0100 [debian] sync packaging with official package changelog | 47 +++++++++++++++++++++++++++++++++++ control | 69 +++++++++++++++++++++------------------------------ control.in | 69 +++++++++++++++++++++------------------------------ liblasso-perl.install | 6 ++--- rules | 9 +++++-- 5 files changed, 113 insertions(+), 87 deletions(-) commit 862bcff904a3c2b93116793924463270db150633 Author: Frédéric Péters Date: Tue Feb 8 11:14:28 2011 +0100 [debian] sync packaging with official package debian/changelog | 47 ++++++++++++++++++++++++++++++ debian/control | 69 ++++++++++++++++++-------------------------- debian/control.in | 69 ++++++++++++++++++-------------------------- debian/liblasso-perl.install | 6 ++-- debian/rules | 9 ++++-- 5 files changed, 113 insertions(+), 87 deletions(-) commit 449b99532cceb29b086c219b0f79c2bd88158bd3 Merge: ea92dbe9 2dcb20a9 Author: Benjamin Dauvergne Date: Tue Jan 25 15:38:21 2011 +0100 Merge branch 'master' of git@dev.entrouvert.org:lasso commit 2dcb20a925c9aef60345f04b7c28e8c0984a4560 Author: Jean-Marc Liger Date: Tue Jan 25 15:33:28 2011 +0100 [Fedora RPM] spec file update fedora/lasso.spec | 87 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 44 insertions(+), 43 deletions(-) commit ea92dbe937cdd28f8ecd7f1fa56b55bf3267b2a0 Author: Benjamin Dauvergne Date: Mon Jan 24 14:49:03 2011 +0100 [tests] change perfs to accept a second parameter giving the data files to use Also add metadata files to check performance with 512 and 1024 bit RSA keys. tests/data/idp10-512-saml2/certificate.pem | 11 ++++ tests/data/idp10-512-saml2/metadata.xml | 71 ++++++++++++++++++++++++++ tests/data/idp10-512-saml2/private-key.pem | 9 ++++ tests/data/idp9-1024-saml2/metadata.xml | 77 ++++++++++++++++++++++++++++ tests/data/idp9-1024-saml2/private-key.pem | 15 ++++++ tests/data/sp10-512-saml2/certificate.pem | 11 ++++ tests/data/sp10-512-saml2/metadata.xml | 72 ++++++++++++++++++++++++++ tests/data/sp10-512-saml2/private-key.pem | 9 ++++ tests/data/sp9-1024-saml2/metadata.xml | 82 ++++++++++++++++++++++++++++++ tests/data/sp9-1024-saml2/private-key.pem | 15 ++++++ tests/perfs.c | 39 +++++++++----- 11 files changed, 397 insertions(+), 14 deletions(-) commit ce80031692078f46794a700ea5ea421809d6c813 Author: Frédéric Péters Date: Fri Jan 14 13:48:48 2011 +0100 [php5] Comments starting with '#' are deprecated bindings/php5/lasso.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit d502db18dd8e8bb52d2bb28aa6d020067d60638a Author: Benjamin Dauvergne Date: Wed Jan 5 18:10:07 2011 +0100 Remove right column with download, binary packages and source links It is redundant with other columns. website/templates/base.ezt | 21 --------------------- 1 file changed, 21 deletions(-) commit d3312e95f0594a666d3a31e63735551cc08f7be4 Author: Benjamin Dauvergne Date: Wed Jan 5 16:07:09 2011 +0100 [web] fix date and version in news 19 website/web/news/19-release-2.3.5.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit ccba7694ba6717cc0508c225221f86428fb910ed Author: Benjamin Dauvergne Date: Wed Jan 5 14:21:49 2011 +0100 [web] fix typo in news for release 2.3.5 website/web/news/19-release-2.3.5.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 1883d46ec22b17ab96754657bdc23662ffc73f14 Merge: d039ffc8 6cb213e5 Author: Benjamin Dauvergne Date: Wed Jan 5 14:19:20 2011 +0100 Merge branch 'hotfixes-2.3.5' commit 6cb213e5f3a77f9fe05a9fa0b1bc2a35fcb3adf7 Author: Benjamin Dauvergne Date: Wed Jan 5 11:41:46 2011 +0100 [Å•elease] Add release notes, update doap files and website NEWS | 40 +++++++++++++++++++++++++++++++++++ lasso.doap | 4 ++++ website/web/doap.rdf | 4 ++++ website/web/index.xml | 6 +++--- website/web/news/19-release-2.3.5.xml | 17 +++++++++++++++ 5 files changed, 68 insertions(+), 3 deletions(-) commit 6c3684dc1f3acc49aec819f7594c3efbcac30173 Author: Benjamin Dauvergne Date: Wed Jan 5 11:41:22 2011 +0100 [dist] create Changelog directly from git Makefile.am | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) commit d039ffc85fd9832337344aa25b6fc77a2b9a50c6 Author: Benjamin Dauvergne Date: Tue Jan 4 22:59:40 2011 +0100 [tests] adapt Makefile.am to new path of metadata dir tests/Makefile.am | 2 +- tests/data/Makefile.am | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) commit 20d2357451f420a146fa37e63df4e6801e6a9e89 Merge: f35901fd 346071a6 Author: Benjamin Dauvergne Date: Tue Jan 4 21:32:56 2011 +0100 Merge branch 'hotfixes-2.3.5' commit 346071a6300032f17fcda345163bd5c444fb3c05 Author: Benjamin Dauvergne Date: Tue Jan 4 16:43:06 2011 +0100 [wsf] fix wsf preprocessor conditionals lasso/id-ff/identity.c | 1 + lasso/id-ff/login.c | 1 + lasso/id-ff/profile.c | 1 + lasso/id-ff/server.c | 1 + lasso/id-ff/session.c | 1 + lasso/xml/xml.c | 6 ++++-- 6 files changed, 9 insertions(+), 2 deletions(-) commit 265f69e236282710bf3adb3d87251df5075f6b6f Author: Benjamin Dauvergne Date: Tue Jan 4 16:42:10 2011 +0100 [bindings python] configure basic logging bindings/python/tests/binding_tests.py | 3 +++ bindings/python/tests/idwsf1_tests.py | 3 +++ bindings/python/tests/idwsf2_tests.py | 3 +++ 3 files changed, 9 insertions(+) commit 433ebd9a996dc8f86ab20690daa2eb6f54521504 Author: Benjamin Dauvergne Date: Tue Jan 4 16:39:34 2011 +0100 [ghashtable] add G_GNUC_UNUSED to remove unused static functions warning bindings/ghashtable.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 2b90dcd5034390a79d6d37b3d2b33bde0c73ab83 Author: Benjamin Dauvergne Date: Tue Jan 4 16:37:34 2011 +0100 [saml2] when parsing short numbers reinitialize errno lasso/saml-2.0/provider.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 03b15e3886d8f65047fc0abced2e20f16fcb1ecf Author: Benjamin Dauvergne Date: Tue Jan 4 13:34:51 2011 +0100 [bindings perl] fix get_hash_of_objects bindings/perl/ghashtable_handling.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit e3a035ba6ae5202482d9512d69d74d945e3fdf13 Author: Benjamin Dauvergne Date: Tue Jan 4 11:15:55 2011 +0100 [bindings php5] remove hardcoding the php5 cli interpreter The test script did fail under Centos/Fedora because the interpreter for php5 is named php. bindings/php5/tests/Makefile.am | 2 +- bindings/php5/tests/binding_tests.sh | 2 +- bindings/php5/tests/profile_tests.sh | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) commit f35901fdd2bd1f381e9bac90f3ef4262871593f4 Merge: e59c22aa 9bfd555c Author: Benjamin Dauvergne Date: Wed Dec 22 17:36:07 2010 +0100 Merge branch 'hotfixes-2.3.5' commit 9bfd555cda5aa82243d3f4f2034c9df608380319 Author: Benjamin Dauvergne Date: Wed Dec 22 17:34:40 2010 +0100 [bindings perl] downgrade requirement on perl version to 5 instead of 5.10 bindings/perl/Makefile.PL | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit e59c22aade3e7c29bc501280c6f97733720b499f Author: Benjamin Dauvergne Date: Wed Dec 22 17:34:40 2010 +0100 [bindings perl] downgrade require on perl version to 5 instead of 5.10 bindings/perl/Makefile.PL | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 908eef330dbdac7f7dea5a9f8586bea69cdeedca Merge: e0bda691 d69649cc Author: Benjamin Dauvergne Date: Wed Dec 22 17:00:33 2010 +0100 Merge branch 'hotfixes-2.3.5' commit d69649cc5d89cb8a9c1fe50e5f668427d19449b2 Author: Benjamin Dauvergne Date: Wed Dec 22 11:03:52 2010 +0100 [xml] fix null pointer access in lasso_node_get_encryption lasso/xml/xml.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit fb37b807a72e1a44ed338215cf0fb7c9199eab80 Author: Benjamin Dauvergne Date: Tue Dec 21 17:44:38 2010 +0100 [configure.ac] increment version and libtool version info configure.ac | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit cfd58003fa315193b512aeb8b2a78431b35100dd Author: Benjamin Dauvergne Date: Tue Dec 21 16:38:57 2010 +0100 [saml2] fix errors in lasso)provider_get_first_http_method when a binding is unknown lasso/saml-2.0/provider.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit e401253f8def3bd0cd3fa21bf0683fb999cc6d65 Author: Benjamin Dauvergne Date: Tue Dec 21 10:58:48 2010 +0100 [saml2 provider] change critical messages to debug messages lasso/saml-2.0/provider.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit d8bff0dbb395b20c5a7c2c5aa7acd2d8568cd1db Author: Benjamin Dauvergne Date: Tue Dec 21 10:54:38 2010 +0100 [saml2 profile] fix bug in binding_uri_to_http_method with the POST binding lasso/saml-2.0/provider.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit aa9898693a6caecf4a72368e46ca2d164ed3c258 Author: Benjamin Dauvergne Date: Tue Dec 21 10:44:14 2010 +0100 [saml login] suppress unused argument warning lasso/saml-2.0/login.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 126a9ac71c853e230fdd4abe1ca05f77ba56bbac Author: Benjamin Dauvergne Date: Fri Dec 17 17:40:28 2010 +0100 [samlv2 logout] check that the assertion is well formed before accessing the subject nameid lasso/saml-2.0/logout.c | 4 ++++ 1 file changed, 4 insertions(+) commit 8c289263043f6f3ed0ae17485658a4387964c961 Author: Benjamin Dauvergne Date: Fri Dec 17 17:40:07 2010 +0100 [profile] prefer to lookup the session before the identity for looking up a name identifier; lasso/id-ff/profile.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) commit d02bf096a5468ce688b07ecb543260942c075331 Author: Benjamin Dauvergne Date: Fri Dec 17 17:36:17 2010 +0100 [samlv2 logout] setup the NameID from the assertion lasso/saml-2.0/logout.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit fd52e6809498824b48d999da3fa2f221fd1543da Author: Benjamin Dauvergne Date: Fri Dec 17 17:34:59 2010 +0100 [samlv2 login] do not setup conditions->notBefore/notOnOrAfter only notOnOrAfter on SubjectConfirmationData lasso/saml-2.0/login.c | 5 ----- 1 file changed, 5 deletions(-) commit cd6262bbd746ac7a45e0904764da4e7b6aa00e76 Author: Benjamin Dauvergne Date: Tue Dec 14 15:19:36 2010 +0100 [binding php5] add inline implementation of lasso_log since it is a private function of lasso bindings/php5/wrapper_source_top.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) commit e0bda6914ca153f2d2952b807fd7f40f6b3f5345 Author: Benjamin Dauvergne Date: Tue Dec 14 15:19:36 2010 +0100 [binding php5] add inline implementation of lasso_log since it is a private function of lasso bindings/php5/wrapper_source_top.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) commit 67083e3050d4e84242ffda3bc94bffa006b1e0b9 Merge: a3aa8e3d 4391f1ff Author: Benjamin Dauvergne Date: Tue Dec 14 12:11:18 2010 +0100 Merge branch 'hotfixes-2.3.5' commit 4391f1ffb91e59545c6c324068e22fb7a5da7d27 Author: Benjamin Dauvergne Date: Tue Dec 14 12:10:47 2010 +0100 [saml2] make LASSO_SIGNATURE_VERIFY_HINT_FORCE as least as stringent as _MAYBE when checking signature on messages lasso/saml-2.0/profile.c | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) commit a3aa8e3d1ad610d649a18339069cf312c2c34e6f Merge: d97adfc2 4f5e6c60 Author: Benjamin Dauvergne Date: Tue Dec 14 09:18:39 2010 +0100 Merge branch 'hotfixes-2.3.5' commit 4f5e6c60007c85f8fdca2a05544151300c522d74 Author: Benjamin Dauvergne Date: Tue Dec 14 02:01:30 2010 +0100 [xml] remove duplicate EncryptedKey around EncryptedData elements The key is already embedded in the EncryptedData, so there is no need to also fill the EncryptedKey field of the saml:EncryptedElement object. lasso/xml/xml.c | 1 - 1 file changed, 1 deletion(-) commit b324c41237889f8d985f6bac905170db31823988 Author: Benjamin Dauvergne Date: Tue Dec 14 02:00:10 2010 +0100 [xml] add exportation of the encrypting public key in EncryptedData elements This commit check if the given is a simple RSA key or a full certificate and choose the better serialization method between RSAKeyValue and X509Data. lasso/xml/xml.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) commit 447c610c9cdfd81f46841a290964b20842cdb02d Author: Benjamin Dauvergne Date: Tue Dec 14 01:58:38 2010 +0100 [tools] fix xml decryption This commit rewrite the extraction of the EncryptedKey when it is embedded inside the EncryptedData element, which seem to be the frequent case. lasso/xml/tools.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) commit 185ce3c139ba7c2a0ed779f158ea6b3dc3512720 Author: Benjamin Dauvergne Date: Tue Dec 14 01:58:02 2010 +0100 Merge with new field in custome element lasso/xml/xml_enc.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 355df68dfed94e21726cf5ef7b0747623dbdcf4a Author: Benjamin Dauvergne Date: Tue Dec 14 01:57:09 2010 +0100 [saml2] use new encryption structure instead for internal field in LassoSaml2Assertion lasso/saml-2.0/login.c | 8 +++----- lasso/xml/tools.c | 9 +++++---- 2 files changed, 8 insertions(+), 9 deletions(-) commit ec5ec161f7d957e86b44310d8f2b5bb604613196 Author: Benjamin Dauvergne Date: Tue Dec 14 01:55:09 2010 +0100 [xml] add field to contains encryption parameters inside CustomElement structure lasso/xml/private.h | 6 +++++ lasso/xml/xml.c | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+) commit b0c2fdab284500e547d602c5e84d6dc212061011 Author: Benjamin Dauvergne Date: Tue Dec 14 01:53:01 2010 +0100 [utils] fix typo in lasso_assign_sec_key lasso/utils.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 762f88cd3790b28ea3594cdfc95e395b1e6e7cc4 Author: Benjamin Dauvergne Date: Tue Dec 14 01:52:31 2010 +0100 [bindings python] make constructor failure raise a lasso.Error exception bindings/python/lang.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit f7dbcbb2b400d4c9386dd94a32a610048e1e2cc5 Author: Benjamin Dauvergne Date: Mon Dec 13 16:20:29 2010 +0100 [saml2] do not set SPNameQualifier it should be reserved for SP member of an affiliation lasso/saml-2.0/login.c | 3 --- 1 file changed, 3 deletions(-) commit d97adfc27ac1558d3cb729fe054641d97f6d3fba Merge: 41619043 6c598662 Author: Benjamin Dauvergne Date: Fri Dec 3 09:40:59 2010 +0100 Merge branch 'hotfixes-2.3.5' commit 6c598662a058049b54ca2f3f4cf8104a65734466 Author: Benjamin Dauvergne Date: Fri Dec 3 09:40:42 2010 +0100 [tests idwsf2] add missing include for ID-WSF strings tests/idwsf2_tests.c | 1 + 1 file changed, 1 insertion(+) commit 255e46bb3b3e3d1f0824b739cfde87944b297178 Author: Benjamin Dauvergne Date: Wed Dec 1 15:21:13 2010 +0100 [tests] include the backward compatibility include for GHashTable tests/login_tests_saml2.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit f4c6c96836e546a3fd4ce348bd9fe719e5b9d80d Author: Benjamin Dauvergne Date: Wed Dec 1 15:20:48 2010 +0100 [bindings perl] change ghashtable interface to not use GHashTableIter bindings/perl/ghashtable_handling.c | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) commit fbf7ad0537e752ac9e4a99943177c158328944e0 Author: Benjamin Dauvergne Date: Wed Dec 1 15:16:23 2010 +0100 [bindings perl] add dependency upon the Makefile.perl for the install target bindings/perl/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 33dcd98bc54d38a9f0fe0a6e1fcd5814d6e3ce9c Author: Benjamin Dauvergne Date: Wed Nov 17 19:38:12 2010 +0100 [bindings] add missing static modifier for g_hash_table_get_values replacement bindings/ghashtable.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit fc8c6d877e703a03082f89bc61c7f56805ad11ae Author: Benjamin Dauvergne Date: Wed Nov 17 13:53:07 2010 +0100 [tests] include header for backward compatible methods on GHashTable structures tests/assertion_query_saml2.c | 1 + tests/login_tests.c | 1 + 2 files changed, 2 insertions(+) commit d6b1288923db676495904465831cfb25e2f61ae0 Author: Benjamin Dauvergne Date: Mon Nov 15 17:04:42 2010 +0100 [bindings] fix bad use of lasso_return_if_fail in ghashtable backward compatibility header bindings/ghashtable.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit 4161904317e5df32e402f365950456352c0a2c57 Merge: 1d38a1e0 76dc0543 Author: Benjamin Dauvergne Date: Wed Oct 27 14:13:48 2010 +0200 Merge branch 'hotfixes-2.3.5' commit 76dc05434ab290b463266044e61f553bb0e57c01 Author: Benjamin Dauvergne Date: Wed Oct 20 15:42:59 2010 +0200 [SAMLv2] fix segfault in has_signature by initializing local variables lasso/saml-2.0/profile.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 1d38a1e022d8ac0672f2e2217aa9295edc297926 Merge: ee9b5fbe 48a7639e Author: Benjamin Dauvergne Date: Wed Oct 13 14:21:25 2010 +0200 Merge branch 'hotfixes-2.3.4' commit 11434956dd8107dcdee5c10abc2641a3ef2d509b Merge: 0bd4c25a 48a7639e Author: Benjamin Dauvergne Date: Wed Oct 13 14:18:06 2010 +0200 Merge branch 'hotfixes-2.3.4' into release commit 48a7639e58df956b874a0d8ed30ab9e607433f85 Author: Benjamin Dauvergne Date: Wed Oct 13 12:23:21 2010 +0200 Update doap and news file lasso.doap | 2 +- website/web/doap.rdf | 2 +- website/web/news/18-release-2.3.4.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) commit 6003310f401f6465194affd8c98b23578f1d59f6 Author: Benjamin Dauvergne Date: Wed Oct 13 12:06:02 2010 +0200 Update NEWS file NEWS | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) commit ee9b5fbe59070ab40d7a9e9d2de6db1bade708a8 Author: Benjamin Dauvergne Date: Mon Oct 11 18:54:32 2010 +0200 [tests data request] add googleapps sample AuthnRequest tests/data/requests/googleapps_request.xml | 11 +++++++++++ 1 file changed, 11 insertions(+) commit fcad112b436c2344512c93ac12a0faa855044726 Author: Benjamin Dauvergne Date: Mon Oct 11 18:53:11 2010 +0200 [tests] move metadata directory into data tests/Makefile.am | 2 +- tests/{ => data}/metadata/feide-prod.xml | 0 tests/{ => data}/metadata/googleapps_metadata.xml | 0 tests/{ => data}/metadata/metadata_01.xml | 0 tests/{ => data}/metadata/metadata_02.xml | 0 tests/{ => data}/metadata/metadata_03.xml | 0 tests/{ => data}/metadata/metadata_04.xml | 0 tests/{ => data}/metadata/metadata_05.xml | 0 tests/{ => data}/metadata/metadata_06.xml | 0 tests/{ => data}/metadata/simplesamlphp-metadata.xml | 0 10 files changed, 1 insertion(+), 1 deletion(-) commit f2c9c4411917c9250562625d4a3cfcd0370c504a Author: Benjamin Dauvergne Date: Mon Oct 11 18:48:17 2010 +0200 [tests data] add idp and sp example with 1024 bits RSA keys, for performance testing purpose .gitignore | 13 +++++++++ tests/data/idp8-1024-la/metadata.xml | 37 ++++++++++++++++++++++++++ tests/data/idp8-1024-la/private-key-raw.pem | 15 +++++++++++ tests/data/idp8-1024-la/public-key.pem | 6 +++++ tests/data/sp8-1024-la/metadata.xml | 41 +++++++++++++++++++++++++++++ tests/data/sp8-1024-la/private-key-raw.pem | 15 +++++++++++ tests/data/sp8-1024-la/public-key.pem | 6 +++++ 7 files changed, 133 insertions(+) commit a6d33dd5fe06eeeda9298cecda35bc7456790f4f Author: Benjamin Dauvergne Date: Mon Oct 11 18:46:39 2010 +0200 [tools] add a repository for semantic patches as reference tools/spatch/remove-gstrcmp.spatch | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) commit 4320d8eda204997b6045d84a8cdcb43e07e51f19 Author: Benjamin Dauvergne Date: Mon Oct 11 18:41:55 2010 +0200 [tests metadata] add more examples of metadata files tests/metadata/feide-prod.xml | 27 +++++++++++++++++++++++++++ tests/metadata/googleapps_metadata.xml | 6 ++++++ tests/metadata/simplesamlphp-metadata.xml | 28 ++++++++++++++++++++++++++++ 3 files changed, 61 insertions(+) commit 3ba1b2b9ba0c0aca5954101c11ff0d88eda279e2 Author: Benjamin Dauvergne Date: Mon Oct 11 18:30:53 2010 +0200 [tests integration] adapt to string change in lcs/qommon/saml2.ptl tests/integration/saml2/test_01_sso.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 7d90d5e26af239173179fc3de5240a316b44efc8 Author: Benjamin Dauvergne Date: Mon Oct 11 09:57:22 2010 +0200 [SAMLv2] delete an unused local variable lasso/saml-2.0/profile.c | 1 - 1 file changed, 1 deletion(-) commit f6d5a8fe40f4622ffecf81d3794bf1ee53a24afc Merge: 36b7baf9 c36d6a90 Author: Benjamin Dauvergne Date: Mon Oct 11 09:54:26 2010 +0200 Merge branch 'hotfixes-2.3.4' commit c36d6a90dd4ab854c00b879edf1cd83caef147fa Author: Benjamin Dauvergne Date: Sat Oct 9 17:54:39 2010 +0200 [SAMLv2] user server->signature_method when signing request and response lasso/saml-2.0/profile.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit 6a8552a04d691666e8ef9a74e92976415a855730 Author: Benjamin Dauvergne Date: Sat Oct 9 17:53:00 2010 +0200 [tests] add non regression test on assertion consumer endpoints ordering tests/non_regression_tests.c | 59 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 58 insertions(+), 1 deletion(-) commit 4ebb7067a0bd1d2ec812a1543d00ed5917ea7e84 Author: Benjamin Dauvergne Date: Sat Oct 9 15:51:23 2010 +0200 [core] check type of first argument of lasso_provider_get_assertion_consumer_url lasso/id-ff/provider.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 15781d19609ae90009fdcb26d3263005428cdeb4 Author: Benjamin Dauvergne Date: Fri Oct 8 19:18:30 2010 +0200 fix pardus capitalisation in NEWS file NEWS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 36b7baf9e8ea2e6debe1760f7e2a0ff789560448 Merge: a73d193d 0325ce08 Author: Benjamin Dauvergne Date: Fri Oct 8 19:17:39 2010 +0200 Merge branch 'hotfixes-2.3.4' Conflicts: lasso/xml/xml.c website/web/download/index.xml website/web/index.xml commit 0325ce08670e9b5429dd2463266d2c0f89044f5b Author: Benjamin Dauvergne Date: Mon Oct 4 14:30:15 2010 +0200 Update release notes and website for release 2.3.4 NEWS | 22 ++++++++++++++++++++++ lasso.doap | 4 ++++ website/web/doap.rdf | 4 ++++ website/web/download/index.xml | 2 +- website/web/index.xml | 7 +++---- website/web/news/18-release-2.3.4.xml | 16 ++++++++++++++++ 6 files changed, 50 insertions(+), 5 deletions(-) commit 758fe88dada513c9a3d50adf091318b10cc8b165 Author: Benjamin Dauvergne Date: Fri Oct 8 14:10:26 2010 +0200 [xml] fix waring on use of strndup on pardus lasso/xml/xml.c | 3 +++ 1 file changed, 3 insertions(+) commit 270f1743f0dd1bc9ce90fbc7afa69c39de4d1846 Author: Jérôme Schneider Date: Wed Oct 6 17:37:37 2010 +0200 Add missing include lasso/saml-2.0/provider.c | 2 ++ lasso/xml/xml.c | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) commit 3872f17fcd7b07727e7a7a28f7749c850f0495b8 Author: Benjamin Dauvergne Date: Thu Oct 7 18:48:28 2010 +0200 [SAMLv2] handle unknown provider in artifact resolve, and also alow to ignore signature validation In lasso_saml20_profile_process_artifact_resolve, we know take a short path with an error when the remote provider is unknown and we also respect the lasso_profile_get_signature_verify_hint() when checking the signature on the artifact resolve message. lasso/saml-2.0/profile.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) commit 4bf2a6c0c02629f87990f7e7436b2685953267d3 Author: Benjamin Dauvergne Date: Thu Oct 7 18:39:06 2010 +0200 [SAMLv2] fix bad double free bug in lasso_saml20_provider_get_assertion_consumer_service_url_by_binding lasso/saml-2.0/provider.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 6b2a21d116d9191eb5f27d204e5137465d6daa2e Author: Benjamin Dauvergne Date: Thu Oct 7 18:38:21 2010 +0200 [core] adapt lasso_provider_get_assertion_consumer_service_url for SAMLv2 lasso/id-ff/provider.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) commit 3e87282db3c00bc18a72b43385b155c8213e599b Author: Benjamin Dauvergne Date: Wed Oct 6 18:43:57 2010 +0200 [docs lasso-book] add figures to the tarball docs/lasso-book/figures/Makefile.am | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit a73d193d9f9860f593c0ffaeff2c568b8fb98918 Author: Jérôme Schneider Date: Wed Oct 6 17:37:37 2010 +0200 Add missing include lasso/saml-2.0/provider.c | 2 ++ lasso/xml/xml.c | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) commit f5b88c854a2e24013b9536cfb8819817831269a6 Merge: ece66aa4 21d61b5b Author: Benjamin Dauvergne Date: Wed Oct 6 17:02:31 2010 +0200 Merge branch 'hotfixes-2.3.4' commit 21d61b5ba6a44e5de788afbe5fb910b68ccd0414 Author: Benjamin Dauvergne Date: Wed Oct 6 17:02:18 2010 +0200 [configure.ac] increment version and libtool version info configure.ac | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 5d56e4558eba80b6cffb79797fe124ad90199632 Author: Benjamin Dauvergne Date: Wed Oct 6 10:40:14 2010 +0200 [ID-FFv1.2] in lasso_login_process_authn_request_msg() adopt simpler behaviour for checking signatures There is two sources of advice for signature checking: AuthnRequestsSigned attribute in service provider metadata files and value of lasso_profile_get_signature_verify_hint(). If lasso_profile_get_signature_verify_hint() forbid to check signature, we do not check. If the SP advise to check signature, we check. If lasso_profile_get_signature_verify_hint() forces to check signature, we do not check. In all other cases we only check if a signature is present, i.e. we ignore the error LASSO_DS_ERROR_SIGNATURE_NOT_FOUND. lasso/id-ff/login.c | 42 ++++++++++++++++++++++++++---------------- 1 file changed, 26 insertions(+), 16 deletions(-) commit 58a3868361ba63d51d5c0f802d3b7d2a9a8ae376 Author: Benjamin Dauvergne Date: Wed Oct 6 10:39:18 2010 +0200 [ID-FFv1.2] make lasso_login_process_authn_request_msg() return LASSO_PROFILE_ERROR_INVALID_MSG if received request is not a lib:AuthnRequest lasso/id-ff/login.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit 7a27400a87380e3f4262a71946ffc5d17c464c2d Author: Benjamin Dauvergne Date: Wed Oct 6 10:38:43 2010 +0200 [SAMLv2] adopt same behaviour as ID-FFv1.2 for invalid AuthnRequest lasso/saml-2.0/login.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 6be8d9cfa82f4b8b9b4f5ac8d764f87ef0a9a895 Author: Benjamin Dauvergne Date: Tue Oct 5 19:30:17 2010 +0200 [SAMLv2&ID-FFv1.2] improve documentation of lasso_login_process_authn_request_msg lasso/id-ff/login.c | 120 ++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 108 insertions(+), 12 deletions(-) commit 06c2ec9d61a7a06608942b464ba13702cfb4d08b Author: Benjamin Dauvergne Date: Tue Oct 5 19:34:40 2010 +0200 [SAMLv2] fix ordering of endpoints Ordering by binding is wrong, first order by isDefault (as stated in saml-metadata-2.0.pdf) then by index. lasso/saml-2.0/provider.c | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) commit 3d1d90ee315301ae258efbb66f009bf681d4a4dd Author: Benjamin Dauvergne Date: Wed Oct 6 10:37:07 2010 +0200 [Core] change isdefault type in EndpointType structure As integer we can represent the three value of isdefault: - true - false - attribute absent lasso/id-ff/providerprivate.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit e2611e16d655cf49d2e4a996eb284c86e4d49ffd Author: Benjamin Dauvergne Date: Tue Oct 5 16:22:46 2010 +0200 [docs] update copyright years docs/reference/lasso/lasso-docs.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit ece66aa4774c5e830e962d8e5d03a19f07a86df7 Author: Frédéric Péters Date: Tue Oct 5 09:53:34 2010 +0200 [website] "Subversion Status" -> "Git Status" website/templates/base.ezt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit d46f8caccb35b8c4908c86059c4a4e2ed162d1a7 Author: Frédéric Péters Date: Tue Oct 5 08:30:02 2010 +0200 [website] Only keep two latest news items website/convert-to-static.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 2f1e68eeb3dff1a6d4a031c9ca080bfe4e7eb6a4 Author: Frédéric Péters Date: Tue Oct 5 08:29:29 2010 +0200 [website] Fixed 2.3.3 release date website/web/news/17-release-2.3.3.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit fb76faab79a3355b0994fcc2fd1c32dad01920bb Author: Frédéric Péters Date: Tue Oct 5 08:28:52 2010 +0200 [website] Update right download box for 2.3.3 website/templates/base.ezt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit ff409f8d7eae1fa0d85c6eb32d90b47945d69b97 Author: Frédéric Péters Date: Tue Oct 5 08:27:46 2010 +0200 [website] Don't duplicate link to git repository in link text website/templates/base.ezt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 4e18990cd69c2903b01dd6e9f98baf2035ac136a Author: Frédéric Péters Date: Tue Oct 5 08:27:07 2010 +0200 [website] Refer to Git in buildbox title website/templates/base.ezt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit b3ad9a5eca9b069fdc78dd1c785b414afb1c2222 Author: Frédéric Péters Date: Tue Oct 5 08:26:43 2010 +0200 [website] Updated copyright years website/templates/base.ezt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit fa5eed7c81fc1b2703c363d56024ae1d79545989 Author: Benjamin Dauvergne Date: Mon Oct 4 16:15:18 2010 +0200 [Website] Fix bad date website/web/news/17-release-2.3.3.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 644f15640bd8aa6373d67c8ca4a5a1ff850eb318 Author: Benjamin Dauvergne Date: Mon Oct 4 14:53:21 2010 +0200 [Web] chmod +x on convert-to-static.py website/convert-to-static.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) commit 33df188d32d63f38f87ca73d7e2e535714a775fd Author: Benjamin Dauvergne Date: Mon Oct 4 14:50:30 2010 +0200 [Web] update links for download v2.3.3, add lines to feature matrix website/web/download/index.xml | 54 +++++------------------------------------- website/web/index.xml | 14 +++++++++-- 2 files changed, 18 insertions(+), 50 deletions(-) commit f1c5db026b2fbb8712fa5aa2ee6ef562cd330adc Author: Benjamin Dauvergne Date: Mon Oct 4 14:30:15 2010 +0200 [Web] add news file about 2.3.3 website/web/news/17-release-2.3.3.xml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) commit 3aaf0ca959320e6fd18eb49530ee7a578b65b7b6 Merge: b606f0db 0bd4c25a Author: Benjamin Dauvergne Date: Mon Oct 4 14:28:18 2010 +0200 Merge commit 'v2.3.3' commit 0bd4c25a24574eb80b81888e41dd7726ef000a9d Merge: 8082428d 19cb0bf5 Author: Benjamin Dauvergne Date: Fri Oct 1 19:13:31 2010 +0200 Merge branch 'hotfixes-2.3.3' into release commit 19cb0bf52bc897313475786176625f56b5f779b8 Author: Benjamin Dauvergne Date: Fri Oct 1 19:11:32 2010 +0200 [Website] add news about 2.3.3 and update doap and main page lasso.doap | 4 ++++ website/web/doap.rdf | 4 ++++ website/web/index.xml | 2 +- 3 files changed, 9 insertions(+), 1 deletion(-) commit a33c76aaf1c8bd2a3a6f4d5a8e9e83ebf3d09042 Author: Benjamin Dauvergne Date: Fri Oct 1 19:06:33 2010 +0200 [Release] add release notes NEWS | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) commit 86f0f6b6f23b88da75a67667a7c150d5dace5c06 Author: Benjamin Dauvergne Date: Fri Oct 1 17:44:40 2010 +0200 [SAMLv2] restore setting of SubjectConfirmationData->NotOnOrAfter This was wrongly removed by me in commit 9d22f29e55524034dfda34c15b76f1b0b78c4413. This is the responsability of the caller to adjust value on the Conditions and SubjectConfirmationData independently after. lasso/saml-2.0/login.c | 6 ++++++ 1 file changed, 6 insertions(+) commit d9bc35e01ab3f8488c0c3f61ff55ef520a0c9069 Author: Benjamin Dauvergne Date: Fri Oct 1 14:56:48 2010 +0200 [Binding java] replace use of strcmp by g_strcmp0 bindings/java/wrapper_top.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 0c82592a9922d7b5c54ecf9ab98328725e8acb3d Author: Benjamin Dauvergne Date: Fri Oct 1 14:56:28 2010 +0200 [Tests] add annotation to remove compiler warnings tests/perfs.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) commit 462c9a1cd06b5ef9af7e348eef6a27584b98eff2 Author: Benjamin Dauvergne Date: Fri Oct 1 12:33:24 2010 +0200 [Core] replace all use of g_strcmp0 by lasso_strisequal and lasso_strisnotequal Too much human errors with strcmp kind of functions. Also change name os lasso_is_empty_string to lasso_strisempty. lasso/id-ff/profile.c | 6 +-- lasso/id-ff/provider.c | 2 +- lasso/id-ff/session.c | 2 +- lasso/id-wsf-2.0/data_service.c | 26 +++++----- lasso/id-wsf-2.0/discovery.c | 10 ++-- lasso/id-wsf-2.0/idwsf2_helper.c | 4 +- lasso/id-wsf-2.0/profile.c | 8 ++-- lasso/id-wsf-2.0/saml2_login.c | 2 +- lasso/id-wsf-2.0/soap_binding.c | 16 +++---- lasso/id-wsf/data_service.c | 12 ++--- lasso/id-wsf/wsf_profile.c | 14 +++--- lasso/lasso.c | 10 ++-- lasso/registry.c | 6 ++- lasso/saml-2.0/assertion_query.c | 4 +- lasso/saml-2.0/login.c | 98 +++++++++++++++++--------------------- lasso/saml-2.0/logout.c | 6 +-- lasso/saml-2.0/profile.c | 7 +-- lasso/saml-2.0/provider.c | 28 +++++------ lasso/saml-2.0/saml2_helper.c | 13 ++--- lasso/utils.h | 2 +- lasso/xml/saml-2.0/saml2_name_id.c | 8 ++-- lasso/xml/tools.c | 4 +- lasso/xml/xml.c | 17 ++++--- tests/login_tests.c | 4 +- tests/login_tests_saml2.c | 8 ++-- 25 files changed, 159 insertions(+), 158 deletions(-) commit b5fcbc645576cd953a4b23ce804ea503b57eec4a Author: Benjamin Dauvergne Date: Fri Oct 1 12:23:57 2010 +0200 [Core] add helper API for string comparaison It should remove most errors when comparing strings. lasso/utils.h | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) commit fe63f7a517b7e27dcc0853515ddd0ff1654de179 Author: Benjamin Dauvergne Date: Fri Oct 1 12:22:17 2010 +0200 [SAMLv2] add missing compare to 0 introduced in 7386dc8189 I hate strcmp. lasso/saml-2.0/login.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit c02711bf7971f645de98d36ca18c8ef7556ab528 Author: Benjamin Dauvergne Date: Thu Sep 30 11:21:09 2010 +0200 [Bindings] change prefix for ignoring soap_binding related files bindings/bindings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 4c3af26a58ff0aaf3abf54e6b01d843ec56c192b Author: Benjamin Dauvergne Date: Thu Sep 30 10:58:50 2010 +0200 [SAMLv2] also initialize Destination for response messages asynchronous bindings needs Destination attribute even for response messages. lasso/saml-2.0/profile.c | 5 +++++ 1 file changed, 5 insertions(+) commit 7386dc8189c25ee3654b9b3c41981c768c8eac5b Author: Benjamin Dauvergne Date: Thu Sep 30 10:58:18 2010 +0200 [SAMLv2] when NidPolicy->Format is NULL or unspecified, return transient Add more default cases. lasso/saml-2.0/login.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit b20552c417eaa99c3ae9a13460cb6b629c628d81 Author: Benjamin Dauvergne Date: Wed Sep 29 16:37:28 2010 +0200 [Tests] update perfs to test each phase of WebSSO separately and use SAMLv2 I removed signature at the message level for the response, it should simulate apporiately the artifact binding with SSL transport. tests/perfs.c | 204 ++++++++++++++++++++++++++++++++-------------------------- 1 file changed, 111 insertions(+), 93 deletions(-) commit 5f7a08acb377c4d4675250846c46abcddb7bae36 Author: Benjamin Dauvergne Date: Wed Sep 29 15:56:59 2010 +0200 [Bindings] restore presence of SOAP nodes The node to exclude when ID-WSF is disactivated was soap_binding_ ones. bindings/bindings.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit cd7b3e92c58931f21d5a45e65fc9a68a2d482074 Author: Benjamin Dauvergne Date: Wed Sep 29 00:10:09 2010 +0200 [Core] fix break of lasso_profile_get_request_type_from_soap_msg from commit b9d535625 ManageNameIDRequest is not an ID-WSF kind of request. lasso/id-ff/profile.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 4a970453dee42ad1cbef4505e10a3c5a9ff69f61 Author: Benjamin Dauvergne Date: Mon Sep 27 16:18:57 2010 +0200 [Core] add missing annotation to lasso_*_dump functions The string returned by these functions is newly allocated and must be freed by the caller. lasso/id-ff/identity.c | 2 +- lasso/id-ff/login.c | 2 +- lasso/id-ff/logout.c | 2 +- lasso/id-ff/name_registration.c | 2 +- lasso/id-ff/server.c | 2 +- lasso/id-ff/session.c | 2 +- lasso/xml/xml.c | 4 ++-- 7 files changed, 8 insertions(+), 8 deletions(-) commit b4e04a07165557b7193f715d55a31dfdd287d7ec Author: Benjamin Dauvergne Date: Mon Sep 27 16:18:05 2010 +0200 [ID-WSFv1] fix other misuses of the macro lasso_foreach lasso/id-wsf/data_service.c | 5 +++-- lasso/id-wsf/personal_profile_service.c | 6 +++--- 2 files changed, 6 insertions(+), 5 deletions(-) commit 6cc9ae7e32228322ca3ae2d15fa23c350f9ffdca Author: Benjamin Dauvergne Date: Mon Sep 27 15:41:53 2010 +0200 [SAMLv2] fix wrong order in use of macro lasso_foreach The first argument must be the iterator, the second is the iterable. Also add a non-regression test with Googleapps metadata and and a typical authn request. lasso/saml-2.0/provider.c | 2 +- tests/Makefile.am | 2 +- tests/non_regression_tests.c | 105 +++++++++++++++++++++++++++++++++++++++++++ tests/tests.c | 2 + 4 files changed, 109 insertions(+), 2 deletions(-) commit 5bcbb0e55fab8b8f4562a7c90ab60a8baa9ef6fd Author: Benjamin Dauvergne Date: Fri Sep 17 18:07:39 2010 +0200 [SAMLv2] fix early release of the request when using idp_initiaed login lasso/saml-2.0/login.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 1ffece0e577b1cba19178f95acbbbd3ce895e4f8 Author: Benjamin Dauvergne Date: Fri Sep 17 18:01:31 2010 +0200 [SAMLv2] fix memleak of request in lasso_name_id_management_process_request_msg lasso/saml-2.0/name_id_management.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit b606f0dbee54915c0ab38e05cec68c8d4ebcf154 Author: Benjamin Dauvergne Date: Fri Sep 17 17:06:27 2010 +0200 Add files to .gitignore .gitignore | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) commit 6adc8c3e54180697e063e15b5467a85fbe4324eb Author: Benjamin Dauvergne Date: Fri Sep 17 17:01:27 2010 +0200 [Tests] remove a valgrind suppression on g_log_default_handler tests/valgrind/lasso.supp | 10 ---------- 1 file changed, 10 deletions(-) commit 88623c29f3dfb56483138961a4a906c75f48e355 Author: Benjamin Dauvergne Date: Fri Sep 17 17:00:21 2010 +0200 [Tests] add valgrind targets in the Makefile: leakcheck, leakcheck-reachable and massif tests/Makefile.am | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) commit 19aad7629ad4c41a7b95ad0603cc72b59dbf07e6 Author: Benjamin Dauvergne Date: Fri Sep 17 16:44:15 2010 +0200 [SAMLv2] fix memleak of request in lasso_saml20_login_process_authn_request_msg lasso/saml-2.0/login.c | 1 + 1 file changed, 1 insertion(+) commit 667f846085298a851a803ae8aacd29571270683c Author: Benjamin Dauvergne Date: Fri Sep 17 16:36:32 2010 +0200 [Core] fix leak of provider->private_data->endpoints lasso/id-ff/provider.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) commit d2adc740a25a822a146255e8b5f035aac94903bd Author: Benjamin Dauvergne Date: Fri Sep 17 16:24:21 2010 +0200 [Tests] fix leak of content in test01_server_new tests/random_tests.c | 1 + 1 file changed, 1 insertion(+) commit 87c3f63dd0054f3217aa98ecf323953720bbfcaa Author: Benjamin Dauvergne Date: Fri Sep 17 16:23:25 2010 +0200 [Tests] fix leak of idpLogoutContext in test04_sso_then_slo_soap tests/login_tests_saml2.c | 1 + 1 file changed, 1 insertion(+) commit 69f46ad974b5748ee01a511a87c527b63a393af1 Author: Benjamin Dauvergne Date: Fri Sep 17 16:19:23 2010 +0200 [Core] fix leak of provider->private_data->endpoints lasso/id-ff/provider.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 73949289ee8b302e5b560922e4be09f0efe2187e Author: Benjamin Dauvergne Date: Fri Sep 17 16:15:46 2010 +0200 [XML] fix memleak in lasso_node_export_to_soap lasso/xml/xml.c | 1 + 1 file changed, 1 insertion(+) commit 3631ad59a98ccb7deb34fa0aced21f20d994a45a Author: Benjamin Dauvergne Date: Fri Sep 17 16:12:21 2010 +0200 [XML] fix memleak of xmlSecKeyMngr when loading a key from a KeyInfo node lasso/xml/tools.c | 1 + 1 file changed, 1 insertion(+) commit fdd401cea79a48314d678af7827ce4f96a355223 Author: Benjamin Dauvergne Date: Fri Sep 17 16:10:06 2010 +0200 [XML] fix memleak in get_xmlNode for LassoSamlp2LogoutRequest lasso/xml/saml-2.0/samlp2_logout_request.c | 1 + 1 file changed, 1 insertion(+) commit 0b8bec9b787cc210ae512bd1fc33db5c9fdc78a1 Author: Benjamin Dauvergne Date: Fri Sep 17 15:26:10 2010 +0200 [XML] fix memleak in get_xmlNode for LassoSamlp2Response lasso/xml/saml-2.0/samlp2_response.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 56d81aa6e786d191652242af15278568ae567e89 Author: Benjamin Dauvergne Date: Fri Sep 17 15:23:21 2010 +0200 [SAMLv2] add missing stack variable initialization lasso/saml-2.0/assertion_query.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 1c0dd4b014ea10b87e4c6dbc149b1e140631233c Author: Benjamin Dauvergne Date: Fri Sep 17 15:23:12 2010 +0200 [SAMLv2] fix unused variable warning lasso/saml-2.0/assertion_query.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 6eeebd0304ddee0a019cfe7383bf731decae34c7 Author: Benjamin Dauvergne Date: Fri Sep 17 15:22:29 2010 +0200 [SAMLv2] in profile.c fix uncovered enumeration value in switch lasso/saml-2.0/profile.c | 6 ++++++ 1 file changed, 6 insertions(+) commit a02645ba3780bc651a9d32adbeacbce80c9937f4 Author: Benjamin Dauvergne Date: Fri Sep 17 15:21:44 2010 +0200 [XML] fix unused variable warnings lasso/xml/xml.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit 17cf81152a3fec7dcdb702a4074042679c181068 Author: Benjamin Dauvergne Date: Fri Sep 17 15:21:37 2010 +0200 [XML] fix mem leak whene releasing CustomElement structures lasso/xml/xml.c | 3 +++ 1 file changed, 3 insertions(+) commit 92b9eaa2fdf9241beb88bb0e3a0b59bf594f7190 Author: Benjamin Dauvergne Date: Fri Sep 17 14:44:31 2010 +0200 [Tests] fix mem leaks tests/login_tests_saml2.c | 1 + 1 file changed, 1 insertion(+) commit 8b0de80e4c4bde2182914974a27895e8a5c23eea Author: Benjamin Dauvergne Date: Fri Sep 17 14:42:54 2010 +0200 [SAMLv2] fix mem leaks lasso/saml-2.0/login.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) commit 280ee2820294b408ca654eb156bdeb09c265e79a Author: Benjamin Dauvergne Date: Fri Sep 10 15:33:50 2010 +0200 [SAMLv2 NID management] report signature error in response, do not check response signature if forbidden - build_response_msg will report signature error in response status code when called without an initialized response (without a call to validate_request) - process_response_msg now use lasso_saml20_profile_check_signature_status to check the signature status only if permitted. lasso/saml-2.0/name_id_management.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) commit d7c56d7c20cd958ebf907e870917b9004c6611d0 Author: Benjamin Dauvergne Date: Fri Sep 10 15:15:55 2010 +0200 [SAMLv2] move check for signature status to lasso_saml20_build_response_msg And also handle the signature verification hint. If process_msg fails, you must just call build_response_msg directly. Only check the signature on the response if asked, most applications should not care. lasso/saml-2.0/logout.c | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) commit 511dd3da9ed5441a500af4fe9b0767e3be8ab11a Author: Benjamin Dauvergne Date: Thu Sep 9 16:29:46 2010 +0200 [configure.ac] increment release version and libtool version info configure.ac | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 2b9751fa7fdc55e4bfbe2d58d55d45dd47e09467 Author: Benjamin Dauvergne Date: Thu Sep 9 16:28:27 2010 +0200 Add files to .gitignore .gitignore | 72 +++++++++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 50 insertions(+), 22 deletions(-) commit 51d5d4d3e37fb7c8ec3aa3d5f9d336fd10a5bff4 Author: Benjamin Dauvergne Date: Thu Sep 9 16:20:17 2010 +0200 [SAMLv2] apply the LassoProfileVerifySignatureHint when processing requests The check was missing for processing of logout requests, name id management request and assertion query responses. A new internal function lasso_saml20_profile_check_signature_status is added. lasso/saml-2.0/assertion_query.c | 17 ++++------------- lasso/saml-2.0/logout.c | 19 ++++++------------- lasso/saml-2.0/name_id_management.c | 30 ++++++++---------------------- lasso/saml-2.0/profile.c | 30 ++++++++++++++++++++++++++---- lasso/saml-2.0/profileprivate.h | 1 + 5 files changed, 45 insertions(+), 52 deletions(-) commit b9d53562593cbf2ba47c8869f8c3b9dc37a4ae1f Author: Benjamin Dauvergne Date: Thu Sep 9 01:09:28 2010 +0200 [ID-WSFv1&ID-WSFv2] separate better strings for ID-WSF from other strings Code in core source file which depend upon ID-WSF symbols have been conditionalized, and each id-wsf source file now include directly its need string header. lasso/id-ff/profile.c | 6 ++++++ lasso/id-wsf-2.0/data_service.c | 1 + lasso/id-wsf-2.0/discovery.c | 3 ++- lasso/id-wsf-2.0/identity.c | 1 + lasso/id-wsf-2.0/idwsf2_helper.c | 1 + lasso/id-wsf-2.0/profile.c | 2 ++ lasso/id-wsf-2.0/saml2_login.c | 1 + lasso/id-wsf-2.0/server.c | 1 + lasso/id-wsf-2.0/session.c | 1 + lasso/id-wsf-2.0/soap_binding.c | 2 ++ lasso/id-wsf/authentication.c | 1 + lasso/id-wsf/data_service.c | 1 + lasso/id-wsf/discovery.c | 2 ++ lasso/id-wsf/id_ff_extensions.c | 1 + lasso/id-wsf/interaction_profile_service.c | 1 + lasso/id-wsf/personal_profile_service.c | 1 + lasso/id-wsf/wsf_profile.c | 1 + lasso/id-wsf/wsf_utils.c | 1 + lasso/xml/Makefile.am | 2 +- lasso/xml/disco_authenticate_requester.c | 1 + lasso/xml/disco_authenticate_session_context.c | 1 + lasso/xml/disco_authorize_requester.c | 1 + lasso/xml/disco_credentials.c | 1 + lasso/xml/disco_description.c | 1 + lasso/xml/disco_encrypt_resource_id.c | 1 + lasso/xml/disco_encrypted_resource_id.c | 1 + lasso/xml/disco_generate_bearer_token.c | 1 + lasso/xml/disco_insert_entry.c | 1 + lasso/xml/disco_modify.c | 1 + lasso/xml/disco_modify_response.c | 1 + lasso/xml/disco_options.c | 1 + lasso/xml/disco_query.c | 1 + lasso/xml/disco_query_response.c | 1 + lasso/xml/disco_remove_entry.c | 1 + lasso/xml/disco_requested_service_type.c | 1 + lasso/xml/disco_resource_id.c | 1 + lasso/xml/disco_resource_offering.c | 1 + lasso/xml/disco_send_single_logout.c | 1 + lasso/xml/disco_service_instance.c | 1 + lasso/xml/dst_data.c | 1 + lasso/xml/dst_modification.c | 1 + lasso/xml/dst_modify.c | 1 + lasso/xml/dst_modify_response.c | 1 + lasso/xml/dst_new_data.c | 1 + lasso/xml/dst_query.c | 1 + lasso/xml/dst_query_item.c | 1 + lasso/xml/dst_query_response.c | 1 + lasso/xml/id-wsf-2.0/disco_abstract.c | 1 + lasso/xml/id-wsf-2.0/disco_endpoint_context.c | 1 + lasso/xml/id-wsf-2.0/disco_keys.c | 1 + lasso/xml/id-wsf-2.0/disco_options.c | 1 + lasso/xml/id-wsf-2.0/disco_provider_id.c | 1 + lasso/xml/id-wsf-2.0/disco_query.c | 1 + lasso/xml/id-wsf-2.0/disco_query_response.c | 1 + lasso/xml/id-wsf-2.0/disco_requested_service.c | 1 + lasso/xml/id-wsf-2.0/disco_security_context.c | 1 + lasso/xml/id-wsf-2.0/disco_service_context.c | 1 + lasso/xml/id-wsf-2.0/disco_service_type.c | 1 + .../xml/id-wsf-2.0/disco_svc_md_association_add.c | 1 + .../disco_svc_md_association_add_response.c | 1 + .../id-wsf-2.0/disco_svc_md_association_delete.c | 1 + .../disco_svc_md_association_delete_response.c | 1 + .../id-wsf-2.0/disco_svc_md_association_query.c | 1 + .../disco_svc_md_association_query_response.c | 1 + lasso/xml/id-wsf-2.0/disco_svc_md_delete.c | 1 + .../xml/id-wsf-2.0/disco_svc_md_delete_response.c | 1 + lasso/xml/id-wsf-2.0/disco_svc_md_query.c | 1 + lasso/xml/id-wsf-2.0/disco_svc_md_query_response.c | 1 + lasso/xml/id-wsf-2.0/disco_svc_md_register.c | 1 + .../id-wsf-2.0/disco_svc_md_register_response.c | 1 + lasso/xml/id-wsf-2.0/disco_svc_md_replace.c | 1 + .../xml/id-wsf-2.0/disco_svc_md_replace_response.c | 1 + lasso/xml/id-wsf-2.0/disco_svc_metadata.c | 1 + lasso/xml/id-wsf-2.0/dst_data_response_base.c | 1 + lasso/xml/id-wsf-2.0/dst_delete_item_base.c | 1 + lasso/xml/id-wsf-2.0/dst_delete_response.c | 1 + lasso/xml/id-wsf-2.0/dst_request.c | 1 + lasso/xml/id-wsf-2.0/dst_result_query_base.c | 1 + lasso/xml/id-wsf-2.0/dst_test_item_base.c | 1 + lasso/xml/id-wsf-2.0/dstref_app_data.c | 1 + lasso/xml/id-wsf-2.0/dstref_create.c | 1 + lasso/xml/id-wsf-2.0/dstref_create_item.c | 1 + lasso/xml/id-wsf-2.0/dstref_create_response.c | 1 + lasso/xml/id-wsf-2.0/dstref_data.c | 1 + lasso/xml/id-wsf-2.0/dstref_data_response.c | 1 + lasso/xml/id-wsf-2.0/dstref_delete.c | 1 + lasso/xml/id-wsf-2.0/dstref_delete_item.c | 1 + lasso/xml/id-wsf-2.0/dstref_delete_response.c | 1 + lasso/xml/id-wsf-2.0/dstref_item_data.c | 1 + lasso/xml/id-wsf-2.0/dstref_modify.c | 1 + lasso/xml/id-wsf-2.0/dstref_modify_item.c | 1 + lasso/xml/id-wsf-2.0/dstref_modify_response.c | 1 + lasso/xml/id-wsf-2.0/dstref_query.c | 1 + lasso/xml/id-wsf-2.0/dstref_query_item.c | 1 + lasso/xml/id-wsf-2.0/dstref_query_response.c | 1 + lasso/xml/id-wsf-2.0/dstref_result_query.c | 1 + lasso/xml/id-wsf-2.0/dstref_test_item.c | 1 + .../xml/id-wsf-2.0/ims_identity_mapping_request.c | 1 + .../xml/id-wsf-2.0/ims_identity_mapping_response.c | 1 + lasso/xml/id-wsf-2.0/ims_mapping_input.c | 1 + lasso/xml/id-wsf-2.0/ims_mapping_output.c | 1 + lasso/xml/id-wsf-2.0/is_help.c | 1 + lasso/xml/id-wsf-2.0/is_inquiry.c | 1 + lasso/xml/id-wsf-2.0/is_inquiry_element.c | 1 + lasso/xml/id-wsf-2.0/is_interaction_request.c | 1 + lasso/xml/id-wsf-2.0/is_interaction_response.c | 1 + lasso/xml/id-wsf-2.0/is_interaction_statement.c | 1 + lasso/xml/id-wsf-2.0/is_item.c | 1 + lasso/xml/id-wsf-2.0/is_parameter.c | 1 + lasso/xml/id-wsf-2.0/is_select.c | 1 + lasso/xml/id-wsf-2.0/is_text.c | 1 + lasso/xml/id-wsf-2.0/ps_add_collection_request.c | 1 + lasso/xml/id-wsf-2.0/ps_add_collection_response.c | 1 + lasso/xml/id-wsf-2.0/ps_add_entity_request.c | 1 + lasso/xml/id-wsf-2.0/ps_add_entity_response.c | 1 + lasso/xml/id-wsf-2.0/ps_add_known_entity_request.c | 1 + .../xml/id-wsf-2.0/ps_add_known_entity_response.c | 1 + .../xml/id-wsf-2.0/ps_add_to_collection_request.c | 1 + lasso/xml/id-wsf-2.0/ps_get_object_info_request.c | 1 + lasso/xml/id-wsf-2.0/ps_get_object_info_response.c | 1 + lasso/xml/id-wsf-2.0/ps_item_data.c | 1 + lasso/xml/id-wsf-2.0/ps_list_members_request.c | 1 + lasso/xml/id-wsf-2.0/ps_list_members_response.c | 1 + lasso/xml/id-wsf-2.0/ps_notification.c | 1 + lasso/xml/id-wsf-2.0/ps_notify.c | 1 + lasso/xml/id-wsf-2.0/ps_object.c | 1 + lasso/xml/id-wsf-2.0/ps_query_objects_request.c | 1 + lasso/xml/id-wsf-2.0/ps_query_objects_response.c | 1 + .../xml/id-wsf-2.0/ps_remove_collection_request.c | 1 + lasso/xml/id-wsf-2.0/ps_remove_entity_request.c | 1 + .../id-wsf-2.0/ps_remove_from_collection_request.c | 1 + lasso/xml/id-wsf-2.0/ps_request_abstract.c | 1 + .../xml/id-wsf-2.0/ps_resolve_identifier_request.c | 1 + .../id-wsf-2.0/ps_resolve_identifier_response.c | 1 + lasso/xml/id-wsf-2.0/ps_resolve_input.c | 1 + lasso/xml/id-wsf-2.0/ps_response_abstract.c | 1 + lasso/xml/id-wsf-2.0/ps_set_object_info_request.c | 1 + lasso/xml/id-wsf-2.0/ps_test_membership_request.c | 1 + lasso/xml/id-wsf-2.0/ps_test_membership_response.c | 1 + lasso/xml/id-wsf-2.0/sb2_consent.c | 1 + lasso/xml/id-wsf-2.0/sb2_credentials_context.c | 1 + lasso/xml/id-wsf-2.0/sb2_endpoint_update.c | 1 + lasso/xml/id-wsf-2.0/sb2_redirect_request.c | 1 + lasso/xml/id-wsf-2.0/sb2_sender.c | 1 + lasso/xml/id-wsf-2.0/sb2_target_identity.c | 1 + lasso/xml/id-wsf-2.0/sb2_timeout.c | 1 + lasso/xml/id-wsf-2.0/sb2_usage_directive.c | 1 + lasso/xml/id-wsf-2.0/sb2_user_interaction_header.c | 1 + lasso/xml/id-wsf-2.0/sbf_framework.c | 1 + lasso/xml/id-wsf-2.0/sec_token.c | 1 + lasso/xml/id-wsf-2.0/sec_token_policy.c | 1 + lasso/xml/id-wsf-2.0/sec_transited_provider_path.c | 1 + lasso/xml/id-wsf-2.0/subs_notification.c | 1 + lasso/xml/id-wsf-2.0/subs_notify_response.c | 1 + lasso/xml/id-wsf-2.0/subs_ref_item.c | 1 + lasso/xml/id-wsf-2.0/subs_subscription.c | 1 + lasso/xml/id-wsf-2.0/subsref_app_data.c | 1 + lasso/xml/id-wsf-2.0/subsref_create.c | 1 + lasso/xml/id-wsf-2.0/subsref_create_item.c | 1 + lasso/xml/id-wsf-2.0/subsref_create_response.c | 1 + lasso/xml/id-wsf-2.0/subsref_data.c | 1 + lasso/xml/id-wsf-2.0/subsref_data_response.c | 1 + lasso/xml/id-wsf-2.0/subsref_delete.c | 1 + lasso/xml/id-wsf-2.0/subsref_delete_item.c | 1 + lasso/xml/id-wsf-2.0/subsref_delete_response.c | 1 + lasso/xml/id-wsf-2.0/subsref_item_data.c | 1 + lasso/xml/id-wsf-2.0/subsref_modify.c | 1 + lasso/xml/id-wsf-2.0/subsref_modify_item.c | 1 + lasso/xml/id-wsf-2.0/subsref_modify_response.c | 1 + lasso/xml/id-wsf-2.0/subsref_notification.c | 1 + lasso/xml/id-wsf-2.0/subsref_notify.c | 1 + lasso/xml/id-wsf-2.0/subsref_notify_response.c | 1 + lasso/xml/id-wsf-2.0/subsref_query.c | 1 + lasso/xml/id-wsf-2.0/subsref_query_item.c | 1 + lasso/xml/id-wsf-2.0/subsref_query_response.c | 1 + lasso/xml/id-wsf-2.0/subsref_result_query.c | 1 + lasso/xml/id-wsf-2.0/subsref_subscription.c | 1 + lasso/xml/id-wsf-2.0/subsref_test_item.c | 1 + lasso/xml/id-wsf-2.0/util_empty.c | 1 + lasso/xml/id-wsf-2.0/util_extension.c | 1 + lasso/xml/id-wsf-2.0/util_response.c | 1 + lasso/xml/id-wsf-2.0/util_status.c | 1 + lasso/xml/idwsf_strings.h | 22 ---------------------- lasso/xml/is_help.c | 1 + lasso/xml/is_inquiry.c | 1 + lasso/xml/is_inquiry_element.c | 1 + lasso/xml/is_interaction_request.c | 1 + lasso/xml/is_interaction_response.c | 1 + lasso/xml/is_interaction_statement.c | 1 + lasso/xml/is_item.c | 1 + lasso/xml/is_parameter.c | 1 + lasso/xml/is_redirect_request.c | 1 + lasso/xml/is_select.c | 1 + lasso/xml/is_text.c | 1 + lasso/xml/is_user_interaction.c | 1 + lasso/xml/sa_credentials.c | 1 + lasso/xml/sa_parameter.c | 1 + lasso/xml/sa_password_transforms.c | 1 + lasso/xml/sa_sasl_request.c | 1 + lasso/xml/sa_sasl_response.c | 1 + lasso/xml/sa_transform.c | 1 + lasso/xml/sec_resource_access_statement.c | 1 + lasso/xml/soap_binding_consent.c | 1 + lasso/xml/soap_binding_correlation.c | 1 + lasso/xml/soap_binding_ext_credential.c | 1 + lasso/xml/soap_binding_ext_credentials_context.c | 1 + .../xml/soap_binding_ext_service_instance_update.c | 1 + lasso/xml/soap_binding_ext_timeout.c | 1 + lasso/xml/soap_binding_processing_context.c | 1 + lasso/xml/soap_binding_provider.c | 1 + lasso/xml/soap_binding_usage_directive.c | 1 + lasso/xml/strings.h | 21 ++++++++++++++++++++- lasso/xml/ws/wsa_attributed_any.c | 1 + lasso/xml/ws/wsa_attributed_qname.c | 1 + lasso/xml/ws/wsa_attributed_unsigned_long.c | 1 + lasso/xml/ws/wsa_attributed_uri.c | 1 + lasso/xml/ws/wsa_endpoint_reference.c | 1 + lasso/xml/ws/wsa_metadata.c | 1 + lasso/xml/ws/wsa_problem_action.c | 1 + lasso/xml/ws/wsa_reference_parameters.c | 1 + lasso/xml/ws/wsa_relates_to.c | 1 + lasso/xml/ws/wsse_embedded.c | 1 + lasso/xml/ws/wsse_reference.c | 1 + lasso/xml/ws/wsse_security_header.c | 1 + lasso/xml/ws/wsse_security_token_reference.c | 1 + lasso/xml/ws/wsse_transformation_parameters.c | 1 + lasso/xml/ws/wsse_username_token.c | 1 + lasso/xml/ws/wsu_timestamp.c | 1 + lasso/xml/xml.c | 5 +++++ 229 files changed, 260 insertions(+), 25 deletions(-) commit 8082428d8007e4c712de453b26af7ff7e01771e1 Merge: 817ab34e c838dea4 Author: Benjamin Dauvergne Date: Wed Sep 8 12:25:13 2010 +0200 Merge branches 'master' and 'release' of bdauvergne@xen3.lycope.priv:/var/git/lasso into release commit c838dea4645e334871ac83bed7825039ff7ad4a8 Author: Frédéric Péters Date: Wed Sep 8 11:35:56 2010 +0200 News entry for 2.3.1 & 2.3.2 (combined) website/web/news/16-release-2.3.1-2.3.2.xml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) commit 817ab34e95dcdc2ae1325059f73b6c3b1a905cb2 Merge: e3753ad2 5ef593cf Author: Benjamin Dauvergne Date: Tue Sep 7 19:27:46 2010 +0200 Merge branch 'hotfixes-2.3.2' into develop commit 8e8afcbd353b1d97cec27a68973410bbb8254683 Merge: 61dd8b7e 5ef593cf Author: Benjamin Dauvergne Date: Tue Sep 7 19:27:42 2010 +0200 Merge branch 'hotfixes-2.3.2' commit 5ef593cfdaba17b8d28a63d584694027451fb611 Author: Benjamin Dauvergne Date: Tue Sep 7 19:10:48 2010 +0200 Increment revision in version configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit ba2705bbd74321106887ba5d3c380ea5bc863148 Author: Benjamin Dauvergne Date: Tue Sep 7 19:00:43 2010 +0200 Update files for release 2.3.2 NEWS | 8 +- abi/abi-2.3.2 | 1091 ++++++++++++++++++++++++++++++++++++++++ lasso.doap | 4 + website/templates/base.ezt | 6 +- website/web/doap.rdf | 4 + website/web/download/index.xml | 2 +- website/web/index.xml | 6 +- 7 files changed, 1113 insertions(+), 8 deletions(-) commit fb23db3ca635d49e062e40a1994e0e738ffd5ff5 Author: Benjamin Dauvergne Date: Tue Sep 7 18:43:22 2010 +0200 Fix lasso soname change If new interfaces are added, first and last number must be incremented. As new enumeration value have been added, this is the case. configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 61dd8b7eb9989116467b4011342adbdbc4c3f002 Merge: 3e8c2b24 2736139f Author: Benjamin Dauvergne Date: Tue Sep 7 17:09:39 2010 +0200 Merge commit 'origin/master' commit e3753ad237fff9e2b4a04b585f7faa01e5b78183 Merge: aaca9ce9 9af598f8 Author: Benjamin Dauvergne Date: Tue Sep 7 17:02:58 2010 +0200 Merge branch 'hotfixes-2.3.1' into develop commit 3e8c2b24b7141f314dd8ddb72c56325db7194c26 Merge: 5f6c27f7 9af598f8 Author: Benjamin Dauvergne Date: Tue Sep 7 17:02:12 2010 +0200 Merge branch 'hotfixes-2.3.1' commit 9af598f85cec93d40218656bc34d01690fe635e7 Author: Benjamin Dauvergne Date: Tue Sep 7 16:39:01 2010 +0200 Update files for release 2.3.1 ChangeLog | 259 +++++++++++ NEWS | 21 +- abi/{abi-2.3 => abi-2.3.0} | 0 abi/abi-2.3.1 | 1091 ++++++++++++++++++++++++++++++++++++++++++++ configure.ac | 2 +- lasso.doap | 4 + website/templates/base.ezt | 6 +- website/web/doap.rdf | 10 +- 8 files changed, 1385 insertions(+), 8 deletions(-) commit b1f6b7e0ed03cb57c349ace061c9e015b8b94bdb Author: Benjamin Dauvergne Date: Tue Sep 7 10:34:34 2010 +0200 [SAMLv2] when no artifact message is present, still return a success status It is mandated by the specification. configure.ac | 2 +- lasso/saml-2.0/profile.c | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) commit 08d61d5c959e999c2299cf314afe304b8647af0b Author: Benjamin Dauvergne Date: Mon Sep 6 16:32:39 2010 +0200 [Tests integration] fix configuration variable name tests/integration/saml2/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 3f336a8e83515b7136a04361199be082cd3d8555 Merge: 9ab6b944 aaca9ce9 Author: Benjamin Dauvergne Date: Fri Sep 3 19:07:08 2010 +0200 Merge branch 'develop' into hotfixes-2.3.1 commit 9ab6b944f14556422fd4f279be5f568b0b18cfe4 Author: Benjamin Dauvergne Date: Fri Sep 3 19:05:27 2010 +0200 [Core] fix memory leak in lasso_endpoint_free lasso/id-ff/provider.c | 1 + 1 file changed, 1 insertion(+) commit aaca9ce9927d9ea1568dfa89ba05a41b40333e9b Author: Benjamin Dauvergne Date: Fri Sep 3 19:01:30 2010 +0200 [ID-FFv1.2&SAMLv2] add more warning for failure to load metadata file Report detailf of the failure through warning log. lasso/id-ff/provider.c | 1 + lasso/saml-2.0/provider.c | 6 ++++++ 2 files changed, 7 insertions(+) commit f245907b8ce8bc216d4f68eae215049dfde0ef2d Author: Benjamin Dauvergne Date: Fri Sep 3 17:48:11 2010 +0200 [SAMLv2] when failing to recreate the content for the ArtefactResponse set a lasso specific status code lasso/saml-2.0/profile.c | 3 ++- lasso/xml/strings.h | 7 +++++++ 2 files changed, 9 insertions(+), 1 deletion(-) commit 4178cbef13b2fbb2feb0f9c8ca6d691ffc060b2d Author: Benjamin Dauvergne Date: Wed Sep 1 13:03:42 2010 +0200 [SAMLv2] change the way content is stored and loaded for the HTTP-Artifact binding Previously content was stored as the result of lasso_node_dump method then reloaded, and then serialized again as part of the ArtifactResponse message. lasso_node_dump was ignoring all hint to sign node, but keeping the needed parameters around. That's not what must be done, the signature should happen at the generation of the artifact and the result must manipulated as is (i.e. XML content) and never moved back to the land of LassoNode objects. Now the content is: - first removed of any signature at the message level, because the ArtifactResponse will take care of this, (any signature under this level (like at the assertion) is kept), - serialized using lasso_node_export_to_xml, - reloaded using lasso_xml_parse_memory, - and put into the ArtifactResponse using a lasso_misc_text_node_new_with_xml_node. lasso/saml-2.0/profile.c | 49 ++++++++++++++++++++++++++++++------------------ 1 file changed, 31 insertions(+), 18 deletions(-) commit edd618319cca334a311ad31103d8a24cb7701ef8 Author: Benjamin Dauvergne Date: Wed Sep 1 12:49:38 2010 +0200 [SAMLv2] make lasso_saml20_profile_generate_artifact a static function It is only used in lasso/saml-2.0/profile.c anyway. lasso/saml-2.0/profile.c | 3 ++- lasso/saml-2.0/profileprivate.h | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) commit 90fda9d5564dfc690e5df9c9085bf534f918b2e8 Author: Benjamin Dauvergne Date: Wed Sep 1 12:44:42 2010 +0200 [Core] load signature parameters Generic signature parameters (attached as qdata to nodes) is now reloaded when initializing a node from XML for a node type with a signature snippet in its metadatas. It fixes the problematic usage of ciphered private keys with the HTTP-Artifact binding (which needs to keep a copy of the AuthnResponse around and to sign it later). lasso/xml/xml.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 49 insertions(+), 5 deletions(-) commit 5f5942a4dd209a6c608aa67f3af4b62c2be9bdf0 Author: Benjamin Dauvergne Date: Wed Sep 1 12:43:49 2010 +0200 [Core] add private function to read an integer attribute This function does integer parsing and range checks, it returns TRUE if all goes well. lasso/xml/xml.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) commit c3985f6f6dae132088d2541d798be1ed17714288 Author: Benjamin Dauvergne Date: Wed Sep 1 12:42:40 2010 +0200 [Core] add LAST enum values to LassoSignatureMethod and LassoSignatureType enumerations It helps making range checks. lasso/xml/tools.c | 4 ++++ lasso/xml/xml.h | 6 ++++-- 2 files changed, 8 insertions(+), 2 deletions(-) commit 35ff3d6950e6428c3a6c3d7b275313db2412aafa Author: Benjamin Dauvergne Date: Wed Sep 1 12:41:28 2010 +0200 [Strings] add string constant for the internal XML attributes used in dumps Add string constants for signature method, signature type, private key (file path or content), private key password and certificate (file path or content). Add cast for xmlChar constant strings definition in python bindings, it assumed all constant strings were char*. bindings/java/lang.py | 2 +- bindings/perl/lang.py | 2 +- bindings/php5/wrapper_source.py | 2 +- bindings/python/lang.py | 2 +- lasso/xml/strings.h | 35 +++++++++++++++++++++++++++++++++++ 5 files changed, 39 insertions(+), 4 deletions(-) commit 8ebeeb9a361d6bb9f7f74039eef9feb320feeb17 Author: Benjamin Dauvergne Date: Tue Aug 31 11:36:33 2010 +0200 [DOAP] fix typos Tags were badly formatted. lasso.doap | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 88236da2d2d23184cbd927720127dfb6da24b363 Author: Benjamin Dauvergne Date: Wed Aug 25 19:02:22 2010 +0200 [SAMLv2] mark Redirect binding as an invalid binding for return AuthnResponse This is really not supported by the SAMLv2 protocol. lasso/saml-2.0/login.c | 1 + 1 file changed, 1 insertion(+) commit 3769decc5842c141ffbe6816898448f5806902be Author: Benjamin Dauvergne Date: Wed Aug 25 19:02:01 2010 +0200 [SAMLv2] fix string in comment lasso/saml-2.0/login.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 2ab81b8e6f7870f650e41bf183c27cdbf7b6ef84 Author: Benjamin Dauvergne Date: Wed Aug 25 19:00:36 2010 +0200 [SAMLv2] replace use of lasso_provider_get_default_name_id_format with direct use of lasso_provider_get_metadata_one_for_role The first is trying to use provider->role to know which kind of role descriptor to lookup, but for the server object this field is 0 and when building authn request we know that we want our default NameIDFormat for the SP sso descriptor. lasso/saml-2.0/login.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 908d4288a0a7df793c104118dc921ba4b57a2bb8 Author: Benjamin Dauvergne Date: Wed Aug 25 18:57:25 2010 +0200 [SAMLv2] rebuild specialized LassoProvider methods upon new endpoints storage The new way of storing endpoints allows to keep ordering between endpoints with respect to the order of the index and isDefault field for indexed endpoint type, and to the XML node orders for other endpoints. It also simplifies the code. lasso/saml-2.0/provider.c | 517 +++++++++++++++++++++------------------------- 1 file changed, 239 insertions(+), 278 deletions(-) commit 5c85507ffd906e9a3f15b1206f9cc0e56bc8a207 Author: Benjamin Dauvergne Date: Wed Aug 25 18:55:04 2010 +0200 [Core] add destroy code for new private field endpoints The contained string must be disallocated if the object is destroyed. lasso/id-ff/provider.c | 8 ++++++++ 1 file changed, 8 insertions(+) commit fb8ed0e264bfc364a7dd30d41f1987b8b7cfb984 Author: Benjamin Dauvergne Date: Wed Aug 25 16:06:45 2010 +0200 [Core] add structure to store endpoints type for metadata files This new C structure will allow to filter ID-FFv1.2 and SAMLv2 endpoints more easily. lasso/id-ff/providerprivate.h | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) commit 4b05610fa5c88dccb1d49d74e2bb2896af4dac4b Author: Benjamin Dauvergne Date: Wed Aug 25 15:43:09 2010 +0200 [XML] use strtol instead of atoi to parse XSchema integers This commit also reject negative integers from being parsed (all integers in SAMLv2 and ID-FFv1.2 schemas are positive integers). lasso/xml/xml.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) commit fc9c2738c680370edba577689e341a0e7c87a182 Author: Benjamin Dauvergne Date: Wed Aug 25 15:41:55 2010 +0200 [SAMLv2] when AuthnRequest contains invalid attributes returns INVALID_REQUEST not NO_DEFAULT_ENDPOINT This is the right status to return. lasso/saml-2.0/login.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 2736139ffe659479e3e6f79a9c34dfdcb6e1d43b Author: Frédéric Péters Date: Wed Aug 25 14:23:35 2010 +0200 Fixed underlining of title NEWS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 72e581f8cfa70417477b60d0a5b4c80c475a2482 Author: Benjamin Dauvergne Date: Thu Aug 5 14:07:02 2010 +0200 [Core] fix change of enumeration value This change broke the API, revert it. lasso/id-ff/provider.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 66f314b191246aa3c17e00b44efe22f497d459d3 Author: Benjamin Dauvergne Date: Tue Jul 27 16:28:16 2010 +0200 [Website] update download link on front page website/web/index.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit b8aa645569cb9baf44b03c80797c4146cc3f7e98 Author: Benjamin Dauvergne Date: Tue Jul 27 16:26:27 2010 +0200 [Website] fix typos website/templates/base.ezt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 7f6331f73f6a63d8189a4a1c9e8bb44c878fcbb4 Author: Benjamin Dauvergne Date: Tue Jul 27 16:19:33 2010 +0200 [Website] fix source and download links The source repository is now the git repository on dev.entrouvert.org. Latest source release is 2.3.0. And git browser is included in our redmine. website/templates/base.ezt | 6 ++++-- website/web/download/index.xml | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) commit 1681bc52eb445218ce05a5df5dde022ec5ee87e3 Author: Benjamin Dauvergne Date: Tue Jul 27 16:13:41 2010 +0200 [Website] change position of Download block in right bar website/templates/base.ezt | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) commit 31a26948bf6aec1d956d14291054a206f2756737 Author: Benjamin Dauvergne Date: Tue Jul 27 16:13:07 2010 +0200 [Website] in convert-to-static.py, work around errors in build logs If Build() constructor fails, keep going. website/convert-to-static.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) commit 274670628f0adae7c547dd04c4017156025b5339 Author: Benjamin Dauvergne Date: Tue Jul 27 15:52:49 2010 +0200 [Website] fix wrong structure for the news file about release 2.3.0 website/web/news/15-release-2.3.0.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 20a1566dd868ed1706b5257a8b2f1ea09f835ee0 Author: Benjamin Dauvergne Date: Tue Jul 27 15:06:06 2010 +0200 [Website] import convert-to-static.py modification from lupin website/convert-to-static.py | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) commit d0be4ae7ad038359780e4a6e0d6a95d3d89ca55d Author: Benjamin Dauvergne Date: Tue Jul 27 14:48:52 2010 +0200 [Website] add news file aboute release 2.3.0 website/web/news/15-release-2.3.0.xml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) commit 6ba0e84575d723813f0222dd39115907229f681f Author: Benjamin Dauvergne Date: Thu Jul 22 06:02:43 2010 +0000 [Website] fix non escaped ampersand website/web/download/index.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 5f6c27f7b2f4eb571564f0666c0cbddb33656441 Author: Benjamin Dauvergne Date: Wed Jul 21 20:46:36 2010 +0000 [Release] update libtool version configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 23421726b8a571ddaadc5792e382a366b462356c Author: Benjamin Dauvergne Date: Wed Jul 21 20:30:55 2010 +0000 [Website] update download links website/web/download/index.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit e0925a1d78e7560ea90430a42ecd4b66222f6c1a Author: Benjamin Dauvergne Date: Wed Jul 21 20:30:54 2010 +0000 [Release] Update version number from 2.3 to 2.3.0 NEWS | 2 +- configure.ac | 2 +- lasso.doap | 4 ++-- website/web/doap.rdf | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) commit 3ff6acc26834a1f239086b782f8e2eb637e7b6cd Author: Benjamin Dauvergne Date: Wed Jul 21 19:06:30 2010 +0000 [Release] update release date in NEWS file NEWS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 68baeabd53de82b47485fa44b7fe17d87e7b5a7a Author: Benjamin Dauvergne Date: Wed Jul 21 18:45:20 2010 +0000 [Release] update ChangeLog ChangeLog | 2916 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 2916 insertions(+) commit 5ea1d1f1e50f4068442ee6314e15a84d71e0ba6c Author: Benjamin Dauvergne Date: Wed Jul 21 17:55:18 2010 +0000 [Release] Lasso 2.3 - update the NEWS file - add abi-2.3 file - update DOAP files - update lasso website template - add temporary message to download pages, as there are no download links currently. NEWS | 128 +++++ abi/abi-2.3 | 1083 ++++++++++++++++++++++++++++++++++++++++ configure.ac | 2 +- lasso.doap | 4 + website/templates/base.ezt | 7 +- website/web/doap.rdf | 4 + website/web/download/index.xml | 24 +- 7 files changed, 1236 insertions(+), 16 deletions(-) commit 42d1c18a69125fe633c89aca613673049ffa4d2b Author: Benjamin Dauvergne Date: Wed Jul 21 14:54:59 2010 +0000 [Core] add logos to EXTRA_DIST Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit ee329487fe42360249bc342cfd7b2204c0794656 Author: Benjamin Dauvergne Date: Wed Jul 21 14:54:58 2010 +0000 [Core] add HACKING to EXTRA_DIST Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit a87ed1af5cb5171a5f307137b77c17dbcd9b5d76 Author: Benjamin Dauvergne Date: Wed Jul 21 14:14:49 2010 +0000 [Documentation] add missing declaration to lasso-sections.txt docs/reference/lasso/lasso-sections.txt | 5 +++++ 1 file changed, 5 insertions(+) commit b6b1b6345798e04d7198a5929c667d8a54792252 Author: Benjamin Dauvergne Date: Wed Jul 21 14:14:48 2010 +0000 [Tests] change the way tests data is distributed Instead of using a Makefile.am in each data directory, each data directoy has been added to the EXTRA_DIST for the parent directory Makefile.am. tests/data/Makefile.am | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit 9990d33a84db6318e3889dc75ec625db588ab7d3 Author: Benjamin Dauvergne Date: Wed Jul 21 14:12:06 2010 +0000 [Core] remove now useless .cvsignore files .cvsignore | 11 ----------- 1 file changed, 11 deletions(-) commit 05e49cc37e643cd50d8395d10a3aeadbe3baf503 Author: Benjamin Dauvergne Date: Wed Jul 21 14:12:06 2010 +0000 [Core] remove now useless .cvsignore files .cvsignore | 22 ---------------------- debian/.cvsignore | 11 ----------- docs/.cvsignore | 3 --- docs/lasso-book/.cvsignore | 4 ---- docs/lasso-book/figures/.cvsignore | 4 ---- docs/reference/.cvsignore | 11 ----------- lasso/.cvsignore | 12 ------------ lasso/id-ff/.cvsignore | 7 ------- lasso/id-wsf/.cvsignore | 7 ------- lasso/saml-2.0/.cvsignore | 7 ------- lasso/xml/.cvsignore | 7 ------- lasso/xml/saml-2.0/.cvsignore | 7 ------- tests/.cvsignore | 6 ------ tests/data/.cvsignore | 2 -- tests/data/ca1-la/.cvsignore | 2 -- tests/data/idp1-la/.cvsignore | 2 -- tests/data/lecp1-la/.cvsignore | 2 -- tests/data/sp1-la/.cvsignore | 2 -- win32/.cvsignore | 3 --- win32/msvc/.cvsignore | 4 ---- win32/msvc/java/.cvsignore | 2 -- win32/msvc/php/.cvsignore | 2 -- win32/msvc/python/.cvsignore | 2 -- win32/nsis/.cvsignore | 3 --- 24 files changed, 134 deletions(-) commit 341cc7247b1a884c7269071dee3cc76daf9997c1 Author: Benjamin Dauvergne Date: Wed Jul 21 14:01:29 2010 +0000 [Binding perl] move DISCLEANFILES and CLEANFILES outside of the condition clauses bindings/perl/Makefile.am | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) commit 6be27fb3ed3a9ca84a3212a4dce43a2f33939d80 Author: Benjamin Dauvergne Date: Wed Jul 21 13:57:05 2010 +0000 [Tests] move sourceid-2.0beta-data to data directory tests/data/Makefile.am | 3 ++- tests/{ => data}/sourceid-2.0beta/login-response.xml | 0 2 files changed, 2 insertions(+), 1 deletion(-) commit dbda2d11c04d9d690d8010bda4a89ed23f109fd7 Author: Benjamin Dauvergne Date: Wed Jul 21 13:57:03 2010 +0000 [Core] move format-suppressions.py to tools directory {tests => tools}/format-suppressions.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) commit 953b8ce6a951785e7350e20bc00c424c8187f6d1 Author: Benjamin Dauvergne Date: Wed Jul 21 13:57:02 2010 +0000 [Core] add README.JAVA and README.WIN32 files to EXTRA_DIST Makefile.am | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 8f0834f8177c39094b58fb2a11260a98a5d7ab4c Author: Benjamin Dauvergne Date: Wed Jul 21 13:57:00 2010 +0000 [Core] complete README.JAVA about later release of gcj README.JAVA | 2 ++ 1 file changed, 2 insertions(+) commit 94a6b3cf8635e50c3c21060dea16b03583f6adde Author: Benjamin Dauvergne Date: Wed Jul 21 13:56:58 2010 +0000 [Core] add lasso.doap to EXTRA_DIST Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit a941d4cd0a90939b5c94af23f6eb3fad5bbdbbeb Author: Benjamin Dauvergne Date: Wed Jul 21 13:56:53 2010 +0000 [Core] add errors.c to EXTRA_DIST lasso/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 191e6a970a4f86208a3a290a248f33194b8876fb Author: Benjamin Dauvergne Date: Wed Jul 21 13:56:51 2010 +0000 [Core] remove unused build-strerror.pl lasso/build-strerror.pl | 24 ------------------------ 1 file changed, 24 deletions(-) commit ec435d244abd92a983d815512462aab1191aa62f Author: Benjamin Dauvergne Date: Wed Jul 21 13:56:50 2010 +0000 [Doc] move style.css to the reference directory, and add it to EXTRA_DIST docs/reference/lasso/Makefile.am | 2 +- docs/reference/{ => lasso}/style.css | 0 2 files changed, 1 insertion(+), 1 deletion(-) commit 6b86aa67efab3966be6c4577a83886bb93f7be9b Author: Benjamin Dauvergne Date: Wed Jul 21 13:56:49 2010 +0000 [Bindings] improve cleaning and distribution buiding bindings/java/Makefile.am | 2 ++ bindings/perl/Makefile.am | 2 +- bindings/php5/Makefile.am | 6 ++---- bindings/python/Makefile.am | 5 ++--- bindings/python/tests/Makefile.am | 3 ++- 5 files changed, 9 insertions(+), 9 deletions(-) commit 2d9a2ec35f9e326b89c4cb3624d15dbb387d2878 Author: Benjamin Dauvergne Date: Wed Jul 21 13:56:45 2010 +0000 [Tests java] remove Test.java Local test file wrongly commited. bindings/java/tests/Test.java | 11 ----------- 1 file changed, 11 deletions(-) commit 567a3d2bf293b989837208158527f6bcaeaf89fd Author: Benjamin Dauvergne Date: Wed Jul 21 13:56:44 2010 +0000 [Makefile] add abi to EXTRA_DIST Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 6ae30da50bf59f15fe5318edf4deaa4195737e82 Author: Benjamin Dauvergne Date: Wed Jul 21 13:56:42 2010 +0000 [Binding perl] add DISTCLEANFILES for Makefile.perl.old file bindings/perl/Makefile.am | 2 ++ 1 file changed, 2 insertions(+) commit 34c2f1759b118f65d2e10efa79a3fa0bf15f89f7 Author: Benjamin Dauvergne Date: Wed Jul 21 13:56:41 2010 +0000 [Tests] remove debugging printf tests/login_tests_saml2.c | 2 -- 1 file changed, 2 deletions(-) commit 50720779e26f5555c5294f6a3850f2859ec3d458 Author: Benjamin Dauvergne Date: Wed Jul 21 13:56:39 2010 +0000 [Tests] change the way tests data is distributed Instead of using a Makefile.am in each data directory, each data directoy has been added to the EXTRA_DIST for the parent directory Makefile.am. configure.ac | 8 -------- tests/Makefile.am | 4 ++-- tests/data/Makefile.am | 7 +++++-- tests/data/ca1-la/Makefile.am | 2 -- tests/data/idp1-la/Makefile.am | 2 -- tests/data/idp5-saml2/Makefile.am | 2 -- tests/data/idp6-saml2/Makefile.am | 2 -- tests/data/idp7-saml2/Makefile.am | 2 -- tests/data/lecp1-la/Makefile.am | 2 -- tests/data/sp1-la/Makefile.am | 2 -- tests/data/sp5-saml2/Makefile.am | 2 -- tests/data/sp6-saml2/Makefile.am | 2 -- tests/data/sp7-saml2/Makefile.am | 2 -- tests/metadata/Makefile.am | 8 -------- 14 files changed, 7 insertions(+), 40 deletions(-) commit d19f5700c31e93c7d5ef78b2c5dccb1f2c52b417 Author: Benjamin Dauvergne Date: Tue Jul 20 15:46:03 2010 +0000 [Tests] adapt java unit tests to new semantic for list fields GList fields now return an empty list, not null. bindings/java/tests/BindingTests.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) commit aebd6ed3d73da56409593b4d500748959d8c1cea Author: Benjamin Dauvergne Date: Tue Jul 20 14:15:55 2010 +0000 [SAMLv2] simplify logic for handling AuthnResponse with binding HTTP-Post The logic is now simpler: - first lasso_saml20_profile_process_any_response check the signature on the message - then lasso_saml20_login_process_response_status_and_assertion traverse all the assertions: - if the message is signed all assertion from the same issuer are automatically accepted, - if the message is not signed, or the signature validation failed, or the assertion has a different issuer than the message, we check the signature directly on the assertion. If any of the assertions fails the signature check, the result will be LASSO_PROFILE_ERROR_CANNOT_VERIFY_SIGNATURE. The public field profile->signature_status will contain only the message level signature status, each assertion signature status is not accessible. That will change when signature and key handling is reworked. lasso/saml-2.0/login.c | 98 ++++++++++++++++++++------------------------------ 1 file changed, 38 insertions(+), 60 deletions(-) commit 52d9fba0fa28be83571a267e30757f2699340d90 Author: Benjamin Dauvergne Date: Tue Jul 20 14:15:53 2010 +0000 [Binding perl] fix broken distclean-local target The TOCOPY files need to be cleaned only for out of source directory builds. bindings/perl/Makefile.am | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit b8c756db7d86b8414d4e072930847ac0077accfc Author: Benjamin Dauvergne Date: Mon Jul 19 15:56:33 2010 +0000 [SAMLv2] comment on SessionIndex support hack lasso/xml/saml-2.0/samlp2_logout_request.c | 8 ++++++++ 1 file changed, 8 insertions(+) commit 1898d645d5262631255f8d3c3e31eea0cee386f6 Author: Benjamin Dauvergne Date: Mon Jul 19 15:45:52 2010 +0000 [SAMLv2] remove empty files, wrongly committed lasso/saml-2.0/Makefile.am | 6 ------ lasso/saml-2.0/saml2_assertion_addons.c | 0 lasso/saml-2.0/saml2_assertion_addons.h | 0 lasso/saml-2.0/saml2_conditions_addons.c | 0 lasso/saml-2.0/saml2_conditions_addons.h | 0 lasso/saml-2.0/samlp2_authn_request_addons.c | 0 lasso/saml-2.0/samlp2_authn_request_addons.h | 0 7 files changed, 6 deletions(-) commit e79fcf3beb92f15973946ef55d38ef53cc185dfd Author: Benjamin Dauvergne Date: Mon Jul 19 15:27:10 2010 +0000 [SAMLv2/SSO] when processing AuthnResponse with binding HTTP-Post only the assertion need to be signed If the message is signed, the assertion is also covered, but if only the assertion is signed, there is no error to report. If the caller ask for forcing the validation of message signature, then we report an error. This commit also add checking for the binding used, if it is not HTTP-Post lasso_login_process_authn_response_msg will now report an error. lasso/saml-2.0/login.c | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) commit 19372c88c1a7687d695cb66ba83d00eb8f25737b Author: Benjamin Dauvergne Date: Fri Jul 16 19:34:33 2010 +0000 [Binding java] return empty list for NULL GList value, not null bindings/java/lang.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 6b48a72943507a7df1a69a054e767d62fd671540 Author: Benjamin Dauvergne Date: Fri Jul 16 19:34:32 2010 +0000 [ID-FFv1.2] add missing namespace declarations lasso/xml/lib_logout_response.c | 1 + lasso/xml/lib_register_name_identifier_response.c | 1 + 2 files changed, 2 insertions(+) commit e869899b7966dedb28001d62116b572adfae2904 Author: Benjamin Dauvergne Date: Fri Jul 16 19:34:30 2010 +0000 [SAMLv2] add support for encrypted private keys * support private key with new internal API in signature setting methods Plug lasso_node_set_signature into lasso_profile_saml20_setup_message_signature and lasso_server_saml2_assertion_setup_signature. * also use lasso_node_get_signature in has_signature * add forgottent LASSO_PROFILE_SIGNATURE_VERIFY_HINT_FORCE in switch cases For AuthnResponse checking the semantic is now that if HINT_FORCE is used we verify message signature *and* assertion signature. If HINT_MAYBE is used we check the assertion signature if its issuer differs from the message issuer. lasso/saml-2.0/login.c | 14 ++++++---- lasso/saml-2.0/profile.c | 61 ++++++++++++++++++++++++++++++++----------- lasso/saml-2.0/saml2_helper.c | 3 +++ 3 files changed, 58 insertions(+), 20 deletions(-) commit 8b385af8e601e7409d2ec4378f0386a0f4895699 Author: Benjamin Dauvergne Date: Fri Jul 16 19:34:28 2010 +0000 [ID-FFv1.2] move all user of lasso_node_export_to_query to lasso_node_export_to_query_with_password lasso/id-ff/defederation.c | 5 +++-- lasso/id-ff/login.c | 9 +++++---- lasso/id-ff/logout.c | 15 +++++++++------ lasso/id-ff/name_registration.c | 10 ++++++---- 4 files changed, 23 insertions(+), 16 deletions(-) commit ad93e9f8310592f61fc07e79791eb6d8f17e64fc Author: Benjamin Dauvergne Date: Fri Jul 16 19:34:26 2010 +0000 [Core] Change lasso_apply_signature to use quark stored annotated signature parameters The node containing signature do not handle the private keys passwords. As the fields for signature parameters are part of the public ABI we cannot add the password field to the public structure for those nodes. Instead we use the new quark annotation accessed through lasso_node_get/set_signature, and if the sign_type parameter is non-NULL we use it instead of the parameters stored in the public structure. This is a gross hack :( but at least it is documented. lasso/xml/tools.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) commit 21ca128532e76be7461d049d8913a17f75f971eb Author: Benjamin Dauvergne Date: Fri Jul 16 19:34:24 2010 +0000 [Core] add password parameter to lasso_sign_node lasso/xml/private.h | 3 ++- lasso/xml/saml-2.0/saml2_assertion.c | 4 +--- lasso/xml/tools.c | 17 +++++++++++++---- 3 files changed, 16 insertions(+), 8 deletions(-) commit f8ce6b25e5aab36a82017a6dfd4229cbeabbc5dc Author: Benjamin Dauvergne Date: Fri Jul 16 19:34:23 2010 +0000 [Code] add a lasso_node_export_to_query_with_password method lasso/xml/xml.c | 37 +++++++++++++++++++++++++++++++++++++ lasso/xml/xml.h | 4 ++++ 2 files changed, 41 insertions(+) commit c939427f217655e4f13204b0a24aa99039d86d79 Author: Benjamin Dauvergne Date: Fri Jul 16 19:34:21 2010 +0000 [Core] add a password parameter to lasso_query_sign We force use of the password through a custom OpenSSL password callback. lasso/saml-2.0/profile.c | 3 ++- lasso/xml/private.h | 2 +- lasso/xml/tools.c | 20 +++++++++++++++++--- lasso/xml/xml.c | 5 ++++- 4 files changed, 24 insertions(+), 6 deletions(-) commit 2fc20aa68250f24d38e90fc86ead46291c55a33f Author: Benjamin Dauvergne Date: Fri Jul 16 19:34:19 2010 +0000 [Core] dump custom signature parameters in lasso dumps The signature parameters are serialized as global attributes from the http://lasso.entrouvert.org/lasso/namespaces/0.0 named: SignatureType SignatureMethod PrivateKey PrivateKeyPassword Certificate lasso/xml/xml.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) commit 950565e5a29ea6d0fb9052fd06a00042a53f4370 Author: Benjamin Dauvergne Date: Fri Jul 16 19:34:18 2010 +0000 [Tests/python] add test case for WebSSO with providers using encrypted keys bindings/python/tests/profiles_tests.py | 32 +++++++++- tests/data/idp7-saml2/Makefile.am | 2 + tests/data/idp7-saml2/metadata.xml | 108 ++++++++++++++++++++++++++++++++ tests/data/idp7-saml2/password | 1 + tests/data/idp7-saml2/private-key.pem | 30 +++++++++ tests/data/sp7-saml2/password | 2 +- 6 files changed, 171 insertions(+), 4 deletions(-) commit 8198294c559644558c2592ee8f8acabaa8cea6af Author: Benjamin Dauvergne Date: Fri Jul 16 19:34:14 2010 +0000 [Core] add lasso_node_set_signature and lasso_node_get_signature Those two methods allows to associate signature parameters to any node. They keep it inside the CustomElement quark. Using a private structure may be more performant. lasso/xml/private.h | 7 +++++ lasso/xml/xml.c | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 89 insertions(+) commit 9d9cf60aca91d028e929c642121254ae2e8b6ab9 Author: Benjamin Dauvergne Date: Mon Jul 12 14:09:17 2010 +0000 [Core] extract signature adding into base class method lasso_node_get_xmlNode In order to permit subclass to modify the base xmlNode created by lasso_node_impl_get_xmlNode we must defer the concrete to the virtual method wrapper, lasso_node_get_xmlNode. To do that it whas needed to make id_attribute another virtual field of LassoNode subclasses (it can be accessed through an offset registered in the class object). This commit solves signature validation error since the patch for managing more than one SessionIndex element in samlp2:LogoutRequest. It also factorize the creation of signatures in one place. lasso/xml/private.h | 6 ++++++ lasso/xml/saml-2.0/saml2_assertion.c | 20 ++--------------- lasso/xml/saml-2.0/samlp2_request_abstract.c | 32 ++-------------------------- lasso/xml/saml-2.0/samlp2_status_response.c | 31 ++------------------------- lasso/xml/saml_assertion.c | 20 ++--------------- lasso/xml/samlp_request_abstract.c | 32 +++------------------------- lasso/xml/samlp_response_abstract.c | 32 +++------------------------- lasso/xml/tools.c | 29 +++++++++++++++++++++++++ lasso/xml/xml.c | 31 +++++++++++++++++++++++++-- 9 files changed, 78 insertions(+), 155 deletions(-) commit 98445777b902f5319fba99149a09bf7eab0e0b74 Author: Benjamin Dauvergne Date: Mon Jul 12 14:09:14 2010 +0000 [SAMLv2] if service provider supports logout, add a SessionIndex from the assertion ID The standard mandate to provide a SessionIndex to service provider advertaising their support of the logout profile. We follow the convention of using the assertion ID as a SessionIndex. lasso/saml-2.0/login.c | 6 ++++++ 1 file changed, 6 insertions(+) commit 358b2b17642382a26a9e7a2b802bcc39d24316d7 Author: Benjamin Dauvergne Date: Mon Jul 12 14:09:12 2010 +0000 [Tests] add a sso then slo soap test tests/login_tests_saml2.c | 206 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 206 insertions(+) commit 43c717764d0ab9602b450f2b3af26c2e191dcfb0 Author: Benjamin Dauvergne Date: Mon Jul 12 14:09:11 2010 +0000 [Core] lasso_check_version does not return a proper error code lasso_check_version returns 0, 1 or -1 and one is not a proper error code, so the original int return type is kept. lasso/lasso.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit f3c56a10398802d4cf52aff3480ba9f20a87d310 Author: Benjamin Dauvergne Date: Mon Jul 12 14:09:10 2010 +0000 [Bindings] make is_rc only check for lasso_error_t type bindings/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 553814f90c5901065bd691bb36441da3d38d4667 Author: Benjamin Dauvergne Date: Mon Jul 12 14:09:09 2010 +0000 [Bindings php5] simplify is_object in php_code.py bindings/php5/php_code.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit 2468e0a4216cbbb2f4ae81dfc608b0ae8bba5a99 Author: Benjamin Dauvergne Date: Mon Jul 12 14:09:07 2010 +0000 [Core] change return type of all error returning methods The new return type is lasso_error_t, it should allow to pinpoint easily methods returning an error code in bindings. lasso/id-ff/defederation.h | 8 +++---- lasso/id-ff/lecp.h | 16 ++++++------- lasso/id-ff/login.h | 32 +++++++++++++------------- lasso/id-ff/logout.h | 14 ++++++------ lasso/id-ff/name_identifier_mapping.h | 12 +++++----- lasso/id-ff/name_registration.h | 12 +++++----- lasso/id-ff/profile.h | 8 +++---- lasso/id-ff/provider.h | 2 +- lasso/id-ff/server.h | 10 ++++---- lasso/id-ff/session.h | 4 ++-- lasso/id-wsf-2.0/data_service.h | 30 ++++++++++++------------ lasso/id-wsf-2.0/discovery.h | 32 +++++++++++++------------- lasso/id-wsf-2.0/identity.h | 2 +- lasso/id-wsf-2.0/idwsf2_helper.h | 4 ++-- lasso/id-wsf-2.0/profile.h | 18 +++++++-------- lasso/id-wsf-2.0/saml2_login.h | 2 +- lasso/id-wsf-2.0/server.h | 2 +- lasso/id-wsf-2.0/session.h | 2 +- lasso/id-wsf/authentication.h | 14 ++++++------ lasso/id-wsf/data_service.h | 32 +++++++++++++------------- lasso/id-wsf/discovery.h | 18 +++++++-------- lasso/id-wsf/id_ff_extensions.h | 10 ++++---- lasso/id-wsf/interaction_profile_service.h | 8 +++---- lasso/id-wsf/wsf_profile.h | 34 ++++++++++++++-------------- lasso/lasso.h | 6 ++--- lasso/registry.h | 4 ++-- lasso/saml-2.0/assertion_query.h | 14 ++++++------ lasso/saml-2.0/ecp.h | 4 ++-- lasso/saml-2.0/name_id_management.h | 12 +++++----- lasso/saml-2.0/saml2_helper.h | 8 +++---- lasso/xml/saml-2.0/saml2_encrypted_element.h | 2 +- lasso/xml/ws/wsse_username_token.h | 4 ++-- lasso/xml/xml.h | 2 +- 33 files changed, 191 insertions(+), 191 deletions(-) commit 07cf66e143063019b34d4c1f28736a6c03a64df7 Author: Benjamin Dauvergne Date: Mon Jul 12 14:09:03 2010 +0000 [Bindings java] use is_int instead of custom methods or code bindings/java/lang.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) commit a3675cd7b2be69b6bf9b4ea5cd4483e56b261a4e Author: Benjamin Dauvergne Date: Mon Jul 12 14:09:02 2010 +0000 [Bindings perl] add lasso_errot_t to type to map to T_IV typemap (integer types) bindings/perl/lang.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 9ba548d6a006c61ebec74d264b3ae8fc1437053e Author: Benjamin Dauvergne Date: Mon Jul 12 14:09:00 2010 +0000 [Bindings] add lasso_error_t to return code types bindings/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit f38c42de0fff9f3d1dd363ad64e98ea05b0bc21f Author: Benjamin Dauvergne Date: Mon Jul 12 14:08:59 2010 +0000 [Binding java] use is_rc to match error return type bindings/java/lang.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 0a955e18d5f760bd8d4369a24e3d2e3dd0bca8ea Author: Benjamin Dauvergne Date: Mon Jul 12 14:08:58 2010 +0000 [Binding php5] use is_rc to match error return type bindings/php5/php_code.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 3aec6e590280291c020c0033a020531eb0a94838 Author: Benjamin Dauvergne Date: Mon Jul 12 14:08:57 2010 +0000 [Core] add lasso_error_t to list of integer types bindings/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit a7204adb88d5ee6a9980e1daa2b4f97e4d714b2a Author: Benjamin Dauvergne Date: Mon Jul 12 14:08:55 2010 +0000 [Core] add a lasso_error_t typedef This typedef will serve to mark error returning methods. The ctypes.h header piggyback on export.h to be included in all public headers. lasso/Makefile.am | 2 +- lasso/ctypes.h | 39 +++++++++++++++++++++++++++++++++++++++ lasso/export.h | 2 ++ 3 files changed, 42 insertions(+), 1 deletion(-) commit 7352ec8036d8204540b853788e3e33a53fd4f54a Author: Benjamin Dauvergne Date: Mon Jul 5 21:27:08 2010 +0000 [Provider] Fix loading of provider without a public key This commit also emit propre warning when loading fails for a provider *with* a public key. lasso/id-ff/provider.c | 47 ++++++++++++++++++++++++++++++++--------------- 1 file changed, 32 insertions(+), 15 deletions(-) commit eca31dd63cf7b916a6d5b9b6af4a2de9dd2eda2e Author: Benjamin Dauvergne Date: Mon Jul 5 21:24:08 2010 +0000 [Python binding] do not throw lasso.Error for python exceptions bindings/python/lang.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 11ac1e148a216858bbe9422d75fb5ca3026cefe5 Author: Benjamin Dauvergne Date: Tue Jun 29 14:49:15 2010 +0000 [Perl binding] make include from $(srcdir) works in Perl binding bindings/perl/Makefile.am | 2 +- bindings/perl/glist_handling.c | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) commit 35347922850c0c3435e7ed55597aba02d219d68c Author: Benjamin Dauvergne Date: Tue Jun 29 14:15:08 2010 +0000 [Bindings] accept simple string in string<->xmlNode converter Some use case ask for passing simple libxml content node (i.e just an UTF-8 string) when a method argument or a field of the xmlNode* type. This commit add a static method in bindings/utils.c named lasso_string_fragment_to_xmlnode which does this transform by trying to parse an XML document then by trying to parse a well balanced XML fragment of only one node (if there is more than one node such as in the string " xxx yyy ", we free the node list and return NULL). bindings/Makefile.am | 3 ++- bindings/java/wrapper_top.c | 15 +++-------- bindings/perl/glist_handling.c | 15 +++-------- bindings/php5/wrapper_source_top.c | 13 ++-------- bindings/python/wrapper_top.c | 15 +++-------- bindings/utils.c | 53 ++++++++++++++++++++++++++++++++++++++ 6 files changed, 69 insertions(+), 45 deletions(-) commit 2e9e814b0900dae14e291ee7708ee92b4035c019 Author: Benjamin Dauvergne Date: Tue Jun 29 14:15:02 2010 +0000 [Core] add macro to release an xmlNodeList object lasso/utils.h | 3 +++ 1 file changed, 3 insertions(+) commit f27fa8171ae37df159abdcd3b1ec18a25e03f84a Author: Benjamin Dauvergne Date: Tue Jun 29 14:15:01 2010 +0000 [ID-WSF2] add idwsf2 test script to test suite Re-activate ID-WSF 2.0 test script. Fix problem with provider issuing assertion role. Need to be fixed more generally in the future. bindings/python/tests/Makefile.am | 2 +- bindings/python/tests/idwsf2_tests.py | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) commit 4a36e6d065919691354965cabad7d2dea91e82a0 Author: Benjamin Dauvergne Date: Tue Jun 29 14:14:59 2010 +0000 [Core] add macro to release GList of xmlNodeList lasso/utils.h | 3 +++ 1 file changed, 3 insertions(+) commit 0524051343aa3761c093ffa4479813ad13b4f1ce Author: Benjamin Dauvergne Date: Tue Jun 29 14:14:58 2010 +0000 [Core] add macros to manipulate xmlNodeList and GList of xmlNodeList The method to copy them is xmlCopyNodeList and not xmlCopyNode, so we need another set of macros. lasso/utils.h | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) commit 129e7ac6ea89ed58ec8e4957b0c4bed2e19c56fb Author: Benjamin Dauvergne Date: Tue Jun 29 09:15:06 2010 +0000 Merge branch 'issue-101' lasso/id-ff/provider.c | 124 ++++++++++++++++++++++++++++--------------------- 1 file changed, 72 insertions(+), 52 deletions(-) commit c1a4ba2fc03da5458a10b9a0daf32dbdcfa21ff3 Author: Benjamin Dauvergne Date: Tue Jun 29 09:15:02 2010 +0000 Merge branch 'issue-88' bindings/python/tests/binding_tests.py | 1 - bindings/python/tests/profiles_tests.py | 51 +++++++++++++++++++++++---------- lasso/saml-2.0/login.c | 8 ++++-- lasso/saml-2.0/profile.c | 12 ++++++-- tests/data/idp5-saml2/metadata.xml | 3 ++ tests/data/sp5-saml2/metadata.xml | 3 ++ 6 files changed, 57 insertions(+), 21 deletions(-) commit 6f617027e9c46f3cb907e8bdbe1d3ef265d2b4d0 Author: Benjamin Dauvergne Date: Tue Jun 29 09:15:00 2010 +0000 Merge branch 'issue-86' bindings/python/tests/profiles_tests.py | 19 ++++- docs/reference/lasso/lasso-sections.txt | 2 + lasso/xml/saml-2.0/samlp2_logout_request.c | 132 +++++++++++++++++++++++++++++ lasso/xml/saml-2.0/samlp2_logout_request.h | 6 ++ 4 files changed, 158 insertions(+), 1 deletion(-) commit d9d4e6ae384ec48dfb533771fc05192c60f55102 Author: Benjamin Dauvergne Date: Fri Jun 18 08:05:55 2010 +0000 [Tests/integration] add G_DEBUG=gc-friendly env. var to valgrind-wrapper It should improve valgrind ability to trace memory origin. tests/integration/valgrind-wrapper.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit ef36d5cad3454ebe02fd137da84134d521d53e9b Author: Benjamin Dauvergne Date: Thu Jun 17 11:42:45 2010 +0000 [XML] in lasso_node_export_to_paos_request check return value of lasso_node_get_xmlNode lasso/xml/xml.c | 4 ++++ 1 file changed, 4 insertions(+) commit eac190160c689240df24e74047cd7fff07541b9e Author: Benjamin Dauvergne Date: Thu Jun 17 11:42:43 2010 +0000 [XML] in _lasso_node_export_to_base64 check return value of lasso_node_export_to_xml lasso/xml/xml.c | 2 ++ 1 file changed, 2 insertions(+) commit 8c46b3dd586c7183861c323a2ff8ceddda902117 Author: Benjamin Dauvergne Date: Thu Jun 17 11:42:41 2010 +0000 [XML] in _lasso_node_export_to_xml check return value of lasso_node_get_xmlNode lasso/xml/xml.c | 3 +++ 1 file changed, 3 insertions(+) commit 751d02ed4d15cebdfb80f0b65994b3fc7d992363 Author: Benjamin Dauvergne Date: Tue Jun 15 11:33:01 2010 +0000 Comment out custom silent rules if automake < 1.11 bindings/java/Makefile.am | 2 ++ bindings/perl/Makefile.am | 2 ++ configure.ac | 2 ++ 3 files changed, 6 insertions(+) commit 8dd38b7746706874406ea4024c466c202330a675 Author: Benjamin Dauvergne Date: Tue Jun 15 11:33:00 2010 +0000 [Core] do not ignore keep_xmlnode flag inherited from parent classes We only looked to the keep_xmlnode flag in the node data of the top level class, but any parent class can set this flag and in this case we must honor it too. lasso/xml/xml.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) commit bf2274f20d9658968d05a4f63865dd72c34bda05 Author: Benjamin Dauvergne Date: Mon Jun 14 21:21:29 2010 +0000 Test: add non regression test for reloading a server dump with encrypted keys bindings/python/tests/binding_tests.py | 13 ++++++++++ tests/data/sp7-saml2/Makefile.am | 2 ++ tests/data/sp7-saml2/metadata.xml | 46 ++++++++++++++++++++++++++++++++++ tests/data/sp7-saml2/password | 1 + tests/data/sp7-saml2/private-key.pem | 12 +++++++++ 5 files changed, 74 insertions(+) commit c1902b7d7e10d56982ee0020d5158de564974a45 Author: Benjamin Dauvergne Date: Mon Jun 14 21:21:27 2010 +0000 Core: when reloading a dump, use the signing private key password for loading the encryption private key We currently do not store the encryption private key, instead on reload of a dump, we try to use the signing private key as the encryption private key. But we forgot to use the stored private key password. That's now fixed. Next step would be to keep the encryption private key around also. lasso/id-ff/server.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 900a8008c4dbd6cc27dbac83ea6b162e6f88ff7f Author: Benjamin Dauvergne Date: Mon Jun 14 21:21:25 2010 +0000 Binding python: fix freeing of list return values for methods with the transfer full flag The output 'print' were missing, oups :( bindings/python/lang.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit fbb0ef52ee9103c02617827d31971db3688f1ed8 Author: Benjamin Dauvergne Date: Sat Jun 12 00:43:51 2010 +0000 Binding python: find a work around for random behaviour of PyImport_ImportModule * it seems that PyImport_ImportModule is not deterministic. Sometimes it returns True for modules which we know are present ('logging'). Importing 'sys' first seems to make 'logging' accessible (complete cargo cult programming). bindings/python/wrapper_top.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) commit a9b673cd4a9a5ee64d8d04f5e3c03978a799f837 Author: Benjamin Dauvergne Date: Sat Jun 12 00:43:49 2010 +0000 Core: move logging function and macros to their own module, adapt perl binding bindings/perl/lang.py | 21 ++++++ lasso/Makefile.am | 8 +-- lasso/id-ff/name_identifier_mapping.c | 1 + lasso/lasso.c | 13 ++-- lasso/lasso_config.h.in | 2 +- lasso/logging.c | 67 ++++++++++++++++++ lasso/logging.h | 130 ++++++++++++++++++++++++++++++++++ lasso/utils.h | 1 + lasso/xml/private.h | 43 ----------- lasso/xml/tools.c | 41 ----------- 10 files changed, 232 insertions(+), 95 deletions(-) commit c4ac4f652c0a3646ee12c9d947e6eada70315ebb Author: Benjamin Dauvergne Date: Sat Jun 12 00:43:43 2010 +0000 Core: move lasso_strerror declaration to errors.h lasso/errors.h | 4 ++++ lasso/xml/xml.h | 2 -- 2 files changed, 4 insertions(+), 2 deletions(-) commit d4551542c63d0fc29bdef1f88cecb114c883d49a Author: Benjamin Dauvergne Date: Sat Jun 12 00:43:35 2010 +0000 add .gitignore file .gitignore | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) commit b773217b54bcb8cdc9d9ee811d36518a02c9bfa6 Author: Benjamin Dauvergne Date: Sat Jun 12 00:43:31 2010 +0000 Tools: add check-makefile.sh script to tools tools/check-makefile.sh | 14 ++++++++++++++ 1 file changed, 14 insertions(+) commit 477e6896a975bc059dc30544d9ec03daa48a872a Author: Benjamin Dauvergne Date: Sat Jun 12 00:43:29 2010 +0000 add abi file for 2.2.91 abi/abi-2.2.91 | 996 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 996 insertions(+) commit bcb0d7f91b7c4f93b16fa221c6a322e93ae40ad2 Author: Benjamin Dauvergne Date: Sat Jun 12 00:43:27 2010 +0000 Tests: add idp6-saml2 data tests/data/idp6-saml2/Makefile.am | 2 + tests/data/idp6-saml2/metadata.xml | 108 ++++++++++++++++++++++++++++++++++ tests/data/idp6-saml2/private-key.pem | 27 +++++++++ 3 files changed, 137 insertions(+) commit 88862b11b078ca32dd96b578413198133f106e0c Author: Benjamin Dauvergne Date: Sat Jun 12 00:43:24 2010 +0000 Test: add python test for attribute requesting * What's tested: - request initialization - adding attribute designators - building the request message - processing the request message - accepting the request - adding assertion with attributes - signing the assertion - building the response - parsing the response bindings/python/tests/profiles_tests.py | 59 ++++++++++++++++++++++++++++++++- 1 file changed, 58 insertions(+), 1 deletion(-) commit 49deb1ffcb59eb41c3ac53759722472daabb8f50 Author: Benjamin Dauvergne Date: Sat Jun 12 00:43:20 2010 +0000 SAMLv2: rename lasso_saml2_name_id_build_persistent to lasso_saml2_name_id_new_with_persistent_format * keep the old one for compatibility * new one will be picked by bindings as a constructor docs/reference/lasso/lasso-sections.txt | 1 + lasso/saml-2.0/saml2_helper.c | 19 +++++++++++++++++++ lasso/saml-2.0/saml2_helper.h | 3 +++ 3 files changed, 23 insertions(+) commit c7539efbe07dd0043ebcd27587ba83511593fce9 Author: Benjamin Dauvergne Date: Sat Jun 12 00:43:14 2010 +0000 SAMLv2: when initializing signture on assertion, setup an ID if there is none * without the ID lasso refuse to sign (it's mandatory) lasso/saml-2.0/saml2_helper.c | 3 +++ 1 file changed, 3 insertions(+) commit 601aadbf8f429d8f1429a77e34e6c4f2cc67db93 Author: Benjamin Dauvergne Date: Sat Jun 12 00:43:09 2010 +0000 SAMLv2: in lasso_assertion_query_build_request_msg setup nameid * lasso_profile_get_nameIdentifier does not return profile->nameIdentifier , so we first try to use profile->nameIdentifier and if it is NULL we use lasso_profile_get_nameIdentifier. lasso/saml-2.0/assertion_query.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) commit 94377b822f366650f6c69a90e09e18b9148ec637 Author: Benjamin Dauvergne Date: Sat Jun 12 00:42:58 2010 +0000 Binding python: fix bad refcounting in get_logger and lasso_python_log bindings/python/wrapper_top.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) commit 93bea174743af203189e6b4b7e0ba8f206d28d0b Author: Benjamin Dauvergne Date: Thu Jun 10 21:26:10 2010 +0000 Core: update lasso_iso_8601_gmt_to_time_t to support milliseconds * We now support the two possible formats for xsdtime XSchema datatype: - dddd-dd-ddTdd:dd:ddZ - dddd-dd-ddTdd:dd:dd.d*Z Where d denotes a digit, and * is the kleene star. XSD datetime also supports negative years, but as we cannot represent them with time_t, we can reject it at the lexical level. lasso/xml/private.h | 2 +- lasso/xml/tools.c | 45 +++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 42 insertions(+), 5 deletions(-) commit ad081094e9a7c5b621c828bab7651a172757e647 Author: Benjamin Dauvergne Date: Thu Jun 10 21:26:06 2010 +0000 Documentation: add new AssertionQuery methods to documentation docs/reference/lasso/lasso-sections.txt | 2 ++ 1 file changed, 2 insertions(+) commit b6bdb0d33ed867e2d31a934280edeaa241978f18 Author: Benjamin Dauvergne Date: Thu Jun 10 13:38:08 2010 +0000 Tests: new python test for setEncryptionPrivateKeyWithPassword bindings/python/tests/binding_tests.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) commit 2f7723348db726351a1bbb529779ba2a2cbb6b61 Author: Benjamin Dauvergne Date: Thu Jun 10 13:38:05 2010 +0000 Fix long lines in lasso/id-ff/server.c lasso/id-ff/server.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) commit 0986fa439a1d76349d50abf2c02577e7b5fc0b2b Author: Benjamin Dauvergne Date: Thu Jun 10 13:38:02 2010 +0000 Core: add method lasso_server_set_encryption_private_key_with_password * fixes #91. docs/reference/lasso/lasso-sections.txt | 1 + lasso/id-ff/server.c | 37 +++++++++++++++++++++++++++------ lasso/id-ff/server.h | 5 ++++- 3 files changed, 36 insertions(+), 7 deletions(-) commit c6fa47127ed38e8bb07399791919299adcdfb2a8 Author: Benjamin Dauvergne Date: Thu Jun 10 13:38:00 2010 +0000 SAMLv2: add new methods to class LassoAssertionQuery * lasso_assertion_query_add_attribute_request: helper to setup request attribute for AttributeQuery messages. * lasso_assertion_query_get_request_type: method to find the type of the last received query. * fixes #90 lasso/errors.c | 4 ++ lasso/errors.h | 14 ++++++ lasso/saml-2.0/assertion_query.c | 98 ++++++++++++++++++++++++++++++++++++++++ lasso/saml-2.0/assertion_query.h | 10 ++++ 4 files changed, 126 insertions(+) commit e69cbabde1599325de8eb24c08b0353f503b4ea8 Author: Benjamin Dauvergne Date: Thu Jun 10 13:37:58 2010 +0000 SAMLv2: fix initialization of subject in lasso_assertion_query_build_request_msg lasso/saml-2.0/assertion_query.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) commit d0a2135f6058e83071b9ddb3be085c4c65b24a38 Author: Benjamin Dauvergne Date: Thu Jun 10 13:37:56 2010 +0000 Import tools in utils.h lasso/utils.h | 2 ++ 1 file changed, 2 insertions(+) commit 779200ca4cd27aed984c4b4179b7e04a14c6e7b4 Author: Benjamin Dauvergne Date: Thu Jun 10 13:37:53 2010 +0000 Fix collision between defined symbols in tools.h and private.h lasso/xml/private.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 72361f16b3493de7508519a5173672887401e7c7 Author: Benjamin Dauvergne Date: Thu Jun 10 07:58:14 2010 +0000 Binding python: if lasso.logger exists use it for logging * There is now two paths to get a logger in the python binding: - first try to get an objet from lasso.logger - if it doesn't exist or is None, the try logging.getLogger('lasso') bindings/python/wrapper_top.c | 36 ++++++++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 8 deletions(-) commit 2c0ea4d64791369f890774c1d7e3003930513384 Author: Benjamin Dauvergne Date: Wed Jun 9 16:54:55 2010 +0000 Change all logging to use message() lasso/id-wsf-2.0/discovery.c | 2 +- lasso/id-wsf-2.0/idwsf2_helper.c | 4 ++-- lasso/id-wsf-2.0/profile.c | 8 ++++---- lasso/id-wsf-2.0/saml2_login.c | 2 +- lasso/saml-2.0/login.c | 2 +- lasso/saml-2.0/saml2_helper.c | 6 +++--- lasso/utils.h | 10 +++++----- lasso/xml/tools.c | 14 +++++++------- 8 files changed, 24 insertions(+), 24 deletions(-) commit aeb27a107c5980edbd2c72db435e25551ca9bd3f Author: Benjamin Dauvergne Date: Wed Jun 9 16:54:54 2010 +0000 Core: in xml error message handler, escape messages to fit on one line lasso/xml/tools.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) commit 59d406b8a64c706096879193767870b62dd78ac4 Author: Benjamin Dauvergne Date: Wed Jun 9 16:54:53 2010 +0000 Core: remove arrow in log messages lasso/xml/tools.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 9078ad41fd0606135c477eb46457fa521097420d Author: Benjamin Dauvergne Date: Wed Jun 9 16:54:52 2010 +0000 Binding python: call lasso_init() first in init_lasso() bindings/python/lang.py | 2 -- bindings/python/wrapper_bottom.c | 1 + 2 files changed, 1 insertion(+), 2 deletions(-) commit 05b537876bd1ec9fc5f34312835de4ae04e7de68 Author: Benjamin Dauvergne Date: Wed Jun 9 16:54:50 2010 +0000 Binding python: add GLog handler to redirect logs to Python logger named "lasso" * fixes #20 bindings/python/wrapper_bottom.c | 2 ++ bindings/python/wrapper_top.c | 42 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) commit 80a930cc3775f1f12d1cd04e8836f49c97b60a6c Author: Benjamin Dauvergne Date: Wed Jun 9 16:54:49 2010 +0000 Utils: add function to extract/create node in lists * lasso_extract_gtype_from_list_or_new will help for method with create or extend nodes in lists. lasso/saml-2.0/Makefile.am | 6 ++++++ lasso/saml-2.0/saml2_assertion_addons.c | 0 lasso/saml-2.0/saml2_assertion_addons.h | 0 lasso/saml-2.0/saml2_conditions_addons.c | 0 lasso/saml-2.0/saml2_conditions_addons.h | 0 lasso/saml-2.0/samlp2_authn_request_addons.c | 0 lasso/saml-2.0/samlp2_authn_request_addons.h | 0 lasso/utils.c | 29 +++++++++++++++++++++++++++- lasso/utils.h | 4 ++++ 9 files changed, 38 insertions(+), 1 deletion(-) commit 4c130d779aff0d043c17c1087180af64d5288cf4 Author: Frederic Peters Date: Wed Jun 9 07:51:52 2010 +0000 Add new lasso_log_set_handler and lasso_log_remove_handler functions They are modeled around the g_log... functions of GLib, they just don't have a domain parameter. bindings/overrides.xml | 2 ++ docs/reference/lasso/lasso-sections.txt | 7 ++++++ lasso/xml/tools.c | 38 +++++++++++++++++++++++++++++++++ lasso/xml/tools.h | 2 ++ 4 files changed, 49 insertions(+) commit baa41486459da0a79f069649cec4e9a773407669 Author: Benjamin Dauvergne Date: Sun Jun 6 14:03:59 2010 +0000 Binding perl: fix test so that it does not raise on add_provider bindings/perl/t/Lasso.t | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 52372fa4379d87a47330087934b8120794e66560 Author: Benjamin Dauvergne Date: Sun Jun 6 14:03:57 2010 +0000 Bindings: keep retro compatibility for member field names * Special kludge price go to PHP: methods name are insensitive so nothing to do here, BUT, if you use getters/setters then your objects fields can be case insensitive too ;-) (DNS, dns, DnS, dNs all maps to get_dns ). bindings/java/lang.py | 27 +++++++++++++++++++++++++-- bindings/python/lang.py | 3 +++ bindings/utils.py | 8 ++++++++ 3 files changed, 36 insertions(+), 2 deletions(-) commit 692e2985974febda3c83e87e63b7541d6b663f2f Author: Benjamin Dauvergne Date: Sun Jun 6 14:03:54 2010 +0000 Bindings: fix camelcasing of id fields bindings/utils.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit 652698534263d9b92c0297b6ca8ba27c8a37e150 Author: Benjamin Dauvergne Date: Sun Jun 6 14:03:52 2010 +0000 SAMLv2: make role checking inactive for LassoServer * LassoServer have no role defined, so checking breaks loading of metadata for LassoServer. lasso/saml-2.0/provider.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit 64dd61b1a8e09cf2f12caf0d0d0a2d0937d8a5fe Author: Benjamin Dauvergne Date: Sun Jun 6 14:03:49 2010 +0000 ID-FFv1.2: for idp initiated sso accept any nameIdPolicy * IdP initiated SSO can be of any kind, no need to limit it. lasso/id-ff/login.c | 7 ------- 1 file changed, 7 deletions(-) commit b7e2f36e671434efd981b4de9b98d9521f725c47 Author: Benjamin Dauvergne Date: Fri Jun 4 09:32:50 2010 +0000 SAML 2.0: add checks for proper loading of role descriptors * remove warning for descriptors supporting non SAML 2.0 protocols * checks that at least one descriptor was loaded and that it was for our assigned role. lasso/saml-2.0/provider.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) commit 4a55c53ee65e1a40d297b5f732c3157057b263ce Author: Benjamin Dauvergne Date: Fri Jun 4 09:32:48 2010 +0000 SAMLv2: fix error in naming of function in the documentation lasso/id-ff/provider.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 5fdf579a9467a9d579fdb88836560a1ca72ab1f8 Author: Benjamin Dauvergne Date: Mon May 31 07:13:52 2010 +0000 SAMLv2: remove HTTP-Redirect as right binding for AssertionConsumer lasso/saml-2.0/provider.c | 1 - 1 file changed, 1 deletion(-) commit 8b727039485c6be33e7ad63084a259415c082851 Author: Benjamin Dauvergne Date: Mon May 31 07:13:50 2010 +0000 SAMLv2: fix bug giving UnuspportedProfile for SingleSignOn with HTTP-POST * The string constant in lasso_saml20_provider_accept_http_method was HTTP-Post instead of HTTP-POST. lasso/saml-2.0/provider.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit f4130519fc1c0e8646b756ecba0df595f71718c3 Author: Benjamin Dauvergne Date: Mon May 31 07:13:46 2010 +0000 Core: fix extraction of relaystate when URLs contains only one kind of separators lasso/xml/tools.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit fe1da68e1f6cdd5f4bd2821f769ca92faa299234 Author: Benjamin Dauvergne Date: Mon May 31 07:13:45 2010 +0000 Integration test: adapt to new behaviour for federation termination tests/integration/saml2/test_02_slo.py | 2 ++ tests/integration/saml2/test_03_defederation.py | 25 +++++++++++++++++++++++-- 2 files changed, 25 insertions(+), 2 deletions(-) commit a0fb1580ad89ad3cbb7ef7bfb8db0f10c7d0d15f Author: Benjamin Dauvergne Date: Mon May 31 07:13:43 2010 +0000 SAMLv2: simplify lasso_saml20_provider_accept_http_method by only checking for remote provider support * Whatever we do, with asyncrhonous bindings the remote provider can return the response with any asynchronous binding. lasso/saml-2.0/provider.c | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) commit 9d22f29e55524034dfda34c15b76f1b0b78c4413 Author: Benjamin Dauvergne Date: Mon May 31 07:13:41 2010 +0000 SAML 2.0: in lasso_login_build_assertion set conditions time limit, no SubjectConfirmationData limits lasso/saml-2.0/login.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) commit 60c6a25208bd0097fb242e4d6e8e00a65d516a71 Author: Benjamin Dauvergne Date: Mon May 31 07:13:39 2010 +0000 SAML 2.0: in lasso_login_build_assertion do not conflate sessionNotOnOrAfter with assertion condition notOnOrAfter lasso/saml-2.0/login.c | 4 ---- 1 file changed, 4 deletions(-) commit abb63e32f835f3678360485383c456e24bef95f5 Author: Benjamin Dauvergne Date: Tue May 11 12:03:59 2010 +0000 Website: add quicklinks for download links website/templates/base.ezt | 22 +++++++++++++++++++++- website/web/download/index.xml | 6 ++---- 2 files changed, 23 insertions(+), 5 deletions(-) commit 140f8d1cae5207cbe584fb9c30508a4fcde65d37 Author: Benjamin Dauvergne Date: Tue May 11 08:54:49 2010 +0000 Change VCS viewer link to point toward the redmine browser website/web/download/index.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 23c604b268a89bc20772603c7cf5436ddd51ec44 Author: Benjamin Dauvergne Date: Tue May 11 08:54:47 2010 +0000 SAMLv2: conflate Responder and Requester when checking second level status code * lasso/saml-2.0/login.c: I'm not sure that most IdP really make the semantic distinction between those two first level status codes, so just conflate them. lasso/saml-2.0/login.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit c2fff8b5f13d7e6b5210d905b79f96269cc49848 Author: Benjamin Dauvergne Date: Tue May 11 08:54:45 2010 +0000 SAMLv2: remove warning message for invalid signature on AuthnResponse messages * lasso/saml-2.0/login.c: we already return an error, no need to clutter the output with warning messages. lasso/saml-2.0/login.c | 4 ---- 1 file changed, 4 deletions(-) commit 65745361042f767bad13bf3f07de72c3ee51108e Author: Benjamin Dauvergne Date: Tue May 4 16:46:51 2010 +0000 Website: add a link to a tarball of the documentation extracted from the SVN website/web/documentation/index.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit ba68d3a7fde22ffa713ee1cb4cdeeebc634a77b4 Author: Benjamin Dauvergne Date: Sat May 1 05:40:38 2010 +0000 SAML 2.0 Helper: add lasso_saml2_assertion_set_one_time_use docs/reference/lasso/lasso-sections.txt | 1 + lasso/saml-2.0/saml2_helper.c | 25 ++++++++++++++++++++++++- lasso/saml-2.0/saml2_helper.h | 3 +++ 3 files changed, 28 insertions(+), 1 deletion(-) commit e05a1d307704ae0b9e177a8f94a6c58488f19e76 Author: Benjamin Dauvergne Date: Sat May 1 05:40:36 2010 +0000 Fix bad initialization of an rc field from revision 4837 lasso/id-wsf-2.0/discovery.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit e109756cf5958cb1392455f89dc3570c0ea87f01 Author: Benjamin Dauvergne Date: Sat May 1 05:40:34 2010 +0000 Change

tags to lasso/id-ff/login.c | 4 ++-- lasso/id-wsf-2.0/soap_binding.c | 16 ++++++++-------- 2 files changed, 10 insertions(+), 10 deletions(-) commit 5ba5b4634eb9da7fe5162724ec13c0c2911bc6f2 Author: Benjamin Dauvergne Date: Sat May 1 05:40:31 2010 +0000 Add a lasso_profile_get_signature_status method docs/reference/lasso/lasso-sections.txt | 1 + lasso/id-ff/profile.c | 16 ++++++++++++++++ lasso/id-ff/profile.h | 1 + 3 files changed, 18 insertions(+) commit a041a2ef8165d109bad8e03dc15a97b205f1edf5 Author: Benjamin Dauvergne Date: Fri Apr 30 09:23:01 2010 +0000 Initialize all uninitialized rc variables lasso/id-ff/login.c | 4 ++-- lasso/id-ff/logout.c | 4 ++-- lasso/id-ff/name_identifier_mapping.c | 2 +- lasso/id-ff/name_registration.c | 2 +- lasso/id-wsf-2.0/discovery.c | 2 +- lasso/id-wsf-2.0/saml2_login.c | 2 +- lasso/id-wsf/authentication.c | 2 +- lasso/id-wsf/discovery.c | 2 +- lasso/saml-2.0/assertion_query.c | 6 +++--- lasso/saml-2.0/login.c | 4 ++-- lasso/saml-2.0/profile.c | 4 ++-- lasso/xml/dst_modify.c | 2 +- lasso/xml/dst_modify_response.c | 2 +- lasso/xml/dst_query.c | 2 +- lasso/xml/dst_query_response.c | 2 +- lasso/xml/misc_text_node.c | 2 +- lasso/xml/tools.c | 2 +- lasso/xml/ws/wsse_username_token.c | 2 +- lasso/xml/xml.c | 4 ++-- tests/login_tests.c | 4 ++-- tests/login_tests_saml2.c | 4 ++-- tests/perfs.c | 2 +- tests/tests.c | 2 +- 23 files changed, 32 insertions(+), 32 deletions(-) commit 9cc0ff6d43e8c32ea32f80755221eaf8ae4eb370 Author: Benjamin Dauvergne Date: Fri Apr 30 09:22:49 2010 +0000 Test: only test custom namespace if ID-WSF is enabled tests/basic_tests.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 99f82a04b5ae8e6ba0e66be15c4b7b6788f17797 Author: Benjamin Dauvergne Date: Wed Apr 28 16:52:45 2010 +0000 in lasso_idwsf2_data_service_build_response_msg, allows SOAPFault as responses lasso/id-wsf-2.0/data_service.c | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) commit f4de58cf3e56333b0599818271015ace26051825 Author: Benjamin Dauvergne Date: Wed Apr 28 16:52:43 2010 +0000 Fix uninitialized local variable lasso/id-wsf-2.0/discovery.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 03d218f7125849ac8ac8cf98edb23906c072f938 Author: Benjamin Dauvergne Date: Wed Apr 28 16:52:42 2010 +0000 in lasso_session_count_assertions, do not emit warning if session is not an object lasso/id-ff/session.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 0be003d2904192200bdb6adbfae765a4db469a19 Author: Benjamin Dauvergne Date: Tue Apr 27 22:55:27 2010 +0000 SAML 2.0: always restart initial request processing in lasso_logout_build_response_msg * Does it also in process_response_msg if no more assertions are present. * Take into account that lasso_saml20_profile_process_any_response already check for the status code, and so specify finer error code in the cleanup code. lasso/saml-2.0/logout.c | 104 +++++++++++++++++++----------------------------- 1 file changed, 41 insertions(+), 63 deletions(-) commit 6e4d8b57d4faa141275def0381f19c9277702f10 Author: Benjamin Dauvergne Date: Tue Apr 27 22:55:25 2010 +0000 SAML 2.0: fix lasso_saml20_provider_get_first_http_method * LassoServer object can have many roles, use the default role of the remote provider to decide on which to assume. lasso/saml-2.0/provider.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) commit 5106f38f06b0ab8c3d92b086e3a3dfb72a197ca4 Author: Benjamin Dauvergne Date: Tue Apr 27 22:55:23 2010 +0000 SAML 2.0 Logout: in init_request, remove the assertion anyway * lasso/saml-2.0/logout.c: when initiating a logout, if no problem is found, remove the assertion. you can always continue by changing profile->http_request_method to SOAP for example and redo a build_request_msg. lasso/saml-2.0/logout.c | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) commit 86e549141f2ea95d18f86bb66ce405a00b4c44a2 Author: Benjamin Dauvergne Date: Tue Apr 27 22:55:21 2010 +0000 SAML 2.0: lasso_saml20_profile_process_any_response_msg, change status code checking lasso/saml-2.0/profile.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) commit 24599cbe7f99eb86d8ee547cb19f08fe1db1f89b Author: Benjamin Dauvergne Date: Thu Apr 22 11:19:34 2010 +0000 SAML 2.0: lasso_logout_build_response_msg, just verify there is saved data from a previous request before switching them * lasso/saml-2.0/logout.c: There is no need to check what the previous remote provider ID was, just that initial_remote_providerID is not NULL in order to switch request, response and remote_providerID. lasso/saml-2.0/logout.c | 32 ++++++++++++-------------------- 1 file changed, 12 insertions(+), 20 deletions(-) commit 6e072c2b5f93bf6a7f400eed65147c15030055a8 Author: Benjamin Dauvergne Date: Thu Apr 22 11:19:32 2010 +0000 Fix wrong change g_free -> lasso_release inside example code lasso/id-ff/login.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit dc0da3d1b0566d4337df8452e91c3e91c820bbc4 Author: Benjamin Dauvergne Date: Thu Apr 22 01:12:32 2010 +0000 Provider: fix problem when reusing the same lists nodes in Descriptors lasso/id-ff/provider.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) commit 0e8441afe3f152236ab323cfb8fc3c5daf10d718 Author: Benjamin Dauvergne Date: Thu Apr 22 00:45:02 2010 +0000 Improve safety by replacing all g_hash_table_destroy use by lasso_release_ghashtable lasso/id-ff/provider.c | 5 +---- lasso/id-ff/server.c | 12 +++--------- lasso/id-ff/session.c | 17 +++++------------ lasso/id-wsf-2.0/data_service.c | 5 ++--- lasso/registry.c | 9 ++++----- lasso/utils.h | 2 +- lasso/xml/xml.c | 4 ++-- 7 files changed, 18 insertions(+), 36 deletions(-) commit 2f5ef5fef00b3762deb8f5963406484cb145d0a2 Author: Benjamin Dauvergne Date: Thu Apr 22 00:44:57 2010 +0000 Improve safety by replacing all g_list_free use by lasso_release_list lasso/id-ff/identity.c | 11 +++-------- lasso/id-ff/login.c | 7 +------ lasso/id-ff/provider.c | 5 +---- lasso/id-ff/session.c | 18 ++++++------------ lasso/id-wsf-2.0/discovery.c | 2 +- lasso/id-wsf/discovery.c | 2 +- lasso/saml-2.0/login.c | 6 +++--- lasso/saml-2.0/provider.c | 2 +- lasso/xml/saml-2.0/samlp2_response.c | 3 +-- lasso/xml/xml.c | 4 ++-- 10 files changed, 20 insertions(+), 40 deletions(-) commit 1ef02e3fe2fdd36a45ab6b47499db6d3e404b3e0 Author: Benjamin Dauvergne Date: Thu Apr 22 00:44:49 2010 +0000 Improve safety by replacing all g_string_free use by lasso_release_gstring lasso/id-wsf-2.0/data_service.c | 2 +- lasso/utils.c | 2 +- lasso/xml/samlp_status.c | 3 ++- lasso/xml/tools.c | 4 ++-- lasso/xml/xml.c | 4 ++-- 5 files changed, 8 insertions(+), 7 deletions(-) commit 0a169eda51add0070a68b6280293da03529ae78a Author: Benjamin Dauvergne Date: Thu Apr 22 00:44:45 2010 +0000 Improve safety by replacing all g_free use by lasso_release lasso/id-ff/defederation.c | 2 +- lasso/id-ff/federation.c | 3 ++- lasso/id-ff/identity.c | 2 +- lasso/id-ff/login.c | 4 ++-- lasso/id-ff/logout.c | 10 ++++----- lasso/id-ff/name_registration.c | 12 +++++----- lasso/id-ff/provider.c | 26 +++++++++++----------- lasso/id-ff/server.c | 8 +++---- lasso/id-ff/session.c | 7 +++--- lasso/id-wsf-2.0/data_service.c | 2 +- lasso/id-wsf-2.0/discovery.c | 2 +- lasso/id-wsf-2.0/profile.c | 4 ++-- lasso/id-wsf/authentication.c | 15 +++++++------ lasso/id-wsf/data_service.c | 2 +- lasso/id-wsf/discovery.c | 4 ++-- lasso/id-wsf/wsf_profile.c | 2 +- lasso/registry.c | 2 +- lasso/saml-2.0/assertion_query.c | 2 +- lasso/saml-2.0/ecp.c | 2 +- lasso/saml-2.0/provider.c | 4 ++-- lasso/saml-2.0/server.c | 3 ++- .../xml/lib_federation_termination_notification.c | 4 ++-- lasso/xml/saml-2.0/samlp2_request_abstract.c | 2 +- lasso/xml/saml-2.0/samlp2_status_response.c | 2 +- lasso/xml/saml_assertion.c | 4 ++-- lasso/xml/tools.c | 14 ++++++------ lasso/xml/ws/wsse_username_token.c | 8 +++---- lasso/xml/xml.c | 20 ++++++++--------- 28 files changed, 87 insertions(+), 85 deletions(-) commit c93fb2a356cd8af36bfaa6f5c356e8ad8824f30d Author: Benjamin Dauvergne Date: Thu Apr 22 00:44:31 2010 +0000 Start an example listing for an IdP SingleSignOn endpoint lasso/id-ff/login.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) commit 3304176c374d7ba59c560daf5c364c2674093214 Author: Benjamin Dauvergne Date: Thu Apr 22 00:44:28 2010 +0000 Free xmlSecKey tests/random_tests.c | 1 + 1 file changed, 1 insertion(+) commit e66252fb5f38a1f20d952ba185be6b021cb0d95d Author: Benjamin Dauvergne Date: Thu Apr 22 00:44:25 2010 +0000 Fix potential SEGFAULT in _lasso_node_free_custom_element lasso/xml/xml.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) commit 34c7642226adcc643aee7bc164013d07e5780f3f Author: Benjamin Dauvergne Date: Thu Apr 22 00:44:22 2010 +0000 Utils: add lasso_assign_list lasso/utils.h | 8 ++++++++ 1 file changed, 8 insertions(+) commit f08387c983eb18fd43ff216d19b7ecdfd54c4e5b Author: Benjamin Dauvergne Date: Thu Apr 22 00:44:19 2010 +0000 Add lasso_release_gstring lasso/utils.h | 9 +++++++++ 1 file changed, 9 insertions(+) commit 7682ce4eac9b131d77755558a14403f8a309101c Author: Benjamin Dauvergne Date: Thu Apr 22 00:44:15 2010 +0000 Utils: add lasso_release_ghashtable lasso/utils.h | 3 +++ 1 file changed, 3 insertions(+) commit 38d3f9d9a452ff44b7762a789641d3b1448f0040 Author: Benjamin Dauvergne Date: Thu Apr 22 00:44:11 2010 +0000 SAML 2.0 Profile: remove unused must_sign variable lasso/saml-2.0/profile.c | 2 -- 1 file changed, 2 deletions(-) commit 71ce60e8fcc9bcdf0fcfc222892b97ab8f17ee8e Author: Benjamin Dauvergne Date: Thu Apr 22 00:44:07 2010 +0000 First try to check that objects are fully functionals before proceeding lasso/id-ff/logout.c | 4 ++++ 1 file changed, 4 insertions(+) commit 79c38864c27bf997e304fdd602441d49cdabde7d Author: Benjamin Dauvergne Date: Thu Apr 22 00:44:01 2010 +0000 Fix potential SEGFAULT of an unknown provider lasso/saml-2.0/logout.c | 5 +++++ 1 file changed, 5 insertions(+) commit 11a8f538461450b7d8e542c80da0349afede1af2 Author: Benjamin Dauvergne Date: Tue Apr 20 09:34:23 2010 +0000 SAML 2.0: in lasso_saml20_process_federation, only handle the case of PERSISTENT format * lasso/saml-2.0/login.c: in lasso_saml20_process_federation: - if no name id format can be found by the request, use the default from the metadata file (first declared NameIDFormat) - instead of checking if format is TRANSIENT, check if it is PERSISTENT, and proceed with the federation, if not just return 0. - return LASSO_PROFILE_ERROR_UNKNOWN_PROVIDER instead of LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND. - in any case, check for consent. lasso/saml-2.0/login.c | 69 ++++++++++++++++++++------------------------------ 1 file changed, 28 insertions(+), 41 deletions(-) commit 281817ce87b6afcd6b3d096f3a30de6b239e7507 Author: Benjamin Dauvergne Date: Tue Apr 20 09:34:22 2010 +0000 SAML 2.0: in lasso_saml20_login_validate_request, do not check signature if not necessary lasso/saml-2.0/login.c | 44 +++++++++++++++++++++----------------------- 1 file changed, 21 insertions(+), 23 deletions(-) commit dd495ca6c341a7d214d6978d0eb81f1de1fed29d Author: Benjamin Dauvergne Date: Tue Apr 20 09:34:20 2010 +0000 SAML 2.0: find binding when only AssertionConsumerServiceURL is set, do not check signature on request if asked lasso/saml-2.0/login.c | 100 ++++++++++++++++++++++++++++++++++--------------- 1 file changed, 69 insertions(+), 31 deletions(-) commit e9be17236d198852cedf43d001d0939f29c4350a Author: Benjamin Dauvergne Date: Tue Apr 20 09:34:18 2010 +0000 SAML 2.0: add internal method to retrieve the binding for an URL lasso/saml-2.0/provider.c | 62 +++++++++++++++++++++++++++++++++++++++- lasso/saml-2.0/providerprivate.h | 5 +++- 2 files changed, 65 insertions(+), 2 deletions(-) commit 6ff6f92720f4a4678ae8aa86097dcf345308a158 Author: Benjamin Dauvergne Date: Tue Apr 20 09:34:17 2010 +0000 Login: add internal function _lasso_login_must_verify_*signature lasso/id-ff/profile.h | 3 ++- lasso/saml-2.0/login.c | 47 ++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 48 insertions(+), 2 deletions(-) commit 2d89170af65f753503801933a5e930e36f032cb4 Author: Benjamin Dauvergne Date: Mon Apr 19 11:51:28 2010 +0000 Login: remove symbol markers in example code lasso/id-ff/login.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) commit 05aad98ec31c5bdfc0909e30ec6ecf69c3719bfa Author: Benjamin Dauvergne Date: Mon Apr 19 11:30:35 2010 +0000 Fix documentation problems docs/reference/lasso/lasso-sections.txt | 6 ------ lasso/id-ff/login.c | 8 ++++---- lasso/id-ff/provider.c | 10 +++++----- lasso/id-wsf-2.0/profile.c | 2 +- lasso/saml-2.0/provider.c | 2 +- lasso/saml-2.0/saml2_helper.c | 2 +- lasso/xml/xml.c | 2 +- lasso/xml/xml.h | 4 +++- 8 files changed, 16 insertions(+), 20 deletions(-) commit 81c35bbe2effac358126f5aea78e4f5b9e115f6e Author: Benjamin Dauvergne Date: Fri Apr 16 15:37:17 2010 +0000 Ameliorate support for lasso_profile_set_signature_verify_hint * lasso/id-ff/profile.h: - add end symbol for enum LassoProfileSignatureVerifyHint * lasso/id-ff/profile.c: - fix documentation of lasso_profile_set_signature_verify_hint - do not allow to set or return invalid value for the signature_verify_hint attribute. * lasso/saml-2.0/login.c: - handle new enum value * lasso/saml-2.0/profile.c: - handle new enum value - fix missing catch of signature error reporting when signature_verify_hint is IGNORE. * docs/reference/lasso/lasso-sections.txt: - export enums LassoProfileSignatureHint and LassoProfileSignatureVerifyHint * tests/metadata_tests.c: - fix test of all Role enumerations docs/reference/lasso/lasso-sections.txt | 2 ++ lasso/id-ff/profile.c | 27 +++++++++++---- lasso/id-ff/profile.h | 4 ++- lasso/saml-2.0/login.c | 4 +++ lasso/saml-2.0/profile.c | 58 +++++++++++++++++++-------------- tests/metadata_tests.c | 2 +- 6 files changed, 64 insertions(+), 33 deletions(-) commit 90b965e6a3e976210e1960291241d9a4104d0d58 Author: Benjamin Dauvergne Date: Tue Apr 6 15:00:48 2010 +0000 Revert "Core: add XML schemas for SAML 2.0" This reverts commit 5250c2c89e3983189a3c52cd85ad221ff7b6f64b. schemas/saml-2.0/saml-schema-assertion-2.0.xsd | 283 ------- schemas/saml-2.0/saml-schema-authn-context-2.0.xsd | 23 - ...aml-schema-authn-context-auth-telephony-2.0.xsd | 81 -- .../saml-2.0/saml-schema-authn-context-ip-2.0.xsd | 65 -- .../saml-schema-authn-context-ippword-2.0.xsd | 67 -- .../saml-schema-authn-context-kerberos-2.0.xsd | 83 --- ...chema-authn-context-mobileonefactor-reg-2.0.xsd | 186 ----- ...ema-authn-context-mobileonefactor-unreg-2.0.xsd | 183 ----- ...chema-authn-context-mobiletwofactor-reg-2.0.xsd | 202 ----- ...ema-authn-context-mobiletwofactor-unreg-2.0.xsd | 200 ----- ...ml-schema-authn-context-nomad-telephony-2.0.xsd | 81 -- ...schema-authn-context-personal-telephony-2.0.xsd | 80 -- .../saml-2.0/saml-schema-authn-context-pgp-2.0.xsd | 83 --- .../saml-2.0/saml-schema-authn-context-ppt-2.0.xsd | 81 -- .../saml-schema-authn-context-pword-2.0.xsd | 64 -- .../saml-schema-authn-context-session-2.0.xsd | 64 -- .../saml-schema-authn-context-smartcard-2.0.xsd | 64 -- .../saml-schema-authn-context-smartcardpki-2.0.xsd | 129 ---- .../saml-schema-authn-context-softwarepki-2.0.xsd | 129 ---- .../saml-schema-authn-context-spki-2.0.xsd | 83 --- .../saml-2.0/saml-schema-authn-context-srp-2.0.xsd | 82 -- .../saml-schema-authn-context-sslcert-2.0.xsd | 97 --- .../saml-schema-authn-context-telephony-2.0.xsd | 79 -- .../saml-schema-authn-context-timesync-2.0.xsd | 105 --- .../saml-schema-authn-context-types-2.0.xsd | 821 --------------------- .../saml-schema-authn-context-x509-2.0.xsd | 83 --- .../saml-schema-authn-context-xmldsig-2.0.xsd | 83 --- schemas/saml-2.0/saml-schema-dce-2.0.xsd | 29 - schemas/saml-2.0/saml-schema-ecp-2.0.xsd | 57 -- schemas/saml-2.0/saml-schema-metadata-2.0.xsd | 337 --------- schemas/saml-2.0/saml-schema-protocol-2.0.xsd | 302 -------- schemas/saml-2.0/saml-schema-x500-2.0.xsd | 20 - schemas/saml-2.0/saml-schema-xacml-2.0.xsd | 19 - 33 files changed, 4345 deletions(-) commit 21015341e4482545ff7e362ded08e1d02d4af3f8 Author: Benjamin Dauvergne Date: Tue Apr 6 15:00:46 2010 +0000 SAML 2.0: add Destination attribute to requests * lasso/saml-2.0/profile.c: this change make Lasso respect paragraphs 3.4.5.2 (HTTP-Redirect binding securit considerations ) and 3.5.5.2 (the same for HTTP-Post) of the saml-bindings-2.0-os.pdf document, and should allow our Authn Requests to be accepted by shiboleth IdP. lasso/saml-2.0/profile.c | 5 +++++ 1 file changed, 5 insertions(+) commit ca495cce426e27ee7a95d6646da34425cc1869df Author: Benjamin Dauvergne Date: Tue Apr 6 13:11:44 2010 +0000 Tools: add usage statement to check-lasso-sections.py tools/check-lasso-sections.py | 3 +++ 1 file changed, 3 insertions(+) commit ff911847a7881ef3969ac7aa3a99080b96647db4 Author: Benjamin Dauvergne Date: Tue Apr 6 13:11:42 2010 +0000 Docs: add/remove symbols from lasso-sections.txt docs/reference/lasso/lasso-sections.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit c4991e90ec34c0c8070c032df9c5c3d20a56cf65 Author: Benjamin Dauvergne Date: Tue Apr 6 13:11:40 2010 +0000 ID-WSF 2.0 DST: make lasso_idwsf2_data_service_set_status_code works event if no response is initialized lasso/id-wsf-2.0/data_service.c | 52 ++++++++++++++++++++++------------------- 1 file changed, 28 insertions(+), 24 deletions(-) commit d10f2982ae6ee17cfbe5eec77261f40a5a43981a Author: Benjamin Dauvergne Date: Tue Apr 6 13:11:38 2010 +0000 Tests: add tests for custom namespace functions tests/basic_tests.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) commit 143e775942b4d5a68188b54bf0d336220e2e3807 Author: Benjamin Dauvergne Date: Tue Apr 6 13:11:36 2010 +0000 ID-FF 1.2 & SAML 2.0: factorize access to role prefix lasso/id-ff/provider.c | 36 +++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-) commit 16034a9898c6b30983581c02022f9749ca346f82 Author: Benjamin Dauvergne Date: Tue Apr 6 13:11:34 2010 +0000 Tests: make role descriptor loading test less verbose * tests/metadata_tests.c: remove printf, add checks tests/metadata_tests.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) commit 492da50458a12e641fc98ab6a116bde800f4e99e Author: Benjamin Dauvergne Date: Tue Apr 6 13:11:32 2010 +0000 Tests: show actual value in check_equals test macro tests/tests.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit d26bdfaef7943fd2efc07290940525d521b8cf18 Author: Benjamin Dauvergne Date: Tue Apr 6 13:11:30 2010 +0000 XML: add custom namespace definition handling lasso/id-wsf-2.0/data_service.c | 10 ++++++++++ lasso/xml/private.h | 2 ++ lasso/xml/xml.c | 41 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 53 insertions(+) commit 46044e2d9cf5d6859544638c6b99592e074ba855 Author: Benjamin Dauvergne Date: Tue Apr 6 13:11:28 2010 +0000 SAML 2.0: fix default assertion consumer handling when isDefault is missing * if no default_assertion_consumer value is set after traversing the list of endpoint, try to find the first one without isDefault="false" and finally take the first one. lasso/saml-2.0/provider.c | 70 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 69 insertions(+), 1 deletion(-) commit b90a0b2160962223ca384168590dc8ddb3557a67 Author: Benjamin Dauvergne Date: Tue Apr 6 13:11:26 2010 +0000 SAML 2.0: fix default assertion consumer handling * the default one is the first with the attribute isDefault not the last. lasso/saml-2.0/provider.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 117649f2d7d7697f1f1ae89f3446fbed683a89a3 Author: Benjamin Dauvergne Date: Tue Apr 6 13:11:23 2010 +0000 Binding python tests: update idwsf1 to explicitely register PP10 HREF bindings/python/tests/idwsf1_tests.py | 1 + 1 file changed, 1 insertion(+) commit 97c88ffa772cb76c098863f96774377ad3e85fe1 Author: Benjamin Dauvergne Date: Tue Apr 6 13:11:21 2010 +0000 Binding python: update idwsf2 test for method change dst.initResponse -> validateRequest bindings/python/tests/idwsf2_tests.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 3c4ad4d8bc08bd880806d6777db8c9a4415a5cbd Author: Benjamin Dauvergne Date: Tue Apr 6 13:11:19 2010 +0000 XML: do not register any DST namespace by default lasso/xml/xml.c | 7 ------- 1 file changed, 7 deletions(-) commit 91e3614a1459540e84ca50884b7e085747996020 Author: Benjamin Dauvergne Date: Tue Apr 6 13:11:17 2010 +0000 XML: add a SNIPPET_COLLECT_NAMESPACES snippet to DstRefResultQuery lasso/xml/id-wsf-2.0/dstref_result_query.c | 3 +++ lasso/xml/id-wsf-2.0/dstref_result_query.h | 1 + lasso/xml/xml.c | 10 +++++----- 3 files changed, 9 insertions(+), 5 deletions(-) commit 7db0387f5aca39b4321535161947922b63d04295 Author: Benjamin Dauvergne Date: Tue Apr 6 13:11:14 2010 +0000 ID-WSF 2.0 Data Service: new accessor, fix use of build_unique_id, change init_response to validate_request docs/reference/lasso/lasso-sections.txt | 1 + lasso/id-wsf-2.0/data_service.c | 43 +++++++++++++++++++++++++++++++-- lasso/id-wsf-2.0/data_service.h | 4 ++- 3 files changed, 45 insertions(+), 3 deletions(-) commit 43bb65157c7373d84c9498f72a26928b51dd36f3 Author: Benjamin Dauvergne Date: Tue Apr 6 13:11:10 2010 +0000 Core: add a SNIPPET_COLLECT_NAMESPACE snippet type * lasso/xml/private.h lasso/xml/xml.c: add a new primary XmlSnippet type for collecting all namespace declaration, following parent relation on current node or one of the child nodes. lasso/xml/private.h | 3 ++- lasso/xml/xml.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 1 deletion(-) commit cb1573c61cb5f077a35fb8ea15cbfd7287918e73 Author: Benjamin Dauvergne Date: Tue Apr 6 13:11:07 2010 +0000 Binding python: fix use of raise_on_rc, simplift Node.__setstate__ bindings/python/lang.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) commit 512f951b8b5c50c5bc2f6380c2a0b9307f33aaed Author: Benjamin Dauvergne Date: Tue Apr 6 13:11:03 2010 +0000 Revert "Make lasso_node_get_xmlNode return original_xmlnode if there is one" This reverts commit dfd8f21ab27d2b25a67a52aadd9d4cdce20ebda5. lasso/xml/xml.c | 5 ----- 1 file changed, 5 deletions(-) commit 8447c5549c5724e87ec13c270e13a1f42762f739 Author: Benjamin Dauvergne Date: Tue Apr 6 13:11:02 2010 +0000 Binding python: for empty GList return empty tuples, not None bindings/python/tests/binding_tests.py | 12 ++++++------ bindings/python/wrapper_top.c | 24 ++++++++++++------------ 2 files changed, 18 insertions(+), 18 deletions(-) commit c95e6b9918bc5133acc6e49ddf1c5c38ccbcf1b9 Author: Benjamin Dauvergne Date: Tue Apr 6 13:11:00 2010 +0000 Docs: remove from documentation comments characters outside ASCII for python bindings lasso/id-ff/login.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) commit ed77956b86fb45ac366c98887eb7f794340978ee Author: Benjamin Dauvergne Date: Tue Apr 6 13:10:58 2010 +0000 Fix return path in lasso_saml20_process_any_response for signatures checking lasso/saml-2.0/profile.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit e40bd039592eb747be4da9c2cc8a3276a7ecfa2e Author: Benjamin Dauvergne Date: Tue Apr 6 13:10:56 2010 +0000 fix documentation of lasso_node_debug lasso/xml/xml.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit e041252a4dcfeee85fbeb21ada7d2de5fc1a69fd Author: Benjamin Dauvergne Date: Tue Apr 6 13:10:53 2010 +0000 Make lasso_node_get_xmlNode return original_xmlnode if there is one * lasso/xml/xml.c: this change allow session to contain exact copy of received assertion (and not the one lacking signatures) and also to put those assertions directly into message, for example as ID-WSF credentials. But it could have side effect, so for now I will no merge it. lasso/xml/xml.c | 5 +++++ 1 file changed, 5 insertions(+) commit 7d9159dea8e7b2284d6f181c17310a611fd81ed5 Author: Benjamin Dauvergne Date: Sat Mar 27 17:40:03 2010 +0000 update documentation of lasso_login_build_authn_response_msg lasso/id-ff/login.c | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) commit 34e9e3541355e24a467597cb11241eb60d18a334 Author: Benjamin Dauvergne Date: Sat Mar 27 17:40:01 2010 +0000 update documentation of lasso_login_build_authn_request_msg lasso/id-ff/login.c | 47 ++++++++++++++++++++++++++++++++++++----------- 1 file changed, 36 insertions(+), 11 deletions(-) commit 9aa68aa4efb6d050e42bd70f8e121f759d464173 Author: Benjamin Dauvergne Date: Sat Mar 27 17:40:00 2010 +0000 improve documentation of lasso_login_build_artifact_msg lasso/id-ff/login.c | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) commit 938d84e0ea2f2828f95d8b3408afb9515c16a184 Author: Benjamin Dauvergne Date: Sat Mar 27 17:39:59 2010 +0000 use lasso_release_gobject in lasso_login_destroy lasso/id-ff/login.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit aea8e65e8212afe80548ca39d3ec3de71f2b1406 Author: Benjamin Dauvergne Date: Sat Mar 27 17:39:57 2010 +0000 update lasso_login_accept_sso documentation lasso/id-ff/login.c | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) commit f09332e9d6f8ab1f4297a8fe8cef2fb42f7d6137 Author: Benjamin Dauvergne Date: Sat Mar 27 17:39:56 2010 +0000 ID-FF&SAML2: complete documentation of lasso_login_build_assertion lasso/id-ff/login.c | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) commit 584fe403533bc6afcfe29eb122508c22e400c4c7 Author: Benjamin Dauvergne Date: Sat Mar 27 17:39:55 2010 +0000 Make multiple include loading work in lasso/backward_comp.h * lasso/backward_comp.h add missing BACKWARD_COMP_H define. lasso/backward_comp.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 51860435ba7ab01d55d24f957dfb772eec38d22d Author: Benjamin Dauvergne Date: Sat Mar 27 16:52:08 2010 +0000 Binding python: fix test file bindings/perl/t/Lasso.t | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit c07cd3898cfc00ab6dbfc4c48b31e7d4858808ec Author: Benjamin Dauvergne Date: Sat Mar 27 16:52:04 2010 +0000 SAML 2.0&ID-FF 1.2: simplify and complete metadata loading for multi-role support docs/reference/lasso/lasso-sections.txt | 7 + lasso/id-ff/profile.h | 3 +- lasso/id-ff/provider.c | 491 +++++++++++++++++++++++------- lasso/id-ff/provider.h | 55 +++- lasso/id-ff/providerprivate.h | 6 + lasso/saml-2.0/assertion_query.c | 293 +++++++----------- lasso/saml-2.0/profile.c | 28 +- lasso/saml-2.0/profileprivate.h | 2 + lasso/saml-2.0/provider.c | 511 +++++++++++++++++--------------- lasso/saml-2.0/providerprivate.h | 14 +- lasso/xml/saml-2.0/saml2_strings.h | 7 + lasso/xml/saml-2.0/saml2_xsd.h | 2 +- tests/Makefile.am | 2 +- tests/assertion_query_saml2.c | 95 ++++++ tests/metadata_tests.c | 32 ++ tests/tests.c | 2 + 16 files changed, 1007 insertions(+), 543 deletions(-) commit 16d4b4df24f0bdd341756d3be20bbbc30c3414e5 Author: Benjamin Dauvergne Date: Sat Mar 27 16:52:01 2010 +0000 Core: add XML schemas for SAML 2.0 schemas/saml-2.0/saml-schema-assertion-2.0.xsd | 283 +++++++ schemas/saml-2.0/saml-schema-authn-context-2.0.xsd | 23 + ...aml-schema-authn-context-auth-telephony-2.0.xsd | 81 ++ .../saml-2.0/saml-schema-authn-context-ip-2.0.xsd | 65 ++ .../saml-schema-authn-context-ippword-2.0.xsd | 67 ++ .../saml-schema-authn-context-kerberos-2.0.xsd | 83 +++ ...chema-authn-context-mobileonefactor-reg-2.0.xsd | 186 +++++ ...ema-authn-context-mobileonefactor-unreg-2.0.xsd | 183 +++++ ...chema-authn-context-mobiletwofactor-reg-2.0.xsd | 202 +++++ ...ema-authn-context-mobiletwofactor-unreg-2.0.xsd | 200 +++++ ...ml-schema-authn-context-nomad-telephony-2.0.xsd | 81 ++ ...schema-authn-context-personal-telephony-2.0.xsd | 80 ++ .../saml-2.0/saml-schema-authn-context-pgp-2.0.xsd | 83 +++ .../saml-2.0/saml-schema-authn-context-ppt-2.0.xsd | 81 ++ .../saml-schema-authn-context-pword-2.0.xsd | 64 ++ .../saml-schema-authn-context-session-2.0.xsd | 64 ++ .../saml-schema-authn-context-smartcard-2.0.xsd | 64 ++ .../saml-schema-authn-context-smartcardpki-2.0.xsd | 129 ++++ .../saml-schema-authn-context-softwarepki-2.0.xsd | 129 ++++ .../saml-schema-authn-context-spki-2.0.xsd | 83 +++ .../saml-2.0/saml-schema-authn-context-srp-2.0.xsd | 82 ++ .../saml-schema-authn-context-sslcert-2.0.xsd | 97 +++ .../saml-schema-authn-context-telephony-2.0.xsd | 79 ++ .../saml-schema-authn-context-timesync-2.0.xsd | 105 +++ .../saml-schema-authn-context-types-2.0.xsd | 821 +++++++++++++++++++++ .../saml-schema-authn-context-x509-2.0.xsd | 83 +++ .../saml-schema-authn-context-xmldsig-2.0.xsd | 83 +++ schemas/saml-2.0/saml-schema-dce-2.0.xsd | 29 + schemas/saml-2.0/saml-schema-ecp-2.0.xsd | 57 ++ schemas/saml-2.0/saml-schema-metadata-2.0.xsd | 337 +++++++++ schemas/saml-2.0/saml-schema-protocol-2.0.xsd | 302 ++++++++ schemas/saml-2.0/saml-schema-x500-2.0.xsd | 20 + schemas/saml-2.0/saml-schema-xacml-2.0.xsd | 19 + 33 files changed, 4345 insertions(+) commit 688700f5b35d9eb6ee1f80b7339fb1f58693fe6c Author: Benjamin Dauvergne Date: Sat Mar 27 16:51:57 2010 +0000 Doc: add all missing methods to documentation section file * add missing LASSO_EXPORT too for functions already present in the documentation, but not exported previously. docs/reference/lasso/lasso-sections.txt | 82 ++++++++++++++++++++++++++++++--- lasso/xml/soap_binding.h | 4 +- 2 files changed, 78 insertions(+), 8 deletions(-) commit 6924bffe2196b85e76cc8a2be378c84219839dd9 Author: Benjamin Dauvergne Date: Sat Mar 27 16:51:55 2010 +0000 Tools: add script to check for missing functions in lasso-sections.txt tools/check-lasso-sections.py | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) commit 15a74effe6f9501092d1dbcf078deb9d8e5c8088 Author: Benjamin Dauvergne Date: Sat Mar 27 16:51:52 2010 +0000 XML: in lasso_node_build_xmlNode_from_snippets only set child name if SNIPPET is not of ANY type lasso/xml/xml.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit 4b9f6d83053cbce853ffaaffbe2ffa131820ece4 Author: Benjamin Dauvergne Date: Sat Mar 27 16:51:50 2010 +0000 Core: add lasso_set_string_from_prop(char**,xmlNode*,..) function lasso/xml/private.h | 1 + lasso/xml/tools.c | 14 ++++++++++++++ 2 files changed, 15 insertions(+) commit 9150b008cfb06b1a4d61047a4ca577714c9561c7 Author: Benjamin Dauvergne Date: Sat Mar 27 16:51:47 2010 +0000 Core: add method to check whether we are IdP or SP of another provider * lasso/id-ff/profile.{c,h}: the method lasso_profile_sso_role_with, evaluate using the current LassoIdentity content if we are in a relation of IdP or SP toward another provider. This is based on the existence of a federation with this provider. lasso/id-ff/profile.c | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++ lasso/id-ff/profile.h | 1 + 2 files changed, 57 insertions(+) commit f720e3233c363e27e839f4881577d8c8f5a0c83c Author: Benjamin Dauvergne Date: Sat Mar 27 16:51:45 2010 +0000 SAML 2.0: add attribute profiles strings lasso/xml/saml-2.0/saml2_strings.h | 7 +++++++ 1 file changed, 7 insertions(+) commit f5442dc84bf28314339ed3e511921980bd3545aa Author: Benjamin Dauvergne Date: Sat Mar 27 16:51:43 2010 +0000 SAML 2.0: add support for attribute, authentication and authorization authorities metadata * server.c,serverprivate.h: add new private method lasso_server_get_firs_providerID_by_role(server, role)w * defederation.c: use new private method lasso_server_get_first_providerID_by_role for find providerID when the argument remote_providerID is null in lasso_defederation_init_notification. * lasso/id-ff/login.c (lasso_login_init_authn_request): use new private method lasso_server_get_first_providerID_by_role. * provider.h: add thre new provider role (authn,pdp,attribute) and four new services (authn,assertionid,attribute,authz) and also a ROLE_ANY value (-1) for catchall purpose and a ROLE_LAST for array sizing. * provider.h: add a LAST member to LassoMdProtocolType enum. * providerprivate.h,provider.c: - removes separate hashtable for descriptors depending on provider role, use only one table named Descriptors. - use the LAST members of enumerations to dimention static string arrays. * provider.h: add a LAST member to the e lasso/id-ff/defederation.c | 19 +++++-- lasso/id-ff/login.c | 2 +- lasso/id-ff/provider.c | 68 ++++++++++++------------ lasso/id-ff/provider.h | 27 ++++++++-- lasso/id-ff/providerprivate.h | 4 +- lasso/id-ff/server.c | 33 ++++++++++++ lasso/id-ff/serverprivate.h | 1 + lasso/saml-2.0/assertion_query.c | 110 ++++++++++++++++++++++++++++++--------- lasso/saml-2.0/assertion_query.h | 1 + lasso/saml-2.0/ecp.c | 2 +- lasso/saml-2.0/provider.c | 74 ++++++++++++++++++-------- 11 files changed, 247 insertions(+), 94 deletions(-) commit 3b1b382f8cd3a5ffab9c6b0d5a80172af79ee1b9 Author: Benjamin Dauvergne Date: Sat Mar 27 16:51:40 2010 +0000 XML: add support for setting attribute in any namespace using element tree syntax lasso/xml/xml.c | 39 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) commit 97f37266e36f1ea0b65ba43c3ca32c526187838a Author: Benjamin Dauvergne Date: Sat Mar 27 16:51:38 2010 +0000 Support SignatureVerifyHint in SAML 2.0 SSO profile and common message handling lasso/saml-2.0/login.c | 68 ++++++++++++++++++++++++++++++++++++++---------- lasso/saml-2.0/profile.c | 43 +++++++++++++++++++++++++----- 2 files changed, 91 insertions(+), 20 deletions(-) commit d5994b2bae7a8e1ea42a758546f505f58aa5e1c3 Author: Benjamin Dauvergne Date: Sat Mar 27 16:51:34 2010 +0000 Add signature_verify_hint accessor methods to LassoProfile * lasso/id-ff/profile.{c,h}: add a LassoProfileSignatureVerifyHint enumeration and two accessor methods: - lasso_profile_get_signature_verify_hint - lasso_profile_set_signature_verify_hint * lasso/id-ff/profileprivate.h: add private field signature_verify_hint. docs/reference/lasso/lasso-sections.txt | 2 ++ lasso/id-ff/profile.c | 35 +++++++++++++++++++++++++++++++++ lasso/id-ff/profile.h | 20 ++++++++++++++++++- lasso/id-ff/profileprivate.h | 1 + 4 files changed, 57 insertions(+), 1 deletion(-) commit 7930eba5a3d38be225c510c63a39ac7fec9fc43c Author: Benjamin Dauvergne Date: Sat Mar 27 16:51:30 2010 +0000 Bindings: fix parsing of camelcased ident (Samlp2IDPList -> samlp2,idp,list) bindings/utils.py | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) commit 7b8c1f6dab35846efe3001f265ab7862021650d1 Author: Benjamin Dauvergne Date: Sat Mar 27 16:51:26 2010 +0000 Binding python: fix problem of classes without an initializer bindings/python/lang.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) commit bb5ca6546defea56658eec81edae3626a181e64e Author: Benjamin Dauvergne Date: Sat Mar 27 16:51:25 2010 +0000 Tests: add macros to test for string equality tests/tests.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) commit 04ad7903475676fa265a8b0622f86f1bb1dbf71c Author: Benjamin Dauvergne Date: Sat Mar 27 16:51:23 2010 +0000 Tests: in SAML 2.0 tests, use more check_ macros tests/login_tests_saml2.c | 114 +++++++++++++++++++--------------------------- 1 file changed, 46 insertions(+), 68 deletions(-) commit 7948fab3e216a2a27d8d3b76c3c6095cf255964d Author: Benjamin Dauvergne Date: Sat Mar 27 16:51:21 2010 +0000 Tests: add macros check_equals and check_not_equals tests/tests.h | 14 ++++++++++++++ 1 file changed, 14 insertions(+) commit cdaf6377375eecdbc1f320cb7c5d470edfb45048 Author: Benjamin Dauvergne Date: Sat Mar 27 16:51:19 2010 +0000 Core: change GObjectAnnotation of lasso_node_export_to_query to state that private_key_file is optional lasso/xml/xml.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 5927c51f9e8b5642f6cd2a51b84c7a36fe009ea8 Author: Benjamin Dauvergne Date: Sat Mar 27 16:51:16 2010 +0000 SAML 2.0 XML: add header listing strings from XML schema bindings/bindings.py | 2 +- lasso/xml/saml-2.0/Makefile.am | 4 +-- lasso/xml/saml-2.0/saml2_xsd.h | 56 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 59 insertions(+), 3 deletions(-) commit 139a31df801eeeb88170cde1d2a306deab3fa63f Author: Benjamin Dauvergne Date: Mon Mar 8 13:19:59 2010 +0000 SAML 2.0: fix uninitialized variable lasso/saml-2.0/login.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 53485f760868c466b22348f486483e764d890306 Author: Benjamin Dauvergne Date: Mon Mar 8 13:19:58 2010 +0000 ID-WSF 1.0: fix bad header name in all inclusive header lasso/id-wsf/id_wsf.h lasso/id-wsf/id_wsf.h | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) commit 8f7e9b51674f8b77081adbe17e605b07188e5f76 Author: Benjamin Dauvergne Date: Tue Mar 2 11:58:05 2010 +0000 Binding PHP5 tests: fix assertion dump test bindings/php5/tests/binding_tests.php | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) commit 0ff7329ad21fa96c3111a70806babd76edd00e6d Author: Benjamin Dauvergne Date: Tue Mar 2 11:58:04 2010 +0000 XML: move registry mapping into the *_get_type() functions * lassoxml/disco_send_single_logout.c: * lassoxml/id-wsf-2.0/sb2_user_interaction_header.c: * lassoxml/id-wsf-2.0/subsref_app_data.c: * lassoxml/lib_assertion.c: * lassoxml/saml-2.0/saml2_condition_abstract.c: * lassoxml/saml-2.0/saml2_encrypted_element.c: * lassoxml/ws/wsa_attributed_uri.c: * lassoxml/ws/wsa_endpoint_reference.c: class_init is only called the first time an object of the given type is created, registry mappings must exist before this time, so I moved the registration code to the _get_type() functions. lasso/xml/disco_send_single_logout.c | 3 ++- lasso/xml/id-wsf-2.0/sb2_user_interaction_header.c | 4 ++-- lasso/xml/id-wsf-2.0/subsref_app_data.c | 3 ++- lasso/xml/lib_assertion.c | 4 ++-- lasso/xml/saml-2.0/saml2_condition_abstract.c | 4 ++-- lasso/xml/saml-2.0/saml2_encrypted_element.c | 18 ++++++++++-------- lasso/xml/ws/wsa_attributed_uri.c | 9 ++++++--- lasso/xml/ws/wsa_endpoint_reference.c | 9 ++++++--- 8 files changed, 32 insertions(+), 22 deletions(-) commit 5098e33eb34390af9fbf27350a0b4c20dbe91573 Author: Benjamin Dauvergne Date: Tue Mar 2 11:58:02 2010 +0000 Core: add a level argument to lasso_node_debug lasso/xml/xml.c | 5 +++-- lasso/xml/xml.h | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) commit 9f6bffcca1aa1b45ca3085f2a24f99bab58fb4a4 Author: Benjamin Dauvergne Date: Tue Mar 2 11:58:01 2010 +0000 ID-WSF 2.0: add lasso_soap_envelope_set_relates_to method lasso/id-wsf-2.0/soap_binding.c | 27 +++++++++++++++++++++++++++ lasso/id-wsf-2.0/soap_binding.h | 2 ++ 2 files changed, 29 insertions(+) commit 99454639cd14557dca19e2ffbbaf1f57f1930309 Author: Benjamin Dauvergne Date: Tue Mar 2 11:58:00 2010 +0000 Core: add macro to remove gobject from lists lasso/utils.h | 6 ++++++ 1 file changed, 6 insertions(+) commit 75598ef566e3cb6012905b504866736daf9d8f2f Author: Benjamin Dauvergne Date: Tue Mar 2 11:57:58 2010 +0000 Core: export lasso_build_unique_id into public API * lasso/xml/tools.h: add new header to export lasso_build_unique_id as a public API. * lasso/xml/Makefile.am: add tools.h to header list * lasso/xml/tools.c: add GObjectIntrospection annotations to exported functions. lasso/xml/Makefile.am | 3 ++- lasso/xml/tools.c | 4 ++-- lasso/xml/tools.h | 30 ++++++++++++++++++++++++++++++ 3 files changed, 34 insertions(+), 3 deletions(-) commit 7d950e7457c2d88f0dafb4a61b5603e58f38d366 Author: Benjamin Dauvergne Date: Tue Mar 2 11:57:57 2010 +0000 SAML 2.0: change error code for empty ArtifactResolve response to LASSO_PROFILE_ERROR_MISSING_RESPONSE lasso/saml-2.0/profile.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 0f8da3fbdd3258e2d00b3549820b4c3c5bb85b5a Author: Benjamin Dauvergne Date: Tue Mar 2 11:57:56 2010 +0000 Bindings java: do not mask errors from the code generator bindings/java/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 32794e6c8970f4278dbaa2aade0646a2eb8e1aeb Author: Benjamin Dauvergne Date: Tue Mar 2 11:57:53 2010 +0000 Core: add an helper method to build a SOAP response in a LassoProfile object * lasso/id-ff/profile.{c,h}: add lasso_profile_add_soap_fault_response(char* code, char *string, GList *details). * lasso/id-wsf-2.0/profile.{c,h}: change signature of lasso_idwsf2_profile_init_soap_fault_response. * lasso/id-wsf-2.0/data_service.c: use new function instead of manually intializing soap faults * lasso/id-wsf-2.0/discovery.c: init a soap fault when parsed request is of an unknown type, return proper error. lasso/id-ff/profile.c | 36 ++++++++++++++++++++++++++++++++++++ lasso/id-ff/profile.h | 2 ++ lasso/id-wsf-2.0/data_service.c | 4 +--- lasso/id-wsf-2.0/discovery.c | 6 ++++++ lasso/id-wsf-2.0/profile.c | 32 +++++++++++++++++++------------- lasso/id-wsf-2.0/profile.h | 4 +++- 6 files changed, 67 insertions(+), 17 deletions(-) commit 79271d3032e7f7fddd45187333bc0b77991f6d44 Author: Benjamin Dauvergne Date: Tue Mar 2 11:57:48 2010 +0000 ID-WSF 2.0 python tests: finish tests for new ID-WSF 2.0 API * bindings/python/tests/idwsf2_tests.py: all Discovery service request types are tested, and Data Service query is tested as well. Data Service testing and API should more tested, especially failure cases. bindings/python/tests/idwsf2_tests.py | 183 +++++++++++++++++++++++++++++----- 1 file changed, 157 insertions(+), 26 deletions(-) commit 412e3e9606e062013edcfa2a90ebca2df3470287 Author: Benjamin Dauvergne Date: Tue Mar 2 11:57:47 2010 +0000 ID-WSF 2.0: add service type to response, parse response before using it lasso/id-wsf-2.0/data_service.c | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) commit f47480a53bf2e0986d0eec9c1995f2b97d294802 Author: Benjamin Dauvergne Date: Tue Mar 2 11:57:45 2010 +0000 Core: in xml_insure_namespace do not segfault if ns is NULL lasso/xml/xml.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 3f146262d1fbced754ab97fc910816505352288d Author: Benjamin Dauvergne Date: Tue Mar 2 11:57:44 2010 +0000 Binding python: accept a functio as setter, if it has only two arguments bindings/python/lang.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 9b18350724c6c074eeb58c7edb07618172b91289 Author: Benjamin Dauvergne Date: Tue Mar 2 11:57:43 2010 +0000 ID-WSF 2.0: in lasso_idwsf2_get_name_identifier, use lasso_saml2_assertion_decrypt_subject lasso/id-wsf-2.0/profile.c | 36 +++++++++++++++--------------------- 1 file changed, 15 insertions(+), 21 deletions(-) commit 8c39f9631a79446010ae0a42c83ad2efcefbf453 Author: Benjamin Dauvergne Date: Tue Mar 2 11:57:41 2010 +0000 ID-WSF 2.0: in lasso_idwsf2_profile_check_security_mechanism, add common logic for SAML 2.0 secmech, check for presence of a server object, lasso/id-wsf-2.0/profile.c | 72 +++++++++++++++++++++++++++++++--------------- 1 file changed, 49 insertions(+), 23 deletions(-) commit 4ee7be9d5d1429fcbc8050044ecb990114b63da8 Author: Benjamin Dauvergne Date: Tue Mar 2 11:57:40 2010 +0000 ID-WSF 2.0: fix MDAssociationQueryResponse handling * lasso/id-wsf-2.0/discovery.c: - in lasso_idwsf2_discovery_validate_request, use svcmdids to intialize response to MSAssociationQuery requests. - in lasso_idwsf2_discovery_process_response_msg, extract received svcmdids; use lasso_check_good_rc when needed. lasso/id-wsf-2.0/discovery.c | 40 +++++++++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 15 deletions(-) commit e40b9f73cee0403d7cbf19b68a401b37296c4ed8 Author: Benjamin Dauvergne Date: Tue Mar 2 11:57:38 2010 +0000 ID-WSF 2.0: change signature of lasso_idwsf2_discovery_add_identity_to_epr * lasso/id-wsf-2.0/discovery.c: - in lasso_idwsf2_discovery_add_identity_to_epr, receive an Epr instead of an EprMetadata node, and use lasso_wsa_endpoint_reference_add_security_token to add the assertion token instead of duplicating this logic. - in lasso_idwsf2_discovery_build_epr change the call site. lasso/id-wsf-2.0/discovery.c | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) commit 1aa100b48386caade7fa23039339be03fb170f74 Author: Benjamin Dauvergne Date: Tue Mar 2 11:57:37 2010 +0000 ID-WSF 2.0: fix documentation of lasso_idwsf2_data_service_build_request_msg lasso/id-wsf-2.0/data_service.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit 27247cbd09cab4c280b05cf3a75b17eb99f892e5 Author: Benjamin Dauvergne Date: Tue Mar 2 11:57:35 2010 +0000 SAML 2.0: in lasso_saml2_assertion_get_issuer_provider, check type of server argument lasso/saml-2.0/saml2_helper.c | 1 + 1 file changed, 1 insertion(+) commit dce077bd995993e59559c04c18a45401bce94e5c Author: Benjamin Dauvergne Date: Tue Mar 2 11:57:34 2010 +0000 Core: add do/while(0) around block of goto_cleanup_with_rc lasso/utils.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 49bed47bd21b2fb913a3609b71867718f37130fd Author: Benjamin Dauvergne Date: Tue Mar 2 11:57:32 2010 +0000 Core: add PROFILE errors around assertion validation * lasso/errors.c lasso/errors.h: - add errors concerning invalid assertion, assertion with invalid conditions, unknown issuers, or when the issuer is not a provider we marked as an IdP. - add error for missing sender id in an ID-WSF message. lasso/errors.c | 12 +++++++++++- lasso/errors.h | 34 +++++++++++++++++++++++++++++++++- 2 files changed, 44 insertions(+), 2 deletions(-) commit 8598c1327aa999793a5985ac2d6e380cc609918c Author: Benjamin Dauvergne Date: Tue Mar 2 11:57:29 2010 +0000 Core: add a level argument to lasso_xmlnode_to_string and _lasso_node_export_to_xml docs/reference/lasso/lasso-sections.txt | 1 + lasso/xml/private.h | 2 +- lasso/xml/tools.c | 4 ++-- lasso/xml/xml.c | 28 ++++++++++++++++++++++------ lasso/xml/xml.h | 3 +++ 5 files changed, 29 insertions(+), 9 deletions(-) commit 4c72a3662e56777bc416e7886f8ed95996b2b53e Author: Benjamin Dauvergne Date: Mon Feb 22 15:18:29 2010 +0000 Binding perl: add support for out parameters * bindings/perl/lang.py: support GObject out parameters. bindings/perl/glist_handling.c | 2 +- bindings/perl/lang.py | 53 +++++++++++++++++++++++++++++------------- 2 files changed, 38 insertions(+), 17 deletions(-) commit a45c5844ddbcf87cbf65d0cf2fa61b22c2cb8ac5 Author: Benjamin Dauvergne Date: Mon Feb 22 15:18:28 2010 +0000 SAML 2.0: LassoSaml2ConditionAbstract does not match its element name anymore, add a registry mapping * lasso/xml/saml-2.0/saml2_condition_abstract.c: last commit to this file changed the element name from ConditionAbstract to Condition so the XML parser cannot find the corresponding GObject class anymore. lasso/xml/saml-2.0/saml2_condition_abstract.c | 3 +++ 1 file changed, 3 insertions(+) commit 887da70933406969dcfa7073a94397087b151820 Author: Benjamin Dauvergne Date: Mon Feb 22 13:30:48 2010 +0000 SAML 2.0: add more accessors for Conditions * lasso/saml-2.0/saml2_helper.{c,h}: distribute code from lasso_saml2_assertion_validate_conditions to lasso_saml2_assertion_validate_time_checks and lasso_saml2_assertion_validate_audience. add lasso_saml2_assertion_allows_proxying and lasso_saml2_assertion_allows_proxying_to, to respectively check for proxying of the current assertion, and for proxying to a specific provider (you must call both of them to test completely the proxying status of an assertion). * docs/reference/lasso/lasso-sections.txt: reference new functions into documentation. docs/reference/lasso/lasso-sections.txt | 4 + lasso/saml-2.0/saml2_helper.c | 201 ++++++++++++++++++++++++++++---- lasso/saml-2.0/saml2_helper.h | 17 +++ 3 files changed, 202 insertions(+), 20 deletions(-) commit 333aee05e42aa3179512dfbcb105c5fb45ad26a8 Author: Benjamin Dauvergne Date: Mon Feb 22 13:30:46 2010 +0000 Bindings python: use more accessors from utils.py * binings/python/lang.py: remove direct access to type tuples in favor of using accesors from utils.py. bindings/python/lang.py | 72 +++++++++++++++++++++---------------------------- 1 file changed, 31 insertions(+), 41 deletions(-) commit 008b8151943acb5b5c97b82fc5525ae9d0c03021 Author: Benjamin Dauvergne Date: Mon Feb 22 13:30:45 2010 +0000 Bindings: make is_int more robust, and fix remove_modifiers bindings/utils.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) commit ad2a507468ed133d811c44fc7037202c48256821 Author: Benjamin Dauvergne Date: Mon Feb 22 13:30:43 2010 +0000 Bindings php5: use accessort from bindings/utils.py * bindings/php5/wrapper_source.py: do not handle 'type/variable' tuple directly, use accessors. bindings/php5/wrapper_source.py | 67 +++++++++++++++++++++++------------------ 1 file changed, 38 insertions(+), 29 deletions(-) commit 24c7a4f8a77cac7a74ba147993f90a158b8a924a Author: Benjamin Dauvergne Date: Mon Feb 22 13:30:42 2010 +0000 Binding python: add pickling support to LassoNode * bindings/python/lang.py: support pickling protocol methods __getstate__ and __setstate__ leveraging the lasso_node_dump and lasso_node_new_from_dump methods from Lasso. bindings/python/lang.py | 10 ++++++++++ 1 file changed, 10 insertions(+) commit 46a823ff85c402615af1336d574906171c117ed1 Author: Benjamin Dauvergne Date: Mon Feb 22 13:30:41 2010 +0000 Add lasso_string_to_xsd_integer, to parse xsd:integer values lasso/xml/private.h | 1 + lasso/xml/tools.c | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) commit fd63f46fc4568d55191601ed6de81041da9d0af4 Author: Benjamin Dauvergne Date: Mon Feb 22 13:30:39 2010 +0000 SAML 2.0: fix bad name of Condition element, keep xmlNode as it is abstract * lasso/xml/saml-2.0/saml2_condition_abstract.c: saml2:Condition is an element whose type is abstract, it must be used as an extension point helped by the xsi:type field. As the content is unknown before hand we must keep the original xmlNode for later analysis. lasso/xml/saml-2.0/saml2_condition_abstract.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit e688e969314656290194acbdd0279a3ecc5e2683 Author: Benjamin Dauvergne Date: Mon Feb 22 13:30:37 2010 +0000 Bindings python tests: update idwsf2_tests.py bindings/python/tests/idwsf2_tests.py | 1519 ++++----------------------------- 1 file changed, 160 insertions(+), 1359 deletions(-) commit 009b39dbaf0bf7c91d24dd89f62f912e1d35e49b Author: Benjamin Dauvergne Date: Mon Feb 22 13:30:35 2010 +0000 Bindings: in utils.py, make clean_type handle None value bindings/utils.py | 2 ++ 1 file changed, 2 insertions(+) commit 1ee8f53663dc8eb96c2671412c27dddc96a7a831 Author: Benjamin Dauvergne Date: Mon Feb 22 13:30:33 2010 +0000 ID-WSF 2.0: reorganize EPR minting, add a process_request method to disco service * data_service.c: remove dependency on discovery.h * discovery.{c,h}: - add a lasso_idwsf2_discovery_process_request_msg to extract request data before validate request (SvcMDID, SvcMD or RequestService). - store SvcMDID in a private field, add a setter for it. - SvcMDID is now used for building response to MDAssociationQuery and parsing request for MDQuery, MDDelete, MDAssociationAdd and MDAssociationDelete. * idwsf2_helper.{c,h}: - change security mechanism argument of lasso_wsa_endpoint_reference_add_security_token from a NULL terminated string array to a GList. * saml2_login.{c,h}: - add a lasso_server_create_assertion_as_idwsf2_security_token for minting assertion for ID-WSF 2.0 security, to be used in Discovery bootstap EPR creation and EPR minting for Discovery service Query responses. - add a lasso_saml2_assertion_get_discovery_bootstrap_epr, and rewirte lasso_login_idwsf2_get_discovery_bootstrap_epr to use it. - make lasso_login_idwsf2_add_discovery_bootstrap_epr accept a list of security mechanisms, not just one. * tests/idwsf2_tests.c: - adapt to new argument type of lasso_login_idwsf2_add_discovery_bootstrap_epr. lasso/id-wsf-2.0/data_service.c | 3 +- lasso/id-wsf-2.0/discovery.c | 249 +++++++++++++++++++++++++-------------- lasso/id-wsf-2.0/discovery.h | 10 +- lasso/id-wsf-2.0/idwsf2_helper.c | 14 +-- lasso/id-wsf-2.0/idwsf2_helper.h | 2 +- lasso/id-wsf-2.0/profile.c | 3 + lasso/id-wsf-2.0/saml2_login.c | 148 ++++++++++++++++++----- lasso/id-wsf-2.0/saml2_login.h | 13 +- lasso/id-wsf-2.0/soap_binding.c | 2 + tests/idwsf2_tests.c | 4 +- 10 files changed, 315 insertions(+), 133 deletions(-) commit 432b54a79dae62687c7eeee6d8cf2da90d38a7cb Author: Benjamin Dauvergne Date: Mon Feb 22 13:30:32 2010 +0000 Core: add new example to LassoLogout for asynchronous response handling lasso/id-ff/logout.c | 67 +++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 56 insertions(+), 11 deletions(-) commit 2b157bfa3b7f1db2106601e5080482dfcd6e5e8d Author: Benjamin Dauvergne Date: Mon Feb 22 13:30:30 2010 +0000 Support multiline error messages in build_strerror.py lasso/build_strerror.py | 11 ++++++++--- lasso/errors.c | 12 ++++++------ 2 files changed, 14 insertions(+), 9 deletions(-) commit 597eaf5cdc2e47cfbb63a2957dc06d29cbf407fc Author: Benjamin Dauvergne Date: Mon Feb 22 13:30:29 2010 +0000 SAML 2.0: add lasso_saml2_encrypted_element_server_decrypt and lasso_saml2_assertion_decrypt_subject lasso/saml-2.0/saml2_helper.c | 43 +++++++++++++++++++++++++++++++++++++++++++ lasso/saml-2.0/saml2_helper.h | 7 +++++++ 2 files changed, 50 insertions(+) commit 09a546e9cb9e840e22e939124892a6f51bd6e615 Author: Benjamin Dauvergne Date: Mon Feb 22 13:30:28 2010 +0000 Fix idp5-saml2 metadatas * tests/data/idp5-saml2/metadata.xml: we do not have the private key for the encryption public key, so I copied the signing public key. tests/data/idp5-saml2/metadata.xml | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) commit 3c8855eb660da096585cf2fb639a91f0246ba879 Author: Benjamin Dauvergne Date: Mon Feb 22 13:30:23 2010 +0000 Fix lasso_extract_gobject_from_list lasso/utils.c | 11 +++++++++++ lasso/utils.h | 4 ++-- 2 files changed, 13 insertions(+), 2 deletions(-) commit f505a60a8ace9bcdd6af6fcbb12a1b1f66cc03db Author: Mikael Ates Date: Sun Feb 21 12:47:42 2010 +0000 lasso/lasso.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit c51e61a5edad1a6423a5e026c417698d669b10b7 Author: Benjamin Dauvergne Date: Wed Feb 17 16:08:35 2010 +0000 Documentation: add example to LassoLogout, fix bad markup in id-wsf-2.0/profile.c docs/reference/lasso/lasso-sections.txt | 4 +- lasso/id-ff/logout.c | 158 +++++++++++++++++++++++++++++++- lasso/id-wsf-2.0/profile.c | 3 +- 3 files changed, 161 insertions(+), 4 deletions(-) commit 60a0ab874aacabe523325b0e24b54e0027d50d7b Author: Benjamin Dauvergne Date: Wed Feb 17 16:08:33 2010 +0000 ID-WSF 2.0: also check sender match assertion in lasso_idwsf2_profile_check_security_mechanism * lasso/id-wsf-2.0/profile.c: for BEARER mechanism, also check that the SPNameQualifier of the Subject match the Sender of the request. lasso/id-wsf-2.0/profile.c | 10 ++++++++++ 1 file changed, 10 insertions(+) commit 87ecc1c68202de203515cb953ec599efcbe6fc11 Author: Benjamin Dauvergne Date: Wed Feb 17 16:08:32 2010 +0000 ID-WSF 2.0: add lasso_idwsf2_discovery_get_svcmdids to public API lasso/id-wsf-2.0/discovery.h | 1 + 1 file changed, 1 insertion(+) commit d222d52563e6cecf08e22d0d2ae3127d426f8727 Author: Benjamin Dauvergne Date: Wed Feb 17 10:15:35 2010 +0000 Tests integration: force C locale * tests/integration/saml2/__init__.py: authentic now use 'system locale' by default, so force C locale to get english IHM string to make twill happy. tests/integration/saml2/__init__.py | 1 + 1 file changed, 1 insertion(+) commit 53f2a89851331f08b3e3605b2bc3e48b202bb00d Author: Benjamin Dauvergne Date: Wed Feb 17 10:15:33 2010 +0000 SAML 2.0: if assertion possess a signed original_xmlnode return it instead of using get_xmlNode * lasso/xml/saml-2.0/saml2_assertion.c: assertion in lasso when read are not usable anymore because the signature is lost, this commit allows to keep assertion unaltered after reading them if they contained a top level signature (a signature contained in the Assertion node). This is useful for reusing assertion kept in a LassoSession object and for using assertion as security token for ID-WSF. lasso/xml/saml-2.0/saml2_assertion.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) commit 192777bac1984946acee2a1b5d24d4f37392d715 Author: Benjamin Dauvergne Date: Wed Feb 17 10:15:31 2010 +0000 Core: use lasso_xmlnode_to_string in LassoNode export functions * lasso/xml/xml.c: remove duplicate codes and use lasso_xmlnode_to_string instead. lasso/xml/xml.c | 128 +++++++++++++++----------------------------------------- 1 file changed, 33 insertions(+), 95 deletions(-) commit 4a76638aac07dc4c4669b22667fbfd6d3f183110 Author: Benjamin Dauvergne Date: Wed Feb 17 10:15:28 2010 +0000 Current state of ID-WSF 2.0 python test bindings/python/tests/idwsf2_tests.py | 82 ++++++++++++++++++++++++++++++++--- 1 file changed, 76 insertions(+), 6 deletions(-) commit 9e683496c68f64efe5a222e7a39294e15a814d93 Author: Benjamin Dauvergne Date: Wed Feb 17 10:15:26 2010 +0000 Binding php5: fix generation of list freeing * bindings/php5/wrapper_source.py: free_glist wants a GList** as first argument. bindings/php5/wrapper_source.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 5d9e6f550a6813c4ff30e5f77cb49ea717ccc689 Author: Benjamin Dauvergne Date: Wed Feb 17 10:15:24 2010 +0000 Core: add a lasso_xmlnode_to_string function * lasso/xml/tools.c lasso/xml/private.h: lots of functions duplicate this code, so we factorized it there. It has two parameters, the xmlnode and boolean deciding whether to format the resulting content (good for reading but bad for signatures). lasso/xml/private.h | 1 + lasso/xml/tools.c | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) commit d3932515858eeefe645c877cb505a228fef76f12 Author: Benjamin Dauvergne Date: Wed Feb 17 10:15:21 2010 +0000 SAML 2.0: in lasso_saml20_profile_set_session_from_dump_decrypt, really decrypt * lasso/saml-2.0/profile.c: dump for already signed assertion containing an EncryptedID as Subject does not work as before, the decrypted NameID is no more included in it, so instead of trying to plug it in the NameID field we resort to really deciphering the EncryptedID. That could be a performance problem if the session object is stuffed with a lot of assertions. lasso/saml-2.0/profile.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) commit bdac600b56a72a9f62ccccdf598afa1981fedbec Author: Benjamin Dauvergne Date: Wed Feb 17 10:15:19 2010 +0000 Current state of idwsf2 tests bindings/python/tests/idwsf2_tests.py | 103 +++++++++++++++++++--------------- 1 file changed, 59 insertions(+), 44 deletions(-) commit 50063c1e9b1f018e3985d5f7711ac659f68dbd06 Author: Benjamin Dauvergne Date: Wed Feb 17 10:15:16 2010 +0000 ID-WSF 2.0: fix loading of LassoIdWsf2Discovery dumps lasso/id-wsf-2.0/data_service.c | 2 ++ lasso/id-wsf-2.0/discovery.c | 2 +- lasso/id-wsf-2.0/profile.c | 26 ++++++++++++++++++++++---- 3 files changed, 25 insertions(+), 5 deletions(-) commit 62ac1616e44e61996d45685704756a10ae138041 Author: Benjamin Dauvergne Date: Wed Feb 17 10:15:14 2010 +0000 Core: add error exit to lasso_node_new_from_xmlNode * lasso/xml/xml.c: if building of the node fails, we must keep the initialization of custom nodename and namespace. lasso/xml/xml.c | 4 ++++ 1 file changed, 4 insertions(+) commit a803cc710b85cca3baf920011e3ea39397ca117c Author: Benjamin Dauvergne Date: Wed Feb 17 10:15:11 2010 +0000 Binding python: simplify special constructor, use cptrToPy bindings/python/lang.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) commit 7c1bd8f0bab3de9581e406a9995071841c52b652 Author: Benjamin Dauvergne Date: Wed Feb 17 10:15:09 2010 +0000 ID-WSF 2.0: make lasso_idwsf2_profile_redirect_user_for_interaction add the transactionID to the URL * lasso/id-wsf-2.0/profile.c: simplify use of lasso_idwsf2_profile_redirect_user_for_interaction by directly adding the ID of the SOAP response message to the URL. Report an error if no MessageID can be found. lasso/id-wsf-2.0/profile.c | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) commit e64334c4a443b482860f0b3486b157e2c55ce23c Author: Benjamin Dauvergne Date: Wed Feb 17 10:15:07 2010 +0000 ID-WSF 2.0: rewrite and document lasso_soap_envelope_sb2_get_redirect_request_url * lasso/id-wsf-2.0/soap_binding.{c,h}: fix error in conception of lasso_soap_envelope_sb2_get_redirect_request_url, RedirectRequest is part of a SOAP fault not the headers. Explain in the documentation how to use the RedirectRequest URL. Change the return type to a const string. lasso/id-wsf-2.0/soap_binding.c | 32 +++++++++++++++++++++++++------- lasso/id-wsf-2.0/soap_binding.h | 2 +- 2 files changed, 26 insertions(+), 8 deletions(-) commit 38f6a63396bcfc08bb522f1c652c33bbfd95654b Author: Benjamin Dauvergne Date: Wed Feb 17 10:15:05 2010 +0000 ID-WSF 2.0: add a method to retrieve/create a SOAP Fault to SOAP binding module * lasso/id-wsf-2.0/soap_binding.{c,h}: add method lasso_soap_envelope_get_soap_fault which returns/create the first SOAP fault inside the body of the SOAP envelope. lasso/id-wsf-2.0/soap_binding.c | 23 +++++++++++++++++++++++ lasso/id-wsf-2.0/soap_binding.h | 3 +++ 2 files changed, 26 insertions(+) commit 1c8fb8a3edb524c977e5b2dc63e61983e8c23f04 Author: Benjamin Dauvergne Date: Wed Feb 17 10:15:03 2010 +0000 Binding python tests: adapt test to use TOP_SRCDIR env var bindings/python/tests/binding_tests.py | 4 ++-- bindings/python/tests/profiles_tests.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) commit 9709ec43424e2634909bec40043f096391ca3ca2 Author: Benjamin Dauvergne Date: Wed Feb 17 10:15:01 2010 +0000 Binding python: factorize value freeing generation code * lasso/python/lang.py: extract value freeing generation code to method free_value, add proper liberation of values at exit of wrapper functions, remove g_free call from return_value generated code. bindings/python/lang.py | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) commit 95f5d99be610ed5f26ad9321718a97e887fb72b2 Author: Benjamin Dauvergne Date: Wed Feb 17 10:14:59 2010 +0000 Core: add missing return value owner semantic annotations to getters * lasso/id-ff/provider.c: fix lasso_provider_get_base64_succinct_id, it returned a libxml string, copy it with g_strdup before releasing it to stay with GLib allocated string in return values. lasso/id-ff/logout.c | 2 +- lasso/id-ff/profile.c | 31 ++++++++++++++++++++++++++++++- lasso/id-ff/profile.h | 2 +- lasso/id-ff/provider.c | 33 +++++++++++++++++++++++---------- lasso/id-ff/server.c | 4 ++-- lasso/id-ff/session.c | 10 +++++----- lasso/id-wsf-2.0/data_service.c | 24 ++++++++++++++++++++---- lasso/id-wsf-2.0/discovery.c | 9 ++++++--- lasso/id-wsf-2.0/profile.c | 2 +- lasso/id-wsf-2.0/server.c | 4 ++-- lasso/id-wsf/data_service.c | 12 +++++++----- lasso/id-wsf/discovery.c | 4 ++-- lasso/id-wsf/id_ff_extensions.c | 6 +++--- lasso/id-wsf/wsf_profile.c | 20 ++++++++++---------- 14 files changed, 113 insertions(+), 50 deletions(-) commit 58fa7178e43a32d493015cd15a1dd29bcbdc49c0 Author: Benjamin Dauvergne Date: Wed Feb 17 10:14:56 2010 +0000 Core: add annotation to getter function about return value owner semantic * lasso/id-ff/identity.c lasso/id-ff/profile.c: precise owner semantic of lasso_profile_get_identity, lasso_profile_get_session, lasso_profile_get_server * lasso/id-wsf-2.0/saml2_login.c tests/login_tests_saml2.c: in the same vein add missing release of assertion returned by lasso_login_get_assertion which return a caller owned object. lasso/id-ff/identity.c | 2 +- lasso/id-ff/profile.c | 8 ++++---- lasso/id-wsf-2.0/saml2_login.c | 2 ++ 3 files changed, 7 insertions(+), 5 deletions(-) commit 6ca10e383dd7dba708f1784acf42e78bd5990db2 Author: Benjamin Dauvergne Date: Wed Feb 17 10:14:55 2010 +0000 ID-WSF 2.0: make lasso_idwsf2_profile_redirect_user_for_interaction choke on missing redirect property on UserInteraction header * lasso/id-wsf-2.0/profile.c: if redirect boolean property is false, refuse to return a redirect request. automatically create a SOAP fault to signal to the requester that it needs to support interaction via redirect. lasso/id-wsf-2.0/profile.c | 54 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 47 insertions(+), 7 deletions(-) commit 00125b59a279b741da950e28cea85f489839fd83 Author: Benjamin Dauvergne Date: Wed Feb 17 10:14:53 2010 +0000 ID-WSF 2.0: add error code signaling that the requester does not support redirect request * lasso/errors.c lasso/errors.h: add LASSO_WSF_PROFILE_ERROR_REDIRECT_REQUEST_UNSUPPORTED_BY_REQUESTER. lasso/errors.c | 4 +++- lasso/errors.h | 7 +++++++ 2 files changed, 10 insertions(+), 1 deletion(-) commit d492606a0f7999aa572ec0598f7afe9390c68b24 Author: Benjamin Dauvergne Date: Wed Feb 17 10:14:51 2010 +0000 ID-WSF 2.0: add a create arg to lasso_soap_envelope_get_sb2_user_interaction_header, add it to public API lasso/id-wsf-2.0/soap_binding.c | 21 +++++++-------------- lasso/id-wsf-2.0/soap_binding.h | 5 +++++ 2 files changed, 12 insertions(+), 14 deletions(-) commit a1d657793417ce57511531d83dabaa78dd8c3249 Author: Benjamin Dauvergne Date: Wed Feb 17 10:14:50 2010 +0000 ID-WSF 2.0: fix lots of bad usage of g_strcmp0 * lasso/id-wsf-2.0/idwsf2_helper.c lasso/id-wsf-2.0/soap_binding.c lasso/id-wsf/data_service.: add missing check for the return value of strcmp, maybe we need a macro like lasso_strequal. lasso/id-wsf-2.0/idwsf2_helper.c | 2 +- lasso/id-wsf-2.0/soap_binding.c | 6 +++--- lasso/id-wsf/data_service.c | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) commit 174856fade2b9e478bd1197f9bf770015aba9b86 Author: Benjamin Dauvergne Date: Wed Feb 17 10:14:48 2010 +0000 Tests: in login_tests_saml2.c, add test for lasso_saml2_assertion_validate_conditions tests/login_tests_saml2.c | 10 ++++++++++ 1 file changed, 10 insertions(+) commit b0a3c22d39da3f62f6b036d9ab7921de409c7f3c Author: Benjamin Dauvergne Date: Wed Feb 17 10:14:47 2010 +0000 in idwsf2_tests.py, merge test case for metadata registering, add test case for failure bindings/python/tests/idwsf2_tests.py | 322 +++++++++++++++++++--------------- 1 file changed, 178 insertions(+), 144 deletions(-) commit 0ff8c53f447cf66affe6021154a592e34a961aca Author: Benjamin Dauvergne Date: Wed Feb 17 10:14:45 2010 +0000 Bindings: parse defines refering to other defines * bindings/bindings.py: Allow to build constants using other constants (prefix string), the constant type is retrieved from the prefix existing record. bindings/bindings.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) commit 39d444447592239b892c04360bbf0b3960c49802 Author: Benjamin Dauvergne Date: Wed Feb 17 10:14:44 2010 +0000 in tools.c, add defines to permit import of timegm lasso/xml/tools.c | 3 +++ 1 file changed, 3 insertions(+) commit 017ebd33f9db4042c0618c47a929a50337129aba Author: Benjamin Dauvergne Date: Wed Feb 17 10:14:43 2010 +0000 SAML 2.0: make lasso_saml2_assertion_validate_conditions really work lasso/saml-2.0/saml2_helper.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit b13ddc086bb610f537805a5628d89f0d6b72742c Author: Benjamin Dauvergne Date: Wed Feb 17 10:14:41 2010 +0000 Core: fix lasso_iso_8601_gmt_to_time_t, use timegm instead of mktime * lasso/xml/tools.c: mktime convert works on local time, we need timegm to work with GMT time. lasso/xml/tools.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 685a82b7af82bf0129b19fb952d913c741bf669a Author: Benjamin Dauvergne Date: Wed Feb 17 10:14:39 2010 +0000 ID-WSF 2.0: add strings for Discovery service Actions lasso/id-ff/profile.c | 2 +- lasso/id-wsf-2.0/idwsf2_helper.c | 4 +- lasso/id-wsf-2.0/saml2_login.c | 2 +- lasso/xml/id-wsf-2.0/disco_abstract.c | 2 +- lasso/xml/id-wsf-2.0/disco_endpoint_context.c | 2 +- lasso/xml/id-wsf-2.0/disco_keys.c | 2 +- lasso/xml/id-wsf-2.0/disco_options.c | 2 +- lasso/xml/id-wsf-2.0/disco_provider_id.c | 2 +- lasso/xml/id-wsf-2.0/disco_query.c | 2 +- lasso/xml/id-wsf-2.0/disco_query_response.c | 2 +- lasso/xml/id-wsf-2.0/disco_requested_service.c | 2 +- lasso/xml/id-wsf-2.0/disco_security_context.c | 2 +- lasso/xml/id-wsf-2.0/disco_service_context.c | 2 +- lasso/xml/id-wsf-2.0/disco_service_type.c | 2 +- .../xml/id-wsf-2.0/disco_svc_md_association_add.c | 2 +- .../disco_svc_md_association_add_response.c | 2 +- .../id-wsf-2.0/disco_svc_md_association_delete.c | 2 +- .../disco_svc_md_association_delete_response.c | 2 +- .../id-wsf-2.0/disco_svc_md_association_query.c | 2 +- .../disco_svc_md_association_query_response.c | 2 +- lasso/xml/id-wsf-2.0/disco_svc_md_delete.c | 2 +- .../xml/id-wsf-2.0/disco_svc_md_delete_response.c | 2 +- lasso/xml/id-wsf-2.0/disco_svc_md_query.c | 2 +- lasso/xml/id-wsf-2.0/disco_svc_md_query_response.c | 2 +- lasso/xml/id-wsf-2.0/disco_svc_md_register.c | 2 +- .../id-wsf-2.0/disco_svc_md_register_response.c | 2 +- lasso/xml/id-wsf-2.0/disco_svc_md_replace.c | 2 +- .../xml/id-wsf-2.0/disco_svc_md_replace_response.c | 2 +- lasso/xml/id-wsf-2.0/disco_svc_metadata.c | 2 +- lasso/xml/id-wsf-2.0/idwsf2_strings.h | 47 ++++++++++++---------- lasso/xml/xml.c | 2 +- 31 files changed, 57 insertions(+), 52 deletions(-) commit f8558c090c863e9e5ac6e58997ec6faa26f81707 Author: Benjamin Dauvergne Date: Wed Feb 17 10:14:36 2010 +0000 ID-WSF 2.0: add serialization code for private properties of LassoIdWsf2Profile lasso/id-wsf-2.0/discovery.c | 99 +++++++++++++++++++++++++++++++++++++++++++- lasso/id-wsf-2.0/profile.c | 94 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 192 insertions(+), 1 deletion(-) commit 953eed0009f7b3fb89d3a74e925d40f0380b5ff3 Author: Benjamin Dauvergne Date: Wed Feb 17 10:14:35 2010 +0000 ID-WSF 2.0: fix missing initialization of request field in lasso_idwsf2_discovery_validate_md_register lasso/id-wsf-2.0/discovery.c | 2 ++ 1 file changed, 2 insertions(+) commit 2224370d82d3d50ce348740837af6212cff74bc8 Author: Benjamin Dauvergne Date: Wed Feb 17 10:14:34 2010 +0000 ID-WSF 2.0 Documentation: update lasso-sections.txt with LassoIdWsf2Profile methods docs/reference/lasso/lasso-sections.txt | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) commit 7e43a5b53c13c89de565bfbdffe2f39dd2282d01 Author: Benjamin Dauvergne Date: Wed Feb 17 10:14:32 2010 +0000 ID-WSF 2.0: fix lasso_idwsf2_discovery_add_simple_service_metadata * lasso/id-wsf-2.0/discovery.c: options is a string list, and security_mech_ids too, so employ the corresponding macros. lasso/id-wsf-2.0/discovery.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 6aee19641031f3e2e7c61a761d092e2e3939d665 Author: Benjamin Dauvergne Date: Wed Feb 17 10:14:31 2010 +0000 Core: in utils.h, use a temporary to store reference to freed list lasso/utils.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) commit cef121fa5f01576bfc801a84bfac055fd74b7859 Author: Benjamin Dauvergne Date: Wed Feb 17 10:14:30 2010 +0000 ID-WSF 2.0: in lasso_idwsf2_discovery_status2rc, check second level status code too lasso/id-wsf-2.0/discovery.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) commit d642712875f09edec3acfad4d17024a130ea6a06 Author: Benjamin Dauvergne Date: Wed Feb 17 10:14:27 2010 +0000 Website: add a link to the developement version documentation website/web/documentation/index.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 8fe484f90303daf5a2cd4a34962a10367e7bfd31 Author: Benjamin Dauvergne Date: Mon Feb 15 10:37:51 2010 +0000 Binding python: fix leak in string getters bindings/python/lang.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 95f3c0625f5fe2c4f0c88e6309eb109325996a9c Author: Benjamin Dauvergne Date: Mon Feb 15 10:37:50 2010 +0000 SAML 2.0: fix documentation of lasso_saml2_assertion_validate_conditions lasso/saml-2.0/saml2_helper.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 19e14481e7b966aee60f6fd209b633b206b625b7 Author: Benjamin Dauvergne Date: Mon Feb 15 10:37:49 2010 +0000 Add signature on EPR secur token lasso/id-wsf-2.0/discovery.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 02a889ae8fcfab0f2ced6164de44d400adfa9664 Author: Benjamin Dauvergne Date: Mon Feb 15 10:37:48 2010 +0000 Bindings python: udpate id-wsf 2.0 test file * bindings/python/tests/idwsf2_tests.py: Disco Service registering is working, it now needs a bootstrap epr in all case (before registering could be done without signatures). bindings/python/tests/idwsf2_tests.py | 227 ++++++++++++++++------------------ 1 file changed, 105 insertions(+), 122 deletions(-) commit be8312b0831306831748d961ffe87cd45186af63 Author: Benjamin Dauvergne Date: Mon Feb 15 10:37:46 2010 +0000 ID-WSF 2.0: add signature to Disco produced EPR SAML 2.0 security tokens lasso/id-wsf-2.0/discovery.c | 1 + 1 file changed, 1 insertion(+) commit 9e558d4ff74324f2667185b4dd421352ff5dfa93 Author: Benjamin Dauvergne Date: Mon Feb 15 10:37:45 2010 +0000 ID-WSF 2.0: in lasso_idwsf2_profile_build_request_msg, properly handle the security token * lasso/id-wsf-2.0/profile.c: security token is a signed assertion by an IdP or a discovery service, we must keep as is, that is with the signature, in order to do that we extract the original xmlNode from the assertion and embed it in the new message using a LassoMiscTextNode. lasso/id-wsf-2.0/profile.c | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) commit 293616bcbeda5a1bf693f7b77a211229482a5f6e Author: Benjamin Dauvergne Date: Mon Feb 15 10:37:44 2010 +0000 ID-WSF 2.0: in lasso_login_idwsf2_get_discovery_bootstrap_epr, better handle attribute content * lasso/id-wsf-2.0/saml2_login.c: LassoSaml2AttributeValue can contain many children, so traverse them all to find the firs LassoWsAddrEndpointReference among them. lasso/id-wsf-2.0/saml2_login.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) commit 3791c7d2ae0def0b758bb88835e3c49c078297f2 Author: Benjamin Dauvergne Date: Mon Feb 15 10:37:43 2010 +0000 ID-WSF 2.0: in lasso_login_idwsf2_add_discovery_bootstrap_epr, initialize ID and Issuer property on bootstrap assertion. * lasso/id-wsf-2.0/saml2_login.c: initialization of ID and Issuer properties was missing. lasso/id-wsf-2.0/saml2_login.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) commit 7041018303beb78b570e4b920349a159d04af596 Author: Benjamin Dauvergne Date: Mon Feb 15 10:37:42 2010 +0000 Core: in lasso_verify_signature, fix conditional about single reference * lasso/xml/toosl.c: verify that reference is unique if NO_SINGLE_REFERENCE is disabled. lasso/xml/tools.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 78df73e12884adb815529cdbcb7e35766de3651a Author: Benjamin Dauvergne Date: Mon Feb 15 10:37:41 2010 +0000 SAML 2.0: in saml2_helper.c, better check issuer element and also test the LassoServer object for issuance, lasso_saml2_assertion_get_issuer_provider lasso/saml-2.0/saml2_helper.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit c9b11bf04087b598b7f28cf878ee7453de15a530 Author: Benjamin Dauvergne Date: Mon Feb 15 10:37:40 2010 +0000 ID-WSF 2.0: in lasso_wsa_endpoint_reference_new_for_idwsf2_service, do not forget to add metadata to epr, fill usage property of token * lasso/id-wsf-2.0/idwsf2_helper.c: add missing initialization code. lasso/id-wsf-2.0/idwsf2_helper.c | 2 ++ 1 file changed, 2 insertions(+) commit f654540ae25061d20f5cbea6a4dd1d53487832ec Author: Benjamin Dauvergne Date: Mon Feb 15 10:37:39 2010 +0000 ID-WSF 2.0: fix bad type checking in lasso_wsa_endpoint_reference_get_idwsf2_security_context_for_security_mechanism * lasso/id-wsf-2.0/idwsf2_helper.c: SecurityMechID is a list of strings not LassoMiscTextNode. lasso/id-wsf-2.0/idwsf2_helper.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) commit bf323d00118a9e7284fec268de4da6de6c84291c Author: Benjamin Dauvergne Date: Mon Feb 15 10:37:38 2010 +0000 ID-WSF 2.0: fix bad conditionnal in lasso_idwsf2_discovery_process_metadata_register_response_msg * lasso/id-wsf-2.0/discovery.c: fix check in lasso_idwsf2_discovery_process_metadata_register_response_msg fix duplication of service metadatas inside private list of service metadatas. lasso/id-wsf-2.0/discovery.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit b4c6e69ee1cf5627b10053ca42ecbf301b23b00c Author: Benjamin Dauvergne Date: Mon Feb 15 10:37:36 2010 +0000 in server.c, fix missing loading of public keys in constructors * lasso/id-ff/server.c: constructor for LassoProvider load public keys but they are not called by LassoServer constructors, so we have to explicitely duplicate calls to lasso_provider_load_public_keys. lasso/id-ff/server.c | 4 ++++ 1 file changed, 4 insertions(+) commit b36312a8b958aeeb89f78011c7dfe26ba2482a4a Author: Benjamin Dauvergne Date: Mon Feb 15 10:37:34 2010 +0000 ID-WSF 2.0: moved strings to their own header lasso/xml/id-wsf-2.0/Makefile.am | 3 +- lasso/xml/id-wsf-2.0/idwsf2_strings.h | 934 ++++++++++++++++++++++++++++++++++ lasso/xml/idwsf_strings.h | 860 +------------------------------ 3 files changed, 938 insertions(+), 859 deletions(-) commit ab9e4874ef56d131bf1d8131934bf6f770e39222 Author: Benjamin Dauvergne Date: Fri Feb 12 11:04:38 2010 +0000 Add saml2_strings.h to dist lasso/xml/saml-2.0/Makefile.am | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 63a210a5076270530989c8fbadfc0239813fd320 Author: Benjamin Dauvergne Date: Fri Feb 12 09:48:24 2010 +0000 Bindings python: remove default argument if there is parameters without default argument following bindings/python/lang.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) commit 686951e381674852eeb825fa6b60ece37b850672 Author: Benjamin Dauvergne Date: Fri Feb 12 09:48:23 2010 +0000 Use defined symbols instead of magic constants lasso/xml/xml.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 2f15b4431d442cb815d681c37c4a2c9a6e3cec3a Author: Benjamin Dauvergne Date: Fri Feb 12 09:48:22 2010 +0000 Add LASSO_SAML2_FIELD_ENCODING * lasso/xml/saml-2.0/saml2_strings.h: add another field name from SAML 2.0 specifications. lasso/xml/saml-2.0/saml2_strings.h | 1 + 1 file changed, 1 insertion(+) commit dad75ee5f1d6cf1d9f767c027a5bb3841c6eed64 Author: Benjamin Dauvergne Date: Fri Feb 12 09:48:20 2010 +0000 Fix lasso_get_relaystate_from_query, support semi-colon and parameter at beginning * lasso/xml/tools.c: getting first parameter was broken (query_string does not contain '?' at the beginning) and semi-colon support was missing. lasso/xml/tools.c | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) commit e48619174bdbf438b4b8dfdac43a18e99b5c70b3 Author: Benjamin Dauvergne Date: Wed Feb 10 17:07:05 2010 +0000 Documentation: fix typos in saml2_strings.h documentation, add new string symbols to lasso-sections.txt docs/reference/lasso/lasso-sections.txt | 29 ++++++++++++++++++++++++++++- lasso/xml/saml-2.0/saml2_strings.h | 20 ++++++++++---------- 2 files changed, 38 insertions(+), 11 deletions(-) commit 2b15a5a97fe46867308ded90f2a70c376bb50e04 Author: Benjamin Dauvergne Date: Wed Feb 10 16:00:34 2010 +0000 SAML 2.0: move SAML 2.0 strings to their own header, add documentation * lasso/xml/strings.h: remove SAML 2.0 strings * lasso/xml/saml-2.0/saml2_strings.h: move them here, document useful ones. lasso/xml/saml-2.0/saml2_strings.h | 403 +++++++++++++++++++++++++++++++++++++ lasso/xml/strings.h | 202 +------------------ 2 files changed, 406 insertions(+), 199 deletions(-) commit 30f3a778b4adedb05c1361afe28349e0d09df416 Author: Benjamin Dauvergne Date: Wed Feb 10 13:58:42 2010 +0000 Documentation: document LsasoSamlp2NameIDPolicy lasso/xml/saml-2.0/samlp2_name_id_policy.h | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) commit 6b601b55ee99bd54ef6a0ff59cdea781ee83d72f Author: Benjamin Dauvergne Date: Wed Feb 10 13:58:40 2010 +0000 Documentation: complete non finished documentation comments * too much warnings when generating doc, now we can concentrate on undocumented symbols (in lasso/docs/reference/lasso/lasso-undocumented.txt). lasso/errors.h | 5 +++++ lasso/id-wsf/id_ff_extensions.c | 24 ++++++++++++---------- lasso/id-wsf/wsf_profile.c | 15 ++++++++------ lasso/lasso.c | 19 ++++++++--------- lasso/saml-2.0/saml2_helper.h | 24 ++++++++++++++++++++-- lasso/xml/id-wsf-2.0/disco_abstract.c | 4 ++-- lasso/xml/id-wsf-2.0/disco_provider_id.c | 4 ++-- lasso/xml/id-wsf-2.0/disco_service_type.c | 4 ++-- lasso/xml/lib_assertion.c | 15 +++++++------- lasso/xml/lib_authentication_statement.c | 18 ++++++++-------- .../xml/lib_federation_termination_notification.c | 4 ++-- lasso/xml/lib_logout_request.c | 4 ++-- lasso/xml/lib_logout_response.c | 8 ++++---- lasso/xml/lib_name_identifier_mapping_request.c | 13 ++++++------ lasso/xml/lib_name_identifier_mapping_response.c | 10 ++++----- lasso/xml/lib_register_name_identifier_request.c | 13 ++++++------ lasso/xml/lib_register_name_identifier_response.c | 10 ++++----- lasso/xml/strings.h | 7 ++++++- lasso/xml/tools.c | 2 +- lasso/xml/ws/wsa_attributed_qname.c | 4 ++-- lasso/xml/ws/wsa_attributed_uri.c | 4 ++-- lasso/xml/ws/wsa_relates_to.c | 4 ++-- lasso/xml/ws/wsse_username_token.c | 1 + 23 files changed, 127 insertions(+), 89 deletions(-) commit 2a9c9e11b0e407ac94968b7125c09ccbb7fc3823 Author: Benjamin Dauvergne Date: Wed Feb 10 00:59:30 2010 +0000 Bindings perl: prevent unused functio warning for array_to_glist_gobject bindings/perl/glist_handling.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit b008ca69254c1fb1b4c3cab8f98ec96038d92931 Author: Benjamin Dauvergne Date: Wed Feb 10 00:59:29 2010 +0000 Tests perl: raise number of tests bindings/perl/t/Lasso.t | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit db940c119a3096ed0386dd13809405c9046f10af Author: Benjamin Dauvergne Date: Wed Feb 10 00:35:03 2010 +0000 Docs: reorder sections in chapter "Lasso Architecture" docs/reference/lasso/lasso-docs.sgml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit a93d3e5f5cf556436404c91e5525a3b82f0835ad Author: Benjamin Dauvergne Date: Wed Feb 10 00:34:59 2010 +0000 SAML 2.0: separate lasso_saml20_login_process_response_status_and_assertion into multiple functions * lasso/saml-2.0/login.c: in lasso_saml20_login_process_response_status_and_assertion, extract assertion decryption, and issuer checking into their own function. lasso/saml-2.0/login.c | 175 ++++++++++++++++++++++++++++--------------------- 1 file changed, 100 insertions(+), 75 deletions(-) commit f648941f018cbbaa9f3bd095f1bbf1ef63f5c8b6 Author: Benjamin Dauvergne Date: Wed Feb 10 00:34:55 2010 +0000 SAML 2.0: when verifying query signature, do not presume order of field and separator * lasso/xml/tools.c: in lasso_saml2_verify_query_signature, extract needed field and order them appropriately before computing digest, expect ';' as well as '&' as separator. * tests/random_test.c: add non-regression tests for query signature validation. * tests/Makefile.am: make tests link agains static version of liblasso, to get access to private functions. lasso/xml/tools.c | 109 ++++++++++++++++++++++++++++++++++++--------------- tests/Makefile.am | 2 +- tests/random_tests.c | 48 +++++++++++++++++++++++ 3 files changed, 126 insertions(+), 33 deletions(-) commit d1fdad1d6a9c50436812b7149426d5046d63c3c0 Author: Benjamin Dauvergne Date: Wed Feb 10 00:34:51 2010 +0000 SAML 2.0: complete list of field names for SAML 2.0 lasso/xml/strings.h | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) commit f176cde7832c53ab23db12a231d17da0b1a80fbc Author: Benjamin Dauvergne Date: Wed Feb 10 00:34:47 2010 +0000 Core: in tools.c, enhance urlencoded_to_string to support semu-colon separator lasso/xml/tools.c | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) commit 60b5029e03cef1867bf21c21e0be10bd308e97b8 Author: Benjamin Dauvergne Date: Wed Feb 10 00:34:43 2010 +0000 SAML 2.0: add helper method lasso_saml2_assertion_get_in_response_to * lasso/saml-2.0/saml2_helper.c lasso/saml-2.0/saml2_helper.h: add a method to access easily the InResponseTo attribute. lasso/saml-2.0/saml2_helper.c | 19 +++++++++++++++++++ lasso/saml-2.0/saml2_helper.h | 2 ++ 2 files changed, 21 insertions(+) commit b758c1c58c357690a8fc7145d782362b2b42d233 Author: Benjamin Dauvergne Date: Wed Feb 10 00:34:39 2010 +0000 SAML 2.0: in lasso_saml20_login_process_authn_response_msg always report signatures errors * lasso/saml-2.0/login.c: - in lasso_saml20_login_process_authn_response_msg keep around all error codes returned by intermediary steps. At the end report the first one. lasso/saml-2.0/login.c | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) commit ee77424f543990ea80dc7e794d6d2cb8c9925f59 Author: Benjamin Dauvergne Date: Wed Feb 10 00:34:35 2010 +0000 SAML 2.0: in lasso_saml20_profile_process_any_response do not stop on missing issuer * lasso/saml-2.0/profile.c: Issuer is not a mandatory element of SAML 2.0 response, but if we do not remember which issuer we sent the request (of if the response is spontaneous) then we will receive a provider not found error when trying to check the message signature. lasso/saml-2.0/profile.c | 40 +++++++++++++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 9 deletions(-) commit 8c26e2ba8c396ab2f2cb2637a3e63d495519379e Author: Benjamin Dauvergne Date: Wed Feb 10 00:34:29 2010 +0000 Use new SAML2 strings instead of hardcoding query string field names lasso/saml-2.0/profile.c | 9 +++++---- lasso/xml/saml-2.0/samlp2_request_abstract.c | 2 +- lasso/xml/saml-2.0/samlp2_status_response.c | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) commit 90f680a8396372e57320ead824772c90d27fb55b Author: Benjamin Dauvergne Date: Wed Feb 10 00:34:23 2010 +0000 Add documentation about runtime flags * lasso/lasso.c: add a table to Initialization documentation section about general runtime flags. lasso/lasso.c | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) commit d9fa683219f11fecc3ebc55b62703c7176013e3e Author: Benjamin Dauvergne Date: Wed Feb 10 00:34:19 2010 +0000 Remove follow-idwsf-stupid-semantic flag * lasso/lasso.c: this flag is useless, that's me that is stupid. lasso/lasso.c | 10 ---------- 1 file changed, 10 deletions(-) commit 1da63271d99a1993c13a3ccbdc22db8b952ecc9d Author: Benjamin Dauvergne Date: Wed Feb 10 00:34:14 2010 +0000 Add internal methods to LassoServer to get the signature and encryption private keys * lasso/id-ff/server.c lasso/id-ff/serverprivate.h: add methods lasso_server_get_private_key and lasso_server_get_encryption_private_key. lasso/id-ff/server.c | 35 +++++++++++++++++++++++++++++++++++ lasso/id-ff/serverprivate.h | 2 ++ 2 files changed, 37 insertions(+) commit 59246ba028a9d3d97887fe3ce71d94212f59f358 Author: Benjamin Dauvergne Date: Wed Feb 10 00:34:09 2010 +0000 Add complete error code listing for lasso_login_process_response_msg * lasso/id-ff/login.c: list all error codes and their semantic with respect to this call. lasso/id-ff/login.c | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) commit f2b5731eb54e3ae944ad1f5a63d076239ec3f7b3 Author: Benjamin Dauvergne Date: Wed Feb 10 00:34:04 2010 +0000 Update code example for LassoLogin * lasso/id-ff/login.c: add code for intializaing request for SAML 2.0, shows how to handler errors codes. lasso/id-ff/login.c | 92 +++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 78 insertions(+), 14 deletions(-) commit c5d5b248f2560bf281ec9217c1e9622edf7c4b7b Author: Benjamin Dauvergne Date: Wed Feb 10 00:34:00 2010 +0000 Add error codes, update error codes documentation, reduce changes in errors.c by ordering error codes * lasso/errors.h lasso/errors.c - add to report non schema conforming XML trees, decyrption failure due to missing private keys and invalid signatures on assertions. - update documentation of LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND, LASSO_SERVER_ERROR_ADD_PROVIDER_PROTOCOL_MISMATCH, * lasso/build_strerror.py: before outputting switch cases, order error codes name lexically in order to reduce change lines when adding new error codes. lasso/Makefile.am | 2 +- lasso/build_strerror.py | 4 +- lasso/errors.c | 542 ++++++++++++++++++++++++------------------------ lasso/errors.h | 27 ++- 4 files changed, 303 insertions(+), 272 deletions(-) commit c9bf68c8c743959803bdcc14532b4461a8523340 Author: Benjamin Dauvergne Date: Wed Feb 10 00:33:56 2010 +0000 Add strings for SAML2 field names for POST, Redirect and Artifact bindings lasso/xml/strings.h | 5 +++++ 1 file changed, 5 insertions(+) commit fa87fd5b27da1a4028806abb5a9fa46a1e0d3348 Author: Benjamin Dauvergne Date: Wed Feb 10 00:33:53 2010 +0000 Update documentation of the registry module lasso/registry.c | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) commit 0119b91e56e9cb26ea053be91c1e6e1fb808b05e Author: Benjamin Dauvergne Date: Wed Feb 10 00:33:49 2010 +0000 Adapt LassoProvider methods to care for protocol profile version when verifying signature * lasso/id-ff/provider.c: there is now 2 methods to verify signatures, methods calling the old one must now choose whether to call the liberty one of the SAML 2.0 one. lasso/id-ff/provider.c | 38 +++++++++++++++++++++++++++++++------- 1 file changed, 31 insertions(+), 7 deletions(-) commit 72dc2ff63d72e2db7d94034331b4f1ba280fad1c Author: Benjamin Dauvergne Date: Wed Feb 10 00:33:45 2010 +0000 Add a function to validate query signatures using SAML 2.0 semantic * lasso/xml/tools.c: this new function is a placeholder for the new SAML 2.0 semantic following query signature validation function. It will start with the old code of lasso_query_verify_signature. lasso/xml/private.h | 2 + lasso/xml/tools.c | 119 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 121 insertions(+) commit c74224c5c9264ac6f703e26416a43a4034cd5d04 Author: Benjamin Dauvergne Date: Wed Feb 10 00:33:40 2010 +0000 Propagate change of name for LASSO_PP_ defines docs/reference/lasso/lasso-sections.txt | 4 ++-- tests/basic_tests.c | 16 ++++++++-------- 2 files changed, 10 insertions(+), 10 deletions(-) commit b564a3b618bf09b9483b389c41e7104706fc5c89 Author: Benjamin Dauvergne Date: Mon Feb 8 09:34:11 2010 +0000 Core: in LassoServer constructors, test if private_key is loadable * lasso/id-ff/server.c: mark private_key as not mandatory as regression tests expect it to not be mandatory. test if loading of private key to encryption_private_key private field worked, if not abort the constructor and return NULL. * lasso/id-ff/server.h: fix name of constructors argument to corresponds with comments (binding generator use this correspondance to apply annotation from comments to the model obtained by parsing the headers). lasso/id-ff/server.c | 36 ++++++++++++++++++++++++------------ lasso/id-ff/server.h | 4 ++-- 2 files changed, 26 insertions(+), 14 deletions(-) commit 2800779b4cf3bb7b312c10419f59d4486dc860e5 Author: Benjamin Dauvergne Date: Mon Feb 8 09:34:08 2010 +0000 in lasso_xmlsec_load_private_key_from_buffer, do not let xmlSecBase64Decode show warnings lasso/xml/tools.c | 2 ++ 1 file changed, 2 insertions(+) commit fd3f9f22773b72456cf71ba1029f886b680a6cd7 Author: Benjamin Dauvergne Date: Fri Feb 5 00:44:52 2010 +0000 fix bad operation in bindings.py bindings/bindings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 7808c4cffaa5ae606186149d9434380b52e89e7c Author: Benjamin Dauvergne Date: Thu Feb 4 22:24:06 2010 +0000 Bindings: restore ID-WSF constants, improve python getters, * bindings/bindings.py: parse idwsf_strings.h to get ID-WSF constants. * bindings/utils.py: add an is_rc check function, to check for 'error code' return type. * bindings/perl/lang.py: only raise errors for 'int' or 'gint' return type * bindings/python/lang.py: - always create a normal function binding. - for functions starting with 'get' try to create a corresponding property, but if a corresponding member already exists, fails, and print a warning about getter function/member field clash. - make type dispatching on return_type more explicite. bindings/bindings.py | 31 ++++++++--- bindings/perl/lang.py | 2 +- bindings/python/lang.py | 142 +++++++++++++++++++++--------------------------- bindings/utils.py | 3 + 4 files changed, 89 insertions(+), 89 deletions(-) commit e6a07df2bc362d57a422216a4af834d980b1b2d7 Author: Benjamin Dauvergne Date: Thu Feb 4 22:24:04 2010 +0000 Core: Finish support for all XMLDsig key formats * lasso/xml/tools.c: xmlsec is not able to load a certificate public key without checking it against trusted root certificate, so we must work around and load the key by hand. lasso_xmlsec_load_private_key_from_buffer is made more robust in the same (loading of the key was extracted inside _lasso_xmlsec_load_key_from_buffer) and now can load certificates and keys directly embedded inside KeyValue nodes (in total opposition to the XMLDsig specification but...), with or without PEM headers. * tests/metadata/Makefile.am tests/metadata/metadata_06.xml tests/metadata_tests.c: add test case for RSAKeyValue public keys. lasso/xml/tools.c | 119 +++++++++++++++++++++++++++-------------- tests/metadata/Makefile.am | 3 +- tests/metadata/metadata_06.xml | 23 ++++++++ tests/metadata_tests.c | 13 +++++ 4 files changed, 116 insertions(+), 42 deletions(-) commit 38ef0a86d9075f75ae735409d7b59da2da93490d Author: Benjamin Dauvergne Date: Thu Feb 4 01:23:45 2010 +0000 Binding python: fix getter for non-object fields * bindings/python/lang.py: transition to bindings/utils.py methods broke getters. bindings/python/lang.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) commit 2a3ada925ca754dda62e10917fab30e1d9106226 Author: Benjamin Dauvergne Date: Thu Feb 4 01:23:43 2010 +0000 Core: in lasso_xmlsec_load_key_info add flag to let xmlSec load certificates * lasso/xml/tools.c: adding the flag XMLSEC_KEYINFO_FLAGS_X509DATA_DONT_VERIFY_CERTS make xmlSec able to load certificate, the 'hand made' code to load certificate is then useless. lasso/xml/tools.c | 1 + 1 file changed, 1 insertion(+) commit 36c7b41fbd2381eb531290207512e6dede2d8dd9 Author: Benjamin Dauvergne Date: Thu Feb 4 00:02:26 2010 +0000 Tests: add more checking to dump generation code in login_tests.c tests/login_tests.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) commit 0a8f09f96784911d67f1c5a2c3d922308928fe0d Author: Benjamin Dauvergne Date: Thu Feb 4 00:02:24 2010 +0000 Tests: adapt server constructor settings to recent changes tests/random_tests.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) commit 3bf8b2a44fb7c46182f8e075ab0131a74fa86053 Author: Benjamin Dauvergne Date: Thu Feb 4 00:02:24 2010 +0000 Core: in lasso_profile_get_request_type_from_soap_msg use lasso_xml_parse_memory_with_error * lasso/id-ff/profile.c: (lasso_profile_get_request_type_from_soap_msg) use lasso_xml_parse_memory_with_error instead of xmlParseMemory, use error code output argument to log error reports. lasso/id-ff/profile.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) commit 8e1398e65cc14f6e73212f28b6d677ba56ce2086 Author: Benjamin Dauvergne Date: Thu Feb 4 00:02:22 2010 +0000 Core: in provider.c, make lasso_provider_load_metadata_from_buffer the main metadata loading function * (init_from_xml) fail initialization if we cannot load the metadatas, and log a warning. * extract _lasso_provider_load_metadata_from_buffer from lasso_provider_load_metadata_from_buffer, which accept a length parameter. use it inside lasso_provider_load_metadata, instead of xmlParseFile. * (lasso_provider_load_public_key) use lasso_xmlsec_load_key_info and lasso_xmlsec_load_private_key to load the public keys. lasso/id-ff/provider.c | 184 +++++++++++++++++-------------------------------- 1 file changed, 62 insertions(+), 122 deletions(-) commit 5efe4e238f724271e8f9b6121719ba68e0799606 Author: Benjamin Dauvergne Date: Thu Feb 4 00:02:21 2010 +0000 Core: use lasso_xml_parse_file to load affiliation file lasso/id-ff/server.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 57f85d6f6bf14b01707831ad61acd1b1e3402c0f Author: Benjamin Dauvergne Date: Thu Feb 4 00:02:20 2010 +0000 Binding java: Makefile.am has multiple target rules, it cannot support parallel builds bindings/java/Makefile.am | 2 ++ 1 file changed, 2 insertions(+) commit 845eb26d6a81b2780fafd999e553da0b558697a5 Author: Benjamin Dauvergne Date: Thu Feb 4 00:02:19 2010 +0000 Core: in tools.c, add function to load XML files and KeyInfo nodes * tools.c: add lasso_xml_parse_file, based on g_file_get_contents and lasso_xml_parse_memory. add lasso_xml_parse_memory_with_error which instead of logging errors, can return the xmlError structure. add lasso_xmlsec_load_key_info, which allows to load keys from ds:KeyInfo XML nodes. It also support the "Lasso" bug of using ds:KeyValue directly to store base64 encoded keys and certificates. lasso/xml/private.h | 3 + lasso/xml/tools.c | 156 +++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 156 insertions(+), 3 deletions(-) commit 560e43046c0b72d944881102917fca414fd3b42e Author: Benjamin Dauvergne Date: Thu Feb 4 00:02:17 2010 +0000 SAML 2.0: in name_id_management.c, rework lasso_name_id_management_new_from_dump lasso/saml-2.0/name_id_management.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) commit 3433a07361786ca7b112eed003341151b05ef515 Author: Benjamin Dauvergne Date: Thu Feb 4 00:02:16 2010 +0000 Core: add more memory tracing, add a tracing macro * lasso/utils.h: add lasso_trace, which as a printf signature. * xml/xml.c: add more trace to node initialization code. lasso/utils.h | 7 +++++++ lasso/xml/xml.c | 54 ++++++++++++++++++++++++++++++++++-------------------- 2 files changed, 41 insertions(+), 20 deletions(-) commit ce79157276322d3d5bc56359e2294d2948ff5b23 Author: Benjamin Dauvergne Date: Thu Feb 4 00:02:14 2010 +0000 Tests: in valgrind suppressions file add more GLib suppressions tests/valgrind/lasso.supp | 117 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) commit 6de95fe91f9732cce562425e36d6f8439df30589 Author: Benjamin Dauvergne Date: Thu Feb 4 00:02:13 2010 +0000 Tests: in basic_tests.c, re-enable parsing of LassoWsuTimestamp objects tests/basic_tests.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) commit f520348197f58815552ceecff74261f96cde881f Author: Benjamin Dauvergne Date: Thu Feb 4 00:02:12 2010 +0000 Core: use lasso_node_new_from_dump to implement _new_from_dump methods * provider.c: add annotation for nullable arguments (necessary for bindings of new_from_buffer). * server.c: add annotations, allow to set encryption_private_key from buffers lasso/id-ff/identity.c | 19 +++---------------- lasso/id-ff/login.c | 16 ++++++---------- lasso/id-ff/logout.c | 15 ++++++--------- lasso/id-ff/provider.c | 23 +++++++++-------------- lasso/id-ff/server.c | 51 ++++++++++++++++++++++++-------------------------- lasso/id-ff/session.c | 22 +++------------------- 6 files changed, 51 insertions(+), 95 deletions(-) commit da7dcfaeddbb241f7caaf5ee23ba3e8114a06aba Author: Benjamin Dauvergne Date: Thu Feb 4 00:02:10 2010 +0000 Binding perl: add cleanup for temporary data of trampoline code * bindings/perl/lang.py: data type not common to Perl and C must be allocated for the duration of the call (mainly GList and xmlNode), but after the call they must be deallocated. bindings/perl/lang.py | 38 +++++++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 13 deletions(-) commit 184ff7f14a130af2ca3b7b68657e5b49fed93611 Author: Benjamin Dauvergne Date: Thu Feb 4 00:02:09 2010 +0000 SAML 2.0: in samlp2_response.c, simplify code path for assertion encryption lasso/xml/saml-2.0/samlp2_response.c | 36 +++++++++++++++--------------------- 1 file changed, 15 insertions(+), 21 deletions(-) commit b780bd237604c80ffd5c483d2ab231ed0e328bee Author: Benjamin Dauvergne Date: Thu Feb 4 00:02:07 2010 +0000 Fix leaks * lasso/id-wsf-2.0/profile.c: release private data object. * lasso/saml-2.0/login.c: free NameID content after construction. * lasso/xml/tools.c: free algorithm attribute content in lasso_node_decrypt_xmlnode. * lasso/xml/xml.c: release cutom_element->nodename in destructor. remove useless finalize method. * tests/basic_tests.c: release xmldoc after use. * tests/random_tests.c: free resut of lasso_node_dump. lasso/id-wsf-2.0/profile.c | 7 +++++-- lasso/saml-2.0/login.c | 6 ++++-- lasso/xml/tools.c | 9 +++++---- lasso/xml/xml.c | 8 +------- tests/basic_tests.c | 1 + tests/random_tests.c | 1 + 6 files changed, 17 insertions(+), 15 deletions(-) commit 7aa18e07b1f0395e363eb0e65beb6d74ffd4f473 Author: Benjamin Dauvergne Date: Thu Feb 4 00:02:05 2010 +0000 Fix leaks, change signature of lasso_provider_get_sp_name_qualifier, make it return a const char* lasso/id-ff/federation.c | 2 +- lasso/id-ff/federation.h | 2 +- lasso/id-ff/profile.c | 2 +- lasso/id-ff/provider.c | 6 +++--- lasso/id-ff/provider.h | 2 +- lasso/saml-2.0/login.c | 11 +++++------ lasso/xml/xml.c | 5 ++++- 7 files changed, 16 insertions(+), 14 deletions(-) commit c9068fee45bf360f227cb0f18070821d6abfea11 Author: Benjamin Dauvergne Date: Thu Feb 4 00:02:03 2010 +0000 in lasso/xml/tools.c, remove leaks of xmlSecKey and xmlNode lasso/xml/tools.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) commit 5b8b096341c6f47e886a0f4e682c052cbaad7245 Author: Benjamin Dauvergne Date: Thu Feb 4 00:02:00 2010 +0000 in lasso_xmlsec_load_private_key, do not leak the file buffer, in lasso_node_encrypt do not leak the keys manager lasso/xml/tools.c | 9 ++++++--- lasso/xml/xml.c | 3 +-- 2 files changed, 7 insertions(+), 5 deletions(-) commit dce72553df87382a44c79953cb255a35976e3d0c Author: Benjamin Dauvergne Date: Mon Feb 1 19:50:13 2010 +0000 Binding perl: many improvements * lang.py: use lasso_unref instead of g_object_unref. * lang.py: handle 'optional' annotation for more types, needed by ID-WSF bindings. * lang.py, gobject_handling.c: check object type before making the C call * Makefile.am: improve silent rules, hide all normal output, show errors, and with V=1 shows everything * glist_handling.c, gobject_handling.c: make local functions static * t/Lasso.t: add non regression test for method receiver type checking. * glist_handlind.c; remove unused convertion functions. * lang.py: clear the semi-assigned list and croak if all list elements do not convert to non-NULL values. bindings/perl/Makefile.am | 14 +++- bindings/perl/glist_handling.c | 151 ++++++--------------------------------- bindings/perl/gobject_handling.c | 29 ++++++-- bindings/perl/lang.py | 25 ++++--- bindings/perl/t/Lasso.t | 5 +- 5 files changed, 75 insertions(+), 149 deletions(-) commit 431e8088a9a5b211d5c8d836317de0374591f62e Author: Benjamin Dauvergne Date: Mon Feb 1 19:50:11 2010 +0000 Bindings: re-add binding for lasso_session_get_assertions for perl, special case formatting function for WsAddressing namespace * bindings/utils.py: type have LassoWsAddr prefix but function have the lasso_wsa_ prefix, so we have to adjust generated prefix. bindings/overrides.xml | 1 - bindings/utils.py | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) commit 0c67831f552607514700b5f27952f8fb1b6809cf Author: Benjamin Dauvergne Date: Mon Feb 1 19:50:09 2010 +0000 Bindings: use lasso_return_xxx macros instead of GLib ones bindings/ghashtable.h | 6 ++-- bindings/java/wrapper_top.c | 72 +++++++++++++++++++------------------- bindings/php5/wrapper_source_top.c | 2 +- bindings/python/wrapper_top.c | 6 ++-- 4 files changed, 43 insertions(+), 43 deletions(-) commit 7385277cebe64fff044af60631675977a1980fd9 Author: Benjamin Dauvergne Date: Mon Feb 1 19:50:06 2010 +0000 ID-WSF: remove useless new_from_message methods docs/reference/lasso/lasso-sections.txt | 24 ------------ lasso/id-wsf/interaction_profile_service.c | 6 ++- lasso/xml/disco_authenticate_requester.c | 13 ------- lasso/xml/disco_authenticate_requester.h | 3 -- lasso/xml/disco_authenticate_session_context.c | 13 ------- lasso/xml/disco_authenticate_session_context.h | 3 -- lasso/xml/disco_authorize_requester.c | 13 ------- lasso/xml/disco_authorize_requester.h | 3 -- lasso/xml/disco_encrypt_resource_id.c | 13 ------- lasso/xml/disco_encrypt_resource_id.h | 3 -- lasso/xml/disco_generate_bearer_token.c | 13 ------- lasso/xml/disco_generate_bearer_token.h | 3 -- lasso/xml/disco_modify.c | 13 ------- lasso/xml/disco_modify.h | 2 - lasso/xml/disco_modify_response.c | 13 ------- lasso/xml/disco_modify_response.h | 3 -- lasso/xml/disco_query.c | 13 ------- lasso/xml/disco_query.h | 2 - lasso/xml/disco_query_response.c | 13 ------- lasso/xml/disco_query_response.h | 3 -- lasso/xml/disco_send_single_logout.c | 13 ------- lasso/xml/disco_send_single_logout.h | 3 -- lasso/xml/is_interaction_request.c | 11 ------ lasso/xml/is_interaction_request.h | 3 -- lasso/xml/is_interaction_response.c | 11 ------ lasso/xml/is_interaction_response.h | 3 -- lasso/xml/sa_credentials.c | 28 -------------- lasso/xml/sa_credentials.h | 5 --- lasso/xml/sa_parameter.c | 13 ------- lasso/xml/sa_parameter.h | 2 - lasso/xml/sa_password_transforms.c | 13 ------- lasso/xml/sa_password_transforms.h | 3 -- lasso/xml/sa_sasl_request.c | 13 ------- lasso/xml/sa_sasl_request.h | 2 - lasso/xml/sa_sasl_response.c | 43 ---------------------- lasso/xml/sa_sasl_response.h | 9 ----- lasso/xml/sa_transform.c | 13 ------- lasso/xml/sa_transform.h | 2 - lasso/xml/soap_binding_consent.c | 13 ------- lasso/xml/soap_binding_consent.h | 3 -- lasso/xml/soap_binding_correlation.c | 13 ------- lasso/xml/soap_binding_correlation.h | 3 -- lasso/xml/soap_binding_ext_credential.c | 13 ------- lasso/xml/soap_binding_ext_credential.h | 3 -- lasso/xml/soap_binding_ext_credentials_context.c | 13 ------- lasso/xml/soap_binding_ext_credentials_context.h | 3 -- .../xml/soap_binding_ext_service_instance_update.c | 13 ------- .../xml/soap_binding_ext_service_instance_update.h | 3 -- lasso/xml/soap_binding_ext_timeout.c | 13 ------- lasso/xml/soap_binding_ext_timeout.h | 3 -- lasso/xml/soap_binding_processing_context.c | 13 ------- lasso/xml/soap_binding_processing_context.h | 3 -- lasso/xml/soap_binding_provider.c | 13 ------- lasso/xml/soap_binding_provider.h | 3 -- lasso/xml/soap_binding_usage_directive.c | 13 ------- lasso/xml/soap_binding_usage_directive.h | 3 -- 56 files changed, 4 insertions(+), 502 deletions(-) commit 2a7b411ea11f96c12d862b0d7d21cdb1c05fe454 Author: Benjamin Dauvergne Date: Mon Feb 1 19:50:04 2010 +0000 Core: in utils.h, add macros to replace verbose g_return_val_if_fail lasso/utils.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) commit a45b383cd0f6d406f06c6b0b0ce99bdb75e27f99 Author: Benjamin Dauvergne Date: Mon Feb 1 19:50:03 2010 +0000 Core: document return values of lasso_login_validate_request_msg lasso/id-ff/login.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) commit 935c724cea32f81aa511427239f934fdd58b9ac5 Author: Benjamin Dauvergne Date: Mon Feb 1 19:50:00 2010 +0000 Utils: lasso_unref, a safe g_object_unref, and add some document about existing family of macros lasso/utils.c | 12 ++++++++++- lasso/utils.h | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++------- 2 files changed, 71 insertions(+), 9 deletions(-) commit 5a5a0b9373379c05c8111960afd4398d12628184 Author: Benjamin Dauvergne Date: Mon Feb 1 19:49:59 2010 +0000 Core: do not emit messages inside lasso_check_version lasso/lasso.c | 12 ------------ 1 file changed, 12 deletions(-) commit f0bb6f81baa1b383e32fa895d8090665f4e4241c Author: Benjamin Dauvergne Date: Mon Feb 1 01:18:03 2010 +0000 Bindings: os.path.relpath is only present since python 2.6, add a local implementation for older python versions bindings/bindings.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) commit 741699ed0fff7607d4d6f4da1b8727bd08cf27dd Author: Benjamin Dauvergne Date: Mon Feb 1 01:06:17 2010 +0000 Add a dist-hook to remove .svn directories before taring the dist Makefile.am | 3 +++ 1 file changed, 3 insertions(+) commit 2348566c2a6cec389b0ae99b3ac061c6d13a58b2 Author: Benjamin Dauvergne Date: Mon Feb 1 00:16:21 2010 +0000 Bindings: make binding generation more silent * bindings/java/Makefile.am bindings/perl/Makefile.am bindings/php5/Makefile.am bindings/python/Makefile.am: use AM_V_GEN, or similar variable for all steps of binding generation, normal output can be activated with the V=1 argument to the 'make' command. bindings/java/Makefile.am | 17 ++++++++++++----- bindings/perl/Makefile.am | 28 +++++++++++++++------------- bindings/php5/Makefile.am | 2 +- bindings/python/Makefile.am | 2 +- 4 files changed, 29 insertions(+), 20 deletions(-) commit a8783e7d9a5593b0db1c4a5961807a26426b9b50 Author: Benjamin Dauvergne Date: Mon Feb 1 00:16:19 2010 +0000 Binding java: use eager evalutation to get list of sources files * bindings/java/Makefile.am: use := to provoke eager evaluation so that java-list mode is not called many times. bindings/java/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 65c56d121e1fa639791f1e96028d6b64e49f1919 Author: Benjamin Dauvergne Date: Fri Jan 29 16:42:37 2010 +0000 Bindings: use 'absolute' header paths to produces bindings * bindings/bindings.py: if files from bindings are using absolute instead of relatives header paths they can be independant of the lasso source. bindings/bindings.py | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) commit f34d865873d843580644f8ed74530e67d99fdd97 Author: Benjamin Dauvergne Date: Fri Jan 29 16:42:36 2010 +0000 Bindings perl: simplify Makefile.PL * bindings/perl/Makefile.PL: remove as much special casing as possible so that it could eventually become a CPAN module. use pkg-config to find lasso libs if no explicit LIBS command line argument is used. * bindings/perl/Makefile.am: pass parameters using command line argument instead of environment variable, which needed a special Makefile.PL. bindings/perl/Makefile.PL | 25 ++++++------------------- bindings/perl/Makefile.am | 16 ++++++++++------ 2 files changed, 16 insertions(+), 25 deletions(-) commit 2a2666a0d961dcd969400e50ece7fd4ba60619eb Author: Benjamin Dauvergne Date: Fri Jan 29 16:42:35 2010 +0000 Binding perl: special case for lasso_check_version * bindings/perl/lang.py: special case lasso_check_version for not raising an error when it returns 1. * bindings/perl/t/Lasso.t: add a non regression test. bindings/perl/lang.py | 9 +++++++-- bindings/perl/t/Lasso.t | 6 +++++- 2 files changed, 12 insertions(+), 3 deletions(-) commit afdb5238875fed7bf1bb854b2b7b9eb7b9beb833 Author: Benjamin Dauvergne Date: Fri Jan 29 16:42:33 2010 +0000 Binding perl: remove warning when passing Null to croak * bindings/perl/gobject_handling.c: croak is aliased to Perl_croak_nocontext which has a gcc attribute 'notnull'. We use Perl_croak and an explicit perl context object, to work around this warning. bindings/perl/gobject_handling.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 91c6efceaa0b0d3058e0b2431957e456872eedca Author: Benjamin Dauvergne Date: Fri Jan 29 16:42:32 2010 +0000 in bindings.py, change header paths bindings/bindings.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit 3e5534e981d569f3a7fe8c721f8708a9b7607320 Author: Benjamin Dauvergne Date: Fri Jan 29 16:42:29 2010 +0000 Update files for a 2.2.91 release NEWS | 10 ++++++++++ configure.ac | 2 +- lasso.doap | 4 ++++ website/web/doap.rdf | 4 ++++ 4 files changed, 19 insertions(+), 1 deletion(-) commit 51f3516a5b37d2d1c71e5cbfe8759ff9d4faee4e Author: Benjamin Dauvergne Date: Fri Jan 29 16:04:37 2010 +0000 update changelog ChangeLog | 751 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 751 insertions(+) commit 43b1e52fbcd092c58b74db29b49bafdf7706f19f Author: Benjamin Dauvergne Date: Fri Jan 29 00:58:20 2010 +0000 Binding python: make a better use of default value annotation for creating method declarations bindings/python/lang.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit 8b06d7c1ae1cd2a1ffeab9b0314dcd34828e4b5e Author: Benjamin Dauvergne Date: Fri Jan 29 00:43:53 2010 +0000 Binding perl: many improvements * handle GHashTable of strings and objects. * report errors with 'croak' as a Lasso::Error object. * add more basic tests. * for string arguments, convert undef to NULL, and croak if function does not accept NULL. * fix library paths in Makefile.PL. bindings/perl/Makefile.PL | 2 +- bindings/perl/Makefile.am | 7 +- bindings/perl/ghashtable_handling.c | 117 +++++++++++++++++++++++++++++++++ bindings/perl/gobject_handling.c | 25 ++++++- bindings/perl/lang.py | 127 +++++++++++++++++++++++++++++------- bindings/perl/t/Lasso.t | 29 +++++++- bindings/perl/test.sh | 1 - bindings/perl/typemap-in | 5 ++ bindings/perl/typemap-out | 12 ++++ 9 files changed, 292 insertions(+), 33 deletions(-) commit b2f07a064046d6dfbf47d39ea5c6eb130df595cf Author: Benjamin Dauvergne Date: Fri Jan 29 00:43:51 2010 +0000 Bindings: in bindings.py, fix regexp and annotation parsing for optional arguments and their default values bindings/bindings.py | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) commit 92efc271a4cdb4e3180207447bd9a65f150427d4 Author: Benjamin Dauvergne Date: Fri Jan 29 00:43:50 2010 +0000 SAML 2.0: fix annotations, documentation and signatures lasso/id-ff/login.c | 4 ++-- lasso/saml-2.0/login.c | 2 +- lasso/saml-2.0/logout.c | 2 +- lasso/saml-2.0/name_id_management.c | 2 +- lasso/saml-2.0/profile.c | 4 ++-- lasso/saml-2.0/profileprivate.h | 4 ++-- lasso/saml-2.0/saml2_helper.c | 5 +---- 7 files changed, 10 insertions(+), 13 deletions(-) commit cbe4155518c58b904ff1a0966f9faadfca0922f5 Author: Benjamin Dauvergne Date: Thu Jan 28 15:32:12 2010 +0000 Bindings python ID-WSF 1.0 tests: update PP HREF symbol bindings/python/tests/idwsf1_tests.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) commit 686c21f900101fdd4c61316de9c25c2f17d1226c Author: Benjamin Dauvergne Date: Thu Jan 28 15:32:09 2010 +0000 Bindings php5: string hashtable methods are only used by ID-WSF bindings, mark them unused by default * bindings/php5/wrapper_source_top.c: only id-wsf has field of type GHashtTable so when compiling without --enable-wsf, it give 'unused symbols' errors. Lets mark de the concerned functions as unused. bindings/php5/wrapper_source_top.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit a9bda7e11d1b290b03934fb8db807aee4b09fe04 Author: Benjamin Dauvergne Date: Thu Jan 28 15:32:07 2010 +0000 ID-WSF 1.0: make LassoServer.services private with respect to the bindings lasso/id-ff/server.h | 2 ++ 1 file changed, 2 insertions(+) commit 8f527b1eb68a15b09d528e417812aa1040dbabb7 Author: Benjamin Dauvergne Date: Thu Jan 28 15:32:03 2010 +0000 Bindings java: use utils.py methods, make set_hash_of_objects more robust bindings/java/lang.py | 422 ++++++++++++++++++++++---------------------- bindings/java/wrapper_top.c | 109 ++++++------ 2 files changed, 267 insertions(+), 264 deletions(-) commit 88554aacc9eced7cfaece40461f9c86eddee922c Author: Benjamin Dauvergne Date: Thu Jan 28 15:32:01 2010 +0000 Tests: export sp2-la do dist file for dist with id-wsf enabled tests/data/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 4912a56b6a70c7a6c485bce2e1fb3072e7ac8018 Author: Benjamin Dauvergne Date: Thu Jan 28 15:31:58 2010 +0000 Bindings: add time_t to integer types, add unpointerize method bindings/utils.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit 80e61cf6356de74a53db71b638f8b2c9e0bb7247 Author: Benjamin Dauvergne Date: Thu Jan 28 15:31:57 2010 +0000 Binding python ID-WSF 2.0 tests: update some tests bindings/python/tests/idwsf2_tests.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) commit 85261dcc5fef1e8f0b1699ba101850406fbe94d6 Author: Benjamin Dauvergne Date: Thu Jan 28 15:31:55 2010 +0000 Binding Python ID-WSF 2.0: comment out test bindings/python/tests/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 19b7cc0bbc0d060d21f000b5241b007b77b1e47a Author: Benjamin Dauvergne Date: Thu Jan 28 15:31:52 2010 +0000 ID-WSF: change name of Personal Profile namespace symbols, add symbols for ID-SIS PP 1.1 lasso/id-wsf/data_service.c | 4 ++-- lasso/id-wsf/discovery.c | 2 +- lasso/id-wsf/personal_profile_service.c | 2 +- lasso/xml/idwsf_strings.h | 27 +++++++++++++++++++++------ lasso/xml/xml.c | 6 ++++-- 5 files changed, 29 insertions(+), 12 deletions(-) commit 1dab7b59e5f36ef0a5cfed124a3a2f5d549d82ce Author: Benjamin Dauvergne Date: Thu Jan 28 15:31:49 2010 +0000 Bindings: java, php5, python simplify logic in binding generator * use utils.h macros to manipulate fields. * use utils.py function to filter variables, argument and return types. * finish support of hashtables of strings for php5 and python. bindings/java/lang.py | 18 ++- bindings/php5/php_code.py | 103 +++++++------ bindings/php5/wrapper_source.py | 268 +++++++++++++++------------------- bindings/php5/wrapper_source_top.c | 64 ++++++-- bindings/python/lang.py | 205 +++++++++++++++----------- bindings/python/tests/idwsf2_tests.py | 80 ++-------- bindings/python/wrapper_top.c | 68 +++++++++ 7 files changed, 439 insertions(+), 367 deletions(-) commit a1ae48d2ef48492faafd26464e64e2dccd0d8565 Author: Benjamin Dauvergne Date: Thu Jan 28 15:31:46 2010 +0000 Bindings: better parse oftype annotation for hashtable, allow to skip structures * bindings/bindings.py: add possibility to skip generating bindings for structures to overrides.xml. parse element-type annotation /* of XXX */ for hashtable objects. output to stderr warning about skipped objects. parse idwsf_strings.h * bindings/overrides.xml: skip more ID-WSF 1.0 functions in java and perl. skip structure LassoAuthentication. bindings/bindings.py | 43 +++++++++++++++++++++++++++---------------- bindings/overrides.xml | 31 +++++++++++++++++++++++-------- 2 files changed, 50 insertions(+), 24 deletions(-) commit fa9566aa59005360a562595d3b0c20b2bd75478b Author: Benjamin Dauvergne Date: Thu Jan 28 15:31:43 2010 +0000 Core: fix gtk-doc annotations lasso/id-ff/provider.c | 2 +- lasso/id-wsf-2.0/discovery.c | 6 +++--- lasso/id-wsf-2.0/identity.c | 6 ++++++ lasso/id-wsf-2.0/server.c | 4 ++-- lasso/id-wsf-2.0/soap_binding.c | 2 +- lasso/id-wsf/discovery.c | 2 +- lasso/id-wsf/id_ff_extensions.c | 2 +- 7 files changed, 15 insertions(+), 9 deletions(-) commit b3b2e6f22d8e7f963bb1b86ebacf387f762d97a8 Author: Benjamin Dauvergne Date: Thu Jan 28 15:31:41 2010 +0000 Core: add new macros to lasso/utils.h, fix lasso_assign_new_list_of_gobjects * lasso/utils.h: add: - lasso_assign_new_xml_node - lasso_assign_new_list_of_strings - lasso_assign_new_list_of_xml_node fix lasso_assign_new_list_of_gobjects, bad naming of release macro. lasso/utils.h | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) commit 016ee53393426a3e9fceacf3c023643ca39ca425 Author: Benjamin Dauvergne Date: Thu Jan 28 15:31:36 2010 +0000 XML: add missing element-type annotations lasso/xml/dst_data.h | 2 +- lasso/xml/sa_sasl_request.h | 2 +- lasso/xml/soap-1.1/soap_fault.h | 2 +- lasso/xml/soap_binding_ext_credential.h | 2 +- lasso/xml/soap_binding_usage_directive.h | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) commit 03400fd8f04939d057c959f7628cd84c1f575879 Author: Benjamin Dauvergne Date: Thu Jan 28 15:31:27 2010 +0000 Bindings: in bindings/utils.py, augment robustness of matching functions to work with type alone or triples bindings/utils.py | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) commit 8864adfcd01981b5cc55170169d046b50de814a1 Author: Benjamin Dauvergne Date: Thu Jan 28 15:31:21 2010 +0000 Binding perl: update to binding * change extension of typemap files because if conflicts with existing * support constant list of strings and gobjects, add input rule for list of gobjects * fix setter for GList fields bindings/perl/Makefile.am | 4 +-- bindings/perl/lang.py | 41 +++++++++++++++++++++++++----- bindings/perl/{typemap.in => typemap-in} | 5 +++- bindings/perl/{typemap.out => typemap-out} | 0 4 files changed, 40 insertions(+), 10 deletions(-) commit 1e581e05b75241c915b2505bcc6216027f51091a Author: Benjamin Dauvergne Date: Tue Jan 26 20:59:26 2010 +0000 ID-WSF 1.0 & 2.0: complete lasso-sections.txt, add internal API to access SOAP headers, complete WS-Addressing support * docs/reference/lasso/lasso-sections.txt: complete documentation of LassoSoapEnvelope and LassoSoapFault with ID-WSF additions. * lasso/id-wsf-2.0/profile.c lasso/id-wsf-2.0/soap_binding.c lasso/id-wsf-2.0/soap_binding.h: add internal function _get_node and _get_header to simplify implementation of accessors for headers. change signature of lasso_soap_envelope_get_message_id and add new function lasso_soap_envelope_get_relates_to. update call points. add a message id when building a SOAP message. * lasso/xml/idwsf_strings.h: add element name for MessageID and RelatesTo WS-Addressing elements. * lasso/id-wsf/authentication.c lasso/id-wsf/data_service.c lasso/id-wsf/discovery.c lasso/id-wsf/wsf_profile.c lasso/id-wsf-2.0/saml2_login.c lasso/xml/disco_description.c: fix path name of header lasso/id-wsf/wsf_utils.h. make all internal include path relatives. docs/reference/lasso/lasso-sections.txt | 18 +++++++ lasso/id-wsf-2.0/profile.c | 26 +++++++--- lasso/id-wsf-2.0/saml2_login.c | 2 +- lasso/id-wsf-2.0/soap_binding.c | 87 +++++++++++++++++++++++++++------ lasso/id-wsf-2.0/soap_binding.h | 8 ++- lasso/id-wsf/authentication.c | 2 +- lasso/id-wsf/data_service.c | 4 +- lasso/id-wsf/discovery.c | 6 +-- lasso/id-wsf/wsf_profile.c | 2 +- lasso/xml/disco_description.c | 4 +- lasso/xml/idwsf_strings.h | 14 ++++++ 11 files changed, 141 insertions(+), 32 deletions(-) commit 7d786e27bf395240281856fd1ffa9f1a4a0eee41 Author: Benjamin Dauvergne Date: Tue Jan 26 20:59:24 2010 +0000 Core XML: make lasso_node_set_custom_namespace/nodename take const string * lasso/xml/xml.c lasso/xml/xml.h: mark argument of lasso_node_set_custom_namespace and lasso_node_set_custom_nodename as const char* strings. lasso/xml/xml.c | 4 ++-- lasso/xml/xml.h | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) commit ce42be14819f195a61ec070ae8342884360d0cf3 Author: Benjamin Dauvergne Date: Tue Jan 26 20:59:22 2010 +0000 Core XML: add function to get the namespace of a LassoNode * lasso/xml/xml.c lasso/xml/xml.h: if a custome namespace is set, return it, otherwise return the class namespace (klass->node_data->ns->href). lasso/xml/xml.c | 26 ++++++++++++++++++++++++++ lasso/xml/xml.h | 2 ++ 2 files changed, 28 insertions(+) commit babc3ac9106e94605f00be02aa7552f5cd4a45c5 Author: Benjamin Dauvergne Date: Tue Jan 26 13:51:11 2010 +0000 Binding perl: fix include paths in the makefile, again bindings/perl/Makefile.PL | 2 +- bindings/perl/Makefile.am | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit c21faff7e6f41e8ce0db7b0f2b9b3548c12d56f5 Author: Benjamin Dauvergne Date: Tue Jan 26 13:51:09 2010 +0000 in bindings/perl/Makefile.PL, add include path for normal builds bindings/perl/Makefile.PL | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit e582a441e38fdecf4ca558f9e071f9eae398d9e9 Author: Benjamin Dauvergne Date: Tue Jan 26 10:39:27 2010 +0000 in configure.ac, activate the Perl binding in normal builds configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 896ca4579f4275c4ced2e0e1d0c6d46db0255831 Author: Benjamin Dauvergne Date: Tue Jan 26 10:39:26 2010 +0000 Core: in configure.ac, activate warning when debugging, not in normal build * configure.ac: remove -Wxxx flag from AM_CFLAGS, add them if --enable-debugging is used. configure.ac | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit fc69229a4ccd22e1d65858342e395214c047fb2e Author: Benjamin Dauvergne Date: Tue Jan 26 10:39:24 2010 +0000 in lasso/saml-2.0/logout.c, fix missing declaration lasso/saml-2.0/logout.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 962bf4d34c00202a5793689e7828dc5cf9ff33ff Author: Benjamin Dauvergne Date: Tue Jan 26 10:39:22 2010 +0000 Core: update errors.c file lasso/errors.c | 2 ++ 1 file changed, 2 insertions(+) commit 09221e389a39c0b782cfcac03f960a4367c339eb Author: Benjamin Dauvergne Date: Tue Jan 26 10:39:21 2010 +0000 in bindings/perl/Makefile.am, change permission to make distcheck works bindings/perl/Makefile.am | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) commit 740b8191d4e659aedcefc2b96db1cbba65fb177c Author: Benjamin Dauvergne Date: Tue Jan 26 10:39:20 2010 +0000 in bindings/perl/Makefile.am, add files to EXTRA_DIST bindings/perl/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit c312a6f91a1c437dad7ce9a5179c9cd655a0fccd Author: Benjamin Dauvergne Date: Mon Jan 25 23:47:56 2010 +0000 Bindings: add a new perl binding using the new binding infrastructure * XS files is autogenerated using bindings/binding.py model of the Lasso API. All constants are in the Lasso::Constants package, the LASSO_ prefix is removed. All classes are now Lasso::ClassName, field accessor also serves as setters, i.e you can do this: $name_id = Lasso::Saml2NameID::new(); $name_id->content('coin'); print $name_id->content; Is still missing: - a lot of test files, - support for hashtables, - and throwing exceptions when return code is non-zero. bindings/Makefile.am | 3 + bindings/bindings.py | 13 +- bindings/overrides.xml | 1 + bindings/perl/LassoNode.xs | 36 ++++ bindings/perl/Makefile.PL | 31 +++ bindings/perl/Makefile.am | 43 ++++ bindings/perl/__init__.py | 0 bindings/perl/glist_handling.c | 251 ++++++++++++++++++++++ bindings/perl/gobject_handling.c | 227 ++++++++++++++++++++ bindings/perl/lang.py | 438 +++++++++++++++++++++++++++++++++++++++ bindings/perl/t/Lasso.t | 15 ++ bindings/perl/test.pl | 5 + bindings/perl/test.sh | 3 + bindings/perl/typemap.in | 10 + bindings/perl/typemap.out | 43 ++++ configure.ac | 1 + 16 files changed, 1117 insertions(+), 3 deletions(-) commit c3c44c2371101c9664a4b61e816c3096d9005c80 Author: Benjamin Dauvergne Date: Mon Jan 25 23:47:55 2010 +0000 Bindings: in utils.py, fix is_glist and is_hashtable, make arg_type accept simple string as input instead of triples bindings/utils.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) commit 928246ba4fedeedea0152939ca981d5fd2145829 Author: Benjamin Dauvergne Date: Mon Jan 25 23:47:54 2010 +0000 in lasso/xml/saml_attribute_value.h, fix typo in content type annotation lasso/xml/saml_attribute_value.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 3fba244b7cac02e15d1a7093ee71751cfb426687 Author: Benjamin Dauvergne Date: Mon Jan 25 23:47:53 2010 +0000 in lasso/xml/sa_sasl_response.h, add GList content type annotation to field 'any' lasso/xml/sa_sasl_response.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit bd2f8ade0149bd4c21a7cafbdb2d801c749eccb7 Author: Benjamin Dauvergne Date: Mon Jan 25 23:47:51 2010 +0000 Bindings PHP5: use is_cstring to match string types bindings/php5/wrapper_source.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 641a6af75a8e0befddc5414065042bd71c9a97ad Author: Benjamin Dauvergne Date: Mon Jan 25 23:47:46 2010 +0000 Bindings: remove all SWIG bindings and SWIG related files Makefile.am | 11 - configure.ac | 84 - java/.cvsignore | 171 - java/Makefile.am | 231 - java/coldfusion/.cvsignore | 1 - java/coldfusion/Makefile | 518 -- java/coldfusion/src/CFLassoSingleLogout.java | 101 - java/coldfusion/src/CFLassoSingleSignOn.java | 160 - java/coldfusion/web/assertionConsumer.cfm | 48 - java/coldfusion/web/singleLogout.cfm | 40 - java/coldfusion/web/singleSignOn.cfm | 21 - java/doc/ImplantationMapping.rst | 37 - java/doc/JNIForDummy.rst | 36 - java/tests/.cvsignore | 1 - java/tests/BindingTests.java | 266 - java/tests/LoginTest.java | 244 - perl/.cvsignore | 14 - perl/Makefile.PL | 43 - perl/Makefile.am | 73 - perl/tests/binding_tests.pl | 258 - php/.cvsignore | 10 - php/Makefile.am | 26 - php/patch_swig_output.py | 285 - php/tests/.cvsignore | 3 - php/tests/binding_tests.php | 309 - php/tests/perfs.php | 94 - swig/.cvsignore | 3 - swig/Lasso-saml2.i | 473 -- swig/Lasso-wsf-disco.i | 1321 ---- swig/Lasso-wsf-dst.i | 670 -- swig/Lasso-wsf-is.i | 784 --- swig/Lasso-wsf-sa.i | 350 - swig/Lasso-wsf-soap.i | 326 - swig/Lasso-wsf.i | 1066 --- swig/Lasso-wsf2.i | 495 -- swig/Lasso.i | 7142 -------------------- swig/Makefile.am | 8 - swig/id-wsf-2.0/Makefile.am | 140 - swig/id-wsf-2.0/disco_abstract.i | 55 - swig/id-wsf-2.0/disco_endpoint_context.i | 54 - swig/id-wsf-2.0/disco_keys.i | 54 - swig/id-wsf-2.0/disco_options.i | 54 - swig/id-wsf-2.0/disco_provider_id.i | 55 - swig/id-wsf-2.0/disco_query.i | 67 - swig/id-wsf-2.0/disco_query_response.i | 81 - swig/id-wsf-2.0/disco_requested_service.i | 67 - swig/id-wsf-2.0/disco_security_context.i | 54 - swig/id-wsf-2.0/disco_service_context.i | 54 - swig/id-wsf-2.0/disco_service_type.i | 55 - swig/id-wsf-2.0/disco_svc_md_association_add.i | 67 - .../disco_svc_md_association_add_response.i | 81 - swig/id-wsf-2.0/disco_svc_md_association_delete.i | 67 - .../disco_svc_md_association_delete_response.i | 81 - swig/id-wsf-2.0/disco_svc_md_association_query.i | 67 - .../disco_svc_md_association_query_response.i | 81 - swig/id-wsf-2.0/disco_svc_md_delete.i | 67 - swig/id-wsf-2.0/disco_svc_md_delete_response.i | 81 - swig/id-wsf-2.0/disco_svc_md_query.i | 67 - swig/id-wsf-2.0/disco_svc_md_query_response.i | 81 - swig/id-wsf-2.0/disco_svc_md_register.i | 67 - swig/id-wsf-2.0/disco_svc_md_register_response.i | 81 - swig/id-wsf-2.0/disco_svc_md_replace.i | 67 - swig/id-wsf-2.0/disco_svc_md_replace_response.i | 81 - swig/id-wsf-2.0/disco_svc_metadata.i | 72 - swig/id-wsf-2.0/dst_data_response_base.i | 55 - swig/id-wsf-2.0/dst_delete_item_base.i | 59 - swig/id-wsf-2.0/dst_delete_response.i | 54 - swig/id-wsf-2.0/dst_request.i | 68 - swig/id-wsf-2.0/dst_result_query_base.i | 65 - swig/id-wsf-2.0/dst_test_item_base.i | 58 - swig/id-wsf-2.0/dstref_app_data.i | 54 - swig/id-wsf-2.0/dstref_create.i | 54 - swig/id-wsf-2.0/dstref_create_item.i | 71 - swig/id-wsf-2.0/dstref_create_response.i | 54 - swig/id-wsf-2.0/dstref_data.i | 57 - swig/id-wsf-2.0/dstref_data_response.i | 54 - swig/id-wsf-2.0/dstref_delete.i | 54 - swig/id-wsf-2.0/dstref_delete_item.i | 58 - swig/id-wsf-2.0/dstref_delete_response.i | 54 - swig/id-wsf-2.0/dstref_item_data.i | 57 - swig/id-wsf-2.0/dstref_modify.i | 54 - swig/id-wsf-2.0/dstref_modify_item.i | 76 - swig/id-wsf-2.0/dstref_modify_response.i | 54 - swig/id-wsf-2.0/dstref_query.i | 54 - swig/id-wsf-2.0/dstref_query_item.i | 58 - swig/id-wsf-2.0/dstref_query_response.i | 54 - swig/id-wsf-2.0/dstref_result_query.i | 62 - swig/id-wsf-2.0/dstref_test_item.i | 58 - swig/id-wsf-2.0/ims_identity_mapping_request.i | 67 - swig/id-wsf-2.0/ims_identity_mapping_response.i | 81 - swig/id-wsf-2.0/ims_mapping_input.i | 55 - swig/id-wsf-2.0/ims_mapping_output.i | 55 - swig/id-wsf-2.0/inheritance.h | 136 - swig/id-wsf-2.0/is_help.i | 57 - swig/id-wsf-2.0/is_inquiry.i | 56 - swig/id-wsf-2.0/is_inquiry_element.i | 67 - swig/id-wsf-2.0/is_interaction_request.i | 58 - swig/id-wsf-2.0/is_interaction_response.i | 68 - swig/id-wsf-2.0/is_interaction_statement.i | 54 - swig/id-wsf-2.0/is_item.i | 60 - swig/id-wsf-2.0/is_parameter.i | 56 - swig/id-wsf-2.0/is_select.i | 54 - swig/id-wsf-2.0/is_text.i | 57 - swig/id-wsf-2.0/main.h | 272 - swig/id-wsf-2.0/ps_add_collection_request.i | 54 - swig/id-wsf-2.0/ps_add_collection_response.i | 54 - swig/id-wsf-2.0/ps_add_entity_request.i | 58 - swig/id-wsf-2.0/ps_add_entity_response.i | 54 - swig/id-wsf-2.0/ps_add_known_entity_request.i | 58 - swig/id-wsf-2.0/ps_add_known_entity_response.i | 54 - swig/id-wsf-2.0/ps_add_to_collection_request.i | 54 - swig/id-wsf-2.0/ps_get_object_info_request.i | 54 - swig/id-wsf-2.0/ps_get_object_info_response.i | 54 - swig/id-wsf-2.0/ps_item_data.i | 54 - swig/id-wsf-2.0/ps_list_members_request.i | 66 - swig/id-wsf-2.0/ps_list_members_response.i | 54 - swig/id-wsf-2.0/ps_notification.i | 54 - swig/id-wsf-2.0/ps_notify.i | 55 - swig/id-wsf-2.0/ps_object.i | 66 - swig/id-wsf-2.0/ps_query_objects_request.i | 66 - swig/id-wsf-2.0/ps_query_objects_response.i | 54 - swig/id-wsf-2.0/ps_remove_collection_request.i | 54 - swig/id-wsf-2.0/ps_remove_entity_request.i | 54 - .../id-wsf-2.0/ps_remove_from_collection_request.i | 54 - swig/id-wsf-2.0/ps_request_abstract.i | 67 - swig/id-wsf-2.0/ps_resolve_identifier_request.i | 54 - swig/id-wsf-2.0/ps_resolve_identifier_response.i | 54 - swig/id-wsf-2.0/ps_resolve_input.i | 54 - swig/id-wsf-2.0/ps_response_abstract.i | 81 - swig/id-wsf-2.0/ps_set_object_info_request.i | 54 - swig/id-wsf-2.0/ps_test_membership_request.i | 54 - swig/id-wsf-2.0/ps_test_membership_response.i | 54 - swig/id-wsf-2.0/sb2_consent.i | 69 - swig/id-wsf-2.0/sb2_credentials_context.i | 81 - swig/id-wsf-2.0/sb2_endpoint_update.i | 55 - swig/id-wsf-2.0/sb2_redirect_request.i | 55 - swig/id-wsf-2.0/sb2_sender.i | 69 - swig/id-wsf-2.0/sb2_target_identity.i | 67 - swig/id-wsf-2.0/sb2_timeout.i | 68 - swig/id-wsf-2.0/sb2_usage_directive.i | 68 - swig/id-wsf-2.0/sb2_user_interaction_header.i | 71 - swig/id-wsf-2.0/sbf_framework.i | 68 - swig/id-wsf-2.0/sec_token.i | 68 - swig/id-wsf-2.0/sec_token_policy.i | 82 - swig/id-wsf-2.0/sec_transited_provider_path.i | 54 - swig/id-wsf-2.0/subs_notification.i | 58 - swig/id-wsf-2.0/subs_notify_response.i | 54 - swig/id-wsf-2.0/subs_ref_item.i | 56 - swig/id-wsf-2.0/subs_subscription.i | 61 - swig/id-wsf-2.0/subsref_app_data.i | 54 - swig/id-wsf-2.0/subsref_create.i | 54 - swig/id-wsf-2.0/subsref_create_item.i | 57 - swig/id-wsf-2.0/subsref_create_response.i | 54 - swig/id-wsf-2.0/subsref_data.i | 57 - swig/id-wsf-2.0/subsref_data_response.i | 54 - swig/id-wsf-2.0/subsref_delete.i | 54 - swig/id-wsf-2.0/subsref_delete_item.i | 54 - swig/id-wsf-2.0/subsref_delete_response.i | 54 - swig/id-wsf-2.0/subsref_item_data.i | 57 - swig/id-wsf-2.0/subsref_modify.i | 54 - swig/id-wsf-2.0/subsref_modify_item.i | 58 - swig/id-wsf-2.0/subsref_modify_response.i | 54 - swig/id-wsf-2.0/subsref_notification.i | 54 - swig/id-wsf-2.0/subsref_notify.i | 55 - swig/id-wsf-2.0/subsref_notify_response.i | 54 - swig/id-wsf-2.0/subsref_query.i | 54 - swig/id-wsf-2.0/subsref_query_item.i | 58 - swig/id-wsf-2.0/subsref_query_response.i | 54 - swig/id-wsf-2.0/subsref_result_query.i | 54 - swig/id-wsf-2.0/subsref_subscription.i | 54 - swig/id-wsf-2.0/subsref_test_item.i | 54 - swig/id-wsf-2.0/util_empty.i | 54 - swig/id-wsf-2.0/util_extension.i | 54 - swig/id-wsf-2.0/util_response.i | 82 - swig/id-wsf-2.0/util_status.i | 57 - swig/inheritance.h | 160 - swig/saml-2.0/.cvsignore | 2 - swig/saml-2.0/Makefile.am | 56 - swig/saml-2.0/inheritance.h | 49 - swig/saml-2.0/main.h | 100 - swig/saml-2.0/saml2_action.i | 60 - swig/saml-2.0/saml2_advice.i | 111 - swig/saml-2.0/saml2_assertion.i | 179 - swig/saml-2.0/saml2_attribute.i | 82 - swig/saml-2.0/saml2_attribute_statement.i | 84 - swig/saml-2.0/saml2_attribute_value.i | 64 - swig/saml-2.0/saml2_audience_restriction.i | 60 - swig/saml-2.0/saml2_authn_context.i | 67 - swig/saml-2.0/saml2_authn_statement.i | 96 - swig/saml-2.0/saml2_authz_decision_statement.i | 92 - swig/saml-2.0/saml2_base_idabstract.i | 63 - swig/saml-2.0/saml2_condition_abstract.i | 55 - swig/saml-2.0/saml2_conditions.i | 119 - swig/saml-2.0/saml2_encrypted_element.i | 55 - swig/saml-2.0/saml2_evidence.i | 111 - swig/saml-2.0/saml2_key_info_confirmation_data.i | 55 - swig/saml-2.0/saml2_name_id.i | 72 - swig/saml-2.0/saml2_one_time_use.i | 56 - swig/saml-2.0/saml2_proxy_restriction.i | 64 - swig/saml-2.0/saml2_statement_abstract.i | 55 - swig/saml-2.0/saml2_subject.i | 111 - swig/saml-2.0/saml2_subject_confirmation.i | 115 - swig/saml-2.0/saml2_subject_confirmation_data.i | 75 - swig/saml-2.0/saml2_subject_locality.i | 63 - swig/saml-2.0/samlp2_artifact_resolve.i | 150 - swig/saml-2.0/samlp2_artifact_response.i | 183 - swig/saml-2.0/samlp2_assertion_id_request.i | 150 - swig/saml-2.0/samlp2_attribute_query.i | 177 - swig/saml-2.0/samlp2_authn_query.i | 181 - swig/saml-2.0/samlp2_authn_request.i | 244 - swig/saml-2.0/samlp2_authz_decision_query.i | 195 - swig/saml-2.0/samlp2_extensions.i | 55 - swig/saml-2.0/samlp2_idp_entry.i | 67 - swig/saml-2.0/samlp2_idp_list.i | 73 - swig/saml-2.0/samlp2_logout_request.i | 200 - swig/saml-2.0/samlp2_manage_name_id_request.i | 206 - swig/saml-2.0/samlp2_name_id_mapping_request.i | 202 - swig/saml-2.0/samlp2_name_id_mapping_response.i | 200 - swig/saml-2.0/samlp2_name_id_policy.i | 67 - swig/saml-2.0/samlp2_request_abstract.i | 103 - swig/saml-2.0/samlp2_requested_authn_context.i | 87 - swig/saml-2.0/samlp2_response.i | 200 - swig/saml-2.0/samlp2_scoping.i | 77 - swig/saml-2.0/samlp2_status.i | 87 - swig/saml-2.0/samlp2_status_code.i | 73 - swig/saml-2.0/samlp2_status_detail.i | 55 - swig/saml-2.0/samlp2_status_response.i | 121 - swig/saml-2.0/samlp2_subject_query_abstract.i | 160 - swig/saml-2.0/samlp2_terminate.i | 55 - swig/ws/Makefile.am | 21 - swig/ws/inheritance.h | 17 - swig/ws/main.h | 34 - swig/ws/wsa_attributed_any.i | 67 - swig/ws/wsa_attributed_qname.i | 68 - swig/ws/wsa_attributed_unsigned_long.i | 67 - swig/ws/wsa_attributed_uri.i | 68 - swig/ws/wsa_endpoint_reference.i | 109 - swig/ws/wsa_metadata.i | 67 - swig/ws/wsa_problem_action.i | 85 - swig/ws/wsa_reference_parameters.i | 67 - swig/ws/wsa_relates_to.i | 72 - swig/ws/wsse_embedded.i | 71 - swig/ws/wsse_reference.i | 75 - swig/ws/wsse_security_header.i | 67 - swig/ws/wsse_security_token_reference.i | 75 - swig/ws/wsse_transformation_parameters.i | 67 - swig/ws/wsse_username_token.i | 71 - swig/ws/wsu_timestamp.i | 79 - swig/wsf-support.i.in | 1 - swig/wsf2-support.i | 1 - 250 files changed, 31372 deletions(-) commit bec8672cc57d9afa3da88aa7bf0e251d3b274b5c Author: Benjamin Dauvergne Date: Mon Jan 25 23:47:43 2010 +0000 Add new macro lasso_list_add_new_xml_node * lasso/utils.h: fix lasso_list_add_xml_node, it must copy the node before assigning it. add lasso_list_add_new_xml_node for keeping the old behaviour. * lasso/xml/xml.c: fix use of lasso_list_add_xml_node, because copying the node before assigning it is a leak now. lasso/utils.h | 6 ++++++ lasso/xml/xml.c | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) commit e4e20f8d02c36336c5a705c500a88175e4aad33e Author: Benjamin Dauvergne Date: Mon Jan 25 12:47:02 2010 +0000 in bindings/ghashtable.h, Add missing unused argument hints bindings/ghashtable.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 7899b27221a2cac4a74ccb1aaa2e917f100a1c98 Author: Benjamin Dauvergne Date: Mon Jan 25 12:47:01 2010 +0000 SAML 2.0 Logout: when in an SP initiated logout, lasso_logout_build_response_msg is the finishing call * lasso/saml-2.0/logout.c: when calling lasso_logout_build_response_msg(), if we known that we are in the middle of an SP initiated logout, i.e. if initial_remote_providerID is not NULL, then we can restore the intial response. lasso/saml-2.0/logout.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) commit 9630852710721ad496ee1fa66204a6547275db6d Author: Benjamin Dauvergne Date: Mon Jan 25 12:46:59 2010 +0000 Fix name of LASSO_WSSEC_BAD_PASSWORD * lasso/errors.c lasso/errors.h: LASSO_WSSE_BAD_PASSWORD -> LASSO_WSSEC_ERROR_BAD_PASSWORD * lasso/xml/ws/wsse_username_token.c: update client code. lasso/errors.c | 2 -- lasso/errors.h | 4 ++-- lasso/xml/ws/wsse_username_token.c | 4 ++-- 3 files changed, 4 insertions(+), 6 deletions(-) commit 34a2c36e577f1752b4bb635dc1cfb12d3d5a1fd5 Author: Benjamin Dauvergne Date: Mon Jan 25 12:46:57 2010 +0000 Bindings java: cast return value of special constructors * bindings/java/lang.py: in the JAVA API special constructors are made to return their real type, but usual GObject constructors return their base type (here LassoNode) so we have to cast it. bindings/java/lang.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 54ab7a096952d568a064d0255686312b9751b84b Author: Benjamin Dauvergne Date: Mon Jan 25 12:46:56 2010 +0000 Export more assertion access API for LassoSession * lasso/id-ff/session.c lasso/id-ff/session.h lasso/id-ff/sessionprivate.h: export lasso_session_get_assertion(), lasso_session_add_assertion() and lasso_session_remove_assertion(). remove them from private header. * docs/reference/lasso/lasso-sections.txt: update documentation docs/reference/lasso/lasso-sections.txt | 3 +++ lasso/id-ff/session.c | 2 +- lasso/id-ff/session.h | 5 +++++ lasso/id-ff/sessionprivate.h | 5 ----- 4 files changed, 9 insertions(+), 6 deletions(-) commit 4528dab1262f2b253f5d996fb980a7e5331d03b9 Author: Benjamin Dauvergne Date: Thu Jan 21 17:54:48 2010 +0000 Bindings: remove useless overrides * bindings/overrides.xml: It is no more needed to force return type of constructors to their real types, the bindings check the type dynamically anyway. bindings/overrides.xml | 11 ----------- 1 file changed, 11 deletions(-) commit 83cc1803ec449fccf991be28102cd04f575e9fb7 Author: Benjamin Dauvergne Date: Thu Jan 21 17:54:46 2010 +0000 Fix GHashTable backward compatibility header * lasso/ghashtable.h: g_hash_table_remove_all_nodes is not a public function, use g_hash_table_foreach_remove instead. bindings/ghashtable.h | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) commit 3c9994f7072d6024f7b951971d91cb1a747d3231 Author: Benjamin Dauvergne Date: Wed Jan 20 13:33:50 2010 +0000 in saml2_name_id.c, include utils.h to benefit from replacement for g_strcmp0 lasso/xml/saml-2.0/saml2_name_id.c | 1 + 1 file changed, 1 insertion(+) commit 6817af36a679e7bc3ba76a10ba607b9d8201878a Author: Benjamin Dauvergne Date: Wed Jan 20 13:33:48 2010 +0000 Fix LASSO_WSSEC_BAD_PASSWORD error, reformat wsse_username_token.c * lasso/errors.h: change error id and error name for LASSO_WSSEC_BAD_PASSWORD * lasso/xml/ws/wsse_username_token.c: update reference to LASSO_WSSEC_BAD_PASSWORD. reformat line longer than 100 characters. lasso/errors.h | 4 ++-- lasso/xml/ws/wsse_username_token.c | 31 ++++++++++++++++++++----------- 2 files changed, 22 insertions(+), 13 deletions(-) commit abd2fee5c436a789b6dc5653f656a5ca859c0311 Author: Benjamin Dauvergne Date: Tue Jan 19 15:03:56 2010 +0000 ID-WSF 2.0: add some annotations lasso/id-wsf-2.0/server.c | 2 +- lasso/id-wsf-2.0/session.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 657a37772f5fa61d1e54bf9134e370d83c3a27c9 Author: Benjamin Dauvergne Date: Tue Jan 19 12:44:50 2010 +0000 Core: in backward_comp.h, include string.h if g_strcmp0 is used * lasso/backward_comp.h: implementation of g_strcmp0 depends upon string.h. lasso/backward_comp.h | 2 ++ 1 file changed, 2 insertions(+) commit e7d93713fee4968c32245d7fd712d10249eeb572 Author: Benjamin Dauvergne Date: Tue Jan 19 11:01:02 2010 +0000 WS-Security: fix typo in name of string symbols * lasso/xml/idwsf_strings.h: uppercase define for WS-Securities SOAP faults. lasso/xml/idwsf_strings.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit c13c02c83f7ab89c5b9773db04d1f36bd14e2729 Author: Benjamin Dauvergne Date: Tue Jan 19 11:01:01 2010 +0000 WS: complete support for wsse:UsernameToken * docs/reference/lasso/lasso-sections.txt: add new functions and change type name in documentation. * lasso/errors.h lasso/errors.c: add an error to report password verification failure * lasso/xml/ws/wsse_username_token.h lasso/xml/ws/wsse_username_token.c: update support for wsse:UsernameToken up to version 1.1, implement digest and derived keys computations. * lasso/xml/idwsf_strings.h: add strings for Username WS-Security Token profile docs/reference/lasso/lasso-sections.txt | 11 +- lasso/errors.c | 2 + lasso/errors.h | 7 + lasso/xml/idwsf_strings.h | 30 +++ lasso/xml/ws/wsse_username_token.c | 321 ++++++++++++++++++++++++++++---- lasso/xml/ws/wsse_username_token.h | 61 +++--- 6 files changed, 361 insertions(+), 71 deletions(-) commit 5a4255225e5ace31327834f2e472d4490d5cdca0 Author: Benjamin Dauvergne Date: Tue Jan 19 10:44:27 2010 +0000 XML SAML-2.0: AuthnContext content is a xdf:choice so make content optional - lasso/xml/saml-2.0/saml2_authn_context.c: can contain at least one node among: - - - to approximate this possibility, we need to make any of them optional. should be a list but we cannot change it without breaking the ABI, so we will wait for this. lasso/xml/saml-2.0/saml2_authn_context.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 1e140530aade860f45632b9332ac4ac7c2ac3208 Author: Benjamin Dauvergne Date: Tue Jan 19 09:48:00 2010 +0000 make an explicit copy of lasso.doap to website/web/doap.rdf website/web/doap.rdf | 184 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 183 insertions(+), 1 deletion(-) commit 547dae06cad17c7290cdf81be9ceab320c505bd0 Author: Benjamin Dauvergne Date: Tue Jan 19 09:44:04 2010 +0000 Reduce news message to fit the news column website/web/news/14-release-2.2.90.xml | 107 +-------------------------------- 1 file changed, 3 insertions(+), 104 deletions(-) commit c4c6532bd48a766a2660bd7ae67be64c537add3c Author: Benjamin Dauvergne Date: Mon Jan 18 15:08:26 2010 +0000 updat download link website/web/download/index.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 6357680e793d51a1a60f18598ef9ccaee6b22cbb Author: Benjamin Dauvergne Date: Mon Jan 18 14:41:57 2010 +0000 ID-WSF 2.0: Add saml2_login.h to list of headers lasso/id-wsf-2.0/Makefile.am | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 976ff3a5e473d0f224a4c56fbb7a56ece14a7d1f Author: Benjamin Dauvergne Date: Mon Jan 18 14:08:24 2010 +0000 Documentation: wsse_security.xml is now wsse_security_header.xml docs/reference/lasso/lasso-docs.sgml | 1 - 1 file changed, 1 deletion(-) commit 48957430bcb035548effa1762a3329f36fbd196b Author: Benjamin Dauvergne Date: Mon Jan 18 14:08:22 2010 +0000 By default make autogen.sh to enable gtk doc autogen.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit fca7999dba11d951cca19c04cce494e44f32b28f Author: Benjamin Dauvergne Date: Mon Jan 18 13:50:15 2010 +0000 Bindings PHP5: rewire php5 tests to the makefiles, make them pass distcheck bindings/php5/Makefile.am | 2 +- bindings/php5/tests/Makefile.am | 1 + bindings/php5/tests/binding_tests.php | 2 +- bindings/php5/tests/binding_tests.sh | 2 +- bindings/php5/tests/profile_tests.php | 2 +- bindings/php5/tests/profile_tests.sh | 2 +- configure.ac | 1 + 7 files changed, 7 insertions(+), 5 deletions(-) commit c719916fcabdfc130c8a9876c9f80e801457b34c Author: Benjamin Dauvergne Date: Mon Jan 18 11:16:20 2010 +0000 in autogen.sh, move libtoolize and gtkdocize before aclocal autogen.sh | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) commit d2ff73c54f574334798db79689dac1ce260e31c2 Author: Benjamin Dauvergne Date: Mon Jan 18 11:15:29 2010 +0000 fix typo tests/Makefile.am | 1 - 1 file changed, 1 deletion(-) commit 3c08c3728bdfe476ff556f469c1de249211265b9 Author: Benjamin Dauvergne Date: Mon Jan 18 11:04:28 2010 +0000 Merge EXTRA_DIST declarations in tests/Makefile.am tests/Makefile.am | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) commit 4f5f45ee96bae7759a392313c93b57b19bef9afb Author: Benjamin Dauvergne Date: Mon Jan 18 10:49:16 2010 +0000 fix bad commit lasso.doap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit ca5e7bbdd0a8b96349ac515faa00dd3bf55326b8 Author: Benjamin Dauvergne Date: Mon Jan 18 10:47:50 2010 +0000 tag release 2.2.90 lasso.doap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 4190480894f48a303c60a56a5f91e7921d05c2d9 Author: Benjamin Dauvergne Date: Mon Jan 18 10:40:05 2010 +0000 Update changelog ChangeLog | 8807 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 8807 insertions(+) commit eb5acbbb1af0d8af1067fd6e947b3876493b3c28 Author: Benjamin Dauvergne Date: Mon Jan 18 10:04:01 2010 +0000 Change again date of release 2.2.90 NEWS | 2 +- lasso.doap | 2 +- website/web/news/14-release-2.2.90.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) commit 60f199e8cac1b19fc41294d303e24fe1cfeabb3f Author: Benjamin Dauvergne Date: Mon Jan 18 10:03:59 2010 +0000 Add tests/valgrind to dist tarballs tests/Makefile.am | 2 ++ 1 file changed, 2 insertions(+) commit 523813ca7e73977d89a051ea27aa24511a8a6ea0 Author: Benjamin Dauvergne Date: Mon Jan 18 10:03:57 2010 +0000 Add autogen.sh and tools to EXTRA_DIST in top Makefile.am Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 02790870291449ae11d86cffd63eb599f1e59b4a Author: Benjamin Dauvergne Date: Mon Jan 18 10:03:54 2010 +0000 Documentation: distribute stylesheet, fix documentation comments, compelte lasso-sections.txt docs/lasso-book/Makefile.am | 2 +- docs/reference/lasso/lasso-sections.txt | 37 +++++++---------------------- lasso/backward_comp.h | 2 +- lasso/id-wsf/wsf_profile.c | 9 ++++++- lasso/lasso.c | 2 +- lasso/saml-2.0/assertion_query.h | 2 +- lasso/saml-2.0/profile.c | 5 ++-- lasso/utils.h | 2 +- lasso/xml/misc_text_node.c | 6 ++--- lasso/xml/saml-2.0/saml2_name_id.c | 4 ++-- lasso/xml/saml-2.0/samlp2_authn_request.h | 1 + lasso/xml/saml-2.0/samlp2_logout_request.h | 1 + lasso/xml/saml-2.0/samlp2_logout_response.h | 2 ++ lasso/xml/xml.c | 4 ++-- lasso/xml/xml.h | 6 ++--- 15 files changed, 39 insertions(+), 46 deletions(-) commit ec411327bf565596f37d6ad378f7b6ca86a6814a Author: Benjamin Dauvergne Date: Mon Jan 18 10:03:50 2010 +0000 Documentation: add empty lasso-overrides.txt, it seems to be necessary docs/reference/lasso/lasso-overrides.txt | 0 1 file changed, 0 insertions(+), 0 deletions(-) commit 674e6190dd80e7d939f5ced6dee894686ea697b3 Author: Benjamin Dauvergne Date: Mon Jan 18 10:03:48 2010 +0000 ID-WSF: mark API as Private not Internal lasso/id-wsf/wsf_utils.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit c4f55b276107cdaee35f19018f7030c715fb78b1 Author: Benjamin Dauvergne Date: Mon Jan 18 10:03:47 2010 +0000 Core: complete documentation on LassoSession lasso/id-ff/session.h | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) commit 8aa3a68f7b150f964f9740290fb099424920bab0 Author: Benjamin Dauvergne Date: Mon Jan 18 10:03:46 2010 +0000 Core: complete documentation on LassoProfile lasso/id-ff/profile.h | 49 +++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 41 insertions(+), 8 deletions(-) commit 8c58a03775c29613389825b5c5d1bcb2ec8406fd Author: Benjamin Dauvergne Date: Mon Jan 18 10:03:44 2010 +0000 Core: complete documentation on LassoLogin lasso/id-ff/login.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) commit 4382a57d695a44758f8050b178525f87affe880e Author: Benjamin Dauvergne Date: Mon Jan 18 10:03:43 2010 +0000 fix typo (transfer-none) -> (transfer none) lasso/id-ff/server.c | 2 +- lasso/id-wsf-2.0/soap_binding.c | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) commit f15973f2b65527547ee6bfc7f9924b9f458b179e Author: Benjamin Dauvergne Date: Mon Jan 18 10:03:41 2010 +0000 ID-WSF 1.0: change name of utils.{c,h} file for documentation parsing * utils.h: this header has the same name as an other header which is not parsed by the documentation (lasso/utils.h) and the documentation process just match by filename, so we rename it. lasso/id-wsf/Makefile.am | 4 ++-- lasso/id-wsf/{utils.c => wsf_utils.c} | 0 lasso/id-wsf/{utils.h => wsf_utils.h} | 0 3 files changed, 2 insertions(+), 2 deletions(-) commit 0694fb4d2157e89f26e9479c6fe9cb21b43e9bdd Author: Benjamin Dauvergne Date: Mon Jan 18 10:03:36 2010 +0000 Website: add news about 2.2.90 website/web/news/14-release-2.2.90.xml | 117 +++++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) commit 076d78fb21db1f2dfa44cf67e3a686aed0586980 Author: Benjamin Dauvergne Date: Sat Jan 16 15:55:54 2010 +0000 Add bindings/python/examples to dist file bindings/python/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 95cccdf3502a3f2b71f11bc54dd18c63932281cc Author: Benjamin Dauvergne Date: Sat Jan 16 15:14:14 2010 +0000 remove empty directory commit 3550a4180a0fd96108675450142c79fc5c84fff2 Author: Benjamin Dauvergne Date: Sat Jan 16 15:13:49 2010 +0000 remove empty directory commit 127f60b18c7243b53f311c68d42d04cfbaeb35b8 Author: Benjamin Dauvergne Date: Fri Jan 15 09:11:43 2010 +0000 Documentation: update lasso-sections.txt docs/reference/lasso/lasso-sections.txt | 77 ++++++++++----------------------- 1 file changed, 24 insertions(+), 53 deletions(-) commit f2db16ee97b8f0b09a2e1c2d686b5f70ca70d4e6 Author: Benjamin Dauvergne Date: Fri Jan 15 08:33:57 2010 +0000 Update doap file lasso.doap | 18 +++++++++++++++--- website/web/doap.rdf | 2 +- 2 files changed, 16 insertions(+), 4 deletions(-) commit 849f76d1fcdbd04470491d0fb3512cc5328fd1e4 Author: Benjamin Dauvergne Date: Fri Jan 15 08:26:31 2010 +0000 FIX ABI breakage between 2.2.1 and 2.2.2 in LassoSamlAdvice * lasso/xml/saml_advice.c lasso/xml/saml_advice.h: restore fields AssertionIDReference and Assertion, remove field any to restore state from 2.2.1 * lasso/id-ff/session.c: use xmlNode stored inside LassoSamlAssertion objects instead of accessing the 'any' list of xmlNode that was inserted in LassoSamlAdvice. lasso/id-ff/session.c | 6 +++--- lasso/xml/saml_advice.c | 5 ++--- lasso/xml/saml_advice.h | 6 +++++- 3 files changed, 10 insertions(+), 7 deletions(-) commit 41ddda5a85ce98a4d38931da4edb3f0db191e885 Author: Benjamin Dauvergne Date: Thu Jan 14 16:18:53 2010 +0000 FIX ABI breakage when addning new field to struct LassoSaml2AttributeValue lasso/xml/saml-2.0/saml2_attribute_value.c | 2 -- lasso/xml/saml-2.0/saml2_attribute_value.h | 1 - 2 files changed, 3 deletions(-) commit fe93e10999dce85a0a88a7060d5b4ec741cb650f Author: Benjamin Dauvergne Date: Thu Jan 14 16:18:51 2010 +0000 Fix ABI breakage due to change of constant name from LASSO_SOAP_FAULT_REDIRECT_REQUEST to LASSO_SOAP_ERROR_REDIRECT_REQUEST_FAULT lasso/build_strerror.py | 4 ++-- lasso/errors.h | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) commit c410c680b70b5f8c86a43442b6b106f31353bae7 Author: Benjamin Dauvergne Date: Thu Jan 14 16:18:49 2010 +0000 Fix ABI breakage with respect to 2.2.1 lasso/errors.c | 2 ++ lasso/errors.h | 6 ++++++ 2 files changed, 8 insertions(+) commit 014e6c9194204b393ba32fd206e0d237c23cca27 Author: Benjamin Dauvergne Date: Thu Jan 14 16:18:48 2010 +0000 Documentation: add lasso_profile_set/get_signature_hint to lasso-sections.txt docs/reference/lasso/lasso-sections.txt | 3 +++ 1 file changed, 3 insertions(+) commit a10be40637ef12beda7ec7b8f316e3e47bad15ec Author: Benjamin Dauvergne Date: Thu Jan 14 16:18:44 2010 +0000 Add files listings the ABI of Lasso abi/abi-2.1.1 | 827 +++++++++++++++++++++++++++++++++++++++++++++ abi/abi-2.2.1 | 847 ++++++++++++++++++++++++++++++++++++++++++++++ abi/abi-2.2.2 | 1027 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ abi/abi-2.2.90 | 990 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 3691 insertions(+) commit 9f57d30ebc834e3f45008283349387303d9d29d5 Author: Benjamin Dauvergne Date: Thu Jan 14 16:18:42 2010 +0000 Tools: add script to generate a listing of Lasso ABI * tools/api.py: use parser from the binding generator to output a list of symbols * bindings/bindings.py; add private flags to not clobber 'private' fields of structures or methods not exported in bindings like _get_type. bindings/bindings.py | 11 ++++++----- tools/api.py | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 5 deletions(-) commit 0d1b1a624a43add1fb2c892da528ab196acd4878 Author: Benjamin Dauvergne Date: Thu Jan 14 16:18:39 2010 +0000 ID-WSF: separate ID-WSF strings into their own header lasso/xml/Makefile.am | 1 + lasso/xml/idwsf_strings.h | 1270 +++++++++++++++++++++++++++++++++++++++++++++ lasso/xml/strings.h | 1247 +------------------------------------------- 3 files changed, 1283 insertions(+), 1235 deletions(-) commit dac5738c6b127660261ac24b682f3e0be23164bf Author: Benjamin Dauvergne Date: Thu Jan 14 16:18:38 2010 +0000 start NEWS file for 2.2.90 NEWS | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) commit f3d87217f27767d06f3f1e1ba5f7f9cc5fc89ee2 Author: Benjamin Dauvergne Date: Thu Jan 14 16:18:36 2010 +0000 Tests integration: remove save_html hooks, after fed termination logout button should still be there tests/integration/saml2/test_02_slo.py | 1 - tests/integration/saml2/test_03_defederation.py | 12 +++++++----- 2 files changed, 7 insertions(+), 6 deletions(-) commit 020a7583ab3fb66b3a4dff49238401424c7c5978 Author: Benjamin Dauvergne Date: Thu Jan 14 16:18:34 2010 +0000 Bindings python: use is_cstring for matching GList element type bindings/python/lang.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit ea39436622d6f9283049804613e4b36d5e944330 Author: Benjamin Dauvergne Date: Thu Jan 14 16:18:33 2010 +0000 SAML 2.0 Logout: undo some change to when the assertion is removed * lasso/saml-2.0/logout.c: - do not remove the assertion in init_request, as before only if all fails (event REDIRECT is unsupported). - in process_response_msg remove the assertion if we are the IdP or if there is no error. - in validate_request, remove the assertion if there is no error. I think that there will be more updates to this in the future. lasso/saml-2.0/logout.c | 32 +++++++++----------------------- 1 file changed, 9 insertions(+), 23 deletions(-) commit 98a48032cb9c9c139c0a70a89c645ed68d016ff5 Author: Benjamin Dauvergne Date: Thu Jan 14 16:18:31 2010 +0000 Bindings: make is_cstring usable with tuple and with direct type bindings/utils.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit f87a55e9ef09d79c0b1ec027a0fa29d2fe1f3c85 Author: Benjamin Dauvergne Date: Thu Jan 14 16:18:29 2010 +0000 Core: remove warning emiting macros from lasso_session_remove_assertion * lasso/id-ff/session.c: we already return error code, no need to log more warnings. lasso/id-ff/session.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit 9d544c49d0610e421bf269cccc71e720a53eccde Author: Benjamin Dauvergne Date: Thu Jan 14 16:18:28 2010 +0000 SAML 2.0: report missing request when creating artifact resolve response, fix typo in lasso_saml20_profile_build_post_response_msg lasso/saml-2.0/profile.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit 869768bc359a180a4542a158d054e2669cb63f06 Author: Benjamin Dauvergne Date: Thu Jan 14 16:18:26 2010 +0000 SAML 2.0: Fix typo in lasso_saml20_login_build_authn_response_msg lasso/saml-2.0/login.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit b30498aec6ceeaa50c5d977bd16af14e9548c194 Author: Benjamin Dauvergne Date: Thu Jan 14 16:18:24 2010 +0000 ID-FF&SAML2: if use is not defined on a key descriptor use the key for any use * lasso/id-ff/provider.c lasso/saml-2.0/provider.c: if the "use" attribute is not set on a KeyDescriptor, use the key for signing and encryption. lasso/id-ff/provider.c | 4 ++-- lasso/saml-2.0/provider.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) commit c14fdb11ec20721627cf8ee8dc589bc0fa7e6cd0 Author: Benjamin Dauvergne Date: Tue Jan 12 15:40:29 2010 +0000 Tests SAML2: use & test encryption tests/login_tests_saml2.c | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) commit 9554334c91bb9075e79598b1be885a831169379d Author: Benjamin Dauvergne Date: Tue Jan 12 15:40:28 2010 +0000 SAML 2.0: add saml2_helper.h to include files to install lasso/saml-2.0/Makefile.am | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 9efcaac3f3a9e90beec783bd0da728380830f8bc Author: Benjamin Dauvergne Date: Tue Jan 12 15:40:26 2010 +0000 Tests: fix inclusion of id-wsf 2.0 tests tests/Makefile.am | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) commit cc502b2b9880db5fa1b2b267bdfddc9f16284a0d Author: Benjamin Dauvergne Date: Tue Jan 12 15:40:24 2010 +0000 Core: add new SAML 2.0 public header to top level header lasso.h lasso/lasso.h | 2 ++ 1 file changed, 2 insertions(+) commit df258845c76feecadfccd4e308187977e21ece3a Author: Benjamin Dauvergne Date: Tue Jan 12 15:40:23 2010 +0000 ID-WSF 2.0: remote saml2_login_private.h from Makefile.am lasso/id-wsf-2.0/Makefile.am | 1 - 1 file changed, 1 deletion(-) commit b77c9cf2e8b3e631a09baf319117a8cf215bc0c2 Author: Benjamin Dauvergne Date: Tue Jan 12 15:40:21 2010 +0000 Bindings: add support for time_t to bindings, add support for 'string' type for list in java binding bindings/java/lang.py | 4 ++-- bindings/php5/wrapper_source.py | 2 +- bindings/python/lang.py | 2 +- bindings/utils.py | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) commit 7142d50d16981d69db575e30e7d9883896802294 Author: Benjamin Dauvergne Date: Tue Jan 12 15:40:20 2010 +0000 in saml2_helper.{c,h}, remote const modifier from time_t type lasso/saml-2.0/saml2_helper.c | 2 +- lasso/saml-2.0/saml2_helper.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 436c8cb23292bf5e05cb2d2a4fc8961dacc43094 Author: Benjamin Dauvergne Date: Tue Jan 12 15:40:18 2010 +0000 in saml-2.0/name_id_management.c: handle NewEncryptedID, only encrypt if needed lasso/saml-2.0/name_id_management.c | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) commit e956ca8818791cc31ae634be8c48ce144e6edc63 Author: Benjamin Dauvergne Date: Tue Jan 12 15:40:16 2010 +0000 in saml-2.0/logout.c: remove commented code, only encrypt if needed, intialize local variables lasso/saml-2.0/logout.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) commit 59f8ae09445ec891262c79ca6cdcda027d263726 Author: Benjamin Dauvergne Date: Tue Jan 12 15:40:15 2010 +0000 in lasso_saml20_login_init_idp_initiated_auhtn_request, do not use init_authn_request, manually create the request. lasso/saml-2.0/login.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) commit 76ae81022c2591640eae0f92eb79e3d154260805 Author: Benjamin Dauvergne Date: Tue Jan 12 15:40:14 2010 +0000 in lasso_saml20_login_init_authn_request, use saml-2.0/profile.c functions to reduce code size lasso/saml-2.0/login.c | 39 +++++++++++++-------------------------- 1 file changed, 13 insertions(+), 26 deletions(-) commit 63206b32f27199fd6be41b401dbbc6bcd044e419 Author: Benjamin Dauvergne Date: Tue Jan 12 15:40:12 2010 +0000 in saml-2.0/profile.c, in lasso_saml20_build_response_msg, when no url is given, only stop for bindings needing one lasso/saml-2.0/profile.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) commit 39eba085a54a515cdac1c48cabd4138840316d4b Author: Benjamin Dauvergne Date: Tue Jan 12 15:40:11 2010 +0000 in saml-2.0/profile.c, in lasso_saml20_profile_init_response make direct access lasso/saml-2.0/profile.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit 926bfeee2c8961cfdb29715b16ae5fdd14a67479 Author: Benjamin Dauvergne Date: Tue Jan 12 15:40:09 2010 +0000 in saml-2.0/profile.c, in lasso_saml20_init_request better check for supported bindings, do not check for identity or session, report SESSION_NOT_FOUND only if first_in_session is used, do not stop on missing name_id. lasso/saml-2.0/profile.c | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) commit 845e302415fcd9e833dd47496d65345be6a42ab6 Author: Benjamin Dauvergne Date: Tue Jan 12 15:40:08 2010 +0000 in saml2_helper.c, remove dead code lasso/saml-2.0/saml2_helper.c | 180 ------------------------------------------ 1 file changed, 180 deletions(-) commit e06e9db029dfee9c6f3be8737f5cc88d8d964435 Author: Benjamin Dauvergne Date: Tue Jan 12 15:40:07 2010 +0000 SAML 2.0: in lasso_saml20_provider_accept_http_method, add HTTP-Artifact-POST case, better check for bad inputs, and handle special SingleSignOn case lasso/saml-2.0/provider.c | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) commit 003916b452fc5c049f7de07c7603c08ebee3c9c8 Author: Benjamin Dauvergne Date: Tue Jan 12 15:40:06 2010 +0000 Core Profile: remove need for identity in lasso_profile_get_nameIdentifier lasso/id-ff/profile.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) commit 9caacc3bb61f090035c4b55ddf7ae4d281db06e7 Author: Benjamin Dauvergne Date: Tue Jan 12 15:40:04 2010 +0000 Core Server: make default to load signing private key also as encryption private key lasso/id-ff/server.c | 9 +++++++++ 1 file changed, 9 insertions(+) commit 5ac1c303cc149927b9721117119d9e9a9dbe9371 Author: Benjamin Dauvergne Date: Tue Jan 12 15:40:03 2010 +0000 Commit to delete lasso/xml/xml.c | 2 ++ 1 file changed, 2 insertions(+) commit 413932306d6431be184bb20cf9ab9fbfd6453d19 Author: Benjamin Dauvergne Date: Tue Jan 12 15:40:01 2010 +0000 Core: rewrite lasso_assertion_encrypt using lasso_xmlsect_load_key and add recipient argument lasso/xml/saml-2.0/samlp2_response.c | 4 +-- lasso/xml/tools.c | 47 +++--------------------------------- 2 files changed, 6 insertions(+), 45 deletions(-) commit a237cd105702f66b9ecf6727059d0bdcec096bae Author: Benjamin Dauvergne Date: Tue Jan 12 15:39:59 2010 +0000 Core: add simple function to load key from any format lasso/xml/private.h | 3 ++- lasso/xml/tools.c | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+), 1 deletion(-) commit d42c16e2391e0f03adc75d199ec40b92cbf9c1d6 Author: Benjamin Dauvergne Date: Tue Jan 12 15:39:57 2010 +0000 Core Node: add args to lasso_node_encrypt to set recipient of an encrypted element lasso/id-ff/login.c | 2 +- lasso/saml-2.0/login.c | 7 ++++--- lasso/saml-2.0/profile.c | 3 ++- lasso/saml-2.0/provider.c | 3 ++- lasso/xml/private.h | 2 +- lasso/xml/tools.c | 1 - lasso/xml/xml.c | 7 +++++-- 7 files changed, 15 insertions(+), 10 deletions(-) commit ddbe21ae5b4ffd6035ffd3ae1d48b6f02f0df61d Author: Benjamin Dauvergne Date: Tue Jan 12 15:39:55 2010 +0000 Binding python: provide old binding name for set_encryptionMode bindings/python/lang.py | 1 + 1 file changed, 1 insertion(+) commit 2ff13e5414a25e85a79417413e6bca36b44f4153 Author: Benjamin Dauvergne Date: Tue Jan 12 15:39:48 2010 +0000 SAML 2.0: overhaul for ubuquitous binding support, still need work for HTTP-Artefact lasso/errors.c | 10 + lasso/errors.h | 17 +- lasso/id-ff/login.c | 2 +- lasso/id-ff/logout.c | 9 +- lasso/id-ff/profile.c | 83 +++- lasso/id-ff/provider.c | 13 + lasso/id-ff/provider.h | 2 + lasso/saml-2.0/assertion_query.c | 66 +-- lasso/saml-2.0/ecp.c | 1 + lasso/saml-2.0/login.c | 650 ++++++++++++------------- lasso/saml-2.0/loginprivate.h | 2 +- lasso/saml-2.0/logout.c | 334 ++++--------- lasso/saml-2.0/logoutprivate.h | 2 +- lasso/saml-2.0/name_id_management.c | 38 +- lasso/saml-2.0/profile.c | 702 ++++++++++++++------------- lasso/saml-2.0/profileprivate.h | 25 +- lasso/saml-2.0/provider.c | 2 +- lasso/saml-2.0/saml2_helper.c | 4 +- lasso/saml-2.0/saml2_helper.h | 11 +- lasso/xml/saml-2.0/samlp2_request_abstract.c | 4 +- lasso/xml/saml-2.0/samlp2_status_response.c | 4 +- 21 files changed, 954 insertions(+), 1027 deletions(-) commit 0988cc2ec8650ee7bd30b4869a9b0afec704c89f Author: Benjamin Dauvergne Date: Tue Jan 12 15:39:45 2010 +0000 Core: in profile.c, profile.h, profileprivate.h, add a new attribute to express signature needs lasso/id-ff/profile.c | 32 ++++++++++++++++++++++++++++++++ lasso/id-ff/profile.h | 8 ++++++++ lasso/id-ff/profileprivate.h | 1 + 3 files changed, 41 insertions(+) commit 601617843b3bf1e203db821879ffdf63d83d6d04 Author: Benjamin Dauvergne Date: Tue Jan 12 15:39:43 2010 +0000 Core: in identity.c, do not emit trace when lasso_identity_get_federation fails lasso/id-ff/identity.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) commit ac3a687518a7635ab03b21fe2bccbcbc03559550 Author: Benjamin Dauvergne Date: Tue Jan 12 15:39:42 2010 +0000 XML Core: in xml.c, private.h, add a lasso_node_remove_signature function lasso/xml/private.h | 2 ++ lasso/xml/xml.c | 23 +++++++++++++++++++++++ 2 files changed, 25 insertions(+) commit 01dad5fd05974e00274c63373af698bb8486c18a Author: Benjamin Dauvergne Date: Tue Jan 12 15:39:40 2010 +0000 XML: fill node_data->{certificate,private_key}_file_offset for nodes with signatures lasso/xml/id-wsf-2.0/is_interaction_statement.c | 4 ++++ lasso/xml/saml-2.0/saml2_assertion.c | 4 ++++ lasso/xml/saml-2.0/samlp2_request_abstract.c | 4 ++++ lasso/xml/saml-2.0/samlp2_status_response.c | 4 ++++ lasso/xml/saml_assertion.c | 3 +++ lasso/xml/samlp_request_abstract.c | 4 ++++ lasso/xml/samlp_response_abstract.c | 12 ++++++++---- 7 files changed, 31 insertions(+), 4 deletions(-) commit d461fe3957ca2d0fe87247f70ca4c0a695e36cbe Author: Benjamin Dauvergne Date: Tue Jan 12 15:39:38 2010 +0000 Core: in xml/private.h, add new field to LassoNodeClassData for private_key and certificate handling lasso/xml/private.h | 2 ++ 1 file changed, 2 insertions(+) commit cf45d9fc99e50d5db4334e25a25ef296fb15a779 Author: Benjamin Dauvergne Date: Tue Jan 12 15:39:37 2010 +0000 Core: in provider.h, add LASSO_PROVIDER_ROLE_BOTH lasso/id-ff/provider.h | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) commit 1eb34af43fcc390aa35d36291c97573bed49437d Author: Benjamin Dauvergne Date: Tue Jan 12 15:39:35 2010 +0000 Core: in profile.c, make lasso_profile_get_nameIdentifier work for transient federations * lasso/id-ff/profile.c: if no LassoIdentity is accessible try to get a name identifier through the assertion in the LassoSession object. This allows the logout profile to work without an identity object (which is normal since logout does not modify the federation status). lasso/saml-2.0/profile.c | 288 +++++++++++++++++++++-------------------------- 1 file changed, 129 insertions(+), 159 deletions(-) commit 85161f15a7793336867c531883ee89f7e6797ca2 Author: Benjamin Dauvergne Date: Tue Jan 12 15:39:34 2010 +0000 Core: in provider.h, add new SAML 2.0 HTTP-Method, PAOS lasso/id-ff/provider.h | 2 ++ 1 file changed, 2 insertions(+) commit 4fe35b69cc6f4e22a0886b64e96203c402e69f2b Author: Benjamin Dauvergne Date: Tue Jan 12 15:39:33 2010 +0000 SAML 2.0: add new function to factorize adding signature to a message lasso/saml-2.0/profile.c | 50 +++++++++++++++++++++++++++++++++++++++++ lasso/saml-2.0/profileprivate.h | 2 ++ 2 files changed, 52 insertions(+) commit 56bd9e24052092de2cfe9562320a9291974366c5 Author: Benjamin Dauvergne Date: Tue Jan 12 15:39:31 2010 +0000 Fix mitm attack using the AssertionConsumerURL property on requests * lasso/saml-2.0/login.c: check that the URL is know before using it * lasso/saml-2.0/provider.c lasso/saml-2.0/providerprivate.h: add a function to check that an URL corresponds to a know AssertionConsumer of the given provider. lasso/saml-2.0/login.c | 6 ++++- lasso/saml-2.0/provider.c | 54 ++++++++++++++++++++++++++++++++++++++++ lasso/saml-2.0/providerprivate.h | 2 +- 3 files changed, 60 insertions(+), 2 deletions(-) commit 21cc1bf7eeb82d4f5a0dc3e8ca7e73fc5562072d Author: Benjamin Dauvergne Date: Tue Jan 12 15:39:28 2010 +0000 ID-WSF 2.0: fix in documentation lasso/id-wsf-2.0/profile.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit fcd8739f49ce231f002604d31068087daa6e2fb7 Author: Benjamin Dauvergne Date: Mon Jan 4 09:16:00 2010 +0000 Bindings: simplify GList handling bindings/bindings.py | 18 ++++---- bindings/java/lang.py | 58 +++++++++++++------------- bindings/php5/php_code.py | 4 +- bindings/php5/wrapper_source.py | 42 +++++++++---------- bindings/python/lang.py | 92 +++++++++++++++++++++++++---------------- bindings/utils.py | 2 +- 6 files changed, 120 insertions(+), 96 deletions(-) commit 914a176d99e7686cb3d0207a4d1429bf6c944cc5 Author: Benjamin Dauvergne Date: Mon Jan 4 09:15:55 2010 +0000 XML: add element type annotation to all GList fields lasso/xml/disco_description.h | 4 ++-- lasso/xml/disco_encrypted_resource_id.h | 2 +- lasso/xml/disco_insert_entry.h | 2 +- lasso/xml/disco_modify.h | 4 ++-- lasso/xml/disco_options.h | 2 +- lasso/xml/disco_query.h | 2 +- lasso/xml/disco_query_response.h | 2 +- lasso/xml/disco_service_instance.h | 2 +- lasso/xml/dst_modify.h | 2 +- lasso/xml/dst_query.h | 2 +- lasso/xml/dst_query_response.h | 2 +- lasso/xml/id-wsf-2.0/disco_endpoint_context.h | 8 ++++---- lasso/xml/id-wsf-2.0/disco_keys.h | 2 +- lasso/xml/id-wsf-2.0/disco_options.h | 2 +- lasso/xml/id-wsf-2.0/disco_requested_service.h | 10 +++++----- lasso/xml/id-wsf-2.0/disco_security_context.h | 4 ++-- lasso/xml/id-wsf-2.0/disco_service_context.h | 2 +- lasso/xml/id-wsf-2.0/disco_svc_md_association_add.h | 2 +- lasso/xml/id-wsf-2.0/disco_svc_md_association_delete.h | 2 +- lasso/xml/id-wsf-2.0/disco_svc_md_association_query.h | 2 +- lasso/xml/id-wsf-2.0/disco_svc_md_association_query_response.h | 2 +- lasso/xml/id-wsf-2.0/disco_svc_md_delete.h | 2 +- lasso/xml/id-wsf-2.0/disco_svc_md_query.h | 2 +- lasso/xml/id-wsf-2.0/disco_svc_md_register_response.h | 2 +- lasso/xml/id-wsf-2.0/dstref_query_response.h | 2 +- lasso/xml/id-wsf-2.0/ims_identity_mapping_request.h | 2 +- lasso/xml/id-wsf-2.0/ims_identity_mapping_response.h | 2 +- lasso/xml/id-wsf-2.0/is_inquiry.h | 6 +++--- lasso/xml/id-wsf-2.0/is_interaction_request.h | 2 +- lasso/xml/id-wsf-2.0/is_interaction_response.h | 4 ++-- lasso/xml/id-wsf-2.0/is_interaction_statement.h | 2 +- lasso/xml/id-wsf-2.0/is_select.h | 2 +- lasso/xml/id-wsf-2.0/ps_add_to_collection_request.h | 2 +- lasso/xml/id-wsf-2.0/ps_list_members_response.h | 2 +- lasso/xml/id-wsf-2.0/ps_notification.h | 2 +- lasso/xml/id-wsf-2.0/ps_notify.h | 2 +- lasso/xml/id-wsf-2.0/ps_object.h | 6 +++--- lasso/xml/id-wsf-2.0/ps_query_objects_response.h | 2 +- lasso/xml/id-wsf-2.0/ps_remove_collection_request.h | 2 +- lasso/xml/id-wsf-2.0/ps_remove_entity_request.h | 2 +- lasso/xml/id-wsf-2.0/ps_remove_from_collection_request.h | 2 +- lasso/xml/id-wsf-2.0/ps_resolve_identifier_request.h | 2 +- lasso/xml/id-wsf-2.0/ps_resolve_identifier_response.h | 2 +- lasso/xml/id-wsf-2.0/ps_set_object_info_request.h | 2 +- lasso/xml/id-wsf-2.0/sb2_credentials_context.h | 2 +- lasso/xml/id-wsf-2.0/sb2_target_identity.h | 2 +- lasso/xml/id-wsf-2.0/sb2_user_interaction_header.h | 2 +- lasso/xml/id-wsf-2.0/sec_transited_provider_path.h | 2 +- lasso/xml/id-wsf-2.0/subs_notification.h | 2 +- lasso/xml/id-wsf-2.0/subs_subscription.h | 2 +- lasso/xml/id-wsf-2.0/subsref_app_data.h | 2 +- lasso/xml/id-wsf-2.0/subsref_create.h | 6 +++--- lasso/xml/id-wsf-2.0/subsref_data_response.h | 2 +- lasso/xml/id-wsf-2.0/subsref_delete.h | 2 +- lasso/xml/id-wsf-2.0/subsref_modify.h | 6 +++--- lasso/xml/id-wsf-2.0/subsref_notification.h | 2 +- lasso/xml/id-wsf-2.0/subsref_notify.h | 2 +- lasso/xml/id-wsf-2.0/subsref_query.h | 6 +++--- lasso/xml/id-wsf-2.0/subsref_query_response.h | 4 ++-- lasso/xml/id-wsf-2.0/subsref_subscription.h | 2 +- lasso/xml/is_inquiry.h | 8 ++++---- lasso/xml/is_interaction_request.h | 2 +- lasso/xml/is_interaction_response.h | 4 ++-- lasso/xml/is_select.h | 2 +- lasso/xml/is_user_interaction.h | 2 +- lasso/xml/sa_credentials.h | 2 +- lasso/xml/sa_password_transforms.h | 2 +- lasso/xml/sa_sasl_request.h | 2 +- lasso/xml/sa_sasl_response.h | 8 ++++---- lasso/xml/sa_transform.h | 2 +- lasso/xml/saml-2.0/saml2_advice.h | 4 ++-- lasso/xml/saml-2.0/saml2_attribute.h | 2 +- lasso/xml/saml-2.0/saml2_attribute_value.h | 2 +- lasso/xml/saml-2.0/saml2_evidence.h | 4 ++-- lasso/xml/saml_attribute.h | 2 +- lasso/xml/saml_attribute_statement.h | 2 +- lasso/xml/saml_attribute_value.h | 2 +- lasso/xml/saml_audience_restriction_condition.h | 2 +- lasso/xml/saml_authentication_statement.h | 2 +- lasso/xml/saml_conditions.h | 4 ++-- lasso/xml/saml_subject_confirmation.h | 2 +- lasso/xml/soap-1.1/soap_body.h | 2 +- lasso/xml/soap-1.1/soap_detail.h | 2 +- lasso/xml/soap-1.1/soap_header.h | 2 +- 84 files changed, 116 insertions(+), 116 deletions(-) commit 65642d732ca53e4431d7adc82d9b92b80ed682bd Author: Benjamin Dauvergne Date: Mon Jan 4 09:15:48 2010 +0000 Bindings: in bindings/python/Makefile.am, precise generated files dependencies bindings/python/Makefile.am | 2 ++ 1 file changed, 2 insertions(+) commit 42c81da4f49936e498e62f64628cdfb589f908cc Author: Benjamin Dauvergne Date: Mon Jan 4 09:15:42 2010 +0000 XML: move SOAP API to its own sub directory configure.ac | 1 + lasso/Makefile.am | 1 + lasso/id-ff/profileprivate.h | 2 -- lasso/id-wsf-2.0/data_service.c | 3 ++- lasso/id-wsf-2.0/discovery.c | 2 ++ lasso/id-wsf-2.0/profile.c | 2 +- lasso/id-wsf-2.0/profile.h | 2 +- lasso/id-wsf-2.0/soap_binding.h | 3 ++- lasso/id-wsf/data_service.c | 2 +- lasso/id-wsf/interaction_profile_service.c | 4 ++-- lasso/id-wsf/wsf_profile.c | 6 +++--- lasso/id-wsf/wsf_profile.h | 4 ++-- lasso/id-wsf/wsf_profile_private.h | 2 +- lasso/xml/Makefile.am | 12 +---------- lasso/xml/soap-1.1/Makefile.am | 26 +++++++++++++++++++++++ lasso/xml/{ => soap-1.1}/soap_body.c | 5 ++--- lasso/xml/{ => soap-1.1}/soap_body.h | 2 +- lasso/xml/{ => soap-1.1}/soap_detail.c | 4 ++-- lasso/xml/{ => soap-1.1}/soap_detail.h | 2 +- lasso/xml/{ => soap-1.1}/soap_envelope.c | 9 +++++--- lasso/xml/{ => soap-1.1}/soap_envelope.h | 6 +++--- lasso/xml/{ => soap-1.1}/soap_fault.c | 4 ++-- lasso/xml/{ => soap-1.1}/soap_fault.h | 4 ++-- lasso/xml/{ => soap-1.1}/soap_header.c | 4 ++-- lasso/xml/{ => soap-1.1}/soap_header.h | 2 +- lasso/xml/soap-1.1/xml_soap11.h | 34 ++++++++++++++++++++++++++++++ lasso/xml/soap_binding.h | 6 +++--- lasso/xml/xml_idff.h | 5 ----- lasso/xml/xml_idwsf.h | 5 ----- 29 files changed, 105 insertions(+), 59 deletions(-) commit 91aa1f61c7e9a7f8a4b05cda6eac90e55364bb43 Author: Benjamin Dauvergne Date: Mon Jan 4 09:15:38 2010 +0000 Bindings: in overrides.xml, remove noew useless directives bindings/overrides.xml | 47 ----------------------------------------------- 1 file changed, 47 deletions(-) commit 86d837bf5bbe0e9f53688b7bc4f87c79ad223339 Author: Benjamin Dauvergne Date: Mon Jan 4 09:15:36 2010 +0000 Python binding: update test scripts to new ID-WSF API bindings/python/tests/idwsf1_tests.py | 33 ++++++++++++------- bindings/python/tests/idwsf2_tests.py | 62 ++++++++++++++++++++++------------- 2 files changed, 61 insertions(+), 34 deletions(-) commit 6e7ed2e5cc85c1f3ae997747f5a31e05fe6a2365 Author: Benjamin Dauvergne Date: Mon Jan 4 09:15:35 2010 +0000 Binding ID-WSF 2.0: do not bind lasso_wsa_endpoint_reference_get_*_token methods bindings/overrides.xml | 2 ++ 1 file changed, 2 insertions(+) commit d1ada7b833caa57a29b02348834f6b96332a503c Author: Benjamin Dauvergne Date: Mon Jan 4 09:15:32 2010 +0000 Tests: add idwsf2_tests.c, call from tests.c, update Makefile.am tests/Makefile.am | 11 ++- tests/basic_tests.c | 1 + tests/idwsf2_tests.c | 274 +++++++++++++++++++++++++++++++++++++++++++++++++++ tests/tests.c | 7 ++ 4 files changed, 291 insertions(+), 2 deletions(-) commit bfb8483823a8049319a587a7f52941b01974f62e Author: Benjamin Dauvergne Date: Mon Jan 4 09:15:24 2010 +0000 ID-WSF 2.0: in profile.{c,h}, discovery.{c,h}, data_service.{c,h}, overhaul all profiles. * lasso/id-wsf-2.0/profile.c lasso/id-wsf-2.0/profile.h: - lasso_idwsf2_profile_get_name_identifier returns the NameID found in an assertion used as a WS-Security token when security mechanism Bearer or SAML are used. - complete the function lasso_id_wsf2_profile_build_soap_envelope with construction of the Sender element which is used to transmit the providerID of the message sender by the SOAP binding ID-WSF 2.0 specification. - remove useless instance_init function in profile object - reset some profile fields in process_soap_request_msg (response, body, nameIdentifier). use lasso_saml20_profile_name_identifier_decryption for handling NameID from WS-Security mechanism assertion. - add private_data - change signature of lasso_idwsf2_profile_init_soap_request to use and EPR and a security mechanism specifier when building the SOAP request. - change signature of lasso_idwsf2_profile_process_soap_request to verify security_mech_id of received messages. * docs/reference/lasso/lasso-sections.txt: add the function to the documentation. * lasso/id-wsf-2.0/discovery.{c,h}: - use utils.h macros instead of g_return_val_if_fail because it removes useless warning, since it returns an error code. release acquired resources. - in lasso_idwsf2_discovery_metadata_register_self, return error code instead of identifier string for the new service, use an out parmeter to return the identifier, use utils.h macros. - in lasso_idwsf2_discovery_init_metadata_register, use utils.h macros, check return code of lasso_idwsf2_profile_init_soap_request. - change signature of lasso_idwsf2_discovery_init_metadata_register to support security_mech_id, try to get URL from an existing Discovery service EPR (from Session object). - change signature of lasso_idwsf2_discovery_process_metadata_register_msg, lasso_idwsf2_discovery_init_metadata_association_add, lasso_idwsf2_discovery_process_metadata_association_add_msg, lasso_idwsf2_discovery_init_query, lasso_idwsf2_discovery_process_query_msg, to support security mechanism. - improve lasso_idwsf2_discovery_build_query_response_eprs. - add lasso_idwsf2_discovery_get_nth_data_service to acces returned services. * lasso/id-wsf-2.0/data_service.{c,h}: - redo all the API docs/reference/lasso/lasso-sections.txt | 1 + lasso/id-wsf-2.0/data_service.c | 1469 ++++++++++++-------------- lasso/id-wsf-2.0/data_service.h | 114 ++- lasso/id-wsf-2.0/discovery.c | 1699 ++++++++++++++++++------------- lasso/id-wsf-2.0/discovery.h | 109 +- lasso/id-wsf-2.0/profile.c | 660 ++++++++++-- lasso/id-wsf-2.0/profile.h | 61 +- 7 files changed, 2362 insertions(+), 1751 deletions(-) commit 277fc83eb1dfa1597b0efe1ef34b4a420e6c0924 Author: Benjamin Dauvergne Date: Mon Jan 4 09:15:22 2010 +0000 ID-WSF 2.0: in session.c, fix memory handling errors lasso/id-wsf-2.0/session.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) commit 29558f6a6a175b272679070fe8c8934639984151 Author: Benjamin Dauvergne Date: Mon Jan 4 09:15:20 2010 +0000 ID-WSF 2.0&ID-WSF: in profile.c, wsf_profile.c, errors.c, errors.h, and in lasso-sections.txt change LASSO_SOAP_FAULT_REDIRECT_REQUEST to LASSO_SOAP_ERROR_REDIRECT_REQUEST_FAULT docs/reference/lasso/lasso-sections.txt | 2 +- lasso/errors.c | 4 ++-- lasso/errors.h | 4 ++-- lasso/id-wsf-2.0/data_service.c | 2 +- lasso/id-wsf/wsf_profile.c | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) commit bf084c5eb8538f591de9e46576023cf149a4ede8 Author: Benjamin Dauvergne Date: Mon Jan 4 09:15:17 2010 +0000 ID-WSF 2.0 Errors: in errors.{c,h}, add new errors code for ID-WSF 2.0 - add LASSO_DST_ERROR_EMPTY_REQUEST - add LASSO_WSF_PROFILE_ERROR_SECURITY_MECHANISM_CHECK_FAILED - add new errors codes for generic profiles and disco service lasso/errors.c | 32 +++++++++++++++-- lasso/errors.h | 110 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 139 insertions(+), 3 deletions(-) commit 9df401c1873c2587866f6532cc521bfe1eb27013 Author: Benjamin Dauvergne Date: Mon Jan 4 09:15:14 2010 +0000 ID-WSF 2.0 XML: in strings.h, add identifiers from ID-WSF 2.0 standards - add status code for ID-WSF 2.0 DST - add token usage identifiers - conform security mechanism identifiers to ID-WSF 2.0 Liberty Sech Mech specification - add Discovery Service status codes - add Soap Binding status codes - add disco result type and user interaction hint strings lasso/xml/strings.h | 787 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 757 insertions(+), 30 deletions(-) commit a0fd0318dc32029eb6d15759f68bad312ef89b64 Author: Benjamin Dauvergne Date: Mon Jan 4 09:15:11 2010 +0000 ID-WSF 2.0 XML: in sec_token.c, remove extra SNIPPET_ANY lasso/xml/id-wsf-2.0/sec_token.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit f4aefd71f8d86e41cc9a60953b6c54dd0d7d291f Author: Benjamin Dauvergne Date: Mon Jan 4 09:15:09 2010 +0000 ID-WSF 2.0 XML: in util_response.{c,h}, add helper functions to idwsf2_util_status lasso/xml/id-wsf-2.0/util_response.c | 55 ++++++++++++++++++++++++++++++++++++ lasso/xml/id-wsf-2.0/util_response.h | 4 +++ 2 files changed, 59 insertions(+) commit 72ba41fa7fb70688fbc016114587553f80ea7efb Author: Benjamin Dauvergne Date: Mon Jan 4 09:15:06 2010 +0000 ID-WSF 2.0: in server.c, change annotation of lasso_server_get_svc_metadatas_with_id_and_type. lasso/id-wsf-2.0/server.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 65ab09249ab14fe42178f2ebd3b411089b17af68 Author: Benjamin Dauvergne Date: Mon Jan 4 09:15:03 2010 +0000 ID-WSF 2.0: in saml2_login.c, change API * lasso/id-wsf-2.0/saml2_login.c: - change private lasso_saml20_login_assertion_add_discovery to public lasso_login_idwsf2_add_discovery_bootstrap_epr. - remove lasso_saml20_login_copy_assertion_epr, add lasso_login_idwsf2_get_discovery_bootstrap_epr. * docs/reference/lasso/lasso-docs.sgml: - add sections id_wsf_2_0_login * docs/reference/lasso/lasso-sections.txt: - add new functions to section id_wsf_2_0_login docs/reference/lasso/lasso-docs.sgml | 1 + docs/reference/lasso/lasso-sections.txt | 7 + lasso/id-wsf-2.0/saml2_login.c | 273 ++++++++++----------- .../{saml2_login_private.h => saml2_login.h} | 7 +- 4 files changed, 143 insertions(+), 145 deletions(-) commit b6ef732df3f952d42a9a334e191f9d0abd9c88d4 Author: Benjamin Dauvergne Date: Mon Jan 4 09:15:00 2010 +0000 ID-WSF 2.0: in idwsf2_helper.c, add new functions, fix old things - add lasso_wsa_endpoint_reference_get_service, lasso_wsa_endpoint_reference_associate_service_type_uri, lasso/id-wsf-2.0/idwsf2_helper.c | 112 +++++++++++++++++++++++++++++++-------- lasso/id-wsf-2.0/idwsf2_helper.h | 7 +++ 2 files changed, 98 insertions(+), 21 deletions(-) commit 4befad2b6edeb28bcc1ad4e0e4bd5506e2325416 Author: Benjamin Dauvergne Date: Mon Jan 4 09:14:58 2010 +0000 ID-WSF 2.0: create idwsf2_helper.{c,h}, new module for manipulating EPR elements * lasso/id-wsf-2.0/idwsf2_helper.c lasso/id-wsf-2.0/idwsf2_helper.h: add new functions lasso_wsa_endpoint_reference_get_idwsf2_service_type, lasso_wsa_endpoint_reference_get_idwsf2_provider_id, lasso_wsa_endpoint_reference_get_idwsf2_security_context_for_security_mechanism, lasso_wsa_endpoint_reference_get_token_by_usage, lasso_wsa_endpoint_reference_get_security_token,lasso_wsa_endpoint_reference_get_target_identity_token, lasso_wsa_endpoint_reference_new_for_idwsf2_service, and lasso_wsa_endpoint_reference_add_security_token. * lasso/id-wsf-2.0/idwsf2_helper.h: declare new functions. * lasso/id-wsf-2.0/Makefile.am: add new files to source list lasso/id-wsf-2.0/Makefile.am | 6 +- lasso/id-wsf-2.0/idwsf2_helper.c | 317 +++++++++++++++++++++++++++++++++++++++ lasso/id-wsf-2.0/idwsf2_helper.h | 68 +++++++++ 3 files changed, 389 insertions(+), 2 deletions(-) commit 3f1f5efbb397f8662fbdfa03952430090b04c1be Author: Benjamin Dauvergne Date: Mon Jan 4 09:14:56 2010 +0000 ID-WSF 2.0: in soap_binding.{c,h}, add new functions lasso/id-wsf-2.0/soap_binding.c | 173 +++++++++++++++++++++++++++++++++++++--- lasso/id-wsf-2.0/soap_binding.h | 29 +++++++ 2 files changed, 191 insertions(+), 11 deletions(-) commit e6748141896b172ac0e35fad2ccbfa033f34f031 Author: Benjamin Dauvergne Date: Mon Jan 4 09:14:54 2010 +0000 ID-WSF 2.0: add files soap_binding.c, soap_binding.h * lasso/id-wsf-2.0/Makefile.am - reference new source files in Makefile.am * lasso/id-wsf-2.0/soap_binding.c * lasso/id-wsf-2.0/soap_binding.h: - add extraction functions lasso_soap_envelope_sb2_get_provider_id, lasso_soap_envelope_sb2_get_redirect_request_url, lasso_soap_envelope_sb2_get_target_identity_header, lasso_soap_envelope_add_action and lasso_soap_envelope_get_action. - add SOAP security headers accessors - add lasso_soap_envelope_get_saml2_security_token which simplify retrieving a SAML 2.0 assertion used as a WS-Security token. complete documentation of other functions. * docs/reference/lasso/lasso-sections.txt: - reference the new functions in a new section soap_binding2 * docs/reference/lasso/lasso-docs.sgml: - add new section soap_binding2 ID-WSF 2.0: in soap_binding.{c,h}: add function docs/reference/lasso/lasso-docs.sgml | 1 + docs/reference/lasso/lasso-sections.txt | 8 ++ lasso/id-wsf-2.0/Makefile.am | 6 +- lasso/id-wsf-2.0/soap_binding.c | 222 ++++++++++++++++++++++++++++++++ lasso/id-wsf-2.0/soap_binding.h | 62 +++++++++ 5 files changed, 297 insertions(+), 2 deletions(-) commit 78dd2ec1f86888539b9e19e649fe74d531477211 Author: Benjamin Dauvergne Date: Mon Jan 4 09:14:52 2010 +0000 ID-WSF: in id_ff_extensions.c, add SECTION gtk-doc declaration lasso/id-wsf/id_ff_extensions.c | 1 + 1 file changed, 1 insertion(+) commit 19789377ccf91c08da7e8aa9334c0262f4dfad33 Author: Benjamin Dauvergne Date: Mon Jan 4 09:14:50 2010 +0000 ID-WSF: in interaction_profile_service.{c,h}, make initialization of a redirect request, part of LassoWsfProfile methods. lasso/id-wsf/interaction_profile_service.c | 2 +- lasso/id-wsf/interaction_profile_service.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 1c8c8a4688314d55b93e1125abda1ac0a8bf71ad Author: Benjamin Dauvergne Date: Mon Jan 4 09:14:48 2010 +0000 ID-WSF: in discovery.c:lasso_discovery_init_resource_offering, add doc annotations, use assignment macros to set output argument lasso/id-wsf/discovery.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) commit 02a2b92f92e435d09ba746cc5dcdacc0fe10db3a Author: Benjamin Dauvergne Date: Mon Jan 4 09:14:46 2010 +0000 ID-WSF: in discovery.c, update documentation annotations * lasso/id-wsf/discovery.c: - add annotations to lasso_discovery_init_query, lasso_discovery_init_modify, lasso_discovery_process_request_msg. - initialize response in lasso_discovery_process_query_mesg and lasso_discovery_process_modify_msg, so that modifications of the response can be done between _process_ and _build_ calls. lasso/id-wsf/discovery.c | 35 +++++++++++++++++------------------ 1 file changed, 17 insertions(+), 18 deletions(-) commit 6dd383a0514c9ad560e4615270cbf895d63a1747 Author: Benjamin Dauvergne Date: Mon Jan 4 09:14:43 2010 +0000 ID-WSF: in data_service.c:lasso_data_service_init_query check absent resource offering, support security_mech_id argument * lasso/id-wsf/data_service.c lasso/id-wsf/data_service.h: - in lasso_data_service_apply_modifications, dst_modification initialization is missing. - remove lasso_data_service_get_redirect_request_url - change LASSO_DATA_SERVICE_CANNOT_ADD_ITEM to LASSO_DATA_SERVICE_ERROR_CANNOT_ADD_ITEM - in lasso_data_service_init_query, complete documentation, fix mem leak - factorize code between lasso_data_service_build_modify_response_msg and lasso_data_service_build_query_response_msg, create lasso_data_service_build_response_msg - in lasso_data_service_get_answer, add out annotation to output parameter - simplify API, simplify code path for query and modification processing - add lasso_data_service_process_request_msg, lasso_data_service_build_modify_response_msg, lasso_data_service_validate_request. - remove lasso_data_service_process_query_msg and lasso_data_service_process_modify_msg from public API. - in lasso_data_service_process_query_msg and lasso_data_service_process_modify_msg add arg checks, make them static and move preprocessing of the request in lasso_data_service_process_request_msg. - in lasso_data_service_get_answer, fix request/response mismatch. - add accessors lasso_data_service_set_resource_data and lasso_data_service_get_resource_data. - add securit_mech_id arg to data_service_init_modify, export resource_data accessor methods - remove lasso_data_service_get_redirect_request_url - fix missing intializations and leaks docs/reference/lasso/lasso-sections.txt | 1 - lasso/id-wsf/data_service.c | 532 ++++++++++++++++++++------------ lasso/id-wsf/data_service.h | 17 +- 3 files changed, 339 insertions(+), 211 deletions(-) commit e2aa7b401f34939f126c65283379d2ad53bdb568 Author: Benjamin Dauvergne Date: Mon Jan 4 09:14:41 2010 +0000 ID-WSF: in wsf_profile.c, fix mem leaks lasso/id-wsf/wsf_profile.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) commit 5aebf791276d44e86754e35f9639cd92ea8eee89 Author: Benjamin Dauvergne Date: Mon Jan 4 09:14:40 2010 +0000 ID-WSF XML: in dst_modification.c, add SNIPPET_BOOLEAN to overrideAllowed attribute snippet lasso/xml/dst_modification.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit dee4de185878c8350981008f8a9b65b4c5ec42d2 Author: Benjamin Dauvergne Date: Mon Jan 4 09:14:38 2010 +0000 ID-WSF XML: in dst_modify.{c,h}, remove extra argument to the constructor of LassoDstModify * lasso/xml/dst_modify.c: * lasso/xml/dst_modify.h: remove parameters of the default constructor. lasso/xml/dst_modify.c | 10 +--------- lasso/xml/dst_modify.h | 2 +- 2 files changed, 2 insertions(+), 10 deletions(-) commit 27af878c2bbeae1aa2907a4dbd86f133df29f19f Author: Benjamin Dauvergne Date: Mon Jan 4 09:14:36 2010 +0000 Tests: in tests/login_tests.c, change path of header utils.h tests/login_tests.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 6d9cb01e010fcf1a42389c3bbc296a8285a3889d Author: Benjamin Dauvergne Date: Mon Jan 4 09:14:35 2010 +0000 Tests: in basic_tests.c, fix, do not overwrite known elements mappings * tests/basic_tests.c: when testing functionality of lasso registries which map namespace elements to lasso objects, do not use liberty namespace because it interacts with other tests -- deserialization of lib:Assertion node was broken by this test -- when running them in CK_FORK=no mode. Changed namespace LASSO_LIB_HREF, for "coin" which is less dangerous. tests/basic_tests.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) commit c8be196a5aa579f62d9688852ce41f531a13e02f Author: Benjamin Dauvergne Date: Mon Jan 4 09:14:33 2010 +0000 WS XML: change signature of lasso_wsa_attributed_uri_new_with_string, add mappings * wsa_attributed_uri.c: - constify first argument of lasso_wsa_attributed_uri_new_with_string. - add add direct mappings from wsa:Action,wsa:To to LassoWsAddrAttributedURI and from wsa:From,wsa:ReplyTo,wsa:FaultTo to LassoWsAddrEndpointReference lasso/xml/ws/wsa_attributed_uri.c | 5 ++++- lasso/xml/ws/wsa_attributed_uri.h | 2 +- lasso/xml/ws/wsa_endpoint_reference.c | 3 +++ 3 files changed, 8 insertions(+), 2 deletions(-) commit 272507091774e230ce244c17bcd90d0a0efeda0b Author: Benjamin Dauvergne Date: Mon Jan 4 09:14:31 2010 +0000 SAML 2.0: in login.c, use lasso_server_saml2_assertion_setup_signature lasso/saml-2.0/login.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) commit 4497b166bf4e36101d11705fd0b110e7485e9b92 Author: Benjamin Dauvergne Date: Mon Jan 4 09:14:29 2010 +0000 XML: in private.h, remove duplicate declaration of lasso_xml_parse_memory lasso/xml/private.h | 2 -- 1 file changed, 2 deletions(-) commit 1ab3876d3e957c74498a175ffc8f5fcc1b920cd7 Author: Benjamin Dauvergne Date: Mon Jan 4 09:14:27 2010 +0000 ID-FF XML: in lib_assertion.c, add registry mapping for lib:AssertionType * xml/lib_assertion.c: this object is really a container for lib:AssertionType, so register it. lasso/xml/lib_assertion.c | 3 +++ 1 file changed, 3 insertions(+) commit 1dece2447decac4efc6aa2aa1fa4008bcad3201c Author: Benjamin Dauvergne Date: Mon Jan 4 09:14:25 2010 +0000 Core: in provider.c, add lasso_provider_verify_single_node_signature * lasso/id-ff/provider.c lasso/id-ff/provider.h: add a new function to check an enclosed single signature on a LassoNode, given that the LassoNode retained its original xml node content. lasso/id-ff/provider.c | 28 ++++++++++++++++++++++++++++ lasso/id-ff/provider.h | 3 +++ 2 files changed, 31 insertions(+) commit 689aa794b76c7bdee36f2882a23ca4fb1c3c90af Author: Benjamin Dauvergne Date: Mon Jan 4 09:14:24 2010 +0000 SAML 2.0: in login.c, fix memleaks * lasso/saml-2.0/login.c: return value from lasso_provider_get_sp_name_qualifier must be freed. lasso/saml-2.0/login.c | 48 +++++++++++++++++++++++++++--------------------- 1 file changed, 27 insertions(+), 21 deletions(-) commit 8246e5d4384bd89ce8e897dea5f37521940e87dc Author: Benjamin Dauvergne Date: Mon Jan 4 09:14:22 2010 +0000 SAML 2.0: in login.c, remove discovery bootstrap handling lasso/saml-2.0/login.c | 12 ------------ 1 file changed, 12 deletions(-) commit b6c9be9fa2cdb20c11f637d764f0a0c1d69388fe Author: Benjamin Dauvergne Date: Mon Jan 4 09:14:20 2010 +0000 Core Login: in login.c, add assertion accessor * docs/reference/lasso/lasso-sections.txt: declare new function * lasso/id-ff/login.c lasso/id-ff/login.h: add new function lasso_login_get_assertion. * lasso/saml-2.0/login.c: store created assertions * lasso/id-ff/login.h: make assertion field private for bindings. docs/reference/lasso/lasso-sections.txt | 6 ++++-- lasso/id-ff/login.c | 20 ++++++++++++++++++++ lasso/id-ff/login.h | 4 +++- lasso/saml-2.0/login.c | 2 ++ 4 files changed, 29 insertions(+), 3 deletions(-) commit c01e1231fae3c68f89ea750d08cd14d645a94132 Author: Benjamin Dauvergne Date: Mon Jan 4 09:14:17 2010 +0000 SAML 2.0: in saml2_helper.c, add new methods to manipulate SAML2 assertions * lasso/saml-2.0/saml2_helper.c lasso/saml-2.0/saml2_helper.h: - add lasso_server_saml2_assertion_setup_signature, to help in defining signature upon saml2:Assertion nodes. - add new symbols LASSO_DURATION_MINUTE, LASSO_DURATION_HOUR, LASSO_DURATION_DAY, LASSO_DURATION_WEEK. - add method lasso_saml2_assertion_add_attribute_with_node * docs/reference/lasso/lasso-sections.txt: declare new functions in saml2_helper section. docs/reference/lasso/lasso-sections.txt | 15 + lasso/saml-2.0/Makefile.am | 3 +- lasso/saml-2.0/saml2_helper.c | 711 ++++++++++++++++++++++++++++++++ lasso/saml-2.0/saml2_helper.h | 98 +++++ 4 files changed, 826 insertions(+), 1 deletion(-) commit c1bd6a8f50b2ac52501a9090a9c80d6960ebf59d Author: Benjamin Dauvergne Date: Mon Jan 4 09:14:15 2010 +0000 Tests: in basic_tests.c, check LassoSaml2EncryptedElement handling tests/basic_tests.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) commit 1c665f3e8579d1f4da0a6e0c79eb0ab723df7cf7 Author: Benjamin Dauvergne Date: Mon Jan 4 09:14:14 2010 +0000 SAML 2.0 XML: map EncryptedID, EncryptedAssertion, EncryptedAttribute and NewEncryptedID element to saml2:EncryptedElement * lasso/xml/saml-2.0/saml2_encrypted_element.c: add registry mapping from EncryptedID, EncryptedAssertion, EncryptedAttribute and NewEncryptedID element to saml2:EncryptedElement lasso/xml/saml-2.0/saml2_encrypted_element.c | 9 +++++++++ 1 file changed, 9 insertions(+) commit b77954cf39cf9b5af2eb354f9d8f4a6ec0014d78 Author: Benjamin Dauvergne Date: Mon Jan 4 09:14:12 2010 +0000 SAML 2.0 XML: in strings.h, add the identifier for the holder of key subject confirmation method lasso/xml/strings.h | 1 + 1 file changed, 1 insertion(+) commit 399ca193e3da30dd0128c6527e238a5a1ab64270 Author: Benjamin Dauvergne Date: Mon Jan 4 09:14:10 2010 +0000 SAML 2.0: in provider.c, add node encryption function and reference it in doc * lasso/saml-2.0/Makefile.am: add new header provider.h * lasso/saml-2.0/provider.c lasso/saml-2.0/provider.h: add new function lasso_provider_saml2_node_encrypt to encrypt nodes and encapslutate the XML Enc datas in a LassoSaml2EncryptedElement node. * docs/reference/lasso/lasso-sections.txt: add function to saml2_utils section docs/reference/lasso/lasso-sections.txt | 1 + lasso/saml-2.0/Makefile.am | 3 ++- lasso/saml-2.0/provider.c | 26 +++++++++++++++++++++ lasso/saml-2.0/provider.h | 41 +++++++++++++++++++++++++++++++++ 4 files changed, 70 insertions(+), 1 deletion(-) commit dbed9b50e33001c49a007e0360b3de792cf580f2 Author: Benjamin Dauvergne Date: Mon Jan 4 09:14:08 2010 +0000 WS XML: add forgotten include file to wsa_attributed_uri.c and wsa_endpoint_reference.c lasso/xml/ws/wsa_attributed_uri.c | 1 + lasso/xml/ws/wsa_endpoint_reference.c | 1 + 2 files changed, 2 insertions(+) commit 848a3252a8813c368b68fb8fc2cb9550bceadb8e Author: Benjamin Dauvergne Date: Mon Jan 4 09:14:06 2010 +0000 WS Errors: in errors.h errors.c, add new error section for WS-Security handling lasso/errors.c | 2 ++ lasso/errors.h | 3 +++ 2 files changed, 5 insertions(+) commit c71822c7e05b20b65157ef7f80fb80eee7f568fa Author: Benjamin Dauvergne Date: Mon Jan 4 09:14:05 2010 +0000 Core: in server.c, change signature of lasso_server_get_provider, add anottations on return value * lasso/id-ff/server.h lasso/id-ff/server.c: - constify first argument of lasso_server_get_provider - add annotation about caller owned return value lasso/id-ff/server.c | 4 ++-- lasso/id-ff/server.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) commit 255962cc351c73230e29946c830e2b5ccb04aa36 Author: Benjamin Dauvergne Date: Mon Jan 4 09:14:03 2010 +0000 Core: in tools.c, complete documentation of lasso_verify_signature lasso/xml/tools.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) commit e76546078f8aaba9586dd674650ad4436408186e Author: Benjamin Dauvergne Date: Mon Jan 4 09:14:01 2010 +0000 Core: in provider.c, add accessors for encryption informations * lasso/id-ff/provider.c: add getters for encryption_sym_key_type and encryption_public_key. * lasso/id-ff/providerprivate.h: declare new accessors. lasso/id-ff/provider.c | 39 ++++++++++++++++++++++++++++++++++++++- lasso/id-ff/providerprivate.h | 4 +++- 2 files changed, 41 insertions(+), 2 deletions(-) commit 7e22acdd2c784fd4ce279ba2a7fe79ba490d02a0 Author: Benjamin Dauvergne Date: Mon Jan 4 09:13:59 2010 +0000 Core XML: in xml.{c,h}, add new function lasso_node_get_name to get the element name for an object lasso/xml/xml.c | 24 ++++++++++++++++++++++++ lasso/xml/xml.h | 3 +++ 2 files changed, 27 insertions(+) commit a2bfa25d7148ec7d6745ef080ec8a963a9f3392d Author: Benjamin Dauvergne Date: Mon Jan 4 09:13:57 2010 +0000 Core XML: make first argument of lasso_misc_text_node_new_with_string const * lasso/xml/misc_text_node.h lasso/xml/misc_text_node.c: change signature of lasso_misc_text_node_new_with_string, string argument is const. lasso/xml/misc_text_node.c | 2 +- lasso/xml/misc_text_node.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 1d8bd498cd94ce7dc378cd547256ce33ec66083f Author: Benjamin Dauvergne Date: Mon Jan 4 09:13:55 2010 +0000 Core XML: in xml/tools.c, add conversion method from iso8601 to time_t * lasso/xml/tools.c: add function lasso_iso_8601_gmt_to_time_t * lasso/xml/private.h: declare new function. lasso/xml/private.h | 1 + lasso/xml/tools.c | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+) commit 4a10bbf9c6288c31853e97602fde477c36d1aef1 Author: Benjamin Dauvergne Date: Mon Jan 4 09:13:53 2010 +0000 Core XML: in xml.c, keep original node names, handle xsi:type attribute better * lasso/xml/xml.c lasso/xml/xml.h: - fix signature of lasso_node_set_original_xmlnode, fix signature in documentation of lasso_node_set_original_xmlnode; - add a new API lasso_node_set_custom_nodename to specify the exact element name to use when serializing a LassoNode to XML. - rename internal structure _CustomNamespace to _CustomElement, add a nodename field to it. - rework internal functions around _CustomElement to be aware of an existing attached _CustomElement and re-use if needed. - move application of _CustomElement hints after the serialization of the node, so that the normal behaviour of the serialization is kept -- i.e. do not play with the list of parent classes. - use the full xsi:type content to find a LassoNode subclass when de-serializaing XML content, factorize QName->GObject class mapping for the three executions paths inside _type_name_from_href_and_nodename: - element QName, - xsi:type QName, - element name with xsi:type namespace - add a long comment expliciting the way the mapping is done. - remove direct mapping of EncryptedAssertion element, the registry declaration on the class LassoSaml2EncryptedElement shoud be enough. lasso/xml/xml.c | 276 ++++++++++++++++++++++++++++++++++++++++---------------- lasso/xml/xml.h | 4 +- 2 files changed, 203 insertions(+), 77 deletions(-) commit 3feefb47de78819fdb4a27b2a36a5fd63cecc3ba Author: Benjamin Dauvergne Date: Mon Jan 4 09:13:51 2010 +0000 Core XML: in xml.c, parse attributes with namespace checking * lasso/xml/xml.c: - use snippet->ns_uri and snippet->ns_name to parse attributes outside of the parent node namespace. lasso/xml/xml.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) commit 1deaa13210496499da8060bebb927ddb6895c81e Author: Benjamin Dauvergne Date: Mon Jan 4 09:13:49 2010 +0000 Core XML: in xml/tools.c, improve lasso_eval_xpath_expression, do not fail when nodeset is empty * lasso/xml/tools.c: only check that the query returned a nodeset object, do not check its content size. lasso/xml/tools.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit bb2f640231f5f88cb819cb761be2f30d90a34f00 Author: Benjamin Dauvergne Date: Mon Jan 4 09:13:46 2010 +0000 Core: in utils.h, add a macros, fix existing * lasso/utils.h: - add macro lasso_ref(object), if object is not null, call g_object_ref on it, and return the value, otherwise do nothing and return NULL. - make a better reporting of bad object release - change format type for __LINE__ and dest arguments in lasso_release_gobject warning display. - add a lasso_check_non_empty_string macro - add new macro to extract a specific node type from a list of GObject objects. - use xmlStrdup not g_strdup for lasso_assign_xml_string - add lasso_list_add_gstrv and lasso_check_good_rc - add macro lasso_list_get_first_child - add inline function to test empty string - change macro lasso_check_non_empty_string to use the new inline function and go to cleanup - fix lasso_check_non_empty_string macro * lasso/utils.c: - add lasso_gobject_is_of_type returns 0 if first parameters is a gobject whose GType is equal to the second parameter, and 1 otherwise. lasso/utils.c | 22 ++++++++++++++++++++++ lasso/utils.h | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 76 insertions(+), 3 deletions(-) commit 1e21b80fcd678cf3d073609e693b3435efbb84a2 Author: Benjamin Dauvergne Date: Mon Jan 4 09:13:45 2010 +0000 Core: add new errors LASSO_PROFILE_ERROR_INVALID_RESPONSE, LASSO_PROFILE_ERROR_INVALID_REQUEST. lasso/errors.c | 12 ++++++++---- lasso/errors.h | 16 +++++++++++++++- 2 files changed, 23 insertions(+), 5 deletions(-) commit f61c178bec7d4f298c73b33372fbb0370c282e55 Author: Benjamin Dauvergne Date: Mon Jan 4 09:13:43 2010 +0000 Bindings: in bindings.py, parse '(in)' gobject-introspection annotation, in utils.py, use it to reverse default annotation for pointer of pointers Bindings: in bindings.py, improve regular expression for declarations Bindings: parse gobject-introspection annotation in return value documentation, add cast to C calls when parameter type is const in java binding, problem arise with const char ** arrays bindings/bindings.py | 80 +++++++++++++++++++++++------------------ bindings/java/lang.py | 13 +++---- bindings/php5/wrapper_source.py | 1 - bindings/utils.py | 3 +- 4 files changed, 54 insertions(+), 43 deletions(-) commit 003b2511ab0430d43aa0bc8007b7994e5932feb2 Author: Benjamin Dauvergne Date: Mon Jan 4 09:13:41 2010 +0000 Bindings: do not stop on failing to parse a declaration, but skip the function and print a warning bindings/bindings.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit ade4c7ed11aa1e997930a0231d1954fd81109ca8 Author: Benjamin Dauvergne Date: Mon Jan 4 09:13:40 2010 +0000 Python binding: add a pyobject->time_t conversion function bindings/python/wrapper_top.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) commit 0f3a96339915688ec97f611ff2e8ce72841407bc Author: Benjamin Dauvergne Date: Mon Jan 4 09:13:39 2010 +0000 Bindings python: in wrapper_top.c, mark internal function as potentially unused bindings/python/wrapper_top.c | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) commit 5224c7cf675d6c8b2df9b3f4b43f8cd8d4eb8184 Author: Benjamin Dauvergne Date: Mon Jan 4 09:13:36 2010 +0000 Bindings: make the binding infrastructure understand GObject-introspections annotations * bindings/bindings.py * bindings/utils.py: add convenience function to treat arguments tuple: (type,name,{annotations}). introduce new argument options, fix that arguments are 3-tuple of the form (type,name,annotations), where annotations is a dictionary. Key of this dictionnary can be: - optional, wheter the argument is necessary, it means it has a default value. - out, means that the pointer is a pointer of pointer, for bindings that can return exceptions, it will be returned instead of the integer error code, the only way to access error codes will be exceptions. - element-type, contained type of a list or an array, - key-type, value-type, type of respectively the key and value of a GHashTable. - transfer, wheter a the callee(for arguments)/caller(for return values) owns the values passed, it can be none,container(if the callee/caller only owns the container not the contained value) or full. doc.parameters is now a 3-tuple of (attribute-name, attribute-description, attribute-annotations) where attribute-annotations is a string of the form '(option1)(option2 option-arguments) etc.'. - add predicates for xml, list and time_t values. improve predicates for cstring and const modifier. * bindings/overrides.xml: 'out' arguments are not well supported for java, so skip functions using them. * bindings/java/lang.py bindings/php5/php_code.py bindings/php5/wrapper_source.py bindings/python/lang.py: - update language specifig binding generators for handling new annotations. - improve python method declaration, handle optional arguments with default values, factorize this chode in two methods, get_python_arg_decl and defval_to_python_value. * bindings/python/tests/Makefile.am bindings/python/tests/idwsf1_tests.py bindings/python/tests/idwsf2_tests.py: make test work with out of source build dir. bindings/bindings.py | 80 ++++++++++--- bindings/java/lang.py | 57 ++++++--- bindings/overrides.xml | 14 +-- bindings/php5/php_code.py | 21 +++- bindings/php5/wrapper_source.py | 100 ++++++++++++++-- bindings/python/lang.py | 211 ++++++++++++++++++++-------------- bindings/python/tests/Makefile.am | 2 + bindings/python/tests/idwsf1_tests.py | 41 ++++--- bindings/python/tests/idwsf2_tests.py | 2 +- bindings/utils.py | 111 ++++++++++++++++++ 10 files changed, 481 insertions(+), 158 deletions(-) commit 42062ff986a344f3f33a4465e106fede10aeaa6a Author: Benjamin Dauvergne Date: Mon Jan 4 09:13:33 2010 +0000 Documentation: in lasso-docs.sgml, add glossary to the index, add book part delimitations * docs/reference/lasso/lasso-docs.sgml: add the glossary to the index. docs/reference/lasso/lasso-docs.sgml | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) commit 0660d6e523791400d572541e3f5d4de9cf8d2865 Author: Benjamin Dauvergne Date: Mon Jan 4 09:13:32 2010 +0000 Core: in registry.c, change type cast to compile on amd64 platform * registry.c: use ptrdiff_t to cast to integer big enough to receive a pointer, then apply integer operations, then cast to the pointer type expected by g_direct_hash. lasso/registry.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) commit 07ccaf02eca00401f70f9f2ad702dfa490bd10ca Author: Benjamin Dauvergne Date: Wed Dec 16 09:28:04 2009 +0000 Core: in utils.h, change __STRING(x) for #x * lasso/utils.h: __STRING(x) does not seem more portable than #x so change, problem with AIX. lasso/utils.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 4057bd3ef23d3dbd7462b33b99c34aec83e8a7ab Author: Benjamin Dauvergne Date: Wed Dec 9 06:51:28 2009 +0000 Downgrade version 2.2.90 to make a pre-release configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 6dd310e68d1900da6a2adffc4bfdc9ba62854fbe Author: Benjamin Dauvergne Date: Tue Dec 8 10:15:04 2009 +0000 in tests/tests.h, Add checks for true and false conditions tests/tests.h | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) commit 4467bf8938e4c4fb5fd2d43724c0901c3c73afe1 Author: Benjamin Dauvergne Date: Tue Dec 8 10:14:59 2009 +0000 Remove beginning of a PHP4 binding bindings/bindings.py | 5 - bindings/php4/Makefile.am | 38 - bindings/php4/__init__.py | 0 bindings/php4/_lasso.h | 1815 ------------------------------------- bindings/php4/lang.py | 516 ----------- bindings/php4/lasso_php4_helper.c | 337 ------- 6 files changed, 2711 deletions(-) commit 734e9054cbc7d2fb5a2be3c811d6f7bd9537805b Author: Benjamin Dauvergne Date: Tue Dec 8 09:19:19 2009 +0000 Upgrade version number configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit d50faa400924d58f1d7c25dbce1f86644938ad3c Author: Benjamin Dauvergne Date: Tue Dec 8 09:19:17 2009 +0000 Add missing headers to makefile, to pass make distcheck * lasso/xml/id-wsf-2.0/Makefile.am: make xml_idwsf2.h appear in the distribution file * lasso/xml/ws/Makefile.am: make xml_ws.h appear in the distribution file lasso/xml/id-wsf-2.0/Makefile.am | 3 ++- lasso/xml/ws/Makefile.am | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) commit d067792e7fbf022fae122c7710482e5ef201bf9a Author: Benjamin Dauvergne Date: Fri Dec 4 09:05:28 2009 +0000 in lasso_saml20_profile_export_to_query, checks return values * lasso/saml-2.0/profile.c: in lasso_saml20_profile_export_to_query, check return value of of lasso_node_build_query and lasso_query_sign. lasso/saml-2.0/profile.c | 3 +++ 1 file changed, 3 insertions(+) commit 4f973512b9ddc16348973a0b466b2103063d147a Author: Benjamin Dauvergne Date: Tue Dec 1 02:06:07 2009 +0000 Add SP initiated logout test to SAML 2.0 regression tests * tests/login_tests_saml2.c: add logout to first SAML 2.0 login regression test. * tests/tests.h: add macros to simplify checking of return value with check macros (encapsulate fail_unless macro to check for NULL/non-NULL values and good rc value (0) or expected bad value). tests/Makefile.am | 2 +- tests/login_tests_saml2.c | 41 +++++++++++++++++++++++++++++++++++++++++ tests/tests.h | 43 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 85 insertions(+), 1 deletion(-) commit 896d9abd3fb070bda17c78a1d2b84c9348253ef0 Author: Benjamin Dauvergne Date: Mon Nov 30 22:58:59 2009 +0000 Restore ancient semantic of lasso_profile_is_session_dirty * lasso/id-ff/profile.c: lasso_is_session_dirty must return FALSE if session is NULL. lasso/id-ff/profile.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 012b7c3af5938b6ef1d4b1ea100b857d2154e908 Author: Benjamin Dauvergne Date: Mon Nov 30 22:58:57 2009 +0000 Fix double g_object_unref * lasso/id-ff/login.c: status is already freed by lasso_assign_gobject, do not free it first with lasso_node_destroy. lasso/id-ff/login.c | 2 -- 1 file changed, 2 deletions(-) commit 10702e1ea44e0d5436ef26406862652091e8b2c0 Author: Benjamin Dauvergne Date: Mon Nov 30 15:16:05 2009 +0000 Restore call to autoheader in autogen.sh * autogen.sh: call to autoheader was removed during simplification of the autogen.sh script. autogen.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit 2ed0af41c29cd53eea954f2910d8fd363675b90a Author: Benjamin Dauvergne Date: Mon Nov 30 15:16:04 2009 +0000 Remove message level signature on redirect messages * lasso/saml-2.0/profile.c: remove message level signatures before building query strings. lasso/saml-2.0/profile.c | 70 +++++++++++++++++++++++++++++++++++------------- 1 file changed, 52 insertions(+), 18 deletions(-) commit 266e10bb73a87fa6be30b0d96f55ffc50a2a6501 Author: Benjamin Dauvergne Date: Mon Nov 30 15:16:03 2009 +0000 Add more check to remove_signature * lasso/saml-2.0/profile.c: check for NULL when accessing klass datas. lasso/saml-2.0/profile.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 21db237e81b3ad041ef66a99a16159a8230871fe Author: Benjamin Dauvergne Date: Mon Nov 2 15:18:08 2009 +0000 Augment query string limit for relaystate extraction to 8192 bytes * lasso/xml/tools.c: some application transfer relaystate longer thant the specification advised 80 bytes, try to cater for their needs. lasso/xml/tools.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) commit b3aa580267c6cfe4b85c7967fa117768a7eb9df2 Author: Benjamin Dauvergne Date: Mon Nov 2 15:18:06 2009 +0000 Add documentation for lasso_get_relaystate_from_query * lasso/xml/tools.c: add documentation on the internal function lasso_get_relaystate_from_query lasso/xml/tools.c | 9 +++++++++ 1 file changed, 9 insertions(+) commit d7baad63d4048b1a5ad23f0144c1592c23330120 Author: Benjamin Dauvergne Date: Fri Oct 30 15:04:46 2009 +0000 Add C defines for SAML 2 'unspecified' authncontext class * lasso/xml/strings.h: add C defines for AuhtnContextClassRef, urn:oasis:names:tc:SAML:2.0:ac:classes:unspecified. lasso/xml/strings.h | 3 +++ 1 file changed, 3 insertions(+) commit f6e1260e2ea31209e29891fffc987cd1a3504ac0 Author: Benjamin Dauvergne Date: Fri Oct 30 14:55:38 2009 +0000 Fix bad macro choice, precise error for bad formatted NIDM request * saml-2.0/name_id_management.c: use specialized lasso_saml20_profile_set_response_status set 'MissingNameID' second level error with requester first level error code when request is missing a name id. lasso/saml-2.0/name_id_management.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 72eac3fd19fbc07efd7c62903d62b3c29c124317 Author: Benjamin Dauvergne Date: Fri Oct 30 14:47:37 2009 +0000 Fix reporting of error in message parsing * lasso/xml/xml.c: do not mix the return code from xmlSecBase64Decode and the return code for lasso_node_init_from_message_with_format. It fixes a segmentation fault in lasso_login_process_authn_request_msg. lasso/xml/xml.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit 3c9e4965dd9ce072580f0cb58a0ad11980f9d8bd Author: Benjamin Dauvergne Date: Fri Oct 30 14:47:36 2009 +0000 Core: factorize code to obtain a SPNameQualifier * lasso/id-ff/provider.c lasso/id-ff/provider.h: add a method giving the SPNameQualifier for a provider (its entity id or its affiliation id). * lasso/id-ff/profile.c: * lasso/saml-2.0/login.c: update use sites. lasso/id-ff/profile.c | 7 +------ lasso/id-ff/provider.c | 31 +++++++++++++++++++++++++++++++ lasso/id-ff/provider.h | 2 ++ lasso/saml-2.0/login.c | 37 +++++++++++++++++++++---------------- 4 files changed, 55 insertions(+), 22 deletions(-) commit 81d3b72efbf25d1e37fe13fbc58028d4d98cb6d9 Author: Benjamin Dauvergne Date: Fri Oct 30 14:47:34 2009 +0000 Make php4 and perl binding disabled by default * configure.ac: make default for --enable-perl and --enable-php4 to "no". Those binding will not be maintained in the future. configure.ac | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 3c1474df590eb4fbd4b8964cd390bcaeaea51f34 Author: Benjamin Dauvergne Date: Fri Oct 30 14:47:33 2009 +0000 SAML2 Logout: initialize SessionIndex from the assertion * lasso/saml-2.0/logout.c: when creating a logout request message initialize the SessionIndex element with the correponding content in the stored assertion for this session. lasso/saml-2.0/logout.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) commit 7e98aff1b7c8fbd4376222e117059a747dc6377b Author: Benjamin Dauvergne Date: Fri Oct 30 14:47:32 2009 +0000 Tests: fix __FILE__ -> __file__ * tests/integration/saml2/__init__.py: path to the current python file is __file__ not __FILE__. tests/integration/saml2/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 2b24cd50e24aeda31086ed59c0db254f084e697b Author: Benjamin Dauvergne Date: Fri Oct 30 14:47:30 2009 +0000 SAML2: change lasso_saml20_profile_set_response_status signature * lasso/saml-2.0/profile.c: * lasso/saml-2.0/profileprivate.h: make lasso_saml20_profile_set_response_status2 the new implementation of lasso_saml20_profile_set_response_status. add helper macros to set success, responder and requester first level status code. * saml-2.0/assertion_query.c: * saml-2.0/login.c: * saml-2.0/logout.c: * saml-2.0/name_id_management.c: adapt consumers to the new signature. lasso/saml-2.0/assertion_query.c | 7 +- lasso/saml-2.0/login.c | 14 ++-- lasso/saml-2.0/logout.c | 130 ++++++++++++++---------------------- lasso/saml-2.0/name_id_management.c | 5 +- lasso/saml-2.0/profile.c | 31 +++------ lasso/saml-2.0/profileprivate.h | 13 +++- 6 files changed, 82 insertions(+), 118 deletions(-) commit a8e89261dd8cf59843bbbd54d2fe936c92e4f989 Author: Benjamin Dauvergne Date: Fri Oct 30 14:47:28 2009 +0000 ID-FF: add a partial_logout flag to LassoLogout private_data * lasso/id-ff/logout.c: * lasso/id-ff/logout.h: add a flag to store the status of a partial logout lasso/id-ff/logout.c | 23 ++++++++++++++++++++++- lasso/id-ff/logoutprivate.h | 1 + 2 files changed, 23 insertions(+), 1 deletion(-) commit 78659e68d9b3ab9840023ccb50c92dc64a8146ce Author: Benjamin Dauvergne Date: Fri Oct 30 14:47:27 2009 +0000 SAML2: add an equals operator to the NameID class * lasso/xml/saml-2.0/saml2_name_id.c: * lasso/xml/saml-2.0/saml2_name_id.h: add a lasso_saml2_name_id_equals method which return TRUE if two NameId are equal. lasso/xml/saml-2.0/saml2_name_id.c | 33 +++++++++++++++++++++++++++++++++ lasso/xml/saml-2.0/saml2_name_id.h | 1 + 2 files changed, 34 insertions(+) commit 5b0f7953b6268bdfed2ec50e01fa57f0c1a5a82a Author: Benjamin Dauvergne Date: Fri Oct 30 14:47:25 2009 +0000 SAML2: use the static get_provider helper method in generic profile methods * lasso/saml-2.0/profile.c: instead of accessing directly profile->server use the helper method get_provider. lasso/saml-2.0/profile.c | 20 ++++---------------- 1 file changed, 4 insertions(+), 16 deletions(-) commit 9eb77cf9fe825b78aee1564cba994b2b4e1196f7 Author: Benjamin Dauvergne Date: Fri Oct 30 14:47:24 2009 +0000 SAML2: in logout_build_response_msg do not fail on missing remote_providerID * lasso/saml-2.0/logout.c: remote_providerId is verified in build_redirect_simple and is not necessary for SOAP response with a failure and profile->response cannot be null (we just created a response if it was missing). So this error case is now unnecessary. lasso/saml-2.0/logout.c | 7 ------- 1 file changed, 7 deletions(-) commit 6921dd1d9b6e398edcfcdab991e61d161457b7c0 Author: Benjamin Dauvergne Date: Fri Oct 30 14:47:23 2009 +0000 ID-FF1.2 and SAML2: remove direct access to profile->server->providers * client of LassoServer should use lasso_server_get_provider. * LASSO_PROFILE_ERRROR_UNKNOWN_PROVIDER was a mistake, it is superfluous, use LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND. lasso/errors.h | 1 + lasso/id-ff/defederation.c | 13 ++++--------- lasso/id-ff/lecp.c | 9 +++++---- lasso/id-ff/login.c | 30 +++++++++++------------------- lasso/id-ff/logout.c | 21 +++++++-------------- lasso/id-ff/name_identifier_mapping.c | 17 ++++++----------- lasso/id-ff/name_registration.c | 19 +++++++------------ lasso/id-wsf/wsf_profile.c | 6 +++--- lasso/saml-2.0/assertion_query.c | 12 ++++-------- lasso/saml-2.0/ecp.c | 3 +-- lasso/saml-2.0/login.c | 23 ++++++++--------------- lasso/saml-2.0/logout.c | 9 +++------ lasso/saml-2.0/profile.c | 23 ++++++++++++++--------- 13 files changed, 74 insertions(+), 112 deletions(-) commit cee61af74f821144af361b73056521283b0456ed Author: Benjamin Dauvergne Date: Fri Oct 30 14:47:19 2009 +0000 Core: in profile, use lasso_server_get_provider - lasso/id-ff/profile.c: replace direct access to server->provider by lasso_server_get_provider. lasso/id-ff/profile.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit 6f1ecfeda6c6d939f2c02c0f872100456bfc2801 Author: Benjamin Dauvergne Date: Tue Sep 29 13:20:42 2009 +0000 Tests: add a test of NameIDFormat extraction - tests/basic_test.c: add test11_get_default_name_id_format which parse a metadata file and try to extract the default name id format. - tests/data/sp5-saml2/metadata.xml: add NameIDFormat node for testing. tests/basic_tests.c | 23 +++++++++++++++++++++++ tests/data/sp5-saml2/metadata.xml | 1 + 2 files changed, 24 insertions(+) commit bdd1ad92a0382409adbc24bfdee829c9b2690be2 Author: Benjamin Dauvergne Date: Tue Sep 29 13:20:40 2009 +0000 Core: add const modifier to return value of lasso_provider_get_metadata_list - lasso/id-ff/provider.c lasso/id-ff/provider.h: change return type of lasso_provider_get_metadata_list from GList* to const GList*. - lasso/id-ff/logout.c lasso/saml-2.0/logout.c lasso/saml-2.0/provider.c: change consumers of the API lasso/id-ff/logout.c | 2 +- lasso/id-ff/provider.c | 12 ++++++------ lasso/id-ff/provider.h | 2 +- lasso/saml-2.0/logout.c | 2 +- lasso/saml-2.0/provider.c | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) commit 00ea5d71133fb8cfa4db803247b4c0cc0abbf53b Author: Benjamin Dauvergne Date: Tue Sep 29 13:20:38 2009 +0000 Core: Add const modifiers to LassoProvider methods * lasso/id-ff/provider.c lasso/id-ff/provider.h lasso/saml-2.0/provider.c lasso/saml-2.0/provider.h: add const modifier where they could be added. lasso/id-ff/provider.c | 20 ++++++++++---------- lasso/id-ff/provider.h | 18 +++++++++--------- lasso/saml-2.0/provider.c | 10 +++++----- lasso/saml-2.0/providerprivate.h | 12 ++++++------ 4 files changed, 30 insertions(+), 30 deletions(-) commit c462bc3b2a23c2d5bae7b87893fe731c398aa818 Author: Benjamin Dauvergne Date: Tue Sep 29 13:20:36 2009 +0000 Do not use g_new, use g_new0 * lasso/id-ff/federation.c: * lasso/id-ff/logout.c: * lasso/id-ff/profile.c: * lasso/id-ff/provider.c: * lasso/id-ff/server.c: * lasso/id-ff/session.c: * lasso/id-wsf/authentication.c: * lasso/saml-2.0/ecp.c: * lasso/xml/xml.c: even for private datas, use g_new0, it is safer. lasso/id-ff/federation.c | 2 +- lasso/id-ff/logout.c | 2 +- lasso/id-ff/profile.c | 2 +- lasso/id-ff/provider.c | 2 +- lasso/id-ff/server.c | 2 +- lasso/id-ff/session.c | 2 +- lasso/id-wsf/authentication.c | 2 +- lasso/saml-2.0/ecp.c | 2 +- lasso/xml/xml.c | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) commit 17d6885dfc4189f24d8a4d849a11415b1a90fc51 Author: Benjamin Dauvergne Date: Tue Sep 29 13:20:33 2009 +0000 Change setting of default NameIDFormat for SAML 2.0 login * saml-2.0/login.c: in lasso_saml20_login_init_authn_request, lasso_saml20_login_init_idp_initiated_authn_request, if the service provider provided a list of supported name id formats, use the first one as default for new AuthnRequest. * id-ff/login.c: modify documentation to report the new way of choosing a default. lasso/id-ff/login.c | 16 +++++++++----- lasso/saml-2.0/login.c | 59 ++++++++++++++++++++++++++++++++++++++++---------- 2 files changed, 59 insertions(+), 16 deletions(-) commit af7feb46702a2d7bb30deb0f354bfadee9c27a6b Author: Benjamin Dauvergne Date: Tue Sep 29 13:20:31 2009 +0000 Add method to Provider to retrieve default NameIDFormat * lasso/id-ff/provider.c lasso/id-ff/provider.h: add lasso_provider_get_default_name_id_format, which returns the firs listed NameIDFormat from the SAML 2.0 metadatas of the provider. lasso/id-ff/provider.c | 13 +++++++++++++ lasso/id-ff/provider.h | 2 ++ 2 files changed, 15 insertions(+) commit 1fb7750337bff7d7ad638621cc38c3cf2e1ffe54 Author: Benjamin Dauvergne Date: Tue Sep 29 13:12:37 2009 +0000 Complete documentation of lasso_login_init_authn_request concerning the NameIDFormat * lasso/id-ff/login.c: in lasso_login_init_authn_request, add docbook formatting, add remarks about the different NameIDFormat for ID-FF 1.2 and SAML 2.0. lasso/id-ff/login.c | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) commit 77a12330802cb40bb16e6f3d20924de3eed895df Author: Benjamin Dauvergne Date: Thu Sep 17 15:05:50 2009 +0000 Fix bugs found via coverity (thanks to Bhaskar Jain) * lasso/id-wsf-2.0/data_service.c: fix uninitialized res variable in lasso_idwsf2_data_service_process_query_response_soap_fault_msg. * lasso/xml/saml-2.0/saml2_assertion.c: fix uninitialized rc variable in get_xmlNode. * lasso/saml-2.0/login.c: in lasso_saml20_login_accept_sso check for ni and ni->Format null-ness before dereferencing, remove idp_ni which is not used anymore. remote all use of federation->remote_nameIdentifier, SAML 2.0 only need one NameID, and it will be local_nameIdentifier. * lasso/xml/xml.c: in lasso_node_traversal, check null-ness of node before dereferencing it, add check for class null-ness also. * lasso/id-ff/provider.c: in lasso_provider_get_first_http_method, remove useless check for t2 null-ness -- if found is TRUE, t1 and t2 cannot be null. * lasso/xml/tools.c: in lasso_sign_node, add documentation, check for private_key_file and xmlnode null-ness. in lasso_get_public_key_from_private_key_file, add a cleanup phase, check for cert variabl null-ness befor appending, count the number of certificates added. in lasso_query_verify_signature, check that URL unescaping and base64 decoding are succesfull before using the decoded strings. * lasso/saml-2.0/name_id_management.c: in lasso_name_id_management_validate_request, fix mis-handling of federation, if federation does not match request name_id, return UNKNOWN_PRINCIPAL. lasso/id-ff/provider.c | 4 +- lasso/id-wsf-2.0/data_service.c | 2 +- lasso/saml-2.0/login.c | 21 +++------- lasso/saml-2.0/name_id_management.c | 36 ++++++++++++---- lasso/xml/saml-2.0/saml2_assertion.c | 2 +- lasso/xml/tools.c | 80 ++++++++++++++++++++++-------------- lasso/xml/xml.c | 5 ++- 7 files changed, 91 insertions(+), 59 deletions(-) commit 1b303dcfcece31b3dae8ea5fd7c2d37e312f7559 Author: Benjamin Dauvergne Date: Thu Sep 17 09:38:03 2009 +0000 ID-WSF: finish unsealing field « is_dirty » of LassoSession * lasso/id-wsf-2.0/session.c: remove direct acces to LassoSession private field. lasso/id-wsf-2.0/session.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit de85e645492603672c4f38d15e5f1276108984ae Author: Benjamin Dauvergne Date: Fri Sep 11 15:51:58 2009 +0000 Core: unseal LassoSession public field * lasso/id-ff/session.c: * lasso/id-ff/session.h: * lasso/id-ff/sessionprivate.h: unseal session->is_dirty and session->assertions, remove the mirror version in the private data structure, and restore direct acces by methods. move the "private" comment before those two fields to hide them in the gtk-doc reference manual, normal access should be done by get_assertion and is_dirty methods. lasso/id-ff/session.c | 46 ++++++++++++++++++++++---------------------- lasso/id-ff/session.h | 7 +++---- lasso/id-ff/sessionprivate.h | 2 -- 3 files changed, 26 insertions(+), 29 deletions(-) commit 550678afe9924536753e1eb64792dbebbeef55af Author: Benjamin Dauvergne Date: Fri Sep 11 15:51:57 2009 +0000 XML ID-WSF: Fix parsing of most ID-WSF elements * lasso/xml/disco_send_single_logout.c: * lasso/xml/id-wsf-2.0/sb2_user_interaction_header.c: * lasso/xml/id-wsf-2.0/subsref_app_data.c: * lasso/xml/xml.c: lots of ID-WSF 1.0/2.0 classes were not passing the new non-regression test on serialization/deserialization. The main reason was the absence of mapping for their namespace in the prefix_from_href_and_nodename function. The other reason is that some class name does not correspond 1-to-1 to the element name (SendSingleLogOut vs. SendSingleLogout, notice the capitalised 'O'). The last problem was that mapping from nodes to GObject classes was done after default mapping ("Lasso"), now it's done before, to reflect the fact that it is a more specialized mapping. lasso/xml/disco_send_single_logout.c | 2 ++ lasso/xml/id-wsf-2.0/sb2_user_interaction_header.c | 3 +++ lasso/xml/id-wsf-2.0/subsref_app_data.c | 2 ++ lasso/xml/xml.c | 29 ++++++++++++++++------ 4 files changed, 28 insertions(+), 8 deletions(-) commit aa1217338319d884d831d36356c198ee27c7e85d Author: Benjamin Dauvergne Date: Fri Sep 11 15:51:56 2009 +0000 Core: remove warning when lasso_registry_get_direct_mapping fails * lasso/registry.c (lasso_registry_get_direct_mapping): g_return_val_if_fail output a warning when condition fails, use a simple if instead. lasso/registry.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 08f7326ed64ffa7197e7c75591ce2cae21964313 Author: Benjamin Dauvergne Date: Fri Sep 11 15:51:55 2009 +0000 Tests: add more assertion to random test * tests/random_tests.c: add more assertion testing for various return values or field values. tests/random_tests.c | 47 ++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 44 insertions(+), 3 deletions(-) commit 1f78831973b060a7615a54df798b3485beffaa39 Author: Benjamin Dauvergne Date: Fri Sep 11 15:51:53 2009 +0000 XML: Fix seg-fault bug introduced in commit 4108 * lasso/xml/xml.c: lasso_node_get_xmlnode_for_any_type is broken, if no original_xmlnode is present, return just cur. Also add all missing cases for the state of the pair (cur, orignal_xmlnode). * tests/basic_tests.c: add a non-regression test, testing all dump/restore functions. lasso/xml/xml.c | 20 +- tests/basic_tests.c | 1677 ++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 1690 insertions(+), 7 deletions(-) commit 4074c22a1304d262c99d16bb4b674e8ec2aef18a Author: Benjamin Dauvergne Date: Fri Sep 11 15:51:51 2009 +0000 Core: add new macros to traverse lists * lasso/utils.h: lasso_foreach_full_begin(_type, _data, _iter, _list) traverse GList* _list, using _iter as iteration variable extract data field to variable _data of type _type. lasso/utils.h | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) commit 54ede0b9816b34ffcf5e93f8283ecb61d50356dd Author: Benjamin Dauvergne Date: Fri Sep 11 15:51:50 2009 +0000 Test: fix Makefile.am to work with 'out of source' build directory * tests/Makefile.am: rpath must refer to the build directory, not the source directory. tests/Makefile.am | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 5ce049c970e8544ee7b2e4b02fa8a5e64ed4dd8a Author: Benjamin Dauvergne Date: Fri Sep 11 15:51:49 2009 +0000 Core: fix extract_symbols regular expression * lasso/extract_symbols.py: the regular expression was not matching declaration over multiple lines, and would catch argument starting with lasso_. Fixed. lasso/extract_symbols.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 708cbd5142afebd2d54e6c99fb02e737fe0aff63 Author: Benjamin Dauvergne Date: Fri Sep 11 15:51:47 2009 +0000 XML: add all inclusive header files for id-wsf2, ws, id-wsf XML elements * lasso/xml/wsf/xml_ws.h: * lasso/xml/id-wsf-2.0/xml_idwsf2.h: * lasso/xml/xml_idwsf.h: new files. lasso/xml/id-wsf-2.0/xml_idwsf2.h | 165 ++++++++++++++++++++++++++++++++++++++ lasso/xml/ws/xml_ws.h | 45 +++++++++++ lasso/xml/xml_idwsf.h | 21 ++++- 3 files changed, 230 insertions(+), 1 deletion(-) commit 7f2e83604fe563869f67218fd9b86376d2a26c13 Author: Benjamin Dauvergne Date: Fri Sep 11 15:51:46 2009 +0000 ID-WSF 2.0: add set_request/set_response method to Profile object * lasso/id-wsf-2.0/profile.c: * lasso/id-wsf-2.0/profile.h: add two methods that set the response object and replace the content of the SOAP message with this object. lasso/id-wsf-2.0/profile.c | 40 ++++++++++++++++++++++++++++++++++++++++ lasso/id-wsf-2.0/profile.h | 3 +++ 2 files changed, 43 insertions(+) commit ec01a14f54ec6685c3ab8c5e166e2fcddfe3e8df Author: Benjamin Dauvergne Date: Fri Sep 11 15:51:44 2009 +0000 XML SOAP: add new soap fault constructor * lasso/xml/soap_fault.c: * lasso/xml/soap_fault.h: add a full constructor allowing to set faultcode and faultstring in one call. lasso/xml/soap_fault.c | 20 ++++++++++++++++++-- lasso/xml/soap_fault.h | 2 ++ 2 files changed, 20 insertions(+), 2 deletions(-) commit acdf38fb29879b0d2be34e15c664859ef3fa22b1 Author: Benjamin Dauvergne Date: Fri Sep 11 15:51:43 2009 +0000 XML ID-WSF 2.0: make non simple constructor of MiscTextNode return real type * lasso/xml/misc_text_node.c: non simple constructor must return the real object type because Java binding does not work without it. lasso/xml/misc_text_node.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 112ee37099e2291c416798bde343032da0016e86 Author: Benjamin Dauvergne Date: Fri Sep 11 15:51:42 2009 +0000 XML SAML 1.1: fix schema figure for samlp:Request lasso/xml/samlp_request.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit b5d58049f7d96c0111751e6d923973e58e81f455 Author: Benjamin Dauvergne Date: Fri Sep 11 15:51:41 2009 +0000 Docs: remove old lasso-sections.txt file docs/reference/lasso-sections.txt.in | 529 ----------------------------------- 1 file changed, 529 deletions(-) commit 52d0b8cc6adf606448d8ec904b14791b7cb93f7e Author: Benjamin Dauvergne Date: Fri Sep 11 15:51:39 2009 +0000 ID-WSF 2.0: add accessor for field of LassoIdWsf2Profile * lasso/id-wsf-2.0/profile.c lasso/id-wsf-2.0/profile.c: add two accessor to get to soap_response and soap_request object, next step is to make those two fields really private. lasso/id-wsf-2.0/profile.c | 32 ++++++++++++++++++++++++++++++++ lasso/id-wsf-2.0/profile.h | 5 +++++ 2 files changed, 37 insertions(+) commit 8f6e7dcb4920e0561bd9892abf4d4facbc553e82 Author: Benjamin Dauvergne Date: Fri Sep 11 15:51:38 2009 +0000 ID-WSF: fix duplication of namespace string declaration, add fault codes for WS-Security * lasso/xml/strings.h: namespace of WS-Security 1.0 was duplicated, add specified fault code linked to WS-Security. lasso/xml/strings.h | 92 ++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 73 insertions(+), 19 deletions(-) commit b6abc9895e4e0ccf07cf2db63285e6458b74ff7f Author: Benjamin Dauvergne Date: Fri Sep 11 15:51:36 2009 +0000 ID-WSF: remove LassoWsseSecurity in favor of LasoWsSec1SecurityHeader * xml/Makefile.am: remove the file from the source list * xml/wsse_security.c: * xml/wsse_security.h: remove the files * xml/xml.c: use LassoWsSec1SecurityHeader for LASSO_WSSE_HREF namespace also. lasso/xml/Makefile.am | 6 +-- lasso/xml/wsse_security.c | 102 ---------------------------------------------- lasso/xml/wsse_security.h | 68 ------------------------------- lasso/xml/xml.c | 2 +- 4 files changed, 3 insertions(+), 175 deletions(-) commit 16ba173270da46b6c4b4c820516ea9f7133117cb Author: Benjamin Dauvergne Date: Fri Sep 11 15:51:35 2009 +0000 ID-WSF 1.0: use the common wsse:Security object * lasso/id-wsf/wsf_profile.c: use the common LassoWsSec1SecurityHeader object instead of the specific LassoWsseSecurity, and set the needed namespace using lasso_node_set_custom_namespace. add implementation comments. lasso/id-wsf/wsf_profile.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) commit 5eff2e96d89d8cc8d6f32144d5601ae9aeace6b8 Author: Benjamin Dauvergne Date: Fri Sep 11 15:51:34 2009 +0000 WS: register LassoWsSec1SecurityHeader for all namespace associated to WS-Security * lasso/xml/ws/wsse_security_header.c: register all namespace that contains a Security header object. lasso/xml/ws/wsse_security_header.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) commit 8a7c0cbaa3260ab86b4cfe108fc2570d9ef666d7 Author: Benjamin Dauvergne Date: Fri Sep 11 15:51:32 2009 +0000 XML: add an API to set namespace on a single instance of a LassoNode * lasso/xml/xml.h lasso/xml/xml.c: add a new public API lasso_node_set_custom_namespace(node, prefix, href). It allows to set the precise namespace of a single object, all other instance of the same class continue to use the default namespace for the class. It should be used for difficult consumer of certain nodes (like wsse:Security) which only know certain namespace or do not use the namespace going with the specified version of a specification (like MSP not following ID-WSF 1.0 specification and using http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd instead of http://schemas.xmlsoap.org/ws/2003/06/secext. It also allows to share implementation of schema objects common to many version of the same specification (wsse:Security between ID-WSF 1.0 and ID-WSF 2.0), without creating too many child classes. lasso/xml/xml.c | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++- lasso/xml/xml.h | 2 ++ 2 files changed, 74 insertions(+), 1 deletion(-) commit 9a677fb7424600d1bfc386982e81bf080b40ff0f Author: Benjamin Dauvergne Date: Fri Sep 11 15:51:31 2009 +0000 ID-WSF 2.0: remove obsolete FIXME in discovery.h lasso/id-wsf-2.0/discovery.h | 1 - 1 file changed, 1 deletion(-) commit d6fd5c62bb83287272bf4c0e7b23ba6507a2e10a Author: Benjamin Dauvergne Date: Fri Sep 11 15:51:30 2009 +0000 Core: remove a use of lasso_node_destroy in LassoSession lasso/id-ff/session.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit e25410461c2cecf3e111dc2506c880bb1443262a Author: Benjamin Dauvergne Date: Fri Sep 11 15:51:28 2009 +0000 Bindings: add support for guchar * bindings/java/lang.py: * bindings/python/lang.py: add guchar to list of C types everywhere. bindings/java/lang.py | 4 ++-- bindings/python/lang.py | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) commit 2f91efc9c116f042366bc5e8ef6af168fa843641 Author: Benjamin Dauvergne Date: Fri Sep 11 15:51:26 2009 +0000 XML: add support for free xml content to LassoMiscTextNode * lasso/xml/misc_text_node.c: * lasso/xml/misc_text_node.h: it is often necessary to be able to put completely determined content inside lasso generated request (for example when copying an assertion for a Bearer authentication method). In this case you can use lasso_node_get_original_xml_node to get at the original content and lasso_misc_text_node_new_with_xml_node to get a LassNode with the same content. There are two additional function to acces this xml payload: lasso_misc_text_node_get_xml_content and lasso_misc_text_node_set_xml_content. lasso/xml/misc_text_node.c | 78 ++++++++++++++++++++++++++++++++++++++++++---- lasso/xml/misc_text_node.h | 10 +++++- 2 files changed, 81 insertions(+), 7 deletions(-) commit 8ba526872a1699aae955a51ce85cf372ef462a7d Author: Benjamin Dauvergne Date: Fri Aug 28 14:31:19 2009 +0000 Core: fix commit 4313, restore support for --enable-wsf * configure.ac: I throwed the baby with the bathwater.. configure.ac | 4 ++++ 1 file changed, 4 insertions(+) commit 628bc31e9dc509991142c45017ef752d539fe4e3 Author: Benjamin Dauvergne Date: Fri Aug 28 14:26:42 2009 +0000 Core: fix make dist with --enable-wsf * lasso/id-wsf-2.0/Makefile.am: * lasso/xml/Makefile.am: some files were missing from the dist files, add them. lasso/id-wsf-2.0/Makefile.am | 5 +++-- lasso/xml/Makefile.am | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) commit db210b6759b137a8de17d02ea881772da3f1b79f Author: Benjamin Dauvergne Date: Fri Aug 28 14:26:41 2009 +0000 Core: remove SWIG ID-WSF warning from configure.ac * configure.ac: as ID-WSF support in SWIG in not maintained anymore we can remove the warning about using pre-generated SWIG files with a different setting for the --enable-wsf flag. configure.ac | 23 ----------------------- 1 file changed, 23 deletions(-) commit cb4a557ef16469ace76eefef6647f77fc48445bb Author: Benjamin Dauvergne Date: Fri Aug 28 14:26:40 2009 +0000 Binding: skip lasso_data_service_get_query_item * bindings/overrides.xml: bindings do not support out arguments, so skip generating bindings for lasso_data_service_get_query_item for the moment. bindings/overrides.xml | 1 + 1 file changed, 1 insertion(+) commit 8944c0b2f3656c3bfc44cec71899ce8e6036c415 Author: Benjamin Dauvergne Date: Fri Aug 28 14:26:39 2009 +0000 Core: set tar-pax as dist file format * configure.ac: we could have more than 99 characters long path in the dist files, the pax format for tar archives support it. configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 819b9401f4dfed124695bf7672d9a1f4a3dbe1b2 Author: Benjamin Dauvergne Date: Fri Aug 28 14:26:37 2009 +0000 ID-WSF 1.0: Fixed missing or deprecated functions in public headers Some new functions were missing from the headers, others were deprecated some time ago and as the API is not considered stable for ID-WSF, I removed them definitely. lasso/id-wsf/data_service.h | 9 ++-- lasso/id-wsf/discovery.h | 3 +- lasso/id-wsf/interaction_profile_service.h | 3 ++ lasso/id-wsf/utils.h | 4 +- lasso/id-wsf/wsf_profile.c | 67 ++++-------------------------- lasso/id-wsf/wsf_profile.h | 14 +++---- lasso/id-wsf/wsf_profile_private.h | 2 - 7 files changed, 25 insertions(+), 77 deletions(-) commit 86c94f9beae0c5da15b562ebb27ffca3198c2fd4 Author: Benjamin Dauvergne Date: Thu Aug 27 12:07:42 2009 +0000 Bindings: Skip lasso_data_service_get_answers * bindings/overrides.xml: skip unsupported function. bindings/overrides.xml | 1 + 1 file changed, 1 insertion(+) commit 563041cd074876fc6e1539a470adfbfd93a378d3 Author: Benjamin Dauvergne Date: Thu Aug 27 12:07:40 2009 +0000 Tests: add configuration file loading to integration test * tests/integration/README: * tests/integration/saml2/__init__.py: If ~/.config/lasso_integration.conf exists, load it to find path to authentic and lcs. Add support for three environement variables: - LASSO_BUILDDIR, to specify an out of source build directory to test, - NO_SILENT, to allow authentic and lcs outputs, - VALGRIND, to check memory leaks using valgrind. tests/integration/README | 16 +++++++++--- tests/integration/saml2/__init__.py | 49 +++++++++++++++++++++++++++++-------- 2 files changed, 52 insertions(+), 13 deletions(-) commit b48c07516446f56cb62e00a37a157fbdb41ef280 Author: Frederic Peters Date: Wed Aug 26 15:42:44 2009 +0000 Call gtkdocize before automake autogen.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit fcc8e8c9e6610b250d7afc6f336c1f4a812d6da0 Author: Benjamin Dauvergne Date: Wed Aug 26 15:15:25 2009 +0000 Core: errors.c is a generated file, when generating it place it in $(srcdir) not build directory * lasso/Makefile.am: the place for errors.c is in the source directory, not the build directory. lasso/Makefile.am | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 29de608d19283c45ff0cc5aa370c24df491e9cac Author: Benjamin Dauvergne Date: Wed Aug 26 15:15:24 2009 +0000 SAML 2.0: Fix bug introduced in commit 4235 * lasso/saml-2.0/login.c: profile->msg_url is released before being used ;( Restore the code copying the URL before passing it to lasso_saml20_profile_build_http_redirect, to free it after. lasso/saml-2.0/login.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit fa8e5d4679b0ac110e7952e39a5a48311a54489f Author: Benjamin Dauvergne Date: Wed Aug 26 15:15:23 2009 +0000 Core: Fix errors.c generation lasso/Makefile.am | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 574496fb7d967673b80847b25037fb4b001a67f5 Author: Benjamin Dauvergne Date: Wed Aug 26 15:15:22 2009 +0000 XML SAML2: remove typedef of LassoSaml2Assertion in saml2_advice.h and saml2_evidence.h * xml/saml-2.0/saml2_advice.h xml/saml-2.0/saml2_evidence.h: the declaration of LassoSaml2Assertion for supposedly preventing recursive include is useless now. lasso/xml/saml-2.0/saml2_advice.h | 5 ----- lasso/xml/saml-2.0/saml2_evidence.h | 6 ------ 2 files changed, 11 deletions(-) commit 0a184812d9a9c6db4bb6b42c182369cdbfb23567 Author: Benjamin Dauvergne Date: Wed Aug 26 15:15:21 2009 +0000 Core: fix spurious semi-colon inserted in commit 4093 * lasso/errors.h: remove useless semi-colon lasso/errors.h | 1 - 1 file changed, 1 deletion(-) commit 8786d73d04464c98b8d4b1645d017bdff8a4a63a Author: Benjamin Dauvergne Date: Wed Aug 26 15:15:20 2009 +0000 Core: add assertion query to exported profiles * lasso/lasso.h: include lasso/saml-2.0/assertion_query.h lasso/lasso.h | 1 + 1 file changed, 1 insertion(+) commit 49eb8da269c899c678b2b4afa8f81851712bbf4a Author: Benjamin Dauvergne Date: Wed Aug 26 15:15:18 2009 +0000 XML: Add all including header fil for saml2, id-ff and id-wsf * lasso/xml/xml_idff.h: this header file reference all id-ff 1.2 elements * lasso/xml/xml_idwsf.h: this header file reference all id-wsf 1.0 elements * lasso/xml/saml-2.0/xml_saml2.h: this header file reference all saml-2.0 elements bindings/bindings.py | 2 + lasso/xml/Makefile.am | 2 +- lasso/xml/saml-2.0/Makefile.am | 1 + lasso/xml/saml-2.0/xml_saml2.h | 80 +++++++++++++++++++++++++++++++++++++++ lasso/xml/xml_idff.h | 86 ++++++++++++++++++++++++++++++++++++++++++ lasso/xml/xml_idwsf.h | 73 +++++++++++++++++++++++++++++++++++ 6 files changed, 243 insertions(+), 1 deletion(-) commit 5821cc48dae5df1ced6674b3371bcc5622de4d65 Author: Benjamin Dauvergne Date: Wed Aug 26 15:15:17 2009 +0000 Core: Remove include of lasso.h in registry.h * lasso/registry.h: include of lasso.h is useless, replace by including directly export.h * lasso/registry.c: directly include errors.h lasso/registry.c | 1 + lasso/registry.h | 5 +---- 2 files changed, 2 insertions(+), 4 deletions(-) commit 58c984fb38d5053deed1ddc2ec668aeab0027b5f Author: Benjamin Dauvergne Date: Wed Aug 26 15:15:16 2009 +0000 ID-WSF: remove OFTYPE usage from header lasso/id-wsf-2.0/server.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit fd256b2269cb7e15cc6113270d6a20541a574cc4 Author: Benjamin Dauvergne Date: Wed Aug 26 15:15:07 2009 +0000 Docs: change the doc production and lot of other fixes * lasso/Makefile.am: distribute extract_sections.py * docs/references/lasso/lasso.types.in: add missing class (mainly SAML2 and ID-WSF 1.0/2.0) from docs/references/lasso.types.in * lasso/xml/strings.h: add lots of documentation, or at least documentation template to strings constants. * id-ff/login.h: * saml-2.0/assertion_query.h: * xml/xml.h: document undocumented enumerations. * lasso/errors.h: add proper documentation about error codes. * lasso/errors.c: new version of the lasso_strerror function * lasso/build_strerror.py: update the script that generater lasso_strerror from the documentation comments. Remove usage of OFTYPE * lasso/id-ff/session.c: * lasso/id-ff/session.h: remove usage of oftype, prefer gtk-introspection annotations instead. * lasso/id-wsf/data_service.h: * lasso/id-wsf/data_service.c: do the same. Add a script to build lasso-sections.txt * lasso/extract_sections.py: this script parses header files and generated lasso-sections.txt content for GObject class descriptions. Add a template file for the lasso-section.txt file * docs/references/lasso-sections.txt.in: this file serves as a base for the generation of lasso-sections.txt Update docs/references/Makefile.am for generating lasso-sections.txt * docs/references/Makefile.am: always rebuild template, using out of source build directory is too weird without it. call new script extract_sections.py to regenerate lasso-sections.txt if header files changed. Update lasso.sgml file with all missing sections * docs/reference/lasso.sgml: add all missing sections, mainly objects from XML schemas. * docs/reference/lasso-sections.txt: update it * *.c: add section documentation to some files. * lasso/xml/strings.h: fix bad usage or docbook markup Makefile.am | 1 + autogen.sh | 3 + configure.ac | 25 +- docs/Makefile.am | 5 +- docs/reference/Makefile.am | 171 +- docs/reference/lasso-sections.txt | 2313 ----------- docs/reference/lasso-sections.txt.in | 529 +++ docs/reference/lasso.sgml | 377 -- docs/reference/lasso.types.in | 59 - docs/reference/lasso/Makefile.am | 121 + docs/reference/lasso/lasso-docs.sgml | 535 +++ docs/reference/lasso/lasso-sections.txt | 6020 ++++++++++++++++++++++++++++ docs/reference/lasso/lasso.types.in | 346 ++ docs/reference/{ => lasso}/version.xml.in | 0 docs/reference/snippet-types.rst | 99 - lasso/Makefile.am | 2 +- lasso/build_strerror.py | 11 +- lasso/errors.c | 24 +- lasso/errors.h | 866 +++- lasso/extract_sections.py | 61 + lasso/id-ff/defederation.c | 4 + lasso/id-ff/federation.c | 2 + lasso/id-ff/identity.c | 3 + lasso/id-ff/login.h | 20 +- lasso/id-ff/logout.c | 9 +- lasso/id-ff/providerprivate.h | 6 +- lasso/id-ff/session.c | 3 +- lasso/id-ff/session.h | 6 +- lasso/id-wsf-2.0/server.c | 14 + lasso/id-wsf/authentication.c | 9 + lasso/id-wsf/data_service.c | 4 +- lasso/id-wsf/data_service.h | 4 +- lasso/id-wsf/id_ff_extensions.c | 7 + lasso/id-wsf/interaction_profile_service.c | 9 +- lasso/id-wsf/personal_profile_service.c | 6 + lasso/id-wsf/utils.c | 7 + lasso/id-wsf/wsf_profile.c | 8 + lasso/saml-2.0/assertion_query.c | 2 +- lasso/saml-2.0/assertion_query.h | 15 +- lasso/saml-2.0/login.c | 2 +- lasso/utils.c | 7 + lasso/xml/ds_key_info.c | 4 +- lasso/xml/ds_key_value.c | 4 +- lasso/xml/ds_rsa_key_value.c | 2 + lasso/xml/saml-2.0/saml2_action.c | 2 +- lasso/xml/saml_attribute.c | 9 +- lasso/xml/saml_attribute_designator.c | 14 +- lasso/xml/saml_attribute_statement.c | 13 +- lasso/xml/soap_fault.c | 13 +- lasso/xml/strings.h | 907 ++++- lasso/xml/tools.c | 6 + lasso/xml/xml.h | 9 +- m4/gtk-doc.m4 | 39 - 53 files changed, 9466 insertions(+), 3271 deletions(-) commit b8475305e447e62169da0954247d21077e5ca805 Author: Benjamin Dauvergne Date: Wed Aug 26 15:15:03 2009 +0000 Core: fix makefile for generating errors.h in out of source dir build * lasso/Makefile.am: errors.h is expected to be in srcdir not builddir. lasso/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit a97feba4229b8a08129f3e993e95a229508975b7 Author: Benjamin Dauvergne Date: Wed Aug 26 15:15:02 2009 +0000 Bindings: for functions that must be totally skiped do it during parsing * bindings/bindings.py: parsing of argument type is still not advanced enough, so in order to remove spurious warnings, skip function directly during parsing just before the treatment of function signature. bindings/bindings.py | 62 +++++++++++++++++++++++++++++----------------------- 1 file changed, 35 insertions(+), 27 deletions(-) commit 9197550e40d178c531fad6d8b36da0fa0e03cffb Author: Benjamin Dauvergne Date: Wed Aug 26 15:15:00 2009 +0000 Tests: in integration test do not set the PYTHONPATH * tests/integration/saml2/__init__.py: to permit using build directory different from the src directory, do not force the PYTHONPATH to be relative to src dir to find lasso python module. tests/integration/saml2/__init__.py | 1 - 1 file changed, 1 deletion(-) commit 16a136c61b84f14e84e72fb1d0f0c09dc0c1beec Author: Benjamin Dauvergne Date: Wed Aug 26 15:14:59 2009 +0000 Tests: do not hardcode PYTHONPATH in the valgrind wrapper * tests/integration/valgrind-wrapper.sh: remove PYTHONPATH setting. tests/integration/valgrind-wrapper.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 8f84e3da6814b102aa3b1d7f20a81d6548081ed8 Author: Benjamin Dauvergne Date: Wed Aug 26 15:14:58 2009 +0000 Tests: distribute integration tests * tests/Makefile.am: add integration directory to the distdir. tests/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 6e33ada682bd0aa9f746e1407afbda93af9b2d25 Author: Benjamin Dauvergne Date: Wed Aug 26 15:14:56 2009 +0000 Core: Use automake-1.11 when possible * Makefile.am: use new automake-1.11 silent rules if possible move macros to m4 directory * m4/gtk-doc.m4: add gtk-doc macros. * lasso/Makefile.am: add missing -f flag to rm, to unbreak make distcheck * docs/references/Makefile.am: fix problem between libtool and gtk-doc * autogen.sh: update to autogen.sh from gtk-doc, add support for automake-1.11 Makefile.am | 1 + autogen.sh | 355 +++++++-------------------------- configure.ac | 7 +- docs/reference/Makefile.am | 4 +- lasso/Makefile.am | 2 +- {macros => m4}/ac_check_class.m4 | 0 {macros => m4}/ac_check_classpath.m4 | 0 {macros => m4}/ac_check_java_home.m4 | 0 {macros => m4}/ac_check_junit.m4 | 0 {macros => m4}/ac_check_rqrd_class.m4 | 0 {macros => m4}/ac_java_options.m4 | 0 {macros => m4}/ac_prog_jar.m4 | 0 {macros => m4}/ac_prog_java.m4 | 0 {macros => m4}/ac_prog_java_cc.m4 | 0 {macros => m4}/ac_prog_java_works.m4 | 0 {macros => m4}/ac_prog_javac.m4 | 0 {macros => m4}/ac_prog_javac_works.m4 | 0 {macros => m4}/ac_prog_javadoc.m4 | 0 {macros => m4}/ac_prog_javah.m4 | 0 {macros => m4}/ac_try_compile_java.m4 | 0 {macros => m4}/ac_try_run_javac.m4 | 0 {macros => m4}/as-compiler-flag.m4 | 0 {macros => m4}/check.m4 | 0 {macros => m4}/dps_java_check_class.m4 | 0 {macros => m4}/dps_libgcj_jar.m4 | 0 {macros => m4}/dps_xtra_classpath.m4 | 0 m4/gtk-doc.m4 | 39 ++++ 27 files changed, 117 insertions(+), 291 deletions(-) commit 366e4433610e8846b9ceb82952eb2f42fd7284f6 Author: Benjamin Dauvergne Date: Wed Aug 26 15:14:54 2009 +0000 Tests: Add data files to EXTRA_DIST * tests/data/Makefile.am: data file for tests2 were missing (to pass distcheck). tests/data/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit b63bc73b93255d27e784e5e1dbf99fa4e1dae76b Author: Benjamin Dauvergne Date: Wed Aug 26 15:14:48 2009 +0000 XML: remove all useless instance_init functions * Use Coccinelle semantic patch tool (http://coccinelle.lip6.fr/) to remove useless instance_init functions, the first patch applied was: @@ type T,V; identifier I, J; parameter list P; expression E1; @@ V instance_init(T node) { <... ( - E1 = 0; | - E1 = NULL; | - E1 = FALSE; ) ...> } It removes useless initialization to 0 (GObject already zeroes allocated objects). The second one is: @ rule1 @ type T; identifier node,fn; @@ - static void fn(T *node) { } @ rule2 extends rule1 @ typedef GType, GInstanceInitFunc; identifier type_constructor; @@ GType type_constructor() { <... - (GInstanceInitFunc)fn + NULL ...> } It removes empty instance_init functions. lasso/xml/disco_authenticate_requester.c | 8 +------- lasso/xml/disco_authenticate_session_context.c | 8 +------- lasso/xml/disco_authorize_requester.c | 8 +------- lasso/xml/disco_credentials.c | 8 +------- lasso/xml/disco_description.c | 17 +---------------- lasso/xml/disco_encrypt_resource_id.c | 8 +------- lasso/xml/disco_encrypted_resource_id.c | 19 +++---------------- lasso/xml/disco_encrypted_resource_id.h | 7 ++----- lasso/xml/disco_generate_bearer_token.c | 8 +------- lasso/xml/disco_insert_entry.c | 9 +-------- lasso/xml/disco_modify.c | 12 +----------- lasso/xml/disco_modify_response.c | 10 +--------- lasso/xml/disco_options.c | 8 +------- lasso/xml/disco_query.c | 11 +---------- lasso/xml/disco_query_response.c | 12 +----------- lasso/xml/disco_remove_entry.c | 7 +------ lasso/xml/disco_requested_service_type.c | 9 +-------- lasso/xml/disco_resource_id.c | 9 +-------- lasso/xml/disco_resource_offering.c | 13 +------------ lasso/xml/disco_send_single_logout.c | 8 +------- lasso/xml/disco_service_instance.c | 10 +--------- lasso/xml/ds_key_info.c | 8 +------- lasso/xml/ds_key_value.c | 7 +------ lasso/xml/ds_rsa_key_value.c | 8 +------- lasso/xml/dst_data.c | 9 +-------- lasso/xml/dst_modification.c | 11 +---------- lasso/xml/dst_modify.c | 8 +------- lasso/xml/dst_modify_response.c | 8 +------- lasso/xml/dst_new_data.c | 7 +------ lasso/xml/dst_query.c | 13 +------------ lasso/xml/dst_query_item.c | 12 +----------- lasso/xml/dst_query_response.c | 16 +--------------- lasso/xml/id-wsf-2.0/disco_abstract.c | 7 +------ lasso/xml/id-wsf-2.0/disco_endpoint_context.c | 10 +--------- lasso/xml/id-wsf-2.0/disco_keys.c | 7 +------ lasso/xml/id-wsf-2.0/disco_options.c | 7 +------ lasso/xml/id-wsf-2.0/disco_provider_id.c | 7 +------ lasso/xml/id-wsf-2.0/disco_query.c | 1 - lasso/xml/id-wsf-2.0/disco_query_response.c | 2 -- lasso/xml/id-wsf-2.0/disco_requested_service.c | 15 +-------------- lasso/xml/id-wsf-2.0/disco_security_context.c | 8 +------- lasso/xml/id-wsf-2.0/disco_service_context.c | 9 +-------- lasso/xml/id-wsf-2.0/disco_service_type.c | 7 +------ lasso/xml/id-wsf-2.0/disco_svc_md_association_add.c | 1 - .../disco_svc_md_association_add_response.c | 1 - .../xml/id-wsf-2.0/disco_svc_md_association_delete.c | 1 - .../disco_svc_md_association_delete_response.c | 1 - lasso/xml/id-wsf-2.0/disco_svc_md_association_query.c | 1 - .../disco_svc_md_association_query_response.c | 2 -- lasso/xml/id-wsf-2.0/disco_svc_md_delete.c | 1 - lasso/xml/id-wsf-2.0/disco_svc_md_delete_response.c | 1 - lasso/xml/id-wsf-2.0/disco_svc_md_query.c | 1 - lasso/xml/id-wsf-2.0/disco_svc_md_query_response.c | 2 -- lasso/xml/id-wsf-2.0/disco_svc_md_register.c | 1 - lasso/xml/id-wsf-2.0/disco_svc_md_register_response.c | 3 --- lasso/xml/id-wsf-2.0/disco_svc_md_replace.c | 1 - lasso/xml/id-wsf-2.0/disco_svc_md_replace_response.c | 1 - lasso/xml/id-wsf-2.0/disco_svc_metadata.c | 10 +--------- lasso/xml/id-wsf-2.0/dst_data_response_base.c | 7 +------ lasso/xml/id-wsf-2.0/dst_delete_item_base.c | 11 +---------- lasso/xml/id-wsf-2.0/dst_request.c | 2 -- lasso/xml/id-wsf-2.0/dst_result_query_base.c | 14 +------------- lasso/xml/id-wsf-2.0/dst_test_item_base.c | 10 +--------- lasso/xml/id-wsf-2.0/dstref_app_data.c | 7 +------ lasso/xml/id-wsf-2.0/dstref_create.c | 8 +------- lasso/xml/id-wsf-2.0/dstref_create_item.c | 10 +--------- lasso/xml/id-wsf-2.0/dstref_data.c | 2 -- lasso/xml/id-wsf-2.0/dstref_data_response.c | 7 +------ lasso/xml/id-wsf-2.0/dstref_delete.c | 7 +------ lasso/xml/id-wsf-2.0/dstref_delete_item.c | 7 +------ lasso/xml/id-wsf-2.0/dstref_item_data.c | 9 +-------- lasso/xml/id-wsf-2.0/dstref_modify.c | 10 +--------- lasso/xml/id-wsf-2.0/dstref_modify_item.c | 12 +----------- lasso/xml/id-wsf-2.0/dstref_modify_response.c | 8 +------- lasso/xml/id-wsf-2.0/dstref_query.c | 10 +--------- lasso/xml/id-wsf-2.0/dstref_query_item.c | 2 -- lasso/xml/id-wsf-2.0/dstref_query_response.c | 10 +--------- lasso/xml/id-wsf-2.0/dstref_result_query.c | 8 +------- lasso/xml/id-wsf-2.0/dstref_test_item.c | 7 +------ lasso/xml/id-wsf-2.0/ims_identity_mapping_request.c | 1 - lasso/xml/id-wsf-2.0/ims_identity_mapping_response.c | 2 -- lasso/xml/id-wsf-2.0/ims_mapping_input.c | 9 +-------- lasso/xml/id-wsf-2.0/ims_mapping_output.c | 8 +------- lasso/xml/id-wsf-2.0/is_help.c | 9 +-------- lasso/xml/id-wsf-2.0/is_inquiry.c | 12 +----------- lasso/xml/id-wsf-2.0/is_inquiry_element.c | 11 +---------- lasso/xml/id-wsf-2.0/is_interaction_request.c | 12 +----------- lasso/xml/id-wsf-2.0/is_interaction_response.c | 9 +-------- lasso/xml/id-wsf-2.0/is_interaction_statement.c | 1 - lasso/xml/id-wsf-2.0/is_item.c | 9 +-------- lasso/xml/id-wsf-2.0/is_parameter.c | 8 +------- lasso/xml/id-wsf-2.0/is_select.c | 7 +------ lasso/xml/id-wsf-2.0/is_text.c | 9 +-------- lasso/xml/id-wsf-2.0/ps_add_collection_request.c | 8 +------- lasso/xml/id-wsf-2.0/ps_add_collection_response.c | 7 +------ lasso/xml/id-wsf-2.0/ps_add_entity_request.c | 11 +---------- lasso/xml/id-wsf-2.0/ps_add_entity_response.c | 9 +-------- lasso/xml/id-wsf-2.0/ps_add_known_entity_request.c | 11 +---------- lasso/xml/id-wsf-2.0/ps_add_known_entity_response.c | 9 +-------- lasso/xml/id-wsf-2.0/ps_add_to_collection_request.c | 9 +-------- lasso/xml/id-wsf-2.0/ps_get_object_info_request.c | 8 +------- lasso/xml/id-wsf-2.0/ps_get_object_info_response.c | 7 +------ lasso/xml/id-wsf-2.0/ps_item_data.c | 7 +------ lasso/xml/id-wsf-2.0/ps_list_members_request.c | 3 --- lasso/xml/id-wsf-2.0/ps_list_members_response.c | 7 +------ lasso/xml/id-wsf-2.0/ps_notification.c | 7 +------ lasso/xml/id-wsf-2.0/ps_notify.c | 8 +------- lasso/xml/id-wsf-2.0/ps_object.c | 14 +------------- lasso/xml/id-wsf-2.0/ps_query_objects_request.c | 2 -- lasso/xml/id-wsf-2.0/ps_query_objects_response.c | 7 +------ lasso/xml/id-wsf-2.0/ps_remove_collection_request.c | 7 +------ lasso/xml/id-wsf-2.0/ps_remove_entity_request.c | 7 +------ .../id-wsf-2.0/ps_remove_from_collection_request.c | 9 +-------- lasso/xml/id-wsf-2.0/ps_resolve_identifier_request.c | 7 +------ lasso/xml/id-wsf-2.0/ps_resolve_identifier_response.c | 7 +------ lasso/xml/id-wsf-2.0/ps_resolve_input.c | 7 +------ lasso/xml/id-wsf-2.0/ps_response_abstract.c | 1 - lasso/xml/id-wsf-2.0/ps_set_object_info_request.c | 8 +------- lasso/xml/id-wsf-2.0/ps_test_membership_request.c | 9 +-------- lasso/xml/id-wsf-2.0/ps_test_membership_response.c | 7 +------ lasso/xml/id-wsf-2.0/sb2_consent.c | 2 -- lasso/xml/id-wsf-2.0/sb2_credentials_context.c | 2 -- lasso/xml/id-wsf-2.0/sb2_endpoint_update.c | 7 +------ lasso/xml/id-wsf-2.0/sb2_redirect_request.c | 7 +------ lasso/xml/id-wsf-2.0/sb2_sender.c | 2 -- lasso/xml/id-wsf-2.0/sb2_timeout.c | 1 - lasso/xml/id-wsf-2.0/sb2_usage_directive.c | 1 - lasso/xml/id-wsf-2.0/sb2_user_interaction_header.c | 5 ----- lasso/xml/id-wsf-2.0/sbf_framework.c | 1 - lasso/xml/id-wsf-2.0/sec_token.c | 10 +--------- lasso/xml/id-wsf-2.0/sec_token_policy.c | 5 ----- lasso/xml/id-wsf-2.0/sec_transited_provider_path.c | 7 +------ lasso/xml/id-wsf-2.0/subs_notification.c | 11 +---------- lasso/xml/id-wsf-2.0/subs_ref_item.c | 8 +------- lasso/xml/id-wsf-2.0/subs_subscription.c | 15 +-------------- lasso/xml/id-wsf-2.0/subsref_app_data.c | 8 +------- lasso/xml/id-wsf-2.0/subsref_create.c | 9 +-------- lasso/xml/id-wsf-2.0/subsref_create_item.c | 10 +--------- lasso/xml/id-wsf-2.0/subsref_data.c | 2 -- lasso/xml/id-wsf-2.0/subsref_data_response.c | 7 +------ lasso/xml/id-wsf-2.0/subsref_delete.c | 7 +------ lasso/xml/id-wsf-2.0/subsref_delete_item.c | 7 +------ lasso/xml/id-wsf-2.0/subsref_item_data.c | 9 +-------- lasso/xml/id-wsf-2.0/subsref_modify.c | 9 +-------- lasso/xml/id-wsf-2.0/subsref_modify_item.c | 12 +----------- lasso/xml/id-wsf-2.0/subsref_notification.c | 7 +------ lasso/xml/id-wsf-2.0/subsref_notify.c | 8 +------- lasso/xml/id-wsf-2.0/subsref_query.c | 9 +-------- lasso/xml/id-wsf-2.0/subsref_query_item.c | 2 -- lasso/xml/id-wsf-2.0/subsref_query_response.c | 8 +------- lasso/xml/id-wsf-2.0/subsref_result_query.c | 8 +------- lasso/xml/id-wsf-2.0/subsref_subscription.c | 9 +-------- lasso/xml/id-wsf-2.0/subsref_test_item.c | 7 +------ lasso/xml/id-wsf-2.0/util_response.c | 3 --- lasso/xml/id-wsf-2.0/util_status.c | 10 +--------- lasso/xml/is_help.c | 9 +-------- lasso/xml/is_inquiry.c | 12 +----------- lasso/xml/is_inquiry_element.c | 11 +---------- lasso/xml/is_interaction_request.c | 14 +------------- lasso/xml/is_interaction_response.c | 9 +-------- lasso/xml/is_interaction_statement.c | 7 +------ lasso/xml/is_item.c | 9 +-------- lasso/xml/is_parameter.c | 8 +------- lasso/xml/is_redirect_request.c | 7 +------ lasso/xml/is_select.c | 8 +------- lasso/xml/is_text.c | 9 +-------- lasso/xml/is_user_interaction.c | 5 ----- lasso/xml/lib_assertion.c | 7 +------ lasso/xml/lib_authentication_statement.c | 9 +-------- lasso/xml/lib_authn_context.c | 8 +------- lasso/xml/lib_authn_request.c | 10 ---------- lasso/xml/lib_authn_request_envelope.c | 13 +------------ lasso/xml/lib_authn_response.c | 10 +--------- lasso/xml/lib_authn_response_envelope.c | 9 +-------- lasso/xml/lib_federation_termination_notification.c | 10 +--------- lasso/xml/lib_idp_entries.c | 7 +------ lasso/xml/lib_idp_entry.c | 9 +-------- lasso/xml/lib_idp_list.c | 8 +------- lasso/xml/lib_logout_request.c | 11 +---------- lasso/xml/lib_name_identifier_mapping_request.c | 11 +---------- lasso/xml/lib_name_identifier_mapping_response.c | 10 +--------- lasso/xml/lib_register_name_identifier_request.c | 11 +---------- lasso/xml/lib_request_authn_context.c | 9 +-------- lasso/xml/lib_scoping.c | 1 - lasso/xml/lib_status_response.c | 9 +-------- lasso/xml/lib_subject.c | 7 +------ lasso/xml/misc_text_node.c | 12 +----------- lasso/xml/sa_credentials.c | 7 +------ lasso/xml/sa_parameter.c | 8 +------- lasso/xml/sa_password_transforms.c | 7 +------ lasso/xml/sa_sasl_request.c | 13 +------------ lasso/xml/sa_sasl_response.c | 14 +------------- lasso/xml/sa_transform.c | 9 +-------- lasso/xml/saml-2.0/saml2_action.c | 8 +------- lasso/xml/saml-2.0/saml2_advice.c | 10 +--------- lasso/xml/saml-2.0/saml2_assertion.c | 15 --------------- lasso/xml/saml-2.0/saml2_attribute.c | 10 +--------- lasso/xml/saml-2.0/saml2_attribute_statement.c | 8 +------- lasso/xml/saml-2.0/saml2_audience_restriction.c | 7 +------ lasso/xml/saml-2.0/saml2_authn_context.c | 10 +--------- lasso/xml/saml-2.0/saml2_authn_statement.c | 11 +---------- lasso/xml/saml-2.0/saml2_authz_decision_statement.c | 9 +-------- lasso/xml/saml-2.0/saml2_base_idabstract.c | 8 +------- lasso/xml/saml-2.0/saml2_conditions.c | 12 +----------- lasso/xml/saml-2.0/saml2_encrypted_element.c | 10 +--------- lasso/xml/saml-2.0/saml2_evidence.c | 10 +--------- lasso/xml/saml-2.0/saml2_key_info_confirmation_data.c | 7 +------ lasso/xml/saml-2.0/saml2_name_id.c | 11 +---------- lasso/xml/saml-2.0/saml2_proxy_restriction.c | 7 +------ lasso/xml/saml-2.0/saml2_subject.c | 10 +--------- lasso/xml/saml-2.0/saml2_subject_confirmation.c | 11 +---------- lasso/xml/saml-2.0/saml2_subject_confirmation_data.c | 11 +---------- lasso/xml/saml-2.0/saml2_subject_locality.c | 8 +------- lasso/xml/saml-2.0/samlp2_artifact_resolve.c | 7 +------ lasso/xml/saml-2.0/samlp2_artifact_response.c | 7 +------ lasso/xml/saml-2.0/samlp2_assertion_id_request.c | 7 +------ lasso/xml/saml-2.0/samlp2_attribute_query.c | 7 +------ lasso/xml/saml-2.0/samlp2_authn_query.c | 8 +------- lasso/xml/saml-2.0/samlp2_authn_request.c | 2 -- lasso/xml/saml-2.0/samlp2_authz_decision_query.c | 9 +-------- lasso/xml/saml-2.0/samlp2_idp_entry.c | 9 +-------- lasso/xml/saml-2.0/samlp2_idp_list.c | 8 +------- lasso/xml/saml-2.0/samlp2_manage_name_id_request.c | 11 +---------- lasso/xml/saml-2.0/samlp2_name_id_mapping_request.c | 10 +--------- lasso/xml/saml-2.0/samlp2_name_id_mapping_response.c | 8 +------- lasso/xml/saml-2.0/samlp2_name_id_policy.c | 7 +------ lasso/xml/saml-2.0/samlp2_request_abstract.c | 9 --------- lasso/xml/saml-2.0/samlp2_requested_authn_context.c | 8 +------- lasso/xml/saml-2.0/samlp2_response.c | 8 +------- lasso/xml/saml-2.0/samlp2_scoping.c | 8 +------- lasso/xml/saml-2.0/samlp2_status.c | 9 +-------- lasso/xml/saml-2.0/samlp2_status_code.c | 8 +------- lasso/xml/saml-2.0/samlp2_status_response.c | 11 ----------- lasso/xml/saml-2.0/samlp2_subject_query_abstract.c | 7 +------ lasso/xml/saml_advice.c | 9 +-------- lasso/xml/saml_attribute.c | 9 +-------- lasso/xml/saml_attribute_designator.c | 8 +------- lasso/xml/saml_attribute_statement.c | 7 +------ lasso/xml/saml_audience_restriction_condition.c | 7 +------ lasso/xml/saml_authentication_statement.c | 10 +--------- lasso/xml/saml_authority_binding.c | 9 +-------- lasso/xml/saml_conditions.c | 10 +--------- lasso/xml/saml_subject.c | 9 +-------- lasso/xml/saml_subject_confirmation.c | 9 +-------- lasso/xml/saml_subject_locality.c | 8 +------- lasso/xml/saml_subject_statement_abstract.c | 7 +------ lasso/xml/samlp_request.c | 7 +------ lasso/xml/samlp_request_abstract.c | 5 ----- lasso/xml/samlp_response.c | 8 +------- lasso/xml/samlp_response_abstract.c | 6 ------ lasso/xml/samlp_status.c | 8 +------- lasso/xml/soap_binding_consent.c | 11 +---------- lasso/xml/soap_binding_correlation.c | 12 +----------- lasso/xml/soap_binding_ext_credential.c | 8 +------- lasso/xml/soap_binding_ext_credentials_context.c | 11 +---------- lasso/xml/soap_binding_ext_service_instance_update.c | 12 +----------- lasso/xml/soap_binding_ext_timeout.c | 10 +--------- lasso/xml/soap_binding_processing_context.c | 10 +--------- lasso/xml/soap_binding_provider.c | 11 +---------- lasso/xml/soap_binding_usage_directive.c | 11 +---------- lasso/xml/soap_body.c | 8 +------- lasso/xml/soap_detail.c | 7 +------ lasso/xml/soap_envelope.c | 8 +------- lasso/xml/soap_fault.c | 10 +--------- lasso/xml/soap_header.c | 7 +------ lasso/xml/utility_status.c | 10 +--------- lasso/xml/ws/wsa_attributed_any.c | 1 - lasso/xml/ws/wsa_attributed_qname.c | 1 - lasso/xml/ws/wsa_attributed_unsigned_long.c | 1 - lasso/xml/ws/wsa_attributed_uri.c | 1 - lasso/xml/ws/wsa_endpoint_reference.c | 4 ---- lasso/xml/ws/wsa_metadata.c | 1 - lasso/xml/ws/wsa_problem_action.c | 2 -- lasso/xml/ws/wsa_reference_parameters.c | 1 - lasso/xml/ws/wsa_relates_to.c | 2 -- lasso/xml/ws/wsse_embedded.c | 1 - lasso/xml/ws/wsse_reference.c | 2 -- lasso/xml/ws/wsse_security_header.c | 1 - lasso/xml/ws/wsse_security_token_reference.c | 2 -- lasso/xml/ws/wsse_username_token.c | 2 -- lasso/xml/ws/wsu_timestamp.c | 3 --- lasso/xml/wsse_security.c | 7 +------ 282 files changed, 225 insertions(+), 1934 deletions(-) commit 291e0c05fa91b9d8e937895da6b0f1da658cd3fc Author: Benjamin Dauvergne Date: Wed Aug 26 15:14:41 2009 +0000 sb2:TargetIdentity can have a content * lasso/xml/id-wsf-2.0/sb2_target_identity.c: * lasso/xml/id-wsf-2.0/sb2_target_identity.h: add support for any content. lasso/xml/id-wsf-2.0/sb2_target_identity.c | 2 ++ lasso/xml/id-wsf-2.0/sb2_target_identity.h | 1 + 2 files changed, 3 insertions(+) commit 7231771856e6750e52e3b1bcf496439f82721dbe Author: Benjamin Dauvergne Date: Wed Aug 26 15:14:32 2009 +0000 All: Rework include files handling, separated ID-WSF code from SAML2/ID-FF code * nearly all C files: change includes for relative paths. * lasso/id-wsf/id_wsf.h, lasso/id-wsf-2.0/id_wsf_2.h: add top level public include files for ID-WSF 1.0 and ID-WSF 2.0. * lasso/id-ff/server.*, lasso/id-ff/session.*, lasso/id-ff/identity.*: remove most of the code related to ID-WSF and push into lasso/id-wsf/id_ff_extensions.* and lasso/id-wsf-2.0/identity.c, lasso/id-wsf-2.0/server.c, lasso/id-wsf-2.0/session.c. * lasso/id-wsf-2.0/saml2_login.c, lasso/id-wsf-2.0/saml2_login_private.h: same change but for ID-WSF 2.0 support in SAML2 SSO profile. lasso/errors.c | 4 +- lasso/errors.c.in | 4 +- lasso/id-ff/defederation.c | 12 +- lasso/id-ff/defederation.h | 4 +- lasso/id-ff/federation.c | 6 +- lasso/id-ff/federation.h | 4 +- lasso/id-ff/identity.c | 163 +-------- lasso/id-ff/identity.h | 4 +- lasso/id-ff/identityprivate.h | 12 + lasso/id-ff/lecp.c | 4 +- lasso/id-ff/lecp.h | 8 +- lasso/id-ff/login.c | 148 ++------ lasso/id-ff/login.h | 23 +- lasso/id-ff/loginprivate.h | 11 +- lasso/id-ff/logout.c | 14 +- lasso/id-ff/logout.h | 6 +- lasso/id-ff/name_identifier_mapping.c | 6 +- lasso/id-ff/name_identifier_mapping.h | 6 +- lasso/id-ff/name_registration.c | 6 +- lasso/id-ff/name_registration.h | 6 +- lasso/id-ff/profile.c | 18 +- lasso/id-ff/profile.h | 10 +- lasso/id-ff/profileprivate.h | 4 +- lasso/id-ff/provider.c | 6 +- lasso/id-ff/provider.h | 4 +- lasso/id-ff/server.c | 230 +------------ lasso/id-ff/server.h | 17 +- lasso/id-ff/session.c | 140 +------- lasso/id-ff/session.h | 3 +- lasso/id-ff/sessionprivate.h | 9 +- lasso/id-wsf-2.0/Makefile.am | 13 +- lasso/id-wsf-2.0/data_service.c | 28 +- lasso/id-wsf-2.0/data_service.h | 8 +- lasso/id-wsf-2.0/discovery.c | 64 ++-- lasso/id-wsf-2.0/discovery.h | 10 +- lasso/id-wsf-2.0/id_wsf_2.h | 35 ++ lasso/id-wsf-2.0/identity.c | 48 +++ lasso/id-wsf-2.0/identity.h | 4 + lasso/id-wsf-2.0/profile.c | 24 +- lasso/id-wsf-2.0/profile.h | 4 +- lasso/id-wsf-2.0/saml2_login.c | 206 ++++++++++++ lasso/id-wsf-2.0/saml2_login_private.h | 43 +++ lasso/id-wsf-2.0/server.c | 132 ++++++++ lasso/id-wsf-2.0/server.h | 7 +- lasso/id-wsf-2.0/serverprivate.h | 45 +++ lasso/id-wsf-2.0/session.c | 182 ++++++++++ lasso/id-wsf-2.0/session.h | 8 +- lasso/id-wsf-2.0/sessionprivate.h | 44 +++ lasso/id-wsf/Makefile.am | 11 +- lasso/id-wsf/authentication.c | 8 +- lasso/id-wsf/authentication.h | 4 +- lasso/id-wsf/data_service.c | 18 +- lasso/id-wsf/data_service.h | 18 +- lasso/id-wsf/id_ff_extensions.c | 371 +++++++++++++++++++++ lasso/id-wsf/{identity.h => id_ff_extensions.h} | 24 +- lasso/id-wsf/id_ff_extensions_private.h | 47 +++ lasso/id-wsf/id_wsf.h | 38 +++ lasso/id-wsf/interaction_profile_service.h | 6 +- lasso/id-wsf/personal_profile_service.h | 14 +- lasso/id-wsf/utils.c | 2 +- lasso/id-wsf/wsf_profile.h | 24 +- lasso/lasso.c | 7 +- lasso/lasso.h | 18 +- lasso/registry.h | 2 +- lasso/saml-2.0/assertion_query.c | 28 +- lasso/saml-2.0/assertion_query.h | 6 +- lasso/saml-2.0/ecp.c | 14 +- lasso/saml-2.0/ecp.h | 4 +- lasso/saml-2.0/federation.c | 4 +- lasso/saml-2.0/login.c | 242 ++------------ lasso/saml-2.0/loginprivate.h | 2 +- lasso/saml-2.0/logout.c | 36 +- lasso/saml-2.0/logoutprivate.h | 2 +- lasso/saml-2.0/name_id_management.c | 20 +- lasso/saml-2.0/name_id_management.h | 6 +- lasso/saml-2.0/profile.c | 32 +- lasso/saml-2.0/profileprivate.h | 6 +- lasso/saml-2.0/provider.c | 4 +- lasso/saml-2.0/providerprivate.h | 4 +- lasso/saml-2.0/server.c | 6 +- lasso/saml-2.0/serverprivate.h | 4 +- lasso/xml/disco_authenticate_requester.c | 2 +- lasso/xml/disco_authenticate_requester.h | 2 +- lasso/xml/disco_authenticate_session_context.c | 2 +- lasso/xml/disco_authenticate_session_context.h | 2 +- lasso/xml/disco_authorize_requester.c | 2 +- lasso/xml/disco_authorize_requester.h | 2 +- lasso/xml/disco_credentials.c | 2 +- lasso/xml/disco_credentials.h | 2 +- lasso/xml/disco_description.c | 6 +- lasso/xml/disco_description.h | 2 +- lasso/xml/disco_encrypt_resource_id.c | 2 +- lasso/xml/disco_encrypt_resource_id.h | 2 +- lasso/xml/disco_encrypted_resource_id.c | 2 +- lasso/xml/disco_encrypted_resource_id.h | 2 +- lasso/xml/disco_generate_bearer_token.c | 2 +- lasso/xml/disco_generate_bearer_token.h | 2 +- lasso/xml/disco_insert_entry.c | 2 +- lasso/xml/disco_insert_entry.h | 4 +- lasso/xml/disco_modify.c | 2 +- lasso/xml/disco_modify.h | 6 +- lasso/xml/disco_modify_response.c | 2 +- lasso/xml/disco_modify_response.h | 4 +- lasso/xml/disco_options.c | 2 +- lasso/xml/disco_options.h | 2 +- lasso/xml/disco_query.c | 2 +- lasso/xml/disco_query.h | 8 +- lasso/xml/disco_query_response.c | 2 +- lasso/xml/disco_query_response.h | 6 +- lasso/xml/disco_remove_entry.c | 2 +- lasso/xml/disco_remove_entry.h | 2 +- lasso/xml/disco_requested_service_type.c | 2 +- lasso/xml/disco_requested_service_type.h | 4 +- lasso/xml/disco_resource_id.c | 2 +- lasso/xml/disco_resource_id.h | 2 +- lasso/xml/disco_resource_offering.c | 2 +- lasso/xml/disco_resource_offering.h | 10 +- lasso/xml/disco_send_single_logout.c | 2 +- lasso/xml/disco_send_single_logout.h | 2 +- lasso/xml/disco_service_instance.c | 2 +- lasso/xml/disco_service_instance.h | 4 +- lasso/xml/ds_key_info.c | 2 +- lasso/xml/ds_key_info.h | 4 +- lasso/xml/ds_key_value.c | 2 +- lasso/xml/ds_key_value.h | 4 +- lasso/xml/ds_rsa_key_value.c | 2 +- lasso/xml/ds_rsa_key_value.h | 2 +- lasso/xml/dst_data.c | 2 +- lasso/xml/dst_data.h | 2 +- lasso/xml/dst_modification.c | 2 +- lasso/xml/dst_modification.h | 4 +- lasso/xml/dst_modify.c | 2 +- lasso/xml/dst_modify.h | 8 +- lasso/xml/dst_modify_response.c | 2 +- lasso/xml/dst_modify_response.h | 4 +- lasso/xml/dst_new_data.c | 2 +- lasso/xml/dst_new_data.h | 2 +- lasso/xml/dst_query.c | 2 +- lasso/xml/dst_query.h | 8 +- lasso/xml/dst_query_item.c | 2 +- lasso/xml/dst_query_item.h | 2 +- lasso/xml/dst_query_response.c | 2 +- lasso/xml/dst_query_response.h | 6 +- lasso/xml/id-wsf-2.0/disco_abstract.h | 2 +- lasso/xml/id-wsf-2.0/disco_endpoint_context.h | 2 +- lasso/xml/id-wsf-2.0/disco_keys.h | 2 +- lasso/xml/id-wsf-2.0/disco_options.h | 2 +- lasso/xml/id-wsf-2.0/disco_provider_id.h | 2 +- lasso/xml/id-wsf-2.0/disco_query.h | 2 +- lasso/xml/id-wsf-2.0/disco_query_response.h | 2 +- lasso/xml/id-wsf-2.0/disco_requested_service.h | 2 +- lasso/xml/id-wsf-2.0/disco_security_context.h | 2 +- lasso/xml/id-wsf-2.0/disco_service_context.h | 2 +- lasso/xml/id-wsf-2.0/disco_service_type.h | 2 +- .../xml/id-wsf-2.0/disco_svc_md_association_add.h | 2 +- .../disco_svc_md_association_add_response.h | 2 +- .../id-wsf-2.0/disco_svc_md_association_delete.h | 2 +- .../disco_svc_md_association_delete_response.h | 2 +- .../id-wsf-2.0/disco_svc_md_association_query.h | 2 +- .../disco_svc_md_association_query_response.h | 2 +- lasso/xml/id-wsf-2.0/disco_svc_md_delete.h | 2 +- .../xml/id-wsf-2.0/disco_svc_md_delete_response.h | 2 +- lasso/xml/id-wsf-2.0/disco_svc_md_query.h | 2 +- lasso/xml/id-wsf-2.0/disco_svc_md_query_response.h | 2 +- lasso/xml/id-wsf-2.0/disco_svc_md_register.h | 2 +- .../id-wsf-2.0/disco_svc_md_register_response.h | 2 +- lasso/xml/id-wsf-2.0/disco_svc_md_replace.h | 2 +- .../xml/id-wsf-2.0/disco_svc_md_replace_response.h | 2 +- lasso/xml/id-wsf-2.0/disco_svc_metadata.h | 2 +- lasso/xml/id-wsf-2.0/dst_data_response_base.h | 2 +- lasso/xml/id-wsf-2.0/dst_delete_item_base.h | 2 +- lasso/xml/id-wsf-2.0/dst_delete_response.h | 2 +- lasso/xml/id-wsf-2.0/dst_request.h | 2 +- lasso/xml/id-wsf-2.0/dst_result_query_base.h | 2 +- lasso/xml/id-wsf-2.0/dst_test_item_base.h | 2 +- lasso/xml/id-wsf-2.0/dstref_app_data.h | 2 +- lasso/xml/id-wsf-2.0/dstref_create.h | 2 +- lasso/xml/id-wsf-2.0/dstref_create_item.h | 2 +- lasso/xml/id-wsf-2.0/dstref_create_response.h | 2 +- lasso/xml/id-wsf-2.0/dstref_data.h | 2 +- lasso/xml/id-wsf-2.0/dstref_data_response.h | 2 +- lasso/xml/id-wsf-2.0/dstref_delete.h | 2 +- lasso/xml/id-wsf-2.0/dstref_delete_item.h | 2 +- lasso/xml/id-wsf-2.0/dstref_delete_response.h | 2 +- lasso/xml/id-wsf-2.0/dstref_item_data.h | 2 +- lasso/xml/id-wsf-2.0/dstref_modify.h | 2 +- lasso/xml/id-wsf-2.0/dstref_modify_item.h | 2 +- lasso/xml/id-wsf-2.0/dstref_modify_response.h | 2 +- lasso/xml/id-wsf-2.0/dstref_query.h | 2 +- lasso/xml/id-wsf-2.0/dstref_query_item.h | 2 +- lasso/xml/id-wsf-2.0/dstref_query_response.h | 2 +- lasso/xml/id-wsf-2.0/dstref_result_query.h | 2 +- lasso/xml/id-wsf-2.0/dstref_test_item.h | 2 +- .../xml/id-wsf-2.0/ims_identity_mapping_request.h | 2 +- .../xml/id-wsf-2.0/ims_identity_mapping_response.h | 2 +- lasso/xml/id-wsf-2.0/ims_mapping_input.h | 2 +- lasso/xml/id-wsf-2.0/ims_mapping_output.h | 2 +- lasso/xml/id-wsf-2.0/is_help.h | 2 +- lasso/xml/id-wsf-2.0/is_inquiry.h | 2 +- lasso/xml/id-wsf-2.0/is_inquiry_element.h | 2 +- lasso/xml/id-wsf-2.0/is_interaction_request.h | 2 +- lasso/xml/id-wsf-2.0/is_interaction_response.h | 2 +- lasso/xml/id-wsf-2.0/is_interaction_statement.h | 2 +- lasso/xml/id-wsf-2.0/is_item.h | 2 +- lasso/xml/id-wsf-2.0/is_parameter.h | 2 +- lasso/xml/id-wsf-2.0/is_select.h | 2 +- lasso/xml/id-wsf-2.0/is_text.h | 2 +- lasso/xml/id-wsf-2.0/ps_add_collection_request.h | 2 +- lasso/xml/id-wsf-2.0/ps_add_collection_response.h | 2 +- lasso/xml/id-wsf-2.0/ps_add_entity_request.h | 2 +- lasso/xml/id-wsf-2.0/ps_add_entity_response.h | 2 +- lasso/xml/id-wsf-2.0/ps_add_known_entity_request.h | 2 +- .../xml/id-wsf-2.0/ps_add_known_entity_response.h | 2 +- .../xml/id-wsf-2.0/ps_add_to_collection_request.h | 2 +- lasso/xml/id-wsf-2.0/ps_get_object_info_request.h | 2 +- lasso/xml/id-wsf-2.0/ps_get_object_info_response.h | 2 +- lasso/xml/id-wsf-2.0/ps_item_data.h | 2 +- lasso/xml/id-wsf-2.0/ps_list_members_request.h | 2 +- lasso/xml/id-wsf-2.0/ps_list_members_response.h | 2 +- lasso/xml/id-wsf-2.0/ps_notification.h | 2 +- lasso/xml/id-wsf-2.0/ps_notify.h | 2 +- lasso/xml/id-wsf-2.0/ps_object.h | 2 +- lasso/xml/id-wsf-2.0/ps_query_objects_request.h | 2 +- lasso/xml/id-wsf-2.0/ps_query_objects_response.h | 2 +- .../xml/id-wsf-2.0/ps_remove_collection_request.h | 2 +- lasso/xml/id-wsf-2.0/ps_remove_entity_request.h | 2 +- .../id-wsf-2.0/ps_remove_from_collection_request.h | 2 +- lasso/xml/id-wsf-2.0/ps_request_abstract.h | 2 +- .../xml/id-wsf-2.0/ps_resolve_identifier_request.h | 2 +- .../id-wsf-2.0/ps_resolve_identifier_response.h | 2 +- lasso/xml/id-wsf-2.0/ps_resolve_input.h | 2 +- lasso/xml/id-wsf-2.0/ps_response_abstract.h | 2 +- lasso/xml/id-wsf-2.0/ps_set_object_info_request.h | 2 +- lasso/xml/id-wsf-2.0/ps_test_membership_request.h | 2 +- lasso/xml/id-wsf-2.0/ps_test_membership_response.h | 2 +- lasso/xml/id-wsf-2.0/sb2_consent.h | 2 +- lasso/xml/id-wsf-2.0/sb2_credentials_context.h | 4 +- lasso/xml/id-wsf-2.0/sb2_endpoint_update.h | 4 +- lasso/xml/id-wsf-2.0/sb2_redirect_request.h | 2 +- lasso/xml/id-wsf-2.0/sb2_sender.h | 2 +- lasso/xml/id-wsf-2.0/sb2_target_identity.h | 2 +- lasso/xml/id-wsf-2.0/sb2_timeout.h | 2 +- lasso/xml/id-wsf-2.0/sb2_usage_directive.h | 2 +- lasso/xml/id-wsf-2.0/sb2_user_interaction_header.h | 2 +- lasso/xml/id-wsf-2.0/sbf_framework.h | 2 +- lasso/xml/id-wsf-2.0/sec_token.h | 2 +- lasso/xml/id-wsf-2.0/sec_token_policy.h | 2 +- lasso/xml/id-wsf-2.0/sec_transited_provider_path.h | 2 +- lasso/xml/id-wsf-2.0/subs_notification.h | 2 +- lasso/xml/id-wsf-2.0/subs_notify_response.h | 2 +- lasso/xml/id-wsf-2.0/subs_ref_item.h | 2 +- lasso/xml/id-wsf-2.0/subs_subscription.h | 2 +- lasso/xml/id-wsf-2.0/subsref_app_data.h | 2 +- lasso/xml/id-wsf-2.0/subsref_create.h | 2 +- lasso/xml/id-wsf-2.0/subsref_create_item.h | 2 +- lasso/xml/id-wsf-2.0/subsref_create_response.h | 2 +- lasso/xml/id-wsf-2.0/subsref_data.h | 2 +- lasso/xml/id-wsf-2.0/subsref_data_response.h | 2 +- lasso/xml/id-wsf-2.0/subsref_delete.h | 2 +- lasso/xml/id-wsf-2.0/subsref_delete_item.h | 2 +- lasso/xml/id-wsf-2.0/subsref_delete_response.h | 2 +- lasso/xml/id-wsf-2.0/subsref_item_data.h | 2 +- lasso/xml/id-wsf-2.0/subsref_modify.h | 2 +- lasso/xml/id-wsf-2.0/subsref_modify_item.h | 2 +- lasso/xml/id-wsf-2.0/subsref_modify_response.h | 2 +- lasso/xml/id-wsf-2.0/subsref_notification.h | 2 +- lasso/xml/id-wsf-2.0/subsref_notify.h | 2 +- lasso/xml/id-wsf-2.0/subsref_notify_response.h | 2 +- lasso/xml/id-wsf-2.0/subsref_query.h | 2 +- lasso/xml/id-wsf-2.0/subsref_query_item.h | 2 +- lasso/xml/id-wsf-2.0/subsref_query_response.h | 2 +- lasso/xml/id-wsf-2.0/subsref_result_query.h | 2 +- lasso/xml/id-wsf-2.0/subsref_subscription.h | 2 +- lasso/xml/id-wsf-2.0/subsref_test_item.h | 2 +- lasso/xml/id-wsf-2.0/util_empty.h | 2 +- lasso/xml/id-wsf-2.0/util_extension.h | 2 +- lasso/xml/id-wsf-2.0/util_response.h | 2 +- lasso/xml/id-wsf-2.0/util_status.h | 2 +- lasso/xml/is_help.c | 2 +- lasso/xml/is_help.h | 2 +- lasso/xml/is_inquiry.c | 2 +- lasso/xml/is_inquiry.h | 2 +- lasso/xml/is_inquiry_element.c | 2 +- lasso/xml/is_inquiry_element.h | 4 +- lasso/xml/is_interaction_request.c | 2 +- lasso/xml/is_interaction_request.h | 8 +- lasso/xml/is_interaction_response.c | 2 +- lasso/xml/is_interaction_response.h | 4 +- lasso/xml/is_interaction_statement.c | 2 +- lasso/xml/is_interaction_statement.h | 4 +- lasso/xml/is_item.c | 2 +- lasso/xml/is_item.h | 2 +- lasso/xml/is_parameter.c | 2 +- lasso/xml/is_parameter.h | 2 +- lasso/xml/is_redirect_request.c | 2 +- lasso/xml/is_redirect_request.h | 2 +- lasso/xml/is_select.c | 2 +- lasso/xml/is_select.h | 4 +- lasso/xml/is_text.c | 2 +- lasso/xml/is_text.h | 2 +- lasso/xml/is_user_interaction.c | 2 +- lasso/xml/is_user_interaction.h | 2 +- lasso/xml/lib_assertion.c | 2 +- lasso/xml/lib_assertion.h | 2 +- lasso/xml/lib_authentication_statement.c | 4 +- lasso/xml/lib_authentication_statement.h | 4 +- lasso/xml/lib_authn_context.c | 2 +- lasso/xml/lib_authn_context.h | 2 +- lasso/xml/lib_authn_request.c | 2 +- lasso/xml/lib_authn_request.h | 6 +- lasso/xml/lib_authn_request_envelope.c | 2 +- lasso/xml/lib_authn_request_envelope.h | 6 +- lasso/xml/lib_authn_response.c | 2 +- lasso/xml/lib_authn_response.h | 4 +- lasso/xml/lib_authn_response_envelope.c | 2 +- lasso/xml/lib_authn_response_envelope.h | 2 +- .../xml/lib_federation_termination_notification.c | 2 +- .../xml/lib_federation_termination_notification.h | 4 +- lasso/xml/lib_idp_entries.c | 2 +- lasso/xml/lib_idp_entries.h | 4 +- lasso/xml/lib_idp_entry.c | 2 +- lasso/xml/lib_idp_entry.h | 2 +- lasso/xml/lib_idp_list.c | 2 +- lasso/xml/lib_idp_list.h | 4 +- lasso/xml/lib_logout_request.c | 2 +- lasso/xml/lib_logout_request.h | 4 +- lasso/xml/lib_logout_response.c | 2 +- lasso/xml/lib_logout_response.h | 4 +- lasso/xml/lib_name_identifier_mapping_request.c | 2 +- lasso/xml/lib_name_identifier_mapping_request.h | 4 +- lasso/xml/lib_name_identifier_mapping_response.c | 2 +- lasso/xml/lib_name_identifier_mapping_response.h | 8 +- lasso/xml/lib_register_name_identifier_request.h | 4 +- lasso/xml/lib_register_name_identifier_response.c | 2 +- lasso/xml/lib_register_name_identifier_response.h | 4 +- lasso/xml/lib_request_authn_context.c | 2 +- lasso/xml/lib_request_authn_context.h | 2 +- lasso/xml/lib_scoping.c | 2 +- lasso/xml/lib_scoping.h | 4 +- lasso/xml/lib_status_response.c | 2 +- lasso/xml/lib_status_response.h | 4 +- lasso/xml/lib_subject.c | 2 +- lasso/xml/lib_subject.h | 4 +- lasso/xml/misc_text_node.h | 2 +- lasso/xml/private.h | 6 +- lasso/xml/sa_credentials.c | 2 +- lasso/xml/sa_credentials.h | 4 +- lasso/xml/sa_parameter.c | 2 +- lasso/xml/sa_parameter.h | 2 +- lasso/xml/sa_password_transforms.c | 2 +- lasso/xml/sa_password_transforms.h | 2 +- lasso/xml/sa_sasl_request.c | 2 +- lasso/xml/sa_sasl_request.h | 4 +- lasso/xml/sa_sasl_response.c | 2 +- lasso/xml/sa_sasl_response.h | 10 +- lasso/xml/sa_transform.c | 2 +- lasso/xml/sa_transform.h | 2 +- lasso/xml/saml-2.0/saml2_action.h | 2 +- lasso/xml/saml-2.0/saml2_advice.h | 2 +- lasso/xml/saml-2.0/saml2_assertion.h | 2 +- lasso/xml/saml-2.0/saml2_attribute.h | 2 +- lasso/xml/saml-2.0/saml2_attribute_value.c | 2 +- lasso/xml/saml-2.0/saml2_attribute_value.h | 2 +- lasso/xml/saml-2.0/saml2_authn_context.h | 2 +- lasso/xml/saml-2.0/saml2_base_idabstract.h | 2 +- lasso/xml/saml-2.0/saml2_condition_abstract.h | 2 +- lasso/xml/saml-2.0/saml2_conditions.h | 2 +- lasso/xml/saml-2.0/saml2_evidence.h | 2 +- .../saml-2.0/saml2_key_info_confirmation_data.h | 2 +- lasso/xml/saml-2.0/saml2_name_id.h | 2 +- lasso/xml/saml-2.0/saml2_statement_abstract.h | 2 +- .../xml/saml-2.0/saml2_subject_confirmation_data.h | 2 +- lasso/xml/saml-2.0/saml2_subject_locality.h | 2 +- lasso/xml/saml-2.0/samlp2_extensions.h | 2 +- lasso/xml/saml-2.0/samlp2_idp_entry.h | 2 +- lasso/xml/saml-2.0/samlp2_name_id_policy.h | 2 +- .../xml/saml-2.0/samlp2_requested_authn_context.h | 2 +- lasso/xml/saml-2.0/samlp2_status_code.h | 2 +- lasso/xml/saml-2.0/samlp2_status_detail.h | 2 +- lasso/xml/saml-2.0/samlp2_terminate.h | 2 +- lasso/xml/saml_advice.c | 4 +- lasso/xml/saml_advice.h | 2 +- lasso/xml/saml_assertion.c | 2 +- lasso/xml/saml_assertion.h | 14 +- lasso/xml/saml_attribute.c | 2 +- lasso/xml/saml_attribute.h | 2 +- lasso/xml/saml_attribute_designator.c | 2 +- lasso/xml/saml_attribute_designator.h | 2 +- lasso/xml/saml_attribute_statement.c | 2 +- lasso/xml/saml_attribute_statement.h | 4 +- lasso/xml/saml_attribute_value.c | 2 +- lasso/xml/saml_attribute_value.h | 2 +- lasso/xml/saml_audience_restriction_condition.c | 2 +- lasso/xml/saml_audience_restriction_condition.h | 2 +- lasso/xml/saml_authentication_statement.c | 2 +- lasso/xml/saml_authentication_statement.h | 6 +- lasso/xml/saml_authority_binding.c | 2 +- lasso/xml/saml_authority_binding.h | 2 +- lasso/xml/saml_condition_abstract.c | 2 +- lasso/xml/saml_condition_abstract.h | 2 +- lasso/xml/saml_conditions.c | 2 +- lasso/xml/saml_conditions.h | 6 +- lasso/xml/saml_name_identifier.c | 2 +- lasso/xml/saml_name_identifier.h | 2 +- lasso/xml/saml_statement_abstract.c | 2 +- lasso/xml/saml_statement_abstract.h | 2 +- lasso/xml/saml_subject.c | 2 +- lasso/xml/saml_subject.h | 8 +- lasso/xml/saml_subject_confirmation.c | 2 +- lasso/xml/saml_subject_confirmation.h | 4 +- lasso/xml/saml_subject_locality.c | 2 +- lasso/xml/saml_subject_locality.h | 2 +- lasso/xml/saml_subject_statement.c | 2 +- lasso/xml/saml_subject_statement.h | 2 +- lasso/xml/saml_subject_statement_abstract.c | 2 +- lasso/xml/saml_subject_statement_abstract.h | 4 +- lasso/xml/samlp_request.c | 2 +- lasso/xml/samlp_request.h | 2 +- lasso/xml/samlp_request_abstract.c | 2 +- lasso/xml/samlp_request_abstract.h | 2 +- lasso/xml/samlp_response.c | 2 +- lasso/xml/samlp_response.h | 6 +- lasso/xml/samlp_response_abstract.c | 2 +- lasso/xml/samlp_response_abstract.h | 2 +- lasso/xml/samlp_status.c | 2 +- lasso/xml/samlp_status.h | 4 +- lasso/xml/samlp_status_code.c | 2 +- lasso/xml/samlp_status_code.h | 2 +- lasso/xml/sec_resource_access_statement.c | 2 +- lasso/xml/sec_resource_access_statement.h | 4 +- lasso/xml/soap_binding.c | 2 +- lasso/xml/soap_binding.h | 6 +- lasso/xml/soap_binding_consent.c | 2 +- lasso/xml/soap_binding_consent.h | 2 +- lasso/xml/soap_binding_correlation.c | 2 +- lasso/xml/soap_binding_correlation.h | 2 +- lasso/xml/soap_binding_ext_credential.c | 2 +- lasso/xml/soap_binding_ext_credential.h | 2 +- lasso/xml/soap_binding_ext_credentials_context.c | 2 +- lasso/xml/soap_binding_ext_credentials_context.h | 4 +- .../xml/soap_binding_ext_service_instance_update.c | 2 +- .../xml/soap_binding_ext_service_instance_update.h | 4 +- lasso/xml/soap_binding_ext_timeout.c | 2 +- lasso/xml/soap_binding_ext_timeout.h | 2 +- lasso/xml/soap_binding_processing_context.c | 2 +- lasso/xml/soap_binding_processing_context.h | 2 +- lasso/xml/soap_binding_provider.c | 2 +- lasso/xml/soap_binding_provider.h | 2 +- lasso/xml/soap_binding_usage_directive.c | 2 +- lasso/xml/soap_binding_usage_directive.h | 2 +- lasso/xml/soap_body.c | 4 +- lasso/xml/soap_body.h | 2 +- lasso/xml/soap_detail.c | 2 +- lasso/xml/soap_detail.h | 2 +- lasso/xml/soap_envelope.c | 2 +- lasso/xml/soap_envelope.h | 6 +- lasso/xml/soap_fault.c | 2 +- lasso/xml/soap_fault.h | 4 +- lasso/xml/soap_header.c | 2 +- lasso/xml/soap_header.h | 2 +- lasso/xml/tools.c | 6 +- lasso/xml/utility_status.c | 2 +- lasso/xml/utility_status.h | 2 +- lasso/xml/ws/wsa_attributed_any.h | 2 +- lasso/xml/ws/wsa_attributed_qname.h | 2 +- lasso/xml/ws/wsa_attributed_unsigned_long.h | 2 +- lasso/xml/ws/wsa_attributed_uri.h | 2 +- lasso/xml/ws/wsa_endpoint_reference.h | 2 +- lasso/xml/ws/wsa_metadata.h | 2 +- lasso/xml/ws/wsa_problem_action.h | 2 +- lasso/xml/ws/wsa_reference_parameters.h | 2 +- lasso/xml/ws/wsa_relates_to.h | 2 +- lasso/xml/ws/wsse_embedded.h | 2 +- lasso/xml/ws/wsse_reference.h | 2 +- lasso/xml/ws/wsse_security_header.h | 2 +- lasso/xml/ws/wsse_security_token_reference.h | 2 +- lasso/xml/ws/wsse_transformation_parameters.h | 2 +- lasso/xml/ws/wsse_username_token.h | 2 +- lasso/xml/ws/wsu_timestamp.h | 2 +- lasso/xml/wsse_security.c | 2 +- lasso/xml/wsse_security.h | 2 +- lasso/xml/xml.c | 6 +- lasso/xml/xml.h | 6 +- lasso/xml/xml_enc.h | 2 +- tests/basic_tests.c | 6 +- tests/login_tests.c | 2 +- tests/login_tests_saml2.c | 8 +- tests/metadata_tests.c | 4 +- tests/perfs.c | 2 +- tests/random_tests.c | 10 +- tests/tests.c | 2 +- 491 files changed, 2160 insertions(+), 1713 deletions(-) commit b7632414116603a04e8472a77cf4e9bf0f2e29a0 Author: Benjamin Dauvergne Date: Wed Aug 26 15:14:20 2009 +0000 Bindings: skip ID-WSF methods with unsupported signatures * bindings/overrides.xml: some functions have output parameters (pointer on pointers) that are currently not supported by our binding generator, so we skip them. bindings/overrides.xml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) commit 2888e14ae657b3b496694d1a947ff8bebe21fb21 Author: Benjamin Dauvergne Date: Wed Aug 26 15:14:17 2009 +0000 SWIG: unplug id-wsf support in SWIG * swig/Lasso.i: force LASSO_WSF_ENABLED to be undefined. swig/Lasso-wsf.i | 63 +++++++++++++++++++++----------------------------------- swig/Lasso.i | 12 ++++++----- 2 files changed, 31 insertions(+), 44 deletions(-) commit a2abe27a680fde4f81e0f6e100a98027b803b0a7 Author: Benjamin Dauvergne Date: Wed Aug 26 15:14:14 2009 +0000 Tests: allow tests2 to pass distcheck * tests/Makefile.am add an SRCDIR symbol. remove unused include paths. * tests/tests2.c: use SRCDIR to find data files. tests/Makefile.am | 3 +-- tests/tests2.c | 12 ++++++------ 2 files changed, 7 insertions(+), 8 deletions(-) commit e1470be9692b6e7afe619cb025082e346f604369 Author: Benjamin Dauvergne Date: Wed Aug 26 15:14:12 2009 +0000 Tests: remove internal content from data files * tests/data/response-3: this dump of a SAML message contains elements and attribute outside the SAML schema, implementation detail from Lasso. They broke execution of tests/tests2. tests/data/response-3 | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) commit 80f75007c3bbb62557ec08bde63600c182c91677 Author: Benjamin Dauvergne Date: Wed Aug 26 15:14:09 2009 +0000 XML&SAML 2.0: add missing include files * lasso/xml/saml-2.0/saml2_encrypted_element.h: xmlSecKey is present in a function signature, so include xmlsec/xmlsec.h. lasso/xml/saml-2.0/saml2_encrypted_element.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 49c9dd5d058e1866a2879f4d02bc4e6641cc07b9 Author: Benjamin Dauvergne Date: Wed Aug 26 15:14:06 2009 +0000 SWIG: implement change to LassoSession in the SWIG interface file * swig/Lasso.i: remove LassoSession::is_dirty attribute and rewrite the getProviderIds function. swig/Lasso.i | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) commit fe6922951f7744534e5f4f1fd4058fa14b971f65 Author: Benjamin Dauvergne Date: Wed Aug 26 15:14:04 2009 +0000 XML: only recurse into xml/id-wsf subdirs if --enable-wsf is true * lasso/xml/Makefile.am: put id-wsf and id-wsf2 subdirs under a conditionnal. lasso/xml/Makefile.am | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit 45755ffa9910a4b9c18c7712d5690cdf4ba8d01b Author: Benjamin Dauvergne Date: Wed Aug 26 15:14:02 2009 +0000 ID-WSF 1.0: remove absent header file from the Makefile.am * lasso/id-wsf/Makefile.am: remove data_service_private.h from header file list. lasso/id-wsf/Makefile.am | 1 - 1 file changed, 1 deletion(-) commit eacb57905caa3d4ca86eeece0403c8864db1f6a5 Author: Benjamin Dauvergne Date: Wed Aug 26 15:13:59 2009 +0000 Core: SOAP is also used by SAML bindings * extract_symbols.py, extract_types.py: export SOAP types whatever the value of the flag --enable-wsf. It still worked because constructor for GObject calls get_type, but there is a race condition: if you receive a SOAP message before sending one, it fails. Only soap_binding types must be removed. lasso/extract_symbols.py | 2 +- lasso/extract_types.py | 2 +- lasso/xml/Makefile.am | 20 ++++++++++---------- 3 files changed, 12 insertions(+), 12 deletions(-) commit fbfbe5553dfb00af22c4d7bb3f4c62c9a129c3a9 Author: Benjamin Dauvergne Date: Wed Aug 26 15:13:55 2009 +0000 ID-FF&Core: Seal public field of LassoSession * id-ff/session.h: seal public fields. * id-ff/session.c, id-ff/sessionprivate.h: add accessors for reading the is_dirty flag and counting store assertions. * id-ff/logout.c, id-ff/login.c, saml-2.0/login.c, saml-2.0/logout.c, saml-2.0/profile.c: use the new accessors. * id-ff/profile.c: include the private header file, use the new accessors, and remove unnecessary setting of is_dirty to FALSE (it should be false at instanciation). * utils.h: add a macro to access private content, prepare for using G_TYPE_INSTANCE_GET_PRIVATE and the GObject infrastructure for private structures eventually. lasso/id-ff/login.c | 2 +- lasso/id-ff/logout.c | 4 +-- lasso/id-ff/profile.c | 5 ++- lasso/id-ff/session.c | 77 ++++++++++++++++++++++++++++++-------------- lasso/id-ff/session.h | 4 +-- lasso/id-ff/sessionprivate.h | 4 +++ lasso/saml-2.0/login.c | 2 +- lasso/saml-2.0/logout.c | 4 +-- lasso/saml-2.0/profile.c | 16 ++++++--- lasso/utils.h | 2 ++ 10 files changed, 81 insertions(+), 39 deletions(-) commit a3c4a339f2f90faeb1d755f292f6787aba5de764 Author: Benjamin Dauvergne Date: Wed Aug 26 15:13:51 2009 +0000 ID-WSF 2.0: remove unused variable - lasso/id-wsf-2.0/discovery.c: remove unused variable in discovery.c lasso/id-wsf-2.0/discovery.c | 4 ---- 1 file changed, 4 deletions(-) commit c1501725040580d2edfb94ef7a71d2c0ff6dae79 Author: Benjamin Dauvergne Date: Wed Aug 26 15:13:49 2009 +0000 Core: fix bad name of lasso_unlink_and_release_node * lasso/utils.h: - rename lasso_unlink_and_release_node to lasso_release_list_of_xml_node. - add a GList iteration macro: lasso_foreach. lasso/utils.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit 55f20515343534d990b1cd9b0986fb159b47788e Author: Benjamin Dauvergne Date: Wed Aug 26 15:13:46 2009 +0000 ID-WSF: Lots of modifications Migrate lots of code to use new utility macros. Try to simplify most code paths or to factorize with LassoWsfProfile. * lasso/id-wsf/wsf_profile.c: Add API: - lasso_wsf_profile_build_soap_response_msg to build SOAP fault for Lasso errors, - lasso_wsf_profile_set_msg_url_from_description, to set the destination URL using the chosen LassoDiscoDescription (with respect to the security mechanism), - lasso_wsf_profile_init_soap_response to initialize a response to the current request, to use in sub classes, - lasso_wsf_profile_get_remote_provider_id, retrieve the SOAP binding corresponding information, - lasso_wsf_profile_get_remote_provider, simplification of lasso_wsf_profile_get_remote_provider_id, - lasso_wsf_profile_get_soap_fault, retrieve the last setted SOAP fault, used by sub classes, - lasso_wsf_profile_set_soap_fault, set a SOAP fault, to be returned by the next call by lasso_wsf_profile_build_soap_response_msg, to use in sub classes, - lasso_wsf_profile_set/get_status_code, set/get the stored status code, to use in the next lasso_xxx_build_response_message, to use in sub classes. Change name lasso_wsf_profile_get_description_autos to lasso_wsf_profile_get_description_auto. Do not access directly the session is_dirty field (it has been sealed). * lasso/id-wsf/wsf_profile.h: Add helper macro lasso_wsf_profile_helper_set_status to set status code of an ID-WSF response message containing a Status element using the stored status code. * lasso/id-wsf/wsf_profile_private.h: Add new fields (moved public fields). Add lasso_wsf_profile_set_msg_url_from_description, lasso_wsf_profile_build_soap_fault_response_msg. * lasso/id-wsf/data_service_private.h: Remove file. * lasso/id-wsf/data_service.h: Remove all public fields. * lasso/id-wsf/data_service.c: Remove private structure. Use the equivalents LassoWsfProfile private fields. Update documentation. Use LassoWsfProfile generic functions for initializing requests. Add API lasso_data_service_get_query_item, lasso_data_service_get_answers, lasso_data_service_get_answer, lasso_data_service_get_answers_by_select, lasso_data_service_get_answer_for_item_id, lasso_data_service_add_modification. Remove lasso_data_service_need_redirect_user use equivalent function lasso_interaction_profile_service_build_redirect_response_msg. Remove lasso_data_service_get_resource_offering, lasso_data_service_set_offering. * lasso/id-wsf/discovery.c: Add documentation. Change some signatures. Remove lasso_discovery_get_description_auto. Change name of lasso_discovery_init_insert to lasso_discovery_init_modify. Add a generic lasso_discovery_process_request_msg. Add internal function lasso_discovery_init_offering, to get automatically an offering if possible. Remove useless init_from_xml. Rework lasso_discovery_build_credential implementation. overloading. Remove lasso_discovery_destroy. * lasso/id-wsf/discovery.h: Remove lasso_discovery_destroy. * lasso/id-wsf/interaction_profile_service.c: Add lasso_interaction_profile_service_build_redirect_response_msg. * lasso/id-wsf/personal_profile_service.c: Update lasso_personal_profile_service_get_email to use lasso_data_service_get_answers_by_select. * lasso/xml/dst_modify.c: make modification parameter optional to the constructor. lasso/id-wsf/data_service.c | 1182 +++++++++++++++------------- lasso/id-wsf/data_service.h | 34 +- lasso/id-wsf/data_service_private.h | 42 - lasso/id-wsf/discovery.c | 922 ++++++++++------------ lasso/id-wsf/discovery.h | 57 +- lasso/id-wsf/interaction_profile_service.c | 36 +- lasso/id-wsf/personal_profile_service.c | 69 +- lasso/id-wsf/wsf_profile.c | 523 +++++++++--- lasso/id-wsf/wsf_profile.h | 52 +- lasso/id-wsf/wsf_profile_private.h | 10 +- lasso/xml/dst_modify.c | 6 +- 11 files changed, 1634 insertions(+), 1299 deletions(-) commit 59926d7545ecca45086484bd9bf60ffa7d7a8b12 Author: Benjamin Dauvergne Date: Wed Aug 26 15:13:43 2009 +0000 Core: Add new error types * lasso/errors.h lasso/errors.c: add error types: LASSO_ERROR_CAST_FAILED, LASSO_DATA_SERVICE_CANNOT_ADD_ITEM, LASSO_WSF_PROFILE_ERROR_INVALID_OR_MISSING_REFERENCE_TO_MESSAGE_ID, LASSO_DST_ERROR_QUERY_NOT_FOUND, LASSO_DST_ERROR_NO_DATA, LASSO_DST_ERROR_MALFORMED_QUERY. lasso/errors.c | 14 ++++++++++++-- lasso/errors.h | 9 ++++++--- 2 files changed, 18 insertions(+), 5 deletions(-) commit de375da682cb7e5f9d00952f941628a588f1d2cc Author: Benjamin Dauvergne Date: Wed Aug 26 15:13:41 2009 +0000 XML: Add time formatting function for ISO 8601 format * xml/private.h: * xml/tools.c: add util function to format time_t values in the ISO 8601 format. lasso/xml/private.h | 1 + lasso/xml/tools.c | 25 ++++++++++++++++++------- 2 files changed, 19 insertions(+), 7 deletions(-) commit 667a1448cd95929d9e94f885d1a1e17097637a18 Author: Benjamin Dauvergne Date: Wed Aug 26 15:13:39 2009 +0000 XML: Add any attribute parsing to Saml2AttributeValue * xml/saml-2.0/saml2_attribute_value.h: add new public field GHashTable *attributes; * xml/saml-2.0/saml2_attribute_value.c: add parsing instructions to populate attributes field. lasso/xml/saml-2.0/saml2_attribute_value.c | 2 ++ lasso/xml/saml-2.0/saml2_attribute_value.h | 1 + 2 files changed, 3 insertions(+) commit 713ae637a8394705f59aea59506dbb1ed600c664 Author: Benjamin Dauvergne Date: Wed Aug 26 15:13:36 2009 +0000 XML: add documentation for lasso_eval_xpath_expression * lasso/xml/tools.c: add documentation for xpath helper evaluation function lasso_eval_xpath_expression. lasso/xml/tools.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) commit 204e99ab34f583d6678d4623f793d8c7d192ea7c Author: Benjamin Dauvergne Date: Wed Aug 26 15:13:33 2009 +0000 XML: add string constant for client soap errors * lasso/xml/strings.h: add new string constant LASSO_SOAP_FAULT_CODE_CLIENT. lasso/xml/strings.h | 2 ++ 1 file changed, 2 insertions(+) commit 33576b629a083932e4e7c71aa16dff6684a45373 Author: Benjamin Dauvergne Date: Wed Aug 26 15:13:30 2009 +0000 XML: add documentation for lasso_idwsf2_disco_svc_md_register_new_full * lasso/xml/id-wsf-2.0/disco_svc_md_register.c: add documentation for constructor function lasso_idwsf2_disco_svc_md_register_new_full. lasso/xml/id-wsf-2.0/disco_svc_md_register.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) commit c01a0e78fad7270d246f516c004001373ef632a0 Author: Benjamin Dauvergne Date: Wed Aug 26 15:13:28 2009 +0000 ID-WSF 1.0: Add new error to signal unknown entry * lasso/errors.{c,h}: add a new error for the ID-WSF 1.0 module, to signal unknown entry in discovery responses. lasso/errors.c | 2 ++ lasso/errors.h | 3 +++ 2 files changed, 5 insertions(+) commit 666290fb1dc4e4b9139d025b61e85f3a17d9377a Author: Benjamin Dauvergne Date: Wed Aug 26 15:13:25 2009 +0000 SWIG Binding: reflect changes in the signature of struct LassoIdWsfDiscovery * swig/Lasso-wsf2.i (LassoIdWsfDiscovery): add new fields metadatas and svcMDIDS, remove old ones (metadata and svcMDID). swig/Lasso-wsf2.i | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) commit 3da34a1b0d8ff5df1f836d0b961632a7d862b2c9 Author: Benjamin Dauvergne Date: Wed Aug 26 15:13:23 2009 +0000 ID-WSF 1.0: fix off-by one ref counting error in lasso_wsf_profile_init_soap_request * lasso/id-wsf/wsf_profile.c (lasso_wsf_profile_init_soap_request): envelope is an argument, increment its ref count before storing it. lasso/id-wsf/wsf_profile.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit e3bf5c88d5735fb688c3eec1b81c2bd2dc028675 Author: Benjamin Dauvergne Date: Wed Aug 26 15:13:21 2009 +0000 ID-WSF 1.0: improve error recovery in lasso_wsf_profile_comply_with_saml_authentication * lasso/id-wsf/wsf_profile.c (lasso_wsf_profile_comply_with_saml_authentication): reuse existing wsse-security element if present, remove useless comments, move core code after argument type checks, return error if enveloppe or header is missing, fail if any referenced assertion is missing, correctly handle reference count of wsse_security depending on the situation (new or reused). lasso/id-wsf/wsf_profile.c | 57 +++++++++++++++++++++++++++++++--------------- 1 file changed, 39 insertions(+), 18 deletions(-) commit d4e28010bec00e48100269e4f610949d78789257 Author: Benjamin Dauvergne Date: Wed Aug 26 15:13:18 2009 +0000 ID-WSF 1.0: fix memory leak * lasso/id-wsf/discovery.c (lasso_discovery_add_insert_entry): the rule is that callee is responsible for becoming owner of a resource, so no g_object_ref before a call on an argument. lasso/id-wsf/discovery.c | 1 - 1 file changed, 1 deletion(-) commit fee8ff9acf2d181d20140d32f71bbfd21f02c98f Author: Benjamin Dauvergne Date: Wed Aug 26 15:13:16 2009 +0000 ID-WSF 2.0: publicize lasso_idwsf2_profile_build_soap_envelope * lasso/id-wsf-2.0/profile.c, lasso/id-wsf-2.0/profile.h (lasso_idwsf2_profile_build_soap_envelope): as for ID-WSF 1.0 export this function to allow easier implementation of external ID-WSF 2.0 services. remove FIXME comment and fill equivalent bugzilla reports. lasso/id-wsf-2.0/profile.c | 11 +---------- lasso/id-wsf-2.0/profile.h | 4 ++++ 2 files changed, 5 insertions(+), 10 deletions(-) commit 562be4b08ae0649f353e63379d9ab0c25c894156 Author: Benjamin Dauvergne Date: Wed Aug 26 15:13:13 2009 +0000 ID-WSF 2.0: review lasso_idwsf2_discovery_process_metadata_register_response_msg * lasso/id-wsf-2.0/discovery.c (lasso_idwsf2_discovery_process_metadata_register_response_msg): change return code variable to rc, move argument casting after argument type check, copy all the service metadata ids, lasso/id-wsf-2.0/discovery.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) commit be6342b39a68e2861406136fb870da49fddee1eb Author: Benjamin Dauvergne Date: Wed Aug 26 15:13:11 2009 +0000 ID-WSF 2.0: review lasso_idwsf2_discovery_process_metadata_register_msg * lasso/id-wsf-2.0/discovery.c (lasso_idwsf2_discovery_init_metadata_register): add documentation comment, move argument casting after type checking, change return code name to rc to comply with standardisation, use lasso_build_unique_id instead of duplicating the code, add iteration over all the registered service, add iteration to return all the generated service metadata ids, use new assignment macros. * lasso/id-wsf-2.0/discovery.h (struct _LassoIdWsf2Discovery): change field LassoIdWsf2DiscoSvcMetadata metadata to GList* metadatas and gchar *svcMDID to GList *svcMDIDs in order to support multiple services in requests. lasso/id-wsf-2.0/discovery.c | 84 ++++++++++++++++++++++++++------------------ lasso/id-wsf-2.0/discovery.h | 4 +-- 2 files changed, 52 insertions(+), 36 deletions(-) commit 714248160ff5ac2f8acc397443ee6529627fc13d Author: Benjamin Dauvergne Date: Wed Aug 26 15:13:07 2009 +0000 ID-WSF 2.0: review lasso_idwsf2_discovery_metadata_register_self * lasso/id-wsf-2.0/discovery.c (lasso_idwsf2_discovery_metadata_register_self): Add documentation, add code for getting the service URL. lasso/id-wsf-2.0/discovery.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit ecac419fa2bcff3c22a8682a6af0ba2cb1811821 Author: Benjamin Dauvergne Date: Wed Aug 26 15:13:05 2009 +0000 ID-WSF 2.0: add documentation to lasso_idwsf2_discovery_register_self * lasso/id-wsf-2.0/discovery.c (lasso_idwsf2_discovery_register_self) move casting after argument type check, simplify code by using lasso_build_unique_id, remove useless comments lasso/id-wsf-2.0/discovery.c | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) commit 601d6da24d298cfa77f71bf76490d92d7265a7d6 Author: Benjamin Dauvergne Date: Wed Aug 26 15:13:02 2009 +0000 ID-WSF 2.0: simplify gobject boilerplate * lasso/id-wsf-2.0/discovery.c: (get_xmlNode, instance_init, class_init) remove useless method get_xmlNode, remove useless NULLing or instance fields. lasso/id-wsf-2.0/discovery.c | 16 ---------------- 1 file changed, 16 deletions(-) commit b7d4e1b3e94ea25d8d42942e64ccce8a15c8fdb4 Author: Benjamin Dauvergne Date: Wed Aug 26 15:12:58 2009 +0000 ID-WSF 2.0: use new macros * lasso/id-wsf-2.0/data_service.c (lasso_idwsf2_data_service_init_query, lasso_idwsf2_data_service_parse_query_items, lasso_idwsf2_data_service_init_modify, lasso_idwsf2_data_service_parse_one_modify_item, lasso_idwsf2_data_service_parse_modify_items): add cast, change macros for stealing version, fix name of macro * lasso/id-wsf-2.0/profile.c: (lasso_idwsf2_profile_init_soap_request) use list handling macro, add missing casts * lasso/id-wsf-2.0/discovery.c: (lasso_idwsf2_discovery_process_metadata_association_add_msg, lasso_idwsf2_discovery_init_query) add missing casts lasso/id-ff/session.c | 2 +- lasso/id-wsf-2.0/data_service.c | 2 +- lasso/id-wsf-2.0/profile.c | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) commit 09de7ab8b3e7413b121020f04ae32b11bccc3f14 Author: Benjamin Dauvergne Date: Wed Aug 26 15:12:55 2009 +0000 ID-WSF 2.0: add a new constructor for UtilStatus - lasso/xml/id-wsf-2.0/utils_status.h (lasso_idwsf2_util_status_new_with_code): this constructor allow to construct and fill a UtilStatus node with one line. It has two arguments to construct nested two level status objects (with two status codes). If you omit the second argument you get a one level status object. lasso/xml/id-wsf-2.0/util_status.c | 27 +++++++++++++++++++++++++++ lasso/xml/id-wsf-2.0/util_status.h | 1 + 2 files changed, 28 insertions(+) commit 526962420c1c937a3c2c4b2323d83f9300c78690 Author: Benjamin Dauvergne Date: Wed Aug 26 15:12:52 2009 +0000 ID-WSF 2.0: add initialization of local variables lasso/id-wsf-2.0/data_service.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 78453bd8f797735f0c8364a5a4c88ad5a3689628 Author: Benjamin Dauvergne Date: Wed Aug 26 15:12:49 2009 +0000 ID-WSF 2.0: Use new XPath API in DST - lasso/id-wsf-2.0/data_service.c: - lasso_idwsf2_data_service_parse_query_items: use the new API to remove error outputs from libxml, and generate an additional status code containing newly returned libxml error code. - lasso_idwsf2_data_service_parse_one_modify_item: use the new API. lasso/id-wsf-2.0/data_service.c | 54 +++++++++++++++++++++++------------------ 1 file changed, 30 insertions(+), 24 deletions(-) commit 28bdebee5235a9993de223b2cca631a5ec831207 Author: Benjamin Dauvergne Date: Wed Aug 26 15:12:46 2009 +0000 XML: add API to simplify evaluation of XPath expressions * lasso/xml/tools.c,lasso/xml/private.h: - lasso_eval_xpath_expression(xmlXPathContextPtr xpathCtx, const char *expression, xmlXPathObjectPtr *xpathObjectPtr, int *xpathErrorCode) is a boolean returning function handling call to libxml API to evaluate en XPath expression in the xpathCtx context. It eventually save the returned nodeset in the variable pointed by xpathObjectPtr if it is not-NULL (and eventually deallocate previous value) and if an error happend it copy its code into the variable pointed to by xpathErrorCode if it is not NULL. lasso/xml/private.h | 3 +++ lasso/xml/tools.c | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) commit 44a26b40e18a01dc1aa140e6df87d2fa38d263e9 Author: Benjamin Dauvergne Date: Wed Aug 26 15:12:41 2009 +0000 Tests: Add a fourth data loading test * tests/data/response-4: test content * tests/tests2.c: add loading of the new file. tests/data/response-4 | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++ tests/tests2.c | 1 + 2 files changed, 60 insertions(+) commit c4e3d9542907d8941550b8273540fe642e2df939 Author: Benjamin Dauvergne Date: Mon Jul 6 16:06:03 2009 +0000 Only recurse into id-wsf if it is enabled * lasso/Makefile.am: only add id-wsf and id-wsf-2.0 to SUBDIRS if wsf is enabled. lasso/Makefile.am | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit 0d3977f21f113199df7a296feb22589be7e55842 Author: Benjamin Dauvergne Date: Mon Jul 6 16:06:02 2009 +0000 Fix: backward_comp.h is missing from tarballs. * lasso/Makefile.am: add backward_comp.h to EXTRA_DIST lasso/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 28bf7912f0c4d94329b1ba5a22a80a7328174643 Author: Benjamin Dauvergne Date: Mon Jun 15 12:38:16 2009 +0000 Python Binding: fix bug of uninitialized ppos argument to PyDict_Next * bindings/pyhton/wrapper_top.c (set_hashtable_of_pygobject): second argument (int*ppos) of PyDict_Next must be reinitialized to zero before each traversal (see Python C API http://docs.python.org/c-api/dict.html). Patch from Iban Rodríguez of the Desarrollo de Producto Electrónico, Spain. bindings/python/wrapper_top.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit f5d0b4e34384ed20f1d2ed0456565b15fedb197c Author: Benjamin Dauvergne Date: Mon Jun 15 12:27:52 2009 +0000 Update doap file lasso.doap | 10 ++++++++++ 1 file changed, 10 insertions(+) commit 8841328655f2342c3637186e7611e8eb6c70472b Author: Benjamin Dauvergne Date: Mon Jun 15 12:27:50 2009 +0000 Do not remove signatures on assertion when using HTTP Redirect * lasso/saml-2.0/profile.c: HTTP Redirect binding mandate to remove signature at the SAML message level, but signatures at the assertion, especially if the SP asked for it, must be preserved. lasso/saml-2.0/profile.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit b48323a2a029ff636afa44c31e3a397d1db326f3 Author: Benjamin Dauvergne Date: Thu May 7 12:36:02 2009 +0000 Fix bug in lasso_registry_destroy / shutdown * lasso/registry.c: if not initialized, do not free. do not segfault on NULL argument. lasso/registry.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit 81bc017436149a18efe93fed2adb324639c753c7 Author: Benjamin Dauvergne Date: Thu May 7 12:36:00 2009 +0000 Do not respect default semantic of dst:Query * lasso/id-wsf-2.0/data_service.c: the specification for data service template indicat that the query must fail at the first failing query, we think this is a stupid behaviour so I set the default to keep running query until the last one and returning a partial result if at least one failed and a failed result if absolutely no query matched. * lasso/id-wsf-2.0/private.h: declare the lasso_flag_follow_id_wsf_supid_semantic flag. * lasso.c: declare the lasso_flag_follow_id_wsf_supid_semantic flag, it's conditionned by the LASSO_WSF_ENABLED preprocessor symbol. lasso/id-wsf-2.0/data_service.c | 80 ++++++++++++++++++++--------------------- lasso/id-wsf-2.0/private.h | 38 ++++++++++++++++++++ lasso/lasso.c | 10 ++++++ 3 files changed, 87 insertions(+), 41 deletions(-) commit a4e03e7626c281410cc396fb1202132e216ed358 Author: Benjamin Dauvergne Date: Thu Apr 30 14:58:24 2009 +0000 Add valgrind support to integration tests * tests/integration/saml2/__init__.py: if /usr/bin/valgrind exist, use script valgrind-wrapper.sh to launch tests, it stores log files in {authentic,lcs}_$ISODATE_pid$PID.log. tests/integration/saml2/__init__.py | 37 +++++++++++++++++++++++++++++------ tests/integration/valgrind-wrapper.sh | 10 ++++++++++ 2 files changed, 41 insertions(+), 6 deletions(-) commit 7e4a554d61314eca12247b419080e7a09f5b3309 Author: Benjamin Dauvergne Date: Thu Apr 30 14:58:23 2009 +0000 Fix leak in python binding * bindings/python/wrapper_top.c: keep a pointer on beginning of list to free it. bindings/python/wrapper_top.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 1b0d28b1029fe9214000467adb6ffe2c5175fb27 Author: Benjamin Dauvergne Date: Thu Apr 30 14:58:22 2009 +0000 Fix leak of mapping registry * lasso/lasso.c: * lasso/registry-private.h: * lasso/registry.c: make the registry be freed in lasso_shutdown. lasso/lasso.c | 5 +++++ lasso/registry-private.h | 2 ++ lasso/registry.c | 36 +++++++++++++++++++++++++++++++----- 3 files changed, 38 insertions(+), 5 deletions(-) commit e3bdadf8f7abecbc41490bd74f84e8ec7214cc15 Author: Benjamin Dauvergne Date: Thu Apr 30 14:58:20 2009 +0000 ID-FF 1.2: Fix leaks, reduce code * id-ff/login.c: * id-ff/logout.c: * id-ff/profile.c: * id-ff/provider.c: * id-ff/server.c: fix leaks by using field setting macros which frees previous values, it also reduce code length sometimes. lasso/id-ff/login.c | 239 ++++++++++++++++++++++--------------------------- lasso/id-ff/logout.c | 61 ++++++------- lasso/id-ff/profile.c | 57 ++++-------- lasso/id-ff/provider.c | 17 ++-- lasso/id-ff/server.c | 28 +++--- 5 files changed, 173 insertions(+), 229 deletions(-) commit 7071a9ce9a0ae6f81fd5ba53129064a8b7fb4a4d Author: Benjamin Dauvergne Date: Thu Apr 30 14:58:17 2009 +0000 Export the new flag * lasso/debug.h: export new flag lasso_flag_sign_messages. lasso/debug.h | 1 + 1 file changed, 1 insertion(+) commit 7e6dfb76834f4ed5ebe574572559004e95d2bdea Author: Benjamin Dauvergne Date: Thu Apr 30 14:58:16 2009 +0000 Fix leaks in tests * basic_tests.c: * login_tests.c: * login_tests_saml2.c: * random_tests.c: free replaced string, unref used nodes, initialize local variables when necessary, free newly allocated strings. tests/basic_tests.c | 1 + tests/login_tests.c | 1 + tests/login_tests_saml2.c | 73 ++++++++++++++++++++++++----------------------- tests/random_tests.c | 20 +++++++++---- 4 files changed, 54 insertions(+), 41 deletions(-) commit e863eefdeb0fcd692958d33c860baa53bda2f202 Author: Benjamin Dauvergne Date: Thu Apr 30 14:58:15 2009 +0000 Add a script to format suppression file * tests/format-suppressions.py: this is the script used to generate valgrind/lasso.supp and valgrind/glib.supp. tests/format-suppressions.py | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) commit be2825415efe58b73943eba8b0629a54445a32d9 Author: Benjamin Dauvergne Date: Thu Apr 30 14:58:13 2009 +0000 Add a stress test for serializing/deserializing code * Makefile.am: add targets * tests2.c: this simple makes lots of serializing, deserializing. * data/response-1: * data/response-2: * data/response-3: data test files tests/Makefile.am | 11 +++++++-- tests/data/response-1 | 57 ++++++++++++++++++++++++++++++++++++++++++++++ tests/data/response-2 | 39 +++++++++++++++++++++++++++++++ tests/data/response-3 | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++ tests/tests2.c | 33 +++++++++++++++++++++++++++ 5 files changed, 201 insertions(+), 2 deletions(-) commit c5f5f84329a2738bdefd7f8984986738e519c6e0 Author: Benjamin Dauvergne Date: Thu Apr 30 14:58:11 2009 +0000 SAML 2.0: Fix many leaks * lasso/saml-2.0/login.c: * lasso/saml-2.0/logout.c: * lasso/saml-2.0/name_id_management.c: * lasso/saml-2.0/profile.c: * lasso/saml-2.0/provider.c: do not mix g_malloc strings with libxml strings, use the string/gobject handling macros as much as possible, be a good memory citizen, don't put your elbows on the table. lasso/saml-2.0/login.c | 161 ++++++++++++++++++------------------ lasso/saml-2.0/logout.c | 140 +++++++++++++------------------ lasso/saml-2.0/name_id_management.c | 8 +- lasso/saml-2.0/profile.c | 94 ++++++++++----------- lasso/saml-2.0/provider.c | 15 ++-- 5 files changed, 194 insertions(+), 224 deletions(-) commit e57e1efc219ce1a2ee8c31cdde9a98f724e982da Author: Benjamin Dauvergne Date: Thu Apr 30 14:58:09 2009 +0000 LassoNode: Fix leaks * lasso/xml/xml.c: fix more and more leaks. lasso/xml/xml.c | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) commit a74bd368d4b7e575d6ecba8a8f232d87332b5a27 Author: Benjamin Dauvergne Date: Thu Apr 30 14:58:08 2009 +0000 Add debugging code to lasso_node_impl_init_from_xml * lasso/xml/xml.c: add more debugging code for the memory-debug flag. lasso/xml/xml.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) commit 00c83baf3852d0dfe399f1b67ff7736afcbad2d8 Author: Benjamin Dauvergne Date: Thu Apr 30 14:58:06 2009 +0000 Add debugging code to lasso_set_orginal_xmlnode * lasso/xml/xml.c: add code to trace allocation and deallocation of original xmlnode associated to LassoNodes. lasso/xml/xml.c | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) commit 0366a5b4fc7168e27c4d3c73c8e71de41de4f124 Author: Benjamin Dauvergne Date: Thu Apr 30 14:58:04 2009 +0000 Remove useless code * lasso/xml/lib_authentication_statement.c: * lasso/xml/saml-2.0/samlp2_name_id_policy.c: * lasso/xml/saml_name_identifier.c: remove useless initialization code. lasso/xml/lib_authentication_statement.c | 2 +- lasso/xml/saml-2.0/samlp2_name_id_policy.c | 2 -- lasso/xml/saml_name_identifier.c | 10 +--------- 3 files changed, 2 insertions(+), 12 deletions(-) commit 70b466c6c2f4e08794fbd33cad0be928571f8298 Author: Benjamin Dauvergne Date: Thu Apr 30 14:58:03 2009 +0000 Fix leak in lasso_url_add_parameters * lasso/xml/tools.c: in lasso_url_add_parameters free intermediate strings. lasso/xml/tools.c | 3 +++ 1 file changed, 3 insertions(+) commit 8b23081b3a8c6198c29863a0a5d47e8e2652023f Author: Benjamin Dauvergne Date: Thu Apr 30 14:58:01 2009 +0000 Fix debug echo on stdout * lasso/utils.h: make lasso_mem_debug output on stderr and not stdout lasso/utils.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 8309bd491ee5b80e873f3b5462e25de5e1a042dc Author: Benjamin Dauvergne Date: Thu Apr 30 14:58:00 2009 +0000 Add new valgrind memleak suppression files * tests/valgrind/glib.supp: suppress all "static" allocation by glib, usually for the type system. * tests/valgrind/lasso.supp: suppress allocations from lasso that we cannot actually remove, they are all from "called only once" code, so it should not really be a problem for embedded codes. tests/valgrind/glib.supp | 408 ++++++++++++++++++++++++++++++++++++++++++++++ tests/valgrind/lasso.supp | 60 +++++++ 2 files changed, 468 insertions(+) commit 2a75e87543fb0898047b66b10b6e15f89d31185e Author: Benjamin Dauvergne Date: Mon Apr 27 15:48:53 2009 +0000 More work on signature validation for SAML 2.0 * lasso/saml-2.0/profile.c: in lasso_saml20_profile_process_any_request and lasso_saml20_profile_process_any_response do not make signature validation failure as call failure, just store the result in profile->signature_status and let the upper level functions handle what to do with it. also add documentation about those two functions. * lasso/saml-2.0/logout.c: * lasso/saml-2.0/name_id_management.c: handle new signature_status semantic. * lasso/saml-2.0/login.c: add internal documentation for lasso_saml20_login_process_authn_response_msg. lasso/saml-2.0/login.c | 19 ++++++++++++++++++- lasso/saml-2.0/logout.c | 4 ++++ lasso/saml-2.0/name_id_management.c | 6 ++++++ lasso/saml-2.0/profile.c | 34 ++++++++++++++++++++++++++++------ 4 files changed, 56 insertions(+), 7 deletions(-) commit cbd9ade93681ec31f19a4cb730fe68ab6f78d928 Author: Benjamin Dauvergne Date: Mon Apr 27 14:31:51 2009 +0000 Update signature_status when checking signature on assertions * lasso/saml-2.0/login.c: if signature_status is SIGNATURE_NOT_FOUND, check one on the assertion and keep the result in signature_status. lasso/saml-2.0/login.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit a820d7119698781050382b145ce09ce146209dfb Author: Benjamin Dauvergne Date: Mon Apr 27 14:31:50 2009 +0000 Increase wait time for integration test * tests/integration/saml2/__init__.py: wait 5 seconds for dameons to start. tests/integration/saml2/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 2ebaae63c36ac45762a4e745cc6619f30c0ad245 Author: Benjamin Dauvergne Date: Mon Apr 27 14:31:48 2009 +0000 review later lasso/lasso.c | 6 ++++++ 1 file changed, 6 insertions(+) commit b2c9e44a0576f155f32a1245908ce8e364b7b9c3 Author: Benjamin Dauvergne Date: Mon Apr 27 08:19:37 2009 +0000 FIX: verify assertion signature for SAML 2.0 when response is not signed * lasso/saml-2.0/login.c: if response was not signed, check the signature on the assertion. lasso/saml-2.0/login.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit bb7af761c5e2ae68a8ea9bdc7463a9dd7e54d47f Author: Benjamin Dauvergne Date: Mon Apr 27 08:19:35 2009 +0000 new function lasso_saml20_login_check_assertion_signature() * lasso/saml-2.0/login.c: lasso_saml20_login_check_assertion_signature() find the issuer of an assertion, look it up in the server object and try to validate its signature. It returns an error code if any of this step fails. lasso/saml-2.0/login.c | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) commit 96d33b6542a64daa69f1789317815ced0ff26952 Author: Benjamin Dauvergne Date: Mon Apr 27 08:19:33 2009 +0000 Test: Remove spurious debugging printf * tests/login_tests_saml2.c: remove debug code. tests/login_tests_saml2.c | 2 -- 1 file changed, 2 deletions(-) commit 02c189c3f1ac06a25020b1002bfc855e0b312ba9 Author: Benjamin Dauvergne Date: Mon Apr 27 08:19:32 2009 +0000 Add keep_xmlnode flag to SAML 2.0 req, resp and assertions * lasso/xml/saml-2.0/saml2_assertion.c: * lasso/xml/saml-2.0/samlp2_request_abstract.c: * lasso/xml/saml-2.0/samlp2_response.c: * lasso/xml/saml-2.0/samlp2_status_response.c: set keep_xmlnode flag to 1 in class_init. lasso/xml/saml-2.0/saml2_assertion.c | 1 + lasso/xml/saml-2.0/samlp2_request_abstract.c | 1 + lasso/xml/saml-2.0/samlp2_response.c | 1 + lasso/xml/saml-2.0/samlp2_status_response.c | 1 + 4 files changed, 4 insertions(+) commit 962a5d24036546e820f54d94deab39fd4fcaaaa0 Author: Benjamin Dauvergne Date: Mon Apr 27 08:19:30 2009 +0000 new function lasso_profile_get_server() * lasso/id-ff/profile.c: * lasso/id-ff/profile.h: in a move to try to remove direct access to object content, add a function to retrieve the LassoServer object of a LassoProfile. * bindings/overrides.xml: it conflicts with direct access to the public field server, so we do not export it in the binding for now. bindings/overrides.xml | 1 + lasso/id-ff/profile.c | 26 ++++++++++++++++++++++++++ lasso/id-ff/profile.h | 1 + 3 files changed, 28 insertions(+) commit ecb84ebd1d22c2cf4fe870633b1a242632cb7df3 Author: Benjamin Dauvergne Date: Mon Apr 27 08:19:28 2009 +0000 fix: in lasso_verify_signature() only look for the first direct child Signature element * lasso/xml/tools.c: in SAML message signatures are usually envelopped signatures, so just lookup for the first direct child which is a Signature node. lasso/xml/tools.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 86b97760e6202533fc87777f75cc4b95c594ec44 Author: Benjamin Dauvergne Date: Mon Apr 27 08:19:25 2009 +0000 fix: handle non-LHS argument for lasso_extract_node_or_fail() * lasso/utils.h: create a temporary varaible to store result of second argument evaluation to prevent spurious side effects. lasso/utils.h | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) commit 4ba02b07253ddde0619e5a45df6aa431f1985352 Author: Benjamin Dauvergne Date: Mon Apr 27 08:19:24 2009 +0000 lasso_saml20_profile_init_artifact_resolve(): check http_method * lasso/saml-2.0/profile.c: check the given http_method it must one in - LASSO_HTTP_METHOD_ARTIFACT_POST, - LASSO_HTTP_METHOD_ARTIFACT_GET. lasso/saml-2.0/profile.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 83ce945c5f6343e35fddc9bb6fdc6e8410b409af Author: Benjamin Dauvergne Date: Mon Apr 27 08:19:22 2009 +0000 lasso_login_init_request(): change error code for invalid artifacts * lasso/id-ff/login.c: if artifact is invalid return LASSO_PROFILE_ERROR_INVALID_ARTIFACT as in lasso_saml20_profile_init_artifact_resolve(). lasso/id-ff/login.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit aec28fdac6fd87cb486e732fe5254b8affc687ed Author: Benjamin Dauvergne Date: Mon Apr 27 08:19:20 2009 +0000 Complete documentation of lasso_login_init_request * lasso/id-ff/login.c: add precision on usage. add all possible return codes with meanings. lasso/id-ff/login.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) commit c7ec6c1ed9fccd50ffa206d3dfa9a36fc9c9acf4 Author: Benjamin Dauvergne Date: Mon Apr 27 08:19:18 2009 +0000 lasso_login_init_authn_request: complete doc * lasso/id-ff/login.c: add all possible return codes and their meaning. lasso/id-ff/login.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) commit 22e51935c71fddc9aa54cad39007a8db27286a61 Author: Benjamin Dauvergne Date: Mon Apr 27 08:19:17 2009 +0000 lasso_login_init_authn_request: change error code for missing remote provider ID * lasso/id-ff/login.c: change the return code for when no remote provider ID could be defined (because the argument is NULL and the server object contains no providers) so that we can distingish the case where the given provider is unknown or if there is no providers configured. lasso/id-ff/login.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit a70c175015dff5bc5ab0c434714adc8d4c49b9d0 Author: Benjamin Dauvergne Date: Mon Apr 27 08:19:15 2009 +0000 Add a deprecated tag to lasso_login_destroy doc * lasso/id-ff/login.c: all destroy functions are deprecated, g_object_unref() should be used instead. lasso/id-ff/login.c | 2 ++ 1 file changed, 2 insertions(+) commit 0df4e13e7aea6c02f6f30a664d11b141749eaafb Author: Benjamin Dauvergne Date: Mon Apr 27 08:19:13 2009 +0000 Complete documentation of lasso_login_byuld_response_msg * lasso/id-ff/login.c: add all possible return codes with meaning. lasso/id-ff/login.c | 5 +++++ 1 file changed, 5 insertions(+) commit 251dfa0d0bda78473e19b3f98a4d0b6fbe8e20a6 Author: Benjamin Dauvergne Date: Mon Apr 27 08:19:11 2009 +0000 Complete documentation of lasso_login_build_request_msg * lasso/id-ff/login.c: add all possible return codes with meaning. lasso/id-ff/login.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) commit f12c2e73325dd6e8dc3e9660f9e91bccf72c9aa8 Author: Benjamin Dauvergne Date: Mon Apr 27 08:19:09 2009 +0000 Complet documentation for lasso_login_build_authn_response_msg * lasso/id-ff/login.c: add all possible return codes with meaning. lasso/id-ff/login.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) commit 530e6ceac03ec2a6487c00f34faf4a66a16a3736 Author: Benjamin Dauvergne Date: Mon Apr 27 08:19:08 2009 +0000 Complete documentation of lasso_login_build_authn_request * lasso/id-ff/login.c: add all possible return codes with meaning. lasso/id-ff/login.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) commit c56ba110ea8f65165423bb343f202e9f7ef44bcd Author: Benjamin Dauvergne Date: Mon Apr 27 08:19:06 2009 +0000 Complete documentation for lasso_login_build_artifact_msg * lasso/id-ff/login.c: add all possible return codes with meaning. lasso/id-ff/login.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) commit 77495e50d3fe477290dbb2aa16b3694d23f310f1 Author: Benjamin Dauvergne Date: Mon Apr 27 08:19:04 2009 +0000 Complet documentation of lasso_login_accept_sso * lasso/id-ff/login.c: add all possible return codes. lasso/id-ff/login.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) commit 6f79955dfb1e28bd7d0e0f46b1f1ba0e8c4499d2 Author: Benjamin Dauvergne Date: Mon Apr 27 08:19:02 2009 +0000 Complete doc for static function lasso_login_musk_ask_for_consent * lasso/id-ff/login.c: precise return value meaning. lasso/id-ff/login.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit df81b3438f247a80a09180bdc918177f0b7ad327 Author: Benjamin Dauvergne Date: Mon Apr 27 08:19:00 2009 +0000 Complete document of lasso_login_build_assertion * lasso/id-ff/login.c: add possible return codes. lasso/id-ff/login.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit 913f1596971fd73fda038e37ce75ec31965557be Author: Benjamin Dauvergne Date: Mon Apr 27 08:18:57 2009 +0000 Complete doc of lasso_logout_validate_request * lasso/id-ff/logout.c: add description of all possible return codes. lasso/id-ff/logout.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) commit 52e60ecb097216e2deb0eda898d38425ed665a07 Author: Benjamin Dauvergne Date: Wed Apr 22 23:49:29 2009 +0000 Rework cleanup handling * lasso/utils.h: change 'goto exit' for 'goto cleanup'. rename all goto_exit macros to goto_cleanup_. rename goto_cleanup_if_fail to goto_cleanup_if_fail_with_rc and add a goto_cleanup_if_fail for function which do not return an integer value. add documentation for goto_cleanup macro family. * lasso/id-ff/login.c: * lasso/id-ff/provider.c: * lasso/id-ff/server.c: * lasso/id-ff/session.c: * lasso/id-wsf/discovery.c: * lasso/id-wsf/wsf_profile.c: * lasso/saml-2.0/profile.c: * lasso/utils.h: * lasso/xml/lib_logout_request.c: * lasso/xml/tools.c: * lasso/xml/xml.c: update name of goto_exit_if_fail macros. rename 'exit' labels to 'cleanup'. lasso/id-ff/login.c | 8 ++-- lasso/id-ff/provider.c | 32 +++++++-------- lasso/id-ff/server.c | 6 +-- lasso/id-ff/session.c | 12 +++--- lasso/id-wsf/discovery.c | 12 +++--- lasso/id-wsf/wsf_profile.c | 92 +++++++++++++++++++++--------------------- lasso/utils.h | 60 +++++++++++++++++++++++---- lasso/xml/lib_logout_request.c | 4 +- lasso/xml/tools.c | 24 +++++------ lasso/xml/xml.c | 28 ++++++------- 10 files changed, 162 insertions(+), 116 deletions(-) commit ce3c049c7cc8f10e55ff7b572d6a5b7c03730091 Author: Benjamin Dauvergne Date: Wed Apr 22 23:49:25 2009 +0000 XML: Fix prefix clobbering by xsi:type handling * lasso/xml/xml.c: if xsi:type is not able to find a GObject typename for the current node, then do not erase the actual prefix value. change prefix type to const char. lasso/xml/xml.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) commit 8fe778044120011ca777be79a19c671927027cc6 Author: Benjamin Dauvergne Date: Wed Apr 22 23:49:24 2009 +0000 SAML 2.0: Use new API lasso_url_add_parameter * lasso/saml-2.0/profile.c: use new API lasso_url_add_parameter to handle RelayState parameter creation. lasso/saml-2.0/login.c | 27 +++++++++++++++------------ lasso/saml-2.0/profile.c | 10 ++-------- 2 files changed, 17 insertions(+), 20 deletions(-) commit b538c31bd397e9784c7fd497b2ccd6f2a862dcaf Author: Benjamin Dauvergne Date: Wed Apr 22 23:49:22 2009 +0000 SAML 2.0: Check http_method in build_artifact_msg * lasso/saml-2.0/login.c: if http_method is not among ARTIFACT_GET and ARTIFACT_POST, return an INVALID_HTTP_METHOD error. lasso/saml-2.0/login.c | 4 ++++ 1 file changed, 4 insertions(+) commit 35eb8da3795e50c38882cee6db123b319091657b Author: Benjamin Dauvergne Date: Wed Apr 22 23:49:20 2009 +0000 Tests: Add test parsing a Ping Federate assertion. * tests/basic_tests.c: load data/response-1 and try to parse it. tests/basic_tests.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) commit ed5e0fce1583d3e73ce0dcb7187c6aa541fbf97d Author: Benjamin Dauvergne Date: Wed Apr 22 23:49:19 2009 +0000 Add a new internal API for parameters building * xml/tools.c: add lasso_url_add_parameter that concat the string &key=value to an existing URL where key and value are url-encoded. * xml/private.h: declare lasso_url_add_parameter. lasso/xml/private.h | 1 + lasso/xml/tools.c | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+) commit 50ea06e0f769418c189469d7f164117c9d1db366 Author: Benjamin Dauvergne Date: Wed Apr 22 23:49:17 2009 +0000 Tests: Add a SAML2 login test * tests/login_tests_saml2.c: add a C login test for SAML 2. * tests/Makefile.am: add the new test to dependencies. tests/Makefile.am | 2 +- tests/login_tests_saml2.c | 464 ++++++++++++++++++++++++++++++++++++++++++++++ tests/tests.c | 2 + 3 files changed, 467 insertions(+), 1 deletion(-) commit 670383da1ea8da3ed20b84a9802416aaffe4b5d7 Author: Benjamin Dauvergne Date: Tue Apr 21 12:22:41 2009 +0000 If no typename could be determined, stop parsing. * lasso/xml/xml.c: in lasso_node_new_from_xmlNode if no typename is found for the given xmlNode, return NULL. lasso/xml/xml.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit 827d79af7c59fdefed211e14463841cd18e8ec71 Author: Jerome Schneider Date: Fri Apr 17 14:12:43 2009 +0000 Fix python 2.4 binding build bindings/python/wrapper_top.c | 6 ++++++ 1 file changed, 6 insertions(+) commit dac53715ea615eae6c76fbac23813cdd820b989e Author: Benjamin Dauvergne Date: Tue Apr 14 07:51:25 2009 +0000 Core: Add cast to first argument of isalnum * lasso/xml/xml.c: * lasso/xml/tools.c: isalnum takes a int as first arg. lasso/xml/tools.c | 2 +- lasso/xml/xml.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 3cd463c4a29d13452c4055ab8ec67de457d7a356 Author: Benjamin Dauvergne Date: Tue Apr 14 07:51:22 2009 +0000 Core: add an header file for backward compatibility * lasso/backward_comp.h: this header will contain substitue function, defines or types for compatibility with older versions of dependencies. * lasso/utils.h: remove declaration of g_strcmp0 * lasso.c: * tests/login_tests.c: use backward_comp.h lasso/backward_comp.h | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ lasso/lasso.c | 16 +--------------- lasso/utils.h | 7 ------- tests/login_tests.c | 1 + 4 files changed, 50 insertions(+), 22 deletions(-) commit 699f72e5687537dd4eded52fbe636a270a0f0580 Author: Jerome Schneider Date: Thu Apr 9 16:55:39 2009 +0000 Fix build issues on amd64 / gcc 4.3 * bindings/java/lang.py: fix cast issue * bindings/python/wrapper_top.c fix type issue * lasso/registry.c fix cast issue bindings/java/lang.py | 2 +- bindings/python/wrapper_top.c | 2 +- lasso/registry.c | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) commit ff1898352074ea8e6ab5fb5bb377618e7f8cf68f Author: Benjamin Dauvergne Date: Thu Apr 2 17:16:05 2009 +0000 Tests&Core: add g_strcmp0 if glib is old * lasso/utils.h: if glib is older than 2.16, export g_strcmp0 as part of internal headers, in order to use it in login_tests.c * tests/login_tests.c: include utils.h lasso/utils.h | 7 +++++++ tests/login_tests.c | 1 + 2 files changed, 8 insertions(+) commit 3e4f391987e0f483f86cafdad6200e2ec080c9ab Author: Benjamin Dauvergne Date: Fri Mar 27 17:01:24 2009 +0000 Update website download page * website/web/download/index.xml: update link for last release download * website/web/news/13-release-2.2.2.xml: add news about release 2.2.2 website/web/download/index.xml | 5 ++--- website/web/news/13-release-2.2.2.xml | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 3 deletions(-) commit ac99ae6423acfd7ee04a4f50d094f972e01e6e02 Author: Benjamin Dauvergne Date: Fri Mar 27 16:44:17 2009 +0000 Update lasso version to 2.2.2 * configure.ac: * fedora/lasso.spec: * lasso.doap: update lasso version to 2.2.2, this commit will be the reference for the 2.2.2 release. configure.ac | 4 ++-- fedora/lasso.spec | 2 +- lasso.doap | 16 ++++++++++++++-- 3 files changed, 17 insertions(+), 5 deletions(-) commit e65ed1877199b1b35f9847f3aad62e98a0c2bf47 Author: Benjamin Dauvergne Date: Fri Mar 27 16:44:15 2009 +0000 Makefile: change dependencies to pass distcheck * lasso/Makefile.am: source dependencies must refer to $(srcdir) in order to pass distcheck, I forgot to do it in types.c and symbols.sym target changes. lasso/Makefile.am | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit a46e6d8085fe68706c281392c641c6ede1a79d2c Author: Benjamin Dauvergne Date: Fri Mar 27 15:06:45 2009 +0000 ID-FF 1.2: if logout request parsing fails, take a shortcut * lasso/xml/lib_logout_request.c: immediately return from init_from_query if overloaded parent method fails. lasso/xml/lib_logout_request.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 280f5d0c72534fb8a9f3c7c6a6035b19ce6c1ea2 Author: Benjamin Dauvergne Date: Fri Mar 27 15:06:44 2009 +0000 SAML 2.0: Update generic relaystate handling * lasso/saml-2.0/profile.c: in lasso_saml20_profile_build_redirect_request_msg and lasso_saml20_profile_build_redirect_response, use new function lasso_saml20_profile_build_http_redirect. lasso/saml-2.0/profile.c | 37 ++++++++++--------------------------- 1 file changed, 10 insertions(+), 27 deletions(-) commit b6ec9b4a094e239d3fd051a7cac28716b67c7809 Author: Benjamin Dauvergne Date: Fri Mar 27 15:06:43 2009 +0000 Core: add a add-signature flag * lasso/debug.h: * lasso/lasso.c: add a lasso_flag_add_signature flag variable (default to TRUE), and parsing code to change it from LASSO_FLAG environment variable. ("env LASSO_FLAG=no-add-signature test"). lasso/debug.h | 1 + lasso/lasso.c | 6 ++++++ 2 files changed, 7 insertions(+) commit 50c9870fe2b47ba3339da1e0db0a6f24e3514a03 Author: Benjamin Dauvergne Date: Fri Mar 27 15:06:41 2009 +0000 ID-FF 1.2: Only verify InResponseTo if strict checking is on * lasso/id-ff/login.c: add condition upon checking of the InResponseTo field: checks only if strict checking is activated as it could stop old code using Lasso from working. lasso/id-ff/login.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) commit cc4a7a56b5a6891e6dcdbd08597a439633400566 Author: Benjamin Dauvergne Date: Fri Mar 27 15:06:40 2009 +0000 Core: Add a flag for enabling more strict checking * lasso/debug.h: declare lasso_flag_strict_checking global boolean variable. * lasso/lasso.c: add parsing for new option called 'strict-checking'. lasso/debug.h | 1 + lasso/lasso.c | 6 ++++++ 2 files changed, 7 insertions(+) commit 075c9a1a9392214c8f981bec1a4a2b46701bd0a7 Author: Benjamin Dauvergne Date: Fri Mar 27 15:06:38 2009 +0000 XML: use macro for assignment * lasso/xml/xml.c: use standardized assignment macros (it takes care of releasing previous valuesm and other peculiarities associated with safe pointer usage). lasso/xml/xml.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 4463c2ccc2b5d7abbc5241edf973ce4fccca9648 Author: Benjamin Dauvergne Date: Fri Mar 27 15:06:37 2009 +0000 ID-FF 1.2: Add trace in dispose for LassoProfile * lasso/id-ff/profile.c: add tracing code activaged by LASSO_FLAG=memory-debug to print release of field values. Complement the existing code in generic deallocation procedure in LassoNode. lasso/id-ff/profile.c | 5 +++++ 1 file changed, 5 insertions(+) commit 040431ebaa3a4616b09595f3cc96f070cdb54f58 Author: Benjamin Dauvergne Date: Fri Mar 27 15:06:35 2009 +0000 Core: debug.h need export.h * lasso/debug.h: export.h is needed for the LASSO_EXPORT macro. lasso/debug.h | 1 + 1 file changed, 1 insertion(+) commit 61b64a38c5dd41ebf4a7dd1ab2ab6d499578d840 Author: Benjamin Dauvergne Date: Fri Mar 27 15:06:34 2009 +0000 Core: Macros to print deallocation messages * lasso/utils.h: lasso_mem_debug print deallocation message with respect to class and field. lasso/utils.h | 7 +++++++ 1 file changed, 7 insertions(+) commit c34e67d5236234222037bca0c3c4021f8c914a15 Author: Benjamin Dauvergne Date: Fri Mar 27 15:06:33 2009 +0000 Core: remove type check equality on gobject macros * lasso/utils.h: assignment to the temporary variable allow to check for the typing, do not use lasso_check_type_equality. lasso/utils.h | 2 -- 1 file changed, 2 deletions(-) commit 38053d6790c68cde62892a0fe6d38f317417e84c Author: Benjamin Dauvergne Date: Fri Mar 27 15:06:32 2009 +0000 Core: add macros to handle xmlSecKey * lasso/utils.h: macros to assign and release xmlSecKey(s). lasso/utils.h | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) commit 60018bbb4d98a7b53cf50c05b7f2d0dc4716ebf4 Author: Benjamin Dauvergne Date: Fri Mar 27 15:06:30 2009 +0000 XML: fix memory leaks * lasso/xml/tools.c: * lasso/xml/xml.c: release xmlDoc, properly steal nodes by using xmlSetTreeDoc(xmlnode, NULL); lasso/xml/tools.c | 13 +++++-------- lasso/xml/xml.c | 2 ++ 2 files changed, 7 insertions(+), 8 deletions(-) commit a68c89f90263fa466b5193f4942424cc88aee46c Author: Benjamin Dauvergne Date: Fri Mar 27 15:06:29 2009 +0000 ID-FF 1.2: fix style fault * lasso/id-ff/defederation.c: * lasso/id-ff/logout.c: * lasso/id-ff/profile.c: * lasso/id-ff/provider.c: * lasso/id-ff/server.c: add missings casts, remove useless wrappers * lasso/id-ff/logout.c: In lasso_logout_process_request_msg change sequence of "if" for a "switch". lasso/id-ff/defederation.c | 6 +++--- lasso/id-ff/logout.c | 16 +++++++++++----- lasso/id-ff/provider.c | 12 +++--------- lasso/id-ff/server.c | 7 ++++--- 4 files changed, 21 insertions(+), 20 deletions(-) commit 3caee2835d5c42293619d92539e6b41473832c54 Author: Benjamin Dauvergne Date: Fri Mar 27 15:06:27 2009 +0000 ID-FF 1.2: fix some real and potential memory leaks * lasso/id-ff/provider.c: * lasso/id-ff/server.c: * lasso/id-ff/session.c: use macros to release previous value when necessary, release object used as parameters to constructors, free the encryption key associated with a provider, release the key manager created for a saml signature verification. lasso/id-ff/provider.c | 7 ++++--- lasso/id-ff/server.c | 15 ++++++++++----- lasso/id-ff/session.c | 4 ++-- 3 files changed, 16 insertions(+), 10 deletions(-) commit 70299b52ab264a2e1b7d1f5e8ea14135dbfbe183 Author: Benjamin Dauvergne Date: Fri Mar 27 15:06:25 2009 +0000 Test: add missing release of objects and memory * tests/basic_tests.c: * tests/login_tests.c: * tests/metadata_tests.c: * tests/random_tests.c: * tests/tests.c: add missing g_free and g_object_unref calls. tests/basic_tests.c | 1 + tests/login_tests.c | 41 ++++++++++++++++++++++++++++++++++------- tests/metadata_tests.c | 5 +++++ tests/random_tests.c | 29 ++++++++++++++++++++++++----- tests/tests.c | 1 + 5 files changed, 65 insertions(+), 12 deletions(-) commit 84e5c3b66bc3a004208582f4697b9139445ace07 Author: Benjamin Dauvergne Date: Fri Mar 27 15:06:24 2009 +0000 Bindings: skip DEPRECATED variables * bindings/bindings.py: when parsing headers, skipped deprecated struct fields. bindings/bindings.py | 2 ++ 1 file changed, 2 insertions(+) commit c89c77c92461d8346c94f286d809d3a96c6dd454 Author: Benjamin Dauvergne Date: Fri Mar 27 15:06:23 2009 +0000 ID-FF 1.2: Add handling of relaystate for logout requests * lasso/id-ff/logout.c (lasso_logout_process_request_msg, lasso_logout_validate_request): transfer relaystate from request message to profile field. lasso/id-ff/defederation.c | 2 +- lasso/id-ff/logout.c | 26 +++++++++++++++----------- 2 files changed, 16 insertions(+), 12 deletions(-) commit 854df3b651b814f5536e8d2f936d2a38aaa81ef0 Author: Benjamin Dauvergne Date: Fri Mar 27 15:06:21 2009 +0000 ID-FF 1.2: Use new macros in logout, defederation and lecp * lasso/id-ff/logout.c: - (lasso_logout_build_response_msg, lasso_logout_init_request, lasso_logout_process_request_msg, lasso_logout_process_response_msg, lasso_logout_validate_request) use lasso_assign_new_object, lasso_assign_string, lasso_release and lasso_assign_new_string when possible. - (lasso_logout_process_response_msg) move the tranfer of the relaystate from XML object to profile object. * lasso/id-ff/defederation.c: - (lasso_defederation_build_notification_msg, lasso_defederation_init_notification, lasso_defederation_process_notification_msg, lasso_defederation_validate_notification): idem * lasso/id-ff/lecp.c: - (lasso_lecp_build_authn_request_envelope_msg, lasso_lecp_build_authn_request_msg,lasso_lecp_build_authn_response_msg, lasso_lecp_build_authn_response_envelope_msg) idem lasso/id-ff/defederation.c | 57 ++++++++-------- lasso/id-ff/lecp.c | 28 ++++---- lasso/id-ff/logout.c | 159 +++++++++++++++++++++------------------------ 3 files changed, 115 insertions(+), 129 deletions(-) commit 62de952ae9ee16840346c0dbef40a340140bca08 Author: Benjamin Dauvergne Date: Fri Mar 27 15:06:19 2009 +0000 Autoconf: Do not include optimisation flags in AM_CFLAGS * configure.ac: when --enable-debugging set CFLAGS, do not modify AM_CFLAGS. configure.ac | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit d85f440885ca65d8e48cc9f4212463813cb11b43 Author: Benjamin Dauvergne Date: Fri Mar 27 15:06:18 2009 +0000 ID-FF 1.2 Tests: Add test for relaystate * tests/login_tests.c: - (test02_serviceProviderLogin) add assertion concerning the relaying of the RelayState parameter during an SP initiated SSO. tests/login_tests.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) commit 5268ee292873861ca0ba4f0d3d7990c8da83d4e8 Author: Benjamin Dauvergne Date: Fri Mar 27 15:06:17 2009 +0000 ID-FF 1.2 Login: Use allocation macros * lasso/id-ff/login.c: (lasso_login_init_authn_request) again a passing by correction, use lasso_assign_string for copying information from the request to the profile object. lasso/id-ff/login.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit fbc86db17f9d034d1f330b892542d71d19453d24 Author: Benjamin Dauvergne Date: Fri Mar 27 15:06:15 2009 +0000 ID-FF 1.2: Handle RelayState inside LassoLogin * lasso/id-ff/login.c: - (lasso_login_init_request) catch RelayState in the query_fields and copy it to msg_relayState - (lasso_login_process_authn_request_msg) copy RelayState from the request object to the profile object. lasso/id-ff/login.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) commit 93dc7ca54572ca7efca4939e952b1196277f0ec5 Author: Benjamin Dauvergne Date: Fri Mar 27 15:06:13 2009 +0000 XML ID-FF 1.2 & SAML 2.0: Handle signature failure * lasso/xml/saml_assertion.c: * lasso/xml/samlp_response_abstract.c: * lasso/xml/samlp_request_abstract.c: * lasso/xml/saml-2.0/samlp2_request_abstract.c: * lasso/xml/saml-2.0/saml2_assertion.c: * lasso/xml/saml-2.0/samlp2_status_response.c: if a failure occur in the signing process, free the xmlnode, return NULL and print a warning. lasso/xml/saml-2.0/saml2_assertion.c | 20 +++++++++++++------- lasso/xml/saml-2.0/samlp2_request_abstract.c | 10 ++++++++-- lasso/xml/saml-2.0/samlp2_status_response.c | 28 +++++++++++++++------------- lasso/xml/saml_assertion.c | 17 ++++++++++++++--- lasso/xml/samlp_request_abstract.c | 17 ++++++++++++++--- lasso/xml/samlp_response_abstract.c | 19 +++++++++++++++---- 6 files changed, 79 insertions(+), 32 deletions(-) commit 4b8f9075ef12bb90dd0e2ab573a2ab2352df8a71 Author: Benjamin Dauvergne Date: Fri Mar 27 15:06:12 2009 +0000 XML SAML 2.0: Delete parent_class static variable * lasso/xml/saml-2.0/samlp2_manage_name_id_request.c, lasso/xml/saml-2.0/samlp2_manage_name_id_response.c, lasso/xml/saml-2.0/samlp2_name_id_mapping_request.c, lasso/xml/saml-2.0/samlp2_name_id_mapping_response.c. lasso/xml/saml-2.0/samlp2_subject_query_abstract.c: - remove static variable parent_class - (class_init) remove intialization of parent_class lasso/xml/saml-2.0/samlp2_manage_name_id_request.c | 2 -- lasso/xml/saml-2.0/samlp2_manage_name_id_response.c | 2 -- lasso/xml/saml-2.0/samlp2_name_id_mapping_request.c | 2 -- lasso/xml/saml-2.0/samlp2_name_id_mapping_response.c | 2 -- lasso/xml/saml-2.0/samlp2_subject_query_abstract.c | 2 -- 5 files changed, 10 deletions(-) commit 91d9d67812a7bf02eac89c4516075717d39b459d Author: Benjamin Dauvergne Date: Fri Mar 27 15:06:10 2009 +0000 XML SAML 2.0: Mark RelayState field from SAML 2.0 deprecated * lasso/xml/saml-2.0/samlp2_authn_request.c, lasso/xml/saml-2.0/samlp2_logout_request.c, - (instance_init) remove initialization of relayState field * lasso/xml/saml-2.0/samlp2_logout_response.c: - (instance_init) remove empty function, since it only initialized relayState. - (lasso_samlp2_logout_reponse_get_type) remove instance_init from the type initialization structure. * lasso/xml/saml-2.0/samlp2_authn_request.h, lasso/xml/saml-2.0/samlp2_logout_request.h, lasso/xml/saml-2.0/samlp2_logout_response.h: - (struct _LassoSamlp2*) mark relaystate field as deprecated. lasso/xml/saml-2.0/samlp2_authn_request.c | 9 --------- lasso/xml/saml-2.0/samlp2_authn_request.h | 5 +++-- lasso/xml/saml-2.0/samlp2_logout_request.c | 14 +------------- lasso/xml/saml-2.0/samlp2_logout_request.h | 4 +++- lasso/xml/saml-2.0/samlp2_logout_response.c | 8 +------- lasso/xml/saml-2.0/samlp2_logout_response.h | 5 +++-- 6 files changed, 11 insertions(+), 34 deletions(-) commit 1b550a860624e3374948cc21e5d7a761619cb537 Author: Benjamin Dauvergne Date: Fri Mar 27 15:06:08 2009 +0000 XML SAML 2.0: Clean query string parsing/building * lasso/xml/saml-2.0/samlp2_status_response.c: - (init_from_query) remove useless stub code for parsing RelayState * lasso/xml/saml-2.0/samlp2_response.c, lasso/xml/saml-2.0/samlp2_name_id_mapping_response.c, lasso/xml/saml-2.0/samlp2_logout_response.c, lasso/xml/saml-2.0/samlp2_manage_name_id_response.c, : - (class_init) remove overloading of init_from_query, use version from samlp2_status_response instead. - (init_from_query) Useless so deleted. * lasso/xml/saml-2.0/samlp2_request_abstract.c: - (class_init) add overloaded method for init_from_query virtual method. - (init_from_query) generic implementation for SAML 2.0 requests * lasso/xml/saml-2.0/samlp2_subject_query_abstract.c, lasso/xml/saml-2.0/samlp2_authn_request.c, lasso/xml/saml-2.0/samlp2_logout_request.c, lasso/xml/saml-2.0/samlp2_manage_name_id_request.c, lasso/xml/saml-2.0/samlp2_name_id_mapping_request.c, lasso/xml/saml-2.0/samlp2_assertion_id_request.c: - (class_init) remove overloading of init_from_query, use version from samlp2_request_abstract instead. - (init_from_query) Useless so deleted. lasso/xml/saml-2.0/samlp2_assertion_id_request.c | 13 ------------- lasso/xml/saml-2.0/samlp2_authn_request.c | 16 ---------------- lasso/xml/saml-2.0/samlp2_logout_request.c | 15 --------------- lasso/xml/saml-2.0/samlp2_logout_response.c | 14 -------------- lasso/xml/saml-2.0/samlp2_manage_name_id_request.c | 15 --------------- lasso/xml/saml-2.0/samlp2_manage_name_id_response.c | 15 --------------- lasso/xml/saml-2.0/samlp2_name_id_mapping_request.c | 15 --------------- lasso/xml/saml-2.0/samlp2_name_id_mapping_response.c | 15 --------------- lasso/xml/saml-2.0/samlp2_request_abstract.c | 7 +++++++ lasso/xml/saml-2.0/samlp2_response.c | 13 ------------- lasso/xml/saml-2.0/samlp2_status_response.c | 10 +--------- lasso/xml/saml-2.0/samlp2_subject_query_abstract.c | 15 --------------- 12 files changed, 8 insertions(+), 155 deletions(-) commit 8100385979f3fe64531c35b52d5aa37b8ec0cb7e Author: Benjamin Dauvergne Date: Fri Mar 27 15:06:06 2009 +0000 XML: Remove useless parsing of RelayState in lasso_node_init_from_saml2_query_fields * lasso/xml/xml.c: (lasso_node_init_from_saml2_query_fields) Since parsing of the relayState is now done inside each "_process_*msg" method of each SAML2 profile, it is not needed anymore in this function. lasso/xml/xml.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) commit 27ac758de6323ffffd564b1c9341e1860248018b Author: Benjamin Dauvergne Date: Fri Mar 27 15:06:03 2009 +0000 XML: Use memory macros inside lasso_node_export_to_query * lasso/xml/xml.c (lasso_node_export_to_query): use lasso own memory handling macros. lasso/xml/xml.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 63b38a406675d8f8c80a442cc13bcd9c50e52b3f Author: Benjamin Dauvergne Date: Fri Mar 27 15:05:59 2009 +0000 ID-FF 1.2: review HTTP-Redirect binding parsing/building * lasso/xml/lib_authn_request.c, lasso/xml/lib_logout_request.c, lasso/xml/lib_register_name_identifier_request.c, lasso/xml/lib_status_resposne.c: - build_query: remove build_query overloaded virtual method, use LassoNode new generic implementation. - init_from_query: - change direct call to lasso_node_init_from_query_fields to use of base implementation from LassoNode. - make use of utils.h memory handling macros like lasso_release_gobject and lasso_assign_string. * lasso/xml/lib_federation_termination_notification.c: - init_from_query: remove parsing of RelayState parameter lasso/xml/lib_authn_request.c | 17 +++++--------- .../xml/lib_federation_termination_notification.c | 17 +++----------- lasso/xml/lib_logout_request.c | 12 +++------- lasso/xml/lib_register_name_identifier_request.c | 27 ++++++++-------------- lasso/xml/lib_status_response.c | 20 +++++----------- lasso/xml/xml.c | 13 +++++++---- 6 files changed, 36 insertions(+), 70 deletions(-) commit d71ff1dec31085f912aa18538c5b2da00ab81709 Author: Benjamin Dauvergne Date: Fri Mar 27 15:05:57 2009 +0000 ID-FF 1.2: Defederation, changes includes for relative paths * lasso/id-ff/defederation.c: header path should be relative to the implementation, I will try to do it to most files. lasso/id-ff/defederation.c | 2 ++ 1 file changed, 2 insertions(+) commit 6bc8f1a630eb07f505deb896a53303cf5175cfe0 Author: Benjamin Dauvergne Date: Fri Mar 27 15:05:56 2009 +0000 ID-FF 1.2: Defederatopm HTTP-Redirect binding, handle relaystate * lasso/id-ff/defederation.c: get relaystate directly from the query string using lasso_get_relaystate_from_query. lasso/id-ff/defederation.c | 5 +++++ 1 file changed, 5 insertions(+) commit 88ce5a566943973bbb531d01718693b77c3f9835 Author: Benjamin Dauvergne Date: Fri Mar 27 15:05:55 2009 +0000 SAML 2.0: In login change includes for relative paths * lasso/id-ff/login.c: changes headers for relatives paths lasso/id-ff/login.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) commit bd015db03b689d840a6360121dd74520c98e990a Author: Benjamin Dauvergne Date: Fri Mar 27 15:05:53 2009 +0000 Core: Remove ending blanks from erros.c.in * lasso/errors.c.in: errors.c template contains blanks at end of lines. lasso/errors.c | 8 ++++---- lasso/errors.c.in | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) commit 88eaabc94d2b534a10a88fed671413ff51301c01 Author: Benjamin Dauvergne Date: Fri Mar 27 15:05:52 2009 +0000 SAML 2.0: add direct treatment of relaystate for HTTP-Redirect binding * lasso/saml-2.0/login.c: In lasso_saml20_login_process_authn_request_msg change handling of relayState do not rely upon parsing by the node object, but extract directly from the query string. Use new function lasso_get_relaystate_from_query. * lasso/saml-2.0/logout.c: In lasso_saml20_logout_process_request_msg change handling of relayState do not rely upon parsing by the node object, but extract directly from the query string. * lasso/saml-2.0/profile.c: In lasso_saml20_profile_init_artifact_resolve, add handling of the relayState transmitted to the assertion consumer URL. * lasso/saml-2.0/name_id_management.c: In lasso_name_id_management_process_request_msg change handling of relayState do not rely upon parsing by the node object, but extract directly from the query string. lasso/saml-2.0/login.c | 7 ++++--- lasso/saml-2.0/profile.c | 1 + 2 files changed, 5 insertions(+), 3 deletions(-) commit aad866ab670e56ed02a04dd6fd047b322b3d758d Author: Benjamin Dauvergne Date: Fri Mar 27 15:05:50 2009 +0000 SAML 2.0: simplify redirect binding code path * lasso/saml-2.0/login.c, lasso/saml-2.0/logout.c, lasso/saml-2.0/name_id_management.c: simplify code path associated with generation of the url for the HTTP-Redirect binding using the rencently introduced function lasso_saml20_profile_build_http_redirect. lasso/saml-2.0/login.c | 50 +++++++++---------------------------- lasso/saml-2.0/logout.c | 66 +++---------------------------------------------- 2 files changed, 14 insertions(+), 102 deletions(-) commit 64f96e01dcfc67f96be915574f8ffdd14432d3ef Author: Benjamin Dauvergne Date: Fri Mar 27 15:05:49 2009 +0000 SAML 2.0: remove TODO comment about RelayState * lasso/xml/saml-2.0/samlp2_status_response.c: do it:) lasso/xml/saml-2.0/samlp2_status_response.c | 1 - 1 file changed, 1 deletion(-) commit e43ce11311017a618db45748d5e3c9a28e1f7b68 Author: Benjamin Dauvergne Date: Fri Mar 27 15:05:47 2009 +0000 XML SAML2: Remove unnecessary overloading of build_query in request/respons objects * lasso/xml/saml-2.0/samlp2_assertion_id_request.c, lasso/xml/saml-2.0/samlp2_authn_request.c, lasso/xml/saml-2.0/samlp2_logout_request.c, lasso/xml/saml-2.0/samlp2_logout_response.c, lasso/xml/saml-2.0/samlp2_manage_name_id_request.c, lasso/xml/saml-2.0/samlp2_manage_name_id_response.c, lasso/xml/saml-2.0/samlp2_name_id_mapping_request.c, lasso/xml/saml-2.0/samlp2_name_id_mapping_response.c, lasso/xml/saml-2.0/samlp2_response.c, lasso/xml/saml-2.0/samlp2_subject_query_abstract.c: remove useless overloading of build_query virtual method, revert to implementations in LassoSamlp2RequestAbstract and LassoSamlp2StatusResponse. lasso/xml/saml-2.0/samlp2_assertion_id_request.c | 20 ----------------- lasso/xml/saml-2.0/samlp2_authn_request.c | 18 --------------- lasso/xml/saml-2.0/samlp2_logout_request.c | 18 --------------- lasso/xml/saml-2.0/samlp2_logout_response.c | 26 ---------------------- lasso/xml/saml-2.0/samlp2_manage_name_id_request.c | 18 --------------- .../xml/saml-2.0/samlp2_manage_name_id_response.c | 18 --------------- .../xml/saml-2.0/samlp2_name_id_mapping_request.c | 18 --------------- .../xml/saml-2.0/samlp2_name_id_mapping_response.c | 18 --------------- lasso/xml/saml-2.0/samlp2_response.c | 19 ---------------- lasso/xml/saml-2.0/samlp2_subject_query_abstract.c | 18 --------------- 10 files changed, 191 deletions(-) commit c3b0ca25b8cd2bc7009d47fb7e9c949701808391 Author: Benjamin Dauvergne Date: Fri Mar 27 15:05:45 2009 +0000 XML SAML 2.0: add a build query to request base class * lasso/xml/saml-2.0/samlp2_request_abstract.c: add a build query overloaded function to LassoSamlp2RequestAbstract class, the base class of all saml 2.0 request nodes. lasso/xml/saml-2.0/samlp2_request_abstract.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) commit f55ff8ea5e3f1387e101c1792200cc391f33bcae Author: Benjamin Dauvergne Date: Fri Mar 27 15:05:44 2009 +0000 SAML 2.0: Add helper function to implement the HTTP-Redirect binding * lasso/saml-2.0/profile.c, lasso/saml-2.0/profileprivate.h: - remove_all_signature traverse a tree of LassoNode objects to unset all signature_type field in on nodes supporting signature generation. - lasso_saml20_profile_export_to_query does the job of generateing the url containing the message content and the relaystate, then sign it using lasso_query_sign. - lasso_saml20_profile_build_http_redirect use those two functions and the metadatas to build the signed redirect url. lasso/saml-2.0/profile.c | 150 +++++++++++++++++++++++++++++++++++++++- lasso/saml-2.0/profileprivate.h | 4 ++ 2 files changed, 153 insertions(+), 1 deletion(-) commit 71ca7129a6c0b605e71e53dc58e2280864c86a45 Author: Benjamin Dauvergne Date: Fri Mar 27 15:05:42 2009 +0000 XML: Add const modifiers to lasso_concat_url_query arguments * lasso/xml/private.h, lasso/xml/tools.c: add const modifier to lasso_concat_url_query arguments. lasso/xml/private.h | 2 +- lasso/xml/tools.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit f604d632680c96cbbad0a1c3bf4372149d47d7ae Author: Benjamin Dauvergne Date: Fri Mar 27 15:05:41 2009 +0000 XML: Remove static modifier on lasso_node_build_query * lasso/xml/private.h, lasso/xml/xml.c: remove static modifier to lasso_node_build_query and export it for use in id-ff profiles. lasso/xml/private.h | 2 ++ lasso/xml/xml.c | 18 +++++++++++------- 2 files changed, 13 insertions(+), 7 deletions(-) commit 96594a8edefd223b69392e361c8d943bb5332f2b Author: Benjamin Dauvergne Date: Fri Mar 27 15:05:39 2009 +0000 XML: Tool function to extract relaystate from query * lasso/xml/tools.c, lasso/xml/private.h: new function lasso_get_relaystate_from_query to help in relaystate handling. lasso/xml/private.h | 2 ++ lasso/xml/tools.c | 30 ++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) commit d0d71abe2c88af7c4bdd06af447730d51d719b08 Author: Benjamin Dauvergne Date: Fri Mar 27 15:05:37 2009 +0000 Core: rename lasso_release_xmlchar to lasso_release_xml_string * lasso/id-wsf/wsf_profile.c, lasso/utils.h, lasso/xml/xml.c: rename lasso_release_xmlchar to lasso_release_xml_string. lasso/id-wsf/wsf_profile.c | 10 +++++----- lasso/utils.h | 2 +- lasso/xml/xml.c | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) commit 56160b783dd49b768f34136fa564be9fefef73b2 Author: Benjamin Dauvergne Date: Fri Mar 27 15:05:35 2009 +0000 Core: Fix double instantiation of macro parameters * lasso/utils.h: - (lasso_assign_new_string,lasso_assign_gobject) if source parameter is a function call it could be called two times and have unexpected side effects. Copy the returned value to a temp variable and use it instead. lasso/utils.h | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) commit 7696062fbdb84fe281fcce5d1298ee592e70e113 Author: Benjamin Dauvergne Date: Fri Mar 27 15:05:34 2009 +0000 Core: Fix corner case in deallocation macros * lasso/utils.h: When setting strings using lasso_assing_string or lasso_assign_new_string, verify that new string is different than the target value string before deallocating the target. lasso/utils.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit e59c45e5981d4eec1984c03754d1f15529aa590d Author: Benjamin Dauvergne Date: Fri Mar 27 15:05:33 2009 +0000 Add missing intializations * initialize local variables. lasso/id-ff/provider.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit c9011fb16b6d03228b7bb53df9712dffa64d2b41 Author: Benjamin Dauvergne Date: Fri Mar 27 15:05:31 2009 +0000 Core: replace direct use of xmlSecSoap function by wrapper * lasso/xml/xml.c: In lasso_node_init_from_message_with_format remove direct use of xmlSecSoap* functions because they emit too much warning by lasso reimplementations. lasso/xml/xml.c | 20 ++++---------------- 1 file changed, 4 insertions(+), 16 deletions(-) commit f6f8ffcd6e0c11bdcfdc52a5e7846c0f27ef85df Author: Benjamin Dauvergne Date: Fri Mar 27 15:05:29 2009 +0000 Core: remove use of XPath * lasso/xml/xml.c: in lasso_node_new_from_soap, instead of using XPath use function lasso_xml_get_soap_content. lasso/xml/xml.c | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) commit dd9382d05b5f6a4370af709a5b379a862f56e3d4 Author: Benjamin Dauvergne Date: Fri Mar 27 15:05:28 2009 +0000 Core: fix comment for lasso_node_init_from_message * lasso/xml/xml.c: state the return code type. lasso/xml/xml.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit c252e5d1c3492c0bd3bc3be8a4b54ec165dc3a91 Author: Benjamin Dauvergne Date: Fri Mar 27 15:05:26 2009 +0000 Core: remove lasso_node_decrypt implementation * lasso/xml/xml.c: remove code for lasso_node_decrypt. lasso/xml/xml.c | 148 -------------------------------------------------------- 1 file changed, 148 deletions(-) commit 8fc5cb3f499199581262688ad31268639a529dcc Author: Benjamin Dauvergne Date: Fri Mar 27 15:05:24 2009 +0000 Core: make comment agree with the code * lasso/xml/xml.c: change comment about xsi:type handling, we try to honor every xsi:type. lasso/xml/xml.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit d8aa0d69a0e3aaffac7ddeda672efe95bec91a49 Author: Benjamin Dauvergne Date: Fri Mar 27 15:05:23 2009 +0000 Core: remove commented code * lasso/xml/xml.c: remove commented code to handle a specific lasso extension. lasso/xml/xml.c | 4 ---- 1 file changed, 4 deletions(-) commit 642dcfdfbbf3909c03f9a088eb8e0c461e9dade5 Author: Benjamin Dauvergne Date: Fri Mar 27 15:05:21 2009 +0000 Core: use lasso_xml_parse_memory instead of xmlParseDoc * lasso/id-ff/provider.c: use internal wrapper instead of direct call to libxml for parsing. lasso/id-ff/provider.c | 8 ++++---- lasso/xml/tools.c | 2 +- lasso/xml/xml.c | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) commit 580239d23382b8968060fdd49a19a489817c772a Author: Benjamin Dauvergne Date: Fri Mar 27 15:05:19 2009 +0000 Core: move parse xml wrapper from xml.c to tools.c * lasso/xml/xml.c: remove lasso_xml_parse_memory. * lasso/xml/tools.c: add lasso_xml_parse_memory to wrap xmlParseDocument. * lasso/saml-2.0/name_id_management.c: use lasso_xml_parse_memory lasso/saml-2.0/name_id_management.c | 2 +- lasso/xml/private.h | 2 + lasso/xml/tools.c | 79 +++++++++++++++++++++++++++++++++++++ lasso/xml/xml.c | 77 ------------------------------------ 4 files changed, 82 insertions(+), 78 deletions(-) commit 22feecaffb5307011d0e873a13d80502e9f0acb3 Author: Benjamin Dauvergne Date: Fri Mar 27 15:05:17 2009 +0000 SAML 2.0 NameIDManagement: use new generic methods * lasso/saml-2.0/name_id_management.c: use new generic methods in lasso_name_id_management_init_request, lasso_name_id_management_build_request_msg, lasso_name_id_management_process_request_msg, lasso_name_id_management_validate_request, lasso_name_id_management_build_response_msg, lasso_name_id_management_process_response_msg. Remove useless boilerplate code. * lasso/id-ff/server.c: * lasso/id-ff/serverprivate.h: last user of lasso_server_nameid_decrypt removed, so remove the code. lasso/id-ff/server.c | 40 --- lasso/id-ff/serverprivate.h | 3 - lasso/saml-2.0/name_id_management.c | 504 ++++++------------------------------ 3 files changed, 75 insertions(+), 472 deletions(-) commit 32dc71ec3b7c584323a93696109a3146024cef8d Author: Benjamin Dauvergne Date: Fri Mar 27 15:05:16 2009 +0000 SAML 2.0 Logout: use generic methods * lasso/saml-2.0/logout.c: use new generic methods in lasso_saml20_logout_process_request_msg, and lasso_saml20_logout_process_response_msg. lasso/saml-2.0/logout.c | 105 +++++++++++++----------------------------------- 1 file changed, 29 insertions(+), 76 deletions(-) commit 682bc4f6a800eb372ac6b4b7933af53c71c7f927 Author: Benjamin Dauvergne Date: Fri Mar 27 15:05:14 2009 +0000 SAML 2.0 Login: use generic methods * lasso/saml-2.0/login.c: use new generic profile methods for saml 2.0 in lasso_saml20_login_process_paos_response_msg, lasso_saml20_login_process_authn_response_msg, lasso_saml20_login_process_response_status_and_assertion. lasso/saml-2.0/login.c | 225 +++++++++++++++++++------------------------------ 1 file changed, 85 insertions(+), 140 deletions(-) commit 6ca45dacb1345b61d63f4305c81ae7af93825bfa Author: Benjamin Dauvergne Date: Fri Mar 27 15:05:13 2009 +0000 SAML 2.0: add name id include to login.c * lasso/saml-2.0/login.c: add include saml2_name_id.h lasso/saml-2.0/login.c | 1 + 1 file changed, 1 insertion(+) commit 7e9c7112c5765bd4ab22218d6836fff9ef3ce1e1 Author: Benjamin Dauvergne Date: Fri Mar 27 15:05:11 2009 +0000 XML SAML 2.0: add a decrypt function to Saml2EncryptedElement * lasso/xml/saml-2.0/saml2_encrypted_element.c: using new function lasso_node_decrypt_xmlnode implement the new method, int lasso_saml2_encrypted_element_decrypt( LassoSaml2EncryptedElement* encrypted_element, xmlSecKey *encryption_private_key, LassoNode **decrypted_node). This function is currently not exported by bindings because of the last ouput argument which is not supported by the binding generator. lasso/xml/saml-2.0/saml2_encrypted_element.c | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) commit d81f9864515d28c5e34c17bb2b2089b842d84a1f Author: Benjamin Dauvergne Date: Fri Mar 27 15:05:10 2009 +0000 SAML 2.0: replace lasso_node_decrypt by lasso_node_decrypt_xmlnode * lasso/xml/private.h: * lasso/xml/tools.c: replace implementation of lasso_node_decrypt by a new one called lasso_node_decrypt_xmlnode, and use it where old one was used. lasso/xml/private.h | 4 +- lasso/xml/tools.c | 167 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 169 insertions(+), 2 deletions(-) commit 5f5ed7fa6a9aa4ffc68233c3f404f39d9fd89bed Author: Benjamin Dauvergne Date: Fri Mar 27 15:05:08 2009 +0000 SAML 2.0: reduce code in lasso_assertion_query_process_request * lasso/saml-2.0/assertion_query.c: use new code in SAML 2.0 profile.c to parse requests and decrypt nameid, chains calls so that error are kept but all actions are accomplished anyway (if first call fails, keep the error but continue the processing, then at end return the first returned error). lasso/saml-2.0/assertion_query.c | 70 +++++++++++----------------------------- 1 file changed, 19 insertions(+), 51 deletions(-) commit 5d93009e0be759a527e9b3b4c0b6a166d2bc635b Author: Benjamin Dauvergne Date: Fri Mar 27 15:05:07 2009 +0000 SAML 2.0: add internal generic implementation * lasso/saml-2.0/profile.c: * lasso/saml-2.0/profileprivate.h: the current effort is to simplify implementation code in saml-2.0 and much of the other frameworks. Those new methods: lasso_saml20_init_request lasso_saml20_profile_process_name_identifier_decryption lasso_saml20_profile_process_soap_request lasso_saml20_profile_process_soap_response lasso_saml20_profile_process_any_request lasso_saml20_profile_process_any_response lasso_saml20_profile_setup_request_signing lasso_saml20_profile_build_request_msg lasso_saml20_profile_build_response lasso_saml20_profile_init_response should help reduce code in login.c, logout.c, name_id_management.c and assertion_query.c. They should also permit to make all profiles at the same level of binding support (GET,REDIRECT,POST,ARTIFACT_GET,ARTIFACT_POST). Those function centralize error code handling, initialization of commong class (LassoSamlp2StatusResponse and LassoSamlp2RequestAbstract) and also the handling of NameID decryption. lasso/saml-2.0/profile.c | 889 ++++++++++++++++++++++++++++++++++++++-- lasso/saml-2.0/profileprivate.h | 20 + 2 files changed, 881 insertions(+), 28 deletions(-) commit a57841ce69d85d6012f3faea349b46be0d06592f Author: Benjamin Dauvergne Date: Fri Mar 27 15:05:06 2009 +0000 Core: add new internal macro lasso_extract_node_or_fail * lasso/utils.h: this new macro try to extract a field from a structre (or any left-hand-side value), try to typecheck it using 'LASSO_IS_XXX', if succesfull, the value is assigned to the variable given as first argument or we jump to the 'cleanup' goto label, setting the 4th argument as the current error code (value of variable 'rc'). lasso/utils.h | 9 +++++++++ 1 file changed, 9 insertions(+) commit dfb0b91ed6d3c85aa7764de75d2e5298ed93ba22 Author: Benjamin Dauvergne Date: Fri Mar 27 15:05:04 2009 +0000 ID-WSF 2.0: make it work with --enabe-debugging * lasso/id-wsf-2.0/data_service.c: * lasso/id-wsf-2.0/discovery.c: * lasso/id-wsf-2.0/profile.c: * lasso/id-wsf/data_service.c: * lasso/id-wsf/discovery.c: * lasso/id-wsf/wsf_profile.c: when --enable-debugging is activated much more type checking is done by internal macros, and code do not pass compile anymore. * bindings/python/tests/idwsf2_tests.py: nameIdentifier packing in SOAP ID-WSF calls headers is no longer supported, do not test it. bindings/python/tests/idwsf2_tests.py | 6 --- lasso/id-wsf-2.0/data_service.c | 8 ++-- lasso/id-wsf-2.0/discovery.c | 7 +-- lasso/id-wsf-2.0/profile.c | 82 ++++++++--------------------------- lasso/id-wsf/data_service.c | 4 +- lasso/id-wsf/discovery.c | 18 ++++---- lasso/id-wsf/wsf_profile.c | 2 +- 7 files changed, 38 insertions(+), 89 deletions(-) commit 141c4a382ea5a893f09ce3675554c1ca166f2843 Author: Benjamin Dauvergne Date: Fri Mar 27 15:05:02 2009 +0000 Core: add argument checking to lasso_server_get_provider * lasso/id-ff/server.c: In lasso_server_get_provider, return NULL if provider server is not one, provider is null or 0-length. lasso/id-ff/server.c | 3 +++ 1 file changed, 3 insertions(+) commit a475d9eb000063bc7d57bf9853118c371a4c5871 Author: Benjamin Dauvergne Date: Fri Mar 27 15:05:00 2009 +0000 Core: add new internal API lasso_provider_verify_query_signature * lasso/id-ff/provider.c: try to keep some homgeneity between lasso_verify_signature and lasso_verify_query_signature functions, by having mirror methods inside the LassoProvider class. this new methods comes with complete documentation. * lasso/xml/tools.c: add a xmlDoc argument to lasso_verify_signature, in order to reuse an already built message context, and possible problems with interned string in parsed xml documents. lasso/id-ff/provider.c | 26 ++++++++++++++++++++++++++ lasso/id-ff/providerprivate.h | 1 + lasso/xml/private.h | 2 +- lasso/xml/tools.c | 21 +++++++++++++-------- 4 files changed, 41 insertions(+), 9 deletions(-) commit 3b2f3fbced62690bcabe817769a6544f03104487 Author: Benjamin Dauvergne Date: Fri Mar 27 15:04:58 2009 +0000 Core: add xmlDoc parameter to lasso_provider_verify_saml_signature * lasso/id-ff/provider.c: add an xmlDoc parameter to lasso_provider_verify_saml_signature, reflecting change in lasso_verify_signature. fix memory leaks of an xmlSecKeysMngr. complete arguments checking. * lasso/id-ff/login.c: update use of lasso_provider_verify_signature in LassoLogin lasso/id-ff/login.c | 2 +- lasso/id-ff/provider.c | 13 ++++++++----- lasso/id-ff/providerprivate.h | 2 +- 3 files changed, 10 insertions(+), 7 deletions(-) commit 7b4cd86ae37e0d0262e3c9f50c8edca141dc84fb Author: Benjamin Dauvergne Date: Fri Mar 27 15:04:57 2009 +0000 Core: add a terminating value to enum LassoHttpMethod * lasso/id-ff/provider.h: add LASSO_HTTP_METHOD_LAST to enum LassoHttpMethod. lasso/id-ff/provider.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 5e125fda5ea7ce132e88611f8bbcfa9297489e18 Author: Benjamin Dauvergne Date: Fri Mar 27 15:04:55 2009 +0000 ID-FF 1.2: rework lasso_login_process_status_and_assertion * lasso/id-ff/login.c: reword lasso_login_process_status_and_assertion, remove wrong NameID decryption code (it cannot work), adapt to new signature of lasso_provider_verify_saml_signature, lasso/id-ff/login.c | 58 +++++++++-------------------------------------------- 1 file changed, 10 insertions(+), 48 deletions(-) commit 9bd1c6a446d0ab85bc8b9ed0311d10afcd84ac95 Author: Benjamin Dauvergne Date: Fri Mar 27 15:04:53 2009 +0000 Core: new init method with format limit and xmlDoc output argument * lasso/xml/private.h: * lasso/xml/xml.c: lasso_node_init_from_message_with_format permit to initialize a node and to keep the corresponding xml document, in order for example to validate a signature. * lasso/xml/tools.c: lasso_xml_parse_message is able to parse a message of any type, or of a given type. If a message of another than the one specified is found, the call fails, and a LASSO_MESSAGE_FORMAT_ERROR is returned. lasso/xml/private.h | 1 + lasso/xml/tools.c | 95 ++++++++++++++++++++++++++++++ lasso/xml/xml.c | 163 +++++++++++++++++++++++++++++++++++----------------- 3 files changed, 205 insertions(+), 54 deletions(-) commit 6109e1b71b9523adb3d869b910b61cf93441ffea Author: Benjamin Dauvergne Date: Fri Mar 27 15:04:51 2009 +0000 Core: add function to extract SOAP message content * lasso/xml/tools.c: add lasso_xml_is_soap, to verify that a message is SOAP. add lasso_xml_get_soap_content, to retrieve the first child of the SOAP body, whatever the SOAP content version. lasso/xml/private.h | 4 ++++ lasso/xml/tools.c | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) commit 12744e44fe11810dcb1d0d83bbd6029b23111a57 Author: Benjamin Dauvergne Date: Fri Mar 27 15:04:49 2009 +0000 SAML 2.0: API for Saml2EncryptedElement decrypt * lasso/xml/xml_enc.h: remove old functions * lasso/xml/private.h: remove lasso_node_(de/en)crypt from public headers API, they were not exported anyway. move them to internal header. * lasso/xml/saml-2.0/saml2_encrypted_element.{c,h}: add a new decrypt function to convert a EncryptedElement to the contained encrypted node objects. * bindings/overrrides.xml: do not export the new method, wait for implementation of output arguments. * lasso/id-ff/server.c: remove lasso_decrypt_nameid from lasso/id-ff/server.c bindings/overrides.xml | 1 + lasso/xml/private.h | 6 +++++ lasso/xml/saml-2.0/saml2_encrypted_element.c | 36 ++++++++++++++++++++++++++++ lasso/xml/saml-2.0/saml2_encrypted_element.h | 3 +-- lasso/xml/xml_enc.h | 8 ------- 5 files changed, 44 insertions(+), 10 deletions(-) commit 3705a0f86d6588ffb48285892d19c6bb89b62c68 Author: Benjamin Dauvergne Date: Fri Mar 27 15:04:48 2009 +0000 Bindings php5: add support for xmlNode arguments * bindings/php5/php_code.py: * bindings/php5/wrapper_source.py: complete error reporting about on documentation treatment. treat xmlNode* arguments (convert string to xmlNode, give as argument, then frees it). bindings/php5/php_code.py | 2 +- bindings/php5/wrapper_source.py | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) commit 46643326fd53a265d47947280b6799946af7c9d1 Author: Benjamin Dauvergne Date: Fri Mar 27 15:04:46 2009 +0000 Bindings: fix documentation parsing * bindings/bindings.py: fix regex to match documentation (remove condition terminating on '**/') print error messages to stderr. * bindings/java/lang.py: remove commented debugging code bindings/bindings.py | 4 ++-- bindings/java/lang.py | 3 --- 2 files changed, 2 insertions(+), 5 deletions(-) commit 91e118d69854bdc8fce654a3b3a911d143be298b Author: Benjamin Dauvergne Date: Fri Mar 27 15:04:45 2009 +0000 Docs: add declaration of missing LassoNode public methods * docs/reference/lasso-sections.txt: add missing lasso_node_*() functions. docs/reference/lasso-sections.txt | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) commit 01c5740a7b952f8b867289800dcdee287a477f84 Author: Benjamin Dauvergne Date: Fri Mar 27 15:04:43 2009 +0000 Docs: fix doc on Attribute related classes * xml/saml-2.0/saml2_attribute_value.c: * xml/saml-2.0/samlp2_extensions.c: * xml/saml_attribute_value.c: add documentation about the special way of setting those classes content, that is using lasso_node_set_original_xmlnode. * docs/reference/lasso-sections.txt: * docs/reference/lasso.sgml: add missing declarations for documentation of LassoSamlAttribute, LassoSamlAttributeValue, LassoSamlAttributeDesignator, LassoSamlStatement and LassoSaml2AttributeValue. docs/reference/lasso-sections.txt | 30 ++++++++++++++++++++++++++++++ docs/reference/lasso.sgml | 10 ++++++++++ lasso/xml/saml-2.0/saml2_attribute_value.c | 18 ++++++++++++++++-- lasso/xml/saml-2.0/samlp2_extensions.c | 5 +++++ lasso/xml/saml_attribute_value.c | 21 +++++++++++++++++++-- 5 files changed, 80 insertions(+), 4 deletions(-) commit 7f09fe60de4f66a35ef751d8dd902066e196860b Author: Benjamin Dauvergne Date: Fri Mar 27 15:04:41 2009 +0000 Fix bug #94: permit any content for AttributeValue * lasso/xml/private.h: * lasso/xml/xml.h * lassoi/xml/xml.c: add an implementation helper for the AttributeValue objects implementation of get_xmlNode. make lasso_node_set_original_xmlnode public API. * lasso/xml/saml-2.0/samlp2_extensions.c: * lasso/xml/saml-2.0/saml2_attribute_value.c: * lasso/xml/saml_attribute_value.c: implement get_xmlNode for the AttributeValue and Extensions objects. If the any field is empty, use the original_xmlnode value. In order to support free-style content, you must use the method lasso_node_set_original_xmlnode, properties and children are extracted from the given node and added to the node created by the generic get_xmlNode virtual method. lasso/xml/private.h | 2 ++ lasso/xml/saml-2.0/saml2_attribute_value.c | 21 +++++++++++--- lasso/xml/saml-2.0/samlp2_extensions.c | 15 +++++++++- lasso/xml/saml_attribute_value.c | 21 +++++++++++--- lasso/xml/xml.c | 44 ++++++++++++++++++++++++++---- lasso/xml/xml.h | 4 +++ 6 files changed, 92 insertions(+), 15 deletions(-) commit a017ddc81ec438462924dd5ad552c83b7b8d7849 Author: Benjamin Dauvergne Date: Fri Mar 27 15:04:40 2009 +0000 XML Core: add new snippet type SNIPPET_KEEP_XMLNODE * private.h: add the new constant to the enum type * xml.c: fix lasso_node_traversal, add support for the new contanst in lasso_node_imp_init_from_xmlNode. lasso/xml/private.h | 3 ++- lasso/xml/xml.c | 36 +++++++++++++++++++++++------------- 2 files changed, 25 insertions(+), 14 deletions(-) commit 4104a9e12f8f5db4d1ca519726a81c3efae70591 Author: Benjamin Dauvergne Date: Fri Mar 27 15:04:38 2009 +0000 Core: add error codes, fix error strings * lasso/errors.c, lasso/errors.h: remove useless error code LASSO_SERVER_ERROR_INVALID_XML, fix string for LASSO_PROFILE_ERROR_INVALID_ISSUER, add errors codes LASSO_PROFILE_ERROR_CANNOT_VERIFY_SIGNATURE, LASSO_PROFILE_ERROR_CANNOT_FIND_A_PROVIDER and LASSO_PROVIDER_ERROR_MISSING_PUBLIC_KEY. lasso/errors.c | 14 +++++++++++--- lasso/errors.h | 10 ++++++++-- 2 files changed, 19 insertions(+), 5 deletions(-) commit dcea6b26a3221be92559829606f4d089cee6fa77 Author: Benjamin Dauvergne Date: Fri Mar 27 15:04:36 2009 +0000 Makefile: missing dependencies for built sources * lasso/Makefile.am: remove .PHONY declaration on built sources and set appropriate dependencies. * lasso/extract_types.py: with new dependencies well defined in Makefile no need to verify change in the content of the file, just overwrite it. lasso/Makefile.am | 8 +++----- lasso/extract_types.py | 3 +-- 2 files changed, 4 insertions(+), 7 deletions(-) commit d79b3e5b3a86ff2dd3163a0fc9d80c2461b23351 Author: Benjamin Dauvergne Date: Fri Mar 27 15:04:35 2009 +0000 Core: Fix argument checking in init_from_xml * lasso/xml/xml.c: In lasso_node_impl_init_from_xml if xmlnode is null, return an error but if no node_data specification is present, do not fail but print a warning. It is not an error for a class to not have a node_data private field. add a comment to fix return code later. lasso/xml/xml.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) commit d4e218dfebe021d37acdd7af4a58e219a39ead90 Author: Benjamin Dauvergne Date: Fri Mar 27 15:04:33 2009 +0000 Core: handle g_io_channel creation failure * lasso/xml/tools.c: in lasso_load_certs_from_pem_certs_chain_file if g_io_channel_new_file fails return NULL and print a warning. If path is NULL or 0-length also returns NULL. lasso/xml/tools.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) commit b09ef2e015287adfc16c9f71f0f7c5b3aba3502c Author: Benjamin Dauvergne Date: Fri Mar 27 15:04:26 2009 +0000 Core: do not mix public and private headers * lots of files: explicitely load the internal header xml/private.h where needed. lasso/id-ff/defederation.c | 1 + lasso/id-ff/federation.c | 1 + lasso/id-ff/identity.c | 1 + lasso/id-ff/lecp.c | 1 + lasso/id-ff/login.c | 1 + lasso/id-ff/logout.c | 1 + lasso/id-ff/name_identifier_mapping.c | 1 + lasso/id-ff/name_registration.c | 1 + lasso/id-ff/profile.c | 1 + lasso/id-ff/provider.c | 1 + lasso/id-ff/server.c | 1 + lasso/id-ff/session.c | 1 + lasso/id-wsf-2.0/data_service.c | 1 + lasso/id-wsf-2.0/discovery.c | 1 + lasso/id-wsf-2.0/profile.c | 1 + lasso/id-wsf/authentication.c | 1 + lasso/id-wsf/data_service.c | 1 + lasso/id-wsf/discovery.c | 1 + lasso/id-wsf/interaction_profile_service.c | 1 + lasso/id-wsf/personal_profile_service.c | 1 + lasso/id-wsf/utils.c | 1 + lasso/id-wsf/wsf_profile.c | 1 + lasso/lasso.c | 1 + lasso/saml-2.0/assertion_query.c | 1 + lasso/saml-2.0/ecp.c | 1 + lasso/saml-2.0/federation.c | 1 + lasso/saml-2.0/login.c | 1 + lasso/saml-2.0/logout.c | 1 + lasso/saml-2.0/name_id_management.c | 1 + lasso/saml-2.0/profile.c | 1 + lasso/saml-2.0/provider.c | 1 + lasso/saml-2.0/server.c | 1 + lasso/xml/disco_authenticate_requester.c | 1 + lasso/xml/disco_authenticate_session_context.c | 1 + lasso/xml/disco_authorize_requester.c | 1 + lasso/xml/disco_credentials.c | 1 + lasso/xml/disco_description.c | 1 + lasso/xml/disco_encrypt_resource_id.c | 1 + lasso/xml/disco_encrypted_resource_id.c | 1 + lasso/xml/disco_generate_bearer_token.c | 1 + lasso/xml/disco_insert_entry.c | 1 + lasso/xml/disco_modify.c | 1 + lasso/xml/disco_modify_response.c | 1 + lasso/xml/disco_options.c | 1 + lasso/xml/disco_query.c | 1 + lasso/xml/disco_query_response.c | 1 + lasso/xml/disco_remove_entry.c | 1 + lasso/xml/disco_requested_service_type.c | 1 + lasso/xml/disco_resource_id.c | 1 + lasso/xml/disco_resource_offering.c | 1 + lasso/xml/disco_send_single_logout.c | 1 + lasso/xml/disco_service_instance.c | 1 + lasso/xml/ds_key_info.c | 1 + lasso/xml/ds_key_value.c | 1 + lasso/xml/ds_rsa_key_value.c | 1 + lasso/xml/dst_data.c | 1 + lasso/xml/dst_modification.c | 1 + lasso/xml/dst_modify.c | 1 + lasso/xml/dst_modify_response.c | 1 + lasso/xml/dst_new_data.c | 1 + lasso/xml/dst_query.c | 1 + lasso/xml/dst_query_item.c | 1 + lasso/xml/dst_query_response.c | 1 + lasso/xml/id-wsf-2.0/disco_abstract.c | 1 + lasso/xml/id-wsf-2.0/disco_endpoint_context.c | 1 + lasso/xml/id-wsf-2.0/disco_keys.c | 1 + lasso/xml/id-wsf-2.0/disco_options.c | 1 + lasso/xml/id-wsf-2.0/disco_provider_id.c | 1 + lasso/xml/id-wsf-2.0/disco_query.c | 1 + lasso/xml/id-wsf-2.0/disco_query_response.c | 1 + lasso/xml/id-wsf-2.0/disco_requested_service.c | 1 + lasso/xml/id-wsf-2.0/disco_security_context.c | 1 + lasso/xml/id-wsf-2.0/disco_service_context.c | 1 + lasso/xml/id-wsf-2.0/disco_service_type.c | 1 + lasso/xml/id-wsf-2.0/disco_svc_md_association_add.c | 1 + lasso/xml/id-wsf-2.0/disco_svc_md_association_add_response.c | 1 + lasso/xml/id-wsf-2.0/disco_svc_md_association_delete.c | 1 + lasso/xml/id-wsf-2.0/disco_svc_md_association_delete_response.c | 1 + lasso/xml/id-wsf-2.0/disco_svc_md_association_query.c | 1 + lasso/xml/id-wsf-2.0/disco_svc_md_association_query_response.c | 1 + lasso/xml/id-wsf-2.0/disco_svc_md_delete.c | 1 + lasso/xml/id-wsf-2.0/disco_svc_md_delete_response.c | 1 + lasso/xml/id-wsf-2.0/disco_svc_md_query.c | 1 + lasso/xml/id-wsf-2.0/disco_svc_md_query_response.c | 1 + lasso/xml/id-wsf-2.0/disco_svc_md_register.c | 1 + lasso/xml/id-wsf-2.0/disco_svc_md_register_response.c | 1 + lasso/xml/id-wsf-2.0/disco_svc_md_replace.c | 1 + lasso/xml/id-wsf-2.0/disco_svc_md_replace_response.c | 1 + lasso/xml/id-wsf-2.0/disco_svc_metadata.c | 1 + lasso/xml/id-wsf-2.0/dst_data_response_base.c | 1 + lasso/xml/id-wsf-2.0/dst_delete_item_base.c | 1 + lasso/xml/id-wsf-2.0/dst_delete_response.c | 1 + lasso/xml/id-wsf-2.0/dst_request.c | 1 + lasso/xml/id-wsf-2.0/dst_result_query_base.c | 1 + lasso/xml/id-wsf-2.0/dst_test_item_base.c | 1 + lasso/xml/id-wsf-2.0/dstref_app_data.c | 1 + lasso/xml/id-wsf-2.0/dstref_create.c | 1 + lasso/xml/id-wsf-2.0/dstref_create_item.c | 1 + lasso/xml/id-wsf-2.0/dstref_create_response.c | 1 + lasso/xml/id-wsf-2.0/dstref_data.c | 1 + lasso/xml/id-wsf-2.0/dstref_data_response.c | 1 + lasso/xml/id-wsf-2.0/dstref_delete.c | 1 + lasso/xml/id-wsf-2.0/dstref_delete_item.c | 1 + lasso/xml/id-wsf-2.0/dstref_delete_response.c | 1 + lasso/xml/id-wsf-2.0/dstref_item_data.c | 1 + lasso/xml/id-wsf-2.0/dstref_modify.c | 1 + lasso/xml/id-wsf-2.0/dstref_modify_item.c | 1 + lasso/xml/id-wsf-2.0/dstref_modify_response.c | 1 + lasso/xml/id-wsf-2.0/dstref_query.c | 1 + lasso/xml/id-wsf-2.0/dstref_query_item.c | 1 + lasso/xml/id-wsf-2.0/dstref_query_response.c | 1 + lasso/xml/id-wsf-2.0/dstref_result_query.c | 1 + lasso/xml/id-wsf-2.0/dstref_test_item.c | 1 + lasso/xml/id-wsf-2.0/ims_identity_mapping_request.c | 1 + lasso/xml/id-wsf-2.0/ims_identity_mapping_response.c | 1 + lasso/xml/id-wsf-2.0/ims_mapping_input.c | 1 + lasso/xml/id-wsf-2.0/ims_mapping_output.c | 1 + lasso/xml/id-wsf-2.0/is_help.c | 1 + lasso/xml/id-wsf-2.0/is_inquiry.c | 1 + lasso/xml/id-wsf-2.0/is_inquiry_element.c | 1 + lasso/xml/id-wsf-2.0/is_interaction_request.c | 1 + lasso/xml/id-wsf-2.0/is_interaction_response.c | 1 + lasso/xml/id-wsf-2.0/is_interaction_statement.c | 1 + lasso/xml/id-wsf-2.0/is_item.c | 1 + lasso/xml/id-wsf-2.0/is_parameter.c | 1 + lasso/xml/id-wsf-2.0/is_select.c | 1 + lasso/xml/id-wsf-2.0/is_text.c | 1 + lasso/xml/id-wsf-2.0/ps_add_collection_request.c | 1 + lasso/xml/id-wsf-2.0/ps_add_collection_response.c | 1 + lasso/xml/id-wsf-2.0/ps_add_entity_request.c | 1 + lasso/xml/id-wsf-2.0/ps_add_entity_response.c | 1 + lasso/xml/id-wsf-2.0/ps_add_known_entity_request.c | 1 + lasso/xml/id-wsf-2.0/ps_add_known_entity_response.c | 1 + lasso/xml/id-wsf-2.0/ps_add_to_collection_request.c | 1 + lasso/xml/id-wsf-2.0/ps_get_object_info_request.c | 1 + lasso/xml/id-wsf-2.0/ps_get_object_info_response.c | 1 + lasso/xml/id-wsf-2.0/ps_item_data.c | 1 + lasso/xml/id-wsf-2.0/ps_list_members_request.c | 1 + lasso/xml/id-wsf-2.0/ps_list_members_response.c | 1 + lasso/xml/id-wsf-2.0/ps_notification.c | 1 + lasso/xml/id-wsf-2.0/ps_notify.c | 1 + lasso/xml/id-wsf-2.0/ps_object.c | 1 + lasso/xml/id-wsf-2.0/ps_query_objects_request.c | 1 + lasso/xml/id-wsf-2.0/ps_query_objects_response.c | 1 + lasso/xml/id-wsf-2.0/ps_remove_collection_request.c | 1 + lasso/xml/id-wsf-2.0/ps_remove_entity_request.c | 1 + lasso/xml/id-wsf-2.0/ps_remove_from_collection_request.c | 1 + lasso/xml/id-wsf-2.0/ps_request_abstract.c | 1 + lasso/xml/id-wsf-2.0/ps_resolve_identifier_request.c | 1 + lasso/xml/id-wsf-2.0/ps_resolve_identifier_response.c | 1 + lasso/xml/id-wsf-2.0/ps_resolve_input.c | 1 + lasso/xml/id-wsf-2.0/ps_response_abstract.c | 1 + lasso/xml/id-wsf-2.0/ps_set_object_info_request.c | 1 + lasso/xml/id-wsf-2.0/ps_test_membership_request.c | 1 + lasso/xml/id-wsf-2.0/ps_test_membership_response.c | 1 + lasso/xml/id-wsf-2.0/sb2_consent.c | 1 + lasso/xml/id-wsf-2.0/sb2_credentials_context.c | 1 + lasso/xml/id-wsf-2.0/sb2_endpoint_update.c | 1 + lasso/xml/id-wsf-2.0/sb2_redirect_request.c | 1 + lasso/xml/id-wsf-2.0/sb2_sender.c | 1 + lasso/xml/id-wsf-2.0/sb2_target_identity.c | 1 + lasso/xml/id-wsf-2.0/sb2_timeout.c | 1 + lasso/xml/id-wsf-2.0/sb2_usage_directive.c | 1 + lasso/xml/id-wsf-2.0/sb2_user_interaction_header.c | 1 + lasso/xml/id-wsf-2.0/sbf_framework.c | 1 + lasso/xml/id-wsf-2.0/sec_token.c | 1 + lasso/xml/id-wsf-2.0/sec_token_policy.c | 1 + lasso/xml/id-wsf-2.0/sec_transited_provider_path.c | 1 + lasso/xml/id-wsf-2.0/subs_notification.c | 1 + lasso/xml/id-wsf-2.0/subs_notify_response.c | 1 + lasso/xml/id-wsf-2.0/subs_ref_item.c | 1 + lasso/xml/id-wsf-2.0/subs_subscription.c | 1 + lasso/xml/id-wsf-2.0/subsref_app_data.c | 1 + lasso/xml/id-wsf-2.0/subsref_create.c | 1 + lasso/xml/id-wsf-2.0/subsref_create_item.c | 1 + lasso/xml/id-wsf-2.0/subsref_create_response.c | 1 + lasso/xml/id-wsf-2.0/subsref_data.c | 1 + lasso/xml/id-wsf-2.0/subsref_data_response.c | 1 + lasso/xml/id-wsf-2.0/subsref_delete.c | 1 + lasso/xml/id-wsf-2.0/subsref_delete_item.c | 1 + lasso/xml/id-wsf-2.0/subsref_delete_response.c | 1 + lasso/xml/id-wsf-2.0/subsref_item_data.c | 1 + lasso/xml/id-wsf-2.0/subsref_modify.c | 1 + lasso/xml/id-wsf-2.0/subsref_modify_item.c | 1 + lasso/xml/id-wsf-2.0/subsref_modify_response.c | 1 + lasso/xml/id-wsf-2.0/subsref_notification.c | 1 + lasso/xml/id-wsf-2.0/subsref_notify.c | 1 + lasso/xml/id-wsf-2.0/subsref_notify_response.c | 1 + lasso/xml/id-wsf-2.0/subsref_query.c | 1 + lasso/xml/id-wsf-2.0/subsref_query_item.c | 1 + lasso/xml/id-wsf-2.0/subsref_query_response.c | 1 + lasso/xml/id-wsf-2.0/subsref_result_query.c | 1 + lasso/xml/id-wsf-2.0/subsref_subscription.c | 1 + lasso/xml/id-wsf-2.0/subsref_test_item.c | 1 + lasso/xml/id-wsf-2.0/util_empty.c | 1 + lasso/xml/id-wsf-2.0/util_extension.c | 1 + lasso/xml/id-wsf-2.0/util_response.c | 1 + lasso/xml/id-wsf-2.0/util_status.c | 1 + lasso/xml/is_help.c | 1 + lasso/xml/is_inquiry.c | 1 + lasso/xml/is_inquiry_element.c | 1 + lasso/xml/is_interaction_request.c | 1 + lasso/xml/is_interaction_response.c | 1 + lasso/xml/is_interaction_statement.c | 1 + lasso/xml/is_item.c | 1 + lasso/xml/is_parameter.c | 1 + lasso/xml/is_redirect_request.c | 1 + lasso/xml/is_select.c | 1 + lasso/xml/is_text.c | 1 + lasso/xml/is_user_interaction.c | 1 + lasso/xml/lib_assertion.c | 1 + lasso/xml/lib_authentication_statement.c | 1 + lasso/xml/lib_authn_context.c | 1 + lasso/xml/lib_authn_request.c | 1 + lasso/xml/lib_authn_request_envelope.c | 1 + lasso/xml/lib_authn_response.c | 1 + lasso/xml/lib_authn_response_envelope.c | 1 + lasso/xml/lib_federation_termination_notification.c | 1 + lasso/xml/lib_idp_entries.c | 1 + lasso/xml/lib_idp_entry.c | 1 + lasso/xml/lib_idp_list.c | 1 + lasso/xml/lib_logout_request.c | 1 + lasso/xml/lib_logout_response.c | 1 + lasso/xml/lib_name_identifier_mapping_request.c | 1 + lasso/xml/lib_name_identifier_mapping_response.c | 1 + lasso/xml/lib_register_name_identifier_request.c | 1 + lasso/xml/lib_register_name_identifier_response.c | 1 + lasso/xml/lib_request_authn_context.c | 1 + lasso/xml/lib_scoping.c | 1 + lasso/xml/lib_status_response.c | 1 + lasso/xml/lib_subject.c | 1 + lasso/xml/misc_text_node.c | 1 + lasso/xml/private.h | 3 +++ lasso/xml/sa_credentials.c | 1 + lasso/xml/sa_parameter.c | 1 + lasso/xml/sa_password_transforms.c | 1 + lasso/xml/sa_sasl_request.c | 1 + lasso/xml/sa_sasl_response.c | 1 + lasso/xml/sa_transform.c | 1 + lasso/xml/saml-2.0/saml2_action.c | 1 + lasso/xml/saml-2.0/saml2_advice.c | 1 + lasso/xml/saml-2.0/saml2_assertion.c | 1 + lasso/xml/saml-2.0/saml2_attribute.c | 1 + lasso/xml/saml-2.0/saml2_attribute_statement.c | 1 + lasso/xml/saml-2.0/saml2_attribute_value.c | 1 + lasso/xml/saml-2.0/saml2_audience_restriction.c | 1 + lasso/xml/saml-2.0/saml2_authn_context.c | 1 + lasso/xml/saml-2.0/saml2_authn_statement.c | 1 + lasso/xml/saml-2.0/saml2_authz_decision_statement.c | 1 + lasso/xml/saml-2.0/saml2_base_idabstract.c | 1 + lasso/xml/saml-2.0/saml2_condition_abstract.c | 1 + lasso/xml/saml-2.0/saml2_conditions.c | 1 + lasso/xml/saml-2.0/saml2_encrypted_element.c | 1 + lasso/xml/saml-2.0/saml2_evidence.c | 1 + lasso/xml/saml-2.0/saml2_key_info_confirmation_data.c | 1 + lasso/xml/saml-2.0/saml2_name_id.c | 1 + lasso/xml/saml-2.0/saml2_one_time_use.c | 1 + lasso/xml/saml-2.0/saml2_proxy_restriction.c | 1 + lasso/xml/saml-2.0/saml2_statement_abstract.c | 1 + lasso/xml/saml-2.0/saml2_subject.c | 1 + lasso/xml/saml-2.0/saml2_subject_confirmation.c | 1 + lasso/xml/saml-2.0/saml2_subject_confirmation_data.c | 1 + lasso/xml/saml-2.0/saml2_subject_locality.c | 1 + lasso/xml/saml-2.0/samlp2_artifact_resolve.c | 1 + lasso/xml/saml-2.0/samlp2_artifact_response.c | 1 + lasso/xml/saml-2.0/samlp2_assertion_id_request.c | 1 + lasso/xml/saml-2.0/samlp2_attribute_query.c | 1 + lasso/xml/saml-2.0/samlp2_authn_query.c | 1 + lasso/xml/saml-2.0/samlp2_authn_request.c | 1 + lasso/xml/saml-2.0/samlp2_authz_decision_query.c | 1 + lasso/xml/saml-2.0/samlp2_extensions.c | 1 + lasso/xml/saml-2.0/samlp2_idp_entry.c | 1 + lasso/xml/saml-2.0/samlp2_idp_list.c | 1 + lasso/xml/saml-2.0/samlp2_logout_request.c | 1 + lasso/xml/saml-2.0/samlp2_logout_response.c | 1 + lasso/xml/saml-2.0/samlp2_manage_name_id_request.c | 1 + lasso/xml/saml-2.0/samlp2_manage_name_id_response.c | 1 + lasso/xml/saml-2.0/samlp2_name_id_mapping_request.c | 1 + lasso/xml/saml-2.0/samlp2_name_id_mapping_response.c | 1 + lasso/xml/saml-2.0/samlp2_name_id_policy.c | 1 + lasso/xml/saml-2.0/samlp2_request_abstract.c | 1 + lasso/xml/saml-2.0/samlp2_requested_authn_context.c | 1 + lasso/xml/saml-2.0/samlp2_response.c | 1 + lasso/xml/saml-2.0/samlp2_scoping.c | 1 + lasso/xml/saml-2.0/samlp2_status.c | 1 + lasso/xml/saml-2.0/samlp2_status_code.c | 1 + lasso/xml/saml-2.0/samlp2_status_detail.c | 1 + lasso/xml/saml-2.0/samlp2_status_response.c | 1 + lasso/xml/saml-2.0/samlp2_subject_query_abstract.c | 1 + lasso/xml/saml-2.0/samlp2_terminate.c | 1 + lasso/xml/saml_advice.c | 1 + lasso/xml/saml_assertion.c | 1 + lasso/xml/saml_attribute.c | 1 + lasso/xml/saml_attribute_designator.c | 1 + lasso/xml/saml_attribute_statement.c | 1 + lasso/xml/saml_attribute_value.c | 1 + lasso/xml/saml_audience_restriction_condition.c | 1 + lasso/xml/saml_authentication_statement.c | 1 + lasso/xml/saml_authority_binding.c | 1 + lasso/xml/saml_condition_abstract.c | 1 + lasso/xml/saml_conditions.c | 1 + lasso/xml/saml_name_identifier.c | 1 + lasso/xml/saml_statement_abstract.c | 1 + lasso/xml/saml_subject.c | 1 + lasso/xml/saml_subject_confirmation.c | 1 + lasso/xml/saml_subject_locality.c | 1 + lasso/xml/saml_subject_statement.c | 1 + lasso/xml/saml_subject_statement_abstract.c | 1 + lasso/xml/samlp_request.c | 1 + lasso/xml/samlp_request_abstract.c | 1 + lasso/xml/samlp_response.c | 1 + lasso/xml/samlp_response_abstract.c | 1 + lasso/xml/samlp_status.c | 1 + lasso/xml/samlp_status_code.c | 1 + lasso/xml/sec_resource_access_statement.c | 1 + lasso/xml/soap_binding.c | 1 + lasso/xml/soap_binding_consent.c | 1 + lasso/xml/soap_binding_correlation.c | 1 + lasso/xml/soap_binding_ext_credential.c | 1 + lasso/xml/soap_binding_ext_credentials_context.c | 1 + lasso/xml/soap_binding_ext_service_instance_update.c | 1 + lasso/xml/soap_binding_ext_timeout.c | 1 + lasso/xml/soap_binding_processing_context.c | 1 + lasso/xml/soap_binding_provider.c | 1 + lasso/xml/soap_binding_usage_directive.c | 1 + lasso/xml/soap_body.c | 1 + lasso/xml/soap_detail.c | 1 + lasso/xml/soap_envelope.c | 1 + lasso/xml/soap_fault.c | 1 + lasso/xml/soap_header.c | 1 + lasso/xml/tools.c | 1 + lasso/xml/utility_status.c | 1 + lasso/xml/ws/wsa_attributed_any.c | 1 + lasso/xml/ws/wsa_attributed_qname.c | 1 + lasso/xml/ws/wsa_attributed_unsigned_long.c | 1 + lasso/xml/ws/wsa_attributed_uri.c | 1 + lasso/xml/ws/wsa_endpoint_reference.c | 1 + lasso/xml/ws/wsa_metadata.c | 1 + lasso/xml/ws/wsa_problem_action.c | 1 + lasso/xml/ws/wsa_reference_parameters.c | 1 + lasso/xml/ws/wsa_relates_to.c | 1 + lasso/xml/ws/wsse_embedded.c | 1 + lasso/xml/ws/wsse_reference.c | 1 + lasso/xml/ws/wsse_security_header.c | 1 + lasso/xml/ws/wsse_security_token_reference.c | 1 + lasso/xml/ws/wsse_transformation_parameters.c | 1 + lasso/xml/ws/wsse_username_token.c | 1 + lasso/xml/ws/wsu_timestamp.c | 1 + lasso/xml/wsse_security.c | 1 + lasso/xml/xml.c | 1 + lasso/xml/xml.h | 4 ---- 351 files changed, 352 insertions(+), 4 deletions(-) commit 75ed81fb0c963228dc0bd170a09042bf525b817c Author: Frederic Peters Date: Mon Mar 23 13:21:48 2009 +0000 tentative NEWS file NEWS | 7 +++++++ 1 file changed, 7 insertions(+) commit 8b02541db59d0c25f5a92abbcda75cb5ef56460c Author: Benjamin Dauvergne Date: Mon Mar 9 14:05:35 2009 +0000 Doc: Update index sgml file to cope with gtkdoc 1.11 * docs/references/lasso.sgml: change entity path for LassoSamlp2AssertionIDRequest. docs/reference/lasso.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 8e47e763fbab1ca5a70f0f41da4bd768385dbbdc Author: Benjamin Dauvergne Date: Mon Mar 9 14:05:33 2009 +0000 SAML 2.0: Fix #90, simplify NameID decryption for NameIdManagement * lasso/saml-2.0/name_id_management.c: (lasso_saml2_name_id_management_process_request) simplify code, remove explicit decryption of nameid and handling of error cases, delegate to lasso_decrypt_nameid (from xml/tools.c). lasso/saml-2.0/name_id_management.c | 75 ++++++++++++++++++++----------------- 1 file changed, 40 insertions(+), 35 deletions(-) commit 95d27816ee81f3c6b2cdea2bb2f0584a2df0b1a2 Author: Benjamin Dauvergne Date: Mon Mar 9 14:05:31 2009 +0000 Core: add a method to decrypt nameid, handling error cases * lasso/id-dff/serverprivate.h: * lasso/id-ff/server.c: lasso_server_decrypt_nameid handle error case of NameID decryption, and update passed field pointers. * lasso/errors.h: add new error codes: LASSO_DS_ERROR_DECRYPTION_FAILED -118 - Decryption of an encrypted node failed LASSO_PROFILE_ERROR_MISSING_SERVER -438 - No server object set in the profile lasso/errors.c | 4 ++++ lasso/errors.h | 2 ++ lasso/id-ff/server.c | 41 +++++++++++++++++++++++++++++++++++++++++ lasso/id-ff/serverprivate.h | 3 +++ 4 files changed, 50 insertions(+) commit cf50ac6da229df840409217ece42119a0292d1ba Author: Benjamin Dauvergne Date: Mon Mar 9 10:24:41 2009 +0000 XML SAML 1.0: fix bug 85 * lasso/xml/lib_logout_request.c: do not break parsing when NameIdentifier->Format attribute is NULL. lasso/xml/lib_logout_request.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) commit f64f9973a551f3e29f367f633078ab0c467045f6 Author: Benjamin Dauvergne Date: Tue Mar 3 20:52:49 2009 +0000 SAML 2.0: remove NotBefore attribute when not answering an AuthnRequest * lasso/saml-2.0/login.c: In specification saml-profile-2.0-os.pdf, in paragraph 4.1.4.3, it is said that the SubjectConfirmationData node MUST NOT contain a NotBefore attribute if it contains an InReponseTo attribute, understanding that the response cannot (it the ID of the request is sufficiently random) arrive before the request and be valid with respect to the InResponseTo attribute. lasso/saml-2.0/login.c | 8 ++++++++ 1 file changed, 8 insertions(+) commit b744d0be87b7788ef67e1627f50d264dbc690881 Author: Benjamin Dauvergne Date: Tue Mar 3 20:52:46 2009 +0000 Test: Add test for testing new InResponseTo checking code * tests/login_tests.c: after first test of parsing the soap response message in the login test, try to parse it a second time, after modifying the InResponseTo id of the assertion and disabling signature checking. tests/login_tests.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) commit 94398d7edf3cf9198eee714422a3c388cc574ae1 Author: Benjamin Dauvergne Date: Tue Mar 3 20:52:45 2009 +0000 ID-FF 1.2 & SAML 2.0: fix "fix bug 173" match assertion and not the response with authn request id * lasso/id-ff/login.c: * lasso/saml-2.0/login.c: Serialize/Unserialize request_id private field in LassoLogin dumps. Match InResponseTo assertion attribute (ID-FF 1.2) or SubjectConfirmationData attribute (SAML 2.0) to original request id if it is present. lasso/id-ff/login.c | 34 +++++++++++++++++++++++----------- lasso/saml-2.0/login.c | 29 +++++++++++++++++++---------- 2 files changed, 42 insertions(+), 21 deletions(-) commit 8d7c968fa864af65faf4a0db6b284f2826e872a6 Author: Benjamin Dauvergne Date: Tue Mar 3 20:52:41 2009 +0000 Core: rename LOGIN_ERROR_REFER_TO_UNKNOWN_REQUEST * lasso/errors.h: * lasso/errors.c: rename LASSO_LOGIN_ERROR_REFER_TO_UNKNOWN_REQUEST to LASSO_LOGIN_ERROR_ASSERTION_DOES_NOT_MATCH_REQUEST_ID. lasso/errors.c | 4 ++-- lasso/errors.h | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) commit 7d025b695292e958752c7d9938a3a6a2df9babd0 Author: Benjamin Dauvergne Date: Tue Mar 3 20:52:39 2009 +0000 Core: fix handling of xsi:type * lasso/xml/xml.c: xsi:type handling is broken since commit 3982, restore it. move prefix/nodename matching in static helper functions, and reuse them inside xsi:type code path. lasso/xml/xml.c | 124 +++++++++++++++++++++++++++++++------------------------- 1 file changed, 69 insertions(+), 55 deletions(-) commit 7da0401919fcbca6622fa37b46802b851f6f96f3 Author: Benjamin Dauvergne Date: Tue Mar 3 20:52:37 2009 +0000 Core: enforce flag verify-signature in function lasso_verify_signature * lasso/xml/tools.c: in lasso_verify_signature always return success if lasso_flag_verify_signature is FALSE. * lasso/xml/private.h: change return type to int. lasso/xml/private.h | 2 +- lasso/xml/tools.c | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) commit eb3977ac9c78aca36b91685a8c79317275b8f643 Author: Benjamin Dauvergne Date: Mon Mar 2 12:08:05 2009 +0000 Fix BSD compatibility bug in configure.ac * configure.ac: remove GNUism, use -eq and = instead of == with test tool. (Patch from Emmanuel Dreyfus) configure.ac | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 1cc04298dfa38959354669231298b6da179c0e2c Author: Benjamin Dauvergne Date: Tue Feb 17 17:02:01 2009 +0000 ID-FF 1.2 & SAML 2.0: Fix #173, check InReponseTo in authn responses * id-ff/login.h: add a string field named request_id in the private part of LassoLogin to store request id from the original AuthnRequest. * id-ff/login.c: if request_id field is not null check the InResponseTo attribute of the samlp:Response. * saml-2.0/login.c: if request_id field is not null check the InResponseTo attribute of the samlp:Response. lasso/id-ff/login.c | 28 ++++++++++++---------------- lasso/id-ff/loginprivate.h | 1 + lasso/saml-2.0/login.c | 12 ++++++++++++ 3 files changed, 25 insertions(+), 16 deletions(-) commit b639ada4ee23c15e5f16d06c2c993768d098cc24 Author: Damien Laniel Date: Fri Feb 6 11:08:17 2009 +0000 fixed binding generation lasso/id-ff/session.h | 4 ++-- lasso/id-wsf-2.0/server.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) commit 1a2f77c27ea722a91ded53281cd4be6013c2956c Author: Damien Laniel Date: Fri Feb 6 11:08:02 2009 +0000 removed trailing whitespace lasso/xml/saml_audience_restriction_condition.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 88f6faaf5d9f8b3541df3c4a855b76fdf1cdb59d Author: Damien Laniel Date: Thu Feb 5 16:56:29 2009 +0000 fixed parsing of OFTYPE bindings/bindings.py | 2 +- lasso/id-wsf-2.0/server.h | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) commit 4765d4ff18debb1e556adaa27d8eaf267f0052f4 Author: Damien Laniel Date: Mon Jan 26 18:07:32 2009 +0000 added all string constants to the API doc docs/reference/lasso-sections.txt | 379 +++++++++++++++++++++++++++++++++++++- 1 file changed, 375 insertions(+), 4 deletions(-) commit ce1c57110441260a2a22a1f9a7b13397bf686826 Author: Damien Laniel Date: Mon Jan 26 18:07:08 2009 +0000 reorganised string constants definitions lasso/xml/strings.h | 78 +++++++++++++++++++++++++++-------------------------- 1 file changed, 40 insertions(+), 38 deletions(-) commit 2447334aca8d2a2b709c49ce3ee8cdbad380c736 Author: Damien Laniel Date: Mon Jan 26 17:18:17 2009 +0000 added an index to quickly find symbols docs/reference/lasso.sgml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit f498b7797cf409dc8e2a7a8d108bb82fd27d2351 Author: Damien Laniel Date: Mon Jan 26 16:42:36 2009 +0000 fixed some functions name docs/reference/lasso-sections.txt | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) commit 5aafc1300280d057886e4325bb850c099cdde410 Author: Damien Laniel Date: Mon Jan 26 16:42:19 2009 +0000 documentation-related fixes lasso/id-ff/provider.c | 4 ++-- lasso/id-ff/session.h | 3 ++- lasso/id-wsf/discovery.c | 3 ++- lasso/lasso.c | 2 +- lasso/xml/saml_audience_restriction_condition.c | 2 +- lasso/xml/saml_audience_restriction_condition.h | 8 ++++---- 6 files changed, 12 insertions(+), 10 deletions(-) commit fad3fa581bd0857da4351a5e0f1f8f53aa591c9c Author: Damien Laniel Date: Mon Jan 26 16:10:24 2009 +0000 added documentation for id-wsf 2.0 functions lasso/id-wsf-2.0/data_service.c | 165 +++++++++++++++++++++++++++++++++++++++- lasso/id-wsf-2.0/discovery.c | 161 ++++++++++++++++++++++++++++++++++++--- lasso/id-wsf-2.0/discovery.h | 2 - lasso/id-wsf/data_service.c | 14 +++- lasso/id-wsf/discovery.c | 9 +-- 5 files changed, 329 insertions(+), 22 deletions(-) commit aa0add4286be2bbfad77a98c137e479c99dc60bf Author: Damien Laniel Date: Mon Jan 26 16:09:47 2009 +0000 added lasso_data_service_new_full and removed lasso_idwsf2_discovery_destroy in api doc docs/reference/lasso-sections.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 420572a39765764efc229f10f3872d4e4ea41211 Author: Benjamin Dauvergne Date: Sat Jan 24 09:34:30 2009 +0000 Core: if OFTYPE is already defined, skip lasso/utils.h | 2 ++ 1 file changed, 2 insertions(+) commit bb6c08ee16038fc0763a93ebf65ea866b3eb1c7f Author: Benjamin Dauvergne Date: Sat Jan 24 09:34:29 2009 +0000 Core: add decorator on GList return value in LassoSession header * lasso/id-ff/session.h: add the OFTYPE decorator to the return type of lasso_session_get_assertions. lasso/id-ff/session.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit 6a1e30ff999d209645bfc8ad71cf314a19721af5 Author: Benjamin Dauvergne Date: Sat Jan 24 09:34:27 2009 +0000 Java: add assertions * bindings/java/tests/LoginTest.java: add assertion for the return code of lasso_logout_process_request_msg. bindings/java/tests/LoginTest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit a27ee6c5daf03a4d7c553332917ec3d360887823 Author: Benjamin Dauvergne Date: Sat Jan 24 09:34:26 2009 +0000 ID-FF 1.2: review of logout validate request * lasso/id-ff/logout.c (lasso_logout_validate_request): use new macros. lasso/id-ff/logout.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit cd9c25c0f230e1b6dace3c61936055ed3e7ce645 Author: Benjamin Dauvergne Date: Sat Jan 24 09:34:24 2009 +0000 ID-FF 1.2: review logout_process_request_msg * lasso/id-ff/logout.c (lasso_logout_process_request_msg): use the new allocation macros, add checking of the parsed object type, add validation of some schema constraints before processing, like presence of the name identifier. lasso/id-ff/logout.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) commit b2ed8f90a86cbb37a15f3affd29f9550e8af0521 Author: Benjamin Dauvergne Date: Sat Jan 24 09:34:23 2009 +0000 Core: make caller owner of the list, fix refcount leak lasso/id-ff/identity.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit ef585a8b76cf891ccf4a8d9423ac27122b377852 Author: Benjamin Dauvergne Date: Sat Jan 24 09:34:21 2009 +0000 Autoconf: new macro AS_COMPILER_FLAGS to check flag support * macros/as-compiler-flags.m4 configure.ac: add a new files of autoconf macro to check support of warning flags, add needed line in configure.ac to define variable WARNING_FLAGS, containing only supported flags. configure.ac | 1 + macros/as-compiler-flag.m4 | 62 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) commit 07f252569b7acb3a798200440fce4a81f75442b5 Author: Benjamin Dauvergne Date: Sat Jan 24 09:34:19 2009 +0000 Core: replace manual reference handling with macros - lasso/xml/disco_insert_entry.c (lasso_disco_insert_entry_new) : replace manual g_object_ref with assignment macro. lasso/xml/disco_insert_entry.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 74258b75089f4c2771afe25d18ceb1fbb4d38949 Author: Benjamin Dauvergne Date: Sat Jan 24 09:34:17 2009 +0000 Core: replace manual handling of references with macros - lasso/xml/disco_resource_offering.c (lasso_disco_resource_offering_new) replace manual g_object_ref with assignment macro. lasso/xml/disco_resource_offering.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) commit 68eaafa6e72e91a35ce731f9fb34d13f12076142 Author: Benjamin Dauvergne Date: Sat Jan 24 09:34:16 2009 +0000 Core: synchronize lasso_verify_signature with new macros lasso/xml/tools.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) commit f120c3e8c202edb0e2c291edbfb972d8c629fcdd Author: Benjamin Dauvergne Date: Sat Jan 24 09:34:14 2009 +0000 Core: add new error code to lasso_node_init_from_message - add new return code LASSO_MESSAGE_FORMAT_XSCHEMA_ERROR - fix SOAP_FORMAT bizarre if conditional - remove old comments lasso/xml/xml.c | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) commit 78b62c1ee912a5773a79a7f16b71c72277615c01 Author: Benjamin Dauvergne Date: Sat Jan 24 09:34:12 2009 +0000 Core: review of lasso_node_encrypt - use new memory macros - copying nodes instead of stealing nodes lasso/xml/xml.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) commit 936d01dbe4ddbc8401db942ebc26465450bc8a31 Author: Benjamin Dauvergne Date: Sat Jan 24 09:34:09 2009 +0000 ID-FF 1.2: fix leak of instance object lasso/id-ff/login.c | 1 + 1 file changed, 1 insertion(+) commit 71e43cfd1fed09c01307cec04bacaadf7747948c Author: Benjamin Dauvergne Date: Sat Jan 24 09:34:07 2009 +0000 Core: add a new messsage format error for XSchema constraint failure lasso/xml/xml.h | 1 + 1 file changed, 1 insertion(+) commit d38057f858e853c4eb87fdcd8487799cc7b34d7e Author: Benjamin Dauvergne Date: Sat Jan 24 09:34:04 2009 +0000 ID-FF 1.2: review logout_validate_request * lasso/id-ff/logout.c (lasso_logout_validate_request): - when signature verification failed in process_request_msg, do not continue validation of the request, stop immediately and return the signature status code. - use utils.h macro for memory allocation handling. Fix potential leak of the profile->response object. lasso/id-ff/logout.c | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) commit b5d79960c76edcf231996c36a1752a03832566e7 Author: Benjamin Dauvergne Date: Sat Jan 24 09:34:03 2009 +0000 ID-FF 1.2: validate signatures on responses during the BRWS/Artifact profile - lasso/id-ff/login.c: - the lasso_login_process_response_msg is used to process SOAP response to artifact resolution requests. The answer contains an samlp:Response that can be signed, and each contained assertion MUST be individually signed. - lasso/xml/samlp_response.c: - set keep_xmlnode flag on the class metadatas to help in signature validations. lasso/id-ff/login.c | 28 ++++++++++++++++++++++++++++ lasso/xml/samlp_response.c | 1 + 2 files changed, 29 insertions(+) commit 90b40c874d24c6ef7cbe8b6adcb15abff0d4ee87 Author: Benjamin Dauvergne Date: Sat Jan 24 09:34:00 2009 +0000 ID-FF 1.2: add validation of assertion signatures - lasso/id-ff/login.c: - lasso_login_process_response_status_and_assertion: - if signature_status is not 0 and an assertion is present, we validate the signature on this assertion using the internal API lasso_provider_verify_saml_signature. lasso/id-ff/login.c | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) commit 9c33ce6000b73ee0891657fde290749c7b9234ab Author: Benjamin Dauvergne Date: Sat Jan 24 09:33:58 2009 +0000 Core: add error code LOGIN_ERROR_REFER_TO_UNKNOWN_REQUEST * lasso/errors.h, lasso/errors.c: - LASSO_LOGIN_ERROR_REFER_TO_UNKNOWN_REQUEST is raised when a samlp:Response contains an attribute inResponseTo when when no previous request can be found inside the LassoLogin object or if the given ID is not the as the one fome the previous request. lasso/errors.c | 2 ++ lasso/errors.h | 1 + 2 files changed, 3 insertions(+) commit 89f1ae7e5b37876ba3a9dd4bf4012c346531d029 Author: Benjamin Dauvergne Date: Sat Jan 24 09:33:57 2009 +0000 ID-FF 1.2: fix signature validation in login_process_authn_response_msg * lasso/id-ff/login.c: when signature validation fails on a message, then return the signature status as return code. There is a security fix. lasso/id-ff/login.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit fdc8c66a98f31f8459737757ae3abd67e9458a58 Author: Benjamin Dauvergne Date: Sat Jan 24 09:33:55 2009 +0000 XML: new LassoProvider API to verify XMLDsig signatures * lasso/id-ff/provider.c, lasso/id-ff/providerprivate.h: - (lasso_provider_verify_saml_signature) validate a signed saml Request, Response or Assertion, using the public key of the given provider. lasso/id-ff/provider.c | 40 ++++++++++++++++++++++++++++++++++++++++ lasso/id-ff/providerprivate.h | 1 + 2 files changed, 41 insertions(+) commit b3a5cbe83c20952475acfd3d12b6920cb52b6e82 Author: Benjamin Dauvergne Date: Sat Jan 24 09:33:52 2009 +0000 XML: Make LassoSamlAssertion keep its XML form when created by parsing * lasso/xml/saml_assertion.c: set the keep_original flag of class LassoSamlAssertion to true, to keep a copy of the original libxml tree used to initialize eache instance of this object. We will use it to validate signature on assertions. lasso/xml/saml_assertion.c | 1 + 1 file changed, 1 insertion(+) commit a3daa0d6653886587678929977ec57c6e5d5f02a Author: Benjamin Dauvergne Date: Sat Jan 24 09:33:50 2009 +0000 XML: Add internal API to validate XMLDsig signatures * lasso/xml/tools.c: - lasso_saml_constrain_dsigctxt() add constraints following SAML specifications on XMLDsig signatures to an libxmlsec DSig context. - lasso_verify_signature() this function given an xmlNode and a key or a keys manager (for a set of AC or AC chains) validate the envelopped signature set upon this node. It can be instructed to follow constraints of the SAML 1.0 specification. lasso/xml/private.h | 10 ++++ lasso/xml/tools.c | 135 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 145 insertions(+) commit e77c4964877ea773b9114b6e54693af91b4220c6 Author: Benjamin Dauvergne Date: Sat Jan 24 09:33:49 2009 +0000 Core: add new error codes * lasso/errors.h: add error codes for, - out of memory situation, - excess of references during validation of signature on SAML protocols message or assertions, - an invalid reference during validation of signatures on SAML protocols message or assertions, - an mismatch between requested assertion issuer and received assertion issuer. lasso/errors.c | 20 ++++++++++++++------ lasso/errors.h | 4 ++++ 2 files changed, 18 insertions(+), 6 deletions(-) commit dd9d4c30fcd20dc6dd9424bb25aacab0bd34da81 Author: Benjamin Dauvergne Date: Sat Jan 24 09:33:47 2009 +0000 Autoconf: redirect shell warning in one of configure.ac tests - configure.ac: when testing if bindings have been already generated with differents settings do not let grep emit warnings. configure.ac | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 33bbf7a7de2361ced173857827c88204326e6bb5 Author: Benjamin Dauvergne Date: Sat Jan 24 09:33:40 2009 +0000 All: Fix missing field initializer problems * lots of files: Explicitely set all field of initialized structures, in order to remove -Wno-missing-field-initilizers from needed compiler options when using -Wall -Wextra. bindings/php5/wrapper_source.py | 2 +- bindings/python/wrapper_top.c | 8 +++-- configure.ac | 2 +- lasso/id-ff/defederation.c | 3 +- lasso/id-ff/federation.c | 9 ++--- lasso/id-ff/identity.c | 1 + lasso/id-ff/lecp.c | 1 + lasso/id-ff/login.c | 9 ++--- lasso/id-ff/logout.c | 11 +++--- lasso/id-ff/name_identifier_mapping.c | 1 + lasso/id-ff/name_registration.c | 5 +-- lasso/id-ff/profile.c | 19 +++++----- lasso/id-ff/profile.h | 2 +- lasso/id-ff/provider.c | 11 +++--- lasso/id-ff/provider.h | 2 +- lasso/id-ff/providerprivate.h | 2 +- lasso/id-ff/server.c | 9 ++--- lasso/id-ff/session.c | 1 + lasso/id-wsf-2.0/data_service.c | 1 + lasso/id-wsf-2.0/discovery.c | 1 + lasso/id-wsf-2.0/profile.c | 1 + lasso/id-wsf/authentication.c | 1 + lasso/id-wsf/data_service.c | 1 + lasso/id-wsf/discovery.c | 1 + lasso/id-wsf/interaction_profile_service.c | 1 + lasso/id-wsf/personal_profile_service.c | 1 + lasso/id-wsf/wsf_profile.c | 21 +++++------ lasso/saml-2.0/assertion_query.c | 3 +- lasso/saml-2.0/ecp.c | 1 + lasso/saml-2.0/name_id_management.c | 3 +- lasso/xml/disco_authenticate_requester.c | 5 +-- lasso/xml/disco_authenticate_session_context.c | 5 +-- lasso/xml/disco_authorize_requester.c | 5 +-- lasso/xml/disco_credentials.c | 5 +-- lasso/xml/disco_description.c | 17 ++++----- lasso/xml/disco_encrypt_resource_id.c | 5 +-- lasso/xml/disco_encrypted_resource_id.c | 9 ++--- lasso/xml/disco_generate_bearer_token.c | 5 +-- lasso/xml/disco_insert_entry.c | 7 ++-- lasso/xml/disco_modify.c | 13 +++---- lasso/xml/disco_modify_response.c | 9 ++--- lasso/xml/disco_options.c | 5 +-- lasso/xml/disco_query.c | 11 +++--- lasso/xml/disco_query_response.c | 11 +++--- lasso/xml/disco_remove_entry.c | 5 +-- lasso/xml/disco_requested_service_type.c | 7 ++-- lasso/xml/disco_resource_id.c | 7 ++-- lasso/xml/disco_resource_offering.c | 15 ++++---- lasso/xml/disco_send_single_logout.c | 5 +-- lasso/xml/disco_service_instance.c | 9 ++--- lasso/xml/ds_key_info.c | 5 +-- lasso/xml/ds_key_value.c | 5 +-- lasso/xml/ds_rsa_key_value.c | 7 ++-- lasso/xml/dst_data.c | 9 ++--- lasso/xml/dst_modification.c | 13 +++---- lasso/xml/dst_modify.c | 15 ++++---- lasso/xml/dst_modify_response.c | 13 +++---- lasso/xml/dst_new_data.c | 5 +-- lasso/xml/dst_query.c | 15 ++++---- lasso/xml/dst_query_item.c | 13 +++---- lasso/xml/dst_query_response.c | 15 ++++---- lasso/xml/id-wsf-2.0/disco_abstract.c | 5 +-- lasso/xml/id-wsf-2.0/disco_endpoint_context.c | 11 +++--- lasso/xml/id-wsf-2.0/disco_keys.c | 5 +-- lasso/xml/id-wsf-2.0/disco_options.c | 5 +-- lasso/xml/id-wsf-2.0/disco_provider_id.c | 5 +-- lasso/xml/id-wsf-2.0/disco_query.c | 7 ++-- lasso/xml/id-wsf-2.0/disco_query_response.c | 9 ++--- lasso/xml/id-wsf-2.0/disco_requested_service.c | 21 +++++------ lasso/xml/id-wsf-2.0/disco_security_context.c | 7 ++-- lasso/xml/id-wsf-2.0/disco_service_context.c | 9 ++--- lasso/xml/id-wsf-2.0/disco_service_type.c | 5 +-- .../xml/id-wsf-2.0/disco_svc_md_association_add.c | 7 ++-- .../disco_svc_md_association_add_response.c | 7 ++-- .../id-wsf-2.0/disco_svc_md_association_delete.c | 7 ++-- .../disco_svc_md_association_delete_response.c | 7 ++-- .../id-wsf-2.0/disco_svc_md_association_query.c | 7 ++-- .../disco_svc_md_association_query_response.c | 9 ++--- lasso/xml/id-wsf-2.0/disco_svc_md_delete.c | 7 ++-- .../xml/id-wsf-2.0/disco_svc_md_delete_response.c | 7 ++-- lasso/xml/id-wsf-2.0/disco_svc_md_query.c | 7 ++-- lasso/xml/id-wsf-2.0/disco_svc_md_query_response.c | 9 ++--- lasso/xml/id-wsf-2.0/disco_svc_md_register.c | 7 ++-- .../id-wsf-2.0/disco_svc_md_register_response.c | 11 +++--- lasso/xml/id-wsf-2.0/disco_svc_md_replace.c | 7 ++-- .../xml/id-wsf-2.0/disco_svc_md_replace_response.c | 7 ++-- lasso/xml/id-wsf-2.0/disco_svc_metadata.c | 11 +++--- lasso/xml/id-wsf-2.0/dst_data_response_base.c | 5 +-- lasso/xml/id-wsf-2.0/dst_delete_item_base.c | 13 +++---- lasso/xml/id-wsf-2.0/dst_delete_response.c | 3 +- lasso/xml/id-wsf-2.0/dst_request.c | 9 ++--- lasso/xml/id-wsf-2.0/dst_result_query_base.c | 19 +++++----- lasso/xml/id-wsf-2.0/dst_test_item_base.c | 11 +++--- lasso/xml/id-wsf-2.0/dstref_app_data.c | 5 +-- lasso/xml/id-wsf-2.0/dstref_create.c | 7 ++-- lasso/xml/id-wsf-2.0/dstref_create_item.c | 11 +++--- lasso/xml/id-wsf-2.0/dstref_create_response.c | 4 +-- lasso/xml/id-wsf-2.0/dstref_data.c | 9 ++--- lasso/xml/id-wsf-2.0/dstref_data_response.c | 5 +-- lasso/xml/id-wsf-2.0/dstref_delete.c | 5 +-- lasso/xml/id-wsf-2.0/dstref_delete_item.c | 5 +-- lasso/xml/id-wsf-2.0/dstref_delete_response.c | 3 +- lasso/xml/id-wsf-2.0/dstref_item_data.c | 9 ++--- lasso/xml/id-wsf-2.0/dstref_modify.c | 7 ++-- lasso/xml/id-wsf-2.0/dstref_modify_item.c | 15 ++++---- lasso/xml/id-wsf-2.0/dstref_modify_response.c | 3 +- lasso/xml/id-wsf-2.0/dstref_query.c | 7 ++-- lasso/xml/id-wsf-2.0/dstref_query_item.c | 11 +++--- lasso/xml/id-wsf-2.0/dstref_query_response.c | 7 ++-- lasso/xml/id-wsf-2.0/dstref_result_query.c | 7 ++-- lasso/xml/id-wsf-2.0/dstref_test_item.c | 5 +-- .../xml/id-wsf-2.0/ims_identity_mapping_request.c | 7 ++-- .../xml/id-wsf-2.0/ims_identity_mapping_response.c | 9 ++--- lasso/xml/id-wsf-2.0/ims_mapping_input.c | 9 ++--- lasso/xml/id-wsf-2.0/ims_mapping_output.c | 7 ++-- lasso/xml/id-wsf-2.0/is_help.c | 9 ++--- lasso/xml/id-wsf-2.0/is_inquiry.c | 15 ++++---- lasso/xml/id-wsf-2.0/is_inquiry_element.c | 13 +++---- lasso/xml/id-wsf-2.0/is_interaction_request.c | 15 ++++---- lasso/xml/id-wsf-2.0/is_interaction_response.c | 9 ++--- lasso/xml/id-wsf-2.0/is_interaction_statement.c | 15 ++++---- lasso/xml/id-wsf-2.0/is_item.c | 9 ++--- lasso/xml/id-wsf-2.0/is_parameter.c | 7 ++-- lasso/xml/id-wsf-2.0/is_select.c | 5 +-- lasso/xml/id-wsf-2.0/is_text.c | 9 ++--- lasso/xml/id-wsf-2.0/ps_add_collection_request.c | 7 ++-- lasso/xml/id-wsf-2.0/ps_add_collection_response.c | 5 +-- lasso/xml/id-wsf-2.0/ps_add_entity_request.c | 13 +++---- lasso/xml/id-wsf-2.0/ps_add_entity_response.c | 9 ++--- lasso/xml/id-wsf-2.0/ps_add_known_entity_request.c | 13 +++---- .../xml/id-wsf-2.0/ps_add_known_entity_response.c | 9 ++--- .../xml/id-wsf-2.0/ps_add_to_collection_request.c | 9 ++--- lasso/xml/id-wsf-2.0/ps_get_object_info_request.c | 7 ++-- lasso/xml/id-wsf-2.0/ps_get_object_info_response.c | 5 +-- lasso/xml/id-wsf-2.0/ps_item_data.c | 5 +-- lasso/xml/id-wsf-2.0/ps_list_members_request.c | 13 +++---- lasso/xml/id-wsf-2.0/ps_list_members_response.c | 5 +-- lasso/xml/id-wsf-2.0/ps_notification.c | 5 +-- lasso/xml/id-wsf-2.0/ps_notify.c | 7 ++-- lasso/xml/id-wsf-2.0/ps_object.c | 19 +++++----- lasso/xml/id-wsf-2.0/ps_query_objects_request.c | 11 +++--- lasso/xml/id-wsf-2.0/ps_query_objects_response.c | 5 +-- .../xml/id-wsf-2.0/ps_remove_collection_request.c | 5 +-- lasso/xml/id-wsf-2.0/ps_remove_entity_request.c | 5 +-- .../id-wsf-2.0/ps_remove_from_collection_request.c | 9 ++--- lasso/xml/id-wsf-2.0/ps_request_abstract.c | 5 +-- .../xml/id-wsf-2.0/ps_resolve_identifier_request.c | 5 +-- .../id-wsf-2.0/ps_resolve_identifier_response.c | 5 +-- lasso/xml/id-wsf-2.0/ps_resolve_input.c | 5 +-- lasso/xml/id-wsf-2.0/ps_response_abstract.c | 7 ++-- lasso/xml/id-wsf-2.0/ps_set_object_info_request.c | 7 ++-- lasso/xml/id-wsf-2.0/ps_test_membership_request.c | 9 ++--- lasso/xml/id-wsf-2.0/ps_test_membership_response.c | 5 +-- lasso/xml/id-wsf-2.0/sb2_consent.c | 9 ++--- lasso/xml/id-wsf-2.0/sb2_credentials_context.c | 9 ++--- lasso/xml/id-wsf-2.0/sb2_endpoint_update.c | 5 +-- lasso/xml/id-wsf-2.0/sb2_redirect_request.c | 5 +-- lasso/xml/id-wsf-2.0/sb2_sender.c | 9 ++--- lasso/xml/id-wsf-2.0/sb2_target_identity.c | 5 +-- lasso/xml/id-wsf-2.0/sb2_timeout.c | 7 ++-- lasso/xml/id-wsf-2.0/sb2_usage_directive.c | 7 ++-- lasso/xml/id-wsf-2.0/sb2_user_interaction_header.c | 15 ++++---- lasso/xml/id-wsf-2.0/sbf_framework.c | 7 ++-- lasso/xml/id-wsf-2.0/sec_token.c | 11 +++--- lasso/xml/id-wsf-2.0/sec_token_policy.c | 15 ++++---- lasso/xml/id-wsf-2.0/sec_transited_provider_path.c | 5 +-- lasso/xml/id-wsf-2.0/subs_notification.c | 13 +++---- lasso/xml/id-wsf-2.0/subs_notify_response.c | 3 +- lasso/xml/id-wsf-2.0/subs_ref_item.c | 7 ++-- lasso/xml/id-wsf-2.0/subs_subscription.c | 21 +++++------ lasso/xml/id-wsf-2.0/subsref_app_data.c | 7 ++-- lasso/xml/id-wsf-2.0/subsref_create.c | 9 ++--- lasso/xml/id-wsf-2.0/subsref_create_item.c | 11 +++--- lasso/xml/id-wsf-2.0/subsref_create_response.c | 3 +- lasso/xml/id-wsf-2.0/subsref_data.c | 9 ++--- lasso/xml/id-wsf-2.0/subsref_data_response.c | 5 +-- lasso/xml/id-wsf-2.0/subsref_delete.c | 5 +-- lasso/xml/id-wsf-2.0/subsref_delete_item.c | 5 +-- lasso/xml/id-wsf-2.0/subsref_delete_response.c | 3 +- lasso/xml/id-wsf-2.0/subsref_item_data.c | 9 ++--- lasso/xml/id-wsf-2.0/subsref_modify.c | 9 ++--- lasso/xml/id-wsf-2.0/subsref_modify_item.c | 15 ++++---- lasso/xml/id-wsf-2.0/subsref_modify_response.c | 3 +- lasso/xml/id-wsf-2.0/subsref_notification.c | 5 +-- lasso/xml/id-wsf-2.0/subsref_notify.c | 7 ++-- lasso/xml/id-wsf-2.0/subsref_notify_response.c | 3 +- lasso/xml/id-wsf-2.0/subsref_query.c | 9 ++--- lasso/xml/id-wsf-2.0/subsref_query_item.c | 11 +++--- lasso/xml/id-wsf-2.0/subsref_query_response.c | 7 ++-- lasso/xml/id-wsf-2.0/subsref_result_query.c | 7 ++-- lasso/xml/id-wsf-2.0/subsref_subscription.c | 9 ++--- lasso/xml/id-wsf-2.0/subsref_test_item.c | 5 +-- lasso/xml/id-wsf-2.0/util_empty.c | 3 +- lasso/xml/id-wsf-2.0/util_extension.c | 3 +- lasso/xml/id-wsf-2.0/util_response.c | 11 +++--- lasso/xml/id-wsf-2.0/util_status.c | 11 +++--- lasso/xml/is_help.c | 9 ++--- lasso/xml/is_inquiry.c | 15 ++++---- lasso/xml/is_inquiry_element.c | 13 +++---- lasso/xml/is_interaction_request.c | 15 ++++---- lasso/xml/is_interaction_response.c | 9 ++--- lasso/xml/is_interaction_statement.c | 5 +-- lasso/xml/is_item.c | 9 ++--- lasso/xml/is_parameter.c | 7 ++-- lasso/xml/is_redirect_request.c | 5 +-- lasso/xml/is_select.c | 7 ++-- lasso/xml/is_text.c | 9 ++--- lasso/xml/is_user_interaction.c | 15 ++++---- lasso/xml/lib_assertion.c | 5 +-- lasso/xml/lib_authentication_statement.c | 9 ++--- lasso/xml/lib_authn_context.c | 7 ++-- lasso/xml/lib_authn_request.c | 27 +++++++------- lasso/xml/lib_authn_request_envelope.c | 17 ++++----- lasso/xml/lib_authn_response.c | 11 +++--- lasso/xml/lib_authn_response_envelope.c | 7 ++-- .../xml/lib_federation_termination_notification.c | 11 +++--- lasso/xml/lib_idp_entries.c | 5 +-- lasso/xml/lib_idp_entry.c | 9 ++--- lasso/xml/lib_idp_list.c | 7 ++-- lasso/xml/lib_logout_request.c | 17 ++++----- lasso/xml/lib_logout_response.c | 1 + lasso/xml/lib_name_identifier_mapping_request.c | 13 +++---- lasso/xml/lib_name_identifier_mapping_response.c | 11 +++--- lasso/xml/lib_register_name_identifier_request.c | 15 ++++---- lasso/xml/lib_register_name_identifier_response.c | 1 + lasso/xml/lib_request_authn_context.c | 9 ++--- lasso/xml/lib_scoping.c | 7 ++-- lasso/xml/lib_status_response.c | 11 +++--- lasso/xml/lib_subject.c | 5 +-- lasso/xml/misc_text_node.c | 5 +-- lasso/xml/private.h | 2 +- lasso/xml/sa_credentials.c | 5 +-- lasso/xml/sa_parameter.c | 7 ++-- lasso/xml/sa_password_transforms.c | 5 +-- lasso/xml/sa_sasl_request.c | 15 ++++---- lasso/xml/sa_sasl_response.c | 17 ++++----- lasso/xml/sa_transform.c | 9 ++--- lasso/xml/saml-2.0/saml2_action.c | 7 ++-- lasso/xml/saml-2.0/saml2_advice.c | 11 +++--- lasso/xml/saml-2.0/saml2_assertion.c | 41 +++++++++++----------- lasso/xml/saml-2.0/saml2_attribute.c | 11 +++--- lasso/xml/saml-2.0/saml2_attribute_statement.c | 7 ++-- lasso/xml/saml-2.0/saml2_attribute_value.c | 5 +-- lasso/xml/saml-2.0/saml2_audience_restriction.c | 5 +-- lasso/xml/saml-2.0/saml2_authn_context.c | 11 +++--- lasso/xml/saml-2.0/saml2_authn_statement.c | 13 +++---- .../xml/saml-2.0/saml2_authz_decision_statement.c | 11 +++--- lasso/xml/saml-2.0/saml2_base_idabstract.c | 7 ++-- lasso/xml/saml-2.0/saml2_condition_abstract.c | 3 +- lasso/xml/saml-2.0/saml2_conditions.c | 15 ++++---- lasso/xml/saml-2.0/saml2_encrypted_element.c | 9 ++--- lasso/xml/saml-2.0/saml2_evidence.c | 11 +++--- .../saml-2.0/saml2_key_info_confirmation_data.c | 5 +-- lasso/xml/saml-2.0/saml2_name_id.c | 13 +++---- lasso/xml/saml-2.0/saml2_one_time_use.c | 3 +- lasso/xml/saml-2.0/saml2_proxy_restriction.c | 7 ++-- lasso/xml/saml-2.0/saml2_statement_abstract.c | 3 +- lasso/xml/saml-2.0/saml2_subject.c | 11 +++--- lasso/xml/saml-2.0/saml2_subject_confirmation.c | 13 +++---- .../xml/saml-2.0/saml2_subject_confirmation_data.c | 13 +++---- lasso/xml/saml-2.0/saml2_subject_locality.c | 7 ++-- lasso/xml/saml-2.0/samlp2_artifact_resolve.c | 5 +-- lasso/xml/saml-2.0/samlp2_artifact_response.c | 5 +-- lasso/xml/saml-2.0/samlp2_assertion_id_request.c | 5 +-- lasso/xml/saml-2.0/samlp2_attribute_query.c | 5 +-- lasso/xml/saml-2.0/samlp2_authn_query.c | 7 ++-- lasso/xml/saml-2.0/samlp2_authn_request.c | 27 +++++++------- lasso/xml/saml-2.0/samlp2_authz_decision_query.c | 9 ++--- lasso/xml/saml-2.0/samlp2_extensions.c | 3 +- lasso/xml/saml-2.0/samlp2_idp_entry.c | 9 ++--- lasso/xml/saml-2.0/samlp2_idp_list.c | 7 ++-- lasso/xml/saml-2.0/samlp2_logout_request.c | 15 ++++---- lasso/xml/saml-2.0/samlp2_logout_response.c | 3 +- lasso/xml/saml-2.0/samlp2_manage_name_id_request.c | 13 +++---- .../xml/saml-2.0/samlp2_manage_name_id_response.c | 3 +- .../xml/saml-2.0/samlp2_name_id_mapping_request.c | 11 +++--- .../xml/saml-2.0/samlp2_name_id_mapping_response.c | 7 ++-- lasso/xml/saml-2.0/samlp2_name_id_policy.c | 9 ++--- lasso/xml/saml-2.0/samlp2_request_abstract.c | 27 +++++++------- .../xml/saml-2.0/samlp2_requested_authn_context.c | 5 +-- lasso/xml/saml-2.0/samlp2_response.c | 7 ++-- lasso/xml/saml-2.0/samlp2_scoping.c | 9 ++--- lasso/xml/saml-2.0/samlp2_status.c | 9 ++--- lasso/xml/saml-2.0/samlp2_status_code.c | 7 ++-- lasso/xml/saml-2.0/samlp2_status_detail.c | 3 +- lasso/xml/saml-2.0/samlp2_status_response.c | 31 ++++++++-------- lasso/xml/saml-2.0/samlp2_subject_query_abstract.c | 5 +-- lasso/xml/saml-2.0/samlp2_terminate.c | 3 +- lasso/xml/saml_advice.c | 9 ++--- lasso/xml/saml_assertion.c | 33 ++++++++--------- lasso/xml/saml_attribute.c | 9 ++--- lasso/xml/saml_attribute_designator.c | 7 ++-- lasso/xml/saml_attribute_statement.c | 5 +-- lasso/xml/saml_attribute_value.c | 5 +-- lasso/xml/saml_audience_restriction_condition.c | 5 +-- lasso/xml/saml_authentication_statement.c | 11 +++--- lasso/xml/saml_authority_binding.c | 9 ++--- lasso/xml/saml_condition_abstract.c | 1 + lasso/xml/saml_conditions.c | 9 ++--- lasso/xml/saml_name_identifier.c | 9 ++--- lasso/xml/saml_statement_abstract.c | 1 + lasso/xml/saml_subject.c | 9 ++--- lasso/xml/saml_subject_confirmation.c | 9 ++--- lasso/xml/saml_subject_locality.c | 7 ++-- lasso/xml/saml_subject_statement.c | 1 + lasso/xml/saml_subject_statement_abstract.c | 5 +-- lasso/xml/samlp_request.c | 5 +-- lasso/xml/samlp_request_abstract.c | 15 ++++---- lasso/xml/samlp_response.c | 7 ++-- lasso/xml/samlp_response_abstract.c | 17 ++++----- lasso/xml/samlp_status.c | 7 ++-- lasso/xml/samlp_status_code.c | 7 ++-- lasso/xml/sec_resource_access_statement.c | 3 +- lasso/xml/soap_binding_consent.c | 13 +++---- lasso/xml/soap_binding_correlation.c | 15 ++++---- lasso/xml/soap_binding_ext_credential.c | 7 ++-- lasso/xml/soap_binding_ext_credentials_context.c | 13 +++---- .../xml/soap_binding_ext_service_instance_update.c | 15 ++++---- lasso/xml/soap_binding_ext_timeout.c | 11 +++--- lasso/xml/soap_binding_processing_context.c | 11 +++--- lasso/xml/soap_binding_provider.c | 13 +++---- lasso/xml/soap_binding_usage_directive.c | 13 +++---- lasso/xml/soap_body.c | 5 +-- lasso/xml/soap_detail.c | 5 +-- lasso/xml/soap_envelope.c | 7 ++-- lasso/xml/soap_fault.c | 9 ++--- lasso/xml/soap_header.c | 5 +-- lasso/xml/utility_status.c | 11 +++--- lasso/xml/ws/wsa_attributed_any.c | 7 ++-- lasso/xml/ws/wsa_attributed_qname.c | 7 ++-- lasso/xml/ws/wsa_attributed_unsigned_long.c | 7 ++-- lasso/xml/ws/wsa_attributed_uri.c | 7 ++-- lasso/xml/ws/wsa_endpoint_reference.c | 13 +++---- lasso/xml/ws/wsa_metadata.c | 7 ++-- lasso/xml/ws/wsa_problem_action.c | 9 ++--- lasso/xml/ws/wsa_reference_parameters.c | 7 ++-- lasso/xml/ws/wsa_relates_to.c | 9 ++--- lasso/xml/ws/wsse_embedded.c | 7 ++-- lasso/xml/ws/wsse_reference.c | 9 ++--- lasso/xml/ws/wsse_security_header.c | 7 ++-- lasso/xml/ws/wsse_security_token_reference.c | 9 ++--- lasso/xml/ws/wsse_transformation_parameters.c | 5 +-- lasso/xml/ws/wsse_username_token.c | 9 ++--- lasso/xml/ws/wsu_timestamp.c | 11 +++--- lasso/xml/wsse_security.c | 5 +-- lasso/xml/xml.c | 1 + tests/basic_tests.c | 1 + 347 files changed, 1602 insertions(+), 1261 deletions(-) commit 7fc388abb3cebc81d12aad7ab2f12bbd82eb40d5 Author: Benjamin Dauvergne Date: Sat Jan 24 09:33:21 2009 +0000 Core: add macros to assign list of things, rename xmlNode related macros * lasso/utils.h: added new macros, renamed others: - macros handling xmlNode are renamed from _node to _xml_node, - new macros for assign GList* of specific objects: - lasso_assign_list_of_gobjects, - lasso_assign_list_of_strings, - lasso_assign_new_list_of_gobjects, - macros for assigning xmlChar string (we need a specific macros because, we must use xmlFree to release the destination string), - macros to add string without duping: lasso_list_add_xml_string, - macros to add anything non-null (no type cast): lasso_list_add_non_null. lasso/utils.h | 232 ++++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 146 insertions(+), 86 deletions(-) commit cfc64aac4cfb9644babffd9498dd35d0f21c2900 Author: Benjamin Dauvergne Date: Sat Jan 24 09:33:20 2009 +0000 Core: add references handling macros * lasso/utils.h: - add macro lasso_transfer_string and lasso_transfer_gobject, to transfer ownership of such objects without copying or their changing reference count. The old containing variable is NULLed. - lasso_list_add_gobject,lasso_list_add_new_gobject: test if the added object is a GObject, if not do not add it and print a warning. - lasso_check_type_equality: this macro use special builtin functions only with GCC (typeof and __builtin_types_compatible_p) and do metaprogramming using anonymous enumeration type to make compile time assertions. It is used - add macros to release XPathObject XPathContext, macro constructor to make reference transfert macros (free dest, nullify dest, copy src to dest without increasing refcount, nullify src), add a macro to transfert xpath objects. lasso/utils.h | 119 +++++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 102 insertions(+), 17 deletions(-) commit 03c6d3ba25f7a61f3ac35561b887dddf84d7f289 Author: Benjamin Dauvergne Date: Sat Jan 24 09:33:18 2009 +0000 Core: new goto_exit macro which produces warnings * lasso/utils.h: similar macro to goto_exit_if_fail but also produce a printed warning. lasso/utils.h | 9 +++++++++ 1 file changed, 9 insertions(+) commit 4b4bdbf1af79307c7a53db42abbb13e0af38c3cb Author: Benjamin Dauvergne Date: Sat Jan 24 09:33:17 2009 +0000 Core: new macros for adding string to GList * lasso/utils.h: - lasso_list_add_string, add a copy of a string to a GList lasso/utils.h | 5 +++++ 1 file changed, 5 insertions(+) commit 66633a4d9536b6c4f8ef4af22b359ea255603d6c Author: Benjamin Dauvergne Date: Sat Jan 24 09:33:04 2009 +0000 Core: Remove unused macro lasso_warn_deprecated * lasso/utils.h: remove macros lasso_warn_deprecated, use GCC attributes and gtkdoc markers instead. lasso/utils.h | 4 ---- 1 file changed, 4 deletions(-) commit f3313501182025fda30c16d7d53516e4b57061df Author: Damien Laniel Date: Thu Jan 22 17:18:07 2009 +0000 added documentation sections for ID-WSF 2.0 Discovery and DataService docs/reference/lasso-sections.txt | 60 ++++++++++++++++++++++++++++++++++++++- docs/reference/lasso.sgml | 5 ++++ 2 files changed, 64 insertions(+), 1 deletion(-) commit 07fc694e10890bd21cb7443ed7e3e70bfda64930 Author: Damien Laniel Date: Thu Jan 22 14:46:52 2009 +0000 removed unused destroy functions (only defined in .c or .h files) lasso/id-wsf-2.0/discovery.c | 13 ------------- lasso/id-wsf/discovery.h | 4 +--- 2 files changed, 1 insertion(+), 16 deletions(-) commit 651cb041d2443586cf9f77303141192c6011642b Author: Jean-Marc Liger Date: Tue Jan 13 13:56:07 2009 +0000 Fedora/Redhat spec file fedora/lasso.spec | 317 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 317 insertions(+) commit 1c3761b2c174765cec2ff8d6d500af01dd4fc5aa Author: Frederic Peters Date: Thu Dec 18 16:05:44 2008 +0000 correctly check for successful return of DSA_verify lasso/xml/tools.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 9ee9e2b6fd304cf792f30857113e3e8876091a20 Author: Damien Laniel Date: Tue Dec 16 16:40:33 2008 +0000 check in lasso_name_id_management_init_request if HTTP method is supported lasso/saml-2.0/name_id_management.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) commit 5a51211f40dd91872a4096a318fc61660bd21af7 Author: Damien Laniel Date: Fri Dec 12 16:48:18 2008 +0000 fixed fault code and use a more precise fault string lasso/id-wsf/discovery.c | 2 +- lasso/xml/strings.h | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) commit 6fa76647948e06de48590e35ea1627fb68f24767 Author: Damien Laniel Date: Fri Dec 12 16:29:57 2008 +0000 if no identity is found while building disco response, create a soap fault response lasso/id-wsf/discovery.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) commit 47641f88bf9531cd51b818aabe46368a7b08ad2e Author: Benjamin Dauvergne Date: Mon Dec 1 17:30:35 2008 +0000 Use assignment macros in id-wsf 2.0 module * lasso/id-wsf-2.0/data_service.c, lasso/id-wsf-2.0/discovery.c, lasso/id-wsf-2.0/profile.c: use assignment macros to maintain proper reference counting and ownership of object field values. lasso/id-wsf-2.0/data_service.c | 26 +++++++++-------------- lasso/id-wsf-2.0/discovery.c | 17 +++++++-------- lasso/id-wsf-2.0/profile.c | 47 +++++++++++++---------------------------- 3 files changed, 33 insertions(+), 57 deletions(-) commit 6d12685ed63de044d020279e2f14fed3b2629356 Author: Benjamin Dauvergne Date: Fri Nov 28 15:58:05 2008 +0000 Fix lasso.pc.in Cflags field * lasso.pc.in: cflags must contain include directory lasso.pc.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 253b0a2e5be803ad4872dbbedc41e953e68d5d4a Author: Benjamin Dauvergne Date: Wed Nov 26 12:26:31 2008 +0000 Add errors.h.in to EXTRA_DIST * lasso/Makefile.am: errors.h.in must be distributed. lasso/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 06bd727e9de866d47bf219b871894fff73f0b66a Author: Benjamin Dauvergne Date: Thu Nov 20 10:44:02 2008 +0000 Add me. AUTHORS | 1 + 1 file changed, 1 insertion(+) commit 7e9ab6b241803cd86a09c6d10f351fa032153852 Author: Benjamin Dauvergne Date: Wed Nov 19 16:00:42 2008 +0000 Fix refcounting error in SoapEnvelope class - lasso/xml/soap_envelope.c (lasso_soap_envelope_new): fix forgotten reference count increase when assigning the body. lasso/xml/soap_envelope.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 986a32f10a0681c825a02a2b4b494ac98f7379a2 Author: Benjamin Dauvergne Date: Fri Nov 14 10:52:34 2008 +0000 Fix uninitialized local variable - bindings/java/wrapper_top.c: (gobject_to_jobject_and_ref) initialize local variable. bindings/java/wrapper_top.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit adf6e9cb01bd7bd3cb73f76afd05fdb08a6468a6 Author: Benjamin Dauvergne Date: Mon Nov 10 16:57:36 2008 +0000 Add support to in memory private key to lasso_query_sign - lasso/xml/tools.c: use BIO_new_mem_buf instead of BIO_new_file if private_key is not an existing file. lasso/xml/tools.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) commit d01eec1b57ca30551fd501f88fb89272b898d19a Author: Benjamin Dauvergne Date: Wed Nov 5 23:38:26 2008 +0000 Add missing intialization - lasso/id-ff/provider.c,lasso/id-ff/server.c: add missing initialization of return code variable. lasso/id-ff/provider.c | 4 ++-- lasso/id-ff/server.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) commit b4391766a52a9af4a70dbf235b8d0e9ceda613d0 Author: Benjamin Dauvergne Date: Wed Nov 5 14:38:00 2008 +0000 Fix missing include lasso/utils.h | 2 ++ 1 file changed, 2 insertions(+) commit aff32ad997c347ecb01199b98040ec81957b4b9c Author: Benjamin Dauvergne Date: Wed Nov 5 11:23:29 2008 +0000 Add log message in the metadata loading process - lasso/id-ff/provider.c, lasso/saml-2.0/provider.c: add critical log message in each failed loading of metadatas branch cases. lasso/id-ff/provider.c | 10 +++++++++- lasso/saml-2.0/provider.c | 9 +++++++-- 2 files changed, 16 insertions(+), 3 deletions(-) commit f60b39eb9a4466a48e873660dd818e51831147cf Author: Benjamin Dauvergne Date: Wed Nov 5 11:23:27 2008 +0000 Add new internal function to show safe extracts - lasso/utils.c, lasso/utils.h: New internal api lasso_safe_prefix_string that can show any string taking care of escaping newlines,tabs and non-graphical ou non-ASCII characters. lasso/Makefile.am | 2 +- lasso/utils.c | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ lasso/utils.h | 4 +++ 3 files changed, 91 insertions(+), 1 deletion(-) commit a30f9f6b9e8e66ffffb10e0205a6c123316eaa61 Author: Benjamin Dauvergne Date: Wed Nov 5 11:23:26 2008 +0000 Fix uninitialized return code Thanks Emmanuel Dreyfus lasso/id-ff/provider.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 095dfe6b1a78ec4f18ec0b4b224d0b1c95a0006e Author: Benjamin Dauvergne Date: Tue Nov 4 01:58:55 2008 +0000 Fix overwriting of attributes ht by node lists - lasso/xml/xml.c: - In lasso_node_impl_init_from_xml fix really old bug seen when running ID-WSF 2 python tests, when looking for snippet_any field in the GObject we should not take the any attribute field, otherwise the field value is gonna be overwritten with new GList nodes. The problem ca be seen only with classes using the two kind of snippets (ANY nodes and ANY attributs). lasso/xml/xml.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 7103e81888652aa46f28ee0aee29bbcc94c088b2 Author: Benjamin Dauvergne Date: Tue Nov 4 01:58:53 2008 +0000 Change style of error and dellocation handling - lasso/id-ff/provider.c: - in lasso_provider_verify_signature use standardised memory and error handling macros, and also standard return code variable name and exit label. - in lasso_providerl_load_metadata_from_buffer and lasso_provider_load_metadata use the standardised macros, exit labels and return code variable. - lasso/id-ff/server.c: - in lasso_server_load_affiliation use standardised allocation and error handling macros. - lasso/id-wsf/wsf_profile.c: - use standardised memory and error handling macros in lasso_wsf_profile_build_soap_request_msg. lasso/id-ff/provider.c | 123 ++++++++++++++++----------------------------- lasso/id-ff/server.c | 12 ++--- lasso/id-wsf/wsf_profile.c | 4 +- 3 files changed, 46 insertions(+), 93 deletions(-) commit c5249bab79cda68c44565e030076e4c0a78a5868 Author: Benjamin Dauvergne Date: Tue Nov 4 01:58:51 2008 +0000 Move xmlDoc release after xmlFreeXPath* - lasso/xml/xml.c: - in lasso_node_new_from_soap release xmlDoc (and the contained nodes) after the XPath objects that can reference them. lasso/xml/xml.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 0d66367f2892a9f1e18fde1e6984bef65c5bd732 Author: Benjamin Dauvergne Date: Tue Nov 4 01:58:49 2008 +0000 Remove use of xmlFreeDoc for lasso_release_doc - bindings/java/wrapper_top.c, bindings/php4/lasso_php4_helper.c, bindings/php5/wrapper_source_top.c, bindings/python/wrapper_top.c, lasso/id-ff/identity.c, lasso/id-ff/lecp.c, lasso/id-ff/login.c, lasso/id-ff/logout.c, lasso/id-ff/name_registration.c, lasso/id-ff/profile.c, lasso/id-ff/provider.c, lasso/id-ff/server.c, lasso/id-ff/session.c, lasso/id-wsf-2.0/data_service.c, lasso/id-wsf/data_service.c, lasso/id-wsf/discovery.c, lasso/id-wsf/wsf_profile.c, lasso/saml-2.0/ecp.c, lasso/saml-2.0/login.c, lasso/saml-2.0/name_id_management.c, lasso/utils.h, lasso/xml/tools.c, lasso/xml/xml.c, swig/Lasso.i: Remove use of xmlFreeDoc. Use lasso_release_doc instead. bindings/java/wrapper_top.c | 3 ++- bindings/php4/lasso_php4_helper.c | 3 ++- bindings/php5/wrapper_source_top.c | 3 ++- bindings/python/wrapper_top.c | 3 ++- lasso/id-ff/identity.c | 4 ++-- lasso/id-ff/lecp.c | 3 ++- lasso/id-ff/login.c | 3 ++- lasso/id-ff/logout.c | 3 ++- lasso/id-ff/name_registration.c | 3 ++- lasso/id-ff/profile.c | 3 ++- lasso/id-ff/provider.c | 16 ++++++++-------- lasso/id-ff/server.c | 4 ++-- lasso/id-ff/session.c | 4 ++-- lasso/id-wsf-2.0/data_service.c | 7 ++++--- lasso/id-wsf/data_service.c | 8 ++++---- lasso/id-wsf/discovery.c | 3 ++- lasso/id-wsf/wsf_profile.c | 6 +++--- lasso/saml-2.0/ecp.c | 5 +++-- lasso/saml-2.0/login.c | 6 ++++-- lasso/saml-2.0/name_id_management.c | 3 ++- lasso/xml/tools.c | 5 +++-- lasso/xml/xml.c | 10 +++++----- swig/Lasso.i | 8 +++++--- 23 files changed, 67 insertions(+), 49 deletions(-) commit e6b196279f38b80170efd8d0748b31b489f04b15 Author: Benjamin Dauvergne Date: Tue Nov 4 01:58:44 2008 +0000 Clean generated files in bindings * bindings/java/Makefile.am: * bindings/php5/Makefile.am: * bindings/python/Makefile.am: - reformat value and add generated files to the MOSTLYCLEANFILES variable bindings/java/Makefile.am | 6 +++++- bindings/php5/Makefile.am | 1 + bindings/python/Makefile.am | 1 + 3 files changed, 7 insertions(+), 1 deletion(-) commit a62a31e5bcb73b22249291bf53df578f7207b611 Author: Benjamin Dauvergne Date: Tue Nov 4 01:58:42 2008 +0000 Add new utils macros - lasso/utils.h: - add goto_exit_with_rc a standardized macro that suppose having an 'int rc' variable and an exit label in the current function. - add lasso_release_output_buffer macro lasso/utils.h | 9 +++++++++ 1 file changed, 9 insertions(+) commit 4e28ae10255bf8d33b20e321d541ba56f0a43594 Author: Benjamin Dauvergne Date: Tue Nov 4 01:58:40 2008 +0000 Fix lasso_assign_node: wrong xmlFreeNodeList * lasso/utils.h: - (lasso_assign_node) This macro wrongly assumes that the destroy function for xmlNode is xmlFreeNodeList but it's xmlFreeNode. xmlFreeNodeList is for xmlNode list of children. lasso/utils.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 12afeac7164b9af7273d5e26d749b2084bc41e91 Author: Benjamin Dauvergne Date: Mon Nov 3 15:01:33 2008 +0000 Restore ABI compatibility wrt original_xmlNode * lasso/xml/xml.c: - use set/get_qdata to store the original xmlnode, modify init_from_xml and dispose function to cope with this new storage place. * lasso/xml/xml.h: - remove field original_xmlNode from structure LassoNode to keep ABI compatibility with previous versions. - declare new API lasso_node_get_original_xmlnode lasso/xml/xml.c | 42 +++++++++++++++++++++++++++++++++--------- lasso/xml/xml.h | 2 +- 2 files changed, 34 insertions(+), 10 deletions(-) commit a8adf797fefd1440d2c421a90a4c1fee46afc317 Author: Benjamin Dauvergne Date: Mon Nov 3 14:15:44 2008 +0000 API to cleanup LassoNode tree of keeped xmlNode * lasso/xml/xml.c: - add a new function lasso_node_cleanup_original_xmlnodes to disallocate all keeped xmlNode inside a tree of LassoNodes. - add internal function lasso_node_traversal to iterate across a LassoNode tree (could be used to reimplement lasso_node_destroy) It is a preorder traversal. lasso/xml/xml.c | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ lasso/xml/xml.h | 1 + 2 files changed, 63 insertions(+) commit 770e3c5538b3cb69da76cae3c8fbe44e16f14f8e Author: Benjamin Dauvergne Date: Mon Nov 3 14:15:43 2008 +0000 Add support for keep_xmlnode flag * lasso/xml/xml.c: - (lasso_node_impl_init_from_xml) When the keep_xmlnode flag is true for the currently parsed Node class, we copy the parsed xmlNode and keep inside the LassoNode. - (lasso_node_dispose) if an original_xmlNode is present, we disallocate it. lasso/xml/xml.c | 11 +++++++++++ 1 file changed, 11 insertions(+) commit 10156acfa832ffc0d4a8626be04411d1821862a8 Author: Benjamin Dauvergne Date: Mon Nov 3 14:15:41 2008 +0000 Add original_xmlNode pointer to LassoNode * lasso/xml/xml.h: add an xmlNode field to base class LassoNode, to permit retrieving the xmlNode originally parsed when the structure is the result of parsing. Will be used by signature checking code. lasso/xml/xml.h | 1 + 1 file changed, 1 insertion(+) commit b332d295da8229663fd202f173cb41b62a456606 Author: Benjamin Dauvergne Date: Mon Nov 3 14:15:40 2008 +0000 Add keep_xmlnode field to LassoNodeClassData * lasso/xml/private.h: add a boolean flag named keep_xmlnode to base class structure LassoNodeClassData. lasso/xml/private.h | 1 + 1 file changed, 1 insertion(+) commit aec50b7a93ba229dd220a89152b84684986bd660 Author: Benjamin Dauvergne Date: Sun Nov 2 11:49:59 2008 +0000 Add test case for loading server completely from memory * tests/login_test.c: - add generateIdentityProviderContextDumpMemory that first load metadata, private_key and certificate file using g_file_get_contents then use the created buffers to initialize a LassoServer object. - add test03_serviceProviderLogin that use the new function. tests/login_tests.c | 167 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 167 insertions(+) commit 618639623cc6fcde3cd0e11606233bbdc5cbdba5 Author: Benjamin Dauvergne Date: Sun Nov 2 11:49:58 2008 +0000 LassoServer init_from_xml/new_from_buffer handling * lasso/id-ff/server.c: (init_from_xml) if load_metadata fail try load_metadata_from_buffer instead using the content of the dumped nodes. lasso/id-ff/provider.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 5f163bbffdcb560b3b651f634fb3ada523e3ce0c Author: Benjamin Dauvergne Date: Sun Nov 2 11:49:56 2008 +0000 Add new constructor lasso_server_new_from_buffers * lasso/id-ff/server.c, lasso/id-ff/server.h: add new function to build a LassoServer object holding content of certificate and private key files intead of loading them everytime signing is needed. You must instead load them yourself the first time. lasso/id-ff/provider.c | 3 +++ lasso/id-ff/server.c | 35 +++++++++++++++++++++++++++++++++++ lasso/id-ff/server.h | 5 +++++ 3 files changed, 43 insertions(+) commit 2ca9f2c46a9a7450f8255dba395988b22be47a82 Author: Benjamin Dauvergne Date: Sun Nov 2 11:49:55 2008 +0000 Export lasso_provider_load_metadata_from_buffer * lasso/id-ff/providerprivate.h: add declaration for private function lasso_provider_load_metadata_from_buffer lasso/id-ff/providerprivate.h | 1 + 1 file changed, 1 insertion(+) commit 810f2a9bf97346ddeb9cec9b530f3b6210fd05ea Author: Benjamin Dauvergne Date: Sun Nov 2 11:49:53 2008 +0000 Add verification of access before calling libxml loading function * lasso/id-ff/provider.c: (lasso_provider_load_metadata) libxml emit warning when trying to parse non-existing or non-accessible file, so verify that the file is accessible before calling libxml. (the corner case of having warning when the file become inaccessible between the two calls is non-interesting) lasso/id-ff/provider.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit e6dfd11cd4d7027c746d3ea225ec6ac4a002f337 Author: Benjamin Dauvergne Date: Sun Nov 2 11:49:51 2008 +0000 First try accessing the file before calling key loading functions * lasso/xml/tools.c: (lasso_sign_node) instead of waiting for the xmlsec key loading function to fail before trying to load the key directly from the private_key buffer, test it using POSIX function. lasso/xml/tools.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) commit 1032903f491db4069d37015100d4fda85906b158 Author: Benjamin Dauvergne Date: Sun Nov 2 11:49:49 2008 +0000 Add possibility to sign using preloaded keys * lasso/xml/tools.c: - (lasso_sign_node) if loading of the private_key or the certificate file we try to use the filename directly as a key in the PEM format. lasso/xml/tools.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) commit ec1e2946169e07ce6f3a2ce943ae7d0d228ce708 Author: Benjamin Dauvergne Date: Wed Oct 22 03:28:47 2008 +0000 Add missing initializations. lasso/id-wsf/authentication.c | 2 +- lasso/id-wsf/data_service.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 08c80ab93443a8dee1c13dd4a62274265b04d12b Author: Benjamin Dauvergne Date: Thu Oct 16 21:33:25 2008 +0000 Add substitute code for g_strcmp0 lasso/lasso.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) commit 4b007b73e1d7bec23dfb234e733c1f7d6cdc87c8 Author: Benjamin Dauvergne Date: Mon Oct 13 11:44:11 2008 +0000 Integrate modification from Olav Morken It fixes bad url encoding of relaystates for logout profile. A better fix for all profiles is coming. lasso/xml/saml-2.0/samlp2_logout_response.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) commit 2bcf34e0dfa13e6066e98de8b7fd4074a5ebbdfd Author: Benjamin Dauvergne Date: Mon Oct 13 11:44:09 2008 +0000 add files to nodist_HEADERS to pass distcheck lasso/Makefile.am | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit ef42f2cbc8eb16df1a8e45650c652d227fd35ef4 Author: Benjamin Dauvergne Date: Wed Oct 1 10:31:58 2008 +0000 add functionality to enable debugging flags at runtime This code permit to set flags, separated by commas, space, tabulations, or colons. This flags activates debug functions like, suppressing validations of signatures or print debugging message about deallocations. The new flags are defined in /lasso/debug.h they can be set using an environment variable named LASSO_FLAG or a function named lasso_set_flag. There are two flags currently: - verify-signature: To deactivate it, pass 'no-verify-signature' inside LASSO_DEBUG. It desactivate signature verification, inside two functions: lasso_query_verify_signature and lasso_provider_verify_signature. - memory-debug: It enabled reporting of memory deallocation inside generic memory dellaocator for LassoNode objects and also in bindings. - lasso/xml/xml.c: do not free a null hash table pointer. bindings/java/Makefile.am | 2 -- bindings/php5/Makefile.am | 2 -- bindings/python/wrapper_top.c | 13 ++++---- configure.ac | 9 +++--- lasso/debug.h | 41 +++++++++++++++++++++++++ lasso/extract_symbols.py | 2 +- lasso/id-ff/provider.c | 4 +++ lasso/lasso.c | 70 +++++++++++++++++++++++++++++++++++++++++-- lasso/lasso.h | 2 ++ lasso/xml/tools.c | 6 ++++ lasso/xml/xml.c | 19 +++++++----- perl/Makefile.am | 2 -- 12 files changed, 144 insertions(+), 28 deletions(-) commit 7290225b00d65a7ea111ddf3216bf7d9f39a81b6 Author: Damien Laniel Date: Wed Oct 1 10:25:52 2008 +0000 cleaned up some code lasso/id-wsf/wsf_profile.c | 29 ++++++++++++----------------- 1 file changed, 12 insertions(+), 17 deletions(-) commit 1319b317e1ff4db9848fb864151ef983dcfda7ff Author: Damien Laniel Date: Wed Oct 1 10:08:36 2008 +0000 fixed docstrings ; added an exported function ; reorganised functions in file lasso/id-wsf/utils.c | 73 +++++++++++++++++++++++++++++++--------------------- lasso/id-wsf/utils.h | 6 +++-- 2 files changed, 47 insertions(+), 32 deletions(-) commit 2599e7abb8313338f0ffe2ce7fe8288d883442f7 Author: Damien Laniel Date: Wed Oct 1 09:55:40 2008 +0000 fixed segfaults lasso/id-wsf/utils.c | 23 +++++++++++++++-------- lasso/id-wsf/wsf_profile.c | 6 ++++-- 2 files changed, 19 insertions(+), 10 deletions(-) commit ae665ecae8919a1eb24f9598378fc7205432bc87 Author: Damien Laniel Date: Wed Oct 1 09:11:29 2008 +0000 fixed xml indentation tests/data/sp5-saml2/metadata.xml | 98 +++++++++++++++++++-------------------- 1 file changed, 49 insertions(+), 49 deletions(-) commit d8f2c4f31e1dd4ab7c9d79d81ce163ed832ee5ff Author: Damien Laniel Date: Tue Sep 23 15:15:39 2008 +0000 If ProviderID isn't found in an AuthnResponse, immediately return a critical error lasso/id-ff/login.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) commit 152ec6d42e639266000c9a4ea2da1cc920f7df78 Author: Benjamin Dauvergne Date: Tue Sep 23 09:13:09 2008 +0000 Many fix to compile with --enable-wsf and --enable-debugging and also to remove valgrind errors through python tests. 1. Rename lasso_wsf_profile_new_full for java bindings (cannot subclass in overrides of static methods). 2. Add const modifiers to many functon signatures in bindings/python/wrapper_top.c. 3. add initialisation of private_data->encryption_sym_key_type (to please valgrind) in instance_init of LassoProvider. 4. Add new macro to assign xmlNode, we consider xmlNode to be an immutable value, and always use xmlCopyNode for assignment. The macros is called named lasso_assign_node. 5. Fix segfault, when using xmlSec to encrypt the newly created encrypted node replace the original node inside the xmlDoc structure, and the original node is freed automatically. So you cannot borrow the encrypted if you do not remove it from xmlDoc first. bindings/java/wrapper_top.c | 36 +++++++++++++++++++++--------------- bindings/overrides.xml | 1 + lasso/id-ff/provider.c | 1 + lasso/utils.h | 7 +++++++ lasso/xml/xml.c | 33 +++++++++++++++------------------ 5 files changed, 45 insertions(+), 33 deletions(-) commit db5d229004d3ccab34c23c0c9b2d29e64f717865 Author: Damien Laniel Date: Wed Sep 17 13:14:12 2008 +0000 free xmlDoc only once lasso/id-ff/provider.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) commit cd5bbfe1878c7f15a2a1fd6fbc7166d39e9bc00b Author: Damien Laniel Date: Wed Sep 17 12:40:12 2008 +0000 fixed docstring lasso/id-ff/provider.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 3b071795ddcbc799206ab5dbf0bff06ba796057c Author: Damien Laniel Date: Wed Sep 17 09:05:43 2008 +0000 php: added a root class to define generic getter and setter bindings/php5/php_code.py | 49 +++++++++++++++++++++++++---------------------- 1 file changed, 26 insertions(+), 23 deletions(-) commit 6b9a2651020d56ddcc0de66b6c93e23f04508b3c Author: Damien Laniel Date: Wed Sep 17 08:32:01 2008 +0000 fixed docstrings which fucked php5 binding lasso/id-ff/server.c | 2 +- lasso/id-wsf/discovery.c | 6 +++--- lasso/id-wsf/wsf_profile.c | 10 +++++----- 3 files changed, 9 insertions(+), 9 deletions(-) commit a18ddb94e051c3fe5bbc9b88220f77af2b6f69c3 Author: Damien Laniel Date: Tue Sep 16 16:31:05 2008 +0000 fixed various bugs with new compilation flags lasso/id-ff/identity.c | 2 +- lasso/id-ff/login.c | 8 +++----- lasso/id-ff/server.c | 2 +- lasso/id-ff/session.c | 14 +++++++------- lasso/id-wsf/authentication.c | 6 +++--- lasso/id-wsf/discovery.c | 8 ++++---- lasso/id-wsf/interaction_profile_service.c | 8 +------- lasso/id-wsf/personal_profile_service.c | 16 ++-------------- lasso/id-wsf/wsf_profile.c | 19 ++++++++++--------- lasso/xml/is_select.c | 2 +- lasso/xml/is_select.h | 3 +-- lasso/xml/sec_resource_access_statement.c | 7 +------ perl/Makefile.am | 2 +- swig/Lasso-wsf-is.i | 2 +- 14 files changed, 37 insertions(+), 62 deletions(-) commit 09bbae229e0b790e9435578630dc8dc068d159d2 Author: Damien Laniel Date: Tue Sep 16 13:02:47 2008 +0000 enable optimisation flag when not debugging configure.ac | 1 + 1 file changed, 1 insertion(+) commit 9ed0670e48665f590eda685e0cfebf8c4cadb8fb Author: Benjamin Dauvergne Date: Fri Sep 12 15:06:58 2008 +0000 * Remove ending blanks bindings/bindings.py | 6 +- bindings/ghashtable.h | 2 +- bindings/java/lang.py | 12 +- bindings/java/wrapper_top.c | 52 ++++---- bindings/php4/lang.py | 18 +-- bindings/php4/lasso_php4_helper.c | 6 +- bindings/php5/lang.py | 2 +- bindings/php5/php_code.py | 6 +- bindings/php5/wrapper_header.py | 2 +- bindings/php5/wrapper_source.py | 2 +- bindings/php5/wrapper_source_top.c | 6 +- bindings/python/lang.py | 8 +- bindings/python/tests/XmlTestRunner.py | 6 +- bindings/python/tests/binding_tests.py | 4 +- bindings/python/tests/idwsf1_tests.py | 18 +-- bindings/python/tests/idwsf2_tests.py | 26 ++-- bindings/python/tests/profiles_tests.py | 6 +- bindings/python/tests/tests.py | 10 +- bindings/python/wrapper_top.c | 42 +++--- bindings/utils.py | 6 +- lasso/errors.h | 8 +- lasso/export.h | 18 +-- lasso/id-ff/defederation.c | 36 ++--- lasso/id-ff/defederation.h | 12 +- lasso/id-ff/federation.c | 6 +- lasso/id-ff/federation.h | 10 +- lasso/id-ff/identity.c | 16 +-- lasso/id-ff/identity.h | 10 +- lasso/id-ff/identityprivate.h | 8 +- lasso/id-ff/lecp.c | 26 ++-- lasso/id-ff/lecp.h | 12 +- lasso/id-ff/login.c | 148 ++++++++++----------- lasso/id-ff/login.h | 12 +- lasso/id-ff/loginprivate.h | 10 +- lasso/id-ff/logout.c | 62 ++++----- lasso/id-ff/logout.h | 12 +- lasso/id-ff/logoutprivate.h | 10 +- lasso/id-ff/name_identifier_mapping.c | 38 +++--- lasso/id-ff/name_identifier_mapping.h | 14 +- lasso/id-ff/name_registration.c | 56 ++++---- lasso/id-ff/name_registration.h | 12 +- lasso/id-ff/profile.c | 14 +- lasso/id-ff/profile.h | 12 +- lasso/id-ff/profileprivate.h | 10 +- lasso/id-ff/provider.c | 24 ++-- lasso/id-ff/provider.h | 14 +- lasso/id-ff/providerprivate.h | 10 +- lasso/id-ff/server.c | 32 ++--- lasso/id-ff/server.h | 12 +- lasso/id-ff/serverprivate.h | 10 +- lasso/id-ff/session.c | 20 +-- lasso/id-ff/session.h | 12 +- lasso/id-ff/sessionprivate.h | 14 +- lasso/id-wsf-2.0/data_service.c | 14 +- lasso/id-wsf-2.0/data_service.h | 18 +-- lasso/id-wsf-2.0/discovery.c | 28 ++-- lasso/id-wsf-2.0/discovery.h | 20 +-- lasso/id-wsf-2.0/identity.h | 8 +- lasso/id-wsf-2.0/profile.c | 8 +- lasso/id-wsf-2.0/profile.h | 12 +- lasso/id-wsf-2.0/server.h | 12 +- lasso/id-wsf-2.0/session.h | 8 +- lasso/id-wsf/authentication.c | 20 +-- lasso/id-wsf/authentication.h | 12 +- lasso/id-wsf/data_service.c | 36 ++--- lasso/id-wsf/data_service.h | 14 +- lasso/id-wsf/data_service_private.h | 10 +- lasso/id-wsf/discovery.c | 38 +++--- lasso/id-wsf/discovery.h | 12 +- lasso/id-wsf/identity.h | 8 +- lasso/id-wsf/interaction_profile_service.c | 6 +- lasso/id-wsf/interaction_profile_service.h | 12 +- lasso/id-wsf/personal_profile_service.c | 14 +- lasso/id-wsf/personal_profile_service.h | 12 +- lasso/id-wsf/utils.c | 22 +-- lasso/id-wsf/utils.h | 8 +- lasso/id-wsf/wsf_profile.c | 86 ++++++------ lasso/id-wsf/wsf_profile.h | 22 +-- lasso/id-wsf/wsf_profile_private.h | 10 +- lasso/lasso.c | 20 +-- lasso/lasso.h | 10 +- lasso/saml-2.0/assertion_query.c | 34 ++--- lasso/saml-2.0/assertion_query.h | 12 +- lasso/saml-2.0/ecp.c | 8 +- lasso/saml-2.0/ecp.h | 12 +- lasso/saml-2.0/ecpprivate.h | 10 +- lasso/saml-2.0/federation.c | 6 +- lasso/saml-2.0/federationprivate.h | 8 +- lasso/saml-2.0/login.c | 50 +++---- lasso/saml-2.0/loginprivate.h | 8 +- lasso/saml-2.0/logout.c | 28 ++-- lasso/saml-2.0/logoutprivate.h | 8 +- lasso/saml-2.0/name_id_management.c | 44 +++--- lasso/saml-2.0/name_id_management.h | 12 +- lasso/saml-2.0/profile.c | 10 +- lasso/saml-2.0/profile.h | 10 +- lasso/saml-2.0/profileprivate.h | 8 +- lasso/saml-2.0/provider.c | 12 +- lasso/saml-2.0/providerprivate.h | 8 +- lasso/saml-2.0/server.c | 12 +- lasso/saml-2.0/serverprivate.h | 8 +- lasso/utils.h | 12 +- lasso/xml/disco_authenticate_requester.c | 12 +- lasso/xml/disco_authenticate_requester.h | 12 +- lasso/xml/disco_authenticate_session_context.c | 12 +- lasso/xml/disco_authenticate_session_context.h | 12 +- lasso/xml/disco_authorize_requester.c | 12 +- lasso/xml/disco_authorize_requester.h | 12 +- lasso/xml/disco_credentials.c | 10 +- lasso/xml/disco_credentials.h | 10 +- lasso/xml/disco_description.c | 22 +-- lasso/xml/disco_description.h | 12 +- lasso/xml/disco_encrypt_resource_id.c | 12 +- lasso/xml/disco_encrypt_resource_id.h | 12 +- lasso/xml/disco_encrypted_resource_id.c | 8 +- lasso/xml/disco_encrypted_resource_id.h | 10 +- lasso/xml/disco_generate_bearer_token.c | 12 +- lasso/xml/disco_generate_bearer_token.h | 12 +- lasso/xml/disco_insert_entry.c | 10 +- lasso/xml/disco_insert_entry.h | 10 +- lasso/xml/disco_modify.c | 12 +- lasso/xml/disco_modify.h | 12 +- lasso/xml/disco_modify_response.c | 18 +-- lasso/xml/disco_modify_response.h | 14 +- lasso/xml/disco_options.c | 10 +- lasso/xml/disco_options.h | 12 +- lasso/xml/disco_query.c | 14 +- lasso/xml/disco_query.h | 12 +- lasso/xml/disco_query_response.c | 10 +- lasso/xml/disco_query_response.h | 10 +- lasso/xml/disco_remove_entry.c | 14 +- lasso/xml/disco_remove_entry.h | 10 +- lasso/xml/disco_requested_service_type.c | 8 +- lasso/xml/disco_requested_service_type.h | 10 +- lasso/xml/disco_resource_id.c | 10 +- lasso/xml/disco_resource_id.h | 10 +- lasso/xml/disco_resource_offering.c | 14 +- lasso/xml/disco_resource_offering.h | 10 +- lasso/xml/disco_send_single_logout.c | 12 +- lasso/xml/disco_send_single_logout.h | 12 +- lasso/xml/disco_service_instance.c | 16 +-- lasso/xml/disco_service_instance.h | 12 +- lasso/xml/ds_key_info.c | 12 +- lasso/xml/ds_key_info.h | 12 +- lasso/xml/ds_key_value.c | 12 +- lasso/xml/ds_key_value.h | 12 +- lasso/xml/ds_rsa_key_value.c | 12 +- lasso/xml/ds_rsa_key_value.h | 10 +- lasso/xml/dst_data.c | 10 +- lasso/xml/dst_data.h | 12 +- lasso/xml/dst_modification.c | 8 +- lasso/xml/dst_modification.h | 12 +- lasso/xml/dst_modify.c | 8 +- lasso/xml/dst_modify.h | 12 +- lasso/xml/dst_modify_response.c | 8 +- lasso/xml/dst_modify_response.h | 12 +- lasso/xml/dst_new_data.c | 8 +- lasso/xml/dst_new_data.h | 12 +- lasso/xml/dst_query.c | 8 +- lasso/xml/dst_query.h | 12 +- lasso/xml/dst_query_item.c | 8 +- lasso/xml/dst_query_item.h | 12 +- lasso/xml/dst_query_response.c | 8 +- lasso/xml/dst_query_response.h | 10 +- lasso/xml/id-wsf-2.0/disco_abstract.c | 10 +- lasso/xml/id-wsf-2.0/disco_abstract.h | 10 +- lasso/xml/id-wsf-2.0/disco_endpoint_context.c | 8 +- lasso/xml/id-wsf-2.0/disco_endpoint_context.h | 10 +- lasso/xml/id-wsf-2.0/disco_keys.c | 8 +- lasso/xml/id-wsf-2.0/disco_keys.h | 10 +- lasso/xml/id-wsf-2.0/disco_options.c | 8 +- lasso/xml/id-wsf-2.0/disco_options.h | 10 +- lasso/xml/id-wsf-2.0/disco_provider_id.c | 10 +- lasso/xml/id-wsf-2.0/disco_provider_id.h | 10 +- lasso/xml/id-wsf-2.0/disco_query.c | 10 +- lasso/xml/id-wsf-2.0/disco_query.h | 10 +- lasso/xml/id-wsf-2.0/disco_query_response.c | 10 +- lasso/xml/id-wsf-2.0/disco_query_response.h | 10 +- lasso/xml/id-wsf-2.0/disco_requested_service.c | 26 ++-- lasso/xml/id-wsf-2.0/disco_requested_service.h | 10 +- lasso/xml/id-wsf-2.0/disco_security_context.c | 10 +- lasso/xml/id-wsf-2.0/disco_security_context.h | 10 +- lasso/xml/id-wsf-2.0/disco_service_context.c | 8 +- lasso/xml/id-wsf-2.0/disco_service_context.h | 10 +- lasso/xml/id-wsf-2.0/disco_service_type.c | 10 +- lasso/xml/id-wsf-2.0/disco_service_type.h | 10 +- .../xml/id-wsf-2.0/disco_svc_md_association_add.c | 8 +- .../xml/id-wsf-2.0/disco_svc_md_association_add.h | 10 +- .../disco_svc_md_association_add_response.c | 8 +- .../disco_svc_md_association_add_response.h | 10 +- .../id-wsf-2.0/disco_svc_md_association_delete.c | 8 +- .../id-wsf-2.0/disco_svc_md_association_delete.h | 10 +- .../disco_svc_md_association_delete_response.c | 8 +- .../disco_svc_md_association_delete_response.h | 10 +- .../id-wsf-2.0/disco_svc_md_association_query.c | 8 +- .../id-wsf-2.0/disco_svc_md_association_query.h | 10 +- .../disco_svc_md_association_query_response.c | 8 +- .../disco_svc_md_association_query_response.h | 10 +- lasso/xml/id-wsf-2.0/disco_svc_md_delete.c | 8 +- lasso/xml/id-wsf-2.0/disco_svc_md_delete.h | 10 +- .../xml/id-wsf-2.0/disco_svc_md_delete_response.c | 8 +- .../xml/id-wsf-2.0/disco_svc_md_delete_response.h | 10 +- lasso/xml/id-wsf-2.0/disco_svc_md_query.c | 8 +- lasso/xml/id-wsf-2.0/disco_svc_md_query.h | 10 +- lasso/xml/id-wsf-2.0/disco_svc_md_query_response.c | 8 +- lasso/xml/id-wsf-2.0/disco_svc_md_query_response.h | 10 +- lasso/xml/id-wsf-2.0/disco_svc_md_register.c | 8 +- lasso/xml/id-wsf-2.0/disco_svc_md_register.h | 10 +- .../id-wsf-2.0/disco_svc_md_register_response.c | 12 +- .../id-wsf-2.0/disco_svc_md_register_response.h | 10 +- lasso/xml/id-wsf-2.0/disco_svc_md_replace.c | 8 +- lasso/xml/id-wsf-2.0/disco_svc_md_replace.h | 10 +- .../xml/id-wsf-2.0/disco_svc_md_replace_response.c | 8 +- .../xml/id-wsf-2.0/disco_svc_md_replace_response.h | 10 +- lasso/xml/id-wsf-2.0/disco_svc_metadata.c | 8 +- lasso/xml/id-wsf-2.0/disco_svc_metadata.h | 10 +- lasso/xml/id-wsf-2.0/dst_data_response_base.c | 8 +- lasso/xml/id-wsf-2.0/dst_data_response_base.h | 10 +- lasso/xml/id-wsf-2.0/dst_delete_item_base.c | 8 +- lasso/xml/id-wsf-2.0/dst_delete_item_base.h | 10 +- lasso/xml/id-wsf-2.0/dst_delete_response.c | 8 +- lasso/xml/id-wsf-2.0/dst_delete_response.h | 10 +- lasso/xml/id-wsf-2.0/dst_request.c | 8 +- lasso/xml/id-wsf-2.0/dst_request.h | 10 +- lasso/xml/id-wsf-2.0/dst_result_query_base.c | 8 +- lasso/xml/id-wsf-2.0/dst_result_query_base.h | 10 +- lasso/xml/id-wsf-2.0/dst_test_item_base.c | 8 +- lasso/xml/id-wsf-2.0/dst_test_item_base.h | 10 +- lasso/xml/id-wsf-2.0/dstref_app_data.c | 8 +- lasso/xml/id-wsf-2.0/dstref_app_data.h | 10 +- lasso/xml/id-wsf-2.0/dstref_create.c | 8 +- lasso/xml/id-wsf-2.0/dstref_create.h | 10 +- lasso/xml/id-wsf-2.0/dstref_create_item.c | 8 +- lasso/xml/id-wsf-2.0/dstref_create_item.h | 10 +- lasso/xml/id-wsf-2.0/dstref_create_response.c | 8 +- lasso/xml/id-wsf-2.0/dstref_create_response.h | 10 +- lasso/xml/id-wsf-2.0/dstref_data.c | 8 +- lasso/xml/id-wsf-2.0/dstref_data.h | 10 +- lasso/xml/id-wsf-2.0/dstref_data_response.c | 8 +- lasso/xml/id-wsf-2.0/dstref_data_response.h | 10 +- lasso/xml/id-wsf-2.0/dstref_delete.c | 8 +- lasso/xml/id-wsf-2.0/dstref_delete.h | 10 +- lasso/xml/id-wsf-2.0/dstref_delete_item.c | 8 +- lasso/xml/id-wsf-2.0/dstref_delete_item.h | 10 +- lasso/xml/id-wsf-2.0/dstref_delete_response.c | 8 +- lasso/xml/id-wsf-2.0/dstref_delete_response.h | 10 +- lasso/xml/id-wsf-2.0/dstref_item_data.c | 8 +- lasso/xml/id-wsf-2.0/dstref_item_data.h | 10 +- lasso/xml/id-wsf-2.0/dstref_modify.c | 8 +- lasso/xml/id-wsf-2.0/dstref_modify.h | 10 +- lasso/xml/id-wsf-2.0/dstref_modify_item.c | 8 +- lasso/xml/id-wsf-2.0/dstref_modify_item.h | 10 +- lasso/xml/id-wsf-2.0/dstref_modify_response.c | 8 +- lasso/xml/id-wsf-2.0/dstref_modify_response.h | 10 +- lasso/xml/id-wsf-2.0/dstref_query.c | 8 +- lasso/xml/id-wsf-2.0/dstref_query.h | 10 +- lasso/xml/id-wsf-2.0/dstref_query_item.c | 8 +- lasso/xml/id-wsf-2.0/dstref_query_item.h | 10 +- lasso/xml/id-wsf-2.0/dstref_query_response.c | 8 +- lasso/xml/id-wsf-2.0/dstref_query_response.h | 10 +- lasso/xml/id-wsf-2.0/dstref_result_query.c | 8 +- lasso/xml/id-wsf-2.0/dstref_result_query.h | 10 +- lasso/xml/id-wsf-2.0/dstref_test_item.c | 8 +- lasso/xml/id-wsf-2.0/dstref_test_item.h | 10 +- .../xml/id-wsf-2.0/ims_identity_mapping_request.c | 8 +- .../xml/id-wsf-2.0/ims_identity_mapping_request.h | 10 +- .../xml/id-wsf-2.0/ims_identity_mapping_response.c | 8 +- .../xml/id-wsf-2.0/ims_identity_mapping_response.h | 10 +- lasso/xml/id-wsf-2.0/ims_mapping_input.c | 8 +- lasso/xml/id-wsf-2.0/ims_mapping_input.h | 10 +- lasso/xml/id-wsf-2.0/ims_mapping_output.c | 8 +- lasso/xml/id-wsf-2.0/ims_mapping_output.h | 10 +- lasso/xml/id-wsf-2.0/is_help.c | 8 +- lasso/xml/id-wsf-2.0/is_help.h | 10 +- lasso/xml/id-wsf-2.0/is_inquiry.c | 8 +- lasso/xml/id-wsf-2.0/is_inquiry.h | 10 +- lasso/xml/id-wsf-2.0/is_inquiry_element.c | 8 +- lasso/xml/id-wsf-2.0/is_inquiry_element.h | 10 +- lasso/xml/id-wsf-2.0/is_interaction_request.c | 8 +- lasso/xml/id-wsf-2.0/is_interaction_request.h | 10 +- lasso/xml/id-wsf-2.0/is_interaction_response.c | 8 +- lasso/xml/id-wsf-2.0/is_interaction_response.h | 10 +- lasso/xml/id-wsf-2.0/is_interaction_statement.c | 8 +- lasso/xml/id-wsf-2.0/is_interaction_statement.h | 10 +- lasso/xml/id-wsf-2.0/is_item.c | 8 +- lasso/xml/id-wsf-2.0/is_item.h | 10 +- lasso/xml/id-wsf-2.0/is_parameter.c | 8 +- lasso/xml/id-wsf-2.0/is_parameter.h | 10 +- lasso/xml/id-wsf-2.0/is_select.c | 8 +- lasso/xml/id-wsf-2.0/is_select.h | 10 +- lasso/xml/id-wsf-2.0/is_text.c | 8 +- lasso/xml/id-wsf-2.0/is_text.h | 10 +- lasso/xml/id-wsf-2.0/ps_add_collection_request.c | 8 +- lasso/xml/id-wsf-2.0/ps_add_collection_request.h | 10 +- lasso/xml/id-wsf-2.0/ps_add_collection_response.c | 8 +- lasso/xml/id-wsf-2.0/ps_add_collection_response.h | 10 +- lasso/xml/id-wsf-2.0/ps_add_entity_request.c | 8 +- lasso/xml/id-wsf-2.0/ps_add_entity_request.h | 10 +- lasso/xml/id-wsf-2.0/ps_add_entity_response.c | 8 +- lasso/xml/id-wsf-2.0/ps_add_entity_response.h | 10 +- lasso/xml/id-wsf-2.0/ps_add_known_entity_request.c | 8 +- lasso/xml/id-wsf-2.0/ps_add_known_entity_request.h | 10 +- .../xml/id-wsf-2.0/ps_add_known_entity_response.c | 8 +- .../xml/id-wsf-2.0/ps_add_known_entity_response.h | 10 +- .../xml/id-wsf-2.0/ps_add_to_collection_request.c | 8 +- .../xml/id-wsf-2.0/ps_add_to_collection_request.h | 10 +- lasso/xml/id-wsf-2.0/ps_get_object_info_request.c | 8 +- lasso/xml/id-wsf-2.0/ps_get_object_info_request.h | 10 +- lasso/xml/id-wsf-2.0/ps_get_object_info_response.c | 8 +- lasso/xml/id-wsf-2.0/ps_get_object_info_response.h | 10 +- lasso/xml/id-wsf-2.0/ps_item_data.c | 8 +- lasso/xml/id-wsf-2.0/ps_item_data.h | 10 +- lasso/xml/id-wsf-2.0/ps_list_members_request.c | 8 +- lasso/xml/id-wsf-2.0/ps_list_members_request.h | 10 +- lasso/xml/id-wsf-2.0/ps_list_members_response.c | 8 +- lasso/xml/id-wsf-2.0/ps_list_members_response.h | 10 +- lasso/xml/id-wsf-2.0/ps_notification.c | 8 +- lasso/xml/id-wsf-2.0/ps_notification.h | 10 +- lasso/xml/id-wsf-2.0/ps_notify.c | 8 +- lasso/xml/id-wsf-2.0/ps_notify.h | 10 +- lasso/xml/id-wsf-2.0/ps_object.c | 8 +- lasso/xml/id-wsf-2.0/ps_object.h | 10 +- lasso/xml/id-wsf-2.0/ps_query_objects_request.c | 8 +- lasso/xml/id-wsf-2.0/ps_query_objects_request.h | 10 +- lasso/xml/id-wsf-2.0/ps_query_objects_response.c | 8 +- lasso/xml/id-wsf-2.0/ps_query_objects_response.h | 10 +- .../xml/id-wsf-2.0/ps_remove_collection_request.c | 8 +- .../xml/id-wsf-2.0/ps_remove_collection_request.h | 10 +- lasso/xml/id-wsf-2.0/ps_remove_entity_request.c | 8 +- lasso/xml/id-wsf-2.0/ps_remove_entity_request.h | 10 +- .../id-wsf-2.0/ps_remove_from_collection_request.c | 8 +- .../id-wsf-2.0/ps_remove_from_collection_request.h | 10 +- lasso/xml/id-wsf-2.0/ps_request_abstract.c | 8 +- lasso/xml/id-wsf-2.0/ps_request_abstract.h | 10 +- .../xml/id-wsf-2.0/ps_resolve_identifier_request.c | 8 +- .../xml/id-wsf-2.0/ps_resolve_identifier_request.h | 10 +- .../id-wsf-2.0/ps_resolve_identifier_response.c | 8 +- .../id-wsf-2.0/ps_resolve_identifier_response.h | 10 +- lasso/xml/id-wsf-2.0/ps_resolve_input.c | 8 +- lasso/xml/id-wsf-2.0/ps_resolve_input.h | 10 +- lasso/xml/id-wsf-2.0/ps_response_abstract.c | 8 +- lasso/xml/id-wsf-2.0/ps_response_abstract.h | 10 +- lasso/xml/id-wsf-2.0/ps_set_object_info_request.c | 8 +- lasso/xml/id-wsf-2.0/ps_set_object_info_request.h | 10 +- lasso/xml/id-wsf-2.0/ps_test_membership_request.c | 8 +- lasso/xml/id-wsf-2.0/ps_test_membership_request.h | 10 +- lasso/xml/id-wsf-2.0/ps_test_membership_response.c | 8 +- lasso/xml/id-wsf-2.0/ps_test_membership_response.h | 10 +- lasso/xml/id-wsf-2.0/sb2_consent.c | 8 +- lasso/xml/id-wsf-2.0/sb2_consent.h | 10 +- lasso/xml/id-wsf-2.0/sb2_credentials_context.c | 8 +- lasso/xml/id-wsf-2.0/sb2_credentials_context.h | 10 +- lasso/xml/id-wsf-2.0/sb2_endpoint_update.c | 8 +- lasso/xml/id-wsf-2.0/sb2_endpoint_update.h | 10 +- lasso/xml/id-wsf-2.0/sb2_redirect_request.c | 8 +- lasso/xml/id-wsf-2.0/sb2_redirect_request.h | 10 +- lasso/xml/id-wsf-2.0/sb2_sender.c | 8 +- lasso/xml/id-wsf-2.0/sb2_sender.h | 10 +- lasso/xml/id-wsf-2.0/sb2_target_identity.c | 8 +- lasso/xml/id-wsf-2.0/sb2_target_identity.h | 10 +- lasso/xml/id-wsf-2.0/sb2_timeout.c | 8 +- lasso/xml/id-wsf-2.0/sb2_timeout.h | 10 +- lasso/xml/id-wsf-2.0/sb2_usage_directive.c | 8 +- lasso/xml/id-wsf-2.0/sb2_usage_directive.h | 10 +- lasso/xml/id-wsf-2.0/sb2_user_interaction_header.c | 8 +- lasso/xml/id-wsf-2.0/sb2_user_interaction_header.h | 10 +- lasso/xml/id-wsf-2.0/sbf_framework.c | 8 +- lasso/xml/id-wsf-2.0/sbf_framework.h | 10 +- lasso/xml/id-wsf-2.0/sec_token.c | 8 +- lasso/xml/id-wsf-2.0/sec_token.h | 10 +- lasso/xml/id-wsf-2.0/sec_token_policy.c | 8 +- lasso/xml/id-wsf-2.0/sec_token_policy.h | 10 +- lasso/xml/id-wsf-2.0/sec_transited_provider_path.c | 8 +- lasso/xml/id-wsf-2.0/sec_transited_provider_path.h | 10 +- lasso/xml/id-wsf-2.0/subs_notification.c | 8 +- lasso/xml/id-wsf-2.0/subs_notification.h | 10 +- lasso/xml/id-wsf-2.0/subs_notify_response.c | 8 +- lasso/xml/id-wsf-2.0/subs_notify_response.h | 10 +- lasso/xml/id-wsf-2.0/subs_ref_item.c | 8 +- lasso/xml/id-wsf-2.0/subs_ref_item.h | 10 +- lasso/xml/id-wsf-2.0/subs_subscription.c | 8 +- lasso/xml/id-wsf-2.0/subs_subscription.h | 10 +- lasso/xml/id-wsf-2.0/subsref_app_data.c | 8 +- lasso/xml/id-wsf-2.0/subsref_app_data.h | 10 +- lasso/xml/id-wsf-2.0/subsref_create.c | 8 +- lasso/xml/id-wsf-2.0/subsref_create.h | 10 +- lasso/xml/id-wsf-2.0/subsref_create_item.c | 8 +- lasso/xml/id-wsf-2.0/subsref_create_item.h | 10 +- lasso/xml/id-wsf-2.0/subsref_create_response.c | 8 +- lasso/xml/id-wsf-2.0/subsref_create_response.h | 10 +- lasso/xml/id-wsf-2.0/subsref_data.c | 8 +- lasso/xml/id-wsf-2.0/subsref_data.h | 10 +- lasso/xml/id-wsf-2.0/subsref_data_response.c | 8 +- lasso/xml/id-wsf-2.0/subsref_data_response.h | 10 +- lasso/xml/id-wsf-2.0/subsref_delete.c | 8 +- lasso/xml/id-wsf-2.0/subsref_delete.h | 10 +- lasso/xml/id-wsf-2.0/subsref_delete_item.c | 8 +- lasso/xml/id-wsf-2.0/subsref_delete_item.h | 10 +- lasso/xml/id-wsf-2.0/subsref_delete_response.c | 8 +- lasso/xml/id-wsf-2.0/subsref_delete_response.h | 10 +- lasso/xml/id-wsf-2.0/subsref_item_data.c | 8 +- lasso/xml/id-wsf-2.0/subsref_item_data.h | 10 +- lasso/xml/id-wsf-2.0/subsref_modify.c | 8 +- lasso/xml/id-wsf-2.0/subsref_modify.h | 10 +- lasso/xml/id-wsf-2.0/subsref_modify_item.c | 8 +- lasso/xml/id-wsf-2.0/subsref_modify_item.h | 10 +- lasso/xml/id-wsf-2.0/subsref_modify_response.c | 8 +- lasso/xml/id-wsf-2.0/subsref_modify_response.h | 10 +- lasso/xml/id-wsf-2.0/subsref_notification.c | 8 +- lasso/xml/id-wsf-2.0/subsref_notification.h | 10 +- lasso/xml/id-wsf-2.0/subsref_notify.c | 8 +- lasso/xml/id-wsf-2.0/subsref_notify.h | 10 +- lasso/xml/id-wsf-2.0/subsref_notify_response.c | 8 +- lasso/xml/id-wsf-2.0/subsref_notify_response.h | 10 +- lasso/xml/id-wsf-2.0/subsref_query.c | 8 +- lasso/xml/id-wsf-2.0/subsref_query.h | 10 +- lasso/xml/id-wsf-2.0/subsref_query_item.c | 8 +- lasso/xml/id-wsf-2.0/subsref_query_item.h | 10 +- lasso/xml/id-wsf-2.0/subsref_query_response.c | 8 +- lasso/xml/id-wsf-2.0/subsref_query_response.h | 12 +- lasso/xml/id-wsf-2.0/subsref_result_query.c | 8 +- lasso/xml/id-wsf-2.0/subsref_result_query.h | 10 +- lasso/xml/id-wsf-2.0/subsref_subscription.c | 8 +- lasso/xml/id-wsf-2.0/subsref_subscription.h | 10 +- lasso/xml/id-wsf-2.0/subsref_test_item.c | 8 +- lasso/xml/id-wsf-2.0/subsref_test_item.h | 10 +- lasso/xml/id-wsf-2.0/util_empty.c | 8 +- lasso/xml/id-wsf-2.0/util_empty.h | 10 +- lasso/xml/id-wsf-2.0/util_extension.c | 8 +- lasso/xml/id-wsf-2.0/util_extension.h | 10 +- lasso/xml/id-wsf-2.0/util_response.c | 8 +- lasso/xml/id-wsf-2.0/util_response.h | 10 +- lasso/xml/id-wsf-2.0/util_status.c | 8 +- lasso/xml/id-wsf-2.0/util_status.h | 10 +- lasso/xml/is_help.c | 10 +- lasso/xml/is_help.h | 10 +- lasso/xml/is_inquiry.c | 10 +- lasso/xml/is_inquiry.h | 10 +- lasso/xml/is_inquiry_element.c | 10 +- lasso/xml/is_inquiry_element.h | 10 +- lasso/xml/is_interaction_request.c | 10 +- lasso/xml/is_interaction_request.h | 10 +- lasso/xml/is_interaction_response.c | 10 +- lasso/xml/is_interaction_response.h | 10 +- lasso/xml/is_interaction_statement.c | 10 +- lasso/xml/is_interaction_statement.h | 10 +- lasso/xml/is_item.c | 10 +- lasso/xml/is_item.h | 10 +- lasso/xml/is_parameter.c | 10 +- lasso/xml/is_parameter.h | 10 +- lasso/xml/is_redirect_request.c | 10 +- lasso/xml/is_redirect_request.h | 10 +- lasso/xml/is_select.c | 10 +- lasso/xml/is_select.h | 10 +- lasso/xml/is_text.c | 10 +- lasso/xml/is_text.h | 10 +- lasso/xml/is_user_interaction.c | 10 +- lasso/xml/is_user_interaction.h | 10 +- lasso/xml/lib_assertion.c | 6 +- lasso/xml/lib_assertion.h | 12 +- lasso/xml/lib_authentication_statement.c | 8 +- lasso/xml/lib_authentication_statement.h | 12 +- lasso/xml/lib_authn_context.c | 8 +- lasso/xml/lib_authn_context.h | 12 +- lasso/xml/lib_authn_request.c | 18 +-- lasso/xml/lib_authn_request.h | 12 +- lasso/xml/lib_authn_request_envelope.c | 8 +- lasso/xml/lib_authn_request_envelope.h | 12 +- lasso/xml/lib_authn_response.c | 10 +- lasso/xml/lib_authn_response.h | 12 +- lasso/xml/lib_authn_response_envelope.c | 10 +- lasso/xml/lib_authn_response_envelope.h | 12 +- .../xml/lib_federation_termination_notification.c | 16 +-- .../xml/lib_federation_termination_notification.h | 12 +- lasso/xml/lib_idp_entries.c | 10 +- lasso/xml/lib_idp_entries.h | 14 +- lasso/xml/lib_idp_entry.c | 10 +- lasso/xml/lib_idp_entry.h | 12 +- lasso/xml/lib_idp_list.c | 10 +- lasso/xml/lib_idp_list.h | 12 +- lasso/xml/lib_logout_request.c | 14 +- lasso/xml/lib_logout_request.h | 12 +- lasso/xml/lib_logout_response.c | 8 +- lasso/xml/lib_logout_response.h | 12 +- lasso/xml/lib_name_identifier_mapping_request.c | 12 +- lasso/xml/lib_name_identifier_mapping_request.h | 12 +- lasso/xml/lib_name_identifier_mapping_response.c | 8 +- lasso/xml/lib_name_identifier_mapping_response.h | 12 +- lasso/xml/lib_register_name_identifier_request.c | 12 +- lasso/xml/lib_register_name_identifier_request.h | 12 +- lasso/xml/lib_register_name_identifier_response.c | 10 +- lasso/xml/lib_register_name_identifier_response.h | 12 +- lasso/xml/lib_request_authn_context.c | 10 +- lasso/xml/lib_request_authn_context.h | 14 +- lasso/xml/lib_scoping.c | 6 +- lasso/xml/lib_scoping.h | 12 +- lasso/xml/lib_status_response.c | 14 +- lasso/xml/lib_status_response.h | 12 +- lasso/xml/lib_subject.c | 6 +- lasso/xml/lib_subject.h | 12 +- lasso/xml/misc_text_node.c | 12 +- lasso/xml/misc_text_node.h | 10 +- lasso/xml/private.h | 10 +- lasso/xml/sa_credentials.c | 12 +- lasso/xml/sa_credentials.h | 10 +- lasso/xml/sa_parameter.c | 10 +- lasso/xml/sa_parameter.h | 10 +- lasso/xml/sa_password_transforms.c | 10 +- lasso/xml/sa_password_transforms.h | 8 +- lasso/xml/sa_sasl_request.c | 14 +- lasso/xml/sa_sasl_request.h | 10 +- lasso/xml/sa_sasl_response.c | 14 +- lasso/xml/sa_sasl_response.h | 10 +- lasso/xml/sa_transform.c | 10 +- lasso/xml/sa_transform.h | 10 +- lasso/xml/saml-2.0/saml2_action.c | 12 +- lasso/xml/saml-2.0/saml2_action.h | 10 +- lasso/xml/saml-2.0/saml2_advice.c | 10 +- lasso/xml/saml-2.0/saml2_advice.h | 10 +- lasso/xml/saml-2.0/saml2_assertion.c | 12 +- lasso/xml/saml-2.0/saml2_assertion.h | 10 +- lasso/xml/saml-2.0/saml2_attribute.c | 10 +- lasso/xml/saml-2.0/saml2_attribute.h | 10 +- lasso/xml/saml-2.0/saml2_attribute_statement.c | 10 +- lasso/xml/saml-2.0/saml2_attribute_statement.h | 10 +- lasso/xml/saml-2.0/saml2_attribute_value.c | 6 +- lasso/xml/saml-2.0/saml2_attribute_value.h | 10 +- lasso/xml/saml-2.0/saml2_audience_restriction.c | 10 +- lasso/xml/saml-2.0/saml2_audience_restriction.h | 10 +- lasso/xml/saml-2.0/saml2_authn_context.c | 10 +- lasso/xml/saml-2.0/saml2_authn_context.h | 10 +- lasso/xml/saml-2.0/saml2_authn_statement.c | 10 +- lasso/xml/saml-2.0/saml2_authn_statement.h | 10 +- .../xml/saml-2.0/saml2_authz_decision_statement.c | 10 +- .../xml/saml-2.0/saml2_authz_decision_statement.h | 10 +- lasso/xml/saml-2.0/saml2_base_idabstract.c | 10 +- lasso/xml/saml-2.0/saml2_base_idabstract.h | 10 +- lasso/xml/saml-2.0/saml2_condition_abstract.c | 10 +- lasso/xml/saml-2.0/saml2_condition_abstract.h | 10 +- lasso/xml/saml-2.0/saml2_conditions.c | 10 +- lasso/xml/saml-2.0/saml2_conditions.h | 10 +- lasso/xml/saml-2.0/saml2_encrypted_element.c | 8 +- lasso/xml/saml-2.0/saml2_encrypted_element.h | 10 +- lasso/xml/saml-2.0/saml2_evidence.c | 10 +- lasso/xml/saml-2.0/saml2_evidence.h | 10 +- .../saml-2.0/saml2_key_info_confirmation_data.c | 10 +- .../saml-2.0/saml2_key_info_confirmation_data.h | 10 +- lasso/xml/saml-2.0/saml2_name_id.c | 12 +- lasso/xml/saml-2.0/saml2_name_id.h | 10 +- lasso/xml/saml-2.0/saml2_one_time_use.c | 10 +- lasso/xml/saml-2.0/saml2_one_time_use.h | 10 +- lasso/xml/saml-2.0/saml2_proxy_restriction.c | 10 +- lasso/xml/saml-2.0/saml2_proxy_restriction.h | 10 +- lasso/xml/saml-2.0/saml2_statement_abstract.c | 10 +- lasso/xml/saml-2.0/saml2_statement_abstract.h | 10 +- lasso/xml/saml-2.0/saml2_subject.c | 10 +- lasso/xml/saml-2.0/saml2_subject.h | 10 +- lasso/xml/saml-2.0/saml2_subject_confirmation.c | 10 +- lasso/xml/saml-2.0/saml2_subject_confirmation.h | 10 +- .../xml/saml-2.0/saml2_subject_confirmation_data.c | 10 +- .../xml/saml-2.0/saml2_subject_confirmation_data.h | 10 +- lasso/xml/saml-2.0/saml2_subject_locality.c | 10 +- lasso/xml/saml-2.0/saml2_subject_locality.h | 10 +- lasso/xml/saml-2.0/samlp2_artifact_resolve.c | 10 +- lasso/xml/saml-2.0/samlp2_artifact_resolve.h | 10 +- lasso/xml/saml-2.0/samlp2_artifact_response.c | 10 +- lasso/xml/saml-2.0/samlp2_artifact_response.h | 10 +- lasso/xml/saml-2.0/samlp2_assertion_id_request.c | 10 +- lasso/xml/saml-2.0/samlp2_assertion_id_request.h | 10 +- lasso/xml/saml-2.0/samlp2_attribute_query.c | 10 +- lasso/xml/saml-2.0/samlp2_attribute_query.h | 10 +- lasso/xml/saml-2.0/samlp2_authn_query.c | 10 +- lasso/xml/saml-2.0/samlp2_authn_query.h | 10 +- lasso/xml/saml-2.0/samlp2_authn_request.c | 10 +- lasso/xml/saml-2.0/samlp2_authn_request.h | 10 +- lasso/xml/saml-2.0/samlp2_authz_decision_query.c | 10 +- lasso/xml/saml-2.0/samlp2_authz_decision_query.h | 10 +- lasso/xml/saml-2.0/samlp2_extensions.c | 10 +- lasso/xml/saml-2.0/samlp2_extensions.h | 10 +- lasso/xml/saml-2.0/samlp2_idp_entry.c | 10 +- lasso/xml/saml-2.0/samlp2_idp_entry.h | 10 +- lasso/xml/saml-2.0/samlp2_idp_list.c | 10 +- lasso/xml/saml-2.0/samlp2_idp_list.h | 10 +- lasso/xml/saml-2.0/samlp2_logout_request.c | 10 +- lasso/xml/saml-2.0/samlp2_logout_request.h | 10 +- lasso/xml/saml-2.0/samlp2_logout_response.c | 10 +- lasso/xml/saml-2.0/samlp2_logout_response.h | 10 +- lasso/xml/saml-2.0/samlp2_manage_name_id_request.c | 10 +- lasso/xml/saml-2.0/samlp2_manage_name_id_request.h | 10 +- .../xml/saml-2.0/samlp2_manage_name_id_response.c | 10 +- .../xml/saml-2.0/samlp2_manage_name_id_response.h | 10 +- .../xml/saml-2.0/samlp2_name_id_mapping_request.c | 10 +- .../xml/saml-2.0/samlp2_name_id_mapping_request.h | 10 +- .../xml/saml-2.0/samlp2_name_id_mapping_response.c | 10 +- .../xml/saml-2.0/samlp2_name_id_mapping_response.h | 10 +- lasso/xml/saml-2.0/samlp2_name_id_policy.c | 10 +- lasso/xml/saml-2.0/samlp2_name_id_policy.h | 10 +- lasso/xml/saml-2.0/samlp2_request_abstract.c | 12 +- lasso/xml/saml-2.0/samlp2_request_abstract.h | 10 +- .../xml/saml-2.0/samlp2_requested_authn_context.c | 10 +- .../xml/saml-2.0/samlp2_requested_authn_context.h | 10 +- lasso/xml/saml-2.0/samlp2_response.c | 10 +- lasso/xml/saml-2.0/samlp2_response.h | 10 +- lasso/xml/saml-2.0/samlp2_scoping.c | 10 +- lasso/xml/saml-2.0/samlp2_scoping.h | 10 +- lasso/xml/saml-2.0/samlp2_status.c | 10 +- lasso/xml/saml-2.0/samlp2_status.h | 10 +- lasso/xml/saml-2.0/samlp2_status_code.c | 10 +- lasso/xml/saml-2.0/samlp2_status_code.h | 10 +- lasso/xml/saml-2.0/samlp2_status_detail.c | 10 +- lasso/xml/saml-2.0/samlp2_status_detail.h | 10 +- lasso/xml/saml-2.0/samlp2_status_response.c | 10 +- lasso/xml/saml-2.0/samlp2_status_response.h | 10 +- lasso/xml/saml-2.0/samlp2_subject_query_abstract.c | 10 +- lasso/xml/saml-2.0/samlp2_subject_query_abstract.h | 10 +- lasso/xml/saml-2.0/samlp2_terminate.c | 10 +- lasso/xml/saml-2.0/samlp2_terminate.h | 10 +- lasso/xml/saml_advice.c | 10 +- lasso/xml/saml_advice.h | 12 +- lasso/xml/saml_assertion.c | 22 +-- lasso/xml/saml_assertion.h | 12 +- lasso/xml/saml_attribute.c | 16 +-- lasso/xml/saml_attribute.h | 12 +- lasso/xml/saml_attribute_designator.c | 12 +- lasso/xml/saml_attribute_designator.h | 12 +- lasso/xml/saml_attribute_statement.c | 12 +- lasso/xml/saml_attribute_statement.h | 12 +- lasso/xml/saml_attribute_value.c | 8 +- lasso/xml/saml_attribute_value.h | 12 +- lasso/xml/saml_audience_restriction_condition.c | 18 +-- lasso/xml/saml_audience_restriction_condition.h | 12 +- lasso/xml/saml_authentication_statement.c | 10 +- lasso/xml/saml_authentication_statement.h | 12 +- lasso/xml/saml_authority_binding.c | 12 +- lasso/xml/saml_authority_binding.h | 12 +- lasso/xml/saml_condition_abstract.c | 6 +- lasso/xml/saml_condition_abstract.h | 12 +- lasso/xml/saml_conditions.c | 10 +- lasso/xml/saml_conditions.h | 12 +- lasso/xml/saml_name_identifier.c | 12 +- lasso/xml/saml_name_identifier.h | 14 +- lasso/xml/saml_statement_abstract.c | 6 +- lasso/xml/saml_statement_abstract.h | 12 +- lasso/xml/saml_subject.c | 10 +- lasso/xml/saml_subject.h | 12 +- lasso/xml/saml_subject_confirmation.c | 14 +- lasso/xml/saml_subject_confirmation.h | 12 +- lasso/xml/saml_subject_locality.c | 14 +- lasso/xml/saml_subject_locality.h | 12 +- lasso/xml/saml_subject_statement.c | 10 +- lasso/xml/saml_subject_statement.h | 12 +- lasso/xml/saml_subject_statement_abstract.c | 8 +- lasso/xml/saml_subject_statement_abstract.h | 12 +- lasso/xml/samlp_request.c | 10 +- lasso/xml/samlp_request.h | 12 +- lasso/xml/samlp_request_abstract.c | 16 +-- lasso/xml/samlp_request_abstract.h | 12 +- lasso/xml/samlp_response.c | 12 +- lasso/xml/samlp_response.h | 12 +- lasso/xml/samlp_response_abstract.c | 14 +- lasso/xml/samlp_response_abstract.h | 12 +- lasso/xml/samlp_status.c | 10 +- lasso/xml/samlp_status.h | 10 +- lasso/xml/samlp_status_code.c | 8 +- lasso/xml/samlp_status_code.h | 12 +- lasso/xml/sec_resource_access_statement.c | 8 +- lasso/xml/sec_resource_access_statement.h | 12 +- lasso/xml/soap_binding.c | 20 +-- lasso/xml/soap_binding.h | 12 +- lasso/xml/soap_binding_consent.c | 10 +- lasso/xml/soap_binding_consent.h | 12 +- lasso/xml/soap_binding_correlation.c | 10 +- lasso/xml/soap_binding_correlation.h | 12 +- lasso/xml/soap_binding_ext_credential.c | 12 +- lasso/xml/soap_binding_ext_credential.h | 12 +- lasso/xml/soap_binding_ext_credentials_context.c | 12 +- lasso/xml/soap_binding_ext_credentials_context.h | 12 +- .../xml/soap_binding_ext_service_instance_update.c | 12 +- .../xml/soap_binding_ext_service_instance_update.h | 12 +- lasso/xml/soap_binding_ext_timeout.c | 10 +- lasso/xml/soap_binding_ext_timeout.h | 12 +- lasso/xml/soap_binding_processing_context.c | 10 +- lasso/xml/soap_binding_processing_context.h | 12 +- lasso/xml/soap_binding_provider.c | 10 +- lasso/xml/soap_binding_provider.h | 12 +- lasso/xml/soap_binding_usage_directive.c | 12 +- lasso/xml/soap_binding_usage_directive.h | 12 +- lasso/xml/soap_body.c | 14 +- lasso/xml/soap_body.h | 12 +- lasso/xml/soap_detail.c | 10 +- lasso/xml/soap_detail.h | 12 +- lasso/xml/soap_envelope.c | 10 +- lasso/xml/soap_envelope.h | 12 +- lasso/xml/soap_fault.c | 10 +- lasso/xml/soap_fault.h | 12 +- lasso/xml/soap_header.c | 12 +- lasso/xml/soap_header.h | 12 +- lasso/xml/strings.h | 8 +- lasso/xml/tools.c | 54 ++++---- lasso/xml/utility_status.c | 8 +- lasso/xml/utility_status.h | 10 +- lasso/xml/ws/wsa_attributed_any.c | 8 +- lasso/xml/ws/wsa_attributed_any.h | 10 +- lasso/xml/ws/wsa_attributed_qname.c | 10 +- lasso/xml/ws/wsa_attributed_qname.h | 10 +- lasso/xml/ws/wsa_attributed_unsigned_long.c | 8 +- lasso/xml/ws/wsa_attributed_unsigned_long.h | 10 +- lasso/xml/ws/wsa_attributed_uri.c | 10 +- lasso/xml/ws/wsa_attributed_uri.h | 10 +- lasso/xml/ws/wsa_endpoint_reference.c | 8 +- lasso/xml/ws/wsa_endpoint_reference.h | 10 +- lasso/xml/ws/wsa_metadata.c | 8 +- lasso/xml/ws/wsa_metadata.h | 10 +- lasso/xml/ws/wsa_problem_action.c | 8 +- lasso/xml/ws/wsa_problem_action.h | 10 +- lasso/xml/ws/wsa_reference_parameters.c | 8 +- lasso/xml/ws/wsa_reference_parameters.h | 10 +- lasso/xml/ws/wsa_relates_to.c | 10 +- lasso/xml/ws/wsa_relates_to.h | 10 +- lasso/xml/ws/wsse_embedded.c | 8 +- lasso/xml/ws/wsse_embedded.h | 10 +- lasso/xml/ws/wsse_reference.c | 8 +- lasso/xml/ws/wsse_reference.h | 10 +- lasso/xml/ws/wsse_security_header.c | 8 +- lasso/xml/ws/wsse_security_header.h | 10 +- lasso/xml/ws/wsse_security_token_reference.c | 8 +- lasso/xml/ws/wsse_security_token_reference.h | 10 +- lasso/xml/ws/wsse_transformation_parameters.c | 8 +- lasso/xml/ws/wsse_transformation_parameters.h | 10 +- lasso/xml/ws/wsse_username_token.c | 8 +- lasso/xml/ws/wsse_username_token.h | 10 +- lasso/xml/ws/wsu_timestamp.c | 8 +- lasso/xml/ws/wsu_timestamp.h | 10 +- lasso/xml/wsse_security.c | 8 +- lasso/xml/wsse_security.h | 12 +- lasso/xml/xml.c | 62 ++++----- lasso/xml/xml.h | 8 +- lasso/xml/xml_enc.h | 8 +- php/patch_swig_output.py | 8 +- tests/login_tests.c | 8 +- tests/perfs.c | 6 +- tests/random_tests.c | 2 +- tests/tests.c | 6 +- tools/generate_idwsf2_classes.py | 54 ++++---- website/convert-to-static.py | 6 +- website/ezt.py | 54 ++++---- 746 files changed, 4200 insertions(+), 4200 deletions(-) commit 73d9c98f92b9664c6d78843c4110b71520fa3f67 Author: Benjamin Dauvergne Date: Fri Sep 12 13:57:37 2008 +0000 * Reset CFLAGS when --enable-debugging is used (remove -g -O2 value setted by AC_PROG_CC). * Show AM_CFLAGS + CFLAGS in resume when configure finish. configure.ac | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 180fb41fa7c786dbc58974171c861efcbba5d542 Author: Benjamin Dauvergne Date: Fri Sep 12 13:57:34 2008 +0000 * When --enable-debugging is used, add -Wno-xxx options to AM_CFLAGS so that bindings compile with -Werror (-Werror is activated by --enable-debugging now) bindings/java/Makefile.am | 8 +++++--- bindings/php5/Makefile.am | 8 ++++---- bindings/python/Makefile.am | 2 +- 3 files changed, 10 insertions(+), 8 deletions(-) commit dd81d977610946d80da6dd21354bf9696d9251cb Author: Benjamin Dauvergne Date: Fri Sep 12 13:57:32 2008 +0000 * Add G_GNUC_UNUSED for unused parameter we can't remove (python wrappers). bindings/python/lang.py | 6 +++--- bindings/python/wrapper_top.c | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) commit 8ef6440a9a604567d6dbd47f8948d813cd90a2ae Author: Benjamin Dauvergne Date: Fri Sep 12 13:57:29 2008 +0000 * Add options when DEBUGGING is activated, i.e. to permit compiling when -Werror is used. It removes some of the warning for code we do not control. perl/Makefile.am | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) commit 0e706e6598cbdbf0dae5ef74a0cb4c206f590b82 Author: Benjamin Dauvergne Date: Fri Sep 12 13:57:27 2008 +0000 * Select bindings in bindings/Makefile not in bindings/*/Makefile. bindings/Makefile.am | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) commit ae1f6a297c62a7fd0bcf33865629eb21ef1e87d5 Author: Benjamin Dauvergne Date: Fri Sep 12 13:57:22 2008 +0000 * Remove warnings: - remove unused parameter from private function signatures - remove unused variable - initialize variable potentially accessed uninitialized - add G_GNUC_UNUSED if function is public or adhering to an interface, and a parameter is unused. - if ID-WSF is not compiled in, define stubs with G_GNUC_UNUSED on parameters. The goal is to compile with -Werror. lasso/id-ff/identity.c | 4 +-- lasso/id-ff/login.c | 36 +++++++++++++--------- lasso/id-ff/logout.c | 2 +- lasso/id-ff/name_identifier_mapping.c | 14 ++------- lasso/id-ff/provider.c | 2 +- lasso/id-ff/server.c | 18 +++++++---- lasso/id-ff/session.c | 6 ++-- lasso/id-wsf-2.0/data_service.c | 11 +++---- lasso/id-wsf-2.0/discovery.c | 6 ++-- lasso/id-wsf-2.0/profile.c | 5 +-- lasso/saml-2.0/login.c | 25 ++++++++++----- lasso/saml-2.0/loginprivate.h | 8 ++--- lasso/saml-2.0/logout.c | 2 +- lasso/saml-2.0/name_id_management.c | 7 +---- lasso/saml-2.0/profile.c | 2 +- lasso/saml-2.0/provider.c | 2 +- lasso/saml-2.0/server.c | 2 +- lasso/saml-2.0/serverprivate.h | 2 +- lasso/xml/id-wsf-2.0/dst_delete_response.c | 7 +---- lasso/xml/id-wsf-2.0/dstref_create_response.c | 7 +---- lasso/xml/id-wsf-2.0/dstref_delete_response.c | 7 +---- lasso/xml/id-wsf-2.0/subs_notify_response.c | 7 +---- lasso/xml/id-wsf-2.0/subsref_create_response.c | 7 +---- lasso/xml/id-wsf-2.0/subsref_delete_response.c | 7 +---- lasso/xml/id-wsf-2.0/subsref_modify_response.c | 7 +---- lasso/xml/id-wsf-2.0/subsref_notify_response.c | 7 +---- lasso/xml/id-wsf-2.0/util_empty.c | 7 +---- lasso/xml/id-wsf-2.0/util_extension.c | 7 +---- lasso/xml/lib_logout_response.c | 7 +---- lasso/xml/lib_register_name_identifier_response.c | 7 +---- lasso/xml/saml-2.0/saml2_condition_abstract.c | 7 +---- lasso/xml/saml-2.0/saml2_one_time_use.c | 7 +---- lasso/xml/saml-2.0/saml2_statement_abstract.c | 7 +---- lasso/xml/saml-2.0/samlp2_extensions.c | 7 +---- .../xml/saml-2.0/samlp2_manage_name_id_response.c | 7 +---- lasso/xml/saml-2.0/samlp2_status_detail.c | 7 +---- lasso/xml/saml-2.0/samlp2_terminate.c | 7 +---- lasso/xml/saml_assertion.c | 7 +---- lasso/xml/saml_condition_abstract.c | 7 +---- lasso/xml/saml_statement_abstract.c | 7 +---- lasso/xml/saml_subject_statement.c | 7 +---- lasso/xml/samlp_status_code.c | 8 +---- lasso/xml/tools.c | 2 +- lasso/xml/xml.c | 9 ++---- 44 files changed, 108 insertions(+), 226 deletions(-) commit 61f2ccf37ada78617d0e5a5a69d4a7f7cd5b5657 Author: Benjamin Dauvergne Date: Fri Sep 12 13:57:17 2008 +0000 * Add setting of AM_CFLAGS when --enable-debugging is used * Export the AM_CFLAGS variable * Create a conditionnal for automake named DEBUGGING * Show CFLAGS in resume of configuration option configure.ac | 5 +++++ 1 file changed, 5 insertions(+) commit 09daafe00fc3a9fc3240886e17eca01b0ed0f3e3 Author: Benjamin Dauvergne Date: Fri Sep 12 10:17:26 2008 +0000 * Add support of lasso_registry to lasso_node_new_from_xmlNode. * Add full support for xsi:type, with lookup of the QName namespace, will only work if lib: namespace is correctly declared in the dumped XML fragment. * Add a test for the new functionnality in lasso_node_new_from_xmlNode. lasso/xml/xml.c | 123 +++++++++++++++++++++++++++++----------------------- tests/basic_tests.c | 31 +++++++++++++ 2 files changed, 99 insertions(+), 55 deletions(-) commit 6edfa7935f68fb10282eb878ab1caa6147efc88f Author: Benjamin Dauvergne Date: Thu Sep 4 11:41:39 2008 +0000 Add a new error code, with the REGISTRY prefix and use it in registry function returning an error code. Fix a typo when retrieving a quark string in the registry modulke. Improve tests for functional mapping. lasso/errors.c | 2 ++ lasso/errors.h | 2 ++ lasso/registry.c | 28 +++++++++++++++++----------- tests/basic_tests.c | 10 +++++++--- 4 files changed, 28 insertions(+), 14 deletions(-) commit 24430806e6761766e6cd8a309a0c087dd90f178e Author: Benjamin Dauvergne Date: Thu Sep 4 09:44:34 2008 +0000 Fix regression when loading a LassoServer from dump. Fix an error with -rpath setting in last commit, -rpath must always be absolute paths. lasso/id-ff/provider.c | 2 +- tests/Makefile.am | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) commit dd0e7143ee7f16db21a9c7fe9abfef4d297e0697 Author: Damien Laniel Date: Wed Sep 3 16:30:51 2008 +0000 don't put registry functions in the bindings bindings/overrides.xml | 3 +++ 1 file changed, 3 insertions(+) commit 380217c30d78a75f8431adb7c3380f09d697613a Author: Benjamin Dauvergne Date: Tue Aug 26 12:51:14 2008 +0000 Add -rpath to LDFLAGS variable to use the builded lasso and not the local one. tests/Makefile.am | 2 ++ 1 file changed, 2 insertions(+) commit bcf3b56daf15389b903965bbf1ebd14d6f195582 Author: Benjamin Dauvergne Date: Tue Aug 26 12:49:09 2008 +0000 Add functional mappings and test code that goest with it. lasso/registry-private.h | 7 +- lasso/registry.c | 231 ++++++++++++++++++++++++++++++++++++++--------- lasso/registry.h | 6 +- lasso/xml/strings.h | 3 + tests/basic_tests.c | 49 ++++++++-- 5 files changed, 240 insertions(+), 56 deletions(-) commit 6c698a4aaf619b4a8f2055ccde21adf1e805bd76 Author: Benjamin Dauvergne Date: Tue Aug 26 12:49:07 2008 +0000 Add namespace for federation XML object lasso/id-ff/federation.c | 1 + 1 file changed, 1 insertion(+) commit 0fc48f120e9ba8c4b237ad4088827b5e4e76376f Author: Benjamin Dauvergne Date: Tue Aug 26 12:49:04 2008 +0000 Add test of the two public registry functions, lasso_registry_default_add_mapping, lasso_registry_default_get_mapping. tests/basic_tests.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) commit 24f3e9cdd52a2673e97d8799c734915ab4346bef Author: Benjamin Dauvergne Date: Tue Aug 26 12:49:02 2008 +0000 Add new module lasso_registry, to handle mapping from XML tag to GObject classes. lasso/Makefile.am | 8 +- lasso/registry-private.h | 51 ++++++++++++ lasso/registry.c | 206 +++++++++++++++++++++++++++++++++++++++++++++++ lasso/registry.h | 49 +++++++++++ 4 files changed, 311 insertions(+), 3 deletions(-) commit 68b0b87602163b2a03795e66f691e642cb38501e Author: Benjamin Dauvergne Date: Tue Aug 26 12:49:00 2008 +0000 Fix changed name of g_assign_string in wsf_profile.c lasso/id-wsf/wsf_profile.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 500480afbf184a8b0c45c4ccc6f97f09e53a551a Author: Benjamin Dauvergne Date: Tue Aug 26 12:48:58 2008 +0000 Add public function lasso_server_add_provider_from_buffer, to add a provider from an XML string of the metadatas (changed semantic of the second argument compared to lasso_server_add_provider). To support this a new public LassoProvider constructor was added: lasso_provider_new_from_buffer, where the second argument is an XML string. It uses a new private function, lasso_provider_load_metadata_from_buffer. lasso/id-ff/provider.c | 115 ++++++++++++++++++++++++++++++++++++++++++------- lasso/id-ff/provider.h | 2 + lasso/id-ff/server.c | 61 +++++++++++++++++++------- lasso/id-ff/server.h | 3 ++ 4 files changed, 149 insertions(+), 32 deletions(-) commit 1a9b5ef5c959930467aa700d001e0a0561b0a6c1 Author: Benjamin Dauvergne Date: Tue Aug 26 12:48:56 2008 +0000 Add documentation to lasso_server_add_service_from_dump. lasso/id-ff/server.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) commit aca239da7a7cf225f4936991485648e6151a8464 Author: Benjamin Dauvergne Date: Tue Aug 26 12:48:54 2008 +0000 Complete documentation of lasso_server_add_service. lasso/id-ff/server.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 8e395a0d0da2fbb2614678ce0d8593f948d59e7c Author: Benjamin Dauvergne Date: Thu Aug 7 14:54:25 2008 +0000 Move soap_binding files from lasso/id-wsf to lasso/xml. lasso/id-wsf/Makefile.am | 6 +-- lasso/soap_binding.c | 77 ------------------------------------ lasso/soap_binding.h | 45 --------------------- lasso/xml/Makefile.am | 2 + lasso/{id-wsf => xml}/soap_binding.c | 2 +- lasso/{id-wsf => xml}/soap_binding.h | 0 6 files changed, 5 insertions(+), 127 deletions(-) commit 74992d3acd0d3b846a051b33c20f589ece1ef72e Author: Benjamin Dauvergne Date: Tue Aug 5 14:53:38 2008 +0000 Add bindings/javaj/__init__.py to EXTRA_DIST bindings/java/Makefile.am | 1 + 1 file changed, 1 insertion(+) commit 99b303eab3d7f2e8d496beb5424e87832023c873 Author: Benjamin Dauvergne Date: Tue Aug 5 14:53:35 2008 +0000 Lookup wrapper_{top,bottom}.c files in the src_dir, useful for VPATH build (i.e. distcheck). Add top_srcdir/binings to python syspath. bindings/bindings.py | 2 ++ bindings/python/lang.py | 5 +++-- 2 files changed, 5 insertions(+), 2 deletions(-) commit f088610c6ed93a5670cffa6cfcdb0a60804888dd Author: Benjamin Dauvergne Date: Tue Aug 5 14:53:34 2008 +0000 $< is already translated to the VPATH in pattern rules, no need to prefix with $(srcdir). Reflect this in the rule that creates variations of svg files for the documentation. docs/lasso-book/figures/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 207891ff2946db888c80b15f77e7cce15bfcc006 Author: Benjamin Dauvergne Date: Tue Aug 5 14:53:29 2008 +0000 * Fix blanks mismatch (space in *.c and *h files or tabs in *.py files) and formatting bindings/bindings.py | 2 +- bindings/java/lang.py | 18 ++-- bindings/php5/wrapper_source.py | 2 +- bindings/python/tests/Makefile.am | 3 +- bindings/python/tests/idwsf1_tests.py | 4 +- lasso/build_strerror.py | 24 ++--- lasso/id-ff/defederation.h | 3 +- lasso/id-ff/federation.c | 6 +- lasso/id-ff/identity.c | 5 +- lasso/id-ff/login.c | 12 +-- lasso/id-ff/name_registration.h | 2 +- lasso/id-ff/provider.c | 41 ++++---- lasso/id-ff/provider.h | 2 +- lasso/id-ff/server.c | 6 +- lasso/id-ff/session.c | 54 +++++----- lasso/id-wsf-2.0/data_service.c | 3 +- lasso/id-wsf-2.0/data_service.h | 10 +- lasso/id-wsf-2.0/discovery.c | 18 ++-- lasso/id-wsf-2.0/profile.c | 2 +- lasso/id-wsf-2.0/profile.h | 10 +- lasso/id-wsf-2.0/server.h | 9 +- lasso/id-wsf-2.0/session.h | 6 +- lasso/id-wsf/authentication.c | 98 ++++++++--------- lasso/id-wsf/data_service.c | 12 +-- lasso/id-wsf/data_service.h | 10 +- lasso/id-wsf/discovery.c | 82 ++++++++------- lasso/id-wsf/interaction_profile_service.c | 4 +- lasso/id-wsf/interaction_profile_service.h | 10 +- lasso/id-wsf/personal_profile_service.c | 3 +- lasso/id-wsf/personal_profile_service.h | 10 +- lasso/id-wsf/soap_binding.c | 6 +- lasso/id-wsf/wsf_profile.c | 40 ++++--- lasso/id-wsf/wsf_profile.h | 34 +++--- lasso/id-wsf/wsf_profile_private.h | 3 +- lasso/saml-2.0/assertion_query.c | 2 +- lasso/saml-2.0/login.c | 14 +-- lasso/saml-2.0/name_id_management.c | 2 +- lasso/saml-2.0/name_id_management.h | 2 +- lasso/soap_binding.c | 9 +- lasso/soap_binding.h | 6 +- lasso/xml/disco_authenticate_requester.c | 2 +- lasso/xml/disco_authenticate_session_context.c | 2 +- lasso/xml/disco_authenticate_session_context.h | 3 +- lasso/xml/disco_authorize_requester.c | 2 +- lasso/xml/disco_description.c | 24 ++--- lasso/xml/disco_encrypt_resource_id.c | 2 +- lasso/xml/disco_encrypted_resource_id.c | 16 +-- lasso/xml/disco_encrypted_resource_id.h | 2 +- lasso/xml/disco_generate_bearer_token.c | 2 +- lasso/xml/disco_insert_entry.c | 2 +- lasso/xml/disco_modify.c | 4 +- lasso/xml/disco_modify_response.c | 6 +- lasso/xml/disco_options.c | 2 +- lasso/xml/disco_query.c | 4 +- lasso/xml/disco_query_response.c | 8 +- lasso/xml/disco_requested_service_type.c | 4 +- lasso/xml/disco_resource_offering.c | 12 +-- lasso/xml/disco_send_single_logout.c | 2 +- lasso/xml/disco_service_instance.c | 12 +-- lasso/xml/dst_modification.h | 6 +- lasso/xml/dst_modify.h | 2 +- lasso/xml/dst_modify_response.h | 6 +- lasso/xml/dst_new_data.h | 4 +- lasso/xml/dst_query.c | 4 +- lasso/xml/dst_query.h | 2 +- lasso/xml/dst_query_item.c | 2 +- lasso/xml/id-wsf-2.0/disco_svc_md_query_response.h | 3 +- lasso/xml/id-wsf-2.0/ps_add_known_entity_request.h | 3 +- lasso/xml/id-wsf-2.0/ps_get_object_info_response.h | 3 +- lasso/xml/is_interaction_response.c | 4 +- lasso/xml/is_select.c | 2 +- lasso/xml/is_user_interaction.c | 8 +- lasso/xml/private.h | 3 +- lasso/xml/sa_credentials.c | 6 +- lasso/xml/sa_sasl_request.c | 12 +-- lasso/xml/sa_sasl_response.c | 22 ++-- lasso/xml/saml-2.0/saml2_attribute_value.c | 4 +- lasso/xml/saml_advice.c | 8 +- lasso/xml/saml_advice.h | 4 - lasso/xml/saml_attribute.c | 4 +- lasso/xml/saml_attribute_designator.c | 2 +- lasso/xml/saml_attribute_statement.c | 4 +- lasso/xml/saml_attribute_value.c | 4 +- lasso/xml/soap_binding_consent.c | 6 +- lasso/xml/soap_binding_correlation.c | 8 +- lasso/xml/soap_binding_ext_credentials_context.c | 8 +- .../xml/soap_binding_ext_service_instance_update.c | 10 +- lasso/xml/soap_binding_ext_timeout.c | 4 +- lasso/xml/soap_binding_processing_context.c | 2 +- lasso/xml/soap_binding_provider.c | 6 +- lasso/xml/soap_binding_usage_directive.c | 6 +- lasso/xml/soap_body.c | 30 +++--- lasso/xml/tools.c | 30 +++--- lasso/xml/xml.c | 117 +++++++++++---------- php/patch_swig_output.py | 4 +- website/convert-to-static.py | 4 +- 96 files changed, 549 insertions(+), 508 deletions(-) commit f83d4bd9f8227da65dbc350b3d2d390b7b0a2299 Author: Benjamin Dauvergne Date: Tue Aug 5 14:53:22 2008 +0000 * fix typo with g_hash_table_remove_all * remove unused variable * add GNUC_UNUSED to static functions to pass -Werror bindings/java/wrapper_top.c | 85 +++++++++++++++++++++++---------------------- 1 file changed, 43 insertions(+), 42 deletions(-) commit 6c86fc55c7e19eac6b4cafc46e2cab6fee8ecb83 Author: Benjamin Dauvergne Date: Tue Aug 5 14:53:20 2008 +0000 add an __init__.py to make the java subdirectory a python module bindings/java/__init__.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) commit 06453188a40ed516e6ffa7364f4f56ac82f15d6b Author: Benjamin Dauvergne Date: Tue Aug 5 14:53:19 2008 +0000 exemple of usage of the macro OFTYPE lasso/id-wsf-2.0/server.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 5a3ae3cd2811b7b9b2301bc10d50a988db918fc8 Author: Benjamin Dauvergne Date: Tue Aug 5 14:53:18 2008 +0000 new empty macro OFTYPE(x) to specify type of GList containers lasso/utils.h | 2 ++ 1 file changed, 2 insertions(+) commit 3cb66dc03e60fdf338e3ccf12a008c2f666e9dc5 Author: Benjamin Dauvergne Date: Tue Aug 5 14:53:16 2008 +0000 add moved files to EXTRA_DIST bindings/python/Makefile.am | 2 ++ 1 file changed, 2 insertions(+) commit 55b772f18691f912f6b7e377a737a76f0734d2fa Author: Benjamin Dauvergne Date: Tue Aug 5 14:53:14 2008 +0000 change dependency with respect to moved files, add moved files to EXTRA_DIST bindings/php5/Makefile.am | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit 9406c648c5bb08ec048bee4d48976220cb3c47a4 Author: Benjamin Dauvergne Date: Tue Aug 5 14:53:12 2008 +0000 use new util function to throw exceptions bindings/java/lang.py | 4 ++-- bindings/java/wrapper_top.c | 19 ++++++++++++++++--- 2 files changed, 18 insertions(+), 5 deletions(-) commit d61eb5307089c0dec8feca03af08316d2b273b10 Author: Benjamin Dauvergne Date: Tue Aug 5 14:53:10 2008 +0000 add moved files to EXTRA_DIST bindings/java/Makefile.am | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit 1fc655ffc3e9e6f9af0f18991a20d5dc0c1aff0e Author: Benjamin Dauvergne Date: Tue Aug 5 14:53:07 2008 +0000 add TODOs for parsing OFTYPE in other positions bindings/bindings.py | 2 ++ 1 file changed, 2 insertions(+) commit 9c1044268e8810fcad6d3d4f250a70f7dcc2887a Author: Benjamin Dauvergne Date: Tue Aug 5 14:53:06 2008 +0000 Remove moved files from EXTRA_DIST bindings/Makefile.am | 12 ------------ 1 file changed, 12 deletions(-) commit 1226b060bd441761cac5c9afe44dca92ec69e6e8 Author: Benjamin Dauvergne Date: Tue Aug 5 14:53:03 2008 +0000 Move all files related to java into the java subdirectory bindings/java/Makefile.am | 2 +- bindings/{lang_java.py => java/lang.py} | 17 +++++++++-------- .../wrapper_bottom.c} | 0 .../{lang_java_wrapper_top.c => java/wrapper_top.c} | 0 4 files changed, 10 insertions(+), 9 deletions(-) commit f020bb88f6a9157747b12fcc3ad34581eb77d473 Author: Benjamin Dauvergne Date: Tue Aug 5 14:52:59 2008 +0000 Add a module init file to python directory. bindings/python/__init__.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) commit 115b18fc6f4a245d415584090734cd43b52a6f6a Author: Benjamin Dauvergne Date: Tue Aug 5 14:52:56 2008 +0000 Move all files related to the php5 binding inside the php5 subdirectory. bindings/{lang_php5_helpers => php5}/__init__.py | 0 bindings/{lang_php5.py => php5/lang.py} | 9 ++++----- bindings/{lang_php5_helpers => php5}/php_code.py | 0 bindings/{lang_php5_helpers => php5}/wrapper_header.py | 0 bindings/{lang_php5_helpers => php5}/wrapper_source.py | 4 ++-- bindings/{lang_php5_helpers => php5}/wrapper_source_top.c | 0 6 files changed, 6 insertions(+), 7 deletions(-) commit 1fae093527f69de086934f5df750cf374eaa2f48 Author: Benjamin Dauvergne Date: Tue Aug 5 14:52:52 2008 +0000 Move all python binding related files inside the python subdirectory bindings/bindings.py | 33 +++++++++++++--------- bindings/python/Makefile.am | 2 +- bindings/{lang_python.py => python/lang.py} | 20 +++++++------ .../wrapper_bottom.c} | 0 .../wrapper_top.c} | 0 5 files changed, 32 insertions(+), 23 deletions(-) commit 0930e6046f5c6e30b9d16fef5bb7a543e8750281 Author: Benjamin Dauvergne Date: Tue Aug 5 14:52:50 2008 +0000 * Fix typo lasso/id-wsf/wsf_profile.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 6c65ad341b24c1db49caacc127b763a727dc7fe9 Author: Benjamin Dauvergne Date: Tue Aug 5 14:52:48 2008 +0000 * add missing lasso_release_list, add lasso_release_list_of_full, reimplement lasso_release_list_of_* using _full lasso/utils.h | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) commit 2b84680d3391762849daa1755851534a94a12e3d Author: Benjamin Dauvergne Date: Tue Aug 5 14:52:46 2008 +0000 * removed unused variables, and change FIXME comment. lasso/id-ff/login.c | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) commit b629c91b087920415b6f333395e9566a2809c7dd Author: Benjamin Dauvergne Date: Tue Aug 5 14:52:43 2008 +0000 * add include of utils.h lasso/xml/xml.c | 1 + 1 file changed, 1 insertion(+) commit 228520ccf65bc05c6d6661a70f84f7fd04a1bfde Author: Benjamin Dauvergne Date: Tue Aug 5 14:52:41 2008 +0000 * remove code to add credentials, it is actually useless. lasso/id-ff/login.c | 57 +---------------------------------------------------- 1 file changed, 1 insertion(+), 56 deletions(-) commit eeca0e7f0143b04cb10a289fd11770822e675508 Author: Benjamin Dauvergne Date: Tue Aug 5 14:52:39 2008 +0000 * remove useless code lasso/id-wsf/discovery.c | 48 ------------------------------------------------ 1 file changed, 48 deletions(-) commit fa9931c9ebd11533105e69eea9682bd31d2b8e0f Author: Benjamin Dauvergne Date: Tue Aug 5 14:52:36 2008 +0000 * add Deprecated marker to documentation. lasso/id-wsf/wsf_profile.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) commit 2d18a0d3f8a18e680f175df35391cfa444bf52e2 Author: Benjamin Dauvergne Date: Tue Aug 5 14:52:34 2008 +0000 * Fix potential memory leaks * id-wsf/wsf_profile.c: add error code path in lasso_wsf_profile_build_soap_request_msg for unsupported security mechanisms. lasso/id-wsf/wsf_profile.c | 12 ++++------ lasso/xml/xml.c | 59 ++++++++++++++++++++++------------------------ 2 files changed, 33 insertions(+), 38 deletions(-) commit 87146dc9ecc56873ec2057922724c3fe689bf785 Author: Benjamin Dauvergne Date: Tue Aug 5 14:52:32 2008 +0000 add macros to release xmlSec context objects lasso/utils.h | 9 +++++++++ 1 file changed, 9 insertions(+) commit 838a3c4a2d47dcdb01b8fe7479c380c741de3986 Author: Benjamin Dauvergne Date: Tue Aug 5 14:52:31 2008 +0000 add lasso_release_full to construct other lasso_release_ functions, use it in old definitions lasso/utils.h | 40 ++++++++++++---------------------------- 1 file changed, 12 insertions(+), 28 deletions(-) commit 2828676eeba5bbead0a2b682656998a5ab6d2bfe Author: Benjamin Dauvergne Date: Tue Aug 5 14:52:29 2008 +0000 rename g_unlink_and_release_node to lasso_unlink_and_release_node lasso/utils.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 36ca34b16626efb8a156adb3eddfb1b48c1f0b39 Author: Benjamin Dauvergne Date: Tue Aug 5 14:52:28 2008 +0000 Add a macro to emit a «Function is deprecated» warning lasso/utils.h | 4 ++++ 1 file changed, 4 insertions(+) commit d012fcfd528d0d9fb3540779531d0430224985a8 Author: Benjamin Dauvergne Date: Tue Aug 5 14:52:26 2008 +0000 change last g_* macros to lasso_ prefix lasso/id-wsf/discovery.c | 2 +- lasso/id-wsf/wsf_profile.c | 20 ++++++++++---------- lasso/utils.h | 10 +++++----- lasso/xml/disco_description.c | 4 ++-- 4 files changed, 18 insertions(+), 18 deletions(-) commit b9b65ed9fca2650bc7e28d87bc69078e53a01921 Author: Benjamin Dauvergne Date: Tue Aug 5 14:52:23 2008 +0000 * change g_list_add* to lasso_list_add* lasso/id-ff/identity.c | 2 +- lasso/id-wsf/data_service.c | 4 ++-- lasso/id-wsf/discovery.c | 24 ++++++++++++------------ lasso/id-wsf/wsf_profile.c | 6 +++--- lasso/utils.h | 6 +++--- 5 files changed, 21 insertions(+), 21 deletions(-) commit fd1294504f8c66db8af66720e5849592d4b5a54e Author: Benjamin Dauvergne Date: Tue Aug 5 14:52:20 2008 +0000 change g_assign_* to lasso_assgin_* and g_release_* to lasso_release_* lasso/id-ff/identity.c | 2 +- lasso/id-ff/session.c | 4 ++-- lasso/id-wsf/data_service.c | 2 +- lasso/id-wsf/discovery.c | 12 ++++++------ lasso/id-wsf/wsf_profile.c | 48 ++++++++++++++++++++++----------------------- lasso/utils.h | 24 +++++++++++------------ 6 files changed, 46 insertions(+), 46 deletions(-) commit b449c26f5af02a3cbed90384e3f64a321a5ee1aa Author: Benjamin Dauvergne Date: Tue Aug 5 14:52:18 2008 +0000 * remove blanks (review by F. Peters) lasso/id-wsf/wsf_profile.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit fcb5503e1b9c3c629091bae884d1be3016e24dd6 Author: Benjamin Dauvergne Date: Tue Aug 5 14:52:14 2008 +0000 * fix documentation (review by F. Peters) lasso/id-wsf/soap_binding.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) commit c721459e5207936791185f6760aa0cc9cd34db7d Author: Benjamin Dauvergne Date: Tue Aug 5 14:52:12 2008 +0000 * bindings/python/tests/Makefile.am: make running of iwsf{1,2}_tests.py conditioned upon --enable-wsf flag of ./configure script bindings/python/tests/Makefile.am | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) commit 0933671c365e84b8d2974080e93b9c3c3c548aaa Author: Benjamin Dauvergne Date: Tue Aug 5 14:52:11 2008 +0000 * fix change in SamlAdvice ABI swig/Lasso.i | 27 +++++++-------------------- 1 file changed, 7 insertions(+), 20 deletions(-) commit 15cc9d1e3bb65d33381756b5522f8c8fcb7ab293 Author: Benjamin Dauvergne Date: Tue Aug 5 14:52:09 2008 +0000 * lasso/id-wsf/data_service.c: fix my own memleak inside build_modify_response_msg lasso/id-wsf/data_service.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit e12388204ed54b48709abae737306b6bcaa18a02 Author: Benjamin Dauvergne Date: Fri Aug 1 14:12:06 2008 +0000 polish code in lasso_discovery_build_credential lasso/id-wsf/discovery.c | 1 + 1 file changed, 1 insertion(+) commit 60579adcae68b1625e0e3652b094c421afe69836 Author: Benjamin Dauvergne Date: Fri Aug 1 14:12:03 2008 +0000 add macro to assign gobject field, first a simple version lasso/utils.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 89485bc9123887f57a038b9c289adb75a11df239 Author: Benjamin Dauvergne Date: Fri Aug 1 14:12:01 2008 +0000 beginning of a pool of macros for mem handling, affectation to fields, etc.. lasso/utils.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit 26a0b96f29f570a64502d43dba754b36602b150b Author: Benjamin Dauvergne Date: Fri Aug 1 14:11:59 2008 +0000 * remove body->id and correlation->id setup, no need to set id on everything. lasso/id-wsf/wsf_profile.c | 1 - 1 file changed, 1 deletion(-) commit d4b310822e88b313bba766e5054c67df289878c1 Author: Benjamin Dauvergne Date: Fri Aug 1 14:11:56 2008 +0000 * add detail node to node with specialised detection in lass_node_new_from_xmlNode lasso/xml/xml.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit c89267b8feb497d7525b53d066054d4911cd466a Author: Benjamin Dauvergne Date: Fri Aug 1 14:11:53 2008 +0000 * specialise lasso_node_new_from_xmlNode for soap:detail node lasso/xml/xml.c | 2 ++ 1 file changed, 2 insertions(+) commit 1a058b6037a0de36997655cbf666dbd558fa24dc Author: Benjamin Dauvergne Date: Fri Aug 1 14:11:51 2008 +0000 remove useless overriding bindings/overrides.xml | 1 - 1 file changed, 1 deletion(-) commit d82175f9939f97669c242f8cfd8b47bb4842be0d Author: Benjamin Dauvergne Date: Fri Aug 1 14:11:49 2008 +0000 Match is:RedirectRequest and set msg_url to the url to redirect to lasso/id-wsf/wsf_profile.c | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) commit 4a8ba28e2bcde906bf76f7f2fd760eb5d3676701 Author: Benjamin Dauvergne Date: Fri Aug 1 14:11:46 2008 +0000 do not use normal add_assertion method when reconstructing a session, no need to add Advice to assertion_by_id container lasso/id-ff/session.c | 55 ++++++++++++++++++++++++++++++--------------------- 1 file changed, 33 insertions(+), 22 deletions(-) commit 18e146b6c5ab50888ccc04c0ac609c4210e8ec1c Author: Benjamin Dauvergne Date: Fri Aug 1 14:11:43 2008 +0000 Fix wrong node name in SOAP fault lasso/xml/soap_detail.c | 2 +- lasso/xml/soap_fault.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 6adc1f8a9be82a59e7c6ac66ae11fce9365bc075 Author: Benjamin Dauvergne Date: Fri Aug 1 14:11:41 2008 +0000 Fix bad SNIPPET_TYPE for attribute maxInteractionTime, it was treated as a string, and provoked a SEGFAULT. lasso/xml/is_user_interaction.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit e3c2e7dccd705f01b5cbea002d544c6dc0f31e23 Author: Benjamin Dauvergne Date: Fri Aug 1 14:11:38 2008 +0000 * lasso/xml/xml.c: add support for dgme:Status node. lasso/xml/xml.c | 2 ++ 1 file changed, 2 insertions(+) commit c9304be702ba5ffbbce3ac57f77cbeb865808e38 Author: Benjamin Dauvergne Date: Fri Aug 1 14:11:35 2008 +0000 * lasso/xml/xml.c: in samlNs, compare prefix *AND* href fields of the namespace object lasso/xml/xml.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit a978d26323fb7d01a769d62aecd23acdca216e78 Author: Benjamin Dauvergne Date: Fri Aug 1 14:11:32 2008 +0000 copy node instead of stealing it to xmlDoc object, when parsing session dump if no children is present try to get a base64 encoded assertion. lasso/id-ff/session.c | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) commit 905f718a36faca3549a1650e764e9ef8e97c0743 Author: Benjamin Dauvergne Date: Fri Aug 1 14:11:30 2008 +0000 add assertion_id to TokenSecurityReference lasso/id-wsf/wsf_profile.c | 2 ++ 1 file changed, 2 insertions(+) commit fd092b101c5668f4421fa6ed3be76abc8ed30ce6 Author: Benjamin Dauvergne Date: Fri Aug 1 14:11:28 2008 +0000 * lasso/id-ff/session.c: fix compilation errors. lasso/id-ff/session.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) commit 6e5b696dfac4df0501163f738573790667a082d1 Author: Benjamin Dauvergne Date: Fri Aug 1 14:11:25 2008 +0000 * lasso/id-ff/session.c: store ID-WSF assertion in base64 to fix problem of formatting of session dumps. lasso/id-ff/session.c | 76 +++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 73 insertions(+), 3 deletions(-) commit 0aa45087ad46dd0925422abab05ea06484eb0a2f Author: Benjamin Dauvergne Date: Fri Aug 1 14:11:23 2008 +0000 * lasso/id-wsf/wsf_profile.c: - change return code variable from 'ret' to 'rc' to permit use of standardised macros like goto_exit_if_fail. - add initialization to NULL of lot of variables, to enable error return paths. - adapt to change bo soap:Body id field to its new name 'Id' - fix numerous mem leaks by using assignment macros (g_assign_gobject, g_list_add_gobject) and release macros (g_release_gobject). lasso/id-wsf/wsf_profile.c | 121 ++++++++++++++++++++++++--------------------- 1 file changed, 66 insertions(+), 55 deletions(-) commit 593a21e91bf5c658da29b3e763ab021ed6552c80 Author: Benjamin Dauvergne Date: Fri Aug 1 14:11:20 2008 +0000 * lasso/id-ff/login.c: comment the generation of Advice when ResourceOffering for the DiscoService support a security mechanism needing one. Anyway the generation of Credentials is broken. * lasso/id-ff/session.c: add treatment of saml:Advice on newly added Assertions, keep the transmitted assertions inside the session indexed by their AssertionID. * lasso/xml/saml_advice.{c,h}: change content to SNIPPET_LIST_XMLNODES. lasso/id-ff/login.c | 2 +- lasso/id-ff/session.c | 19 +++++++++++++++++++ lasso/xml/saml_advice.c | 10 ++++++---- lasso/xml/saml_advice.h | 5 +++-- 4 files changed, 29 insertions(+), 7 deletions(-) commit 2be854e07e4f712e55f0753436ca53174683a105 Author: Benjamin Dauvergne Date: Fri Aug 1 14:11:17 2008 +0000 * lasso/id-wsf/discovery.c: fix macros assign_resource_id to adapt to standard return code name: rc lasso/id-wsf/discovery.c | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) commit ff2a26b9dee2acfaf8c05679c8e0b1f8d8c48a09 Author: Benjamin Dauvergne Date: Fri Aug 1 14:11:15 2008 +0000 * lasso/id-wsf-2.0/profile.c, lasso/id-wsf/authentication.c: adapt to change of name of id attribute in LassoSoapBody lasso/id-wsf-2.0/profile.c | 2 +- lasso/id-wsf/authentication.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 6f53f6c95a5320ff90145f26759cea7568b33e0f Author: Benjamin Dauvergne Date: Fri Aug 1 14:11:13 2008 +0000 * lasso/xml/disco_encrypted_resource_id.{c,h}: add support for any kind of content through a SNIPPET_LIST_XMLNODES marked field. lasso/xml/disco_encrypted_resource_id.c | 2 ++ lasso/xml/disco_encrypted_resource_id.h | 1 + 2 files changed, 3 insertions(+) commit 2285367f6befa9849f205f27af8f2b90920201f2 Author: Benjamin Dauvergne Date: Fri Aug 1 14:11:10 2008 +0000 * lasso/xml/soap_body.h: change name of variable id to Id * lasso/xml/soap_body.c: change attribute id to Id and fix its namespace (wssu) in overloaded get_xmlNode lasso/xml/soap_body.c | 26 ++++++++++++++++++++++++-- lasso/xml/soap_body.h | 2 +- 2 files changed, 25 insertions(+), 3 deletions(-) commit 72e61fb41712657ace0f2b8980eb7f332d37259f Author: Benjamin Dauvergne Date: Fri Aug 1 14:11:07 2008 +0000 * lasso/xml/wsse_security.c: fix wrong namespace lasso/xml/wsse_security.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 2cb76452da1e9f89200fd9ab5fb201f6a227943a Author: Benjamin Dauvergne Date: Fri Aug 1 14:11:05 2008 +0000 * lasso/xml/xml.c: make xmlClean change namespace of properties not just of nodes lasso/xml/xml.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) commit 205d705b33dfe9cb1ae485c88824a6e20c7f53ba Author: Benjamin Dauvergne Date: Fri Aug 1 14:11:02 2008 +0000 * lasso/xml/xml.c: adapt to new prefix of Dgme library lasso/xml/xml.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit c879c0a510308c13f05a7a994f39b022e8104493 Author: Benjamin Dauvergne Date: Fri Aug 1 14:10:59 2008 +0000 * lasso/errors.h: new error for LassoWsfProfile signal missing Credentials lasso/errors.c | 2 ++ lasso/errors.h | 1 + 2 files changed, 3 insertions(+) commit e0f147b525b8035e6c357467b1eec2bdff88ad68 Author: Benjamin Dauvergne Date: Fri Aug 1 14:10:56 2008 +0000 * bindings/lang_python_wrapper_top.c: add cast to suppress warning about g_list_length argument non-constness. add support for LassoDgme* objects, must find a better way to do this in the future. bindings/lang_python_wrapper_top.c | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) commit 89bcfd78bf63724c8e4a2fcbad22e7bedee0c3f0 Author: Benjamin Dauvergne Date: Fri Aug 1 14:10:54 2008 +0000 * lasso/id-wsf/discovery.c: (lasso_discovery_build_credential, lasso_discovery_add_remove_entry, lasso_discovery_add_requested_service_type) use macro g_list_add, to reduce code size. lasso/id-wsf/discovery.c | 42 +++++++++++++----------------------------- 1 file changed, 13 insertions(+), 29 deletions(-) commit 33ac0485ad3f0d600ccceb1a2056b9423daecaef Author: Benjamin Dauvergne Date: Fri Aug 1 14:10:52 2008 +0000 * lasso/id-wsf/wsf_profile.c: In lasso_wsf_profile_set_security_mech_id if security_mech_id is NULL, default to LASSO_SECURITY_MECH_NULL. In lasso_wsf_profile_init_soap_request increment ref count of the argument when new reference are created. lasso/id-wsf/wsf_profile.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) commit b573de5a673b28ca9c958214b7de178f97996c1f Author: Benjamin Dauvergne Date: Fri Aug 1 14:10:50 2008 +0000 * bindings/bindings.py: support const modifier on this argument bindings/bindings.py | 1 + bindings/python/tests/Makefile.am | 2 +- bindings/python/tests/idwsf1_tests.py | 4 ++-- 3 files changed, 4 insertions(+), 3 deletions(-) commit cf5e4d4b867b3c75df148b98cc792a8cf8991968 Author: Benjamin Dauvergne Date: Fri Aug 1 14:10:47 2008 +0000 * add lasso/lasso_config.h.in because it is not generated anymore since config.h become the normal configuration file. lasso/lasso_config.h.in | 5 +++++ 1 file changed, 5 insertions(+) commit 9d1fd3c23e37aeb9366831a5866af87028b0ad12 Author: Benjamin Dauvergne Date: Fri Aug 1 14:10:45 2008 +0000 fix wrong const modifier lasso/id-wsf/discovery.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 605b1b38e64bb88be0cf3132ac7d53ddbc1153ab Author: Benjamin Dauvergne Date: Fri Aug 1 14:10:42 2008 +0000 * lasso/id-wsf/wsf_profile.c: fix wrong namespace in a call to xmlSecFindNode lasso/id-wsf/wsf_profile.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit a28637d0917f30375a282e76190900db7ff4dd84 Author: Benjamin Dauvergne Date: Fri Aug 1 14:10:39 2008 +0000 * lasso/id-wsf/wsf_profile.c: implement creation of the signature for ID-WSF SAML security mechanism. Implemented many utility function that could be shared with other part of the library. lasso/id-wsf/wsf_profile.c | 262 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 251 insertions(+), 11 deletions(-) commit 8ecaefc7fae2acf05c31880d85c62fd04399510b Author: Benjamin Dauvergne Date: Fri Aug 1 14:10:36 2008 +0000 * lasso/xml/tools.c: In lasso_sign_node suppress useless code to lookup the Signature node. lasso/xml/tools.c | 6 ------ 1 file changed, 6 deletions(-) commit 60ce087798241df90a19eea4d6232eb60cc54ab1 Author: Benjamin Dauvergne Date: Fri Aug 1 14:10:34 2008 +0000 * lasso/utils.h: add utility macros to releases libxml objects, to check null parameters or badly typed parameters. add a macro that go to an "exit" label and set the return code variable named "rc". lasso/utils.h | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) commit e9403b8f71b7897f8bb653f65c4cf28de99d1d73 Author: Benjamin Dauvergne Date: Fri Aug 1 14:10:31 2008 +0000 * lasso/id-wsf/wsf_profile.c: add documentation to the function lasso_wsf_profile_set_resource_offering: lasso/id-wsf/wsf_profile.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit 2310313cb152ea81f6f7b7b0b7abc58727d691e0 Author: Benjamin Dauvergne Date: Fri Aug 1 14:10:29 2008 +0000 * lasso/id-wsf/wsf_profile.c,wsf_profile.h,wsf_profile_private.h: add const modifier to signature when possible lasso/id-wsf/wsf_profile.c | 18 +++++++++--------- lasso/id-wsf/wsf_profile.h | 12 ++++++------ lasso/id-wsf/wsf_profile_private.h | 4 ++-- 3 files changed, 17 insertions(+), 17 deletions(-) commit 929318c821172f47ccf8a6a56e5eefdbf5a21773 Author: Benjamin Dauvergne Date: Fri Aug 1 14:10:26 2008 +0000 add a const modifier on the argument offering of lasso_discovery_get_description_auto lasso/id-wsf/discovery.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit ca2828a8f77dbd2365b069bb35b86412d836a50f Author: Benjamin Dauvergne Date: Fri Aug 1 14:10:23 2008 +0000 * lasso/id-wsf/discovery.c: In lasso_discovery_get_resource_offering_auto, do not increment reference count of the returned value, it is not how it is done in the rest of the library. Returned gobject are always not-owned reference, you reference them only to keep them around. lasso/id-wsf/discovery.c | 133 ++++++++++++++++++++++++----------------------- 1 file changed, 68 insertions(+), 65 deletions(-) commit 0b61efa7d89580b90dfe008016aa7f4ad9411176 Author: Benjamin Dauvergne Date: Fri Aug 1 14:10:21 2008 +0000 * Update errors.c to last state of errors.h lasso/errors.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit 5b6c85419bd31bfb0b191b28cd66f84d2bbd83ae Author: Benjamin Dauvergne Date: Fri Aug 1 14:10:19 2008 +0000 add an new error for a missing ResourceID inside a ResourceOffering lasso/errors.h | 1 + 1 file changed, 1 insertion(+) commit c37cd33e6f3ab52921fefdb0d5431bd11e2344f6 Author: Benjamin Dauvergne Date: Fri Aug 1 14:10:16 2008 +0000 add const modifier to conversion function on GList*, a problem still remains that g_list_length do not take a const GList* bindings/lang_python_wrapper_top.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) commit 78b38f8f0eccc5d55a9f52a8fdda4f52dca177e8 Author: Benjamin Dauvergne Date: Fri Aug 1 14:10:14 2008 +0000 mark init_modify as deprecated, use init_insert lasso/id-wsf/discovery.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 68b6e578e44fcf92c46688806afb77c4e5cb3f08 Author: Benjamin Dauvergne Date: Fri Aug 1 14:10:11 2008 +0000 fix forgottent arg to g_list_foreach lasso/utils.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 36e234627a5001c286eeaa1764cd6734128fe79b Author: Benjamin Dauvergne Date: Fri Aug 1 14:10:08 2008 +0000 start rework of lasso_discovery_init_request, my intention is to base toher init_ function on this one lasso/id-wsf/discovery.c | 79 +++++++++++++++++++++++------------------------- 1 file changed, 37 insertions(+), 42 deletions(-) commit 4d2d8552dcc88e4df8a7c09ec95ff44c8cce9aa2 Author: Benjamin Dauvergne Date: Fri Aug 1 14:10:05 2008 +0000 fix a reference counting error when building response message lasso/id-wsf/discovery.c | 2 ++ 1 file changed, 2 insertions(+) commit 80a031f3ac3d701816cb9893b37da86c5c2f26c4 Author: Benjamin Dauvergne Date: Fri Aug 1 14:10:02 2008 +0000 add documentation to lasso/id-wsf/discovery.c lasso/id-wsf/discovery.c | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) commit 4301f1775bbd3ea73130326d2241ee0611b91a88 Author: Benjamin Dauvergne Date: Fri Aug 1 14:10:00 2008 +0000 reflects change inside lasso/id-ff/identity.c in assertions bindings/python/tests/idwsf1_tests.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) commit ecb45a9f8f9961ae96f899c0593c264fec238ff3 Author: Benjamin Dauvergne Date: Fri Aug 1 14:09:57 2008 +0000 - surrounded declaration of containers for ID-WSF object with ifdef/endif, did the same in initialization/finalization code. - changed storage of resource offering from a list to a hash table - added a counter to create entryIDs for newly added resource offerings - simplify the code around resource offerings management lasso/id-ff/identity.c | 193 ++++++++++++++++++++++++++----------------------- 1 file changed, 102 insertions(+), 91 deletions(-) commit 3755e5e5ca315ac213c4ba4d6cf9866bd5b6d9b6 Author: Benjamin Dauvergne Date: Fri Aug 1 14:09:55 2008 +0000 fix issue #15 "In lasso_data_service_build_modify_response_msg we free a shared xmlNode" lasso/id-wsf/data_service.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) commit 373a9de32493b8374224d699a6f2e6b33cbb6d49 Author: Benjamin Dauvergne Date: Fri Aug 1 14:09:52 2008 +0000 instead of moving assertion from session to new sessions, reference the old session in newly created ID-WSF services proxy lasso/id-wsf/discovery.c | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) commit 558bdb7074d0e3d64e56b9889daab443cb47035e Author: Benjamin Dauvergne Date: Fri Aug 1 14:09:49 2008 +0000 move session storage of assertion for SAML ID-WSF authentication of request to xmlNode instead of LassoNode; add error handling when no description has been found in comply_with_saml_authentication lasso/id-ff/session.c | 81 +++++++++++++++++++++++++++++++------------- lasso/id-ff/sessionprivate.h | 4 +-- lasso/id-wsf/discovery.c | 15 ++++---- lasso/id-wsf/wsf_profile.c | 22 ++++++++---- 4 files changed, 81 insertions(+), 41 deletions(-) commit e4fda38df5db9567ab84939d0bb0fd087377e060 Author: Benjamin Dauvergne Date: Fri Aug 1 14:09:47 2008 +0000 beginning of signature implementation for SAML authentication lasso/id-wsf/wsf_profile.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) commit 0e6b3cd72e1726b2ceba91d7263b42bfa1f8e9c6 Author: Benjamin Dauvergne Date: Fri Aug 1 14:09:44 2008 +0000 fix naming in documentation of lasso_wsf_profile_set_description_from_offering, add new private function lasso_wsf_profile_set_resource_offering lasso/id-wsf/wsf_profile.c | 18 +++++++++++++++--- lasso/id-wsf/wsf_profile_private.h | 2 ++ 2 files changed, 17 insertions(+), 3 deletions(-) commit 7c9d025caf11bebf9d752736a9799e9f3e4f6d2e Author: Benjamin Dauvergne Date: Fri Aug 1 14:09:42 2008 +0000 integrate new errors messages lasso/errors.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) commit 4113e7c5af48698a23cd94892951eef3bab305bf Author: Benjamin Dauvergne Date: Fri Aug 1 14:09:40 2008 +0000 add a lasso_discovery_new_full function lasso/id-wsf/discovery.c | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) commit ae7f4f742442baef9c550f9d6c7a4f429a18afe8 Author: Benjamin Dauvergne Date: Fri Aug 1 14:09:38 2008 +0000 deprecated lasso_discovery_init_modify lasso/id-wsf/discovery.c | 25 +++++-------------------- lasso/id-wsf/discovery.h | 2 +- 2 files changed, 6 insertions(+), 21 deletions(-) commit 763195b51876868b43bf146fc9c83ac9791b785b Author: Benjamin Dauvergne Date: Fri Aug 1 14:09:35 2008 +0000 add somme error messages, add new error LASSO_WSF_PROFILE_ERROR_MISSING_DESCRIPTION, when no description can be found for the chosen security mechanism lasso/errors.h | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) commit a4daec5c74ed5f9fc2f5af5c8cfbcc1c035d0a90 Author: Benjamin Dauvergne Date: Fri Aug 1 14:09:33 2008 +0000 add matching of Bearer authentication, support ID-WSF 1.1 security mechanisms URNs lasso/id-wsf/utils.c | 53 +++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 40 insertions(+), 13 deletions(-) commit 1311929c0a67ec3f853d04ccde3de590fa31417d Author: Benjamin Dauvergne Date: Fri Aug 1 14:09:31 2008 +0000 fix error of namespace lasso/xml/sec_resource_access_statement.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit eccefdb285788d95d50077bdc4c91237df9eaf6d Author: Benjamin Dauvergne Date: Fri Aug 1 14:09:29 2008 +0000 change content from list of LassoNode to list of xmlNode lasso/xml/disco_credentials.c | 2 +- lasso/xml/disco_credentials.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 10980073a0b4241453f85297d27d38a185d23e89 Author: Benjamin Dauvergne Date: Fri Aug 1 14:09:27 2008 +0000 changed contents to list of xmlNodes instead of LassoNode lasso/xml/wsse_security.c | 2 +- lasso/xml/wsse_security.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 2d1e988b5f4642b398aa482c6d149534497fdba2 Author: Benjamin Dauvergne Date: Fri Aug 1 14:09:24 2008 +0000 add strings for security mechanism defined in ID-WSF 1.1 lasso/xml/strings.h | 6 ++++++ 1 file changed, 6 insertions(+) commit 0267e09b8a844505e6d8b8149c4b6236a2e19124 Author: Benjamin Dauvergne Date: Fri Aug 1 14:09:21 2008 +0000 forked lasso branch for adeline lasso/Makefile.am | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit bb0644277300486fcaad42fb7793abbab9876ff3 Author: Benjamin Dauvergne Date: Fri Aug 1 14:09:19 2008 +0000 add a general error for a badly initialized object and two error for idwsf relating to a missing assertion id and a missing endpoint declaration lasso/errors.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit 8667e771b1b0758788d0693a5c3f8ddd1b18684b Author: Benjamin Dauvergne Date: Fri Aug 1 14:09:17 2008 +0000 Revert " * remove body->id and correlation->id setup, no need to set id on everything." This reverts commit 832f127760dc074336400531a99f3a03574ffe13. lasso/id-wsf/wsf_profile.c | 2 ++ 1 file changed, 2 insertions(+) commit 6be4b416ceacf0f2a3840953e35da88e73adc082 Author: Benjamin Dauvergne Date: Fri Aug 1 14:09:15 2008 +0000 added functions to release [list]string/gobject/any lasso/utils.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 9314cecc4f21f42a22f353588f6cd64dbf387bfc Author: Benjamin Dauvergne Date: Fri Aug 1 14:09:13 2008 +0000 add methods to manipulate list of gobjects, and dissociate affectation of fresh object from older objects lasso/utils.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit 7556ea6c2e69be8ef9b731af5861746eb3d8c354 Author: Benjamin Dauvergne Date: Fri Aug 1 14:09:11 2008 +0000 add macro to assign gobject field, first a simple version lasso/utils.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 5cc428f3690b70fa9c7568fc4584ec57f043e516 Author: Benjamin Dauvergne Date: Fri Aug 1 14:09:09 2008 +0000 fix typo in last commit lasso/soap_binding.c | 54 +++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 41 insertions(+), 13 deletions(-) commit f112d765359de896a2bc53b50193aee0193f48ba Author: Benjamin Dauvergne Date: Fri Aug 1 14:09:06 2008 +0000 add soap binding util function to lookup specific SOAP header for ID-WSF SOAP encapsulation lasso/Makefile.am | 4 ++-- lasso/soap_binding.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ lasso/soap_binding.h | 43 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 91 insertions(+), 2 deletions(-) commit ada94eb956b1831c9dcc60d737fda5a4e93f5748 Author: Benjamin Dauvergne Date: Fri Aug 1 14:09:04 2008 +0000 beginning of a pool of macros for mem handling, affectation to fields, etc.. lasso/utils.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit 604bd4b79853f129d25bd2e40fb3b5cf9cf2145e Author: Benjamin Dauvergne Date: Fri Aug 1 14:09:02 2008 +0000 * remove body->id and correlation->id setup, no need to set id on everything. lasso/id-wsf/wsf_profile.c | 2 -- 1 file changed, 2 deletions(-) commit b9ed809caccea6b3ec85185c5dbf65e62fc4efb3 Author: Benjamin Dauvergne Date: Fri Aug 1 14:08:59 2008 +0000 forked lasso branch for adeline perl/Makefile.am | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit 76d9fce5d584fda7dc3afa25ca1390c7c06a0fc3 Author: Benjamin Dauvergne Date: Fri Aug 1 14:08:54 2008 +0000 forked lasso branch for adeline bindings/lang_java_wrapper_top.c | 2 +- bindings/lang_python_wrapper_top.c | 2 +- bindings/overrides.xml | 3 ++ configure.ac | 2 +- lasso/Makefile.am | 7 ++- lasso/build_strerror.py | 6 ++- lasso/id-ff/identity.c | 2 +- lasso/id-ff/login.c | 2 +- lasso/id-ff/loginprivate.h | 2 +- lasso/id-ff/server.c | 2 +- lasso/id-ff/session.c | 21 ++++----- lasso/id-ff/sessionprivate.h | 16 +++---- lasso/id-wsf/Makefile.am | 6 ++- lasso/id-wsf/authentication.c | 42 ++++++++++++++++-- lasso/id-wsf/data_service.c | 2 - lasso/id-wsf/discovery.c | 62 ++++++++++++++++++-------- lasso/id-wsf/discovery.h | 1 + lasso/id-wsf/soap_binding.c | 2 +- lasso/id-wsf/soap_binding.h | 4 +- lasso/id-wsf/utils.c | 15 ++++--- lasso/id-wsf/wsf_profile.c | 91 +++++++++++++++++++++----------------- lasso/id-wsf/wsf_profile.h | 11 +++-- lasso/lasso.c | 3 +- lasso/saml-2.0/assertion_query.c | 2 +- lasso/saml-2.0/ecpprivate.h | 2 +- lasso/xml/disco_description.c | 6 +-- lasso/xml/strings.h | 1 + lasso/xml/tools.c | 5 ++- lasso/xml/xml.c | 3 ++ swig/Lasso-wsf-disco.i | 1 + tests/tests.c | 2 +- 31 files changed, 210 insertions(+), 118 deletions(-) commit 51b572d5748f92cf9780b6a6154d4931d1c7cdd1 Author: Benjamin Dauvergne Date: Fri Aug 1 14:08:49 2008 +0000 forked lasso branch for adeline lasso/{ => id-wsf}/soap_binding.c | 0 lasso/{ => id-wsf}/soap_binding.h | 0 2 files changed, 0 insertions(+), 0 deletions(-) commit e29734709ea400e2d7f8cdb02a5c358e8ff7d4b6 Author: Benjamin Dauvergne Date: Fri Aug 1 14:08:46 2008 +0000 keep head version lasso/errors.h | 64 ---------------------------------------------------------- 1 file changed, 64 deletions(-) commit bbd7e083b233c8d706dd40645a417f24c362439c Author: Benjamin Dauvergne Date: Fri Aug 1 14:08:41 2008 +0000 * lasso/id-wsf/discovery.c: - include utils.h - move lasso_wsf_profile_build_key_info_node here - add a comment for future review of lasso_discovery_build_credential - remove direct use of lasso_wsf_profile_build_soap_envelope, use lasso_wsf_profile_init_soap_request instead. * lasso/id-wsf/utils.{c,h}: - new file with security mech id matching functions * lasso/id-wsf/wsf_profile.c: - remove all credentials related static functions - empty all credentials related public functions - move function related to matching security mechanism into utils.{c,h} and xml/disco_description.h - add static function lasso_wsf_profile_comply_with_saml_authentication that tries to add credential to the request to a web service using the SAML WS-Security mechanism - add static function lasso_wsf_profile_comply_with_security_mechanism to dispatch upon the current chosen securirt mechanism. - extract build_soap_envelope to the static function build_soap_envelope_internal to remove warning of usage of a deprecated function. - remove lasso_wsf_profile_set_public_key - remove lasso_wsf_profile_set_security_mech_id - add lasso_wsf_profile_get_security_mechanism - add lasso_wsf_profile_set_description - empty function about online status of the principal - remove all (non-working) handling of the x509 security mechanism - add a new constructor function LassoWsfProfile* lasso_wsf_profile_new_full(LassoServer *server, LassoDiscoResourceOffering *offering) - and a new init function (for subclass): gint lasso_wsf_profile_init(LassoWsfProfile *profile, LassoServer *server, LassoDiscoResourceOffering *offering) * lasso/id-wsf/wsf_profile.h: - mark as deprecated: lasso_wsf_profile_move_credentials lasso_wsf_profile_build_soap_envelope lasso_wsf_profile_set_provider_soap_request lasso_wsf_profile_principal_is_online lasso_wsf_profile_add_credential lasso_wsf_profile_set_principal_status lasso_wsf_profile_set_principal_online lasso_wsf_profile_set_principal_offline * lasso/id-wsf/wsf_profile_private.h: - remove fields from LassoWsfProfilePrivate structure: - GList *credentials; - gchar *public_key; - add fields: - char *security_mech_id; - LassoDiscoResourceOffering *offering; lasso/id-wsf/discovery.c | 105 ++- lasso/id-wsf/utils.c | 26 +- lasso/id-wsf/utils.h | 1 + lasso/id-wsf/wsf_profile.c | 1402 +++++++++--------------------------- lasso/id-wsf/wsf_profile.h | 28 +- lasso/id-wsf/wsf_profile_private.h | 13 +- 6 files changed, 465 insertions(+), 1110 deletions(-) commit be5b6e196b430a1bff452d2815d798ab7058880b Author: Benjamin Dauvergne Date: Fri Aug 1 14:08:39 2008 +0000 include utils.h lasso/xml/disco_description.c | 1 + 1 file changed, 1 insertion(+) commit 31dd618a82d7fb86ec0ebb2b18a8ee372607761f Author: Benjamin Dauvergne Date: Fri Aug 1 14:08:37 2008 +0000 fix typo on name of an xmlsec function lasso/xml/tools.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 17d3fb250d96ca25e649f2654f6dd820e8429786 Author: Benjamin Dauvergne Date: Fri Aug 1 14:08:34 2008 +0000 change strings for security mechanisms to comply with the spec lasso/xml/strings.h | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) commit 19e23fe74858846d16923a227dffa4498d07a731 Author: Benjamin Dauvergne Date: Fri Aug 1 14:08:31 2008 +0000 * Move error message inside comments in lasso/errors.h * Add a script to autogenerate lasso/errors.c from errors.h * Update errors.c * Add a target to Makefile.am to create errors.c lasso/build-strerror.pl | 24 +++++++++++++++++++ lasso/errors.c | 3 ++- lasso/errors.h | 64 +++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 90 insertions(+), 1 deletion(-) commit 2c2c50e952b4d5065ab8f7a66c5937cb9874d64d Author: Benjamin Dauvergne Date: Fri Aug 1 14:08:29 2008 +0000 move and export matching function for disco description into lasso/xml/disco_description.c lasso/xml/disco_description.c | 66 +++++++++++++++++++++++++++++++++++++++++++ lasso/xml/disco_description.h | 6 ++++ 2 files changed, 72 insertions(+) commit 99a2c411477f2dbc376fcb194a15a8938868ba39 Author: Benjamin Dauvergne Date: Fri Aug 1 14:08:27 2008 +0000 fix bad copy/paste lasso/id-wsf/utils.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 61e78c8e6d072511c5fa2972a39b8ae875a2aa0d Author: Benjamin Dauvergne Date: Fri Aug 1 14:08:25 2008 +0000 add utils.c and utils.h to file list lasso/id-wsf/Makefile.am | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit fc1fa52ef254f45baaee867e96741c29dde154b0 Author: Benjamin Dauvergne Date: Fri Aug 1 14:08:22 2008 +0000 move some utility functions out of wsf_profile.c lasso/id-wsf/utils.c | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++ lasso/id-wsf/utils.h | 31 +++++++++++++++++++++++ 2 files changed, 101 insertions(+) commit 0d5011c65ddb8277add9cdb93595da76fd735a7b Author: Benjamin Dauvergne Date: Fri Aug 1 14:08:20 2008 +0000 - lasso/id-wsf/wsf_profile.c lasso/id-wsf/wsf_profile_private.h: extract LassoWsfProfilePrivate structure. lasso/id-wsf/wsf_profile.c | 9 --------- lasso/id-wsf/wsf_profile_private.h | 9 +++++++++ 2 files changed, 9 insertions(+), 9 deletions(-) commit ed41e73e77bc76467cf7b1d70b1825fcba86b73a Author: Benjamin Dauvergne Date: Fri Aug 1 14:08:17 2008 +0000 * lasso/id-wsf/discovery.c: repurpose lasso_discovery_process_query_response_msg in order to extract credentials informations and store them into the current session. * lasso/id-wsf/wsf_profile.c: Remove any high-level processing from lasso_wsf_profile_process_soap_response_msg, just parse and setup the corresponding fields into the structure. Eventually signal a SOAP using a return code. lasso/id-wsf/discovery.c | 43 +++++++++++++------ lasso/id-wsf/wsf_profile.c | 102 ++++++++++++++++++--------------------------- 2 files changed, 70 insertions(+), 75 deletions(-) commit 0546219300855f2f1e39c973fcc958f68e411af7 Author: Benjamin Dauvergne Date: Fri Aug 1 14:08:14 2008 +0000 Add an index of assertions by ID and two new function lasso_session_add_assertion_with_id(session, id, assertion) and lasso_session_get_assertion_by_id(session, id) Add to lasso_session_add_assertion a call to add_assertion_with_id, to index all assertions into the index by id. lasso/id-ff/session.c | 72 +++++++++++++++++++++++++++++++++++++++----- lasso/id-ff/session.h | 1 - lasso/id-ff/sessionprivate.h | 16 ++++++++++ 3 files changed, 80 insertions(+), 9 deletions(-) commit a3de4846770012943c8c1ef7449aea68c54a5b01 Author: Benjamin Dauvergne Date: Fri Aug 1 14:08:12 2008 +0000 rebase to trunk lasso/id-wsf/discovery.c | 5 ++--- lasso/id-wsf/wsf_profile.c | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) commit 5b7f4918517b05e014fab121fbc66443e60ec37a Author: Benjamin Dauvergne Date: Fri Aug 1 14:08:09 2008 +0000 Add disco_description in includes lasso/id-wsf/wsf_profile.h | 1 + 1 file changed, 1 insertion(+) commit a20d2aa49f0b66575d869f9733db8dc02a2b1950 Author: Benjamin Dauvergne Date: Fri Aug 1 14:08:07 2008 +0000 * add type decl to field GList* any lasso/xml/wsse_security.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit b6b47f91053f18779ec62e28168a6678f3e56c57 Author: Benjamin Dauvergne Date: Fri Aug 1 14:08:05 2008 +0000 lasso_wsf_profile_build_soap_request_msg: - add a TODO comment lasso/id-wsf/wsf_profile.c | 3 +++ 1 file changed, 3 insertions(+) commit 960da0ca54128cda4193640095968344353e3a4b Author: Benjamin Dauvergne Date: Fri Aug 1 14:08:02 2008 +0000 - lasso_wsf_profile_add_soap_signature: * add documentation * user xmlSec functions for findings nodes * add comments on the work flow * fix memleak * remove enveloped signature transform, it is a detached signature. lasso/id-wsf/wsf_profile.c | 85 +++++++++++++++++++++++----------------------- 1 file changed, 42 insertions(+), 43 deletions(-) commit d116323aabe0cbe837822302e2f2515727647a28 Author: Benjamin Dauvergne Date: Fri Aug 1 14:07:59 2008 +0000 - lasso_wsf_profile_verify_saml_authentication: - add comments on the work flow - simplify and centralize cleanup code - loop over all assertion lookup for signature to verif lasso/id-wsf/wsf_profile.c | 49 +++++++++++++++++----------------------------- 1 file changed, 18 insertions(+), 31 deletions(-) commit da8bef4d6965db0d6f4a1ca26eefce644d1ff7a6 Author: Benjamin Dauvergne Date: Fri Aug 1 14:07:57 2008 +0000 - lasso_wsf_profile_add_credential_signature: * add documentation * reformat * add comments on the work flow * fix memleak - suppress lasso_wsf_profile_get_public_key_from_credential lasso/id-wsf/wsf_profile.c | 249 ++++++++++++++++++--------------------------- 1 file changed, 98 insertions(+), 151 deletions(-) commit 52483330ff0526f13097f462c7be77eefcda8645 Author: Benjamin Dauvergne Date: Fri Aug 1 14:07:55 2008 +0000 - lasso_wsf_profile_verify_credential_signature: * centralize and simplify cleanup code * add comments describing the flow lasso/id-wsf/wsf_profile.c | 80 +++++++++++++++++++++++++--------------------- 1 file changed, 43 insertions(+), 37 deletions(-) commit d2e3ec3fa355ed11eb090b34b4681c235097e6fb Author: Benjamin Dauvergne Date: Fri Aug 1 14:07:52 2008 +0000 - Add a const LassoDiscoDescription *lasso_wsf_profile_get_description(LassoWsfProfile *profile) - Add documentation to lasso_wsf_profile_verify_credential_signature lasso/id-wsf/wsf_profile.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) commit 02f8255421b5ac8e0269c66f0209d0971c1203a4 Author: Benjamin Dauvergne Date: Fri Aug 1 14:07:49 2008 +0000 Change formatting lasso/id-wsf/wsf_profile.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 960a10912f8cee75a51dd72af924d3bacb54be02 Author: Benjamin Dauvergne Date: Fri Aug 1 14:07:47 2008 +0000 -Use lasso_wsf_profile_is_saml_authentication in lasso_wsf_profile_has_saml_authentication -Add documentation for lasso_wsf_profile_is_x509_authentication ,lasso_wsf_profile_is_saml_authentication and lasso_security_mech_has_x509_authentication. lasso/id-wsf/wsf_profile.c | 62 ++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 51 insertions(+), 11 deletions(-) commit f32b5ec6678e1bc9ebe8b5d050dd1e2c4571b11f Author: Benjamin Dauvergne Date: Fri Aug 1 14:07:44 2008 +0000 Use macros instead of custom code, add parameter value verifications lasso/id-wsf/wsf_profile.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) commit 1c557b979152e65b95902ea18063c8b81e95f81d Author: Benjamin Dauvergne Date: Fri Aug 1 14:07:42 2008 +0000 In lasso_wsf_move_credentials use new lasso utils macros lasso/id-wsf/wsf_profile.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit f91731b0082e9c0b60648ece32a3e03618e49256 Author: Benjamin Dauvergne Date: Fri Aug 1 14:07:39 2008 +0000 Documentation for lasso_wsf_profile_has_saml_authentication lasso/id-wsf/wsf_profile.c | 10 ++++++++++ 1 file changed, 10 insertions(+) commit 0157a0cfe0e718da2beaaa5c5eb4f01772445d93 Author: Benjamin Dauvergne Date: Fri Aug 1 14:07:37 2008 +0000 Documentation for lasso_wsf_profile_get_fault lasso/id-wsf/wsf_profile.c | 6 ++++++ 1 file changed, 6 insertions(+) commit e94a644e03224a649db8174d8318bb76a5c33613 Author: Benjamin Dauvergne Date: Fri Aug 1 14:07:35 2008 +0000 Documentation for lasso_wsf_profile_get_description_autos lasso/id-wsf/wsf_profile.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) commit c71dfaf498e301b2ca050e2223ee5b69ad20eb25 Author: Benjamin Dauvergne Date: Fri Aug 1 14:07:32 2008 +0000 Documentation for lasso_wsf_profile_set_public_key lasso/id-wsf/wsf_profile.c | 7 +++++++ 1 file changed, 7 insertions(+) commit 5bb615a54c98981ee32a045e93b868d0be65556b Author: Benjamin Dauvergne Date: Fri Aug 1 14:07:29 2008 +0000 Documentation for lasso_wsf_profile_add_credential lasso/id-wsf/wsf_profile.c | 10 ++++++++++ 1 file changed, 10 insertions(+) commit 3e994cd469db6dfa7e7fe8ee7315493f355807d6 Author: Benjamin Dauvergne Date: Fri Aug 1 14:07:27 2008 +0000 documentation for lasso_wsf_profile_move_credentials lasso/id-wsf/wsf_profile.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) commit 376dcdd7240ece140ef3c7d2aac3b38c547686e5 Author: Benjamin Dauvergne Date: Fri Aug 1 14:07:24 2008 +0000 add new method lasso_wsf_profile_set_description_from_offering lasso/id-wsf/wsf_profile.c | 43 ++++++++++++++++++++++++++++++++++++++++++- lasso/id-wsf/wsf_profile.h | 5 +++++ 2 files changed, 47 insertions(+), 1 deletion(-) commit 540f540e8c5692c32eef22677c16cd38d702ab55 Author: Benjamin Dauvergne Date: Fri Aug 1 14:07:22 2008 +0000 fix typo lasso/xml/private.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit e7bdc957e8e1220d71f3368ddfca067a7fb27416 Author: Benjamin Dauvergne Date: Fri Aug 1 14:07:20 2008 +0000 add a general error for a badly initialized object and two error for idwsf relating to a missing assertion id and a missing endpoint declaration lasso/errors.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit be7d010290bed966642fb8925702436ca5274acf Author: Benjamin Dauvergne Date: Fri Aug 1 14:07:17 2008 +0000 Revert " * remove body->id and correlation->id setup, no need to set id on everything." This reverts commit 832f127760dc074336400531a99f3a03574ffe13. lasso/id-wsf/wsf_profile.c | 2 ++ 1 file changed, 2 insertions(+) commit 23fc1c54f1ebcc170a747268f03bb591f0d22b88 Author: Benjamin Dauvergne Date: Fri Aug 1 14:07:15 2008 +0000 add function to load a public key from anything lasso/xml/private.h | 4 +++- lasso/xml/tools.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 1 deletion(-) commit 934228a3c75afe441bc1de7db87fd4c5e700b24f Author: Benjamin Dauvergne Date: Fri Aug 1 14:07:13 2008 +0000 added functions to release [list]string/gobject/any lasso/utils.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 9d9fe50f2ed7228f455221f785cd98e7c4573886 Author: Benjamin Dauvergne Date: Fri Aug 1 14:07:11 2008 +0000 add methods to manipulate list of gobjects, and dissociate affectation of fresh object from older objects lasso/utils.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit b9860b3f6670c906b80d121e97ed14da19bd9f7e Author: Benjamin Dauvergne Date: Fri Aug 1 14:07:09 2008 +0000 use g_assign_gobject lasso/id-wsf/wsf_profile.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit f46f9a0bcf98c5f604e17c9379926914169c06ef Author: Benjamin Dauvergne Date: Fri Aug 1 14:07:06 2008 +0000 add methods to handle the registry of WsfProfile constructors - private: {lookup,remove,set}_registry handle access to the registry - public: lasso_discovery_[un]register_constructor_for_service_type gives access to this registry to other classes. Conflicts: lasso/id-wsf/discovery.c | 119 +++++++++++++++++++++++++++++++++++++++++++---- lasso/id-wsf/discovery.h | 9 +++- 2 files changed, 119 insertions(+), 9 deletions(-) commit ab7d689d3cffac6f6fd3aead241e0dd2116a0704 Author: Benjamin Dauvergne Date: Fri Aug 1 14:07:04 2008 +0000 add xml dump functionality lasso/id-wsf/wsf_profile.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) commit d17948e1fb17ada9ff1c68372601a390dbcc0892 Author: Benjamin Dauvergne Date: Fri Aug 1 14:07:02 2008 +0000 import discovery.h, fix name of registered constructor function lasso/id-wsf/personal_profile_service.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 273e6c28038eb08b053a4a746f8288437d54cc6b Author: Benjamin Dauvergne Date: Fri Aug 1 14:06:59 2008 +0000 change return type of lasso_discovery_get_service (kein direct user in the rest of the code) lasso/id-wsf/discovery.c | 2 +- lasso/id-wsf/discovery.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 6bd8540bc2d70235dc3e6bfea33dc9a80c2b6e65 Author: Benjamin Dauvergne Date: Fri Aug 1 14:06:57 2008 +0000 polish code in lasso_discovery_build_credential lasso/id-wsf/discovery.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) commit c633afc3fd3ae507329c47429facb8026060fdd1 Author: Benjamin Dauvergne Date: Fri Aug 1 14:06:55 2008 +0000 use lasso_discovery_build_wsf_profile commodity method in lasso_discovery_get_service(s) methods. lasso/id-wsf/discovery.c | 26 +++++++------------------- 1 file changed, 7 insertions(+), 19 deletions(-) commit ff1ed5220fd566f4d2443bb9585ad4fcb90ae38c Author: Benjamin Dauvergne Date: Fri Aug 1 14:06:53 2008 +0000 add registering of the constructor lasso/id-wsf/personal_profile_service.c | 1 + 1 file changed, 1 insertion(+) commit c405836d223184a53730d205fde41f429148f5ba Author: Benjamin Dauvergne Date: Fri Aug 1 14:06:51 2008 +0000 add macro to assign gobject field, first a simple version lasso/utils.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 69cbe921a3aa34fd2c7b9a4f08545cee1b1894be Author: Benjamin Dauvergne Date: Fri Aug 1 14:06:49 2008 +0000 use g_assign_string to update a string field lasso/id-wsf/wsf_profile.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) commit 9a14d69b1b617695e3dbe256255b68696479b83a Author: Benjamin Dauvergne Date: Fri Aug 1 14:06:47 2008 +0000 fix typo in last commit lasso/soap_binding.c | 54 +++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 41 insertions(+), 13 deletions(-) commit bfe206c67f8a6fa50cb75320045ef0c580dbf834 Author: Benjamin Dauvergne Date: Fri Aug 1 14:06:45 2008 +0000 add soap binding util function to lookup specific SOAP header for ID-WSF SOAP encapsulation lasso/Makefile.am | 4 ++-- lasso/soap_binding.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ lasso/soap_binding.h | 43 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 91 insertions(+), 2 deletions(-) commit 30b937c092d9718813982c1a57b0cdb90e78fc57 Author: Benjamin Dauvergne Date: Fri Aug 1 14:06:43 2008 +0000 if messageID is missing return MISSING_CORRELATION lasso/id-wsf/wsf_profile.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) commit 13cfa070a959583037af40ed5767a71625cc0991 Author: Benjamin Dauvergne Date: Fri Aug 1 14:06:41 2008 +0000 beginning of a pool of macros for mem handling, affectation to fields, etc.. lasso/utils.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit f3e42799b7a81d1df6a053d4bc716b45be251316 Author: Benjamin Dauvergne Date: Fri Aug 1 14:06:39 2008 +0000 look for the correlation element, do not just take the first one, report proper error if not present lasso/id-wsf/wsf_profile.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) commit 63b21e4cb6790a0d2e23f2843632915cacd290fb Author: Benjamin Dauvergne Date: Fri Aug 1 14:06:37 2008 +0000 remove useless reset of structure after allocation with g_new0 lasso/id-wsf/wsf_profile.c | 4 ---- 1 file changed, 4 deletions(-) commit 9ad0effabb92339e4cd9106cb9d2dc1b4a928be6 Author: Benjamin Dauvergne Date: Fri Aug 1 14:06:35 2008 +0000 * set credential to NULL when freed lasso/id-wsf/wsf_profile.c | 1 + 1 file changed, 1 insertion(+) commit e442d9b838291c49a8a0ca218782e7b75da75a42 Author: Benjamin Dauvergne Date: Fri Aug 1 14:06:32 2008 +0000 * remove body->id and correlation->id setup, no need to set id on everything. lasso/id-wsf/wsf_profile.c | 2 -- 1 file changed, 2 deletions(-) commit bd6170f3cc8c18391ce61dccc23beee5f4c946db Author: Frederic Peters Date: Tue Jul 22 14:12:07 2008 +0000 published news about 2.2.1 website/web/download/index.xml | 4 ++-- website/web/news/12-release-2.2.1.xml | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) commit e71bebd27c1decfbba9a2494ef995d3b6ccfcf7f Author: Frederic Peters Date: Tue Jul 22 12:45:52 2008 +0000 bumped to 2.2.1 ChangeLog | 171 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ NEWS | 6 +++ configure.ac | 6 +-- lasso.doap | 6 +++ 4 files changed, 186 insertions(+), 3 deletions(-) commit 6f1adef11c23b2f90248d08143c624e2f22bef3d Author: Frederic Peters Date: Tue Jul 22 12:09:06 2008 +0000 fixed order of freeing calls (stolen from ec76ae4f7e40e99443ad421a85ec4d3fb7359bf3) lasso/id-ff/profile.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 29e87584e99a3382491fb4cb9216eb372cff1891 Author: Frederic Peters Date: Tue Jul 22 12:07:18 2008 +0000 fixed ..._must_authenticate to look for any assertion, not just one from the requester provider. lasso/id-ff/login.c | 10 +++------- lasso/saml-2.0/login.c | 10 +++------- 2 files changed, 6 insertions(+), 14 deletions(-) commit f2a1ee398f631d35a9f3fd9137fdb02c40279c36 Author: Frederic Peters Date: Wed Jul 16 09:53:22 2008 +0000 don't copy gtk-doc tmpl/ files that do not longer exists (fixes make distcheck) docs/reference/Makefile.am | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) commit 676634b4e446870a32b336ae3ddf5ea1c91252d3 Author: Benjamin Dauvergne Date: Tue Jul 1 12:18:24 2008 +0000 change bug report link website/templates/base.ezt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 58ad7cf9f3a07059947d9a5c18744fed2bcbab57 Author: Benjamin Dauvergne Date: Sun Jun 29 19:11:25 2008 +0000 add build_strerror.py to EXTRA_DIST lasso/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 9d99fe7a9c3dd831045bd9f3cba6067d672c129c Author: Damien Laniel Date: Mon Jun 16 16:54:47 2008 +0000 set an accurate error code on IdP if session wasn't reloaded lasso/id-ff/login.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) commit 36919bdf64672376ad308aaadb0531caaf163aa9 Author: Frederic Peters Date: Thu Jun 5 15:46:42 2008 +0000 check NameIdentifier for existence before strcmp'ing it lasso/id-ff/login.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 1615e4596a76b61ec6162e34985b7e2b3fcb9699 Author: Benjamin Dauvergne Date: Fri May 30 13:03:06 2008 +0000 remove perl script for generating lasso_strerror, replace with a python script, do not replace errors.c if generation give the same file as before, add warning to errors.c about autogeneration, add documentation on lasso_strerror to errors.c.in lasso/Makefile.am | 11 +- lasso/build-strerror.pl | 24 --- lasso/build_strerror.py | 28 +++ lasso/errors.c | 479 +++++++++++++++++++----------------------------- lasso/errors.c.in | 10 + 5 files changed, 235 insertions(+), 317 deletions(-) commit e72184c8efde17598a7b20a3edf42fdb163d8fe3 Author: Benjamin Dauvergne Date: Fri May 30 12:41:11 2008 +0000 reformat utils.h lasso/utils.h | 103 +++++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 81 insertions(+), 22 deletions(-) commit b90ab6d783a8f278e32d9758f97e41aaf22c78e0 Author: Damien Laniel Date: Fri May 30 12:27:01 2008 +0000 fixed too long lines and remove some blank lines lasso/id-ff/logout.c | 3 ++- lasso/xml/id-wsf-2.0/disco_abstract.h | 5 ++--- lasso/xml/id-wsf-2.0/disco_provider_id.h | 4 ++-- lasso/xml/id-wsf-2.0/disco_service_type.h | 4 ++-- lasso/xml/id-wsf-2.0/disco_svc_md_association_add.h | 6 ++---- lasso/xml/id-wsf-2.0/disco_svc_md_association_delete.h | 6 ++---- lasso/xml/id-wsf-2.0/disco_svc_md_association_query.h | 6 ++---- lasso/xml/id-wsf-2.0/disco_svc_md_delete_response.h | 6 ++---- lasso/xml/id-wsf-2.0/disco_svc_md_register_response.h | 6 ++---- lasso/xml/id-wsf-2.0/disco_svc_md_replace_response.h | 6 ++---- lasso/xml/id-wsf-2.0/ims_identity_mapping_request.h | 6 ++---- lasso/xml/id-wsf-2.0/ims_identity_mapping_response.h | 6 ++---- lasso/xml/id-wsf-2.0/is_interaction_statement.h | 6 ++---- lasso/xml/id-wsf-2.0/ps_add_known_entity_response.h | 6 ++---- lasso/xml/id-wsf-2.0/ps_add_to_collection_request.h | 6 ++---- lasso/xml/id-wsf-2.0/ps_list_members_response.h | 6 ++---- lasso/xml/id-wsf-2.0/ps_query_objects_request.h | 6 ++---- lasso/xml/id-wsf-2.0/ps_remove_collection_request.h | 6 ++---- lasso/xml/id-wsf-2.0/ps_remove_entity_request.h | 6 ++---- lasso/xml/id-wsf-2.0/ps_remove_from_collection_request.h | 6 ++---- lasso/xml/id-wsf-2.0/ps_resolve_identifier_request.h | 6 ++---- lasso/xml/id-wsf-2.0/ps_resolve_identifier_response.h | 6 ++---- lasso/xml/id-wsf-2.0/ps_test_membership_response.h | 6 ++---- lasso/xml/id-wsf-2.0/sb2_user_interaction_header.h | 6 ++---- lasso/xml/id-wsf-2.0/sec_transited_provider_path.h | 6 ++---- 25 files changed, 50 insertions(+), 92 deletions(-) commit 14f7d3fc2acfa8d3fb4883e52210846ab6ae2b75 Author: Damien Laniel Date: Fri May 30 12:08:24 2008 +0000 fixed too long lines and remove some blank lines lasso/id-wsf/data_service.c | 3 ++- lasso/utils.h | 16 ++++++++++++---- .../id-wsf-2.0/disco_svc_md_association_add_response.h | 5 ++--- .../disco_svc_md_association_delete_response.h | 5 ++--- .../id-wsf-2.0/disco_svc_md_association_query_response.h | 5 ++--- 5 files changed, 20 insertions(+), 14 deletions(-) commit a0fdce3411192dd0dfa318f7fac01f2e9cdea533 Author: Damien Laniel Date: Fri May 30 11:57:58 2008 +0000 fixed tab/space mix lasso/errors.h | 60 +++++++++++++++++++++++++++++----------------------------- 1 file changed, 30 insertions(+), 30 deletions(-) commit 670c33b8d161330cff009bcaf8163094930dc446 Author: Benjamin Dauvergne Date: Fri May 30 11:55:12 2008 +0000 remove merge markers lasso/errors.h | 3 --- 1 file changed, 3 deletions(-) commit 497294e8d03a4440d63fc5773e3e5eb92a1fd052 Author: Benjamin Dauvergne Date: Fri May 30 11:17:57 2008 +0000 * Move error message inside comments in lasso/errors.h * Add a script to autogenerate lasso/errors.c from errors.h * Update errors.c * Add a target to Makefile.am to create errors.c lasso/Makefile.am | 5 +- lasso/build-strerror.pl | 24 +++ lasso/errors.c | 425 +++++++++++++++++++++++++++++++----------------- lasso/errors.c.in | 38 +++++ lasso/errors.h | 188 +++++++++++---------- 5 files changed, 443 insertions(+), 237 deletions(-) commit 4dacc4661d664d4d53363271c236160dddc9bdae Author: Frederic Peters Date: Fri May 30 10:31:09 2008 +0000 NameIdPolicy must be allocated lasso/id-ff/login.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit f7284657161ddfa7526737e2eae5df96d38297ed Author: Frederic Peters Date: Thu May 29 14:14:48 2008 +0000 forbit query strings to be xml signed lasso/saml-2.0/login.c | 5 +++++ lasso/saml-2.0/logout.c | 11 +++++++++++ lasso/saml-2.0/name_id_management.c | 11 +++++++++++ 3 files changed, 27 insertions(+) commit 621eec08b567ca50c381d30300b97455d3ca6b2c Author: Frederic Peters Date: Thu May 29 11:08:31 2008 +0000 provider_id is optional in lasso_session_get_assertions bindings/overrides.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 5a590abce08deeff56160944726ac2075c851d67 Author: Frederic Peters Date: Thu May 29 10:29:03 2008 +0000 debian/control is now generated control.in | 98 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) commit bec17c7df9c3b57cfed2dddb1f1f99ea5be0345a Author: Frederic Peters Date: Thu May 29 10:29:03 2008 +0000 debian/control is now generated debian/control.in | 98 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) commit 36f01f5e09cc287386211bacba80b7d710ac0bbb Author: Frederic Peters Date: Thu May 29 10:26:59 2008 +0000 updated debian packaging changelog | 29 +++++++++++++++++++++++++++++ control | 4 ++-- rules | 40 +++++++++++++++++++++++++++++++++++++++- 3 files changed, 70 insertions(+), 3 deletions(-) commit 2a0299d80bf6d6e3e08c570f430dd43299fd4c75 Author: Frederic Peters Date: Thu May 29 10:26:59 2008 +0000 updated debian packaging debian/changelog | 29 +++++++++++++++++++++++++++++ debian/control | 4 ++-- debian/rules | 40 +++++++++++++++++++++++++++++++++++++++- 3 files changed, 70 insertions(+), 3 deletions(-) commit cd6f2757e2ae4c0be777591823c6a17e34244546 Author: Frederic Peters Date: Wed May 28 11:35:22 2008 +0000 2.2.0 website/web/download/index.xml | 7 ++++--- website/web/news/11-release-2.2.0.xml | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+), 3 deletions(-) commit f96de8854c31e9af1334ec7f0b65572af78540ee Author: Frederic Peters Date: Wed May 28 10:53:15 2008 +0000 notes about new bindings website/web/documentation/index.xml | 1 + website/web/documentation/new-bindings.xml | 71 ++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+) commit 779f6ccbd8ccaf3280a1e08aa6b83d5664b7736a Author: Frederic Peters Date: Wed May 28 10:35:45 2008 +0000 updated release date NEWS | 2 +- lasso.doap | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit acf8e2c6fce24f1983364c44e0d6d5bbc03f8eae Author: Benjamin Dauvergne Date: Wed May 28 10:32:36 2008 +0000 add forgottent static modifier lasso/id-wsf/wsf_profile.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 3a50748da302b71907e80aaed75f15f20eaed456 Author: Damien Laniel Date: Wed May 28 10:25:04 2008 +0000 fixed functions returning const GList * bindings/lang_python.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit e97776f5b580f69450f004050ac5706e8402dc13 Author: Benjamin Dauvergne Date: Wed May 28 09:33:28 2008 +0000 recognize const GList* bindings/lang_python.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 3662b5f4db32aad7c2cea4612e7bc34c52b110ba Author: Benjamin Dauvergne Date: Wed May 28 09:33:26 2008 +0000 return of lasso_server_get_svc_metadatas so return_owner = False bindings/overrides.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 43faad01bb25e010936b4694004e0e742c0b7825 Author: Frederic Peters Date: Wed May 28 08:53:34 2008 +0000 boolean in C are uppercase bindings/lang_python.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit e5f5ad4c864be0061125a9004decfcf3eca75a5b Author: Frederic Peters Date: Tue May 27 16:58:52 2008 +0000 2.0.0 configure.ac | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 3158d849685ef18f97013fe97f14e1d589ab7d68 Author: Frederic Peters Date: Tue May 27 16:01:13 2008 +0000 updated changelog to 2.2.0 ChangeLog | 3378 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 3378 insertions(+) commit b87ee5dc15cb84e8a444ea6b8289dd5155ce8bca Author: Frederic Peters Date: Tue May 27 16:00:19 2008 +0000 noted about 2.2.0 NEWS | 8 ++++++++ lasso.doap | 6 ++++++ 2 files changed, 14 insertions(+) commit 45b131d41f6458d6f78c6b2ddbcb512f88aa4675 Author: Frederic Peters Date: Tue May 27 15:50:03 2008 +0000 updated copyright info README | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit cab19f5814c43ade1bcac7a9ab4c29c83a6cf35d Author: Benjamin Dauvergne Date: Tue May 27 15:27:36 2008 +0000 remove obsolete swig binding csharp, php5, python. java stays as long as alain coetmeur needs it php(4) will be superseded by the new bindings/php4 later. csharp/.cvsignore | 132 --- csharp/AssemblyInfo.cs | 6 - csharp/Makefile.am | 130 --- csharp/examples/perfs.cs | 36 - csharp/examples/runme.cs | 27 - csharp/lasso-sharp.pc.in | 8 - csharp/lasso-sharp.snk | Bin 596 -> 0 bytes csharp/lasso.dll.config | 3 - csharp/tests/BindingTests.cs | 306 ------ php5/Makefile.am | 20 - python/.cvsignore | 9 - python/Makefile.am | 45 - python/doc/.cvsignore | 3 - python/doc/tutorial/.cvsignore | 3 - python/tests/.cvsignore | 4 - python/tests/Makefile.am | 2 - python/tests/XmlTestRunner.py | 74 -- python/tests/binding_tests.py | 324 ------- python/tests/errorchecking_tests.py | 99 -- python/tests/idwsf1_tests.py | 257 ----- python/tests/idwsf2_tests.py | 1753 ----------------------------------- python/tests/profiles_tests.py | 356 ------- python/tests/tests.py | 104 --- 23 files changed, 3701 deletions(-) commit 1d35f289a88f2e1acfa0a8b975e40f3b95ff4c7c Author: Benjamin Dauvergne Date: Tue May 27 15:27:34 2008 +0000 remove ./docs/reference/tmpl during clean-local target docs/reference/Makefile.am | 1 + 1 file changed, 1 insertion(+) commit 7244bce7afe0010bf6856d9fe8a0eaf727a65a29 Author: Benjamin Dauvergne Date: Tue May 27 15:27:33 2008 +0000 add lasso_config.h.in to MAINTAINERCLEANFILES lasso/Makefile.am | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit 933458c0681e9d50031d9130f352accdbce1a4e4 Author: Benjamin Dauvergne Date: Tue May 27 15:27:30 2008 +0000 add Makefile.in to MAINTAINERCLEANFILES in every Makefile.am Makefile.am | 9 +++++++++ bindings/Makefile.am | 1 + bindings/java/Makefile.am | 1 + bindings/php4/Makefile.am | 1 + bindings/php5/Makefile.am | 1 + bindings/php5/examples/Makefile.am | 1 + bindings/php5/tests/Makefile.am | 1 + bindings/python/Makefile.am | 1 + bindings/python/tests/Makefile.am | 1 + csharp/Makefile.am | 2 +- docs/Makefile.am | 1 + docs/lasso-book/Makefile.am | 1 + docs/lasso-book/figures/Makefile.am | 1 + docs/reference/Makefile.am | 1 + java/Makefile.am | 2 +- lasso/Makefile.am | 1 + lasso/id-ff/Makefile.am | 1 + lasso/id-wsf-2.0/Makefile.am | 1 + lasso/id-wsf/Makefile.am | 1 + lasso/saml-2.0/Makefile.am | 1 + lasso/xml/Makefile.am | 1 + lasso/xml/id-wsf-2.0/Makefile.am | 1 + lasso/xml/saml-2.0/Makefile.am | 1 + lasso/xml/ws/Makefile.am | 1 + perl/Makefile.am | 2 +- php/Makefile.am | 2 +- php5/Makefile.am | 2 +- python/Makefile.am | 2 +- python/tests/Makefile.am | 1 + swig/Makefile.am | 1 + swig/id-wsf-2.0/Makefile.am | 1 + swig/saml-2.0/Makefile.am | 1 + swig/ws/Makefile.am | 1 + tests/Makefile.am | 1 + tests/data/Makefile.am | 1 + tests/data/ca1-la/Makefile.am | 1 + tests/data/idp1-la/Makefile.am | 1 + tests/data/idp5-saml2/Makefile.am | 1 + tests/data/lecp1-la/Makefile.am | 1 + tests/data/sp1-la/Makefile.am | 1 + tests/data/sp5-saml2/Makefile.am | 1 + tests/data/sp6-saml2/Makefile.am | 1 + tests/metadata/Makefile.am | 1 + win32/Makefile.am | 1 + win32/msvc/Makefile.am | 1 + win32/msvc/java/Makefile.am | 1 + win32/msvc/php/Makefile.am | 1 + win32/msvc/python/Makefile.am | 1 + win32/nsis/Makefile.am | 1 + 49 files changed, 57 insertions(+), 6 deletions(-) commit 6c8e46c5ee00bbbcc80c88a972019cebcb36f92d Author: Benjamin Dauvergne Date: Tue May 27 14:01:15 2008 +0000 export SWIG_VERSION into Makefile.am handle swig < 1.3.32 and swig >= 1.3.32 with two different versions of the patch script configure.ac | 1 + php/Makefile.am | 2 +- php/patch_swig_output.py | 175 ++++++++++++++++++++++++----------------------- 3 files changed, 92 insertions(+), 86 deletions(-) commit 247ae389eb5b3ba7b04a934d34a2a5ae85045573 Author: Benjamin Dauvergne Date: Tue May 27 14:01:12 2008 +0000 add -I$(top_builddir) to CFLAGS in first position docs/reference/Makefile.am | 1 + 1 file changed, 1 insertion(+) commit f0f462026c978d6496370e5f9453885a42c86381 Author: Benjamin Dauvergne Date: Tue May 27 14:01:09 2008 +0000 surround parameter with quotes permitting filename with spaces perl/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 89ee68804e0296201304782a2698e89b640a5ae8 Author: Benjamin Dauvergne Date: Tue May 27 09:07:37 2008 +0000 clean *.pyc files in the bindings bindings/Makefile.am | 4 ++++ 1 file changed, 4 insertions(+) commit 9a9c7ad7af704ddba6439b5bbdafba12ea5d1e1e Author: Benjamin Dauvergne Date: Mon May 26 22:58:41 2008 +0000 Make Makefile.PL use TOP_SRCDIR and TOP_BUILDDIR variables perl/Makefile.PL | 3 ++- perl/Makefile.am | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) commit dab2625c95627db39ea62cbb86508e1bd408ecde Author: Benjamin Dauvergne Date: Mon May 26 22:58:38 2008 +0000 fix INCLUDES, remove obsolete JDK_INCLUDES definition java/Makefile.am | 5 ++--- perl/Makefile.am | 14 +++++++------- php/Makefile.am | 4 ++-- php5/Makefile.am | 2 +- python/Makefile.am | 3 ++- 5 files changed, 14 insertions(+), 14 deletions(-) commit 477c0dbd7d48d3380a75095b6ba346302d8da9f6 Author: Benjamin Dauvergne Date: Mon May 26 22:58:35 2008 +0000 fix INCLUDES csharp/Makefile.am | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit af47a299cc0d9a9afaca4aeed7b45d832296a7ff Author: Benjamin Dauvergne Date: Mon May 26 22:58:33 2008 +0000 #include => #include tests/perfs.c | 2 +- tests/tests.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit d2d5fcc4ab64d5c25c5d6e2e4df0e8d0aa7f4342 Author: Benjamin Dauvergne Date: Mon May 26 22:58:31 2008 +0000 fix INCLUDES tests/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 95fd951fb22a51866dc77c022e15e1e384c51344 Author: Benjamin Dauvergne Date: Mon May 26 22:58:28 2008 +0000 quick and dirty fix to support return type «const GList*» bindings/lang_java.py | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) commit 551c64328416f881d2cddb4598752e6b5c4dcc67 Author: Benjamin Dauvergne Date: Mon May 26 22:58:26 2008 +0000 fix INCLUDES var, put top_builddir first bindings/java/Makefile.am | 3 ++- bindings/php4/Makefile.am | 3 ++- bindings/php5/Makefile.am | 3 ++- bindings/python/Makefile.am | 3 ++- 4 files changed, 8 insertions(+), 4 deletions(-) commit af6235e90a1bd1240291cf6d37c604dbf53d1cc1 Author: Benjamin Dauvergne Date: Mon May 26 22:58:24 2008 +0000 add qualifier for the GList returned by lasso_server_get_svc_metadatas bindings/overrides.xml | 1 + 1 file changed, 1 insertion(+) commit 67db74d9d8ffcc8f7998f354d845d57c6fca642c Author: Benjamin Dauvergne Date: Mon May 26 22:58:21 2008 +0000 cleanup include listingm first builddir then srcdir and no need for $srcdir/lasso lasso/Makefile.am | 2 +- lasso/id-ff/Makefile.am | 3 +-- lasso/id-wsf-2.0/Makefile.am | 3 +-- lasso/id-wsf/Makefile.am | 3 +-- lasso/saml-2.0/Makefile.am | 3 +-- lasso/xml/Makefile.am | 2 +- lasso/xml/id-wsf-2.0/Makefile.am | 2 +- lasso/xml/saml-2.0/Makefile.am | 2 +- lasso/xml/ws/Makefile.am | 2 +- 9 files changed, 9 insertions(+), 13 deletions(-) commit 1be04df84e8f2a1d2feed164ca2214b5a953864f Author: Benjamin Dauvergne Date: Mon May 26 22:58:18 2008 +0000 Add disco_declaration.h to imported headers lasso/id-wsf/wsf_profile.h | 1 + 1 file changed, 1 insertion(+) commit 0de54dd27eb82992cc23c0201cec98ab04bfb851 Author: Benjamin Dauvergne Date: Mon May 26 22:58:16 2008 +0000 Add $(top_builddir) to include of id-wsf and id-wsf-2.0 Makefile.am to work with distcheck. lasso/id-wsf-2.0/Makefile.am | 1 + lasso/id-wsf/Makefile.am | 1 + 2 files changed, 2 insertions(+) commit 2e7bd59c876ced9d5b0cbd1b2c6558b6a78a5a52 Author: Damien Laniel Date: Mon May 26 16:43:22 2008 +0000 allow getting xpath attributes like /node/@attr lasso/id-wsf-2.0/data_service.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) commit 2c426974492cda0185bb102281d5f7de44776dc4 Author: Frederic Peters Date: Mon May 26 16:41:36 2008 +0000 respect optional args and default values for integer args bindings/lang_python.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) commit a68236666fb6cdaf560c1df9b739f41fa4359aab Author: Frederic Peters Date: Mon May 26 16:41:12 2008 +0000 last argument to check_version was optional with the SWIG bindings bindings/overrides.xml | 6 ++++++ 1 file changed, 6 insertions(+) commit c02440d5ba6a62cbddcf21602ebaa0f5a58ec8ad Author: Damien Laniel Date: Mon May 26 14:28:45 2008 +0000 don't test NULL value before calling gfree + proper list freeing lasso/id-wsf-2.0/data_service.c | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) commit 4fde37c81fce966c6eef285b7333e7ff91d34fe8 Author: Benjamin Dauvergne Date: Mon May 26 09:37:25 2008 +0000 Fix escaping of parenthesis inside a regex php/patch_swig_output.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 9d5f532fef2838e3a72a074d59878231ac4e2030 Author: Benjamin Dauvergne Date: Mon May 26 09:37:24 2008 +0000 add -fno-strict-aliasing to CFLAGS to remove bad code genereation on amd64 and warnings on all platforms java/Makefile.am | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit bd2943e815376fd4d08b0da7f27659951fde3ada Author: Benjamin Dauvergne Date: Mon May 26 09:37:22 2008 +0000 Re-remove java/Makefile from configure.ac outputs configure.ac | 1 - 1 file changed, 1 deletion(-) commit 048b1ca8b68d707a8ef695d5510ca795ee1521e2 Author: Benjamin Dauvergne Date: Fri May 23 22:44:18 2008 +0000 re-add swig/java binding to makefile, make it use the JAVA_INCLUDE path, JDK_INCLUDES does not exist configure.ac | 1 + java/Makefile.am | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) commit 7cdabd45e926eb2cbecaa5713b5f22f37d1724b5 Author: Frederic Peters Date: Fri May 23 18:16:26 2008 +0000 fixing a little bit the doap file lasso.doap | 48 +++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 39 insertions(+), 9 deletions(-) commit 8f39e7dd52b555dfce03f1e7ef0675e279c2c91e Author: Frederic Peters Date: Fri May 23 18:01:08 2008 +0000 removed doap.rdt to lasso.doap to be compatible with moap doap.rdf => lasso.doap | 0 1 file changed, 0 insertions(+), 0 deletions(-) commit 4fc63bd755e8fd4e5c76e0eab9aa5a19a090fe9b Author: Frederic Peters Date: Fri May 23 17:50:26 2008 +0000 mentioning bug database and updated description doap.rdf | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit a20526355409db50f53662f953d10862ad350baf Author: Frederic Peters Date: Fri May 23 17:36:33 2008 +0000 bitching about free website/web/index.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit c56b3083884efe515a8db3aca863cec0b9c17559 Author: Benjamin Dauvergne Date: Thu May 22 14:54:13 2008 +0000 add a new headers with macros to handle memory like assigning a gobject field (work flow, is you augment ref of the new value, decrease the one from the old, and then assign), assigning strings, releasing lists of strings, of gobjects,etc.. the free macros are all called g_release_somehting and they set the released variable to NULL. add a macro to validate GObject parameter types This header is intended to concentre every bit of wisdom for handling pointers and memory, try to use thoses macros in your code. They are not intended to work with weak references (references you do not own), so always g_object_ref in this case (or use g_assign_gobject that does it, when your variable is not needed anymore to g_assign_gobject(var, NULL)); lasso/Makefile.am | 2 +- lasso/utils.h | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) commit e741a80a7fd35e91c522f97d9082e9f42784d115 Author: Damien Laniel Date: Thu May 22 08:06:13 2008 +0000 added some more missing unreference lasso/id-wsf-2.0/discovery.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) commit da28448769c76d01a201d90ead242a2fef21203a Author: Damien Laniel Date: Thu May 22 07:54:46 2008 +0000 added some more missing unreference lasso/id-ff/profile.c | 6 ++++++ 1 file changed, 6 insertions(+) commit d83cd8381e7681263805448ef1a9c3db4cd83b09 Author: Damien Laniel Date: Wed May 21 23:29:28 2008 +0000 added some more missing unreference lasso/id-wsf-2.0/discovery.c | 1 - lasso/id-wsf-2.0/profile.c | 6 ++++++ 2 files changed, 6 insertions(+), 1 deletion(-) commit 3ab9da11203b5b4e0d79a7c3a22408ac62545aa1 Author: Damien Laniel Date: Wed May 21 23:29:14 2008 +0000 fixed freeing svcMDID list lasso/id-ff/identity.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit cf4cf42f1aad394a20893c4bedfba863ef846575 Author: Damien Laniel Date: Wed May 21 22:13:16 2008 +0000 added a missing reference lasso/saml-2.0/profile.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit a6ed1b1c110a662009a83fa656d01c70f15d678b Author: Damien Laniel Date: Wed May 21 17:28:44 2008 +0000 added some more missing unreference lasso/id-ff/login.c | 2 ++ lasso/id-ff/session.c | 1 + lasso/id-wsf-2.0/profile.c | 1 + lasso/saml-2.0/logout.c | 1 + lasso/saml-2.0/name_id_management.c | 3 ++- lasso/saml-2.0/profile.c | 1 + 6 files changed, 8 insertions(+), 1 deletion(-) commit 5316df50a74a09f2cf78d4a7b8b13c6de1946dcf Author: Damien Laniel Date: Wed May 21 14:20:33 2008 +0000 fixed memory management during node decryption lasso/saml-2.0/login.c | 10 ++++++---- lasso/xml/xml.c | 46 +++++++++++++++++++++++++++++----------------- 2 files changed, 35 insertions(+), 21 deletions(-) commit bfb243f3989599cca9b9709daeaa6670d1b569f1 Author: Damien Laniel Date: Wed May 21 12:35:54 2008 +0000 unreference service node after adding it to the server lasso/id-ff/server.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) commit 7e9dec9400f0a13122cdffbbba0644c14fe031d1 Author: Damien Laniel Date: Wed May 21 10:10:46 2008 +0000 some comments lasso/id-wsf-2.0/discovery.c | 1 + lasso/saml-2.0/login.c | 1 + 2 files changed, 2 insertions(+) commit 94bc9a0840e6a5a513d9b8a1ebacc2b2ebc5aea0 Author: Damien Laniel Date: Wed May 21 10:00:38 2008 +0000 free list elements lasso/saml-2.0/login.c | 1 + 1 file changed, 1 insertion(+) commit c1f20bae74a26ca592d97ff64c9cbab2c42498d8 Author: Damien Laniel Date: Wed May 21 10:00:13 2008 +0000 make return value const instead of copying the list lasso/id-wsf-2.0/server.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 01b3ce4f23f609b561a9a374b05ef9c004dacf93 Author: Damien Laniel Date: Wed May 21 09:58:18 2008 +0000 make return value const instead of copying the list lasso/id-ff/server.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit a779166e31bdb8603153218e60a4f2b37c239ce4 Author: Damien Laniel Date: Wed May 21 09:45:20 2008 +0000 removed warning when calling lasso_node_destroy with NULL argument lasso/id-ff/login.c | 10 ++++------ lasso/xml/xml.c | 1 - 2 files changed, 4 insertions(+), 7 deletions(-) commit b3d861afa2b019a964901be125e1a9b2bf5bf376 Author: Damien Laniel Date: Wed May 21 09:22:08 2008 +0000 useless variables detroyer; they're already freed by snippets lasso/id-ff/profile.c | 35 ----------------------------------- 1 file changed, 35 deletions(-) commit 2b9220186ab9a84db8ef9e996e22ec93e43b867a Author: Frederic Peters Date: Tue May 20 20:21:16 2008 +0000 removing unused variable lasso/id-wsf/discovery.c | 1 - 1 file changed, 1 deletion(-) commit eb2fbc8fc05e021ef718c1582f7de67e4246caf2 Author: Damien Laniel Date: Tue May 20 18:34:09 2008 +0000 fixed some reference counting and memory management lasso/id-ff/login.c | 4 +++ lasso/id-ff/profile.c | 39 +++++++++++++++++++++++++++ lasso/id-ff/server.c | 3 ++- lasso/id-wsf-2.0/discovery.c | 6 ++++- lasso/id-wsf-2.0/profile.c | 8 +++--- lasso/saml-2.0/login.c | 28 ++++++++++--------- lasso/xml/id-wsf-2.0/disco_endpoint_context.c | 5 +--- lasso/xml/id-wsf-2.0/disco_svc_metadata.c | 3 ++- lasso/xml/id-wsf-2.0/sbf_framework.c | 15 +++++++++-- lasso/xml/id-wsf-2.0/sbf_framework.h | 2 +- lasso/xml/soap_envelope.c | 17 +++++------- 11 files changed, 92 insertions(+), 38 deletions(-) commit c9a8f041ab03a83439f39e61ea39b46b162cf257 Author: Damien Laniel Date: Tue May 20 13:24:05 2008 +0000 avoir function calls in parameter checks lasso/id-wsf-2.0/discovery.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) commit d2d5f2084fa24d3623b3a354f067be66fcb123a2 Author: Damien Laniel Date: Tue May 20 13:22:55 2008 +0000 import main test file bindings/python/tests/XmlTestRunner.py | 74 +++++++++++++++++++++++ bindings/python/tests/idwsf1_tests.py | 2 +- bindings/python/tests/tests.py | 103 +++++++++++++++++++++++++++++++++ 3 files changed, 178 insertions(+), 1 deletion(-) commit 7860262cf668640149c2ae37db5cf9b8d0b86587 Author: Damien Laniel Date: Tue May 20 13:14:06 2008 +0000 some cleanups in id-wsf 1.1 code lasso/id-wsf/data_service.c | 2 +- lasso/id-wsf/discovery.c | 627 +++++++++++++++++++------------------ lasso/id-wsf/discovery.h | 3 +- lasso/id-wsf/wsf_profile.c | 83 ++++- lasso/id-wsf/wsf_profile_private.h | 6 + 5 files changed, 415 insertions(+), 306 deletions(-) commit 78c0216969bf80c4a6d26a72d79932a77e6190a5 Author: Damien Laniel Date: Tue May 20 12:58:01 2008 +0000 added a discovery remove test case bindings/python/tests/idwsf1_tests.py | 42 ++++++++++++++++++++++++++++++++--- 1 file changed, 39 insertions(+), 3 deletions(-) commit 83eb6fbae82e0f009698d626378558a8acd923fe Author: Damien Laniel Date: Tue May 20 10:38:55 2008 +0000 added id-wsf 2.0 tests for new bindings bindings/python/tests/idwsf2_tests.py | 1790 +++++++++++++++++++++++++++++++++ 1 file changed, 1790 insertions(+) commit 975cff404d2b398fb148eb5458843c7483400bb0 Author: Damien Laniel Date: Tue May 20 10:38:12 2008 +0000 stronger check on empty string parameters lasso/id-wsf-2.0/discovery.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) commit 5711105dfb5bcaa9b09c19102c96811437bc6c08 Author: Damien Laniel Date: Tue May 20 09:27:25 2008 +0000 added some tests for id-wsf 1.1 with new python bindings bindings/python/tests/idwsf1_tests.py | 341 ++++++++++++++++++++++++++++++++++ 1 file changed, 341 insertions(+) commit 175af5a87be57317fa16c0fcef4340493b2cc68d Author: Benjamin Dauvergne Date: Mon May 19 23:26:39 2008 +0000 add pact for SWIG 1.3.33, need to be tested agains previous and later versions of SWIG php/patch_swig_output.py | 47 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 2 deletions(-) commit 2ca027696ef17ac5130f2e33b9ff8493d360d132 Author: Damien Laniel Date: Mon May 19 16:08:37 2008 +0000 fixed methods with xmlNode* arguments bindings/lang_python.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) commit e5ba6151babcdfd0b4acb2749ae9478bf8983cba Author: Frederic Peters Date: Thu May 15 21:17:44 2008 +0000 moved gtk-doc inline as is better on so many points; also added schema fragments to published doc docs/reference/lasso.sgml | 2 +- docs/reference/tmpl/data_service.sgml | 142 -------- docs/reference/tmpl/defederation.sgml | 81 ----- docs/reference/tmpl/discovery.sgml | 199 ----------- docs/reference/tmpl/ecp.sgml | 63 ---- docs/reference/tmpl/federation.sgml | 66 ---- docs/reference/tmpl/identity.sgml | 71 ---- docs/reference/tmpl/lasso.sgml | 65 ---- docs/reference/tmpl/lecp.sgml | 121 ------- docs/reference/tmpl/lib_assertion.sgml | 47 --- .../tmpl/lib_authentication_statement.sgml | 49 --- docs/reference/tmpl/lib_authn_context.sgml | 36 -- docs/reference/tmpl/lib_authn_request.sgml | 76 ---- .../reference/tmpl/lib_authn_request_envelope.sgml | 52 --- docs/reference/tmpl/lib_authn_response.sgml | 39 --- .../tmpl/lib_authn_response_envelope.sgml | 39 --- .../lib_federation_termination_notification.sgml | 50 --- docs/reference/tmpl/lib_idp_entries.sgml | 34 -- docs/reference/tmpl/lib_idp_entry.sgml | 36 -- docs/reference/tmpl/lib_idp_list.sgml | 35 -- docs/reference/tmpl/lib_logout_request.sgml | 52 --- docs/reference/tmpl/lib_logout_response.sgml | 46 --- .../tmpl/lib_name_identifier_mapping_request.sgml | 51 --- .../tmpl/lib_name_identifier_mapping_response.sgml | 50 --- .../tmpl/lib_register_name_identifier_request.sgml | 53 --- .../lib_register_name_identifier_response.sgml | 46 --- docs/reference/tmpl/lib_request_authn_context.sgml | 36 -- docs/reference/tmpl/lib_scoping.sgml | 35 -- docs/reference/tmpl/lib_status_response.sgml | 37 -- docs/reference/tmpl/lib_subject.sgml | 34 -- docs/reference/tmpl/login.sgml | 383 --------------------- docs/reference/tmpl/logout.sgml | 137 -------- docs/reference/tmpl/name_id_management.sgml | 111 ------ docs/reference/tmpl/name_identifier_mapping.sgml | 101 ------ docs/reference/tmpl/name_registration.sgml | 111 ------ docs/reference/tmpl/node.sgml | 176 ---------- docs/reference/tmpl/profile.sgml | 138 -------- docs/reference/tmpl/provider.sgml | 176 ---------- docs/reference/tmpl/saml2_action.sgml | 36 -- docs/reference/tmpl/saml2_advice.sgml | 38 -- docs/reference/tmpl/saml2_assertion.sgml | 45 --- docs/reference/tmpl/saml2_attribute.sgml | 38 -- docs/reference/tmpl/saml2_attribute_statement.sgml | 36 -- .../reference/tmpl/saml2_audience_restriction.sgml | 35 -- docs/reference/tmpl/saml2_authn_context.sgml | 38 -- docs/reference/tmpl/saml2_authn_statement.sgml | 39 --- .../tmpl/saml2_authz_decision_statement.sgml | 38 -- docs/reference/tmpl/saml2_base_idabstract.sgml | 36 -- docs/reference/tmpl/saml2_condition_abstract.sgml | 34 -- docs/reference/tmpl/saml2_conditions.sgml | 40 --- docs/reference/tmpl/saml2_encrypted_element.sgml | 37 -- docs/reference/tmpl/saml2_evidence.sgml | 38 -- .../tmpl/saml2_key_info_confirmation_data.sgml | 35 -- docs/reference/tmpl/saml2_name_id.sgml | 39 --- docs/reference/tmpl/saml2_one_time_use.sgml | 34 -- docs/reference/tmpl/saml2_proxy_restriction.sgml | 36 -- docs/reference/tmpl/saml2_statement_abstract.sgml | 34 -- docs/reference/tmpl/saml2_subject.sgml | 38 -- .../reference/tmpl/saml2_subject_confirmation.sgml | 39 --- .../tmpl/saml2_subject_confirmation_data.sgml | 39 --- docs/reference/tmpl/saml2_subject_locality.sgml | 36 -- docs/reference/tmpl/saml_advice.sgml | 35 -- docs/reference/tmpl/saml_assertion.sgml | 49 --- docs/reference/tmpl/saml_attribute.sgml | 37 -- docs/reference/tmpl/saml_attribute_designator.sgml | 36 -- docs/reference/tmpl/saml_attribute_statement.sgml | 35 -- .../tmpl/saml_audience_restriction_condition.sgml | 26 -- .../tmpl/saml_authentication_statement.sgml | 37 -- docs/reference/tmpl/saml_authority_binding.sgml | 36 -- docs/reference/tmpl/saml_condition_abstract.sgml | 25 -- docs/reference/tmpl/saml_conditions.sgml | 37 -- docs/reference/tmpl/saml_name_identifier.sgml | 47 --- docs/reference/tmpl/saml_statement_abstract.sgml | 25 -- docs/reference/tmpl/saml_subject.sgml | 36 -- docs/reference/tmpl/saml_subject_confirmation.sgml | 36 -- docs/reference/tmpl/saml_subject_locality.sgml | 35 -- docs/reference/tmpl/saml_subject_statement.sgml | 34 -- .../tmpl/saml_subject_statement_abstract.sgml | 26 -- docs/reference/tmpl/samlp2_artifact_resolve.sgml | 35 -- docs/reference/tmpl/samlp2_artifact_response.sgml | 35 -- .../reference/tmpl/samlp2_assertion_idrequest.sgml | 27 -- docs/reference/tmpl/samlp2_attribute_query.sgml | 35 -- docs/reference/tmpl/samlp2_authn_query.sgml | 36 -- docs/reference/tmpl/samlp2_authn_request.sgml | 47 --- .../tmpl/samlp2_authz_decision_query.sgml | 37 -- docs/reference/tmpl/samlp2_extensions.sgml | 34 -- docs/reference/tmpl/samlp2_idp_entry.sgml | 37 -- docs/reference/tmpl/samlp2_idp_list.sgml | 36 -- docs/reference/tmpl/samlp2_logout_request.sgml | 41 --- docs/reference/tmpl/samlp2_logout_response.sgml | 35 -- .../tmpl/samlp2_manage_name_id_request.sgml | 39 --- .../tmpl/samlp2_manage_name_id_response.sgml | 34 -- .../tmpl/samlp2_name_id_mapping_request.sgml | 38 -- .../tmpl/samlp2_name_id_mapping_response.sgml | 36 -- docs/reference/tmpl/samlp2_name_id_policy.sgml | 37 -- docs/reference/tmpl/samlp2_request_abstract.sgml | 41 --- .../tmpl/samlp2_requested_authn_context.sgml | 37 -- docs/reference/tmpl/samlp2_response.sgml | 36 -- docs/reference/tmpl/samlp2_scoping.sgml | 37 -- docs/reference/tmpl/samlp2_status.sgml | 37 -- docs/reference/tmpl/samlp2_status_code.sgml | 36 -- docs/reference/tmpl/samlp2_status_detail.sgml | 34 -- docs/reference/tmpl/samlp2_status_response.sgml | 43 --- .../tmpl/samlp2_subject_query_abstract.sgml | 35 -- docs/reference/tmpl/samlp2_terminate.sgml | 34 -- docs/reference/tmpl/samlp_request.sgml | 34 -- docs/reference/tmpl/samlp_request_abstract.sgml | 34 -- docs/reference/tmpl/samlp_response.sgml | 35 -- docs/reference/tmpl/samlp_response_abstract.sgml | 35 -- docs/reference/tmpl/samlp_status.sgml | 35 -- docs/reference/tmpl/samlp_status_code.sgml | 35 -- docs/reference/tmpl/server.sgml | 113 ------ docs/reference/tmpl/session.sgml | 90 ----- docs/reference/tmpl/strings.sgml | 115 ------- lasso/id-ff/defederation.c | 6 + lasso/id-ff/federation.c | 6 + lasso/id-ff/identity.c | 6 + lasso/id-ff/lecp.c | 6 + lasso/id-ff/login.c | 121 +++++++ lasso/id-ff/login.h | 20 ++ lasso/id-ff/logout.c | 6 + lasso/id-ff/name_identifier_mapping.c | 6 + lasso/id-ff/name_registration.c | 6 + lasso/id-ff/profile.c | 6 + lasso/id-ff/provider.c | 7 + lasso/id-ff/server.c | 8 + lasso/id-ff/session.c | 6 + lasso/id-wsf/data_service.c | 31 ++ lasso/id-wsf/discovery.c | 39 +++ lasso/lasso.c | 6 + lasso/saml-2.0/ecp.c | 6 + lasso/saml-2.0/name_id_management.c | 6 + lasso/xml/disco_authenticate_requester.c | 10 +- lasso/xml/disco_authenticate_session_context.c | 10 +- lasso/xml/disco_authorize_requester.c | 10 +- lasso/xml/disco_credentials.c | 10 +- lasso/xml/disco_description.c | 10 +- lasso/xml/disco_encrypt_resource_id.c | 10 +- lasso/xml/disco_encrypted_resource_id.c | 10 +- lasso/xml/disco_generate_bearer_token.c | 10 +- lasso/xml/disco_insert_entry.c | 10 +- lasso/xml/disco_modify.c | 10 +- lasso/xml/disco_modify_response.c | 10 +- lasso/xml/disco_options.c | 10 +- lasso/xml/disco_query.c | 10 +- lasso/xml/disco_query_response.c | 10 +- lasso/xml/disco_remove_entry.c | 10 +- lasso/xml/disco_requested_service_type.c | 10 +- lasso/xml/disco_resource_id.c | 10 +- lasso/xml/disco_resource_offering.c | 10 +- lasso/xml/disco_send_single_logout.c | 10 +- lasso/xml/disco_service_instance.c | 10 +- lasso/xml/dst_data.c | 10 +- lasso/xml/dst_modification.c | 10 +- lasso/xml/dst_modify.c | 10 +- lasso/xml/dst_modify_response.c | 10 +- lasso/xml/dst_new_data.c | 10 +- lasso/xml/dst_query.c | 10 +- lasso/xml/dst_query_item.c | 10 +- lasso/xml/dst_query_response.c | 10 +- lasso/xml/id-wsf-2.0/disco_abstract.c | 10 +- lasso/xml/id-wsf-2.0/disco_endpoint_context.c | 10 +- lasso/xml/id-wsf-2.0/disco_keys.c | 10 +- lasso/xml/id-wsf-2.0/disco_options.c | 10 +- lasso/xml/id-wsf-2.0/disco_provider_id.c | 10 +- lasso/xml/id-wsf-2.0/disco_query.c | 10 +- lasso/xml/id-wsf-2.0/disco_query_response.c | 10 +- lasso/xml/id-wsf-2.0/disco_requested_service.c | 10 +- lasso/xml/id-wsf-2.0/disco_security_context.c | 10 +- lasso/xml/id-wsf-2.0/disco_service_context.c | 10 +- lasso/xml/id-wsf-2.0/disco_service_type.c | 10 +- .../xml/id-wsf-2.0/disco_svc_md_association_add.c | 10 +- .../disco_svc_md_association_add_response.c | 10 +- .../id-wsf-2.0/disco_svc_md_association_delete.c | 10 +- .../disco_svc_md_association_delete_response.c | 10 +- .../id-wsf-2.0/disco_svc_md_association_query.c | 10 +- .../disco_svc_md_association_query_response.c | 10 +- lasso/xml/id-wsf-2.0/disco_svc_md_delete.c | 10 +- .../xml/id-wsf-2.0/disco_svc_md_delete_response.c | 10 +- lasso/xml/id-wsf-2.0/disco_svc_md_query.c | 10 +- lasso/xml/id-wsf-2.0/disco_svc_md_query_response.c | 10 +- lasso/xml/id-wsf-2.0/disco_svc_md_register.c | 10 +- .../id-wsf-2.0/disco_svc_md_register_response.c | 10 +- lasso/xml/id-wsf-2.0/disco_svc_md_replace.c | 10 +- .../xml/id-wsf-2.0/disco_svc_md_replace_response.c | 10 +- lasso/xml/id-wsf-2.0/disco_svc_metadata.c | 10 +- lasso/xml/id-wsf-2.0/dst_data_response_base.c | 10 +- lasso/xml/id-wsf-2.0/dst_delete_item_base.c | 10 +- lasso/xml/id-wsf-2.0/dst_delete_response.c | 10 +- lasso/xml/id-wsf-2.0/dst_request.c | 10 +- lasso/xml/id-wsf-2.0/dst_result_query_base.c | 10 +- lasso/xml/id-wsf-2.0/dst_test_item_base.c | 10 +- lasso/xml/id-wsf-2.0/dstref_app_data.c | 10 +- lasso/xml/id-wsf-2.0/dstref_create.c | 10 +- lasso/xml/id-wsf-2.0/dstref_create_item.c | 10 +- lasso/xml/id-wsf-2.0/dstref_create_response.c | 10 +- lasso/xml/id-wsf-2.0/dstref_data.c | 10 +- lasso/xml/id-wsf-2.0/dstref_data_response.c | 10 +- lasso/xml/id-wsf-2.0/dstref_delete.c | 10 +- lasso/xml/id-wsf-2.0/dstref_delete_item.c | 10 +- lasso/xml/id-wsf-2.0/dstref_delete_response.c | 10 +- lasso/xml/id-wsf-2.0/dstref_item_data.c | 10 +- lasso/xml/id-wsf-2.0/dstref_modify.c | 10 +- lasso/xml/id-wsf-2.0/dstref_modify_item.c | 10 +- lasso/xml/id-wsf-2.0/dstref_modify_response.c | 10 +- lasso/xml/id-wsf-2.0/dstref_query.c | 10 +- lasso/xml/id-wsf-2.0/dstref_query_item.c | 10 +- lasso/xml/id-wsf-2.0/dstref_query_response.c | 10 +- lasso/xml/id-wsf-2.0/dstref_result_query.c | 10 +- lasso/xml/id-wsf-2.0/dstref_test_item.c | 10 +- .../xml/id-wsf-2.0/ims_identity_mapping_request.c | 10 +- .../xml/id-wsf-2.0/ims_identity_mapping_response.c | 10 +- lasso/xml/id-wsf-2.0/ims_mapping_input.c | 10 +- lasso/xml/id-wsf-2.0/ims_mapping_output.c | 10 +- lasso/xml/id-wsf-2.0/is_help.c | 10 +- lasso/xml/id-wsf-2.0/is_inquiry.c | 10 +- lasso/xml/id-wsf-2.0/is_inquiry_element.c | 10 +- lasso/xml/id-wsf-2.0/is_interaction_request.c | 10 +- lasso/xml/id-wsf-2.0/is_interaction_response.c | 10 +- lasso/xml/id-wsf-2.0/is_interaction_statement.c | 10 +- lasso/xml/id-wsf-2.0/is_item.c | 10 +- lasso/xml/id-wsf-2.0/is_parameter.c | 10 +- lasso/xml/id-wsf-2.0/is_select.c | 10 +- lasso/xml/id-wsf-2.0/is_text.c | 10 +- lasso/xml/id-wsf-2.0/ps_add_collection_request.c | 10 +- lasso/xml/id-wsf-2.0/ps_add_collection_response.c | 10 +- lasso/xml/id-wsf-2.0/ps_add_entity_request.c | 10 +- lasso/xml/id-wsf-2.0/ps_add_entity_response.c | 10 +- lasso/xml/id-wsf-2.0/ps_add_known_entity_request.c | 10 +- .../xml/id-wsf-2.0/ps_add_known_entity_response.c | 10 +- .../xml/id-wsf-2.0/ps_add_to_collection_request.c | 10 +- lasso/xml/id-wsf-2.0/ps_get_object_info_request.c | 10 +- lasso/xml/id-wsf-2.0/ps_get_object_info_response.c | 10 +- lasso/xml/id-wsf-2.0/ps_item_data.c | 10 +- lasso/xml/id-wsf-2.0/ps_list_members_request.c | 10 +- lasso/xml/id-wsf-2.0/ps_list_members_response.c | 10 +- lasso/xml/id-wsf-2.0/ps_notification.c | 10 +- lasso/xml/id-wsf-2.0/ps_notify.c | 10 +- lasso/xml/id-wsf-2.0/ps_object.c | 10 +- lasso/xml/id-wsf-2.0/ps_query_objects_request.c | 10 +- lasso/xml/id-wsf-2.0/ps_query_objects_response.c | 10 +- .../xml/id-wsf-2.0/ps_remove_collection_request.c | 10 +- lasso/xml/id-wsf-2.0/ps_remove_entity_request.c | 10 +- .../id-wsf-2.0/ps_remove_from_collection_request.c | 10 +- lasso/xml/id-wsf-2.0/ps_request_abstract.c | 10 +- .../xml/id-wsf-2.0/ps_resolve_identifier_request.c | 10 +- .../id-wsf-2.0/ps_resolve_identifier_response.c | 10 +- lasso/xml/id-wsf-2.0/ps_resolve_input.c | 10 +- lasso/xml/id-wsf-2.0/ps_response_abstract.c | 10 +- lasso/xml/id-wsf-2.0/ps_set_object_info_request.c | 10 +- lasso/xml/id-wsf-2.0/ps_test_membership_request.c | 10 +- lasso/xml/id-wsf-2.0/ps_test_membership_response.c | 10 +- lasso/xml/id-wsf-2.0/sb2_consent.c | 10 +- lasso/xml/id-wsf-2.0/sb2_credentials_context.c | 10 +- lasso/xml/id-wsf-2.0/sb2_endpoint_update.c | 10 +- lasso/xml/id-wsf-2.0/sb2_redirect_request.c | 10 +- lasso/xml/id-wsf-2.0/sb2_sender.c | 10 +- lasso/xml/id-wsf-2.0/sb2_target_identity.c | 10 +- lasso/xml/id-wsf-2.0/sb2_timeout.c | 10 +- lasso/xml/id-wsf-2.0/sb2_usage_directive.c | 10 +- lasso/xml/id-wsf-2.0/sb2_user_interaction_header.c | 10 +- lasso/xml/id-wsf-2.0/sbf_framework.c | 10 +- lasso/xml/id-wsf-2.0/sec_token.c | 10 +- lasso/xml/id-wsf-2.0/sec_token_policy.c | 10 +- lasso/xml/id-wsf-2.0/sec_transited_provider_path.c | 10 +- lasso/xml/id-wsf-2.0/subs_notification.c | 10 +- lasso/xml/id-wsf-2.0/subs_notify_response.c | 10 +- lasso/xml/id-wsf-2.0/subs_ref_item.c | 10 +- lasso/xml/id-wsf-2.0/subs_subscription.c | 10 +- lasso/xml/id-wsf-2.0/subsref_app_data.c | 6 +- lasso/xml/id-wsf-2.0/subsref_create.c | 10 +- lasso/xml/id-wsf-2.0/subsref_create_item.c | 10 +- lasso/xml/id-wsf-2.0/subsref_create_response.c | 10 +- lasso/xml/id-wsf-2.0/subsref_data.c | 10 +- lasso/xml/id-wsf-2.0/subsref_data_response.c | 10 +- lasso/xml/id-wsf-2.0/subsref_delete.c | 10 +- lasso/xml/id-wsf-2.0/subsref_delete_item.c | 10 +- lasso/xml/id-wsf-2.0/subsref_delete_response.c | 10 +- lasso/xml/id-wsf-2.0/subsref_item_data.c | 10 +- lasso/xml/id-wsf-2.0/subsref_modify.c | 10 +- lasso/xml/id-wsf-2.0/subsref_modify_item.c | 10 +- lasso/xml/id-wsf-2.0/subsref_modify_response.c | 10 +- lasso/xml/id-wsf-2.0/subsref_notification.c | 10 +- lasso/xml/id-wsf-2.0/subsref_notify.c | 10 +- lasso/xml/id-wsf-2.0/subsref_notify_response.c | 10 +- lasso/xml/id-wsf-2.0/subsref_query.c | 10 +- lasso/xml/id-wsf-2.0/subsref_query_item.c | 10 +- lasso/xml/id-wsf-2.0/subsref_query_response.c | 10 +- lasso/xml/id-wsf-2.0/subsref_result_query.c | 10 +- lasso/xml/id-wsf-2.0/subsref_subscription.c | 10 +- lasso/xml/id-wsf-2.0/subsref_test_item.c | 10 +- lasso/xml/id-wsf-2.0/util_empty.c | 10 +- lasso/xml/id-wsf-2.0/util_extension.c | 10 +- lasso/xml/id-wsf-2.0/util_response.c | 10 +- lasso/xml/id-wsf-2.0/util_status.c | 10 +- lasso/xml/is_help.c | 10 +- lasso/xml/is_inquiry.c | 10 +- lasso/xml/is_inquiry_element.c | 10 +- lasso/xml/is_interaction_request.c | 10 +- lasso/xml/is_interaction_response.c | 10 +- lasso/xml/is_interaction_statement.c | 10 +- lasso/xml/is_item.c | 10 +- lasso/xml/is_parameter.c | 10 +- lasso/xml/is_redirect_request.c | 10 +- lasso/xml/is_select.c | 10 +- lasso/xml/is_text.c | 10 +- lasso/xml/is_user_interaction.c | 10 +- lasso/xml/lib_assertion.c | 29 +- lasso/xml/lib_authentication_statement.c | 9 +- lasso/xml/lib_authn_context.c | 22 +- lasso/xml/lib_authn_request.c | 30 +- lasso/xml/lib_authn_request.h | 24 ++ lasso/xml/lib_authn_request_envelope.c | 9 +- lasso/xml/lib_authn_response.c | 18 +- lasso/xml/lib_authn_response_envelope.c | 5 + .../xml/lib_federation_termination_notification.c | 18 +- lasso/xml/lib_idp_entries.c | 11 +- lasso/xml/lib_idp_entry.c | 9 +- lasso/xml/lib_idp_list.c | 11 +- lasso/xml/lib_logout_request.c | 18 +- lasso/xml/lib_logout_response.c | 12 +- lasso/xml/lib_name_identifier_mapping_request.c | 18 +- lasso/xml/lib_name_identifier_mapping_response.c | 11 +- lasso/xml/lib_register_name_identifier_request.c | 18 +- lasso/xml/lib_register_name_identifier_response.c | 11 +- lasso/xml/lib_request_authn_context.c | 11 +- lasso/xml/lib_scoping.c | 11 +- lasso/xml/lib_status_response.c | 18 +- lasso/xml/lib_subject.c | 11 +- lasso/xml/sa_credentials.c | 10 +- lasso/xml/sa_parameter.c | 10 +- lasso/xml/sa_password_transforms.c | 10 +- lasso/xml/sa_sasl_request.c | 10 +- lasso/xml/sa_sasl_response.c | 10 +- lasso/xml/sa_transform.c | 10 +- lasso/xml/saml-2.0/saml2_action.c | 10 +- lasso/xml/saml-2.0/saml2_advice.c | 10 +- lasso/xml/saml-2.0/saml2_assertion.c | 10 +- lasso/xml/saml-2.0/saml2_attribute.c | 10 +- lasso/xml/saml-2.0/saml2_attribute_statement.c | 10 +- lasso/xml/saml-2.0/saml2_audience_restriction.c | 10 +- lasso/xml/saml-2.0/saml2_authn_context.c | 10 +- lasso/xml/saml-2.0/saml2_authn_statement.c | 10 +- .../xml/saml-2.0/saml2_authz_decision_statement.c | 10 +- lasso/xml/saml-2.0/saml2_base_idabstract.c | 10 +- lasso/xml/saml-2.0/saml2_condition_abstract.c | 10 +- lasso/xml/saml-2.0/saml2_conditions.c | 10 +- lasso/xml/saml-2.0/saml2_encrypted_element.c | 10 +- lasso/xml/saml-2.0/saml2_evidence.c | 10 +- .../saml-2.0/saml2_key_info_confirmation_data.c | 10 +- lasso/xml/saml-2.0/saml2_name_id.c | 10 +- lasso/xml/saml-2.0/saml2_one_time_use.c | 10 +- lasso/xml/saml-2.0/saml2_proxy_restriction.c | 10 +- lasso/xml/saml-2.0/saml2_statement_abstract.c | 10 +- lasso/xml/saml-2.0/saml2_subject.c | 10 +- lasso/xml/saml-2.0/saml2_subject_confirmation.c | 10 +- .../xml/saml-2.0/saml2_subject_confirmation_data.c | 10 +- lasso/xml/saml-2.0/saml2_subject_locality.c | 10 +- lasso/xml/saml-2.0/samlp2_artifact_resolve.c | 10 +- lasso/xml/saml-2.0/samlp2_artifact_response.c | 10 +- lasso/xml/saml-2.0/samlp2_assertion_id_request.c | 10 +- lasso/xml/saml-2.0/samlp2_attribute_query.c | 10 +- lasso/xml/saml-2.0/samlp2_authn_query.c | 10 +- lasso/xml/saml-2.0/samlp2_authn_request.c | 10 +- lasso/xml/saml-2.0/samlp2_authz_decision_query.c | 10 +- lasso/xml/saml-2.0/samlp2_extensions.c | 10 +- lasso/xml/saml-2.0/samlp2_idp_entry.c | 10 +- lasso/xml/saml-2.0/samlp2_idp_list.c | 10 +- lasso/xml/saml-2.0/samlp2_logout_request.c | 10 +- lasso/xml/saml-2.0/samlp2_logout_response.c | 10 +- lasso/xml/saml-2.0/samlp2_manage_name_id_request.c | 10 +- .../xml/saml-2.0/samlp2_manage_name_id_response.c | 10 +- .../xml/saml-2.0/samlp2_name_id_mapping_request.c | 10 +- .../xml/saml-2.0/samlp2_name_id_mapping_response.c | 10 +- lasso/xml/saml-2.0/samlp2_name_id_policy.c | 10 +- lasso/xml/saml-2.0/samlp2_request_abstract.c | 10 +- .../xml/saml-2.0/samlp2_requested_authn_context.c | 10 +- lasso/xml/saml-2.0/samlp2_response.c | 10 +- lasso/xml/saml-2.0/samlp2_scoping.c | 10 +- lasso/xml/saml-2.0/samlp2_status.c | 10 +- lasso/xml/saml-2.0/samlp2_status_code.c | 10 +- lasso/xml/saml-2.0/samlp2_status_detail.c | 10 +- lasso/xml/saml-2.0/samlp2_status_response.c | 10 +- lasso/xml/saml-2.0/samlp2_subject_query_abstract.c | 10 +- lasso/xml/saml-2.0/samlp2_terminate.c | 10 +- lasso/xml/saml_advice.c | 11 +- lasso/xml/saml_assertion.c | 10 +- lasso/xml/saml_authentication_statement.c | 10 +- lasso/xml/saml_authority_binding.c | 10 +- lasso/xml/saml_condition_abstract.c | 17 +- lasso/xml/saml_conditions.c | 10 +- lasso/xml/saml_name_identifier.c | 10 +- lasso/xml/saml_name_identifier.h | 15 + lasso/xml/saml_statement_abstract.c | 17 +- lasso/xml/saml_subject.c | 10 +- lasso/xml/saml_subject_confirmation.c | 10 +- lasso/xml/saml_subject_locality.c | 10 +- lasso/xml/saml_subject_statement_abstract.c | 10 +- lasso/xml/samlp_request.c | 9 +- lasso/xml/samlp_request_abstract.c | 10 +- lasso/xml/samlp_response.c | 10 +- lasso/xml/samlp_response_abstract.c | 10 +- lasso/xml/samlp_status.c | 10 +- lasso/xml/samlp_status_code.c | 10 +- lasso/xml/soap_binding_consent.c | 10 +- lasso/xml/soap_binding_correlation.c | 10 +- lasso/xml/soap_binding_ext_credential.c | 10 +- lasso/xml/soap_binding_ext_credentials_context.c | 10 +- .../xml/soap_binding_ext_service_instance_update.c | 10 +- lasso/xml/soap_binding_ext_timeout.c | 10 +- lasso/xml/soap_binding_processing_context.c | 10 +- lasso/xml/soap_binding_provider.c | 10 +- lasso/xml/soap_binding_usage_directive.c | 10 +- lasso/xml/soap_body.c | 10 +- lasso/xml/soap_envelope.c | 7 +- lasso/xml/soap_header.c | 5 +- lasso/xml/strings.h | 75 ++++ lasso/xml/utility_status.c | 10 +- lasso/xml/xml.c | 9 + 419 files changed, 2691 insertions(+), 6703 deletions(-) commit 23fdb5641e236171ac56af717f63df277948af3a Author: Damien Laniel Date: Wed May 14 18:16:30 2008 +0000 allows querying a list of items with ID-WSF 2.0 data service bindings/overrides.xml | 2 ++ lasso/id-wsf-2.0/data_service.c | 34 ++++++++++++++++++++++++++++++---- lasso/id-wsf-2.0/data_service.h | 9 ++++++--- 3 files changed, 38 insertions(+), 7 deletions(-) commit ce18fb098f11eb1b307723b01f93cd16f46e0bdf Author: Frederic Peters Date: Wed May 14 16:37:00 2008 +0000 added lasso_idwsf2_data_service_get_attribute_nodes method lasso/id-wsf-2.0/data_service.c | 60 +++++++++++++++++++++++++++++++++++++++++ lasso/id-wsf-2.0/data_service.h | 3 +++ 2 files changed, 63 insertions(+) commit e6f63010f4deaf6ebbae5fff437f5e075e1fde81 Author: Damien Laniel Date: Wed May 14 14:18:39 2008 +0000 fixed get and set queryItems in bindings lasso/id-wsf-2.0/data_service.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 6a1e276c71d740992a4b5a9abb034cecbb19ef25 Author: Benjamin Dauvergne Date: Tue May 13 13:48:11 2008 +0000 * validate input in lasso_profile_is_saml_query lasso/saml-2.0/profile.c | 1 + 1 file changed, 1 insertion(+) commit ffab8ef9136d92993bf0ec855c1eba55aa42e66b Author: Benjamin Dauvergne Date: Fri May 9 17:12:40 2008 +0000 * export dummy lasso_init/lasso_shutdown for compatibility * module shutdown must return SUCCESS * verify if returned object is non-null before decrementing its refcount bindings/lang_php5_helpers/wrapper_source.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) commit 6a0a54e6e7d897b4981c054ef922fbab1b7fa47a Author: Benjamin Dauvergne Date: Fri May 9 17:11:21 2008 +0000 export dummy lasso_init/lasso_shutdown for compatibility bindings/lang_php5_helpers/wrapper_source_top.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) commit 02e13d5e89842fa73632d1726239bd00b97c5fcf Author: Benjamin Dauvergne Date: Wed Apr 30 12:57:17 2008 +0000 fix indentation III the come back lasso/id-ff/login.c | 3 ++- lasso/saml-2.0/login.c | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) commit 5ea856493b47d5cb4376d1f606ab76c5adc6bbaf Author: Benjamin Dauvergne Date: Wed Apr 30 12:52:40 2008 +0000 fix indentation bis lasso/id-ff/login.c | 8 ++++---- lasso/saml-2.0/login.c | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) commit 35fbe98ed16bd4f2000257099415a4bbcbfe54df Author: Benjamin Dauvergne Date: Wed Apr 30 12:36:27 2008 +0000 fix indentation lasso/id-ff/login.c | 4 ++-- lasso/saml-2.0/login.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) commit a7992df66a60dea5cac5d9665f84f46e0abb2751 Author: Benjamin Dauvergne Date: Wed Apr 30 12:24:09 2008 +0000 * lasso*login_must_authenticate: (id-ff/login.c,saml-2.0/login.c): do not consider profile->session != NULL as a proof of a previous authentication and search an assertion associated with profile->remote_providerID. That was causing a bug when a previous unsuccesfull request was making profile->session != NULL even if no authentication has been made. lasso/id-ff/login.c | 4 ++++ lasso/saml-2.0/login.c | 4 ++++ 2 files changed, 8 insertions(+) commit 6fb74819ff1132486bfed17300277c83be8a96ae Author: Benjamin Dauvergne Date: Wed Apr 30 10:14:06 2008 +0000 * add string translation for error LASSO_LOGIN_ERROR_STATUS_NOT_SUCCESS lasso/errors.c | 2 ++ 1 file changed, 2 insertions(+) commit 59af6e10567fb7369f7e5f715a70c3447f502fc8 Author: Frederic Peters Date: Tue Apr 29 21:07:28 2008 +0000 look for ElementTree in yet another place bindings/bindings.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit 4e0605a909c9f207c9223f859baf73d389e9b8b1 Author: Frederic Peters Date: Tue Apr 29 20:29:43 2008 +0000 updated with 2.1.98 packaging changelog | 20 +++++++++++++++----- control | 8 ++++---- rules | 7 ++++--- 3 files changed, 23 insertions(+), 12 deletions(-) commit 0d1d2f68908aa4b7179c83ad7ad128b284912377 Author: Frederic Peters Date: Tue Apr 29 20:29:43 2008 +0000 updated with 2.1.98 packaging debian/changelog | 20 +++++++++++++++----- debian/control | 8 ++++---- debian/rules | 7 ++++--- 3 files changed, 23 insertions(+), 12 deletions(-) commit 0b6df18b19fe9991da77ba78f1703c1296dbf81b Author: Frederic Peters Date: Tue Apr 29 20:06:31 2008 +0000 properly quote vars configure.ac | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 198215ac31012b1cbb7dab1c0e8e621611050efc Author: Frederic Peters Date: Tue Apr 29 13:31:38 2008 +0000 added build-dep on php5-dev control | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 07e54d97b47cec58eea461cd7b9d2a13bc35b9a2 Author: Frederic Peters Date: Tue Apr 29 13:31:38 2008 +0000 added build-dep on php5-dev debian/control | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit fa7a37365106f53b8e161896317021b4f0b14bbb Author: Frederic Peters Date: Tue Apr 29 12:24:18 2008 +0000 use new bindings Makefile.am | 14 ++------------ configure.ac | 8 ++++++-- 2 files changed, 8 insertions(+), 14 deletions(-) commit 5bf20775f2e4adb366bc88b8db96f05abb8f5ff6 Author: Frederic Peters Date: Tue Apr 29 12:23:52 2008 +0000 don't generate "abstract" member for PHP as it causes a problem with SWIG swig/id-wsf-2.0/disco_svc_metadata.i | 9 +++++++++ 1 file changed, 9 insertions(+) commit e18356ab7b2920408fddb47ee0ea9454b1cdef2e Author: Frederic Peters Date: Tue Apr 29 12:10:48 2008 +0000 [project @ fpeters@0d.be-20080426153010-i98np134gtvc03sy] move php extension dir under $(prefix) Original author: Frederic Peters Date: 2008-04-26 17:30:10.185000+02:00 bindings/php5/Makefile.am | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 432c2a544b768c18684c3389b9ebbc4319da4d08 Author: Frederic Peters Date: Tue Apr 29 12:10:44 2008 +0000 [project @ fpeters@0d.be-20080423153851-70h4ns9mvsncw150] ship lasso.ini Original author: Frederic Peters Date: 2008-04-23 17:38:51.027000+02:00 bindings/php5/Makefile.am | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit ba3884453b13329b4ff2067d973a29cb13e9a73c Author: Frederic Peters Date: Tue Apr 29 12:10:40 2008 +0000 [project @ fpeters@0d.be-20080423145930-yekpmusph6oob90d] merge Original author: Frederic Peters Date: 2008-04-23 16:59:30.377000+02:00 bindings/java/tests/LoginTest.java | 6 ++++++ bindings/lang_java_wrapper_top.c | 2 +- bindings/php5/Makefile.am | 8 ++++++-- bindings/php5/lasso.ini | 2 ++ 4 files changed, 15 insertions(+), 3 deletions(-) commit 4fc70143242a9de91ee14a73eb0f7b95958449f2 Author: Frederic Peters Date: Tue Apr 29 12:10:36 2008 +0000 [project @ fpeters@0d.be-20080423100400-sbs984j19ik6dxzi] merge Original author: Frederic Peters Date: 2008-04-23 12:04:00.477000+02:00 bindings/lang_php5_helpers/php_code.py | 22 +++------- bindings/lang_php5_helpers/wrapper_source.py | 57 +++++++++++++++++-------- bindings/lang_php5_helpers/wrapper_source_top.c | 24 ++++++----- bindings/overrides.xml | 7 +++ bindings/php5/Makefile.am | 2 +- bindings/php5/tests/profile_tests.php | 3 -- bindings/python/Makefile.am | 2 +- 7 files changed, 69 insertions(+), 48 deletions(-) commit c78a0c99cffddb2851bb0077c15cbc44c17f4ba5 Author: Frederic Peters Date: Tue Apr 29 12:10:32 2008 +0000 [project @ fpeters@0d.be-20080423095917-mmhdqmpa9i00kuly] remove assert that needs private struct info Original author: Frederic Peters Date: 2008-04-23 11:59:17.694000+02:00 bindings/ghashtable.h | 5 ----- 1 file changed, 5 deletions(-) commit 3e00001408b5f87e66b3fdcb044d28d8ecb9f403 Author: Frederic Peters Date: Tue Apr 29 12:10:27 2008 +0000 [project @ fpeters@0d.be-20080416142729-kpuwdj5m75qe5vnc] added php4 binding from benjamin but disabled it Original author: Frederic Peters Date: 2008-04-16 16:27:29.948000+02:00 bindings/bindings.py | 4 + bindings/lang_php5_helpers/wrapper_source.py | 2 +- bindings/php4/Makefile.am | 36 + bindings/php4/__init__.py | 0 bindings/php4/_lasso.h | 1815 ++++++++++++++++++++++++++ bindings/php4/lang.py | 516 ++++++++ bindings/php4/lasso_php4_helper.c | 336 +++++ 7 files changed, 2708 insertions(+), 1 deletion(-) commit aad2fbfc439d7f5207ab4d65ff2b3355508c157b Author: Frederic Peters Date: Tue Apr 29 12:10:23 2008 +0000 [project @ fpeters@0d.be-20080416142356-cl3d6hb3ru62p8xv] Damien Laniel 2008-04-16 added PHPGObject destructors and fixed some memory management Original author: Frederic Peters Date: 2008-04-16 16:23:56.715000+02:00 bindings/lang_php5_helpers/php_code.py | 4 ++-- bindings/lang_php5_helpers/wrapper_source.py | 8 +++----- bindings/lang_php5_helpers/wrapper_source_top.c | 18 +++++++++++++++++- bindings/php5/Makefile.am | 2 +- bindings/php5/tests/binding_tests.php | 1 + bindings/php5/tests/profile_tests.php | 1 + 6 files changed, 25 insertions(+), 9 deletions(-) commit cd1df0cf8df0b0d6962443ad4ffffb5f2929ddf2 Author: Frederic Peters Date: Tue Apr 29 12:10:19 2008 +0000 [project @ fpeters@0d.be-20080410163456-r6a9flm66nhyap6m] Merge from bdauvergne: factorize the backward compatibility code for GHashTable, fixed placement of declarations. Original author: Frederic Peters Date: 2008-04-10 18:34:56.595000+02:00 bindings/Makefile.am | 4 +- bindings/ghashtable.h | 81 +++++++++++++++++++++++++ bindings/lang_java_wrapper_top.c | 72 +--------------------- bindings/lang_php5_helpers/wrapper_source_top.c | 46 +------------- bindings/lang_python_wrapper_top.c | 54 +---------------- 5 files changed, 87 insertions(+), 170 deletions(-) commit 464dda465452a228d8cf9b625b08f9be28ef96ee Author: Frederic Peters Date: Tue Apr 29 12:10:15 2008 +0000 [project @ fpeters@0d.be-20080410140255-456kiwqz53exn9vo] removed hash table size checks as they requires access to glib internals Original author: Frederic Peters Date: 2008-04-10 16:02:55.908000+02:00 bindings/lang_java_wrapper_top.c | 5 ----- bindings/lang_python_wrapper_top.c | 5 ----- 2 files changed, 10 deletions(-) commit fd9f339b945dee2a354ad0f5cdab3bb62c1cb362 Author: Frederic Peters Date: Tue Apr 29 12:10:11 2008 +0000 [project @ fpeters@0d.be-20080408141937-9ge86l4vyec39lsz] merging damien branch Original author: Frederic Peters Date: 2008-04-08 16:19:37.055000+02:00 bindings/lang_python.py | 1 + 1 file changed, 1 insertion(+) commit 09f8d3af90ff87434aff3c024fe71fce6edf7284 Author: Frederic Peters Date: Tue Apr 29 12:10:07 2008 +0000 [project @ fpeters@0d.be-20080408141317-mmjdku5wuegia6o3] merging benjamin Original author: Frederic Peters Date: 2008-04-08 16:13:17.010000+02:00 bindings/lang_java.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 3121f2a114eac96340d646bc2c5570e9fdcda5c3 Author: Frederic Peters Date: Tue Apr 29 12:10:03 2008 +0000 [project @ fpeters@0d.be-20080407154605-x6j5u3k1t53vzary] look for alternative ElementTree implementation Original author: Frederic Peters Date: 2008-04-07 17:46:05.507000+02:00 bindings/bindings.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) commit ac9af8971af59599eb62c297b8d2d392abe51bb8 Author: Frederic Peters Date: Tue Apr 29 12:09:59 2008 +0000 [project @ fpeters@0d.be-20080406145608-13ngws5566q8jkj9] simplified raise_on_rc Original author: Frederic Peters Date: 2008-04-06 16:56:08.973000+02:00 bindings/lang_python.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) commit c0650e55a6fa2aca6095b6447cab9f6a3db0c182 Author: Frederic Peters Date: Tue Apr 29 12:09:55 2008 +0000 [project @ fpeters@0d.be-20080406145106-b6ywyx9f53w39y0e] fixed returned list of gobject Original author: Frederic Peters Date: 2008-04-06 16:51:06.682000+02:00 bindings/lang_python.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 8b97995ec79f93ae7c3ccaedaaa87849a7e8a0df Author: Frederic Peters Date: Tue Apr 29 12:09:51 2008 +0000 [project @ fpeters@0d.be-20080406135913-4sxje4sifk407jna] support for methods returning GList* of LassoNode* Original author: Frederic Peters Date: 2008-04-06 15:59:13.889000+02:00 bindings/lang_python.py | 6 ++++++ bindings/overrides.xml | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) commit 2fbda41c8e56176ece0848f5e8eddbe7edb213a4 Author: Frederic Peters Date: Tue Apr 29 12:09:47 2008 +0000 [project @ fpeters@0d.be-20080406111623-pf8iq94lrfu2w2un] extended the skip attribute to accept more values Original author: Frederic Peters Date: 2008-04-06 13:16:23.574000+02:00 bindings/bindings.py | 18 ++++++++++++------ bindings/overrides.xml | 16 +++++++--------- 2 files changed, 19 insertions(+), 15 deletions(-) commit c9bc0833ff00432b31721ac8eed840646438b07b Author: Frederic Peters Date: Tue Apr 29 12:09:43 2008 +0000 [project @ fpeters@0d.be-20080406110838-j0faaj3x9t3ztbhs] don't output two spaces before = Original author: Frederic Peters Date: 2008-04-06 13:08:38.325000+02:00 bindings/lang_python.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 3de57b460d81b8339c9ffbe63a0dc85238a81b46 Author: Frederic Peters Date: Tue Apr 29 12:09:39 2008 +0000 [project @ fpeters@0d.be-20080406103050-qfvnslshaslcjrj1] improving doc strings Original author: Frederic Peters Date: 2008-04-06 12:30:50.311000+02:00 bindings/lang_python.py | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) commit ff3228dd00da1d8d004c93730dd65f3c492a8f0e Author: Frederic Peters Date: Tue Apr 29 12:09:35 2008 +0000 [project @ fpeters@0d.be-20080406100353-gauqob9b1238gw9o] functions that are not owner of their return type Original author: Frederic Peters Date: 2008-04-06 12:03:53.304000+02:00 bindings/overrides.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit ea720e80e588babe485782c8ed6c268bc602177f Author: Frederic Peters Date: Tue Apr 29 12:09:31 2008 +0000 [project @ fpeters@0d.be-20080405225744-bz39keu5co15n5l6] backward compat for ID-WSF buildRequestMsg methods Original author: Frederic Peters Date: 2008-04-06 00:57:44.577000+02:00 bindings/lang_python.py | 4 ++++ 1 file changed, 4 insertions(+) commit 9c7e431d4f0b7a2f2d3339f03b4cc2145ac9828c Author: Frederic Peters Date: Tue Apr 29 12:09:27 2008 +0000 [project @ fpeters@0d.be-20080405220112-hv62do6qtb8itkxw] optional parameters for LassoDiscovery and LassoDataService Original author: Frederic Peters Date: 2008-04-06 00:01:12.703000+02:00 bindings/overrides.xml | 40 ++++++++++++++++++++++++++++++++++++++++ bindings/php5/Makefile.am | 2 +- 2 files changed, 41 insertions(+), 1 deletion(-) commit abfa9ae0aa417842df45f964305114a3fb186286 Author: Frederic Peters Date: Tue Apr 29 12:09:23 2008 +0000 [project @ fpeters@0d.be-20080405204919-zlk32ehqmftfwh0c] backward compat for registerIdWsf2DstService Original author: Frederic Peters Date: 2008-04-05 22:49:19.113000+02:00 bindings/lang_python.py | 1 + 1 file changed, 1 insertion(+) commit 6890ff4090efe0a36d7e04b62dbb84a6c0e19009 Author: Frederic Peters Date: Tue Apr 29 12:09:19 2008 +0000 [project @ fpeters@0d.be-20080405204856-apdxhkk5pdhmx0nj] support for xmlNode* attributes Original author: Frederic Peters Date: 2008-04-05 22:48:56.805000+02:00 bindings/lang_python.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit 09f41a733ede7415239b0d0cff2c6b4cac617bdc Author: Frederic Peters Date: Tue Apr 29 12:09:15 2008 +0000 [project @ fpeters@0d.be-20080405184728-xay3dzjeq41suxav] added remaining optional parameters that were defined in the swig bindings Original author: Frederic Peters Date: 2008-04-05 20:47:28.881000+02:00 bindings/overrides.xml | 46 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 44 insertions(+), 2 deletions(-) commit ba9a949909ae6bd0c5a764b4f93fec51cb398655 Author: Frederic Peters Date: Tue Apr 29 12:09:11 2008 +0000 [project @ fpeters@0d.be-20080405184658-1389bbpst9cxhjm6] support for boolean default values Original author: Frederic Peters Date: 2008-04-05 20:46:58.982000+02:00 bindings/lang_php5_helpers/php_code.py | 2 ++ bindings/lang_python.py | 2 ++ 2 files changed, 4 insertions(+) commit d75c8d706d80e69df7428d127490575af25f246d Author: Frederic Peters Date: Tue Apr 29 12:09:07 2008 +0000 [project @ fpeters@0d.be-20080405184638-o2aipd0e2lkd674q] fixed backward compatibility of DiscoDescription to only be enabled when WSF support is on Original author: Frederic Peters Date: 2008-04-05 20:46:38.168000+02:00 bindings/lang_python.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit fee93704e014a6fe7fa825aa3bcf01e4d1d43f2e Author: Frederic Peters Date: Tue Apr 29 12:09:03 2008 +0000 [project @ fpeters@0d.be-20080404131647-lb7jty8pp3tjcmny] added handling of other constructors, and backward compatibility for lasso.DiscoDescription_newWithBriefSoapHttpDescription Original author: Frederic Peters Date: 2008-04-04 15:16:47.595000+02:00 bindings/lang_python.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) commit 2a7d065cc3fb42e7f9517f52b215de5b4bf434b9 Author: Frederic Peters Date: Tue Apr 29 12:08:59 2008 +0000 [project @ fpeters@0d.be-20080403104659-tio35cweqbl32auj] lasso_idwsf2_discovery_metadata_register_self has its last parameter optional Original author: Frederic Peters Date: 2008-04-03 12:46:59.281000+02:00 bindings/overrides.xml | 7 +++++++ 1 file changed, 7 insertions(+) commit 04bfe459063b9d9faec60f5897eaba347d9fde01 Author: Frederic Peters Date: Tue Apr 29 12:08:55 2008 +0000 [project @ fpeters@0d.be-20080328175728-1uv5yyo713uhukck] merging benjamin branch (again) Original author: Frederic Peters Date: 2008-03-28 18:57:28.327000+01:00 bindings/php5/tests/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 1b3acf88af0388020053167b4646ee6c08e09e73 Author: Frederic Peters Date: Tue Apr 29 12:08:51 2008 +0000 [project @ fpeters@0d.be-20080328175710-s4031yloqsdbmvel] merging benjamin branch Original author: Frederic Peters Date: 2008-03-28 18:57:10.522000+01:00 bindings/lang_php5_helpers/wrapper_source.py | 44 ++++++++++++++++++------- bindings/lang_php5_helpers/wrapper_source_top.c | 13 ++++++++ bindings/php5/Makefile.am | 2 ++ bindings/php5/examples/Makefile.am | 1 + bindings/php5/tests/Makefile.am | 6 ++++ bindings/php5/tests/binding_tests.php | 1 - bindings/php5/tests/binding_tests.sh | 3 ++ bindings/php5/tests/profile_tests.php | 11 ++----- bindings/php5/tests/profile_tests.sh | 3 ++ 9 files changed, 62 insertions(+), 22 deletions(-) commit 500495f0dd0df08c51e95f22e7d1ec0bac354030 Author: Frederic Peters Date: Tue Apr 29 12:08:47 2008 +0000 [project @ fpeters@0d.be-20080326094935-u5wxcw8nd30ckdjw] casting free functions Original author: Frederic Peters Date: 2008-03-26 10:49:35.397000+01:00 bindings/lang_python.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 81ef2515cee1c5c0dd46be667e23e6f407b68728 Author: Frederic Peters Date: Tue Apr 29 12:08:43 2008 +0000 [project @ fpeters@0d.be-20080326094754-cw66nuog62q06ekk] merging benjamin branch Original author: Frederic Peters Date: 2008-03-26 10:47:54.384000+01:00 bindings/bindings.py | 29 ++++++++++++++++++++++++----- bindings/java/Makefile.am | 2 +- bindings/lang_java.py | 5 +++++ bindings/lang_php5_helpers/php_code.py | 8 ++++++-- bindings/lang_python.py | 2 +- bindings/overrides.xml | 4 ++-- bindings/php5/Makefile.am | 2 +- 7 files changed, 40 insertions(+), 12 deletions(-) commit 02f9795f1ad4c609a8b604ee94da397b31148c5d Author: Frederic Peters Date: Tue Apr 29 12:08:39 2008 +0000 [project @ fpeters@0d.be-20080326090203-a0ietdsmp8ec9aef] freeing converted list Original author: Frederic Peters Date: 2008-03-26 10:02:03.689000+01:00 bindings/lang_python.py | 10 ++++++++++ 1 file changed, 10 insertions(+) commit 1123dac682930479bf52f8dbfe816bfe0c815c68 Author: Frederic Peters Date: Tue Apr 29 12:08:35 2008 +0000 [project @ fpeters@0d.be-20080326084502-krmekmh7mokemn18] possibility to qualify GList* parameters Original author: Frederic Peters Date: 2008-03-26 09:45:02.789000+01:00 bindings/bindings.py | 4 ++++ bindings/lang_python.py | 17 ++++++++++++++--- bindings/overrides.xml | 4 ++++ 3 files changed, 22 insertions(+), 3 deletions(-) commit 33ae3080ea407abf0dee2e2cda9ec06390a4bae7 Author: Frederic Peters Date: Tue Apr 29 12:08:31 2008 +0000 [project @ fpeters@0d.be-20080325181554-raqz9a721r2vjo5t] return type qualifier to know what is the content of a GList* Original author: Frederic Peters Date: 2008-03-25 19:15:54.747000+01:00 bindings/bindings.py | 3 +++ bindings/lang_python.py | 4 +--- bindings/overrides.xml | 1 + 3 files changed, 5 insertions(+), 3 deletions(-) commit 7b549d0ce332cf7ca00df99d3bd734becd5bbcf7 Author: Frederic Peters Date: Tue Apr 29 12:08:27 2008 +0000 [project @ fpeters@0d.be-20080325172346-eitu3onvzps4b30z] merging benjamin stuff and adding --enable-id-wsf when id-wsf is asked Original author: Frederic Peters Date: 2008-03-25 18:23:46.535000+01:00 bindings/bindings.py | 14 +++++++++++--- bindings/java/Makefile.am | 10 +++++++--- bindings/lang_java.py | 8 ++++++-- bindings/lang_php5_helpers/php_code.py | 4 +++- bindings/overrides.xml | 4 ++++ bindings/php5/Makefile.am | 8 ++++++-- bindings/python/Makefile.am | 6 +++++- 7 files changed, 42 insertions(+), 12 deletions(-) commit 3386a3e6beabcd4ab374d20fecf117aead9833fa Author: Frederic Peters Date: Tue Apr 29 12:08:23 2008 +0000 [project @ fpeters@0d.be-20080321174837-2fneubl3xhlol08w] always raise an exception, to be compatible with previous behaviour Original author: Frederic Peters Date: 2008-03-21 18:48:37.002000+01:00 bindings/lang_python.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) commit d4f82ebb242f63966e641d755ce29b46b384d686 Author: Frederic Peters Date: Tue Apr 29 12:08:19 2008 +0000 [project @ fpeters@0d.be-20080321174813-7pcjuucmw5xw4d4o] declare functions, and make them static Original author: Frederic Peters Date: 2008-03-21 18:48:13.524000+01:00 bindings/lang_python_wrapper_top.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) commit b03b0ea5a4616eb8fd01632203cda3223717b024 Author: Frederic Peters Date: Tue Apr 29 12:08:15 2008 +0000 [project @ fpeters@0d.be-20080321173628-ufrpdmc23wmhu5ym] removed compatibility to inexisting attribute Original author: Frederic Peters Date: 2008-03-21 18:36:28.789000+01:00 bindings/lang_python.py | 1 - 1 file changed, 1 deletion(-) commit 1187a488deda88393675d1df839cfedce73188e1 Author: Frederic Peters Date: Tue Apr 29 12:08:11 2008 +0000 [project @ fpeters@0d.be-20080314231446-2fess87rf4xe00ar] more compat Original author: Frederic Peters Date: 2008-03-15 00:14:46.531000+01:00 bindings/lang_python.py | 2 ++ 1 file changed, 2 insertions(+) commit a7a314bed2f9659b8f9ad15d58b33e819ccbc6ed Author: Frederic Peters Date: Tue Apr 29 12:08:07 2008 +0000 [project @ fpeters@0d.be-20080314231256-hjz1wljuqrcbuce3] merging benjamin branch Original author: Frederic Peters Date: 2008-03-15 00:12:56.228000+01:00 bindings/Makefile.am | 3 ++- bindings/java/Makefile.am | 48 +++++++++++++++++++++-------------- bindings/java/TODO | 19 ++++---------- bindings/java/tests/BindingTests.java | 1 + bindings/java/tests/LoginTest.java | 26 ++++++++++--------- 5 files changed, 51 insertions(+), 46 deletions(-) commit 1ada7e4c22d883c1f9fe135626822bcf124ed05e Author: Frederic Peters Date: Tue Apr 29 12:08:03 2008 +0000 [project @ fpeters@0d.be-20080310093300-2iv41ihnuify54po] merging benjamin branch Original author: Frederic Peters Date: 2008-03-10 10:33:00.592000+01:00 bindings/java/LassoException_top.java | 6 +- bindings/java/Makefile.am | 21 +- bindings/java/tests/LoginTest.java | 24 +- bindings/lang_java.py | 21 +- bindings/lang_php5_helpers/php_code.py | 8 +- bindings/lang_php5_helpers/wrapper_source.py | 4 +- bindings/lang_python.py | 203 ++++------------ bindings/lang_python_wrapper_top.c | 351 +++++++++++++++++++++++---- bindings/php5/Makefile.am | 4 +- bindings/python/Makefile.am | 2 +- 10 files changed, 409 insertions(+), 235 deletions(-) commit 4e43c605c28a713ca3d7b4a55ea1b118dc67d43d Author: Frederic Peters Date: Tue Apr 29 12:07:59 2008 +0000 [project @ fpeters@0d.be-20080309152828-pw4gd3lcm7rb7dxd] merging benjamin branch Original author: Frederic Peters Date: 2008-03-09 16:28:28.854000+01:00 bindings/java/GObject.java | 3 ++ bindings/java/Makefile.am | 6 +-- bindings/java/tests/BindingTests.java | 20 ++------ bindings/java/tests/LoginTest.java | 26 +++++----- bindings/lang_java.py | 6 +-- bindings/lang_java_wrapper_top.c | 90 +++++++++++++++++++++++++++++++--- bindings/lang_php5_helpers/php_code.py | 9 +++- bindings/overrides.xml | 6 +++ bindings/php5/Makefile.am | 2 +- bindings/python/Makefile.am | 2 +- 10 files changed, 124 insertions(+), 46 deletions(-) commit 52c7f0902468c00e6b2f6bfd4882dd132558a7cb Author: Frederic Peters Date: Tue Apr 29 12:07:55 2008 +0000 [project @ fpeters@0d.be-20080229163949-v7zjjcr3sg5w0wfj] set exception code in raise_on_rc as the same exception can share two different codes (in reality this is only the case for UnknownProfileError), also skip LogoutErroor/UnknownProfileError instead of duplicating and overwriting it, with a long explanation comment. Original author: Frederic Peters Date: 2008-02-29 17:39:49.202000+01:00 bindings/lang_python.py | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) commit cfe90cf622a1714cee531ce819c83ad39281d3f9 Author: Frederic Peters Date: Tue Apr 29 12:07:51 2008 +0000 [project @ fpeters@0d.be-20080228084331-nnw52qii4xdmz36k] ship files required for tests/ Original author: Frederic Peters Date: 2008-02-28 09:43:31.229000+01:00 bindings/java/Makefile.am | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit 04960b6de8d8c7ef23d6e1805b5161b06313f314 Author: Frederic Peters Date: Tue Apr 29 12:07:47 2008 +0000 [project @ fpeters@0d.be-20080227102117-mbx90lw49ty9vfq9] rename lasso_profile_is_identity_dirty to lasso_profile_has_dirty_identity (and ditto with s/identity/session/) to provide both correct documentation and backward compatibility in Python bindings Original author: Frederic Peters Date: 2008-02-27 11:21:17.023000+01:00 bindings/lang_python.py | 19 ++++++++++++------- bindings/overrides.xml | 4 ++++ 2 files changed, 16 insertions(+), 7 deletions(-) commit aaec8ae3c1f251a8cebf3eb68c95b40b89041467 Author: Frederic Peters Date: Tue Apr 29 12:07:43 2008 +0000 [project @ fpeters@0d.be-20080227101004-a8tjn21ux8m0md7s] an other rename issue Original author: Frederic Peters Date: 2008-02-27 11:10:04.420000+01:00 bindings/lang_python.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) commit 4be42d6952ee50e5ee6e6bcb7180ee77ecd578b7 Author: Frederic Peters Date: Tue Apr 29 12:07:39 2008 +0000 [project @ fpeters@0d.be-20080226163902-kby1si1erxqnvzsm] compatibility with NodeList, StringList and StringDict Original author: Frederic Peters Date: 2008-02-26 17:39:02.548000+01:00 bindings/lang_python.py | 3 +++ 1 file changed, 3 insertions(+) commit 3124dff37b75df80736d8addae6662ef0e57963e Author: Frederic Peters Date: Tue Apr 29 12:07:35 2008 +0000 [project @ fpeters@0d.be-20080226163712-tdqz8v7d3rsdoygt] backward compat for MiscTextNode.text_child Original author: Frederic Peters Date: 2008-02-26 17:37:12.594000+01:00 bindings/lang_python.py | 1 + 1 file changed, 1 insertion(+) commit dc9d87f6144132811a390ff7f775623b6aba65eb Author: Frederic Peters Date: Tue Apr 29 12:07:31 2008 +0000 [project @ fpeters@0d.be-20080225222041-kixxnphv94z7ld23] fixed function renaming Original author: Frederic Peters Date: 2008-02-25 23:20:41.510000+01:00 bindings/lang_python.py | 2 ++ 1 file changed, 2 insertions(+) commit 2010eda9baa71a2ff4d6cf4a1f9d2be37c3ba7ec Author: Frederic Peters Date: Tue Apr 29 12:07:27 2008 +0000 [project @ fpeters@0d.be-20080225132449-kd2tppchh4z47sti] increment refcount of objects returned in tuples Original author: Frederic Peters Date: 2008-02-25 14:24:49.893000+01:00 bindings/lang_python.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 0a00f098948550d238ce7a9660bd6d4fd169a74b Author: Frederic Peters Date: Tue Apr 29 12:07:23 2008 +0000 [project @ fpeters@0d.be-20080225121334-yi07nl8kefuefhk9] benjamin branch Original author: Frederic Peters Date: 2008-02-25 13:13:34.475000+01:00 bindings/java/LassoException_top.java | 2 +- bindings/java/Makefile.am | 2 +- bindings/java/tests/LoginTest.java | 4 ++-- bindings/lang_java_wrapper_top.c | 4 ++-- bindings/lang_python.py | 21 ++++++++++++++++++--- bindings/overrides.xml | 18 ++++++++++++++++-- 6 files changed, 40 insertions(+), 11 deletions(-) commit 8f3eb17e52b1b9a99f8d817b022105bb2c4a09b6 Author: Frederic Peters Date: Tue Apr 29 12:07:19 2008 +0000 [project @ fpeters@0d.be-20080222101655-1mbomnvhq5d8gxtb] support for accessor returning GObjects Original author: Frederic Peters Date: 2008-02-22 11:16:55.631000+01:00 bindings/lang_python.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) commit 1e3892f03a2482b3e90ee902702c6e1e73c42a21 Author: Frederic Peters Date: Tue Apr 29 12:07:15 2008 +0000 [project @ fpeters@0d.be-20080222101641-d32t8a8wtocet4qq] more __repr__ like Original author: Frederic Peters Date: 2008-02-22 11:16:41.648000+01:00 bindings/bindings.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 31e54598ff9ca4ac8a43ecbbca011ae60ad3c3c4 Author: Frederic Peters Date: Tue Apr 29 12:07:11 2008 +0000 [project @ fpeters@0d.be-20080222095228-htuqndnaiiazp2qv] backward compatibility for Saml2Subject.nameID Original author: Frederic Peters Date: 2008-02-22 10:52:28.583000+01:00 bindings/lang_python.py | 1 + 1 file changed, 1 insertion(+) commit b2c6027ad1a0e13257906fc5efbf4c5386d3f1cb Author: Frederic Peters Date: Tue Apr 29 12:07:06 2008 +0000 [project @ fpeters@0d.be-20080222093656-l6a09ccadxdz9qrs] merging benjamin branch Original author: Frederic Peters Date: 2008-02-22 10:36:56.421000+01:00 bindings/bindings.py | 6 + bindings/java/GObject.java | 37 ++ bindings/java/Makefile.am | 55 +- bindings/java/TODO | 3 +- bindings/java/tests/BindingTests.java | 113 ++-- bindings/java/tests/LoginTest.java | 61 +-- bindings/lang_java.py | 366 ++++++++----- bindings/lang_java_wrapper_top.c | 998 +++++++++++++++++++++------------- bindings/overrides.xml | 4 + 9 files changed, 1027 insertions(+), 616 deletions(-) commit 3d7c20873cfd488c67645457594a27f8026f9d54 Author: Frederic Peters Date: Tue Apr 29 12:07:02 2008 +0000 [project @ fpeters@0d.be-20080222093439-0tbhiky3305jroj5] added backward compatibility for Samlp2AuthnRequest.nameIDPolicy Original author: Frederic Peters Date: 2008-02-22 10:34:39.153000+01:00 bindings/lang_python.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 3fd80d909d53650aa3b5fe220065afc8660d1a8c Author: Frederic Peters Date: Tue Apr 29 12:06:58 2008 +0000 [project @ fpeters@0d.be-20080218085519-h4hpx5u9ezvupvbc] com_entrouvert_lasso_LassoJNI.h is built Original author: Frederic Peters Date: 2008-02-18 09:55:19.662000+01:00 bindings/java/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit fca453a33470686b82075b6a1711d38feb366fff Author: Frederic Peters Date: Tue Apr 29 12:06:54 2008 +0000 [project @ fpeters@0d.be-20080218085509-t0oktx26t3v393pw] added missing java files to distributed files Original author: Frederic Peters Date: 2008-02-18 09:55:09.987000+01:00 bindings/Makefile.am | 3 +++ 1 file changed, 3 insertions(+) commit 7f96f9d0dbb664f36bf0e378f68963f675679edc Author: Frederic Peters Date: Tue Apr 29 12:06:50 2008 +0000 [project @ fpeters@0d.be-20080217154439-uws87jdru8j3izkj] distribute GObject.java and LassoException_top.java, and fixed distcheck Original author: Frederic Peters Date: 2008-02-17 16:44:39.322000+01:00 bindings/java/Makefile.am | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) commit 5d448db871cc55e6194476af1e65f79b59376324 Author: Frederic Peters Date: Tue Apr 29 12:06:46 2008 +0000 [project @ fpeters@0d.be-20080217154423-svipbb8mktdbs6gz] create source directory if necessary Original author: Frederic Peters Date: 2008-02-17 16:44:23.418000+01:00 bindings/lang_java.py | 2 ++ 1 file changed, 2 insertions(+) commit 14003fc2c17a283404d4c3c75840ebbee4d42e05 Author: Frederic Peters Date: Tue Apr 29 12:06:42 2008 +0000 [project @ fpeters@0d.be-20080217144029-zleb5lw82iwcqqvj] space after comma Original author: Frederic Peters Date: 2008-02-17 15:40:29.819000+01:00 bindings/bindings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 6f0d7933ed314ee90fb017ca5a5ea2d09d395179 Author: Frederic Peters Date: Tue Apr 29 12:06:38 2008 +0000 [project @ fpeters@0d.be-20080217143931-r5r87f8m415866z5] fixed (a little bit hacky, slowly getting back) renamed methods in python binding Original author: Frederic Peters Date: 2008-02-17 15:39:31.583000+01:00 bindings/lang_python.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) commit 129ed8d7d39bb0612506ee36b75879843e787c6a Author: Frederic Peters Date: Tue Apr 29 12:06:34 2008 +0000 [project @ fpeters@0d.be-20080217115736-u8axfdcztdhvsnj0] removed pyc file Original author: Frederic Peters Date: 2008-02-17 12:57:36.849000+01:00 bindings/lang_java.pyc | Bin 27747 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) commit 3b93e1b952d046ca20459194e8ea649e1e0794bc Author: Frederic Peters Date: Tue Apr 29 12:06:30 2008 +0000 [project @ fpeters@0d.be-20080217115557-8qtcrc1vzb75f75c] merged Benjamin branch Original author: Frederic Peters Date: 2008-02-17 12:55:57.088000+01:00 bindings/Makefile.am | 2 +- bindings/bindings.py | 38 +- bindings/java/GObject.java | 9 + bindings/java/LassoException_top.java | 31 ++ bindings/java/Makefile.am | 40 ++ bindings/java/TODO | 14 + bindings/java/tests/BindingTests.java | 282 +++++++++++ bindings/java/tests/LoginTest.java | 244 +++++++++ bindings/java/tests/Test.java | 11 + bindings/lang_java.py | 777 +++++++++++++++++++++++++++++ bindings/lang_java.pyc | Bin 0 -> 27747 bytes bindings/lang_java_wrapper_bottom.c | 0 bindings/lang_java_wrapper_top.c | 522 +++++++++++++++++++ bindings/overrides.xml | 24 +- bindings/utility-scripts/error-analyzer.pl | 147 ++++++ bindings/utils.py | 52 ++ 16 files changed, 2183 insertions(+), 10 deletions(-) commit 34e4fd0b5aae872344a16267efac847f45108ca7 Author: Frederic Peters Date: Tue Apr 29 12:06:25 2008 +0000 [project @ fpeters@0d.be-20080118215410-d45drghkhvba7822] merged Damien branch; and fixed PHP5 binding to use GLib memory management functions Original author: Frederic Peters Date: 2008-01-18 22:54:10.239000+01:00 bindings/lang_php5_helpers/wrapper_source.py | 4 +- bindings/lang_php5_helpers/wrapper_source_top.c | 2 +- .../examples/get_attributes_from_assertion.php | 11 +++ bindings/php5/tests/binding_tests.php | 82 +++++++++++++++++++++- .../examples/get_attributes_from_assertion.py | 8 +++ 5 files changed, 102 insertions(+), 5 deletions(-) commit 073b0504389253893c636f40047eb4e0531cec34 Author: Frederic Peters Date: Tue Apr 29 12:06:21 2008 +0000 [project @ fpeters@0d.be-20071122144503-m1ya6db2hzlijhmt] parse docstrings (such as the parsed form is available to all languages) and format them as epydoc in the python binding Original author: Frederic Peters Date: 2007-11-22 15:45:03.610000+01:00 bindings/bindings.py | 60 +++++++++++++++++++++++++++- bindings/lang_php5_helpers/php_code.py | 2 +- bindings/lang_python.py | 72 +++++++++++++++++++++++++++------- 3 files changed, 117 insertions(+), 17 deletions(-) commit b02255125abeb60d01b8a506b50924afc7e9f808 Author: Frederic Peters Date: Tue Apr 29 12:06:17 2008 +0000 [project @ fpeters@0d.be-20071122125027-vw48yk2h353ijif8] Don't bind lasso_*_destroy methods since they are just wrappers around g_object_unref which will be called properly from the bindings object destructor support. Also added support for a skip attribute to in overrides (not used at the moment). Original author: Frederic Peters Date: 2007-11-22 13:50:27.802000+01:00 bindings/bindings.py | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) commit 3cf3d56d7f7aa54a1dabfa0decc40cd9f0adfa09 Author: Frederic Peters Date: Tue Apr 29 12:06:13 2008 +0000 [project @ fpeters@0d.be-20071120204838-b1q3z1nv4phb1t8r] fixed typo in file to remove Original author: Frederic Peters Date: 2007-11-20 21:48:38.865000+01:00 bindings/php5/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit ca08831c9624db9fba2805b5b1116ba779db02ff Author: Frederic Peters Date: Tue Apr 29 12:06:08 2008 +0000 [project @ fpeters@0d.be-20071120201438-11ybvaefw3o02p7h] clean built files Original author: Frederic Peters Date: 2007-11-20 21:14:38.792000+01:00 bindings/php5/Makefile.am | 3 +++ bindings/python/Makefile.am | 3 +++ 2 files changed, 6 insertions(+) commit 7a7a8430b52b4ce8f1451eba927c3f809b84cc4e Author: Frederic Peters Date: Tue Apr 29 12:06:04 2008 +0000 [project @ fpeters@0d.be-20071120201406-loyt7g5302ztk7er] get srcdir from env variable (set automatically by automake) Original author: Frederic Peters Date: 2007-11-20 21:14:06.537000+01:00 bindings/python/tests/binding_tests.py | 3 ++- bindings/python/tests/profiles_tests.py | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) commit 21f30edd6477e9d9ec0b4f5bba5010204d6c99e6 Author: Frederic Peters Date: Tue Apr 29 12:06:00 2008 +0000 [project @ fpeters@0d.be-20071120151830-wdnobbexiv300ibb] fixed some make distcheck issues (still remaining is access to test data when srcdir != builddir) Original author: Frederic Peters Date: 2007-11-20 16:18:30.814000+01:00 bindings/Makefile.am | 12 ++++++++++++ bindings/php5/Makefile.am | 12 +++++++++--- bindings/python/Makefile.am | 6 ++++-- bindings/python/tests/Makefile.am | 2 ++ 4 files changed, 27 insertions(+), 5 deletions(-) commit 5511b8b29d461e53008fd4f1b1ae548ff8d425cb Author: Frederic Peters Date: Tue Apr 29 12:05:55 2008 +0000 [project @ fpeters@0d.be-20071115162508-ydcoj2rr8zkfxyvy] merged Damien branch Original author: Frederic Peters Date: 2007-11-15 17:25:08.524000+01:00 bindings/lang_php5_helpers/php_code.py | 134 +++++++++++-- bindings/lang_php5_helpers/wrapper_source.py | 63 +++--- bindings/lang_php5_helpers/wrapper_source_top.c | 248 ++++++++++++++++-------- bindings/lang_python_wrapper_top.c | 2 +- bindings/php5/Makefile.am | 3 + bindings/php5/tests/binding_tests.php | 68 ++++++- bindings/php5/tests/profile_tests.php | 39 ++-- 7 files changed, 404 insertions(+), 153 deletions(-) commit 8e660b7eb334db6ac26b472d858198ad12b9e695 Author: Frederic Peters Date: Tue Apr 29 12:05:51 2008 +0000 [project @ fpeters@0d.be-20071115161633-6e49xtjy7dgqxm3r] added special support for functions that return a borrowed reference to a GObject*. Original author: Frederic Peters Date: 2007-11-15 17:16:33.298000+01:00 bindings/bindings.py | 3 +++ bindings/lang_python.py | 3 +++ bindings/overrides.xml | 8 +++++++- 3 files changed, 13 insertions(+), 1 deletion(-) commit 281e9a81aeb2fe642dfd1d186165db7490c0a920 Author: Frederic Peters Date: Tue Apr 29 12:05:47 2008 +0000 [project @ fpeters@0d.be-20071115102943-ai5s97yj5g9chrv3] added getter for internal GObject* reference count; useful to debug memory allocations. Original author: Frederic Peters Date: 2007-11-15 11:29:43.003000+01:00 bindings/lang_python_wrapper_top.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) commit 8a6602b62be0b26bf500754b1c0dc466892051ab Author: Frederic Peters Date: Tue Apr 29 12:05:43 2008 +0000 [project @ fpeters@0d.be-20071113195326-cd83a1nrlh9l9nbr] added three more tests of bindings Original author: Frederic Peters Date: 2007-11-13 20:53:26.406000+01:00 bindings/python/tests/binding_tests.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) commit b413aa153384e789a3ed42c1ebbee97fad892345 Author: Frederic Peters Date: Tue Apr 29 12:05:38 2008 +0000 [project @ fpeters@0d.be-20071113192919-3g05qazwjjhivlsh] ported old test cases to the new binding Original author: Frederic Peters Date: 2007-11-13 20:29:19.859000+01:00 bindings/python/Makefile.am | 2 + bindings/python/tests/Makefile.am | 4 + bindings/python/tests/binding_tests.py | 258 +++++++++++++++++++++++ bindings/python/tests/profiles_tests.py | 358 ++++++++++++++++++++++++++++++++ 4 files changed, 622 insertions(+) commit a305a587f82f6a174db607519ab61ed815156079 Author: Frederic Peters Date: Tue Apr 29 12:05:33 2008 +0000 [project @ fpeters@0d.be-20071113192818-6ysl71n3cg4uvy4l] fixed setting list and object attributes to None Original author: Frederic Peters Date: 2007-11-13 20:28:18.519000+01:00 bindings/lang_python.py | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) commit e532085587f82fca4d47bd63a8e9d1e4404f2379 Author: Frederic Peters Date: Tue Apr 29 12:05:28 2008 +0000 [project @ fpeters@0d.be-20071113172348-8i4mcve247l8ec0k] fixed memory managements issues in Python binding Original author: Frederic Peters Date: 2007-11-13 18:23:48.693000+01:00 bindings/lang_python.py | 17 +++++++++++------ bindings/lang_python_wrapper_top.c | 1 + 2 files changed, 12 insertions(+), 6 deletions(-) commit 349d44ce6894bf0e979f12f5c62fe69bcceabc7d Author: Frederic Peters Date: Tue Apr 29 12:05:24 2008 +0000 [project @ fpeters@0d.be-20071113151334-k8v9udlbr5nb2lu7] backward compatibility for isSessionDirty and isIdentityDirty Original author: Frederic Peters Date: 2007-11-13 16:13:34.182000+01:00 bindings/lang_python.py | 3 +++ 1 file changed, 3 insertions(+) commit c5651d43906dfbd5970614e5e0dee2e87a112a13 Author: Frederic Peters Date: Tue Apr 29 12:05:20 2008 +0000 [project @ fpeters@0d.be-20071113141308-1hr4b009pgx606sa] some backward compatibility with SWIG generated binding Original author: Frederic Peters Date: 2007-11-13 15:13:08.467000+01:00 bindings/lang_python.py | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) commit 131e62dcb86fe8b02f0ae989b3f8bfc5b0e57c7d Author: Frederic Peters Date: Tue Apr 29 12:05:16 2008 +0000 [project @ fpeters@0d.be-20071113140738-l9xdpgnjvx2ekdvr] PyDict_SetItemString doesn't steal the reference, so Py_DECREF(obj); after. Original author: Frederic Peters Date: 2007-11-13 15:07:38.745000+01:00 bindings/lang_python_wrapper_top.c | 2 ++ 1 file changed, 2 insertions(+) commit 0ac403922ffc4126f21e48dddd0c38076257ca74 Author: Frederic Peters Date: Tue Apr 29 12:05:12 2008 +0000 [project @ fpeters@0d.be-20071113015838-961yf93m001amgi1] merging Damien branch Original author: Frederic Peters Date: 2007-11-13 02:58:38.825000+01:00 bindings/lang_php5_helpers/php_code.py | 84 ++++++------ bindings/lang_php5_helpers/wrapper_source.py | 43 +++--- bindings/lang_php5_helpers/wrapper_source_top.c | 166 +++++++++++++++++++++++- bindings/overrides.xml | 5 + bindings/php5/tests/binding_tests.php | 39 ++++++ 5 files changed, 273 insertions(+), 64 deletions(-) commit 62b71580574c634b7e8bac0a4b3105db1a9a2538 Author: Frederic Peters Date: Tue Apr 29 12:05:08 2008 +0000 [project @ fpeters@0d.be-20071112131601-rxpuzaxkhe2qwdw4] fixed variable type Original author: Frederic Peters Date: 2007-11-12 14:16:01.913000+01:00 bindings/lang_python_wrapper_top.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit e510273aaea8ef6fbde641044a590c3ffbed8da9 Author: Frederic Peters Date: Tue Apr 29 12:05:04 2008 +0000 [project @ fpeters@0d.be-20071111224238-k28pyur1kpm2iiyc] added some support for overrided function names to PHP5 binding Original author: Frederic Peters Date: 2007-11-11 23:42:38.123000+01:00 bindings/lang_php5_helpers/php_code.py | 24 ++++++++++++++++-------- bindings/lang_php5_helpers/wrapper_source.py | 5 ++++- 2 files changed, 20 insertions(+), 9 deletions(-) commit 66001f32ce35d84ef786cce3c44020e3d35f3a56 Author: Frederic Peters Date: Tue Apr 29 12:05:00 2008 +0000 [project @ fpeters@0d.be-20071111215225-xo2v0iwwjw74rqyp] override lasso_profile_get_nameIdentifier to be renamed to lasso_profile_get_federation_nameIdentifier in bindings, so it doesn't shadow the LassoProfile::nameIdentifier member. Original author: Frederic Peters Date: 2007-11-11 22:52:25.286000+01:00 bindings/lang_python.py | 6 +++++- bindings/overrides.xml | 3 +++ 2 files changed, 8 insertions(+), 1 deletion(-) commit b7e5f34fcbb03460b81c5b05bf245ef5641e0cbc Author: Frederic Peters Date: Tue Apr 29 12:04:56 2008 +0000 [project @ fpeters@0d.be-20071111213604-1prv8pyvnwr6gdly] moved is_null check into cptrToPhp function instead of duplicating it in callers. Original author: Frederic Peters Date: 2007-11-11 22:36:04.472000+01:00 bindings/lang_php5_helpers/php_code.py | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) commit 08cedd3c6e9d910eda1e7ba42ea313d23506d6f0 Author: Frederic Peters Date: Tue Apr 29 12:04:52 2008 +0000 [project @ fpeters@0d.be-20071111213455-a7lds8mfily3o9i1] ISO C90 forbids mixed declarations and code; moved xmlString return code into its own code block Original author: Frederic Peters Date: 2007-11-11 22:34:55.867000+01:00 bindings/lang_php5_helpers/wrapper_source.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) commit 42934cb50ee967a650d6c894180df76c34815dd6 Author: Frederic Peters Date: Tue Apr 29 12:04:48 2008 +0000 [project @ fpeters@0d.be-20071106133809-z6qxlw10eooqrkwp] merged damien branch Original author: Frederic Peters Date: 2007-11-06 14:38:09.490000+01:00 bindings/lang_php5_helpers/php_code.py | 60 ++++++++++++++----- bindings/lang_php5_helpers/wrapper_source.py | 79 +++++++++++-------------- bindings/lang_php5_helpers/wrapper_source_top.c | 73 +++++++++++++++++++++++ bindings/lang_python_wrapper_top.c | 3 +- bindings/php5/tests/binding_tests.php | 49 +++++++++++++++ bindings/php5/tests/profile_tests.php | 27 +++++++-- 6 files changed, 223 insertions(+), 68 deletions(-) commit bebf0b17639a292af7349c3427bc2dd993b145fb Author: Frederic Peters Date: Tue Apr 29 12:04:44 2008 +0000 [project @ fpeters@0d.be-20071103222826-mjowzcuitfc35jpx] removed erroneously duplicated lines Original author: Frederic Peters Date: 2007-11-03 23:28:26.922000+01:00 bindings/lang_php5_helpers/wrapper_source.py | 2 -- 1 file changed, 2 deletions(-) commit 07f5497c34ef6b7fda6dcaa131e6691593c63725 Author: Frederic Peters Date: Tue Apr 29 12:04:40 2008 +0000 [project @ fpeters@0d.be-20071103213505-94itgfwnvinqnhf6] Added warning message on boolean constants, as they are not yet supported but shouldn't cause the build to fail; also fixed a few calls to format_attribute that have been removed in favor of code from utils.py Original author: Frederic Peters Date: 2007-11-03 22:35:05.918000+01:00 bindings/lang_php5_helpers/wrapper_source.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) commit 87f9e0f350b879b7d721889cc6fbc6f878f4cd0f Author: Frederic Peters Date: Tue Apr 29 12:04:36 2008 +0000 [project @ fpeters@0d.be-20071103211651-8vperiqd97t0987s] support for list of xmlNode* (such as LibAuthnRequest/Extension) Original author: Frederic Peters Date: 2007-11-03 22:16:51.610000+01:00 bindings/lang_python.py | 26 ++++++++++++++++++++++++-- bindings/lang_python_wrapper_top.c | 17 +++++++++++++++++ 2 files changed, 41 insertions(+), 2 deletions(-) commit c8762f405baaac8cbb6475b39d4fbd701a34060a Author: Frederic Peters Date: Tue Apr 29 12:04:32 2008 +0000 [project @ fpeters@0d.be-20071102093734-mv4amat73ulcri17] merged Damien branch Original author: Frederic Peters Date: 2007-11-02 10:37:34.842000+01:00 bindings/lang_php5_helpers/php_code.py | 29 +++---- bindings/lang_php5_helpers/wrapper_source.py | 88 +++++++++++++++------ bindings/php5/tests/profile_tests.php | 113 +++++++++++++++++++++++---- 3 files changed, 175 insertions(+), 55 deletions(-) commit dedaa6e0eebeeb6d46f721e3c1a2022b75267901 Author: Frederic Peters Date: Tue Apr 29 12:04:28 2008 +0000 [project @ fpeters@0d.be-20071101183642-85c94st4sjujh4sr] added special support required for SAML2_SUPPORT and WSF_SUPPORT constants Original author: Frederic Peters Date: 2007-11-01 19:36:42.776000+01:00 bindings/bindings.py | 1 + bindings/lang_python.py | 21 +++++++++++++++++++++ bindings/lang_python_wrapper_top.c | 1 + bindings/overrides.xml | 4 +++- 4 files changed, 26 insertions(+), 1 deletion(-) commit dd8b9a38fb622104835a386b3fae86dcd718de31 Author: Frederic Peters Date: Tue Apr 29 12:04:24 2008 +0000 [project @ fpeters@0d.be-20071101181800-r94oeih0q8hplrxo] added support for standalone functions in lasso wrapper; and added renames for a bunch of them Original author: Frederic Peters Date: 2007-11-01 19:18:00.896000+01:00 bindings/bindings.py | 3 +++ bindings/lang_python.py | 21 ++++++++++++++++++--- bindings/overrides.xml | 6 ++++++ 3 files changed, 27 insertions(+), 3 deletions(-) commit 5d3228f77205dfb2a0e9f28f88f67602e2c37ee9 Author: Frederic Peters Date: Tue Apr 29 12:04:20 2008 +0000 [project @ fpeters@0d.be-20071101170655-2qi60xpa42u7g310] added (get) wrapper for GHashTable members Original author: Frederic Peters Date: 2007-11-01 18:06:55.994000+01:00 bindings/lang_python.py | 59 ++++++++++++++++++++++- bindings/lang_python_wrapper_top.c | 98 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 156 insertions(+), 1 deletion(-) commit 08ce85ccd01a5c7431e4e69d8db7ae26f9b935c4 Author: Frederic Peters Date: Tue Apr 29 12:04:16 2008 +0000 [project @ fpeters@0d.be-20071101160226-jj7ou71gblw0uymq] added support for converting xmlNode* as return type to PyString Original author: Frederic Peters Date: 2007-11-01 17:02:26.261000+01:00 bindings/lang_python.py | 15 ++++++++++++++- bindings/lang_python_wrapper_top.c | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) commit 60bc045cc318300c2bcb5b2e883ff840a7305260 Author: Frederic Peters Date: Tue Apr 29 12:04:12 2008 +0000 [project @ fpeters@0d.be-20071101155155-avzyxfeum84mhf7k] don't return a value for methods that do not return a value, and convert returned value to object for methods returning objects. Original author: Frederic Peters Date: 2007-11-01 16:51:55.007000+01:00 bindings/lang_python.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit 1eb23072695b0c8bb6ad1b7554880ae18537b88f Author: Frederic Peters Date: Tue Apr 29 12:04:08 2008 +0000 [project @ fpeters@0d.be-20071101154634-m2de3kw7qyl47p39] raise lasso.Error instead of base Exception on constructor error Original author: Frederic Peters Date: 2007-11-01 16:46:34.882000+01:00 bindings/lang_python.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 619dcfa16927d774ed94b0417869f6e1a5e0150b Author: Frederic Peters Date: Tue Apr 29 12:04:04 2008 +0000 [project @ fpeters@0d.be-20071101154602-vtgnze1fteggdkvj] always convert identifers from ID to Id Original author: Frederic Peters Date: 2007-11-01 16:46:02.686000+01:00 bindings/utils.py | 1 + 1 file changed, 1 insertion(+) commit 61ad2fee4beedb26e4fb1dec8899c08bcf4d4a9f Author: Frederic Peters Date: Tue Apr 29 12:04:00 2008 +0000 [project @ fpeters@0d.be-20071101154109-l4l5rntsmkrukw3k] raise exception when constructor fails Original author: Frederic Peters Date: 2007-11-01 16:41:09.647000+01:00 bindings/lang_python.py | 2 ++ 1 file changed, 2 insertions(+) commit 31d1c636421842a6aede4ad344aecea2c0a6d3ac Author: Frederic Peters Date: Tue Apr 29 12:03:56 2008 +0000 [project @ fpeters@0d.be-20071101153722-f7053pg8s6x5rpst] added comments to file, and added optional args definition to lasso_provider_new Original author: Frederic Peters Date: 2007-11-01 16:37:22.975000+01:00 bindings/overrides.xml | 10 ++++++++++ 1 file changed, 10 insertions(+) commit aa8049af80f202de09822bb6afba54f2ed50740c Author: Frederic Peters Date: Tue Apr 29 12:03:52 2008 +0000 [project @ fpeters@0d.be-20071031161615-6azrhw33s96nngr1] fixed setters for object members that are LassoNode Original author: Frederic Peters Date: 2007-10-31 17:16:15.654000+01:00 bindings/lang_python.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit fad4c5b309c9c625f1c42e12df9377fbb00ef12f Author: Frederic Peters Date: Tue Apr 29 12:03:48 2008 +0000 [project @ fpeters@0d.be-20071031161008-c5jqe7topkxoaoe0] raise TypeError when assigning a Python list to a member expecting a tuple Original author: Frederic Peters Date: 2007-10-31 17:10:08.047000+01:00 bindings/lang_python.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) commit 72c7cf9cf5bf9d874dc3d9774566a835fa0a5474 Author: Frederic Peters Date: Tue Apr 29 12:03:44 2008 +0000 [project @ fpeters@0d.be-20071031124903-z1k8ywuk1qgrl5gm] added lasso extension dynamic loading, aborting if it fails Original author: Frederic Peters Date: 2007-10-31 13:49:03.384000+01:00 bindings/lang_php5_helpers/php_code.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) commit f8233551a19ce4ead9f809d39cff49a94126d141 Author: Frederic Peters Date: Tue Apr 29 12:03:40 2008 +0000 [project @ fpeters@0d.be-20071031114522-jkrmvbpphcm0rms8] moved identifier name formatting functions to their own module, so they are not duplicated everywhere. Original author: Frederic Peters Date: 2007-10-31 12:45:22.367000+01:00 bindings/lang_php5_helpers/php_code.py | 33 ++++--------------- bindings/lang_php5_helpers/wrapper_source.py | 21 +++--------- bindings/lang_python.py | 36 +++++--------------- bindings/utils.py | 49 ++++++++++++++++++++++++++++ 4 files changed, 68 insertions(+), 71 deletions(-) commit 21607461fee5e76640aff9bee710119c07fcc69f Author: Frederic Peters Date: Tue Apr 29 12:03:36 2008 +0000 [project @ fpeters@0d.be-20071030182501-ylv8gu5he0jqlngd] output warnings to stderr Original author: Frederic Peters Date: 2007-10-30 19:25:01.156000+01:00 bindings/lang_php5_helpers/php_code.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 81cec0d3c4e3a1528c77703d9b009b16beb924c9 Author: Frederic Peters Date: Tue Apr 29 12:03:32 2008 +0000 [project @ fpeters@0d.be-20071029175534-xyhm1jidpe624m3t] API compatibility with SWIG bindings which didn't have accessors for those methods and used totally pythonified method name instead, such as Logout::getNextProviderId; also improved python method naming converter function to correctly translate ID to Id. Original author: Frederic Peters Date: 2007-10-29 18:55:34.577000+01:00 bindings/lang_python.py | 9 +++++++++ 1 file changed, 9 insertions(+) commit a7ad9d99058693b3c500db6e39ecb5afa1b2ca23 Author: Frederic Peters Date: Tue Apr 29 12:03:28 2008 +0000 [project @ fpeters@0d.be-20071029174409-80dztn33kjef8xch] output warning to stderr Original author: Frederic Peters Date: 2007-10-29 18:44:09.130000+01:00 bindings/lang_python.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit a2d633e7fa2c454d901e0b24d0f0e7c56ff1aaae Author: Frederic Peters Date: Tue Apr 29 12:03:24 2008 +0000 [project @ fpeters@0d.be-20071028192051-mdp2mgambly3dyxv] fixed two places which had not been converted to new cptr/type Original author: Frederic Peters Date: 2007-10-28 20:20:51.103000+01:00 bindings/lang_python.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 44f6e18fe39608468e0338116d36ddc8776dce74 Author: Frederic Peters Date: Tue Apr 29 12:03:17 2008 +0000 [project @ fpeters@0d.be-20071028140359-qhawdgrwjhk97y32] added Makefile.am files; to integrate within lasso build tree (under a bindings/ directory), this also requires to add those three lines to configure.ac AC_OUTPUT: bindings/Makefile bindings/python/Makefile bindings/php5/Makefile also changed generation script to output files in the current directory Original author: Frederic Peters Date: 2007-10-28 15:03:59.480000+01:00 bindings/Makefile.am | 2 ++ bindings/bindings.py | 4 +++- bindings/lang_php5.py | 9 +++------ bindings/lang_python.py | 12 ++++++------ bindings/php5/Makefile.am | 17 +++++++++++++++++ bindings/python/Makefile.am | 26 ++++++++++++++++++++++++++ 6 files changed, 57 insertions(+), 13 deletions(-) commit 236ff838e7cd77a611a57603d0ba5b2c9c0fba3c Author: Frederic Peters Date: Tue Apr 29 12:03:13 2008 +0000 [project @ fpeters@0d.be-20071028134708-gxz10vu031229qi8] undef some #define from php_config.h that are also defined in lasso_config.h Original author: Frederic Peters Date: 2007-10-28 14:47:08.021000+01:00 bindings/lang_php5_helpers/wrapper_source.py | 5 +++++ 1 file changed, 5 insertions(+) commit 151016be72ede9f2bd839641ee1357110d4d6124 Author: Frederic Peters Date: Tue Apr 29 12:03:09 2008 +0000 [project @ fpeters@0d.be-20071028132849-mlc6yfzl0y3enzbn] merged PHP5 support from Damien Original author: Frederic Peters Date: 2007-10-28 14:28:49.939000+01:00 bindings/bindings.py | 5 + bindings/lang_php5.py | 48 ++++ bindings/lang_php5_helpers/__init__.py | 0 bindings/lang_php5_helpers/php_code.py | 346 ++++++++++++++++++++++++ bindings/lang_php5_helpers/wrapper_header.py | 62 +++++ bindings/lang_php5_helpers/wrapper_source.py | 388 +++++++++++++++++++++++++++ bindings/lang_python.py | 1 - bindings/php5/tests/profile_tests.php | 137 ++++++++++ 8 files changed, 986 insertions(+), 1 deletion(-) commit 28d68b66dd1d83dd4aae531979375f632f1b4bb0 Author: Frederic Peters Date: Tue Apr 29 12:03:05 2008 +0000 [project @ fpeters@0d.be-20071010133236-j76dbt8kh1gojsz2] build without ID-WSF support by default, adding a --enable-id-wsf parameter to enable it. Also some generated C cleaning. Original author: Frederic Peters Date: 2007-10-10 15:32:36.162000+02:00 bindings/bindings.py | 15 +++++++++++++-- bindings/lang_python.py | 8 ++++---- bindings/lang_python_wrapper_bottom.c | 4 ---- bindings/lang_python_wrapper_top.c | 1 + 4 files changed, 18 insertions(+), 10 deletions(-) commit 33ad521be0eb8a6fc1c64e2839a3d217d29ab8dc Author: Frederic Peters Date: Tue Apr 29 12:03:01 2008 +0000 [project @ fpeters@0d.be-20071008135840-ujwuza0tqm6cwlzr] added licence header, help text, command-line options and renamed script Original author: Frederic Peters Date: 2007-10-08 15:58:40.683000+02:00 bindings/{t.py => bindings.py} | 69 ++++++++++++++++++++++++++++++++---------- bindings/lang_python.py | 24 +++++++++++++++ 2 files changed, 77 insertions(+), 16 deletions(-) commit 8cff338971f7363c8b9b04c7c09f834f98df1f33 Author: Frederic Peters Date: Tue Apr 29 12:02:56 2008 +0000 [project @ fpeters@0d.be-20071008113045-hi02eeinwh7a1703] some support to generate python docstrings (on methods) Original author: Frederic Peters Date: 2007-10-08 13:30:45.285000+02:00 bindings/lang_python.py | 38 ++++++++++++++++++++++++++++++++++++++ bindings/t.py | 26 ++++++++++++++++++++++++++ 2 files changed, 64 insertions(+) commit 58d3f1b48bd41f0e0854fd801675891dcc11033c Author: Frederic Peters Date: Tue Apr 29 12:02:52 2008 +0000 [project @ fpeters@0d.be-20071008100008-wd4uyitms1xfz1wv] completed support for get/setters of list of objects s = lasso.Saml2Assertion() s2 = lasso.Saml2AuthnStatement() s2.sessionIndex = 'plop' s3 = lasso.Saml2AuthnStatement() s3.sessionIndex = 'plop2' s.authnStatement = (s2, s3) print s.authnStatement Original author: Frederic Peters Date: 2007-10-08 12:00:08.145000+02:00 bindings/lang_python.py | 35 ++++++++++++++--------------------- bindings/lang_python_wrapper_top.c | 18 ++++++++++++++++++ 2 files changed, 32 insertions(+), 21 deletions(-) commit 3c0712d3ecac0cf74a88e31324de64c534bed8ad Author: Frederic Peters Date: Tue Apr 29 12:02:42 2008 +0000 [project @ fpeters@0d.be-20071008094035-jypv3sactdkvkoq7] setting of list of objects s = lasso.Saml2Assertion() s2 = lasso.Saml2AuthnStatement() s2.sessionIndex = 'plop' s3 = lasso.Saml2AuthnStatement() s3.sessionIndex = 'plop2' s.authnStatement = (s2, s3) print s.dump() Original author: Frederic Peters Date: 2007-10-08 11:40:35.875000+02:00 bindings/lang_python.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) commit e1f40bbdd7ba46e51d72389ec17820160fa461b6 Author: Frederic Peters Date: Tue Apr 29 12:02:38 2008 +0000 [project @ fpeters@0d.be-20071008090356-014qg89f2kq667v4] support for getter/setter of list of strings (and partially done of objects) Original author: Frederic Peters Date: 2007-10-08 11:03:56.732000+02:00 bindings/lang_python.py | 80 +++++++++++++++++++++++++++++++++++++++++++++---- bindings/t.py | 10 ++++++- 2 files changed, 84 insertions(+), 6 deletions(-) commit 3e20b4b01c0e36a3b151f84c548681801785c482 Author: Frederic Peters Date: Tue Apr 29 12:02:34 2008 +0000 [project @ fpeters@0d.be-20071006185817-a2qpisu5x6a4zqef] fixing newFromDump constructors Original author: Frederic Peters Date: 2007-10-06 20:58:17.081000+02:00 bindings/lang_python.py | 1 + 1 file changed, 1 insertion(+) commit 5a0a4a48c8505f289d8d6d1e676b6fe5dd5650fc Author: Frederic Peters Date: Tue Apr 29 12:02:30 2008 +0000 [project @ fpeters@0d.be-20071006183919-bv96kzjkqzho9p5s] added support for non-None optional args Original author: Frederic Peters Date: 2007-10-06 20:39:19.031000+02:00 bindings/lang_python.py | 13 +++++++++++-- bindings/overrides.xml | 17 +++++++++++++++++ bindings/t.py | 3 +++ 3 files changed, 31 insertions(+), 2 deletions(-) commit 61bd776bba2ba9f30d334dd1e451c4f15830bec3 Author: Frederic Peters Date: Tue Apr 29 12:02:26 2008 +0000 [project @ fpeters@0d.be-20071006180132-1t68niy6jyj26k88] bugfix for string members Original author: Frederic Peters Date: 2007-10-06 20:01:32.249000+02:00 bindings/lang_python.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) commit c1bf8393fb0d546ed14a53377d0e9074fdce8b95 Author: Frederic Peters Date: Tue Apr 29 12:02:22 2008 +0000 [project @ fpeters@0d.be-20071006172452-7ed22uoeqm22gled] support for exceptions, with a complete hierarchy of exceptions; and emulation of swig binding behaviour (access to code via [0] and to error string via [1]) login = lasso.Login(server) try: login.initAuthnRequest('plop', lasso.HTTP_METHOD_REDIRECT) except lasso.Error, error: print error # print error.code # -201 print error[0] # -201 print error[1] # ProviderID unknown to LassoServer. sys.exit(1) Original author: Frederic Peters Date: 2007-10-06 19:24:52.095000+02:00 bindings/lang_python.py | 84 +++++++++++++++++++++++++++++++++++++++++++++++-- bindings/overrides.xml | 13 ++++++++ bindings/t.py | 2 +- 3 files changed, 96 insertions(+), 3 deletions(-) commit b780cf634ec9f2dc4790a04f4c1b1cdd505c58c2 Author: Frederic Peters Date: Tue Apr 29 12:02:18 2008 +0000 [project @ fpeters@0d.be-20071006155345-ses0l1suzq229qdq] fixed refcounting Original author: Frederic Peters Date: 2007-10-06 17:53:45.416000+02:00 bindings/lang_python.py | 13 ++++++++----- bindings/lang_python_wrapper_top.c | 6 ++++++ 2 files changed, 14 insertions(+), 5 deletions(-) commit 43e43c94044154de6f1bb49ddcdb47fd63e82784 Author: Frederic Peters Date: Tue Apr 29 12:02:14 2008 +0000 [project @ fpeters@0d.be-20071006151758-pwrstredrf19b2nw] added repr support for PyGObjectPtr, displaying GObject type name and reference count Original author: Frederic Peters Date: 2007-10-06 17:17:58.258000+02:00 bindings/lang_python_wrapper_top.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) commit 17505a1805a47e80695ea1573530cdc5c6180da9 Author: Frederic Peters Date: Tue Apr 29 12:02:10 2008 +0000 [project @ fpeters@0d.be-20071005223906-y27ho960oiiqho19] fixed getters returning objects (getting the appropriate class for the given type) (and a small issue with setter of strings); this is now working: login = lasso.Login(server) login.initAuthnRequest('https://idp1/metadata', lasso.HTTP_METHOD_REDIRECT) login.request.isPassive = False login.request.nameIDPolicy = 'federated' login.buildAuthnRequestMsg() Original author: Frederic Peters Date: 2007-10-06 00:39:06.565000+02:00 bindings/lang_python.py | 76 +++++++++++++++++++++++++++++++++++-------------- 1 file changed, 54 insertions(+), 22 deletions(-) commit 93ee9083730057521db9841c1b1e22ebf07a79bb Author: Frederic Peters Date: Tue Apr 29 12:02:06 2008 +0000 [project @ fpeters@0d.be-20071005200614-dahkk1xuq6pbumbo] wrap constants & enums; is now possible: login = lasso.Login(server) login.initAuthnRequest('https://idp1/metadata', lasso.HTTP_METHOD_REDIRECT) login.buildAuthnRequestMsg() Original author: Frederic Peters Date: 2007-10-05 22:06:14.800000+02:00 bindings/lang_python.py | 26 ++++++++++++++++++++++++++ bindings/lang_python_wrapper_bottom.c | 5 ++++- bindings/t.py | 8 ++++++-- 3 files changed, 36 insertions(+), 3 deletions(-) commit 90f4c1ee59c58b252a13d8b4f55e01df421c8fd5 Author: Frederic Peters Date: Tue Apr 29 12:02:02 2008 +0000 [project @ fpeters@0d.be-20071005194234-7b7e39l1x4afi8wf] fixed attribute renaming, login.msgUrl now works Original author: Frederic Peters Date: 2007-10-05 21:42:34.345000+02:00 bindings/lang_python.py | 2 ++ 1 file changed, 2 insertions(+) commit 1aac24f0ccba489859b4913931415859bb4d4d47 Author: Frederic Peters Date: Tue Apr 29 12:01:58 2008 +0000 [project @ fpeters@0d.be-20071005193755-jzlc2gc56thaxqwe] added support for optional arguments and fixed method calls with objects now working: server = lasso.Server('../../tests/data/sp1-la/metadata.xml') server.addProvider(2, '../../tests/data/idp1-la/metadata.xml', '../../tests/data/idp1-la/public-key.pem') login = lasso.Login(server) login.initAuthnRequest('https://idp1/metadata', 4) login.buildAuthnRequestMsg() print login.msg_url Original author: Frederic Peters Date: 2007-10-05 21:37:55.914000+02:00 bindings/lang_python.py | 75 ++++++++++++++++++++++++++++++++++++++----------- bindings/overrides.xml | 12 ++++++++ bindings/t.py | 20 ++++++++++++- 3 files changed, 90 insertions(+), 17 deletions(-) commit 37ff97943aed67b7303b642be1e1a8dfd4df359f Author: Frederic Peters Date: Tue Apr 29 12:01:54 2008 +0000 [project @ fpeters@0d.be-20071005171544-ben23itgbrjebwvk] member setters import lasso s = lasso.Samlp2AuthnRequest() s.isPassive = True print s.dump() Original author: Frederic Peters Date: 2007-10-05 19:15:44.095000+02:00 bindings/lang_python.py | 118 +++++++++++++++++++++++++++++++----------------- 1 file changed, 77 insertions(+), 41 deletions(-) commit 26bbd4a6e3f9a921f13ba6a73b4bf174c3809fba Author: Frederic Peters Date: Tue Apr 29 12:01:50 2008 +0000 [project @ fpeters@0d.be-20071005162859-0pf7l8zkie7m9sr5] generate wrapper for get accessors import lasso s = lasso.Samlp2AuthnRequest() print s.isPassive Original author: Frederic Peters Date: 2007-10-05 18:28:59.741000+02:00 bindings/lang_python.py | 53 +++++++++++++++++++++++++++++++++++++++++++++++++ bindings/t.py | 7 +++++++ 2 files changed, 60 insertions(+) commit e7e6b7170c3102d0208bf8cbbe99601d5a6d8162 Author: Frederic Peters Date: Tue Apr 29 12:01:46 2008 +0000 [project @ fpeters@0d.be-20071005161337-vh1s4saoywr0u2sa] workaround since assertion must come before advice Original author: Frederic Peters Date: 2007-10-05 18:13:37.320000+02:00 bindings/t.py | 1 + 1 file changed, 1 insertion(+) commit b67dcfb9e6bd3ea329bb04875764879a2e7f9cd0 Author: Frederic Peters Date: Tue Apr 29 12:01:42 2008 +0000 [project @ fpeters@0d.be-20071005155511-13lg9tc7usfht3ud] minimalistic functional module $ python -c 'import lasso; print lasso.Samlp2AuthnRequest().dump()' Original author: Frederic Peters Date: 2007-10-05 17:55:11.508000+02:00 bindings/lang_python.py | 70 ++++++++++++++++++++++++++++++++++- bindings/lang_python_wrapper_bottom.c | 4 +- bindings/lang_python_wrapper_top.c | 4 +- bindings/t.py | 8 +++- 4 files changed, 81 insertions(+), 5 deletions(-) commit eddccffb2412dd42754cc36244ea6476d742d691 Author: Frederic Peters Date: Tue Apr 29 12:01:38 2008 +0000 [project @ fpeters@0d.be-20071005125351-543q5fahhrljdmaj] (work in progress) some infra for python wrapper Original author: Frederic Peters Date: 2007-10-05 14:53:51.026000+02:00 bindings/lang_python.py | 20 +++++++++++ bindings/lang_python_wrapper_bottom.c | 17 +++++++++ bindings/lang_python_wrapper_top.c | 66 +++++++++++++++++++++++++++++++++++ 3 files changed, 103 insertions(+) commit 02644ef15b19f60e69d33d4e28bbfdfb77fb16d1 Author: Frederic Peters Date: Tue Apr 29 12:01:34 2008 +0000 [project @ fpeters@0d.be-20071005114857-u95fr7hqt6ze2qp9] create constructor for _new functions and class methods for _new_from_dump methods Original author: Frederic Peters Date: 2007-10-05 13:48:57.345000+02:00 bindings/lang_python.py | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) commit 951991f4f8ebf309d9cb2f8499c63fd44e3869eb Author: Frederic Peters Date: Tue Apr 29 12:01:30 2008 +0000 [project @ fpeters@0d.be-20071005100459-r1mm9241ko41pcfv] python generation (classes, members & methods; missing constructors and layer using python C API) Original author: Frederic Peters Date: 2007-10-05 12:04:59.172000+02:00 bindings/lang_python.py | 130 ++++++++++++++++++++++++++++++++++++++++++++++++ bindings/t.py | 16 ++++-- 2 files changed, 142 insertions(+), 4 deletions(-) commit effa4d926726616b7719745bb633d4dfd8e4744f Author: Frederic Peters Date: Tue Apr 29 12:01:26 2008 +0000 [project @ fpeters@0d.be-20071005082424-d4y1kxyjhenlflsj] ignore get_type functions Original author: Frederic Peters Date: 2007-10-05 10:24:24.151000+02:00 bindings/t.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 236be81fe760da11e3ae7edcfa8359df5db4af4b Author: Frederic Peters Date: Tue Apr 29 12:01:22 2008 +0000 [project @ fpeters@0d.be-20071005082412-r41uf26575dubg5l] attach methods to classes Original author: Frederic Peters Date: 2007-10-05 10:24:12.840000+02:00 bindings/t.py | 51 ++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 40 insertions(+), 11 deletions(-) commit a8de95ee530816b70c9aaa12061e426c95ddd753 Author: Frederic Peters Date: Tue Apr 29 12:01:18 2008 +0000 [project @ fpeters@0d.be-20071005081049-u0v99a86515z4ay5] order class hierarchy Original author: Frederic Peters Date: 2007-10-05 10:10:49.378000+02:00 bindings/t.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) commit 6e9fdb39a6e8b86cccb408d5fe94520ed7d9d0e1 Author: Frederic Peters Date: Tue Apr 29 12:01:14 2008 +0000 [project @ fpeters@0d.be-20071005080353-01t90pe4t68sdmtp] moved binding data to a class Original author: Frederic Peters Date: 2007-10-05 10:03:53.550000+02:00 bindings/t.py | 86 +++++++++++++++++++++++++++++++++-------------------------- 1 file changed, 48 insertions(+), 38 deletions(-) commit 5e9e063307723051701ffee983efe2b6f4cce7bc Author: Frederic Peters Date: Tue Apr 29 12:01:10 2008 +0000 [project @ fpeters@0d.be-20071004213555-02snw1q22fgkw3jx] added support for functions Original author: Frederic Peters Date: 2007-10-04 23:35:55.074000+02:00 bindings/t.py | 54 +++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 49 insertions(+), 5 deletions(-) commit bf69a7dfc8268a6d0cde478cb93487a1c21ecf15 Author: Frederic Peters Date: Tue Apr 29 12:01:06 2008 +0000 [project @ fpeters@0d.be-20071004205916-5ur5t75ht9586n4j] reimplemented to be easier to concatenate lines (necessary for functions spanning multiple lines) Original author: Frederic Peters Date: 2007-10-04 22:59:16.286000+02:00 bindings/t.py | 105 +++++++++++++++++++++++----------------------------------- 1 file changed, 42 insertions(+), 63 deletions(-) commit ce4e1312d774f690793a42aad4837d6b0e2a62d4 Author: Frederic Peters Date: Tue Apr 29 12:01:02 2008 +0000 [project @ fpeters@0d.be-20071004204927-6j2np9wflrp15tt4] get struct members Original author: Frederic Peters Date: 2007-10-04 22:49:27.981000+02:00 bindings/t.py | 40 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 3 deletions(-) commit 5b1a266350c541aa9bdd3d29e029de2821eb9138 Author: Frederic Peters Date: Tue Apr 29 12:00:58 2008 +0000 [project @ fpeters@0d.be-20071004203958-xsegogi4ad0muf0a] get list of structs Original author: Frederic Peters Date: 2007-10-04 22:39:58.914000+02:00 bindings/t.py | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) commit daa5973e7a26d285548f2e75f2bca94b675a6776 Author: Frederic Peters Date: Tue Apr 29 12:00:54 2008 +0000 [project @ fpeters@0d.be-20071004203206-voc7gqczx2usx3c8] ignore private headers Original author: Frederic Peters Date: 2007-10-04 22:32:06.670000+02:00 bindings/t.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 8e4a7eb6d2e8e12360fdef93501e1a4cf8526bcb Author: Frederic Peters Date: Tue Apr 29 12:00:50 2008 +0000 [project @ fpeters@0d.be-20071004203137-j6p42c5e48qgc5fq] added support for enums Original author: Frederic Peters Date: 2007-10-04 22:31:37.240000+02:00 bindings/t.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) commit 9d9956b25bf2c4e8463de4d502dd1e103b68f017 Author: Frederic Peters Date: Tue Apr 29 12:00:40 2008 +0000 [project @ fpeters@0d.be-20071004185258-quqzvq2tgmbt8u1j] initial work, extracting constants out of source tree Original author: Frederic Peters Date: 2007-10-04 20:52:58.486000+02:00 bindings/t.py | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) commit 69dd84c682e06dc5ef99529c0fd0d48f5e635c84 Author: Frederic Peters Date: Tue Apr 29 10:45:08 2008 +0000 updated to current packaging then updated for new bindings changelog | 32 ++++++++++++++++++++++++++++++++ control | 22 ++++++++++++++++++---- copyright | 2 +- liblasso-cil.files | 7 ------- liblasso-java.files | 2 -- liblasso-java.install | 2 ++ liblasso-perl.install | 3 +++ liblasso3-dev.files | 5 ----- liblasso3-dev.install | 5 +++++ liblasso3.files | 1 - liblasso3.install | 1 + php4-lasso.examples | 0 php4-lasso.files | 2 -- php5-lasso.files | 3 --- php5-lasso.install | 3 +++ python-lasso.files | 3 --- python-lasso.install | 2 ++ rules | 22 ++++++++++------------ 18 files changed, 77 insertions(+), 40 deletions(-) commit e696b80c7aa9401bee2aa3163d1a836e367e9309 Author: Frederic Peters Date: Tue Apr 29 10:45:08 2008 +0000 updated to current packaging then updated for new bindings debian/changelog | 32 ++++++++++++++++++++++++++++++++ debian/control | 22 ++++++++++++++++++---- debian/copyright | 2 +- debian/liblasso-cil.files | 7 ------- debian/liblasso-java.files | 2 -- debian/liblasso-java.install | 2 ++ debian/liblasso-perl.install | 3 +++ debian/liblasso3-dev.files | 5 ----- debian/liblasso3-dev.install | 5 +++++ debian/liblasso3.files | 1 - debian/liblasso3.install | 1 + debian/php4-lasso.examples | 0 debian/php4-lasso.files | 2 -- debian/php5-lasso.files | 3 --- debian/php5-lasso.install | 3 +++ debian/python-lasso.files | 3 --- debian/python-lasso.install | 2 ++ debian/rules | 22 ++++++++++------------ 18 files changed, 77 insertions(+), 40 deletions(-) commit 82a55a450c296ad80976d6bb5d11a9f2535c6df7 Author: Frederic Peters Date: Mon Apr 28 11:45:20 2008 +0000 re-added function; but fixed docstrings lasso/xml/xml.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) commit a1eba927366996cb396d02c1c2b56ad03623ca27 Author: Frederic Peters Date: Mon Apr 28 11:14:08 2008 +0000 removed duplicated function lasso/xml/xml.c | 11 ----------- 1 file changed, 11 deletions(-) commit 6ebb36cbc169adffe04be065d0f959bb3bd40eaa Author: Frederic Peters Date: Sat Apr 26 15:29:25 2008 +0000 add unprefixed extension dir for php5, and fixed it for php4 configure.ac | 36 +++++++++++++----------------------- 1 file changed, 13 insertions(+), 23 deletions(-) commit cc5109ee93fa27a688d290390cfc564fa3743b83 Author: Benjamin Dauvergne Date: Thu Apr 24 09:02:34 2008 +0000 change g_return_val_if_fail(provider,... from last commit to g_return_val_if_fail(LASSO_IS_PROVIDER(provider) lasso/id-ff/provider.c | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) commit e7a598832bcfdd302a3be99a3112e355e465ae9c Author: Benjamin Dauvergne Date: Wed Apr 23 17:10:05 2008 +0000 * add bad argument handling in lasso_provider_* functions lasso/id-ff/provider.c | 18 ++++++++++++++++-- lasso/id-ff/provider.h | 1 + 2 files changed, 17 insertions(+), 2 deletions(-) commit beee8a05c9fde87dbf801d81dc7c4764fe50c03b Author: Benjamin Dauvergne Date: Wed Apr 23 16:57:43 2008 +0000 * in lasso_provider_get_key return NULL if provider is NULL lasso/id-ff/provider.c | 1 + 1 file changed, 1 insertion(+) commit d9125e735620c8cb946041d022878f66f6ff1514 Author: Benjamin Dauvergne Date: Wed Apr 23 15:00:20 2008 +0000 * change /etc -> /etc/php5/conf.d/ in the last commit configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 11e96c46bfaf9d236cd272e43f68064e9650de6d Author: Benjamin Dauvergne Date: Wed Apr 23 14:58:10 2008 +0000 * add parameters for php5: --with-php5-include-dir (default to /usr/share/php) and --with-php5-config-dir (default to /etc/php5/cond.f/) configure.ac | 41 ++++++++++++++++++++++++++--------------- 1 file changed, 26 insertions(+), 15 deletions(-) commit 742e4f36b96bf41e1bdebb4d45c6eb6c5294850d Author: Frederic Peters Date: Wed Apr 23 14:28:57 2008 +0000 that part is broken with PHP 4 only swig/Lasso-wsf-disco.i | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 137e8af17cb00a1ce6a805297db374e5ae91d645 Author: Frederic Peters Date: Wed Apr 23 14:22:06 2008 +0000 that part is broken with PHP 4 only swig/Lasso-wsf-disco.i | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit b8304263bd28ff653f502f0831b111a313938f9c Author: Benjamin Dauvergne Date: Wed Apr 23 11:56:13 2008 +0000 * search gzread in zlib1 after trying in libz (win32) * remove critical exit from java macros configure.ac | 12 +++++++----- macros/ac_check_rqrd_class.m4 | 2 +- macros/ac_prog_jar.m4 | 2 +- macros/ac_prog_java.m4 | 2 +- macros/ac_prog_java_cc.m4 | 2 +- macros/ac_prog_java_works.m4 | 6 +++--- macros/ac_prog_javac.m4 | 2 +- macros/ac_prog_javac_works.m4 | 2 +- macros/ac_prog_javadoc.m4 | 2 +- macros/ac_prog_javah.m4 | 2 +- 10 files changed, 18 insertions(+), 16 deletions(-) commit 717d4ba44f2412ec441593a033b0da0e5f494219 Author: Benjamin Dauvergne Date: Mon Apr 21 17:02:35 2008 +0000 * AttributeQuery contains multiple Attribute elements not juste one lasso/xml/saml-2.0/samlp2_attribute_query.c | 2 +- lasso/xml/saml-2.0/samlp2_attribute_query.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 36bc7c2238550653f428d6e7176a49d1546e8e45 Author: Benjamin Dauvergne Date: Mon Apr 21 15:10:03 2008 +0000 * ajout d'un package debian pour le binding php5 control | 14 ++++++++++++++ php5-lasso.files | 3 +++ 2 files changed, 17 insertions(+) commit 0de9b07e69fb1eb70bb7ac03eff9f8d54d0a2226 Author: Benjamin Dauvergne Date: Mon Apr 21 15:10:03 2008 +0000 * ajout d'un package debian pour le binding php5 debian/control | 14 ++++++++++++++ debian/php5-lasso.files | 3 +++ 2 files changed, 17 insertions(+) commit d002c77cd79d19699bb214ebe83fd6c7d076e59d Author: Benjamin Dauvergne Date: Fri Apr 18 16:54:36 2008 +0000 * add a finalizer to LassoNode class object lasso/xml/xml.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) commit 35ab92f5a8bdea2cfc65ff1597624ef9253ebe9c Author: Benjamin Dauvergne Date: Thu Apr 10 10:08:53 2008 +0000 twill has a debian package now tests/integration/README | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 205fd32c7a464ff4cb29722dcd9dc0c8041f26cd Author: Frederic Peters Date: Thu Apr 10 09:47:10 2008 +0000 added defederation tests tests/integration/saml2/test_03_defederation.py | 59 +++++++++++++++++++++++++ 1 file changed, 59 insertions(+) commit c869dcf749faf0e2e45513a1b521026215354402 Author: Frederic Peters Date: Thu Apr 10 09:39:57 2008 +0000 removed saving page tests/integration/saml2/test_02_slo.py | 1 - 1 file changed, 1 deletion(-) commit e10559a9150071c8dafd816c4e6f3e084248f5e1 Author: Damien Laniel Date: Wed Apr 9 10:21:37 2008 +0000 fixes SLO from IdP with Encrypted NameID in ID-FF lasso/id-ff/logout.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) commit e12799789f6f4ace800e32702dab7b59b5212809 Author: Frederic Peters Date: Sun Apr 6 09:42:26 2008 +0000 fallback to onetime usage if no federation is found lasso/id-ff/login.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 86b7d247ce106ec8f0153b9919f16b02513139c0 Author: Benjamin Dauvergne Date: Fri Mar 28 16:17:27 2008 +0000 add new directory in bindings/php5 to AC_OUTPUT commented lines configure.ac | 2 ++ 1 file changed, 2 insertions(+) commit 59e505c40c5707ed37510508bccde0dcd1e18181 Author: Benjamin Dauvergne Date: Fri Mar 28 16:07:54 2008 +0000 const is useless, and LassoIdWsf2UtilTestResult does not exist, breaking the bindings lasso/xml/id-wsf-2.0/dstref_modify_item.c | 2 +- lasso/xml/id-wsf-2.0/dstref_modify_item.h | 2 +- lasso/xml/id-wsf-2.0/subs_notification.h | 2 +- lasso/xml/id-wsf-2.0/subsref_query_response.h | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) commit 8adb45fdb7a06d32c59c6aa06637cce3a6b148e2 Author: Benjamin Dauvergne Date: Fri Mar 28 16:06:04 2008 +0000 const gboolean as argument is useless and it disturbs the bindings lasso/id-wsf-2.0/data_service.c | 2 +- lasso/id-wsf-2.0/data_service.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit f4d3e6e877a67ad4580e8f5e01fa98e98117e458 Author: Frederic Peters Date: Fri Mar 21 17:47:48 2008 +0000 added sso with ispassive check tests/integration/saml2/test_01_sso.py | 11 +++++++++++ 1 file changed, 11 insertions(+) commit 77a09ee94054d54fb77d04a72425892c52aa9adb Author: Frederic Peters Date: Fri Mar 21 17:32:24 2008 +0000 fixed missing rename of LASSO_TYPE_PROFILE_SERVICE to LASSO_TYPE_DATA_SERVICE lasso/id-wsf/personal_profile_service.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 4c68cbeaea7e332287da6e3b06aec5b8a68008d6 Author: Frederic Peters Date: Thu Mar 20 19:13:39 2008 +0000 fixed data service macros to refer to data service, not to profile service; and added some parameter checking in init_modify lasso/id-wsf/data_service.c | 13 +++++++++---- lasso/id-wsf/data_service.h | 16 ++++++++-------- 2 files changed, 17 insertions(+), 12 deletions(-) commit afbacadc7dee7da2970ce2895a4911d24df38003 Author: Benjamin Dauvergne Date: Tue Mar 18 17:36:19 2008 +0000 * fix typo in the last commit :) lasso/id-wsf/data_service.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 1ab5cdf7524acf12a50598c49869659a1b6c13ab Author: Benjamin Dauvergne Date: Tue Mar 18 17:31:25 2008 +0000 * id-wsd/data_service.c: (lasso_data_service_process_modify_response_msg) return an error code if return value from lasso_node_new_from_dump is NULL or invalid. lasso/id-wsf/data_service.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) commit 0eba1f41a554b8b5326f1cb8bf03d88956062f64 Author: Benjamin Dauvergne Date: Fri Mar 14 14:40:10 2008 +0000 * configure.ac: remove generation of php5/Makefile, it does nothing. add detection of pre-4.1.3 gcj versions. add bindings/python/tests/Makefile in commented AC_OUTPUT code. configure.ac | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) commit c9f7e1e74787939d6943b60e4a8b92afc4d6b19a Author: Benjamin Dauvergne Date: Wed Mar 12 13:23:34 2008 +0000 * change in the sgml documentation files. docs/reference/tmpl/login.sgml | 1 + docs/reference/tmpl/name_identifier_mapping.sgml | 2 +- docs/reference/tmpl/profile.sgml | 3 +++ docs/reference/tmpl/saml_subject.sgml | 1 + docs/reference/tmpl/samlp2_assertion_idrequest.sgml | 8 -------- 5 files changed, 6 insertions(+), 9 deletions(-) commit 6394f9ef6e1386864de18e280022d6e14626a433 Author: Benjamin Dauvergne Date: Tue Mar 11 14:06:56 2008 +0000 * fix ticket #1 and #3. lasso/saml-2.0/login.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) commit 58cc642c160f543c8076ee6916925e2effe63729 Author: Benjamin Dauvergne Date: Mon Mar 10 17:47:19 2008 +0000 * configure.ac: re-add JDK_INCLUDE substs (can be removed when we will move to the new bindings) configure.ac | 2 ++ 1 file changed, 2 insertions(+) commit 9eef58fe4c9f5ee5a1c97ba21286fb8a6f9b62bc Author: Benjamin Dauvergne Date: Mon Mar 10 17:32:19 2008 +0000 * configure.ac,macros/ac_*.m4: add new m4 macros to detect more JAVA related things like junit.jar path to put into the CLASSPATH or desactivate compilation of java bindings test. configure.ac | 48 +++++++++++--- macros/ac_check_class.m4 | 147 +++++++++++++++++++++++++++++++++++++++++ macros/ac_check_classpath.m4 | 63 ++++++++++++++++++ macros/ac_check_java_home.m4 | 62 +++++++++++++++++ macros/ac_check_junit.m4 | 69 +++++++++++++++++++ macros/ac_check_rqrd_class.m4 | 65 ++++++++++++++++++ macros/ac_java_options.m4 | 46 +++++++++++++ macros/ac_prog_jar.m4 | 52 +++++++++++++++ macros/ac_prog_java.m4 | 122 ++++++++++++++++++++++++++++++++++ macros/ac_prog_java_cc.m4 | 107 ++++++++++++++++++++++++++++++ macros/ac_prog_java_works.m4 | 137 ++++++++++++++++++++++++++++++++++++++ macros/ac_prog_javac.m4 | 84 +++++++++++++++++++++++ macros/ac_prog_javac_works.m4 | 75 +++++++++++++++++++++ macros/ac_prog_javadoc.m4 | 53 +++++++++++++++ macros/ac_prog_javah.m4 | 43 ++++++++++++ macros/ac_try_compile_java.m4 | 53 +++++++++++++++ macros/ac_try_run_javac.m4 | 54 +++++++++++++++ macros/check.m4 | 2 +- macros/dps_java_check_class.m4 | 89 +++++++++++++++++++++++++ macros/dps_libgcj_jar.m4 | 86 ++++++++++++++++++++++++ macros/dps_xtra_classpath.m4 | 71 ++++++++++++++++++++ 21 files changed, 1516 insertions(+), 12 deletions(-) commit 0b95746ac1e7e7e44afa55b11b5115f8721dc212 Author: Benjamin Dauvergne Date: Thu Mar 6 15:08:30 2008 +0000 * configure.ac: remove line for making bindings makefiles. configure.ac | 5 ----- 1 file changed, 5 deletions(-) commit 7501e4c57b1ef448a4ea1b25e4344ee94dc5709a Author: Benjamin Dauvergne Date: Wed Mar 5 17:59:53 2008 +0000 * configure.ac: fix typo, forgot 'sed'. configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 97e568d3fba975a7481c3581a2b1e08f4700c6ce Author: Benjamin Dauvergne Date: Wed Mar 5 17:11:34 2008 +0000 * configure.ac: add the same option for javac than for gcjh (for target and source java language version). configure.ac | 1 + 1 file changed, 1 insertion(+) commit 16032ecffeeee297ec5749c50f8fad2228ca16da Author: Benjamin Dauvergne Date: Wed Mar 5 17:09:48 2008 +0000 * configure.ac: change handling of java options. Try to find JAVA_HOME from the link in /usr/bin. Propose more options for java, javac and javah. Set good options for gcj (-ftarget=1.4 -fsource=1.4 mainly to be retro compatible with old VMs). configure.ac | 62 ++++++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 39 insertions(+), 23 deletions(-) commit 553f6111a03530f0c6ae7b0ce2bbecc258828bfc Author: Benjamin Dauvergne Date: Wed Mar 5 17:08:18 2008 +0000 * login.c: (lasso_login_saml20_validate_request) fix typo. lasso/saml-2.0/login.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 30abbad1843fc9774568ed799292c79ca10b8503 Author: Benjamin Dauvergne Date: Tue Mar 4 13:10:04 2008 +0000 * lasso/saml-2.0/login.c: (lasso_login_validate_request) If consent is not obtained set status code at AUTHN_FAILED (no other status code seems ok). lasso/saml-2.0/login.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit 000f21295a0a3ea39309a34d926497c47dda758e Author: Benjamin Dauvergne Date: Tue Mar 4 11:41:19 2008 +0000 * lasso/saml-2.0/login.c: lasso_login_saml20_validate_request should define response->status_code no matter what happens, especially when consent is not obtained (lasso_login_saml20_process_federation return an error code in this case but it's a normal event in the SSO workflow so status code is 'Success'). If not buildArtifactMsg fails when looking for the response status code. lasso/saml-2.0/login.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) commit 4f18e677896a8485a7c8cd7d66ed8e6a75566f34 Author: Benjamin Dauvergne Date: Mon Mar 3 17:59:03 2008 +0000 * lasso_name_id_management_process_requet: verify that request_msg is not null. lasso/saml-2.0/name_id_management.c | 2 ++ 1 file changed, 2 insertions(+) commit eca6a8814ecb76ca6d17cececac1dbd3cd350fe4 Author: Frederic Peters Date: Mon Mar 3 16:26:54 2008 +0000 only get session when remote provider id is not provided lasso/saml-2.0/name_id_management.c | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) commit 1d182718f43d5e085a7e40a323273a86f234e6c9 Author: Benjamin Dauvergne Date: Fri Feb 29 17:19:45 2008 +0000 * fix syntax error introduced in r3494 :) Bad benjamin commit before compiling. lasso/saml-2.0/name_id_management.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 537db7e9e2bf300e3336d067f92b29e35eb52495 Author: Benjamin Dauvergne Date: Fri Feb 29 17:15:08 2008 +0000 * id-ff/logout.c: (lasso_logout_init_request) free remote_provider_id before setting it. free profile->request before setting it if LASSO_IS_NODE(request), not just LASSO_IS_LIB_LOGOUT_REQUEST(request). Fix memory leaks. lasso/id-ff/logout.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 3823298a1a2163b91720b2a3b15b84b363eec1d4 Author: Benjamin Dauvergne Date: Fri Feb 29 17:13:06 2008 +0000 * name_id_management.c: (lasso_name_id_management_init_request)get the first providerId when remote_provider_id is NULL, free old remote_provider_id string when non null and unref old name_identifier when non null. Fix memory leaks and lacking usual feature of init_request functions. lasso/saml-2.0/name_id_management.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) commit 709ec9867febbcbd233831707eb40d89be1242ec Author: Damien Laniel Date: Fri Feb 29 14:17:46 2008 +0000 fixed the prototype of get_type functions to avoid warnings on windows lasso/extract_types.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit c9ae4db6ccabc3cc53baf742bec2ae9a5a344390 Author: Damien Laniel Date: Thu Feb 28 18:01:43 2008 +0000 fixed php version checks configure.ac | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 10d55df6265a7e3f61f4e92a8bf27db4477858bb Author: Frederic Peters Date: Tue Feb 26 16:37:15 2008 +0000 misc text node attributes are not private lasso/xml/misc_text_node.h | 1 - 1 file changed, 1 deletion(-) commit 3eca7c3fe82774ef9787aa2d6c4f4afa036d7925 Author: Frederic Peters Date: Mon Feb 25 22:20:53 2008 +0000 initialize twill before servers, and pass over crashed servers on cleanup tests/integration/saml2/__init__.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) commit 24c7d38abce697d33d2e9b4b7ed1f855875728e1 Author: Frederic Peters Date: Mon Feb 25 13:01:34 2008 +0000 keep NameIdPolicy/Format in login->nameIDPolicy, as in ID-FF 1.2; use it not to look for federations when transient is requested. lasso/saml-2.0/login.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) commit 1b76f08b7a34b30ca6fbf25a08738296a5584175 Author: Frederic Peters Date: Mon Feb 25 10:42:01 2008 +0000 removed debugging visit to idp tests/integration/saml2/test_01_sso.py | 1 - 1 file changed, 1 deletion(-) commit c1fd8b99431a3ccc203576c358e750eb5d15774a Author: Frederic Peters Date: Mon Feb 25 10:41:48 2008 +0000 removed debugging saving tests/integration/saml2/test_01_sso.py | 2 -- 1 file changed, 2 deletions(-) commit 4f01ae30cfc6e5b816479d08d8fe39c651316bcf Author: Frederic Peters Date: Mon Feb 25 09:55:36 2008 +0000 added integration tests to repository tests/integration/README | 15 +++++ tests/integration/private-key.pem | 27 +++++++++ tests/integration/public-key.pem | 9 +++ tests/integration/saml2/__init__.py | 50 ++++++++++++++++ tests/integration/saml2/config.py.example | 10 ++++ tests/integration/saml2/test_00_config.py | 54 ++++++++++++++++++ tests/integration/saml2/test_01_sso.py | 45 +++++++++++++++ tests/integration/saml2/test_02_slo.py | 95 +++++++++++++++++++++++++++++++ 8 files changed, 305 insertions(+) commit ac0dcdda5e470af346a8a2c4a9e8097ea03a4c9a Author: Benjamin Dauvergne Date: Thu Feb 21 10:21:34 2008 +0000 * reflect in the documentation of lasso_server_new the fact that metadata is optional lasso/id-ff/server.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit bb5b171a66f07d68fb8746fbb501059e3a6cc959 Author: Benjamin Dauvergne Date: Wed Feb 20 14:01:57 2008 +0000 * Add lasso_ds_* API to the general build of lasso (was enable only with id-wsf before) lasso/extract_symbols.py | 2 +- lasso/extract_types.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 3c0024e7ee7e7df75549ee8010cc584c80844a78 Author: Benjamin Dauvergne Date: Mon Feb 18 17:29:50 2008 +0000 * Suppression de #define doublons. * Ajout d'un commentaire déclaratif /* of LassoXXX */ à une déclaration d'un membre de structure de type GList*. lasso/xml/lib_idp_entries.h | 2 +- lasso/xml/strings.h | 7 ------- 2 files changed, 1 insertion(+), 8 deletions(-) commit 4800b27dc8f773ab39985059d8031033279e33b0 Author: Frederic Peters Date: Mon Feb 18 13:11:33 2008 +0000 proper casting lasso/id-ff/login.c | 6 ++++-- lasso/saml-2.0/login.c | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) commit 587c5e8390ff3308c6b5ab5e4152db83335d3fd8 Author: Frederic Peters Date: Mon Feb 18 13:03:05 2008 +0000 fixed assertion refcounting in lasso_login_build_assertion, changed lasso_session_add_assertion to refcount the assertion it gets lasso/id-ff/login.c | 11 +++++------ lasso/id-ff/session.c | 3 ++- lasso/saml-2.0/login.c | 7 ++----- 3 files changed, 9 insertions(+), 12 deletions(-) commit b31ad5a2b0ac1afac21b0b9cb0b954d2cc145d66 Author: Frederic Peters Date: Sun Feb 17 15:41:43 2008 +0000 added missing Saml2AttributeValue.java to distributed files java/Makefile.am | 1 + 1 file changed, 1 insertion(+) commit a113cb41420b932f1f94e2cbc28bb5128e669b95 Author: Frederic Peters Date: Sun Feb 17 13:50:49 2008 +0000 removed obsolete file from Makefile.am java/Makefile.am | 1 - 1 file changed, 1 deletion(-) commit 5b0410c247e2faeb97026c472d0df115d8fa1138 Author: Frederic Peters Date: Sun Feb 17 13:50:08 2008 +0000 fixed gcj version regex configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 9755fdd10810c6c8df1383bb4dc6ed1522a279d6 Author: Frederic Peters Date: Fri Feb 1 11:20:37 2008 +0000 register all known prefixes to xpath context lasso/id-wsf-2.0/data_service.c | 27 +++++++++++++++++++++++---- lasso/id-wsf/data_service.c | 31 +++++++++++++++++++++++++++---- 2 files changed, 50 insertions(+), 8 deletions(-) commit 6d2d5b504882761b8b07e33df77a2930644fb3ff Author: Frederic Peters Date: Wed Jan 23 12:37:12 2008 +0000 warns when signing saml2 elements would fail because private key is missing lasso/xml/saml-2.0/saml2_assertion.c | 9 +++++++-- lasso/xml/saml-2.0/samlp2_request_abstract.c | 9 +++++++-- lasso/xml/saml-2.0/samlp2_status_response.c | 9 +++++++-- 3 files changed, 21 insertions(+), 6 deletions(-) commit 6b259af1aa455aa1edb5b87d1a85d379ea42a9b7 Author: Frederic Peters Date: Wed Jan 23 12:20:08 2008 +0000 rewording (hopefully without adding bug) lasso/saml-2.0/login.c | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) commit 80199a1720885eff399edc4e49fceb87f47abc10 Author: Frederic Peters Date: Wed Jan 23 12:19:28 2008 +0000 removed unnecessary double call to export_to_soap lasso/saml-2.0/login.c | 1 - 1 file changed, 1 deletion(-) commit 0419af4f0d0330671073791f0b0f95aa67b1f3f9 Author: Frederic Peters Date: Wed Jan 23 12:17:46 2008 +0000 proper casts of xmlChar* lasso/id-ff/provider.c | 4 ++-- lasso/saml-2.0/provider.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) commit a497d0ea50defbd14567b35cbfa52fb2fdb8082d Author: Damien Laniel Date: Thu Jan 17 16:07:58 2008 +0000 updated download links for Windows installers website/web/download/index.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit adf92755393b70e9c5d07471d8c185b8ce440114 Author: Damien Laniel Date: Tue Jan 15 16:43:06 2008 +0000 each value of an multi-valued-attribute go in a different AttributeValue node python/tests/binding_tests.py | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) commit 462f3f14bab91bb2aefdd52b860e087b291e7f0b Author: Frederic Peters Date: Tue Jan 15 13:04:52 2008 +0000 removed broken php rename swig/saml-2.0/saml2_attribute_value.i | 3 --- 1 file changed, 3 deletions(-) commit 2595f769806fcf3f97a912a78038d483483e2b33 Author: Frederic Peters Date: Tue Jan 15 12:46:24 2008 +0000 removed unused variable lasso/id-ff/login.c | 1 - 1 file changed, 1 deletion(-) commit cc926805f5e9b7542d491be9306874bfb4e0abd4 Author: Damien Laniel Date: Mon Jan 14 18:04:03 2008 +0000 loop on attributeStatement and childs lists lasso/saml-2.0/login.c | 45 +++++++++++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 16 deletions(-) commit 1d31240992f1e2c556e5231ad32885257036a8cd Author: Damien Laniel Date: Mon Jan 14 17:13:07 2008 +0000 fixed mixing epr assertion attribute with other custom attributes lasso/saml-2.0/login.c | 14 ++++++++------ lasso/xml/strings.h | 2 +- swig/Lasso-saml2.i | 12 ++++++++++++ 3 files changed, 21 insertions(+), 7 deletions(-) commit 53a2b18539d70a49a94b36616b16cf05a06d273c Author: Damien Laniel Date: Mon Jan 14 11:20:16 2008 +0000 added swig binding for Saml2AttributeValue + tests python/tests/binding_tests.py | 67 +++++++++++++++++++++++++++++++++++ swig/saml-2.0/Makefile.am | 1 + swig/saml-2.0/inheritance.h | 1 + swig/saml-2.0/main.h | 2 ++ swig/saml-2.0/saml2_attribute.i | 15 ++++++++ swig/saml-2.0/saml2_attribute_value.i | 67 +++++++++++++++++++++++++++++++++++ 6 files changed, 153 insertions(+) commit ee439f13f2c0ef127f7d27922b6d21952bf92070 Author: Frederic Peters Date: Thu Dec 27 17:01:20 2007 +0000 added missing underscore in lasso_samlp2_assertion_idrequest_new swig/saml-2.0/samlp2_assertion_id_request.i | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit b0355c635389acf6198294333092d038e7244156 Author: Frederic Peters Date: Thu Dec 27 16:59:20 2007 +0000 renamed samlp2_assertion_idrequest.i to /samlp2_assertion_id_request.i swig/saml-2.0/Makefile.am | 2 +- swig/saml-2.0/main.h | 6 +++--- .../{samlp2_assertion_idrequest.i => samlp2_assertion_id_request.i} | 0 3 files changed, 4 insertions(+), 4 deletions(-) commit db1df76fb2cf3526ffc84a8b954f1c6fcc924ed2 Author: Frederic Peters Date: Thu Dec 27 16:14:21 2007 +0000 added preliminary support for the Assertion Query and Request profile. lasso/saml-2.0/Makefile.am | 2 + lasso/saml-2.0/assertion_query.c | 616 +++++++++++++++++++++++++++++++++++++++ lasso/saml-2.0/assertion_query.h | 111 +++++++ 3 files changed, 729 insertions(+) commit 8ef81c06bb852dce0bd6679b1114fada231fd2cc Author: Frederic Peters Date: Thu Dec 27 15:18:29 2007 +0000 renamed files according to their contents lasso/xml/saml-2.0/Makefile.am | 4 ++-- .../{samlp2_assertion_idrequest.c => samlp2_assertion_id_request.c} | 0 .../{samlp2_assertion_idrequest.h => samlp2_assertion_id_request.h} | 0 3 files changed, 2 insertions(+), 2 deletions(-) commit 35333800036a052d3872ddbccfd0321c1813253b Author: Frederic Peters Date: Thu Dec 27 15:17:37 2007 +0000 renamed samlp2:AssertionIDRequest with an underscore between id and request. lasso/xml/saml-2.0/samlp2_assertion_idrequest.c | 10 ++++---- lasso/xml/saml-2.0/samlp2_assertion_idrequest.h | 32 ++++++++++++------------- 2 files changed, 21 insertions(+), 21 deletions(-) commit d3eaf8c72a02ab12df429f795b9a642459f725ab Author: Damien Laniel Date: Thu Dec 6 11:25:41 2007 +0000 handle name identifier formats : email and unspecified lasso/saml-2.0/login.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) commit 8a846c1abefe89f6a7a74b5c8a511528056b766d Author: Damien Laniel Date: Thu Dec 6 11:24:28 2007 +0000 added all missing name identifier formats lasso/xml/strings.h | 8 ++++++++ swig/Lasso-saml2.i | 18 ++++++++++++++++++ 2 files changed, 26 insertions(+) commit 4b8479820a72d32277024e2be198e57cf3c680ef Author: Damien Laniel Date: Wed Dec 5 13:50:41 2007 +0000 break ABI less than before lasso/xml/saml_subject.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 38acc2883bc4ccecd4887e523ca69c2be178d967 Author: Damien Laniel Date: Wed Dec 5 10:48:49 2007 +0000 added support for encrypting name identifiers with id-ff 1.2 lasso/id-ff/login.c | 65 +++++++++++++++++++++++++++++++++++++++++++---- lasso/id-ff/provider.c | 9 +++++-- lasso/saml-2.0/provider.c | 10 +++++--- lasso/xml/saml_subject.c | 4 +++ lasso/xml/saml_subject.h | 2 ++ 5 files changed, 80 insertions(+), 10 deletions(-) commit caa91cb653a1bdb0b815d6f5dc22b537ff25539f Author: Frederic Peters Date: Mon Dec 3 18:36:43 2007 +0000 store ProtocolProfile even when it is Redirect lasso/id-ff/login.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) commit 816e432be56dd0bca7f7f7b704be5cf250515036 Author: Frederic Peters Date: Mon Dec 3 15:27:31 2007 +0000 support for HTTP-Redirect binding being explicitely specified lasso/saml-2.0/login.c | 2 ++ 1 file changed, 2 insertions(+) commit 0a91e76505d6fe41b376ca0856f2b2ce1cb6d957 Author: Frederic Peters Date: Tue Nov 27 23:17:21 2007 +0000 added support for sending SAMLv2 AuthnResponse over HTTP-Redirect (which shouldn't be used because the assertion within makes for a very big message) lasso/id-ff/login.h | 1 + lasso/saml-2.0/login.c | 29 ++++++++++++++++++++++++----- lasso/saml-2.0/provider.c | 4 ++-- swig/Lasso.i | 2 ++ 4 files changed, 29 insertions(+), 7 deletions(-) commit 7defe54955e433df4df523e941aceb2cb4e2b328 Author: Frederic Peters Date: Tue Nov 27 22:57:27 2007 +0000 include serverprivate.h since lasso_server_get_first_providerID is used. lasso/id-ff/defederation.c | 1 + 1 file changed, 1 insertion(+) commit b1fe5d552f140a6cf22ddf717caf780809f7d67b Author: Frederic Peters Date: Thu Nov 22 15:40:42 2007 +0000 format list in docstring with paragraphs, as this form is known by the new binding generator lasso/id-ff/logout.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) commit af040786baa8b337e9a88fcc5556c03486cdea4c Author: Frederic Peters Date: Thu Nov 22 14:47:12 2007 +0000 fixed parameter name that differed between docstring and function lasso/id-ff/provider.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit cc117bdc4967b79a30daf5b2218a79a7a3915451 Author: Frederic Peters Date: Thu Nov 22 14:46:42 2007 +0000 fixed parameter names that different between header and source file lasso/id-ff/name_identifier_mapping.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit f4475991cd11ef35c9d377dba8efea00499c5c7d Author: Frederic Peters Date: Thu Nov 22 14:46:15 2007 +0000 fixed comments pointing to the wrong function lasso/id-ff/name_identifier_mapping.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit bc56d07345b827b25a7a83dced847ac1884a6b23 Author: Frederic Peters Date: Thu Nov 22 12:42:47 2007 +0000 removed direct usage of g_object_unref from lasso_*_destroy methods lasso/id-ff/defederation.c | 2 +- lasso/id-ff/logout.c | 2 +- lasso/id-wsf-2.0/discovery.c | 2 +- lasso/id-wsf/authentication.c | 2 +- lasso/id-wsf/discovery.c | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) commit 20f61fd65392f7f2a464ca796e1def5697c5916d Author: Frederic Peters Date: Thu Nov 22 12:30:02 2007 +0000 formatting fix in docstring lasso/id-ff/profile.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit dc93184bb4bb6840d8fc51556e338c9a689963fb Author: Frederic Peters Date: Thu Nov 22 12:29:46 2007 +0000 don't shout a critical error when there is no session and logout get_next_providerId is called. lasso/id-ff/logout.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit 0438ae1ccd80da8f53f1b75a22bd05aaa426b8ce Author: Frederic Peters Date: Tue Nov 13 19:52:49 2007 +0000 added sample identity dump tests/data/Makefile.am | 2 ++ tests/data/sample-identity-dump-1.xml | 12 ++++++++++++ 2 files changed, 14 insertions(+) commit b8cbac71a2fbee101992eb7ab4f9cddfacd1ffd8 Author: Frederic Peters Date: Tue Nov 13 19:04:58 2007 +0000 fixed wrong type for SamlpRequest->RespondWith (list of strings, was declared as list of nodes) lasso/xml/samlp_request_abstract.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 93622b42e12495e7b2af596a083d80438c22f9cc Author: Damien Laniel Date: Tue Nov 13 16:13:39 2007 +0000 removed the * from the GList item type as other GList items are commented with no * lasso/xml/samlp_response.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit a57dc25f8519408668cacf252b4d40bba565e8b2 Author: Damien Laniel Date: Tue Nov 13 16:12:25 2007 +0000 added item types for GHashTable lasso/id-ff/identity.h | 2 +- lasso/id-ff/server.h | 5 +++-- lasso/id-ff/session.h | 3 ++- 3 files changed, 6 insertions(+), 4 deletions(-) commit d172b2a20a32c0f35bb32683008655048b9f6371 Author: Damien Laniel Date: Mon Nov 12 10:49:18 2007 +0000 allow a NULL first parameter in init_notification lasso/id-ff/defederation.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) commit 6affdea01ec12c95d8ffc6e4ab6ce25c66534eca Author: Frederic Peters Date: Sun Nov 11 20:11:54 2007 +0000 fixed copyright comment header php/tests/binding_tests.php | 2 +- php/tests/perfs.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 61c14209e75903cac80fe8b0a0130e694ac394e4 Author: Damien Laniel Date: Tue Nov 6 11:09:08 2007 +0000 added OrganisationName in the metadatas of the first test tests/data/sp1-la/metadata.xml | 4 ++++ 1 file changed, 4 insertions(+) commit 58dac3b05024318602c0fe6a915c421d7c341c5f Author: Damien Laniel Date: Mon Nov 5 10:55:59 2007 +0000 removed a useless tab python/tests/idwsf1_tests.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit c6b02e65a8c39f89ebcbd344e2ec3258de78f83e Author: Frederic Peters Date: Sat Nov 3 21:23:50 2007 +0000 annotate GList* of xmlNode* lasso/xml/dst_data.h | 2 +- lasso/xml/dst_modify.h | 2 +- lasso/xml/dst_modify_response.h | 2 +- lasso/xml/dst_new_data.h | 2 +- lasso/xml/dst_query.h | 2 +- lasso/xml/dst_query_response.h | 2 +- lasso/xml/id-wsf-2.0/dstref_app_data.h | 2 +- lasso/xml/id-wsf-2.0/subsref_app_data.h | 2 +- lasso/xml/lib_authn_request.h | 2 +- lasso/xml/lib_authn_request_envelope.h | 2 +- lasso/xml/lib_authn_response.h | 2 +- lasso/xml/lib_authn_response_envelope.h | 2 +- lasso/xml/lib_federation_termination_notification.h | 2 +- lasso/xml/lib_logout_request.h | 2 +- lasso/xml/lib_name_identifier_mapping_request.h | 2 +- lasso/xml/lib_name_identifier_mapping_response.h | 2 +- lasso/xml/lib_register_name_identifier_request.h | 2 +- lasso/xml/lib_status_response.h | 2 +- lasso/xml/saml-2.0/saml2_encrypted_element.h | 2 +- 19 files changed, 19 insertions(+), 19 deletions(-) commit 76794d2bd094298e214324944ff092cc20991c5d Author: Frederic Peters Date: Sat Nov 3 21:23:27 2007 +0000 changed GList* of xmlNode* annotation, to include the * tools/generate_idwsf2_classes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 13f1de9b1017d9856095b6d55e37672b4663ee5f Author: Frederic Peters Date: Tue Oct 30 18:15:41 2007 +0000 updated annotations to use '/* of strings */' instead of '/* of char* */' as it is more readable lasso/xml/lib_request_authn_context.h | 4 ++-- lasso/xml/samlp_request_abstract.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) commit 24796357937fa59eb9bd5613da12abfe66800e9d Author: Frederic Peters Date: Tue Oct 30 18:09:43 2007 +0000 added annotation about GList items type lasso/xml/lib_request_authn_context.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit ea872ad761edd564b11a43ff6182465eae3c987e Author: Frederic Peters Date: Fri Oct 19 08:54:28 2007 +0000 error checking when processing artifact response. lasso/saml-2.0/profile.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) commit 007c08916217b5b706598e1060fe5c8e8454aefe Author: Damien Laniel Date: Thu Oct 11 07:28:31 2007 +0000 fixed modifyng root node lasso/id-wsf/data_service.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) commit 0a611ce8af9b9a05f2821ab8f56ee4731bbd1572 Author: Damien Laniel Date: Thu Oct 11 07:27:50 2007 +0000 added an idwsf1 test python/tests/idwsf1_tests.py | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) commit 30ab64d3951ee4493dbec4342f1c7a1751ebbd00 Author: Damien Laniel Date: Thu Oct 11 07:25:37 2007 +0000 fixed a syntax error swig/Lasso-wsf2.i | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit faad38f9e990ec0988dc4a1ff89aa3c2dfbc7ad9 Author: Damien Laniel Date: Wed Oct 10 20:45:25 2007 +0000 fixed memory management swig/Lasso-wsf.i | 8 ++++---- swig/Lasso-wsf2.i | 4 ++-- swig/Lasso.i | 1 + 3 files changed, 7 insertions(+), 6 deletions(-) commit 2f97745d6fe22a985fb1d010085b73f7882cb49c Author: Damien Laniel Date: Wed Oct 10 16:05:32 2007 +0000 fixed a memory error swig/Lasso.i | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit d0738a911f5377ba9ee757ce2d2da12e5a21bd39 Author: Damien Laniel Date: Wed Oct 10 09:38:35 2007 +0000 fixed error code python/tests/idwsf2_tests.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit fab96ad726f0f75ec58bdc3202660f89a3c156a9 Author: Damien Laniel Date: Wed Oct 10 09:37:42 2007 +0000 added missing error codes in swig bindings swig/Lasso.i | 4 ++++ 1 file changed, 4 insertions(+) commit 779d2e0251eaa8c18a61d30f01af3ecea0932e18 Author: Damien Laniel Date: Wed Oct 10 09:31:03 2007 +0000 run idwsf tests only if lasso has idwsf support python/tests/tests.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) commit 144f9bed565c2a92842e78c0c0514b820e65321b Author: Damien Laniel Date: Wed Oct 10 09:20:43 2007 +0000 fix error code python/tests/idwsf2_tests.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 68f6b2356c7be7d88e479107d8e8560b563e0c51 Author: Damien Laniel Date: Wed Oct 10 09:17:30 2007 +0000 removed an usused variable lasso/id-wsf/data_service.c | 1 - 1 file changed, 1 deletion(-) commit be1db04eda275f417f3a76290598032e8b9c47eb Author: Frederic Peters Date: Thu Oct 4 21:31:19 2007 +0000 cosmetic issue, set parameter name in function declaration lasso/xml/saml_name_identifier.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit e9be9c80c00d5dd160f26910d2a306dfa4151d21 Author: Damien Laniel Date: Thu Oct 4 16:17:35 2007 +0000 changed the way status code is handled to make code simpler lasso/id-wsf-2.0/data_service.c | 36 +++++++++++++++--------------------- 1 file changed, 15 insertions(+), 21 deletions(-) commit 6d7495d6ae05697b030cfbee541e685b06999434 Author: Frederic Peters Date: Thu Oct 4 11:02:54 2007 +0000 added lasso_data_service_get_resource_offering method to get LassoDiscoResourceOffering of a DataService lasso/id-wsf/data_service.c | 14 ++++++++++++++ lasso/id-wsf/data_service.h | 3 +++ swig/Lasso-wsf.i | 4 ++++ 3 files changed, 21 insertions(+) commit 4775254fc889261ef1decad496997336a04efd41 Author: Frederic Peters Date: Wed Oct 3 19:13:03 2007 +0000 returns SOAP fault with approriate value when need_redirect_user is called inbetween dataservice modify stuff. lasso/id-wsf/data_service.c | 7 +++++++ 1 file changed, 7 insertions(+) commit 9ef91300b973c5b16f70d35b0187329d75b4d57f Author: Frederic Peters Date: Fri Sep 21 17:02:17 2007 +0000 indentation fixes lasso/errors.c | 4 +-- lasso/id-wsf/data_service.c | 8 ++--- lasso/xml/id-wsf-2.0/dstref_modify.c | 44 +++++++++++++-------------- lasso/xml/id-wsf-2.0/dstref_modify_response.c | 44 +++++++++++++-------------- lasso/xml/id-wsf-2.0/dstref_query.c | 44 +++++++++++++-------------- lasso/xml/id-wsf-2.0/dstref_query_response.c | 44 +++++++++++++-------------- 6 files changed, 94 insertions(+), 94 deletions(-) commit 951e05e46ee599bae9c9a9ed211af9810c70810a Author: Frederic Peters Date: Fri Sep 21 17:01:10 2007 +0000 fixed indentation in generation script tools/generate_idwsf2_classes.py | 44 ++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 22 deletions(-) commit 4399d993fd9a71a00c77d13caeb6b82774dd3c90 Author: Damien Laniel Date: Fri Sep 21 16:56:07 2007 +0000 fixed tabs lasso/id-wsf/data_service.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit fc2718c233877a3cbccf867987f1be97f41645e0 Author: Damien Laniel Date: Fri Sep 21 16:49:59 2007 +0000 removed whitespaces python/tests/idwsf1_tests.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 10bffca311b64c654ddcc682063f1527b6f6df14 Author: Damien Laniel Date: Fri Sep 21 16:41:26 2007 +0000 added checks on soap messages type python/tests/idwsf1_tests.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) commit ea85ed6cfca60d711d3bb5655e1599dda30927f9 Author: Damien Laniel Date: Fri Sep 21 16:37:18 2007 +0000 fixed id-wsf 1 data service modify lasso/id-wsf/data_service.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) commit 7d3f2e99f5bd3575d830048f180d877f30841d5b Author: Damien Laniel Date: Fri Sep 21 16:36:51 2007 +0000 split the discovery query test and added data service query and data service modify tests python/tests/idwsf1_tests.py | 78 ++++++++++++++++++++++++++++++++++++-------- 1 file changed, 65 insertions(+), 13 deletions(-) commit 2be0a784baabfc70bd1eed54a79e32b3b3cd4610 Author: Damien Laniel Date: Fri Sep 21 16:10:02 2007 +0000 fixed service_type in lasso_data_service_process_modify_msg lasso/id-wsf/data_service.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) commit 34c2bbd70b2dc58b1282c894d826478b0666da6e Author: Damien Laniel Date: Fri Sep 21 15:13:25 2007 +0000 fixed service_type in lasso_data_service_process_modify_msg lasso/id-wsf/data_service.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) commit 232294bbaf31b3f3e59d10fe4043e1f9a122c303 Author: Damien Laniel Date: Fri Sep 21 15:12:18 2007 +0000 some error checks and some coding style lasso/id-wsf-2.0/data_service.c | 4 ++-- lasso/id-wsf/data_service.c | 40 +++++++++++++++++++++++++--------------- lasso/xml/dst_modify.c | 17 ++++++++++------- lasso/xml/dst_query.c | 12 ++++++++---- 4 files changed, 45 insertions(+), 28 deletions(-) commit 186435e965963566b52008032397e0e1f92cf4ab Author: Frederic Peters Date: Thu Sep 20 17:32:52 2007 +0000 added missing session accessor swig/Lasso-wsf.i | 3 +++ 1 file changed, 3 insertions(+) commit 338925ef0c5c6d82d05a954a636ef8da375c9abd Author: Damien Laniel Date: Thu Sep 20 16:22:31 2007 +0000 reordered methods so it's easier to read lasso/id-wsf/data_service.c | 313 ++++++++++++++++++++++---------------------- swig/Lasso-wsf.i | 4 +- 2 files changed, 157 insertions(+), 160 deletions(-) commit 168358ef838007cc22566d55c98892451c8e5010 Author: Damien Laniel Date: Thu Sep 20 16:15:55 2007 +0000 fixed data_service_init_modify method lasso/id-wsf/data_service.c | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) commit 737d56cd918ab546e74e73ce147ea773c0be7801 Author: Damien Laniel Date: Thu Sep 20 16:00:38 2007 +0000 reordered methods so it's easier to read swig/Lasso-wsf.i | 54 +++++++++++++++++++++++++++--------------------------- 1 file changed, 27 insertions(+), 27 deletions(-) commit 5b12a0abd145a7550fd9bd8dc9ca3cb10a1dc68f Author: Damien Laniel Date: Thu Sep 20 15:54:46 2007 +0000 fixed personal profile constructor in bindings swig/Lasso-wsf.i | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit b681870d874d02ef99a294c3b2ed63355bc5575d Author: Frederic Peters Date: Thu Sep 20 09:59:24 2007 +0000 added knowledge about automake-1.10 autogen.sh | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) commit be6b0cba2e04688e352f70c55531c2918a5cec55 Author: Damien Laniel Date: Wed Sep 19 09:30:01 2007 +0000 added a unit test for id-wsf 1 python/tests/idwsf1_tests.py | 166 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 166 insertions(+) commit f70eab2459092ebde22c9209a01d47d384e34344 Author: Damien Laniel Date: Tue Sep 18 17:54:01 2007 +0000 check if (Encrypted)ResourceID is null lasso/id-wsf/data_service.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) commit 928a079a1665ccdf4be6facbf981a3134a54df49 Author: Damien Laniel Date: Tue Sep 18 17:08:11 2007 +0000 fixed setting of resource offering datas into a data service lasso/id-wsf/data_service.c | 20 ++++++++++++-------- lasso/id-wsf/discovery.c | 17 +++++++---------- lasso/id-wsf/personal_profile_service.c | 20 ++++++++++++++++++-- lasso/id-wsf/personal_profile_service.h | 6 ++++-- 4 files changed, 41 insertions(+), 22 deletions(-) commit 7c237005a8289738db7fee8d707d5c3be53e291e Author: Damien Laniel Date: Tue Sep 18 16:08:24 2007 +0000 check soap enveloppe to prevent segfaults lasso/id-wsf/wsf_profile.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) commit 1bb2469952df1456ab7d3e6cc3bd90104ed9e6b7 Author: Damien Laniel Date: Tue Sep 18 13:05:23 2007 +0000 removed useless line python/tests/profiles_tests.py | 1 - 1 file changed, 1 deletion(-) commit d8292dd308684a8c520b544beb7ca8de1c439b02 Author: Damien Laniel Date: Tue Sep 18 12:55:02 2007 +0000 lasso_discovery_add_resource_offering doesn't exist, remove it completely from the binding this time swig/Lasso-wsf.i | 5 ----- 1 file changed, 5 deletions(-) commit f5b1a1ebc3e27897110eb53429cc1e5b3b740a8a Author: Damien Laniel Date: Tue Sep 18 10:06:45 2007 +0000 added missing method swig/Lasso-wsf.i | 4 ++++ 1 file changed, 4 insertions(+) commit a7c3eed730a42ea055b3a05fa94e07ab0c50d9f1 Author: Frederic Peters Date: Wed Sep 12 15:33:35 2007 +0000 adds support for text as answer to dst queries (instead of forcing answers to be full nodes) lasso/id-wsf-2.0/data_service.c | 30 +++++++++++++++++++----------- lasso/id-wsf/data_service.c | 19 +++++++++++++++---- 2 files changed, 34 insertions(+), 15 deletions(-) commit d35f0c98674ca1cddb1e9b7231ef4787fe5fd9e4 Author: Damien Laniel Date: Tue Aug 28 14:50:08 2007 +0000 fixed dll files path for installer win32/nsis/jlasso-lite.nsi.in | 2 +- win32/nsis/lasso-full.nsi.in | 1 - win32/nsis/lasso-lite.nsi.in | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) commit d7eee69128c6bef1a4f136020ef4a404079ddcde Author: Damien Laniel Date: Tue Aug 28 13:33:26 2007 +0000 set svn property to use Windows-style line endings for Windows files win32/msvc/java/java.dsp | 216 ++-- win32/msvc/lasso.dsp.in | 2430 +++++++++++++++++++++--------------------- win32/msvc/lasso.dsw | 148 +-- win32/msvc/php/php.dsp | 220 ++-- win32/msvc/python/python.dsp | 212 ++-- 5 files changed, 1613 insertions(+), 1613 deletions(-) commit 58020927b1756cfc3e4718330eaf9523d0d53717 Author: Damien Laniel Date: Tue Aug 28 12:57:18 2007 +0000 restored windows-style line endings in visual studio configuration files so they can be loaded win32/msvc/java/java.dsp | 7 ++++--- win32/msvc/php/php.dsp | 1 - win32/msvc/python/python.dsp | 1 - 3 files changed, 4 insertions(+), 5 deletions(-) commit a82a31db49858d0a5fd71e0d93ada4040ccfec8b Author: Damien Laniel Date: Tue Aug 28 12:56:07 2007 +0000 updated visual studio main configuration file for new lasso version win32/msvc/lasso.dsp.in | 386 +++++++++++++++++++++++++++++++++--------------- 1 file changed, 267 insertions(+), 119 deletions(-) commit ebf2b0c6670c69eac8ddccdebd7647c2ac444e1d Author: Damien Laniel Date: Tue Aug 28 12:29:22 2007 +0000 fixed missing character for macro win32/nsis/jlasso-lite.nsi.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 79bed84e27e6f8ee4b465dc770a4246b025ce4c7 Author: Damien Laniel Date: Tue Aug 28 10:44:49 2007 +0000 updated links to version 2.1.1 for windows website/web/download/index.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 9ecb375c751277d538ec397888033b1020e33079 Author: Frederic Peters Date: Mon Aug 27 14:44:10 2007 +0000 RPMs for 2.1.1 are now available website/web/download/index.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) commit 1cb4663cbaec549d725196f1d6cc1129b8151933 Author: Frederic Peters Date: Tue Aug 21 12:06:43 2007 +0000 updated website with 2.1.1 website/web/download/index.xml | 2 +- website/web/index.xml | 6 +++--- website/web/news/10-release-2.1.1.xml | 17 +++++++++++++++++ 3 files changed, 21 insertions(+), 4 deletions(-) commit f49577c5510fbea56b542817607412644f8b5578 Author: Frederic Peters Date: Tue Aug 21 11:21:44 2007 +0000 bumped to 2.1.1 ChangeLog | 40 ++++++++++++++++++++++++++++++++++++++++ NEWS | 7 +++++++ configure.ac | 6 +++--- doap.rdf | 4 ++++ 4 files changed, 54 insertions(+), 3 deletions(-) commit 40ea071da2bc4565b028b260ace5e5a84ecba4a2 Author: Frederic Peters Date: Tue Aug 21 11:17:52 2007 +0000 fixed bad casting on get/set lists swig/saml-2.0/saml2_advice.i | 16 ++++++++-------- swig/saml-2.0/saml2_assertion.i | 16 ++++++++-------- swig/saml-2.0/saml2_attribute_statement.i | 8 ++++---- swig/saml-2.0/saml2_conditions.i | 16 ++++++++-------- swig/saml-2.0/saml2_evidence.i | 16 ++++++++-------- swig/saml-2.0/samlp2_requested_authn_context.i | 8 ++++---- swig/saml-2.0/samlp2_response.i | 8 ++++---- 7 files changed, 44 insertions(+), 44 deletions(-) commit 725f4b4a6baf7c23b34869dbd7f0dd778171b348 Author: Frederic Peters Date: Tue Aug 21 10:51:04 2007 +0000 removed LassoSignatureType java/Makefile.am | 1 - 1 file changed, 1 deletion(-) commit 6b21c1a0a6761bd4b56f62909a405937a3b85e1c Author: Frederic Peters Date: Tue Aug 21 10:50:36 2007 +0000 fixed usage of set|get_node_list and set|get_string_list swig/saml-2.0/saml2_advice.i | 32 +++++++++++++------------- swig/saml-2.0/saml2_assertion.i | 32 +++++++++++++------------- swig/saml-2.0/saml2_attribute_statement.i | 16 ++++++------- swig/saml-2.0/saml2_conditions.i | 32 +++++++++++++------------- swig/saml-2.0/saml2_evidence.i | 32 +++++++++++++------------- swig/saml-2.0/samlp2_requested_authn_context.i | 16 ++++++------- swig/saml-2.0/samlp2_response.i | 16 ++++++------- 7 files changed, 88 insertions(+), 88 deletions(-) commit ca234acee86e91542ed91c712b7c3ac2be059938 Author: Frederic Peters Date: Tue Aug 21 08:42:58 2007 +0000 added binding for LassoSignatureType which is just an enum but SWIG creates such ugly things. swig/Lasso.i | 13 +++++++++++++ 1 file changed, 13 insertions(+) commit 5706540f8d54b7afd68a776d7c002c00137a6d11 Author: Frederic Peters Date: Mon Aug 13 12:00:56 2007 +0000 added pointers to 2.1.0 tarball website/web/download/index.xml | 2 +- website/web/index.xml | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) commit 6a3eea769922cf5a8a1f97c5c0c0651c68919f1d Author: Frederic Peters Date: Mon Aug 13 11:37:27 2007 +0000 updated changelog for 2.1.0 ChangeLog | 2756 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 2756 insertions(+) commit 091d10bff2ef93d38f66065569023bd3be883f23 Author: Frederic Peters Date: Mon Aug 13 11:34:48 2007 +0000 bumped to 2.1.0 NEWS | 10 +++++++++- configure.ac | 4 ++-- doap.rdf | 4 ++++ website/web/news/09-release-2.1.0.xml | 17 +++++++++++++++++ 4 files changed, 32 insertions(+), 3 deletions(-) commit a570bf599e954c34950be7937db3d80f7cf0a932 Author: Frederic Peters Date: Mon Aug 13 10:43:37 2007 +0000 updated SAML2 bindings with all attributes; and added copyright / licence notice. swig/saml-2.0/saml2_action.i | 23 +++++++ swig/saml-2.0/saml2_advice.i | 79 ++++++++++++++++++++++++ swig/saml-2.0/saml2_assertion.i | 78 +++++++++++++++++------ swig/saml-2.0/saml2_attribute.i | 23 +++++++ swig/saml-2.0/saml2_attribute_statement.i | 51 +++++++++++++++ swig/saml-2.0/saml2_audience_restriction.i | 23 +++++++ swig/saml-2.0/saml2_authn_context.i | 25 +++++++- swig/saml-2.0/saml2_authn_statement.i | 27 +++++++- swig/saml-2.0/saml2_authz_decision_statement.i | 27 +++++++- swig/saml-2.0/saml2_base_idabstract.i | 23 +++++++ swig/saml-2.0/saml2_condition_abstract.i | 23 +++++++ swig/saml-2.0/saml2_conditions.i | 69 ++++++++++++++++++--- swig/saml-2.0/saml2_encrypted_element.i | 23 +++++++ swig/saml-2.0/saml2_evidence.i | 79 ++++++++++++++++++++++++ swig/saml-2.0/saml2_key_info_confirmation_data.i | 23 +++++++ swig/saml-2.0/saml2_name_id.i | 25 +++++++- swig/saml-2.0/saml2_one_time_use.i | 23 +++++++ swig/saml-2.0/saml2_proxy_restriction.i | 23 +++++++ swig/saml-2.0/saml2_statement_abstract.i | 23 +++++++ swig/saml-2.0/saml2_subject.i | 31 ++++++++-- swig/saml-2.0/saml2_subject_confirmation.i | 31 ++++++++-- swig/saml-2.0/saml2_subject_confirmation_data.i | 23 +++++++ swig/saml-2.0/saml2_subject_locality.i | 25 +++++++- swig/saml-2.0/samlp2_artifact_resolve.i | 23 +++++++ swig/saml-2.0/samlp2_artifact_response.i | 25 +++++++- swig/saml-2.0/samlp2_assertion_idrequest.i | 25 +++++++- swig/saml-2.0/samlp2_attribute_query.i | 25 +++++++- swig/saml-2.0/samlp2_authn_query.i | 25 +++++++- swig/saml-2.0/samlp2_authn_request.i | 39 ++++++++++-- swig/saml-2.0/samlp2_authz_decision_query.i | 27 +++++++- swig/saml-2.0/samlp2_extensions.i | 23 +++++++ swig/saml-2.0/samlp2_idp_entry.i | 25 +++++++- swig/saml-2.0/samlp2_idp_list.i | 25 +++++++- swig/saml-2.0/samlp2_logout_request.i | 31 ++++++++-- swig/saml-2.0/samlp2_manage_name_id_request.i | 33 ++++++++-- swig/saml-2.0/samlp2_name_id_mapping_request.i | 31 ++++++++-- swig/saml-2.0/samlp2_name_id_mapping_response.i | 27 +++++++- swig/saml-2.0/samlp2_name_id_policy.i | 23 +++++++ swig/saml-2.0/samlp2_request_abstract.i | 27 +++++++- swig/saml-2.0/samlp2_requested_authn_context.i | 65 ++++++++++++++----- swig/saml-2.0/samlp2_response.i | 65 ++++++++++++++----- swig/saml-2.0/samlp2_scoping.i | 27 +++++++- swig/saml-2.0/samlp2_status.i | 27 +++++++- swig/saml-2.0/samlp2_status_code.i | 25 +++++++- swig/saml-2.0/samlp2_status_detail.i | 23 +++++++ swig/saml-2.0/samlp2_status_response.i | 29 ++++++++- swig/saml-2.0/samlp2_subject_query_abstract.i | 25 +++++++- swig/saml-2.0/samlp2_terminate.i | 23 +++++++ 48 files changed, 1431 insertions(+), 112 deletions(-) commit 0d9c106ab6209877a1ec0143111b8c96cd777556 Author: Frederic Peters Date: Mon Aug 13 09:44:17 2007 +0000 updated with current list of swig generated files java/Makefile.am | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) commit c1c3c0bbe92eb164b4222c8a5f1289fc6827754e Author: Frederic Peters Date: Mon Aug 13 09:10:11 2007 +0000 remove reference to inexistent file swig/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit fab1e94df2abc1e5ccbe022915a8b0796aba7d7f Author: Frederic Peters Date: Mon Aug 13 08:59:49 2007 +0000 fixed reference to metadata files tests/data/idp5-saml2/Makefile.am | 2 +- tests/data/sp5-saml2/Makefile.am | 2 +- tests/data/sp6-saml2/Makefile.am | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) commit 3fc428016f81c508a6feec60433816c7903690f8 Author: Frederic Peters Date: Sun Aug 12 22:19:32 2007 +0000 added a wrapper around xmlParseMemory to avoid network and DTD lasso/id-ff/server.c | 3 +- lasso/id-wsf-2.0/discovery.c | 3 +- lasso/id-wsf/data_service.c | 2 +- lasso/id-wsf/wsf_profile.c | 4 +-- lasso/saml-2.0/ecp.c | 4 +-- lasso/saml-2.0/login.c | 2 +- lasso/xml/private.h | 2 ++ lasso/xml/xml.c | 83 ++++++++++++++++++++++++++++++++++++++++++-- 8 files changed, 91 insertions(+), 12 deletions(-) commit 73db5fc58f10aa5629cc963174827e1cfe740eb5 Author: Damien Laniel Date: Wed Aug 8 16:03:29 2007 +0000 processModifyResponseMsg lasso/errors.c | 2 ++ lasso/errors.h | 3 ++- lasso/id-wsf-2.0/data_service.c | 35 +++++++++++++++++++++++++++++++++++ lasso/id-wsf-2.0/data_service.h | 3 +++ swig/Lasso-wsf2.i | 6 ++++++ 5 files changed, 48 insertions(+), 1 deletion(-) commit 73350739440c6d5511f851f6dc3eba008ea4a879 Author: Damien Laniel Date: Mon Aug 6 16:45:27 2007 +0000 swig binding for parse modify items swig/Lasso-wsf2.i | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) commit 83c9fbb157eb9634fad66635c9a51195ac469feb Author: Damien Laniel Date: Mon Aug 6 16:45:06 2007 +0000 parse modify items lasso/errors.c | 6 ++ lasso/errors.h | 7 +- lasso/id-wsf-2.0/data_service.c | 145 +++++++++++++++++++++++++- lasso/id-wsf-2.0/data_service.h | 2 + lasso/xml/id-wsf-2.0/dstref_modify_response.c | 39 +++++++ lasso/xml/id-wsf-2.0/dstref_modify_response.h | 4 + 6 files changed, 199 insertions(+), 4 deletions(-) commit 18147f15171b7ff7fd96c14ff29d7e8e77dc66f6 Author: Damien Laniel Date: Mon Aug 6 16:39:56 2007 +0000 added ModifyResponse as custom namespace tools/generate_idwsf2_classes.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit ea6fcc70072fa34c857f2093d2ba0d893adee6a3 Author: Damien Laniel Date: Thu Aug 2 09:16:43 2007 +0000 added some missing Makefiles to configure.ac configure.ac | 3 +++ 1 file changed, 3 insertions(+) commit 063c49598d96176d1e5f88936f1f5cc89963eb6c Author: Damien Laniel Date: Mon Jul 30 14:18:47 2007 +0000 added a missing END_THROW_ERROR swig/Lasso-wsf2.i | 1 + 1 file changed, 1 insertion(+) commit 2867ab1933fd09f36ba19677a6a8b990a95e9f98 Author: Damien Laniel Date: Mon Jul 30 13:24:02 2007 +0000 added first functions for ID-WSF 2 attribute modification lasso/id-wsf-2.0/data_service.c | 135 ++++++++++++++++++++++++++++++ lasso/id-wsf-2.0/data_service.h | 9 ++ lasso/xml/id-wsf-2.0/dstref_app_data.h | 2 - lasso/xml/id-wsf-2.0/dstref_modify.c | 2 - lasso/xml/id-wsf-2.0/dstref_modify_item.c | 17 ++++ lasso/xml/id-wsf-2.0/dstref_modify_item.h | 4 +- swig/Lasso-wsf2.i | 17 +++- 7 files changed, 180 insertions(+), 6 deletions(-) commit e55dfe929eab5d67d18ae284731d19822a40b1d4 Author: Damien Laniel Date: Mon Jul 30 13:23:14 2007 +0000 increased the number of allocatable objects swig/Lasso.i | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 26e7ad47d5a0c755387188b4f844976b9d9bdebc Author: Frederic Peters Date: Mon Jul 30 09:26:02 2007 +0000 added script to generate idwsf2 low level classes to repository tools/generate_idwsf2_classes.py | 1814 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 1814 insertions(+) commit 9163f6f4bbe5115cd46a69e14a79d426a0ef40bf Author: Frederic Peters Date: Mon Jul 30 09:24:37 2007 +0000 DstRefAppData is just a template, don't consider it a string but a container for anything lasso/id-wsf-2.0/data_service.c | 10 ++++---- lasso/xml/id-wsf-2.0/disco_abstract.c | 2 +- lasso/xml/id-wsf-2.0/disco_abstract.h | 2 +- lasso/xml/id-wsf-2.0/disco_provider_id.c | 2 +- lasso/xml/id-wsf-2.0/disco_provider_id.h | 2 +- lasso/xml/id-wsf-2.0/disco_service_type.c | 2 +- lasso/xml/id-wsf-2.0/disco_service_type.h | 2 +- lasso/xml/id-wsf-2.0/dstref_app_data.c | 25 +++----------------- lasso/xml/id-wsf-2.0/dstref_app_data.h | 3 +-- lasso/xml/id-wsf-2.0/dstref_item_data.c | 5 +--- lasso/xml/id-wsf-2.0/dstref_item_data.h | 7 +++--- lasso/xml/id-wsf-2.0/dstref_modify.c | 39 +++++++++++++++++++++++++++++++ lasso/xml/id-wsf-2.0/dstref_modify.h | 4 ++++ lasso/xml/id-wsf-2.0/subsref_app_data.c | 3 +++ lasso/xml/id-wsf-2.0/subsref_app_data.h | 1 + swig/id-wsf-2.0/dstref_app_data.i | 1 - swig/id-wsf-2.0/inheritance.h | 2 +- 17 files changed, 68 insertions(+), 44 deletions(-) commit 7d712234f926c2fdcfae61be080da5c34ab91dbb Author: Damien Laniel Date: Fri Jul 27 17:31:01 2007 +0000 changed abort message when too many objects are allocated swig/Lasso.i | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit dbeccd5b902a2fdd4bc59c4e59c62d025a19f4e0 Author: Damien Laniel Date: Fri Jul 27 17:29:30 2007 +0000 changed abort message when too many objects are allocated swig/Lasso.i | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit 63c4824b46830dc4b5dde443acc4205fc0471064 Author: Damien Laniel Date: Fri Jul 27 17:24:38 2007 +0000 use a constant for node_infos size swig/Lasso.i | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) commit 573b8e3d401bb8ff27ae5369cafa5c41a8dbaab3 Author: Damien Laniel Date: Fri Jul 27 17:18:43 2007 +0000 abort when node_infos array has reached its limit swig/Lasso.i | 6 ++++++ 1 file changed, 6 insertions(+) commit 185eaacba77cb5f6c66c7435b25e7b49fee558b3 Author: Frederic Peters Date: Fri Jul 27 16:30:53 2007 +0000 access to saml2 attribute statement swig/saml-2.0/saml2_assertion.i | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) commit a1d5996ce49a5e6e34691974bcb005271695b4a4 Author: Frederic Peters Date: Thu Jul 26 18:17:24 2007 +0000 python2.3-lasso was package for old policy python2.3-lasso.files | 3 --- 1 file changed, 3 deletions(-) commit 45c8e7b1d279e5ed6a1265ff1fac9314589b79ed Author: Frederic Peters Date: Thu Jul 26 18:17:24 2007 +0000 python2.3-lasso was package for old policy debian/python2.3-lasso.files | 3 --- 1 file changed, 3 deletions(-) commit a629f7aec886a8abd1d1e3d0ab90fb28256a52b3 Author: Frederic Peters Date: Thu Jul 26 18:07:30 2007 +0000 updated packaging to current sid package changelog | 36 ++++++++++++++++++++++++++++++------ control | 34 +++++++++++----------------------- pycompat | 1 + python-lasso.files | 3 +++ rules | 29 +++++++++++++++++++++++------ 5 files changed, 68 insertions(+), 35 deletions(-) commit e963f695d677b77dc15d9393e64556c66aa7000c Author: Frederic Peters Date: Thu Jul 26 18:07:30 2007 +0000 updated packaging to current sid package debian/changelog | 36 ++++++++++++++++++++++++++++++------ debian/control | 34 +++++++++++----------------------- debian/pycompat | 1 + debian/python-lasso.files | 3 +++ debian/rules | 29 +++++++++++++++++++++++------ 5 files changed, 68 insertions(+), 35 deletions(-) commit de020abbdcf82645352fb2b1b18068c5adf12b1b Author: Damien Laniel Date: Mon Jul 16 15:16:53 2007 +0000 added one error message python/tests/idwsf2_tests.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 332decdb780f0a5b30822ce9bcda7aaf4699c2d4 Author: Damien Laniel Date: Mon Jul 16 15:14:03 2007 +0000 some more data service tests python/tests/idwsf2_tests.py | 419 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 415 insertions(+), 4 deletions(-) commit 9b7615af5fa778cc10a995ea2c9eb0dfcfe2461c Author: Damien Laniel Date: Mon Jul 16 12:34:49 2007 +0000 data service query tests + one more test for discovery + some fixes to previous code python/tests/idwsf2_tests.py | 288 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 272 insertions(+), 16 deletions(-) commit 2929d0fcb1da625f06ac247770be6fb0357894e3 Author: Damien Laniel Date: Wed Jul 11 14:47:35 2007 +0000 discovery query test suite python/tests/idwsf2_tests.py | 513 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 509 insertions(+), 4 deletions(-) commit 667228cf1638bcff1f9383213dc8f3c47791047f Author: Damien Laniel Date: Wed Jul 11 14:00:24 2007 +0000 moved common function to a super class python/tests/idwsf2_tests.py | 251 +++++++++++++++++++------------------------ 1 file changed, 113 insertions(+), 138 deletions(-) commit 24433624371b2b8132d4d5e04f9833c7dd23358e Author: Damien Laniel Date: Wed Jul 11 13:53:14 2007 +0000 test suite for metadata association add python/tests/idwsf2_tests.py | 339 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 320 insertions(+), 19 deletions(-) commit b3c7aa15f82b0166a7089250484ce095239c8b3a Author: Damien Laniel Date: Wed Jul 11 10:08:25 2007 +0000 split id-wsf 2 tests in smaller functions python/tests/idwsf2_tests.py | 149 ++++++++++++++++++++++++++++++++++++------- 1 file changed, 126 insertions(+), 23 deletions(-) commit 59c11f40be40eb32628dd7ead243840f3fce0883 Author: Damien Laniel Date: Tue Jul 10 17:39:52 2007 +0000 some unit tests for id-wsf 2 python/tests/Makefile.am | 2 +- python/tests/idwsf2_tests.py | 202 +++++++++++++++++++++++++++++++++++++++++++ python/tests/tests.py | 2 +- 3 files changed, 204 insertions(+), 2 deletions(-) commit ddf73adc7e61274af94edcabc4b462c60a48ba34 Author: Damien Laniel Date: Tue Jul 10 17:12:29 2007 +0000 fixed prefix changes for soap binding and ws security lasso/xml/xml.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) commit 6f7996c9967682c4e8d3f5cb8c1ab0ea43f499a9 Author: Damien Laniel Date: Tue Jul 10 15:32:57 2007 +0000 renamed some files tests/data/idp5-saml2/{saml2_metadata.xml => metadata.xml} | 0 tests/data/sp5-saml2/{saml2_metadata.xml => metadata.xml} | 0 tests/data/sp6-saml2/{saml2_metadata.xml => metadata.xml} | 0 3 files changed, 0 insertions(+), 0 deletions(-) commit 9a3c0c488aaf9fd62eabc055cda539050b6d5343 Author: Damien Laniel Date: Tue Jul 10 15:27:01 2007 +0000 added saml2 metadatas and keys for 1 idp and 2 sp tests/data/Makefile.am | 2 +- tests/data/idp5-saml2/Makefile.am | 1 + tests/data/idp5-saml2/private-key.pem | 27 +++++++++ tests/data/idp5-saml2/saml2_metadata.xml | 79 ++++++++++++++++++++++++++ tests/data/sp5-saml2/Makefile.am | 1 + tests/data/sp5-saml2/private-key.pem | 27 +++++++++ tests/data/sp5-saml2/saml2_metadata.xml | 94 +++++++++++++++++++++++++++++++ tests/data/sp6-saml2/Makefile.am | 1 + tests/data/sp6-saml2/private-key.pem | 27 +++++++++ tests/data/sp6-saml2/saml2_metadata.xml | 95 ++++++++++++++++++++++++++++++++ 10 files changed, 353 insertions(+), 1 deletion(-) commit 3e6322a8a0d3571558b9a48c45245cdc6642656e Author: Frederic Peters Date: Tue Jul 10 14:25:55 2007 +0000 don't call lasso_node_destroy on a NULL variable lasso/id-ff/login.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit d2930c3a73f5fbabb5cef2389952f00d6cc3ba94 Author: Frederic Peters Date: Tue Jul 10 14:24:14 2007 +0000 initialize global variables swig/Lasso.i | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 6204c8be9c8b2d9d12c8df33017f091004b9f186 Author: Frederic Peters Date: Tue Jul 10 08:50:56 2007 +0000 adds all classes from ID-WSF 2 required schemas; with appropriate changes to other files. configure.ac | 1 + lasso/Makefile.am | 2 +- lasso/id-ff/server.c | 8 +- lasso/id-ff/session.c | 2 +- lasso/id-wsf-2.0/data_service.c | 13 +- lasso/id-wsf-2.0/discovery.c | 48 ++-- lasso/id-wsf-2.0/profile.c | 12 +- lasso/saml-2.0/login.c | 31 ++- lasso/xml/id-wsf-2.0/Makefile.am | 250 +++++++++++++++++-- lasso/xml/id-wsf-2.0/disco_abstract.c | 54 +++-- lasso/xml/id-wsf-2.0/disco_abstract.h | 43 ++-- lasso/xml/id-wsf-2.0/disco_endpoint_context.c | 70 +++--- lasso/xml/id-wsf-2.0/disco_endpoint_context.h | 47 ++-- lasso/xml/id-wsf-2.0/disco_keys.c | 110 +++++++++ lasso/xml/id-wsf-2.0/disco_keys.h | 81 +++++++ lasso/xml/id-wsf-2.0/disco_options.c | 34 ++- lasso/xml/id-wsf-2.0/disco_options.h | 30 ++- .../{disco_providerid.c => disco_provider_id.c} | 59 +++-- .../{disco_providerid.h => disco_provider_id.h} | 54 +++-- lasso/xml/id-wsf-2.0/disco_query.c | 4 +- lasso/xml/id-wsf-2.0/disco_query.h | 2 +- lasso/xml/id-wsf-2.0/disco_query_response.c | 2 +- lasso/xml/id-wsf-2.0/disco_query_response.h | 3 +- lasso/xml/id-wsf-2.0/disco_requested_service.c | 6 +- lasso/xml/id-wsf-2.0/disco_security_context.c | 2 +- lasso/xml/id-wsf-2.0/disco_security_context.h | 2 +- lasso/xml/id-wsf-2.0/disco_service_context.c | 61 +++-- lasso/xml/id-wsf-2.0/disco_service_context.h | 44 ++-- lasso/xml/id-wsf-2.0/disco_service_type.c | 55 +++-- lasso/xml/id-wsf-2.0/disco_service_type.h | 44 ++-- .../xml/id-wsf-2.0/disco_svc_md_association_add.c | 2 +- .../xml/id-wsf-2.0/disco_svc_md_association_add.h | 3 +- .../disco_svc_md_association_add_response.c | 2 +- .../disco_svc_md_association_add_response.h | 3 +- .../id-wsf-2.0/disco_svc_md_association_delete.c | 113 +++++++++ .../id-wsf-2.0/disco_svc_md_association_delete.h | 86 +++++++ .../disco_svc_md_association_delete_response.c | 114 +++++++++ .../disco_svc_md_association_delete_response.h | 87 +++++++ .../id-wsf-2.0/disco_svc_md_association_query.c | 113 +++++++++ .../id-wsf-2.0/disco_svc_md_association_query.h | 86 +++++++ .../disco_svc_md_association_query_response.c | 118 +++++++++ .../disco_svc_md_association_query_response.h | 88 +++++++ lasso/xml/id-wsf-2.0/disco_svc_md_delete.c | 113 +++++++++ lasso/xml/id-wsf-2.0/disco_svc_md_delete.h | 83 +++++++ .../xml/id-wsf-2.0/disco_svc_md_delete_response.c | 114 +++++++++ .../xml/id-wsf-2.0/disco_svc_md_delete_response.h | 85 +++++++ lasso/xml/id-wsf-2.0/disco_svc_md_query.c | 115 +++++++++ lasso/xml/id-wsf-2.0/disco_svc_md_query.h | 83 +++++++ lasso/xml/id-wsf-2.0/disco_svc_md_query_response.c | 119 +++++++++ lasso/xml/id-wsf-2.0/disco_svc_md_query_response.h | 86 +++++++ lasso/xml/id-wsf-2.0/disco_svc_md_register.c | 46 ++-- lasso/xml/id-wsf-2.0/disco_svc_md_register.h | 40 +-- .../id-wsf-2.0/disco_svc_md_register_response.c | 10 +- .../id-wsf-2.0/disco_svc_md_register_response.h | 38 +-- lasso/xml/id-wsf-2.0/disco_svc_md_replace.c | 114 +++++++++ lasso/xml/id-wsf-2.0/disco_svc_md_replace.h | 83 +++++++ .../xml/id-wsf-2.0/disco_svc_md_replace_response.c | 114 +++++++++ .../xml/id-wsf-2.0/disco_svc_md_replace_response.h | 87 +++++++ lasso/xml/id-wsf-2.0/disco_svc_metadata.c | 63 +++-- lasso/xml/id-wsf-2.0/disco_svc_metadata.h | 45 ++-- lasso/xml/id-wsf-2.0/dst_data_response_base.c | 4 +- lasso/xml/id-wsf-2.0/dst_data_response_base.h | 5 +- lasso/xml/id-wsf-2.0/dst_delete_item_base.c | 121 +++++++++ lasso/xml/id-wsf-2.0/dst_delete_item_base.h | 85 +++++++ lasso/xml/id-wsf-2.0/dst_delete_response.c | 105 ++++++++ lasso/xml/id-wsf-2.0/dst_delete_response.h | 80 ++++++ lasso/xml/id-wsf-2.0/dst_request.c | 6 +- lasso/xml/id-wsf-2.0/dst_request.h | 2 +- lasso/xml/id-wsf-2.0/dst_result_query_base.c | 12 +- lasso/xml/id-wsf-2.0/dst_result_query_base.h | 6 +- lasso/xml/id-wsf-2.0/dst_test_item_base.c | 117 +++++++++ lasso/xml/id-wsf-2.0/dst_test_item_base.h | 84 +++++++ .../{dstref_sort.c => dstref_app_data.c} | 50 ++-- lasso/xml/id-wsf-2.0/dstref_app_data.h | 82 +++++++ lasso/xml/id-wsf-2.0/dstref_create.c | 118 +++++++++ lasso/xml/id-wsf-2.0/dstref_create.h | 83 +++++++ lasso/xml/id-wsf-2.0/dstref_create_item.c | 119 +++++++++ lasso/xml/id-wsf-2.0/dstref_create_item.h | 86 +++++++ lasso/xml/id-wsf-2.0/dstref_create_response.c | 105 ++++++++ lasso/xml/id-wsf-2.0/dstref_create_response.h | 81 +++++++ lasso/xml/id-wsf-2.0/dstref_data.c | 9 +- lasso/xml/id-wsf-2.0/dstref_data.h | 4 +- lasso/xml/id-wsf-2.0/dstref_data_response.c | 113 +++++++++ lasso/xml/id-wsf-2.0/dstref_data_response.h | 82 +++++++ lasso/xml/id-wsf-2.0/dstref_delete.c | 113 +++++++++ lasso/xml/id-wsf-2.0/dstref_delete.h | 82 +++++++ lasso/xml/id-wsf-2.0/dstref_delete_item.c | 112 +++++++++ lasso/xml/id-wsf-2.0/dstref_delete_item.h | 82 +++++++ lasso/xml/id-wsf-2.0/dstref_delete_response.c | 105 ++++++++ lasso/xml/id-wsf-2.0/dstref_delete_response.h | 81 +++++++ lasso/xml/id-wsf-2.0/dstref_item_data.c | 3 +- lasso/xml/id-wsf-2.0/dstref_item_data.h | 6 +- lasso/xml/id-wsf-2.0/dstref_modify.c | 118 +++++++++ lasso/xml/id-wsf-2.0/dstref_modify.h | 83 +++++++ lasso/xml/id-wsf-2.0/dstref_modify_item.c | 126 ++++++++++ lasso/xml/id-wsf-2.0/dstref_modify_item.h | 88 +++++++ lasso/xml/id-wsf-2.0/dstref_modify_response.c | 105 ++++++++ lasso/xml/id-wsf-2.0/dstref_modify_response.h | 81 +++++++ lasso/xml/id-wsf-2.0/dstref_query.c | 48 ++-- lasso/xml/id-wsf-2.0/dstref_query.h | 6 +- lasso/xml/id-wsf-2.0/dstref_query_item.c | 8 +- lasso/xml/id-wsf-2.0/dstref_query_item.h | 5 +- lasso/xml/id-wsf-2.0/dstref_query_response.c | 47 ++-- lasso/xml/id-wsf-2.0/dstref_query_response.h | 2 +- lasso/xml/id-wsf-2.0/dstref_result_query.c | 11 +- lasso/xml/id-wsf-2.0/dstref_result_query.h | 10 +- lasso/xml/id-wsf-2.0/dstref_test_item.c | 112 +++++++++ lasso/xml/id-wsf-2.0/dstref_test_item.h | 82 +++++++ .../xml/id-wsf-2.0/ims_identity_mapping_request.c | 113 +++++++++ .../xml/id-wsf-2.0/ims_identity_mapping_request.h | 86 +++++++ .../xml/id-wsf-2.0/ims_identity_mapping_response.c | 118 +++++++++ .../xml/id-wsf-2.0/ims_identity_mapping_response.h | 88 +++++++ lasso/xml/id-wsf-2.0/ims_mapping_input.c | 116 +++++++++ lasso/xml/id-wsf-2.0/ims_mapping_input.h | 86 +++++++ lasso/xml/id-wsf-2.0/ims_mapping_output.c | 112 +++++++++ lasso/xml/id-wsf-2.0/ims_mapping_output.h | 84 +++++++ lasso/xml/id-wsf-2.0/is_help.c | 114 +++++++++ lasso/xml/id-wsf-2.0/is_help.h | 83 +++++++ lasso/xml/id-wsf-2.0/is_inquiry.c | 131 ++++++++++ lasso/xml/id-wsf-2.0/is_inquiry.h | 88 +++++++ lasso/xml/id-wsf-2.0/is_inquiry_element.c | 124 ++++++++++ lasso/xml/id-wsf-2.0/is_inquiry_element.h | 87 +++++++ lasso/xml/id-wsf-2.0/is_interaction_request.c | 128 ++++++++++ lasso/xml/id-wsf-2.0/is_interaction_request.h | 88 +++++++ lasso/xml/id-wsf-2.0/is_interaction_response.c | 120 +++++++++ lasso/xml/id-wsf-2.0/is_interaction_response.h | 84 +++++++ lasso/xml/id-wsf-2.0/is_interaction_statement.c | 131 ++++++++++ lasso/xml/id-wsf-2.0/is_interaction_statement.h | 88 +++++++ lasso/xml/id-wsf-2.0/is_item.c | 118 +++++++++ lasso/xml/id-wsf-2.0/is_item.h | 84 +++++++ lasso/xml/id-wsf-2.0/is_parameter.c | 110 +++++++++ lasso/xml/id-wsf-2.0/is_parameter.h | 82 +++++++ lasso/xml/id-wsf-2.0/is_select.c | 115 +++++++++ lasso/xml/id-wsf-2.0/is_select.h | 82 +++++++ lasso/xml/id-wsf-2.0/is_text.c | 118 +++++++++ lasso/xml/id-wsf-2.0/is_text.h | 84 +++++++ lasso/xml/id-wsf-2.0/ps_add_collection_request.c | 116 +++++++++ lasso/xml/id-wsf-2.0/ps_add_collection_request.h | 86 +++++++ lasso/xml/id-wsf-2.0/ps_add_collection_response.c | 112 +++++++++ lasso/xml/id-wsf-2.0/ps_add_collection_response.h | 84 +++++++ lasso/xml/id-wsf-2.0/ps_add_entity_request.c | 128 ++++++++++ lasso/xml/id-wsf-2.0/ps_add_entity_request.h | 89 +++++++ lasso/xml/id-wsf-2.0/ps_add_entity_response.c | 120 +++++++++ lasso/xml/id-wsf-2.0/ps_add_entity_response.h | 85 +++++++ lasso/xml/id-wsf-2.0/ps_add_known_entity_request.c | 128 ++++++++++ lasso/xml/id-wsf-2.0/ps_add_known_entity_request.h | 91 +++++++ .../xml/id-wsf-2.0/ps_add_known_entity_response.c | 120 +++++++++ .../xml/id-wsf-2.0/ps_add_known_entity_response.h | 86 +++++++ .../xml/id-wsf-2.0/ps_add_to_collection_request.c | 120 +++++++++ .../xml/id-wsf-2.0/ps_add_to_collection_request.h | 86 +++++++ lasso/xml/id-wsf-2.0/ps_get_object_info_request.c | 116 +++++++++ lasso/xml/id-wsf-2.0/ps_get_object_info_request.h | 85 +++++++ lasso/xml/id-wsf-2.0/ps_get_object_info_response.c | 112 +++++++++ lasso/xml/id-wsf-2.0/ps_get_object_info_response.h | 84 +++++++ lasso/xml/id-wsf-2.0/ps_item_data.c | 108 +++++++++ .../id-wsf-2.0/{dstref_sort.h => ps_item_data.h} | 52 ++-- lasso/xml/id-wsf-2.0/ps_list_members_request.c | 128 ++++++++++ lasso/xml/id-wsf-2.0/ps_list_members_request.h | 88 +++++++ lasso/xml/id-wsf-2.0/ps_list_members_response.c | 112 +++++++++ lasso/xml/id-wsf-2.0/ps_list_members_response.h | 82 +++++++ lasso/xml/id-wsf-2.0/ps_notification.c | 112 +++++++++ lasso/xml/id-wsf-2.0/ps_notification.h | 82 +++++++ lasso/xml/id-wsf-2.0/ps_notify.c | 116 +++++++++ lasso/xml/id-wsf-2.0/ps_notify.h | 84 +++++++ lasso/xml/id-wsf-2.0/ps_object.c | 137 +++++++++++ lasso/xml/id-wsf-2.0/ps_object.h | 89 +++++++ lasso/xml/id-wsf-2.0/ps_query_objects_request.c | 124 ++++++++++ lasso/xml/id-wsf-2.0/ps_query_objects_request.h | 87 +++++++ lasso/xml/id-wsf-2.0/ps_query_objects_response.c | 112 +++++++++ lasso/xml/id-wsf-2.0/ps_query_objects_response.h | 83 +++++++ .../xml/id-wsf-2.0/ps_remove_collection_request.c | 112 +++++++++ .../xml/id-wsf-2.0/ps_remove_collection_request.h | 85 +++++++ lasso/xml/id-wsf-2.0/ps_remove_entity_request.c | 112 +++++++++ lasso/xml/id-wsf-2.0/ps_remove_entity_request.h | 82 +++++++ .../id-wsf-2.0/ps_remove_from_collection_request.c | 120 +++++++++ .../id-wsf-2.0/ps_remove_from_collection_request.h | 88 +++++++ lasso/xml/id-wsf-2.0/ps_request_abstract.c | 107 ++++++++ lasso/xml/id-wsf-2.0/ps_request_abstract.h | 81 +++++++ .../xml/id-wsf-2.0/ps_resolve_identifier_request.c | 112 +++++++++ .../xml/id-wsf-2.0/ps_resolve_identifier_request.h | 85 +++++++ .../id-wsf-2.0/ps_resolve_identifier_response.c | 112 +++++++++ .../id-wsf-2.0/ps_resolve_identifier_response.h | 85 +++++++ lasso/xml/id-wsf-2.0/ps_resolve_input.c | 112 +++++++++ lasso/xml/id-wsf-2.0/ps_resolve_input.h | 82 +++++++ lasso/xml/id-wsf-2.0/ps_response_abstract.c | 114 +++++++++ lasso/xml/id-wsf-2.0/ps_response_abstract.h | 84 +++++++ lasso/xml/id-wsf-2.0/ps_set_object_info_request.c | 116 +++++++++ lasso/xml/id-wsf-2.0/ps_set_object_info_request.h | 85 +++++++ lasso/xml/id-wsf-2.0/ps_test_membership_request.c | 120 +++++++++ lasso/xml/id-wsf-2.0/ps_test_membership_request.h | 87 +++++++ lasso/xml/id-wsf-2.0/ps_test_membership_response.c | 112 +++++++++ lasso/xml/id-wsf-2.0/ps_test_membership_response.h | 83 +++++++ lasso/xml/id-wsf-2.0/sb2_consent.c | 115 +++++++++ lasso/xml/id-wsf-2.0/sb2_consent.h | 83 +++++++ lasso/xml/id-wsf-2.0/sb2_credentials_context.c | 118 +++++++++ lasso/xml/id-wsf-2.0/sb2_credentials_context.h | 85 +++++++ lasso/xml/id-wsf-2.0/sb2_endpoint_update.c | 110 +++++++++ lasso/xml/id-wsf-2.0/sb2_endpoint_update.h | 82 +++++++ ...2_redirect_request.c => sb2_redirect_request.c} | 45 ++-- lasso/xml/id-wsf-2.0/sb2_redirect_request.h | 83 +++++++ lasso/xml/id-wsf-2.0/sb2_sender.c | 115 +++++++++ lasso/xml/id-wsf-2.0/sb2_sender.h | 83 +++++++ lasso/xml/id-wsf-2.0/sb2_target_identity.c | 110 +++++++++ lasso/xml/id-wsf-2.0/sb2_target_identity.h | 81 +++++++ lasso/xml/id-wsf-2.0/sb2_timeout.c | 111 +++++++++ lasso/xml/id-wsf-2.0/sb2_timeout.h | 82 +++++++ lasso/xml/id-wsf-2.0/sb2_usage_directive.c | 115 +++++++++ lasso/xml/id-wsf-2.0/sb2_usage_directive.h | 82 +++++++ lasso/xml/id-wsf-2.0/sb2_user_interaction_header.c | 131 ++++++++++ lasso/xml/id-wsf-2.0/sb2_user_interaction_header.h | 88 +++++++ .../{soap_binding_framework.c => sbf_framework.c} | 76 +++--- lasso/xml/id-wsf-2.0/sbf_framework.h | 82 +++++++ lasso/xml/id-wsf-2.0/sec_token.c | 10 +- lasso/xml/id-wsf-2.0/sec_token.h | 2 +- lasso/xml/id-wsf-2.0/sec_token_policy.c | 129 ++++++++++ lasso/xml/id-wsf-2.0/sec_token_policy.h | 87 +++++++ lasso/xml/id-wsf-2.0/sec_transited_provider_path.c | 109 +++++++++ lasso/xml/id-wsf-2.0/sec_transited_provider_path.h | 82 +++++++ .../id-wsf-2.0/soap_binding2_redirect_request.h | 82 ------- lasso/xml/id-wsf-2.0/soap_binding_framework.h | 69 ------ lasso/xml/id-wsf-2.0/subs_notification.c | 125 ++++++++++ lasso/xml/id-wsf-2.0/subs_notification.h | 86 +++++++ lasso/xml/id-wsf-2.0/subs_notify_response.c | 105 ++++++++ lasso/xml/id-wsf-2.0/subs_notify_response.h | 80 ++++++ lasso/xml/id-wsf-2.0/subs_ref_item.c | 110 +++++++++ lasso/xml/id-wsf-2.0/subs_ref_item.h | 82 +++++++ lasso/xml/id-wsf-2.0/subs_subscription.c | 149 ++++++++++++ lasso/xml/id-wsf-2.0/subs_subscription.h | 90 +++++++ .../subsref_app_data.c} | 67 +++-- lasso/xml/id-wsf-2.0/subsref_app_data.h | 81 +++++++ lasso/xml/id-wsf-2.0/subsref_create.c | 120 +++++++++ lasso/xml/id-wsf-2.0/subsref_create.h | 84 +++++++ lasso/xml/id-wsf-2.0/subsref_create_item.c | 118 +++++++++ lasso/xml/id-wsf-2.0/subsref_create_item.h | 86 +++++++ lasso/xml/id-wsf-2.0/subsref_create_response.c | 105 ++++++++ lasso/xml/id-wsf-2.0/subsref_create_response.h | 81 +++++++ lasso/xml/id-wsf-2.0/subsref_data.c | 116 +++++++++ lasso/xml/id-wsf-2.0/subsref_data.h | 84 +++++++ lasso/xml/id-wsf-2.0/subsref_data_response.c | 112 +++++++++ lasso/xml/id-wsf-2.0/subsref_data_response.h | 83 +++++++ lasso/xml/id-wsf-2.0/subsref_delete.c | 112 +++++++++ lasso/xml/id-wsf-2.0/subsref_delete.h | 82 +++++++ lasso/xml/id-wsf-2.0/subsref_delete_item.c | 112 +++++++++ lasso/xml/id-wsf-2.0/subsref_delete_item.h | 82 +++++++ lasso/xml/id-wsf-2.0/subsref_delete_response.c | 105 ++++++++ lasso/xml/id-wsf-2.0/subsref_delete_response.h | 81 +++++++ lasso/xml/id-wsf-2.0/subsref_item_data.c | 116 +++++++++ lasso/xml/id-wsf-2.0/subsref_item_data.h | 84 +++++++ lasso/xml/id-wsf-2.0/subsref_modify.c | 120 +++++++++ lasso/xml/id-wsf-2.0/subsref_modify.h | 84 +++++++ lasso/xml/id-wsf-2.0/subsref_modify_item.c | 125 ++++++++++ lasso/xml/id-wsf-2.0/subsref_modify_item.h | 88 +++++++ lasso/xml/id-wsf-2.0/subsref_modify_response.c | 105 ++++++++ lasso/xml/id-wsf-2.0/subsref_modify_response.h | 81 +++++++ lasso/xml/id-wsf-2.0/subsref_notification.c | 112 +++++++++ lasso/xml/id-wsf-2.0/subsref_notification.h | 83 +++++++ lasso/xml/id-wsf-2.0/subsref_notify.c | 116 +++++++++ lasso/xml/id-wsf-2.0/subsref_notify.h | 84 +++++++ lasso/xml/id-wsf-2.0/subsref_notify_response.c | 105 ++++++++ lasso/xml/id-wsf-2.0/subsref_notify_response.h | 81 +++++++ lasso/xml/id-wsf-2.0/subsref_query.c | 120 +++++++++ lasso/xml/id-wsf-2.0/subsref_query.h | 84 +++++++ lasso/xml/id-wsf-2.0/subsref_query_item.c | 119 +++++++++ lasso/xml/id-wsf-2.0/subsref_query_item.h | 85 +++++++ lasso/xml/id-wsf-2.0/subsref_query_response.c | 117 +++++++++ lasso/xml/id-wsf-2.0/subsref_query_response.h | 84 +++++++ lasso/xml/id-wsf-2.0/subsref_result_query.c | 116 +++++++++ lasso/xml/id-wsf-2.0/subsref_result_query.h | 84 +++++++ lasso/xml/id-wsf-2.0/subsref_subscription.c | 121 +++++++++ lasso/xml/id-wsf-2.0/subsref_subscription.h | 85 +++++++ lasso/xml/id-wsf-2.0/subsref_test_item.c | 112 +++++++++ lasso/xml/id-wsf-2.0/subsref_test_item.h | 82 +++++++ lasso/xml/id-wsf-2.0/util_empty.c | 108 +++++++++ lasso/xml/id-wsf-2.0/util_empty.h | 79 ++++++ lasso/xml/id-wsf-2.0/util_extension.c | 110 +++++++++ lasso/xml/id-wsf-2.0/util_extension.h | 79 ++++++ lasso/xml/id-wsf-2.0/util_response.c | 9 +- lasso/xml/id-wsf-2.0/util_response.h | 2 +- lasso/xml/id-wsf-2.0/util_status.c | 21 +- lasso/xml/id-wsf-2.0/util_status.h | 47 ++-- lasso/xml/ws/Makefile.am | 15 +- lasso/xml/ws/wsa_attributed_any.c | 11 +- lasso/xml/ws/wsa_attributed_any.h | 26 +- lasso/xml/ws/wsa_attributed_qname.c | 14 +- lasso/xml/ws/wsa_attributed_qname.h | 26 +- lasso/xml/ws/wsa_attributed_unsigned_long.c | 6 +- lasso/xml/ws/wsa_attributed_unsigned_long.h | 27 ++- lasso/xml/ws/wsa_attributed_uri.c | 11 +- lasso/xml/ws/wsa_attributed_uri.h | 22 +- lasso/xml/ws/wsa_endpoint_reference.c | 19 +- lasso/xml/ws/wsa_endpoint_reference.h | 27 ++- lasso/xml/ws/wsa_metadata.c | 7 +- lasso/xml/ws/wsa_metadata.h | 26 +- lasso/xml/ws/wsa_problem_action.c | 8 +- lasso/xml/ws/wsa_problem_action.h | 24 +- lasso/xml/ws/wsa_reference_parameters.c | 11 +- lasso/xml/ws/wsa_reference_parameters.h | 26 +- lasso/xml/ws/wsa_relates_to.c | 19 +- lasso/xml/ws/wsa_relates_to.h | 26 +- lasso/xml/ws/wsse_200401_security.h | 68 ------ lasso/xml/ws/wsse_embedded.c | 118 +++++++++ lasso/xml/ws/wsse_embedded.h | 82 +++++++ lasso/xml/ws/wsse_reference.c | 119 +++++++++ lasso/xml/ws/wsse_reference.h | 83 +++++++ lasso/xml/ws/wsse_security_header.c | 122 ++++++++++ lasso/xml/ws/wsse_security_header.h | 83 +++++++ lasso/xml/ws/wsse_security_token_reference.c | 121 +++++++++ lasso/xml/ws/wsse_security_token_reference.h | 84 +++++++ lasso/xml/ws/wsse_transformation_parameters.c | 120 +++++++++ lasso/xml/ws/wsse_transformation_parameters.h | 82 +++++++ lasso/xml/ws/wsse_username_token.c | 122 ++++++++++ lasso/xml/ws/wsse_username_token.h | 84 +++++++ lasso/xml/ws/wsu_timestamp.c | 72 ++++-- lasso/xml/ws/wsu_timestamp.h | 50 ++-- swig/Lasso.i | 4 + swig/Makefile.am | 2 +- swig/id-wsf-2.0/Makefile.am | 137 ++++++++++- swig/id-wsf-2.0/disco_abstract.i | 55 +++++ swig/id-wsf-2.0/disco_endpoint_context.i | 54 +++++ swig/id-wsf-2.0/disco_keys.i | 54 +++++ swig/id-wsf-2.0/disco_options.i | 54 +++++ swig/id-wsf-2.0/disco_provider_id.i | 55 +++++ swig/id-wsf-2.0/disco_query.i | 67 +++++ swig/id-wsf-2.0/disco_query_response.i | 81 +++++++ swig/id-wsf-2.0/disco_requested_service.i | 67 +++++ swig/id-wsf-2.0/disco_security_context.i | 54 +++++ swig/id-wsf-2.0/disco_service_context.i | 54 +++++ swig/id-wsf-2.0/disco_service_type.i | 55 +++++ swig/id-wsf-2.0/disco_svc_md_association_add.i | 67 +++++ .../disco_svc_md_association_add_response.i | 81 +++++++ swig/id-wsf-2.0/disco_svc_md_association_delete.i | 67 +++++ .../disco_svc_md_association_delete_response.i | 81 +++++++ swig/id-wsf-2.0/disco_svc_md_association_query.i | 67 +++++ .../disco_svc_md_association_query_response.i | 81 +++++++ swig/id-wsf-2.0/disco_svc_md_delete.i | 67 +++++ swig/id-wsf-2.0/disco_svc_md_delete_response.i | 81 +++++++ swig/id-wsf-2.0/disco_svc_md_query.i | 67 +++++ swig/id-wsf-2.0/disco_svc_md_query_response.i | 81 +++++++ swig/id-wsf-2.0/disco_svc_md_register.i | 67 +++++ swig/id-wsf-2.0/disco_svc_md_register_response.i | 81 +++++++ swig/id-wsf-2.0/disco_svc_md_replace.i | 67 +++++ swig/id-wsf-2.0/disco_svc_md_replace_response.i | 81 +++++++ swig/id-wsf-2.0/disco_svc_metadata.i | 36 ++- swig/id-wsf-2.0/dst_data_response_base.i | 55 +++++ swig/id-wsf-2.0/dst_delete_item_base.i | 59 +++++ swig/id-wsf-2.0/dst_delete_response.i | 54 +++++ swig/id-wsf-2.0/dst_request.i | 68 ++++++ swig/id-wsf-2.0/dst_result_query_base.i | 65 +++++ swig/id-wsf-2.0/dst_test_item_base.i | 58 +++++ swig/id-wsf-2.0/dstref_app_data.i | 55 +++++ swig/id-wsf-2.0/dstref_create.i | 54 +++++ swig/id-wsf-2.0/dstref_create_item.i | 71 ++++++ swig/id-wsf-2.0/dstref_create_response.i | 54 +++++ swig/id-wsf-2.0/dstref_data.i | 57 +++++ swig/id-wsf-2.0/dstref_data_response.i | 54 +++++ swig/id-wsf-2.0/dstref_delete.i | 54 +++++ swig/id-wsf-2.0/dstref_delete_item.i | 58 +++++ swig/id-wsf-2.0/dstref_delete_response.i | 54 +++++ swig/id-wsf-2.0/dstref_item_data.i | 57 +++++ swig/id-wsf-2.0/dstref_modify.i | 54 +++++ swig/id-wsf-2.0/dstref_modify_item.i | 76 ++++++ swig/id-wsf-2.0/dstref_modify_response.i | 54 +++++ swig/id-wsf-2.0/dstref_query.i | 54 +++++ swig/id-wsf-2.0/dstref_query_item.i | 58 +++++ swig/id-wsf-2.0/dstref_query_response.i | 54 +++++ swig/id-wsf-2.0/dstref_result_query.i | 62 +++++ swig/id-wsf-2.0/dstref_test_item.i | 58 +++++ swig/id-wsf-2.0/ims_identity_mapping_request.i | 67 +++++ swig/id-wsf-2.0/ims_identity_mapping_response.i | 81 +++++++ swig/id-wsf-2.0/ims_mapping_input.i | 55 +++++ swig/id-wsf-2.0/ims_mapping_output.i | 55 +++++ swig/id-wsf-2.0/inheritance.h | 135 +++++++++++ swig/id-wsf-2.0/is_help.i | 57 +++++ swig/id-wsf-2.0/is_inquiry.i | 56 +++++ swig/id-wsf-2.0/is_inquiry_element.i | 67 +++++ swig/id-wsf-2.0/is_interaction_request.i | 58 +++++ swig/id-wsf-2.0/is_interaction_response.i | 68 ++++++ swig/id-wsf-2.0/is_interaction_statement.i | 54 +++++ swig/id-wsf-2.0/is_item.i | 60 +++++ swig/id-wsf-2.0/is_parameter.i | 56 +++++ swig/id-wsf-2.0/is_select.i | 54 +++++ swig/id-wsf-2.0/is_text.i | 57 +++++ swig/id-wsf-2.0/main.h | 269 ++++++++++++++++++++- swig/id-wsf-2.0/ps_add_collection_request.i | 54 +++++ swig/id-wsf-2.0/ps_add_collection_response.i | 54 +++++ swig/id-wsf-2.0/ps_add_entity_request.i | 58 +++++ swig/id-wsf-2.0/ps_add_entity_response.i | 54 +++++ swig/id-wsf-2.0/ps_add_known_entity_request.i | 58 +++++ swig/id-wsf-2.0/ps_add_known_entity_response.i | 54 +++++ swig/id-wsf-2.0/ps_add_to_collection_request.i | 54 +++++ swig/id-wsf-2.0/ps_get_object_info_request.i | 54 +++++ swig/id-wsf-2.0/ps_get_object_info_response.i | 54 +++++ swig/id-wsf-2.0/ps_item_data.i | 54 +++++ swig/id-wsf-2.0/ps_list_members_request.i | 66 +++++ swig/id-wsf-2.0/ps_list_members_response.i | 54 +++++ swig/id-wsf-2.0/ps_notification.i | 54 +++++ swig/id-wsf-2.0/ps_notify.i | 55 +++++ swig/id-wsf-2.0/ps_object.i | 66 +++++ swig/id-wsf-2.0/ps_query_objects_request.i | 66 +++++ swig/id-wsf-2.0/ps_query_objects_response.i | 54 +++++ swig/id-wsf-2.0/ps_remove_collection_request.i | 54 +++++ swig/id-wsf-2.0/ps_remove_entity_request.i | 54 +++++ .../id-wsf-2.0/ps_remove_from_collection_request.i | 54 +++++ swig/id-wsf-2.0/ps_request_abstract.i | 67 +++++ swig/id-wsf-2.0/ps_resolve_identifier_request.i | 54 +++++ swig/id-wsf-2.0/ps_resolve_identifier_response.i | 54 +++++ swig/id-wsf-2.0/ps_resolve_input.i | 54 +++++ swig/id-wsf-2.0/ps_response_abstract.i | 81 +++++++ swig/id-wsf-2.0/ps_set_object_info_request.i | 54 +++++ swig/id-wsf-2.0/ps_test_membership_request.i | 54 +++++ swig/id-wsf-2.0/ps_test_membership_response.i | 54 +++++ swig/id-wsf-2.0/sb2_consent.i | 69 ++++++ swig/id-wsf-2.0/sb2_credentials_context.i | 81 +++++++ swig/id-wsf-2.0/sb2_endpoint_update.i | 55 +++++ swig/id-wsf-2.0/sb2_redirect_request.i | 55 +++++ swig/id-wsf-2.0/sb2_sender.i | 69 ++++++ swig/id-wsf-2.0/sb2_target_identity.i | 67 +++++ swig/id-wsf-2.0/sb2_timeout.i | 68 ++++++ swig/id-wsf-2.0/sb2_usage_directive.i | 68 ++++++ swig/id-wsf-2.0/sb2_user_interaction_header.i | 71 ++++++ swig/id-wsf-2.0/sbf_framework.i | 68 ++++++ swig/id-wsf-2.0/sec_token.i | 68 ++++++ swig/id-wsf-2.0/sec_token_policy.i | 82 +++++++ swig/id-wsf-2.0/sec_transited_provider_path.i | 54 +++++ swig/id-wsf-2.0/subs_notification.i | 58 +++++ swig/id-wsf-2.0/subs_notify_response.i | 54 +++++ swig/id-wsf-2.0/subs_ref_item.i | 56 +++++ swig/id-wsf-2.0/subs_subscription.i | 61 +++++ swig/id-wsf-2.0/subsref_app_data.i | 54 +++++ swig/id-wsf-2.0/subsref_create.i | 54 +++++ swig/id-wsf-2.0/subsref_create_item.i | 57 +++++ swig/id-wsf-2.0/subsref_create_response.i | 54 +++++ swig/id-wsf-2.0/subsref_data.i | 57 +++++ swig/id-wsf-2.0/subsref_data_response.i | 54 +++++ swig/id-wsf-2.0/subsref_delete.i | 54 +++++ swig/id-wsf-2.0/subsref_delete_item.i | 54 +++++ swig/id-wsf-2.0/subsref_delete_response.i | 54 +++++ swig/id-wsf-2.0/subsref_item_data.i | 57 +++++ swig/id-wsf-2.0/subsref_modify.i | 54 +++++ swig/id-wsf-2.0/subsref_modify_item.i | 58 +++++ swig/id-wsf-2.0/subsref_modify_response.i | 54 +++++ swig/id-wsf-2.0/subsref_notification.i | 54 +++++ swig/id-wsf-2.0/subsref_notify.i | 55 +++++ swig/id-wsf-2.0/subsref_notify_response.i | 54 +++++ swig/id-wsf-2.0/subsref_query.i | 54 +++++ swig/id-wsf-2.0/subsref_query_item.i | 58 +++++ swig/id-wsf-2.0/subsref_query_response.i | 54 +++++ swig/id-wsf-2.0/subsref_result_query.i | 54 +++++ swig/id-wsf-2.0/subsref_subscription.i | 54 +++++ swig/id-wsf-2.0/subsref_test_item.i | 54 +++++ swig/id-wsf-2.0/util_empty.i | 54 +++++ swig/id-wsf-2.0/util_extension.i | 54 +++++ swig/id-wsf-2.0/util_response.i | 82 +++++++ swig/id-wsf-2.0/util_status.i | 57 +++++ swig/ws/Makefile.am | 20 ++ swig/ws/inheritance.h | 17 ++ swig/ws/main.h | 34 +++ swig/ws/wsa_attributed_any.i | 67 +++++ swig/ws/wsa_attributed_qname.i | 68 ++++++ swig/ws/wsa_attributed_unsigned_long.i | 67 +++++ swig/ws/wsa_attributed_uri.i | 68 ++++++ swig/ws/wsa_endpoint_reference.i | 109 +++++++++ swig/ws/wsa_metadata.i | 67 +++++ swig/ws/wsa_problem_action.i | 85 +++++++ swig/ws/wsa_reference_parameters.i | 67 +++++ swig/ws/wsa_relates_to.i | 72 ++++++ swig/ws/wsse_embedded.i | 71 ++++++ swig/ws/wsse_reference.i | 75 ++++++ swig/ws/wsse_security_header.i | 67 +++++ swig/ws/wsse_security_token_reference.i | 75 ++++++ swig/ws/wsse_transformation_parameters.i | 67 +++++ swig/ws/wsse_username_token.i | 71 ++++++ swig/ws/wsu_timestamp.i | 79 ++++++ 473 files changed, 33620 insertions(+), 1069 deletions(-) commit 3940aaa707ab4f10abff6edfb11d60ad94dbda13 Author: Damien Laniel Date: Mon Jul 9 09:16:36 2007 +0000 _new function have no parameters and added some _new_full function instead lasso/xml/id-wsf-2.0/disco_endpoint_context.c | 9 ++++++++- lasso/xml/id-wsf-2.0/disco_endpoint_context.h | 6 ++++-- lasso/xml/id-wsf-2.0/disco_service_context.c | 9 ++++++++- lasso/xml/id-wsf-2.0/disco_service_context.h | 6 ++++-- lasso/xml/id-wsf-2.0/disco_svc_metadata.c | 6 +++--- lasso/xml/id-wsf-2.0/soap_binding_framework.c | 15 +++++++++++---- lasso/xml/id-wsf-2.0/soap_binding_framework.h | 4 +++- 7 files changed, 41 insertions(+), 14 deletions(-) commit 68583058a5be10adc23730322889f076dbd1009b Author: Damien Laniel Date: Mon Jul 9 09:15:48 2007 +0000 changed metadata_list attribute to SvcMD lasso/id-wsf-2.0/discovery.c | 5 ++--- lasso/xml/id-wsf-2.0/disco_svc_md_register.c | 8 ++++---- lasso/xml/id-wsf-2.0/disco_svc_md_register.h | 2 +- 3 files changed, 7 insertions(+), 8 deletions(-) commit 288bfa8b393398c0b83d9dbd1f8844c7fefcf409 Author: Frederic Peters Date: Fri Jul 6 18:47:55 2007 +0000 added namespaces used by other parts of id-wsf 2 lasso/xml/strings.h | 14 ++++++++++++++ 1 file changed, 14 insertions(+) commit 7a2d6aaf8ad40d52b0f50f34cb082e5fc21357d9 Author: Damien Laniel Date: Thu Jul 5 13:10:23 2007 +0000 check enveloppe existence in case lasso functions are called in wrong order lasso/errors.c | 2 ++ lasso/errors.h | 7 ++++--- lasso/id-wsf-2.0/data_service.c | 12 ++++++++++-- 3 files changed, 16 insertions(+), 5 deletions(-) commit 661486e124124116a9854070325391805e52e901 Author: Frederic Peters Date: Tue Jul 3 08:04:49 2007 +0000 hack around swig not declaring functions by declaring it ourself here, but it may break in a future swig version, this is just to get a clean build without any warning of the Python binding with SWIG 1.3.31... swig/Lasso.i | 6 ++++++ 1 file changed, 6 insertions(+) commit 68eb0aebb8bccd3f151170f2a4430da89254cf24 Author: Frederic Peters Date: Tue Jul 3 08:02:33 2007 +0000 get_node_info_with_swig may not be used by the python binding, but it sure is used by other bindings (and if we were only concerned by python we wouldn't use swig). swig/Lasso.i | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) commit e496531dc639607f4102b3f8119ef0438a6a1c92 Author: Damien Laniel Date: Mon Jul 2 16:43:19 2007 +0000 commented out an usused function to fix another swig warning swig/Lasso.i | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) commit 660e011f9e87e3c7071cab2808eb7aaae5afcdd3 Author: Damien Laniel Date: Mon Jul 2 16:39:58 2007 +0000 cleaned methods definitions to fix swig warnings swig/Lasso-saml2.i | 19 ++++------ swig/Lasso-wsf-disco.i | 10 +++-- swig/Lasso-wsf.i | 14 ++----- swig/Lasso.i | 101 ++++++++++++++++++++----------------------------- 4 files changed, 60 insertions(+), 84 deletions(-) commit e6035f1214c5680d59ab790a7b50f9d711c3a7c1 Author: Damien Laniel Date: Mon Jul 2 15:52:21 2007 +0000 fixed a swig warning in LassoServer swig/Lasso.i | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit d339e35bcf65bab2a4537207a45758843aa4d75b Author: Damien Laniel Date: Mon Jul 2 15:47:05 2007 +0000 fixed swig warnings for ID-WSF 1 swig/Lasso-wsf.i | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) commit b190d0816a17f545479d3055077b6df7a9a93ff6 Author: Damien Laniel Date: Mon Jul 2 15:35:22 2007 +0000 removed no more existing methods from id-wsf 1 swig bindings swig/Lasso-wsf.i | 4 ---- 1 file changed, 4 deletions(-) commit 4374ff6b491fdde4b42922da30961a8165e87f8f Author: Damien Laniel Date: Mon Jul 2 15:19:40 2007 +0000 moved type attribute which isn't herited swig/Lasso-wsf2.i | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) commit e684aa7d081b3a6ba21a1b0d074ef3cadea58d89 Author: Damien Laniel Date: Mon Jul 2 15:12:48 2007 +0000 added service.queryItems + some attributes initialisation and destruction lasso/id-wsf-2.0/data_service.c | 33 +++++++++++++++++++++++++++++++-- lasso/id-wsf-2.0/data_service.h | 1 + swig/Lasso-wsf2.i | 7 +++++++ 3 files changed, 39 insertions(+), 2 deletions(-) commit 1db332e9f8fff2b8a8b484fc9235f1280c2242f8 Author: Damien Laniel Date: Fri Jun 29 15:25:19 2007 +0000 added lasso.SOAP_FAULT_REDIRECT_REQUEST eception when WSP needs user consent + service.redirectUrl lasso/id-wsf-2.0/data_service.c | 48 ++++++++++++++++++++++++++++++++++++++++- lasso/id-wsf-2.0/data_service.h | 1 + swig/Lasso-wsf2.i | 7 ++++++ 3 files changed, 55 insertions(+), 1 deletion(-) commit f7c23d191021bda3b16ec09651d5f16fabf8e073 Author: Damien Laniel Date: Fri Jun 29 15:23:38 2007 +0000 added one soap error and text for other soap errors lasso/errors.c | 6 ++++++ lasso/errors.h | 1 + 2 files changed, 7 insertions(+) commit ea7c97779d8c03a0147251b20847ab757a9780f6 Author: Damien Laniel Date: Fri Jun 29 15:12:37 2007 +0000 added SoapBinding2 prefix to handle RedirectRequest lasso/xml/xml.c | 2 ++ 1 file changed, 2 insertions(+) commit dfe7e09a7fe22041dd757fada3c554215b1d0ec9 Author: Damien Laniel Date: Fri Jun 29 14:02:29 2007 +0000 added initRedirectUserForConsent lasso/id-wsf-2.0/data_service.c | 32 ++++++ lasso/id-wsf-2.0/data_service.h | 3 + lasso/xml/id-wsf-2.0/Makefile.am | 2 + .../id-wsf-2.0/soap_binding2_redirect_request.c | 119 +++++++++++++++++++++ .../id-wsf-2.0/soap_binding2_redirect_request.h | 82 ++++++++++++++ lasso/xml/strings.h | 8 +- swig/Lasso-wsf2.i | 7 +- 7 files changed, 251 insertions(+), 2 deletions(-) commit d816d74c1ab629abbf733577b4e53fafb9c9d5f0 Author: Frederic Peters Date: Tue Jun 19 11:16:17 2007 +0000 fixed class hierarchy, with ID-WSF 2 specific stuffs going into LassoIdWsf2Profile (which now inherits from LassoProfile). lasso/id-ff/profile.c | 11 ---- lasso/id-ff/profileprivate.h | 2 - lasso/id-wsf-2.0/data_service.c | 49 ++++++++------- lasso/id-wsf-2.0/data_service.h | 7 +-- lasso/id-wsf-2.0/discovery.c | 133 ++++++++++++++++++++------------------- lasso/id-wsf-2.0/discovery.h | 17 ++--- lasso/id-wsf-2.0/profile.c | 134 ++++++++++++++++++++++++++++++---------- lasso/id-wsf-2.0/profile.h | 49 ++++++++++++--- swig/Lasso-wsf2.i | 8 +-- 9 files changed, 248 insertions(+), 162 deletions(-) commit eefdf3b58697539f0113eb3e76b5e8d83fd1da56 Author: Damien Laniel Date: Mon Jun 18 09:43:47 2007 +0000 moved soap_envelope_request and soap_envelope_response to ProfilePrivate to avoid ABI breackage lasso/id-ff/profile.c | 16 ++++++++-------- lasso/id-ff/profile.h | 4 ---- lasso/id-ff/profileprivate.h | 4 ++++ lasso/id-wsf-2.0/data_service.c | 2 +- lasso/id-wsf-2.0/discovery.c | 6 +++--- lasso/id-wsf-2.0/profile.c | 16 +++++++++------- lasso/id-wsf-2.0/profile.h | 1 + swig/Lasso-wsf2.i | 18 ------------------ 8 files changed, 26 insertions(+), 41 deletions(-) commit 514b15a52f405327c000883bc01cb67ba1cb94ea Author: Damien Laniel Date: Thu Jun 14 17:50:40 2007 +0000 rephrase a meaningless sentence docs/lasso-book/writing-a-c-sp.txt | 5 +++-- docs/lasso-book/writing-a-php-sp.txt | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) commit 6a5f0479a14268ac080e6b942e3def0d8564fb56 Author: Damien Laniel Date: Thu Jun 14 17:40:47 2007 +0000 fixed spelling mistake docs/lasso-book/writing-a-c-sp.txt | 2 +- docs/lasso-book/writing-a-php-sp.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 55fa1788362f7c05ee5f889eb539741d0b0a19a7 Author: Damien Laniel Date: Thu Jun 14 17:29:15 2007 +0000 changed responseMsg to answer for consistency docs/lasso-book/writing-a-php-sp.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 9a0dbf9d8a230852914785cf0fe42628de314ca8 Author: Damien Laniel Date: Thu Jun 14 17:25:10 2007 +0000 added 2 lines to get the docs/lasso-book/writing-a-php-sp.txt | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) commit a32236b852cd05ee1f0eebfd87b9e81405ab2b68 Author: Damien Laniel Date: Thu Jun 14 17:19:33 2007 +0000 added keys and metadata creation docs/lasso-book/writing-a-c-sp.txt | 74 ++++++++++++++++++++++++++++++++++ docs/lasso-book/writing-a-java-sp.txt | 33 +++++++++++---- docs/lasso-book/writing-a-php-sp.txt | 76 ++++++++++++++++++++++++++++++++++- 3 files changed, 174 insertions(+), 9 deletions(-) commit e94f0ef2189f4340e50e86e2377d4b861a40cb07 Author: Damien Laniel Date: Thu Jun 14 17:03:29 2007 +0000 added a line to tell to restart Apache 2 docs/lasso-book/writing-a-php-sp.txt | 1 + 1 file changed, 1 insertion(+) commit 2b17cdf029e2b117d7d4d99b52e935ea4a2a7394 Author: Damien Laniel Date: Wed Jun 13 17:24:42 2007 +0000 moved epr free from finalize to dispose lasso/id-wsf-2.0/data_service.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) commit fe53a31b61b428defd593bac2ea0f3135d37ae1a Author: Damien Laniel Date: Wed Jun 13 16:41:56 2007 +0000 fixed EncryptedID usage ; last commit was a mistake lasso/id-wsf-2.0/profile.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit ac2f69df35cd58601f5e7dcafb3c0d0f505bd010 Author: Damien Laniel Date: Wed Jun 13 16:29:56 2007 +0000 use nameIdentifier attribute of LassoProfile for IdWsf2 profiles lasso/id-wsf-2.0/profile.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 39828bd62c71b5b6ecb4743bc1fcc8dc5ff976df Author: Damien Laniel Date: Wed Jun 13 15:58:07 2007 +0000 uncomment a useful line lasso/id-wsf-2.0/profile.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 56b653cc55d65bff82d22d73b295f0dd187ba30c Author: Damien Laniel Date: Wed Jun 13 15:45:38 2007 +0000 use nameIdentifier attribute of LassoProfile for IdWsf2 profiles lasso/id-ff/profile.h | 3 --- lasso/id-wsf-2.0/data_service.c | 4 ++-- lasso/id-wsf-2.0/profile.c | 27 ++++++++++++++++----------- swig/Lasso-wsf2.i | 24 ++++++++++++++---------- 4 files changed, 32 insertions(+), 26 deletions(-) commit fdf3feef49f2ae01e1eee48ca5c4275b20670da1 Author: Damien Laniel Date: Wed Jun 13 15:43:32 2007 +0000 initialise and destroy new attributes lasso/id-ff/profile.c | 11 +++++++++++ 1 file changed, 11 insertions(+) commit fececc47cd8b1f171ae452c72f3a33f8eec7dc65 Author: Damien Laniel Date: Wed Jun 13 14:17:26 2007 +0000 removed IdWsf2Profile and use LassoProfile instead lasso/id-wsf-2.0/{wsf2_profile.c => profile.c} | 242 ++------------------- .../{wsf2_profile_private.h => profile.h} | 33 ++- lasso/id-wsf-2.0/wsf2_profile.h | 115 ---------- 3 files changed, 34 insertions(+), 356 deletions(-) commit 82d2325934b2253fa60d2fbe683cc3a6c3617913 Author: Damien Laniel Date: Wed Jun 13 14:14:57 2007 +0000 removed IdWsf2Profile and use LassoProfile instead lasso/id-ff/profile.h | 7 ++ lasso/id-wsf-2.0/Makefile.am | 4 -- lasso/id-wsf-2.0/data_service.c | 16 ++--- lasso/id-wsf-2.0/data_service.h | 4 +- lasso/id-wsf-2.0/discovery.c | 34 +++++----- lasso/id-wsf-2.0/discovery.h | 4 +- swig/Lasso-wsf2.i | 147 ++++++++++++++++++++-------------------- 7 files changed, 110 insertions(+), 106 deletions(-) commit 82a74501824f3bfb7917c087c517954a329040dd Author: Damien Laniel Date: Wed Jun 13 13:17:51 2007 +0000 fixed gcj warnings + added 2 checks java/tests/LoginTest.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 1915d25a8a0cfc7000f913f042dcde55a1569c4f Author: Damien Laniel Date: Wed Jun 13 13:13:59 2007 +0000 fixed tabs and spaces mix java/tests/LoginTest.java | 108 +++++++++++++++++++++++----------------------- 1 file changed, 54 insertions(+), 54 deletions(-) commit d90bb4c5b97c3df9597ba21f34142d036feeb77f Author: Damien Laniel Date: Wed Jun 13 13:09:22 2007 +0000 fix documentation for getting nameIdentifier content docs/lasso-book/writing-a-java-sp.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit b60e5b0ea14b47e83866fc13baab0188fb983902 Author: Damien Laniel Date: Wed Jun 13 13:07:49 2007 +0000 fix for getting nameIdentifier content java/tests/LoginTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 86da20c7416f881583d865a2f27b85a06678a56d Author: Damien Laniel Date: Wed Jun 13 12:59:27 2007 +0000 renamed Wsf2Profile to IdWsf2Profile lasso/id-wsf-2.0/Makefile.am | 6 +- lasso/id-wsf-2.0/data_service.c | 22 +++---- lasso/id-wsf-2.0/data_service.h | 6 +- lasso/id-wsf-2.0/discovery.c | 54 ++++++++--------- lasso/id-wsf-2.0/discovery.h | 6 +- swig/Lasso-wsf2.i | 124 ++++++++++++++++++++-------------------- 6 files changed, 109 insertions(+), 109 deletions(-) commit b51330fe820a5ff9156f7aa0f55fa307de10b042 Author: Damien Laniel Date: Wed Jun 13 12:19:48 2007 +0000 changed buildQueryResponseMsg to parseQueryItems + buildResponseMsg lasso/id-wsf-2.0/data_service.c | 7 ++++--- lasso/id-wsf-2.0/data_service.h | 3 +-- swig/Lasso-wsf2.i | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) commit 6b88ea8e017b7f0e4f8d0accdb741ead2e04d12a Author: Damien Laniel Date: Wed Jun 13 12:01:54 2007 +0000 coding style lasso/id-wsf/discovery.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit be7b6a08983a52fc8587429e3465bbeccec9df48 Author: Damien Laniel Date: Wed Jun 13 11:58:40 2007 +0000 changed buildQueryResponseMsg to buildQueryResponseEprs + buildResponseMsg lasso/id-wsf-2.0/discovery.c | 8 +++----- lasso/id-wsf-2.0/discovery.h | 2 +- swig/Lasso-wsf2.i | 4 ++-- 3 files changed, 6 insertions(+), 8 deletions(-) commit 1f802571d03bb9f33ec5800a57145d0e6531aa15 Author: Damien Laniel Date: Wed Jun 13 10:14:41 2007 +0000 replaced two strings with a constant lasso/id-wsf-2.0/discovery.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit bd0913130c776210e5ecc10d70fd665025447ec7 Author: Damien Laniel Date: Wed Jun 13 10:09:55 2007 +0000 better error handling + some refactoring lasso/errors.c | 13 +++++-- lasso/errors.h | 10 +++-- lasso/id-wsf-2.0/data_service.c | 53 +++++++++++++++++++++----- lasso/id-wsf-2.0/discovery.c | 84 +++++++++++++++++++++-------------------- lasso/xml/strings.h | 6 ++- swig/Lasso.i | 42 ++++++++++++++++++++- 6 files changed, 146 insertions(+), 62 deletions(-) commit 2726db1fb7a7c40b4e10cdf5b2bfb3ef47270dfa Author: Damien Laniel Date: Wed Jun 13 09:47:35 2007 +0000 removed a duplicate swig/Lasso.i | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit 5ac539dff89c1fecdc0f914992ecd84bd2be990d Author: Damien Laniel Date: Tue Jun 12 15:44:32 2007 +0000 split lasso_idwsf2_discovery_process_query_msg for the SP to get the name_id and load the identity dump in between lasso/id-wsf-2.0/discovery.c | 34 ++++++++++++++++++++++++---------- lasso/id-wsf-2.0/discovery.h | 4 +++- swig/Lasso-wsf2.i | 5 +++++ 3 files changed, 32 insertions(+), 11 deletions(-) commit 1f0028b57e5402dea42c86cf951a36d5c39f2e3b Author: Damien Laniel Date: Tue Jun 12 14:18:39 2007 +0000 decrypt nameId in identity token lasso/id-wsf-2.0/wsf2_profile.c | 50 ++++++++++++++++++++++++++++------------- 1 file changed, 35 insertions(+), 15 deletions(-) commit 91f0bdc61d0889d0a424c6327c175c89d8857e27 Author: Damien Laniel Date: Tue Jun 12 14:17:50 2007 +0000 encrypt nameId in profile identity token lasso/id-wsf-2.0/discovery.c | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) commit e8e38c374d52a0563519cfadd11f42b057e7580c Author: Damien Laniel Date: Tue Jun 12 14:15:55 2007 +0000 coding style lasso/saml-2.0/provider.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) commit 61bc3ec141f5cfd958209ba87088b643f50003b4 Author: Damien Laniel Date: Tue Jun 12 14:15:37 2007 +0000 added comments lasso/saml-2.0/login.c | 2 ++ 1 file changed, 2 insertions(+) commit ab50d81a12437b138b802e4a4b2bdcf16915eb0b Author: Damien Laniel Date: Tue Jun 12 14:14:57 2007 +0000 coding style + comments lasso/id-ff/provider.c | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) commit ebdd769f0317b95f6630cd0a271ad45f82e6602d Author: Damien Laniel Date: Tue Jun 12 14:10:34 2007 +0000 save provider encryption in dumps and reload it from dump + reloads the keys after loading a dump lasso/id-ff/provider.c | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) commit d10770c933aff001b794dd1023593cfe9196eece Author: Damien Laniel Date: Tue Jun 12 14:05:38 2007 +0000 moved xmlenc.h include where it is really needed lasso/xml/xml.h | 2 -- lasso/xml/xml_enc.h | 2 ++ 2 files changed, 2 insertions(+), 2 deletions(-) commit b92d470646000d78cba30c477acc96f73f62c05d Author: Damien Laniel Date: Mon Jun 11 16:06:20 2007 +0000 get the identity token from the current epr lasso/id-ff/session.c | 6 +++--- lasso/id-wsf-2.0/data_service.c | 5 +++-- lasso/id-wsf-2.0/discovery.c | 8 +++++--- lasso/id-wsf-2.0/session.h | 2 +- lasso/id-wsf-2.0/wsf2_profile.c | 5 +++-- lasso/id-wsf-2.0/wsf2_profile.h | 2 +- 6 files changed, 16 insertions(+), 12 deletions(-) commit 5188108f367a0837047956830c558e54458fd5ff Author: Damien Laniel Date: Mon Jun 11 15:29:36 2007 +0000 added a security token in all eprs (only disco eprs had one before) lasso/id-wsf-2.0/discovery.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) commit 800f145069e263873d2680ca66b5129bbaef301d Author: Damien Laniel Date: Mon Jun 11 15:27:50 2007 +0000 fixed warnings lasso/id-wsf-2.0/data_service.c | 3 ++- lasso/id-wsf-2.0/discovery.c | 2 +- lasso/saml-2.0/login.c | 1 - 3 files changed, 3 insertions(+), 3 deletions(-) commit fa76cfccf4192644ec1ad2f99b090885a95e593c Author: Damien Laniel Date: Mon Jun 11 15:27:03 2007 +0000 removed a duplicate line lasso/id-ff/federation.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit e9845810e9eb811f053f49b882c6506043f9bae9 Author: Damien Laniel Date: Mon Jun 11 09:10:32 2007 +0000 various error checks, coding style and refactoring lasso/errors.h | 3 ++ lasso/id-wsf-2.0/data_service.c | 31 ++++++++++++++++---- lasso/id-wsf-2.0/discovery.c | 65 ++++++++++++++++++++++++----------------- 3 files changed, 67 insertions(+), 32 deletions(-) commit 70b23a23eb0867a965845a13be7b2a34e58996b8 Author: Damien Laniel Date: Mon Jun 11 09:10:18 2007 +0000 removed a useless line python/tests/binding_tests.py | 1 - 1 file changed, 1 deletion(-) commit 6d5dbb6b64066c2a98ef8b1ab9a2dd490e283144 Author: Frederic Peters Date: Sat Jun 9 12:16:50 2007 +0000 fixed LassoIdWsf2DiscoSvcMetadata binding constructor swig/id-wsf-2.0/disco_svc_metadata.i | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 32aff7ef142b3aba56bd9944f56c304eedbffc5e Author: Frederic Peters Date: Fri Jun 8 18:16:42 2007 +0000 differentiate between id-wsf 1 & 2 since this is what is expected in other places (won't work as easily for DST) lasso/id-ff/profile.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit 6ef47339f7a0fd61cf4f7e5e6027eaf6bdff9745 Author: Frederic Peters Date: Fri Jun 8 18:10:13 2007 +0000 recognize ID-WSF 2 disco query messages lasso/id-ff/profile.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 6886b79b93f1d31b3dc932e6693ea270f4c12d17 Author: Damien Laniel Date: Fri Jun 8 15:16:22 2007 +0000 various error checks, coding style and refactoring lasso/errors.c | 15 +++ lasso/errors.h | 5 + lasso/id-wsf-2.0/discovery.c | 102 ++++++++++++--------- lasso/xml/id-wsf-2.0/disco_query_response.c | 2 +- lasso/xml/id-wsf-2.0/disco_query_response.h | 2 +- lasso/xml/id-wsf-2.0/disco_requested_service.c | 2 +- lasso/xml/id-wsf-2.0/disco_requested_service.h | 2 +- .../xml/id-wsf-2.0/disco_svc_md_association_add.c | 2 +- .../xml/id-wsf-2.0/disco_svc_md_association_add.h | 3 +- .../disco_svc_md_association_add_response.c | 2 +- .../disco_svc_md_association_add_response.h | 3 +- lasso/xml/id-wsf-2.0/disco_svc_md_register.c | 8 +- lasso/xml/id-wsf-2.0/disco_svc_md_register.h | 4 +- .../id-wsf-2.0/disco_svc_md_register_response.c | 3 +- .../id-wsf-2.0/disco_svc_md_register_response.h | 3 +- lasso/xml/ws/wsa_attributed_uri.c | 11 ++- lasso/xml/ws/wsa_attributed_uri.h | 4 +- lasso/xml/ws/wsa_endpoint_reference.c | 2 +- lasso/xml/ws/wsa_endpoint_reference.h | 2 +- lasso/xml/ws/wsa_metadata.c | 2 +- lasso/xml/ws/wsa_metadata.h | 2 +- 21 files changed, 113 insertions(+), 68 deletions(-) commit bb00c74ce3d6f2a28a73df0520b63a0da3c4cc5a Author: Damien Laniel Date: Fri Jun 8 13:06:43 2007 +0000 removed useless arguments for lasso_idwsf2_discovery_init_metadata_association_add lasso/id-wsf-2.0/discovery.c | 2 +- lasso/id-wsf-2.0/discovery.h | 2 +- swig/Lasso-wsf2.i | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) commit 6bd1d65a1992c822a8fa37f12740f3d4d2176b15 Author: Damien Laniel Date: Fri Jun 8 11:42:21 2007 +0000 removed lasso_idwsf2_data_service_get_personal_profile_email lasso/id-wsf-2.0/data_service.c | 46 ----------------------------------------- lasso/id-wsf-2.0/data_service.h | 3 --- swig/Lasso-wsf2.i | 4 ---- 3 files changed, 53 deletions(-) commit 82bcbf0a8426cddaac30a9653d8aebc78287f984 Author: Damien Laniel Date: Fri Jun 8 11:42:06 2007 +0000 if the user wasn't yet associated to a discovery metadata, associate it + added some commments lasso/saml-2.0/login.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) commit dfd24887423eb98c50e50e5a4ad5e654d7932c71 Author: Damien Laniel Date: Fri Jun 8 10:16:04 2007 +0000 if a user hasn't been associated to a discovery metadata, give him a default disco epr lasso/id-ff/server.c | 27 +++++++++++++++++---------- lasso/saml-2.0/login.c | 4 ++++ 2 files changed, 21 insertions(+), 10 deletions(-) commit 71711d1862f5223a0a961591d322a4f2763113f5 Author: Damien Laniel Date: Fri Jun 8 09:14:37 2007 +0000 added lasso_idwsf2_discovery_metadata_register_self and lasso_idwsf2_data_service_get_personal_profile_email lasso/id-ff/server.c | 1 + lasso/id-wsf-2.0/data_service.c | 46 +++++++++++++++++++++++++++++++++++++++++ lasso/id-wsf-2.0/data_service.h | 3 +++ lasso/id-wsf-2.0/discovery.c | 45 ++++++++++++++++++++++++++++++++++++++-- lasso/id-wsf-2.0/discovery.h | 4 ++++ swig/Lasso-wsf2.i | 13 ++++++++++-- 6 files changed, 108 insertions(+), 4 deletions(-) commit 837805ccfc644359b438d12b5c01412ccc0c136d Author: Frederic Peters Date: Thu Jun 7 15:31:56 2007 +0000 noted about memleak to be fixed later lasso/id-ff/identity.c | 1 + 1 file changed, 1 insertion(+) commit bb8e783e5698e50f66b443b872c488719ea53ff9 Author: Frederic Peters Date: Thu Jun 7 15:22:38 2007 +0000 properly allocate memory for svcMDID lasso/id-wsf-2.0/discovery.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 3923e640cc61493f22d3c6d955339675ec85d02e Author: Damien Laniel Date: Thu Jun 7 14:31:20 2007 +0000 check all function arguments in session and identity lasso/id-ff/identity.c | 30 ++++++++++++++++++++++++++---- lasso/id-ff/session.c | 27 ++++++++++++++++++--------- 2 files changed, 44 insertions(+), 13 deletions(-) commit 36dbe4155eae4341aae39f58e2fa2aa7536e111e Author: Damien Laniel Date: Thu Jun 7 13:32:09 2007 +0000 check session existence lasso/id-ff/session.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) commit 7db5d0d33d2e14a5aabcd620173d274142da3d3b Author: Frederic Peters Date: Thu Jun 7 13:29:15 2007 +0000 be robust, check for possible NULL variables. lasso/id-wsf-2.0/discovery.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) commit 227239cc12817ee1ea8153cdd5fa4e772a8db662 Author: Damien Laniel Date: Thu Jun 7 13:13:10 2007 +0000 memory management in lasso_idwsf2_data_service_get_attribute_string lasso/id-wsf-2.0/data_service.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit 8d5ff46e8f87156f96622af488594d053b04dd47 Author: Damien Laniel Date: Thu Jun 7 13:05:25 2007 +0000 small fixes in lasso_idwsf2_data_service_get_attribute_string lasso/id-wsf-2.0/data_service.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 189562fa949f2a9147317feae1154ef9b52fd35b Author: Damien Laniel Date: Thu Jun 7 12:59:48 2007 +0000 one more argument check + free node memory lasso/id-wsf-2.0/data_service.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) commit beb49ef5b3017eebed8991a839279e9edf11ee6d Author: Damien Laniel Date: Thu Jun 7 12:54:17 2007 +0000 added some checks on arguments lasso/id-wsf-2.0/data_service.c | 10 ++++++++++ 1 file changed, 10 insertions(+) commit e89552953e3eca5a96a23ea0b569df070a827fce Author: Damien Laniel Date: Thu Jun 7 12:49:42 2007 +0000 added lasso_idwsf2_data_service_get_attribute_string lasso/id-wsf-2.0/data_service.c | 12 ++++++++++-- lasso/id-wsf-2.0/data_service.h | 3 +++ swig/Lasso-wsf2.i | 4 ++++ 3 files changed, 17 insertions(+), 2 deletions(-) commit cb00d56e4efd8ae21c05024fdd040edd7f42d73d Author: Damien Laniel Date: Thu Jun 7 10:20:45 2007 +0000 added lasso_idwsf2_data_service_get_attribute_node lasso/id-wsf-2.0/data_service.c | 42 +++++++++++++++++++++++++++++++++++++++++ lasso/id-wsf-2.0/data_service.h | 3 +++ lasso/xml/xml.c | 2 ++ swig/Lasso-wsf2.i | 5 +++++ 4 files changed, 52 insertions(+) commit 3d445940778f8cab095f03445d81a89a3204fe9d Author: Damien Laniel Date: Thu Jun 7 09:17:22 2007 +0000 fixed gcc warnings lasso/xml/id-wsf-2.0/dstref_query_response.c | 2 -- lasso/xml/private.h | 2 +- lasso/xml/xml.c | 6 +++--- 3 files changed, 4 insertions(+), 6 deletions(-) commit 4b5d13297286ec722c304ff41579bf8a819d3fff Author: Frederic Peters Date: Thu Jun 7 00:20:07 2007 +0000 extended xml_insure_namespace so it creates the namespace itself, after having looked for a preexisting namespace; the function was previously called with ns == NULL, which caused namespace to be *removed* from elements (ns was NULL because xmlNewNs will return NULL when the namespace is already defined). lasso/xml/id-wsf-2.0/dstref_query.c | 7 +++---- lasso/xml/id-wsf-2.0/dstref_query_response.c | 7 ++++--- lasso/xml/private.h | 3 ++- lasso/xml/xml.c | 15 +++++++++++++-- 4 files changed, 22 insertions(+), 10 deletions(-) commit ce561aa93748beebdc94c34e86deeefdbcd416cf Author: Frederic Peters Date: Thu Jun 7 00:17:30 2007 +0000 first snippet member is a name; looking for an element named "any" won't work that often... lasso/xml/id-wsf-2.0/dstref_item_data.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 304a1a9d3e42bdd24033bb383161370410691971 Author: Frederic Peters Date: Thu Jun 7 00:16:35 2007 +0000 copied note from LIST_NODES to LIST_XMLNODES since the same behaviour is present in both. docs/reference/snippet-types.rst | 6 ++++++ 1 file changed, 6 insertions(+) commit 0456a5fa1c53cc9f13a343d3893ab4d0f6be5aa8 Author: Damien Laniel Date: Wed Jun 6 09:39:08 2007 +0000 removed useless line lasso/id-wsf/data_service.c | 1 - 1 file changed, 1 deletion(-) commit bfcf64f36888f74f71762eac537c61b8e6fffc11 Author: Damien Laniel Date: Wed Jun 6 09:32:41 2007 +0000 DST processQueryResponseMsg lasso/id-wsf-2.0/data_service.c | 15 +++++++++++++++ lasso/id-wsf-2.0/data_service.h | 3 +++ swig/Lasso-wsf2.i | 7 ++++++- 3 files changed, 24 insertions(+), 1 deletion(-) commit c246e3779d34bf8637de96c14b5baa3be6e3234c Author: Damien Laniel Date: Wed Jun 6 09:19:12 2007 +0000 changed QueryResponse items data from string to xmlNode lasso/id-wsf-2.0/data_service.c | 29 +---------------------------- lasso/xml/id-wsf-2.0/dstref_item_data.c | 24 +++--------------------- lasso/xml/id-wsf-2.0/dstref_item_data.h | 3 ++- 3 files changed, 6 insertions(+), 50 deletions(-) commit 2371c8003d3ab22596b13b0ad4ebe6d21386a9ed Author: Damien Laniel Date: Wed Jun 6 08:24:15 2007 +0000 added missing files lasso/xml/id-wsf-2.0/dstref_data.c | 117 +++++++++++++++++++++++++++ lasso/xml/id-wsf-2.0/dstref_data.h | 84 +++++++++++++++++++ lasso/xml/id-wsf-2.0/dstref_item_data.c | 138 ++++++++++++++++++++++++++++++++ lasso/xml/id-wsf-2.0/dstref_item_data.h | 86 ++++++++++++++++++++ 4 files changed, 425 insertions(+) commit c87a3a73316ad59b0d46c0e9a7fa09e6383b4552 Author: Frederic Peters Date: Tue Jun 5 21:23:57 2007 +0000 fixed Python scripts Damien broke when he updated copyright without checking. php/patch_swig_output.py | 2 +- python/tests/XmlTestRunner.py | 2 +- python/tests/binding_tests.py | 2 +- python/tests/errorchecking_tests.py | 2 +- python/tests/profiles_tests.py | 2 +- python/tests/tests.py | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) commit 04940cd36250ff87e66a9746ab291406de26c54c Author: Damien Laniel Date: Tue Jun 5 17:36:09 2007 +0000 added service.data and lasso_idwsf2_data_service_build_query_response_msg lasso/id-wsf-2.0/data_service.c | 104 +++++++++++++++++++++++++-- lasso/id-wsf-2.0/data_service.h | 3 + lasso/xml/id-wsf-2.0/Makefile.am | 4 ++ lasso/xml/id-wsf-2.0/dstref_query.c | 16 +---- lasso/xml/id-wsf-2.0/dstref_query_response.c | 41 ++++++++++- lasso/xml/id-wsf-2.0/dstref_query_response.h | 6 +- lasso/xml/id-wsf-2.0/util_response.h | 2 +- lasso/xml/private.h | 2 + lasso/xml/xml.c | 14 ++++ swig/Lasso-wsf2.i | 20 ++++++ 10 files changed, 190 insertions(+), 22 deletions(-) commit bd82a01c17e526bc84a35c498817b02f3823f493 Author: Damien Laniel Date: Tue Jun 5 14:21:44 2007 +0000 remove a print lasso/id-wsf-2.0/data_service.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit eb5ca4d49977e250b24fb30d9dac6b8eb6072065 Author: Damien Laniel Date: Tue Jun 5 14:21:29 2007 +0000 Copy session form discovery to data service object lasso/id-wsf-2.0/discovery.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 1b43fbd59d6f2720f2fe2f14af2d5921d328e194 Author: Damien Laniel Date: Tue Jun 5 13:05:42 2007 +0000 added dst profile registration lasso/id-wsf-2.0/data_service.c | 20 +++++++++++++++- lasso/id-wsf-2.0/data_service.h | 7 +++--- lasso/xml/id-wsf-2.0/dstref_query.c | 2 +- lasso/xml/xml.c | 47 ++++++++++++++++++++++++++++++------- lasso/xml/xml.h | 2 ++ swig/Lasso-wsf2.i | 19 ++++++++++++++- swig/Lasso.i | 3 ++- 7 files changed, 85 insertions(+), 15 deletions(-) commit 5f24722fd9164508adb1d5ef3526d02576cd4edf Author: Damien Laniel Date: Tue Jun 5 12:21:07 2007 +0000 cosmetics lasso/xml/xml.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) commit 0eb84e618078837bbbba61c35a5b9e4aff067d95 Author: Damien Laniel Date: Mon Jun 4 16:23:20 2007 +0000 use profile namespace for dst queries + added server as parameter to basic IdWsf2DataService constructor lasso/id-wsf-2.0/data_service.c | 43 +++++++++++++++++++++++++----- lasso/id-wsf-2.0/data_service.h | 2 +- lasso/xml/id-wsf-2.0/dstref_query.c | 52 +++++++++++++++++++++++++++++++++++++ lasso/xml/id-wsf-2.0/dstref_query.h | 5 +++- 4 files changed, 94 insertions(+), 8 deletions(-) commit d9e89319796aa680c8f006cec7dc2cb04b8e6d64 Author: Damien Laniel Date: Mon Jun 4 16:20:53 2007 +0000 moved identity token code from discovery to wsf2_profile lasso/id-wsf-2.0/discovery.c | 39 ---------------------------- lasso/id-wsf-2.0/wsf2_profile.c | 57 +++++++++++++++++++++++++++++++++++++---- 2 files changed, 52 insertions(+), 44 deletions(-) commit 41ec34ede5ea32b9643d23b05440095e34123259 Author: Damien Laniel Date: Mon Jun 4 11:59:36 2007 +0000 make some queryItem attributes optional lasso/xml/id-wsf-2.0/dst_result_query_base.c | 4 ++-- lasso/xml/id-wsf-2.0/dstref_query_item.c | 8 ++++---- lasso/xml/id-wsf-2.0/dstref_query_item.h | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) commit 38772af6073cbbfbbabfaeb2feb8eddad13a9e54 Author: Frederic Peters Date: Mon Jun 4 10:18:14 2007 +0000 returned objects must go through the binding; fix ID-WSF2 disco.getService swig/Lasso-wsf2.i | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 0bdf658ab969d4f3db1b2bffdb7679dab653f093 Author: Damien Laniel Date: Mon Jun 4 10:02:08 2007 +0000 removed useless code lasso/id-wsf-2.0/discovery.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) commit befd279632313993410a95d067e29e077c1cf559 Author: Damien Laniel Date: Mon Jun 4 09:57:05 2007 +0000 swig binding for some ID WSF 2 functions + changed some types lasso/id-wsf-2.0/data_service.c | 22 +++-- lasso/id-wsf-2.0/data_service.h | 2 +- lasso/id-wsf-2.0/discovery.c | 12 ++- lasso/id-wsf-2.0/discovery.h | 2 +- lasso/xml/id-wsf-2.0/Makefile.am | 7 +- lasso/xml/id-wsf-2.0/dst_data_response_base.c | 2 +- swig/Lasso-wsf2.i | 131 ++++++++++++++++++++++++-- 7 files changed, 150 insertions(+), 28 deletions(-) commit a5d7920e14616b159f30e3059a80732b15b6732c Author: Damien Laniel Date: Fri Jun 1 10:44:32 2007 +0000 added lasso_idwsf2_data_service_init_query and lasso_idwsf2_data_service_add_query_item lasso/errors.h | 2 ++ lasso/id-wsf-2.0/data_service.c | 58 +++++++++++++++++++++++++++++++++++-- lasso/id-wsf-2.0/data_service.h | 23 +++++---------- lasso/xml/id-wsf-2.0/dstref_query.c | 4 +-- lasso/xml/id-wsf-2.0/dstref_query.h | 5 ++-- 5 files changed, 69 insertions(+), 23 deletions(-) commit e5b485b96fdbb9fef266e557e179be55aeeeaf3e Author: Damien Laniel Date: Fri Jun 1 09:56:13 2007 +0000 added some node class for id-wsf-2.0 DST lasso/xml/id-wsf-2.0/Makefile.am | 25 ++++- lasso/xml/id-wsf-2.0/dst_data_response_base.c | 110 +++++++++++++++++++++ lasso/xml/id-wsf-2.0/dst_data_response_base.h | 83 ++++++++++++++++ lasso/xml/id-wsf-2.0/dst_request.c | 118 ++++++++++++++++++++++ lasso/xml/id-wsf-2.0/dst_request.h | 84 ++++++++++++++++ lasso/xml/id-wsf-2.0/dst_result_query_base.c | 136 ++++++++++++++++++++++++++ lasso/xml/id-wsf-2.0/dst_result_query_base.h | 89 +++++++++++++++++ lasso/xml/id-wsf-2.0/dstref_query.c | 118 ++++++++++++++++++++++ lasso/xml/id-wsf-2.0/dstref_query.h | 83 ++++++++++++++++ lasso/xml/id-wsf-2.0/dstref_query_item.c | 134 +++++++++++++++++++++++++ lasso/xml/id-wsf-2.0/dstref_query_item.h | 86 ++++++++++++++++ lasso/xml/id-wsf-2.0/dstref_query_response.c | 117 ++++++++++++++++++++++ lasso/xml/id-wsf-2.0/dstref_query_response.h | 84 ++++++++++++++++ lasso/xml/id-wsf-2.0/dstref_result_query.c | 117 ++++++++++++++++++++++ lasso/xml/id-wsf-2.0/dstref_result_query.h | 85 ++++++++++++++++ lasso/xml/id-wsf-2.0/dstref_sort.c | 127 ++++++++++++++++++++++++ lasso/xml/id-wsf-2.0/dstref_sort.h | 82 ++++++++++++++++ lasso/xml/id-wsf-2.0/util_response.c | 122 +++++++++++++++++++++++ lasso/xml/id-wsf-2.0/util_response.h | 86 ++++++++++++++++ 19 files changed, 1884 insertions(+), 2 deletions(-) commit 52b478f0d29e2926d2736f3cf6d6b228b27c5191 Author: Damien Laniel Date: Wed May 30 17:44:30 2007 +0000 updated Copyright dates in some more remaining files copyright | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 1cb4fed44516ddf1f5a5ba9ce6788726314ad193 Author: Damien Laniel Date: Wed May 30 17:44:30 2007 +0000 updated Copyright dates in some more remaining files README | 2 +- debian/copyright | 2 +- docs/lasso-book/book.rst | 2 +- docs/lasso-book/writing-a-c-sp.txt | 2 +- docs/lasso-book/writing-a-java-sp.txt | 2 +- docs/lasso-book/writing-a-php-sp.txt | 2 +- docs/lasso-book/writing-a-saml2-php-sp.txt | 2 +- website/templates/base.ezt | 2 +- website/web/license.xml | 2 +- win32/lasso.rc.in | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) commit f373f536fcf01b011c5b15f134d0cf7ead977877 Author: Damien Laniel Date: Wed May 30 17:28:28 2007 +0000 revert copyright changed by mistake website/ezt.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 34f65f801fc8fff2cb717716113cdd621d3207ae Author: Damien Laniel Date: Wed May 30 17:24:50 2007 +0000 updated Copyright dates in remaining files csharp/tests/BindingTests.cs | 2 +- java/coldfusion/src/CFLassoSingleLogout.java | 2 +- java/coldfusion/src/CFLassoSingleSignOn.java | 2 +- java/tests/BindingTests.java | 2 +- java/tests/LoginTest.java | 2 +- perl/tests/binding_tests.pl | 2 +- php/patch_swig_output.py | 2 +- php/tests/binding_tests.php | 2 +- php/tests/perfs.php | 2 +- python/tests/XmlTestRunner.py | 2 +- python/tests/binding_tests.py | 2 +- python/tests/errorchecking_tests.py | 2 +- python/tests/profiles_tests.py | 2 +- python/tests/tests.py | 2 +- website/ezt.py | 2 +- 15 files changed, 15 insertions(+), 15 deletions(-) commit 4fc6657e0c3ca31f81761ed678ecb8989b4dd8b7 Author: Damien Laniel Date: Wed May 30 17:17:45 2007 +0000 updated Copyright dates in all files lasso/errors.c | 2 +- lasso/errors.h | 2 +- lasso/export.h | 2 +- lasso/id-ff/defederation.c | 2 +- lasso/id-ff/defederation.h | 2 +- lasso/id-ff/federation.c | 2 +- lasso/id-ff/federation.h | 2 +- lasso/id-ff/identity.c | 2 +- lasso/id-ff/identity.h | 2 +- lasso/id-ff/identityprivate.h | 2 +- lasso/id-ff/lecp.c | 2 +- lasso/id-ff/lecp.h | 2 +- lasso/id-ff/login.c | 2 +- lasso/id-ff/login.h | 2 +- lasso/id-ff/loginprivate.h | 2 +- lasso/id-ff/logout.c | 2 +- lasso/id-ff/logout.h | 2 +- lasso/id-ff/logoutprivate.h | 2 +- lasso/id-ff/name_identifier_mapping.c | 2 +- lasso/id-ff/name_identifier_mapping.h | 2 +- lasso/id-ff/name_registration.c | 2 +- lasso/id-ff/name_registration.h | 2 +- lasso/id-ff/profile.c | 2 +- lasso/id-ff/profile.h | 2 +- lasso/id-ff/profileprivate.h | 2 +- lasso/id-ff/provider.c | 2 +- lasso/id-ff/provider.h | 2 +- lasso/id-ff/providerprivate.h | 2 +- lasso/id-ff/server.c | 2 +- lasso/id-ff/server.h | 2 +- lasso/id-ff/serverprivate.h | 2 +- lasso/id-ff/session.c | 2 +- lasso/id-ff/session.h | 2 +- lasso/id-ff/sessionprivate.h | 2 +- lasso/id-wsf-2.0/data_service.c | 2 +- lasso/id-wsf-2.0/data_service.h | 2 +- lasso/id-wsf-2.0/discovery.c | 2 +- lasso/id-wsf-2.0/discovery.h | 2 +- lasso/id-wsf-2.0/identity.h | 2 +- lasso/id-wsf-2.0/server.h | 2 +- lasso/id-wsf-2.0/session.h | 2 +- lasso/id-wsf-2.0/wsf2_profile.c | 2 +- lasso/id-wsf-2.0/wsf2_profile.h | 2 +- lasso/id-wsf-2.0/wsf2_profile_private.h | 2 +- lasso/id-wsf/authentication.c | 2 +- lasso/id-wsf/authentication.h | 2 +- lasso/id-wsf/data_service.c | 2 +- lasso/id-wsf/data_service.h | 2 +- lasso/id-wsf/data_service_private.h | 2 +- lasso/id-wsf/discovery.c | 2 +- lasso/id-wsf/discovery.h | 2 +- lasso/id-wsf/identity.h | 2 +- lasso/id-wsf/interaction_profile_service.c | 2 +- lasso/id-wsf/interaction_profile_service.h | 2 +- lasso/id-wsf/personal_profile_service.c | 2 +- lasso/id-wsf/personal_profile_service.h | 2 +- lasso/id-wsf/wsf_profile.c | 2 +- lasso/id-wsf/wsf_profile.h | 2 +- lasso/id-wsf/wsf_profile_private.h | 2 +- lasso/lasso.c | 2 +- lasso/lasso.h | 2 +- lasso/saml-2.0/ecp.c | 2 +- lasso/saml-2.0/ecp.h | 2 +- lasso/saml-2.0/ecpprivate.h | 2 +- lasso/saml-2.0/federation.c | 2 +- lasso/saml-2.0/federationprivate.h | 2 +- lasso/saml-2.0/login.c | 2 +- lasso/saml-2.0/loginprivate.h | 2 +- lasso/saml-2.0/logout.c | 2 +- lasso/saml-2.0/logoutprivate.h | 2 +- lasso/saml-2.0/name_id_management.c | 2 +- lasso/saml-2.0/name_id_management.h | 2 +- lasso/saml-2.0/profile.c | 2 +- lasso/saml-2.0/profile.h | 2 +- lasso/saml-2.0/profileprivate.h | 2 +- lasso/saml-2.0/provider.c | 2 +- lasso/saml-2.0/providerprivate.h | 2 +- lasso/saml-2.0/server.c | 2 +- lasso/saml-2.0/serverprivate.h | 2 +- lasso/xml/disco_authenticate_requester.c | 2 +- lasso/xml/disco_authenticate_requester.h | 2 +- lasso/xml/disco_authenticate_session_context.c | 2 +- lasso/xml/disco_authenticate_session_context.h | 2 +- lasso/xml/disco_authorize_requester.c | 2 +- lasso/xml/disco_authorize_requester.h | 2 +- lasso/xml/disco_credentials.c | 2 +- lasso/xml/disco_credentials.h | 2 +- lasso/xml/disco_description.c | 2 +- lasso/xml/disco_description.h | 2 +- lasso/xml/disco_encrypt_resource_id.c | 2 +- lasso/xml/disco_encrypt_resource_id.h | 2 +- lasso/xml/disco_encrypted_resource_id.c | 2 +- lasso/xml/disco_encrypted_resource_id.h | 2 +- lasso/xml/disco_generate_bearer_token.c | 2 +- lasso/xml/disco_generate_bearer_token.h | 2 +- lasso/xml/disco_insert_entry.c | 2 +- lasso/xml/disco_insert_entry.h | 2 +- lasso/xml/disco_modify.c | 2 +- lasso/xml/disco_modify.h | 2 +- lasso/xml/disco_modify_response.c | 2 +- lasso/xml/disco_modify_response.h | 2 +- lasso/xml/disco_options.c | 2 +- lasso/xml/disco_options.h | 2 +- lasso/xml/disco_query.c | 2 +- lasso/xml/disco_query.h | 2 +- lasso/xml/disco_query_response.c | 2 +- lasso/xml/disco_query_response.h | 2 +- lasso/xml/disco_remove_entry.c | 2 +- lasso/xml/disco_remove_entry.h | 2 +- lasso/xml/disco_requested_service_type.c | 2 +- lasso/xml/disco_requested_service_type.h | 2 +- lasso/xml/disco_resource_id.c | 2 +- lasso/xml/disco_resource_id.h | 2 +- lasso/xml/disco_resource_offering.c | 2 +- lasso/xml/disco_resource_offering.h | 2 +- lasso/xml/disco_send_single_logout.c | 2 +- lasso/xml/disco_send_single_logout.h | 2 +- lasso/xml/disco_service_instance.c | 2 +- lasso/xml/disco_service_instance.h | 2 +- lasso/xml/ds_key_info.c | 2 +- lasso/xml/ds_key_info.h | 2 +- lasso/xml/ds_key_value.c | 2 +- lasso/xml/ds_key_value.h | 2 +- lasso/xml/ds_rsa_key_value.c | 2 +- lasso/xml/ds_rsa_key_value.h | 2 +- lasso/xml/dst_data.c | 2 +- lasso/xml/dst_data.h | 2 +- lasso/xml/dst_modification.c | 2 +- lasso/xml/dst_modification.h | 2 +- lasso/xml/dst_modify.c | 2 +- lasso/xml/dst_modify.h | 2 +- lasso/xml/dst_modify_response.c | 2 +- lasso/xml/dst_modify_response.h | 2 +- lasso/xml/dst_new_data.c | 2 +- lasso/xml/dst_new_data.h | 2 +- lasso/xml/dst_query.c | 2 +- lasso/xml/dst_query.h | 2 +- lasso/xml/dst_query_item.c | 2 +- lasso/xml/dst_query_item.h | 2 +- lasso/xml/dst_query_response.c | 2 +- lasso/xml/dst_query_response.h | 2 +- lasso/xml/id-wsf-2.0/disco_abstract.c | 2 +- lasso/xml/id-wsf-2.0/disco_abstract.h | 2 +- lasso/xml/id-wsf-2.0/disco_endpoint_context.c | 2 +- lasso/xml/id-wsf-2.0/disco_endpoint_context.h | 2 +- lasso/xml/id-wsf-2.0/disco_options.c | 2 +- lasso/xml/id-wsf-2.0/disco_options.h | 2 +- lasso/xml/id-wsf-2.0/disco_providerid.c | 2 +- lasso/xml/id-wsf-2.0/disco_providerid.h | 2 +- lasso/xml/id-wsf-2.0/disco_service_context.c | 2 +- lasso/xml/id-wsf-2.0/disco_service_context.h | 2 +- lasso/xml/id-wsf-2.0/disco_service_type.c | 2 +- lasso/xml/id-wsf-2.0/disco_service_type.h | 2 +- lasso/xml/id-wsf-2.0/disco_svc_md_register.c | 2 +- lasso/xml/id-wsf-2.0/disco_svc_md_register.h | 2 +- lasso/xml/id-wsf-2.0/disco_svc_metadata.c | 2 +- lasso/xml/id-wsf-2.0/disco_svc_metadata.h | 2 +- lasso/xml/id-wsf-2.0/soap_binding_framework.c | 2 +- lasso/xml/id-wsf-2.0/soap_binding_framework.h | 2 +- lasso/xml/is_help.c | 2 +- lasso/xml/is_help.h | 2 +- lasso/xml/is_inquiry.c | 2 +- lasso/xml/is_inquiry.h | 2 +- lasso/xml/is_inquiry_element.c | 2 +- lasso/xml/is_inquiry_element.h | 2 +- lasso/xml/is_interaction_request.c | 2 +- lasso/xml/is_interaction_request.h | 2 +- lasso/xml/is_interaction_response.c | 2 +- lasso/xml/is_interaction_response.h | 2 +- lasso/xml/is_interaction_statement.c | 2 +- lasso/xml/is_interaction_statement.h | 2 +- lasso/xml/is_item.c | 2 +- lasso/xml/is_item.h | 2 +- lasso/xml/is_parameter.c | 2 +- lasso/xml/is_parameter.h | 2 +- lasso/xml/is_redirect_request.c | 2 +- lasso/xml/is_redirect_request.h | 2 +- lasso/xml/is_select.c | 2 +- lasso/xml/is_select.h | 2 +- lasso/xml/is_text.c | 2 +- lasso/xml/is_text.h | 2 +- lasso/xml/is_user_interaction.c | 2 +- lasso/xml/is_user_interaction.h | 2 +- lasso/xml/lib_assertion.c | 2 +- lasso/xml/lib_assertion.h | 2 +- lasso/xml/lib_authentication_statement.c | 2 +- lasso/xml/lib_authentication_statement.h | 2 +- lasso/xml/lib_authn_context.c | 2 +- lasso/xml/lib_authn_context.h | 2 +- lasso/xml/lib_authn_request.c | 2 +- lasso/xml/lib_authn_request.h | 2 +- lasso/xml/lib_authn_request_envelope.c | 2 +- lasso/xml/lib_authn_request_envelope.h | 2 +- lasso/xml/lib_authn_response.c | 2 +- lasso/xml/lib_authn_response.h | 2 +- lasso/xml/lib_authn_response_envelope.c | 2 +- lasso/xml/lib_authn_response_envelope.h | 2 +- lasso/xml/lib_federation_termination_notification.c | 2 +- lasso/xml/lib_federation_termination_notification.h | 2 +- lasso/xml/lib_idp_entries.c | 2 +- lasso/xml/lib_idp_entries.h | 2 +- lasso/xml/lib_idp_entry.c | 2 +- lasso/xml/lib_idp_entry.h | 2 +- lasso/xml/lib_idp_list.c | 2 +- lasso/xml/lib_idp_list.h | 2 +- lasso/xml/lib_logout_request.c | 2 +- lasso/xml/lib_logout_request.h | 2 +- lasso/xml/lib_logout_response.c | 2 +- lasso/xml/lib_logout_response.h | 2 +- lasso/xml/lib_name_identifier_mapping_request.c | 2 +- lasso/xml/lib_name_identifier_mapping_request.h | 2 +- lasso/xml/lib_name_identifier_mapping_response.c | 2 +- lasso/xml/lib_name_identifier_mapping_response.h | 2 +- lasso/xml/lib_register_name_identifier_request.c | 2 +- lasso/xml/lib_register_name_identifier_request.h | 2 +- lasso/xml/lib_register_name_identifier_response.c | 2 +- lasso/xml/lib_register_name_identifier_response.h | 2 +- lasso/xml/lib_request_authn_context.c | 2 +- lasso/xml/lib_request_authn_context.h | 2 +- lasso/xml/lib_scoping.c | 2 +- lasso/xml/lib_scoping.h | 2 +- lasso/xml/lib_status_response.c | 2 +- lasso/xml/lib_status_response.h | 2 +- lasso/xml/lib_subject.c | 2 +- lasso/xml/lib_subject.h | 2 +- lasso/xml/private.h | 2 +- lasso/xml/sa_credentials.c | 2 +- lasso/xml/sa_credentials.h | 2 +- lasso/xml/sa_parameter.c | 2 +- lasso/xml/sa_parameter.h | 2 +- lasso/xml/sa_password_transforms.c | 2 +- lasso/xml/sa_password_transforms.h | 2 +- lasso/xml/sa_sasl_request.c | 2 +- lasso/xml/sa_sasl_request.h | 2 +- lasso/xml/sa_sasl_response.c | 2 +- lasso/xml/sa_sasl_response.h | 2 +- lasso/xml/sa_transform.c | 2 +- lasso/xml/sa_transform.h | 2 +- lasso/xml/saml-2.0/saml2_action.c | 2 +- lasso/xml/saml-2.0/saml2_action.h | 2 +- lasso/xml/saml-2.0/saml2_advice.c | 2 +- lasso/xml/saml-2.0/saml2_advice.h | 2 +- lasso/xml/saml-2.0/saml2_assertion.c | 2 +- lasso/xml/saml-2.0/saml2_assertion.h | 2 +- lasso/xml/saml-2.0/saml2_attribute.c | 2 +- lasso/xml/saml-2.0/saml2_attribute.h | 2 +- lasso/xml/saml-2.0/saml2_attribute_statement.c | 2 +- lasso/xml/saml-2.0/saml2_attribute_statement.h | 2 +- lasso/xml/saml-2.0/saml2_attribute_value.c | 2 +- lasso/xml/saml-2.0/saml2_attribute_value.h | 2 +- lasso/xml/saml-2.0/saml2_audience_restriction.c | 2 +- lasso/xml/saml-2.0/saml2_audience_restriction.h | 2 +- lasso/xml/saml-2.0/saml2_authn_context.c | 2 +- lasso/xml/saml-2.0/saml2_authn_context.h | 2 +- lasso/xml/saml-2.0/saml2_authn_statement.c | 2 +- lasso/xml/saml-2.0/saml2_authn_statement.h | 2 +- lasso/xml/saml-2.0/saml2_authz_decision_statement.c | 2 +- lasso/xml/saml-2.0/saml2_authz_decision_statement.h | 2 +- lasso/xml/saml-2.0/saml2_base_idabstract.c | 2 +- lasso/xml/saml-2.0/saml2_base_idabstract.h | 2 +- lasso/xml/saml-2.0/saml2_condition_abstract.c | 2 +- lasso/xml/saml-2.0/saml2_condition_abstract.h | 2 +- lasso/xml/saml-2.0/saml2_conditions.c | 2 +- lasso/xml/saml-2.0/saml2_conditions.h | 2 +- lasso/xml/saml-2.0/saml2_encrypted_element.c | 2 +- lasso/xml/saml-2.0/saml2_encrypted_element.h | 2 +- lasso/xml/saml-2.0/saml2_evidence.c | 2 +- lasso/xml/saml-2.0/saml2_evidence.h | 2 +- lasso/xml/saml-2.0/saml2_key_info_confirmation_data.c | 2 +- lasso/xml/saml-2.0/saml2_key_info_confirmation_data.h | 2 +- lasso/xml/saml-2.0/saml2_name_id.c | 2 +- lasso/xml/saml-2.0/saml2_name_id.h | 2 +- lasso/xml/saml-2.0/saml2_one_time_use.c | 2 +- lasso/xml/saml-2.0/saml2_one_time_use.h | 2 +- lasso/xml/saml-2.0/saml2_proxy_restriction.c | 2 +- lasso/xml/saml-2.0/saml2_proxy_restriction.h | 2 +- lasso/xml/saml-2.0/saml2_statement_abstract.c | 2 +- lasso/xml/saml-2.0/saml2_statement_abstract.h | 2 +- lasso/xml/saml-2.0/saml2_subject.c | 2 +- lasso/xml/saml-2.0/saml2_subject.h | 2 +- lasso/xml/saml-2.0/saml2_subject_confirmation.c | 2 +- lasso/xml/saml-2.0/saml2_subject_confirmation.h | 2 +- lasso/xml/saml-2.0/saml2_subject_confirmation_data.c | 2 +- lasso/xml/saml-2.0/saml2_subject_confirmation_data.h | 2 +- lasso/xml/saml-2.0/saml2_subject_locality.c | 2 +- lasso/xml/saml-2.0/saml2_subject_locality.h | 2 +- lasso/xml/saml-2.0/samlp2_artifact_resolve.c | 2 +- lasso/xml/saml-2.0/samlp2_artifact_resolve.h | 2 +- lasso/xml/saml-2.0/samlp2_artifact_response.c | 2 +- lasso/xml/saml-2.0/samlp2_artifact_response.h | 2 +- lasso/xml/saml-2.0/samlp2_assertion_idrequest.c | 2 +- lasso/xml/saml-2.0/samlp2_assertion_idrequest.h | 2 +- lasso/xml/saml-2.0/samlp2_attribute_query.c | 2 +- lasso/xml/saml-2.0/samlp2_attribute_query.h | 2 +- lasso/xml/saml-2.0/samlp2_authn_query.c | 2 +- lasso/xml/saml-2.0/samlp2_authn_query.h | 2 +- lasso/xml/saml-2.0/samlp2_authn_request.c | 2 +- lasso/xml/saml-2.0/samlp2_authn_request.h | 2 +- lasso/xml/saml-2.0/samlp2_authz_decision_query.c | 2 +- lasso/xml/saml-2.0/samlp2_authz_decision_query.h | 2 +- lasso/xml/saml-2.0/samlp2_extensions.c | 2 +- lasso/xml/saml-2.0/samlp2_extensions.h | 2 +- lasso/xml/saml-2.0/samlp2_idp_entry.c | 2 +- lasso/xml/saml-2.0/samlp2_idp_entry.h | 2 +- lasso/xml/saml-2.0/samlp2_idp_list.c | 2 +- lasso/xml/saml-2.0/samlp2_idp_list.h | 2 +- lasso/xml/saml-2.0/samlp2_logout_request.c | 2 +- lasso/xml/saml-2.0/samlp2_logout_request.h | 2 +- lasso/xml/saml-2.0/samlp2_logout_response.c | 2 +- lasso/xml/saml-2.0/samlp2_logout_response.h | 2 +- lasso/xml/saml-2.0/samlp2_manage_name_id_request.c | 2 +- lasso/xml/saml-2.0/samlp2_manage_name_id_request.h | 2 +- lasso/xml/saml-2.0/samlp2_manage_name_id_response.c | 2 +- lasso/xml/saml-2.0/samlp2_manage_name_id_response.h | 2 +- lasso/xml/saml-2.0/samlp2_name_id_mapping_request.c | 2 +- lasso/xml/saml-2.0/samlp2_name_id_mapping_request.h | 2 +- lasso/xml/saml-2.0/samlp2_name_id_mapping_response.c | 2 +- lasso/xml/saml-2.0/samlp2_name_id_mapping_response.h | 2 +- lasso/xml/saml-2.0/samlp2_name_id_policy.c | 2 +- lasso/xml/saml-2.0/samlp2_name_id_policy.h | 2 +- lasso/xml/saml-2.0/samlp2_request_abstract.c | 2 +- lasso/xml/saml-2.0/samlp2_request_abstract.h | 2 +- lasso/xml/saml-2.0/samlp2_requested_authn_context.c | 2 +- lasso/xml/saml-2.0/samlp2_requested_authn_context.h | 2 +- lasso/xml/saml-2.0/samlp2_response.c | 2 +- lasso/xml/saml-2.0/samlp2_response.h | 2 +- lasso/xml/saml-2.0/samlp2_scoping.c | 2 +- lasso/xml/saml-2.0/samlp2_scoping.h | 2 +- lasso/xml/saml-2.0/samlp2_status.c | 2 +- lasso/xml/saml-2.0/samlp2_status.h | 2 +- lasso/xml/saml-2.0/samlp2_status_code.c | 2 +- lasso/xml/saml-2.0/samlp2_status_code.h | 2 +- lasso/xml/saml-2.0/samlp2_status_detail.c | 2 +- lasso/xml/saml-2.0/samlp2_status_detail.h | 2 +- lasso/xml/saml-2.0/samlp2_status_response.c | 2 +- lasso/xml/saml-2.0/samlp2_status_response.h | 2 +- lasso/xml/saml-2.0/samlp2_subject_query_abstract.c | 2 +- lasso/xml/saml-2.0/samlp2_subject_query_abstract.h | 2 +- lasso/xml/saml-2.0/samlp2_terminate.c | 2 +- lasso/xml/saml-2.0/samlp2_terminate.h | 2 +- lasso/xml/saml_advice.c | 2 +- lasso/xml/saml_advice.h | 2 +- lasso/xml/saml_assertion.c | 2 +- lasso/xml/saml_assertion.h | 2 +- lasso/xml/saml_attribute.c | 2 +- lasso/xml/saml_attribute.h | 2 +- lasso/xml/saml_attribute_designator.c | 2 +- lasso/xml/saml_attribute_designator.h | 2 +- lasso/xml/saml_attribute_statement.c | 2 +- lasso/xml/saml_attribute_statement.h | 2 +- lasso/xml/saml_attribute_value.c | 2 +- lasso/xml/saml_attribute_value.h | 2 +- lasso/xml/saml_audience_restriction_condition.c | 2 +- lasso/xml/saml_audience_restriction_condition.h | 2 +- lasso/xml/saml_authentication_statement.c | 2 +- lasso/xml/saml_authentication_statement.h | 2 +- lasso/xml/saml_authority_binding.c | 2 +- lasso/xml/saml_authority_binding.h | 2 +- lasso/xml/saml_condition_abstract.c | 2 +- lasso/xml/saml_condition_abstract.h | 2 +- lasso/xml/saml_conditions.c | 2 +- lasso/xml/saml_conditions.h | 2 +- lasso/xml/saml_name_identifier.c | 2 +- lasso/xml/saml_name_identifier.h | 2 +- lasso/xml/saml_statement_abstract.c | 2 +- lasso/xml/saml_statement_abstract.h | 2 +- lasso/xml/saml_subject.c | 2 +- lasso/xml/saml_subject.h | 2 +- lasso/xml/saml_subject_confirmation.c | 2 +- lasso/xml/saml_subject_confirmation.h | 2 +- lasso/xml/saml_subject_locality.c | 2 +- lasso/xml/saml_subject_locality.h | 2 +- lasso/xml/saml_subject_statement.c | 2 +- lasso/xml/saml_subject_statement.h | 2 +- lasso/xml/saml_subject_statement_abstract.c | 2 +- lasso/xml/saml_subject_statement_abstract.h | 2 +- lasso/xml/samlp_request.c | 2 +- lasso/xml/samlp_request.h | 2 +- lasso/xml/samlp_request_abstract.c | 2 +- lasso/xml/samlp_request_abstract.h | 2 +- lasso/xml/samlp_response.c | 2 +- lasso/xml/samlp_response.h | 2 +- lasso/xml/samlp_response_abstract.c | 2 +- lasso/xml/samlp_response_abstract.h | 2 +- lasso/xml/samlp_status.c | 2 +- lasso/xml/samlp_status.h | 2 +- lasso/xml/samlp_status_code.c | 2 +- lasso/xml/samlp_status_code.h | 2 +- lasso/xml/sec_resource_access_statement.c | 2 +- lasso/xml/sec_resource_access_statement.h | 2 +- lasso/xml/soap_binding_consent.c | 2 +- lasso/xml/soap_binding_consent.h | 2 +- lasso/xml/soap_binding_correlation.c | 2 +- lasso/xml/soap_binding_correlation.h | 2 +- lasso/xml/soap_binding_ext_credential.c | 2 +- lasso/xml/soap_binding_ext_credential.h | 2 +- lasso/xml/soap_binding_ext_credentials_context.c | 2 +- lasso/xml/soap_binding_ext_credentials_context.h | 2 +- lasso/xml/soap_binding_ext_service_instance_update.c | 2 +- lasso/xml/soap_binding_ext_service_instance_update.h | 2 +- lasso/xml/soap_binding_ext_timeout.c | 2 +- lasso/xml/soap_binding_ext_timeout.h | 2 +- lasso/xml/soap_binding_processing_context.c | 2 +- lasso/xml/soap_binding_processing_context.h | 2 +- lasso/xml/soap_binding_provider.c | 2 +- lasso/xml/soap_binding_provider.h | 2 +- lasso/xml/soap_binding_usage_directive.c | 2 +- lasso/xml/soap_binding_usage_directive.h | 2 +- lasso/xml/soap_body.c | 2 +- lasso/xml/soap_body.h | 2 +- lasso/xml/soap_detail.c | 2 +- lasso/xml/soap_detail.h | 2 +- lasso/xml/soap_envelope.c | 2 +- lasso/xml/soap_envelope.h | 2 +- lasso/xml/soap_fault.c | 2 +- lasso/xml/soap_fault.h | 2 +- lasso/xml/soap_header.c | 2 +- lasso/xml/soap_header.h | 2 +- lasso/xml/strings.h | 2 +- lasso/xml/tools.c | 2 +- lasso/xml/utility_status.c | 2 +- lasso/xml/utility_status.h | 2 +- lasso/xml/ws/wsse_200401_security.c | 2 +- lasso/xml/ws/wsse_200401_security.h | 2 +- lasso/xml/ws/wsu_timestamp.c | 2 +- lasso/xml/ws/wsu_timestamp.h | 2 +- lasso/xml/wsse_security.c | 2 +- lasso/xml/wsse_security.h | 2 +- lasso/xml/xml.c | 2 +- lasso/xml/xml.h | 2 +- lasso/xml/xml_enc.h | 2 +- swig/Lasso-wsf-disco.i | 2 +- swig/Lasso-wsf-dst.i | 2 +- swig/Lasso-wsf-is.i | 2 +- swig/Lasso-wsf-sa.i | 2 +- swig/Lasso-wsf-soap.i | 2 +- swig/Lasso-wsf.i | 2 +- swig/Lasso-wsf2.i | 2 +- swig/Lasso.i | 2 +- swig/inheritance.h | 2 +- tests/basic_tests.c | 2 +- tests/login_tests.c | 2 +- tests/metadata_tests.c | 2 +- tests/perfs.c | 2 +- tests/random_tests.c | 2 +- tests/tests.c | 2 +- 446 files changed, 446 insertions(+), 446 deletions(-) commit 3ee59ccb42ef7be78474486ece2841cb3717a217 Author: Damien Laniel Date: Wed May 30 17:00:53 2007 +0000 added data service class and lasso_idwsf2_discovery_get_service function lasso/id-wsf-2.0/Makefile.am | 2 + lasso/id-wsf-2.0/data_service.c | 155 ++++++++++++++++++++++++++++++++++++++++ lasso/id-wsf-2.0/data_service.h | 101 ++++++++++++++++++++++++++ lasso/id-wsf-2.0/discovery.c | 43 ++++++++++- lasso/id-wsf-2.0/discovery.h | 9 ++- 5 files changed, 306 insertions(+), 4 deletions(-) commit ac7aceee479160aebb16af8915ab409b2f503452 Author: Damien Laniel Date: Wed May 9 17:11:13 2007 +0000 fixed usage of an identity without federation lasso/id-ff/identity.c | 3 --- lasso/id-wsf-2.0/wsf2_profile.c | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) commit 7f11dc341a6714a9fc5148ab9018b6797bc37b71 Author: Damien Laniel Date: Wed May 9 16:41:32 2007 +0000 in lasso_idwsf2_discovery_register_metadata, create idenity if it doesn't exist lasso/id-wsf-2.0/discovery.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) commit f48ab7d7e164fcdecd56445baa1a3c1993e1f934 Author: Damien Laniel Date: Wed May 9 16:31:03 2007 +0000 filled msgUrl in initMetadataAssociationAdd lasso/id-wsf-2.0/discovery.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) commit 386c12bcc4166f933e4a9512c832ee0d96afc0d2 Author: Damien Laniel Date: Wed May 9 16:06:43 2007 +0000 fixed memory management lasso/id-ff/identity.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) commit d036d35a78de5b01cae34900705e9f7874cba56c Author: Damien Laniel Date: Wed May 9 15:29:56 2007 +0000 don't use misc_text_node lasso/id-ff/identity.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) commit 9e62b87be49c66342007dc7c4a6bb63cf1e5abe0 Author: Damien Laniel Date: Wed May 9 15:24:58 2007 +0000 don't use g_return_if_fail here lasso/id-ff/session.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit e9ff67e610164fc75c70b55d5a478708ed2ecfe5 Author: Damien Laniel Date: Wed May 9 14:46:12 2007 +0000 moved session check to where it's really needed lasso/id-ff/session.c | 2 ++ lasso/id-wsf-2.0/discovery.c | 1 - 2 files changed, 2 insertions(+), 1 deletion(-) commit 63b07e9c792a1b802355a5c8f6f901973f7923b4 Author: Damien Laniel Date: Wed May 9 14:35:55 2007 +0000 added LassoIdentity_getSvcMDIDs method to swig swig/Lasso.i | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) commit b17380a9ec4e16027a525a74091c0096daf1f1e8 Author: Damien Laniel Date: Wed May 9 07:52:01 2007 +0000 added a forgotten file lasso/id-wsf-2.0/session.h | 50 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) commit de142fe27f1446f7d077c0a9c30d31c415828788 Author: Damien Laniel Date: Tue May 8 23:29:00 2007 +0000 replaced svcMDs with svcMDIDs in identity and moved EPRs from identity to session lasso/id-ff/Makefile.am | 4 +- lasso/id-ff/identity.c | 181 +++++++--------------------------------- lasso/id-ff/server.c | 29 +++++++ lasso/id-ff/session.c | 134 ++++++++++++++++++++++++++++- lasso/id-ff/session.h | 2 + lasso/id-wsf-2.0/Makefile.am | 3 +- lasso/id-wsf-2.0/discovery.c | 45 +++++----- lasso/id-wsf-2.0/identity.h | 25 +----- lasso/id-wsf-2.0/server.h | 4 + lasso/saml-2.0/login.c | 14 ++-- lasso/xml/id-wsf-2.0/identity.h | 43 ---------- swig/Lasso.i | 28 +++---- 12 files changed, 248 insertions(+), 264 deletions(-) commit c5fac3954a8940624c7d32db9041c0ab98046562 Author: Frederic Peters Date: Tue May 8 14:10:35 2007 +0000 also keep lasso prefix in PHP5 binding swig/Lasso-saml2.i | 12 +- swig/Lasso-wsf-disco.i | 126 ++--- swig/Lasso-wsf-dst.i | 62 +-- swig/Lasso-wsf-is.i | 62 +-- swig/Lasso-wsf-sa.i | 28 +- swig/Lasso-wsf-soap.i | 20 +- swig/Lasso-wsf.i | 22 +- swig/Lasso-wsf2.i | 4 +- swig/Lasso.i | 569 ++++++++++++----------- swig/id-wsf-2.0/disco_svc_metadata.i | 7 +- swig/saml-2.0/saml2_action.i | 4 +- swig/saml-2.0/saml2_advice.i | 2 +- swig/saml-2.0/saml2_assertion.i | 18 +- swig/saml-2.0/saml2_attribute.i | 8 +- swig/saml-2.0/saml2_attribute_statement.i | 2 +- swig/saml-2.0/saml2_audience_restriction.i | 4 +- swig/saml-2.0/saml2_authn_context.i | 8 +- swig/saml-2.0/saml2_authn_statement.i | 12 +- swig/saml-2.0/saml2_authz_decision_statement.i | 10 +- swig/saml-2.0/saml2_base_idabstract.i | 6 +- swig/saml-2.0/saml2_condition_abstract.i | 2 +- swig/saml-2.0/saml2_conditions.i | 10 +- swig/saml-2.0/saml2_encrypted_element.i | 2 +- swig/saml-2.0/saml2_evidence.i | 2 +- swig/saml-2.0/saml2_key_info_confirmation_data.i | 2 +- swig/saml-2.0/saml2_name_id.i | 10 +- swig/saml-2.0/saml2_one_time_use.i | 2 +- swig/saml-2.0/saml2_proxy_restriction.i | 6 +- swig/saml-2.0/saml2_statement_abstract.i | 2 +- swig/saml-2.0/saml2_subject.i | 10 +- swig/saml-2.0/saml2_subject_confirmation.i | 12 +- swig/saml-2.0/saml2_subject_confirmation_data.i | 12 +- swig/saml-2.0/saml2_subject_locality.i | 6 +- swig/saml-2.0/samlp2_artifact_resolve.i | 18 +- swig/saml-2.0/samlp2_artifact_response.i | 20 +- swig/saml-2.0/samlp2_assertion_idrequest.i | 18 +- swig/saml-2.0/samlp2_attribute_query.i | 20 +- swig/saml-2.0/samlp2_authn_query.i | 22 +- swig/saml-2.0/samlp2_authn_request.i | 36 +- swig/saml-2.0/samlp2_authz_decision_query.i | 24 +- swig/saml-2.0/samlp2_extensions.i | 2 +- swig/saml-2.0/samlp2_idp_entry.i | 8 +- swig/saml-2.0/samlp2_idp_list.i | 6 +- swig/saml-2.0/samlp2_logout_request.i | 28 +- swig/saml-2.0/samlp2_manage_name_id_request.i | 26 +- swig/saml-2.0/samlp2_name_id_mapping_request.i | 24 +- swig/saml-2.0/samlp2_name_id_mapping_response.i | 24 +- swig/saml-2.0/samlp2_name_id_policy.i | 8 +- swig/saml-2.0/samlp2_request_abstract.i | 16 +- swig/saml-2.0/samlp2_requested_authn_context.i | 4 +- swig/saml-2.0/samlp2_response.i | 22 +- swig/saml-2.0/samlp2_scoping.i | 8 +- swig/saml-2.0/samlp2_status.i | 8 +- swig/saml-2.0/samlp2_status_code.i | 6 +- swig/saml-2.0/samlp2_status_detail.i | 2 +- swig/saml-2.0/samlp2_status_response.i | 20 +- swig/saml-2.0/samlp2_subject_query_abstract.i | 18 +- swig/saml-2.0/samlp2_terminate.i | 2 +- 58 files changed, 731 insertions(+), 723 deletions(-) commit 9b9d50558be73076c94d17c1780ea75e15bed385 Author: Damien Laniel Date: Thu May 3 16:48:37 2007 +0000 fixed attribute name and name format lasso/saml-2.0/login.c | 5 ++--- lasso/xml/strings.h | 5 +++++ 2 files changed, 7 insertions(+), 3 deletions(-) commit 995323d2342f914c056a2676b15982f709dd3871 Author: Damien Laniel Date: Thu May 3 16:47:31 2007 +0000 added LASSO_EXPORT for a function in a public header lasso/xml/xml.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit bba8a71ac6c8cbb93f79b12ad474c915d4569279 Author: Damien Laniel Date: Thu May 3 14:18:36 2007 +0000 changed function names to match binding function names lasso/id-wsf-2.0/wsf2_profile.c | 4 ++-- lasso/id-wsf-2.0/wsf2_profile.h | 4 ++-- swig/Lasso-wsf2.i | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) commit 9aeb06262939974d150e0c6de97650c6c59b0b84 Author: Damien Laniel Date: Thu May 3 13:14:00 2007 +0000 don't use lasso_node_dump to create xml soap messages lasso/id-wsf-2.0/wsf2_profile.c | 4 ++-- lasso/xml/xml.c | 41 +++++++++++++++++++++++++++++++++++++---- lasso/xml/xml.h | 2 ++ 3 files changed, 41 insertions(+), 6 deletions(-) commit 39c34b4499098dd78ad414894b1149f4fd4c4aa8 Author: Damien Laniel Date: Thu May 3 11:33:16 2007 +0000 fixed SecMechID lasso/saml-2.0/login.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 24870e06db7c046696268f9f400b043a54e38814 Author: Damien Laniel Date: Thu May 3 11:26:52 2007 +0000 changed registerMetadata prototype + small fixes lasso/id-wsf-2.0/discovery.c | 43 +++++++++++++++++-------------------------- lasso/id-wsf-2.0/discovery.h | 3 +-- swig/Lasso-wsf2.i | 2 +- 3 files changed, 19 insertions(+), 29 deletions(-) commit a242f85112d18ae5835bea1215da9c137be1326a Author: Damien Laniel Date: Thu May 3 10:22:09 2007 +0000 split processMetadataAssociationAddMsg into processMetadataAssociationAddMsg + registerMetadata - new API lasso/id-wsf-2.0/discovery.c | 89 +++++++++++++++++++++++++++++++++-------- lasso/id-wsf-2.0/discovery.h | 3 ++ lasso/id-wsf-2.0/wsf2_profile.h | 4 +- swig/Lasso-wsf2.i | 13 ++++++ 4 files changed, 92 insertions(+), 17 deletions(-) commit e8298f42788f9164ecd890b541a797892a788e21 Author: Damien Laniel Date: Wed May 2 15:08:34 2007 +0000 get assertion from disco epr and put this assertion into soap header for metadata_association_add lasso/id-ff/identity.c | 21 ++++++++++++++++----- lasso/id-wsf-2.0/discovery.c | 28 +++++++--------------------- lasso/saml-2.0/login.c | 9 +++++---- 3 files changed, 28 insertions(+), 30 deletions(-) commit 31e4437cf5b762ec10ef367b4f06f13c2f869426 Author: Frederic Peters Date: Wed May 2 14:12:14 2007 +0000 SNIPPE_ALLOW_TEXT doesn't have to be handled, but Damien gcc is warning-happy. lasso/xml/xml.c | 1 + 1 file changed, 1 insertion(+) commit 84dfade8f0a94d70d303b2620be75abe64fb54be Author: Damien Laniel Date: Wed May 2 14:06:39 2007 +0000 replaced status codes with constants lasso/id-wsf-2.0/discovery.c | 16 +++++++--------- lasso/id-wsf/discovery.c | 4 ++-- 2 files changed, 9 insertions(+), 11 deletions(-) commit a654dc636348af0c1baddd37b54febf373240a02 Author: Damien Laniel Date: Wed May 2 13:52:44 2007 +0000 don't segfault when receiving bad soap request or response lasso/id-wsf-2.0/discovery.c | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) commit 37a0817947dc0215fc8236bd6da355301edadd73 Author: Damien Laniel Date: Wed May 2 13:41:21 2007 +0000 replaced LASSO_WSF2_PROFILE(discovery) with profile everywhere lasso/id-wsf-2.0/discovery.c | 41 ++++++++++++++++++++--------------------- 1 file changed, 20 insertions(+), 21 deletions(-) commit 0a61c31c8145ef1ec012371e77bc92b1eae3fa03 Author: Damien Laniel Date: Wed May 2 13:32:30 2007 +0000 wrap too long line lasso/id-wsf-2.0/identity.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 6df43cf7806758ec38d6b3220682fcdb37cce2c9 Author: Damien Laniel Date: Wed May 2 13:28:40 2007 +0000 fixed function name lasso/id-ff/identity.c | 2 +- lasso/id-wsf-2.0/identity.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 3a96c65ef9dc2e74c3f09da743f4d819c0559fd6 Author: Damien Laniel Date: Wed May 2 13:24:59 2007 +0000 added assertion identity token into disco EPR lasso/saml-2.0/login.c | 23 ++++- lasso/xml/id-wsf-2.0/Makefile.am | 5 ++ lasso/xml/id-wsf-2.0/disco_security_context.c | 119 +++++++++++++++++++++++++ lasso/xml/id-wsf-2.0/disco_security_context.h | 83 ++++++++++++++++++ lasso/xml/id-wsf-2.0/sec_token.c | 121 ++++++++++++++++++++++++++ lasso/xml/id-wsf-2.0/sec_token.h | 85 ++++++++++++++++++ lasso/xml/xml.c | 6 +- 7 files changed, 439 insertions(+), 3 deletions(-) commit 12d32a23c8bc00d1d0eacad8a3125556c8aba0ee Author: Damien Laniel Date: Wed May 2 13:23:41 2007 +0000 added method to get an assertion security token from an EPR lasso/id-ff/identity.c | 31 ++++++++++++++++++++++++++++++- lasso/id-wsf-2.0/identity.h | 7 +++++++ 2 files changed, 37 insertions(+), 1 deletion(-) commit 62bf5562a78ec00ec497ab85bfc332f272433406 Author: Damien Laniel Date: Wed May 2 13:22:33 2007 +0000 fixed spaces lasso/xml/strings.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 271ee2f988a1c199329009aa40750c763fed496c Author: Frederic Peters Date: Wed May 2 13:09:51 2007 +0000 don't put text nodes in list nodes unless SNIPPET_ALLOW_TEXT is set lasso/xml/private.h | 1 + lasso/xml/saml-2.0/saml2_attribute_value.c | 3 ++- lasso/xml/saml_attribute_value.c | 3 ++- lasso/xml/xml.c | 3 ++- 4 files changed, 7 insertions(+), 3 deletions(-) commit 78111f06c8fdcde413df2e49adc3aa00640dd294 Author: Frederic Peters Date: Wed May 2 12:42:12 2007 +0000 fixed xmlCleanNs on recursing namespaces lasso/xml/xml.c | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) commit 0777f98fde76c30be996f07a93eefdf144c2d7a6 Author: Frederic Peters Date: Wed May 2 11:31:38 2007 +0000 hardened id-wsf1 disco detection against misc nodes lasso/id-wsf/discovery.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) commit 7ec330821df2c6d986ba6e2f70edf5d38dce1dca Author: Frederic Peters Date: Wed May 2 11:08:23 2007 +0000 SNIPPET_LIST_NODES can now host LassoMiscTextNode, also useful now to directly embed a text element (instead of a node with a text element as content) lasso/xml/misc_text_node.c | 11 +++++++++++ lasso/xml/misc_text_node.h | 1 + lasso/xml/xml.c | 17 ++++++++++++----- swig/Lasso.i | 1 + 4 files changed, 25 insertions(+), 5 deletions(-) commit 63bab632c59fe5a0a4ae31e3e1035f58c1bcfe91 Author: Frederic Peters Date: Wed May 2 09:32:24 2007 +0000 whitespace cleaning swig/Lasso.i | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) commit 544fb803019da69a43987d14acc2510c75f79e11 Author: Frederic Peters Date: Wed May 2 09:31:08 2007 +0000 binding for LassoLogin->assertion swig/Lasso.i | 3 +++ 1 file changed, 3 insertions(+) commit 3568f40256e6b686c06fc655c87f441eeb084d53 Author: Frederic Peters Date: Wed May 2 09:28:38 2007 +0000 binding for LassoMiscTextNode swig/Lasso.i | 41 +++++++++++++++++++++++++++++++++++++++++ swig/inheritance.h | 3 +++ 2 files changed, 44 insertions(+) commit f905d8ed8fbcf6218277ab98c13806d7b8d4c768 Author: Damien Laniel Date: Mon Apr 30 22:50:22 2007 +0000 added identity token into metadata_association_add messages lasso/id-wsf-2.0/discovery.c | 39 ++++++++++++-- lasso/id-wsf-2.0/wsf2_profile.c | 2 +- lasso/xml/strings.h | 5 ++ lasso/xml/ws/Makefile.am | 2 + lasso/xml/ws/wsse_200401_security.c | 105 ++++++++++++++++++++++++++++++++++++ lasso/xml/ws/wsse_200401_security.h | 68 +++++++++++++++++++++++ lasso/xml/xml.c | 2 + 7 files changed, 219 insertions(+), 4 deletions(-) commit ec81cfe39941a3ebce5a0e44ff5db14783aeb97d Author: Frederic Peters Date: Mon Apr 30 14:36:10 2007 +0000 xml_enc.h should have been public; so much for QA. lasso/xml/Makefile.am | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit d839235ac57fe784ad39b22b8fb8776386328727 Author: Frederic Peters Date: Wed Apr 25 20:39:35 2007 +0000 const'ified a bunch of parameter that are immutable lasso/id-ff/identity.c | 2 +- lasso/id-wsf-2.0/discovery.c | 3 ++- lasso/id-wsf-2.0/discovery.h | 3 ++- lasso/id-wsf-2.0/identity.h | 2 +- lasso/xml/id-wsf-2.0/disco_endpoint_context.c | 2 +- lasso/xml/id-wsf-2.0/disco_endpoint_context.h | 2 +- lasso/xml/id-wsf-2.0/disco_service_context.c | 3 ++- lasso/xml/id-wsf-2.0/disco_service_context.h | 2 +- lasso/xml/id-wsf-2.0/disco_svc_md_register.c | 8 ++++---- lasso/xml/id-wsf-2.0/disco_svc_md_register.h | 3 ++- lasso/xml/id-wsf-2.0/disco_svc_metadata.c | 4 ++-- lasso/xml/id-wsf-2.0/disco_svc_metadata.h | 3 ++- 12 files changed, 21 insertions(+), 16 deletions(-) commit a21063c48383aebb541229f4973788978c567f7a Author: Damien Laniel Date: Wed Apr 25 14:17:18 2007 +0000 fixed gcc warning lasso/id-ff/server.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 6f43a7ef6f18b76b9a2a166bfbe2f487a459850b Author: Damien Laniel Date: Wed Apr 25 14:15:25 2007 +0000 added id-wsf 2.0 request types + added a missing include lasso/id-ff/profile.c | 4 ++++ lasso/id-ff/profile.h | 3 +++ swig/Lasso.i | 8 ++++++++ 3 files changed, 15 insertions(+) commit 1596e5fac3bab3d6bb448987eb64d3f4fa0df8dc Author: Damien Laniel Date: Wed Apr 25 14:14:48 2007 +0000 removed const warning from gcc swig/Lasso-wsf2.i | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit dc0ebd749ea26b1bf2640858df60b8e207de8fe7 Author: Frederic Peters Date: Wed Apr 25 12:51:55 2007 +0000 new server.addServiceFromDump method, and extended addService to work for both id-wsf 1 and 2; also necessary to add quick hack in new_from_xmlnode to map SvcMD to SvcMetadata. lasso/id-ff/server.c | 32 +++++++++++++++++++++++++------- lasso/id-ff/server.h | 4 +++- lasso/xml/xml.c | 2 ++ swig/Lasso.i | 5 +++++ 4 files changed, 35 insertions(+), 8 deletions(-) commit 10c8fcb306ac27c161631d71c10b5b2361ce6858 Author: Damien Laniel Date: Wed Apr 25 09:37:30 2007 +0000 fill profile->request in init_metadata_register + added soap_endpoint parameter lasso/id-ff/identity.c | 2 +- lasso/id-ff/server.c | 2 +- lasso/id-wsf-2.0/discovery.c | 4 ++-- lasso/id-wsf-2.0/discovery.h | 2 +- lasso/xml/id-wsf-2.0/disco_svc_md_register.c | 6 ++++-- lasso/xml/id-wsf-2.0/disco_svc_md_register.h | 2 +- lasso/xml/id-wsf-2.0/disco_svc_metadata.c | 14 +++++++++++--- lasso/xml/id-wsf-2.0/disco_svc_metadata.h | 6 ++++-- swig/Lasso-wsf2.i | 3 ++- 9 files changed, 27 insertions(+), 14 deletions(-) commit 9f06d478c9ee741b1edbe5170fe2a8d81e3e4299 Author: Damien Laniel Date: Wed Apr 25 09:21:15 2007 +0000 fill profile->request in init_metadata_register lasso/id-wsf-2.0/discovery.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit 9b126baff1d4eca58939b51823c68fd4eeb43f15 Author: Frederic Peters Date: Tue Apr 24 20:21:19 2007 +0000 added getSvcMetadatas method to lasso.Identity, to bind lasso_identity_get_svc_metadatas(). swig/Lasso.i | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) commit 4895268a8eb10a7fac099c47be9399391b7b39c6 Author: Damien Laniel Date: Tue Apr 24 15:52:01 2007 +0000 coding style fixes lasso/id-ff/identity.c | 6 +++--- lasso/id-wsf-2.0/discovery.c | 4 ++-- lasso/id-wsf-2.0/identity.h | 2 +- swig/Lasso-wsf2.i | 1 - 4 files changed, 6 insertions(+), 7 deletions(-) commit 4742f85471262ea703bde9f719abc7f2f6d3a7cf Author: Damien Laniel Date: Tue Apr 24 15:40:20 2007 +0000 coding style fix lasso/id-ff/identity.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 5c99d2ea80d0aade07462a8d3ee7e329a76e2c7a Author: Damien Laniel Date: Tue Apr 24 15:25:08 2007 +0000 implemented discovery query lasso/id-ff/identity.c | 64 ++++++- lasso/id-ff/login.c | 1 - lasso/id-ff/server.c | 2 +- lasso/id-wsf-2.0/discovery.c | 241 ++++++++++++++++++++++--- lasso/id-wsf-2.0/discovery.h | 8 + lasso/id-wsf-2.0/identity.h | 8 + lasso/saml-2.0/login.c | 42 ++++- lasso/xml/id-wsf-2.0/Makefile.am | 2 + lasso/xml/id-wsf-2.0/disco_query.c | 78 ++++---- lasso/xml/id-wsf-2.0/disco_query.h | 45 +++-- lasso/xml/id-wsf-2.0/disco_query_response.c | 113 ++++-------- lasso/xml/id-wsf-2.0/disco_query_response.h | 55 +++--- lasso/xml/id-wsf-2.0/disco_requested_service.c | 153 ++++++++++++++++ lasso/xml/id-wsf-2.0/disco_requested_service.h | 91 ++++++++++ lasso/xml/strings.h | 6 + lasso/xml/ws/wsa_endpoint_reference.c | 10 + lasso/xml/ws/wsa_endpoint_reference.h | 4 +- lasso/xml/xml.c | 10 +- swig/Lasso-wsf2-disco.i | 82 --------- swig/Lasso-wsf2.i | 26 ++- 20 files changed, 762 insertions(+), 279 deletions(-) commit fce9becb19dcf6501c760c952416654fb3920fad Author: Frederic Peters Date: Thu Apr 19 20:29:59 2007 +0000 a little bit of imagination to avoid new classes for each and every simple element with a different name. lasso/xml/Makefile.am | 2 + lasso/xml/misc_text_node.c | 183 ++++++++++++++++++++++++++++++++++++++++++++ lasso/xml/misc_text_node.h | 81 ++++++++++++++++++++ lasso/xml/ws/wsa_metadata.c | 3 +- lasso/xml/xml.c | 22 +++++- 5 files changed, 288 insertions(+), 3 deletions(-) commit 5bdab807c421c8e084952af64c005f8384b27e27 Author: Damien Laniel Date: Thu Apr 19 16:33:52 2007 +0000 Build a Disco EPR within saml 2 login assertion lasso/id-ff/identity.c | 39 ++++++------ lasso/id-wsf-2.0/discovery.c | 5 +- lasso/id-wsf-2.0/wsf2_profile.h | 12 +++- lasso/saml-2.0/login.c | 42 ++++++++++++- lasso/xml/id-wsf-2.0/Makefile.am | 6 ++ lasso/xml/id-wsf-2.0/disco_abstract.c | 97 ++++++++++++++++++++++++++++++ lasso/xml/id-wsf-2.0/disco_abstract.h | 69 ++++++++++++++++++++++ lasso/xml/id-wsf-2.0/disco_providerid.c | 98 +++++++++++++++++++++++++++++++ lasso/xml/id-wsf-2.0/disco_providerid.h | 70 ++++++++++++++++++++++ lasso/xml/id-wsf-2.0/disco_service_type.c | 98 +++++++++++++++++++++++++++++++ lasso/xml/id-wsf-2.0/disco_service_type.h | 70 ++++++++++++++++++++++ lasso/xml/ws/wsa_attributed_uri.c | 2 +- lasso/xml/ws/wsa_metadata.c | 1 + lasso/xml/ws/wsa_metadata.h | 4 ++ 14 files changed, 585 insertions(+), 28 deletions(-) commit 4b75639c20a9e8dd8d2a427954f0f0275889bdaf Author: Frederic Peters Date: Thu Apr 19 12:55:55 2007 +0000 cleaning warnings signaled by gcc lasso/id-wsf/authentication.c | 63 ++++++++++++++++++++++++------------------- 1 file changed, 35 insertions(+), 28 deletions(-) commit 39a063b1db7a98f0ebb34d7ff3bc11c0478c7de6 Author: Damien Laniel Date: Thu Apr 19 12:40:19 2007 +0000 fixed gcc warnings lasso/id-ff/identity.c | 2 +- lasso/id-ff/server.c | 2 +- lasso/id-wsf-2.0/discovery.c | 2 +- lasso/saml-2.0/login.c | 1 - 4 files changed, 3 insertions(+), 4 deletions(-) commit 383c2e2983660a58caa7feeaddfbfe574e930202 Author: Damien Laniel Date: Thu Apr 19 08:18:53 2007 +0000 minor fixes lasso/id-ff/identity.c | 4 ++-- lasso/id-ff/server.c | 8 +++----- 2 files changed, 5 insertions(+), 7 deletions(-) commit 27fa0a57395691792b30e2686cfd82705c982938 Author: Damien Laniel Date: Wed Apr 18 16:54:56 2007 +0000 completed metatada_register and metadata_association_add lasso/id-ff/identity.c | 103 ++++++++++++++++++++++++++++++++++++++-- lasso/id-ff/server.c | 77 ++++++++++++++++++++++++++++++ lasso/id-ff/serverprivate.h | 1 + lasso/id-wsf-2.0/Makefile.am | 4 +- lasso/id-wsf-2.0/discovery.c | 33 +++++++++++-- lasso/id-wsf-2.0/identity.h | 44 +++++++++++++++++ lasso/id-wsf-2.0/server.h | 43 +++++++++++++++++ lasso/id-wsf/identity.h | 1 - lasso/xml/id-wsf-2.0/identity.h | 43 +++++++++++++++++ 9 files changed, 337 insertions(+), 12 deletions(-) commit 776bb9a102a8c1bb3901e671d8428096e1e22b63 Author: Damien Laniel Date: Tue Apr 17 13:10:07 2007 +0000 added saml_attribute_value.[ch] to Makefile.am lasso/xml/saml-2.0/Makefile.am | 2 ++ 1 file changed, 2 insertions(+) commit be9039048815db4987568ca6c629a533a08c5ccd Author: Damien Laniel Date: Mon Apr 16 17:02:05 2007 +0000 typo lasso/id-wsf-2.0/discovery.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 6b4efc38db68018eec0306d08b014e1a080627be Author: Damien Laniel Date: Mon Apr 16 16:54:58 2007 +0000 fixed typo (no idea how long it had been there) lasso/xml/ds_key_info.c | 2 +- lasso/xml/ds_key_value.c | 2 +- lasso/xml/ds_rsa_key_value.c | 2 +- lasso/xml/lib_subject.c | 2 +- lasso/xml/saml-2.0/saml2_attribute_value.c | 2 +- lasso/xml/saml_advice.c | 2 +- lasso/xml/saml_assertion.c | 2 +- lasso/xml/saml_attribute_designator.c | 2 +- lasso/xml/saml_attribute_statement.c | 2 +- lasso/xml/saml_attribute_value.c | 2 +- lasso/xml/saml_audience_restriction_condition.c | 2 +- lasso/xml/saml_authentication_statement.c | 2 +- lasso/xml/saml_authority_binding.c | 2 +- lasso/xml/saml_condition_abstract.c | 2 +- lasso/xml/saml_conditions.c | 2 +- lasso/xml/saml_name_identifier.c | 2 +- lasso/xml/saml_statement_abstract.c | 2 +- lasso/xml/saml_subject.c | 2 +- lasso/xml/saml_subject_confirmation.c | 2 +- lasso/xml/saml_subject_locality.c | 2 +- lasso/xml/saml_subject_statement.c | 2 +- lasso/xml/saml_subject_statement_abstract.c | 2 +- lasso/xml/sec_resource_access_statement.c | 2 +- 23 files changed, 23 insertions(+), 23 deletions(-) commit 486aadc8502b380ac29c02a479139c82acad4136 Author: Damien Laniel Date: Mon Apr 16 16:50:51 2007 +0000 start writing an ID-WSF EPR in saml 2 assertions lasso/saml-2.0/login.c | 49 ++++++++++++++++ lasso/xml/saml-2.0/saml2_attribute.c | 2 +- lasso/xml/saml-2.0/saml2_attribute.h | 2 +- lasso/xml/saml-2.0/saml2_attribute_value.c | 90 ++++++++++++++++++++++++++++++ lasso/xml/saml-2.0/saml2_attribute_value.h | 68 ++++++++++++++++++++++ 5 files changed, 209 insertions(+), 2 deletions(-) commit 8ca25338df3f909c47a6ef3c3040497a1d390bff Author: Damien Laniel Date: Mon Apr 16 16:49:42 2007 +0000 md_association_add xml nodes .../xml/id-wsf-2.0/disco_svc_md_association_add.c | 113 ++++++++++++++++++++ .../xml/id-wsf-2.0/disco_svc_md_association_add.h | 84 +++++++++++++++ .../disco_svc_md_association_add_response.c | 114 +++++++++++++++++++++ .../disco_svc_md_association_add_response.h | 87 ++++++++++++++++ 4 files changed, 398 insertions(+) commit baacab38c79f63a986970a24be5183a0843d90ee Author: Damien Laniel Date: Mon Apr 16 14:02:13 2007 +0000 identity + session in discovery + SvcMDAssociationAdd lasso/id-wsf-2.0/discovery.c | 103 ++++++++++++++++++++++++++++++++++- lasso/id-wsf-2.0/discovery.h | 9 +++ lasso/id-wsf-2.0/wsf2_profile.c | 115 +++++++++++++++++++++++++++++++++++++++ lasso/id-wsf-2.0/wsf2_profile.h | 13 ++++- lasso/xml/id-wsf-2.0/Makefile.am | 4 ++ swig/Lasso-wsf2.i | 58 ++++++++++++++++++++ 6 files changed, 298 insertions(+), 4 deletions(-) commit 54bcb9d7be26b2343aa148108c250b4d30967281 Author: Frederic Peters Date: Sat Apr 14 20:13:17 2007 +0000 new StringDict to map GHashTable of strings to a structure similar to a python dictionary (necessary to support mapping of "any" attributes) swig/Lasso.i | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 68 insertions(+), 6 deletions(-) commit cef8f6856bcb988a79406d28722d176927200042 Author: Frederic Peters Date: Sat Apr 14 16:42:47 2007 +0000 updated liberty document uris docs/lasso-book/lasso-architecture.rst | 2 +- docs/lasso-book/writing-a-c-sp.txt | 2 +- docs/lasso-book/writing-a-java-sp.txt | 2 +- docs/lasso-book/writing-a-php-sp.txt | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) commit daca483044dfb6af80859145916b89b5f95dc42d Author: Frederic Peters Date: Sat Apr 14 16:40:54 2007 +0000 updated with version from a newer generator (initialize anyAttribute hash table and correctly set content to 0 instead of NULL) lasso/xml/ws/wsa_attributed_unsigned_long.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit 3e34ddd259b619838922efdecb04d9fa03a3848b Author: Frederic Peters Date: Sat Apr 14 16:32:06 2007 +0000 add profileprivate.h header for lasso_profile_clean_info function declaration lasso/saml-2.0/name_id_management.c | 1 + 1 file changed, 1 insertion(+) commit c2fa848a7e5645bb6ba569654b6024728e8e4c67 Author: Frederic Peters Date: Sat Apr 14 16:30:59 2007 +0000 add missing profileprivate.h header for lasso_profile_clean_info function declaration. lasso/id-ff/defederation.c | 1 + lasso/id-ff/lecp.c | 1 + lasso/id-ff/name_registration.c | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) commit b6d8ae535b87194f6e1547ec7348f2ad2f5032bb Author: Frederic Peters Date: Sat Apr 14 11:28:12 2007 +0000 optimize type autodetection in lasso_node_new_from_xmlNode by reordering namespace matches and stopping at first success lasso/xml/xml.c | 60 +++++++++++++++++++++++++++++---------------------------- 1 file changed, 31 insertions(+), 29 deletions(-) commit a3bcab79a8946de35e8c78b229fd3f24e63f9d0a Author: Frederic Peters Date: Sat Apr 14 11:22:41 2007 +0000 added reference to WsAddr lasso/xml/xml.c | 2 ++ 1 file changed, 2 insertions(+) commit a1eda5b61122e8b4415edee3f07f7024afe52b64 Author: Frederic Peters Date: Sat Apr 14 11:22:10 2007 +0000 implemented support for SNIPPET_ATTRIBUTE | SNIPPET_ANY (using GHashTable). lasso/xml/xml.c | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 77 insertions(+), 5 deletions(-) commit 1fc6417095084b9ebb57d6f3eb18423b1ba55f05 Author: Frederic Peters Date: Sat Apr 14 10:09:10 2007 +0000 removed useless glib/glist.h include lasso/xml/saml-2.0/saml2_encrypted_element.h | 2 -- 1 file changed, 2 deletions(-) commit 88dacf33ed1b8cb833fd7c471a57ccdc8804c197 Author: Frederic Peters Date: Fri Apr 13 23:13:42 2007 +0000 fixed last commit author in buildbox website/convert-to-static.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 5ce02f9cda0926787c11a7d59a12054da03babc7 Author: Damien Laniel Date: Fri Apr 13 17:24:38 2007 +0000 disco.processMetadataRegisterResponseMsg(soap_answer) and disco.svcMDID + renamed Idwsf2 to IdWsf2 to make it work with new classes lasso/id-wsf-2.0/discovery.c | 68 +++++++++++++------ lasso/id-wsf-2.0/discovery.h | 36 +++++----- lasso/id-wsf-2.0/wsf2_profile.c | 27 ++++++++ lasso/id-wsf-2.0/wsf2_profile.h | 3 + lasso/xml/id-wsf-2.0/disco_endpoint_context.c | 22 +++---- lasso/xml/id-wsf-2.0/disco_endpoint_context.h | 16 ++--- lasso/xml/id-wsf-2.0/disco_options.c | 14 ++-- lasso/xml/id-wsf-2.0/disco_options.h | 16 ++--- lasso/xml/id-wsf-2.0/disco_query.c | 26 ++++---- lasso/xml/id-wsf-2.0/disco_query.h | 18 ++--- lasso/xml/id-wsf-2.0/disco_query_response.c | 26 ++++---- lasso/xml/id-wsf-2.0/disco_query_response.h | 20 +++--- lasso/xml/id-wsf-2.0/disco_service_context.c | 22 +++---- lasso/xml/id-wsf-2.0/disco_service_context.h | 22 +++---- lasso/xml/id-wsf-2.0/disco_svc_md_register.c | 18 ++--- lasso/xml/id-wsf-2.0/disco_svc_md_register.h | 18 ++--- lasso/xml/id-wsf-2.0/disco_svc_metadata.c | 24 +++---- lasso/xml/id-wsf-2.0/disco_svc_metadata.h | 18 ++--- lasso/xml/xml.c | 4 +- swig/Lasso-wsf2-disco.i | 16 ++--- swig/Lasso-wsf2.i | 95 +++++++++++++++------------ swig/id-wsf-2.0/disco_svc_metadata.i | 16 ++--- swig/id-wsf-2.0/inheritance.h | 2 +- 23 files changed, 312 insertions(+), 235 deletions(-) commit 8e702f85c80a958466edb54d3cc19e1e8b0138b1 Author: Frederic Peters Date: Fri Apr 13 16:56:18 2007 +0000 don't include wsu_ symbols in non-id-wsf builds lasso/extract_symbols.py | 9 +++++---- lasso/extract_types.py | 9 +++++---- 2 files changed, 10 insertions(+), 8 deletions(-) commit 28baae98a311cd36a56074670d0930d869440ed8 Author: Damien Laniel Date: Fri Apr 13 15:35:41 2007 +0000 disco.processMetadataRegisterMsg(soap_answer) and disco.buildResponseMsg() lasso/id-wsf-2.0/discovery.c | 37 +++++++++++++++++++++------- lasso/id-wsf-2.0/wsf2_profile.c | 49 +++++++++++++------------------------- lasso/id-wsf-2.0/wsf2_profile.h | 2 ++ lasso/xml/id-wsf-2.0/util_status.c | 10 +++++--- lasso/xml/id-wsf-2.0/util_status.h | 3 +-- swig/Lasso-wsf2.i | 5 ++++ 6 files changed, 61 insertions(+), 45 deletions(-) commit 8fc5a70abc4c8a242a5f44112dcddd691a85eb62 Author: Damien Laniel Date: Thu Apr 12 17:05:32 2007 +0000 implemented disco.metadata.dump() configure.ac | 1 + lasso/id-wsf-2.0/discovery.c | 9 -------- lasso/id-wsf-2.0/discovery.h | 2 -- lasso/xml/id-wsf-2.0/disco_svc_metadata.c | 4 ++-- lasso/xml/id-wsf-2.0/disco_svc_metadata.h | 2 +- swig/Lasso-wsf2-disco.i | 2 +- swig/Lasso-wsf2.i | 20 +++++++++-------- swig/Lasso.i | 10 +++++++++ swig/Makefile.am | 2 +- swig/id-wsf-2.0/Makefile.am | 6 ++++++ swig/id-wsf-2.0/disco_svc_metadata.i | 36 +++++++++++++++++++++++++++++++ swig/id-wsf-2.0/inheritance.h | 1 + swig/id-wsf-2.0/main.h | 5 +++++ 13 files changed, 75 insertions(+), 25 deletions(-) commit fd22c2846b02eb26916613c5aeb63bcd62f3985c Author: Damien Laniel Date: Thu Apr 12 15:32:57 2007 +0000 changed disco classes and methods names + make lasso_idwsf2_discovery_process_metadata_register_msg work lasso/id-wsf-2.0/discovery.c | 25 +++++------ lasso/id-wsf-2.0/discovery.h | 2 +- lasso/id-wsf-2.0/wsf2_profile.c | 34 ++++++--------- lasso/id-wsf-2.0/wsf2_profile.h | 2 +- lasso/xml/id-wsf-2.0/disco_endpoint_context.c | 28 ++++++------ lasso/xml/id-wsf-2.0/disco_endpoint_context.h | 46 ++++++++++---------- lasso/xml/id-wsf-2.0/disco_service_context.c | 26 +++++------ lasso/xml/id-wsf-2.0/disco_service_context.h | 50 +++++++++++----------- lasso/xml/id-wsf-2.0/disco_svc_md_register.c | 28 ++++++------ lasso/xml/id-wsf-2.0/disco_svc_md_register.h | 49 +++++++++++---------- .../id-wsf-2.0/disco_svc_md_register_response.c | 8 ++-- .../id-wsf-2.0/disco_svc_md_register_response.h | 32 +++++++------- lasso/xml/id-wsf-2.0/disco_svc_metadata.c | 36 ++++++++-------- lasso/xml/id-wsf-2.0/disco_svc_metadata.h | 50 +++++++++++----------- lasso/xml/soap_envelope.c | 4 +- lasso/xml/xml.c | 4 ++ 16 files changed, 210 insertions(+), 214 deletions(-) commit 807d43ca4597dc5ead381aba4681e2e0b10e6773 Author: Damien Laniel Date: Thu Apr 12 12:32:14 2007 +0000 removed useless check lasso/id-wsf-2.0/discovery.c | 5 ----- 1 file changed, 5 deletions(-) commit 97d49b63ac14a529589e128f2782b839e2b9fa05 Author: Damien Laniel Date: Thu Apr 12 12:24:55 2007 +0000 removed useless headers lasso/id-wsf-2.0/discovery.c | 8 -------- 1 file changed, 8 deletions(-) commit 97eb1dfcc9d8ffb1563a2c23cbcc1af034c5e3d5 Author: Damien Laniel Date: Thu Apr 12 12:17:00 2007 +0000 added wsu_timestamp class lasso/xml/ws/wsu_timestamp.c | 94 ++++++++++++++++++++++++++++++++++++++++++++ lasso/xml/ws/wsu_timestamp.h | 69 ++++++++++++++++++++++++++++++++ 2 files changed, 163 insertions(+) commit 31f42481c5d9615565a75eb65ccbe4399dde219d Author: Damien Laniel Date: Thu Apr 12 12:16:33 2007 +0000 removed id-wsf 1 soap headers and added wsu_timestamp id-wsf 2.0 element lasso/Makefile.am | 3 ++- lasso/id-wsf-2.0/wsf2_profile.c | 25 ++++++++----------------- lasso/xml/id-wsf-2.0/disco_endpoint_context.c | 2 +- lasso/xml/id-wsf-2.0/soap_binding_framework.c | 2 +- lasso/xml/strings.h | 9 +++++++-- lasso/xml/ws/Makefile.am | 7 ++++--- 6 files changed, 23 insertions(+), 25 deletions(-) commit c0a164ac9c41503afa9588b5426e4232c8fb35de Author: Frederic Peters Date: Wed Apr 11 19:18:41 2007 +0000 only include wsa_ when ID-WSF is enabled lasso/extract_symbols.py | 2 +- lasso/extract_types.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit dc25a012e95b482f20399fe96a77569b1f24e361 Author: Frederic Peters Date: Wed Apr 11 13:10:20 2007 +0000 added WS-Addr classes configure.ac | 1 + lasso/xml/Makefile.am | 2 +- lasso/xml/strings.h | 8 +- lasso/xml/ws/Makefile.am | 32 +++++++ lasso/xml/ws/wsa_attributed_any.c | 108 ++++++++++++++++++++++ lasso/xml/ws/wsa_attributed_any.h | 75 ++++++++++++++++ lasso/xml/ws/wsa_attributed_qname.c | 131 +++++++++++++++++++++++++++ lasso/xml/ws/wsa_attributed_qname.h | 78 ++++++++++++++++ lasso/xml/ws/wsa_attributed_unsigned_long.c | 112 +++++++++++++++++++++++ lasso/xml/ws/wsa_attributed_unsigned_long.h | 77 ++++++++++++++++ lasso/xml/ws/wsa_attributed_uri.c | 131 +++++++++++++++++++++++++++ lasso/xml/ws/wsa_attributed_uri.h | 78 ++++++++++++++++ lasso/xml/ws/wsa_endpoint_reference.c | 123 +++++++++++++++++++++++++ lasso/xml/ws/wsa_endpoint_reference.h | 82 +++++++++++++++++ lasso/xml/ws/wsa_metadata.c | 108 ++++++++++++++++++++++ lasso/xml/ws/wsa_metadata.h | 75 ++++++++++++++++ lasso/xml/ws/wsa_problem_action.c | 116 ++++++++++++++++++++++++ lasso/xml/ws/wsa_problem_action.h | 79 ++++++++++++++++ lasso/xml/ws/wsa_reference_parameters.c | 108 ++++++++++++++++++++++ lasso/xml/ws/wsa_reference_parameters.h | 75 ++++++++++++++++ lasso/xml/ws/wsa_relates_to.c | 135 ++++++++++++++++++++++++++++ lasso/xml/ws/wsa_relates_to.h | 79 ++++++++++++++++ 22 files changed, 1810 insertions(+), 3 deletions(-) commit 7ac97ec93bde8884ec8c0ef5bd92f2e46bea0372 Author: Damien Laniel Date: Wed Apr 11 12:27:27 2007 +0000 removed useless g_object_ref lasso/xml/id-wsf-2.0/disco_endpoint_context.c | 2 +- lasso/xml/id-wsf-2.0/disco_svc_md_register.c | 3 +-- lasso/xml/id-wsf-2.0/disco_svc_metadata.c | 5 ++--- 3 files changed, 4 insertions(+), 6 deletions(-) commit 7822e526dddcdd51e8fed81c4c795dca250cfde9 Author: Damien Laniel Date: Wed Apr 11 12:22:42 2007 +0000 fixed include lasso/id-wsf-2.0/discovery.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit c82cc5c950c61b8073531168acab1fd6dca07870 Author: Damien Laniel Date: Wed Apr 11 12:04:19 2007 +0000 implementing lasso_idwsf2_discovery_process_metadata_register_msg, not working yet lasso/id-wsf-2.0/discovery.c | 42 ++++++- lasso/id-wsf-2.0/discovery.h | 17 ++- lasso/id-wsf-2.0/wsf2_profile.c | 38 +++++++ lasso/id-wsf-2.0/wsf2_profile.h | 3 + lasso/xml/id-wsf-2.0/Makefile.am | 8 +- .../id-wsf-2.0/disco_svc_md_register_response.c | 120 ++++++++++++++++++++ .../id-wsf-2.0/disco_svc_md_register_response.h | 78 +++++++++++++ lasso/xml/id-wsf-2.0/util_status.c | 125 +++++++++++++++++++++ lasso/xml/id-wsf-2.0/util_status.h | 79 +++++++++++++ swig/Lasso-wsf2.i | 13 ++- 10 files changed, 514 insertions(+), 9 deletions(-) commit 8f0c0a866ed6a13f9e68691af144eb2f78f0cdc7 Author: Frederic Peters Date: Wed Apr 11 09:27:37 2007 +0000 target namespace for disco would better be disco, not ds, to avoid confusion lasso/xml/strings.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 49dabd6df364ffc611f6d10a9e47055e555cd4a2 Author: Frederic Peters Date: Wed Apr 11 08:21:54 2007 +0000 renamed disco_service_metadata to disco_svc_metadata lasso/id-wsf-2.0/discovery.c | 2 +- lasso/xml/id-wsf-2.0/Makefile.am | 4 ++-- lasso/xml/id-wsf-2.0/disco_svc_md_register.c | 2 +- .../xml/id-wsf-2.0/{disco_service_metadata.c => disco_svc_metadata.c} | 2 +- .../xml/id-wsf-2.0/{disco_service_metadata.h => disco_svc_metadata.h} | 0 5 files changed, 5 insertions(+), 5 deletions(-) commit 3a8e2cbf80e97277765156f26b9a7d6b7f20fd89 Author: Damien Laniel Date: Tue Apr 10 13:59:28 2007 +0000 renaming + removed some useless casts lasso/id-wsf-2.0/discovery.c | 8 +-- lasso/xml/id-wsf-2.0/Makefile.am | 4 +- lasso/xml/id-wsf-2.0/disco_endpoint_context.c | 2 +- lasso/xml/id-wsf-2.0/disco_service_context.c | 2 +- lasso/xml/id-wsf-2.0/disco_service_metadata.c | 2 +- .../id-wsf-2.0/disco_service_metadata_register.h | 72 ---------------------- ...metadata_register.c => disco_svc_md_register.c} | 28 ++++----- lasso/xml/id-wsf-2.0/disco_svc_md_register.h | 72 ++++++++++++++++++++++ lasso/xml/id-wsf-2.0/soap_binding_framework.c | 2 +- 9 files changed, 96 insertions(+), 96 deletions(-) commit 04e47f4aa4565548a114f82ef6113211cccf9e19 Author: Damien Laniel Date: Tue Apr 10 13:27:52 2007 +0000 some more work on metadata registration lasso/id-wsf-2.0/discovery.c | 21 +++++++++++++++++---- lasso/xml/id-wsf-2.0/disco_endpoint_context.c | 6 +++--- lasso/xml/id-wsf-2.0/disco_service_context.c | 6 +++--- lasso/xml/id-wsf-2.0/disco_service_metadata.c | 11 ++++++----- .../id-wsf-2.0/disco_service_metadata_register.c | 5 +++-- lasso/xml/id-wsf-2.0/soap_binding_framework.c | 6 +++--- swig/Lasso-wsf2.i | 2 +- 7 files changed, 36 insertions(+), 21 deletions(-) commit d370faf82465d3029e22b53730707b02ce3ddd04 Author: Frederic Peters Date: Sun Apr 8 12:55:53 2007 +0000 adding all ID-WSF 2.0 namespaces lasso/xml/strings.h | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) commit 6d493259d1e5eeda587593dd679a000550979515 Author: Frederic Peters Date: Sat Apr 7 12:47:26 2007 +0000 fixing figures from cvs2svn conversion docs/lasso-book/figures/single-logout.png | Bin 94664 -> 94665 bytes docs/lasso-book/figures/single-sign-on.png | Bin 57131 -> 57133 bytes 2 files changed, 0 insertions(+), 0 deletions(-) commit 51578b5da6eb5b55bef8d33688120483403ab88c Author: Frederic Peters Date: Fri Apr 6 16:05:32 2007 +0000 keep a single --enable-wsf configure option, for both ID-WSF 1 and 2. configure.ac | 39 +-------------------------------------- lasso/Makefile.am | 7 ------- lasso/extract_symbols.py | 4 ++-- lasso/extract_types.py | 4 ++-- swig/Lasso.i | 12 ------------ swig/Makefile.am | 2 +- swig/wsf2-support.i.in | 1 - 7 files changed, 6 insertions(+), 63 deletions(-) commit a95ec7b488be9593a6cf1d80797d90202b867b4c Author: Damien Laniel Date: Thu Apr 5 15:06:10 2007 +0000 removed useless comments and wrap too long lines lasso/id-wsf-2.0/discovery.c | 936 +----------------- lasso/id-wsf-2.0/discovery.h | 55 +- lasso/id-wsf-2.0/wsf2_profile.c | 1286 +------------------------ lasso/id-wsf-2.0/wsf2_profile.h | 45 +- lasso/xml/id-wsf-2.0/soap_binding_framework.c | 4 +- lasso/xml/id-wsf-2.0/soap_binding_framework.h | 20 +- 6 files changed, 19 insertions(+), 2327 deletions(-) commit 9777738a17f93e016e952acc907c3dfd75409932 Author: Damien Laniel Date: Thu Apr 5 14:50:50 2007 +0000 'service metadata register' message construction lasso/id-wsf-2.0/discovery.c | 21 +++ lasso/id-wsf-2.0/discovery.h | 3 + lasso/xml/id-wsf-2.0/Makefile.am | 2 + lasso/xml/id-wsf-2.0/disco_service_metadata.c | 12 +- lasso/xml/id-wsf-2.0/disco_service_metadata.h | 4 +- .../id-wsf-2.0/disco_service_metadata_register.c | 108 ++++++++++++++ .../id-wsf-2.0/disco_service_metadata_register.h | 72 +++++++++ swig/Lasso-wsf2-disco.i | 2 +- swig/Lasso-wsf2.i | 162 +++++++++++++++++++++ 9 files changed, 379 insertions(+), 7 deletions(-) commit b2d1d289ddcd057fc7eeffd9443d2826be7cb2b4 Author: Damien Laniel Date: Thu Apr 5 10:18:01 2007 +0000 moved and renamed attributes lasso/xml/id-wsf-2.0/disco_service_metadata.c | 7 +++---- lasso/xml/id-wsf-2.0/disco_service_metadata.h | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) commit 97fa7310b81e07540bf775dc6f98a95923c6a7d8 Author: Frederic Peters Date: Wed Apr 4 19:51:51 2007 +0000 fixed segfault on invalid input passed to lasso_wsf_profile_process_soap_response_msg lasso/id-wsf/wsf_profile.c | 4 ++++ 1 file changed, 4 insertions(+) commit 154bd5062c2b05edf752bd9dc816b65189d941c8 Author: Frederic Peters Date: Wed Apr 4 08:16:59 2007 +0000 fixed usage of constant strings in Perl binding perl/tests/binding_tests.pl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 6b840b9bba62ab5f4f31dbab0f5d42fe6ee4c159 Author: Damien Laniel Date: Tue Apr 3 13:51:37 2007 +0000 ID-WSF 2.0 : basix swig support swig/Lasso-wsf2-disco.i | 82 +++++++++++++++++++++++++++++++++++++++++++++++++ swig/Lasso.i | 13 ++++++++ swig/Makefile.am | 3 +- swig/wsf2-support.i | 1 + swig/wsf2-support.i.in | 1 + 5 files changed, 99 insertions(+), 1 deletion(-) commit 150f2546e702a94ec4810b27de6a39e35038b45c Author: Damien Laniel Date: Tue Apr 3 13:50:34 2007 +0000 build configuration for id-wsf 2.0 configure.ac | 49 ++++++++++++++++++++++++++++++++++++---- lasso/Makefile.am | 14 +++++++++++- lasso/id-wsf-2.0/Makefile.am | 22 ++++++++++++++++++ lasso/xml/Makefile.am | 2 +- lasso/xml/id-wsf-2.0/Makefile.am | 27 ++++++++++++++++++++++ 5 files changed, 107 insertions(+), 7 deletions(-) commit e92277593f155380786fd959155c117b2421516b Author: Damien Laniel Date: Tue Apr 3 13:48:23 2007 +0000 new strings declarations lasso/xml/strings.h | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) commit 4e073e300a6e5ccb13b31eaf3bc065861b0fc19e Author: Damien Laniel Date: Tue Apr 3 13:47:10 2007 +0000 ID-WSF 2.0 Discovery query : not yet working classes commit a559d3fe94844afa898e7bd59b6df32f61f157dd Author: Damien Laniel Date: Tue Apr 3 13:38:04 2007 +0000 ID-WSF 2.0 Discovery Query : not yet working classes lasso/id-wsf-2.0/discovery.c | 1147 ++++++++++++++++++++ lasso/id-wsf-2.0/discovery.h | 128 +++ lasso/id-wsf-2.0/wsf2_profile.c | 1524 +++++++++++++++++++++++++++ lasso/id-wsf-2.0/wsf2_profile.h | 133 +++ lasso/id-wsf-2.0/wsf2_profile_private.h | 47 + lasso/xml/id-wsf-2.0/disco_query.c | 126 +++ lasso/xml/id-wsf-2.0/disco_query.h | 72 ++ lasso/xml/id-wsf-2.0/disco_query_response.c | 163 +++ lasso/xml/id-wsf-2.0/disco_query_response.h | 77 ++ 9 files changed, 3417 insertions(+) commit 0497774d47f0809528577395299543f51df1f827 Author: Damien Laniel Date: Tue Apr 3 12:09:37 2007 +0000 ID-WSF 2.0 Discovery : Some XML nodes lasso/xml/id-wsf-2.0/disco_endpoint_context.c | 122 ++++++++++++++++++++++++++ lasso/xml/id-wsf-2.0/disco_endpoint_context.h | 76 ++++++++++++++++ lasso/xml/id-wsf-2.0/disco_options.c | 98 +++++++++++++++++++++ lasso/xml/id-wsf-2.0/disco_options.h | 67 ++++++++++++++ lasso/xml/id-wsf-2.0/disco_service_context.c | 115 ++++++++++++++++++++++++ lasso/xml/id-wsf-2.0/disco_service_context.h | 76 ++++++++++++++++ lasso/xml/id-wsf-2.0/disco_service_metadata.c | 122 ++++++++++++++++++++++++++ lasso/xml/id-wsf-2.0/disco_service_metadata.h | 78 ++++++++++++++++ lasso/xml/id-wsf-2.0/soap_binding_framework.c | 103 ++++++++++++++++++++++ lasso/xml/id-wsf-2.0/soap_binding_framework.h | 67 ++++++++++++++ 10 files changed, 924 insertions(+) commit 118d4b37067f5efeeaf38635b499a6a0d50b8393 Author: Frederic Peters Date: Thu Mar 29 08:50:54 2007 +0000 website update; Lasso is now managed in Subversion doap.rdf | 9 ++++---- website/convert-to-static.py | 43 ++++++++++++++++++++++++++------------ website/templates/base.ezt | 4 ++-- website/templates/changelog.ezt | 5 +++++ website/web/download/index.xml | 10 ++++----- website/web/mailinglists/index.xml | 6 +++--- website/web/souk/index.xml | 2 +- 7 files changed, 49 insertions(+), 30 deletions(-) commit ec6e0af2b11026ba99d63b230e792af5bb9b3ad1 Author: Frederic Peters Date: Mon Mar 26 12:58:33 2007 +0000 website import website/convert-to-static.py | 281 ++++++++ website/ezt.py | 739 +++++++++++++++++++++ website/templates/base.ezt | 71 ++ website/templates/buildlog.ezt | 85 +++ website/templates/changelog.ezt | 19 + website/templates/tests.ezt | 23 + website/web/buildbox.xml | 9 + website/web/css/buildbox.css | 88 +++ website/web/css/lasso.css | 186 ++++++ website/web/css/lasso.png | Bin 0 -> 12907 bytes website/web/css/leaf-style.css | 276 ++++++++ website/web/css/my-leaf.jpeg | Bin 0 -> 21657 bytes website/web/css/note.png | Bin 0 -> 2520 bytes website/web/css/warning.png | Bin 0 -> 3249 bytes website/web/devnotes/id-wsf-stating.html | 472 +++++++++++++ website/web/doap.rdf | 1 + website/web/doap.rdf.config.xml | 6 + website/web/documentation/default.css | 126 ++++ website/web/documentation/index.xml | 47 ++ website/web/documentation/interoperability.xml | 392 +++++++++++ website/web/documentation/perfs.xml | 171 +++++ .../slides/20050201-lasso-solutions-linux.pdf | Bin 0 -> 905265 bytes website/web/download/index.xml | 118 ++++ website/web/figures/caution.png | Bin 0 -> 2369 bytes website/web/figures/important.png | Bin 0 -> 2592 bytes website/web/figures/lasso.png | Bin 0 -> 7305 bytes website/web/figures/note.png | Bin 0 -> 2520 bytes website/web/figures/perfs-sp-libs-large.png | Bin 0 -> 16948 bytes website/web/figures/perfs-sp-libs.png | Bin 0 -> 13709 bytes website/web/figures/perfs-sp-stability-large.png | Bin 0 -> 35996 bytes website/web/figures/perfs-sp-stability.png | Bin 0 -> 43367 bytes website/web/figures/perfs-sp-stability.svg | 568 ++++++++++++++++ website/web/figures/tip.png | Bin 0 -> 2288 bytes website/web/figures/warning.png | Bin 0 -> 3249 bytes website/web/index.xml | 169 +++++ website/web/license.xml | 51 ++ website/web/links.xml | 62 ++ website/web/mailinglists/index.xml | 26 + website/web/news/00-release-0.6.0.xml | 19 + website/web/news/01-release-0.6.1.xml | 18 + website/web/news/02-slides-solution-linux.xml | 11 + website/web/news/03-release-0.6.2.xml | 18 + website/web/news/04-release-0.6.3.xml | 20 + website/web/news/05-release-0.6.4.xml | 19 + website/web/news/06-release-0.6.5.xml | 16 + website/web/news/07-saml2.xml | 11 + website/web/news/08-release-2.0.0.xml | 17 + website/web/news/index.xml | 10 + website/web/souk/example-schema.png | Bin 0 -> 46090 bytes website/web/souk/index.xml | 197 ++++++ website/web/souk/sp1-sso.png | Bin 0 -> 59257 bytes 51 files changed, 4342 insertions(+) commit 6b77c53a272de13271838a8cf99a6fb8aefd6949 Author: Frederic Peters Date: Sat Mar 24 21:10:58 2007 +0000 Attic shouldn't have been imported during the switch to svn lasso/Attic/protocols/.cvsignore | 7 - lasso/Attic/protocols/Makefile.am | 54 -- lasso/Attic/protocols/artifact.c | 371 ----------- lasso/Attic/protocols/artifact.h | 87 --- lasso/Attic/protocols/authn_request.c | 381 ----------- lasso/Attic/protocols/authn_request.h | 79 --- lasso/Attic/protocols/authn_request_envelope.c | 136 ---- lasso/Attic/protocols/authn_request_envelope.h | 72 -- lasso/Attic/protocols/authn_response.c | 194 ------ lasso/Attic/protocols/authn_response.h | 70 -- lasso/Attic/protocols/authn_response_envelope.c | 159 ----- lasso/Attic/protocols/authn_response_envelope.h | 72 -- lasso/Attic/protocols/elements/.cvsignore | 6 - lasso/Attic/protocols/elements/Makefile.am | 18 - lasso/Attic/protocols/elements/assertion.c | 102 --- lasso/Attic/protocols/elements/assertion.h | 64 -- .../protocols/elements/authentication_statement.c | 149 ----- .../protocols/elements/authentication_statement.h | 65 -- lasso/Attic/protocols/federation.c | 360 ---------- lasso/Attic/protocols/federation.h | 111 ---- .../federation_termination_notification.c | 262 -------- .../federation_termination_notification.h | 71 -- lasso/Attic/protocols/logout_request.c | 303 --------- lasso/Attic/protocols/logout_request.h | 71 -- lasso/Attic/protocols/logout_response.c | 352 ---------- lasso/Attic/protocols/logout_response.h | 71 -- .../protocols/name_identifier_mapping_request.c | 196 ------ .../protocols/name_identifier_mapping_request.h | 72 -- .../protocols/name_identifier_mapping_response.c | 228 ------- .../protocols/name_identifier_mapping_response.h | 74 --- lasso/Attic/protocols/protocols.c | 26 - lasso/Attic/protocols/protocols.h | 39 -- lasso/Attic/protocols/provider.c | 732 --------------------- lasso/Attic/protocols/provider.h | 157 ----- .../protocols/register_name_identifier_request.c | 356 ---------- .../protocols/register_name_identifier_request.h | 78 --- .../protocols/register_name_identifier_response.c | 322 --------- .../protocols/register_name_identifier_response.h | 74 --- lasso/Attic/protocols/request.c | 145 ---- lasso/Attic/protocols/request.h | 66 -- lasso/Attic/protocols/response.c | 143 ---- lasso/Attic/protocols/response.h | 66 -- 42 files changed, 6461 deletions(-) commit b921ed749168044afc0f6ea402cc87bcbbded3e7 Author: Frederic Peters Date: Tue Jan 16 09:14:39 2007 +0000 updated changelog for 2.0.0 ChangeLog | 1821 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ NEWS | 26 +- doap.rdf | 26 +- 3 files changed, 1859 insertions(+), 14 deletions(-) commit ad30e9574df50883a7c36939ca1cf0b910b34ebf Author: Frederic Peters Date: Tue Jan 16 09:13:00 2007 +0000 fixed memory leaks tests/login_tests.c | 2 ++ tests/perfs.c | 2 ++ 2 files changed, 4 insertions(+) commit 509b9d4c72f1c430df57b52273be044541459bfc Author: Frederic Peters Date: Tue Jan 16 09:06:03 2007 +0000 updated version number and required swig version configure.ac | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit ae73ac330d31113a4d5e6f35637186b311e746b0 Author: Frederic Peters Date: Tue Jan 9 10:57:47 2007 +0000 added section for ECP (and titled LECP) docs/reference/lasso-sections.txt | 19 +++++- docs/reference/lasso.sgml | 4 +- docs/reference/lasso.types.in | 1 + docs/reference/tmpl/ecp.sgml | 63 ++++++++++++++++++++ docs/reference/tmpl/lecp.sgml | 121 ++++++++++++++++++++++++++++++++++++++ 5 files changed, 206 insertions(+), 2 deletions(-) commit ce8cdd6f7ea8e76c06dece8090f5212a552480af Author: Frederic Peters Date: Mon Jan 8 16:16:38 2007 +0000 reordered some elements in index and added short descriptions to all elements docs/reference/lasso.sgml | 12 +++--- docs/reference/tmpl/saml2_action.sgml | 36 ++++++++++++++++ docs/reference/tmpl/saml2_advice.sgml | 38 +++++++++++++++++ docs/reference/tmpl/saml2_assertion.sgml | 45 ++++++++++++++++++++ docs/reference/tmpl/saml2_attribute.sgml | 38 +++++++++++++++++ docs/reference/tmpl/saml2_attribute_statement.sgml | 36 ++++++++++++++++ .../reference/tmpl/saml2_audience_restriction.sgml | 35 ++++++++++++++++ docs/reference/tmpl/saml2_authn_context.sgml | 38 +++++++++++++++++ docs/reference/tmpl/saml2_authn_statement.sgml | 39 +++++++++++++++++ .../tmpl/saml2_authz_decision_statement.sgml | 38 +++++++++++++++++ docs/reference/tmpl/saml2_base_idabstract.sgml | 36 ++++++++++++++++ docs/reference/tmpl/saml2_condition_abstract.sgml | 34 +++++++++++++++ docs/reference/tmpl/saml2_conditions.sgml | 40 ++++++++++++++++++ docs/reference/tmpl/saml2_encrypted_element.sgml | 37 ++++++++++++++++ docs/reference/tmpl/saml2_evidence.sgml | 38 +++++++++++++++++ .../tmpl/saml2_key_info_confirmation_data.sgml | 35 ++++++++++++++++ docs/reference/tmpl/saml2_name_id.sgml | 39 +++++++++++++++++ docs/reference/tmpl/saml2_one_time_use.sgml | 34 +++++++++++++++ docs/reference/tmpl/saml2_proxy_restriction.sgml | 36 ++++++++++++++++ docs/reference/tmpl/saml2_statement_abstract.sgml | 34 +++++++++++++++ docs/reference/tmpl/saml2_subject.sgml | 38 +++++++++++++++++ .../reference/tmpl/saml2_subject_confirmation.sgml | 39 +++++++++++++++++ .../tmpl/saml2_subject_confirmation_data.sgml | 39 +++++++++++++++++ docs/reference/tmpl/saml2_subject_locality.sgml | 36 ++++++++++++++++ docs/reference/tmpl/saml_advice.sgml | 35 ++++++++++++++++ docs/reference/tmpl/saml_assertion.sgml | 49 ++++++++++++++++++++++ docs/reference/tmpl/saml_attribute.sgml | 37 ++++++++++++++++ docs/reference/tmpl/saml_attribute_designator.sgml | 36 ++++++++++++++++ docs/reference/tmpl/saml_attribute_statement.sgml | 35 ++++++++++++++++ .../tmpl/saml_audience_restriction_condition.sgml | 26 ++++++++++++ .../tmpl/saml_authentication_statement.sgml | 37 ++++++++++++++++ docs/reference/tmpl/saml_authority_binding.sgml | 36 ++++++++++++++++ docs/reference/tmpl/saml_condition_abstract.sgml | 25 +++++++++++ docs/reference/tmpl/saml_conditions.sgml | 37 ++++++++++++++++ docs/reference/tmpl/saml_statement_abstract.sgml | 25 +++++++++++ docs/reference/tmpl/saml_subject.sgml | 35 ++++++++++++++++ docs/reference/tmpl/saml_subject_confirmation.sgml | 36 ++++++++++++++++ docs/reference/tmpl/saml_subject_locality.sgml | 35 ++++++++++++++++ docs/reference/tmpl/saml_subject_statement.sgml | 34 +++++++++++++++ .../tmpl/saml_subject_statement_abstract.sgml | 26 ++++++++++++ docs/reference/tmpl/samlp2_artifact_resolve.sgml | 35 ++++++++++++++++ docs/reference/tmpl/samlp2_artifact_response.sgml | 35 ++++++++++++++++ .../reference/tmpl/samlp2_assertion_idrequest.sgml | 35 ++++++++++++++++ docs/reference/tmpl/samlp2_attribute_query.sgml | 35 ++++++++++++++++ docs/reference/tmpl/samlp2_authn_query.sgml | 36 ++++++++++++++++ docs/reference/tmpl/samlp2_authn_request.sgml | 47 +++++++++++++++++++++ .../tmpl/samlp2_authz_decision_query.sgml | 37 ++++++++++++++++ docs/reference/tmpl/samlp2_extensions.sgml | 34 +++++++++++++++ docs/reference/tmpl/samlp2_idp_entry.sgml | 37 ++++++++++++++++ docs/reference/tmpl/samlp2_idp_list.sgml | 36 ++++++++++++++++ docs/reference/tmpl/samlp2_logout_request.sgml | 41 ++++++++++++++++++ docs/reference/tmpl/samlp2_logout_response.sgml | 35 ++++++++++++++++ .../tmpl/samlp2_manage_name_id_request.sgml | 39 +++++++++++++++++ .../tmpl/samlp2_manage_name_id_response.sgml | 34 +++++++++++++++ .../tmpl/samlp2_name_id_mapping_request.sgml | 38 +++++++++++++++++ .../tmpl/samlp2_name_id_mapping_response.sgml | 36 ++++++++++++++++ docs/reference/tmpl/samlp2_name_id_policy.sgml | 37 ++++++++++++++++ docs/reference/tmpl/samlp2_request_abstract.sgml | 41 ++++++++++++++++++ .../tmpl/samlp2_requested_authn_context.sgml | 37 ++++++++++++++++ docs/reference/tmpl/samlp2_response.sgml | 36 ++++++++++++++++ docs/reference/tmpl/samlp2_scoping.sgml | 37 ++++++++++++++++ docs/reference/tmpl/samlp2_status.sgml | 37 ++++++++++++++++ docs/reference/tmpl/samlp2_status_code.sgml | 36 ++++++++++++++++ docs/reference/tmpl/samlp2_status_detail.sgml | 34 +++++++++++++++ docs/reference/tmpl/samlp2_status_response.sgml | 43 +++++++++++++++++++ .../tmpl/samlp2_subject_query_abstract.sgml | 35 ++++++++++++++++ docs/reference/tmpl/samlp2_terminate.sgml | 34 +++++++++++++++ docs/reference/tmpl/samlp_request.sgml | 34 +++++++++++++++ docs/reference/tmpl/samlp_request_abstract.sgml | 34 +++++++++++++++ docs/reference/tmpl/samlp_response.sgml | 35 ++++++++++++++++ docs/reference/tmpl/samlp_response_abstract.sgml | 35 ++++++++++++++++ docs/reference/tmpl/samlp_status.sgml | 35 ++++++++++++++++ docs/reference/tmpl/samlp_status_code.sgml | 35 ++++++++++++++++ 73 files changed, 2613 insertions(+), 6 deletions(-) commit 05212816bda065c4f14431967f802855a765f4ce Author: Frederic Peters Date: Mon Jan 8 13:36:00 2007 +0000 fixed docstring parameter name lasso/saml-2.0/name_id_management.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 8ec490836454007add7325941af6f0e5c3c51857 Author: Frederic Peters Date: Mon Jan 8 13:34:14 2007 +0000 added all classes for SAMLv2 schema elements docs/reference/lasso-sections.txt | 750 ++++++++++++++++++++++++++++++++++++++ docs/reference/lasso.sgml | 112 +++++- 2 files changed, 859 insertions(+), 3 deletions(-) commit a18bef21a97cee9c75357c66d537c6f39997672a Author: Frederic Peters Date: Mon Jan 8 13:13:49 2007 +0000 un-idff'ied docstrings (and fixed a few comments) lasso/id-ff/login.c | 8 ++++---- lasso/id-ff/logout.c | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) commit ad3e57fa1dea889373b86798ea36b1324f760738 Author: Frederic Peters Date: Mon Jan 8 13:11:11 2007 +0000 added documentation about SAMLv2 Name Id Management profile; and by the same time updated all tmpl/ files with a newer gtk-doc docs/reference/lasso-sections.txt | 23 +++++ docs/reference/lasso.sgml | 6 +- docs/reference/lasso.types.in | 1 + docs/reference/tmpl/defederation.sgml | 4 +- docs/reference/tmpl/discovery.sgml | 6 -- docs/reference/tmpl/federation.sgml | 2 - docs/reference/tmpl/login.sgml | 2 - docs/reference/tmpl/name_id_management.sgml | 111 +++++++++++++++++++++++ docs/reference/tmpl/name_identifier_mapping.sgml | 2 +- docs/reference/tmpl/name_registration.sgml | 2 +- docs/reference/tmpl/node.sgml | 3 - docs/reference/tmpl/profile.sgml | 15 +-- docs/reference/tmpl/server.sgml | 5 - lasso/saml-2.0/name_id_management.c | 47 +++++++++- 14 files changed, 188 insertions(+), 41 deletions(-) commit db403fb6b7a8a099154bfb79027009554a4709e1 Author: Frederic Peters Date: Sun Jan 7 13:07:00 2007 +0000 fixed provider->private_data->encryption_public_key memory leak and removed duplicate freeing for public_key and ca_cert_chain lasso/id-ff/provider.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) commit b189415e39de9657ced9d7a3d5ed174f6bfc3c3c Author: Frederic Peters Date: Sun Jan 7 12:17:30 2007 +0000 mitigate memory leak (?) lasso/xml/tools.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) commit 999edbe4f2da4580dea6828f56ccde30aeb87727 Author: Frederic Peters Date: Sun Jan 7 12:17:12 2007 +0000 fixed memory leak occuring near SNIPPET_SIGNATURE lasso/xml/xml.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit 2193759b8db0a9151ad34d3015d0506c17d33593 Author: Frederic Peters Date: Sun Jan 7 11:46:27 2007 +0000 fixed memory leak in Extension to query string conversion lasso/xml/xml.c | 1 + 1 file changed, 1 insertion(+) commit 8e83ddd65696b843bb1c0dd4d45d9eef19d5334e Author: Frederic Peters Date: Sun Jan 7 11:29:26 2007 +0000 fixed memory leak lasso/id-ff/provider.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) commit 8d4ac988a53409d5846dd2d3f4438c277de443de Author: Frederic Peters Date: Sun Jan 7 10:53:06 2007 +0000 unfixed memory leak, because strange manipulations to xmlnode structures could cause memory corruption lasso/xml/tools.c | 5 +++++ 1 file changed, 5 insertions(+) commit 540e2ebabcf5678bf6980dfa8edfa81251f8424a Author: Frederic Peters Date: Sat Jan 6 22:55:44 2007 +0000 removing white space lost in a tab lasso/id-ff/profile.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit d6252241385f074829b6206656816bed10c971a0 Author: Frederic Peters Date: Sat Jan 6 22:55:24 2007 +0000 removing white spaces on blank lines lasso/id-ff/name_registration.c | 2 +- lasso/xml/lib_authn_response.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 077455087d005bb3b277cee51debb9e292473d05 Author: Frederic Peters Date: Sat Jan 6 22:55:01 2007 +0000 fixing indentation lasso/xml/ds_key_info.c | 2 +- lasso/xml/ds_key_value.c | 2 +- lasso/xml/saml_subject_confirmation.c | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) commit c8fa8f21b417d048c3419e55cb1a412454fdaa3f Author: Frederic Peters Date: Sat Jan 6 22:53:19 2007 +0000 removing white space on blank line lasso/id-wsf/authentication.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 685adebeec94ad33002c065805625ec859e5df37 Author: Frederic Peters Date: Sat Jan 6 22:52:28 2007 +0000 removing spaces from otherwise white lines lasso/id-wsf/authentication.c | 2 +- lasso/xml/xml.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) commit b5806c8935459f133ea6d42352795f9d5a6515f4 Author: Frederic Peters Date: Sat Jan 6 22:51:13 2007 +0000 fixed indentation & param checking lasso/id-ff/login.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit b1ad3a54e2d6aad775ec1e3f995b51660d3ba30a Author: Frederic Peters Date: Sat Jan 6 22:50:59 2007 +0000 fixed memory leak lasso/id-ff/provider.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) commit 33fd80e73b733a07816af48720e96140f4e6507e Author: Frederic Peters Date: Sat Jan 6 22:13:53 2007 +0000 fixed little memory leak lasso/saml-2.0/provider.c | 1 + 1 file changed, 1 insertion(+) commit 3336b34b50cfd0d5461faaa72fc983cae0188b49 Author: Frederic Peters Date: Fri Jan 5 16:11:02 2007 +0000 replace some xmlFree that should have been g_free and added some xmlFree where required. lasso/id-ff/login.c | 2 +- lasso/id-wsf/wsf_profile.c | 4 ++-- lasso/saml-2.0/server.c | 1 + lasso/xml/xml.c | 1 + 4 files changed, 5 insertions(+), 3 deletions(-) commit 4075a1f5292bbf0325d40a48cf753a1c531378a7 Author: Frederic Peters Date: Fri Jan 5 13:59:08 2007 +0000 even more memory leak tracking lasso/id-wsf/wsf_profile.c | 15 +++++++++++---- lasso/xml/tools.c | 9 ++++++--- lasso/xml/xml.c | 2 ++ 3 files changed, 19 insertions(+), 7 deletions(-) commit e636bd0680494533de1e0f2e520042f12f2f7f23 Author: Frederic Peters Date: Fri Jan 5 13:40:07 2007 +0000 new lasso_profile_clean_msg_info function used to clean msg_url and msg_body (free()ing and setting to NULL) in functions where those variables are later set. lasso/id-ff/defederation.c | 1 + lasso/id-ff/lecp.c | 2 ++ lasso/id-ff/login.c | 5 +++++ lasso/id-ff/logout.c | 2 ++ lasso/id-ff/name_identifier_mapping.c | 2 ++ lasso/id-ff/name_registration.c | 2 ++ lasso/id-ff/profile.c | 13 +++++++++++++ lasso/id-ff/profileprivate.h | 1 + lasso/saml-2.0/name_id_management.c | 2 ++ 9 files changed, 30 insertions(+) commit 46a2d6230274ae0bc6ae4f78895f09acc9f1c9f8 Author: Frederic Peters Date: Fri Jan 5 12:41:10 2007 +0000 fixed some memory leaks (tracked with valgrind) lasso/id-ff/provider.c | 12 ++++++++---- lasso/id-wsf/wsf_profile.c | 16 +++++++++------- lasso/xml/xml.c | 5 ++--- 3 files changed, 19 insertions(+), 14 deletions(-) commit 249c7f82c6c93413bb59f8eb62f2ced49f2a0bab Author: Frederic Peters Date: Fri Jan 5 12:40:19 2007 +0000 cleaning up memory allocated for tests; so valgrind logs are cleaner tests/login_tests.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) commit 41d6f7df6847f647744934dbdf72fa6cb4e37343 Author: Frederic Peters Date: Fri Jan 5 11:40:10 2007 +0000 memory management, avoid leaking xmlDoc* lasso/id-ff/login.c | 1 + lasso/id-ff/logout.c | 1 + lasso/id-ff/name_registration.c | 1 + lasso/id-ff/provider.c | 1 + lasso/id-ff/server.c | 1 + lasso/id-wsf/data_service.c | 2 ++ lasso/id-wsf/wsf_profile.c | 7 +++++-- lasso/saml-2.0/name_id_management.c | 1 + 8 files changed, 13 insertions(+), 2 deletions(-) commit 38e9d703915cb7bdef983afbd35c4ab1898a7a6f Author: Frederic Peters Date: Thu Jan 4 15:13:59 2007 +0000 directly include headers from xmlsec/openssl/; at least required to compile on Fedora Cora 6. lasso/xml/tools.c | 2 ++ 1 file changed, 2 insertions(+) commit 58b741d60844c00e3128f184dc0a1bf0d66132c5 Author: Frederic Peters Date: Thu Jan 4 13:52:44 2007 +0000 bumped version to 1.9.9 (and updated libtool version accordingly) and disabled PHP5 support by default. configure.ac | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) commit 78b83a37b1623de64cc4687bc34f445ccd8907dc Author: Frederic Peters Date: Wed Jan 3 23:35:17 2007 +0000 misc fixes for 1) memory leaks around XPath usage and 2) potential segfaults from untested pointers lasso/id-ff/identity.c | 4 +-- lasso/id-ff/lecp.c | 10 +++++- lasso/id-ff/login.c | 23 +++++++----- lasso/id-ff/logout.c | 18 +++++++--- lasso/id-ff/name_identifier_mapping.c | 13 +++++-- lasso/id-ff/name_registration.c | 9 ++++- lasso/id-ff/provider.c | 24 ++++++++++--- lasso/id-wsf/data_service.c | 35 +++++++++++++------ lasso/id-wsf/discovery.c | 5 +++ lasso/id-wsf/wsf_profile.c | 66 ++++++++++++++++++++++++++++------- lasso/saml-2.0/ecp.c | 20 ++++++++--- lasso/saml-2.0/login.c | 30 ++++++++++------ lasso/saml-2.0/logout.c | 4 +++ lasso/xml/xml.c | 11 +++--- 14 files changed, 205 insertions(+), 67 deletions(-) commit 46b74e89841fcc3048e300fdcc1b40ff2b7d35c5 Author: Frederic Peters Date: Wed Jan 3 23:17:52 2007 +0000 new LASSO_NAME_IDENTIFIER_MAPPING_ERROR_MISSING_TARGET_IDENTIFIER error code lasso/errors.h | 1 + swig/Lasso.i | 2 ++ 2 files changed, 3 insertions(+) commit 1e19373f58f3e85fa7f8533b3295742d82bbfaae Author: Frederic Peters Date: Wed Jan 3 21:01:51 2007 +0000 make ID-FF SLO works even when there are SAMLv2 assertions in the session lasso/id-ff/logout.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit 92198cc527b453a724ead9a0ba9610d85f0cd640 Author: Frederic Peters Date: Wed Jan 3 20:59:26 2007 +0000 insure sso and slo from SAML2 work even when there are active ID-FF sessions. lasso/saml-2.0/login.c | 2 +- lasso/saml-2.0/logout.c | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) commit 7de91cfa6e39826ff6cec5770f62461ee679d9b7 Author: Frederic Peters Date: Wed Jan 3 20:58:38 2007 +0000 removed memory leak (GPtrArray was not freed) by directly accessing assertions from their hash table instead of an intermediary GPtrArray. lasso/saml-2.0/profile.c | 34 +++++++++++++++------------------- 1 file changed, 15 insertions(+), 19 deletions(-) commit ae5b1ad7aa213d4e33863c220943f92485d83a85 Author: Nicolas Clapies Date: Tue Jan 2 09:29:30 2007 +0000 Updated metadata saml2 saming files. Fixed protocol binding setting when initiating sso. docs/lasso-book/writing-a-saml2-php-sp.txt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) commit 48bf78625baa4a0e3550967867a647c2a094df04 Author: Frederic Peters Date: Thu Dec 28 19:19:36 2006 +0000 removed XXX comment about SessionIndex since it is handled in the application, not in Lasso lasso/saml-2.0/logout.c | 2 -- 1 file changed, 2 deletions(-) commit 58477d96d883c1fd824912d85aa6f5464b986ca1 Author: Frederic Peters Date: Thu Dec 28 17:46:32 2006 +0000 harmonized LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ and LASSO_PARAM_ERROR_INVALID_VALUE usage lasso/id-ff/defederation.c | 2 +- lasso/id-ff/identity.c | 5 +++-- lasso/id-ff/lecp.c | 18 +++++++++--------- lasso/id-ff/logout.c | 6 +++--- lasso/id-ff/name_identifier_mapping.c | 8 ++++---- lasso/id-wsf/authentication.c | 17 ++++++++--------- lasso/id-wsf/data_service.c | 3 ++- 7 files changed, 30 insertions(+), 29 deletions(-) commit 1e77c84d5dccc4326995ca923c03f1ae5dce0256 Author: Frederic Peters Date: Thu Dec 28 17:32:40 2006 +0000 extra checking for wrong or NULL parameters lasso/saml-2.0/ecp.c | 11 +++++++---- lasso/saml-2.0/name_id_management.c | 31 ++++++++++++++++++++++++++----- 2 files changed, 33 insertions(+), 9 deletions(-) commit c86d99e9e09ce219c869e01ec7430cbd6e779a80 Author: Frederic Peters Date: Thu Dec 28 15:42:17 2006 +0000 more fixes for optional arg support in PHP php/patch_swig_output.py | 34 +++++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) commit 342bfd307345befb2d9258e60ab0bf972e629211 Author: Frederic Peters Date: Thu Dec 28 15:19:46 2006 +0000 optional args are handled differently in newer SWIG versions php/patch_swig_output.py | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) commit 342649509e230fcc3e8590842e1ea4abf13af5ed Author: Frederic Peters Date: Thu Dec 28 14:44:56 2006 +0000 notice when building deflated query fails, and don't include (null) as query component in this case. lasso/xml/saml-2.0/samlp2_assertion_idrequest.c | 3 +++ lasso/xml/saml-2.0/samlp2_authn_request.c | 3 +++ lasso/xml/saml-2.0/samlp2_logout_request.c | 3 +++ lasso/xml/saml-2.0/samlp2_logout_response.c | 3 +++ lasso/xml/saml-2.0/samlp2_manage_name_id_request.c | 3 +++ lasso/xml/saml-2.0/samlp2_manage_name_id_response.c | 3 +++ lasso/xml/saml-2.0/samlp2_name_id_mapping_request.c | 3 +++ lasso/xml/saml-2.0/samlp2_name_id_mapping_response.c | 3 +++ lasso/xml/saml-2.0/samlp2_response.c | 3 +++ lasso/xml/saml-2.0/samlp2_status_response.c | 3 +++ lasso/xml/saml-2.0/samlp2_subject_query_abstract.c | 3 +++ 11 files changed, 33 insertions(+) commit 34730602434e04703035a8a8b818530f42f1a120 Author: Frederic Peters Date: Thu Dec 28 11:12:36 2006 +0000 fixed crashed added when changing find_path return type lasso/xml/xml.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit d5c4e974ebff28e79c5aeb4f180899e2a61b7ae1 Author: Frederic Peters Date: Thu Dec 28 10:56:13 2006 +0000 coding style improvements lasso/id-ff/login.c | 5 +-- lasso/id-wsf/authentication.c | 11 +++---- lasso/id-wsf/discovery.c | 21 +++++-------- lasso/id-wsf/personal_profile_service.c | 3 +- lasso/id-wsf/wsf_profile.c | 53 ++++++++++++++++---------------- lasso/saml-2.0/login.c | 10 +++--- lasso/xml/lib_authentication_statement.c | 5 +-- lasso/xml/tools.c | 4 +-- lasso/xml/xml.c | 11 ++++--- 9 files changed, 60 insertions(+), 63 deletions(-) commit 7a78af3361d314541891fc30c4787a9d756844f9 Author: Frederic Peters Date: Thu Dec 28 10:45:39 2006 +0000 replaced remaining LASSO_ERROR_UNDEFINED by appropriate error codes lasso/errors.h | 12 ++++++++ lasso/id-wsf/data_service.c | 39 ++++++++++---------------- lasso/id-wsf/discovery.c | 33 ++++++++++++---------- lasso/id-wsf/wsf_profile.c | 67 ++++++++++++++++++++++++--------------------- 4 files changed, 82 insertions(+), 69 deletions(-) commit e6a82f5a9aadad82650f6b5114115d5174184d26 Author: Frederic Peters Date: Thu Dec 28 10:27:09 2006 +0000 new error codes and coding style swig/Lasso.i | 80 +++++++++++++++++++++++++++++++++++++----------------------- 1 file changed, 49 insertions(+), 31 deletions(-) commit a126623ca41f690a5c508e8ee859baac0cafd079 Author: Frederic Peters Date: Thu Dec 28 10:26:52 2006 +0000 missing include, typo in comment and coding style swig/Lasso-saml2.i | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) commit 53e10aec35691e0fb55aeb8493eac30a23ac0562 Author: Frederic Peters Date: Thu Dec 28 10:26:12 2006 +0000 coding style swig/Lasso-wsf-sa.i | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 17df2984aa9968ec3e9a55677dd3fcdb4d814a4e Author: Frederic Peters Date: Thu Dec 28 10:19:46 2006 +0000 replaced LASSO_ERROR_UNDEFINED by appropriate error codes in all of xml/ and id-ff/ lasso/errors.c | 3 +++ lasso/errors.h | 8 +++++++- lasso/id-ff/identity.c | 2 +- lasso/id-ff/lecp.c | 13 ++++--------- lasso/id-ff/login.c | 4 ++-- lasso/id-ff/name_identifier_mapping.c | 25 +++++++++++-------------- lasso/id-ff/name_registration.c | 26 ++++++++++++-------------- lasso/id-ff/profile.c | 2 +- lasso/id-ff/provider.c | 2 +- lasso/xml/xml.c | 2 +- 10 files changed, 43 insertions(+), 44 deletions(-) commit 3c7f8cca010693556710f923d69fa3e350e42e6e Author: Frederic Peters Date: Wed Dec 27 23:57:01 2006 +0000 coding style: added spaces at appropriate places lasso/id-ff/login.c | 2 +- lasso/id-wsf/wsf_profile.c | 11 +++++------ 2 files changed, 6 insertions(+), 7 deletions(-) commit 02e196625e61acd5d128f90b829df8965a79445d Author: Frederic Peters Date: Wed Dec 27 23:55:07 2006 +0000 replaced most LASSO_ERROR_UNDEFINED by appropriate error codes (two occurences are remaining) lasso/id-ff/login.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) commit 08088875482304db5e3b80e68743799657fe6361 Author: Frederic Peters Date: Wed Dec 27 23:50:15 2006 +0000 fixed all occurences of returning a negative number unspecified in errors.h lasso/id-ff/identity.c | 4 ++-- lasso/id-ff/lecp.c | 18 +++++++++--------- lasso/id-ff/login.c | 6 ++---- lasso/id-ff/logout.c | 6 +++--- lasso/id-ff/name_identifier_mapping.c | 6 ++++-- lasso/id-ff/name_registration.c | 25 ++++++++++++++++--------- lasso/id-ff/session.c | 26 ++++++++++++-------------- lasso/id-wsf/data_service.c | 4 ++-- lasso/saml-2.0/name_id_management.c | 8 +++++--- 9 files changed, 55 insertions(+), 48 deletions(-) commit be476b2af6dc89151e16a9ffc69d0fbe0075b6ea Author: Frederic Peters Date: Wed Dec 27 23:41:14 2006 +0000 replaced all usage of UNDEFINED error code in logout profiles (both ID-FF and SAMLv2) by appropriate error codes lasso/id-ff/logout.c | 12 +++++------- lasso/saml-2.0/logout.c | 9 ++++----- 2 files changed, 9 insertions(+), 12 deletions(-) commit cdd45908f5ee429c55cdbb100a1ce0bdd7bb7538 Author: Frederic Peters Date: Wed Dec 27 16:19:39 2006 +0000 new LASSO_PROFILE_ERROR_STATUS_NOT_SUCCESS error code lasso/errors.c | 2 ++ lasso/errors.h | 1 + lasso/saml-2.0/name_id_management.c | 3 +-- 3 files changed, 4 insertions(+), 2 deletions(-) commit 0b9d49d4cf1f20793e2839eae3785133f26f6d35 Author: Frederic Peters Date: Wed Dec 27 16:18:54 2006 +0000 typo fix lasso/id-wsf/data_service.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 5dee8a36820fdb939f23800717d15ad93b85e056 Author: Frederic Peters Date: Wed Dec 27 16:12:50 2006 +0000 changed test against assertions which could yield a useless LASSO_ERROR_UNDEFINED lasso/saml-2.0/profile.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) commit 807403d5a656300f9e2834c033ba90754f1e31cd Author: Frederic Peters Date: Wed Dec 27 16:06:35 2006 +0000 avoid segfaults when passing NULL to *_new_from_dump lasso/id-ff/login.c | 3 +++ lasso/id-ff/logout.c | 3 +++ lasso/id-ff/name_registration.c | 3 +++ lasso/id-ff/provider.c | 3 +++ 4 files changed, 12 insertions(+) commit 9b9166d797689dc0ab90e50d0b02d757c5dd1137 Author: Frederic Peters Date: Wed Dec 27 16:00:53 2006 +0000 fixing a bunch of possible segfaults (NULL passed to strlen) lasso/id-wsf/authentication.c | 6 +++--- lasso/id-wsf/data_service.c | 2 ++ 2 files changed, 5 insertions(+), 3 deletions(-) commit 8d8f3288a8468a9e7801c3405576d05c472c6514 Author: Frederic Peters Date: Wed Dec 27 15:57:07 2006 +0000 fixing a bunch of undeclared functions and possible segfaults; also removed some debugging printf. (ID-WSF is now warning-free (but char signedness)) lasso/id-wsf/authentication.c | 2 - lasso/id-wsf/authentication.h | 2 + lasso/id-wsf/data_service.c | 38 +++++++------ lasso/id-wsf/discovery.c | 5 +- lasso/id-wsf/wsf_profile.c | 126 +++++++++++++++++++++++------------------- lasso/xml/soap_detail.h | 1 + 6 files changed, 98 insertions(+), 76 deletions(-) commit 0970475f12c75d886800cdbc4fd11f22ec617364 Author: Frederic Peters Date: Wed Dec 27 15:24:56 2006 +0000 fixing some usage of unitialized variables in SAMLv2 support lasso/saml-2.0/ecp.c | 4 ++-- lasso/saml-2.0/login.c | 3 ++- lasso/saml-2.0/provider.c | 5 +---- 3 files changed, 5 insertions(+), 7 deletions(-) commit dc6243cd5d024dd9d552e81d4f793a33a69abc43 Author: Frederic Peters Date: Wed Dec 27 15:21:56 2006 +0000 correctly initialize req at top of function and don't try to get the deflated samlv2 query if the parameter was not present lasso/xml/xml.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit 99ca11975b11b35cf94430c7257ce922598f8a17 Author: Frederic Peters Date: Wed Dec 27 15:20:44 2006 +0000 moved find_path and set_value_at_path from returning int to returning gboolean; this gets rid of ugly and useless LASSO_ERROR_UNDEFINED in thos functions. lasso/xml/xml.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) commit 78249ef8bf5c265d0ef025fb995d17ac46042d74 Author: Frederic Peters Date: Wed Dec 27 15:05:53 2006 +0000 default encryption type is AES-128, rearranged code so that is clearer (let default handling be at the end) lasso/xml/xml.c | 14 +++++++------- lasso/xml/xml_enc.h | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) commit 97c351749d23e3eb41c973ed5197a59f053ffaf3 Author: Frederic Peters Date: Wed Dec 27 15:04:00 2006 +0000 fixed gtk-doc for some enums lasso/id-ff/provider.h | 14 +++++++------- lasso/xml/xml_enc.h | 8 ++++---- 2 files changed, 11 insertions(+), 11 deletions(-) commit 85e5cfc38a62a098054c3385ab203ef57ea747b4 Author: Frederic Peters Date: Wed Dec 27 14:59:59 2006 +0000 Adding Damien to developers AUTHORS | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) commit 5384c0ad29cca3eb0a5e23b32c4c4d0fcefb2ee8 Author: Frederic Peters Date: Wed Dec 27 14:59:40 2006 +0000 fixing minor typo README.WIN32 | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) commit e71915a9c0195542b5842e0a8747c0ab029d2b54 Author: Frederic Peters Date: Wed Dec 27 14:54:25 2006 +0000 added libgcj7-dev for gcj 4.1 README.JAVA | 2 ++ 1 file changed, 2 insertions(+) commit 1b0f96f6c7c606183438272c75426d376924acdb Author: Frederic Peters Date: Thu Dec 21 00:03:08 2006 +0000 fixed a few (harmless) warnings detected when compiling with -Wall -Wmissing-declarations -Wdeclaration-after-statement lasso/saml-2.0/name_id_management.c | 1 + lasso/saml-2.0/profile.c | 1 + lasso/xml/tools.c | 2 ++ lasso/xml/xml.c | 7 +++++-- 4 files changed, 9 insertions(+), 2 deletions(-) commit 29c897c8ecf3693ade293cd28c785f43e3cab9ac Author: Frederic Peters Date: Wed Dec 20 23:41:44 2006 +0000 set return type swig/Lasso-wsf-disco.i | 1 + 1 file changed, 1 insertion(+) commit 73819ed96b211ea8863deb7d7509c37aa0492640 Author: Frederic Peters Date: Wed Dec 20 13:47:42 2006 +0000 fixed used of unitialized variable lasso/id-ff/defederation.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit b13136af8a5e7e2e61ccd4e0a388f963b25f24d1 Author: Nicolas Clapies Date: Wed Dec 20 12:53:25 2006 +0000 Added SAML2 PHP documentation. Need to complete with some Login and Logout details. Need to add description of Name Id Management profile. docs/lasso-book/Makefile.am | 6 +- docs/lasso-book/writing-a-saml2-php-sp.txt | 415 +++++++++++++++++++++++++++++ 2 files changed, 419 insertions(+), 2 deletions(-) commit 13f707bf30acd26ae9c6fac5321d0accd47a5b90 Author: Damien Laniel Date: Wed Dec 20 09:03:41 2006 +0000 Allow the choice of the encryption algorithm to use lasso/id-ff/provider.c | 14 ++++++++++++ lasso/id-ff/provider.h | 4 ++++ lasso/id-ff/providerprivate.h | 1 + lasso/saml-2.0/login.c | 5 ++++- lasso/saml-2.0/logout.c | 3 ++- lasso/xml/saml-2.0/saml2_assertion.c | 3 +++ lasso/xml/saml-2.0/saml2_assertion.h | 3 +++ lasso/xml/tools.c | 2 +- lasso/xml/xml.c | 43 +++++++++++++++++++++++++++++++----- lasso/xml/xml_enc.h | 19 +++++++++++++++- swig/Lasso.i | 26 +++++++++++++++++++--- 11 files changed, 110 insertions(+), 13 deletions(-) commit c6f2dfb32f124fbd348e64c444ae2d42bc183309 Author: Frederic Peters Date: Tue Dec 19 15:49:29 2006 +0000 include all testing metadata tests/metadata/Makefile.am | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 9741de1959a84144b6ecb7a08c17bf2448e6c455 Author: Frederic Peters Date: Mon Dec 18 17:53:53 2006 +0000 fix rst syntax docs/lasso-book/single-sign-on.rst | 1 + 1 file changed, 1 insertion(+) commit e87094e76a943711957910f450cfb36f1fe560ba Author: Frederic Peters Date: Sat Dec 16 09:47:16 2006 +0000 Added (and documented) new members to snippet, necessary to fix namespace for saml:AuthnContextClassRef used in samlp:RequestedAuthnContext docs/reference/snippet-types.rst | 6 +++++- lasso/xml/private.h | 2 ++ lasso/xml/saml-2.0/samlp2_requested_authn_context.c | 6 ++++-- lasso/xml/saml-2.0/samlp2_requested_authn_context.h | 4 ++-- lasso/xml/xml.c | 8 +++++++- 5 files changed, 20 insertions(+), 6 deletions(-) commit 48b682c74636deb6036669ae04dc3c1a3ab0de02 Author: Frederic Peters Date: Fri Dec 8 11:51:05 2006 +0000 testing metadata files are in $(srcdir) tests/Makefile.am | 1 + tests/metadata_tests.c | 10 +++++----- 2 files changed, 6 insertions(+), 5 deletions(-) commit 41313eb3886b407e138a6f2b7933953b343c8f1f Author: Frederic Peters Date: Fri Dec 8 11:02:47 2006 +0000 include tests metadata subdir tests/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit cb4c16b928e4ce682cab1cbd4b4ee9bb6de2fb97 Author: Frederic Peters Date: Fri Dec 8 10:57:05 2006 +0000 ship metadata files used in tests configure.ac | 1 + tests/metadata/Makefile.am | 6 ++++++ 2 files changed, 7 insertions(+) commit 276d96005dd169b53412fb2909ffb863f9c7d665 Author: Frederic Peters Date: Fri Dec 8 10:50:25 2006 +0000 fixed php configure options indentation configure.ac | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 384a5e26fe9fd767e0f40465859472e1a6238147 Author: Frederic Peters Date: Fri Dec 8 10:05:39 2006 +0000 added support for PHP5 Makefile.am | 5 +++- configure.ac | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-- php5/Makefile.am | 20 ++++++++++++++ 3 files changed, 101 insertions(+), 3 deletions(-) commit 1db6794167edf425bb9fbb1800da9f8f970ab8c5 Author: Frederic Peters Date: Fri Dec 8 10:03:18 2006 +0000 compile PHP5 binding fine (using PHP_VERSION_ID to see if this is PHP 5) swig/Lasso.i | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) commit 658620b6df37c338c5f16e7913e02a3fb4cb6ec9 Author: Frederic Peters Date: Fri Dec 8 09:39:03 2006 +0000 try to avoid detecting php5 as a compatible php version Makefile.am | 6 ++-- configure.ac | 89 +++++++++++++++++++++++++++++---------------------------- php/Makefile.am | 8 +++--- 3 files changed, 52 insertions(+), 51 deletions(-) commit 1719d2dcd0423679e15a4764b458c394a8f9a588 Author: Frederic Peters Date: Fri Dec 8 09:15:35 2006 +0000 tarball have to ship two new Java file java/Makefile.am | 2 ++ 1 file changed, 2 insertions(+) commit 8017aa3f6f390d71d1364054c915d436ebda7c36 Author: Frederic Peters Date: Fri Dec 8 09:05:46 2006 +0000 ship xml_enc.h lasso/xml/Makefile.am | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 5a6221d328b24fd2b38868f0ee3421fde13015fd Author: Frederic Peters Date: Thu Dec 7 18:24:29 2006 +0000 removed -dlname argument which disappeared in SWIG 1.3.31 and was already optional in 1.3.29 php/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit e6150c80df58313755c6d99e53ce4b9e8dfd206a Author: Frederic Peters Date: Thu Dec 7 18:22:25 2006 +0000 abstract is a reserved java keyword swig/Lasso-wsf-disco.i | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit dd91c255beee7e5a79b0c0303debc632dfaa9faf Author: Frederic Peters Date: Thu Dec 7 18:13:31 2006 +0000 different code path for SWIG >= 1.3.31 for downcast in java swig/Lasso.i | 7 +++++++ 1 file changed, 7 insertions(+) commit 92abb643eaae11edacb4b2860b06ced00935fee2 Author: Frederic Peters Date: Thu Dec 7 17:29:36 2006 +0000 added (required in swig 1.3.31) methodmodifiers for javadestruct delete typemap swig/Lasso.i | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 1c05f63bf3b01c0441f9802e3eac4ca009a75b83 Author: Frederic Peters Date: Thu Dec 7 17:27:30 2006 +0000 abstract attribute breaks php binding with SWIG 1.3.31 swig/Lasso-wsf-disco.i | 6 ++++++ 1 file changed, 6 insertions(+) commit 1567e198b2a4ecde56e948e0172f589ae8109635 Author: Frederic Peters Date: Thu Dec 7 15:23:21 2006 +0000 fixed PHP4 #ifdef swig/saml-2.0/saml2_subject_locality.i | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit d20172ca8afcd425c56963b04646a16aa698abb1 Author: Frederic Peters Date: Thu Dec 7 15:21:32 2006 +0000 binding for new error code swig/Lasso.i | 1 + 1 file changed, 1 insertion(+) commit 255f89076e5d606c541d03ee348e5599514a6aac Author: Frederic Peters Date: Thu Dec 7 15:20:37 2006 +0000 ECP fixes lasso/xml/xml.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) commit c5572210daf57548117f0ab146f8436780b7b429 Author: Frederic Peters Date: Thu Dec 7 15:19:30 2006 +0000 SAMLv2 compliance fix (mostly RelayState and affiliations related) lasso/id-ff/profile.c | 11 ++++++- lasso/saml-2.0/login.c | 75 +++++++++++++++++++++++++++++++++++++++--------- lasso/saml-2.0/profile.c | 24 +++++++++++----- 3 files changed, 89 insertions(+), 21 deletions(-) commit 4e695438477fc98c01c76eac31f41c22fb5c40c5 Author: Frederic Peters Date: Thu Dec 7 13:33:00 2006 +0000 use Location when ResponseLocation is not available lasso/saml-2.0/name_id_management.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit 2bdab69dfc10e84a8c18b16da281630b5359f855 Author: Frederic Peters Date: Thu Dec 7 13:27:18 2006 +0000 minimal support for EncryptedID in federation termiation lasso/saml-2.0/name_id_management.c | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) commit e33f266e6fda24d98b3e3fd841107ff4a0ea0ee8 Author: Damien Laniel Date: Wed Dec 6 17:50:23 2006 +0000 Better parse xml to find and EncryptedKey lasso/xml/xml.c | 43 ++++++++++++++++++++----------------------- 1 file changed, 20 insertions(+), 23 deletions(-) commit 3ff0082fdf8d632a3a35d26761cd7d9f2e526abd Author: Frederic Peters Date: Wed Dec 6 16:32:02 2006 +0000 if signature element is not found, look for it in an assertion element (this is not perfect since it should be possibly to check *both* signatures and we don't care for the moment) lasso/id-ff/provider.c | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) commit 99f0d3df4f648309c34a857694712c216a5cc61d Author: Frederic Peters Date: Wed Dec 6 14:06:24 2006 +0000 new logout error code lasso/errors.c | 3 +++ lasso/errors.h | 1 + 2 files changed, 4 insertions(+) commit c888519f1e20b7fff1726d1051e4e80a5e5d3cb0 Author: Frederic Peters Date: Wed Dec 6 09:26:45 2006 +0000 relaystate handling lasso/xml/saml-2.0/samlp2_authn_request.c | 5 ++++- lasso/xml/saml-2.0/samlp2_authn_request.h | 3 +++ lasso/xml/saml-2.0/samlp2_logout_request.c | 5 ++++- lasso/xml/saml-2.0/samlp2_logout_request.h | 2 ++ lasso/xml/saml-2.0/samlp2_logout_response.c | 9 ++++++++- lasso/xml/saml-2.0/samlp2_logout_response.h | 1 + 6 files changed, 22 insertions(+), 3 deletions(-) commit 6c39cf413b56383ad1c83999a1c79095b91f0e15 Author: Frederic Peters Date: Wed Dec 6 09:25:42 2006 +0000 set Destination and handle relayState lasso/saml-2.0/logout.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) commit 4b0d42818663a949dad12ef57ee1cfdf81b89c51 Author: Frederic Peters Date: Wed Dec 6 09:24:52 2006 +0000 fixed ecp attribute name lasso/xml/xml.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 7a4be94c3d876e4a6bb2689e6bb8d2841e164dad Author: Nicolas Clapies Date: Tue Dec 5 17:16:54 2006 +0000 Added paos response message process support in LassoLogin object. lasso/id-ff/login.c | 16 ++++++++++++++++ lasso/id-ff/login.h | 1 + lasso/saml-2.0/login.c | 16 +++------------- lasso/saml-2.0/loginprivate.h | 1 + swig/Lasso.i | 5 +++++ 5 files changed, 26 insertions(+), 13 deletions(-) commit f491bbfc69e0d50e72e41654818e78ccaa715ed8 Author: Frederic Peters Date: Tue Dec 5 14:31:18 2006 +0000 look up harder for encypted stuff lasso/xml/xml.c | 31 ++++++++++++++----------------- 1 file changed, 14 insertions(+), 17 deletions(-) commit 7a1a57ba735298f8677e72b0f86f839a7ad16f15 Author: Frederic Peters Date: Tue Dec 5 14:16:41 2006 +0000 avoid segfaults looking for decryption key lasso/xml/xml.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit f849a3a7f556ca49376873d6a3b165f21615779a Author: Frederic Peters Date: Tue Dec 5 10:24:59 2006 +0000 return missing assertion error on missing assertion lasso/saml-2.0/logout.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 39c346ed13b187b59e16d9621fe73dd0878ea829 Author: Frederic Peters Date: Tue Dec 5 08:16:33 2006 +0000 removed conflicting change lasso/saml-2.0/login.c | 4 ++++ 1 file changed, 4 insertions(+) commit 160e6461fa42dadc3a0e585bb7abd43e24591940 Author: Frederic Peters Date: Tue Dec 5 08:14:15 2006 +0000 use 128-bit AES which seems better supported by other applications lasso/xml/xml.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 1dd37b271c0b1bd47d3c8fe925a86db12031c5e5 Author: Frederic Peters Date: Tue Dec 5 08:13:36 2006 +0000 fixed casing for all saml2 attribute members swig/saml-2.0/saml2_action.i | 3 +++ swig/saml-2.0/saml2_assertion.i | 9 +++++++++ swig/saml-2.0/saml2_attribute.i | 9 +++++++++ swig/saml-2.0/saml2_authn_context.i | 9 +++++++++ swig/saml-2.0/saml2_authn_statement.i | 9 +++++++++ swig/saml-2.0/saml2_authz_decision_statement.i | 6 ++++++ swig/saml-2.0/saml2_base_idabstract.i | 6 ++++++ swig/saml-2.0/saml2_name_id.i | 12 ++++++++++++ swig/saml-2.0/saml2_proxy_restriction.i | 6 ++++++ swig/saml-2.0/saml2_subject_locality.i | 6 ++++++ swig/saml-2.0/samlp2_artifact_resolve.i | 3 +++ swig/saml-2.0/samlp2_assertion_idrequest.i | 3 +++ swig/saml-2.0/samlp2_authn_query.i | 3 +++ swig/saml-2.0/samlp2_authz_decision_query.i | 3 +++ swig/saml-2.0/samlp2_idp_entry.i | 9 +++++++++ swig/saml-2.0/samlp2_idp_list.i | 3 +++ swig/saml-2.0/samlp2_manage_name_id_request.i | 3 +++ swig/saml-2.0/samlp2_request_abstract.i | 12 ++++++++++++ swig/saml-2.0/samlp2_scoping.i | 6 ++++++ swig/saml-2.0/samlp2_status.i | 3 +++ swig/saml-2.0/samlp2_status_code.i | 3 +++ swig/saml-2.0/samlp2_status_response.i | 18 ++++++++++++++++++ 22 files changed, 144 insertions(+) commit d1cc0217ed0ef9dfce2c969a2fe2d36992fb34b7 Author: Nicolas Clapies Date: Mon Dec 4 21:41:21 2006 +0000 Moved ECP protocol binding detection from to PAOS. lasso/saml-2.0/login.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 6b0381bdc235f7c23c02a602fd0000eca754ef93 Author: Damien Laniel Date: Mon Dec 4 17:21:00 2006 +0000 Verify message signature in lasso_saml20_login_process_authn_response_msg lasso/id-ff/provider.c | 10 +++++----- lasso/saml-2.0/login.c | 4 ++++ 2 files changed, 9 insertions(+), 5 deletions(-) commit 993f96ed4047ba843ea7a2ce50c44dbeb8668b87 Author: Frederic Peters Date: Mon Dec 4 15:49:50 2006 +0000 look up for the right federation based on affiliation in logout lasso/saml-2.0/logout.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) commit fa020c55e43460439daad01c0b29895364faa185 Author: Frederic Peters Date: Mon Dec 4 15:22:45 2006 +0000 use federation from affiliation if necessary in logout lasso/saml-2.0/logout.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) commit 35ca06dfa06f43b12b5f37f22db64e83c9ff6810 Author: Frederic Peters Date: Mon Dec 4 14:47:37 2006 +0000 correctly rename attributes to camelCase swig/saml-2.0/samlp2_logout_request.i | 11 +++++++++++ 1 file changed, 11 insertions(+) commit 7509f30eb1e2aac64090545abbcbd78052b98c4a Author: Frederic Peters Date: Mon Dec 4 10:21:09 2006 +0000 fixed signature element position lasso/xml/saml-2.0/saml2_assertion.c | 4 ++-- lasso/xml/saml-2.0/samlp2_request_abstract.c | 4 ++-- lasso/xml/saml-2.0/samlp2_status_response.c | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) commit be2e00c4325c5f39f7d096d2a74ec267d2e32aa7 Author: Frederic Peters Date: Mon Dec 4 10:10:16 2006 +0000 binding for authnStatement swig/saml-2.0/saml2_assertion.i | 11 +++++++++++ 1 file changed, 11 insertions(+) commit 977e7b281f09bda7ca150b1dd2357c416898a497 Author: Damien Laniel Date: Sat Dec 2 14:53:51 2006 +0000 Fixed memory management lasso/xml/saml-2.0/samlp2_response.c | 1 + 1 file changed, 1 insertion(+) commit 224eb79d490407905efce719c76fc8946663010c Author: Damien Laniel Date: Sat Dec 2 14:47:14 2006 +0000 Fixed memory management problems lasso/xml/saml-2.0/samlp2_response.c | 2 +- lasso/xml/xml.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 85ce95f4e55bfcd13adf4c31de3323e04628e484 Author: Damien Laniel Date: Sat Dec 2 11:53:32 2006 +0000 Fixed a few warnings with -Wall lasso/xml/tools.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit e49890228517f4f1d58ac95e4d75fc9b034371ba Author: Frederic Peters Date: Fri Dec 1 19:25:56 2006 +0000 (stupid me) initialize and destroy correctly affiliation variables lasso/id-ff/provider.c | 6 ++++++ 1 file changed, 6 insertions(+) commit 10ab6685fcbc927762f7170347d2956e30850daa Author: Frederic Peters Date: Fri Dec 1 18:45:10 2006 +0000 achieved support for using affiliations lasso/id-ff/providerprivate.h | 1 + lasso/saml-2.0/login.c | 35 ++++++++++++++++++++++++++++------- lasso/saml-2.0/server.c | 10 +++++++--- 3 files changed, 36 insertions(+), 10 deletions(-) commit af3bed614a107e74a38c5e81a74596837bbc998f Author: Frederic Peters Date: Fri Dec 1 17:54:34 2006 +0000 fixing case for NameIdPolicy binding swig/saml-2.0/samlp2_name_id_policy.i | 6 ++++++ 1 file changed, 6 insertions(+) commit 074c35b57016962157cbfa6262aef503810f04b5 Author: Frederic Peters Date: Fri Dec 1 15:25:07 2006 +0000 include id-wsf/identity.h to get identity_get_offerings prototype swig/Lasso.i | 3 +++ 1 file changed, 3 insertions(+) commit cfedc84513fa8228cef75aceb987c28d6935454d Author: Damien Laniel Date: Fri Dec 1 15:04:04 2006 +0000 Added an error code in bindings swig/Lasso.i | 1 + 1 file changed, 1 insertion(+) commit 3f0e00279514d6f37f2a0f29d785558d799937c3 Author: Frederic Peters Date: Fri Dec 1 11:13:07 2006 +0000 on logout response, if responder then look inside for real value lasso/saml-2.0/logout.c | 9 +++++++++ 1 file changed, 9 insertions(+) commit 8e3cdaedb1ad8b970c703247e48b634c1d345728 Author: Damien Laniel Date: Fri Dec 1 08:30:49 2006 +0000 Fixed a memory problem (was double free) lasso/saml-2.0/login.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit a9daf8facc0b028a4687c833c1441ef00e3867d2 Author: Damien Laniel Date: Thu Nov 30 19:43:14 2006 +0000 Fixed logout request signature lasso/saml-2.0/logout.c | 9 +++++++++ 1 file changed, 9 insertions(+) commit 27a0c91c6942740a7de151f2f479b9b713da549e Author: Damien Laniel Date: Thu Nov 30 18:11:59 2006 +0000 Initialise and destroy correctly provider private datas lasso/id-ff/provider.c | 17 ++++++++++++++--- lasso/id-ff/providerprivate.h | 2 +- 2 files changed, 15 insertions(+), 4 deletions(-) commit 818de5a5347933ce9549f45e698da2192da765d1 Author: Frederic Peters Date: Thu Nov 30 17:59:50 2006 +0000 only call into lasso_saml20_login_process_paos_response_msg if PAOS namespace is visible; this avoids parsing three times the same message for the common case of *not* PAOS. lasso/saml-2.0/login.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) commit 01fda42b98b0fb793613f55d7966ea150975a879 Author: Frederic Peters Date: Thu Nov 30 16:26:06 2006 +0000 removed side effects in samlp2_response/get_xmlNode lasso/xml/saml-2.0/samlp2_response.c | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) commit 2552b72458e153b21a7677bbcfc6d56250dae3fd Author: Frederic Peters Date: Thu Nov 30 15:37:34 2006 +0000 fixed case when not using encrypted assertion lasso/xml/saml-2.0/samlp2_response.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit 2b4627a8852ef694a0d74ccff5246c3b418aca63 Author: Frederic Peters Date: Thu Nov 30 11:04:57 2006 +0000 fixing memory leaks, side effects and more in EncryptedAssertion lasso/xml/saml-2.0/samlp2_response.c | 27 +++++++++++++++------------ lasso/xml/tools.c | 35 ++++++++++++++++------------------- 2 files changed, 31 insertions(+), 31 deletions(-) commit 2b6e2f5d083aebbc47e640a4f2d399f66f805e56 Author: Nicolas Clapies Date: Thu Nov 30 10:46:48 2006 +0000 Uncommented xml free. lasso/saml-2.0/ecp.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 418e1a22ccc81c0bd7712c447ab891e8acd18be8 Author: Nicolas Clapies Date: Thu Nov 30 10:43:18 2006 +0000 Fixed memory use. lasso/saml-2.0/ecp.c | 20 ++++++++++++++++---- lasso/saml-2.0/ecpprivate.h | 4 ++-- 2 files changed, 18 insertions(+), 6 deletions(-) commit 31afa8d98024ff5b21e53191e4e5afdc10a51f66 Author: Frederic Peters Date: Thu Nov 30 10:39:41 2006 +0000 naming lists "item" is confusin lasso/xml/saml-2.0/samlp2_response.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 35bb9b4957191d07e13ae92187e64c73c94d658b Author: Nicolas Clapies Date: Thu Nov 30 09:52:04 2006 +0000 Added missing ecp private header file. lasso/saml-2.0/ecpprivate.h | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) commit a61dcb8379aa957ddfa08bd74a7446256dae5b43 Author: Nicolas Clapies Date: Thu Nov 30 09:46:45 2006 +0000 Added private structure for LassoEcp to keep relayed data. lasso/saml-2.0/Makefile.am | 3 ++- lasso/saml-2.0/ecp.c | 38 +++++++++++++++++++++++++++++++++----- lasso/saml-2.0/ecp.h | 3 ++- 3 files changed, 37 insertions(+), 7 deletions(-) commit 9b1556b63c6a75ccb3d24d3de38fe8750a104ade Author: Frederic Peters Date: Thu Nov 30 09:40:05 2006 +0000 use appropriate functions for g_list_ lasso/xml/saml-2.0/samlp2_response.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 08bcef745bf880facb10ca74689d4769bfb67865 Author: Frederic Peters Date: Wed Nov 29 23:36:26 2006 +0000 re-enabling saml2 signature check lasso/saml-2.0/logout.c | 1 - lasso/saml-2.0/profile.c | 1 - 2 files changed, 2 deletions(-) commit 13162187b90ef86a17243955d5e03fc32241b22e Author: Damien Laniel Date: Wed Nov 29 15:52:02 2006 +0000 Moved assertion encryption code out of saml2_response.c to tools.c lasso/xml/saml-2.0/samlp2_response.c | 85 +++++++----------------------------- lasso/xml/tools.c | 59 +++++++++++++++++++++++++ 2 files changed, 75 insertions(+), 69 deletions(-) commit 736481f2449b28289c38af3b1b953826f9d1313b Author: Damien Laniel Date: Wed Nov 29 15:06:49 2006 +0000 Encrypt Assertions at the last moment, so that the assertions should be fully built before that lasso/id-ff/provider.c | 13 +++-- lasso/id-ff/providerprivate.h | 1 + lasso/saml-2.0/login.c | 21 +++----- lasso/xml/saml-2.0/saml2_assertion.c | 6 +++ lasso/xml/saml-2.0/saml2_assertion.h | 3 +- lasso/xml/saml-2.0/samlp2_response.c | 83 +++++++++++++++++++++++++++++ lasso/xml/saml-2.0/samlp2_status_response.c | 2 +- lasso/xml/xml.c | 10 ++-- 8 files changed, 114 insertions(+), 25 deletions(-) commit 7a5c89d470638b1cf6523cd443f7cff31cc4ca0f Author: Damien Laniel Date: Tue Nov 28 14:14:52 2006 +0000 Don't include the internal datas of the nodes in encrypted elements lasso/xml/xml.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 4078845aa268f23122ee17b226196071d6c70a4c Author: Damien Laniel Date: Tue Nov 28 13:40:55 2006 +0000 Added an error type when there is no key to decrypt some encrypted elements lasso/errors.c | 2 ++ lasso/errors.h | 1 + lasso/saml-2.0/login.c | 7 +++++++ lasso/saml-2.0/logout.c | 3 +++ 4 files changed, 13 insertions(+) commit 279e04274c651bd87779bba30d9730a326d1bd7c Author: Frederic Peters Date: Tue Nov 28 12:18:36 2006 +0000 fixed references to SWIGPHP4 swig/saml-2.0/saml2_conditions.i | 4 ++-- swig/saml-2.0/saml2_subject_confirmation_data.i | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) commit 166cff941716b236a7d2602562d7c2ecadd8e908 Author: Frederic Peters Date: Tue Nov 28 10:47:31 2006 +0000 extra checks to pass negative testing steps lasso/errors.c | 2 ++ lasso/errors.h | 1 + lasso/saml-2.0/login.c | 26 ++++++++++++++++++-- swig/Lasso.i | 1 + swig/saml-2.0/saml2_audience_restriction.i | 3 +++ swig/saml-2.0/saml2_conditions.i | 32 +++++++++++++++++++++++++ swig/saml-2.0/saml2_subject_confirmation.i | 3 +++ swig/saml-2.0/saml2_subject_confirmation_data.i | 15 ++++++++++++ swig/saml-2.0/samlp2_response.i | 14 +++++++++++ 9 files changed, 95 insertions(+), 2 deletions(-) commit e51ab22b76a139f4e2a573ca69f4ae7f1e5ebfc4 Author: Frederic Peters Date: Mon Nov 27 20:12:21 2006 +0000 include header file for lasso_saml20_profile_set_session_from_dump lasso/id-ff/profile.c | 2 ++ 1 file changed, 2 insertions(+) commit 2ef4c2bea92d5b8b6bc78d89af456c7880f71f5e Author: Frederic Peters Date: Mon Nov 27 20:11:37 2006 +0000 removed unused variable and added check for identity before accessing it lasso/saml-2.0/login.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) commit df367439b7cd2c197e98384ff968c5652e4619c3 Author: Frederic Peters Date: Mon Nov 27 20:11:09 2006 +0000 removed unused variable lasso/saml-2.0/logout.c | 1 - lasso/xml/tools.c | 1 - 2 files changed, 2 deletions(-) commit b2cffb6d201d68ed1692e3fa7c7e0f42bfd4980a Author: Frederic Peters Date: Mon Nov 27 20:02:00 2006 +0000 removed debugging output php/patch_swig_output.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit b69f9c8b73aa8f40ede12a4292a00f444b6a4dce Author: Damien Laniel Date: Mon Nov 27 11:05:27 2006 +0000 Support for name-id:format:encrypted in NameIdPolicy in Authnrequest lasso/saml-2.0/login.c | 10 ++++++++-- lasso/xml/strings.h | 2 ++ swig/Lasso-saml2.i | 3 +++ 3 files changed, 13 insertions(+), 2 deletions(-) commit 6ce1f2f04412ce4e865734f504d15404b2820abd Author: Damien Laniel Date: Fri Nov 24 09:11:11 2006 +0000 return -1 was not cute lasso/saml-2.0/profile.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 0a391478bec7bb5afcb3f8a708d1abda9605e3f1 Author: Damien Laniel Date: Thu Nov 23 17:44:26 2006 +0000 Added an original node to encrypted elements, only in dumps, for the dump to be readable lasso/id-ff/profile.c | 7 +++++- lasso/saml-2.0/profile.c | 36 +++++++++++++++++++++++++++- lasso/saml-2.0/profileprivate.h | 1 + lasso/xml/saml-2.0/saml2_encrypted_element.c | 3 +++ lasso/xml/saml-2.0/saml2_encrypted_element.h | 1 + lasso/xml/xml.c | 4 ++++ 6 files changed, 50 insertions(+), 2 deletions(-) commit 03aa90b8b79681e1e9f6195767cb116047775caf Author: Damien Laniel Date: Thu Nov 23 17:41:17 2006 +0000 Removed useless headers lasso/saml-2.0/logout.c | 3 --- 1 file changed, 3 deletions(-) commit 89c1aa511659cb3ac1a3bb79a02cbb7141acad1c Author: Damien Laniel Date: Thu Nov 23 17:34:37 2006 +0000 Encrypt and decrypt NameID in logout requests lasso/saml-2.0/logout.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 47 insertions(+), 3 deletions(-) commit 91328f2089fea7b180f884a6e490758f138b2c1c Author: Damien Laniel Date: Thu Nov 23 17:29:28 2006 +0000 Coding style fix lasso/saml-2.0/login.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit 3ad66165b7a40cf9a2beab4144ed810d755da533 Author: Frederic Peters Date: Thu Nov 23 10:29:39 2006 +0000 removed use of unallocated variable lasso/saml-2.0/ecp.c | 2 -- 1 file changed, 2 deletions(-) commit f2fa9561ac93915661be2ea0b140f3c422ffef09 Author: Frederic Peters Date: Thu Nov 23 09:47:54 2006 +0000 style and missing header lasso/saml-2.0/ecp.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) commit b8f7f26777d903b5885d530ab0f60ece3980ea2d Author: Frederic Peters Date: Thu Nov 23 09:41:29 2006 +0000 fixing indentation lasso/saml-2.0/ecp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 2c835be36e1a5a3f2f94d757a9726a210f8bfa8d Author: Nicolas Clapies Date: Thu Nov 23 09:02:55 2006 +0000 Added missing updates about LassoEcp object. lasso/saml-2.0/ecp.c | 28 +++++++++++++++++++++++++++- lasso/saml-2.0/ecp.h | 2 +- 2 files changed, 28 insertions(+), 2 deletions(-) commit ff4eaec6e27d5193458f51a2875706d1e2c88d72 Author: Nicolas Clapies Date: Wed Nov 22 13:47:24 2006 +0000 Updated binding for LassoEcp object. swig/Lasso-saml2.i | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 08eb2fab562950252eb896d69619f255518fa94c Author: Damien Laniel Date: Wed Nov 22 12:45:56 2006 +0000 Binding for setEncryptionMode swig/Lasso.i | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) commit 5f2583da6de52493002eb0984b13912b8b3ca374 Author: Damien Laniel Date: Wed Nov 22 12:45:38 2006 +0000 Changed setEncryption(boolean) to setEncryptionMode(enum mode) lasso/id-ff/provider.c | 6 +++--- lasso/id-ff/provider.h | 19 +++++++++++++++++-- lasso/id-ff/providerprivate.h | 2 +- lasso/saml-2.0/login.c | 4 ++-- 4 files changed, 23 insertions(+), 8 deletions(-) commit d7f9c2aaec7eacddbcd7529ad359cfd1da6a257d Author: Damien Laniel Date: Wed Nov 22 11:03:06 2006 +0000 Binding for setEncryption method swig/Lasso.i | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit 0b5bbddb456b0da62d059459b4625a0c373c27cb Author: Damien Laniel Date: Wed Nov 22 11:02:43 2006 +0000 changed provider->private_data->encryption name to provider->private_data->encryption_enabled lasso/id-ff/provider.c | 4 ++-- lasso/id-ff/providerprivate.h | 2 +- lasso/saml-2.0/login.c | 8 ++++---- 3 files changed, 7 insertions(+), 7 deletions(-) commit a735e87b2e88a961cf1233fd5b92b21570fedf4b Author: Damien Laniel Date: Wed Nov 22 11:01:29 2006 +0000 Fix LassoSaml2EncryptedElement name lasso/xml/xml.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit d0edddf2bb9aafdf105dfb2b27dc6b5d9393e5d3 Author: Damien Laniel Date: Wed Nov 22 10:30:54 2006 +0000 Added lasso_provider_set_encryption method to activate or desactive encryption lasso/id-ff/provider.c | 15 +++++++++++++++ lasso/id-ff/provider.h | 3 +++ lasso/id-ff/providerprivate.h | 1 + lasso/saml-2.0/login.c | 6 ++++-- lasso/saml-2.0/provider.c | 2 -- 5 files changed, 23 insertions(+), 4 deletions(-) commit 3748fbcdfbd9575320bfb0a082890e3b39c639f8 Author: Frederic Peters Date: Wed Nov 22 09:54:19 2006 +0000 reduced memory allocation (and loc) lasso/xml/xml.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) commit c161a72b39601cd9c58646e043d3a6e9032e7c85 Author: Damien Laniel Date: Wed Nov 22 08:39:58 2006 +0000 Changed xmlGetNoNsProp with xmlGetProp in lasso_decrypt lasso/xml/xml.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit be247a65facaeea4485d5871297010b6911ab7d9 Author: Frederic Peters Date: Tue Nov 21 17:52:31 2006 +0000 fixed pkey memory leak lasso/xml/tools.c | 32 +++++++++++++------------------- 1 file changed, 13 insertions(+), 19 deletions(-) commit b45333444cc9c9a73718417861fd19e8602a1bae Author: Damien Laniel Date: Tue Nov 21 17:31:02 2006 +0000 coding style fixes lasso/saml-2.0/ecp.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 1c65a0e664c44bd575fce49ed58761d9adcef915 Author: Damien Laniel Date: Tue Nov 21 17:29:33 2006 +0000 Free bio on error in lasso_get_pem_file_type lasso/xml/tools.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) commit 84d4c960be871c9d175eb7d699f2269c47f6bdf3 Author: Damien Laniel Date: Tue Nov 21 17:16:29 2006 +0000 Fixed -Wall warnings and replaced a LASSO_ERROR_UNDEFINED lasso/saml-2.0/ecp.c | 19 +++++++++++-------- lasso/saml-2.0/login.c | 2 ++ lasso/saml-2.0/provider.c | 8 +++----- lasso/saml-2.0/server.c | 2 +- lasso/xml/tools.c | 11 ++++++++--- lasso/xml/xml.c | 7 +++---- 6 files changed, 28 insertions(+), 21 deletions(-) commit 9f4d57b3e8aff190ad415d342aff1c0c201b6802 Author: Damien Laniel Date: Tue Nov 21 16:13:15 2006 +0000 Coding style fixes + removed the obsolete comment about set_nodename in LassoSaml2EncryptedElementClass lasso/xml/saml-2.0/saml2_encrypted_element.c | 3 --- lasso/xml/xml.c | 8 ++++---- 2 files changed, 4 insertions(+), 7 deletions(-) commit b76e8c3f2b94b00419cca949f135bb294faf8b4e Author: Damien Laniel Date: Tue Nov 21 16:05:43 2006 +0000 Set nodename "EncryptedElement" in LassoSaml2EncryptedElementClass lasso/saml-2.0/login.c | 3 +-- lasso/xml/saml-2.0/saml2_encrypted_element.c | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) commit 3b419a2079af6a70ebf4703817ac760c78081dec Author: Damien Laniel Date: Tue Nov 21 15:49:38 2006 +0000 updated comments lasso/xml/xml.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit a16c4b85d84a70bca9cef540a09d94b0c5ad3644 Author: Damien Laniel Date: Tue Nov 21 15:46:35 2006 +0000 - Can use AES EncryptedKey as well as DES to decrypted the EncryptedData - Encrypt nodes with 256-bit AES lasso/xml/xml.c | 82 +++++++++++++++++++++++++++++++++------------------------ 1 file changed, 48 insertions(+), 34 deletions(-) commit bf95fa5d6fa14de362089dd4747a392d0a37fc24 Author: Frederic Peters Date: Tue Nov 21 14:23:56 2006 +0000 in LIST_NODES, if snippet->name is set; use it. lasso/xml/xml.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) commit 371cf97f7c74dea1e130576ebcac0fcd99aa6cbf Author: Frederic Peters Date: Tue Nov 21 14:06:19 2006 +0000 ##any nodes needs empty snippet name lasso/xml/soap_binding_ext_credential.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 1e7983b0df915ba05ae8e0dddd596a39d393f361 Author: Damien Laniel Date: Tue Nov 21 13:31:35 2006 +0000 Encrypt and decrypt Assertion lasso/saml-2.0/login.c | 70 ++++++++++++++++++++-------- lasso/saml-2.0/profile.c | 3 -- lasso/xml/saml-2.0/saml2_encrypted_element.c | 8 +++- lasso/xml/saml-2.0/saml2_encrypted_element.h | 2 +- lasso/xml/saml-2.0/samlp2_response.c | 2 +- lasso/xml/tools.c | 2 +- lasso/xml/xml.c | 44 +++++++++++++---- 7 files changed, 96 insertions(+), 35 deletions(-) commit e105f2a639c5251c47278c63436bb8b6ceb34d7a Author: Frederic Peters Date: Tue Nov 21 12:04:06 2006 +0000 check for identity before accessing it lasso/id-wsf/discovery.c | 8 ++++++++ 1 file changed, 8 insertions(+) commit ecb96bacab5e8fd1997d419b043623ef3e038f48 Author: Nicolas Clapies Date: Mon Nov 20 16:40:07 2006 +0000 Restored immutable attribute msg_relayState in LassoLogin object. swig/Lasso.i | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 211ee2fb2a40c3e6d435a376b22718972e750828 Author: Nicolas Clapies Date: Mon Nov 20 15:13:37 2006 +0000 Moved SOAP value as last element in lists. lasso/saml-2.0/provider.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 8bff82551bc00998de2ba9c9ef4b8e76268ec1ff Author: Frederic Peters Date: Mon Nov 20 10:10:03 2006 +0000 new server method, for saml2 affiliations lasso/saml-2.0/server.c | 79 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) commit 80484f6b485b613b4f76ce5372790167ed831af9 Author: Frederic Peters Date: Mon Nov 20 09:40:01 2006 +0000 saml2 server private functions lasso/saml-2.0/serverprivate.h | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) commit 4016a87eacd4f2e4cd4fe153ac95bb825f59773a Author: Frederic Peters Date: Sun Nov 19 20:07:46 2006 +0000 added loading of affiliation metadata (not yet acted upon) lasso/errors.c | 3 +++ lasso/errors.h | 2 ++ lasso/id-ff/provider.c | 1 + lasso/id-ff/providerprivate.h | 4 ++++ lasso/id-ff/server.c | 42 ++++++++++++++++++++++++++++++++++++++++++ lasso/id-ff/server.h | 2 ++ lasso/saml-2.0/Makefile.am | 6 ++++-- swig/Lasso.i | 8 +++++++- 8 files changed, 65 insertions(+), 3 deletions(-) commit ef4f859812f5275a94fd6cf51be216198d2e334d Author: Frederic Peters Date: Sun Nov 19 19:08:51 2006 +0000 const'ified some char* lasso/id-ff/server.c | 6 +++--- lasso/id-ff/server.h | 8 +++++--- 2 files changed, 8 insertions(+), 6 deletions(-) commit 24828a24a53d4fbaebd188ec435a7c441c3b49a8 Author: Frederic Peters Date: Sun Nov 19 19:06:30 2006 +0000 rewritten in a shorter form lasso/id-ff/login.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) commit 1729459a2f3799aed1d87d762415f3e577753bb7 Author: Frederic Peters Date: Sun Nov 19 19:01:50 2006 +0000 s/file_name/filename/ lasso/id-ff/server.c | 9 +++++---- lasso/id-ff/server.h | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) commit 13907aba6749d88f7a9dc655ba385b0cad273b04 Author: Frederic Peters Date: Sun Nov 19 14:18:43 2006 +0000 don't include * in %rename() statements swig/saml-2.0/samlp2_artifact_resolve.i | 14 +++++++------- swig/saml-2.0/samlp2_artifact_response.i | 18 +++++++++--------- swig/saml-2.0/samlp2_assertion_idrequest.i | 14 +++++++------- swig/saml-2.0/samlp2_attribute_query.i | 16 ++++++++-------- swig/saml-2.0/samlp2_authn_query.i | 16 ++++++++-------- swig/saml-2.0/samlp2_authn_request.i | 14 +++++++------- swig/saml-2.0/samlp2_authz_decision_query.i | 16 ++++++++-------- swig/saml-2.0/samlp2_logout_request.i | 14 +++++++------- swig/saml-2.0/samlp2_manage_name_id_request.i | 14 +++++++------- swig/saml-2.0/samlp2_name_id_mapping_request.i | 14 +++++++------- swig/saml-2.0/samlp2_name_id_mapping_response.i | 18 +++++++++--------- swig/saml-2.0/samlp2_request_abstract.i | 3 +++ swig/saml-2.0/samlp2_response.i | 18 +++++++++--------- swig/saml-2.0/samlp2_subject_query_abstract.i | 14 +++++++------- 14 files changed, 103 insertions(+), 100 deletions(-) commit 92e8799a564ea6a14e35806a6f9cac9bd02b08ea Author: Damien Laniel Date: Thu Nov 16 14:34:57 2006 +0000 - Moved the EncryptedKey to the same level as EncryptedData in xml - Changed the prototype for lasso_node_encrypt and lasso_node_encrypt - Moved lasso_node_encrypt and lasso_node_encrypt declaration to xml_enc.h - Added a GList for EncryptedKey in EncryptedElement lasso/saml-2.0/login.c | 26 ++++---- lasso/xml/saml-2.0/saml2_encrypted_element.c | 2 +- lasso/xml/saml-2.0/saml2_encrypted_element.h | 4 +- lasso/xml/xml.c | 89 +++++++++++++++++++--------- lasso/xml/xml.h | 3 - lasso/xml/xml_enc.h | 45 ++++++++++++++ 6 files changed, 123 insertions(+), 46 deletions(-) commit fb131f73c583b19c379f35b44689f622b7804894 Author: Frederic Peters Date: Wed Nov 15 23:58:28 2006 +0000 process_authn_response_msg for saml2; this is similar to id-ff even if the underlying messages are different lasso/id-ff/login.c | 33 +++++++++++++++++----------- lasso/saml-2.0/login.c | 47 +++++++++++++++++++++++++++++++++++++++- lasso/saml-2.0/loginprivate.h | 1 + lasso/saml-2.0/provider.c | 3 ++- lasso/saml-2.0/providerprivate.h | 2 ++ 5 files changed, 71 insertions(+), 15 deletions(-) commit 42d3e91a21822eb3266c81a589fa84cff8c9f103 Author: Frederic Peters Date: Wed Nov 15 23:31:29 2006 +0000 correctly looks up assertionconsumerservice url, even with just the binding lasso/saml-2.0/login.c | 13 ++++++++-- lasso/saml-2.0/provider.c | 66 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+), 2 deletions(-) commit da904e0bb3e7ffb9c4ca04008d4decc10c3d8a0e Author: Frederic Peters Date: Wed Nov 15 18:58:26 2006 +0000 binding for SAML2 binding uri; and fixed SAML20 to SAML2 for coherence lasso/id-ff/provider.c | 2 +- lasso/saml-2.0/login.c | 6 +++--- lasso/saml-2.0/provider.c | 10 +++++----- lasso/xml/strings.h | 12 ++++++------ swig/Lasso-saml2.i | 15 +++++++++++++++ swig/saml-2.0/samlp2_authn_request.i | 3 +++ 6 files changed, 33 insertions(+), 15 deletions(-) commit 8a331ac747c43560857a8c918682b5650e4e1a1f Author: Damien Laniel Date: Wed Nov 15 18:56:34 2006 +0000 Decryption of EncryptedID in Assertion lasso/id-ff/server.c | 5 --- lasso/id-ff/serverprivate.h | 6 +++ lasso/saml-2.0/login.c | 28 ++++++++++++- lasso/xml/xml.c | 97 ++++++++++++++++++++++++++++++++++++++++++--- lasso/xml/xml.h | 1 + 5 files changed, 126 insertions(+), 11 deletions(-) commit 0f11bb2491fd38e5b19484a6367e2d98452579a4 Author: Frederic Peters Date: Wed Nov 15 16:41:55 2006 +0000 fixed up lasso_saml20_logout_process_response_msg function name; and remove assertion on SP when initiated on SP. lasso/id-ff/logout.c | 2 +- lasso/saml-2.0/logout.c | 10 ++++++++-- lasso/saml-2.0/logoutprivate.h | 2 +- 3 files changed, 10 insertions(+), 4 deletions(-) commit 011bc4456936801ed9ca1a438bf6571e55246480 Author: Frederic Peters Date: Tue Nov 14 17:07:31 2006 +0000 random fixage of warning displayed with -Wall lasso/id-ff/profile.c | 9 ++-- lasso/id-ff/provider.c | 4 +- lasso/id-wsf/authentication.c | 8 ++-- lasso/id-wsf/data_service.c | 7 +-- lasso/id-wsf/discovery.c | 17 ++++--- lasso/id-wsf/wsf_profile.c | 91 +++++++++++++++++++------------------ lasso/id-wsf/wsf_profile.h | 4 ++ lasso/saml-2.0/login.c | 12 +++-- lasso/saml-2.0/loginprivate.h | 1 + lasso/saml-2.0/name_id_management.c | 7 +-- lasso/xml/xml.c | 36 ++++++++------- 11 files changed, 103 insertions(+), 93 deletions(-) commit 85d8ea7d4bda979f28af90d000451388558ba513 Author: Nicolas Clapies Date: Tue Nov 14 15:09:29 2006 +0000 Fixed big mistake about PAOS naming. Added more strict check when trying to process PAOS response in login.c. lasso/saml-2.0/ecp.c | 20 ++++++++++---------- lasso/saml-2.0/login.c | 16 +++++++++++++++- lasso/xml/strings.h | 4 ++-- lasso/xml/xml.c | 24 ++++++++++++------------ lasso/xml/xml.h | 2 +- 5 files changed, 40 insertions(+), 26 deletions(-) commit 261c7355314af6f2de268980b2d28b88e96892b7 Author: Nicolas Clapies Date: Tue Nov 14 14:52:22 2006 +0000 Fixed declaration line ending. lasso/saml-2.0/ecp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 07249c787feac9d2437e70980086fe84f79a11a8 Author: Nicolas Clapies Date: Tue Nov 14 14:41:59 2006 +0000 Added ecp files. lasso/saml-2.0/ecp.c | 239 +++++++++++++++++++++++++++++++++++++++++++++++++++ lasso/saml-2.0/ecp.h | 76 ++++++++++++++++ 2 files changed, 315 insertions(+) commit 65ba1cb9bfb01c0520e64537f01dbd9f045dbaa4 Author: Frederic Peters Date: Tue Nov 14 14:38:20 2006 +0000 downcast soapenvelope to LassoNode lasso/id-wsf/wsf_profile.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit fc8a4b153136ac1bc3d555bfa19e09cb8709c283 Author: Frederic Peters Date: Tue Nov 14 14:37:58 2006 +0000 include header from xmlsec to get xmlSecCreateTree declaration lasso/id-wsf/discovery.c | 2 ++ 1 file changed, 2 insertions(+) commit c7b95c4c16775ca5a2b91daa3582f9574a9f5f9b Author: Nicolas Clapies Date: Tue Nov 14 14:15:06 2006 +0000 Added ecp.h in public declarations. lasso/lasso.h | 1 + 1 file changed, 1 insertion(+) commit 55d0638ff670da610db7e0010d9e59744f6a3598 Author: Nicolas Clapies Date: Tue Nov 14 14:13:35 2006 +0000 Added binding for ECP. Modified binding in Lasso.si to allow setting LassoProfile's msg_relayState. swig/Lasso-saml2.i | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ swig/Lasso.i | 4 ++- 2 files changed, 95 insertions(+), 1 deletion(-) commit 9c6d34b930949bc50f947ce673c6f6519fa0d78e Author: Nicolas Clapies Date: Tue Nov 14 14:11:59 2006 +0000 Added ECP profile (client, SP and IDP parts). lasso/saml-2.0/Makefile.am | 2 + lasso/saml-2.0/login.c | 98 +++++++++++++++++++++++++++++++++++++++++++++- lasso/saml-2.0/provider.c | 4 +- lasso/xml/strings.h | 16 ++++++++ 4 files changed, 116 insertions(+), 4 deletions(-) commit 608cfa1fee08f14a4385075f4828342033bc62e5 Author: Nicolas Clapies Date: Tue Nov 14 13:57:40 2006 +0000 Added functions to export to PAOS request and ECP response. lasso/xml/xml.c | 134 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ lasso/xml/xml.h | 6 +++ 2 files changed, 140 insertions(+) commit 45e7e8e448b96f80568028703bc98477f4ad3908 Author: Damien Laniel Date: Tue Nov 14 10:36:40 2006 +0000 Replaced some LASSO_ERROR_UNDEFINED with real error codes lasso/errors.c | 6 ++++++ lasso/errors.h | 3 +++ lasso/saml-2.0/login.c | 14 +++++++------- lasso/saml-2.0/profile.c | 4 ++-- 4 files changed, 18 insertions(+), 9 deletions(-) commit d7fe76847480884b000e2caf2ad18d6916a2c500 Author: Damien Laniel Date: Tue Nov 14 09:59:09 2006 +0000 Test on a possibly NULL pointer to avoid seg fault lasso/saml-2.0/login.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 3fa164f916c5b9ee7627cded9804638a1b5b1fb6 Author: Damien Laniel Date: Mon Nov 13 16:17:16 2006 +0000 Read SNIPPET_XMLNODE from XML lasso/xml/xml.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 61a4e049bdfeca1fdc9dc475f46c89938dda055d Author: Damien Laniel Date: Mon Nov 13 12:07:11 2006 +0000 Added documentation for SNIPPET_XMLNODE docs/reference/snippet-types.rst | 6 ++++++ 1 file changed, 6 insertions(+) commit 3bf1a98f269f212eda9bb6e6a8e7ccb5cbaec74f Author: Damien Laniel Date: Mon Nov 13 12:06:30 2006 +0000 Added EncryptedID as SNIPPET_XMLNODE in Subject in Assertion lasso/saml-2.0/login.c | 20 +++++++++++++++++++- lasso/xml/private.h | 1 + lasso/xml/saml-2.0/saml2_encrypted_element.c | 2 +- lasso/xml/saml-2.0/saml2_encrypted_element.h | 2 +- lasso/xml/xml.c | 6 ++++++ 5 files changed, 28 insertions(+), 3 deletions(-) commit bbe93473904e1574509c8a9b6989b1e3cd9ad22f Author: Damien Laniel Date: Mon Nov 13 11:54:47 2006 +0000 Header for lasso_node_encrypt lasso/xml/xml.h | 4 ++++ 1 file changed, 4 insertions(+) commit 5bcb4d9035296ff91c95f37cc84738c71447d34c Author: Frederic Peters Date: Mon Nov 13 11:12:59 2006 +0000 also dump private data; necessary for saml2 artifact support lasso/id-ff/profile.c | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) commit 394d1949f6010a94dabad77df8fcd04c89146f18 Author: Damien Laniel Date: Mon Nov 13 11:07:28 2006 +0000 Added lasso_node_encrypt to encrypt a Lasso node lasso/xml/xml.c | 126 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) commit 498845547c4653f5f2c162cae8e205ad9a65b24c Author: Frederic Peters Date: Fri Nov 10 15:12:42 2006 +0000 don't set inResponseTo if there is no request lasso/saml-2.0/logout.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 67d514c1c1495c92c0a7ed8f3b540d23b32ca71c Author: Frederic Peters Date: Fri Nov 10 15:12:18 2006 +0000 include http request method in profile dumps lasso/id-ff/logout.c | 2 ++ lasso/id-ff/profile.c | 2 ++ 2 files changed, 4 insertions(+) commit e06981428fe28125d12fe11538927a07f95dac52 Author: Damien Laniel Date: Thu Nov 9 17:41:09 2006 +0000 moved encryption key loading from id-ff to saml-2.0 lasso/id-ff/provider.c | 10 ++++------ lasso/saml-2.0/provider.c | 4 ++++ 2 files changed, 8 insertions(+), 6 deletions(-) commit 1b9ca80cec9a0436dbdce163722e449531aa80c2 Author: Damien Laniel Date: Thu Nov 9 16:44:05 2006 +0000 properly initialise encryption_private_key lasso/id-ff/server.c | 1 + 1 file changed, 1 insertion(+) commit b22f5b9b5e7a944b609f150e6aab23871da741fc Author: Damien Laniel Date: Thu Nov 9 15:07:11 2006 +0000 Use xmlSecKeyDestroy to free the key in lasso_server_set_encryption_private_key lasso/id-ff/server.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 40a577ac464b3eda720ba934f2a02116fa526bc3 Author: Damien Laniel Date: Thu Nov 9 14:39:39 2006 +0000 Fix a possible memory leak in lasso_server_set_encryption_private_key and add a comment lasso/id-ff/server.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) commit 15e4f5436d53e90e7987b0df94a2155d13c2f06a Author: Damien Laniel Date: Thu Nov 9 13:50:09 2006 +0000 binding for lasso_server_set_encryption_private_key swig/Lasso.i | 5 +++++ 1 file changed, 5 insertions(+) commit 59c70367cb340a213ccfd5b42ee46743418fe3da Author: Damien Laniel Date: Thu Nov 9 13:49:49 2006 +0000 changed prototype for lasso_server_set_encryption_private_key and added error handling lasso/errors.c | 2 ++ lasso/errors.h | 1 + lasso/id-ff/server.c | 8 +++++--- lasso/id-ff/server.h | 2 +- 4 files changed, 9 insertions(+), 4 deletions(-) commit 88e442ca1ee161a27ddc2dea54d9c1ba9ddd1b00 Author: Frederic Peters Date: Thu Nov 9 11:01:28 2006 +0000 Change from string to list in requestedAuthnContext. swig/saml-2.0/samlp2_requested_authn_context.i | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) commit 3e4c60b767a86b0c1c6401586e44eab72c3d1a76 Author: Frederic Peters Date: Thu Nov 9 10:20:16 2006 +0000 AuthnContextClassRef is a list; treat is as such lasso/saml-2.0/login.c | 75 ++++++++++++---------- .../xml/saml-2.0/samlp2_requested_authn_context.c | 4 +- .../xml/saml-2.0/samlp2_requested_authn_context.h | 4 +- 3 files changed, 46 insertions(+), 37 deletions(-) commit 0e135d2d1da35c15423d6dc56f579da0c168e307 Author: Frederic Peters Date: Thu Nov 9 10:19:37 2006 +0000 only compare saml1 assertion lasso/id-ff/login.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) commit 2183c855a6bbbc845a1f77693fe85eb422709a9f Author: Damien Laniel Date: Thu Nov 9 10:09:58 2006 +0000 load encryption private key lasso/id-ff/server.c | 16 ++++++++++++++++ lasso/id-ff/server.h | 2 ++ 2 files changed, 18 insertions(+) commit fae268678ade686c241864b26a4a0852e793ee64 Author: Frederic Peters Date: Thu Nov 9 10:07:01 2006 +0000 filled login_must_authenticate with intelligence about authncontext lasso/saml-2.0/login.c | 86 +++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 81 insertions(+), 5 deletions(-) commit c7a188e3ea8342e767cd315d5fe2dd8303dd6e96 Author: Frederic Peters Date: Wed Nov 8 22:43:39 2006 +0000 support for RequestAuthnContext in must_authenticate (incomplete but not likely to do much more here; I'll do it better in SAML2) lasso/id-ff/login.c | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 71 insertions(+), 4 deletions(-) commit dcc31c61790c0739cf9a7a9d642467025af497f5 Author: Frederic Peters Date: Wed Nov 8 22:41:53 2006 +0000 changed lasso_session_get_assertions not to g_object_ref assertions, so they don't have to be freed. lasso/id-ff/session.c | 4 ++-- lasso/id-wsf/discovery.c | 3 ++- swig/Lasso.i | 1 - 3 files changed, 4 insertions(+), 4 deletions(-) commit 4c72aa673bc353ca21ef28d2012772f3fa6abddd Author: Frederic Peters Date: Wed Nov 8 19:23:45 2006 +0000 spec refers to signing/encryption so use that vocabulary (even if I don't like it) lasso/id-ff/provider.c | 8 ++++---- lasso/id-ff/providerprivate.h | 4 ++-- lasso/id-ff/server.c | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) commit e26ed0d719d35004dd6289bd7656a17309fede59 Author: Frederic Peters Date: Wed Nov 8 18:14:17 2006 +0000 minor changes & fix to coding style for enc public key loading lasso/id-ff/provider.c | 25 +++++++++++++------------ lasso/id-ff/providerprivate.h | 6 +++--- lasso/id-ff/server.c | 3 +-- 3 files changed, 17 insertions(+), 17 deletions(-) commit e6074f1ad48dd9c617881847ea85730e6be3b536 Author: Frederic Peters Date: Wed Nov 8 17:45:45 2006 +0000 encryption_public_key will always be set from metadata; no need for filename stuff and to touch the public struct. lasso/id-ff/provider.c | 9 ++------- lasso/id-ff/provider.h | 14 -------------- lasso/id-ff/providerprivate.h | 13 +++++++++++++ 3 files changed, 15 insertions(+), 21 deletions(-) commit 87415b9c809da09daefb38028ad00bcd8e0f5a48 Author: Damien Laniel Date: Wed Nov 8 17:16:31 2006 +0000 load encryption key from metadatas lasso/id-ff/provider.c | 64 ++++++++++++++++++++++++++++++++++--------- lasso/id-ff/provider.h | 14 ++++++++++ lasso/id-ff/providerprivate.h | 5 +++- lasso/id-ff/server.c | 5 ++-- 4 files changed, 72 insertions(+), 16 deletions(-) commit c9d5828c64d09c34b5c005e2386585e876ddeccf Author: Frederic Peters Date: Wed Nov 8 15:49:08 2006 +0000 more appropriate error code lasso/saml-2.0/login.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit d99eecd5886d76b78efe8707f4c7c1d67589b532 Author: Frederic Peters Date: Wed Nov 8 13:07:57 2006 +0000 error on sso initiated by idp and no endpoint defined as default for sp lasso/errors.c | 2 ++ lasso/errors.h | 1 + lasso/saml-2.0/login.c | 3 ++- swig/Lasso.i | 1 + 4 files changed, 6 insertions(+), 1 deletion(-) commit 057eb4d990cbd7cc8b21d24e68e6056801389c3a Author: Frederic Peters Date: Wed Nov 8 12:46:06 2006 +0000 saml2 sso initiated by idp lasso/id-ff/login.c | 8 +++++- lasso/saml-2.0/login.c | 57 +++++++++++++++++++++++++++++++++++++------ lasso/saml-2.0/loginprivate.h | 3 +++ 3 files changed, 59 insertions(+), 9 deletions(-) commit 46d28c06cb25d1272cb16b0ac80f4a35bdf745f4 Author: Frederic Peters Date: Tue Nov 7 16:09:08 2006 +0000 can get assertion consumer service url from that very same attribute lasso/saml-2.0/login.c | 43 +++++++++++++++++++++++++++++++------------ 1 file changed, 31 insertions(+), 12 deletions(-) commit aec4544976d306992ece769faeb55f8850b51dcb Author: Frederic Peters Date: Tue Nov 7 12:44:32 2006 +0000 fixed url/query construction for endpoints with query part (zxid) lasso/id-ff/defederation.c | 7 ++++--- lasso/id-ff/login.c | 14 +++++++++----- lasso/id-ff/logout.c | 6 +++--- lasso/id-ff/name_registration.c | 4 ++-- lasso/saml-2.0/login.c | 11 +++++++---- lasso/saml-2.0/logout.c | 5 +++-- lasso/saml-2.0/name_id_management.c | 4 ++-- lasso/xml/private.h | 2 ++ lasso/xml/tools.c | 10 ++++++++++ 9 files changed, 42 insertions(+), 21 deletions(-) commit 0b9baa3518d5cac61d17d3c475ad68f79ba22b93 Author: Damien Laniel Date: Tue Nov 7 10:59:12 2006 +0000 fix metadata test tests/metadata/metadata_02.xml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) commit e528469110bc72903e244f58ba2b79b341975836 Author: Damien Laniel Date: Tue Nov 7 10:24:44 2006 +0000 tests for loading certs and keys from metadata tests/Makefile.am | 4 +- tests/metadata/metadata_01.xml | 38 +++++++++++++++ tests/metadata/metadata_02.xml | 39 ++++++++++++++++ tests/metadata/metadata_03.xml | 23 +++++++++ tests/metadata/metadata_04.xml | 25 ++++++++++ tests/metadata/metadata_05.xml | 25 ++++++++++ tests/metadata_tests.c | 103 +++++++++++++++++++++++++++++++++++++++++ tests/tests.c | 2 + 8 files changed, 257 insertions(+), 2 deletions(-) commit 76e8b0976055debef1ff9710009e877c2f0f96ab Author: Frederic Peters Date: Tue Nov 7 10:03:43 2006 +0000 fixed dump/restore from dump for name id management profile lasso/saml-2.0/name_id_management.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit 5c9de8fdcb8ae295ccb0ea68b4468b3c500e356a Author: Frederic Peters Date: Mon Nov 6 20:26:31 2006 +0000 fixing saml2 sso error cases (on ispassive) lasso/id-ff/login.c | 3 ++- lasso/id-ff/session.c | 8 ++++---- lasso/id-ff/sessionprivate.h | 4 ++-- lasso/saml-2.0/login.c | 37 ++++++++++++++++++++++++------------- 4 files changed, 32 insertions(+), 20 deletions(-) commit b6dd8e7fd94a066bcbcbdb59a5f6023951a4ebf2 Author: Frederic Peters Date: Mon Nov 6 20:26:06 2006 +0000 spelling lasso/id-ff/profile.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit dfa8e3175d675cfb3c87c9d14055934a653cf263 Author: Frederic Peters Date: Mon Nov 6 15:48:30 2006 +0000 better loading of public key from metadata; full support for embedded PEM, and suppressed output when not base64. lasso/id-ff/provider.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) commit c9733028cb8b83e77234a2c83d9eb5d951ea6893 Author: Frederic Peters Date: Mon Nov 6 14:14:54 2006 +0000 keep a copy of assertion easily accessible for further changes lasso/saml-2.0/login.c | 1 + 1 file changed, 1 insertion(+) commit c6870cb48fb4d4444b6f9c13b374cedc376ced9b Author: Frederic Peters Date: Mon Nov 6 10:34:50 2006 +0000 added LASSO_SAML2_CONFIRMATION_METHOD_BEARER lasso/xml/strings.h | 4 ++++ 1 file changed, 4 insertions(+) commit 060f13be1975a9b838fd92b07aa42d99538bb8de Author: Frederic Peters Date: Mon Nov 6 09:56:34 2006 +0000 set subject confirmation method and recipient; to be conformant. lasso/saml-2.0/login.c | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) commit f03a5ddf5b429c24faccf016446c8e8dbc41195e Author: Frederic Peters Date: Mon Nov 6 09:53:31 2006 +0000 error code for missing assertion lasso/errors.c | 2 ++ lasso/errors.h | 1 + swig/Lasso.i | 1 + 3 files changed, 4 insertions(+) commit 44f853656ca119f5f0cd76075913cf189105a569 Author: Frederic Peters Date: Sun Nov 5 19:43:11 2006 +0000 implementation of lasso_name_id_management_process_response_msg lasso/saml-2.0/name_id_management.c | 110 +++++++++++++++++++++++++++++++++++- 1 file changed, 108 insertions(+), 2 deletions(-) commit daa7cfbaa3ce161355d93b0afa6747d3d632d864 Author: Frederic Peters Date: Sun Nov 5 19:36:10 2006 +0000 appropriate return code lasso/saml-2.0/logout.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 8706c32cff80537404321f5ab04cda6a01b4797b Author: Frederic Peters Date: Sun Nov 5 12:23:18 2006 +0000 detection of SOAP name id management lasso/id-ff/profile.c | 2 ++ lasso/id-ff/profile.h | 2 ++ swig/Lasso.i | 2 ++ 3 files changed, 6 insertions(+) commit ffe4289f298931b19a5fc6c085d2e38f9bd742b0 Author: Frederic Peters Date: Sat Nov 4 16:20:38 2006 +0000 bindings for new LassoNameIdManagement profile swig/Lasso-saml2.i | 219 +++++++++++++++++++++++++++++++++++++++++++++++++++++ swig/Lasso.i | 2 +- 2 files changed, 220 insertions(+), 1 deletion(-) commit 22554ade710d7e24f25d994d62805e216f1a4567 Author: Frederic Peters Date: Sat Nov 4 16:18:12 2006 +0000 empty _process_response_msg lasso/saml-2.0/name_id_management.c | 8 ++++++++ lasso/saml-2.0/name_id_management.h | 3 +++ 2 files changed, 11 insertions(+) commit dc427a85429d48f17f533f6b27161da2ecdbdd45 Author: Frederic Peters Date: Sat Nov 4 16:17:31 2006 +0000 LassoNameIdManagement is first class profile -> included in lasso.h lasso/lasso.h | 1 + 1 file changed, 1 insertion(+) commit 43c016772b8a3056cf4aaa7cf3c0561ea50b0d93 Author: Frederic Peters Date: Sat Nov 4 16:12:29 2006 +0000 dump handling lasso/saml-2.0/name_id_management.c | 103 ++++++++++++++++++++++++++++++++++++ lasso/saml-2.0/name_id_management.h | 3 ++ 2 files changed, 106 insertions(+) commit b8d3d78d2233f7c4478cf177d71a005af1e59414 Author: Frederic Peters Date: Sat Nov 4 16:03:22 2006 +0000 invert args lasso/saml-2.0/name_id_management.c | 7 ++++--- lasso/saml-2.0/name_id_management.h | 4 ++-- 2 files changed, 6 insertions(+), 5 deletions(-) commit d1b6d48f00496b0430006ea349ad7f101e615021 Author: Frederic Peters Date: Sat Nov 4 16:02:37 2006 +0000 fixed new id param format lasso/saml-2.0/name_id_management.c | 5 ++--- lasso/saml-2.0/name_id_management.h | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) commit 2369801fc6905e50f7ea4ec7940ed3b02f8a8e50 Author: Frederic Peters Date: Sat Nov 4 15:58:40 2006 +0000 name id management saml2 profile (lacks process_response) lasso/saml-2.0/Makefile.am | 6 +- lasso/saml-2.0/name_id_management.c | 474 ++++++++++++++++++++++++++++++++++++ lasso/saml-2.0/name_id_management.h | 90 +++++++ 3 files changed, 568 insertions(+), 2 deletions(-) commit 5be91933582db0b4587f21ca3234746dd23a62a8 Author: Frederic Peters Date: Sat Nov 4 15:23:48 2006 +0000 fixed small memory leak in saml2 slo lasso/saml-2.0/logout.c | 2 ++ 1 file changed, 2 insertions(+) commit bb60709b78473f5b0b3719d8ac63f4aae01ef493 Author: Frederic Peters Date: Fri Nov 3 09:42:55 2006 +0000 fix saml2 artifact decoding lasso/saml-2.0/profile.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) commit a86ff714dec0c43c4df001f90d5c3d5daa83defb Author: Frederic Peters Date: Thu Nov 2 17:10:50 2006 +0000 if node was not base64, use its original value for key loading. lasso/id-ff/provider.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 20c97ab6478016daf2c6966cd9cf25e12584adb2 Author: Frederic Peters Date: Thu Nov 2 16:00:32 2006 +0000 set provider role; so mixed sp/idp metadata is ok. lasso/id-ff/server.c | 1 + 1 file changed, 1 insertion(+) commit d8967f78af4885eb2617b7041e23ca152878a9fc Author: Damien Laniel Date: Thu Nov 2 14:16:29 2006 +0000 Added back LASSO_PROFILE_ERROR_MISSING_ARTIFACT swig/Lasso.i | 1 + 1 file changed, 1 insertion(+) commit 44ad1a38ccc811673b188c6bbf017d3e67e7e3ac Author: Frederic Peters Date: Thu Nov 2 14:13:19 2006 +0000 new lasso_profile_is_saml_query function lasso/id-ff/profile.c | 2 +- lasso/saml-2.0/Makefile.am | 3 +++ lasso/saml-2.0/profile.c | 23 +++++++++++++++++++++++ lasso/saml-2.0/profile.h | 39 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 66 insertions(+), 1 deletion(-) commit d43bde7827c9da6d503285d9d3685b2151e68cb3 Author: Frederic Peters Date: Thu Nov 2 14:07:28 2006 +0000 uncomment xmlsec output directives; that should not have been commented lasso/id-ff/provider.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 64ebae839c42310dbdca4a77a79663f0ae6631ef Author: Frederic Peters Date: Thu Nov 2 11:52:34 2006 +0000 already set remote_provider_id in process_request lasso/id-ff/logout.c | 13 ++++++++++++- lasso/saml-2.0/logout.c | 13 ++++++++++++- 2 files changed, 24 insertions(+), 2 deletions(-) commit ee093042ad591ca4ee1591bf7d8bb633a4f0e973 Author: Damien Laniel Date: Thu Nov 2 10:51:13 2006 +0000 Replaced return -1 with return LASSO_ERROR_UNDEFINED lasso/id-ff/defederation.c | 2 +- lasso/id-wsf/wsf_profile.c | 38 +++++++++++++++++++------------------- lasso/lasso.c | 10 +++++----- lasso/xml/tools.c | 2 +- lasso/xml/xml.c | 6 +++--- 5 files changed, 29 insertions(+), 29 deletions(-) commit a3f603c8bd603be57dbc4c817f7aaf904ee3ad87 Author: Damien Laniel Date: Thu Nov 2 10:50:43 2006 +0000 Added some error cases lasso/errors.c | 10 ++++++++-- lasso/errors.h | 8 +++----- lasso/id-wsf/data_service.c | 18 +++++++++++++----- lasso/id-wsf/discovery.c | 22 ++++++++++++---------- swig/Lasso.i | 11 +++-------- 5 files changed, 39 insertions(+), 30 deletions(-) commit 6b5d28d703208b7332438fe9b56a0ee9fd402765 Author: Damien Laniel Date: Thu Nov 2 10:48:31 2006 +0000 tests on possibly null pointers lasso/id-ff/login.c | 19 +++++++++++++------ lasso/id-ff/name_identifier_mapping.c | 15 ++++++++++----- lasso/id-wsf/authentication.c | 6 ++++++ 3 files changed, 29 insertions(+), 11 deletions(-) commit 367f94702b416ce08899decb69a4d0b8610b69a8 Author: Frederic Peters Date: Thu Nov 2 10:23:13 2006 +0000 coding style lasso/id-ff/profile.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 127d53c39123db6854a9b3b2c2f30920a8a23d9a Author: Frederic Peters Date: Thu Nov 2 10:13:50 2006 +0000 downcast nameidentifier to LassoNode* in LassoLogout; so that it works with both ID-FF (LassoSamlNameIdentifier) and SAML2 (LassoSaml2NameID) swig/Lasso.i | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit c31cc2a6e7d44e49880d32be586cfe3efc832584 Author: Damien Laniel Date: Tue Oct 31 10:01:21 2006 +0000 changed LASSO_LIB_NAME_ID_POLICY_TYPE_FEDERATED to LASSO_LIB_NAMEID_POLICY_TYPE_FEDERATED according to the code docs/lasso-book/writing-a-c-sp.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 521cc9317aa1161830ced361626616c3a4ec3588 Author: Frederic Peters Date: Mon Oct 30 12:54:18 2006 +0000 removed XXX comments after Damien looked at them lasso/saml-2.0/login.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) commit bb5f3e06d3185559d9951af92cad3dd3ab7bf989 Author: Frederic Peters Date: Mon Oct 30 12:48:26 2006 +0000 include authentication statement in saml2 assertion lasso/saml-2.0/login.c | 12 ++++++ lasso/saml-2.0/profile.c | 1 + lasso/xml/strings.h | 52 +++++++++++++++++++++++- swig/Lasso-saml2.i | 102 +++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 165 insertions(+), 2 deletions(-) commit 0a2da8394cf2afb1b13fa42a385e6f8cb29f5e20 Author: Frederic Peters Date: Mon Oct 30 09:51:04 2006 +0000 saml2 artifacts include an endpoint index; fill it with 0 for the moment. lasso/saml-2.0/profile.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) commit 2cab803e5aced2db133bcdef9d6b744479646834 Author: Frederic Peters Date: Sun Oct 29 18:17:30 2006 +0000 deal with default assertion consumer service url lasso/saml-2.0/login.c | 50 +++++++++++++++++++++++--------------------------- 1 file changed, 23 insertions(+), 27 deletions(-) commit dd76935c233ab2f251044bb4b2840e1a8859008e Author: Frederic Peters Date: Sun Oct 29 18:17:00 2006 +0000 use new error code for missing artifact lasso/id-ff/login.c | 3 +++ lasso/saml-2.0/profile.c | 5 ++++- 2 files changed, 7 insertions(+), 1 deletion(-) commit 803d916410efe24a04028cf22f01a21c3ce9eb24 Author: Frederic Peters Date: Sun Oct 29 18:09:18 2006 +0000 new error code for missing artifact lasso/errors.c | 2 ++ lasso/errors.h | 1 + swig/Lasso.i | 1 + 3 files changed, 4 insertions(+) commit a6e12c181f171ec6b1271b9afb5401dbc91783e9 Author: Frederic Peters Date: Sun Oct 29 18:05:40 2006 +0000 correctly clean memory lasso/saml-2.0/provider.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) commit 09d58563d81be9f16b5c34482b7d29990613764c Author: Frederic Peters Date: Sun Oct 29 18:05:19 2006 +0000 fixed reference to length when inflating lasso/xml/tools.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 4c681bec800b40297dbfd2ff39ec343e27c7d5bd Author: Frederic Peters Date: Sun Oct 29 18:04:53 2006 +0000 default value set to -1 and marked as optionals lasso/xml/saml-2.0/samlp2_authn_request.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) commit 9833e37aa943bc67082877ba4a070c762002eb17 Author: Frederic Peters Date: Sun Oct 29 14:22:16 2006 +0000 saml-2.0 more POST support lasso/id-ff/login.c | 3 +++ lasso/saml-2.0/login.c | 3 +++ lasso/saml-2.0/provider.c | 2 +- 3 files changed, 7 insertions(+), 1 deletion(-) commit 50e640076146c780321a5b878fa356f74192e413 Author: Frederic Peters Date: Sun Oct 29 13:26:27 2006 +0000 s/SAMLArt/SAMLart/ (+ check for remote provider) lasso/saml-2.0/login.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit 605749e04d7b719bef0c4101be7dec38e0108cc2 Author: Frederic Peters Date: Sun Oct 29 13:10:32 2006 +0000 handle "1" as well as "true" in booleans lasso/xml/xml.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) commit 42f573a9fcb1ea8db175cf61c8891e54895050d8 Author: Frederic Peters Date: Sun Oct 29 12:27:36 2006 +0000 started support for AssertionConsumerServiceIndex (as alternative to ProtocolBinding) (used by zxid) lasso/saml-2.0/login.c | 28 +++++++++++++++++++++++-- lasso/saml-2.0/provider.c | 34 +++++++++++++++++++++++++++++++ lasso/saml-2.0/providerprivate.h | 2 ++ lasso/xml/saml-2.0/samlp2_authn_request.c | 2 +- 4 files changed, 63 insertions(+), 3 deletions(-) commit f5ebbdfb9e1150198f5ead788d32f6c9b2295986 Author: Frederic Peters Date: Sun Oct 29 12:26:32 2006 +0000 saml2 query strings are often limited to one single arg lasso/xml/xml.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 80f104f73ae510af637bd37641a68c9d4e38cf95 Author: Frederic Peters Date: Sun Oct 29 11:32:20 2006 +0000 accept PAOS binding lasso/saml-2.0/provider.c | 2 ++ lasso/xml/strings.h | 1 + 2 files changed, 3 insertions(+) commit 7fa059b41fc132dd5e549b0e894b3cce262effd1 Author: Frederic Peters Date: Sat Oct 28 20:18:01 2006 +0000 finished saml2/sso/post lasso/saml-2.0/login.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) commit 75d0058559f367b421c740917473e096891e27d6 Author: Frederic Peters Date: Sat Oct 28 20:17:44 2006 +0000 note about memory leak lasso/id-wsf/wsf_profile.c | 1 + 1 file changed, 1 insertion(+) commit 709dc2f33456845de020015b44fb60ec6fadbcdb Author: Frederic Peters Date: Sat Oct 28 17:01:45 2006 +0000 standard .cvsignoe lasso/saml-2.0/.cvsignore | 7 +++++++ 1 file changed, 7 insertions(+) commit f53f729995d96927b72b49a9a3af310941f44417 Author: Frederic Peters Date: Sat Oct 28 17:01:26 2006 +0000 handle saml2/sso/post (almost) lasso/saml-2.0/login.c | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) commit 867eb76a144fe3a4c5dc7d1f11e3ea80d0d8c55a Author: Frederic Peters Date: Sat Oct 28 17:01:11 2006 +0000 handle saml2/sso/post (almost, need to fix return url) lasso/id-ff/Makefile.am | 3 ++- lasso/id-ff/login.c | 22 +++++++++++------- lasso/id-ff/loginprivate.h | 58 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 73 insertions(+), 10 deletions(-) commit 73a5ea2ba1185d7c258cf7ee4cc1333f4f8b5e41 Author: Frederic Peters Date: Sat Oct 28 17:00:38 2006 +0000 initialize private_key_file and certificate_file properly lasso/xml/saml-2.0/saml2_assertion.c | 2 ++ lasso/xml/saml-2.0/samlp2_request_abstract.c | 2 ++ lasso/xml/saml-2.0/samlp2_status_response.c | 2 ++ 3 files changed, 6 insertions(+) commit 45d59d6c005dfeda98bd5b1cfebd44f359b5e539 Author: Frederic Peters Date: Sat Oct 28 15:17:45 2006 +0000 formatting docs/lasso-book/writing-a-java-sp.txt | 119 ++++++++++++++++++++-------------- 1 file changed, 70 insertions(+), 49 deletions(-) commit ec59612540eaa0fc111ff4fc6051c631dac101e6 Author: Frederic Peters Date: Sat Oct 28 15:17:21 2006 +0000 use external stylesheet docs/lasso-book/Makefile.am | 15 +++-- docs/lasso-book/default.css | 143 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 152 insertions(+), 6 deletions(-) commit 01438cb0f83a659f75c37b8c29dfe28b3792e3c6 Author: Frederic Peters Date: Sat Oct 28 15:16:18 2006 +0000 rest2html is now shipped as rst2html, also looks for this one configure.ac | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 5abb4444594bb5eff9ba3afd95e4f569ce7bc239 Author: Frederic Peters Date: Sat Oct 28 11:40:24 2006 +0000 return defined error code lasso/id-ff/login.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 82b2c017b7d62c8e1e50a918cb2b4bd52edca09a Author: Frederic Peters Date: Sat Oct 28 11:40:13 2006 +0000 cast function reference lasso/id-ff/server.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 37b00c0469bc863f64392ed6ac35b201085fadd0 Author: Frederic Peters Date: Sat Oct 28 11:13:57 2006 +0000 standard .cvsignore for saml-2.0/ dir lasso/xml/saml-2.0/.cvsignore | 7 +++++++ 1 file changed, 7 insertions(+) commit 8dc72e6121cd232644ae538e6cb1d8081d657103 Author: Frederic Peters Date: Sat Oct 28 11:13:20 2006 +0000 marked maxInteractTime as optional lasso/xml/is_interaction_request.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) commit 31d9c9365a6d395ebeff477855a8b90ffefb1b3f Author: Frederic Peters Date: Sat Oct 28 11:09:23 2006 +0000 LassoDiscoServiceInstance are freed through lasso_node_destroy lasso/id-ff/server.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit 3aec03a5d3f6ee06ceb35f4f4c99a23ff0fe70b9 Author: Frederic Peters Date: Sat Oct 28 11:03:57 2006 +0000 fixed deflate, tested against lightbulb(opensso-php) lasso/xml/tools.c | 33 +++++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 6 deletions(-) commit f2aa008f52448331fa2ae2ef11bc8878b4d24a7e Author: Nicolas Clapies Date: Fri Oct 27 09:07:42 2006 +0000 Added documentation about writing a sp in java. docs/lasso-book/writing-a-java-sp.txt | 289 ++++++++++++++++++++++++++++++++++ 1 file changed, 289 insertions(+) commit 0a824ad919ff76b33b1ac7cc5955f0b8c8f2c6c5 Author: Frederic Peters Date: Thu Oct 26 15:41:36 2006 +0000 use zlib compress2 instead of lowlevel functions, this fixes inflate. lasso/xml/tools.c | 42 +++++++++++------------------------------- 1 file changed, 11 insertions(+), 31 deletions(-) commit 68cedae6c5b60d77fa1212d06439cac43ea0697c Author: Frederic Peters Date: Thu Oct 26 07:48:15 2006 +0000 don't automatically fallback to redirect, this breaks some cases.... lasso/id-ff/logout.c | 1 - 1 file changed, 1 deletion(-) commit 313f6236bc2f1905c0adb49f552941e7a0582058 Author: Frederic Peters Date: Thu Oct 26 07:16:58 2006 +0000 checking pointers... lasso/errors.c | 4 ++++ lasso/errors.h | 2 ++ lasso/id-wsf/authentication.c | 10 ++++++++++ swig/Lasso.i | 2 ++ 4 files changed, 18 insertions(+) commit dcf6c99137146f08131c9f6aad5d79bc642d08cf Author: Frederic Peters Date: Wed Oct 25 19:45:57 2006 +0000 return NULL; not an error code lasso/id-wsf/discovery.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit b4a28f44d7ecfc82ffe7dc767a227d0c260a9c4c Author: Frederic Peters Date: Wed Oct 25 19:44:58 2006 +0000 check for response before accessing it lasso/id-wsf/discovery.c | 5 +++++ 1 file changed, 5 insertions(+) commit 9cedbc83ac05336065a074256b9d80434313fd9a Author: Frederic Peters Date: Wed Oct 25 15:01:39 2006 +0000 check for query before accessing it lasso/id-wsf/discovery.c | 3 +++ 1 file changed, 3 insertions(+) commit 856cc36040c0321a47f70f1b03ffe97035ff0038 Author: Frederic Peters Date: Thu Oct 12 14:15:08 2006 +0000 nameIdentifier is now a LassoSamlNameIdentifier; which should help Java swig/Lasso.i | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 45a04aa7adba6da0c42bd3add8b1fecb814967dd Author: Frederic Peters Date: Mon Oct 9 10:09:25 2006 +0000 revert to SNIPPET_LIST_NODES; which is required for ID-WSF to work lasso/xml/saml_attribute_value.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 67e35d586543b217d0bc744910e2d7ff4a44f65e Author: Frederic Peters Date: Mon Oct 2 15:09:11 2006 +0000 ds_* are now also used out of id-wsf lasso/xml/Makefile.am | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) commit 71dae9811f814885ca0454c1aebd5eb84134f0ee Author: Frederic Peters Date: Fri Sep 29 12:51:48 2006 +0000 check session is not NULL even in functions where it shouldn't happen; since developer may always call functions out of order. lasso/id-ff/session.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) commit b08ae207c080463c7e4247fa94dd3ee3ad480ff6 Author: Frederic Peters Date: Thu Sep 28 16:09:54 2006 +0000 better error handling in slo lasso/errors.c | 4 +++- lasso/errors.h | 1 + lasso/id-ff/logout.c | 11 +++++++++++ swig/Lasso.i | 1 + 4 files changed, 16 insertions(+), 1 deletion(-) commit 21d9435173f3e36ac17cc97ad6da5b66507a44f2 Author: Damien Laniel Date: Thu Sep 21 08:51:32 2006 +0000 updated documentation for lasso server creation prototype change docs/lasso-book/writing-a-c-sp.txt | 1 + docs/lasso-book/writing-a-php-sp.txt | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) commit 63c5e23649286f0682636d69c6080587c0010809 Author: Frederic Peters Date: Tue Sep 19 08:55:04 2006 +0000 fixed lasso_server_new prototype docs/lasso-book/writing-a-c-sp.txt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) commit 76471938d99c39a662ac79fadfbe011641452925 Author: Frederic Peters Date: Thu Aug 3 13:15:48 2006 +0000 use specific error messages lasso/id-wsf/discovery.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 54ab313a265e9ffb47a6bf5db3522205124ae500 Author: Frederic Peters Date: Thu Aug 3 13:15:32 2006 +0000 fill LassoDataService provider_id member on process_request lasso/id-wsf/data_service.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) commit 1febb546b551cfe2390b319aeb57ce050ca17999 Author: Frederic Peters Date: Thu Aug 3 12:49:52 2006 +0000 define and use specific error codes lasso/errors.h | 5 +++++ lasso/id-wsf/data_service.c | 2 +- swig/Lasso.i | 12 ++++++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) commit c3cb79a8015a320bc3ecbe985e4a2b3ca8e1061c Author: Frederic Peters Date: Tue May 16 08:15:49 2006 +0000 SWIG 1.3.28 is required. autogen.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit bf62d924ef177c7a8d333adb053cfc7504941912 Author: Frederic Peters Date: Tue May 16 08:10:56 2006 +0000 be more specific in role lasso/id-ff/login.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) commit dec18ebdc15c7b3d3a7337bc9c021998c3b2e0db Author: Frederic Peters Date: Tue May 16 08:10:28 2006 +0000 support for SNIPPET_LIST_XMLNODES (very old patch) lasso/xml/saml_attribute_value.c | 2 +- lasso/xml/xml.c | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) commit e42861c2aa5e22772c4139315a65486682f3e106 Author: Frederic Peters Date: Thu May 11 11:51:29 2006 +0000 added missing comma lasso/errors.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 6e7c43cc673ace4ecab0845a89cff4d7533ca668 Author: Frederic Peters Date: Thu May 11 08:19:24 2006 +0000 error message lasso/errors.c | 2 ++ 1 file changed, 2 insertions(+) commit 6c9b660be47c9b7a336a47c059142e08ac9280e8 Author: Frederic Peters Date: Wed May 10 08:04:41 2006 +0000 don't say undefined when it is, just lacking a description string, bugger. lasso/errors.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit b4b55e5268d1f9319f4423dcabae92c0e40b9aeb Author: Frederic Peters Date: Wed May 10 08:00:45 2006 +0000 looking up NameIdentifier in AttributeStatement (old patch) lasso/id-ff/login.c | 31 ++++++++++++------------------- 1 file changed, 12 insertions(+), 19 deletions(-) commit dbfb06f7aac23eb505fd1b01f378ba70bf4fd53b Author: Frederic Peters Date: Tue Mar 21 09:37:58 2006 +0000 ship Lasso-saml2.i; part of 0.6.5 swig/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 6ff1e95c1abb57e24375f9595b8b6e0ec1a30baa Author: Frederic Peters Date: Tue Mar 21 09:25:18 2006 +0000 updated to 0.6.5 ChangeLog | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) commit a2eddea2df95558e8fe941a1897503b933b28fa4 Author: Frederic Peters Date: Tue Mar 21 09:05:37 2006 +0000 fixed doc NEWS | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 0f0bdd23b98d5d162b88bc13fa103f1b2a44fae9 Author: Frederic Peters Date: Tue Mar 21 09:03:37 2006 +0000 note about 0.6.5 changelog | 6 ++++++ 1 file changed, 6 insertions(+) commit 19acf1b3b07d24c515a4cd4edd22fbd5183ffe8c Author: Frederic Peters Date: Tue Mar 21 09:03:37 2006 +0000 note about 0.6.5 NEWS | 5 +++++ configure.ac | 4 ++-- debian/changelog | 6 ++++++ doap.rdf | 4 ++++ 4 files changed, 17 insertions(+), 2 deletions(-) commit 318276a1da7fa294a9308c5426693edf0f28fba3 Author: Frederic Peters Date: Tue Mar 21 09:01:24 2006 +0000 try to find nameidentifier in alternative location; for compatibity with some idp lasso/id-ff/login.c | 37 ++++++++++++++++++++++++++++++------- 1 file changed, 30 insertions(+), 7 deletions(-) commit 5d45d29402d20fabd448e6f58266acd61bde573a Author: Frederic Peters Date: Tue Mar 21 08:57:28 2006 +0000 Helps building outside srcdir java/Makefile.am | 2 +- lasso/Makefile.am | 2 +- lasso/id-ff/Makefile.am | 1 + lasso/saml-2.0/Makefile.am | 1 + perl/Makefile.am | 2 +- php/Makefile.am | 2 +- python/Makefile.am | 1 + 7 files changed, 7 insertions(+), 4 deletions(-) commit 3cc376b95d0decaa108aeb22e6d47d8ea6cb4b68 Author: Frederic Peters Date: Tue Mar 21 08:41:57 2006 +0000 fixed a few win32 versioning issues win32/msvc/lasso.dsp.in | 4 ++-- win32/nsis/jlasso-lite.nsi.in | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) commit 4424838976667824112217deed7b84c705c2788e Author: Frederic Peters Date: Mon Mar 20 19:26:21 2006 +0000 killed a chicken to restore swig voodoo; hope it is enough, I'm running out of virgins. php/patch_swig_output.py | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) commit 286d265588f283dbf14c102036a378a55bf503f1 Author: Damien Laniel Date: Mon Mar 20 15:11:39 2006 +0000 changed contact address for php documentation to mine docs/lasso-book/writing-a-php-sp.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 0b82b28afa2cad339b343285f98872be30d94c03 Author: Frederic Peters Date: Sun Mar 19 19:40:22 2006 +0000 update copyright year, add Damien to the php doc authors, run a spellchecker on the doc docs/lasso-book/writing-a-c-sp.txt | 20 +++++++++--------- docs/lasso-book/writing-a-php-sp.txt | 40 +++++++++++++++++++----------------- 2 files changed, 31 insertions(+), 29 deletions(-) commit 1cc9868410ab61e406f2c267715141726921baee Author: Frederic Peters Date: Sun Mar 19 19:21:35 2006 +0000 unified braces on if line, spaces between if and parenthesis and indentation; also use the same $server variable name everywhere docs/lasso-book/writing-a-php-sp.txt | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) commit 94a496468af1f5c835d1b990fb8b2913bc8fb5ba Author: Damien Laniel Date: Sun Mar 19 19:01:05 2006 +0000 fixed doc writing-a-php-sp.txt docs/lasso-book/writing-a-php-sp.txt | 64 ++++++++++++++++++++---------------- 1 file changed, 35 insertions(+), 29 deletions(-) commit 4a7bdf00f8a26dc7731445a743599cb28e3a820e Author: Frederic Peters Date: Sun Mar 19 18:03:21 2006 +0000 removed hardcoded php dependency, added php:Depends substvar control | 2 +- rules | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) commit ab3167fba53bab17c6b8fdce41fbf8cfe931111d Author: Frederic Peters Date: Sun Mar 19 18:03:21 2006 +0000 removed hardcoded php dependency, added php:Depends substvar debian/control | 2 +- debian/rules | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) commit 83e9876f5aabd4adf2f5a82d6eaf3acb1024596f Author: Frederic Peters Date: Fri Mar 17 10:39:06 2006 +0000 fixed RSA_SHA1 constant name docs/lasso-book/writing-a-php-sp.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 39c44abcc35d3871a0e6bd77890ca677b7b7b834 Author: Frederic Peters Date: Wed Mar 8 12:13:11 2006 +0000 fixed underline NEWS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 93f89ab6d72b693909f15a671cfad8b9782ef839 Author: Frederic Peters Date: Wed Mar 8 12:12:44 2006 +0000 updated changelog to 0.6.4 ChangeLog | 808 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 808 insertions(+) commit 59b743fa8236ebc9cff53bedd0ab266c4600d482 Author: Frederic Peters Date: Wed Mar 8 12:08:53 2006 +0000 update to 0.6.4 changelog | 6 ++++++ 1 file changed, 6 insertions(+) commit 4247b72905f3c7f02a5694583b9d64c030f695fa Author: Frederic Peters Date: Wed Mar 8 12:08:53 2006 +0000 update to 0.6.4 debian/changelog | 6 ++++++ 1 file changed, 6 insertions(+) commit 18358d49c39995dd6d8cff8feac3e556bf08b1e0 Author: Frederic Peters Date: Wed Mar 8 11:02:42 2006 +0000 fixing python test. python/tests/errorchecking_tests.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) commit 7e81f6bc6684f5756d5ef126fe8a516932ddc664 Author: Frederic Peters Date: Wed Mar 8 09:30:01 2006 +0000 ignoring generated saml2 files java/.cvsignore | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) commit c8637b68555811fbe1301241144dd6d8d0499b80 Author: Frederic Peters Date: Wed Mar 8 09:23:15 2006 +0000 info about 0.6.4 doap.rdf | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit ed4bd3685262322016139043e569f53e38872b56 Author: Frederic Peters Date: Wed Mar 8 09:20:58 2006 +0000 updated (c) years and gforge url README | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit fd787a93d750eb58e87b3c77a68c205658e7db2b Author: Frederic Peters Date: Wed Mar 8 09:19:07 2006 +0000 updated FSF address COPYING | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 6ff9b93be75355ce65d95392cfcfa0019abfb561 Author: Frederic Peters Date: Wed Mar 8 09:14:13 2006 +0000 releasing 0.6.4 NEWS | 10 ++++++++++ 1 file changed, 10 insertions(+) commit 09aad1ad3b7029b7ef3a95bf306067862d61483d Author: Frederic Peters Date: Wed Mar 8 09:09:52 2006 +0000 don't ship c# in this release configure.ac | 121 +++++++++++++++++++++++++++++------------------------------ 1 file changed, 59 insertions(+), 62 deletions(-) commit 8eb82bec7cf309f0cef7431aed20166a81fc9522 Author: Frederic Peters Date: Mon Mar 6 17:37:55 2006 +0000 new error check test python/tests/errorchecking_tests.py | 11 +++++++++++ 1 file changed, 11 insertions(+) commit 4607b935b5244b4a5fbbdff4e02ec4aa75d3e5d6 Author: Frederic Peters Date: Mon Mar 6 17:37:32 2006 +0000 ship logoutprivate.h lasso/id-ff/Makefile.am | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 07d9290cfa736952c974359429a4d95f429b1a00 Author: Frederic Peters Date: Mon Mar 6 17:37:14 2006 +0000 ship style.css docs/reference/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit dab201292827214475511eb3919efa965bed2f8c Author: Frederic Peters Date: Mon Mar 6 17:34:20 2006 +0000 don't ship fedterm-redirect.svg for now docs/lasso-book/figures/Makefile.am | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit cbbc19086bc9e180586838ab18422f785e08f32e Author: Frederic Peters Date: Mon Mar 6 17:33:52 2006 +0000 updated generated java files list java/Makefile.am | 120 ++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 101 insertions(+), 19 deletions(-) commit 2c4d7a19d78505df04be6d6514f76aca3d474571 Author: Frederic Peters Date: Mon Mar 6 16:58:46 2006 +0000 missing brace swig/Lasso.i | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 1c03f7d7a25aedcde900977f7d87dbdcbe7bb7c7 Author: Frederic Peters Date: Mon Mar 6 16:45:53 2006 +0000 adding braces swig/Lasso.i | 170 +++++++++++++++++++++++++++++++++++------------------------ 1 file changed, 101 insertions(+), 69 deletions(-) commit f597a23d6200da6326503e5be3620ed683349eac Author: Frederic Peters Date: Mon Mar 6 16:36:51 2006 +0000 don't unref/affect the same pointer; this will cause segfaults (seen in java) swig/Lasso.i | 6 ++++++ 1 file changed, 6 insertions(+) commit 3bbb92979ce42aad7e8904c6d2a183c4694e7780 Author: Frederic Peters Date: Mon Mar 6 14:01:57 2006 +0000 ignoring generated Makefile and Makefile.in swig/saml-2.0/.cvsignore | 2 ++ 1 file changed, 2 insertions(+) commit 0892d71c47bf97125be6902d4bab83720bde1566 Author: Frederic Peters Date: Mon Mar 6 14:01:29 2006 +0000 SWIG upgrade (->1.3.28) broke once again bindings; this time thanks to macros that are now required to have args (looks like that anyway, nothing is documented); fixing this. swig/Lasso-wsf.i | 148 ++++++++++++++--------------- swig/Lasso.i | 277 +++++++++++++++++++++++++++---------------------------- 2 files changed, 212 insertions(+), 213 deletions(-) commit bfced903c8b448706cfc49ff2dcd7c7bc2894bba Author: Frederic Peters Date: Sat Mar 4 15:55:56 2006 +0000 fixed variable type; how bad lasso/id-wsf/wsf_profile.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit f348a73bb1fcef2431229c44bfda3d01ca4c4275 Author: Frederic Peters Date: Sat Mar 4 15:50:31 2006 +0000 cast strings to xmlChar* for correct signedness lasso/id-wsf/authentication.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 3f5def3f97d8b42aeff23eb3a6f47341b57ee38f Author: Frederic Peters Date: Sat Mar 4 12:35:37 2006 +0000 added comment about why not to use memset lasso/id-ff/server.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 676ed285420c158b0068fc846578d80b9d5e79b7 Author: Frederic Peters Date: Tue Feb 21 09:54:25 2006 +0000 added short desc for lasso.h docs/reference/tmpl/lasso.sgml | 65 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) commit 4e6404fa28b3cde75e71af581be410606540e479 Author: Frederic Peters Date: Tue Feb 21 09:53:29 2006 +0000 added short descriptions to every lib: classes docs/reference/tmpl/lib_assertion.sgml | 47 +++++++++++++++++++ .../tmpl/lib_authentication_statement.sgml | 49 ++++++++++++++++++++ docs/reference/tmpl/lib_authn_context.sgml | 36 +++++++++++++++ .../reference/tmpl/lib_authn_request_envelope.sgml | 52 +++++++++++++++++++++ docs/reference/tmpl/lib_authn_response.sgml | 39 ++++++++++++++++ .../tmpl/lib_authn_response_envelope.sgml | 39 ++++++++++++++++ .../lib_federation_termination_notification.sgml | 50 ++++++++++++++++++++ docs/reference/tmpl/lib_idp_entries.sgml | 34 ++++++++++++++ docs/reference/tmpl/lib_idp_entry.sgml | 36 +++++++++++++++ docs/reference/tmpl/lib_idp_list.sgml | 35 ++++++++++++++ docs/reference/tmpl/lib_logout_request.sgml | 52 +++++++++++++++++++++ docs/reference/tmpl/lib_logout_response.sgml | 46 +++++++++++++++++++ .../tmpl/lib_name_identifier_mapping_request.sgml | 51 +++++++++++++++++++++ .../tmpl/lib_name_identifier_mapping_response.sgml | 50 ++++++++++++++++++++ .../tmpl/lib_register_name_identifier_request.sgml | 53 ++++++++++++++++++++++ .../lib_register_name_identifier_response.sgml | 46 +++++++++++++++++++ docs/reference/tmpl/lib_request_authn_context.sgml | 36 +++++++++++++++ docs/reference/tmpl/lib_scoping.sgml | 35 ++++++++++++++ docs/reference/tmpl/lib_status_response.sgml | 37 +++++++++++++++ docs/reference/tmpl/lib_subject.sgml | 34 ++++++++++++++ 20 files changed, 857 insertions(+) commit bdea328f3e99b1ca22d6533c83ac9c28cbfd41d9 Author: Frederic Peters Date: Tue Feb 21 09:52:26 2006 +0000 more doc docs/reference/tmpl/data_service.sgml | 3 +++ docs/reference/tmpl/discovery.sgml | 10 +++++++++- docs/reference/tmpl/provider.sgml | 5 +++++ docs/reference/tmpl/strings.sgml | 20 ++++++++++++++++++-- 4 files changed, 35 insertions(+), 3 deletions(-) commit 9d11e3041b90dd195f085741c4cb582cb4723976 Author: Frederic Peters Date: Tue Feb 21 09:51:49 2006 +0000 documentation fixes lasso/id-ff/provider.h | 4 ++-- lasso/id-wsf/discovery.c | 1 + lasso/id-wsf/discovery.h | 2 +- lasso/xml/xml.c | 1 - 4 files changed, 4 insertions(+), 4 deletions(-) commit 1d9b919ab9349f9e21757cc42fcf9ae50038b9f7 Author: Frederic Peters Date: Mon Feb 6 12:28:48 2006 +0000 don't g_object_ref what can be NULL lasso/id-wsf/discovery.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit c97aa2f64c8af7dee53e931f076f1fdbed638c5b Author: Frederic Peters Date: Wed Jan 25 16:32:26 2006 +0000 own style for reference doc docs/reference/Makefile.am | 4 ++- docs/reference/style.css | 79 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+), 1 deletion(-) commit 6435b5ecea6eaf143a1627c74cdee59d6b2ed6d2 Author: Frederic Peters Date: Wed Jan 25 16:31:36 2006 +0000 fixing redirect example docs/reference/tmpl/login.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 1bfd2beceb11dd488152ee347507f7ef5c412bf6 Author: Frederic Peters Date: Wed Jan 25 11:18:52 2006 +0000 fix memory management for ID-WSF ResourceId lasso/id-ff/login.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) commit 267dd3424a929e0b1a0608480fc2dc059e9e778c Author: Frederic Peters Date: Mon Jan 23 15:30:00 2006 +0000 check for remote provider id before looking it in GHashTable lasso/id-ff/defederation.c | 5 +++++ lasso/id-ff/lecp.c | 5 +++++ lasso/id-ff/login.c | 16 ++++++++++++++++ lasso/id-ff/name_identifier_mapping.c | 10 ++++++++++ lasso/id-ff/name_registration.c | 10 ++++++++++ 5 files changed, 46 insertions(+) commit 194ea564b50822321f98cef9adc92cfdbddaa13a Author: Frederic Peters Date: Mon Jan 23 14:05:59 2006 +0000 don't segfault when lasso_logout_build_request_msg is erroneously called without lasso_logout_init_request before lasso/id-ff/logout.c | 7 +++++++ 1 file changed, 7 insertions(+) commit ff1d55d07ee4dc9931696d5222cc72945cdae48a Author: Frederic Peters Date: Sat Jan 21 09:31:13 2006 +0000 fix swig id-wsf disco for new version of swig swig/Lasso-wsf-disco.i | 4 ---- 1 file changed, 4 deletions(-) commit 1660c51d505d8b30d7fbd99a19dc72477ebb83ae Author: Frederic Peters Date: Thu Jan 12 13:01:12 2006 +0000 duplicate key to fix consecutive calls to xmlsec lasso/id-ff/provider.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) commit 27655edc316acd1b3c95240836d0307705a5507e Author: Nicolas Clapies Date: Thu Jan 5 12:36:10 2006 +0000 Fixed symbol error about LassoDiscoDescription_newWithBriefSoapHttpDescription. swig/Lasso-wsf-disco.i | 8 -------- 1 file changed, 8 deletions(-) commit 87e2f5ed1d9c7558b2c7e0eb1feb020b017e9247 Author: Nicolas Clapies Date: Thu Jan 5 12:31:51 2006 +0000 Fixed node prefix from interaction service namespace element. lasso/xml/xml.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 24c8bcd5b5526ef1a6c725f5d7e047120d24f4a6 Author: Frederic Peters Date: Sat Dec 10 10:44:09 2005 +0000 bindings working with swig 1.3.27 configure.ac | 2 +- php/patch_swig_output.py | 5 ---- swig/Lasso.i | 66 +++++------------------------------------------- 3 files changed, 7 insertions(+), 66 deletions(-) commit 859287bed5c7052294a4ed3a61792e0b54750010 Author: Nicolas Clapies Date: Tue Dec 6 13:30:12 2005 +0000 Fixed missing declaration and settings. lasso/xml/ds_key_info.c | 1 - lasso/xml/ds_key_info.h | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) commit 17f4a386567a82b948c7a4bdc273d7d59a8752b2 Author: Nicolas Clapies Date: Tue Dec 6 13:23:33 2005 +0000 AP now verify SP signature. lasso/id-wsf/data_service.c | 16 +- lasso/id-wsf/discovery.c | 66 ++--- lasso/id-wsf/wsf_profile.c | 684 +++++++++++++++++++++++++++++++++++--------- 3 files changed, 578 insertions(+), 188 deletions(-) commit c26a127319a4dfd58e8045c4c5126a9d5491c9b9 Author: Nicolas Clapies Date: Tue Dec 6 13:15:31 2005 +0000 *** empty log message *** lasso/id-wsf/wsf_profile.h | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) commit 3b170296fc04406d2bc95b7cf6709e69d60c861f Author: Nicolas Clapies Date: Tue Dec 6 12:54:54 2005 +0000 *** empty log message *** lasso/xml/Makefile.am | 4 ++++ 1 file changed, 4 insertions(+) commit e09892edad3db0b8aaf7700b631a008691e7364b Author: Nicolas Clapies Date: Tue Dec 6 12:54:30 2005 +0000 Only KeyValue in KeyInfo. Added KeyValue and RsaKeyValue element. lasso/xml/ds_key_info.c | 3 +- lasso/xml/ds_key_info.h | 3 +- lasso/xml/ds_key_value.c | 96 +++++++++++++++++++++++++++++++++++++++++++ lasso/xml/ds_key_value.h | 70 +++++++++++++++++++++++++++++++ lasso/xml/ds_rsa_key_value.c | 98 ++++++++++++++++++++++++++++++++++++++++++++ lasso/xml/ds_rsa_key_value.h | 70 +++++++++++++++++++++++++++++++ 6 files changed, 336 insertions(+), 4 deletions(-) commit 0f0c06606df6f1bf16f11c10674b9405d549fedf Author: Frederic Peters Date: Mon Dec 5 15:15:32 2005 +0000 fixed host specific architecture changes configure.ac | 69 ++++++++++++++++++++++++------------------------------------ 1 file changed, 28 insertions(+), 41 deletions(-) commit b4a02f143fc62e4b081f5e0b0785b462da377c92 Author: Frederic Peters Date: Mon Dec 5 10:36:19 2005 +0000 dont parse files in id-wsf/ when not compiled with id-wsf support (required for mac os x nmedit) lasso/extract_symbols.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit f44b7e9d1a1bcb69c567dc9bcdf23d54ca377fc1 Author: Frederic Peters Date: Tue Nov 22 21:31:03 2005 +0000 missing saml 2 file swig/Lasso-saml2.i | 11 +++++++++++ 1 file changed, 11 insertions(+) commit d17bbf258d6c460fd9212301d624c5194b1c61c8 Author: Frederic Peters Date: Tue Nov 22 21:24:12 2005 +0000 Completed first go of SAML 2.0 single logout and added some missing files lasso/id-ff/logout.c | 6 +- lasso/saml-2.0/logout.c | 140 +++++++++++++++++++-- lasso/saml-2.0/logoutprivate.h | 2 + lasso/xml/saml-2.0/samlp2_logout_response.h | 73 +++++++++++ .../xml/saml-2.0/samlp2_manage_name_id_response.h | 73 +++++++++++ lasso/xml/xml.c | 1 + swig/Lasso.i | 22 ++++ swig/saml-2.0/main.h | 98 +++++++++++++++ 8 files changed, 405 insertions(+), 10 deletions(-) commit 853f46fd9325b7f3eec0bc385c4a9bd763c031d4 Author: Frederic Peters Date: Mon Nov 21 18:51:52 2005 +0000 starting SAML 2 logout lasso/id-ff/defederation.c | 7 +- lasso/id-ff/federation.c | 34 +- lasso/id-ff/federation.h | 2 +- lasso/id-ff/login.c | 42 +- lasso/id-ff/logout.c | 67 ++- lasso/id-ff/logoutprivate.h | 43 ++ lasso/id-ff/name_registration.c | 4 +- lasso/id-ff/profile.c | 16 +- lasso/id-ff/profile.h | 2 +- lasso/id-ff/provider.c | 6 + lasso/id-ff/provider.h | 2 +- lasso/id-ff/session.c | 5 +- lasso/saml-2.0/Makefile.am | 6 +- lasso/saml-2.0/login.c | 9 +- lasso/saml-2.0/logout.c | 482 +++++++++++++++++++++ lasso/saml-2.0/logoutprivate.h | 49 +++ lasso/saml-2.0/profile.c | 4 +- lasso/saml-2.0/provider.c | 81 +++- lasso/saml-2.0/providerprivate.h | 4 + lasso/xml/private.h | 4 + lasso/xml/saml-2.0/Makefile.am | 4 + lasso/xml/saml-2.0/samlp2_artifact_resolve.c | 28 -- lasso/xml/saml-2.0/samlp2_logout_response.c | 129 ++++++ .../xml/saml-2.0/samlp2_manage_name_id_response.c | 129 ++++++ .../xml/saml-2.0/samlp2_name_id_mapping_response.c | 28 ++ lasso/xml/saml-2.0/samlp2_request_abstract.c | 11 + lasso/xml/saml-2.0/samlp2_response.c | 28 ++ lasso/xml/saml-2.0/samlp2_status_response.c | 39 ++ lasso/xml/xml.c | 1 + 29 files changed, 1141 insertions(+), 125 deletions(-) commit ab1e605ce59bba13464c814bc224146875b170ff Author: Frederic Peters Date: Sun Nov 20 18:05:05 2005 +0000 swig inheritance for SAML 2 elements swig/saml-2.0/inheritance.h | 48 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) commit 8ec430af7cd9a0fc4f5f91cdb7adb5249f464654 Author: Frederic Peters Date: Sun Nov 20 17:56:55 2005 +0000 removing xmlsec debug code lasso/id-ff/provider.c | 40 ---------------------------------------- 1 file changed, 40 deletions(-) commit ebb9f7dffc22196e6c1cb18b218fc411b4d190c2 Author: Frederic Peters Date: Sun Nov 20 15:38:19 2005 +0000 SAML 2.0 support (only web-sso for the moment) configure.ac | 43 +- lasso/Makefile.am | 6 +- lasso/errors.c | 4 +- lasso/errors.h | 1 + lasso/extract_symbols.py | 3 +- lasso/extract_types.py | 8 +- lasso/id-ff/defederation.c | 12 +- lasso/id-ff/federation.c | 8 +- lasso/id-ff/federation.h | 4 +- lasso/id-ff/login.c | 229 ++++++-- lasso/id-ff/logout.c | 47 +- lasso/id-ff/name_identifier_mapping.c | 34 +- lasso/id-ff/name_registration.c | 22 +- lasso/id-ff/profile.c | 37 +- lasso/id-ff/profile.h | 10 +- lasso/id-ff/profileprivate.h | 7 + lasso/id-ff/provider.c | 96 ++- lasso/id-ff/provider.h | 34 +- lasso/id-ff/providerprivate.h | 18 +- lasso/id-ff/server.c | 12 + lasso/id-ff/session.c | 4 +- lasso/id-ff/sessionprivate.h | 4 +- lasso/saml-2.0/Makefile.am | 23 + lasso/saml-2.0/federation.c | 59 ++ lasso/saml-2.0/federationprivate.h | 39 ++ lasso/saml-2.0/login.c | 642 +++++++++++++++++++++ lasso/saml-2.0/loginprivate.h | 59 ++ lasso/saml-2.0/profile.c | 277 +++++++++ lasso/saml-2.0/profileprivate.h | 46 ++ lasso/saml-2.0/provider.c | 254 ++++++++ lasso/saml-2.0/providerprivate.h | 49 ++ lasso/xml/Makefile.am | 2 + lasso/xml/lib_authn_response.c | 4 +- lasso/xml/lib_authn_response.h | 2 +- .../xml/lib_federation_termination_notification.c | 6 +- .../xml/lib_federation_termination_notification.h | 4 +- lasso/xml/lib_logout_request.c | 6 +- lasso/xml/lib_logout_request.h | 4 +- lasso/xml/lib_logout_response.c | 6 +- lasso/xml/lib_logout_response.h | 4 +- lasso/xml/lib_name_identifier_mapping_request.c | 6 +- lasso/xml/lib_name_identifier_mapping_request.h | 4 +- lasso/xml/lib_name_identifier_mapping_response.c | 6 +- lasso/xml/lib_name_identifier_mapping_response.h | 4 +- lasso/xml/lib_register_name_identifier_request.c | 6 +- lasso/xml/lib_register_name_identifier_request.h | 4 +- lasso/xml/lib_register_name_identifier_response.c | 6 +- lasso/xml/lib_register_name_identifier_response.h | 4 +- lasso/xml/saml-2.0/Makefile.am | 110 ++++ lasso/xml/saml-2.0/saml2_action.c | 132 +++++ lasso/xml/saml-2.0/saml2_action.h | 78 +++ lasso/xml/saml-2.0/saml2_advice.c | 121 ++++ lasso/xml/saml-2.0/saml2_advice.h | 84 +++ lasso/xml/saml-2.0/saml2_assertion.c | 196 +++++++ lasso/xml/saml-2.0/saml2_assertion.h | 96 +++ lasso/xml/saml-2.0/saml2_attribute.c | 121 ++++ lasso/xml/saml-2.0/saml2_attribute.h | 79 +++ lasso/xml/saml-2.0/saml2_attribute_statement.c | 116 ++++ lasso/xml/saml-2.0/saml2_attribute_statement.h | 76 +++ lasso/xml/saml-2.0/saml2_audience_restriction.c | 112 ++++ lasso/xml/saml-2.0/saml2_audience_restriction.h | 75 +++ lasso/xml/saml-2.0/saml2_authn_context.c | 130 +++++ lasso/xml/saml-2.0/saml2_authn_context.h | 78 +++ lasso/xml/saml-2.0/saml2_authn_statement.c | 128 ++++ lasso/xml/saml-2.0/saml2_authn_statement.h | 82 +++ .../xml/saml-2.0/saml2_authz_decision_statement.c | 123 ++++ .../xml/saml-2.0/saml2_authz_decision_statement.h | 81 +++ lasso/xml/saml-2.0/saml2_base_idabstract.c | 109 ++++ lasso/xml/saml-2.0/saml2_base_idabstract.h | 76 +++ lasso/xml/saml-2.0/saml2_condition_abstract.c | 111 ++++ lasso/xml/saml-2.0/saml2_condition_abstract.h | 73 +++ lasso/xml/saml-2.0/saml2_conditions.c | 128 ++++ lasso/xml/saml-2.0/saml2_conditions.h | 81 +++ lasso/xml/saml-2.0/saml2_encrypted_element.c | 112 ++++ lasso/xml/saml-2.0/saml2_encrypted_element.h | 76 +++ lasso/xml/saml-2.0/saml2_evidence.c | 120 ++++ lasso/xml/saml-2.0/saml2_evidence.h | 84 +++ .../saml-2.0/saml2_key_info_confirmation_data.c | 112 ++++ .../saml-2.0/saml2_key_info_confirmation_data.h | 76 +++ lasso/xml/saml-2.0/saml2_name_id.c | 143 +++++ lasso/xml/saml-2.0/saml2_name_id.h | 81 +++ lasso/xml/saml-2.0/saml2_one_time_use.c | 105 ++++ lasso/xml/saml-2.0/saml2_one_time_use.h | 73 +++ lasso/xml/saml-2.0/saml2_proxy_restriction.c | 115 ++++ lasso/xml/saml-2.0/saml2_proxy_restriction.h | 77 +++ lasso/xml/saml-2.0/saml2_statement_abstract.c | 115 ++++ lasso/xml/saml-2.0/saml2_statement_abstract.h | 73 +++ lasso/xml/saml-2.0/saml2_subject.c | 126 ++++ lasso/xml/saml-2.0/saml2_subject.h | 81 +++ lasso/xml/saml-2.0/saml2_subject_confirmation.c | 127 ++++ lasso/xml/saml-2.0/saml2_subject_confirmation.h | 83 +++ .../xml/saml-2.0/saml2_subject_confirmation_data.c | 130 +++++ .../xml/saml-2.0/saml2_subject_confirmation_data.h | 80 +++ lasso/xml/saml-2.0/saml2_subject_locality.c | 110 ++++ lasso/xml/saml-2.0/saml2_subject_locality.h | 76 +++ lasso/xml/saml-2.0/samlp2_artifact_resolve.c | 140 +++++ lasso/xml/saml-2.0/samlp2_artifact_resolve.h | 75 +++ lasso/xml/saml-2.0/samlp2_artifact_response.c | 112 ++++ lasso/xml/saml-2.0/samlp2_artifact_response.h | 75 +++ lasso/xml/saml-2.0/samlp2_assertion_idrequest.c | 140 +++++ lasso/xml/saml-2.0/samlp2_assertion_idrequest.h | 75 +++ lasso/xml/saml-2.0/samlp2_attribute_query.c | 112 ++++ lasso/xml/saml-2.0/samlp2_attribute_query.h | 76 +++ lasso/xml/saml-2.0/samlp2_authn_query.c | 116 ++++ lasso/xml/saml-2.0/samlp2_authn_query.h | 78 +++ lasso/xml/saml-2.0/samlp2_authn_request.c | 184 ++++++ lasso/xml/saml-2.0/samlp2_authn_request.h | 92 +++ lasso/xml/saml-2.0/samlp2_authz_decision_query.c | 120 ++++ lasso/xml/saml-2.0/samlp2_authz_decision_query.h | 80 +++ lasso/xml/saml-2.0/samlp2_extensions.c | 105 ++++ lasso/xml/saml-2.0/samlp2_extensions.h | 73 +++ lasso/xml/saml-2.0/samlp2_idp_entry.c | 114 ++++ lasso/xml/saml-2.0/samlp2_idp_entry.h | 77 +++ lasso/xml/saml-2.0/samlp2_idp_list.c | 112 ++++ lasso/xml/saml-2.0/samlp2_idp_list.h | 76 +++ lasso/xml/saml-2.0/samlp2_logout_request.c | 163 ++++++ lasso/xml/saml-2.0/samlp2_logout_request.h | 84 +++ lasso/xml/saml-2.0/samlp2_manage_name_id_request.c | 162 ++++++ lasso/xml/saml-2.0/samlp2_manage_name_id_request.h | 82 +++ .../xml/saml-2.0/samlp2_name_id_mapping_request.c | 155 +++++ .../xml/saml-2.0/samlp2_name_id_mapping_request.h | 82 +++ .../xml/saml-2.0/samlp2_name_id_mapping_response.c | 117 ++++ .../xml/saml-2.0/samlp2_name_id_mapping_response.h | 79 +++ lasso/xml/saml-2.0/samlp2_name_id_policy.c | 114 ++++ lasso/xml/saml-2.0/samlp2_name_id_policy.h | 77 +++ lasso/xml/saml-2.0/samlp2_request_abstract.c | 167 ++++++ lasso/xml/saml-2.0/samlp2_request_abstract.h | 90 +++ .../xml/saml-2.0/samlp2_requested_authn_context.c | 115 ++++ .../xml/saml-2.0/samlp2_requested_authn_context.h | 78 +++ lasso/xml/saml-2.0/samlp2_response.c | 116 ++++ lasso/xml/saml-2.0/samlp2_response.h | 76 +++ lasso/xml/saml-2.0/samlp2_scoping.c | 115 ++++ lasso/xml/saml-2.0/samlp2_scoping.h | 78 +++ lasso/xml/saml-2.0/samlp2_status.c | 116 ++++ lasso/xml/saml-2.0/samlp2_status.h | 78 +++ lasso/xml/saml-2.0/samlp2_status_code.c | 112 ++++ lasso/xml/saml-2.0/samlp2_status_code.h | 77 +++ lasso/xml/saml-2.0/samlp2_status_detail.c | 105 ++++ lasso/xml/saml-2.0/samlp2_status_detail.h | 73 +++ lasso/xml/saml-2.0/samlp2_status_response.c | 175 ++++++ lasso/xml/saml-2.0/samlp2_status_response.h | 93 +++ lasso/xml/saml-2.0/samlp2_subject_query_abstract.c | 140 +++++ lasso/xml/saml-2.0/samlp2_subject_query_abstract.h | 76 +++ lasso/xml/saml-2.0/samlp2_terminate.c | 101 ++++ lasso/xml/saml-2.0/samlp2_terminate.h | 73 +++ lasso/xml/samlp_response.c | 4 +- lasso/xml/samlp_response.h | 2 +- lasso/xml/tools.c | 127 ++++ swig/Lasso.i | 168 +++++- swig/Makefile.am | 1 + swig/saml-2.0/Makefile.am | 54 ++ swig/saml-2.0/saml2_action.i | 34 ++ swig/saml-2.0/saml2_advice.i | 32 + swig/saml-2.0/saml2_assertion.i | 91 +++ swig/saml-2.0/saml2_attribute.i | 35 ++ swig/saml-2.0/saml2_attribute_statement.i | 33 ++ swig/saml-2.0/saml2_audience_restriction.i | 34 ++ swig/saml-2.0/saml2_authn_context.i | 35 ++ swig/saml-2.0/saml2_authn_statement.i | 64 ++ swig/saml-2.0/saml2_authz_decision_statement.i | 63 ++ swig/saml-2.0/saml2_base_idabstract.i | 34 ++ swig/saml-2.0/saml2_condition_abstract.i | 32 + swig/saml-2.0/saml2_conditions.i | 34 ++ swig/saml-2.0/saml2_encrypted_element.i | 32 + swig/saml-2.0/saml2_evidence.i | 32 + swig/saml-2.0/saml2_key_info_confirmation_data.i | 32 + swig/saml-2.0/saml2_name_id.i | 37 ++ swig/saml-2.0/saml2_one_time_use.i | 33 ++ swig/saml-2.0/saml2_proxy_restriction.i | 35 ++ swig/saml-2.0/saml2_statement_abstract.i | 32 + swig/saml-2.0/saml2_subject.i | 88 +++ swig/saml-2.0/saml2_subject_confirmation.i | 89 +++ swig/saml-2.0/saml2_subject_confirmation_data.i | 37 ++ swig/saml-2.0/saml2_subject_locality.i | 34 ++ swig/saml-2.0/samlp2_artifact_resolve.i | 124 ++++ swig/saml-2.0/samlp2_artifact_response.i | 160 +++++ swig/saml-2.0/samlp2_assertion_idrequest.i | 124 ++++ swig/saml-2.0/samlp2_attribute_query.i | 154 +++++ swig/saml-2.0/samlp2_authn_query.i | 155 +++++ swig/saml-2.0/samlp2_authn_request.i | 212 +++++++ swig/saml-2.0/samlp2_authz_decision_query.i | 169 ++++++ swig/saml-2.0/samlp2_extensions.i | 32 + swig/saml-2.0/samlp2_idp_entry.i | 35 ++ swig/saml-2.0/samlp2_idp_list.i | 47 ++ swig/saml-2.0/samlp2_logout_request.i | 168 ++++++ swig/saml-2.0/samlp2_manage_name_id_request.i | 180 ++++++ swig/saml-2.0/samlp2_name_id_mapping_request.i | 179 ++++++ swig/saml-2.0/samlp2_name_id_mapping_response.i | 177 ++++++ swig/saml-2.0/samlp2_name_id_policy.i | 38 ++ swig/saml-2.0/samlp2_request_abstract.i | 65 +++ swig/saml-2.0/samlp2_requested_authn_context.i | 35 ++ swig/saml-2.0/samlp2_response.i | 149 +++++ swig/saml-2.0/samlp2_scoping.i | 48 ++ swig/saml-2.0/samlp2_status.i | 61 ++ swig/saml-2.0/samlp2_status_code.i | 47 ++ swig/saml-2.0/samlp2_status_detail.i | 32 + swig/saml-2.0/samlp2_status_response.i | 80 +++ swig/saml-2.0/samlp2_subject_query_abstract.i | 137 +++++ swig/saml-2.0/samlp2_terminate.i | 32 + 199 files changed, 15907 insertions(+), 232 deletions(-) commit 56c88d1921c3b05c0213d2a1321502b2290b0b6f Author: Nicolas Clapies Date: Tue Nov 15 18:00:36 2005 +0000 Little modif about SAML authentication verification lasso/id-wsf/wsf_profile.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) commit 65b121cb13308f8586cfacd50f12f5f48950c3e6 Author: Nicolas Clapies Date: Tue Nov 15 17:59:38 2005 +0000 Renamed lasso_data_service_need_user_interaction() to lasso_data_service_need_redirect_user(). lasso/id-wsf/data_service.c | 4 ++-- lasso/id-wsf/data_service.h | 4 ++-- swig/Lasso-wsf.i | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) commit a8219526dcaab297da858318654766cb908fd455 Author: Nicolas Clapies Date: Tue Nov 15 16:54:51 2005 +0000 Only add lasso_ds_* for id-wsf. lasso/extract_symbols.py | 2 +- lasso/extract_types.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 380cc7420ad014bca954301ba193cf1c2779065c Author: Nicolas Clapies Date: Tue Nov 15 11:23:58 2005 +0000 Added binding for user interaction in data service. swig/Lasso-wsf.i | 8 ++++++++ 1 file changed, 8 insertions(+) commit c4697fb3afc4890bf0c569e9ee2584d4283df961 Author: Nicolas Clapies Date: Tue Nov 15 11:19:38 2005 +0000 Added some user interaction support : lasso_data_service_need_user_interaction() sets soap response with a soap fault asking redirect request. lasso_data_service_get_redirect_request_url() retrieves the redirect request url. DataService raises a redirect request warning exception if a fault was found in soap response after a lasso_data_service_process_query_response_msg(). lasso/id-wsf/data_service.c | 109 ++++++++++++++++++++++++++++++++++++++++++-- lasso/id-wsf/data_service.h | 6 +++ 2 files changed, 111 insertions(+), 4 deletions(-) commit 0a511fc52d81dca59783e461f396832ddf499d52 Author: Nicolas Clapies Date: Tue Nov 15 11:14:30 2005 +0000 Added soap fault code server. lasso/xml/strings.h | 2 ++ 1 file changed, 2 insertions(+) commit 5a06692cf457228ba9b71873f89dc5bac107d68f Author: Nicolas Clapies Date: Tue Nov 15 11:10:26 2005 +0000 Fixed snippet type and name of Detail attribute. lasso/xml/soap_fault.c | 4 ++-- lasso/xml/soap_fault.h | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) commit 1bcc24132bf6ee6dfec94022c6288761270a46ee Author: Nicolas Clapies Date: Tue Nov 15 11:08:44 2005 +0000 Fixed snippet type of redirectURL from content to attribute. lasso/xml/is_redirect_request.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit de711ae1ead3d0827ef1965a36ddefdd13642081 Author: Nicolas Clapies Date: Tue Nov 15 11:06:58 2005 +0000 Check if a soap fault is found in response message. If no fault found, then set response. lasso/id-wsf/wsf_profile.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) commit 367d20203bdfef998b4f12bfcd41702f2fcf8f2c Author: Nicolas Clapies Date: Tue Nov 15 11:02:26 2005 +0000 Added a first soap fault code error. lasso/errors.c | 3 +++ lasso/errors.h | 2 ++ 2 files changed, 5 insertions(+) commit 252e652747d5af795a9ca40f0b0a8224c37ab79d Author: Nicolas Clapies Date: Tue Nov 15 11:01:17 2005 +0000 Added soap Detail element. lasso/xml/Makefile.am | 2 + lasso/xml/soap_detail.c | 128 ++++++++++++++++++++++++++++++++++++++++++++++++ lasso/xml/soap_detail.h | 66 +++++++++++++++++++++++++ 3 files changed, 196 insertions(+) commit 928b9db1c46435191284fdc3d3bc2f906191869c Author: Frederic Peters Date: Mon Nov 14 18:32:25 2005 +0000 SAML 2.0 string constants lasso/xml/strings.h | 88 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) commit b254b42aadae1a4119c50f5d1c9ae4aa87a6865b Author: Nicolas Clapies Date: Mon Nov 14 13:32:08 2005 +0000 Now discovery service includes a key value in credential added to disco:QueryResponse. lasso/id-wsf/discovery.c | 58 ++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 46 insertions(+), 12 deletions(-) commit cb113f451b12d5e2f85d779c4213e3a551e766ef Author: Frederic Peters Date: Sun Nov 13 22:46:36 2005 +0000 starting to commit SAML 2 changes; minor changes (and bugfix) to lasso_node_new_from_xmlNode as well as code to recreate SAML2 object from SAML2 query string. lasso/xml/private.h | 10 +++- lasso/xml/xml.c | 128 +++++++++++++++++++++++++++++++++++++++++++++------- 2 files changed, 119 insertions(+), 19 deletions(-) commit 269d9a00570f261c864ccb1f32f3a2770a7b47cd Author: Nicolas Clapies Date: Fri Oct 14 13:06:50 2005 +0000 Fixed signature template problem : now if metadata's service provider has AuthnRequestsSigned set to false and HTTP method is POST, then template is not added anymore to AuthnRequest xml message. lasso/id-ff/login.c | 4 ++++ 1 file changed, 4 insertions(+) commit c686a0e808947e5a0c5e78ef9f05bf5891416ed4 Author: Nicolas Clapies Date: Thu Oct 13 12:55:51 2005 +0000 Fixed optional param of processModifyMsg(). swig/Lasso-wsf.i | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit efd3be4eb8b223e9fb7d8fd9d418c993496b18d1 Author: Nicolas Clapies Date: Tue Oct 11 14:26:15 2005 +0000 Fixed getServiceWithProviderId method. lasso/id-wsf/discovery.h | 3 --- swig/Lasso-wsf.i | 3 --- 2 files changed, 6 deletions(-) commit 94527b4d11c58f206a29bd4aba46e7853cf25498 Author: Nicolas Clapies Date: Mon Oct 10 09:17:42 2005 +0000 Removed useless discovery method lasso_discovery_get_service_with_providerId(). Removed useless Swig binding of LassoWsfProfile class. lasso/id-wsf/discovery.c | 38 -------------------------------------- 1 file changed, 38 deletions(-) commit 7cc38a6688bd0f5b24e15e197e4e8a022ea24437 Author: Nicolas Clapies Date: Mon Oct 10 09:17:14 2005 +0000 Removed useless discovery method lasso_discovery_get_service_with_providerId(). Removed useless Swig binding of LassoWsfProfile class.lasso/id-wsf/discovery.c swig/Lasso-wsf.i | 92 ------------------------------------------------------ swig/inheritance.h | 3 +- 2 files changed, 1 insertion(+), 94 deletions(-) commit 241c19207b23552720c0148bbe80e3f93f75d960 Author: Frederic Peters Date: Thu Oct 6 17:24:55 2005 +0000 updating ignored files with new packages .cvsignore | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) commit 360a9dfb9f04f18037cbdf0a77ede21e7bdc783f Author: Frederic Peters Date: Thu Oct 6 17:24:55 2005 +0000 updating ignored files with new packages debian/.cvsignore | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) commit 90601942feb0112171b106ec93c6e989d1efc8f0 Author: Frederic Peters Date: Thu Oct 6 17:24:14 2005 +0000 remove old and never necessary debhelper generated files liblasso1.postinst.debhelper | 5 ----- liblasso1.postrm.debhelper | 5 ----- 2 files changed, 10 deletions(-) commit 6e02245a26d38601abfc97ef71827fd75361d629 Author: Frederic Peters Date: Thu Oct 6 17:24:14 2005 +0000 remove old and never necessary debhelper generated files debian/liblasso1.postinst.debhelper | 5 ----- debian/liblasso1.postrm.debhelper | 5 ----- 2 files changed, 10 deletions(-) commit e6fe5b5971e0dcdd545ae54e4312e2062ef5410e Author: Frederic Peters Date: Thu Oct 6 17:23:23 2005 +0000 new liblasso-java package control | 14 ++++++++++++++ liblasso-java.dirs | 1 + liblasso-java.files | 2 ++ rules | 4 +++- 4 files changed, 20 insertions(+), 1 deletion(-) commit b07684a828a7fe7715b45ac31db81b9c06fb86aa Author: Frederic Peters Date: Thu Oct 6 17:23:23 2005 +0000 new liblasso-java package debian/control | 14 ++++++++++++++ debian/liblasso-java.dirs | 1 + debian/liblasso-java.files | 2 ++ debian/rules | 4 +++- 4 files changed, 20 insertions(+), 1 deletion(-) commit 8413d2714f6529bd8b0fee73af12ac3e612fdabe Author: Frederic Peters Date: Thu Oct 6 15:16:59 2005 +0000 removed mono packages from build-depends control | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit fa3aa23ebc4d6a5efb764b517717d717cebd728a Author: Frederic Peters Date: Thu Oct 6 15:16:59 2005 +0000 removed mono packages from build-depends debian/control | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 34a3df4e9a4960b9206e3e8cf25931f46975fca7 Author: Frederic Peters Date: Thu Oct 6 15:16:39 2005 +0000 updated debian changelog with uploaded packages. changelog | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) commit 31ad7aa5f73429dc7b5556aab4afcf568ea38114 Author: Frederic Peters Date: Thu Oct 6 15:16:39 2005 +0000 updated debian changelog with uploaded packages. debian/changelog | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) commit 7d6a2608521eed4318ba30334f2198bdd7021a2b Author: Frederic Peters Date: Thu Oct 6 15:16:16 2005 +0000 don't build wsf; touch swig files so they are not rebuilt even if swig is detected. rules | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit 9b88ad649af831e1cc6fc1bdbbee6739481a3aa3 Author: Frederic Peters Date: Thu Oct 6 15:16:16 2005 +0000 don't build wsf; touch swig files so they are not rebuilt even if swig is detected. debian/rules | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit 2ae56be7dd4898684cc1805bf138dced2fa4cfb0 Author: Frederic Peters Date: Thu Oct 6 15:15:44 2005 +0000 updated FSF address copyright | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 75bbcf70ebd28c24196b4a53ab32624c76aa9c58 Author: Frederic Peters Date: Thu Oct 6 15:15:44 2005 +0000 updated FSF address debian/copyright | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 4ad3abe1ab75f23de645b95d45f6f2718a95463e Author: Nicolas Clapies Date: Thu Oct 6 15:05:42 2005 +0000 Added binding to set more than one security mecanism authentication in DiscoDescription. swig/Lasso-wsf-disco.i | 8 ++++++++ 1 file changed, 8 insertions(+) commit 2b247d80b9428b78f0adbf603c7ada5172f2cf53 Author: Nicolas Clapies Date: Thu Oct 6 15:03:56 2005 +0000 Added check by AP if it wants X509 authentication of SP. Does not work yet, need to fix retrieving public key from credential before. lasso/id-wsf/data_service.c | 6 ++---- lasso/id-wsf/wsf_profile.c | 32 +++++++++++++++++++++++++++----- lasso/id-wsf/wsf_profile_private.h | 2 ++ 3 files changed, 31 insertions(+), 9 deletions(-) commit 9a139b11a6e93645d751f44828acc8c434ef427d Author: Nicolas Clapies Date: Thu Oct 6 15:01:01 2005 +0000 Set server attribute in LassoPersonalProfileService lasso/id-wsf/personal_profile_service.c | 1 + 1 file changed, 1 insertion(+) commit 57baac4a4c95231a21eb5984fa988eecf12c9d31 Author: Nicolas Clapies Date: Thu Oct 6 13:42:54 2005 +0000 Added support of principal state : now it is possible a SP informs an AP if principal is considered to be online or not. To tell principal is online, just add a call to lasso_wsf_profile_set_principal_online() after lasso_data_service_init_query(), and offline a call to lasso_wsf_profile_set_principal_offline(). At AP, to known if principal is to be considered online just test if lasso_wsf_profile_principal_is_online() returns TRUE or FALSE. lasso/id-wsf/wsf_profile.c | 121 +++++++++++++++++++++++++++- lasso/id-wsf/wsf_profile.h | 9 +++ lasso/xml/soap_binding_processing_context.c | 2 + lasso/xml/soap_binding_processing_context.h | 1 + lasso/xml/strings.h | 9 ++- swig/Lasso-wsf.i | 26 +++++- 6 files changed, 161 insertions(+), 7 deletions(-) commit c74c9be1e0c94f533d71379e567970c74ddd7b24 Author: Nicolas Clapies Date: Wed Oct 5 16:02:12 2005 +0000 A first attempt to include a KeyInfo in credential. lasso/id-wsf/discovery.c | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) commit be9f5312c0ea57c4cf34266be5da795a6d2094d9 Author: Nicolas Clapies Date: Wed Oct 5 16:01:13 2005 +0000 Verify if a saml security authentication is available. lasso/id-wsf/data_service.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 1182c5d861f948f1745bedef85e395707b148aad Author: Nicolas Clapies Date: Wed Oct 5 15:59:59 2005 +0000 Added LassoDsKeyInfo oject. It allows to add it to LassoSamlSubjectConfirmation object. lasso/xml/Makefile.am | 2 + lasso/xml/ds_key_info.c | 98 +++++++++++++++++++++++++++++++++++ lasso/xml/ds_key_info.h | 70 +++++++++++++++++++++++++ lasso/xml/saml_subject_confirmation.c | 5 ++ lasso/xml/saml_subject_confirmation.h | 2 + lasso/xml/strings.h | 4 ++ lasso/xml/xml.c | 2 + 7 files changed, 183 insertions(+) commit 365f560716fbfc22932909ee24f60ade81be8e45 Author: Frederic Peters Date: Wed Oct 5 11:50:37 2005 +0000 don't patch a lasso_wrap.c that was not just generated by swig. php/Makefile.am | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 8925affa1f3896e534b4bf11237eedb21bc1ba89 Author: Frederic Peters Date: Wed Oct 5 11:48:20 2005 +0000 no session on idp -> requestdenied -> removing no longer valid session on sp. lasso/id-ff/logout.c | 3 +++ 1 file changed, 3 insertions(+) commit 2c7c3b6d5108e5bfe84d37cb502b0bd1e6482311 Author: Frederic Peters Date: Wed Oct 5 11:46:19 2005 +0000 added error string for LASSO_LOGOUT_ERROR_REQUEST_DENIED (...) lasso/errors.c | 2 ++ 1 file changed, 2 insertions(+) commit d478d84934c6f10083c121f669bb005f6cdd0250 Author: Frederic Peters Date: Tue Oct 4 08:07:54 2005 +0000 handle new error code swig/Lasso.i | 1 + 1 file changed, 1 insertion(+) commit d876cf4cc7296ae90cd908eb273c4d482ba061c6 Author: Frederic Peters Date: Tue Oct 4 08:06:36 2005 +0000 returns LASSO_LOGOUT_ERROR_REQUEST_DENIED if appropriate. lasso/errors.h | 1 + lasso/id-ff/logout.c | 3 +++ 2 files changed, 4 insertions(+) commit 036a066224fb7cd9ac0c7d15114eeec2057f9b1c Author: Nicolas Clapies Date: Mon Oct 3 07:17:10 2005 +0000 Fixed the way getting description in lasso_data_service_init_query(). lasso/id-wsf/data_service.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) commit 3e0ddb0ea586c132d94e351df91dc26399c259e8 Author: Nicolas Clapies Date: Fri Sep 30 16:07:20 2005 +0000 A little comment to note that some code is needed to add KeyInfo in Assertion when returning it to SP from IDP / Disco service. lasso/id-wsf/discovery.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 3fafefe7ded8cb006a33be5bc642502d1087c7c4 Author: Nicolas Clapies Date: Fri Sep 30 16:05:31 2005 +0000 Added private function lasso_wsf_profile_has_saml_authentication() to know if a saml authentication mecanism exists in current description. lasso/id-wsf/wsf_profile.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) commit 8d7f62b5bfc5c8e415d6210d02128bef7262a03b Author: Nicolas Clapies Date: Fri Sep 30 15:55:13 2005 +0000 lasso_discovery_build_credential() adds ConfirmationMethod element. lasso/id-wsf/discovery.c | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) commit 003e236f7e7af1231baf1e2440c526c7d54f03c6 Author: Nicolas Clapies Date: Fri Sep 30 15:53:16 2005 +0000 Updated comments. lasso/id-wsf/wsf_profile.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) commit 3321f04261c707021e821dc0e886ba2ee603c55a Author: Nicolas Clapies Date: Fri Sep 30 13:21:58 2005 +0000 Added reference binding when signing soap messages. lasso/id-wsf/wsf_profile.c | 110 +++++++++++++++++++++++++++++++++++++-------- 1 file changed, 91 insertions(+), 19 deletions(-) commit cdf28e43249ec938250d12ac8c377e20289e2a48 Author: Nicolas Clapies Date: Fri Sep 30 09:29:50 2005 +0000 Updated data service with service_type parameter. lasso/id-wsf/data_service.c | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) commit 744d4f0be43103c6327a3f7bdb784018131bded8 Author: Nicolas Clapies Date: Fri Sep 30 09:25:18 2005 +0000 Added a g_object_ref on private attribute description in lasso_wsf_profile_set_description(). lasso/id-wsf/wsf_profile.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 93a99e8034aaccb7f148b61ce42c5b47215b33f7 Author: Nicolas Clapies Date: Fri Sep 30 09:01:49 2005 +0000 If a service found in server object, retrieve needed description depending on an optional security mechanism id.lasso/id-wsf/data_service.c lasso/id-wsf/discovery.c | 34 ++++---- lasso/id-wsf/discovery.h | 6 -- lasso/id-wsf/wsf_profile.c | 162 +++++++++++++++++++++++-------------- lasso/id-wsf/wsf_profile.h | 4 +- lasso/id-wsf/wsf_profile_private.h | 4 +- swig/Lasso-wsf.i | 2 +- 6 files changed, 121 insertions(+), 91 deletions(-) commit c3e894fd163d729a75a2279e210e8267c597288b Author: Frederic Peters Date: Thu Sep 29 23:11:13 2005 +0000 the "how could I not curse those adding files without checking them in Makefile.am?" commit. swig/Makefile.am | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 2e76ca0a84a2708fcb1381f7d6538d92450d4d74 Author: Frederic Peters Date: Thu Sep 29 22:56:07 2005 +0000 I'm so glad for tests; another emergency change. lasso/id-wsf/Makefile.am | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit fb75e3f45f3e77710c018a5fb2dfd6126bd0dcfe Author: Frederic Peters Date: Thu Sep 29 22:39:28 2005 +0000 last emergency fix: wsf_profile_private.h must be included in .tar.gz lasso/id-wsf/Makefile.am | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 8653f89a12cd37c3ec47bb97f90cea29bf6a44d7 Author: Frederic Peters Date: Thu Sep 29 22:26:34 2005 +0000 updated ChangeLog for 0.6.3 ChangeLog | 839 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 839 insertions(+) commit d740e7a8ac00210f380c04cb47ada31d3db2d93c Author: Frederic Peters Date: Thu Sep 29 22:24:08 2005 +0000 new upstream release changelog | 11 +++++++++++ 1 file changed, 11 insertions(+) commit 4c391c9dde89a7d62705b4620225adc2232b1763 Author: Frederic Peters Date: Thu Sep 29 22:24:08 2005 +0000 new upstream release debian/changelog | 11 +++++++++++ 1 file changed, 11 insertions(+) commit 8636a4b3e42e179fed4b23bc15fa2a39b3c7de86 Author: Frederic Peters Date: Thu Sep 29 22:22:20 2005 +0000 updated news and doap.rdf with 0.6.3 release data NEWS | 11 +++++++++++ doap.rdf | 5 ++++- 2 files changed, 15 insertions(+), 1 deletion(-) commit 874e3bb01823354c71e8c94582a8de08909e9352 Author: Frederic Peters Date: Thu Sep 29 16:00:36 2005 +0000 fixed typo in docstring lasso/id-wsf/discovery.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 27635c4f217b378998bf2a84aa8b6f6e39bb3bc5 Author: Frederic Peters Date: Thu Sep 29 12:41:57 2005 +0000 minor automated changes docs/reference/tmpl/data_service.sgml | 15 +++++++++++++++ docs/reference/tmpl/discovery.sgml | 13 +++++++++++-- docs/reference/tmpl/name_identifier_mapping.sgml | 1 - docs/reference/tmpl/name_registration.sgml | 1 - 4 files changed, 26 insertions(+), 4 deletions(-) commit 28d8ff0ee1709434755c2fd2d27a971b7db546b2 Author: Frederic Peters Date: Thu Sep 29 12:41:22 2005 +0000 removed c# dir from distribution Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit b15a7a8e56eeb4897807e9bd166a2c19d77f96c7 Author: Frederic Peters Date: Wed Sep 28 10:06:24 2005 +0000 security mech id is optional swig/Lasso-wsf.i | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit b882e4ba863bec881209945c53dc431756da0ae8 Author: Nicolas Clapies Date: Wed Sep 28 08:50:45 2005 +0000 Fixed local variable declaration. lasso/id-wsf/wsf_profile.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 4bec2d802a03f9714ced11d800e0e0b67b999a37 Author: Nicolas Clapies Date: Wed Sep 28 08:14:31 2005 +0000 Uncomment lasso_wsf_profile_build_soap_response_msg() in lasso_discovery_build_response_msg(). lasso/id-wsf/discovery.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 75a655fb66055dd3542e92b19b772bfd97328f7d Author: Frederic Peters Date: Wed Sep 28 07:25:46 2005 +0000 80 cols for docstrings lasso/id-wsf/discovery.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) commit 0ab710cbc8e71587bc23e9e173284918574774e0 Author: Nicolas Clapies Date: Wed Sep 28 06:57:19 2005 +0000 Added x509 certificate file tests. lasso/id-wsf/wsf_profile.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) commit 57c039a0416e6f5030fc1c3169751c4add31b2e8 Author: Nicolas Clapies Date: Wed Sep 28 06:57:04 2005 +0000 Added private function lasso_wsf_profile_get_fault(). lasso/id-wsf/wsf_profile_private.h | 3 +++ 1 file changed, 3 insertions(+) commit 4c3d7d115cd5bf8305f54692d48010cecd8c408f Author: Nicolas Clapies Date: Tue Sep 27 21:37:31 2005 +0000 Added a first support of soap binding Fault wsf response. lasso/id-wsf/discovery.c | 24 ++++++++++++++++-------- lasso/id-wsf/wsf_profile.c | 45 ++++++++++++++++++++++++++++++++++++--------- 2 files changed, 52 insertions(+), 17 deletions(-) commit e5994968e16fd1e1f3a557124043db8b4f265b93 Author: Nicolas Clapies Date: Tue Sep 27 21:36:26 2005 +0000 Added soap Fault element. lasso/xml/Makefile.am | 2 + lasso/xml/soap_fault.c | 133 +++++++++++++++++++++++++++++++++++++++++++++++++ lasso/xml/soap_fault.h | 71 ++++++++++++++++++++++++++ 3 files changed, 206 insertions(+) commit 00da015d6bae67bc8eb1f4b7d9d641d84e063f2f Author: Frederic Peters Date: Tue Sep 27 17:49:19 2005 +0000 disabled mcs test and updated version to 0.6.3 configure.ac | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit c6abf35401a2ca73839fa3e4ff0612dbdd06005d Author: Frederic Peters Date: Tue Sep 27 16:02:48 2005 +0000 swig files were split, dependencies needed to be updated java/Makefile.am | 5 ++--- perl/Makefile.am | 4 ++-- php/Makefile.am | 4 ++-- python/Makefile.am | 4 ++-- 4 files changed, 8 insertions(+), 9 deletions(-) commit 8d88b9ea3166990cc6c2b6800b172d7e1ddb8e5c Author: Frederic Peters Date: Tue Sep 27 15:49:06 2005 +0000 fixed spelling docs/reference/tmpl/login.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit e8aa89ba952c06dff2af8a40e7fe5db5e4be0b06 Author: Frederic Peters Date: Tue Sep 27 15:43:28 2005 +0000 acknowledge new lasso_sec_ category, only used for wsf. lasso/extract_symbols.py | 3 ++- lasso/extract_types.py | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) commit 9a2c27ca6463dacb218395c5a4493fefd3c3fbe7 Author: Frederic Peters Date: Tue Sep 27 11:29:53 2005 +0000 fixed typo docs/lasso-book/liberty-architecture.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit a029d8cc19ef333df1ffdeafb46df23582a4b56b Author: Nicolas Clapies Date: Tue Sep 27 08:50:09 2005 +0000 Added missing wsf_profile_private.h. fixed error while attempting to include non existing private header discovery_private.h lasso/id-wsf/discovery.c | 1 - lasso/id-wsf/wsf_profile_private.h | 40 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) commit adcf9be382de211a641b658212eeeed7850d0720 Author: Nicolas Clapies Date: Tue Sep 27 08:08:04 2005 +0000 Updated binding for new optional security mecanism parameter. swig/Lasso-wsf.i | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) commit b9f9d480804ec50f27a0cc82e997ca5443fbad82 Author: Nicolas Clapies Date: Tue Sep 27 08:07:10 2005 +0000 Discovery and DataSerivice can pass X509 authentication mecanism if needed. lasso/id-wsf/data_service.c | 12 +++++------- lasso/id-wsf/data_service.h | 2 +- lasso/id-wsf/discovery.c | 33 +++++++++++++++++++++++++-------- lasso/id-wsf/discovery.h | 30 ++++++++++++++---------------- 4 files changed, 45 insertions(+), 32 deletions(-) commit 331dd328d542bcfd8c8006048b1dc84cb4b9076b Author: Nicolas Clapies Date: Tue Sep 27 07:57:35 2005 +0000 Added X509 authentication mecanism. lasso/id-wsf/wsf_profile.c | 403 ++++++++++++++++++++++++++++++++++++++++----- lasso/id-wsf/wsf_profile.h | 17 +- 2 files changed, 370 insertions(+), 50 deletions(-) commit f0bfe0bff4f4b8994a437d47715b593820cfb4d2 Author: Nicolas Clapies Date: Mon Sep 26 15:02:52 2005 +0000 Added private method lasso_provider_get_public_key() to get public key info. lasso/id-ff/provider.c | 6 ++++++ lasso/id-ff/providerprivate.h | 1 + 2 files changed, 7 insertions(+) commit b198dcdfe4cf956c9bdf92529a1b421469734a79 Author: Nicolas Clapies Date: Tue Sep 20 08:17:11 2005 +0000 Added private method. lasso/id-wsf/data_service_private.h | 2 ++ 1 file changed, 2 insertions(+) commit e4d1c1aff87570c08f0dd67fa46e53f2d047352e Author: Nicolas Clapies Date: Tue Sep 20 08:16:41 2005 +0000 Ordered methods. lasso/id-wsf/wsf_profile.c | 63 +++++++++++++++++++++++----------------------- 1 file changed, 31 insertions(+), 32 deletions(-) commit bc6c852e6319e69364aabe76acabfdb98317babe Author: Nicolas Clapies Date: Tue Sep 20 08:14:26 2005 +0000 lasso_data_service_add_credential() is not a public method. lasso/id-wsf/data_service.h | 3 --- 1 file changed, 3 deletions(-) commit 4acc84afd4affe7e4a3f820e8a8a31267d40794e Author: Nicolas Clapies Date: Tue Sep 20 08:08:12 2005 +0000 lasso_discovery_build_credential() is not a plublic method. lasso/id-wsf/discovery.h | 3 --- 1 file changed, 3 deletions(-) commit 2e19abce78518cd8d8011232db11300a20690479 Author: Nicolas Clapies Date: Tue Sep 20 08:03:46 2005 +0000 lasso_discovery_build_credential() adds AuthenticationStatemet element in Assertion. lasso/id-wsf/discovery.c | 49 +++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 42 insertions(+), 7 deletions(-) commit 5ad90937cacd432153b7b5b651fa9378241053dd Author: Nicolas Clapies Date: Mon Sep 19 14:55:19 2005 +0000 Fixed code typing. lasso/id-wsf/data_service.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit afc8308cd94cac5e77499191e41e34c6bf42a155 Author: Nicolas Clapies Date: Mon Sep 19 14:41:55 2005 +0000 Added optional param security_mech_id for wsf methods. swig/Lasso-wsf.i | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) commit 3153eb85912e9bf9faecdac47adbed7ce2d4fa89 Author: Nicolas Clapies Date: Mon Sep 19 14:40:51 2005 +0000 First attempt to implement authentication security mechanism. Only SAML is implemented and it needs improvement. lasso/id-wsf/authentication.c | 6 +-- lasso/id-wsf/data_service.c | 75 ++++++++++++++++++++++++------ lasso/id-wsf/data_service.h | 11 +++-- lasso/id-wsf/discovery.c | 106 ++++++++++++++++++++++++++++++++++++------ lasso/id-wsf/discovery.h | 12 +++-- lasso/id-wsf/wsf_profile.c | 83 +++++++++++++++++++++++++++++++-- lasso/id-wsf/wsf_profile.h | 11 ++++- 7 files changed, 262 insertions(+), 42 deletions(-) commit c89eaaaa97bdfc964b6ba016852a5eb96b7641db Author: Nicolas Clapies Date: Mon Sep 19 14:16:34 2005 +0000 Added id attribute in Body element. lasso/xml/soap_body.c | 2 ++ lasso/xml/soap_body.h | 1 + 2 files changed, 3 insertions(+) commit 7992abfe075b59013e8b5e08f4e312426e13eabc Author: Nicolas Clapies Date: Mon Sep 19 14:15:38 2005 +0000 Fixed snippet definition of Credentials object. lasso/xml/disco_credentials.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 0c561057e3cd1eaf585f9feccac52d166a1a1fd6 Author: Nicolas Clapies Date: Mon Sep 19 14:14:50 2005 +0000 Added compilation of resource access statement. lasso/xml/Makefile.am | 2 ++ 1 file changed, 2 insertions(+) commit 1c642c96d777cfa72a4fde6da9c26b27fdfda1fd Author: Nicolas Clapies Date: Mon Sep 19 14:12:45 2005 +0000 Added security namespace for resource access statement. lasso/xml/strings.h | 3 +++ 1 file changed, 3 insertions(+) commit 29152bc3cfebe154762f062337b28724607aec07 Author: Nicolas Clapies Date: Mon Sep 19 14:11:57 2005 +0000 Added ResourceAccessStatement element from wsf Security. lasso/xml/sec_resource_access_statement.c | 115 ++++++++++++++++++++++++++++++ lasso/xml/sec_resource_access_statement.h | 70 ++++++++++++++++++ 2 files changed, 185 insertions(+) commit e4ce1e9a3f4201a7a86fd7dbf3a0588fcf4ab539 Author: Frederic Peters Date: Fri Sep 16 13:30:34 2005 +0000 getOfferings without parameters will return all of them lasso/id-ff/identity.c | 3 ++- swig/Lasso.i | 6 ++---- 2 files changed, 4 insertions(+), 5 deletions(-) commit aeffdf5d4e9fe79fca5c512e468de1b24a8c984c Author: Frederic Peters Date: Mon Sep 12 09:50:23 2005 +0000 disabled c# support for the time being configure.ac | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) commit c4b87247c1388dfff4026b9971e185f1fb731c88 Author: Frederic Peters Date: Mon Sep 12 09:50:01 2005 +0000 generation of lasso.types so it only includes wsf classes if wsf is compiled in. docs/reference/Makefile.am | 19 +++++++++++++++---- docs/reference/{lasso.types => lasso.types.in} | 5 +++++ 2 files changed, 20 insertions(+), 4 deletions(-) commit c1ce172568e7b3877ea7617cc31999badc5a2378 Author: Frederic Peters Date: Mon Sep 12 08:20:09 2005 +0000 updated java note README.JAVA | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit e22e52d6d9fcdb61e3d719d52f62398abd2e5fb1 Author: Frederic Peters Date: Sun Sep 11 22:52:28 2005 +0000 erroneously disabled symbols.sym lasso/Makefile.am | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) commit 930965e7f450a4855889fdb6412ca814e0051ef9 Author: Frederic Peters Date: Sun Sep 11 09:08:31 2005 +0000 possibility to register new dst services. docs/reference/lasso-sections.txt | 1 + lasso/id-wsf/data_service.c | 18 +++---------- lasso/id-wsf/data_service.h | 5 +++- lasso/xml/dst_modify.c | 13 ++++----- lasso/xml/dst_modify_response.c | 13 ++++----- lasso/xml/dst_query.c | 13 ++++----- lasso/xml/dst_query_response.c | 13 ++++----- lasso/xml/xml.c | 56 ++++++++++++++++++++++++++++++++++----- lasso/xml/xml.h | 4 +++ swig/Lasso.i | 5 ++++ 10 files changed, 88 insertions(+), 53 deletions(-) commit 27e9d0edcd1d0fb088bba0b2927ec06f45bac0b3 Author: Frederic Peters Date: Sat Sep 10 19:36:33 2005 +0000 data_service_init_query may be called without parameters. lasso/id-wsf/data_service.c | 9 ++++++++- lasso/xml/dst_query.c | 15 ++++++++++++--- lasso/xml/dst_query.h | 2 +- swig/Lasso-wsf.i | 8 ++++++-- 4 files changed, 27 insertions(+), 7 deletions(-) commit 196dd4f534580e4dee78580a112e3b01a6abf953 Author: Nicolas Clapies Date: Wed Sep 7 11:31:48 2005 +0000 lasso_data_service_get_answer() : verify response->Data is not NULL before accessing it. lasso/id-wsf/data_service.c | 4 ++++ 1 file changed, 4 insertions(+) commit 21c0f38dabea835eb55d2852592457aa49ba0369 Author: Nicolas Clapies Date: Wed Sep 7 09:06:26 2005 +0000 lasso_discovery_get_resource_offering_auto() : verify LASSO_WSF_PROFILE(discovery)->session is not NULL before looking for a resource offering. lasso/id-wsf/discovery.c | 4 ++++ 1 file changed, 4 insertions(+) commit 9d28276979c78d98031b842cc3879b84657b6f14 Author: Nicolas Clapies Date: Tue Sep 6 09:28:47 2005 +0000 Fixed typing code error. lasso/id-wsf/discovery.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 23335f9876b8a737a33e715960471eda6cb0e3e2 Author: Nicolas Clapies Date: Tue Sep 6 09:27:52 2005 +0000 Updated ignored java files. java/.cvsignore | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) commit 2657d1d7c2ad053fc8cce7dcd0c646d8f1defd5f Author: Nicolas Clapies Date: Tue Sep 6 09:27:23 2005 +0000 Removed XmlNode binding in swig. Not used anymore. swig/Lasso-wsf.i | 66 -------------------------------------------------------- 1 file changed, 66 deletions(-) commit 343304c8971ef90c01b9d80036d257f75db6e905 Author: Nicolas Clapies Date: Tue Sep 6 08:58:35 2005 +0000 Added lasso_discovery_get_services() method documentation docs/reference/lasso-sections.txt | 1 + lasso/id-wsf/discovery.c | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) commit fb67831a8b2576e06ec6306a13420b4411a6a8bf Author: Nicolas Clapies Date: Mon Sep 5 15:11:13 2005 +0000 Missing attributes in the last commit. lasso/id-wsf/discovery.c | 4 ++++ 1 file changed, 4 insertions(+) commit 7aa9f685bbd9f8a03df137b0888048ee4d8e1bcb Author: Nicolas Clapies Date: Mon Sep 5 15:00:59 2005 +0000 Added attributes provider_id and abstract_description in lassoDataService. lasso/id-wsf/data_service.h | 3 +++ swig/Lasso-wsf.i | 14 ++++++++++++++ swig/inheritance.h | 6 +++++- 3 files changed, 22 insertions(+), 1 deletion(-) commit 43cb497fd1e5bb03f587f7aca1551a66d056c3a7 Author: Nicolas Clapies Date: Mon Sep 5 13:47:23 2005 +0000 Added method lasso_discovery_get_services() : it returns a list of available services offering resource of principal. lasso/id-wsf/discovery.c | 42 ++++++++++++++++++++++++++++++++++++++++++ lasso/id-wsf/discovery.h | 2 ++ swig/Lasso-wsf.i | 4 ++++ 3 files changed, 48 insertions(+) commit 4b75a46a39859d3548b1e30eec62c8be28961b2b Author: Nicolas Clapies Date: Mon Sep 5 10:00:07 2005 +0000 Updated lasso_discovery_build_modify_response_msg() : now it sets status code to OK only if every remove entry are possible. lasso/id-ff/identity.c | 18 ++++++++++++++++++ lasso/id-wsf/discovery.c | 37 ++++++++++++++++++++++++++----------- lasso/id-wsf/identity.h | 2 ++ 3 files changed, 46 insertions(+), 11 deletions(-) commit ea4fea07caa8c194faebcadca48d88a02312b0db Author: Nicolas Clapies Date: Mon Aug 29 14:20:44 2005 +0000 Added lasso_discovery_get_service_with_providerId().. lasso/id-wsf/discovery.c | 39 +++++++++++++++++++++++++++++++++++++++ lasso/id-wsf/discovery.h | 4 ++++ swig/Lasso-wsf.i | 4 ++++ 3 files changed, 47 insertions(+) commit c277ec7c61db1b4b8e9669d0a160bb9fa27b6e00 Author: Nicolas Clapies Date: Mon Aug 29 12:54:28 2005 +0000 Splitted existing Lasso-wsf.i in several files for eache wsf namespace (disco, dst, sa, is, soap) swig/Lasso-wsf-disco.i | 1313 +++++++++++++++++++ swig/Lasso-wsf-dst.i | 670 ++++++++++ swig/Lasso-wsf-is.i | 784 +++++++++++ swig/Lasso-wsf-sa.i | 350 +++++ swig/Lasso-wsf-soap.i | 326 +++++ swig/Lasso-wsf.i | 3384 +----------------------------------------------- 6 files changed, 3483 insertions(+), 3344 deletions(-) commit c1453ec43f5ce5aba1e89d37af07817bb0b4f8a0 Author: Frederic Peters Date: Fri Aug 26 12:04:55 2005 +0000 check the query response is of the correct type lasso/id-wsf/data_service.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit 409e7660f02de8c8e630546a194fc91aefd6c6d8 Author: Frederic Peters Date: Thu Aug 25 15:35:37 2005 +0000 new modify things for LassoPersonalProfile swig/Lasso-wsf.i | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) commit 26c600fc4e4e04b7aa3d888043e1783cc8c85ca5 Author: Nicolas Clapies Date: Thu Aug 25 15:29:33 2005 +0000 complete last commit. lasso/id-wsf/data_service.c | 46 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) commit 987fb151d18609d82b0f1247be60629e054cc8b9 Author: Nicolas Clapies Date: Thu Aug 25 15:26:02 2005 +0000 Now an AP can process a Modify request and return an updated data resource to application. lasso/id-wsf/data_service.c | 10 +++++----- lasso/id-wsf/data_service.h | 4 +++- swig/Lasso-wsf.i | 5 +++++ 3 files changed, 13 insertions(+), 6 deletions(-) commit 3acc3c4cae718f781fda4ac1f69ecf978c744390 Author: Frederic Peters Date: Thu Aug 25 15:11:32 2005 +0000 added getAnswerForItemId binding swig/Lasso-wsf.i | 8 ++++++++ 1 file changed, 8 insertions(+) commit 154ca698230e832ed4c47c6f3d544bf20bd17e4f Author: Frederic Peters Date: Thu Aug 25 14:23:08 2005 +0000 restore prefix and href for dst:Modify and dst:ModifyResponse lasso/xml/dst_modify.c | 33 ++++++++++++++++++++++++++++----- lasso/xml/dst_modify.h | 1 + lasso/xml/dst_modify_response.c | 33 ++++++++++++++++++++++++++++----- lasso/xml/dst_modify_response.h | 1 + lasso/xml/dst_query.h | 1 + lasso/xml/dst_query_response.h | 1 + 6 files changed, 60 insertions(+), 10 deletions(-) commit 86e8e423b420d1bc857be7c494a1c4adf95df401 Author: Nicolas Clapies Date: Thu Aug 25 12:52:49 2005 +0000 Updated lasso_data_service_init_modify(). Now it takes a select (a String type) and a String xml as parameters. lasso/id-wsf/data_service.c | 8 ++++++-- lasso/id-wsf/data_service.h | 2 +- swig/Lasso-wsf.i | 11 ++--------- swig/Lasso.i | 13 +++++++++++++ 4 files changed, 22 insertions(+), 12 deletions(-) commit d3921d39804ffc8eb62bc288142d61c039c46fd0 Author: Frederic Peters Date: Thu Aug 25 11:54:13 2005 +0000 added lasso_data_service_get_answer_for_item_id docs/reference/lasso-sections.txt | 1 + 1 file changed, 1 insertion(+) commit 918a44f285b5139ab49b29df4933ca3d84027de3 Author: Frederic Peters Date: Thu Aug 25 11:49:55 2005 +0000 added missing ; lasso/id-wsf/data_service.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 921b920f624d942a0ade1db3606122ad94c052f8 Author: Frederic Peters Date: Thu Aug 25 11:48:30 2005 +0000 added lasso_data_service_get_answer_for_item_id lasso/id-wsf/data_service.c | 39 +++++++++++++++++++++++++++++++++++++++ lasso/id-wsf/data_service.h | 17 ++++++++++------- 2 files changed, 49 insertions(+), 7 deletions(-) commit f1af9106bfb76afba463fe46d112a8d0a76dcf73 Author: Frederic Peters Date: Thu Aug 25 09:43:50 2005 +0000 marks public structure memebers in LassoDiscovery and LassoDataService lasso/id-wsf/data_service.h | 1 + lasso/id-wsf/discovery.h | 1 + 2 files changed, 2 insertions(+) commit 8dfeb4e77e2a49e5a126203f32ecb4d06c8f45ec Author: Frederic Peters Date: Thu Aug 25 09:41:45 2005 +0000 continuing on disco example, use the service to retrieve principal name. docs/reference/tmpl/data_service.sgml | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) commit 11920449441a5525126d06b685ce434666f41afb Author: Frederic Peters Date: Thu Aug 25 09:38:58 2005 +0000 explicit cases where item_id may be NULL. lasso/id-wsf/data_service.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit f382eb9dbb2bb9d84ac3efedf2d6971316369c2e Author: Nicolas Clapies Date: Thu Aug 25 09:18:39 2005 +0000 Replaced ProfileService.java by DataService.java java/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 7b8936409c17d35da05a7d0e6d9a1cdbd5321a67 Author: Frederic Peters Date: Thu Aug 25 08:52:08 2005 +0000 add_query_item must checks the query has been created. lasso/id-wsf/data_service.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) commit f9fea16807166b06e1c551691303679e160b00e0 Author: Frederic Peters Date: Thu Aug 25 08:40:07 2005 +0000 Do not use SWIG_UnknownError but SWIG_RuntimeError so it is translated to a catchable exception in Java. Use SWIG_ValueError for value errors (things like invalid args) swig/Lasso.i | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) commit 21fbfdfe0afd0637747e1399cecc4ed1e41f0b6a Author: Frederic Peters Date: Thu Aug 25 07:56:15 2005 +0000 it is no longer possible to add providers with unknown public keys python/tests/profiles_tests.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit d1327ad5de86b5d2ed0ee461d4ff1fa9bdd88c90 Author: Frederic Peters Date: Thu Aug 25 07:41:58 2005 +0000 moved private_data erroneously placed in class to object; this breaks ABI for classes inheriting from LassoDeferation; nobody does that, ignoring. lasso/id-ff/defederation.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 97db05538c70170ed3a8346b6e4898ecd7a249cf Author: Frederic Peters Date: Thu Aug 25 07:33:47 2005 +0000 last bit of LassoProfileService got renamed swig/Lasso-wsf.i | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 4adc5b5847659c92c028eb6dee4841c8a14ec8ef Author: Frederic Peters Date: Thu Aug 25 07:19:27 2005 +0000 renamed ProfileService to DataService docs/reference/lasso-sections.txt | 34 ++--- docs/reference/lasso.sgml | 6 +- docs/reference/tmpl/data_service.sgml | 99 +++++++++++++ docs/reference/tmpl/defederation.sgml | 3 + docs/reference/tmpl/federation.sgml | 3 + docs/reference/tmpl/identity.sgml | 3 + docs/reference/tmpl/lib_authn_request.sgml | 3 + docs/reference/tmpl/login.sgml | 3 + docs/reference/tmpl/logout.sgml | 3 + docs/reference/tmpl/name_identifier_mapping.sgml | 3 + docs/reference/tmpl/name_registration.sgml | 3 + docs/reference/tmpl/node.sgml | 3 + docs/reference/tmpl/profile.sgml | 3 + docs/reference/tmpl/provider.sgml | 3 + docs/reference/tmpl/saml_name_identifier.sgml | 3 + docs/reference/tmpl/server.sgml | 7 +- docs/reference/tmpl/session.sgml | 3 + docs/reference/tmpl/strings.sgml | 3 + lasso/Makefile.am | 5 +- lasso/id-ff/providerprivate.h | 2 +- lasso/id-wsf/Makefile.am | 6 +- lasso/id-wsf/{profile_service.c => data_service.c} | 90 ++++++------ lasso/id-wsf/{profile_service.h => data_service.h} | 60 ++++---- ...le_service_private.h => data_service_private.h} | 8 +- lasso/id-wsf/discovery.c | 12 +- lasso/id-wsf/discovery.h | 4 +- lasso/id-wsf/personal_profile_service.c | 6 +- lasso/id-wsf/personal_profile_service.h | 6 +- swig/Lasso-wsf.i | 154 ++++++++++----------- 29 files changed, 345 insertions(+), 196 deletions(-) commit 90a540a3825f24f5a021d85c0c03b7930e99c7e3 Author: Frederic Peters Date: Thu Aug 25 07:15:09 2005 +0000 include xmlsec errors.h header to get function declaration; a return in the middle of load_public_key got a FALSE argument. lasso/id-ff/provider.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 02bddf8b8569aa0ba5bae119b907c72637ca480e Author: Frederic Peters Date: Wed Aug 24 16:53:10 2005 +0000 documentation for discovery docs/reference/tmpl/discovery.sgml | 188 +++++++++++++++++++++++++++++++++++++ 1 file changed, 188 insertions(+) commit 1601b3ecc5229ad6d371d5dd2b48efd0cccbceef Author: Frederic Peters Date: Wed Aug 24 16:28:46 2005 +0000 don't output xmlsec errors when trying to get a working public key but fails with a message if it can't find a key. lasso/id-ff/provider.c | 17 +++++++++++++---- lasso/id-ff/server.c | 10 ++++++++-- 2 files changed, 21 insertions(+), 6 deletions(-) commit 6f6b0d66c10bc2be861fa1dddaaa26c3470178c7 Author: Frederic Peters Date: Wed Aug 24 15:44:53 2005 +0000 doc for discovery and profile_service docs/reference/lasso-sections.txt | 48 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) commit 1a54ae6c1ece59295d17504d340de7d1093cd29d Author: Nicolas Clapies Date: Wed Aug 24 15:25:23 2005 +0000 Updated swig binding for latest id-wsf udpates. swig/Lasso-wsf.i | 57 +++++++++----------------------------------------------- 1 file changed, 9 insertions(+), 48 deletions(-) commit d3a5f5228dfb80664a68a32232601f87292f0a68 Author: Nicolas Clapies Date: Wed Aug 24 15:23:18 2005 +0000 Removed lasso_personal_profile_service_init_modify(). lasso/id-wsf/personal_profile_service.c | 16 ---------------- 1 file changed, 16 deletions(-) commit cec31c9bbb2353c919cbaba5f74dfcbca26b05d8 Author: Nicolas Clapies Date: Wed Aug 24 15:22:06 2005 +0000 Removed prefix and href in lasso_profile_service_init_modify, lasso_profile_service_process_modify_msg, lasso_profile_service_process_response_msg, lasso_profile_service_validate_modify lasso/id-wsf/profile_service.c | 115 +++++++++++++++++------------------------ 1 file changed, 48 insertions(+), 67 deletions(-) commit b7b6579eb0482500b43ee797d99c86c908ba8e66 Author: Frederic Peters Date: Wed Aug 24 15:19:31 2005 +0000 don't check for remote provider id before checking for possible empty answer. lasso/id-ff/logout.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) commit 52311ca54daa2faab10fe369e341915634331fb5 Author: Nicolas Clapies Date: Wed Aug 24 15:04:02 2005 +0000 Removed prefix and href in lasso_profile_service_init_modify, lasso_profile_service_process_modify_msg lasso_profile_service_process_response_msg, lasso_profile_service_validate_modify lasso/id-wsf/profile_service.h | 37 +++++++++++-------------------------- 1 file changed, 11 insertions(+), 26 deletions(-) commit 405cf08741af8b8aaa581d64a3245bb73c29e874 Author: Nicolas Clapies Date: Wed Aug 24 14:58:46 2005 +0000 Removed lasso_discovery_new_from_dump, lasso_discovery_dump, lasso_discovery_add_resource_offering, lasso_discovery_init_query_full lasso/id-wsf/discovery.c | 60 ------------------------------------------------ lasso/id-wsf/discovery.h | 13 ----------- 2 files changed, 73 deletions(-) commit 32923fdf0e569f779db4d0067939a72a4742a859 Author: Frederic Peters Date: Wed Aug 24 14:54:55 2005 +0000 sync arg name in header file with real arg names lasso/id-ff/server.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 80e7259790130a2f1098e3d67248689eb8c42ded Author: Frederic Peters Date: Wed Aug 24 14:45:58 2005 +0000 documented api lasso/id-wsf/profile_service.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) commit 70cd0cb069b680ebb530d9a9219409090283ca37 Author: Frederic Peters Date: Wed Aug 24 13:51:38 2005 +0000 documented all discovery functions used by authentic / candle / unwind lasso/id-wsf/discovery.c | 97 +++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 84 insertions(+), 13 deletions(-) commit e485ccf3ca546a512ccfe8b5d1181156aa0b0970 Author: Frederic Peters Date: Wed Aug 24 13:43:56 2005 +0000 fixed add_requested_service_type declaration to match code lasso/id-wsf/discovery.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) commit c9eeee789691a8b5bee57b52faccb49fe1d744fb Author: Frederic Peters Date: Fri Aug 19 10:23:54 2005 +0000 tries various key format before giving up lasso/id-ff/provider.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) commit fb30438992e6f3020fbd420a50508553b977f3f4 Author: Frederic Peters Date: Tue Aug 16 14:03:19 2005 +0000 build_response_msg called while there was no connection will build a failure message. lasso/id-ff/logout.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) commit 8cb5e6957747a909616a1fd68931ff79e5478351 Author: Frederic Peters Date: Tue Aug 16 13:51:16 2005 +0000 check for remote_provider_id lasso/id-ff/logout.c | 4 ++++ 1 file changed, 4 insertions(+) commit e4a253cc03902f69a223342ad0ad5328a5286301 Author: Frederic Peters Date: Sun Aug 14 14:46:50 2005 +0000 reference correct identity header lasso/id-wsf/discovery.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit a2cf9a8c6668ef058496a72f166981336c13a4e6 Author: Frederic Peters Date: Sun Aug 14 12:00:16 2005 +0000 reinitialize assertion provider id list only on reset_provider_id_index lasso/id-ff/logout.c | 1 + lasso/id-ff/session.c | 26 ++++++++++++++++++++------ lasso/id-ff/sessionprivate.h | 2 ++ 3 files changed, 23 insertions(+), 6 deletions(-) commit 93d5911a373e5955fee0348cfe9ba2ed78836162 Author: Frederic Peters Date: Sun Aug 14 10:39:34 2005 +0000 counter providers that do not support any single logout; they are now skipped and a correct response is nevertheless sent to the originating provider lasso/id-ff/logout.c | 34 ++++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) commit f05a03a102e4f09ac63e7fbe1f337e963064ac53 Author: Frederic Peters Date: Sun Aug 14 10:38:41 2005 +0000 correctly reset list before rebuilding it lasso/id-ff/session.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) commit 639951fe8a072a18c74a5cdeb8fb98ce01fc8b5e Author: Frederic Peters Date: Sat Aug 13 17:36:36 2005 +0000 fixed comment lasso/id-ff/logout.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 1421b69fc48521872b1d2ba08aa6aeecd1042865 Author: Frederic Peters Date: Sat Aug 13 14:46:02 2005 +0000 functions got moved from id-ff/ to id-wsf/ lasso/id-wsf/identity.h | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) commit d159bcf80ebde89514c17a9c9e76aa399a5c6cc4 Author: Frederic Peters Date: Fri Aug 12 22:16:43 2005 +0000 identity/resourceoffering functions are now declared publically in id-wsf/ lasso/id-ff/identityprivate.h | 9 --------- 1 file changed, 9 deletions(-) commit 36997b0cedbdea0f6a3d3a0b3c7f2046405236aa Author: Frederic Peters Date: Fri Aug 12 22:16:07 2005 +0000 expose identity/resourceoffering functions to developer lasso/id-ff/identity.c | 1 + lasso/id-wsf/Makefile.am | 5 +++++ swig/Lasso.i | 33 +++++++++++++++++++++++++++++++-- 3 files changed, 37 insertions(+), 2 deletions(-) commit 8423a16027fb612798343924f5a6e032077570a7 Author: Frederic Peters Date: Fri Aug 12 20:35:28 2005 +0000 private profile service functions lasso/id-wsf/profile_service_private.h | 40 ++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) commit 290b82008089610c8efa23610d408db33a8c00df Author: Frederic Peters Date: Fri Aug 12 16:33:24 2005 +0000 following-up on PersonalProfileService cleaning; but I can't get getService to dynamically cast to that class :( swig/Lasso-wsf.i | 158 +++++++++++++++++++++++++++++++++---------------------- 1 file changed, 96 insertions(+), 62 deletions(-) commit b9bd0f06ee124888fca7929db4aca6eb7180f3f3 Author: Frederic Peters Date: Fri Aug 12 16:32:42 2005 +0000 return LassoPersonalProfileService from disco->getService if appropriate lasso/id-wsf/discovery.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) commit edfce42f46e06382f00890657bdd12e891efec53 Author: Frederic Peters Date: Fri Aug 12 16:32:05 2005 +0000 cleaned up PersonalProfileService lasso/id-wsf/personal_profile_service.c | 169 ++++++-------------------------- lasso/id-wsf/personal_profile_service.h | 39 +------- 2 files changed, 32 insertions(+), 176 deletions(-) commit 7e12708c9b54c6a676ce80a22352016a72046872 Author: Frederic Peters Date: Fri Aug 12 16:31:12 2005 +0000 cleaning and documenting profile service lasso/id-wsf/profile_service.c | 295 +++++++++-------------------------------- lasso/id-wsf/profile_service.h | 41 +++--- 2 files changed, 83 insertions(+), 253 deletions(-) commit b7a50d193065794306f1c5c037fcb9f193e9add4 Author: Frederic Peters Date: Fri Aug 12 15:02:54 2005 +0000 fixed lasso_profile_service_add_query_item so it accepts a item_id parameter (since they are mandatory once there is more than one). also allows init_query to specify item_id. this gives: service = disco.getService() service.initQuery('/pp:PP/pp:CommonName'), 'name') service.addQueryItem('/pp:PP/pp:MsgContact'), 'email') soap_answer = liberty.root.soap_call(service.msgUrl, service.msgBody) print service.getAnswer('/pp:PP/pp:CommonName') print service.getAnswer('/pp:PP/pp:MsgContact') lasso/id-wsf/profile_service.c | 106 ++++++++++++++++------------------------- lasso/id-wsf/profile_service.h | 4 +- lasso/xml/dst_query_item.c | 3 +- lasso/xml/dst_query_item.h | 2 +- swig/Lasso-wsf.i | 6 +-- swig/Lasso.i | 4 ++ 6 files changed, 53 insertions(+), 72 deletions(-) commit 6eba7b86f52b923330a4264cb022325e8dbcbc22 Author: Frederic Peters Date: Fri Aug 12 14:25:44 2005 +0000 API after the pp:query has been sent, server: service = lasso.ProfileService(server) service.processQueryMsg(soap_message) identity = get_identity_by_resource_id(service.request.resourceId) service.resourceData = identity.get_pp_view() service.buildResponseMsg() return service.msgBody client: service.processQueryResponseMsg(soap_answer) service.getAnswer() # or service.getAnswer('/pp:PP/pp:CommonName') lasso/id-wsf/discovery.c | 6 +- lasso/id-wsf/personal_profile_service.c | 4 +- lasso/id-wsf/profile_service.c | 152 +++++++++++++++++++++++++++++++- lasso/id-wsf/profile_service.h | 7 +- lasso/xml/dst_query.c | 33 +++++-- lasso/xml/dst_query_response.c | 34 +++++-- lasso/xml/xml.c | 3 +- swig/Lasso-wsf.i | 16 ++-- 8 files changed, 228 insertions(+), 27 deletions(-) commit 3d77fb20f40b5322433052f7e3dee653c4e9b18a Author: Frederic Peters Date: Fri Aug 12 11:41:58 2005 +0000 idwsf/pp on the attribute provider side; sth like service = lasso.ProfileService(server) service.processQueryMsg(soap_message) identity = get_from(service.request.resourceId) service.resourceData = identity.convert_to_pp_xml() lasso/id-wsf/discovery.c | 16 +++++++-- lasso/id-wsf/personal_profile_service.c | 8 ++--- lasso/id-wsf/personal_profile_service.h | 3 -- lasso/id-wsf/profile_service.c | 61 +++++++++++++++++++++------------ lasso/id-wsf/profile_service.h | 13 +++---- swig/Lasso-wsf.i | 45 +++++++++++++++++------- swig/Lasso.i | 21 ++++++++++++ 7 files changed, 114 insertions(+), 53 deletions(-) commit 3e13d02bd59ac18358588bec074741d6b1d846e0 Author: Frederic Peters Date: Fri Aug 12 09:12:53 2005 +0000 first steps towards id-wsf/dst; something like this, in Python: service = disco.getService() service.initQuery('/pp:PP/pp:CommonName') service.buildRequestMsg() -> service.msgUrl and .msgBody lasso/id-wsf/discovery.c | 73 +++++++++++++++++-- lasso/id-wsf/discovery.h | 5 ++ lasso/id-wsf/personal_profile_service.c | 3 + lasso/id-wsf/profile_service.c | 124 ++++++++++++++++++++++++++++++-- lasso/id-wsf/profile_service.h | 13 ++-- swig/Lasso-wsf.i | 13 ++-- 6 files changed, 208 insertions(+), 23 deletions(-) commit cd708cc417c90b24f1d887375d0c1a1d79e294ab Author: Frederic Peters Date: Fri Aug 12 09:10:19 2005 +0000 added LASSO_ERROR_UNIMPLEMENTED error code lasso/errors.c | 2 ++ lasso/errors.h | 1 + swig/Lasso.i | 1 + 3 files changed, 4 insertions(+) commit 6725eb166c0609e6ea5b1421f458bde9346b2076 Author: Frederic Peters Date: Fri Aug 12 09:08:44 2005 +0000 disco:queryResponse missed namespace definition lasso/xml/disco_query_response.c | 1 + 1 file changed, 1 insertion(+) commit d75cc9a2a9459b0b773d882487bef1b5865e49c7 Author: Frederic Peters Date: Wed Aug 10 12:17:07 2005 +0000 disabled c# in debian apckage control | 14 -------------- rules | 6 +++--- 2 files changed, 3 insertions(+), 17 deletions(-) commit 445ec210a533270a3bc997eb42df7e77c917cb1f Author: Frederic Peters Date: Wed Aug 10 12:17:07 2005 +0000 disabled c# in debian apckage debian/control | 14 -------------- debian/rules | 6 +++--- 2 files changed, 3 insertions(+), 17 deletions(-) commit 37e124af5d817b5da972fd30ab6fc24b06f48273 Author: Frederic Peters Date: Wed Aug 10 11:29:52 2005 +0000 return LASSO_LOGIN_ERROR_UNKNOWN_PRINCIPAL after unsuccessful logon lasso/errors.c | 2 ++ lasso/errors.h | 1 + lasso/id-ff/login.c | 4 ++++ swig/Lasso.i | 3 ++- 4 files changed, 9 insertions(+), 1 deletion(-) commit 0730a7f612edbd49806891cb9b24d3c86eb60dfa Author: Frederic Peters Date: Tue Aug 9 15:17:58 2005 +0000 another id-wsf step, disco:query, looking up for resource offerings in identity lasso/id-ff/identity.c | 21 +++++++++++ lasso/id-ff/identityprivate.h | 1 + lasso/id-wsf/discovery.c | 85 +++++++++++++++++++++++++++++++++++++------ lasso/id-wsf/discovery.h | 6 ++- swig/Lasso-wsf.i | 11 ++++-- 5 files changed, 109 insertions(+), 15 deletions(-) commit 9d1fea3e356b5f2f086df2cca27169beb898335e Author: Frederic Peters Date: Tue Aug 9 14:13:33 2005 +0000 handle the case where logout request is done while there are no session; that means direct call to build_response_msg, creating a status: requestdenied. lasso/id-ff/logout.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) commit 830e11754a6bd75814194a27a0c654d2655c705d Author: Frederic Peters Date: Tue Aug 9 11:42:39 2005 +0000 disco.processQueryMsg now sets disco.resourceId lasso/id-wsf/discovery.c | 9 +++++++++ 1 file changed, 9 insertions(+) commit 4260c4a479754af7ff84ba32924e6def517c45a4 Author: Frederic Peters Date: Tue Aug 9 10:20:53 2005 +0000 new remove entry; correctly restore resource offerings from identity dump lasso/id-ff/identity.c | 10 +++++++++ lasso/id-wsf/discovery.c | 57 +++++++++++++++++++++++++++++++++++++++++++++++- lasso/id-wsf/discovery.h | 1 + swig/Lasso-wsf.i | 5 +++++ 4 files changed, 72 insertions(+), 1 deletion(-) commit b3c376e02f5f78c4718645a7bf56e6afe7d5322e Author: Frederic Peters Date: Tue Aug 9 07:31:01 2005 +0000 renamed crunch to build since it doesn't look like there is a need for an intermediate function for the moment. process remove entries. create correct answer (when everything goes ok, no support for failure yet) lasso/id-ff/identity.c | 29 +++++++++++++++++++++ lasso/id-ff/identityprivate.h | 1 + lasso/id-wsf/discovery.c | 59 +++++++++++++++++++++++++++++++++---------- lasso/id-wsf/discovery.h | 2 +- swig/Lasso-wsf.i | 4 +-- 5 files changed, 79 insertions(+), 16 deletions(-) commit 86456f1894a70f75dc732454cd2500dff627f900 Author: Frederic Peters Date: Mon Aug 8 18:51:21 2005 +0000 lasso_discovery_crunch_modify_msg() (waiting for another name) process disco modify insertEntries and adds them to active identity lasso/id-ff/identity.c | 50 ++++++++++++++++++++++++++++++++++++++++++- lasso/id-ff/identityprivate.h | 7 ++++++ lasso/id-wsf/discovery.c | 20 +++++++++++++++++ lasso/id-wsf/discovery.h | 1 + swig/Lasso-wsf.i | 6 +++++- 5 files changed, 82 insertions(+), 2 deletions(-) commit 755e15e4e9affd5298ac12f519e86b85a20be135 Author: Frederic Peters Date: Mon Aug 8 18:05:51 2005 +0000 sets ResourceId (or EncryptedResourceId) in LassoDiscovery object for easy usage lasso/id-wsf/discovery.c | 40 ++++++++++++++++++++++++++++++++++++++++ lasso/id-wsf/discovery.h | 3 +++ swig/Lasso-wsf.i | 23 +++++++++++++++++++++++ 3 files changed, 66 insertions(+) commit 199aa96e1740b732b02122a43ea02dded1ff989a Author: Frederic Peters Date: Mon Aug 8 15:48:52 2005 +0000 provide resource_offering as argument to not diverge too much from existing work lasso/id-wsf/discovery.c | 16 ++++------------ lasso/id-wsf/discovery.h | 2 +- swig/Lasso-wsf.i | 2 +- 3 files changed, 6 insertions(+), 14 deletions(-) commit 261cf967429715a467396209390a2e16c72c4320 Author: Frederic Peters Date: Mon Aug 8 15:19:13 2005 +0000 first function towards easy disco api lasso/id-ff/provider.c | 2 +- lasso/id-wsf/discovery.c | 98 +++++++++++++++++++++++++++++++++++++++++++++++- lasso/id-wsf/discovery.h | 3 ++ swig/Lasso-wsf.i | 6 +++ 4 files changed, 106 insertions(+), 3 deletions(-) commit f27e97a2361797894afa193563dc15408ebf7cd1 Author: Frederic Peters Date: Mon Aug 8 15:18:38 2005 +0000 get_assertions() called with NULL will return every assertions lasso/id-ff/session.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) commit c848b6b6f792fd586c29c860edd758128b9e8b68 Author: Frederic Peters Date: Mon Aug 8 11:31:17 2005 +0000 added session and identity to LassoWsfProfile, much like LassoProfile. Exposed them via SWIG inherited into LassoDiscovery object lasso/id-wsf/wsf_profile.c | 117 +++++++++++++++++++++++++++++++++++++++++++++ lasso/id-wsf/wsf_profile.h | 15 ++++++ swig/Lasso-wsf.i | 45 +++++++++++++++++ 3 files changed, 177 insertions(+) commit 6394077ec8400f3fa1a44a43226012eaff321162 Author: Nicolas Clapies Date: Fri Aug 5 16:01:08 2005 +0000 Fixed setting of attribute, int not NULL pointer. lasso/xml/soap_binding_ext_timeout.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 7d55bee3c1db0a5be473ad570bae61e1d24054fc Author: Nicolas Clapies Date: Fri Aug 5 15:59:26 2005 +0000 Added getXmlNode() method to LassoProfileService class. lasso/id-wsf/profile_service.c | 30 +++++++++ lasso/id-wsf/profile_service.h | 4 ++ swig/Lasso-wsf.i | 141 ++++++++++++++++++++++------------------- 3 files changed, 110 insertions(+), 65 deletions(-) commit e2aadc403979fcf5b36515bce79404ba591b78f5 Author: Nicolas Clapies Date: Fri Aug 5 15:30:01 2005 +0000 Added getEmail() method in LassoPersonalProfile class. lasso/id-wsf/personal_profile_service.c | 66 +++++++++++++++++++++++++++++++++ lasso/id-wsf/personal_profile_service.h | 2 + 2 files changed, 68 insertions(+) commit c4ae967731642fd56bac15c59d00c8389ea10d10 Author: Nicolas Clapies Date: Fri Aug 5 15:29:19 2005 +0000 Fixed som warning about char signedness. Added swig binding to getEmail() method in LassoPersonalProfile. swig/Lasso-wsf.i | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) commit ebdcb2068b5515a2a713504d4016406e3b85c795 Author: Nicolas Clapies Date: Thu Aug 4 22:23:24 2005 +0000 Added class LassoPersonalProfile. It allows to load a xml doc representing PP data and to process query requests. Need to complete WSC PP part. lasso/id-wsf/Makefile.am | 2 + lasso/id-wsf/personal_profile_service.c | 191 +++++++++++++++++++++++++++ lasso/id-wsf/personal_profile_service.h | 113 ++++++++++++++++ lasso/id-wsf/profile_service.c | 139 ++++++++++++++++---- lasso/id-wsf/profile_service.h | 14 ++ swig/Lasso-wsf.i | 223 +++++++++++++++++++++++++++++++- 6 files changed, 658 insertions(+), 24 deletions(-) commit 32acae5818f47ff6bf24183e10c74fa44640c2bd Author: Frederic Peters Date: Thu Aug 4 08:27:39 2005 +0000 fixed typo in error constant name swig/Lasso.i | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 453c810fb83544aca9fd858d993a73a6de6debda Author: Frederic Peters Date: Sat Jul 30 22:36:54 2005 +0000 char signedness for gcc 4 (id-wsf part has not been done) lasso/id-ff/federation.c | 2 +- lasso/id-ff/identity.c | 10 +- lasso/id-ff/lecp.c | 19 ++-- lasso/id-ff/login.c | 32 +++--- lasso/id-ff/logout.c | 4 +- lasso/id-ff/name_registration.c | 2 +- lasso/id-ff/profile.c | 10 +- lasso/id-ff/provider.c | 72 ++++++------- lasso/id-ff/server.c | 26 ++--- lasso/id-ff/session.c | 26 ++--- lasso/xml/disco_modify_response.c | 2 +- lasso/xml/disco_query_response.c | 2 +- lasso/xml/dst_modify.c | 4 +- lasso/xml/dst_modify_response.c | 4 +- lasso/xml/dst_query.c | 4 +- lasso/xml/dst_query_response.c | 4 +- .../xml/lib_federation_termination_notification.c | 4 +- lasso/xml/sa_sasl_response.c | 2 +- lasso/xml/saml_assertion.c | 14 +-- lasso/xml/samlp_response.c | 18 ++-- lasso/xml/xml.c | 120 +++++++++++---------- 21 files changed, 198 insertions(+), 183 deletions(-) commit 113a4456c8cb820f4b048f540404eb0910fe3e28 Author: Frederic Peters Date: Fri Jul 8 10:19:49 2005 +0000 signedness change to lasso_query_sign (does not break API/ABI) lasso/xml/private.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit f8af9728bc82ae952a1bc271a0264cec9d038c25 Author: Nicolas Clapies Date: Fri Jul 8 10:09:36 2005 +0000 Now lasso_profile_service_add_data() returns a LassoDstData object, so it is possible to set optional attributes. lasso/id-wsf/profile_service.c | 8 ++++---- lasso/id-wsf/profile_service.h | 2 +- swig/Lasso-wsf.i | 4 +--- 3 files changed, 6 insertions(+), 8 deletions(-) commit 489afd57bf3426ef980b2a9320a2b875d7563692 Author: Frederic Peters Date: Thu Jul 7 19:42:56 2005 +0000 fixed signedness differences signaled by gcc 4.0 (lots of others yet to do) lasso/xml/tools.c | 48 ++++++++++++++++++++++++------------------------ 1 file changed, 24 insertions(+), 24 deletions(-) commit c7038ac62b5c4193fd12e87bef6588e1eb19799d Author: Nicolas Clapies Date: Thu Jul 7 13:49:01 2005 +0000 Use lasso_wsf_profile_process_soap_request_msg() to build soap response messgae. lasso/id-wsf/profile_service.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) commit 798fe99dd170c132a7fd44475b463163a5099a71 Author: Nicolas Clapies Date: Thu Jul 7 13:47:41 2005 +0000 Removed unused declared method name : lasso_profile_service_build_request_msg(). lasso/id-wsf/profile_service.h | 2 -- 1 file changed, 2 deletions(-) commit 99fe99f4c3f90775f4ac8e6e0bc471d3a0deda33 Author: Nicolas Clapies Date: Thu Jul 7 13:46:25 2005 +0000 Fixed swig binding on ProfileService's buildResponseMsg(). swig/Lasso-wsf.i | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit f244dea5bd4aa7975a3c35c2ba4109e3f6649b60 Author: Nicolas Clapies Date: Mon Jun 27 14:14:25 2005 +0000 Fixed mistake about prototype of lasso_session_dump(). lasso/id-ff/session.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) commit 9406df0c32aee921ee1b6371cb9030faf57f86ea Author: Nicolas Clapies Date: Mon Jun 27 13:30:15 2005 +0000 Now lasso_identity_new_from_dump() and lasso_session_new_from_dump() return NULL if the root element name is wrong. lasso/id-ff/identity.c | 10 ++++++++-- lasso/id-ff/session.c | 18 ++++++++++++++---- 2 files changed, 22 insertions(+), 6 deletions(-) commit 9959f834ca55a071a27255dab5a677ba9060fa77 Author: Emmanuel Raviart Date: Wed Jun 15 15:06:07 2005 +0000 Removed now useless sed script (now done by Swig). python/Makefile.am | 4 ---- 1 file changed, 4 deletions(-) commit 71b8859e40342c018029314a3b06a1cf2bdf51ce Author: Emmanuel Raviart Date: Wed Jun 15 13:34:51 2005 +0000 In Swig, Use g_free instead of free for strings, to avoid segfault when used in Java Windows. swig/Lasso.i | 7 +++++++ 1 file changed, 7 insertions(+) commit d9b7b73653062f1184a36278def48fb5551d3b7c Author: Frederic Peters Date: Fri Jun 3 21:38:14 2005 +0000 checks identity exists before referencing it lasso/id-ff/defederation.c | 4 ++++ 1 file changed, 4 insertions(+) commit 5f7a78576ba4924aa637a7a8afc105bf74f9f568 Author: Frederic Peters Date: Fri Jun 3 18:21:22 2005 +0000 updated debian packaging wrt new cli policy changelog | 10 +++++++++- control | 4 ++-- rules | 3 ++- 3 files changed, 13 insertions(+), 4 deletions(-) commit a8adda02ed940fdc33c99d2e9040454bc6b441fb Author: Frederic Peters Date: Fri Jun 3 18:21:22 2005 +0000 updated debian packaging wrt new cli policy debian/changelog | 10 +++++++++- debian/control | 4 ++-- debian/rules | 3 ++- 3 files changed, 13 insertions(+), 4 deletions(-) commit 6699ae0698757947899c82f26343ca5fe15e7fa9 Author: Frederic Peters Date: Thu Jun 2 16:14:16 2005 +0000 new mono packages no longer have this tool rules | 1 - 1 file changed, 1 deletion(-) commit 03e86e98b64b9af40fc2e4b5fe58679ae1e102fd Author: Frederic Peters Date: Thu Jun 2 16:14:16 2005 +0000 new mono packages no longer have this tool debian/rules | 1 - 1 file changed, 1 deletion(-) commit f1ff2441055018a9935e0816f4712a1b262a4fb5 Author: Frederic Peters Date: Mon May 30 20:02:01 2005 +0000 Give LassoServer access to (LassoProvider)self->role swig/Lasso.i | 8 ++++++++ 1 file changed, 8 insertions(+) commit 602aaf05aae3f44c06c8357466c7cada449a37f0 Author: Frederic Peters Date: Thu May 26 09:33:33 2005 +0000 update ChangeLog for 0.6.2 ChangeLog | 760 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 760 insertions(+) commit 3f91281a60d0214debb27b176a2cb9f18fe93134 Author: Frederic Peters Date: Thu May 26 09:30:37 2005 +0000 sync docs with code docs/reference/tmpl/login.sgml | 1 + docs/reference/tmpl/profile.sgml | 1 + docs/reference/tmpl/provider.sgml | 9 +++++++++ docs/reference/tmpl/server.sgml | 2 +- 4 files changed, 12 insertions(+), 1 deletion(-) commit 27248a135440af29f71e8c3858c409fefdc2036a Author: Frederic Peters Date: Thu May 26 09:29:57 2005 +0000 no more php zts control | 4 ++-- php4-lasso.examples | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) commit ed7b344d8275154e56d92773cbd0757333f4e420 Author: Frederic Peters Date: Thu May 26 09:29:57 2005 +0000 no more php zts debian/control | 4 ++-- debian/php4-lasso.examples | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) commit 6f50becbd9c83de5e6f122a4b140754c4e9a212c Author: Frederic Peters Date: Thu May 26 09:29:45 2005 +0000 new upstream changelog | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) commit 4dbcdbda318f349239c4425da4a3165f62a69255 Author: Frederic Peters Date: Thu May 26 09:29:45 2005 +0000 new upstream debian/changelog | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) commit f111f94718a668afb211a41aff7f4563751d6d26 Author: Frederic Peters Date: Thu May 26 09:29:07 2005 +0000 this file is generated files | 5 ----- 1 file changed, 5 deletions(-) commit 8f59f6b69abc84b099b8a5189a6090756515dc67 Author: Frederic Peters Date: Thu May 26 09:29:07 2005 +0000 this file is generated debian/files | 5 ----- 1 file changed, 5 deletions(-) commit 4079157f079a085c057a9159fbc4be72d1fa4b14 Author: Frederic Peters Date: Thu May 26 09:28:39 2005 +0000 0.6.2 release date NEWS | 8 ++++---- doap.rdf | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) commit 4459d446b4a5bf9f6226143db6dee1159ec5f0b1 Author: Frederic Peters Date: Wed May 25 12:42:30 2005 +0000 preparing for 0.6.2; removes swig files if moving from non-wsf to wsf or otherwise. configure.ac | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) commit 8195a7b31e3a0689d3ee30f4eb4e66157aa7fb27 Author: Frederic Peters Date: Wed May 25 12:42:00 2005 +0000 bring wsf files on make dist csharp/Makefile.am | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++---- java/Makefile.am | 64 ++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 126 insertions(+), 6 deletions(-) commit 3c8ba2de255fc9cd2f1ebe1d257ead5d836fb5e6 Author: Frederic Peters Date: Wed May 25 11:09:40 2005 +0000 properly initialize key node to NULL lasso/id-ff/provider.c | 1 + 1 file changed, 1 insertion(+) commit ad68eafedce7bf4ca125993220fabc6422360fc0 Author: Frederic Peters Date: Wed May 25 10:11:24 2005 +0000 allows overriding of infile keydescriptor with argument to add_provider lasso/id-ff/provider.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 66474fff2a1130048303d2df666738aa0b430f4f Author: Frederic Peters Date: Wed May 25 09:44:03 2005 +0000 load public key from metadata file lasso/id-ff/provider.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 58 insertions(+), 1 deletion(-) commit 9fea31440b86d002ff8f11eb2578ea324f745c6d Author: Frederic Peters Date: Wed May 18 10:27:22 2005 +0000 fixed docstring to use entities for < and > lasso/id-ff/provider.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 436a3a3cf7a703bdf10eed450c8cb7ddac3ff0b4 Author: Frederic Peters Date: Wed May 18 10:21:41 2005 +0000 oops missing | lasso/xml/xml.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 130279fb6c2e43a510ac227c688a5dd354351d80 Author: Frederic Peters Date: Wed May 18 10:19:44 2005 +0000 fixed usage of DESTDIR and PREFIX perl/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 6d1e9fa62f2745410b2a20394705747cf0ca7615 Author: Frederic Peters Date: Tue May 17 20:27:43 2005 +0000 perl now installs and uninstalls correctly (with thanks to p.g.o) perl/Makefile.am | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) commit 62e74ab239876656cacd17629e8288783063bd86 Author: Frederic Peters Date: Tue May 17 19:38:47 2005 +0000 fixed case when consent was first refused then given (failure status code remained in the user session). (debugged thanks to Authentic Debug Pane (tm) (r) (patent pending)) lasso/id-ff/login.c | 2 ++ 1 file changed, 2 insertions(+) commit 6843376fd860cf3172e03327e59e9a256cf77563 Author: Frederic Peters Date: Tue May 17 17:58:53 2005 +0000 planning 0.6.2 for May 23rd. NEWS | 9 +++++++++ doap.rdf | 4 ++++ 2 files changed, 13 insertions(+) commit dbe4f0c89ea1f186ff3ae4143d3870a7902b4f63 Author: Nicolas Clapies Date: Mon May 16 15:14:42 2005 +0000 Set liblasso-id-wsf.la only when WSF support set. lasso/id-wsf/Makefile.am | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit ca7bad1ac16eebc40444538a783f50d14c3e7add Author: Nicolas Clapies Date: Mon May 16 15:12:42 2005 +0000 Set response attribute when processing WSF SOAP response message. lasso/id-wsf/wsf_profile.c | 7 ++++--- swig/Lasso-wsf.i | 9 +++++++++ 2 files changed, 13 insertions(+), 3 deletions(-) commit 10b4957564f4c51b9f6a614a00876f39805f9ffa Author: Nicolas Clapies Date: Mon May 16 13:27:59 2005 +0000 Updated discovery to SOAP binding. lasso/id-wsf/discovery.c | 57 ++++++------------------------------------------ 1 file changed, 7 insertions(+), 50 deletions(-) commit 2d02e5002a1e4ea633dc65e336e27b556c3b74cd Author: Nicolas Clapies Date: Mon May 16 13:27:13 2005 +0000 Mistake about last add. lasso/id-wsf/wsf_profile.c.~1.12.~ | 152 ------------------------------------- lasso/id-wsf/wsf_profile.h.~1.5.~ | 85 --------------------- lasso/id-wsf/wsf_profile.lo | 12 --- lasso/id-wsf/wsf_profile.o | Bin 22616 -> 0 bytes 4 files changed, 249 deletions(-) commit 97618e56e2fa237727fab2380a9e5c3c9dd4826a Author: Nicolas Clapies Date: Mon May 16 13:25:57 2005 +0000 Added WSF SOAP binding layer. lasso/id-wsf/wsf_profile.c | 84 +++++++++++++++++++- lasso/id-wsf/wsf_profile.c.~1.12.~ | 152 +++++++++++++++++++++++++++++++++++++ lasso/id-wsf/wsf_profile.h | 23 +++++- lasso/id-wsf/wsf_profile.h.~1.5.~ | 85 +++++++++++++++++++++ lasso/id-wsf/wsf_profile.lo | 12 +++ lasso/id-wsf/wsf_profile.o | Bin 0 -> 22616 bytes 6 files changed, 349 insertions(+), 7 deletions(-) commit edbbed086dae4e626984aa7f184f41163417aa1b Author: Frederic Peters Date: Mon May 16 10:57:59 2005 +0000 fixed memory leak in loadDescriptor lasso/id-ff/provider.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit ebde5d5f2e88a9e0373ca1cc993121a6e411565a Author: Frederic Peters Date: Thu May 12 21:28:26 2005 +0000 allows fake brws-lecp profile (introduced by Nicolas) to be used in lasso_login_build_authn_response_msg, so LECP works again. lasso/id-ff/login.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 0fcd78757b425cea9ff6028463db404efafb6b0a Author: Frederic Peters Date: Thu May 12 18:52:43 2005 +0000 documented that previous change lasso/id-ff/name_registration.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit 9c4527554dc33fe207b14499396ee4e77fc3d203 Author: Frederic Peters Date: Thu May 12 18:45:50 2005 +0000 fixed the case of idp-initiated rni with no sp defined name identifier lasso/id-ff/name_registration.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit c419d029f684b7abf6d201cea1932cb7bf131cba Author: Frederic Peters Date: Thu May 12 18:29:34 2005 +0000 fixing lasso_name_registration_init_request with regards to profile->nameIdentifier (hopefully) lasso/id-ff/name_registration.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) commit 971f06beed49a89e9397a81aade3afafd6dac814 Author: Frederic Peters Date: Thu May 12 18:14:02 2005 +0000 fixed lasso_name_registration_process_request_msg so that it ends with profile->nameIdentifier being the local name identifier. lasso/id-ff/name_registration.c | 28 +++++++++++----------------- 1 file changed, 11 insertions(+), 17 deletions(-) commit a1008ec4c1096fa872ee777068d2fa135830388d Author: Frederic Peters Date: Thu May 12 16:47:07 2005 +0000 profile->nameIdentifier set to local name identifier lasso/id-ff/defederation.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) commit a64f1cdbe47a5090f2ac9dbb7f3923f9cd1df770 Author: Frederic Peters Date: Thu May 12 16:26:49 2005 +0000 profile->nameIdentifier should always points to *local* name identifier. (not yet tested for federation termination) lasso/id-ff/login.c | 9 ++------- lasso/id-ff/logout.c | 10 +++++++--- lasso/id-ff/profile.c | 13 ++----------- 3 files changed, 11 insertions(+), 21 deletions(-) commit 999a6896a33a546fa8160f3a1fd1f191a56dc8b5 Author: Frederic Peters Date: Thu May 12 12:55:19 2005 +0000 use remote name identifier if available for login->nameIdentifier lasso/id-ff/login.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) commit d210785737bc78a61200e174a1906bbc22c80016 Author: Frederic Peters Date: Wed May 11 10:28:34 2005 +0000 don't check other endpoint for supported profile since *they* initiated it that way and it seems allowed for them not to have it in their metadata. lasso/id-ff/name_registration.c | 7 ------- 1 file changed, 7 deletions(-) commit 8dcc54c72a74be2907097a8939d089e0a369d35d Author: Nicolas Clapies Date: Wed May 11 01:30:15 2005 +0000 Fixed header included. swig/Lasso-wsf.i | 1 + 1 file changed, 1 insertion(+) commit c14455ce6136a10aa0ed2fcf8d4d8b9452805f51 Author: Frederic Peters Date: Tue May 10 21:18:31 2005 +0000 InResponseTo must be part of the redirect answer lasso/xml/lib_status_response.c | 1 + 1 file changed, 1 insertion(+) commit e099769b74a9bc29c5349c62bc1472b15ca2232e Author: Frederic Peters Date: Tue May 10 19:46:59 2005 +0000 1 is a valid boolean value lasso/id-ff/provider.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit da39ad6e5882e2912a5292fd2dcd0549e7509826 Author: Frederic Peters Date: Tue May 10 18:17:32 2005 +0000 \r may be hiding in base64 lasso/xml/xml.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 2fe3f065d70fcbcf5f4d8cd13cf6ab8cd45a1933 Author: Nicolas Clapies Date: Tue May 10 16:47:15 2005 +0000 Fixed lecp profile : added case when lecp profile is used when building assertion. lasso/id-ff/login.c | 6 ++- lasso/id-ff/login.h | 1 + lasso/xml/strings.h | 8 ++-- swig/Lasso-wsf.i | 121 ++++++++++++++++++++++++++++++++++++++-------------- swig/Lasso.i | 4 ++ 5 files changed, 105 insertions(+), 35 deletions(-) commit 71af2a442f28d4ce18a294179f01f5ab83fbfed9 Author: Frederic Peters Date: Tue May 10 15:36:44 2005 +0000 don't lasso_node_destroy list items that may be NULL lasso/xml/xml.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 2e5523fd6cce6701acaa65cf9c8f24ce3b8092e7 Author: Frederic Peters Date: Tue May 10 15:29:16 2005 +0000 allows \n in base64 strings lasso/xml/xml.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 1608fdee29a0d8fdaa024e9df30b11963b29b418 Author: Frederic Peters Date: Tue May 10 14:05:08 2005 +0000 NameQualifier is optional lasso/xml/lib_federation_termination_notification.c | 3 +-- lasso/xml/lib_logout_request.c | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) commit 1727cdfc6830a1be1c9db899a869a73a67ba0033 Author: Frederic Peters Date: Tue May 10 12:56:06 2005 +0000 don't fail if there is no signature on Logout Response lasso/id-ff/logout.c | 7 +++++++ 1 file changed, 7 insertions(+) commit 1d41d1951f1ae7d9af66149fbca4d8823228dfe2 Author: Frederic Peters Date: Mon May 2 20:05:23 2005 +0000 reworked query string signature verification to better handle cases where the signature algorithm is not fully url-encoded; also deals with the corner case where there are query params past the signature. lasso/xml/tools.c | 65 ++++++++++++++++++++++++++++++++----------------------- 1 file changed, 38 insertions(+), 27 deletions(-) commit f2e1b0440178c1bd399ff39fc4d0c5c665669dee Author: Frederic Peters Date: Mon May 2 16:08:48 2005 +0000 wsse is only for wsf lasso/extract_symbols.py | 2 +- lasso/extract_types.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit e7f992bbb92b0cfcf49358416fc799758e09504f Author: Nicolas Clapies Date: Mon May 2 10:17:57 2005 +0000 Added process of Wsse prefix in lasso_node_new_from_xmlNode(). lasso/xml/xml.c | 2 ++ 1 file changed, 2 insertions(+) commit 892726542eca6c62687e0daf85ec4f0eaa56df0f Author: Nicolas Clapies Date: Mon May 2 09:17:08 2005 +0000 wsse:Security class. lasso/xml/wsse_security.c | 105 ++++++++++++++++++++++++++++++++++++++++++++++ lasso/xml/wsse_security.h | 68 ++++++++++++++++++++++++++++++ 2 files changed, 173 insertions(+) commit a8ea72d5ff7642045aa7292634bcdf16af450e34 Author: Nicolas Clapies Date: Mon May 2 09:16:24 2005 +0000 Added a FIXME to list missing element in credential. lasso/id-ff/login.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit 5b9d911d6f70e5ba55b19a91555a92daa18ec5d4 Author: Nicolas Clapies Date: Mon May 2 09:14:53 2005 +0000 Added wsse:Security element. lasso/xml/Makefile.am | 6 +++-- lasso/xml/strings.h | 5 +++- swig/Lasso-wsf.i | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++ swig/inheritance.h | 3 +++ 4 files changed, 86 insertions(+), 3 deletions(-) commit 2158bd14655da201e712914614dbcdd8469155e9 Author: Nicolas Clapies Date: Mon May 2 09:13:40 2005 +0000 Added access to saml:Assertion in saml:Advice element. swig/Lasso.i | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) commit bb53afd2fa44358a36b06eb0fae5914a6bd7bb2d Author: Frederic Peters Date: Tue Apr 26 21:31:20 2005 +0000 fixed Darwin case so it compiles on Mac OS X configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 2eb45d1b5892671db268c864ab521aeb39196751 Author: Nicolas Clapies Date: Tue Apr 26 10:41:51 2005 +0000 For now Make only one credential for every description end points of the Discovery IDP. Fixed Minor Version of credential included in Advice element to Saml Minor Version. Added Audience restriction to Discovery IDP ProviderID. lasso/id-ff/login.c | 42 +++++++++++++++++++++++++++++++----------- 1 file changed, 31 insertions(+), 11 deletions(-) commit 88aee617b3f355b6dabe1cc5ae5e323653d98935 Author: Frederic Peters Date: Mon Apr 25 21:52:45 2005 +0000 allocate memory for string; don't use it static lasso/id-ff/login.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit efa504e9ed67f5ee8806db4a2c4934fd1b224208 Author: Nicolas Clapies Date: Mon Apr 25 17:04:27 2005 +0000 lasso_login_assertion_add_discovery() adds credentials if security mechanisms want it. lasso/id-ff/login.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 52 insertions(+), 2 deletions(-) commit 1c4f12d1d3d0b1bc662f0867ea72f4ec00c6d9eb Author: Nicolas Clapies Date: Mon Apr 25 17:00:03 2005 +0000 Added copy constructor to duplicate LassoDiscoDescription and LassoDiscoServiceInstance objects. lasso/xml/disco_description.c | 39 ++++++++++++++++++++++++++++++++++++++ lasso/xml/disco_description.h | 3 +++ lasso/xml/disco_service_instance.c | 26 +++++++++++++++++++++++++ lasso/xml/disco_service_instance.h | 3 +++ 4 files changed, 71 insertions(+) commit ec81badb6c000850eb833fbc53440cadbef0eafc Author: Frederic Peters Date: Mon Apr 25 14:25:03 2005 +0000 use proper confirmation method saml identifiers lasso/id-ff/login.c | 22 ++++++++++++++++++++++ lasso/xml/lib_authentication_statement.c | 3 +-- 2 files changed, 23 insertions(+), 2 deletions(-) commit 59892c5c86a0746f091089355300690894ae0420 Author: Frederic Peters Date: Mon Apr 25 13:39:44 2005 +0000 added saml artifact confirmation method identification (from SAML 1.1 spec) lasso/xml/strings.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 397e980c6c345fa4d74f605041fbf74ab12bd1a9 Author: Frederic Peters Date: Mon Apr 25 10:43:48 2005 +0000 loads public key into xmlSecKey on LassoProvider instanciation; this merges signature verification in XML messages and in query strings. lasso/id-ff/provider.c | 65 +++++++++++++++++++++++++------------ lasso/id-ff/providerprivate.h | 2 ++ lasso/id-ff/server.c | 1 + lasso/xml/private.h | 2 +- lasso/xml/tools.c | 75 +++++++++++++++++++------------------------ 5 files changed, 82 insertions(+), 63 deletions(-) commit ddbcde8dddeecc039ceddf554447b2c3f6b944fa Author: Frederic Peters Date: Mon Apr 25 09:10:01 2005 +0000 conscientiously overwrite memory used by the private key password lasso/id-ff/server.c | 5 +++++ 1 file changed, 5 insertions(+) commit 3e3b1bee2fbb5dbec1c946ff7f77e09d5cb1a837 Author: Frederic Peters Date: Mon Apr 25 09:03:59 2005 +0000 renamed secret_key to private_key_password since it was badly named and unused (so no API breakage) lasso/id-ff/server.c | 14 +++++++------- lasso/id-ff/server.h | 2 +- swig/Lasso.i | 8 ++++---- 3 files changed, 12 insertions(+), 12 deletions(-) commit d028269c68f0f7f980278a2b799f2069b64d5b68 Author: Frederic Peters Date: Sat Apr 23 12:10:26 2005 +0000 return error message if name registration profile is used on an empty identity (was segfaulting) lasso/id-ff/name_registration.c | 4 ++++ 1 file changed, 4 insertions(+) commit 55a1b3469e2c967db963b8bf893857f779304e5d Author: Nicolas Clapies Date: Fri Apr 22 13:28:42 2005 +0000 Added missing optional attributes AttributeName and AttributeNameSpace in Attribute element. When adding a ResourceOffering element in Assertion, they are set. lasso/id-ff/login.c | 2 ++ lasso/xml/saml_attribute.c | 13 +++++++++++++ lasso/xml/saml_attribute.h | 2 ++ 3 files changed, 17 insertions(+) commit 0be5b5c3b5bec807d663832c9b570d527bc3aa0c Author: Nicolas Clapies Date: Fri Apr 22 09:21:54 2005 +0000 DiscoResourceOffering is required in DiscoInsertEntry. lasso/id-wsf/discovery.c | 3 +-- lasso/xml/disco_insert_entry.c | 12 ++++++++++-- lasso/xml/disco_insert_entry.h | 3 ++- swig/Lasso-wsf.i | 2 +- 4 files changed, 14 insertions(+), 6 deletions(-) commit 783d48eb0ba1f6e88b8ef79a162b934ea01f4186 Author: Frederic Peters Date: Fri Apr 22 09:04:13 2005 +0000 SNIPPET_LIST_NODES [note: if there are no other nodes; it is possible to leave snippet name as the empty string; nodes will then be constructed looking at their names and namespaces (this is useful for xs:any)] (from docs/reference/snippet-types.rst) lasso/xml/disco_insert_entry.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit fb47a30655865a516ae359c6cd2f4a80d319f9e9 Author: Nicolas Clapies Date: Fri Apr 22 08:39:52 2005 +0000 Added binding of lasso_new_from_message() for DiscoModify. swig/Lasso-wsf.i | 9 +++++++++ 1 file changed, 9 insertions(+) commit 56a45b48b1de1ea231e51f4156929e0344e21dd2 Author: Frederic Peters Date: Wed Apr 20 13:38:50 2005 +0000 binding to lasso_provider_get_organization; converts xmlNode into string swig/Lasso.i | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) commit 871bf490c4370bc7ceb678afdce09a4ab40ee1d5 Author: Frederic Peters Date: Wed Apr 20 13:35:52 2005 +0000 API addition; lasso_provider_get_organization docs/reference/lasso-sections.txt | 1 + lasso/id-ff/provider.c | 35 +++++++++++++++++++++++++++++++++++ lasso/id-ff/provider.h | 2 ++ 3 files changed, 38 insertions(+) commit 8b8a3f3023fa66790c1f48e1bbc289d8a58c5276 Author: Frederic Peters Date: Wed Apr 20 13:35:26 2005 +0000 set pointer to NULL as a protective measure lasso/xml/xml.c | 1 + 1 file changed, 1 insertion(+) commit 42e5e27bdf60b1e29fb7b7342cfab68c10a15763 Author: Nicolas Clapies Date: Tue Apr 19 15:28:38 2005 +0000 Added support of choice between WsdlRef and BriefSoapHttpDescription in LassoDiscoDescription object : 2 new constructors, lasso_disco_description_new_with_WsdlRef() and lasso_disco_description_new_with_BriefSoapHttpDescription(). lasso_disco_description_new only returns a simple empty object. lasso/xml/disco_description.c | 46 ++++++++++++++++++++++++++++++++++--------- lasso/xml/disco_description.h | 18 +++++++++++------ swig/Lasso-wsf.i | 27 +++++++++++++++++++++---- 3 files changed, 72 insertions(+), 19 deletions(-) commit 922644867cffcccc73ad181cd7909eed5cfe0fe3 Author: Frederic Peters Date: Mon Apr 18 10:57:24 2005 +0000 bails out with an error if lasso_login_must_authenticate is called while login has no request; this probably means it was called before lasso_login_process_authn_request_msg. lasso/id-ff/login.c | 3 +++ 1 file changed, 3 insertions(+) commit 32c3311ee2ed1a6d0aea0d27b97df9335f4ca929 Author: Nicolas Clapies Date: Mon Apr 18 09:22:48 2005 +0000 Added discovery directives in inheritance.h swig/inheritance.h | 6 ++++++ 1 file changed, 6 insertions(+) commit 6eb7aa3c4aa6363a8725493e1b9852b052902cdf Author: Nicolas Clapies Date: Fri Apr 15 15:34:33 2005 +0000 Added ref count in addDescription() method. swig/Lasso-wsf.i | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit 173a66d8caede3b1a579dd8c7feed279e58c4fb3 Author: Nicolas Clapies Date: Fri Apr 15 15:14:09 2005 +0000 Added addDescription method. swig/Lasso-wsf.i | 6 ++++++ 1 file changed, 6 insertions(+) commit 376201e02a3954ab0bb4b99a40d4276b2f9d501e Author: Nicolas Clapies Date: Mon Apr 11 12:17:37 2005 +0000 Liberty wsf SOAP binding. lasso/id-wsf/profile_service.c | 107 +++++++++++++++++++++++++++++------------ 1 file changed, 75 insertions(+), 32 deletions(-) commit 5efb71d36c1882dd41ebbb4bf5d4982fcb2447c3 Author: Nicolas Clapies Date: Mon Apr 11 09:49:43 2005 +0000 Fixed lasso_discovery_init_modify() : added missing code for liberty wsf soap binding. lasso/id-wsf/discovery.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) commit b6972e8c1881148ffb940d459837de34af91fc38 Author: Nicolas Clapies Date: Mon Apr 11 09:12:46 2005 +0000 Completed discovery with support of liberty wsf soap binding. lasso/id-wsf/discovery.c | 55 +++++++++++++++++++++++++++++++++++++----------- 1 file changed, 43 insertions(+), 12 deletions(-) commit bc2e4973fef94307ecc82c71ef5fe64b6bb587af Author: Nicolas Clapies Date: Mon Apr 11 07:09:49 2005 +0000 Updated Discovery : now it binds his messages in liberty wsf SOAP envelope. lasso/id-wsf/discovery.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) commit ffb2307e4adcdec0155a91ded498202edfaacdbe Author: Nicolas Clapies Date: Fri Apr 1 07:57:25 2005 +0000 Fixed removed code in previous commit. Fixed some rules from liberty spec : mutli mechanism, null mechanism. Added namespace for service authentication. lasso/id-wsf/authentication.c | 71 ++++++++++++++++++++++++++++++++++++++----- lasso/id-wsf/authentication.h | 2 +- swig/Lasso-wsf.i | 5 +++ 3 files changed, 69 insertions(+), 9 deletions(-) commit b89c92546bd6a816e08fdd6598ac7489958e06e3 Author: Frederic Peters Date: Tue Mar 29 14:37:24 2005 +0000 don't set status to constant string in samlp:Response lasso/xml/samlp_response.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit dd96d7d2fcd6fbe12c23555e06b4248eeaa5e155 Author: Frederic Peters Date: Tue Mar 29 14:31:06 2005 +0000 properly multiply sizeof(char*) to avoid buffer overflow lasso/xml/tools.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit b4f73b9cff63bac52be5a80acecaae293f242628 Author: Frederic Peters Date: Tue Mar 29 13:19:05 2005 +0000 free up Status if not NULL. lasso/id-ff/profile.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 3cc8966630d4ebc0f5a5c6fa85bd1f490a97ba1e Author: Frederic Peters Date: Tue Mar 29 08:38:00 2005 +0000 checks for Status before Assertion; so lasso doesn't restore an old assertion. lasso/id-ff/login.c | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) commit ddd2cbefc99615208eee8900776b2bb3ee06c757 Author: Frederic Peters Date: Tue Mar 29 08:27:03 2005 +0000 bring back LassoSamlAssertion lasso/id-ff/login.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit a7a9f57fb48c46ab9fa68eb957428d73f49ad659 Author: Frederic Peters Date: Tue Mar 29 08:16:58 2005 +0000 don't add assertion in samlp:Response if the signature check failed lasso/id-ff/login.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) commit 892d66e067840cff1563ace8a57ec303caa38adf Author: Frederic Peters Date: Thu Mar 24 14:18:53 2005 +0000 deals with incorrect AssertionConsumerServiceID lasso/id-ff/login.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) commit 46b91f034dd59255c2f6ee7479333e39ae945973 Author: Frederic Peters Date: Thu Mar 24 14:11:06 2005 +0000 include AssertionConsumerServiceID in query strings lasso/xml/lib_authn_request.c | 1 + 1 file changed, 1 insertion(+) commit c6be2c9a579796269ad05ccfe5c615d069dd7fc4 Author: Frederic Peters Date: Tue Mar 22 17:12:32 2005 +0000 session may exist beforehand, store status nevertheless lasso/id-ff/login.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit afa7a20889b3b3fdc4ce652c54295b7056528db1 Author: Frederic Peters Date: Tue Mar 22 15:32:46 2005 +0000 no success won't set Success lasso/id-ff/login.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 895a04a76b2af710637a04ec4c5b674f87fb3c78 Author: Nicolas Clapies Date: Mon Mar 21 16:51:33 2005 +0000 Added REQUEST_TYPE_SASL_REQUEST returned by lasso_profile_get_request_type_from_soap_msg(). lasso/id-ff/profile.c | 4 +++- lasso/id-ff/profile.h | 2 ++ swig/Lasso.i | 2 ++ 3 files changed, 7 insertions(+), 1 deletion(-) commit 8656bf0ec849c1f242d6ba6c6de43d45232c2def Author: Nicolas Clapies Date: Mon Mar 21 13:18:53 2005 +0000 Renamed properly attribute acces in DiscoServiceInstance object. swig/Lasso-wsf.i | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 243aec9a6b33a36ca792500014953436c2c16309 Author: Nicolas Clapies Date: Mon Mar 21 13:17:27 2005 +0000 Updated authentication service : fixed error when parsing data from client. Removed hard code to build soap envelope by call to common function from wsf_profile.h. lasso/id-wsf/authentication.c | 184 ++++++++++++------------------------------ 1 file changed, 51 insertions(+), 133 deletions(-) commit f059e31e1251451edb2291252df687486871baf4 Author: Nicolas Clapies Date: Mon Mar 21 13:14:26 2005 +0000 Added function to build generic liberty wsf soap envelope. lasso/id-wsf/wsf_profile.c | 30 ++++++++++++++++++++++++++++++ lasso/id-wsf/wsf_profile.h | 1 + 2 files changed, 31 insertions(+) commit 9b5b78252d00b4868f89aecbcf5ee90cea3a52dd Author: Frederic Peters Date: Sat Mar 19 08:28:45 2005 +0000 removed erroneously commited tests Makefile tests/Makefile.am | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) commit 00c850a92a90f5a02c55ebaf91339bd2d96e05bd Author: Frederic Peters Date: Fri Mar 18 22:22:42 2005 +0000 docstring to errorchecking tests python/tests/errorchecking_tests.py | 3 +++ 1 file changed, 3 insertions(+) commit d855564767355980d9aac15f7eac8af6234307e9 Author: Frederic Peters Date: Fri Mar 18 22:07:00 2005 +0000 include lasso_config.h since LASSO_WSF_ENABLED is used lasso/id-ff/login.c | 1 + lasso/id-ff/server.c | 2 ++ 2 files changed, 3 insertions(+) commit 5f205c0f2ee2156ea4bb35650a0f13d24a22844b Author: Frederic Peters Date: Fri Mar 18 21:49:42 2005 +0000 added missing lasso_config.h include (necessary for LASSO_WSF_ENABLED definition) lasso/id-ff/login.h | 2 ++ lasso/id-ff/server.h | 2 ++ 2 files changed, 4 insertions(+) commit 65d422eec23b914572ca2e8bab5a1b8f4a3b56a0 Author: Frederic Peters Date: Fri Mar 18 21:36:03 2005 +0000 since wsf is no longer compiled it is no longer necessary to check or isolate sasl check variable. configure.ac | 1 - lasso/id-wsf/Makefile.am | 17 ++++------------- 2 files changed, 4 insertions(+), 14 deletions(-) commit 5ef972b27e434990cb0c3b7e242a917ab0830b57 Author: Frederic Peters Date: Fri Mar 18 20:58:34 2005 +0000 don't compile id-wsf files when wsf is disabled; this cuts down build time by a nice margin. lasso/Makefile.am | 8 ++- lasso/extract_symbols.py | 5 +- lasso/extract_types.py | 18 +++++- lasso/id-ff/login.c | 22 +++++-- lasso/id-ff/login.h | 7 ++- lasso/id-ff/server.c | 8 ++- lasso/id-ff/server.h | 4 ++ lasso/id-wsf/Makefile.am | 24 +++++--- lasso/xml/Makefile.am | 148 +++++++++++++++++++++++++---------------------- swig/Lasso.i | 2 + tests/Makefile.am | 5 +- 11 files changed, 157 insertions(+), 94 deletions(-) commit 612285913d660ef627e52fdd27e6517f8c39de39 Author: Nicolas Clapies Date: Fri Mar 18 16:37:07 2005 +0000 Updated lasso_discovery_add_insert_entry() prototype : now it only takes a LassoServiceInstance and a LassoDiscoResourceID. lasso/id-wsf/discovery.c | 50 ++++++++++++++------------------------- lasso/id-wsf/discovery.h | 61 ++++++++++++++++++++++-------------------------- swig/Lasso-wsf.i | 7 ++---- 3 files changed, 47 insertions(+), 71 deletions(-) commit 9d4bd73ae925d8fe22f596baf1b90dac5ac4c351 Author: Emmanuel Raviart Date: Fri Mar 18 16:29:31 2005 +0000 Renamed LASSO_WSF_SUPPORT to WSF_SUPPORT in SWIG. swig/Lasso.i | 4 ++++ 1 file changed, 4 insertions(+) commit 4b861c0cf7b3dc4dc5ddda75a0950084781aa9b7 Author: Nicolas Clapies Date: Fri Mar 18 09:14:27 2005 +0000 Updated authentication service : now it has hard coded collbacks. developer must use LassoUserAccount to inform sasl about login and password. lasso/id-wsf/authentication.c | 319 ++++++++++++++++++++++++++++++++++-------- lasso/id-wsf/authentication.h | 17 ++- swig/Lasso-wsf.i | 150 ++++++++++++-------- 3 files changed, 362 insertions(+), 124 deletions(-) commit 1b1cf2d2e47923daa92b7ce89764da571d4c0f66 Author: Nicolas Clapies Date: Fri Mar 18 09:11:08 2005 +0000 Fixed dump of attribute. lasso/id-wsf/wsf_profile.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 231c9320b4c81b56734ad09b5712f7972d32071d Author: Nicolas Clapies Date: Fri Mar 18 09:09:49 2005 +0000 Fixed any attribute in snippet. lasso/xml/soap_body.c | 4 ++-- lasso/xml/soap_body.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) commit 49a06dc7816fac9d2494056e3b4bed2203bc6e92 Author: Nicolas Clapies Date: Fri Mar 18 09:09:22 2005 +0000 Fixed process of dump for soap envelope message. lasso/xml/soap_envelope.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit 3d9f55de65e01255b2f2a808a9485c0afee85028 Author: Romain Chantereay Date: Thu Mar 17 09:43:17 2005 +0000 First version of the "Writing a Libety PHP SP". Almost all adapted copied/pasted from "Writing a Liberty C SP". docs/lasso-book/writing-a-php-sp.txt | 377 +++++++++++++++++++++++++++++++++++ 1 file changed, 377 insertions(+) commit 522740c130be1c63bfeca089bca3350d00b0a5e6 Author: Frederic Peters Date: Tue Mar 15 17:29:14 2005 +0000 detect liberty QName and add appropriate namespace (closes: #416) lasso/xml/samlp_response.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) commit 98b4703cef601165b9642bf40644ddf7d46946a5 Author: Frederic Peters Date: Tue Mar 15 17:27:57 2005 +0000 added non-regression test for bug #416 (missing namespace in some samlp:Response) tests/random_tests.c | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) commit 170f3f25d29300cd544f36b4dab277955db68668 Author: Frederic Peters Date: Fri Mar 11 21:48:54 2005 +0000 warning: ISO C90 forbids mixed declarations and code lasso/xml/soap_binding_ext_credential.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 0dd0bcf86bb6dc93b0bd24fc4bee858e203b7573 Author: Nicolas Clapies Date: Fri Mar 11 17:15:15 2005 +0000 Complete liberty soap binding. lasso/xml/Makefile.am | 8 ++ lasso/xml/soap_binding_consent.c | 129 +++++++++++++++++++++++++++ lasso/xml/soap_binding_consent.h | 75 ++++++++++++++++ lasso/xml/soap_binding_processing_context.c | 123 ++++++++++++++++++++++++++ lasso/xml/soap_binding_processing_context.h | 74 ++++++++++++++++ lasso/xml/soap_binding_provider.c | 128 +++++++++++++++++++++++++++ lasso/xml/soap_binding_provider.h | 76 ++++++++++++++++ lasso/xml/soap_binding_usage_directive.c | 130 ++++++++++++++++++++++++++++ lasso/xml/soap_binding_usage_directive.h | 77 ++++++++++++++++ 9 files changed, 820 insertions(+) commit 4d13c7af97ecd84bbfb62c745bc286ecc01b519d Author: Nicolas Clapies Date: Fri Mar 11 16:24:02 2005 +0000 Added liberty soap binding extension. lasso/xml/Makefile.am | 8 ++ lasso/xml/soap_binding_ext_credential.c | 124 ++++++++++++++++++ lasso/xml/soap_binding_ext_credential.h | 81 ++++++++++++ lasso/xml/soap_binding_ext_credentials_context.c | 130 +++++++++++++++++++ lasso/xml/soap_binding_ext_credentials_context.h | 85 +++++++++++++ .../xml/soap_binding_ext_service_instance_update.c | 140 +++++++++++++++++++++ .../xml/soap_binding_ext_service_instance_update.h | 87 +++++++++++++ lasso/xml/soap_binding_ext_timeout.c | 125 ++++++++++++++++++ lasso/xml/soap_binding_ext_timeout.h | 75 +++++++++++ lasso/xml/strings.h | 7 +- 10 files changed, 860 insertions(+), 2 deletions(-) commit a0d8cca4b48cbe4d80783ec5b9fc96e540663554 Author: Nicolas Clapies Date: Thu Mar 10 16:58:17 2005 +0000 Added missing security mechanism. lasso/xml/strings.h | 6 ++++++ swig/Lasso-wsf.i | 12 ++++++++++++ 2 files changed, 18 insertions(+) commit 170d714a15b7a0b101cf81fb41626b7dcab3cda4 Author: Nicolas Clapies Date: Thu Mar 10 16:42:03 2005 +0000 Restore ResourceID and EncryptedResourceID attributes in discovery and modify. Added security mechanism id. lasso/id-wsf/discovery.c | 19 +++++++---------- lasso/xml/disco_modify.c | 7 +++++-- lasso/xml/disco_modify.h | 4 ++-- lasso/xml/strings.h | 12 +++++++++++ swig/Lasso-wsf.i | 54 ++++++++++++++++++++++++++++++++++++++++-------- 5 files changed, 72 insertions(+), 24 deletions(-) commit 16df58c4cb8fa19a5163c7db7c12d2347e796182 Author: Nicolas Clapies Date: Thu Mar 10 08:14:51 2005 +0000 Added comments about security mech rules. lasso/xml/disco_description.h | 10 ++++++++++ 1 file changed, 10 insertions(+) commit 5609ce40b45e8ccc9c1b1551e8aa9cb5f4bf201e Author: Nicolas Clapies Date: Thu Mar 10 08:13:36 2005 +0000 Added comment about Options rules. lasso/xml/disco_resource_offering.h | 5 +++++ 1 file changed, 5 insertions(+) commit c5761ee0dcd654883df589b45a656472f12227a4 Author: Nicolas Clapies Date: Thu Mar 10 08:12:50 2005 +0000 Added comments about status rules. lasso/xml/disco_modify_response.h | 9 +++++++++ 1 file changed, 9 insertions(+) commit 6a994dca8757384e129ec28711e8db1007fb58df Author: Nicolas Clapies Date: Thu Mar 10 08:11:41 2005 +0000 resourceId is for LassoResourceID and LassoEncryptedResourceID. lasso/xml/disco_modify.c | 7 ++----- lasso/xml/disco_modify.h | 4 ++-- 2 files changed, 4 insertions(+), 7 deletions(-) commit d70fa8b19ca5e3657a9edb5c859b4736233311ce Author: Nicolas Clapies Date: Thu Mar 10 08:08:22 2005 +0000 Fixed resourceID to resourceId. Added some param tests. lasso/id-wsf/discovery.c | 11 +++++++---- lasso/id-wsf/discovery.h | 12 ++++++++++-- 2 files changed, 17 insertions(+), 6 deletions(-) commit a89e92c42be3e5e9d51fae46390bf7eeb256b75e Author: Nicolas Clapies Date: Thu Mar 10 08:06:06 2005 +0000 Added disco status codes. lasso/xml/strings.h | 7 +++++++ 1 file changed, 7 insertions(+) commit 4ddb8cafcaec03ecfc77661e610a4c32c3b92289 Author: Nicolas Clapies Date: Thu Mar 10 08:05:39 2005 +0000 Added discovery directive elements. lasso/xml/Makefile.am | 14 +- lasso/xml/disco_authenticate_requester.c | 113 +++++++ lasso/xml/disco_authenticate_requester.h | 73 +++++ lasso/xml/disco_authenticate_session_context.c | 113 +++++++ lasso/xml/disco_authenticate_session_context.h | 75 +++++ lasso/xml/disco_authorize_requester.c | 113 +++++++ lasso/xml/disco_authorize_requester.h | 73 +++++ lasso/xml/disco_encrypt_resource_id.c | 113 +++++++ lasso/xml/disco_encrypt_resource_id.h | 73 +++++ lasso/xml/disco_generate_bearer_token.c | 113 +++++++ lasso/xml/disco_generate_bearer_token.h | 73 +++++ lasso/xml/disco_send_single_logout.c | 113 +++++++ lasso/xml/disco_send_single_logout.h | 73 +++++ swig/Lasso-wsf.i | 389 ++++++++++++++++++++++--- 14 files changed, 1482 insertions(+), 39 deletions(-) commit 5fc13d912678c56ab0917617f9b12a871bc734ba Author: Frederic Peters Date: Mon Mar 7 20:42:53 2005 +0000 removed debugging output tests/random_tests.c | 1 - 1 file changed, 1 deletion(-) commit f7d78d8fb4010449b0e49e86dc48bd61e5fd0296 Author: Frederic Peters Date: Mon Mar 7 20:42:00 2005 +0000 use fail_unless since fail_if didn't exist in check 0.8.x tests/random_tests.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit e46b388588cde583fc611e4c2329d83b931c3c78 Author: Frederic Peters Date: Mon Mar 7 19:41:49 2005 +0000 only use xsi:type on elements that have a saml: ancestor (and added test to not regress) lasso/xml/saml_assertion.c | 19 ++++++++++++++----- tests/random_tests.c | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 5 deletions(-) commit c40e823deca6ecf89062df4a6de6183eb722af83 Author: Frederic Peters Date: Mon Mar 7 15:59:27 2005 +0000 return LASSO_LOGIN_ERROR_FEDERATION_NOT_FOUND in lasso_login_process_authn_response_msg when liberty status is samlp:Responder/lib:FederationDoesNotExist lasso/id-ff/login.c | 11 +++++++++++ 1 file changed, 11 insertions(+) commit 1e26b90df992d2b5c2703442f41c2ec40cc46dd5 Author: Frederic Peters Date: Mon Mar 7 14:16:16 2005 +0000 only use LASSO_SIGNATURE_TYPE_WITHX509 (including a in message) if we have a certificate to use; use LASSO_SIGNATURE_TYPE_SIMPLE otherwise. lasso/id-ff/defederation.c | 3 ++- lasso/id-ff/login.c | 25 +++++++++++++++++++++---- lasso/id-ff/logout.c | 6 ++++-- lasso/id-ff/name_identifier_mapping.c | 6 ++++-- lasso/id-ff/name_registration.c | 8 ++++++-- lasso/xml/xml.c | 7 +++---- 6 files changed, 40 insertions(+), 15 deletions(-) commit d2cb2500ba178c0503dd398c7d71cedf73b648e9 Author: Emmanuel Raviart Date: Fri Mar 4 04:11:16 2005 +0000 Corrected MinorVersion of samlp:Response. lasso/id-ff/login.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 9552f5b08c27f37cb386a5984be8613aa60a3a19 Author: Nicolas Clapies Date: Wed Mar 2 17:15:34 2005 +0000 Added credentials and resource offerings if authentication is OK. lasso/id-wsf/authentication.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) commit 5cfcd1f9058c29d4e14c40499fb159f1fca6b553 Author: Nicolas Clapies Date: Wed Mar 2 17:10:22 2005 +0000 Added credentials and resource offerings if authentication is OK. lasso/xml/Makefile.am | 2 + lasso/xml/sa_credentials.c | 128 +++++++++++++++++++++++++++++++++++++++++++ lasso/xml/sa_credentials.h | 73 ++++++++++++++++++++++++ lasso/xml/sa_sasl_response.c | 33 ++++++++++- lasso/xml/sa_sasl_response.h | 11 +++- swig/Lasso-wsf.i | 92 +++++++++++++++++++++++++++++-- swig/inheritance.h | 1 + 7 files changed, 334 insertions(+), 6 deletions(-) commit a2ba7e940e7ce9538ebb083136c06dcc2b52ab65 Author: Nicolas Clapies Date: Wed Mar 2 08:33:08 2005 +0000 Use gchar instead of char. lasso/id-wsf/discovery.c | 2 +- lasso/id-wsf/discovery.h | 2 +- lasso/id-wsf/interaction_profile_service.c | 4 +-- lasso/id-wsf/interaction_profile_service.h | 4 +-- lasso/id-wsf/profile_service.c | 42 +++++++++++++++--------------- lasso/id-wsf/profile_service.h | 42 +++++++++++++++--------------- 6 files changed, 48 insertions(+), 48 deletions(-) commit 4b8ffde37140109d7fc896d7c63836bac16e0b7a Author: Nicolas Clapies Date: Wed Mar 2 08:31:22 2005 +0000 Renamed LassoSaSaslRequest to LassoSaSASLRequest. Idem to LassoSaSASLResponse. lasso/xml/sa_sasl_request.c | 32 ++++++++++++++++---------------- lasso/xml/sa_sasl_request.h | 18 +++++++++--------- lasso/xml/sa_sasl_response.c | 30 +++++++++++++++--------------- lasso/xml/sa_sasl_response.h | 22 +++++++++++----------- 4 files changed, 51 insertions(+), 51 deletions(-) commit 656d132c7b3dc426fd4784cf7f14e3a94ff237f5 Author: Nicolas Clapies Date: Wed Mar 2 08:29:21 2005 +0000 soap envelope / binding support. lasso/id-wsf/authentication.c | 103 ++++++++++++++++++++++++++++++------------ 1 file changed, 74 insertions(+), 29 deletions(-) commit bb14ca8acd62d7cf467fa7437d49617980f122d2 Author: Nicolas Clapies Date: Wed Mar 2 08:27:43 2005 +0000 Added soap swig binding, liberty soap binding swig binding, authentication service swig update swig/Lasso-wsf.i | 342 ++++++++++++++++++++++++++++++++++++++++++++++------- swig/inheritance.h | 9 ++ 2 files changed, 307 insertions(+), 44 deletions(-) commit 16d1224122b8b212b623373e73d646189154b1df Author: Nicolas Clapies Date: Wed Mar 2 08:24:59 2005 +0000 Added soap envelope object to embed specific data from id-wsf.lasso/id-wsf/authentication.c lasso/id-wsf/authentication.h | 6 +++--- lasso/id-wsf/wsf_profile.c | 24 ++++++++++++++++++++++-- lasso/id-wsf/wsf_profile.h | 4 ++++ 3 files changed, 29 insertions(+), 5 deletions(-) commit dafcd5d41e66a95c342a8e036b02d805227df80d Author: Nicolas Clapies Date: Wed Mar 2 08:23:09 2005 +0000 Added soap envelope and soap binding. It is useful for id-wsf but could be used in other parts later. lasso/xml/Makefile.am | 8 +++ lasso/xml/soap_binding_correlation.c | 131 +++++++++++++++++++++++++++++++++++ lasso/xml/soap_binding_correlation.h | 78 +++++++++++++++++++++ lasso/xml/soap_body.c | 120 ++++++++++++++++++++++++++++++++ lasso/xml/soap_body.h | 69 ++++++++++++++++++ lasso/xml/soap_envelope.c | 111 +++++++++++++++++++++++++++++ lasso/xml/soap_envelope.h | 71 +++++++++++++++++++ lasso/xml/soap_header.c | 107 ++++++++++++++++++++++++++++ lasso/xml/soap_header.h | 68 ++++++++++++++++++ lasso/xml/strings.h | 4 +- lasso/xml/xml.c | 4 ++ 11 files changed, 770 insertions(+), 1 deletion(-) commit 3a8676512506f19018170eb0bd3b7934a581700f Author: Frederic Peters Date: Tue Mar 1 11:36:46 2005 +0000 fixed links to API reference docs/lasso-book/writing-a-c-sp.txt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) commit 812c16d3c03878e00873f996d93c0128e769fd88 Author: Frederic Peters Date: Thu Feb 24 19:13:04 2005 +0000 don't require sasl if wsf is not wanted; allow sasl2 dir to be passed to configure; include instead of since mutt does it that way. configure.ac | 27 +++++++++++++++++---------- lasso/Makefile.am | 6 +++--- lasso/extract_types.py | 13 +++++++++++-- lasso/id-wsf/Makefile.am | 13 ++++++++++--- 4 files changed, 41 insertions(+), 18 deletions(-) commit 3d1211dd9f282332a772f3c4e189145fbb94df92 Author: Nicolas Clapies Date: Thu Feb 24 16:48:30 2005 +0000 Removed odd printf(). lasso/id-wsf/authentication.c | 3 --- 1 file changed, 3 deletions(-) commit 95cb53353391556d36a6070d5b68ddd12b6bae1c Author: Nicolas Clapies Date: Thu Feb 24 16:47:16 2005 +0000 Added support of cyrus libsasl in id-wsf authentication service. lasso/id-wsf/authentication.c | 296 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 284 insertions(+), 12 deletions(-) commit d5c84febbb9863fb833bf3a6f25ba1b5c105d75c Author: Nicolas Clapies Date: Thu Feb 24 16:38:46 2005 +0000 Added support of cyrus libsasl in id-wsf authentication service. lasso/id-wsf/Makefile.am | 1 + lasso/id-wsf/authentication.h | 25 +++- lasso/xml/sa_sasl_response.c | 39 +++++- lasso/xml/strings.h | 8 +- lasso/xml/xml.c | 4 + python/Makefile.am | 3 +- swig/Lasso-wsf.i | 311 +++++++++++++++++++++++++++++++++++++++++- 7 files changed, 380 insertions(+), 11 deletions(-) commit 492e69a25a33c6acd51671ae934e734ff9148578 Author: Nicolas Clapies Date: Thu Feb 24 16:29:25 2005 +0000 Added support of cyrus libsasl. Currently it disables wsf if not found. configure.ac | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) commit 4cfbf32cbf074f9234f58af660d2b95c67c12239 Author: Frederic Peters Date: Tue Feb 22 11:21:18 2005 +0000 updated ChangeLog for 0.6.1 ChangeLog | 778 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 778 insertions(+) commit d5992dcff1965b4d081efe49696ab505161ff465 Author: Frederic Peters Date: Tue Feb 22 11:20:17 2005 +0000 told about 0.6.1 NEWS | 9 +++++++++ configure.ac | 6 +++--- doap.rdf | 4 ++++ 3 files changed, 16 insertions(+), 3 deletions(-) commit a6ea70b1be9e8375729bbf2f6ac725add0026842 Author: Frederic Peters Date: Tue Feb 22 11:19:11 2005 +0000 wsf support include file swig/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit fe67e59097f58ef8937f252a2c21b9f7a088613c Author: Frederic Peters Date: Tue Feb 22 11:18:58 2005 +0000 MessageType.cs was removed csharp/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 19916b8a91515b47d5a609896792f85b82200d3e Author: Frederic Peters Date: Mon Feb 21 14:45:20 2005 +0000 updated �� information in reference manual docs/reference/lasso.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 4cbdba491a17891304675251da28eeeb1399b820 Author: Frederic Peters Date: Mon Feb 21 14:41:41 2005 +0000 more hateful Makefile.am to work with both swig 1.3.22 and 1.3.24; perhaps. python/Makefile.am | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 1276043cd294df9776e6421e39a73dcba35bc7a3 Author: Frederic Peters Date: Mon Feb 21 14:29:48 2005 +0000 LassoRequestType disappeared docs/reference/tmpl/profile.sgml | 12 ------------ 1 file changed, 12 deletions(-) commit b43cfb0f3f14eec161ed1e086b04ffe0e2f18c88 Author: Frederic Peters Date: Mon Feb 21 14:29:33 2005 +0000 LassoMessageFormat enum is now documented incode docs/reference/tmpl/node.sgml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit 01d516e3d40e9a9a6170e980c25dc4ebb8021226 Author: Frederic Peters Date: Mon Feb 21 14:28:52 2005 +0000 typo fix and longer description lasso/xml/xml.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit fb47f6ba462d315ab2f7b00ad39616e222cd2aea Author: Frederic Peters Date: Mon Feb 21 14:26:47 2005 +0000 enum documentation lasso/id-ff/provider.h | 60 +++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 47 insertions(+), 13 deletions(-) commit c5d71262223ca48ce113273c05b78fd81aeb87cc Author: Frederic Peters Date: Mon Feb 21 14:21:52 2005 +0000 documented enums lasso/xml/xml.h | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) commit df29025fa14d49ecbaaca614008c8a17ee0043a7 Author: Frederic Peters Date: Mon Feb 21 14:18:51 2005 +0000 removed LassoMessageType from doc docs/reference/lasso-sections.txt | 1 - 1 file changed, 1 deletion(-) commit b2c62fae1469e76b1ae37a6f3a2c8ab57f4d717d Author: Frederic Peters Date: Mon Feb 21 14:18:14 2005 +0000 documented LassoRequestType and killed unused LassoMessageType (it was already unused in 0.6.0 so I allow this as not breaking api) lasso/id-ff/profile.h | 25 ++++++++++++++++--------- swig/Lasso.i | 19 ------------------- 2 files changed, 16 insertions(+), 28 deletions(-) commit b6b1450e3bcb0013c63c187d9c17ec85e887782a Author: Frederic Peters Date: Mon Feb 21 14:16:59 2005 +0000 gtkdoc comment formatting lasso/lasso.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 05ae28182cbcb380545b69e44795aeb46d39ebda Author: Frederic Peters Date: Mon Feb 21 14:09:55 2005 +0000 documented new version check mode lasso/lasso.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) commit 1b1847ccb11ffceac2cf46b97888d34fa6dd588b Author: Frederic Peters Date: Mon Feb 21 13:51:12 2005 +0000 hacking against swig 1.3.24 python/Makefile.am | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) commit a7902b5a04c176854c4c9b5e4a6feb8a5ad4fece Author: Frederic Peters Date: Sat Feb 19 18:20:41 2005 +0000 generated files are best ignored by cvs win32/.cvsignore | 1 + win32/msvc/.cvsignore | 4 ++++ win32/msvc/java/.cvsignore | 2 ++ win32/msvc/php/.cvsignore | 2 ++ win32/msvc/python/.cvsignore | 2 ++ win32/nsis/.cvsignore | 1 + 6 files changed, 12 insertions(+) commit dad8aea073d61df2ffec939b7f190eaef42e8430 Author: Frederic Peters Date: Sat Feb 19 18:18:29 2005 +0000 janitored configure.ac; it shouldn't have been batardized this way. configure.ac | 20 +++++--------------- win32/msvc/lasso_config.h.in | 10 +++++----- 2 files changed, 10 insertions(+), 20 deletions(-) commit f89839053df5f496a3a1cf386698806664a6905f Author: Frederic Peters Date: Sat Feb 19 18:16:25 2005 +0000 missing csharp swig generated file csharp/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 93be74cc16b455df1c6f2fb6cfb5881d06544147 Author: Frederic Peters Date: Sat Feb 19 18:07:18 2005 +0000 removed long useless file lasso/version.h.in | 51 --------------------------------------------------- 1 file changed, 51 deletions(-) commit d2a4035e3dc08c44822a095c5a4925f2dad44bc1 Author: Frederic Peters Date: Sat Feb 19 16:33:48 2005 +0000 define LASSO_WSF_ENABLED swig/Lasso.i | 4 ++++ 1 file changed, 4 insertions(+) commit 41fdc864d82fa777a692ae99f83f7eb8460d0373 Author: Frederic Peters Date: Sat Feb 19 16:28:04 2005 +0000 provide wsf support activation status to swig binding; note to Romain: wtf was LASSO_WSF_ENABLE ? (it appears in rev1.129 of configure.ac without any comment about its purpose) (I removed it) configure.ac | 7 ++++--- swig/.cvsignore | 1 + swig/Lasso.i | 18 +----------------- swig/wsf-support.i.in | 1 + 4 files changed, 7 insertions(+), 20 deletions(-) commit befeb9dc2465b22d22f78521fa1ac39818a83766 Author: Romain Chantereay Date: Fri Feb 18 10:56:53 2005 +0000 Use MSVC binaries. win32/nsis/lasso-full.nsi.in | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) commit 59002fd55c4c4d7207bc87f633e3d8a1e6b8d714 Author: Frederic Peters Date: Fri Feb 18 10:14:54 2005 +0000 corrected enum CheckVersionMode binding (didn't work for c# and java) csharp/Makefile.am | 2 +- swig/Lasso.i | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) commit 310c235a0520f5cafe378a59dafb1355c15710d2 Author: Romain Chantereay Date: Thu Feb 17 18:33:04 2005 +0000 Changed the output file directory to nsis. win32/nsis/python.nsi.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 74c035084379c392a5140410379d5ed2367e873a Author: Romain Chantereay Date: Thu Feb 17 18:27:51 2005 +0000 Added python NSI script. configure.ac | 1 + win32/nsis/python.nsi.in | 146 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 147 insertions(+) commit 083a4f141840404077d647a086a62b5721845848 Author: Frederic Peters Date: Thu Feb 17 13:58:08 2005 +0000 lasso numeric check enum lasso/lasso.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 9ea6f71fbef6b0a6ac9444d9d472e74f0dff52dc Author: Frederic Peters Date: Thu Feb 17 13:35:15 2005 +0000 added dumb numerical mode to checkVersion; added swig binding for this function; generating Lasso.i considered bad idea, cleaned and removed. configure.ac | 1 - lasso/lasso.c | 10 ++++++++++ swig/{Lasso.i.in => Lasso.i} | 17 ++++++----------- swig/Makefile.am | 2 +- 4 files changed, 17 insertions(+), 13 deletions(-) commit 38d7258b4fe3cbde01d00de68d08586e6a9b997a Author: Romain Chantereay Date: Thu Feb 17 11:42:44 2005 +0000 Escape the $ as begin of a variable name adding another '$'. Now the '$$' pass '$' to sed and '$' is end of line and no more begin of variable name. python/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 356917b10030dfa26b91476c59af7587d4392cb8 Author: Romain Chantereay Date: Wed Feb 16 19:37:06 2005 +0000 Updated MSVC projects. win32/msvc/java/java.dsp | 8 ++++---- win32/msvc/lasso.dsp.in | 8 ++++++++ win32/msvc/php/php.dsp | 4 ++-- win32/msvc/python/python.dsp | 4 ++-- 4 files changed, 16 insertions(+), 8 deletions(-) commit 4119ec1861079098bc2957e4672b0974b95b6b0e Author: Romain Chantereay Date: Wed Feb 16 19:30:42 2005 +0000 Now lasso_config.h for MSVC is generated with configure substitutions. win32/msvc/{lasso_config.h => lasso_config.h.in} | 26 +++++++++++++----------- 1 file changed, 14 insertions(+), 12 deletions(-) commit 2f3f58802b254a1b99890527b907060ba1d984cd Author: Romain Chantereay Date: Wed Feb 16 19:28:17 2005 +0000 Added the temporary files for "int res = 0;" declaration to local cleanning rule. python/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit fdce6f59a0dc79443817b525a2fe477b7fd23d6a Author: Romain Chantereay Date: Wed Feb 16 19:27:33 2005 +0000 Added the automake makefile for the MSVC lasso-java project. win32/msvc/java/Makefile.am | 1 + 1 file changed, 1 insertion(+) commit 714f79881223e78291dee2ff9642d73e288ee192 Author: Romain Chantereay Date: Wed Feb 16 19:26:43 2005 +0000 Added DLL filename subsitution. win32/nsis/lasso-full.nsi.in | 4 ++-- win32/nsis/lasso-lite.nsi.in | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) commit ffc9162571cd63b8438c50cecc40f039f6a094ee Author: Romain Chantereay Date: Wed Feb 16 19:26:00 2005 +0000 Distribute generated nsi files too in order to permit non-autotools users to create lasso installers. win32/nsis/Makefile.am | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit dc0802a142293c3b2eb1f719bf88883032dce555 Author: Romain Chantereay Date: Wed Feb 16 19:25:23 2005 +0000 Include lasso project input file and java subdirectory in distribution and automake system. win32/msvc/Makefile.am | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit d232d110347398eb5f0d89cc8662c7049160764c Author: Romain Chantereay Date: Wed Feb 16 19:24:26 2005 +0000 Now Lasso MSVC Project is dynamicaly generated. win32/msvc/{lasso.dsp => lasso.dsp.in} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit deaaa8b2c5165efc42d8b60de6c4014d134c3ef7 Author: Romain Chantereay Date: Wed Feb 16 19:23:20 2005 +0000 The produced resource file is distributed too in order to permit MSVC users to compile LASSO. win32/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit a8167bd2c0b83dfc3a3e1246c1a2c984d9531571 Author: Romain Chantereay Date: Wed Feb 16 19:22:49 2005 +0000 Now Resource file is generated from configure variable (for versionning and file name). win32/{lasso.rc => lasso.rc.in} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 113d6a4cf03f375e6e8638c2cffffd0c95999783 Author: Romain Chantereay Date: Wed Feb 16 19:22:14 2005 +0000 No more Lasso.i in the repository, it is generated from Lasso.i.in. swig/Lasso.i | 6596 ---------------------------------------------------------- 1 file changed, 6596 deletions(-) commit 5f63d5a7ca8a203a2e763fa4c2dceb795213859f Author: Romain Chantereay Date: Wed Feb 16 19:20:32 2005 +0000 The SWIG input file is distributed too. swig/Makefile.am | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit c2be89f8655e420edd376bf475f12399f136428f Author: Romain Chantereay Date: Wed Feb 16 19:20:13 2005 +0000 Now The SWIG interface is "generated" by configure. The following constants are set and exported to bindings: - LASSO_VERSION_MAJOR - LASSO_VERSION_MINOR - LASSO_VERSION_SUBMINOR - LASSO_WSF_ENABLE swig/Lasso.i | 6 +- swig/Lasso.i.in | 6596 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 6601 insertions(+), 1 deletion(-) commit 902d682ebc576c409b2e9a435848671ab04404ca Author: Romain Chantereay Date: Wed Feb 16 19:17:56 2005 +0000 result have to be freed with g_free. corrected a incode declaration. As regexp does not manage multiline expressions, the comment is replaced by the res integer declaration. python/Makefile.am | 13 +++++++++++++ 1 file changed, 13 insertions(+) commit 728dddce1bacd0c8708dd00b5f3bbe7d3e9c5bc9 Author: Romain Chantereay Date: Wed Feb 16 19:16:41 2005 +0000 Fix a syntax error only reported by MSVC. Create a void pointer in an empty structure declaration. java/Makefile.am | 3 +++ 1 file changed, 3 insertions(+) commit 9088f05796f92511b92a2fb76adcdaeaca49649f Author: Romain Chantereay Date: Wed Feb 16 19:15:54 2005 +0000 Now some version information are propagated in order to perform substitions. New files are not dynamicaly generated. configure.ac | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) commit 39ea1784e37d5e048e144ab64883a60c409ebe19 Author: Romain Chantereay Date: Wed Feb 16 17:59:34 2005 +0000 Put swig sub directory before bindings directories. Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 893ea385c29a9b1e8af596831e59dfda73c06978 Author: Romain Chantereay Date: Tue Feb 15 18:10:14 2005 +0000 Set only used constants. win32/msvc/lasso_config.h | 50 ----------------------------------------------- 1 file changed, 50 deletions(-) commit e1b461ba4e410d0f3f6f34edee0a6ad2425106da Author: Romain Chantereay Date: Tue Feb 15 17:53:50 2005 +0000 No more lasso_config.h constants export in LASSO bindings. swig/Lasso.i | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 21b50795d66a4ad1ecb42f0cd12a0e1f33dbacf0 Author: Romain Chantereay Date: Tue Feb 15 11:01:38 2005 +0000 Added java project to lasso workspace. win32/msvc/java/java.dsp | 107 +++++++++++++++++++++++++++++++++++++++++++++++ win32/msvc/lasso.dsw | 15 +++++++ 2 files changed, 122 insertions(+) commit db8a12222ee7236d347b70ea2c28a72d913e37bb Author: Romain Chantereay Date: Tue Feb 15 10:45:51 2005 +0000 Updated Lasso workspace. win32/msvc/lasso.dsp | 4 ++-- win32/msvc/lasso.dsw | 9 ++++++--- win32/msvc/python/python.dsp | 8 ++++---- 3 files changed, 12 insertions(+), 9 deletions(-) commit 1cc36021d5f4c722ab1dd5d23ed1b60d43c02045 Author: Romain Chantereay Date: Tue Feb 15 10:45:13 2005 +0000 Added a Windows configured lasso_config.h. Perhaps we have to transform it into a special lasso_config.h.in in order to have the version number dynamicaly configured, and only this value (not the HAVE_FOO). win32/msvc/lasso_config.h | 89 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) commit d6dcec71fbff3efb5e665ba77a520a1f8e215551 Author: Frederic Peters Date: Tue Feb 15 09:16:34 2005 +0000 ship msvc project files configure.ac | 3 +++ win32/Makefile.am | 4 +--- win32/msvc/Makefile.am | 3 +++ win32/msvc/php/Makefile.am | 1 + win32/msvc/python/Makefile.am | 1 + 5 files changed, 9 insertions(+), 3 deletions(-) commit 92280ccd7ed51064e7f1cc3ab5006ecaedc337be Author: Frederic Peters Date: Mon Feb 14 16:23:12 2005 +0000 use g_free(), not free() (so it works under windows) swig/Lasso.i | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit a59bc65c10dfb689dfc0a9352e9ed22c9e88f44d Author: Romain Chantereay Date: Mon Feb 14 13:55:48 2005 +0000 Included xml.h for better lasso_strerror export declaration. lasso/errors.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 3f4d3f433a4554dfb94c772756ae6350c3b75df0 Author: Nicolas Clapies Date: Mon Feb 14 13:08:14 2005 +0000 Added status code constants for wsf authentication service. lasso/xml/strings.h | 4 ++++ 1 file changed, 4 insertions(+) commit 8de7852e54a085cdaf9170fc0f99e99df2c99a01 Author: Frederic Peters Date: Mon Feb 14 13:05:21 2005 +0000 added missing authentication.c to Makefile.am lasso/id-wsf/Makefile.am | 2 ++ 1 file changed, 2 insertions(+) commit e2f37807298a614bd4c0c041052764f223ab383d Author: Nicolas Clapies Date: Mon Feb 14 10:46:24 2005 +0000 Added high level of authentication service : standard methods of a lasso service. Must be improved depending on the needs from souk implementation. lasso/id-wsf/authentication.c | 210 ++++++++++++++++++++++++++++++++++++++++++ lasso/id-wsf/authentication.h | 80 ++++++++++++++++ 2 files changed, 290 insertions(+) commit 7b94322fe0d4558aab5d448d4c3411e8d8545acf Author: Nicolas Clapies Date: Mon Feb 14 10:44:32 2005 +0000 Added duplication of mechanism string parameter in constructor. lasso/xml/sa_sasl_request.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 8335f55c5d7d2a03e3c897a3265420aa8d70fa18 Author: Nicolas Clapies Date: Mon Feb 14 10:43:11 2005 +0000 Added missing status parameter in lasso_sa_sasl_response_new() method. Added lasso_sa_sasl_response_new_from_message(). lasso/xml/sa_sasl_response.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit 14a8961957173369fce3c3547b7b68e090e2f06a Author: Emmanuel Raviart Date: Sun Feb 13 16:51:39 2005 +0000 Added Lasso error strings to SWIG exception messages. swig/Lasso.i | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) commit 51e7ba4a282336f279ab0cbec0d15833b7c5fd45 Author: Emmanuel Raviart Date: Sun Feb 13 12:59:52 2005 +0000 Added two missing ID-WSF functions to LECP binding. swig/Lasso.i | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) commit 8f3b1db6d51e5b187d67fdea611be0f0641dadad Author: Romain Chantereay Date: Fri Feb 11 18:05:51 2005 +0000 Update MSVC workspace and projects. win32/msvc/lasso.dsp | 102 +++++++++++++++++++++++++++++++++++++++-- win32/msvc/lasso.dsw | 15 ++++++ win32/msvc/python/python.dsp | 107 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 219 insertions(+), 5 deletions(-) commit d3b6dabb51102e4a6020797025f0f89ac7d3c0e2 Author: Frederic Peters Date: Fri Feb 11 14:35:43 2005 +0000 checks provider has been found lasso/id-ff/login.c | 3 +++ 1 file changed, 3 insertions(+) commit 7f4c9de3ae7a9dc7592ccb5dc516f3153c45ac4c Author: Frederic Peters Date: Fri Feb 11 14:25:17 2005 +0000 if g_hash_table_find doesn't find anything, check twice to be sure to return NULL. lasso/id-ff/server.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit 532be692e0ed09561d5047bc999a1e2d32b0c18a Author: Romain Chantereay Date: Fri Feb 11 12:05:30 2005 +0000 g_vsnprintf taked the place of vsnprintf. lasso/xml/private.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit f40c157238e62e60d26dcf26c4c94979a0c4f0ff Author: Frederic Peters Date: Fri Feb 11 11:23:43 2005 +0000 check param for NULL lasso/id-ff/profile.c | 3 +++ 1 file changed, 3 insertions(+) commit 11ecd3d362d029b8b2c0920d31895057d5e5135f Author: Frederic Peters Date: Fri Feb 11 10:56:28 2005 +0000 cflags_save ate my breakfast; removed. configure.ac | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit 8020a6981ae82414752e61ca6d84932b1e44d5af Author: Nicolas Clapies Date: Thu Feb 10 16:44:36 2005 +0000 Added low level classes for wsf authentication service. SASLResponse is only tested with required Status element. lasso/xml/Makefile.am | 10 +++ lasso/xml/sa_parameter.c | 123 +++++++++++++++++++++++++++++ lasso/xml/sa_parameter.h | 70 +++++++++++++++++ lasso/xml/sa_password_transforms.c | 134 ++++++++++++++++++++++++++++++++ lasso/xml/sa_password_transforms.h | 72 +++++++++++++++++ lasso/xml/sa_sasl_request.c | 145 +++++++++++++++++++++++++++++++++++ lasso/xml/sa_sasl_request.h | 76 ++++++++++++++++++ lasso/xml/sa_sasl_response.c | 153 +++++++++++++++++++++++++++++++++++++ lasso/xml/sa_sasl_response.h | 77 +++++++++++++++++++ lasso/xml/sa_transform.c | 131 +++++++++++++++++++++++++++++++ lasso/xml/sa_transform.h | 73 ++++++++++++++++++ lasso/xml/strings.h | 3 + 12 files changed, 1067 insertions(+) commit 522c53f21c0a6f2498a2ec5303310c91660b0267 Author: Frederic Peters Date: Thu Feb 10 15:03:43 2005 +0000 removed unecessary vsnprintf declaration lasso/xml/private.h | 5 ----- 1 file changed, 5 deletions(-) commit 6d4c469d19cca2386f6708cd6df36cbf147fe0c1 Author: Frederic Peters Date: Thu Feb 10 15:02:43 2005 +0000 we don't need yet another implement of vsnprintf, we can use glib win32/msvc/vsnprintf.c | 790 ------------------------------------------------- 1 file changed, 790 deletions(-) commit 4afd4e95cb6304ce552929e4dc279c3573c70da8 Author: Frederic Peters Date: Thu Feb 10 14:57:55 2005 +0000 use glib version of vsnprintf lasso/xml/tools.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 5c4638053f5a9c0045819c5313ef9e57423cf2cf Author: Frederic Peters Date: Thu Feb 10 14:56:27 2005 +0000 use gtk-doc style function comment for DllMain lasso/lasso.c | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) commit b0405dfe97c776f323f7e024b0d9345e9b62e399 Author: Frederic Peters Date: Thu Feb 10 14:05:17 2005 +0000 autofill nsi files with lasso version number configure.ac | 7 +++++++ win32/nsis/Makefile.am | 2 +- win32/nsis/{jlasso-lite.nsi => jlasso-lite.nsi.in} | 2 +- win32/nsis/{lasso-deps.nsi => lasso-deps.nsi.in} | 4 ++-- win32/nsis/{lasso-full.nsi => lasso-full.nsi.in} | 6 +++--- win32/nsis/{lasso-lite.nsi => lasso-lite.nsi.in} | 6 +++--- 6 files changed, 17 insertions(+), 10 deletions(-) commit 6f87bd45a9119535b59a9dc089a3dd5bc3cf3649 Author: Nicolas Clapies Date: Thu Feb 10 13:53:36 2005 +0000 Now lasso_lib_request_authn_context_new() returns LassoLibRequestAuthnContex* instead of LassoNode*. lasso/xml/lib_authn_request.c | 3 +-- lasso/xml/lib_request_authn_context.c | 2 +- lasso/xml/lib_request_authn_context.h | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) commit 25a54477a07443bde67cba3bb55eb1dab1fd4309 Author: Frederic Peters Date: Thu Feb 10 09:48:58 2005 +0000 reworked a bit documentation build system and added detection of inkscape and xsltproc in configure Makefile.am | 5 +---- configure.ac | 15 +++++++++++---- docs/Makefile.am | 6 ++++-- docs/lasso-book/Makefile.am | 4 ++++ docs/lasso-book/figures/Makefile.am | 4 ++-- docs/reference/tmpl/login.sgml | 22 ++++++++++++++++++++++ docs/reference/tmpl/profile.sgml | 4 ++++ docs/reference/tmpl/server.sgml | 23 +++++++++++++++++++++++ 8 files changed, 71 insertions(+), 12 deletions(-) commit 4556818cc32ab68aa4815a541e562f2bb7687c8d Author: Romain Chantereay Date: Tue Feb 8 19:28:11 2005 +0000 Removed XMLSEC_DYNAMIC_LOADING because it is a non-sense. We are using xmlsec-openssl specific functions in code, so there is no choice, we have to use openssl. (Fix a build warning). win32/msvc/lasso.dsp | 4 ++-- win32/msvc/php/php.dsp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) commit 3fc96e5832d407d6b98bf11329bb4b7bdfb46ea7 Author: Romain Chantereay Date: Tue Feb 8 19:16:30 2005 +0000 Fixed type error. lasso/xml/tools.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit dd9eef5e0baeed22fc6ade3ea5cec1c391c37c27 Author: Frederic Peters Date: Tue Feb 8 18:49:58 2005 +0000 allocate query fields memory with glib g_malloc (and free it with g_free) lasso/id-ff/login.c | 2 +- lasso/xml/tools.c | 9 +++++---- lasso/xml/xml.c | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) commit d7b904c47eea90e1e6f5d935e27876cf5a74e845 Author: Frederic Peters Date: Tue Feb 8 18:47:07 2005 +0000 memory allocated by libxml2, freed by xmlFree lasso/id-ff/provider.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 8c65f9fbed54b44f6aa12b7be9c8db7e0430a5ef Author: Frederic Peters Date: Tue Feb 8 18:44:51 2005 +0000 replaced free() by xmlFree() when freeing strings created by libxml2 lasso/id-ff/login.c | 4 ++-- lasso/xml/xml.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) commit e470c7fc4b018939d69cdac584038e3f5b8c481e Author: Frederic Peters Date: Tue Feb 8 18:02:26 2005 +0000 replaced free() with correct libraries function (glib and libxml2) lasso/xml/tools.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 5362e36c0c9d874c659dcf7fce03e7628d0f2f82 Author: Frederic Peters Date: Tue Feb 8 13:57:07 2005 +0000 do not include wsf functions when not using wsf swig/Lasso.i | 6 ++++++ 1 file changed, 6 insertions(+) commit 5919c7c2def41ed0b46615a33e603edf940b7f65 Author: Frederic Peters Date: Tue Feb 8 13:56:36 2005 +0000 step.xsl is in $(srcdir) docs/lasso-book/figures/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 647cc75f0b329cb434d50e975ec5b9c89e95e4fc Author: Frederic Peters Date: Tue Feb 8 13:13:20 2005 +0000 updated debian packaging to what has just been uploaded to sid changelog | 26 ++++++++++++++++++++++++++ control | 12 ++++++------ copyright | 3 +-- liblasso1-dev.dirs => liblasso3-dev.dirs | 0 liblasso1-dev.files => liblasso3-dev.files | 0 liblasso1.dirs => liblasso3.dirs | 0 liblasso1.files => liblasso3.files | 0 php4-lasso.files | 2 +- rules | 2 +- 9 files changed, 35 insertions(+), 10 deletions(-) commit be6e7eafccb686cf5bff4bdf1e89e9c8e7aea4ca Author: Frederic Peters Date: Tue Feb 8 13:13:20 2005 +0000 updated debian packaging to what has just been uploaded to sid debian/changelog | 26 ++++++++++++++++++++++ debian/control | 12 +++++----- debian/copyright | 3 +-- debian/{liblasso1-dev.dirs => liblasso3-dev.dirs} | 0 .../{liblasso1-dev.files => liblasso3-dev.files} | 0 debian/{liblasso1.dirs => liblasso3.dirs} | 0 debian/{liblasso1.files => liblasso3.files} | 0 debian/php4-lasso.files | 2 +- debian/rules | 2 +- 9 files changed, 35 insertions(+), 10 deletions(-) commit f83d664cbf1d1d7d772f1ac13f50c0967f91f57d Author: Frederic Peters Date: Tue Feb 8 12:30:54 2005 +0000 that inline should be ok everywhere lasso/xml/xml.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) commit d0895fab77a716f0ae2f8c8deceac89a601b9860 Author: Frederic Peters Date: Tue Feb 8 11:35:14 2005 +0000 ultra magic swig search&replace; compiles with new debian php packages (and old ones too) php/patch_swig_output.py | 7 +++++++ 1 file changed, 7 insertions(+) commit 9687522fb3ad715d4c4e5d59f4acb82edba5dca3 Author: Romain Chantereay Date: Tue Feb 8 11:15:46 2005 +0000 Removed bad build configuration. win32/msvc/lasso.dsp | 60 ++-------------------------------------------------- 1 file changed, 2 insertions(+), 58 deletions(-) commit 16082a5adf7791553da463858ca77bf0ecad55d3 Author: Romain Chantereay Date: Tue Feb 8 11:13:01 2005 +0000 Added MS VC worspace and projets. Currently two projects: - Lasso DLL - PHP binding win32/msvc/lasso.dsp | 1023 ++++++++++++++++++++++++++++++++++++++++++++++++ win32/msvc/lasso.dsw | 41 ++ win32/msvc/php/php.dsp | 111 ++++++ 3 files changed, 1175 insertions(+) commit 0e9959106de8e82be5a2697db1a4b0008c0bd3f5 Author: Romain Chantereay Date: Tue Feb 8 11:11:23 2005 +0000 Added the vsnprintf function code of Patrick Powell for MS Visual C users. win32/msvc/vsnprintf.c | 790 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 790 insertions(+) commit 9490cb8b78f6c7f52fb71ab2664045937e9e42c1 Author: Romain Chantereay Date: Tue Feb 8 11:07:01 2005 +0000 If vsnprintf is not available, the function is declared in the private.h header file. lasso/xml/private.h | 5 +++++ 1 file changed, 5 insertions(+) commit eb5397da726e673e9af8d82adda0ea1a411f4ddc Author: Frederic Peters Date: Tue Feb 8 10:55:53 2005 +0000 another php api change bites the dust php/patch_swig_output.py | 3 +++ 1 file changed, 3 insertions(+) commit d6ccc92fb6b9260bc112537bb43e71c96ea1db6a Author: Romain Chantereay Date: Tue Feb 8 10:46:18 2005 +0000 __inline under MSVC. lasso/xml/xml.c | 4 ++++ 1 file changed, 4 insertions(+) commit d09652cb2e9d9853ec3fa4c2d328d26553fac330 Author: Frederic Peters Date: Tue Feb 8 10:42:16 2005 +0000 first fix for debian php package abi changes; zend_register_internal_class_ex gained a mysterious parameter php/patch_swig_output.py | 5 +++++ 1 file changed, 5 insertions(+) commit 288edcd9f5fef73db4d3fb491958466cf6e3e929 Author: Frederic Peters Date: Tue Feb 8 10:41:47 2005 +0000 obviously static lasso/xml/private.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit f3f7b2e1372b4767f97965153116ab5cbc2a9010 Author: Frederic Peters Date: Tue Feb 8 10:31:21 2005 +0000 distribute patch_swig_output; it might come handy php/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit e87dc10be14af2ae21e26089b17d78e65ddf9a22 Author: Frederic Peters Date: Tue Feb 8 10:25:00 2005 +0000 variables and functions shouldn't have the same names lasso/id-ff/lecp.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) commit ba097b51bc258e12413633e25c55a85e1281e043 Author: Frederic Peters Date: Tue Feb 8 10:16:00 2005 +0000 fixed variable name lasso/xml/private.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit eb43346d79b1e2d3e3cc54874e118417ed794142 Author: Frederic Peters Date: Tue Feb 8 10:14:01 2005 +0000 detect when it is possible to use variadic macros and fall back to inline functions when it is not the case. configure.ac | 15 +++++++++++++++ lasso/xml/private.h | 25 +++++++++++++++++++++---- 2 files changed, 36 insertions(+), 4 deletions(-) commit 32bc5ad3616a474311060ecaa8552b1804c3fdb0 Author: Emmanuel Raviart Date: Tue Feb 8 00:34:58 2005 +0000 Added missing snippet for element "any" in dst:NewData. lasso/xml/dst_new_data.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit c045349030410f25e2edef0ddbc94569d8234fd2 Author: Frederic Peters Date: Sat Feb 5 19:39:29 2005 +0000 use new figures in documentation docs/lasso-book/figures/.cvsignore | 2 ++ docs/lasso-book/figures/Makefile.am | 13 +++++++------ docs/lasso-book/liberty-architecture.rst | 20 +++++++------------- 3 files changed, 16 insertions(+), 19 deletions(-) commit 169aaa14f91710ce666906050fa7c37b9890bd15 Author: Frederic Peters Date: Sat Feb 5 19:29:06 2005 +0000 New figures for documentation; automake and makefile stuffs to generate png out of svg (with inkscape) out of template svg (with xsltproc). Needs to check for those tools in configure.ac configure.ac | 1 + docs/lasso-book/Makefile.am | 3 + docs/lasso-book/figures/.cvsignore | 2 + docs/lasso-book/figures/Makefile.am | 50 + docs/lasso-book/figures/slo-sp-soap.svg | 2415 ++++++++++ docs/lasso-book/figures/sso-brws-art.svg | 6764 +++++++++++++++++++++++++++++ docs/lasso-book/figures/sso-brws-post.svg | 6723 ++++++++++++++++++++++++++++ docs/lasso-book/figures/step.xsl | 34 + 8 files changed, 15992 insertions(+) commit 6cc0ebee5ae12cceb87472b28b72f324c39e4a5c Author: Frederic Peters Date: Sat Feb 5 16:15:53 2005 +0000 removed all %s escaping sequences from lasso error strings; as a side effect this simplifies critical_error macro, porting to non-gcc compilers should be easier. Along the way I also fixed the long standing bug #256. lasso/errors.c | 29 ++++++++++++++--------------- lasso/id-ff/defederation.c | 12 ++++-------- lasso/id-ff/lecp.c | 3 +-- lasso/id-ff/login.c | 23 ++++++++--------------- lasso/id-ff/logout.c | 18 ++++++------------ lasso/id-ff/name_identifier_mapping.c | 19 ++++++------------- lasso/id-ff/name_registration.c | 22 +++++++--------------- lasso/xml/private.h | 6 +----- lasso/xml/tools.c | 16 +++++++--------- 9 files changed, 54 insertions(+), 94 deletions(-) commit 9da138f18143409795313e34799ce3fba241e011 Author: Frederic Peters Date: Sat Feb 5 16:13:12 2005 +0000 marked types.c and symbols.sym as phony targets so they are rebuilt every time lasso/Makefile.am | 1 + 1 file changed, 1 insertion(+) commit a4f68f5002d3b67350ee894b106cd0edd1c5ac40 Author: Frederic Peters Date: Sat Feb 5 15:43:23 2005 +0000 more appropriate error code lasso/id-ff/logout.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit d02d1d2b8f97f1593115d7eedafd0b5647522415 Author: Frederic Peters Date: Sat Feb 5 15:34:46 2005 +0000 removed remaining compiler warning (unused variable) from id-wsf/ lasso/id-wsf/wsf_profile.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) commit 44dde5c7973cc37b8213b814d5a596f2ca22339c Author: Frederic Peters Date: Sat Feb 5 15:25:32 2005 +0000 correctly use id-ff 1.1 xml namespace in backward compatibility mode lasso/xml/xml.c | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) commit 6419b681762e8ac00c8bea6ed5bc1c4b4dfdbde9 Author: Frederic Peters Date: Sat Feb 5 14:49:30 2005 +0000 Updated documentation files nobody cared about. README.JAVA | 6 ++++-- README.WIN32 | 9 +++------ 2 files changed, 7 insertions(+), 8 deletions(-) commit 0869680575ff607e69ba25fb323aca4323d6826e Author: Frederic Peters Date: Fri Feb 4 15:12:25 2005 +0000 added tests to fix bug #407 and avoir similar ones lasso/id-ff/identity.c | 6 ++++++ lasso/id-ff/session.c | 6 ++++++ lasso/xml/xml.c | 6 ++++++ 3 files changed, 18 insertions(+) commit cef5e8352e751543034ee2c5aa0c259630fc67d9 Author: Frederic Peters Date: Fri Feb 4 15:11:50 2005 +0000 added testcase for bug #407 tests/basic_tests.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) commit 4ba482fbdbf85921a3b8b8f1a958d7df5db15e33 Author: Frederic Peters Date: Fri Feb 4 14:25:35 2005 +0000 all query fields are restored to the same lib:Extension; there are no other way. python/tests/profiles_tests.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 92cfcd8b00be1efc29bdc9ae158af937613ab1ae Author: Frederic Peters Date: Fri Feb 4 14:25:06 2005 +0000 restore a from unknown query string elements; all of them are merged in the same lasso/xml/xml.c | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) commit f8b7ea9d9765845f9c2b688f82cf95341985f239 Author: Frederic Peters Date: Fri Feb 4 14:16:24 2005 +0000 use c99 construct for variadic macros when not using gcc (still missing a third alternative for non-(c99||gcc) compilers lasso/xml/private.h | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) commit 07ed102b79cd0b887512b4cecb28290663d4f7da Author: Emmanuel Raviart Date: Thu Feb 3 13:04:36 2005 +0000 Lasso requires glib and gobject >= 2.4.0 (when compiled with glib 2.2.3, it generates an error: undefined symbol g_hash_table_find). configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 5cdc5b06f43bf9ad7bfd0663366db10c4c33d1cc Author: Emmanuel Raviart Date: Wed Feb 2 12:28:22 2005 +0000 Added a test converting an AuthnRequest with an extension to and from a query. It fails. python/tests/profiles_tests.py | 50 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) commit 2ae6eb5da08e39c88dc3f11ad9dbe4ac2212f130 Author: Frederic Peters Date: Wed Feb 2 00:08:16 2005 +0000 correctly deals with RequestAuthnContext when rebuilding AuthnRequest from query string lasso/xml/lib_authn_request.c | 8 ++++++++ lasso/xml/xml.c | 6 +++--- 2 files changed, 11 insertions(+), 3 deletions(-) commit 75732c8294328c1fcd75e94a84e81b3296c837db Author: Emmanuel Raviart Date: Tue Feb 1 21:48:57 2005 +0000 Corrected typo in constant. Added test for AuthnContext in AuthnRequest. lasso/xml/strings.h | 2 +- python/tests/profiles_tests.py | 42 ++++++++++++++++++++++++++++++++++++++++++ swig/Lasso.i | 2 +- 3 files changed, 44 insertions(+), 2 deletions(-) commit 408898834d2d962d634b265fed62666312be2976 Author: Emmanuel Raviart Date: Sun Jan 30 19:08:28 2005 +0000 Corrected SIS namespaces. lasso/xml/strings.h | 4 ++-- swig/Lasso-wsf.i | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) commit 2e627000b69be73c279da79f394e3d5b19fb01bd Author: Frederic Peters Date: Sun Jan 30 14:02:26 2005 +0000 doesn't mention wsf files for now; a better solution will be devised in time csharp/Makefile.am | 20 ++++++-------------- java/Makefile.am | 20 ++++++-------------- 2 files changed, 12 insertions(+), 28 deletions(-) commit af1459ccd9217d5868f87d821aab52e85a06252a Author: Frederic Peters Date: Sat Jan 29 18:48:41 2005 +0000 removed extraneous liberty namespace registration and noted a future fix to LECP to do. lasso/id-ff/lecp.c | 1 + lasso/id-ff/provider.c | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) commit f65d866ecf8a914e8f948c2c01eba1474461568b Author: Emmanuel Raviart Date: Sat Jan 29 14:35:43 2005 +0000 SWIG: Use WSF_SUPPORT instead of WSF_ENABLED as constant in bindings. swig/Lasso.i | 14 ++++++-------- swig/inheritance.h | 2 +- 2 files changed, 7 insertions(+), 9 deletions(-) commit 7a42f38299a21d29d4b4d8253583fed61a29291f Author: Emmanuel Raviart Date: Sat Jan 29 13:39:21 2005 +0000 Typo correction. swig/Lasso-wsf.i | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 5f63c5d2b08ec3752370bf0b190fbf8b38edf087 Author: Emmanuel Raviart Date: Sat Jan 29 13:37:06 2005 +0000 Reverted previous replacement of #if LASSO_WSF_ENABLED with #ifdef LASSO_WSF_ENABLED. swig/Lasso.i | 3 +-- swig/inheritance.h | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) commit 1c67e6be332bea587c4f2996cc2d8ec71e88e645 Author: Nicolas Clapies Date: Sat Jan 29 13:02:14 2005 +0000 Replaced #if LASSO_WSF_ENABLED by ifdef LASSO_WSF_ENABLED to enable wsf in bindings. swig/Lasso.i | 3 ++- swig/inheritance.h | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) commit ff7ac55ac11dc952ef1f35e9602356f03585ca37 Author: Nicolas Clapies Date: Sat Jan 29 12:41:40 2005 +0000 Removed old comment. lasso/id-wsf/profile_service.h | 4 ---- 1 file changed, 4 deletions(-) commit dc663202f29d03e7cf3e3d0d9c3cb47de7ce7c69 Author: Nicolas Clapies Date: Sat Jan 29 12:39:30 2005 +0000 Removed optional option parameter in lasso_discovery_add_insert_entry(). lasso/id-wsf/discovery.c | 10 +--------- lasso/id-wsf/discovery.h | 7 +++---- swig/Lasso-wsf.i | 3 +-- 3 files changed, 5 insertions(+), 15 deletions(-) commit 3c69dc0aae7f3279be7cd8398b25f6475a843ac2 Author: Emmanuel Raviart Date: Sat Jan 29 12:03:32 2005 +0000 SWIG: Added Attribute to AttributeStatement. swig/Lasso.i | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) commit e8d57bf348f8a2fc64d899cd95457f4cf3cb9708 Author: Emmanuel Raviart Date: Sat Jan 29 10:56:13 2005 +0000 Added binding for saml:AttributeValue. Corrected use of constant LASSO_WSF_ENABLED in binding. csharp/.cvsignore | 1 + csharp/Makefile.am | 2 +- java/.cvsignore | 1 + java/Makefile.am | 2 +- swig/Lasso.i | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++++- swig/inheritance.h | 1 + 6 files changed, 64 insertions(+), 3 deletions(-) commit 15c1256a750b9f3ee28f088f562af3e977f79b9c Author: Emmanuel Raviart Date: Fri Jan 28 23:51:41 2005 +0000 SWIG: Added constant WSF_ENABLED and VERSION_DECIMAL to bindings. swig/Lasso.i | 12 ++++++++++-- swig/inheritance.h | 2 +- 2 files changed, 11 insertions(+), 3 deletions(-) commit 43c7748560c57d4d38088f9a2ddcc7121cb56c6d Author: Frederic Peters Date: Fri Jan 28 15:57:56 2005 +0000 compatibility with previous liberty specifications; still missing support for old elements in lib:AuthnRequest (requires some deep thought) but it may already be working as is. lasso/id-ff/login.c | 128 ++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 93 insertions(+), 35 deletions(-) commit 2c049f7c0e20aecd1c4f57b66c34372eadf4f626 Author: Romain Chantereay Date: Fri Jan 28 15:45:18 2005 +0000 Updated to lasso 0.6.0 with soname 3. Updated dependencies too. win32/nsis/jlasso-lite.nsi | 4 ++-- win32/nsis/lasso-deps.nsi | 10 +++++----- win32/nsis/lasso-full.nsi | 16 ++++++++-------- win32/nsis/lasso-lite.nsi | 10 +++++----- 4 files changed, 20 insertions(+), 20 deletions(-) commit 808afde754b4ea811a027b198f479d37f539a617 Author: Frederic Peters Date: Fri Jan 28 14:19:40 2005 +0000 initializes AuthnResponse in process_authn_request_msg; it is necessary since intermediary function may want to set status code. (fix a crasher bug when using isPassive and POST) lasso/id-ff/login.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) commit 319d22b87eb855cec5fb243cfe31860c51909e59 Author: Romain Chantereay Date: Fri Jan 28 14:01:53 2005 +0000 SONAME:3 no more 1. win32/lasso.rc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 7a4de405c3716e7157e69496c6b19e0c8d37ce8a Author: Frederic Peters Date: Fri Jan 28 13:29:14 2005 +0000 produce 1.1 requests and notifications when interoperating with previous liberty implementations lasso/id-ff/defederation.c | 5 +++++ lasso/id-ff/login.c | 4 ++++ lasso/id-ff/logout.c | 6 ++++++ lasso/id-ff/name_identifier_mapping.c | 5 +++++ lasso/id-ff/name_registration.c | 5 +++++ lasso/id-ff/provider.c | 18 +++++++++++------- lasso/id-ff/providerprivate.h | 7 +++++++ 7 files changed, 43 insertions(+), 7 deletions(-) commit 22b3a159a1aa09d152894d79d03e0bfd22a584dc Author: Frederic Peters Date: Fri Jan 28 13:18:29 2005 +0000 include missing identityprivate.h lasso/id-ff/defederation.c | 1 + 1 file changed, 1 insertion(+) commit 01ca073ac74744199408a6b45f92b531264ae97c Author: Frederic Peters Date: Fri Jan 28 13:02:18 2005 +0000 liberty 1.1 metadata were in another namespace "http://projectliberty.org/schemas/core/2002/12" lasso/id-ff/provider.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) commit 4721fdbf344fe287402ccf64535df26ec0ccbc6f Author: Frederic Peters Date: Fri Jan 28 12:02:24 2005 +0000 store liberty 1.2 conformance when loading metadata; it will allow to deal with previous liberty implementations lasso/id-ff/provider.c | 3 +++ 1 file changed, 3 insertions(+) commit 8444d465a2df2f7a2b748b03724d89c2abaf6ca3 Author: Frederic Peters Date: Fri Jan 28 11:45:09 2005 +0000 samlp:Request Major and Minor versions are saml, not lib If the element or its type is in a SAML namespace (urn:oasis:names:tc:SAML:1.0:assertion or urn:oasis:names:tc:SAML:1.0:protocol), then the values MUST be 1 and 1 respectively. lasso/id-ff/login.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 3243ff6681b1bbb421f6bb27b12ade9281e045f8 Author: Frederic Peters Date: Fri Jan 28 10:36:07 2005 +0000 abort configure if python is not found configure.ac | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit 299d5bd2cfe15cf4288d04ac9707fd8cfddf014b Author: Frederic Peters Date: Fri Jan 28 10:25:19 2005 +0000 Document new functions; pretty please. Fixed memory leak introduced in lasso_profile_get_request_type_from_soap_msg; moved wsf chunk from build_assertion to its own function. docs/reference/lasso-sections.txt | 4 ++ lasso/id-ff/login.c | 100 +++++++++++++++++++++++++------------- lasso/id-ff/login.h | 2 +- lasso/id-ff/profile.c | 43 +++++++--------- lasso/id-ff/server.c | 45 ++++++++++++----- 5 files changed, 122 insertions(+), 72 deletions(-) commit 472aded71ad91451e94d3c2449b8258779a0d692 Author: Emmanuel Raviart Date: Thu Jan 27 23:41:05 2005 +0000 Merged wsf-api-change-not-for-0-6 branch with trunk. lasso/id-ff/login.c | 65 +++++++++++++++++++++++++ lasso/id-ff/login.h | 16 +++++-- lasso/id-ff/profile.c | 26 +++++++++- lasso/id-ff/profile.h | 6 ++- lasso/id-ff/server.c | 75 +++++++++++++++++++++++++---- lasso/id-ff/server.h | 11 ++++- lasso/id-wsf/discovery.c | 60 ++++++++--------------- lasso/id-wsf/profile_service.c | 24 +++++----- lasso/id-wsf/profile_service.h | 2 +- lasso/xml/Makefile.am | 2 + lasso/xml/disco_resource_offering.c | 3 +- lasso/xml/disco_service_instance.c | 10 ++-- lasso/xml/disco_service_instance.h | 5 +- lasso/xml/dst_data.c | 3 +- lasso/xml/dst_data.h | 2 +- lasso/xml/saml_attribute.c | 2 +- lasso/xml/saml_attribute.h | 2 +- lasso/xml/saml_attribute_statement.c | 2 +- lasso/xml/saml_attribute_statement.h | 2 +- lasso/xml/saml_attribute_value.c | 92 ++++++++++++++++++++++++++++++++++++ lasso/xml/saml_attribute_value.h | 71 ++++++++++++++++++++++++++++ swig/Lasso-wsf.i | 26 +++++----- swig/Lasso.i | 35 +++++++++++++- 23 files changed, 443 insertions(+), 99 deletions(-) commit 6f41ce7a3c71e3cff675432d54b13630bd4868fd Author: Frederic Peters Date: Thu Jan 27 12:54:09 2005 +0000 updated ChangeLog for 0.6 with gazillion things. ChangeLog | 5096 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 5096 insertions(+) commit 0b70b9babce3c95799b02a81de3c7b299a5f31d3 Author: Frederic Peters Date: Thu Jan 27 11:54:33 2005 +0000 wsf activation status in configure summary output configure.ac | 1 + 1 file changed, 1 insertion(+) commit 5b0be65ba9892ca921e13b858ee231f1e659ef06 Author: Frederic Peters Date: Thu Jan 27 11:51:59 2005 +0000 configure flag to enable ID-WSF (off by default) configure.ac | 11 +++++++++++ lasso/Makefile.am | 6 +++++- lasso/extract_symbols.py | 9 ++++++++- swig/Lasso.i | 4 ++++ swig/inheritance.h | 3 +++ 5 files changed, 31 insertions(+), 2 deletions(-) commit 047c0d45a2e114ebe4ad866aa1bb7feea0cf7b1b Author: Frederic Peters Date: Thu Jan 27 11:30:03 2005 +0000 don't use wsf for now swig/Lasso.i | 2 -- 1 file changed, 2 deletions(-) commit 9616ef0b32dd807c58cf999c1352968cb85bba4b Author: Frederic Peters Date: Thu Jan 27 11:08:15 2005 +0000 late 0.5 fixes to documentation docs/lasso-book/defederation.process | 4 +-- docs/lasso-book/single-logout.process | 60 +++++++++++++++++------------------ 2 files changed, 31 insertions(+), 33 deletions(-) commit 640892cc83522ca1fe77a5ac977e4e162fb956f6 Author: Frederic Peters Date: Thu Jan 27 09:58:31 2005 +0000 correctly deals with multiple elements for the same query part lasso/extract_symbols.py | 9 ++++++++- lasso/xml/xml.c | 24 ++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) commit 045505afc2ea50edb4714037640df59308b5ea05 Author: Emmanuel Raviart Date: Thu Jan 27 01:18:29 2005 +0000 Corrected name of element AuthnContextComparison. Added missing constants. lasso/xml/lib_request_authn_context.c | 6 +-- lasso/xml/lib_request_authn_context.h | 2 +- lasso/xml/strings.h | 30 ++++++++++++++ swig/Lasso.i | 76 +++++++++++++++++++++++++++++++++-- 4 files changed, 107 insertions(+), 7 deletions(-) commit 6c9cdc6b995448349d10274d85468dd38e9b56d3 Author: Frederic Peters Date: Wed Jan 26 22:25:00 2005 +0000 removed .bak file on clean php/Makefile.am | 4 ++++ 1 file changed, 4 insertions(+) commit 9a2420d1bc29b0a7c8a19bb910a43a8e5d5c9b68 Author: Frederic Peters Date: Wed Jan 26 22:20:42 2005 +0000 prepare for 0.6.0 NEWS | 11 +++++++++++ configure.ac | 4 ++-- doap.rdf | 7 ++++++- 3 files changed, 19 insertions(+), 3 deletions(-) commit 4ae1ebbe5773694c7d876bca36577bbd9fda2ac1 Author: Frederic Peters Date: Wed Jan 26 22:11:06 2005 +0000 take ntoe of function changes in doc docs/reference/tmpl/identity.sgml | 22 ---------------------- docs/reference/tmpl/server.sgml | 11 ----------- docs/reference/tmpl/session.sgml | 12 ++++++++++++ 3 files changed, 12 insertions(+), 33 deletions(-) commit 9bbfa452a2fa0ed21848cda70e2ac57f3c308966 Author: Frederic Peters Date: Wed Jan 26 16:32:50 2005 +0000 lasso-src-config is generated .cvsignore | 1 + 1 file changed, 1 insertion(+) commit b565454516e768621b10d78eac5e787eb3a978e1 Author: Frederic Peters Date: Wed Jan 26 16:32:10 2005 +0000 ignore more and more files csharp/.cvsignore | 6 ++++++ java/.cvsignore | 24 ++++++++++++++++++++++++ 2 files changed, 30 insertions(+) commit 33e223c1f6f1815c9b0b2768d32d7162530de7f8 Author: Frederic Peters Date: Wed Jan 26 15:32:44 2005 +0000 reworded docs/reference/lasso.sgml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) commit 85c3be898719ecb13f5c7fd6a14f6d3f5259e545 Author: Frederic Peters Date: Wed Jan 26 14:57:33 2005 +0000 blah blah in reference manual introduction docs/reference/lasso.sgml | 68 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 66 insertions(+), 2 deletions(-) commit 659c81961f6f7ed204f978ed480a1c3bd5b2a8a9 Author: Frederic Peters Date: Wed Jan 26 14:53:51 2005 +0000 removed functions that are now private from documentation docs/reference/lasso-sections.txt | 2 -- 1 file changed, 2 deletions(-) commit 46db75a3beebca75dd659c7415fe1269b86cc8b5 Author: Emmanuel Raviart Date: Wed Jan 26 14:35:05 2005 +0000 Removed obsolete Python sample code. python/examples/.cvsignore | 2 - python/examples/Makefile.am | 8 ---- python/examples/defederation.py | 44 ------------------ python/examples/login.py | 100 ---------------------------------------- python/examples/logout.py | 85 ---------------------------------- python/examples/mapping.py | 36 --------------- python/examples/registration.py | 41 ---------------- python/examples/test.py | 83 --------------------------------- python/examples/user.py | 47 ------------------- 9 files changed, 446 deletions(-) commit 10d94be454ae5b428e3301aa64dd4edaae44c425 Author: Emmanuel Raviart Date: Wed Jan 26 14:12:02 2005 +0000 Updated ColdFusion examples. java/coldfusion/src/CFLassoSingleLogout.java | 21 ++++++++++--------- java/coldfusion/src/CFLassoSingleSignOn.java | 30 ++++++++++++++++------------ 2 files changed, 29 insertions(+), 22 deletions(-) commit 1b30b10ad9d3cee9fbab91c473bbf4f8ee7bbedb Author: Emmanuel Raviart Date: Wed Jan 26 13:52:12 2005 +0000 Added SWIG binding for lasso_session_get_assertions. Also added Java code to test it. java/tests/LoginTest.java | 5 +++-- swig/Lasso.i | 17 +++++++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) commit aaafb05b60d394625b6267d8afabb69642943b3b Author: Frederic Peters Date: Wed Jan 26 10:50:17 2005 +0000 lasso_identity_{add,remove}_federation went private swig/Lasso.i | 10 ---------- 1 file changed, 10 deletions(-) commit e537d4ecf80c41bad055d1f2d3b165482235f51c Author: Frederic Peters Date: Wed Jan 26 10:05:45 2005 +0000 new lasso_session_get_assertions, returns GList* of (incref'd) assertions docs/reference/lasso-sections.txt | 1 + lasso/id-ff/session.c | 23 ++++++++++++++++++++++- lasso/id-ff/session.h | 4 +++- 3 files changed, 26 insertions(+), 2 deletions(-) commit 88bbd4c1d879cd45eb00748fe32415640b57e26f Author: Frederic Peters Date: Wed Jan 26 09:38:22 2005 +0000 every morning I distcheck and fix java and csharp classes; oh yeah. csharp/Makefile.am | 9 ++++---- java/Makefile.am | 60 ++++++++++++++++++++++++++---------------------------- 2 files changed, 34 insertions(+), 35 deletions(-) commit 5369ba4c3ce493c79cf7e2e77bed6b328ef1e8a4 Author: Frederic Peters Date: Wed Jan 26 07:55:52 2005 +0000 moved lasso_identity_{add,remove}_federation to private lasso/id-ff/Makefile.am | 1 + lasso/id-ff/identity.c | 1 + lasso/id-ff/identity.h | 6 +----- lasso/id-ff/identityprivate.h | 39 +++++++++++++++++++++++++++++++++++++++ lasso/id-ff/login.c | 1 + 5 files changed, 43 insertions(+), 5 deletions(-) commit 7d42f78100627e7be1ce64b2297bf034f432b3de Author: Frederic Peters Date: Wed Jan 26 07:54:19 2005 +0000 use python as found by configure lasso/Makefile.am | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 3fb162362f8ec043724d182682a060fea611622a Author: Emmanuel Raviart Date: Wed Jan 26 00:38:00 2005 +0000 Updated Java LoginTest and test metadata. java/tests/LoginTest.java | 276 +++++++++++++++++++++------------------- tests/data/idp1-la/metadata.xml | 17 +++ tests/data/idp2-la/metadata.xml | 18 ++- tests/data/sp1-la/metadata.xml | 17 +++ tests/data/sp2-la/metadata.xml | 15 +++ tests/data/sp3-la/metadata.xml | 15 +++ 6 files changed, 227 insertions(+), 131 deletions(-) commit 965a8692622f573930acfa1e880dc3adbb0457d2 Author: Frederic Peters Date: Tue Jan 25 19:59:17 2005 +0000 Empty node name is allowed for LIST_NODES; this allows nodes to be reconstructed looking at their names and namespaces. This is useful to implement xs:any docs/reference/snippet-types.rst | 4 ++++ lasso/xml/xml.c | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) commit 75b8a0e0b6ea419ccf350e4febfc8c08ef95f318 Author: Emmanuel Raviart Date: Tue Jan 25 19:02:43 2005 +0000 SWIG: Corrected Java enums. Renamed enum types. Corrected constant name. swig/Lasso.i | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) commit 87f3c2e2b5fd87ac3adc5dfe4c02422603ee0d0f Author: Frederic Peters Date: Tue Jan 25 17:50:25 2005 +0000 documented memory management for lasso_identity_add_federation lasso/id-ff/identity.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 7095174d14a3b68338b3ea74a6e19c27067438d8 Author: Frederic Peters Date: Tue Jan 25 16:05:36 2005 +0000 no more php/examples/ subdir php/Makefile.am | 1 - 1 file changed, 1 deletion(-) commit 4179416a025de4b82ecc1af7fcc4589623dbd024 Author: Christophe Nowicki Date: Tue Jan 25 15:32:15 2005 +0000 remove php samples configure.ac | 3 --- 1 file changed, 3 deletions(-) commit acafd6b03f4b92587f3e4ec0af0c46cb3d037ba6 Author: Christophe Nowicki Date: Tue Jan 25 15:31:39 2005 +0000 Remove php samples from the lasso repository I'm still working on it. I will release an independant Pear package for Lasso 0.6. The pear package repository is here: https://meuh.dyndns.org/cgi-bin/viewcvs.cgi/lasso_pear/ php/Attic/examples/.cvsignore | 3 - php/Attic/examples/Makefile.am | 1 - php/Attic/examples/README | 180 ------ php/Attic/examples/gen_keys.sh | 25 - php/Attic/examples/sample-idp/.cvsignore | 3 - php/Attic/examples/sample-idp/Makefile.am | 21 - php/Attic/examples/sample-idp/README | 0 php/Attic/examples/sample-idp/admin_user.php | 306 ----------- .../examples/sample-idp/cancel_federation.php | 225 -------- php/Attic/examples/sample-idp/create_metadata.php | 144 ----- php/Attic/examples/sample-idp/defederate.php | 32 -- php/Attic/examples/sample-idp/edit_metadata.php | 61 --- php/Attic/examples/sample-idp/federate.php | 32 -- php/Attic/examples/sample-idp/idp_openssl.cnf | 19 - php/Attic/examples/sample-idp/index.php | 193 ------- php/Attic/examples/sample-idp/log_view.php | 160 ------ php/Attic/examples/sample-idp/login.php | 182 ------- php/Attic/examples/sample-idp/logout.php | 55 -- php/Attic/examples/sample-idp/metadata_idp1.xml | 44 -- php/Attic/examples/sample-idp/metadata_sp1.xml | 42 -- php/Attic/examples/sample-idp/misc.php | 68 --- php/Attic/examples/sample-idp/session.php | 86 --- php/Attic/examples/sample-idp/setup.php | 604 --------------------- php/Attic/examples/sample-idp/singleSignOn.php | 494 ----------------- php/Attic/examples/sample-idp/soapEndpoint.php | 393 -------------- php/Attic/examples/sample-idp/user_add.php | 111 ---- php/Attic/examples/sample-idp/view_session.php | 121 ----- php/Attic/examples/sample-sp/.cvsignore | 3 - php/Attic/examples/sample-sp/Makefile.am | 17 - php/Attic/examples/sample-sp/README | 1 - php/Attic/examples/sample-sp/admin_user.php | 205 ------- php/Attic/examples/sample-sp/assertionConsumer.php | 212 -------- php/Attic/examples/sample-sp/cancel_federation.php | 200 ------- php/Attic/examples/sample-sp/index.php | 214 -------- php/Attic/examples/sample-sp/log_view.php | 160 ------ php/Attic/examples/sample-sp/login.php | 94 ---- php/Attic/examples/sample-sp/logout.php | 145 ----- php/Attic/examples/sample-sp/metadata_idp1.xml | 44 -- php/Attic/examples/sample-sp/metadata_sp1.xml | 42 -- php/Attic/examples/sample-sp/misc.php | 55 -- php/Attic/examples/sample-sp/register.php | 92 ---- php/Attic/examples/sample-sp/session.php | 86 --- php/Attic/examples/sample-sp/setup.php | 419 -------------- php/Attic/examples/sample-sp/soapEndpoint.php | 143 ----- php/Attic/examples/sample-sp/sp_openssl.cnf | 19 - php/Attic/examples/sample-sp/view_session.php | 88 --- 46 files changed, 5844 deletions(-) commit f0d06800bae38641b2ebdc77e2984c58423e9030 Author: Frederic Peters Date: Tue Jan 25 14:30:11 2005 +0000 updated swig generated files list for C# csharp/.cvsignore | 29 +++++++++++++++++++++++++++++ csharp/Makefile.am | 51 ++++++++++++++++++++++++++------------------------- 2 files changed, 55 insertions(+), 25 deletions(-) commit 30b5f624914feb62d0a3a2463420d8ca1d0c9838 Author: Frederic Peters Date: Tue Jan 25 14:24:50 2005 +0000 updated swig generated file list java/.cvsignore | 10 +++++++++ java/Makefile.am | 63 ++++++++++++++++++++++++++++---------------------------- 2 files changed, 41 insertions(+), 32 deletions(-) commit 3cf1c7011b31b08a4ddb66c3174a7c9e0cffb24e Author: Frederic Peters Date: Tue Jan 25 13:11:55 2005 +0000 fixed DowncastableNode.java filename java/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit c4362af715ba1345e98e9d29b0a88accad92b134 Author: Frederic Peters Date: Tue Jan 25 12:27:21 2005 +0000 "hope you paid attention to API/ABI". lasso/id-ff/server.h | 1 + 1 file changed, 1 insertion(+) commit f321b09b540ea37e02c2340e9e5c84c11483f67c Author: Emmanuel Raviart Date: Mon Jan 24 22:39:39 2005 +0000 Cosmetic changes to SWIG Lasso.i #ifdefs. swig/Lasso.i | 100 ++++++++++++++++++++++++++++++----------------------------- 1 file changed, 51 insertions(+), 49 deletions(-) commit 76fa5b7932c7ad0577bdfb018594560fe29db8fc Author: Romain Chantereay Date: Mon Jan 24 17:36:09 2005 +0000 Added a special section for PHP4 SWIG execeptions. Now positive lasso errors will not produce a E_ERROR PHP error but simply a E_WARNING PHP error. swig/Lasso.i | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) commit 57dabb30ef248ca4451c55186abf4d2903c4bb68 Author: Emmanuel Raviart Date: Mon Jan 24 15:39:54 2005 +0000 Added Lasso version numbers to bindings. swig/Lasso.i | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit c76936b60f7aabaf448f3ede864c6a1542269a4a Author: Emmanuel Raviart Date: Mon Jan 24 14:05:58 2005 +0000 Removed service from ID-FF. It was obsolete and will be replaced with a new API, once Lasso 0.6 is out. lasso/id-ff/Makefile.am | 2 - lasso/id-ff/server.c | 48 ------------------ lasso/id-ff/server.h | 6 --- lasso/id-ff/service.c | 132 ------------------------------------------------ lasso/id-ff/service.h | 74 --------------------------- swig/Lasso-wsf.i | 2 +- swig/Lasso.i | 5 -- 7 files changed, 1 insertion(+), 268 deletions(-) commit 9d7481fe2d3b3fc272d37d27e1f6cde438e5f8f4 Author: Emmanuel Raviart Date: Sun Jan 23 16:36:45 2005 +0000 Completed ID-WSF SWIG binding. Added attribute server to binding of LassoProfile. Small corrections to declarations of ID-WSF objects. lasso/xml/dst_modification.c | 2 +- lasso/xml/dst_modification.h | 2 +- lasso/xml/is_inquiry.c | 3 +- lasso/xml/is_inquiry_element.c | 6 +- lasso/xml/is_interaction_request.c | 1 + lasso/xml/is_item.c | 3 + swig/Lasso-wsf.i | 1642 ++++++++++++++++++++++++++++-------- swig/Lasso.i | 227 +++-- swig/inheritance.h | 31 +- 9 files changed, 1472 insertions(+), 445 deletions(-) commit 17dcdb4963e7d3450cef9c0c01e357897748a72b Author: Emmanuel Raviart Date: Sun Jan 23 01:03:51 2005 +0000 Quick fix so that Lasso bindings work till SWIG WSF part is fully updated. swig/Lasso-wsf.i | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) commit 4a45f2efc05c7f15258c0c087e6449a394ea8ae9 Author: Emmanuel Raviart Date: Sat Jan 22 22:47:54 2005 +0000 Updated binding of all "discovery" nodes. swig/Lasso-wsf.i | 709 +++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 484 insertions(+), 225 deletions(-) commit 3da5225d2b7ba3ef29123b29047114ac190abfef Author: Emmanuel Raviart Date: Sat Jan 22 17:24:30 2005 +0000 Work in progress: improving ID-WSF SWIG binding. swig/Lasso-wsf.i | 902 +++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 604 insertions(+), 298 deletions(-) commit 4138c7bc9bfd17dcd940b0bd6b0dd1406e46828b Author: Emmanuel Raviart Date: Sat Jan 22 15:57:56 2005 +0000 Updated Copyright and authors. copyright | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 7a03e99b09663c4d35f5b103d8439b3413f05659 Author: Emmanuel Raviart Date: Sat Jan 22 15:57:56 2005 +0000 Updated Copyright and authors. README | 2 +- csharp/tests/BindingTests.cs | 2 +- debian/copyright | 3 ++- doap.rdf | 6 ++++++ docs/lasso-book/book.rst | 2 +- docs/lasso-book/writing-a-c-sp.txt | 2 +- java/coldfusion/src/CFLassoSingleLogout.java | 6 +++--- java/coldfusion/src/CFLassoSingleSignOn.java | 6 +++--- java/tests/BindingTests.java | 2 +- java/tests/LoginTest.java | 2 +- lasso/errors.c | 5 ++--- lasso/errors.h | 5 ++--- lasso/export.h | 5 ++--- lasso/id-ff/defederation.c | 5 ++--- lasso/id-ff/defederation.h | 5 ++--- lasso/id-ff/federation.c | 5 ++--- lasso/id-ff/federation.h | 5 ++--- lasso/id-ff/identity.c | 5 ++--- lasso/id-ff/identity.h | 5 ++--- lasso/id-ff/lecp.c | 5 ++--- lasso/id-ff/lecp.h | 5 ++--- lasso/id-ff/login.c | 5 ++--- lasso/id-ff/login.h | 5 ++--- lasso/id-ff/logout.c | 5 ++--- lasso/id-ff/logout.h | 5 ++--- lasso/id-ff/name_identifier_mapping.c | 5 ++--- lasso/id-ff/name_identifier_mapping.h | 5 ++--- lasso/id-ff/name_registration.c | 5 ++--- lasso/id-ff/name_registration.h | 5 ++--- lasso/id-ff/profile.c | 5 ++--- lasso/id-ff/profile.h | 5 ++--- lasso/id-ff/profileprivate.h | 5 ++--- lasso/id-ff/provider.c | 5 ++--- lasso/id-ff/provider.h | 5 ++--- lasso/id-ff/providerprivate.h | 5 ++--- lasso/id-ff/server.c | 5 ++--- lasso/id-ff/server.h | 5 ++--- lasso/id-ff/serverprivate.h | 5 ++--- lasso/id-ff/service.c | 5 ++--- lasso/id-ff/service.h | 5 ++--- lasso/id-ff/session.c | 5 ++--- lasso/id-ff/session.h | 5 ++--- lasso/id-ff/sessionprivate.h | 5 ++--- lasso/id-wsf/discovery.c | 5 ++--- lasso/id-wsf/discovery.h | 5 ++--- lasso/id-wsf/interaction_profile_service.c | 5 ++--- lasso/id-wsf/interaction_profile_service.h | 5 ++--- lasso/id-wsf/profile_service.c | 5 ++--- lasso/id-wsf/profile_service.h | 5 ++--- lasso/id-wsf/wsf_profile.c | 5 ++--- lasso/id-wsf/wsf_profile.h | 5 ++--- lasso/lasso.c | 5 ++--- lasso/lasso.h | 5 ++--- lasso/xml/disco_credentials.c | 5 ++--- lasso/xml/disco_credentials.h | 5 ++--- lasso/xml/disco_description.c | 5 ++--- lasso/xml/disco_description.h | 5 ++--- lasso/xml/disco_encrypted_resource_id.c | 5 ++--- lasso/xml/disco_encrypted_resource_id.h | 5 ++--- lasso/xml/disco_insert_entry.c | 5 ++--- lasso/xml/disco_insert_entry.h | 5 ++--- lasso/xml/disco_modify.c | 5 ++--- lasso/xml/disco_modify.h | 5 ++--- lasso/xml/disco_modify_response.c | 5 ++--- lasso/xml/disco_modify_response.h | 5 ++--- lasso/xml/disco_options.c | 5 ++--- lasso/xml/disco_options.h | 5 ++--- lasso/xml/disco_query.c | 5 ++--- lasso/xml/disco_query.h | 5 ++--- lasso/xml/disco_query_response.c | 5 ++--- lasso/xml/disco_query_response.h | 5 ++--- lasso/xml/disco_remove_entry.c | 5 ++--- lasso/xml/disco_remove_entry.h | 5 ++--- lasso/xml/disco_requested_service_type.c | 5 ++--- lasso/xml/disco_requested_service_type.h | 5 ++--- lasso/xml/disco_resource_id.c | 5 ++--- lasso/xml/disco_resource_id.h | 5 ++--- lasso/xml/disco_resource_offering.c | 5 ++--- lasso/xml/disco_resource_offering.h | 5 ++--- lasso/xml/disco_service_instance.c | 5 ++--- lasso/xml/disco_service_instance.h | 5 ++--- lasso/xml/dst_data.c | 5 ++--- lasso/xml/dst_data.h | 5 ++--- lasso/xml/dst_modification.c | 5 ++--- lasso/xml/dst_modification.h | 5 ++--- lasso/xml/dst_modify.c | 5 ++--- lasso/xml/dst_modify.h | 5 ++--- lasso/xml/dst_modify_response.c | 5 ++--- lasso/xml/dst_modify_response.h | 5 ++--- lasso/xml/dst_new_data.c | 5 ++--- lasso/xml/dst_new_data.h | 5 ++--- lasso/xml/dst_query.c | 5 ++--- lasso/xml/dst_query.h | 5 ++--- lasso/xml/dst_query_item.c | 5 ++--- lasso/xml/dst_query_item.h | 5 ++--- lasso/xml/dst_query_response.c | 5 ++--- lasso/xml/dst_query_response.h | 5 ++--- lasso/xml/is_help.c | 5 ++--- lasso/xml/is_help.h | 5 ++--- lasso/xml/is_inquiry.c | 5 ++--- lasso/xml/is_inquiry.h | 5 ++--- lasso/xml/is_inquiry_element.c | 5 ++--- lasso/xml/is_inquiry_element.h | 5 ++--- lasso/xml/is_interaction_request.c | 5 ++--- lasso/xml/is_interaction_request.h | 5 ++--- lasso/xml/is_interaction_response.c | 5 ++--- lasso/xml/is_interaction_response.h | 5 ++--- lasso/xml/is_interaction_statement.c | 5 ++--- lasso/xml/is_interaction_statement.h | 5 ++--- lasso/xml/is_item.c | 5 ++--- lasso/xml/is_item.h | 5 ++--- lasso/xml/is_parameter.c | 5 ++--- lasso/xml/is_parameter.h | 5 ++--- lasso/xml/is_redirect_request.c | 5 ++--- lasso/xml/is_redirect_request.h | 5 ++--- lasso/xml/is_select.c | 5 ++--- lasso/xml/is_select.h | 5 ++--- lasso/xml/is_text.c | 5 ++--- lasso/xml/is_text.h | 5 ++--- lasso/xml/is_user_interaction.c | 5 ++--- lasso/xml/is_user_interaction.h | 5 ++--- lasso/xml/lib_assertion.c | 5 ++--- lasso/xml/lib_assertion.h | 5 ++--- lasso/xml/lib_authentication_statement.c | 5 ++--- lasso/xml/lib_authentication_statement.h | 5 ++--- lasso/xml/lib_authn_context.c | 5 ++--- lasso/xml/lib_authn_context.h | 5 ++--- lasso/xml/lib_authn_request.c | 5 ++--- lasso/xml/lib_authn_request.h | 5 ++--- lasso/xml/lib_authn_request_envelope.c | 5 ++--- lasso/xml/lib_authn_request_envelope.h | 5 ++--- lasso/xml/lib_authn_response.c | 5 ++--- lasso/xml/lib_authn_response.h | 5 ++--- lasso/xml/lib_authn_response_envelope.c | 5 ++--- lasso/xml/lib_authn_response_envelope.h | 5 ++--- lasso/xml/lib_federation_termination_notification.c | 5 ++--- lasso/xml/lib_federation_termination_notification.h | 5 ++--- lasso/xml/lib_idp_entries.c | 5 ++--- lasso/xml/lib_idp_entries.h | 5 ++--- lasso/xml/lib_idp_entry.c | 5 ++--- lasso/xml/lib_idp_entry.h | 5 ++--- lasso/xml/lib_idp_list.c | 5 ++--- lasso/xml/lib_idp_list.h | 5 ++--- lasso/xml/lib_logout_request.c | 5 ++--- lasso/xml/lib_logout_request.h | 5 ++--- lasso/xml/lib_logout_response.c | 5 ++--- lasso/xml/lib_logout_response.h | 5 ++--- lasso/xml/lib_name_identifier_mapping_request.c | 5 ++--- lasso/xml/lib_name_identifier_mapping_request.h | 5 ++--- lasso/xml/lib_name_identifier_mapping_response.c | 5 ++--- lasso/xml/lib_name_identifier_mapping_response.h | 5 ++--- lasso/xml/lib_register_name_identifier_request.c | 5 ++--- lasso/xml/lib_register_name_identifier_request.h | 5 ++--- lasso/xml/lib_register_name_identifier_response.c | 5 ++--- lasso/xml/lib_register_name_identifier_response.h | 5 ++--- lasso/xml/lib_request_authn_context.c | 5 ++--- lasso/xml/lib_request_authn_context.h | 5 ++--- lasso/xml/lib_scoping.c | 5 ++--- lasso/xml/lib_scoping.h | 5 ++--- lasso/xml/lib_status_response.c | 5 ++--- lasso/xml/lib_status_response.h | 5 ++--- lasso/xml/lib_subject.c | 5 ++--- lasso/xml/lib_subject.h | 5 ++--- lasso/xml/private.h | 5 ++--- lasso/xml/saml_advice.c | 5 ++--- lasso/xml/saml_advice.h | 5 ++--- lasso/xml/saml_assertion.c | 5 ++--- lasso/xml/saml_assertion.h | 5 ++--- lasso/xml/saml_attribute.c | 5 ++--- lasso/xml/saml_attribute.h | 5 ++--- lasso/xml/saml_attribute_designator.c | 5 ++--- lasso/xml/saml_attribute_designator.h | 5 ++--- lasso/xml/saml_attribute_statement.c | 5 ++--- lasso/xml/saml_attribute_statement.h | 5 ++--- lasso/xml/saml_audience_restriction_condition.c | 5 ++--- lasso/xml/saml_audience_restriction_condition.h | 5 ++--- lasso/xml/saml_authentication_statement.c | 5 ++--- lasso/xml/saml_authentication_statement.h | 5 ++--- lasso/xml/saml_authority_binding.c | 5 ++--- lasso/xml/saml_authority_binding.h | 5 ++--- lasso/xml/saml_condition_abstract.c | 5 ++--- lasso/xml/saml_condition_abstract.h | 5 ++--- lasso/xml/saml_conditions.c | 5 ++--- lasso/xml/saml_conditions.h | 5 ++--- lasso/xml/saml_name_identifier.c | 5 ++--- lasso/xml/saml_name_identifier.h | 5 ++--- lasso/xml/saml_statement_abstract.c | 5 ++--- lasso/xml/saml_statement_abstract.h | 5 ++--- lasso/xml/saml_subject.c | 5 ++--- lasso/xml/saml_subject.h | 5 ++--- lasso/xml/saml_subject_confirmation.c | 5 ++--- lasso/xml/saml_subject_confirmation.h | 5 ++--- lasso/xml/saml_subject_locality.c | 5 ++--- lasso/xml/saml_subject_locality.h | 5 ++--- lasso/xml/saml_subject_statement.c | 5 ++--- lasso/xml/saml_subject_statement.h | 5 ++--- lasso/xml/saml_subject_statement_abstract.c | 5 ++--- lasso/xml/saml_subject_statement_abstract.h | 5 ++--- lasso/xml/samlp_request.c | 5 ++--- lasso/xml/samlp_request.h | 5 ++--- lasso/xml/samlp_request_abstract.c | 5 ++--- lasso/xml/samlp_request_abstract.h | 5 ++--- lasso/xml/samlp_response.c | 5 ++--- lasso/xml/samlp_response.h | 5 ++--- lasso/xml/samlp_response_abstract.c | 5 ++--- lasso/xml/samlp_response_abstract.h | 5 ++--- lasso/xml/samlp_status.c | 5 ++--- lasso/xml/samlp_status.h | 5 ++--- lasso/xml/samlp_status_code.c | 5 ++--- lasso/xml/samlp_status_code.h | 5 ++--- lasso/xml/strings.h | 5 ++--- lasso/xml/tools.c | 5 ++--- lasso/xml/utility_status.c | 5 ++--- lasso/xml/utility_status.h | 5 ++--- lasso/xml/xml.c | 5 ++--- lasso/xml/xml.h | 5 ++--- perl/tests/binding_tests.pl | 2 +- php/Attic/examples/sample-idp/admin_user.php | 4 ++-- php/Attic/examples/sample-idp/cancel_federation.php | 2 +- php/Attic/examples/sample-idp/create_metadata.php | 4 ++-- php/Attic/examples/sample-idp/defederate.php | 2 +- php/Attic/examples/sample-idp/edit_metadata.php | 4 ++-- php/Attic/examples/sample-idp/federate.php | 2 +- php/Attic/examples/sample-idp/index.php | 4 ++-- php/Attic/examples/sample-idp/log_view.php | 4 ++-- php/Attic/examples/sample-idp/login.php | 2 +- php/Attic/examples/sample-idp/logout.php | 2 +- php/Attic/examples/sample-idp/misc.php | 2 +- php/Attic/examples/sample-idp/session.php | 2 +- php/Attic/examples/sample-idp/setup.php | 4 ++-- php/Attic/examples/sample-idp/singleSignOn.php | 2 +- php/Attic/examples/sample-idp/soapEndpoint.php | 2 +- php/Attic/examples/sample-idp/user_add.php | 4 ++-- php/Attic/examples/sample-idp/view_session.php | 4 ++-- php/Attic/examples/sample-sp/admin_user.php | 4 ++-- php/Attic/examples/sample-sp/assertionConsumer.php | 2 +- php/Attic/examples/sample-sp/cancel_federation.php | 2 +- php/Attic/examples/sample-sp/index.php | 4 ++-- php/Attic/examples/sample-sp/log_view.php | 4 ++-- php/Attic/examples/sample-sp/login.php | 2 +- php/Attic/examples/sample-sp/logout.php | 2 +- php/Attic/examples/sample-sp/misc.php | 2 +- php/Attic/examples/sample-sp/register.php | 2 +- php/Attic/examples/sample-sp/session.php | 2 +- php/Attic/examples/sample-sp/setup.php | 4 ++-- php/Attic/examples/sample-sp/soapEndpoint.php | 2 +- php/Attic/examples/sample-sp/view_session.php | 4 ++-- php/patch_swig_output.py | 2 +- php/tests/binding_tests.php | 2 +- php/tests/perfs.php | 2 +- python/tests/binding_tests.py | 2 +- python/tests/errorchecking_tests.py | 2 +- python/tests/profiles_tests.py | 2 +- python/tests/tests.py | 2 +- swig/Lasso-wsf.i | 2 +- swig/Lasso.i | 2 +- swig/inheritance.h | 2 +- tests/basic_tests.c | 6 +++--- tests/login_tests.c | 6 +++--- tests/perfs.c | 6 +++--- tests/random_tests.c | 6 +++--- tests/tests.c | 6 +++--- win32/lasso.rc | 2 +- 263 files changed, 502 insertions(+), 701 deletions(-) commit df29bb95b1017de3499eb53ae542c51692d229eb Author: Emmanuel Raviart Date: Sat Jan 22 14:59:33 2005 +0000 SWIG: Renamed constants from camelCase to UPPER_CASE. csharp/examples/perfs.cs | 4 +- csharp/examples/runme.cs | 2 +- csharp/tests/BindingTests.cs | 8 +- java/coldfusion/src/CFLassoSingleLogout.java | 6 +- java/coldfusion/src/CFLassoSingleSignOn.java | 10 +-- java/tests/BindingTests.java | 8 +- java/tests/LoginTest.java | 30 +++---- perl/tests/binding_tests.pl | 8 +- python/examples/defederation.py | 6 +- python/examples/login.py | 22 ++--- python/examples/logout.py | 12 +-- python/examples/registration.py | 4 +- python/tests/binding_tests.py | 8 +- python/tests/profiles_tests.py | 24 +++--- swig/Lasso-wsf.i | 66 +++++++------- swig/Lasso.i | 124 +++++++++++++-------------- 16 files changed, 171 insertions(+), 171 deletions(-) commit bc4ab9c01302a9bb8d981cfe7955c88e74d1b1a3 Author: Emmanuel Raviart Date: Sat Jan 22 14:25:54 2005 +0000 SWIG: Added missing renaming of constant LASSO_HTTP_METHOD_NONE. SWIG: Very preliminary clean-up of Lasso-wsf.i. swig/Lasso-wsf.i | 137 +++++++++++++++++++++++++++++++++++-------------------- swig/Lasso.i | 1 + 2 files changed, 89 insertions(+), 49 deletions(-) commit 4e7c03832eb407ed4865bc947d1e97f3c20904ed Author: Emmanuel Raviart Date: Sat Jan 22 13:51:22 2005 +0000 Renamed SWIG module name to "lasso" instead of "Lasso" for every language. swig/Lasso.i | 9 --------- 1 file changed, 9 deletions(-) commit cb8e2efac1dd363d2583bafb00c3e4032489fee7 Author: Frederic Peters Date: Sat Jan 22 08:44:13 2005 +0000 don't get remote provider id out of request if it was initiated by provider lasso/id-ff/login.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) commit bdaa2659df4dae82e1b314905f49ffc6370ed61d Author: Emmanuel Raviart Date: Fri Jan 21 23:54:02 2005 +0000 SWIG: Added binding for new_full constructors. swig/Lasso.i | 94 +++++++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 71 insertions(+), 23 deletions(-) commit 8ee6da02dd68911ba397c39f8c97db9b6b0baece Author: Frederic Peters Date: Fri Jan 21 22:02:56 2005 +0000 fixed missing provider error code (and used it in other places) lasso/id-ff/login.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) commit d8d144f7d0d96c437a81ef52b015345ab27a5084 Author: Frederic Peters Date: Fri Jan 21 21:56:34 2005 +0000 don't segfault on missing remote provider id lasso/id-ff/login.c | 3 +++ 1 file changed, 3 insertions(+) commit 548c81feb3e794c947b70b8a0b3cba75705a7fe9 Author: Frederic Peters Date: Fri Jan 21 21:27:47 2005 +0000 removed lib:Scoping, optional lasso/xml/lib_authn_request.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit c9038ca0d54be8a590f6bd5436130bdfae6dbb45 Author: Frederic Peters Date: Fri Jan 21 21:22:29 2005 +0000 reordered lib:authnRequest elements lasso/xml/lib_authn_request.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit b01a634664de4460fea325114c5bc118921ae33c Author: Frederic Peters Date: Fri Jan 21 20:54:09 2005 +0000 new SNIPPET_OPTIONAL_NEG which allow to skip integer elements when set to -1 (useful for proxycount) lasso/xml/lib_authn_request.c | 2 +- lasso/xml/lib_scoping.c | 4 ++-- lasso/xml/private.h | 3 ++- lasso/xml/xml.c | 4 ++++ 4 files changed, 9 insertions(+), 4 deletions(-) commit ec33b6d7c6eb5744e91050e6a65e0c078acd257e Author: Frederic Peters Date: Fri Jan 21 17:58:13 2005 +0000 moved samlp qname conversion to lib_status_response lasso/xml/lib_status_response.c | 11 +++++++++++ lasso/xml/samlp_status_code.c | 18 ------------------ 2 files changed, 11 insertions(+), 18 deletions(-) commit d1f422c55d3b00a8438e3088e684ee6434784b14 Author: Frederic Peters Date: Fri Jan 21 17:26:07 2005 +0000 adds samlp: prefix to statuscode qname if necessary lasso/xml/samlp_status_code.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) commit b6e35e7db50a95126f8926eae9145d9acfc123f3 Author: Emmanuel Raviart Date: Fri Jan 21 16:47:44 2005 +0000 SWIG: Added yet another correction in generated PHP lasso_wrap.c for handling of optional arguments. php/patch_swig_output.py | 6 ++++++ 1 file changed, 6 insertions(+) commit b9a98851882ef49126faca925578284b83351dd3 Author: Emmanuel Raviart Date: Fri Jan 21 16:12:46 2005 +0000 SWIG: Added patch for PHP lasso_wrap.c to correct handling of optional arguments in methods. php/patch_swig_output.py | 11 +++++++++++ 1 file changed, 11 insertions(+) commit 061b6861408379601c62b8ce92ee0e9104e79524 Author: Frederic Peters Date: Fri Jan 21 16:04:55 2005 +0000 if existing, use SessionIndex from assertion in lib:LogoutRequest. lasso/id-ff/logout.c | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) commit df25346c2cbed0ce44128a7e44b9b81c26d06918 Author: Frederic Peters Date: Fri Jan 21 14:15:01 2005 +0000 removed out of place int caused by dubious docstring copy/paste lasso/xml/xml.c | 1 - 1 file changed, 1 deletion(-) commit c41d66f5ebbf7ea8b02c1222d587b97b92da01c9 Author: Frederic Peters Date: Fri Jan 21 10:59:30 2005 +0000 documented remaining functions in xml/; looks like all the functions are done. lasso/xml/xml.c | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) commit 21f8461ddda082c57a7133be4eeabe2877bc10f9 Author: Frederic Peters Date: Fri Jan 21 10:51:24 2005 +0000 done with documenting if-ff/* functions lasso/id-ff/defederation.c | 10 +++--- lasso/id-ff/lecp.c | 70 +++++++++++++++++++++++++++++++++++++++-- lasso/id-ff/login.c | 4 +-- lasso/id-ff/logout.c | 12 +++---- lasso/id-ff/name_registration.c | 12 +++---- lasso/id-ff/profile.c | 16 ++++++++-- 6 files changed, 100 insertions(+), 24 deletions(-) commit 44b33e1829b66a61f931678a870695b7e4a98c77 Author: Frederic Peters Date: Fri Jan 21 10:50:27 2005 +0000 removed lasso_server_add_service from reference api since it is for wsf docs/reference/lasso-sections.txt | 1 - 1 file changed, 1 deletion(-) commit 0490d14503cf6ba82a23a675a61adcb2101a631d Author: Emmanuel Raviart Date: Fri Jan 21 00:47:18 2005 +0000 SWIG: Removed method dump of NameIdentifierMapping. swig/Lasso.i | 4 ---- 1 file changed, 4 deletions(-) commit d424deeb8e4e0ab2a45e657e75d2a18b18cf1443 Author: Emmanuel Raviart Date: Thu Jan 20 17:14:52 2005 +0000 SWIG: Every function that may raise an exception, also returns the errorCode. swig/Lasso.i | 120 +++++++++++++++++++++++++++++------------------------------ 1 file changed, 60 insertions(+), 60 deletions(-) commit 08ecafd07af674c120ce5e53d2a5807f6b57c966 Author: Nicolas Clapies Date: Thu Jan 20 14:38:01 2005 +0000 Fixed saml attribute tag define. lasso/xml/saml_attribute.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 6f1a80c42262f9432431fa90ea8a79e65d695f61 Author: Frederic Peters Date: Thu Jan 20 13:53:59 2005 +0000 don't output licensing comment when starting perfs.php php/tests/binding_tests.php | 2 -- php/tests/perfs.php | 6 +----- 2 files changed, 1 insertion(+), 7 deletions(-) commit 522c42f3f74f37aa2edbee87d8e7ea7f5a068674 Author: Frederic Peters Date: Thu Jan 20 13:25:11 2005 +0000 corrected spelling of optionally. lasso/id-ff/defederation.c | 8 ++++---- lasso/id-ff/logout.c | 4 ++-- lasso/id-ff/name_registration.c | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) commit d01961c2696f4b6676df3e6e2f3180514ec08934 Author: Frederic Peters Date: Thu Jan 20 13:24:04 2005 +0000 documented name_identifier_mapping.c; removed its unused dump functions; fixed a few docstrings lasso/id-ff/defederation.c | 69 ++++++++-------------- lasso/id-ff/name_identifier_mapping.c | 106 +++++++++++++++++++++++++++++----- lasso/id-ff/name_identifier_mapping.h | 3 - lasso/id-ff/name_registration.c | 5 +- 4 files changed, 119 insertions(+), 64 deletions(-) commit 111e697858a3f902d62575682c3fa937c90e758f Author: Frederic Peters Date: Thu Jan 20 11:59:04 2005 +0000 documented #LassoNameRegistration and fixed some docstrings in #LassoLogout lasso/id-ff/logout.c | 19 ++------- lasso/id-ff/name_registration.c | 91 +++++++++++++++++++++++++++++++++++++---- 2 files changed, 88 insertions(+), 22 deletions(-) commit 82aebdd0afcb4110fe6ca1ce9c38434a264013f3 Author: Emmanuel Raviart Date: Wed Jan 19 21:12:33 2005 +0000 Improved C# binding. csharp/Makefile.am | 6 +- csharp/tests/BindingTests.cs | 306 +++++++++++++++++++++++++++++++++++++++++++ java/tests/BindingTests.java | 7 +- swig/Lasso.i | 143 ++++++++++++++++++-- 4 files changed, 446 insertions(+), 16 deletions(-) commit 979dda50ed08dd29b90b0b40fe4f9e9aafd59ddb Author: Frederic Peters Date: Wed Jan 19 10:10:56 2005 +0000 added SNIPPET_LIST_XMLNODES support (mostly the same thing as SNIPPET_EXTENSION for the moment) docs/reference/snippet-types.rst | 9 +++++++++ lasso/xml/private.h | 1 + lasso/xml/xml.c | 7 ++++++- 3 files changed, 16 insertions(+), 1 deletion(-) commit 4388b8855d000762f1b418a0d773c81dd9681638 Author: Frederic Peters Date: Tue Jan 18 21:05:07 2005 +0000 restored documentation I wrote before (and lost in enum name change) docs/reference/tmpl/provider.sgml | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) commit 8564291ec3ef1e7fbf0022420a9701316d6d2cbe Author: Frederic Peters Date: Tue Jan 18 20:49:40 2005 +0000 documented a few things docs/reference/lasso-sections.txt | 2 +- docs/reference/tmpl/login.sgml | 7 +- docs/reference/tmpl/node.sgml | 177 ++++++++++++++++++++++++++ docs/reference/tmpl/provider.sgml | 2 +- docs/reference/tmpl/saml_name_identifier.sgml | 2 + docs/reference/tmpl/strings.sgml | 96 ++++++++++++++ 6 files changed, 282 insertions(+), 4 deletions(-) commit c6dc916163497ac24431fb45c11921a12d353433 Author: Christophe Nowicki Date: Tue Jan 18 17:40:11 2005 +0000 create a isDBError function update sso code for the new lasso api php/Attic/examples/sample-idp/misc.php | 13 ++ php/Attic/examples/sample-idp/singleSignOn.php | 186 ++++++++++--------------- 2 files changed, 89 insertions(+), 110 deletions(-) commit d604d16b05051482f228c84e44e62d1693442e0d Author: Christophe Nowicki Date: Tue Jan 18 15:27:58 2005 +0000 change idp and sp fqdn (add .lasso.lan) php/Attic/examples/README | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 21906f4d5e8ca669ce217578547b04c132dee0eb Author: Christophe Nowicki Date: Tue Jan 18 15:26:35 2005 +0000 update metadata php/Attic/examples/sample-idp/metadata_idp1.xml | 39 +++++++++++++++++++------ php/Attic/examples/sample-idp/metadata_sp1.xml | 36 +++++++++++++++++------ 2 files changed, 57 insertions(+), 18 deletions(-) commit e003e9bef418e7643113ba91bae2074a0232a043 Author: Christophe Nowicki Date: Tue Jan 18 15:26:08 2005 +0000 update metadata php/Attic/examples/sample-sp/metadata_idp1.xml | 39 ++++++++++++++++++++------ php/Attic/examples/sample-sp/metadata_sp1.xml | 35 +++++++++++++++++------ 2 files changed, 56 insertions(+), 18 deletions(-) commit a4d2c7550df0734de103a9b71b6e549601fd7db4 Author: Christophe Nowicki Date: Tue Jan 18 14:52:57 2005 +0000 change constants name php/Attic/examples/sample-sp/login.php | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) commit 5779be82a85d9771e97c364e39716b424fe59de1 Author: Christophe Nowicki Date: Tue Jan 18 14:46:45 2005 +0000 fix LassoServer call php/Attic/examples/sample-idp/setup.php | 41 +++++++++++++++++++++-------- php/Attic/examples/sample-sp/setup.php | 46 +++++++++++++++++++++++---------- 2 files changed, 62 insertions(+), 25 deletions(-) commit dd1a48be767f5fc87d58d3ee1216675c033cc94b Author: Christophe Nowicki Date: Tue Jan 18 14:40:42 2005 +0000 add a gen_keys.sh script for generating automatically ssl keys php/Attic/examples/README | 6 ++++-- php/Attic/examples/gen_keys.sh | 25 +++++++++++++++++++++++++ php/Attic/examples/sample-idp/idp_openssl.cnf | 19 +++++++++++++++++++ php/Attic/examples/sample-sp/sp_openssl.cnf | 19 +++++++++++++++++++ 4 files changed, 67 insertions(+), 2 deletions(-) commit 02464ae3147f8df3c8d57665669b52008eb25821 Author: Emmanuel Raviart Date: Mon Jan 17 23:37:36 2005 +0000 Extracted the inheritance of nodes from SWIG in a separate file, to remove its duplication in Lasso.i. Reorganized Lasso.i. csharp/Makefile.am | 3 +- java/Makefile.am | 3 +- perl/Makefile.am | 3 +- php/Makefile.am | 3 +- python/Makefile.am | 3 +- swig/Lasso.i | 341 +++++++++++++++-------------------------------------- swig/Makefile.am | 2 +- swig/inheritance.h | 112 ++++++++++++++++++ 8 files changed, 221 insertions(+), 249 deletions(-) commit 89e3b547cea3685aa4b5452331b0fa3d5e89bd90 Author: Emmanuel Raviart Date: Mon Jan 17 22:37:08 2005 +0000 Improved Java .cvsignore. java/.cvsignore | 1 + 1 file changed, 1 insertion(+) commit 5b7f622e0705fcf28ed6868f9b145dca9f5eddfa Author: Emmanuel Raviart Date: Mon Jan 17 22:35:33 2005 +0000 Completed Java binding tests. java/tests/BindingTests.java | 62 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) commit 203c8f04f9abd75ef50d5b66d002b72a770dfd5f Author: Emmanuel Raviart Date: Mon Jan 17 17:13:08 2005 +0000 SWIG: Corrected constant name: SWIG macros are not accessible inside %{ %}. swig/Lasso.i | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 360c572ddf82caf463b03a6695509498df2aee05 Author: Emmanuel Raviart Date: Mon Jan 17 16:32:21 2005 +0000 SWIG: Ported dynamic casting to all type of nodes. Not fully tested yet. swig/Lasso.i | 329 ++++++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 212 insertions(+), 117 deletions(-) commit 49d43991bba9a75f5b40611df32c4853c9c06ed5 Author: Emmanuel Raviart Date: Mon Jan 17 02:01:11 2005 +0000 SWIG: Added support for dynamic casting in Java. It works, but it has been only implemented for SamlpRequestAbstract. It will soon be generalized to LassoNode. java/Makefile.am | 2 +- java/tests/BindingTests.java | 71 ++++ swig/Lasso.i | 973 ++++++++++++++++++++++++------------------- 3 files changed, 619 insertions(+), 427 deletions(-) commit ae9e7d05bc8f8701150ed5dfe223e0fded6767a3 Author: Emmanuel Raviart Date: Sat Jan 15 15:12:00 2005 +0000 SWIG: Renamed getitem to getItem. Idem for setitem. Java: Added a third binding test. PHP: Corrected header of binding test. java/tests/BindingTests.java | 60 +++++++++++++++--- perl/tests/binding_tests.pl | 138 +++++++++++++++++++++-------------------- php/tests/binding_tests.php | 142 +++++++++++++++++++++---------------------- swig/Lasso.i | 36 +++++------ 4 files changed, 214 insertions(+), 162 deletions(-) commit 8d53ec860626142e1b8d91de871c05b1e05d982e Author: Emmanuel Raviart Date: Sat Jan 15 14:43:26 2005 +0000 Added first 2 binding tests for Java. Corrected help for Java login test. java/tests/BindingTests.java | 86 ++++++++++++++++++++++++++++++++++++++++++++ java/tests/LoginTest.java | 12 +++---- 2 files changed, 92 insertions(+), 6 deletions(-) commit e8de39bae08b511e9b62e71a7d52cce2df10d54f Author: Emmanuel Raviart Date: Sat Jan 15 13:11:25 2005 +0000 Updated authors. Changed authors & copyright in SWIG and unit tests headers. Extracted binding_tests.py from profiles_tests.py, so that each language has a binding specific test. AUTHORS | 48 +++---- java/tests/LoginTest.java | 16 ++- perl/tests/binding_tests.pl | 25 +++- php/patch_swig_output.py | 29 ++++- php/tests/binding_tests.php | 27 +++- php/tests/perfs.php | 27 +++- python/tests/XmlTestRunner.py | 2 + python/tests/binding_tests.py | 249 ++++++++++++++++++++++++++++++++++++ python/tests/errorchecking_tests.py | 11 +- python/tests/profiles_tests.py | 220 ++----------------------------- python/tests/tests.py | 12 +- swig/Lasso-wsf.i | 6 +- swig/Lasso.i | 6 +- 13 files changed, 407 insertions(+), 271 deletions(-) commit bb27a8d5984ddcf12f0a42e5d8f089759e8749ab Author: Emmanuel Raviart Date: Fri Jan 14 21:49:31 2005 +0000 Corrected Perl binding and added test program. perl/tests/binding_tests.pl | 229 ++++++++++++++++++++++++++++++++++++++++++++ swig/Lasso.i | 4 + 2 files changed, 233 insertions(+) commit 14dd064dd1a5e9fead77f76b508e85dd7f719d99 Author: Frederic Peters Date: Fri Jan 14 14:47:49 2005 +0000 check for correct exception python/tests/profiles_tests.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit 677974990db9ba54b5526b0304c7671c7dcb2043 Author: Frederic Peters Date: Fri Jan 14 14:17:54 2005 +0000 handle non-soap messages in new_from_soap lasso/xml/xml.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 86a00518a66f0cf5f72bbd8fa1bcf1fe69cd94dc Author: Romain Chantereay Date: Fri Jan 14 14:02:43 2005 +0000 Added NameQualifer definition paragraph and added a meta info on the LASSO_LIB_NAME_IDENTIFIER_FORMAT_ENCRYPTED. docs/reference/tmpl/saml_name_identifier.sgml | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) commit 264eec11af6fdf758a8b37cabb46e50c7838da02 Author: Emmanuel Raviart Date: Fri Jan 14 11:30:42 2005 +0000 Added a new test that generates a segfault in new_from_soap. python/tests/profiles_tests.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) commit b5265e457e9adf9eee7d40668c5e0a12adffa8cb Author: Nicolas Clapies Date: Thu Jan 13 17:29:55 2005 +0000 Started to bind class LassoIsInteractionRequest to process it in interaction profile service class. swig/Lasso-wsf.i | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) commit 168a6bf092b368f8952b1941b0dc8c5f2545d422 Author: Frederic Peters Date: Thu Jan 13 16:10:10 2005 +0000 don't pass prefix to install-perl perl/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 2fe5c9f758f3e95e7d3927b0437345c46fd88320 Author: Nicolas Clapies Date: Thu Jan 13 15:27:28 2005 +0000 Removed class LassoAbstractService. lasso/id-wsf/Makefile.am | 2 - lasso/id-wsf/abstract_service.c | 84 --------------------------------------- lasso/id-wsf/abstract_service.h | 87 ----------------------------------------- 3 files changed, 173 deletions(-) commit 7f8876ba07a8c02d7b09dba047dc66322270e5f0 Author: Emmanuel Raviart Date: Thu Jan 13 15:25:07 2005 +0000 Swig PHP: Added test to accept NULL for dynamic arguments. php/tests/binding_tests.php | 87 +++++++++++++++++++++++++++++++++++++++++++++ swig/Lasso.i | 20 ++++++----- 2 files changed, 99 insertions(+), 8 deletions(-) commit ee720a7ed667deb902ee54c4079a5c5453b1fc32 Author: Emmanuel Raviart Date: Thu Jan 13 14:43:46 2005 +0000 Added program to test PHP binding. php/tests/binding_tests.php | 199 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 199 insertions(+) commit 49c338171dc115de8ccc738a7cfb1266226d277c Author: Emmanuel Raviart Date: Thu Jan 13 14:40:51 2005 +0000 Corrected patch to SWIG PHP output. php/patch_swig_output.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) commit 37c1a3e8b0a183fd1744e625c9a6ed70cc802cca Author: Frederic Peters Date: Thu Jan 13 14:11:17 2005 +0000 safe against unfound strings php/patch_swig_output.py | 3 +++ php/tests/perfs.php | 2 ++ 2 files changed, 5 insertions(+) commit cd8a5088f2a9e22aade9d93c0085d57507c300a3 Author: Emmanuel Raviart Date: Thu Jan 13 13:54:40 2005 +0000 Swig PHP: Corrected LassoNode conversion for input arguments. swig/Lasso.i | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 5ac97cc649f52328dd418dfa8cd61525d44d2dda Author: Nicolas Clapies Date: Thu Jan 13 13:31:27 2005 +0000 Fixed error in xmlNewNs() call : first param must be xmlnode instead of NULL. lasso/xml/dst_query_response.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 8c0576b2fbf76a2cbd534ee757121b5a8a99ff22 Author: Nicolas Clapies Date: Thu Jan 13 13:30:02 2005 +0000 Removed pp_msg_contact.c pp_msg_contact.h. lasso/xml/Makefile.am | 2 -- 1 file changed, 2 deletions(-) commit 2860d2c58985a6985f0bd006ce37fd2a1c519970 Author: Nicolas Clapies Date: Thu Jan 13 13:28:48 2005 +0000 Removed LassoPPMsgContact class. Updated binding too.lasso/xml/Makefile.am lasso/xml/pp_msg_contact.c | 118 --------------------------------------------- lasso/xml/pp_msg_contact.h | 69 -------------------------- swig/Lasso-wsf.i | 96 ------------------------------------ 3 files changed, 283 deletions(-) commit 6920717ade85a8d884d75283f79475a406deaf3c Author: Nicolas Clapies Date: Thu Jan 13 13:10:01 2005 +0000 Removed specific class LassoPersonalProfileService. Added generic web service class LassoProfileService. lasso/id-wsf/Makefile.am | 4 +- lasso/id-wsf/personal_profile_service.h | 122 -------------- ...ersonal_profile_service.c => profile_service.c} | 177 +++++++++------------ lasso/id-wsf/profile_service.h | 128 +++++++++++++++ swig/Lasso-wsf.i | 89 ++++++----- 5 files changed, 256 insertions(+), 264 deletions(-) commit 4411851ee26ed5edf09c30c3cee6aa76650c5a37 Author: Emmanuel Raviart Date: Thu Jan 13 13:09:00 2005 +0000 PHP Binding: Added support for NULL return value. php/patch_swig_output.py | 68 ++++++++++++++++++++++++--------- python/tests/profiles_tests.py | 4 ++ swig/Lasso.i | 85 +++++++++++++++++++++++++++++------------- 3 files changed, 113 insertions(+), 44 deletions(-) commit 69e3012ea735ee512356b49bd3dd66aa319b0674 Author: Frederic Peters Date: Wed Jan 12 23:58:46 2005 +0000 removed uncommited profile_service.[ch] from Makefile.am lasso/id-wsf/Makefile.am | 2 -- 1 file changed, 2 deletions(-) commit 646d933bcb7d3a20efc81eb31b5cb7f83c68c98e Author: Nicolas Clapies Date: Wed Jan 12 23:25:28 2005 +0000 Added support of interaction profile service. lasso/id-wsf/Makefile.am | 4 ++++ 1 file changed, 4 insertions(+) commit 50c36342782fc0177c515095a7aea9330d4455bb Author: Nicolas Clapies Date: Wed Jan 12 23:24:48 2005 +0000 Started to implement interaction service profile. lasso/id-wsf/interaction_profile_service.c | 136 +++++++++++++++++++++++++++++ lasso/id-wsf/interaction_profile_service.h | 85 ++++++++++++++++++ 2 files changed, 221 insertions(+) commit c67d9f44d674d9dce44f22b303a81dd2b21ccc19 Author: Nicolas Clapies Date: Wed Jan 12 23:23:23 2005 +0000 Added lasso_*_new_from_message() method to rebuild objects from xml dump. lasso/xml/is_interaction_request.c | 11 +++++++++++ lasso/xml/is_interaction_request.h | 3 +++ lasso/xml/is_interaction_response.c | 11 +++++++++++ lasso/xml/is_interaction_response.h | 3 +++ 4 files changed, 28 insertions(+) commit a2a19cf87d1ea052015a81be12e89a31ec63c170 Author: Frederic Peters Date: Wed Jan 12 17:58:05 2005 +0000 forgotten commit of new is* classes to Makefile.am. lasso/xml/Makefile.am | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) commit ac49549a4f436875de3731643c20bf138c1b1fe0 Author: Frederic Peters Date: Wed Jan 12 17:51:27 2005 +0000 removed unused variable lasso/id-ff/provider.c | 1 - 1 file changed, 1 deletion(-) commit 142e64189fe871c430fa194d9b149ad0a3f1a158 Author: Frederic Peters Date: Wed Jan 12 17:42:01 2005 +0000 moved errors.[ch] up; as requested. lasso/Makefile.am | 4 ++-- lasso/{xml => }/errors.c | 2 +- lasso/{xml => }/errors.h | 0 lasso/xml/Makefile.am | 2 -- lasso/xml/xml.h | 2 +- swig/Lasso.i | 4 ++-- 6 files changed, 6 insertions(+), 8 deletions(-) commit d3c7069617f3b7746bb27f339bde0c3afeeaf96c Author: Nicolas Clapies Date: Wed Jan 12 17:21:11 2005 +0000 Added low level classes for interaction service specification. lasso/xml/is_help.c | 105 ++++++++++++++++++++++++++++++ lasso/xml/is_help.h | 67 +++++++++++++++++++ lasso/xml/is_inquiry.c | 118 +++++++++++++++++++++++++++++++++ lasso/xml/is_inquiry.h | 72 +++++++++++++++++++++ lasso/xml/is_inquiry_element.c | 114 ++++++++++++++++++++++++++++++++ lasso/xml/is_inquiry_element.h | 75 +++++++++++++++++++++ lasso/xml/is_interaction_request.c | 122 +++++++++++++++++++++++++++++++++++ lasso/xml/is_interaction_request.h | 83 ++++++++++++++++++++++++ lasso/xml/is_interaction_response.c | 115 +++++++++++++++++++++++++++++++++ lasso/xml/is_interaction_response.h | 73 +++++++++++++++++++++ lasso/xml/is_interaction_statement.c | 105 ++++++++++++++++++++++++++++++ lasso/xml/is_interaction_statement.h | 72 +++++++++++++++++++++ lasso/xml/is_item.c | 109 +++++++++++++++++++++++++++++++ lasso/xml/is_item.h | 67 +++++++++++++++++++ lasso/xml/is_parameter.c | 105 ++++++++++++++++++++++++++++++ lasso/xml/is_parameter.h | 68 +++++++++++++++++++ lasso/xml/is_redirect_request.c | 102 +++++++++++++++++++++++++++++ lasso/xml/is_redirect_request.h | 70 ++++++++++++++++++++ lasso/xml/is_select.c | 109 +++++++++++++++++++++++++++++++ lasso/xml/is_select.h | 70 ++++++++++++++++++++ lasso/xml/is_text.c | 110 +++++++++++++++++++++++++++++++ lasso/xml/is_text.h | 67 +++++++++++++++++++ lasso/xml/is_user_interaction.c | 121 ++++++++++++++++++++++++++++++++++ lasso/xml/is_user_interaction.h | 78 ++++++++++++++++++++++ 24 files changed, 2197 insertions(+) commit 4ee14f6c0b2798b1ee57eda1e18280defe8b61fa Author: Nicolas Clapies Date: Wed Jan 12 16:46:37 2005 +0000 Added name space constant for interaction service. Added interaction rule constants for interaction service UserInteraction element. lasso/xml/strings.h | 8 ++++++++ 1 file changed, 8 insertions(+) commit 4ef4465bad54e7dfc5a138a54fbda02443319fcb Author: Frederic Peters Date: Wed Jan 12 16:01:08 2005 +0000 remove duplicate declaration of namespace (bug#398) lasso/id-ff/server.c | 2 ++ lasso/xml/private.h | 2 ++ lasso/xml/xml.c | 7 +++---- 3 files changed, 7 insertions(+), 4 deletions(-) commit 18731728ef22a69ae7020cea69438173b03d24c5 Author: Emmanuel Raviart Date: Wed Jan 12 15:48:00 2005 +0000 Swig: Removed attribute responseStatus (now private). Corrected LassoProfile request and response attributes. Corrected handling of NULL pointers in dynamic casting. swig/Lasso.i | 124 ++++++++++++++++++++++++++++++++++------------------------- 1 file changed, 71 insertions(+), 53 deletions(-) commit 0d424788768bfd7148f56398600f36e2edd0a09e Author: Emmanuel Raviart Date: Wed Jan 12 15:45:43 2005 +0000 Added Python tests for XML lists and nodes inside nodes. python/tests/profiles_tests.py | 72 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) commit f0b623c44a2cd408c568659fccea2c7273a8fea6 Author: Frederic Peters Date: Wed Jan 12 15:20:49 2005 +0000 sync documentation sections with current functions docs/reference/lasso-sections.txt | 5 +---- docs/reference/tmpl/profile.sgml | 11 ----------- 2 files changed, 1 insertion(+), 15 deletions(-) commit 225cb9a6c490defb177b73a83ab36f99ec33c729 Author: Frederic Peters Date: Wed Jan 12 15:17:10 2005 +0000 made lasso_profile_set_response_status into a private function lasso/id-ff/Makefile.am | 1 + lasso/id-ff/login.c | 4 ++-- lasso/id-ff/logout.c | 1 + lasso/id-ff/name_identifier_mapping.c | 1 + lasso/id-ff/profile.c | 1 + lasso/id-ff/profile.h | 3 --- lasso/id-ff/profileprivate.h | 42 +++++++++++++++++++++++++++++++++++ 7 files changed, 48 insertions(+), 5 deletions(-) commit a895bd81bc0e8ee4f6e05a576624b61ec5d5b66c Author: Frederic Peters Date: Wed Jan 12 15:14:29 2005 +0000 removed lasso_check_version_exact and lasso_check_version macros; renamed lasso_check_version_ext to lasso_check_version. lasso/lasso.c | 29 +++++++++++++++-------------- lasso/lasso.h | 28 ++-------------------------- 2 files changed, 17 insertions(+), 40 deletions(-) commit dec3aa17ec04ee6440361911c2ffac41eceea0df Author: Frederic Peters Date: Wed Jan 12 15:05:10 2005 +0000 install and uninstall correctly files (distcheck once again ok) csharp/Makefile.am | 4 +++- docs/reference/Makefile.am | 2 +- perl/Makefile.am | 4 ++-- 3 files changed, 6 insertions(+), 4 deletions(-) commit 7b0cc38754bd54c5ee702215774819bdac7494a3 Author: Frederic Peters Date: Wed Jan 12 14:27:34 2005 +0000 added a new bunch of files to ignore csharp/.cvsignore | 13 +++++++++++++ 1 file changed, 13 insertions(+) commit 97120e0ae741c95a510e578dbb07135279068866 Author: Frederic Peters Date: Wed Jan 12 14:27:05 2005 +0000 replaced malloc by strdup; that was stupid. csharp/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 5508882f0970269308da4a7ad22d3066b1a09842 Author: Frederic Peters Date: Wed Jan 12 14:12:47 2005 +0000 no longer allows NULL to get the first known remote provider id lasso/id-ff/name_identifier_mapping.c | 4 +--- lasso/id-ff/name_registration.c | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) commit 5f43d885271f034bb6b538c01173a75a0201d503 Author: Frederic Peters Date: Wed Jan 12 13:55:58 2005 +0000 define check variables configure.ac | 4 ++++ 1 file changed, 4 insertions(+) commit 3d15ac68fac09ac3e266bed94e87070862949574 Author: Frederic Peters Date: Wed Jan 12 13:33:06 2005 +0000 don't use am_path_check since it fails when check is not available (while it should continue and disable the test suite) configure.ac | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit a9847935e7beea2cfe0f95c55a3d28528a44958b Author: Frederic Peters Date: Wed Jan 12 11:25:18 2005 +0000 added support for SNIPPET_OPTIONAL (for use with SNIPPET_INTEGER or SNIPPET_BOOLEAN) (not that really tested) lasso/xml/private.h | 1 + lasso/xml/xml.c | 6 ++++-- 2 files changed, 5 insertions(+), 2 deletions(-) commit 501edfbcefc2407354b4050e85cd47668ed86652 Author: Frederic Peters Date: Wed Jan 12 10:02:44 2005 +0000 updated list of java swig generated files java/Makefile.am | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) commit 50d17368b2855048d3dbcf2a35d4cc2ca120f2b8 Author: Emmanuel Raviart Date: Wed Jan 12 09:36:54 2005 +0000 Python: Added tests for list of nodes. python/tests/profiles_tests.py | 52 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) commit 31f56486811c00e336d3ed54feed7951a9b88a67 Author: Frederic Peters Date: Wed Jan 12 09:12:52 2005 +0000 use snippts in #LassoProvider and #LassoServer lasso/id-ff/provider.c | 53 +++++++++++++++++++----------------------------- lasso/id-ff/server.c | 55 ++++++++++++++++++++++++-------------------------- 2 files changed, 47 insertions(+), 61 deletions(-) commit 938d60afcefacb9a9d4deb94ef171cb634c43774 Author: Emmanuel Raviart Date: Tue Jan 11 23:35:02 2005 +0000 Corrected SWIG PHP output patch to be pre-C99 compatible. php/patch_swig_output.py | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) commit a1f6a3fd8e4bf3d6adeafd381096659324f36997 Author: Emmanuel Raviart Date: Tue Jan 11 23:30:37 2005 +0000 Swig: Cancel a %newobject getitem, because a %newobject getitem applies to every method getitem in every classes below. This caused an "interesting" memory handling bug. swig/Lasso.i | 3 +++ 1 file changed, 3 insertions(+) commit 9a6f61fcee16c822d6f23d07e820f546747a9a06 Author: Emmanuel Raviart Date: Tue Jan 11 23:26:19 2005 +0000 Beginning to add binding specific tests. The objective is to port these tests to every binding. Discovered a binding bug in list handling. python/tests/profiles_tests.py | 90 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 84 insertions(+), 6 deletions(-) commit 515f5059e881bb8495baf8e2ecaad6cf5d33a982 Author: Frederic Peters Date: Tue Jan 11 14:06:50 2005 +0000 homogenous quoting for "x" comparisons configure.ac | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) commit 01d8e3e28b7246b62dd4b16bbeb2b33908f66b3a Author: Frederic Peters Date: Tue Jan 11 13:27:42 2005 +0000 even more files to ignore java/.cvsignore | 3 +++ 1 file changed, 3 insertions(+) commit 01ce4f0f8470aa82ab5d2f7e1f879b266070e307 Author: Frederic Peters Date: Tue Jan 11 13:26:46 2005 +0000 include new java files (note that I also modified the buildbox, it was not checking lasso.jar file, it does now and will therefore fail, too bad) java/.cvsignore | 12 ++++++++++++ java/Makefile.am | 9 ++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) commit b7c4db181c039bdbb4b06538bbeec033658e7eca Author: Frederic Peters Date: Mon Jan 10 21:47:18 2005 +0000 documented lasso_node_get_xmlNode lasso/xml/xml.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) commit 98b86610af98872b9406c1a741b675200a8670aa Author: Frederic Peters Date: Mon Jan 10 21:46:39 2005 +0000 Reserved space for private_data expansion, so it will be possible to maintain ABI compatibility if changes are needed. Documented some functions (and switched some destroy to use lasso_node_destroy). lasso/id-ff/defederation.h | 2 ++ lasso/id-ff/lecp.h | 5 ++++- lasso/id-ff/login.c | 2 +- lasso/id-ff/name_identifier_mapping.c | 18 +++++++++++++++++- lasso/id-ff/name_identifier_mapping.h | 5 +++++ lasso/id-ff/name_registration.c | 8 +++++++- lasso/id-ff/name_registration.h | 5 +++++ 7 files changed, 41 insertions(+), 4 deletions(-) commit c12d31aea5f5cfe23f994d214716de63e8476105 Author: Frederic Peters Date: Mon Jan 10 09:38:45 2005 +0000 integrate patch_swig_output.py in PHP swig module build process php/Makefile.am | 2 ++ 1 file changed, 2 insertions(+) commit a3ec4fd557958f906729ef221cf552b0898cb634 Author: Frederic Peters Date: Mon Jan 10 09:31:34 2005 +0000 changed php swig patch script to use stdin and stdout php/patch_swig_output.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) commit 9a741aa87859b4cb10f5c644608859ee8c112a1d Author: Emmanuel Raviart Date: Sun Jan 9 23:38:13 2005 +0000 Swig: Added a patch to PHP, so that it handles correctly dynamic cast of function results. [Note: Patch is not integrated in Makefile.am.] php/patch_swig_output.py | 129 +++++++++++++++++++++++++++++++++++++++++++++++ swig/Lasso.i | 29 +++++++++++ 2 files changed, 158 insertions(+) commit e86892f3c014f2bbbd236cb2706d5004facdc2bc Author: Frederic Peters Date: Sun Jan 9 17:15:13 2005 +0000 fixed comment about gcc 2.95 swig/Lasso.i | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 766714cf126034fd786ed5fa08d659b2bc28761b Author: Frederic Peters Date: Sun Jan 9 16:45:46 2005 +0000 removed hack to get to lib; it doesn't seem to work elsewhere. php/tests/perfs.php | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) commit 89a08ce318035f00515a1ca2c5665019e0bda726 Author: Emmanuel Raviart Date: Sun Jan 9 15:37:39 2005 +0000 Swig: Corrected LassoNode node_info. swig/Lasso.i | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) commit f2d24dffda0d03036b3b2f5d5fb1812deef3c334 Author: Emmanuel Raviart Date: Sun Jan 9 15:28:19 2005 +0000 Swig: Removed login & lecp authnRequest & authnResponse attribute. Now uses attributes request & response, like C. Added dynamic casting to AuthnRequestAbstract & AuthnResponseAbstract. python/tests/profiles_tests.py | 5 +- swig/Lasso.i | 159 ++++++++++++++--------------------------- 2 files changed, 55 insertions(+), 109 deletions(-) commit 5947af84b10542e8c1d24413d105b071c5b663b2 Author: Frederic Peters Date: Sun Jan 9 14:19:48 2005 +0000 replaced strncpy calls by g_strlcpy lasso/xml/xml.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) commit 39ce94d79f42529d4b6bac0d184245416e3fdb87 Author: Frederic Peters Date: Sun Jan 9 13:44:53 2005 +0000 deals with lines ending with \; compile regex only once. lasso/extract_symbols.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 35e3d811cd17ad973ea4719382a6a7d0f879e865 Author: Frederic Peters Date: Sun Jan 9 13:44:24 2005 +0000 ends lines with \ so they get caught by extract_symbols.py lasso/xml/saml_audience_restriction_condition.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 6a7c80d7dfc26b2c50ec21281e85a3fd6aa91e48 Author: Emmanuel Raviart Date: Sun Jan 9 12:42:43 2005 +0000 Swig: Beginning to add a kind of inheritance mechanism to LassoNode. Swig: Added missing classes. swig/Lasso.i | 591 ++++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 524 insertions(+), 67 deletions(-) commit 3864dfe70f035327c5b376db72176b5d2482d56b Author: Emmanuel Raviart Date: Sat Jan 8 21:18:21 2005 +0000 Swig: Added several GList items. Swig: Added SamlpRequestAbstract inheritance. swig/Lasso.i | 815 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 806 insertions(+), 9 deletions(-) commit ba093f3e1536a5eb5044c3ee11672a720246a914 Author: Frederic Peters Date: Sat Jan 8 18:25:29 2005 +0000 reserve abi-space for unsupported elements in saml:Assertion lasso/xml/saml_assertion.h | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) commit 167f8492ebfbe61207abe87f40b9b8a84f2b1f0a Author: Emmanuel Raviart Date: Sat Jan 8 18:00:00 2005 +0000 Renamed NodeArray (resp. StringArray) to NodeList (resp. StringList). csharp/Makefile.am | 4 ++-- java/Makefile.am | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) commit 9491b10cb82b3ce06190a7af809f30d07e74d3c0 Author: Emmanuel Raviart Date: Sat Jan 8 17:53:23 2005 +0000 Renamed LassoStringArray to LassoStringList. swig/Lasso.i | 48 ++++++++++++++++++++++++------------------------ 1 file changed, 24 insertions(+), 24 deletions(-) commit 3101c8c09007e4036e4009475a4bf399c72faaf6 Author: Emmanuel Raviart Date: Sat Jan 8 17:49:32 2005 +0000 Corrected a typo. swig/Lasso.i | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit e52ac7dd278d2015d7651cf5177868db9a6343e2 Author: Emmanuel Raviart Date: Sat Jan 8 17:37:49 2005 +0000 Corrected a copy/paste error. swig/Lasso.i | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit e4a1a57e3a4fda4a73be381ddaa6cba9576f9d46 Author: Emmanuel Raviart Date: Sat Jan 8 17:35:11 2005 +0000 Swig: Renamed LassoNodeArray to LassoNodeList, because, although it is physically an array, it is the Swig binding of a GList. swig/Lasso.i | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) commit ed9d5178ceeeaa1810855c52acce5986c677856f Author: Emmanuel Raviart Date: Sat Jan 8 17:30:56 2005 +0000 Swig: Added Assertion attribute in samlp:Response. swig/Lasso.i | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) commit 6ddec77e1bc46af42824d1cd10603a823bab693c Author: Frederic Peters Date: Sat Jan 8 17:22:09 2005 +0000 moved remaining unbounded elements to GList* (samlp:Response/Assertion being part of that bunch) lasso/id-ff/login.c | 22 +++++++++++++--------- lasso/xml/lib_assertion.c | 4 ++-- lasso/xml/saml_conditions.c | 3 ++- lasso/xml/saml_conditions.h | 8 ++++---- lasso/xml/samlp_request_abstract.c | 2 ++ lasso/xml/samlp_request_abstract.h | 2 +- lasso/xml/samlp_response.c | 2 +- lasso/xml/samlp_response.h | 2 +- 8 files changed, 26 insertions(+), 19 deletions(-) commit cf134bfd7be7e629b16dd2046392b43720bbdb68 Author: Emmanuel Raviart Date: Sat Jan 8 17:15:55 2005 +0000 In SWIG, enclosed %init code inside braces to preserve gcc 2.95 compatibility. swig/Lasso.i | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) commit bfc8da6cb855b4a135b50f08a3fd79eef6fc570f Author: Emmanuel Raviart Date: Sat Jan 8 16:27:55 2005 +0000 In SWIG added support for conversion to and from LassoNode. Not implemented for C# nor Java yet. swig/Lasso.i | 155 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 147 insertions(+), 8 deletions(-) commit bfcb490be39511c5357638e121e96e49bd6dfd6b Author: Frederic Peters Date: Sat Jan 8 15:52:30 2005 +0000 turned a bunch of unbounded elements into GList* lasso/xml/lib_assertion.c | 3 +-- lasso/xml/lib_authentication_statement.c | 3 ++- lasso/xml/lib_authn_context.h | 2 +- lasso/xml/lib_authn_request.h | 4 ++-- lasso/xml/lib_authn_response_envelope.h | 2 +- lasso/xml/lib_request_authn_context.c | 4 ++-- lasso/xml/lib_request_authn_context.h | 6 +++--- lasso/xml/saml_advice.c | 2 +- lasso/xml/saml_advice.h | 3 +-- lasso/xml/saml_audience_restriction_condition.c | 24 +++++++++++++++++++++++- lasso/xml/saml_audience_restriction_condition.h | 4 +++- lasso/xml/saml_authentication_statement.c | 2 +- lasso/xml/saml_authentication_statement.h | 2 +- lasso/xml/saml_subject_confirmation.c | 2 +- lasso/xml/saml_subject_confirmation.h | 2 +- 15 files changed, 44 insertions(+), 21 deletions(-) commit a110f6284980d31d09a59ede113ddeb41c8a2396 Author: Frederic Peters Date: Sat Jan 8 15:47:52 2005 +0000 only give xsi namespace to nodes with xsi: attributes lasso/xml/saml_assertion.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit 04ca2578a09ca7566e31f3e3f68388bbc7e4278c Author: Frederic Peters Date: Sat Jan 8 15:15:06 2005 +0000 fixed maintainer-clean target for Perl binding perl/Makefile.am | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) commit 3421a1f88ec972474623f24c960572ebfc0624c8 Author: Frederic Peters Date: Sat Jan 8 14:01:55 2005 +0000 port of perfs.c to PHP (it is surprisingly faster than the C version). php/tests/perfs.php | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) commit 1507aff943e0907f71413b0dffdd6538fa57f2fc Author: Frederic Peters Date: Sat Jan 8 13:53:42 2005 +0000 check for identity in build_assertion lasso/id-ff/login.c | 3 +++ 1 file changed, 3 insertions(+) commit d433c26a2dd4d89e2f1f709a65d9fbf2b6956737 Author: Frederic Peters Date: Fri Jan 7 12:17:07 2005 +0000 beginning of a C# version of perfs.c csharp/examples/perfs.cs | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) commit 23804d368275fe9e027e49f056a520eedf7c6ab8 Author: Frederic Peters Date: Fri Jan 7 12:16:01 2005 +0000 updated simple C# example csharp/examples/runme.cs | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) commit d1040095470cad9c39cb3a3dda2d4867ea16516d Author: Frederic Peters Date: Fri Jan 7 09:28:11 2005 +0000 put c# binding in a lasso namespace csharp/Makefile.am | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit f6207969b0c61bcf5b77cc5c05abe0e2d9061069 Author: Frederic Peters Date: Wed Jan 5 17:47:56 2005 +0000 properly creates lasso-src-config from lasso-src-config.in configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 650b16d7085600e092cd8900d1a9bc22e88e765b Author: Frederic Peters Date: Wed Jan 5 16:37:09 2005 +0000 mark sameNs as inline since it is short and often called (thanks to kcachegrind for profiling details) lasso/xml/xml.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) commit d6fe2ce4f8123ec283e8fba4d8a9b58ad0e0b19b Author: Frederic Peters Date: Tue Jan 4 16:29:43 2005 +0000 fixed element name for SubjectConfirmation lasso/xml/saml_subject_confirmation.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit c5f81111a87af2786d65ed66324d967561af07aa Author: Frederic Peters Date: Tue Jan 4 16:21:08 2005 +0000 fixed order of samlp:Response elements lasso/xml/samlp_response.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 174c7ed696fbc4daa297c8019fcaa11a3c84d840 Author: Frederic Peters Date: Tue Jan 4 15:40:37 2005 +0000 clean some state and uri escape artifact lasso/id-ff/login.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) commit 83e79511d94c5c75a7bc3fe6f17c897089803865 Author: Frederic Peters Date: Tue Jan 4 12:42:02 2005 +0000 correctly allocates memory for nameidentifier attributes lasso/id-ff/login.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit fe3928ad821c950709d026147e39b51a9c58e506 Author: Frederic Peters Date: Tue Jan 4 12:21:30 2005 +0000 removed individual debug() statements in dispose() and finalize(); replaced by a single statement in xml/xml.c; surrouded that one by LASSO_DEBUG so --enable-debugging prints those memory-management debugging data. lasso/id-ff/federation.c | 5 ----- lasso/id-ff/identity.c | 5 ----- lasso/id-ff/lecp.c | 1 - lasso/id-ff/logout.c | 3 --- lasso/id-ff/profile.c | 6 ------ lasso/id-ff/provider.c | 4 ---- lasso/id-ff/server.c | 5 ----- lasso/id-ff/session.c | 4 ---- lasso/id-wsf/discovery.c | 12 +++--------- lasso/xml/xml.c | 4 ++-- 10 files changed, 5 insertions(+), 44 deletions(-) commit 61f7da4c198c167d52980e60b73b88c11ac0c1c1 Author: Frederic Peters Date: Tue Jan 4 12:19:44 2005 +0000 added missing ; lasso/xml/tools.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit ac3eab37a681861b9267f850a1af1d39a7744022 Author: Frederic Peters Date: Tue Jan 4 12:13:09 2005 +0000 completely handle memory management for sessions lasso/id-ff/session.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) commit 9c96548f3ec805c89c894b4fd079d6f2ef2bce0c Author: Frederic Peters Date: Tue Jan 4 12:12:06 2005 +0000 properly allocates memory for constant strings used in messages (or readonly memory would be freed and segfaults would happen) lasso/xml/lib_authentication_statement.c | 4 ++-- lasso/xml/xml.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) commit 31acb1008110e3aae54005ad04d869b30825648a Author: Frederic Peters Date: Tue Jan 4 11:16:21 2005 +0000 created serverprivate.h for two private #LassoServer methods docs/reference/lasso-sections.txt | 2 -- docs/reference/tmpl/provider.sgml | 9 +++++++++ docs/reference/tmpl/server.sgml | 19 ------------------- lasso/id-ff/Makefile.am | 1 + lasso/id-ff/login.c | 1 + lasso/id-ff/server.c | 1 + lasso/id-ff/server.h | 4 ---- lasso/id-ff/serverprivate.h | 40 +++++++++++++++++++++++++++++++++++++++ 8 files changed, 52 insertions(+), 25 deletions(-) commit 64d858f0a96f432248e6b6a9723357a8a17a0282 Author: Frederic Peters Date: Tue Jan 4 10:13:05 2005 +0000 rewrote lasso_login_init_idp_initiated_authn_request using lasso_login_init_authn_request to avoid duplication. lasso/id-ff/login.c | 85 +++++++++++++++++++---------------------------------- 1 file changed, 31 insertions(+), 54 deletions(-) commit e57ca2228d0e5f691a3cbca67af55e63474c9842 Author: Frederic Peters Date: Tue Jan 4 09:58:55 2005 +0000 don't care about NameFormat and NameQualifier in comparaison lasso/id-ff/federation.c | 2 -- 1 file changed, 2 deletions(-) commit 0941616c85a1437b1e070b179ca2d5561fe830d2 Author: Frederic Peters Date: Tue Jan 4 09:35:22 2005 +0000 makefile perl magic to get distcheck running (disabled installation) perl/Makefile.am | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) commit e8241b8fe4af424669796004c93ed653c61d642f Author: Emmanuel Raviart Date: Mon Jan 3 21:21:45 2005 +0000 SWIG binding helper functions are now static. Added binding for saml:Attribute. swig/Lasso.i | 111 ++++++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 95 insertions(+), 16 deletions(-) commit 2daf315a1b9609a275f5464d69409f81bd5db522 Author: Frederic Peters Date: Mon Jan 3 18:38:10 2005 +0000 added include of #LassoSamlAttribute header file for #LassoSamlAttributeStatement lasso/xml/saml_attribute_statement.h | 1 + 1 file changed, 1 insertion(+) commit 5bb92a57d0075526f105fe065e2264589ef7135b Author: Frederic Peters Date: Mon Jan 3 17:41:55 2005 +0000 updated swig generated java files list to have a working make distcheck java/.cvsignore | 82 +++++++++++++++++++++++++++++++++++++++----------------- java/Makefile.am | 35 +++++++++++++++++------- 2 files changed, 82 insertions(+), 35 deletions(-) commit a3769283790b0cbbccd303b415c5a2fc39144c2c Author: Frederic Peters Date: Mon Jan 3 17:29:20 2005 +0000 build and ship html documentation; distcheck runs ok. docs/reference/Makefile.am | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) commit 02c56f4b2ff774b77df604d00012a99ce593b855 Author: Frederic Peters Date: Mon Jan 3 14:05:57 2005 +0000 fixed succint typo docs/reference/lasso-sections.txt | 2 +- docs/reference/tmpl/federation.sgml | 18 ----------------- docs/reference/tmpl/login.sgml | 2 +- docs/reference/tmpl/profile.sgml | 4 ++-- docs/reference/tmpl/provider.sgml | 39 +++++++++++++------------------------ 5 files changed, 17 insertions(+), 48 deletions(-) commit 0d375308823df547263125837c70850e841bcf25 Author: Frederic Peters Date: Mon Jan 3 13:42:12 2005 +0000 copy version.xml from the right location for make distcheck to work docs/reference/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 42a7a21629e01d993e0ef09243b8359f0ab7289c Author: Frederic Peters Date: Mon Jan 3 13:41:54 2005 +0000 updated swig output files list for make distcheck csharp/.cvsignore | 90 ++++++++++++++++++++++++++++++++++++------------------ csharp/Makefile.am | 35 +++++++++++++++------ 2 files changed, 85 insertions(+), 40 deletions(-) commit 43ed06001493f291edc796746fa2bd48474ec013 Author: Frederic Peters Date: Mon Jan 3 12:47:35 2005 +0000 more perl files to ignore perl/.cvsignore | 6 ++++++ 1 file changed, 6 insertions(+) commit e196eb937aeb0f909d58f362c9ad983a6460fb3a Author: Emmanuel Raviart Date: Sun Jan 2 23:27:09 2005 +0000 Adding SWIG support for GList of LassoNodes. Not finished. swig/Lasso.i | 673 +++++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 424 insertions(+), 249 deletions(-) commit 7910d90d472de46ec348685e60045758205fc5db Author: Frederic Peters Date: Sun Jan 2 22:53:14 2005 +0000 use choosen CC and CFLAGS when compiling the perl module perl/Makefile.PL | 2 ++ perl/Makefile.am | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) commit dc827ee8a98038716df142cd0cc2876e147b0e12 Author: Frederic Peters Date: Sun Jan 2 22:37:25 2005 +0000 Perl module builds and links correctly. Makefile.am | 2 +- configure.ac | 2 ++ lasso-src-config.in | 93 +++++++++++++++++++++++++++++++++++++++++++++++++++++ perl/Makefile.PL | 31 ++++++++++++++++-- perl/Makefile.am | 2 +- 5 files changed, 125 insertions(+), 5 deletions(-) commit a366436870c767f8f7701dda8d6ee6d2ef65571b Author: Emmanuel Raviart Date: Sun Jan 2 17:28:21 2005 +0000 Improved SWIG binding for assertions. swig/Lasso.i | 787 +++++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 710 insertions(+), 77 deletions(-) commit fb05698045ead8daaf91259f77305d0114eb4733 Author: Frederic Peters Date: Sun Jan 2 13:07:27 2005 +0000 building the perl binding perl/Makefile.PL | 15 +++++++++++++++ perl/Makefile.am | 45 ++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 59 insertions(+), 1 deletion(-) commit f3777223c26f89f7305d4a4fbc410b48820b160f Author: Emmanuel Raviart Date: Sun Jan 2 11:40:22 2005 +0000 Improved Extension support in SWIG. Corrected use of %newobject in SWIG. swig/Lasso-wsf.i | 7 +- swig/Lasso.i | 211 +++++++++++++++++++++++++++++++++++-------------------- 2 files changed, 141 insertions(+), 77 deletions(-) commit e16753d1096d9d4fdef1f347f915bb98cc53e081 Author: Frederic Peters Date: Sun Jan 2 11:36:11 2005 +0000 first step to perl bindings (they still need to be compiled and installed correctly) Makefile.am | 5 +++- configure.ac | 79 ++++++++++++++++++++++++++++++++++++++++++++------------ perl/.cvsignore | 8 ++++++ perl/Makefile.am | 14 ++++++++++ 4 files changed, 89 insertions(+), 17 deletions(-) commit 76f6e65853bc68ab31b07ff1d7d919898027a7fe Author: Frederic Peters Date: Sat Jan 1 19:18:18 2005 +0000 accounts for changes in lasso_node_dump tests/random_tests.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) commit 9b444f779618d55bceceb06d19bceeefe9963fcf Author: Frederic Peters Date: Sat Jan 1 18:53:30 2005 +0000 Removed second and third parameters of lasso_node_dump since @encoding is always UTF-8 and @format is always to indent XML in lasso dumps. lasso/id-ff/identity.c | 2 +- lasso/id-ff/login.c | 2 +- lasso/id-ff/logout.c | 2 +- lasso/id-ff/name_identifier_mapping.c | 2 +- lasso/id-ff/name_registration.c | 2 +- lasso/id-ff/server.c | 2 +- lasso/id-ff/service.c | 2 +- lasso/id-ff/session.c | 2 +- lasso/id-wsf/discovery.c | 2 +- lasso/xml/xml.c | 24 +++--------- lasso/xml/xml.h | 2 +- swig/Lasso.i | 72 +++++++++++++++++------------------ 12 files changed, 51 insertions(+), 65 deletions(-) commit f40931b78a4cba76c7109395f64a573c2ae447f9 Author: Frederic Peters Date: Sat Jan 1 18:41:17 2005 +0000 removed lasso_federation_set_local_name_identifier and lasso_federation_set_remote_name_identifier; they were no longer necessary. docs/reference/lasso-sections.txt | 2 -- lasso/id-ff/federation.c | 34 ---------------------------------- lasso/id-ff/federation.h | 5 ----- lasso/id-ff/name_registration.c | 8 ++++++-- 4 files changed, 6 insertions(+), 43 deletions(-) commit 44a0550240c2f451ad37e2bc7e32ba611e44f3a7 Author: Emmanuel Raviart Date: Sat Jan 1 17:51:18 2005 +0000 Removed %rename for attributes in PHP binding, because they currently don't work. swig/Lasso.i | 151 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 151 insertions(+) commit f0e513e25e6272a550b79521371899d87075eafb Author: Frederic Peters Date: Sat Jan 1 17:36:12 2005 +0000 applied esaracco patch for check configure test configure.ac | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) commit 230b4d8ebc82388bd926ce4c19630f6c7d052436 Author: Emmanuel Raviart Date: Sat Jan 1 13:43:16 2005 +0000 Changed the way %extend was used in SWIG. swig/Lasso.i | 741 +++++++++++++++++++++++++++++------------------------------ 1 file changed, 370 insertions(+), 371 deletions(-) commit 6edf9797b20d45657d6c53fecb19b5355955bbfd Author: Emmanuel Raviart Date: Sat Jan 1 12:10:04 2005 +0000 Removed binding for functions lasso_federation_set_local_name_identifier and lasso_federation_set_remote_name_identifier: the are useless. swig/Lasso.i | 6 ------ 1 file changed, 6 deletions(-) commit 305741766ec725227e38076dc3420cc231ca36a5 Author: Emmanuel Raviart Date: Sat Jan 1 11:47:54 2005 +0000 SWIG binding now uses only lasso_node_destroy for LassoNode: no more g_object_unref nor lasso_xxx_destroy. swig/Lasso.i | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) commit f22e915b3746fbd7ec841be046c3aefa7f67ba56 Author: Emmanuel Raviart Date: Sat Jan 1 10:37:26 2005 +0000 SWIG binding: Added Federation; updated Identity. swig/Lasso.i | 148 +++++++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 119 insertions(+), 29 deletions(-) commit af8c562d27f4ef1199ec15891c54e36b6a32d8fb Author: Emmanuel Raviart Date: Sat Jan 1 01:53:24 2005 +0000 Back to camelCase for attributes in SWIG binding. swig/Lasso.i | 161 +++++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 141 insertions(+), 20 deletions(-) commit 3f66b6f3054360c897cb235d0e607dbe83b9334e Author: Emmanuel Raviart Date: Fri Dec 31 22:35:28 2004 +0000 Updated LassoServer SWIG binding. lasso/id-ff/server.h | 6 ++- swig/Lasso.i | 139 +++++++++++++++++++++++++++++++++++++-------------- 2 files changed, 105 insertions(+), 40 deletions(-) commit c24d94f1ffa3b34f5b609870c31f98cb23bbc875 Author: Frederic Peters Date: Fri Dec 31 18:43:40 2004 +0000 replaced enum name in methods added between two cvs runs swig/Lasso.i | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) commit ac3e5574fc5c6fb3ec5fcbe3826928422f182b74 Author: Frederic Peters Date: Fri Dec 31 18:33:23 2004 +0000 moved remaining lasso[A-Z].* enums to Lasso[A-Z].* docs/reference/lasso-sections.txt | 16 ++++---- lasso/id-ff/defederation.c | 2 +- lasso/id-ff/defederation.h | 2 +- lasso/id-ff/login.c | 6 +-- lasso/id-ff/login.h | 12 +++--- lasso/id-ff/logout.c | 4 +- lasso/id-ff/logout.h | 4 +- lasso/id-ff/name_registration.c | 4 +- lasso/id-ff/name_registration.h | 2 +- lasso/id-ff/profile.c | 4 +- lasso/id-ff/profile.h | 8 ++-- lasso/id-ff/provider.c | 17 ++++----- lasso/id-ff/provider.h | 14 +++---- lasso/id-ff/server.h | 2 +- lasso/lasso.c | 2 +- lasso/lasso.h | 6 +-- .../xml/lib_federation_termination_notification.c | 2 +- .../xml/lib_federation_termination_notification.h | 2 +- lasso/xml/lib_logout_request.c | 2 +- lasso/xml/lib_logout_request.h | 2 +- lasso/xml/lib_logout_response.c | 2 +- lasso/xml/lib_logout_response.h | 2 +- lasso/xml/lib_name_identifier_mapping_request.c | 2 +- lasso/xml/lib_name_identifier_mapping_request.h | 2 +- lasso/xml/lib_name_identifier_mapping_response.c | 2 +- lasso/xml/lib_name_identifier_mapping_response.h | 2 +- lasso/xml/lib_register_name_identifier_request.c | 2 +- lasso/xml/lib_register_name_identifier_request.h | 2 +- lasso/xml/lib_register_name_identifier_response.c | 2 +- lasso/xml/lib_register_name_identifier_response.h | 2 +- lasso/xml/private.h | 9 ++--- lasso/xml/saml_assertion.h | 4 +- lasso/xml/samlp_request_abstract.h | 4 +- lasso/xml/samlp_response_abstract.h | 4 +- lasso/xml/tools.c | 8 ++-- lasso/xml/xml.c | 10 ++--- lasso/xml/xml.h | 6 +-- swig/Lasso.i | 44 +++++++++++----------- 38 files changed, 110 insertions(+), 112 deletions(-) commit 113c9ccd3f4c5255c682a3e831774313585bb8d5 Author: Emmanuel Raviart Date: Fri Dec 31 18:28:30 2004 +0000 Updated SWIG binding for LassoProvider. swig/Lasso.i | 79 +++++++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 65 insertions(+), 14 deletions(-) commit 487b1ff63f5e6eccbce6d45d127a4dc38e3c8516 Author: Emmanuel Raviart Date: Fri Dec 31 18:21:32 2004 +0000 Spelling correction: succint -> succinct. lasso/id-ff/login.c | 14 +++++++------- lasso/id-ff/provider.c | 18 +++++++++--------- lasso/id-ff/provider.h | 2 +- 3 files changed, 17 insertions(+), 17 deletions(-) commit f118492b5b90279cdc8daa4e091c6badaa7213e6 Author: Emmanuel Raviart Date: Fri Dec 31 17:30:37 2004 +0000 In SWIG, added constructor, destructor and dump to "lib:" objects. swig/Lasso.i | 183 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 175 insertions(+), 8 deletions(-) commit de5b985b0b9855701ca9a15c45b13292ae3c7960 Author: Emmanuel Raviart Date: Fri Dec 31 16:38:37 2004 +0000 Improved SWIG bindings of "lib:" objects. swig/Lasso.i | 322 +++++++++++++++++++++++++++++++++++------------------------ 1 file changed, 189 insertions(+), 133 deletions(-) commit 815595a4d588f8388299b6e6f98daf2f426965bf Author: Frederic Peters Date: Fri Dec 31 15:37:21 2004 +0000 moved lasso_strerror to public interface lasso/xml/errors.c | 4 +++- lasso/xml/errors.h | 1 - lasso/xml/xml.h | 2 ++ 3 files changed, 5 insertions(+), 2 deletions(-) commit aed3f5693a83481681974bb8c66368c7c3acca46 Author: Frederic Peters Date: Fri Dec 31 14:32:48 2004 +0000 removed obsolete (since move to structure) lasso_node_verify_signature (but lasso is still lacking signature check for assertion) docs/reference/lasso-sections.txt | 1 - lasso/id-ff/login.c | 7 +- lasso/xml/xml.c | 134 -------------------------------------- lasso/xml/xml.h | 3 - 4 files changed, 1 insertion(+), 144 deletions(-) commit bd0a86d275398ac86c7e2dac10055c9e692424e3 Author: Frederic Peters Date: Fri Dec 31 14:21:44 2004 +0000 sets InResponseTo in samlp:Response lasso/id-ff/login.c | 2 ++ lasso/xml/samlp_response.c | 1 - 2 files changed, 2 insertions(+), 1 deletion(-) commit c30358cd603b42a2c65c1b89c5cc00e69c0d8cd2 Author: Frederic Peters Date: Fri Dec 31 13:42:18 2004 +0000 ret > 0 no longer happens lasso/id-ff/login.c | 3 --- 1 file changed, 3 deletions(-) commit b783a9e11c7b45d7013896283fdca967535989d4 Author: Frederic Peters Date: Fri Dec 31 13:40:38 2004 +0000 if AuthnRequestsSigned is missing assume it as TRUE lasso/id-ff/login.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 5aa4cb60689cbb5cd979698f8ea1fdd7835457b6 Author: Frederic Peters Date: Fri Dec 31 13:24:41 2004 +0000 removed obsolete comment lasso/id-ff/login.c | 2 -- 1 file changed, 2 deletions(-) commit 6e88aac8cf459b8e74a5621faf74d940f53376d1 Author: Frederic Peters Date: Fri Dec 31 13:23:08 2004 +0000 error on missing lasso/id-ff/login.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) commit 5f06b9259036ccd4ddd90fae6579e98c3b440fc2 Author: Frederic Peters Date: Fri Dec 31 13:10:09 2004 +0000 memory management in #LassoLogout (actually already done with snippets; nothing to do but removing old FIXME comments) lasso/id-ff/logout.c | 7 ------- 1 file changed, 7 deletions(-) commit 8c9419003b13c6128658b5aad64904abd1eac4ed Author: Frederic Peters Date: Fri Dec 31 13:06:21 2004 +0000 it sure must be set to NULL lasso/id-ff/name_registration.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit c128cdc47c0f40275565ca883f057479d0bd9b47 Author: Frederic Peters Date: Fri Dec 31 12:43:19 2004 +0000 memory management in #LassoProvider lasso/id-ff/provider.c | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) commit af89eeec2839f0220b56c51c4fc20e3047731958 Author: Frederic Peters Date: Fri Dec 31 12:38:34 2004 +0000 don't output memory management debug strings lasso/xml/xml.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 0f200c3cbe492ec191fe1608c4c796014aa4b51a Author: Frederic Peters Date: Fri Dec 31 12:00:26 2004 +0000 ignore version.xml docs/reference/.cvsignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit e6d2d1938beab64200ec758c77b849f6bbbc7558 Author: Frederic Peters Date: Fri Dec 31 11:59:59 2004 +0000 added new saml classes and removed private functions from #LassoProvider docs/reference/lasso-sections.txt | 62 +++++++++++++++++++++++++++++++++++++-- docs/reference/tmpl/provider.sgml | 22 -------------- 2 files changed, 60 insertions(+), 24 deletions(-) commit a5322cfc64ccae09de38ba450b13b24c08bf1858 Author: Frederic Peters Date: Fri Dec 31 11:52:26 2004 +0000 fixed spelling in lasso_provider_new_from_dump description lasso/id-ff/provider.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) commit a61cc3926922beecb667c048626f901ca8173a9b Author: Frederic Peters Date: Fri Dec 31 11:51:11 2004 +0000 moved some lasso private functions to new providerprivate.h; insure it is included properly in other files (as well as some sessionprivate.h that were missing) lasso/id-ff/Makefile.am | 1 + lasso/id-ff/defederation.c | 3 +++ lasso/id-ff/login.c | 1 + lasso/id-ff/logout.c | 2 ++ lasso/id-ff/name_identifier_mapping.c | 2 ++ lasso/id-ff/name_registration.c | 2 ++ lasso/id-ff/provider.c | 10 +++++++++ lasso/id-ff/provider.h | 5 ----- lasso/id-ff/providerprivate.h | 41 +++++++++++++++++++++++++++++++++++ lasso/id-ff/server.c | 2 ++ 10 files changed, 64 insertions(+), 5 deletions(-) commit a8a0e34c30ee44043d2a92e6bbc423df2b1623c8 Author: Frederic Peters Date: Fri Dec 31 11:44:43 2004 +0000 documented lasso_server_get_providerID_from_hash, reaching: 60% symbol docs coverage (151 symbols documented, 101 not documented) lasso/id-ff/server.c | 10 ++++++++++ 1 file changed, 10 insertions(+) commit 300dfa310e93e95799a42042530ca9412b60bd06 Author: Frederic Peters Date: Fri Dec 31 11:40:16 2004 +0000 fixed parameter name in constructor lasso/xml/lib_authn_response_envelope.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit cf215e552ee8d126f4d34fe021577865259ab19f Author: Frederic Peters Date: Fri Dec 31 11:38:57 2004 +0000 fixed function name in docstring for #LassoLibAuthnResponseEnvelope constructor lasso/xml/lib_authn_response_envelope.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 4229c60d990fedf09796209a168f133165462995 Author: Frederic Peters Date: Fri Dec 31 11:33:28 2004 +0000 documented a bunch of LassoSaml* classes _new functions lasso/xml/saml_attribute.c | 8 +++++++- lasso/xml/samlp_request.c | 9 ++++++++- lasso/xml/samlp_response.c | 9 ++++++++- lasso/xml/samlp_status.c | 8 +++++++- lasso/xml/samlp_status_code.c | 8 +++++++- 5 files changed, 37 insertions(+), 5 deletions(-) commit 305791ba1e72c9916ee2358eeb4b5d188276ef19 Author: Frederic Peters Date: Fri Dec 31 11:23:40 2004 +0000 documented a bunch of other xml base objects .../xml/lib_federation_termination_notification.c | 3 ++- lasso/xml/lib_logout_request.c | 20 +++++++++++++++++ lasso/xml/lib_logout_response.c | 22 ++++++++++++++++++- lasso/xml/lib_name_identifier_mapping_request.c | 22 +++++++++++++++++++ lasso/xml/lib_name_identifier_mapping_response.c | 22 ++++++++++++++++++- lasso/xml/lib_register_name_identifier_request.c | 25 ++++++++++++++++++++-- lasso/xml/lib_register_name_identifier_response.c | 23 +++++++++++++++++++- lasso/xml/lib_request_authn_context.c | 8 +++++++ 8 files changed, 139 insertions(+), 6 deletions(-) commit b631b0a49cf7911ac6db153ce30ef47bb646911d Author: Frederic Peters Date: Fri Dec 31 11:22:36 2004 +0000 forgot a parameter in lasso_login_validate_request_msg docstring lasso/id-ff/login.c | 1 + 1 file changed, 1 insertion(+) commit 25e64724fc518824345f9ef56225c549eee2cb39 Author: Frederic Peters Date: Fri Dec 31 11:07:45 2004 +0000 documented remaining #LassoLogin function, lasso_login_validate_request_msg lasso/id-ff/login.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) commit fb459ca48cfb520ffdcfd23a084510a8170d0da1 Author: Frederic Peters Date: Fri Dec 31 11:03:45 2004 +0000 fixed parameter names in some #LassoLogin docstrings lasso/id-ff/login.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit b54a68d51d5ee47dd6ac71bfe1a715aaa4ac52ff Author: Frederic Peters Date: Fri Dec 31 10:51:17 2004 +0000 documented #LassoLogin lasso/id-ff/login.c | 166 +++++++++++++++++++++++++++++++++++---------------- lasso/id-ff/logout.c | 3 +- lasso/xml/xml.c | 4 ++ 3 files changed, 120 insertions(+), 53 deletions(-) commit 72d49e31271929a29a283fb0224b0f13ba0cc39e Author: Frederic Peters Date: Thu Dec 30 20:09:30 2004 +0000 more memory management for #LassoServer lasso/id-ff/server.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) commit 1206801205f7fb4f61720cd804d94bc2f744338f Author: Frederic Peters Date: Thu Dec 30 20:04:44 2004 +0000 memory management for #LassoIdentity and #LassoSession (partial) lasso/id-ff/identity.c | 5 +++-- lasso/id-ff/session.c | 9 +++++++-- 2 files changed, 10 insertions(+), 4 deletions(-) commit 4f8d34a9eee50fdf7513c149a0e8dd58157e4b73 Author: Frederic Peters Date: Thu Dec 30 19:56:12 2004 +0000 implemented _destroy for LassoService (WSF thing, but that's just a call to lasso_node_destroy) lasso/id-ff/service.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 97cd445ee361cf7da4051e81005cf59fd34fcffd Author: Frederic Peters Date: Thu Dec 30 19:27:24 2004 +0000 documented more functions, reaching 50% symbol docs coverage (126 symbols documented, 126 not documented) lasso/xml/lib_assertion.c | 21 ++++++++++++++++++++- lasso/xml/lib_authentication_statement.c | 20 ++++++++++++++++++++ lasso/xml/lib_authn_context.c | 8 +++++++- lasso/xml/lib_authn_request.c | 8 +++++++- lasso/xml/lib_authn_request_envelope.c | 22 +++++++++++++++++++++- lasso/xml/lib_authn_response.c | 11 ++++++++++- lasso/xml/lib_authn_response_envelope.c | 12 +++++++++++- .../xml/lib_federation_termination_notification.c | 21 +++++++++++++++++++++ lasso/xml/lib_idp_entries.c | 5 ++--- lasso/xml/lib_idp_entry.c | 4 ++-- lasso/xml/lib_idp_list.c | 8 ++------ lasso/xml/lib_scoping.c | 5 ++--- lasso/xml/lib_status_response.c | 8 +++++++- lasso/xml/lib_subject.c | 8 +++++++- lasso/xml/saml_advice.c | 5 ++--- lasso/xml/saml_assertion.c | 5 ++--- lasso/xml/saml_attribute_designator.c | 5 ++--- lasso/xml/saml_attribute_statement.c | 5 ++--- lasso/xml/saml_audience_restriction_condition.c | 5 ++--- lasso/xml/saml_authentication_statement.c | 5 ++--- lasso/xml/saml_authority_binding.c | 5 ++--- lasso/xml/saml_conditions.c | 5 ++--- lasso/xml/saml_name_identifier.c | 5 ++--- lasso/xml/saml_subject.c | 5 ++--- lasso/xml/saml_subject_confirmation.c | 4 ++-- lasso/xml/saml_subject_locality.c | 5 ++--- lasso/xml/saml_subject_statement.c | 5 ++--- 27 files changed, 165 insertions(+), 60 deletions(-) commit b9efc048b835c575cb10457e251e563ec425d2b8 Author: Frederic Peters Date: Thu Dec 30 17:39:22 2004 +0000 set members to NULL to be sure lasso/id-ff/profile.c | 3 +++ 1 file changed, 3 insertions(+) commit 407c5aa6ac7ae2a84fc8a746018d88206e5bf3e0 Author: Frederic Peters Date: Thu Dec 30 17:28:15 2004 +0000 request and response fields are handled by snippets; they must not be freed manually lasso/id-ff/profile.c | 5 ----- 1 file changed, 5 deletions(-) commit 3982e78385bfe3abd933e171fade94442b888772 Author: Emmanuel Raviart Date: Thu Dec 30 17:12:42 2004 +0000 Added missing g_object_ref for Logout et Lecp request and response in SWIG binding. swig/Lasso.i | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) commit 3e1dc949c95683871d63b311bcf378cc75447105 Author: Emmanuel Raviart Date: Thu Dec 30 17:05:13 2004 +0000 Removed unused GLib types from SWIG. SWIG now uses errors.h. swig/Lasso.i | 105 ++++++++++------------------------------------------------- 1 file changed, 17 insertions(+), 88 deletions(-) commit e40295bfb8ffdffdc7195bc23830f51e1597c5f6 Author: Frederic Peters Date: Thu Dec 30 16:47:35 2004 +0000 added refcounting of server to other profiles lasso/id-ff/defederation.c | 2 +- lasso/id-ff/lecp.c | 2 +- lasso/id-ff/name_identifier_mapping.c | 2 +- lasso/id-ff/name_registration.c | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) commit c87166330e5cb6087e3bfd2852bcdad8385abfe3 Author: Frederic Peters Date: Thu Dec 30 16:44:51 2004 +0000 fixing object refcounting in login/logout and proper object destruction to profile lasso/id-ff/identity.c | 2 ++ lasso/id-ff/login.c | 4 ++-- lasso/id-ff/logout.c | 4 ++-- lasso/id-ff/profile.c | 10 +++++----- lasso/id-ff/session.c | 2 ++ 5 files changed, 13 insertions(+), 9 deletions(-) commit 099f410feada24f648ab6a43d4de7208f840a223 Author: Frederic Peters Date: Thu Dec 30 15:21:51 2004 +0000 documented #LassoProfile identity and session methods lasso/id-ff/profile.c | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) commit c338481e24c97f3d3167cd4f688b3c33b849b4e1 Author: Frederic Peters Date: Thu Dec 30 15:12:12 2004 +0000 documented some new/destroy/dump/... functions lasso/id-ff/lecp.c | 16 ++++++++++++++++ lasso/id-ff/name_registration.c | 26 ++++++++++++++++++++++---- 2 files changed, 38 insertions(+), 4 deletions(-) commit 3a5285a58bcd13b8fb86e82fbc8004d4f00c0037 Author: Frederic Peters Date: Thu Dec 30 14:53:18 2004 +0000 added some missing functions to documentation docs/reference/lasso-sections.txt | 16 ++++++++++++++++ docs/reference/tmpl/login.sgml | 10 ++++++++++ docs/reference/tmpl/profile.sgml | 9 +++++++++ docs/reference/tmpl/session.sgml | 9 +++++++++ 4 files changed, 44 insertions(+) commit ed279fc6a3d774133b184bc32abc11207eca16b4 Author: Frederic Peters Date: Thu Dec 30 14:51:14 2004 +0000 moved lasso_node_build_query to private functions lasso/xml/xml.c | 3 ++- lasso/xml/xml.h | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) commit 98435cf8d8fbff278f098c61c4f3568ba649b4be Author: Frederic Peters Date: Thu Dec 30 13:58:55 2004 +0000 merged tools.h and internals.h in new private.h, excluded from API reference. lasso/xml/Makefile.am | 9 +++-- lasso/xml/internals.h | 85 ---------------------------------------- lasso/xml/{tools.h => private.h} | 50 +++++++++++++++++++++++ lasso/xml/tools.c | 2 - lasso/xml/xml.h | 3 +- 5 files changed, 57 insertions(+), 92 deletions(-) commit e6c4854c49d8d989bd230e74c5ee04572bb9c62b Author: Frederic Peters Date: Thu Dec 30 13:32:36 2004 +0000 added lasso_session_is_empty method to documented functions docs/reference/lasso-sections.txt | 1 + 1 file changed, 1 insertion(+) commit 255316ed5dd6b04b0bb57cd841aa6aad43042228 Author: Frederic Peters Date: Thu Dec 30 12:59:09 2004 +0000 Do not remove tmpl/ directory; it holds real hand-written documentation there. Copy lasso.sgml to build/ directory before calling gtkdoc-mkdb so it is found by gtkdoc-mkdb and xml prologues are not added everywhere. docs/reference/Makefile.am | 5 ++--- docs/reference/lasso-sections.txt | 3 --- docs/reference/tmpl/session.sgml | 31 ------------------------------- 3 files changed, 2 insertions(+), 37 deletions(-) commit 69261570fada5ca6514d2c37fe4c0eea071cc189 Author: Frederic Peters Date: Thu Dec 30 12:57:26 2004 +0000 documenting lasso_{login|lecp}_init_authn_request lasso/id-ff/lecp.c | 8 ++++++-- lasso/id-ff/login.c | 11 +++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) commit 2c4c60bd14c26220b78121c9fcc330b5d4f9921f Author: Frederic Peters Date: Thu Dec 30 11:43:55 2004 +0000 include LassoLibAssertion details into swig bindings. swig/Lasso.i | 1 + 1 file changed, 1 insertion(+) commit 34693bbab4635c333b53583eb87ae981eab6797f Author: Frederic Peters Date: Thu Dec 30 11:05:26 2004 +0000 Moved #LassoSession private functions (limited to Lasso internal use) to a new sessionprivate.h file. lasso/id-ff/Makefile.am | 5 ++++ lasso/id-ff/login.c | 2 ++ lasso/id-ff/logout.c | 1 + lasso/id-ff/session.c | 1 + lasso/id-ff/session.h | 21 +---------------- lasso/id-ff/sessionprivate.h | 54 ++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 64 insertions(+), 20 deletions(-) commit 319bb54a13cfbf98e6e8f3abd89de2404a269f5b Author: Emmanuel Raviart Date: Thu Dec 30 09:52:56 2004 +0000 Added handling of GObject reference counting to SWIG binding. Fully revamped SWIG binding. swig/Lasso.i | 1438 ++++++++++++++++++++++++++++++---------------------------- 1 file changed, 733 insertions(+), 705 deletions(-) commit 0a2f5576862236062bcce1391d75db06d36769c3 Author: Emmanuel Raviart Date: Thu Dec 30 09:50:45 2004 +0000 Corrected result type of lasso_saml_assertion_new. lasso/xml/saml_assertion.c | 2 +- lasso/xml/saml_assertion.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit e4494a12f2698aff0da48a8f870d2e228779c265 Author: Frederic Peters Date: Wed Dec 29 20:53:02 2004 +0000 check for libtool and pkg-config m4 files (thanks again to gnome-autogen.sh) autogen.sh | 99 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 98 insertions(+), 1 deletion(-) commit 599db7b4775759233716070d395bf3e072e808a4 Author: Frederic Peters Date: Wed Dec 29 20:23:33 2004 +0000 don't use $< since it fails with BSD make. csharp/Makefile.am | 2 +- java/Makefile.am | 3 ++- php/Makefile.am | 2 +- python/Makefile.am | 2 +- 4 files changed, 5 insertions(+), 4 deletions(-) commit 300b281a6df66390db742859a8f6b63db181835b Author: Frederic Peters Date: Wed Dec 29 17:25:56 2004 +0000 only set Status in session on failure lasso/id-ff/login.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) commit 70801607cfa1c7e85cc0101844ce83f8e3bb93a6 Author: Frederic Peters Date: Wed Dec 29 11:00:20 2004 +0000 Store status in session to be restored for samlp:Response usage. This means the session *must* be saved in single sign-on service url and will be dirty. (so souk, libertyidentity.py line 1076 failIf(login.isSessionDirty) will fail) lasso/id-ff/login.c | 34 ++++++++++----- lasso/id-ff/profile.c | 10 +++-- lasso/id-ff/session.c | 118 +++++++++++++++++++++++++++++++++++++++++++++++--- lasso/id-ff/session.h | 7 +++ 4 files changed, 150 insertions(+), 19 deletions(-) commit 542b94d69fe04759e9395222ce8fe7a69f6d5f39 Author: Emmanuel Raviart Date: Tue Dec 28 22:09:58 2004 +0000 Added StatusCode binding in Logout. Reorganized objects in swig Lasso.i file. swig/Lasso.i | 302 ++++++++++++++++++++++++++++++++++------------------------- 1 file changed, 177 insertions(+), 125 deletions(-) commit cbf399de96bff883ae5e18bf78220ed179e834b2 Author: Frederic Peters Date: Tue Dec 28 21:07:21 2004 +0000 revamped autogen.sh so it works on FreeBSD (with many thanks to gnome-autogen.sh) autogen.sh | 324 +++++++++++++++++++++++++++++++------------------------------ 1 file changed, 164 insertions(+), 160 deletions(-) commit 75abeb989cf10c4b23a3d387e969aa6475562f8c Author: Frederic Peters Date: Tue Dec 28 18:48:46 2004 +0000 only set samlp:Success in samlp:Response if assertion was found; fall back to samlp:RequestDenied in other cases since there is currently no way to be more precise. lasso/id-ff/login.c | 4 ++++ lasso/xml/samlp_response.c | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) commit 775d10953619e8920b8d4f40065c35ba1f2ea98c Author: Frederic Peters Date: Tue Dec 28 16:26:31 2004 +0000 added LASSO_LOGIN_ERROR_STATUS_NOT_SUCCESS error code lasso/id-ff/login.c | 2 +- lasso/id-ff/logout.c | 4 +++- lasso/xml/errors.h | 1 + swig/Lasso.i | 2 ++ 4 files changed, 7 insertions(+), 2 deletions(-) commit 2e7616519bd05a47167b72bc6a19c62374277965 Author: Frederic Peters Date: Tue Dec 28 15:52:25 2004 +0000 set error to lib:UnknownPrincipal if authentication_result is FALSE lasso/id-ff/login.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 7d8ec724c9d3a34f7eef145fa26545203bd63189 Author: Frederic Peters Date: Tue Dec 28 15:36:34 2004 +0000 don't crash if session was not set lasso/id-ff/logout.c | 3 +++ 1 file changed, 3 insertions(+) commit 2db50e6522b791ad9e058d7c5a5865d0b6a604a7 Author: Frederic Peters Date: Tue Dec 28 15:29:43 2004 +0000 removed old signature code from LECP lasso/id-ff/lecp.c | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) commit 3bf07b106ebb1ad13791bbdc323026cc4c0906c0 Author: Emmanuel Raviart Date: Tue Dec 28 15:28:04 2004 +0000 Added Status to AuthnResponse. swig/Lasso.i | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) commit ec747c681efb400cbda8aef4d5fa65614197a560 Author: Emmanuel Raviart Date: Tue Dec 28 14:17:53 2004 +0000 Added SamlpStatus & SamlpStatusCode to SWIG. Beginning to use same case in SWIG for XML elements as in C. swig/Lasso.i | 121 +++++++++++++++++++++++++++++++++++------------------------ 1 file changed, 73 insertions(+), 48 deletions(-) commit a29193e390e50dd2cad95f6474a163edb2e60188 Author: Frederic Peters Date: Tue Dec 28 13:59:39 2004 +0000 return LASSO_LOGIN_ERROR_REQUEST_DENIED if that's the response Status lasso/id-ff/login.c | 2 ++ 1 file changed, 2 insertions(+) commit fde7f4f96f5ec72074299c0937500ca2c458cfa5 Author: Frederic Peters Date: Tue Dec 28 13:09:37 2004 +0000 fixed dependency on xmlsec1-openssl configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 07fcdf0c4e3c89941e45f353e92c715875de08c1 Author: Frederic Peters Date: Tue Dec 28 12:44:22 2004 +0000 generate xmlsec signatures in get_xmlNode; this should allow envelopes (in LECP) to work properly. lasso/id-ff/defederation.c | 10 +-- lasso/id-ff/lecp.c | 23 ++++--- lasso/id-ff/login.c | 78 ++++++++++++---------- lasso/id-ff/logout.c | 37 +++++----- lasso/id-ff/name_identifier_mapping.c | 14 ++-- lasso/id-ff/name_registration.c | 18 ++--- lasso/id-ff/profile.h | 7 +- lasso/id-wsf/wsf_profile.c | 12 ++-- lasso/xml/lib_authn_response.c | 4 +- lasso/xml/lib_authn_response.h | 2 +- .../xml/lib_federation_termination_notification.c | 7 +- .../xml/lib_federation_termination_notification.h | 4 +- lasso/xml/lib_logout_request.c | 7 +- lasso/xml/lib_logout_request.h | 4 +- lasso/xml/lib_logout_response.c | 6 +- lasso/xml/lib_logout_response.h | 4 +- lasso/xml/lib_name_identifier_mapping_request.c | 7 +- lasso/xml/lib_name_identifier_mapping_request.h | 4 +- lasso/xml/lib_name_identifier_mapping_response.c | 6 +- lasso/xml/lib_name_identifier_mapping_response.h | 4 +- lasso/xml/lib_register_name_identifier_request.c | 6 +- lasso/xml/lib_register_name_identifier_request.h | 4 +- lasso/xml/lib_register_name_identifier_response.c | 6 +- lasso/xml/lib_register_name_identifier_response.h | 4 +- lasso/xml/samlp_request_abstract.c | 24 +++++-- lasso/xml/samlp_request_abstract.h | 2 + lasso/xml/samlp_response.c | 4 +- lasso/xml/samlp_response.h | 2 +- lasso/xml/samlp_response_abstract.c | 24 +++++-- lasso/xml/samlp_response_abstract.h | 2 + lasso/xml/xml.c | 44 ++---------- lasso/xml/xml.h | 8 +-- 32 files changed, 198 insertions(+), 190 deletions(-) commit 86fdb04dc0d0803855a2ecd207eeebb9279bfc75 Author: Frederic Peters Date: Tue Dec 28 10:16:08 2004 +0000 lasso requires xmlsec >= 1.2.6 configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 3d16d356cb74c0d7208482c149401d6b9c941fd9 Author: Emmanuel Raviart Date: Mon Dec 27 22:09:49 2004 +0000 Added cast to remove compile time warning. swig/Lasso.i | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 740e6be5e7a03f03024b072e7fb25df0a0fbc7ea Author: Frederic Peters Date: Mon Dec 27 19:47:06 2004 +0000 Fixed lasso_lecp_build_authn_request_envelope_msg, lasso_lecp_process_authn_request_envelope_msg and lasso_lecp_build_authn_request_msg to properly deal with signatures (and, generally, to work) lasso/id-ff/lecp.c | 101 ++++++++++++++++++++++++++++++++++++++++------------- lasso/xml/tools.c | 6 +++- 2 files changed, 81 insertions(+), 26 deletions(-) commit 1975fecaff8e287e51655ff2fb4c9c45315c0279 Author: Frederic Peters Date: Mon Dec 27 16:10:15 2004 +0000 support for elements in query (not yet reconstructed); enabled for lasso/xml/lib_authn_request.c | 1 + lasso/xml/xml.c | 72 ++++++++++++++++++++++++++++++++++++++----- 2 files changed, 66 insertions(+), 7 deletions(-) commit f1f8d3b91b3a28cf54aa2a99a6bedd72ecad42b6 Author: Frederic Peters Date: Mon Dec 27 11:42:15 2004 +0000 Moved back Extension support from xmlNode* to GList*; "SP login using post/artifact (testing Extension); SP logout using SOAP." test now works. lasso/xml/dst_modify.h | 2 +- lasso/xml/dst_modify_response.h | 2 +- lasso/xml/dst_query.h | 2 +- lasso/xml/dst_query_response.h | 2 +- lasso/xml/lib_authn_request.h | 2 +- lasso/xml/lib_authn_request_envelope.h | 2 +- lasso/xml/lib_authn_response.h | 2 +- lasso/xml/lib_federation_termination_notification.h | 2 +- lasso/xml/lib_logout_request.h | 2 +- lasso/xml/lib_name_identifier_mapping_request.h | 2 +- lasso/xml/lib_name_identifier_mapping_response.h | 2 +- lasso/xml/lib_register_name_identifier_request.h | 2 +- lasso/xml/lib_status_response.h | 2 +- lasso/xml/xml.c | 18 +++++++++--------- swig/Lasso.i | 19 +++++++++++-------- 15 files changed, 33 insertions(+), 30 deletions(-) commit c5d8c9dfd900d726321396ce134639617a62f29a Author: Emmanuel Raviart Date: Sun Dec 26 16:50:37 2004 +0000 Replaced calls of lasso_provider_get_metadata_one with lasso_provider_get_assertion_consumer_service_url in lecp. lasso/id-ff/lecp.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 28fb3f118ae0e0f4e07ddf151ee651721303c5ec Author: Emmanuel Raviart Date: Sun Dec 26 16:42:27 2004 +0000 Corrected SWIG binding for LECP methods inherited from Login. swig/Lasso.i | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) commit f8b18247d69b8a04fe243942c5850cd202d78325 Author: Emmanuel Raviart Date: Sat Dec 25 09:03:59 2004 +0000 Changed lib:Extension handling in SWIG lib:AuthnRequest binding, to ensure that each lib:Extension element has a valid namespace. swig/Lasso.i | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) commit fe17e281e90411d888f1f98b6ea0ba45baba0fa2 Author: Emmanuel Raviart Date: Fri Dec 24 16:30:03 2004 +0000 Added SWIG support for "Extension" elements in lib:AuthnRequest. swig/Lasso.i | 101 +++++++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 85 insertions(+), 16 deletions(-) commit 56c32de385570d948407a6a32990cf291465a916 Author: Frederic Peters Date: Fri Dec 24 12:07:31 2004 +0000 added lib:Extension support to dst classes. lasso/xml/dst_modify.c | 6 +++--- lasso/xml/dst_modify.h | 3 ++- lasso/xml/dst_modify_response.c | 2 +- lasso/xml/dst_modify_response.h | 2 ++ lasso/xml/dst_query.c | 1 + lasso/xml/dst_query.h | 1 + lasso/xml/dst_query_response.c | 3 ++- lasso/xml/dst_query_response.h | 3 ++- 8 files changed, 14 insertions(+), 7 deletions(-) commit 37b04beafb0917021c1fd62283d9c804d12db390 Author: Frederic Peters Date: Fri Dec 24 11:44:36 2004 +0000 Added missing declaration for lasso_name_identity_mapping_new_from_dump (and moved dump type to const char*). lasso/id-ff/name_identifier_mapping.c | 2 +- lasso/id-ff/name_identifier_mapping.h | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) commit 79eda46b500f74a283b7404a6b2d194c06236757 Author: Frederic Peters Date: Fri Dec 24 10:26:32 2004 +0000 errata2 makes SPProvidedNameIdentifier optional; changed schema snippet accordingly lasso/xml/lib_register_name_identifier_request.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 0a3b4e3a625fdab8fd5bec59d550b67b1647656f Author: Frederic Peters Date: Fri Dec 24 10:25:42 2004 +0000 errata2 adds a NotOnOrAfter attribute to LogoutRequests lasso/xml/lib_logout_request.c | 5 ++++- lasso/xml/lib_logout_request.h | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) commit b932a345d21cef3699d2a48ece87da938175e5c5 Author: Frederic Peters Date: Fri Dec 24 10:25:11 2004 +0000 removed obsolete comment lasso/xml/lib_authn_request.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit a6de92e3126595f9217b65184c1029cdf6bbd3f5 Author: Frederic Peters Date: Fri Dec 24 10:04:37 2004 +0000 Do not store metadata in provider dumps; only store the filename. Handle AssertionConsumerServiceID in ; this allows to have more than one AssertionConsumerServiceURL in a single service provider. docs/reference/lasso-sections.txt | 1 + docs/reference/tmpl/provider.sgml | 11 ++++ lasso/id-ff/login.c | 31 ++++++----- lasso/id-ff/provider.c | 108 ++++++++++++++++++++++++++------------ lasso/id-ff/provider.h | 3 ++ 5 files changed, 105 insertions(+), 49 deletions(-) commit 94cd82e6aeab19a0a799dbbfb9fdb1d4a797e576 Author: Frederic Peters Date: Fri Dec 24 09:20:39 2004 +0000 more documentation docs/reference/lasso-sections.txt | 2 ++ docs/reference/tmpl/lib_authn_request.sgml | 24 +++++++++++++++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) commit f18c6f1d6bba88c40a769992cce988f3c9ccc577 Author: Frederic Peters Date: Thu Dec 23 18:19:44 2004 +0000 removing lasso_config.h from scanned header files docs/reference/Makefile.am | 8 ++++++-- docs/reference/lasso-sections.txt | 7 ------- docs/reference/lasso.sgml | 2 -- 3 files changed, 6 insertions(+), 11 deletions(-) commit 05e3610efb70fa0ed253afec17ac5f9001d25694 Author: Frederic Peters Date: Thu Dec 23 16:50:23 2004 +0000 Moved to xmlNode* since the developer can use xmlAddNextSibling to add other nodes. (not tested) lasso/xml/dst_query.h | 2 +- lasso/xml/lib_authn_request.h | 2 +- lasso/xml/lib_authn_request_envelope.h | 2 +- lasso/xml/lib_authn_response.h | 2 +- lasso/xml/lib_federation_termination_notification.h | 2 +- lasso/xml/lib_logout_request.h | 2 +- lasso/xml/lib_name_identifier_mapping_request.h | 2 +- lasso/xml/lib_name_identifier_mapping_response.h | 2 +- lasso/xml/lib_register_name_identifier_request.h | 2 +- lasso/xml/lib_status_response.h | 2 +- lasso/xml/xml.c | 18 +++++++++--------- 11 files changed, 19 insertions(+), 19 deletions(-) commit a9419210d9c74a6d27eab96b1e5fd2c3f8b296c1 Author: Frederic Peters Date: Thu Dec 23 15:21:18 2004 +0000 a few words about lib:AuthnRequest docs/reference/lasso-sections.txt | 4 +++ docs/reference/tmpl/lib_authn_request.sgml | 51 ++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) commit dc217b7938a929fbd3a21bc2282f6a0eccf7f6e1 Author: Frederic Peters Date: Thu Dec 23 13:56:33 2004 +0000 documented #LassoSamlNameIdentifier docs/reference/tmpl/saml_name_identifier.sgml | 38 +++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) commit a6ecf24ba6b9815b85f0df0250c1e307aa358d9e Author: Frederic Peters Date: Thu Dec 23 13:11:51 2004 +0000 removed all old setter methods and other removed functions from documentation. docs/reference/lasso-sections.txt | 197 ++------------------------------------ docs/reference/lasso.sgml | 10 +- docs/reference/tmpl/identity.sgml | 7 -- docs/reference/tmpl/logout.sgml | 7 -- docs/reference/tmpl/session.sgml | 7 -- 5 files changed, 14 insertions(+), 214 deletions(-) commit 6be1164177d67f6e19142e4b417548990f5bee0c Author: Frederic Peters Date: Thu Dec 23 13:11:03 2004 +0000 dot at the end lasso/id-ff/login.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit bccdbae1277e673173bed2cdcf8f914e08c9adab Author: Frederic Peters Date: Thu Dec 23 13:10:31 2004 +0000 Removed _new functions for abstract classes; added _new functions for classes that only had _new_full functions. Documented a little bit; marked public members in structures as such. lasso/xml/lib_assertion.c | 6 ++++ lasso/xml/lib_assertion.h | 3 ++ lasso/xml/lib_authentication_statement.c | 6 ++++ lasso/xml/lib_authentication_statement.h | 2 ++ lasso/xml/lib_authn_context.h | 2 ++ lasso/xml/lib_authn_request.h | 1 + lasso/xml/lib_authn_request_envelope.h | 1 + lasso/xml/lib_authn_response.h | 1 + lasso/xml/lib_authn_response_envelope.h | 1 + .../xml/lib_federation_termination_notification.h | 1 + lasso/xml/lib_idp_entries.h | 1 + lasso/xml/lib_idp_entry.h | 1 + lasso/xml/lib_idp_list.h | 1 + lasso/xml/lib_logout_request.h | 1 + lasso/xml/lib_name_identifier_mapping_request.h | 1 + lasso/xml/lib_name_identifier_mapping_response.h | 1 + lasso/xml/lib_register_name_identifier_request.h | 1 + lasso/xml/lib_request_authn_context.h | 2 ++ lasso/xml/lib_scoping.h | 2 ++ lasso/xml/lib_status_response.h | 1 + lasso/xml/lib_subject.h | 2 ++ lasso/xml/saml_advice.h | 2 ++ lasso/xml/saml_assertion.h | 1 + lasso/xml/saml_attribute.h | 1 + lasso/xml/saml_attribute_designator.h | 1 + lasso/xml/saml_attribute_statement.h | 1 + lasso/xml/saml_audience_restriction_condition.h | 2 ++ lasso/xml/saml_authentication_statement.h | 2 ++ lasso/xml/saml_authority_binding.h | 1 + lasso/xml/saml_condition_abstract.c | 14 --------- lasso/xml/saml_condition_abstract.h | 1 - lasso/xml/saml_conditions.h | 1 + lasso/xml/saml_name_identifier.h | 2 ++ lasso/xml/saml_statement_abstract.c | 13 -------- lasso/xml/saml_statement_abstract.h | 1 - lasso/xml/saml_subject.h | 2 ++ lasso/xml/saml_subject_confirmation.h | 1 + lasso/xml/saml_subject_locality.h | 2 ++ lasso/xml/saml_subject_statement_abstract.c | 14 --------- lasso/xml/saml_subject_statement_abstract.h | 3 +- lasso/xml/samlp_request.h | 1 + lasso/xml/samlp_request_abstract.c | 6 ---- lasso/xml/samlp_request_abstract.h | 3 +- lasso/xml/samlp_response.h | 1 + lasso/xml/samlp_response_abstract.c | 7 ----- lasso/xml/samlp_response_abstract.h | 2 +- lasso/xml/samlp_status.h | 1 + lasso/xml/samlp_status_code.h | 2 ++ lasso/xml/xml.c | 36 ++++++++++++++-------- lasso/xml/xml.h | 2 +- 50 files changed, 91 insertions(+), 73 deletions(-) commit 693ad7ea6160ca9a06398143a65069d11cfd5ada Author: Frederic Peters Date: Thu Dec 23 12:38:55 2004 +0000 removed cut'n pasted doc from oasis lasso/xml/lib_scoping.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) commit 5504a8edb3754e0fbcda3eb556ad4779232e5df8 Author: Frederic Peters Date: Thu Dec 23 12:12:24 2004 +0000 removed liberty-alliance entity; docs/reference/lasso.sgml | 1 - 1 file changed, 1 deletion(-) commit 05d1802c2ac4243886490423f35bc67d016467c6 Author: Frederic Peters Date: Thu Dec 23 11:43:17 2004 +0000 documented #LassoLogout; actually most docstrings were already there but are way too much going into Lasso internals. Not fixed yet. docs/reference/Makefile.am | 1 + docs/reference/tmpl/session.sgml | 19 ---- lasso/id-ff/logout.c | 186 +++++++++++++++++++++------------------ 3 files changed, 102 insertions(+), 104 deletions(-) commit 2e11822cc2c07256f8b51ea471a0e1e458e8511c Author: Frederic Peters Date: Thu Dec 23 11:28:51 2004 +0000 remove angle brackets around elements in doc strings so they can now be considered as docbook (necessary to produce itemized lists in docstrings) lasso/xml/lib_idp_entries.c | 4 ++-- lasso/xml/lib_idp_entry.c | 2 +- lasso/xml/lib_idp_list.c | 2 +- lasso/xml/lib_scoping.c | 2 +- lasso/xml/saml_assertion.c | 2 +- lasso/xml/saml_attribute_designator.c | 2 +- lasso/xml/saml_attribute_statement.c | 2 +- lasso/xml/saml_authentication_statement.c | 2 +- lasso/xml/saml_authority_binding.c | 2 +- lasso/xml/saml_condition_abstract.c | 2 +- lasso/xml/saml_conditions.c | 2 +- lasso/xml/saml_name_identifier.c | 2 +- lasso/xml/saml_statement_abstract.c | 2 +- lasso/xml/saml_subject.c | 2 +- lasso/xml/saml_subject_confirmation.c | 2 +- lasso/xml/saml_subject_locality.c | 2 +- lasso/xml/saml_subject_statement.c | 2 +- lasso/xml/saml_subject_statement_abstract.c | 2 +- 18 files changed, 19 insertions(+), 19 deletions(-) commit c70f35769aee4fdb1196961ceff6c08c1530a8c4 Author: Frederic Peters Date: Thu Dec 23 11:27:55 2004 +0000 removed copy/pasted OASIS documentation lasso/xml/saml_audience_restriction_condition.c | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) commit a263a7effdc96fcd9dd0063fb18f36fcb305251c Author: Frederic Peters Date: Thu Dec 23 11:24:49 2004 +0000 Removed docstring copy/pasted from OASIS documentation (looks like BSD so it should be allowed if they are cited but I prefer to have full copyright over Lasso code) lasso/xml/saml_advice.c | 20 ++------------------ 1 file changed, 2 insertions(+), 18 deletions(-) commit d99a72fa4dfbd9ff33bbf640562774cb36b16f0d Author: Frederic Peters Date: Thu Dec 23 10:39:02 2004 +0000 documented #LassoSession. Removed lasso_session_get_authentication_method and lasso_session_get_first_providerID methods that were obsolete and unused. docs/reference/lasso-sections.txt | 2 - lasso/id-ff/logout.c | 2 +- lasso/id-ff/session.c | 87 +++++++++++++++++++++++++++++++-------- lasso/id-ff/session.h | 5 --- swig/Lasso.i | 4 -- 5 files changed, 70 insertions(+), 30 deletions(-) commit 9c45b86263ef37e1de5e48a53d82f277b86bfcd8 Author: Frederic Peters Date: Thu Dec 23 10:11:25 2004 +0000 Commited Nicolas SWIG binding for WSF since he is on vacation. csharp/Makefile.am | 2 +- java/Makefile.am | 2 +- php/Makefile.am | 2 +- python/Makefile.am | 2 +- swig/Lasso-wsf.i | 1387 ++++++++++++++++++++++++++++++++++++++++++++++++++++ swig/Lasso.i | 3 + swig/Makefile.am | 5 +- 7 files changed, 1395 insertions(+), 8 deletions(-) commit 41016ca42a5a69d844328eb99673ab29b3c8fa41 Author: Frederic Peters Date: Wed Dec 22 23:22:19 2004 +0000 create namespace in the air not to disturb xmlnode lasso/xml/disco_query_response.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 31e2cc05b7676e1cd4cdb5bfc7b87ce8bc395d5b Author: Frederic Peters Date: Wed Dec 22 23:21:57 2004 +0000 disco:Status doesn't exist; once again fall back to UtilityStatus lasso/xml/xml.c | 2 ++ 1 file changed, 2 insertions(+) commit 528c7cc4226caeb76dcb9357b31a7cbad351a3b2 Author: Frederic Peters Date: Wed Dec 22 23:18:16 2004 +0000 pp:Status are not DstStatus but UtilityStatus; acknowledge. lasso/xml/xml.c | 2 ++ 1 file changed, 2 insertions(+) commit 50a3265341624d6acc8306650e14b6b895a543a4 Author: Frederic Peters Date: Wed Dec 22 23:07:20 2004 +0000 fixed QueryResponse get_xmlNode function. lasso/xml/dst_query_response.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 49c1f1fd576ab816c0782da2ae21bb6007136678 Author: Nicolas Clapies Date: Wed Dec 22 22:10:25 2004 +0000 Added missing header. lasso/id-wsf/wsf_profile.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 2d355c143fa18621491bb941908bf9bfd8d0dafc Author: Nicolas Clapies Date: Wed Dec 22 22:09:43 2004 +0000 Updated get_xmlNode(). lasso/xml/dst_query_response.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) commit 163b379b6e28038206b717f281502a3fc19f29bb Author: Nicolas Clapies Date: Wed Dec 22 22:09:14 2004 +0000 Added missing headers. lasso/id-wsf/personal_profile_service.h | 3 +++ 1 file changed, 3 insertions(+) commit 1312d3a6d9a5a075d0eab9ed3cbd0f3d07b597be Author: Nicolas Clapies Date: Wed Dec 22 22:08:31 2004 +0000 Added set of request in lasso_personal_profile_process_query_msg() and lasso_personal_profile_process_modify_msg(). lasso/id-wsf/personal_profile_service.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) commit 0a99e317feb5b06285aa43fcd98d2e09e9dab769 Author: Nicolas Clapies Date: Wed Dec 22 22:07:20 2004 +0000 Removed use of GList for Options. Use only a Options pointer. lasso/id-wsf/discovery.c | 19 +++++++++++-------- lasso/id-wsf/discovery.h | 2 +- 2 files changed, 12 insertions(+), 9 deletions(-) commit 493236dc228d267296978fda743246cb5dc3c8b9 Author: Frederic Peters Date: Wed Dec 22 21:38:06 2004 +0000 documenting #LassoIdentity and #LassoFederation docs/reference/lasso-sections.txt | 252 +++++++++------------------------- docs/reference/lasso.sgml | 2 +- docs/reference/tmpl/defederation.sgml | 4 +- docs/reference/tmpl/federation.sgml | 83 +++++++++++ docs/reference/tmpl/identity.sgml | 97 +++++++++++++ docs/reference/tmpl/session.sgml | 123 +++++++++++++++++ lasso/id-ff/defederation.c | 16 +-- lasso/id-ff/defederation.h | 2 +- lasso/id-ff/federation.c | 71 ++++++++-- lasso/id-ff/federation.h | 9 +- lasso/id-ff/identity.c | 65 ++++++++- lasso/id-ff/identity.h | 8 +- lasso/id-ff/login.c | 12 +- lasso/id-ff/logout.c | 3 +- lasso/id-ff/name_registration.c | 2 +- lasso/id-ff/server.c | 2 +- 16 files changed, 522 insertions(+), 229 deletions(-) commit 1c4c99693d98183c1a0191040dc39553a780c1bd Author: Frederic Peters Date: Wed Dec 22 19:59:21 2004 +0000 copyright and license in are ok docs/reference/lasso.sgml | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) commit ecf813983aa71232bc7d7927b41e2e32ce3578b9 Author: Frederic Peters Date: Wed Dec 22 19:18:09 2004 +0000 assertion consumer *service* URL docs/reference/tmpl/login.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 2a63b8f603a02844bcf5126f81d86dbebd1be075 Author: Frederic Peters Date: Wed Dec 22 19:16:09 2004 +0000 documented service provider assertion consumer service url docs/reference/tmpl/login.sgml | 66 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) commit 4a4e5e023cc3b7894fad3fd76f40d21ad5bb0708 Author: Frederic Peters Date: Wed Dec 22 19:15:51 2004 +0000 close parenthesis docs/lasso-book/single-sign-on.process | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit aa13a8f39179c0a3d6c695c921300f7727b28e44 Author: Frederic Peters Date: Wed Dec 22 17:38:07 2004 +0000 documenting single sign-on; Service Provider Login URL done with example. docs/reference/tmpl/login.sgml | 49 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) commit 36d30c1de8731d4602da1a4980c68b62f6d570ba Author: Frederic Peters Date: Wed Dec 22 14:23:16 2004 +0000 commented out ; not handled by gtk-doc.xsl docs/reference/lasso.sgml | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) commit 9e5a603ed25e83ba5298d91af38ffd32c4be0a6c Author: Frederic Peters Date: Wed Dec 22 14:10:24 2004 +0000 Switched documentation to docbook XML. docs/reference/Makefile.am | 1 + docs/reference/lasso.sgml | 114 +++++++++++++++++++++++---------------------- 2 files changed, 59 insertions(+), 56 deletions(-) commit 80cf4202fe2248578c946ff628c224a909532488 Author: Frederic Peters Date: Wed Dec 22 13:56:45 2004 +0000 titles for id-ff 1.2 profiles docs/reference/lasso-sections.txt | 85 ++++++++++---- docs/reference/lasso.sgml | 6 +- docs/reference/tmpl/defederation.sgml | 78 +++++++++++++ docs/reference/tmpl/logout.sgml | 141 +++++++++++++++++++++++ docs/reference/tmpl/name_identifier_mapping.sgml | 99 ++++++++++++++++ docs/reference/tmpl/name_registration.sgml | 109 ++++++++++++++++++ 6 files changed, 497 insertions(+), 21 deletions(-) commit e29d9fda4529daf628c436882b51e9e268ffed43 Author: Frederic Peters Date: Wed Dec 22 13:12:02 2004 +0000 minor adjustments to documentation lasso/xml/xml.c | 62 ++++++++++++++++++++++++++++++--------------------------- 1 file changed, 33 insertions(+), 29 deletions(-) commit f46dbaadb7fec17f9bce034cd7352b700068de98 Author: Frederic Peters Date: Wed Dec 22 12:48:05 2004 +0000 Minimal documentation for #LassoProfile and #LassoLogin docs/reference/lasso-sections.txt | 178 ++++++++++++++--------------- docs/reference/tmpl/login.sgml | 230 ++++++++++++++++++++++++++++++++++++++ docs/reference/tmpl/profile.sgml | 152 +++++++++++++++++++++++++ lasso/id-ff/login.c | 41 +++++-- lasso/id-ff/login.h | 1 + lasso/id-ff/profile.c | 92 +++++++-------- lasso/id-ff/profile.h | 20 ++-- lasso/id-ff/server.c | 4 +- 8 files changed, 554 insertions(+), 164 deletions(-) commit 23b4a410c6b5d981fc51bc6c3d274a632471ef5e Author: Frederic Peters Date: Wed Dec 22 11:44:13 2004 +0000 documented #LassoServer docs/reference/lasso-sections.txt | 367 +++----------------------------------- docs/reference/lasso.sgml | 41 +++-- docs/reference/tmpl/provider.sgml | 50 +++--- docs/reference/tmpl/server.sgml | 120 +++++++++++++ lasso/id-ff/provider.c | 13 +- lasso/id-ff/provider.h | 4 +- lasso/id-ff/server.c | 72 ++++++-- lasso/id-ff/server.h | 5 +- 8 files changed, 264 insertions(+), 408 deletions(-) commit dfe6311bcb2bc68c91ae7e34025f197b77f3658b Author: Frederic Peters Date: Wed Dec 22 10:48:31 2004 +0000 Started organizing Lasso Reference Manual; documenting LassoProvider. configure.ac | 1 + docs/reference/Makefile.am | 5 +- docs/reference/lasso-sections.txt | 75 +++++++---------- docs/reference/lasso.sgml | 63 ++++++++++---- docs/reference/tmpl/provider.sgml | 170 ++++++++++++++++++++++++++++++++++++++ docs/reference/version.xml.in | 1 + lasso.pc.in | 2 +- lasso/id-ff/provider.c | 76 ++++++++++++++++- lasso/id-ff/provider.h | 28 ++++--- 9 files changed, 342 insertions(+), 79 deletions(-) commit 09eb4fb227ae44c82ffb33bf188dab7f1370a511 Author: Frederic Peters Date: Tue Dec 21 20:58:04 2004 +0000 fixed symbols.sym case lasso/.cvsignore | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit b8f2c78f2f17aae544b9eb870e2c92e238b5f993 Author: Frederic Peters Date: Tue Dec 21 20:57:45 2004 +0000 added lasso_provider_get_base64_succint_id method to LassoProvider to facilitate Identity Provider Introduction implementation. lasso/id-ff/provider.c | 17 +++++++++++++++++ lasso/id-ff/provider.h | 2 ++ 2 files changed, 19 insertions(+) commit 45e5aaeabac20361daaeab539d6b0bd0d3522515 Author: Frederic Peters Date: Tue Dec 21 19:41:52 2004 +0000 moves back to the place the schema gave them. lasso/xml/xml.c | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) commit 382731efbbbb05757bde44061282ddb9f8f70d0e Author: Frederic Peters Date: Tue Dec 21 18:19:06 2004 +0000 refined symbol regex lasso/extract_symbols.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 2878cce4d448efd8563736b9e93945517457d76f Author: Frederic Peters Date: Tue Dec 21 18:18:43 2004 +0000 removed declaration of inexistant function lasso/xml/lib_authentication_statement.h | 1 - 1 file changed, 1 deletion(-) commit 8315d8686135473c388e8a3627f1a41c94150052 Author: Frederic Peters Date: Tue Dec 21 18:02:18 2004 +0000 removed unused variable lasso/xml/tools.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 7ca76d5e835494e46558f2eda07c71c3c3e57263 Author: Frederic Peters Date: Tue Dec 21 18:01:02 2004 +0000 ignoring some more swig generated files csharp/.cvsignore | 4 ++++ java/.cvsignore | 5 ++++- 2 files changed, 8 insertions(+), 1 deletion(-) commit 8b8e54f821e3e48fb38ab6da0b60437120a8e695 Author: Frederic Peters Date: Tue Dec 21 17:48:17 2004 +0000 Updated list of files generated by SWIG in C# and Java bindings; fixed PHP Makefile.am; use $(srcdir) to get correct directory in code generation python scrips. make distcheck works after that. csharp/Makefile.am | 30 ++++++++++-------------------- java/Makefile.am | 20 +++++++++----------- lasso/Makefile.am | 4 ++-- lasso/extract_symbols.py | 8 +++++++- lasso/extract_types.py | 10 ++++++++-- lasso/xml/Makefile.am | 5 +++-- php/Attic/examples/sample-idp/Makefile.am | 14 +++++++------- php/Attic/examples/sample-sp/Makefile.am | 15 ++++++++------- swig/Lasso.i | 8 ++++---- 9 files changed, 58 insertions(+), 56 deletions(-) commit 513442f6c073b101a6ba2da924ba9562dfd50adf Author: Frederic Peters Date: Tue Dec 21 14:00:17 2004 +0000 only exports symbols declared with LASSO_EXPORT (experimental) configure.ac | 2 -- lasso/.cvsignore | 1 + lasso/Makefile.am | 13 ++++++++----- lasso/extract_symbols.py | 12 ++++++++++++ 4 files changed, 21 insertions(+), 7 deletions(-) commit d96583847854d9bcaa25f5184e07c2983b6e3fa7 Author: Nicolas Clapies Date: Tue Dec 21 14:00:14 2004 +0000 Fixed call to constructor of LassoDiscoQueryResponse and LassoDiscoModifyResponse. lasso/id-wsf/discovery.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit b640247c498051eed30039d9b03940e66eab80f1 Author: Frederic Peters Date: Tue Dec 21 13:59:40 2004 +0000 added random suites with random tests tests/random_tests.c | 31 +++++++++++++++++++++++++++++-- tests/tests.c | 4 +++- 2 files changed, 32 insertions(+), 3 deletions(-) commit 72123ddd8081fba3f8d20b2b9be692d6af5e0934 Author: Nicolas Clapies Date: Tue Dec 21 13:58:43 2004 +0000 Added lasso_disco_query_response_new_from_message() constructor. lasso/xml/disco_query_response.h | 4 ++++ 1 file changed, 4 insertions(+) commit 55e63b64b3b2afaa62a264a4d290cf3064d80930 Author: Nicolas Clapies Date: Tue Dec 21 13:57:59 2004 +0000 fixed name space in dump message of LassoDiscoQueryResponse and LassoDiscoModifyResponse : every element children inerit the discovery name space. lasso/xml/disco_modify_response.c | 31 ++++++++++++++++++++++++++- lasso/xml/disco_query_response.c | 44 ++++++++++++++++++++++++++++++++++++++- 2 files changed, 73 insertions(+), 2 deletions(-) commit 24421834eb051fa311f820c057da8c8b66aebcf5 Author: Frederic Peters Date: Tue Dec 21 13:56:27 2004 +0000 don't use xmlSecFind to look up signature lasso/id-ff/provider.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) commit 1faf90eefa204b7841592a90971fef79d5072d59 Author: Frederic Peters Date: Tue Dec 21 13:27:50 2004 +0000 Severe libxml2 and xmlsec riot. Always put as the last node since it looks like the right thing to do (and even if the schema seems to say otherwise). Try to clean xml messages and remove redundant xml namespace declarations. Behind libxml2 back and cleaning memory properly. We���re off the streets now / And back on the road / On the riot trail. lasso/xml/dst_query_response.c | 11 +- lasso/xml/tools.c | 9 +- lasso/xml/xml.c | 238 ++++++++++++++++++++++++++++------------- 3 files changed, 173 insertions(+), 85 deletions(-) commit 10751c78347c54bcfc13eeb97549d437ac05447d Author: Frederic Peters Date: Tue Dec 21 09:28:16 2004 +0000 define correct namespace on QueryResponse lasso/xml/dst_query_response.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit e39831c95b75e7d316d46fec758bf0179183f036 Author: Frederic Peters Date: Mon Dec 20 19:39:41 2004 +0000 removed unnecessary xmlReconciliateNs lasso/xml/xml.c | 2 -- 1 file changed, 2 deletions(-) commit 723a4ee54fe3101d803c861e69a513d82b223d1a Author: Frederic Peters Date: Mon Dec 20 17:26:13 2004 +0000 correctly sets namespace on Query and QueryResponse Personal Profile nodes. lasso/xml/dst_modify.c | 16 +++++----------- lasso/xml/dst_modify_response.c | 16 +++++----------- lasso/xml/dst_query.c | 16 +++++----------- lasso/xml/dst_query_response.c | 10 +++++----- 4 files changed, 20 insertions(+), 38 deletions(-) commit 45cffc9121c5dfaa4f695995a879dd6ce80d53d9 Author: Nicolas Clapies Date: Mon Dec 20 16:14:27 2004 +0000 Fixed method declarations : lasso_personal_profile_service_process_query_msg() and lasso_personal_profile_service_process_query_msg_response(). lasso/id-wsf/personal_profile_service.h | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) commit e8ac932e5d11d934703977f1c6719078426ec0ea Author: Nicolas Clapies Date: Mon Dec 20 14:27:44 2004 +0000 Removed GList type in lasso_discovery_add_insert_entry() params. Instead use simple type pointer until list support is implemented in swig binding. Added missing method lasso_discovery_process_query_response_msg(). lasso/id-wsf/discovery.c | 42 ++++++++++++++++++++++++++++++------------ lasso/id-wsf/discovery.h | 14 ++++++++++++-- 2 files changed, 42 insertions(+), 14 deletions(-) commit 3e0e42a24947dbae90af1ed9b8910defc3219a48 Author: Frederic Peters Date: Mon Dec 20 12:38:41 2004 +0000 don't include in a second-level status code samlp error status lasso/id-ff/profile.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 612d8dce2517c2c27ab13f53e047790d9fa6fffe Author: Frederic Peters Date: Mon Dec 20 10:23:53 2004 +0000 Refactored signature code so it is now shared between requests/responses and artifacts. lasso/xml/errors.c | 2 ++ lasso/xml/errors.h | 1 + lasso/xml/saml_assertion.c | 61 +++----------------------------------------- lasso/xml/tools.c | 53 ++++++++++++++++++++++++++++++++++++++ lasso/xml/tools.h | 2 ++ lasso/xml/xml.c | 63 ++++++++++------------------------------------ 6 files changed, 75 insertions(+), 107 deletions(-) commit 95afff30e76e9a0cf32651f726ea932b678c7410 Author: Frederic Peters Date: Sun Dec 19 20:34:22 2004 +0000 Added differentiation between creating xmlnode for lasso use (the _dump functions) and creating xmlnode for the wire (export_to_soap...). This was necessary to keep track of private_key_file to use on an Assertion while it was kept in a lasso session dump and restored later. This means the get_xmlNode functions have now a second parameter, gboolean lasso_dump, TRUE when dumping for lasso internal use. On the bright side assertions are now signed (that signature is not yet checked). lasso/id-ff/federation.c | 4 +- lasso/id-ff/identity.c | 4 +- lasso/id-ff/lecp.c | 2 + lasso/id-ff/login.c | 31 +++++++------ lasso/id-ff/logout.c | 4 +- lasso/id-ff/name_registration.c | 4 +- lasso/id-ff/provider.c | 2 +- lasso/id-ff/server.c | 8 ++-- lasso/id-ff/session.c | 4 +- lasso/id-wsf/discovery.c | 4 +- lasso/xml/dst_modify.c | 4 +- lasso/xml/dst_modify_response.c | 4 +- lasso/xml/dst_query.c | 4 +- lasso/xml/dst_query_response.c | 4 +- lasso/xml/internals.h | 3 +- lasso/xml/saml_assertion.c | 99 ++++++++++++++++++++++++++++++++--------- lasso/xml/saml_assertion.h | 11 ++--- lasso/xml/samlp_response.c | 4 +- lasso/xml/xml.c | 37 +++++++++------ lasso/xml/xml.h | 4 +- 20 files changed, 156 insertions(+), 85 deletions(-) commit 5f74157e3a2450eb066a3e2e19561612894a6cd1 Author: Frederic Peters Date: Sun Dec 19 19:12:11 2004 +0000 removed minitests from tests Makefile.am tests/Makefile.am | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) commit 38136da6281356361a54cfdf0bf6099575ade4ca Author: Frederic Peters Date: Sun Dec 19 19:03:39 2004 +0000 little tests benchmarking AuthnRequest creation and AuthnResponse processing. tests/perfs.c | 154 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 154 insertions(+) commit dd3b7a3773c7eb210041fd2e88f908e755dde8ef Author: Frederic Peters Date: Sun Dec 19 19:01:36 2004 +0000 add nodes in reverse class order to get them in schema order lasso/xml/xml.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) commit 1ecf9e1123e9f566edb4607d6010b0f78c2c5340 Author: Frederic Peters Date: Sun Dec 19 15:24:19 2004 +0000 Moved signature template stuff into xml.c and use XmlSnippet for them; this should insure proper validation against Liberty XML schemas and should help adding missing signature support to docs/reference/snippet-types.rst | 4 +++ lasso/xml/internals.h | 3 ++ lasso/xml/samlp_request_abstract.c | 54 ++++---------------------------- lasso/xml/samlp_response_abstract.c | 56 ++++----------------------------- lasso/xml/xml.c | 62 +++++++++++++++++++++++++++++++++++++ 5 files changed, 81 insertions(+), 98 deletions(-) commit cae2befb48c60998515875b735e8c2e9ba6f5cfa Author: Frederic Peters Date: Sun Dec 19 11:07:32 2004 +0000 cleaning up process files docs/lasso-book/defederation.process | 74 +++++++++++++------------- docs/lasso-book/name-registration.process | 86 +++++++++++++++---------------- docs/lasso-book/single-logout.process | 4 +- docs/lasso-book/single-sign-on.process | 4 +- 4 files changed, 83 insertions(+), 85 deletions(-) commit 74697b19c1160f20cc0e3f40e392b7fa7850b7a5 Author: Frederic Peters Date: Sun Dec 19 11:07:22 2004 +0000 if available, use profile->msg_relayState to init request in init_request functions. lasso/id-ff/defederation.c | 22 +++++++++++++--------- lasso/id-ff/login.c | 5 +++-- lasso/id-ff/logout.c | 9 ++++----- lasso/id-ff/name_registration.c | 2 ++ 4 files changed, 22 insertions(+), 16 deletions(-) commit 2e0efac99e7aa3790eab774ccad59deceb03e169 Author: Frederic Peters Date: Sat Dec 18 18:36:54 2004 +0000 Moved LassoProfile->nameIdentifier from char* to LassoSamlNameIdentifier*, gaining back access to the nameFormat added late before 0.5. There are no bindings for LassoSamlNameIdentifier; as a temporary and compatible measure; profile->nameIdentifier in bindings continues to return a char* (profile->nameIdentifier->content). At the same time the same change has been done for LassoNameRegistration->oldNameIdentifier. lasso/id-ff/defederation.c | 6 +++--- lasso/id-ff/login.c | 14 +++++++------- lasso/id-ff/logout.c | 6 +++--- lasso/id-ff/name_identifier_mapping.c | 4 ++-- lasso/id-ff/name_registration.c | 36 +++++++++++++++++------------------ lasso/id-ff/name_registration.h | 2 +- lasso/id-ff/profile.c | 3 ++- lasso/id-ff/profile.h | 2 +- swig/Lasso.i | 28 ++++++++++++++++++++------- 9 files changed, 58 insertions(+), 43 deletions(-) commit 539cd7daa1d767dba06d91427a120fa0f24bac21 Author: Frederic Peters Date: Fri Dec 17 18:06:32 2004 +0000 Isolated CFLAGS to be used when compiling Lasso in LASSO_CORE_CFLAGS; don't use those when compiling tests in order to catch errors in headers. (continuing) configure.ac | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit ca7ca6c2ce204bf2d64652a8170f37e83f1ea6a6 Author: Frederic Peters Date: Fri Dec 17 18:02:42 2004 +0000 Isolated CFLAGS to be used when compiling Lasso in LASSO_CORE_CFLAGS; don't use those when compiling tests in order to catch errors in headers. Also moved a few things in header files; need more thinking about that. csharp/Makefile.am | 2 +- java/Makefile.am | 4 ++-- lasso/Makefile.am | 2 +- lasso/id-ff/Makefile.am | 4 +--- lasso/id-wsf/Makefile.am | 6 ++---- lasso/lasso.h | 3 +++ lasso/xml/Makefile.am | 4 +--- lasso/xml/tools.c | 6 ++---- lasso/xml/tools.h | 8 +------- lasso/xml/xml.h | 11 +++++++---- php/Makefile.am | 2 +- python/Makefile.am | 2 +- tests/Makefile.am | 10 ++++++++-- 13 files changed, 31 insertions(+), 33 deletions(-) commit c613c52c2796282a12918160b66632ef401d0374 Author: Frederic Peters Date: Fri Dec 17 17:12:58 2004 +0000 define LASSO_INTERNALS in lasso/ lasso/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 40011072329bcb4344aceee0fd4040710f7f9f86 Author: Frederic Peters Date: Fri Dec 17 16:57:32 2004 +0000 don't export functions defined in tools.h lasso/xml/tools.h | 22 +++++++++++----------- lasso/xml/xml.h | 3 +++ 2 files changed, 14 insertions(+), 11 deletions(-) commit 195ff4064ed680af7556f7125650f32f9977b4fe Author: Frederic Peters Date: Fri Dec 17 13:57:47 2004 +0000 created by Lasso should now be compatible with SAML requirements [SAMLCore11]. [SAMLCore11] Maler, Eve, Mishra, Prateek, Philpott, Rob, eds. (27 May 2003). "Assertions and Protocol for the OASIS Security Assertion Markup Language (SAML) V1.1," OASIS Committee Specification, version 1.1, Organization for the Advancement of Structured Information Standards lasso/id-ff/login.c | 2 +- lasso/id-ff/logout.c | 5 +++++ lasso/id-ff/profile.c | 22 +++++++++++++++++++++- 3 files changed, 27 insertions(+), 2 deletions(-) commit 83322cf752a34f4b4fa0579185c7d4903dd488ca Author: Frederic Peters Date: Fri Dec 17 12:33:46 2004 +0000 deal with missing Status in LogoutResponse lasso/id-ff/logout.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) commit 9f80e375171f987aa6680e9ccd42ae599b80eca6 Author: Frederic Peters Date: Fri Dec 17 12:32:48 2004 +0000 Done with the new query snippets system (everything but the IDPEntries in ). It has nested support but ID-FF layer must still be updated to produce them. lasso/xml/internals.h | 2 +- lasso/xml/lib_authn_request.c | 99 ++++++---------------- .../xml/lib_federation_termination_notification.c | 72 +++++++--------- lasso/xml/lib_idp_entries.c | 2 +- lasso/xml/lib_idp_entries.h | 2 +- lasso/xml/lib_logout_request.c | 83 +++++------------- lasso/xml/lib_register_name_identifier_request.c | 2 +- lasso/xml/lib_status_response.c | 65 ++++---------- lasso/xml/saml_name_identifier.c | 42 --------- lasso/xml/saml_name_identifier.h | 3 - lasso/xml/samlp_request_abstract.c | 49 ----------- lasso/xml/samlp_response_abstract.c | 58 ------------- lasso/xml/samlp_status.c | 45 +++++++++- lasso/xml/xml.c | 50 ++++++++--- 14 files changed, 181 insertions(+), 393 deletions(-) commit f44d34eecbc4cf28d4831138a3b6544716c12c6d Author: Frederic Peters Date: Fri Dec 17 00:07:20 2004 +0000 new (draft) query snippet mechanism to generate query string; deployed in lasso/xml/internals.h | 10 ++ lasso/xml/lib_authn_request.c | 1 + lasso/xml/lib_idp_entry.c | 2 +- lasso/xml/lib_register_name_identifier_request.c | 117 +++----------- lasso/xml/saml_name_identifier.c | 2 +- lasso/xml/xml.c | 189 +++++++++++++++++++++++ 6 files changed, 226 insertions(+), 95 deletions(-) commit 7258b5aa2b7d6de0fbe8b2dd2f5b98e40a29f17a Author: Frederic Peters Date: Thu Dec 16 15:34:51 2004 +0000 merged new error codes in SWIG and used one of them in the Python tests python/tests/profiles_tests.py | 2 +- swig/Lasso.i | 50 +++++++++++++++++++++++++++++++++++++----- 2 files changed, 46 insertions(+), 6 deletions(-) commit 76ec7eb692476075c9ab2649f8612479ed5df0f5 Author: Frederic Peters Date: Thu Dec 16 14:04:43 2004 +0000 (almost) done with errors in ID-FF; remaining "return -1" have been converted to LASSO_ERROR_UNDEFINED (there are forty-three of them). LASSO_ERROR_UNDEFINED was redefined from -999 to -1 so it is easier to add new sequences of errros. lasso/id-ff/defederation.c | 20 ++++++----------- lasso/id-ff/identity.c | 2 +- lasso/id-ff/lecp.c | 30 ++++++++++--------------- lasso/id-ff/login.c | 25 ++++++++++----------- lasso/id-ff/logout.c | 23 +++++++++----------- lasso/id-ff/name_identifier_mapping.c | 41 +++++++++++++++++------------------ lasso/id-ff/name_registration.c | 24 ++++++++++---------- lasso/id-ff/profile.c | 14 ++++-------- lasso/id-ff/provider.c | 2 +- lasso/xml/errors.c | 17 +++++++++++++++ lasso/xml/errors.h | 19 +++++++++++----- 11 files changed, 108 insertions(+), 109 deletions(-) commit f5471b3acf9069cba291593e21f77705299d3b7e Author: Frederic Peters Date: Thu Dec 16 12:32:47 2004 +0000 added minimal support (only XML, no mapping to URL yet) for added memory management to list* XmlSnippet docs/reference/snippet-types.rst | 4 ++ lasso/xml/internals.h | 1 + lasso/xml/lib_authn_request.c | 1 + lasso/xml/lib_authn_request.h | 2 + lasso/xml/lib_authn_request_envelope.c | 4 ++ lasso/xml/lib_authn_request_envelope.h | 2 +- lasso/xml/lib_authn_response.c | 1 + lasso/xml/lib_authn_response.h | 2 +- .../xml/lib_federation_termination_notification.c | 2 + .../xml/lib_federation_termination_notification.h | 2 +- lasso/xml/lib_logout_request.c | 2 +- lasso/xml/lib_logout_request.h | 2 + lasso/xml/lib_name_identifier_mapping_request.c | 2 + lasso/xml/lib_name_identifier_mapping_request.h | 2 +- lasso/xml/lib_name_identifier_mapping_response.c | 2 + lasso/xml/lib_name_identifier_mapping_response.h | 2 +- lasso/xml/lib_register_name_identifier_request.c | 3 +- lasso/xml/lib_register_name_identifier_request.h | 2 + lasso/xml/lib_status_response.c | 3 +- lasso/xml/lib_status_response.h | 2 + lasso/xml/xml.c | 47 ++++++++++++++++++---- 21 files changed, 75 insertions(+), 15 deletions(-) commit 1e7cd347178a0fb14fbe1b5581cc73a41f9f64bc Author: Frederic Peters Date: Wed Dec 15 19:11:21 2004 +0000 pointers are %p in format strings, not %x lasso/id-ff/federation.c | 4 ++-- lasso/id-ff/identity.c | 4 ++-- lasso/id-ff/lecp.c | 2 +- lasso/id-ff/logout.c | 4 ++-- lasso/id-ff/profile.c | 4 ++-- lasso/id-ff/provider.c | 4 ++-- lasso/id-ff/server.c | 4 ++-- lasso/id-ff/session.c | 4 ++-- lasso/id-wsf/discovery.c | 4 ++-- 9 files changed, 17 insertions(+), 17 deletions(-) commit 2755b354980da87565835911b7aa3806e659061b Author: Frederic Peters Date: Wed Dec 15 19:02:40 2004 +0000 memory management work lasso/id-ff/identity.c | 4 +--- lasso/id-ff/login.c | 16 +++++++++++----- lasso/id-ff/profile.c | 4 ++-- lasso/id-ff/provider.c | 21 ++++++++++++++++++--- lasso/id-ff/server.c | 6 +++--- lasso/id-ff/session.c | 6 +----- lasso/xml/xml.c | 12 +++++++++--- 7 files changed, 45 insertions(+), 24 deletions(-) commit a9e250aec10e9b29e1236880241755b6326dd04b Author: Frederic Peters Date: Wed Dec 15 19:02:18 2004 +0000 moved federation to XmlSnippet lasso/id-ff/federation.c | 86 ++++++++++++++---------------------------------- 1 file changed, 24 insertions(+), 62 deletions(-) commit e63eb6ed71f66ec6fd3c8681b72965221213e659 Author: Frederic Peters Date: Wed Dec 15 16:00:23 2004 +0000 no longer play fool mixing pointers and integers; they are not always the same size and this bites quite hard on AMD-64 (shame on me). lasso/xml/xml.c | 57 +++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 35 insertions(+), 22 deletions(-) commit 22d04e57d896975bc5be3bad33adf5cdfb76325f Author: Nicolas Clapies Date: Wed Dec 15 13:47:06 2004 +0000 Reordered function declarations. Added check of server param. lasso/id-wsf/personal_profile_service.c | 2 +- lasso/id-wsf/personal_profile_service.h | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) commit 2d6ee469fdf1a7ae03e3826ffcabcedec020ec71 Author: Frederic Peters Date: Wed Dec 15 13:26:31 2004 +0000 fixed a few "variable might be used uninitialized in this function" detected with gcc-3.4 -O3. lasso/id-ff/login.c | 13 +++++++------ lasso/id-ff/logout.c | 17 ++++++++++------- lasso/id-ff/name_registration.c | 3 +-- lasso/id-ff/provider.c | 4 ++-- lasso/xml/tools.c | 2 +- lasso/xml/xml.c | 5 ++++- 6 files changed, 25 insertions(+), 19 deletions(-) commit 6ed1fbe7bedb8ea5639f34fe473447fcf5a6c654 Author: Nicolas Clapies Date: Wed Dec 15 13:12:56 2004 +0000 Added support of modify request from a SP to AP : updated element's class in level 1 (Modify and ModifyResponse) and implemented modify request in level 2 id wsf. lasso/id-wsf/abstract_service.h | 5 +- lasso/id-wsf/personal_profile_service.c | 126 +++++++++++++++++++++++++++++--- lasso/id-wsf/personal_profile_service.h | 31 +++++++- lasso/xml/dst_modification.h | 2 +- lasso/xml/dst_modify.c | 8 +- lasso/xml/dst_modify.h | 4 +- lasso/xml/dst_modify_response.c | 6 +- lasso/xml/dst_modify_response.h | 2 +- 8 files changed, 164 insertions(+), 20 deletions(-) commit be7a74a3482ca07624206c9fde54948c8be1d238 Author: Frederic Peters Date: Wed Dec 15 11:07:34 2004 +0000 added new standard error code LASSO_PROFILE_ERROR_BUILDING_QUERY_FAILED lasso/id-ff/defederation.c | 3 +-- lasso/id-ff/login.c | 3 +-- lasso/id-ff/logout.c | 10 +++++++--- lasso/id-ff/name_registration.c | 6 ++---- lasso/xml/errors.c | 2 ++ lasso/xml/errors.h | 1 + 6 files changed, 14 insertions(+), 11 deletions(-) commit 3dc8389da176bc6e7bb66ea1eac2db02e68741ea Author: Frederic Peters Date: Wed Dec 15 10:14:27 2004 +0000 new LASSO_PROFILE_ERROR_NAME_IDENTIFIER_NOT_FOUND error code lasso/id-ff/defederation.c | 4 +--- lasso/id-ff/lecp.c | 4 ++-- lasso/id-ff/logout.c | 4 +--- lasso/xml/errors.c | 2 ++ lasso/xml/errors.h | 1 + 5 files changed, 7 insertions(+), 8 deletions(-) commit 501da6b2b6ccdc9413c416d6ea5cb6541b648070 Author: Frederic Peters Date: Wed Dec 15 10:07:09 2004 +0000 coherent error handling for "identity not found" and "federation not found" cases. lasso/id-ff/defederation.c | 13 ++++--------- lasso/id-ff/lecp.c | 7 ++----- lasso/id-ff/login.c | 8 +++----- lasso/id-ff/logout.c | 12 ++++-------- lasso/id-ff/name_identifier_mapping.c | 14 +++++--------- lasso/id-ff/name_registration.c | 18 ++++++------------ lasso/xml/errors.c | 4 ++++ lasso/xml/errors.h | 4 +++- 8 files changed, 31 insertions(+), 49 deletions(-) commit 3ee382c5c621ee3859830c9eeefba8bc48f6cb95 Author: Frederic Peters Date: Tue Dec 14 21:50:12 2004 +0000 replaced unknown error by 2 LASSO_PROFILE_ERROR_INVALID_HTTP_METHOD in Name Identifier Mapping profile. lasso/id-ff/name_identifier_mapping.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) commit 4fe9f93dfae3c2327b6749f7c271eeae321f8647 Author: Frederic Peters Date: Tue Dec 14 21:41:57 2004 +0000 new LASSO_PROFILE_ERROR_UNKNOWN_PROFILE_URL profile error and replaced a bunch of 'return -1;' with that one. lasso/id-ff/defederation.c | 17 ++++++++--------- lasso/id-ff/lecp.c | 6 ++---- lasso/id-ff/login.c | 5 ++++- lasso/id-ff/logout.c | 8 +++++--- lasso/id-ff/name_identifier_mapping.c | 3 +-- lasso/id-ff/name_registration.c | 6 ++---- lasso/xml/errors.c | 2 ++ lasso/xml/errors.h | 1 + 8 files changed, 25 insertions(+), 23 deletions(-) commit 34e10f1d7f3ac2b1118b168fe092272dd806c878 Author: Frederic Peters Date: Tue Dec 14 21:10:28 2004 +0000 fixed some missing or wrong prototype declarations lasso/id-ff/server.c | 10 ---------- lasso/id-wsf/discovery.c | 8 +++----- lasso/id-wsf/discovery.h | 5 +++++ lasso/id-wsf/personal_profile_service.h | 10 +++++----- lasso/xml/dst_modification.h | 2 +- 5 files changed, 14 insertions(+), 21 deletions(-) commit 7c1a1caafaf7072465a2d848eb9627eafb967cd8 Author: Frederic Peters Date: Tue Dec 14 21:10:07 2004 +0000 fixed function declared as returning int that didn't return anything lasso/id-wsf/personal_profile_service.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit ad056adf3699d7162858ccae0faaacfc5ac24882 Author: Frederic Peters Date: Tue Dec 14 19:20:20 2004 +0000 API change in Single Sign On profile (IdP side) to allow the developer to mess with Outlined in http://lists.labs.libre-entreprise.org/pipermail/lasso-devel/2004-December/001119.html docs/lasso-book/single-sign-on.process | 40 ++----- lasso/id-ff/lecp.c | 14 +-- lasso/id-ff/lecp.h | 9 +- lasso/id-ff/login.c | 199 ++++++++++++--------------------- lasso/id-ff/login.h | 28 ++--- lasso/xml/errors.h | 9 +- swig/Lasso.i | 43 +++++-- tests/login_tests.c | 11 +- 8 files changed, 139 insertions(+), 214 deletions(-) commit 2bda2b596eaaa5c83aca90ea73b9bbec31985a5b Author: Frederic Peters Date: Tue Dec 14 15:46:25 2004 +0000 more error code harmony, now with a new critical_error macro lasso/id-ff/defederation.c | 17 +++++++---------- lasso/id-ff/login.c | 33 ++++++++++++++------------------- lasso/id-ff/logout.c | 20 +++++++++----------- lasso/id-ff/name_identifier_mapping.c | 19 +++++++++---------- lasso/id-ff/name_registration.c | 24 ++++++++++++------------ lasso/id-ff/server.c | 2 +- lasso/xml/errors.c | 10 ++++++++-- lasso/xml/tools.h | 2 ++ 8 files changed, 62 insertions(+), 65 deletions(-) commit 18dbcc81631d5439226c6f5e5d166b58045e3e9b Author: Frederic Peters Date: Tue Dec 14 15:28:55 2004 +0000 status code has been set in lasso_lib_logout_respone_new_full lasso/id-ff/logout.c | 2 -- 1 file changed, 2 deletions(-) commit 413af882f6ca5b51f3b05c615e4d61256912544a Author: Frederic Peters Date: Tue Dec 14 13:59:22 2004 +0000 properly sign samlp:Response lasso/id-ff/login.c | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) commit 45f00e1aa4002dcdfd8b45948b3ab099c1193f7a Author: Frederic Peters Date: Tue Dec 14 13:50:46 2004 +0000 properly check signature on soap samlp:Request (login/artifact) lasso/id-ff/login.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ lasso/id-ff/login.h | 3 +++ lasso/id-ff/provider.c | 3 +++ 3 files changed, 50 insertions(+) commit c13df5834335830c9aca6f65f972890fdfbceeaf Author: Frederic Peters Date: Tue Dec 14 13:22:00 2004 +0000 properly verify signatures and return code appriopriately (closes: #362) lasso/id-ff/login.c | 4 ++-- lasso/id-ff/name_identifier_mapping.c | 2 +- lasso/id-ff/name_registration.c | 17 ++++++++++++----- lasso/xml/lib_register_name_identifier_request.c | 7 +++++-- lasso/xml/lib_register_name_identifier_request.h | 5 +++-- lasso/xml/lib_register_name_identifier_response.c | 7 +++++-- lasso/xml/lib_register_name_identifier_response.h | 6 +++--- 7 files changed, 31 insertions(+), 17 deletions(-) commit 4e55002eb2c43a39ca6eeaeb47103813bdc22c1a Author: Frederic Peters Date: Tue Dec 14 11:01:04 2004 +0000 updated test to new api tests/login_tests.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit 9f5cc4a2872c3ed2c8b84a5e2a8a2ece9c472acc Author: Frederic Peters Date: Tue Dec 14 11:00:15 2004 +0000 updated test to new API python/tests/profiles_tests.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 498efc98656c10eeadaa53e91eb901539bbd6cf1 Author: Frederic Peters Date: Tue Dec 14 10:58:59 2004 +0000 ignore generated files csharp/.cvsignore | 20 ++++++++++++++++++++ java/.cvsignore | 14 ++++++++++++++ php/Attic/examples/.cvsignore | 3 +++ php/Attic/examples/sample-idp/.cvsignore | 3 +++ php/Attic/examples/sample-sp/.cvsignore | 3 +++ 5 files changed, 43 insertions(+) commit d95ecee034b9099330a41f86e307307de959257f Author: Frederic Peters Date: Tue Dec 14 10:49:25 2004 +0000 ignore html rendition docs/lasso-book/.cvsignore | 2 ++ 1 file changed, 2 insertions(+) commit ac7dcf24c70590fc4e78ee2c5f01f0ec85c695ab Author: Frederic Peters Date: Tue Dec 14 10:48:54 2004 +0000 process files taken from lasso 0.5 (not uptodate) docs/lasso-book/defederation.process | 58 +++++++++++++++++++++++ docs/lasso-book/name-registration.process | 78 +++++++++++++++++++++++++++++++ 2 files changed, 136 insertions(+) commit f7b1251a4e292cc37d51724b6618ffef0dc58732 Author: Frederic Peters Date: Tue Dec 14 10:48:25 2004 +0000 got uptodate documentation about single sign on (I think) docs/lasso-book/single-logout.process | 11 +-- docs/lasso-book/single-sign-on.process | 154 ++++++++++++++++++++++----------- docs/lasso-book/single-sign-on.rst | 21 +++-- docs/lasso-book/writing-a-c-sp.txt | 35 ++++---- 4 files changed, 135 insertions(+), 86 deletions(-) commit fa3d87885eef998b98b771d43c709cd56dd7c88d Author: Frederic Peters Date: Tue Dec 14 10:20:07 2004 +0000 [API Change] For consistency with the other profiles, remote_providerID has been moved from build_authn_request_msg to init_authn_request in both Single Sign-On and LECP profiles. [details on lasso-devel@] lasso/id-ff/lecp.c | 21 +++++++++++---------- lasso/id-ff/lecp.h | 6 +++--- lasso/id-ff/login.c | 20 ++++++++++---------- lasso/id-ff/login.h | 6 +++--- swig/Lasso.i | 9 +++++---- 5 files changed, 32 insertions(+), 30 deletions(-) commit ad621f3c384a3c8ab89cf6145ab886985504b17b Author: Frederic Peters Date: Mon Dec 13 21:40:12 2004 +0000 error codes handling in LassoLogin lasso/id-ff/login.c | 57 +++++++++++++++++++---------------------------------- 1 file changed, 20 insertions(+), 37 deletions(-) commit 8da1dce448dcfbe168bee0eb6de6318be3f729ce Author: Frederic Peters Date: Mon Dec 13 20:28:59 2004 +0000 use XmlSnippet for LassoLogout dump/restore lasso/id-ff/logout.c | 71 ++++++++++++++++----------------------------------- lasso/id-ff/profile.c | 1 - 2 files changed, 22 insertions(+), 50 deletions(-) commit 12c24f68c3f6f345e91e7b4d997370e4210de289 Author: Frederic Peters Date: Mon Dec 13 19:18:29 2004 +0000 reenabled lasso_session_destroy() lasso/id-ff/session.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit a5a8ff207f0d7af6f49a94aefe0d930e5022ff10 Author: Frederic Peters Date: Mon Dec 13 18:39:49 2004 +0000 more error code harmonization. lasso/id-ff/login.c | 9 ++++++--- lasso/id-ff/logout.c | 6 ++---- lasso/id-ff/name_identifier_mapping.c | 14 ++++++-------- lasso/id-ff/name_registration.c | 20 ++++++++------------ lasso/xml/errors.c | 2 ++ 5 files changed, 24 insertions(+), 27 deletions(-) commit 2e2f599a163d2f535a0836d620f9cac318a3d46e Author: Frederic Peters Date: Mon Dec 13 18:22:28 2004 +0000 sign AuthnResponse and harmonous use of LASSO_PROFILE_ERROR_INVALID_MSG lasso/id-ff/login.c | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) commit 11724d36299ad159ee6b8122e880664141f877a5 Author: Frederic Peters Date: Mon Dec 13 17:52:08 2004 +0000 removed obsolete comment lasso/id-ff/login.c | 1 - 1 file changed, 1 deletion(-) commit 1f527f033b9120007c7237d7d18de637342a9a19 Author: Frederic Peters Date: Mon Dec 13 17:46:29 2004 +0000 harmonized remote_provider tests (check and error code set to LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND) lasso/id-ff/defederation.c | 15 +++++++-------- lasso/id-ff/login.c | 4 ++-- lasso/id-ff/logout.c | 14 +++++++------- lasso/id-ff/name_identifier_mapping.c | 8 ++++---- lasso/id-ff/name_registration.c | 12 ++++++------ 5 files changed, 26 insertions(+), 27 deletions(-) commit 56fea39796b93a9dac6d233617969c86ee10e86f Author: Frederic Peters Date: Mon Dec 13 16:26:36 2004 +0000 replaced error_code macro with a function since that macro didn't work with gcc 2.95 lasso/xml/tools.c | 22 +++++++++++++++++----- lasso/xml/tools.h | 7 +++---- 2 files changed, 20 insertions(+), 9 deletions(-) commit 993522925f2ada9567f143117fdcf33df3bdc309 Author: Frederic Peters Date: Mon Dec 13 15:53:43 2004 +0000 error message for LASSO_SERVER_ERROR_ADD_PROVIDER_FAILED lasso/xml/errors.c | 2 ++ 1 file changed, 2 insertions(+) commit 1aed41ee896925e16834f378ef1b768900a4961e Author: Frederic Peters Date: Mon Dec 13 15:53:18 2004 +0000 removed trailing ; in macro lasso/xml/tools.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit b04103301a98b3522f92882604a2c22c6d6e8e7d Author: Frederic Peters Date: Mon Dec 13 15:23:24 2004 +0000 dealing with errors; now like this: return error_code(G_LOG_LEVEL_CRITICAL, LASSO_SERVER_ERROR_ADD_PROVIDER_FAILED); lasso/id-ff/defederation.c | 10 +++++----- lasso/id-ff/login.c | 10 +++++----- lasso/id-ff/logout.c | 14 ++++++++------ lasso/id-ff/name_identifier_mapping.c | 16 ++++++++-------- lasso/id-ff/name_registration.c | 24 ++++++++++++------------ lasso/id-ff/server.c | 3 +-- lasso/xml/tools.c | 7 ++++++- lasso/xml/tools.h | 10 ++++++---- 8 files changed, 51 insertions(+), 43 deletions(-) commit 92dfd8e1b1af9fa155b65adc22aec87470eb2d67 Author: Frederic Peters Date: Sun Dec 12 18:27:06 2004 +0000 properly sign soap messages in name identifier mapping profile. lasso/id-ff/name_identifier_mapping.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) commit d040361227272a187ba76f44efa2082b1241d9f2 Author: Frederic Peters Date: Sun Dec 12 18:15:01 2004 +0000 got top-of-file license spaced the same way as in other files (+ fixed editor typo) lasso/id-ff/login.c | 4 ++-- lasso/id-ff/provider.c | 4 ++-- lasso/id-wsf/discovery.c | 4 ++-- lasso/id-wsf/personal_profile_service.c | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) commit b48794e9f02fdcca98b3a9b494c2f99b4727b818 Author: Frederic Peters Date: Sun Dec 12 13:51:06 2004 +0000 removed error message when java was not found configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit e7f248e720c3f24d7cda50e562aeda948a248e96 Author: Valery Febvre Date: Fri Dec 10 17:52:30 2004 +0000 Added LassoDiscovery class lasso/id-wsf/Makefile.am | 3 + lasso/id-wsf/discovery.c | 473 +++++++++++++++++++++++++++++++++++++++++++++++ lasso/id-wsf/discovery.h | 112 +++++++++++ 3 files changed, 588 insertions(+) commit 7cae9ab205c78edc931eb781226a237e2edcd8f8 Author: Valery Febvre Date: Fri Dec 10 17:44:30 2004 +0000 Added lasso_server_add_service() method lasso/id-ff/server.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++-- lasso/id-ff/server.h | 6 ++++++ 2 files changed, 57 insertions(+), 2 deletions(-) commit 21828cf8d5b83994afddf4c9df3d71d57b0dc177 Author: Valery Febvre Date: Fri Dec 10 17:42:57 2004 +0000 Added LassoService class lasso/id-ff/Makefile.am | 2 + lasso/id-ff/service.c | 133 ++++++++++++++++++++++++++++++++++++++++++++++++ lasso/id-ff/service.h | 75 +++++++++++++++++++++++++++ 3 files changed, 210 insertions(+) commit 77f4d7cee51aab94935b812897b203dc6138cedd Author: Valery Febvre Date: Fri Dec 10 17:35:05 2004 +0000 Fixed the attribute name of the dump version lasso/id-ff/provider.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 5e6fc3c044e62b34c3e22d0a210ffb15acbf83eb Author: Nicolas Clapies Date: Fri Dec 10 17:11:26 2004 +0000 Added lasso_personal_profile_service_add_data() method : it allows to add response elements corresponding to the requested attribute values. lasso/id-wsf/personal_profile_service.c | 42 ++++++++++++++++++++------------- lasso/id-wsf/personal_profile_service.h | 3 +++ 2 files changed, 28 insertions(+), 17 deletions(-) commit 71bc47a8d824da40464b0b414d121281f22bb643 Author: Nicolas Clapies Date: Fri Dec 10 17:10:08 2004 +0000 Removed params of constructor : id and itemIDRef are not required attributes. lasso/xml/dst_data.c | 9 +-------- lasso/xml/dst_data.h | 3 +-- 2 files changed, 2 insertions(+), 10 deletions(-) commit 021f683d2e1b24ad404c44c65a036967a5e088f1 Author: Nicolas Clapies Date: Fri Dec 10 17:08:33 2004 +0000 Added support of MsgContact PP service. lasso/xml/Makefile.am | 2 ++ 1 file changed, 2 insertions(+) commit f1709c77a10f83de649eec95574910e9075804a0 Author: Nicolas Clapies Date: Fri Dec 10 16:58:11 2004 +0000 Initial version : support of personal profile msg contact. It is very experimental and only supports msg account and msg provider part. lasso/xml/pp_msg_contact.c | 118 +++++++++++++++++++++++++++++++++++++++++++++ lasso/xml/pp_msg_contact.h | 69 ++++++++++++++++++++++++++ 2 files changed, 187 insertions(+) commit 0586ac0ca3bf94e80e05e2b4c6e3ecb207fa1ac2 Author: Valery Febvre Date: Fri Dec 10 16:50:15 2004 +0000 Removed useless LassoDiscoResourceIDGroup class lasso/xml/Makefile.am | 2 - lasso/xml/disco_resource_id_group.c | 94 ------------------------------------- lasso/xml/disco_resource_id_group.h | 72 ---------------------------- 3 files changed, 168 deletions(-) commit d1b99b7bbbc74a0824054c0766c96bb15889654e Author: Frederic Peters Date: Fri Dec 10 16:13:34 2004 +0000 Added back xmlsec signature check (and disabled it in name identifier mapping profile since it is buggy there). The signature check requires another call to xmlParseMemory; this makes them 3 per SOAP message (sign check + lasso_profile_get_request_type_from_soap_msg and lasso_node_init_from_message). I'll think further about this. lasso/id-ff/lecp.c | 2 +- lasso/id-ff/login.c | 31 ++++--- lasso/id-ff/name_identifier_mapping.c | 6 ++ lasso/id-ff/provider.c | 141 ++++++++++++++++++++------------ lasso/xml/xml.c | 149 ++++++++++++++++++++-------------- lasso/xml/xml.h | 3 +- 6 files changed, 204 insertions(+), 128 deletions(-) commit fad688adebffaab950dad2acf53617a7a4d5e401 Author: Nicolas Clapies Date: Fri Dec 10 14:32:02 2004 +0000 Fixed type mistake in snippets of LassoDstQueryItem. lasso/xml/dst_query_item.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit a11c6b985f4a0fe70645cec67a1391c7c9fb1172 Author: Nicolas Clapies Date: Fri Dec 10 14:30:57 2004 +0000 Added support of DST modify / modify response. lasso/xml/Makefile.am | 8 ++++++++ 1 file changed, 8 insertions(+) commit d3ada4331576c62b9f17c2c88f06e6a1e41ec3ab Author: Nicolas Clapies Date: Fri Dec 10 14:30:22 2004 +0000 Replaced LassoDiscoResourceIDGroup with old ResourceID and EncryptedResourceID. lasso/xml/dst_query.c | 7 +++++-- lasso/xml/dst_query.h | 6 ++++-- lasso/xml/dst_query_response.c | 1 - 3 files changed, 9 insertions(+), 5 deletions(-) commit b914dd3d15a20808e31e81dc620605f655f80406 Author: Nicolas Clapies Date: Fri Dec 10 14:29:04 2004 +0000 Updated lasso_personal_profile_service_init_query() method : now it takes a LassoDiscoResourceOffering* resourceOfferring, a LassoDiscoDescription* description and a char* select, init a Query object, set the soap url from ResourceOffering, and return a QueryItem* to optionaly set attributes. Now it is possible to add extra QueryItems with lasso_personal_profile_service_add_query_item(). It returns the new QueryItem'pointer to set optional attributes; lasso/id-wsf/personal_profile_service.c | 129 ++++++++++++++++++-------------- lasso/id-wsf/personal_profile_service.h | 15 ++-- 2 files changed, 83 insertions(+), 61 deletions(-) commit 36edd871ed669d39d75428d98e3ed886d1d8e07e Author: Nicolas Clapies Date: Fri Dec 10 14:20:20 2004 +0000 Removed ResourceOffering and ResourceIDGroup class's attributes. Only keep data and queryItem attributes. Removed old unused private methods (dispose() and finalize() ) lasso/id-wsf/abstract_service.c | 49 +---------------------------------------- lasso/id-wsf/abstract_service.h | 21 ++++++++++-------- 2 files changed, 13 insertions(+), 57 deletions(-) commit 64e6685ae2ee46cc23b98b499e27a304f44aff22 Author: Nicolas Clapies Date: Fri Dec 10 14:14:12 2004 +0000 Updated lasso_wsf_profile_build_*_msg() : now they only set msg_body class's attribute with a soap message (request / response). lasso/id-wsf/wsf_profile.c | 46 ---------------------------------------------- lasso/id-wsf/wsf_profile.h | 1 - 2 files changed, 47 deletions(-) commit 6b4e042342cec2e7c5789b5531d79af726b55675 Author: Nicolas Clapies Date: Fri Dec 10 13:13:13 2004 +0000 Added DST Modify part level 1. lasso/xml/dst_modification.c | 130 +++++++++++++++++++++++++++++++ lasso/xml/dst_modification.h | 74 ++++++++++++++++++ lasso/xml/dst_modify.c | 166 ++++++++++++++++++++++++++++++++++++++++ lasso/xml/dst_modify.h | 78 +++++++++++++++++++ lasso/xml/dst_modify_response.c | 147 +++++++++++++++++++++++++++++++++++ lasso/xml/dst_modify_response.h | 76 ++++++++++++++++++ lasso/xml/dst_new_data.c | 105 +++++++++++++++++++++++++ lasso/xml/dst_new_data.h | 67 ++++++++++++++++ 8 files changed, 843 insertions(+) commit c5a2dec0ccc56209dd6260b435f3525e0cba66a5 Author: Frederic Peters Date: Fri Dec 10 09:55:27 2004 +0000 overridden spelling fix caused alignment wreckage lasso/id-ff/federation.c | 2 +- lasso/id-ff/identity.c | 2 +- lasso/id-ff/lecp.c | 2 +- lasso/id-ff/logout.c | 2 +- lasso/id-ff/profile.c | 2 +- lasso/id-ff/provider.c | 2 +- lasso/id-ff/server.c | 2 +- lasso/id-ff/session.c | 2 +- lasso/id-wsf/abstract_service.c | 2 +- lasso/id-wsf/personal_profile_service.c | 2 +- lasso/id-wsf/wsf_profile.c | 2 +- lasso/xml/xml.c | 2 +- 12 files changed, 12 insertions(+), 12 deletions(-) commit b11f9396bcc20037b966bcbd54478e21ff127b38 Author: Frederic Peters Date: Fri Dec 10 09:51:29 2004 +0000 removed XmlSnippetObsolete, no longer used anywhere. lasso_node_build_xmlNode_from_snippets made static and documented some new functions. lasso/xml/internals.h | 11 ----- lasso/xml/xml.c | 115 +++++++++----------------------------------------- 2 files changed, 21 insertions(+), 105 deletions(-) commit 6ebc89fdd3a927965ac98f110a78caa7691f1e4f Author: Frederic Peters Date: Fri Dec 10 00:30:01 2004 +0000 reenabled signature checking on query strings (xml messages still to do) lasso/id-ff/defederation.c | 2 +- lasso/id-ff/login.c | 5 +++-- lasso/id-ff/logout.c | 4 ++-- lasso/id-ff/name_identifier_mapping.c | 4 ++-- lasso/id-ff/name_registration.c | 2 +- lasso/id-ff/provider.c | 21 ++++++++++++++++----- lasso/id-ff/provider.h | 2 +- 7 files changed, 26 insertions(+), 14 deletions(-) commit 8d66a333197a91d509233e6927f79922a0b20689 Author: Frederic Peters Date: Thu Dec 9 23:25:26 2004 +0000 moved NameRegistration to XmlSnippet lasso/id-ff/name_registration.c | 55 +++++++++++------------------------------ lasso/xml/Makefile.am | 2 +- 2 files changed, 15 insertions(+), 42 deletions(-) commit 367284547173ac0dc9ae45d6effe705b29f426b1 Author: Frederic Peters Date: Thu Dec 9 23:24:45 2004 +0000 removed unnecessary namespace declaration lasso/id-ff/login.c | 1 - 1 file changed, 1 deletion(-) commit a6471f77a0a58a75d11d618ce6e74894f2d91d74 Author: Frederic Peters Date: Thu Dec 9 23:14:15 2004 +0000 removed unnecessary private_data in LassoFederation; consequence being instance_init, class_init, dispose and finalise have also been removed. lasso/id-ff/defederation.c | 62 ++-------------------------------------------- lasso/id-ff/defederation.h | 2 -- 2 files changed, 2 insertions(+), 62 deletions(-) commit 7e6fc8e52e89357083651410b96f1cf4ecff19ae Author: Frederic Peters Date: Thu Dec 9 23:08:30 2004 +0000 removed struct LassoLoginPrivate declaration lasso/id-ff/login.h | 2 -- 1 file changed, 2 deletions(-) commit 0dcd6f2f85fdf7b8324b7467955937033c8ae237 Author: Frederic Peters Date: Thu Dec 9 23:08:10 2004 +0000 Moved LassoLogin to XmlSnippet; not completely since an enum is converted in string and I'm not sure it is a good idea to 1) store them as integer or 2) adds the mapping value->string to xml.c. Also removed unused LassoLoginPrivate variable/struct/ lasso/id-ff/login.c | 73 ++++++++++++----------------------------------------- 1 file changed, 16 insertions(+), 57 deletions(-) commit fb715219d54492d545640562aa148f391451b587 Author: Frederic Peters Date: Thu Dec 9 22:32:13 2004 +0000 use xml snippet in LassoProfile; better faster stronger. lasso/id-ff/Makefile.am | 1 + lasso/id-ff/profile.c | 104 ++++++++---------------------------------------- 2 files changed, 18 insertions(+), 87 deletions(-) commit f27f8e53aff953cb8d4d8729ae201b53383800df Author: Frederic Peters Date: Thu Dec 9 22:30:28 2004 +0000 don't sign query if not asked to; and fixed SNIPPET_NODE_IN_CHILD support lasso/xml/xml.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) commit 5fe99f44a2ebb5b64b07a6810ab6773cedcf4d60 Author: Nicolas Clapies Date: Thu Dec 9 18:18:54 2004 +0000 Removed code with ResourceIDGroup in lasso_personal_profile_service_init_query() : will be updated soon. lasso/id-wsf/personal_profile_service.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit b4bf935c70bb02c711b1c8b894dfd6ff1d1e2b20 Author: Valery Febvre Date: Thu Dec 9 17:01:32 2004 +0000 Yet another modification about ResourceID and EncrytpedResourceID elements lasso/xml/disco_modify.c | 21 +++++++++++++++------ lasso/xml/disco_modify.h | 8 +++++--- lasso/xml/disco_query.c | 23 +++++++++++++++-------- lasso/xml/disco_query.h | 8 +++++--- lasso/xml/disco_resource_offering.c | 18 +++++++++--------- lasso/xml/disco_resource_offering.h | 7 ++++--- 6 files changed, 53 insertions(+), 32 deletions(-) commit 9785f3d191b3de0771263efb8d22bb6d4e855fa2 Author: Frederic Peters Date: Wed Dec 8 22:07:34 2004 +0000 force role as service provider in lasso_login_build_authn_request_msg (closes: 382) lasso/id-ff/login.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) commit 4180c524aa5c817e279765ba8c423b01c875e4a2 Author: Frederic Peters Date: Wed Dec 8 21:55:43 2004 +0000 forgot to get query when AuthnRequestsSigned was not set lasso/id-ff/login.c | 3 +++ 1 file changed, 3 insertions(+) commit 6a44127d456e9cd2f98bcd19a3138d19db6740fb Author: Nicolas Clapies Date: Wed Dec 8 14:02:25 2004 +0000 Fixed support of ResourceIDGroup : updated class of level 1 and id-wsf with this new class. lasso/id-wsf/abstract_service.h | 6 +++--- lasso/id-wsf/personal_profile_service.c | 26 ++++++++------------------ lasso/xml/dst_query.c | 7 ++----- lasso/xml/dst_query.h | 6 +++--- lasso/xml/dst_query_response.c | 1 + 5 files changed, 17 insertions(+), 29 deletions(-) commit 6558b56fa92eccea97eb4c49385f7d636f05f483 Author: Nicolas Clapies Date: Wed Dec 8 13:09:18 2004 +0000 Removed process of ResourceOffering param. Need to be reactivated when ResourceID process in level 1 will be completed. lasso/id-wsf/personal_profile_service.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) commit bbe903090be887a0b7152f71e5a6ed6d85fdc998 Author: Emmanuel Raviart Date: Wed Dec 8 12:47:56 2004 +0000 For Swig, corrected server providerIds. Added providerIds to identities and sessions. lasso/id-ff/identity.c | 6 ++++++ lasso/id-ff/identity.h | 2 ++ swig/Lasso.i | 35 ++++++++++++++++++++++------------- 3 files changed, 30 insertions(+), 13 deletions(-) commit 1332c59d56269e0218f75b046a71f7be903273a7 Author: Valery Febvre Date: Wed Dec 8 12:40:16 2004 +0000 Fixed bad XML schema interpretation of ResourceIDGroup element in: LassoDiscoModify, LassoDiscoQuerya and LassoDiscoResourceOffering lasso/xml/disco_modify.c | 48 +++++++++++-------------------------- lasso/xml/disco_modify.h | 7 +++--- lasso/xml/disco_query.c | 29 +++++----------------- lasso/xml/disco_query.h | 9 ++++--- lasso/xml/disco_resource_id_group.c | 7 +++--- lasso/xml/disco_resource_id_group.h | 6 ----- lasso/xml/disco_resource_offering.c | 42 ++++++++------------------------ lasso/xml/disco_resource_offering.h | 13 +++++----- 8 files changed, 47 insertions(+), 114 deletions(-) commit 279ddb1377443b295721a046269c88ac7eb54a9a Author: Nicolas Clapies Date: Wed Dec 8 11:48:20 2004 +0000 Updated with support of disco_resource_id_group. lasso/xml/Makefile.am | 2 ++ 1 file changed, 2 insertions(+) commit 22e856deb69c78cbdee4d4201106cd70eb1c1c72 Author: Nicolas Clapies Date: Wed Dec 8 11:47:39 2004 +0000 Initial version : complex class to manage ResourceID and EncryptedResourceID choice. lasso/xml/disco_resource_id_group.c | 93 +++++++++++++++++++++++++++++++++++++ lasso/xml/disco_resource_id_group.h | 78 +++++++++++++++++++++++++++++++ 2 files changed, 171 insertions(+) commit 03545f18382e16d46a0e1fdb3a3f5138229c0b2f Author: Frederic Peters Date: Wed Dec 8 10:00:35 2004 +0000 new snippet type, SNIPPET_NODE_IN_CHILD, and documented all of the types. docs/reference/snippet-types.rst | 62 ++++++++++++++++++++++++++++++++++++++++ lasso/xml/internals.h | 1 + lasso/xml/xml.c | 17 +++++++---- 3 files changed, 75 insertions(+), 5 deletions(-) commit 7ece831c1ab98d5b1de28dd90befa72ecb6ac7b0 Author: Valery Febvre Date: Wed Dec 8 09:53:41 2004 +0000 Added LassoDiscoResourceID and LassoDiscoEncryptedResourceID classes lasso/xml/Makefile.am | 4 ++ lasso/xml/disco_encrypted_resource_id.c | 111 ++++++++++++++++++++++++++++++++ lasso/xml/disco_encrypted_resource_id.h | 73 +++++++++++++++++++++ lasso/xml/disco_resource_id.c | 108 +++++++++++++++++++++++++++++++ lasso/xml/disco_resource_id.h | 72 +++++++++++++++++++++ 5 files changed, 368 insertions(+) commit 3352a6daa262fff7d9b38b9fd6f7c35e8b9e512d Author: Frederic Peters Date: Wed Dec 8 09:38:07 2004 +0000 reviewed code marked with XXX lasso/xml/lib_authn_request.c | 5 +++-- lasso/xml/lib_logout_request.c | 4 +--- lasso/xml/lib_logout_request.h | 8 +------- lasso/xml/lib_register_name_identifier_request.c | 3 +-- lasso/xml/lib_register_name_identifier_request.h | 2 -- lasso/xml/lib_status_response.c | 2 +- lasso/xml/xml.c | 2 -- 7 files changed, 7 insertions(+), 19 deletions(-) commit c715230144cb0c41178bab2564cc4df5c492bdf6 Author: Emmanuel Raviart Date: Wed Dec 8 00:06:00 2004 +0000 In SWIG: - Improved ProviderIds. - Removed LassoProviders structure (too complex to handle with SWIG). - Added attribute providerIds and method getProvider to LassoServer. - Replaced xmlChar with gchar. swig/Lasso.i | 179 ++++++++++++++++++++++++++--------------------------------- 1 file changed, 80 insertions(+), 99 deletions(-) commit 1716502943a99f1a0e71ca0db6e9c3ecd3931e91 Author: Emmanuel Raviart Date: Tue Dec 7 21:30:11 2004 +0000 The past participle of "to override" is overridden. see http://en.wiktionary.org/wiki/Overridden lasso/id-ff/defederation.c | 2 +- lasso/id-ff/federation.c | 2 +- lasso/id-ff/identity.c | 2 +- lasso/id-ff/lecp.c | 2 +- lasso/id-ff/login.c | 2 +- lasso/id-ff/logout.c | 2 +- lasso/id-ff/name_registration.c | 2 +- lasso/id-ff/profile.c | 2 +- lasso/id-ff/provider.c | 2 +- lasso/id-ff/server.c | 2 +- lasso/id-ff/session.c | 2 +- lasso/id-wsf/abstract_service.c | 2 +- lasso/id-wsf/personal_profile_service.c | 2 +- lasso/id-wsf/wsf_profile.c | 2 +- lasso/xml/xml.c | 2 +- 15 files changed, 15 insertions(+), 15 deletions(-) commit db9b04a96d3c4d3b07706260ea128b7350151386 Author: Frederic Peters Date: Tue Dec 7 16:23:50 2004 +0000 another round on snippets; no longer multiply types for content transformation (CONTENT_BOOLEAN, ATTRIBUTE_BOOLEAN, CONTENT_INTEGER, ATTRIBUTE_INTEGER...), instead does something like this: SNIPPET_ATTRIBUTE | SNIPPET_INTEGER (other combinations allowed) lasso/xml/dst_query_item.c | 2 +- lasso/xml/internals.h | 9 +- lasso/xml/lib_authn_request.c | 6 +- lasso/xml/lib_authn_request_envelope.c | 2 +- lasso/xml/lib_scoping.c | 3 +- lasso/xml/saml_assertion.c | 12 +- lasso/xml/samlp_request_abstract.c | 4 +- lasso/xml/samlp_response_abstract.c | 4 +- lasso/xml/xml.c | 202 +++++++++++++++++---------------- 9 files changed, 126 insertions(+), 118 deletions(-) commit ad5bc81d0e724dc3a9bc50848251326beb88c012 Author: Nicolas Clapies Date: Tue Dec 7 16:14:50 2004 +0000 Fixed #ifndef __LASSO_LIB_DISCO_QUERY_H__ to #ifndef __LASSO_DISCO_QUERY_H__ lasso/xml/disco_query.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 487a50aa6e588759025ddd965458b99a46f94289 Author: Nicolas Clapies Date: Tue Dec 7 15:23:15 2004 +0000 Replaced template_service.* with abstract_service.* lasso/id-wsf/Makefile.am | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit 648315a0db7af686525878a2b1210688da099a5d Author: Valery Febvre Date: Tue Dec 7 15:22:12 2004 +0000 Added AttributeStatement element support in Saml:Assertion (required for id-WSF). Fixed constructor's required params of Disco classes. Updated Disco classes with new snippet. Updated some schema fragments. lasso/xml/disco_credentials.c | 54 ++++------------- lasso/xml/disco_description.c | 89 ++++++++++++++------------- lasso/xml/disco_description.h | 13 +++- lasso/xml/disco_insert_entry.c | 53 ++++------------ lasso/xml/disco_modify.c | 91 ++++++++++++---------------- lasso/xml/disco_modify.h | 6 +- lasso/xml/disco_modify_response.c | 91 ++++++++++++++-------------- lasso/xml/disco_modify_response.h | 8 ++- lasso/xml/disco_options.c | 48 +++------------ lasso/xml/disco_options.h | 4 +- lasso/xml/disco_query.c | 100 +++++++++++++------------------ lasso/xml/disco_query.h | 6 +- lasso/xml/disco_query_response.c | 68 +++++++-------------- lasso/xml/disco_query_response.h | 1 - lasso/xml/disco_remove_entry.c | 63 +++++++------------ lasso/xml/disco_remove_entry.h | 3 +- lasso/xml/disco_requested_service_type.c | 66 +++++++------------- lasso/xml/disco_requested_service_type.h | 2 +- lasso/xml/disco_resource_offering.c | 93 ++++++++++++++-------------- lasso/xml/disco_resource_offering.h | 5 +- lasso/xml/disco_service_instance.c | 75 +++++++++++------------ lasso/xml/disco_service_instance.h | 4 +- lasso/xml/dst_data.c | 86 +++++++++++++------------- lasso/xml/dst_data.h | 16 +---- lasso/xml/dst_query.c | 31 ++++++---- lasso/xml/dst_query.h | 2 +- lasso/xml/dst_query_item.c | 41 ++++++++----- lasso/xml/dst_query_item.h | 2 +- lasso/xml/dst_query_response.c | 17 +++++- lasso/xml/dst_query_response.h | 2 +- lasso/xml/saml_assertion.c | 17 +++--- lasso/xml/saml_assertion.h | 5 +- lasso/xml/saml_subject_statement.h | 2 +- 33 files changed, 511 insertions(+), 653 deletions(-) commit 1e84f9e9e0b8810d76dea346c86ebc5ce5f8713d Author: Nicolas Clapies Date: Tue Dec 7 15:18:40 2004 +0000 Initial version : class to manage Personal profile service. Currently, only support initiating, processing and building of Query and QueryResponse messages. lasso/id-wsf/personal_profile_service.c | 227 ++++++++++++++++++++++++++++++++ lasso/id-wsf/personal_profile_service.h | 85 ++++++++++++ 2 files changed, 312 insertions(+) commit 4bc779dcf2812c8206d80b5a5df0d10575bd8ba6 Author: Nicolas Clapies Date: Tue Dec 7 15:16:03 2004 +0000 Initial version : abstract class to store ResourceID, ResourceOfferings, QueryItem. lasso/id-wsf/abstract_service.c | 131 ++++++++++++++++++++++++++++++++++++++++ lasso/id-wsf/abstract_service.h | 81 +++++++++++++++++++++++++ 2 files changed, 212 insertions(+) commit 4b023c5b85966c1e9a37441e019bc10ac89ab585 Author: Nicolas Clapies Date: Tue Dec 7 13:54:39 2004 +0000 Removed unused old code. lasso/id-wsf/wsf_profile.c | 42 ++---------------------------------------- 1 file changed, 2 insertions(+), 40 deletions(-) commit f7b49995a83b24c3d93ff72ad3565839a626dcc1 Author: Nicolas Clapies Date: Tue Dec 7 11:29:34 2004 +0000 Added support of specific service : now QueryResponse element can be used by services and inherits their name space. lasso/xml/dst_query_response.c | 40 ++++++++++++++++++++++++++++++++++++++++ lasso/xml/dst_query_response.h | 3 +++ 2 files changed, 43 insertions(+) commit ea9081a279db2416e858763a5cb522553c44dd7e Author: Nicolas Clapies Date: Tue Dec 7 11:27:01 2004 +0000 Fixed required params of constructor lasso_dst_query_item_new() : QueryItem's attribute itemID is optional. lasso/xml/dst_query_item.c | 5 ++--- lasso/xml/dst_query_item.h | 3 +-- 2 files changed, 3 insertions(+), 5 deletions(-) commit de149fd796ade794bd74a52c1a2d79d3e472207f Author: Nicolas Clapies Date: Tue Dec 7 11:12:24 2004 +0000 Added support of specific service : now Query element can be used by services and inherits their name space. lasso/xml/dst_query.c | 36 ++++++++++++++++++++++++++++++++++++ lasso/xml/dst_query.h | 3 +++ 2 files changed, 39 insertions(+) commit 9e5e75d4b83075e738304eb89225796d146b41aa Author: Frederic Peters Date: Tue Dec 7 10:51:02 2004 +0000 updated informative files with data about Lasso 0.5.0. NEWS | 13 +++++++++++++ doap.rdf | 8 ++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) commit e91f77f43bc6a71f4665d4a1e2e72f1226c7c3a6 Author: Valery Febvre Date: Tue Dec 7 10:36:54 2004 +0000 Updated LassoUtilityStatus with new snippet lasso/xml/utility_status.c | 58 +++++++++++++--------------------------------- 1 file changed, 16 insertions(+), 42 deletions(-) commit d249fed61e0f9b41c3abea58d64b2c733afa21a5 Author: Nicolas Clapies Date: Tue Dec 7 10:20:01 2004 +0000 Fixed namespace of Status element : Status is included by schemas so no default name space. lasso/xml/utility_status.c | 1 - 1 file changed, 1 deletion(-) commit eeb34add2adcf8f6c0e30392bc6bd8ed8f3609b8 Author: Frederic Peters Date: Mon Dec 6 17:25:50 2004 +0000 removed obsolete doc args lasso/xml/samlp_request_abstract.c | 3 +-- lasso/xml/samlp_response_abstract.c | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) commit d20e9cbbb311bf2ed457fc53283f4b31ea36ee91 Author: Valery Febvre Date: Mon Dec 6 16:38:05 2004 +0000 Fixed a stupid copy/paste lasso/xml/xml.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 2a4dde9763617bd547b416a0e541654581a4cc59 Author: Valery Febvre Date: Mon Dec 6 16:32:11 2004 +0000 Fixed SNIPPET_LIST_NODES and SNIPPET_LIST_CONTENT snippet type support in lasso_node_init_from_xml() lasso/xml/xml.c | 25 ++++++++----------------- 1 file changed, 8 insertions(+), 17 deletions(-) commit 757beda09424f5618e9ca6d026a1f7b6bfba289d Author: Frederic Peters Date: Mon Dec 6 16:30:33 2004 +0000 removed debugging fprintf lasso/xml/xml.c | 1 - 1 file changed, 1 deletion(-) commit 06709dc68e0bb2531bcb538411435a6c8f03202b Author: Frederic Peters Date: Mon Dec 6 16:25:44 2004 +0000 fixed xpath expressions for id-ff 1.1 compatibility lasso/id-ff/provider.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 30136449cf6baf4d0bb9e13355cebb04ffe3622d Author: Frederic Peters Date: Mon Dec 6 16:18:43 2004 +0000 fixed metadata lasso/id-ff/provider.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 6e748d4d2d484188e373f68cc76bb21aaa6f3873 Author: Frederic Peters Date: Mon Dec 6 16:15:57 2004 +0000 added (untested) compatibility with ID-FF 1.1 metadata files lasso/id-ff/provider.c | 54 +++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 45 insertions(+), 9 deletions(-) commit 7ca47ea199e21af818ce7ae52f50561d10b04947 Author: Nicolas Clapies Date: Mon Dec 6 14:49:18 2004 +0000 Renamed LASSO_LIB_SERVICE_TYPE_ID_SIS_* to LASSO_*_HREF. lasso/xml/xml.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 6971227afe8ddd2031aacedc26e8ac7b889bf122 Author: Nicolas Clapies Date: Mon Dec 6 14:11:01 2004 +0000 Oups ... bad, bad copy / paste. lasso/xml/strings.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit febc2d53b104ab6450af802cf8ec584b0849376a Author: Nicolas Clapies Date: Mon Dec 6 13:49:04 2004 +0000 Removed service types defines. Added prefix and href for personal profile and employee profile. lasso/xml/strings.h | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) commit cc31a3a6c093561feac311eaa0a504ee31d6155e Author: Frederic Peters Date: Mon Dec 6 13:42:55 2004 +0000 added dst support lasso/xml/xml.c | 8 ++++++++ 1 file changed, 8 insertions(+) commit 7b4fd972a68225d6fbcddab0ea69ad1aa8a49e2f Author: Frederic Peters Date: Mon Dec 6 13:16:43 2004 +0000 dealt with namespaces in a manner compatibler with libxml2 2.6.11 and 2.6.16 lasso/xml/xml.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) commit a49d4809e03a202eebad9f1660878d2b6f8b053d Author: Frederic Peters Date: Sat Dec 4 15:14:13 2004 +0000 more on documentation compilation; ok now. docs/reference/lasso.sgml | 42 ------------------------------------------ 1 file changed, 42 deletions(-) commit 54a094d180376935bc467d337654bc9820b41ca1 Author: Frederic Peters Date: Sat Dec 4 15:09:12 2004 +0000 removed obsolete classes so the doc compiles again docs/reference/lasso.types | 22 ++-------------------- 1 file changed, 2 insertions(+), 20 deletions(-) commit 4b03192dac7281641a8eda0320b47eaa26add639 Author: Frederic Peters Date: Sat Dec 4 15:01:33 2004 +0000 Won anther automake battle. Thanks to Matthias Andree and Be Plouvier. lasso/Makefile.am | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit 0935abceb503620cc471a0cd11963095fcb57303 Author: Frederic Peters Date: Sat Dec 4 13:38:34 2004 +0000 added types.c generation to Makefile and to .cvsignore lasso/.cvsignore | 2 ++ lasso/Makefile.am | 7 ++++++- 2 files changed, 8 insertions(+), 1 deletion(-) commit a922e139d7c5085eea4ea604b0f4efb3b1d17a8b Author: Frederic Peters Date: Sat Dec 4 13:37:53 2004 +0000 added types (classes) extraction on build and registration in lasso_init lasso/extract_types.py | 30 ++++++++++++++++++++++++++++++ lasso/lasso.c | 9 +++++++++ 2 files changed, 39 insertions(+) commit 97016b1c90eccb068d2e21b05641bc9ad7bec2f9 Author: Frederic Peters Date: Sat Dec 4 13:36:49 2004 +0000 removed gmodule from libs; I failed to get class registration dynamic configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 4bc192190e142f6bcf9bc5c8da2e07b4aa8a9f7e Author: Frederic Peters Date: Sat Dec 4 13:13:12 2004 +0000 formatted for easier processing lasso/id-ff/logout.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 5093517f930809ac8c5f8173580c6ac5067a34b2 Author: Frederic Peters Date: Sat Dec 4 12:22:55 2004 +0000 link to gmodule (part of glib) configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 1f5e8f900f1123e43b21c2b49d358ec7aa2a81b9 Author: Frederic Peters Date: Fri Dec 3 12:05:41 2004 +0000 consistency: comment stars are aligned; parent_class is no longer necessary; struct indentation only use one tab; trailing \ are not necessary. lasso/xml/dst_query_response.c | 45 ++++++++++++++++++++---------------------- 1 file changed, 21 insertions(+), 24 deletions(-) commit 8cb4200020501d4903c7ae293aeb49fcdba2158e Author: Nicolas Clapies Date: Fri Dec 3 12:04:38 2004 +0000 Removed old FIXME. lasso/xml/dst_query_item.c | 1 - 1 file changed, 1 deletion(-) commit b99e1f9d37034508472c9cf7cf6c6bfcaff47bb1 Author: Nicolas Clapies Date: Fri Dec 3 11:26:36 2004 +0000 Updated LassoDstQueryItem with new snippet feature in class instance. Moved schema comment from .h to .c lasso/xml/dst_query_item.c | 72 +++++++++++++++++++--------------------------- lasso/xml/dst_query_item.h | 22 ++------------ 2 files changed, 32 insertions(+), 62 deletions(-) commit d92ec722ebe28690712b2db5ca6082466dc717a3 Author: Frederic Peters Date: Fri Dec 3 11:20:10 2004 +0000 added xml boolean attribute snippet support lasso/xml/internals.h | 1 + lasso/xml/xml.c | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) commit b2c75f631f435072c2deb6f23ed11824a435cc52 Author: Nicolas Clapies Date: Fri Dec 3 11:11:49 2004 +0000 Updated LassoDstQueryResponse with new snippet feature in class instance. Moved schema comment from .h to .c lasso/xml/dst_query_response.c | 72 ++++++++++++++++-------------------------- lasso/xml/dst_query_response.h | 22 ++----------- 2 files changed, 30 insertions(+), 64 deletions(-) commit 71400e454e09e6f19aab8781b54f0a39f84ccc02 Author: Nicolas Clapies Date: Fri Dec 3 11:10:51 2004 +0000 Updated LassoDstQuery with new snippet feature in class instance. Moved schema comment from .h to .c lasso/xml/dst_query.c | 75 +++++++++++++++++++++------------------------------ lasso/xml/dst_query.h | 20 +------------- 2 files changed, 32 insertions(+), 63 deletions(-) commit 327f9fc5e38519496f002b002e970a5b867b1d57 Author: Frederic Peters Date: Fri Dec 3 11:01:12 2004 +0000 removed memory management debugging fprintf lasso/xml/xml.c | 3 --- 1 file changed, 3 deletions(-) commit 45bf30354cf0171a39fb3da2e0c45e215cfb1f20 Author: Frederic Peters Date: Fri Dec 3 11:00:29 2004 +0000 cvs ignore for id-wsf/ files lasso/id-wsf/.cvsignore | 7 +++++++ 1 file changed, 7 insertions(+) commit 0d70e500d91537ef2b70c67b568be1afb49ac80b Author: Frederic Peters Date: Fri Dec 3 10:46:26 2004 +0000 memory management for XmlSnippets; xml/*.c should no longer leak lasso/xml/xml.c | 45 ++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 40 insertions(+), 5 deletions(-) commit f22b47484ad8ba1baf14fb63f3ef5722221f4db9 Author: Frederic Peters Date: Fri Dec 3 10:42:47 2004 +0000 do not share memory between profile->remote_providerID and response->ProviderID lasso/id-ff/logout.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 23ebbdba5fef3a002d0b91957955b4e8f6880eb6 Author: Valery Febvre Date: Thu Dec 2 15:54:20 2004 +0000 Added 22 DST status code constants lasso/xml/strings.h | 43 ++++++++++++++++++++++++++++++++++++++----- 1 file changed, 38 insertions(+), 5 deletions(-) commit 9ed58480abfe3368e131e23c99e9c490905a37dc Author: Frederic Peters Date: Thu Dec 2 14:56:31 2004 +0000 updated version to 0.5.9 and libtool version to 3.0.0 configure.ac | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 05577f56728d3fbae3f484e37e1202d6676b38e2 Author: Frederic Peters Date: Thu Dec 2 14:54:43 2004 +0000 last(?) iteration on XmlSnippet; now attached to classes, get_xmlNode and init_from_xml are no longer necessary in many cases. Previous XmlSnippet renamed to XmlSnippetObsolete to keep compatibility (id-wsf classes have not yet been converted). lasso/id-ff/login.c | 4 + lasso/xml/disco_credentials.c | 2 +- lasso/xml/disco_description.c | 2 +- lasso/xml/disco_insert_entry.c | 2 +- lasso/xml/disco_modify.c | 2 +- lasso/xml/disco_modify_response.c | 2 +- lasso/xml/disco_options.c | 2 +- lasso/xml/disco_query.c | 2 +- lasso/xml/disco_query_response.c | 2 +- lasso/xml/disco_remove_entry.c | 2 +- lasso/xml/disco_requested_service_type.c | 2 +- lasso/xml/disco_resource_offering.c | 2 +- lasso/xml/disco_service_instance.c | 2 +- lasso/xml/dst_data.c | 2 +- lasso/xml/dst_query.c | 2 +- lasso/xml/dst_query_item.c | 10 +- lasso/xml/dst_query_response.c | 2 +- lasso/xml/internals.h | 31 ++- lasso/xml/lib_assertion.c | 36 ++-- lasso/xml/lib_authentication_statement.c | 54 ++--- lasso/xml/lib_authn_context.c | 52 ++--- lasso/xml/lib_authn_request.c | 85 +++----- lasso/xml/lib_authn_request_envelope.c | 67 ++----- lasso/xml/lib_authn_response.c | 51 ++--- lasso/xml/lib_authn_response_envelope.c | 52 ++--- .../xml/lib_federation_termination_notification.c | 55 ++---- lasso/xml/lib_idp_entries.c | 46 ++--- lasso/xml/lib_idp_entry.c | 49 ++--- lasso/xml/lib_idp_list.c | 48 ++--- lasso/xml/lib_logout_request.c | 56 ++---- lasso/xml/lib_logout_response.c | 23 +-- lasso/xml/lib_name_identifier_mapping_request.c | 59 ++---- lasso/xml/lib_name_identifier_mapping_response.c | 54 ++--- lasso/xml/lib_register_name_identifier_request.c | 66 ++----- lasso/xml/lib_register_name_identifier_response.c | 19 +- lasso/xml/lib_request_authn_context.c | 57 ++---- lasso/xml/lib_scoping.c | 60 ++---- lasso/xml/lib_status_response.c | 51 ++--- lasso/xml/lib_subject.c | 48 ++--- lasso/xml/saml_advice.c | 51 ++--- lasso/xml/saml_assertion.c | 87 +++----- lasso/xml/saml_attribute.c | 34 ++-- lasso/xml/saml_attribute_designator.c | 54 ++--- lasso/xml/saml_attribute_statement.c | 35 ++-- lasso/xml/saml_audience_restriction_condition.c | 49 ++--- lasso/xml/saml_authentication_statement.c | 57 ++---- lasso/xml/saml_authority_binding.c | 54 ++--- lasso/xml/saml_condition_abstract.c | 19 +- lasso/xml/saml_conditions.c | 56 ++---- lasso/xml/saml_name_identifier.c | 50 ++--- lasso/xml/saml_statement_abstract.c | 19 +- lasso/xml/saml_subject.c | 50 ++--- lasso/xml/saml_subject_confirmation.c | 53 ++--- lasso/xml/saml_subject_locality.c | 50 ++--- lasso/xml/saml_subject_statement.c | 18 +- lasso/xml/saml_subject_statement_abstract.c | 48 ++--- lasso/xml/samlp_request.c | 47 ++--- lasso/xml/samlp_request_abstract.c | 61 +++--- lasso/xml/samlp_request_abstract.h | 2 +- lasso/xml/samlp_response.c | 40 ++-- lasso/xml/samlp_response_abstract.c | 72 +++---- lasso/xml/samlp_status.c | 47 ++--- lasso/xml/samlp_status_code.c | 47 ++--- lasso/xml/utility_status.c | 2 +- lasso/xml/xml.c | 218 ++++++++++++++++++++- lasso/xml/xml.h | 10 +- 66 files changed, 862 insertions(+), 1631 deletions(-) commit 169b16b94fc7a581b182307a610b91b1d944d0ae Author: Frederic Peters Date: Thu Dec 2 14:53:58 2004 +0000 indent using tabs lasso/xml/dst_data.h | 4 ++-- lasso/xml/dst_query.h | 18 +++++++++--------- lasso/xml/dst_query_item.h | 10 +++++----- lasso/xml/dst_query_response.h | 10 +++++----- 4 files changed, 21 insertions(+), 21 deletions(-) commit 654c2500c85937745019b82d233c3e0e412a2933 Author: Romain Chantereay Date: Wed Dec 1 15:43:11 2004 +0000 Update NSIS scripts. Install zlib, intl.dll instead of libtoolized name. Install correctly in the lasso-lite installer. win32/nsis/jlasso-lite.nsi | 6 ++--- win32/nsis/lasso-deps.nsi | 62 ++++++++++++++++++++++--------------------- win32/nsis/lasso-full.nsi | 66 ++++++++++++++++++++++++---------------------- win32/nsis/lasso-lite.nsi | 17 +++++++----- 4 files changed, 79 insertions(+), 72 deletions(-) commit e067ba2ae7587eaa95044ca9d74e4aa1574044aa Author: Nicolas Clapies Date: Tue Nov 30 17:07:42 2004 +0000 Added a first support of id-wsf high level. Only the base class is defined : LassoWsfProfile is intended to be inherited by future service classes. It is still very incomplete. configure.ac | 1 + lasso/Makefile.am | 4 +- lasso/id-wsf/Makefile.am | 16 ++++ lasso/id-wsf/wsf_profile.c | 197 +++++++++++++++++++++++++++++++++++++++++++++ lasso/id-wsf/wsf_profile.h | 82 +++++++++++++++++++ 5 files changed, 299 insertions(+), 1 deletion(-) commit 5dbbd54fa4e1295a0538baa78abc15be30bd8644 Author: Nicolas Clapies Date: Tue Nov 30 11:35:05 2004 +0000 Added support of DISCO and DST element classes. lasso/xml/Makefile.am | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) commit 2b2b5acd47aab5e966fc212598714e698749b299 Author: Nicolas Clapies Date: Tue Nov 30 11:34:13 2004 +0000 Fixed wrong param in lasso_dst_query_item_new() : LibDstSelect doesnt exist, it is a specific element of attributes services. lasso/xml/dst_query_item.c | 4 +--- lasso/xml/dst_query_item.h | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) commit 7e7c6a812c14ac1cc54197b9acfac2cedd161a2a Author: Nicolas Clapies Date: Tue Nov 30 11:23:26 2004 +0000 Initial version : added DST part of WSF for sis specific attribute services. lasso/xml/dst_data.c | 122 +++++++++++++++++++++++++++++++++++ lasso/xml/dst_data.h | 80 +++++++++++++++++++++++ lasso/xml/dst_query.c | 131 ++++++++++++++++++++++++++++++++++++++ lasso/xml/dst_query.h | 90 ++++++++++++++++++++++++++ lasso/xml/dst_query_item.c | 140 +++++++++++++++++++++++++++++++++++++++++ lasso/xml/dst_query_item.h | 91 +++++++++++++++++++++++++++ lasso/xml/dst_query_response.c | 138 ++++++++++++++++++++++++++++++++++++++++ lasso/xml/dst_query_response.h | 93 +++++++++++++++++++++++++++ 8 files changed, 885 insertions(+) commit 2ea07eebe111fa8c02f2341af91a39bd1a955d95 Author: Frederic Peters Date: Mon Nov 29 19:31:32 2004 +0000 extra consistency check in lasso_session_get_provider_index lasso/id-ff/session.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) commit 06003ba78b0b8427da64a3a71cde513ef9ab6805 Author: Frederic Peters Date: Mon Nov 29 19:30:47 2004 +0000 fixed error checking in lasso_server_new lasso/id-ff/server.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) commit 41f252841d1c7389a5fcba0cb98424981bafcc51 Author: Frederic Peters Date: Mon Nov 29 19:26:15 2004 +0000 added error checking in lasso_server_new lasso/id-ff/server.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 53f7c81199e75383c92f376bfa8c023af43e5d62 Author: Frederic Peters Date: Mon Nov 29 18:48:27 2004 +0000 added proper error checking where xpath is used. lasso/id-ff/profile.c | 2 +- lasso/id-ff/provider.c | 15 +++++++++++---- lasso/xml/xml.c | 2 +- 3 files changed, 13 insertions(+), 6 deletions(-) commit 3faa8d32e94756c0a73a8006eca1e7f8e57abc64 Author: Frederic Peters Date: Mon Nov 29 18:47:54 2004 +0000 removed unnecessary include lasso/xml/disco_requested_service_type.c | 1 - 1 file changed, 1 deletion(-) commit 4f0f9498dd2540d360714c48c36c26f18fa6e7f7 Author: Frederic Peters Date: Mon Nov 29 18:39:33 2004 +0000 remove erroneous (my bad) XXX comment lasso/xml/xml.c | 1 - 1 file changed, 1 deletion(-) commit 30f3668d0d9386d519c141531fb34ddd58deebe1 Author: Valery Febvre Date: Mon Nov 29 16:44:57 2004 +0000 Added LassoSamlAttribute, LassoSamlAttributeDesignator & LassoSamlAttributeStatement classes lasso/xml/Makefile.am | 6 ++ lasso/xml/saml_attribute.c | 129 ++++++++++++++++++++++++++++++++ lasso/xml/saml_attribute.h | 67 +++++++++++++++++ lasso/xml/saml_attribute_designator.c | 136 ++++++++++++++++++++++++++++++++++ lasso/xml/saml_attribute_designator.h | 71 ++++++++++++++++++ lasso/xml/saml_attribute_statement.c | 124 +++++++++++++++++++++++++++++++ lasso/xml/saml_attribute_statement.h | 70 +++++++++++++++++ 7 files changed, 603 insertions(+) commit 939697c22dab09ab3b29faef6de4d11112c6eb70 Author: Frederic Peters Date: Mon Nov 29 16:38:58 2004 +0000 cut on some line lengths lasso/id-ff/defederation.c | 3 ++- lasso/id-ff/login.c | 12 ++++++------ lasso/id-ff/name_identifier_mapping.c | 3 ++- lasso/id-ff/name_registration.c | 6 ++++-- lasso/id-ff/name_registration.h | 3 ++- lasso/xml/disco_description.h | 6 ++++-- lasso/xml/disco_insert_entry.h | 3 ++- lasso/xml/disco_query.h | 3 ++- lasso/xml/disco_remove_entry.h | 3 ++- 9 files changed, 26 insertions(+), 16 deletions(-) commit 66ac8c4d0222b092e8cebfecdc4d2c0d3f8c2f92 Author: Frederic Peters Date: Mon Nov 29 16:28:52 2004 +0000 reduced line length and aligning some #define lasso/xml/strings.h | 66 ++++++++++++++++++++++++++--------------------------- 1 file changed, 33 insertions(+), 33 deletions(-) commit 9d5c0e506985d15c5c12311fbfce302e33e86339 Author: Frederic Peters Date: Mon Nov 29 16:23:22 2004 +0000 harmonize schema fragment comments (indentation, in .c, no space between namespace and element name) lasso/xml/disco_credentials.c | 16 ++++++++++- lasso/xml/disco_credentials.h | 24 ++++------------ lasso/xml/disco_query.c | 35 +++++++++++++++++++++-- lasso/xml/disco_query.h | 49 +++++++------------------------- lasso/xml/disco_query_response.c | 31 ++++++++++++++++---- lasso/xml/disco_query_response.h | 41 +++++++------------------- lasso/xml/disco_requested_service_type.c | 26 ++++++++++++----- lasso/xml/disco_requested_service_type.h | 38 +++++++++---------------- lasso/xml/lib_assertion.c | 3 +- lasso/xml/samlp_status.c | 3 +- lasso/xml/utility_status.c | 20 +++++++++++++ lasso/xml/utility_status.h | 31 ++++---------------- 12 files changed, 161 insertions(+), 156 deletions(-) commit 9f971fdf380834d885effce9fbe98c0f843c88f6 Author: Nicolas Clapies Date: Mon Nov 29 15:49:57 2004 +0000 Initial version of wsf query / query response discovery part files. lasso/xml/disco_credentials.c | 121 +++++++++++++++++++++++++++ lasso/xml/disco_credentials.h | 81 +++++++++++++++++++ lasso/xml/disco_query.c | 135 +++++++++++++++++++++++++++++++ lasso/xml/disco_query.h | 98 ++++++++++++++++++++++ lasso/xml/disco_query_response.c | 130 +++++++++++++++++++++++++++++ lasso/xml/disco_query_response.h | 94 +++++++++++++++++++++ lasso/xml/disco_requested_service_type.c | 126 +++++++++++++++++++++++++++++ lasso/xml/disco_requested_service_type.h | 84 +++++++++++++++++++ lasso/xml/utility_status.c | 129 +++++++++++++++++++++++++++++ lasso/xml/utility_status.h | 88 ++++++++++++++++++++ 10 files changed, 1086 insertions(+) commit ef55e7f456ba054fbbb153bdc91462c664d37785 Author: Frederic Peters Date: Mon Nov 29 15:36:09 2004 +0000 harmony in snippets declaration lasso/xml/disco_description.c | 2 +- lasso/xml/disco_insert_entry.c | 3 +-- lasso/xml/disco_modify.c | 5 +++-- lasso/xml/disco_modify_response.c | 6 +++--- lasso/xml/disco_options.c | 2 +- lasso/xml/disco_resource_offering.c | 8 ++++---- lasso/xml/disco_service_instance.c | 3 +-- 7 files changed, 14 insertions(+), 15 deletions(-) commit 939b16ef9dead35cd9ef815e746eb3543b8e62b3 Author: Frederic Peters Date: Mon Nov 29 15:31:09 2004 +0000 harmony in schema fragment comments lasso/xml/disco_description.c | 56 ++++++++++++++++++------------------- lasso/xml/disco_insert_entry.c | 18 ++++++------ lasso/xml/disco_modify.c | 23 +++++++++++++++ lasso/xml/disco_modify.h | 23 --------------- lasso/xml/disco_modify_response.c | 32 ++++++++++----------- lasso/xml/disco_options.c | 18 ++++++------ lasso/xml/disco_remove_entry.c | 24 ++++++++-------- lasso/xml/disco_resource_offering.c | 56 ++++++++++++++++++------------------- lasso/xml/disco_service_instance.c | 24 ++++++++-------- 9 files changed, 137 insertions(+), 137 deletions(-) commit 214ce17ffd6ab4e13eec11a96d16e8491c25ff05 Author: Frederic Peters Date: Mon Nov 29 15:25:25 2004 +0000 cut on line length (along a fix to commitinfo script to check this automatically) lasso/xml/disco_description.h | 15 ++++++++++----- lasso/xml/disco_insert_entry.h | 16 +++++++++++----- lasso/xml/disco_modify.h | 12 ++++++++---- lasso/xml/disco_modify_response.h | 18 +++++++++++++----- lasso/xml/disco_options.h | 15 ++++++++++----- lasso/xml/disco_remove_entry.h | 16 +++++++++++----- lasso/xml/disco_resource_offering.h | 18 +++++++++++++----- lasso/xml/disco_service_instance.h | 18 +++++++++++++----- 8 files changed, 89 insertions(+), 39 deletions(-) commit 0503f05aadabe5fe88b1ef20c92e4d9c0a79343e Author: Frederic Peters Date: Mon Nov 29 15:17:36 2004 +0000 fixed protocolProfile handling when NULL in request in lasso_login_process_authn_request_msg lasso/id-ff/login.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit ae1bbcf346aff38cad0f4c913135c7486db22544 Author: Frederic Peters Date: Mon Nov 29 14:07:47 2004 +0000 map server->providers to a kind of list (should be dict) swig/Lasso.i | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) commit 5c803605305688e5e1d7d1ba6cef8ec320c32720 Author: Valery Febvre Date: Mon Nov 29 11:12:26 2004 +0000 Minor fixes after the snippets changes lasso/xml/disco_description.c | 13 +++++-------- lasso/xml/disco_insert_entry.c | 9 +++++---- lasso/xml/disco_modify.c | 14 +++++++------- lasso/xml/disco_modify_response.c | 19 ++++++------------- lasso/xml/disco_options.c | 8 ++++++-- lasso/xml/disco_remove_entry.c | 17 ++++++++++++----- lasso/xml/disco_resource_offering.c | 23 ++++++++++------------- lasso/xml/disco_service_instance.c | 10 +++++----- 8 files changed, 56 insertions(+), 57 deletions(-) commit c4a9c11466ee2662bf8fe796feb5daaaf814219b Author: Frederic Peters Date: Mon Nov 29 10:50:59 2004 +0000 added RelayState support in federation termination notification (used only in redirect mode) lasso/id-ff/defederation.c | 10 +++++----- lasso/xml/lib_federation_termination_notification.c | 7 +++++++ lasso/xml/lib_federation_termination_notification.h | 2 ++ 3 files changed, 14 insertions(+), 5 deletions(-) commit 9d0a08ba1723804f04edd1ba5739767fbba7e5b4 Author: Frederic Peters Date: Mon Nov 29 10:45:46 2004 +0000 updated lasso_login_process_authn_request_msg to lasso 0.5 code lasso/id-ff/login.c | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) commit 419c7282997a91c9bbd9e630d40beaa977b4a5ae Author: Valery Febvre Date: Mon Nov 29 10:21:39 2004 +0000 Added 8 classes for discovering identity services (ID-WSF) They provide methods to build Modify & ModifyResponse messages. lasso/xml/Makefile.am | 16 ++++ lasso/xml/disco_description.c | 153 ++++++++++++++++++++++++++++++++++ lasso/xml/disco_description.h | 69 ++++++++++++++++ lasso/xml/disco_insert_entry.c | 127 +++++++++++++++++++++++++++++ lasso/xml/disco_insert_entry.h | 64 +++++++++++++++ lasso/xml/disco_modify.c | 139 +++++++++++++++++++++++++++++++ lasso/xml/disco_modify.h | 93 +++++++++++++++++++++ lasso/xml/disco_modify_response.c | 145 +++++++++++++++++++++++++++++++++ lasso/xml/disco_modify_response.h | 66 +++++++++++++++ lasso/xml/disco_options.c | 123 ++++++++++++++++++++++++++++ lasso/xml/disco_options.h | 63 ++++++++++++++ lasso/xml/disco_remove_entry.c | 121 +++++++++++++++++++++++++++ lasso/xml/disco_remove_entry.h | 62 ++++++++++++++ lasso/xml/disco_resource_offering.c | 158 ++++++++++++++++++++++++++++++++++++ lasso/xml/disco_resource_offering.h | 73 +++++++++++++++++ lasso/xml/disco_service_instance.c | 131 ++++++++++++++++++++++++++++++ lasso/xml/disco_service_instance.h | 66 +++++++++++++++ 17 files changed, 1669 insertions(+) commit 3b7c5be162d7ad6f3cdf1181f3721d5a30db32f4 Author: Valery Febvre Date: Mon Nov 29 09:57:06 2004 +0000 Added 2 constants: LASSO_DISCO_HREF and LASSO_DISCO_PREFIX lasso/xml/strings.h | 4 ++++ 1 file changed, 4 insertions(+) commit cc373c0aaa0e7af1edb5651963aba0c0e5070724 Author: Frederic Peters Date: Mon Nov 29 09:56:03 2004 +0000 check error and free memory in lasso_node_new_from_soap lasso/xml/xml.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) commit f3bc48f1bd74bf26681f15a4dae462ca322b11b6 Author: Frederic Peters Date: Mon Nov 29 09:53:26 2004 +0000 elsif'ing lasso/xml/xml.c | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-) commit 6a59e6f8211449fd0fc4bce2f2ea2858fced4e70 Author: Frederic Peters Date: Sun Nov 28 20:29:41 2004 +0000 error checking in lasso_profile_get_request_type_from_soap_msg() lasso/id-ff/profile.c | 30 ++++++++++++------------------ 1 file changed, 12 insertions(+), 18 deletions(-) commit 3702e3dacb1dbe5d191fc9537b7af1346ba24970 Author: Frederic Peters Date: Sun Nov 28 20:09:15 2004 +0000 cleaned up useless affectation lasso/xml/xml.c | 1 - 1 file changed, 1 deletion(-) commit 8ad4344cd5b3005a86276474d323b551fabc6f27 Author: Frederic Peters Date: Fri Nov 26 14:13:02 2004 +0000 moved xml snippet stuffs into new internals.h; those should not be exposed; changed snippet type from character to enum (defined in internals.h) lasso/xml/Makefile.am | 1 + lasso/xml/internals.h | 55 ++++++++++++++++++++++ lasso/xml/lib_authentication_statement.c | 11 ++--- lasso/xml/lib_authn_context.c | 10 ++-- lasso/xml/lib_authn_request.c | 22 ++++----- lasso/xml/lib_authn_request_envelope.c | 14 +++--- lasso/xml/lib_authn_response.c | 12 ++--- lasso/xml/lib_authn_response_envelope.c | 8 ++-- .../xml/lib_federation_termination_notification.c | 10 ++-- lasso/xml/lib_idp_entries.c | 6 +-- lasso/xml/lib_idp_entry.c | 10 ++-- lasso/xml/lib_idp_list.c | 8 ++-- lasso/xml/lib_logout_request.c | 14 +++--- lasso/xml/lib_name_identifier_mapping_request.c | 12 ++--- lasso/xml/lib_name_identifier_mapping_response.c | 10 ++-- lasso/xml/lib_register_name_identifier_request.c | 14 +++--- lasso/xml/lib_request_authn_context.c | 12 +++-- lasso/xml/lib_scoping.c | 8 ++-- lasso/xml/lib_status_response.c | 10 ++-- lasso/xml/lib_subject.c | 6 +-- lasso/xml/saml_advice.c | 9 ++-- lasso/xml/saml_assertion.c | 19 ++++---- lasso/xml/saml_audience_restriction_condition.c | 6 +-- lasso/xml/saml_authentication_statement.c | 12 ++--- lasso/xml/saml_authority_binding.c | 10 ++-- lasso/xml/saml_conditions.c | 10 ++-- lasso/xml/saml_subject.c | 8 ++-- lasso/xml/saml_subject_confirmation.c | 10 ++-- lasso/xml/saml_subject_locality.c | 8 ++-- lasso/xml/saml_subject_statement_abstract.c | 6 +-- lasso/xml/samlp_request.c | 6 +-- lasso/xml/samlp_response.c | 8 ++-- lasso/xml/samlp_status.c | 8 ++-- lasso/xml/samlp_status_code.c | 8 ++-- lasso/xml/xml.c | 30 ++++++------ lasso/xml/xml.h | 35 +++++--------- 36 files changed, 248 insertions(+), 198 deletions(-) commit ebd6acd6d72b22d292789cb082cf4d808877b48c Author: Frederic Peters Date: Fri Nov 26 10:00:22 2004 +0000 signature for FederatationTerminationNotification; preparation for AuthnResponse. lasso/id-ff/defederation.c | 11 ++--------- lasso/id-ff/login.c | 15 +++++---------- 2 files changed, 7 insertions(+), 19 deletions(-) commit 0cf839190ee3245687115beec5f1aa82a17f652f Author: Frederic Peters Date: Fri Nov 26 09:26:52 2004 +0000 cut some long lines lasso/id-ff/name_identifier_mapping.c | 3 ++- lasso/id-ff/profile.c | 3 ++- lasso/xml/lib_request_authn_context.h | 3 ++- lasso/xml/saml_advice.c | 3 ++- lasso/xml/saml_authority_binding.c | 3 ++- lasso/xml/saml_condition_abstract.c | 3 ++- lasso/xml/saml_conditions.c | 3 ++- lasso/xml/saml_name_identifier.c | 3 ++- lasso/xml/saml_statement_abstract.c | 3 ++- lasso/xml/saml_subject_confirmation.c | 3 ++- lasso/xml/saml_subject_locality.c | 3 ++- 11 files changed, 22 insertions(+), 11 deletions(-) commit 7764ba5862fa2f7ef89325f03843b66220d6e86f Author: Frederic Peters Date: Fri Nov 26 09:22:00 2004 +0000 formatting lasso/xml/saml_authority_binding.c | 1 - 1 file changed, 1 deletion(-) commit d19cb21114a105ab3eab9a7a11b708a9b3b98c14 Author: Frederic Peters Date: Fri Nov 26 09:21:24 2004 +0000 added attribute snippet support to lasso/xml/saml_subject_locality.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) commit 46494b8af5e16fe19f8e6a549a8a6cdf415945ee Author: Frederic Peters Date: Fri Nov 26 09:15:42 2004 +0000 added attribute xml snippet support to lasso/xml/samlp_status_code.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) commit 2d87e903b558055d219c3558d18993dbf81b23c2 Author: Frederic Peters Date: Fri Nov 26 09:11:46 2004 +0000 signature support in , and lasso/xml/lib_federation_termination_notification.c | 9 ++------- lasso/xml/lib_name_identifier_mapping_request.c | 10 ++-------- lasso/xml/lib_name_identifier_mapping_response.c | 8 ++------ 3 files changed, 6 insertions(+), 21 deletions(-) commit 0515710debc1e9169cb7897e695d0bad4618a2d3 Author: Frederic Peters Date: Fri Nov 26 09:04:46 2004 +0000 added attribute xml snippet support to lasso/xml/saml_conditions.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) commit 0a7d907fc8d894f7758b69a2ee46c1aac63f4f7c Author: Frederic Peters Date: Fri Nov 26 08:58:46 2004 +0000 use xmlsnippets in lasso/xml/saml_authority_binding.c | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) commit 312f5de306ca7927389498c7f902e73d00fc8a99 Author: Frederic Peters Date: Fri Nov 26 08:56:08 2004 +0000 fixed comment formatting lasso/xml/saml_authentication_statement.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 0b52f58a6795d9c976546ff1f048fff1e10e3112 Author: Frederic Peters Date: Fri Nov 26 08:55:44 2004 +0000 use attribute xml snippet support in lasso/xml/saml_authentication_statement.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) commit d3f99bc34d5c6db9bd8ad1d87b7d956eecc4cc8f Author: Frederic Peters Date: Fri Nov 26 08:53:06 2004 +0000 use attribute xml snippet support in lasso/xml/lib_name_identifier_mapping_request.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) commit 56e73461389ee5fe4e000106cedb97641562aa7d Author: Frederic Peters Date: Fri Nov 26 08:51:47 2004 +0000 use attribute xml snippet support in lasso/xml/lib_logout_request.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) commit 78bf7c86d72930b209046973ff7f0a22aea4ae3e Author: Frederic Peters Date: Fri Nov 26 08:50:18 2004 +0000 use attribute snippet support in lasso/xml/lib_federation_termination_notification.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) commit 8b92dbc683ede9a68d58e5a9143d33323d61cba8 Author: Frederic Peters Date: Fri Nov 26 08:48:04 2004 +0000 fixed comment formatting lasso/xml/lib_authentication_statement.c | 2 +- lasso/xml/lib_authn_request_envelope.c | 68 +++++++++++++++++--------------- 2 files changed, 37 insertions(+), 33 deletions(-) commit a3ea3038c471846f935777ca42551f8f28220c53 Author: Frederic Peters Date: Fri Nov 26 08:34:41 2004 +0000 use attribute xml snippet support in lasso/xml/lib_authentication_statement.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit 683e0a6009571709482b9b252207114021922155 Author: Frederic Peters Date: Fri Nov 26 00:29:04 2004 +0000 woke up to remove tutorials from configure.ac configure.ac | 1 - 1 file changed, 1 deletion(-) commit d4de2d3b003c0b627384aebe85fc46491619e4a4 Author: Frederic Peters Date: Thu Nov 25 22:59:25 2004 +0000 indentation leftovers tests/login_tests.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 9c6be9b08149ac79e8d491fb16ebb88c065bc214 Author: Frederic Peters Date: Thu Nov 25 22:58:37 2004 +0000 removed examples/ and docs/tutorial directories (obsolete stuffs) docs/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit cd4f3ea1fc570e01772c3e54a27c34672f2c24ea Author: Frederic Peters Date: Thu Nov 25 22:51:39 2004 +0000 indentation work lasso/export.h | 22 +- lasso/id-ff/federation.c | 22 +- lasso/id-ff/logout.c | 8 +- lasso/id-ff/logout.h | 2 +- lasso/id-ff/name_registration.c | 8 +- lasso/id-ff/profile.c | 2 +- lasso/id-ff/session.h | 2 +- lasso/lasso.h | 16 +- lasso/xml/errors.c | 125 ++++--- lasso/xml/lib_assertion.c | 47 ++- lasso/xml/lib_authentication_statement.c | 30 +- lasso/xml/lib_authentication_statement.h | 2 +- lasso/xml/lib_authn_context.c | 50 +-- lasso/xml/lib_authn_request.c | 104 +++--- lasso/xml/lib_authn_response.c | 52 +-- lasso/xml/lib_authn_response.h | 2 +- .../xml/lib_federation_termination_notification.c | 52 +-- .../xml/lib_federation_termination_notification.h | 4 +- lasso/xml/lib_idp_entries.c | 20 +- lasso/xml/lib_idp_entry.c | 24 +- lasso/xml/lib_idp_entry.h | 2 +- lasso/xml/lib_idp_list.c | 26 +- lasso/xml/lib_logout_request.c | 57 ++- lasso/xml/lib_logout_request.h | 14 +- lasso/xml/lib_logout_response.c | 11 +- lasso/xml/lib_name_identifier_mapping_request.c | 53 ++- lasso/xml/lib_name_identifier_mapping_response.c | 33 +- lasso/xml/lib_name_identifier_mapping_response.h | 8 +- lasso/xml/lib_register_name_identifier_request.c | 63 ++-- lasso/xml/lib_register_name_identifier_response.c | 11 +- lasso/xml/lib_request_authn_context.c | 35 +- lasso/xml/lib_scoping.c | 20 +- lasso/xml/lib_status_response.c | 51 ++- lasso/xml/lib_status_response.h | 2 +- lasso/xml/lib_subject.c | 27 +- lasso/xml/lib_subject.h | 2 +- lasso/xml/saml_advice.c | 32 +- lasso/xml/saml_assertion.c | 72 ++-- lasso/xml/saml_audience_restriction_condition.c | 30 +- lasso/xml/saml_authentication_statement.c | 30 +- lasso/xml/saml_authority_binding.c | 19 +- lasso/xml/saml_conditions.c | 24 +- lasso/xml/saml_name_identifier.c | 24 +- lasso/xml/saml_subject.c | 26 +- lasso/xml/saml_subject_confirmation.c | 28 +- lasso/xml/saml_subject_locality.c | 16 +- lasso/xml/saml_subject_statement_abstract.c | 24 +- lasso/xml/saml_subject_statement_abstract.h | 2 +- lasso/xml/samlp_request.c | 39 +-- lasso/xml/samlp_request_abstract.c | 43 ++- lasso/xml/samlp_response.c | 29 +- lasso/xml/samlp_response_abstract.c | 46 +-- lasso/xml/samlp_status.c | 26 +- lasso/xml/samlp_status_code.c | 20 +- lasso/xml/tools.c | 385 ++++++++++----------- lasso/xml/xml.c | 226 ++++++------ 56 files changed, 1059 insertions(+), 1091 deletions(-) commit 256cca14ce7028c521c9d652f5ef6d2531b81fea Author: Frederic Peters Date: Thu Nov 25 22:26:55 2004 +0000 restore spaces in front of author name lasso/id-ff/name_identifier_mapping.h | 2 +- lasso/id-ff/name_registration.h | 2 +- lasso/id-ff/provider.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) commit c556e1fdcc42bf423c530f0fb647faa435516f00 Author: Frederic Peters Date: Thu Nov 25 22:25:51 2004 +0000 limit line length to 100 characters. HACKING | 2 + lasso/id-ff/defederation.h | 40 +++++++------ lasso/id-ff/federation.h | 12 ++-- lasso/id-ff/identity.h | 6 +- lasso/id-ff/login.c | 23 ++++--- lasso/id-ff/login.h | 70 +++++++++------------- lasso/id-ff/logout.c | 18 +++--- lasso/id-ff/logout.h | 6 +- lasso/id-ff/name_identifier_mapping.h | 54 ++++++++++------- lasso/id-ff/name_registration.h | 46 ++++++++------ lasso/id-ff/profile.h | 43 ++++++------- lasso/id-ff/provider.c | 2 +- lasso/id-ff/provider.h | 13 ++-- lasso/id-ff/server.h | 42 ++++++------- lasso/id-ff/session.c | 8 ++- lasso/id-ff/session.h | 12 ++-- lasso/lasso.c | 8 ++- lasso/xml/lib_assertion.h | 15 +++-- lasso/xml/lib_authentication_statement.c | 3 +- lasso/xml/lib_authentication_statement.h | 18 ++++-- lasso/xml/lib_authn_context.h | 15 +++-- lasso/xml/lib_authn_request.h | 15 +++-- lasso/xml/lib_authn_request_envelope.h | 18 ++++-- lasso/xml/lib_authn_response.h | 17 ++++-- lasso/xml/lib_authn_response_envelope.h | 18 ++++-- .../xml/lib_federation_termination_notification.h | 27 ++++++--- lasso/xml/lib_idp_entries.h | 15 +++-- lasso/xml/lib_idp_entry.h | 15 +++-- lasso/xml/lib_idp_list.h | 12 ++-- lasso/xml/lib_logout_request.h | 17 ++++-- lasso/xml/lib_logout_response.h | 17 ++++-- lasso/xml/lib_name_identifier_mapping_request.h | 24 +++++--- lasso/xml/lib_name_identifier_mapping_response.h | 24 +++++--- lasso/xml/lib_register_name_identifier_request.h | 24 +++++--- lasso/xml/lib_register_name_identifier_response.h | 24 +++++--- lasso/xml/lib_request_authn_context.h | 18 ++++-- lasso/xml/lib_scoping.h | 15 +++-- lasso/xml/lib_status_response.h | 17 ++++-- lasso/xml/lib_subject.h | 12 ++-- lasso/xml/saml_advice.h | 12 ++-- lasso/xml/saml_assertion.h | 15 +++-- lasso/xml/saml_audience_restriction_condition.h | 24 +++++--- lasso/xml/saml_authentication_statement.h | 18 ++++-- lasso/xml/saml_authority_binding.h | 18 ++++-- lasso/xml/saml_condition_abstract.h | 18 ++++-- lasso/xml/saml_conditions.h | 15 +++-- lasso/xml/saml_name_identifier.h | 18 ++++-- lasso/xml/saml_statement_abstract.h | 18 ++++-- lasso/xml/saml_subject.h | 12 ++-- lasso/xml/saml_subject_confirmation.h | 18 ++++-- lasso/xml/saml_subject_locality.h | 18 ++++-- lasso/xml/saml_subject_statement.h | 18 ++++-- lasso/xml/saml_subject_statement_abstract.h | 21 +++++-- lasso/xml/samlp_request.h | 15 +++-- lasso/xml/samlp_request_abstract.h | 18 ++++-- lasso/xml/samlp_response.h | 15 +++-- lasso/xml/samlp_response_abstract.h | 18 ++++-- lasso/xml/samlp_status.h | 12 ++-- lasso/xml/samlp_status_code.h | 15 +++-- lasso/xml/strings.h | 39 ++++++++---- lasso/xml/tools.h | 3 +- lasso/xml/xml.h | 2 +- 62 files changed, 747 insertions(+), 418 deletions(-) commit 5cb4a00762f0368f83a033318193fc8e01dbd71f Author: Frederic Peters Date: Thu Nov 25 21:44:11 2004 +0000 cut down on line length; removed unnecessary cast, implemented 't' snippet handling. lasso/xml/xml.c | 43 ++++++++++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 17 deletions(-) commit 2093557306e93b300339ca29c352aa9cebdb2380 Author: Valery Febvre Date: Thu Nov 25 17:44:38 2004 +0000 added xml complex and simple elements sequences support to xmlsnippet lasso/xml/xml.c | 35 ++++++++++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 5 deletions(-) commit 88da52d408024c06c0b470e7be4d6864aeb8d808 Author: Frederic Peters Date: Thu Nov 25 16:37:53 2004 +0000 don't loop twice on xmlsnippets lasso/xml/xml.c | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) commit bc8741af4ba373ec04c02a25ff8489753ec0466d Author: Frederic Peters Date: Thu Nov 25 15:46:16 2004 +0000 removed some unused #define lasso/xml/strings.h | 4 ---- 1 file changed, 4 deletions(-) commit 4828a48d2f6660f524a92e530a848f413da19b27 Author: Frederic Peters Date: Thu Nov 25 14:31:49 2004 +0000 use new xml attribute support for saml:Assertion lasso/xml/saml_assertion.c | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) commit a7bf65c7d385de2bda49b392fc8ce90978f5c909 Author: Frederic Peters Date: Thu Nov 25 14:24:18 2004 +0000 added xml attribute support to xmlsnippet lasso/xml/xml.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) commit ae5ffe04683d76083578d293a771f0459966932e Author: Frederic Peters Date: Mon Nov 22 16:10:41 2004 +0000 renamed private struct member to private_data (gtk+ does it like that) lasso/id-ff/defederation.c | 10 +++++----- lasso/id-ff/defederation.h | 3 +-- lasso/id-ff/federation.c | 10 +++++----- lasso/id-ff/federation.h | 3 +-- lasso/id-ff/identity.c | 10 +++++----- lasso/id-ff/identity.h | 4 +--- lasso/id-ff/login.c | 10 +++++----- lasso/id-ff/login.h | 3 +-- lasso/id-ff/logout.c | 16 ++++++++-------- lasso/id-ff/logout.h | 2 +- lasso/id-ff/profile.c | 10 +++++----- lasso/id-ff/profile.h | 2 +- lasso/id-ff/provider.c | 40 +++++++++++++++++++++------------------- lasso/id-ff/provider.h | 3 +-- lasso/id-ff/server.c | 10 +++++----- lasso/id-ff/server.h | 2 +- lasso/id-ff/session.c | 20 ++++++++++---------- lasso/id-ff/session.h | 2 +- 18 files changed, 78 insertions(+), 82 deletions(-) commit 9fc01a61c395c3b2c2d09aaa4ca3a622e3886d2c Author: Frederic Peters Date: Mon Nov 22 15:16:31 2004 +0000 fixed emacs mode HACKING | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 60952866896346057cc17aff8fd473d0db70d096 Author: Frederic Peters Date: Mon Nov 22 15:16:01 2004 +0000 Note about lasso-c-mode for Emacs users HACKING | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) commit 476ec0350cf80db0fea3cda9d6a9bca2957d2a8a Author: Frederic Peters Date: Mon Nov 22 13:13:16 2004 +0000 added error checking on query strings; python tests should now pass lasso/id-ff/defederation.c | 3 +-- lasso/id-ff/lecp.c | 8 ++++---- lasso/id-ff/login.c | 15 +++++++++++++-- lasso/id-ff/logout.c | 5 +++-- lasso/id-ff/name_identifier_mapping.c | 4 ++-- lasso/id-ff/name_registration.c | 4 ++-- lasso/xml/lib_authn_request.c | 8 ++++++-- lasso/xml/lib_federation_termination_notification.c | 14 ++++++++++++-- lasso/xml/lib_logout_request.c | 13 +++++++++++-- lasso/xml/lib_register_name_identifier_request.c | 11 +++++++++-- lasso/xml/lib_status_response.c | 8 ++++++-- lasso/xml/samlp_request_abstract.c | 8 +++++++- lasso/xml/samlp_response_abstract.c | 8 +++++++- lasso/xml/xml.c | 16 +++++++++------- lasso/xml/xml.h | 7 ++++--- python/tests/profiles_tests.py | 7 ++++--- 16 files changed, 100 insertions(+), 39 deletions(-) commit c8505e458db838a73b96fa9194c63618323119af Author: Frederic Peters Date: Mon Nov 22 12:00:00 2004 +0000 sync python tests with lasso 0.5 python/tests/errorchecking_tests.py | 2 +- python/tests/profiles_tests.py | 42 +++++++++++++++++++++++++++---------- 2 files changed, 32 insertions(+), 12 deletions(-) commit e71eb823f043977bd456e2d2186c69d4093ff2af Author: Frederic Peters Date: Mon Nov 22 11:41:35 2004 +0000 don't dump empty file path in server dumps lasso/id-ff/server.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) commit 14c859e6ff99be5b7811c2bb0bac79a372084e61 Author: Frederic Peters Date: Mon Nov 22 11:34:32 2004 +0000 merged late 0.5 changes to java/ and csharp/ Makefile.am csharp/Makefile.am | 19 +++++++++++++++++-- java/Makefile.am | 6 +++++- 2 files changed, 22 insertions(+), 3 deletions(-) commit 358d12b50879e2ca2c67eb99fbe92338922562f8 Author: Frederic Peters Date: Thu Nov 18 10:23:01 2004 +0000 unused variables lasso/xml/lib_authn_request.c | 3 --- 1 file changed, 3 deletions(-) commit 3272b81c84c6bad86cc53fd910038e537a01cd9f Author: Frederic Peters Date: Thu Nov 18 10:22:49 2004 +0000 include appropriate file so saml_name_identifier_new is defined lasso/xml/xml.c | 1 + 1 file changed, 1 insertion(+) commit da2c18c5996fecfe092ec057fd82959b55789622 Author: Frederic Peters Date: Thu Nov 18 10:09:58 2004 +0000 removed unnecessary lasso_node_impl_init_from_query lasso/xml/samlp_request_abstract.c | 1 - lasso/xml/samlp_response_abstract.c | 1 - lasso/xml/xml.c | 8 +------- 3 files changed, 1 insertion(+), 9 deletions(-) commit fbdd4139330d0053cec3a98f3180abd18bc7278c Author: Frederic Peters Date: Thu Nov 18 10:09:12 2004 +0000 fixed signed/unsigned mismatch lasso/xml/tools.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 0d17f7335e4cbd3d2604814097808a1a33b681bd Author: Frederic Peters Date: Thu Nov 18 10:00:53 2004 +0000 server is not part of dump lasso/id-ff/profile.c | 13 ------------- 1 file changed, 13 deletions(-) commit 59bdda3549b13cbe97ce49fdb541f8bad006f08e Author: Frederic Peters Date: Wed Nov 17 23:04:57 2004 +0000 use same "xmlsnippets" (name will probably change) to build xml nodes lasso/xml/lib_authentication_statement.c | 28 ++++----- lasso/xml/lib_authn_context.c | 24 ++++---- lasso/xml/lib_authn_request.c | 69 ++++++++-------------- lasso/xml/lib_authn_request_envelope.c | 44 ++++++-------- lasso/xml/lib_authn_response.c | 25 ++++---- lasso/xml/lib_authn_response_envelope.c | 29 ++++----- .../xml/lib_federation_termination_notification.c | 28 ++++----- lasso/xml/lib_idp_entries.c | 19 +++--- lasso/xml/lib_idp_entry.c | 27 ++++----- lasso/xml/lib_idp_list.c | 24 ++++---- lasso/xml/lib_logout_request.c | 33 +++++------ lasso/xml/lib_name_identifier_mapping_request.c | 31 ++++------ lasso/xml/lib_name_identifier_mapping_response.c | 31 ++++------ lasso/xml/lib_register_name_identifier_request.c | 64 ++++++-------------- lasso/xml/lib_request_authn_context.c | 32 ++++------ lasso/xml/lib_scoping.c | 30 +++++----- lasso/xml/lib_status_response.c | 29 ++++----- lasso/xml/lib_subject.c | 26 ++++---- lasso/xml/saml_advice.c | 22 +++---- lasso/xml/saml_assertion.c | 33 ++++------- lasso/xml/saml_audience_restriction_condition.c | 22 +++---- lasso/xml/saml_authentication_statement.c | 24 ++++---- lasso/xml/saml_conditions.c | 23 ++++---- lasso/xml/saml_subject.c | 29 ++++----- lasso/xml/saml_subject_confirmation.c | 23 ++++---- lasso/xml/saml_subject_statement_abstract.c | 22 +++---- lasso/xml/samlp_request.c | 18 +++--- lasso/xml/samlp_response.c | 39 ++++++------ lasso/xml/samlp_status.c | 23 ++++---- lasso/xml/samlp_status_code.c | 22 +++---- lasso/xml/xml.c | 29 ++++++++- lasso/xml/xml.h | 1 + 32 files changed, 423 insertions(+), 500 deletions(-) commit cfc07351978eef632c1b06f06f7246c2860cfc9c Author: Frederic Peters Date: Wed Nov 17 17:18:51 2004 +0000 refactored init_from_xml functions (lasso is now less than 20000 lines) lasso/xml/lib_authentication_statement.c | 16 ++--- lasso/xml/lib_authn_context.c | 26 +++----- lasso/xml/lib_authn_request.c | 78 ++++++++-------------- lasso/xml/lib_authn_request_envelope.c | 52 +++++---------- lasso/xml/lib_authn_response.c | 26 +++----- lasso/xml/lib_authn_response_envelope.c | 30 ++------- .../xml/lib_federation_termination_notification.c | 28 +++----- lasso/xml/lib_idp_entries.c | 17 ++--- lasso/xml/lib_idp_entry.c | 22 ++---- lasso/xml/lib_idp_list.c | 18 ++--- lasso/xml/lib_logout_request.c | 35 +++------- lasso/xml/lib_name_identifier_mapping_request.c | 32 +++------ lasso/xml/lib_name_identifier_mapping_response.c | 32 +++------ lasso/xml/lib_register_name_identifier_request.c | 49 ++++---------- lasso/xml/lib_request_authn_context.c | 29 +++----- lasso/xml/lib_scoping.c | 24 +++---- lasso/xml/lib_status_response.c | 18 ++--- lasso/xml/lib_subject.c | 19 ++---- lasso/xml/saml_advice.c | 16 ++--- lasso/xml/saml_assertion.c | 30 +++------ lasso/xml/saml_audience_restriction_condition.c | 18 ++--- lasso/xml/saml_authentication_statement.c | 23 ++----- lasso/xml/saml_conditions.c | 23 ++----- lasso/xml/saml_subject.c | 24 ++----- lasso/xml/saml_subject_confirmation.c | 21 ++---- lasso/xml/saml_subject_statement_abstract.c | 24 ++----- lasso/xml/samlp_request.c | 18 ++--- lasso/xml/samlp_response.c | 22 ++---- lasso/xml/samlp_status.c | 22 ++---- lasso/xml/samlp_status_code.c | 17 ++--- lasso/xml/xml.c | 27 ++++++++ lasso/xml/xml.h | 10 +++ 32 files changed, 283 insertions(+), 563 deletions(-) commit 5c353c8fe9b439478c333c7ec1604a4d12fcadaa Author: Frederic Peters Date: Tue Nov 16 20:35:06 2004 +0000 more header cleaning lasso/id-ff/federation.h | 5 ----- lasso/id-ff/profile.h | 5 +---- lasso/xml/errors.c | 4 +--- lasso/xml/lib_scoping.c | 3 --- lasso/xml/saml_assertion.c | 2 -- lasso/xml/xml.c | 3 --- 6 files changed, 2 insertions(+), 20 deletions(-) commit e9279c3acb572f49d2299b46bcf951ab1c1d5332 Author: Frederic Peters Date: Tue Nov 16 15:40:43 2004 +0000 cleaning #includes lasso/id-ff/defederation.c | 5 ----- lasso/id-ff/login.c | 7 ++----- lasso/id-ff/login.h | 4 ++-- lasso/id-ff/logout.c | 5 ----- lasso/id-ff/name_identifier_mapping.c | 2 -- lasso/id-ff/name_registration.c | 5 ----- lasso/id-ff/profile.c | 7 +------ lasso/id-ff/provider.c | 1 - lasso/id-ff/server.c | 6 ------ lasso/id-ff/session.c | 3 --- lasso/xml/lib_assertion.h | 2 -- lasso/xml/lib_authentication_statement.c | 1 + lasso/xml/lib_authentication_statement.h | 2 -- lasso/xml/lib_authn_response.h | 1 - lasso/xml/lib_authn_response_envelope.h | 1 - lasso/xml/lib_logout_request.h | 2 +- lasso/xml/lib_name_identifier_mapping_request.h | 2 +- lasso/xml/lib_name_identifier_mapping_response.h | 2 +- lasso/xml/lib_register_name_identifier_request.h | 2 +- lasso/xml/saml_authentication_statement.h | 6 ++---- lasso/xml/saml_conditions.h | 2 +- lasso/xml/samlp_response_abstract.h | 15 --------------- lasso/xml/tools.c | 3 ++- lasso/xml/tools.h | 7 +------ lasso/xml/xml.c | 1 - lasso/xml/xml.h | 11 +++++++++++ 26 files changed, 27 insertions(+), 78 deletions(-) commit cff9d28b650019948594770c97b390bb27a57be4 Author: Frederic Peters Date: Tue Nov 16 14:40:39 2004 +0000 support for samlp:StatusCode in samlp:StatusCode in ... ad vitam. lasso/xml/samlp_status.c | 6 ++---- lasso/xml/samlp_status_code.c | 25 +++++++++++++++++++++++-- lasso/xml/samlp_status_code.h | 3 +++ 3 files changed, 28 insertions(+), 6 deletions(-) commit 2cab29a3c35e67ab2710786ea69180bed3259085 Author: Frederic Peters Date: Mon Nov 15 11:12:24 2004 +0000 tests are ok tests/login_tests.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit a31a08d2286842b1ee56bd750b13d89974fdd47e Author: Frederic Peters Date: Mon Nov 15 10:40:37 2004 +0000 renamed lasso/environs/ to lasso/id-ff/ configure.ac | 2 +- lasso/Makefile.am | 6 +++--- lasso/id-ff/Makefile.am | 6 +++--- lasso/id-ff/defederation.c | 2 +- lasso/id-ff/defederation.h | 2 +- lasso/id-ff/federation.c | 2 +- lasso/id-ff/identity.c | 2 +- lasso/id-ff/identity.h | 2 +- lasso/id-ff/lecp.c | 2 +- lasso/id-ff/lecp.h | 2 +- lasso/id-ff/login.c | 4 ++-- lasso/id-ff/login.h | 2 +- lasso/id-ff/logout.c | 2 +- lasso/id-ff/logout.h | 2 +- lasso/id-ff/name_identifier_mapping.c | 2 +- lasso/id-ff/name_identifier_mapping.h | 2 +- lasso/id-ff/name_registration.c | 2 +- lasso/id-ff/name_registration.h | 2 +- lasso/id-ff/profile.c | 2 +- lasso/id-ff/profile.h | 6 +++--- lasso/id-ff/provider.c | 2 +- lasso/id-ff/server.c | 2 +- lasso/id-ff/server.h | 2 +- lasso/id-ff/session.c | 2 +- lasso/lasso.h | 12 ++++++------ 25 files changed, 37 insertions(+), 37 deletions(-) commit 5f60d4b1d0a915a794c45c6538313a4df960b34a Author: Frederic Peters Date: Mon Nov 15 10:32:39 2004 +0000 new tests tests/random_tests.c | 145 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 145 insertions(+) commit 0afb57c528b1fc12f5529ed80c770dbcbdbb8173 Author: Frederic Peters Date: Mon Nov 15 10:32:06 2004 +0000 updated tests tests/login_tests.c | 28 +++++++++++++++------------- tests/tests.c | 6 +----- 2 files changed, 16 insertions(+), 18 deletions(-) commit 07e1b7c04f5d623fd624640dffe9ce2a02030422 Author: Frederic Peters Date: Tue Nov 9 09:08:47 2004 +0000 return value on init_from_xml; and minor tweaks to code style lasso/id-ff/federation.c | 4 +- lasso/id-ff/identity.c | 4 +- lasso/id-ff/login.c | 7 +- lasso/id-ff/logout.c | 158 +++++++-------- lasso/id-ff/name_registration.c | 22 +- lasso/id-ff/profile.c | 6 +- lasso/id-ff/provider.c | 7 +- lasso/id-ff/server.c | 27 ++- lasso/id-ff/session.c | 3 +- lasso/xml/lib_assertion.c | 6 +- lasso/xml/lib_authentication_statement.c | 8 +- lasso/xml/lib_authn_context.c | 9 +- lasso/xml/lib_authn_request.c | 9 +- lasso/xml/lib_authn_request_envelope.c | 6 +- lasso/xml/lib_authn_response.c | 8 +- lasso/xml/lib_authn_response_envelope.c | 7 +- .../xml/lib_federation_termination_notification.c | 6 +- lasso/xml/lib_idp_entries.c | 7 +- lasso/xml/lib_idp_entry.c | 8 +- lasso/xml/lib_idp_list.c | 7 +- lasso/xml/lib_logout_request.c | 6 +- lasso/xml/lib_name_identifier_mapping_request.c | 7 +- lasso/xml/lib_name_identifier_mapping_response.c | 7 +- lasso/xml/lib_register_name_identifier_request.c | 7 +- lasso/xml/lib_request_authn_context.c | 6 +- lasso/xml/lib_scoping.c | 7 +- lasso/xml/lib_status_response.c | 6 +- lasso/xml/lib_subject.c | 6 +- lasso/xml/saml_advice.c | 7 +- lasso/xml/saml_assertion.c | 8 +- lasso/xml/saml_audience_restriction_condition.c | 6 +- lasso/xml/saml_authentication_statement.c | 7 +- lasso/xml/saml_authority_binding.c | 8 +- lasso/xml/saml_conditions.c | 7 +- lasso/xml/saml_name_identifier.c | 8 +- lasso/xml/saml_subject.c | 6 +- lasso/xml/saml_subject_confirmation.c | 7 +- lasso/xml/saml_subject_locality.c | 6 +- lasso/xml/saml_subject_statement_abstract.c | 7 +- lasso/xml/samlp_request.c | 6 +- lasso/xml/samlp_request_abstract.c | 6 +- lasso/xml/samlp_response.c | 6 +- lasso/xml/samlp_response_abstract.c | 6 +- lasso/xml/samlp_status.c | 7 +- lasso/xml/samlp_status_code.c | 3 +- lasso/xml/tools.c | 225 +++++++++------------ lasso/xml/tools.h | 9 +- lasso/xml/xml.c | 29 ++- lasso/xml/xml.h | 4 +- 49 files changed, 418 insertions(+), 331 deletions(-) commit 9f1fa16723b0a8f34433b010f4669618e128d0cc Author: Frederic Peters Date: Thu Nov 4 09:48:28 2004 +0000 Fixed value of SingleSignOnProtocolProfile metadata : added support of artifact and post. [lasso-orig rev1.2] tests/data/idp1-la/metadata.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 506a1e11b5d003a5033f551304f48aaac36511eb Author: Frederic Peters Date: Wed Nov 3 20:59:08 2004 +0000 move debug functions with other tools functions in tools.c lasso/xml/Makefile.am | 2 -- lasso/xml/debug.c | 90 --------------------------------------------------- lasso/xml/debug.h | 50 ---------------------------- lasso/xml/tools.c | 52 +++++++++++++++++++++++++++-- lasso/xml/tools.h | 29 ++++++++++++----- 5 files changed, 70 insertions(+), 153 deletions(-) commit 6ad55ada1f968691373ef0f7ac2c70ebd2258247 Author: Frederic Peters Date: Wed Nov 3 18:14:59 2004 +0000 we're missing AuthenticationContextStatement support lasso/xml/lib_authn_context.h | 2 ++ 1 file changed, 2 insertions(+) commit a28349c9c74790bb45a602efd712eb14907c925a Author: Frederic Peters Date: Wed Nov 3 14:20:50 2004 +0000 Fixed 2 bugs in lasso_node_add_signature_tmpl() * the transform method "exclusive C14N" was missing in Transforms element * removed useless KeyInfo element in Signatures without X509 data [from lasso-orig revision 1.95] lasso/xml/samlp_request_abstract.c | 5 ++++- lasso/xml/samlp_response_abstract.c | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) commit 16d3d7e4ede6bfb7f0bdfef0d3667f9aed3438a6 Author: Frederic Peters Date: Mon Nov 1 18:23:42 2004 +0000 cleaning files lasso/xml/lib_assertion.c | 2 +- lasso/xml/lib_authentication_statement.c | 2 +- lasso/xml/lib_authn_context.c | 2 +- lasso/xml/lib_authn_response.c | 2 +- .../xml/lib_federation_termination_notification.c | 2 +- lasso/xml/lib_request_authn_context.c | 2 +- lasso/xml/lib_subject.c | 2 +- lasso/xml/saml_assertion.c | 30 +++++++++++----------- lasso/xml/saml_audience_restriction_condition.c | 2 +- lasso/xml/saml_authentication_statement.c | 2 +- lasso/xml/saml_name_identifier.c | 2 +- 11 files changed, 25 insertions(+), 25 deletions(-) commit 34dd2e5653f0ed661de3a6d702e3b6655218c8f5 Author: Frederic Peters Date: Mon Nov 1 18:23:20 2004 +0000 LECP converted to new tree lasso/id-ff/lecp.c | 510 +++++++++++++++----------------- lasso/id-ff/lecp.h | 49 ++- lasso/id-ff/login.c | 2 +- lasso/id-ff/login.h | 4 +- lasso/xml/lib_authn_request_envelope.c | 17 +- lasso/xml/lib_authn_request_envelope.h | 8 +- lasso/xml/lib_authn_response_envelope.c | 4 +- lasso/xml/lib_authn_response_envelope.h | 4 +- 8 files changed, 298 insertions(+), 300 deletions(-) commit 2a5761ccbdd0375677b4621ea85e3eba8d7466e4 Author: Frederic Peters Date: Mon Nov 1 14:55:19 2004 +0000 set RemoteProviderID has attribute instead of text child to be a little more compatible with lasso (still incompatible since they put all the federation in a global while I put them directly in the ). lasso/id-ff/federation.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) commit f12c970ba818824baa4cdb9d731291792a9cb106 Author: Frederic Peters Date: Mon Nov 1 12:07:25 2004 +0000 sign message in name registration lasso/id-ff/name_registration.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit ccf43534c3f5ec2327f4a6036476c8fac58595eb Author: Frederic Peters Date: Mon Nov 1 12:07:03 2004 +0000 fixed previous lasso-head port lasso/id-ff/logout.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 99a8bd76f57fb459441fa8349dfaa86d8137459e Author: Frederic Peters Date: Mon Nov 1 12:03:55 2004 +0000 Corrected lasso_logout_process_response_msg so that it works for proxies. lasso/id-ff/logout.c | 44 ++++++++++++++++++++++++++------------------ 1 file changed, 26 insertions(+), 18 deletions(-) commit ff405448c94555d428301deae8356c5195305324 Author: Frederic Peters Date: Mon Nov 1 11:58:16 2004 +0000 - Added Swig access to attribute role in LassoProvider (needed for proxies). - Renamed TargetNamespace (without uppercase 'S'). swig/Lasso.i | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) commit 4bbe46d337e80a7a94688be60f548a6300925fe8 Author: Frederic Peters Date: Sat Oct 30 08:59:10 2004 +0000 xmlsec for logout requests and responses lasso/id-ff/logout.c | 23 ++------- lasso/xml/lib_logout_request.c | 12 +---- lasso/xml/lib_logout_response.c | 8 +--- lasso/xml/samlp_request_abstract.c | 4 +- lasso/xml/samlp_response_abstract.c | 93 +++++++++++++++++-------------------- lasso/xml/samlp_response_abstract.h | 4 ++ 6 files changed, 56 insertions(+), 88 deletions(-) commit b40dfb2c28c46a259b00a7209bf047c18413c998 Author: Frederic Peters Date: Fri Oct 29 23:06:37 2004 +0000 ds:Signature in (in login) (and the signature is not verified yet) lasso/id-ff/defederation.c | 2 +- lasso/id-ff/lecp.c | 4 +- lasso/id-ff/login.c | 26 ++-- lasso/id-ff/logout.c | 4 +- lasso/id-ff/name_identifier_mapping.c | 4 +- lasso/id-ff/name_registration.c | 4 +- lasso/xml/samlp_request_abstract.c | 88 ++++++------ lasso/xml/samlp_request_abstract.h | 4 + lasso/xml/xml.c | 257 +++++++++------------------------- lasso/xml/xml.h | 5 +- 10 files changed, 136 insertions(+), 262 deletions(-) commit 4bc93e6c0fff5c0da651f0b1f8def5a344e063ec Author: Frederic Peters Date: Fri Oct 29 19:48:03 2004 +0000 cleaning up lasso/xml/lib_authn_response.c | 17 +++++++---------- lasso/xml/samlp_response.c | 1 + lasso/xml/samlp_response.h | 3 --- 3 files changed, 8 insertions(+), 13 deletions(-) commit b087b168153467a0130145efaabd72f3f51dad88 Author: Frederic Peters Date: Fri Oct 29 13:27:37 2004 +0000 read over lasso_login_process_request_msg lasso/id-ff/login.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit a4cd7a5a33c888c1b05fc3d1805c63448f85af80 Author: Frederic Peters Date: Fri Oct 29 13:21:46 2004 +0000 syncing other functions lasso/id-ff/login.c | 80 +++++++++++++++++++++-------------------------------- 1 file changed, 31 insertions(+), 49 deletions(-) commit 7b4f71c992b1f5b81d19ec1c63888c59e0a5566c Author: Frederic Peters Date: Fri Oct 29 12:29:18 2004 +0000 lasso_samlp_response_abstract_fill to initialize responses with id, time and versions. lasso/xml/lib_logout_response.c | 25 +++++++++-------------- lasso/xml/lib_name_identifier_mapping_response.c | 14 ++++--------- lasso/xml/lib_register_name_identifier_response.c | 25 +++++++++-------------- lasso/xml/samlp_response_abstract.c | 12 +++++++++++ lasso/xml/samlp_response_abstract.h | 2 ++ 5 files changed, 38 insertions(+), 40 deletions(-) commit ce951d27d41b50b7dee4f1743102d1804d735bb1 Author: Frederic Peters Date: Fri Oct 29 12:18:25 2004 +0000 synced lasso_login_build_authn_response_msg lasso/id-ff/login.c | 89 +++++++++++++++++++++++++-------------------------- lasso/id-ff/profile.c | 9 ++++-- 2 files changed, 49 insertions(+), 49 deletions(-) commit 73f785f30b3eaaa9c5283ead6996a926113c0a35 Author: Frederic Peters Date: Fri Oct 29 11:16:38 2004 +0000 synced lasso_login_build_authn_request_msg; added has_protocol_profile function. lasso/id-ff/login.c | 75 ++++++++++++++++++++++---------------------------- lasso/id-ff/provider.c | 33 +++++++++++++--------- lasso/id-ff/provider.h | 7 +++-- 3 files changed, 58 insertions(+), 57 deletions(-) commit 6d7eaeccb8c521c3ade3070c25277fd51db6a818 Author: Frederic Peters Date: Fri Oct 29 10:25:59 2004 +0000 synced lasso_login_build_artifact_msg lasso/id-ff/login.c | 57 ++++++++++++++++++++++++++--------------------------- 1 file changed, 28 insertions(+), 29 deletions(-) commit 9692e56af51bd56cfc2c511931442351e6497e17 Author: Frederic Peters Date: Fri Oct 29 10:13:18 2004 +0000 synced (not much to do) lasso_login_accept_sso lasso/id-ff/login.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) commit a35a5aa0effe2df63b61c883a58062749630b06d Author: Frederic Peters Date: Fri Oct 29 10:10:03 2004 +0000 not much on lasso_login_process_response_status_and_assertion lasso/id-ff/login.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit c6b2213471ae1c78184b159a64bc06dc302f54b2 Author: Frederic Peters Date: Fri Oct 29 10:07:52 2004 +0000 cleaned up lasso_login_process_federation lasso/id-ff/login.c | 110 +++++++++++++++++++++++++--------------------------- 1 file changed, 52 insertions(+), 58 deletions(-) commit 1e69be222801d9ee9158e75ec699a90424954b51 Author: Frederic Peters Date: Fri Oct 29 09:52:25 2004 +0000 no space before : lasso/id-ff/login.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit bf0ba91538b206ad4e6c242a9db3426b799061a2 Author: Frederic Peters Date: Fri Oct 29 09:50:50 2004 +0000 sync unknown error value with lasso lasso/id-ff/login.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 9025a06611255634378217108e8419bebb5f5984 Author: Frederic Peters Date: Fri Oct 29 09:49:24 2004 +0000 reformatted lasso_get_pem_file_type lasso/xml/tools.c | 65 ++++++++++++++++++++++++++----------------------------- lasso/xml/tools.h | 16 ++++++-------- 2 files changed, 38 insertions(+), 43 deletions(-) commit e4adb43a260c92de42707c78882fc5d7fac006ae Author: Frederic Peters Date: Fri Oct 29 09:19:34 2004 +0000 apply optimization to build_random_sequence (and use it in build_unique_id) lasso/id-ff/login.c | 6 ++-- lasso/xml/tools.c | 86 +++++++++++++++++++++++------------------------------ lasso/xml/tools.h | 5 ++-- 3 files changed, 41 insertions(+), 56 deletions(-) commit 0537ed9e7fbfc7fa0b5fb418675339b44c89e110 Author: Frederic Peters Date: Fri Oct 29 09:18:00 2004 +0000 change function signature lasso/xml/xml.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 6a1ccdf04cdc30299b3e74605d4607c8082500ff Author: Frederic Peters Date: Thu Oct 28 14:54:38 2004 +0000 style lasso/xml/tools.c | 22 ++++++++++------------ lasso/xml/tools.h | 8 ++++---- 2 files changed, 14 insertions(+), 16 deletions(-) commit 50d998ebcd56c7c9e29b7bd7c8fe07fe3e05222f Author: Frederic Peters Date: Thu Oct 28 14:47:36 2004 +0000 fixed lasso_get_current_time to return UTC time lasso/xml/tools.c | 18 ++++++++++-------- lasso/xml/tools.h | 2 +- 2 files changed, 11 insertions(+), 9 deletions(-) commit 543c07ef61d0b7fbb533ebfd2628581657182f43 Author: Frederic Peters Date: Thu Oct 28 14:37:07 2004 +0000 removed unused lasso_g_ptr_array_index lasso/xml/tools.c | 20 -------------------- lasso/xml/tools.h | 3 --- 2 files changed, 23 deletions(-) commit 66cc2630b4fffa95b4ab07a733a688b61dd68088 Author: Frederic Peters Date: Wed Oct 27 17:02:18 2004 +0000 removal of \n at end of error messages lasso/id-ff/defederation.c | 10 ++++---- lasso/id-ff/federation.c | 4 +-- lasso/id-ff/identity.c | 4 +-- lasso/id-ff/lecp.c | 38 ++++++++++++++--------------- lasso/id-ff/login.c | 12 ++++----- lasso/id-ff/logout.c | 10 ++++---- lasso/id-ff/name_registration.c | 4 +-- lasso/id-ff/profile.c | 6 ++--- lasso/id-ff/provider.c | 4 +-- lasso/id-ff/server.c | 6 ++--- lasso/id-ff/session.c | 4 +-- lasso/xml/errors.c | 54 ++++++++++++++++++++--------------------- lasso/xml/tools.c | 12 ++++----- 13 files changed, 84 insertions(+), 84 deletions(-) commit 3b050c9fa567d5e767d1755b16a0c4f8302476d9 Author: Frederic Peters Date: Wed Oct 27 15:56:10 2004 +0000 removed useless casts lasso/xml/lib_authn_request_envelope.c | 2 +- lasso/xml/lib_idp_entries.c | 2 +- lasso/xml/lib_idp_entry.c | 2 +- lasso/xml/lib_idp_list.c | 2 +- lasso/xml/lib_logout_request.c | 2 +- lasso/xml/lib_logout_response.c | 2 +- lasso/xml/lib_request_authn_context.c | 2 +- lasso/xml/lib_status_response.c | 2 +- lasso/xml/saml_advice.c | 2 +- lasso/xml/saml_authentication_statement.c | 2 +- lasso/xml/saml_authority_binding.c | 2 +- lasso/xml/saml_condition_abstract.c | 2 +- lasso/xml/saml_statement_abstract.c | 2 +- lasso/xml/saml_subject.c | 2 +- lasso/xml/saml_subject_statement_abstract.c | 2 +- 15 files changed, 15 insertions(+), 15 deletions(-) commit 444abc480f7fb73cacae1b0584ba2d6508af99bd Author: Frederic Peters Date: Wed Oct 27 15:49:43 2004 +0000 indented lasso.c lasso/lasso.c | 185 +++++++++++++++++++++++++++------------------------------- 1 file changed, 87 insertions(+), 98 deletions(-) commit 6d6fbbeaffdb1d0d9e6a9b37cf0f5a2d7a98bbd5 Author: Frederic Peters Date: Wed Oct 27 15:41:28 2004 +0000 cleaning up lasso/id-ff/login.c | 12 ++++++------ lasso/id-ff/profile.c | 2 +- lasso/xml/lib_authentication_statement.c | 2 +- lasso/xml/saml_assertion.c | 2 +- lasso/xml/saml_name_identifier.c | 2 +- lasso/xml/saml_subject.c | 6 ++---- lasso/xml/saml_subject_statement.c | 2 +- lasso/xml/samlp_request.c | 2 +- lasso/xml/samlp_request.h | 10 ++++------ lasso/xml/samlp_request_abstract.c | 2 +- lasso/xml/samlp_response.c | 2 +- lasso/xml/samlp_response_abstract.c | 2 +- 12 files changed, 21 insertions(+), 25 deletions(-) commit 060ad25dd1826c855245fb465413eaa5b781165f Author: Frederic Peters Date: Wed Oct 27 15:41:05 2004 +0000 removed unused code lasso/xml/xml.c | 269 ++++++++++++++++++-------------------------------------- lasso/xml/xml.h | 72 +++++---------- 2 files changed, 108 insertions(+), 233 deletions(-) commit 38a58010f539f66514d8516734348c2fa7e9cfe2 Author: Frederic Peters Date: Wed Oct 27 11:34:41 2004 +0000 [2004-10-26 19:36 rchantereau] configure.ac: Some configuration variables and configure options in order to compile php. configure.ac | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) commit f13772d62deb599c1c475f5b842ac76bdefc7e2f Author: Frederic Peters Date: Wed Oct 27 09:49:13 2004 +0000 Done with the move to structures and the removal of protocols/ (lasso branched on October 2nd; occasional merges since then). - Compatible with current souk test suites. - Missing memory management for everything in xml/ - Missing xmlsec support for SOAP messages. configure.ac | 2 - lasso/Makefile.am | 4 +- lasso/id-ff/Makefile.am | 4 + lasso/id-ff/defederation.c | 907 +++---- lasso/id-ff/defederation.h | 19 +- lasso/id-ff/federation.c | 306 +++ lasso/id-ff/federation.h | 89 + lasso/id-ff/identity.c | 539 ++--- lasso/id-ff/identity.h | 52 +- lasso/id-ff/lecp.c | 81 +- lasso/id-ff/lecp.h | 20 +- lasso/id-ff/login.c | 2482 +++++++++----------- lasso/id-ff/login.h | 64 +- lasso/id-ff/logout.c | 1607 ++++++------- lasso/id-ff/logout.h | 37 +- lasso/id-ff/name_identifier_mapping.c | 875 +++---- lasso/id-ff/name_identifier_mapping.h | 24 +- lasso/id-ff/name_registration.c | 1325 +++++------ lasso/id-ff/name_registration.h | 31 +- lasso/id-ff/profile.c | 745 +++--- lasso/id-ff/profile.h | 90 +- lasso/id-ff/provider.c | 517 ++++ lasso/id-ff/provider.h | 111 + lasso/id-ff/server.c | 704 ++---- lasso/id-ff/server.h | 49 +- lasso/id-ff/session.c | 559 ++--- lasso/id-ff/session.h | 45 +- lasso/lasso.c | 4 +- lasso/lasso.h | 12 +- lasso/xml/Makefile.am | 19 +- lasso/xml/errors.h | 4 + lasso/xml/lib.h | 60 - lasso/xml/lib_assertion.c | 163 +- lasso/xml/lib_assertion.h | 14 +- lasso/xml/lib_authentication_statement.c | 238 +- lasso/xml/lib_authentication_statement.h | 32 +- lasso/xml/lib_authn_context.c | 117 +- lasso/xml/lib_authn_context.h | 15 +- lasso/xml/lib_authn_request.c | 408 ++-- lasso/xml/lib_authn_request.h | 63 +- lasso/xml/lib_authn_request_envelope.c | 219 +- lasso/xml/lib_authn_request_envelope.h | 42 +- lasso/xml/lib_authn_response.c | 147 +- lasso/xml/lib_authn_response.h | 27 +- lasso/xml/lib_authn_response_envelope.c | 150 +- lasso/xml/lib_authn_response_envelope.h | 26 +- .../xml/lib_federation_termination_notification.c | 237 +- .../xml/lib_federation_termination_notification.h | 26 +- lasso/xml/lib_idp_entries.c | 110 +- lasso/xml/lib_idp_entries.h | 11 +- lasso/xml/lib_idp_entry.c | 157 +- lasso/xml/lib_idp_entry.h | 21 +- lasso/xml/lib_idp_list.c | 133 +- lasso/xml/lib_idp_list.h | 16 +- lasso/xml/lib_idp_provided_name_identifier.c | 87 - lasso/xml/lib_idp_provided_name_identifier.h | 61 - lasso/xml/lib_logout_request.c | 271 ++- lasso/xml/lib_logout_request.h | 32 +- lasso/xml/lib_logout_response.c | 114 +- lasso/xml/lib_logout_response.h | 11 +- lasso/xml/lib_name_identifier_mapping_request.c | 191 +- lasso/xml/lib_name_identifier_mapping_request.h | 32 +- lasso/xml/lib_name_identifier_mapping_response.c | 177 +- lasso/xml/lib_name_identifier_mapping_response.h | 27 +- lasso/xml/lib_old_provided_name_identifier.c | 88 - lasso/xml/lib_old_provided_name_identifier.h | 61 - lasso/xml/lib_register_name_identifier_request.c | 355 ++- lasso/xml/lib_register_name_identifier_request.h | 43 +- lasso/xml/lib_register_name_identifier_response.c | 106 +- lasso/xml/lib_register_name_identifier_response.h | 10 +- lasso/xml/lib_request_authn_context.c | 145 +- lasso/xml/lib_request_authn_context.h | 20 +- lasso/xml/lib_scoping.c | 142 +- lasso/xml/lib_scoping.h | 17 +- lasso/xml/lib_sp_provided_name_identifier.c | 88 - lasso/xml/lib_sp_provided_name_identifier.h | 61 - lasso/xml/lib_status_response.c | 185 +- lasso/xml/lib_status_response.h | 21 +- lasso/xml/lib_subject.c | 163 +- lasso/xml/lib_subject.h | 15 +- lasso/xml/saml.h | 58 - lasso/xml/saml_advice.c | 118 +- lasso/xml/saml_advice.h | 16 +- lasso/xml/saml_assertion.c | 354 ++- lasso/xml/saml_assertion.h | 65 +- lasso/xml/saml_audience_restriction_condition.c | 116 +- lasso/xml/saml_audience_restriction_condition.h | 14 +- lasso/xml/saml_authentication_statement.c | 153 +- lasso/xml/saml_authentication_statement.h | 24 +- lasso/xml/saml_authority_binding.c | 117 +- lasso/xml/saml_authority_binding.h | 22 +- lasso/xml/saml_condition_abstract.c | 83 +- lasso/xml/saml_condition_abstract.h | 8 +- lasso/xml/saml_conditions.c | 180 +- lasso/xml/saml_conditions.h | 28 +- lasso/xml/saml_name_identifier.c | 160 +- lasso/xml/saml_name_identifier.h | 18 +- lasso/xml/saml_statement_abstract.c | 82 +- lasso/xml/saml_statement_abstract.h | 8 +- lasso/xml/saml_subject.c | 121 +- lasso/xml/saml_subject.h | 13 +- lasso/xml/saml_subject_confirmation.c | 119 +- lasso/xml/saml_subject_confirmation.h | 19 +- lasso/xml/saml_subject_locality.c | 99 +- lasso/xml/saml_subject_locality.h | 16 +- lasso/xml/saml_subject_statement.c | 101 + lasso/xml/saml_subject_statement.h | 60 + lasso/xml/saml_subject_statement_abstract.c | 119 +- lasso/xml/saml_subject_statement_abstract.h | 13 +- lasso/xml/samlp_request.c | 103 +- lasso/xml/samlp_request.h | 7 +- lasso/xml/samlp_request_abstract.c | 267 ++- lasso/xml/samlp_request_abstract.h | 47 +- lasso/xml/samlp_response.c | 152 +- lasso/xml/samlp_response.h | 19 +- lasso/xml/samlp_response_abstract.c | 297 +-- lasso/xml/samlp_response_abstract.h | 40 +- lasso/xml/samlp_status.c | 129 +- lasso/xml/samlp_status.h | 23 +- lasso/xml/samlp_status_code.c | 89 +- lasso/xml/samlp_status_code.h | 11 +- lasso/xml/soap-env_body.c | 91 - lasso/xml/soap-env_body.h | 64 - lasso/xml/soap-env_envelope.c | 91 - lasso/xml/soap-env_envelope.h | 65 - lasso/xml/strings.h | 176 +- lasso/xml/tools.c | 572 ++--- lasso/xml/tools.h | 34 +- lasso/xml/xml.c | 1562 +++--------- lasso/xml/xml.h | 166 +- swig/Lasso.i | 728 +++--- tests/Makefile.am | 4 +- tests/login_tests.c | 37 +- tests/tests.c | 4 + 134 files changed, 10849 insertions(+), 12515 deletions(-) commit c411dbc31f0938f513c4fb4ccc3b12a7b4ce6617 Author: Emmanuel Raviart Date: Sun Oct 3 16:03:11 2004 +0000 Removed wrong test and changed a comment. lasso/id-ff/name_registration.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit 4dc6a63c781f4fc9b86fa37c328306a5cb184f0c Author: Emmanuel Raviart Date: Sun Oct 3 10:40:52 2004 +0000 Added RegisterNameIdentifier request and response to SWIG binding. swig/Lasso.i | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) commit 6f7b4264d9fa80aba1ea124156516a38d8ec0da1 Author: Emmanuel Raviart Date: Sun Oct 3 08:05:16 2004 +0000 Corrected error in exception generation for non-Python bindings. swig/Lasso.i | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit eee077c0e2f6e8a05803afb48ad5af4c2d01cde7 Author: Emmanuel Raviart Date: Sat Oct 2 22:23:57 2004 +0000 Removed SWIG_Warning which doesn't exist in Swig. Updated Python tests. python/tests/profiles_tests.py | 15 +++++++++------ swig/Lasso.i | 7 +------ 2 files changed, 10 insertions(+), 12 deletions(-) commit fccd418c36034c39aa8d1890e49bc161a3c65777 Author: Emmanuel Raviart Date: Sat Oct 2 21:49:38 2004 +0000 Integrated scalp_is_liberty_query into Lasso. Consequently, LASSO_PROFILE_ERROR_INVALID_QUERY is now a negative error code and a critical message is displayed when this error occurs. lasso/id-ff/defederation.c | 6 ++-- lasso/id-ff/login.c | 1 + lasso/id-ff/logout.c | 11 ++++--- lasso/id-ff/name_identifier_mapping.c | 1 + lasso/id-ff/name_registration.c | 1 + lasso/id-ff/profile.c | 33 ++++++++++++++++++++- lasso/id-ff/profile.h | 7 ++++- lasso/xml/errors.h | 2 +- swig/Lasso.i | 56 ++++++++++++++++++----------------- 9 files changed, 79 insertions(+), 39 deletions(-) commit ca8633b291b5e5de07db23c35e1ff82fc4576325 Author: Emmanuel Raviart Date: Sat Oct 2 19:59:56 2004 +0000 Removed function lasso_login_process_without_authn_request_msg. It has been replaced with: lasso_login_init_self_addressed_authn_request(remote_providerID); /* ...Set protocolProfile, isPassive, consent, relayState here... */ lasso_login_process_authn_request_message(NULL, lassoHttpMethodSelfAddressed); This change was needed because there was no way to set isPassive, consent, etc, before. Standardized some error codes and messages. lasso/id-ff/login.c | 236 ++++++++++++++++++++++++-------------------------- lasso/id-ff/login.h | 7 +- lasso/id-ff/profile.h | 3 +- lasso/xml/errors.c | 8 +- lasso/xml/errors.h | 1 + swig/Lasso.i | 19 ++-- 6 files changed, 135 insertions(+), 139 deletions(-) commit 7383076a6c5c24b87612ff35ddd35c4d7e5833ef Author: Emmanuel Raviart Date: Sat Oct 2 13:54:48 2004 +0000 Homogeneized error handling for HTTP methods in requests. Reworked error codes, so that positive and negative numbers don't overlap: It will be easier to change the sign of an error code without break API. Realigned error codes definitions. lasso/id-ff/defederation.c | 14 ++++---- lasso/id-ff/login.c | 26 +++++++------- lasso/id-ff/logout.c | 8 ++--- lasso/id-ff/name_identifier_mapping.c | 8 ++--- lasso/id-ff/name_registration.c | 8 ++--- lasso/xml/errors.c | 8 ++++- lasso/xml/errors.h | 63 ++++++++++++++++---------------- swig/Lasso.i | 67 ++++++++++++++++++----------------- 8 files changed, 106 insertions(+), 96 deletions(-) commit d67411932f4642b32d2c96addb3ecb5bdcc37dae Author: Emmanuel Raviart Date: Sat Oct 2 08:59:54 2004 +0000 Removed consent from fake authnRequest created by lasso_login_process_without_authn_request_msg: Since the nameIDPolicy is "any", must_ask_for_consent must return true and if the user doesn't give its consent, a one-time nameidentifier should be used. lasso/id-ff/login.c | 2 -- 1 file changed, 2 deletions(-) commit daec1afaa0d5c8bc0c1099eee1a4122314d4fee2 Author: Emmanuel Raviart Date: Sat Oct 2 08:28:17 2004 +0000 In lasso_login_process_without_authn_request_msg, set the isPassive flag of the fake authnRequest to false, so that must_authenticate() returns true. lasso/id-ff/login.c | 1 + 1 file changed, 1 insertion(+) commit 751b49c858f9ecd919dafc357200d5727a49c4c3 Author: Emmanuel Raviart Date: Sat Oct 2 08:06:10 2004 +0000 Corrected handling of NULL remote_providerID in lasso_login_process_without_authn_request_msg. lasso/id-ff/login.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) commit 5e49ab8f717e338c5719bc5803a8e5a306f710b0 Author: Valery Febvre Date: Sat Oct 2 01:17:03 2004 +0000 Fixed a bug in lasso_login_process_without_authn_request_msg() and lasso_login_build_assertion() When Identity provider initiates SSO, response assertion MUST not include an InResponseTo attribute. lasso/id-ff/login.c | 44 ++++++++++++++++++++++++++++++++------------ 1 file changed, 32 insertions(+), 12 deletions(-) commit 00d30690a9ccf9f94d529a2a1ab1caf5364147c0 Author: Valery Febvre Date: Sat Oct 2 00:57:23 2004 +0000 Fixed a bug in lasso_query_to_dict() function It occurred when a parameter didn't have a value. lasso/xml/tools.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit bc294467735f6f23b4c15290f27c3ba37065c371 Author: Emmanuel Raviart Date: Fri Oct 1 23:28:59 2004 +0000 Added login method processWithoutAuthnRequestMsg to SWIG bindings. swig/Lasso.i | 6 ++++++ 1 file changed, 6 insertions(+) commit 243ef75f40b84ec59f3900a6e62e65488d9d9829 Author: Valery Febvre Date: Fri Oct 1 23:27:20 2004 +0000 Added documentation lasso/id-ff/login.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) commit 3c58ea4fefe6c2afc06fcf10a711ec95369bfd8a Author: Valery Febvre Date: Fri Oct 1 22:52:42 2004 +0000 Modified lasso_login_process_without_authn_request_msg() The 'remote_providerID' param is now optional (can be NULL). lasso/id-ff/login.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) commit 760fb469e06f2da97e16279e0bb277f12fb686bc Author: Valery Febvre Date: Fri Oct 1 17:43:14 2004 +0000 Added methods comments Fixed a bug in lasso_login_accept_sso() lasso/id-ff/login.c | 72 +++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 53 insertions(+), 19 deletions(-) commit 9b70f84829c47beff57d9779e36b8358ac3d1c66 Author: Emmanuel Raviart Date: Fri Oct 1 16:26:49 2004 +0000 Removed federation test, because for one-time single sign-on, there is no federation. lasso/id-ff/login.c | 2 -- 1 file changed, 2 deletions(-) commit 487a741222e6a6f1db5ee14a946e0bf089b91ce3 Author: Emmanuel Raviart Date: Fri Oct 1 15:41:39 2004 +0000 Correction in consent handling for login when testing IsPassive. lasso/id-ff/login.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit ea852151af788860d0c39db668eed184d947bb1e Author: Valery Febvre Date: Fri Oct 1 14:15:01 2004 +0000 Fixed a bug in lasso_login_ask_for_consent() Some cases had been forgotten. lasso/id-ff/login.c | 152 ++++++++++++++++++++++++++++++++++------------------ 1 file changed, 100 insertions(+), 52 deletions(-) commit 4d5c37e54dbbc730042ea3d249dec7ed8d74c4e0 Author: Emmanuel Raviart Date: Fri Oct 1 13:06:37 2004 +0000 Corrected #define syntax in SWIG. swig/Lasso.i | 50 +++++++++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 25 deletions(-) commit 368e715e2419aed1cf4f802d9e835566d5b22c6d Author: Emmanuel Raviart Date: Fri Oct 1 12:59:50 2004 +0000 Added consent constants in SWIG. Use #define instead of xmlChar for string constants in SWIG. swig/Lasso.i | 70 +++++++++++++++++++++++++++++++++--------------------------- 1 file changed, 38 insertions(+), 32 deletions(-) commit 7374c45bb72745deb8ccb5b04fb0b3e6f5477aa5 Author: Valery Febvre Date: Fri Oct 1 12:13:31 2004 +0000 Fixed a bug in instance_init() methods of LassoIdentity and LassoSession classes is_dirty flag was initialized to TRUE instead of FALSE. lasso/id-ff/identity.c | 2 +- lasso/id-ff/session.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit bf915b0220ecde864eb0ca4bf1f8943bece89676 Author: Emmanuel Raviart Date: Fri Oct 1 05:59:41 2004 +0000 camelCased argument name in SWIG. swig/Lasso.i | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit ff9007685f8fa9e7d5027caf60a3f7d2a9f6f95b Author: Emmanuel Raviart Date: Fri Oct 1 05:54:30 2004 +0000 English correction. lasso/xml/tools.c | 2 +- lasso/xml/xml.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 3c3523191333cf466436aba2bb6eab08c3be858c Author: Emmanuel Raviart Date: Fri Oct 1 05:50:03 2004 +0000 Synchronized SWIG error codes with those in errors.h (Shame on the developper who forgot to update them in Lasso.i :-) lasso/xml/errors.h | 4 +++- swig/Lasso.i | 38 +++++++++++++++++++++++++++++++------- 2 files changed, 34 insertions(+), 8 deletions(-) commit 98006788da122a7ab6d41999f27edf14fb8886f7 Author: Valery Febvre Date: Fri Oct 1 00:55:57 2004 +0000 Fixed a bug in lasso_query_verify_signature() It was impossible to verify queries signed with the DSA-SHA1 algorithm. lasso/xml/tools.c | 53 ++++++++++++++++++++++++++++++++++------------------- lasso/xml/tools.h | 6 +++--- 2 files changed, 37 insertions(+), 22 deletions(-) commit fa98eee04e53da96df4e4891f07002b6681da119 Author: Valery Febvre Date: Fri Oct 1 00:48:59 2004 +0000 Added one error code lasso/xml/errors.c | 12 +++++++----- lasso/xml/errors.h | 1 + 2 files changed, 8 insertions(+), 5 deletions(-) commit 892faf269395f32035a293554ae6524ad7dd8ad0 Author: Emmanuel Raviart Date: Thu Sep 30 20:55:22 2004 +0000 Updated login C tests to new API for obtaining consent. tests/login_tests.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit f98bf49c663ff460c5b9975f6f55f902ae1ceb8b Author: Emmanuel Raviart Date: Thu Sep 30 20:45:45 2004 +0000 Added mustAskForConsent to login in SWIG. camelCased a parameter name. swig/Lasso.i | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) commit 06e5dd5cf70fde4775a247875f8f5ff7bcc7a1ca Author: Valery Febvre Date: Thu Sep 30 17:12:23 2004 +0000 Added a param 'is_consent_obtained' in method: lasso_login_build_artifact_msg(), lasso_login_build_authn_response_msg(), lasso_login_process_federation(), lasso_lecp_build_authn_response_envelope_msg() AuthnRequest message accepts now all possible values for the NameIDPolicy: none, onetime, federated, any Added lasso_login_must_ask_for_consent() method This method must be called after lasso_login_process_authn_request_msg() Added lasso_login_process_without_authn_request_msg() method This method is useful to initiate SSO from IDP. Lasso.i was updated according to the changes. lasso/id-ff/lecp.c | 4 +- lasso/id-ff/lecp.h | 1 + lasso/id-ff/login.c | 361 ++++++++++++++++++++++++++++++++++++++-------------- lasso/id-ff/login.h | 10 ++ swig/Lasso.i | 11 +- 5 files changed, 288 insertions(+), 99 deletions(-) commit e3a34cffaeb557ea600fd07fe80c2de1c770d3bd Author: Nicolas Clapies Date: Thu Sep 30 16:55:30 2004 +0000 Updated registation profile : now it supports multiple registration from SP and IDP. This profile has been tested only with SOAP method in souk. Test must be added with Redirect method. lasso/id-ff/name_registration.c | 133 +++++++++++++++++++++++----------------- 1 file changed, 78 insertions(+), 55 deletions(-) commit e2de175d223a3febd6e43d61fb28c5455b676d89 Author: Nicolas Clapies Date: Thu Sep 30 16:53:06 2004 +0000 Fixed a critical segfault bug when parsing an invalid SOAP message in private method lasso_{protocol_type}_new_from_soap(). .../Attic/protocols/federation_termination_notification.c | 15 ++++++++------- lasso/Attic/protocols/logout_request.c | 9 +++++---- lasso/Attic/protocols/logout_response.c | 11 ++--------- lasso/Attic/protocols/name_identifier_mapping_request.c | 5 +---- lasso/Attic/protocols/name_identifier_mapping_response.c | 3 --- lasso/Attic/protocols/register_name_identifier_request.c | 9 +++++---- 6 files changed, 21 insertions(+), 31 deletions(-) commit fd0c21430da91a78e6d6e1000f0e5b47b4b3f172 Author: Emmanuel Raviart Date: Thu Sep 30 16:47:27 2004 +0000 Added directory for sample SourceID messages. tests/sourceid-2.0beta/login-response.xml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) commit fe36575dead554531f014ec5ad7c6fcf052505a3 Author: Nicolas Clapies Date: Thu Sep 30 16:30:52 2004 +0000 Fixed critical bug when parsing an invalid SOAP message in private method lasso_name_identifier_mapping_response_new_from_soap() lasso/Attic/protocols/name_identifier_mapping_response.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit 1f930f1ffbad3a6f2806c065451f42ec85fc5d29 Author: Valery Febvre Date: Thu Sep 30 16:26:39 2004 +0000 Added 3 error codes lasso/xml/errors.c | 3 +++ lasso/xml/errors.h | 11 +++++++++++ 2 files changed, 14 insertions(+) commit 189ea4080814e0142a52d6f109b20a4c683e1f21 Author: Valery Febvre Date: Thu Sep 30 16:24:57 2004 +0000 Added 3 lassoLibConsent lasso/xml/strings.h | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) commit 9ee1a5acbf5533ef3dc1227b7e42cae742ad2fac Author: Nicolas Clapies Date: Thu Sep 30 13:43:07 2004 +0000 Fixed critical bug when parsing an invalid SOAP message in private method lasso_name_identifier_mapping_new_from_soap() lasso/Attic/protocols/name_identifier_mapping_request.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit 9db931fc1a70185625131ec248709169d01d45f4 Author: Valery Febvre Date: Thu Sep 30 13:42:58 2004 +0000 Added a parameter 'content' (optional) in lasso_federation_build_local_nameIdentifier() and lasso_federation_build_remote_nameIdentifier() methods lasso/Attic/protocols/federation.c | 56 +++++++++++++++++++++++--------------- lasso/Attic/protocols/federation.h | 6 ++-- 2 files changed, 38 insertions(+), 24 deletions(-) commit f5ec7237726f81a3254d11c0ab0cf8310e834b8d Author: Valery Febvre Date: Thu Sep 30 13:32:07 2004 +0000 Added lasso_federation_build_remote_nameIdentifier() and lasso_federation_build_local_nameIdentifier() methods lasso/Attic/protocols/federation.c | 38 ++++++++++++++++++++++++++++++++++++++ lasso/Attic/protocols/federation.h | 8 ++++++++ 2 files changed, 46 insertions(+) commit c8a821afef28d840ea54fca549c01b437101ae34 Author: Emmanuel Raviart Date: Wed Sep 29 22:08:53 2004 +0000 Updates Python tests to new Lasso API. python/tests/errorchecking_tests.py | 7 +++---- python/tests/profiles_tests.py | 40 +++++++++++++++---------------------- 2 files changed, 19 insertions(+), 28 deletions(-) commit 54ec0c541d41b7f1512bd252fa0b5dfffdb86a04 Author: Emmanuel Raviart Date: Wed Sep 29 21:46:36 2004 +0000 Updated C tests to lasso_server_new new API. tests/login_tests.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) commit 0181981d03845c3bd9de5febd081b2845f2e22d4 Author: Nicolas Clapies Date: Wed Sep 29 16:24:55 2004 +0000 Added better support for name registration. There is still problem with multiple registration needed to be fixed lasso/id-ff/name_registration.c | 114 +++++++++++++++++++++++++++------------- lasso/id-ff/name_registration.h | 11 ++-- swig/Lasso.i | 8 +++ 3 files changed, 93 insertions(+), 40 deletions(-) commit 773d6d2001e4e1baca71fad655309cc4137c5ffd Author: Valery Febvre Date: Wed Sep 29 16:16:59 2004 +0000 Replaced 2 lassoLibMinorVersion by 2 lassoSamlMinorVersion and 2 lassoLibMajorVersion by 2 lassoSamlMajorVersion lasso/Attic/protocols/request.c | 4 ++-- lasso/Attic/protocols/response.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) commit cee19546106b5f981ca9fb21caf4a004466dc90b Author: Nicolas Clapies Date: Tue Sep 28 08:21:03 2004 +0000 Added comments in lasso_register_name_identifier_response_new() lasso/Attic/protocols/register_name_identifier_response.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) commit aa0504dfce82da97bcad215b1274cf896e659314 Author: Nicolas Clapies Date: Tue Sep 28 08:20:16 2004 +0000 Added support of RelayState. Now if the requester wants to get back th RelayState, it has to acces to profile->msg_relayState lasso/id-ff/name_registration.c | 6 ++++++ 1 file changed, 6 insertions(+) commit b7717f9dd893533ea9237101bcbfa36f106ef108 Author: Valery Febvre Date: Mon Sep 27 21:04:49 2004 +0000 Added an error code: LASSO_DS_ERROR_CA_CERT_CHAIN_LOAD_FAILED lasso/xml/errors.h | 1 + 1 file changed, 1 insertion(+) commit 7af4fcb538a927b0a0f47555b9b77f251b25649d Author: Valery Febvre Date: Mon Sep 27 16:47:24 2004 +0000 Improved lasso_node_verify_signature() method The 'public_key_file' param can now be either a public_key or a certificate lasso/xml/xml.c | 41 +++++++++++++++++++++++++---------------- 1 file changed, 25 insertions(+), 16 deletions(-) commit 2aaa3cfcafaace4a9003f2b40f15558f1050f229 Author: Nicolas Clapies Date: Mon Sep 27 16:45:40 2004 +0000 Added dump support in name registration. Fixed a bug in lasso_process_request_msg() : removed a free of node lasso/id-ff/name_registration.c | 118 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 111 insertions(+), 7 deletions(-) commit 3bbc625ec858a578d20ff7130fdf231d9211626e Author: Valery Febvre Date: Mon Sep 27 15:01:43 2004 +0000 Fixed bug #303 lasso/id-ff/session.c | 10 +++++----- lasso/id-ff/session.h | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) commit d971c38ca13038798df8d387b0ead4144cb5ff0e Author: Valery Febvre Date: Mon Sep 27 14:52:34 2004 +0000 lasso_profile_set_session_from_dump() and lasso_profile_set_identity_from_dump() methods log now a critical message if dumps are NULL. lasso/id-ff/profile.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) commit 4ab34ba6b2ca1ed04284daddf8e5bea8c49af4e1 Author: Valery Febvre Date: Mon Sep 27 14:29:54 2004 +0000 Renamed 'ca_certificate' property of LassoProvider object to 'ca_cert_chain' Added a new property 'secret_key' in LassoServer object Changed prototype of lasso_server_new() method BEFORE: LassoServer * lasso_server_new(gchar *metadata, gchar *public_key, gchar *private_key, gchar *certificate, lassoSignatureMethod signature_method) AFTER: LassoServer * lasso_server_new(const gchar *metadata, const gchar *private_key, const gchar *secret_key, const gchar *certificate) public_key param was removed because it was useless. secret_key was added to decrypt private_key signature_method was removed (default value is lassoSignatureMethodRsaSha1). 2 new methods was added to access 'signature_method' property of LassoServer: lasso_server_get_signature_method() and lasso_server_set_signature_method() Update Lasso.i lasso/Attic/protocols/provider.c | 32 ++++++------- lasso/Attic/protocols/provider.h | 14 +++--- lasso/id-ff/login.c | 9 ++-- lasso/id-ff/logout.c | 5 ++- lasso/id-ff/server.c | 97 ++++++++++++++++++++++++++++------------ lasso/id-ff/server.h | 51 +++++++++++---------- swig/Lasso.i | 7 ++- 7 files changed, 131 insertions(+), 84 deletions(-) commit 7f231e253bcc321ff6a4787082b8ce47b9dfb694 Author: Nicolas Clapies Date: Mon Sep 27 14:04:50 2004 +0000 Fixed bug #294 : memory leak on name identifiers local variables in lasso_name_registration_init_request(). lasso/id-ff/name_registration.c | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) commit f4655423883a2ebddbff491581d4085507607049 Author: Valery Febvre Date: Mon Sep 27 13:53:13 2004 +0000 Removed lasso_node_verify_x509_signature() method. This method isn't useful anymore. lasso_node_verify_signature() can now verify signatures with or without X509Data. Added a new param "ca_cert_chain_file" in lasso_node_verify_signature() lasso/xml/xml.c | 196 +++++++++++++------------------------------------------- lasso/xml/xml.h | 11 ++-- 2 files changed, 47 insertions(+), 160 deletions(-) commit f59ffa88ac4596df962757a9df1ed5b22bc6b1df Author: Nicolas Clapies Date: Mon Sep 27 13:49:12 2004 +0000 Fixed bug #293 : memory leak on content local variable in lasso_logout_init_request(). lasso/id-ff/logout.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) commit 75ae196125a102836645d5d82425da866e87c6f9 Author: Valery Febvre Date: Mon Sep 27 13:42:01 2004 +0000 Added lasso_load_certs_from_pem_certs_chain_file() function lasso/xml/tools.c | 91 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- lasso/xml/tools.h | 44 ++++++++++++++------------- 2 files changed, 113 insertions(+), 22 deletions(-) commit b3c622637861ab602c77cece5b94015b67ab36f9 Author: Nicolas Clapies Date: Mon Sep 27 13:39:52 2004 +0000 Fixed bug #292 : memory leak on content attribute. lasso/id-ff/defederation.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) commit 208fc49f1bd4a372ed3b2bee3f2a46d49d6970c7 Author: Nicolas Clapies Date: Sat Sep 25 15:02:13 2004 +0000 - Removed lassoLibProtocolProfileNimSpSoap macro. lasso/xml/strings.h | 1 - 1 file changed, 1 deletion(-) commit 0079169204ce2ccd61c65d02c4cb5354ffbbf669 Author: Nicolas Clapies Date: Sat Sep 25 15:01:06 2004 +0000 - Removed odd private method : lasso_name_identifier_mapping_response_new_from_query is not useful, Liberty Alliance does't implement Redirect method in name identifier mapping profile. - Added lasso_name_identifier_mapping_response_set_status_code_value() to define status code of the response. .../protocols/name_identifier_mapping_response.c | 177 +++++++++------------ .../protocols/name_identifier_mapping_response.h | 6 +- 2 files changed, 82 insertions(+), 101 deletions(-) commit b9cec38e05a5f8dd4057bbd4fa8bfdaa2547b6b8 Author: Nicolas Clapies Date: Sat Sep 25 14:58:44 2004 +0000 - Removed odd private method : lasso_name_identifier_mapping_request_new_from_query() has no sense. Liberty Alliance doesn't define Redirect method for name identifier mapping profile. .../protocols/name_identifier_mapping_request.c | 105 --------------------- 1 file changed, 105 deletions(-) commit 84a74fd84eddee7dfa12043fe0c6964a05f97ec0 Author: Nicolas Clapies Date: Sat Sep 25 14:56:18 2004 +0000 - Fixed mistake in the API : restored the second param (provider type). Added a new attribute. Now targetNameIdentifier is used to get the target name identifier of the remote Service Provider. Later it will be used to request an attribute of a principal at this SP. - Updated code of name identifier mapping object : lasso_name_identifier_mapping_build_request_msg() : builds the name identifier mapping SOAP request message. lasso_name_identifier_mapping_process_request_msg() : parse a SOAP request message. lasso_name_identifier_mapping_validate_request() : now this method verify federation of the principal. and get the name identifier of this principal from federation with the remote service provider. lasso_name_identifier_mapping_build_response_msg() : build the name identifier mapping SOAP response message. lasso_name_identifier_mapping_process_response_msg() : parse the SOAP response message and veriy the status code value. If Success, then it sets the targetNameIdentifier attribute. lasso/id-ff/name_identifier_mapping.c | 310 ++++++++++++++++++++++------------ lasso/id-ff/name_identifier_mapping.h | 7 +- 2 files changed, 211 insertions(+), 106 deletions(-) commit e3d1b0f8836d0a571df1fb65a2f318a36c9a9412 Author: Nicolas Clapies Date: Sat Sep 25 14:46:34 2004 +0000 Fixed mistake in LassoNameIdentifierMapping() : restored the second param (provider type). Added a new attribute in NameIdentifierMapping object. Now targetNameIdentifier is the name identifier of the target Service Provider. Later will be used to request an attribute. swig/Lasso.i | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) commit 2dff6f6f5ad27966bc7d12bae6d0f88c3c14943d Author: Nicolas Clapies Date: Thu Sep 23 16:50:08 2004 +0000 *** empty log message *** lasso/id-ff/name_identifier_mapping.c | 173 +++++++++++++++++++--------------- lasso/id-ff/name_identifier_mapping.h | 4 +- 2 files changed, 100 insertions(+), 77 deletions(-) commit c8b4f3a49d4fcbd8dee10f42235aae3fc7e7f356 Author: Nicolas Clapies Date: Thu Sep 23 16:49:31 2004 +0000 Major update of code in lasso_name_identifier_mapping_init_request(), lasso_name_identifier_mapping_process_request(), lasso_name_identifier_mapping_validate_request(). Added binding in swig for name identifier mapping profile .../protocols/name_identifier_mapping_request.c | 115 ++++++++++++-- .../protocols/name_identifier_mapping_request.h | 16 +- .../protocols/name_identifier_mapping_response.c | 92 +++++------ .../protocols/name_identifier_mapping_response.h | 29 ++-- swig/Lasso.i | 174 +++++++++++++++++++++ 5 files changed, 348 insertions(+), 78 deletions(-) commit 3e35952c6a29797604bf41210ffe441923bd93c0 Author: Nicolas Clapies Date: Thu Sep 23 16:29:45 2004 +0000 Removed old commented code lasso/Attic/protocols/logout_response.h | 5 ----- 1 file changed, 5 deletions(-) commit f94170a65c5585a2c955d14360becd3e2ca98ac2 Author: Christophe Nowicki Date: Thu Sep 23 16:00:54 2004 +0000 Group misc functions into misc.php on the idp and sp Add Federation Terminaison metadata on the idp and sp Add view off federation on the sp Add cancel federation button on the sp and idp Defederation is not working yet php/Attic/examples/sample-idp/admin_user.php | 10 +- .../examples/sample-idp/cancel_federation.php | 225 +++++++++++++++++++++ php/Attic/examples/sample-idp/index.php | 73 ++++++- php/Attic/examples/sample-idp/login.php | 85 ++++---- php/Attic/examples/sample-idp/metadata_idp1.xml | 6 +- php/Attic/examples/sample-idp/metadata_sp1.xml | 3 +- php/Attic/examples/sample-idp/misc.php | 55 +++++ php/Attic/examples/sample-idp/setup.php | 10 + php/Attic/examples/sample-idp/singleSignOn.php | 8 +- php/Attic/examples/sample-idp/soapEndpoint.php | 110 +++++++--- php/Attic/examples/sample-idp/user_add.php | 2 +- php/Attic/examples/sample-idp/view_session.php | 121 +++++++++++ php/Attic/examples/sample-sp/admin_user.php | 53 ++++- php/Attic/examples/sample-sp/assertionConsumer.php | 38 +--- php/Attic/examples/sample-sp/cancel_federation.php | 200 ++++++++++++++++++ php/Attic/examples/sample-sp/index.php | 47 ++++- php/Attic/examples/sample-sp/metadata_idp1.xml | 10 +- php/Attic/examples/sample-sp/misc.php | 55 +++++ php/Attic/examples/sample-sp/setup.php | 1 + php/Attic/examples/sample-sp/soapEndpoint.php | 143 +++++++++++++ 20 files changed, 1108 insertions(+), 147 deletions(-) commit 662764422bbf1b01decc01d414a7ab9d0db63958 Author: Nicolas Clapies Date: Thu Sep 23 15:23:51 2004 +0000 Added definition of name identifier mapping protocol profiles lasso/xml/strings.h | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) commit 544a063784a390f88f25c00d7596a3b601562562 Author: Valery Febvre Date: Thu Sep 23 13:44:38 2004 +0000 Moved 'signature_status' private property from LassoLogin to LassoProfile lasso/id-ff/login.c | 11 +++++------ lasso/id-ff/login.h | 1 - lasso/id-ff/profile.c | 14 +++++++------- lasso/id-ff/profile.h | 1 + 4 files changed, 13 insertions(+), 14 deletions(-) commit e0c58761eecd47d077011288b616508288759bc1 Author: Christophe Nowicki Date: Thu Sep 23 11:11:05 2004 +0000 Add Federation Federation Termination metadata php/Attic/examples/sample-idp/metadata_sp1.xml | 5 +++++ php/Attic/examples/sample-sp/metadata_sp1.xml | 5 +++++ 2 files changed, 10 insertions(+) commit d10c50f9bf431f69c4dbea4e7fe8d76112553f81 Author: Valery Febvre Date: Thu Sep 23 09:32:19 2004 +0000 Removed a ';' in excess lasso/Attic/protocols/register_name_identifier_response.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 43fc07c49284544e7b232b4b664e3d2eb1f12000 Author: Valery Febvre Date: Wed Sep 22 21:24:16 2004 +0000 Update docs/reference/lasso-sections.txt | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) commit 7f3f7b59ba9da9f7aeb2d683c0baca39f4ef987e Author: Valery Febvre Date: Wed Sep 22 21:11:40 2004 +0000 Ooops, signature_status type must be gint, not gboolean lasso/id-ff/login.c | 3 ++- lasso/id-ff/login.h | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) commit 42df41d9252dfe34f635c2584dc874766dbd1f3a Author: Valery Febvre Date: Wed Sep 22 19:39:17 2004 +0000 Changed returned values and added some error messages in lasso_query_verify_signature() lasso/xml/tools.c | 142 +++++++++++++++++++++++++++++------------------------- lasso/xml/tools.h | 4 +- 2 files changed, 79 insertions(+), 67 deletions(-) commit f1c8abcfdf56b1179bc0734f34bfed3d737cfc62 Author: Emmanuel Raviart Date: Wed Sep 22 16:58:35 2004 +0000 Updated to new API (but it doesn't work yet). tests/login_tests.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) commit 5cfcb4db70ad8b26d04f336c887e9ded77706b42 Author: Nicolas Clapies Date: Wed Sep 22 16:05:12 2004 +0000 Added a test on the remote provider id param in lasso_name_registration_init_request() method lasso/id-ff/name_registration.c | 1 + 1 file changed, 1 insertion(+) commit f8e9745ef96b93b5573ff4d5ec39a7ebf4cc7a49 Author: Valery Febvre Date: Wed Sep 22 15:58:16 2004 +0000 Minor fixs lasso/id-ff/login.c | 42 ++++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 20 deletions(-) commit 679b13568e33fa2a283cc1382c06f9df487a97e9 Author: Nicolas Clapies Date: Wed Sep 22 15:57:51 2004 +0000 Added method lasso_lib_name_identifier_mapping_request_set_targetNameSpace() in lib_name_identifier_mapping_reques.c / h files. Added support of target name space in lasso_name_identifier_mapping_new() in name_identifier_mapping_request.c / h files. Added support of target name space in lasso_name_identifier_init_request() in name_identifier_mapping.c / h files .../protocols/name_identifier_mapping_request.c | 9 ++- .../protocols/name_identifier_mapping_request.h | 3 +- lasso/id-ff/name_identifier_mapping.c | 81 ++++++++++++++-------- lasso/id-ff/name_identifier_mapping.h | 7 +- lasso/xml/lib_name_identifier_mapping_request.c | 12 ++++ lasso/xml/lib_name_identifier_mapping_request.h | 15 ++-- 6 files changed, 87 insertions(+), 40 deletions(-) commit f5ab5917e49e70b3a82174d6885f34ce1b907730 Author: Christophe Nowicki Date: Wed Sep 22 14:59:15 2004 +0000 fix problem with the sso, now the user can do more than one sso session. php/Attic/examples/sample-idp/admin_user.php | 7 +- php/Attic/examples/sample-idp/singleSignOn.php | 102 +++++++++++++++++-------- php/Attic/examples/sample-idp/soapEndpoint.php | 87 ++++++++++++--------- 3 files changed, 125 insertions(+), 71 deletions(-) commit a952e642e05288e24760e0106a2022d4fd941750 Author: Frederic Peters Date: Wed Sep 22 14:37:11 2004 +0000 forgotten commit; /insert const keyword explanation here/ lasso/Attic/protocols/artifact.c | 6 +++--- lasso/Attic/protocols/authn_request.c | 4 ++-- lasso/Attic/protocols/authn_response.c | 4 ++-- lasso/Attic/protocols/elements/assertion.c | 6 ++---- lasso/Attic/protocols/elements/authentication_statement.c | 2 +- lasso/Attic/protocols/federation_termination_notification.c | 4 ++-- lasso/Attic/protocols/logout_request.c | 6 +++--- lasso/Attic/protocols/logout_response.c | 4 ++-- lasso/Attic/protocols/name_identifier_mapping_request.c | 4 ++-- lasso/Attic/protocols/name_identifier_mapping_response.c | 4 ++-- lasso/Attic/protocols/register_name_identifier_request.c | 4 ++-- lasso/Attic/protocols/register_name_identifier_response.c | 4 ++-- lasso/Attic/protocols/request.c | 4 ++-- lasso/Attic/protocols/response.c | 4 ++-- lasso/xml/errors.c | 1 + lasso/xml/tools.c | 13 ++++--------- lasso/xml/xml.c | 3 +-- 17 files changed, 35 insertions(+), 42 deletions(-) commit 4eedccfa77742a38e5a5c00df58a4b2368b83634 Author: Nicolas Clapies Date: Wed Sep 22 14:33:42 2004 +0000 fixed a lot of bug, added a new attribute oldNameIdentifier. Now after the process of the identity object ( or dump), nameIdentifier holds the new name identifier and oldNameIdentifier holds the old name identifier .../protocols/register_name_identifier_request.c | 65 +++---- .../protocols/register_name_identifier_response.c | 20 ++- lasso/id-ff/name_registration.c | 189 +++++++++++++-------- lasso/id-ff/name_registration.h | 2 + swig/Lasso.i | 9 + 5 files changed, 187 insertions(+), 98 deletions(-) commit 179a57c71fa32db5e0c0cf807826ec2756830535 Author: Nicolas Clapies Date: Wed Sep 22 14:33:06 2004 +0000 lasso_federation_set_local_nameIdentifier() and lasso_federation_set_remote_nameIdentifier() remove the old value before setting local_nameIdentifier of remote_nameIdentifier lasso/Attic/protocols/federation.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) commit 2e321ac1f615cd7d38bb8a948055a13530005eac Author: Nicolas Clapies Date: Wed Sep 22 14:30:48 2004 +0000 *** empty log message *** lasso/id-ff/identity.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) commit 9d61520396fef686219f9fdced45b943896544ff Author: Nicolas Clapies Date: Wed Sep 22 14:30:14 2004 +0000 Added lasso_identity_get_federation_ref : it returns the reference of the asked federation object lasso/id-ff/identity.h | 3 +++ 1 file changed, 3 insertions(+) commit ef60f5149bb71419e8c405c7ed763cfb74127709 Author: Christophe Nowicki Date: Wed Sep 22 13:53:06 2004 +0000 Added ProfileBrwsPost php/Attic/examples/sample-sp/login.php | 54 ++++++++++++++++++++++------------ 1 file changed, 36 insertions(+), 18 deletions(-) commit 979e3affa3f021dc046b752da27ae6c6f8b7f97d Author: Valery Febvre Date: Wed Sep 22 13:44:33 2004 +0000 update lasso/xml/errors.h | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) commit 10b74cf7666ff519418471d2e9367158c95df970 Author: Emmanuel Raviart Date: Wed Sep 22 13:32:45 2004 +0000 Removed assertion from login in SWIG. swig/Lasso.i | 29 ----------------------------- 1 file changed, 29 deletions(-) commit 0f5068dbf3aadcabcb6c1abd49d305332b4ecf01 Author: Valery Febvre Date: Wed Sep 22 13:24:06 2004 +0000 Renamed lasso_lecp_init_from_authn_request_msg() into lasso_lecp_process_authn_request_msg() BEWARE : this change breaks the API lasso/id-ff/lecp.c | 8 ++++---- lasso/id-ff/lecp.h | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) commit e40e269b1c8f96a1ad8e3b0e5542596b476b8766 Author: Valery Febvre Date: Wed Sep 22 13:21:29 2004 +0000 Removed response_dump and assertion properties in LassoLogin object Added an attribute (remote_providerID) in lasso_login_build_response_msg() Renamed lasso_login_add_response_assertion() into lasso_login_build_assertion() Renamed lasso_login_init_from_authn_request_msg() into lasso_login_process_authn_request_msg() Removed lasso_login_get_assertion(), lasso_login_set_assertion and lasso_login_set_assertion_from_dump() methods BEWARE : these changes break the API lasso/id-ff/login.c | 546 ++++++++++++++++++++-------------------------------- lasso/id-ff/login.h | 81 ++++---- 2 files changed, 242 insertions(+), 385 deletions(-) commit 12bb7e02d839ea26fbfa97e3e11e5df01f1b3b42 Author: Valery Febvre Date: Wed Sep 22 10:31:25 2004 +0000 Added 8 SamlStatusCode lasso/xml/strings.h | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) commit c82fad573912bda3923347481245d2371a6f94b7 Author: Valery Febvre Date: Wed Sep 22 10:24:01 2004 +0000 Added lasso_profile_get_remote_providerID() method lasso/id-ff/profile.c | 12 ++++++++++++ lasso/id-ff/profile.h | 2 ++ 2 files changed, 14 insertions(+) commit 29e3f7e929317c6191d4a3fad2516e0af6d0549b Author: Emmanuel Raviart Date: Wed Sep 22 10:15:14 2004 +0000 New API pour artefact handling. swig/Lasso.i | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) commit 350575c4183a552570a155f7587e12b7f991b43f Author: Valery Febvre Date: Mon Sep 20 16:41:43 2004 +0000 update docs/reference/lasso-sections.txt | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) commit 690501c303b2eaeffee2038dcb342e76a0560d02 Author: Emmanuel Raviart Date: Mon Sep 20 16:20:16 2004 +0000 Made argument remote_providerID optional for Defederation.initNotification, in SWIG binding. swig/Lasso.i | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit adc8c908d91fcb9ac6fad54d20fc758b35d554ea Author: Nicolas Clapies Date: Mon Sep 20 16:03:40 2004 +0000 Added binding for new name registration type swig/Lasso.i | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) commit e025fd279382b5d7c1dfe57123e283aa42848d5f Author: Christophe Nowicki Date: Mon Sep 20 16:01:45 2004 +0000 PHP session are stored in the database php/Attic/examples/sample-idp/session.php | 86 +++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) commit 63eda2109992301e9e033f66c5d6f4912b1d56f5 Author: Christophe Nowicki Date: Mon Sep 20 16:01:08 2004 +0000 PHP session are now stored in the database A now table was added 'sso_session' for storing information about the PHP Session, it's possible to view logged user Logout destroy the PHP session in the IdP Bug : user can't sso twice ;( php/Attic/examples/sample-idp/admin_user.php | 27 +- php/Attic/examples/sample-idp/index.php | 12 +- php/Attic/examples/sample-idp/login.php | 15 +- php/Attic/examples/sample-idp/logout.php | 8 +- php/Attic/examples/sample-idp/setup.php | 23 +- php/Attic/examples/sample-idp/singleSignOn.php | 210 ++++++------ php/Attic/examples/sample-idp/soapEndpoint.php | 364 ++++++++++++--------- php/Attic/examples/sample-idp/user_add.php | 10 +- php/Attic/examples/sample-sp/admin_user.php | 7 + php/Attic/examples/sample-sp/assertionConsumer.php | 13 +- php/Attic/examples/sample-sp/index.php | 9 +- php/Attic/examples/sample-sp/log_view.php | 4 +- php/Attic/examples/sample-sp/login.php | 10 + php/Attic/examples/sample-sp/logout.php | 46 ++- php/Attic/examples/sample-sp/register.php | 20 +- php/Attic/examples/sample-sp/session.php | 86 +++++ php/Attic/examples/sample-sp/setup.php | 22 +- 17 files changed, 570 insertions(+), 316 deletions(-) commit 4909ede99e0a938abdbb27305989f61938783c23 Author: Nicolas Clapies Date: Mon Sep 20 15:54:09 2004 +0000 *** empty log message *** lasso/id-ff/profile.h | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) commit 21c603e245f6a61886a8398f54acbae3ee5ab093 Author: Emmanuel Raviart Date: Mon Sep 20 15:52:03 2004 +0000 Made remote_providerID optional in lasso_lecp_build_authn_request_msg and in SWIG Corrected SWIG handling of metadata. Added attribute providerIds to Session in SWIG. lasso/id-ff/lecp.c | 24 ++++++++++++++++++++---- lasso/id-ff/logout.c | 3 ++- swig/Lasso.i | 33 +++++++++++++++------------------ 3 files changed, 37 insertions(+), 23 deletions(-) commit 38b810e03419bcff36c1970c550af4e01cbd989b Author: Nicolas Clapies Date: Mon Sep 20 15:42:00 2004 +0000 Fixed big mistake when updating name registration type in lassoRequestType : moved type at the end to preserve API, sorry. lasso/id-ff/profile.h | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) commit 055ef8fe6473a0eeb6791a278a4991881728791a Author: Frederic Peters Date: Mon Sep 20 14:49:49 2004 +0000 repair API/ABI; thanks you very much. lasso/id-ff/profile.h | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) commit 7c30af2e9014028539397db87e8745e3fdebfad8 Author: Nicolas Clapies Date: Mon Sep 20 14:32:06 2004 +0000 Added name registration declaration and definition swig/Lasso.i | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit dd7a3ee64030371d66991345a3992bc232478eea Author: Nicolas Clapies Date: Mon Sep 20 14:30:43 2004 +0000 Added name registration type in lassoRequestType enum. added test in function lasso_profile_get_request_type_from_soap_msg() lasso/id-ff/profile.c | 2 +- lasso/id-ff/profile.h | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) commit 38b0c08b955b4c283744a34a1870edeb3eddc868 Author: Frederic Peters Date: Mon Sep 20 14:29:56 2004 +0000 I wanted to login /But it was too long/ So I logged out /It was not much shorter/ docs/lasso-book/single-logout.process | 149 ++++++++++++++++++++++++++++ docs/lasso-book/single-sign-on.process | 171 +++++++++++++++++++++++++++++++++ 2 files changed, 320 insertions(+) commit 867b6fc5f80779209a299797f33facde7fd78007 Author: Nicolas Clapies Date: Mon Sep 20 14:16:11 2004 +0000 Added tests in lasso_register_name_identifier_response_new_from_query(). Now return NULL if a required key value is not found .../protocols/register_name_identifier_response.c | 63 ++++++++++++++++++---- 1 file changed, 53 insertions(+), 10 deletions(-) commit 38ebd2003d60724abe1923311fc9060d6c56cf27 Author: Nicolas Clapies Date: Mon Sep 20 14:12:53 2004 +0000 Added test lasso_register_name_identifier_request_new_from_query(). Verify if SPProvidedNameIdentifier exists in query (As specified in IDFF 1.2 errata, SPProvidedNameIdentifier is optional) .../protocols/register_name_identifier_request.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) commit 1af6414dc1225672179959d379818e68cf2187f0 Author: Valery Febvre Date: Mon Sep 20 13:33:22 2004 +0000 Added lasso_get_public_key_from_pem_cert_file() and lasso_get_pem_file_type() functions lasso/xml/tools.c | 105 +++++++++++++++++++++++++++++++++++++++++++++++++++--- lasso/xml/tools.h | 50 ++++++++++++++++---------- 2 files changed, 131 insertions(+), 24 deletions(-) commit f0e838f2199ab59c8dbd214c5f7fab05f6943baf Author: Nicolas Clapies Date: Mon Sep 20 12:36:05 2004 +0000 Replaced call to lasso_identity_get_next_federation_remote_providerID() with lasso_identity_get_first_providerID() lasso/id-ff/defederation.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) commit 625724902128abb279f741cf52d7cc875ff1b66a Author: Valery Febvre Date: Mon Sep 20 12:32:21 2004 +0000 the remote_providerID parameter of lasso_login_build_authn_request_msg() method is now optional. If it's NULL, the providerID of the first provider of login->server is used. lasso/id-ff/login.c | 44 +++++++++++++++++++++++++++++++++----------- lasso/id-ff/login.h | 4 ++-- 2 files changed, 35 insertions(+), 13 deletions(-) commit c3ea4a50885ada48f2bd32749ba97022eb600042 Author: Nicolas Clapies Date: Mon Sep 20 12:23:51 2004 +0000 Added lasso_identity_get_first_providerID(). Now it replaces lasso_identity_get_next_federation_remote_providerID() wich still exists to keep API / ABI compatibility lasso/id-ff/identity.c | 10 +++++++++- lasso/id-ff/identity.h | 2 ++ 2 files changed, 11 insertions(+), 1 deletion(-) commit b7950b5bc7eeee1ed0aaa88923aad4291fa08fdb Author: Valery Febvre Date: Mon Sep 20 11:58:40 2004 +0000 Added lasso_server_get_first_providerID() method lasso/id-ff/server.c | 14 ++++++++++++++ lasso/id-ff/server.h | 2 ++ 2 files changed, 16 insertions(+) commit ad1e977a2bb19bb4ddab881ad18381d2506a8b40 Author: Emmanuel Raviart Date: Sat Sep 18 20:29:49 2004 +0000 Added SWIG bindings for metadata, providers and providerIds. Reworked PHP4 binding for Identity.providerIds => PHP API has changed. swig/Lasso.i | 219 ++++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 196 insertions(+), 23 deletions(-) commit 60a65436a20263cbf00e41f284fef49142eae593 Author: Frederic Peters Date: Fri Sep 17 18:11:17 2004 +0000 fixed typo lasso/id-ff/login.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 585041d5fa8a0d9f80ba86f99792f61bfcdd5eb2 Author: Frederic Peters Date: Fri Sep 17 17:35:26 2004 +0000 use g_strdup_printf to avoir buffer size calculations and g_snprintf to avoir buffer overrun. lasso/id-ff/defederation.c | 9 +++------ lasso/id-ff/login.c | 15 +++++++-------- lasso/id-ff/logout.c | 9 +++------ lasso/id-ff/name_registration.c | 6 ++---- lasso/id-ff/profile.c | 6 +++--- lasso/id-ff/server.c | 2 +- lasso/xml/errors.c | 5 +---- lasso/xml/lib_scoping.c | 2 +- 8 files changed, 21 insertions(+), 33 deletions(-) commit 0215778ded0e5e2c9e5ef595e6ec1f6bc93c6387 Author: Frederic Peters Date: Fri Sep 17 17:32:58 2004 +0000 use g_strdup_printf to avoid buffer size calculation; and free() the uri once it has been used. lasso/xml/xml.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit be0eb1ebcf9506277f9471671d805322779098bb Author: Frederic Peters Date: Fri Sep 17 16:52:48 2004 +0000 strncpy won't add a trailing \0 to the string if it has over 512 characters; only copy 511 and add a zero manually. lasso/xml/debug.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit 1db82e571dd29835ee669472de1a646314e12aa9 Author: Christophe Nowicki Date: Fri Sep 17 16:02:24 2004 +0000 log viewer for the Service Provider and the Identity Provider added logger for in many files updated idp1 metadata, added .php extension added session viewer for the sp (you will be able to view online users) php/Attic/examples/sample-idp/admin_user.php | 23 +-- php/Attic/examples/sample-idp/index.php | 24 ++-- php/Attic/examples/sample-idp/log_view.php | 96 ++++++++++--- php/Attic/examples/sample-idp/login.php | 17 +-- php/Attic/examples/sample-idp/setup.php | 27 +++- php/Attic/examples/sample-idp/singleSignOn.php | 116 +++++++++------ php/Attic/examples/sample-idp/soapEndpoint.php | 14 +- php/Attic/examples/sample-idp/user_add.php | 4 +- php/Attic/examples/sample-sp/assertionConsumer.php | 111 +++++++++----- php/Attic/examples/sample-sp/index.php | 58 ++++---- php/Attic/examples/sample-sp/log_view.php | 160 +++++++++++++++++++++ php/Attic/examples/sample-sp/login.php | 40 ++++-- php/Attic/examples/sample-sp/logout.php | 1 - php/Attic/examples/sample-sp/metadata_idp1.xml | 8 +- php/Attic/examples/sample-sp/setup.php | 58 +++++++- php/Attic/examples/sample-sp/view_session.php | 88 ++++++++++++ 16 files changed, 652 insertions(+), 193 deletions(-) commit cc5bffb4bd9a1f3f057be78bfcd71db51a74dfc8 Author: Frederic Peters Date: Fri Sep 17 15:19:18 2004 +0000 removed remaining parenthesis on return statements lasso/id-ff/server.c | 4 ++-- lasso/lasso.c | 2 +- lasso/xml/samlp_request_abstract.c | 4 ++-- lasso/xml/samlp_response_abstract.c | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) commit 5cfa71551de2e9a37aa5558eba6f1d2526287447 Author: Frederic Peters Date: Fri Sep 17 15:09:57 2004 +0000 lasso_sha1 doesn't return a string but a buffer lasso/xml/tools.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit f70d60877a39560648ad8c12d1aca309afa59bb1 Author: Romain Chantereay Date: Fri Sep 17 12:18:30 2004 +0000 Uptaded NSI scripts: * Set version to 0.4.1-2 (filename is set too) * Updated files modules documentation. * Added intl.dll (part of gettext project) to dependencies installation. PS: Gettext is not included, just intl.dll win32/nsis/lasso-deps.nsi | 38 ++++++++++++++++++++++---------------- win32/nsis/lasso-full.nsi | 42 ++++++++++++++++++++++++------------------ 2 files changed, 46 insertions(+), 34 deletions(-) commit 32fe149c508811927766b9556c1fd89c3daddaa9 Author: Frederic Peters Date: Fri Sep 17 10:15:16 2004 +0000 remove removed code lasso/Attic/protocols/artifact.c | 6 ---- lasso/Attic/protocols/logout_request.c | 13 --------- lasso/id-ff/login.c | 37 ++---------------------- lasso/id-ff/name_identifier_mapping.c | 2 -- lasso/xml/debug.c | 16 ----------- lasso/xml/xml.c | 52 ---------------------------------- 6 files changed, 2 insertions(+), 124 deletions(-) commit 9275ffed95345536ebddbf57c7253a9cb1f43188 Author: Frederic Peters Date: Fri Sep 17 10:14:42 2004 +0000 alloc xmlChar with xmlMalloc in lasso_build_unique_id; alloc one more character in lasso_sha1; remove some removed code lasso/xml/tools.c | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) commit 6dda2ff2ab6e5e42a1c97e4ac941f84804c02b05 Author: Frederic Peters Date: Fri Sep 17 09:43:03 2004 +0000 use memcpy to copy memory; also fixed type of samlArt. lasso/id-ff/login.c | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) commit 40940b95aaefd87f9af96439669cc6cb184d69ef Author: Christophe Nowicki Date: Thu Sep 16 15:57:55 2004 +0000 New logging system with a web interface. php/Attic/examples/sample-idp/admin_user.php | 17 ++-- php/Attic/examples/sample-idp/index.php | 39 ++++----- php/Attic/examples/sample-idp/log_view.php | 108 +++++++++++++++++++++++++ php/Attic/examples/sample-idp/login.php | 20 +++-- php/Attic/examples/sample-idp/logout.php | 14 ++++ php/Attic/examples/sample-idp/setup.php | 38 +++++++-- php/Attic/examples/sample-idp/singleSignOn.php | 40 +++------ php/Attic/examples/sample-idp/soapEndpoint.php | 21 +++-- php/Attic/examples/sample-idp/user_add.php | 30 +++++-- php/Attic/examples/sample-sp/index.php | 35 ++++---- php/Attic/examples/sample-sp/login.php | 2 +- php/Attic/examples/sample-sp/setup.php | 9 +++ 12 files changed, 258 insertions(+), 115 deletions(-) commit 7ea2275ca076a880c27448cdbdfe09ffa9f15db8 Author: Valery Febvre Date: Thu Sep 16 15:25:52 2004 +0000 Disabled "consent" attribute checking when NameIDPolicy is set to federated in the AuthnRequest (in lasso_login_process_federation method) lasso/id-ff/login.c | 39 ++++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 19 deletions(-) commit 9fcd2d78851c67a84dc7dcc1b53805fe804d8ea0 Author: Christophe Nowicki Date: Thu Sep 16 13:55:50 2004 +0000 For multiple virtual hosts with certificat you need to set the CN. It's fixed in the PHP sample README. php/Attic/examples/README | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit 60751467524f12aee0681c67ed2be843485d595d Author: Christophe Nowicki Date: Thu Sep 16 12:29:20 2004 +0000 README for the PHP samples is now complete. Can someone try it? php/Attic/examples/README | 97 +++++++++++++++++++++++---------- php/Attic/examples/sample-idp/setup.php | 2 +- 2 files changed, 68 insertions(+), 31 deletions(-) commit 2f0a452be39b1ec48a2ce40c3d5d857f31d71a90 Author: Christophe Nowicki Date: Wed Sep 15 15:59:59 2004 +0000 Added sample xml metadata in the distribution Added a README file, this file explain howto setup a PHP IdP/SP, it's not fully documented yet. Work in progress. php/Attic/examples/README | 137 ++++++++++++++++++++++++ php/Attic/examples/sample-idp/Makefile.am | 26 ++++- php/Attic/examples/sample-idp/README | 27 ----- php/Attic/examples/sample-idp/metadata_idp1.xml | 19 ++++ php/Attic/examples/sample-idp/metadata_sp1.xml | 20 ++++ php/Attic/examples/sample-idp/setup.php | 17 +-- php/Attic/examples/sample-sp/Makefile.am | 20 +++- php/Attic/examples/sample-sp/metadata_idp1.xml | 19 ++++ php/Attic/examples/sample-sp/metadata_sp1.xml | 20 ++++ php/Attic/examples/sample-sp/setup.php | 49 +++++---- 10 files changed, 290 insertions(+), 64 deletions(-) commit 881bb4d750dbb07cae3d4f8836a6c06ba465272e Author: Christophe Nowicki Date: Wed Sep 15 08:25:45 2004 +0000 New logging system based on Pear::Log package. Every actions on the idp, sp will be logged inside the database, syslog a file. php/Attic/examples/sample-idp/admin_user.php | 2 +- php/Attic/examples/sample-idp/login.php | 147 ++++++++++++++++++--- php/Attic/examples/sample-idp/setup.php | 43 ++++-- php/Attic/examples/sample-idp/singleSignOn.php | 88 +++++++++--- php/Attic/examples/sample-idp/soapEndpoint.php | 129 +++++++++++++----- php/Attic/examples/sample-sp/admin_user.php | 4 +- php/Attic/examples/sample-sp/assertionConsumer.php | 2 +- php/Attic/examples/sample-sp/logout.php | 4 +- 8 files changed, 332 insertions(+), 87 deletions(-) commit 5ee3977db17a14a3ac81bfa7fb6266f342c50ac7 Author: Nicolas Clapies Date: Tue Sep 14 16:00:07 2004 +0000 Added binding for LassoNameRegistration C object swig/Lasso.i | 180 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 180 insertions(+) commit 1430d739e564a63da55f6063b13a4f41acaf899c Author: Nicolas Clapies Date: Tue Sep 14 15:55:19 2004 +0000 Little indentation lasso/id-ff/name_registration.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 48651a55d88f57cd882579b197496e83bbc4caa3 Author: Nicolas Clapies Date: Tue Sep 14 15:53:46 2004 +0000 Added tests if required attributes in lasso_register_name_identifier_request_new_from_query() are not found. .../protocols/register_name_identifier_request.c | 66 +++++++++++++++++++++- 1 file changed, 65 insertions(+), 1 deletion(-) commit 648b65714bdd5a5b7d98d16633a270482e6762b1 Author: Christophe Nowicki Date: Mon Sep 13 16:00:30 2004 +0000 now the user list show federations php/Attic/examples/sample-idp/admin_user.php | 67 +++++++++++++++++++++++++--- 1 file changed, 60 insertions(+), 7 deletions(-) commit a58eaf592509012ff6fc8a92887d74f899a89a55 Author: Christophe Nowicki Date: Mon Sep 13 15:55:23 2004 +0000 bind property providerIDs for LassoIdentity added typemap, convert GPtrArray to PHP indexed string array swig/Lasso.i | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) commit 8976ed87f59de26aa31ce8bc471d49614bfbe008 Author: Christophe Nowicki Date: Mon Sep 13 12:32:31 2004 +0000 split source code of singleSignOn.php in many functions added support for http basic authentification remove useless "?SID=" values php/Attic/examples/sample-idp/admin_user.php | 2 +- php/Attic/examples/sample-idp/setup.php | 51 ++-- php/Attic/examples/sample-idp/singleSignOn.php | 313 +++++++++++++++------ php/Attic/examples/sample-idp/soapEndpoint.php | 46 ++- php/Attic/examples/sample-sp/assertionConsumer.php | 4 +- php/Attic/examples/sample-sp/index.php | 7 +- 6 files changed, 287 insertions(+), 136 deletions(-) commit 19663b8864a6656f9baca0120276ff7607e1fedf Author: Christophe Nowicki Date: Fri Sep 10 15:35:06 2004 +0000 change header("Location $url\n\n") to header("Location $url\r\n\r\n") php/Attic/examples/sample-idp/login.php | 2 +- php/Attic/examples/sample-idp/logout.php | 2 +- php/Attic/examples/sample-idp/singleSignOn.php | 2 +- php/Attic/examples/sample-sp/assertionConsumer.php | 2 +- php/Attic/examples/sample-sp/login.php | 2 +- php/Attic/examples/sample-sp/logout.php | 11 ++++------- php/Attic/examples/sample-sp/register.php | 8 ++------ 7 files changed, 11 insertions(+), 18 deletions(-) commit 0abfa7d0c8bac90e291cf7664a0302aa286f716d Author: Christophe Nowicki Date: Fri Sep 10 15:17:36 2004 +0000 Use header("Location: $url\n\n") instead of header("Location: $url") Secure every SQL query with the quoteSmart methode. Completely rewrite singleSignOn.php, now the code is more easy to understand and more clean. php/Attic/examples/sample-idp/admin_user.php | 16 +- php/Attic/examples/sample-idp/login.php | 2 +- php/Attic/examples/sample-idp/logout.php | 3 +- php/Attic/examples/sample-idp/setup.php | 2 +- php/Attic/examples/sample-idp/singleSignOn.php | 273 ++++++++++++--------- php/Attic/examples/sample-sp/admin_user.php | 17 +- php/Attic/examples/sample-sp/assertionConsumer.php | 3 +- php/Attic/examples/sample-sp/index.php | 2 +- php/Attic/examples/sample-sp/login.php | 2 +- php/Attic/examples/sample-sp/logout.php | 3 +- php/Attic/examples/sample-sp/register.php | 10 +- 11 files changed, 186 insertions(+), 147 deletions(-) commit 5be8519c1f44c4cbaecc659762bc5b23d36e2bfe Author: Frederic Peters Date: Fri Sep 10 15:07:23 2004 +0000 Fixed ABI and API breakage. Please don't modify function signatures (even more so when the new arg is not used). lasso/id-ff/name_registration.c | 3 +-- lasso/id-ff/name_registration.h | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) commit c1a3a2070d80421f533531abd231541421c40637 Author: Nicolas Clapies Date: Fri Sep 10 14:39:01 2004 +0000 A lot of Updates ... currently it is unusable : lasso_name_registration_validate_request(), lasso_name_registration_process_response_msg(), lasso_name_identifier_mapping_validate_request() and lasso_name_identifier_mapping_process_response_msg() need to be completed lasso/id-ff/name_identifier_mapping.c | 136 ++++++++++++++++++++++++---------- lasso/id-ff/name_identifier_mapping.h | 4 + lasso/id-ff/name_registration.c | 45 +---------- 3 files changed, 103 insertions(+), 82 deletions(-) commit e6598cefb84928dd6b3fec09980c8bc945421bbc Author: Nicolas Clapies Date: Fri Sep 10 13:19:53 2004 +0000 Moved lasso_name_registration_validate_request() method at the end of definition order lasso/id-ff/name_registration.c | 105 ++++++++++++++++++++-------------------- 1 file changed, 53 insertions(+), 52 deletions(-) commit a534fb441bd7fd587c8b9d8e7bc13c5910be264f Author: Nicolas Clapies Date: Fri Sep 10 13:16:16 2004 +0000 Moved lasso_name_registration_validate_request() at the end of declaration order lasso/id-ff/name_registration.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 84480e435282b74422cdea48ce5ad32673f38482 Author: Frederic Peters Date: Fri Sep 10 13:05:36 2004 +0000 Moved assertion to private part of LassoLogin* (use lasso_login_get_assertion to get it). Without breaking ABI. Classy. lasso/id-ff/login.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 840395ffde9fb180c25c99d483956edc77712aa9 Author: Nicolas Clapies Date: Fri Sep 10 12:44:51 2004 +0000 Updated name registration object's methods code to have the same structure as the other profiles. It still needs to be tested before to be souked :) lasso/id-ff/name_registration.c | 229 ++++++++++++++++++++++++++++------------ lasso/id-ff/name_registration.h | 3 +- 2 files changed, 165 insertions(+), 67 deletions(-) commit eca9e5cbcb123d3ee7ea8a12dc490cbc4de84ebd Author: Nicolas Clapies Date: Fri Sep 10 12:23:28 2004 +0000 Changed comment if error when building query logout request message lasso/id-ff/logout.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 225b93a59cadff59167c16322999c55523e4336b Author: Nicolas Clapies Date: Fri Sep 10 12:21:27 2004 +0000 Added entry for logout method lasso_logout_dump(), lasso_logout_init_request() and lasso_logout_reset_providerID_index() docs/reference/lasso-sections.txt | 3 +++ 1 file changed, 3 insertions(+) commit edacd94c3eb1bb84712e810aea33f3d6736bcc8e Author: Nicolas Clapies Date: Fri Sep 10 12:20:18 2004 +0000 Added lasso_provider_get_registerNameIdentifierServiceReturnURL() method in LassoProvider object lasso/Attic/protocols/provider.c | 26 ++++++++++++++++++++++++++ lasso/Attic/protocols/provider.h | 4 ++++ 2 files changed, 30 insertions(+) commit 8fac593fd22f6363022983c02faddcaf52e72604 Author: Christophe Nowicki Date: Thu Sep 9 14:37:05 2004 +0000 I've forget to add lasso/php/examples/sample-idp/Makefile in the autoconf script. configure.ac | 1 + 1 file changed, 1 insertion(+) commit 3a959f3925fd8edd09a6744fb66822028a811e37 Author: Christophe Nowicki Date: Wed Sep 8 16:21:34 2004 +0000 Improve setup system : edit metadata and allow the administrator to select the authentification methode (HTTP Basic or HTML Form). php/Attic/examples/sample-idp/create_metadata.php | 12 +++++++++++- php/Attic/examples/sample-idp/edit_metadata.php | 2 ++ php/Attic/examples/sample-idp/setup.php | 17 +++++++++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) commit db8d9f930f9acb2d0f8e9e344bc6fa01d8f4ce8d Author: Frederic Peters Date: Wed Sep 8 15:50:02 2004 +0000 please use spaces between variable names and values docs/reference/Makefile.am | 29 ++++++++++------------------- lasso/Makefile.am | 5 +---- lasso/id-ff/Makefile.am | 2 -- php/Attic/examples/Makefile.am | 2 +- php/Attic/examples/sample-idp/Makefile.am | 16 +++++----------- php/Attic/examples/sample-sp/Makefile.am | 11 +++-------- php/Makefile.am | 6 +++--- python/doc/.cvsignore | 3 +++ python/doc/tutorial/.cvsignore | 3 +++ 9 files changed, 29 insertions(+), 48 deletions(-) commit 070e552257daeb15c24dce902b6d9d1a17d7b15d Author: Christophe Nowicki Date: Wed Sep 8 15:43:51 2004 +0000 added edit sp metadata to the setup system php/Attic/examples/sample-idp/edit_metadata.php | 59 +++++++++++++++++++++++++ php/Attic/examples/sample-idp/setup.php | 12 ++--- php/Attic/examples/sample-idp/singleSignOn.php | 16 +++---- php/Attic/examples/sample-idp/user_add.php | 52 ++++++++++++++-------- 4 files changed, 102 insertions(+), 37 deletions(-) commit a0e6291fb2482f5c926ab2599c2d85a80f9f59ab Author: Christophe Nowicki Date: Wed Sep 8 15:12:36 2004 +0000 nice user browser php/Attic/examples/sample-idp/admin_user.php | 56 ++++++++++++++++++++++++---- 1 file changed, 49 insertions(+), 7 deletions(-) commit 3dcf64a7096a04a718825b3723a4153d312b2343 Author: Christophe Nowicki Date: Wed Sep 8 13:07:30 2004 +0000 oups ;( php/Attic/examples/sample-idp/Makefile.am | 11 +++++++++++ 1 file changed, 11 insertions(+) commit 789fbb27243b0f0990e8431704099b2713986ba5 Author: Christophe Nowicki Date: Wed Sep 8 12:56:49 2004 +0000 SOAP request read problem fixed SSO is now working much better php/Attic/examples/Makefile.am | 2 +- php/Attic/examples/sample-idp/singleSignOn.php | 205 ++++++++++++--------- php/Attic/examples/sample-sp/assertionConsumer.php | 40 +++- php/Attic/examples/sample-sp/logout.php | 38 +++- 4 files changed, 177 insertions(+), 108 deletions(-) commit 5b7353c5f8cc2545aea69b49d2df6c6a32ea03a1 Author: Emmanuel Raviart Date: Wed Sep 8 00:44:52 2004 +0000 Restructured ColdFusion code. Added single logout code. Both single sign-on and single logout work. java/coldfusion/src/CFLassoSingleLogout.java | 98 ++++++++++++++++++++++ .../src/{CFLasso.java => CFLassoSingleSignOn.java} | 35 ++++---- java/coldfusion/web/assertionConsumer.cfm | 11 ++- java/coldfusion/web/singleLogout.cfm | 40 +++++++++ java/coldfusion/web/singleSignOn.cfm | 8 +- 5 files changed, 170 insertions(+), 22 deletions(-) commit fd9574d0becacec6e0b85e0b7af842cfd3a71592 Author: Emmanuel Raviart Date: Tue Sep 7 21:04:21 2004 +0000 Added files that I forgot to commit for 0.4.1 Improved ColdFusion. NEWS | 5 +++++ doap.rdf | 4 ++++ java/coldfusion/web/assertionConsumer.cfm | 6 +++--- java/coldfusion/web/singleSignOn.cfm | 4 ++-- 4 files changed, 14 insertions(+), 5 deletions(-) commit 394a153255e95ef068d99bdb667ca2ab54c8565b Author: Romain Chantereay Date: Tue Sep 7 18:14:49 2004 +0000 Corrected install-java-lite nsi script. win32/nsis/jlasso-lite.nsi | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) commit 0bc0ac885074288b7bd9a02aecf73f0359a94509 Author: Emmanuel Raviart Date: Tue Sep 7 17:45:02 2004 +0000 Created ChangeLog using cvs2cl -f ChangeLog --FSF ChangeLog | 8588 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 8588 insertions(+) commit 65ea31957039c539a3de503ea4acf0b90bf6ffd3 Author: Emmanuel Raviart Date: Tue Sep 7 17:13:05 2004 +0000 Replaced Sign On with Sign-On. README | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit f37ed70f1014752f0a9158392780c801b48db613 Author: Emmanuel Raviart Date: Tue Sep 7 17:09:09 2004 +0000 Login skeleton for ColdFusion is now fully working. java/coldfusion/src/CFLasso.java | 58 +++++++++++++++++++++- java/coldfusion/web/assertionConsumer.cfm | 45 +++++++++++++++++ .../coldfusion/web/{login.cfm => singleSignOn.cfm} | 4 +- 3 files changed, 104 insertions(+), 3 deletions(-) commit 5e5e3c53507bb420c01ea11edadf965777f6af25 Author: Romain Chantereay Date: Tue Sep 7 17:08:48 2004 +0000 Updated NSI scripts. Set Lasso DLL windows resources filename to liblasso-1.dll. win32/lasso.rc | 2 +- win32/nsis/jlasso-lite.nsi | 6 +++--- win32/nsis/lasso-deps.nsi | 4 ++-- win32/nsis/lasso-full.nsi | 4 ++-- win32/nsis/lasso-lite.nsi | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) commit ce352716fd2c3ae3ff7a20c7f56b79b0d1c97638 Author: Romain Chantereay Date: Tue Sep 7 17:07:59 2004 +0000 Add windows linker --add-stdcall-alias in order to permit failsafe use of DLLs. java/Makefile.am | 3 ++- lasso/Makefile.am | 9 +++++++-- python/Makefile.am | 4 ++++ 3 files changed, 13 insertions(+), 3 deletions(-) commit 9388bdfc57a3b49adafc1693d21975214e63a691 Author: Christophe Nowicki Date: Tue Sep 7 15:55:11 2004 +0000 IdP PHP : logout is working php/Attic/examples/sample-idp/setup.php | 5 +- php/Attic/examples/sample-idp/singleSignOn.php | 32 ++++-- php/Attic/examples/sample-idp/soapEndpoint.php | 121 ++++++++++++++++++++- php/Attic/examples/sample-sp/assertionConsumer.php | 3 +- php/Attic/examples/sample-sp/index.php | 1 + php/Attic/examples/sample-sp/login.php | 2 +- php/Attic/examples/sample-sp/logout.php | 6 +- php/Attic/examples/sample-sp/setup.php | 2 +- 8 files changed, 150 insertions(+), 22 deletions(-) commit ed0ad921339c04ae57f48e31be8d4d925585285a Author: Christophe Nowicki Date: Tue Sep 7 15:09:00 2004 +0000 ZVAL_STRING macro for PHP swig/Lasso.i | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) commit 78e9a2b30fb31f2446e86c9cd0a43fd5ff33e4d8 Author: Frederic Peters Date: Tue Sep 7 15:03:35 2004 +0000 fixed error output in configure when no java has been found (was: ./configure: line 20612: NULL: command not found ) configure.ac | 1 + 1 file changed, 1 insertion(+) commit a187ddc0d8a257f34b9adaa19a170d48594782cb Author: Romain Chantereay Date: Tue Sep 7 14:51:23 2004 +0000 Firsts fixes in order to compile Python binding under Darwin. configure.ac | 8 ++++++-- python/Makefile.am | 5 ++++- 2 files changed, 10 insertions(+), 3 deletions(-) commit 5fe9c9cbc9bee3718441b310cbccc30d548010cb Author: Romain Chantereay Date: Tue Sep 7 14:29:40 2004 +0000 Another way to test, ugly, but safe. java/Makefile.am | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) commit e4de8cee48ec836c68789ea8f7d4eaf90feae017 Author: Nicolas Clapies Date: Tue Sep 7 14:25:55 2004 +0000 Comments miss in some last commits, so : the 4 last commits fixed a bad bug in lasso_logout_get_next_provideID() and a bug in the setting of status code value in logout response lasso/id-ff/logout.c | 2 -- 1 file changed, 2 deletions(-) commit 68fe57242dead57b49265d03e1bfb3e311851fb5 Author: Romain Chantereay Date: Tue Sep 7 14:25:48 2004 +0000 Ok, now a module undex Win32, and a lib under Linux (and other OS). java/Makefile.am | 4 ++++ 1 file changed, 4 insertions(+) commit dcef5a4591b2f2522040c5ae15bf6296b6e0cdc7 Author: Nicolas Clapies Date: Tue Sep 7 14:22:23 2004 +0000 Fixed a seg fault in lasso_logout_get_next_providerID() lasso/id-ff/logout.c | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) commit a6b6a9b659f2ed09f865b9618bc31c03be4dc676 Author: Romain Chantereay Date: Tue Sep 7 14:21:16 2004 +0000 Now module is a module. java/Makefile.am | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) commit 984ae67795631bed0c03e780283271a68760be58 Author: Nicolas Clapies Date: Tue Sep 7 14:09:48 2004 +0000 *** empty log message *** lasso/id-ff/logout.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) commit 49bf572857505bab5742627741c764064012cf56 Author: Romain Chantereay Date: Tue Sep 7 14:06:17 2004 +0000 Now 0.4.1 and 1:1:0. configure.ac | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 4ba23fe9a8a30103ab45fd723d23b2f91cf7d115 Author: Nicolas Clapies Date: Tue Sep 7 13:42:20 2004 +0000 Added entries for missing methods of logout object documentation : lasso_logout_init_request() and lasso_logout_reset_providerID_index() lasso/id-ff/logout.c | 122 +++++++++++++++++++++++++-------------------------- 1 file changed, 61 insertions(+), 61 deletions(-) commit f922f7fffc76dcc2e89c4d42cf15d103761d01c4 Author: Nicolas Clapies Date: Tue Sep 7 13:41:22 2004 +0000 Updated the API developer documentation lasso/id-ff/defederation.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) commit de7d014d90f0566ee82fd72a39744af6897930f7 Author: Nicolas Clapies Date: Tue Sep 7 13:20:15 2004 +0000 Updated the API developer documentation lasso/id-ff/logout.c | 139 +++++++++++++++++++++++++++++++-------------------- 1 file changed, 84 insertions(+), 55 deletions(-) commit 66ff07ce2a75a13f48513985223a5d3767f57da2 Author: Christophe Nowicki Date: Tue Sep 7 12:57:58 2004 +0000 SWIGPHP4 is not a defined in the wapper source code, use PHP_VERSION swig/Lasso.i | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) commit c47ce0d0fb248b62bffa7e2366c7350f8257c584 Author: Christophe Nowicki Date: Tue Sep 7 12:56:17 2004 +0000 remove swig -noproxy option for PHP php/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit ba26f54ef891be07d1749e193bfe19d3e3f58900 Author: Romain Chantereay Date: Tue Sep 7 11:47:29 2004 +0000 RTM :) Now good and proper test on swig version. swig/Lasso.i | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit b74caa598286c438e9c065ea2ed6cf19a4de60f4 Author: Frederic Peters Date: Tue Sep 7 11:43:47 2004 +0000 filled NEWS file NEWS | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) commit 9846f1dced57bdeaaa47f5d3312328659b0fdbc4 Author: Frederic Peters Date: Tue Sep 7 11:37:10 2004 +0000 removed note about bindings in README README | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit b31f29eab1f3bf72b923d808f9bdfc2334c5b31c Author: Romain Chantereay Date: Tue Sep 7 11:35:12 2004 +0000 For compatibility with SWIG < 1.3.22, test the swig version before using the new java enum handling way. swig/Lasso.i | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 3fe225687626d4783d43ed9c99e610d1af126932 Author: Romain Chantereay Date: Tue Sep 7 11:27:39 2004 +0000 Specificly use original approach java enums binding method. http://www.swig.org/Release/CHANGES 05/20/2004: wsfulton [Java] Java enum support added. There are now 4 ways in which enums can be wrapped: 1) Proper Java enums - use %include "enums.swg" 2) Typesafe enums - use %include "enumtypesafe.swg" 3) Type unsafe enums (constant integers) - use %include "enumtypeunsafe.swg" 4) Simple constant integers (original approach) - use %include %"enumsimple.swg" swig/Lasso.i | 1 + 1 file changed, 1 insertion(+) commit 4234a511c39ecf0d030026911647bd0ce97111e1 Author: Romain Chantereay Date: Tue Sep 7 11:22:18 2004 +0000 Added php sample-sp to the distribution. configure.ac | 4 +++- php/Attic/examples/Makefile.am | 1 + php/Attic/examples/sample-sp/Makefile.am | 9 +++++++++ php/Makefile.am | 1 + 4 files changed, 14 insertions(+), 1 deletion(-) commit 91f8a009af4f4422aa29dd15a1b3926c91607c16 Author: Frederic Peters Date: Tue Sep 7 11:16:45 2004 +0000 updated debian packaging changelog | 16 +++++++++++++--- control | 16 +++++++--------- files | 5 +++++ liblasso0-cil.files => liblasso-cil.files | 2 ++ liblasso0-dev.dirs => liblasso1-dev.dirs | 0 liblasso0-dev.files => liblasso1-dev.files | 0 liblasso0.dirs => liblasso1.dirs | 0 liblasso0.files => liblasso1.files | 0 liblasso1.postinst.debhelper | 5 +++++ liblasso1.postrm.debhelper | 5 +++++ rules | 5 +++-- 11 files changed, 40 insertions(+), 14 deletions(-) commit 38fd72e90583af18e6719eb950738661d347159e Author: Frederic Peters Date: Tue Sep 7 11:16:45 2004 +0000 updated debian packaging debian/changelog | 16 +++++++++++++--- debian/control | 16 +++++++--------- debian/files | 5 +++++ debian/{liblasso0-cil.files => liblasso-cil.files} | 2 ++ debian/{liblasso0-dev.dirs => liblasso1-dev.dirs} | 0 debian/{liblasso0-dev.files => liblasso1-dev.files} | 0 debian/{liblasso0.dirs => liblasso1.dirs} | 0 debian/{liblasso0.files => liblasso1.files} | 0 debian/liblasso1.postinst.debhelper | 5 +++++ debian/liblasso1.postrm.debhelper | 5 +++++ debian/rules | 5 +++-- 11 files changed, 40 insertions(+), 14 deletions(-) commit 8eb1397a89e88d055691db5113b8c3dd2155a525 Author: Romain Chantereay Date: Tue Sep 7 10:36:04 2004 +0000 Better java sun jdk support on Windows plateforms. NOTE: Use good PATH environment variable and set JAVA=java, JAVAC=javac & JAR=jar. It is very important. configure.ac | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) commit 1602702ea749c2c0749c56a6c5a753baf02de6c1 Author: Romain Chantereay Date: Tue Sep 7 08:53:17 2004 +0000 Fixed php-config help typo. configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 878dab9941ed0b70c49c0b06c9bf2040a17e43d0 Author: Romain Chantereay Date: Tue Sep 7 08:51:44 2004 +0000 No need to define package and version constants, there are already defined in the lasso_config.h file. This file is included in the generated wrap C source code. swig/Lasso.i | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit bd7d5b1961fc8fd7658b7d7f2a4d15fd5bc46fd5 Author: Romain Chantereay Date: Tue Sep 7 08:50:54 2004 +0000 Windows java installer includes now lasso.jar. Usefull isn't it ? win32/nsis/jlasso-lite.nsi | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit e1510ecd978d7e1234b5a160584e3fc179548fba Author: Emmanuel Raviart Date: Tue Sep 7 07:45:39 2004 +0000 Corrected Lasso minor version in SWIG binding. swig/Lasso.i | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit e7ffd783d710228251a4d78b1b0c6d75fd072073 Author: Frederic Peters Date: Mon Sep 6 18:50:52 2004 +0000 added 0.4 to doap.rdf doap.rdf | 4 ++++ 1 file changed, 4 insertions(+) commit 2e068417cfe9c4c44dd9d2a426ff1fdc82bf948c Author: Frederic Peters Date: Mon Sep 6 17:49:19 2004 +0000 a bit late; fixed use of unitialized variables (-Wuninitialized needs -O) lasso/id-ff/defederation.c | 8 ++++---- lasso/id-ff/login.c | 6 +++--- lasso/id-ff/logout.c | 2 +- lasso/id-ff/session.c | 1 - lasso/xml/xml.c | 2 ++ 5 files changed, 10 insertions(+), 9 deletions(-) commit 81d1e6b1dd5e8ac792e940252256cf0322ad1877 Author: Romain Chantereay Date: Mon Sep 6 16:56:05 2004 +0000 Updated installer file names. win32/nsis/jlasso-lite.nsi | 2 +- win32/nsis/lasso-deps.nsi | 2 +- win32/nsis/lasso-full.nsi | 2 +- win32/nsis/lasso-lite.nsi | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) commit ce3bffd15256793083873a87a185c469d41ead00 Author: Romain Chantereay Date: Mon Sep 6 16:53:47 2004 +0000 Added NSI java script file to distribution. win32/nsis/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 679621c89586792953a62f242a0bc412abc68524 Author: Romain Chantereay Date: Mon Sep 6 16:52:53 2004 +0000 Updated NSI file and added java NSI. win32/nsis/jlasso-lite.nsi | 110 +++++++++++++++++++++++++++++++++++++++++++++ win32/nsis/lasso-deps.nsi | 32 ++++++------- win32/nsis/lasso-full.nsi | 34 +++++++------- win32/nsis/lasso-lite.nsi | 30 ++----------- 4 files changed, 144 insertions(+), 62 deletions(-) commit 7acad8e5e7a56a2413d4fb18df919e0839cd7571 Author: Christophe Nowicki Date: Mon Sep 6 16:24:26 2004 +0000 PHP Idp Sample : - form for creating metadata - sso support - small README with installation instruction php/Attic/examples/sample-idp/README | 28 ++- php/Attic/examples/sample-idp/admin_user.php | 21 ++- php/Attic/examples/sample-idp/create_metadata.php | 134 +++++++++++++++ php/Attic/examples/sample-idp/defederate.php | 32 ++++ php/Attic/examples/sample-idp/federate.php | 32 ++++ php/Attic/examples/sample-idp/index.php | 51 +++++- php/Attic/examples/sample-idp/login.php | 37 +++- php/Attic/examples/sample-idp/logout.php | 36 ++++ php/Attic/examples/sample-idp/setup.php | 14 +- php/Attic/examples/sample-idp/singleSignOn.php | 199 +++++++++++++++++++--- php/Attic/examples/sample-idp/soapEndpoint.php | 66 +++++++ php/Attic/examples/sample-idp/user_add.php | 2 + 12 files changed, 613 insertions(+), 39 deletions(-) commit aab4db8ebcce9d5263a3c1a898d011711876a01d Author: Romain Chantereay Date: Mon Sep 6 16:24:23 2004 +0000 No more trace of macros if the distribution. Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 952459ecb67482f96215db277de619f4a77c4f08 Author: Romain Chantereay Date: Mon Sep 6 16:16:40 2004 +0000 pkg-config-path= becomes pkg-config= configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit f3dd414027a8be682974c45c1b8faa139a46b8a9 Author: Romain Chantereay Date: Mon Sep 6 16:15:40 2004 +0000 Removed check.m4 from distribution. configure.ac | 1 - macros/Makefile.am | 3 --- 2 files changed, 4 deletions(-) commit 8fa466d3361321d1f4fe547ad1016f5695e777e5 Author: Nicolas Clapies Date: Mon Sep 6 16:09:27 2004 +0000 Removed old methods declaration docs/reference/lasso-sections.txt | 4 ---- 1 file changed, 4 deletions(-) commit 29909e7ae98fc8808692d165766b0f4f9ba0f3c3 Author: Frederic Peters Date: Mon Sep 6 16:05:47 2004 +0000 removd extraneous output about gtk-doc configure.ac | 1 - 1 file changed, 1 deletion(-) commit 0013c2340587529e6f0c81dba85f404f688f86e2 Author: Romain Chantereay Date: Mon Sep 6 16:05:06 2004 +0000 Really added check macros to the distribution. configure.ac | 1 + macros/Makefile.am | 3 +++ 2 files changed, 4 insertions(+) commit 956ed63fd8d70461b7eb4db8a7a85af8f660ad42 Author: Romain Chantereay Date: Mon Sep 6 15:49:14 2004 +0000 Corrected java test. configure.ac | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) commit 8fb0ee72eff4f7755b67f77272ca153fa37b66b1 Author: Romain Chantereay Date: Mon Sep 6 15:40:59 2004 +0000 Args are string. autogen.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit d150d244c2267915b01e98f81bc4742bc646cf87 Author: Romain Chantereay Date: Mon Sep 6 15:37:38 2004 +0000 Revision to 0.4.0 Libtool: 1:0:0 Java is not activated when no jar program. configure.ac | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) commit 7f96eb8e68c38f03cc927dc688419892e801ee96 Author: Nicolas Clapies Date: Mon Sep 6 15:30:54 2004 +0000 *** empty log message *** lasso/id-ff/logout.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit a4b4520abe0880c20496a274d0ce0e3c9424c179 Author: Nicolas Clapies Date: Mon Sep 6 15:27:26 2004 +0000 *** empty log message *** lasso/id-ff/logout.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 1cadc76b39b3cb9c9c34c002a9372e52a7aaf2df Author: Romain Chantereay Date: Mon Sep 6 14:52:32 2004 +0000 Some typo, and variables corrections. swig/Lasso.i | 88 ++++++++++++++++++++++++++++++------------------------------ 1 file changed, 44 insertions(+), 44 deletions(-) commit e1fd04f28e111b798476fa50b7eccd3723154fed Author: Nicolas Clapies Date: Mon Sep 6 14:38:46 2004 +0000 Added lasso_logout_dump() to logout.h lasso/id-ff/logout.h | 2 ++ 1 file changed, 2 insertions(+) commit 19d696b1ac135a2051ef5089ef05041377e6370e Author: Nicolas Clapies Date: Mon Sep 6 14:14:26 2004 +0000 Renamed methods lasso_logint_set_assertion*() to lasso_login_set_assertion*() lasso/id-ff/login.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 0fd0bccbf589ca0009094f663c3f165ba8a5aa98 Author: Nicolas Clapies Date: Mon Sep 6 12:51:42 2004 +0000 Oups, little mistake : now attribute version is added only in lasso_profile_dump() instead of lasso_login_dump() or lasso_logout_dump() lasso/id-ff/login.c | 5 ----- lasso/id-ff/logout.c | 5 ----- lasso/id-ff/profile.c | 5 +++++ 3 files changed, 5 insertions(+), 10 deletions(-) commit 8bcb9c4e0c1d0e80554438214b5bef8cef0e7c94 Author: Nicolas Clapies Date: Mon Sep 6 12:36:47 2004 +0000 Added version attribute in lasso dump messages lasso/id-ff/identity.c | 5 +++++ lasso/id-ff/login.c | 5 +++++ lasso/id-ff/logout.c | 5 +++++ lasso/id-ff/server.c | 5 +++++ lasso/id-ff/session.c | 4 ++++ 5 files changed, 24 insertions(+) commit 9143bfa5c5db6f1319ed0fc6bbe63f0a0614889b Author: Romain Chantereay Date: Mon Sep 6 11:58:05 2004 +0000 Now, we use the detected JAR program instead of an harcoded 'jar' command. java/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit d6fff02e0fc043b7a3bf9412fd4de963bff50014 Author: Romain Chantereay Date: Mon Sep 6 11:26:13 2004 +0000 Now Lasso distribution includes the check macros allowing people to generate Makefile and configure without check-xml installed. PS: The distribution is not checked yet. Makefile.am | 2 +- autogen.sh | 2 +- macros/check.m4 | 133 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 135 insertions(+), 2 deletions(-) commit 34013a6092c2cd22138eb882355a69126b662096 Author: Emmanuel Raviart Date: Sun Sep 5 09:13:58 2004 +0000 Changed Python exceptions generated by SWIG. python/tests/errorchecking_tests.py | 2 +- python/tests/profiles_tests.py | 11 +++-- swig/Lasso.i | 87 +++++++++++++++++++++++++++++++++---- 3 files changed, 85 insertions(+), 15 deletions(-) commit a208f6f6b02fdb553f6f5590cca25b9fd6bc244b Author: Emmanuel Raviart Date: Sat Sep 4 19:31:21 2004 +0000 Half a day of work for this prodigious result: ColdFusion redirects the AuthnRequest to the IDP. java/coldfusion/src/CFLasso.java | 68 +++++++++++++++++++++++----------------- java/coldfusion/web/login.cfm | 1 + 2 files changed, 40 insertions(+), 29 deletions(-) commit 34afb0cfb6e997dddba3cfda69b607c7a6758602 Author: Emmanuel Raviart Date: Sat Sep 4 18:59:40 2004 +0000 Corrected a mistake in Java binding. swig/Lasso.i | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 3bc0eef7cd24827c599af582c55be64315c8e757 Author: Frederic Peters Date: Sat Sep 4 10:36:32 2004 +0000 missing includes, unusued variables, usual saturday stuff. lasso/Attic/protocols/logout_request.c | 9 +-------- lasso/Attic/protocols/logout_response.c | 2 +- lasso/id-ff/defederation.c | 4 +--- lasso/id-ff/identity.c | 1 - lasso/id-ff/login.c | 2 -- lasso/id-ff/logout.c | 12 +++++++----- lasso/id-ff/name_registration.c | 7 +++++-- lasso/id-ff/server.c | 2 +- lasso/id-ff/session.c | 2 -- 9 files changed, 16 insertions(+), 25 deletions(-) commit 7c777b26054c5483cd314032d3479afff0cddca7 Author: Nicolas Clapies Date: Sat Sep 4 09:27:29 2004 +0000 *** empty log message *** lasso/id-ff/logout.c | 4 ---- 1 file changed, 4 deletions(-) commit ad171094373f7283815fd150ab5d6b6a414c5339 Author: Nicolas Clapies Date: Sat Sep 4 09:19:58 2004 +0000 Fixed a lot of bugs in the logout from a SP to others SPs : now it remove each of the assertions SPs at IDPs and IDP returns the real LogoutResponse lasso/id-ff/logout.c | 154 +++++++++++++++++++++++++++------------------------ 1 file changed, 83 insertions(+), 71 deletions(-) commit d276594f3ea1947a61c3a4c2dd8eba2464a0afab Author: Frederic Peters Date: Sat Sep 4 09:04:19 2004 +0000 Pierre Cros improvements docs/lasso-book/common-knowledge.rst | 14 +++++++------ docs/lasso-book/liberty-architecture.rst | 21 ++++++++++++++++++- docs/lasso-book/preface.rst | 35 +++++++++++++++++++++++++------- docs/lasso-book/writing-a-c-sp.txt | 11 +++++----- 4 files changed, 61 insertions(+), 20 deletions(-) commit 282d8f41092bea077348203bd80b3649e098d9f4 Author: Emmanuel Raviart Date: Sat Sep 4 08:11:19 2004 +0000 Made the sample Java code work. java/coldfusion/src/CFLasso.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) commit 570c8031efe34a74e5db053d312ee88b40c127f6 Author: Emmanuel Raviart Date: Sat Sep 4 08:01:50 2004 +0000 Added new object Assertion to C# & Java bindings. csharp/.cvsignore | 1 + csharp/Makefile.am | 2 +- java/.cvsignore | 1 + java/Makefile.am | 3 ++- 4 files changed, 5 insertions(+), 2 deletions(-) commit 5b925b28df42a8d3a31084cd21f241301d7bcc72 Author: Emmanuel Raviart Date: Sat Sep 4 07:49:28 2004 +0000 Corrected Java. java/Makefile.am | 3 ++- java/coldfusion/src/CFLasso.java | 15 +++++++++------ swig/Lasso.i | 1 + 3 files changed, 12 insertions(+), 7 deletions(-) commit 76c318374de0edf6f60fe218c9fe7822ab1f21fd Author: Emmanuel Raviart Date: Fri Sep 3 23:14:15 2004 +0000 Converted C login test to new login API. tests/login_tests.c | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) commit 7fd982f03c6c75bd1e683a3e6f176a4432dc8bd8 Author: Emmanuel Raviart Date: Fri Sep 3 22:20:44 2004 +0000 Added defines neededfor Java binding. swig/Lasso.i | 112 ++++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 99 insertions(+), 13 deletions(-) commit b2ccb0cbb158f72dc9330786d8c95a44817369a5 Author: Nicolas Clapies Date: Fri Sep 3 16:30:38 2004 +0000 *** empty log message *** lasso/id-ff/logout.c | 1 - 1 file changed, 1 deletion(-) commit 7e03fa2ebacf0040ea8d53a8c0e1406c38abdc3d Author: Nicolas Clapies Date: Fri Sep 3 16:28:56 2004 +0000 Fixed problem when checking all remote SP from IDP in lasso_logout_validate_request() : replaced lasso_provider_get_singleLogoutProtocolProfile(provider, lassoProviderTypeIdp, NULL) with lasso_provider_get_singleLogoutProtocolProfile(provider, lassoProviderTypeSp, NULL) lasso/id-ff/logout.c | 3 ++- lasso/id-ff/name_registration.c | 5 ++++- lasso/id-ff/session.c | 4 +--- 3 files changed, 7 insertions(+), 5 deletions(-) commit 595d9b2987127e19256446b211e581818d61cd09 Author: Nicolas Clapies Date: Fri Sep 3 16:25:00 2004 +0000 Updated of lasso_logout_validate_request() : now it returns a code error of -301 (unsupported profile) if an IDP receiving a LogoutRequest via SOAP detects other SPs dont support SOAP method. lasso/id-ff/logout.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) commit 1e05cd748c841830bc6a7d7509b42fa81864cd1e Author: Nicolas Clapies Date: Fri Sep 3 16:12:51 2004 +0000 Updated process of artifact : now the IDP generates an artifact either or not the user authentication succeeded. When the SP resends the artifact to the IDP in a samlp:Request, it builds a samlp:Response message with Success status code value. If an assertion is found from artifact, then it adds it to the response. Finally, the IDP responds to the SP with the SOAP message lasso/id-ff/login.c | 218 +++++++++++++++++++++++++++++++++++++++++++++------- lasso/id-ff/login.h | 16 +++- swig/Lasso.i | 72 +++++++++++++++++ 3 files changed, 278 insertions(+), 28 deletions(-) commit 180834d9246287daadd2991bd13445161280caba Author: Frederic Peters Date: Thu Sep 2 19:35:52 2004 +0000 another serie of ignored files php/.cvsignore | 10 ++++++++++ php/tests/.cvsignore | 3 +++ 2 files changed, 13 insertions(+) commit f405492f8b6011a33589b52e82fbb973c79a484b Author: Frederic Peters Date: Thu Sep 2 19:30:38 2004 +0000 ignore some files csharp/.cvsignore | 3 +++ 1 file changed, 3 insertions(+) commit 2062043d615d38af6e9dfdc997b1f4740c136107 Author: Frederic Peters Date: Thu Sep 2 19:28:22 2004 +0000 ignore a bunch of things java/.cvsignore | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) commit 3d4fdd29713c7a0ba2104415d6e11bf9be0c9670 Author: Emmanuel Raviart Date: Thu Sep 2 19:21:00 2004 +0000 Added missing .cvsignore in tests/data/ tests/data/.cvsignore | 2 ++ tests/data/ca1-la/.cvsignore | 2 ++ tests/data/idp1-la/.cvsignore | 2 ++ tests/data/lecp1-la/.cvsignore | 2 ++ tests/data/sp1-la/.cvsignore | 2 ++ 5 files changed, 10 insertions(+) commit 3038de92edc33856677974eef978675608370dc4 Author: Frederic Peters Date: Thu Sep 2 17:47:59 2004 +0000 things were overcomplicated; simplify a bit (for example the DEPDIR dirty things was necessary because variables were overused; ask me for details if you want) configure.ac | 36 +++++------------------------------- java/Makefile.am | 51 +++++++++++++++++++-------------------------------- php/Makefile.am | 37 ++++++++++--------------------------- python/Makefile.am | 33 +++++++-------------------------- 4 files changed, 41 insertions(+), 116 deletions(-) commit c4b7d3d6c32de33b4071e6755b172417064bde2c Author: Frederic Peters Date: Thu Sep 2 17:05:30 2004 +0000 new classes -> new files csharp/Makefile.am | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 3efabaa8d8b7ab92bb8c7c8fdd0180c11f5649df Author: Frederic Peters Date: Thu Sep 2 08:33:54 2004 +0000 disable xmlsec version check lasso/lasso.c | 2 ++ 1 file changed, 2 insertions(+) commit b67da551e762b2a161d35f9c67d412505604c598 Author: Nicolas Clapies Date: Wed Sep 1 16:49:17 2004 +0000 Removed lasso_session_remove_assertion() in lasso_logout_init_request() at IDP with HTTP Redirect method, added remove of assertion if at IDP and HTTP redirect lasso/id-ff/logout.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit eb9391ec2da2032ed0e169d6badffdfcaf09cb09 Author: Nicolas Clapies Date: Wed Sep 1 16:35:42 2004 +0000 *** empty log message *** lasso/id-ff/logout.c | 7 ------- python/tests/profiles_tests.py | 7 ------- 2 files changed, 14 deletions(-) commit 3988290a837112c45cfeac3b1f2447f0e20202f0 Author: Nicolas Clapies Date: Wed Sep 1 15:40:56 2004 +0000 Removed in python test, hard coded logout dump test, fixed a bug in lasso_logout_new_from_dump() when setting provider id index lasso/id-ff/logout.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) commit 2f842992283f7cf71f3c7b2159e6eda61ec202e2 Author: Christophe Nowicki Date: Wed Sep 1 15:01:59 2004 +0000 PHP IdP Sample : - setup system is working - user management (add, delete, etc ...) - sso login in progress php/Attic/examples/sample-idp/README | 1 + php/Attic/examples/sample-idp/admin_user.php | 190 ++++++++++ php/Attic/examples/sample-idp/index.php | 100 ++++++ php/Attic/examples/sample-idp/login.php | 47 +++ php/Attic/examples/sample-idp/setup.php | 478 +++++++++++++++++++++++++ php/Attic/examples/sample-idp/singleSignOn.php | 56 +++ php/Attic/examples/sample-idp/soapEndpoint.php | 25 ++ php/Attic/examples/sample-idp/user_add.php | 77 ++++ 8 files changed, 974 insertions(+) commit 6b6ba1f14de9c00d4530041871dae58b368480a3 Author: Nicolas Clapies Date: Wed Sep 1 14:14:32 2004 +0000 Moved support of provider index from session to logout. Now only the logout knows the current index of the provider id to request, and the session can only return the provider id from an index lasso/id-ff/logout.c | 54 ++++++++++++++++++++++++++++++----------- lasso/id-ff/logout.h | 44 +++++++++++++++++---------------- lasso/id-ff/session.c | 67 ++++++++++++--------------------------------------- lasso/id-ff/session.h | 8 ++---- swig/Lasso.i | 4 +-- 5 files changed, 82 insertions(+), 95 deletions(-) commit 6ae6d57c53514cf57e158b7b6b0aa3282ab7774e Author: Nicolas Clapies Date: Wed Sep 1 10:52:31 2004 +0000 Added support of index ProviderID in lasso_session_dump() and lasso_session_new_from_dump() lasso/id-ff/session.c | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) commit ca025c083e46d92556d1505f286611a6622ca0bd Author: Nicolas Clapies Date: Wed Sep 1 10:22:32 2004 +0000 Fixed bug when getting relay state in lasso_logout_process_response_msg() lasso/id-ff/logout.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit fca6744b46557a4d5ac534276722ae948213aedd Author: Emmanuel Raviart Date: Wed Sep 1 10:00:47 2004 +0000 Corrected Request and Response for Logout and request for Federation Termination Notification in SWIG. swig/Lasso.i | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) commit 2bde0c2ddb222b9251af8aeb2daa9398bd2d1755 Author: Frederic Peters Date: Wed Sep 1 09:59:53 2004 +0000 removed extra parentheses after return statements; HACKING | 8 -- lasso/Attic/protocols/artifact.c | 22 ++-- lasso/Attic/protocols/authn_request.c | 14 +-- lasso/Attic/protocols/authn_request_envelope.c | 6 +- lasso/Attic/protocols/authn_response.c | 10 +- lasso/Attic/protocols/authn_response_envelope.c | 12 +-- lasso/Attic/protocols/elements/assertion.c | 2 +- .../protocols/elements/authentication_statement.c | 4 +- lasso/Attic/protocols/federation.c | 22 ++-- .../federation_termination_notification.c | 26 ++--- lasso/Attic/protocols/logout_request.c | 28 +++--- lasso/Attic/protocols/logout_response.c | 40 ++++---- .../protocols/name_identifier_mapping_request.c | 6 +- .../protocols/name_identifier_mapping_response.c | 12 +-- lasso/Attic/protocols/provider.c | 50 ++++----- .../protocols/register_name_identifier_request.c | 8 +- .../protocols/register_name_identifier_response.c | 14 +-- lasso/Attic/protocols/request.c | 4 +- lasso/Attic/protocols/response.c | 4 +- lasso/id-ff/defederation.c | 10 +- lasso/id-ff/identity.c | 24 ++--- lasso/id-ff/lecp.c | 52 +++++----- lasso/id-ff/login.c | 68 ++++++------- lasso/id-ff/logout.c | 22 ++-- lasso/id-ff/name_identifier_mapping.c | 42 ++++---- lasso/id-ff/name_registration.c | 20 ++-- lasso/id-ff/profile.c | 40 ++++---- lasso/id-ff/server.c | 28 +++--- lasso/id-ff/session.c | 36 +++---- lasso/lasso.c | 18 ++-- lasso/xml/errors.c | 2 +- lasso/xml/lib_assertion.c | 2 +- lasso/xml/lib_authentication_statement.c | 2 +- lasso/xml/lib_idp_provided_name_identifier.c | 2 +- lasso/xml/lib_old_provided_name_identifier.c | 2 +- lasso/xml/lib_sp_provided_name_identifier.c | 2 +- lasso/xml/lib_subject.c | 2 +- lasso/xml/saml_assertion.c | 2 +- lasso/xml/saml_condition_abstract.c | 2 +- lasso/xml/saml_name_identifier.c | 2 +- lasso/xml/saml_statement_abstract.c | 2 +- lasso/xml/saml_subject_statement_abstract.c | 2 +- lasso/xml/samlp_request_abstract.c | 4 +- lasso/xml/samlp_response_abstract.c | 4 +- lasso/xml/tools.c | 36 +++---- lasso/xml/xml.c | 112 ++++++++++----------- 46 files changed, 412 insertions(+), 420 deletions(-) commit 16fb06a9abc0560ee1b176b20e28702e96759435 Author: Nicolas Clapies Date: Wed Sep 1 09:07:54 2004 +0000 Added free of temporary node object in lasso_logout_new_from_dump() lasso/id-ff/logout.c | 2 ++ 1 file changed, 2 insertions(+) commit 44abe254d8074313a319b6cdc22b9f91ff308c25 Author: Nicolas Clapies Date: Wed Sep 1 09:05:36 2004 +0000 Added parse support of xml message in lasso_logout_response_new_from_export(), added private method lasso_logout_response_new_from_export() lasso/Attic/protocols/logout_response.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) commit 45ecab5e0d4a702de7f49f3925df97d6f629adea Author: Nicolas Clapies Date: Wed Sep 1 09:03:28 2004 +0000 Fixed bug when parsing from an export message in lasso_logout_request_new_from_xml() : call to lasso_node_destroy() at the wrong place lasso/Attic/protocols/logout_request.c | 3 --- 1 file changed, 3 deletions(-) commit e4b4e20151d65ccd6fffb772d889916a9e09d178 Author: Emmanuel Raviart Date: Wed Sep 1 08:18:23 2004 +0000 LassoSession.getAuthenticationMethod argument is now optional. swig/Lasso.i | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 12076bfc00d8d1caf38baa0cb8346ca379483085 Author: Christophe Nowicki Date: Wed Sep 1 08:18:06 2004 +0000 Fix addProvider bug php/Attic/examples/sample-sp/setup.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 06dc7c82484332ef496688432f8f1822a26a660d Author: Nicolas Clapies Date: Wed Sep 1 08:16:35 2004 +0000 Replaced lasso_session_get_next_providerID() with lasso_session_get_first_providerID() lasso/id-ff/session.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 901304c02502a578e06346e1a61f9cabfc236585 Author: Nicolas Clapies Date: Wed Sep 1 08:06:19 2004 +0000 Removed set of msg_relayState in lasso_logout_process_request(), it has no meaning here, but set the msg_relayState in lasso_logout_process_response_msg() lasso/id-ff/logout.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) commit 116de01889e69e41ce14704efbf6e31d37e0715d Author: Emmanuel Raviart Date: Tue Aug 31 21:08:37 2004 +0000 Added a new Python logout test: Make the same Logout.newFromDump enough times => segfault. python/tests/profiles_tests.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) commit 24a9a13529ca7c90ded383ed3abc8b54a5a46f14 Author: Emmanuel Raviart Date: Tue Aug 31 18:36:38 2004 +0000 Corrected request and respond for profiles others than login. Added relayState attribute to LogoutRequest, but it doesn't work. I believe, this is a Lasso bug. swig/Lasso.i | 199 +++++++++++++++++++++++++++++++---------------------------- 1 file changed, 105 insertions(+), 94 deletions(-) commit fac7a1c2746ffa39cd549b7618654e457d286bd3 Author: Nicolas Clapies Date: Tue Aug 31 16:22:12 2004 +0000 Added method lasso_session_get_first_providerID(). Now to get the first providerID use it instead of lasso_session_get_next_providerID() lasso/id-ff/session.c | 25 +++++++++++++++++++++++++ lasso/id-ff/session.h | 2 ++ 2 files changed, 27 insertions(+) commit 202ff8f70746fe3c95b2b946771a7120caacd6c1 Author: Nicolas Clapies Date: Tue Aug 31 16:20:41 2004 +0000 fixed bug in lasso_logout_dump() and lasso_logout_new_from_dump() lasso/Attic/protocols/logout_request.c | 28 ++++++++++++++++++++++- lasso/id-ff/logout.c | 42 +++++++++++++++++----------------- 2 files changed, 48 insertions(+), 22 deletions(-) commit 5ce17cc47026ffa2b878709830f72d3bd1e6e55c Author: Emmanuel Raviart Date: Tue Aug 31 15:40:09 2004 +0000 Added setting of isPassive to False in doc. docs/lasso-book/writing-a-c-sp.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 4271aa6774063d16b1fb22eeccecaf68ab24c453 Author: Frederic Peters Date: Tue Aug 31 12:21:26 2004 +0000 strcmp is used; string.h must be included lasso/id-ff/server.c | 2 ++ 1 file changed, 2 insertions(+) commit 76fbaaa72686deb357dc09138da690ae19fad671 Author: Frederic Peters Date: Tue Aug 31 12:21:09 2004 +0000 g_sprintf is used; gprintf.h must be included lasso/id-ff/logout.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit 5c3aee02420792cf668278e2772040ebb3420887 Author: Frederic Peters Date: Tue Aug 31 12:19:35 2004 +0000 default: in switches lasso/id-ff/login.c | 9 +++++++++ 1 file changed, 9 insertions(+) commit d5f13f48fd01c5f57087279c862c8a07f97734c8 Author: Frederic Peters Date: Tue Aug 31 12:17:17 2004 +0000 removed unused variables lasso/id-ff/defederation.c | 3 --- 1 file changed, 3 deletions(-) commit 0519a8de180ff346f0f496f78fce8000fb30fad1 Author: Frederic Peters Date: Tue Aug 31 12:16:23 2004 +0000 g_sprintf is used; glib/gprintf.h must be included lasso/id-ff/defederation.c | 2 ++ 1 file changed, 2 insertions(+) commit f96393e58c830f498afb42018fa6a443c4749052 Author: Frederic Peters Date: Tue Aug 31 12:15:32 2004 +0000 strlen is used; string.h must be included lasso/id-ff/defederation.c | 2 ++ 1 file changed, 2 insertions(+) commit 5049245d148a6f689d74cd254664bcb65b36e14e Author: Frederic Peters Date: Tue Aug 31 12:14:43 2004 +0000 properly cast request to needed type lasso/Attic/protocols/request.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 0a17ff11d888652cef936e99ad338eedcfbb890c Author: Frederic Peters Date: Tue Aug 31 12:12:34 2004 +0000 default: to set descriptor to NULL; so it won't be undefined on the next line where it was tested. lasso/Attic/protocols/provider.c | 3 +++ 1 file changed, 3 insertions(+) commit 7bdaf1b0625742194e8aa815eecf88159480efe6 Author: Frederic Peters Date: Tue Aug 31 12:10:53 2004 +0000 xmlSecBase64Encode is used; xmlsec/base64.h must be included lasso/Attic/protocols/authn_response_envelope.c | 1 + 1 file changed, 1 insertion(+) commit 7406c707e0b1caea78900327efab9358ab67eba6 Author: Frederic Peters Date: Tue Aug 31 12:09:36 2004 +0000 g_sprintf is used; gprintf.h must be included; default: statement in switch. lasso/xml/xml.c | 4 ++++ 1 file changed, 4 insertions(+) commit 00f88598ee402421dedb55d50d359c7b55e612a5 Author: Nicolas Clapies Date: Tue Aug 31 12:05:51 2004 +0000 Added support of code error LASSO_PROFILE_ERROR_MISSING_REQUEST in lasso_logout_build_response_msg() lasso/id-ff/logout.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) commit de018d15738a699cabc7d482b405f90109b219ed Author: Nicolas Clapies Date: Tue Aug 31 12:05:04 2004 +0000 Added code error : LASSO_PROFILE_ERROR_MISSING_REQUEST. It indicates that lasso needs a request to process a task. For example, when building a response message lasso/xml/errors.c | 2 ++ lasso/xml/errors.h | 1 + swig/Lasso.i | 2 ++ 3 files changed, 5 insertions(+) commit 0eb153a361a1efc21c1f814a188ab1c6d45a8ec3 Author: Frederic Peters Date: Tue Aug 31 11:40:08 2004 +0000 cvs must ignore cil and dev packages directory .cvsignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 9bd67e516ae07fb2eaa9510091ddccf4ccaab935 Author: Frederic Peters Date: Tue Aug 31 11:40:08 2004 +0000 cvs must ignore cil and dev packages directory debian/.cvsignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit a5dcd754ec9483c287f4200555c5deb7ead27c0d Author: Frederic Peters Date: Tue Aug 31 11:39:36 2004 +0000 php4 packaging and renamed liblasso0-python2.3 to python2.3-lasso .cvsignore | 9 ++++---- changelog | 4 ++-- control | 26 ++++++++++++++++++---- php4-lasso.examples | 1 + php4-lasso.files | 2 ++ liblasso0-python2.3.files => python2.3-lasso.files | 0 rules | 4 ++-- 7 files changed, 33 insertions(+), 13 deletions(-) commit d94ba8cff23c22859bfcf1e9c49e2b7b33c08f90 Author: Frederic Peters Date: Tue Aug 31 11:39:36 2004 +0000 php4 packaging and renamed liblasso0-python2.3 to python2.3-lasso debian/.cvsignore | 9 ++++---- debian/changelog | 4 ++-- debian/control | 26 ++++++++++++++++++---- debian/php4-lasso.examples | 1 + debian/php4-lasso.files | 2 ++ ...asso0-python2.3.files => python2.3-lasso.files} | 0 debian/rules | 4 ++-- 7 files changed, 33 insertions(+), 13 deletions(-) commit 5d55d61805c9f6a013e15e292d4a074d17b17aeb Author: Emmanuel Raviart Date: Tue Aug 31 10:54:48 2004 +0000 Typo correction. lasso/lasso.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit cffc28fd25f92a0fe7d57a466a7f3ef978ed34fd Author: Nicolas Clapies Date: Tue Aug 31 10:48:50 2004 +0000 Fixed bug when attempting to parse a query message : now if a key / value with = is incomplete, it skips it and completes the process of the list lasso/xml/tools.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) commit aefba020f6b316e8c463df7aa9f64c59ae3b88ea Author: Nicolas Clapies Date: Tue Aug 31 10:43:03 2004 +0000 Added in parse of query a test if the data list is not NULL lasso/Attic/protocols/authn_request.c | 4 ++++ lasso/Attic/protocols/federation_termination_notification.c | 4 ++++ lasso/Attic/protocols/logout_request.c | 8 ++++++-- lasso/Attic/protocols/logout_response.c | 4 ++++ 4 files changed, 18 insertions(+), 2 deletions(-) commit 688628679a5b1c757f8f25a74d6b8d00e2652e8d Author: Emmanuel Raviart Date: Tue Aug 31 10:26:40 2004 +0000 Added Lasso version constants to SWIG. swig/Lasso.i | 10 ++++++++++ 1 file changed, 10 insertions(+) commit 5b2ded27ab44fda1a73c73cb949b4f69f336d181 Author: Emmanuel Raviart Date: Tue Aug 31 10:20:11 2004 +0000 Testing logout.processResponseMsg with a really bad URL. => red alert. python/tests/profiles_tests.py | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) commit 78bf15ec270fc853569a1b8766560105e69f8a73 Author: Christophe Nowicki Date: Tue Aug 31 10:17:55 2004 +0000 new version of the PHP service provider made with the new Swig PHP binding php/Attic/examples/sample-sp/README | 1 + php/Attic/examples/sample-sp/admin_user.php | 162 +++++++++++ php/Attic/examples/sample-sp/assertionConsumer.php | 166 +++++++++++ php/Attic/examples/sample-sp/index.php | 163 +++++++++++ php/Attic/examples/sample-sp/login.php | 53 ++++ php/Attic/examples/sample-sp/logout.php | 104 +++++++ php/Attic/examples/sample-sp/register.php | 86 ++++++ php/Attic/examples/sample-sp/setup.php | 316 +++++++++++++++++++++ 8 files changed, 1051 insertions(+) commit 10a1215399f6d4f251cb3d403f3726cb9fee5c8d Author: Nicolas Clapies Date: Tue Aug 31 10:09:51 2004 +0000 Fixed missing feature in lasso_process_request_msg() and lasso_logout_process_response() : now if the parse of the query message is wron, then it returns LASSO_PROFILE_ERROR_INVALID_QUERY code error lasso/id-ff/logout.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) commit 48a7129ed97a4fdd550deed1e2870116dec57790 Author: Nicolas Clapies Date: Tue Aug 31 10:08:28 2004 +0000 Fixed bug in lasso_logout_response_new_from_export() : now if a query message and if an attribute or element key / value is missing, return NULL lasso/Attic/protocols/logout_response.c | 102 +++++++++++++++++--------------- 1 file changed, 54 insertions(+), 48 deletions(-) commit 20da442593bb6f0413f702ed32bd9c52de944aba Author: Nicolas Clapies Date: Tue Aug 31 09:56:35 2004 +0000 Fixed bug in lasso_logout_request_new_from_export() : now if a query message and if an attribute or element key / value is missing, return NULL lasso/Attic/protocols/logout_request.c | 44 ++++++++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-) commit 6710fec968ed73bc88c4c8ab67121be37b1fa785 Author: Emmanuel Raviart Date: Mon Aug 30 19:51:51 2004 +0000 New logout test => Red alert! python/tests/profiles_tests.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) commit e5c29d9105924a773ad2e7980fde14328f71c8e6 Author: Emmanuel Raviart Date: Mon Aug 30 17:08:04 2004 +0000 Removed low-level bindings from SWIG. In PHP, error constants keep their LASSO_ prefix (because PHP4 doesn't have the notion of namespaces). swig/Lasso.i | 250 ++++++++--------------------------------------------------- 1 file changed, 32 insertions(+), 218 deletions(-) commit 2de57fdd4b418b85ebe3779f355b8c8b6ee6ec56 Author: Nicolas Clapies Date: Mon Aug 30 16:37:33 2004 +0000 Little lean of the code lasso/id-ff/logout.c | 94 ++++++++++++++++++++++++---------------------------- 1 file changed, 44 insertions(+), 50 deletions(-) commit 4a5dd005ac38f86b072ba6a8678223a8a0405c56 Author: Christophe Nowicki Date: Mon Aug 30 16:32:00 2004 +0000 PHP Binding : PHP does not handle namepaces, added lasso_ prefix for all functions. swig/Lasso.i | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 72 insertions(+), 1 deletion(-) commit 2e0fbcb6b6785c95de3eb2298ec60606951139d6 Author: Nicolas Clapies Date: Mon Aug 30 16:19:48 2004 +0000 Fixed problem when validating the notification : test the remote provider type to get the return url lasso/id-ff/defederation.c | 64 +++++++++++++++++++++++++++++++--------------- 1 file changed, 43 insertions(+), 21 deletions(-) commit 289c08c485492bdbdbf3610f004838c2b3cc0744 Author: Nicolas Clapies Date: Mon Aug 30 15:36:19 2004 +0000 Added a test in lasso_defederation_build_notification_msg() to test if the federation termination service url exists lasso/id-ff/defederation.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) commit 5372db6d37c14951430f80d9361fff66a0ee8385 Author: Nicolas Clapies Date: Mon Aug 30 14:18:43 2004 +0000 Fixed call of lasso_session_remove_assertion() in the right place in init_request() and process_response_msg() lasso/id-ff/logout.c | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) commit e5a91a58cec8a5dbab7e49b087585f7a646574ec Author: Nicolas Clapies Date: Mon Aug 30 13:14:25 2004 +0000 Fixed error in method name : renamed lasso_provider_get_singleLogoutServiceURL() to lasso_provider_get_registerNameIdentifierServiceURL() lasso/id-ff/name_registration.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 7d2db04eb5979598124c8630aa9263fb263b2136 Author: Nicolas Clapies Date: Mon Aug 30 12:48:25 2004 +0000 Added comment in lasso_defederation_validate_notification() : indicate that query is not signed because of the crypted optional relay state lasso/id-ff/defederation.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit ddbded767f937d827b2838bc87b49ac3b491f001 Author: Nicolas Clapies Date: Mon Aug 30 12:45:14 2004 +0000 Added building of federation termination notification return url with QUERY if a RelayState is in the notification lasso/id-ff/defederation.c | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) commit 340dae24ec7f0fb196e9d18e5ec330dd3907c6a1 Author: Nicolas Clapies Date: Mon Aug 30 12:19:39 2004 +0000 Added lasso_logout_new_from_dump(). Need to be tested lasso/id-ff/logout.c | 126 +++++++++++++++++++++++++++------------------------ 1 file changed, 66 insertions(+), 60 deletions(-) commit df435e4254dcce573652fc4852bc5f607193a422 Author: Nicolas Clapies Date: Mon Aug 30 12:18:52 2004 +0000 Added parsing of status code value in lasso_logout_response_new_from_query(). Now it sets the Status, StatusCode and his Value attribute in logoutResponse lasso/Attic/protocols/logout_response.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) commit d13e4d56ac9fbfd9ee5ab89cbdaab4058c49ab85 Author: Nicolas Clapies Date: Mon Aug 30 10:37:38 2004 +0000 Fixed bug when dumping and loading from dump server with no metatadata. Now if metadata of the server exists, it adds a ServerMetadata node and embbeds it lasso/id-ff/server.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) commit 693e43f54866ff5c0825c816982128f2dd4582e7 Author: Emmanuel Raviart Date: Mon Aug 30 09:58:08 2004 +0000 A few corrections to SWIG binding (a quick commit, so that Christophe can work on it). swig/Lasso.i | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) commit cf811b7aefbcc9886341ffd862ecb334591ac02f Author: Frederic Peters Date: Mon Aug 30 09:11:01 2004 +0000 swig generate new objects/filenames csharp/.cvsignore | 11 ++++------- csharp/Makefile.am | 10 +++++----- 2 files changed, 9 insertions(+), 12 deletions(-) commit 8aa90097e4edb016dc0b1225ecc9cd6653eb6d72 Author: Frederic Peters Date: Mon Aug 30 09:00:41 2004 +0000 returns 0 on success lasso/xml/xml.c | 2 ++ 1 file changed, 2 insertions(+) commit cd567ad391f0c9a96083b930557905d786dadd7e Author: Emmanuel Raviart Date: Sun Aug 29 23:57:46 2004 +0000 SWIG high-level binding now uses camelCase. Updated SWIG binding to support Java high-level classes. Simplified java/Makefile.am (but now, it needs to be reworked by an autotools expert). ColdFusion simple Java test compiles ok. java/Makefile.am | 36 +- java/coldfusion/src/CFLasso.java | 42 +- java/lasso-fragment.java | 21 - python/.cvsignore | 2 + python/tests/errorchecking_tests.py | 8 +- python/tests/profiles_tests.py | 44 +- swig/Lasso.i | 790 +++++++++++++++++++----------------- 7 files changed, 474 insertions(+), 469 deletions(-) commit c0d276aa16fe15c739e3979b1e74a7b0f43e7126 Author: Emmanuel Raviart Date: Sun Aug 29 14:26:20 2004 +0000 SWIG should now generate a high-level binding with classes, so I have removed the -noproxy option. java/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 0351d7076cac93e7d9aa1b79361d284f1b02d492 Author: Frederic Peters Date: Sun Aug 29 12:37:07 2004 +0000 updated c# binding for new class names csharp/.cvsignore | 53 ++++++++++++++++++++++------------------------------- csharp/Makefile.am | 16 +++++----------- 2 files changed, 27 insertions(+), 42 deletions(-) commit 553076b8ff95689b03a39d2215b13f8c3359eafd Author: Frederic Peters Date: Sun Aug 29 09:31:54 2004 +0000 some tests do not have descriptions python/tests/XmlTestRunner.py | 2 ++ 1 file changed, 2 insertions(+) commit 95779ca72a20fcd52f386e029ad6b1a7b2cc2ad7 Author: Frederic Peters Date: Sun Aug 29 09:29:36 2004 +0000 corretly escape xml python/tests/XmlTestRunner.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) commit a418f7ee029605bf86e3b717955e04b9854b6400 Author: Emmanuel Raviart Date: Sun Aug 29 09:04:53 2004 +0000 Removed obsolete Python doc. python/doc/.cvsignore | 4 - python/doc/Makefile.am | 6 - python/doc/doxygen.conf | 1142 -------------------- python/doc/pythfilter.py | 602 ----------- python/doc/tutorial/.cvsignore | 2 - python/doc/tutorial/Makefile.am | 7 - python/doc/tutorial/sp-init.py | 25 - .../tutorial/sp-login-process-authn-response.py | 35 - python/doc/tutorial/sp-login-send-authn-request.py | 29 - ...ogout-process-idp-initiated-redirect-request.py | 33 - ...sp-logout-process-idp-initiated-soap-request.py | 33 - python/doc/tutorial/sp-logout-process-response.py | 22 - python/doc/tutorial/sp-logout-send-request.py | 32 - 13 files changed, 1972 deletions(-) commit 51adf42fdc0cec17e5e4420aa36e1d8f75252bac Author: Emmanuel Raviart Date: Sun Aug 29 08:31:59 2004 +0000 When Lasso doesn't recognize the URL query, it now throws a SyntaxError exception. python/tests/profiles_tests.py | 4 +-- swig/Lasso.i | 60 ++++++++++++++++++++++++++++-------------- 2 files changed, 42 insertions(+), 22 deletions(-) commit b27283f775f6f3ca65c6519427e83861baaf5229 Author: Emmanuel Raviart Date: Sat Aug 28 21:40:31 2004 +0000 Removed references to lassomod in .cvsignore. python/.cvsignore | 2 -- 1 file changed, 2 deletions(-) commit 2ca1008182b5767b0715f9c1fe0deab3d0d2e8a6 Author: Emmanuel Raviart Date: Sat Aug 28 21:37:18 2004 +0000 SWIG now produces high-level bindings. (python/Makefile.am needs some cleaning IMHO, but I don't understant it). configure.ac | 6 +- lasso/Attic/protocols/artifact.c | 44 +- lasso/Attic/protocols/provider.c | 64 +- lasso/id-ff/login.c | 36 +- lasso/id-ff/server.c | 18 +- lasso/xml/errors.c | 16 +- lasso/xml/errors.h | 20 +- lasso/xml/saml_assertion.c | 2 +- lasso/xml/samlp_request_abstract.c | 6 +- lasso/xml/samlp_response_abstract.c | 6 +- lasso/xml/xml.c | 74 +-- python/Makefile.am | 16 +- python/lasso.py | 715 --------------------- python/tests/profiles_tests.py | 10 +- swig/Lasso.i | 1186 +++++++++++++++++++++++++++++------ 15 files changed, 1156 insertions(+), 1063 deletions(-) commit 2988cacb8d34cba4c8c2479996a4d672ed6bce45 Author: Frederic Peters Date: Sat Aug 28 20:15:48 2004 +0000 renamed API reference to API reference (was reference manual) docs/reference/lasso.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 743f91ffc42360ba5352375854038fa0f9f48b41 Author: Frederic Peters Date: Sat Aug 28 20:13:15 2004 +0000 xml encoding of special characters (&, <, >) python/tests/XmlTestRunner.py | 4 ++++ 1 file changed, 4 insertions(+) commit 5dd054bfd892bf6dd2f224b47b5fd3b61f30fe1e Author: Frederic Peters Date: Sat Aug 28 12:58:27 2004 +0000 new URLs and version info for 0.3.0 doap.rdf | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) commit 99629cd6d86472e0c09a2303a8552c87def860c5 Author: Emmanuel Raviart Date: Sat Aug 28 12:35:42 2004 +0000 Converted Identity & Session to real objects in SWIG bindings. python/lasso.py | 36 ---------------------------------- swig/Lasso.i | 61 +++++++++++++++++++++++++++++++++++++++++++++------------ 2 files changed, 49 insertions(+), 48 deletions(-) commit 2311bac6261f22d3112ae2f5727fd409d0f17101 Author: Emmanuel Raviart Date: Sat Aug 28 12:18:43 2004 +0000 Hide LibAuthnRequest attributes from SWIG binding. swig/Lasso.i | 27 --------------------------- 1 file changed, 27 deletions(-) commit d8691794d957623116b61d2172efc70e18baad63 Author: Emmanuel Raviart Date: Sat Aug 28 12:07:58 2004 +0000 Added preliminary error throwing in SWIG binding. Replaced simple object methods whith #define. swig/Lasso.i | 59 ++++++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 40 insertions(+), 19 deletions(-) commit c2c31c20d00094f30f8e38ec7ac30c56bc1d8a2a Author: Emmanuel Raviart Date: Sat Aug 28 07:31:57 2004 +0000 Converted SWIG Server into a high-level class with new_from_dump static method and default value for some arguments. python/lasso.py | 25 -------------------- swig/Lasso.i | 72 +++++++++++++++++++++++++++++++++++++-------------------- 2 files changed, 47 insertions(+), 50 deletions(-) commit e7e4d55ce5e3043b693296d9ce29ecaf8fdc80cb Author: Emmanuel Raviart Date: Sat Aug 28 07:25:23 2004 +0000 Renamed login_tests.py to profiles_tests.py. Added Server tests (=> discovered bug #265). python/tests/{login_tests.py => profiles_tests.py} | 39 +++++++++++++++++++--- python/tests/tests.py | 2 +- 2 files changed, 36 insertions(+), 5 deletions(-) commit 8425480fb7bf6906c970a75c13826da480ae46e1 Author: Emmanuel Raviart Date: Fri Aug 27 22:32:59 2004 +0000 Transformed LassoAuthnRequest as a true SWIG class with attributes and methods for all bindings. python/lasso.py | 39 ----------- python/tests/login_tests.py | 4 +- swig/Lasso.i | 153 ++++++++++++++++++++++++++++++++++++-------- 3 files changed, 129 insertions(+), 67 deletions(-) commit 0791ef056f421368f4a8079d17ccf96cbbfbd8d5 Author: Nicolas Clapies Date: Fri Aug 27 16:43:31 2004 +0000 *** empty log message *** lasso/id-ff/logout.c | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) commit a646c1bddb05e14a723ba352dc293ba6e9af1aff Author: Nicolas Clapies Date: Fri Aug 27 16:36:27 2004 +0000 *** empty log message *** lasso/id-ff/logout.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) commit 27d48289411090096aff5ffe117c8d212402b1c7 Author: Emmanuel Raviart Date: Fri Aug 27 16:29:55 2004 +0000 Added method Logout.reset_session_index in Python high-level binding. python/lasso.py | 5 +++++ 1 file changed, 5 insertions(+) commit ecbb17fb4ce52b378ee92563691f3e3d63b08020 Author: Nicolas Clapies Date: Fri Aug 27 16:28:11 2004 +0000 *** empty log message *** lasso/id-ff/logout.c | 139 +++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 129 insertions(+), 10 deletions(-) commit 8a333c67215c8d6eab42534e97df3f4945c290c9 Author: Emmanuel Raviart Date: Fri Aug 27 15:23:54 2004 +0000 Added support for "invalid query" errors in Python high-level binding. python/lasso.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) commit 8dfb46a2f7ca1b64d6a5e7e58115b4417a98e7c5 Author: Nicolas Clapies Date: Fri Aug 27 15:18:49 2004 +0000 *** empty log message *** lasso/id-ff/defederation.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 7c76c086ea2d7a64cfb74f6b38d018279bce95cb Author: Nicolas Clapies Date: Fri Aug 27 15:02:03 2004 +0000 Renamed method name lasso_session_get_next_assertion_remote_providerID to lasso_session_get_next_providerID docs/reference/lasso-sections.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 225d5969cf70637b46ee1fd649047df358c12343 Author: Nicolas Clapies Date: Fri Aug 27 15:00:52 2004 +0000 Added return of code error LASSO_PROFILE_ERROR_INVALID_QUERY when an error occurs while parsing a federation termination notification message query in lasso_defederation_process_notification_msg() lasso/id-ff/defederation.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) commit a58772ba19422e0644442639a43d42cc8be6dad8 Author: Nicolas Clapies Date: Fri Aug 27 14:50:46 2004 +0000 Added code error LASSO_PROFILE_ERROR_INVALID_QUERY, returned when an error occurs while parsing a query message lasso/xml/errors.c | 3 +++ lasso/xml/errors.h | 2 ++ swig/Lasso.i | 4 ++++ 3 files changed, 9 insertions(+) commit 497181fc6a44388a91af7f08dbe411977e75c083 Author: Emmanuel Raviart Date: Fri Aug 27 14:41:09 2004 +0000 Corrected SWIG binding. Corrected Python tests. python/lasso.py | 11 +++++++---- python/tests/login_tests.py | 21 +++++++++++++++++++-- swig/Lasso.i | 10 +++++----- 3 files changed, 31 insertions(+), 11 deletions(-) commit eaa4b813fcd0f7aa1152d98998afe5b59556142f Author: Nicolas Clapies Date: Fri Aug 27 13:44:07 2004 +0000 Added index attribute (session->index_providerID) of next provider id returned when a call to lasso_session_get_providerID(), added lasso_session_reset_index_providerID() to reset the index to the first provider id of assertion list. the index is decremented when removing assertion. lasso_get_next_providerID() returns NULL if there is no assertion anymore or if the index point is at the end of the list. Added lasso_logout_get_next_providerID() lasso_logout_reset_index_providerID() to wrap session method lasso/id-ff/logout.c | 301 +++++++++++++++++++++++++------------------------- lasso/id-ff/logout.h | 9 +- lasso/id-ff/session.c | 81 +++++++++----- lasso/id-ff/session.h | 17 ++- 4 files changed, 222 insertions(+), 186 deletions(-) commit 3ed5fa5681451b2407e316f01f22225f9d758e6d Author: Emmanuel Raviart Date: Fri Aug 27 13:29:07 2004 +0000 Replaced SWIG specific functions to access "request" and "response" attributes of profiles, with SWIG read-only attributes. python/lasso.py | 32 +++++++++++++++------ swig/Lasso.i | 87 +++++++++++++++++++++++++++++++++------------------------ 2 files changed, 74 insertions(+), 45 deletions(-) commit 325f18984a0d4bc2b8b9c2067af901f9d542dedc Author: Nicolas Clapies Date: Fri Aug 27 11:09:27 2004 +0000 Removed g_assert in samlp_request_abstract object when setting required attributes and elements. Added tests in federation termination notification building from QUERY export for required elements, return NULL if error, notification object if ok .../federation_termination_notification.c | 43 +++++++++++++++++++++- lasso/xml/samlp_request_abstract.c | 40 ++++++++++---------- 2 files changed, 62 insertions(+), 21 deletions(-) commit 31aa53988b3d28ef575004985bbaf300e9dc7b0c Author: Emmanuel Raviart Date: Fri Aug 27 10:56:39 2004 +0000 Removed SWIG Lasso.c file. Added a Python test for defederation (currently it aborts). csharp/Makefile.am | 3 +- java/Makefile.am | 4 +-- python/Makefile.am | 3 +- python/tests/login_tests.py | 27 +++++++++++++++- swig/Lasso.c | 75 --------------------------------------------- swig/Lasso.i | 44 +++++++++++++++++++++----- swig/Makefile.am | 2 +- 7 files changed, 68 insertions(+), 90 deletions(-) commit 740fcce66a749a8b1cf4ea86a41b98a5d89734ed Author: Frederic Peters Date: Fri Aug 27 10:54:51 2004 +0000 more on single sign on docs/lasso-book/check-functions.py | 5 ++- docs/lasso-book/single-sign-on.rst | 69 ++++++++++++++++++++++++++------------ 2 files changed, 52 insertions(+), 22 deletions(-) commit 67496408bda1fea782c7065f57d6c966a94f9db3 Author: Frederic Peters Date: Thu Aug 26 21:46:09 2004 +0000 searches all text files for unknown functions docs/lasso-book/check-functions.py | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) commit 66146f05f047df8b7afe9a87eaf6bd7128618a48 Author: Frederic Peters Date: Thu Aug 26 19:33:38 2004 +0000 improvement docs/lasso-book/single-sign-on.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit f642e8bfbc3573844941bf2fbd58301b638adf43 Author: Emmanuel Raviart Date: Thu Aug 26 19:14:25 2004 +0000 Forgot to declare a parameter as optionnal. python/lasso.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 0c32f3bcbbc00f63f126098cc451a9cd2a22f3c4 Author: Emmanuel Raviart Date: Thu Aug 26 16:46:38 2004 +0000 Added constant lassoHttpMethodAny. Added error constants to SWIG (and one to Python). lasso/id-ff/profile.h | 3 ++- python/lasso.py | 29 +++++++++++++++++++++++------ swig/Lasso.i | 40 ++++++++++++++++++++++++++++++++++++---- 3 files changed, 61 insertions(+), 11 deletions(-) commit 589c3383958157e0769d5ea115fd52334c738e07 Author: Frederic Peters Date: Thu Aug 26 16:31:12 2004 +0000 new parameter to lasso_logout_init_... docs/lasso-book/writing-a-c-sp.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit d41db141e1095f67e8c8c50c5c7101133ce10cdd Author: Frederic Peters Date: Thu Aug 26 16:20:19 2004 +0000 fix included file name lasso/lasso.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 0f36d58506501913a720947e9c2c28cf7fe1015e Author: Nicolas Clapies Date: Thu Aug 26 16:07:56 2004 +0000 Added a param to method lasso_defederation_init_notification(). Now if it is set, lasso can choose a specific defederation protocol profile depending on the http method value of this param lasso/id-ff/defederation.c | 3 ++- lasso/id-ff/defederation.h | 3 ++- swig/Lasso.i | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) commit ac190494860fe052695de784caf2e218961aa439 Author: Nicolas Clapies Date: Thu Aug 26 15:57:55 2004 +0000 Replaced xmlFree with g_free in lasso_logout_get_next_providerID() for current_provider_id lasso/id-ff/logout.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 84d71721cf32c92eac19c9de73cd2a889e9de65c Author: Nicolas Clapies Date: Thu Aug 26 15:33:37 2004 +0000 *** empty log message *** lasso/id-ff/register_name_identifier.c | 572 --------------------------------- lasso/id-ff/register_name_identifier.h | 87 ----- 2 files changed, 659 deletions(-) commit d792b5aa1696531db70f33012ca8648f6e8576fd Author: Nicolas Clapies Date: Thu Aug 26 15:32:48 2004 +0000 Renamed register_name_identifier.* to name_registration.* files lasso/id-ff/Makefile.am | 4 +- lasso/id-ff/name_registration.c | 572 ++++++++++++++++++++++++++++++++++++++++ lasso/id-ff/name_registration.h | 87 ++++++ 3 files changed, 661 insertions(+), 2 deletions(-) commit 8404a80debd01abc9e48da437b38f6dd7445e59c Author: Nicolas Clapies Date: Thu Aug 26 14:16:47 2004 +0000 Oups, missing commit of the new Lasso.i swig file :p swig/Lasso.i | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit faa4e2296316148805f9ddea4cf7cd5794179177 Author: Nicolas Clapies Date: Thu Aug 26 14:15:30 2004 +0000 Added a param to method lasso_logout_init_request(). Now if it is set, lasso can choose a specific logout protocol profile depending on the http method value of this param lasso/id-ff/logout.c | 3 ++- lasso/id-ff/logout.h | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) commit cb99b4a692d8efd289eb9277c37353a740e4d498 Author: Frederic Peters Date: Thu Aug 26 13:55:08 2004 +0000 removed revision docs/lasso-book/book.rst | 1 - 1 file changed, 1 deletion(-) commit 59b1ed8fb02052770377538d7965e5242b74c519 Author: Frederic Peters Date: Thu Aug 26 13:54:21 2004 +0000 More on sso profile; sp-side docs/lasso-book/Makefile.am | 2 +- docs/lasso-book/getting-lasso.rst | 4 +- docs/lasso-book/single-sign-on.rst | 113 ++++++++++++++++++++++++++++++++++++- 3 files changed, 114 insertions(+), 5 deletions(-) commit 338293daa70a408b164cd4c7d4018574f97f885f Author: Nicolas Clapies Date: Thu Aug 26 13:43:45 2004 +0000 *** empty log message *** lasso/id-ff/logout.c | 6 +++--- lasso/id-ff/logout.h | 4 ++-- lasso/xml/errors.c | 4 ++-- lasso/xml/errors.h | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) commit d546af51b1522a1f3457a47a16deea957d1e8aab Author: Nicolas Clapies Date: Thu Aug 26 13:24:07 2004 +0000 *** empty log message *** lasso/id-ff/logout.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 81ea440da3f659fb7c4b67648bac9a47ae5b5ea8 Author: Nicolas Clapies Date: Thu Aug 26 13:20:45 2004 +0000 Rename constant LASSO_LOGOUT_ERROR_UNSUPPORTED_PROFILLE to LASSO_PROFILE_ERROR_UNSUPPORTED_PROFILE, now can be use by all profiles lasso/xml/errors.c | 4 ++-- lasso/xml/errors.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) commit a1aac4c4c5af0317b1a2e0f1977f9afb44acb219 Author: Frederic Peters Date: Thu Aug 26 13:18:39 2004 +0000 new lasso documentation docs/lasso-book/Makefile.am | 14 +- docs/lasso-book/book.rst | 35 + docs/lasso-book/common-knowledge.rst | 175 ++ docs/lasso-book/figures/single-logout.png | Bin 0 -> 94664 bytes docs/lasso-book/figures/single-logout.svg | 3105 ++++++++++++++++++++++++++++ docs/lasso-book/figures/single-sign-on.png | Bin 0 -> 57131 bytes docs/lasso-book/figures/single-sign-on.svg | 2661 ++++++++++++++++++++++++ docs/lasso-book/getting-lasso.rst | 131 ++ docs/lasso-book/integration.rst | 7 + docs/lasso-book/language-bindings.rst | 18 + docs/lasso-book/lasso-architecture.rst | 45 + docs/lasso-book/liberty-architecture.rst | 75 + docs/lasso-book/other-profiles.rst | 7 + docs/lasso-book/preface.rst | 28 + docs/lasso-book/single-sign-on.rst | 105 + 15 files changed, 6403 insertions(+), 3 deletions(-) commit 22f66483a30648a03df0bfda3a8c5ec138555ef1 Author: Nicolas Clapies Date: Thu Aug 26 12:42:35 2004 +0000 Added remove of assertion in lasso_logout_init_request(), and lasso_logout_process_response_msg() if there was an error while processing a LogoutResponse with HTTP SOAP method, added a returned code error for Unsupported profile status code lasso/id-ff/logout.c | 34 ++++++++++++++++++++-------------- lasso/xml/errors.c | 3 +++ lasso/xml/errors.h | 2 ++ 3 files changed, 25 insertions(+), 14 deletions(-) commit 3e9cf0bcd3f3cff497114cdecd3ce003b02bb339 Author: Emmanuel Raviart Date: Thu Aug 26 10:56:24 2004 +0000 Moved SWIG constructors and destructors from Lasso.c to Lasso.i. swig/Lasso.c | 113 ----------------------------------------------------------- swig/Lasso.i | 64 +++++++++++++++++++++++++-------- 2 files changed, 50 insertions(+), 127 deletions(-) commit 36d57b75435bbeba7d00066fa6b997def09cfec8 Author: Nicolas Clapies Date: Wed Aug 25 16:31:54 2004 +0000 Added tests to verify if the request message is a LogoutRequest in lasso_login_process_request_msg() and if the response message is a LogoutResponse in lasso_logout_process_response_msg() lasso/id-ff/logout.c | 36 ++++++++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) commit de2533fadf47a7af6e74d45e87e3ee2b875965ad Author: Nicolas Clapies Date: Wed Aug 25 16:24:21 2004 +0000 Added a test in lasso_login_init_from_authn_request_msg() to verify if the request message is an AuthnRequest message, if not, returns a code error lasso/id-ff/login.c | 6 ++++++ 1 file changed, 6 insertions(+) commit 5e8b43d8c73d95248adfce5984e8781b953baed6 Author: Nicolas Clapies Date: Wed Aug 25 15:30:22 2004 +0000 added include for string.h lasso/id-ff/logout.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit d93a9671bb4ae88e71d07c34360ea54db0afd3cd Author: Nicolas Clapies Date: Wed Aug 25 14:41:04 2004 +0000 Added in lasso_login_process_authn_response_msg() setting of msg_relayState from lib:RelayState of AuthnResponse message if exists, else msg_relayState is set to NULL lasso/id-ff/login.c | 5 +++++ 1 file changed, 5 insertions(+) commit 88002d5b6f39bead9e0116858e25c9b156dc7b81 Author: Nicolas Clapies Date: Wed Aug 25 12:52:22 2004 +0000 *** empty log message *** lasso/id-ff/defederation.c | 3 --- 1 file changed, 3 deletions(-) commit 2fa6620d597171f708dd2b6fe874afadea65a904 Author: Nicolas Clapies Date: Wed Aug 25 12:49:39 2004 +0000 fixed bug : at a done label, use to remove a provider got with lasso_provider_get_ref() lasso/id-ff/defederation.c | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) commit 09f7afd9909d9a6e5b6c0d148e2e8ba62648dc78 Author: Emmanuel Raviart Date: Wed Aug 25 10:57:45 2004 +0000 Added a --source-dir option to tests. python/tests/errorchecking_tests.py | 15 +++++++++++---- python/tests/login_tests.py | 35 +++++++++++++++++++++-------------- python/tests/tests.py | 21 ++++++++++++++++++--- 3 files changed, 50 insertions(+), 21 deletions(-) commit 9d460cf67c3999a0ec7723c377a60df07268b5c8 Author: Emmanuel Raviart Date: Wed Aug 25 10:12:13 2004 +0000 Removed obsolete Python test framework. python/tests/IdentityProvider.py | 257 -------- python/tests/LibertyEnabledClientProxy.py | 131 ----- python/tests/LibertyEnabledProxy.py | 65 --- python/tests/Provider.py | 60 -- python/tests/ServiceProvider.py | 321 ---------- python/tests/abstractweb.py | 329 ----------- python/tests/assertions.py | 126 ---- python/tests/builtins.py | 45 -- python/tests/http.py | 935 ------------------------------ python/tests/liberty.py | 60 -- python/tests/libertysimulator.py | 60 -- python/tests/login_tests.py | 257 +------- python/tests/sample-idp.py | 150 ----- python/tests/sample-lep.py | 152 ----- python/tests/sample-sp-lep.py | 147 ----- python/tests/sample-sp.py | 147 ----- python/tests/submissions.py | 292 ---------- python/tests/web.py | 159 ----- python/tests/websimulator.py | 244 -------- 19 files changed, 27 insertions(+), 3910 deletions(-) commit 738257f33a816017ba2edf01288f14f61ca2f21f Author: Nicolas Clapies Date: Wed Aug 25 09:10:45 2004 +0000 Added missing private attribute, private variable and desallocation methods : LassoDefederationPrivate *private in LassoDefederation object, static GObjectClass *parent_class in C file, lasso_defederation_dispose() and lasso_defederation_finalize() in LassoFederation object lasso/id-ff/defederation.c | 49 +++++++++++++++++++++++++++++++++++++--------- lasso/id-ff/defederation.h | 3 +++ 2 files changed, 43 insertions(+), 9 deletions(-) commit 6456f648d73fd2a341929a93216f642d3b1ec901 Author: Frederic Peters Date: Wed Aug 25 08:34:46 2004 +0000 ignore new class csharp/.cvsignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit b767d59e796544a0aff87eb6bd7543586e4433e0 Author: Frederic Peters Date: Wed Aug 25 08:33:59 2004 +0000 added Defederation profile; workaround lasso-sharp.snk csharp/AssemblyInfo.cs | 2 +- csharp/Makefile.am | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) commit 431249546effc1cc7390baf96e66676b2dee72ef Author: Nicolas Clapies Date: Tue Aug 24 15:55:12 2004 +0000 added test if identity is set before removing federation lasso/id-ff/defederation.c | 8 ++++++++ 1 file changed, 8 insertions(+) commit 9ec06e4ae7e40a48263b760340ea7455d82f4411 Author: Nicolas Clapies Date: Tue Aug 24 15:50:17 2004 +0000 removed federation and assertion lasso/id-ff/defederation.c | 8 ++++++++ 1 file changed, 8 insertions(+) commit c2dab2b685ed767b2ee39fd82d4f6dc6c82b9791 Author: Nicolas Clapies Date: Tue Aug 24 15:37:55 2004 +0000 *** empty log message *** lasso/id-ff/defederation.c | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) commit 3bdcea7ca0e6836d5a318d26e09818083a5fe991 Author: Nicolas Clapies Date: Tue Aug 24 15:30:03 2004 +0000 *** empty log message *** lasso/Attic/protocols/federation_termination_notification.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit f84547e98d37ea11b89132b800cc151673099260 Author: Emmanuel Raviart Date: Tue Aug 24 15:29:56 2004 +0000 Corrected SWIG Defederation binding. Created Python high-level class for Defederation. python/lasso.py | 31 +++++++++++++++++++++++++++++++ swig/Lasso.i | 3 ++- 2 files changed, 33 insertions(+), 1 deletion(-) commit 042cbcfbf8a025f1a17cdf5a0315188254f1c946 Author: Nicolas Clapies Date: Tue Aug 24 14:55:23 2004 +0000 updated doc conf files for defederation docs/reference/lasso-sections.txt | 36 ++++++++++++++++++------------------ docs/reference/lasso.sgml | 4 ++-- 2 files changed, 20 insertions(+), 20 deletions(-) commit 56cb3d94f11b2101e974c8112d774d74dc4de68e Author: Emmanuel Raviart Date: Tue Aug 24 14:34:37 2004 +0000 Continue to rename FederationTermination into Defederation. swig/Lasso.i | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 2ac5ac720aae1097d86aa182db023f5a93475813 Author: Nicolas Clapies Date: Tue Aug 24 14:34:10 2004 +0000 renamed lassoFederationTermination to lassoDefederation in lassoRequestType enum lasso/id-ff/profile.c | 2 +- lasso/id-ff/profile.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 33e3a360b8443d1342e47c2eca4be5ce64dbbc41 Author: Nicolas Clapies Date: Tue Aug 24 14:25:43 2004 +0000 update, now use GError object for each lasso_server_get_provider_ref() lasso/id-ff/logout.c | 46 +++++++++++++++++++++++++++------------------- 1 file changed, 27 insertions(+), 19 deletions(-) commit 3828cdf09cff864c8593ff05721df766adc33dff Author: Nicolas Clapies Date: Tue Aug 24 14:16:57 2004 +0000 renamed lasso_federation_termination_get_type to lasso_defederation_type docs/reference/lasso.types | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 5fb805b311009227e20bbc76789bf4652faa0ab1 Author: Nicolas Clapies Date: Tue Aug 24 13:53:26 2004 +0000 *** empty log message *** lasso/id-ff/federation_termination.c | 593 ----------------------------------- lasso/id-ff/federation_termination.h | 82 ----- 2 files changed, 675 deletions(-) commit 811e54ec755d7b1a67e56844bfc6196107fa4596 Author: Nicolas Clapies Date: Tue Aug 24 13:52:06 2004 +0000 renamed lasso/environs/federation_termination.* to lasso/environs/defederation.* lasso/id-ff/Makefile.am | 4 +- lasso/id-ff/defederation.c | 593 +++++++++++++++++++++++++++++++++++++++++++++ lasso/id-ff/defederation.h | 82 +++++++ lasso/lasso.h | 2 +- 4 files changed, 678 insertions(+), 3 deletions(-) commit 8b1cbf40165de2ed111d554429127ff9fbe3fe11 Author: Emmanuel Raviart Date: Tue Aug 24 13:41:17 2004 +0000 Created SWIG bindings for Defederation (new name of FederationTermination). swig/Lasso.c | 16 ++++++++++++++++ swig/Lasso.i | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) commit 0097f549af514199ad7fa752a91ddfb2a62c8449 Author: Nicolas Clapies Date: Tue Aug 24 13:32:50 2004 +0000 use lassoProviderType instead of gint for provider_type params lasso/id-ff/federation_termination.c | 4 ++-- lasso/id-ff/federation_termination.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) commit a9e81d955973489a3e6f4785db0ed66cca83dce3 Author: Nicolas Clapies Date: Tue Aug 24 13:22:23 2004 +0000 *** empty log message *** lasso/id-ff/federation_termination.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) commit de8a2ed39ee5d9ba2a24a8e29b23ddc44591b0e4 Author: Nicolas Clapies Date: Tue Aug 24 13:17:09 2004 +0000 Set the nameIdentifier attribute after a call to init_notification() lasso/id-ff/federation_termination.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 5f6887dc0aea8a8f9362c7b91b792eefabaa392c Author: Nicolas Clapies Date: Tue Aug 24 12:52:57 2004 +0000 updated process of logout response msg at SP. Now if the initial requester is a SP and the HTTP method is SOAP and if the logout request fails, then lasso builds a new logout request for HTTP Redirect method and set only msg_url lasso/id-ff/logout.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) commit c832a58ee005b324f0a2e76a7becfdb588045593 Author: Nicolas Clapies Date: Tue Aug 24 12:36:18 2004 +0000 *** empty log message *** lasso/id-ff/federation_termination.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) commit 42ade9ef07c712c192add50276178c5231e40484 Author: Nicolas Clapies Date: Tue Aug 24 12:25:36 2004 +0000 fixed bug in lasso_federation_termination_build_notification_msg() : now it gets the remote provider real service url lasso/id-ff/federation_termination.c | 70 ++++++++++++++++++++++++------------ 1 file changed, 48 insertions(+), 22 deletions(-) commit a98068c4f81f9625cb6d54bc1046405c27b50543 Author: Nicolas Clapies Date: Tue Aug 24 12:22:35 2004 +0000 updates lasso/id-ff/logout.c | 1 - 1 file changed, 1 deletion(-) commit 8218359ac9a867cf178a9750559c29257fb1eb5b Author: Nicolas Clapies Date: Tue Aug 24 12:12:59 2004 +0000 minor updates lasso/id-ff/logout.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit 0097659c07bb0c0e034467b07c47f7dba8861afc Author: Nicolas Clapies Date: Tue Aug 24 10:19:24 2004 +0000 fixed bug in lasso_logout_get_next_providerID() when looking for a remote provider id when session attribute is NULL lasso/id-ff/logout.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) commit b743fb6187ab4b76b48c837c4f82179b115806c0 Author: Romain Chantereay Date: Tue Aug 24 09:47:29 2004 +0000 Corrected configure option help. Told to use with-pkg-config= and no with-pkg-config-path wich it the good option name. configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 9cd3ac64809e626fd121a7da6918b7b42008a5f2 Author: Nicolas Clapies Date: Tue Aug 24 09:34:48 2004 +0000 fixed problem of finding the remote provider type in build_request_msg() lasso/id-ff/logout.c | 60 +++++++++++++++++++++++++++------------------------- 1 file changed, 31 insertions(+), 29 deletions(-) commit d9394ebec65df7628fd52d4fa4863df4e80d78a6 Author: Nicolas Clapies Date: Tue Aug 24 08:37:18 2004 +0000 added error messages if invalid attributes in logout object while setting building request and message lasso/id-ff/logout.c | 110 ++++++++++++++++++++++++++++++--------------------- 1 file changed, 66 insertions(+), 44 deletions(-) commit 20eb1ff2e370040b5fa7fa135974c4447340a1db Author: Romain Chantereay Date: Mon Aug 23 17:21:25 2004 +0000 Serious rewrite of the automake file. The php extension is now named lasso. The LTLIBRARIES if for 'php_extension' and no more 'lib'. The swig command invokation is updated to use the new php extension name. php/Makefile.am | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) commit cceff2109b358b2b199b76f240caeada3c3f44db Author: Romain Chantereay Date: Mon Aug 23 17:18:30 2004 +0000 Completed autoconf files output directive with win32 directories Makefile. configure.ac | 2 ++ 1 file changed, 2 insertions(+) commit 6a5a78fa6d7c42be3d57dd882b42ef97b992a5d3 Author: Romain Chantereay Date: Mon Aug 23 17:17:34 2004 +0000 Rewritent the lasso win32 resource file dependency on the top_srcdir and not relative parent directory. lasso/Makefile.am | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit 0b33fe9a2d29b88520f476198875f41a461a5a72 Author: Romain Chantereay Date: Mon Aug 23 17:16:17 2004 +0000 Cleaned a little the automake files. Proper use of $(top_srcdir). Proper use of $DEPDIR. Added $(top_srcdir)/swig/Lasso.c to java shared object compilation. java/Makefile.am | 16 +++++++++------- python/Makefile.am | 6 +++--- 2 files changed, 12 insertions(+), 10 deletions(-) commit 41d14ecc8a339192980205df2444079e816f183e Author: Romain Chantereay Date: Mon Aug 23 17:14:00 2004 +0000 Re added win32 directory in the distribution. Makefile.am | 1 + win32/Makefile.am | 38 -------------------------------------- 2 files changed, 1 insertion(+), 38 deletions(-) commit d76c084fb65224f083916b33578a42e9d6266619 Author: Nicolas Clapies Date: Mon Aug 23 16:19:40 2004 +0000 *** empty log message *** lasso/Attic/protocols/authn_request.c | 2 +- lasso/Attic/protocols/logout_request.c | 22 ++++---- lasso/Attic/protocols/logout_response.c | 2 +- lasso/id-ff/logout.c | 89 ++++++++++++++++----------------- 4 files changed, 58 insertions(+), 57 deletions(-) commit 784ae391d001f4173f33bd7200112c23794fe468 Author: Nicolas Clapies Date: Mon Aug 23 15:55:02 2004 +0000 *** empty log message *** lasso/id-ff/logout.c | 44 +++++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 21 deletions(-) commit 88e1e0fffb46ee9d05979291974e122d808b0b97 Author: Nicolas Clapies Date: Mon Aug 23 15:32:04 2004 +0000 *** empty log message *** lasso/id-ff/logout.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit 0498c4a0b1e2fb89cd8890f11b99682556dfedec Author: Nicolas Clapies Date: Mon Aug 23 15:25:19 2004 +0000 verify if session and identity are set in logout object lasso/id-ff/logout.c | 11 +++++++++++ 1 file changed, 11 insertions(+) commit 844827d94a4b7723ad68bc41d6a8bf5073c8e62f Author: Romain Chantereay Date: Mon Aug 23 14:55:32 2004 +0000 Removed php subdirectories Makefile generations. configure.ac | 4 ---- 1 file changed, 4 deletions(-) commit 492c9bb02bbf6cd4fdebe76dafb4ac68077f04c5 Author: Nicolas Clapies Date: Mon Aug 23 14:43:36 2004 +0000 *** empty log message *** lasso/Attic/protocols/logout_request.c | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) commit 579eae8b88803cf98f67c3f54f507d53a31c0a8f Author: Romain Chantereay Date: Mon Aug 23 14:39:34 2004 +0000 REmoved now useless binding files. See attic for more information. php/Attic/examples/leak.php | 30 - php/Attic/examples/login.php | 43 -- php/Attic/examples/sample-sp/admin_user.php | 162 ----- php/Attic/examples/sample-sp/assertionConsumer.php | 184 ------ php/Attic/examples/sample-sp/index.php | 163 ----- php/Attic/examples/sample-sp/login.php | 59 -- php/Attic/examples/sample-sp/logout.php | 113 ---- php/Attic/examples/sample-sp/register.php | 83 --- php/Attic/examples/sample-sp/setup.php | 316 ---------- php/Attic/examples/test.php | 93 --- php/environs/Makefile.am | 15 - php/environs/lasso_federation.c | 58 -- php/environs/lasso_identity.c | 98 --- php/environs/lasso_login.c | 276 -------- php/environs/lasso_logout.c | 107 ---- php/environs/lasso_profile.c | 432 ------------- php/environs/lasso_server.c | 178 ------ php/environs/lasso_session.c | 58 -- php/lasso.c | 366 ----------- php/lasso.h | 7 - php/php_lasso.h | 172 ----- php/run-tests.php.in | 695 --------------------- php/tests/001.phpt | 10 - php/tests/Makefile.am | 1 - php/tests/lasso_login.phpt | 26 - php/tests/lasso_server.phpt | 68 -- php/xml/Makefile.am | 15 - php/xml/lasso_lib_authn_request.c | 239 ------- 28 files changed, 4067 deletions(-) commit b2dc7bcf645d7186ac81e83263268e86fa842d27 Author: Romain Chantereay Date: Mon Aug 23 14:39:09 2004 +0000 Now PHP Binding is handled by SWIG. php/Makefile.am | 44 +++++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 21 deletions(-) commit 2b6c10a47ac0f3c5ebbc7da96fac93261aeab304 Author: Nicolas Clapies Date: Mon Aug 23 14:07:13 2004 +0000 updpated process of protocol profile .../federation_termination_notification.c | 13 ++++- .../federation_termination_notification.h | 10 ++-- lasso/id-ff/federation_termination.c | 68 ++++++++++++++++++---- lasso/id-ff/federation_termination.h | 4 +- lasso/id-ff/register_name_identifier.h | 22 +++---- 5 files changed, 89 insertions(+), 28 deletions(-) commit 4fb5358591677388e15c62ef3b428bae62317afe Author: Nicolas Clapies Date: Mon Aug 23 14:05:20 2004 +0000 added support of URI identifier in signature lasso/Attic/protocols/authn_request.c | 3 +- lasso/Attic/protocols/logout_request.c | 22 +++++-- lasso/Attic/protocols/logout_request.h | 10 +-- lasso/Attic/protocols/logout_response.c | 64 +++++++++++-------- lasso/Attic/protocols/logout_response.h | 16 +++-- lasso/Attic/protocols/request.c | 3 +- lasso/id-ff/logout.c | 109 +++++++++++++++++++++++++------- lasso/xml/samlp_request_abstract.c | 5 +- lasso/xml/samlp_request_abstract.h | 3 +- lasso/xml/samlp_response_abstract.c | 2 +- lasso/xml/xml.c | 27 ++++++-- lasso/xml/xml.h | 3 +- 12 files changed, 188 insertions(+), 79 deletions(-) commit eea33a45c765cba6a2ae50b871012fa157416da0 Author: Valery Febvre Date: Sun Aug 22 16:22:01 2004 +0000 Added a new param "use_xsitype" (gboolean) in constructors of classes: LassoLibSubject, LassoLibAssertion, LassoLibAuthenticationStatement lasso/Attic/protocols/elements/assertion.c | 4 +- .../protocols/elements/authentication_statement.c | 7 +- lasso/xml/lib_assertion.c | 70 ++++++++++++++++++-- lasso/xml/lib_assertion.h | 6 +- lasso/xml/lib_authentication_statement.c | 77 ++++++++++++++++++---- lasso/xml/lib_authentication_statement.h | 6 +- lasso/xml/lib_subject.c | 76 +++++++++++++++++---- lasso/xml/lib_subject.h | 4 +- 8 files changed, 208 insertions(+), 42 deletions(-) commit 3a48fd24cde5f0a2c779d47ee97fc10f662c9ea7 Author: Valery Febvre Date: Sun Aug 22 16:07:14 2004 +0000 Added lasso_node_new_ns_prop() method in LassoNode class lasso/xml/xml.c | 34 ++++++++++++++++++++++++++++++++-- lasso/xml/xml.h | 7 ++++++- 2 files changed, 38 insertions(+), 3 deletions(-) commit e6b75eeebc2472623b60969e1787af74f6c87bb4 Author: Frederic Peters Date: Sat Aug 21 18:58:49 2004 +0000 updated debian package description; added packaging of the C# assembly. changelog | 6 ++++++ control | 38 ++++++++++++++++++++++++++++---------- liblasso0-cil.files | 5 +++++ liblasso0-dev.files | 10 +++++----- rules | 3 ++- 5 files changed, 46 insertions(+), 16 deletions(-) commit f877c37ab22aa3d6d857657d093cc98f15577f8b Author: Frederic Peters Date: Sat Aug 21 18:58:49 2004 +0000 updated debian package description; added packaging of the C# assembly. debian/changelog | 6 ++++++ debian/control | 38 ++++++++++++++++++++++++++++---------- debian/liblasso0-cil.files | 5 +++++ debian/liblasso0-dev.files | 10 +++++----- debian/rules | 3 ++- 5 files changed, 46 insertions(+), 16 deletions(-) commit 4b9f87788e5dc9822147cdeddc0cf53c439a21c7 Author: Frederic Peters Date: Sat Aug 21 18:56:18 2004 +0000 updated example with correct path to certificates csharp/examples/runme.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 9ed2fd5828a69598e0e10d60c253d17956011534 Author: Frederic Peters Date: Sat Aug 21 18:55:06 2004 +0000 more C# fun. dll is now registered with gacutil. But it needed a StrongName; this is sort of a cryptographic signature for DLL; not clear about this. The key is in csharp/lasso-sharp.snk configure.ac | 6 ++++++ csharp/AssemblyInfo.cs | 6 ++++++ csharp/Makefile.am | 8 +++++--- csharp/lasso-sharp.snk | Bin 0 -> 596 bytes 4 files changed, 17 insertions(+), 3 deletions(-) commit f557c7e5064cd83772e33c7752f58e6aec291418 Author: Emmanuel Raviart Date: Sat Aug 21 18:41:42 2004 +0000 Bug correction in last PHP changes. php/environs/lasso_login.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) commit 705c7d3d327ef86900c6ab5e9394a94ce1e6675e Author: Frederic Peters Date: Sat Aug 21 17:51:41 2004 +0000 forgot to distribute lasso.dll.config csharp/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit c608d25197fc6a84dc79fbdceb4da68bd192b73d Author: Frederic Peters Date: Sat Aug 21 17:49:11 2004 +0000 C# example csharp/examples/runme.cs | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) commit ca761ff5c3754aedac41ba75c73d356d17b19733 Author: Frederic Peters Date: Sat Aug 21 17:46:51 2004 +0000 some files were renamed csharp/.cvsignore | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) commit ea5c3f2215a5ba2bef1b3f83d97693011af1142f Author: Frederic Peters Date: Sat Aug 21 17:45:49 2004 +0000 I don't know the purpose of this file. csharp/lasso.dll.config | 3 +++ 1 file changed, 3 insertions(+) commit e3cc8bc55766e675c881c1bb3f02a8fe1d3010af Author: Frederic Peters Date: Sat Aug 21 17:45:24 2004 +0000 working lasso c# binding. next step is to figure how mono manages the directories (currently it looks like CLASSPATH mess but gacutil may be useful). csharp/Makefile.am | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) commit 45590d268792b61e1b3bda353334a0d0a5f9e6d5 Author: Emmanuel Raviart Date: Sat Aug 21 17:38:59 2004 +0000 Updated "Writing a SP" doc & PHP binding to Lasso API change. docs/lasso-book/writing-a-c-sp.txt | 4 ++-- php/Attic/examples/login.php | 4 ++-- php/Attic/examples/sample-sp/login.php | 4 ++-- php/Attic/examples/test.php | 8 ++++---- php/environs/lasso_login.c | 18 +++++++++--------- python/tests/login_tests.py | 2 +- 6 files changed, 20 insertions(+), 20 deletions(-) commit 5dc6f94ffd3bbf0d45559068c86da4247bd454e8 Author: Valery Febvre Date: Sat Aug 21 17:12:21 2004 +0000 Moved param 'http_method' of lasso_login_build_authn_request_msg() method in lasso_login_init_authn_request() BEWARE : this change breaks the API lasso/id-ff/lecp.c | 5 ++++- lasso/id-ff/login.c | 38 +++++++++++++++++++++++--------------- lasso/id-ff/login.h | 7 ++++--- python/lasso.py | 8 ++++---- python/tests/ServiceProvider.py | 5 +++-- swig/Lasso.i | 5 ++--- tests/login_tests.c | 5 ++--- 7 files changed, 42 insertions(+), 31 deletions(-) commit 87e3c2dbfc60a82b6d4b48f2bc2b4f34e3c6abad Author: Valery Febvre Date: Sat Aug 21 17:09:20 2004 +0000 Added checks not to do copies of NULL objects. lasso/Attic/protocols/federation.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) commit 43bc1026787c4ec45ed6943ae08d9764496a0124 Author: Valery Febvre Date: Sat Aug 21 17:05:45 2004 +0000 Changed LASSO_PARAM_ERROR_INVALID_VALUE error message lasso/xml/errors.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit e17f7ebdc1eb423a9a5db2cd988b46ca08eb132d Author: Valery Febvre Date: Sat Aug 21 17:04:44 2004 +0000 Fixed a mistake: the signature template should be added before the ProviderID lasso/Attic/protocols/authn_request.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) commit a0bb363ab67b20de7d43db13a0f4bd6ffa62231c Author: Frederic Peters Date: Sat Aug 21 16:30:08 2004 +0000 getting there; it builds and installs correctly but I'm still trying to separate assembly name and file name. (no, I don't know what is an assembly name) configure.ac | 1 + csharp/Makefile.am | 14 ++++++++------ csharp/lasso-sharp.pc.in | 8 ++++++++ 3 files changed, 17 insertions(+), 6 deletions(-) commit f52a1fee166439679011d24f13b85c3e755a5872 Author: Frederic Peters Date: Sat Aug 21 15:13:49 2004 +0000 a few files to ignore csharp/.cvsignore | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) commit 923c27acf4ef363a2fb1b61190c0dbf72b9d00a9 Author: Frederic Peters Date: Sat Aug 21 15:12:52 2004 +0000 usable lasso c# bindings; liblassosharpglue.so is installed in libdir and lasso.dll in /usr/share/dotnet/lasso/ compile with mcs -g -nologo -r:lasso.dll -out:runme.exe runme.cs csharp/Makefile.am | 51 ++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 38 insertions(+), 13 deletions(-) commit 94388133246f5b2de2cca126bcaea207e921d803 Author: Valery Febvre Date: Sat Aug 21 12:49:30 2004 +0000 Removed lassoLibProtocolProfileSSOGet, lassoLibProtocolProfileSSOPost Added lassoXsiHRef, lassoXsiPrefix lasso/xml/strings.h | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) commit a2d62912686dd17b3670995a06ac1f0abb91fdf1 Author: Frederic Peters Date: Sat Aug 21 11:23:53 2004 +0000 added c# binding; I'm not sure how all of this works and a little program compiles and run: using System; public class runme { static void Main() { Console.WriteLine("lasso_init"); int rc = lassomod.lasso_init(); Console.WriteLine(String.Format("sortie de lasso_init: {0}", rc)); LassoServer server = new LassoServer( "../tests/data/idp1-la/metadata.xml", "", "../tests/data/idp1-la/private-key-raw.pem", "../tests/data/idp1-la/certificate.pem", lassomod.lassoSignatureMethodRsaSha1); Console.WriteLine("lasso_shutdown"); lassomod.lasso_shutdown(); } } Makefile.am | 5 +- configure.ac | 143 ++++++++++++++++++++++++++++++++++++++++------------- csharp/Makefile.am | 23 +++++++++ 3 files changed, 135 insertions(+), 36 deletions(-) commit 188b4dfd364c17e1fe367d5cea14805918e105fa Author: Frederic Peters Date: Sat Aug 21 10:39:56 2004 +0000 Fixed lasso_server_new parameter type. When you make change in header files (such as [1]) think about the bindings and adapt them; thanks. [1] http://cvs.labs.libre-entreprise.org/cgi-bin/cvsweb.cgi/lasso/lasso/environs/server.c.diff?r1=1.54;r2=1.55;cvsroot=lasso swig/Lasso.c | 4 ++-- swig/Lasso.i | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) commit 1f2b0dc7ae195bf81484a55e068aae38d450c7ea Author: Frederic Peters Date: Sat Aug 21 10:13:16 2004 +0000 replaced lots of const char* wasting memory and a treat to binary compatibility with lots of #define wasting nothing at all. lasso/xml/Makefile.am | 1 - lasso/xml/strings.c | 152 ----------------------------------------------- lasso/xml/strings.h | 159 ++++++++++++++++++++++++-------------------------- 3 files changed, 75 insertions(+), 237 deletions(-) commit 9fc1e8fa3c2c2d29d1ed116704e9f7528a6a1cbc Author: Frederic Peters Date: Sat Aug 21 10:10:47 2004 +0000 doesn't fail on second run docs/reference/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 17c78aa7dffa1ef07771aa94d16eb299a43282ce Author: Frederic Peters Date: Sat Aug 21 10:10:18 2004 +0000 I prefer it that way python/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 3446f1672f7bf1f5b8e587b25a0f993c8bc98782 Author: Frederic Peters Date: Sat Aug 21 08:48:44 2004 +0000 reenabled tests since the swig binding is ok now python/tests/errorchecking_tests.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 64bdc7f985835b5d46b23e931eb9752bee05d7f1 Author: Valery Febvre Date: Sat Aug 21 01:20:13 2004 +0000 Fixed a bug in lasso_login_accept_sso() Updated gtk-doc lasso/id-ff/login.c | 76 ++++++++++++++++++++++++++++------------------------- lasso/id-ff/login.h | 74 +++++++++++++++++++++++++-------------------------- 2 files changed, 77 insertions(+), 73 deletions(-) commit adaea63f60126d8b4c3c5395ca62f0c8125d8ddd Author: Emmanuel Raviart Date: Fri Aug 20 20:01:18 2004 +0000 Modified PHP bindings in an attempt to add new argument to method lasso_build_authn_request_msg. php/Attic/examples/login.php | 2 +- php/Attic/examples/sample-sp/login.php | 2 +- php/Attic/examples/test.php | 2 +- php/environs/lasso_login.c | 13 ++++++++----- 4 files changed, 11 insertions(+), 8 deletions(-) commit 921ffa05b3ebab2359f400b0a74f3dec884a4edb Author: Emmanuel Raviart Date: Fri Aug 20 19:46:13 2004 +0000 Updated the documentation to reflect API change. docs/lasso-book/writing-a-c-sp.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 90f1e1f49379a69e21ddc4087f662244e0495465 Author: Emmanuel Raviart Date: Fri Aug 20 17:43:07 2004 +0000 Added new argument to lasso_login_build_authn_request_msg. python/lasso.py | 15 ++++++++------- python/tests/ServiceProvider.py | 2 +- swig/Lasso.i | 12 ++++++------ tests/login_tests.c | 3 ++- 4 files changed, 17 insertions(+), 15 deletions(-) commit 68b494d9b507a0f787678dec321c4c7829d7a070 Author: Valery Febvre Date: Fri Aug 20 17:26:49 2004 +0000 Added a new param 'http_method' in lasso_login_build_authn_request_msg() BEWARE : this change breaks the API lasso/id-ff/login.c | 58 ++++++++++++++++++++++++----------------------------- lasso/id-ff/login.h | 11 +++++----- 2 files changed, 32 insertions(+), 37 deletions(-) commit 6621fbe74e1a5a3d886aa09df776b4e8af27eaf7 Author: Romain Chantereay Date: Fri Aug 20 16:01:00 2004 +0000 The local clean rule now remove the package sub directory (com). The dirty rule now have a little goldy spray that test the existence of the com/entrouvert/lasso/lasso.java source file before trying to copy it from the distribution. java/Makefile.am | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 9f215bfebd71fa7e6cd65afee61865f582a0c92a Author: Romain Chantereay Date: Fri Aug 20 15:58:45 2004 +0000 Modified PHP extension installation directory, now it is prefixed. php/Makefile.am | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit c78190ac7ef16bf9371d35858c879587906c87b6 Author: Romain Chantereay Date: Fri Aug 20 15:58:07 2004 +0000 Created unprefixed PHP_UNPREFIXED_EXTENTION_DIR in order to prefix it with the supplied configure prefix. Is it useful in this PHP special case ? I do not think so, but, the user is the master. Moved the libtool bad versionning computation after program tests in order to use the founded sed program ($SED) and not just 'sed'. Every calls to 'sed' use the founded 'sed' ($SED). configure.ac | 84 ++++++++++++++++++++++++++++++------------------------------ 1 file changed, 42 insertions(+), 42 deletions(-) commit d3a1c4f6231109291e54938bbd76a123ace2966f Author: Frederic Peters Date: Fri Aug 20 15:06:49 2004 +0000 talking about idpProviderID docs/lasso-book/writing-a-c-sp.txt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit f89577bc77ea81180706328f11a4cb14445a2f56 Author: Frederic Peters Date: Fri Aug 20 14:57:26 2004 +0000 file moved docs/lasso-book/check-functions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit f2c55124a3a2d9ebe3be02f5f3570f1c333c9559 Author: Frederic Peters Date: Fri Aug 20 14:51:29 2004 +0000 fixed function name docs/lasso-book/writing-a-c-sp.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 460a7adda9df6eaf37ae978068d495f1deae7093 Author: Emmanuel Raviart Date: Fri Aug 20 14:47:40 2004 +0000 In Python high-level binding, constants are now defined using 2 forms: as a global variable and as a dict item. For example: libNameIDPolicyTypeFederated and libNameIDPolicyTypes['federated']. python/lasso.py | 49 +++++++++++++++++++++++++++++++++---------------- 1 file changed, 33 insertions(+), 16 deletions(-) commit 956fc02557ddaf5337681e87a8cb3c0f6276e21a Author: Romain Chantereay Date: Fri Aug 20 11:52:22 2004 +0000 Use libtool generated la instead of human -llasso and -Ldir... docs/reference/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit d6122574a1d5a661a091e4cd97af68d4a540b4db Author: Romain Chantereay Date: Fri Aug 20 11:51:34 2004 +0000 Removed an useless inclusion directory. Coded mechanisms in order to permit distcheck to work cleanly. It is a little dirty, but... Perphas using libtool facilities. java/Makefile.am | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) commit f333b5dabf765901b063c2670842a18a9596cf5a Author: Romain Chantereay Date: Fri Aug 20 11:50:08 2004 +0000 Removed an useless inclusion directory. python/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 10ebf8bc72bca3ee51abd58f1b0e35f400c21c64 Author: Romain Chantereay Date: Fri Aug 20 11:49:10 2004 +0000 Now include and instead of and h> swig/Lasso.c | 4 ++-- swig/Lasso.i | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) commit 7b27896a47403e99b95c334b5ac021548382af81 Author: Emmanuel Raviart Date: Fri Aug 20 11:31:58 2004 +0000 Corrections in Python high-level binding: - Added missing self in previous commit. - Server default constructor allows again to give no arguments. python/lasso.py | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) commit 16370a4eb40d1a132e57aac3dcf29f8b851a1215 Author: Emmanuel Raviart Date: Fri Aug 20 11:24:02 2004 +0000 I have always wanted that Python bindings for GTK, libXML, etc, allow the user to override the classes they define. So I did it for Lasso Python high-level bindings. python/lasso.py | 193 +++++++++++++++++++++++++++++++------------------------- 1 file changed, 107 insertions(+), 86 deletions(-) commit d8303d14c8bb8662141cbbf8ff7e869d58b56410 Author: Valery Febvre Date: Fri Aug 20 10:02:43 2004 +0000 Update and 2 fixs docs/reference/lasso-sections.txt | 3 ++- docs/reference/lasso.types | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) commit d1a6ec76784172d0f65359891833b1e4b2d6131e Author: Frederic Peters Date: Fri Aug 20 09:46:17 2004 +0000 cleaned Makefile.am (I'm curious about the NULL= idiom; where did it come from ?) java/Makefile.am | 62 +++++++++++++++++++++---------------------------------- lasso/Makefile.am | 32 +++++++--------------------- php/Makefile.am | 13 ++++-------- 3 files changed, 35 insertions(+), 72 deletions(-) commit 42e6495ad11c6b6a4265e7ad378ba4dfde0e6df8 Author: Christophe Nowicki Date: Fri Aug 20 09:45:38 2004 +0000 new setup system php/Attic/examples/sample-sp/admin_user.php | 4 +- php/Attic/examples/sample-sp/assertionConsumer.php | 6 +- php/Attic/examples/sample-sp/config.php.inc | 27 ---- php/Attic/examples/sample-sp/index.php | 43 ++++--- php/Attic/examples/sample-sp/login.php | 5 +- php/Attic/examples/sample-sp/logout.php | 6 +- php/Attic/examples/sample-sp/register.php | 6 +- php/Attic/examples/sample-sp/setup.php | 140 ++++++++++++++++++--- 8 files changed, 162 insertions(+), 75 deletions(-) commit 7b462495723b08e965d6077fc57604c4617a414a Author: Valery Febvre Date: Fri Aug 20 09:45:26 2004 +0000 Removed useless files ds_signature.c & ds_signature.h lasso/xml/ds_signature.c | 215 ----------------------------------------------- lasso/xml/ds_signature.h | 69 --------------- 2 files changed, 284 deletions(-) commit a738a17d822558d3a5fab097a06db67c50bf3384 Author: Frederic Peters Date: Fri Aug 20 09:44:42 2004 +0000 removed the remaining ds_signature stuffs docs/reference/Makefile.am | 2 +- docs/reference/lasso-sections.txt | 17 ----------------- docs/reference/lasso.types | 1 - 3 files changed, 1 insertion(+), 19 deletions(-) commit f19046331727986f449305edf039712ef8b16c9b Author: Emmanuel Raviart Date: Fri Aug 20 09:37:47 2004 +0000 Added method get_authentication_method to session in high-level Python binding. python/lasso.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) commit ffa64315e95b822a0d9a365c5ab062db40d3140e Author: Frederic Peters Date: Fri Aug 20 09:31:07 2004 +0000 install lasso.py (and cleaned a bit the Makefile.am) python/Makefile.am | 42 ++++++++++++++++++------------------------ 1 file changed, 18 insertions(+), 24 deletions(-) commit 9dba8d3fc1629db5e42b6eed1437ecde21c1b77f Author: Emmanuel Raviart Date: Fri Aug 20 09:14:10 2004 +0000 Removed trash from SWIG binding. swig/Lasso.i | 2486 ---------------------------------------------------------- 1 file changed, 2486 deletions(-) commit 3077a539758d07c3c60c58f95de7d1fdddf470af Author: Frederic Peters Date: Fri Aug 20 08:40:56 2004 +0000 typo configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 7b1a9cd0a0cd90e5ca9fd7bf00581b741eb97002 Author: Frederic Peters Date: Fri Aug 20 08:13:47 2004 +0000 errors propagate; fixes follow them. java/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 832ee41048d628f84ad5699c09c24a3f94e428ec Author: Emmanuel Raviart Date: Fri Aug 20 08:11:43 2004 +0000 Ignore some files in swig. swig/.cvsignore | 2 ++ 1 file changed, 2 insertions(+) commit 094d56a6bfc0696992969b01166c22449bb44858 Author: Frederic Peters Date: Fri Aug 20 08:10:31 2004 +0000 Also look for include files in top_src_dir/lasso. As for the python binding. I actually think this is a bug; why should lasso_wrap.c include lasso.h and not ? java/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit f6ec2331eae5fbb0ea6b57e74091627de91a1ebe Author: Frederic Peters Date: Fri Aug 20 08:04:38 2004 +0000 get your act on ds_signature; please. lasso/xml/saml_assertion.h | 1 - 1 file changed, 1 deletion(-) commit 94f913b38163aa91a6c78b1a238cc9fbe421ca82 Author: Frederic Peters Date: Fri Aug 20 08:02:26 2004 +0000 include top source dir java/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 77474f9e8888d2615c90f6c65e934fdccc6aec26 Author: Frederic Peters Date: Fri Aug 20 07:58:29 2004 +0000 fixed includes python/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit ba05673ff04170312621cff4bd22b7bd3626bd8d Author: Emmanuel Raviart Date: Fri Aug 20 00:52:18 2004 +0000 Removed a "s". docs/reference/lasso-sections.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit fd07ba3c8327357e8bd73b43ec0967f9cdcaf49f Author: Emmanuel Raviart Date: Fri Aug 20 00:39:08 2004 +0000 Updated .cvsignore. python/.cvsignore | 2 ++ 1 file changed, 2 insertions(+) commit 7db97fec73acebdff3c606f99c2ee7c8a5ae6d57 Author: Emmanuel Raviart Date: Fri Aug 20 00:37:48 2004 +0000 Removed old Python binding. python/environs/.cvsignore | 3 - python/environs/Makefile.am | 17 - python/environs/py_federation_termination.c | 180 ---------- python/environs/py_federation_termination.h | 52 --- python/environs/py_identity.c | 78 ----- python/environs/py_identity.h | 43 --- python/environs/py_lecp.c | 258 --------------- python/environs/py_lecp.h | 52 --- python/environs/py_login.c | 368 --------------------- python/environs/py_login.h | 60 ---- python/environs/py_logout.c | 227 ------------- python/environs/py_logout.h | 54 --- python/environs/py_profile.c | 221 ------------- python/environs/py_profile.h | 53 --- python/environs/py_register_name_identifier.c | 195 ----------- python/environs/py_register_name_identifier.h | 53 --- python/environs/py_server.c | 132 -------- python/environs/py_server.h | 45 --- python/environs/py_session.c | 210 ------------ python/environs/py_session.h | 50 --- python/generator_lasso_strings.py | 87 ----- python/lasso_strings.py | 172 ---------- python/lassomod.c | 316 ------------------ python/lassomod.h | 38 --- python/protocols/.cvsignore | 3 - python/protocols/Makefile.am | 38 --- python/protocols/elements/.cvsignore | 4 - python/protocols/elements/Makefile.am | 16 - python/protocols/elements/py_assertion.c | 59 ---- python/protocols/elements/py_assertion.h | 41 --- .../elements/py_authentication_statement.c | 71 ---- .../elements/py_authentication_statement.h | 41 --- python/protocols/py_authn_request.c | 113 ------- python/protocols/py_authn_request.h | 45 --- python/protocols/py_authn_response.c | 64 ---- python/protocols/py_authn_response.h | 41 --- .../py_federation_termination_notification.c | 83 ----- .../py_federation_termination_notification.h | 42 --- python/protocols/py_logout_request.c | 84 ----- python/protocols/py_logout_request.h | 44 --- python/protocols/py_logout_response.c | 86 ----- python/protocols/py_logout_response.h | 42 --- .../protocols/py_name_identifier_mapping_request.c | 98 ------ .../protocols/py_name_identifier_mapping_request.h | 43 --- .../py_name_identifier_mapping_response.c | 138 -------- .../py_name_identifier_mapping_response.h | 45 --- .../py_register_name_identifier_request.c | 120 ------- .../py_register_name_identifier_request.h | 45 --- .../py_register_name_identifier_response.c | 87 ----- .../py_register_name_identifier_response.h | 42 --- python/py_lasso.c | 62 ---- python/py_lasso.h | 35 -- python/utils.c | 101 ------ python/utils.h | 11 - python/wrap_objs.c | 204 ------------ python/wrap_objs.h | 72 ---- python/xml/.cvsignore | 4 - python/xml/Makefile.am | 43 --- python/xml/py_lib_authentication_statement.c | 68 ---- python/xml/py_lib_authentication_statement.h | 42 --- python/xml/py_lib_authn_request.c | 158 --------- python/xml/py_lib_authn_request.h | 47 --- python/xml/py_lib_authn_response.c | 69 ---- python/xml/py_lib_authn_response.h | 42 --- .../py_lib_federation_termination_notification.c | 68 ---- .../py_lib_federation_termination_notification.h | 42 --- python/xml/py_lib_logout_request.c | 140 -------- python/xml/py_lib_logout_request.h | 46 --- python/xml/py_lib_logout_response.c | 50 --- python/xml/py_lib_logout_response.h | 41 --- .../xml/py_lib_name_identifier_mapping_request.c | 68 ---- .../xml/py_lib_name_identifier_mapping_request.h | 42 --- .../xml/py_lib_name_identifier_mapping_response.c | 50 --- .../xml/py_lib_name_identifier_mapping_response.h | 42 --- .../xml/py_lib_register_name_identifier_request.c | 68 ---- .../xml/py_lib_register_name_identifier_request.h | 42 --- python/xml/py_saml_assertion.c | 91 ----- python/xml/py_saml_assertion.h | 43 --- python/xml/py_saml_authentication_statement.c | 50 --- python/xml/py_saml_authentication_statement.h | 41 --- python/xml/py_saml_name_identifier.c | 94 ------ python/xml/py_saml_name_identifier.h | 43 --- python/xml/py_samlp_response.c | 67 ---- python/xml/py_samlp_response.h | 42 --- python/xml/py_xml.c | 213 ------------ python/xml/py_xml.h | 50 --- 86 files changed, 6890 deletions(-) commit c4344d4b1b3d77f2ef7594c217c298661a27dd5e Author: Emmanuel Raviart Date: Fri Aug 20 00:13:35 2004 +0000 Updated Python high-level binding and tests. May all the lights be green! python/lasso.py | 168 +++++++++++++++++++++++++++++- python/tests/IdentityProvider.py | 8 +- python/tests/LibertyEnabledClientProxy.py | 2 +- python/tests/ServiceProvider.py | 10 +- python/tests/errorchecking_tests.py | 6 +- python/tests/login_tests.py | 9 +- swig/Lasso.i | 46 +++++++- 7 files changed, 224 insertions(+), 25 deletions(-) commit 31fdd0be5742c82d8ff67a965d49b7b9934d9af4 Author: Frederic Peters Date: Thu Aug 19 23:22:47 2004 +0000 ignore build; no longer need to ignore a bunch of other files docs/reference/.cvsignore | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) commit 2cd4a2587195b1ddbba77315fb21d10a2f7da2e4 Author: Frederic Peters Date: Thu Aug 19 23:21:56 2004 +0000 gtkdoc example was misleading; caused confusions between what was generated and what was not, etc. Improved things a bit. docs/lasso-book/Makefile.am | 4 +-- docs/reference/Makefile.am | 69 ++++++++++++++++++++------------------------- docs/reference/lasso.sgml | 2 -- 3 files changed, 33 insertions(+), 42 deletions(-) commit 9a8d1f6759fb12c00abfec9a666987bc95144738 Author: Frederic Peters Date: Thu Aug 19 23:20:48 2004 +0000 cleanup and remove result.xml tests/Makefile.am | 2 ++ 1 file changed, 2 insertions(+) commit 74509f54ebda964e14a90fcbb29b90fba1490787 Author: Emmanuel Raviart Date: Thu Aug 19 22:36:50 2004 +0000 Created a high-level API above SWIG Python API. Removed a trailing "s" from an enum. lasso/id-ff/login.h | 4 +- python/lasso.py | 1579 ++++++++++----------------------------------------- swig/Lasso.c | 38 ++ swig/Lasso.i | 348 ++++-------- 4 files changed, 452 insertions(+), 1517 deletions(-) commit 79aff14be4c75d5419bc3335dd74c01f5b9b4f94 Author: Frederic Peters Date: Thu Aug 19 22:19:33 2004 +0000 fixed python path configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 2679c6342d7e68a5c9d1299045b39435c83a64da Author: Frederic Peters Date: Thu Aug 19 21:42:33 2004 +0000 install python in $prefix/lib/python2.3/ instead of $pyprefix/... configure.ac | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) commit dd1a07059b6425e6819516bff7c05a2cf4d062a0 Author: Frederic Peters Date: Thu Aug 19 21:11:18 2004 +0000 certs are not in builddir; take care of that tests/login_tests.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) commit ec86c5955d1a3af301ff64664a002193f33c5f6e Author: Frederic Peters Date: Thu Aug 19 21:10:50 2004 +0000 include a bunch of ssl thingies in release (make distcheck goes further) configure.ac | 5 +++++ tests/Makefile.am | 3 +++ tests/data/Makefile.am | 1 + tests/data/ca1-la/Makefile.am | 1 + tests/data/idp1-la/Makefile.am | 1 + tests/data/lecp1-la/Makefile.am | 1 + tests/data/sp1-la/Makefile.am | 1 + 7 files changed, 13 insertions(+) commit d44eaa8a0ada89905281c4152bae039893eb1acf Author: Frederic Peters Date: Thu Aug 19 20:44:59 2004 +0000 Copy the examples but when the examples are wrong you are screwed. Too bad. Never write to srcdir. docs/reference/Makefile.am | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 8165a7824a30cdb2cc179ab057fae25f3b8b6536 Author: Emmanuel Raviart Date: Thu Aug 19 20:23:48 2004 +0000 Commented parts of the SWIG bindings that is not done yet. Note: This commit includes a secret gift. swig/Lasso.c | 28 +++++----- swig/Lasso.i | 176 ++++++++++++++++++++++++++++++----------------------------- 2 files changed, 106 insertions(+), 98 deletions(-) commit dee6ca31008c6b41e587a7ff0c02b28e1cf29cf3 Author: Frederic Peters Date: Thu Aug 19 20:04:41 2004 +0000 the quest for a working distcheck; don't be miserable, use make features (directed to me; I never remember $?, $@ and family) docs/lasso-book/Makefile.am | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 9ffb628da428a2bb682089b3032f41ee604accdd Author: Frederic Peters Date: Thu Aug 19 20:03:24 2004 +0000 the quest for a working make distcheck; part 1: srcdir is not always builddir. python/Makefile.am | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit e985386715ce3147cf3d0dc6edca49e0fb1045d4 Author: Frederic Peters Date: Thu Aug 19 19:38:43 2004 +0000 TODO was removed dude Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit da4f377e6cdff9531d91e75cd4292c6b6a6d46d7 Author: Frederic Peters Date: Thu Aug 19 19:35:15 2004 +0000 an empty TODO file was misleading TODO | 0 1 file changed, 0 insertions(+), 0 deletions(-) commit 6101955f250e7943a4990c39b27f66976543f234 Author: Frederic Peters Date: Thu Aug 19 19:31:19 2004 +0000 removed CVS tag lines that were scattered all around the file (kept as empty comments since they were marks of file change) swig/Lasso.i | 128 +++++++++++++++++++++++++++++------------------------------ 1 file changed, 64 insertions(+), 64 deletions(-) commit fc37aff72b6fd29c3c4348cb5a4249524ba82709 Author: Frederic Peters Date: Thu Aug 19 19:26:28 2004 +0000 Makefile.am in swig directory so that make clean and make dist works properly Makefile.am | 3 ++- configure.ac | 42 ++++++++++++++---------------------------- swig/Makefile.am | 5 +++++ 3 files changed, 21 insertions(+), 29 deletions(-) commit 19c69f11c05ee4571414b3b91b952db271898bff Author: Frederic Peters Date: Thu Aug 19 19:25:34 2004 +0000 set docdir as datadir/doc/lasso docs/lasso-book/Makefile.am | 1 + 1 file changed, 1 insertion(+) commit 665aae8e76b0b146e804b45d38c8b089e5e02fcb Author: Emmanuel Raviart Date: Thu Aug 19 18:55:25 2004 +0000 Removed signature functions whose arguments have changed from SWIG binding. They are not for public use anyway. Java & Python binding should now compile correctly => 2 green lights. swig/Lasso.i | 69 ------------------------------------------------------------ 1 file changed, 69 deletions(-) commit 33833bc3bbfbae8d7a7436f7b13609efa1da6af8 Author: Valery Febvre Date: Thu Aug 19 18:48:53 2004 +0000 Fixed a mistake with name identifiers of the assertions .../protocols/elements/authentication_statement.c | 60 ++++++++---------- .../protocols/elements/authentication_statement.h | 2 +- lasso/id-ff/login.c | 71 ++-------------------- 3 files changed, 32 insertions(+), 101 deletions(-) commit c058f4dde9e58c0a622b6d50b920830e27960a73 Author: Valery Febvre Date: Thu Aug 19 18:42:21 2004 +0000 Removed debug messages lasso/xml/xml.c | 4 ---- 1 file changed, 4 deletions(-) commit 1bc17f95405b1f6b1ec5e87e90da43f719fc1618 Author: Emmanuel Raviart Date: Thu Aug 19 18:16:14 2004 +0000 Deeply reworked SWIG bindings for the Lasso objects we currently use. Note: Python high-level bindings are not yet updated to use these SWIG bindings. python/Makefile.am | 3 +- swig/Lasso.c | 132 ++++++ swig/Lasso.i | 1144 +++++++++++++++++++++++----------------------------- 3 files changed, 635 insertions(+), 644 deletions(-) commit ed57b05781e982ac291e18685d4bd36c8dbddaa1 Author: Romain Chantereay Date: Thu Aug 19 17:03:04 2004 +0000 Reformated some lines in python Makefile.am Added -I.. to java Makefile.am CFLAGS. java/Makefile.am | 1 + python/Makefile.am | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) commit 0d5a96551ed1de185c86d49d43ec32b68beeee66 Author: Romain Chantereay Date: Thu Aug 19 16:55:15 2004 +0000 Some modifications. configure.ac | 3 ++- java/Makefile.am | 18 +++++++++++------- python/Makefile.am | 3 ++- 3 files changed, 15 insertions(+), 9 deletions(-) commit 2a04314597ae112b9ed2fc47594d9fb1fef493bf Author: Romain Chantereay Date: Thu Aug 19 16:07:21 2004 +0000 The rules generating the C wrapper is defined generating the python wrapper too. python/Makefile.am | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit fc22fce44e26795fe629334979fd5444a1b83e28 Author: Romain Chantereay Date: Thu Aug 19 16:06:29 2004 +0000 Use JDK_INCLUDE if jdk is Kaffe's or Sun's. java/Makefile.am | 1 + 1 file changed, 1 insertion(+) commit 64283849742b754991d625ed2f3cfb90de61d904 Author: Frederic Peters Date: Thu Aug 19 16:01:03 2004 +0000 disabled tests that do not really need really quick fixing. (with the hope to get a full green line) python/tests/errorchecking_tests.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit e7951664512e6fb7471250a34cf4ca759602f3b3 Author: Christophe Nowicki Date: Thu Aug 19 15:56:23 2004 +0000 Setup PHP Interface in progress ;0) php/Attic/examples/sample-sp/setup.php | 268 +++++++++++++++++++++------------ 1 file changed, 172 insertions(+), 96 deletions(-) commit 35a96b556e2d1ad64710bbc87cae5fc09bd308b3 Author: Romain Chantereay Date: Thu Aug 19 15:44:46 2004 +0000 Completly recoded the java detection and configuration framework. Now compile very well with kaffe and GNU Java compiler. Should compile without any complain with sun jdk if --with-java-home is used. configure.ac | 84 +++++++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 64 insertions(+), 20 deletions(-) commit 282df76fa3ecc39eba8fb3bc2fabcd1465b6a0b6 Author: Valery Febvre Date: Thu Aug 19 15:37:08 2004 +0000 Fixed a bug in lasso_node_verify_signature() & lasso_node_verify_x509_signature() lasso/xml/xml.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) commit fd46dd6c2541da10ab9480b71e428ef121744b7d Author: Valery Febvre Date: Thu Aug 19 15:36:23 2004 +0000 Replaced a HRef by NULL lasso/id-ff/session.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 2a8623ca8ff78005e0384c4fb51c29b78401e9c8 Author: Valery Febvre Date: Thu Aug 19 15:35:09 2004 +0000 Commented some incorrect lines of code lasso/id-ff/login.c | 38 ++++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 18 deletions(-) commit fcf8baffafa98679eac9420f91255027aa117df1 Author: Christophe Nowicki Date: Thu Aug 19 14:26:14 2004 +0000 more logical comparaison php/environs/lasso_logout.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit d6c3b12af8f5708f5969cb3d66dcd2e63fad1612 Author: Christophe Nowicki Date: Thu Aug 19 13:55:00 2004 +0000 logout php/Attic/examples/sample-sp/assertionConsumer.php | 15 +++---- php/Attic/examples/sample-sp/index.php | 7 ++- php/Attic/examples/sample-sp/logout.php | 50 +++++++++++++++++++--- php/environs/lasso_logout.c | 9 ++-- 4 files changed, 62 insertions(+), 19 deletions(-) commit c1a38e82080f75795b89c064a301f29c0278e87d Author: Valery Febvre Date: Thu Aug 19 12:54:04 2004 +0000 Removed ds_signature.c & ds_signature.h lasso/xml/Makefile.am | 2 -- 1 file changed, 2 deletions(-) commit b86bfe3367156d43cd45239b23d6dada6192ebb7 Author: Romain Chantereay Date: Thu Aug 19 12:53:08 2004 +0000 Java binding is no more activated when: - Java compiler is gcj - jni.h is not compilable. configure.ac | 6 ++++++ 1 file changed, 6 insertions(+) commit 2b9431bc3b079b150b9832101ff67d66ebb3535e Author: Valery Febvre Date: Thu Aug 19 12:52:19 2004 +0000 Update python binding python/protocols/py_authn_request.c | 6 ++++-- python/xml/py_saml_assertion.c | 4 +--- python/xml/py_xml.c | 3 +-- 3 files changed, 6 insertions(+), 7 deletions(-) commit 851e653728688d7ba38c2fc74bd37ff626eb1aa0 Author: Valery Febvre Date: Thu Aug 19 12:51:25 2004 +0000 Splited lasso_node_verify_signature() (LassoNode class) in 2 methods: lasso_node_verify_signature(), lasso_node_verify_x509_signature() Added 2 private methods in LassoNode: add_signature_tmpl(), sign_signature_tmpl(), Removed 'err' param in all methods for signing lasso/id-ff/federation_termination.c | 3 +- lasso/id-ff/login.c | 151 ++++++---- lasso/id-ff/login.h | 4 +- lasso/id-ff/logout.c | 16 +- lasso/id-ff/register_name_identifier.c | 3 +- lasso/xml/saml_assertion.c | 25 +- lasso/xml/saml_assertion.h | 3 +- lasso/xml/xml.c | 518 ++++++++++++++++++++++++--------- lasso/xml/xml.h | 234 ++++++++------- 9 files changed, 615 insertions(+), 342 deletions(-) commit 73113ee6bd8ea80a335d67efb4f7a99cde17fdd2 Author: Valery Febvre Date: Thu Aug 19 12:45:05 2004 +0000 Added 2 methods: lasso_samlp_response_abstract_set_signature_tmpl(), lasso_samlp_response_abstract_sign_signature_tmpl() Removed err param in lasso_samlp_response_abstract_set_signature() lasso/xml/samlp_response_abstract.c | 63 +++++++++++++++++++++++-------------- lasso/xml/samlp_response_abstract.h | 45 +++++++++++++++----------- 2 files changed, 65 insertions(+), 43 deletions(-) commit 91dda0f98173fe7d3251ba2e22a96e39b553275e Author: Valery Febvre Date: Thu Aug 19 12:44:35 2004 +0000 Added 2 methods: lasso_samlp_request_abstract_set_signature_tmpl(), lasso_samlp_request_abstract_sign_signature_tmpl() Removed err param in lasso_samlp_request_abstract_set_signature() lasso/xml/samlp_request_abstract.c | 63 +++++++++++++++++++++++--------------- lasso/xml/samlp_request_abstract.h | 42 +++++++++++++++---------- 2 files changed, 64 insertions(+), 41 deletions(-) commit 611701ccfc9db8b47f2623d39b926097018dd1e1 Author: Valery Febvre Date: Thu Aug 19 12:42:41 2004 +0000 Added a '_' character at the begining of all ids generated by lasso_build_unique_id() lasso/xml/tools.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) commit 8d3167dd580338474ecae4f17df3f1b97cccd2a0 Author: Valery Febvre Date: Thu Aug 19 12:39:18 2004 +0000 Update codes lasso/xml/errors.h | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) commit 9a64f2c440b686192f98fdb446e44a19f146506e Author: Valery Febvre Date: Thu Aug 19 12:38:40 2004 +0000 Added a signature template in lasso_request_new() lasso/Attic/protocols/request.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) commit 9e5b17d0136bbc6d09fe817abe1588525957f63f Author: Valery Febvre Date: Thu Aug 19 12:37:17 2004 +0000 Added 2 params in lasso_authn_request_new() sign_type & sign_method are used to build the signature template lasso/Attic/protocols/authn_request.c | 13 +++++++++++-- lasso/Attic/protocols/authn_request.h | 4 +++- 2 files changed, 14 insertions(+), 3 deletions(-) commit 10c66866d34bdc358bd274ab29929e2b81ee8860 Author: Valery Febvre Date: Thu Aug 19 12:35:12 2004 +0000 Changed type of signature_method guint -> lassoSignatureMethod lasso/id-ff/server.c | 10 +++++----- lasso/id-ff/server.h | 12 ++++++------ 2 files changed, 11 insertions(+), 11 deletions(-) commit 01ed3293d820172f9112adaaa1958ad90e9454eb Author: Nicolas Clapies Date: Thu Aug 19 11:34:23 2004 +0000 fixed bug in lasso_logout_build_response_msg() : build the response message depending on the HTTP method requester lasso/id-ff/logout.c | 55 ++++++++++++++++++++++++++++++---------------------- 1 file changed, 32 insertions(+), 23 deletions(-) commit 34ba89c1918d782ccc9f4fa6ba2827efe3f2d21b Author: Romain Chantereay Date: Thu Aug 19 11:04:01 2004 +0000 Added ds_signature in the Makefile sources and headers declarations. lasso/xml/Makefile.am | 2 ++ 1 file changed, 2 insertions(+) commit 6efe72288ad48659febde2037d6d245195c7e8cc Author: Christophe Nowicki Date: Thu Aug 19 10:29:28 2004 +0000 PHP Binding : Added lasso_profile_set_session_from_dump Now lasso_cast_to_profile take to different reources Sample SP : Logout in progress php/Attic/examples/sample-sp/index.php | 19 +++++---- php/Attic/examples/sample-sp/logout.php | 32 +++++++++++++- php/environs/lasso_profile.c | 76 ++++++++++++++++++++++++--------- php/lasso.c | 1 + php/php_lasso.h | 1 + 5 files changed, 98 insertions(+), 31 deletions(-) commit 6fdcd66750821e615ea13ddf13ab9ad68ed523aa Author: Romain Chantereay Date: Thu Aug 19 10:11:40 2004 +0000 If swig not present: SWIG=echo python automake use $SWIG instead of swig. configure.ac | 1 + python/Makefile.am | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) commit 956c94f23ed04b10c410a07337e42a4c413fd209 Author: Frederic Peters Date: Thu Aug 19 09:19:58 2004 +0000 removed logout part from C test 2; it would work now. But http://buildbox.entrouvert.org/logs/20040818/lupin.1820.changelog.xml tests/login_tests.c | 58 ----------------------------------------------------- 1 file changed, 58 deletions(-) commit 59240e11a5c42eadfa9b5e5325265a8e66f4a23e Author: Emmanuel Raviart Date: Thu Aug 19 09:09:16 2004 +0000 Bug correction. python/tests/IdentityProvider.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit a8611528f6be178eb053bdafabb905664f89bf0a Author: Emmanuel Raviart Date: Thu Aug 19 09:08:53 2004 +0000 __str__ should not have arguments. python/lasso.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit fd7ab24a5bea1d433fae3bc9f5b5636de897b97e Author: Romain Chantereay Date: Thu Aug 19 08:50:25 2004 +0000 The old subdirs python Makefile generation is no more needed. configure.ac | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) commit d82a9b5207c31afb1838655f498350d4e8b981cc Author: Romain Chantereay Date: Thu Aug 19 08:49:40 2004 +0000 Include swig Interface file in the source distribution. Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 7dc6fd4dac5ac187b595dda61811f4445af85537 Author: Romain Chantereay Date: Thu Aug 19 08:48:45 2004 +0000 Now python binding is handled by SWIG. Manou takes the following parts. All the file in the python directory except Makefile.am are useless now; but I do not remove it. python/Makefile.am | 72 +++++++++++++++++++++++++++++++++--------------------- 1 file changed, 44 insertions(+), 28 deletions(-) commit 7c21342696a1b94957755866be1731fe5186c0d9 Author: Nicolas Clapies Date: Wed Aug 18 16:42:12 2004 +0000 *** empty log message *** lasso/id-ff/logout.c | 1 - 1 file changed, 1 deletion(-) commit 4c70d00e5cb11a3ad897f2f0c16e96b1202a8c7f Author: Nicolas Clapies Date: Wed Aug 18 16:41:20 2004 +0000 federation termination updates lasso/id-ff/federation_termination.c | 18 +++++++++++------- lasso/id-ff/federation_termination.h | 1 + 2 files changed, 12 insertions(+), 7 deletions(-) commit d75d1ecc480d553c3710263b9cf5fe69eb813896 Author: Nicolas Clapies Date: Wed Aug 18 16:40:26 2004 +0000 little register name identifier udpates lasso/id-ff/register_name_identifier.c | 204 +++++++++++++++++--------- lasso/id-ff/register_name_identifier.h | 6 +- python/environs/py_register_name_identifier.c | 14 +- python/environs/py_register_name_identifier.h | 2 +- python/lasso.py | 6 +- python/lassomod.c | 2 +- 6 files changed, 154 insertions(+), 80 deletions(-) commit 3f8a8fc02fab15d98a826503ab56a6cb8dfe2eba Author: Romain Chantereay Date: Wed Aug 18 16:35:20 2004 +0000 Oups. Reverted to 1.7 for lasso-sections.txt maintainer-clean do not remove it anymore. docs/reference/Makefile.am | 4 +- docs/reference/lasso-sections.txt | 2168 +++++++++++++++++++------------------ 2 files changed, 1108 insertions(+), 1064 deletions(-) commit 8b51d48a47c56c176947dc27bdf25515e3722705 Author: Romain Chantereay Date: Wed Aug 18 16:29:02 2004 +0000 Java now distributes itself well and compile well too. (SWIG not needed when compiling sources distribution.) java/Makefile.am | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) commit ea67e007f0e4de8d4fef86a3078d90d178e8f611 Author: Romain Chantereay Date: Wed Aug 18 16:27:56 2004 +0000 Added generation and clean of lasso-references.txt docs/reference/Makefile.am | 4 +- docs/reference/lasso-sections.txt | 2220 ++++++++++++++++++------------------- 2 files changed, 1090 insertions(+), 1134 deletions(-) commit e4674e48e4286b8614f08dd3bc67e79ed0f6e2cd Author: Valery Febvre Date: Wed Aug 18 16:23:26 2004 +0000 Removed ds_signature.c & ds_signature.h lasso/xml/Makefile.am | 2 -- 1 file changed, 2 deletions(-) commit d2e417e034f35c1875e792f12617fe5457e2de9a Author: Valery Febvre Date: Wed Aug 18 16:22:32 2004 +0000 Added a '%s' in LASSO_DS_ERROR_SIGNATURE_FAILED message lasso/xml/errors.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit e54d25e2b473746e8cfa5793ae09ce5b983053b2 Author: Frederic Peters Date: Wed Aug 18 15:50:18 2004 +0000 warning about the total uselessness of lasso_server_dump docs/lasso-book/writing-a-c-sp.txt | 2 ++ 1 file changed, 2 insertions(+) commit 0950f7558cc378dad1493713278e392562b221f0 Author: Christophe Nowicki Date: Wed Aug 18 15:49:49 2004 +0000 Rename install.php to setup.php php/Attic/examples/sample-sp/assertionConsumer.php | 13 ++++++- php/Attic/examples/sample-sp/index.php | 43 ++++++++++++++++++++-- .../examples/sample-sp/{install.php => setup.php} | 2 +- 3 files changed, 53 insertions(+), 5 deletions(-) commit 1a599c2608fd2b337993c39a9d378a176b7077e0 Author: Frederic Peters Date: Wed Aug 18 15:45:48 2004 +0000 section about lasso_server_dump and lasso_server_new_from_dump docs/lasso-book/writing-a-c-sp.txt | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) commit 131a818d244eea55a4e038c654c72ceee0a17526 Author: Christophe Nowicki Date: Wed Aug 18 15:03:56 2004 +0000 Service Provider written in PHP (login is working and logout will work soon ;0) php/Attic/examples/sample-sp/admin_user.php | 162 +++++++++++++++++++ php/Attic/examples/sample-sp/assertionConsumer.php | 174 +++++++++++++++++++++ php/Attic/examples/sample-sp/config.php.inc | 27 ++++ php/Attic/examples/sample-sp/index.php | 119 ++++++++++++++ php/Attic/examples/sample-sp/install.php | 130 +++++++++++++++ php/Attic/examples/sample-sp/login.php | 58 +++++++ php/Attic/examples/sample-sp/logout.php | 45 ++++++ php/Attic/examples/sample-sp/register.php | 83 ++++++++++ 8 files changed, 798 insertions(+) commit 712ff1a9f7f68c8ade853f3ae031666a63120fa8 Author: Christophe Nowicki Date: Wed Aug 18 14:56:01 2004 +0000 Add environ/lasso_logout.c php/environs/Makefile.am | 2 +- php/lasso.c | 25 ++++++++++++++++++++----- php/php_lasso.h | 7 +++++++ 3 files changed, 28 insertions(+), 6 deletions(-) commit 167608159f11048a720c6339dd217b679e3c83ab Author: Christophe Nowicki Date: Wed Aug 18 14:55:19 2004 +0000 Add logout functions : lasso_logout_new, lasso_logout_init_request, lasso_logout_build_request_msg php/environs/lasso_logout.c | 106 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) commit b2a9a14d0bbc5c135848c2077539f164362ec697 Author: Frederic Peters Date: Wed Aug 18 14:39:00 2004 +0000 properly use libtool convenience libraries (intend is to build correctly on hppa) python/Makefile.am | 8 ++++---- python/environs/Makefile.am | 4 ++-- python/protocols/Makefile.am | 4 ++-- python/protocols/elements/Makefile.am | 4 ++-- python/xml/Makefile.am | 4 ++-- 5 files changed, 12 insertions(+), 12 deletions(-) commit e1c17ed12a2d797c25dba09a60961d1b8a04730b Author: Romain Chantereay Date: Wed Aug 18 14:26:10 2004 +0000 Update interface (moved _bla to bla). swig/Lasso.i | 357 ++++++++++++++++++++++++----------------------------------- 1 file changed, 145 insertions(+), 212 deletions(-) commit 214f02b82cdb71969a25b89dc61db7fa435664b1 Author: Nicolas Clapies Date: Wed Aug 18 14:05:37 2004 +0000 udpate of logout and federation profiles lasso/id-ff/federation_termination.c | 129 ++++++++++++++++++++++++++--------- lasso/id-ff/logout.c | 29 +++++--- lasso/id-ff/logout.h | 2 - 3 files changed, 117 insertions(+), 43 deletions(-) commit d9978fdc4cbdb7f88b48ba5c8e949bd2822e133f Author: Nicolas Clapies Date: Wed Aug 18 14:05:06 2004 +0000 added private attribute http_request_method in profile class to know the HTTP method in defederation, name registration, logout and name mapping used by the requester lasso/id-ff/profile.h | 2 ++ 1 file changed, 2 insertions(+) commit d543e6115c46cefe9008159638a2cd821ed56b93 Author: Nicolas Clapies Date: Wed Aug 18 09:11:19 2004 +0000 renamed federationTerminationReturnServiceURL to federationTerminationServiceReturnURL lasso/Attic/protocols/provider.c | 4 ++-- lasso/Attic/protocols/provider.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) commit bb2efc94ff6faf88f569c8f4f97dd6ed6e76c9cb Author: Frederic Peters Date: Wed Aug 18 06:40:17 2004 +0000 properly don't enable python if it was not detected configure.ac | 2 ++ 1 file changed, 2 insertions(+) commit d72a1e78b713199778d3df569f5ec5aedf575ea8 Author: Frederic Peters Date: Tue Aug 17 19:48:15 2004 +0000 shortened title a bit docs/lasso-book/writing-a-c-sp.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 54b4251de940ae0b876c4b60e7ee4e793e33ad90 Author: Frederic Peters Date: Tue Aug 17 17:09:27 2004 +0000 this script checks a documentation file for functions that do not exist docs/lasso-book/check-functions.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) commit 2086c111302eeda25fb671667fa2f68bf7f91036 Author: Frederic Peters Date: Tue Aug 17 17:07:25 2004 +0000 they may talk about correctness but won't make it docs/lasso-book/writing-a-c-sp.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 315ff2d592cb4df30028bee2a6f9a90415e3e449 Author: Romain Chantereay Date: Tue Aug 17 17:05:39 2004 +0000 Updated Interfaces. Commented out all .*Class$. swig/Lasso.i | 1039 ++++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 655 insertions(+), 384 deletions(-) commit d8d1ca6fd8d676432984a994e46004e01ab272b9 Author: Frederic Peters Date: Tue Aug 17 16:57:48 2004 +0000 typo docs/lasso-book/writing-a-c-sp.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit b0462a7e1344af0d7ef3ef4f125bfa9863d12bc0 Author: Nicolas Clapies Date: Tue Aug 17 16:40:06 2004 +0000 updated error checkings with ret / goto done method lasso/id-ff/logout.c | 131 +++++++++++++++++++++++++++++++++++---------------- 1 file changed, 90 insertions(+), 41 deletions(-) commit b0333739d2fc6eb3818089237e57c862b19afcb4 Author: Emmanuel Raviart Date: Tue Aug 17 15:50:12 2004 +0000 I presume that the writer of the documentation "Writing a Liberty Alliance service provider in C" has never coded such a SP in C. docs/lasso-book/writing-a-c-sp.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 856bb4e8858d83d35605479142ffc2e6a0f36c93 Author: Christophe Nowicki Date: Tue Aug 17 15:44:45 2004 +0000 rename lasso_login_set_identity_from_dump to lasso_profile_set_identity_from_dump php/environs/lasso_login.c | 24 ------------------------ php/environs/lasso_profile.c | 26 ++++++++++++++++++++++++++ php/lasso.c | 2 +- php/php_lasso.h | 2 +- 4 files changed, 28 insertions(+), 26 deletions(-) commit 73c8f9754b3cb6812a26a68dc581c20f98c1a448 Author: Christophe Nowicki Date: Tue Aug 17 15:25:58 2004 +0000 fix cvs sticky state problem. php/environs/lasso_profile.c | 35 +++++++++++++++++++++++++++++++---- php/environs/lasso_server.c | 4 +--- 2 files changed, 32 insertions(+), 7 deletions(-) commit ac83eafc8248e724cf7e014ca37e6cf49cf1a7c7 Author: Christophe Nowicki Date: Tue Aug 17 15:25:04 2004 +0000 Added lasso_session_dump php/environs/lasso_session.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) commit 57cf0ef24f22debcf0eee9a894c08305f62eb7a8 Author: Christophe Nowicki Date: Tue Aug 17 15:22:01 2004 +0000 added lasso_login_set_identity_from_dump php/environs/lasso_login.c | 49 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) commit c436305e6eaccdeaa7fefa5c946ce7baf2c0b6a2 Author: Christophe Nowicki Date: Tue Aug 17 15:20:59 2004 +0000 fix cvs sticky state ;( php/lasso.c | 7 +++++++ php/php_lasso.h | 9 +++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) commit 507384f104dc62723a1a163b0cd17fe98af859da Author: Nicolas Clapies Date: Tue Aug 17 14:21:59 2004 +0000 added UnsupportedProfile constant lasso/xml/strings.c | 1 + lasso/xml/strings.h | 1 + 2 files changed, 2 insertions(+) commit 8608fd371cabd5f55bc234ca1748665607a94c02 Author: Nicolas Clapies Date: Tue Aug 17 14:18:40 2004 +0000 updated doc in logout, fixed Feature Requests item #253, must be tested, added doc to federation termination notification lasso/id-ff/federation_termination.c | 89 +++++++++++++++++++++++++++--- lasso/id-ff/logout.c | 104 +++++++++++++++++++++++++---------- lasso/id-ff/logout.h | 5 +- 3 files changed, 159 insertions(+), 39 deletions(-) commit aa0060069b1b09ced26d4d19278b704dd6e44cc0 Author: Nicolas Clapies Date: Tue Aug 17 08:38:12 2004 +0000 removed unwanted code lasso/id-ff/logout.c | 3 --- 1 file changed, 3 deletions(-) commit 9030f5e10ef00e9a3b8c8fe69801bad9e97c384b Author: Nicolas Clapies Date: Tue Aug 17 08:31:00 2004 +0000 removed unwanted attribute in logout object lasso/id-ff/logout.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 61c68d4d519fec3e1493782e4f58a208f426cd30 Author: Nicolas Clapies Date: Mon Aug 16 16:17:45 2004 +0000 added API doc comments lasso/id-ff/logout.c | 187 ++++++++++++++++++++++++++++++++++++++++++--------- lasso/id-ff/logout.h | 8 +-- 2 files changed, 159 insertions(+), 36 deletions(-) commit c398b83f37550f400b3a8f13d32cc6d5f2b75ed9 Author: Christophe Nowicki Date: Mon Aug 16 15:03:48 2004 +0000 Add lasso_profile_get_identity, lasso_profile_is_identity_dirty, lasso_profile_get_session, lasso_profile_is_session_dirty php/environs/lasso_profile.c | 100 ++++++++++++++++++++++++++++++++++++++++++- php/environs/lasso_session.c | 1 + php/lasso.c | 7 ++- php/php_lasso.h | 7 ++- 4 files changed, 112 insertions(+), 3 deletions(-) commit efa9e723b14e730d678df3efe1aa70ff8c706e2f Author: Frederic Peters Date: Mon Aug 16 15:01:41 2004 +0000 where is the name identifier docs/lasso-book/writing-a-c-sp.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit a6aa82cdfe368a4e65fbac5bdc64bd98747b29b8 Author: Frederic Peters Date: Mon Aug 16 14:21:57 2004 +0000 detect and use rest2html configure.ac | 7 ++++++- docs/lasso-book/Makefile.am | 12 +++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) commit 05cc875b413f808fa69088c6e6ac4f22d8e95b8a Author: Frederic Peters Date: Mon Aug 16 14:07:43 2004 +0000 signature docs/lasso-book/writing-a-c-sp.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 300bf558e7350604e44835a61c5d3f639493253b Author: Christophe Nowicki Date: Mon Aug 16 13:25:59 2004 +0000 Added lasso_login_process_response_msg and fix a minor bug in lib_authn_request (bool) php/environs/lasso_login.c | 60 +++++++++++++++++++++++++++++++++++++-- php/environs/lasso_profile.c | 5 ++++ php/lasso.c | 8 ++++++ php/php_lasso.h | 5 +++- php/xml/lasso_lib_authn_request.c | 31 ++++++++++++++++++-- 5 files changed, 102 insertions(+), 7 deletions(-) commit bf9b56691d0c2cb04aaf8da12c870a3e52cf8537 Author: Frederic Peters Date: Mon Aug 16 13:17:51 2004 +0000 last one docs/lasso-book/writing-a-c-sp.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit c583335bf1457a4d2be1b6121f2defdc0f3c870a Author: Frederic Peters Date: Mon Aug 16 13:16:25 2004 +0000 cast Login et Logout to Provider docs/lasso-book/writing-a-c-sp.txt | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) commit e86056cb7da2d208c4d962bd663e5f4044a42af7 Author: Valery Febvre Date: Mon Aug 16 11:47:33 2004 +0000 *** empty log message *** lasso/xml/strings.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 8059e3ee83a1d3afa2f01fabccb58263949c4c13 Author: Emmanuel Raviart Date: Mon Aug 16 03:48:53 2004 +0000 Improved session deletion in Python simulator. python/tests/IdentityProvider.py | 1 + python/tests/ServiceProvider.py | 3 +++ 2 files changed, 4 insertions(+) commit fc8c1f522f886026b72b95fd1aa6f7de6fec04e2 Author: Emmanuel Raviart Date: Mon Aug 16 03:44:35 2004 +0000 Removed comments. python/tests/http.py | 3 --- 1 file changed, 3 deletions(-) commit c100bc71f668f7374714569b8f8729268eb4de8d Author: Frederic Peters Date: Sat Aug 14 13:46:00 2004 +0000 format the metadata to avoid an horizontal scrollbar docs/lasso-book/writing-a-c-sp.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit b6aee731115594f98da80d2f48eb1c061a5232c0 Author: Frederic Peters Date: Sat Aug 14 13:44:18 2004 +0000 lasso_provider_get_assertionConsumerServiceURL now returns a glib-allocated string (instead of libxml2-allocated) since it was already declared to return gchar*. Moreover it strips the returned string so that is is possible to have some spacings in the metadata file. https://service-provider:2003/liberty-alliance/liberty-alliance/assertionConsumer won't no more cause a redirect to Location:\n https://... lasso/Attic/protocols/provider.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) commit e045b3b5f977322ad2baae4881dc31832d2ceb31 Author: Frederic Peters Date: Sat Aug 14 13:05:26 2004 +0000 missing parameter docs/lasso-book/writing-a-c-sp.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 10a9fd0b529e0fc5a45a161f310c65c0467cf436 Author: Frederic Peters Date: Sat Aug 14 13:04:55 2004 +0000 trying to fix login test 2 tests/login_tests.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit 09a8899c801fffb67c955c083498ea11aca62bba Author: Frederic Peters Date: Sat Aug 14 12:57:13 2004 +0000 get away from G_LOG_LEVEL_ERROR since they cause abort() lasso/Attic/protocols/authn_request_envelope.c | 4 +++- lasso/Attic/protocols/authn_response.c | 4 ++-- lasso/Attic/protocols/logout_response.c | 12 ++++++------ lasso/Attic/protocols/register_name_identifier_request.c | 2 +- lasso/Attic/protocols/register_name_identifier_response.c | 4 ++-- lasso/id-ff/profile.c | 10 +++++----- lasso/id-ff/server.c | 9 +++++++-- lasso/lasso.c | 10 +++++----- 8 files changed, 31 insertions(+), 24 deletions(-) commit 2195d23edbe82b14aea8de9a7a2b2656331ef57c Author: Frederic Peters Date: Sat Aug 14 12:00:13 2004 +0000 test for xmlParseMemory success lasso/xml/xml.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 93a9d0f95a339f17ed6d58138620176037c2a8ba Author: Frederic Peters Date: Sat Aug 14 09:58:00 2004 +0000 // are not in ISO C90 lasso/id-ff/login.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 991d5b45abb3a000149e162fc0f7a74c0517b88f Author: Frederic Peters Date: Sat Aug 14 09:46:57 2004 +0000 include since xmlSecBase64Decode is used lasso/Attic/protocols/authn_request.c | 1 + 1 file changed, 1 insertion(+) commit 0aa872cb315c4e5dab2d902daa0208ac8c44c06a Author: Frederic Peters Date: Sat Aug 14 09:36:56 2004 +0000 %F is only defined in C99 and %T in the Single Unix Specification; use more conservative "%Y-%m-%dT%H:%M:%SZ" lasso/xml/tools.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit e6f7ff0416424afd865bc34f5fe63cb4c691b67b Author: Emmanuel Raviart Date: Sat Aug 14 08:36:18 2004 +0000 Added logout to sample Liberty proxy, but it fails because of Lasso bug #259. python/tests/IdentityProvider.py | 21 ++++++++++++++++----- python/tests/LibertyEnabledProxy.py | 19 ++++++++++++++++--- python/tests/ServiceProvider.py | 7 ++++++- python/tests/login_tests.py | 20 ++++++++++---------- 4 files changed, 48 insertions(+), 19 deletions(-) commit 8836ee6979c26484bcd31043b2f3ce92ddfb3b8b Author: Frederic Peters Date: Fri Aug 13 18:16:03 2004 +0000 include xmlsec/base64.h since it uses one of those functions lasso/id-ff/server.c | 2 ++ 1 file changed, 2 insertions(+) commit da4e23d09cb5edb56c70ccc090d7929a72122043 Author: Frederic Peters Date: Fri Aug 13 15:16:13 2004 +0000 declarations first (and s/lenght/length/) lasso/Attic/protocols/artifact.c | 17 ++-- lasso/Attic/protocols/authn_request.c | 8 +- lasso/id-ff/identity.c | 4 +- lasso/id-ff/profile.c | 4 +- lasso/xml/lib_assertion.c | 3 +- lasso/xml/lib_authentication_statement.c | 9 ++- lasso/xml/lib_authn_context.c | 12 ++- lasso/xml/lib_authn_request.c | 57 ++++++++----- lasso/xml/lib_authn_request_envelope.c | 26 +++--- lasso/xml/lib_authn_response.c | 11 ++- lasso/xml/lib_authn_response_envelope.c | 12 ++- .../xml/lib_federation_termination_notification.c | 11 ++- lasso/xml/lib_idp_entries.c | 3 +- lasso/xml/lib_idp_entry.c | 9 ++- lasso/xml/lib_idp_list.c | 6 +- lasso/xml/lib_logout_request.c | 26 +++--- lasso/xml/lib_name_identifier_mapping_request.c | 14 ++-- lasso/xml/lib_name_identifier_mapping_response.c | 11 ++- lasso/xml/lib_register_name_identifier_request.c | 20 +++-- lasso/xml/lib_request_authn_context.c | 18 +++-- lasso/xml/lib_scoping.c | 6 +- lasso/xml/lib_status_response.c | 11 ++- lasso/xml/lib_subject.c | 3 +- lasso/xml/saml_advice.c | 6 +- lasso/xml/saml_assertion.c | 33 +++++--- lasso/xml/saml_audience_restriction_condition.c | 3 +- lasso/xml/saml_authentication_statement.c | 12 ++- lasso/xml/saml_authority_binding.c | 9 ++- lasso/xml/saml_conditions.c | 12 ++- lasso/xml/saml_name_identifier.c | 6 +- lasso/xml/saml_subject.c | 6 +- lasso/xml/saml_subject_confirmation.c | 6 +- lasso/xml/saml_subject_locality.c | 6 +- lasso/xml/saml_subject_statement_abstract.c | 3 +- lasso/xml/samlp_request.c | 3 +- lasso/xml/samlp_request_abstract.c | 27 ++++--- lasso/xml/samlp_response.c | 6 +- lasso/xml/samlp_response_abstract.c | 21 +++-- lasso/xml/samlp_status.c | 9 ++- lasso/xml/samlp_status_code.c | 7 +- lasso/xml/soap-env_body.c | 3 +- lasso/xml/soap-env_envelope.c | 3 +- lasso/xml/tools.c | 12 +-- lasso/xml/xml.c | 94 ++++++++++++++-------- 44 files changed, 380 insertions(+), 208 deletions(-) commit 2687aac1714a0fe2260d725dc4c628c2696134f4 Author: Emmanuel Raviart Date: Fri Aug 13 11:02:46 2004 +0000 Added client flag to SSL servers, because each server is also a SOAP client. tests/data/ca1-la/certificate.pem | 34 ++++++++++++------------ tests/data/ca1-la/jks.keystore | Bin 1262 -> 1262 bytes tests/data/ca1-ssl/certificate.pem | 32 +++++++++++----------- tests/data/ca1-ssl/jks.keystore | Bin 1301 -> 1301 bytes tests/data/ca2-la/certificate.pem | 32 +++++++++++----------- tests/data/ca2-la/jks.keystore | Bin 1262 -> 1262 bytes tests/data/ca2-ssl/certificate.pem | 32 +++++++++++----------- tests/data/ca2-ssl/jks.keystore | Bin 1301 -> 1301 bytes tests/data/ca3-la/certificate.pem | 32 +++++++++++----------- tests/data/ca3-la/jks.keystore | Bin 1262 -> 1262 bytes tests/data/ca3-ssl/certificate.pem | 32 +++++++++++----------- tests/data/ca3-ssl/jks.keystore | Bin 1301 -> 1301 bytes tests/data/ca4-la/certificate.pem | 32 +++++++++++----------- tests/data/ca4-la/jks.keystore | Bin 1262 -> 1262 bytes tests/data/ca4-ssl/certificate.pem | 32 +++++++++++----------- tests/data/ca4-ssl/jks.keystore | Bin 1301 -> 1301 bytes tests/data/idp1-la/certificate.pem | 34 ++++++++++++------------ tests/data/idp1-la/jks.keystore | Bin 4803 -> 4804 bytes tests/data/idp1-la/private-key-raw.pem | 44 +++++++++++++++---------------- tests/data/idp1-la/public-key.pem | 14 +++++----- tests/data/idp1-ssl/all.p12 | Bin 4398 -> 4398 bytes tests/data/idp1-ssl/certificate.pem | 34 ++++++++++++------------ tests/data/idp1-ssl/jks.keystore | Bin 4838 -> 4839 bytes tests/data/idp1-ssl/private-key-raw.pem | 44 +++++++++++++++---------------- tests/data/idp2-la/certificate.pem | 34 ++++++++++++------------ tests/data/idp2-la/jks.keystore | Bin 4803 -> 4804 bytes tests/data/idp2-la/private-key-raw.pem | 44 +++++++++++++++---------------- tests/data/idp2-la/public-key.pem | 14 +++++----- tests/data/idp2-ssl/all.p12 | Bin 4398 -> 4398 bytes tests/data/idp2-ssl/certificate.pem | 34 ++++++++++++------------ tests/data/idp2-ssl/jks.keystore | Bin 4838 -> 4838 bytes tests/data/idp2-ssl/private-key-raw.pem | 44 +++++++++++++++---------------- tests/data/idp3-la/certificate.pem | 34 ++++++++++++------------ tests/data/idp3-la/jks.keystore | Bin 4804 -> 4803 bytes tests/data/idp3-la/private-key-raw.pem | 44 +++++++++++++++---------------- tests/data/idp3-la/public-key.pem | 14 +++++----- tests/data/idp3-ssl/all.p12 | Bin 4398 -> 4398 bytes tests/data/idp3-ssl/certificate.pem | 34 ++++++++++++------------ tests/data/idp3-ssl/jks.keystore | Bin 4838 -> 4839 bytes tests/data/idp3-ssl/private-key-raw.pem | 44 +++++++++++++++---------------- tests/data/idp4-la/certificate.pem | 34 ++++++++++++------------ tests/data/idp4-la/jks.keystore | Bin 4805 -> 4803 bytes tests/data/idp4-la/private-key-raw.pem | 44 +++++++++++++++---------------- tests/data/idp4-la/public-key.pem | 14 +++++----- tests/data/idp4-ssl/all.p12 | Bin 4398 -> 4398 bytes tests/data/idp4-ssl/certificate.pem | 34 ++++++++++++------------ tests/data/idp4-ssl/jks.keystore | Bin 4838 -> 4839 bytes tests/data/idp4-ssl/private-key-raw.pem | 44 +++++++++++++++---------------- tests/data/lecp1-la/certificate.pem | 32 +++++++++++----------- tests/data/lecp1-la/jks.keystore | Bin 4804 -> 4804 bytes tests/data/lecp1-la/private-key-raw.pem | 44 +++++++++++++++---------------- tests/data/lecp1-la/public-key.pem | 14 +++++----- tests/data/lecp1-ssl/all.p12 | Bin 4400 -> 4400 bytes tests/data/lecp1-ssl/certificate.pem | 34 ++++++++++++------------ tests/data/lecp1-ssl/jks.keystore | Bin 4840 -> 4842 bytes tests/data/lecp1-ssl/private-key-raw.pem | 44 +++++++++++++++---------------- tests/data/lecp2-la/certificate.pem | 32 +++++++++++----------- tests/data/lecp2-la/jks.keystore | Bin 4806 -> 4805 bytes tests/data/lecp2-la/private-key-raw.pem | 44 +++++++++++++++---------------- tests/data/lecp2-la/public-key.pem | 14 +++++----- tests/data/lecp2-ssl/all.p12 | Bin 4400 -> 4400 bytes tests/data/lecp2-ssl/certificate.pem | 34 ++++++++++++------------ tests/data/lecp2-ssl/jks.keystore | Bin 4841 -> 4843 bytes tests/data/lecp2-ssl/private-key-raw.pem | 44 +++++++++++++++---------------- tests/data/lecp3-la/certificate.pem | 32 +++++++++++----------- tests/data/lecp3-la/jks.keystore | Bin 4805 -> 4805 bytes tests/data/lecp3-la/private-key-raw.pem | 44 +++++++++++++++---------------- tests/data/lecp3-la/public-key.pem | 14 +++++----- tests/data/lecp3-ssl/all.p12 | Bin 4400 -> 4400 bytes tests/data/lecp3-ssl/certificate.pem | 34 ++++++++++++------------ tests/data/lecp3-ssl/jks.keystore | Bin 4839 -> 4840 bytes tests/data/lecp3-ssl/private-key-raw.pem | 44 +++++++++++++++---------------- tests/data/lecp4-la/certificate.pem | 32 +++++++++++----------- tests/data/lecp4-la/jks.keystore | Bin 4806 -> 4804 bytes tests/data/lecp4-la/private-key-raw.pem | 44 +++++++++++++++---------------- tests/data/lecp4-la/public-key.pem | 14 +++++----- tests/data/lecp4-ssl/all.p12 | Bin 4400 -> 4400 bytes tests/data/lecp4-ssl/certificate.pem | 34 ++++++++++++------------ tests/data/lecp4-ssl/jks.keystore | Bin 4839 -> 4841 bytes tests/data/lecp4-ssl/private-key-raw.pem | 44 +++++++++++++++---------------- tests/data/sp1-la/certificate.pem | 34 ++++++++++++------------ tests/data/sp1-la/jks.keystore | Bin 4802 -> 4801 bytes tests/data/sp1-la/private-key-raw.pem | 44 +++++++++++++++---------------- tests/data/sp1-la/public-key.pem | 14 +++++----- tests/data/sp1-ssl/all.p12 | Bin 4388 -> 4388 bytes tests/data/sp1-ssl/certificate.pem | 34 ++++++++++++------------ tests/data/sp1-ssl/jks.keystore | Bin 4836 -> 4837 bytes tests/data/sp1-ssl/private-key-raw.pem | 44 +++++++++++++++---------------- tests/data/sp2-la/certificate.pem | 34 ++++++++++++------------ tests/data/sp2-la/jks.keystore | Bin 4802 -> 4801 bytes tests/data/sp2-la/private-key-raw.pem | 44 +++++++++++++++---------------- tests/data/sp2-la/public-key.pem | 14 +++++----- tests/data/sp2-ssl/all.p12 | Bin 4388 -> 4388 bytes tests/data/sp2-ssl/certificate.pem | 34 ++++++++++++------------ tests/data/sp2-ssl/jks.keystore | Bin 4835 -> 4836 bytes tests/data/sp2-ssl/private-key-raw.pem | 44 +++++++++++++++---------------- tests/data/sp3-la/certificate.pem | 34 ++++++++++++------------ tests/data/sp3-la/jks.keystore | Bin 4800 -> 4802 bytes tests/data/sp3-la/private-key-raw.pem | 44 +++++++++++++++---------------- tests/data/sp3-la/public-key.pem | 14 +++++----- tests/data/sp3-ssl/all.p12 | Bin 4388 -> 4388 bytes tests/data/sp3-ssl/certificate.pem | 34 ++++++++++++------------ tests/data/sp3-ssl/jks.keystore | Bin 4839 -> 4836 bytes tests/data/sp3-ssl/private-key-raw.pem | 44 +++++++++++++++---------------- tests/data/sp4-la/certificate.pem | 34 ++++++++++++------------ tests/data/sp4-la/jks.keystore | Bin 4801 -> 4800 bytes tests/data/sp4-la/private-key-raw.pem | 44 +++++++++++++++---------------- tests/data/sp4-la/public-key.pem | 14 +++++----- tests/data/sp4-ssl/all.p12 | Bin 4388 -> 4388 bytes tests/data/sp4-ssl/certificate.pem | 34 ++++++++++++------------ tests/data/sp4-ssl/jks.keystore | Bin 4836 -> 4836 bytes tests/data/sp4-ssl/private-key-raw.pem | 44 +++++++++++++++---------------- tests/data/user1-la/all.p12 | Bin 4255 -> 4255 bytes tests/data/user1-la/certificate.pem | 32 +++++++++++----------- tests/data/user1-la/jks.keystore | Bin 4806 -> 4806 bytes tests/data/user1-la/private-key-raw.pem | 44 +++++++++++++++---------------- tests/data/user1-la/public-key.pem | 14 +++++----- tests/data/user2-la/all.p12 | Bin 4255 -> 4255 bytes tests/data/user2-la/certificate.pem | 32 +++++++++++----------- tests/data/user2-la/jks.keystore | Bin 4805 -> 4805 bytes tests/data/user2-la/private-key-raw.pem | 44 +++++++++++++++---------------- tests/data/user2-la/public-key.pem | 14 +++++----- tests/data/user3-la/all.p12 | Bin 4255 -> 4255 bytes tests/data/user3-la/certificate.pem | 32 +++++++++++----------- tests/data/user3-la/jks.keystore | Bin 4806 -> 4804 bytes tests/data/user3-la/private-key-raw.pem | 44 +++++++++++++++---------------- tests/data/user3-la/public-key.pem | 14 +++++----- tests/data/user4-la/all.p12 | Bin 4255 -> 4255 bytes tests/data/user4-la/certificate.pem | 32 +++++++++++----------- tests/data/user4-la/jks.keystore | Bin 4806 -> 4805 bytes tests/data/user4-la/private-key-raw.pem | 44 +++++++++++++++---------------- tests/data/user4-la/public-key.pem | 14 +++++----- 132 files changed, 1325 insertions(+), 1325 deletions(-) commit db348429d96ff168906addab3477c482fda98036 Author: Frederic Peters Date: Fri Aug 13 10:54:17 2004 +0000 missed an arg docs/lasso-book/writing-a-c-sp.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 6bdea824940ff1a2720bda0d7cab98115012df45 Author: Emmanuel Raviart Date: Fri Aug 13 09:57:12 2004 +0000 Removed certificates that are no more used. java/coldfusion/src/CFLasso.java | 16 ++++++++-------- java/tests/LoginTest.java | 34 +++++++++++++++++----------------- python/tests/errorchecking_tests.py | 8 ++++---- 3 files changed, 29 insertions(+), 29 deletions(-) commit c3bc5661401cae588944effdb4d8d168bc5323d5 Author: Emmanuel Raviart Date: Fri Aug 13 09:07:38 2004 +0000 Improved lasso/.cvsignore. lasso/.cvsignore | 3 +++ 1 file changed, 3 insertions(+) commit 375dba73bd6fc5947709d960cc7b0b1e8c9dde80 Author: Emmanuel Raviart Date: Fri Aug 13 09:05:12 2004 +0000 Updated Python sample sites to use new certificates. python/tests/sample-idp.py | 40 +++++++++++++++++++-------------------- python/tests/sample-lep.py | 44 +++++++++++++++++++++---------------------- python/tests/sample-sp-lep.py | 38 ++++++++++++++++++------------------- python/tests/sample-sp.py | 38 ++++++++++++++++++------------------- 4 files changed, 80 insertions(+), 80 deletions(-) commit 95d303164fc5604c87a467c8e00d56bd1f60c5de Author: Emmanuel Raviart Date: Fri Aug 13 09:01:33 2004 +0000 Added forgotten LECP public keys. tests/data/lecp1-la/public-key.pem | 9 +++++++++ tests/data/lecp2-la/public-key.pem | 9 +++++++++ tests/data/lecp3-la/public-key.pem | 9 +++++++++ tests/data/lecp4-la/public-key.pem | 9 +++++++++ 4 files changed, 36 insertions(+) commit a8125cf026c17969b3cb67cdec3cea1494ea3e89 Author: Valery Febvre Date: Fri Aug 13 00:33:51 2004 +0000 Added error checks and error messages Added signature element in lib:AuthnRequest (POST method) and in samlp:Request lasso/id-ff/login.c | 158 ++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 130 insertions(+), 28 deletions(-) commit b91e6fb81f4e08ceefd3d4222851027aeb20d614 Author: Valery Febvre Date: Thu Aug 12 23:45:37 2004 +0000 lasso_server_add_provider returns now a -202 error when it fails lasso/id-ff/server.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 4f618c06b09fc11714e518986b4465b8ff65cd90 Author: Valery Febvre Date: Thu Aug 12 23:40:08 2004 +0000 *** empty log message *** lasso/Attic/protocols/provider.c | 100 +++++++++++++++++++++++++++++++++------ 1 file changed, 85 insertions(+), 15 deletions(-) commit 87a4494e8876616d31c62810eb0949b35e4c8a0c Author: Valery Febvre Date: Thu Aug 12 23:37:12 2004 +0000 Modified 4 error codes Added one lasso/xml/errors.h | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) commit 2adc33624c1f665efe8cd15eef394741417ada4d Author: Valery Febvre Date: Thu Aug 12 23:33:12 2004 +0000 Added comments lasso/xml/xml.c | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) commit cddb5d33dab673e1e8a97b6c26b46494fc289dc8 Author: Emmanuel Raviart Date: Thu Aug 12 22:25:36 2004 +0000 Added metadata corresponding to new certificates. Updated non regression tests to use these certificates and metadata. python/tests/LibertyEnabledProxy.py | 3 +++ python/tests/login_tests.py | 43 ++++++++++++++++++------------------- tests/data/idp1-la/metadata.xml | 19 ++++++++++++++++ tests/data/idp2-la/metadata.xml | 19 ++++++++++++++++ tests/data/idp3-la/metadata.xml | 19 ++++++++++++++++ tests/data/idp4-la/metadata.xml | 19 ++++++++++++++++ tests/data/lecp1-la/metadata.xml | 36 +++++++++++++++++++++++++++++++ tests/data/lecp2-la/metadata.xml | 36 +++++++++++++++++++++++++++++++ tests/data/lecp3-la/metadata.xml | 36 +++++++++++++++++++++++++++++++ tests/data/lecp4-la/metadata.xml | 36 +++++++++++++++++++++++++++++++ tests/data/sp1-la/metadata.xml | 20 +++++++++++++++++ tests/data/sp2-la/metadata.xml | 20 +++++++++++++++++ tests/data/sp3-la/metadata.xml | 20 +++++++++++++++++ tests/data/sp4-la/metadata.xml | 20 +++++++++++++++++ tests/login_tests.c | 31 +++++++++++++------------- 15 files changed, 339 insertions(+), 38 deletions(-) commit cb09ccbcee42ddee05e30bdfdb0b96c64b9cf940 Author: Emmanuel Raviart Date: Thu Aug 12 16:46:28 2004 +0000 Added sample X.509 certificates and keys. tests/data/ca1-la/certificate.pem | 26 ++++++++++++++++++++++++++ tests/data/ca1-la/jks.keystore | Bin 0 -> 1262 bytes tests/data/ca1-ssl/certificate.pem | 27 +++++++++++++++++++++++++++ tests/data/ca1-ssl/jks.keystore | Bin 0 -> 1301 bytes tests/data/ca2-la/certificate.pem | 26 ++++++++++++++++++++++++++ tests/data/ca2-la/jks.keystore | Bin 0 -> 1262 bytes tests/data/ca2-ssl/certificate.pem | 27 +++++++++++++++++++++++++++ tests/data/ca2-ssl/jks.keystore | Bin 0 -> 1301 bytes tests/data/ca3-la/certificate.pem | 26 ++++++++++++++++++++++++++ tests/data/ca3-la/jks.keystore | Bin 0 -> 1262 bytes tests/data/ca3-ssl/certificate.pem | 27 +++++++++++++++++++++++++++ tests/data/ca3-ssl/jks.keystore | Bin 0 -> 1301 bytes tests/data/ca4-la/certificate.pem | 26 ++++++++++++++++++++++++++ tests/data/ca4-la/jks.keystore | Bin 0 -> 1262 bytes tests/data/ca4-ssl/certificate.pem | 27 +++++++++++++++++++++++++++ tests/data/ca4-ssl/jks.keystore | Bin 0 -> 1301 bytes tests/data/idp1-la/certificate.pem | 25 +++++++++++++++++++++++++ tests/data/idp1-la/jks.keystore | Bin 0 -> 4803 bytes tests/data/idp1-la/private-key-raw.pem | 27 +++++++++++++++++++++++++++ tests/data/idp1-la/public-key.pem | 9 +++++++++ tests/data/idp1-ssl/all.p12 | Bin 0 -> 4398 bytes tests/data/idp1-ssl/certificate.pem | 26 ++++++++++++++++++++++++++ tests/data/idp1-ssl/jks.keystore | Bin 0 -> 4838 bytes tests/data/idp1-ssl/private-key-raw.pem | 27 +++++++++++++++++++++++++++ tests/data/idp2-la/certificate.pem | 25 +++++++++++++++++++++++++ tests/data/idp2-la/jks.keystore | Bin 0 -> 4803 bytes tests/data/idp2-la/private-key-raw.pem | 27 +++++++++++++++++++++++++++ tests/data/idp2-la/public-key.pem | 9 +++++++++ tests/data/idp2-ssl/all.p12 | Bin 0 -> 4398 bytes tests/data/idp2-ssl/certificate.pem | 26 ++++++++++++++++++++++++++ tests/data/idp2-ssl/jks.keystore | Bin 0 -> 4838 bytes tests/data/idp2-ssl/private-key-raw.pem | 27 +++++++++++++++++++++++++++ tests/data/idp3-la/certificate.pem | 25 +++++++++++++++++++++++++ tests/data/idp3-la/jks.keystore | Bin 0 -> 4804 bytes tests/data/idp3-la/private-key-raw.pem | 27 +++++++++++++++++++++++++++ tests/data/idp3-la/public-key.pem | 9 +++++++++ tests/data/idp3-ssl/all.p12 | Bin 0 -> 4398 bytes tests/data/idp3-ssl/certificate.pem | 26 ++++++++++++++++++++++++++ tests/data/idp3-ssl/jks.keystore | Bin 0 -> 4838 bytes tests/data/idp3-ssl/private-key-raw.pem | 27 +++++++++++++++++++++++++++ tests/data/idp4-la/certificate.pem | 25 +++++++++++++++++++++++++ tests/data/idp4-la/jks.keystore | Bin 0 -> 4805 bytes tests/data/idp4-la/private-key-raw.pem | 27 +++++++++++++++++++++++++++ tests/data/idp4-la/public-key.pem | 9 +++++++++ tests/data/idp4-ssl/all.p12 | Bin 0 -> 4398 bytes tests/data/idp4-ssl/certificate.pem | 26 ++++++++++++++++++++++++++ tests/data/idp4-ssl/jks.keystore | Bin 0 -> 4838 bytes tests/data/idp4-ssl/private-key-raw.pem | 27 +++++++++++++++++++++++++++ tests/data/lecp1-la/certificate.pem | 25 +++++++++++++++++++++++++ tests/data/lecp1-la/jks.keystore | Bin 0 -> 4804 bytes tests/data/lecp1-la/private-key-raw.pem | 27 +++++++++++++++++++++++++++ tests/data/lecp1-ssl/all.p12 | Bin 0 -> 4400 bytes tests/data/lecp1-ssl/certificate.pem | 26 ++++++++++++++++++++++++++ tests/data/lecp1-ssl/jks.keystore | Bin 0 -> 4840 bytes tests/data/lecp1-ssl/private-key-raw.pem | 27 +++++++++++++++++++++++++++ tests/data/lecp2-la/certificate.pem | 25 +++++++++++++++++++++++++ tests/data/lecp2-la/jks.keystore | Bin 0 -> 4806 bytes tests/data/lecp2-la/private-key-raw.pem | 27 +++++++++++++++++++++++++++ tests/data/lecp2-ssl/all.p12 | Bin 0 -> 4400 bytes tests/data/lecp2-ssl/certificate.pem | 26 ++++++++++++++++++++++++++ tests/data/lecp2-ssl/jks.keystore | Bin 0 -> 4841 bytes tests/data/lecp2-ssl/private-key-raw.pem | 27 +++++++++++++++++++++++++++ tests/data/lecp3-la/certificate.pem | 25 +++++++++++++++++++++++++ tests/data/lecp3-la/jks.keystore | Bin 0 -> 4805 bytes tests/data/lecp3-la/private-key-raw.pem | 27 +++++++++++++++++++++++++++ tests/data/lecp3-ssl/all.p12 | Bin 0 -> 4400 bytes tests/data/lecp3-ssl/certificate.pem | 26 ++++++++++++++++++++++++++ tests/data/lecp3-ssl/jks.keystore | Bin 0 -> 4839 bytes tests/data/lecp3-ssl/private-key-raw.pem | 27 +++++++++++++++++++++++++++ tests/data/lecp4-la/certificate.pem | 25 +++++++++++++++++++++++++ tests/data/lecp4-la/jks.keystore | Bin 0 -> 4806 bytes tests/data/lecp4-la/private-key-raw.pem | 27 +++++++++++++++++++++++++++ tests/data/lecp4-ssl/all.p12 | Bin 0 -> 4400 bytes tests/data/lecp4-ssl/certificate.pem | 26 ++++++++++++++++++++++++++ tests/data/lecp4-ssl/jks.keystore | Bin 0 -> 4839 bytes tests/data/lecp4-ssl/private-key-raw.pem | 27 +++++++++++++++++++++++++++ tests/data/sp1-la/certificate.pem | 25 +++++++++++++++++++++++++ tests/data/sp1-la/jks.keystore | Bin 0 -> 4802 bytes tests/data/sp1-la/private-key-raw.pem | 27 +++++++++++++++++++++++++++ tests/data/sp1-la/public-key.pem | 9 +++++++++ tests/data/sp1-ssl/all.p12 | Bin 0 -> 4388 bytes tests/data/sp1-ssl/certificate.pem | 26 ++++++++++++++++++++++++++ tests/data/sp1-ssl/jks.keystore | Bin 0 -> 4836 bytes tests/data/sp1-ssl/private-key-raw.pem | 27 +++++++++++++++++++++++++++ tests/data/sp2-la/certificate.pem | 25 +++++++++++++++++++++++++ tests/data/sp2-la/jks.keystore | Bin 0 -> 4802 bytes tests/data/sp2-la/private-key-raw.pem | 27 +++++++++++++++++++++++++++ tests/data/sp2-la/public-key.pem | 9 +++++++++ tests/data/sp2-ssl/all.p12 | Bin 0 -> 4388 bytes tests/data/sp2-ssl/certificate.pem | 26 ++++++++++++++++++++++++++ tests/data/sp2-ssl/jks.keystore | Bin 0 -> 4835 bytes tests/data/sp2-ssl/private-key-raw.pem | 27 +++++++++++++++++++++++++++ tests/data/sp3-la/certificate.pem | 25 +++++++++++++++++++++++++ tests/data/sp3-la/jks.keystore | Bin 0 -> 4800 bytes tests/data/sp3-la/private-key-raw.pem | 27 +++++++++++++++++++++++++++ tests/data/sp3-la/public-key.pem | 9 +++++++++ tests/data/sp3-ssl/all.p12 | Bin 0 -> 4388 bytes tests/data/sp3-ssl/certificate.pem | 26 ++++++++++++++++++++++++++ tests/data/sp3-ssl/jks.keystore | Bin 0 -> 4839 bytes tests/data/sp3-ssl/private-key-raw.pem | 27 +++++++++++++++++++++++++++ tests/data/sp4-la/certificate.pem | 25 +++++++++++++++++++++++++ tests/data/sp4-la/jks.keystore | Bin 0 -> 4801 bytes tests/data/sp4-la/private-key-raw.pem | 27 +++++++++++++++++++++++++++ tests/data/sp4-la/public-key.pem | 9 +++++++++ tests/data/sp4-ssl/all.p12 | Bin 0 -> 4388 bytes tests/data/sp4-ssl/certificate.pem | 26 ++++++++++++++++++++++++++ tests/data/sp4-ssl/jks.keystore | Bin 0 -> 4836 bytes tests/data/sp4-ssl/private-key-raw.pem | 27 +++++++++++++++++++++++++++ tests/data/user1-la/all.p12 | Bin 0 -> 4255 bytes tests/data/user1-la/certificate.pem | 25 +++++++++++++++++++++++++ tests/data/user1-la/jks.keystore | Bin 0 -> 4806 bytes tests/data/user1-la/private-key-raw.pem | 27 +++++++++++++++++++++++++++ tests/data/user1-la/public-key.pem | 9 +++++++++ tests/data/user2-la/all.p12 | Bin 0 -> 4255 bytes tests/data/user2-la/certificate.pem | 25 +++++++++++++++++++++++++ tests/data/user2-la/jks.keystore | Bin 0 -> 4805 bytes tests/data/user2-la/private-key-raw.pem | 27 +++++++++++++++++++++++++++ tests/data/user2-la/public-key.pem | 9 +++++++++ tests/data/user3-la/all.p12 | Bin 0 -> 4255 bytes tests/data/user3-la/certificate.pem | 25 +++++++++++++++++++++++++ tests/data/user3-la/jks.keystore | Bin 0 -> 4806 bytes tests/data/user3-la/private-key-raw.pem | 27 +++++++++++++++++++++++++++ tests/data/user3-la/public-key.pem | 9 +++++++++ tests/data/user4-la/all.p12 | Bin 0 -> 4255 bytes tests/data/user4-la/certificate.pem | 25 +++++++++++++++++++++++++ tests/data/user4-la/jks.keystore | Bin 0 -> 4806 bytes tests/data/user4-la/private-key-raw.pem | 27 +++++++++++++++++++++++++++ tests/data/user4-la/public-key.pem | 9 +++++++++ 128 files changed, 1788 insertions(+) commit ff5c85ffd39ff0b618fddeaf5bc865bbc4f940fb Author: Frederic Peters Date: Thu Aug 12 16:09:41 2004 +0000 worth a table of contents docs/lasso-book/writing-a-c-sp.txt | 2 ++ 1 file changed, 2 insertions(+) commit f82f883008bf770a56f94f2d19ab7ce2998a5392 Author: Christophe Nowicki Date: Thu Aug 12 16:09:32 2004 +0000 remove all debug messages. php/environs/lasso_federation.c | 2 +- php/environs/lasso_identity.c | 9 +++----- php/environs/lasso_login.c | 14 ++++++------- php/environs/lasso_profile.c | 44 ++++++++++----------------------------- php/environs/lasso_server.c | 10 ++++----- php/lasso.c | 6 +++--- php/xml/lasso_lib_authn_request.c | 36 +++++++------------------------- 7 files changed, 36 insertions(+), 85 deletions(-) commit 043c47a5b2e3b17f5fbebaea27172f8a877a7870 Author: Frederic Peters Date: Thu Aug 12 15:54:42 2004 +0000 workaround xmlsec bug docs/lasso-book/writing-a-c-sp.txt | 50 ++++++++++++++++++++++++++++++++------ 1 file changed, 42 insertions(+), 8 deletions(-) commit 8a1358964fcf83d02922be4deb620442e35b3374 Author: Frederic Peters Date: Thu Aug 12 15:00:50 2004 +0000 links to API; at best. docs/lasso-book/writing-a-c-sp.txt | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) commit c5910b70ecfc1a9e3d7fb55f36a21c2636badc65 Author: Frederic Peters Date: Thu Aug 12 14:39:08 2004 +0000 shuffling notes docs/lasso-book/writing-a-c-sp.txt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) commit 695adfa349519f04eb673c05bd1ca2d4edfb6488 Author: Frederic Peters Date: Thu Aug 12 14:37:25 2004 +0000 new section on compilation/linkage; new section on return code checking; fixes to the code samples. docs/lasso-book/writing-a-c-sp.txt | 95 ++++++++++++++++++++++++++++++++------ 1 file changed, 80 insertions(+), 15 deletions(-) commit 6b7e13d372e910679de5d061fa8da4b3a44f92ef Author: Christophe Nowicki Date: Thu Aug 12 12:04:56 2004 +0000 fix bool value in lasso_lib_authn_request_set_forceauthn php/xml/lasso_lib_authn_request.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit f617fa6014f32864ebb5308f2815e292c676050c Author: Christophe Nowicki Date: Thu Aug 12 10:40:37 2004 +0000 fixed wrong args num for lasso_login_init_authn_request php/environs/lasso_login.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 010ce911f65ab544efa12be332c371a80c28af17 Author: Emmanuel Raviart Date: Thu Aug 12 09:37:52 2004 +0000 Added .cvsignore to lassobook. docs/lasso-book/.cvsignore | 2 ++ 1 file changed, 2 insertions(+) commit 9a3ac1bedf0738db0aac5f8b9d9cd06e4464cdf3 Author: Valery Febvre Date: Thu Aug 12 00:00:18 2004 +0000 Added tests for errors reporting and to avoid some malicious segfaults lasso/Attic/protocols/provider.c | 31 ++++++++++++++---------- lasso/id-ff/server.c | 52 ++++++++++++++++++++++++++-------------- 2 files changed, 53 insertions(+), 30 deletions(-) commit 52731a4e5a73cce6318bf56e0f4da78cd150754d Author: Emmanuel Raviart Date: Wed Aug 11 23:14:20 2004 +0000 Corrected comment. python/tests/LibertyEnabledProxy.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 2c3b5a50c5c1e6d84ccc74eb55b355af13fd8aa8 Author: Emmanuel Raviart Date: Wed Aug 11 23:02:55 2004 +0000 Create a new test Proxy server (a server between a SP and an IDP, which acts as an IDP for the SP and as a SP for the IDP): login works. python/tests/IdentityProvider.py | 66 +++++++--------- python/tests/LibertyEnabledProxy.py | 49 ++++++++++++ python/tests/ServiceProvider.py | 113 ++++++++++++++------------- python/tests/abstractweb.py | 64 +++++++++++++-- python/tests/http.py | 25 ++++-- python/tests/liberty.py | 7 ++ python/tests/libertysimulator.py | 7 ++ python/tests/login_tests.py | 19 +++++ python/tests/sample-idp.py | 4 + python/tests/sample-lep.py | 152 ++++++++++++++++++++++++++++++++++++ python/tests/sample-sp-lep.py | 147 ++++++++++++++++++++++++++++++++++ python/tests/web.py | 23 +++--- python/tests/websimulator.py | 47 +++++------ 13 files changed, 586 insertions(+), 137 deletions(-) commit 02677987a48a67d99f5aacd915119a658dacd42a Author: Valery Febvre Date: Wed Aug 11 21:55:16 2004 +0000 Fixed a bug in lasso_provider_get_providerID lasso/Attic/protocols/provider.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) commit 42dc0f499eb3a2fdc6305b6666664d9b3e96116d Author: Valery Febvre Date: Wed Aug 11 21:29:53 2004 +0000 Replaced lasso_str_hash by lasso_sha1 docs/reference/lasso-sections.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit c3f4c1cf2937599a7fdae61822c2a81acc94f9c2 Author: Valery Febvre Date: Wed Aug 11 21:26:37 2004 +0000 Removed Base64 encoding of result in lasso_build_unique_id() funct lasso/xml/tools.c | 26 ++++++++++++++++++++------ lasso/xml/tools.h | 3 --- 2 files changed, 20 insertions(+), 9 deletions(-) commit 084171b7d19609910d7852f256a013f5217096af Author: Valery Febvre Date: Wed Aug 11 21:25:45 2004 +0000 Renamed 4 error codes and added one lasso/xml/errors.c | 9 +++++++-- lasso/xml/errors.h | 11 ++++++----- 2 files changed, 13 insertions(+), 7 deletions(-) commit 51c72072a89588b7273cfab3a1a926ce6784f1cc Author: Valery Febvre Date: Wed Aug 11 21:24:28 2004 +0000 Added param 'type' in set_debug_info() lasso/xml/debug.c | 11 ++++++----- lasso/xml/debug.h | 6 +++--- 2 files changed, 9 insertions(+), 8 deletions(-) commit df5394132c2f7809150925d0b13d0c753614a222 Author: Valery Febvre Date: Wed Aug 11 21:22:27 2004 +0000 Fixed GError* bugs lasso/Attic/protocols/artifact.c | 77 +++++++++++++++++++++++++++++++++++++ lasso/xml/ds_signature.c | 33 +++++++++++++++- lasso/xml/saml_assertion.c | 18 +++++++-- lasso/xml/samlp_request_abstract.c | 18 +++++++-- lasso/xml/samlp_response_abstract.c | 18 +++++++-- 5 files changed, 150 insertions(+), 14 deletions(-) commit ffd275e6c674bba9feccc7fae1eb6762db504789 Author: Valery Febvre Date: Wed Aug 11 21:21:10 2004 +0000 Added tests for errors reporting and to avoid some malicious segfaults lasso/id-ff/login.c | 91 ++++++++++++++++++++++++++++++++--------------------- 1 file changed, 55 insertions(+), 36 deletions(-) commit 67c25ac0a4b804247fd9001fc083a3816032bde3 Author: Valery Febvre Date: Wed Aug 11 21:18:46 2004 +0000 Fixed a bug with metadata ProviderID attribute is "providerID" instead of "ProviderID" Removed param 'err' in lasso_provider_get_providerID lasso/Attic/protocols/provider.c | 95 +++++++++++++++++++++++----------------- lasso/Attic/protocols/provider.h | 3 +- 2 files changed, 57 insertions(+), 41 deletions(-) commit f223b6a9b2d9705b538e8ae2c9cd1cb90b8dc134 Author: Valery Febvre Date: Wed Aug 11 21:16:29 2004 +0000 Added a param 'err' in 2 methods of LassoServer class: lasso_server_get_provider, lasso_server_get_provider_ref for errors reporting lasso/id-ff/federation_termination.c | 4 +- lasso/id-ff/lecp.c | 7 ++- lasso/id-ff/logout.c | 15 ++++--- lasso/id-ff/name_identifier_mapping.c | 8 +++- lasso/id-ff/register_name_identifier.c | 8 +++- lasso/id-ff/server.c | 78 ++++++++++++++++++++++++---------- lasso/id-ff/server.h | 10 +++-- 7 files changed, 90 insertions(+), 40 deletions(-) commit e356eaec446a6af0713d5db6352c1df5482d3d52 Author: Valery Febvre Date: Wed Aug 11 21:14:45 2004 +0000 Changed return type for 5 methods in LassoNode: lasso_node_dump, lasso_node_export, lasso_node_export_to_base64, lasso_node_export_to_query, lasso_node_export_to_soap lasso/Attic/protocols/authn_request.c | 11 +- lasso/Attic/protocols/authn_request_envelope.h | 4 +- lasso/Attic/protocols/authn_response.c | 2 +- lasso/Attic/protocols/authn_response.h | 12 +- lasso/Attic/protocols/authn_response_envelope.h | 6 +- lasso/Attic/protocols/federation.c | 4 +- lasso/Attic/protocols/federation.h | 4 +- .../federation_termination_notification.c | 6 +- .../federation_termination_notification.h | 2 +- .../protocols/name_identifier_mapping_request.c | 4 +- .../protocols/name_identifier_mapping_request.h | 4 +- .../protocols/name_identifier_mapping_response.c | 10 +- .../protocols/name_identifier_mapping_response.h | 15 +- lasso/Attic/protocols/request.c | 4 +- lasso/Attic/protocols/response.c | 6 +- lasso/Attic/protocols/response.h | 2 +- lasso/id-ff/identity.c | 2 +- lasso/id-ff/session.c | 2 +- lasso/xml/xml.c | 209 ++++++++++++++++----- lasso/xml/xml.h | 98 +++++----- 20 files changed, 262 insertions(+), 145 deletions(-) commit dbbe0e32dc1eb43bcdf590389b94915c8af37839 Author: Frederic Peters Date: Wed Aug 11 16:20:09 2004 +0000 style docs/lasso-book/writing-a-c-sp.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 779faf8cb9460163524396dbf19853b2aaec7306 Author: Frederic Peters Date: Wed Aug 11 16:17:19 2004 +0000 more on database section docs/lasso-book/writing-a-c-sp.txt | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) commit 40600d542ca1db99b21b1015b6c4a3abbd03aed9 Author: Frederic Peters Date: Wed Aug 11 15:59:06 2004 +0000 style docs/lasso-book/writing-a-c-sp.txt | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) commit 45ba4c3852e8ac48f72af56588c1152896fbecc8 Author: Frederic Peters Date: Wed Aug 11 15:57:13 2004 +0000 section about database docs/lasso-book/writing-a-c-sp.txt | 47 ++++++++++++++++++++++++++++++++++---- 1 file changed, 42 insertions(+), 5 deletions(-) commit b33fc6a2abb87e4c49ee1840bea199cbe1aa4a8c Author: Emmanuel Raviart Date: Wed Aug 11 14:08:14 2004 +0000 Better handling and checking of Liberty-Enabled header. python/tests/IdentityProvider.py | 19 ++++++++++++------- python/tests/LibertyEnabledClientProxy.py | 6 ++++++ python/tests/Provider.py | 7 +++---- python/tests/ServiceProvider.py | 14 +++++++------- 4 files changed, 28 insertions(+), 18 deletions(-) commit 796c9425e493ae1e003d9d588d1194f9b945a4be Author: Frederic Peters Date: Wed Aug 11 10:56:23 2004 +0000 section about LassoServer docs/lasso-book/writing-a-c-sp.txt | 65 ++++++++++++++++++++++++++++++++------ 1 file changed, 56 insertions(+), 9 deletions(-) commit 1d1c6c0ef3f96a3069a70fbf869ca1d981663e62 Author: Emmanuel Raviart Date: Wed Aug 11 10:46:22 2004 +0000 Removed server public key in tests: it seems that it is no more used. python/tests/login_tests.py | 4 ++-- python/tests/sample-idp.py | 2 +- python/tests/sample-sp.py | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) commit b2a263b48544d235f3704599fed074b5b24f4e41 Author: Emmanuel Raviart Date: Wed Aug 11 10:12:14 2004 +0000 In Python simulator, redirect now accepts partial URLs. python/tests/websimulator.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) commit 80a5b0009a69fd1e4d0451278dbbc5808563dc42 Author: Emmanuel Raviart Date: Wed Aug 11 09:59:58 2004 +0000 In python/tests, there are now a sample IDP (sample-idp.py) and a sample SP (sample-sp.py). The two applications are real servers. python/tests/IdentityProvider.py | 11 +- python/tests/LibertyEnabledClientProxy.py | 9 +- python/tests/Provider.py | 10 +- python/tests/ServiceProvider.py | 80 ++++++-- python/tests/abstractweb.py | 22 ++- python/tests/http.py | 73 ++++++-- python/tests/liberty.py | 53 ++++++ python/tests/libertysimulator.py | 53 ++++++ python/tests/login_tests.py | 4 +- python/tests/sample-idp.py | 146 +++++++++++++++ python/tests/sample-sp.py | 147 +++++++++++++++ python/tests/submissions.py | 292 ++++++++++++++++++++++++++++++ python/tests/web.py | 98 +++++++++- python/tests/websimulator.py | 10 +- 14 files changed, 939 insertions(+), 69 deletions(-) commit 2d1f06f55b37d677f4c17e1fa1c60a0bf65778b3 Author: Frederic Peters Date: Tue Aug 10 23:14:12 2004 +0000 more code in the documentation docs/lasso-book/writing-a-c-sp.txt | 45 ++++++++++++++++++++++++++++---------- 1 file changed, 33 insertions(+), 12 deletions(-) commit 4e35517e050966edfbc0f22d6d107b15df24faae Author: Frederic Peters Date: Tue Aug 10 18:18:18 2004 +0000 fixed a few errors docs/lasso-book/writing-a-c-sp.txt | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) commit c51e88160f9a6dd71a5bd23a417d33325b29aea1 Author: Frederic Peters Date: Tue Aug 10 16:14:04 2004 +0000 warning about *not* taking care of memory management and error checking docs/lasso-book/writing-a-c-sp.txt | 4 ++++ 1 file changed, 4 insertions(+) commit 3dd3ea5397f5be3b61756bb3bf834b70640208b7 Author: Frederic Peters Date: Tue Aug 10 15:41:52 2004 +0000 fix docs/lasso-book/writing-a-c-sp.txt | 1 + 1 file changed, 1 insertion(+) commit 8523a598935bb91876b22bc2d8300e6658f24fc3 Author: Frederic Peters Date: Tue Aug 10 15:40:39 2004 +0000 documentation about writing a service provider in C docs/lasso-book/writing-a-c-sp.txt | 131 +++++++++++++++++++++++++++++++++++++ 1 file changed, 131 insertions(+) commit 8d1a83c51c62f15da3c7c63875d2750bf7d3d90e Author: Christophe Nowicki Date: Tue Aug 10 13:36:28 2004 +0000 Added new PHP Unit test for Lasso Login and Lasso Server. php/environs/lasso_login.c | 12 -------- php/environs/lasso_server.c | 8 ------ php/php_lasso.h | 2 +- php/tests/001.phpt | 3 -- php/tests/lasso_login.phpt | 26 +++++++++++++++++ php/tests/lasso_server.phpt | 68 +++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 95 insertions(+), 24 deletions(-) commit 6a8762bdfc395e44a69a354b9722e0edad9d6bed Author: Romain Chantereay Date: Tue Aug 10 13:26:17 2004 +0000 Corrected automake problems. java/Makefile.am | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit f58f17bd114e3a66839d2763691bef3afdcc8487 Author: Christophe Nowicki Date: Tue Aug 10 11:35:43 2004 +0000 add php unit test support. just run php -f php/run-tests.php php/run-tests.php.in | 695 ++++++++++++++++++++++++++++++++++++++++++++++++++ php/tests/001.phpt | 13 + php/tests/Makefile.am | 1 + 3 files changed, 709 insertions(+) commit 80336f5144fb0d1d941a5c419bc20c3e6cc8b059 Author: Christophe Nowicki Date: Tue Aug 10 11:34:51 2004 +0000 create php/run-tests.php and export PHP_PATH configure.ac | 2 ++ 1 file changed, 2 insertions(+) commit f311e9e0d634e5e0b11e0a353cdacb01682ec545 Author: Romain Chantereay Date: Tue Aug 10 11:31:13 2004 +0000 Create package directory if not exists. java/Makefile.am | 1 + 1 file changed, 1 insertion(+) commit 94033fe5d9fc9d63d08d2fa9d0b12867459caf95 Author: Romain Chantereay Date: Tue Aug 10 11:18:17 2004 +0000 - Added java binding swig generation. - Added Swig Interface file. - Added readme for java build dependencies - Removed old java/src directory (still present on the CVS and this is important). README.JAVA | 2 + configure.ac | 9 +- java/Makefile.am | 152 +- java/lasso-fragment.java | 21 + java/src/Makefile.am | 1 - java/src/c/.cvsignore | 2 - java/src/c/Makefile.am | 33 - java/src/c/com_entrouvert_lasso_Lasso.c | 48 - .../src/c/com_entrouvert_lasso_LassoAuthnRequest.c | 154 - .../c/com_entrouvert_lasso_LassoAuthnResponse.c | 94 - java/src/c/com_entrouvert_lasso_LassoIdentity.c | 61 - java/src/c/com_entrouvert_lasso_LassoLogin.c | 298 -- java/src/c/com_entrouvert_lasso_LassoLogout.c | 131 - java/src/c/com_entrouvert_lasso_LassoNode.c | 36 - java/src/c/com_entrouvert_lasso_LassoObject.c | 27 - java/src/c/com_entrouvert_lasso_LassoProfile.c | 245 -- java/src/c/com_entrouvert_lasso_LassoProvider.c | 66 - java/src/c/com_entrouvert_lasso_LassoRequest.c | 42 - java/src/c/com_entrouvert_lasso_LassoResponse.c | 36 - java/src/c/com_entrouvert_lasso_LassoServer.c | 113 - java/src/c/com_entrouvert_lasso_LassoSession.c | 79 - java/src/c/helper.c | 125 - java/src/c/helper.h | 83 - java/src/java/Makefile.am | 19 - java/src/java/com/entrouvert/lasso/Lasso.java | 95 - .../com/entrouvert/lasso/LassoAuthnRequest.java | 53 - .../com/entrouvert/lasso/LassoAuthnResponse.java | 43 - .../java/com/entrouvert/lasso/LassoIdentity.java | 44 - java/src/java/com/entrouvert/lasso/LassoLogin.java | 86 - .../src/java/com/entrouvert/lasso/LassoLogout.java | 51 - java/src/java/com/entrouvert/lasso/LassoNode.java | 34 - .../src/java/com/entrouvert/lasso/LassoObject.java | 33 - .../java/com/entrouvert/lasso/LassoProfile.java | 101 - .../java/com/entrouvert/lasso/LassoProvider.java | 43 - .../java/com/entrouvert/lasso/LassoRequest.java | 37 - .../java/com/entrouvert/lasso/LassoResponse.java | 36 - .../src/java/com/entrouvert/lasso/LassoServer.java | 70 - .../java/com/entrouvert/lasso/LassoSession.java | 46 - java/src/java/com/entrouvert/lasso/LassoTest.java | 40 - swig/Lasso.i | 3229 ++++++++++++++++++++ 40 files changed, 3348 insertions(+), 2570 deletions(-) commit c753e696c458cbb8e4e52d5413853fc0a72047c2 Author: Emmanuel Raviart Date: Tue Aug 10 09:37:37 2004 +0000 Improved Python unit tests. python/tests/IdentityProvider.py | 108 +++++++++++++++-------------- python/tests/Provider.py | 21 ++++++ python/tests/ServiceProvider.py | 30 ++++---- python/tests/abstractweb.py | 87 ++++++++++++++++++++++++ python/tests/http.py | 55 +++++++++------ python/tests/login_tests.py | 20 +++--- python/tests/web.py | 66 ++++++++++++++++++ python/tests/websimulator.py | 143 +++++++++++---------------------------- 8 files changed, 326 insertions(+), 204 deletions(-) commit 18352ddb396946ca7583f8a770cd59ecfca8abdb Author: Christophe Nowicki Date: Tue Aug 10 08:33:41 2004 +0000 Removed the param 'remote_providerID' of lasso_login_init_authn_request() method Added a param 'remote_providerID' in lasso_login_build_authn_request_msg() method Fix compilation warnings, avoid multiple definitions and REGISTER_STRING_CONSTANT php/environs/lasso_federation.c | 8 ++++---- php/environs/lasso_identity.c | 7 ++++--- php/environs/lasso_login.c | 26 ++++++++++++++------------ php/environs/lasso_profile.c | 9 +++++---- php/environs/lasso_server.c | 9 +++++---- php/environs/lasso_session.c | 9 +++++---- php/lasso.c | 15 ++++++++------- php/php_lasso.h | 7 +++++++ php/xml/lasso_lib_authn_request.c | 9 +++++---- 9 files changed, 57 insertions(+), 42 deletions(-) commit b06cb80fb55fd6976e086fdf8f290f6f539d0534 Author: Valery Febvre Date: Tue Aug 10 00:13:27 2004 +0000 Fixed a bug in lasso_login_process_authn_response_msg() method lasso/id-ff/login.c | 53 +++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 43 insertions(+), 10 deletions(-) commit 0c7afc17e6260ea52c6ebf19d06788e5ba8d9852 Author: Emmanuel Raviart Date: Mon Aug 9 18:05:18 2004 +0000 Renamed LEC to LECP. It is really a proxy. ...abledClient.py => LibertyEnabledClientProxy.py} | 6 ++---- python/tests/login_tests.py | 22 +++++++++++----------- 2 files changed, 13 insertions(+), 15 deletions(-) commit eb450efe8c113e44e002524428d5957d2bc58cf5 Author: Emmanuel Raviart Date: Mon Aug 9 18:00:27 2004 +0000 LECP now nearly works. Still a segmentation fault at the end, but Valos is aware of it. python/tests/LibertyEnabledClient.py | 22 ++++++++ python/tests/abstractweb.py | 13 ++--- python/tests/http.py | 100 ++++++++++++++++------------------- python/tests/login_tests.py | 16 ++++-- python/tests/websimulator.py | 6 ++- 5 files changed, 92 insertions(+), 65 deletions(-) commit e851b95362633806e5ec851ff04d458b732d3ccd Author: Valery Febvre Date: Mon Aug 9 17:08:16 2004 +0000 Fixed a BIG bug in lasso_node_add_child() method lasso/xml/xml.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) commit bab89ab572a7045ffe1fb1fa70027609bcec9369 Author: Valery Febvre Date: Mon Aug 9 16:36:08 2004 +0000 Fixed a bug in lasso_server_dump() lasso/id-ff/server.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) commit a0a74c1a170f5e8e2c02bd52e43abfe598433a96 Author: Emmanuel Raviart Date: Mon Aug 9 16:19:45 2004 +0000 Updated Python tests. Not finished but Valos want it to debug Lasso. python/tests/IdentityProvider.py | 143 ++++----- python/tests/LibertyEnabledClient.py | 21 +- python/tests/Provider.py | 10 +- python/tests/ServiceProvider.py | 139 ++++---- python/tests/abstractweb.py | 53 +++- python/tests/http.py | 600 ++++++++++++++++++++++------------- python/tests/login_tests.py | 104 +++--- python/tests/websimulator.py | 154 +++++---- 8 files changed, 709 insertions(+), 515 deletions(-) commit 710b77536cf42d6c43fddd45e0d717704520dfe6 Author: Emmanuel Raviart Date: Mon Aug 9 16:19:09 2004 +0000 Slightly corrected C test. tests/login_tests.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 8bf3a9d0761edf9fc1b796daf1ee03070bdd38ba Author: Frederic Peters Date: Mon Aug 9 16:08:29 2004 +0000 new lack of error checking test case; not even the developer fault this time; the program got bad data; lasso segfault. python/tests/errorchecking_tests.py | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) commit 52694f79f68d6d37794f61c05ec57562bea72bf9 Author: Valery Febvre Date: Mon Aug 9 16:06:07 2004 +0000 Small fix python/lasso.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 62a39dc3bf452df9334a7db397bebe56e8a49c63 Author: Valery Febvre Date: Mon Aug 9 15:48:18 2004 +0000 Fixed a bug in lasso_lecp_build_authn_request_msg() lasso/id-ff/lecp.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) commit d4d3338c02799b415e83622747237ce53737bd3d Author: Valery Febvre Date: Mon Aug 9 15:41:13 2004 +0000 Updated server python/environs/py_server.c | 4 ++-- python/lasso.py | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) commit 991293bb74d5d248ff853bf4ac43ef9a6933a2ce Author: Valery Febvre Date: Mon Aug 9 15:34:13 2004 +0000 Added XML export type in lasso_authn_request_envelope_new_from_export() lasso/Attic/protocols/authn_request_envelope.c | 3 +++ 1 file changed, 3 insertions(+) commit 769bcc8ff1d9744a1c6ba46f82f90bae2a1ec756 Author: Valery Febvre Date: Mon Aug 9 15:33:16 2004 +0000 Server objects can now be created without metadata lasso/id-ff/server.c | 48 +++++++++++++++++++++++++++--------------------- 1 file changed, 27 insertions(+), 21 deletions(-) commit 486b4d97ab8154aad74133ab08e2c0842675fa06 Author: Valery Febvre Date: Mon Aug 9 15:07:03 2004 +0000 Corrected correction lasso/id-ff/lecp.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) commit bb6c3b4957353068dfcf5a9a8d22d2703591787e Author: Valery Febvre Date: Mon Aug 9 14:55:59 2004 +0000 Update python/lasso.py | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) commit b13decd314a04547ae1f1d8e0ab56ed767109cf4 Author: Valery Febvre Date: Mon Aug 9 14:45:39 2004 +0000 Removed Base64 encoding in lasso_lecp_build_authn_response_msg() Removed Base64 decoding in lasso_lecp_process_authn_request_envelope_msg() Removed the param 'remote_providerID' of lasso_lecp_init_authn_request() Added a param 'remote_providerID' in lasso_lecp_build_authn_request_msg() Added 3 params in lasso_lecp_build_authn_response_envelope_msg() They are necessary to build the Assertion, to process the federation and possibly to set the Status. lasso/id-ff/lecp.c | 32 ++++++++++++++++++++++---------- lasso/id-ff/lecp.h | 13 ++++++++----- python/environs/py_lecp.c | 41 ++++++++++++++++++++++++----------------- 3 files changed, 54 insertions(+), 32 deletions(-) commit 7c34b0d38b3948cfb7b0c0c9ac26853e33820263 Author: Valery Febvre Date: Mon Aug 9 14:31:32 2004 +0000 Removed the param 'remote_providerID' of lasso_login_init_authn_request() method Added a param 'remote_providerID' in lasso_login_build_authn_request_msg() method lasso/id-ff/login.c | 15 ++++++++------- lasso/id-ff/login.h | 6 +++--- python/environs/py_login.c | 20 ++++++++++---------- 3 files changed, 21 insertions(+), 20 deletions(-) commit 5a09c5ce9220635e44fcf603029c20464149ae20 Author: Valery Febvre Date: Mon Aug 9 12:57:49 2004 +0000 Added 3 missing #include lasso/lasso.h | 3 +++ 1 file changed, 3 insertions(+) commit 41188a45b671b51db5f30f5524b9463b5421a6e1 Author: Frederic Peters Date: Mon Aug 9 11:35:29 2004 +0000 the point is to fix lasso not to segfault; not to fix tests to make lasso happy. python/tests/errorchecking_tests.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit c3493ceff8d104042464dda61fcdf8886ee3f448 Author: Valery Febvre Date: Mon Aug 9 10:58:28 2004 +0000 'Class methods' Login.new() & Logout.new() should be used instead of Login() & Logout() constructors python/tests/errorchecking_tests.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit f8545308ffb31de6227b7cf10cf1a07dd0d21f22 Author: Valery Febvre Date: Mon Aug 9 10:53:47 2004 +0000 Added doc lasso/id-ff/login.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) commit 4287b6402301342e3033f2b49b90ddf219cd638b Author: Emmanuel Raviart Date: Mon Aug 9 05:35:34 2004 +0000 Updated Python unit tests infrastructure, so that it can be reused for independant simulation applications. python/tests/IdentityProvider.py | 108 ++++++++++++----------- python/tests/LibertyEnabledClient.py | 32 ++++--- python/tests/Provider.py | 9 +- python/tests/ServiceProvider.py | 116 +++++++++++++------------ python/tests/errorchecking_tests.py | 10 ++- python/tests/login_tests.py | 81 ++++++++++-------- python/tests/tests.py | 14 +-- python/tests/websimulator.py | 161 +++++++++++++---------------------- 8 files changed, 247 insertions(+), 284 deletions(-) commit 2fbb5e6dfb51f917a992a212572d6a2dbd91f6f0 Author: Emmanuel Raviart Date: Mon Aug 9 05:33:01 2004 +0000 Added module http. It is derived from Expression eponym module, but it is derived from abstractweb and it is designed to be a truly independant module. It still need a lot of work, but may be one day, Expression will use it. python/tests/http.py | 713 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 713 insertions(+) commit bb442c83fb59d26b8b33bac5cb1db2268cb4a3ca Author: Emmanuel Raviart Date: Mon Aug 9 05:29:26 2004 +0000 Added module abstractweb. It defines abstract classes for HTTP servers, etc, that are independant of the connection type: They must be overrided for HTTP(S) connection or simulated connections. python/tests/abstractweb.py | 156 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 156 insertions(+) commit 4c83d10009ef7402afc1d0e185ee6c8d8dc9f525 Author: Emmanuel Raviart Date: Mon Aug 9 05:26:26 2004 +0000 Added module assertions to Python Lasso simulator. This module defines global functions to use for unit tests (instead of methods self.fail...) or for other applications. python/tests/assertions.py | 126 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) commit 902b7f14b5f5ff75d4a4a2a83b2c003a574a5be2 Author: Emmanuel Raviart Date: Mon Aug 9 05:24:35 2004 +0000 Added module builtins to Python Lasso simulator. builtins will replace environs in Expression one day. python/tests/builtins.py | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) commit ff6b7d3de48a134cb2a7f06954b6567e490d4235 Author: Valery Febvre Date: Sun Aug 8 12:39:59 2004 +0000 Relpaced the lasso_str_hash() call by lasso_sha1() in the lasso_login_build_artifact_msg() method. Fixed bug #245 lasso/id-ff/login.c | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) commit 0c05cffc768492d17fe501441cda2e2437fb3f4f Author: Valery Febvre Date: Sun Aug 8 12:37:59 2004 +0000 In the dump of the identity object, rather than use the "Lasso" word in the name of nodes, the namespace of the root elment is now set to the Lasso namespace (without prefix). lasso/id-ff/identity.c | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) commit 25bc04c9b5be0d5c418d76d57e88ce99a02e7b9c Author: Valery Febvre Date: Sun Aug 8 12:37:21 2004 +0000 In the dump of the session object, rather than use the "Lasso" word in the name of nodes, the namespace of the root elment is now set to the Lasso namespace (without prefix). lasso/id-ff/session.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) commit fa6f8ec152ed2580175314ae452dd5aec5d21e5b Author: Valery Febvre Date: Sun Aug 8 12:34:10 2004 +0000 In the dump of the server object, rather than use the "Lasso" word in the name of nodes, the namespace of the root elment is now set to the Lasso namespace (without prefix). Relpaced the lasso_str_hash() call by lasso_sha1() in the lasso_server_get_providerID_from_hash() method. lasso/id-ff/server.c | 149 ++++++++++++++++++++++++++------------------------- lasso/id-ff/server.h | 4 +- 2 files changed, 78 insertions(+), 75 deletions(-) commit be08778a03fcbc717deec99e00cb93ba58150bd4 Author: Valery Febvre Date: Sun Aug 8 12:30:29 2004 +0000 Minor fixs lasso/Attic/protocols/artifact.c | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) commit a9eb36000125df06a24496c6320bcc2786f57ece Author: Valery Febvre Date: Sun Aug 8 12:26:43 2004 +0000 In the dump of the federation object, rather than use the "Lasso" word in the name of nodes, the namespace of the root elment is now set to the Lasso namespace (without prefix). lasso/Attic/protocols/federation.c | 1 + lasso/Attic/protocols/federation.h | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) commit 7b35cd2b1915c0d3a85e3481579c61dd251654e8 Author: Valery Febvre Date: Sun Aug 8 12:24:53 2004 +0000 In the dump of the provider object, rather than use the "Lasso" word in the name of nodes, the namespace of the root elment is now set to the Lasso namespace (without prefix). lasso/Attic/protocols/provider.c | 4 +++- lasso/Attic/protocols/provider.h | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) commit a6e72b709c2dbddf85338eee256c73f8b6677419 Author: Frederic Peters Date: Sun Aug 8 09:38:43 2004 +0000 missed new files liblasso0-dev.dirs | 2 ++ liblasso0-dev.files | 5 +++++ 2 files changed, 7 insertions(+) commit 97b1ee3edfa1699b3082855862f9c4ab4d288599 Author: Frederic Peters Date: Sun Aug 8 09:38:43 2004 +0000 missed new files debian/liblasso0-dev.dirs | 2 ++ debian/liblasso0-dev.files | 5 +++++ 2 files changed, 7 insertions(+) commit 2043c1962daafb9948f7c6599ae5d27b4776a57a Author: Frederic Peters Date: Sun Aug 8 09:37:59 2004 +0000 debian packaging: - correct sections - correct FSF address - renamed liblasso-dev to liblasso0-dev (and provides: liblasso-dev) - pointer to /usr/share/common-licenses/GPL changelog | 17 +++++++++++++++++ control | 9 ++++++--- copyright | 9 ++++++--- liblasso-dev.dirs | 2 -- liblasso-dev.files | 5 ----- rules | 2 +- 6 files changed, 30 insertions(+), 14 deletions(-) commit 1a49be49cf22871723c6ef3ab94e1d6e122c4d95 Author: Frederic Peters Date: Sun Aug 8 09:37:59 2004 +0000 debian packaging: - correct sections - correct FSF address - renamed liblasso-dev to liblasso0-dev (and provides: liblasso-dev) - pointer to /usr/share/common-licenses/GPL debian/changelog | 17 +++++++++++++++++ debian/control | 9 ++++++--- debian/copyright | 9 ++++++--- debian/liblasso-dev.dirs | 2 -- debian/liblasso-dev.files | 5 ----- debian/rules | 2 +- 6 files changed, 30 insertions(+), 14 deletions(-) commit 4d79bec7810738d32489467b1c1b7ff7ce38bedf Author: Frederic Peters Date: Sun Aug 8 08:57:43 2004 +0000 fixed FSF address README | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit b46a6f80382d309a4e0c4ebdca346c296b66a789 Author: Emmanuel Raviart Date: Sat Aug 7 20:42:02 2004 +0000 Added LECP support in Python simulator and unit tests. I think I have found several bugs in Lasso LECP implementation. My biggest problem is that I didn't find a way for IDP to set userAuthenticated, authenticationMethod, reauthenticateOnOrAfter to lecp before (or when) building response envelope with lecp.build_authn_response_envelope_msg(). Did I overlook something? python/tests/IdentityProvider.py | 125 ++++++++++++++++++--------- python/tests/LibertyEnabledClient.py | 107 +++++++++++++++++++++++ python/tests/Provider.py | 10 ++- python/tests/ServiceProvider.py | 160 ++++++++++++++++++++++++++--------- python/tests/login_tests.py | 83 +++++++++++------- python/tests/websimulator.py | 76 ++++++++++++++--- 6 files changed, 437 insertions(+), 124 deletions(-) commit 8d90adf21cc3023d92f8d264a510e9705c32ad81 Author: Valery Febvre Date: Sat Aug 7 19:33:29 2004 +0000 Added lasso_sha1() method (will replace lasso_str_hash) lasso/xml/tools.c | 12 +++++++++++- lasso/xml/tools.h | 2 ++ 2 files changed, 13 insertions(+), 1 deletion(-) commit 7b3ba37dac818030712754bb20a5674210c7cfb8 Author: Frederic Peters Date: Sat Aug 7 15:30:26 2004 +0000 new tests; lasso needs some error checking python/tests/errorchecking_tests.py | 49 +++++++++++++++++++++++++++++++++++++ python/tests/tests.py | 1 + 2 files changed, 50 insertions(+) commit f475a5388810dbdefabbdb301b085d8c82313866 Author: Emmanuel Raviart Date: Sat Aug 7 15:11:06 2004 +0000 Added attributes request, request_type, response, response_type to Lecp in Python binding. Close bug #247. python/environs/py_lecp.c | 13 +++++++++++-- python/lasso.py | 16 +++++++++++++++- 2 files changed, 26 insertions(+), 3 deletions(-) commit ff605a8ca2a1116eb2dbcc03bd01454f445c2f78 Author: Emmanuel Raviart Date: Fri Aug 6 21:38:01 2004 +0000 Added tests for forceAuthn. Light will still be green. python/tests/ServiceProvider.py | 7 ++++++- python/tests/login_tests.py | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) commit f71f68877fb706158493fba8c8102b8d03b51430 Author: Emmanuel Raviart Date: Fri Aug 6 20:48:24 2004 +0000 Added Python simulation for isPassive and corrected some simulation bugs. Added isPassive tests. python/tests/IdentityProvider.py | 59 ++++++++++++++++++++++++---------------- python/tests/ServiceProvider.py | 15 +++++++--- python/tests/login_tests.py | 36 ++++++++++++++++++++++-- python/tests/websimulator.py | 32 ++++++++++++++++++++-- 4 files changed, 109 insertions(+), 33 deletions(-) commit e1c8d45f13552ebfbbc33763a8fcca96078eab45 Author: Valery Febvre Date: Fri Aug 6 17:30:08 2004 +0000 Moved session & identity properties in private section lasso/id-ff/profile.h | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) commit ddbc8d7fd06705370a5862bfb65144136c512a9b Author: Valery Febvre Date: Fri Aug 6 17:13:06 2004 +0000 Removed debug messages lasso/Attic/protocols/artifact.c | 10 +++++----- lasso/id-ff/login.c | 1 - 2 files changed, 5 insertions(+), 6 deletions(-) commit 4883e41bc3c0f0caa4cfd4116e158d5339585bc1 Author: Valery Febvre Date: Fri Aug 6 16:48:10 2004 +0000 Removed an invalid SGML tag docs/reference/lasso.sgml | 1 - 1 file changed, 1 deletion(-) commit 17109f08b2a9adf968ccc9361f8e6a8db20ee363 Author: Valery Febvre Date: Fri Aug 6 16:46:48 2004 +0000 Update of the Lasso API Reference docs/reference/lasso-sections.txt | 372 ++++++++++++++++++++++++-------------- docs/reference/lasso.sgml | 33 ++-- docs/reference/lasso.types | 10 +- 3 files changed, 262 insertions(+), 153 deletions(-) commit bf8d4c3651a1f916446d1b1e338bcf392162b73b Author: Emmanuel Raviart Date: Fri Aug 6 16:43:27 2004 +0000 New Python tests. python/tests/login_tests.py | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) commit f437999e7767d548a8a9dda5d82754a1aac749b5 Author: Emmanuel Raviart Date: Fri Aug 6 16:07:39 2004 +0000 Added new Python test. It works, but see bug #245. python/tests/IdentityProvider.py | 46 ++++++++++++---------- python/tests/ServiceProvider.py | 23 ++++++----- python/tests/login_tests.py | 83 ++++++++++++++++++++++++---------------- python/tests/websimulator.py | 10 ++--- 4 files changed, 93 insertions(+), 69 deletions(-) commit f21f14ea6e277defe27dadc0731b605bd5c85caf Author: Emmanuel Raviart Date: Fri Aug 6 15:40:51 2004 +0000 Reversed error sign convention for Python binding. python/lasso.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 74c3cd2dc54c1e004a55de9961f9ebceab664011 Author: Valery Febvre Date: Fri Aug 6 15:38:56 2004 +0000 Added missing parameter description in 5 methods lasso/xml/xml.c | 5 +++++ 1 file changed, 5 insertions(+) commit bf88f2e9aa616c3f134485647aadac3eee95869a Author: Frederic Peters Date: Fri Aug 6 15:33:48 2004 +0000 summarized libtool version info comment configure.ac | 40 ++++++---------------------------------- 1 file changed, 6 insertions(+), 34 deletions(-) commit 4d8e17eadeb5714abd2690e7ac80629c61093fa2 Author: Emmanuel Raviart Date: Fri Aug 6 14:59:34 2004 +0000 Corrected a bug in test. python/tests/ServiceProvider.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 26e97834cb9d4b9c49ef0cce466ac269ff51358d Author: Christophe Nowicki Date: Fri Aug 6 14:51:28 2004 +0000 Fixed #244 : check for libexpat configure.ac | 8 ++++++++ 1 file changed, 8 insertions(+) commit a81f605c3b4010d1aed44b287504a037bf03db24 Author: Valery Febvre Date: Fri Aug 6 14:50:39 2004 +0000 Fixed a bug in lasso_login_must_authenticate() method lasso/id-ff/login.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit abd2b66ec8dabf1505b80f6dbd4fd8b023064334 Author: Emmanuel Raviart Date: Fri Aug 6 14:41:36 2004 +0000 Added a new test. If Nico & Valos are not quick enough, the light will be red. python/tests/login_tests.py | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) commit 3473ac144fc4b06c299e803bc7319e3f36b7eb7b Author: Emmanuel Raviart Date: Fri Aug 6 14:13:01 2004 +0000 Cleanly separated the new Python Lasso simulator from unit tests. python/tests/IdentityProvider.py | 182 ++++++++ python/tests/Provider.py | 35 ++ python/tests/ServiceProvider.py | 171 ++++++++ python/tests/login_tests.py | 891 +-------------------------------------- python/tests/websimulator.py | 243 +++++++++++ 5 files changed, 645 insertions(+), 877 deletions(-) commit 75149f3aa17317ae00c5be167ad8a9dccea90f1d Author: Christophe Nowicki Date: Fri Aug 6 14:12:58 2004 +0000 PHP_PREFIX in configure.ac. Add good LDFLAGS and LIBADD to php/Makefile.am Now php load the lasso extension : $ php -m | grep lasso lasso configure.ac | 1 + php/Makefile.am | 21 ++++++++++++--------- 2 files changed, 13 insertions(+), 9 deletions(-) commit aa92c6c1c206eb46dd3ae351d67e5c48e14a1641 Author: Christophe Nowicki Date: Fri Aug 6 13:50:12 2004 +0000 remove COMPILE_DL_LASSO ... now php can load lasso.so php/lasso.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) commit c46c65a6bfabba50e93c9a723b831f99b735c19d Author: Valery Febvre Date: Fri Aug 6 13:37:27 2004 +0000 Renamed all SAMLArt strings by SAMLart lasso/Attic/protocols/artifact.c | 6 +++--- lasso/id-ff/login.c | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) commit ed288aacd6bbb12c71b7c67b031ee0f9ed95849b Author: Romain Chantereay Date: Fri Aug 6 13:32:01 2004 +0000 Fixed reference docs make problems: - Docs did not compile invoking top level make when enabled in configure. - Docs did not compile in references directory with make all. - Docs used the old substitution variables. Makefile.am | 8 +++++++- configure.ac | 4 ++++ docs/reference/Makefile.am | 14 ++++---------- 3 files changed, 15 insertions(+), 11 deletions(-) commit b307a0014571a3a682c6f65c5a99dcaaaec57128 Author: Emmanuel Raviart Date: Fri Aug 6 12:29:43 2004 +0000 An early commit of the new Python test. It is not clean yet, but the light will be green again :-) python/tests/login_tests.py | 1420 +++++++++++++++++++++++++++---------------- 1 file changed, 902 insertions(+), 518 deletions(-) commit a6257aba0161e50d12e7d064d2036ef8bdf1eab1 Author: Emmanuel Raviart Date: Fri Aug 6 12:08:50 2004 +0000 Corrected error in Error. python/lasso.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit e1816841bddfa6eea8cdf64637f93738e16a5dbc Author: Romain Chantereay Date: Fri Aug 6 11:59:13 2004 +0000 Sorry. docs/lasso-book/Makefile.am | 3 +++ 1 file changed, 3 insertions(+) commit ea47ccfc8d18347e407dc0b08b4ec932f22cdfe2 Author: Romain Chantereay Date: Fri Aug 6 11:34:43 2004 +0000 Fixed some bad done cut/paste. configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 29cd7fba5104741bb32d1e5e6ca8eef46dc1c6a3 Author: Romain Chantereay Date: Fri Aug 6 11:33:53 2004 +0000 REmoved some useless tests. configure.ac | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) commit 0970a29b3ec9c65abb51d75a77e5fd0975a4b1e4 Author: Frederic Peters Date: Fri Aug 6 11:33:19 2004 +0000 string.h never used; no need to check it configure.ac | 1 - 1 file changed, 1 deletion(-) commit 9c47db72d6176215e171baaf687632482524567e Author: Frederic Peters Date: Fri Aug 6 11:32:14 2004 +0000 random long awaited fixes configure.ac | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) commit 4279100d824ed3b0123f8d5a228a46bd73adc4a2 Author: Romain Chantereay Date: Fri Aug 6 10:54:18 2004 +0000 Added lasso/environs/lecp.h inclusion. lasso/lasso.h | 1 + 1 file changed, 1 insertion(+) commit 35b1886eb5939e6161a916f8a86e4f1f8efd2dfd Author: Romain Chantereay Date: Fri Aug 6 10:44:35 2004 +0000 Added missing dist docs. configure.ac | 1 + docs/Makefile.am | 2 +- docs/reference/Makefile.am | 3 +++ 3 files changed, 5 insertions(+), 1 deletion(-) commit ca4d40238480116467c5d4388482b1cbb548ae4b Author: Christophe Nowicki Date: Fri Aug 6 09:34:44 2004 +0000 install module in `php-config --extension-dir` in state of /usr/lib php/Makefile.am | 3 +++ 1 file changed, 3 insertions(+) commit 11924e4cb7ae0b6c347d396e2275bd4056e53347 Author: Christophe Nowicki Date: Fri Aug 6 09:33:11 2004 +0000 add PHP_PREFIX configure.ac | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 5f95d955778ff60ca7eb89d75e8334d6f2e6f47f Author: Nicolas Clapies Date: Fri Aug 6 07:48:00 2004 +0000 update of code style lasso/id-ff/federation_termination.c | 2 +- lasso/id-ff/logout.c | 57 +++++++++++++++++++++++++++++------- 2 files changed, 47 insertions(+), 12 deletions(-) commit 9890e8a98122338981df72e92e82ed271f98bdb1 Author: Nicolas Clapies Date: Fri Aug 6 07:35:07 2004 +0000 updated code style lasso/id-ff/lecp.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) commit 451672047ae33ca53c79d40af31c16d6b4cd1970 Author: Nicolas Clapies Date: Fri Aug 6 07:31:59 2004 +0000 Renamed load_notification_msg to process_notification msg, renamed process_request to validate_request, added some goto for code error, little update of the code style, updated examples lasso/id-ff/federation_termination.c | 114 ++++++++++++++++++---------- lasso/id-ff/federation_termination.h | 24 +++--- python/environs/py_federation_termination.c | 18 ++--- python/environs/py_federation_termination.h | 4 +- python/examples/defederation.py | 16 ++-- python/lasso.py | 16 ++-- python/lassomod.c | 4 +- 7 files changed, 112 insertions(+), 84 deletions(-) commit f4bc1492cdd7aeb8c03b9677c704b311645051c7 Author: Romain Chantereay Date: Thu Aug 5 18:14:03 2004 +0000 - Big step toward unified output. - Enable for feature. - With for path to program (with-python, with-php-config). configure.ac | 203 +++++++++++++++++++++++++++-------------------------------- 1 file changed, 94 insertions(+), 109 deletions(-) commit 16d6e926ed02a43a74adb40b8672e165f7722627 Author: Valery Febvre Date: Thu Aug 5 16:14:42 2004 +0000 *** empty log message *** lasso/id-ff/login.c | 44 ++++++++++++++++++++++++++------------------ 1 file changed, 26 insertions(+), 18 deletions(-) commit e20c361830e3f39af5bee7e3cc3d0a2ccc365991 Author: Valery Febvre Date: Thu Aug 5 16:13:38 2004 +0000 lasso_profile_get_identity() & lasso_profile_get_session() return now NULL if the identity/session is empty. lasso_profile_is_identity_dirty() & lasso_profile_is_identity_dirty() return now FALSE if the identity/session is NULL. lasso/id-ff/profile.c | 43 +++++++++++++++++++++++++++++++++++++------ 1 file changed, 37 insertions(+), 6 deletions(-) commit 4bd67a7eb862df211d121ac4a634c0a98583a287 Author: Valery Febvre Date: Thu Aug 5 16:09:54 2004 +0000 lasso_server_get_providerID_from_hash() method takes now a hash base64 encoded as argument. lasso/id-ff/server.c | 15 +++++++++------ lasso/id-ff/server.h | 2 +- 2 files changed, 10 insertions(+), 7 deletions(-) commit 89dd9eb1b87cd0c757eaa54a3e646c5b34c25fee Author: Valery Febvre Date: Thu Aug 5 16:07:39 2004 +0000 Added automatic detection for the lasso HRef in lasso_node_get_child() lasso/xml/xml.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit 379df4cb7e9a458d168ed601c5f0b2d2787d577b Author: Nicolas Clapies Date: Thu Aug 5 16:05:38 2004 +0000 fix in lecp python/environs/py_lecp.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit e13598de344aa011bfb4537716b0dea6e0e6f566 Author: Valery Febvre Date: Thu Aug 5 15:56:30 2004 +0000 Replaced a lot of wrong issueInstance words by issueInstant Renamed 3 methods: lasso_saml_assertion_set_issueInstant(), lasso_samlp_request_abstract_set_issueInstant(), lasso_samlp_response_abstract_set_issueInstant() lasso/Attic/protocols/artifact.c | 17 ++++------ lasso/Attic/protocols/artifact.h | 38 ++++++++++----------- lasso/Attic/protocols/authn_request.c | 10 +++--- lasso/Attic/protocols/authn_response.c | 6 ++-- lasso/Attic/protocols/elements/assertion.c | 4 +-- .../federation_termination_notification.c | 8 ++--- lasso/Attic/protocols/logout_request.c | 8 ++--- lasso/Attic/protocols/logout_response.c | 8 ++--- .../protocols/name_identifier_mapping_request.c | 8 ++--- .../protocols/name_identifier_mapping_response.c | 8 ++--- .../protocols/register_name_identifier_request.c | 8 ++--- .../protocols/register_name_identifier_response.c | 8 ++--- lasso/Attic/protocols/request.c | 4 +-- lasso/Attic/protocols/response.c | 4 +-- lasso/xml/saml_assertion.c | 14 ++++---- lasso/xml/saml_assertion.h | 4 +-- lasso/xml/samlp_request_abstract.c | 8 ++--- lasso/xml/samlp_request_abstract.h | 34 +++++++++---------- lasso/xml/samlp_response_abstract.c | 8 ++--- lasso/xml/samlp_response_abstract.h | 39 +++++++++++----------- 20 files changed, 121 insertions(+), 125 deletions(-) commit 0e9d65ce4b1be716d161e6c2cb61a54a52cb8d04 Author: Romain Chantereay Date: Thu Aug 5 15:55:38 2004 +0000 Corrected error due to focus problem. configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit b8c5dc8364753fbe72c7fd725fd29ba34f74a60f Author: Romain Chantereay Date: Thu Aug 5 15:50:08 2004 +0000 PHP build by default configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit fc837435a657075769c4ecdafcf9a0ec06e5238b Author: Nicolas Clapies Date: Thu Aug 5 15:48:06 2004 +0000 *** empty log message *** python/environs/py_lecp.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) commit 8895c1da920efe28b9242f08bd62ef25963f3262 Author: Nicolas Clapies Date: Thu Aug 5 15:47:26 2004 +0000 fixed coding style lasso/id-ff/federation_termination.c | 32 ++++++------- lasso/id-ff/lecp.c | 26 +++++------ lasso/id-ff/logout.c | 82 +++++++++++++++++----------------- lasso/id-ff/register_name_identifier.c | 60 ++++++++++++------------- 4 files changed, 100 insertions(+), 100 deletions(-) commit 5315915ec79507e6b3ca3a3372ea0cf25faf57de Author: Romain Chantereay Date: Thu Aug 5 15:47:04 2004 +0000 Unified configuration report. configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 77c421a3c4b5562d9454106cce6c40feb0f0b1a6 Author: Romain Chantereay Date: Thu Aug 5 15:45:29 2004 +0000 pkg-config => $PKG_CONFIG configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 364d5ab3c9c7107c5df4c73a3eee4b0186d2fefa Author: Romain Chantereay Date: Thu Aug 5 15:35:53 2004 +0000 Fix #231 configure.ac | 2 -- 1 file changed, 2 deletions(-) commit 0d7e3772d0a2699889867cbbef90f1467ab9acb2 Author: Romain Chantereay Date: Thu Aug 5 15:32:47 2004 +0000 - Fix #234 lasso/Makefile.am | 1 + 1 file changed, 1 insertion(+) commit b12193e68f822203ac01ea81055aebfb45b82544 Author: Christophe Nowicki Date: Thu Aug 5 15:26:38 2004 +0000 automake/autoconf support for the php binding Makefile.am | 5 +++- configure.ac | 56 +++++++++++++++++++++++++++++++++++++-- php/Makefile.am | 29 ++++++++++++++++++++ php/environs/Makefile.am | 15 +++++++++++ php/environs/lasso_federation.c | 4 +-- php/environs/lasso_identity.c | 31 ++-------------------- php/environs/lasso_login.c | 4 +-- php/environs/lasso_profile.c | 4 +-- php/environs/lasso_server.c | 4 +-- php/environs/lasso_session.c | 4 +-- php/lasso.c | 3 +-- php/php_lasso.h | 1 - php/tests/Makefile.am | 0 php/xml/Makefile.am | 15 +++++++++++ php/xml/lasso_lib_authn_request.c | 4 +-- 15 files changed, 132 insertions(+), 47 deletions(-) commit 8ecc49afbd5a6d860d5de1b170ef8e81e6a58fea Author: Romain Chantereay Date: Thu Aug 5 15:24:33 2004 +0000 - Added explanations to libtool versionning system. - Added explanations in order to fix a "good" version number in order to produce a correct libtool version. - Fixed #229. - Fixed #202. configure.ac | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) commit b29c3b78c49577c287910dd00397dfbbfd2d2dd0 Author: Romain Chantereay Date: Thu Aug 5 15:12:06 2004 +0000 Remove command line PACKAGE definition (already done in lasso_config.h). lasso/Makefile.am | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 491d441e659853ca52c67730c2f7d8449cdd9fa6 Author: Romain Chantereay Date: Thu Aug 5 11:01:01 2004 +0000 Unified configure output. (#229) Corrected some errors with AM_CONDITIONAL bad placed calls. configure.ac | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) commit 9fe13851e59dd584617cf79822fe4ba2bcb058e3 Author: Romain Chantereay Date: Thu Aug 5 10:32:48 2004 +0000 Use of conditional subdirectories. This permit automake to automaticaly define a correct DIST_SUBDIRS. Makefile.am | 9 ++++++++- configure.ac | 19 ++++++++----------- 2 files changed, 16 insertions(+), 12 deletions(-) commit 33ebd74c07908e1365847fafd268c1e463e02a07 Author: Valery Febvre Date: Thu Aug 5 01:10:23 2004 +0000 lasso_identity_get_federation() & lasso_identity_add_federation() methods make now a copy of the federation object. lasso/id-ff/federation_termination.c | 4 ++- lasso/id-ff/identity.c | 25 ++++++++------ lasso/id-ff/login.c | 63 +++++++++++++++++++++++----------- lasso/id-ff/logout.c | 4 ++- lasso/id-ff/name_identifier_mapping.c | 4 ++- lasso/id-ff/register_name_identifier.c | 2 ++ 6 files changed, 68 insertions(+), 34 deletions(-) commit 12c0f0c478af25ba0c1c2655ef943f91504b29f8 Author: Valery Febvre Date: Thu Aug 5 00:15:21 2004 +0000 update HACKING | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 73ff9b07dd204c701b863ac5c61fc8b4ec865603 Author: Valery Febvre Date: Wed Aug 4 23:02:42 2004 +0000 Added a new argument 'err' in lasso_artifact_get_* methods for errors reporting. lasso/Attic/protocols/artifact.c | 75 ++++++++++++++++++++++++++++++++-------- lasso/Attic/protocols/artifact.h | 15 +++++--- 2 files changed, 70 insertions(+), 20 deletions(-) commit 0129cc8b60fcb371f878a5b35080f883d3115ce7 Author: Valery Febvre Date: Wed Aug 4 22:04:16 2004 +0000 update HACKING | 1 - 1 file changed, 1 deletion(-) commit 5f91d044d07e4e640ab3fe354b386c313707df65 Author: Valery Febvre Date: Wed Aug 4 22:03:10 2004 +0000 Initial commit tests/valgrind/nss.supp | 220 ++++++++++++++++++++++++++++++++++++++++++++ tests/valgrind/openssl.supp | 63 +++++++++++++ 2 files changed, 283 insertions(+) commit 9c5d74fc74b736b666d183c2c852de302244e402 Author: Valery Febvre Date: Wed Aug 4 22:00:12 2004 +0000 update HACKING | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 72075be34d1eb294524d214769d26906c10a5824 Author: Valery Febvre Date: Wed Aug 4 21:59:23 2004 +0000 update HACKING | 6 ++++++ 1 file changed, 6 insertions(+) commit 6483c9584b1bf5a468276250805bedc1ee1edd3d Author: Valery Febvre Date: Wed Aug 4 21:24:48 2004 +0000 update HACKING | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) commit 6f48cba5e81959bf43bf6a0d668f9bda1e4545b8 Author: Emmanuel Raviart Date: Wed Aug 4 19:55:17 2004 +0000 Python binding now raises exceptions instead of returning error codes. Close bug #237. python/lasso.py | 198 +++++++++++++++++++++++++++++++------------- python/tests/login_tests.py | 87 +++++++------------ 2 files changed, 170 insertions(+), 115 deletions(-) commit 3e411cc8ef1d2c6088df57ea6f5bd8f0f98f4c79 Author: Emmanuel Raviart Date: Wed Aug 4 19:06:12 2004 +0000 Slightly improved exception handling in Python. python/lasso.py | 259 +++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 200 insertions(+), 59 deletions(-) commit 57af54c9d8b2a056140e959b2c6ece4cfea9c601 Author: Valery Febvre Date: Wed Aug 4 16:58:33 2004 +0000 Renamed lasso_server_get_provider() into lasso_server_get_provider_ref() Added lasso_server_get_provider(), this method returns a provider copy. lasso/id-ff/federation_termination.c | 2 +- lasso/id-ff/lecp.c | 2 +- lasso/id-ff/login.c | 28 ++++++++++++++-------------- lasso/id-ff/logout.c | 4 ++-- lasso/id-ff/name_identifier_mapping.c | 4 ++-- lasso/id-ff/register_name_identifier.c | 4 ++-- lasso/id-ff/server.c | 24 ++++++++++++++++++++---- lasso/id-ff/server.h | 3 +++ 8 files changed, 45 insertions(+), 26 deletions(-) commit f3e2bfbb4f3243bc82caa57eb922ba414909ee37 Author: Christophe Nowicki Date: Wed Aug 4 16:12:49 2004 +0000 first php binding import php/Attic/examples/leak.php | 30 ++++ php/Attic/examples/login.php | 43 +++++ php/Attic/examples/test.php | 93 +++++++++++ php/environs/lasso_federation.c | 58 +++++++ php/environs/lasso_identity.c | 127 +++++++++++++++ php/environs/lasso_login.c | 209 ++++++++++++++++++++++++ php/environs/lasso_profile.c | 261 ++++++++++++++++++++++++++++++ php/environs/lasso_server.c | 187 +++++++++++++++++++++ php/environs/lasso_session.c | 33 ++++ php/lasso.c | 332 ++++++++++++++++++++++++++++++++++++++ php/lasso.h | 7 + php/php_lasso.h | 145 +++++++++++++++++ php/xml/lasso_lib_authn_request.c | 235 +++++++++++++++++++++++++++ 13 files changed, 1760 insertions(+) commit 59073ea1dde142312d2dec01e14f1607501e8cd9 Author: Romain Chantereay Date: Wed Aug 4 15:59:17 2004 +0000 Added one java automake. configure.ac | 1 + 1 file changed, 1 insertion(+) commit a165f97479d3727a123a31bb5eacf593e2887039 Author: Romain Chantereay Date: Wed Aug 4 15:56:34 2004 +0000 Me 1, Litlle memory stick Windows computer 0. First step toward a fully automaked java build. java now compile and build the DLL. java/Makefile.am | 25 +++++-------------------- java/src/Makefile.am | 2 +- java/src/c/Makefile.am | 5 ++--- java/src/java/Makefile.am | 19 +++++++++++++++++++ 4 files changed, 27 insertions(+), 24 deletions(-) commit e8d21d515c52c8e37afa264134c1e57dbfb9194a Author: Valery Febvre Date: Wed Aug 4 15:38:23 2004 +0000 Fixed a bug in lasso_artifact_new() and lasso_artifact_get_identityProviderSuccinctID() IdentityProviderSuccinctID data (ProviderID SHA1 hash) is now Base64 encoded. lasso/Attic/protocols/artifact.c | 40 ++++++++++++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 10 deletions(-) commit 97a564dfd29b702860af4b784afb09310e456aad Author: Emmanuel Raviart Date: Wed Aug 4 15:11:43 2004 +0000 Python test02 is now completely refactored. But bigger changes are on the way. python/tests/login_tests.py | 133 +++++++++++++++++++++++++++++++------------- 1 file changed, 94 insertions(+), 39 deletions(-) commit 4f32f67075f3e88edbb132a2efab81b5fbd32ffc Author: Nicolas Clapies Date: Wed Aug 4 15:05:11 2004 +0000 *** empty log message *** lasso/id-ff/session.c | 2 ++ 1 file changed, 2 insertions(+) commit 39823a5f49764426271d82b891f8fb0b31c45885 Author: Nicolas Clapies Date: Wed Aug 4 15:04:38 2004 +0000 update of lecp python binding lasso/id-ff/lecp.h | 2 + python/environs/py_lecp.c | 124 +++++++++++++++++++++++----------------------- python/environs/py_lecp.h | 16 ++---- python/lasso.py | 26 +++++----- python/lassomod.c | 6 +-- 5 files changed, 82 insertions(+), 92 deletions(-) commit db0c5292db260e04fed32d5cac2c84c4217dea48 Author: Nicolas Clapies Date: Wed Aug 4 14:36:29 2004 +0000 update of the LECP profile lasso/id-ff/lecp.c | 225 +++++++++++++++++++++++++++++++---------------------- lasso/id-ff/lecp.h | 41 ++++------ 2 files changed, 144 insertions(+), 122 deletions(-) commit 42342c45619de52226ce2c2860c91c93fe5aa720 Author: Valery Febvre Date: Wed Aug 4 14:22:26 2004 +0000 Moved '#include into lasso.c Added also in py_lasso.c lasso/lasso.c | 1 + lasso/lasso.h | 2 -- python/py_lasso.c | 2 ++ 3 files changed, 3 insertions(+), 2 deletions(-) commit 5390b82f32b28884eb411a57787dede171c53a73 Author: Valery Febvre Date: Wed Aug 4 14:02:52 2004 +0000 *** empty log message *** lasso/Attic/protocols/provider.c | 2 ++ 1 file changed, 2 insertions(+) commit 26b653ed84054c82745ed8ce6da195e7738adcff Author: Valery Febvre Date: Wed Aug 4 13:48:00 2004 +0000 Added the SOAP HTTP method in lasso_login_init_from_authn_request_msg() lasso/id-ff/login.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) commit 7659cf3f8d5e6b73089db3ab7e6cdda76868846a Author: Valery Febvre Date: Wed Aug 4 13:44:49 2004 +0000 Added the SOAP export type in lasso_authn_request_new_from_export() lasso/Attic/protocols/authn_request.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) commit b61789d2020cf9c40953acc35a85f4747f3e9954 Author: Emmanuel Raviart Date: Wed Aug 4 12:47:45 2004 +0000 The Python test refactoring continues and the light is still green. python/tests/login_tests.py | 146 +++++++++++++++++++++++++++++++------------- 1 file changed, 103 insertions(+), 43 deletions(-) commit eba16b056117e2b2f97f2e4b8cbc94dcc24fcd67 Author: Valery Febvre Date: Wed Aug 4 11:29:09 2004 +0000 Fixed 3 bugs in lasso_login_new_from_dump() lasso/id-ff/login.c | 48 ++++++++++++++++++++++++++---------------------- 1 file changed, 26 insertions(+), 22 deletions(-) commit 6f79bbd1077d984818ed8d4315480fbc3aefbdae Author: Frederic Peters Date: Wed Aug 4 11:07:33 2004 +0000 fixed typo; fix bug230 tests/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit d6ce9f401ee1414453d4c9e5cb4890b881b7862c Author: Emmanuel Raviart Date: Wed Aug 4 10:52:26 2004 +0000 The Python test reorganization continues. It detects a new login bug, so the light will be red again. python/tests/login_tests.py | 128 +++++++++++++++++++++++++++++--------------- 1 file changed, 85 insertions(+), 43 deletions(-) commit 9ccd7f00042f2a6b239a19d583585c2bcf004d2c Author: Nicolas Clapies Date: Wed Aug 4 10:51:19 2004 +0000 remove warning message before lasso_session_remove_assertion() lasso/id-ff/logout.c | 1 - 1 file changed, 1 deletion(-) commit 81ec2cfe2d376aa5063e578e8d46917f6814d381 Author: Frederic Peters Date: Wed Aug 4 10:47:11 2004 +0000 [angry comment removed] tests/tests.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 817e7ba10034dda4ea8a7bfb18ac0daec24f44d2 Author: Valery Febvre Date: Wed Aug 4 10:19:19 2004 +0000 *** empty log message *** python/environs/py_login.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 50912858927893bbd58bffd4513f0884424266c0 Author: Valery Febvre Date: Wed Aug 4 10:15:10 2004 +0000 Renamed enums (Bug #225): lassoMessageTypes,lassoHttpMethods,lassoRequestTypes into lassoMessageType,lassoHttpMethod,lassoRequestType lasso/id-ff/federation_termination.c | 2 +- lasso/id-ff/federation_termination.h | 2 +- lasso/id-ff/identity.c | 2 +- lasso/id-ff/logout.c | 12 ++++++------ lasso/id-ff/logout.h | 32 ++++++++++++++++---------------- lasso/id-ff/name_identifier_mapping.c | 4 ++-- lasso/id-ff/name_identifier_mapping.h | 4 ++-- lasso/id-ff/profile.c | 34 +++++++++++++++++----------------- lasso/id-ff/profile.h | 29 +++++++++++++++-------------- lasso/id-ff/register_name_identifier.c | 4 ++-- lasso/id-ff/register_name_identifier.h | 4 ++-- 11 files changed, 65 insertions(+), 64 deletions(-) commit 5b1577c4390001f2a926143efdc121fd95c0efc8 Author: Valery Febvre Date: Wed Aug 4 10:10:10 2004 +0000 Removed the 'identity' arg in lasso_login_new_from_dump() method lasso/id-ff/login.c | 28 +++++++++++++--------------- lasso/id-ff/login.h | 27 +++++++++++++-------------- lasso/id-ff/session.c | 2 +- python/environs/py_login.c | 16 ++++++---------- python/lasso.py | 4 ++-- 5 files changed, 35 insertions(+), 42 deletions(-) commit 7769487654652494fbbe06b9670845209a03b45a Author: Nicolas Clapies Date: Wed Aug 4 09:30:45 2004 +0000 add lasso_session_remove_assertion() in validate_request() and process_response_msg() lasso/id-ff/logout.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) commit 418216526cd9eec979c96e264516de9af0cad50e Author: Nicolas Clapies Date: Wed Aug 4 08:56:19 2004 +0000 set nameIdentifier attribute of the logout object (from LogoutRequest NameIdentifier value) after a call of init_request() method lasso/id-ff/logout.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit c5eb73df35c179a205e18f2635e81ba26ece16bb Author: Nicolas Clapies Date: Wed Aug 4 07:41:49 2004 +0000 move server param in new lasso/id-ff/lecp.c | 24 +++++++++++++++--------- lasso/id-ff/lecp.h | 4 +--- python/environs/py_lecp.c | 23 ++++++++++------------- 3 files changed, 26 insertions(+), 25 deletions(-) commit f46fda185194bd7877f10bea04898ae5b6159d5f Author: Nicolas Clapies Date: Wed Aug 4 07:40:42 2004 +0000 *** empty log message *** python/lasso.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) commit 882b5ec9715d4098b1af3944608fd5da30dbb277 Author: Emmanuel Raviart Date: Wed Aug 4 06:02:47 2004 +0000 In Python tests, renamed sp to spServer and idp to idpServer. python/tests/login_tests.py | 94 ++++++++++++++++++++++----------------------- 1 file changed, 47 insertions(+), 47 deletions(-) commit c2efacf298be865314282120002b1769c8752238 Author: Emmanuel Raviart Date: Wed Aug 4 05:49:35 2004 +0000 In Python, Server.add_provider now returns an error code instead of None. python/environs/py_server.c | 16 ++++++++-------- python/lasso.py | 4 ++-- 2 files changed, 10 insertions(+), 10 deletions(-) commit 1672a77f98986d3a793e51ba8b364c097182439e Author: Emmanuel Raviart Date: Wed Aug 4 05:48:28 2004 +0000 Begin to restructure Python tests. python/tests/login_tests.py | 120 ++++++++++++++++++++++++-------------------- 1 file changed, 66 insertions(+), 54 deletions(-) commit ef5c65cec8b621daab0b4c21301ea7c5b3992108 Author: Valery Febvre Date: Wed Aug 4 01:44:48 2004 +0000 Renamed enum lassoProviderTypes into lassoProviderType (Bug #225) lasso/Attic/protocols/provider.c | 74 +++++++++++++++++----------------- lasso/Attic/protocols/provider.h | 68 +++++++++++++++---------------- lasso/id-ff/federation_termination.c | 2 +- lasso/id-ff/logout.c | 4 +- lasso/id-ff/logout.h | 4 +- lasso/id-ff/name_identifier_mapping.c | 6 +-- lasso/id-ff/name_identifier_mapping.h | 8 ++-- lasso/id-ff/profile.h | 6 +-- lasso/id-ff/register_name_identifier.c | 4 +- lasso/id-ff/register_name_identifier.h | 28 ++++++------- 10 files changed, 102 insertions(+), 102 deletions(-) commit e3aa5c2b7d37346a61b4e7774e96cd9e82d5a846 Author: Valery Febvre Date: Wed Aug 4 01:19:35 2004 +0000 Renamed enum lassoNodeExportTypes into lassoNodeExportType (Bug #225) lasso/Attic/protocols/authn_request.c | 4 ++-- lasso/Attic/protocols/authn_request.h | 4 ++-- lasso/Attic/protocols/authn_request_envelope.c | 2 +- lasso/Attic/protocols/authn_request_envelope.h | 14 +++++++------- lasso/Attic/protocols/authn_response.c | 4 ++-- lasso/Attic/protocols/authn_response.h | 4 ++-- lasso/Attic/protocols/authn_response_envelope.c | 4 ++-- lasso/Attic/protocols/authn_response_envelope.h | 4 ++-- .../federation_termination_notification.c | 2 +- .../federation_termination_notification.h | 4 ++-- lasso/Attic/protocols/logout_request.c | 4 ++-- lasso/Attic/protocols/logout_request.h | 6 ++++-- lasso/Attic/protocols/logout_response.c | 12 ++++++------ lasso/Attic/protocols/logout_response.h | 12 ++++++------ .../protocols/register_name_identifier_request.c | 4 ++-- .../protocols/register_name_identifier_request.h | 22 +++++++++++----------- .../protocols/register_name_identifier_response.c | 4 ++-- .../protocols/register_name_identifier_response.h | 4 ++-- lasso/Attic/protocols/request.c | 4 ++-- lasso/Attic/protocols/request.h | 4 ++-- lasso/Attic/protocols/response.c | 4 ++-- lasso/Attic/protocols/response.h | 4 ++-- lasso/xml/xml.h | 2 +- 23 files changed, 67 insertions(+), 65 deletions(-) commit 8116061d6bd0c2825f7fe072a890151786f4fce1 Author: Valery Febvre Date: Wed Aug 4 00:45:32 2004 +0000 Changed all lasso_provider_get_* methods prototype It was added: a 'provider_type' argument to read in the appropriate Descriptor in metadata a 'err' argument for reporting errors lasso/Attic/protocols/provider.c | 315 +++++++++++++++++++++++++++------ lasso/Attic/protocols/provider.h | 68 ++++--- lasso/id-ff/federation_termination.c | 18 +- lasso/id-ff/lecp.c | 8 +- lasso/id-ff/login.c | 75 ++++---- lasso/id-ff/logout.c | 20 ++- lasso/id-ff/name_identifier_mapping.c | 12 +- lasso/id-ff/register_name_identifier.c | 18 +- 8 files changed, 401 insertions(+), 133 deletions(-) commit bad710b4e0aa661ab2d9a7d7aed95e5672221fee Author: Emmanuel Raviart Date: Tue Aug 3 22:41:32 2004 +0000 I thought I had discover one new bug in Lasso SP logout. I was wrong... I discovered one bug and a missing feature: - first the feature request: Lasso should set logout.nameIdentifier in logout.init_request, because there is no way to retrieve the current nameIdentifier from identity_dump or session_dump - and now the bug: After the IDP soapEndpoint returns a SOAP response, the SP process_response_msg doesn't remove the assertion from session (neither does it set session.is_dirty flag). See the new test05 for details. python/tests/login_tests.py | 354 ++++++++++++++++++++++++++------------------ 1 file changed, 214 insertions(+), 140 deletions(-) commit 5391fb4a096ffd526cd5b591e661ed032b2b7ad2 Author: Emmanuel Raviart Date: Tue Aug 3 20:33:41 2004 +0000 Python tests now work again, but please remove the Lasso-CRITICAL below. Generate identity and service provider context dumps ... ok Service provider initiated login ... ok Identity Provider single sign-on when identity and session already exist. ... (process:22065): Lasso-CRITICAL **: 03-08-2004 22:25:48 An assertion existed already for this providerID, it was replaced by the new one. ok Identity Provider logout. ... ok python/tests/login_tests.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 948528463fce1c79605f15e36ca9c4080fc839aa Author: Emmanuel Raviart Date: Tue Aug 3 20:18:07 2004 +0000 Install documentation is running after autoconf changes. INSTALL | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) commit 71ca62281ae017eba6b3afa77b07951c22a110de Author: Emmanuel Raviart Date: Tue Aug 3 20:04:23 2004 +0000 Lasso now requires automake 1.8 INSTALL | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 407e60c8d648ce6353551f2e7b16910c81e7da6d Author: Romain Chantereay Date: Tue Aug 3 17:49:12 2004 +0000 No more anoying warning. java/Makefile.am | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 12d4132e89409b8154b67c81933ac54f0f862e03 Author: Nicolas Clapies Date: Tue Aug 3 17:35:03 2004 +0000 *** empty log message *** python/environs/py_logout.c | 2 +- python/lassomod.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) commit 82ecd5525e3f07fe96054a80ae17a0e855142715 Author: Romain Chantereay Date: Tue Aug 3 17:18:03 2004 +0000 Bye bye AM_CONDITIONAL rests. (the if WITH_PYTHON are not accurate now). python/environs/Makefile.am | 2 -- python/protocols/Makefile.am | 2 -- python/protocols/elements/Makefile.am | 2 -- python/xml/Makefile.am | 2 -- 4 files changed, 8 deletions(-) commit 133ed75c682fb60fd7a33d3555f5b063bf7e46f1 Author: Nicolas Clapies Date: Tue Aug 3 17:13:33 2004 +0000 initial version python/xml/py_lib_authn_response.c | 69 ++++++++++++++++++++++++++++++++++++++ python/xml/py_lib_authn_response.h | 42 +++++++++++++++++++++++ 2 files changed, 111 insertions(+) commit 169f65d306c3b6726f000ec85d352cb411bddb01 Author: Romain Chantereay Date: Tue Aug 3 17:03:18 2004 +0000 - No more need of version.h. - Better libtool version computation. configure.ac | 3 ++- lasso/Makefile.am | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) commit 89681c3cb4be0d85c6599c43afef8f7d76e9d651 Author: Romain Chantereay Date: Tue Aug 3 16:47:07 2004 +0000 Update to automake 1.8. autogen.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit ae6a0cfee8bcafad79de0a9ec4451bb57ca41512 Author: Romain Chantereay Date: Tue Aug 3 16:39:40 2004 +0000 Revert. configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 2fc5a35500c243d1813c5941e2f9f3494537efcc Author: Romain Chantereay Date: Tue Aug 3 16:33:02 2004 +0000 Updated macro calls: from AM_CONFIG_HEADER to AC_CONFIG_HEADERS. configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 3a654bf8e99cfebd415ea03a065dcf87c315e1c2 Author: Romain Chantereay Date: Tue Aug 3 16:14:44 2004 +0000 Corrected SWIG warning. (deleted it.) autogen.sh | 5 ----- 1 file changed, 5 deletions(-) commit 632accef0cd2567a584d61a9ff766271d6a6440e Author: Romain Chantereay Date: Tue Aug 3 16:03:54 2004 +0000 - Added libtool auto versionning (or corrected). configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 348d8b450a2d0fa55f2ce36f1ad08cd9737fdf7c Author: Romain Chantereay Date: Tue Aug 3 15:56:18 2004 +0000 - Learn back to the previous Python detection. - Corrected invalid variable in automake java top dir Makefile. configure.ac | 35 +++++++++++++++++++++++++++++++---- java/Makefile.am | 2 -- 2 files changed, 31 insertions(+), 6 deletions(-) commit a8f5ab2f0d964dbc9fa963d7be659a3c40797768 Author: Romain Chantereay Date: Tue Aug 3 15:28:34 2004 +0000 Commented out coldfusion/Makefile generation. configure.ac | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) commit 638371bb157eb05144d050c3663d8e1af52c52f1 Author: Nicolas Clapies Date: Tue Aug 3 15:27:26 2004 +0000 replace load_request_msg() with process_request_msg(), process_request() with validate_request(), remove assertion of the authenticated principal in validate_request() lasso/id-ff/logout.c | 24 ++++++------------------ lasso/id-ff/logout.h | 4 ++-- python/environs/py_logout.c | 16 ++++++++-------- python/environs/py_logout.h | 4 ++-- python/lassomod.c | 13 +++++++++---- tests/login_tests.c | 6 +++--- 6 files changed, 30 insertions(+), 37 deletions(-) commit d5dc250c35425aa2c99a631b3f37d826ebf59deb Author: Romain Chantereay Date: Tue Aug 3 15:25:31 2004 +0000 SWIG is NOT required (yet ?) ! autogen.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 64cf35bed3b259a7b59c45a14beb777cf73f3808 Author: Nicolas Clapies Date: Tue Aug 3 15:23:24 2004 +0000 add request type test for Lecp lasso/id-ff/profile.c | 8 +++++--- lasso/id-ff/profile.h | 1 + python/lasso.py | 31 +++++++++++++++++++++++++------ 3 files changed, 31 insertions(+), 9 deletions(-) commit 12babeda63deaf8cd38a62bc2f3d3e3458b71d86 Author: Romain Chantereay Date: Tue Aug 3 15:12:45 2004 +0000 New Autotools infrastructure. Don't hesitate to report bug (if any). Main changes: - No more, or so few AM_CONDITIONAL. - Binding compilation use AC_SUBST top level Makefile SUBDIRS. - Change order of AM Macro. - Added Macro. - Fix Windows Compilation. - New way to handle version number. - Use of lasso_config.h - more ? I do not remember. Makefile.am | 2 +- autogen.sh | 239 ++++++++++++---- configure.ac | 524 ++++++++++++++++++++++------------ java/Makefile | 60 ---- java/Makefile.am | 79 ++++++ java/coldfusion/Makefile | 535 +++++++++++++++++++++++++++++++++-- java/src/Makefile.am | 1 + java/src/c/{Makefile => Makefile.am} | 19 +- java/tests/LoginTest.java | 3 +- lasso/Makefile.am | 22 +- lasso/export.h | 4 +- lasso/lasso.h | 6 +- python/Makefile.am | 2 - 13 files changed, 1162 insertions(+), 334 deletions(-) commit 03dbde1cf482803bf733e14bb8b7fc94d8342932 Author: Valery Febvre Date: Tue Aug 3 13:54:58 2004 +0000 Fixed a bug in lasso_session_new_from_dump() lasso/id-ff/session.c | 39 +++++++++++++++++++++++++-------------- 1 file changed, 25 insertions(+), 14 deletions(-) commit bbed9c0088c7526bbdc22dae77a261b31ff2e544 Author: Valery Febvre Date: Tue Aug 3 13:52:48 2004 +0000 Added some optimizations in lasso_identity_add_federation() lasso/id-ff/identity.c | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) commit e34f412d4781f9db24745b2490b2803f2b62ccb7 Author: Emmanuel Raviart Date: Tue Aug 3 12:59:18 2004 +0000 Bug correction in test04. python/tests/login_tests.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 62238e23961de67306c3f6938c2f18acd594557b Author: Emmanuel Raviart Date: Tue Aug 3 12:56:58 2004 +0000 Added forgotten Lasso call in test04. python/tests/login_tests.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 893202844205390f040cd9463f9365dca08f0591 Author: Emmanuel Raviart Date: Tue Aug 3 12:30:28 2004 +0000 Updated Python test04. Tell the poor win32 user that he can't test the software README.WIN32 | 10 ++++++++-- python/tests/login_tests.py | 12 +++++++----- 2 files changed, 15 insertions(+), 7 deletions(-) commit 221e206eec018d1b8ddb7966d663e8bac2985dd0 Author: Nicolas Clapies Date: Tue Aug 3 10:41:17 2004 +0000 replace G_LOG_LEVEL_ERROR with G_LOG_LEVEL_CRITICAL lasso/id-ff/federation_termination.c | 30 +++++++++++----------- lasso/id-ff/lecp.c | 20 +++++++-------- lasso/id-ff/logout.c | 46 +++++++++++++++++----------------- lasso/id-ff/register_name_identifier.c | 34 ++++++++++++------------- 4 files changed, 65 insertions(+), 65 deletions(-) commit 1a4dd11a04a3f029b8406f24e62b447ee816a84d Author: Emmanuel Raviart Date: Tue Aug 3 10:11:12 2004 +0000 Added a new Python regression test that shows that logout doesn't set session is_dirty flag. python/tests/login_tests.py | 116 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) commit d3556075e77a537aa7daa4e80ece702ccdd55068 Author: Emmanuel Raviart Date: Tue Aug 3 09:36:17 2004 +0000 Don't build win32 anymore. Makefile.am in win32 directory will disapear anyway. Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 8944a5f52d6d49ad646837e4595132500ddaccfe Author: Valery Febvre Date: Mon Aug 2 23:59:26 2004 +0000 - Replaced some charPtrConst_wrap() calls by charPtr_wrap() - Added GPtrArray_wrap() function to wrap GPtrArray into Python list. - Added session_getattr() function, we can get now providerIDs and is_dirty properties of Session objects. python/environs/py_identity.c | 2 +- python/environs/py_login.c | 2 +- python/environs/py_logout.c | 2 +- python/environs/py_session.c | 35 +++++++++++++++++++++++++++++++--- python/environs/py_session.h | 2 +- python/examples/login.py | 3 +++ python/lasso.py | 27 +++++++++++++++++++++++--- python/lassomod.c | 1 + python/protocols/py_authn_request.c | 4 ++-- python/wrap_objs.c | 38 +++++++++++++++++++++++++++++++------ python/wrap_objs.h | 8 +++++--- 11 files changed, 103 insertions(+), 21 deletions(-) commit 2586368612f993fdaee361cdbd4df889f29972f9 Author: Valery Febvre Date: Mon Aug 2 23:49:46 2004 +0000 Replaced two G_LOG_LEVEL_ERROR by G_LOG_LEVEL_CRITICAL lasso/id-ff/session.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 601e8b7c135c2f829863aa5412c73be8c8fc3818 Author: Valery Febvre Date: Mon Aug 2 23:46:32 2004 +0000 Fixed a bug in lasso_identity_new_from_dump() lasso/id-ff/identity.c | 81 ++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 59 insertions(+), 22 deletions(-) commit f964335e9b0116e0b0e810843d24b33bacbf8044 Author: Emmanuel Raviart Date: Mon Aug 2 19:01:57 2004 +0000 Added test03, which shows a bug in Lasso: When identity and session already exist (and must_authenticate() return False), the call to build_artifact_msg generates: (process:8083): GLib-GObject-WARNING **: invalid cast from LassoNode' to LassoSamlNameIdentifier' (process:8083): lasso-CRITICAL **: file authentication_statement.c: line 84 (lasso_authentication_statement_new): assertion LASSO_IS_SAML_NAME_IDENTIFIER(idp_identifier)' failed (process:8083): Lasso-CRITICAL **: 02-08-2004 20:33:59 Failed to build the AuthenticationStatement element of the Assertion. and then access to login.nameIdentifier fails. python/tests/login_tests.py | 70 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 69 insertions(+), 1 deletion(-) commit 44cf009c4826304b49774cdbfee85c1f8cb0036a Author: Frederic Peters Date: Mon Aug 2 18:23:54 2004 +0000 some files to be ignored in debian/ .cvsignore | 10 ++++++++++ 1 file changed, 10 insertions(+) commit 6a6076e30ae30184f0faae4cf5a119be272850c7 Author: Frederic Peters Date: Mon Aug 2 18:23:54 2004 +0000 some files to be ignored in debian/ debian/.cvsignore | 10 ++++++++++ 1 file changed, 10 insertions(+) commit 1a98ffef50ead38acc2eb78be1dda31a21a21191 Author: Emmanuel Raviart Date: Mon Aug 2 17:41:35 2004 +0000 Integrated README.WIN32 into Lasso book. Removed obsolete Python INSTALL file. INSTALL | 2 +- README.WIN32 | 5 +++++ docs/lasso-book/lasso-book.txt | 4 ++++ python/INSTALL | 17 ----------------- 4 files changed, 10 insertions(+), 18 deletions(-) commit efac509926916c022171cef2e04303e645127b0d Author: Emmanuel Raviart Date: Mon Aug 2 17:26:28 2004 +0000 Check that Lasso is inited and shotdown only once. Lasso Python modules now calls init() at first import (I need this behaviour, because I have several "import lasso" in Expression and I don't know which one will be called first and I don't want to do something like: import lasso if not lasso.inited: lasso.init() ). python/examples/defederation.py | 1 - python/examples/login.py | 2 -- python/examples/logout.py | 2 -- python/examples/mapping.py | 2 -- python/examples/registration.py | 2 -- python/examples/test.py | 2 -- python/examples/user.py | 2 -- python/lasso.py | 15 +++++++++++++++ python/tests/login_tests.py | 1 - 9 files changed, 15 insertions(+), 14 deletions(-) commit cc83fab4cff86d62e6ad0cb9661b0463b7e0464d Author: Romain Chantereay Date: Mon Aug 2 16:41:31 2004 +0000 Added some win32 specific explanations. README.WIN32 | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) commit 73b4d5ec2f3fb24150a40458c9a5dbbda4af0be1 Author: Romain Chantereay Date: Mon Aug 2 16:30:34 2004 +0000 New clean and beauty version of the windows resource file. use defined constant from lasso_config.h more to come. win32/lasso.rc | 103 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) commit 9dbeb76586dd7d8d0d17bfc0ec43210d99b291c9 Author: Romain Chantereay Date: Mon Aug 2 16:29:34 2004 +0000 Modified resource. () win32/Makefile.am | 4 +++ win32/lasso.rc | 102 ------------------------------------------------------ 2 files changed, 4 insertions(+), 102 deletions(-) commit b9db3340dd2bb3b36ccd199ff450dc0b53fcfc35 Author: Valery Febvre Date: Sun Aug 1 03:29:43 2004 +0000 Added a new argument 'err' (GError *) in 5 methods: lasso_ds_signature_sign, lasso_node_add_signature, lasso_node_verify_signature, lasso_saml_assertion_set_signature, lasso_samlp_request_abstract_set_signature, lasso_samlp_response_abstract_set_signature for reporting always more errors. lasso/id-ff/login.c | 113 ++++++++++++++++++++------------- lasso/id-ff/logout.c | 3 +- lasso/id-ff/register_name_identifier.c | 3 +- lasso/xml/ds_signature.c | 46 +++++++++----- lasso/xml/ds_signature.h | 7 +- lasso/xml/errors.c | 34 +++++++++- lasso/xml/errors.h | 18 ++++++ lasso/xml/saml_assertion.c | 25 ++++++-- lasso/xml/saml_assertion.h | 9 +-- lasso/xml/samlp_request_abstract.c | 27 ++++++-- lasso/xml/samlp_request_abstract.h | 9 +-- lasso/xml/samlp_response_abstract.c | 29 ++++++--- lasso/xml/samlp_response_abstract.h | 9 +-- lasso/xml/xml.c | 97 ++++++++++++++++++---------- lasso/xml/xml.h | 19 +++--- python/xml/py_saml_assertion.c | 10 ++- python/xml/py_xml.c | 3 +- 17 files changed, 320 insertions(+), 141 deletions(-) commit 0ecf1691ba1f1590b480ee53a6af0c0dbb66424a Author: Valery Febvre Date: Sat Jul 31 20:34:46 2004 +0000 Added a new argument 'err' in 4 methods of the LassoNode class: lasso_node_get_attr lasso_node_get_child lasso_node_get_child_content lasso_node_get_content for reporting errors. lasso/Attic/protocols/artifact.c | 11 ++- lasso/Attic/protocols/authn_request_envelope.c | 17 ++-- lasso/Attic/protocols/authn_response.c | 5 +- lasso/Attic/protocols/authn_response_envelope.c | 6 +- .../protocols/elements/authentication_statement.c | 4 +- lasso/Attic/protocols/federation.c | 8 +- .../federation_termination_notification.c | 2 +- lasso/Attic/protocols/logout_request.c | 5 +- lasso/Attic/protocols/logout_response.c | 33 +++---- .../protocols/name_identifier_mapping_request.c | 2 +- .../protocols/name_identifier_mapping_response.c | 17 ++-- lasso/Attic/protocols/provider.c | 28 +++--- .../protocols/register_name_identifier_request.c | 11 ++- .../protocols/register_name_identifier_response.c | 23 +++-- lasso/Attic/protocols/request.c | 3 +- lasso/Attic/protocols/response.c | 3 +- lasso/id-ff/federation_termination.c | 12 ++- lasso/id-ff/identity.c | 19 ++-- lasso/id-ff/lecp.c | 7 +- lasso/id-ff/login.c | 80 ++++++++------- lasso/id-ff/logout.c | 36 ++++--- lasso/id-ff/name_identifier_mapping.c | 31 +++--- lasso/id-ff/profile.c | 12 +-- lasso/id-ff/register_name_identifier.c | 24 ++--- lasso/id-ff/server.c | 6 +- lasso/id-ff/session.c | 5 +- lasso/xml/errors.c | 8 +- lasso/xml/errors.h | 5 +- lasso/xml/lib_scoping.c | 3 + lasso/xml/xml.c | 108 ++++++++++++++------- lasso/xml/xml.h | 46 +++++---- python/xml/py_xml.c | 6 +- 32 files changed, 346 insertions(+), 240 deletions(-) commit ed561ce190fb10c4dc35e8c23c39c7292f14e5bc Author: Emmanuel Raviart Date: Sat Jul 31 16:44:00 2004 +0000 Updated Java binding and unit test. .../src/c/com_entrouvert_lasso_LassoAuthnRequest.c | 2 +- .../c/com_entrouvert_lasso_LassoAuthnResponse.c | 2 +- java/src/c/com_entrouvert_lasso_LassoIdentity.c | 61 +++++++ java/src/c/com_entrouvert_lasso_LassoLogin.c | 57 +++---- java/src/c/com_entrouvert_lasso_LassoLogout.c | 15 +- java/src/c/com_entrouvert_lasso_LassoProfile.c | 190 +++++++++++++-------- java/src/c/com_entrouvert_lasso_LassoRequest.c | 2 +- java/src/c/com_entrouvert_lasso_LassoResponse.c | 2 +- java/src/c/com_entrouvert_lasso_LassoServer.c | 4 +- ...oUser.c => com_entrouvert_lasso_LassoSession.c} | 34 ++-- java/src/c/helper.c | 93 +++++----- java/src/c/helper.h | 46 ++--- .../java/com/entrouvert/lasso/LassoIdentity.java | 44 +++++ java/src/java/com/entrouvert/lasso/LassoLogin.java | 12 +- .../src/java/com/entrouvert/lasso/LassoLogout.java | 2 - .../java/com/entrouvert/lasso/LassoProfile.java | 54 ++++-- .../lasso/{LassoUser.java => LassoSession.java} | 8 +- java/tests/LoginTest.java | 54 +++--- python/tests/login_tests.py | 4 +- 19 files changed, 426 insertions(+), 260 deletions(-) commit 956bee8886799f8c4a90d3c4620a763d8448f911 Author: Valery Febvre Date: Sat Jul 31 13:45:01 2004 +0000 Removed access to attributes identity & session by __getattr__ python/environs/py_login.c | 6 +----- python/environs/py_logout.c | 12 ++++-------- python/lasso.py | 8 -------- 3 files changed, 5 insertions(+), 21 deletions(-) commit a0a5f744f88e6ad2c014c6e2e17c9b208589f25d Author: Valery Febvre Date: Sat Jul 31 13:05:35 2004 +0000 Added 2 tests in lasso_federation_copy() to avoid NULL pointer copy lasso/Attic/protocols/federation.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) commit d48eb0706db350e03aa9e67ab36a157faa611bb0 Author: Emmanuel Raviart Date: Sat Jul 31 08:02:48 2004 +0000 Python login_tests now works again, although there remains a lasso-CRITICAL caused by idpLoginContext.get_identity() (file login_tests.py, line 120): (process:5228): lasso-CRITICAL **: file xml.c: line 64 (lasso_node_copy): assertion LASSO_IS_NODE(node)' failed ERROR python/environs/py_logout.c | 22 ++++++++++++---------- python/environs/py_session.h | 4 ++-- python/lasso.py | 16 ++++++++++------ python/tests/login_tests.py | 6 ++++++ 4 files changed, 30 insertions(+), 18 deletions(-) commit 0b25994172d6bc574ea3da5a473ff2bba8a23d94 Author: Valery Febvre Date: Sat Jul 31 02:31:42 2004 +0000 *** empty log message *** python/lasso.py | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) commit b048319053dfa3dc4bc12f3a8c67b35f8bf9a391 Author: Valery Febvre Date: Fri Jul 30 21:56:58 2004 +0000 Fixed 2 errors in lasso_identity_copy() et lasso_session_copy() methods lasso/id-ff/identity.c | 2 +- lasso/id-ff/session.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit d4c4d75b0d61807700da7b0d8c9a9b8fd7979917 Author: Emmanuel Raviart Date: Fri Jul 30 21:11:17 2004 +0000 Some update to python login_tests. Some bugs remain. python/tests/login_tests.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) commit 201afd98e355dee1aece1ff8883d78c006d071ea Author: Emmanuel Raviart Date: Fri Jul 30 20:35:07 2004 +0000 Removed last profile_context or profileContext. java/src/c/com_entrouvert_lasso_Lasso.c | 2 +- ...ntext.c => com_entrouvert_lasso_LassoProfile.c} | 106 ++++++++++----------- java/src/java/com/entrouvert/lasso/LassoLogin.java | 2 +- .../src/java/com/entrouvert/lasso/LassoLogout.java | 2 +- ...{LassoProfileContext.java => LassoProfile.java} | 4 +- python/lasso.py | 4 +- python/tests/login_tests.py | 36 +++---- 7 files changed, 78 insertions(+), 78 deletions(-) commit 89a351e8b93bd426b13e5033a3b61ba22ea02729 Author: Emmanuel Raviart Date: Fri Jul 30 17:10:56 2004 +0000 Restructured INSTALL a little more. INSTALL | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) commit 7f902ab5cbb35a05953487c7100e893d288ffe0f Author: Emmanuel Raviart Date: Fri Jul 30 17:02:49 2004 +0000 Improved book. It also now includes HACKING. HACKING | 79 ++++++++++++++++++++++++------------------ INSTALL | 30 +++++++++++----- docs/lasso-book/lasso-book.txt | 41 +++++++++++++++------- 3 files changed, 95 insertions(+), 55 deletions(-) commit 386d690c3cc88977826ca2eb312532f5cb2eb44d Author: Valery Febvre Date: Fri Jul 30 16:04:18 2004 +0000 Initial commit HACKING | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) commit 514f62e39cf9b7ac6baf29fab2da8e8554d3952c Author: Valery Febvre Date: Fri Jul 30 16:00:47 2004 +0000 lasso_profile_get_identity() and lasso_profile_get_session() should return copies lasso/id-ff/profile.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 59c6cf97af8fd24d50d1bba610687d007ec19e3e Author: Nicolas Clapies Date: Fri Jul 30 15:36:55 2004 +0000 *** empty log message *** lasso/id-ff/lecp.h | 26 +++++++++--- python/environs/py_lecp.c | 101 +++++++++++++++++++++++++++++++++------------- python/environs/py_lecp.h | 4 ++ python/lasso.py | 29 ++++++++----- python/lassomod.c | 4 ++ 5 files changed, 121 insertions(+), 43 deletions(-) commit 8fd99730d003cf1eff4b686fe13498952213ecc5 Author: Valery Febvre Date: Fri Jul 30 15:34:29 2004 +0000 Update end python/environs/py_login.c | 2 + python/environs/py_login.h | 1 + python/environs/py_profile.c | 116 +++++++++++++++++++++++++++++++++++++++++++ python/environs/py_profile.h | 7 +++ python/lasso.py | 45 ++++++++++++++++- python/lassomod.c | 7 +++ 6 files changed, 177 insertions(+), 1 deletion(-) commit 78178c89fbdbe48f3d00ec9b82b457bbae84456f Author: Valery Febvre Date: Fri Jul 30 15:33:58 2004 +0000 Added a missing #include lasso/lasso.c | 1 + 1 file changed, 1 insertion(+) commit 78f53d7b806b81de6e176e5e321c51a131e44dc5 Author: Valery Febvre Date: Fri Jul 30 15:33:14 2004 +0000 Some G_LOG_LEVEL_ERROR -> G_LOG_LEVEL_CRITICAL lasso/xml/tools.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) commit 5b18b469d7a82a498d353bd44a4efe8e794e7e78 Author: Valery Febvre Date: Fri Jul 30 15:31:36 2004 +0000 Moved functions (alphabetical order) lasso/id-ff/profile.c | 44 ++++++++++++++++++++++---------------------- lasso/id-ff/profile.h | 16 ++++++++-------- 2 files changed, 30 insertions(+), 30 deletions(-) commit f613d14dd62167e787e5b4de497dd7d40fe512f6 Author: Valery Febvre Date: Fri Jul 30 15:31:03 2004 +0000 Moved a function (alphabetical order) lasso/id-ff/login.c | 146 ++++++++++++++++++++++++++-------------------------- 1 file changed, 73 insertions(+), 73 deletions(-) commit 699a7d92b556dfee9c5334c257ad67d8de1d93bc Author: Valery Febvre Date: Fri Jul 30 14:22:57 2004 +0000 Fixed a typing mistake all durty -> dirty lasso/id-ff/identity.c | 8 ++++---- lasso/id-ff/identity.h | 2 +- lasso/id-ff/profile.c | 16 ++++++++-------- lasso/id-ff/profile.h | 4 ++-- lasso/id-ff/session.c | 8 ++++---- lasso/id-ff/session.h | 2 +- 6 files changed, 20 insertions(+), 20 deletions(-) commit 1294a4602130f2c10a4d97aea7872a9b18dd5b7b Author: Frederic Peters Date: Fri Jul 30 14:21:54 2004 +0000 I also can describe non-existing features. INSTALL | 3 +++ 1 file changed, 3 insertions(+) commit 4d3ac460d1a1c934681d10adcd123fddf5d3f60c Author: Valery Febvre Date: Fri Jul 30 13:55:32 2004 +0000 Added methods: lasso_profile_get_identity() lasso_profile_get_session() lasso_profile_is_identity_durty() lasso_profile_is_session_durty() lasso/id-ff/identity.c | 2 +- lasso/id-ff/profile.c | 30 ++++++++++++++++++++++++++++++ lasso/id-ff/profile.h | 49 +++++++++++++++++++++++++++---------------------- lasso/id-ff/session.c | 2 +- 4 files changed, 59 insertions(+), 24 deletions(-) commit cd575163498678e2d9dcf8e56c5021a46200e41b Author: Emmanuel Raviart Date: Fri Jul 30 13:53:00 2004 +0000 Added some important configure options in INSTALL. INSTALL | 47 ++++++++++++++++++++++++++++++++--------------- 1 file changed, 32 insertions(+), 15 deletions(-) commit e4b04efa9cb9adf01464d28dbea28ef03d92d1c3 Author: Nicolas Clapies Date: Fri Jul 30 13:39:30 2004 +0000 lecp in environs is complete lasso/Attic/protocols/authn_request_envelope.c | 12 ++--- lasso/Attic/protocols/authn_request_envelope.h | 8 ++-- lasso/Attic/protocols/authn_response_envelope.c | 46 +++++++++++++++---- lasso/Attic/protocols/authn_response_envelope.h | 5 ++- lasso/id-ff/lecp.c | 59 ++++++++++++++++++------- lasso/id-ff/lecp.h | 1 + 6 files changed, 98 insertions(+), 33 deletions(-) commit 2f28f2508d942c9ee82c9afcdca43bbdc82d1e58 Author: Valery Febvre Date: Fri Jul 30 13:31:39 2004 +0000 Added new attribute is_durty in LassoIdentity & LassoSession classes lasso/id-ff/identity.c | 17 ++++++++++++----- lasso/id-ff/identity.h | 2 ++ lasso/id-ff/session.c | 15 ++++++++++----- lasso/id-ff/session.h | 2 ++ 4 files changed, 26 insertions(+), 10 deletions(-) commit 98803fde55a244f37b331b82ea480667f30ab0db Author: Emmanuel Raviart Date: Fri Jul 30 13:20:26 2004 +0000 Improved AUTHORS restructuration. AUTHORS | 50 ++++++++++++++++++++++++++++---------------------- 1 file changed, 28 insertions(+), 22 deletions(-) commit bd05928e3bfc497df1f2a21054755c4c652b507d Author: Emmanuel Raviart Date: Fri Jul 30 13:10:18 2004 +0000 Restructured AUTHORS & README and integrated them in Lasso Book. AUTHORS | 10 +++-- README | 96 ++++++++++++++++++++++-------------------- docs/lasso-book/lasso-book.txt | 14 +++--- 3 files changed, 63 insertions(+), 57 deletions(-) commit e6e62115ff9df708485cd47f486a9b362c9622a5 Author: Valery Febvre Date: Fri Jul 30 13:07:59 2004 +0000 *** empty log message *** python/environs/py_user.c | 181 ---------------------------------------------- python/environs/py_user.h | 50 ------------- 2 files changed, 231 deletions(-) commit 407ce45c3b8ff3cbaafe3551423d09759ea699a6 Author: Valery Febvre Date: Fri Jul 30 12:02:28 2004 +0000 Update python/environs/Makefile.am | 4 +- python/environs/py_identity.c | 105 --------------- python/environs/py_identity.h | 7 - python/environs/py_login.c | 6 +- python/environs/py_login.h | 2 +- python/environs/py_profile.c | 33 +++-- python/environs/py_profile.h | 2 +- python/environs/py_register_name_identifier.c | 25 ++-- python/environs/py_register_name_identifier.h | 4 +- python/environs/py_session.c | 181 ++++++++++++++++++++++++++ python/environs/py_session.h | 50 +++++++ python/lasso.py | 67 +++++----- python/lassomod.c | 52 ++++---- 13 files changed, 330 insertions(+), 208 deletions(-) commit 04c32c9de2acb7bc10303b071fdd064ea0a355be Author: Nicolas Clapies Date: Fri Jul 30 11:38:38 2004 +0000 update of examples to user identity and session objects lasso/id-ff/identity.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) commit 34938f2b40e7cdcaa5c512ed1bba1c68f656b30f Author: Valery Febvre Date: Fri Jul 30 11:34:40 2004 +0000 update tests/login_tests.c | 76 ++++++++++++++++++++++++++--------------------------- 1 file changed, 38 insertions(+), 38 deletions(-) commit 8a99bfc701b31ea685e771c58155318ed1c0e00b Author: Emmanuel Raviart Date: Fri Jul 30 10:37:06 2004 +0000 Improved? ReST section titles. INSTALL | 14 ++++- docs/lasso-book/lasso-book.txt | 115 +++++++++++------------------------------ 2 files changed, 42 insertions(+), 87 deletions(-) commit 09820bf13f42a89d716ba9c4e14fe6b9df51158e Author: Valery Febvre Date: Fri Jul 30 10:25:45 2004 +0000 Renamed ProfileContext into Profile .../{py_profile_context.c => py_profile.c} | 38 +++++++++++----------- .../{py_profile_context.h => py_profile.h} | 22 ++++++------- 2 files changed, 30 insertions(+), 30 deletions(-) commit 006e1abcabab74d767bedf735e2e846bf742fca7 Author: Valery Febvre Date: Fri Jul 30 10:16:41 2004 +0000 Initial commit python/environs/py_identity.c | 183 ++++++++++++++++++++++++++++++++++++++++++ python/environs/py_identity.h | 50 ++++++++++++ 2 files changed, 233 insertions(+) commit 6aa5b4bf928258e2e8bbe656a0c3826349358acb Author: Emmanuel Raviart Date: Fri Jul 30 10:02:09 2004 +0000 Added very preliminary work on Lasso Book. Modified INSTALL to be compatible with reStructured Text syntax. Is this solution an acceptable solution? INSTALL | 186 ++++++++++++++++++++--------------------- docs/lasso-book/lasso-book.txt | 182 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 275 insertions(+), 93 deletions(-) commit bf9b66488c42d8588c604ec1862fb147848b5c3f Author: Emmanuel Raviart Date: Fri Jul 30 08:02:08 2004 +0000 Added Lasso logo. logos/lasso-233x66.png | Bin 0 -> 12907 bytes 1 file changed, 0 insertions(+), 0 deletions(-) commit c3626a517bf7f6b7c0c49c62e686578b891606c3 Author: Valery Febvre Date: Fri Jul 30 00:07:56 2004 +0000 Update begining python/environs/Makefile.am | 4 +-- python/environs/py_federation_termination.c | 14 ++++----- python/environs/py_federation_termination.h | 2 +- python/environs/py_lecp.c | 6 ++-- python/environs/py_login.c | 48 ++++++++++++++--------------- python/environs/py_login.h | 2 +- python/environs/py_logout.c | 16 +++++----- python/environs/py_logout.h | 2 +- 8 files changed, 46 insertions(+), 48 deletions(-) commit 6b36c2b6d9ad12062a0ea98b16e41a68c86fc233 Author: Valery Febvre Date: Thu Jul 29 23:33:53 2004 +0000 LassoProfileContext class was renamed into LassoProfile lasso/id-ff/Makefile.am | 4 +- lasso/id-ff/federation_termination.c | 121 ++++++------ lasso/id-ff/federation_termination.h | 6 +- lasso/id-ff/login.c | 274 +++++++++++++-------------- lasso/id-ff/login.h | 6 +- lasso/id-ff/logout.c | 216 ++++++++++----------- lasso/id-ff/logout.h | 6 +- lasso/id-ff/name_identifier_mapping.c | 126 ++++++------ lasso/id-ff/name_identifier_mapping.h | 6 +- lasso/id-ff/{profile_context.c => profile.c} | 134 ++++++------- lasso/id-ff/profile.h | 144 ++++++++++++++ lasso/id-ff/profile_context.h | 144 -------------- lasso/id-ff/register_name_identifier.c | 168 ++++++++-------- lasso/id-ff/register_name_identifier.h | 6 +- 14 files changed, 688 insertions(+), 673 deletions(-) commit 1489d3cd39f5836038cddf73a7404e444068ce81 Author: Valery Febvre Date: Thu Jul 29 22:33:01 2004 +0000 LassoIdentity was renamed into LassoFederation lasso/Attic/protocols/identity.c | 280 --------------------------------------- lasso/Attic/protocols/identity.h | 101 -------------- 2 files changed, 381 deletions(-) commit 4ce56deb87b8fbc59b490f108a32bfd27d193029 Author: Valery Febvre Date: Thu Jul 29 22:31:29 2004 +0000 LassoUser class was splited into 2 new classes (LassoSession & LassoIdentity) lasso/id-ff/user.c | 651 ----------------------------------------------------- lasso/id-ff/user.h | 109 --------- 2 files changed, 760 deletions(-) commit 1017b754584f0081498c6a7cea2da49748248689 Author: Valery Febvre Date: Thu Jul 29 22:25:17 2004 +0000 Update LassoUser class was splited into 2 classes: LassoSession & LassoIdentity LassoIdentity was renamed into LassoFederation lasso/id-ff/federation_termination.c | 40 +++--- lasso/id-ff/federation_termination.h | 4 +- lasso/id-ff/login.c | 241 +++++++++++++++++---------------- lasso/id-ff/login.h | 11 +- lasso/id-ff/logout.c | 52 +++---- lasso/id-ff/name_identifier_mapping.c | 36 ++--- lasso/id-ff/name_identifier_mapping.h | 2 +- lasso/id-ff/profile_context.c | 94 ++++++++++--- lasso/id-ff/profile_context.h | 29 +++- lasso/id-ff/register_name_identifier.c | 54 ++++---- lasso/id-ff/session.c | 2 - 11 files changed, 321 insertions(+), 244 deletions(-) commit d774ddaccdb9b3148630981b98bbe697e90d3979 Author: Valery Febvre Date: Thu Jul 29 21:58:18 2004 +0000 Renamed LassoIdentity class into LassoFederation and LassoUser class into LassoIdentity lasso/protocols/federation.c replace lasso/protocols/identity.c lasso/environs/identity.c replace lasso/environs/user.c lasso/Attic/protocols/Makefile.am | 4 +- lasso/Attic/protocols/federation.c | 281 ++++++++++++++++++++++++ lasso/Attic/protocols/federation.h | 101 +++++++++ lasso/id-ff/Makefile.am | 8 +- lasso/id-ff/identity.c | 424 +++++++++++++++++++++++++++++++++++++ lasso/id-ff/identity.h | 90 ++++++++ 6 files changed, 902 insertions(+), 6 deletions(-) commit f4082214af8244800f9f64b029d0c03dc1d2ad39 Author: Frederic Peters Date: Thu Jul 29 21:35:26 2004 +0000 never thought about application developers; not a target ? added missing gobject-2.0 to list of requirements. (first to feel the pain of *using* lasso) [I wonder how it went on wednesday tutorial; didn't use autotools ?] lasso.pc.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit a17e9f917db83fb84806ed3f596089d08e3a9930 Author: Frederic Peters Date: Thu Jul 29 21:29:34 2004 +0000 lasso.pc don't set minimal version for other libraries lasso.pc.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit c35808796c7da999e5ab88ed0f56943b8338aa5a Author: Nicolas Clapies Date: Thu Jul 29 16:48:27 2004 +0000 update of registration example in C lasso/id-ff/register_name_identifier.c | 98 +++++++++++++++++++--------------- 1 file changed, 55 insertions(+), 43 deletions(-) commit d627cdfb76bac2ba9f349a0d4312342de104b4fa Author: Nicolas Clapies Date: Thu Jul 29 14:11:26 2004 +0000 *** empty log message *** lasso/Attic/protocols/logout_response.c | 4 ++-- python/protocols/py_logout_request.c | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) commit e8228dc6e7bf5b14b91c5de78934c9c601a9fc7a Author: Nicolas Clapies Date: Thu Jul 29 14:08:31 2004 +0000 update of register name identifier .../protocols/register_name_identifier_request.c | 30 ++- .../protocols/register_name_identifier_request.h | 28 +-- .../protocols/register_name_identifier_response.c | 215 +++++++++++---------- .../protocols/register_name_identifier_response.h | 23 +-- lasso/id-ff/register_name_identifier.c | 162 +++++----------- lasso/id-ff/register_name_identifier.h | 31 +-- python/environs/py_register_name_identifier.c | 9 +- python/lasso.py | 82 ++------ python/lassomod.c | 19 +- .../py_register_name_identifier_request.c | 37 ++-- .../py_register_name_identifier_request.h | 6 +- .../py_register_name_identifier_response.c | 91 ++------- .../py_register_name_identifier_response.h | 8 +- 13 files changed, 287 insertions(+), 454 deletions(-) commit 9c435c70966cecdfdee1f7d45c13696c9698486b Author: Valery Febvre Date: Thu Jul 29 13:55:52 2004 +0000 Added session class lasso/id-ff/Makefile.am | 2 + lasso/id-ff/session.c | 433 ++++++++++++++++++++++++++++++++++++++++++++++++ lasso/id-ff/session.h | 93 +++++++++++ 3 files changed, 528 insertions(+) commit 8db0c98e16df9877838ee43332cb2e270c278db2 Author: Frederic Peters Date: Thu Jul 29 09:14:37 2004 +0000 added stupid tests to annoy developers. tests/Makefile.am | 4 +-- tests/basic_tests.c | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++ tests/tests.c | 4 +++ 3 files changed, 81 insertions(+), 2 deletions(-) commit fdd646ede29f996b65d987e1fc12e1794cb5c9d6 Author: Frederic Peters Date: Thu Jul 29 08:23:55 2004 +0000 had detection of a patched (with XML support) check; only use srunner_set_xml if it is available. configure.ac | 4 +++- tests/tests.c | 9 ++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) commit 5efb84ca502a65258915b4213c12d5e23bc5d0ba Author: Valery Febvre Date: Thu Jul 29 00:53:41 2004 +0000 Removed memory leaks lasso/Attic/protocols/request.c | 5 ++- lasso/Attic/protocols/response.c | 5 ++- lasso/id-ff/login.c | 67 +++++++++++++++++++++++----------------- 3 files changed, 46 insertions(+), 31 deletions(-) commit bd6b00e254951972ae226b06c9fb2370d37f3ad2 Author: Valery Febvre Date: Wed Jul 28 23:04:03 2004 +0000 Inverted only 2 lines :-) lasso/id-ff/user.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) commit d89bb7c0b5abe01096c2f55454432f2864b73dbc Author: Valery Febvre Date: Wed Jul 28 19:35:26 2004 +0000 Just a typing mistake lasso/id-ff/register_name_identifier.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit c14d06b9f0803e09161d22f809ae998d63e44e56 Author: Valery Febvre Date: Wed Jul 28 17:51:45 2004 +0000 *** empty log message *** lasso/id-ff/federation_termination.c | 2 +- lasso/id-ff/name_identifier_mapping.c | 8 ++++---- lasso/id-ff/register_name_identifier.c | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) commit d1d332a1669e1b17a6c0ae5bafdc58928943b446 Author: Valery Febvre Date: Wed Jul 28 16:36:16 2004 +0000 server attribute is now a copy in lasso_logout_new() lasso/id-ff/logout.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit cc70d59cfeea5c35618369b81c5bdd83dd0cc3be Author: Valery Febvre Date: Wed Jul 28 16:31:33 2004 +0000 Atrributes server & user are now copied in lasso_login_new() and lasso_login_new_from_dump() methods lasso/id-ff/login.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 229977a6f532a83935dd92729a8c223af8cbe9c6 Author: Valery Febvre Date: Wed Jul 28 16:27:44 2004 +0000 Added destroy calls for server & user attributes in lasso_profile_context_dispose() private method. lasso/id-ff/profile_context.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) commit 98961b91c96b10e5738342cc0e9b85e6c0223fc6 Author: Valery Febvre Date: Wed Jul 28 16:20:32 2004 +0000 Added lasso_user_copy() method Added lasso_user_dispose() private method lasso/id-ff/user.c | 100 ++++++++++++++++++++++++++++++++++++++++++++++++----- lasso/id-ff/user.h | 4 +++ 2 files changed, 95 insertions(+), 9 deletions(-) commit 6bc0e66f643dc42617be3425b0a277229d60c5eb Author: Valery Febvre Date: Wed Jul 28 16:17:07 2004 +0000 Added lasso_server_copy() method lasso/id-ff/server.c | 31 ++++++++++++++++++++++++++++++- lasso/id-ff/server.h | 36 ++++++++++++++++++------------------ 2 files changed, 48 insertions(+), 19 deletions(-) commit 4eca515b432f16b3ff07a19389e63660739eb580 Author: Valery Febvre Date: Wed Jul 28 16:16:22 2004 +0000 Added lasso_identity_copy() method lasso/Attic/protocols/identity.c | 15 +++++++++++++++ lasso/Attic/protocols/identity.h | 12 +++++++----- 2 files changed, 22 insertions(+), 5 deletions(-) commit f2daceafc23a3f1eb0b9f6cb2cef4b0bd75c7143 Author: Valery Febvre Date: Wed Jul 28 16:15:52 2004 +0000 *** empty log message *** lasso/xml/xml.c | 2 +- lasso/xml/xml.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit a1a40af6e0a80c113e1d3ebe102c9b6fcb4a9d49 Author: Frederic Peters Date: Wed Jul 28 15:54:50 2004 +0000 updated .cvsignore (binary is now tests and out.xml has been renamed to result.xml) tests/.cvsignore | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 70cd9c3a7b06bfdcb038978f59e1b86623c5da57 Author: Frederic Peters Date: Wed Jul 28 15:54:14 2004 +0000 modularized tests; it is now possible to add more suites easily. tests/Makefile.am | 10 +++---- tests/login_tests.c | 38 ++------------------------- tests/tests.c | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 82 insertions(+), 41 deletions(-) commit 76c3e1e11ec5398f95b70fbbbfc8fd50bb704309 Author: Valery Febvre Date: Wed Jul 28 15:50:31 2004 +0000 Added lasso_provider_copy() method lasso/Attic/protocols/provider.c | 15 +++++++++++++++ lasso/Attic/protocols/provider.h | 2 ++ 2 files changed, 17 insertions(+) commit 123c88ac776d84210d9c822f78411f6ed9300dfd Author: Valery Febvre Date: Wed Jul 28 15:49:42 2004 +0000 lasso_node_get_name now returns now an xmlChar* (instead of a const xmlChar*) lasso/xml/xml.c | 8 +++++--- lasso/xml/xml.h | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) commit 6a204dd2028048ebc0a19caa51d9069d7114e8c2 Author: Frederic Peters Date: Wed Jul 28 15:08:22 2004 +0000 remove generated lasso.pc on make clean Makefile.am | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit b8192990caf77874eea8768721284cf4d95c2184 Author: Nicolas Clapies Date: Tue Jul 27 15:59:03 2004 +0000 debug messages lasso/id-ff/user.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit f3e6f011e8ea07df28b99e548f2c705f2efca620 Author: Nicolas Clapies Date: Tue Jul 27 15:58:22 2004 +0000 *** empty log message *** python/environs/py_logout.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 49964c80c2e81ebf6cea915046b7690318cd2e0e Author: Nicolas Clapies Date: Tue Jul 27 15:57:45 2004 +0000 update of federation termination lasso/id-ff/federation_termination.c | 138 +++++++++++++++++----------- lasso/id-ff/federation_termination.h | 23 +++-- python/environs/py_federation_termination.c | 49 ++++++---- python/environs/py_federation_termination.h | 6 +- python/examples/defederation.py | 51 +++++----- python/lasso.py | 28 +++--- python/lassomod.c | 3 +- 7 files changed, 172 insertions(+), 126 deletions(-) commit c11cd6bf0fe4d16f62b038b1a09e25700ff57595 Author: Frederic Peters Date: Tue Jul 27 15:31:37 2004 +0000 debian/ updated for official 0.3 release changelog | 11 +++++++++-- control | 2 +- copyright | 39 +++++++++++++++++++++++++++++++++++---- docs | 1 + liblasso0-python2.3.files | 4 ++-- rules | 14 +++++--------- 6 files changed, 53 insertions(+), 18 deletions(-) commit d18a9dd23da7e66330a6da5dffaf6739d54e207c Author: Frederic Peters Date: Tue Jul 27 15:31:37 2004 +0000 debian/ updated for official 0.3 release debian/changelog | 11 +++++++++-- debian/control | 2 +- debian/copyright | 39 +++++++++++++++++++++++++++++++++++---- debian/docs | 1 + debian/liblasso0-python2.3.files | 4 ++-- debian/rules | 14 +++++--------- 6 files changed, 53 insertions(+), 18 deletions(-) commit 359b8128c3d4308ae8b27ddf3a352b67eaba629b Author: Nicolas Clapies Date: Tue Jul 27 14:59:46 2004 +0000 version 0.3.0 configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit fde93331c3da81cfee01e0fba9b799160b1d064d Author: Nicolas Clapies Date: Tue Jul 27 12:29:50 2004 +0000 remove useless debug message lasso/id-ff/user.c | 1 - 1 file changed, 1 deletion(-) commit 349afc2dd685c415a31ac1e9607c82c59f8eb84f Author: Frederic Peters Date: Tue Jul 27 11:35:26 2004 +0000 fixed warnings tests/login_tests.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit ffa847da099475e0f61855a5ff6fe02792e78072 Author: Nicolas Clapies Date: Tue Jul 27 09:58:39 2004 +0000 Move first_* to initial_* vars lasso/id-ff/logout.c | 44 +++++++++++++++++++++++--------------------- lasso/id-ff/logout.h | 7 +++---- 2 files changed, 26 insertions(+), 25 deletions(-) commit 476b580c5c6455cd7fb2cec35fc0c9597b9b3c24 Author: Nicolas Clapies Date: Tue Jul 27 09:57:45 2004 +0000 Use LassoNode_get instead of LassoAssertion_get in user_add_assertion() python/environs/py_user.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) commit 8db9e224686e787a7b4225302afd1b70006a5a4d Author: Valery Febvre Date: Tue Jul 27 01:19:38 2004 +0000 'assertion' var should be a PyObject*, not a LassoNode* (in user_add_assertion) python/environs/py_user.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) commit 2c1db26d5e21a42429322d7d2dd6f975c80f0df8 Author: Valery Febvre Date: Tue Jul 27 01:17:01 2004 +0000 Ooops, Copy/Paste isn't always your friend :-) python/environs/py_profile_context.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit dbe4d8a86c11c4ec193a84d1dc0591fdd137598e Author: Valery Febvre Date: Tue Jul 27 01:15:38 2004 +0000 *** empty log message *** lasso/id-ff/user.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) commit 3ae917244469be00de7178c5949df61e6cbeded2 Author: Valery Febvre Date: Tue Jul 27 01:12:53 2004 +0000 Removed 2 useless lasso_node_copy lasso/id-ff/login.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 831277c6b7da16ea21508c27d35dfe4d020c9167 Author: Nicolas Clapies Date: Mon Jul 26 23:50:03 2004 +0000 remove the second param of lasso.Login.new python/examples/login.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 73fd0e85c53a11df3267ca7946e25530f8f6be8d Author: Nicolas Clapies Date: Mon Jul 26 23:45:58 2004 +0000 fix a bug in python binding user_add_assertion : give obj of python assertion, add a copy of assertion in lasso_add_assertion ( not sure, but assertion should be copied ) lasso/id-ff/user.c | 6 +++++- lasso/id-ff/user.h | 1 + python/environs/py_user.c | 6 ++++-- python/examples/user.py | 8 ++++++++ 4 files changed, 18 insertions(+), 3 deletions(-) commit db051a1a73684708d47ede1acefdaeff0cf99120 Author: Emmanuel Raviart Date: Mon Jul 26 22:02:03 2004 +0000 Removed obsolete logout method load_from_dump. Upgraded some residual calls to login_new & logout_new. Updated Java binding. Java unit test works (and C too, but Python still doesn't). java/src/c/com_entrouvert_lasso_LassoLogin.c | 11 ++------- java/src/c/com_entrouvert_lasso_LassoLogout.c | 26 ++-------------------- .../c/com_entrouvert_lasso_LassoProfileContext.c | 13 +++++++++++ java/src/java/com/entrouvert/lasso/LassoLogin.java | 9 ++++---- .../src/java/com/entrouvert/lasso/LassoLogout.java | 9 +++----- .../com/entrouvert/lasso/LassoProfileContext.java | 2 ++ java/tests/LoginTest.java | 15 ++++++------- lasso/id-ff/logout.c | 15 ------------- lasso/id-ff/logout.h | 3 --- python/environs/py_logout.c | 18 --------------- python/environs/py_logout.h | 1 - python/examples/logout.py | 4 ++-- python/lasso.py | 3 --- python/lassomod.c | 1 - python/tests/login_tests.py | 9 ++++---- tests/.cvsignore | 1 + tests/login_tests.c | 4 ++-- 17 files changed, 42 insertions(+), 102 deletions(-) commit 8d1bd57755ceebe0fa5a3926223a1437c9869108 Author: Frederic Peters Date: Mon Jul 26 19:30:25 2004 +0000 output tags when error occurs (not just success or failures) python/tests/XmlTestRunner.py | 8 ++++++++ 1 file changed, 8 insertions(+) commit c5c0515bb2202e58d3534d23794332eef2dbe36e Author: Valery Febvre Date: Mon Jul 26 18:36:17 2004 +0000 *** empty log message *** python/lasso.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) commit 002aab58211182377e4f7233722762ee52c7261f Author: Valery Febvre Date: Mon Jul 26 18:19:16 2004 +0000 *** empty log message *** lasso/id-ff/logout.h | 18 +++++++----------- python/environs/py_logout.c | 4 ++-- python/lassomod.c | 2 ++ tests/login_tests.c | 17 +++++++---------- 4 files changed, 18 insertions(+), 23 deletions(-) commit 8ae1b1ce45388639f2a07544e3588adb0cdd84a2 Author: Valery Febvre Date: Mon Jul 26 18:07:52 2004 +0000 Added new ProfileContext class python/environs/py_login.c | 14 +++------ python/environs/py_profile_context.c | 56 ++++++++++++++++++++++++++++++++++++ python/environs/py_profile_context.h | 11 +++++++ python/lasso.py | 53 ++++++++++++++++++++++++---------- 4 files changed, 109 insertions(+), 25 deletions(-) commit 02445023b66db5e1a11137e068ac19db00fdc12a Author: Nicolas Clapies Date: Mon Jul 26 17:51:56 2004 +0000 remove logout-from-idp.py, only logout.py is useful python/examples/Makefile.am | 1 - python/examples/logout-from-idp.py | 57 -------------------------------------- 2 files changed, 58 deletions(-) commit befb5d7f15129b33a9ced5a077a0d0595a1ee795 Author: Romain Chantereay Date: Mon Jul 26 17:44:34 2004 +0000 Removed from the dist the two removed files. win32/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 927f2ac7f688d28cd0f1268a1fc5b25b6b9f0f5e Author: Valery Febvre Date: Mon Jul 26 17:39:55 2004 +0000 *** empty log message *** lasso/Attic/protocols/identity.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit b86b5225680225d7940de6e0745de077278ece15 Author: Valery Febvre Date: Mon Jul 26 17:38:32 2004 +0000 Added lasso_profile_context_set_user_from_dump method lasso/id-ff/profile_context.c | 12 ++++++++++++ lasso/id-ff/profile_context.h | 8 ++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) commit b652a4a94a82ad2851eb84fccf2b8b259acfaa19 Author: Valery Febvre Date: Mon Jul 26 17:36:28 2004 +0000 Removed arg user in lasso_login_new lasso/id-ff/login.c | 4 +--- lasso/id-ff/login.h | 3 +-- 2 files changed, 2 insertions(+), 5 deletions(-) commit 432a237d31d25968f01f44e97e6d0f47fd9715b6 Author: Romain Chantereay Date: Mon Jul 26 17:13:32 2004 +0000 - Removed old style DLL exports definitions. - Moved old to new way windows dll creation command. win32/Makefile.am | 35 +-- win32/create_lasso.def.py | 31 --- win32/lasso.def | 537 ---------------------------------------------- 3 files changed, 19 insertions(+), 584 deletions(-) commit 8fb70e361af130048d00abc207eb5d262b9e0389 Author: Romain Chantereay Date: Mon Jul 26 17:10:34 2004 +0000 Added special Windows AC substitution. configure.ac | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) commit 4fcb806a25e50ac2e0a5b282d42750a4823a6d6f Author: Nicolas Clapies Date: Mon Jul 26 16:02:32 2004 +0000 update of example python/examples/logout.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) commit c3fa9bdbe41f4d1076fecec4aaa4aaa4a8caec2d Author: Nicolas Clapies Date: Mon Jul 26 16:01:59 2004 +0000 acces to RelayState in logout object lasso/id-ff/logout.c | 48 ++++++++++++++++++++++++++++++--------------- lasso/id-ff/logout.h | 25 ++++++++++++----------- python/environs/py_logout.c | 26 +++++++++++++----------- python/lasso.py | 28 ++++++++++++++------------ 4 files changed, 75 insertions(+), 52 deletions(-) commit ae959a9e38e85986b8e8a910cec9aaca1274565b Author: Valery Febvre Date: Mon Jul 26 15:01:21 2004 +0000 *** empty log message *** lasso/id-ff/login.c | 6 +++--- lasso/xml/ds_signature.c | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) commit f64405984fd0add3f4cef9a22ba39afde2256d43 Author: Romain Chantereay Date: Mon Jul 26 14:33:04 2004 +0000 use the macro to get logout data. java/src/c/com_entrouvert_lasso_LassoLogout.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 2e376bd798ec42106dc8a95c1aa2c717a61d8b77 Author: Valery Febvre Date: Mon Jul 26 14:08:45 2004 +0000 Removed 4 useless #define constants lasso/xml/debug.c | 40 +++++++++++----------------------------- lasso/xml/debug.h | 5 ----- 2 files changed, 11 insertions(+), 34 deletions(-) commit 1004bd32e6bda94974937dad0b8c66387e025a00 Author: Valery Febvre Date: Mon Jul 26 14:06:20 2004 +0000 Added consent attribute check in lasso_login_process_federation() function lasso/id-ff/login.c | 66 ++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 45 insertions(+), 21 deletions(-) commit 1bf524b03f77f0af0d01c0b525e43db20eb6fddb Author: Frederic Peters Date: Mon Jul 26 13:13:49 2004 +0000 set a few variables to NULL after they'be freed; and don't free providerID in lasso_user_get_authentication_method if it was passed by the caller. lasso/id-ff/user.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) commit b08787ecd10aeef88a909e2c43a99846f2e933e5 Author: Valery Febvre Date: Mon Jul 26 12:09:07 2004 +0000 Finished to implement lasso_login_destroy() and lasso_logout_destroy() methods lasso/id-ff/login.c | 31 ++++++++++++++++++++++++++++++- lasso/id-ff/login.h | 2 ++ lasso/id-ff/logout.c | 35 ++++++++++++++++++++++++++++++++++- lasso/id-ff/logout.h | 2 ++ 4 files changed, 68 insertions(+), 2 deletions(-) commit 75eea32b80fb96d6dc563719458f64b1731a6118 Author: Valery Febvre Date: Mon Jul 26 11:30:03 2004 +0000 Removed nameIdentifier attribute in Logout object There is already a nameIdientifier attribute in ProfileContext class lasso/id-ff/logout.c | 3 ++- lasso/id-ff/logout.h | 4 +--- python/environs/py_logout.c | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) commit 20663807a87aee8eca257d83c8e8eaf34476a9d5 Author: Frederic Peters Date: Mon Jul 26 11:13:40 2004 +0000 added an XXX and a comment where I think the problem is. Developers; please have a look. tests/login_tests.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) commit f0e695f21cd4a70edd4fe6dff0f1531939465a23 Author: Frederic Peters Date: Mon Jul 26 10:48:17 2004 +0000 --dontfork mode for the tests (so it is easier to debug segfaults) tests/login_tests.c | 11 +++++++++++ 1 file changed, 11 insertions(+) commit 3d67b7c87a669315244885d5d64d9cfd458e2fbc Author: Frederic Peters Date: Mon Jul 26 10:16:10 2004 +0000 end of test port to C; developers, please test it (or the python login_tests; results should be identical). There is a problem in memory management and *sometimes* it works. *Sometimes* it doesn't: (process:12643): lasso-CRITICAL **: file xml.c: line 64 (lasso_node_copy): assertion `LASSO_IS_NODE(node)' failed (process:12643): lasso-CRITICAL **: file xml.c: line 1024 (lasso_node_impl_add_child): assertion `LASSO_IS_NODE(child)' failed And *sometimes* it is even worse (segfault): Running suite(s): Login 50%: Checks: 2, Failures: 0, Errors: 1 login_tests.c:81:P:Generate Server Contexts:test01_generateServersContextDumps:Passed login_tests.c:229:E:Login initiated by service provider:test02_serviceProviderLogin: (after this point) Received signal 11 I believe this is caused by something in http://buildbox.entrouvert.org/logs/20040726/lupin.0320.changelog.xml tests/login_tests.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 48 insertions(+), 2 deletions(-) commit 1b4a4680d679427959450985bb64024f3d623b59 Author: Frederic Peters Date: Mon Jul 26 09:36:43 2004 +0000 this is a debug message; please. lasso/id-ff/user.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 278277ef6d78dd48a883337a3501c556e4f9b7bc Author: Frederic Peters Date: Mon Jul 26 09:15:21 2004 +0000 require check 0.9.0 configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 341fb52a971b536b6fff3f747063ba207a9bfb68 Author: Frederic Peters Date: Mon Jul 26 09:00:13 2004 +0000 further in the unit test; pain pain pain. tests/login_tests.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) commit fa20471eb7d963620eacc53900286af0c0e6be45 Author: Frederic Peters Date: Mon Jul 26 08:01:33 2004 +0000 started to copy Python second test (serviceProviderLogin) in C. 1 hour and 38 lines so far and I should probably move to something or I'll get angry. tests/login_tests.c | 106 ++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 98 insertions(+), 8 deletions(-) commit 3b123ca197c15a792a862666b79bc12507d1d571 Author: Valery Febvre Date: Mon Jul 26 01:11:22 2004 +0000 Removed many memory leaks lasso/Attic/protocols/identity.c | 5 +- lasso/Attic/protocols/provider.c | 20 +++++--- lasso/id-ff/server.c | 103 +++++++++++++++++++++++---------------- lasso/id-ff/user.c | 2 +- lasso/xml/xml.c | 23 +++------ 5 files changed, 86 insertions(+), 67 deletions(-) commit ec8c3ce68c8ad21554a6191c6dea0f330050c3ba Author: Valery Febvre Date: Sun Jul 25 23:30:09 2004 +0000 Removed many memory leaks lasso/Attic/protocols/identity.c | 5 +++- lasso/Attic/protocols/logout_response.c | 4 ++- .../protocols/name_identifier_mapping_response.c | 1 + lasso/id-ff/logout.c | 29 ++++++++++++++-------- lasso/id-ff/register_name_identifier.c | 1 + 5 files changed, 27 insertions(+), 13 deletions(-) commit 4154f6d456b3b39d12bddb188f037ab850c48b62 Author: Valery Febvre Date: Sun Jul 25 23:28:40 2004 +0000 Finished to implement lasso_user_destroy() method Removed many memory leaks lasso/id-ff/user.c | 200 ++++++++++++++++++++++++++++++++--------------------- 1 file changed, 123 insertions(+), 77 deletions(-) commit be0cd69800469e5cdfd13fc18a1eac0f6e824092 Author: Frederic Peters Date: Sun Jul 25 21:01:57 2004 +0000 sync namespace with check unittest namespace (I didn't feel like they would keep a 0d.be namespace...) python/tests/tests.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit a3a86229f745297d8c0bb65a311be0e78d3421f1 Author: Frederic Peters Date: Sun Jul 25 20:53:24 2004 +0000 check 0.9 no longer has suite_free(). And our local version got srunner_set_xml() tests/login_tests.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 89f807e143e62f50e2cf152c9c7c05495f828387 Author: Emmanuel Raviart Date: Sun Jul 25 20:32:14 2004 +0000 Added a ColdFusion redirect to IDP single sign-on URL. java/coldfusion/web/login.cfm | 1 + 1 file changed, 1 insertion(+) commit 83fb7de1fbe01752e57fb65e5faeec28d712b33d Author: Emmanuel Raviart Date: Sun Jul 25 20:17:15 2004 +0000 Added Makefile for ColdFusion "binding". java/coldfusion/Makefile | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) commit bf5489f9dafc19b1713855f45329567559fe7f9e Author: Emmanuel Raviart Date: Sun Jul 25 20:00:58 2004 +0000 Added ColdFusion very preliminary "binding" using Java binding. java/coldfusion/.cvsignore | 1 + java/coldfusion/src/CFLasso.java | 82 ++++++++++++++++++++++++++++++++++++++++ java/coldfusion/web/login.cfm | 17 +++++++++ 3 files changed, 100 insertions(+) commit 5c73b6167694372c9722401c3f05c8df15382065 Author: Emmanuel Raviart Date: Sun Jul 25 19:29:26 2004 +0000 Java unit test is again similar to Python. Corrected Java binding to pass the unit test both with Kaffe and Sun JRE. Added a small new test in Python unit test. .../src/c/com_entrouvert_lasso_LassoAuthnRequest.c | 1 + java/src/c/com_entrouvert_lasso_LassoLogin.c | 12 ---- java/src/c/com_entrouvert_lasso_LassoLogout.c | 67 +++++++++++------ .../c/com_entrouvert_lasso_LassoProfileContext.c | 84 +++++++++++++++------- java/src/java/com/entrouvert/lasso/Lasso.java | 8 +++ .../com/entrouvert/lasso/LassoAuthnRequest.java | 1 + .../com/entrouvert/lasso/LassoAuthnResponse.java | 1 + java/src/java/com/entrouvert/lasso/LassoLogin.java | 2 - .../src/java/com/entrouvert/lasso/LassoLogout.java | 14 ++-- .../com/entrouvert/lasso/LassoProfileContext.java | 49 ++++++++----- .../java/com/entrouvert/lasso/LassoRequest.java | 1 + .../src/java/com/entrouvert/lasso/LassoServer.java | 1 - java/tests/LoginTest.java | 10 +-- python/tests/login_tests.py | 1 + 14 files changed, 163 insertions(+), 89 deletions(-) commit 614ac78aa0bda9d7fcf1ef534bdf069777b84065 Author: Frederic Peters Date: Sun Jul 25 18:50:25 2004 +0000 add title and time for test suites (in xml output) python/tests/tests.py | 3 +++ 1 file changed, 3 insertions(+) commit a194ef543ad9923be551758fad6af62a235028cb Author: Frederic Peters Date: Sun Jul 25 18:32:22 2004 +0000 moved as debug() two messages (those were interfering with the test suite) lasso/id-ff/profile_context.c | 2 +- lasso/id-ff/user.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 72fca15efd5e669b966a7ad87c5d30f769cd6a66 Author: Frederic Peters Date: Sun Jul 25 17:31:43 2004 +0000 use message functions to show message (fix #217) lasso/id-ff/name_identifier_mapping.c | 4 ++-- lasso/id-ff/user.c | 2 +- lasso/lasso.c | 10 +++++----- lasso/xml/tools.c | 22 +++++++++++----------- 4 files changed, 19 insertions(+), 19 deletions(-) commit 64215114be290db2d55fd827a9089231f99c0383 Author: Frederic Peters Date: Sun Jul 25 16:52:28 2004 +0000 basic XmlTestRunner; ./tests.py --xml; output to stdout (messed up with lasso spouting messages on stdout; will be fixed on lasso side) python/tests/XmlTestRunner.py | 59 +++++++++++++++++++++++++++++++++++++++++++ python/tests/tests.py | 27 +++++++++++++++----- 2 files changed, 79 insertions(+), 7 deletions(-) commit d194c244aa8926a6694f987c81357aaeedd7f3fc Author: Frederic Peters Date: Sun Jul 25 16:50:28 2004 +0000 s/&/and/ python/tests/login_tests.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 5043f092cba42edaad07447a832d8156a2a69759 Author: Valery Febvre Date: Sun Jul 25 16:28:53 2004 +0000 Added lasso_provider_destroy() method lasso/Attic/protocols/provider.c | 6 ++++++ lasso/Attic/protocols/provider.h | 2 ++ 2 files changed, 8 insertions(+) commit df05fe2ac6f8f32faf0af6325bcc0c8e40f87ae0 Author: Valery Febvre Date: Sun Jul 25 16:27:49 2004 +0000 Finished to implement lasso_server_destroy() method lasso/id-ff/server.c | 27 +++++++++++++++++++++------ lasso/id-ff/server.h | 2 ++ 2 files changed, 23 insertions(+), 6 deletions(-) commit 561b87435a7d5b0b00a6aa811b4a2d944876fa76 Author: Valery Febvre Date: Sun Jul 25 16:26:11 2004 +0000 Replaced 2 debug(ERROR, ...) by new message(G_LOG_LEVEL_ERROR, ...) function BEWARE: debug() should be used only for debugging messages. lasso/id-ff/logout.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) commit d792b018cf3234f88c0777274d7b7c9890166f5f Author: Valery Febvre Date: Sun Jul 25 15:16:48 2004 +0000 Oops, forget in previous commit python/xml/py_xml.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 5435c3ea335214a72750b250dc8d498e46198649 Author: Emmanuel Raviart Date: Sun Jul 25 15:15:56 2004 +0000 Adapted logout unit test to new API. python/tests/login_tests.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit e5a5b1d8da8aabd12903a6e74824aee4e565a0a7 Author: Emmanuel Raviart Date: Sun Jul 25 15:14:44 2004 +0000 Added missing return statement. lasso/id-ff/logout.c | 1 + 1 file changed, 1 insertion(+) commit f2793350a25e49eac9e9f6fc4478eb94cd3bf0f2 Author: Valery Febvre Date: Sun Jul 25 15:13:54 2004 +0000 Many little fixs lasso/Attic/protocols/identity.c | 4 +-- lasso/Attic/protocols/provider.c | 13 +++++---- lasso/id-ff/server.c | 7 +++-- lasso/id-ff/user.c | 9 ++++-- lasso/xml/ds_signature.c | 10 +++---- lasso/xml/tools.c | 12 ++++---- lasso/xml/tools.h | 4 +-- lasso/xml/xml.c | 59 ++++++++++++++++++++++++---------------- lasso/xml/xml.h | 2 +- python/environs/py_login.c | 9 +++--- 10 files changed, 74 insertions(+), 55 deletions(-) commit 6023d78531b610cda5badb62340da8e32b165530 Author: Valery Febvre Date: Sun Jul 25 15:03:00 2004 +0000 Moved nameIdentifer attribute of Login object in ProfileContext lasso/id-ff/login.c | 20 ++++++++------------ lasso/id-ff/login.h | 1 - lasso/id-ff/profile_context.c | 11 +++++++++-- lasso/id-ff/profile_context.h | 2 ++ 4 files changed, 19 insertions(+), 15 deletions(-) commit 110851e9d73a98cf56e6677cdc057eb0035bc6b5 Author: Frederic Peters Date: Sun Jul 25 13:52:22 2004 +0000 fixed tabulations in python files (oh the horror; they were mixed with space indendations). Also installed a test on commits to catch this (and check xml files) python/doc/pythfilter.py | 4 +- ...ogout-process-idp-initiated-redirect-request.py | 2 +- ...sp-logout-process-idp-initiated-soap-request.py | 2 +- python/examples/defederation.py | 8 +- python/examples/logout-from-idp.py | 4 +- python/examples/logout.py | 12 +- python/examples/registration.py | 8 +- python/lasso.py | 156 ++++++++++----------- 8 files changed, 98 insertions(+), 98 deletions(-) commit 58666f93a17c1d9c05c1211ee7bd5713a1b96996 Author: Frederic Peters Date: Sun Jul 25 13:46:57 2004 +0000 fixed args order (but not enough to get the test to pass) python/tests/login_tests.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 020900ac6655ad289d46e01e8198f6956ef783a9 Author: Frederic Peters Date: Sun Jul 25 12:51:43 2004 +0000 login_tests.py can be executed without tests.py python/tests/login_tests.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) commit b40a7c6a9f28903bf9972bcf1e562e55fc688617 Author: Frederic Peters Date: Sun Jul 25 12:43:57 2004 +0000 nozero exit code if a test failed python/tests/tests.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit 03d61844cddff31ee00b1f5847276f9ba9a488fd Author: Frederic Peters Date: Sun Jul 25 12:25:37 2004 +0000 modified sys.path so that python test suite can run before lasso is installed. python/tests/tests.py | 3 +++ 1 file changed, 3 insertions(+) commit f10b3e0841e39a083967ad47a4e6f3c4d0c7fe70 Author: Frederic Peters Date: Sun Jul 25 12:22:46 2004 +0000 initialze codeError python/environs/py_lecp.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) commit 890c5150e4e0ed3956d95d506ec391645a265090 Author: Nicolas Clapies Date: Sun Jul 25 09:29:28 2004 +0000 fix the problem of setting the user environ in SOAP method : the problem : process_request_msg needs usr environ to verify federation and authentication. a solution : first load the request msg get the name identifier of the request find the user dump from the name identifier and load it in logout object process the request see python/examples/logout.py for the methods. lasso/id-ff/logout.c | 67 +++++++++++++++++++++++++++++++++++---------- lasso/id-ff/logout.h | 17 ++++++++++-- python/environs/py_logout.c | 66 ++++++++++++++++++++++++++++++++------------ python/environs/py_logout.h | 4 ++- python/examples/logout.py | 13 ++++++--- 5 files changed, 127 insertions(+), 40 deletions(-) commit 4b3094b60482030f773889d1395b17a2390c7473 Author: Nicolas Clapies Date: Sun Jul 25 09:25:06 2004 +0000 *** empty log message *** lasso/id-ff/federation_termination.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit d4b79b874b04c57e23eddae03b9105f282c817a8 Author: Nicolas Clapies Date: Sun Jul 25 09:24:26 2004 +0000 udpate of C lecp, add python lecp lasso/id-ff/lecp.h | 27 +++--- python/environs/Makefile.am | 4 +- python/environs/py_lecp.c | 199 ++++++++++++++++++++++++++++++++++++++++++++ python/environs/py_lecp.h | 58 +++++++++++++ python/lasso.py | 61 +++++++++++++- python/lassomod.c | 14 +++- 6 files changed, 339 insertions(+), 24 deletions(-) commit 3d230ade52498c06e36b7f46840d2504b407b6c7 Author: Romain Chantereay Date: Sat Jul 24 19:15:49 2004 +0000 Update windows exports. win32/lasso.def | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) commit 7716529c82c6d617774381ba55e69dceb4a1a056 Author: Frederic Peters Date: Sat Jul 24 18:15:00 2004 +0000 do not build tests in the debian package rules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 6f8e71c5b579dcb9aafbf89ae1cad7b48f842204 Author: Frederic Peters Date: Sat Jul 24 18:15:00 2004 +0000 do not build tests in the debian package debian/rules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 6bd6b709c88c9e3e1b6cfdd053fa6dc5b120e4f7 Author: Frederic Peters Date: Sat Jul 24 18:00:51 2004 +0000 .cvsignore for tests/ directory tests/.cvsignore | 5 +++++ 1 file changed, 5 insertions(+) commit 1893900d097aac4bafb393cc0e747478499f3a2d Author: Frederic Peters Date: Sat Jul 24 18:00:16 2004 +0000 using check for the test suite (--enable-tests=no if you don't want them) Makefile.am | 2 +- configure.ac | 22 +++++++++++++++- tests/Makefile.am | 22 ++++++++++++++++ tests/login_tests.c | 76 +++++++++++++++++++++++++++++++---------------------- 4 files changed, 89 insertions(+), 33 deletions(-) commit eda0f459be1c72ef210b4318eaae6efa06003035 Author: Emmanuel Raviart Date: Sat Jul 24 16:41:19 2004 +0000 This is not a C unit test, but it can miracolously become one. tests/login_tests.c | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) commit 093ef9faa6ab4db5cb7cc4c09dc76b439e5f9c06 Author: Valery Febvre Date: Sat Jul 24 15:47:01 2004 +0000 Added 2 missing #include (for xmlsec) lasso/lasso.c | 3 +++ 1 file changed, 3 insertions(+) commit f13f2c6d767f481df1362b3c0e54a853ca7d2d98 Author: Valery Febvre Date: Sat Jul 24 15:06:03 2004 +0000 Added a summary. It's just a test. I'm not sure it's can be useful. configure.ac | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) commit ff0a3546692e74f558c78075b6bf3629dc0917f4 Author: Valery Febvre Date: Sat Jul 24 14:58:17 2004 +0000 Moved some #include lasso/xml/ds_signature.c | 3 +++ lasso/xml/ds_signature.h | 2 ++ lasso/xml/tools.c | 8 +++++++- lasso/xml/tools.h | 4 ---- lasso/xml/xml.c | 9 +++++++-- 5 files changed, 19 insertions(+), 7 deletions(-) commit e7f88217e4fa89a0ae7cc3f9eb379afbcfa0d456 Author: Frederic Peters Date: Sat Jul 24 14:55:48 2004 +0000 added debian packaging files (NOT included in .tar.gz produced by make dist; this is normal) changelog | 6 +++ compat | 1 + control | 45 ++++++++++++++++++++ copyright | 10 +++++ dirs | 2 + docs | 1 + liblasso-dev.dirs | 2 + liblasso-dev.files | 5 +++ liblasso0-python2.3.files | 3 ++ liblasso0.dirs | 1 + liblasso0.files | 1 + rules | 103 ++++++++++++++++++++++++++++++++++++++++++++++ 12 files changed, 180 insertions(+) commit 88b3b8defa72746d98338afbc08c90b1f071fb78 Author: Frederic Peters Date: Sat Jul 24 14:55:48 2004 +0000 added debian packaging files (NOT included in .tar.gz produced by make dist; this is normal) debian/changelog | 6 +++ debian/compat | 1 + debian/control | 45 +++++++++++++++++ debian/copyright | 10 ++++ debian/dirs | 2 + debian/docs | 1 + debian/liblasso-dev.dirs | 2 + debian/liblasso-dev.files | 5 ++ debian/liblasso0-python2.3.files | 3 ++ debian/liblasso0.dirs | 1 + debian/liblasso0.files | 1 + debian/rules | 103 +++++++++++++++++++++++++++++++++++++++ 12 files changed, 180 insertions(+) commit 60c5404c406c139cd3e164ebc45da0d160390f1b Author: Emmanuel Raviart Date: Sat Jul 24 12:33:07 2004 +0000 Updated unit tests to show logout bug. java/tests/LoginTest.java | 10 +++++++--- python/tests/login_tests.py | 12 ++++++++---- 2 files changed, 15 insertions(+), 7 deletions(-) commit 206f81cc07cf6b00560ad7678e26828344b00c79 Author: Frederic Peters Date: Sat Jul 24 11:35:41 2004 +0000 compile java binding intree (doesn't try to link to a system liblasso) java/Makefile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit da79d8656fa37c599027e8eb8f5bc9f5d19e782b Author: Frederic Peters Date: Sat Jul 24 11:34:58 2004 +0000 removed Question (shouldn't have been commited) java/Question | 12 ------------ 1 file changed, 12 deletions(-) commit 87a496a06b2a091ca3c088e3de58c06b4f0f1fce Author: Frederic Peters Date: Sat Jul 24 10:09:21 2004 +0000 Moved copyright statements to the README file (no sense to have them in the AUTHORS file). Point *kindly* to the mailing list and request tracker. Unified titles style. AUTHORS | 18 ++++++------------ README | 6 ++++++ 2 files changed, 12 insertions(+), 12 deletions(-) commit 74b89bef55ea93daa1ccf0a68d7af598617c2a6e Author: Emmanuel Raviart Date: Sat Jul 24 07:37:19 2004 +0000 Added myself as project master. Small corrections. AUTHORS | 8 ++++---- doap.rdf | 8 +++++++- 2 files changed, 11 insertions(+), 5 deletions(-) commit 520345214fc6b8536c93e41039f63c52c96c6dec Author: Valery Febvre Date: Sat Jul 24 00:17:57 2004 +0000 Replaced old debug() calls by the 2 new functions debug() and message() lasso/Attic/protocols/authn_response.c | 5 ++- lasso/Attic/protocols/logout_response.c | 12 ++--- lasso/id-ff/federation_termination.c | 59 ++++++++++++------------ lasso/id-ff/lecp.c | 34 +++++++------- lasso/id-ff/login.c | 80 +++++++++++++++++---------------- lasso/id-ff/logout.c | 74 +++++++++++++++--------------- lasso/id-ff/name_identifier_mapping.c | 38 ++++++++-------- lasso/id-ff/profile_context.c | 12 ++--- lasso/id-ff/register_name_identifier.c | 68 ++++++++++++++-------------- lasso/id-ff/server.c | 4 +- lasso/id-ff/user.c | 14 +++--- lasso/xml/debug.c | 10 +++-- lasso/xml/debug.h | 2 +- lasso/xml/errors.c | 2 +- lasso/xml/errors.h | 2 +- lasso/xml/xml.c | 24 +++++----- 16 files changed, 223 insertions(+), 217 deletions(-) commit 2dc5c3a1c9cda81fc1620b30c42decebfe934206 Author: Valery Febvre Date: Fri Jul 23 22:21:02 2004 +0000 Added a missing utf8 AUTHORS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 25cf97e8447a1d1ccceb98f1d4daa6ef62e4b81f Author: Valery Febvre Date: Fri Jul 23 22:19:07 2004 +0000 *** empty log message *** README | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 86eafb6f2215de6475a990326ab4400c91e84289 Author: Valery Febvre Date: Fri Jul 23 22:12:43 2004 +0000 Added a note about bug reports, help and feature requests AUTHORS | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) commit 4add120e5b28edae50265ef1150e2fc28d31464f Author: Frederic Peters Date: Fri Jul 23 21:52:14 2004 +0000 improved doap file doap.rdf | 63 +++++++++++++++++++++++++++++++++++---------------------------- 1 file changed, 35 insertions(+), 28 deletions(-) commit cbb84677950533c5c5fbe3ca84e903e7e1e59667 Author: Frederic Peters Date: Fri Jul 23 21:40:21 2004 +0000 utf8 for AUTHORS AUTHORS | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) commit 21a7697fdef8f3997071c2b19b7639ddffcadd88 Author: Frederic Peters Date: Fri Jul 23 21:37:26 2004 +0000 MANIFEST.in was used by distutils; removed python/MANIFEST.in | 5 ----- 1 file changed, 5 deletions(-) commit 3f2bad664bf6c5da6f0e3bb5492de14a8843f0b0 Author: Frederic Peters Date: Fri Jul 23 21:36:47 2004 +0000 added --enable-python option to ./configure; default is yes. --enable-python=no to not compile python bindings. configure.ac | 12 +++++++++++- python/Makefile.am | 10 ++++++---- python/environs/Makefile.am | 11 +++++++---- python/protocols/Makefile.am | 11 ++++++++--- python/protocols/elements/Makefile.am | 9 ++++++--- python/xml/Makefile.am | 30 ++++++++++++++++-------------- 6 files changed, 54 insertions(+), 29 deletions(-) commit a3fce007c45a710758c572346ab5a4839bfd6bf8 Author: Emmanuel Raviart Date: Fri Jul 23 19:39:36 2004 +0000 Added DOAP file (see http://usefulinc.com/doap). Slight corrections to README. README | 4 ++-- doap.rdf | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 2 deletions(-) commit 1b94f34b7637e937a3a76d5e9910e4f7803c6596 Author: Frederic Peters Date: Fri Jul 23 18:54:30 2004 +0000 running autoheader autogen.sh | 2 ++ 1 file changed, 2 insertions(+) commit cd0e144ff7613d0e944b290d267dbc9d043c6b2c Author: Frederic Peters Date: Fri Jul 23 18:26:35 2004 +0000 moved win32 Makefile targets to win32/Makefile.am Makefile.am | 34 ---------------------------------- win32/Makefile.am | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 34 deletions(-) commit ff07de57823e19415f2a84f7b670a4a0c695254b Author: Frederic Peters Date: Fri Jul 23 18:23:29 2004 +0000 use pkg-config unless on windows; not the contrary configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 96830ea888519f5582d00e34b4a6f7d2d2260bed Author: Romain Chantereay Date: Fri Jul 23 18:19:09 2004 +0000 Added some windows specifics considerations. Cleaned the Hard, badly, sadly, dirty constant definitions. These definitions are kept dirt, but a little less. configure.ac | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) commit e1d4bd8f50a04b352a9c4296d84e1ce2bc1e52dd Author: Valery Febvre Date: Fri Jul 23 17:19:06 2004 +0000 New log/debug system It uses g_log() function now (from glib) debug macro has been split into 2 macros: debug(format, args) : for debug message only, activated if LASSO_DEBUG flag is defined message(level, format, args) : level is a GLogLevelFlags (enum) lasso/id-ff/user.c | 2 +- lasso/xml/debug.c | 96 ++++++++++++++++++++++++++++++------------------------ lasso/xml/debug.h | 10 ++++-- 3 files changed, 61 insertions(+), 47 deletions(-) commit ae11abae6a93fbbd90b87c6d2ae6ac320cb3e1a1 Author: Romain Chantereay Date: Fri Jul 23 17:13:49 2004 +0000 Migrated windows.h inclusion from lasso.c to lasso.h. lasso/lasso.c | 1 - lasso/lasso.h | 3 +++ 2 files changed, 3 insertions(+), 1 deletion(-) commit cea6eb4f0cc204d3c90395c76f39a82fa1d09d02 Author: Romain Chantereay Date: Fri Jul 23 17:12:30 2004 +0000 Definition file was to early in the future. win32/lasso.def | 2 -- 1 file changed, 2 deletions(-) commit c9ef7d3cea824fb1657677bae2d6351a9d4565c6 Author: Romain Chantereay Date: Fri Jul 23 17:11:39 2004 +0000 En croisant les doigts pour les ^M ne viennent pas tout pourrir... Cleaned DLL process creation. Now we have a import library. The libs are created in the win32/.libs directory. The linkage is done using import libs and no more directly the DLL. The import library is named liblasso.a and no more liblasso.dll.a Makefile.am | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) commit c0d2b1566622c65718ba0317235e512eb7c94c7d Author: Emmanuel Raviart Date: Fri Jul 23 17:02:11 2004 +0000 Added Java LassoUser.getAuthenticationMethod Python method User.get_authentication_method argument is now optional. Use of this method in non-regression tests. java/src/c/com_entrouvert_lasso_LassoUser.c | 18 ++++++++++++++++++ java/src/java/com/entrouvert/lasso/LassoUser.java | 2 ++ java/tests/LoginTest.java | 11 +++++------ python/lasso.py | 2 +- python/tests/login_tests.py | 7 ++++--- 5 files changed, 30 insertions(+), 10 deletions(-) commit a11f5fe9c4dbfae919102824c86c343bd59240c5 Author: Valery Febvre Date: Fri Jul 23 16:34:39 2004 +0000 Added lasso_user_get_authentication_method() Done in Python too. lasso/id-ff/user.c | 31 +++++++++++++++++++++++++++++-- lasso/id-ff/user.h | 45 ++++++++++++++++++++++++--------------------- python/environs/py_user.c | 36 +++++++++++++++++++++++++++--------- python/environs/py_user.h | 1 + python/lasso.py | 11 +++++++---- python/lassomod.c | 1 + 6 files changed, 89 insertions(+), 36 deletions(-) commit e2f33ecf5a89b10591b77c9666c9d4d57a836799 Author: Nicolas Clapies Date: Fri Jul 23 16:32:36 2004 +0000 fix bug in init of logout from request at idp lasso/id-ff/logout.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) commit 23d6cb138bf0eb8c6252bbc2b94897f386a51cc6 Author: Emmanuel Raviart Date: Fri Jul 23 16:29:00 2004 +0000 Inverted assertion operands, so that error messages be more logical. java/tests/LoginTest.java | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) commit 0dfb6a9d007d35b3d314abf1056dae09d65ba2c2 Author: Emmanuel Raviart Date: Fri Jul 23 16:21:43 2004 +0000 First non regression test that supports full logout procedure... and shows a bug. java/src/c/com_entrouvert_lasso_LassoLogout.c | 13 +++++++++++++ java/src/java/com/entrouvert/lasso/LassoLogout.java | 2 ++ java/tests/LoginTest.java | 2 ++ python/tests/login_tests.py | 2 ++ 4 files changed, 19 insertions(+) commit 41b36be1f4a88dde81ef10ba83199afd37e94524 Author: Emmanuel Raviart Date: Fri Jul 23 16:15:51 2004 +0000 Removed directory we should not be in CVS. java/target/.cvsignore | 2 -- 1 file changed, 2 deletions(-) commit 15673bbca7f948145304232ec154c0d74694e65e Author: Nicolas Clapies Date: Fri Jul 23 16:11:06 2004 +0000 fix : process of a logout request at idp lasso/id-ff/logout.c | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) commit 7e0e90827a4e74ec7fc1379f0230954a298fabda Author: Nicolas Clapies Date: Fri Jul 23 14:22:06 2004 +0000 *** empty log message *** lasso/id-ff/logout.c | 2 -- 1 file changed, 2 deletions(-) commit e133692ee477e12d6758c956b4cccac9bb8e77f3 Author: Nicolas Clapies Date: Fri Jul 23 14:14:41 2004 +0000 *** empty log message *** lasso/id-ff/register_name_identifier.c | 132 +++++++++++++++++++-------------- lasso/id-ff/user.c | 2 +- python/environs/py_user.c | 2 +- 3 files changed, 80 insertions(+), 56 deletions(-) commit ee2fba7c0fba3eb855a1ab5d32df65c4860bdf0b Author: Nicolas Clapies Date: Fri Jul 23 14:13:20 2004 +0000 update of logout with better support of propagation from idp lasso/Attic/protocols/logout_response.c | 12 +++- lasso/id-ff/logout.c | 100 ++++++++++++++++++++++++++++---- lasso/id-ff/logout.h | 7 +++ python/environs/py_logout.c | 19 ++++++ python/environs/py_logout.h | 1 + python/examples/logout-from-idp.py | 4 +- python/examples/logout.py | 81 +++++++++++++++----------- python/lasso.py | 5 +- python/lassomod.c | 1 + 9 files changed, 182 insertions(+), 48 deletions(-) commit afd693d03e6db77c6b0ab25a66cfe326975aa9f2 Author: Nicolas Clapies Date: Fri Jul 23 14:11:55 2004 +0000 remove unwanted debug message lasso/id-ff/profile_context.c | 4 ---- 1 file changed, 4 deletions(-) commit 554a65272188e31fde5e70ebd9655d982d4d85e5 Author: Valery Febvre Date: Fri Jul 23 13:59:28 2004 +0000 *** empty log message *** python/xml/py_xml.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) commit a5543746d88019a714d5d7edbce069470be30693 Author: Valery Febvre Date: Fri Jul 23 13:41:50 2004 +0000 *** empty log message *** python/xml/py_xml.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit f293a3b00a527df5361ded67ef1659af7acc1c69 Author: Valery Febvre Date: Fri Jul 23 13:41:21 2004 +0000 Added a third arg (GError **err) in lasso_node_get_attr_value() method to report errors lasso/id-ff/user.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) commit 5da1b0185ae35cdeb24efd4fc8c642ee3d1f6bd0 Author: Valery Febvre Date: Fri Jul 23 13:28:08 2004 +0000 - Added a third arg (GError **err) in lasso_node_get_attr_value() method to report errors - Replaced some lasso_provider_get_providerID() by direct access to ProviderID attribute of server objects lasso/Attic/protocols/authn_response.c | 13 +++- .../protocols/elements/authentication_statement.c | 8 +-- lasso/Attic/protocols/logout_response.c | 26 ++++++-- lasso/Attic/protocols/provider.c | 77 ++++++++++++++++++---- lasso/Attic/protocols/provider.h | 12 ++-- lasso/id-ff/federation_termination.c | 13 ++-- lasso/id-ff/lecp.c | 10 ++- lasso/id-ff/login.c | 31 ++++++--- lasso/id-ff/logout.c | 10 +-- lasso/id-ff/name_identifier_mapping.c | 69 +++++++++++-------- lasso/id-ff/profile_context.c | 12 ++-- lasso/id-ff/register_name_identifier.c | 51 +++++++------- lasso/id-ff/server.c | 31 +++++---- lasso/xml/errors.c | 6 +- lasso/xml/errors.h | 2 +- lasso/xml/xml.c | 26 ++++++-- lasso/xml/xml.h | 14 ++-- 17 files changed, 272 insertions(+), 139 deletions(-) commit 25c73745541cd659babe96bbb9daf6872f409479 Author: Emmanuel Raviart Date: Fri Jul 23 13:04:44 2004 +0000 Added (incomplete) logout tests for Python & Java. java/src/c/com_entrouvert_lasso_LassoLogin.c | 2 +- java/src/c/com_entrouvert_lasso_LassoLogout.c | 10 ++++--- java/src/java/com/entrouvert/lasso/Lasso.java | 13 ++++++-- java/tests/LoginTest.java | 43 ++++++++++++++++++++++++--- python/tests/login_tests.py | 41 +++++++++++++++++++++++-- 5 files changed, 94 insertions(+), 15 deletions(-) commit 90581b9fb62f66ffadb3415c0200303fa188034c Author: Emmanuel Raviart Date: Fri Jul 23 12:00:13 2004 +0000 Removed file that shouldn't be in CVS. config.h.in | 118 ------------------------------------------------------------ 1 file changed, 118 deletions(-) commit f47a4f6f2d5a6a6c19182ef5badc6072b1ee7f53 Author: Emmanuel Raviart Date: Fri Jul 23 11:38:03 2004 +0000 Added authors (please correct if I made mistakes). AUTHORS | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 80 insertions(+), 2 deletions(-) commit d3d1306c68e371c7fa5cd4c483f894d42795c055 Author: Frederic Peters Date: Fri Jul 23 10:06:25 2004 +0000 emptyed outdated TODO TODO | 18 ------------------ 1 file changed, 18 deletions(-) commit 26ce9e3875b7761541857993a65e064770499fb5 Author: Frederic Peters Date: Fri Jul 23 09:42:09 2004 +0000 useful and interesting README file README | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) commit 9deaf09d2a89136d54414c9c1cdf590832596a78 Author: Frederic Peters Date: Fri Jul 23 09:20:11 2004 +0000 added docs/tutorial/ to directories handled by automake configure.ac | 1 + docs/Makefile.am | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) commit d601caf152a8d0bc24fbdb6dfe9ab3d2f935e6d7 Author: Frederic Peters Date: Fri Jul 23 09:17:33 2004 +0000 install python module in site-packages/ python/Makefile.am | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) commit 1d90e76779e07609c983144b84493847c7fd9447 Author: Frederic Peters Date: Fri Jul 23 08:08:19 2004 +0000 forgot Makefile.am in nsis/ directory win32/nsis/Makefile.am | 1 + 1 file changed, 1 insertion(+) commit 6a7625e6fca81a69d1d129845d90beb85f3c3759 Author: Frederic Peters Date: Thu Jul 22 21:25:23 2004 +0000 cleaned up configure.in configure.ac | 88 +++++++----------------------------------------------------- 1 file changed, 10 insertions(+), 78 deletions(-) commit 3e94ee388a7adb311b64db7ddaae7887dcc8b3dd Author: Frederic Peters Date: Thu Jul 22 20:55:22 2004 +0000 PKG_CHECK_MODULES detects missing pkg-config configure.ac | 15 --------------- 1 file changed, 15 deletions(-) commit 46fc634643cf3f0a1b1e97309c7b4ad63b00aaed Author: Frederic Peters Date: Thu Jul 22 20:47:53 2004 +0000 build was used by distutils; no longer used. (but automake creates .deps) python/.cvsignore | 1 - python/environs/.cvsignore | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) commit 6101526743c64e19fbf172bfd37f607fdd2481bf Author: Emmanuel Raviart Date: Thu Jul 22 19:35:43 2004 +0000 Corrected Java non-regression test bug (found with Sun non free jdk :-/ ). Improved some .cvsignore. java/.cvsignore | 1 + java/src/c/com_entrouvert_lasso_LassoLogin.c | 8 +++++--- java/tests/LoginTest.java | 2 +- python/.cvsignore | 2 +- 4 files changed, 8 insertions(+), 5 deletions(-) commit 94d475b1a7f3e934b699eaa4031ee5362e8893f9 Author: Frederic Peters Date: Thu Jul 22 19:26:21 2004 +0000 setup.py has been removed python/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 005f7ad2f66c43317656b43b373d624b80f85172 Author: Frederic Peters Date: Thu Jul 22 19:24:10 2004 +0000 added win32 Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 9fafbcd580f9588a0b10bb430eed7b2acd99233d Author: Emmanuel Raviart Date: Thu Jul 22 18:38:50 2004 +0000 Nearly completed Python & Java first non-regression test for login. But Java test doesn't work: java.lang.UnsatisfiedLinkError: libjlasso: not found Adding its directory to LD_LIBRARY_PATH may help. at LoginTest.main (LoginTest.java:165) And I don't understand why. Please professor, help me! java/src/c/com_entrouvert_lasso_Lasso.c | 2 +- java/src/c/com_entrouvert_lasso_LassoLogin.c | 22 +++++++++++++--- java/src/java/com/entrouvert/lasso/LassoLogin.java | 2 ++ .../com/entrouvert/lasso/LassoProfileContext.java | 1 - java/tests/LoginTest.java | 29 +++++++++++++++++++--- lasso/id-ff/profile_context.h | 3 ++- python/examples/logout.py | 2 +- python/lasso.py | 12 ++++----- python/tests/login_tests.py | 27 ++++++++++++++------ 9 files changed, 75 insertions(+), 25 deletions(-) commit 55aeba092c8d40053e1dbff6af75176dfee2586d Author: Frederic Peters Date: Thu Jul 22 17:41:01 2004 +0000 include win32/ in make dist configure.ac | 2 ++ win32/.cvsignore | 2 ++ win32/Makefile.am | 4 ++++ win32/nsis/.cvsignore | 2 ++ 4 files changed, 10 insertions(+) commit 693f0b17bbcadec0922f8f031514ba9346ff4b56 Author: Frederic Peters Date: Thu Jul 22 17:34:02 2004 +0000 ignore Makefile.in, Makefile, .deps and .libs under python/ python/.cvsignore | 8 +++++++- python/doc/.cvsignore | 2 ++ python/doc/tutorial/.cvsignore | 2 ++ python/environs/.cvsignore | 3 +++ python/examples/.cvsignore | 2 ++ python/protocols/.cvsignore | 3 +++ python/protocols/elements/.cvsignore | 4 ++++ python/tests/.cvsignore | 3 +++ python/xml/.cvsignore | 4 ++++ 9 files changed, 30 insertions(+), 1 deletion(-) commit 8a6a66e4c923894475fb38bd4acef0262808aa05 Author: Frederic Peters Date: Thu Jul 22 17:28:58 2004 +0000 libtool line for win32; copied from libxml2 configure.ac | 1 + 1 file changed, 1 insertion(+) commit 71e99e47e30fd86b4f52e0ad61096a471f245942 Author: Frederic Peters Date: Thu Jul 22 17:00:23 2004 +0000 usage of pkg-config to get library information in configure; automake for the python module; Makefile.am | 5 +- configure.ac | 248 ++++++----------------------- lasso/Attic/protocols/Makefile.am | 10 +- lasso/Attic/protocols/elements/Makefile.am | 5 +- lasso/Makefile.am | 10 +- lasso/id-ff/Makefile.am | 5 +- lasso/xml/Makefile.am | 5 +- python/Makefile.am | 31 ++++ python/doc/Makefile.am | 6 + python/doc/tutorial/Makefile.am | 7 + python/environs/Makefile.am | 16 ++ python/examples/Makefile.am | 9 ++ python/protocols/Makefile.am | 35 ++++ python/protocols/elements/Makefile.am | 15 ++ python/setup.py | 247 ---------------------------- python/tests/Makefile.am | 1 + python/xml/Makefile.am | 43 +++++ 17 files changed, 224 insertions(+), 474 deletions(-) commit bc8081c0cd2378aefe1bdf69ab2a158ce9b35f5c Author: Nicolas Clapies Date: Thu Jul 22 16:45:50 2004 +0000 add lecp in environs lasso/Attic/protocols/authn_request_envelope.c | 6 + lasso/Attic/protocols/authn_request_envelope.h | 8 +- lasso/Attic/protocols/authn_response_envelope.c | 13 ++ lasso/Attic/protocols/authn_response_envelope.h | 10 +- lasso/id-ff/Makefile.am | 2 + lasso/id-ff/lecp.c | 250 ++++++++++++++++++++++++ lasso/id-ff/lecp.h | 101 ++++++++++ 7 files changed, 384 insertions(+), 6 deletions(-) commit 0f02df92ed066fbec2abb30e3a096fd7e9d141f5 Author: Emmanuel Raviart Date: Thu Jul 22 16:39:08 2004 +0000 Added Java Lasso method getRequestTypeFromSoapMsg. java/src/c/com_entrouvert_lasso_Lasso.c | 10 ++++++++++ java/src/java/com/entrouvert/lasso/Lasso.java | 8 ++++++++ 2 files changed, 18 insertions(+) commit 580e74b311b6f93642d8933ba9ebc1da0027e600 Author: Valery Febvre Date: Thu Jul 22 16:15:46 2004 +0000 Added errors.c & errors.h lasso/xml/Makefile.am | 2 ++ 1 file changed, 2 insertions(+) commit 5e8c5a4bf97b76bf1fa34f2d82352975bb35d1ab Author: Valery Febvre Date: Thu Jul 22 16:15:23 2004 +0000 *** empty log message *** lasso/xml/debug.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) commit 0387eb47aae29b00a87b4abf9d0e7aacac7ace11 Author: Valery Febvre Date: Thu Jul 22 16:13:56 2004 +0000 Initial commit lasso/xml/errors.c | 37 +++++++++++++++++++++++++++++++++++++ lasso/xml/errors.h | 28 ++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+) commit a35443361850e6ce94b87668b327ab051fe77f5f Author: Valery Febvre Date: Thu Jul 22 14:19:05 2004 +0000 *** empty log message *** lasso/id-ff/profile_context.h | 1 - 1 file changed, 1 deletion(-) commit a3846ac8de3531c942dc9b1c8b70d3ac584dd220 Author: Valery Febvre Date: Thu Jul 22 14:17:22 2004 +0000 Fixed some compilation warnings Added some controls on HTTP methods lasso/id-ff/login.c | 61 ++++++++++++++++++++++++++++++++++------------------- 1 file changed, 39 insertions(+), 22 deletions(-) commit 8e7ee71d26aa0e2e773320c3a160ca00dfb8018a Author: Nicolas Clapies Date: Thu Jul 22 14:07:36 2004 +0000 add level 2 of LECP lasso/Attic/protocols/Makefile.am | 4 + lasso/Attic/protocols/authn_request_envelope.c | 118 ++++++++++++++++++++++++ lasso/Attic/protocols/authn_request_envelope.h | 68 ++++++++++++++ lasso/Attic/protocols/authn_response_envelope.c | 115 +++++++++++++++++++++++ lasso/Attic/protocols/authn_response_envelope.h | 67 ++++++++++++++ 5 files changed, 372 insertions(+) commit b3d980fb23bf51d0d753e062f038c0144b872771 Author: Valery Febvre Date: Thu Jul 22 14:06:30 2004 +0000 Moved LassoProviderTypes enums from profile_context.h to provider.h lasso/Attic/protocols/provider.h | 6 ++++++ lasso/id-ff/profile_context.h | 8 +------- 2 files changed, 7 insertions(+), 7 deletions(-) commit 4dd75f568d002cb44818f5cb253e37e88ecefe8b Author: Valery Febvre Date: Thu Jul 22 13:57:29 2004 +0000 Fixed some compliation warnings lasso/xml/xml.c | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) commit ea7f83599b26ccc897cec73da1f495c3233b3131 Author: Valery Febvre Date: Thu Jul 22 13:55:32 2004 +0000 Initialized some local variables to NULL to avoid compilation warnings lasso/xml/tools.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 43a0f326bbebfbc5e176d5456ae5c155fa295fee Author: Nicolas Clapies Date: Thu Jul 22 13:04:39 2004 +0000 *** empty log message *** lasso/xml/Makefile.am | 4 ++++ 1 file changed, 4 insertions(+) commit 425af0d33bc5ef41a2f6a0073fe1fb0ea59348e9 Author: Nicolas Clapies Date: Thu Jul 22 12:52:09 2004 +0000 xml low level implementation of LECP lasso/xml/lib_authn_request_envelope.c | 188 ++++++++++++++++++++++++++++++++ lasso/xml/lib_authn_request_envelope.h | 86 +++++++++++++++ lasso/xml/lib_authn_response_envelope.c | 111 +++++++++++++++++++ lasso/xml/lib_authn_response_envelope.h | 72 ++++++++++++ 4 files changed, 457 insertions(+) commit ab2c04097960993553f6eadd5fbca32e7f9c4de8 Author: Frederic Peters Date: Thu Jul 22 10:53:04 2004 +0000 unused variables lasso/id-ff/name_identifier_mapping.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) commit 5c6f115243a2ec13a2e077388957fabd5d59cdfe Author: Emmanuel Raviart Date: Thu Jul 22 10:52:11 2004 +0000 A little more java binding and non-regression tests. java/src/c/com_entrouvert_lasso_LassoLogin.c | 49 ++++++++++++++++++- java/src/java/com/entrouvert/lasso/Lasso.java | 16 ++++++ java/src/java/com/entrouvert/lasso/LassoLogin.java | 10 +++- java/tests/LoginTest.java | 57 +++++++++++++++++----- python/lasso.py | 2 +- python/tests/login_tests.py | 40 +++++++++++++-- 6 files changed, 155 insertions(+), 19 deletions(-) commit deee550561978259663cc0f1e123d6acb5835149 Author: Frederic Peters Date: Thu Jul 22 10:24:41 2004 +0000 fixed compilation warnings lasso/id-ff/login.c | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) commit 985c5c3d9560bdb74426ae3de93b3bc02673c085 Author: Frederic Peters Date: Thu Jul 22 10:19:08 2004 +0000 unused variables lasso/id-ff/federation_termination.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) commit 66e89cae13c88e16e1ce1b1e5de4911405536efe Author: Frederic Peters Date: Thu Jul 22 10:17:43 2004 +0000 declare used function lasso/Attic/protocols/request.c | 1 + lasso/xml/samlp_request.h | 2 ++ 2 files changed, 3 insertions(+) commit 61f89970a38be1448dd8557c47ada49d8c5bd138 Author: Frederic Peters Date: Thu Jul 22 10:14:50 2004 +0000 unused variable lasso/Attic/protocols/register_name_identifier_response.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 178526364de567de444fc8311d69b09357c35110 Author: Frederic Peters Date: Thu Jul 22 10:13:26 2004 +0000 unused variables lasso/Attic/protocols/name_identifier_mapping_response.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit eeda806801e73c4983a3021cd72397a2c800c828 Author: Frederic Peters Date: Thu Jul 22 10:12:30 2004 +0000 unused variable `consent' lasso/Attic/protocols/logout_response.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 27577a7ccfc6dcf8de244e9b2b80c2ac8924ec16 Author: Frederic Peters Date: Thu Jul 22 10:11:51 2004 +0000 missing includes lasso/Attic/protocols/authn_response.c | 2 ++ 1 file changed, 2 insertions(+) commit bc0d80c4673c93c4d1ee05c006f139991b4ce52f Author: Nicolas Clapies Date: Thu Jul 22 10:11:46 2004 +0000 update of logout example with test of the request soap python/examples/logout.py | 18 +++++++++++------- python/lasso.py | 7 +++++++ 2 files changed, 18 insertions(+), 7 deletions(-) commit cd2c24d5867381e3b51e4f2bcf58e1e90f1ad561 Author: Frederic Peters Date: Thu Jul 22 10:10:59 2004 +0000 missing #include and case (marked with XXX; should it be written?) lasso/Attic/protocols/authn_request.c | 3 +++ 1 file changed, 3 insertions(+) commit a35f0477384ca53e9c598b35051b9b3d5b5ce42b Author: Frederic Peters Date: Thu Jul 22 10:07:43 2004 +0000 missing #include lasso/Attic/protocols/artifact.c | 1 + 1 file changed, 1 insertion(+) commit 907e116dc0f585a1aef4bf4f55b4c41549af82a4 Author: Frederic Peters Date: Thu Jul 22 10:07:08 2004 +0000 missing #include (I did my tests with -Werror but -Wall was not activated) lasso/xml/tools.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 09bbab2e9497d5b78bef79278e24a75849c6af8f Author: Nicolas Clapies Date: Thu Jul 22 10:05:45 2004 +0000 *** empty log message *** python/lassomod.c | 4 ++-- python/setup.py | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) commit cee28fab27cd7c38ed4af0d0dc1462056b258d2f Author: Frederic Peters Date: Thu Jul 22 10:02:46 2004 +0000 xmlSecBase64Encode is used so xmlsec/base64.h must be included lasso/xml/tools.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 81b5acd5eb4528e10d3da2045ce8b0887effeabc Author: Nicolas Clapies Date: Thu Jul 22 09:54:05 2004 +0000 profile context with function to parse a soap request python/environs/py_profile_context.c | 44 ++++++++++++++++++++++++++++++++++++ python/environs/py_profile_context.h | 35 ++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+) commit c2dc90e2e99a83a1d80042c0405ecba94ad01845 Author: Emmanuel Raviart Date: Thu Jul 22 08:37:09 2004 +0000 Java & Python tests do not regress. They even progress. java/src/c/com_entrouvert_lasso_LassoLogin.c | 2 +- java/src/java/com/entrouvert/lasso/Lasso.java | 10 +++++++++ java/src/java/com/entrouvert/lasso/LassoLogin.java | 2 +- java/tests/LoginTest.java | 14 +++++++++++- python/tests/.cvsignore | 1 + python/tests/login_tests.py | 25 ++++++++++++++++------ 6 files changed, 45 insertions(+), 9 deletions(-) commit 255f09ed98f1e554093dce03c384bf5c4dbea091 Author: Emmanuel Raviart Date: Thu Jul 22 06:59:03 2004 +0000 Added Nicolas to authors. lasso/Attic/protocols/artifact.h | 4 ++-- lasso/Attic/protocols/authn_request.h | 4 ++-- lasso/Attic/protocols/authn_response.h | 4 ++-- lasso/Attic/protocols/elements/assertion.h | 4 ++-- lasso/Attic/protocols/elements/authentication_statement.h | 4 ++-- lasso/Attic/protocols/identity.c | 3 ++- lasso/Attic/protocols/identity.h | 4 ++-- lasso/Attic/protocols/logout_request.h | 4 ++-- lasso/Attic/protocols/logout_response.h | 4 ++-- lasso/Attic/protocols/name_identifier_mapping_request.h | 4 ++-- lasso/Attic/protocols/name_identifier_mapping_response.h | 4 ++-- lasso/Attic/protocols/protocols.h | 4 ++-- lasso/Attic/protocols/provider.c | 3 ++- lasso/Attic/protocols/provider.h | 3 ++- lasso/Attic/protocols/register_name_identifier_request.h | 4 ++-- lasso/Attic/protocols/register_name_identifier_response.h | 4 ++-- lasso/Attic/protocols/request.h | 4 ++-- lasso/Attic/protocols/response.h | 4 ++-- lasso/export.h | 3 ++- lasso/id-ff/federation_termination.c | 4 ++-- lasso/id-ff/federation_termination.h | 4 ++-- lasso/id-ff/login.c | 3 ++- lasso/id-ff/login.h | 4 ++-- lasso/id-ff/logout.c | 3 ++- lasso/id-ff/logout.h | 4 ++-- lasso/id-ff/name_identifier_mapping.c | 3 ++- lasso/id-ff/name_identifier_mapping.h | 4 ++-- lasso/id-ff/profile_context.c | 3 ++- lasso/id-ff/profile_context.h | 4 ++-- lasso/id-ff/register_name_identifier.c | 3 ++- lasso/id-ff/register_name_identifier.h | 4 ++-- lasso/id-ff/server.c | 3 ++- lasso/id-ff/server.h | 4 ++-- lasso/id-ff/user.c | 3 ++- lasso/id-ff/user.h | 4 ++-- lasso/lasso.c | 3 ++- lasso/lasso.h | 3 ++- lasso/xml/debug.c | 3 ++- lasso/xml/debug.h | 3 ++- lasso/xml/ds_signature.c | 3 ++- lasso/xml/ds_signature.h | 3 ++- lasso/xml/lib.h | 3 ++- lasso/xml/lib_assertion.c | 3 ++- lasso/xml/lib_assertion.h | 3 ++- lasso/xml/lib_authentication_statement.c | 3 ++- lasso/xml/lib_authentication_statement.h | 3 ++- lasso/xml/lib_authn_context.c | 3 ++- lasso/xml/lib_authn_context.h | 3 ++- lasso/xml/lib_authn_request.c | 3 ++- lasso/xml/lib_authn_request.h | 3 ++- lasso/xml/lib_authn_response.c | 3 ++- lasso/xml/lib_authn_response.h | 3 ++- lasso/xml/lib_federation_termination_notification.h | 3 ++- lasso/xml/lib_idp_entries.c | 3 ++- lasso/xml/lib_idp_entries.h | 3 ++- lasso/xml/lib_idp_entry.c | 3 ++- lasso/xml/lib_idp_entry.h | 3 ++- lasso/xml/lib_idp_list.c | 3 ++- lasso/xml/lib_idp_list.h | 3 ++- lasso/xml/lib_idp_provided_name_identifier.c | 3 ++- lasso/xml/lib_idp_provided_name_identifier.h | 3 ++- lasso/xml/lib_logout_request.c | 3 ++- lasso/xml/lib_logout_request.h | 3 ++- lasso/xml/lib_logout_response.c | 3 ++- lasso/xml/lib_logout_response.h | 3 ++- lasso/xml/lib_name_identifier_mapping_request.c | 3 ++- lasso/xml/lib_name_identifier_mapping_request.h | 3 ++- lasso/xml/lib_name_identifier_mapping_response.c | 3 ++- lasso/xml/lib_name_identifier_mapping_response.h | 3 ++- lasso/xml/lib_old_provided_name_identifier.c | 3 ++- lasso/xml/lib_old_provided_name_identifier.h | 3 ++- lasso/xml/lib_register_name_identifier_request.c | 3 ++- lasso/xml/lib_register_name_identifier_request.h | 3 ++- lasso/xml/lib_register_name_identifier_response.c | 3 ++- lasso/xml/lib_register_name_identifier_response.h | 3 ++- lasso/xml/lib_request_authn_context.c | 3 ++- lasso/xml/lib_request_authn_context.h | 3 ++- lasso/xml/lib_scoping.c | 3 ++- lasso/xml/lib_scoping.h | 3 ++- lasso/xml/lib_sp_provided_name_identifier.c | 3 ++- lasso/xml/lib_sp_provided_name_identifier.h | 3 ++- lasso/xml/lib_status_response.c | 3 ++- lasso/xml/lib_status_response.h | 3 ++- lasso/xml/lib_subject.c | 3 ++- lasso/xml/lib_subject.h | 3 ++- lasso/xml/saml.h | 3 ++- lasso/xml/saml_advice.c | 3 ++- lasso/xml/saml_advice.h | 3 ++- lasso/xml/saml_assertion.c | 3 ++- lasso/xml/saml_assertion.h | 3 ++- lasso/xml/saml_audience_restriction_condition.c | 3 ++- lasso/xml/saml_audience_restriction_condition.h | 3 ++- lasso/xml/saml_authentication_statement.c | 3 ++- lasso/xml/saml_authentication_statement.h | 3 ++- lasso/xml/saml_authority_binding.c | 3 ++- lasso/xml/saml_authority_binding.h | 3 ++- lasso/xml/saml_condition_abstract.c | 3 ++- lasso/xml/saml_condition_abstract.h | 3 ++- lasso/xml/saml_conditions.c | 3 ++- lasso/xml/saml_conditions.h | 3 ++- lasso/xml/saml_name_identifier.c | 3 ++- lasso/xml/saml_name_identifier.h | 3 ++- lasso/xml/saml_statement_abstract.c | 3 ++- lasso/xml/saml_statement_abstract.h | 3 ++- lasso/xml/saml_subject.c | 3 ++- lasso/xml/saml_subject.h | 3 ++- lasso/xml/saml_subject_confirmation.c | 3 ++- lasso/xml/saml_subject_confirmation.h | 3 ++- lasso/xml/saml_subject_locality.c | 3 ++- lasso/xml/saml_subject_locality.h | 3 ++- lasso/xml/saml_subject_statement_abstract.c | 3 ++- lasso/xml/saml_subject_statement_abstract.h | 3 ++- lasso/xml/samlp_request.c | 3 ++- lasso/xml/samlp_request.h | 3 ++- lasso/xml/samlp_request_abstract.c | 3 ++- lasso/xml/samlp_request_abstract.h | 3 ++- lasso/xml/samlp_response.c | 3 ++- lasso/xml/samlp_response.h | 3 ++- lasso/xml/samlp_response_abstract.c | 3 ++- lasso/xml/samlp_response_abstract.h | 3 ++- lasso/xml/samlp_status.c | 3 ++- lasso/xml/samlp_status.h | 3 ++- lasso/xml/samlp_status_code.c | 3 ++- lasso/xml/samlp_status_code.h | 3 ++- lasso/xml/strings.c | 3 ++- lasso/xml/strings.h | 3 ++- lasso/xml/tools.c | 3 ++- lasso/xml/tools.h | 3 ++- lasso/xml/xml.c | 3 ++- lasso/xml/xml.h | 3 ++- python/environs/py_federation_termination.c | 4 ++-- python/environs/py_federation_termination.h | 4 ++-- python/environs/py_login.c | 4 ++-- python/environs/py_login.h | 4 ++-- python/environs/py_logout.c | 4 ++-- python/environs/py_logout.h | 4 ++-- python/environs/py_register_name_identifier.c | 4 ++-- python/environs/py_register_name_identifier.h | 4 ++-- python/environs/py_server.c | 4 ++-- python/environs/py_server.h | 4 ++-- python/environs/py_user.c | 4 ++-- python/environs/py_user.h | 4 ++-- python/lassomod.c | 3 ++- python/lassomod.h | 3 ++- python/protocols/elements/py_assertion.c | 4 ++-- python/protocols/elements/py_assertion.h | 4 ++-- python/protocols/elements/py_authentication_statement.c | 4 ++-- python/protocols/elements/py_authentication_statement.h | 4 ++-- python/protocols/py_authn_request.c | 4 ++-- python/protocols/py_authn_request.h | 4 ++-- python/protocols/py_authn_response.c | 4 ++-- python/protocols/py_authn_response.h | 4 ++-- python/protocols/py_logout_response.h | 3 ++- python/protocols/py_name_identifier_mapping_response.h | 3 ++- python/py_lasso.c | 3 ++- python/py_lasso.h | 3 ++- python/utils.c | 3 ++- python/xml/py_lib_authentication_statement.c | 4 ++-- python/xml/py_lib_authentication_statement.h | 4 ++-- python/xml/py_lib_authn_request.c | 4 ++-- python/xml/py_lib_authn_request.h | 4 ++-- python/xml/py_lib_logout_request.c | 4 ++-- python/xml/py_lib_logout_request.h | 4 ++-- python/xml/py_lib_logout_response.c | 4 ++-- python/xml/py_lib_logout_response.h | 4 ++-- python/xml/py_lib_name_identifier_mapping_response.c | 4 ++-- python/xml/py_saml_assertion.c | 4 ++-- python/xml/py_saml_assertion.h | 4 ++-- python/xml/py_saml_authentication_statement.c | 4 ++-- python/xml/py_saml_authentication_statement.h | 4 ++-- python/xml/py_saml_name_identifier.c | 4 ++-- python/xml/py_saml_name_identifier.h | 4 ++-- python/xml/py_samlp_response.c | 4 ++-- python/xml/py_samlp_response.h | 4 ++-- python/xml/py_xml.c | 4 ++-- python/xml/py_xml.h | 4 ++-- 176 files changed, 352 insertions(+), 239 deletions(-) commit 8f66aa71024e140998ff635e577323a55f8858ba Author: Emmanuel Raviart Date: Thu Jul 22 06:42:41 2004 +0000 Corrected Lasso URL. python/generator_lasso_strings.py | 4 ++-- python/lasso.py | 2 +- python/lasso_strings.py | 2 +- python/setup.py | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) commit 9972c07880eced1adaa33d944b772aae802976bd Author: Emmanuel Raviart Date: Thu Jul 22 06:39:26 2004 +0000 Corrected Lasso URL. Some progress in Python non regression test. python/environs/py_federation_termination.c | 2 +- python/environs/py_federation_termination.h | 2 +- python/environs/py_login.c | 2 +- python/environs/py_login.h | 2 +- python/environs/py_logout.c | 2 +- python/environs/py_logout.h | 2 +- python/environs/py_register_name_identifier.c | 2 +- python/environs/py_register_name_identifier.h | 2 +- python/environs/py_server.c | 2 +- python/environs/py_server.h | 2 +- python/environs/py_user.c | 2 +- python/environs/py_user.h | 2 +- python/lassomod.c | 2 +- python/lassomod.h | 2 +- python/protocols/elements/py_assertion.c | 2 +- python/protocols/elements/py_assertion.h | 2 +- .../elements/py_authentication_statement.c | 2 +- .../elements/py_authentication_statement.h | 2 +- python/protocols/py_authn_request.c | 2 +- python/protocols/py_authn_request.h | 2 +- python/protocols/py_authn_response.c | 2 +- python/protocols/py_authn_response.h | 2 +- .../py_federation_termination_notification.c | 2 +- .../py_federation_termination_notification.h | 2 +- python/protocols/py_logout_request.c | 2 +- python/protocols/py_logout_request.h | 2 +- python/protocols/py_logout_response.c | 2 +- python/protocols/py_logout_response.h | 2 +- .../protocols/py_name_identifier_mapping_request.c | 2 +- .../protocols/py_name_identifier_mapping_request.h | 2 +- .../py_name_identifier_mapping_response.c | 2 +- .../py_name_identifier_mapping_response.h | 2 +- .../py_register_name_identifier_request.c | 2 +- .../py_register_name_identifier_request.h | 2 +- .../py_register_name_identifier_response.c | 2 +- .../py_register_name_identifier_response.h | 2 +- python/py_lasso.c | 2 +- python/py_lasso.h | 2 +- python/tests/login_tests.py | 34 +++++++++++++++------- python/utils.c | 2 +- python/xml/py_lib_authentication_statement.c | 2 +- python/xml/py_lib_authentication_statement.h | 2 +- python/xml/py_lib_authn_request.c | 2 +- python/xml/py_lib_authn_request.h | 2 +- .../py_lib_federation_termination_notification.c | 2 +- .../py_lib_federation_termination_notification.h | 2 +- python/xml/py_lib_logout_request.c | 2 +- python/xml/py_lib_logout_request.h | 2 +- python/xml/py_lib_logout_response.c | 2 +- python/xml/py_lib_logout_response.h | 2 +- .../xml/py_lib_name_identifier_mapping_request.c | 2 +- .../xml/py_lib_name_identifier_mapping_request.h | 2 +- .../xml/py_lib_name_identifier_mapping_response.c | 2 +- .../xml/py_lib_name_identifier_mapping_response.h | 2 +- .../xml/py_lib_register_name_identifier_request.c | 2 +- .../xml/py_lib_register_name_identifier_request.h | 2 +- python/xml/py_saml_assertion.c | 2 +- python/xml/py_saml_assertion.h | 2 +- python/xml/py_saml_authentication_statement.c | 2 +- python/xml/py_saml_authentication_statement.h | 2 +- python/xml/py_saml_name_identifier.c | 2 +- python/xml/py_saml_name_identifier.h | 2 +- python/xml/py_samlp_response.c | 2 +- python/xml/py_samlp_response.h | 2 +- python/xml/py_xml.c | 2 +- python/xml/py_xml.h | 2 +- 66 files changed, 89 insertions(+), 75 deletions(-) commit 4d1fd73c8751c575f696c1e37b88521a6b96c2fa Author: Emmanuel Raviart Date: Thu Jul 22 06:35:05 2004 +0000 Corrected Lasso URL for java binding. java/src/c/helper.c | 2 +- java/src/c/helper.h | 2 +- java/src/java/com/entrouvert/lasso/LassoObject.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) commit 6ad822fd4b7ac361f62d158b12dc4f92e8aff3c2 Author: Emmanuel Raviart Date: Thu Jul 22 06:10:48 2004 +0000 Some progress in first non regression test. java/Makefile | 21 +++++---- .../src/c/com_entrouvert_lasso_LassoAuthnRequest.c | 2 +- java/src/c/helper.c | 6 +-- java/src/c/helper.h | 6 +-- java/src/java/com/entrouvert/lasso/Lasso.java | 9 ++++ .../com/entrouvert/lasso/LassoAuthnRequest.java | 2 +- .../src/java/com/entrouvert/lasso/LassoObject.java | 3 +- java/tests/LoginTest.java | 54 ++++++++++++++-------- 8 files changed, 67 insertions(+), 36 deletions(-) commit d214143481b615f65aef31d14463f0a92ab7787b Author: Valery Febvre Date: Thu Jul 22 01:01:49 2004 +0000 Update python/lasso_strings.py | 5 +++++ 1 file changed, 5 insertions(+) commit a9bad780eee30b9275d47ee8aace46cac6b222ff Author: Valery Febvre Date: Thu Jul 22 01:01:17 2004 +0000 *** empty log message *** lasso/id-ff/login.c | 54 ++++++++++++++--------------------------------------- 1 file changed, 14 insertions(+), 40 deletions(-) commit f46a076daf3352ecdcd6f274ffb0252f248d4e1b Author: Valery Febvre Date: Thu Jul 22 00:53:54 2004 +0000 Added "ProviderID" attribut in server object A memory leak was removed in lasso_server_new lasso/id-ff/server.c | 44 ++++++++++++++++++++++++++++++++++---------- lasso/id-ff/server.h | 8 +++++--- 2 files changed, 39 insertions(+), 13 deletions(-) commit eb682633945cdd2cfafb3fb082b9c9b6b5e31bba Author: Valery Febvre Date: Thu Jul 22 00:47:01 2004 +0000 Added method set_consent in LibAuthnRequest class python/lasso.py | 3 +++ python/lassomod.c | 5 +++-- python/setup.py | 1 - python/xml/py_lib_authn_request.c | 18 ++++++++++++++++++ python/xml/py_lib_authn_request.h | 1 + 5 files changed, 25 insertions(+), 3 deletions(-) commit 59cac1639ee6d771ebe9ffe118e654d2850f0955 Author: Valery Febvre Date: Thu Jul 22 00:39:51 2004 +0000 *** empty log message *** lasso/xml/strings.c | 5 +++++ lasso/xml/strings.h | 5 +++++ 2 files changed, 10 insertions(+) commit 355783d014c80d5f8fb3baf505cccb91055dde76 Author: Frederic Peters Date: Wed Jul 21 17:38:25 2004 +0000 better way lasso/xml/tools.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) commit 487aac3fc24b319d5030fe3390776dcc21dea0ad Author: Frederic Peters Date: Wed Jul 21 17:37:18 2004 +0000 compilation warnings; in a better way lasso/xml/xml.c | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) commit 48aaf8b6d38aef4f0ee9bf59ecf4310e0dece029 Author: Frederic Peters Date: Wed Jul 21 17:31:30 2004 +0000 fixed compilation warning lasso/id-ff/profile_context.c | 2 +- lasso/id-ff/register_name_identifier.c | 2 +- lasso/id-ff/server.c | 4 ++-- lasso/id-ff/user.c | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) commit 1442f68ab0a1d6423f43a98ac72c32c419d42c7e Author: Frederic Peters Date: Wed Jul 21 17:26:24 2004 +0000 compilation without warning lasso/id-ff/logout.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit b63ef5e7a891c6181f188b0c0e5f21b25097c0d2 Author: Frederic Peters Date: Wed Jul 21 17:22:41 2004 +0000 compilation without warnings lasso/id-ff/login.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) commit 58159bd7a1590b97bc92818336d5140a9ce60055 Author: Frederic Peters Date: Wed Jul 21 17:18:55 2004 +0000 compilation without warning lasso/Attic/protocols/logout_request.c | 1 + 1 file changed, 1 insertion(+) commit 3c7bec5e796ff93f7db255874db1f4fd9bb1da38 Author: Frederic Peters Date: Wed Jul 21 17:18:05 2004 +0000 ciompilation without warning lasso/Attic/protocols/artifact.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit c7f7fdc2ac1e58305bcad6395b88eadb163754ef Author: Frederic Peters Date: Wed Jul 21 17:13:51 2004 +0000 compilation without warnings lasso/xml/xml.c | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) commit 38998697a66254d723a06104e5030455a0b4ec65 Author: Frederic Peters Date: Wed Jul 21 17:09:09 2004 +0000 removed compilation warnings; fixed a few places where memory was allocated with GLib (g_malloc) and freed with libxml2 (xmlFree). lasso/xml/tools.c | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) commit 366e8e54a22b03b4c9036278d1bff241a9cf6fa4 Author: Frederic Peters Date: Wed Jul 21 16:56:52 2004 +0000 C (before C99) didn't allow // as comments; trying to be kind java/src/c/com_entrouvert_lasso_LassoAuthnRequest.c | 2 +- java/src/c/com_entrouvert_lasso_LassoProfileContext.c | 4 ++-- java/src/c/helper.c | 6 +++--- lasso/lasso.c | 6 +++--- 4 files changed, 9 insertions(+), 9 deletions(-) commit a5a2f447f68c7f61637b6d852d1356c3b35acc36 Author: Frederic Peters Date: Wed Jul 21 16:54:18 2004 +0000 fixed lasso site url java/src/c/com_entrouvert_lasso_Lasso.c | 2 +- java/src/c/com_entrouvert_lasso_LassoAuthnRequest.c | 2 +- java/src/c/com_entrouvert_lasso_LassoAuthnResponse.c | 2 +- java/src/c/com_entrouvert_lasso_LassoLogin.c | 2 +- java/src/c/com_entrouvert_lasso_LassoLogout.c | 2 +- java/src/c/com_entrouvert_lasso_LassoNode.c | 2 +- java/src/c/com_entrouvert_lasso_LassoObject.c | 2 +- java/src/c/com_entrouvert_lasso_LassoProfileContext.c | 2 +- java/src/c/com_entrouvert_lasso_LassoProvider.c | 2 +- java/src/c/com_entrouvert_lasso_LassoRequest.c | 2 +- java/src/c/com_entrouvert_lasso_LassoResponse.c | 2 +- java/src/c/com_entrouvert_lasso_LassoServer.c | 2 +- java/src/c/com_entrouvert_lasso_LassoUser.c | 2 +- java/src/java/com/entrouvert/lasso/Lasso.java | 2 +- java/src/java/com/entrouvert/lasso/LassoAuthnRequest.java | 2 +- java/src/java/com/entrouvert/lasso/LassoAuthnResponse.java | 2 +- java/src/java/com/entrouvert/lasso/LassoLogin.java | 2 +- java/src/java/com/entrouvert/lasso/LassoLogout.java | 2 +- java/src/java/com/entrouvert/lasso/LassoNode.java | 2 +- java/src/java/com/entrouvert/lasso/LassoProfileContext.java | 2 +- java/src/java/com/entrouvert/lasso/LassoProvider.java | 2 +- java/src/java/com/entrouvert/lasso/LassoRequest.java | 2 +- java/src/java/com/entrouvert/lasso/LassoResponse.java | 2 +- java/src/java/com/entrouvert/lasso/LassoServer.java | 2 +- java/src/java/com/entrouvert/lasso/LassoTest.java | 2 +- java/src/java/com/entrouvert/lasso/LassoUser.java | 2 +- 26 files changed, 26 insertions(+), 26 deletions(-) commit a76740c95304860b97ac43f19a11fd7d8bb7059c Author: Nicolas Clapies Date: Wed Jul 21 16:49:42 2004 +0000 *** empty log message *** .../federation_termination_notification.c | 1 + lasso/id-ff/profile_context.c | 57 +++++++++++++++++++++- lasso/id-ff/profile_context.h | 28 +++++++---- python/examples/defederation.py | 2 + python/lasso.py | 14 +++--- python/lassomod.c | 2 + python/setup.py | 1 + 7 files changed, 87 insertions(+), 18 deletions(-) commit 06499dcb1cbf829e4522ced86358fa68a48c5a90 Author: Emmanuel Raviart Date: Wed Jul 21 15:17:11 2004 +0000 Added gcj support. java/Makefile | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) commit b9535cfed51d92e1abff0134e74825b1eb38b11f Author: Emmanuel Raviart Date: Wed Jul 21 15:03:14 2004 +0000 Changed Makefile for Kaffe support. Added new class LassoObject. First non regression test. java/.cvsignore | 1 + java/Makefile | 16 ++-- java/src/c/.cvsignore | 2 + java/src/c/com_entrouvert_lasso_Lasso.c | 6 +- .../src/c/com_entrouvert_lasso_LassoAuthnRequest.c | 6 +- .../c/com_entrouvert_lasso_LassoAuthnResponse.c | 46 ++++++------ java/src/c/com_entrouvert_lasso_LassoLogin.c | 6 +- java/src/c/com_entrouvert_lasso_LassoLogout.c | 6 +- java/src/c/com_entrouvert_lasso_LassoNode.c | 6 +- java/src/c/com_entrouvert_lasso_LassoObject.c | 27 +++++++ .../c/com_entrouvert_lasso_LassoProfileContext.c | 46 ++++++------ java/src/c/com_entrouvert_lasso_LassoProvider.c | 46 ++++++------ java/src/c/com_entrouvert_lasso_LassoRequest.c | 6 +- java/src/c/com_entrouvert_lasso_LassoResponse.c | 6 +- java/src/c/com_entrouvert_lasso_LassoServer.c | 15 +++- java/src/c/com_entrouvert_lasso_LassoUser.c | 6 +- java/src/java/com/entrouvert/lasso/Lasso.java | 19 +---- .../com/entrouvert/lasso/LassoAuthnRequest.java | 18 +---- .../com/entrouvert/lasso/LassoAuthnResponse.java | 17 +---- java/src/java/com/entrouvert/lasso/LassoLogin.java | 18 +---- .../src/java/com/entrouvert/lasso/LassoLogout.java | 18 +---- java/src/java/com/entrouvert/lasso/LassoNode.java | 27 ++----- .../src/java/com/entrouvert/lasso/LassoObject.java | 34 +++++++++ .../com/entrouvert/lasso/LassoProfileContext.java | 20 +---- .../java/com/entrouvert/lasso/LassoProvider.java | 20 +---- .../java/com/entrouvert/lasso/LassoRequest.java | 18 +---- .../java/com/entrouvert/lasso/LassoResponse.java | 18 +---- .../src/java/com/entrouvert/lasso/LassoServer.java | 24 +++--- java/src/java/com/entrouvert/lasso/LassoTest.java | 19 +---- java/src/java/com/entrouvert/lasso/LassoUser.java | 20 +---- java/target/.cvsignore | 2 + java/tests/.cvsignore | 1 + java/tests/LoginTest.java | 85 ++++++++++++++++++++++ 33 files changed, 318 insertions(+), 307 deletions(-) commit 08254badc10dc83c4bb941e498aba0737deff485 Author: Nicolas Clapies Date: Wed Jul 21 14:12:24 2004 +0000 *** empty log message *** lasso/id-ff/logout.c | 16 ++++++++++------ python/examples/logout-from-idp.py | 2 +- python/protocols/py_logout_request.c | 10 +++++----- 3 files changed, 16 insertions(+), 12 deletions(-) commit 46738d03eacf3b0368e50674194f6f05cae2cddf Author: Nicolas Clapies Date: Wed Jul 21 14:11:09 2004 +0000 update of federation termination notification .../federation_termination_notification.c | 22 ++++++++++++++ .../federation_termination_notification.h | 6 ++-- lasso/Attic/protocols/identity.c | 16 ++++++++++ lasso/Attic/protocols/identity.h | 30 +++++++++++-------- lasso/id-ff/federation_termination.c | 35 ++++++++++++++++------ python/environs/py_federation_termination.c | 4 +-- python/examples/defederation.py | 12 +++----- python/lassomod.c | 5 ++-- .../py_federation_termination_notification.c | 32 +++++--------------- .../py_federation_termination_notification.h | 3 +- 10 files changed, 102 insertions(+), 63 deletions(-) commit b7cfb5c758c898377a08b368e156bae4d1820b1b Author: Valery Febvre Date: Wed Jul 21 13:19:41 2004 +0000 Update win32/lasso.def | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) commit 222f813ee84604400c04416248773973fd8450f8 Author: Nicolas Clapies Date: Wed Jul 21 12:46:46 2004 +0000 *** empty log message *** lasso/Attic/protocols/provider.h | 6 +++--- lasso/id-ff/federation_termination.c | 29 +++++++++++++++++++---------- lasso/id-ff/logout.c | 32 ++++++++++++++++---------------- lasso/id-ff/server.c | 8 ++++---- python/examples/defederation.py | 12 ++++++------ 5 files changed, 48 insertions(+), 39 deletions(-) commit 1d7b3791454b797bfd8d5dc72600b6932a16552d Author: Nicolas Clapies Date: Wed Jul 21 12:44:33 2004 +0000 add list of identity provider id in user environ lasso/id-ff/user.c | 55 +++++++++++++++++++++++++++++++++----- lasso/id-ff/user.h | 14 ++++++---- python/environs/py_user.c | 8 +++--- python/environs/py_user.h | 2 +- python/examples/logout-from-idp.py | 4 +-- python/examples/logout.py | 4 +-- python/examples/user.py | 4 +-- python/lasso.py | 4 +-- python/lassomod.c | 16 +++++------ 9 files changed, 79 insertions(+), 32 deletions(-) commit ddf6dd5516e6dbf778968c7fd97ba094c115d36b Author: Nicolas Clapies Date: Wed Jul 21 10:08:32 2004 +0000 allow no param in init_request for class Logout lasso/id-ff/logout.c | 17 ++++++++++------- python/environs/py_logout.c | 2 +- python/lasso.py | 2 +- 3 files changed, 12 insertions(+), 9 deletions(-) commit 470e21d4d250216afa07979423f137f1cd65987d Author: Valery Febvre Date: Wed Jul 21 00:40:41 2004 +0000 lasso_node_add_signature() method returns now an integer lasso/xml/xml.c | 15 +++++++++------ lasso/xml/xml.h | 2 +- 2 files changed, 10 insertions(+), 7 deletions(-) commit c11432d26b59328f4f1ea77be364b0ac839b54a6 Author: Valery Febvre Date: Wed Jul 21 00:39:54 2004 +0000 lasso_saml_assertion_set_signature() method returns now an integer lasso/xml/saml_assertion.c | 6 +++--- lasso/xml/saml_assertion.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) commit 390b2226ba4c88cf7a58767fa7e0251ffb10d5a9 Author: Valery Febvre Date: Wed Jul 21 00:38:57 2004 +0000 lasso_ds_signature_sign() method returns now an integer lasso/xml/ds_signature.c | 27 +++++++++++++++++++-------- lasso/xml/ds_signature.h | 2 +- 2 files changed, 20 insertions(+), 9 deletions(-) commit 7e85ead53ce25edb095741efe0774c7a69b71c37 Author: Valery Febvre Date: Wed Jul 21 00:37:59 2004 +0000 *** empty log message *** lasso/Attic/protocols/elements/authentication_statement.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) commit 4a5eb0dea46295b9797f75dd2ff6908aaa01cd05 Author: Valery Febvre Date: Wed Jul 21 00:37:30 2004 +0000 Added error codes in lasso_login_add_response_assertion lasso/id-ff/login.c | 42 ++++++++++++++++++++++++++---------------- 1 file changed, 26 insertions(+), 16 deletions(-) commit 4a37000286d12a58aeca6280a41c5aa2bd5b6b26 Author: Valery Febvre Date: Tue Jul 20 17:20:21 2004 +0000 Added method lasso_user_remove_identity lasso/id-ff/user.c | 43 +++++++++++++++++++++++++++++++++++++++++-- lasso/id-ff/user.h | 4 ++++ 2 files changed, 45 insertions(+), 2 deletions(-) commit d0a420890594745e24f8e41bd261c9615cd44c49 Author: Valery Febvre Date: Tue Jul 20 17:18:47 2004 +0000 *** empty log message *** lasso/Attic/protocols/elements/assertion.h | 1 + 1 file changed, 1 insertion(+) commit 836bafd13b0e1caca671dc8dd5eb9725a53b9b8e Author: Valery Febvre Date: Tue Jul 20 17:18:14 2004 +0000 Removed 2 compilation warnings lasso/Attic/protocols/authn_response.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit 87a72095def16a51a6b42a1a6a667d3b4b0f40a2 Author: Valery Febvre Date: Tue Jul 20 17:15:31 2004 +0000 Added method lasso_identity_destroy() lasso/Attic/protocols/identity.c | 61 +++++++++++++++++++++++++++++++++++++++- lasso/Attic/protocols/identity.h | 4 +++ 2 files changed, 64 insertions(+), 1 deletion(-) commit e9b0fe8068bf20ef592d35f84d920dd3a6c0a50a Author: Valery Febvre Date: Tue Jul 20 17:10:56 2004 +0000 Added method lasso_node_import_from_node() lasso/xml/xml.c | 28 ++++++++++++++++++++++++++++ lasso/xml/xml.h | 5 +++++ 2 files changed, 33 insertions(+) commit f48b33d473cb37aa72d29c6d98311602d30cedf4 Author: Valery Febvre Date: Tue Jul 20 17:10:01 2004 +0000 fct lasso_login_create_user: Created a new identity with the 2 nameIdentifiers found in response assertion this identity is added in user attribute lasso/id-ff/login.c | 80 ++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 64 insertions(+), 16 deletions(-) commit a71570600e450aebf184df8b3ce6bf5dac2ef143 Author: Nicolas Clapies Date: Tue Jul 20 16:06:40 2004 +0000 *** empty log message *** python/examples/defederation.py | 6 ++--- python/examples/registration.py | 52 +++++++++++++++++------------------------ python/examples/user.py | 5 ++++ python/lasso.py | 21 +++++++---------- python/lassomod.c | 10 +++----- python/setup.py | 8 +++---- 6 files changed, 45 insertions(+), 57 deletions(-) commit 2b83bc221ab4df6a13651392414f3c995e150d10 Author: Nicolas Clapies Date: Tue Jul 20 16:05:05 2004 +0000 update internal code to use new_from_export style lasso/Attic/protocols/logout_request.c | 39 +++++++++++--- lasso/Attic/protocols/logout_request.h | 14 ++--- lasso/Attic/protocols/logout_response.c | 77 +++++++++++++++++----------- lasso/Attic/protocols/logout_response.h | 25 ++++----- lasso/id-ff/logout.c | 25 +++++---- python/environs/py_logout.c | 4 +- python/examples/logout.py | 26 +++++++--- python/protocols/py_logout_request.c | 41 +++++---------- python/protocols/py_logout_request.h | 3 +- python/protocols/py_logout_response.c | 91 ++++++++------------------------- python/protocols/py_logout_response.h | 7 +-- 11 files changed, 164 insertions(+), 188 deletions(-) commit a7c3554f40b6b017a4d4abc396de64ed89342a62 Author: Emmanuel Raviart Date: Tue Jul 20 12:41:35 2004 +0000 Added Java binding. java/Makefile | 42 ++++ java/Question | 12 + java/doc/ImplantationMapping.rst | 37 +++ java/doc/JNIForDummy.rst | 36 +++ java/src/c/Makefile | 21 ++ java/src/c/com_entrouvert_lasso_Lasso.c | 38 +++ .../src/c/com_entrouvert_lasso_LassoAuthnRequest.c | 153 ++++++++++++ .../c/com_entrouvert_lasso_LassoAuthnResponse.c | 94 ++++++++ java/src/c/com_entrouvert_lasso_LassoLogin.c | 265 +++++++++++++++++++++ java/src/c/com_entrouvert_lasso_LassoLogout.c | 126 ++++++++++ java/src/c/com_entrouvert_lasso_LassoNode.c | 36 +++ .../c/com_entrouvert_lasso_LassoProfileContext.c | 148 ++++++++++++ java/src/c/com_entrouvert_lasso_LassoProvider.c | 66 +++++ java/src/c/com_entrouvert_lasso_LassoRequest.c | 42 ++++ java/src/c/com_entrouvert_lasso_LassoResponse.c | 36 +++ java/src/c/com_entrouvert_lasso_LassoServer.c | 104 ++++++++ java/src/c/com_entrouvert_lasso_LassoUser.c | 61 +++++ java/src/c/helper.c | 126 ++++++++++ java/src/c/helper.h | 81 +++++++ java/src/java/com/entrouvert/lasso/Lasso.java | 50 ++++ .../com/entrouvert/lasso/LassoAuthnRequest.java | 64 +++++ .../com/entrouvert/lasso/LassoAuthnResponse.java | 53 +++++ java/src/java/com/entrouvert/lasso/LassoLogin.java | 91 +++++++ .../src/java/com/entrouvert/lasso/LassoLogout.java | 60 +++++ java/src/java/com/entrouvert/lasso/LassoNode.java | 51 ++++ .../com/entrouvert/lasso/LassoProfileContext.java | 77 ++++++ .../java/com/entrouvert/lasso/LassoProvider.java | 55 +++++ .../java/com/entrouvert/lasso/LassoRequest.java | 48 ++++ .../java/com/entrouvert/lasso/LassoResponse.java | 48 ++++ .../src/java/com/entrouvert/lasso/LassoServer.java | 77 ++++++ java/src/java/com/entrouvert/lasso/LassoTest.java | 53 +++++ java/src/java/com/entrouvert/lasso/LassoUser.java | 56 +++++ 32 files changed, 2307 insertions(+) commit ff57e03478b2d6460aa2c60110ddfd976c21ca00 Author: Nicolas Clapies Date: Tue Jul 20 10:34:08 2004 +0000 *** empty log message *** lasso/id-ff/logout.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) commit 5c81c45e50c627f9c4bbfbbd5f6a99f49dfe5439 Author: Emmanuel Raviart Date: Tue Jul 20 09:54:49 2004 +0000 Added Python first unit test. Added keys, certificates and metadata, that will be used by regression tests and samples. python/tests/login_tests.py | 86 +++++++++++++++++++++++++++++++++++++++++++++ python/tests/tests.py | 59 +++++++++++++++++++++++++++++++ 2 files changed, 145 insertions(+) commit 6fe0a7a0bbb74c95fd94a4f6abb2d8c1510bd1c2 Author: Nicolas Clapies Date: Tue Jul 20 09:48:34 2004 +0000 *** empty log message *** lasso/id-ff/profile_context.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 3e1eef89acee4300b7e42da3180c7a6d674ff716 Author: Nicolas Clapies Date: Tue Jul 20 09:46:03 2004 +0000 update debug infos lasso/id-ff/logout.c | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) commit cef28b22441fe49224c568432e60429185b48f5b Author: Nicolas Clapies Date: Tue Jul 20 09:25:48 2004 +0000 *** empty log message *** python/environs/py_user.c | 17 ++++++++++++++ python/environs/py_user.h | 2 ++ python/lasso.py | 57 +++++++++++++++++++++++++++++++++++++++++++++++ python/lassomod.c | 14 ++++++++++++ python/setup.py | 1 + 5 files changed, 91 insertions(+) commit 2498ff0141a61c3fdf7c54b41263785ac804cd42 Author: Nicolas Clapies Date: Tue Jul 20 09:23:39 2004 +0000 initial version of register name identifier lasso/id-ff/register_name_identifier.c | 405 ++++++++++++++++++-------- lasso/id-ff/register_name_identifier.h | 32 +- python/environs/py_register_name_identifier.c | 195 +++++++++++++ python/environs/py_register_name_identifier.h | 53 ++++ 4 files changed, 551 insertions(+), 134 deletions(-) commit 5aa6729f30cad26f1e640db6130221b31fdfac55 Author: Nicolas Clapies Date: Tue Jul 20 09:21:41 2004 +0000 update destroy method lasso/id-ff/user.c | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) commit d7dd0dffefc925963db7a13417f873b390d51ad4 Author: Frederic Peters Date: Tue Jul 20 08:30:03 2004 +0000 files to be included in python tarball python/MANIFEST.in | 5 +++++ 1 file changed, 5 insertions(+) commit 702f7e7312b6e77e15e50f54cfcd632ae342599c Author: Valery Febvre Date: Mon Jul 19 23:22:55 2004 +0000 Little fix in lasso_node_impl_export_to_soap() lasso/xml/xml.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) commit a8580ecb6b556e2ad052765c9da88a632194890d Author: Valery Febvre Date: Mon Jul 19 21:04:05 2004 +0000 *** empty log message *** .../protocols/elements/authentication_statement.c | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) commit 5709d0a1f94f20782683e83fff61b97d94a7d498 Author: Valery Febvre Date: Mon Jul 19 20:44:01 2004 +0000 Fixed a little mistake lasso/id-ff/login.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit c9391a21af9d65fa65bb1834aeb6d81613bae4df Author: Valery Febvre Date: Mon Jul 19 17:27:54 2004 +0000 *** empty log message *** lasso/id-ff/login.c | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) commit e1106dbd1d9b051a2918501253dbb6413c188a25 Author: Valery Febvre Date: Mon Jul 19 16:43:12 2004 +0000 *** empty log message *** lasso/id-ff/login.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit 7d99099d0f419a5977f00ad3c9aac96185d618a1 Author: Valery Febvre Date: Mon Jul 19 16:20:53 2004 +0000 *** empty log message *** lasso/id-ff/login.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit b35e9e604630145b7d55247cf46eb21672a583fc Author: Romain Chantereay Date: Mon Jul 19 16:18:14 2004 +0000 Modified lasso DLL ressource version number. win32/lasso.rc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 4c8c5a0eb23f1d6fcec538755fdc52b72eae2ab3 Author: Romain Chantereay Date: Mon Jul 19 16:17:03 2004 +0000 Added deps & lite distributions. Modified lass-full distribution version number. win32/nsis/lasso-deps.nsi | 166 ++++++++++++++++++++++++++++++++++++++++++++++ win32/nsis/lasso-full.nsi | 4 +- win32/nsis/lasso-lite.nsi | 132 ++++++++++++++++++++++++++++++++++++ 3 files changed, 300 insertions(+), 2 deletions(-) commit 8be677011c319c277a1b09e0a66305d7197059f2 Author: Valery Febvre Date: Mon Jul 19 16:13:45 2004 +0000 *** empty log message *** lasso/id-ff/login.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 1fd5ba7046e5593ed1242cc2692e5d7fb5509f1f Author: Valery Febvre Date: Mon Jul 19 16:12:32 2004 +0000 *** empty log message *** lasso/id-ff/login.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) commit 77c415bc4dfedf3fa1f49d3a7017002eb9f258e1 Author: Valery Febvre Date: Mon Jul 19 15:32:42 2004 +0000 *** empty log message *** lasso/id-ff/login.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 2b2caa1b7de94d4f39144eacc3a5d202ca5cbe93 Author: Valery Febvre Date: Mon Jul 19 15:28:51 2004 +0000 Added assertions in user object in lasso_login_add_response_assertion() and lasso_login_process_response_msg() lasso/id-ff/login.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) commit 1934bce93c91b0a591d08a60327d542ce6b5f6b4 Author: Valery Febvre Date: Mon Jul 19 15:26:38 2004 +0000 Removed some debug messages lasso/id-ff/user.c | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) commit e0b9fad4806f3a3061843a0bf94f37644a8427e4 Author: Valery Febvre Date: Mon Jul 19 15:25:16 2004 +0000 Fixed memory leaks .../protocols/elements/authentication_statement.c | 18 +++++++++++++----- lasso/Attic/protocols/identity.c | 17 ++++++++++++++--- 2 files changed, 27 insertions(+), 8 deletions(-) commit 98ff825722b882d74ff065826ed03e511979a644 Author: Romain Chantereay Date: Mon Jul 19 15:04:15 2004 +0000 - Added NSIS installation script. win32/nsis/lasso-full.nsi | 170 ++++++++++++++++++++++++++++++++++++++++++++++ win32/nsis/lasso.ico | Bin 48440 -> 2190 bytes 2 files changed, 170 insertions(+) commit 88963fdb9b373dfd2cc67e93fa139e0c127ed5f8 Author: Romain Chantereay Date: Mon Jul 19 14:55:37 2004 +0000 Removed --prefix option from xxx-config helpers. configure.ac | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 2dd961373014812dc619ee66dab9d0d55caac43d Author: Romain Chantereay Date: Mon Jul 19 13:47:48 2004 +0000 - Better Win32 stuff organization. - Added NSIS special directory. - Added icon file to this directory. Makefile.am | 4 +- lasso/lasso.def | 483 ---------------------------------------------- win32/create_lasso.def.py | 2 +- {lasso => win32}/lasso.rc | 0 win32/nsis/lasso.ico | Bin 0 -> 48440 bytes 5 files changed, 3 insertions(+), 486 deletions(-) commit b2a8d3e4ccbd3fd4fbb3d302884c6426d66261e0 Author: Nicolas Clapies Date: Mon Jul 19 13:28:39 2004 +0000 *** empty log message *** lasso/id-ff/user.c | 2 ++ 1 file changed, 2 insertions(+) commit 7125684426216a4195408e2d2884d8a1c28ea726 Author: Romain Chantereay Date: Mon Jul 19 13:23:53 2004 +0000 Additional test for disabling openssl detection under Windows/Cygwin environment. configure.ac | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) commit ed75cd8f7f58a20d09f2e6b2c0f05f2f2f3abd93 Author: Nicolas Clapies Date: Mon Jul 19 13:19:36 2004 +0000 *** empty log message *** lasso/id-ff/user.c | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) commit d5e12b8a76480201ab33390546df2c52d19d0b77 Author: Nicolas Clapies Date: Mon Jul 19 13:10:27 2004 +0000 add a debug message when dumping assertions of user lasso/id-ff/user.c | 2 ++ 1 file changed, 2 insertions(+) commit fb39af4a2433bc487b98c2ad3f6305903f7549d0 Author: Nicolas Clapies Date: Mon Jul 19 12:26:29 2004 +0000 add a INFO debug message for get provider lasso/id-ff/server.c | 2 ++ 1 file changed, 2 insertions(+) commit 8c0b0cb66780eb70c8f2cc0331bdaf4f78c8fc48 Author: Nicolas Clapies Date: Mon Jul 19 12:25:35 2004 +0000 update federation termination lasso/Attic/protocols/provider.c | 10 ++++- lasso/Attic/protocols/provider.h | 2 + lasso/id-ff/federation_termination.c | 11 +++++- python/environs/py_federation_termination.c | 30 +++++++++++++++ python/environs/py_federation_termination.h | 4 +- python/examples/defederation.py | 45 +++++++++++++++++----- python/lasso.py | 60 +++++++++++++++++++++++++---- python/lassomod.c | 4 ++ 8 files changed, 145 insertions(+), 21 deletions(-) commit 6585a27baffa20d757d1d93cf11264cb593a6910 Author: Nicolas Clapies Date: Mon Jul 19 12:24:48 2004 +0000 add get_attr support python/environs/py_logout.c | 30 ++++++++++++++++++++++++++++++ python/environs/py_logout.h | 4 +++- 2 files changed, 33 insertions(+), 1 deletion(-) commit af53e0a6815e30f3f0c25b1b40f08660865d8d87 Author: Valery Febvre Date: Mon Jul 19 00:13:41 2004 +0000 Added some debug messages Removed msg_relayState in dump (must be on LassoProfileContext) Finished lasso_login_process_request_msg() lasso_login_new_from_dump() is now almost complete. lasso/id-ff/login.c | 195 +++++++++++++++++++++++++++++++++------------------- lasso/id-ff/login.h | 4 +- 2 files changed, 128 insertions(+), 71 deletions(-) commit 6d021a17b29befff2011d92b49433fde279be056 Author: Valery Febvre Date: Mon Jul 19 00:01:17 2004 +0000 New export type supported (Xml) in _new_from_export() constructor lasso/Attic/protocols/authn_request.c | 3 +++ lasso/Attic/protocols/authn_response.c | 6 +++++- 2 files changed, 8 insertions(+), 1 deletion(-) commit ba8b50b0e7feaaf2ac7fb5d9b2b6e1b4710aa400 Author: Valery Febvre Date: Sun Jul 18 23:57:33 2004 +0000 Added new lasso_request_new_from_export() constructor lasso/Attic/protocols/request.c | 29 +++++++++++++++++++++++++++++ lasso/Attic/protocols/request.h | 7 +++++-- 2 files changed, 34 insertions(+), 2 deletions(-) commit 4027d4b394bd18f60af1a931ae59719fc8204821 Author: Valery Febvre Date: Sun Jul 18 23:56:17 2004 +0000 Added response_type & provider_type in login_getattr python/environs/py_login.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) commit b803c987cc28754c2e63a2753011d1ff05d13307 Author: Valery Febvre Date: Sun Jul 18 23:55:01 2004 +0000 *** empty log message *** configure.ac | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) commit e82f1e759b107f79bd7d1233904401166bb3ac90 Author: Valery Febvre Date: Sun Jul 18 23:52:19 2004 +0000 New export type supported (Xml) in lasso_response_new_from_export lasso/Attic/protocols/response.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 244c4e278f655d2434f3b65158a43816ac1a110d Author: Nicolas Clapies Date: Sun Jul 18 23:35:59 2004 +0000 *** empty log message *** lasso/id-ff/federation_termination.c | 10 +++ lasso/id-ff/federation_termination.h | 2 + lasso/id-ff/logout.c | 19 +++- python/environs/py_federation_termination.c | 133 ++++++++++++++++++++++++++++ python/environs/py_federation_termination.h | 48 ++++++++++ python/lassomod.c | 9 ++ python/setup.py | 9 +- 7 files changed, 222 insertions(+), 8 deletions(-) commit 721642847cd1acf399f191d1bb205d7d6466f4fb Author: Nicolas Clapies Date: Sun Jul 18 22:37:39 2004 +0000 *** empty log message *** python/environs/py_logout.c | 16 ++++++++++++++++ python/environs/py_logout.h | 1 + python/examples/logout-from-idp.py | 22 +++++++++++++++++++++- python/lasso.py | 3 +++ python/lassomod.c | 1 + 5 files changed, 42 insertions(+), 1 deletion(-) commit a19c201029c4708c1e21519ae76758565190dc7f Author: Valery Febvre Date: Sun Jul 18 22:22:40 2004 +0000 *** empty log message *** lasso/id-ff/profile_context.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 663ae84b9921723be5ecd60ea722c4f1fbaddddc Author: Valery Febvre Date: Sun Jul 18 20:25:01 2004 +0000 Added 4 missing attributes in LassoProfileContext dump msg_relayState, request_type, response_type, provider_type lasso/id-ff/profile_context.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) commit 5d49050e15f948609984910cd472f2830b6a5bc5 Author: Valery Febvre Date: Sun Jul 18 16:21:40 2004 +0000 Update docs/reference/lasso-sections.txt | 421 +++++++++++++++++++++++++++++++++----- docs/reference/lasso.sgml | 38 +++- docs/reference/lasso.types | 20 +- 3 files changed, 416 insertions(+), 63 deletions(-) commit bdccdcd199fcf2acd41e066e256aa804bf09b57a Author: Valery Febvre Date: Sun Jul 18 15:02:41 2004 +0000 Fixed a typing error: LASSP_... -> LASSO_... lasso/Attic/protocols/artifact.h | 2 +- lasso/Attic/protocols/authn_request.h | 2 +- lasso/Attic/protocols/authn_response.h | 2 +- lasso/Attic/protocols/elements/assertion.h | 2 +- lasso/Attic/protocols/elements/authentication_statement.h | 2 +- lasso/Attic/protocols/federation_termination_notification.h | 2 +- lasso/Attic/protocols/identity.h | 2 +- lasso/Attic/protocols/logout_request.h | 2 +- lasso/Attic/protocols/logout_response.h | 2 +- lasso/Attic/protocols/name_identifier_mapping_request.h | 2 +- lasso/Attic/protocols/name_identifier_mapping_response.h | 2 +- lasso/Attic/protocols/provider.h | 2 +- lasso/Attic/protocols/register_name_identifier_request.h | 2 +- lasso/Attic/protocols/register_name_identifier_response.h | 2 +- lasso/Attic/protocols/request.h | 2 +- lasso/Attic/protocols/response.h | 2 +- lasso/id-ff/federation_termination.h | 2 +- lasso/id-ff/login.h | 2 +- lasso/id-ff/logout.h | 2 +- lasso/id-ff/name_identifier_mapping.h | 2 +- lasso/id-ff/profile_context.h | 3 ++- lasso/id-ff/register_name_identifier.h | 2 +- lasso/id-ff/server.h | 2 +- lasso/id-ff/user.h | 2 +- lasso/xml/lib_assertion.h | 2 +- 25 files changed, 26 insertions(+), 25 deletions(-) commit 4c4ab7e777f7bf91abee534a68a337ccc539ab4d Author: Valery Febvre Date: Sun Jul 18 14:32:17 2004 +0000 Initial commit win32/create_lasso.def.py | 31 +++ win32/lasso.def | 487 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 518 insertions(+) commit 937b592e59386c1e830d486b12fd12b7aa49b404 Author: Valery Febvre Date: Sun Jul 18 02:53:23 2004 +0000 Added a check for xmlsec1 OpenSSL crypto library configure.ac | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) commit 140dfdf54b980aeafa342918fe312aff92e2d970 Author: Frederic Peters Date: Sat Jul 17 14:05:34 2004 +0000 .tar.gz must include lasso.pc.in Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 1b61101a75e0373ed617136df76e1a0665c93008 Author: Valery Febvre Date: Fri Jul 16 17:13:20 2004 +0000 *** empty log message *** configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit d4458a6be0921fa1f0741bf183d06ce80b31719b Author: Valery Febvre Date: Fri Jul 16 17:06:48 2004 +0000 *** empty log message *** lasso/id-ff/user.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) commit 5c727b13b644728457ff3a932540a6f4b217c094 Author: Romain Chantereay Date: Fri Jul 16 16:55:07 2004 +0000 Another try to dllwrap. Makefile.am | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit f4f58e058d3f4e974e53443afe6b944d04046fb0 Author: Valery Febvre Date: Fri Jul 16 16:39:14 2004 +0000 Added somes g_free() and lasso_node_destroy() to fixe memory leaks lasso/Attic/protocols/identity.c | 4 ++-- lasso/Attic/protocols/provider.c | 5 +++-- lasso/id-ff/profile_context.c | 16 ++++++++------- lasso/id-ff/server.c | 4 ++-- lasso/id-ff/user.c | 42 ++++++++++++++++++++++++---------------- 5 files changed, 41 insertions(+), 30 deletions(-) commit 0dde5d12c439a13789a318b43b9293f02fd07ec3 Author: Valery Febvre Date: Fri Jul 16 16:33:43 2004 +0000 Code cleanup Fixed some memory leak Added more debug messages lasso/id-ff/login.c | 173 +++++++++++++++++++++++++++++++--------------------- 1 file changed, 104 insertions(+), 69 deletions(-) commit 049324c9100c5ac31a29548fa2ab1ece5c1a179c Author: Valery Febvre Date: Fri Jul 16 15:26:32 2004 +0000 lasso_node_copy() method uses now the G_OBJECT_TYPE macro to build a new object with the same type as the object copied lasso/xml/xml.c | 56 ++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 34 insertions(+), 22 deletions(-) commit 995db11b18b151ff4a07b44708fdcd130d8ac161 Author: Valery Febvre Date: Fri Jul 16 14:04:32 2004 +0000 Removed 2 lasso_node_copy() in lasso_identity_set_local_nameIdentifier() and lasso_identity_set_remote_nameIdentifier() lasso/Attic/protocols/identity.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 2f3cca14a32b2a7c4d530eb847ed34902734a580 Author: Nicolas Clapies Date: Fri Jul 16 13:45:35 2004 +0000 *** empty log message *** lasso/id-ff/user.c | 1 - python/examples/logout-from-idp.py | 35 +++++++++++++++++++++++++++++++++++ python/examples/user.py | 36 ++++++++++++++++++++++++++++++++++++ 3 files changed, 71 insertions(+), 1 deletion(-) commit 3827d324bb20ab60b7a39537fd3b768c9bef4c73 Author: Nicolas Clapies Date: Fri Jul 16 13:29:23 2004 +0000 *** empty log message *** lasso/id-ff/user.c | 20 ++++++++++++++------ python/environs/py_user.c | 4 ++++ 2 files changed, 18 insertions(+), 6 deletions(-) commit 0438887aa3feef58aa8c0cc574b16f5999f4c9cd Author: Romain Chantereay Date: Fri Jul 16 13:21:23 2004 +0000 Added variables exports information. lasso/lasso.def | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 73 insertions(+), 1 deletion(-) commit 1ee73b81c7cc4ffc5e2210a7fb73553c9ddb1fe2 Author: Romain Chantereay Date: Fri Jul 16 12:54:43 2004 +0000 Added Cygwin/Windows compilation support. Now: just: ./autogen --hots=i686-pc-mingw32 make make dll make install dll Of course you will need to install the dependencies libraries in /usr/local in order to compile. And next the DLL in Windows %SYSTEM% directory. Makefile.am | 21 +++ configure.ac | 211 +++++++++++++++++------------ lasso/lasso.c | 29 ++++ lasso/lasso.def | 411 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ lasso/lasso.rc | 102 ++++++++++++++ 5 files changed, 690 insertions(+), 84 deletions(-) commit 1524b02c923ed573eec0c879c40f17c2d23bf8a2 Author: Frederic Peters Date: Fri Jul 16 12:53:52 2004 +0000 removed rules that made "make dist" fails. docs/reference/Makefile.am | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) commit 150005bf3978815c6b7678b5482bde89a3191a40 Author: Nicolas Clapies Date: Fri Jul 16 12:49:29 2004 +0000 *** empty log message *** python/environs/py_user.c | 2 ++ python/lasso.py | 6 +++--- 2 files changed, 5 insertions(+), 3 deletions(-) commit 8ff0d93d6e96c61fddb30e6b8c42fa056ceec8c0 Author: Nicolas Clapies Date: Fri Jul 16 11:12:28 2004 +0000 *** empty log message *** lasso/id-ff/user.c | 6 ++++++ lasso/id-ff/user.h | 2 ++ python/environs/py_user.c | 16 ++++++++++++++++ python/environs/py_user.h | 1 + python/lassomod.c | 11 ++++++----- 5 files changed, 31 insertions(+), 5 deletions(-) commit aa4af2d1096e8f54edfc221863a02c4d6750e464 Author: Nicolas Clapies Date: Fri Jul 16 11:02:04 2004 +0000 *** empty log message *** lasso/Attic/protocols/identity.c | 4 +-- lasso/id-ff/federation_termination.h | 2 +- lasso/id-ff/logout.c | 51 +++++++++++++++++++++++++---- lasso/id-ff/logout.h | 2 ++ lasso/id-ff/server.c | 2 ++ lasso/id-ff/user.c | 23 +++++++++---- python/environs/py_user.c | 62 ++++++++++++++++++++++++++++++++++++ python/environs/py_user.h | 4 +++ python/lasso.py | 10 +++++- python/lassomod.c | 9 ++++-- 10 files changed, 149 insertions(+), 20 deletions(-) commit 93f6823e610c97f5bf54eff96a71318cfc20bd3a Author: Valery Febvre Date: Thu Jul 15 22:16:54 2004 +0000 Added date + time in debug messages lasso/xml/debug.c | 12 +++++++++++- lasso/xml/debug.h | 3 --- 2 files changed, 11 insertions(+), 4 deletions(-) commit 63f63b0e4d184de2c6b2ca2e197ad96116e75f66 Author: Valery Febvre Date: Thu Jul 15 20:22:12 2004 +0000 *** empty log message *** python/lasso.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit b9d858a45528929c3cc2379a2510840c6c537374 Author: Valery Febvre Date: Thu Jul 15 17:43:34 2004 +0000 Update python/examples/login.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit 58a10f4c019ed6c30dbe7e18e6265bf2281a8278 Author: Valery Febvre Date: Thu Jul 15 17:42:49 2004 +0000 Added method create_user in Login class + Update python/environs/py_login.c | 39 ++++++++++++++++++++++++++++----------- python/environs/py_login.h | 1 + python/lasso.py | 12 ++++++++---- python/lassomod.c | 1 + 4 files changed, 38 insertions(+), 15 deletions(-) commit e305d16e5a785040a343643cae9669e3c6601ada Author: Valery Febvre Date: Thu Jul 15 17:39:01 2004 +0000 Removed attribute remote_ProviderID of lasso_login_init_request() method Added new method lasso_login_create_user() lasso/id-ff/login.c | 53 ++++++++++++++++++++++++++++++++++------------------- lasso/id-ff/login.h | 6 ++++-- 2 files changed, 38 insertions(+), 21 deletions(-) commit 18f501bda8982b10972952d616bbc71e64dbfe92 Author: Nicolas Clapies Date: Thu Jul 15 17:26:21 2004 +0000 *** empty log message *** lasso/id-ff/server.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) commit 62827a83ab4436295468a98f18b2f70fc1ba4a0d Author: Nicolas Clapies Date: Thu Jul 15 17:24:36 2004 +0000 *** empty log message *** lasso/Attic/protocols/provider.c | 14 ++++++++++---- lasso/id-ff/server.c | 8 ++++---- 2 files changed, 14 insertions(+), 8 deletions(-) commit be8f4df50216c886ec60e618c567f7e5b15fb91b Author: Nicolas Clapies Date: Thu Jul 15 17:15:19 2004 +0000 *** empty log message *** lasso/id-ff/server.c | 39 ++++++++++++++++++++++++++++++++++++++- lasso/id-ff/server.h | 4 ++++ 2 files changed, 42 insertions(+), 1 deletion(-) commit edaee5d9bfcab7b933afc4945303558d4ff98336 Author: Valery Febvre Date: Thu Jul 15 16:10:36 2004 +0000 Changed some debug levels lasso/Attic/protocols/provider.c | 4 ++-- lasso/id-ff/login.c | 2 +- lasso/id-ff/profile_context.c | 4 ++-- lasso/id-ff/server.c | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) commit 3784f8f6326aac70ad1bf55ee1c6737294d3a448 Author: Valery Febvre Date: Thu Jul 15 16:00:49 2004 +0000 Removed attribute 'msg_relayState' in LassoLogin (moved in LassoProfileContext) lasso_login_process_response_status_and_assertion() static function was rewritten more error codes and debug messages Added a new static function : lasso_login_get_assertion_nameIdentifier() lasso/id-ff/login.c | 198 ++++++++++++++++++++++++++++++---------------------- lasso/id-ff/login.h | 2 - 2 files changed, 113 insertions(+), 87 deletions(-) commit dfd1df5b0e6b51df41bb65eff74ec170aa1deb3f Author: Valery Febvre Date: Thu Jul 15 15:44:09 2004 +0000 Added attribute 'msg_relayState' in LassoProfileContext (previously set in LassoLogin) lasso/id-ff/profile_context.c | 6 ++++-- lasso/id-ff/profile_context.h | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) commit a08d41ea2818ac38c9889c457208098af6362744 Author: Nicolas Clapies Date: Thu Jul 15 12:52:15 2004 +0000 *** empty log message *** lasso/id-ff/user.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 239e3b9b582b1efc95fa42f54dcc73c7e31b6975 Author: Valery Febvre Date: Thu Jul 15 12:39:56 2004 +0000 *** empty log message *** lasso/id-ff/server.h | 6 ------ lasso/id-ff/user.h | 7 ------- 2 files changed, 13 deletions(-) commit 9a9681e5497909214eefa1004e376bd72486d6cd Author: Valery Febvre Date: Thu Jul 15 12:35:35 2004 +0000 7 #define moved from .c to .h lasso/Attic/protocols/identity.c | 5 ----- lasso/Attic/protocols/identity.h | 5 +++++ lasso/Attic/protocols/provider.c | 4 ---- lasso/Attic/protocols/provider.h | 4 ++++ 4 files changed, 9 insertions(+), 9 deletions(-) commit bbd5b5a66554b06abe58e5f0c6b863972e585ed9 Author: Frederic Peters Date: Thu Jul 15 11:04:18 2004 +0000 please don't use // for comments, this is QA speaking :) lasso/Attic/protocols/provider.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit a10253a13b89113804e9c38ee3fa006af4777f37 Author: Valery Febvre Date: Thu Jul 15 10:52:43 2004 +0000 3 #define moved from .h to .c lasso/Attic/protocols/provider.c | 9 ++++++++- lasso/Attic/protocols/provider.h | 4 ---- 2 files changed, 8 insertions(+), 5 deletions(-) commit 818d789ef406bed55c356b2828f9250dd6765775 Author: Valery Febvre Date: Thu Jul 15 10:44:20 2004 +0000 6 #define moved from .h to .c lasso/id-ff/user.c | 7 +++++++ 1 file changed, 7 insertions(+) commit 2b209ad4bd58e1f9480a671bbc82e36e3950d6c1 Author: Frederic Peters Date: Thu Jul 15 10:42:38 2004 +0000 replaced C++ // comments with C /* */ comments before we fall on a pre-C99 compiler. lasso/Attic/protocols/logout_response.c | 6 +++--- lasso/Attic/protocols/name_identifier_mapping_response.c | 6 +++--- lasso/Attic/protocols/register_name_identifier_response.c | 6 +++--- lasso/id-ff/login.c | 10 +++++----- lasso/id-ff/server.c | 2 +- lasso/lasso.c | 6 +++--- lasso/xml/lib_authn_request.c | 6 +++--- lasso/xml/lib_authn_response.c | 2 +- lasso/xml/lib_federation_termination_notification.c | 2 +- lasso/xml/lib_logout_request.c | 2 +- lasso/xml/lib_name_identifier_mapping_request.c | 2 +- lasso/xml/lib_name_identifier_mapping_response.c | 2 +- lasso/xml/lib_register_name_identifier_request.c | 2 +- lasso/xml/lib_status_response.c | 2 +- lasso/xml/saml_advice.c | 2 +- lasso/xml/saml_authentication_statement.c | 2 +- lasso/xml/samlp_response.c | 2 +- lasso/xml/tools.c | 12 ++++++------ lasso/xml/xml.c | 6 +++--- python/wrap_objs.c | 2 +- 20 files changed, 41 insertions(+), 41 deletions(-) commit 4c6de60cca9603de5fd58655e0e8bc1a01c830ae Author: Valery Febvre Date: Thu Jul 15 10:42:05 2004 +0000 4 # define moved from .h to .c lasso/Attic/protocols/identity.c | 5 +++++ lasso/Attic/protocols/identity.h | 5 ----- 2 files changed, 5 insertions(+), 5 deletions(-) commit 1e78a8c1221243fcb2e6928c4b50a4208e0a7f8b Author: Valery Febvre Date: Thu Jul 15 10:35:55 2004 +0000 5 #define moved from .h to .c lasso/id-ff/server.c | 6 ++++++ 1 file changed, 6 insertions(+) commit 631811cf1db1ab632311ce97f60be6ed328bafbd Author: Emmanuel Raviart Date: Thu Jul 15 10:11:31 2004 +0000 Added init & shutdown functions to tutorial. python/doc/tutorial/sp-init.py | 3 +++ python/doc/tutorial/sp-login-process-authn-response.py | 3 +++ python/doc/tutorial/sp-login-send-authn-request.py | 3 +++ .../doc/tutorial/sp-logout-process-idp-initiated-redirect-request.py | 3 +++ python/doc/tutorial/sp-logout-process-idp-initiated-soap-request.py | 3 +++ python/doc/tutorial/sp-logout-process-response.py | 3 +++ python/doc/tutorial/sp-logout-send-request.py | 3 +++ 7 files changed, 21 insertions(+) commit 28d14a0b9520e2d7c489e1b064cf64bd09fbc86b Author: Valery Febvre Date: Wed Jul 14 21:19:28 2004 +0000 Nothing, code cleanup only lasso/xml/debug.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit 2cf32c4f0253a835f5879b0c46358f17c4de78a2 Author: Valery Febvre Date: Wed Jul 14 21:15:38 2004 +0000 New debug system with 4 levels (4 colors): DEBUG : yellow INFO : green WARNING : blue ERROR : red if Cflag -DLASSO_DEBUG is defined, DEBUG level message are ignored. lasso/xml/debug.c | 19 ++++++++++++++----- lasso/xml/debug.h | 15 +++++---------- 2 files changed, 19 insertions(+), 15 deletions(-) commit a5cc9aa23784a352ebc0d816626d71bd10354c45 Author: Valery Febvre Date: Wed Jul 14 19:10:12 2004 +0000 Added get for nameIdentifier & msg_relayState attributes (in login_getattr function) python/environs/py_login.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) commit ff182b1bf4342d51690e82f2bf0c5034339f7542 Author: Valery Febvre Date: Wed Jul 14 19:00:44 2004 +0000 *** empty log message *** lasso/id-ff/login.c | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) commit 85be85192ea7ce2e4a8836a2921802e505c4efff Author: Valery Febvre Date: Wed Jul 14 17:32:56 2004 +0000 *** empty log message *** lasso/id-ff/login.c | 4 +--- lasso/id-ff/login.h | 3 +-- python/environs/py_login.c | 9 ++++----- python/lasso.py | 4 ++-- 4 files changed, 8 insertions(+), 12 deletions(-) commit 37b91c1e7a48b5f693a8ecd1820900e247313ccd Author: Valery Febvre Date: Wed Jul 14 13:29:42 2004 +0000 *** empty log message *** python/environs/py_login.c | 91 ++++++++++++++++++++++++++++------------------ python/environs/py_login.h | 5 ++- python/lasso.py | 15 +++++--- python/lassomod.c | 5 ++- 4 files changed, 70 insertions(+), 46 deletions(-) commit 6dd81a97236a54cde4bf80b18d28b191b13f6127 Author: Valery Febvre Date: Wed Jul 14 12:53:11 2004 +0000 *** empty log message *** lasso/Attic/protocols/response.c | 27 +++++++ lasso/Attic/protocols/response.h | 7 +- lasso/id-ff/login.c | 148 +++++++++++++++++++++++---------------- lasso/id-ff/login.h | 14 ++-- 4 files changed, 128 insertions(+), 68 deletions(-) commit 03cc97448e304d121cfa8c7486a0932d891a40ab Author: Nicolas Clapies Date: Tue Jul 13 22:55:20 2004 +0000 add class User, update class Logout, update example logout.py python/examples/logout.py | 75 +++++++++++++++++++++-------------------------- python/lasso.py | 53 +++++++++++++++++++++++++++++---- 2 files changed, 80 insertions(+), 48 deletions(-) commit 042a39af7be0e0d0eb4f40b9d8665d1d84cb851c Author: Emmanuel Raviart Date: Tue Jul 13 21:46:08 2004 +0000 The API is globally frozen, but locally melting. python/doc/tutorial/sp-login-process-authn-response.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit a2162f9bd5d0533f9dba1dcc4569b8a409ced085 Author: Emmanuel Raviart Date: Tue Jul 13 19:14:12 2004 +0000 Added response_dump attribute. python/environs/py_login.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 2408d51eb8667330554c760f7d83c35389423b70 Author: Valery Febvre Date: Tue Jul 13 16:54:26 2004 +0000 *** empty log message *** lasso/id-ff/login.c | 12 ++++++++++-- lasso/xml/xml.c | 12 +++--------- 2 files changed, 13 insertions(+), 11 deletions(-) commit 3232b13ee1e96d85be5e4ed786bda16ba722e503 Author: Nicolas Clapies Date: Tue Jul 13 16:53:56 2004 +0000 add signature support for soap method lasso/id-ff/logout.c | 7 +++++++ 1 file changed, 7 insertions(+) commit fbd6637da41d92a9f8f28d6937be903b18cd63bc Author: Emmanuel Raviart Date: Tue Jul 13 16:43:53 2004 +0000 Added missing s. python/environs/py_login.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 7ba38ce21ddb70639cab6d667ecc4a163b77e02b Author: Emmanuel Raviart Date: Tue Jul 13 16:43:20 2004 +0000 Use constant instead of integer. python/examples/login.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 47711775bc622ad6ae018e16d66878bb3eee4496 Author: Nicolas Clapies Date: Tue Jul 13 13:57:45 2004 +0000 *** empty log message *** lasso/Attic/protocols/provider.c | 18 ++ lasso/Attic/protocols/provider.h | 6 + lasso/id-ff/Makefile.am | 2 + lasso/id-ff/name_identifier_mapping.c | 349 ++++++++++++++++++++++++++++++++++ lasso/id-ff/name_identifier_mapping.h | 84 ++++++++ 5 files changed, 459 insertions(+) commit d23cd6cc41366242850bfb35e8fc23c8f572719a Author: Nicolas Clapies Date: Tue Jul 13 13:31:45 2004 +0000 *** empty log message *** lasso/id-ff/register_name_identifier.c | 81 ++++++++++++++++------------------ 1 file changed, 39 insertions(+), 42 deletions(-) commit a420ca698aa5a83ea5de5420747d2b73655ca8d3 Author: Nicolas Clapies Date: Tue Jul 13 12:40:16 2004 +0000 *** empty log message *** lasso/id-ff/federation_termination.c | 39 +++++++++++++++--------------------- lasso/id-ff/logout.c | 2 +- 2 files changed, 17 insertions(+), 24 deletions(-) commit 3f4270478f52f9bbbfb7a7eaba9a2639bf4241de Author: Valery Febvre Date: Tue Jul 13 12:36:45 2004 +0000 *** empty log message *** lasso/id-ff/login.c | 21 ++++++++++++++++++--- lasso/xml/xml.c | 21 ++++++++++++++++----- 2 files changed, 34 insertions(+), 8 deletions(-) commit 862bd0bb7732ed39217b8787ce79efb46a8a17e5 Author: Nicolas Clapies Date: Tue Jul 13 12:29:20 2004 +0000 *** empty log message *** lasso/id-ff/federation_termination.c | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) commit a20f87b939de7e932aa9ef01b951040cdd4fb916 Author: Nicolas Clapies Date: Tue Jul 13 12:24:59 2004 +0000 *** empty log message *** lasso/id-ff/federation_termination.c | 52 ++++++++++++++++++------------------ lasso/id-ff/federation_termination.h | 17 +++++++----- 2 files changed, 36 insertions(+), 33 deletions(-) commit 8209c0ec8e904ce97e1991405c1097479e72f230 Author: Emmanuel Raviart Date: Tue Jul 13 12:20:40 2004 +0000 Profile instead of porfile. lasso/id-ff/login.c | 14 +++++++------- lasso/id-ff/login.h | 4 ++-- python/lasso.py | 4 ++-- 3 files changed, 11 insertions(+), 11 deletions(-) commit dc1e2e5a6efb8f0e818eccc8867828eb5e04adc9 Author: Valery Febvre Date: Tue Jul 13 12:11:51 2004 +0000 *** empty log message *** python/examples/login.py | 3 --- python/lasso.py | 3 +++ 2 files changed, 3 insertions(+), 3 deletions(-) commit 603f66df4bd1d6ed0dc4a0f1a525415e7f6d1d9e Author: Emmanuel Raviart Date: Tue Jul 13 12:10:44 2004 +0000 Yet another very important correction. python/examples/login.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 4987632942d65c26bfc7696924222beeb2c07bdb Author: Emmanuel Raviart Date: Tue Jul 13 12:03:35 2004 +0000 Corrected typo. python/examples/login.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 71459bc129f9031c7f4e878e7f53343f20a52c3f Author: Emmanuel Raviart Date: Tue Jul 13 11:50:44 2004 +0000 Document a trap in which I was caught. python/doc/tutorial/sp-init.py | 1 + 1 file changed, 1 insertion(+) commit 561edbaad8bcdd227160d49b410dde22a5b19f0f Author: Emmanuel Raviart Date: Tue Jul 13 11:33:13 2004 +0000 Use RSA keys instead of DSA. python/doc/tutorial/sp-init.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 7d2c16cb3f7cf190383dd5dd4be8d6b13301dba4 Author: Emmanuel Raviart Date: Tue Jul 13 11:20:04 2004 +0000 Corrected constant name. python/doc/tutorial/sp-login-send-authn-request.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit d54bd3c24a5b7f6363256e4b5bc298155bd5bcf0 Author: Nicolas Clapies Date: Tue Jul 13 11:10:32 2004 +0000 *** empty log message *** lasso/Attic/protocols/identity.c | 8 ++++---- lasso/Attic/protocols/identity.h | 9 +++++++-- lasso/Attic/protocols/logout_request.c | 2 +- lasso/Attic/protocols/logout_response.c | 2 +- lasso/Attic/protocols/logout_response.h | 1 + lasso/Attic/protocols/name_identifier_mapping_response.h | 1 + lasso/Attic/protocols/register_name_identifier_response.h | 1 + lasso/id-ff/server.c | 6 +++--- 8 files changed, 19 insertions(+), 11 deletions(-) commit 3f79376da7ef383c7a0cba1a4ebd7791ead299a0 Author: Valery Febvre Date: Tue Jul 13 10:56:17 2004 +0000 *** empty log message *** lasso/Attic/protocols/provider.c | 1 - lasso/id-ff/profile_context.c | 1 - lasso/id-ff/server.c | 8 +++++++- lasso/xml/xml.c | 13 +++++++++---- 4 files changed, 16 insertions(+), 7 deletions(-) commit eb4def6b08edcfe68b338cdec823c131fea171d4 Author: Valery Febvre Date: Tue Jul 13 10:36:32 2004 +0000 *** empty log message *** lasso/Attic/protocols/authn_response.c | 1 - lasso/Attic/protocols/provider.c | 12 ++++++++++-- lasso/id-ff/profile_context.c | 4 +++- lasso/id-ff/server.c | 19 +++++++++++++++---- python/environs/py_server.c | 6 +++--- python/examples/login.py | 2 +- 6 files changed, 32 insertions(+), 12 deletions(-) commit a959a65fd5467fbdb9123d52943f94c264237fdc Author: Nicolas Clapies Date: Tue Jul 13 10:33:01 2004 +0000 *** empty log message *** lasso/id-ff/logout.c | 9 ++++++--- lasso/id-ff/logout.h | 6 +++--- 2 files changed, 9 insertions(+), 6 deletions(-) commit 6759823766a3fc9a5e84ec3f2884fcb325177f6c Author: Valery Febvre Date: Tue Jul 13 10:15:03 2004 +0000 *** empty log message *** .../protocols/py_single_sign_on_and_federation.c | 433 --------------------- .../protocols/py_single_sign_on_and_federation.h | 83 ---- 2 files changed, 516 deletions(-) commit b71373edaedccce196e405d954b47aa16924b39c Author: Emmanuel Raviart Date: Tue Jul 13 09:51:13 2004 +0000 Renamed attribut to attribute. lasso/Attic/protocols/authn_request.c | 2 +- .../federation_termination_notification.c | 2 +- lasso/Attic/protocols/logout_response.c | 2 +- .../protocols/name_identifier_mapping_request.c | 2 +- .../protocols/name_identifier_mapping_response.c | 2 +- .../protocols/register_name_identifier_request.c | 2 +- .../protocols/register_name_identifier_response.c | 2 +- lasso/Attic/protocols/request.c | 2 +- lasso/Attic/protocols/response.c | 2 +- lasso/id-ff/login.c | 2 +- lasso/xml/lib_authn_request.c | 4 +-- lasso/xml/saml_assertion.c | 20 +++++++-------- lasso/xml/samlp_request_abstract.c | 4 +-- lasso/xml/samlp_response_abstract.c | 4 +-- lasso/xml/xml.c | 30 +++++++++++----------- 15 files changed, 41 insertions(+), 41 deletions(-) commit 62accd694b4d0586549fff6a6938a4234dc43799 Author: Valery Febvre Date: Tue Jul 13 03:53:40 2004 +0000 *** empty log message *** lasso/id-ff/login.c | 1 - lasso/id-ff/logout.c | 12 ++++++------ lasso/id-ff/logout.h | 28 ++++++++++++++-------------- python/environs/py_logout.c | 16 ++++++++-------- python/environs/py_logout.h | 4 ++-- python/lasso.py | 9 +++++---- python/lassomod.c | 12 ++++++------ 7 files changed, 41 insertions(+), 41 deletions(-) commit 07cabd35b61615d1f2ac1b09e7a79988f8722bca Author: Valery Febvre Date: Tue Jul 13 03:37:35 2004 +0000 *** empty log message *** lasso/id-ff/federation_termination.c | 4 ++-- lasso/id-ff/login.c | 8 ++++---- lasso/id-ff/logout.c | 4 ++-- lasso/id-ff/profile_context.c | 34 +++++++++++++--------------------- lasso/id-ff/profile_context.h | 14 +++++++------- lasso/id-ff/register_name_identifier.c | 4 ++-- 6 files changed, 30 insertions(+), 38 deletions(-) commit 0d240f6c5c1a8cf8657400807bae545186a7efe0 Author: Valery Febvre Date: Tue Jul 13 00:19:21 2004 +0000 *** empty log message *** lasso/id-ff/login.c | 30 ++++++++++++++++++++++++++++++ lasso/id-ff/login.h | 4 +++- lasso/id-ff/profile_context.c | 9 +++++++-- lasso/id-ff/server.c | 1 + python/environs/py_server.c | 16 ++++++++++++++++ python/environs/py_server.h | 1 + python/examples/login.py | 2 +- python/lasso.py | 3 +++ python/lassomod.c | 1 + 9 files changed, 63 insertions(+), 4 deletions(-) commit 07002aa3c5f58583ad917f66e35cb0353b9c7cde Author: Nicolas Clapies Date: Tue Jul 13 00:04:57 2004 +0000 *** empty log message *** lasso/id-ff/register_name_identifier.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 8a0ce280523ef5729fcede4143ef7b5df4fbe7be Author: Nicolas Clapies Date: Mon Jul 12 23:57:18 2004 +0000 *** empty log message *** lasso/id-ff/server.c | 18 ++++++++++++++++-- lasso/id-ff/server.h | 2 +- 2 files changed, 17 insertions(+), 3 deletions(-) commit 54eaba7b0642b4419519fde742b8bb5c2a4de47e Author: Nicolas Clapies Date: Mon Jul 12 23:37:50 2004 +0000 *** empty log message *** lasso/id-ff/user.c | 35 +++++++++++++++++++++++++++++++---- lasso/id-ff/user.h | 6 +++--- 2 files changed, 34 insertions(+), 7 deletions(-) commit e57120e80b697d9f3177952c009ebf404692ca3e Author: Nicolas Clapies Date: Mon Jul 12 23:27:49 2004 +0000 *** empty log message *** lasso/id-ff/logout.c | 47 ++++++++++++++++++++++++++++++++++------------- 1 file changed, 34 insertions(+), 13 deletions(-) commit 5eaf0f268085559dcfe3fd08ca3b16ddf3a4ba33 Author: Valery Febvre Date: Mon Jul 12 23:25:42 2004 +0000 *** empty log message *** lasso/id-ff/profile_context.c | 65 +++++++++++++++++++++++++++++++++++++++++-- lasso/id-ff/profile_context.h | 2 ++ 2 files changed, 65 insertions(+), 2 deletions(-) commit 72b015f128f088ded99ecbb516b6c5e7576b19d7 Author: Valery Febvre Date: Mon Jul 12 22:35:50 2004 +0000 *** empty log message *** lasso/id-ff/login.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) commit 1431f295228ebe60ddf1a8dd4f3354e6bc7e8a02 Author: Valery Febvre Date: Mon Jul 12 22:14:08 2004 +0000 *** empty log message *** lasso/id-ff/server.c | 5 ++++- lasso/xml/xml.c | 7 +++++-- 2 files changed, 9 insertions(+), 3 deletions(-) commit 94844c3a81aea4124c45f8461bf9405c626d3d15 Author: Valery Febvre Date: Mon Jul 12 22:00:03 2004 +0000 *** empty log message *** lasso/Attic/protocols/provider.c | 30 ++++++++++++++-------------- lasso/Attic/protocols/provider.h | 20 ++++++++++++------- lasso/id-ff/login.c | 6 +++--- lasso/id-ff/server.c | 43 ++++++++++++++++++++++++---------------- lasso/id-ff/server.h | 6 ++++-- 5 files changed, 61 insertions(+), 44 deletions(-) commit 41fc550d846a0e4f655e6a66e497f7a4a289669b Author: Nicolas Clapies Date: Mon Jul 12 20:10:14 2004 +0000 *** empty log message *** lasso/id-ff/federation_termination.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 42f4b1adf8df058155f6d0f13deca496daabf779 Author: Nicolas Clapies Date: Mon Jul 12 18:58:56 2004 +0000 lasso/environs/federation_termination.c lasso/id-ff/federation_termination.h | 1 - lasso/id-ff/register_name_identifier.c | 74 ++++++++++++++++++++++++++-------- lasso/id-ff/register_name_identifier.h | 1 - 3 files changed, 57 insertions(+), 19 deletions(-) commit 2066962a26c43fdff9080ef4bf3e715a332a2198 Author: Nicolas Clapies Date: Mon Jul 12 18:56:31 2004 +0000 *** empty log message *** lasso/Attic/protocols/provider.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit eabe93ffe505d3e0c51dd3e270ea30d6305ecf29 Author: Emmanuel Raviart Date: Mon Jul 12 17:25:29 2004 +0000 Corrected SP init for C & Python. python/doc/tutorial/sp-init.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) commit 5c5c662ed57e62dfb17757537a369ee6ddfa2f91 Author: Nicolas Clapies Date: Mon Jul 12 17:07:54 2004 +0000 fix: dump of user environ lasso/Attic/protocols/identity.h | 2 +- lasso/id-ff/user.c | 122 +++++++++++++++++---------------------- 2 files changed, 55 insertions(+), 69 deletions(-) commit b8f19216bad4e995e06a46803b715bc4d88ab55d Author: Nicolas Clapies Date: Mon Jul 12 16:28:57 2004 +0000 *** empty log message *** lasso/id-ff/server.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 5f6df01199dccd3990bc4ea9871ab88d4eb7717e Author: Nicolas Clapies Date: Mon Jul 12 15:52:40 2004 +0000 *** empty log message *** lasso/Attic/protocols/provider.c | 4 +-- lasso/Attic/protocols/provider.h | 2 +- lasso/id-ff/server.c | 57 ++++++++++++++++++---------------------- lasso/id-ff/server.h | 4 +-- 4 files changed, 31 insertions(+), 36 deletions(-) commit ee393bb79ff6e369ee9e57c4f0f15c92eace86ee Author: Nicolas Clapies Date: Mon Jul 12 15:32:13 2004 +0000 *** empty log message *** lasso/id-ff/server.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) commit a4deaf0a24c1240f42899c1015e8d9a3526d4646 Author: Nicolas Clapies Date: Mon Jul 12 15:18:58 2004 +0000 *** empty log message *** lasso/id-ff/logout.c | 1 + lasso/id-ff/logout.h | 1 - lasso/id-ff/profile_context.h | 4 +++- lasso/id-ff/server.c | 44 ++++++++++++++++++++++++------------------- lasso/id-ff/server.h | 2 ++ 5 files changed, 31 insertions(+), 21 deletions(-) commit 738e287e1e0cc1871f9abb5a4dd083a99088f7f4 Author: Nicolas Clapies Date: Mon Jul 12 15:11:42 2004 +0000 *** empty log message *** lasso/id-ff/server.c | 116 ++++++++++++++++++++++++++++++++------------------- 1 file changed, 73 insertions(+), 43 deletions(-) commit fa538e86eb09a886e059733fe442490a36c0dcd6 Author: Valery Febvre Date: Mon Jul 12 14:51:23 2004 +0000 *** empty log message *** lasso/Attic/protocols/provider.c | 1 + 1 file changed, 1 insertion(+) commit e17b96d5c3e1a77587dd12aea23e68db41a1acd9 Author: Nicolas Clapies Date: Mon Jul 12 14:33:57 2004 +0000 fix code in new logout lasso/id-ff/logout.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) commit 5d846a1e332ff41eec7e6fb371fd8c75de51064e Author: Valery Febvre Date: Mon Jul 12 14:24:04 2004 +0000 *** empty log message *** lasso/Attic/protocols/provider.c | 44 ++++++++++++++++++++++++++++++++++++++-- lasso/Attic/protocols/provider.h | 2 ++ lasso/xml/xml.c | 2 -- 3 files changed, 44 insertions(+), 4 deletions(-) commit d6a513e9e95c75007b343015347e4b7de1007512 Author: Valery Febvre Date: Mon Jul 12 13:59:22 2004 +0000 *** empty log message *** lasso/id-ff/login.c | 16 ++++++++-------- lasso/id-ff/login.h | 10 +++++----- lasso/id-ff/profile_context.c | 4 ++-- python/environs/py_login.c | 16 ++++++++-------- python/environs/py_login.h | 4 ++-- python/environs/py_server.c | 32 ++++++++++++++++++++++++++++++++ python/environs/py_server.h | 2 ++ python/examples/login.py | 5 ++++- python/lasso.py | 16 ++++++++++++---- python/lassomod.c | 10 ++++++---- 10 files changed, 81 insertions(+), 34 deletions(-) commit 1703b150dd8a35e23eee4e2a3df5f2e78aca25b0 Author: Nicolas Clapies Date: Mon Jul 12 13:40:51 2004 +0000 *** empty log message *** lasso/Attic/protocols/provider.c | 6 +++--- lasso/Attic/protocols/provider.h | 4 ++-- lasso/id-ff/server.c | 9 ++++++++- 3 files changed, 13 insertions(+), 6 deletions(-) commit 6aafa90361f99d5149e582454f91295b4f40b72c Author: Valery Febvre Date: Mon Jul 12 12:34:56 2004 +0000 *** empty log message *** lasso/id-ff/login.c | 20 ++++++++++---------- lasso/id-ff/profile_context.c | 13 +++++++------ lasso/id-ff/profile_context.h | 2 +- lasso/xml/xml.c | 2 +- python/examples/login.py | 14 +++++++------- python/lasso.py | 26 +++++++++++++------------- 6 files changed, 39 insertions(+), 38 deletions(-) commit 5617d58e474199f1fef484f34179189070d9f08a Author: Nicolas Clapies Date: Mon Jul 12 11:57:35 2004 +0000 *** empty log message *** lasso/id-ff/register_name_identifier.c | 52 ++++++++++++++++++++++++---------- 1 file changed, 37 insertions(+), 15 deletions(-) commit 2e52c866c6416fe4a4c5c25bf8e12ce21f29e5e8 Author: Nicolas Clapies Date: Mon Jul 12 10:29:15 2004 +0000 fix : change the return type in g_return_val_if_fail lasso/id-ff/logout.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 58d6943042ccbf3ecb036fae0546235db3391745 Author: Nicolas Clapies Date: Mon Jul 12 10:25:47 2004 +0000 fix : replace xmlChar with gchar type in method prototypes lasso/Attic/protocols/provider.c | 36 ++++++++++++++++++------------------ lasso/Attic/protocols/provider.h | 28 ++++++++++++++-------------- 2 files changed, 32 insertions(+), 32 deletions(-) commit f5832572a678e80564472501467708f4e2db7547 Author: Nicolas Clapies Date: Mon Jul 12 10:22:31 2004 +0000 fix : replace xmlChar with gchar type lasso/id-ff/server.c | 10 +++++----- lasso/id-ff/server.h | 22 +++++++++++----------- 2 files changed, 16 insertions(+), 16 deletions(-) commit 7175b7c6937d9f5a4e6e94094f8e0ffbb1e0054c Author: Nicolas Clapies Date: Mon Jul 12 10:03:38 2004 +0000 register name identifier profile lasso/Attic/protocols/provider.c | 12 ++ lasso/Attic/protocols/provider.h | 42 +++-- lasso/id-ff/Makefile.am | 2 + lasso/id-ff/register_name_identifier.c | 291 +++++++++++++++++++++++++++++++++ lasso/id-ff/register_name_identifier.h | 85 ++++++++++ 5 files changed, 415 insertions(+), 17 deletions(-) commit f8b363262daaa664446c382b88b4cdb1de2ac08c Author: Valery Febvre Date: Sun Jul 11 22:29:40 2004 +0000 *** empty log message *** python/environs/py_login.c | 2 +- python/lasso.py | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) commit c1ffd41e7599ac1502c29d0a04a2b1ca289d7f66 Author: Valery Febvre Date: Sun Jul 11 22:13:42 2004 +0000 *** empty log message *** lasso/Attic/protocols/authn_request.c | 290 +++++++++++++++++---------------- lasso/Attic/protocols/authn_request.h | 4 +- lasso/Attic/protocols/authn_response.c | 7 +- lasso/id-ff/login.c | 3 +- python/environs/py_login.c | 57 +++++++ python/environs/py_login.h | 3 + python/lasso.py | 3 + python/lassomod.c | 3 + 8 files changed, 224 insertions(+), 146 deletions(-) commit 9f85a16d977b9724c2ef45e819a03ed4c00d6cdc Author: Nicolas Clapies Date: Sun Jul 11 22:02:38 2004 +0000 federation termination environ lasso/Attic/protocols/provider.c | 12 ++ lasso/Attic/protocols/provider.h | 4 + lasso/id-ff/Makefile.am | 2 + lasso/id-ff/federation_termination.c | 259 +++++++++++++++++++++++++++++++++++ lasso/id-ff/federation_termination.h | 78 +++++++++++ 5 files changed, 355 insertions(+) commit 55585a8b25f26877b403b351745c1bade2d56612 Author: Nicolas Clapies Date: Sun Jul 11 21:10:31 2004 +0000 fix setting of status code value lasso/id-ff/logout.c | 9 +++++++++ 1 file changed, 9 insertions(+) commit 087d734a019250fa8583de3bd7799af4a7d83408 Author: Nicolas Clapies Date: Sun Jul 11 14:47:20 2004 +0000 *** empty log message *** lasso/id-ff/logout.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) commit 064a0f1543fdbfed7783cbf78383f67d60a5a71e Author: Nicolas Clapies Date: Sun Jul 11 14:44:51 2004 +0000 fix lasso/id-ff/logout.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) commit dcf7a0ddb5f93ebb845d6a584b322f889b180b74 Author: Nicolas Clapies Date: Sun Jul 11 13:46:50 2004 +0000 fix for logout request export to query lasso/id-ff/logout.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) commit 4891bc515b9cfe22a8397155ff1b67a23ec86809 Author: Nicolas Clapies Date: Sun Jul 11 13:42:52 2004 +0000 *** empty log message *** lasso/id-ff/logout.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit e3934e6f4a1f19dc89ccca88a54e0c0f0eff6a32 Author: Nicolas Clapies Date: Sun Jul 11 13:41:31 2004 +0000 *** empty log message *** lasso/id-ff/logout.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 4287f3b6fd9bd0464eb75edef4508d39b6b02e0e Author: Nicolas Clapies Date: Sun Jul 11 11:10:35 2004 +0000 *** empty log message *** lasso/id-ff/logout.c | 49 ++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 44 insertions(+), 5 deletions(-) commit e70a8ec3dbacd5c79ed4d72af38b2b5e05af5997 Author: Nicolas Clapies Date: Sun Jul 11 11:10:14 2004 +0000 fix bugs in new_from_dump lasso/id-ff/user.c | 39 +++++++++++++++++++++++++++++++-------- 1 file changed, 31 insertions(+), 8 deletions(-) commit 210693c46dc8de2faf0e26c04a45e64a1e0b26bb Author: Valery Febvre Date: Sun Jul 11 03:09:12 2004 +0000 *** empty log message *** python/environs/py_login.c | 22 +++++++++++++++++++++- python/environs/py_login.h | 1 + python/examples/login.py | 16 ++++++++++++++++ python/lasso.py | 3 +++ python/lassomod.c | 1 + 5 files changed, 42 insertions(+), 1 deletion(-) commit e1580d4b512b7fdbaed988e50b8069b66ff688d5 Author: Valery Febvre Date: Sun Jul 11 00:18:26 2004 +0000 *** empty log message *** python/environs/py_login.c | 45 +++++++++++++++++++++++++++++++++++++++++++-- python/environs/py_login.h | 2 ++ python/examples/login.py | 20 ++++++++++++++++++++ python/lasso.py | 7 +++++++ python/lassomod.c | 2 ++ 5 files changed, 74 insertions(+), 2 deletions(-) commit 3677573bee663ff680489855724dcdc8360e6860 Author: Valery Febvre Date: Sat Jul 10 23:01:05 2004 +0000 *** empty log message *** lasso/id-ff/login.c | 2 +- python/environs/py_login.c | 44 +++++++++++++++++++++++++++++++++++++++++--- python/environs/py_login.h | 2 ++ python/examples/login.py | 36 ++++++++++++++++++++++++++++++++++-- python/lasso.py | 12 ++++++++++++ python/lassomod.c | 14 ++++++++------ 6 files changed, 98 insertions(+), 12 deletions(-) commit 1ed5aafdc04e029d9a902fd8b6df2220820c519f Author: Valery Febvre Date: Sat Jul 10 01:33:56 2004 +0000 *** empty log message *** lasso/id-ff/login.c | 9 ++++++ lasso/id-ff/profile_context.c | 2 ++ lasso/id-ff/profile_context.h | 11 ++++++++ python/environs/py_login.c | 66 +++++++++++++++++++++++++++++++++++++++++++ python/environs/py_login.h | 3 ++ python/examples/login.py | 32 +++++++++++++++++++++ python/lasso.py | 58 +++++++++++++++++++++++++++++++++++++ python/lasso_strings.py | 22 +++++++++++++-- python/lassomod.c | 8 ++++-- 9 files changed, 207 insertions(+), 4 deletions(-) commit 1c41403396d1b13e18664da38a7615bffd8624a1 Author: Valery Febvre Date: Fri Jul 9 22:35:26 2004 +0000 *** empty log message *** python/lasso.py | 55 ++++++++++++------------------------------------------- 1 file changed, 12 insertions(+), 43 deletions(-) commit 43c7e91e2576d48b5446aee9ca6a3ff9ed4bd551 Author: Valery Febvre Date: Fri Jul 9 17:13:24 2004 +0000 *** empty log message *** lasso/id-ff/login.c | 65 ++++++++++++---- lasso/id-ff/login.h | 13 +++- lasso/id-ff/profile_context.c | 23 ++++-- lasso/id-ff/profile_context.h | 1 + python/environs/py_logout.c | 21 ++--- python/environs/py_logout.h | 7 +- python/lassomod.c | 10 +-- .../elements/py_authentication_statement.c | 34 ++++---- python/protocols/py_authn_response.c | 91 +--------------------- python/protocols/py_authn_response.h | 7 -- python/setup.py | 1 + 11 files changed, 113 insertions(+), 160 deletions(-) commit ee6e79e10b4285ac15a18794291eb8079065579a Author: Nicolas Clapies Date: Fri Jul 9 17:05:09 2004 +0000 *** empty log message *** lasso/id-ff/logout.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) commit 384174aee86cd64a462d2641df3d962991291f1d Author: Nicolas Clapies Date: Fri Jul 9 16:38:49 2004 +0000 *** empty log message *** lasso/id-ff/Makefile.am | 2 ++ 1 file changed, 2 insertions(+) commit 142d1d2acb69e53fa54414215ebf74d961981d1b Author: Nicolas Clapies Date: Fri Jul 9 16:30:49 2004 +0000 add python class Logout python/lasso.py | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) commit 93cf3c5ea74d5692713bade6375b7206877527aa Author: Valery Febvre Date: Fri Jul 9 16:25:08 2004 +0000 *** empty log message *** lasso/Attic/protocols/authn_response.c | 307 ++++----------------------------- lasso/Attic/protocols/authn_response.h | 19 +- lasso/xml/xml.h | 7 + 3 files changed, 43 insertions(+), 290 deletions(-) commit 512ea607b475fdf0097ee3d7b68e78530ca5d657 Author: Nicolas Clapies Date: Fri Jul 9 16:20:35 2004 +0000 *** empty log message *** python/lassomod.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) commit 9fa431a8e7e98db55a2bd764223c1cddb18a46d2 Author: Nicolas Clapies Date: Fri Jul 9 16:18:29 2004 +0000 add entry for logout binding python/lassomod.c | 1 + 1 file changed, 1 insertion(+) commit 9b0c1210eb3bd41e0873e8b01ee599b5f6d4f798 Author: Nicolas Clapies Date: Fri Jul 9 16:17:35 2004 +0000 add entry for logou binding python/lassomod.c | 9 +++++++++ 1 file changed, 9 insertions(+) commit 425c710ee7d7cfbbb496909b24ce038c2f6768b8 Author: Valery Febvre Date: Fri Jul 9 16:07:36 2004 +0000 *** empty log message *** python/environs/py_login.c | 112 +++++++++++++++++++++++++++++++++++ python/environs/py_login.h | 46 ++++++++++++++ python/environs/py_user.c | 61 +++++++++++++++++++ python/environs/py_user.h | 42 +++++++++++++ python/lasso.py | 27 ++++++++- python/lassomod.c | 13 +++- python/protocols/py_authn_response.c | 26 -------- python/protocols/py_authn_response.h | 2 +- python/setup.py | 2 + python/xml/py_xml.c | 4 +- 10 files changed, 303 insertions(+), 32 deletions(-) commit 32b13e03dce0109b3445fda6b8d895a053353b6b Author: Nicolas Clapies Date: Fri Jul 9 15:49:37 2004 +0000 update of user dump methods lasso/Attic/protocols/identity.c | 48 +++++++++---- lasso/Attic/protocols/identity.h | 8 +++ lasso/id-ff/user.c | 142 +++++++++++++++++++++++++++++---------- lasso/id-ff/user.h | 27 +++++--- 4 files changed, 167 insertions(+), 58 deletions(-) commit 02280779752e70cb21e59f0b1606b0653c2b036b Author: Nicolas Clapies Date: Fri Jul 9 15:38:31 2004 +0000 initial version : binding for logout python/environs/py_logout.c | 143 ++++++++++++++++++++++++++++++++++++++++++++ python/environs/py_logout.h | 46 ++++++++++++++ 2 files changed, 189 insertions(+) commit c4aecc092871e9be240419f9ce93b9543786da44 Author: Nicolas Clapies Date: Fri Jul 9 00:33:04 2004 +0000 *** empty log message *** lasso/Attic/protocols/logout_response.c | 12 +++++ lasso/id-ff/logout.c | 78 +++++++++++++++++++++------------ lasso/id-ff/logout.h | 15 +++++-- lasso/id-ff/server.c | 23 ++++++---- 4 files changed, 89 insertions(+), 39 deletions(-) commit 5429b78b4a64a6a9449cf6b6ed25a7fe8e62967b Author: Valery Febvre Date: Fri Jul 9 00:06:34 2004 +0000 *** empty log message *** python/environs/py_server.c | 3 ++- python/lassomod.c | 7 +++++++ python/setup.py | 9 +++++---- 3 files changed, 14 insertions(+), 5 deletions(-) commit 628f94861cb2601988ea3495afed972a2b3830cf Author: Valery Febvre Date: Fri Jul 9 00:02:16 2004 +0000 Initial commit python/environs/py_server.c | 83 +++++++++++++++++++++++++++++++++++++++++++++ python/environs/py_server.h | 42 +++++++++++++++++++++++ 2 files changed, 125 insertions(+) commit a1d16b708c749d039bb7c620899f716002781228 Author: Valery Febvre Date: Thu Jul 8 17:01:02 2004 +0000 *** empty log message *** lasso/xml/debug.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 58440c666dfc38b41f32f08f778b05ca1ad4291a Author: Nicolas Clapies Date: Thu Jul 8 16:18:56 2004 +0000 *** empty log message *** lasso/Attic/protocols/provider.h | 4 +++ lasso/id-ff/server.c | 22 ++++++++-------- lasso/id-ff/server.h | 5 ++++ lasso/id-ff/user.c | 55 ++++++++++++++++++++++++++++++---------- lasso/id-ff/user.h | 11 ++++++-- 5 files changed, 71 insertions(+), 26 deletions(-) commit 5b88b7ad847c0f2710561b0a5ee6a92140115afb Author: Valery Febvre Date: Thu Jul 8 13:45:42 2004 +0000 *** empty log message *** lasso/id-ff/login.c | 1 + lasso/id-ff/login.h | 9 +++++---- lasso/id-ff/logout.h | 3 ++- lasso/id-ff/profile_context.h | 4 +++- lasso/id-ff/user.h | 1 - lasso/lasso.c | 6 +++--- lasso/lasso.h | 9 ++------- lasso/xml/lib_authentication_statement.h | 1 - lasso/xml/lib_subject.h | 1 - lasso/xml/strings.c | 4 +--- lasso/xml/strings.h | 2 +- 11 files changed, 18 insertions(+), 23 deletions(-) commit 84538d7d4ad7e55391c8de289392a09ed7f1e293 Author: Nicolas Clapies Date: Thu Jul 8 13:32:27 2004 +0000 *** empty log message *** lasso/Attic/protocols/provider.c | 18 ++++++++++++++++-- lasso/Attic/protocols/provider.h | 6 ++++++ lasso/id-ff/server.c | 24 +++++++++++++++--------- lasso/id-ff/server.h | 4 +++- 4 files changed, 40 insertions(+), 12 deletions(-) commit 40aee726ee094a8ea9cf3cac4d050add79ffa2d3 Author: Nicolas Clapies Date: Thu Jul 8 13:15:50 2004 +0000 logout support in makefile.am lasso/id-ff/logout.c | 55 +++++++++++++++++++++++++--------------------------- lasso/id-ff/logout.h | 18 ++++++++++------- 2 files changed, 37 insertions(+), 36 deletions(-) commit 6910b8e1f8c881af14156d34fee9ad49b394cc61 Author: Nicolas Clapies Date: Thu Jul 8 13:01:02 2004 +0000 *** empty log message *** lasso/Attic/protocols/provider.c | 35 +++++++++++---- lasso/Attic/protocols/provider.h | 8 ++-- lasso/id-ff/server.c | 95 ++++++++++++++++++++++++++++++---------- lasso/id-ff/server.h | 22 +++++----- lasso/id-ff/user.c | 41 ++++++----------- lasso/id-ff/user.h | 1 - 6 files changed, 127 insertions(+), 75 deletions(-) commit fccf8947cb654e9180a3ea27c60a4339ed4c3465 Author: Valery Febvre Date: Thu Jul 8 01:33:39 2004 +0000 *** empty log message *** lasso/id-ff/login.c | 153 +++++++++++++++++++++++++----------------- lasso/id-ff/login.h | 20 +++--- lasso/id-ff/profile_context.c | 39 +++++++++++ lasso/id-ff/profile_context.h | 6 +- 4 files changed, 146 insertions(+), 72 deletions(-) commit 6e23ae12ee3514890af320b9977e5f2c4366c465 Author: Valery Febvre Date: Wed Jul 7 23:22:43 2004 +0000 *** empty log message *** lasso/id-ff/login.c | 38 +++++++++++++++++++------------------- lasso/id-ff/login.h | 42 ++++++++++++++++++++++++++++++++++++------ 2 files changed, 55 insertions(+), 25 deletions(-) commit 0449d9781311a93316ab0b9d8bfaaed6e359ebda Author: Valery Febvre Date: Wed Jul 7 15:21:31 2004 +0000 *** empty log message *** configure.ac | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit db0dede4778b240cdabdf941059d81b2c3d3b65b Author: Valery Febvre Date: Wed Jul 7 15:20:57 2004 +0000 Added initial debug message system lasso/xml/Makefile.am | 8 +++-- lasso/xml/debug.c | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++ lasso/xml/debug.h | 58 +++++++++++++++++++++++++++++++++ lasso/xml/tools.h | 1 + lasso/xml/xml.c | 6 ++-- 5 files changed, 157 insertions(+), 5 deletions(-) commit 5d8479a6f6873cecda61e164389abdb35977421f Author: Nicolas Clapies Date: Wed Jul 7 14:56:26 2004 +0000 *** empty log message *** lasso/id-ff/user.c | 39 +++++++++++++++++++++++++++++---------- 1 file changed, 29 insertions(+), 10 deletions(-) commit 4271f100238a951c8e4b8e3e5ba52a9419417058 Author: Valery Febvre Date: Wed Jul 7 11:07:27 2004 +0000 *** empty log message *** lasso/id-ff/login.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) commit 0b31906355f547945e961861259e639ab9e1c84c Author: Valery Febvre Date: Wed Jul 7 10:48:05 2004 +0000 *** empty log message *** lasso/id-ff/login.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit c122a7727a1b873eee2293496d9b4db238ce2fd4 Author: Nicolas Clapies Date: Tue Jul 6 19:11:01 2004 +0000 *** empty log message *** lasso/Attic/protocols/identity.c | 46 +++++- lasso/Attic/protocols/identity.h | 9 +- lasso/Attic/protocols/provider.c | 24 +++- lasso/Attic/protocols/provider.h | 4 +- lasso/id-ff/logout.c | 303 ++++++++++++++++++++++++--------------- lasso/id-ff/logout.h | 16 ++- lasso/id-ff/server.c | 54 ++++++- lasso/id-ff/server.h | 7 +- lasso/id-ff/user.c | 145 ++++++++++--------- lasso/id-ff/user.h | 13 +- 10 files changed, 406 insertions(+), 215 deletions(-) commit b455c8fd195c27ff488cbde7abece94a580d1807 Author: Nicolas Clapies Date: Tue Jul 6 19:10:11 2004 +0000 add type provider enum lasso/id-ff/profile_context.h | 5 +++++ 1 file changed, 5 insertions(+) commit ac64060db74dca8bd4f6ced4589d479a47242635 Author: Emmanuel Raviart Date: Tue Jul 6 18:16:02 2004 +0000 Added Python files explaining how to create a SP using Lasso. python/doc/tutorial/sp-init.py | 19 +++++++++++++ .../tutorial/sp-login-process-authn-response.py | 32 ++++++++++++++++++++++ python/doc/tutorial/sp-login-send-authn-request.py | 26 ++++++++++++++++++ ...ogout-process-idp-initiated-redirect-request.py | 30 ++++++++++++++++++++ ...sp-logout-process-idp-initiated-soap-request.py | 30 ++++++++++++++++++++ python/doc/tutorial/sp-logout-process-response.py | 19 +++++++++++++ python/doc/tutorial/sp-logout-send-request.py | 29 ++++++++++++++++++++ 7 files changed, 185 insertions(+) commit 53dda91b657f818263afd759a24ef3f4966a9f89 Author: Valery Febvre Date: Tue Jul 6 17:52:14 2004 +0000 *** empty log message *** lasso/id-ff/login.c | 56 ++++++++++++++++++++++++++++++++--------------------- 1 file changed, 34 insertions(+), 22 deletions(-) commit c6dd3f287d9e424323d7f117070c146e60e5eba8 Author: Valery Febvre Date: Tue Jul 6 17:20:48 2004 +0000 *** empty log message *** lasso/Attic/protocols/provider.c | 25 +++- lasso/Attic/protocols/provider.h | 9 +- lasso/id-ff/login.c | 279 ++++++++++++++++++++++++++++----------- lasso/id-ff/login.h | 27 ++-- 4 files changed, 241 insertions(+), 99 deletions(-) commit 9eb31ca3840d7013dbc4ce3a35ae7d6120306370 Author: Valery Febvre Date: Tue Jul 6 01:11:40 2004 +0000 *** empty log message *** lasso/id-ff/login.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit fbf995b8def3d6e4cbb1881c4f47ec3a520c3826 Author: Valery Febvre Date: Tue Jul 6 01:07:32 2004 +0000 *** empty log message *** lasso/Attic/protocols/artifact.c | 43 ++- lasso/Attic/protocols/artifact.h | 5 +- lasso/Attic/protocols/authn_request.c | 2 +- lasso/Attic/protocols/authn_response.c | 2 + lasso/id-ff/Makefile.am | 4 +- lasso/id-ff/authentication.c | 411 ------------------------- lasso/id-ff/authentication.h | 89 ------ lasso/id-ff/login.c | 433 +++++++++++++++++++++++++++ lasso/id-ff/login.h | 88 ++++++ lasso/id-ff/profile_context.c | 24 +- lasso/id-ff/profile_context.h | 19 +- lasso/id-ff/server.c | 4 +- lasso/id-ff/server.h | 5 +- lasso/xml/lib_idp_provided_name_identifier.c | 4 +- lasso/xml/strings.c | 4 +- lasso/xml/strings.h | 4 +- 16 files changed, 590 insertions(+), 551 deletions(-) commit 68df8d32eb2113acca0ca55534035e3db6cedef6 Author: Valery Febvre Date: Sat Jul 3 02:09:13 2004 +0000 2 new constructors were added lasso/Attic/protocols/artifact.c | 124 +++++++++++++++++++++++++++++++-------- lasso/Attic/protocols/artifact.h | 10 +++- 2 files changed, 107 insertions(+), 27 deletions(-) commit f44a613487d31e663c82c4e778388d716d2554b6 Author: Valery Febvre Date: Sat Jul 3 02:06:26 2004 +0000 *** empty log message *** lasso/id-ff/user.c | 4 ++-- lasso/id-ff/user.h | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) commit 78aa9321dbc33b922d099b9fa61cdf6ae668ce69 Author: Valery Febvre Date: Fri Jul 2 17:12:14 2004 +0000 *** empty log message *** lasso/id-ff/authentication.c | 63 ++++++++++++++++++++++++++++++++------------ lasso/id-ff/user.c | 10 ++++--- lasso/id-ff/user.h | 6 ++--- 3 files changed, 55 insertions(+), 24 deletions(-) commit dfc227be36c9e4a44cdb9bc50a3125b70d9d7a47 Author: Nicolas Clapies Date: Fri Jul 2 14:41:22 2004 +0000 *** empty log message *** lasso/Attic/protocols/identity.c | 18 ++++++++++++++++-- lasso/Attic/protocols/identity.h | 12 ++++++------ 2 files changed, 22 insertions(+), 8 deletions(-) commit 6debc3e385fde04180638fd3b464b8583ac3d73e Author: Valery Febvre Date: Fri Jul 2 14:20:03 2004 +0000 Added new class Artifact lasso/Attic/protocols/Makefile.am | 2 + lasso/Attic/protocols/artifact.c | 148 ++++++++++++++++++++++++++++++++++++++ lasso/Attic/protocols/artifact.h | 71 ++++++++++++++++++ lasso/xml/tools.h | 1 - 4 files changed, 221 insertions(+), 1 deletion(-) commit a3654f9a6fc21dc481caf88f2e17b719fcabc436 Author: Valery Febvre Date: Fri Jul 2 12:20:18 2004 +0000 Fixed 2 bugs in lasso_node_impl_add_child() and lasso_node_impl_add_child() methods lasso/xml/xml.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) commit 757f7416a54186420fca3c66885297a212590bf9 Author: Valery Febvre Date: Thu Jul 1 23:04:11 2004 +0000 Added functions lasso_build_random_sequence() and lasso_str_hash() lasso/xml/tools.c | 22 ++++++++++++++++++++++ lasso/xml/tools.h | 6 +++++- 2 files changed, 27 insertions(+), 1 deletion(-) commit d935b20b7e135c7fef9af1ff5e18a9437e4ab838 Author: Nicolas Clapies Date: Thu Jul 1 16:29:26 2004 +0000 add support for artifacts, assertions and identities lasso/id-ff/user.c | 120 ++++++++++++++++++++++++++++++++++++++++++----------- lasso/id-ff/user.h | 32 +++++++++++--- 2 files changed, 122 insertions(+), 30 deletions(-) commit 5a130e4bc5cf4a4bd4ad61c93f31309297464a0d Author: Valery Febvre Date: Thu Jul 1 16:10:19 2004 +0000 *** empty log message *** lasso/Attic/protocols/provider.h | 6 ++---- lasso/id-ff/authentication.c | 37 ++++++++++++++++++------------------- lasso/id-ff/authentication.h | 1 - lasso/id-ff/profile_context.c | 32 -------------------------------- lasso/id-ff/profile_context.h | 5 ----- lasso/id-ff/server.c | 31 ++++++++++++++----------------- lasso/id-ff/server.h | 13 +++++-------- lasso/xml/tools.c | 22 ++++++++++++++++++++++ lasso/xml/tools.h | 2 ++ 9 files changed, 63 insertions(+), 86 deletions(-) commit eff8a8016b1562ee06b1fb27908532f0859d05dd Author: Valery Febvre Date: Thu Jul 1 14:02:26 2004 +0000 *** empty log message *** lasso/Attic/protocols/elements/authentication_statement.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) commit 4a07ac7f1d1d41fea32678449c63632e2e3f567c Author: Valery Febvre Date: Thu Jul 1 13:56:18 2004 +0000 *** empty log message *** lasso/Attic/protocols/identity.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit d6001f9251eed28a2fc4e0bd9da224a3155a452e Author: Valery Febvre Date: Thu Jul 1 13:54:19 2004 +0000 *** empty log message *** lasso/Attic/protocols/elements/authentication_statement.c | 13 ++++++++++++- lasso/Attic/protocols/identity.c | 10 +++++----- lasso/Attic/protocols/identity.h | 4 ++-- lasso/id-ff/authentication.c | 4 +++- 4 files changed, 22 insertions(+), 9 deletions(-) commit 6bdf97f01ddde750415b02cb1e235d836d125e1a Author: Valery Febvre Date: Thu Jul 1 02:11:16 2004 +0000 *** empty log message *** lasso/id-ff/authentication.c | 39 +++++++++++++++++++-------------------- lasso/id-ff/authentication.h | 12 ++++++------ lasso/id-ff/profile_context.c | 32 ++++++++++++++++---------------- lasso/id-ff/profile_context.h | 3 --- 4 files changed, 41 insertions(+), 45 deletions(-) commit ddc3dafdabb81f1a4e7b40f17b6d47f9cf236cbf Author: Valery Febvre Date: Wed Jun 30 23:29:13 2004 +0000 *** empty log message *** lasso/Attic/protocols/authn_request.c | 1 - lasso/Attic/protocols/provider.c | 46 ++++++++++++++++------------------- lasso/Attic/protocols/provider.h | 4 ++- lasso/id-ff/authentication.c | 6 ++--- lasso/id-ff/server.c | 8 +++--- lasso/id-ff/server.h | 6 +++-- 6 files changed, 36 insertions(+), 35 deletions(-) commit ce45b1e30d6c4153ad710197575268347e14bdb3 Author: Valery Febvre Date: Wed Jun 30 15:50:31 2004 +0000 *** empty log message *** lasso/Attic/protocols/authn_response.c | 2 +- .../protocols/elements/authentication_statement.c | 29 +++---------- .../protocols/elements/authentication_statement.h | 12 ++---- lasso/Attic/protocols/identity.h | 5 ++- lasso/id-ff/authentication.c | 49 ++++++++++++---------- lasso/id-ff/authentication.h | 24 +++-------- lasso/id-ff/profile_context.c | 1 - lasso/id-ff/profile_context.h | 4 +- lasso/id-ff/server.c | 16 ++++--- lasso/id-ff/server.h | 10 +++-- 10 files changed, 67 insertions(+), 85 deletions(-) commit c4bea7b9a712bd130cf17390c474ab63b60aa4ba Author: Valery Febvre Date: Wed Jun 30 13:07:03 2004 +0000 *** empty log message *** lasso/id-ff/identity.c | 87 -------------------------------- lasso/id-ff/identity.h | 70 -------------------------- lasso/id-ff/provider.c | 132 ------------------------------------------------- lasso/id-ff/provider.h | 78 ----------------------------- 4 files changed, 367 deletions(-) commit 9532d9d383ff889e780f77545875085c7a482d1b Author: Valery Febvre Date: Tue Jun 29 17:02:30 2004 +0000 *** empty log message *** lasso/Attic/protocols/authn_response.c | 21 ++ lasso/id-ff/authentication.c | 387 +++++++++++++++++---------------- lasso/id-ff/authentication.h | 7 +- lasso/id-ff/profile_context.h | 1 + 4 files changed, 225 insertions(+), 191 deletions(-) commit 5202492aebef2b51cc6c33d7f49d57d0875e1444 Author: Valery Febvre Date: Fri Jun 25 16:44:26 2004 +0000 *** empty log message *** lasso/Attic/protocols/Makefile.am | 4 + lasso/Attic/protocols/authn_response.c | 30 +++--- lasso/id-ff/Makefile.am | 18 ++-- lasso/id-ff/authentication.c | 190 +++++++++++++++++++-------------- lasso/id-ff/authentication.h | 31 +++--- lasso/id-ff/profile_context.c | 133 ++++++++++++++--------- lasso/id-ff/profile_context.h | 9 +- 7 files changed, 247 insertions(+), 168 deletions(-) commit df4e8f993c29a17e329fff0b3723a91ee3095bd1 Author: Valery Febvre Date: Fri Jun 25 16:42:25 2004 +0000 Initial commit lasso/Attic/protocols/identity.c | 95 ++++++++++++++++++++++++++ lasso/Attic/protocols/identity.h | 74 ++++++++++++++++++++ lasso/Attic/protocols/provider.c | 143 +++++++++++++++++++++++++++++++++++++++ lasso/Attic/protocols/provider.h | 78 +++++++++++++++++++++ lasso/id-ff/server.c | 124 +++++++++++++++++++++++++++++++++ lasso/id-ff/server.h | 80 ++++++++++++++++++++++ lasso/id-ff/user.c | 112 ++++++++++++++++++++++++++++++ lasso/id-ff/user.h | 70 +++++++++++++++++++ 8 files changed, 776 insertions(+) commit eef1d1971c940056d9321a545d11aa2004508d3c Author: Valery Febvre Date: Fri Jun 25 13:12:50 2004 +0000 *** empty log message *** lasso/id-ff/authn_environ.c | 161 ------------------ lasso/id-ff/authn_environ.h | 69 -------- lasso/id-ff/server_environ.c | 116 ------------- lasso/id-ff/server_environ.h | 75 --------- lasso/id-ff/session_environ.c | 383 ------------------------------------------ lasso/id-ff/session_environ.h | 119 ------------- lasso/id-ff/user_environ.c | 102 ----------- lasso/id-ff/user_environ.h | 70 -------- 8 files changed, 1095 deletions(-) commit 7958874b946b035e9faa2cf7c336fb99fc68bb29 Author: Nicolas Clapies Date: Fri Jun 25 10:20:46 2004 +0000 initial version lasso/id-ff/logout.c | 191 +++++++++++++++++++++++++++++++++++++++++++++++++++ lasso/id-ff/logout.h | 67 ++++++++++++++++++ 2 files changed, 258 insertions(+) commit 3db415092c1fb7b3e289fab882f6dbb2c03902f7 Author: Nicolas Clapies Date: Fri Jun 25 10:20:04 2004 +0000 add acces methods to metadata logout properties lasso/id-ff/provider.c | 23 +++++++++++++++-------- lasso/id-ff/provider.h | 18 ++++++++++++------ 2 files changed, 27 insertions(+), 14 deletions(-) commit 58e9b33ace84e74582198ea040db6b6d63681402 Author: Valery Febvre Date: Thu Jun 24 16:01:48 2004 +0000 Initial commit lasso/id-ff/authentication.c | 336 ++++++++++++++++++++++++++++++++++++++++++ lasso/id-ff/authentication.h | 92 ++++++++++++ lasso/id-ff/profile_context.c | 211 ++++++++++++++++++++++++++ lasso/id-ff/profile_context.h | 95 ++++++++++++ 4 files changed, 734 insertions(+) commit 73ff0f02cab8623ab67bc8626ed7e77df1acd457 Author: Valery Febvre Date: Thu Jun 24 10:47:11 2004 +0000 *** empty log message *** lasso/Attic/protocols/authn_request.c | 5 ++- lasso/Attic/protocols/authn_response.c | 74 +++++++++++++++++----------------- 2 files changed, 41 insertions(+), 38 deletions(-) commit 4b568c5471fd442c8e6faf24931393127e79b1d9 Author: Valery Febvre Date: Thu Jun 24 01:32:31 2004 +0000 *** empty log message *** lasso/Attic/protocols/Makefile.am | 6 +- lasso/id-ff/session_environ.c | 283 ++++++++++++++++++++------------------ lasso/id-ff/session_environ.h | 53 +++---- 3 files changed, 177 insertions(+), 165 deletions(-) commit 5f722d964cfc9a02446ee20ca1bacb1118442b33 Author: Valery Febvre Date: Thu Jun 24 01:31:53 2004 +0000 Initial commit lasso/Attic/protocols/response.c | 110 +++++++++++++++++++++++++++++++++++++++ lasso/Attic/protocols/response.h | 63 ++++++++++++++++++++++ 2 files changed, 173 insertions(+) commit 5c9c919917fb9cabc1ddd3b2bf641da3098ecb07 Author: Valery Febvre Date: Thu Jun 24 00:00:35 2004 +0000 *** empty log message *** lasso/Attic/protocols/Makefile.am | 6 +- lasso/Attic/protocols/authn_response.c | 493 +++++++++++++++++---------------- lasso/Attic/protocols/authn_response.h | 4 +- lasso/id-ff/Makefile.am | 2 - lasso/id-ff/server_environ.c | 2 +- lasso/id-ff/server_environ.h | 5 +- lasso/id-ff/session_environ.c | 281 ++++++++++--------- lasso/id-ff/session_environ.h | 57 ++-- lasso/id-ff/user_environ.c | 2 +- lasso/id-ff/user_environ.h | 12 +- lasso/xml/lib_authn_request.c | 1 + lasso/xml/samlp_request.c | 3 + lasso/xml/samlp_request_abstract.c | 15 + lasso/xml/samlp_request_abstract.h | 21 +- lasso/xml/samlp_response_abstract.c | 16 +- lasso/xml/samlp_response_abstract.h | 29 +- lasso/xml/tools.c | 6 +- 17 files changed, 512 insertions(+), 443 deletions(-) commit ccfaf01702cdf41bd1be20781203d06650cbfc8d Author: Valery Febvre Date: Wed Jun 23 09:25:25 2004 +0000 *** empty log message *** lasso/id-ff/environ.c | 83 --------------------------------------------------- lasso/id-ff/environ.h | 63 -------------------------------------- 2 files changed, 146 deletions(-) commit e02b4c3d27868ace0d36def64ddc3355c5087883 Author: Valery Febvre Date: Wed Jun 23 09:09:28 2004 +0000 Initial commit lasso/Attic/protocols/request.c | 104 ++++++++++++++++++++++++++++++++++++++++ lasso/Attic/protocols/request.h | 63 ++++++++++++++++++++++++ 2 files changed, 167 insertions(+) commit a6e0caa92843bafc8f5a962f689f8c094f285381 Author: Nicolas Clapies Date: Wed Jun 23 00:18:25 2004 +0000 update for session environ in process of authentication, user environ for identity list lasso/id-ff/identity.c | 32 +++++++------------------------- lasso/id-ff/identity.h | 8 +++++--- lasso/id-ff/server_environ.c | 12 +++++------- lasso/id-ff/session_environ.c | 36 ++++++++++++++++++++---------------- lasso/id-ff/user_environ.c | 26 ++++++++++++++++++++++---- lasso/id-ff/user_environ.h | 7 +------ 6 files changed, 60 insertions(+), 61 deletions(-) commit f668f112c4e6fee1ee11810c28121db26bdd638b Author: Valery Febvre Date: Tue Jun 22 16:52:39 2004 +0000 *** empty log message *** lasso/id-ff/session_environ.c | 41 ++++++++++++++++++++--------------------- lasso/id-ff/session_environ.h | 5 +++-- 2 files changed, 23 insertions(+), 23 deletions(-) commit d7330a35a08a96cf966c775d6c6d932d9e383301 Author: Nicolas Clapies Date: Tue Jun 22 16:30:07 2004 +0000 update lasso/id-ff/identity.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit a95b0c694a8ca17bb0bc51a6463363b74368d61c Author: Nicolas Clapies Date: Tue Jun 22 16:24:49 2004 +0000 a lot of update lasso/id-ff/Makefile.am | 10 +- lasso/id-ff/authn_environ.c | 96 ++++++++++++++--- lasso/id-ff/authn_environ.h | 14 ++- lasso/id-ff/environ.c | 46 +++----- lasso/id-ff/environ.h | 22 +--- lasso/id-ff/identity.c | 9 +- lasso/id-ff/identity.h | 3 +- lasso/id-ff/provider.c | 40 +++---- lasso/id-ff/provider.h | 19 ++-- lasso/id-ff/server_environ.c | 68 ++++++------ lasso/id-ff/server_environ.h | 25 +++-- lasso/id-ff/session_environ.c | 238 ++++++++++++++++++++++++------------------ lasso/id-ff/session_environ.h | 71 ++++++++----- lasso/id-ff/user_environ.c | 82 +-------------- lasso/id-ff/user_environ.h | 24 +++-- 15 files changed, 400 insertions(+), 367 deletions(-) commit 58023d7295e775d93787993165e0c2b786a8aad2 Author: Nicolas Clapies Date: Tue Jun 15 16:28:12 2004 +0000 add code to build provider from filename and method to acces value of metadata lasso/id-ff/provider.c | 87 +++++++++++++++++++++++++++++++------------------- lasso/id-ff/provider.h | 17 +++------- 2 files changed, 60 insertions(+), 44 deletions(-) commit 4814eca3c808297f8e717fb0922a2c8b769ba968 Author: Nicolas Clapies Date: Tue Jun 15 16:25:08 2004 +0000 add provider, server_environ, session_environ, identity, user_environ, remove authn_environ.c/.h lasso/id-ff/Makefile.am | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) commit 76c3968b4dc5ffd25143e6c298d5f0eb1fe26cae Author: Nicolas Clapies Date: Tue Jun 15 16:23:51 2004 +0000 initial version lasso/id-ff/identity.c | 106 +++++++++++++++ lasso/id-ff/identity.h | 67 ++++++++++ lasso/id-ff/server_environ.c | 120 +++++++++++++++++ lasso/id-ff/server_environ.h | 67 ++++++++++ lasso/id-ff/session_environ.c | 302 ++++++++++++++++++++++++++++++++++++++++++ lasso/id-ff/session_environ.h | 99 ++++++++++++++ lasso/id-ff/user_environ.c | 162 ++++++++++++++++++++++ lasso/id-ff/user_environ.h | 71 ++++++++++ 8 files changed, 994 insertions(+) commit ad6de0b860c7fcca253e8fad6d3906dfbfffb356 Author: Nicolas Clapies Date: Tue Jun 15 16:20:44 2004 +0000 add lasso name space lasso/xml/strings.c | 9 +++++++++ lasso/xml/strings.h | 8 ++++++++ 2 files changed, 17 insertions(+) commit a77b7f8f4b44c1af152b2769ef355abf4e82922b Author: Nicolas Clapies Date: Fri Jun 11 14:14:27 2004 +0000 update type of isPassive and forceAuthn params, instead use gboolean lasso/xml/lib_authn_request.c | 17 +++++++++-------- lasso/xml/lib_authn_request.h | 4 ++-- 2 files changed, 11 insertions(+), 10 deletions(-) commit b13f45e455d2845260e5fdf7096279ceff643362 Author: Nicolas Clapies Date: Fri Jun 11 14:13:05 2004 +0000 add ref and prefix for sso get and post request lasso/xml/strings.c | 2 ++ lasso/xml/strings.h | 2 ++ 2 files changed, 4 insertions(+) commit 3189467040a7eb60f65176ad2daccd207aa764fd Author: Nicolas Clapies Date: Fri Jun 11 14:11:43 2004 +0000 add lasso_authn_response_new to set a AuthnResponse from a AuthnRequest object lasso/Attic/protocols/authn_response.c | 39 ++++++++++++++++++++++++++++++++++ lasso/Attic/protocols/authn_response.h | 3 +++ 2 files changed, 42 insertions(+) commit 22cc71048634cf06820ffe7a3d367cd9ef69f207 Author: Nicolas Clapies Date: Fri Jun 11 14:10:36 2004 +0000 fix : strange conversion of true string to an integer value setting the wrong value to the function settings of IsPassive and ForceAuthn lasso/Attic/protocols/authn_request.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) commit 0772620687676bd3fd35c87f7d77b52ac3a66606 Author: Nicolas Clapies Date: Mon Jun 7 16:00:29 2004 +0000 fix: segmentation fault in lasso_node_get_attr_value() if no attribute found lasso/xml/xml.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) commit 7d485dcda981e377a17f3a770d8e36a91990da67 Author: Valery Febvre Date: Fri Jun 4 13:15:45 2004 +0000 *** empty log message *** configure.ac | 2 +- lasso/Makefile.am | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) commit 1b922472770621c707afb8e3679ea69302d400a5 Author: Valery Febvre Date: Fri Jun 4 12:49:18 2004 +0000 Initial version lasso/id-ff/.cvsignore | 7 +++ lasso/id-ff/Makefile.am | 25 ++++++++++ lasso/id-ff/authn_environ.c | 93 ++++++++++++++++++++++++++++++++++++++ lasso/id-ff/authn_environ.h | 63 ++++++++++++++++++++++++++ lasso/id-ff/environ.c | 97 +++++++++++++++++++++++++++++++++++++++ lasso/id-ff/environ.h | 79 ++++++++++++++++++++++++++++++++ lasso/id-ff/provider.c | 108 ++++++++++++++++++++++++++++++++++++++++++++ lasso/id-ff/provider.h | 72 +++++++++++++++++++++++++++++ 8 files changed, 544 insertions(+) commit 0099e66541566ba8da4462f15da3679b63b93e4e Author: Valery Febvre Date: Wed Jun 2 14:12:09 2004 +0000 *** empty log message *** lasso/xml/xml.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) commit 37906371a83080c0230c8a47889899ec9eff2e27 Author: Nicolas Clapies Date: Wed Jun 2 14:08:05 2004 +0000 add metadata prefix and uri lasso/xml/strings.c | 9 +++++++++ lasso/xml/strings.h | 8 ++++++++ 2 files changed, 17 insertions(+) commit a94e79361227eb5df8ae6581accaa9d67f3cbbaf Author: Valery Febvre Date: Wed Jun 2 13:22:43 2004 +0000 Added lasso_node_get_child_content() method lasso/xml/xml.c | 76 +++++++++++++++++++++++++++++++++++++++++++-------------- lasso/xml/xml.h | 7 ++++++ 2 files changed, 65 insertions(+), 18 deletions(-) commit d3594e19a72b29ef6e0f68b539c5499169c80953 Author: Valery Febvre Date: Wed Jun 2 13:20:13 2004 +0000 Changed default format value to 0 instead of 1 in dump() method of class Node python/lasso.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit a61facedc163828d921eee059e24db6679d5dba9 Author: Valery Febvre Date: Wed Jun 2 13:17:59 2004 +0000 Added new directory lasso/profiles configure.ac | 1 + lasso/Makefile.am | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) commit 60f881475179cd90fbbb740cbaa852f0ec7c3d8a Author: Valery Febvre Date: Tue Jun 1 14:54:46 2004 +0000 *** empty log message *** lasso/xml/xml.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 47f50f046f8b324e80b8d45358f4ae539fe115ea Author: Valery Febvre Date: Tue Jun 1 13:39:05 2004 +0000 *** empty log message *** lasso/Attic/protocols/authn_response.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit c15a5d6e8e9392790ca558fbd2f69d75c71f10fb Author: Valery Febvre Date: Fri May 28 14:16:37 2004 +0000 Added option menu to build documentation (doxygen) python/setup.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) commit 5f2d1654a5a69438dba932456932053c32f7ef19 Author: Valery Febvre Date: Fri May 28 14:00:30 2004 +0000 Initial commit python/doc/.cvsignore | 2 + python/doc/doxygen.conf | 1142 ++++++++++++++++++++++++++++++++++++++++++++++ python/doc/pythfilter.py | 602 ++++++++++++++++++++++++ 3 files changed, 1746 insertions(+) commit 10387af1036e732b81c6897217a910462fbc5122 Author: Valery Febvre Date: Fri May 28 13:52:32 2004 +0000 Some functions documentation (doxygen syntax) python/lasso.py | 198 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 192 insertions(+), 6 deletions(-) commit eef146b2d15ca2f2cd726061dfffaf4a97fd44b6 Author: Valery Febvre Date: Fri May 28 13:07:57 2004 +0000 Updated doc Fixed a memory leak in lasso_node_add_signature() method lasso/xml/xml.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) commit d322819bab33ad2ff2362fb61c494b1d4ab48c13 Author: Valery Febvre Date: Fri May 28 00:45:25 2004 +0000 Added functions and public methods documentation lasso/xml/tools.c | 91 ++++++++++++++++++++++++++++++++++++++++++++++++++++--- lasso/xml/xml.c | 35 +++++++++++++++++---- 2 files changed, 116 insertions(+), 10 deletions(-) commit 5d94ac4f4d75d44b7452f986ee15970986bedc0a Author: Valery Febvre Date: Wed May 26 16:18:12 2004 +0000 *** empty log message *** docs/reference/lasso-sections.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 0d94439f24137da87727af03ac0772d609a9ec23 Author: Valery Febvre Date: Wed May 26 15:53:41 2004 +0000 Initial commit python/INSTALL | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) commit 57ef94707ee4b9c4fe1bc3c14903927624a8e89b Author: Valery Febvre Date: Wed May 26 15:16:14 2004 +0000 *** empty log message *** .../protocols/single_sign_on_and_federation.c | 652 --------------------- .../protocols/single_sign_on_and_federation.h | 137 ----- 2 files changed, 789 deletions(-) commit f64826244700e3e366b4f3933eb40a2960bdd217 Author: Valery Febvre Date: Tue May 25 23:45:38 2004 +0000 Modified function lasso_str_sign() lasso/xml/tools.c | 21 +++++--- lasso/xml/tools.h | 11 ++-- lasso/xml/xml.c | 156 ++++++++++++++++++++++++++++++++++++++++++++++++++---- lasso/xml/xml.h | 17 +++--- 4 files changed, 174 insertions(+), 31 deletions(-) commit 01da79e0a3fc1365abb0763d0a466033d225f6c5 Author: Valery Febvre Date: Tue May 25 23:33:38 2004 +0000 *** empty log message *** docs/reference/lasso-sections.txt | 2 ++ 1 file changed, 2 insertions(+) commit b563fb3816eeb7eb560337a15e890b648c25e0d8 Author: Valery Febvre Date: Tue May 25 13:39:40 2004 +0000 Modified method get_child() python/lasso.py | 4 ++-- python/xml/py_xml.c | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) commit 0fad7d9ace52ae5d2630c76eb4da2896b0b81548 Author: Valery Febvre Date: Tue May 25 13:38:12 2004 +0000 *** empty log message *** python/examples/test.py | 80 ++++++++++++++++++++++++++++--------------------- 1 file changed, 46 insertions(+), 34 deletions(-) commit 25edc80a74530df9da9dcf6c426ffed4137ab0db Author: Valery Febvre Date: Tue May 25 13:21:49 2004 +0000 *** empty log message *** lasso/xml/xml.c | 135 ++++++++++++++++++++++++++++++++------------------------ lasso/xml/xml.h | 8 ++-- 2 files changed, 83 insertions(+), 60 deletions(-) commit 07292d1f5b0640d117e387576339fff6a6bbb7ed Author: Valery Febvre Date: Tue May 25 13:02:32 2004 +0000 Added some lasso_node_destroy() lasso/Attic/protocols/authn_request.c | 4 + lasso/Attic/protocols/authn_response.c | 104 ++++++++++--------- .../federation_termination_notification.c | 113 +++++++++++---------- lasso/Attic/protocols/logout_request.c | 13 ++- lasso/Attic/protocols/logout_response.c | 29 ++++-- .../protocols/name_identifier_mapping_request.c | 10 +- .../protocols/name_identifier_mapping_response.c | 19 ++-- .../protocols/register_name_identifier_request.c | 25 +++-- .../protocols/register_name_identifier_response.c | 27 +++-- 9 files changed, 202 insertions(+), 142 deletions(-) commit c8f3a247680258ddc77513e63b9a6436f67a10a8 Author: Valery Febvre Date: Tue May 25 13:01:03 2004 +0000 Little inversion to respect alpha order lasso/Attic/protocols/Makefile.am | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit ecc8b1a0b6031cefb3f9e60e03003e2f6bfc50c5 Author: Valery Febvre Date: Tue May 25 12:59:51 2004 +0000 Added 4 lasso_node_destroy() lasso/Attic/protocols/elements/authentication_statement.c | 5 +++++ 1 file changed, 5 insertions(+) commit 3dad242cb2e4a27731622d6c94ae7fa330bad227 Author: Valery Febvre Date: Sun May 16 22:32:52 2004 +0000 New method lasso_node_destroy() added in class LassoNode lasso/xml/xml.c | 25 ++++++++++++++++++++++--- lasso/xml/xml.h | 3 +++ python/lasso.py | 6 +++--- python/lassomod.c | 2 +- python/xml/py_xml.c | 31 +++++++++++++++---------------- python/xml/py_xml.h | 2 +- 6 files changed, 45 insertions(+), 24 deletions(-) commit 98d6264eadc827ff34e1bee2d3643f43567c00d0 Author: Valery Febvre Date: Sat May 15 00:38:03 2004 +0000 Many many memory leaks fixed lasso/Attic/protocols/authn_request.c | 9 +- lasso/Attic/protocols/authn_response.c | 13 +- lasso/Attic/protocols/elements/assertion.c | 11 +- .../protocols/elements/authentication_statement.c | 5 +- .../federation_termination_notification.c | 9 +- lasso/Attic/protocols/logout_request.c | 11 +- lasso/Attic/protocols/logout_response.c | 11 +- .../protocols/name_identifier_mapping_request.c | 10 +- .../protocols/name_identifier_mapping_response.c | 9 +- .../protocols/register_name_identifier_request.c | 164 +++++++++++---------- .../protocols/register_name_identifier_response.c | 9 +- lasso/lasso.c | 2 +- lasso/xml/ds_signature.c | 4 +- lasso/xml/tools.c | 7 +- lasso/xml/xml.c | 40 ++++- 15 files changed, 197 insertions(+), 117 deletions(-) commit 5ba578ade45dd65238fa7c94b6fff641c67e79ce Author: Valery Febvre Date: Sat May 15 00:22:44 2004 +0000 *** empty log message *** lasso/Attic/protocols/name_identifier_mapping.h | 15 --------------- 1 file changed, 15 deletions(-) commit 668eee047a196bc964438c817b5b3013136dbf23 Author: Valery Febvre Date: Fri May 14 14:42:40 2004 +0000 *** empty log message *** docs/reference/lasso-sections.txt | 279 ++++++++++++++++++++++++++++++++------ docs/reference/lasso.sgml | 158 ++++++++++----------- docs/reference/lasso.types | 14 ++ 3 files changed, 335 insertions(+), 116 deletions(-) commit fb0ae5893caba1ed56fff9f122cfd529ecf6ba92 Author: Valery Febvre Date: Fri May 14 00:00:18 2004 +0000 node_export() and node_export_from_base64() functions added 2 export methods in class Node added python/lasso.py | 11 +++++++++++ python/lassomod.c | 4 +++- 2 files changed, 14 insertions(+), 1 deletion(-) commit 7feb79492a08ef70adb2688b1277fc7c7e49e4d8 Author: Valery Febvre Date: Thu May 13 23:58:27 2004 +0000 node_export and node_export_from_base64() functions added python/xml/py_xml.c | 30 ++++++++++++++++++++++++++++++ python/xml/py_xml.h | 2 ++ 2 files changed, 32 insertions(+) commit a126ff51729dfd323186ab19c71dc84a1eba74ff Author: Valery Febvre Date: Thu May 13 23:55:48 2004 +0000 authn_response_new_from_export() function added python/protocols/py_authn_response.c | 17 +++++++++++++++++ python/protocols/py_authn_response.h | 1 + 2 files changed, 18 insertions(+) commit bf2f894ddd6284fb6414b6a0920a43f11c348711 Author: Valery Febvre Date: Thu May 13 23:54:19 2004 +0000 some update more comments python/examples/test.py | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) commit 35c7dc78a475b2ca4a218fa4da9c681250d08f87 Author: Valery Febvre Date: Thu May 13 23:53:21 2004 +0000 A new constructor added: authn_response_new_from_export() lasso/Attic/protocols/authn_response.c | 25 +++++++++++++++++++++++++ lasso/Attic/protocols/authn_response.h | 3 +++ 2 files changed, 28 insertions(+) commit 21be1b2799a463357f5cce0d6e73b6f647024ef0 Author: Valery Febvre Date: Thu May 13 16:57:48 2004 +0000 *** empty log message *** python/lasso.py | 3 +++ python/setup.py | 8 ++++---- 2 files changed, 7 insertions(+), 4 deletions(-) commit 2b82bf473c696328b92cd8774e66ce55d3e7dc7c Author: Valery Febvre Date: Thu May 13 16:54:21 2004 +0000 *** empty log message *** python/lasso.py | 76 ++++++++++++++++++++++++++++++++++----------------------- python/setup.py | 9 ++++--- 2 files changed, 50 insertions(+), 35 deletions(-) commit 1ff8baf95715a6913a0c42f730ebbca874971cf4 Author: Nicolas Clapies Date: Thu May 13 16:53:50 2004 +0000 add some macro defines to local variables in methodes ... lasso/Attic/protocols/federation_termination_notification.c | 5 +++-- lasso/Attic/protocols/logout_request.c | 4 ++-- lasso/Attic/protocols/name_identifier_mapping_request.c | 3 ++- lasso/Attic/protocols/register_name_identifier_request.c | 9 ++++++--- 4 files changed, 13 insertions(+), 8 deletions(-) commit 8b5f9ddb6b21b0550e1515482fe74378365a58da Author: Valery Febvre Date: Thu May 13 16:53:28 2004 +0000 gpointer_get() macro added python/wrap_objs.h | 6 ++++++ 1 file changed, 6 insertions(+) commit 5f86d1e634fe19fb1f0dabde974aab711f24bdce Author: Valery Febvre Date: Thu May 13 16:52:47 2004 +0000 2 methods renamed, 3 added and 1 removed python/lassomod.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) commit ce2a38b7df0b09f418af7ca6b6bf36b011ed9495 Author: Valery Febvre Date: Thu May 13 16:48:34 2004 +0000 node_url_encode() and node_soap_envelop() renamed -> node_export_to_query() and node_export_to_soap() python/xml/py_xml.c | 70 ++++++++++++++++++++++++++--------------------------- python/xml/py_xml.h | 4 +-- 2 files changed, 37 insertions(+), 37 deletions(-) commit 16d7f6b804f0235bec0f7ccdd376a814a85b4622 Author: Valery Febvre Date: Thu May 13 16:46:01 2004 +0000 saml_assertion_set_signature() function added python/xml/py_saml_assertion.c | 21 +++++++++++++++++++++ python/xml/py_saml_assertion.h | 1 + 2 files changed, 22 insertions(+) commit 2c2f3f9299f8953fb4f6483d3040b8689fece2b5 Author: Valery Febvre Date: Thu May 13 16:44:07 2004 +0000 *** empty log message *** lasso/Attic/protocols/authn_response.h | 5 ----- 1 file changed, 5 deletions(-) commit bf0f282902c5d002b80a38b11dea3b754f39d447 Author: Valery Febvre Date: Thu May 13 16:43:43 2004 +0000 authn_response_add_assetion() function removed python/protocols/py_authn_response.c | 22 ---------------------- python/protocols/py_authn_response.h | 1 - 2 files changed, 23 deletions(-) commit 9e310a22c9e71d94ea8b94f64cfef3e682280e7e Author: Valery Febvre Date: Thu May 13 16:40:40 2004 +0000 cosmetic lasso/xml/tools.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) commit 771851372f067ed139e3cc4e815a29fb9c87627a Author: Valery Febvre Date: Thu May 13 16:39:40 2004 +0000 lasso_saml_assertion_set_signature() method rewritten lasso/xml/saml_assertion.c | 10 +++++++--- lasso/xml/saml_assertion.h | 4 +++- 2 files changed, 10 insertions(+), 4 deletions(-) commit b84f12bfec9a1ff0978a8f2ca42653430db28b82 Author: Valery Febvre Date: Thu May 13 16:38:08 2004 +0000 lasso_ds_signature_new() rewritten lasso/xml/ds_signature.c | 20 +++++++++++--------- lasso/xml/ds_signature.h | 8 ++++---- 2 files changed, 15 insertions(+), 13 deletions(-) commit 5346e790a48c0f9a5d409ea1262ad185a37479cb Author: Nicolas Clapies Date: Thu May 13 16:35:26 2004 +0000 add const in read-only params of constructors lasso/xml/lib_idp_provided_name_identifier.c | 2 +- lasso/xml/lib_idp_provided_name_identifier.h | 2 +- lasso/xml/lib_old_provided_name_identifier.c | 2 +- lasso/xml/lib_old_provided_name_identifier.h | 2 +- lasso/xml/lib_sp_provided_name_identifier.c | 2 +- lasso/xml/lib_sp_provided_name_identifier.h | 2 +- lasso/xml/saml_name_identifier.c | 2 +- lasso/xml/saml_name_identifier.h | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) commit e2225344fff0a9c64c583539348618e5465d14e8 Author: Valery Febvre Date: Thu May 13 16:33:50 2004 +0000 *** empty log message *** lasso/Attic/protocols/authn_request.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit fda8b1f651bca6dc10b576f5724f05cafbeab7a6 Author: Valery Febvre Date: Thu May 13 16:32:21 2004 +0000 all lasso_node_load_from_buffer() replaced by lasso_node_import() lasso/Attic/protocols/logout_response.c | 2 +- lasso/Attic/protocols/name_identifier_mapping_response.c | 2 +- lasso/Attic/protocols/register_name_identifier_response.c | 2 +- lasso/Attic/protocols/single_sign_on_and_federation.c | 3 --- 4 files changed, 3 insertions(+), 6 deletions(-) commit 049104a4753e5e34916380d81b071ea836dbd38d Author: Valery Febvre Date: Thu May 13 16:31:17 2004 +0000 lasso_authn_response_add_assertion() method removed lasso/Attic/protocols/authn_response.c | 32 +------------------------------- lasso/Attic/protocols/authn_response.h | 12 ++++++------ 2 files changed, 7 insertions(+), 37 deletions(-) commit 626abfe4ffd6ebb0b6fa55efd5a607721d85ad1a Author: Valery Febvre Date: Thu May 13 16:24:29 2004 +0000 Minor bugfix : lassoLibMajorVersion -> lassoLibMinorVersion lasso/Attic/protocols/elements/assertion.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit ff029a1c8b5c25a7cea736f41128e7544d377668 Author: Valery Febvre Date: Thu May 13 16:02:54 2004 +0000 Initial commit python/xml/py_samlp_response.c | 67 ++++++++++++++++++++++++++++++++++++++++++ python/xml/py_samlp_response.h | 42 ++++++++++++++++++++++++++ 2 files changed, 109 insertions(+) commit be07d39939733ae7b69f9c324e7f9bc21aab4913 Author: Valery Febvre Date: Thu May 13 15:59:26 2004 +0000 *** empty log message *** lasso/xml/xml.c | 596 ++++++++++++++++++++++++++++++-------------------------- lasso/xml/xml.h | 113 +++++------ 2 files changed, 375 insertions(+), 334 deletions(-) commit 2fc2c93eb6c3712d45a87cb19ebd2f6fd01be58d Author: Nicolas Clapies Date: Thu May 13 15:19:18 2004 +0000 add registration python example python/examples/registration.py | 51 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) commit 86f8466f0bf6b2a7ef68098ada8d2fc396a99ccd Author: Nicolas Clapies Date: Thu May 13 15:18:24 2004 +0000 register name identifier request and response updates in C and python binding .../protocols/register_name_identifier_request.c | 97 ++++++++++++++++- .../protocols/register_name_identifier_request.h | 26 +++-- .../protocols/register_name_identifier_response.c | 118 +++++++++++++++++++++ .../protocols/register_name_identifier_response.h | 20 +++- python/lasso.py | 95 ++++++++++++----- python/lassomod.c | 10 +- .../py_register_name_identifier_request.c | 42 +++++++- .../py_register_name_identifier_request.h | 5 +- .../py_register_name_identifier_response.c | 94 ++++++++++++++-- .../py_register_name_identifier_response.h | 7 +- 10 files changed, 455 insertions(+), 59 deletions(-) commit 4b94672a4e3f2600b34ca137a525071017e23fb7 Author: Valery Febvre Date: Thu May 13 13:01:01 2004 +0000 update python/lasso_strings.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) commit 16afa26fe212e917de76b143be4df05e019a8931 Author: Valery Febvre Date: Thu May 13 12:58:40 2004 +0000 4 NameIdentifier formats added lasso/xml/strings.c | 14 ++++++++++---- lasso/xml/strings.h | 10 ++++++++-- 2 files changed, 18 insertions(+), 6 deletions(-) commit d46f748b3ac8f6bb56f7eeee41f0c9aaff6afdd5 Author: Nicolas Clapies Date: Tue May 11 16:51:14 2004 +0000 initial version lasso/Attic/protocols/name_identifier_mapping.h | 15 +++++++++++++++ 1 file changed, 15 insertions(+) commit c2540f82e9f2ae39ff88f77d3a92a82f408328fa Author: Nicolas Clapies Date: Tue May 11 16:50:55 2004 +0000 c example for federation termination notification python/examples/defederation.py | 12 ------------ 1 file changed, 12 deletions(-) commit 1c046dbd78cb7e3b611eeeb28170b593278f9e79 Author: Nicolas Clapies Date: Tue May 11 16:50:24 2004 +0000 name identifier mapping response low class binding and, examples ... python/examples/mapping.py | 38 ++++++++++++++++ .../xml/py_lib_name_identifier_mapping_response.c | 50 ++++++++++++++++++++++ .../xml/py_lib_name_identifier_mapping_response.h | 42 ++++++++++++++++++ 3 files changed, 130 insertions(+) commit 2e5edf85b8c23ef73069dbd37e453c7e2d30545a Author: Nicolas Clapies Date: Tue May 11 16:47:33 2004 +0000 name identifer mapping c and python binding updates .../protocols/name_identifier_mapping_request.c | 75 ++++++++++++++ .../protocols/name_identifier_mapping_request.h | 6 +- .../protocols/name_identifier_mapping_response.c | 114 +++++++++++++++++++++ .../protocols/name_identifier_mapping_response.h | 19 +++- python/lasso.py | 90 +++++++++++----- python/lassomod.c | 14 ++- .../protocols/py_name_identifier_mapping_request.c | 34 ++++++ .../protocols/py_name_identifier_mapping_request.h | 2 + .../py_name_identifier_mapping_response.c | 95 +++++++++++++++-- .../py_name_identifier_mapping_response.h | 6 +- python/setup.py | 9 +- 11 files changed, 414 insertions(+), 50 deletions(-) commit 6d63bd7cfe78477e39d9557e070f589cb4f3052e Author: Nicolas Clapies Date: Tue May 11 09:54:26 2004 +0000 initial version python/examples/defederation.py | 35 +++++++++++++++++++++++++++ python/examples/logout.py | 53 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+) commit 1ede604043a3b25759f3192d7c66eb8fa226c19b Author: Nicolas Clapies Date: Tue May 11 09:52:45 2004 +0000 federation termination notification c and binding .../federation_termination_notification.c | 68 ++++++++++++++++++++++ .../federation_termination_notification.h | 2 + python/lasso.py | 66 +++++++++++---------- python/lassomod.c | 2 + .../py_federation_termination_notification.c | 41 +++++++++++-- .../py_federation_termination_notification.h | 2 + 6 files changed, 147 insertions(+), 34 deletions(-) commit e0ab9a70d5e266529518b22a6df04a2f07a2e20f Author: Valery Febvre Date: Sun May 9 00:16:08 2004 +0000 *** empty log message *** lasso/xml/xml.c | 1 + python/examples/test.py | 12 ++++++------ python/lasso.py | 5 ++++- 3 files changed, 11 insertions(+), 7 deletions(-) commit 5eeb378d17e33896536d5dc32283cd3e15dc7f2c Author: Valery Febvre Date: Sun May 9 00:06:43 2004 +0000 Bugfix in lasso_node_verify_signature() method New method lasso_node_add_signature() added lasso/xml/xml.c | 63 ++++++++++++++++++++++++++++++++++++++++++++++----------- lasso/xml/xml.h | 10 ++++++--- 2 files changed, 58 insertions(+), 15 deletions(-) commit 2223cf187c36ed3053a35411147a61a5030c9da0 Author: Valery Febvre Date: Sun May 9 00:04:21 2004 +0000 Bugfix in lasso_authn_response_add_assertion() method lasso/Attic/protocols/authn_response.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 37f852ca18fa48cf25a238aa4fc411ef8cac5e50 Author: Valery Febvre Date: Fri May 7 00:58:56 2004 +0000 *** empty log message *** lasso/Attic/protocols/authn_request.c | 8 +++---- lasso/Attic/protocols/authn_request.h | 4 ++-- lasso/Attic/protocols/authn_response.c | 19 ++++++++-------- lasso/Attic/protocols/authn_response.h | 4 ++-- lasso/xml/tools.c | 12 +++++----- lasso/xml/tools.h | 6 ++--- lasso/xml/xml.c | 40 +++++++++++++++++++--------------- lasso/xml/xml.h | 12 +++++----- python/protocols/py_authn_request.c | 4 ++-- 9 files changed, 56 insertions(+), 53 deletions(-) commit 28460166e1f19e70e0969aca143d3beeb6e3c68b Author: Valery Febvre Date: Thu May 6 17:14:15 2004 +0000 *** empty log message *** python/lasso.py | 2 ++ python/protocols/py_authn_response.c | 5 ++++- 2 files changed, 6 insertions(+), 1 deletion(-) commit bc26c8f129dd0b64f067624dea97259a664bbef1 Author: Valery Febvre Date: Thu May 6 17:02:18 2004 +0000 *** empty log message *** python/lasso.py | 3 +++ python/lassomod.c | 1 + python/setup.py | 8 ++++---- python/xml/py_xml.c | 16 ++++++++++++++++ python/xml/py_xml.h | 1 + 5 files changed, 25 insertions(+), 4 deletions(-) commit 60cffeeeb185ec2b9c70d8018b2cc61f11e2f945 Author: Valery Febvre Date: Thu May 6 15:45:16 2004 +0000 *** empty log message *** lasso/Attic/protocols/authn_response.c | 106 ++++++++++++++++++++- lasso/Attic/protocols/authn_response.h | 34 +++---- .../protocols/elements/authentication_statement.c | 16 +--- .../protocols/elements/authentication_statement.h | 4 +- lasso/xml/xml.c | 1 - python/examples/test.py | 24 ++--- python/lasso.py | 94 ++++++++++-------- python/lasso_strings.py | 13 +++ python/lassomod.c | 8 +- .../elements/py_authentication_statement.c | 14 +-- python/protocols/py_authn_response.c | 32 +++++-- python/protocols/py_authn_response.h | 3 +- python/setup.py | 1 + 13 files changed, 239 insertions(+), 111 deletions(-) commit 71ed7f38a91309cd81daca5d2c697f21a6b646b7 Author: Nicolas Clapies Date: Thu May 6 14:42:04 2004 +0000 add class method constructor new_from_query in LogoutResponse python/lasso.py | 5 +++++ python/lassomod.c | 1 + python/protocols/py_logout_response.c | 17 +++++++++++++++++ python/protocols/py_logout_response.h | 1 + 4 files changed, 24 insertions(+) commit d7394d35caea8fe9d256b97f194ad4e832826545 Author: Valery Febvre Date: Thu May 6 14:28:19 2004 +0000 Bugfixes in lasso_node_serialize(), lasso_node_get_attrs() and lasso_node_get_children() methods lasso/xml/xml.c | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) commit 1e001fb752550e7de4a4d8e5c024b60aa48cad76 Author: Valery Febvre Date: Thu May 6 13:35:08 2004 +0000 Removed lasso_node_new_ns() method lasso/xml/xml.c | 29 ++--------------------------- lasso/xml/xml.h | 3 --- 2 files changed, 2 insertions(+), 30 deletions(-) commit 119f037d434669d9977ea97fbb94987b4bc66b4c Author: Valery Febvre Date: Thu May 6 13:33:49 2004 +0000 *** empty log message *** lasso/xml/ds_signature.c | 5 ----- 1 file changed, 5 deletions(-) commit 779e9820b1b8981f9965a4563fe6af641f7da3ea Author: Valery Febvre Date: Thu May 6 00:01:48 2004 +0000 2 new constructors : lasso_node_new_from_dump() lasso_node_new_from_xmlNode() lasso_node_parse_memory() renamed -> lasso_node_load_from_buffer() lasso/xml/xml.c | 72 ++++++++++++++++++++++++++++++++++++--------------------- lasso/xml/xml.h | 10 ++++---- 2 files changed, 52 insertions(+), 30 deletions(-) commit 6878046a42ead812418d5a73c5347bb5aeeb1795 Author: Valery Febvre Date: Wed May 5 23:57:25 2004 +0000 minor changes lasso/Attic/protocols/logout_request.c | 203 ++++++++++++------------ lasso/Attic/protocols/logout_request.h | 12 +- lasso/Attic/protocols/logout_response.c | 271 +++++++++++++++----------------- lasso/Attic/protocols/logout_response.h | 13 +- 4 files changed, 242 insertions(+), 257 deletions(-) commit 23d49536c103dbef67e6f4225354e5119a035640 Author: Nicolas Clapies Date: Wed May 5 17:07:15 2004 +0000 add low level of logout response binding python/setup.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) commit 72ae1962b53001874dfd435ce6013b111b4fac5d Author: Nicolas Clapies Date: Wed May 5 17:06:35 2004 +0000 binding for low level of logout request and response C class python/xml/py_lib_logout_response.c | 50 +++++++++++++++++++++++++++++++++++++ python/xml/py_lib_logout_response.h | 41 ++++++++++++++++++++++++++++++ 2 files changed, 91 insertions(+) commit b57e1b705be534e86a4273e036ab7c94f38ff2d0 Author: Nicolas Clapies Date: Wed May 5 17:05:18 2004 +0000 update of LogoutRequest LogoutResponse classes python/lasso.py | 69 ++++++++++++++++++++----------- python/lassomod.c | 12 +++++- python/protocols/py_logout_request.c | 42 +++++++++++++++++-- python/protocols/py_logout_request.h | 2 + python/protocols/py_logout_response.c | 77 ++++++++++++++++++++++++++++++----- python/protocols/py_logout_response.h | 5 ++- 6 files changed, 166 insertions(+), 41 deletions(-) commit 288995dd19a0a5eb1af0d32ffe867a0e37a59a8a Author: Nicolas Clapies Date: Wed May 5 17:03:39 2004 +0000 update of constructors lasso/Attic/protocols/logout_response.c | 2 +- lasso/Attic/protocols/logout_response.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 723aca5030052fdf956695e282d9c7e70208290e Author: Valery Febvre Date: Wed May 5 16:22:08 2004 +0000 *** empty log message *** lasso/xml/xml.c | 14 +++++++------- lasso/xml/xml.h | 4 ++-- 2 files changed, 9 insertions(+), 9 deletions(-) commit d696d0116c834fb7f09a6a2b2e5fe8f91554160e Author: Valery Febvre Date: Wed May 5 16:19:50 2004 +0000 Added a new method -> lasso_node_copy() lasso/xml/xml.c | 98 ++++++++++++++++++++++++++++++++++----------------------- lasso/xml/xml.h | 5 ++- 2 files changed, 63 insertions(+), 40 deletions(-) commit b6011ab10734bec8c6b47131ef75a45e689681a4 Author: Nicolas Clapies Date: Wed May 5 12:59:16 2004 +0000 add enveloping in soap node python/lasso.py | 47 ++++++++++++++++++++++++++++++----------------- python/lassomod.c | 1 + python/xml/py_xml.c | 16 ++++++++++++++++ python/xml/py_xml.h | 1 + 4 files changed, 48 insertions(+), 17 deletions(-) commit 84a15f9fdde1548e7eef0a33fd32887376ba54be Author: Nicolas Clapies Date: Wed May 5 12:56:17 2004 +0000 update ... lasso/xml/soap-env_body.c | 11 ----------- lasso/xml/soap-env_body.h | 2 ++ lasso/xml/soap-env_envelope.c | 14 +------------- lasso/xml/soap-env_envelope.h | 6 ++++-- 4 files changed, 7 insertions(+), 26 deletions(-) commit 885e0ea58d90f0ec1e510e3a1a58f5ad12dd2217 Author: Nicolas Clapies Date: Wed May 5 12:54:24 2004 +0000 add soap enveloping method in LassoNode lasso/xml/xml.c | 31 +++++++++++++++++++++++++++++++ lasso/xml/xml.h | 3 +++ 2 files changed, 34 insertions(+) commit 9eb461b73b46bccabbf257db2a2d0ffac71c4266 Author: Nicolas Clapies Date: Wed May 5 12:53:32 2004 +0000 delete lasso_protocol_export_to_soap() function lasso/Attic/protocols/protocols.c | 15 --------------- lasso/Attic/protocols/protocols.h | 2 -- 2 files changed, 17 deletions(-) commit 92196b4c30366efca9470babf8da8bb7a449c6f6 Author: Valery Febvre Date: Wed May 5 01:12:20 2004 +0000 Initail commit python/xml/py_lib_authentication_statement.c | 68 ++++++++++++++++++++++++++++ python/xml/py_lib_authentication_statement.h | 42 +++++++++++++++++ 2 files changed, 110 insertions(+) commit 7005e9465c1761dc032fb2a131f3ba2b371928d0 Author: Valery Febvre Date: Wed May 5 01:11:14 2004 +0000 a new constructor - lasso_authn_request_new_from_query() lasso/Attic/protocols/authn_request.c | 145 ++++++++++++++++++++++++++++++++++ lasso/Attic/protocols/authn_request.h | 5 +- 2 files changed, 148 insertions(+), 2 deletions(-) commit edeb4c17eca3568acd2bdc359003ff9c60d61ab7 Author: Valery Febvre Date: Wed May 5 01:04:13 2004 +0000 a big bug fixes in lasso_query_to_dict() lasso/xml/tools.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) commit f8d8e5d42a48111244f87e8359d10cf23545a6bf Author: Nicolas Clapies Date: Tue May 4 16:45:00 2004 +0000 minor updates lasso/Attic/protocols/logout_request.c | 52 +++++++++++++++++----------------- 1 file changed, 26 insertions(+), 26 deletions(-) commit 34f03db26929031eee05266c7eef9b4306b69750 Author: Nicolas Clapies Date: Tue May 4 14:45:18 2004 +0000 add constructors for LogoutRequest and LogoutResponse lasso/Attic/protocols/logout_request.c | 154 ++++++++++++++++++----- lasso/Attic/protocols/logout_request.h | 10 +- lasso/Attic/protocols/logout_response.c | 216 +++++++++++++++++++++++++------- lasso/Attic/protocols/logout_response.h | 21 +++- 4 files changed, 313 insertions(+), 88 deletions(-) commit 52973a4ff317e26b8d5dc07496f293fc8e1ccdc2 Author: Nicolas Clapies Date: Tue May 4 14:28:34 2004 +0000 add function to build a soap-enveloped lasso node lasso/Attic/protocols/protocols.c | 15 +++++++++++++++ lasso/Attic/protocols/protocols.h | 4 ++++ 2 files changed, 19 insertions(+) commit 1205203bea9ebb3bbefa4dc8bd343b2b53bddb0f Author: Nicolas Clapies Date: Tue May 4 12:02:07 2004 +0000 initial version lasso/xml/soap-env_body.c | 101 +++++++++++++++++++++++++++++++++++++++++ lasso/xml/soap-env_body.h | 62 +++++++++++++++++++++++++ lasso/xml/soap-env_envelope.c | 102 ++++++++++++++++++++++++++++++++++++++++++ lasso/xml/soap-env_envelope.h | 63 ++++++++++++++++++++++++++ 4 files changed, 328 insertions(+) commit cc22b545da06b727494a568d14af05df929bb1ac Author: Nicolas Clapies Date: Mon May 3 15:12:46 2004 +0000 update makefile.am for soap lasso/xml/Makefile.am | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) commit 53e4eaa5a121c40cc2ce61a657072e973e19b869 Author: Nicolas Clapies Date: Mon May 3 15:12:17 2004 +0000 add constants for soap lasso/xml/strings.c | 8 ++++++++ lasso/xml/strings.h | 8 ++++++++ 2 files changed, 16 insertions(+) commit 843d643b20193f69afea99df09c17fd9dacffd66 Author: Valery Febvre Date: Mon May 3 15:08:25 2004 +0000 *** empty log message *** lasso/xml/strings.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 61cd21f5995dffaaa5567cf747a8ec94cc851c97 Author: Valery Febvre Date: Mon May 3 14:40:16 2004 +0000 4 new SAML Confirmation methods lasso/xml/strings.c | 5 +++++ lasso/xml/strings.h | 6 ++++++ 2 files changed, 11 insertions(+) commit fc210ac14ab5f7bf0e20b74e928fd44f316a3623 Author: Valery Febvre Date: Mon May 3 14:25:17 2004 +0000 *** empty log message *** lasso/Attic/protocols/logout_request.c | 12 ++++++------ lasso/Attic/protocols/name_identifier_mapping_request.c | 12 ++++++------ python/lasso.py | 8 ++++---- python/protocols/py_logout_request.c | 4 ++-- python/protocols/py_name_identifier_mapping_request.c | 4 ++-- 5 files changed, 20 insertions(+), 20 deletions(-) commit 241fd7054772ff526eb8ac6fc53cf26211f39d70 Author: Valery Febvre Date: Mon May 3 10:26:12 2004 +0000 *** empty log message *** lasso/Attic/protocols/authn_response.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) commit d0c8a32a38b5ad126350e283de27e11d57655eb4 Author: Valery Febvre Date: Mon May 3 09:38:44 2004 +0000 Methods set_relayState() and set_nameIDPolicy() added in LibAuthnRequest class python/lasso.py | 6 ++++++ python/lassomod.c | 2 ++ python/xml/py_lib_authn_request.c | 36 ++++++++++++++++++++++++++++++++++++ python/xml/py_lib_authn_request.h | 2 ++ 4 files changed, 46 insertions(+) commit 464e5d2777f7f5441f62fba3912ffb8cda74d37f Author: Valery Febvre Date: Sun May 2 22:30:06 2004 +0000 last version which demonstrates an Authentication Request/Response (more comments) python/examples/test.py | 52 ++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 49 insertions(+), 3 deletions(-) commit 330934458a3644a7021678bccc59221adf59f47a Author: Valery Febvre Date: Sun May 2 22:25:37 2004 +0000 Too many changes, sorry python/lasso.py | 535 +++++++++++++++++++++++++---------------------------- python/lassomod.c | 131 ++++++++----- python/py_lasso.c | 5 +- python/py_lasso.h | 2 +- python/setup.py | 20 +- python/wrap_objs.c | 2 +- 6 files changed, 364 insertions(+), 331 deletions(-) commit fadb14e123c3f661d79cfca4192985bfaf1d5bb9 Author: Valery Febvre Date: Sun May 2 22:19:01 2004 +0000 Many many changes python/protocols/py_authn_request.c | 23 ++++-- python/protocols/py_authn_request.h | 5 +- .../py_federation_termination_notification.c | 64 ++++----------- .../py_federation_termination_notification.h | 8 +- python/protocols/py_logout_request.c | 90 ++++---------------- python/protocols/py_logout_request.h | 10 +-- python/protocols/py_logout_response.c | 49 ++++------- python/protocols/py_logout_response.h | 7 +- .../protocols/py_name_identifier_mapping_request.c | 61 ++++---------- .../protocols/py_name_identifier_mapping_request.h | 12 +-- .../py_name_identifier_mapping_response.c | 45 ++++------ .../py_name_identifier_mapping_response.h | 7 +- .../py_register_name_identifier_request.c | 95 ++++++++-------------- .../py_register_name_identifier_request.h | 8 +- .../py_register_name_identifier_response.c | 46 ++++------- .../py_register_name_identifier_response.h | 7 +- 16 files changed, 175 insertions(+), 362 deletions(-) commit 290e743aa70ca648d9e252209130aaa2fe1c1c2d Author: Valery Febvre Date: Sun May 2 22:11:49 2004 +0000 only cosmetic lasso/xml/lib_authn_request.c | 2 +- lasso/xml/lib_logout_request.c | 20 ++++++++++---------- lasso/xml/lib_logout_request.h | 8 ++++---- lasso/xml/saml_name_identifier.c | 16 ++++++++-------- lasso/xml/saml_name_identifier.h | 6 +++--- 5 files changed, 26 insertions(+), 26 deletions(-) commit 8b78246a863ddeda5f64d7d1652a646acf825ac3 Author: Valery Febvre Date: Sun May 2 22:07:29 2004 +0000 Funct lasso_node_set_node() renamed -> lasso_node_set_xmlNode() lasso/xml/ds_signature.c | 2 +- lasso/xml/xml.c | 55 ++++++++++++++++++++++++------------------------ lasso/xml/xml.h | 4 ++-- 3 files changed, 30 insertions(+), 31 deletions(-) commit b7bf15e57a21d38a3a44687b5f8fd4c2067794f8 Author: Valery Febvre Date: Sun May 2 22:00:46 2004 +0000 cosmetic .../protocols/federation_termination_notification.c | 1 - lasso/Attic/protocols/logout_response.c | 1 + .../Attic/protocols/register_name_identifier_request.c | 18 +++++++++--------- .../protocols/register_name_identifier_response.c | 17 +++++++++++------ 4 files changed, 21 insertions(+), 16 deletions(-) commit d73bc496013cb44307f01716a1f0a9e3f9a261d0 Author: Valery Febvre Date: Sun May 2 21:57:15 2004 +0000 3 LassoAuthnRequest replaced by LassoRegisterNameIdentifierRequest lasso/Attic/protocols/register_name_identifier_request.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit fc6b86bcbee58eb3a56555ded0ca2085a3b40dc7 Author: Valery Febvre Date: Sun May 2 21:51:09 2004 +0000 a bad cast fix lasso/Attic/protocols/name_identifier_mapping_response.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) commit b4d1094c1e4def357062bc17397250d379335f48 Author: Valery Febvre Date: Sun May 2 21:48:10 2004 +0000 In funct name_identifier_mapping_request_new(): args providerID and nameIdentifier : required args nameQualifier and format : optional .../protocols/name_identifier_mapping_request.c | 23 +++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) commit 0eee01cfa62dcbd451cad607b1caa5b99165937a Author: Valery Febvre Date: Sun May 2 21:43:18 2004 +0000 In funct logout_request_new(): args providerID and nameIdentifier : required args nameQualifier and format : optional lasso/Attic/protocols/logout_request.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) commit 87eabaee6a0ddb68f54d25c2caf65c93ac77ea3e Author: Valery Febvre Date: Sun May 2 21:31:35 2004 +0000 Removed funct lasso_authn_response_get_protocolProfile() Added funct lasso_authn_response_process_authentication_result() 3 args removed in lasso_authn_response_new() lasso/Attic/protocols/authn_response.c | 46 ++++++++++++++++++---------------- lasso/Attic/protocols/authn_response.h | 30 +++++++++++----------- 2 files changed, 39 insertions(+), 37 deletions(-) commit acd876c5ecf696eebe8d92aba25b21f8e127b60d Author: Valery Febvre Date: Sun May 2 21:12:00 2004 +0000 nico added to authors python/xml/py_xml.c | 3 ++- python/xml/py_xml.h | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) commit 15fe54cf78177b462ffbbbca46db568470eef0cb Author: Valery Febvre Date: Sun May 2 20:58:33 2004 +0000 Initial commit python/protocols/elements/py_assertion.c | 59 ++++++++ python/protocols/elements/py_assertion.h | 41 +++++ .../elements/py_authentication_statement.c | 77 ++++++++++ .../elements/py_authentication_statement.h | 41 +++++ python/protocols/py_authn_response.c | 167 +++++++++++++++++++++ python/protocols/py_authn_response.h | 47 ++++++ python/xml/py_lib_authn_request.c | 104 +++++++++++++ python/xml/py_lib_authn_request.h | 44 ++++++ .../py_lib_federation_termination_notification.c | 68 +++++++++ .../py_lib_federation_termination_notification.h | 42 ++++++ python/xml/py_lib_logout_request.c | 140 +++++++++++++++++ python/xml/py_lib_logout_request.h | 46 ++++++ .../xml/py_lib_name_identifier_mapping_request.c | 68 +++++++++ .../xml/py_lib_name_identifier_mapping_request.h | 42 ++++++ .../xml/py_lib_register_name_identifier_request.c | 68 +++++++++ .../xml/py_lib_register_name_identifier_request.h | 42 ++++++ python/xml/py_saml_assertion.c | 68 +++++++++ python/xml/py_saml_assertion.h | 42 ++++++ python/xml/py_saml_authentication_statement.c | 50 ++++++ python/xml/py_saml_authentication_statement.h | 41 +++++ python/xml/py_saml_name_identifier.c | 94 ++++++++++++ python/xml/py_saml_name_identifier.h | 43 ++++++ 22 files changed, 1434 insertions(+) commit 071ee4be43259b82ee49b6a7c49049e29f76ac16 Author: Valery Febvre Date: Sun May 2 20:45:42 2004 +0000 Added funct lasso_authn_request_get_protocolProfile() lasso/Attic/protocols/authn_request.c | 16 ++++++++++++++++ lasso/Attic/protocols/authn_request.h | 20 ++++++++++++-------- 2 files changed, 28 insertions(+), 8 deletions(-) commit 0cb94ccbe4819e1684ea96fdd30be6b6746c93df Author: Valery Febvre Date: Thu Apr 29 02:08:03 2004 +0000 #include fix python/wrap_objs.h | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) commit 270eddff857fd13be3448f30a197f85c5b3964ad Author: Valery Febvre Date: Thu Apr 29 01:57:11 2004 +0000 *** empty log message *** python/examples/test.py | 56 +++++++------------------------------------------ 1 file changed, 8 insertions(+), 48 deletions(-) commit 9f5d656f99c9cba9c4a9ccef2bae822b8110bfb4 Author: Valery Febvre Date: Thu Apr 29 01:56:34 2004 +0000 AuthnRequest added python/lasso.py | 53 ++++++++++++++++++----------------------------------- python/lassomod.c | 21 +++++++++++++-------- python/setup.py | 9 +++++---- 3 files changed, 36 insertions(+), 47 deletions(-) commit e10d97282f31c10f292b5c4d10c89cebf616df58 Author: Valery Febvre Date: Thu Apr 29 01:51:19 2004 +0000 3 methods and 1 funct added lasso/Attic/protocols/authn_response.c | 148 +++++++++++++++++++++++++++------ lasso/Attic/protocols/authn_response.h | 31 +++++-- 2 files changed, 145 insertions(+), 34 deletions(-) commit 03c0b215c6f8b5fc7f724498c7fb5f81987cdd01 Author: Valery Febvre Date: Thu Apr 29 01:46:33 2004 +0000 Initial commit python/protocols/py_authn_request.c | 100 ++++++++++++++++++++++++++++++++++++ python/protocols/py_authn_request.h | 42 +++++++++++++++ 2 files changed, 142 insertions(+) commit 6dfee05214d86dc3081d2b0d6f3f1caa4e421dec Author: Valery Febvre Date: Wed Apr 28 21:49:07 2004 +0000 a new funct added: lasso_query_get_value() lasso/xml/tools.c | 39 +++++++++++++++++++++++++++++++++++---- lasso/xml/tools.h | 35 ++++++++++++++++++++--------------- 2 files changed, 55 insertions(+), 19 deletions(-) commit 0807e6fc8ee944728f91b51ad0399d74fb8013b0 Author: Valery Febvre Date: Wed Apr 28 15:53:31 2004 +0000 #include replaced by #include lasso/xml/strings.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 158a8769ad497d35d8e6805d2328e4dbf0ee6785 Author: Valery Febvre Date: Wed Apr 28 15:52:14 2004 +0000 lasso_str_verify() renamed -> lasso_query_verify_signature() lasso/xml/tools.c | 155 ++++++++++++++++++++++++++++-------------------------- lasso/xml/tools.h | 45 ++++++++++------ 2 files changed, 109 insertions(+), 91 deletions(-) commit ceaf16d41334ab3bea6fbb9aadcbe4b5495bc9ce Author: Valery Febvre Date: Wed Apr 28 14:28:35 2004 +0000 *** empty log message *** lasso/Attic/protocols/protocols.c | 77 --------------------------------------- lasso/Attic/protocols/protocols.h | 21 ----------- 2 files changed, 98 deletions(-) commit 2f6fc613558c72c283106993cba5fbd39db32ddd Author: Valery Febvre Date: Wed Apr 28 10:26:17 2004 +0000 *** empty log message *** python/generator_lasso_strings.py | 5 +++-- python/lasso_strings.py | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) commit 1c4f154e2a5666e59675bf62d2ada178bedb2e9f Author: Valery Febvre Date: Wed Apr 28 00:11:19 2004 +0000 *** empty log message *** lasso/Attic/protocols/Makefile.am | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) commit 075c49b5371052d0d0d055d3f77fdf00dc4a2060 Author: Valery Febvre Date: Tue Apr 27 23:46:16 2004 +0000 lasso/protocols/elements/Makefile added configure.ac | 1 + 1 file changed, 1 insertion(+) commit 2918460bf597b3ea14bc4e09d5e71cdd271b62f5 Author: Valery Febvre Date: Tue Apr 27 23:45:04 2004 +0000 Initial commit lasso/Attic/protocols/elements/.cvsignore | 6 + lasso/Attic/protocols/elements/Makefile.am | 21 ++++ lasso/Attic/protocols/elements/assertion.c | 97 ++++++++++++++++ lasso/Attic/protocols/elements/assertion.h | 63 +++++++++++ .../protocols/elements/authentication_statement.c | 126 +++++++++++++++++++++ .../protocols/elements/authentication_statement.h | 71 ++++++++++++ 6 files changed, 384 insertions(+) commit d961d62221220e82732e2fc5c9cff4ab718ac4de Author: Valery Febvre Date: Tue Apr 27 23:36:01 2004 +0000 *** empty log message *** lasso/Attic/protocols/protocol.c | 141 --------------------------------------- lasso/Attic/protocols/protocol.h | 76 --------------------- 2 files changed, 217 deletions(-) commit 9c2cfea54036ec7419a637350f6f0fc146ff87ff Author: Nicolas Clapies Date: Tue Apr 27 17:21:30 2004 +0000 add support for binding of NameIdentifierMapping python/setup.py | 2 ++ 1 file changed, 2 insertions(+) commit 6f1ffb6de23ab0c05f0eb7d1b4119f73a58d8bd8 Author: Nicolas Clapies Date: Tue Apr 27 17:20:36 2004 +0000 add NameIdentifierMappingRequest/Response class and binding lasso/Attic/protocols/Makefile.am | 4 + .../protocols/name_identifier_mapping_request.c | 107 +++++++++++++++++++ .../protocols/name_identifier_mapping_request.h | 65 ++++++++++++ .../protocols/name_identifier_mapping_response.c | 116 +++++++++++++++++++++ .../protocols/name_identifier_mapping_response.h | 64 ++++++++++++ python/lasso.py | 65 ++++++++++++ python/lassomod.c | 11 ++ .../protocols/py_name_identifier_mapping_request.c | 93 +++++++++++++++++ .../protocols/py_name_identifier_mapping_request.h | 47 +++++++++ .../py_name_identifier_mapping_response.c | 78 ++++++++++++++ .../py_name_identifier_mapping_response.h | 41 ++++++++ 11 files changed, 691 insertions(+) commit 22e74ede81046574292d305a1bc1f123491c36d0 Author: Nicolas Clapies Date: Tue Apr 27 15:34:34 2004 +0000 add optional attribute in FederationTerminationNotification python/lasso.py | 5 +++++ python/lassomod.c | 2 +- python/protocols/py_federation_termination_notification.c | 14 ++++++++++++++ python/protocols/py_federation_termination_notification.h | 1 + 4 files changed, 21 insertions(+), 1 deletion(-) commit e4746e265e380cedc609fb53195c704dcd675920 Author: Valery Febvre Date: Tue Apr 27 15:30:02 2004 +0000 Fixed a big boulette lasso/Attic/protocols/authn_response.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit b95491f86701a7ec23c95f0b964626ece40a4202 Author: Nicolas Clapies Date: Tue Apr 27 15:02:09 2004 +0000 delete files from cvs lasso/Attic/protocols/logout.c | 284 ----------------------- lasso/Attic/protocols/logout.h | 75 ------ lasso/Attic/protocols/register_name_identifier.c | 195 ---------------- lasso/Attic/protocols/register_name_identifier.h | 58 ----- 4 files changed, 612 deletions(-) commit 6cfd865e064cf40f1957e92abad4c1eb21105fd5 Author: Valery Febvre Date: Tue Apr 27 14:56:57 2004 +0000 *** empty log message *** lasso/Attic/protocols/Makefile.am | 15 ++++++--- lasso/Attic/protocols/authn_request.c | 2 +- lasso/Attic/protocols/authn_request.h | 6 ++-- lasso/Attic/protocols/authn_response.c | 60 +++++++++++++-------------------- lasso/Attic/protocols/authn_response.h | 13 ++++--- lasso/Attic/protocols/logout_request.c | 10 +++--- lasso/Attic/protocols/logout_response.c | 9 +++-- 7 files changed, 58 insertions(+), 57 deletions(-) commit 340881c5858f1a3debbb8c7ec1fd592428911b8b Author: Nicolas Clapies Date: Tue Apr 27 14:54:39 2004 +0000 add optional element RelayState lasso/Attic/protocols/register_name_identifier_response.c | 7 ++++++- python/lasso.py | 4 ++++ python/lassomod.c | 1 + python/protocols/py_register_name_identifier_request.c | 14 ++++++++++++++ python/protocols/py_register_name_identifier_request.h | 1 + 5 files changed, 26 insertions(+), 1 deletion(-) commit 7d5c442cc20fd40ea4784682c24fd4f8945b63a0 Author: Nicolas Clapies Date: Tue Apr 27 14:36:18 2004 +0000 add optional element and attribute for LogoutRequest/Response lasso/Attic/protocols/logout_response.c | 7 +++++- python/lasso.py | 11 ++++++++- python/lassomod.c | 8 ++++-- python/protocols/py_logout_request.c | 43 +++++++++++++++++++++++++++++++++ python/protocols/py_logout_request.h | 5 ++++ 5 files changed, 70 insertions(+), 4 deletions(-) commit 02ff9d7733735224d4f7e1580dadee0218e7b7e8 Author: Valery Febvre Date: Tue Apr 27 14:07:48 2004 +0000 type_name removed in private struct lasso/xml/xml.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) commit 115f0058a458098d8327ceaeeb95d919850faa93 Author: Valery Febvre Date: Tue Apr 27 14:04:31 2004 +0000 *** empty log message *** ..._federation_authn_request.c => authn_request.c} | 2 +- ..._federation_authn_request.h => authn_request.h} | 6 +- lasso/Attic/protocols/authn_response.c | 156 +++++++++++++++++++++ lasso/Attic/protocols/authn_response.h | 64 +++++++++ lasso/Attic/protocols/protocols.c | 103 ++++++++++++++ lasso/Attic/protocols/protocols.h | 13 ++ 6 files changed, 340 insertions(+), 4 deletions(-) commit c30649b1c4577bb10c62ccce85e62db889e3b1a0 Author: Nicolas Clapies Date: Tue Apr 27 13:35:41 2004 +0000 add fonction to change names of attributes in identitiers .../protocols/register_name_identifier_request.c | 24 +++++++++++++++++++++ .../protocols/register_name_identifier_request.h | 25 ++++++++++++---------- python/lasso.py | 3 +++ python/lassomod.c | 2 ++ .../py_register_name_identifier_request.c | 12 +++++++++++ .../py_register_name_identifier_request.h | 1 + 6 files changed, 56 insertions(+), 11 deletions(-) commit a8d4a678963c6f693fc0ed90e1a6e4151ecb1150 Author: Valery Febvre Date: Tue Apr 27 13:28:33 2004 +0000 Memory leaks fixed again lasso/xml/xml.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) commit b83db4d9de88d3af8f5baf430cd5f985d291a3d7 Author: Valery Febvre Date: Tue Apr 27 13:03:47 2004 +0000 Memory leaks fixed lasso/xml/tools.c | 36 +++++++++++++++------- lasso/xml/xml.c | 89 +++++++++++++++++++++++++++++++++---------------------- 2 files changed, 79 insertions(+), 46 deletions(-) commit e3e8147360b836696365be8f29b1cccfeaf51830 Author: Nicolas Clapies Date: Tue Apr 27 09:38:34 2004 +0000 remove code changing name of attributes in IDP/SP/OldProvidedNameIdentifier lasso/Attic/protocols/register_name_identifier_request.c | 6 ------ 1 file changed, 6 deletions(-) commit 8626930c9bcecfd2fd65e21ce7cae3c4e1eee38f Author: Nicolas Clapies Date: Tue Apr 27 09:36:54 2004 +0000 remove files python/protocols/py_logout.c | 184 ------------------------- python/protocols/py_logout.h | 54 -------- python/protocols/py_register_name_identifier.c | 110 --------------- python/protocols/py_register_name_identifier.h | 42 ------ 4 files changed, 390 deletions(-) commit 4690f331ef2bdce1bc4d1b945ab4ad9e4405a9e5 Author: Nicolas Clapies Date: Tue Apr 27 09:35:08 2004 +0000 initial version .../py_federation_termination_notification.c | 80 ++++++++++++++++++ .../py_federation_termination_notification.h | 42 ++++++++++ python/protocols/py_logout_request.c | 80 ++++++++++++++++++ python/protocols/py_logout_request.h | 42 ++++++++++ python/protocols/py_logout_response.c | 80 ++++++++++++++++++ python/protocols/py_logout_response.h | 41 +++++++++ .../py_register_name_identifier_request.c | 96 ++++++++++++++++++++++ .../py_register_name_identifier_request.h | 42 ++++++++++ .../py_register_name_identifier_response.c | 80 ++++++++++++++++++ .../py_register_name_identifier_response.h | 42 ++++++++++ 10 files changed, 625 insertions(+) commit 626ccdc6a7ebc47b2365741171550d61c9249a34 Author: Nicolas Clapies Date: Tue Apr 27 09:34:22 2004 +0000 add LogoutRequest/Response, FederationTerminationNotification, RegisterNameIdentifierRequest/Response classes in python python/lasso.py | 167 +++++++++++++++++++++++++++++++++++++----------------- python/lassomod.c | 64 ++++++++++++--------- python/setup.py | 8 ++- 3 files changed, 156 insertions(+), 83 deletions(-) commit 4ba332309f5790d8aea993c42479fc752dc7355b Author: Valery Febvre Date: Mon Apr 26 14:13:23 2004 +0000 8 SatusCode were added lasso/xml/strings.c | 12 ++++++++++-- lasso/xml/strings.h | 8 ++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) commit c16cfbf44705e261ed84e3d6d6b3796c3bd34b68 Author: Nicolas Clapies Date: Mon Apr 26 13:44:02 2004 +0000 build the RegisterNameIdentifierRequest with specific names for name identifiers attributes lasso/Attic/protocols/register_name_identifier_request.c | 6 ++++++ 1 file changed, 6 insertions(+) commit 79d9ddce35751928fe1b48df00a293b40c8c0db4 Author: Nicolas Clapies Date: Mon Apr 26 09:55:25 2004 +0000 add federation termination notification high level class lasso/Attic/protocols/Makefile.am | 12 +- .../federation_termination_notification.c | 157 ++++++++++++--------- .../federation_termination_notification.h | 54 ++++--- 3 files changed, 137 insertions(+), 86 deletions(-) commit 8aa5c00cea4b2ad6b88cd9f65f704e5f6bdea0cb Author: Nicolas Clapies Date: Mon Apr 26 09:39:44 2004 +0000 add register_name_identifier.h/.c lasso/Attic/protocols/Makefile.am | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit 3ebb322c720aeb2954cf22afec311eb96d9f1a75 Author: Nicolas Clapies Date: Mon Apr 26 09:36:55 2004 +0000 initial version .../protocols/register_name_identifier_request.c | 117 +++++++++++++++++++++ .../protocols/register_name_identifier_request.h | 71 +++++++++++++ .../protocols/register_name_identifier_response.c | 112 ++++++++++++++++++++ .../protocols/register_name_identifier_response.h | 64 +++++++++++ 4 files changed, 364 insertions(+) commit 1e702c7d5b797285359395f2e0914a1d26727fb4 Author: Nicolas Clapies Date: Mon Apr 26 08:53:35 2004 +0000 fix conflict in name declaration of functions for name identifiers settings lasso/xml/lib_register_name_identifier_request.c | 42 ++++-------------------- lasso/xml/lib_register_name_identifier_request.h | 4 --- 2 files changed, 6 insertions(+), 40 deletions(-) commit 6dc29805e3c7af5af1af94a1299e432747813df0 Author: Nicolas Clapies Date: Fri Apr 23 10:08:36 2004 +0000 add LogoutRequest and LogoutResponse lasso/Attic/protocols/Makefile.am | 16 ++--- lasso/Attic/protocols/logout_request.c | 105 ++++++++++++++++++++++++++++++ lasso/Attic/protocols/logout_request.h | 65 ++++++++++++++++++ lasso/Attic/protocols/logout_response.c | 112 ++++++++++++++++++++++++++++++++ lasso/Attic/protocols/logout_response.h | 64 ++++++++++++++++++ 5 files changed, 352 insertions(+), 10 deletions(-) commit fc877f8e48b4cf349f97deb3d070550a29d941e0 Author: Valery Febvre Date: Thu Apr 22 12:48:39 2004 +0000 previously named ssoaf_authn_request.c and ssoaf_authn_request.h .../protocols/sso_and_federation_authn_request.c | 158 +++++++++++++++++++++ .../protocols/sso_and_federation_authn_request.h | 70 +++++++++ 2 files changed, 228 insertions(+) commit a0fa9940fab12e048d192c101c1e5888ad9e0420 Author: Valery Febvre Date: Thu Apr 22 12:47:42 2004 +0000 renamed lasso/Attic/protocols/ssoaf_authn_request.c | 158 ---------------------------- lasso/Attic/protocols/ssoaf_authn_request.h | 70 ------------ 2 files changed, 228 deletions(-) commit 3d6ff0eda8d69f0d072a4d7e97e2a13d609cd9fa Author: Valery Febvre Date: Thu Apr 22 01:56:33 2004 +0000 *** empty log message *** lasso/Attic/protocols/ssoaf_authn_request.c | 129 ++++------------------------ lasso/Attic/protocols/ssoaf_authn_request.h | 44 +++------- 2 files changed, 30 insertions(+), 143 deletions(-) commit 16dd4983eb0375d2851c7259f048422869965b3e Author: Valery Febvre Date: Wed Apr 21 23:06:55 2004 +0000 strings type changed: gchar* -> xmlChar* lasso/xml/strings.c | 92 +++++++++++++++++++++++++-------------------------- lasso/xml/strings.h | 94 ++++++++++++++++++++++++++--------------------------- 2 files changed, 93 insertions(+), 93 deletions(-) commit 0700378832be3c66cc9156a22f097e668865cea8 Author: Valery Febvre Date: Wed Apr 21 23:03:18 2004 +0000 added ssoaf_authn_request.c, ssoaf_authn_request.h, protocol.c and protocol.h lasso/Attic/protocols/Makefile.am | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) commit f6a5d9645b6621986a6af0171b41beb9a7b9a373 Author: Valery Febvre Date: Wed Apr 21 23:00:04 2004 +0000 nico added in authors list lasso/Attic/protocols/protocols.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 2ad5d6c67e71fa9c0faab1a0eb9d32ac96de09b9 Author: Valery Febvre Date: Wed Apr 21 22:56:45 2004 +0000 Initial commit lasso/Attic/protocols/protocol.c | 141 ++++++++++++++++ lasso/Attic/protocols/protocol.h | 76 +++++++++ lasso/Attic/protocols/ssoaf_authn_request.c | 251 ++++++++++++++++++++++++++++ lasso/Attic/protocols/ssoaf_authn_request.h | 90 ++++++++++ 4 files changed, 558 insertions(+) commit 080c83af7e508d6565299f5b2b572a97d80d137c Author: Valery Febvre Date: Wed Apr 21 22:13:47 2004 +0000 *** empty log message *** python/examples/test.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit 11d9dc4e60e7d1ebf5468c95c4446ca7fff9eb5f Author: Nicolas Clapies Date: Tue Apr 20 11:50:36 2004 +0000 add RegisterNameIdentifierRequest class python/lasso.py | 34 ++++++++++++++++++++++++++++++++++ python/lassomod.c | 5 +++++ python/setup.py | 1 + 3 files changed, 40 insertions(+) commit 85b629d971c7ba1fd0cc4823787acf90ae2f2cb2 Author: Nicolas Clapies Date: Tue Apr 20 11:48:55 2004 +0000 initial version python/protocols/py_register_name_identifier.c | 110 +++++++++++++++++++++++++ python/protocols/py_register_name_identifier.h | 42 ++++++++++ 2 files changed, 152 insertions(+) commit 7659c8fb33aca8c3b9cbf8045f0d3388612600f5 Author: Nicolas Clapies Date: Tue Apr 20 11:47:59 2004 +0000 rename functions for request creation lasso/Attic/protocols/register_name_identifier.c | 116 ++++++++++++----------- lasso/Attic/protocols/register_name_identifier.h | 48 ++++------ 2 files changed, 80 insertions(+), 84 deletions(-) commit 9328f62273d79522a78681e5630aa50ea53ab201 Author: Valery Febvre Date: Tue Apr 20 10:11:24 2004 +0000 make clean updated docs/reference/Makefile.am | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) commit bbe551eadb274ad2178de917b3a6b5a663aacca6 Author: Valery Febvre Date: Tue Apr 20 01:05:28 2004 +0000 2 methods comments fixed lasso/xml/ds_signature.c | 2 ++ lasso/xml/saml_name_identifier.c | 1 + 2 files changed, 3 insertions(+) commit 1de9d26ab4673e2a0dd2e317cc3371cf58c6819d Author: Valery Febvre Date: Tue Apr 20 01:00:01 2004 +0000 First test version docs/reference/lasso.sgml | 60 ++++++++++++++++++++++++++++++----------------- 1 file changed, 38 insertions(+), 22 deletions(-) commit 04f1a25ec614f7e02d280d41198c0cb00924f9bc Author: Valery Febvre Date: Tue Apr 20 00:21:18 2004 +0000 config.h.in added .cvsignore | 1 + 1 file changed, 1 insertion(+) commit 89deaf954e8bfbe4ec8e260580541473189260e6 Author: Valery Febvre Date: Mon Apr 19 23:54:44 2004 +0000 Initial commit docs/reference/lasso-sections.txt | 906 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 906 insertions(+) commit 63fa7413d0bebc51499ba59545abe9a8db9ce5bc Author: Valery Febvre Date: Mon Apr 19 23:53:55 2004 +0000 lasso-sections.txt removed docs/reference/.cvsignore | 1 - 1 file changed, 1 deletion(-) commit 30f595690de3445684350404c067b97eb141b2db Author: Valery Febvre Date: Mon Apr 19 17:04:50 2004 +0000 *** empty log message *** .cvsignore | 1 + docs/reference/.cvsignore | 1 + docs/reference/Makefile.am | 3 --- 3 files changed, 2 insertions(+), 3 deletions(-) commit d1e9fbb356eeb2e92ba075a25e109733b07eff00 Author: Nicolas Clapies Date: Mon Apr 19 17:02:44 2004 +0000 add NameIdentifier content in constructors lasso/xml/lib_old_provided_name_identifier.c | 13 +++++++++++-- lasso/xml/lib_old_provided_name_identifier.h | 2 +- lasso/xml/lib_sp_provided_name_identifier.c | 13 +++++++++++-- lasso/xml/lib_sp_provided_name_identifier.h | 2 +- 4 files changed, 24 insertions(+), 6 deletions(-) commit 5b209e3f1513431eb17c47f91ed728be0f50700a Author: Valery Febvre Date: Mon Apr 19 16:56:59 2004 +0000 *** empty log message *** docs/reference/.cvsignore | 17 +++++++++++++++++ docs/reference/Makefile.am | 3 +-- docs/reference/lasso.types | 25 +++++++++++++++++++++++++ 3 files changed, 43 insertions(+), 2 deletions(-) commit 40e7480327daae7fb3da0fe0c354cf010b4affcc Author: Nicolas Clapies Date: Mon Apr 19 16:51:04 2004 +0000 fix = add support of cplusplus lasso/Attic/protocols/logout.h | 8 ++++++++ 1 file changed, 8 insertions(+) commit 8dff393969fa08a7db967b9c35ffbf138a683999 Author: Nicolas Clapies Date: Mon Apr 19 16:17:56 2004 +0000 update for classes LogoutRequest and LogoutResponse python/lasso.py | 116 +++++++++++++++++++++++++++++++------------ python/lassomod.c | 4 ++ python/protocols/py_logout.c | 86 ++++++++++++++++++++++++++++++++ python/protocols/py_logout.h | 13 +++++ 4 files changed, 187 insertions(+), 32 deletions(-) commit 9aaeda1a36d580eb8f973867be5408d322477391 Author: Nicolas Clapies Date: Mon Apr 19 16:12:12 2004 +0000 update functions to create and init logout request / response lasso/Attic/protocols/logout.c | 59 +++++++++++++++++++++--------------------- lasso/Attic/protocols/logout.h | 30 ++++++++++++++------- 2 files changed, 51 insertions(+), 38 deletions(-) commit 756d86a8778a8d079a010d909be465d4a23d6af1 Author: Valery Febvre Date: Mon Apr 19 15:29:26 2004 +0000 *** empty log message *** Makefile.am | 6 +++--- configure.ac | 4 ++-- lasso.pc.in | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) commit 66f2b28ef4ec640286116f4752c19557239f75a9 Author: Valery Febvre Date: Mon Apr 19 15:22:15 2004 +0000 *** empty log message *** docs/reference/Makefile.am | 52 +++++++++------- docs/reference/lasso.sgml | 144 ++++++++++++++++++++++++++++++--------------- docs/reference/lasso.types | 34 +++++------ 3 files changed, 145 insertions(+), 85 deletions(-) commit 231a650450a1bd1e421773c41e903d67b607ee3b Author: Nicolas Clapies Date: Mon Apr 19 10:24:34 2004 +0000 add saml_response_add_assertion() function .../protocols/single_sign_on_and_federation.c | 26 ++++++++++++++++++++++ .../protocols/single_sign_on_and_federation.h | 2 ++ 2 files changed, 28 insertions(+) commit 47871da2163c016272749887e422d70829cdc752 Author: Nicolas Clapies Date: Mon Apr 19 10:16:44 2004 +0000 add add_assertion method for Response object python/lasso.py | 3 +++ python/lassomod.c | 1 + python/protocols/py_single_sign_on_and_federation.c | 14 ++++++++++++++ python/protocols/py_single_sign_on_and_federation.h | 1 + 4 files changed, 19 insertions(+) commit 871b0cd4a4a1a62a3d83b20689c593ffba15f421 Author: Valery Febvre Date: Sun Apr 18 12:51:20 2004 +0000 Added lasso.pc.in to used pkg-config .cvsignore | 1 + Makefile.am | 3 +++ configure.ac | 10 ++-------- lasso.pc.in | 11 +++++++++++ 4 files changed, 17 insertions(+), 8 deletions(-) commit 01cbb4111583cb5df4c8aad42b06d219861ce886 Author: Valery Febvre Date: Sat Apr 17 19:17:17 2004 +0000 Remove class->set_ns() useless lasso/xml/lib_logout_response.c | 2 +- lasso/xml/lib_register_name_identifier_response.c | 2 +- lasso/xml/saml_audience_restriction_condition.c | 3 +-- lasso/xml/saml_subject_statement_abstract.c | 2 +- lasso/xml/samlp_request.c | 3 +-- lasso/xml/samlp_response.c | 3 +-- 6 files changed, 6 insertions(+), 9 deletions(-) commit a672abf9cc50aa34073e1d28cd2ebf61aba4cf46 Author: Valery Febvre Date: Sat Apr 17 02:07:23 2004 +0000 Used new method set_ns() instead of new_ns() (in *_instance_init() methods) lasso/xml/lib_assertion.c | 11 +++-- lasso/xml/lib_authentication_statement.c | 9 ++-- lasso/xml/lib_authn_context.c | 8 ++-- lasso/xml/lib_authn_request.c | 8 ++-- lasso/xml/lib_authn_response.c | 9 ++-- .../xml/lib_federation_termination_notification.c | 10 ++--- lasso/xml/lib_idp_entries.c | 9 ++-- lasso/xml/lib_idp_entry.c | 9 ++-- lasso/xml/lib_idp_list.c | 9 ++-- lasso/xml/lib_idp_provided_name_identifier.c | 9 ++-- lasso/xml/lib_logout_request.c | 8 ++-- lasso/xml/lib_logout_response.c | 9 ++-- lasso/xml/lib_name_identifier_mapping_request.c | 8 ++-- lasso/xml/lib_name_identifier_mapping_response.c | 9 ++-- lasso/xml/lib_old_provided_name_identifier.c | 9 ++-- lasso/xml/lib_register_name_identifier_request.c | 48 +++++++++++----------- lasso/xml/lib_register_name_identifier_response.c | 9 ++-- lasso/xml/lib_request_authn_context.c | 9 ++-- lasso/xml/lib_scoping.c | 9 ++-- lasso/xml/lib_sp_provided_name_identifier.c | 9 ++-- lasso/xml/lib_status_response.c | 9 ++-- lasso/xml/lib_subject.c | 11 +++-- lasso/xml/saml_advice.c | 12 +++--- lasso/xml/saml_assertion.c | 10 ++--- lasso/xml/saml_audience_restriction_condition.c | 10 ++--- lasso/xml/saml_authentication_statement.c | 10 ++--- lasso/xml/saml_authority_binding.c | 10 ++--- lasso/xml/saml_condition_abstract.c | 10 ++--- lasso/xml/saml_conditions.c | 18 ++++---- lasso/xml/saml_name_identifier.c | 10 ++--- lasso/xml/saml_statement_abstract.c | 10 ++--- lasso/xml/saml_subject.c | 12 +++--- lasso/xml/saml_subject_confirmation.c | 10 ++--- lasso/xml/saml_subject_locality.c | 10 ++--- lasso/xml/saml_subject_statement_abstract.c | 10 ++--- lasso/xml/samlp_request.c | 9 ++-- lasso/xml/samlp_request_abstract.c | 12 +++--- lasso/xml/samlp_response.c | 10 ++--- lasso/xml/samlp_response_abstract.c | 10 ++--- lasso/xml/samlp_status.c | 10 ++--- lasso/xml/samlp_status_code.c | 10 ++--- 41 files changed, 211 insertions(+), 230 deletions(-) commit 68512d1070087d107d8e350e4fe11a70a02b82b5 Author: Valery Febvre Date: Sat Apr 17 02:02:18 2004 +0000 *** empty log message *** lasso/xml/ds_signature.c | 25 ++++++++++++++----------- lasso/xml/tools.c | 2 +- 2 files changed, 15 insertions(+), 12 deletions(-) commit fd34a864ec5c700856b99dd97558fa85fedd3fa2 Author: Valery Febvre Date: Sat Apr 17 00:23:13 2004 +0000 cosmetic, many g_return_* added, a new method lasso_node_set_ns() (will replaced lasso_node_new_ns()) lasso/xml/strings.c | 10 ++ lasso/xml/strings.h | 10 ++ lasso/xml/xml.c | 285 +++++++++++++++++++++++++++++++++++++++------------- lasso/xml/xml.h | 112 +++++++++++---------- 4 files changed, 295 insertions(+), 122 deletions(-) commit c428b47b09d5ee05abcdd681c6c1c32d3c1a7117 Author: Nicolas Clapies Date: Fri Apr 16 13:18:12 2004 +0000 fix : logout_request_getattr(self, name) python/lasso.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 567dc663b0d6d130e6e4d783bb3e91e9445a4aba Author: Nicolas Clapies Date: Fri Apr 16 13:01:03 2004 +0000 add lasso_request_create() declaration lasso/Attic/protocols/single_sign_on_and_federation.h | 2 ++ 1 file changed, 2 insertions(+) commit 18deb6a5bd030d6fa06cd9eaa7ed5a2b937f2d25 Author: Valery Febvre Date: Fri Apr 16 11:55:24 2004 +0000 Removed a call to fcunt lasso_samlp_response_add_assertion() in excess lasso/Attic/protocols/single_sign_on_and_federation.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit f096bdc7a0d5b8bbe1b4cfaebbdbfc1ad86540a7 Author: Nicolas Clapies Date: Fri Apr 16 10:50:21 2004 +0000 request and response definition .../protocols/py_single_sign_on_and_federation.c | 129 +++++++++++++++++++++ .../protocols/py_single_sign_on_and_federation.h | 23 ++++ 2 files changed, 152 insertions(+) commit a73b11a5d3c79cb15b06f17d29a9063e120b2ed2 Author: Nicolas Clapies Date: Fri Apr 16 10:49:49 2004 +0000 blablabla ... python/lassomod.c | 7 +++++++ 1 file changed, 7 insertions(+) commit 9d5ee25c23aa260934d26f52d4719aa4ccae4fc4 Author: Nicolas Clapies Date: Fri Apr 16 10:49:08 2004 +0000 add Request and Response class definition python/lasso.py | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) commit 751d680baa6a3d3a7e0920d307968450e5111c22 Author: Nicolas Clapies Date: Fri Apr 16 10:47:30 2004 +0000 in function lasso_authn_response_init() add issueInstant and InResponseTo .../protocols/single_sign_on_and_federation.c | 23 +++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) commit 05cb3fe07ced9b5fdd339604b3624ab5d2f4cf81 Author: Valery Febvre Date: Thu Apr 15 16:31:19 2004 +0000 *** empty log message *** lasso/xml/tools.c | 16 +++++++++------- lasso/xml/xml.c | 30 +++++++++++++++++++++++++----- 2 files changed, 34 insertions(+), 12 deletions(-) commit a7987f374fc195d0355f45054872a5589d9483ad Author: Valery Febvre Date: Thu Apr 15 16:26:04 2004 +0000 *** empty log message *** python/lasso.py | 2 +- python/xml/py_xml.c | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) commit 83b36c2a0532661699345a49ed4ba15ebef2adad Author: Valery Febvre Date: Thu Apr 15 02:42:29 2004 +0000 Clean-ups, cosmetics and memory leaks fixed lasso/xml/tools.c | 64 +++++++++++++++++++++++++++++-------------------------- lasso/xml/tools.h | 28 +++++++++++++----------- lasso/xml/xml.c | 33 +++++++++++++++++----------- lasso/xml/xml.h | 4 ++-- 4 files changed, 72 insertions(+), 57 deletions(-) commit 45bbe4077279f352938adcb0810c3c2e34fa8030 Author: Nicolas Clapies Date: Thu Apr 15 00:04:43 2004 +0000 add functions for Request and Response messages .../protocols/single_sign_on_and_federation.c | 94 +++++++++++++++++++--- .../protocols/single_sign_on_and_federation.h | 35 +++++++- 2 files changed, 116 insertions(+), 13 deletions(-) commit f4c29575250fb849a4fd1477690d180f374eb36a Author: Valery Febvre Date: Wed Apr 14 23:51:53 2004 +0000 *** empty log message *** lasso/Attic/protocols/single_sign_on_and_federation.c | 4 ++-- lasso/xml/xml.c | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) commit 7752430df64df50bf365e5f3bc8ceafd83ae2530 Author: Nicolas Clapies Date: Wed Apr 14 23:33:22 2004 +0000 delete file lasso/Attic/protocols/name_identifier.c | 53 --------------------------------- lasso/Attic/protocols/name_identifier.h | 6 ---- 2 files changed, 59 deletions(-) commit 882b422d8cae18264c11fbcbc5fc59298300a9d2 Author: Nicolas Clapies Date: Wed Apr 14 23:19:52 2004 +0000 fix : return a string the lasso_node_dump() function lasso/xml/xml.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit b3832ad6990830f083f9f3883a9e627fed49846d Author: Nicolas Clapies Date: Wed Apr 14 23:16:04 2004 +0000 add include for samlp_request.h lasso/xml/saml.h | 1 + 1 file changed, 1 insertion(+) commit 5686df753b49d59e73ab0a4722bc08783b2be555 Author: Valery Febvre Date: Wed Apr 14 16:56:42 2004 +0000 lasso_node_dump() public method now returns a string (instead of void) lasso/xml/xml.c | 9 +++++---- lasso/xml/xml.h | 4 ++-- 2 files changed, 7 insertions(+), 6 deletions(-) commit 8242ff6cecf29f55f8e4a9134f427ff3667f432d Author: Valery Febvre Date: Wed Apr 14 16:46:30 2004 +0000 Added public method lasso_node_parse_memory() lasso/xml/xml.c | 120 +++++++++++++++++++++++++++++++++----------------------- lasso/xml/xml.h | 15 ++++--- 2 files changed, 81 insertions(+), 54 deletions(-) commit 2b8c7f226d881da7eea85fb197f03000ae2f0101 Author: Valery Febvre Date: Wed Apr 14 12:14:27 2004 +0000 *** empty log message *** lasso/Attic/protocols/logout.c | 2 -- lasso/Attic/protocols/logout.h | 2 -- lasso/Attic/protocols/protocols.h | 8 -------- .../Attic/protocols/single_sign_on_and_federation.c | 20 ++++++++++++-------- .../Attic/protocols/single_sign_on_and_federation.h | 4 +--- 5 files changed, 13 insertions(+), 23 deletions(-) commit 6c29b232c028cb51f8e558ce609093ad9887b42a Author: Valery Febvre Date: Tue Apr 13 17:31:35 2004 +0000 *** empty log message *** .../federation_termination_notification.h | 2 +- lasso/Attic/protocols/logout.c | 30 ++++++++++-------- lasso/Attic/protocols/logout.h | 8 +++-- lasso/Attic/protocols/name_identifier.h | 2 +- lasso/Attic/protocols/protocols.h | 23 ++++++++------ lasso/Attic/protocols/register_name_identifier.h | 4 +-- .../protocols/single_sign_on_and_federation.c | 37 +++++++++++++++------- .../protocols/single_sign_on_and_federation.h | 12 ++++--- lasso/xml/lib_assertion.h | 2 ++ lasso/xml/lib_authentication_statement.h | 2 ++ lasso/xml/lib_authn_response.h | 1 + lasso/xml/lib_subject.h | 1 + lasso/xml/samlp_response.c | 16 +++++----- lasso/xml/samlp_response.h | 6 ++-- python/lasso.py | 2 +- 15 files changed, 90 insertions(+), 58 deletions(-) commit f98a9ea8c7d96ec6dcfc942f0bd0538f6a3b3904 Author: Nicolas Clapies Date: Tue Apr 13 14:28:07 2004 +0000 add samlp Request compilation lasso/xml/Makefile.am | 2 ++ 1 file changed, 2 insertions(+) commit eae794262b562a124c3f18fed1b1bd33af1430e7 Author: Nicolas Clapies Date: Tue Apr 13 14:27:18 2004 +0000 initial version lasso/xml/samlp_request.c | 105 ++++++++++++++++++++++++++++++++++++++++++++++ lasso/xml/samlp_request.h | 61 +++++++++++++++++++++++++++ 2 files changed, 166 insertions(+) commit d6a438d5c63099c5421d7b87679c71d1aa31017b Author: Valery Febvre Date: Tue Apr 13 13:55:05 2004 +0000 *** empty log message *** lasso/Attic/protocols/protocols.c | 18 ------------------ 1 file changed, 18 deletions(-) commit 80cf886ca2d846f187d8d3772d6f5fd17e250e9b Author: Valery Febvre Date: Tue Apr 13 13:39:25 2004 +0000 *** empty log message *** python/lassomod.c | 12 +++++++----- python/protocols/py_logout.c | 10 +++++----- python/protocols/py_logout.h | 4 +--- 3 files changed, 13 insertions(+), 13 deletions(-) commit ce7c0c4b50c0c658990185c0cbb23c5565e55a3c Author: Nicolas Clapies Date: Tue Apr 13 10:49:53 2004 +0000 add logout options compiling python/setup.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) commit d09f146e18e2238236b7edca78b9e32cac86883b Author: Valery Febvre Date: Tue Apr 13 10:47:42 2004 +0000 *** empty log message *** lasso/Attic/protocols/.cvsignore | 1 + 1 file changed, 1 insertion(+) commit a24b1768bd0843514bc3300dca70a2cd575c3131 Author: Valery Febvre Date: Tue Apr 13 10:29:42 2004 +0000 *** empty log message *** python/lasso.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) commit f1d2812a740a1463bf920e6501e14baafe632aed Author: Valery Febvre Date: Tue Apr 13 10:15:54 2004 +0000 *** empty log message *** lasso/lasso.c | 24 +++++++++++++---------- lasso/xml/xml.c | 22 +++++++++++++++++---- lasso/xml/xml.h | 11 ++++++++--- python/examples/test.py | 17 +++++++++++----- python/lassomod.c | 9 ++++++--- python/py_lasso.c | 3 ++- python/setup.py | 8 ++++---- python/wrap_objs.c | 2 +- python/wrap_objs.h | 2 +- python/xml/py_xml.c | 52 +++++++++++++++++++++++++++++++++++++++++++++++++ python/xml/py_xml.h | 3 +++ 11 files changed, 121 insertions(+), 32 deletions(-) commit da44bfe52bb580448477d8b91e59dcc6bc47e914 Author: Nicolas Clapies Date: Fri Apr 9 19:54:57 2004 +0000 initial version python/protocols/py_logout.c | 98 ++++++++++++++++++++++++++++++++++++++++++++ python/protocols/py_logout.h | 43 +++++++++++++++++++ 2 files changed, 141 insertions(+) commit 1579f751683d724c8f9aa6b986338f99a8948746 Author: Nicolas Clapies Date: Fri Apr 9 19:54:11 2004 +0000 add logout stuffs bindings python/lasso.py | 31 +++++++++++++++++++++++++++++++ python/lassomod.c | 5 +++++ 2 files changed, 36 insertions(+) commit a088f5722adcd0a2b86c6892c3ba06c16bf775f1 Author: Nicolas Clapies Date: Fri Apr 9 19:49:48 2004 +0000 first high level functions lasso/Attic/protocols/logout.c | 204 ++++++++++++++++++++++++++++++----------- lasso/Attic/protocols/logout.h | 76 +++++++++------ 2 files changed, 195 insertions(+), 85 deletions(-) commit 321fbb571cb448f481551f1bad578e3a138f81ad Author: Valery Febvre Date: Fri Apr 9 16:36:52 2004 +0000 *** empty log message *** python/examples/test.py | 2 +- python/generator_lasso_strings.py | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) commit 8ef9025c8f4b8eda9c2726f08af14eee5c48d3ee Author: Valery Febvre Date: Fri Apr 9 16:28:34 2004 +0000 Some clean-ups lasso/xml/xml.c | 59 +++++++++++++++++++++++++++++++-------------------------- lasso/xml/xml.h | 44 +++++++++++++++++++++--------------------- 2 files changed, 54 insertions(+), 49 deletions(-) commit 4de58e05b0117b770a00c250bd76f269bd668277 Author: Valery Febvre Date: Fri Apr 9 16:21:23 2004 +0000 *** empty log message *** lasso/xml/strings.c | 16 ++++++++++++++++ lasso/xml/strings.h | 16 ++++++++++++++++ 2 files changed, 32 insertions(+) commit 84100a837788ff4d04072ea0bcbd975f2abc758e Author: Valery Febvre Date: Fri Apr 9 15:16:43 2004 +0000 Added function lasso_node_verify_signature() lasso/xml/xml.c | 96 +++++++++++++++++++++++++++++++++++++++++++++++++++------ lasso/xml/xml.h | 39 +++++++++++++---------- 2 files changed, 108 insertions(+), 27 deletions(-) commit a7e093d7546a545eea0dcbc20e6f27d256d3ac49 Author: Valery Febvre Date: Thu Apr 8 15:42:36 2004 +0000 generator_lasso_strings.py python/lasso_strings.py | 68 ++++++++++++++++++++++++++++++------------------- 1 file changed, 42 insertions(+), 26 deletions(-) commit 88f8a19b60c0835c21926cc0e99fbbccf8fe3621 Author: Valery Febvre Date: Thu Apr 8 14:59:36 2004 +0000 *** empty log message *** .../protocols/single_sign_on_and_federation.c | 75 +++++++++++++++------- .../protocols/single_sign_on_and_federation.h | 4 +- lasso/xml/lib_authn_request.c | 22 +++++-- lasso/xml/lib_authn_request.h | 4 +- python/examples/test.py | 8 +-- .../protocols/py_single_sign_on_and_federation.c | 36 +++++++---- 6 files changed, 100 insertions(+), 49 deletions(-) commit cb103717a65071aefc5b2c2265d53c453a325db1 Author: Emmanuel Raviart Date: Thu Apr 8 13:29:22 2004 +0000 80 columns. python/lasso.py | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) commit 3d2a99d2ba0096930515a32a682e918f3081c039 Author: Valery Febvre Date: Thu Apr 8 13:19:52 2004 +0000 *** empty log message *** python/examples/test.py | 8 +++++--- python/lasso_strings.py | 19 +++++++++++++++++-- python/protocols/py_single_sign_on_and_federation.c | 18 +++++++++++------- 3 files changed, 33 insertions(+), 12 deletions(-) commit 5ab4384d35718496cf9eb93159dbdd0d15da63c1 Author: Valery Febvre Date: Thu Apr 8 10:41:33 2004 +0000 *** empty log message *** lasso/Attic/protocols/Makefile.am | 3 ++- lasso/Makefile.am | 1 + lasso/xml/Makefile.am | 4 +++- 3 files changed, 6 insertions(+), 2 deletions(-) commit 3bbb1e5742eee4b33e1af6543670e9340165f592 Author: Valery Febvre Date: Thu Apr 8 10:15:16 2004 +0000 *** empty log message *** python/setup.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit a914a109350e3285e6c8118644ba2162cd8632ad Author: Valery Febvre Date: Thu Apr 8 02:44:16 2004 +0000 *** empty log message *** python/examples/test.py | 33 +++- python/lasso.py | 85 ++++++++-- python/lassomod.c | 16 +- .../protocols/py_single_sign_on_and_federation.c | 172 ++++++++++++++++++++- .../protocols/py_single_sign_on_and_federation.h | 18 +++ python/py_lasso.c | 10 +- python/wrap_objs.c | 6 +- python/wrap_objs.h | 6 +- python/xml/py_xml.c | 19 +++ python/xml/py_xml.h | 1 + 10 files changed, 326 insertions(+), 40 deletions(-) commit b73d899efd03f3058b752e0f64061f1f7e308fc9 Author: Valery Febvre Date: Wed Apr 7 17:54:25 2004 +0000 *** empty log message *** .../protocols/single_sign_on_and_federation.c | 269 ++++++++++++++------- .../protocols/single_sign_on_and_federation.h | 68 +++--- lasso/xml/lib_idp_provided_name_identifier.c | 11 +- lasso/xml/lib_idp_provided_name_identifier.h | 2 +- lasso/xml/lib_subject.c | 10 +- lasso/xml/strings.c | 19 +- lasso/xml/strings.h | 19 +- python/lassomod.c | 2 +- .../protocols/py_single_sign_on_and_federation.c | 28 +-- .../protocols/py_single_sign_on_and_federation.h | 2 +- 10 files changed, 283 insertions(+), 147 deletions(-) commit 1ead00b872ee377417e71d48e7bf2d91baf3adf5 Author: Nicolas Clapies Date: Wed Apr 7 11:34:27 2004 +0000 fix constructor lasso_saml_name_identifier_new(nameIdentifier) in lasso_build_nameIdentifier lasso/Attic/protocols/name_identifier.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit d28f1cc0d5e6691948dd96bc703d57ade18f5d00 Author: Valery Febvre Date: Wed Apr 7 11:00:57 2004 +0000 *** empty log message *** lasso/Attic/protocols/single_sign_on_and_federation.c | 14 +++++++------- lasso/Attic/protocols/single_sign_on_and_federation.h | 14 +++++++------- python/protocols/py_single_sign_on_and_federation.c | 14 +++++++------- python/protocols/py_single_sign_on_and_federation.h | 8 ++++---- python/wrap_objs.c | 14 ++++++++++++++ python/wrap_objs.h | 2 ++ 6 files changed, 41 insertions(+), 25 deletions(-) commit c2c5801a663198579c5ea04fda99e4c8c655ce8f Author: Valery Febvre Date: Wed Apr 7 10:47:33 2004 +0000 *** empty log message *** .../protocols/single_sign_on_and_federation.c | 112 ++++++++++----------- .../protocols/single_sign_on_and_federation.h | 10 +- .../protocols/py_single_sign_on_and_federation.c | 4 +- 3 files changed, 63 insertions(+), 63 deletions(-) commit 9ba62ced88e2d04dce0ad05f59463be3e3d87c55 Author: Valery Febvre Date: Wed Apr 7 03:05:40 2004 +0000 *** empty log message *** python/.cvsignore | 1 + python/protocols/py_single_sign_on_and_federation.c | 3 ++- python/xml/py_xml.c | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) commit c040ec62e11b5140e52ee0f59f9fc70a94b5ac5d Author: Valery Febvre Date: Wed Apr 7 03:00:43 2004 +0000 *** empty log message *** python/examples/test.py | 28 ++++++ python/generator_lasso_strings.py | 84 ++++++++++++++++ python/lasso.py | 98 ++++++++++++++++++ python/lasso_strings.py | 81 +++++++++++++++ python/lassomod.c | 10 ++ python/lassomod.h | 24 +++++ .../protocols/py_single_sign_on_and_federation.c | 111 +++++++++++++++++++++ .../protocols/py_single_sign_on_and_federation.h | 41 ++++++++ python/py_lasso.h | 29 ++++++ python/setup.py | 15 +-- python/utils.c | 16 +-- python/utils.h | 8 +- python/wrap_objs.h | 2 + python/xml/py_xml.c | 77 ++++++++++++++ python/xml/py_xml.h | 41 ++++++++ 15 files changed, 646 insertions(+), 19 deletions(-) commit beeae477e9c544e707d27101ce4e9c6c6cd80d70 Author: Valery Febvre Date: Wed Apr 7 02:54:15 2004 +0000 *** empty log message *** lasso/xml/strings.c | 22 ++++++++++++++++++---- lasso/xml/strings.h | 24 +++++++++++++++++++----- lasso/xml/xml.c | 21 +++++++++++++++++++-- 3 files changed, 56 insertions(+), 11 deletions(-) commit 74812216aa0bf5cb342f827690c7ac5e95dcd8dd Author: Valery Febvre Date: Wed Apr 7 02:53:17 2004 +0000 Many modifications .../protocols/single_sign_on_and_federation.c | 200 ++++++++++++--------- .../protocols/single_sign_on_and_federation.h | 72 +++++--- 2 files changed, 165 insertions(+), 107 deletions(-) commit 9020c2e003618861a160e2993f843ccb9242fb53 Author: Valery Febvre Date: Tue Apr 6 03:03:08 2004 +0000 Added virtual public method lasso_node_get_content() lasso/xml/xml.c | 24 +++++++++++++++++++----- lasso/xml/xml.h | 9 ++++++--- 2 files changed, 25 insertions(+), 8 deletions(-) commit 3f8ad592fc3b488ee3a763a34ca410c442e2594b Author: Valery Febvre Date: Tue Apr 6 02:27:59 2004 +0000 Used lasso_node_get_child instead() of class->get_child() lasso/xml/lib_register_name_identifier_request.c | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) commit 1246c96751c98acf4982f7347c6e23a254ed60ed Author: Valery Febvre Date: Tue Apr 6 02:10:33 2004 +0000 Fixed many compilation warnings. Virtual private methods lasso_node_get_attr(), lasso_node_get_attrs(), lasso_node_get_child() and lasso_node_get_children() became virtual public lasso/xml/xml.c | 221 ++++++++++++++++++++++++++++---------------------------- lasso/xml/xml.h | 26 +++++-- 2 files changed, 128 insertions(+), 119 deletions(-) commit 374ec87d326912a3d157b83be1fd0d94f403eec8 Author: Valery Febvre Date: Mon Apr 5 23:40:05 2004 +0000 Fixed compilation warnings (casts missing) lasso/Attic/protocols/federation_termination_notification.c | 9 ++++++--- lasso/Attic/protocols/logout.c | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) commit eee1ccd70923dc68b05a3564f37a2119ee50f5f9 Author: Valery Febvre Date: Mon Apr 5 23:28:36 2004 +0000 Fixed compile warning (casts missing) lasso/xml/lib_register_name_identifier_request.c | 36 ++++++++++++++---------- lasso/xml/lib_register_name_identifier_request.h | 5 ++-- 2 files changed, 24 insertions(+), 17 deletions(-) commit 4394c006336dfc75c7f1044383967645d77973b5 Author: Valery Febvre Date: Mon Apr 5 23:26:29 2004 +0000 Fixed compile warning lasso/xml/ds_signature.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 5eebb1415006e02b4461ab5c4c2ed4d41f646f77 Author: Valery Febvre Date: Mon Apr 5 22:36:03 2004 +0000 schema replaced by xml configure.ac | 2 +- lasso/Makefile.am | 4 ++-- lasso/lasso.h | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) commit caa62ddc7a5c39234a6f00132f0138a6b00f9cb0 Author: Valery Febvre Date: Mon Apr 5 22:25:48 2004 +0000 Files moved. Initialy located in lasso/schema/ directory lasso/xml/.cvsignore | 7 + lasso/xml/Makefile.am | 105 ++++ lasso/xml/ds_signature.c | 153 +++++ lasso/xml/ds_signature.h | 65 ++ lasso/xml/lib.h | 59 ++ lasso/xml/lib_assertion.c | 111 ++++ lasso/xml/lib_assertion.h | 63 ++ lasso/xml/lib_authentication_statement.c | 133 +++++ lasso/xml/lib_authentication_statement.h | 72 +++ lasso/xml/lib_authn_context.c | 124 ++++ lasso/xml/lib_authn_context.h | 66 +++ lasso/xml/lib_authn_request.c | 266 +++++++++ lasso/xml/lib_authn_request.h | 95 +++ lasso/xml/lib_authn_response.c | 138 +++++ lasso/xml/lib_authn_response.h | 69 +++ .../xml/lib_federation_termination_notification.c | 140 +++++ .../xml/lib_federation_termination_notification.h | 70 +++ lasso/xml/lib_idp_entries.c | 115 ++++ lasso/xml/lib_idp_entries.h | 64 ++ lasso/xml/lib_idp_entry.c | 160 +++++ lasso/xml/lib_idp_entry.h | 69 +++ lasso/xml/lib_idp_list.c | 142 +++++ lasso/xml/lib_idp_list.h | 67 +++ lasso/xml/lib_idp_provided_name_identifier.c | 78 +++ lasso/xml/lib_idp_provided_name_identifier.h | 60 ++ lasso/xml/lib_logout_request.c | 158 +++++ lasso/xml/lib_logout_request.h | 76 +++ lasso/xml/lib_logout_response.c | 79 +++ lasso/xml/lib_logout_response.h | 60 ++ lasso/xml/lib_name_identifier_mapping_request.c | 136 +++++ lasso/xml/lib_name_identifier_mapping_request.h | 70 +++ lasso/xml/lib_name_identifier_mapping_response.c | 129 ++++ lasso/xml/lib_name_identifier_mapping_response.h | 71 +++ lasso/xml/lib_old_provided_name_identifier.c | 79 +++ lasso/xml/lib_old_provided_name_identifier.h | 60 ++ lasso/xml/lib_register_name_identifier_request.c | 199 +++++++ lasso/xml/lib_register_name_identifier_request.h | 81 +++ lasso/xml/lib_register_name_identifier_response.c | 79 +++ lasso/xml/lib_register_name_identifier_response.h | 60 ++ lasso/xml/lib_request_authn_context.c | 127 ++++ lasso/xml/lib_request_authn_context.h | 69 +++ lasso/xml/lib_scoping.c | 147 +++++ lasso/xml/lib_scoping.h | 67 +++ lasso/xml/lib_sp_provided_name_identifier.c | 79 +++ lasso/xml/lib_sp_provided_name_identifier.h | 60 ++ lasso/xml/lib_status_response.c | 138 +++++ lasso/xml/lib_status_response.h | 70 +++ lasso/xml/lib_subject.c | 109 ++++ lasso/xml/lib_subject.h | 64 ++ lasso/xml/saml.h | 56 ++ lasso/xml/saml_advice.c | 141 +++++ lasso/xml/saml_advice.h | 66 +++ lasso/xml/saml_assertion.c | 309 ++++++++++ lasso/xml/saml_assertion.h | 99 ++++ lasso/xml/saml_audience_restriction_condition.c | 138 +++++ lasso/xml/saml_audience_restriction_condition.h | 64 ++ lasso/xml/saml_authentication_statement.c | 146 +++++ lasso/xml/saml_authentication_statement.h | 75 +++ lasso/xml/saml_authority_binding.c | 128 ++++ lasso/xml/saml_authority_binding.h | 70 +++ lasso/xml/saml_condition_abstract.c | 95 +++ lasso/xml/saml_condition_abstract.h | 61 ++ lasso/xml/saml_conditions.c | 176 ++++++ lasso/xml/saml_conditions.h | 74 +++ lasso/xml/saml_name_identifier.c | 126 ++++ lasso/xml/saml_name_identifier.h | 67 +++ lasso/xml/saml_statement_abstract.c | 95 +++ lasso/xml/saml_statement_abstract.h | 61 ++ lasso/xml/saml_subject.c | 119 ++++ lasso/xml/saml_subject.h | 68 +++ lasso/xml/saml_subject_confirmation.c | 124 ++++ lasso/xml/saml_subject_confirmation.h | 67 +++ lasso/xml/saml_subject_locality.c | 115 ++++ lasso/xml/saml_subject_locality.h | 67 +++ lasso/xml/saml_subject_statement_abstract.c | 119 ++++ lasso/xml/saml_subject_statement_abstract.h | 65 ++ lasso/xml/samlp_request_abstract.c | 158 +++++ lasso/xml/samlp_request_abstract.h | 76 +++ lasso/xml/samlp_response.c | 114 ++++ lasso/xml/samlp_response.h | 67 +++ lasso/xml/samlp_response_abstract.c | 180 ++++++ lasso/xml/samlp_response_abstract.h | 79 +++ lasso/xml/samlp_status.c | 120 ++++ lasso/xml/samlp_status.h | 72 +++ lasso/xml/samlp_status_code.c | 99 ++++ lasso/xml/samlp_status_code.h | 63 ++ lasso/xml/strings.c | 45 ++ lasso/xml/strings.h | 58 ++ lasso/xml/tools.c | 323 ++++++++++ lasso/xml/tools.h | 53 ++ lasso/xml/xml.c | 653 +++++++++++++++++++++ lasso/xml/xml.h | 134 +++++ 92 files changed, 9843 insertions(+) commit 80960808a8a1a59989f95ad2436d0a332473b816 Author: Valery Febvre Date: Sun Apr 4 15:47:26 2004 +0000 lasso/Makefile.am lasso/Attic/protocols/register_name_identifier.c | 305 ++++++------- lasso/Attic/protocols/register_name_identifier.h | 39 +- .../protocols/single_sign_on_and_federation.c | 472 ++++++++++++--------- .../protocols/single_sign_on_and_federation.h | 17 +- lasso/Makefile.am | 3 +- 5 files changed, 467 insertions(+), 369 deletions(-) commit 3374f800eb37f05d6cf4cab31ac552094f7bcf56 Author: Valery Febvre Date: Sun Apr 4 15:46:00 2004 +0000 remove lasso/bindings/Makefile (directory lasso/bindings will be not used anymore) configure.ac | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 9d3578f8a1a850c615f5354e5f8f04823b2bfadb Author: Nicolas Clapies Date: Fri Apr 2 16:40:47 2004 +0000 initial version lasso/Attic/protocols/name_identifier.c | 53 +++++++++++++++++++++++++++++++++ lasso/Attic/protocols/name_identifier.h | 6 ++++ 2 files changed, 59 insertions(+) commit b03e62c77f7893276a7aafc11e06c15040d22357 Author: Nicolas Clapies Date: Fri Apr 2 16:20:31 2004 +0000 fix types of some parameters .../protocols/single_sign_on_and_federation.c | 62 +++------------------- .../protocols/single_sign_on_and_federation.h | 13 +++-- 2 files changed, 17 insertions(+), 58 deletions(-) commit 0d31e24209f43f914de2ebbaecdd6f07fa6af681 Author: Nicolas Clapies Date: Fri Apr 2 15:39:29 2004 +0000 add function lasso_build_authnRequest_must_autenthicate .../protocols/single_sign_on_and_federation.c | 150 ++++++++++++++++----- 1 file changed, 113 insertions(+), 37 deletions(-) commit b6c73fd19c79ce9c548090466e5a514a61da36ae Author: Valery Febvre Date: Fri Apr 2 00:54:07 2004 +0000 Initial commit python/.cvsignore | 1 + python/lassomod.c | 52 +++++++++++++ python/lassomod.h | 13 ++++ python/py_lasso.c | 59 +++++++++++++++ python/py_lasso.h | 5 ++ python/setup.py | 210 +++++++++++++++++++++++++++++++++++++++++++++++++++++ python/utils.c | 100 +++++++++++++++++++++++++ python/utils.h | 11 +++ python/wrap_objs.c | 164 +++++++++++++++++++++++++++++++++++++++++ python/wrap_objs.h | 65 +++++++++++++++++ 10 files changed, 680 insertions(+) commit d09a0de3b0e667b96ca722f374f04baeb164224b Author: Valery Febvre Date: Fri Apr 2 00:40:22 2004 +0000 Fct lasso_shutdown() now return int values. lasso/lasso.c | 12 ++++++++++-- lasso/lasso.h | 2 +- 2 files changed, 11 insertions(+), 3 deletions(-) commit 9372d8bc759be30ce5420914c7cfff47a6dfa7ef Author: Nicolas Clapies Date: Thu Apr 1 16:35:20 2004 +0000 use function lasso_lib_subject_new() instead of lasso_saml_subject_new() lasso/Attic/protocols/single_sign_on_and_federation.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit a1894e7155128007b253c9582bc9c78790ae32c3 Author: Nicolas Clapies Date: Thu Apr 1 16:06:48 2004 +0000 fix : use function lasso_lib_authentication_statement_new() instead of lasso_saml_authentication_statement_new() lasso/Attic/protocols/single_sign_on_and_federation.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 936fcf5056038270609ae15fee99f8e17c7ba0db Author: Nicolas Clapies Date: Thu Apr 1 15:29:34 2004 +0000 add function lasso_build_authnRequest_from_query .../protocols/single_sign_on_and_federation.c | 44 ++++++++++++++++++++++ .../protocols/single_sign_on_and_federation.h | 5 +++ 2 files changed, 49 insertions(+) commit 98c97ca26f67e67efea110ed49ccdc4fcc6952c9 Author: Valery Febvre Date: Thu Apr 1 13:27:11 2004 +0000 Added arg protocolProfile in fct lasso_build_full_authnRequest() lasso/Attic/protocols/single_sign_on_and_federation.c | 7 +++++++ lasso/Attic/protocols/single_sign_on_and_federation.h | 1 + 2 files changed, 8 insertions(+) commit db6d145bace5ef2f82e3ca74a43ae146ba1ed8f9 Author: Nicolas Clapies Date: Thu Apr 1 12:52:19 2004 +0000 add functions lasso_build_assertion lasso_build_authenticationStatement .../protocols/single_sign_on_and_federation.c | 72 ++++++++++++++++++---- .../protocols/single_sign_on_and_federation.h | 13 +++- 2 files changed, 71 insertions(+), 14 deletions(-) commit ea716033fd1acfa32dfc721a663088ec02550733 Author: Nicolas Clapies Date: Thu Apr 1 12:48:15 2004 +0000 add methods lasso_build_full_logoutRequest lasso_build_full_logoutResponse lasso/Attic/protocols/logout.c | 202 +++++++++++++++++++++++++++++++---------- lasso/Attic/protocols/logout.h | 22 ++++- 2 files changed, 177 insertions(+), 47 deletions(-) commit d12148196477f60c005fd0023db38bf1207483f4 Author: Nicolas Clapies Date: Thu Apr 1 12:46:17 2004 +0000 add methods lasso_build_full_federationTerminationNotification .../federation_termination_notification.c | 69 ++++++++++++++++++---- .../federation_termination_notification.h | 8 +++ 2 files changed, 66 insertions(+), 11 deletions(-) commit 26d71ad343a8ac2380878ab3055d6db3a274d952 Author: Nicolas Clapies Date: Thu Apr 1 12:41:01 2004 +0000 add lasso_build_full_registerNameIdentifierRequest lasso_build_full_registerNameIdentifierResponse lasso/Attic/protocols/register_name_identifier.c | 162 +++++++++++++++++++---- lasso/Attic/protocols/register_name_identifier.h | 22 ++- 2 files changed, 157 insertions(+), 27 deletions(-) commit 8cf1180616d3be8e03a9d1809fbca840bb75dc79 Author: Valery Febvre Date: Thu Apr 1 01:14:30 2004 +0000 Ooops, add missing return for funct lasso_build_authnRequest() .../protocols/single_sign_on_and_federation.c | 34 +++++++++++----------- 1 file changed, 17 insertions(+), 17 deletions(-) commit f99071c55457f223828ed3e29690755ce3984172 Author: Valery Febvre Date: Tue Mar 30 17:00:30 2004 +0000 Added some cosmetics, comment headers, #ifdef ... .../protocols/single_sign_on_and_federation.c | 89 ++++++++++++++++++---- .../protocols/single_sign_on_and_federation.h | 42 ++++++++-- 2 files changed, 113 insertions(+), 18 deletions(-) commit 78dd82b5c733b56a511b5bc91d125702fa13e4f2 Author: Valery Febvre Date: Tue Mar 30 09:59:59 2004 +0000 Added HEADER .../protocols/single_sign_on_and_federation.c | 48 ++++++++++++++++------ 1 file changed, 36 insertions(+), 12 deletions(-) commit 528c4fd6604fd4de147c8c5b5c3d528b62852c1b Author: Nicolas Clapies Date: Tue Mar 30 08:57:41 2004 +0000 add includes of high level functions of class building. set prototype of common functions for encoding and signing lasso/Attic/protocols/protocols.h | 9 +++++++++ 1 file changed, 9 insertions(+) commit daa903b79a07fc8eb0328e5f93754b83754890af Author: Nicolas Clapies Date: Tue Mar 30 08:56:17 2004 +0000 initial version lasso/Attic/protocols/protocols.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) commit ad962a15daf75b87d7fedbbbb9ed407a28058f67 Author: Nicolas Clapies Date: Tue Mar 30 08:55:37 2004 +0000 fix type parameters from const char to const xmlChar. add function to build response .../federation_termination_notification.c | 21 +++---- .../federation_termination_notification.h | 8 +-- lasso/Attic/protocols/logout.c | 57 ++++++++--------- lasso/Attic/protocols/logout.h | 21 +++---- lasso/Attic/protocols/register_name_identifier.c | 71 +++++++++------------- lasso/Attic/protocols/register_name_identifier.h | 22 +++---- .../protocols/single_sign_on_and_federation.c | 61 ++++++++++++++----- .../protocols/single_sign_on_and_federation.h | 8 ++- 8 files changed, 137 insertions(+), 132 deletions(-) commit 54aaf688c6d72a1ffa796bfc5ae74040ed4f56a1 Author: Valery Febvre Date: Mon Mar 29 14:29:03 2004 +0000 const char * convert into const xmlChar * .../protocols/single_sign_on_and_federation.c | 114 ++++++++++----------- .../protocols/single_sign_on_and_federation.h | 24 ++--- 2 files changed, 68 insertions(+), 70 deletions(-) commit b2ac1a575c1bc52302952e0b75b0e84ee1b08f1b Author: Valery Febvre Date: Mon Mar 29 13:25:08 2004 +0000 Added *.lo, *.la, .deps, .libs lasso/Attic/protocols/.cvsignore | 4 ++++ 1 file changed, 4 insertions(+) commit bc1c8677f43ea6779e1e9457d9e4212df864b928 Author: Nicolas Clapies Date: Mon Mar 29 13:09:12 2004 +0000 initial version .../federation_termination_notification.c | 34 +++++++++ .../federation_termination_notification.h | 37 ++++++++++ lasso/Attic/protocols/logout.c | 86 ++++++++++++++++++++++ lasso/Attic/protocols/logout.h | 20 +++++ lasso/Attic/protocols/protocols.h | 38 ++++++++++ lasso/Attic/protocols/register_name_identifier.c | 81 ++++++++++++++++++++ lasso/Attic/protocols/register_name_identifier.h | 21 ++++++ 7 files changed, 317 insertions(+) commit 74a963be6a69c61c94beb8c827636d99c789272b Author: Nicolas Clapies Date: Mon Mar 29 13:01:35 2004 +0000 add lasso_build_authnRequest method .../protocols/single_sign_on_and_federation.c | 74 +--------------------- .../protocols/single_sign_on_and_federation.h | 27 ++++---- 2 files changed, 16 insertions(+), 85 deletions(-) commit edc345b38c79cfad7e02fb7ba03814f51c923bd4 Author: Nicolas Clapies Date: Mon Mar 29 12:54:54 2004 +0000 add protocols Makefile support configure.ac | 1 + 1 file changed, 1 insertion(+) commit f3561b55e0376b3265b4f963b3690859aae43fa1 Author: Nicolas Clapies Date: Mon Mar 29 12:52:11 2004 +0000 add support of protocols lasso/Makefile.am | 3 ++- lasso/lasso.h | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) commit 66992f2b997d1d423be9ab469460ccd22d1979c4 Author: Nicolas Clapies Date: Mon Mar 29 12:51:06 2004 +0000 initial version lasso/Attic/protocols/Makefile.am | 25 ++++ .../protocols/single_sign_on_and_federation.c | 137 +++++++++++++++++++++ .../protocols/single_sign_on_and_federation.h | 20 +++ 3 files changed, 182 insertions(+) commit 9bdbe6d9375d7506873f4ad77847fcf507603b2d Author: Nicolas Clapies Date: Wed Mar 24 15:02:36 2004 +0000 add comments about little problems with implementation of name identifier mapping request class and question about implementation of nodes TODO | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) commit 3938fbdbc8b497a58c950c2fa38beb8955ff9091 Author: Valery Febvre Date: Tue Mar 23 17:29:07 2004 +0000 Added *.lo, *.la, .deps, .libs lasso/.cvsignore | 4 ++++ 1 file changed, 4 insertions(+) commit 3c0d8e619278cb3a7f9019a928ca9db2d3e29666 Author: Valery Febvre Date: Tue Mar 23 17:09:26 2004 +0000 Initial version .cvsignore | 18 ++++++++++++++++++ lasso/.cvsignore | 1 + 2 files changed, 19 insertions(+) commit 88e00f56a428321fd121366f98c6bf66332a684d Author: Valery Febvre Date: Tue Mar 23 17:00:23 2004 +0000 Initial revision AUTHORS | 2 + COPYING | 340 +++++++++++++++++++++++++++++ ChangeLog | 0 INSTALL | 182 ++++++++++++++++ Makefile.am | 5 + NEWS | 0 README | 0 TODO | 11 + autogen.sh | 71 ++++++ config.h.in | 118 ++++++++++ configure.ac | 457 +++++++++++++++++++++++++++++++++++++++ docs/.cvsignore | 3 + docs/Makefile.am | 3 + docs/reference/.cvsignore | 2 + docs/reference/Makefile.am | 144 ++++++++++++ docs/reference/lasso.sgml | 63 ++++++ docs/reference/lasso.types | 19 ++ lasso/.cvsignore | 2 + lasso/Attic/protocols/.cvsignore | 2 + lasso/Makefile.am | 44 ++++ lasso/export.h | 90 ++++++++ lasso/lasso.c | 144 ++++++++++++ lasso/lasso.h | 89 ++++++++ lasso/version.h.in | 51 +++++ 24 files changed, 1842 insertions(+) lasso-2.8.2/PaxHeaders/aclocal.m40000644000000000000000000000013214404125671013566 xustar0030 mtime=1678814137.728919698 30 atime=1678814137.892920614 30 ctime=1678814319.877946865 lasso-2.8.2/aclocal.m40000644000175000017500000016200214404125671017037 0ustar00bdauvergnebdauvergne00000000000000# generated automatically by aclocal 1.16.5 -*- Autoconf -*- # Copyright (C) 1996-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.71],, [m4_warning([this file was generated for autoconf 2.71. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) # pkg.m4 - Macros to locate and use pkg-config. -*- Autoconf -*- # serial 12 (pkg-config-0.29.2) dnl Copyright © 2004 Scott James Remnant . dnl Copyright © 2012-2015 Dan Nicholson dnl dnl This program is free software; you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by dnl the Free Software Foundation; either version 2 of the License, or dnl (at your option) any later version. dnl dnl This program is distributed in the hope that it will be useful, but dnl WITHOUT ANY WARRANTY; without even the implied warranty of dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU dnl General Public License for more details. dnl dnl You should have received a copy of the GNU General Public License dnl along with this program; if not, write to the Free Software dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA dnl 02111-1307, USA. dnl dnl As a special exception to the GNU General Public License, if you dnl distribute this file as part of a program that contains a dnl configuration script generated by Autoconf, you may include it under dnl the same distribution terms that you use for the rest of that dnl program. dnl PKG_PREREQ(MIN-VERSION) dnl ----------------------- dnl Since: 0.29 dnl dnl Verify that the version of the pkg-config macros are at least dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's dnl installed version of pkg-config, this checks the developer's version dnl of pkg.m4 when generating configure. dnl dnl To ensure that this macro is defined, also add: dnl m4_ifndef([PKG_PREREQ], dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])]) dnl dnl See the "Since" comment for each macro you use to see what version dnl of the macros you require. m4_defun([PKG_PREREQ], [m4_define([PKG_MACROS_VERSION], [0.29.2]) m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1, [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])]) ])dnl PKG_PREREQ dnl PKG_PROG_PKG_CONFIG([MIN-VERSION]) dnl ---------------------------------- dnl Since: 0.16 dnl dnl Search for the pkg-config tool and set the PKG_CONFIG variable to dnl first found in the path. Checks that the version of pkg-config found dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is dnl used since that's the first version where most current features of dnl pkg-config existed. AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ])dnl PKG_PROG_PKG_CONFIG dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl ------------------------------------------------------------------- dnl Since: 0.18 dnl dnl Check to see whether a particular set of modules exists. Similar to dnl PKG_CHECK_MODULES(), but does not set variables or print errors. dnl dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) dnl only at the first occurrence in configure.ac, so if the first place dnl it's called might be skipped (such as if it is within an "if", you dnl have to call PKG_CHECK_EXISTS manually AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_default([$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) dnl --------------------------------------------- dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting dnl pkg_failed based on the result. m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" elif test -n "$PKG_CONFIG"; then PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) else pkg_failed=untried fi[]dnl ])dnl _PKG_CONFIG dnl _PKG_SHORT_ERRORS_SUPPORTED dnl --------------------------- dnl Internal check to see if pkg-config supports short errors. AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])dnl _PKG_SHORT_ERRORS_SUPPORTED dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], dnl [ACTION-IF-NOT-FOUND]) dnl -------------------------------------------------------------- dnl Since: 0.4.0 dnl dnl Note that if there is a possibility the first call to dnl PKG_CHECK_MODULES might not happen, you should be sure to include an dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $2]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then AC_MSG_RESULT([no]) _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD m4_default([$4], [AC_MSG_ERROR( [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT])[]dnl ]) elif test $pkg_failed = untried; then AC_MSG_RESULT([no]) m4_default([$4], [AC_MSG_FAILURE( [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])[]dnl ]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) $3 fi[]dnl ])dnl PKG_CHECK_MODULES dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], dnl [ACTION-IF-NOT-FOUND]) dnl --------------------------------------------------------------------- dnl Since: 0.29 dnl dnl Checks for existence of MODULES and gathers its build flags with dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags dnl and VARIABLE-PREFIX_LIBS from --libs. dnl dnl Note that if there is a possibility the first call to dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to dnl include an explicit call to PKG_PROG_PKG_CONFIG in your dnl configure.ac. AC_DEFUN([PKG_CHECK_MODULES_STATIC], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl _save_PKG_CONFIG=$PKG_CONFIG PKG_CONFIG="$PKG_CONFIG --static" PKG_CHECK_MODULES($@) PKG_CONFIG=$_save_PKG_CONFIG[]dnl ])dnl PKG_CHECK_MODULES_STATIC dnl PKG_INSTALLDIR([DIRECTORY]) dnl ------------------------- dnl Since: 0.27 dnl dnl Substitutes the variable pkgconfigdir as the location where a module dnl should install pkg-config .pc files. By default the directory is dnl $libdir/pkgconfig, but the default can be changed by passing dnl DIRECTORY. The user can override through the --with-pkgconfigdir dnl parameter. AC_DEFUN([PKG_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([pkgconfigdir], [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],, [with_pkgconfigdir=]pkg_default) AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ])dnl PKG_INSTALLDIR dnl PKG_NOARCH_INSTALLDIR([DIRECTORY]) dnl -------------------------------- dnl Since: 0.27 dnl dnl Substitutes the variable noarch_pkgconfigdir as the location where a dnl module should install arch-independent pkg-config .pc files. By dnl default the directory is $datadir/pkgconfig, but the default can be dnl changed by passing DIRECTORY. The user can override through the dnl --with-noarch-pkgconfigdir parameter. AC_DEFUN([PKG_NOARCH_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([noarch-pkgconfigdir], [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],, [with_noarch_pkgconfigdir=]pkg_default) AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ])dnl PKG_NOARCH_INSTALLDIR dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl ------------------------------------------- dnl Since: 0.28 dnl dnl Retrieves the value of the pkg-config variable for the given module. AC_DEFUN([PKG_CHECK_VAR], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl _PKG_CONFIG([$1], [variable="][$3]["], [$2]) AS_VAR_COPY([$1], [pkg_cv_][$1]) AS_VAR_IF([$1], [""], [$5], [$4])dnl ])dnl PKG_CHECK_VAR dnl PKG_WITH_MODULES(VARIABLE-PREFIX, MODULES, dnl [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND], dnl [DESCRIPTION], [DEFAULT]) dnl ------------------------------------------ dnl dnl Prepare a "--with-" configure option using the lowercase dnl [VARIABLE-PREFIX] name, merging the behaviour of AC_ARG_WITH and dnl PKG_CHECK_MODULES in a single macro. AC_DEFUN([PKG_WITH_MODULES], [ m4_pushdef([with_arg], m4_tolower([$1])) m4_pushdef([description], [m4_default([$5], [build with ]with_arg[ support])]) m4_pushdef([def_arg], [m4_default([$6], [auto])]) m4_pushdef([def_action_if_found], [AS_TR_SH([with_]with_arg)=yes]) m4_pushdef([def_action_if_not_found], [AS_TR_SH([with_]with_arg)=no]) m4_case(def_arg, [yes],[m4_pushdef([with_without], [--without-]with_arg)], [m4_pushdef([with_without],[--with-]with_arg)]) AC_ARG_WITH(with_arg, AS_HELP_STRING(with_without, description[ @<:@default=]def_arg[@:>@]),, [AS_TR_SH([with_]with_arg)=def_arg]) AS_CASE([$AS_TR_SH([with_]with_arg)], [yes],[PKG_CHECK_MODULES([$1],[$2],$3,$4)], [auto],[PKG_CHECK_MODULES([$1],[$2], [m4_n([def_action_if_found]) $3], [m4_n([def_action_if_not_found]) $4])]) m4_popdef([with_arg]) m4_popdef([description]) m4_popdef([def_arg]) ])dnl PKG_WITH_MODULES dnl PKG_HAVE_WITH_MODULES(VARIABLE-PREFIX, MODULES, dnl [DESCRIPTION], [DEFAULT]) dnl ----------------------------------------------- dnl dnl Convenience macro to trigger AM_CONDITIONAL after PKG_WITH_MODULES dnl check._[VARIABLE-PREFIX] is exported as make variable. AC_DEFUN([PKG_HAVE_WITH_MODULES], [ PKG_WITH_MODULES([$1],[$2],,,[$3],[$4]) AM_CONDITIONAL([HAVE_][$1], [test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"]) ])dnl PKG_HAVE_WITH_MODULES dnl PKG_HAVE_DEFINE_WITH_MODULES(VARIABLE-PREFIX, MODULES, dnl [DESCRIPTION], [DEFAULT]) dnl ------------------------------------------------------ dnl dnl Convenience macro to run AM_CONDITIONAL and AC_DEFINE after dnl PKG_WITH_MODULES check. HAVE_[VARIABLE-PREFIX] is exported as make dnl and preprocessor variable. AC_DEFUN([PKG_HAVE_DEFINE_WITH_MODULES], [ PKG_HAVE_WITH_MODULES([$1],[$2],[$3],[$4]) AS_IF([test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"], [AC_DEFINE([HAVE_][$1], 1, [Enable ]m4_tolower([$1])[ support])]) ])dnl PKG_HAVE_DEFINE_WITH_MODULES # Copyright (C) 2002-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.16.5], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.16.5])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to # '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. AS_CASE([$CONFIG_FILES], [*\'*], [eval set x "$CONFIG_FILES"], [*], [set x $CONFIG_FILES]) shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`AS_ECHO(["$am_mf"]) | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`AS_DIRNAME(["$am_mf"])` am_filepart=`AS_BASENAME(["$am_mf"])` AM_RUN_LOG([cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles]) || am_rc=$? done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments for automatic dependency tracking. If GNU make was not used, consider re-running the configure script with MAKE="gmake" (or whatever is necessary). You can also try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi AS_UNSET([am_dirpart]) AS_UNSET([am_filepart]) AS_UNSET([am_mf]) AS_UNSET([am_rc]) rm -f conftest-deps.mk } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking is enabled. # This creates each '.Po' and '.Plo' makefile fragment that we'll need in # order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"])]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC]) [_AM_PROG_CC_C_O ]) # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl m4_ifdef([_$0_ALREADY_INIT], [m4_fatal([$0 expanded multiple times ]m4_defn([_$0_ALREADY_INIT]))], [m4_define([_$0_ALREADY_INIT], m4_expansion_stack)])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifset([AC_PACKAGE_NAME], [ok]):m4_ifset([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) # Variables for tags utilities; see am/tags.am if test -z "$CTAGS"; then CTAGS=ctags fi AC_SUBST([CTAGS]) if test -z "$ETAGS"; then ETAGS=etags fi AC_SUBST([ETAGS]) if test -z "$CSCOPE"; then CSCOPE=cscope fi AC_SUBST([CSCOPE]) AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi fi dnl The trailing newline in this macro's definition is deliberate, for dnl backward compatibility and to allow trailing 'dnl'-style comments dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. ]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) # Copyright (C) 2003-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering # Copyright (C) 1996-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAINTAINER_MODE([DEFAULT-MODE]) # ---------------------------------- # Control maintainer-specific portions of Makefiles. # Default is to disable them, unless 'enable' is passed literally. # For symmetry, 'disable' may be passed as well. Anyway, the user # can override the default with the --enable/--disable switch. AC_DEFUN([AM_MAINTAINER_MODE], [m4_case(m4_default([$1], [disable]), [enable], [m4_define([am_maintainer_other], [disable])], [disable], [m4_define([am_maintainer_other], [enable])], [m4_define([am_maintainer_other], [enable]) m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) dnl maintainer-mode's default is 'disable' unless 'enable' is passed AC_ARG_ENABLE([maintainer-mode], [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode], am_maintainer_other[ make rules and dependencies not useful (and sometimes confusing) to the casual installer])], [USE_MAINTAINER_MODE=$enableval], [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) AC_MSG_RESULT([$USE_MAINTAINER_MODE]) AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) MAINT=$MAINTAINER_MODE_TRUE AC_SUBST([MAINT])dnl ] ) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAKE_INCLUDE() # ----------------- # Check whether make has an 'include' directive that can support all # the idioms we need for our automatic dependency tracking code. AC_DEFUN([AM_MAKE_INCLUDE], [AC_MSG_CHECKING([whether ${MAKE-make} supports the include directive]) cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do AM_RUN_LOG([${MAKE-make} -f confmf.$s && cat confinc.out]) AS_CASE([$?:`cat confinc.out 2>/dev/null`], ['0:this is the am__doit target'], [AS_CASE([$s], [BSD], [am__include='.include' am__quote='"'], [am__include='include' am__quote=''])]) if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* AC_MSG_RESULT([${_am_result}]) AC_SUBST([am__include])]) AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it is modern enough. # If it is, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then MISSING="\${SHELL} '$am_aux_dir/missing'" fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # -*- Autoconf -*- # Obsolete and "removed" macros, that must however still report explicit # error messages when used, to smooth transition. # # Copyright (C) 1996-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. AC_DEFUN([AM_CONFIG_HEADER], [AC_DIAGNOSE([obsolete], ['$0': this macro is obsolete. You should use the 'AC][_CONFIG_HEADERS' macro instead.])dnl AC_CONFIG_HEADERS($@)]) AC_DEFUN([AM_PROG_CC_STDC], [AC_PROG_CC am_cv_prog_cc_stdc=$ac_cv_prog_cc_stdc AC_DIAGNOSE([obsolete], ['$0': this macro is obsolete. You should simply use the 'AC][_PROG_CC' macro instead. Also, your code should no longer depend upon 'am_cv_prog_cc_stdc', but upon 'ac_cv_prog_cc_stdc'.])]) AC_DEFUN([AM_C_PROTOTYPES], [AC_FATAL([automatic de-ANSI-fication support has been removed])]) AU_DEFUN([fp_C_PROTOTYPES], [AM_C_PROTOTYPES]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Copyright (C) 1999-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_CC_C_O # --------------- # Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC # to automatically call this. AC_DEFUN([_AM_PROG_CC_C_O], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl AC_LANG_PUSH([C])dnl AC_CACHE_CHECK( [whether $CC understands -c and -o together], [am_cv_prog_cc_c_o], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i]) if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_RUN_LOG(COMMAND) # ------------------- # Run COMMAND, save the exit status in ac_status, and log it. # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT([yes]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # ("yes" being less verbose, "no" or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar # AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([m4/ac_check_class.m4]) m4_include([m4/ac_check_classpath.m4]) m4_include([m4/ac_check_junit.m4]) m4_include([m4/ac_prog_jar.m4]) m4_include([m4/ac_prog_java.m4]) m4_include([m4/ac_prog_java_works.m4]) m4_include([m4/ac_prog_javac.m4]) m4_include([m4/ac_prog_javac_works.m4]) m4_include([m4/ac_prog_javah.m4]) m4_include([m4/ac_try_compile_java.m4]) m4_include([m4/as-compiler-flag.m4]) m4_include([m4/dps_java_check_class.m4]) m4_include([m4/dps_xtra_classpath.m4]) m4_include([m4/gtk-doc.m4]) m4_include([m4/libtool.m4]) m4_include([m4/ltoptions.m4]) m4_include([m4/ltsugar.m4]) m4_include([m4/ltversion.m4]) m4_include([m4/lt~obsolete.m4]) lasso-2.8.2/PaxHeaders/test-driver0000644000000000000000000000007414215102164014116 xustar0030 atime=1678098071.265499055 30 ctime=1678814321.193954357 lasso-2.8.2/test-driver0000755000175000017500000001141714215102164017370 0ustar00bdauvergnebdauvergne00000000000000#! /bin/sh # test-driver - basic testsuite driver script. scriptversion=2018-03-07.03; # UTC # Copyright (C) 2011-2021 Free Software Foundation, Inc. # # 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 Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . # Make unconditional expansion of undefined variables an error. This # helps a lot in preventing typo-related bugs. set -u usage_error () { echo "$0: $*" >&2 print_usage >&2 exit 2 } print_usage () { cat <"$log_file" "$@" >>"$log_file" 2>&1 estatus=$? if test $enable_hard_errors = no && test $estatus -eq 99; then tweaked_estatus=1 else tweaked_estatus=$estatus fi case $tweaked_estatus:$expect_failure in 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;; 0:*) col=$grn res=PASS recheck=no gcopy=no;; 77:*) col=$blu res=SKIP recheck=no gcopy=yes;; 99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;; *:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;; *:*) col=$red res=FAIL recheck=yes gcopy=yes;; esac # Report the test outcome and exit status in the logs, so that one can # know whether the test passed or failed simply by looking at the '.log' # file, without the need of also peaking into the corresponding '.trs' # file (automake bug#11814). echo "$res $test_name (exit status: $estatus)" >>"$log_file" # Report outcome to console. echo "${col}${res}${std}: $test_name" # Register the test result, and other relevant metadata. echo ":test-result: $res" > $trs_file echo ":global-test-result: $res" >> $trs_file echo ":recheck: $recheck" >> $trs_file echo ":copy-in-global-log: $gcopy" >> $trs_file # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: lasso-2.8.2/PaxHeaders/configure0000644000000000000000000000013214404125672013633 xustar0030 mtime=1678814138.380923336 30 atime=1678814140.092932888 30 ctime=1678814319.849946705 lasso-2.8.2/configure0000755000175000017500000220346014404125672017115 0ustar00bdauvergnebdauvergne00000000000000#! /bin/sh # From configure.ac Revision. # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.71 for lasso 2.8.2. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, # Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="as_nop=: if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else \$as_nop case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ) then : else \$as_nop exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 blah=\$(echo \$(echo blah)) test x\"\$blah\" = xblah || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1 test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1" if (eval "$as_required") 2>/dev/null then : as_have_required=yes else $as_nop as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null then : else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$as_shell as_have_required=yes if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null then : break 2 fi fi done;; esac as_found=false done IFS=$as_save_IFS if $as_found then : else $as_nop if { test -f "$SHELL" || test -f "$SHELL.exe"; } && as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$SHELL as_have_required=yes fi fi if test "x$CONFIG_SHELL" != x then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno then : printf "%s\n" "$0: This script requires a shell more modern than all" printf "%s\n" "$0: the shells that I found on your system." if test ${ZSH_VERSION+y} ; then printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." else printf "%s\n" "$0: Please tell bug-autoconf@gnu.org and $0: lasso-devel@lists.labs.libre-entreprise.org about your $0: system, including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_nop # --------- # Do nothing but, unlike ":", preserve the value of $?. as_fn_nop () { return $? } as_nop=as_fn_nop # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else $as_nop as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_nop # --------- # Do nothing but, unlike ":", preserve the value of $?. as_fn_nop () { return $? } as_nop=as_fn_nop # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" SHELL=${CONFIG_SHELL-/bin/sh} test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='lasso' PACKAGE_TARNAME='lasso' PACKAGE_VERSION='2.8.2' PACKAGE_STRING='lasso 2.8.2' PACKAGE_BUGREPORT='lasso-devel@lists.labs.libre-entreprise.org' PACKAGE_URL='' ac_unique_file="lasso/lasso.c" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_STDIO_H # include #endif #ifdef HAVE_STDLIB_H # include #endif #ifdef HAVE_STRING_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_header_c_list= ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS DARWIN_FALSE DARWIN_TRUE MINGW_FALSE MINGW_TRUE SWIG_VERSION CLASSPATH_JUNIT AM_CFLAGS LASSO_APP_DEFINES LASSO_DEFINES LASSO_PUB_CFLAGS LASSO_CORE_LIBS LASSO_CORE_CFLAGS LASSO_STATIC_BINARIES DEBUGGING DEBUGGING_FALSE DEBUGGING_TRUE HAVE_INKSCAPE_FALSE HAVE_INKSCAPE_TRUE INKSCAPE HAVE_XSLTPROC_FALSE HAVE_XSLTPROC_TRUE XSLTPROC HAVE_REST2HTML_FALSE HAVE_REST2HTML_TRUE REST2HTML WITH_TESTS_FALSE WITH_TESTS_TRUE CHECK_LIBS CHECK_CFLAGS LASSO_LIBS LASSO_CFLAGS LASSO_DOCDIR GTK_DOC_USE_REBASE_FALSE GTK_DOC_USE_REBASE_TRUE GTK_DOC_USE_LIBTOOL_FALSE GTK_DOC_USE_LIBTOOL_TRUE GTK_DOC_BUILD_PDF_FALSE GTK_DOC_BUILD_PDF_TRUE GTK_DOC_BUILD_HTML_FALSE GTK_DOC_BUILD_HTML_TRUE ENABLE_GTK_DOC_FALSE ENABLE_GTK_DOC_TRUE HAVE_GTK_DOC_FALSE HAVE_GTK_DOC_TRUE GTKDOC_DEPS_LIBS GTKDOC_DEPS_CFLAGS HTML_DIR GTKDOC_MKPDF GTKDOC_REBASE GTKDOC_CHECK_PATH GTKDOC_CHECK PKG_CONFIG_LIBDIR PKG_CONFIG_PATH PKG_CONFIG Z_LIBS Z_CFLAGS PERL_VERSION PERL_ENABLED_FALSE PERL_ENABLED_TRUE PERL_CFLAGS PERLMAN3DIR PERLINSTALLSITEARCH CSHARP_ENABLED_FALSE CSHARP_ENABLED_TRUE CSHARPLIBRARYPREFIX CSHARPDYNAMICLINKING CSHARPCOMPILER CSHARPCYGPATH_W CSHARPCILINTERPRETER GACUTIL PHP7_VERSION PHP7_ENABLED_FALSE PHP7_ENABLED_TRUE PHP7_CONFIG_DIR PHP7_INCLUDE_DIR PHP7_PREFIX PHP7_EXTENSION_DIR PHP7_UNPREFIXED_EXTENSION_DIR PHP7_LIBS PHP7_LDFLAGS PHP7_INCLUDES PHP5_VERSION PHP5_ENABLED_FALSE PHP5_ENABLED_TRUE PHP5_CONFIG_DIR PHP5_INCLUDE_DIR PHP5_PREFIX PHP5_EXTENSION_DIR PHP5_UNPREFIXED_EXTENSION_DIR PHP5_LIBS PHP5_LDFLAGS PHP5_INCLUDES PYTHON_VERSION PYTHON_ENABLED_FALSE PYTHON_ENABLED_TRUE PY_SITE_PACKAGES PY_LIB_A PY_DYNLOAD PY_EXTRA_LIBS PY_CFLAGS PY_LIB_LOC JNI_EXTRA_LDFLAGS JDK_INCLUDE CLASSPATH_OPT JAVA_INCLUDE JAVAH_FLAGS JAVAC_FLAGS JAVA_VERSION JUNIT_ENABLED_FALSE JUNIT_ENABLED_TRUE JAVA_ENABLED_FALSE JAVA_ENABLED_TRUE DLL_FILENAME UPCASED_DLL_FILENAME LASSO_VERSION_INFO WINDOWS_VERSION VERSION_UNDERSCORED SWIG PYTHON PHP7_CONFIG PHP7 PHP5_CONFIG PHP5 PERL TESTS_JUNIT JAVA_JUNIT JUNIT JAR JAVAH CPP uudecode JAVA JAVAC TAR LIBTOOL_DEPS LT_SYS_LIBRARY_PATH OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL MANIFEST_TOOL RANLIB ac_ct_AR AR FILECMD NM ac_ct_DUMPBIN DUMPBIN LD FGREP SED LIBTOOL OBJDUMP DLLTOOL AS LN_S RC EGREP GREP am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC MAINT MAINTAINER_MODE_FALSE MAINTAINER_MODE_TRUE HAVE_AM_SILENT_RULES_FALSE HAVE_AM_SILENT_RULES_TRUE AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V CSCOPE ETAGS CTAGS am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_os target_vendor target_cpu target host_os host_vendor host_cpu host build_os build_vendor build_cpu build target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir runstatedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL am__quote' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_maintainer_mode enable_dependency_tracking enable_shared enable_static with_pic enable_fast_install with_aix_soname with_gnu_ld with_sysroot enable_libtool_lock enable_java with_java_home enable_python with_python enable_php5 with_php5_config enable_php5_force with_php5_include_dir with_php5_config_dir enable_php7 with_php7_config enable_php7_force with_php7 with_php7_include_dir with_php7_config_dir enable_perl with_zlib with_html_dir enable_gtk_doc enable_gtk_doc_html enable_gtk_doc_pdf with_pkg_config enable_tests enable_debugging enable_profiling with_default_sign_algo with_min_hash_algo with_default_key_encryption_method enable_pedantic enable_static_linking ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS LT_SYS_LIBRARY_PATH CPP PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR GTKDOC_DEPS_CFLAGS GTKDOC_DEPS_LIBS LASSO_CFLAGS LASSO_LIBS CHECK_CFLAGS CHECK_LIBS' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures lasso 2.8.2 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/lasso] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] --target=TARGET configure for building compilers for TARGET [HOST] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of lasso 2.8.2:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --disable-maintainer-mode disable make rules and dependencies not useful (and sometimes confusing) to the casual installer --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) --enable-java enable the Java binding --disable-python disable the Python binding --enable-php5 enable the PHP 5 binding --enable-php5-force always enable of the PHP 5 binding (win32) --enable-php7 enable the PHP 7 binding --enable-php7-force always enable of the PHP 7 binding (win32) --disable-perl disable the Perl binding --enable-gtk-doc use gtk-doc to build documentation [[default=no]] --enable-gtk-doc-html build documentation in html format [[default=yes]] --enable-gtk-doc-pdf build documentation in pdf format [[default=no]] --disable-tests disable the test suite --enable-debugging enable debuging optimization flags (no) --enable-profiling enable profiling compilation flags (no) --enable-pedantic enable pedantic compilation flags (no) --enable-static-linking enable static linking (no) Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use both] --with-aix-soname=aix|svr4|both shared library versioning (aka "SONAME") variant to provide on AIX, [default=aix]. --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified). --with-java-home=(JAVA_HOME) set the full path to the java home directory. --with-python=(PYTHON) set the full path to the python program to use. --with-php5-config=(PHP5_CONFIG) Specify full path to php-config5. --with-php5-include-dir=(PHP5_INCLUDE_DIR) Specify full path to php 5 include dir. --with-php5-config-dir=(PHP5_CONFIG_DIR) Specify full path to php 5 config dir. --with-php7-config=(PHP7_CONFIG) Specify full path to php-config7. --with-php7=(PHP) Specify full path to php 7 executable. --with-php7-include-dir=(PHP7_INCLUDE_DIR) Specify full path to php 7 include dir. --with-php7-config-dir=(PHP7_CONFIG_DIR) Specify full path to php 7 config dir. --with-zlib[=DIR] use libz in DIR --with-html-dir=PATH path to installed docs --with-html-dir=PATH path to installed docs --with-pkg-config=PATH set pkg-config metadata search path. --with-default-sign-algo=rsa-sha1|rsa-sha256 Default signing algorithm (rsa-sha1) --with-min-hash-algo=sha1|sha256|sha384|sha512 Minimal allowed hash algorithm (rsa-sha1) --with-default-key-encryption-method=rsa-pkcs1|rsa-oaep Default key encryption method (rsa-oaep) Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory LT_SYS_LIBRARY_PATH User-defined run-time library search path. CPP C preprocessor PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path GTKDOC_DEPS_CFLAGS C compiler flags for GTKDOC_DEPS, overriding pkg-config GTKDOC_DEPS_LIBS linker flags for GTKDOC_DEPS, overriding pkg-config LASSO_CFLAGS C compiler flags for LASSO, overriding pkg-config LASSO_LIBS linker flags for LASSO, overriding pkg-config CHECK_CFLAGS C compiler flags for CHECK, overriding pkg-config CHECK_LIBS linker flags for CHECK, overriding pkg-config Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for configure.gnu first; this name is used for a wrapper for # Metaconfig's "Configure" on case-insensitive file systems. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF lasso configure 2.8.2 generated by GNU Autoconf 2.71 Copyright (C) 2021 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$3=yes" else $as_nop eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext } then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. */ #include #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main (void) { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : eval "$3=yes" else $as_nop eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err } then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp ac_configure_args_raw= for ac_arg do case $ac_arg in *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append ac_configure_args_raw " '$ac_arg'" done case $ac_configure_args_raw in *$as_nl*) ac_safe_unquote= ;; *) ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab. ac_unsafe_a="$ac_unsafe_z#~" ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; esac cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by lasso $as_me 2.8.2, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac printf "%s\n" "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Sanitize IFS. IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo printf "%s\n" "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo printf "%s\n" "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then printf "%s\n" "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then printf "%s\n" "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && printf "%s\n" "$as_me: caught signal $ac_signal" printf "%s\n" "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h printf "%s\n" "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then ac_site_files="$CONFIG_SITE" elif test "x$prefix" != xNONE; then ac_site_files="$prefix/share/config.site $prefix/etc/config.site" else ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi for ac_site_file in $ac_site_files do case $ac_site_file in #( */*) : ;; #( *) : ac_site_file=./$ac_site_file ;; esac if test -f "$ac_site_file" && test -r "$ac_site_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 printf "%s\n" "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 printf "%s\n" "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Test code for whether the C compiler supports C89 (global declarations) ac_c_conftest_c89_globals=' /* Does the compiler advertise C89 conformance? Do not test the value of __STDC__, because some compilers set it to 0 while being otherwise adequately conformant. */ #if !defined __STDC__ # error "Compiler does not advertise C89 conformance" #endif #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ struct buf { int x; }; struct buf * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not \xHH hex character constants. These do not provoke an error unfortunately, instead are silently treated as an "x". The following induces an error, until -std is added to get proper ANSI mode. Curiously \x00 != x always comes out true, for an array size at least. It is necessary to write \x00 == 0 to get something that is true only with -std. */ int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) '\''x'\'' int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int), int, int);' # Test code for whether the C compiler supports C89 (body of main). ac_c_conftest_c89_main=' ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); ' # Test code for whether the C compiler supports C99 (global declarations) ac_c_conftest_c99_globals=' // Does the compiler advertise C99 conformance? #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L # error "Compiler does not advertise C99 conformance" #endif #include extern int puts (const char *); extern int printf (const char *, ...); extern int dprintf (int, const char *, ...); extern void *malloc (size_t); // Check varargs macros. These examples are taken from C99 6.10.3.5. // dprintf is used instead of fprintf to avoid needing to declare // FILE and stderr. #define debug(...) dprintf (2, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK #error "your preprocessor is broken" #endif #if BIG_OK #else #error "your preprocessor is broken" #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // See if C++-style comments work. // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) continue; return 0; } // Check varargs and va_copy. static bool test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str = ""; int number = 0; float fnumber = 0; while (*format) { switch (*format++) { case '\''s'\'': // string str = va_arg (args_copy, const char *); break; case '\''d'\'': // int number = va_arg (args_copy, int); break; case '\''f'\'': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); return *str && number && fnumber; } ' # Test code for whether the C compiler supports C99 (body of main). ac_c_conftest_c99_main=' // Check bool. _Bool success = false; success |= (argc != 0); // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[0] = argv[0][0]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' || dynamic_array[ni.number - 1] != 543); ' # Test code for whether the C compiler supports C11 (global declarations) ac_c_conftest_c11_globals=' // Does the compiler advertise C11 conformance? #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L # error "Compiler does not advertise C11 conformance" #endif // Check _Alignas. char _Alignas (double) aligned_as_double; char _Alignas (0) no_special_alignment; extern char aligned_as_int; char _Alignas (0) _Alignas (int) aligned_as_int; // Check _Alignof. enum { int_alignment = _Alignof (int), int_array_alignment = _Alignof (int[100]), char_alignment = _Alignof (char) }; _Static_assert (0 < -_Alignof (int), "_Alignof is signed"); // Check _Noreturn. int _Noreturn does_not_return (void) { for (;;) continue; } // Check _Static_assert. struct test_static_assert { int x; _Static_assert (sizeof (int) <= sizeof (long int), "_Static_assert does not work in struct"); long int y; }; // Check UTF-8 literals. #define u8 syntax error! char const utf8_literal[] = u8"happens to be ASCII" "another string"; // Check duplicate typedefs. typedef long *long_ptr; typedef long int *long_ptr; typedef long_ptr long_ptr; // Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. struct anonymous { union { struct { int i; int j; }; struct { int k; long int l; } w; }; int m; } v1; ' # Test code for whether the C compiler supports C11 (body of main). ac_c_conftest_c11_main=' _Static_assert ((offsetof (struct anonymous, i) == offsetof (struct anonymous, w.k)), "Anonymous union alignment botch"); v1.i = 2; v1.w.k = 5; ok |= v1.i != 5; ' # Test code for whether the C compiler supports C11 (complete). ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} ${ac_c_conftest_c11_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} ${ac_c_conftest_c11_main} return ok; } " # Test code for whether the C compiler supports C99 (complete). ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} return ok; } " # Test code for whether the C compiler supports C89 (complete). ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} return ok; } " as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H" as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H" as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H" as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H" as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H" as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H" as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H" as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H" # Auxiliary files required by this configure script. ac_aux_files="ltmain.sh compile missing install-sh config.guess config.sub" # Locations in which to look for auxiliary files. ac_aux_dir_candidates="${srcdir}${PATH_SEPARATOR}${srcdir}/..${PATH_SEPARATOR}${srcdir}/../.." # Search for a directory containing all of the required auxiliary files, # $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates. # If we don't find one directory that contains all the files we need, # we report the set of missing files from the *first* directory in # $ac_aux_dir_candidates and give up. ac_missing_aux_files="" ac_first_candidate=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in $ac_aux_dir_candidates do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5 ac_aux_dir_found=yes ac_install_sh= for ac_aux in $ac_aux_files do # As a special case, if "install-sh" is required, that requirement # can be satisfied by any of "install-sh", "install.sh", or "shtool", # and $ac_install_sh is set appropriately for whichever one is found. if test x"$ac_aux" = x"install-sh" then if test -f "${as_dir}install-sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5 ac_install_sh="${as_dir}install-sh -c" elif test -f "${as_dir}install.sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5 ac_install_sh="${as_dir}install.sh -c" elif test -f "${as_dir}shtool"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5 ac_install_sh="${as_dir}shtool install -c" else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} install-sh" else break fi fi else if test -f "${as_dir}${ac_aux}"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5 else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}" else break fi fi fi done if test "$ac_aux_dir_found" = yes; then ac_aux_dir="$as_dir" break fi ac_first_candidate=false as_found=false done IFS=$as_save_IFS if $as_found then : else $as_nop as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. if test -f "${ac_aux_dir}config.guess"; then ac_config_guess="$SHELL ${ac_aux_dir}config.guess" fi if test -f "${ac_aux_dir}config.sub"; then ac_config_sub="$SHELL ${ac_aux_dir}config.sub" fi if test -f "$ac_aux_dir/configure"; then ac_configure="$SHELL ${ac_aux_dir}configure" fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Make sure we can run config.sub. $SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 printf %s "checking build system type... " >&6; } if test ${ac_cv_build+y} then : printf %s "(cached) " >&6 else $as_nop ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 printf "%s\n" "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 printf %s "checking host system type... " >&6; } if test ${ac_cv_host+y} then : printf %s "(cached) " >&6 else $as_nop if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5 fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 printf "%s\n" "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 printf %s "checking target system type... " >&6; } if test ${ac_cv_target+y} then : printf %s "(cached) " >&6 else $as_nop if test "x$target_alias" = x; then ac_cv_target=$ac_cv_host else ac_cv_target=`$SHELL "${ac_aux_dir}config.sub" $target_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $target_alias failed" "$LINENO" 5 fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 printf "%s\n" "$ac_cv_target" >&6; } case $ac_cv_target in *-*-*) ;; *) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;; esac target=$ac_cv_target ac_save_IFS=$IFS; IFS='-' set x $ac_cv_target shift target_cpu=$1 target_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: target_os=$* IFS=$ac_save_IFS case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac # The aliases save the names the user supplied, while $host etc. # will get canonicalized. test -n "$target_alias" && test "$program_prefix$program_suffix$program_transform_name" = \ NONENONEs,x,x, && program_prefix=${target_alias}- am__api_version='1.16' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 printf %s "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if test ${ac_cv_path_install+y} then : printf %s "(cached) " >&6 else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac # Account for fact that we put trailing slashes in our PATH walk. case $as_dir in #(( ./ | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test ${ac_cv_path_install+y}; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 printf "%s\n" "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 printf %s "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`printf "%s\n" "$program_transform_name" | sed "$ac_script"` # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` if test x"${MISSING+set}" != xset; then MISSING="\${SHELL} '$am_aux_dir/missing'" fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 printf "%s\n" "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_STRIP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 printf "%s\n" "$STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_STRIP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 printf "%s\n" "$ac_ct_STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a race-free mkdir -p" >&5 printf %s "checking for a race-free mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if test ${ac_cv_path_mkdir+y} then : printf %s "(cached) " >&6 else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext" || continue case `"$as_dir$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir ('*'coreutils) '* | \ 'BusyBox '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test ${ac_cv_path_mkdir+y}; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 printf "%s\n" "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AWK+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 printf "%s\n" "$AWK" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$AWK" && break done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval test \${ac_cv_prog_make_${ac_make}_set+y} then : printf %s "(cached) " >&6 else $as_nop cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } SET_MAKE= else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test ${enable_silent_rules+y} then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 printf %s "checking whether $am_make supports nested variables... " >&6; } if test ${am_cv_make_support_nested_variables+y} then : printf %s "(cached) " >&6 else $as_nop if printf "%s\n" 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 printf "%s\n" "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='lasso' VERSION='2.8.2' printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h printf "%s\n" "#define VERSION \"$VERSION\"" >>confdefs.h # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to create a pax tar archive" >&5 printf %s "checking how to create a pax tar archive... " >&6; } # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_pax-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do { echo "$as_me:$LINENO: $_am_tar --version" >&5 ($_am_tar --version) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && break done am__tar="$_am_tar --format=posix -chf - "'"$$tardir"' am__tar_="$_am_tar --format=posix -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x pax -w "$$tardir"' am__tar_='pax -L -x pax -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H pax -L' am__tar_='find "$tardir" -print | cpio -o -H pax -L' am__untar='cpio -i -H pax -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_pax}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file { echo "$as_me:$LINENO: tardir=conftest.dir && eval $am__tar_ >conftest.tar" >&5 (tardir=conftest.dir && eval $am__tar_ >conftest.tar) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } rm -rf conftest.dir if test -s conftest.tar; then { echo "$as_me:$LINENO: $am__untar &5 ($am__untar &5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { echo "$as_me:$LINENO: cat conftest.dir/file" >&5 (cat conftest.dir/file) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } grep GrepMe conftest.dir/file >/dev/null 2>&1 && break fi done rm -rf conftest.dir if test ${am_cv_prog_tar_pax+y} then : printf %s "(cached) " >&6 else $as_nop am_cv_prog_tar_pax=$_am_tool fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_tar_pax" >&5 printf "%s\n" "$am_cv_prog_tar_pax" >&6; } # Variables for tags utilities; see am/tags.am if test -z "$CTAGS"; then CTAGS=ctags fi if test -z "$ETAGS"; then ETAGS=etags fi if test -z "$CSCOPE"; then CSCOPE=cscope fi # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi fi # Check whether --enable-silent-rules was given. if test ${enable_silent_rules+y} then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=0;; esac am_make=${MAKE-make} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 printf %s "checking whether $am_make supports nested variables... " >&6; } if test ${am_cv_make_support_nested_variables+y} then : printf %s "(cached) " >&6 else $as_nop if printf "%s\n" 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 printf "%s\n" "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' HAVE_AM_SILENT_RULES=yes if test x$HAVE_AM_SILENT_RULES != x; then HAVE_AM_SILENT_RULES_TRUE= HAVE_AM_SILENT_RULES_FALSE='#' else HAVE_AM_SILENT_RULES_TRUE='#' HAVE_AM_SILENT_RULES_FALSE= fi ac_config_headers="$ac_config_headers config.h lasso/lasso_config.h" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 printf %s "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } # Check whether --enable-maintainer-mode was given. if test ${enable_maintainer_mode+y} then : enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval else $as_nop USE_MAINTAINER_MODE=yes fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 printf "%s\n" "$USE_MAINTAINER_MODE" >&6; } if test $USE_MAINTAINER_MODE = yes; then MAINTAINER_MODE_TRUE= MAINTAINER_MODE_FALSE='#' else MAINTAINER_MODE_TRUE='#' MAINTAINER_MODE_FALSE= fi MAINT=$MAINTAINER_MODE_TRUE NULL= ### Sun Java environment needs to be told about platform... SUN_EXTRA_INCLUDE= case "${host}" in *-pc-mingw32) SUN_EXTRA_INCLUDE="win32" ;; *-pc-cygwin) SUN_EXTRA_INCLUDE="win32" ;; *linux*) SUN_EXTRA_INCLUDE="linux" ;; *solaris*) SUN_EXTRA_INCLUDE="solaris" ;; esac ### adapting build environment for different platforms... MINGW=0 DARWIN=0 case "${host}" in *aix*) CFLAGS="${CFLAGS} -D_ALL_SOURCE" ;; *-pc-mingw32) case "${build}" in *-pc-cygwin) CC="gcc -mno-cygwin" CFLAGS="${CFLAGS} -D_MSC_VER -DIN_LASSO -DMINGW -DWIN32 -D_WIN32 -I/usr/local/include" LDFLAGS="${LDFLAGS} -L/usr/local/lib" MINGW=1 ;; esac ;; *darwin*) DARWIN=1 ;; esac # OSX Fink if test -d /sw/bin ; then PATH=$PATH:/sw/bin fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. set dummy ${ac_tool_prefix}clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "clang", so it can be a program name with args. set dummy clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi fi test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 printf %s "checking whether the C compiler works... " >&6; } ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else $as_nop ac_file='' fi if test -z "$ac_file" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 printf %s "checking for C compiler default output file name... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 printf "%s\n" "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 printf %s "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else $as_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 printf "%s\n" "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 printf %s "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 printf "%s\n" "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 printf %s "checking for suffix of object files... " >&6; } if test ${ac_cv_objext+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 printf "%s\n" "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes else $as_nop ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_c_compiler_gnu if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 else $as_nop ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes else $as_nop CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else $as_nop ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi ac_prog_cc_stdc=no if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c11_program _ACEOF for ac_arg in '' -std=gnu11 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } CC="$CC $ac_cv_prog_cc_c11" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 ac_prog_cc_stdc=c11 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c99_program _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } CC="$CC $ac_cv_prog_cc_c99" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 ac_prog_cc_stdc=c99 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c89_program _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } CC="$CC $ac_cv_prog_cc_c89" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 ac_prog_cc_stdc=c89 fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 printf %s "checking whether $CC understands -c and -o together... " >&6; } if test ${am_cv_prog_cc_c_o+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 printf "%s\n" "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5 printf %s "checking whether ${MAKE-make} supports the include directive... " >&6; } cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5 (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } case $?:`cat confinc.out 2>/dev/null` in #( '0:this is the am__doit target') : case $s in #( BSD) : am__include='.include' am__quote='"' ;; #( *) : am__include='include' am__quote='' ;; esac ;; #( *) : ;; esac if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5 printf "%s\n" "${_am_result}" >&6; } # Check whether --enable-dependency-tracking was given. if test ${enable_dependency_tracking+y} then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 printf %s "checking dependency style of $depcc... " >&6; } if test ${am_cv_CC_dependencies_compiler_type+y} then : printf %s "(cached) " >&6 else $as_nop if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 printf "%s\n" "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi AM_CFLAGS="" ac_header= ac_cache= for ac_item in $ac_header_c_list do if test $ac_cache; then ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default" if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then printf "%s\n" "#define $ac_item 1" >> confdefs.h fi ac_header= ac_cache= elif test $ac_header; then ac_cache=$ac_item else ac_header=$ac_item fi done if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes then : printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 printf %s "checking for grep that handles long lines and -e... " >&6; } if test ${ac_cv_path_GREP+y} then : printf %s "(cached) " >&6 else $as_nop if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in grep ggrep do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 printf "%s\n" "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" # Autoupdate added the next two lines to ensure that your configure # script's behavior did not change. They are probably safe to remove. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 printf %s "checking for egrep... " >&6; } if test ${ac_cv_path_EGREP+y} then : printf %s "(cached) " >&6 else $as_nop if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in egrep do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 printf "%s\n" "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args. set dummy ${ac_tool_prefix}windres; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_RC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$RC"; then ac_cv_prog_RC="$RC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_RC="${ac_tool_prefix}windres" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RC=$ac_cv_prog_RC if test -n "$RC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RC" >&5 printf "%s\n" "$RC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_RC"; then ac_ct_RC=$RC # Extract the first word of "windres", so it can be a program name with args. set dummy windres; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_RC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_RC"; then ac_cv_prog_ac_ct_RC="$ac_ct_RC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RC="windres" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RC=$ac_cv_prog_ac_ct_RC if test -n "$ac_ct_RC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RC" >&5 printf "%s\n" "$ac_ct_RC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_RC" = x; then RC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RC=$ac_ct_RC fi else RC="$ac_cv_prog_RC" fi if test "x$CC" != xcc; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC and cc understand -c and -o together" >&5 printf %s "checking whether $CC and cc understand -c and -o together... " >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether cc understands -c and -o together" >&5 printf %s "checking whether cc understands -c and -o together... " >&6; } fi set dummy $CC; ac_cc=`printf "%s\n" "$2" | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` if eval test \${ac_cv_prog_cc_${ac_cc}_c_o+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # We do the test twice because some compilers refuse to overwrite an # existing .o file with -o, though they will create one. ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5' rm -f conftest2.* if { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -f conftest2.$ac_objext && { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then eval ac_cv_prog_cc_${ac_cc}_c_o=yes if test "x$CC" != xcc; then # Test first that cc exists at all. if { ac_try='cc -c conftest.$ac_ext >&5' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5' rm -f conftest2.* if { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -f conftest2.$ac_objext && { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # cc works too. : else # cc exists but doesn't like -o. eval ac_cv_prog_cc_${ac_cc}_c_o=no fi fi fi else eval ac_cv_prog_cc_${ac_cc}_c_o=no fi rm -rf core conftest* fi if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } printf "%s\n" "#define NO_MINUS_C_MINUS_O 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 printf %s "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AWK+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 printf "%s\n" "$AWK" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$AWK" && break done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 printf %s "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 printf "%s\n" "no, using $LN_S" >&6; } fi enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args. set dummy ${ac_tool_prefix}as; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AS+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$AS"; then ac_cv_prog_AS="$AS" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AS="${ac_tool_prefix}as" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AS=$ac_cv_prog_AS if test -n "$AS"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AS" >&5 printf "%s\n" "$AS" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_AS"; then ac_ct_AS=$AS # Extract the first word of "as", so it can be a program name with args. set dummy as; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_AS+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_AS"; then ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AS="as" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AS=$ac_cv_prog_ac_ct_AS if test -n "$ac_ct_AS"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5 printf "%s\n" "$ac_ct_AS" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_AS" = x; then AS="false" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AS=$ac_ct_AS fi else AS="$ac_cv_prog_AS" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_DLLTOOL+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 printf "%s\n" "$DLLTOOL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_DLLTOOL+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 printf "%s\n" "$ac_ct_DLLTOOL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_OBJDUMP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 printf "%s\n" "$OBJDUMP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_OBJDUMP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 printf "%s\n" "$ac_ct_OBJDUMP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi ;; esac test -z "$AS" && AS=as test -z "$DLLTOOL" && DLLTOOL=dlltool test -z "$OBJDUMP" && OBJDUMP=objdump case `pwd` in *\ * | *\ *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 printf "%s\n" "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac macro_version='2.4.7' macro_revision='2.4.7' ltmain=$ac_aux_dir/ltmain.sh # Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\(["`$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 printf %s "checking how to print strings... " >&6; } # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "" } case $ECHO in printf*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: printf" >&5 printf "%s\n" "printf" >&6; } ;; print*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 printf "%s\n" "print -r" >&6; } ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: cat" >&5 printf "%s\n" "cat" >&6; } ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 printf %s "checking for a sed that does not truncate output... " >&6; } if test ${ac_cv_path_SED+y} then : printf %s "(cached) " >&6 else $as_nop ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in sed gsed do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 printf "%s\n" "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 printf %s "checking for fgrep... " >&6; } if test ${ac_cv_path_FGREP+y} then : printf %s "(cached) " >&6 else $as_nop if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then ac_path_FGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in fgrep do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_FGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_FGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_FGREP"; then as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_FGREP=$FGREP fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 printf "%s\n" "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. if test ${with_gnu_ld+y} then : withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes else $as_nop with_gnu_ld=no fi ac_prog=ld if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 printf %s "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return, which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD=$ac_prog ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test yes = "$with_gnu_ld"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 printf %s "checking for GNU ld... " >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 printf %s "checking for non-GNU ld... " >&6; } fi if test ${lt_cv_path_LD+y} then : printf %s "(cached) " >&6 else $as_nop if test -z "$LD"; then lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD=$ac_dir/$ac_prog # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 printf "%s\n" "$LD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 printf %s "checking if the linker ($LD) is GNU ld... " >&6; } if test ${lt_cv_prog_gnu_ld+y} then : printf %s "(cached) " >&6 else $as_nop # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 printf "%s\n" "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 printf %s "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if test ${lt_cv_path_NM+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM=$NM else lt_nm_to_check=${ac_tool_prefix}nm if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. tmp_nm=$ac_dir/$lt_tmp_nm if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then # Check to see if the nm accepts a BSD-compat flag. # Adding the 'sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty case $build_os in mingw*) lt_bad_file=conftest.nm/nofile ;; *) lt_bad_file=/dev/null ;; esac case `"$tmp_nm" -B $lt_bad_file 2>&1 | $SED '1q'` in *$lt_bad_file* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break 2 ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | $SED '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break 2 ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS=$lt_save_ifs done : ${lt_cv_path_NM=no} fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 printf "%s\n" "$lt_cv_path_NM" >&6; } if test no != "$lt_cv_path_NM"; then NM=$lt_cv_path_NM else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else if test -n "$ac_tool_prefix"; then for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_DUMPBIN+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 printf "%s\n" "$DUMPBIN" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_DUMPBIN+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 printf "%s\n" "$ac_ct_DUMPBIN" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN fi fi case `$DUMPBIN -symbols -headers /dev/null 2>&1 | $SED '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols -headers" ;; *) DUMPBIN=: ;; esac fi if test : != "$DUMPBIN"; then NM=$DUMPBIN fi fi test -z "$NM" && NM=nm { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 printf %s "checking the name lister ($NM) interface... " >&6; } if test ${lt_cv_nm_interface+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 printf "%s\n" "$lt_cv_nm_interface" >&6; } # find the maximum length of command line arguments { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 printf %s "checking the maximum length of command line arguments... " >&6; } if test ${lt_cv_sys_max_cmd_len+y} then : printf %s "(cached) " >&6 else $as_nop i=0 teststring=ABCD case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; bitrig* | darwin* | dragonfly* | freebsd* | midnightbsd* | netbsd* | openbsd*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | $SED 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len" && \ test undefined != "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test X`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test 17 != "$i" # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac fi if test -n "$lt_cv_sys_max_cmd_len"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 printf "%s\n" "$lt_cv_sys_max_cmd_len" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none" >&5 printf "%s\n" "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 printf %s "checking how to convert $build file names to $host format... " >&6; } if test ${lt_cv_to_host_file_cmd+y} then : printf %s "(cached) " >&6 else $as_nop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac fi to_host_file_cmd=$lt_cv_to_host_file_cmd { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 printf "%s\n" "$lt_cv_to_host_file_cmd" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 printf %s "checking how to convert $build file names to toolchain format... " >&6; } if test ${lt_cv_to_tool_file_cmd+y} then : printf %s "(cached) " >&6 else $as_nop #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 printf "%s\n" "$lt_cv_to_tool_file_cmd" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 printf %s "checking for $LD option to reload object files... " >&6; } if test ${lt_cv_ld_reload_flag+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_ld_reload_flag='-r' fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 printf "%s\n" "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) if test yes != "$GCC"; then reload_cmds=false fi ;; darwin*) if test yes = "$GCC"; then reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}file", so it can be a program name with args. set dummy ${ac_tool_prefix}file; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_FILECMD+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$FILECMD"; then ac_cv_prog_FILECMD="$FILECMD" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_FILECMD="${ac_tool_prefix}file" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi FILECMD=$ac_cv_prog_FILECMD if test -n "$FILECMD"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $FILECMD" >&5 printf "%s\n" "$FILECMD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_FILECMD"; then ac_ct_FILECMD=$FILECMD # Extract the first word of "file", so it can be a program name with args. set dummy file; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_FILECMD+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_FILECMD"; then ac_cv_prog_ac_ct_FILECMD="$ac_ct_FILECMD" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_FILECMD="file" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_FILECMD=$ac_cv_prog_ac_ct_FILECMD if test -n "$ac_ct_FILECMD"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FILECMD" >&5 printf "%s\n" "$ac_ct_FILECMD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_FILECMD" = x; then FILECMD=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac FILECMD=$ac_ct_FILECMD fi else FILECMD="$ac_cv_prog_FILECMD" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_OBJDUMP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 printf "%s\n" "$OBJDUMP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_OBJDUMP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 printf "%s\n" "$ac_ct_OBJDUMP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 printf %s "checking how to recognize dependent libraries... " >&6; } if test ${lt_cv_deplibs_check_method+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # 'unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # that responds to the $file_magic_cmd with a given extended regex. # If you have 'file' or equivalent on your system and you're not sure # whether 'pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='$FILECMD -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. if ( file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly* | midnightbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=$FILECMD lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=$FILECMD case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[3-9]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=$FILECMD lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd* | bitrig*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; os2*) lt_cv_deplibs_check_method=pass_all ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 printf "%s\n" "$lt_cv_deplibs_check_method" >&6; } file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_DLLTOOL+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 printf "%s\n" "$DLLTOOL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_DLLTOOL+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 printf "%s\n" "$ac_ct_DLLTOOL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi test -z "$DLLTOOL" && DLLTOOL=dlltool { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 printf %s "checking how to associate runtime and link libraries... " >&6; } if test ${lt_cv_sharedlib_from_linklib_cmd+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh; # decide which one to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd=$ECHO ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 printf "%s\n" "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO if test -n "$ac_tool_prefix"; then for ac_prog in ar do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AR+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 printf "%s\n" "$AR" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_AR+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 printf "%s\n" "$ac_ct_AR" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} # Use ARFLAGS variable as AR's operation code to sync the variable naming with # Automake. If both AR_FLAGS and ARFLAGS are specified, AR_FLAGS should have # higher priority because thats what people were doing historically (setting # ARFLAGS for automake and AR_FLAGS for libtool). FIXME: Make the AR_FLAGS # variable obsoleted/removed. test ${AR_FLAGS+y} || AR_FLAGS=${ARFLAGS-cr} lt_ar_flags=$AR_FLAGS # Make AR_FLAGS overridable by 'make ARFLAGS='. Don't try to run-time override # by AR_FLAGS because that was never working and AR_FLAGS is about to die. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 printf %s "checking for archiver @FILE support... " >&6; } if test ${lt_cv_ar_at_file+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test 0 -eq "$ac_status"; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test 0 -ne "$ac_status"; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 printf "%s\n" "$lt_cv_ar_at_file" >&6; } if test no = "$lt_cv_ar_at_file"; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_STRIP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 printf "%s\n" "$STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_STRIP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 printf "%s\n" "$ac_ct_STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_RANLIB+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 printf "%s\n" "$RANLIB" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_RANLIB+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 printf "%s\n" "$ac_ct_RANLIB" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in bitrig* | openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 printf %s "checking command to parse $NM output from $compiler object... " >&6; } if test ${lt_cv_sys_global_symbol_pipe+y} then : printf %s "(cached) " >&6 else $as_nop # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) if test ia64 = "$host_cpu"; then symcode='[ABCDEGRST]' fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Gets list of data symbols to import. lt_cv_sys_global_symbol_to_import="$SED -n -e 's/^I .* \(.*\)$/\1/p'" # Adjust the below global symbol transforms to fixup imported variables. lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" lt_c_name_lib_hook="\ -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" else # Disable hooks by default. lt_cv_sys_global_symbol_to_import= lt_cdecl_hook= lt_c_name_hook= lt_c_name_lib_hook= fi # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="$SED -n"\ $lt_cdecl_hook\ " -e 's/^T .* \(.*\)$/extern int \1();/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="$SED -n"\ $lt_c_name_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" # Transform an extracted symbol line into symbol name with lib prefix and # symbol address. lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="$SED -n"\ $lt_c_name_lib_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function, # D for any global variable and I for any imported variable. # Also find C++ and __fastcall symbols from MSVC++ or ICC, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ " /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ " /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ " {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ " s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else lt_cv_sys_global_symbol_pipe="$SED -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | $SED '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm $ECHO "$as_me:$LINENO: $NM conftest.$ac_objext | $lt_cv_sys_global_symbol_pipe > $nlist" >&5 if eval "$NM" conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist 2>&5 && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS=conftstm.$ac_objext CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test yes = "$pipe_works"; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: failed" >&5 printf "%s\n" "failed" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ok" >&5 printf "%s\n" "ok" >&6; } fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then nm_file_list_spec='@' fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 printf %s "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. if test ${with_sysroot+y} then : withval=$with_sysroot; else $as_nop with_sysroot=no fi lt_sysroot= case $with_sysroot in #( yes) if test yes = "$GCC"; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | $SED -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 printf "%s\n" "$with_sysroot" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 printf "%s\n" "${lt_sysroot:-no}" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 printf %s "checking for a working dd... " >&6; } if test ${ac_cv_path_lt_DD+y} then : printf %s "(cached) " >&6 else $as_nop printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i : ${lt_DD:=$DD} if test -z "$lt_DD"; then ac_path_lt_DD_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in dd do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_lt_DD="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_lt_DD" || continue if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: fi $ac_path_lt_DD_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_lt_DD"; then : fi else ac_cv_path_lt_DD=$lt_DD fi rm -f conftest.i conftest2.i conftest.out fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 printf "%s\n" "$ac_cv_path_lt_DD" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 printf %s "checking how to truncate binary pipes... " >&6; } if test ${lt_cv_truncate_bin+y} then : printf %s "(cached) " >&6 else $as_nop printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i lt_cv_truncate_bin= if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" fi rm -f conftest.i conftest2.i conftest.out test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 printf "%s\n" "$lt_cv_truncate_bin" >&6; } # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. func_cc_basename () { for cc_temp in $*""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` } # Check whether --enable-libtool-lock was given. if test ${enable_libtool_lock+y} then : enableval=$enable_libtool_lock; fi test no = "$enable_libtool_lock" || enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out what ABI is being produced by ac_compile, and set mode # options accordingly. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `$FILECMD conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE=32 ;; *ELF-64*) HPUX_IA64_MODE=64 ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test yes = "$lt_cv_prog_gnu_ld"; then case `$FILECMD conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `$FILECMD conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; mips64*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then emul=elf case `$FILECMD conftest.$ac_objext` in *32-bit*) emul="${emul}32" ;; *64-bit*) emul="${emul}64" ;; esac case `$FILECMD conftest.$ac_objext` in *MSB*) emul="${emul}btsmip" ;; *LSB*) emul="${emul}ltsmip" ;; esac case `$FILECMD conftest.$ac_objext` in *N32*) emul="${emul}n32" ;; esac LD="${LD-ld} -m $emul" fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. Note that the listed cases only cover the # situations where additional linker options are needed (such as when # doing 32-bit compilation for a host where ld defaults to 64-bit, or # vice versa); the common cases where no linker options are needed do # not appear in the list. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `$FILECMD conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) case `$FILECMD conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" ;; *) LD="${LD-ld} -m elf_i386" ;; esac ;; powerpc64le-*linux*) LD="${LD-ld} -m elf32lppclinux" ;; powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; powerpcle-*linux*) LD="${LD-ld} -m elf64lppc" ;; powerpc-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -belf" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 printf %s "checking whether the C compiler needs -belf... " >&6; } if test ${lt_cv_cc_needs_belf+y} then : printf %s "(cached) " >&6 else $as_nop ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : lt_cv_cc_needs_belf=yes else $as_nop lt_cv_cc_needs_belf=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 printf "%s\n" "$lt_cv_cc_needs_belf" >&6; } if test yes != "$lt_cv_cc_needs_belf"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS=$SAVE_CFLAGS fi ;; *-*solaris*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `$FILECMD conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*|x86_64-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD=${LD-ld}_sol2 fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks=$enable_libtool_lock if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_MANIFEST_TOOL+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 printf "%s\n" "$MANIFEST_TOOL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_MANIFEST_TOOL+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 printf "%s\n" "$ac_ct_MANIFEST_TOOL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then MANIFEST_TOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL fi else MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 printf %s "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } if test ${lt_cv_path_mainfest_tool+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&5 if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 printf "%s\n" "$lt_cv_path_mainfest_tool" >&6; } if test yes != "$lt_cv_path_mainfest_tool"; then MANIFEST_TOOL=: fi case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_DSYMUTIL+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 printf "%s\n" "$DSYMUTIL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_DSYMUTIL+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 printf "%s\n" "$ac_ct_DSYMUTIL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_NMEDIT+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 printf "%s\n" "$NMEDIT" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_NMEDIT+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_NMEDIT="nmedit" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 printf "%s\n" "$ac_ct_NMEDIT" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_LIPO+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 printf "%s\n" "$LIPO" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_LIPO+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LIPO="lipo" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 printf "%s\n" "$ac_ct_LIPO" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_OTOOL+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 printf "%s\n" "$OTOOL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_OTOOL+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL="otool" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 printf "%s\n" "$ac_ct_OTOOL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_OTOOL64+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 printf "%s\n" "$OTOOL64" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_OTOOL64+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL64="otool64" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 printf "%s\n" "$ac_ct_OTOOL64" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 printf %s "checking for -single_module linker flag... " >&6; } if test ${lt_cv_apple_cc_single_mod+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_apple_cc_single_mod=no if test -z "$LT_MULTI_MODULE"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&5 $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&5 # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test 0 = "$_lt_result"; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 fi rm -rf libconftest.dylib* rm -f conftest.* fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 printf "%s\n" "$lt_cv_apple_cc_single_mod" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 printf %s "checking for -exported_symbols_list linker flag... " >&6; } if test ${lt_cv_ld_exported_symbols_list+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : lt_cv_ld_exported_symbols_list=yes else $as_nop lt_cv_ld_exported_symbols_list=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 printf "%s\n" "$lt_cv_ld_exported_symbols_list" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 printf %s "checking for -force_load linker flag... " >&6; } if test ${lt_cv_ld_force_load+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 echo "$AR $AR_FLAGS libconftest.a conftest.o" >&5 $AR $AR_FLAGS libconftest.a conftest.o 2>&5 echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&5 elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then lt_cv_ld_force_load=yes else cat conftest.err >&5 fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 printf "%s\n" "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; darwin*) case $MACOSX_DEPLOYMENT_TARGET,$host in 10.[012],*|,*powerpc*-darwin[5-8]*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; *) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test yes = "$lt_cv_apple_cc_single_mod"; then _lt_dar_single_mod='$single_module' fi if test yes = "$lt_cv_ld_exported_symbols_list"; then _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' fi if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac # func_munge_path_list VARIABLE PATH # ----------------------------------- # VARIABLE is name of variable containing _space_ separated list of # directories to be munged by the contents of PATH, which is string # having a format: # "DIR[:DIR]:" # string "DIR[ DIR]" will be prepended to VARIABLE # ":DIR[:DIR]" # string "DIR[ DIR]" will be appended to VARIABLE # "DIRP[:DIRP]::[DIRA:]DIRA" # string "DIRP[ DIRP]" will be prepended to VARIABLE and string # "DIRA[ DIRA]" will be appended to VARIABLE # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { case x$2 in x) ;; *:) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" ;; x:*) eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" ;; *::*) eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" ;; *) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" ;; esac } ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " if test "x$ac_cv_header_dlfcn_h" = xyes then : printf "%s\n" "#define HAVE_DLFCN_H 1" >>confdefs.h fi # Set options enable_dlopen=no # Check whether --enable-shared was given. if test ${enable_shared+y} then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS=$lt_save_ifs ;; esac else $as_nop enable_shared=yes fi # Check whether --enable-static was given. if test ${enable_static+y} then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS=$lt_save_ifs ;; esac else $as_nop enable_static=yes fi # Check whether --with-pic was given. if test ${with_pic+y} then : withval=$with_pic; lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for lt_pkg in $withval; do IFS=$lt_save_ifs if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS=$lt_save_ifs ;; esac else $as_nop pic_mode=default fi # Check whether --enable-fast-install was given. if test ${enable_fast_install+y} then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS=$lt_save_ifs ;; esac else $as_nop enable_fast_install=yes fi shared_archive_member_spec= case $host,$enable_shared in power*-*-aix[5-9]*,yes) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 printf %s "checking which variant of shared library versioning to provide... " >&6; } # Check whether --with-aix-soname was given. if test ${with_aix_soname+y} then : withval=$with_aix_soname; case $withval in aix|svr4|both) ;; *) as_fn_error $? "Unknown argument to --with-aix-soname" "$LINENO" 5 ;; esac lt_cv_with_aix_soname=$with_aix_soname else $as_nop if test ${lt_cv_with_aix_soname+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_with_aix_soname=aix fi with_aix_soname=$lt_cv_with_aix_soname fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 printf "%s\n" "$with_aix_soname" >&6; } if test aix != "$with_aix_soname"; then # For the AIX way of multilib, we name the shared archive member # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, # the AIX toolchain works better with OBJECT_MODE set (default 32). if test 64 = "${OBJECT_MODE-32}"; then shared_archive_member_spec=shr_64 else shared_archive_member_spec=shr fi fi ;; *) with_aix_soname=aix ;; esac # This can be used to rebuild libtool when needed LIBTOOL_DEPS=$ltmain # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' test -z "$LN_S" && LN_S="ln -s" if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 printf %s "checking for objdir... " >&6; } if test ${lt_cv_objdir+y} then : printf %s "(cached) " >&6 else $as_nop rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 printf "%s\n" "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir printf "%s\n" "#define LT_OBJDIR \"$lt_cv_objdir/\"" >>confdefs.h case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a '.a' archive for static linking (except MSVC and # ICC, which need '.lib'). libext=a with_gnu_ld=$lt_cv_prog_gnu_ld old_CC=$CC old_CFLAGS=$CFLAGS # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o func_cc_basename $compiler cc_basename=$func_cc_basename_result # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 printf %s "checking for ${ac_tool_prefix}file... " >&6; } if test ${lt_cv_path_MAGIC_CMD+y} then : printf %s "(cached) " >&6 else $as_nop case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD=$MAGIC_CMD lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/${ac_tool_prefix}file"; then lt_cv_path_MAGIC_CMD=$ac_dir/"${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac fi MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 printf "%s\n" "$MAGIC_CMD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for file" >&5 printf %s "checking for file... " >&6; } if test ${lt_cv_path_MAGIC_CMD+y} then : printf %s "(cached) " >&6 else $as_nop case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD=$MAGIC_CMD lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/file"; then lt_cv_path_MAGIC_CMD=$ac_dir/"file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac fi MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 printf "%s\n" "$MAGIC_CMD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac # Use C for the default configuration in the libtool script lt_save_CC=$CC ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= if test yes = "$GCC"; then case $cc_basename in nvcc*) lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; *) lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 printf %s "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if test ${lt_cv_prog_compiler_rtti_exceptions+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $RM conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 printf "%s\n" "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= if test yes = "$GCC"; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi lt_prog_compiler_pic='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' case $host_os in os2*) lt_prog_compiler_static='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; *) lt_prog_compiler_pic='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl='-Xlinker ' if test -n "$lt_prog_compiler_pic"; then lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' case $cc_basename in nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; esac ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' case $host_os in os2*) lt_prog_compiler_static='$wl-static' ;; esac ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='$wl-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64, which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; # flang / f18. f95 an alias for gfortran or flang on Debian flang* | f18* | f95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; tcc*) # Fabrice Bellard et al's Tiny C Compiler lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | $SED 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; *Portland\ Group*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi case $host_os in # For platforms that do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 printf %s "checking for $compiler option to produce PIC... " >&6; } if test ${lt_cv_prog_compiler_pic+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_prog_compiler_pic=$lt_prog_compiler_pic fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 printf "%s\n" "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 printf %s "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if test ${lt_cv_prog_compiler_pic_works+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works=yes fi fi $RM conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 printf "%s\n" "$lt_cv_prog_compiler_pic_works" >&6; } if test yes = "$lt_cv_prog_compiler_pic_works"; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 printf %s "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if test ${lt_cv_prog_compiler_static_works+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_prog_compiler_static_works=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 printf "%s\n" "$lt_cv_prog_compiler_static_works" >&6; } if test yes = "$lt_cv_prog_compiler_static_works"; then : else lt_prog_compiler_static= fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test ${lt_cv_prog_compiler_c_o+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test ${lt_cv_prog_compiler_c_o+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; } hard_links=nottested if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 printf %s "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 printf "%s\n" "$hard_links" >&6; } if test no = "$hard_links"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 printf "%s\n" "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= always_export_symbols=no archive_cmds= archive_expsym_cmds= compiler_needs_object=no enable_shared_with_static_runtimes=no export_dynamic_flag_spec= export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic=no hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported inherit_rpath=no link_all_deplibs=unknown module_cmds= module_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= thread_safe_flag_spec= whole_archive_flag_spec= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ' (' and ')$', so one must not match beginning or # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', # as well as any symbol that contains 'd'. exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ and ICC port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++ or Intel C++ Compiler. if test yes != "$GCC"; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++ or ICC) with_gnu_ld=yes ;; openbsd* | bitrig*) with_gnu_ld=no ;; linux* | k*bsd*-gnu | gnu*) link_all_deplibs=no ;; esac ld_shlibs=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test yes = "$with_gnu_ld"; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; *\ \(GNU\ Binutils\)\ [3-9]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test yes = "$lt_use_gnu_ld_interface"; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='$wl' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' export_dynamic_flag_spec='$wl--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test ia64 != "$host_cpu"; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' export_dynamic_flag_spec='$wl--export-all-symbols' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; haiku*) archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' link_all_deplibs=yes ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported shrext_cmds=.dll archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes=yes file_list_spec='@' ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='$wl-rpath,$libdir' export_dynamic_flag_spec='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test linux-dietlibc = "$host_os"; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test no = "$tmp_diet" then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; nagfor*) # NAGFOR 5.3 tmp_sharedflag='-Wl,-shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' compiler_needs_object=yes ;; esac case `$CC -V 2>&1 | $SED 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi case $cc_basename in tcc*) hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' export_dynamic_flag_spec='-rdynamic' ;; xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test yes = "$supports_anon_versioning"; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs=no fi ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test no = "$ld_shlibs"; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag= else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then aix_use_runtimelinking=yes break fi done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes file_list_spec='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # traditional, no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. hardcode_direct=no hardcode_direct_absolute=no ;; esac if test yes = "$GCC"; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag="$shared_flag "'$wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi export_dynamic_flag_spec='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if test ${lt_cv_aix_libpath_+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then hardcode_libdir_flag_spec='$wl-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if test ${lt_cv_aix_libpath_+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' $wl-bernotok' allow_undefined_flag=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' fi archive_cmds_need_lc=yes archive_expsym_cmds='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols archive_expsym_cmds="$archive_expsym_cmds"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi archive_expsym_cmds="$archive_expsym_cmds"'~$RM -r $output_objdir/$realname.d' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++ or Intel C++ Compiler. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl* | icl*) # Native MSVC or ICC hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported always_export_symbols=yes file_list_spec='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, )='true' enable_shared_with_static_runtimes=yes exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds='chmod 644 $oldlib' postlink_cmds='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC and ICC wrapper hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' enable_shared_with_static_runtimes=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported if test yes = "$lt_cv_ld_force_load"; then whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec='' fi link_all_deplibs=yes allow_undefined_flag=$_lt_dar_allow_undefined case $cc_basename in ifort*|nagfor*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test yes = "$_lt_dar_can_shared"; then output_verbose_link_cmd=func_echo_all archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" archive_expsym_cmds="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" module_expsym_cmds="$SED -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly* | midnightbsd*) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test yes = "$GCC"; then archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='$wl-E' ;; hpux10*) if test yes,no = "$GCC,$with_gnu_ld"; then archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test no = "$with_gnu_ld"; then hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test yes,no = "$GCC,$with_gnu_ld"; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 printf %s "checking if $CC understands -b... " >&6; } if test ${lt_cv_prog_compiler__b+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_prog_compiler__b=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -b" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler__b=yes fi else lt_cv_prog_compiler__b=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 printf "%s\n" "$lt_cv_prog_compiler__b" >&6; } if test yes = "$lt_cv_prog_compiler__b"; then archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi ;; esac fi if test no = "$with_gnu_ld"; then hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test yes = "$GCC"; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 printf %s "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if test ${lt_cv_irix_exported_symbol+y} then : printf %s "(cached) " >&6 else $as_nop save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : lt_cv_irix_exported_symbol=yes else $as_nop lt_cv_irix_exported_symbol=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 printf "%s\n" "$lt_cv_irix_exported_symbol" >&6; } if test yes = "$lt_cv_irix_exported_symbol"; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi link_all_deplibs=no else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; linux*) case $cc_basename in tcc*) # Fabrice Bellard et al's Tiny C Compiler ld_shlibs=yes archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' ;; esac ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; *nto* | *qnx*) ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='$wl-rpath,$libdir' export_dynamic_flag_spec='$wl-E' else archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='$wl-rpath,$libdir' fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported shrext_cmds=.dll archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes=yes file_list_spec='@' ;; osf3*) if test yes = "$GCC"; then allow_undefined_flag=' $wl-expect_unresolved $wl\*' archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test yes = "$GCC"; then allow_undefined_flag=' $wl-expect_unresolved $wl\*' archive_cmds='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi archive_cmds_need_lc='no' hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z defs' if test yes = "$GCC"; then wlarc='$wl' archive_cmds='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='$wl' archive_cmds='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. GCC discards it without '$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test yes = "$GCC"; then whole_archive_flag_spec='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=yes ;; sunos4*) if test sequent = "$host_vendor"; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='$wl-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='$wl-z,text' allow_undefined_flag='$wl-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='$wl-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='$wl-Bexport' runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac if test sni = "$host_vendor"; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec='$wl-Blargedynsym' ;; esac fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 printf "%s\n" "$ld_shlibs" >&6; } test no = "$ld_shlibs" && can_build_shared=no with_gnu_ld=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test yes,yes = "$GCC,$enable_shared"; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 printf %s "checking whether -lc should be explicitly linked in... " >&6; } if test ${lt_cv_archive_cmds_need_lc+y} then : printf %s "(cached) " >&6 else $as_nop $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no else lt_cv_archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 printf "%s\n" "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac fi ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 printf %s "checking dynamic linker characteristics... " >&6; } if test yes = "$GCC"; then case $host_os in darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; *) lt_awk_arg='/^libraries:/' ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;; *) lt_sed_strip_eq='s|=/|/|g' ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary... lt_tmp_lt_search_path_spec= lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` # ...but if some path component already ends with the multilib dir we assume # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). case "$lt_multi_os_dir; $lt_search_path_spec " in "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) lt_multi_os_dir= ;; esac for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" elif test -n "$lt_multi_os_dir"; then test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS = " "; FS = "/|\n";} { lt_foo = ""; lt_count = 0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo = "/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[lt_foo]++; } if (lt_freq[lt_foo] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's|/\([A-Za-z]:\)|\1|g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=.so postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='$libname$release$shared_ext$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test ia64 = "$host_cpu"; then # AIX 5 supports IA64 library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line '#! .'. This would cause the generated library to # depend on '.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # Using Import Files as archive members, it is possible to support # filename-based versioning of shared library archives on AIX. While # this would work for both with and without runtime linking, it will # prevent static linking of such archives. So we do filename-based # shared library versioning with .so extension only, which is used # when both runtime linking and shared linking is enabled. # Unfortunately, runtime linking may impact performance, so we do # not want this to be the default eventually. Also, we use the # versioned .so libs for executables only if there is the -brtl # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. # To allow for filename-based versioning support, we need to create # libNAME.so.V as an archive file, containing: # *) an Import File, referring to the versioned filename of the # archive as well as the shared archive member, telling the # bitwidth (32 or 64) of that shared object, and providing the # list of exported symbols of that shared object, eventually # decorated with the 'weak' keyword # *) the shared object with the F_LOADONLY flag set, to really avoid # it being seen by the linker. # At run time we better use the real file rather than another symlink, # but for link time we create the symlink libNAME.so -> libNAME.so.V case $with_aix_soname,$aix_use_runtimelinking in # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. aix,yes) # traditional libtool dynamic_linker='AIX unversionable lib.so' # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; aix,no) # traditional AIX only dynamic_linker='AIX lib.a(lib.so.V)' # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' ;; svr4,*) # full svr4 only dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,yes) # both, prefer svr4 dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # unpreferred sharedlib libNAME.a needs extra handling postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,no) # both, prefer aix dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)" library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' ;; esac shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='$libname$shared_ext' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo $libname | $SED -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo $libname | $SED -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl* | *,icl*) # Native MSVC or ICC libname_spec='$name' soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' library_names_spec='$libname.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec=$LIB if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC and ICC wrapper library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' soname_spec='$libname$release$major$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly* | midnightbsd*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=no sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' if test 32 = "$HPUX_IA64_MODE"; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" sys_lib_dlsearch_path_spec=/usr/lib/hpux32 else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" sys_lib_dlsearch_path_spec=/usr/lib/hpux64 fi ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test yes = "$lt_cv_prog_gnu_ld"; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; linux*android*) version_type=none # Android doesn't support versioned libraries. need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext' soname_spec='$libname$release$shared_ext' finish_cmds= shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes dynamic_linker='Android linker' # Don't embed -rpath directories since the linker doesn't support them. hardcode_libdir_flag_spec='-L$libdir' ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if test ${lt_cv_shlibpath_overrides_runpath+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Ideally, we could use ldconfig to report *all* directores which are # searched for libraries, however this is still not possible. Aside from not # being certain /sbin/ldconfig is available, command # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, # even though it is searched at run-time. Try to do the best guess by # appending ld.so.conf contents (and includes) to the search path. if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd* | bitrig*) version_type=sunos sys_lib_dlsearch_path_spec=/usr/lib need_lib_prefix=no if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then need_version=no else need_version=yes fi library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; os2*) libname_spec='$name' version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no # OS/2 can only load a DLL with a base name of 8 characters or less. soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; v=$($ECHO $release$versuffix | tr -d .-); n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); $ECHO $n$v`$shared_ext' library_names_spec='${libname}_dll.$libext' dynamic_linker='OS/2 ld.exe' shlibpath_var=BEGINLIBPATH sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test yes = "$with_gnu_ld"; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec; then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' soname_spec='$libname$shared_ext.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=sco need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test yes = "$with_gnu_ld"; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 printf "%s\n" "$dynamic_linker" >&6; } test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test yes = "$GCC"; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec fi if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec fi # remember unaugmented sys_lib_dlsearch_path content for libtool script decls... configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec # ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" # to be used as default LT_SYS_LIBRARY_PATH value in generated libtool configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 printf %s "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || test yes = "$hardcode_automatic"; then # We can hardcode non-existent directories. if test no != "$hardcode_direct" && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, )" && test no != "$hardcode_minus_L"; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 printf "%s\n" "$hardcode_action" >&6; } if test relink = "$hardcode_action" || test yes = "$inherit_rpath"; then # Fast installation is not supported enable_fast_install=no elif test yes = "$shlibpath_overrides_runpath" || test no = "$enable_shared"; then # Fast installation is not necessary enable_fast_install=needless fi if test yes != "$enable_dlopen"; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen=load_add_on lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen=LoadLibrary lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen=dlopen lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 printf %s "checking for dlopen in -ldl... " >&6; } if test ${ac_cv_lib_dl_dlopen+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char dlopen (); int main (void) { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_dl_dlopen=yes else $as_nop ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl else $as_nop lt_cv_dlopen=dyld lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; tpf*) # Don't try to run any link tests for TPF. We know it's impossible # because TPF is a cross-compiler, and we know how we open DSOs. lt_cv_dlopen=dlopen lt_cv_dlopen_libs= lt_cv_dlopen_self=no ;; *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" if test "x$ac_cv_func_shl_load" = xyes then : lt_cv_dlopen=shl_load else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 printf %s "checking for shl_load in -ldld... " >&6; } if test ${ac_cv_lib_dld_shl_load+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char shl_load (); int main (void) { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_dld_shl_load=yes else $as_nop ac_cv_lib_dld_shl_load=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 printf "%s\n" "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes then : lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld else $as_nop ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = xyes then : lt_cv_dlopen=dlopen else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 printf %s "checking for dlopen in -ldl... " >&6; } if test ${ac_cv_lib_dl_dlopen+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char dlopen (); int main (void) { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_dl_dlopen=yes else $as_nop ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 printf %s "checking for dlopen in -lsvld... " >&6; } if test ${ac_cv_lib_svld_dlopen+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char dlopen (); int main (void) { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_svld_dlopen=yes else $as_nop ac_cv_lib_svld_dlopen=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 printf "%s\n" "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = xyes then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 printf %s "checking for dld_link in -ldld... " >&6; } if test ${ac_cv_lib_dld_dld_link+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char dld_link (); int main (void) { return dld_link (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_dld_dld_link=yes else $as_nop ac_cv_lib_dld_dld_link=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 printf "%s\n" "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = xyes then : lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld fi fi fi fi fi fi ;; esac if test no = "$lt_cv_dlopen"; then enable_dlopen=no else enable_dlopen=yes fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS=$CPPFLAGS test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS=$LDFLAGS wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS=$LIBS LIBS="$lt_cv_dlopen_libs $LIBS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 printf %s "checking whether a program can dlopen itself... " >&6; } if test ${lt_cv_dlopen_self+y} then : printf %s "(cached) " >&6 else $as_nop if test yes = "$cross_compiling"; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 printf "%s\n" "$lt_cv_dlopen_self" >&6; } if test yes = "$lt_cv_dlopen_self"; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 printf %s "checking whether a statically linked program can dlopen itself... " >&6; } if test ${lt_cv_dlopen_self_static+y} then : printf %s "(cached) " >&6 else $as_nop if test yes = "$cross_compiling"; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 printf "%s\n" "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS=$save_CPPFLAGS LDFLAGS=$save_LDFLAGS LIBS=$save_LIBS ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi striplib= old_striplib= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 printf %s "checking whether stripping libraries is possible... " >&6; } if test -z "$STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } else if $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then old_striplib="$STRIP --strip-debug" striplib="$STRIP --strip-unneeded" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else case $host_os in darwin*) # FIXME - insert some real tests, host_os isn't really good enough striplib="$STRIP -x" old_striplib="$STRIP -S" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } ;; freebsd*) if $STRIP -V 2>&1 | $GREP "elftoolchain" >/dev/null; then old_striplib="$STRIP --strip-debug" striplib="$STRIP --strip-unneeded" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } ;; esac fi fi # Report what library types will actually be built { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 printf %s "checking if libtool supports shared libraries... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 printf "%s\n" "$can_build_shared" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 printf %s "checking whether to build shared libraries... " >&6; } test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 printf "%s\n" "$enable_shared" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 printf %s "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 printf "%s\n" "$enable_static" >&6; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC=$lt_save_CC # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o objext_RC=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code=$lt_simple_compile_test_code # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= CC=${RC-"windres"} CFLAGS= compiler=$CC compiler_RC=$CC func_cc_basename $compiler cc_basename=$func_cc_basename_result lt_cv_prog_compiler_c_o_RC=yes if test -n "$compiler"; then : fi GCC=$lt_save_GCC ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ac_config_commands="$ac_config_commands libtool" # Only expand once: list="-Wall -Wextra -Wno-missing-field-initializers -Wno-unused-parameter -Wold-style-definition -Wdeclaration-after-statement -Wmissing-declarations -Wredundant-decls -Wmissing-noreturn -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -Winline -Wformat-nonliteral -Wformat-security -Wswitch-enum -Wswitch-default -Winit-self -Wmissing-include-dirs -Wundef -Waggregate-return -Wmissing-format-attribute -Wnested-externs" flags_supported="" flags_unsupported="" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for supported compiler flags" >&5 printf %s "checking for supported compiler flags... " >&6; } for each in $list do save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $each" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : flag_ok=yes else $as_nop flag_ok=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$save_CFLAGS" if test "X$flag_ok" = Xyes ; then flags_supported="$flags_supported $each" else flags_unsupported="$flags_unsupported $each" fi done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $flags_supported" >&5 printf "%s\n" "$flags_supported" >&6; } if test "X$flags_unsupported" != X ; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unsupported compiler flags: $flags_unsupported" >&5 printf "%s\n" "$as_me: WARNING: unsupported compiler flags: $flags_unsupported" >&2;} fi WARNING_FLAGS="$WARNING_FLAGS $flags_supported" for ac_prog in gnutar gtar tar do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_TAR+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$TAR"; then ac_cv_prog_TAR="$TAR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_TAR="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi TAR=$ac_cv_prog_TAR if test -n "$TAR"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $TAR" >&5 printf "%s\n" "$TAR" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$TAR" && break done if test "x$CLASSPATH" = x; then echo "You have no CLASSPATH, I hope it is good" else echo "You have CLASSPATH $CLASSPATH, hope it is correct" fi if test "x$JAVAPREFIX" = x; then test "x$JAVAC" = x && for ac_prog in "gcj$EXEEXT -C" jikes$EXEEXT guavac$EXEEXT javac$EXEEXT do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_JAVAC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$JAVAC"; then ac_cv_prog_JAVAC="$JAVAC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_JAVAC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi JAVAC=$ac_cv_prog_JAVAC if test -n "$JAVAC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $JAVAC" >&5 printf "%s\n" "$JAVAC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$JAVAC" && break done else test "x$JAVAC" = x && for ac_prog in "gcj$EXEEXT -C" jikes$EXEEXT guavac$EXEEXT javac$EXEEXT do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_JAVAC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$JAVAC"; then ac_cv_prog_JAVAC="$JAVAC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_JAVAC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi JAVAC=$ac_cv_prog_JAVAC if test -n "$JAVAC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $JAVAC" >&5 printf "%s\n" "$JAVAC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$JAVAC" && break done test -n "$JAVAC" || JAVAC="$JAVAPREFIX" fi true { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $JAVAC works" >&5 printf %s "checking if $JAVAC works... " >&6; } if test ${ac_cv_prog_javac_works+y} then : printf %s "(cached) " >&6 else $as_nop JAVA_TEST=Test.java CLASS_TEST=Test.class cat << \EOF > $JAVA_TEST /* #line 14049 "configure" */ public class Test { } EOF if { ac_try='$JAVAC $JAVACFLAGS $JAVA_TEST' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 (eval $ac_try) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; } >/dev/null 2>&1; then ac_cv_prog_javac_works=yes else true echo "configure: failed program was:" >&5 cat $JAVA_TEST >&5 fi rm -f $JAVA_TEST $CLASS_TEST fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_javac_works" >&5 printf "%s\n" "$ac_cv_prog_javac_works" >&6; } if test x$JAVAPREFIX = x; then test x$JAVA = x && for ac_prog in kaffe$EXEEXT java$EXEEXT do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_JAVA+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$JAVA"; then ac_cv_prog_JAVA="$JAVA" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_JAVA="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi JAVA=$ac_cv_prog_JAVA if test -n "$JAVA"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $JAVA" >&5 printf "%s\n" "$JAVA" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$JAVA" && break done else test x$JAVA = x && for ac_prog in kaffe$EXEEXT java$EXEEXT do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_JAVA+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$JAVA"; then ac_cv_prog_JAVA="$JAVA" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_JAVA="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi JAVA=$ac_cv_prog_JAVA if test -n "$JAVA"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $JAVA" >&5 printf "%s\n" "$JAVA" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$JAVA" && break done test -n "$JAVA" || JAVA="$JAVAPREFIX" fi true # Extract the first word of "uudecode$EXEEXT", so it can be a program name with args. set dummy uudecode$EXEEXT; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_uudecode+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$uudecode"; then ac_cv_prog_uudecode="$uudecode" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_uudecode="yes" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi uudecode=$ac_cv_prog_uudecode if test -n "$uudecode"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $uudecode" >&5 printf "%s\n" "$uudecode" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test x$uudecode = xyes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if uudecode can decode base 64 file" >&5 printf %s "checking if uudecode can decode base 64 file... " >&6; } if test ${ac_cv_prog_uudecode_base64+y} then : printf %s "(cached) " >&6 else $as_nop cat << \EOF > Test.uue begin-base64 644 Test.class yv66vgADAC0AFQcAAgEABFRlc3QHAAQBABBqYXZhL2xhbmcvT2JqZWN0AQAE bWFpbgEAFihbTGphdmEvbGFuZy9TdHJpbmc7KVYBAARDb2RlAQAPTGluZU51 bWJlclRhYmxlDAAKAAsBAARleGl0AQAEKEkpVgoADQAJBwAOAQAQamF2YS9s YW5nL1N5c3RlbQEABjxpbml0PgEAAygpVgwADwAQCgADABEBAApTb3VyY2VG aWxlAQAJVGVzdC5qYXZhACEAAQADAAAAAAACAAkABQAGAAEABwAAACEAAQAB AAAABQO4AAyxAAAAAQAIAAAACgACAAAACgAEAAsAAQAPABAAAQAHAAAAIQAB AAEAAAAFKrcAErEAAAABAAgAAAAKAAIAAAAEAAQABAABABMAAAACABQ= ==== EOF if uudecode$EXEEXT Test.uue; then ac_cv_prog_uudecode_base64=yes else echo "configure: 14237: uudecode had trouble decoding base 64 file 'Test.uue'" >&5 echo "configure: failed file was:" >&5 cat Test.uue >&5 ac_cv_prog_uudecode_base64=no fi rm -f Test.uue fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_uudecode_base64" >&5 printf "%s\n" "$ac_cv_prog_uudecode_base64" >&6; } fi if test x$ac_cv_prog_uudecode_base64 != xyes; then rm -f Test.class { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: I have to compile Test.class from scratch" >&5 printf "%s\n" "$as_me: WARNING: I have to compile Test.class from scratch" >&2;} if test x$ac_cv_prog_javac_works = xno; then true fi if test x$ac_cv_prog_javac_works = x; then if test "x$JAVAPREFIX" = x; then test "x$JAVAC" = x && for ac_prog in "gcj$EXEEXT -C" jikes$EXEEXT guavac$EXEEXT javac$EXEEXT do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_JAVAC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$JAVAC"; then ac_cv_prog_JAVAC="$JAVAC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_JAVAC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi JAVAC=$ac_cv_prog_JAVAC if test -n "$JAVAC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $JAVAC" >&5 printf "%s\n" "$JAVAC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$JAVAC" && break done else test "x$JAVAC" = x && for ac_prog in "gcj$EXEEXT -C" jikes$EXEEXT guavac$EXEEXT javac$EXEEXT do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_JAVAC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$JAVAC"; then ac_cv_prog_JAVAC="$JAVAC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_JAVAC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi JAVAC=$ac_cv_prog_JAVAC if test -n "$JAVAC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $JAVAC" >&5 printf "%s\n" "$JAVAC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$JAVAC" && break done test -n "$JAVAC" || JAVAC="$JAVAPREFIX" fi true { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $JAVAC works" >&5 printf %s "checking if $JAVAC works... " >&6; } if test ${ac_cv_prog_javac_works+y} then : printf %s "(cached) " >&6 else $as_nop JAVA_TEST=Test.java CLASS_TEST=Test.class cat << \EOF > $JAVA_TEST /* #line 14366 "configure" */ public class Test { } EOF if { ac_try='$JAVAC $JAVACFLAGS $JAVA_TEST' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 (eval $ac_try) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; } >/dev/null 2>&1; then ac_cv_prog_javac_works=yes else true echo "configure: failed program was:" >&5 cat $JAVA_TEST >&5 fi rm -f $JAVA_TEST $CLASS_TEST fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_javac_works" >&5 printf "%s\n" "$ac_cv_prog_javac_works" >&6; } fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $JAVA works" >&5 printf %s "checking if $JAVA works... " >&6; } if test ${ac_cv_prog_java_works+y} then : printf %s "(cached) " >&6 else $as_nop JAVA_TEST=Test.java CLASS_TEST=Test.class TEST=Test cat << \EOF > $JAVA_TEST /* [#]line 14402 "configure" */ public class Test { public static void main (String args[]) { System.exit (0); } } EOF if test x$ac_cv_prog_uudecode_base64 != xyes; then if { ac_try='$JAVAC $JAVACFLAGS $JAVA_TEST' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 (eval $ac_try) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; } && test -s $CLASS_TEST; then : else echo "configure: failed program was:" >&5 cat $JAVA_TEST >&5 true fi fi if { ac_try='$JAVA $JAVAFLAGS $TEST' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 (eval $ac_try) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; } >/dev/null 2>&1; then ac_cv_prog_java_works=yes else echo "configure: failed program was:" >&5 cat $JAVA_TEST >&5 true fi rm -fr $JAVA_TEST $CLASS_TEST Test.uue fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_java_works" >&5 printf "%s\n" "$ac_cv_prog_java_works" >&6; } ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 printf %s "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test ${ac_cv_prog_CPP+y} then : printf %s "(cached) " >&6 else $as_nop # Double quotes because $CC needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" cpp /lib/cpp do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO" then : else $as_nop # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO" then : # Broken: success on invalid input. continue else $as_nop # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 printf "%s\n" "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO" then : else $as_nop # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO" then : # Broken: success on invalid input. continue else $as_nop # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok then : else $as_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu test "x$JAVAH" = x && for ac_prog in gjavah gcjh javah do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_JAVAH+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$JAVAH"; then ac_cv_prog_JAVAH="$JAVAH" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_JAVAH="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi JAVAH=$ac_cv_prog_JAVAH if test -n "$JAVAH"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $JAVAH" >&5 printf "%s\n" "$JAVAH" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$JAVAH" && break done if test "x$JAVAH" != x ; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO" then : else $as_nop ac_save_CPPFLAGS="$CPPFLAGS" ac_dir=`echo $ac_cv_path_JAVAH | sed 's,\(.*\)/[^/]*/[^/]*$,\1/include,'` ac_machdep=`echo $build_os | sed 's,[-0-9].*,,' | sed 's,cygwin,win32,'` CPPFLAGS="$ac_save_CPPFLAGS -I$ac_dir -I$ac_dir/$ac_machdep" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO" then : ac_save_CPPFLAGS="$CPPFLAGS" else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unable to include " >&5 printf "%s\n" "$as_me: WARNING: unable to include " >&2;} fi rm -f conftest.err conftest.i conftest.$ac_ext CPPFLAGS="$ac_save_CPPFLAGS" fi rm -f conftest.err conftest.i conftest.$ac_ext else true fi if test "x$JAVAPREFIX" = x; then test "x$JAR" = x && for ac_prog in jar$EXEEXT do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_JAR+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$JAR"; then ac_cv_prog_JAR="$JAR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_JAR="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi JAR=$ac_cv_prog_JAR if test -n "$JAR"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $JAR" >&5 printf "%s\n" "$JAR" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$JAR" && break done else test "x$JAR" = x && for ac_prog in jar do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_JAR+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$JAR"; then ac_cv_prog_JAR="$JAR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_JAR="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi JAR=$ac_cv_prog_JAR if test -n "$JAR"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $JAR" >&5 printf "%s\n" "$JAR" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$JAR" && break done test -n "$JAR" || JAR="$JAVAPREFIX" fi true # Extract the first word of "sed", so it can be a program name with args. set dummy sed; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_SED+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$SED"; then ac_cv_prog_SED="$SED" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_SED="" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi SED=$ac_cv_prog_SED if test -n "$SED"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $SED" >&5 printf "%s\n" "$SED" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$CLASSPATH" != "x"; then xtra=" with classpath ${CLASSPATH}" xopts=`echo ${CLASSPATH} | ${SED} 's/^ *://'` xopts="-classpath $xopts" else xtra=""; xopts=""; fi cache_var="dps_cv_have_java_class_junit_framework_Test"`printf "%s\n" "_Jc_${JAVAC}_Cp_${CLASSPATH}" | $as_tr_sh` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the junit.framework.Test class is available$xtra" >&5 printf %s "checking if the junit.framework.Test class is available$xtra... " >&6; } if eval test \${$cache_var+y} then : printf %s "(cached) " >&6 else $as_nop JAVA_TEST=Testing.java CLASS_TEST=Testing.class cat << \EOF > $JAVA_TEST /* #xline 14817 "configure" */ import junit.framework.Test; public class Testing { } EOF if { ac_try='$JAVAC $JAVACFLAGS $xopts $JAVA_TEST' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 (eval $ac_try) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; } >/dev/null 2>&1; then eval "${cache_var}=yes" else eval "${cache_var}=no" echo "configure: failed program was:" >&5 cat $JAVA_TEST >&5 fi rm -f $JAVA_TEST $CLASS_TEST fi eval ac_res=\$$cache_var { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } if eval 'test "x$'${cache_var}'" = "xyes"'; then got="yes" true; else got="no" false; fi cpxtra=""; saved_cp="${CLASSPATH}"; for jhome in `ls -dr /usr/share/java /usr/java/* /usr/local/java/* 2> /dev/null`; do for jdir in lib jre/lib . ; do for jfile in junit.jar; do if test "x$got" != "xyes" && test -f "$jhome/$jdir/$jfile"; then CLASSPATH="${saved_cp}:$jhome/$jdir/$jfile" if test "x$CLASSPATH" != "x"; then xtra=" with classpath ${CLASSPATH}" xopts=`echo ${CLASSPATH} | ${SED} 's/^ *://'` xopts="-classpath $xopts" else xtra=""; xopts=""; fi cache_var="dps_cv_have_java_class_junit_framework_Test"`printf "%s\n" "_Jc_${JAVAC}_Cp_${CLASSPATH}" | $as_tr_sh` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the junit.framework.Test class is available$xtra" >&5 printf %s "checking if the junit.framework.Test class is available$xtra... " >&6; } if eval test \${$cache_var+y} then : printf %s "(cached) " >&6 else $as_nop JAVA_TEST=Testing.java CLASS_TEST=Testing.class cat << \EOF > $JAVA_TEST /* #xline 14869 "configure" */ import junit.framework.Test; public class Testing { } EOF if { ac_try='$JAVAC $JAVACFLAGS $xopts $JAVA_TEST' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 (eval $ac_try) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; } >/dev/null 2>&1; then eval "${cache_var}=yes" else eval "${cache_var}=no" echo "configure: failed program was:" >&5 cat $JAVA_TEST >&5 fi rm -f $JAVA_TEST $CLASS_TEST fi eval ac_res=\$$cache_var { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } if eval 'test "x$'${cache_var}'" = "xyes"'; then got="yes"; cpxtra="$jhome/$jdir/$jfile:" true; else got="no" false; fi fi; done; done; done if test "x${saved_cp}" != "x"; then CLASSPATH="${saved_cp}" else unset CLASSPATH; fi if test "x$got" = "xyes"; then CLASSPATH_JUNIT="$cpxtra" true; else false; fi old_cp=$CLASSPATH export CLASSPATH=${CLASSPATH}:${CLASSPATH_JUNIT} if test ${ac_cv_prog_JUNIT+y} then : printf %s "(cached) " >&6 else $as_nop ac_var_name=`echo junit.textui.TestRunner | sed 's/\./_/g'` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for junit.textui.TestRunner class" >&5 printf %s "checking for junit.textui.TestRunner class... " >&6; } if eval test \${ac_cv_class_$ac_var_name+y} then : printf %s "(cached) " >&6 else $as_nop if test x$ac_cv_prog_uudecode_base64 = xyes; then cat << \EOF > Test.uue begin-base64 644 Test.class yv66vgADAC0AKQcAAgEABFRlc3QHAAQBABBqYXZhL2xhbmcvT2JqZWN0AQAE bWFpbgEAFihbTGphdmEvbGFuZy9TdHJpbmc7KVYBAARDb2RlAQAPTGluZU51 bWJlclRhYmxlDAAKAAsBAANlcnIBABVMamF2YS9pby9QcmludFN0cmVhbTsJ AA0ACQcADgEAEGphdmEvbGFuZy9TeXN0ZW0IABABABBNaXNzaW5nIGFyZ3Vt ZW50DAASABMBAAdwcmludGxuAQAVKExqYXZhL2xhbmcvU3RyaW5nOylWCgAV ABEHABYBABNqYXZhL2lvL1ByaW50U3RyZWFtDAAYABkBAARleGl0AQAEKEkp VgoADQAXDAAcAB0BAAdmb3JOYW1lAQAlKExqYXZhL2xhbmcvU3RyaW5nOylM amF2YS9sYW5nL0NsYXNzOwoAHwAbBwAgAQAPamF2YS9sYW5nL0NsYXNzBwAi AQAgamF2YS9sYW5nL0NsYXNzTm90Rm91bmRFeGNlcHRpb24BAAY8aW5pdD4B AAMoKVYMACMAJAoAAwAlAQAKU291cmNlRmlsZQEACVRlc3QuamF2YQAhAAEA AwAAAAAAAgAJAAUABgABAAcAAABtAAMAAwAAACkqvgSiABCyAAwSD7YAFBBN uAAaKgMyuAAeTKcACE0EuAAaAUwDuAAasQABABMAGgAdACEAAQAIAAAAKgAK AAAACgAAAAsABgANAA4ADgATABAAEwASAB4AFgAiABgAJAAZACgAGgABACMA JAABAAcAAAAhAAEAAQAAAAUqtwAmsQAAAAEACAAAAAoAAgAAAAQABAAEAAEA JwAAAAIAKA== ==== EOF if uudecode$EXEEXT Test.uue; then : else echo "configure: 14949: uudecode had trouble decoding base 64 file 'Test.uue'" >&5 echo "configure: failed file was:" >&5 cat Test.uue >&5 ac_cv_prog_uudecode_base64=no fi rm -f Test.uue if { ac_try='$JAVA $JAVAFLAGS Test junit.textui.TestRunner' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 (eval $ac_try) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; } >/dev/null 2>&1; then eval "ac_cv_class_$ac_var_name=yes" else eval "ac_cv_class_$ac_var_name=no" fi rm -f Test.class else cat << \EOF > Test.java /* #line 14969 "configure" */ import junit.textui.TestRunner; public class Test { } EOF if { ac_try='$JAVAC $JAVACFLAGS Test.java' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 (eval $ac_try) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; } && test -s Test.class then eval "ac_cv_class_$ac_var_name=yes" else echo "configure: failed program was:" >&5 cat Test.java >&5 rm -fr Test* eval "ac_cv_class_$ac_var_name=no" fi rm -fr Test* fi eval "ac_var_val=$`eval echo ac_cv_class_$ac_var_name`" eval "HAVE_$ac_var_name=$`echo ac_cv_class_$ac_var_val`" HAVE_LAST_CLASS=$ac_var_val if test x$ac_var_val = xyes; then : else : fi fi eval "ac_var_val=$`eval echo ac_cv_class_$ac_var_name`" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_var_val" >&5 printf "%s\n" "$ac_var_val" >&6; } if test x"`eval 'echo $ac_cv_class_junit_textui_TestRunner'`" != xno ; then ac_cv_prog_JUNIT='$(CLASSPATH_ENV) $(JAVA) $(JAVAFLAGS) junit.textui.TestRunner' fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for junit" >&5 printf %s "checking for junit... " >&6; } if test x"`eval 'echo $ac_cv_prog_JUNIT'`" != x ; then JUNIT="$ac_cv_prog_JUNIT" JAVA_JUNIT='$(JAVA_JUNIT)' TESTS_JUNIT='$(TESTS_JUNIT)' else JUNIT= JAVA_JUNIT= TESTS_JUNIT= fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $JUNIT" >&5 printf "%s\n" "$JUNIT" >&6; } if test "x$old_cp" = "x"; then unset CLASSPATH else $CLASSPATH=$old_cp fi unset old_cp for ac_prog in perl do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_PERL+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$PERL"; then ac_cv_prog_PERL="$PERL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_PERL="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi PERL=$ac_cv_prog_PERL if test -n "$PERL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5 printf "%s\n" "$PERL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$PERL" && break done for ac_prog in php5 php do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_PHP5+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$PHP5"; then ac_cv_prog_PHP5="$PHP5" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_PHP5="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi PHP5=$ac_cv_prog_PHP5 if test -n "$PHP5"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PHP5" >&5 printf "%s\n" "$PHP5" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$PHP5" && break done for ac_prog in php-config5 php-config do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_PHP5_CONFIG+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$PHP5_CONFIG"; then ac_cv_prog_PHP5_CONFIG="$PHP5_CONFIG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_PHP5_CONFIG="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi PHP5_CONFIG=$ac_cv_prog_PHP5_CONFIG if test -n "$PHP5_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PHP5_CONFIG" >&5 printf "%s\n" "$PHP5_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$PHP5_CONFIG" && break done for ac_prog in php7.4 php7.3 php7.2 php7.1 php7.0 php7 php do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_PHP7+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$PHP7"; then ac_cv_prog_PHP7="$PHP7" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_PHP7="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi PHP7=$ac_cv_prog_PHP7 if test -n "$PHP7"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PHP7" >&5 printf "%s\n" "$PHP7" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$PHP7" && break done for ac_prog in php-config7.4 php-config7.3 php-config7.2 php-config7.1 php-config7.0 php-config7 php-config do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_PHP7_CONFIG+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$PHP7_CONFIG"; then ac_cv_prog_PHP7_CONFIG="$PHP7_CONFIG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_PHP7_CONFIG="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi PHP7_CONFIG=$ac_cv_prog_PHP7_CONFIG if test -n "$PHP7_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PHP7_CONFIG" >&5 printf "%s\n" "$PHP7_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$PHP7_CONFIG" && break done for ac_prog in python3 python python2 do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_PYTHON+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$PYTHON"; then ac_cv_prog_PYTHON="$PYTHON" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_PYTHON="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi PYTHON=$ac_cv_prog_PYTHON if test -n "$PYTHON"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 printf "%s\n" "$PYTHON" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$PYTHON" && break done for ac_prog in swig do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_SWIG+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$SWIG"; then ac_cv_prog_SWIG="$SWIG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_SWIG="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi SWIG=$ac_cv_prog_SWIG if test -n "$SWIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $SWIG" >&5 printf "%s\n" "$SWIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$SWIG" && break done test "z$U" != "z" && as_fn_error $? "Compiler not ANSI compliant" "$LINENO" 5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for variadic cpp macros" >&5 printf %s "checking for variadic cpp macros... " >&6; } if test ${ac_cv_cpp_variadic_macros+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #define a(b,c...) printf(b,##c) int main (void) { a("foo");a("%s","bar");a("%s%s","baz","quux"); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_cpp_variadic_macros=yes else $as_nop ac_cv_cpp_variadic_macros=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cpp_variadic_macros" >&5 printf "%s\n" "$ac_cv_cpp_variadic_macros" >&6; } if test "x${ac_cv_cpp_variadic_macros}" != "xno"; then printf "%s\n" "#define HAVE_VARIADIC_MACROS 1" >>confdefs.h fi VERSION_MAJOR=`echo $VERSION | $SED -e 's/^\([^\.]*\)\.\([^\.]*\)\.\(.*\)$/\1/'` VERSION_MINOR=`echo $VERSION | $SED -e 's/^\([^\.]*\)\.\([^\.]*\)\.\(.*\)$/\2/'` VERSION_RELEASE=`echo $VERSION | $SED -e 's/^\([^\.]*\)\.\([^\.]*\)\.\([0-9]*\).*$/\3/'` VERSION_UNDERSCORED=`echo $VERSION | $SED -e 's/\./_/g'` printf "%s\n" "#define LASSO_VERSION_MAJOR $VERSION_MAJOR" >>confdefs.h printf "%s\n" "#define LASSO_VERSION_MINOR $VERSION_MINOR" >>confdefs.h printf "%s\n" "#define LASSO_VERSION_SUBMINOR $VERSION_RELEASE" >>confdefs.h printf "%s\n" "#define LASSO_XMLSEC_VERSION_NUMBER (((XMLSEC_VERSION_MAJOR * 0x010000) + (XMLSEC_VERSION_MINOR * 0x0100) + (XMLSEC_VERSION_SUBMINOR * 0x01)))" >>confdefs.h WINDOWS_VERSION=`echo $VERSION_MAJOR,$VERSION_MINOR,$VERSION_RELEASE,0` # syntax: CURRENT[:REVISION[:AGE]] # So if M=major, m=minor, r=release: # c = M + a = M + m; # m = a # r = r current=`expr $VERSION_MAJOR + $VERSION_MINOR` LASSO_VERSION_INFO="18:2:15" minimal_version=`echo $LASSO_VERSION_INFO | $AWK -F: '{printf("%d\n",$1-$3)};'` UPCASED_DLL_FILENAME="LIBLASSO-$minimal_version.DLL" DLL_FILENAME="liblasso-$minimal_version.dll" languages_available= # ------------ # JAVA binding # ------------ # Check whether --enable-java was given. if test ${enable_java+y} then : enableval=$enable_java; else $as_nop enable_java="no" fi # Check whether --with-java-home was given. if test ${with_java_home+y} then : withval=$with_java_home; fi SUN=no if test "x$JAVAC" = "xjavac"; then JAVAC_PATH=`which $JAVAC` if test "x$with_java_home" = "x"; then with_java_home=`readlink -f $JAVAC_PATH | sed s#/bin/.*##` fi JAVA_VERSION=`$JAVA -version 2>&1 | $SED -ne 's/\(openjdk\|java\) \(full\)*version "\([^"]*\)".*/\3/p' 2>/dev/null` if test "x$JAVA_VERSION" = x; then JAVA_VERSION=`$JAVA -version 2>&1 | grep "Java Version" | $SED 's/^.*Java Version: //g'` else SUN=yes fi CLASSPATH_OPT="-classpath" fi if test "x$with_java_home" != x; then JAVA_INCLUDE="$with_java_home/include" fi if ! test -f "$JAVA_INCLUDE/jni.h"; then JAVA_VERSION="" fi if test "x$JAVAH" = "xgcjh" || test "x$JAVAH" = "xgjavah" ; then JAVAH_FLAGS="-jni" JAVA_INCLUDE="" fi if echo "$JAVAC" | grep -q "gcj"; then JAVA_VERSION=`$JAVAC --version 2>&1 | $SED -ne 's/gcj[^[:blank:]]* ([^)]*) \([^ ]*\).*/\1/p' 2>/dev/null` MAJOR=`echo $JAVA_VERSION | sed 's/.*[^[:digit:]]\?\([[:digit:]]\+\)\.[[:digit:]]\+\.[[:digit:]]\+/\1/'` MINOR=`echo $JAVA_VERSION | sed 's/.*[^[:digit:]]\?[[:digit:]]\+\.\([[:digit:]]\+\)\.[[:digit:]]\+/\1/'` RELEASE=`echo $JAVA_VERSION | sed 's/.*[^[:digit:]]\?[[:digit:]]\+\.[[:digit:]]\+\.\([[:digit:]]\+\).*/\1/'` if test $MAJOR -gt 4 -o \( $MAJOR -eq 4 -a $MINOR -gt 1 \) -o \( $MAJOR -eq 4 -a $MINOR -eq 1 -a $RELEASE -ge 3 \); then JAVAC_FLAGS="-fsource=1.4 -ftarget=1.4" fi unset MAJOR unset MINOR unset RELEASE for ac_header in jni.h do : ac_fn_c_check_header_compile "$LINENO" "jni.h" "ac_cv_header_jni_h" "$ac_includes_default" if test "x$ac_cv_header_jni_h" = xyes then : printf "%s\n" "#define HAVE_JNI_H 1" >>confdefs.h else $as_nop JAVA_VERSION="" fi done CLASSPATH_OPT="--classpath" fi if test "X$JAVA_INCLUDE" != "X"; then if test "x$SUN" = "xyes"; then JAVA_INCLUDE="$JAVA_INCLUDE -I$JAVA_INCLUDE/$SUN_EXTRA_INCLUDE" fi JAVA_INCLUDE=-I$JAVA_INCLUDE fi if test "X$JAVA_VERSION" != "X" && test "X$JAR" != "X" && test "x$JAVAH" != "x"; then languages_available="$languages_available $JAVA($JAVA_VERSION)" else enable_java=no JAVA_VERSION="" fi if test "$DARWIN" = 1; then JNI_EXTRA_LDFLAGS="-shrext .jnilib" fi if test "x$enable_java" = "xyes"; then JAVA_ENABLED_TRUE= JAVA_ENABLED_FALSE='#' else JAVA_ENABLED_TRUE='#' JAVA_ENABLED_FALSE= fi if test "x$JUNIT" != "x"; then JUNIT_ENABLED_TRUE= JUNIT_ENABLED_FALSE='#' else JUNIT_ENABLED_TRUE='#' JUNIT_ENABLED_FALSE= fi JDK_INCLUDE=$JAVA_INCLUDE # -------------- # Python binding # -------------- # Check whether --enable-python was given. if test ${enable_python+y} then : enableval=$enable_python; else $as_nop enable_python="yes" fi # Check whether --with-python was given. if test ${with_python+y} then : withval=$with_python; fi if test "X$with_python" != "X"; then PYTHON=$with_python fi PYTHON_VERSION=`$PYTHON -c 'from distutils import sysconfig ; print(sysconfig.get_config_var("VERSION"))'` test "x$PYTHON" != "x" || as_fn_error $? "Python must be installed to compile lasso" "$LINENO" 5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Python development files" >&5 printf %s "checking for Python development files... " >&6; } if test "X$PYTHON_VERSION" != "X"; then PYTHON_INC=`$PYTHON -c 'from distutils import sysconfig ; print(sysconfig.get_python_inc())'` PYTHON_LIB=`$PYTHON -c 'from distutils import sysconfig ; print(sysconfig.get_python_lib(1))'` PYTHON_H=$PYTHON_INC/Python.h if test -f $PYTHON_H; then PY_CFLAGS="-I$PYTHON_INC" PY_MAKEFILE=`$PYTHON -c 'from distutils import sysconfig ; print(sysconfig.get_makefile_filename())'` PY_OTHER_LIBS=`$SED -n -e 's/^LIBS=\(.*\)/\1/p' $PY_MAKEFILE` PY_EXTRA_LIBS="$PY_LOCALMODLIBS $PY_BASEMODLIBS $PY_OTHER_LIBS" PY_SUFFIX_LIB=`echo $PYTHON_LIB | $SED -e 's/.*python/python/'` PY_SITE_PACKAGES="\${libdir}/$PY_SUFFIX_LIB" languages_available="$languages_available python($PYTHON_VERSION)" else enable_python=no fi else enable_python=no fi if test "x$enable_python" = "xyes"; then PYTHON_ENABLED_TRUE= PYTHON_ENABLED_FALSE='#' else PYTHON_ENABLED_TRUE='#' PYTHON_ENABLED_FALSE= fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_python" >&5 printf "%s\n" "$enable_python" >&6; } # ----------- # PHP 5 binding # ----------- # Check whether --enable-php5 was given. if test ${enable_php5+y} then : enableval=$enable_php5; else $as_nop enable_php5="yes" fi # Check whether --with-php5-config was given. if test ${with_php5_config+y} then : withval=$with_php5_config; fi # Check whether --enable-php5-force was given. if test ${enable_php5_force+y} then : enableval=$enable_php5_force; ENABLE_PHP5_FORCE="yes" else $as_nop ENABLE_PHP5_FORCE="no" fi if test "X$with_php5_config" != "X" ; then PHP5_CONFIG=$with_php5_config fi if test "X$PHP5_CONFIG" != "X" ; then PHP5_INCLUDES=`$PHP5_CONFIG --includes` PHP5_LDFLAGS=`$PHP5_CONFIG --ldflags` PHP5_LIBS=`$PHP5_CONFIG --libs` PHP5_PREFIX=`$PHP5_CONFIG --prefix` PHP5_QUOTED_PREFIX=$(echo $PHP5_PREFIX | $SED 's/\//\\\//g') PHP5_UNPREFIXED_EXTENSION_DIR=$($PHP5_CONFIG --extension-dir | $SED "s/$PHP5_QUOTED_PREFIX//g") else # We assume PHP are in /usr/local directory. if test $MINGW -eq 1; then CFLAGS="$CFLAGS -DZTS -DZEND_WIN32 -DWIN32 -D_MBCS" fi PHP5_INCLUDES="-I/usr/local/include/php5 -I/usr/local/include/php5/main -I/usr/local/include/php5/Zend -I/usr/local/include/php5/TSRM -I/usr/local/include/php5/win32" PHP5_LDFLAGS= PHP5_LIBS="-lphp5ts -lxmlparse -lxmltok" PHP5_UNPREFIXED_EXTENSION_DIR= PHP5_PREFIX= fi # Check whether --with-php5-include-dir was given. if test ${with_php5_include_dir+y} then : withval=$with_php5_include_dir; PHP5_INCLUDE_DIR="$withval" else $as_nop PHP5_INCLUDE_DIR=${datadir}/php fi # Check whether --with-php5-config-dir was given. if test ${with_php5_config_dir+y} then : withval=$with_php5_config_dir; PHP5_CONFIG_DIR="$withval" else $as_nop PHP5_CONFIG_DIR=${sysconfdir}/php5/conf.d/ fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for PHP 5 development files" >&5 printf %s "checking for PHP 5 development files... " >&6; } if $PHP5_CONFIG --version | grep -q "^5" || test "x$ENABLE_PHP5_FORCE" = "xyes" then PHP5_VERSION=`$PHP5_CONFIG --version 2> /dev/null` languages_available="$languages_available php5($PHP5_VERSION)" else enable_php5=no fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_php5" >&5 printf "%s\n" "$enable_php5" >&6; } if test "x$enable_php5" = "xyes"; then PHP5_ENABLED_TRUE= PHP5_ENABLED_FALSE='#' else PHP5_ENABLED_TRUE='#' PHP5_ENABLED_FALSE= fi # ----------- # PHP 7 binding # ----------- # Check whether --enable-php7 was given. if test ${enable_php7+y} then : enableval=$enable_php7; else $as_nop enable_php7="yes" fi # Check whether --with-php7-config was given. if test ${with_php7_config+y} then : withval=$with_php7_config; fi # Check whether --enable-php7-force was given. if test ${enable_php7_force+y} then : enableval=$enable_php7_force; ENABLE_PHP7_FORCE="yes" else $as_nop ENABLE_PHP7_FORCE="no" fi if test "X$with_php7_config" != "X" ; then PHP7_CONFIG=$with_php7_config fi if test "X$PHP7_CONFIG" != "X" ; then PHP7_INCLUDES=`$PHP7_CONFIG --includes` PHP7_LDFLAGS=`$PHP7_CONFIG --ldflags` PHP7_LIBS=`$PHP7_CONFIG --libs` PHP7_PREFIX=`$PHP7_CONFIG --prefix` PHP7_QUOTED_PREFIX=$(echo $PHP7_PREFIX | $SED 's/\//\\\//g') PHP7_UNPREFIXED_EXTENSION_DIR=$($PHP7_CONFIG --extension-dir | $SED "s/$PHP7_QUOTED_PREFIX//g") else # We assume PHP are in /usr/local directory. if test $MINGW -eq 1; then CFLAGS="$CFLAGS -DZTS -DZEND_WIN32 -DWIN32 -D_MBCS" fi PHP7_INCLUDES="-I/usr/local/include/php7 -I/usr/local/include/php7/main -I/usr/local/include/php7/Zend -I/usr/local/include/php7/TSRM -I/usr/local/include/php7/win32" PHP7_LDFLAGS= PHP7_LIBS="-lphp7ts -lxmlparse -lxmltok" PHP7_UNPREFIXED_EXTENSION_DIR= PHP7_PREFIX= fi # Check whether --with-php7 was given. if test ${with_php7+y} then : withval=$with_php7; PHP7="$withval" else $as_nop PHP7_INCLUDE_DIR=php7 fi # Check whether --with-php7-include-dir was given. if test ${with_php7_include_dir+y} then : withval=$with_php7_include_dir; PHP7_INCLUDE_DIR="$withval" else $as_nop PHP7_INCLUDE_DIR=${datadir}/php fi # Check whether --with-php7-config-dir was given. if test ${with_php7_config_dir+y} then : withval=$with_php7_config_dir; PHP7_CONFIG_DIR="$withval" else $as_nop PHP7_CONFIG_DIR=${sysconfdir}/php7/conf.d/ fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for PHP 7 development files" >&5 printf %s "checking for PHP 7 development files... " >&6; } if $PHP7_CONFIG --version | grep -q "^7" || test "x$ENABLE_PHP7_FORCE" = "xyes" then PHP7_VERSION=`$PHP7_CONFIG --version 2> /dev/null` languages_available="$languages_available php7($PHP7_VERSION)" else enable_php7=no fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_php7" >&5 printf "%s\n" "$enable_php7" >&6; } if test "x$enable_php7" = "xyes"; then PHP7_ENABLED_TRUE= PHP7_ENABLED_FALSE='#' else PHP7_ENABLED_TRUE='#' PHP7_ENABLED_FALSE= fi ### # ---------- ### # C# binding (disabled for the moment) ### # ---------- ### ### AC_ARG_ENABLE(csharp, [ --disable-csharp disable the C Sharp binding],, ### enable_csharp="yes") ### ### AC_ARG_WITH(cil-interpreter, [ --with-cil-interpreter=path set location of CIL interpreter for CSharp],[CSHARPBIN="$withval"], [CSHARPBIN=]) ### AC_ARG_WITH(csharp-compiler, [ --with-csharp-compiler=path set location of CSharp compiler],[CSHARPCOMPILERBIN="$withval"], [CSHARPCOMPILERBIN=]) ### ### if test -z "$CSHARPCOMPILERBIN" ; then ### case $host in ### *-*-cygwin* | *-*-mingw*) ### AC_CHECK_PROGS(CSHARPCOMPILER, mcs.bat cscc csc);; ### *)AC_CHECK_PROGS(CSHARPCOMPILER, mcs cscc);; ### esac ### else ### CSHARPCOMPILER="$CSHARPCOMPILERBIN" ### fi ### ### CSHARPPATHSEPARATOR="/" ### CSHARPCYGPATH_W=echo ### if test -z "$CSHARPBIN" ; then ### #languages_available="$languages_available C#($CSHARPCOMPILER)" ### CSHARPCILINTERPRETER="" ### if test "cscc" = "$CSHARPCOMPILER" ; then ### AC_CHECK_PROGS(CSHARPCILINTERPRETER, ilrun) ### else ### if test "mcs" = "$CSHARPCOMPILER"; then ### # Check that mcs is the C# compiler and not the Unix mcs utility by examining the output of 'mcs --version' ### # The Mono compiler should emit: Mono C# compiler version a.b.c.d ### csharp_version_raw=`(mcs --version) 2>/dev/null` ### csharp_version_searched=`(mcs --version | sed -n "/C#\|Mono/p") 2>/dev/null` ### CSHARPCOMPILER=""; ### if test -n "$csharp_version_raw" ; then ### if test "$csharp_version_raw" = "$csharp_version_searched" ; then ### CSHARPCOMPILER="mcs" ### fi ### fi ### ### # mono interpreter (ver 0.26 doesn't seem to work on Windows platforms) ### case $host in ### *-*-cygwin* | *-*-mingw*) ### ;; ### *)AC_CHECK_PROGS(CSHARPCILINTERPRETER, mint);; ### esac ### else ### if test "csc" = "$CSHARPCOMPILER"; then ### CSHARPPATHSEPARATOR="\\\\" ### CSHARPCYGPATH_W='cygpath -w' ### fi ### fi ### fi ### else ### CSHARPCILINTERPRETER="$CSHARPBIN" ### fi # Cygwin requires the Windows standard (Pascal) calling convention as it is a Windows executable and not a Cygwin built executable case $host in *-*-cygwin* | *-*-mingw*) if test "$GCC" = yes; then CSHARPDYNAMICLINKING=" -Wl,--add-stdcall-alias" else CSHARPDYNAMICLINKING="" fi ;; *)CSHARPDYNAMICLINKING="";; esac for ac_prog in gacutil do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_GACUTIL+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$GACUTIL"; then ac_cv_prog_GACUTIL="$GACUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_GACUTIL="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi GACUTIL=$ac_cv_prog_GACUTIL if test -n "$GACUTIL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GACUTIL" >&5 printf "%s\n" "$GACUTIL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$GACUTIL" && break done # Is this going to be used? if test "X$CSHARPCOMPILER" = X; then enable_csharp=no fi if test "X$GACUTIL" = X; then enable_csharp=no fi if test "x$enable_csharp" = "xyes"; then CSHARP_ENABLED_TRUE= CSHARP_ENABLED_FALSE='#' else CSHARP_ENABLED_TRUE='#' CSHARP_ENABLED_FALSE= fi # ------------ # Perl binding # ------------ # Check whether --enable-perl was given. if test ${enable_perl+y} then : enableval=$enable_perl; else $as_nop enable_perl="yes" fi if test "X$PERL" != "X"; then PERLINSTALLSITEARCH=`$PERL -MConfig -e 'print $Config{installsitearch};'` PERLMAN3DIR=`$PERL -MConfig -e 'print $Config{man3dir};'` PERL_CFLAGS=$($PERL -V::ccflags: | tr -d "'") else PERLINSTALLSITEARCH=none PERLMAN3DIR=none PERL_CFLAGS= fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Perl API" >&5 printf %s "checking for Perl API... " >&6; } if test "X$enable_perl" != "Xno" ; then if test "X$enable_perl" != "Xyes"; then PERL=$enable_perl fi enable_perl=yes fi PERL_VERSION=`$PERL -MConfig -e 'print $Config{version}' 2>/dev/null` if test "X$PERL_VERSION" != "X"; then languages_available="$languages_available perl($PERL_VERSION)" if test $enable_perl = yes; then languages="$languages perl" fi fi if test "x$enable_perl" = "xyes"; then PERL_ENABLED_TRUE= PERL_ENABLED_FALSE='#' else PERL_ENABLED_TRUE='#' PERL_ENABLED_FALSE= fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_perl" >&5 printf "%s\n" "$enable_perl" >&6; } _cppflags="${CPPFLAGS}" _ldflags="${LDFLAGS}" # Check whether --with-zlib was given. if test ${with_zlib+y} then : withval=$with_zlib; if test "$withval" != "no" -a "$withval" != "yes"; then Z_DIR=$withval CPPFLAGS="${CPPFLAGS} -I$withval/include" LDFLAGS="${LDFLAGS} -L$withval/lib" fi fi saved_LIB=$LIBS LIBS= for ac_header in zlib.h do : ac_fn_c_check_header_compile "$LINENO" "zlib.h" "ac_cv_header_zlib_h" "$ac_includes_default" if test "x$ac_cv_header_zlib_h" = xyes then : printf "%s\n" "#define HAVE_ZLIB_H 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing gzread" >&5 printf %s "checking for library containing gzread... " >&6; } if test ${ac_cv_search_gzread+y} then : printf %s "(cached) " >&6 else $as_nop ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char gzread (); int main (void) { return gzread (); ; return 0; } _ACEOF for ac_lib in '' z zlib1 do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO" then : ac_cv_search_gzread=$ac_res fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext if test ${ac_cv_search_gzread+y} then : break fi done if test ${ac_cv_search_gzread+y} then : else $as_nop ac_cv_search_gzread=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gzread" >&5 printf "%s\n" "$ac_cv_search_gzread" >&6; } ac_res=$ac_cv_search_gzread if test "$ac_res" != no then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" printf "%s\n" "#define HAVE_LIBZ /**/" >>confdefs.h if test "x${Z_DIR}" != "x"; then Z_CFLAGS="-I${Z_DIR}/include" Z_LIBS="-L${Z_DIR}/lib $LIBS" case ${host} in *-*-solaris*) Z_LIBS="-L${Z_DIR}/lib -R${Z_DIR}/lib $LIBS" ;; esac else Z_LIBS="$LIBS" fi fi fi done LIBS=$saved_LIB test "z$Z_LIBS" != "z" || as_fn_error $? "missing zlib" "$LINENO" 5 CPPFLAGS=${_cppflags} LDFLAGS=${_ldflags} ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} # gtkdocize greps for ^GTK_DOC_CHECK and parses it, so you need to have # it on it's own line. if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else $as_nop case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 printf "%s\n" "$PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_ac_pt_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else $as_nop case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 printf "%s\n" "$ac_pt_PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 printf %s "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } PKG_CONFIG="" fi fi gtk_doc_requires="gtk-doc >= 1.14" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gtk-doc" >&5 printf %s "checking for gtk-doc... " >&6; } if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$gtk_doc_requires\""; } >&5 ($PKG_CONFIG --exists --print-errors "$gtk_doc_requires") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then have_gtk_doc=yes else have_gtk_doc=no fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_gtk_doc" >&5 printf "%s\n" "$have_gtk_doc" >&6; } if test "$have_gtk_doc" = "no"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: You will not be able to create source packages with 'make dist' because $gtk_doc_requires is not found." >&5 printf "%s\n" "$as_me: WARNING: You will not be able to create source packages with 'make dist' because $gtk_doc_requires is not found." >&2;} fi # Extract the first word of "gtkdoc-check", so it can be a program name with args. set dummy gtkdoc-check; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_GTKDOC_CHECK+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$GTKDOC_CHECK"; then ac_cv_prog_GTKDOC_CHECK="$GTKDOC_CHECK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_GTKDOC_CHECK="gtkdoc-check.test" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi GTKDOC_CHECK=$ac_cv_prog_GTKDOC_CHECK if test -n "$GTKDOC_CHECK"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_CHECK" >&5 printf "%s\n" "$GTKDOC_CHECK" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "gtkdoc-check", so it can be a program name with args. set dummy gtkdoc-check; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_GTKDOC_CHECK_PATH+y} then : printf %s "(cached) " >&6 else $as_nop case $GTKDOC_CHECK_PATH in [\\/]* | ?:[\\/]*) ac_cv_path_GTKDOC_CHECK_PATH="$GTKDOC_CHECK_PATH" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_GTKDOC_CHECK_PATH="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi GTKDOC_CHECK_PATH=$ac_cv_path_GTKDOC_CHECK_PATH if test -n "$GTKDOC_CHECK_PATH"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_CHECK_PATH" >&5 printf "%s\n" "$GTKDOC_CHECK_PATH" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi for ac_prog in gtkdoc-rebase do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_GTKDOC_REBASE+y} then : printf %s "(cached) " >&6 else $as_nop case $GTKDOC_REBASE in [\\/]* | ?:[\\/]*) ac_cv_path_GTKDOC_REBASE="$GTKDOC_REBASE" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_GTKDOC_REBASE="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi GTKDOC_REBASE=$ac_cv_path_GTKDOC_REBASE if test -n "$GTKDOC_REBASE"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_REBASE" >&5 printf "%s\n" "$GTKDOC_REBASE" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$GTKDOC_REBASE" && break done test -n "$GTKDOC_REBASE" || GTKDOC_REBASE="true" # Extract the first word of "gtkdoc-mkpdf", so it can be a program name with args. set dummy gtkdoc-mkpdf; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_GTKDOC_MKPDF+y} then : printf %s "(cached) " >&6 else $as_nop case $GTKDOC_MKPDF in [\\/]* | ?:[\\/]*) ac_cv_path_GTKDOC_MKPDF="$GTKDOC_MKPDF" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_GTKDOC_MKPDF="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi GTKDOC_MKPDF=$ac_cv_path_GTKDOC_MKPDF if test -n "$GTKDOC_MKPDF"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_MKPDF" >&5 printf "%s\n" "$GTKDOC_MKPDF" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Check whether --with-html-dir was given. if test ${with_html_dir+y} then : withval=$with_html_dir; else $as_nop with_html_dir='${datadir}/gtk-doc/html' fi HTML_DIR="$with_html_dir" # Check whether --enable-gtk-doc was given. if test ${enable_gtk_doc+y} then : enableval=$enable_gtk_doc; else $as_nop enable_gtk_doc=no fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build gtk-doc documentation" >&5 printf %s "checking whether to build gtk-doc documentation... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_gtk_doc" >&5 printf "%s\n" "$enable_gtk_doc" >&6; } if test "x$enable_gtk_doc" = "xyes" && test "$have_gtk_doc" = "no"; then as_fn_error $? " You must have $gtk_doc_requires installed to build documentation for $PACKAGE_NAME. Please install gtk-doc or disable building the documentation by adding '--disable-gtk-doc' to '$0'." "$LINENO" 5 fi if test "x$PACKAGE_NAME" != "xglib"; then pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0" >&5 printf %s "checking for glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0... " >&6; } if test -n "$GTKDOC_DEPS_CFLAGS"; then pkg_cv_GTKDOC_DEPS_CFLAGS="$GTKDOC_DEPS_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GTKDOC_DEPS_CFLAGS=`$PKG_CONFIG --cflags "glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GTKDOC_DEPS_LIBS"; then pkg_cv_GTKDOC_DEPS_LIBS="$GTKDOC_DEPS_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GTKDOC_DEPS_LIBS=`$PKG_CONFIG --libs "glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GTKDOC_DEPS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0" 2>&1` else GTKDOC_DEPS_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GTKDOC_DEPS_PKG_ERRORS" >&5 : elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } : else GTKDOC_DEPS_CFLAGS=$pkg_cv_GTKDOC_DEPS_CFLAGS GTKDOC_DEPS_LIBS=$pkg_cv_GTKDOC_DEPS_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi fi # Check whether --enable-gtk-doc-html was given. if test ${enable_gtk_doc_html+y} then : enableval=$enable_gtk_doc_html; else $as_nop enable_gtk_doc_html=yes fi # Check whether --enable-gtk-doc-pdf was given. if test ${enable_gtk_doc_pdf+y} then : enableval=$enable_gtk_doc_pdf; else $as_nop enable_gtk_doc_pdf=no fi if test -z "$GTKDOC_MKPDF"; then enable_gtk_doc_pdf=no fi if test -z "$AM_DEFAULT_VERBOSITY"; then AM_DEFAULT_VERBOSITY=1 fi if test x$have_gtk_doc = xyes; then HAVE_GTK_DOC_TRUE= HAVE_GTK_DOC_FALSE='#' else HAVE_GTK_DOC_TRUE='#' HAVE_GTK_DOC_FALSE= fi if test x$enable_gtk_doc = xyes; then ENABLE_GTK_DOC_TRUE= ENABLE_GTK_DOC_FALSE='#' else ENABLE_GTK_DOC_TRUE='#' ENABLE_GTK_DOC_FALSE= fi if test x$enable_gtk_doc_html = xyes; then GTK_DOC_BUILD_HTML_TRUE= GTK_DOC_BUILD_HTML_FALSE='#' else GTK_DOC_BUILD_HTML_TRUE='#' GTK_DOC_BUILD_HTML_FALSE= fi if test x$enable_gtk_doc_pdf = xyes; then GTK_DOC_BUILD_PDF_TRUE= GTK_DOC_BUILD_PDF_FALSE='#' else GTK_DOC_BUILD_PDF_TRUE='#' GTK_DOC_BUILD_PDF_FALSE= fi if test -n "$LIBTOOL"; then GTK_DOC_USE_LIBTOOL_TRUE= GTK_DOC_USE_LIBTOOL_FALSE='#' else GTK_DOC_USE_LIBTOOL_TRUE='#' GTK_DOC_USE_LIBTOOL_FALSE= fi if test -n "$GTKDOC_REBASE"; then GTK_DOC_USE_REBASE_TRUE= GTK_DOC_USE_REBASE_FALSE='#' else GTK_DOC_USE_REBASE_TRUE='#' GTK_DOC_USE_REBASE_FALSE= fi if test "z$with_html_dir" != "z" ; then LASSO_DOCDIR=$with_html_dir else LASSO_DOCDIR='$(datadir)/doc/lasso' fi # Check whether --with-html-dir was given. if test ${with_html_dir+y} then : withval=$with_html_dir; fi if test "x$with_html_dir" = "x" ; then HTML_DIR='${datadir}/gtk-doc/html' else HTML_DIR=$with_html_dir fi # Check whether --with-pkg-config was given. if test ${with_pkg_config+y} then : withval=$with_pkg_config; PKG_CONFIG_PATH="${withval}" else $as_nop PKG_CONFIG_PATH="" fi if test "z$PKG_CONFIG_PATH" != "z"; then export PKG_CONFIG_PATH fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for glib-2.0 >= 2.17.0 gobject-2.0 >= 2.17.0 libxml-2.0 xmlsec1 >= 1.2.6 xmlsec1-openssl >= 1.2.6 openssl" >&5 printf %s "checking for glib-2.0 >= 2.17.0 gobject-2.0 >= 2.17.0 libxml-2.0 xmlsec1 >= 1.2.6 xmlsec1-openssl >= 1.2.6 openssl... " >&6; } if test -n "$LASSO_CFLAGS"; then pkg_cv_LASSO_CFLAGS="$LASSO_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.17.0 gobject-2.0 >= 2.17.0 libxml-2.0 xmlsec1 >= 1.2.6 xmlsec1-openssl >= 1.2.6 openssl\""; } >&5 ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.17.0 gobject-2.0 >= 2.17.0 libxml-2.0 xmlsec1 >= 1.2.6 xmlsec1-openssl >= 1.2.6 openssl") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LASSO_CFLAGS=`$PKG_CONFIG --cflags "glib-2.0 >= 2.17.0 gobject-2.0 >= 2.17.0 libxml-2.0 xmlsec1 >= 1.2.6 xmlsec1-openssl >= 1.2.6 openssl" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$LASSO_LIBS"; then pkg_cv_LASSO_LIBS="$LASSO_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.17.0 gobject-2.0 >= 2.17.0 libxml-2.0 xmlsec1 >= 1.2.6 xmlsec1-openssl >= 1.2.6 openssl\""; } >&5 ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.17.0 gobject-2.0 >= 2.17.0 libxml-2.0 xmlsec1 >= 1.2.6 xmlsec1-openssl >= 1.2.6 openssl") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LASSO_LIBS=`$PKG_CONFIG --libs "glib-2.0 >= 2.17.0 gobject-2.0 >= 2.17.0 libxml-2.0 xmlsec1 >= 1.2.6 xmlsec1-openssl >= 1.2.6 openssl" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then LASSO_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "glib-2.0 >= 2.17.0 gobject-2.0 >= 2.17.0 libxml-2.0 xmlsec1 >= 1.2.6 xmlsec1-openssl >= 1.2.6 openssl" 2>&1` else LASSO_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "glib-2.0 >= 2.17.0 gobject-2.0 >= 2.17.0 libxml-2.0 xmlsec1 >= 1.2.6 xmlsec1-openssl >= 1.2.6 openssl" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LASSO_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (glib-2.0 >= 2.17.0 gobject-2.0 >= 2.17.0 libxml-2.0 xmlsec1 >= 1.2.6 xmlsec1-openssl >= 1.2.6 openssl) were not met: $LASSO_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables LASSO_CFLAGS and LASSO_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables LASSO_CFLAGS and LASSO_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else LASSO_CFLAGS=$pkg_cv_LASSO_CFLAGS LASSO_LIBS=$pkg_cv_LASSO_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi # Check whether --enable-tests was given. if test ${enable_tests+y} then : enableval=$enable_tests; else $as_nop enable_tests="yes" fi if test "x$enable_tests" = xyes ; then pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for check" >&5 printf %s "checking for check... " >&6; } if test -n "$CHECK_CFLAGS"; then pkg_cv_CHECK_CFLAGS="$CHECK_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"check\""; } >&5 ($PKG_CONFIG --exists --print-errors "check") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_CHECK_CFLAGS=`$PKG_CONFIG --cflags "check" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$CHECK_LIBS"; then pkg_cv_CHECK_LIBS="$CHECK_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"check\""; } >&5 ($PKG_CONFIG --exists --print-errors "check") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_CHECK_LIBS=`$PKG_CONFIG --libs "check" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then CHECK_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "check" 2>&1` else CHECK_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "check" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$CHECK_PKG_ERRORS" >&5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for srunner_set_log in -lcheck" >&5 printf %s "checking for srunner_set_log in -lcheck... " >&6; } if test ${ac_cv_lib_check_srunner_set_log+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lcheck $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char srunner_set_log (); int main (void) { return srunner_set_log (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_check_srunner_set_log=yes else $as_nop ac_cv_lib_check_srunner_set_log=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_check_srunner_set_log" >&5 printf "%s\n" "$ac_cv_lib_check_srunner_set_log" >&6; } if test "x$ac_cv_lib_check_srunner_set_log" = xyes then : enable_tests="yes" else $as_nop enable_tests="no" fi CHECK_CFLAGS="" CHECK_LIBS="-lcheck" elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for srunner_set_log in -lcheck" >&5 printf %s "checking for srunner_set_log in -lcheck... " >&6; } if test ${ac_cv_lib_check_srunner_set_log+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lcheck $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char srunner_set_log (); int main (void) { return srunner_set_log (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_check_srunner_set_log=yes else $as_nop ac_cv_lib_check_srunner_set_log=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_check_srunner_set_log" >&5 printf "%s\n" "$ac_cv_lib_check_srunner_set_log" >&6; } if test "x$ac_cv_lib_check_srunner_set_log" = xyes then : enable_tests="yes" else $as_nop enable_tests="no" fi CHECK_CFLAGS="" CHECK_LIBS="-lcheck" else CHECK_CFLAGS=$pkg_cv_CHECK_CFLAGS CHECK_LIBS=$pkg_cv_CHECK_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for srunner_set_xml in -lcheck" >&5 printf %s "checking for srunner_set_xml in -lcheck... " >&6; } if test ${ac_cv_lib_check_srunner_set_xml+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lcheck $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char srunner_set_xml (); int main (void) { return srunner_set_xml (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_check_srunner_set_xml=yes else $as_nop ac_cv_lib_check_srunner_set_xml=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_check_srunner_set_xml" >&5 printf "%s\n" "$ac_cv_lib_check_srunner_set_xml" >&6; } if test "x$ac_cv_lib_check_srunner_set_xml" = xyes then : printf "%s\n" "#define CHECK_IS_XML /**/" >>confdefs.h fi fi if test "x$enable_tests" = "xyes"; then WITH_TESTS_TRUE= WITH_TESTS_FALSE='#' else WITH_TESTS_TRUE='#' WITH_TESTS_FALSE= fi for ac_prog in rest2html rst2html do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_REST2HTML+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$REST2HTML"; then ac_cv_prog_REST2HTML="$REST2HTML" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_REST2HTML="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi REST2HTML=$ac_cv_prog_REST2HTML if test -n "$REST2HTML"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $REST2HTML" >&5 printf "%s\n" "$REST2HTML" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$REST2HTML" && break done if test -n "$ac_cv_prog_REST2HTML"; then HAVE_REST2HTML_TRUE= HAVE_REST2HTML_FALSE='#' else HAVE_REST2HTML_TRUE='#' HAVE_REST2HTML_FALSE= fi for ac_prog in xsltproc do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_XSLTPROC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$XSLTPROC"; then ac_cv_prog_XSLTPROC="$XSLTPROC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_XSLTPROC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi XSLTPROC=$ac_cv_prog_XSLTPROC if test -n "$XSLTPROC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $XSLTPROC" >&5 printf "%s\n" "$XSLTPROC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$XSLTPROC" && break done if test -n "$ac_cv_prog_XSLTPROC"; then HAVE_XSLTPROC_TRUE= HAVE_XSLTPROC_FALSE='#' else HAVE_XSLTPROC_TRUE='#' HAVE_XSLTPROC_FALSE= fi for ac_prog in inkscape do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_INKSCAPE+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$INKSCAPE"; then ac_cv_prog_INKSCAPE="$INKSCAPE" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_INKSCAPE="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi INKSCAPE=$ac_cv_prog_INKSCAPE if test -n "$INKSCAPE"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INKSCAPE" >&5 printf "%s\n" "$INKSCAPE" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$INKSCAPE" && break done if test -n "$ac_cv_prog_INKSCAPE"; then HAVE_INKSCAPE_TRUE= HAVE_INKSCAPE_FALSE='#' else HAVE_INKSCAPE_TRUE='#' HAVE_INKSCAPE_FALSE= fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for debugging" >&5 printf %s "checking for debugging... " >&6; } # Check whether --enable-debugging was given. if test ${enable_debugging+y} then : enableval=$enable_debugging; fi if test "z$enable_debugging" = "zyes" ; then enable_debugging=yes LASSO_DEFINES="$LASSO_DEFINES -DLASSO_DEBUG" CFLAGS="$CFLAGS -O0 -g -Wall -Wextra" else enable_debugging=no fi if test "x$enable_debugging" = "xyes"; then DEBUGGING_TRUE= DEBUGGING_FALSE='#' else DEBUGGING_TRUE='#' DEBUGGING_FALSE= fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_debugging" >&5 printf "%s\n" "$enable_debugging" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for profiling" >&5 printf %s "checking for profiling... " >&6; } # Check whether --enable-profiling was given. if test ${enable_profiling+y} then : enableval=$enable_profiling; fi if test "z$enable_profiling" = "zyes" ; then AM_CFLAGS="$AM_CFLAGS -pg" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Check whether --with-default-sign-algo was given. if test ${with_default_sign_algo+y} then : withval=$with_default_sign_algo; fi SIGNING_ALGO=rsa-sha1 if test x"$with_default_sign_algo" != x; then if test ! "$with_default_sign_algo" = "rsa-sha1" -a ! "$with_default_sign_algo" = "rsa-sha256"; then as_fn_error $? "\"Default signing algorithm must be either rsa-sha1 or rsa-sha256\"" "$LINENO" 5 else SIGNING_ALGO=$with_default_sign_algo fi fi printf "%s\n" "#define DEFAULT_SIGNING_ALGO \"$SIGNING_ALGO\"" >>confdefs.h # Check whether --with-min-hash-algo was given. if test ${with_min_hash_algo+y} then : withval=$with_min_hash_algo; fi MIN_HASH_ALGO=sha1 if test x"$with_min_hash_algo" != x; then if test ! "$with_min_hash_algo" = "sha1" -a ! "$with_min_hash_algo" = "sha256" -a ! "$with_min_hash_algo" = "sha384" -a ! "$with_min_hash_algo" = "sha512"; then as_fn_error sha256 "\"Minimal allowed hash algorithm must be one of sha1" "$LINENO" 5 else MIN_HASH_ALGO=$with_min_hash_algo fi fi printf "%s\n" "#define MIN_HASH_ALGO \"$MIN_HASH_ALGO\"" >>confdefs.h # Check whether --with-default-key-encryption-method was given. if test ${with_default_key_encryption_method+y} then : withval=$with_default_key_encryption_method; fi KEY_ENCRYPTION_METHOD=rsa-oaep if test x"$with_default_" != x; then if test ! "$with_default_key_encryption_method" = "rsa-pkcs1" -a ! "$with_default_key_encryption_method" = "rsa-oaep"; then as_fn_error $? "\"Default key encryption method must be either rsa-pkcs1 or rsa-oaep\"" "$LINENO" 5 else SIGNING_ALGO=$with_default_key_encryption_method fi fi printf "%s\n" "#define DEFAULT_KEY_ENCRYPTION_METHOD \"$KEY_ENCRYPTION_METHOD\"" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pedantic" >&5 printf %s "checking for pedantic... " >&6; } # Check whether --enable-pedantic was given. if test ${enable_pedantic+y} then : enableval=$enable_pedantic; fi if test "z$enable_pedantic" = "zyes" ; then CFLAGS="$CFLAGS -O -pedantic -Wall -ansi -fno-inline -W -Wunused -Wimplicit -Wreturn-type -Wswitch -Wcomment -Wtrigraphs -Wformat -Wchar-subscripts -Wuninitialized -Wparentheses -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -Waggregate-return -Wmissing-prototypes -Wnested-externs -Winline -Wredundant-decls" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi LASSO_STATIC_BINARIES="" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for static linking" >&5 printf %s "checking for static linking... " >&6; } # Check whether --enable-static_linking was given. if test ${enable_static_linking+y} then : enableval=$enable_static_linking; fi if test "z$enable_static_linking" = "zyes" ; then LASSO_STATIC_BINARIES="-static" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi LASSO_PUB_CFLAGS="$LASSO_DEFINES" LASSO_CORE_CFLAGS="$LASSO_CFLAGS $LASSO_DEFINES $Z_CFLAGS -DLASSO_INTERNALS" if test $MINGW -eq 1; then LASSO_CORE_LIBS="-llasso-0" else LASSO_CORE_LIBS="-llasso " fi LASSO_CFLAGS="$LASSO_CFLAGS" LASSO_LIBS="-L${libdir} $Z_LIBS $LASSO_LIBS" if test $MINGW -eq 1; then MINGW_TRUE= MINGW_FALSE='#' else MINGW_TRUE='#' MINGW_FALSE= fi if test $DARWIN -eq 1; then DARWIN_TRUE= DARWIN_FALSE='#' else DARWIN_TRUE='#' DARWIN_FALSE= fi ac_config_files="$ac_config_files lasso-src-config" ac_config_files="$ac_config_files Makefile docs/Makefile docs/lasso-book/Makefile docs/lasso-book/figures/Makefile docs/reference/Makefile docs/reference/lasso/version.xml docs/reference/lasso/Makefile lasso/Makefile lasso/id-ff/Makefile lasso/saml-2.0/Makefile lasso/xml/Makefile lasso/xml/ecp/Makefile lasso/xml/saml-2.0/Makefile lasso/xml/soap-1.1/Makefile lasso/xml/dsig/Makefile tests/Makefile tests/data/Makefile lasso.pc bindings/Makefile bindings/java/Makefile bindings/python/Makefile bindings/python/tests/Makefile bindings/php5/Makefile bindings/php5/examples/Makefile bindings/php5/tests/Makefile bindings/php7/Makefile bindings/php7/examples/Makefile bindings/php7/tests/Makefile bindings/perl/Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 printf "%s\n" "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 printf %s "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: done" >&5 printf "%s\n" "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${HAVE_AM_SILENT_RULES_TRUE}" && test -z "${HAVE_AM_SILENT_RULES_FALSE}"; then as_fn_error $? "conditional \"HAVE_AM_SILENT_RULES\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 printf %s "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: done" >&5 printf "%s\n" "done" >&6; } if test -z "${JAVA_ENABLED_TRUE}" && test -z "${JAVA_ENABLED_FALSE}"; then as_fn_error $? "conditional \"JAVA_ENABLED\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${JUNIT_ENABLED_TRUE}" && test -z "${JUNIT_ENABLED_FALSE}"; then as_fn_error $? "conditional \"JUNIT_ENABLED\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${PYTHON_ENABLED_TRUE}" && test -z "${PYTHON_ENABLED_FALSE}"; then as_fn_error $? "conditional \"PYTHON_ENABLED\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${PHP5_ENABLED_TRUE}" && test -z "${PHP5_ENABLED_FALSE}"; then as_fn_error $? "conditional \"PHP5_ENABLED\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${PHP7_ENABLED_TRUE}" && test -z "${PHP7_ENABLED_FALSE}"; then as_fn_error $? "conditional \"PHP7_ENABLED\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CSHARP_ENABLED_TRUE}" && test -z "${CSHARP_ENABLED_FALSE}"; then as_fn_error $? "conditional \"CSHARP_ENABLED\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${PERL_ENABLED_TRUE}" && test -z "${PERL_ENABLED_FALSE}"; then as_fn_error $? "conditional \"PERL_ENABLED\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_GTK_DOC_TRUE}" && test -z "${HAVE_GTK_DOC_FALSE}"; then as_fn_error $? "conditional \"HAVE_GTK_DOC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_GTK_DOC_TRUE}" && test -z "${ENABLE_GTK_DOC_FALSE}"; then as_fn_error $? "conditional \"ENABLE_GTK_DOC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GTK_DOC_BUILD_HTML_TRUE}" && test -z "${GTK_DOC_BUILD_HTML_FALSE}"; then as_fn_error $? "conditional \"GTK_DOC_BUILD_HTML\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GTK_DOC_BUILD_PDF_TRUE}" && test -z "${GTK_DOC_BUILD_PDF_FALSE}"; then as_fn_error $? "conditional \"GTK_DOC_BUILD_PDF\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GTK_DOC_USE_LIBTOOL_TRUE}" && test -z "${GTK_DOC_USE_LIBTOOL_FALSE}"; then as_fn_error $? "conditional \"GTK_DOC_USE_LIBTOOL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GTK_DOC_USE_REBASE_TRUE}" && test -z "${GTK_DOC_USE_REBASE_FALSE}"; then as_fn_error $? "conditional \"GTK_DOC_USE_REBASE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_TESTS_TRUE}" && test -z "${WITH_TESTS_FALSE}"; then as_fn_error $? "conditional \"WITH_TESTS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_REST2HTML_TRUE}" && test -z "${HAVE_REST2HTML_FALSE}"; then as_fn_error $? "conditional \"HAVE_REST2HTML\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_XSLTPROC_TRUE}" && test -z "${HAVE_XSLTPROC_FALSE}"; then as_fn_error $? "conditional \"HAVE_XSLTPROC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_INKSCAPE_TRUE}" && test -z "${HAVE_INKSCAPE_FALSE}"; then as_fn_error $? "conditional \"HAVE_INKSCAPE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${DEBUGGING_TRUE}" && test -z "${DEBUGGING_FALSE}"; then as_fn_error $? "conditional \"DEBUGGING\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${MINGW_TRUE}" && test -z "${MINGW_FALSE}"; then as_fn_error $? "conditional \"MINGW\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${DARWIN_TRUE}" && test -z "${DARWIN_FALSE}"; then as_fn_error $? "conditional \"DARWIN\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else $as_nop as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by lasso $as_me 2.8.2, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." _ACEOF ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ lasso config.status 2.8.2 configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" Copyright (C) 2021 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) printf "%s\n" "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) printf "%s\n" "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) printf "%s\n" "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX printf "%s\n" "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' AS='`$ECHO "$AS" | $SED "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' shared_archive_member_spec='`$ECHO "$shared_archive_member_spec" | $SED "$delay_single_quote_subst"`' SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' FILECMD='`$ECHO "$FILECMD" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' lt_ar_flags='`$ECHO "$lt_ar_flags" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_import='`$ECHO "$lt_cv_sys_global_symbol_to_import" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' lt_cv_nm_interface='`$ECHO "$lt_cv_nm_interface" | $SED "$delay_single_quote_subst"`' nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' lt_cv_truncate_bin='`$ECHO "$lt_cv_truncate_bin" | $SED "$delay_single_quote_subst"`' objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' configure_time_dlsearch_path='`$ECHO "$configure_time_dlsearch_path" | $SED "$delay_single_quote_subst"`' configure_time_lt_sys_library_path='`$ECHO "$configure_time_lt_sys_library_path" | $SED "$delay_single_quote_subst"`' hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' LD_RC='`$ECHO "$LD_RC" | $SED "$delay_single_quote_subst"`' reload_flag_RC='`$ECHO "$reload_flag_RC" | $SED "$delay_single_quote_subst"`' reload_cmds_RC='`$ECHO "$reload_cmds_RC" | $SED "$delay_single_quote_subst"`' old_archive_cmds_RC='`$ECHO "$old_archive_cmds_RC" | $SED "$delay_single_quote_subst"`' compiler_RC='`$ECHO "$compiler_RC" | $SED "$delay_single_quote_subst"`' GCC_RC='`$ECHO "$GCC_RC" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag_RC='`$ECHO "$lt_prog_compiler_no_builtin_flag_RC" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic_RC='`$ECHO "$lt_prog_compiler_pic_RC" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl_RC='`$ECHO "$lt_prog_compiler_wl_RC" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static_RC='`$ECHO "$lt_prog_compiler_static_RC" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o_RC='`$ECHO "$lt_cv_prog_compiler_c_o_RC" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc_RC='`$ECHO "$archive_cmds_need_lc_RC" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes_RC='`$ECHO "$enable_shared_with_static_runtimes_RC" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec_RC='`$ECHO "$export_dynamic_flag_spec_RC" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec_RC='`$ECHO "$whole_archive_flag_spec_RC" | $SED "$delay_single_quote_subst"`' compiler_needs_object_RC='`$ECHO "$compiler_needs_object_RC" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds_RC='`$ECHO "$old_archive_from_new_cmds_RC" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds_RC='`$ECHO "$old_archive_from_expsyms_cmds_RC" | $SED "$delay_single_quote_subst"`' archive_cmds_RC='`$ECHO "$archive_cmds_RC" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds_RC='`$ECHO "$archive_expsym_cmds_RC" | $SED "$delay_single_quote_subst"`' module_cmds_RC='`$ECHO "$module_cmds_RC" | $SED "$delay_single_quote_subst"`' module_expsym_cmds_RC='`$ECHO "$module_expsym_cmds_RC" | $SED "$delay_single_quote_subst"`' with_gnu_ld_RC='`$ECHO "$with_gnu_ld_RC" | $SED "$delay_single_quote_subst"`' allow_undefined_flag_RC='`$ECHO "$allow_undefined_flag_RC" | $SED "$delay_single_quote_subst"`' no_undefined_flag_RC='`$ECHO "$no_undefined_flag_RC" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_RC='`$ECHO "$hardcode_libdir_flag_spec_RC" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator_RC='`$ECHO "$hardcode_libdir_separator_RC" | $SED "$delay_single_quote_subst"`' hardcode_direct_RC='`$ECHO "$hardcode_direct_RC" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute_RC='`$ECHO "$hardcode_direct_absolute_RC" | $SED "$delay_single_quote_subst"`' hardcode_minus_L_RC='`$ECHO "$hardcode_minus_L_RC" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var_RC='`$ECHO "$hardcode_shlibpath_var_RC" | $SED "$delay_single_quote_subst"`' hardcode_automatic_RC='`$ECHO "$hardcode_automatic_RC" | $SED "$delay_single_quote_subst"`' inherit_rpath_RC='`$ECHO "$inherit_rpath_RC" | $SED "$delay_single_quote_subst"`' link_all_deplibs_RC='`$ECHO "$link_all_deplibs_RC" | $SED "$delay_single_quote_subst"`' always_export_symbols_RC='`$ECHO "$always_export_symbols_RC" | $SED "$delay_single_quote_subst"`' export_symbols_cmds_RC='`$ECHO "$export_symbols_cmds_RC" | $SED "$delay_single_quote_subst"`' exclude_expsyms_RC='`$ECHO "$exclude_expsyms_RC" | $SED "$delay_single_quote_subst"`' include_expsyms_RC='`$ECHO "$include_expsyms_RC" | $SED "$delay_single_quote_subst"`' prelink_cmds_RC='`$ECHO "$prelink_cmds_RC" | $SED "$delay_single_quote_subst"`' postlink_cmds_RC='`$ECHO "$postlink_cmds_RC" | $SED "$delay_single_quote_subst"`' file_list_spec_RC='`$ECHO "$file_list_spec_RC" | $SED "$delay_single_quote_subst"`' hardcode_action_RC='`$ECHO "$hardcode_action_RC" | $SED "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } # Quote evaled strings. for var in AS \ DLLTOOL \ OBJDUMP \ SHELL \ ECHO \ PATH_SEPARATOR \ SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ FILECMD \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ want_nocaseglob \ sharedlib_from_linklib_cmd \ AR \ archiver_list_spec \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_import \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ lt_cv_nm_interface \ nm_file_list_spec \ lt_cv_truncate_bin \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_pic \ lt_prog_compiler_wl \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ MANIFEST_TOOL \ DSYMUTIL \ NMEDIT \ LIPO \ OTOOL \ OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ compiler_needs_object \ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_separator \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ install_override_mode \ finish_eval \ old_striplib \ striplib \ LD_RC \ reload_flag_RC \ compiler_RC \ lt_prog_compiler_no_builtin_flag_RC \ lt_prog_compiler_pic_RC \ lt_prog_compiler_wl_RC \ lt_prog_compiler_static_RC \ lt_cv_prog_compiler_c_o_RC \ export_dynamic_flag_spec_RC \ whole_archive_flag_spec_RC \ compiler_needs_object_RC \ with_gnu_ld_RC \ allow_undefined_flag_RC \ no_undefined_flag_RC \ hardcode_libdir_flag_spec_RC \ hardcode_libdir_separator_RC \ exclude_expsyms_RC \ include_expsyms_RC \ file_list_spec_RC; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds \ old_postinstall_cmds \ old_postuninstall_cmds \ old_archive_cmds \ extract_expsyms_cmds \ old_archive_from_new_cmds \ old_archive_from_expsyms_cmds \ archive_cmds \ archive_expsym_cmds \ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ postlink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ configure_time_dlsearch_path \ configure_time_lt_sys_library_path \ reload_cmds_RC \ old_archive_cmds_RC \ old_archive_from_new_cmds_RC \ old_archive_from_expsyms_cmds_RC \ archive_cmds_RC \ archive_expsym_cmds_RC \ module_cmds_RC \ module_expsym_cmds_RC \ export_symbols_cmds_RC \ prelink_cmds_RC \ postlink_cmds_RC; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done ac_aux_dir='$ac_aux_dir' # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' RM='$RM' ofile='$ofile' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "lasso/lasso_config.h") CONFIG_HEADERS="$CONFIG_HEADERS lasso/lasso_config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "lasso-src-config") CONFIG_FILES="$CONFIG_FILES lasso-src-config" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "docs/Makefile") CONFIG_FILES="$CONFIG_FILES docs/Makefile" ;; "docs/lasso-book/Makefile") CONFIG_FILES="$CONFIG_FILES docs/lasso-book/Makefile" ;; "docs/lasso-book/figures/Makefile") CONFIG_FILES="$CONFIG_FILES docs/lasso-book/figures/Makefile" ;; "docs/reference/Makefile") CONFIG_FILES="$CONFIG_FILES docs/reference/Makefile" ;; "docs/reference/lasso/version.xml") CONFIG_FILES="$CONFIG_FILES docs/reference/lasso/version.xml" ;; "docs/reference/lasso/Makefile") CONFIG_FILES="$CONFIG_FILES docs/reference/lasso/Makefile" ;; "lasso/Makefile") CONFIG_FILES="$CONFIG_FILES lasso/Makefile" ;; "lasso/id-ff/Makefile") CONFIG_FILES="$CONFIG_FILES lasso/id-ff/Makefile" ;; "lasso/saml-2.0/Makefile") CONFIG_FILES="$CONFIG_FILES lasso/saml-2.0/Makefile" ;; "lasso/xml/Makefile") CONFIG_FILES="$CONFIG_FILES lasso/xml/Makefile" ;; "lasso/xml/ecp/Makefile") CONFIG_FILES="$CONFIG_FILES lasso/xml/ecp/Makefile" ;; "lasso/xml/saml-2.0/Makefile") CONFIG_FILES="$CONFIG_FILES lasso/xml/saml-2.0/Makefile" ;; "lasso/xml/soap-1.1/Makefile") CONFIG_FILES="$CONFIG_FILES lasso/xml/soap-1.1/Makefile" ;; "lasso/xml/dsig/Makefile") CONFIG_FILES="$CONFIG_FILES lasso/xml/dsig/Makefile" ;; "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;; "tests/data/Makefile") CONFIG_FILES="$CONFIG_FILES tests/data/Makefile" ;; "lasso.pc") CONFIG_FILES="$CONFIG_FILES lasso.pc" ;; "bindings/Makefile") CONFIG_FILES="$CONFIG_FILES bindings/Makefile" ;; "bindings/java/Makefile") CONFIG_FILES="$CONFIG_FILES bindings/java/Makefile" ;; "bindings/python/Makefile") CONFIG_FILES="$CONFIG_FILES bindings/python/Makefile" ;; "bindings/python/tests/Makefile") CONFIG_FILES="$CONFIG_FILES bindings/python/tests/Makefile" ;; "bindings/php5/Makefile") CONFIG_FILES="$CONFIG_FILES bindings/php5/Makefile" ;; "bindings/php5/examples/Makefile") CONFIG_FILES="$CONFIG_FILES bindings/php5/examples/Makefile" ;; "bindings/php5/tests/Makefile") CONFIG_FILES="$CONFIG_FILES bindings/php5/tests/Makefile" ;; "bindings/php7/Makefile") CONFIG_FILES="$CONFIG_FILES bindings/php7/Makefile" ;; "bindings/php7/examples/Makefile") CONFIG_FILES="$CONFIG_FILES bindings/php7/examples/Makefile" ;; "bindings/php7/tests/Makefile") CONFIG_FILES="$CONFIG_FILES bindings/php7/tests/Makefile" ;; "bindings/perl/Makefile") CONFIG_FILES="$CONFIG_FILES bindings/perl/Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 printf "%s\n" "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`printf "%s\n" "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 printf "%s\n" "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 printf "%s\n" "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. case $CONFIG_FILES in #( *\'*) : eval set x "$CONFIG_FILES" ;; #( *) : set x $CONFIG_FILES ;; #( *) : ;; esac shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`printf "%s\n" "$am_mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`$as_dirname -- "$am_mf" || $as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$am_mf" : 'X\(//\)[^/]' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$am_mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` am_filepart=`$as_basename -- "$am_mf" || $as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$am_mf" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` { echo "$as_me:$LINENO: cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles" >&5 (cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } || am_rc=$? done if test $am_rc -ne 0; then { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments for automatic dependency tracking. If GNU make was not used, consider re-running the configure script with MAKE=\"gmake\" (or whatever is necessary). You can also try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } fi { am_dirpart=; unset am_dirpart;} { am_filepart=; unset am_filepart;} { am_mf=; unset am_mf;} { am_rc=; unset am_rc;} rm -f conftest-deps.mk } ;; "libtool":C) # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi cfgfile=${ofile}T trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # Generated automatically by $as_me ($PACKAGE) $VERSION # NOTE: Changes made to this file will be lost: look at ltmain.sh. # Provide generalized library-building support services. # Written by Gordon Matzigkeit, 1996 # Copyright (C) 2014 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program or library that is built # using GNU Libtool, you may include this file under the same # distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # The names of the tagged configurations supported by this script. available_tags='RC ' # Configured defaults for sys_lib_dlsearch_path munging. : \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} # ### BEGIN LIBTOOL CONFIG # Assembler program. AS=$lt_AS # DLL creation program. DLLTOOL=$lt_DLLTOOL # Object dumper program. OBJDUMP=$lt_OBJDUMP # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # What type of objects to build. pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # Shared archive member basename,for filename based shared library versioning on AIX. shared_archive_member_spec=$shared_archive_member_spec # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that protects backslashes. ECHO=$lt_ECHO # The PATH separator for the build system. PATH_SEPARATOR=$lt_PATH_SEPARATOR # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # convert \$build file names to \$host format. to_host_file_cmd=$lt_cv_to_host_file_cmd # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd # A file(cmd) program that detects file types. FILECMD=$lt_FILECMD # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method = "file_magic". file_magic_cmd=$lt_file_magic_cmd # How to find potential files when deplibs_check_method = "file_magic". file_magic_glob=$lt_file_magic_glob # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob=$lt_want_nocaseglob # Command to associate shared and link libraries. sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR # Flags to create an archive (by configure). lt_ar_flags=$lt_ar_flags # Flags to create an archive. AR_FLAGS=\${ARFLAGS-"\$lt_ar_flags"} # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Whether to use a lock for old archive extraction. lock_old_archive_extraction=$lock_old_archive_extraction # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm into a list of symbols to manually relocate. global_symbol_to_import=$lt_lt_cv_sys_global_symbol_to_import # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # The name lister interface. nm_interface=$lt_lt_cv_nm_interface # Specify filename containing input files for \$NM. nm_file_list_spec=$lt_nm_file_list_spec # The root where to search for dependent libraries,and where our libraries should be installed. lt_sysroot=$lt_sysroot # Command to truncate a binary pipe. lt_truncate_bin=$lt_lt_cv_truncate_bin # The name of the directory that contains temporary libtool files. objdir=$objdir # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Manifest tool. MANIFEST_TOOL=$lt_MANIFEST_TOOL # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Permission mode override for installation of shared libraries. install_override_mode=$lt_install_override_mode # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Detected run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path # Explicit LT_SYS_LIBRARY_PATH set during ./configure time. configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # The linker used to build libraries. LD=$lt_LD # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \$shlibpath_var if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # ### END LIBTOOL CONFIG _LT_EOF cat <<'_LT_EOF' >> "$cfgfile" # ### BEGIN FUNCTIONS SHARED WITH CONFIGURE # func_munge_path_list VARIABLE PATH # ----------------------------------- # VARIABLE is name of variable containing _space_ separated list of # directories to be munged by the contents of PATH, which is string # having a format: # "DIR[:DIR]:" # string "DIR[ DIR]" will be prepended to VARIABLE # ":DIR[:DIR]" # string "DIR[ DIR]" will be appended to VARIABLE # "DIRP[:DIRP]::[DIRA:]DIRA" # string "DIRP[ DIRP]" will be prepended to VARIABLE and string # "DIRA[ DIRA]" will be appended to VARIABLE # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { case x$2 in x) ;; *:) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" ;; x:*) eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" ;; *::*) eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" ;; *) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" ;; esac } # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. func_cc_basename () { for cc_temp in $*""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` } # ### END FUNCTIONS SHARED WITH CONFIGURE _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain=$ac_aux_dir/ltmain.sh # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? $SED '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" cat <<_LT_EOF >> "$ofile" # ### BEGIN LIBTOOL TAG CONFIG: RC # The linker used to build libraries. LD=$lt_LD_RC # How to create reloadable object files. reload_flag=$lt_reload_flag_RC reload_cmds=$lt_reload_cmds_RC # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds_RC # A language specific compiler. CC=$lt_compiler_RC # Is the compiler the GNU compiler? with_gcc=$GCC_RC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_RC # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_RC # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_RC # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_RC # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_RC # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_RC # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_RC # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_RC # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_RC # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object_RC # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_RC # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_RC # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds_RC archive_expsym_cmds=$lt_archive_expsym_cmds_RC # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds_RC module_expsym_cmds=$lt_module_expsym_cmds_RC # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld_RC # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_RC # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_RC # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_RC # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_RC # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct_RC # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \$shlibpath_var if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute_RC # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L_RC # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_RC # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic_RC # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath_RC # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_RC # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols_RC # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_RC # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_RC # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_RC # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds_RC # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds_RC # Specify filename containing input files. file_list_spec=$lt_file_list_spec_RC # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_RC # ### END LIBTOOL TAG CONFIG: RC _LT_EOF ;; "lasso-src-config":F) chmod +x lasso-src-config ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi languages_available=`echo $languages_available | sed -e "s/^ //" ` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ============= Configuration ============= Main ---- Compiler: ${CC} CFLAGS: ${AM_CFLAGS} ${CFLAGS} Install prefix: ${prefix} Debugging: $enable_debugging Optionals builds ---------------- Available languages: ${languages_available} Java binding: ${enable_java} Perl binding: ${enable_perl} PHP 5 binding: ${enable_php5} PHP 7 binding: ${enable_php7} Python binding: ${enable_python} C API references: ${enable_gtk_doc} Tests suite: ${enable_tests} Crypto settings --------------- Default signature: ${SIGNING_ALGO} Minimal accepted hash: ${MIN_HASH_ALGO} Key encryption method: ${KEY_ENCRYPTION_METHOD} " >&5 printf "%s\n" "============= Configuration ============= Main ---- Compiler: ${CC} CFLAGS: ${AM_CFLAGS} ${CFLAGS} Install prefix: ${prefix} Debugging: $enable_debugging Optionals builds ---------------- Available languages: ${languages_available} Java binding: ${enable_java} Perl binding: ${enable_perl} PHP 5 binding: ${enable_php5} PHP 7 binding: ${enable_php7} Python binding: ${enable_python} C API references: ${enable_gtk_doc} Tests suite: ${enable_tests} Crypto settings --------------- Default signature: ${SIGNING_ALGO} Minimal accepted hash: ${MIN_HASH_ALGO} Key encryption method: ${KEY_ENCRYPTION_METHOD} " >&6; } lasso-2.8.2/PaxHeaders/bindings0000644000000000000000000000013214404126162013442 xustar0030 mtime=1678814322.725963081 30 atime=1678814326.421984131 30 ctime=1678814322.725963081 lasso-2.8.2/bindings/0000755000175000017500000000000014404126162016767 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/bindings/PaxHeaders/php50000644000000000000000000000013214404126162014316 xustar0030 mtime=1678814322.121959641 30 atime=1678814326.421984131 30 ctime=1678814322.121959641 lasso-2.8.2/bindings/php5/0000755000175000017500000000000014404126162017643 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/bindings/php5/PaxHeaders/lasso.ini0000644000000000000000000000013213766621500016223 xustar0030 mtime=1608196928.726895006 30 atime=1678098072.269506934 30 ctime=1678814322.077959391 lasso-2.8.2/bindings/php5/lasso.ini0000644000175000017500000000006613766621500021475 0ustar00bdauvergnebdauvergne00000000000000; configuration for php PDO module extension=lasso.so lasso-2.8.2/bindings/php5/PaxHeaders/Makefile.am0000644000000000000000000000013214117162531016430 xustar0030 mtime=1631380825.848637964 30 atime=1678814114.420789892 30 ctime=1678814322.073959367 lasso-2.8.2/bindings/php5/Makefile.am0000644000175000017500000000243414117162531021703 0ustar00bdauvergnebdauvergne00000000000000CLEANFILES = lasso.php php_lasso.h _lasso.c DISTCLEANFILES = __init__.pyc lang.pyc php_code.pyc wrapper_header.pyc wrapper_top.pyc wrapper_source.pyc SUBDIRS = examples tests AM_CPPFLAGS = \ -I$(top_builddir) \ -I$(top_srcdir) \ $(SASL_CFLAGS) php_extensiondir = ${prefix}@PHP5_UNPREFIXED_EXTENSION_DIR@ php_extension_LTLIBRARIES = lasso.la php_includedir = @PHP5_INCLUDE_DIR@ nodist_php_include_DATA = lasso.php php_configdir=@PHP5_CONFIG_DIR@ php_config_DATA = lasso.ini lasso_la_CFLAGS = -fno-strict-aliasing $(LASSO_CORE_CFLAGS) -I$(top_srcdir) -I$(top_builddir) $(PHP5_INCLUDES) $(AM_CFLAGS) lasso_la_CFLAGS += -Wno-unused-parameter -Wno-sign-compare # problem in zend.h lasso_la_LDFLAGS = -export-dynamic -prefer-pic -module -avoid-version lasso_la_LIBADD = $(top_builddir)/lasso/liblasso.la $(LASSO_LIBS) $(PHP5_LDFLAGS) nodist_lasso_la_SOURCES = _lasso.c BUILT_SOURCES = _lasso.c lasso.php _lasso.c: lang.py wrapper_source.py wrapper_header.py wrapper_source_top.c php_code.py ../overrides.xml $(AM_V_GEN) $(PYTHON) $(top_srcdir)/bindings/bindings.py -l php5 --src-dir=$(top_srcdir)/lasso/ $(EXTRA_ARGS) doc: phpdoc -o HTML:frames:earthli -f lasso.php -t docs .PHONY: doc EXTRA_DIST = lasso.ini lang.py php_code.py wrapper_header.py wrapper_source.py __init__.py wrapper_source_top.c lasso-2.8.2/bindings/php5/PaxHeaders/Makefile.in0000644000000000000000000000013214404125673016446 xustar0030 mtime=1678814139.292928424 30 atime=1678814150.076988637 30 ctime=1678814322.073959367 lasso-2.8.2/bindings/php5/Makefile.in0000644000175000017500000010136314404125673021722 0ustar00bdauvergnebdauvergne00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = bindings/php5 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ac_check_class.m4 \ $(top_srcdir)/m4/ac_check_classpath.m4 \ $(top_srcdir)/m4/ac_check_junit.m4 \ $(top_srcdir)/m4/ac_prog_jar.m4 \ $(top_srcdir)/m4/ac_prog_java.m4 \ $(top_srcdir)/m4/ac_prog_java_works.m4 \ $(top_srcdir)/m4/ac_prog_javac.m4 \ $(top_srcdir)/m4/ac_prog_javac_works.m4 \ $(top_srcdir)/m4/ac_prog_javah.m4 \ $(top_srcdir)/m4/ac_try_compile_java.m4 \ $(top_srcdir)/m4/as-compiler-flag.m4 \ $(top_srcdir)/m4/dps_java_check_class.m4 \ $(top_srcdir)/m4/dps_xtra_classpath.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h \ $(top_builddir)/lasso/lasso_config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(php_extensiondir)" \ "$(DESTDIR)$(php_includedir)" "$(DESTDIR)$(php_configdir)" LTLIBRARIES = $(php_extension_LTLIBRARIES) am__DEPENDENCIES_1 = lasso_la_DEPENDENCIES = $(top_builddir)/lasso/liblasso.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) nodist_lasso_la_OBJECTS = lasso_la-_lasso.lo lasso_la_OBJECTS = $(nodist_lasso_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = lasso_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(lasso_la_CFLAGS) \ $(CFLAGS) $(lasso_la_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -I$(top_builddir)/lasso depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/lasso_la-_lasso.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(nodist_lasso_la_SOURCES) DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(nodist_php_include_DATA) $(php_config_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CHECK_CFLAGS = @CHECK_CFLAGS@ CHECK_LIBS = @CHECK_LIBS@ CLASSPATH_JUNIT = @CLASSPATH_JUNIT@ CLASSPATH_OPT = @CLASSPATH_OPT@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CSHARPCILINTERPRETER = @CSHARPCILINTERPRETER@ CSHARPCOMPILER = @CSHARPCOMPILER@ CSHARPCYGPATH_W = @CSHARPCYGPATH_W@ CSHARPDYNAMICLINKING = @CSHARPDYNAMICLINKING@ CSHARPLIBRARYPREFIX = @CSHARPLIBRARYPREFIX@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEBUGGING = @DEBUGGING@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLL_FILENAME = @DLL_FILENAME@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GACUTIL = @GACUTIL@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HTML_DIR = @HTML_DIR@ INKSCAPE = @INKSCAPE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVAC_FLAGS = @JAVAC_FLAGS@ JAVAH = @JAVAH@ JAVAH_FLAGS = @JAVAH_FLAGS@ JAVA_INCLUDE = @JAVA_INCLUDE@ JAVA_JUNIT = @JAVA_JUNIT@ JAVA_VERSION = @JAVA_VERSION@ JDK_INCLUDE = @JDK_INCLUDE@ JNI_EXTRA_LDFLAGS = @JNI_EXTRA_LDFLAGS@ JUNIT = @JUNIT@ LASSO_APP_DEFINES = @LASSO_APP_DEFINES@ LASSO_CFLAGS = @LASSO_CFLAGS@ LASSO_CORE_CFLAGS = @LASSO_CORE_CFLAGS@ LASSO_CORE_LIBS = @LASSO_CORE_LIBS@ LASSO_DEFINES = @LASSO_DEFINES@ LASSO_DOCDIR = @LASSO_DOCDIR@ LASSO_LIBS = @LASSO_LIBS@ LASSO_PUB_CFLAGS = @LASSO_PUB_CFLAGS@ LASSO_STATIC_BINARIES = @LASSO_STATIC_BINARIES@ LASSO_VERSION_INFO = @LASSO_VERSION_INFO@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PERLINSTALLSITEARCH = @PERLINSTALLSITEARCH@ PERLMAN3DIR = @PERLMAN3DIR@ PERL_CFLAGS = @PERL_CFLAGS@ PERL_VERSION = @PERL_VERSION@ PHP5 = @PHP5@ PHP5_CONFIG = @PHP5_CONFIG@ PHP5_CONFIG_DIR = @PHP5_CONFIG_DIR@ PHP5_EXTENSION_DIR = @PHP5_EXTENSION_DIR@ PHP5_INCLUDES = @PHP5_INCLUDES@ PHP5_INCLUDE_DIR = @PHP5_INCLUDE_DIR@ PHP5_LDFLAGS = @PHP5_LDFLAGS@ PHP5_LIBS = @PHP5_LIBS@ PHP5_PREFIX = @PHP5_PREFIX@ PHP5_UNPREFIXED_EXTENSION_DIR = @PHP5_UNPREFIXED_EXTENSION_DIR@ PHP5_VERSION = @PHP5_VERSION@ PHP7 = @PHP7@ PHP7_CONFIG = @PHP7_CONFIG@ PHP7_CONFIG_DIR = @PHP7_CONFIG_DIR@ PHP7_EXTENSION_DIR = @PHP7_EXTENSION_DIR@ PHP7_INCLUDES = @PHP7_INCLUDES@ PHP7_INCLUDE_DIR = @PHP7_INCLUDE_DIR@ PHP7_LDFLAGS = @PHP7_LDFLAGS@ PHP7_LIBS = @PHP7_LIBS@ PHP7_PREFIX = @PHP7_PREFIX@ PHP7_UNPREFIXED_EXTENSION_DIR = @PHP7_UNPREFIXED_EXTENSION_DIR@ PHP7_VERSION = @PHP7_VERSION@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PYTHON = @PYTHON@ PYTHON_VERSION = @PYTHON_VERSION@ PY_CFLAGS = @PY_CFLAGS@ PY_DYNLOAD = @PY_DYNLOAD@ PY_EXTRA_LIBS = @PY_EXTRA_LIBS@ PY_LIB_A = @PY_LIB_A@ PY_LIB_LOC = @PY_LIB_LOC@ PY_SITE_PACKAGES = @PY_SITE_PACKAGES@ RANLIB = @RANLIB@ RC = @RC@ REST2HTML = @REST2HTML@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_VERSION = @SWIG_VERSION@ TAR = @TAR@ TESTS_JUNIT = @TESTS_JUNIT@ UPCASED_DLL_FILENAME = @UPCASED_DLL_FILENAME@ VERSION = @VERSION@ VERSION_UNDERSCORED = @VERSION_UNDERSCORED@ WINDOWS_VERSION = @WINDOWS_VERSION@ XSLTPROC = @XSLTPROC@ Z_CFLAGS = @Z_CFLAGS@ Z_LIBS = @Z_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ uudecode = @uudecode@ CLEANFILES = lasso.php php_lasso.h _lasso.c DISTCLEANFILES = __init__.pyc lang.pyc php_code.pyc wrapper_header.pyc wrapper_top.pyc wrapper_source.pyc SUBDIRS = examples tests AM_CPPFLAGS = \ -I$(top_builddir) \ -I$(top_srcdir) \ $(SASL_CFLAGS) php_extensiondir = ${prefix}@PHP5_UNPREFIXED_EXTENSION_DIR@ php_extension_LTLIBRARIES = lasso.la php_includedir = @PHP5_INCLUDE_DIR@ nodist_php_include_DATA = lasso.php php_configdir = @PHP5_CONFIG_DIR@ php_config_DATA = lasso.ini lasso_la_CFLAGS = -fno-strict-aliasing $(LASSO_CORE_CFLAGS) \ -I$(top_srcdir) -I$(top_builddir) $(PHP5_INCLUDES) \ $(AM_CFLAGS) -Wno-unused-parameter -Wno-sign-compare # problem \ in zend.h lasso_la_LDFLAGS = -export-dynamic -prefer-pic -module -avoid-version lasso_la_LIBADD = $(top_builddir)/lasso/liblasso.la $(LASSO_LIBS) $(PHP5_LDFLAGS) nodist_lasso_la_SOURCES = _lasso.c BUILT_SOURCES = _lasso.c EXTRA_DIST = lasso.ini lang.py php_code.py wrapper_header.py wrapper_source.py __init__.py wrapper_source_top.c all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign bindings/php5/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign bindings/php5/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-php_extensionLTLIBRARIES: $(php_extension_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(php_extension_LTLIBRARIES)'; test -n "$(php_extensiondir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(php_extensiondir)'"; \ $(MKDIR_P) "$(DESTDIR)$(php_extensiondir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(php_extensiondir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(php_extensiondir)"; \ } uninstall-php_extensionLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(php_extension_LTLIBRARIES)'; test -n "$(php_extensiondir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(php_extensiondir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(php_extensiondir)/$$f"; \ done clean-php_extensionLTLIBRARIES: -test -z "$(php_extension_LTLIBRARIES)" || rm -f $(php_extension_LTLIBRARIES) @list='$(php_extension_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } lasso.la: $(lasso_la_OBJECTS) $(lasso_la_DEPENDENCIES) $(EXTRA_lasso_la_DEPENDENCIES) $(AM_V_CCLD)$(lasso_la_LINK) -rpath $(php_extensiondir) $(lasso_la_OBJECTS) $(lasso_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lasso_la-_lasso.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< lasso_la-_lasso.lo: _lasso.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lasso_la_CFLAGS) $(CFLAGS) -MT lasso_la-_lasso.lo -MD -MP -MF $(DEPDIR)/lasso_la-_lasso.Tpo -c -o lasso_la-_lasso.lo `test -f '_lasso.c' || echo '$(srcdir)/'`_lasso.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lasso_la-_lasso.Tpo $(DEPDIR)/lasso_la-_lasso.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='_lasso.c' object='lasso_la-_lasso.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lasso_la_CFLAGS) $(CFLAGS) -c -o lasso_la-_lasso.lo `test -f '_lasso.c' || echo '$(srcdir)/'`_lasso.c mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-nodist_php_includeDATA: $(nodist_php_include_DATA) @$(NORMAL_INSTALL) @list='$(nodist_php_include_DATA)'; test -n "$(php_includedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(php_includedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(php_includedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(php_includedir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(php_includedir)" || exit $$?; \ done uninstall-nodist_php_includeDATA: @$(NORMAL_UNINSTALL) @list='$(nodist_php_include_DATA)'; test -n "$(php_includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(php_includedir)'; $(am__uninstall_files_from_dir) install-php_configDATA: $(php_config_DATA) @$(NORMAL_INSTALL) @list='$(php_config_DATA)'; test -n "$(php_configdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(php_configdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(php_configdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(php_configdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(php_configdir)" || exit $$?; \ done uninstall-php_configDATA: @$(NORMAL_UNINSTALL) @list='$(php_config_DATA)'; test -n "$(php_configdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(php_configdir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-recursive all-am: Makefile $(LTLIBRARIES) $(DATA) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(php_extensiondir)" "$(DESTDIR)$(php_includedir)" "$(DESTDIR)$(php_configdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-recursive install-exec: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-recursive clean-am: clean-generic clean-libtool clean-php_extensionLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -f ./$(DEPDIR)/lasso_la-_lasso.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-nodist_php_includeDATA install-php_configDATA \ install-php_extensionLTLIBRARIES install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/lasso_la-_lasso.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-nodist_php_includeDATA \ uninstall-php_configDATA uninstall-php_extensionLTLIBRARIES .MAKE: $(am__recursive_targets) all check install install-am \ install-exec install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--depfiles check check-am clean clean-generic clean-libtool \ clean-php_extensionLTLIBRARIES cscopelist-am ctags ctags-am \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-nodist_php_includeDATA \ install-pdf install-pdf-am install-php_configDATA \ install-php_extensionLTLIBRARIES install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-nodist_php_includeDATA \ uninstall-php_configDATA uninstall-php_extensionLTLIBRARIES .PRECIOUS: Makefile lasso.php _lasso.c: lang.py wrapper_source.py wrapper_header.py wrapper_source_top.c php_code.py ../overrides.xml $(AM_V_GEN) $(PYTHON) $(top_srcdir)/bindings/bindings.py -l php5 --src-dir=$(top_srcdir)/lasso/ $(EXTRA_ARGS) doc: phpdoc -o HTML:frames:earthli -f lasso.php -t docs .PHONY: doc # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lasso-2.8.2/bindings/php5/PaxHeaders/wrapper_source.py0000644000000000000000000000013214050545511020005 xustar0030 mtime=1621281609.035310519 30 atime=1678814321.921958502 30 ctime=1678814322.081959413 lasso-2.8.2/bindings/php5/wrapper_source.py0000644000175000017500000005507314050545511023267 0ustar00bdauvergnebdauvergne00000000000000# Lasso - A free implementation of the Liberty Alliance specifications. # # Copyright (C) 2004-2007 Entr'ouvert # http://lasso.entrouvert.org # # Authors: See AUTHORS file in top-level directory. # # 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 Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . import sys import os import six from utils import * class WrapperSource: def __init__(self, binding_data, fd): self.binding_data = binding_data self.fd = fd self.functions_list = [] self.src_dir = os.path.dirname(__file__) def is_object(self, t): return t not in ['char*', 'const char*', 'gchar*', 'const gchar*', 'GList*', 'GHashTable*', 'GType', 'xmlNode*', 'int', 'gint', 'gboolean', 'const gboolean'] + self.binding_data.enums def generate(self): self.generate_header() self.generate_constants() self.generate_middle() for m in self.binding_data.functions: self.generate_function(m) for c in self.binding_data.structs: self.generate_members(c) for m in c.methods: self.generate_function(m) self.generate_functions_list() self.generate_footer() def generate_header(self): self.functions_list.append('lasso_get_object_typename') self.functions_list.append('lasso_init') self.functions_list.append('lasso_shutdown') six.print_('''\ /* this file has been generated automatically; do not edit */ ''', file=self.fd) six.print_(open(os.path.join(self.src_dir,'wrapper_source_top.c')).read(), file=self.fd) for h in self.binding_data.headers: six.print_('#include <%s>' % h, file=self.fd) six.print_('', file=self.fd) six.print_('''\ PHP_MINIT_FUNCTION(lasso) { le_lasso_server = zend_register_list_destructors_ex(php_gobject_generic_destructor, NULL, PHP_LASSO_SERVER_RES_NAME, module_number); lasso_init(); ''', file=self.fd) def generate_constants(self): six.print_(' /* Constants (both enums and defines) */', file=self.fd) for c in self.binding_data.constants: if c[0] == 'i': six.print_(' REGISTER_LONG_CONSTANT("%s", %s, CONST_CS|CONST_PERSISTENT);' % (c[1], c[1]), file=self.fd) elif c[0] == 's': six.print_(' REGISTER_STRING_CONSTANT("%s", (char*) %s, CONST_CS|CONST_PERSISTENT);' % (c[1], c[1]), file=self.fd) elif c[0] == 'b': six.print_('''\ #ifdef %s REGISTER_LONG_CONSTANT("%s", 1, CONST_CS|CONST_PERSISTENT); #else REGISTER_LONG_CONSTANT("%s", 0, CONST_CS|CONST_PERSISTENT); #endif''' % (c[1], c[1], c[1]), file=self.fd) else: six.print_('E: unknown constant type: %r' % c[0], file=sys.stderr) six.print_('', file=self.fd) def generate_middle(self): six.print_('''\ return SUCCESS; } PHP_MSHUTDOWN_FUNCTION(lasso) { lasso_shutdown(); return SUCCESS; } ''', file=self.fd) def set_zval(self, zval_name, c_variable, type, free = False): '''Emit code to set a zval* of name zval_name, from the value of the C variable called c_variable type, type. ''' # first we free the previous value p = (zval_name, c_variable) q = { 'zval_name' : zval_name, 'c_variable' : c_variable } six.print_(' zval_dtor(%s);' % zval_name, file=self.fd) if is_pointer(type): six.print_(' if (! %s) {' % c_variable, file=self.fd) six.print_(' ZVAL_NULL(%s);' % zval_name, file=self.fd) six.print_(' } else {', file=self.fd) if is_int(type, self.binding_data): six.print_(' ZVAL_LONG(%s, %s);' % p, file=self.fd) elif is_boolean(type): six.print_(' ZVAL_BOOL(%s, %s);' % p, file=self.fd) elif is_cstring(type): six.print_(' ZVAL_STRING(%s, (char*)%s, 1);' % p, file=self.fd) if free and not is_const(type): six.print_('g_free(%s)' % c_variable, file=self.fd) elif arg_type(type) == 'xmlNode*': six.print_('''\ { char* xmlString = get_string_from_xml_node(%(c_variable)s); if (xmlString) { ZVAL_STRING(%(zval_name)s, xmlString, 0); } else { ZVAL_NULL(%(zval_name)s); } } ''' % q, file=self.fd) elif is_glist(type): elem_type = make_arg(element_type(type)) if not arg_type(elem_type): raise Exception('unknown element-type: ' + repr(type)) if is_cstring(elem_type): function = 'set_array_from_list_of_strings' free_function = 'free_glist(&%(c_variable)s, (GFunc)free);' elif arg_type(elem_type).startswith('xmlNode'): function = 'set_array_from_list_of_xmlnodes' free_function = 'free_glist(&%(c_variable)s, (GFunc)xmlFree);' elif is_object(elem_type): function = 'set_array_from_list_of_objects' free_function = 'g_list_free(%(c_variable)s);' else: raise Exception('unknown element-type: ' + repr(type)) six.print_(' %s((GList*)%s, &%s);' % (function, c_variable, zval_name), file=self.fd) if free: six.print_(' ', free_function % q, file=self.fd) elif is_object(type): six.print_('''\ if (G_IS_OBJECT(%(c_variable)s)) { PhpGObjectPtr *obj = PhpGObjectPtr_New(G_OBJECT(%(c_variable)s)); ZEND_REGISTER_RESOURCE(%(zval_name)s, obj, le_lasso_server); } else { ZVAL_NULL(%(zval_name)s); }''' % q, file=self.fd) if free: six.print_('''\ if (%(c_variable)s) { g_object_unref(%(c_variable)s); // If constructor ref is off by one' }''' % q, file=self.fd) else: raise Exception('unknown type: ' + repr(type) + unconstify(arg_type(type))) if is_pointer(type): six.print_(' }', file=self.fd) def return_value(self, arg, free = False): if arg is None: return if is_boolean(arg): six.print_(' RETVAL_BOOL(return_c_value);', file=self.fd) elif is_int(arg, self.binding_data): six.print_(' RETVAL_LONG(return_c_value);', file=self.fd) elif is_cstring(arg): six.print_('''\ if (return_c_value) { RETVAL_STRING((char*)return_c_value, 1); } else { RETVAL_NULL(); }''', file=self.fd) if free: six.print_(' free(return_c_value);', file=self.fd) elif is_xml_node(arg): six.print_('''\ { char* xmlString = get_string_from_xml_node(return_c_value); if (xmlString) { RETVAL_STRING(xmlString, 0); } else { RETVAL_NULL(); } } ''', file=self.fd) if free: six.print_(' lasso_release_xml_node(return_c_value);', file=self.fd) elif is_glist(arg): el_type = element_type(arg) if is_cstring(el_type): six.print_('''\ set_array_from_list_of_strings((GList*)return_c_value, &return_value); ''', file=self.fd) if free: six.print_(' lasso_release_list_of_strings(return_c_value);', file=self.fd) elif is_xml_node(el_type): six.print_('''\ set_array_from_list_of_xmlnodes((GList*)return_c_value, &return_value); ''', file=self.fd) if free or is_transfer_full(arg): six.print_(' lasso_release_list_of_xml_node(return_c_value);', file=self.fd) elif is_object(el_type): six.print_('''\ set_array_from_list_of_objects((GList*)return_c_value, &return_value); ''', file=self.fd) if free: six.print_(' lasso_release_list_of_gobjects(return_c_value);', file=self.fd) else: raise Exception('cannot return value for %s' % (arg,)) elif is_hashtable(arg): el_type = element_type(arg) if is_object(el_type): six.print_('''\ set_array_from_hashtable_of_objects(return_c_value, &return_value); ''', file=self.fd) else: if not is_cstring(arg): six.print_('W: %s has no explicit string annotation' % (arg,), file=sys.stderr) six.print_('''\ set_array_from_hashtable_of_strings(return_c_value, &return_value); ''', file=self.fd) elif is_object(arg): six.print_('''\ if (return_c_value) { PhpGObjectPtr *self; self = PhpGObjectPtr_New(G_OBJECT(return_c_value)); ZEND_REGISTER_RESOURCE(return_value, self, le_lasso_server); } else { RETVAL_NULL(); }''', file=self.fd) if free: six.print_(' lasso_release_gobject(return_c_value);', file=self.fd) else: raise Exception('cannot return value for %s' % (arg,)) def generate_function(self, m): if m.name in ('lasso_init','lasso_shutdown'): return if m.rename: name = m.rename else: name = m.name self.functions_list.append(name) six.print_('''PHP_FUNCTION(%s) {''' % name, file=self.fd) parse_tuple_format = [] parse_tuple_args = [] for arg in m.args: if is_out(arg): six.print_(' zval *php_out_%s = NULL;' % arg_name(arg), file=self.fd) six.print_(' %s %s;' % (var_type(arg), arg_name(arg)), file=self.fd) parse_tuple_format.append('z!') parse_tuple_args.append('&php_out_%s' % arg_name(arg)) elif is_cstring(arg): parse_tuple_format.append('s!') parse_tuple_args.append('&%s_str, &%s_len' % (arg_name(arg), arg_name(arg))) six.print_(' %s %s = NULL;' % ('char*', arg_name(arg)), file=self.fd) six.print_(' %s %s_str = NULL;' % ('char*', arg_name(arg)), file=self.fd) six.print_(' %s %s_len = 0;' % ('int', arg_name(arg)), file=self.fd) elif is_int(arg, self.binding_data) or is_boolean(arg): parse_tuple_format.append('l') parse_tuple_args.append('&%s' % arg_name(arg)) six.print_(' %s %s;' % ('long', arg_name(arg)), file=self.fd) elif is_time_t_pointer(arg): parse_tuple_format.append('l') parse_tuple_args.append('&%s' % (arg_name(arg),)) six.print_(' time_t %s = 0;' % (arg_name(arg),), file=self.fd) elif is_xml_node(arg): parse_tuple_format.append('s!') parse_tuple_args.append('&%s_str, &%s_len' % (arg_name(arg), arg_name(arg))) six.print_(' %s %s = NULL;' % ('xmlNode*', arg_name(arg)), file=self.fd) six.print_(' %s %s_str = NULL;' % ('char*', arg_name(arg)), file=self.fd) six.print_(' %s %s_len = 0;' % ('int', arg_name(arg)), file=self.fd) elif is_glist(arg): parse_tuple_format.append('a!') parse_tuple_args.append('&zval_%s' % arg_name(arg)) six.print_(' %s zval_%s = NULL;' % ('zval*', arg_name(arg)), file=self.fd) six.print_(' %s %s = NULL;' % ('GList*', arg_name(arg)), file=self.fd) elif is_object(arg): parse_tuple_format.append('r') parse_tuple_args.append('&zval_%s' % arg_name(arg)) six.print_(' %s %s = NULL;' % (arg_type(arg), arg_name(arg)), file=self.fd) six.print_(' %s zval_%s = NULL;' % ('zval*', arg_name(arg)), file=self.fd) six.print_(' %s cvt_%s = NULL;' % ('PhpGObjectPtr*', arg_name(arg)), file=self.fd) else: raise Exception('Unsupported type %s %s' % (arg, m)) if m.return_type: six.print_(' %s return_c_value;' % m.return_type, file=self.fd) if m.return_type is not None and self.is_object(m.return_arg): six.print_(' G_GNUC_UNUSED PhpGObjectPtr *self;', file=self.fd) six.print_('', file=self.fd) parse_tuple_args = ', '.join(parse_tuple_args) if parse_tuple_args: parse_tuple_args = ', ' + parse_tuple_args six.print_('''\ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "%s"%s) == FAILURE) { RETURN_FALSE; } ''' % (''.join(parse_tuple_format), parse_tuple_args), file=self.fd) for f, arg in zip(parse_tuple_format, m.args): if is_out(arg): continue elif is_xml_node(arg): six.print_('''\ %(name)s = get_xml_node_from_string(%(name)s_str);''' % {'name': arg[1]}, file=self.fd) elif f.startswith('s'): six.print_('''\ %(name)s = %(name)s_str;''' % {'name': arg[1]}, file=self.fd) elif f.startswith('r'): six.print_(' ZEND_FETCH_RESOURCE(cvt_%s, PhpGObjectPtr *, &zval_%s, -1, PHP_LASSO_SERVER_RES_NAME, le_lasso_server);' % (arg[1], arg[1]), file=self.fd) six.print_(' %s = (%s)cvt_%s->obj;' % (arg[1], arg[0], arg[1]), file=self.fd) elif f.startswith('a'): el_type = element_type(arg) if is_cstring(el_type): six.print_(' %(name)s = get_list_from_array_of_strings(zval_%(name)s);' % {'name': arg[1]}, file=self.fd) elif is_object(el_type): six.print_(' %(name)s = get_list_from_array_of_objects(zval_%(name)s);' % {'name': arg[1]}, file=self.fd) else: six.print_('E: In %(function)s arg %(name)s is of type GList<%(elem)s>' % { 'function': m.name, 'name': arg[1], 'elem': el_type }, file=sys.stderr) elif f == 'l': pass else: raise Exception('%s format inconnu' % f) if m.return_type is not None: six.print_(' return_c_value = ', file=self.fd) if 'new' in m.name: six.print_('(%s)' % m.return_type, file=self.fd) else: six.print_(' ', file=self.fd) def special(x): if is_time_t_pointer(x): return '%(name)s ? &%(name)s : NULL' % { 'name': arg_name(x) } else: return ref_name(x) six.print_('%s(%s);' % (m.name, ', '.join([special(x) for x in m.args])), file=self.fd) # Free the converted arguments for f, arg in zip(parse_tuple_format, m.args): argtype, argname, argoptions = arg if is_out(arg): # export the returned variable free = is_transfer_full(unref_type(arg)) self.set_zval('php_out_%s' % argname, argname, unref_type(arg), free = free) pass elif argtype == 'xmlNode*': six.print_(' xmlFree(%s);' % argname, file=self.fd) elif f.startswith('a'): el_type = element_type(arg) if is_cstring(el_type): six.print_(' if (%(name)s) {' % { 'name': arg[1] }, file=self.fd) six.print_(' free_glist(&%(name)s,(GFunc)free);' % { 'name': arg[1] }, file=self.fd) six.print_(' }', file=self.fd) try: self.return_value(m.return_arg, is_transfer_full(m.return_arg, default=True)) except: raise Exception('Cannot return value for function %s' % m) six.print_('}', file=self.fd) six.print_('', file=self.fd) def generate_members(self, c): for m in c.members: self.generate_getter(c, m) self.generate_setter(c, m) def generate_getter(self, c, m): klassname = c.name name = arg_name(m) type = arg_type(m) function_name = '%s_%s_get' % (klassname, format_as_camelcase(name)) six.print_('''PHP_FUNCTION(%s) {''' % function_name, file=self.fd) self.functions_list.append(function_name) six.print_(' %s return_c_value;' % type, file=self.fd) six.print_(' %s* this;' % klassname, file=self.fd) six.print_(' zval* zval_this;', file=self.fd) six.print_(' PhpGObjectPtr *cvt_this;', file=self.fd) six.print_('', file=self.fd) six.print_('''\ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &zval_this) == FAILURE) { RETURN_FALSE; } ZEND_FETCH_RESOURCE(cvt_this, PhpGObjectPtr *, &zval_this, -1, PHP_LASSO_SERVER_RES_NAME, le_lasso_server); this = (%s*)cvt_this->obj; ''' % (klassname), file=self.fd) six.print_(' return_c_value = (%s)this->%s;' % (type, name), file=self.fd) self.return_value(m) six.print_('}', file=self.fd) six.print_('', file=self.fd) def generate_setter(self, c, m): klassname = c.name name = arg_name(m) type = arg_type(m) function_name = '%s_%s_set' % (klassname, format_as_camelcase(name)) six.print_('''PHP_FUNCTION(%s) {''' % function_name, file=self.fd) self.functions_list.append(function_name) six.print_(' %s* this;' % klassname, file=self.fd) six.print_(' zval* zval_this;', file=self.fd) six.print_(' PhpGObjectPtr *cvt_this;', file=self.fd) # FIXME: This bloc should be factorised parse_tuple_format = '' parse_tuple_args = [] if is_cstring(m) or is_xml_node(m): # arg_type = arg_type.replace('const ', '') parse_tuple_format += 's' parse_tuple_args.append('&%s_str, &%s_len' % (name, name)) six.print_(' %s %s_str = NULL;' % ('char*', name), file=self.fd) six.print_(' %s %s_len = 0;' % ('int', name), file=self.fd) elif is_int(m, self.binding_data) or is_boolean(m): parse_tuple_format += 'l' parse_tuple_args.append('&%s' % name) six.print_(' %s %s;' % ('long', name), file=self.fd) # Must also handle lists of Objects elif is_glist(m) or is_hashtable(m): parse_tuple_format += 'a' parse_tuple_args.append('&zval_%s' % name) six.print_(' %s zval_%s;' % ('zval*', name), file=self.fd) elif is_object(m): parse_tuple_format += 'r' parse_tuple_args.append('&zval_%s' % name) six.print_(' %s zval_%s = NULL;' % ('zval*', name), file=self.fd) six.print_(' %s cvt_%s = NULL;' % ('PhpGObjectPtr*', name), file=self.fd) else: raise Exception('Cannot make a setter for %s.%s' % (c,m)) if parse_tuple_args: parse_tuple_arg = parse_tuple_args[0] else: six.print_('}', file=self.fd) six.print_('', file=self.fd) return six.print_('', file=self.fd) six.print_('''\ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r%s", &zval_this, %s) == FAILURE) { return; } ''' % (parse_tuple_format, parse_tuple_arg), file=self.fd) # Get 'this' object six.print_('''\ ZEND_FETCH_RESOURCE(cvt_this, PhpGObjectPtr *, &zval_this, -1, PHP_LASSO_SERVER_RES_NAME, le_lasso_server); this = (%s*)cvt_this->obj; ''' % klassname, file=self.fd) # Set new value d = { 'name': name, 'type': type } if is_int(m, self.binding_data) or is_boolean(m): six.print_(' this->%s = %s;' % (name, name), file=self.fd) elif is_cstring(m): six.print_(' lasso_assign_string(this->%(name)s, %(name)s_str);' % d, file=self.fd) elif is_xml_node(m): six.print_(' lasso_assign_new_xml_node(this->%(name)s, get_xml_node_from_string(%(name)s_str));' % d, file=self.fd) elif is_glist(m): el_type = element_type(m) if is_cstring(el_type): six.print_(' lasso_assign_new_list_of_strings(this->%(name)s, get_list_from_array_of_strings(zval_%(name)s));' % d, file=self.fd) elif is_xml_node(el_type): six.print_(' lasso_assign_new_list_of_xml_node(this->%(name)s, get_list_from_array_of_xmlnodes(zval_%(name)s))' % d, file=self.fd) elif is_object(el_type): six.print_(' lasso_assign_new_list_of_gobjects(this->%(name)s, get_list_from_array_of_objects(zval_%(name)s));' % d, file=self.fd) else: raise Exception('Cannot create C setter for %s.%s' % (c,m)) elif is_hashtable(m): el_type = element_type(m) six.print_('''\ { GHashTable *oldhash = this->%(name)s;''' % d, file=self.fd) if is_object(el_type): six.print_(' this->%(name)s = get_hashtable_from_array_of_objects(zval_%(name)s);' % d, file=self.fd) else: six.print_(' this->%(name)s = get_hashtable_from_array_of_strings(zval_%(name)s);' % d, file=self.fd) six.print_(' g_hash_table_destroy(oldhash);', file=self.fd) six.print_(' }', file=self.fd) elif is_object(m): six.print_(' ZEND_FETCH_RESOURCE(cvt_%(name)s, PhpGObjectPtr*, &zval_%(name)s, -1, PHP_LASSO_SERVER_RES_NAME, le_lasso_server);' % d, file=self.fd) six.print_(' lasso_assign_gobject(this->%(name)s, cvt_%(name)s->obj);' % d, file=self.fd) six.print_('}', file=self.fd) six.print_('', file=self.fd) def generate_functions_list(self): six.print_('''\ static zend_function_entry lasso_functions[] = {''', file=self.fd) for m in self.functions_list: six.print_(' PHP_FE(%s, NULL)' % m, file=self.fd) six.print_('''\ {NULL, NULL, NULL, 0, 0} }; ''', file=self.fd) def generate_footer(self): six.print_('''\ zend_module_entry lasso_module_entry = { #if ZEND_MODULE_API_NO >= 20010901 STANDARD_MODULE_HEADER, #endif PHP_LASSO_EXTNAME, lasso_functions, PHP_MINIT(lasso), PHP_MSHUTDOWN(lasso), NULL, NULL, NULL, #if ZEND_MODULE_API_NO >= 20010901 PHP_LASSO_VERSION, #endif STANDARD_MODULE_PROPERTIES }; ''', file=self.fd) lasso-2.8.2/bindings/php5/PaxHeaders/lang.py0000644000000000000000000000013113766621500015673 xustar0030 mtime=1608196928.726895006 29 atime=1678814321.91795848 30 ctime=1678814322.077959391 lasso-2.8.2/bindings/php5/lang.py0000644000175000017500000000272213766621500021147 0ustar00bdauvergnebdauvergne00000000000000# Lasso - A free implementation of the Liberty Alliance specifications. # # Copyright (C) 2004-2007 Entr'ouvert # http://lasso.entrouvert.org # # Authors: See AUTHORS file in top-level directory. # # 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 Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . import os from php5.wrapper_source import WrapperSource from php5.wrapper_header import WrapperHeader from php5.php_code import PhpCode class Binding: def __init__(self, binding_data): self.binding_data = binding_data def generate(self): fd = open('_lasso.c', 'w') wrapper_source = WrapperSource(self.binding_data, fd) wrapper_source.generate() fd.close() fd = open('php_lasso.h', 'w') WrapperHeader(self.binding_data, fd, wrapper_source.functions_list).generate() fd.close() fd = open('lasso.php', 'w') PhpCode(self.binding_data, fd).generate() fd.close() lasso-2.8.2/bindings/php5/PaxHeaders/wrapper_header.py0000644000000000000000000000013213766621500017743 xustar0030 mtime=1608196928.726895006 30 atime=1678814321.925958525 30 ctime=1678814322.081959413 lasso-2.8.2/bindings/php5/wrapper_header.py0000644000175000017500000000362513766621500023221 0ustar00bdauvergnebdauvergne00000000000000# Lasso - A free implementation of the Liberty Alliance specifications. # # Copyright (C) 2004-2007 Entr'ouvert # http://lasso.entrouvert.org # # Authors: See AUTHORS file in top-level directory. # # 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 Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . import six class WrapperHeader: def __init__(self, binding_data, fd, functions_list): self.binding_data = binding_data self.fd = fd self.functions_list = functions_list def generate(self): self.generate_header() self.generate_functions_list() self.generate_footer() def generate_header(self): # FIXME: Get the current version and name six.print_('''\ /* this file has been generated automatically; do not edit */ #include "../../config.h" #ifndef PHP_LASSO_H #define PHP_LASSO_H 1 #define PHP_LASSO_EXTNAME "lasso" #define PHP_LASSO_VERSION VERSION #define PHP_LASSO_SERVER_RES_NAME "Lasso Server" PHP_MINIT_FUNCTION(lasso); PHP_MSHUTDOWN_FUNCTION(lasso); ''', file=self.fd) def generate_functions_list(self): for m in self.functions_list: six.print_('PHP_FUNCTION(%s);' % m, file=self.fd) six.print_('', file=self.fd) def generate_footer(self): six.print_('''\ extern zend_module_entry lasso_module_entry; #define phpext_lasso_ptr &lasso_module_entry #endif ''', file=self.fd) lasso-2.8.2/bindings/php5/PaxHeaders/wrapper_source_top.c0000644000000000000000000000013214114336625020466 xustar0030 mtime=1630649749.794436646 30 atime=1678814321.929958547 30 ctime=1678814322.085959436 lasso-2.8.2/bindings/php5/wrapper_source_top.c0000644000175000017500000002333014114336625023737 0ustar00bdauvergnebdauvergne00000000000000#include #undef PACKAGE_BUGREPORT #undef PACKAGE_NAME #undef PACKAGE_STRING #undef PACKAGE_TARNAME #undef PACKAGE_VERSION #include #include "php_lasso.h" #include "../ghashtable.h" #define LASSO_LOG_STATIC #if defined(__GNUC__) # define lasso_log(level, filename, line, function, format, args...) \ g_log("Lasso", level, "%s:%i:%s" format, filename, line, function, ##args) #elif defined(HAVE_VARIADIC_MACROS) # define lasso_log(level, format, line, function, ...) \ g_log("Lasso", leve, "%s:%i:%s" format, filename, line, function, __VA_ARGS__) #else static inline void lasso_log(GLogLevelFlags level, const char *filename, int line, const char *function, const char *format, ...) { va_list ap; char s[1024]; va_start(ap, format); g_vsnprintf(s, 1024, format, ap); va_end(ap); g_log("Lasso", level, "%s:%i:%s %s", filename, line, function, s); } #define lasso_log lasso_log #endif #include "../../lasso/utils.h" #include "../utils.c" /* utility functions */ static void free_glist(GList **list, GFunc free_function); /* Define the Lasso PHP module */ int le_lasso_server; ZEND_GET_MODULE(lasso) /* Wrapper around GObject to get the dynamic typename */ typedef struct { GObject *obj; char *typename; } PhpGObjectPtr; /** FIXME: implement caching of objects inside GObjects using a GQuark */ static PhpGObjectPtr* PhpGObjectPtr_New(GObject *obj) { PhpGObjectPtr *self; if (obj == NULL) { return NULL; } self = (PhpGObjectPtr *)malloc(sizeof(PhpGObjectPtr)); self->obj = g_object_ref(obj); self->typename = strdup(G_OBJECT_TYPE_NAME(obj)); //printf("Allocating container %p for object %p of type %s with refcnt %i\n", self, obj, self->typename, obj->ref_count); return self; } PHP_FUNCTION(lasso_init) { RETURN_NULL(); } PHP_FUNCTION(lasso_shutdown) { RETURN_NULL(); } PHP_FUNCTION(lasso_get_object_typename) { PhpGObjectPtr *self; zval *zval_self; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &zval_self) == FAILURE) { RETURN_FALSE; } ZEND_FETCH_RESOURCE(self, PhpGObjectPtr *, &zval_self, -1, PHP_LASSO_SERVER_RES_NAME, le_lasso_server); RETURN_STRING(self->typename, 1); } /* Generic destructor for PHP GObject */ static void php_gobject_generic_destructor(zend_rsrc_list_entry *rsrc TSRMLS_DC) { PhpGObjectPtr* gobject = (PhpGObjectPtr*)rsrc->ptr; if (gobject) { if (gobject->obj) { //printf("Deallocating container %p\n", gobject); //printf("Deallocating %p that has %u refcounts\n", gobject->obj, gobject->obj->ref_count); g_object_unref(G_OBJECT(gobject->obj)); //printf("now %u refcounts\n", gobject->obj->ref_count); } if (gobject->typename) { free(gobject->typename); } free(gobject); } } /* List handling */ static void free_glist(GList **list, GFunc free_function) { lasso_return_if_fail(list); if (*list) { if (free_function) { g_list_foreach(*list, free_function, NULL); } g_list_free(*list); } *list = NULL; } /* Conversion functions */ static xmlBuffer* xmlnode_to_xmlbuffer(xmlNode *node) { xmlOutputBufferPtr output_buffer; xmlBuffer *buffer; if (! node) return NULL; buffer = xmlBufferCreate(); output_buffer = xmlOutputBufferCreateBuffer(buffer, NULL); xmlNodeDumpOutput(output_buffer, NULL, node, 0, 0, NULL); xmlOutputBufferClose(output_buffer); xmlBufferAdd(buffer, BAD_CAST "", 1); return buffer; } static char* get_string_from_xml_node(xmlNode *xmlnode) { xmlBuffer *buffer; char *result; if (xmlnode == NULL) { return NULL; } buffer = xmlnode_to_xmlbuffer(xmlnode); if (buffer == NULL) { result = NULL; } else { result = estrdup((char*)xmlBufferContent(buffer)); xmlBufferFree(buffer); } return result; } static xmlNode* get_xml_node_from_string(char *string) { return lasso_string_fragment_to_xmlnode(string, 0); } static GList* get_list_from_array_of_strings(zval* array) { HashTable* hashtable; HashPosition pointer; zval** data; zval temp; GList* result = NULL; hashtable = Z_ARRVAL_P(array); for (zend_hash_internal_pointer_reset_ex(hashtable, &pointer); zend_hash_get_current_data_ex(hashtable, (void**) &data, &pointer) == SUCCESS; zend_hash_move_forward_ex(hashtable, &pointer)) { temp = **data; zval_copy_ctor(&temp); convert_to_string(&temp); result = g_list_append(result, g_strndup(Z_STRVAL(temp), Z_STRLEN(temp))); zval_dtor(&temp); } return result; } static void set_array_from_list_of_strings(GList* list, zval **array) { GList* item; array_init(*array); for (item = g_list_first(list); item != NULL; item = g_list_next(item)) { if (item->data != NULL) { add_next_index_string(*array, item->data, 1); } else { add_next_index_null(*array); } } } static GList* get_list_from_array_of_xmlnodes(zval* array) { HashTable* hashtable; HashPosition pointer; zval** data; zval temp; GList* result = NULL; hashtable = Z_ARRVAL_P(array); for (zend_hash_internal_pointer_reset_ex(hashtable, &pointer); zend_hash_get_current_data_ex(hashtable, (void**) &data, &pointer) == SUCCESS; zend_hash_move_forward_ex(hashtable, &pointer)) { xmlNode *value; temp = **data; zval_copy_ctor(&temp); convert_to_string(&temp); value = get_xml_node_from_string(Z_STRVAL(temp)); if (value) { lasso_list_add_new_xml_node(result, value); } zval_dtor(&temp); } return result; } static void set_array_from_list_of_xmlnodes(GList* list, zval **array) { GList* item; array_init(*array); for (item = g_list_first(list); item != NULL; item = g_list_next(item)) { if (item->data != NULL) { add_next_index_string(*array, get_string_from_xml_node(item->data), 0); } else { add_next_index_null(*array); } } } static GList* get_list_from_array_of_objects(zval *array) { HashTable *hashtable; HashPosition pointer; zval **data; PhpGObjectPtr *cvt_temp; GList *result = NULL; hashtable = Z_ARRVAL_P(array); for (zend_hash_internal_pointer_reset_ex(hashtable, &pointer); zend_hash_get_current_data_ex(hashtable, (void**) &data, &pointer) == SUCCESS; zend_hash_move_forward_ex(hashtable, &pointer)) { cvt_temp = (PhpGObjectPtr*) zend_fetch_resource(data TSRMLS_CC, -1, PHP_LASSO_SERVER_RES_NAME, NULL, 1, le_lasso_server); if (cvt_temp != NULL) { g_object_ref(cvt_temp->obj); result = g_list_append(result, cvt_temp->obj); } else { result = g_list_append(result, NULL); } } return result; } static void set_array_from_list_of_objects(GList *list, zval **array) { GList *item = NULL; zval *zval_item = NULL; array_init(*array); for (item = g_list_first(list); item != NULL; item = g_list_next(item)) { if (item->data != NULL) { MAKE_STD_ZVAL(zval_item); ZEND_REGISTER_RESOURCE(zval_item, PhpGObjectPtr_New(item->data), le_lasso_server); add_next_index_zval(*array, zval_item); } else { add_next_index_null(*array); } } } /* FIXME: This function doesn't work yet */ static GHashTable* get_hashtable_from_array_of_objects(zval *array) { HashTable *hashtable = NULL; HashPosition pointer; char *key = NULL; unsigned int key_len; unsigned long index; zval **data = NULL; PhpGObjectPtr *cvt_temp = NULL; GHashTable *result = NULL; result = g_hash_table_new(g_str_hash, g_str_equal); hashtable = Z_ARRVAL_P(array); for (zend_hash_internal_pointer_reset_ex(hashtable, &pointer); zend_hash_get_current_data_ex(hashtable, (void**) &data, &pointer) == SUCCESS; zend_hash_move_forward_ex(hashtable, &pointer)) { cvt_temp = (PhpGObjectPtr*) zend_fetch_resource(data TSRMLS_CC, -1, PHP_LASSO_SERVER_RES_NAME, NULL, 1, le_lasso_server); if (zend_hash_get_current_key_ex(hashtable, &key, &key_len, &index, 0, &pointer) == HASH_KEY_IS_STRING) { g_hash_table_insert(result, key, lasso_ref(cvt_temp->obj)); } else { /* FIXME: throw an exception */ } } return result; } G_GNUC_UNUSED static GHashTable* get_hashtable_from_array_of_strings(zval *array) { HashTable *hashtable = NULL; HashPosition pointer; char *key = NULL; unsigned int key_len; unsigned long index; zval **data = NULL; GHashTable *result = NULL; result = g_hash_table_new(g_str_hash, g_str_equal); hashtable = Z_ARRVAL_P(array); for (zend_hash_internal_pointer_reset_ex(hashtable, &pointer); zend_hash_get_current_data_ex(hashtable, (void**) &data, &pointer) == SUCCESS; zend_hash_move_forward_ex(hashtable, &pointer)) { if (Z_TYPE_PP(data) == IS_STRING) { if (zend_hash_get_current_key_ex(hashtable, &key, &key_len, &index, 0, &pointer) == HASH_KEY_IS_STRING) { g_hash_table_insert(result, g_strdup(key), g_strdup(Z_STRVAL_PP(data))); } else { /* FIXME: throw an exception */ } } } return result; } static void set_array_from_hashtable_of_objects(GHashTable *hashtable, zval **array) { GList *keys = NULL; GObject *item = NULL; zval *zval_item = NULL; array_init(*array); for (keys = g_hash_table_get_keys(hashtable); keys; keys = g_list_next(keys)) { item = g_hash_table_lookup(hashtable, keys->data); if (item) { MAKE_STD_ZVAL(zval_item); ZEND_REGISTER_RESOURCE(zval_item, PhpGObjectPtr_New(item), le_lasso_server); add_assoc_zval(*array, (char*)keys->data, zval_item); } else { add_assoc_null(*array, (char*)keys->data); } } g_list_free(keys); } G_GNUC_UNUSED static void set_array_from_hashtable_of_strings(GHashTable *hashtable, zval **array) { GList *keys = NULL; zval *zval_item = NULL; array_init(*array); for (keys = g_hash_table_get_keys(hashtable); keys; keys = g_list_next(keys)) { char *item = g_hash_table_lookup(hashtable, keys->data); if (item) { MAKE_STD_ZVAL(zval_item); ZVAL_STRING(zval_item, item, 1); add_assoc_zval(*array, (char*)keys->data, zval_item); } else { add_assoc_null(*array, (char*)keys->data); } } g_list_free(keys); } lasso-2.8.2/bindings/php5/PaxHeaders/__init__.py0000644000000000000000000000013113766621500016511 xustar0030 mtime=1608196928.726895006 29 atime=1678814321.91795848 30 ctime=1678814322.081959413 lasso-2.8.2/bindings/php5/__init__.py0000644000175000017500000000000013766621500021750 0ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/bindings/php5/PaxHeaders/tests0000644000000000000000000000013214404126162015460 xustar0030 mtime=1678814322.157959846 30 atime=1678814326.421984131 30 ctime=1678814322.157959846 lasso-2.8.2/bindings/php5/tests/0000755000175000017500000000000014404126162021005 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/bindings/php5/tests/PaxHeaders/Makefile.am0000644000000000000000000000013213766621500017577 xustar0030 mtime=1608196928.726895006 30 atime=1678814114.472790182 30 ctime=1678814322.149959801 lasso-2.8.2/bindings/php5/tests/Makefile.am0000644000175000017500000000036113766621500023047 0ustar00bdauvergnebdauvergne00000000000000MAINTAINERCLEANFILES = Makefile.in if PHP5_ENABLED TESTS_ENVIRONMENT=env "SRCDIR=$(srcdir)/" "PHP5=$(PHP5)" TESTS = profile_tests.sh binding_tests.sh endif EXTRA_DIST = profile_tests.php binding_tests.php profile_tests.sh binding_tests.sh lasso-2.8.2/bindings/php5/tests/PaxHeaders/binding_tests.php0000644000000000000000000000013213766621500021110 xustar0030 mtime=1608196928.726895006 30 atime=1678098072.385507844 30 ctime=1678814322.153959823 lasso-2.8.2/bindings/php5/tests/binding_tests.php0000755000175000017500000001707513766621500024375 0ustar00bdauvergnebdauvergne00000000000000#!/usr/bin/php . require("../lasso.php"); define("DATA_DIR", getenv("SRCDIR") . "../../../tests/data/"); function test01() { echo "Get an xmlNode* from a Lasso function... "; $organisation_string = ' Name of the organization '; $server = new LassoServer( DATA_DIR . "sp1-la/metadata.xml", DATA_DIR . "sp1-la/private-key-raw.pem", NULL, DATA_DIR . "sp1-la/certificate.pem"); assert(!is_null($server->organization)); assert($server->organization == $organisation_string); echo "OK.\n"; } function test02() { echo "Get and set a list of strings... "; $requestAuthnContext = new LassoLibRequestAuthnContext(); $requestAuthnContext->authnContextClassRef = array(LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PASSWORD); assert(! is_null($requestAuthnContext->authnContextClassRef)); assert(sizeof($requestAuthnContext->authnContextClassRef) == 1); assert($requestAuthnContext->authnContextClassRef[0] == LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PASSWORD); echo "OK.\n"; } function test03() { echo "Get and set a list of xmlNode*... "; $server = new LassoServer( DATA_DIR . "sp1-la/metadata.xml", DATA_DIR . "sp1-la/private-key-raw.pem", NULL, DATA_DIR . "sp1-la/certificate.pem"); $server->addProvider( LASSO_PROVIDER_ROLE_IDP, DATA_DIR . "idp1-la/metadata.xml", DATA_DIR . "idp1-la/public-key.pem", DATA_DIR . "idp1-la/certificate.pem"); $login = new LassoLogin($server); $login->initAuthnRequest(); $requestAuthnContext = new LassoLibRequestAuthnContext(); $extension1 = ' do '; $extension2 = ' do action 2do action 3 '; $extensionList = array($extension1, $extension2); $login->request->extension = $extensionList; assert($login->request->extension == $extensionList); assert($login->request->extension[0] == $extension1); assert($login->request->extension[1] == $extension2); echo "OK.\n"; } function test04() { echo "Get and set a list of Lasso objects... "; $response = new LassoSamlpResponse(); assert(!$response->assertion); $assertions = array(); $assertion1 = new LassoSamlAssertion(); $assertion1->assertionId = "assertion 1"; $assertions[] = $assertion1; assert($assertions[0]->assertionId == "assertion 1"); $assertion2 = new LassoSamlAssertion(); $assertion2->assertionId = "assertion 2"; $assertions[] = $assertion2; $response->assertion = $assertions; assert($response->assertion[0]->assertionId == "assertion 1"); assert($response->assertion[1]->assertionId == "assertion 2"); unset($assertions); assert($response->assertion[0]->assertionId == "assertion 1"); assert($response->assertion[1]->assertionId == "assertion 2"); $assertions = $response->assertion; assert($assertions[0]->assertionId == "assertion 1"); assert($assertions[1]->assertionId == "assertion 2"); echo "OK.\n"; } function test05() { echo "Get and set a hashtable of objects... "; $server = new LassoServer( DATA_DIR . "sp1-la/metadata.xml", DATA_DIR . "sp1-la/private-key-raw.pem", NULL, DATA_DIR . "sp1-la/certificate.pem"); $server->addProvider( LASSO_PROVIDER_ROLE_IDP, DATA_DIR . "idp1-la/metadata.xml", DATA_DIR . "idp1-la/public-key.pem", DATA_DIR . "idp1-la/certificate.pem"); assert(!is_null($server->providers)); assert($server->providers["https://idp1/metadata"]->providerId == "https://idp1/metadata"); assert($server->providers["https://idp1/metadata"]->providerId == "https://idp1/metadata"); $tmp_providers = $server->providers; $server->providers = NULL; assert(!$server->providers); $server->providers = $tmp_providers; $provider = $server->providers["https://idp1/metadata"]; assert($server->providers["https://idp1/metadata"]->providerId == "https://idp1/metadata"); echo "OK.\n"; } function test06() { echo "Get and set SAML 2.0 assertion attribute values... "; $attribute1_name = "first attribute"; $attribute1_string = "first string"; $attribute2_name = "second attribute"; $attribute2_string = "second string"; $attribute3_string = "third string"; $expected_assertion_dump = 'first stringsecond stringthird string'; $text_node1 = new LassoMiscTextNode(); $text_node1->content = $attribute1_string; $any1 = array(); $any1[] = $text_node1; $attribute_value1 = new LassoSaml2AttributeValue(); $attribute_value1->any = $any1; $attribute_values1 = array(); $attribute_values1[] = $attribute_value1; $attribute1 = new LassoSaml2Attribute(); $attribute1->name = $attribute1_name; $attribute1->attributeValue = $attribute_values1; $text_node2 = new LassoMiscTextNode(); $text_node2->content = $attribute2_string; $any2 = array(); $any2[] = $text_node2; $attribute_value2 = new LassoSaml2AttributeValue(); $attribute_value2->any = $any2; $text_node3 = new LassoMiscTextNode(); $text_node3->content = $attribute3_string; $any3 = array(); $any3[] = $text_node3; $attribute_value3 = new LassoSaml2AttributeValue(); $attribute_value3->any = $any3; $attribute_values2 = array(); $attribute_values2[] = $attribute_value2; $attribute_values2[] = $attribute_value3; $attribute2 = new LassoSaml2Attribute(); $attribute2->name = $attribute2_name; $attribute2->attributeValue = $attribute_values2; $attributes = array(); $attributes[] = $attribute1; $attributes[] = $attribute2; $attributeStatement = new LassoSaml2AttributeStatement(); $attributeStatement->attribute = $attributes; $attributeStatements = array(); $attributeStatements[] = $attributeStatement; $assertion = new LassoSaml2Assertion(); $assertion->attributeStatement = $attributeStatements; assert($assertion->dump() == $expected_assertion_dump); echo "OK.\n"; } lasso_init(); test01(); test02(); test03(); test04(); //test05(); test06(); lasso_shutdown(); lasso-2.8.2/bindings/php5/tests/PaxHeaders/Makefile.in0000644000000000000000000000013114404125673017607 xustar0029 mtime=1678814139.33692867 30 atime=1678814150.104988793 30 ctime=1678814322.149959801 lasso-2.8.2/bindings/php5/tests/Makefile.in0000644000175000017500000007311514404125673023067 0ustar00bdauvergnebdauvergne00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = bindings/php5/tests ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ac_check_class.m4 \ $(top_srcdir)/m4/ac_check_classpath.m4 \ $(top_srcdir)/m4/ac_check_junit.m4 \ $(top_srcdir)/m4/ac_prog_jar.m4 \ $(top_srcdir)/m4/ac_prog_java.m4 \ $(top_srcdir)/m4/ac_prog_java_works.m4 \ $(top_srcdir)/m4/ac_prog_javac.m4 \ $(top_srcdir)/m4/ac_prog_javac_works.m4 \ $(top_srcdir)/m4/ac_prog_javah.m4 \ $(top_srcdir)/m4/ac_try_compile_java.m4 \ $(top_srcdir)/m4/as-compiler-flag.m4 \ $(top_srcdir)/m4/dps_java_check_class.m4 \ $(top_srcdir)/m4/dps_xtra_classpath.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h \ $(top_builddir)/lasso/lasso_config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/test-driver DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CHECK_CFLAGS = @CHECK_CFLAGS@ CHECK_LIBS = @CHECK_LIBS@ CLASSPATH_JUNIT = @CLASSPATH_JUNIT@ CLASSPATH_OPT = @CLASSPATH_OPT@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CSHARPCILINTERPRETER = @CSHARPCILINTERPRETER@ CSHARPCOMPILER = @CSHARPCOMPILER@ CSHARPCYGPATH_W = @CSHARPCYGPATH_W@ CSHARPDYNAMICLINKING = @CSHARPDYNAMICLINKING@ CSHARPLIBRARYPREFIX = @CSHARPLIBRARYPREFIX@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEBUGGING = @DEBUGGING@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLL_FILENAME = @DLL_FILENAME@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GACUTIL = @GACUTIL@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HTML_DIR = @HTML_DIR@ INKSCAPE = @INKSCAPE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVAC_FLAGS = @JAVAC_FLAGS@ JAVAH = @JAVAH@ JAVAH_FLAGS = @JAVAH_FLAGS@ JAVA_INCLUDE = @JAVA_INCLUDE@ JAVA_JUNIT = @JAVA_JUNIT@ JAVA_VERSION = @JAVA_VERSION@ JDK_INCLUDE = @JDK_INCLUDE@ JNI_EXTRA_LDFLAGS = @JNI_EXTRA_LDFLAGS@ JUNIT = @JUNIT@ LASSO_APP_DEFINES = @LASSO_APP_DEFINES@ LASSO_CFLAGS = @LASSO_CFLAGS@ LASSO_CORE_CFLAGS = @LASSO_CORE_CFLAGS@ LASSO_CORE_LIBS = @LASSO_CORE_LIBS@ LASSO_DEFINES = @LASSO_DEFINES@ LASSO_DOCDIR = @LASSO_DOCDIR@ LASSO_LIBS = @LASSO_LIBS@ LASSO_PUB_CFLAGS = @LASSO_PUB_CFLAGS@ LASSO_STATIC_BINARIES = @LASSO_STATIC_BINARIES@ LASSO_VERSION_INFO = @LASSO_VERSION_INFO@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PERLINSTALLSITEARCH = @PERLINSTALLSITEARCH@ PERLMAN3DIR = @PERLMAN3DIR@ PERL_CFLAGS = @PERL_CFLAGS@ PERL_VERSION = @PERL_VERSION@ PHP5 = @PHP5@ PHP5_CONFIG = @PHP5_CONFIG@ PHP5_CONFIG_DIR = @PHP5_CONFIG_DIR@ PHP5_EXTENSION_DIR = @PHP5_EXTENSION_DIR@ PHP5_INCLUDES = @PHP5_INCLUDES@ PHP5_INCLUDE_DIR = @PHP5_INCLUDE_DIR@ PHP5_LDFLAGS = @PHP5_LDFLAGS@ PHP5_LIBS = @PHP5_LIBS@ PHP5_PREFIX = @PHP5_PREFIX@ PHP5_UNPREFIXED_EXTENSION_DIR = @PHP5_UNPREFIXED_EXTENSION_DIR@ PHP5_VERSION = @PHP5_VERSION@ PHP7 = @PHP7@ PHP7_CONFIG = @PHP7_CONFIG@ PHP7_CONFIG_DIR = @PHP7_CONFIG_DIR@ PHP7_EXTENSION_DIR = @PHP7_EXTENSION_DIR@ PHP7_INCLUDES = @PHP7_INCLUDES@ PHP7_INCLUDE_DIR = @PHP7_INCLUDE_DIR@ PHP7_LDFLAGS = @PHP7_LDFLAGS@ PHP7_LIBS = @PHP7_LIBS@ PHP7_PREFIX = @PHP7_PREFIX@ PHP7_UNPREFIXED_EXTENSION_DIR = @PHP7_UNPREFIXED_EXTENSION_DIR@ PHP7_VERSION = @PHP7_VERSION@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PYTHON = @PYTHON@ PYTHON_VERSION = @PYTHON_VERSION@ PY_CFLAGS = @PY_CFLAGS@ PY_DYNLOAD = @PY_DYNLOAD@ PY_EXTRA_LIBS = @PY_EXTRA_LIBS@ PY_LIB_A = @PY_LIB_A@ PY_LIB_LOC = @PY_LIB_LOC@ PY_SITE_PACKAGES = @PY_SITE_PACKAGES@ RANLIB = @RANLIB@ RC = @RC@ REST2HTML = @REST2HTML@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_VERSION = @SWIG_VERSION@ TAR = @TAR@ TESTS_JUNIT = @TESTS_JUNIT@ UPCASED_DLL_FILENAME = @UPCASED_DLL_FILENAME@ VERSION = @VERSION@ VERSION_UNDERSCORED = @VERSION_UNDERSCORED@ WINDOWS_VERSION = @WINDOWS_VERSION@ XSLTPROC = @XSLTPROC@ Z_CFLAGS = @Z_CFLAGS@ Z_LIBS = @Z_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ uudecode = @uudecode@ MAINTAINERCLEANFILES = Makefile.in @PHP5_ENABLED_TRUE@TESTS_ENVIRONMENT = env "SRCDIR=$(srcdir)/" "PHP5=$(PHP5)" @PHP5_ENABLED_TRUE@TESTS = profile_tests.sh binding_tests.sh EXTRA_DIST = profile_tests.php binding_tests.php profile_tests.sh binding_tests.sh all: all-am .SUFFIXES: .SUFFIXES: .log .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign bindings/php5/tests/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign bindings/php5/tests/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? profile_tests.sh.log: profile_tests.sh @p='profile_tests.sh'; \ b='profile_tests.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) binding_tests.sh.log: binding_tests.sh @p='binding_tests.sh'; \ b='binding_tests.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: all all-am check check-TESTS check-am clean clean-generic \ clean-libtool cscopelist-am ctags-am distclean \ distclean-generic distclean-libtool distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am recheck tags-am \ uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lasso-2.8.2/bindings/php5/tests/PaxHeaders/profile_tests.sh0000644000000000000000000000013213766621500020761 xustar0030 mtime=1608196928.726895006 30 atime=1678098072.385507844 30 ctime=1678814322.153959823 lasso-2.8.2/bindings/php5/tests/profile_tests.sh0000755000175000017500000000017713766621500024241 0ustar00bdauvergnebdauvergne00000000000000#!/bin/sh ${PHP5:?PHP5 variable is not defined} -n -d extension_dir=../.libs -d extension=lasso.so ${SRCDIR}profile_tests.php lasso-2.8.2/bindings/php5/tests/PaxHeaders/binding_tests.sh0000644000000000000000000000013213766621500020733 xustar0030 mtime=1608196928.726895006 30 atime=1678098072.389507875 30 ctime=1678814322.157959846 lasso-2.8.2/bindings/php5/tests/binding_tests.sh0000755000175000017500000000017713766621500024213 0ustar00bdauvergnebdauvergne00000000000000#!/bin/sh ${PHP5:?PHP5 variable is not defined} -n -d extension_dir=../.libs -d extension=lasso.so ${SRCDIR}binding_tests.php lasso-2.8.2/bindings/php5/tests/PaxHeaders/profile_tests.php0000644000000000000000000000013213766621500021136 xustar0030 mtime=1608196928.726895006 30 atime=1678098072.381507813 30 ctime=1678814322.153959823 lasso-2.8.2/bindings/php5/tests/profile_tests.php0000755000175000017500000001633213766621500024416 0ustar00bdauvergnebdauvergne00000000000000#!/usr/bin/php . require("../lasso.php"); define(DATA_DIR, getenv('SRCDIR') . '../../../tests/data/'); function test01() { echo "Server construction, dump & newFromDump... "; $server = new LassoServer( DATA_DIR . "sp1-la/metadata.xml", DATA_DIR . "sp1-la/private-key-raw.pem", NULL, DATA_DIR . "sp1-la/certificate.pem"); $server->addProvider( LASSO_PROVIDER_ROLE_IDP, DATA_DIR . "idp1-la/metadata.xml", DATA_DIR . "idp1-la/public-key.pem", DATA_DIR . "idp1-la/certificate.pem"); $dump = $server->dump(); assert(! is_null($dump)); assert($dump != ""); $server2 = LassoServer::newFromDump($dump); $dump2 = $server2->dump(); assert($dump == $dump2); echo "OK.\n"; } function test02() { echo "Server construction with no optional argument, dump & newFromDump... "; $server = new LassoServer(DATA_DIR . "sp1-la/metadata.xml"); $server->addProvider( LASSO_PROVIDER_ROLE_IDP, DATA_DIR . "idp1-la/metadata.xml", DATA_DIR . "idp1-la/public-key.pem", DATA_DIR . "idp1-la/certificate.pem"); $dump = $server->dump(); $server2 = LassoServer::newFromDump($dump); $dump2 = $server2->dump(); assert($dump == $dump2); echo "OK.\n"; } function test03() { echo "SP login; testing access to authentication request... "; $server = new LassoServer( DATA_DIR . "sp1-la/metadata.xml", DATA_DIR . "sp1-la/private-key-raw.pem", NULL, DATA_DIR . "sp1-la/certificate.pem"); $server->addProvider( LASSO_PROVIDER_ROLE_IDP, DATA_DIR . "idp1-la/metadata.xml", DATA_DIR . "idp1-la/public-key.pem", DATA_DIR . "idp1-la/certificate.pem"); $login = new LassoLogin($server); $result = $login->initAuthnRequest(); assert(! is_null($login->request)); assert(get_class($login->request) == "LassoLibAuthnRequestNoInit"); $dump = $login->request->dump(); $login->request->protocolProfile = LASSO_LIB_PROTOCOL_PROFILE_BRWS_ART; assert($login->request->protocolProfile == LASSO_LIB_PROTOCOL_PROFILE_BRWS_ART); $dump2 = $login->request->dump(); assert($dump != $dump2); echo "OK.\n"; } function test04() { echo "SP login; testing processing of an empty Response... "; $server = new LassoServer( DATA_DIR . "sp1-la/metadata.xml", DATA_DIR . "sp1-la/private-key-raw.pem", NULL, DATA_DIR . "sp1-la/certificate.pem"); $server->addProvider( LASSO_PROVIDER_ROLE_IDP, DATA_DIR . "idp1-la/metadata.xml", DATA_DIR . "idp1-la/public-key.pem", DATA_DIR . "idp1-la/certificate.pem"); $login = new LassoLogin($server); try { $login->processResponseMsg(""); } catch (LassoProfileInvalidMsgError $error) { } echo "OK.\n"; } function test05() { echo "Conversion of a lib:AuthnRequest with an AuthnContext into a query and back... "; $spServer = new LassoServer( DATA_DIR . "sp1-la/metadata.xml", DATA_DIR . "sp1-la/private-key-raw.pem", NULL, DATA_DIR . "sp1-la/certificate.pem"); $spServer->addProvider( LASSO_PROVIDER_ROLE_IDP, DATA_DIR . "idp1-la/metadata.xml", DATA_DIR . "idp1-la/public-key.pem", DATA_DIR . "idp1-la/certificate.pem"); $spLogin = new LassoLogin($spServer); $spLogin->initAuthnRequest(); $requestAuthnContext = new LassoLibRequestAuthnContext(); $requestAuthnContext->authnContextClassRef = array(LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PASSWORD); assert($requestAuthnContext->authnContextClassRef[0] == LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PASSWORD); $spLogin->request->requestAuthnContext = $requestAuthnContext; assert(! is_null($spLogin->request->requestAuthnContext)); $spLogin->request->protocolProfile = LASSO_LIB_PROTOCOL_PROFILE_BRWS_ART; assert($spLogin->request->protocolProfile == LASSO_LIB_PROTOCOL_PROFILE_BRWS_ART); $spLogin->buildAuthnRequestMsg(); assert(! is_null($spLogin->msgUrl)); assert($spLogin->msgUrl != ""); $idpServer = new LassoServer( DATA_DIR . "idp1-la/metadata.xml", DATA_DIR . "idp1-la/private-key-raw.pem", NULL, DATA_DIR . "idp1-la/certificate.pem"); $idpServer->addProvider( LASSO_PROVIDER_ROLE_IDP, DATA_DIR . "sp1-la/metadata.xml", DATA_DIR . "sp1-la/public-key.pem", DATA_DIR . "sp1-la/certificate.pem"); $idpLogin = new LassoLogin($idpServer); list($urlBase, $authnRequestQuery) = split("\?", $spLogin->msgUrl, 2); assert($authnRequestQuery != ""); $idpLogin->processAuthnRequestMsg($authnRequestQuery); assert(! is_null($idpLogin->request)); assert(! is_null($idpLogin->request->requestAuthnContext)); assert($idpLogin->request->requestAuthnContext != ""); assert(sizeof($idpLogin->request->requestAuthnContext->authnContextClassRef) == 1); assert($idpLogin->request->requestAuthnContext->authnContextClassRef[0] == LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PASSWORD); echo "OK.\n"; } function test06() { echo "SP logout without session and identity; testing initRequest... "; $server = new LassoServer( DATA_DIR . "sp1-la/metadata.xml", DATA_DIR . "sp1-la/private-key-raw.pem", NULL, DATA_DIR . "sp1-la/certificate.pem"); $server->addProvider( LASSO_PROVIDER_ROLE_IDP, DATA_DIR . "idp1-la/metadata.xml", DATA_DIR . "idp1-la/public-key.pem", DATA_DIR . "idp1-la/certificate.pem"); $logout = new LassoLogout($server); try { $logout->initRequest(); echo "logout.initRequest without having set identity before should fail\n"; assert(False); } catch (LassoProfileSessionNotFoundError $error) { } echo "OK.\n"; } function test07() { echo "IDP logout without session and identity; testing logout.getNextProviderId... "; $server = new LassoServer( DATA_DIR . "idp1-la/metadata.xml", DATA_DIR . "idp1-la/private-key-raw.pem", NULL, DATA_DIR . "idp1-la/certificate.pem"); $server->addProvider( LASSO_PROVIDER_ROLE_IDP, DATA_DIR . "sp1-la/metadata.xml", DATA_DIR . "sp1-la/public-key.pem", DATA_DIR . "sp1-la/certificate.pem"); $logout = new LassoLogout($server); assert(is_null($logout->next_providerID)); echo "OK.\n"; } test01(); test02(); test03(); test04(); test05(); test06(); test07(); lasso-2.8.2/bindings/php5/PaxHeaders/examples0000644000000000000000000000013214404126162016134 xustar0030 mtime=1678814322.117959618 30 atime=1678814326.421984131 30 ctime=1678814322.117959618 lasso-2.8.2/bindings/php5/examples/0000755000175000017500000000000014404126162021461 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/bindings/php5/examples/PaxHeaders/get_attributes_from_assertion.php0000644000000000000000000000013213766621500025067 xustar0030 mtime=1608196928.726895006 30 atime=1678098072.329507405 30 ctime=1678814322.117959618 lasso-2.8.2/bindings/php5/examples/get_attributes_from_assertion.php0000644000175000017500000000061113766621500030335 0ustar00bdauvergnebdauvergne00000000000000/* Example SP PHP5 code to get attributes from an assertion */ foreach ($assertion->attributeStatement[0]->attribute as $attribute) { if ($attribute->name == LASSO_SAML2_ATTRIBUTE_NAME_EPR) { continue; } echo 'attribute : ' . $attribute->name . "\n"; foreach ($attribute->attributeValue as $value) { echo ' value : ' . $value->any[0]->content . "\n"; } } lasso-2.8.2/bindings/php5/examples/PaxHeaders/Makefile.am0000644000000000000000000000013113766621500020252 xustar0030 mtime=1608196928.726895006 29 atime=1678814114.45279007 30 ctime=1678814322.113959596 lasso-2.8.2/bindings/php5/examples/Makefile.am0000644000175000017500000000012213766621500023516 0ustar00bdauvergnebdauvergne00000000000000MAINTAINERCLEANFILES = Makefile.in EXTRA_DIST = get_attributes_from_assertion.php lasso-2.8.2/bindings/php5/examples/PaxHeaders/Makefile.in0000644000000000000000000000013214404125673020264 xustar0030 mtime=1678814139.312928536 30 atime=1678814150.092988727 30 ctime=1678814322.117959618 lasso-2.8.2/bindings/php5/examples/Makefile.in0000644000175000017500000003712614404125673023545 0ustar00bdauvergnebdauvergne00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = bindings/php5/examples ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ac_check_class.m4 \ $(top_srcdir)/m4/ac_check_classpath.m4 \ $(top_srcdir)/m4/ac_check_junit.m4 \ $(top_srcdir)/m4/ac_prog_jar.m4 \ $(top_srcdir)/m4/ac_prog_java.m4 \ $(top_srcdir)/m4/ac_prog_java_works.m4 \ $(top_srcdir)/m4/ac_prog_javac.m4 \ $(top_srcdir)/m4/ac_prog_javac_works.m4 \ $(top_srcdir)/m4/ac_prog_javah.m4 \ $(top_srcdir)/m4/ac_try_compile_java.m4 \ $(top_srcdir)/m4/as-compiler-flag.m4 \ $(top_srcdir)/m4/dps_java_check_class.m4 \ $(top_srcdir)/m4/dps_xtra_classpath.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h \ $(top_builddir)/lasso/lasso_config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CHECK_CFLAGS = @CHECK_CFLAGS@ CHECK_LIBS = @CHECK_LIBS@ CLASSPATH_JUNIT = @CLASSPATH_JUNIT@ CLASSPATH_OPT = @CLASSPATH_OPT@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CSHARPCILINTERPRETER = @CSHARPCILINTERPRETER@ CSHARPCOMPILER = @CSHARPCOMPILER@ CSHARPCYGPATH_W = @CSHARPCYGPATH_W@ CSHARPDYNAMICLINKING = @CSHARPDYNAMICLINKING@ CSHARPLIBRARYPREFIX = @CSHARPLIBRARYPREFIX@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEBUGGING = @DEBUGGING@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLL_FILENAME = @DLL_FILENAME@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GACUTIL = @GACUTIL@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HTML_DIR = @HTML_DIR@ INKSCAPE = @INKSCAPE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVAC_FLAGS = @JAVAC_FLAGS@ JAVAH = @JAVAH@ JAVAH_FLAGS = @JAVAH_FLAGS@ JAVA_INCLUDE = @JAVA_INCLUDE@ JAVA_JUNIT = @JAVA_JUNIT@ JAVA_VERSION = @JAVA_VERSION@ JDK_INCLUDE = @JDK_INCLUDE@ JNI_EXTRA_LDFLAGS = @JNI_EXTRA_LDFLAGS@ JUNIT = @JUNIT@ LASSO_APP_DEFINES = @LASSO_APP_DEFINES@ LASSO_CFLAGS = @LASSO_CFLAGS@ LASSO_CORE_CFLAGS = @LASSO_CORE_CFLAGS@ LASSO_CORE_LIBS = @LASSO_CORE_LIBS@ LASSO_DEFINES = @LASSO_DEFINES@ LASSO_DOCDIR = @LASSO_DOCDIR@ LASSO_LIBS = @LASSO_LIBS@ LASSO_PUB_CFLAGS = @LASSO_PUB_CFLAGS@ LASSO_STATIC_BINARIES = @LASSO_STATIC_BINARIES@ LASSO_VERSION_INFO = @LASSO_VERSION_INFO@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PERLINSTALLSITEARCH = @PERLINSTALLSITEARCH@ PERLMAN3DIR = @PERLMAN3DIR@ PERL_CFLAGS = @PERL_CFLAGS@ PERL_VERSION = @PERL_VERSION@ PHP5 = @PHP5@ PHP5_CONFIG = @PHP5_CONFIG@ PHP5_CONFIG_DIR = @PHP5_CONFIG_DIR@ PHP5_EXTENSION_DIR = @PHP5_EXTENSION_DIR@ PHP5_INCLUDES = @PHP5_INCLUDES@ PHP5_INCLUDE_DIR = @PHP5_INCLUDE_DIR@ PHP5_LDFLAGS = @PHP5_LDFLAGS@ PHP5_LIBS = @PHP5_LIBS@ PHP5_PREFIX = @PHP5_PREFIX@ PHP5_UNPREFIXED_EXTENSION_DIR = @PHP5_UNPREFIXED_EXTENSION_DIR@ PHP5_VERSION = @PHP5_VERSION@ PHP7 = @PHP7@ PHP7_CONFIG = @PHP7_CONFIG@ PHP7_CONFIG_DIR = @PHP7_CONFIG_DIR@ PHP7_EXTENSION_DIR = @PHP7_EXTENSION_DIR@ PHP7_INCLUDES = @PHP7_INCLUDES@ PHP7_INCLUDE_DIR = @PHP7_INCLUDE_DIR@ PHP7_LDFLAGS = @PHP7_LDFLAGS@ PHP7_LIBS = @PHP7_LIBS@ PHP7_PREFIX = @PHP7_PREFIX@ PHP7_UNPREFIXED_EXTENSION_DIR = @PHP7_UNPREFIXED_EXTENSION_DIR@ PHP7_VERSION = @PHP7_VERSION@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PYTHON = @PYTHON@ PYTHON_VERSION = @PYTHON_VERSION@ PY_CFLAGS = @PY_CFLAGS@ PY_DYNLOAD = @PY_DYNLOAD@ PY_EXTRA_LIBS = @PY_EXTRA_LIBS@ PY_LIB_A = @PY_LIB_A@ PY_LIB_LOC = @PY_LIB_LOC@ PY_SITE_PACKAGES = @PY_SITE_PACKAGES@ RANLIB = @RANLIB@ RC = @RC@ REST2HTML = @REST2HTML@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_VERSION = @SWIG_VERSION@ TAR = @TAR@ TESTS_JUNIT = @TESTS_JUNIT@ UPCASED_DLL_FILENAME = @UPCASED_DLL_FILENAME@ VERSION = @VERSION@ VERSION_UNDERSCORED = @VERSION_UNDERSCORED@ WINDOWS_VERSION = @WINDOWS_VERSION@ XSLTPROC = @XSLTPROC@ Z_CFLAGS = @Z_CFLAGS@ Z_LIBS = @Z_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ uudecode = @uudecode@ MAINTAINERCLEANFILES = Makefile.in EXTRA_DIST = get_attributes_from_assertion.php all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign bindings/php5/examples/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign bindings/php5/examples/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lasso-2.8.2/bindings/php5/PaxHeaders/php_code.py0000644000000000000000000000013214117162531016527 xustar0030 mtime=1631380825.848637964 30 atime=1678814321.925958525 30 ctime=1678814322.077959391 lasso-2.8.2/bindings/php5/php_code.py0000644000175000017500000004655014117162531022011 0ustar00bdauvergnebdauvergne00000000000000# Lasso - A free implementation of the Liberty Alliance specifications. # # Copyright (C) 2004-2007 Entr'ouvert # http://lasso.entrouvert.org # # Authors: See AUTHORS file in top-level directory. # # 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 Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . import re import sys import six from utils import * class PhpCode: def __init__(self, binding_data, fd): self.binding_data = binding_data self.fd = fd def is_object(self, t): return is_object(t) and not is_int(t, self.binding_data) def generate(self): self.generate_header() for klass in self.binding_data.structs: self.generate_class(klass) self.generate_exceptions() self.generate_footer() def generate_header(self): six.print_('''\ _cptr = $cptr; return $obj; } return null; } function lassoGetRequestTypeFromSoapMsg($mesg) { return lasso_get_request_type_from_soap_msg($mesg); } ''', file=self.fd) def generate_class(self, klass): class_name = klass.name if klass.parent != 'GObject': inheritence = ' extends %s' % klass.parent else: inheritence = ' extends LassoObject' six.print_('/**', file=self.fd) six.print_(' * @package Lasso', file=self.fd) six.print_(' */', file=self.fd) six.print_('class %(class_name)s%(inheritence)s {' % locals(), file=self.fd) if klass.members or klass.methods: self.generate_constructors(klass) self.generate_getters_and_setters(klass) self.generate_methods(klass) six.print_('}', file=self.fd) six.print_('', file=self.fd) # Add a special class to get an object instance without initialising six.print_('/**', file=self.fd) six.print_(' * @package Lasso', file=self.fd) six.print_(' */', file=self.fd) six.print_('class %(class_name)sNoInit extends %(class_name)s {' % locals(), file=self.fd) six.print_(' public function __construct() {}', file=self.fd) six.print_('}', file=self.fd) six.print_('', file=self.fd) def generate_constructors(self, klass): method_prefix = format_as_underscored(klass.name) + '_' for m in self.binding_data.functions: name = m.rename or m.name if m.name == method_prefix + 'new': php_args = [] c_args = [] for arg in m.args: arg_type, arg_name, arg_options = arg if arg_options.get('optional'): php_args.append('$%s = null' % arg_name) else: php_args.append('$%s' % arg_name) if self.is_object(arg_type): c_args.append('$%s->_cptr' % arg_name) else: c_args.append('$%s' % arg_name) php_args = ', '.join(php_args) c_args = ', '.join(c_args) # XXX: could check $this->_cptr->typename to see if it got the # right class type six.print_(' public $_cptr = null;', file=self.fd) six.print_('', file=self.fd) six.print_(' public function __construct(%s) {' % php_args, file=self.fd) six.print_(' $this->_cptr = %s(%s);' % (m.name, c_args), file=self.fd) six.print_(' if (is_null($this->_cptr)) { throw new Exception("Constructor for ', klass.name, ' failed "); }', file=self.fd) six.print_(' }', file=self.fd) six.print_('', file=self.fd) elif name.startswith(method_prefix) and m.args \ and clean_type(unconstify(m.args[0][0])) != klass.name: if m.rename: php_name = m.rename else: mname = m.name mname = mname[len(method_prefix):] if 'new' in mname and not mname.startswith('new'): continue php_name = format_underscore_as_camelcase(mname) php_args = [] c_args = [] for arg in m.args: arg_type, arg_name, arg_options = arg if arg_options.get('optional'): php_args.append('$%s = null' % arg_name) else: php_args.append('$%s' % arg_name) if self.is_object(arg_type): c_args.append('$%s->_cptr' % arg_name) else: c_args.append('$%s' % arg_name) php_args = ', '.join(php_args) c_args = ', '.join(c_args) six.print_(' public static function %s(%s) {' % (php_name, php_args), file=self.fd) six.print_(' return cptrToPhp(%s(%s));' % (m.name, c_args), file=self.fd) six.print_(' }', file=self.fd) six.print_('', file=self.fd) def generate_getter(self, c, m): d = { 'type': arg_type(m), 'name': format_as_camelcase(arg_name(m)), 'docstring': self.get_docstring_return_type(arg_type(m)), 'class': c.name } six.print_('''\ /** * @return %(docstring)s */ protected function get_%(name)s() {''' % d, file=self.fd) six.print_(' $t = %(class)s_%(name)s_get($this->_cptr);' % d, file=self.fd) if self.is_object(m): six.print_(' $t = cptrToPhp($t);', file=self.fd) elif (is_glist(m) or is_hashtable(m)) and self.is_object(element_type(m)): six.print_(' foreach ($t as $key => $item) {', file=self.fd) six.print_(' $t[$key] = cptrToPhp($item);', file=self.fd) six.print_(' }', file=self.fd) elif is_hashtable(m) or (is_glist(m) and (is_cstring(element_type(m)) \ or is_xml_node(element_type(m)))) or is_int(m, self.binding_data) \ or is_boolean(m) or is_cstring(m) or is_xml_node(m): pass else: raise Exception('Cannot generate a Php getter %s.%s' % (c,m)) six.print_(' return $t;', file=self.fd) six.print_(' }', file=self.fd) def generate_setter(self, c, m): d = { 'type': arg_type(m), 'name': format_as_camelcase(arg_name(m)), 'docstring': self.get_docstring_return_type(arg_type(m)), 'class': c.name } six.print_(' protected function set_%(name)s($value) {' % d, file=self.fd) if self.is_object(m): six.print_(' $value = $value->_cptr;', file=self.fd) elif (is_glist(m) or is_hashtable(m)) and self.is_object(element_type(m)): six.print_(' $array = array();', file=self.fd) six.print_(' if (!is_null($value)) {', file=self.fd) six.print_(' foreach ($value as $key => $item) {', file=self.fd) six.print_(' $array[$key] = $item->_cptr;', file=self.fd) six.print_(' }', file=self.fd) six.print_(' }', file=self.fd) six.print_(' $value = $array;', file=self.fd) elif is_hashtable(m) or (is_glist(m) and (is_cstring(element_type(m)) \ or is_xml_node(element_type(m)))) or is_int(m, self.binding_data) \ or is_boolean(m) or is_cstring(m) or is_xml_node(m): pass else: raise Exception('Cannot generate a Php setter %s.%s' % (c,m)) six.print_(' %(class)s_%(name)s_set($this->_cptr, $value);' % d, file=self.fd) six.print_(' }', file=self.fd) six.print_('', file=self.fd) def generate_getters_and_setters(self, klass): for m in klass.members: self.generate_getter(klass, m) self.generate_setter(klass, m) def generate_methods(self, klass): methods = klass.methods[:] # first pass on methods, removing accessors for m in klass.methods: if m.rename: meth_name = m.rename else: meth_name = m.name if not ('_get_' in meth_name and len(m.args) == 1): continue methods.remove(m) try: setter_name = meth_name.replace('_get_', '_set_') setter = [x for x in methods if x.name == setter_name][0] methods.remove(setter) except IndexError: setter = None mname = re.match(r'lasso_.*_get_(\w+)', meth_name).group(1) mname = format_as_camelcase(mname) six.print_(' /**', file=self.fd) six.print_(' * @return %s' % self.get_docstring_return_type(m.return_type), file=self.fd) six.print_(' */', file=self.fd) six.print_(' protected function get_%s() {' % mname, file=self.fd) if self.is_object(m.return_type): six.print_(' $cptr = %s($this->_cptr);' % meth_name, file=self.fd) six.print_(' if (! is_null($cptr)) {', file=self.fd) six.print_(' return cptrToPhp($cptr);', file=self.fd) six.print_(' }', file=self.fd) six.print_(' return null;', file=self.fd) else: six.print_(' return %s($this->_cptr);' % meth_name, file=self.fd) six.print_(' }', file=self.fd) if setter: six.print_(' protected function set_%s($value) {' % mname, file=self.fd) if self.is_object(m.return_type): six.print_(' %s($this->_cptr, $value->_cptr);' % setter.name, file=self.fd) else: six.print_(' %s($this->_cptr, $value);' % setter.name, file=self.fd) six.print_(' }', file=self.fd) six.print_('', file=self.fd) # second pass on methods, real methods method_prefix = format_as_underscored(klass.name) + '_' for m in methods: if m.name.endswith('_new') or m.name.endswith('_new_from_dump') or \ m.name.endswith('_new_full'): continue if not m.name.startswith(method_prefix): six.print_('W:', m.name, 'vs', method_prefix, file=sys.stderr) continue if m.rename: mname = m.rename else: mname = m.name cname = mname mname = mname[len(method_prefix):] php_args = [] c_args = [] outarg = None for arg in m.args[1:]: arg_type, arg_name, arg_options = arg arg_name = '$' + arg_name if is_out(arg): assert not outarg outarg = arg if arg_options.get('optional'): if arg_options.get('default'): defval = arg_options.get('default') if defval.startswith('c:'): # constant php_args.append('%s = %s' % (arg_name, defval[2:])) elif defval.startswith('b:'): # boolean php_args.append('%s = %s' % (arg_name, defval[2:])) else: six.print_("E: don't know what to do with %s" % defval, file=sys.stderr) sys.exit(1) else: php_args.append('%s = null' % arg_name) else: php_args.append(arg_name) if is_xml_node(arg) or is_boolean(arg) or is_cstring(arg) or \ is_int(arg, self.binding_data) or is_glist(arg) or \ is_hashtable(arg) or is_time_t_pointer(arg): c_args.append(arg_name) elif self.is_object(arg): c_args.append('%s->_cptr' % arg_name) else: raise Exception('Does not handle argument of type: %s' % ((m, arg),)) if is_out(arg): php_args.pop() php_args.append(arg_name) c_args.pop() c_args.append(arg_name) if php_args: php_args = ', '.join(php_args) else: php_args = '' if c_args: c_args = ', ' + ', '.join(c_args) else: c_args = '' if m.docstring: six.print_(self.generate_docstring(m, mname, 4), file=self.fd) six.print_(' public function %s(%s) {' % ( format_underscore_as_camelcase(mname), php_args), file=self.fd) if m.return_type == 'void': six.print_(' %s($this->_cptr%s);' % (cname, c_args), file=self.fd) elif is_rc(m.return_type): six.print_(' $rc = %s($this->_cptr%s);' % (cname, c_args), file=self.fd) six.print_(' if ($rc == 0) {', file=self.fd) six.print_(' return 0;', file=self.fd) six.print_(' } else if ($rc > 0) {', file=self.fd) # recoverable error six.print_(' return $rc;', file=self.fd) six.print_(' } else if ($rc < 0) {', file=self.fd) # unrecoverable error six.print_(' LassoError::throw_on_rc($rc);', file=self.fd) six.print_(' }', file=self.fd) else: six.print_(' return %s($this->_cptr%s);' % (cname, c_args), file=self.fd) six.print_(' }', file=self.fd) six.print_('', file=self.fd) six.print_('', file=self.fd) def generate_docstring(self, func, method_name, indent): docstring = func.docstring.orig_docstring if func.args: first_arg_name = func.args[0][1] else: first_arg_name = None def rep(s): type = s.group(1)[0] var = s.group(1)[1:] if type == '#': # struct return var elif type == '%': # %TRUE, %FALSE if var in ('TRUE', 'FALSE'): return var six.print_('W: unknown docstring thingie \'%s\' in \'%s\'' % (s.group(1), func.docstring.orig_docstring), file=sys.stderr) elif type == '@': if var == first_arg_name: return '$this' else: return '$' + var return s.group(1) lines = [] for l in docstring.splitlines(): if l.strip() and not lines: continue lines.append(l) s = indent * ' ' + '/**\n' s += '\n'.join([indent * ' ' + ' * ' + x for x in lines[1:]]) s += '\n' + indent * ' ' + ' */' regex = re.compile(r'([\#%@]\w+)', re.DOTALL) s = regex.sub(rep, s) s = s.replace('Return value: ', '@return %s ' % self.get_docstring_return_type(func.return_type)) return s def get_docstring_return_type(self, return_type): if return_type == None: return '' elif return_type == 'gboolean': return 'boolean' elif return_type in ['int', 'gint'] + self.binding_data.enums: return 'int' elif return_type in ('char*', 'gchar*', 'const char*', 'const gchar*', 'xmlNode*'): return 'string' elif return_type in ('GList*', 'GHashTable*'): return 'array' else: # Objects return return_type.replace('*', '') def generate_exceptions(self): done_cats = [] for exc_cat in self.binding_data.overrides.findall('exception/category'): cat = exc_cat.attrib.get('name') done_cats.append(cat) parent_cat = exc_cat.attrib.get('parent', '') six.print_('''\ /** * @package Lasso */ class Lasso%sError extends Lasso%sError {} ''' % (cat, parent_cat), file=self.fd) exceptions_dict = {} for c in self.binding_data.constants: m = re.match(r'LASSO_(\w+)_ERROR_(.*)', c[1]) if not m: continue cat, detail = m.groups() cat = cat.title().replace('_', '') detail = (cat + '_' + detail).title().replace('_', '') if not cat in done_cats: done_cats.append(cat) for exc_cat in self.binding_data.overrides.findall('exception/category'): if exc_cat.attrib.get('name') == cat: parent_cat = exc_cat.attrib.get('parent') break else: parent_cat = '' six.print_('''\ /** * @package Lasso */ class Lasso%sError extends Lasso%sError {} ''' % (cat, parent_cat), file=self.fd) if detail not in exceptions_dict: six.print_('''\ /** * @package Lasso */ class Lasso%sError extends Lasso%sError { protected $code = %s; } ''' % (detail, cat, c[1]), file=self.fd) exceptions_dict[detail] = c[1] six.print_('''\ /** * @package Lasso */ class LassoError extends Exception { private static $exceptions_dict = array(''', file=self.fd) for k, v in exceptions_dict.items(): six.print_(' %s => "Lasso%sError",' % (v, k), file=self.fd) six.print_('''\ ); public static function throw_on_rc($rc) { $exception = self::$exceptions_dict[$rc]; if (! class_exists($exception)) { $exception = "LassoError"; } throw new $exception(strError($rc), $rc); } } ''', file=self.fd) def generate_footer(self): six.print_('''\ ?>''', file=self.fd) lasso-2.8.2/bindings/PaxHeaders/Makefile.am0000644000000000000000000000013114050545511015552 xustar0030 mtime=1621281609.023310655 29 atime=1678814114.30878927 30 ctime=1678814321.577956543 lasso-2.8.2/bindings/Makefile.am0000644000175000017500000000144114050545511021023 0ustar00bdauvergnebdauvergne00000000000000MAINTAINERCLEANFILES = Makefile.in SUBDIRS = if PYTHON_ENABLED SUBDIRS += python endif if PHP5_ENABLED SUBDIRS += php5 endif if PHP7_ENABLED SUBDIRS += php7 endif if JAVA_ENABLED SUBDIRS += java endif if PERL_ENABLED SUBDIRS += perl endif CLEANFILES = bindings.pyc lang_java.pyc lang_python.pyc lang_php5.pyc \ utils.pyc lang_php5_helpers/__init__.pyc lang_php5_helpers/php_code.pyc \ lang_php5_helpers/wrapper_header.pyc lang_php5_helpers/wrapper_source.pyc \ lang_php7.pyc \ lang_php7_helpers/__init__.pyc lang_php7_helpers/php_code.pyc \ lang_php7_helpers/wrapper_header.pyc lang_php7_helpers/wrapper_source.pyc EXTRA_DIST = bindings.py \ overrides.xml \ utils.py \ utility-scripts/error-analyzer.pl \ ghashtable.h \ utils.c lasso-2.8.2/bindings/PaxHeaders/Makefile.in0000644000000000000000000000013214404125673015572 xustar0030 mtime=1678814139.196927888 30 atime=1678814150.012988279 30 ctime=1678814321.577956543 lasso-2.8.2/bindings/Makefile.in0000644000175000017500000005515714404125673021057 0ustar00bdauvergnebdauvergne00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ @PYTHON_ENABLED_TRUE@am__append_1 = python @PHP5_ENABLED_TRUE@am__append_2 = php5 @PHP7_ENABLED_TRUE@am__append_3 = php7 @JAVA_ENABLED_TRUE@am__append_4 = java @PERL_ENABLED_TRUE@am__append_5 = perl subdir = bindings ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ac_check_class.m4 \ $(top_srcdir)/m4/ac_check_classpath.m4 \ $(top_srcdir)/m4/ac_check_junit.m4 \ $(top_srcdir)/m4/ac_prog_jar.m4 \ $(top_srcdir)/m4/ac_prog_java.m4 \ $(top_srcdir)/m4/ac_prog_java_works.m4 \ $(top_srcdir)/m4/ac_prog_javac.m4 \ $(top_srcdir)/m4/ac_prog_javac_works.m4 \ $(top_srcdir)/m4/ac_prog_javah.m4 \ $(top_srcdir)/m4/ac_try_compile_java.m4 \ $(top_srcdir)/m4/as-compiler-flag.m4 \ $(top_srcdir)/m4/dps_java_check_class.m4 \ $(top_srcdir)/m4/dps_xtra_classpath.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h \ $(top_builddir)/lasso/lasso_config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` DIST_SUBDIRS = python php5 php7 java perl am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CHECK_CFLAGS = @CHECK_CFLAGS@ CHECK_LIBS = @CHECK_LIBS@ CLASSPATH_JUNIT = @CLASSPATH_JUNIT@ CLASSPATH_OPT = @CLASSPATH_OPT@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CSHARPCILINTERPRETER = @CSHARPCILINTERPRETER@ CSHARPCOMPILER = @CSHARPCOMPILER@ CSHARPCYGPATH_W = @CSHARPCYGPATH_W@ CSHARPDYNAMICLINKING = @CSHARPDYNAMICLINKING@ CSHARPLIBRARYPREFIX = @CSHARPLIBRARYPREFIX@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEBUGGING = @DEBUGGING@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLL_FILENAME = @DLL_FILENAME@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GACUTIL = @GACUTIL@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HTML_DIR = @HTML_DIR@ INKSCAPE = @INKSCAPE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVAC_FLAGS = @JAVAC_FLAGS@ JAVAH = @JAVAH@ JAVAH_FLAGS = @JAVAH_FLAGS@ JAVA_INCLUDE = @JAVA_INCLUDE@ JAVA_JUNIT = @JAVA_JUNIT@ JAVA_VERSION = @JAVA_VERSION@ JDK_INCLUDE = @JDK_INCLUDE@ JNI_EXTRA_LDFLAGS = @JNI_EXTRA_LDFLAGS@ JUNIT = @JUNIT@ LASSO_APP_DEFINES = @LASSO_APP_DEFINES@ LASSO_CFLAGS = @LASSO_CFLAGS@ LASSO_CORE_CFLAGS = @LASSO_CORE_CFLAGS@ LASSO_CORE_LIBS = @LASSO_CORE_LIBS@ LASSO_DEFINES = @LASSO_DEFINES@ LASSO_DOCDIR = @LASSO_DOCDIR@ LASSO_LIBS = @LASSO_LIBS@ LASSO_PUB_CFLAGS = @LASSO_PUB_CFLAGS@ LASSO_STATIC_BINARIES = @LASSO_STATIC_BINARIES@ LASSO_VERSION_INFO = @LASSO_VERSION_INFO@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PERLINSTALLSITEARCH = @PERLINSTALLSITEARCH@ PERLMAN3DIR = @PERLMAN3DIR@ PERL_CFLAGS = @PERL_CFLAGS@ PERL_VERSION = @PERL_VERSION@ PHP5 = @PHP5@ PHP5_CONFIG = @PHP5_CONFIG@ PHP5_CONFIG_DIR = @PHP5_CONFIG_DIR@ PHP5_EXTENSION_DIR = @PHP5_EXTENSION_DIR@ PHP5_INCLUDES = @PHP5_INCLUDES@ PHP5_INCLUDE_DIR = @PHP5_INCLUDE_DIR@ PHP5_LDFLAGS = @PHP5_LDFLAGS@ PHP5_LIBS = @PHP5_LIBS@ PHP5_PREFIX = @PHP5_PREFIX@ PHP5_UNPREFIXED_EXTENSION_DIR = @PHP5_UNPREFIXED_EXTENSION_DIR@ PHP5_VERSION = @PHP5_VERSION@ PHP7 = @PHP7@ PHP7_CONFIG = @PHP7_CONFIG@ PHP7_CONFIG_DIR = @PHP7_CONFIG_DIR@ PHP7_EXTENSION_DIR = @PHP7_EXTENSION_DIR@ PHP7_INCLUDES = @PHP7_INCLUDES@ PHP7_INCLUDE_DIR = @PHP7_INCLUDE_DIR@ PHP7_LDFLAGS = @PHP7_LDFLAGS@ PHP7_LIBS = @PHP7_LIBS@ PHP7_PREFIX = @PHP7_PREFIX@ PHP7_UNPREFIXED_EXTENSION_DIR = @PHP7_UNPREFIXED_EXTENSION_DIR@ PHP7_VERSION = @PHP7_VERSION@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PYTHON = @PYTHON@ PYTHON_VERSION = @PYTHON_VERSION@ PY_CFLAGS = @PY_CFLAGS@ PY_DYNLOAD = @PY_DYNLOAD@ PY_EXTRA_LIBS = @PY_EXTRA_LIBS@ PY_LIB_A = @PY_LIB_A@ PY_LIB_LOC = @PY_LIB_LOC@ PY_SITE_PACKAGES = @PY_SITE_PACKAGES@ RANLIB = @RANLIB@ RC = @RC@ REST2HTML = @REST2HTML@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_VERSION = @SWIG_VERSION@ TAR = @TAR@ TESTS_JUNIT = @TESTS_JUNIT@ UPCASED_DLL_FILENAME = @UPCASED_DLL_FILENAME@ VERSION = @VERSION@ VERSION_UNDERSCORED = @VERSION_UNDERSCORED@ WINDOWS_VERSION = @WINDOWS_VERSION@ XSLTPROC = @XSLTPROC@ Z_CFLAGS = @Z_CFLAGS@ Z_LIBS = @Z_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ uudecode = @uudecode@ MAINTAINERCLEANFILES = Makefile.in SUBDIRS = $(am__append_1) $(am__append_2) $(am__append_3) \ $(am__append_4) $(am__append_5) CLEANFILES = bindings.pyc lang_java.pyc lang_python.pyc lang_php5.pyc \ utils.pyc lang_php5_helpers/__init__.pyc lang_php5_helpers/php_code.pyc \ lang_php5_helpers/wrapper_header.pyc lang_php5_helpers/wrapper_source.pyc \ lang_php7.pyc \ lang_php7_helpers/__init__.pyc lang_php7_helpers/php_code.pyc \ lang_php7_helpers/wrapper_header.pyc lang_php7_helpers/wrapper_source.pyc EXTRA_DIST = bindings.py \ overrides.xml \ utils.py \ utility-scripts/error-analyzer.pl \ ghashtable.h \ utils.c all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign bindings/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign bindings/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lasso-2.8.2/bindings/PaxHeaders/utils.c0000644000000000000000000000013214114336625015030 xustar0030 mtime=1630649749.794436646 30 atime=1678814251.137556813 30 ctime=1678814321.589956611 lasso-2.8.2/bindings/utils.c0000644000175000017500000000256314114336625020306 0ustar00bdauvergnebdauvergne00000000000000/* * In this file we put utility functions shared by all bindings. * * They usually are data structure manipulation or conversion functions. */ #include #include "../lasso/utils.h" /** * lasso_string_fragment_to_xmlnode: * @fragment: a fragment of an XML document * @size: * * Try to get one and only one node from a string, the node can be a simple string or a single node. * * Return value: a newly allocated xmlNode* or NULL if parsing fails. */ static xmlNode* lasso_string_fragment_to_xmlnode(const char *fragment, int size) { xmlDoc *doc = NULL; xmlNode *node = NULL; xmlNode *list = NULL, *ref = NULL; xmlParserErrors errors; if (size == 0) { size = strlen(fragment); } /* single node case, with preceding or following spaces */ doc = xmlReadMemory(fragment, size, NULL, NULL, XML_PARSE_NONET); if (doc) { node = xmlDocGetRootElement(doc); if (node != NULL) { node = xmlCopyNode(node, 1); goto cleanup; } lasso_release_doc(doc); } /* simple string */ doc = xmlNewDoc(BAD_CAST "1.0"); ref = xmlNewNode(NULL, BAD_CAST "root"); xmlDocSetRootElement(doc, ref); errors = xmlParseInNodeContext(ref, fragment, size, XML_PARSE_NONET, &list); if (errors == XML_ERR_OK && list != NULL && list->next == NULL) { node = xmlCopyNode(list, 1); } cleanup: lasso_release_doc(doc); lasso_release_xml_node_list(list); return node; } lasso-2.8.2/bindings/PaxHeaders/php70000644000000000000000000000013214404126162014320 xustar0030 mtime=1678814322.649962647 30 atime=1678814326.421984131 30 ctime=1678814322.649962647 lasso-2.8.2/bindings/php7/0000755000175000017500000000000014404126162017645 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/bindings/php7/PaxHeaders/lasso.ini0000644000000000000000000000013214050545511016217 xustar0030 mtime=1621281609.039310474 30 atime=1678098072.937512175 30 ctime=1678814322.605962397 lasso-2.8.2/bindings/php7/lasso.ini0000644000175000017500000000006614050545511021471 0ustar00bdauvergnebdauvergne00000000000000; configuration for php PDO module extension=lasso.so lasso-2.8.2/bindings/php7/PaxHeaders/Makefile.am0000644000000000000000000000013214117162531016432 xustar0030 mtime=1631380825.848637964 30 atime=1678814114.500790338 30 ctime=1678814322.601962375 lasso-2.8.2/bindings/php7/Makefile.am0000644000175000017500000000243414117162531021705 0ustar00bdauvergnebdauvergne00000000000000CLEANFILES = lasso.php php_lasso.h _lasso.c DISTCLEANFILES = __init__.pyc lang.pyc php_code.pyc wrapper_header.pyc wrapper_top.pyc wrapper_source.pyc SUBDIRS = examples tests AM_CPPFLAGS = \ -I$(top_builddir) \ -I$(top_srcdir) \ $(SASL_CFLAGS) php_extensiondir = ${prefix}@PHP7_UNPREFIXED_EXTENSION_DIR@ php_extension_LTLIBRARIES = lasso.la php_includedir = @PHP7_INCLUDE_DIR@ nodist_php_include_DATA = lasso.php php_configdir=@PHP7_CONFIG_DIR@ php_config_DATA = lasso.ini lasso_la_CFLAGS = -fno-strict-aliasing $(LASSO_CORE_CFLAGS) -I$(top_srcdir) -I$(top_builddir) $(PHP7_INCLUDES) $(AM_CFLAGS) lasso_la_CFLAGS += -Wno-unused-parameter -Wno-sign-compare # problem in zend.h lasso_la_LDFLAGS = -export-dynamic -prefer-pic -module -avoid-version lasso_la_LIBADD = $(top_builddir)/lasso/liblasso.la $(LASSO_LIBS) $(PHP7_LDFLAGS) nodist_lasso_la_SOURCES = _lasso.c BUILT_SOURCES = _lasso.c lasso.php _lasso.c: lang.py wrapper_source.py wrapper_header.py wrapper_source_top.c php_code.py ../overrides.xml $(AM_V_GEN) $(PYTHON) $(top_srcdir)/bindings/bindings.py -l php7 --src-dir=$(top_srcdir)/lasso/ $(EXTRA_ARGS) doc: phpdoc -o HTML:frames:earthli -f lasso.php -t docs .PHONY: doc EXTRA_DIST = lasso.ini lang.py php_code.py wrapper_header.py wrapper_source.py __init__.py wrapper_source_top.c lasso-2.8.2/bindings/php7/PaxHeaders/Makefile.in0000644000000000000000000000013214404125673016450 xustar0030 mtime=1678814139.368928848 30 atime=1678814150.120988883 30 ctime=1678814322.601962375 lasso-2.8.2/bindings/php7/Makefile.in0000644000175000017500000010136314404125673021724 0ustar00bdauvergnebdauvergne00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = bindings/php7 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ac_check_class.m4 \ $(top_srcdir)/m4/ac_check_classpath.m4 \ $(top_srcdir)/m4/ac_check_junit.m4 \ $(top_srcdir)/m4/ac_prog_jar.m4 \ $(top_srcdir)/m4/ac_prog_java.m4 \ $(top_srcdir)/m4/ac_prog_java_works.m4 \ $(top_srcdir)/m4/ac_prog_javac.m4 \ $(top_srcdir)/m4/ac_prog_javac_works.m4 \ $(top_srcdir)/m4/ac_prog_javah.m4 \ $(top_srcdir)/m4/ac_try_compile_java.m4 \ $(top_srcdir)/m4/as-compiler-flag.m4 \ $(top_srcdir)/m4/dps_java_check_class.m4 \ $(top_srcdir)/m4/dps_xtra_classpath.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h \ $(top_builddir)/lasso/lasso_config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(php_extensiondir)" \ "$(DESTDIR)$(php_includedir)" "$(DESTDIR)$(php_configdir)" LTLIBRARIES = $(php_extension_LTLIBRARIES) am__DEPENDENCIES_1 = lasso_la_DEPENDENCIES = $(top_builddir)/lasso/liblasso.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) nodist_lasso_la_OBJECTS = lasso_la-_lasso.lo lasso_la_OBJECTS = $(nodist_lasso_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = lasso_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(lasso_la_CFLAGS) \ $(CFLAGS) $(lasso_la_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -I$(top_builddir)/lasso depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/lasso_la-_lasso.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(nodist_lasso_la_SOURCES) DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(nodist_php_include_DATA) $(php_config_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CHECK_CFLAGS = @CHECK_CFLAGS@ CHECK_LIBS = @CHECK_LIBS@ CLASSPATH_JUNIT = @CLASSPATH_JUNIT@ CLASSPATH_OPT = @CLASSPATH_OPT@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CSHARPCILINTERPRETER = @CSHARPCILINTERPRETER@ CSHARPCOMPILER = @CSHARPCOMPILER@ CSHARPCYGPATH_W = @CSHARPCYGPATH_W@ CSHARPDYNAMICLINKING = @CSHARPDYNAMICLINKING@ CSHARPLIBRARYPREFIX = @CSHARPLIBRARYPREFIX@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEBUGGING = @DEBUGGING@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLL_FILENAME = @DLL_FILENAME@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GACUTIL = @GACUTIL@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HTML_DIR = @HTML_DIR@ INKSCAPE = @INKSCAPE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVAC_FLAGS = @JAVAC_FLAGS@ JAVAH = @JAVAH@ JAVAH_FLAGS = @JAVAH_FLAGS@ JAVA_INCLUDE = @JAVA_INCLUDE@ JAVA_JUNIT = @JAVA_JUNIT@ JAVA_VERSION = @JAVA_VERSION@ JDK_INCLUDE = @JDK_INCLUDE@ JNI_EXTRA_LDFLAGS = @JNI_EXTRA_LDFLAGS@ JUNIT = @JUNIT@ LASSO_APP_DEFINES = @LASSO_APP_DEFINES@ LASSO_CFLAGS = @LASSO_CFLAGS@ LASSO_CORE_CFLAGS = @LASSO_CORE_CFLAGS@ LASSO_CORE_LIBS = @LASSO_CORE_LIBS@ LASSO_DEFINES = @LASSO_DEFINES@ LASSO_DOCDIR = @LASSO_DOCDIR@ LASSO_LIBS = @LASSO_LIBS@ LASSO_PUB_CFLAGS = @LASSO_PUB_CFLAGS@ LASSO_STATIC_BINARIES = @LASSO_STATIC_BINARIES@ LASSO_VERSION_INFO = @LASSO_VERSION_INFO@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PERLINSTALLSITEARCH = @PERLINSTALLSITEARCH@ PERLMAN3DIR = @PERLMAN3DIR@ PERL_CFLAGS = @PERL_CFLAGS@ PERL_VERSION = @PERL_VERSION@ PHP5 = @PHP5@ PHP5_CONFIG = @PHP5_CONFIG@ PHP5_CONFIG_DIR = @PHP5_CONFIG_DIR@ PHP5_EXTENSION_DIR = @PHP5_EXTENSION_DIR@ PHP5_INCLUDES = @PHP5_INCLUDES@ PHP5_INCLUDE_DIR = @PHP5_INCLUDE_DIR@ PHP5_LDFLAGS = @PHP5_LDFLAGS@ PHP5_LIBS = @PHP5_LIBS@ PHP5_PREFIX = @PHP5_PREFIX@ PHP5_UNPREFIXED_EXTENSION_DIR = @PHP5_UNPREFIXED_EXTENSION_DIR@ PHP5_VERSION = @PHP5_VERSION@ PHP7 = @PHP7@ PHP7_CONFIG = @PHP7_CONFIG@ PHP7_CONFIG_DIR = @PHP7_CONFIG_DIR@ PHP7_EXTENSION_DIR = @PHP7_EXTENSION_DIR@ PHP7_INCLUDES = @PHP7_INCLUDES@ PHP7_INCLUDE_DIR = @PHP7_INCLUDE_DIR@ PHP7_LDFLAGS = @PHP7_LDFLAGS@ PHP7_LIBS = @PHP7_LIBS@ PHP7_PREFIX = @PHP7_PREFIX@ PHP7_UNPREFIXED_EXTENSION_DIR = @PHP7_UNPREFIXED_EXTENSION_DIR@ PHP7_VERSION = @PHP7_VERSION@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PYTHON = @PYTHON@ PYTHON_VERSION = @PYTHON_VERSION@ PY_CFLAGS = @PY_CFLAGS@ PY_DYNLOAD = @PY_DYNLOAD@ PY_EXTRA_LIBS = @PY_EXTRA_LIBS@ PY_LIB_A = @PY_LIB_A@ PY_LIB_LOC = @PY_LIB_LOC@ PY_SITE_PACKAGES = @PY_SITE_PACKAGES@ RANLIB = @RANLIB@ RC = @RC@ REST2HTML = @REST2HTML@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_VERSION = @SWIG_VERSION@ TAR = @TAR@ TESTS_JUNIT = @TESTS_JUNIT@ UPCASED_DLL_FILENAME = @UPCASED_DLL_FILENAME@ VERSION = @VERSION@ VERSION_UNDERSCORED = @VERSION_UNDERSCORED@ WINDOWS_VERSION = @WINDOWS_VERSION@ XSLTPROC = @XSLTPROC@ Z_CFLAGS = @Z_CFLAGS@ Z_LIBS = @Z_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ uudecode = @uudecode@ CLEANFILES = lasso.php php_lasso.h _lasso.c DISTCLEANFILES = __init__.pyc lang.pyc php_code.pyc wrapper_header.pyc wrapper_top.pyc wrapper_source.pyc SUBDIRS = examples tests AM_CPPFLAGS = \ -I$(top_builddir) \ -I$(top_srcdir) \ $(SASL_CFLAGS) php_extensiondir = ${prefix}@PHP7_UNPREFIXED_EXTENSION_DIR@ php_extension_LTLIBRARIES = lasso.la php_includedir = @PHP7_INCLUDE_DIR@ nodist_php_include_DATA = lasso.php php_configdir = @PHP7_CONFIG_DIR@ php_config_DATA = lasso.ini lasso_la_CFLAGS = -fno-strict-aliasing $(LASSO_CORE_CFLAGS) \ -I$(top_srcdir) -I$(top_builddir) $(PHP7_INCLUDES) \ $(AM_CFLAGS) -Wno-unused-parameter -Wno-sign-compare # problem \ in zend.h lasso_la_LDFLAGS = -export-dynamic -prefer-pic -module -avoid-version lasso_la_LIBADD = $(top_builddir)/lasso/liblasso.la $(LASSO_LIBS) $(PHP7_LDFLAGS) nodist_lasso_la_SOURCES = _lasso.c BUILT_SOURCES = _lasso.c EXTRA_DIST = lasso.ini lang.py php_code.py wrapper_header.py wrapper_source.py __init__.py wrapper_source_top.c all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign bindings/php7/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign bindings/php7/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-php_extensionLTLIBRARIES: $(php_extension_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(php_extension_LTLIBRARIES)'; test -n "$(php_extensiondir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(php_extensiondir)'"; \ $(MKDIR_P) "$(DESTDIR)$(php_extensiondir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(php_extensiondir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(php_extensiondir)"; \ } uninstall-php_extensionLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(php_extension_LTLIBRARIES)'; test -n "$(php_extensiondir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(php_extensiondir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(php_extensiondir)/$$f"; \ done clean-php_extensionLTLIBRARIES: -test -z "$(php_extension_LTLIBRARIES)" || rm -f $(php_extension_LTLIBRARIES) @list='$(php_extension_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } lasso.la: $(lasso_la_OBJECTS) $(lasso_la_DEPENDENCIES) $(EXTRA_lasso_la_DEPENDENCIES) $(AM_V_CCLD)$(lasso_la_LINK) -rpath $(php_extensiondir) $(lasso_la_OBJECTS) $(lasso_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lasso_la-_lasso.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< lasso_la-_lasso.lo: _lasso.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lasso_la_CFLAGS) $(CFLAGS) -MT lasso_la-_lasso.lo -MD -MP -MF $(DEPDIR)/lasso_la-_lasso.Tpo -c -o lasso_la-_lasso.lo `test -f '_lasso.c' || echo '$(srcdir)/'`_lasso.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lasso_la-_lasso.Tpo $(DEPDIR)/lasso_la-_lasso.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='_lasso.c' object='lasso_la-_lasso.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lasso_la_CFLAGS) $(CFLAGS) -c -o lasso_la-_lasso.lo `test -f '_lasso.c' || echo '$(srcdir)/'`_lasso.c mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-nodist_php_includeDATA: $(nodist_php_include_DATA) @$(NORMAL_INSTALL) @list='$(nodist_php_include_DATA)'; test -n "$(php_includedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(php_includedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(php_includedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(php_includedir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(php_includedir)" || exit $$?; \ done uninstall-nodist_php_includeDATA: @$(NORMAL_UNINSTALL) @list='$(nodist_php_include_DATA)'; test -n "$(php_includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(php_includedir)'; $(am__uninstall_files_from_dir) install-php_configDATA: $(php_config_DATA) @$(NORMAL_INSTALL) @list='$(php_config_DATA)'; test -n "$(php_configdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(php_configdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(php_configdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(php_configdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(php_configdir)" || exit $$?; \ done uninstall-php_configDATA: @$(NORMAL_UNINSTALL) @list='$(php_config_DATA)'; test -n "$(php_configdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(php_configdir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-recursive all-am: Makefile $(LTLIBRARIES) $(DATA) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(php_extensiondir)" "$(DESTDIR)$(php_includedir)" "$(DESTDIR)$(php_configdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-recursive install-exec: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-recursive clean-am: clean-generic clean-libtool clean-php_extensionLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -f ./$(DEPDIR)/lasso_la-_lasso.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-nodist_php_includeDATA install-php_configDATA \ install-php_extensionLTLIBRARIES install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/lasso_la-_lasso.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-nodist_php_includeDATA \ uninstall-php_configDATA uninstall-php_extensionLTLIBRARIES .MAKE: $(am__recursive_targets) all check install install-am \ install-exec install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--depfiles check check-am clean clean-generic clean-libtool \ clean-php_extensionLTLIBRARIES cscopelist-am ctags ctags-am \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-nodist_php_includeDATA \ install-pdf install-pdf-am install-php_configDATA \ install-php_extensionLTLIBRARIES install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-nodist_php_includeDATA \ uninstall-php_configDATA uninstall-php_extensionLTLIBRARIES .PRECIOUS: Makefile lasso.php _lasso.c: lang.py wrapper_source.py wrapper_header.py wrapper_source_top.c php_code.py ../overrides.xml $(AM_V_GEN) $(PYTHON) $(top_srcdir)/bindings/bindings.py -l php7 --src-dir=$(top_srcdir)/lasso/ $(EXTRA_ARGS) doc: phpdoc -o HTML:frames:earthli -f lasso.php -t docs .PHONY: doc # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lasso-2.8.2/bindings/php7/PaxHeaders/wrapper_source.py0000644000000000000000000000013214050545511020007 xustar0030 mtime=1621281609.047310384 30 atime=1678814322.429961395 30 ctime=1678814322.613962442 lasso-2.8.2/bindings/php7/wrapper_source.py0000644000175000017500000005571414050545511023273 0ustar00bdauvergnebdauvergne00000000000000# Lasso - A free implementation of the Liberty Alliance specifications. # # Copyright (C) 2004-2007 Entr'ouvert # http://lasso.entrouvert.org # # Authors: See AUTHORS file in top-level directory. # # 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 Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . import sys import os import six from utils import * class WrapperSource: def __init__(self, binding_data, fd): self.binding_data = binding_data self.fd = fd self.functions_list = [] self.src_dir = os.path.dirname(__file__) def is_object(self, t): return t not in ['char*', 'const char*', 'gchar*', 'const gchar*', 'GList*', 'GHashTable*', 'GType', 'xmlNode*', 'int', 'gint', 'gboolean', 'const gboolean'] + self.binding_data.enums def generate(self): self.generate_header() self.generate_constants() self.generate_middle() for m in self.binding_data.functions: self.generate_function(m) for c in self.binding_data.structs: self.generate_members(c) for m in c.methods: self.generate_function(m) self.generate_functions_list() self.generate_footer() def generate_header(self): self.functions_list.append('lasso_get_object_typename') self.functions_list.append('lasso_init') self.functions_list.append('lasso_shutdown') six.print_('''\ /* this file has been generated automatically; do not edit */ ''', file=self.fd) six.print_(open(os.path.join(self.src_dir,'wrapper_source_top.c')).read(), file=self.fd) for h in self.binding_data.headers: six.print_('#include <%s>' % h, file=self.fd) six.print_('', file=self.fd) six.print_('''\ PHP_MINIT_FUNCTION(lasso) { le_lasso_server = zend_register_list_destructors_ex(php_gobject_generic_destructor, NULL, PHP_LASSO_SERVER_RES_NAME, module_number); lasso_init(); ''', file=self.fd) def generate_constants(self): six.print_(' /* Constants (both enums and defines) */', file=self.fd) for c in self.binding_data.constants: if c[0] == 'i': six.print_(' REGISTER_LONG_CONSTANT("%s", %s, CONST_CS|CONST_PERSISTENT);' % (c[1], c[1]), file=self.fd) elif c[0] == 's': six.print_(' REGISTER_STRING_CONSTANT("%s", (char*) %s, CONST_CS|CONST_PERSISTENT);' % (c[1], c[1]), file=self.fd) elif c[0] == 'b': six.print_('''\ #ifdef %s REGISTER_LONG_CONSTANT("%s", 1, CONST_CS|CONST_PERSISTENT); #else REGISTER_LONG_CONSTANT("%s", 0, CONST_CS|CONST_PERSISTENT); #endif''' % (c[1], c[1], c[1]), file=self.fd) else: six.print_('E: unknown constant type: %r' % c[0], file=sys.stderr) six.print_('', file=self.fd) def generate_middle(self): six.print_('''\ return SUCCESS; } PHP_MSHUTDOWN_FUNCTION(lasso) { lasso_shutdown(); return SUCCESS; } ''', file=self.fd) def set_zval(self, zval_name, c_variable, type, free = False): '''Emit code to set a zval* of name zval_name, from the value of the C variable called c_variable type, type. ''' # first we free the previous value p = (zval_name, c_variable) q = { 'zval_name' : zval_name, 'c_variable' : c_variable } six.print_(' zval_dtor(%s);' % zval_name, file=self.fd) if is_pointer(type): six.print_(' if (! %s) {' % c_variable, file=self.fd) six.print_(' ZVAL_NULL(%s);' % zval_name, file=self.fd) six.print_(' } else {', file=self.fd) if is_int(type, self.binding_data): six.print_(' ZVAL_LONG(%s, %s);' % p, file=self.fd) elif is_boolean(type): six.print_(' ZVAL_BOOL(%s, %s);' % p, file=self.fd) elif is_cstring(type): six.print_(' ZVAL_STRING(%s, (char*)%s);' % p, file=self.fd) if free and not is_const(type): six.print_('g_free(%s)' % c_variable, file=self.fd) elif arg_type(type) == 'xmlNode*': six.print_('''\ { char* xmlString = get_string_from_xml_node(%(c_variable)s); if (xmlString) { ZVAL_STRING(%(zval_name)s, xmlString); } else { ZVAL_NULL(%(zval_name)s); } } ''' % q, file=self.fd) elif is_glist(type): elem_type = make_arg(element_type(type)) if not arg_type(elem_type): raise Exception('unknown element-type: ' + repr(type)) if is_cstring(elem_type): function = 'set_array_from_list_of_strings' free_function = 'free_glist(&%(c_variable)s, (GFunc)free);' elif arg_type(elem_type).startswith('xmlNode'): function = 'set_array_from_list_of_xmlnodes' free_function = 'free_glist(&%(c_variable)s, (GFunc)xmlFree);' elif is_object(elem_type): function = 'set_array_from_list_of_objects' free_function = 'g_list_free(%(c_variable)s);' else: raise Exception('unknown element-type: ' + repr(type)) six.print_(' %s((GList*)%s, &%s);' % (function, c_variable, zval_name), file=self.fd) if free: six.print_(' ', free_function % q, file=self.fd) elif is_object(type): six.print_('''\ if (G_IS_OBJECT(%(c_variable)s)) { PhpGObjectPtr *obj = PhpGObjectPtr_New(G_OBJECT(%(c_variable)s)); zend_resource *res = zend_register_resource(obj, le_lasso_server); ZVAL_RES(%(zval_name)s, res); } else { ZVAL_NULL(%(zval_name)s); }''' % q, file=self.fd) if free: six.print_('''\ if (%(c_variable)s) { g_object_unref(%(c_variable)s); // If constructor ref is off by one' }''' % q, file=self.fd) else: raise Exception('unknown type: ' + repr(type) + unconstify(arg_type(type))) if is_pointer(type): six.print_(' }', file=self.fd) def return_value(self, arg, free = False): if arg is None: return if is_boolean(arg): six.print_(' RETVAL_BOOL(return_c_value);', file=self.fd) elif is_int(arg, self.binding_data): six.print_(' RETVAL_LONG(return_c_value);', file=self.fd) elif is_cstring(arg): six.print_('''\ if (return_c_value) { RETVAL_STRING((char*)return_c_value); } else { RETVAL_NULL(); }''', file=self.fd) if free: six.print_(' free(return_c_value);', file=self.fd) elif is_xml_node(arg): six.print_('''\ { char* xmlString = get_string_from_xml_node(return_c_value); if (xmlString) { RETVAL_STRING(xmlString); } else { RETVAL_NULL(); } } ''', file=self.fd) if free: six.print_(' lasso_release_xml_node(return_c_value);', file=self.fd) elif is_glist(arg): el_type = element_type(arg) if is_cstring(el_type): six.print_('''\ set_array_from_list_of_strings((GList*)return_c_value, &return_value); ''', file=self.fd) if free: six.print_(' lasso_release_list_of_strings(return_c_value);', file=self.fd) elif is_xml_node(el_type): six.print_('''\ set_array_from_list_of_xmlnodes((GList*)return_c_value, &return_value); ''', file=self.fd) if free or is_transfer_full(arg): six.print_(' lasso_release_list_of_xml_node(return_c_value);', file=self.fd) elif is_object(el_type): six.print_('''\ set_array_from_list_of_objects((GList*)return_c_value, &return_value); ''', file=self.fd) if free: six.print_(' lasso_release_list_of_gobjects(return_c_value);', file=self.fd) else: raise Exception('cannot return value for %s' % (arg,)) elif is_hashtable(arg): el_type = element_type(arg) if is_object(el_type): six.print_('''\ set_array_from_hashtable_of_objects(return_c_value, &return_value); ''', file=self.fd) else: if not is_cstring(arg): print >>sys.stderr, 'W: %s has no explicit string annotation' % (arg,) six.print_('''\ set_array_from_hashtable_of_strings(return_c_value, &return_value); ''', file=self.fd) elif is_object(arg): six.print_('''\ if (return_c_value) { PhpGObjectPtr *self; self = PhpGObjectPtr_New(G_OBJECT(return_c_value)); zend_resource *res = zend_register_resource(self, le_lasso_server); ZVAL_RES(return_value, res); } else { RETVAL_NULL(); }''', file=self.fd) if free: six.print_(' lasso_release_gobject(return_c_value);', file=self.fd) else: raise Exception('cannot return value for %s' % (arg,)) def generate_function(self, m): if m.name in ('lasso_init','lasso_shutdown'): return if m.rename: name = m.rename else: name = m.name self.functions_list.append(name) six.print_('''PHP_FUNCTION(%s) {''' % name, file=self.fd) parse_tuple_format = [] parse_tuple_args = [] for arg in m.args: if is_out(arg): six.print_(' zval *php_out_%s = NULL;' % arg_name(arg), file=self.fd) six.print_(' %s %s;' % (var_type(arg), arg_name(arg)), file=self.fd) parse_tuple_format.append('z!') parse_tuple_args.append('&php_out_%s' % arg_name(arg)) elif is_cstring(arg): parse_tuple_format.append('s!') parse_tuple_args.append('&%s_str, &%s_len' % (arg_name(arg), arg_name(arg))) six.print_(' %s %s = NULL;' % ('char*', arg_name(arg)), file=self.fd) six.print_(' %s %s_str = NULL;' % ('char*', arg_name(arg)), file=self.fd) six.print_(' %s %s_len = 0;' % ('size_t', arg_name(arg)), file=self.fd) elif is_int(arg, self.binding_data) or is_boolean(arg): parse_tuple_format.append('l') parse_tuple_args.append('&%s' % arg_name(arg)) six.print_(' %s %s;' % ('long', arg_name(arg)), file=self.fd) elif is_time_t_pointer(arg): parse_tuple_format.append('l') parse_tuple_args.append('&%s' % (arg_name(arg),)) print >>self.fd, ' time_t %s = 0;' % (arg_name(arg),) elif is_xml_node(arg): parse_tuple_format.append('s!') parse_tuple_args.append('&%s_str, &%s_len' % (arg_name(arg), arg_name(arg))) six.print_(' %s %s = NULL;' % ('xmlNode*', arg_name(arg)), file=self.fd) six.print_(' %s %s_str = NULL;' % ('char*', arg_name(arg)), file=self.fd) six.print_(' %s %s_len = 0;' % ('size_t', arg_name(arg)), file=self.fd) elif is_glist(arg): parse_tuple_format.append('a!') parse_tuple_args.append('&zval_%s' % arg_name(arg)) six.print_(' %s zval_%s = NULL;' % ('zval*', arg_name(arg)), file=self.fd) six.print_(' %s %s = NULL;' % ('GList*', arg_name(arg)), file=self.fd) elif is_object(arg): parse_tuple_format.append('r') parse_tuple_args.append('&zval_%s' % arg_name(arg)) six.print_(' %s %s = NULL;' % (arg_type(arg), arg_name(arg)), file=self.fd) six.print_(' %s zval_%s = NULL;' % ('zval*', arg_name(arg)), file=self.fd) six.print_(' %s cvt_%s = NULL;' % ('PhpGObjectPtr*', arg_name(arg)), file=self.fd) else: raise Exception('Unsupported type %s %s' % (arg, m)) if m.return_type: six.print_(' %s return_c_value;' % m.return_type, file=self.fd) if m.return_type is not None and self.is_object(m.return_arg): six.print_(' G_GNUC_UNUSED PhpGObjectPtr *self;', file=self.fd) six.print_('', file=self.fd) parse_tuple_args = ', '.join(parse_tuple_args) if parse_tuple_args: parse_tuple_args = ', ' + parse_tuple_args six.print_('''\ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "%s"%s) == FAILURE) { RETURN_FALSE; } ''' % (''.join(parse_tuple_format), parse_tuple_args), file=self.fd) for f, arg in zip(parse_tuple_format, m.args): if is_out(arg): continue elif is_xml_node(arg): six.print_('''\ %(name)s = get_xml_node_from_string(%(name)s_str);''' % {'name': arg[1]}, file=self.fd) elif f.startswith('s'): six.print_('''\ %(name)s = %(name)s_str;''' % {'name': arg[1]}, file=self.fd) elif f.startswith('r'): six.print_(' if ((cvt_%s = (PhpGObjectPtr *)zend_fetch_resource(Z_RES_P(zval_%s), PHP_LASSO_SERVER_RES_NAME, le_lasso_server)) == NULL) {' % (arg[1], arg[1]), file=self.fd) six.print_(' RETURN_FALSE;', file=self.fd) six.print_(' }', file=self.fd) six.print_(' %s = (%s)cvt_%s->obj;' % (arg[1], arg[0], arg[1]), file=self.fd) elif f.startswith('a'): el_type = element_type(arg) if is_cstring(el_type): six.print_(' %(name)s = get_list_from_array_of_strings(zval_%(name)s);' % {'name': arg[1]}, file=self.fd) elif is_object(el_type): six.print_(' %(name)s = get_list_from_array_of_objects(zval_%(name)s);' % {'name': arg[1]}, file=self.fd) else: six.print_('E: In %(function)s arg %(name)s is of type GList<%(elem)s>' % { 'function': m.name, 'name': arg[1], 'elem': el_type }, file=sys.stderr) elif f == 'l': pass else: raise Exception('%s format inconnu' % f) if m.return_type is not None: six.print_(' return_c_value = ', file=self.fd) if 'new' in m.name: six.print_('(%s)' % m.return_type, file=self.fd) else: six.print_(' ', file=self.fd) def special(x): if is_time_t_pointer(x): return '%(name)s ? &%(name)s : NULL' % { 'name': arg_name(x) } else: return ref_name(x) six.print_('%s(%s);' % (m.name, ', '.join([special(x) for x in m.args])), file=self.fd) # Free the converted arguments for f, arg in zip(parse_tuple_format, m.args): argtype, argname, argoptions = arg if is_out(arg): # export the returned variable free = is_transfer_full(unref_type(arg)) self.set_zval('php_out_%s' % argname, argname, unref_type(arg), free = free) pass elif argtype == 'xmlNode*': six.print_(' xmlFree(%s);' % argname, file=self.fd) elif f.startswith('a'): el_type = element_type(arg) if is_cstring(el_type): six.print_(' if (%(name)s) {' % { 'name': arg[1] }, file=self.fd) six.print_(' free_glist(&%(name)s,(GFunc)free);' % { 'name': arg[1] }, file=self.fd) six.print_(' }', file=self.fd) try: self.return_value(m.return_arg, is_transfer_full(m.return_arg, default=True)) except: raise Exception('Cannot return value for function %s' % m) six.print_('}', file=self.fd) six.print_('', file=self.fd) def generate_members(self, c): for m in c.members: self.generate_getter(c, m) self.generate_setter(c, m) def generate_getter(self, c, m): klassname = c.name name = arg_name(m) type = arg_type(m) function_name = '%s_%s_get' % (klassname, format_as_camelcase(name)) six.print_('''PHP_FUNCTION(%s) {''' % function_name, file=self.fd) self.functions_list.append(function_name) six.print_(' %s return_c_value;' % type, file=self.fd) six.print_(' %s* this;' % klassname, file=self.fd) six.print_(' zval* zval_this;', file=self.fd) six.print_(' PhpGObjectPtr *cvt_this;', file=self.fd) six.print_('', file=self.fd) six.print_('''\ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &zval_this) == FAILURE) { RETURN_FALSE; } if ((cvt_this = (PhpGObjectPtr *)zend_fetch_resource(Z_RES_P(zval_this), PHP_LASSO_SERVER_RES_NAME, le_lasso_server)) == NULL) { RETURN_FALSE; } this = (%s*)cvt_this->obj; ''' % (klassname), file=self.fd) six.print_(' return_c_value = (%s)this->%s;' % (type, name), file=self.fd) self.return_value(m) six.print_('}', file=self.fd) six.print_('', file=self.fd) def generate_setter(self, c, m): klassname = c.name name = arg_name(m) type = arg_type(m) function_name = '%s_%s_set' % (klassname, format_as_camelcase(name)) six.print_('''PHP_FUNCTION(%s) {''' % function_name, file=self.fd) self.functions_list.append(function_name) six.print_(' %s* this;' % klassname, file=self.fd) six.print_(' zval* zval_this;', file=self.fd) six.print_(' PhpGObjectPtr *cvt_this;', file=self.fd) # FIXME: This bloc should be factorised parse_tuple_format = '' parse_tuple_args = [] if is_cstring(m) or is_xml_node(m): # arg_type = arg_type.replace('const ', '') parse_tuple_format += 's' parse_tuple_args.append('&%s_str, &%s_len' % (name, name)) six.print_(' %s %s_str = NULL;' % ('char*', name), file=self.fd) six.print_(' %s %s_len = 0;' % ('size_t', name), file=self.fd) elif is_int(m, self.binding_data) or is_boolean(m): parse_tuple_format += 'l' parse_tuple_args.append('&%s' % name) six.print_(' %s %s;' % ('long', name), file=self.fd) # Must also handle lists of Objects elif is_glist(m) or is_hashtable(m): parse_tuple_format += 'a' parse_tuple_args.append('&zval_%s' % name) six.print_(' %s zval_%s;' % ('zval*', name), file=self.fd) elif is_object(m): parse_tuple_format += 'r' parse_tuple_args.append('&zval_%s' % name) six.print_(' %s zval_%s = NULL;' % ('zval*', name), file=self.fd) six.print_(' %s cvt_%s = NULL;' % ('PhpGObjectPtr*', name), file=self.fd) else: raise Exception('Cannot make a setter for %s.%s' % (c,m)) if parse_tuple_args: parse_tuple_arg = parse_tuple_args[0] else: six.print_('}', file=self.fd) six.print_('', file=self.fd) return six.print_('', file=self.fd) six.print_('''\ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r%s", &zval_this, %s) == FAILURE) { return; } ''' % (parse_tuple_format, parse_tuple_arg), file=self.fd) # Get 'this' object six.print_('''\ if ((cvt_this = (PhpGObjectPtr *)zend_fetch_resource(Z_RES_P(zval_this), PHP_LASSO_SERVER_RES_NAME, le_lasso_server)) == NULL) { RETURN_FALSE; } this = (%s*)cvt_this->obj; ''' % klassname, file=self.fd) # Set new value d = { 'name': name, 'type': type } if is_int(m, self.binding_data) or is_boolean(m): six.print_(' this->%s = %s;' % (name, name), file=self.fd) elif is_cstring(m): six.print_(' lasso_assign_string(this->%(name)s, %(name)s_str);' % d, file=self.fd) elif is_xml_node(m): six.print_(' lasso_assign_new_xml_node(this->%(name)s, get_xml_node_from_string(%(name)s_str));' % d, file=self.fd) elif is_glist(m): el_type = element_type(m) if is_cstring(el_type): six.print_(' lasso_assign_new_list_of_strings(this->%(name)s, get_list_from_array_of_strings(zval_%(name)s));' % d, file=self.fd) elif is_xml_node(el_type): six.print_(' lasso_assign_new_list_of_xml_node(this->%(name)s, get_list_from_array_of_xmlnodes(zval_%(name)s))' % d, file=self.fd) elif is_object(el_type): six.print_(' lasso_assign_new_list_of_gobjects(this->%(name)s, get_list_from_array_of_objects(zval_%(name)s));' % d, file=self.fd) else: raise Exception('Cannot create C setter for %s.%s' % (c,m)) elif is_hashtable(m): el_type = element_type(m) six.print_('''\ { GHashTable *oldhash = this->%(name)s;''' % d, file=self.fd) if is_object(el_type): six.print_(' this->%(name)s = get_hashtable_from_array_of_objects(zval_%(name)s);' % d, file=self.fd) else: six.print_(' this->%(name)s = get_hashtable_from_array_of_strings(zval_%(name)s);' % d, file=self.fd) six.print_(' g_hash_table_destroy(oldhash);', file=self.fd) six.print_(' }', file=self.fd) elif is_object(m): six.print_(' if ((cvt_%(name)s = (PhpGObjectPtr*)zend_fetch_resource(Z_RES_P(zval_%(name)s), PHP_LASSO_SERVER_RES_NAME, le_lasso_server)) == NULL) {' % d, file=self.fd) six.print_(' RETURN_FALSE;', file=self.fd) six.print_(' }', file=self.fd) six.print_(' lasso_assign_gobject(this->%(name)s, cvt_%(name)s->obj);' % d, file=self.fd) six.print_('}', file=self.fd) six.print_('', file=self.fd) def generate_functions_list(self): six.print_('''\ static zend_function_entry lasso_functions[] = {''', file=self.fd) for m in self.functions_list: six.print_(' PHP_FE(%s, NULL)' % m, file=self.fd) six.print_('''\ {NULL, NULL, NULL, 0, 0} }; ''', file=self.fd) def generate_footer(self): six.print_('''\ zend_module_entry lasso_module_entry = { #if ZEND_MODULE_API_NO >= 20010901 STANDARD_MODULE_HEADER, #endif PHP_LASSO_EXTNAME, lasso_functions, PHP_MINIT(lasso), PHP_MSHUTDOWN(lasso), NULL, NULL, NULL, #if ZEND_MODULE_API_NO >= 20010901 PHP_LASSO_VERSION, #endif STANDARD_MODULE_PROPERTIES }; ''', file=self.fd) lasso-2.8.2/bindings/php7/PaxHeaders/lang.py0000644000000000000000000000013214050545511015670 xustar0030 mtime=1621281609.039310474 30 atime=1678814322.429961395 30 ctime=1678814322.605962397 lasso-2.8.2/bindings/php7/lang.py0000644000175000017500000000272214050545511021143 0ustar00bdauvergnebdauvergne00000000000000# Lasso - A free implementation of the Liberty Alliance specifications. # # Copyright (C) 2004-2007 Entr'ouvert # http://lasso.entrouvert.org # # Authors: See AUTHORS file in top-level directory. # # 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 Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . import os from php7.wrapper_source import WrapperSource from php7.wrapper_header import WrapperHeader from php7.php_code import PhpCode class Binding: def __init__(self, binding_data): self.binding_data = binding_data def generate(self): fd = open('_lasso.c', 'w') wrapper_source = WrapperSource(self.binding_data, fd) wrapper_source.generate() fd.close() fd = open('php_lasso.h', 'w') WrapperHeader(self.binding_data, fd, wrapper_source.functions_list).generate() fd.close() fd = open('lasso.php', 'w') PhpCode(self.binding_data, fd).generate() fd.close() lasso-2.8.2/bindings/php7/PaxHeaders/wrapper_header.py0000644000000000000000000000013114050545511017736 xustar0030 mtime=1621281609.047310384 30 atime=1678814322.433961417 29 ctime=1678814322.60996242 lasso-2.8.2/bindings/php7/wrapper_header.py0000644000175000017500000000362514050545511023215 0ustar00bdauvergnebdauvergne00000000000000# Lasso - A free implementation of the Liberty Alliance specifications. # # Copyright (C) 2004-2007 Entr'ouvert # http://lasso.entrouvert.org # # Authors: See AUTHORS file in top-level directory. # # 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 Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . import six class WrapperHeader: def __init__(self, binding_data, fd, functions_list): self.binding_data = binding_data self.fd = fd self.functions_list = functions_list def generate(self): self.generate_header() self.generate_functions_list() self.generate_footer() def generate_header(self): # FIXME: Get the current version and name six.print_('''\ /* this file has been generated automatically; do not edit */ #include "../../config.h" #ifndef PHP_LASSO_H #define PHP_LASSO_H 1 #define PHP_LASSO_EXTNAME "lasso" #define PHP_LASSO_VERSION VERSION #define PHP_LASSO_SERVER_RES_NAME "Lasso Server" PHP_MINIT_FUNCTION(lasso); PHP_MSHUTDOWN_FUNCTION(lasso); ''', file=self.fd) def generate_functions_list(self): for m in self.functions_list: six.print_('PHP_FUNCTION(%s);' % m, file=self.fd) six.print_('', file=self.fd) def generate_footer(self): six.print_('''\ extern zend_module_entry lasso_module_entry; #define phpext_lasso_ptr &lasso_module_entry #endif ''', file=self.fd) lasso-2.8.2/bindings/php7/PaxHeaders/wrapper_source_top.c0000644000000000000000000000013214114336625020470 xustar0030 mtime=1630649749.794436646 30 atime=1678814322.441961463 30 ctime=1678814322.613962442 lasso-2.8.2/bindings/php7/wrapper_source_top.c0000644000175000017500000002313514114336625023744 0ustar00bdauvergnebdauvergne00000000000000#include #undef PACKAGE_BUGREPORT #undef PACKAGE_NAME #undef PACKAGE_STRING #undef PACKAGE_TARNAME #undef PACKAGE_VERSION #include #include "php_lasso.h" #include "../ghashtable.h" #define LASSO_LOG_STATIC #if defined(__GNUC__) # define lasso_log(level, filename, line, function, format, args...) \ g_log("Lasso", level, "%s:%i:%s" format, filename, line, function, ##args) #elif defined(HAVE_VARIADIC_MACROS) # define lasso_log(level, format, line, function, ...) \ g_log("Lasso", leve, "%s:%i:%s" format, filename, line, function, __VA_ARGS__) #else static inline void lasso_log(GLogLevelFlags level, const char *filename, int line, const char *function, const char *format, ...) { va_list ap; char s[1024]; va_start(ap, format); g_vsnprintf(s, 1024, format, ap); va_end(ap); g_log("Lasso", level, "%s:%i:%s %s", filename, line, function, s); } #define lasso_log lasso_log #endif #include "../../lasso/utils.h" #include "../utils.c" /* utility functions */ static void free_glist(GList **list, GFunc free_function); /* Define the Lasso PHP module */ int le_lasso_server; ZEND_GET_MODULE(lasso) /* Wrapper around GObject to get the dynamic typename */ typedef struct { GObject *obj; char *typename; } PhpGObjectPtr; /** FIXME: implement caching of objects inside GObjects using a GQuark */ static PhpGObjectPtr* PhpGObjectPtr_New(GObject *obj) { PhpGObjectPtr *self; if (obj == NULL) { return NULL; } self = (PhpGObjectPtr *)malloc(sizeof(PhpGObjectPtr)); self->obj = g_object_ref(obj); self->typename = strdup(G_OBJECT_TYPE_NAME(obj)); //printf("Allocating container %p for object %p of type %s with refcnt %i\n", self, obj, self->typename, obj->ref_count); return self; } PHP_FUNCTION(lasso_init) { RETURN_NULL(); } PHP_FUNCTION(lasso_shutdown) { RETURN_NULL(); } PHP_FUNCTION(lasso_get_object_typename) { PhpGObjectPtr *self; zval *zval_self; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &zval_self) == FAILURE) { RETURN_FALSE; } if ((self = (PhpGObjectPtr *)zend_fetch_resource(Z_RES_P(zval_self), PHP_LASSO_SERVER_RES_NAME, le_lasso_server)) == NULL) { RETURN_FALSE; } RETURN_STRING(self->typename); } /* Generic destructor for PHP GObject */ static void php_gobject_generic_destructor(zend_resource *rsrc TSRMLS_DC) { PhpGObjectPtr* gobject = (PhpGObjectPtr*)rsrc->ptr; if (gobject) { if (gobject->obj) { //printf("Deallocating container %p\n", gobject); //printf("Deallocating %p that has %u refcounts\n", gobject->obj, gobject->obj->ref_count); g_object_unref(G_OBJECT(gobject->obj)); //printf("now %u refcounts\n", gobject->obj->ref_count); } if (gobject->typename) { free(gobject->typename); } free(gobject); } } /* List handling */ static void free_glist(GList **list, GFunc free_function) { lasso_return_if_fail(list); if (*list) { if (free_function) { g_list_foreach(*list, free_function, NULL); } g_list_free(*list); } *list = NULL; } /* Conversion functions */ static xmlBuffer* xmlnode_to_xmlbuffer(xmlNode *node) { xmlOutputBufferPtr output_buffer; xmlBuffer *buffer; if (! node) return NULL; buffer = xmlBufferCreate(); output_buffer = xmlOutputBufferCreateBuffer(buffer, NULL); xmlNodeDumpOutput(output_buffer, NULL, node, 0, 0, NULL); xmlOutputBufferClose(output_buffer); xmlBufferAdd(buffer, BAD_CAST "", 1); return buffer; } static char* get_string_from_xml_node(xmlNode *xmlnode) { xmlBuffer *buffer; char *result; if (xmlnode == NULL) { return NULL; } buffer = xmlnode_to_xmlbuffer(xmlnode); if (buffer == NULL) { result = NULL; } else { result = estrdup((char*)xmlBufferContent(buffer)); xmlBufferFree(buffer); } return result; } static xmlNode* get_xml_node_from_string(char *string) { return lasso_string_fragment_to_xmlnode(string, 0); } static GList* get_list_from_array_of_strings(zval* array) { HashTable* hashtable; HashPosition pointer; zval* data; zval temp; GList* result = NULL; hashtable = Z_ARRVAL_P(array); for (zend_hash_internal_pointer_reset_ex(hashtable, &pointer); (data = zend_hash_get_current_data_ex(hashtable, &pointer)) != NULL; zend_hash_move_forward_ex(hashtable, &pointer)) { temp = *data; zval_copy_ctor(&temp); convert_to_string(&temp); result = g_list_append(result, g_strndup(Z_STRVAL(temp), Z_STRLEN(temp))); zval_dtor(&temp); } return result; } static void set_array_from_list_of_strings(GList* list, zval **array) { GList* item; array_init(*array); for (item = g_list_first(list); item != NULL; item = g_list_next(item)) { if (item->data != NULL) { add_next_index_string(*array, item->data); } else { add_next_index_null(*array); } } } static GList* get_list_from_array_of_xmlnodes(zval* array) { HashTable* hashtable; HashPosition pointer; zval* data; zval temp; GList* result = NULL; hashtable = Z_ARRVAL_P(array); for (zend_hash_internal_pointer_reset_ex(hashtable, &pointer); (data = zend_hash_get_current_data_ex(hashtable, &pointer)) != NULL; zend_hash_move_forward_ex(hashtable, &pointer)) { xmlNode *value; temp = *data; zval_copy_ctor(&temp); convert_to_string(&temp); value = get_xml_node_from_string(Z_STRVAL(temp)); if (value) { lasso_list_add_new_xml_node(result, value); } zval_dtor(&temp); } return result; } static void set_array_from_list_of_xmlnodes(GList* list, zval **array) { GList* item; array_init(*array); for (item = g_list_first(list); item != NULL; item = g_list_next(item)) { if (item->data != NULL) { add_next_index_string(*array, get_string_from_xml_node(item->data)); } else { add_next_index_null(*array); } } } static GList* get_list_from_array_of_objects(zval *array) { HashTable *hashtable; HashPosition pointer; zval *data; PhpGObjectPtr *cvt_temp; GList *result = NULL; hashtable = Z_ARRVAL_P(array); for (zend_hash_internal_pointer_reset_ex(hashtable, &pointer); (data = zend_hash_get_current_data_ex(hashtable, &pointer)) != NULL; zend_hash_move_forward_ex(hashtable, &pointer)) { cvt_temp = (PhpGObjectPtr*) zend_fetch_resource(Z_RES_P(data), PHP_LASSO_SERVER_RES_NAME, le_lasso_server); if (cvt_temp != NULL) { g_object_ref(cvt_temp->obj); result = g_list_append(result, cvt_temp->obj); } else { result = g_list_append(result, NULL); } } return result; } static void set_array_from_list_of_objects(GList *list, zval **array) { GList *item = NULL; zend_resource *res_item; zval zval_item; array_init(*array); for (item = g_list_first(list); item != NULL; item = g_list_next(item)) { if (item->data != NULL) { res_item = zend_register_resource(PhpGObjectPtr_New(item->data), le_lasso_server); ZVAL_RES(&zval_item, res_item); add_next_index_zval(*array, &zval_item); } else { add_next_index_null(*array); } } } /* FIXME: This function doesn't work yet */ static GHashTable* get_hashtable_from_array_of_objects(zval *array) { HashTable *hashtable = NULL; HashPosition pointer; zend_string *key; zend_ulong index; zval *data = NULL; PhpGObjectPtr *cvt_temp = NULL; GHashTable *result = NULL; result = g_hash_table_new(g_str_hash, g_str_equal); hashtable = Z_ARRVAL_P(array); for (zend_hash_internal_pointer_reset_ex(hashtable, &pointer); (data = zend_hash_get_current_data_ex(hashtable, &pointer)) != NULL; zend_hash_move_forward_ex(hashtable, &pointer)) { cvt_temp = (PhpGObjectPtr*) zend_fetch_resource(Z_RES_P(data), PHP_LASSO_SERVER_RES_NAME, le_lasso_server); if (zend_hash_get_current_key_ex(hashtable, &key, &index, &pointer) == HASH_KEY_IS_STRING) { g_hash_table_insert(result, ZSTR_VAL(key), lasso_ref(cvt_temp->obj)); } else { /* FIXME: throw an exception */ } } return result; } G_GNUC_UNUSED static GHashTable* get_hashtable_from_array_of_strings(zval *array) { HashTable *hashtable = NULL; HashPosition pointer; zend_string *key = NULL; zend_ulong index; zval *data = NULL; GHashTable *result = NULL; result = g_hash_table_new(g_str_hash, g_str_equal); hashtable = Z_ARRVAL_P(array); for (zend_hash_internal_pointer_reset_ex(hashtable, &pointer); (data = zend_hash_get_current_data_ex(hashtable, &pointer)) != NULL; zend_hash_move_forward_ex(hashtable, &pointer)) { if (Z_TYPE_P(data) == IS_STRING) { if (zend_hash_get_current_key_ex(hashtable, &key, &index, &pointer) == HASH_KEY_IS_STRING) { g_hash_table_insert(result, g_strdup(ZSTR_VAL(key)), g_strdup(Z_STRVAL_P(data))); } else { /* FIXME: throw an exception */ } } } return result; } static void set_array_from_hashtable_of_objects(GHashTable *hashtable, zval **array) { GList *keys = NULL; GObject *item = NULL; zend_resource *res_item; zval zval_item; array_init(*array); for (keys = g_hash_table_get_keys(hashtable); keys; keys = g_list_next(keys)) { item = g_hash_table_lookup(hashtable, keys->data); if (item) { res_item = zend_register_resource(PhpGObjectPtr_New(item), le_lasso_server); ZVAL_RES(&zval_item, res_item); add_assoc_zval(*array, (char*)keys->data, &zval_item); } else { add_assoc_null(*array, (char*)keys->data); } } g_list_free(keys); } G_GNUC_UNUSED static void set_array_from_hashtable_of_strings(GHashTable *hashtable, zval **array) { GList *keys = NULL; zval zval_item; array_init(*array); for (keys = g_hash_table_get_keys(hashtable); keys; keys = g_list_next(keys)) { char *item = g_hash_table_lookup(hashtable, keys->data); if (item) { ZVAL_STRING(&zval_item, item); add_assoc_zval(*array, (char*)keys->data, &zval_item); } else { add_assoc_null(*array, (char*)keys->data); } } g_list_free(keys); } lasso-2.8.2/bindings/php7/PaxHeaders/__init__.py0000644000000000000000000000013214050545511016506 xustar0030 mtime=1621281609.039310474 30 atime=1678814322.425961372 30 ctime=1678814322.613962442 lasso-2.8.2/bindings/php7/__init__.py0000644000175000017500000000000014050545511021744 0ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/bindings/php7/PaxHeaders/tests0000644000000000000000000000013214404126162015462 xustar0030 mtime=1678814322.685962852 30 atime=1678814326.421984131 30 ctime=1678814322.685962852 lasso-2.8.2/bindings/php7/tests/0000755000175000017500000000000014404126162021007 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/bindings/php7/tests/PaxHeaders/Makefile.am0000644000000000000000000000013214050545511017573 xustar0030 mtime=1621281609.039310474 30 atime=1678814114.564790694 30 ctime=1678814322.677962807 lasso-2.8.2/bindings/php7/tests/Makefile.am0000644000175000017500000000036114050545511023043 0ustar00bdauvergnebdauvergne00000000000000MAINTAINERCLEANFILES = Makefile.in if PHP7_ENABLED TESTS_ENVIRONMENT=env "SRCDIR=$(srcdir)/" "PHP7=$(PHP7)" TESTS = profile_tests.sh binding_tests.sh endif EXTRA_DIST = profile_tests.php binding_tests.php profile_tests.sh binding_tests.sh lasso-2.8.2/bindings/php7/tests/PaxHeaders/binding_tests.php0000644000000000000000000000013114050545511021103 xustar0030 mtime=1621281609.039310474 30 atime=1678098073.041512991 29 ctime=1678814322.68196283 lasso-2.8.2/bindings/php7/tests/binding_tests.php0000644000175000017500000001707514050545511024366 0ustar00bdauvergnebdauvergne00000000000000#!/usr/bin/php . require("../lasso.php"); define("DATA_DIR", getenv("SRCDIR") . "../../../tests/data/"); function test01() { echo "Get an xmlNode* from a Lasso function... "; $organisation_string = ' Name of the organization '; $server = new LassoServer( DATA_DIR . "sp1-la/metadata.xml", DATA_DIR . "sp1-la/private-key-raw.pem", NULL, DATA_DIR . "sp1-la/certificate.pem"); assert(!is_null($server->organization)); assert($server->organization == $organisation_string); echo "OK.\n"; } function test02() { echo "Get and set a list of strings... "; $requestAuthnContext = new LassoLibRequestAuthnContext(); $requestAuthnContext->authnContextClassRef = array(LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PASSWORD); assert(! is_null($requestAuthnContext->authnContextClassRef)); assert(sizeof($requestAuthnContext->authnContextClassRef) == 1); assert($requestAuthnContext->authnContextClassRef[0] == LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PASSWORD); echo "OK.\n"; } function test03() { echo "Get and set a list of xmlNode*... "; $server = new LassoServer( DATA_DIR . "sp1-la/metadata.xml", DATA_DIR . "sp1-la/private-key-raw.pem", NULL, DATA_DIR . "sp1-la/certificate.pem"); $server->addProvider( LASSO_PROVIDER_ROLE_IDP, DATA_DIR . "idp1-la/metadata.xml", DATA_DIR . "idp1-la/public-key.pem", DATA_DIR . "idp1-la/certificate.pem"); $login = new LassoLogin($server); $login->initAuthnRequest(); $requestAuthnContext = new LassoLibRequestAuthnContext(); $extension1 = ' do '; $extension2 = ' do action 2do action 3 '; $extensionList = array($extension1, $extension2); $login->request->extension = $extensionList; assert($login->request->extension == $extensionList); assert($login->request->extension[0] == $extension1); assert($login->request->extension[1] == $extension2); echo "OK.\n"; } function test04() { echo "Get and set a list of Lasso objects... "; $response = new LassoSamlpResponse(); assert(!$response->assertion); $assertions = array(); $assertion1 = new LassoSamlAssertion(); $assertion1->assertionId = "assertion 1"; $assertions[] = $assertion1; assert($assertions[0]->assertionId == "assertion 1"); $assertion2 = new LassoSamlAssertion(); $assertion2->assertionId = "assertion 2"; $assertions[] = $assertion2; $response->assertion = $assertions; assert($response->assertion[0]->assertionId == "assertion 1"); assert($response->assertion[1]->assertionId == "assertion 2"); unset($assertions); assert($response->assertion[0]->assertionId == "assertion 1"); assert($response->assertion[1]->assertionId == "assertion 2"); $assertions = $response->assertion; assert($assertions[0]->assertionId == "assertion 1"); assert($assertions[1]->assertionId == "assertion 2"); echo "OK.\n"; } function test05() { echo "Get and set a hashtable of objects... "; $server = new LassoServer( DATA_DIR . "sp1-la/metadata.xml", DATA_DIR . "sp1-la/private-key-raw.pem", NULL, DATA_DIR . "sp1-la/certificate.pem"); $server->addProvider( LASSO_PROVIDER_ROLE_IDP, DATA_DIR . "idp1-la/metadata.xml", DATA_DIR . "idp1-la/public-key.pem", DATA_DIR . "idp1-la/certificate.pem"); assert(!is_null($server->providers)); assert($server->providers["https://idp1/metadata"]->providerId == "https://idp1/metadata"); assert($server->providers["https://idp1/metadata"]->providerId == "https://idp1/metadata"); $tmp_providers = $server->providers; $server->providers = NULL; assert(!$server->providers); $server->providers = $tmp_providers; $provider = $server->providers["https://idp1/metadata"]; assert($server->providers["https://idp1/metadata"]->providerId == "https://idp1/metadata"); echo "OK.\n"; } function test06() { echo "Get and set SAML 2.0 assertion attribute values... "; $attribute1_name = "first attribute"; $attribute1_string = "first string"; $attribute2_name = "second attribute"; $attribute2_string = "second string"; $attribute3_string = "third string"; $expected_assertion_dump = 'first stringsecond stringthird string'; $text_node1 = new LassoMiscTextNode(); $text_node1->content = $attribute1_string; $any1 = array(); $any1[] = $text_node1; $attribute_value1 = new LassoSaml2AttributeValue(); $attribute_value1->any = $any1; $attribute_values1 = array(); $attribute_values1[] = $attribute_value1; $attribute1 = new LassoSaml2Attribute(); $attribute1->name = $attribute1_name; $attribute1->attributeValue = $attribute_values1; $text_node2 = new LassoMiscTextNode(); $text_node2->content = $attribute2_string; $any2 = array(); $any2[] = $text_node2; $attribute_value2 = new LassoSaml2AttributeValue(); $attribute_value2->any = $any2; $text_node3 = new LassoMiscTextNode(); $text_node3->content = $attribute3_string; $any3 = array(); $any3[] = $text_node3; $attribute_value3 = new LassoSaml2AttributeValue(); $attribute_value3->any = $any3; $attribute_values2 = array(); $attribute_values2[] = $attribute_value2; $attribute_values2[] = $attribute_value3; $attribute2 = new LassoSaml2Attribute(); $attribute2->name = $attribute2_name; $attribute2->attributeValue = $attribute_values2; $attributes = array(); $attributes[] = $attribute1; $attributes[] = $attribute2; $attributeStatement = new LassoSaml2AttributeStatement(); $attributeStatement->attribute = $attributes; $attributeStatements = array(); $attributeStatements[] = $attributeStatement; $assertion = new LassoSaml2Assertion(); $assertion->attributeStatement = $attributeStatements; assert($assertion->dump() == $expected_assertion_dump); echo "OK.\n"; } lasso_init(); test01(); test02(); test03(); test04(); //test05(); test06(); lasso_shutdown(); lasso-2.8.2/bindings/php7/tests/PaxHeaders/Makefile.in0000644000000000000000000000013214404125673017612 xustar0030 mtime=1678814139.408929071 30 atime=1678814150.152989063 30 ctime=1678814322.677962807 lasso-2.8.2/bindings/php7/tests/Makefile.in0000644000175000017500000007311514404125673023071 0ustar00bdauvergnebdauvergne00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = bindings/php7/tests ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ac_check_class.m4 \ $(top_srcdir)/m4/ac_check_classpath.m4 \ $(top_srcdir)/m4/ac_check_junit.m4 \ $(top_srcdir)/m4/ac_prog_jar.m4 \ $(top_srcdir)/m4/ac_prog_java.m4 \ $(top_srcdir)/m4/ac_prog_java_works.m4 \ $(top_srcdir)/m4/ac_prog_javac.m4 \ $(top_srcdir)/m4/ac_prog_javac_works.m4 \ $(top_srcdir)/m4/ac_prog_javah.m4 \ $(top_srcdir)/m4/ac_try_compile_java.m4 \ $(top_srcdir)/m4/as-compiler-flag.m4 \ $(top_srcdir)/m4/dps_java_check_class.m4 \ $(top_srcdir)/m4/dps_xtra_classpath.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h \ $(top_builddir)/lasso/lasso_config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/test-driver DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CHECK_CFLAGS = @CHECK_CFLAGS@ CHECK_LIBS = @CHECK_LIBS@ CLASSPATH_JUNIT = @CLASSPATH_JUNIT@ CLASSPATH_OPT = @CLASSPATH_OPT@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CSHARPCILINTERPRETER = @CSHARPCILINTERPRETER@ CSHARPCOMPILER = @CSHARPCOMPILER@ CSHARPCYGPATH_W = @CSHARPCYGPATH_W@ CSHARPDYNAMICLINKING = @CSHARPDYNAMICLINKING@ CSHARPLIBRARYPREFIX = @CSHARPLIBRARYPREFIX@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEBUGGING = @DEBUGGING@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLL_FILENAME = @DLL_FILENAME@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GACUTIL = @GACUTIL@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HTML_DIR = @HTML_DIR@ INKSCAPE = @INKSCAPE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVAC_FLAGS = @JAVAC_FLAGS@ JAVAH = @JAVAH@ JAVAH_FLAGS = @JAVAH_FLAGS@ JAVA_INCLUDE = @JAVA_INCLUDE@ JAVA_JUNIT = @JAVA_JUNIT@ JAVA_VERSION = @JAVA_VERSION@ JDK_INCLUDE = @JDK_INCLUDE@ JNI_EXTRA_LDFLAGS = @JNI_EXTRA_LDFLAGS@ JUNIT = @JUNIT@ LASSO_APP_DEFINES = @LASSO_APP_DEFINES@ LASSO_CFLAGS = @LASSO_CFLAGS@ LASSO_CORE_CFLAGS = @LASSO_CORE_CFLAGS@ LASSO_CORE_LIBS = @LASSO_CORE_LIBS@ LASSO_DEFINES = @LASSO_DEFINES@ LASSO_DOCDIR = @LASSO_DOCDIR@ LASSO_LIBS = @LASSO_LIBS@ LASSO_PUB_CFLAGS = @LASSO_PUB_CFLAGS@ LASSO_STATIC_BINARIES = @LASSO_STATIC_BINARIES@ LASSO_VERSION_INFO = @LASSO_VERSION_INFO@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PERLINSTALLSITEARCH = @PERLINSTALLSITEARCH@ PERLMAN3DIR = @PERLMAN3DIR@ PERL_CFLAGS = @PERL_CFLAGS@ PERL_VERSION = @PERL_VERSION@ PHP5 = @PHP5@ PHP5_CONFIG = @PHP5_CONFIG@ PHP5_CONFIG_DIR = @PHP5_CONFIG_DIR@ PHP5_EXTENSION_DIR = @PHP5_EXTENSION_DIR@ PHP5_INCLUDES = @PHP5_INCLUDES@ PHP5_INCLUDE_DIR = @PHP5_INCLUDE_DIR@ PHP5_LDFLAGS = @PHP5_LDFLAGS@ PHP5_LIBS = @PHP5_LIBS@ PHP5_PREFIX = @PHP5_PREFIX@ PHP5_UNPREFIXED_EXTENSION_DIR = @PHP5_UNPREFIXED_EXTENSION_DIR@ PHP5_VERSION = @PHP5_VERSION@ PHP7 = @PHP7@ PHP7_CONFIG = @PHP7_CONFIG@ PHP7_CONFIG_DIR = @PHP7_CONFIG_DIR@ PHP7_EXTENSION_DIR = @PHP7_EXTENSION_DIR@ PHP7_INCLUDES = @PHP7_INCLUDES@ PHP7_INCLUDE_DIR = @PHP7_INCLUDE_DIR@ PHP7_LDFLAGS = @PHP7_LDFLAGS@ PHP7_LIBS = @PHP7_LIBS@ PHP7_PREFIX = @PHP7_PREFIX@ PHP7_UNPREFIXED_EXTENSION_DIR = @PHP7_UNPREFIXED_EXTENSION_DIR@ PHP7_VERSION = @PHP7_VERSION@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PYTHON = @PYTHON@ PYTHON_VERSION = @PYTHON_VERSION@ PY_CFLAGS = @PY_CFLAGS@ PY_DYNLOAD = @PY_DYNLOAD@ PY_EXTRA_LIBS = @PY_EXTRA_LIBS@ PY_LIB_A = @PY_LIB_A@ PY_LIB_LOC = @PY_LIB_LOC@ PY_SITE_PACKAGES = @PY_SITE_PACKAGES@ RANLIB = @RANLIB@ RC = @RC@ REST2HTML = @REST2HTML@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_VERSION = @SWIG_VERSION@ TAR = @TAR@ TESTS_JUNIT = @TESTS_JUNIT@ UPCASED_DLL_FILENAME = @UPCASED_DLL_FILENAME@ VERSION = @VERSION@ VERSION_UNDERSCORED = @VERSION_UNDERSCORED@ WINDOWS_VERSION = @WINDOWS_VERSION@ XSLTPROC = @XSLTPROC@ Z_CFLAGS = @Z_CFLAGS@ Z_LIBS = @Z_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ uudecode = @uudecode@ MAINTAINERCLEANFILES = Makefile.in @PHP7_ENABLED_TRUE@TESTS_ENVIRONMENT = env "SRCDIR=$(srcdir)/" "PHP7=$(PHP7)" @PHP7_ENABLED_TRUE@TESTS = profile_tests.sh binding_tests.sh EXTRA_DIST = profile_tests.php binding_tests.php profile_tests.sh binding_tests.sh all: all-am .SUFFIXES: .SUFFIXES: .log .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign bindings/php7/tests/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign bindings/php7/tests/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? profile_tests.sh.log: profile_tests.sh @p='profile_tests.sh'; \ b='profile_tests.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) binding_tests.sh.log: binding_tests.sh @p='binding_tests.sh'; \ b='binding_tests.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: all all-am check check-TESTS check-am clean clean-generic \ clean-libtool cscopelist-am ctags-am distclean \ distclean-generic distclean-libtool distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am recheck tags-am \ uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lasso-2.8.2/bindings/php7/tests/PaxHeaders/profile_tests.sh0000644000000000000000000000013114050545511020754 xustar0030 mtime=1621281609.047310384 30 atime=1678098073.041512991 29 ctime=1678814322.68196283 lasso-2.8.2/bindings/php7/tests/profile_tests.sh0000755000175000017500000000017714050545511024235 0ustar00bdauvergnebdauvergne00000000000000#!/bin/sh ${PHP7:?PHP7 variable is not defined} -n -d extension_dir=../.libs -d extension=lasso.so ${SRCDIR}profile_tests.php lasso-2.8.2/bindings/php7/tests/PaxHeaders/binding_tests.sh0000644000000000000000000000013214050545511020727 xustar0030 mtime=1621281609.043310429 30 atime=1678098073.041512991 30 ctime=1678814322.685962852 lasso-2.8.2/bindings/php7/tests/binding_tests.sh0000755000175000017500000000017714050545511024207 0ustar00bdauvergnebdauvergne00000000000000#!/bin/sh ${PHP7:?PHP7 variable is not defined} -n -d extension_dir=../.libs -d extension=lasso.so ${SRCDIR}binding_tests.php lasso-2.8.2/bindings/php7/tests/PaxHeaders/profile_tests.php0000644000000000000000000000013114050545511021131 xustar0030 mtime=1621281609.043310429 29 atime=1678098073.03751296 30 ctime=1678814322.677962807 lasso-2.8.2/bindings/php7/tests/profile_tests.php0000644000175000017500000001633314050545511024410 0ustar00bdauvergnebdauvergne00000000000000#!/usr/bin/php . require("../lasso.php"); define(DATA_DIR, getenv('SRCDIR') . '../../../tests/data/'); function test01() { echo "Server construction, dump & newFromDump... "; $server = new LassoServer( DATA_DIR . "sp1-la/metadata.xml", DATA_DIR . "sp1-la/private-key-raw.pem", NULL, DATA_DIR . "sp1-la/certificate.pem"); $server->addProvider( LASSO_PROVIDER_ROLE_IDP, DATA_DIR . "idp1-la/metadata.xml", DATA_DIR . "idp1-la/public-key.pem", DATA_DIR . "idp1-la/certificate.pem"); $dump = $server->dump(); assert(! is_null($dump)); assert($dump != ""); $server2 = LassoServer::newFromDump($dump); $dump2 = $server2->dump(); assert($dump == $dump2); echo "OK.\n"; } function test02() { echo "Server construction with no optional argument, dump & newFromDump... "; $server = new LassoServer(DATA_DIR . "sp1-la/metadata.xml"); $server->addProvider( LASSO_PROVIDER_ROLE_IDP, DATA_DIR . "idp1-la/metadata.xml", DATA_DIR . "idp1-la/public-key.pem", DATA_DIR . "idp1-la/certificate.pem"); $dump = $server->dump(); $server2 = LassoServer::newFromDump($dump); $dump2 = $server2->dump(); assert($dump == $dump2); echo "OK.\n"; } function test03() { echo "SP login; testing access to authentication request... "; $server = new LassoServer( DATA_DIR . "sp1-la/metadata.xml", DATA_DIR . "sp1-la/private-key-raw.pem", NULL, DATA_DIR . "sp1-la/certificate.pem"); $server->addProvider( LASSO_PROVIDER_ROLE_IDP, DATA_DIR . "idp1-la/metadata.xml", DATA_DIR . "idp1-la/public-key.pem", DATA_DIR . "idp1-la/certificate.pem"); $login = new LassoLogin($server); $result = $login->initAuthnRequest(); assert(! is_null($login->request)); assert(get_class($login->request) == "LassoLibAuthnRequestNoInit"); $dump = $login->request->dump(); $login->request->protocolProfile = LASSO_LIB_PROTOCOL_PROFILE_BRWS_ART; assert($login->request->protocolProfile == LASSO_LIB_PROTOCOL_PROFILE_BRWS_ART); $dump2 = $login->request->dump(); assert($dump != $dump2); echo "OK.\n"; } function test04() { echo "SP login; testing processing of an empty Response... "; $server = new LassoServer( DATA_DIR . "sp1-la/metadata.xml", DATA_DIR . "sp1-la/private-key-raw.pem", NULL, DATA_DIR . "sp1-la/certificate.pem"); $server->addProvider( LASSO_PROVIDER_ROLE_IDP, DATA_DIR . "idp1-la/metadata.xml", DATA_DIR . "idp1-la/public-key.pem", DATA_DIR . "idp1-la/certificate.pem"); $login = new LassoLogin($server); try { $login->processResponseMsg(""); } catch (LassoProfileInvalidMsgError $error) { } echo "OK.\n"; } function test05() { echo "Conversion of a lib:AuthnRequest with an AuthnContext into a query and back... "; $spServer = new LassoServer( DATA_DIR . "sp1-la/metadata.xml", DATA_DIR . "sp1-la/private-key-raw.pem", NULL, DATA_DIR . "sp1-la/certificate.pem"); $spServer->addProvider( LASSO_PROVIDER_ROLE_IDP, DATA_DIR . "idp1-la/metadata.xml", DATA_DIR . "idp1-la/public-key.pem", DATA_DIR . "idp1-la/certificate.pem"); $spLogin = new LassoLogin($spServer); $spLogin->initAuthnRequest(); $requestAuthnContext = new LassoLibRequestAuthnContext(); $requestAuthnContext->authnContextClassRef = array(LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PASSWORD); assert($requestAuthnContext->authnContextClassRef[0] == LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PASSWORD); $spLogin->request->requestAuthnContext = $requestAuthnContext; assert(! is_null($spLogin->request->requestAuthnContext)); $spLogin->request->protocolProfile = LASSO_LIB_PROTOCOL_PROFILE_BRWS_ART; assert($spLogin->request->protocolProfile == LASSO_LIB_PROTOCOL_PROFILE_BRWS_ART); $spLogin->buildAuthnRequestMsg(); assert(! is_null($spLogin->msgUrl)); assert($spLogin->msgUrl != ""); $idpServer = new LassoServer( DATA_DIR . "idp1-la/metadata.xml", DATA_DIR . "idp1-la/private-key-raw.pem", NULL, DATA_DIR . "idp1-la/certificate.pem"); $idpServer->addProvider( LASSO_PROVIDER_ROLE_IDP, DATA_DIR . "sp1-la/metadata.xml", DATA_DIR . "sp1-la/public-key.pem", DATA_DIR . "sp1-la/certificate.pem"); $idpLogin = new LassoLogin($idpServer); list($urlBase, $authnRequestQuery) = explode("?", $spLogin->msgUrl, 2); assert($authnRequestQuery != ""); $idpLogin->processAuthnRequestMsg($authnRequestQuery); assert(! is_null($idpLogin->request)); assert(! is_null($idpLogin->request->requestAuthnContext)); assert($idpLogin->request->requestAuthnContext != ""); assert(sizeof($idpLogin->request->requestAuthnContext->authnContextClassRef) == 1); assert($idpLogin->request->requestAuthnContext->authnContextClassRef[0] == LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PASSWORD); echo "OK.\n"; } function test06() { echo "SP logout without session and identity; testing initRequest... "; $server = new LassoServer( DATA_DIR . "sp1-la/metadata.xml", DATA_DIR . "sp1-la/private-key-raw.pem", NULL, DATA_DIR . "sp1-la/certificate.pem"); $server->addProvider( LASSO_PROVIDER_ROLE_IDP, DATA_DIR . "idp1-la/metadata.xml", DATA_DIR . "idp1-la/public-key.pem", DATA_DIR . "idp1-la/certificate.pem"); $logout = new LassoLogout($server); try { $logout->initRequest(); echo "logout.initRequest without having set identity before should fail\n"; assert(False); } catch (LassoProfileSessionNotFoundError $error) { } echo "OK.\n"; } function test07() { echo "IDP logout without session and identity; testing logout.getNextProviderId... "; $server = new LassoServer( DATA_DIR . "idp1-la/metadata.xml", DATA_DIR . "idp1-la/private-key-raw.pem", NULL, DATA_DIR . "idp1-la/certificate.pem"); $server->addProvider( LASSO_PROVIDER_ROLE_IDP, DATA_DIR . "sp1-la/metadata.xml", DATA_DIR . "sp1-la/public-key.pem", DATA_DIR . "sp1-la/certificate.pem"); $logout = new LassoLogout($server); assert(is_null($logout->next_providerID)); echo "OK.\n"; } test01(); test02(); test03(); test04(); test05(); test06(); test07(); lasso-2.8.2/bindings/php7/PaxHeaders/examples0000644000000000000000000000013214404126162016136 xustar0030 mtime=1678814322.645962625 30 atime=1678814326.421984131 30 ctime=1678814322.645962625 lasso-2.8.2/bindings/php7/examples/0000755000175000017500000000000014404126162021463 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/bindings/php7/examples/PaxHeaders/get_attributes_from_assertion.php0000644000000000000000000000013214050545511025063 xustar0030 mtime=1621281609.039310474 30 atime=1678098072.993512615 30 ctime=1678814322.645962625 lasso-2.8.2/bindings/php7/examples/get_attributes_from_assertion.php0000644000175000017500000000061114050545511030331 0ustar00bdauvergnebdauvergne00000000000000/* Example SP PHP5 code to get attributes from an assertion */ foreach ($assertion->attributeStatement[0]->attribute as $attribute) { if ($attribute->name == LASSO_SAML2_ATTRIBUTE_NAME_EPR) { continue; } echo 'attribute : ' . $attribute->name . "\n"; foreach ($attribute->attributeValue as $value) { echo ' value : ' . $value->any[0]->content . "\n"; } } lasso-2.8.2/bindings/php7/examples/PaxHeaders/Makefile.am0000644000000000000000000000013214050545511020247 xustar0030 mtime=1621281609.039310474 30 atime=1678814114.544790582 30 ctime=1678814322.641962602 lasso-2.8.2/bindings/php7/examples/Makefile.am0000644000175000017500000000012214050545511023512 0ustar00bdauvergnebdauvergne00000000000000MAINTAINERCLEANFILES = Makefile.in EXTRA_DIST = get_attributes_from_assertion.php lasso-2.8.2/bindings/php7/examples/PaxHeaders/Makefile.in0000644000000000000000000000013014404125673020264 xustar0029 mtime=1678814139.38892896 29 atime=1678814150.13298895 30 ctime=1678814322.645962625 lasso-2.8.2/bindings/php7/examples/Makefile.in0000644000175000017500000003712614404125673023547 0ustar00bdauvergnebdauvergne00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = bindings/php7/examples ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ac_check_class.m4 \ $(top_srcdir)/m4/ac_check_classpath.m4 \ $(top_srcdir)/m4/ac_check_junit.m4 \ $(top_srcdir)/m4/ac_prog_jar.m4 \ $(top_srcdir)/m4/ac_prog_java.m4 \ $(top_srcdir)/m4/ac_prog_java_works.m4 \ $(top_srcdir)/m4/ac_prog_javac.m4 \ $(top_srcdir)/m4/ac_prog_javac_works.m4 \ $(top_srcdir)/m4/ac_prog_javah.m4 \ $(top_srcdir)/m4/ac_try_compile_java.m4 \ $(top_srcdir)/m4/as-compiler-flag.m4 \ $(top_srcdir)/m4/dps_java_check_class.m4 \ $(top_srcdir)/m4/dps_xtra_classpath.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h \ $(top_builddir)/lasso/lasso_config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CHECK_CFLAGS = @CHECK_CFLAGS@ CHECK_LIBS = @CHECK_LIBS@ CLASSPATH_JUNIT = @CLASSPATH_JUNIT@ CLASSPATH_OPT = @CLASSPATH_OPT@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CSHARPCILINTERPRETER = @CSHARPCILINTERPRETER@ CSHARPCOMPILER = @CSHARPCOMPILER@ CSHARPCYGPATH_W = @CSHARPCYGPATH_W@ CSHARPDYNAMICLINKING = @CSHARPDYNAMICLINKING@ CSHARPLIBRARYPREFIX = @CSHARPLIBRARYPREFIX@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEBUGGING = @DEBUGGING@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLL_FILENAME = @DLL_FILENAME@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GACUTIL = @GACUTIL@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HTML_DIR = @HTML_DIR@ INKSCAPE = @INKSCAPE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVAC_FLAGS = @JAVAC_FLAGS@ JAVAH = @JAVAH@ JAVAH_FLAGS = @JAVAH_FLAGS@ JAVA_INCLUDE = @JAVA_INCLUDE@ JAVA_JUNIT = @JAVA_JUNIT@ JAVA_VERSION = @JAVA_VERSION@ JDK_INCLUDE = @JDK_INCLUDE@ JNI_EXTRA_LDFLAGS = @JNI_EXTRA_LDFLAGS@ JUNIT = @JUNIT@ LASSO_APP_DEFINES = @LASSO_APP_DEFINES@ LASSO_CFLAGS = @LASSO_CFLAGS@ LASSO_CORE_CFLAGS = @LASSO_CORE_CFLAGS@ LASSO_CORE_LIBS = @LASSO_CORE_LIBS@ LASSO_DEFINES = @LASSO_DEFINES@ LASSO_DOCDIR = @LASSO_DOCDIR@ LASSO_LIBS = @LASSO_LIBS@ LASSO_PUB_CFLAGS = @LASSO_PUB_CFLAGS@ LASSO_STATIC_BINARIES = @LASSO_STATIC_BINARIES@ LASSO_VERSION_INFO = @LASSO_VERSION_INFO@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PERLINSTALLSITEARCH = @PERLINSTALLSITEARCH@ PERLMAN3DIR = @PERLMAN3DIR@ PERL_CFLAGS = @PERL_CFLAGS@ PERL_VERSION = @PERL_VERSION@ PHP5 = @PHP5@ PHP5_CONFIG = @PHP5_CONFIG@ PHP5_CONFIG_DIR = @PHP5_CONFIG_DIR@ PHP5_EXTENSION_DIR = @PHP5_EXTENSION_DIR@ PHP5_INCLUDES = @PHP5_INCLUDES@ PHP5_INCLUDE_DIR = @PHP5_INCLUDE_DIR@ PHP5_LDFLAGS = @PHP5_LDFLAGS@ PHP5_LIBS = @PHP5_LIBS@ PHP5_PREFIX = @PHP5_PREFIX@ PHP5_UNPREFIXED_EXTENSION_DIR = @PHP5_UNPREFIXED_EXTENSION_DIR@ PHP5_VERSION = @PHP5_VERSION@ PHP7 = @PHP7@ PHP7_CONFIG = @PHP7_CONFIG@ PHP7_CONFIG_DIR = @PHP7_CONFIG_DIR@ PHP7_EXTENSION_DIR = @PHP7_EXTENSION_DIR@ PHP7_INCLUDES = @PHP7_INCLUDES@ PHP7_INCLUDE_DIR = @PHP7_INCLUDE_DIR@ PHP7_LDFLAGS = @PHP7_LDFLAGS@ PHP7_LIBS = @PHP7_LIBS@ PHP7_PREFIX = @PHP7_PREFIX@ PHP7_UNPREFIXED_EXTENSION_DIR = @PHP7_UNPREFIXED_EXTENSION_DIR@ PHP7_VERSION = @PHP7_VERSION@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PYTHON = @PYTHON@ PYTHON_VERSION = @PYTHON_VERSION@ PY_CFLAGS = @PY_CFLAGS@ PY_DYNLOAD = @PY_DYNLOAD@ PY_EXTRA_LIBS = @PY_EXTRA_LIBS@ PY_LIB_A = @PY_LIB_A@ PY_LIB_LOC = @PY_LIB_LOC@ PY_SITE_PACKAGES = @PY_SITE_PACKAGES@ RANLIB = @RANLIB@ RC = @RC@ REST2HTML = @REST2HTML@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_VERSION = @SWIG_VERSION@ TAR = @TAR@ TESTS_JUNIT = @TESTS_JUNIT@ UPCASED_DLL_FILENAME = @UPCASED_DLL_FILENAME@ VERSION = @VERSION@ VERSION_UNDERSCORED = @VERSION_UNDERSCORED@ WINDOWS_VERSION = @WINDOWS_VERSION@ XSLTPROC = @XSLTPROC@ Z_CFLAGS = @Z_CFLAGS@ Z_LIBS = @Z_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ uudecode = @uudecode@ MAINTAINERCLEANFILES = Makefile.in EXTRA_DIST = get_attributes_from_assertion.php all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign bindings/php7/examples/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign bindings/php7/examples/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lasso-2.8.2/bindings/php7/PaxHeaders/php_code.py0000644000000000000000000000013114117162531016530 xustar0030 mtime=1631380825.848637964 30 atime=1678814322.437961441 29 ctime=1678814322.60996242 lasso-2.8.2/bindings/php7/php_code.py0000644000175000017500000004646414117162531022017 0ustar00bdauvergnebdauvergne00000000000000# Lasso - A free implementation of the Liberty Alliance specifications. # # Copyright (C) 2004-2007 Entr'ouvert # http://lasso.entrouvert.org # # Authors: See AUTHORS file in top-level directory. # # 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 Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . import re import sys import six from utils import * class PhpCode: def __init__(self, binding_data, fd): self.binding_data = binding_data self.fd = fd def is_object(self, t): return is_object(t) and not is_int(t, self.binding_data) def generate(self): self.generate_header() for klass in self.binding_data.structs: self.generate_class(klass) self.generate_exceptions() self.generate_footer() def generate_header(self): six.print_('''\ _cptr = $cptr; return $obj; } return null; } function lassoGetRequestTypeFromSoapMsg($mesg) { return lasso_get_request_type_from_soap_msg($mesg); } ''', file=self.fd) def generate_class(self, klass): class_name = klass.name if klass.parent != 'GObject': inheritence = ' extends %s' % klass.parent else: inheritence = ' extends LassoObject' six.print_('/**', file=self.fd) six.print_(' * @package Lasso', file=self.fd) six.print_(' */', file=self.fd) six.print_('class %(class_name)s%(inheritence)s {' % locals(), file=self.fd) if klass.members or klass.methods: self.generate_constructors(klass) self.generate_getters_and_setters(klass) self.generate_methods(klass) six.print_('}', file=self.fd) six.print_('', file=self.fd) # Add a special class to get an object instance without initialising six.print_('/**', file=self.fd) six.print_(' * @package Lasso', file=self.fd) six.print_(' */', file=self.fd) six.print_('class %(class_name)sNoInit extends %(class_name)s {' % locals(), file=self.fd) six.print_(' public function __construct() {}', file=self.fd) six.print_('}', file=self.fd) six.print_('', file=self.fd) def generate_constructors(self, klass): method_prefix = format_as_underscored(klass.name) + '_' for m in self.binding_data.functions: name = m.rename or m.name if m.name == method_prefix + 'new': php_args = [] c_args = [] for arg in m.args: arg_type, arg_name, arg_options = arg if arg_options.get('optional'): php_args.append('$%s = null' % arg_name) else: php_args.append('$%s' % arg_name) if self.is_object(arg_type): c_args.append('$%s->_cptr' % arg_name) else: c_args.append('$%s' % arg_name) php_args = ', '.join(php_args) c_args = ', '.join(c_args) # XXX: could check $this->_cptr->typename to see if it got the # right class type six.print_(' public $_cptr = null;', file=self.fd) six.print_('', file=self.fd) six.print_(' public function __construct(%s) {' % php_args, file=self.fd) six.print_(' $this->_cptr = %s(%s);' % (m.name, c_args), file=self.fd) six.print_(' if (is_null($this->_cptr)) { throw new Exception("Constructor for ', klass.name, ' failed "); }', file=self.fd) six.print_(' }', file=self.fd) six.print_('', file=self.fd) elif name.startswith(method_prefix) and m.args \ and clean_type(unconstify(m.args[0][0])) != klass.name: if m.rename: php_name = m.rename else: mname = m.name mname = mname[len(method_prefix):] if 'new' in mname and not mname.startswith('new'): continue php_name = format_underscore_as_camelcase(mname) php_args = [] c_args = [] for arg in m.args: arg_type, arg_name, arg_options = arg if arg_options.get('optional'): php_args.append('$%s = null' % arg_name) else: php_args.append('$%s' % arg_name) if self.is_object(arg_type): c_args.append('$%s->_cptr' % arg_name) else: c_args.append('$%s' % arg_name) php_args = ', '.join(php_args) c_args = ', '.join(c_args) six.print_(' public static function %s(%s) {' % (php_name, php_args), file=self.fd) six.print_(' return cptrToPhp(%s(%s));' % (m.name, c_args), file=self.fd) six.print_(' }', file=self.fd) six.print_('', file=self.fd) def generate_getter(self, c, m): d = { 'type': arg_type(m), 'name': format_as_camelcase(arg_name(m)), 'docstring': self.get_docstring_return_type(arg_type(m)), 'class': c.name } six.print_('''\ /** * @return %(docstring)s */ protected function get_%(name)s() {''' % d, file=self.fd) six.print_(' $t = %(class)s_%(name)s_get($this->_cptr);' % d, file=self.fd) if self.is_object(m): six.print_(' $t = cptrToPhp($t);', file=self.fd) elif (is_glist(m) or is_hashtable(m)) and self.is_object(element_type(m)): six.print_(' foreach ($t as $key => $item) {', file=self.fd) six.print_(' $t[$key] = cptrToPhp($item);', file=self.fd) six.print_(' }', file=self.fd) elif is_hashtable(m) or (is_glist(m) and (is_cstring(element_type(m)) \ or is_xml_node(element_type(m)))) or is_int(m, self.binding_data) \ or is_boolean(m) or is_cstring(m) or is_xml_node(m): pass else: raise Exception('Cannot generate a Php getter %s.%s' % (c,m)) six.print_(' return $t;', file=self.fd) six.print_(' }', file=self.fd) def generate_setter(self, c, m): d = { 'type': arg_type(m), 'name': format_as_camelcase(arg_name(m)), 'docstring': self.get_docstring_return_type(arg_type(m)), 'class': c.name } six.print_(' protected function set_%(name)s($value) {' % d, file=self.fd) if self.is_object(m): six.print_(' $value = $value->_cptr;', file=self.fd) elif (is_glist(m) or is_hashtable(m)) and self.is_object(element_type(m)): six.print_(' $array = array();', file=self.fd) six.print_(' if (!is_null($value)) {', file=self.fd) six.print_(' foreach ($value as $key => $item) {', file=self.fd) six.print_(' $array[$key] = $item->_cptr;', file=self.fd) six.print_(' }', file=self.fd) six.print_(' }', file=self.fd) six.print_(' $value = $array;', file=self.fd) elif is_hashtable(m) or (is_glist(m) and (is_cstring(element_type(m)) \ or is_xml_node(element_type(m)))) or is_int(m, self.binding_data) \ or is_boolean(m) or is_cstring(m) or is_xml_node(m): pass else: raise Exception('Cannot generate a Php setter %s.%s' % (c,m)) six.print_(' %(class)s_%(name)s_set($this->_cptr, $value);' % d, file=self.fd) six.print_(' }', file=self.fd) six.print_('', file=self.fd) def generate_getters_and_setters(self, klass): for m in klass.members: self.generate_getter(klass, m) self.generate_setter(klass, m) def generate_methods(self, klass): methods = klass.methods[:] # first pass on methods, removing accessors for m in klass.methods: if m.rename: meth_name = m.rename else: meth_name = m.name if not ('_get_' in meth_name and len(m.args) == 1): continue methods.remove(m) try: setter_name = meth_name.replace('_get_', '_set_') setter = [x for x in methods if x.name == setter_name][0] methods.remove(setter) except IndexError: setter = None mname = re.match(r'lasso_.*_get_(\w+)', meth_name).group(1) mname = format_as_camelcase(mname) six.print_(' /**', file=self.fd) six.print_(' * @return %s' % self.get_docstring_return_type(m.return_type), file=self.fd) six.print_(' */', file=self.fd) six.print_(' protected function get_%s() {' % mname, file=self.fd) if self.is_object(m.return_type): six.print_(' $cptr = %s($this->_cptr);' % meth_name, file=self.fd) six.print_(' if (! is_null($cptr)) {', file=self.fd) six.print_(' return cptrToPhp($cptr);', file=self.fd) six.print_(' }', file=self.fd) six.print_(' return null;', file=self.fd) else: six.print_(' return %s($this->_cptr);' % meth_name, file=self.fd) six.print_(' }', file=self.fd) if setter: six.print_(' protected function set_%s($value) {' % mname, file=self.fd) if self.is_object(m.return_type): six.print_(' %s($this->_cptr, $value->_cptr);' % setter.name, file=self.fd) else: six.print_(' %s($this->_cptr, $value);' % setter.name, file=self.fd) six.print_(' }', file=self.fd) six.print_('', file=self.fd) # second pass on methods, real methods method_prefix = format_as_underscored(klass.name) + '_' for m in methods: if m.name.endswith('_new') or m.name.endswith('_new_from_dump') or \ m.name.endswith('_new_full'): continue if not m.name.startswith(method_prefix): print >> sys.stderr, 'W:', m.name, 'vs', method_prefix continue if m.rename: mname = m.rename else: mname = m.name cname = mname mname = mname[len(method_prefix):] php_args = [] c_args = [] outarg = None for arg in m.args[1:]: arg_type, arg_name, arg_options = arg arg_name = '$' + arg_name if is_out(arg): assert not outarg outarg = arg if arg_options.get('optional'): if arg_options.get('default'): defval = arg_options.get('default') if defval.startswith('c:'): # constant php_args.append('%s = %s' % (arg_name, defval[2:])) elif defval.startswith('b:'): # boolean php_args.append('%s = %s' % (arg_name, defval[2:])) else: print >> sys.stderr, "E: don't know what to do with %s" % defval sys.exit(1) else: php_args.append('%s = null' % arg_name) else: php_args.append(arg_name) if is_xml_node(arg) or is_boolean(arg) or is_cstring(arg) or \ is_int(arg, self.binding_data) or is_glist(arg) or \ is_hashtable(arg) or is_time_t_pointer(arg): c_args.append(arg_name) elif self.is_object(arg): c_args.append('%s->_cptr' % arg_name) else: raise Exception('Does not handle argument of type: %s' % ((m, arg),)) if is_out(arg): php_args.pop() php_args.append(arg_name) c_args.pop() c_args.append(arg_name) if php_args: php_args = ', '.join(php_args) else: php_args = '' if c_args: c_args = ', ' + ', '.join(c_args) else: c_args = '' if m.docstring: six.print_(self.generate_docstring(m, mname, 4), file=self.fd) six.print_(' public function %s(%s) {' % ( format_underscore_as_camelcase(mname), php_args), file=self.fd) if m.return_type == 'void': six.print_(' %s($this->_cptr%s);' % (cname, c_args), file=self.fd) elif is_rc(m.return_type): six.print_(' $rc = %s($this->_cptr%s);' % (cname, c_args), file=self.fd) six.print_(' if ($rc == 0) {', file=self.fd) six.print_(' return 0;', file=self.fd) six.print_(' } else if ($rc > 0) {', file=self.fd) # recoverable error six.print_(' return $rc;', file=self.fd) six.print_(' } else if ($rc < 0) {', file=self.fd) # unrecoverable error six.print_(' LassoError::throw_on_rc($rc);', file=self.fd) six.print_(' }', file=self.fd) else: six.print_(' return %s($this->_cptr%s);' % (cname, c_args), file=self.fd) six.print_(' }', file=self.fd) six.print_('', file=self.fd) six.print_('', file=self.fd) def generate_docstring(self, func, method_name, indent): docstring = func.docstring.orig_docstring if func.args: first_arg_name = func.args[0][1] else: first_arg_name = None def rep(s): type = s.group(1)[0] var = s.group(1)[1:] if type == '#': # struct return var elif type == '%': # %TRUE, %FALSE if var in ('TRUE', 'FALSE'): return var print >> sys.stderr, 'W: unknown docstring thingie \'%s\' in \'%s\'' % (s.group(1), func.docstring.orig_docstring) elif type == '@': if var == first_arg_name: return '$this' else: return '$' + var return s.group(1) lines = [] for l in docstring.splitlines(): if l.strip() and not lines: continue lines.append(l) s = indent * ' ' + '/**\n' s += '\n'.join([indent * ' ' + ' * ' + x for x in lines[1:]]) s += '\n' + indent * ' ' + ' */' regex = re.compile(r'([\#%@]\w+)', re.DOTALL) s = regex.sub(rep, s) s = s.replace('Return value: ', '@return %s ' % self.get_docstring_return_type(func.return_type)) return s def get_docstring_return_type(self, return_type): if return_type == None: return '' elif return_type == 'gboolean': return 'boolean' elif return_type in ['int', 'gint'] + self.binding_data.enums: return 'int' elif return_type in ('char*', 'gchar*', 'const char*', 'const gchar*', 'xmlNode*'): return 'string' elif return_type in ('GList*', 'GHashTable*'): return 'array' else: # Objects return return_type.replace('*', '') def generate_exceptions(self): done_cats = [] for exc_cat in self.binding_data.overrides.findall('exception/category'): cat = exc_cat.attrib.get('name') done_cats.append(cat) parent_cat = exc_cat.attrib.get('parent', '') six.print_('''\ /** * @package Lasso */ class Lasso%sError extends Lasso%sError {} ''' % (cat, parent_cat), file=self.fd) exceptions_dict = {} for c in self.binding_data.constants: m = re.match(r'LASSO_(\w+)_ERROR_(.*)', c[1]) if not m: continue cat, detail = m.groups() cat = cat.title().replace('_', '') detail = (cat + '_' + detail).title().replace('_', '') if not cat in done_cats: done_cats.append(cat) for exc_cat in self.binding_data.overrides.findall('exception/category'): if exc_cat.attrib.get('name') == cat: parent_cat = exc_cat.attrib.get('parent') break else: parent_cat = '' six.print_('''\ /** * @package Lasso */ class Lasso%sError extends Lasso%sError {} ''' % (cat, parent_cat), file=self.fd) if detail not in exceptions_dict: six.print_('''\ /** * @package Lasso */ class Lasso%sError extends Lasso%sError { protected $code = %s; } ''' % (detail, cat, c[1]), file=self.fd) exceptions_dict[detail] = c[1] six.print_('''\ /** * @package Lasso */ class LassoError extends Exception { private static $exceptions_dict = array(''', file=self.fd) for k, v in exceptions_dict.items(): six.print_(' %s => "Lasso%sError",' % (v, k), file=self.fd) six.print_('''\ ); public static function throw_on_rc($rc) { $exception = self::$exceptions_dict[$rc]; if (! class_exists($exception)) { $exception = "LassoError"; } throw new $exception(strError($rc), $rc); } } ''', file=self.fd) def generate_footer(self): six.print_('''\ ?>''', file=self.fd) lasso-2.8.2/bindings/PaxHeaders/ghashtable.h0000644000000000000000000000013014114336625015775 xustar0030 mtime=1630649749.790436603 28 atime=1678814245.1735231 30 ctime=1678814321.585956589 lasso-2.8.2/bindings/ghashtable.h0000644000175000017500000000361614114336625021255 0ustar00bdauvergnebdauvergne00000000000000#ifndef G_HASHTABLE_H #define G_HASHTABLE_H 1 #if (GLIB_MAJOR_VERSION == 2 && GLIB_MINOR_VERSION < 14) #include "../lasso/utils.h" typedef struct _GHashNode GHashNode; struct _GHashNode { gpointer key; gpointer value; GHashNode *next; guint key_hash; }; struct _GHashTable { gint size; gint nnodes; GHashNode **nodes; GHashFunc hash_func; GEqualFunc key_equal_func; volatile gint ref_count; GDestroyNotify key_destroy_func; GDestroyNotify value_destroy_func; }; /* Helper functions to access JNI interface functions */ #if (GLIB_MAJOR_VERSION == 2 && GLIB_MINOR_VERSION < 12) static gboolean return_true(G_GNUC_UNUSED gpointer a, G_GNUC_UNUSED gpointer b, G_GNUC_UNUSED gpointer c) { return TRUE; } G_GNUC_UNUSED static void g_hash_table_remove_all (GHashTable *hash_table) { lasso_return_if_fail(hash_table != NULL); g_hash_table_foreach_remove (hash_table, (GHRFunc)return_true, NULL); } #endif /* copy of private struct and g_hash_table_get_keys from GLib internals * (as this function is useful but new in 2.14) */ G_GNUC_UNUSED static GList * g_hash_table_get_keys (GHashTable *hash_table) { GHashNode *node; gint i; GList *retval; lasso_return_val_if_fail(hash_table != NULL, NULL); retval = NULL; for (i = 0; i < hash_table->size; i++) for (node = hash_table->nodes[i]; node; node = node->next) retval = g_list_prepend (retval, node->key); return retval; } G_GNUC_UNUSED static GList * g_hash_table_get_values (GHashTable *hash_table) { GHashNode *node; gint i; GList *retval; lasso_return_val_if_fail(hash_table != NULL, NULL); retval = NULL; for (i = 0; i < hash_table->size; i++) for (node = hash_table->nodes[i]; node; node = node->next) retval = g_list_prepend (retval, node->value); return retval; } #endif #endif /* G_HASHTABLE_H */ lasso-2.8.2/bindings/PaxHeaders/bindings.py0000644000000000000000000000013214117162531015667 xustar0030 mtime=1631380825.844637909 30 atime=1678814250.389552583 30 ctime=1678814321.581956567 lasso-2.8.2/bindings/bindings.py0000644000175000017500000005653614117162531021156 0ustar00bdauvergnebdauvergne00000000000000#! /usr/bin/env python # # Lasso - A free implementation of the Liberty Alliance specifications. # # Copyright (C) 2004-2007 Entr'ouvert # http://lasso.entrouvert.org # # Authors: See AUTHORS file in top-level directory. # # 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 Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . import os import re from six import print_, PY3 import sys from utils import * if PY3: do_open = lambda *args, **kwargs: open(*args, encoding='utf-8', **kwargs) else: do_open = open from optparse import OptionParser try: from lxml import etree as ET except ImportError: try: import cElementTree as ET except ImportError: try: import elementtree.ElementTree as ET except ImportError: import xml.etree.ElementTree as ET sys.path.append(os.path.dirname(__file__)) # monkey patch os.path to include relpath if python version is < 2.6 if not hasattr(os.path, "relpath"): def relpath(longPath, basePath): if not longPath.startswith(basePath): raise RuntimeError("Unexpected arguments") if longPath == basePath: return "." i = len(basePath) if not basePath.endswith(os.path.sep): i += len(os.path.sep) return longPath[i:] os.path.relpath = relpath class BindingData: src_dir = os.path.dirname(__file__) def __init__(self, options = None): self.headers = [] # [(char,string)] # where char is: # - i: integer # - s: string self.constants = [] self.structs = [] self.struct_dict = {} self.functions = [] self.enums = [] self.options = options self.overrides = ET.parse(os.path.join(self.src_dir, 'overrides.xml')) self.functions_toskip = dict() self.structs_toskip = dict() for func in self.overrides.findall('func'): if func.attrib.get('skip') == 'true': self.functions_toskip[func.attrib.get('name')] = 1 for struct in self.overrides.findall('struct'): if struct.attrib.get('skip') == 'true': self.structs_toskip[struct.attrib.get('name')] = 1 def match_tag_language(self,tag): if self.options and self.options.language: languages = tag.attrib.get('language') if languages: lang_list = languages.split(' ') if self.options.language in lang_list: return True else: return False else: return True else: return True def display_structs(self): for struct in self.structs: struct.display() def display_funcs(self): for func in self.functions: print(func.return_type, func.name) for a in func.args: print(' ', a) def order_class_hierarchy(self): new_order = [] while self.structs: for c in self.structs: if c.parent == 'GObject' or c.parent in [x.name for x in new_order]: self.structs.remove(c) new_order.append(c) break self.structs = new_order def create_struct_dict(self): for c in self.structs: self.struct_dict[c.name] = c def attach_methods(self): self.create_struct_dict() for f in self.functions[:]: if len(f.args) == 0: continue if f.name.endswith('_new') or '_new_' in f.name: # constructor for another class continue arg_type = f.args[0][0] if arg_type[-1] == '*': arg_type = arg_type[:-1] arg_type = arg_type.replace('const ','') c = self.struct_dict.get(arg_type) if not c: continue c.methods.append(f) if f.docstring and f.docstring.parameters: # remove first parameter, which is self/this/etc. f.docstring.parameters = f.docstring.parameters[1:] self.functions.remove(f) def look_for_docstrings(self, srcdir, exception_doc): def getfunc(name): funcs = [f for f in self.functions if f.name == name] if not funcs: return None else: return funcs[0] regex = re.compile(r'\/\*\*\s(.*?)\*\/', re.DOTALL) for base, dirnames, filenames in os.walk(srcdir): bname = os.path.basename(base) if bname == '.svn': # ignore svn directories continue if not 'Makefile.am' in filenames: # not a source dir continue makefile_am = do_open(os.path.join(base, 'Makefile.am')).read() filenames = [x for x in filenames if x.endswith('.c') if x in makefile_am] for filename in filenames: s = do_open(os.path.join(base, filename)).read() docstrings = regex.findall(s) for d in docstrings: docstring = '\n'.join([x[3:] for x in d.splitlines()]) function_name = docstring.splitlines(1)[0].strip().strip(':') func = getfunc(function_name) if not func: continue func.docstring = DocString(func, docstring, self) if exception_doc: lines = os.popen('perl ../utility-scripts/error-analyzer.pl %s' % srcdir, 'r').readlines() for line in lines: elts = re.split(r' +',line.strip()) func = getfunc(elts[0]) if func: func.errors = elts[1:] class Struct: def __init__(self, name): self.name = name[1:] # skip leading _ self.parent = None self.members = [] self.methods = [] def __repr__(self): return '' % (self.name, self.parent) def display(self): print(self.__repr__()) for m in self.members: print(' ', m) for m in self.methods: print(' ', m) def getMember(self, name): l = [m for m in self.members if arg_name(m) == name] if l: return l[0] else: return None def getMethod(self, name): l = [m for m in self.methods if m.name == name] if l: return l[0] else: return None toskip = None class Function: return_type = None return_type_qualifier = None return_arg = None name = None rename = None args = None docstring = None return_owner = True skip = False errors = None def __repr__(self): return '' % ( self.return_arg, self.name, self.args) def apply_overrides(self): for func in binding.overrides.findall('func'): if not binding.match_tag_language(func): continue if func.attrib.get('name') != self.name: continue for param in func.findall('param'): try: arg = [x for x in self.args if x[1] == param.attrib.get('name')][0] except IndexError: print_('W: no such param (%s) in function (%s)' % ( param.attrib.get('name'), self.name), file=sys.stderr) continue if param.attrib.get('optional') == 'true': arg[2]['optional'] = True if param.attrib.get('default'): arg[2]['default'] = param.attrib.get('default') if param.attrib.get('type'): arg[0] = param.attrib.get('type') if param.attrib.get('elem_type'): arg[2]['element-type'] = param.attrib.get('elem_type') if func.attrib.get('rename'): self.rename = func.attrib.get('rename') if func.attrib.get('return_owner'): self.return_owner = (func.attrib.get('return_owner') != 'false') if func.attrib.get('return_type'): self.return_type = func.attrib.get('return_type') if func.attrib.get('skip'): skip = func.attrib.get('skip') if skip == 'true': self.skip = True elif binding.options.language in skip.split(','): self.skip = True if func.attrib.get('return_type_qualifier'): self.return_type_qualifier = func.attrib.get('return_type_qualifier') for param in binding.overrides.findall('arg'): if not binding.match_tag_language(param): continue arg_name = param.attrib.get('name') arg_sub = param.attrib.get('rename') if arg_name and arg_sub: args = [ x for x in self.args if x[1] == arg_name] for arg in args: arg[2]['original-name'] = arg[1] arg[1] = arg_sub class DocString: orig_docstring = None parameters = None return_value = None description = None def __init__(self, function, docstring, binding_data): self.binding_data = binding_data self.orig_docstring = docstring self.parameters = [] self.params = {} lines = docstring.splitlines() # ignore the first line, it has the symbol name lines = lines[1:] # look for parameters while lines[0].strip(): if not self.parameters and not lines[0].startswith('@'): # function without parameters break if not self.parameters: self.parameters = [] if lines[0][0] == '@': splits = lines[0][1:].split(':', 2) param_name = splits[0] if len(splits) > 2: param_options = splits[1] param_desc = splits[2] self.parameters.append([param_name, param_desc, param_options]) self.params[param_name] = { 'desc': param_desc, 'options': param_options } for a in function.args: if a[1] == param_name or a[2].get('original-name') == param_name: arg = a break else: raise Exception('should not happen ' + param_name + ' ' + lines[0] + repr(function)) self.annotation2arg(arg, param_options) else: param_desc = splits[1] self.parameters.append([param_name, param_desc]) self.params[param_name] = { 'desc': param_desc } else: # continuation of previous description self.parameters[-1][1] = self.parameters[-1][1] + ' ' + lines[0].strip() lines = lines[1:] # blank line then description, till the end or the return value lines = lines[1:] self.description = '' while not lines[0].startswith('Return value'): self.description += lines[0] + '\n' if len(lines) == 1: self.description = self.description.strip() return lines = lines[1:] self.description = self.description.strip() # return value if lines[0].startswith('Return value') or lines[0].startswith('Returns'): lines[0] = lines[0].split(':', 1)[1] accu = '' while lines[0].strip(): accu = accu + ' ' + lines[0].strip() if len(lines) == 1: break lines = lines[1:] # find GObject-introspection annotations if re.match(r'\s*\(', accu): annotation, accu = accu.split(':', 1) self.annotation2arg(function.return_arg, annotation) self.return_value = accu.strip() # remove leading space def annotation2arg(self, arg, annotation): '''Convert GObject-introspection annotations to arg options''' if 'allow-none' in annotation: arg[2]['optional'] = True if re.search(r'\(\s*out\s*\)', annotation): arg[2]['out'] = True if re.search(r'\(\s*in\s*\)', annotation): arg[2]['in'] = True m = re.search(r'\(\s*default\s*([^ )]*)\s*\)', annotation) if m: prefix = '' if is_boolean(arg): prefix = 'b:' elif is_int(arg, self.binding_data): prefix = 'c:' else: raise Exception('should not happen: could not found type for default: ' + annotation) arg[2]['default'] = prefix + m.group(1) arg[2]['optional'] = True m = re.search(r'\(\s*element-type\s+([\w*]+)(?:\s+([\w*]+))?', annotation) if m: if len(m.groups()) > 2: arg[2]['key-type'] = \ convert_type_from_gobject_annotation(m.group(1)) arg[2]['value-type'] = \ convert_type_from_gobject_annotation(m.group(2)) else: arg[2]['element-type'] = \ convert_type_from_gobject_annotation(m.group(1)) m = re.search(r'\(\s*transfer\s+(\w+)', annotation) if m: arg[2]['transfer'] = m.group(1) def normalise_var(type, name): if name[0] == '*': type += '*' name = name[1:] return type, name exclude_private = True def parse_header(header_file): global binding struct_names = {} in_comment = False in_enum = False in_struct = None in_struct_private = False in_ifdef_zero = False lines = do_open(header_file).readlines() i = 0 while i < len(lines): line = lines[i] while line.endswith('\\\n'): i += 1 line = line[:-2] + ' ' + lines[i].lstrip() if in_comment: if '*/' in line: in_comment = False elif '/*' in line and not '*/' in line: in_comment = True elif in_ifdef_zero: # minimal support for code sections commented with #if 0 if line.startswith('#endif'): in_ifdef_zero = False elif line.startswith('#if 0'): in_ifdef_zero = True elif in_enum: if line.startswith('}'): in_enum = False enum_name = line[2:].strip().strip(';') binding.enums.append(enum_name) else: m = re.match('\s*([a-zA-Z0-9_]+)', line) if m: binding.constants.append(('i', m.group(1))) elif line.startswith('#define'): m = re.match(r'#define\s+([a-zA-Z0-9_]+)\s+([-\w"]+)', line) if m: constant_name = m.group(1) if constant_name[0] != '_': # ignore private constants if '"' in line: constant_type = 's' elif m.group(2).startswith('LASSO_'): l = [ c for c in binding.constants if m.group(2) == c[1] ] if l: contant_type = l[0][0] else: raise Exception() else: constant_type = 'i' constant = (constant_type, constant_name) binding.constants.append(constant) elif line.startswith('typedef enum {'): in_enum = True elif line.startswith('typedef struct'): m = re.match('typedef struct ([a-zA-Z0-9_]+)', line) if m: struct_name = m.group(1) if not (struct_name.endswith('Class') or struct_name.endswith('Private')): struct_names[struct_name] = True elif line.startswith('struct _'): m = re.match('struct ([a-zA-Z0-9_]+)', line) struct_name = m.group(1) if struct_name in struct_names: in_struct = Struct(struct_name) in_struct_private = False elif in_struct: if line.startswith('}'): if not in_struct.name in binding.structs_toskip: binding.structs.append(in_struct) else: print_('W: skipping structure %s due to overrides.xml' % in_struct.name, file=sys.stderr) in_struct = None elif '/*< public >*/' in line: in_struct_private = False elif '/*< private >*/' in line: in_struct_private = True elif in_struct_private and exclude_private: pass elif 'DEPRECATED' in line and exclude_private: pass else: # TODO: Add parsing of OFTYPE # Transform struct to typedef # example: "struct _LassoAssertion" -> "LassoAssertion" line = re.sub('\s+struct _', ' ', line) member_match = re.match('\s+(\w+)\s+(\*?\w+)', line) if member_match: member_type, member_name = normalise_var(member_match.group(1), member_match.group(2)) field = (member_type, member_name, {}) if member_type == 'void*': print_('W: skipping field %s.%s' % (in_struct.name, member_name), file=sys.stderr) else: if is_glist(field) or is_hashtable(field): found = re.search(r' of ([^*]*)', line) if found: field[2]['element-type'] = clean_type(found.group(1)) if member_name == 'parent': in_struct.parent = member_type else: in_struct.members.append(field) elif line.startswith('LASSO_EXPORT '): while not line.strip().endswith(';'): i += 1 line = line[:-1] + ' ' + lines[i].lstrip() # parse the type, then the name, then argument list m = re.match(r'LASSO_EXPORT\s+([^(]*(?:\s|\*))(\w+)\s*\(\s*(.*?)\s*\)\s*;', line) if m and (not exclude_private or not m.group(2).endswith('_get_type')): return_type, function_name, args = m.groups() return_type = return_type.strip() f = Function() if function_name[0] == '*': return_type += '*' function_name = function_name[1:] if binding.functions_toskip.get(function_name) != 1: if re.search(r'\', return_type): f.return_owner = False # clean the type return_type = clean_type(return_type) if return_type != 'void': f.return_type = return_type f.return_arg = (return_type, None, {}) if function_name.endswith('_destroy') and exclude_private: # skip the _destroy functions, they are just wrapper over # g_object_unref pass else: f.name = function_name f.args = [] for arg in [x.strip() for x in args.split(',')]: arg = clean_type(arg) if arg == 'void' or arg == '': continue m = re.match(r'(.*(?:\s|\*))(\w+)', arg) if m: type, name = m.groups() type = clean_type(type) f.args.append(list((type, name, {}))) else: print_('failed to process:', arg, 'in line:', line, file=sys.stderr) f.skip = True f.apply_overrides() if not f.skip: binding.functions.append(f) else: print_('W: skipping function', f, file=sys.stderr) i += 1 def parse_headers(srcdir): srcdir = os.path.abspath(srcdir) parentdir = os.path.dirname(srcdir) exclusion = ('xml_idff.h', 'xml_saml2.h', 'xml_soap11.h', 'lasso_config.h', 'saml2_xsd.h' ) for base, dirnames, filenames in os.walk(srcdir): dirnames.sort() filenames.sort() bname = os.path.basename(base) if bname == '.svn': # ignore svn directories continue if not 'Makefile.am' in filenames: # not a source dir continue makefile_am = open(os.path.join(base, 'Makefile.am')).read() filenames = [x for x in filenames if x.endswith('.h') if x in makefile_am] for filename in filenames: if filename in exclusion: continue if 'private' in filename: continue header_path = os.path.join(base, filename) header_relpath = os.path.relpath(header_path, parentdir) binding.headers.append(header_relpath) parse_header(header_path) def main(): global binding parser = OptionParser() parser.add_option('-l', '--language', dest = 'language') parser.add_option('-s', '--src-dir', dest = 'srcdir', default = '../lasso/') parser.add_option('--enable-exception-docs', dest= 'exception_doc', action = 'store_true') options, args = parser.parse_args() if not options.language: parser.print_help() sys.exit(1) binding = BindingData(options) parse_headers(options.srcdir) binding.look_for_docstrings(options.srcdir, options.exception_doc) binding.order_class_hierarchy() binding.attach_methods() if options.language == 'python': from python import lang python_binding = lang.Binding(binding) python_binding.generate() elif options.language == 'php5': from php5 import lang php5_binding = lang.Binding(binding) php5_binding.generate() elif options.language == 'php7': from php7 import lang php7_binding = lang.Binding(binding) php7_binding.generate() elif options.language == 'java': from java import lang java_binding = lang.Binding(binding) java_binding.generate() elif options.language == 'java-list': from java import lang java_binding = lang.Binding(binding) java_binding.print_list_of_files() elif options.language == 'perl': from perl import lang perl_binding = lang.Binding(binding) perl_binding.generate() if __name__ == '__main__': main() lasso-2.8.2/bindings/PaxHeaders/overrides.xml0000644000000000000000000000013214117162531016244 xustar0030 mtime=1631380825.844637909 30 atime=1678814250.457552969 30 ctime=1678814321.581956567 lasso-2.8.2/bindings/overrides.xml0000644000175000017500000002003114117162531021510 0ustar00bdauvergnebdauvergne00000000000000 lasso-2.8.2/bindings/PaxHeaders/perl0000644000000000000000000000012614404126162014407 xustar0028 mtime=1678814322.7819634 30 atime=1678814326.421984131 28 ctime=1678814322.7819634 lasso-2.8.2/bindings/perl/0000755000175000017500000000000014404126162017731 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/bindings/perl/PaxHeaders/Makefile.am0000644000000000000000000000013214364261206016521 xustar0030 mtime=1674666630.722768971 30 atime=1678814114.392789737 30 ctime=1678814322.757963262 lasso-2.8.2/bindings/perl/Makefile.am0000644000175000017500000000455414364261206022001 0ustar00bdauvergnebdauvergne00000000000000if HAVE_AM_SILENT_RULES AM_V_SUBMAKE = $(am__v_SUBMAKE_$(V)) am__v_SUBMAKE_ = $(am__v_SUBMAKE_$(AM_DEFAULT_VERBOSITY)) am__v_SUBMAKE_0 = @echo " SUBMAKE " $@; LOG=`mktemp tmp.XXXXXXXX`; ( AM_V_SUBMAKE_POSTFIX = $(am__v_SUBMAKE_POSTFIX_$(V)) am__v_SUBMAKE_POSTFIX_ = $(am__v_SUBMAKE_POSTFIX_$(AM_DEFAULT_VERBOSITY)) am__v_SUBMAKE_POSTFIX_0 = 2>&1 >$$LOG && rm $$LOG ) || ( cat $$LOG; rm $$LOG ) endif MAINTAINERCLEANFILES = Makefile.in DISTCLEANFILES = __init__.pyc lang.pyc Makefile.perl.old CLEANFILES = Lasso.pm Lasso.xs Lasso.so typemap Lasso.o Lasso.bs pm_to_blib Lasso.c LASSO_XS_CFLAGS = -fno-strict-aliasing $(LASSO_CFLAGS) $(LASSO_CORE_CFLAGS) $(PERL_CFLAGS) $(AM_CFLAGS) -Wno-unused-but-set-variable TESTS_ENVIRONMENT=TOP_SRCDIR=$(top_srcdir) TESTS = test.sh if PERL_ENABLED AM_CPPFLAGS = \ -I$(top_builddir) \ -I$(top_srcdir) \ $(SASL_CFLAGS) all: blib/arch/auto/Lasso/Lasso.so Lasso.pm TOCOPY=gobject_handling.c glist_handling.c ghashtable_handling.c Makefile.PL \ LassoNode.xs test.pl t EXTRA_DIST=$(TOCOPY) typemap-in typemap-out lang.py __init__.py test.sh # Copy if out of a build Makefile.perl: $(srcdir)/Makefile.PL Lasso.xs Lasso.pm $(AM_V_GEN) if [ "$(srcdir)" != "$(builddir)" ]; then \ for file in $(TOCOPY); do \ if [ $(srcdir)/$$file -nt $$file ]; then cp -Rf $(srcdir)/$$file .; fi; \ done; \ chmod -R u+rwX $(TOCOPY); \ fi; $(AM_V_SUBMAKE) $(PERL) Makefile.PL INSTALLDIRS=vendor DESTDIR=$(DESTDIR) PREFIX=$(prefix) CCFLAGS="$(LASSO_XS_CFLAGS)" INC="-I. -I$(top_srcdir) -I$(srcdir)" LIBS="`$(top_builddir)/lasso-src-config --libs` $(LDFLAGS)" OPTIMIZE="-g" $(AM_V_SUBMAKE_POSTFIX) Lasso.xs Lasso.pm: lang.py typemap-in typemap-out $(AM_V_GEN) $(PYTHON) $(top_srcdir)/bindings/bindings.py -l perl --src-dir=$(top_srcdir)/lasso/ $(EXTRA_ARGS) blib/arch/auto/Lasso/Lasso.so: Lasso.xs Lasso.pm Makefile.perl gobject_handling.c LassoNode.xs glist_handling.c $(AM_V_SUBMAKE) make -f Makefile.perl $(AM_V_SUBMAKE_POSTFIX) distclean-local: -@if [ "$(srcdir)" != "$(builddir)" ]; then \ rm -rf $(TOCOPY); \ fi clean-local: -@if [ -f Makefile.perl ]; then make -f Makefile.perl clean; fi; rm -f Makefile.perl install-exec-local: Makefile.perl make -f Makefile.perl install uninstall-local: -@rm -rf `find $(DESTDIR)$(prefix) -name Lasso.pm -or -name Lasso.so -or -name Lasso.bs -or -name .packlist -or -name perllocal.pod` test.sh: Makefile.perl endif lasso-2.8.2/bindings/perl/PaxHeaders/typemap-out0000644000000000000000000000013213766621500016676 xustar0030 mtime=1608196928.726895006 30 atime=1678814273.165681516 30 ctime=1678814322.777963377 lasso-2.8.2/bindings/perl/typemap-out0000644000175000017500000000232613766621500022151 0ustar00bdauvergnebdauvergne00000000000000OUTPUT T_GOBJECT_WRAPPER $arg = gperl_new_object((GObject*)$var, FALSE); T_XMLNODE_OWN $arg = xmlnode_to_pv($var, TRUE); T_XMLNODE $arg = xmlnode_to_pv($var, FALSE); T_GLIST_STRING { I32 ix, length; length = g_list_length((GList*)$var); EXTEND(SP, length); for (ix = 0; ix < length; ++ix) { ST(ix) = sv_2mortal(newSVpv((char*)$var->data, 0)); $var = $var->next; } if (length) XSRETURN(length); else XSRETURN_EMPTY; } T_GLIST_XMLNODE { I32 ix, length; length = g_list_length((GList*)$var); EXTEND(SP, length); for (ix = 0; ix < length; ++ix) { ST(ix) = sv_2mortal(xmlnode_to_pv((xmlNode*)$var->data, FALSE)); $var = $var->next; } if (length) XSRETURN(length); else XSRETURN_EMPTY; } T_GLIST_GOBJECT { I32 ix, length; length = g_list_length((GList*)$var); EXTEND(SP, length); for (ix = 0; ix < length; ++ix) { ST(ix) = sv_2mortal(gperl_new_object((GObject*)$var->data, FALSE)); $var = $var->next; } if (length) XSRETURN(length); else XSRETURN_EMPTY; } lasso-2.8.2/bindings/perl/PaxHeaders/Makefile.in0000644000000000000000000000013214404125673016534 xustar0030 mtime=1678814139.260928245 30 atime=1678814150.168989151 30 ctime=1678814322.761963286 lasso-2.8.2/bindings/perl/Makefile.in0000644000175000017500000010060514404125673022006 0ustar00bdauvergnebdauvergne00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = bindings/perl ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ac_check_class.m4 \ $(top_srcdir)/m4/ac_check_classpath.m4 \ $(top_srcdir)/m4/ac_check_junit.m4 \ $(top_srcdir)/m4/ac_prog_jar.m4 \ $(top_srcdir)/m4/ac_prog_java.m4 \ $(top_srcdir)/m4/ac_prog_java_works.m4 \ $(top_srcdir)/m4/ac_prog_javac.m4 \ $(top_srcdir)/m4/ac_prog_javac_works.m4 \ $(top_srcdir)/m4/ac_prog_javah.m4 \ $(top_srcdir)/m4/ac_try_compile_java.m4 \ $(top_srcdir)/m4/as-compiler-flag.m4 \ $(top_srcdir)/m4/dps_java_check_class.m4 \ $(top_srcdir)/m4/dps_xtra_classpath.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h \ $(top_builddir)/lasso/lasso_config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/test-driver DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CHECK_CFLAGS = @CHECK_CFLAGS@ CHECK_LIBS = @CHECK_LIBS@ CLASSPATH_JUNIT = @CLASSPATH_JUNIT@ CLASSPATH_OPT = @CLASSPATH_OPT@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CSHARPCILINTERPRETER = @CSHARPCILINTERPRETER@ CSHARPCOMPILER = @CSHARPCOMPILER@ CSHARPCYGPATH_W = @CSHARPCYGPATH_W@ CSHARPDYNAMICLINKING = @CSHARPDYNAMICLINKING@ CSHARPLIBRARYPREFIX = @CSHARPLIBRARYPREFIX@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEBUGGING = @DEBUGGING@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLL_FILENAME = @DLL_FILENAME@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GACUTIL = @GACUTIL@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HTML_DIR = @HTML_DIR@ INKSCAPE = @INKSCAPE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVAC_FLAGS = @JAVAC_FLAGS@ JAVAH = @JAVAH@ JAVAH_FLAGS = @JAVAH_FLAGS@ JAVA_INCLUDE = @JAVA_INCLUDE@ JAVA_JUNIT = @JAVA_JUNIT@ JAVA_VERSION = @JAVA_VERSION@ JDK_INCLUDE = @JDK_INCLUDE@ JNI_EXTRA_LDFLAGS = @JNI_EXTRA_LDFLAGS@ JUNIT = @JUNIT@ LASSO_APP_DEFINES = @LASSO_APP_DEFINES@ LASSO_CFLAGS = @LASSO_CFLAGS@ LASSO_CORE_CFLAGS = @LASSO_CORE_CFLAGS@ LASSO_CORE_LIBS = @LASSO_CORE_LIBS@ LASSO_DEFINES = @LASSO_DEFINES@ LASSO_DOCDIR = @LASSO_DOCDIR@ LASSO_LIBS = @LASSO_LIBS@ LASSO_PUB_CFLAGS = @LASSO_PUB_CFLAGS@ LASSO_STATIC_BINARIES = @LASSO_STATIC_BINARIES@ LASSO_VERSION_INFO = @LASSO_VERSION_INFO@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PERLINSTALLSITEARCH = @PERLINSTALLSITEARCH@ PERLMAN3DIR = @PERLMAN3DIR@ PERL_CFLAGS = @PERL_CFLAGS@ PERL_VERSION = @PERL_VERSION@ PHP5 = @PHP5@ PHP5_CONFIG = @PHP5_CONFIG@ PHP5_CONFIG_DIR = @PHP5_CONFIG_DIR@ PHP5_EXTENSION_DIR = @PHP5_EXTENSION_DIR@ PHP5_INCLUDES = @PHP5_INCLUDES@ PHP5_INCLUDE_DIR = @PHP5_INCLUDE_DIR@ PHP5_LDFLAGS = @PHP5_LDFLAGS@ PHP5_LIBS = @PHP5_LIBS@ PHP5_PREFIX = @PHP5_PREFIX@ PHP5_UNPREFIXED_EXTENSION_DIR = @PHP5_UNPREFIXED_EXTENSION_DIR@ PHP5_VERSION = @PHP5_VERSION@ PHP7 = @PHP7@ PHP7_CONFIG = @PHP7_CONFIG@ PHP7_CONFIG_DIR = @PHP7_CONFIG_DIR@ PHP7_EXTENSION_DIR = @PHP7_EXTENSION_DIR@ PHP7_INCLUDES = @PHP7_INCLUDES@ PHP7_INCLUDE_DIR = @PHP7_INCLUDE_DIR@ PHP7_LDFLAGS = @PHP7_LDFLAGS@ PHP7_LIBS = @PHP7_LIBS@ PHP7_PREFIX = @PHP7_PREFIX@ PHP7_UNPREFIXED_EXTENSION_DIR = @PHP7_UNPREFIXED_EXTENSION_DIR@ PHP7_VERSION = @PHP7_VERSION@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PYTHON = @PYTHON@ PYTHON_VERSION = @PYTHON_VERSION@ PY_CFLAGS = @PY_CFLAGS@ PY_DYNLOAD = @PY_DYNLOAD@ PY_EXTRA_LIBS = @PY_EXTRA_LIBS@ PY_LIB_A = @PY_LIB_A@ PY_LIB_LOC = @PY_LIB_LOC@ PY_SITE_PACKAGES = @PY_SITE_PACKAGES@ RANLIB = @RANLIB@ RC = @RC@ REST2HTML = @REST2HTML@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_VERSION = @SWIG_VERSION@ TAR = @TAR@ TESTS_JUNIT = @TESTS_JUNIT@ UPCASED_DLL_FILENAME = @UPCASED_DLL_FILENAME@ VERSION = @VERSION@ VERSION_UNDERSCORED = @VERSION_UNDERSCORED@ WINDOWS_VERSION = @WINDOWS_VERSION@ XSLTPROC = @XSLTPROC@ Z_CFLAGS = @Z_CFLAGS@ Z_LIBS = @Z_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ uudecode = @uudecode@ @HAVE_AM_SILENT_RULES_TRUE@AM_V_SUBMAKE = $(am__v_SUBMAKE_$(V)) @HAVE_AM_SILENT_RULES_TRUE@am__v_SUBMAKE_ = $(am__v_SUBMAKE_$(AM_DEFAULT_VERBOSITY)) @HAVE_AM_SILENT_RULES_TRUE@am__v_SUBMAKE_0 = @echo " SUBMAKE " $@; LOG=`mktemp tmp.XXXXXXXX`; ( @HAVE_AM_SILENT_RULES_TRUE@AM_V_SUBMAKE_POSTFIX = $(am__v_SUBMAKE_POSTFIX_$(V)) @HAVE_AM_SILENT_RULES_TRUE@am__v_SUBMAKE_POSTFIX_ = $(am__v_SUBMAKE_POSTFIX_$(AM_DEFAULT_VERBOSITY)) @HAVE_AM_SILENT_RULES_TRUE@am__v_SUBMAKE_POSTFIX_0 = 2>&1 >$$LOG && rm $$LOG ) || ( cat $$LOG; rm $$LOG ) MAINTAINERCLEANFILES = Makefile.in DISTCLEANFILES = __init__.pyc lang.pyc Makefile.perl.old CLEANFILES = Lasso.pm Lasso.xs Lasso.so typemap Lasso.o Lasso.bs pm_to_blib Lasso.c LASSO_XS_CFLAGS = -fno-strict-aliasing $(LASSO_CFLAGS) $(LASSO_CORE_CFLAGS) $(PERL_CFLAGS) $(AM_CFLAGS) -Wno-unused-but-set-variable TESTS_ENVIRONMENT = TOP_SRCDIR=$(top_srcdir) TESTS = test.sh @PERL_ENABLED_TRUE@AM_CPPFLAGS = \ @PERL_ENABLED_TRUE@ -I$(top_builddir) \ @PERL_ENABLED_TRUE@ -I$(top_srcdir) \ @PERL_ENABLED_TRUE@ $(SASL_CFLAGS) @PERL_ENABLED_TRUE@TOCOPY = gobject_handling.c glist_handling.c ghashtable_handling.c Makefile.PL \ @PERL_ENABLED_TRUE@ LassoNode.xs test.pl t @PERL_ENABLED_TRUE@EXTRA_DIST = $(TOCOPY) typemap-in typemap-out lang.py __init__.py test.sh all: all-am .SUFFIXES: .SUFFIXES: .log .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign bindings/perl/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign bindings/perl/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test.sh.log: test.sh @p='test.sh'; \ b='test.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) @PERL_ENABLED_FALSE@clean-local: @PERL_ENABLED_FALSE@distclean-local: @PERL_ENABLED_FALSE@install-exec-local: @PERL_ENABLED_FALSE@uninstall-local: clean: clean-am clean-am: clean-generic clean-libtool clean-local mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-local dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-exec-local install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-local .MAKE: check-am install-am install-strip .PHONY: all all-am check check-TESTS check-am clean clean-generic \ clean-libtool clean-local cscopelist-am ctags-am distclean \ distclean-generic distclean-libtool distclean-local distdir \ dvi dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-exec-local install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags-am uninstall uninstall-am uninstall-local .PRECIOUS: Makefile @PERL_ENABLED_TRUE@all: blib/arch/auto/Lasso/Lasso.so Lasso.pm # Copy if out of a build @PERL_ENABLED_TRUE@Makefile.perl: $(srcdir)/Makefile.PL Lasso.xs Lasso.pm @PERL_ENABLED_TRUE@ $(AM_V_GEN) if [ "$(srcdir)" != "$(builddir)" ]; then \ @PERL_ENABLED_TRUE@ for file in $(TOCOPY); do \ @PERL_ENABLED_TRUE@ if [ $(srcdir)/$$file -nt $$file ]; then cp -Rf $(srcdir)/$$file .; fi; \ @PERL_ENABLED_TRUE@ done; \ @PERL_ENABLED_TRUE@ chmod -R u+rwX $(TOCOPY); \ @PERL_ENABLED_TRUE@ fi; @PERL_ENABLED_TRUE@ $(AM_V_SUBMAKE) $(PERL) Makefile.PL INSTALLDIRS=vendor DESTDIR=$(DESTDIR) PREFIX=$(prefix) CCFLAGS="$(LASSO_XS_CFLAGS)" INC="-I. -I$(top_srcdir) -I$(srcdir)" LIBS="`$(top_builddir)/lasso-src-config --libs` $(LDFLAGS)" OPTIMIZE="-g" $(AM_V_SUBMAKE_POSTFIX) @PERL_ENABLED_TRUE@Lasso.xs Lasso.pm: lang.py typemap-in typemap-out @PERL_ENABLED_TRUE@ $(AM_V_GEN) $(PYTHON) $(top_srcdir)/bindings/bindings.py -l perl --src-dir=$(top_srcdir)/lasso/ $(EXTRA_ARGS) @PERL_ENABLED_TRUE@blib/arch/auto/Lasso/Lasso.so: Lasso.xs Lasso.pm Makefile.perl gobject_handling.c LassoNode.xs glist_handling.c @PERL_ENABLED_TRUE@ $(AM_V_SUBMAKE) make -f Makefile.perl $(AM_V_SUBMAKE_POSTFIX) @PERL_ENABLED_TRUE@distclean-local: @PERL_ENABLED_TRUE@ -@if [ "$(srcdir)" != "$(builddir)" ]; then \ @PERL_ENABLED_TRUE@ rm -rf $(TOCOPY); \ @PERL_ENABLED_TRUE@ fi @PERL_ENABLED_TRUE@clean-local: @PERL_ENABLED_TRUE@ -@if [ -f Makefile.perl ]; then make -f Makefile.perl clean; fi; rm -f Makefile.perl @PERL_ENABLED_TRUE@install-exec-local: Makefile.perl @PERL_ENABLED_TRUE@ make -f Makefile.perl install @PERL_ENABLED_TRUE@uninstall-local: @PERL_ENABLED_TRUE@ -@rm -rf `find $(DESTDIR)$(prefix) -name Lasso.pm -or -name Lasso.so -or -name Lasso.bs -or -name .packlist -or -name perllocal.pod` @PERL_ENABLED_TRUE@test.sh: Makefile.perl # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lasso-2.8.2/bindings/perl/PaxHeaders/test.sh0000644000000000000000000000013014050545511015772 xustar0030 mtime=1621281609.031310565 30 atime=1678098073.141513777 28 ctime=1678814322.7819634 lasso-2.8.2/bindings/perl/test.sh0000755000175000017500000000011114050545511021240 0ustar00bdauvergnebdauvergne00000000000000#!/bin/bash LD_LIBRARY_PATH=../../lasso/.libs make -f Makefile.perl test lasso-2.8.2/bindings/perl/PaxHeaders/LassoNode.xs0000644000000000000000000000013213766621500016732 xustar0030 mtime=1608196928.726895006 30 atime=1678814273.985686164 30 ctime=1678814322.765963308 lasso-2.8.2/bindings/perl/LassoNode.xs0000644000175000017500000000237313766621500022207 0ustar00bdauvergnebdauvergne00000000000000void DESTROY (SV *sv) CODE: GObject *object = gperl_get_object (sv); if (!object) /* Happens on object destruction. */ return; #ifdef NOISY warn ("DESTROY< (%p)[%d] => %s (%p)[%d]\n", object, object->ref_count, gperl_object_package_from_type (G_OBJECT_TYPE (object)), sv, SvREFCNT (SvRV(sv))); #endif /* gobject object still exists, so take back the refcount we lend it. */ /* this operation does NOT change the refcount of the combined object. */ if (PL_in_clean_objs) { /* be careful during global destruction. basically, * don't bother, since refcounting is no longer meaningful. */ sv_unmagic (SvRV (sv), PERL_MAGIC_ext); g_object_steal_qdata (object, wrapper_quark); } else { SvREFCNT_inc (SvRV (sv)); if (object->ref_count > 1) { /* become undead */ SV *obj = SvRV(sv); update_wrapper (object, MAKE_UNDEAD(obj)); /* printf("zombies! [%p] (%p)\n", object, obj);*/ } } g_object_unref (object); #ifdef NOISY warn ("DESTROY> (%p) done\n", object); #endif lasso-2.8.2/bindings/perl/PaxHeaders/lang.py0000644000000000000000000000013214117162531015755 xustar0030 mtime=1631380825.848637964 30 atime=1678814273.157681471 30 ctime=1678814322.777963377 lasso-2.8.2/bindings/perl/lang.py0000644000175000017500000005124314117162531021232 0ustar00bdauvergnebdauvergne00000000000000# Lasso - A free implementation of the Liberty Alliance specifications. # # Copyright (C) 2004-2007 Entr'ouvert # http://lasso.entrouvert.org # # Authors: See AUTHORS file in top-level directory. # # 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 Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . import os import os.path import sys import re from six import print_ from utils import * class Output(object): def __init__(self, filename, indent = 4): self.fd = open(filename, 'w') self.indent_stack = [0] self.indent_size = indent def pn(self, s = ''): print_((' ' * self.indent_stack[-1]) + s, file=self.fd) def p(self, s = ''): print_(s, file=self.fd, end="") def close(self): self.fd.close() def indent(self, c = None): if not c: c = self.indent_size self.indent_stack.append(c) def unindent(self): self.indent_stack.pop() package_top = '''package Lasso; use strict; use warnings; require XSLoader; XSLoader::load('Lasso'); ''' class Binding: xs = None pm = None typemap = None binding_data = None def __init__(self, binding_data): self.binding_data = binding_data self.src_dir = os.path.dirname(__file__) self.xs = Output('Lasso.xs') self.pm = Output('Lasso.pm') self.typemap = Output('typemap') def file_content(self, filename): return open(os.path.join(self.src_dir, filename)).read() def generate(self): # Generate XS self.generate_typemap() self.generate_xs_header() self.generate_xs_constants() self.generate_xs_functions() self.generate_xs_footer() # Generate PM self.generate_pm_header() # Generate self.generate_exceptions() for clss in self.binding_data.structs: self.generate_class(clss) def generate_typemap(self): self.typemap.pn('TYPEMAP') self.typemap.pn(''' string_or_null\tT_STRING_OR_NULL string_non_null\tT_STRING_NON_NULL const gchar *\tT_PV gchar *\tT_PV gboolean\tT_IV const LassoProvider *\tT_GOBJECT_WRAPPER xmlNode*\tT_XMLNODE const xmlNode*\tT_XMLNODE GList_string\tT_GLIST_STRING GList_xmlnode\tT_GLIST_XMLNODE GList_gobject\tT_GLIST_GOBJECT GList_string_const\tT_GLIST_STRING GList_gobject_const\tT_GLIST_GOBJECT const GList*\tT_GLIST_STRING GHashTable*\tT_PTRREF ''') # Map integer types for int in [ 'lasso_error_t', 'int', 'gint', 'long', 'glong'] + self.binding_data.enums: self.typemap.pn('%-30s T_IV' % int) # Map object types for clss in self.binding_data.structs: self.typemap.pn('%-30s T_GOBJECT_WRAPPER' % (clss.name + '*')) self.typemap.pn('const %-30s T_GOBJECT_WRAPPER' % (clss.name + '*')) # Create INPUT & OUTPUT maps self.typemap.p(self.file_content('typemap-in')) self.typemap.p(self.file_content('typemap-out')) def generate_pm_header(self): # Lasso.pm self.pm.p(package_top) for struct in self.binding_data.structs: if struct.name != 'LassoNode': self.pm.pn('package Lasso::%s;' % struct.name[5:]) self.pm.pn('our @ISA = qw(Lasso::%s);' % struct.parent[5:]) self.pm.pn() def generate_xs_header(self): '''Generate header of XS file''' self.xs.pn(''' #include "EXTERN.h" #include "perl.h" #include "XSUB.h" #include #if defined(__GNUC__) # define lasso_log(level, filename, line, function, format, args...) \ g_log("Lasso", level, "%s:%i:%s" format, filename, line, function, ##args) #elif defined(HAVE_VARIADIC_MACROS) # define lasso_log(level, format, line, function, ...) \ g_log("Lasso", leve, "%s:%i:%s" format, filename, line, function, __VA_ARGS__) #else static inline void lasso_log(GLogLevelFlags level, const char *filename, int line, const char *function, const char *format, ...) { va_list ap; char s[1024]; va_start(ap, format); g_vsnprintf(s, 1024, format, ap); va_end(ap); g_log("Lasso", level, "%s:%i:%s %s", filename, line, function, s); } #define lasso_log lasso_log #endif #include "gobject_handling.c" #include "glist_handling.c" #include "ghashtable_handling.c" #define lasso_assign_simple(a,b) a = b; typedef char* string_non_null; typedef char* string_or_null; typedef GList* GList_string; typedef GList* GList_gobject; typedef GList* GList_xmlnode; typedef const GList* GList_string_const; typedef const GList* GList_gobject_const; /* #include "ppport.h" */''') for h in self.binding_data.headers: self.xs.pn('#include <%s>' % h) self.xs.pn(''' MODULE = Lasso PACKAGE = Lasso::Node INCLUDE: LassoNode.xs ''') self.xs.pn('MODULE = Lasso PACKAGE = Lasso PREFIX = lasso_ ') self.xs.pn() self.xs.pn('PROTOTYPES: ENABLE') self.xs.pn() def generate_xs_constants(self): '''Generate a function which can return an int from a string''' self.xs.pn('''BOOT: { SV *ct; HV *stash; init_perl_lasso(); stash = gv_stashpv("Lasso::Constants", 1);''') self.xs.indent() for constant in self.binding_data.constants: type, name = constant perl_name = name[6:] if False: self.xs.pn('ct = get_sv("Lasso::Constants::%s", TRUE | GV_ADDMULTI);' % perl_name) if type == 'i': self.xs.pn('sv_setiv(ct, %s);' % name) elif type == 's': self.xs.pn('sv_setpv(ct, %s);' % name) elif type == 'b': self.xs.unindent() self.xs.pn('''#ifdef %s sv_setiv(ct, 1); #else sv_setiv(ct, 0); #endif''' % name) self.xs.indent() else: raise Exception('Unknown constant type: type: "%s" name: "%s"' % (type,name)) self.xs.pn('SvREADONLY_on (ct);') else: if type == 'i': self.xs.pn('ct = newSViv(%s);' % name) elif type == 's': self.xs.pn('ct = newSVpv((char*)%s, 0);' % name) elif type == 'b': self.xs.unindent() self.xs.pn('''#ifdef %s ct = newSViv(1); #else ct = newSViv(0); #endif''' % name) self.xs.indent() self.xs.pn('newCONSTSUB(stash, "%s", ct);' % perl_name) self.xs.unindent() self.xs.pn('}') def generate_exceptions(self): '''Generate class for exceptions Generate a generic Error which can call lasso_strerror and a mapping from rc code to Exception class ''' for c in self.binding_data.constants: m = re.match(r'LASSO_(\w+)_ERROR_(.*)', c[1]) if not m: continue cat, detail = m.groups() def generate_xs_footer(self): '''Generate footer of XS file''' pass def generate_class(self, clss): klassname = clss.name pass def default_value(self, arg): default = arg_default(arg) if default[0] == 'b': return default[2:] elif default[0] == 'c': return default[2:] else: raise Exception('Unknown default value for %s' % (arg,)) def generate_xs_function(self, func, prefix = None): cleanup = [] name = func.name self.xs.pn() if not func.return_type or not is_glist(func.return_arg): self.xs.pn(func.return_type or 'void') elif is_glist(func.return_arg): try: self.xs.pn(self.glist_type(func.return_arg)) except: print_('failed', func.return_arg, func, file=sys.stderr) raise self.xs.p(name + '(') arg_list = [] out_list = [] arg_names = [] if name.endswith('_new'): arg_list.append('char *cls') arg_names.append('cls') for arg in func.args: decl = '' aname = arg_name(arg) if is_out(arg): arg_names.append(aname) if not is_int(arg, self.binding_data) and is_object(arg): decl = unconstify(arg_type(arg))[:-1] + ' &' + aname + ' = NO_INIT' out_list.append(aname) else: raise Exception('Out arg of type: %s is not supported' % (arg,)) else: if is_cstring(arg): if is_optional(arg): decl = 'string_or_null %s' % aname else: decl = 'string_non_null %s' % aname elif not is_glist(arg): decl = '%s %s' % (unconstify(arg_type(arg)), aname) else: decl = '%s %s' % (self.glist_type(arg), aname) if is_optional(arg): if arg_default(arg): arg_names.append(aname + ' = ' + self.default_value(arg)) else: if is_cstring(arg) or is_glist(arg) or is_xml_node(arg) or is_object(arg): arg_names.append(aname + ' = NULL') else: raise Exception('Do not know what to do for optional: %s' % arg) else: arg_names.append(aname) arg_list.append(decl) # Cleanup code, for by-reference arguments if is_glist(arg) and not is_transfer_full(arg): cleanup.append(self.release_list(arg_name(arg), arg)) if is_xml_node(arg) and not is_transfer_full(arg): cleanup.append('lasso_release_xml_node(%s)' % arg_name(arg)) if is_hashtable(arg): raise Exception("No cleanup code generation for GHashTable") self.xs.p(','.join(arg_names)) self.xs.pn(')') for decl in arg_list: self.xs.pn(' %s' % (decl,)) if name.endswith('_new'): self.xs.pn(' INIT:') self.xs.pn(' cls = NULL;') self.xs.pn(' C_ARGS:') self.xs.pn(' ' + ', '.join([arg_name(arg) for arg in func.args])) elif prefix and not func.name.startswith(prefix + 'new'): self.xs.pn(' INIT:') self.xs.pn(' check_gobject((GObject*)%(first_arg)s, %(gtype)s);' % { 'first_arg': arg_name(func.args[0]), 'gtype': prefix + 'get_type()' } ) if out_list: self.xs.pn(' INIT:') for o in out_list: self.xs.pn(' %s = NULL;' % o) self.xs.pn(' OUTPUT:') for o in out_list: self.xs.pn(' %s' % o) need_prototype = False for x in func.args: if is_glist(x): need_prototype = True elif is_hashtable(x): raise Exception("Dont know how to generate prototype for a hashtable argument") if need_prototype: self.xs.p('PROTOTYPE: ') optional = False proto = [] if name.endswith('_new'): proto.append('$') for arg in func.args: if is_optional(arg) and not optional: proto.append(';') optional = True if is_glist(arg): proto.append('\\@') else: proto.append('$') self.xs.pn(''.join(proto)) if '_new_' in name: self.xs.pn(' CODE:') self.xs.pn(' RETVAL = (%(type)s)%(name)s(%(args)s);' % { 'name': name, 'type': func.return_type, 'args': ' ,'.join([arg_name(arg) for arg in func.args]) }) self.xs.pn(''' OUTPUT: RETVAL''') cleanup.append('lasso_unref(RETVAL);') elif func.return_type and is_object(func.return_type) and not is_int(func.return_type, self.binding_data) and func.return_owner: cleanup.append('lasso_unref(RETVAL);') elif is_rc(func.return_arg): if name == 'lasso_check_version': cleanup.append('if (RETVAL != 1)') cleanup.append('gperl_lasso_error(RETVAL);') # Output cleanup code if cleanup: self.xs.pn(' CLEANUP:') self.xs.indent() for cl in cleanup: self.xs.pn(cl) self.xs.unindent() def generate_xs_getter_setter(self, struct, member): name = arg_name(member) type = arg_type(member) el_type = element_type(member) # Simple getter/setter if not is_glist(member) and not is_hashtable(member): self.xs.pn(''' %(rtype)s %(field)s(%(clss)s* obj, %(rtype)s value = 0) CODE: if (items > 1) { %(assignment)s XSRETURN(0); } else { RETVAL = obj->%(field)s; } OUTPUT: RETVAL ''' % { 'rtype': type, 'field': name, 'clss': struct.name, 'assignment': self.assign_type(member, 'obj->%s' % arg_name(member), 'value', struct) }) elif is_glist(member): self.xs.pn(''' %(rtype)s %(field)s(%(clss)s* obj, ...) PREINIT: int i = 1; CODE: if (items > 1) { %(release)s for (; i < items; i++) { %(el_type)s data; data = (%(el_type)s)%(convert)s; if (! data) { %(release)s croak("an element cannot be converted to an %(el_type)s"); } %(push)s(obj->%(field)s, data); } XSRETURN(0); } else { RETVAL = obj->%(field)s; } OUTPUT: RETVAL ''' % { 'rtype': self.glist_type(member), 'field': name, 'clss': struct.name, 'el_type': self.element_type2real_type(element_type(member)), 'push': self.push_macro(member), 'convert': self.convert_function('ST(i)', member), 'release': self.release_list('obj->' + arg_name(member), member), }) elif is_hashtable(member): if is_object(element_type(member)): kind = "objects" else: kind = "strings" self.xs.pn(''' HV* %(field)s(%(clss)s* obj, ...) PROTOTYPE: $;\%% CODE: if (items > 1) { /* setter */ if (SvTYPE(ST(1)) != SVt_RV || ! SvTYPE(SvRV(ST(1))) != SVt_PVHV) { sv_dump(ST(1)); croak("Lasso::%(klass)s::%(field)s takes a reference to a hash as argument"); } set_hash_of_%(kind)s(&obj->%(field)s, (HV*)SvRV(ST(1))); } RETVAL = get_hash_of_%(kind)s(obj->%(field)s); sv_2mortal((SV*)RETVAL); OUTPUT: RETVAL ''' % { 'kind': kind, 'field': name, 'clss': struct.name, 'klass': struct.name[5:] }) def starify(self, str): if '*' in str: return str else: return str + '*' def glist_type(self, member): x = self.element_type_lookup(member, { 'string': 'GList_string', 'xml_node': 'GList_xmlnode', 'gobject': 'GList_gobject'}) if is_const(member): return x + '_const' return x def element_type_lookup(self, member, lookup_table): if not is_glist(member): raise Exception('calling release_list on %s' % member) type = element_type(member) if is_cstring(type): return lookup_table['string'] elif is_xml_node(type): return lookup_table['xml_node'] elif is_object(type): return lookup_table['gobject'] else: raise Exception('Do not know how to release GList<%s>' % type) return '%s(%s->%s);' % (macro, what, arg_name(member)) def release_list(self, what, member): if not is_glist(member): raise Exception('calling release_list on %s' % member) type = element_type(member) if is_cstring(type): macro = 'lasso_release_list_of_strings' elif is_xml_node(type): macro = 'lasso_release_list_of_xml_node' elif is_object(type): macro = 'lasso_release_list_of_gobjects' else: raise Exception('Do not know how to release GList<%s>' % type) return '%s(%s);' % (macro, what) def convert_function(self, what, member): if not is_glist(member): raise Exception('calling release_list on %s' % member) type = element_type(member) if is_cstring(type): macro = 'SvPV_nolen' elif is_xml_node(type): macro = 'pv_to_xmlnode' elif is_object(type): macro = 'gperl_get_object' else: raise Exception('Do not know how to release GList<%s>' % type) return '%s(%s)' % (macro, what) def push_macro(self, member): if not is_glist(member): raise Exception('calling release_list on %s' % member) type = element_type(member) if is_cstring(type): macro = 'lasso_list_add_string' elif is_xml_node(type): macro = 'lasso_list_add_new_xml_node' elif is_object(type): macro = 'lasso_list_add_gobject' else: raise Exception('Do not know how to push to GList<%s>' % type) return macro def assign_type(self, arg, to, fr, struct = None): type = arg_type(arg) el_type = element_type(arg) name = arg_name if is_int(arg, self.binding_data): macro = 'lasso_assign_simple' elif is_cstring(arg): macro = 'lasso_assign_string' elif is_xml_node(arg): macro = 'lasso_assign_xml_node' elif is_glist(arg): if not el_type: raise Exception('%s has no element type %s' % (arg, struct)) if is_cstring(el_type): macro = 'lasso_assign_list_of_strings' elif is_xml_node(el_type): macro = 'lasso_assign_simple' # FIXME elif is_object(el_type): macro = 'lasso_assign_list_of_gobjects' else: raise Exception('GList<%s> is an unsupported type' % el_type) elif is_object(arg): macro = 'lasso_assign_gobject' elif is_hashtable(arg) or is_boolean(arg) or is_int(arg, self.binding_data): macro = 'lasso_assign_simple' # FIXME else: raise Exception('%s is an unsupported type' % arg) return '%s(%s, %s);' % (macro, to, fr) def generate_xs_functions(self): for func in self.binding_data.functions: # skip constructors if func.name.endswith('new') or '_new_' in func.name: continue self.generate_xs_function(func) for struct in self.binding_data.structs: name = struct.name[5:] prefix = 'lasso_' + format_as_underscored(name) + '_' self.xs.pn('\nMODULE = Lasso\tPACKAGE = Lasso::%s\tPREFIX = %s\n' % (name, prefix)) # find the constructors for func in self.binding_data.functions: if func.name.startswith(prefix+'new'): self.generate_xs_function(func) for func in struct.methods: self.generate_xs_function(func, prefix = prefix) for member in struct.members: if arg_type(member) == 'void*': print_('Skipping %s' % member) continue try: self.generate_xs_getter_setter(struct, member) except: print_('failed', struct, member) raise def generate_wrapper(self): pass def generate_member_wrapper(self, c): pass def return_value(self, vtype, options): pass def element_type2real_type(self, type): if is_cstring(type): if is_const(type): return 'const char*' else: return 'char*' else: return type + '*' lasso-2.8.2/bindings/perl/PaxHeaders/t0000644000000000000000000000013213766621500014655 xustar0030 mtime=1608196928.726895006 30 atime=1678814326.421984131 30 ctime=1678814322.773963354 lasso-2.8.2/bindings/perl/t/0000755000175000017500000000000013766621500020202 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/bindings/perl/t/PaxHeaders/Lasso.t0000644000000000000000000000013213766621500016200 xustar0030 mtime=1608196928.726895006 30 atime=1678098073.133513713 30 ctime=1678814322.773963354 lasso-2.8.2/bindings/perl/t/Lasso.t0000755000175000017500000000330313766621500021452 0ustar00bdauvergnebdauvergne00000000000000# Before `make install' is performed this script should be runnable with # `make test'. After `make install' it should work as `perl Lasso.pm.t' ######################### # change 'tests => 1' to 'tests => last_test_to_print'; use Test::More tests => 11; use Lasso; use Data::Dumper; use Error qw(:try); ######################### my $SRCDIR = $ENV{'TOP_SRCDIR'}; # Insert your test code below, the Test::More module is use()ed here so read # its man page ( perldoc Test::More ) for help writing this test script. # Test arrays $request = new Lasso::SamlpRequest(); ok (! defined($request->RespondWith)); Lasso::SamlpRequestAbstract::RespondWith($request, "x", "y", "z"); @l = $request->RespondWith; ok(@l == 3); ok($l[0] eq 'x'); ok($l[1] eq 'y'); ok($l[2] eq 'z'); $server = new Lasso::Server($SRCDIR . "/tests/data/sp5-saml2/metadata.xml", $SRCDIR . "/tests/data/sp5-saml2/private-key.pem"); ok($server); $server->add_provider(Lasso::Constants::PROVIDER_ROLE_SP, $SRCDIR . "/tests/data/sp5-saml2/metadata.xml"); $login = new Lasso::Login $server; # Test error reporting eval { $login->init_authn_request; }; ok($@->{code} == -408); # Missing Remote Provider ID (IDP was added with SP role) $server = new Lasso::Server($SRCDIR . "/tests/data/sp5-saml2/metadata.xml", $SRCDIR . "/tests/data/sp5-saml2/private-key.pem"); ok($server); $server->add_provider(Lasso::Constants::PROVIDER_ROLE_IDP, $SRCDIR . "/tests/data/idp5-saml2/metadata.xml"); ok(Lasso::check_version(2,2,90, Lasso::Constants::CHECK_VERSION_NUMERIC) == 1); ok(Lasso::check_version(2,2,90, Lasso::Constants::CHECK_VERSION_EXACT) == 0); $@ = undef; eval { Lasso::Server::dump(undef); }; ok($@->{code} == Lasso::Constants::PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); lasso-2.8.2/bindings/perl/PaxHeaders/test.pl0000644000000000000000000000013213766621500016003 xustar0030 mtime=1608196928.726895006 30 atime=1678098073.129513681 30 ctime=1678814322.769963331 lasso-2.8.2/bindings/perl/test.pl0000644000175000017500000000006313766621500021252 0ustar00bdauvergnebdauvergne00000000000000#!/usr/bin/perl use ExtUtils::testlib; use Lasso lasso-2.8.2/bindings/perl/PaxHeaders/__init__.py0000644000000000000000000000013213766621500016600 xustar0030 mtime=1608196928.726895006 30 atime=1678814273.153681447 30 ctime=1678814322.777963377 lasso-2.8.2/bindings/perl/__init__.py0000644000175000017500000000000013766621500022036 0ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/bindings/perl/PaxHeaders/Makefile.PL0000644000000000000000000000013213766621500016441 xustar0030 mtime=1608196928.726895006 30 atime=1678814273.249681992 30 ctime=1678814322.765963308 lasso-2.8.2/bindings/perl/Makefile.PL0000644000175000017500000000073013766621500021711 0ustar00bdauvergnebdauvergne00000000000000use 5; use ExtUtils::MakeMaker; if (not grep /^LIBS=/, @ARGV) { $LIBS=`pkg-config --libs lasso 2>&1`; die "pkg-config cannot find lasso" if $?; } WriteMakefile( NAME => 'Lasso', VERSION => $VERSION, ($] >= 5.005 ? ## Add these new keywords supported since 5.005 ( AUTHOR => 'Benjamin Dauvergne ') : ()), LIBS => [ "$LIBS" ], MAKEFILE => 'Makefile.perl', ); lasso-2.8.2/bindings/perl/PaxHeaders/typemap-in0000644000000000000000000000013213766621500016475 xustar0030 mtime=1608196928.726895006 30 atime=1678814273.165681516 30 ctime=1678814322.773963354 lasso-2.8.2/bindings/perl/typemap-in0000644000175000017500000000064113766621500021746 0ustar00bdauvergnebdauvergne00000000000000INPUT T_STRING_OR_NULL $var = SvPOK($arg) ? SvPV_nolen($arg) : NULL; T_STRING_NON_NULL $var = SvPOK($arg) ? SvPV_nolen($arg) : (croak(\"$var cannot be undef\"), NULL); T_GOBJECT_WRAPPER $var = ($type)gperl_get_object($arg); T_XMLNODE $var = pv_to_xmlnode($arg); T_GLIST_STRING $var = array_to_glist_string((AV*)SvRV($arg)); T_GLIST_GOBJECT $var = array_to_glist_gobject((AV*)SvRV($arg)); lasso-2.8.2/bindings/perl/PaxHeaders/glist_handling.c0000644000000000000000000000013214114336625017620 xustar0030 mtime=1630649749.790436603 30 atime=1678814275.325693759 30 ctime=1678814322.761963286 lasso-2.8.2/bindings/perl/glist_handling.c0000644000175000017500000000617014114336625023074 0ustar00bdauvergnebdauvergne00000000000000/* * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . * */ #include #include #include #include #include #include "../utils.c" static xmlBuffer* xmlnode_to_xmlbuffer(xmlNode *node) { xmlOutputBufferPtr output_buffer; xmlBuffer *buffer; if (! node) return NULL; buffer = xmlBufferCreate(); output_buffer = xmlOutputBufferCreateBuffer(buffer, NULL); xmlNodeDumpOutput(output_buffer, NULL, node, 0, 0, NULL); xmlOutputBufferClose(output_buffer); xmlBufferAdd(buffer, BAD_CAST "", 1); return buffer; } /** * xmlnode_to_pv: * @node: an xmlNode* object * @do_free: do we need to free the node after the conversion * * Return value: a newly allocated SV/PV or under. */ static SV* xmlnode_to_pv(xmlNode *node, gboolean do_free) { xmlBuffer *buf; SV *pestring = NULL; if (node == NULL) { return &PL_sv_undef; } buf = xmlnode_to_xmlbuffer(node); if (buf == NULL) { pestring = &PL_sv_undef; } else { pestring = newSVpv((char*)xmlBufferContent(buf), 0); } if (do_free) { lasso_release_xml_node(node); } return pestring; } static xmlNode * pv_to_xmlnode(SV *value) { STRLEN size; char *string; if (! SvPOK(value)) return NULL; string = SvPV(value, size); if (! string) return NULL; return lasso_string_fragment_to_xmlnode(string, size); } /** * array_to_glist_string: * @array: a Perl array * * Convert a perl array to a #GList of strings. * * Return value: a newly create #GList */ G_GNUC_UNUSED static GList* array_to_glist_string(AV *array) { I32 len, i; GList *result = NULL; if (! array) return NULL; len = av_len(array); for (i=len-1; i >= 0; i--) { SV **sv; sv = av_fetch(array, i, 0); lasso_list_add_string(result, SvPV_nolen(*sv)); } return result; } /** * array_to_glist_gobject: * @array: a perl array * * Convert a perl array of #GObject to a #GList of #GObject objects * * Return value: a newly created #GList of #GObject objects */ G_GNUC_UNUSED static GList* array_to_glist_gobject(AV *array) { I32 len, i; GList *result = NULL; if (! array) return NULL; len = av_len(array); for (i=len-1; i >= 0; i--) { SV **sv; sv = av_fetch(array, i, 0); lasso_list_add_gobject(result, gperl_get_object(*sv)); } return result; } lasso-2.8.2/bindings/perl/PaxHeaders/ghashtable_handling.c0000644000000000000000000000013214114336625020600 xustar0030 mtime=1630649749.790436603 30 atime=1678814275.329693782 30 ctime=1678814322.765963308 lasso-2.8.2/bindings/perl/ghashtable_handling.c0000644000175000017500000000531014114336625024047 0ustar00bdauvergnebdauvergne00000000000000/* * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . * */ #include #include #include #include #include /** * set_hash_of_strings: * @hash: a #GHashTable variable * @hv: a perl hash */ void set_hash_of_strings(GHashTable **hash, HV *hv) { SV *data; char *key; I32 len; g_hash_table_remove_all(*hash); hv_iterinit(hv); while ((data = hv_iternextsv(hv, &key, &len))) { if (SvTYPE(data) != SVt_PV) { croak("hash contains non-strings values"); } } hv_iterinit(hv); while ((data = hv_iternextsv(hv, &key, &len))) { g_hash_table_insert(*hash, g_strndup(key, len), g_strdup(SvPV_nolen(data))); } } /** * set_hash_of_objects: * @hash: a #GHashTable variable * @hv: a perl hash */ void set_hash_of_objects(GHashTable **hash, HV *hv) { SV *data; char *key; I32 len; g_hash_table_remove_all(*hash); hv_iterinit(hv); while ((data = hv_iternextsv(hv, &key, &len))) { if (! gperl_get_object(data)) { croak("hash contains non-strings values"); } } hv_iterinit(hv); while ((data = hv_iternextsv(hv, &key, &len))) { g_hash_table_insert(*hash, g_strndup(key, len), g_object_ref(data)); } } static void __ht_foreach_get_hos(gpointer key, gpointer value, gpointer user_data) { HV *hv = user_data; (void)hv_store(hv, key, strlen(key), newSVpv(value, 0), 0); } /** * get_hash_of_strings: * @hash: a #GHashTable of strings */ HV* get_hash_of_strings(GHashTable *hash) { HV *hv; hv = newHV(); g_hash_table_foreach(hash, __ht_foreach_get_hos, hv); return hv; } static void __ht_foreach_get_hoo(gpointer key, gpointer value, gpointer user_data) { HV *hv = user_data; (void)hv_store(hv, key, strlen(key), gperl_new_object(value, FALSE), 0); } /** * get_hash_of_objects: * @hash: a #GHashTable of objects */ HV* get_hash_of_objects(GHashTable *hash) { HV *hv; hv = newHV(); g_hash_table_foreach(hash, __ht_foreach_get_hoo, hv); return hv; } lasso-2.8.2/bindings/perl/PaxHeaders/gobject_handling.c0000644000000000000000000000013214114336625020113 xustar0030 mtime=1630649749.794436646 30 atime=1678814275.209693101 30 ctime=1678814322.761963286 lasso-2.8.2/bindings/perl/gobject_handling.c0000644000175000017500000001575614114336625023401 0ustar00bdauvergnebdauvergne00000000000000/* * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . * */ #include #include #include #include /* * Manipulate a pointer to indicate that an SV is undead. * Relies on SV pointers being word-aligned. */ #define IS_UNDEAD(x) (PTR2UV(x) & 1) #define MAKE_UNDEAD(x) INT2PTR(void*, PTR2UV(x) | 1) #define REVIVE_UNDEAD(x) INT2PTR(void*, PTR2UV(x) & ~1) /* this code is copied / adapted from libglib-perl */ GHashTable *types_by_types; GHashTable *types_by_package; GQuark wrapper_quark; extern int lasso_init(); static void init_perl_lasso() { types_by_types = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL, g_free); types_by_package = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL); wrapper_quark = g_quark_from_static_string("PerlLasso::wrapper"); lasso_init(); } static const char * gperl_object_package_from_type (GType gtype) { gchar* package; const gchar* type_name; if (!g_type_is_a (gtype, G_TYPE_OBJECT) && !g_type_is_a (gtype, G_TYPE_INTERFACE)) return NULL; package = g_hash_table_lookup(types_by_types, (gconstpointer)gtype); if (package) return package; type_name = g_type_name(gtype); if (! type_name) return NULL; if (strncmp(type_name, "Lasso", 5) != 0) return NULL; package = g_strconcat("Lasso::", &type_name[5], NULL); g_hash_table_insert(types_by_types, (gpointer)gtype, (gpointer)package); g_hash_table_insert(types_by_package, g_strdup(package), (gpointer)gtype); return package; } static void gobject_destroy_wrapper (SV *obj) { #ifdef NOISY warn ("gobject_destroy_wrapper (%p)[%d]\n", obj, SvREFCNT ((SV*)REVIVE_UNDEAD(obj))); #endif obj = REVIVE_UNDEAD(obj); sv_unmagic (obj, PERL_MAGIC_ext); /* we might want to optimize away the call to DESTROY here for non-perl classes. */ SvREFCNT_dec (obj); } static HV * gperl_object_stash_from_type (GType gtype) { const char * package = gperl_object_package_from_type (gtype); if (package) return gv_stashpv (package, TRUE); else return NULL; } static void update_wrapper (GObject *object, gpointer obj) { #ifdef NOISY warn("update_wrapper [%p] (%p)\n", object, obj); */ #endif g_object_steal_qdata (object, wrapper_quark); g_object_set_qdata_full (object, wrapper_quark, obj, (GDestroyNotify)gobject_destroy_wrapper); } static SV * gperl_new_object (GObject * object, gboolean own) { SV *obj; SV *sv; /* take the easy way out if we can */ if (!object) { return &PL_sv_undef; } if (!LASSO_IS_NODE (object)) croak ("object %p is not really a LassoNode", object); /* fetch existing wrapper_data */ obj = (SV *)g_object_get_qdata (object, wrapper_quark); if (!obj) { /* create the perl object */ GType gtype = G_OBJECT_TYPE (object); HV *stash = gperl_object_stash_from_type (gtype); /* We should only get NULL for the stash here if gtype is * neither a GObject nor GInterface. We filtered out all * non-GObject types a few lines back. */ g_assert (stash != NULL); /* * Create the "object", a hash. * * This does not need to be a HV, the only problem is finding * out what to use, and HV is certainly the way to go for any * built-in objects. */ /* this increases the combined object's refcount. */ obj = (SV *)newHV (); /* attach magic */ sv_magic (obj, 0, PERL_MAGIC_ext, (const char *)object, 0); /* The SV has a ref to the C object. If we are to own this * object, then any other references will be taken care of * below in take_ownership */ g_object_ref (object); /* create the wrapper to return, the _noinc decreases the * combined refcount by one. */ sv = newRV_noinc (obj); /* bless into the package */ sv_bless (sv, stash); /* attach it to the gobject */ update_wrapper (object, obj); /* printf("creating new wrapper for [%p] (%p)\n", object, obj); */ /* the noinc is so that the SV (initially) exists only as long * as the perl code needs it. When the DESTROY gets called, we * check and see if the SV is the only referer to the C object, * and if so remove both. Otherwise, the SV will become * "undead," to be either revived or destroyed with the C * object */ #ifdef NOISY warn ("gperl_new_object%d %s(%p)[%d] => %s (%p) (NEW)\n", own, G_OBJECT_TYPE_NAME (object), object, object->ref_count, gperl_object_package_from_type (G_OBJECT_TYPE (object)), SvRV (sv)); #endif } else { /* create the wrapper to return, increases the combined * refcount by one. */ /* if the SV is undead, revive it */ if (IS_UNDEAD(obj)) { g_object_ref (object); obj = REVIVE_UNDEAD(obj); update_wrapper (object, obj); sv = newRV_noinc (obj); /* printf("reviving undead wrapper for [%p] (%p)\n", object, obj); */ } else { /* printf("reusing previous wrapper for %p\n", obj); */ sv = newRV_inc (obj); } } #ifdef NOISY warn ("gperl_new_object%d %s(%p)[%d] => %s (%p)[%d] (PRE-OWN)\n", own, G_OBJECT_TYPE_NAME (object), object, object->ref_count, gperl_object_package_from_type (G_OBJECT_TYPE (object)), SvRV (sv), SvREFCNT (SvRV (sv))); #endif if (own) g_object_unref(object); return sv; } static GObject * gperl_get_object (SV * sv) { MAGIC *mg; if (!sv || !SvOK(sv) || !SvROK (sv) || !(mg = mg_find (SvRV (sv), PERL_MAGIC_ext))) return NULL; if (! mg->mg_ptr) return NULL; if (! G_IS_OBJECT(mg->mg_ptr)) return NULL; return (GObject *) mg->mg_ptr; } static void gperl_lasso_error(int error) { dTHX; if (error != 0) { HV *hv; SV *sv; const char *desc = lasso_strerror(error); hv = newHV(); (void)hv_store(hv, "code", 4, newSViv(error), 0); (void)hv_store(hv, "message", 7, newSVpv(desc, 0), 0); sv = sv_bless(newRV_noinc((SV*)hv), gv_stashpv("Lasso::Error", TRUE)); sv_setsv(ERRSV, sv); Perl_croak (aTHX_ Nullch); } } /* * check_gobject: * @object: a #GObject object * @gtype: a #GType * * Check that a given pointer is really a pointer to a GObject of certain type. * Return value: TRUE or FALSE. */ static void check_gobject(GObject *object, GType type) { if (! G_IS_OBJECT(object) || ! g_type_is_a(G_OBJECT_TYPE(object), type)) { gperl_lasso_error(LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); } } lasso-2.8.2/bindings/PaxHeaders/utils.py0000644000000000000000000000013214117162531015232 xustar0030 mtime=1631380825.848637964 30 atime=1678814250.417552742 30 ctime=1678814321.581956567 lasso-2.8.2/bindings/utils.py0000644000175000017500000001670014117162531020506 0ustar00bdauvergnebdauvergne00000000000000# Lasso - A free implementation of the Liberty Alliance specifications. # # Copyright (C) 2004-2007 Entr'ouvert # http://lasso.entrouvert.org # # Authors: See AUTHORS file in top-level directory. # # 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 Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . import re import string _mapping_convert_type_from_gobject_annotation = { 'utf8': 'char*' } def convert_type_from_gobject_annotation(type): return _mapping_convert_type_from_gobject_annotation.get(type, type) def clean_type(type): '''Convert struct references to their typedef counterpart''' if not type: return type type = type.strip() type = re.sub('\s+', ' ', type) m = re.match('\s*struct\s+_(\w+)\s*\*', type) if m: type = '%s*' % m.group(1) return re.sub('\s*\*\s*', '*', type) def camelcase_to_list(varname): ''' convert 'camlCaseISTheThing' to ['caml', 'Case', 'IS', 'The', 'Thing']''' l = [[]] last = None for x in varname: if last: if last.isupper() and x.isupper(): pass elif not last.isupper() and x.isupper(): l.append([]) elif last.isupper() and x.islower(): y = l[-1][-1] del l[-1][-1] if not l[-1]: del l[-1] l.append([y]) l[-1].append(x) else: l[-1].append(x) last = x return list(map(str.lower,map(''.join,l))) def old_format_as_camelcase(var): '''Format an identifier name into CamelCase''' if '_' in var: return format_underscore_as_camelcase(var) if var[0] in string.ascii_uppercase: var = var[0].lower() + var[1:] var = re.sub(r'([a-z])(ID)([A-Z]|$)', r'\1Id\3', var) # replace standing ID by Id return var def format_as_camelcase(var): '''Format an identifier name into CamelCase''' if var[0].isupper(): l = camelcase_to_list(var) return l[0] + ''.join(list(map(str.capitalize, l[1:]))) if '_' in var: return format_underscore_as_camelcase(var) if var[0] in string.ascii_uppercase: var = var[0].lower() + var[1:] var = re.sub(r'([a-z])(ID)([A-Z]|$)', r'\1Id\3', var) # replace standing ID by Id return var def format_as_underscored(var): '''Format an identifier name into underscored_name''' var = '_'.join(camelcase_to_list(var)) return var def format_underscore_as_camelcase(var): '''Format an underscored identifier name into CamelCase''' def rep(s): return s.group(1)[0].upper() + s.group(1)[1:] var = re.sub(r'_([A-Za-z0-9]+)', rep, var) var = re.sub(r'([a-z])(ID)([A-Z]|$)', r'\1Id\3', var) # replace standing ID by Id return var def last(x): return x[len(x)-1] def common_prefix(x,y): max = min(len(x),len(y)) last = 0 for i in range(max): if x[i] != y[i]: return min(i,last+1) if x[i] == '_': last = i return max def pgroup(group,prev): level, l = group i = 0 for x in l: if i == 0: prefix = prev else: prefix = level if isinstance(x,tuple): pgroup(x,prefix) else: print(prefix * ' ' + x[prefix:]) i = i + 1 def group(list): list.sort() pile = [(0,[])] prev = "" for x in list: l, g = last(pile) u = common_prefix(x,prev) # Find the good level of insertion while u < l: pile.pop() l, g = last(pile) # Insert here if u == l: g.append(x) elif u > l: t = (u, [g.pop(),x]) g.append(t) pile.append(t) prev = x return pile[0] def _test_arg(arg, what): if isinstance(arg, tuple) or isinstance(arg, list): return bool(arg[2].get(what)) return False def is_optional(arg): return _test_arg(arg, 'optional') def element_type(arg): return arg[2].get('element-type') def key_type(arg): return arg[2].get('key-type') def value_type(arg): return arg[2].get('value-type') def is_out(arg): return _test_arg(arg, 'out') or (arg_type(arg).endswith('**') and not _test_arg(arg, 'in')) def is_glist(arg): return re.match('GList', unconstify(var_type(arg))) def is_hashtable(arg): return re.match('GHashTable', unconstify(var_type(arg))) def var_type(arg): '''Return the type of variable to store content''' arg = arg_type(arg) if is_out(arg): return arg[:-1] else: return arg def unref_type(arg): return (var_type(arg), arg[1], arg[2]) def ref_name(arg): if is_out(arg): return '&%s' % arg[1] else: return arg[1] def arg_type(arg): if isinstance(arg, tuple) or isinstance(arg, list): return arg[0] else: return arg def arg_name(arg): return arg[1] def unconstify(type): type = arg_type(type) if isinstance(type, str): return re.sub(r'\bconst\b\s*', '', type).strip() else: return type def make_arg(type): return (type,'',{}) def arg_default(arg): return arg[2].get('default') def remove_modifiers(type): if isinstance(type, str): type = re.sub(r'\s*\bunsigned\b\s*', ' ', type).strip() type = re.sub(r'\s*\bconst\b\s*', ' ', type).strip() type = re.sub(r'\s*\bsigned\b\s*', ' ', type).strip() type = re.sub(r'\s*\bvolatile\b\s*', ' ', type).strip() return clean_type(type) else: return type def is_const(arg): return bool(re.search(r'\bconst\b', arg_type(arg))) def is_cstring(arg): arg = arg_type(arg) return clean_type(unconstify(arg)) in ('char*','gchar*','guchar*','string','utf8','strings') def is_xml_node(arg): arg = unconstify(arg_type(arg)) return arg and arg.startswith('xmlNode') def is_boolean(arg): return arg_type(arg) in ('gboolean','bool') def is_pointer(arg): return arg_type(arg).endswith('*') def unpointerize(arg): return arg_type(arg).replace('*','') def is_list(arg): return unconstify(arg_type(arg)).startswith('GList') def is_rc(arg): return arg_type(arg) in [ 'lasso_error_t' ] def is_int(arg, binding_data): return remove_modifiers(arg_type(arg)) in [ 'time_t', 'int', 'gint', 'long', 'glong', 'lasso_error_t'] + binding_data.enums def is_time_t_pointer(arg): return re.match(r'\btime_t\*', unconstify(arg_type(arg))) def is_transfer_full(arg, default=False): if not isinstance(arg, tuple): return default transfer = arg[2].get('transfer') if transfer: return transfer == 'full' if is_cstring(arg) and is_const(arg): return False return default or is_out(arg) or is_object(arg) _not_objects = ( 'GHashTable', 'GList', 'GType' ) def is_object(arg): t = clean_type(unconstify(arg_type(arg))) return t and t[0] in string.ascii_uppercase and not [ x for x in _not_objects if x in t ] if __name__ == '__main__': print(camelcase_to_list('Samlp2IDPList')) lasso-2.8.2/bindings/PaxHeaders/python0000644000000000000000000000013214404126161014762 xustar0030 mtime=1678814321.653956977 30 atime=1678814326.421984131 30 ctime=1678814321.653956977 lasso-2.8.2/bindings/python/0000755000175000017500000000000014404126161020307 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/bindings/python/PaxHeaders/Makefile.am0000644000000000000000000000013214232236356017102 xustar0030 mtime=1651064046.114460044 30 atime=1678814114.584790805 30 ctime=1678814321.637956885 lasso-2.8.2/bindings/python/Makefile.am0000644000175000017500000000241414232236356022353 0ustar00bdauvergnebdauvergne00000000000000MAINTAINERCLEANFILES = Makefile.in CLEANFILES = _lasso.c lasso.py DISTCLEANFILES = __init__.pyc lasso.pyc lang.pyc SUBDIRS = tests if PYTHON_ENABLED AM_CPPFLAGS = \ -I$(top_builddir) \ -I$(top_srcdir) \ $(SASL_CFLAGS) pythondir= $(PY_SITE_PACKAGES) nodist_python_DATA = lasso.py python_LTLIBRARIES = _lasso.la nodist__lasso_la_SOURCES = _lasso.c _lasso_la_CFLAGS = -fno-strict-aliasing $(LASSO_CORE_CFLAGS) $(PY_CFLAGS) $(AM_CFLAGS) _lasso_la_LIBADD = $(top_builddir)/lasso/liblasso.la $(LASSO_LIBS) if DARWIN _lasso_la_LDFLAGS = -no-undefined -module -avoid-version -Wl,-F. -Wl,-F. -bundle -framework Python else if MINGW _lasso_la_LDFLAGS = -no-undefined -module -avoid-version -Wl,--add-stdcall-alias else _lasso_la_LDFLAGS = -no-undefined -module -avoid-version endif endif BUILT_SOURCES = _lasso.c _lasso.c lasso.py: $(top_srcdir)/lasso/*.h $(top_srcdir)/lasso/*.c $(top_srcdir)/lasso/*/*.h $(top_srcdir)/lasso/*/*.c $(top_srcdir)/lasso/*/*/*.h $(top_srcdir)/lasso/*/*/*.c EXTRA_DIST=lang.py wrapper_bottom.c wrapper_top.c __init__.py examples lasso.py _lasso.c: lang.py wrapper_top.c wrapper_bottom.c ../bindings.py $(AM_V_GEN) $(PYTHON) $(top_srcdir)/bindings/bindings.py -l python --src-dir=$(top_srcdir)/lasso/ $(EXTRA_ARGS) endif distclean-local: rm -rf __pycache__ lasso-2.8.2/bindings/python/PaxHeaders/Makefile.in0000644000000000000000000000013214404125673017113 xustar0030 mtime=1678814139.444929272 30 atime=1678814150.044988458 30 ctime=1678814321.641956907 lasso-2.8.2/bindings/python/Makefile.in0000644000175000017500000010014714404125673022366 0ustar00bdauvergnebdauvergne00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = bindings/python ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ac_check_class.m4 \ $(top_srcdir)/m4/ac_check_classpath.m4 \ $(top_srcdir)/m4/ac_check_junit.m4 \ $(top_srcdir)/m4/ac_prog_jar.m4 \ $(top_srcdir)/m4/ac_prog_java.m4 \ $(top_srcdir)/m4/ac_prog_java_works.m4 \ $(top_srcdir)/m4/ac_prog_javac.m4 \ $(top_srcdir)/m4/ac_prog_javac_works.m4 \ $(top_srcdir)/m4/ac_prog_javah.m4 \ $(top_srcdir)/m4/ac_try_compile_java.m4 \ $(top_srcdir)/m4/as-compiler-flag.m4 \ $(top_srcdir)/m4/dps_java_check_class.m4 \ $(top_srcdir)/m4/dps_xtra_classpath.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h \ $(top_builddir)/lasso/lasso_config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pythondir)" "$(DESTDIR)$(pythondir)" LTLIBRARIES = $(python_LTLIBRARIES) am__DEPENDENCIES_1 = @PYTHON_ENABLED_TRUE@_lasso_la_DEPENDENCIES = \ @PYTHON_ENABLED_TRUE@ $(top_builddir)/lasso/liblasso.la \ @PYTHON_ENABLED_TRUE@ $(am__DEPENDENCIES_1) @PYTHON_ENABLED_TRUE@nodist__lasso_la_OBJECTS = _lasso_la-_lasso.lo _lasso_la_OBJECTS = $(nodist__lasso_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = _lasso_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(_lasso_la_CFLAGS) \ $(CFLAGS) $(_lasso_la_LDFLAGS) $(LDFLAGS) -o $@ @PYTHON_ENABLED_TRUE@am__lasso_la_rpath = -rpath $(pythondir) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -I$(top_builddir)/lasso depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/_lasso_la-_lasso.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(nodist__lasso_la_SOURCES) DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(nodist_python_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CHECK_CFLAGS = @CHECK_CFLAGS@ CHECK_LIBS = @CHECK_LIBS@ CLASSPATH_JUNIT = @CLASSPATH_JUNIT@ CLASSPATH_OPT = @CLASSPATH_OPT@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CSHARPCILINTERPRETER = @CSHARPCILINTERPRETER@ CSHARPCOMPILER = @CSHARPCOMPILER@ CSHARPCYGPATH_W = @CSHARPCYGPATH_W@ CSHARPDYNAMICLINKING = @CSHARPDYNAMICLINKING@ CSHARPLIBRARYPREFIX = @CSHARPLIBRARYPREFIX@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEBUGGING = @DEBUGGING@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLL_FILENAME = @DLL_FILENAME@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GACUTIL = @GACUTIL@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HTML_DIR = @HTML_DIR@ INKSCAPE = @INKSCAPE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVAC_FLAGS = @JAVAC_FLAGS@ JAVAH = @JAVAH@ JAVAH_FLAGS = @JAVAH_FLAGS@ JAVA_INCLUDE = @JAVA_INCLUDE@ JAVA_JUNIT = @JAVA_JUNIT@ JAVA_VERSION = @JAVA_VERSION@ JDK_INCLUDE = @JDK_INCLUDE@ JNI_EXTRA_LDFLAGS = @JNI_EXTRA_LDFLAGS@ JUNIT = @JUNIT@ LASSO_APP_DEFINES = @LASSO_APP_DEFINES@ LASSO_CFLAGS = @LASSO_CFLAGS@ LASSO_CORE_CFLAGS = @LASSO_CORE_CFLAGS@ LASSO_CORE_LIBS = @LASSO_CORE_LIBS@ LASSO_DEFINES = @LASSO_DEFINES@ LASSO_DOCDIR = @LASSO_DOCDIR@ LASSO_LIBS = @LASSO_LIBS@ LASSO_PUB_CFLAGS = @LASSO_PUB_CFLAGS@ LASSO_STATIC_BINARIES = @LASSO_STATIC_BINARIES@ LASSO_VERSION_INFO = @LASSO_VERSION_INFO@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PERLINSTALLSITEARCH = @PERLINSTALLSITEARCH@ PERLMAN3DIR = @PERLMAN3DIR@ PERL_CFLAGS = @PERL_CFLAGS@ PERL_VERSION = @PERL_VERSION@ PHP5 = @PHP5@ PHP5_CONFIG = @PHP5_CONFIG@ PHP5_CONFIG_DIR = @PHP5_CONFIG_DIR@ PHP5_EXTENSION_DIR = @PHP5_EXTENSION_DIR@ PHP5_INCLUDES = @PHP5_INCLUDES@ PHP5_INCLUDE_DIR = @PHP5_INCLUDE_DIR@ PHP5_LDFLAGS = @PHP5_LDFLAGS@ PHP5_LIBS = @PHP5_LIBS@ PHP5_PREFIX = @PHP5_PREFIX@ PHP5_UNPREFIXED_EXTENSION_DIR = @PHP5_UNPREFIXED_EXTENSION_DIR@ PHP5_VERSION = @PHP5_VERSION@ PHP7 = @PHP7@ PHP7_CONFIG = @PHP7_CONFIG@ PHP7_CONFIG_DIR = @PHP7_CONFIG_DIR@ PHP7_EXTENSION_DIR = @PHP7_EXTENSION_DIR@ PHP7_INCLUDES = @PHP7_INCLUDES@ PHP7_INCLUDE_DIR = @PHP7_INCLUDE_DIR@ PHP7_LDFLAGS = @PHP7_LDFLAGS@ PHP7_LIBS = @PHP7_LIBS@ PHP7_PREFIX = @PHP7_PREFIX@ PHP7_UNPREFIXED_EXTENSION_DIR = @PHP7_UNPREFIXED_EXTENSION_DIR@ PHP7_VERSION = @PHP7_VERSION@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PYTHON = @PYTHON@ PYTHON_VERSION = @PYTHON_VERSION@ PY_CFLAGS = @PY_CFLAGS@ PY_DYNLOAD = @PY_DYNLOAD@ PY_EXTRA_LIBS = @PY_EXTRA_LIBS@ PY_LIB_A = @PY_LIB_A@ PY_LIB_LOC = @PY_LIB_LOC@ PY_SITE_PACKAGES = @PY_SITE_PACKAGES@ RANLIB = @RANLIB@ RC = @RC@ REST2HTML = @REST2HTML@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_VERSION = @SWIG_VERSION@ TAR = @TAR@ TESTS_JUNIT = @TESTS_JUNIT@ UPCASED_DLL_FILENAME = @UPCASED_DLL_FILENAME@ VERSION = @VERSION@ VERSION_UNDERSCORED = @VERSION_UNDERSCORED@ WINDOWS_VERSION = @WINDOWS_VERSION@ XSLTPROC = @XSLTPROC@ Z_CFLAGS = @Z_CFLAGS@ Z_LIBS = @Z_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ uudecode = @uudecode@ MAINTAINERCLEANFILES = Makefile.in CLEANFILES = _lasso.c lasso.py DISTCLEANFILES = __init__.pyc lasso.pyc lang.pyc SUBDIRS = tests @PYTHON_ENABLED_TRUE@AM_CPPFLAGS = \ @PYTHON_ENABLED_TRUE@ -I$(top_builddir) \ @PYTHON_ENABLED_TRUE@ -I$(top_srcdir) \ @PYTHON_ENABLED_TRUE@ $(SASL_CFLAGS) @PYTHON_ENABLED_TRUE@pythondir = $(PY_SITE_PACKAGES) @PYTHON_ENABLED_TRUE@nodist_python_DATA = lasso.py @PYTHON_ENABLED_TRUE@python_LTLIBRARIES = _lasso.la @PYTHON_ENABLED_TRUE@nodist__lasso_la_SOURCES = _lasso.c @PYTHON_ENABLED_TRUE@_lasso_la_CFLAGS = -fno-strict-aliasing $(LASSO_CORE_CFLAGS) $(PY_CFLAGS) $(AM_CFLAGS) @PYTHON_ENABLED_TRUE@_lasso_la_LIBADD = $(top_builddir)/lasso/liblasso.la $(LASSO_LIBS) @DARWIN_FALSE@@MINGW_FALSE@@PYTHON_ENABLED_TRUE@_lasso_la_LDFLAGS = -no-undefined -module -avoid-version @DARWIN_FALSE@@MINGW_TRUE@@PYTHON_ENABLED_TRUE@_lasso_la_LDFLAGS = -no-undefined -module -avoid-version -Wl,--add-stdcall-alias @DARWIN_TRUE@@PYTHON_ENABLED_TRUE@_lasso_la_LDFLAGS = -no-undefined -module -avoid-version -Wl,-F. -Wl,-F. -bundle -framework Python @PYTHON_ENABLED_TRUE@BUILT_SOURCES = _lasso.c @PYTHON_ENABLED_TRUE@EXTRA_DIST = lang.py wrapper_bottom.c wrapper_top.c __init__.py examples all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign bindings/python/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign bindings/python/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-pythonLTLIBRARIES: $(python_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(python_LTLIBRARIES)'; test -n "$(pythondir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(pythondir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pythondir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pythondir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pythondir)"; \ } uninstall-pythonLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(python_LTLIBRARIES)'; test -n "$(pythondir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pythondir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pythondir)/$$f"; \ done clean-pythonLTLIBRARIES: -test -z "$(python_LTLIBRARIES)" || rm -f $(python_LTLIBRARIES) @list='$(python_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } _lasso.la: $(_lasso_la_OBJECTS) $(_lasso_la_DEPENDENCIES) $(EXTRA__lasso_la_DEPENDENCIES) $(AM_V_CCLD)$(_lasso_la_LINK) $(am__lasso_la_rpath) $(_lasso_la_OBJECTS) $(_lasso_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_lasso_la-_lasso.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< _lasso_la-_lasso.lo: _lasso.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_lasso_la_CFLAGS) $(CFLAGS) -MT _lasso_la-_lasso.lo -MD -MP -MF $(DEPDIR)/_lasso_la-_lasso.Tpo -c -o _lasso_la-_lasso.lo `test -f '_lasso.c' || echo '$(srcdir)/'`_lasso.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/_lasso_la-_lasso.Tpo $(DEPDIR)/_lasso_la-_lasso.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='_lasso.c' object='_lasso_la-_lasso.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_lasso_la_CFLAGS) $(CFLAGS) -c -o _lasso_la-_lasso.lo `test -f '_lasso.c' || echo '$(srcdir)/'`_lasso.c mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-nodist_pythonDATA: $(nodist_python_DATA) @$(NORMAL_INSTALL) @list='$(nodist_python_DATA)'; test -n "$(pythondir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pythondir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pythondir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pythondir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pythondir)" || exit $$?; \ done uninstall-nodist_pythonDATA: @$(NORMAL_UNINSTALL) @list='$(nodist_python_DATA)'; test -n "$(pythondir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pythondir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-recursive all-am: Makefile $(LTLIBRARIES) $(DATA) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(pythondir)" "$(DESTDIR)$(pythondir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-recursive install-exec: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-recursive clean-am: clean-generic clean-libtool clean-pythonLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -f ./$(DEPDIR)/_lasso_la-_lasso.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-local distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-nodist_pythonDATA install-pythonLTLIBRARIES install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/_lasso_la-_lasso.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-nodist_pythonDATA uninstall-pythonLTLIBRARIES .MAKE: $(am__recursive_targets) all check install install-am \ install-exec install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--depfiles check check-am clean clean-generic clean-libtool \ clean-pythonLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-local distclean-tags distdir dvi dvi-am html html-am \ info info-am install install-am install-data install-data-am \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-nodist_pythonDATA install-pdf \ install-pdf-am install-ps install-ps-am \ install-pythonLTLIBRARIES install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am \ uninstall-nodist_pythonDATA uninstall-pythonLTLIBRARIES .PRECIOUS: Makefile @PYTHON_ENABLED_TRUE@_lasso.c lasso.py: $(top_srcdir)/lasso/*.h $(top_srcdir)/lasso/*.c $(top_srcdir)/lasso/*/*.h $(top_srcdir)/lasso/*/*.c $(top_srcdir)/lasso/*/*/*.h $(top_srcdir)/lasso/*/*/*.c @PYTHON_ENABLED_TRUE@lasso.py _lasso.c: lang.py wrapper_top.c wrapper_bottom.c ../bindings.py @PYTHON_ENABLED_TRUE@ $(AM_V_GEN) $(PYTHON) $(top_srcdir)/bindings/bindings.py -l python --src-dir=$(top_srcdir)/lasso/ $(EXTRA_ARGS) distclean-local: rm -rf __pycache__ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lasso-2.8.2/bindings/python/PaxHeaders/lang.py0000644000000000000000000000013214124550517016337 xustar0030 mtime=1632817487.113979037 30 atime=1678814250.617553873 30 ctime=1678814321.641956907 lasso-2.8.2/bindings/python/lang.py0000644000175000017500000013153514124550517021617 0ustar00bdauvergnebdauvergne00000000000000# Lasso - A free implementation of the Liberty Alliance specifications. # # Copyright (C) 2004-2007 Entr'ouvert # http://lasso.entrouvert.org # # Authors: See AUTHORS file in top-level directory. # # 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 Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . import os from six import print_ import sys import re import textwrap from utils import * def remove_bad_optional(args): args.reverse() non_opt = False new_args = [] for x in args: if not '=' in x: non_opt = True elif non_opt: print_('W: changed', x, file=sys.stderr, end=' ') x = re.sub(' *=.*', '', x) print_('to', x, file=sys.stderr) new_args.append(x) new_args.reverse() return new_args def defval_to_python_value(defval): if defval is None: return 'None' if defval.startswith('b:'): if defval[2:].lower() == 'true': return 'True' if defval[2:].lower() == 'false': return 'False' if defval.startswith('c:'): try: return str(int(defval[2:])) except: return defval[8:] raise Exception('Could not convert %s to python value' % defval) def get_python_arg_decl(arg): if is_optional(arg): return '%s = %s' % (arg_name(arg), defval_to_python_value(arg_default(arg))) else: return arg_name(arg) class Binding: def __init__(self, binding_data): self.binding_data = binding_data self.src_dir = os.path.dirname(__file__) def free_value(self, fd, type, name = None): if not name: name = arg_name(type) if not name: raise Exception('Cannot free, missing a name') if is_cstring(type): print_(' lasso_release_string(%s);' % name, file=fd) elif is_int(type, self.binding_data) or is_boolean(type): pass elif is_xml_node(type): print_(' lasso_release_xml_node(%s);' % name, file=fd) elif is_glist(type): etype = element_type(type) if is_cstring(etype): print_(' lasso_release_list_of_strings(%s);' % name, file=fd) elif is_object(etype): print_(' lasso_release_list_of_gobjects(%s);' % name, file=fd) else: raise Exception('Unsupported caller owned return type %s' % ((repr(type), name),)) elif is_hashtable(type): el_type = element_type(type) k_type = key_type(type) v_type = value_type(type) if is_cstring(el_type) or (is_cstring(k_type) and is_cstring(v_type)): print_(' if (%s) { g_hash_table_destroy(%s); }' % (name, name), file=fd) else: raise Exception('Unsupported free value of type GHashTable: %s' % type) elif is_object(type): print_(' if (return_value) g_object_unref(%s);' % name, file=fd) else: raise Exception('Unsupported caller owned return type %s' % ((repr(type), name),)) def generate(self): fd = open('lasso.py', 'w') self.generate_header(fd) self.generate_exceptions(fd) self.generate_constants(fd) for clss in self.binding_data.structs: self.generate_class(clss, fd) self.generate_functions(fd) self.generate_footer(fd) fd.close() fd = open('_lasso.c', 'w') self.generate_wrapper(fd) fd.close() def generate_header(self, fd): print_('''\ # this file has been generated automatically; do not edit import _lasso import sys def cptrToPy(cptr): if cptr is None: return None klass = getattr(lasso, cptr.typename) o = klass.__new__(klass) o._cptr = cptr return o if sys.version_info >= (3,): def str2lasso(s): return s else: # Python 2.x def str2lasso(s): if isinstance(s, unicode): return s.encode('utf-8') return s class frozendict(dict): \'\'\'Immutable dict\'\'\' # from Python Cookbook: # http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/414283 def _blocked_attribute(obj): raise AttributeError('A frozendict cannot be modified.') _blocked_attribute = property(_blocked_attribute) __delitem__ = __setitem__ = clear = _blocked_attribute pop = popitem = setdefault = update = _blocked_attribute def __new__(cls, *args): new = dict.__new__(cls) dict.__init__(new, *args) return new def __init__(self, *args): pass def __hash__(self): try: return self._cached_hash except AttributeError: h = self._cached_hash = hash(tuple(sorted(self.items()))) return h def __repr__(self): return 'frozendict(%s)' % dict.__repr__(self) ''', file=fd) def generate_exceptions(self, fd): done_cats = [] print_('''\ class Error(Exception): code = None @staticmethod def raise_on_rc(rc): global exceptions_dict if rc != 0: exception = exceptions_dict.get(rc, Error()) exception.code = rc raise exception def __str__(self): if self.code: return '' % (self.__class__.__name__, self.code, _lasso.strError(self.code)) else: if sys.version_info >= (3,): return '' % (self.__class__.__name__, super().__str__()) else: return '' % (self.__class__.__name__, self.message) def __getitem__(self, i): # compatibility with SWIG bindings if i == 0: return self.code elif i == 1: return _lasso.strError(self.code) else: raise IndexError() ''', file=fd) for exc_cat in self.binding_data.overrides.findall('exception/category'): cat = exc_cat.attrib.get('name') done_cats.append(cat) parent_cat = exc_cat.attrib.get('parent', '') print_('''\ class %sError(%sError): pass ''' % (cat, parent_cat), file=fd) exceptions_dict = {} for c in self.binding_data.constants: m = re.match(r'LASSO_(\w+)_ERROR_(.*)', c[1]) if not m: continue cat, detail = m.groups() cat = cat.title().replace('_', '') detail = (cat + '_' + detail).title().replace('_', '') if not cat in done_cats: done_cats.append(cat) for exc_cat in self.binding_data.overrides.findall('exception/category'): if exc_cat.attrib.get('name') == cat: parent_cat = exc_cat.attrib.get('parent') break else: parent_cat = '' print_('''\ class %sError(%sError): pass ''' % (cat, parent_cat), file=fd) exceptions_dict[detail] = c[1][6:] if (detail, cat) == ('UnsupportedProfile', 'Logout'): # skip Logout/UnsupportedProfile exception as its name would # be the same as Profile/UnsupportedProfile; it is not a # problem skipping it as they both inherit from ProfileError # and the exception code will correctly be set by raise_on_rc # afterwards. (actually it is even totally unnecessary to skip # it here as Profile/UnsupportedProfile is handled after # Logout/UnsupportedProfile, this is just done in the case the # ordering would change) continue print_('''\ class %sError(%sError): pass ''' % (detail, cat), file=fd) print_('exceptions_dict = {', file=fd) for k, v in exceptions_dict.items(): print_(' _lasso.%s: %sError,' % (v, k), file=fd) print_('}', file=fd) print_('', file=fd) def generate_footer(self, fd): print_(''' def _profileGetIssuer(cls, *args, **kwargs): return profileGetIssuer(*args, **kwargs) Profile.getIssuer = classmethod(_profileGetIssuer) import lasso # backward compatibility with the SWIG binding Profile.isIdentityDirty = property(Profile.hasDirtyIdentity) Profile.isSessionDirty = property(Profile.hasDirtySession) def identity_get_provider_ids(self): return self.federations.keys() Identity.providerIds = property(identity_get_provider_ids) def server_get_provider_ids(self): return self.providers.keys() Server.providerIds = property(server_get_provider_ids) def session_get_provider_ids(self): return self.assertions.keys() Session.providerIds = property(session_get_provider_ids) def LassoNode__getstate__(self): return { '__dump__': self.dump() } def LassoNode__setstate__(self, d): self._cptr = _lasso.node_new_from_dump(d.pop('__dump__')) Node.__getstate__ = LassoNode__getstate__ Node.__setstate__ = LassoNode__setstate__ Samlp2AuthnRequest.nameIDPolicy = Samlp2AuthnRequest.nameIdPolicy LibAuthnRequest.nameIDPolicy = LibAuthnRequest.nameIdPolicy Saml2Subject.nameID = Saml2Subject.nameId MiscTextNode.text_child = MiscTextNode.textChild NodeList = list StringList = list StringDict = dict ''', file=fd) def generate_constants(self, fd): print_('### Constants (both enums and defines)', file=fd) for c in self.binding_data.constants: print_('%s = _lasso.%s' % (c[1][6:], c[1][6:]), file=fd) for c in self.binding_data.overrides.findall('constant'): name = c.attrib.get('name') if c.attrib.get('value'): name = name[6:] # dropping LASSO_ value = c.attrib.get('value') if value == 'True': print_('%s = True' % name, file=fd) else: print_('E: unknown value for constant: %r' % value, file=sys.stderr) print_('', file=fd) def generate_class(self, clss, fd): klassname = clss.name[5:] # remove Lasso from class name if clss.parent == 'GObject': parentname = 'object' else: parentname = clss.parent[5:] print_('''class %(klassname)s(%(parentname)s):''' % locals(), file=fd) methods = clss.methods[:] # constructor(s) method_prefix = 'lasso_' + format_as_underscored(klassname) + '_' empty = True for m in self.binding_data.functions: if m.name == method_prefix + 'new': empty = False c_args = [] py_args = [] for arg in m.args: py_args.append(get_python_arg_decl(arg)) if not is_int(arg, self.binding_data) and is_object(arg): c_args.append('%(name)s and %(name)s._cptr' % { 'name' : arg_name(arg) }) elif is_cstring(arg): c_args.append('str2lasso(%s)' % arg_name(arg)) else: c_args.append(arg_name(arg)) py_args = remove_bad_optional(py_args) c_args = ', '.join(c_args) py_args = ', ' + ', '.join(py_args) print_(' def __init__(self%s):' % py_args, file=fd) # XXX: could check self._cptr.typename to see if it got the # right class type print_(' self._cptr = _lasso.%s(%s)' % ( m.name[6:], c_args), file=fd) print_(' if self._cptr is None:', file=fd) print_(' raise Error(\'failed to create object\')', file=fd) print_('', file=fd) for m in self.binding_data.functions: if m.name.startswith(method_prefix + 'new_'): empty = False constructor_name = format_as_camelcase(m.name[len(method_prefix):]) c_args = [] py_args = [] for arg in m.args: aname = arg_name(arg) py_args.append(get_python_arg_decl(arg)) if not is_int(arg, self.binding_data) and is_object(arg): c_args.append('%s and %s._cptr' % (aname, aname)) elif is_cstring(arg): c_args.append('str2lasso(%s)' % arg_name(arg)) else: c_args.append(aname) opt = False py_args = remove_bad_optional(py_args) for x in py_args: if '=' in x: opt = True elif opt: print_('W: non-optional follows optional,', m, file=sys.stderr) c_args = ', '.join(c_args) py_args = ', ' + ', '.join(py_args) print_(' @classmethod', file=fd) print_(' def %s(cls%s):' % (constructor_name, py_args), file=fd) print_(' return cptrToPy(_lasso.%s(%s))' % (m.name[6:], c_args), file=fd) print_('', file=fd) # create properties for members for m in clss.members: empty = False mname = format_as_camelcase(m[1]) options = m[2] # getter print_(' def get_%s(self):' % mname, file=fd) print_(' t = _lasso.%s_%s_get(self._cptr)' % ( klassname, mname), file=fd) if is_int(m, self.binding_data) or is_xml_node(m) or is_cstring(m) or is_boolean(m): pass elif is_object(m): print_(' t = cptrToPy(t)', file=fd) elif is_glist(m): el_type = element_type(m) if is_cstring(el_type): pass elif is_xml_node(el_type): pass elif is_object(el_type): print_(' if not t: return t', file=fd) print_(' t = tuple([cptrToPy(x) for x in t])', file=fd) else: raise Exception('Unsupported python getter %s.%s' % (clss, m)) elif is_hashtable(m): el_type = element_type(m) print_(' if not t: return t', file=fd) if is_object(el_type): print_(' d2 = {}', file=fd) print_(' for k, v in t.items():', file=fd) print_(' d2[k] = cptrToPy(v)', file=fd) print_(' t = frozendict(d2)', file=fd) else: print_(' t = frozendict(t)', file=fd) elif is_boolean(m) or is_int(m, self.binding_data) or is_xml_node(m) or is_cstring(m): pass else: raise Exception('Unsupported python getter %s.%s' % (clss, m)) print_(' return t;', file=fd) # setter print_(' def set_%s(self, value):' % mname, file=fd) if is_int(m, self.binding_data) or is_xml_node(m) or is_boolean(m): pass elif is_cstring(m): print_(' value = str2lasso(value)', file=fd) elif is_object(m): print_(' if value is not None:', file=fd) print_(' value = value and value._cptr', file=fd) elif is_glist(m): el_type = element_type(m) if is_cstring(el_type) or is_xml_node(el_type): pass elif is_object(el_type): print_(' if value is not None:', file=fd) print_(' value = tuple([x._cptr for x in value])', file=fd) else: raise Exception('Unsupported python setter %s.%s' % (clss, m)) elif is_hashtable(m): print_('W: unsupported setter for hashtable %s' % (m,), file=sys.stderr) else: print_('W: unsupported setter for %s' % (m,), file=sys.stderr) print_(' _lasso.%s_%s_set(self._cptr, value)' % ( klassname, mname), file=fd) print_(' %s = property(get_%s, set_%s)' % (mname, mname, mname), file=fd) old_mname = old_format_as_camelcase(m[1]) if mname != old_mname: print_(' %s = %s' % (old_mname, mname), file=fd) print_('', file=fd) # first pass on methods, getting accessors # second pass on methods, real methods for m in methods: empty = False if m.name.endswith('_new') or m.name.endswith('_new_from_dump') or \ m.name.endswith('_new_full'): continue if not m.name.startswith(method_prefix): print_('W:', m.name, 'vs', method_prefix, file=sys.stderr) continue if m.rename: mname = m.rename[len(method_prefix):] function_name = m.rename[6:] else: mname = m.name[len(method_prefix):] function_name = m.name[6:] py_args = [] c_args = [] outarg = None for arg in m.args[1:]: if is_out(arg): assert not outarg outarg = arg outvar = '_%s_out' % arg_name(arg) else: py_args.append(get_python_arg_decl(arg)) if is_out(arg): c_args.append(outvar) elif is_cstring(arg): c_args.append('str2lasso(%s)' % arg_name(arg)) elif is_xml_node(arg) or is_boolean(arg) or is_cstring(arg) or is_int(arg, self.binding_data) or is_glist(arg) or is_hashtable(arg) or is_time_t_pointer(arg): c_args.append(arg_name(arg)) elif is_object(arg): c_args.append('%(name)s and %(name)s._cptr' % { 'name': arg_name(arg) }) else: raise Exception('Does not handle argument of type: %s' % ((m, arg),)) # check py_args py_args = remove_bad_optional(py_args) opt = False for x in py_args: if '=' in x: opt = True elif opt: print_('W: non-optional follow optional,', m, file=sys.stderr) if py_args: py_args = ', ' + ', '.join(py_args) else: py_args = '' if c_args: c_args = ', ' + ', '.join(c_args) else: c_args = '' print_(' def %s(self%s):' % ( format_underscore_as_camelcase(mname), py_args), file=fd) if m.docstring: print_(" '''", file=fd) print_(self.format_docstring(m, mname, 8), file=fd) print_(" '''", file=fd) if outarg: print_(" %s = list((None,))" % outvar, file=fd) return_type = m.return_type return_type_qualifier = m.return_type_qualifier assert is_int(make_arg(return_type),self.binding_data) or not outarg if return_type in (None, 'void'): print_(' _lasso.%s(self._cptr%s)' % ( function_name, c_args), file=fd) elif is_rc(m.return_arg): print_(' rc = _lasso.%s(self._cptr%s)' % ( function_name, c_args), file=fd) print_(' Error.raise_on_rc(rc)', file=fd) elif (is_int(m.return_arg, self.binding_data) or is_xml_node(m.return_arg) or is_cstring(m.return_arg) or is_boolean(m.return_arg) or is_hashtable(m.return_arg)): print_(' return _lasso.%s(self._cptr%s)' % ( function_name, c_args), file=fd) elif is_glist(m.return_arg): el_type = element_type(m.return_arg) if is_object(el_type): print_(' value = _lasso.%s(self._cptr%s)' % ( function_name, c_args), file=fd) print_(' if value is not None:', file=fd) print_(' value = tuple([cptrToPy(x) for x in value])', file=fd) print_(' return value', file=fd) elif is_cstring(el_type) or is_xml_node(el_type): print_(' return _lasso.%s(self._cptr%s)' % ( function_name, c_args), file=fd) else: raise Exception('Return Type GList<%s> is not supported' % el_type) elif is_object(m.return_arg): print_(' return cptrToPy(_lasso.%s(self._cptr%s))' % ( function_name, c_args), file=fd) else: raise Exception('Return type %s is unsupported' % (m.return_arg,)) if outarg: print_(' return %s[0]' % outvar, file=fd) print_('', file=fd) # transform methods to properties for m in methods: if len(m.args) > 1: continue name = m.rename or m.name suffix = name[len(method_prefix)+len('get_'):] if clss.getMember(suffix): print_('W: method %s and member %s clashes' % (m.name, arg_name(clss.getMember(suffix))), file=sys.stderr) continue if not name.startswith(method_prefix) or not name[len(method_prefix):].startswith('get_'): continue setter_suffix = 'set_' + suffix setter = None for n in methods: if n.name.endswith(setter_suffix) and len(n.args) == 2: setter = n pname = format_as_camelcase(name[len(method_prefix)+len('get_'):]) fname = format_as_camelcase(name[len(method_prefix):]) if not setter: print_(' %s = property(%s)' % (pname, fname), file=fd) else: f2name = format_as_camelcase(setter.name[len(method_prefix):]) print_(' %s = property(%s, %s)' % (pname, fname, f2name), file=fd) if empty: print_(' pass', file=fd) print_('', file=fd) def format_docstring(self, func, method_name, indent): if func.args: first_arg_name = func.args[0][1] else: first_arg_name = None def format_inlines_sub(s): type = s.group(1)[0] var = s.group(1)[1:] if type == '#': # struct if var.startswith('Lasso'): return 'L{%s}' % var[5:] elif type == '%': # %TRUE, %FALSE if var == 'TRUE': return 'True' if var == 'FALSE': return 'False' print_('W: unknown docstring thingie: %s' % s.group(1), file=sys.stderr) elif type == '@': if var == first_arg_name: var = 'self' return 'C{%s}' % var return s.group(1) regex = re.compile(r'([\#%@]\w+)', re.DOTALL) def format_inline(s): s = regex.sub(format_inlines_sub, s) return s.replace('NULL', 'None') docstring = func.docstring s = [] if docstring.description: for paragraph in docstring.description.split('\n\n'): if '' in paragraph: before, after = paragraph.split('' ,1) if before: s.append('\n'.join(textwrap.wrap( format_inline(before), 70))) # remove tags after = after.replace('', '') after = after.replace('', '') for listitem in after.split(''): listitem = listitem.replace('', '').strip() s.append('\n'.join(textwrap.wrap( format_inline(listitem), 70, initial_indent = ' - ', subsequent_indent = ' '))) s.append('\n\n') else: s.append('\n'.join(textwrap.wrap( format_inline(paragraph), 70))) s.append('\n\n') for param in docstring.parameters: s.append('\n'.join(textwrap.wrap( format_inline(param[1]), 70, initial_indent = '@param %s: ' % param[0], subsequent_indent = 4*' '))) s.append('\n') if docstring.return_value: rv = docstring.return_value exceptions_instead = ['0 on success; or a negative value otherwise.', '0 on success; a negative value if an error occured.', '0 on success; another value if an error occured.'] if not rv in exceptions_instead: owner_info = ['This xmlnode must be freed by caller.', 'The string must be freed by the caller.', 'It must be freed by the caller.', 'This string must be freed by the caller.'] for o_i in owner_info: rv = rv.replace(o_i, '') s.append('\n'.join(textwrap.wrap( format_inline(rv), 70, initial_indent = '@return: ', subsequent_indent = 4*' '))) s.append('\n') if s: s[-1] = s[-1].rstrip() # remove trailing newline from last line return '\n'.join([(indent*' ')+x for x in ''.join(s).splitlines()]) def generate_functions(self, fd): for m in self.binding_data.functions: if m.name.endswith('_new') or '_new_' in m.name: continue if m.rename: pname = m.rename name = m.rename if name.startswith('lasso_'): name = name[6:] pname = format_as_camelcase(name) else: name = m.name[6:] pname = format_as_camelcase(name) print_('%s = _lasso.%s' % (pname, name), file=fd) def generate_wrapper(self, fd): print_(open(os.path.join(self.src_dir,'wrapper_top.c')).read(), file=fd) for h in self.binding_data.headers: print_('#include <%s>' % h, file=fd) print_('', file=fd) self.generate_constants_wrapper(fd) self.wrapper_list = [] for m in self.binding_data.functions: self.generate_function_wrapper(m, fd) for c in self.binding_data.structs: self.generate_member_wrapper(c, fd) for m in c.methods: self.generate_function_wrapper(m, fd) self.generate_wrapper_list(fd) print_(open(os.path.join(self.src_dir,'wrapper_bottom.c')).read(), file=fd) def generate_constants_wrapper(self, fd): print_('''static void register_constants(PyObject *d) { PyObject *obj; ''', file=fd) for c in self.binding_data.constants: if c[0] == 'i': print_(' obj = PyInt_FromLong(%s);' % c[1], file=fd) elif c[0] == 's': print_(' obj = PyString_FromString((char*)%s);' % c[1], file=fd) elif c[0] == 'b': print_('''\ #ifdef %s obj = Py_True; #else obj = Py_False; #endif''' % c[1], file=fd) else: print_('E: unknown constant type: %r' % c[0], file=sys.stderr) print_(' PyDict_SetItemString(d, "%s", obj);' % c[1][6:], file=fd) if c[0] != 'b': # refcount of Py_True/False should not be changed print_(' Py_DECREF(obj);', file=fd) print_('}', file=fd) print_('', file=fd) def generate_member_wrapper(self, c, fd): klassname = c.name for m in c.members: name = arg_name(m) mname = format_as_camelcase(arg_name(m)) # getter print_('''static PyObject* %s_%s_get(G_GNUC_UNUSED PyObject *self, PyObject *args) {''' % (klassname[5:], mname), file=fd) self.wrapper_list.append('%s_%s_get' % (klassname[5:], mname)) ftype = arg_type(m) if is_cstring(m): ftype = 'char*' print_(' %s return_value;' % ftype, file=fd) print_(' PyObject* return_pyvalue;', file=fd) print_(' PyGObjectPtr* cvt_this;', file=fd) print_(' %s* this;' % klassname, file=fd) print_('', file=fd) print_(' if (! PyArg_ParseTuple(args, "O", &cvt_this)) return NULL;', file=fd) print_(' this = (%s*)cvt_this->obj;' % klassname, file=fd) print_(' return_value = this->%s;' % arg_name(m), file=fd) try: self.return_value(fd, m) except: print_('W: cannot make an assignment for', c, m, file=sys.stderr) raise print_(' return return_pyvalue;', file=fd) print_('}', file=fd) print_('', file=fd) # setter print_('''static PyObject* %s_%s_set(G_GNUC_UNUSED PyObject *self, PyObject *args) {''' % (klassname[5:], mname), file=fd) self.wrapper_list.append('%s_%s_set' % (klassname[5:], mname)) print_(' PyGObjectPtr* cvt_this;', file=fd) print_(' %s* this;' % klassname, file=fd) type = m[0] # Determine type class if is_cstring(m): type = type.replace('const ', '') parse_format = 'z' parse_arg = '&value' print_(' %s value;' % type, file=fd) elif is_int(m, self.binding_data): parse_format = 'l' parse_arg = '&value' print_(' long value;', file=fd) elif is_glist(m) or is_hashtable(m) or is_xml_node(m) or is_boolean(m): parse_format = 'O' print_(' PyObject *cvt_value;', file=fd) parse_arg = '&cvt_value' elif is_object(m): parse_format = 'O' print_(' PyGObjectPtr *cvt_value;', file=fd) parse_arg = '&cvt_value' else: raise Exception('Unsupported field: %s' % (m,)) # Get GObject print_(' if (! PyArg_ParseTuple(args, "O%s", &cvt_this, %s)) return NULL;' % ( parse_format, parse_arg), file=fd) print_(' this = (%s*)cvt_this->obj;' % klassname, file=fd) # Change value if is_int(m, self.binding_data): print_(' this->%s = value;' % name, file=fd) elif is_boolean(m): print_(' this->%s = PyInt_AS_LONG(cvt_value) ? TRUE : FALSE;' % name, file=fd) elif is_cstring(m): print_(' lasso_assign_string(this->%s, value);' % name, file=fd) elif is_xml_node(m): print_(' if (this->%s) xmlFreeNode(this->%s);' % (name, name), file=fd) print_(' this->%s = get_xml_node_from_pystring(cvt_value);' % name, file=fd) elif is_glist(m): el_type = element_type(m) if is_cstring(el_type): print_(' RETURN_IF_FAIL(set_list_of_strings(&this->%s, cvt_value));' % name, file=fd) elif is_xml_node(el_type): print_(' RETURN_IF_FAIL(set_list_of_xml_nodes(&this->%s, cvt_value));' % name, file=fd) elif is_object(el_type): print_(' RETURN_IF_FAIL(set_list_of_pygobject(&this->%s, cvt_value));' % name, file=fd) else: raise Exception('Unsupported setter for %s' % (m,)) elif is_hashtable(m): el_type = element_type(m) if is_object(el_type): print_(' RETURN_IF_FAIL(set_hashtable_of_pygobject(this->%s, cvt_value));' % name, file=fd) else: print_(' RETURN_IF_FAIL(set_hashtable_of_strings(this->%s, cvt_value));' % name, file=fd) elif is_object(m): print_(' set_object_field((GObject**)&this->%s, cvt_value);' % name, file=fd) else: raise Exception('Unsupported member %s.%s' % (klassname, m)) print_(' return noneRef();', file=fd) print_('}', file=fd) print_('', file=fd) def return_value(self, fd, arg, return_var_name = 'return_value', return_pyvar_name = 'return_pyvalue'): if is_boolean(arg): print_(' if (%s) {' % return_var_name, file=fd) print_(' Py_INCREF(Py_True);', file=fd) print_(' %s = Py_True;' % return_pyvar_name, file=fd) print_(' } else {', file=fd) print_(' Py_INCREF(Py_False);', file=fd) print_(' %s = Py_False;' % return_pyvar_name, file=fd) print_(' }', file=fd) elif is_int(arg, self.binding_data): print_(' %s = PyInt_FromLong(%s);' % (return_pyvar_name, return_var_name), file=fd) elif is_cstring(arg) and is_transfer_full(arg): print_(' if (%s) {' % return_var_name, file=fd) print_(' %s = PyString_FromString(%s);' % (return_pyvar_name, return_var_name), file=fd) print_(' } else {', file=fd) print_(' %s = noneRef();' % return_pyvar_name, file=fd) print_(' }', file=fd) elif is_cstring(arg): print_(' if (%s) {' % return_var_name, file=fd) print_(' %s = PyString_FromString(%s);' % (return_pyvar_name, return_var_name), file=fd) print_(' } else {', file=fd) print_(' %s = noneRef();' % return_pyvar_name, file=fd) print_(' }', file=fd) elif is_glist(arg): el_type = element_type(arg) if is_object(el_type): print_(' %s = get_list_of_pygobject(%s);' % (return_pyvar_name, return_var_name), file=fd) elif is_cstring(el_type): print_(' %s = get_list_of_strings(%s);' % (return_pyvar_name, return_var_name), file=fd) elif is_xml_node(el_type): print_(' %s = get_list_of_xml_nodes(%s);' % (return_pyvar_name, return_var_name), file=fd) else: raise Exception('failed to make an assignment for %s' % (arg,)) elif is_hashtable(arg): el_type = element_type(arg) if is_object(el_type): print_(' %s = get_dict_from_hashtable_of_objects(%s);' % (return_pyvar_name, return_var_name), file=fd) else: print_(' %s = get_dict_from_hashtable_of_strings(%s);' % (return_pyvar_name, return_var_name), file=fd) elif is_xml_node(arg): # convert xmlNode* to strings print_(' if (%s) {' % return_var_name, file=fd) print_(' %s = get_pystring_from_xml_node(%s);' % (return_pyvar_name, return_var_name), file=fd) print_(' } else {', file=fd) print_(' %s = noneRef();' % return_pyvar_name, file=fd) print_(' }', file=fd) elif is_object(arg): # return a PyGObjectPtr (wrapper around GObject) print_('''\ if (%s) { %s = PyGObjectPtr_New(G_OBJECT(%s)); } else { %s = noneRef(); } ''' % (return_var_name, return_pyvar_name, return_var_name, return_pyvar_name), file=fd) else: raise Exception('failed to make an assignment for %s' % (arg,)) def generate_function_wrapper(self, m, fd): if m.rename: name = m.rename if name.startswith('lasso_'): name = name[6:] else: name = m.name[6:] self.wrapper_list.append(name) print_('''static PyObject* %s(G_GNUC_UNUSED PyObject *self, PyObject *args) { int ok = 1;''' % name, file=fd) parse_tuple_format = [] parse_tuple_args = [] for arg in m.args: atype = arg_type(arg) aname = arg_name(arg) arg_def = None python_cvt_def = None defval = None if is_optional(arg): if not '|' in parse_tuple_format: parse_tuple_format.append('|') if is_cstring(arg): atype = unconstify(atype) if is_optional(arg): parse_tuple_format.append('z') else: parse_tuple_format.append('s') parse_tuple_args.append('&%s' % aname) arg_def = ' %s %s = NULL;' % (arg[0], arg[1]) elif is_int(arg, self.binding_data) or is_boolean(arg): parse_tuple_format.append('i') parse_tuple_args.append('&%s' % aname) if arg_default(arg): defval = arg_default(arg) if defval.startswith('b:'): defval = defval[2:].upper() else: defval = defval[2:] arg_def = ' %s %s = %s;' % (arg[0], arg[1], defval) else: arg_def = ' %s %s;' % (arg[0], arg[1]) elif is_hashtable(arg) or is_xml_node(arg) or is_list(arg) or is_time_t_pointer(arg): parse_tuple_format.append('O') parse_tuple_args.append('&cvt_%s' % aname) arg_def = ' %s %s = NULL;' % (arg[0], arg[1]) python_cvt_def = ' PyObject *cvt_%s = NULL;' % aname else: parse_tuple_format.append('O') parse_tuple_args.append('&cvt_%s' % aname) arg_def = ' %s %s = NULL;' % (arg[0], arg[1]) python_cvt_def = ' PyGObjectPtr *cvt_%s = NULL;' % aname if is_out(arg): arg_def = ' %s %s = NULL;' % (var_type(arg), arg[1]) parse_tuple_format.pop() parse_tuple_format.append('O') parse_tuple_args.pop() parse_tuple_args.append('&cvt_%s_out' % aname) python_cvt_def = ' PyObject *cvt_%s_out = NULL;' % aname print_(' PyObject *out_pyvalue = NULL;', file=fd) print_(arg_def, file=fd) if python_cvt_def: print_(python_cvt_def, file=fd) if m.return_type: print_(' %s return_value;' % m.return_type, file=fd) print_(' PyObject* return_pyvalue = NULL;', file=fd) print_('', file=fd) parse_tuple_args = ', '.join(parse_tuple_args) if parse_tuple_args: parse_tuple_args = ', ' + parse_tuple_args print_(' if (! PyArg_ParseTuple(args, "%s"%s)) return NULL;' % ( ''.join(parse_tuple_format), parse_tuple_args), file=fd) for f, arg in zip([ x for x in parse_tuple_format if x != '|'], m.args): if is_out(arg): continue if is_list(arg): qualifier = element_type(arg) if is_cstring(qualifier): print_(' EXIT_IF_FAIL(set_list_of_strings(&%s, cvt_%s));' % (arg[1], arg[1]), file=fd) elif is_xml_node(qualifier): print_(' EXIT_IF_FAIL(set_list_of_xml_nodes(&%s, cvt_%s));' % (arg[1], arg[1]), file=fd) elif isinstance(qualifier, str) and qualifier.startswith('Lasso'): print_(' EXIT_IF_FAIL(set_list_of_pygobject(&%s, cvt_%s));' % (arg[1], arg[1]), file=fd) else: print_('E: unqualified GList argument in', name, qualifier, arg, file=sys.stderr) elif is_xml_node(arg): print_(' %s = get_xml_node_from_pystring(cvt_%s);' % (arg[1], arg[1]), file=fd) elif is_time_t_pointer(arg): print_(' %s = get_time_t(cvt_%s);' % (arg[1], arg[1]), file=fd) elif is_hashtable(arg): el_type = element_type(arg) k_type = key_type(arg) v_type = value_type(arg) if is_cstring(el_type) or (is_cstring(k_type) and is_cstring(v_type)): print_(' %s = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);' % arg[1], file=fd) print_(' EXIT_IF_FAIL(set_hashtable_of_strings(%s, cvt_%s));' % (arg[1], arg[1]), file=fd) elif f == 'O': if is_optional(arg): print_(' if (PyObject_TypeCheck((PyObject*)cvt_%s, &PyGObjectPtrType)) {' % arg[1], file=fd) print_(' %s = (%s)cvt_%s->obj;' % (arg[1], arg[0], arg[1]), file=fd) print_(' } else {', file=fd) print_(' %s = NULL;' % arg[1], file=fd) print_(' }', file=fd) else: print_(' if (PyObject_TypeCheck((PyObject*)cvt_%s, &PyGObjectPtrType)) {' % arg[1], file=fd) print_(' %s = (%s)cvt_%s->obj;' % (arg[1], arg[0], arg[1]), file=fd) print_(' } else {', file=fd) print_(' PyErr_SetString(PyExc_TypeError, "value should be a PyGObject");', file=fd) print_(' return NULL;', file=fd) print_(' }', file=fd) if m.return_type: print_(' return_value = ', file=fd, end='') if 'new' in m.name: print_('(%s)' % m.return_type, file=fd) else: print_(' ', file=fd, end='') print_('%s(%s);' % (m.name, ', '.join([ref_name(x) for x in m.args])), file=fd) if m.return_type: # Constructor so decrease refcount (it was incremented by PyGObjectPtr_New called # in self.return_value try: self.return_value(fd, m.return_arg) except: print_('W: cannot assign return value of', m, file=sys.stderr) raise if is_transfer_full(m.return_arg, default=True): self.free_value(fd, m.return_arg, name = 'return_value') for f, arg in zip(parse_tuple_format, m.args): if is_out(arg): self.return_value(fd, arg, return_var_name = arg[1], return_pyvar_name = 'out_pyvalue') print_(' EXIT_IF_FAIL(%s);' % arg[1], file=fd) print_(' if (PyList_SetItem(cvt_%s_out, 0, out_pyvalue) == -1) {' % arg[1], file=fd) print_(' ok = 0;', file=fd) print_(' Py_XDECREF(out_pyvalue);', file=fd) print_(' }', file=fd) elif arg[0] == 'GList*': qualifier = arg[2].get('element-type') if is_cstring(qualifier): print_(' free_list(&%s, (GFunc)g_free);' % arg[1], file=fd) elif is_xml_node(qualifier): print_(' free_list(&%s, (GFunc)xmlFreeNode);' % arg[1], file=fd) elif is_object(qualifier): print_(' free_list(&%s, (GFunc)g_object_unref);' % arg[1], file=fd) elif is_time_t_pointer(arg): print_(' if (%s) free(%s);' % (arg[1], arg[1]), file=fd) elif not is_transfer_full(arg) and is_hashtable(arg): self.free_value(fd, arg) elif not is_transfer_full(arg) and is_xml_node(arg): self.free_value(fd, arg) print_('failure:', file=fd) if not m.return_type: print_(' if (ok) {', file=fd) print_(' return noneRef();', file=fd) else: print_(' if (ok && return_pyvalue) {', file=fd) print_(' return return_pyvalue;', file=fd) print_(' } else {', file=fd) if m.return_type: print_(' Py_XDECREF(return_pyvalue);', file=fd) print_(' return NULL;', file=fd) print_(' }', file=fd) print_('}', file=fd) print_('', file=fd) def generate_wrapper_list(self, fd): print_(''' static PyMethodDef lasso_methods[] = {''', file=fd) for m in self.wrapper_list: print_(' {"%s", %s, METH_VARARGS, NULL},' % (m, m), file=fd) print_(' {NULL, NULL, 0, NULL}', file=fd) print_('};', file=fd) print_('', file=fd) lasso-2.8.2/bindings/python/PaxHeaders/__init__.py0000644000000000000000000000013213766621500017157 xustar0030 mtime=1608196928.734895071 30 atime=1678814250.617553873 30 ctime=1678814321.645956931 lasso-2.8.2/bindings/python/__init__.py0000644000175000017500000000000013766621500022415 0ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/bindings/python/PaxHeaders/wrapper_bottom.c0000644000000000000000000000013214114336625020255 xustar0030 mtime=1630649749.794436646 30 atime=1678814250.817555003 30 ctime=1678814321.645956931 lasso-2.8.2/bindings/python/wrapper_bottom.c0000644000175000017500000000240414114336625023525 0ustar00bdauvergnebdauvergne00000000000000// Module init has changed quite a bit between Python 2 & 3. // Defines taken from . #if PY_MAJOR_VERSION >= 3 #define MOD_ERROR_VAL NULL #define MOD_SUCCESS_VAL(val) val #define MOD_INIT(name) PyMODINIT_FUNC PyInit_##name(void) #define MOD_DEF(ob, name, doc, methods) \ static struct PyModuleDef moduledef = { \ PyModuleDef_HEAD_INIT, name, doc, -1, methods, NULL, NULL, NULL, NULL}; \ ob = PyModule_Create(&moduledef); #else #define MOD_ERROR_VAL #define MOD_SUCCESS_VAL(val) #define MOD_INIT(name) void init##name(void) #define MOD_DEF(ob, name, doc, methods) \ ob = Py_InitModule3(name, methods, doc); #endif MOD_INIT(_lasso) { PyObject *m, *d; if (PyType_Ready(&PyGObjectPtrType) < 0) return MOD_ERROR_VAL; MOD_DEF(m, "_lasso", "_lasso wrapper module", lasso_methods); d = PyModule_GetDict(m); register_constants(d); lasso_wrapper_key = g_quark_from_static_string("PyLasso::wrapper"); Py_INCREF(&PyGObjectPtrType); PyModule_AddObject(m, "PyGObjectPtr", (PyObject *)&PyGObjectPtrType); lasso_init(); lasso_log_set_handler(G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION | G_LOG_LEVEL_MASK, lasso_python_log, NULL); return MOD_SUCCESS_VAL(m); } lasso-2.8.2/bindings/python/PaxHeaders/wrapper_top.c0000644000000000000000000000013214117162605017551 xustar0030 mtime=1631380869.377220943 30 atime=1678814250.717554439 30 ctime=1678814321.645956931 lasso-2.8.2/bindings/python/wrapper_top.c0000644000175000017500000004765514117162605023042 0ustar00bdauvergnebdauvergne00000000000000#include #include #include #include #include "../ghashtable.h" #include "../../lasso/debug.h" #include "../../lasso/utils.h" #include "../utils.c" #define PY_SSIZE_T_CLEAN #if PY_VERSION_HEX < 0x02050000 && !defined(PY_SSIZE_T_MIN) typedef int Py_ssize_t; #define PY_SSIZE_T_MAX INT_MAX #define PY_SSIZE_T_MIN INT_MIN #endif /** @todo Remove Python 3 defines and update the code when Python 2 is out of the picture. */ // Python 3 has unified int & long types. #if PY_MAJOR_VERSION >= 3 #define PyInt_AS_LONG PyLong_AS_LONG #define PyInt_Check PyLong_Check #define PyInt_FromLong PyLong_FromLong #endif // Python 3 has removed PyString and related functions, in favor of PyBytes & PyUnicode. #if PY_MAJOR_VERSION > 3 || (PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION >= 3) #define PyString_Check PyUnicode_Check #define PyString_FromFormat PyUnicode_FromFormat #define PyString_FromString PyUnicode_FromString #define PyString_AsString PyUnicode_AsUTF8 #define get_pystring PyUnicode_AsUTF8AndSize #define PyStringFree(string) ; #elif PY_MAJOR_VERSION >= 3 #define PyString_Check PyUnicode_Check #define PyString_FromFormat PyUnicode_FromFormat #define PyString_FromString PyUnicode_FromString static char *PyString_AsString(PyObject *string) { PyObject *bytes = PyUnicode_AsUTF8String(string); char *ret = NULL; if (! bytes) return NULL; ret = g_strdup(PyBytes_AsString(bytes)); Py_DECREF(bytes); return ret; } static char *get_pystring(PyObject *string, Py_ssize_t *size) { char *ret = NULL; ret = PyString_AsString(string); *size = strlen(ret); return ret; } #define PyStringFree(string) g_free(string) #elif PY_MAJOR_VERSION >= 3 #else static char *get_pystring(PyObject *string, Py_ssize_t *size) { char *ret = NULL; PyString_AsStringAndSize(string, &ret, size); return ret; } #define PyStringFree(string) ; void PyErr_WarnFormat(PyObject *category, int stacklevel, const char *format, ...) { va_list ap; char s[1024]; va_start(ap, format); g_vsnprintf(s, 1024, format, ap); va_end(ap); PyErr_WarnEx(category, s, stacklevel); } #endif #define RETURN_IF_FAIL(op) do { if (! (op)) { return NULL; } } while(0) #define EXIT_IF_FAIL(op) do { if (! (op)) { ok = 0; goto failure; } } while(0) GQuark lasso_wrapper_key; #if PY_MAJOR_VERSION > 3 PyMODINIT_FUNC PyInit_lasso(void); #else PyMODINIT_FUNC init_lasso(void); #endif G_GNUC_UNUSED static PyObject* get_pystring_from_xml_node(xmlNode *xmlnode); G_GNUC_UNUSED static xmlNode* get_xml_node_from_pystring(PyObject *string); G_GNUC_UNUSED static PyObject* get_dict_from_hashtable_of_objects(GHashTable *value); G_GNUC_UNUSED static PyObject* get_dict_from_hashtable_of_strings(GHashTable *value); G_GNUC_UNUSED static PyObject* PyGObjectPtr_New(GObject *obj); G_GNUC_UNUSED static int set_hashtable_of_pygobject(GHashTable *a_hash, PyObject *dict); G_GNUC_UNUSED static int set_hashtable_of_strings(GHashTable *a_hash, PyObject *dict); G_GNUC_UNUSED static int set_list_of_strings(GList **a_list, PyObject *seq); G_GNUC_UNUSED static int set_list_of_xml_nodes(GList **a_list, PyObject *seq); G_GNUC_UNUSED static int set_list_of_pygobject(GList **a_list, PyObject *seq); G_GNUC_UNUSED static PyObject *get_list_of_strings(const GList *a_list); G_GNUC_UNUSED static PyObject *get_list_of_xml_nodes(const GList *a_list); G_GNUC_UNUSED static PyObject *get_list_of_pygobject(const GList *a_list); G_GNUC_UNUSED static gboolean valid_seq(PyObject *seq); G_GNUC_UNUSED static void free_list(GList **a_list, GFunc free_help); G_GNUC_UNUSED static time_t* get_time_t(PyObject *time); typedef struct { PyObject_HEAD GObject *obj; PyObject *typename; } PyGObjectPtr; static PyTypeObject PyGObjectPtrType; /* utility functions */ static PyObject * noneRef() { Py_INCREF(Py_None); return Py_None; } static PyObject* get_dict_from_hashtable_of_objects(GHashTable *value) { GList *keys, *begin; PyObject *dict,*proxy; GObject *item_value; PyObject *item; dict = PyDict_New(); begin = keys = g_hash_table_get_keys(value); for (; keys; keys = g_list_next(keys)) { item_value = g_hash_table_lookup(value, keys->data); if (item_value) { item = PyGObjectPtr_New(G_OBJECT(item_value)); PyDict_SetItemString(dict, (char*)keys->data, item); Py_DECREF(item); } else { PyErr_WarnFormat(PyExc_RuntimeWarning, 1, "hashtable contains a null value"); } } g_list_free(begin); proxy = PyDictProxy_New(dict); Py_DECREF(dict); return proxy; } static PyObject* get_dict_from_hashtable_of_strings(GHashTable *value) { GList *keys, *begin; PyObject *dict,*proxy; char *item_value; PyObject *item; dict = PyDict_New(); if (value) { begin = keys = g_hash_table_get_keys(value); for (; keys; keys = g_list_next(keys)) { item_value = g_hash_table_lookup(value, keys->data); if (item_value) { item = PyString_FromString(item_value); PyDict_SetItemString(dict, (char*)keys->data, item); Py_DECREF(item); } else { PyErr_WarnFormat(PyExc_RuntimeWarning, 1, "hashtable contains a null value"); } } g_list_free(begin); } proxy = PyDictProxy_New(dict); Py_DECREF(dict); return proxy; } static xmlBuffer* xmlnode_to_xmlbuffer(xmlNode *node) { xmlOutputBufferPtr output_buffer; xmlBuffer *buffer; if (! node) return NULL; buffer = xmlBufferCreate(); output_buffer = xmlOutputBufferCreateBuffer(buffer, NULL); xmlNodeDumpOutput(output_buffer, NULL, node, 0, 0, NULL); xmlOutputBufferClose(output_buffer); xmlBufferAdd(buffer, BAD_CAST "", 1); return buffer; } static PyObject* get_pystring_from_xml_node(xmlNode *xmlnode) { PyObject *pystring = NULL; xmlBuffer *buffer; if (xmlnode == NULL) { return NULL; } buffer = xmlnode_to_xmlbuffer(xmlnode); if (buffer == NULL) { pystring = NULL; } else { pystring = PyString_FromString((char*)xmlBufferContent(buffer)); xmlBufferFree(buffer); } return pystring; } static gboolean valid_seq(PyObject *seq) { if (! seq || ( seq != Py_None && ! PyTuple_Check(seq))) { return 0; } return 1; } static void free_list(GList **a_list, GFunc free_help) { if (*a_list) { g_list_foreach(*a_list, free_help, NULL); g_list_free(*a_list); } } /** Remove all elements from a_hash and replace them with * the key-values pairs from the python dict. * Increase reference of new values before removeing * values from the hash, so if there are somme common * values with RefCoun = 1 they won't be deallocated. * */ static int set_hashtable_of_pygobject(GHashTable *a_hash, PyObject *dict) { PyObject *key, *value; Py_ssize_t i; if (! a_hash) { PyErr_SetString(PyExc_TypeError, "hashtable does not exist"); return 0; } if (dict != Py_None && ! PyDict_Check(dict)) { PyErr_SetString(PyExc_TypeError, "value should be a frozen dict"); return 0; } i = 0; // Increase ref count of common object between old and new // value of the hashtable while (PyDict_Next(dict, &i, &key, &value)) { if (! PyString_Check(key) || ! PyObject_TypeCheck(value, &PyGObjectPtrType)) { PyErr_SetString(PyExc_TypeError, "value should be a dict, " "with string keys " "and GObjectPtr values"); goto failure; } g_object_ref(((PyGObjectPtr*)value)->obj); } g_hash_table_remove_all (a_hash); i = 0; while (PyDict_Next(dict, &i, &key, &value)) { const char *ckey = PyString_AsString(key); g_hash_table_replace (a_hash, g_strdup(ckey), ((PyGObjectPtr*)value)->obj); PyStringFree(ckey); } return 1; failure: i = 0; while (PyDict_Next(dict, &i, &key, &value)) { if (! PyString_Check(key) || ! PyObject_TypeCheck(value, &PyGObjectPtrType)) break; g_object_unref((PyGObjectPtr*)value); } return 0; } static int set_hashtable_of_strings(GHashTable *a_hash, PyObject *dict) { PyObject *key, *value; Py_ssize_t i; if (! a_hash) { PyErr_SetString(PyExc_TypeError, "hashtable does not exist"); return 0; } if (dict != Py_None && ! PyDict_Check(dict)) { PyErr_SetString(PyExc_TypeError, "value should be a frozen dict"); return 0; } i = 0; // Increase ref count of common object between old and new // value of the hashtable while (PyDict_Next(dict, &i, &key, &value)) { if (! PyString_Check(key) || ! PyString_Check(value)) { PyErr_SetString(PyExc_TypeError, "value should be a dict, " "with string keys " "and string values"); goto failure; } } g_hash_table_remove_all (a_hash); i = 0; while (PyDict_Next(dict, &i, &key, &value)) { const char *ckey = PyString_AsString(key); const char *cvalue = PyString_AsString(value); g_hash_table_insert (a_hash, g_strdup(ckey), g_strdup(cvalue)); PyStringFree(ckey); PyStringFree(cvalue); } return 1; failure: return 0; } /** Set the GList* pointer, pointed by a_list, to a pointer on a new GList * created by converting the python seq into a GList of char*. */ static int set_list_of_strings(GList **a_list, PyObject *seq) { GList *list = NULL; int l = 0,i; if (! valid_seq(seq)) { PyErr_SetString(PyExc_TypeError, "value should be a tuple of strings"); return 0; } if (seq != Py_None) { l = PySequence_Length(seq); } for (i=0; iobj); list = g_list_append(list, gobject); } free_list(a_list, (GFunc)g_object_unref); *a_list = list; return 1; failure: free_list(&list, (GFunc)g_object_unref); return 0; } static xmlNode* get_xml_node_from_pystring(PyObject *string) { const char *utf8 = NULL; Py_ssize_t size; xmlNode *xml_node; utf8 = get_pystring(string, &size); xml_node = lasso_string_fragment_to_xmlnode(utf8, size); PyStringFree(utf8); return xml_node; } /** Return a tuple containing the string contained in a_list */ static PyObject * get_list_of_strings(const GList *a_list) { PyObject *a_tuple = NULL; int i = 0; /* Cast because g_list_length does not take const but is a const function */ a_tuple = PyTuple_New(g_list_length((GList*)a_list)); if (! a_tuple) goto failure; if (! a_list) { return a_tuple; } while (a_list) { if (a_list->data) { PyObject *str = PyString_FromString((const char*)a_list->data); if (!str) { goto failure; } PyTuple_SetItem(a_tuple, i, str); i++; } else { PyErr_WarnFormat(PyExc_RuntimeWarning, 1, "list contains a NULL value"); } a_list = a_list->next; } if (_PyTuple_Resize(&a_tuple, i)) goto failure; return a_tuple; failure: PyErr_SetString(PyExc_TypeError, "Allocation problem in get_list_of_strings"); Py_XDECREF(a_tuple); return NULL; } static PyObject * get_list_of_xml_nodes(const GList *a_list) { PyObject *a_tuple = NULL; int i = 0; /* Cast because g_list_length does not take const but is a const function */ a_tuple = PyTuple_New(g_list_length((GList*)a_list)); if (! a_tuple) goto failure; if (! a_list) { return a_tuple; } while (a_list) { if (a_list->data) { PyObject *str = get_pystring_from_xml_node((xmlNode*)a_list->data); if (str) { PyTuple_SetItem(a_tuple, i, str); i++; } else { PyErr_WarnFormat(PyExc_RuntimeWarning, 1, "could not convert an xmlNode to a string"); } } else { PyErr_WarnFormat(PyExc_RuntimeWarning, 1, "list contains a NULL value"); } a_list = a_list->next; } if (_PyTuple_Resize(&a_tuple, i)) goto failure; return a_tuple; failure: PyErr_SetString(PyExc_TypeError, "Allocation problem in get_list_of_strings"); Py_XDECREF(a_tuple); return NULL; } static PyObject * get_list_of_pygobject(const GList *a_list) { PyObject *a_tuple = NULL; int i = 0; /* Cast because g_list_length does not take const but is a const function */ a_tuple = PyTuple_New(g_list_length((GList*)a_list)); if (! a_tuple) goto failure; if (! a_list) { return a_tuple; } while (a_list) { if (a_list->data) { PyObject *pygobject; pygobject = PyGObjectPtr_New((GObject*)a_list->data); if (pygobject) { PyTuple_SetItem(a_tuple, i, pygobject); i++; } else { PyErr_WarnFormat(PyExc_RuntimeWarning, 1, "could not convert a GObject to a PyGobject"); } } else { PyErr_WarnFormat(PyExc_RuntimeWarning, 1, "list contains a NULL value"); } a_list = a_list->next; } if (_PyTuple_Resize(&a_tuple, i)) goto failure; return a_tuple; failure: PyErr_SetString(PyExc_TypeError, "Allocation problem in get_list_of_strings"); Py_XDECREF(a_tuple); return NULL; } /** * get_time_t: * @time: a #PyInt * * Convert a python integer object to a time_t value, considering it is a unsigned 32 bit integer * value. * * Return: a time_t* value if time is a python integer, NULL otherwise. */ static time_t* get_time_t(PyObject *time) { if (time != Py_None && PyInt_Check(time)) { time_t *val = malloc(sizeof(time_t)); *val = (time_t)PyInt_AS_LONG(time); return val; } return NULL; } /* wrapper around GObject */ static void PyGObjectPtr_dealloc(PyGObjectPtr *self) { if (lasso_flag_memory_debug) { fprintf(stderr, "dealloc (%p ptr to %p (type:%s, rc:%d))\n", self, self->obj, G_OBJECT_TYPE_NAME(self->obj), self->obj->ref_count); } g_object_set_qdata_full(self->obj, lasso_wrapper_key, NULL, NULL); g_object_unref(self->obj); Py_XDECREF(self->typename); Py_TYPE(self)->tp_free((PyObject*)self); } static int startswith(const char *string, const char *prefix) { return strncmp(string, prefix, strlen(prefix)) == 0; } static PyObject* PyGObjectPtr_New(GObject *obj) { PyGObjectPtr *self; if (obj == NULL) { return noneRef(); } self = (PyGObjectPtr*)g_object_get_qdata(obj, lasso_wrapper_key); if (self != NULL) { Py_INCREF(self); } else { const char *typename; self = (PyGObjectPtr*)PyObject_NEW(PyGObjectPtr, &PyGObjectPtrType); g_object_set_qdata_full(obj, lasso_wrapper_key, self, NULL); self->obj = g_object_ref(obj); typename = G_OBJECT_TYPE_NAME(obj); /* XXX: Fixme !!!!! */ if (startswith(typename, "LassoDgme")) { self->typename = PyString_FromString(typename+9); } else if (startswith(typename, "Lasso")) { self->typename = PyString_FromString(typename+5); } else { self->typename = PyString_FromString(typename); } } return (PyObject*)self; } static PyObject * PyGObjectPtr_repr(PyGObjectPtr *obj) { return PyString_FromFormat("", obj->obj, G_OBJECT_TYPE_NAME(obj->obj), obj->obj->ref_count); } static PyMemberDef PyGObjectPtr_members[] = { {"typename", T_OBJECT, offsetof(PyGObjectPtr, typename), 0, "typename"}, {NULL, 0, 0, 0, NULL} }; static PyObject* PyGObjectPtr_get_refcount(PyGObjectPtr *self, G_GNUC_UNUSED void *closure) { PyObject *refcount; refcount = PyInt_FromLong(self->obj->ref_count); Py_INCREF(refcount); return refcount; } static PyGetSetDef PyGObjectPtr_getseters[] = { {"refcount", (getter)PyGObjectPtr_get_refcount, NULL, "reference count of intern GObject*", NULL}, {NULL, NULL, NULL, NULL, NULL} /* Sentinel */ }; static PyTypeObject PyGObjectPtrType = { PyVarObject_HEAD_INIT(NULL, 0 /* ob_size */) "_lasso.PyGObjectPtr", /* tp_name */ sizeof(PyGObjectPtr), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)PyGObjectPtr_dealloc, /* tp_dealloc */ 0, /*tp_print*/ 0, /*tp_getattr*/ .tp_setattr = 0, /*tp_setattr*/ 0, /*tp_compare*/ (reprfunc)PyGObjectPtr_repr, /*tp_repr*/ 0, /*tp_as_number*/ 0, /*tp_as_sequence*/ 0, /*tp_as_mapping*/ 0, /*tp_hash */ 0, /*tp_call*/ 0, /*tp_str*/ 0, /*tp_getattro*/ 0, /*tp_setattro*/ 0, /*tp_as_buffer*/ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /*tp_flags*/ "PyGObjectPtr objects", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ 0, /* tp_iter */ 0, /* tp_iternext */ 0, /* tp_methods */ .tp_members=PyGObjectPtr_members, /* tp_members */ PyGObjectPtr_getseters, /* tp_getset */ NULL, NULL }; static void set_object_field(GObject **a_gobject_ptr, PyGObjectPtr *a_pygobject) { if (*a_gobject_ptr) { g_object_unref(*a_gobject_ptr); } if ((PyObject*)a_pygobject == Py_None) { *a_gobject_ptr = NULL; } else { *a_gobject_ptr = g_object_ref(a_pygobject->obj); } } static PyObject *get_logger_object(const char *domain) { static PyObject *_logger_object = NULL; PyObject *lasso_module = NULL; PyObject *logging_module = NULL; lasso_module = PyImport_ImportModule("lasso"); if (lasso_module && PyObject_HasAttrString(lasso_module, "logger")) { _logger_object = PyObject_GetAttrString(lasso_module, "logger"); if (_logger_object) goto exit; } logging_module = PyImport_ImportModule("logging"); if (logging_module) { _logger_object = PyObject_CallMethod(logging_module, "getLogger", "s", domain); } exit: if (lasso_module) { Py_DECREF(lasso_module); } if (logging_module) { Py_DECREF(logging_module); } if (_logger_object == Py_None) { Py_DECREF(_logger_object); _logger_object = NULL; } return _logger_object; } static void lasso_python_log(const char *domain, GLogLevelFlags log_level, const gchar *message, G_GNUC_UNUSED gpointer user_data) { PyObject *logger_object = get_logger_object(domain), *result; if (PyErr_Occurred()) { PyErr_Print(); PyErr_Clear(); return; } char *method = NULL; if (! logger_object) { PyErr_WarnFormat(PyExc_RuntimeWarning, 1, "neither lasso.logger nor " "logging.getLogger('lasso') did return a logger", 1); return; } switch (log_level) { case G_LOG_LEVEL_DEBUG: method = "debug"; break; case G_LOG_LEVEL_INFO: case G_LOG_LEVEL_MESSAGE: method = "info"; break; case G_LOG_LEVEL_WARNING: method = "warning"; break; case G_LOG_LEVEL_CRITICAL: method = "error"; break; case G_LOG_LEVEL_ERROR: method = "critical"; break; default: return; } result = PyObject_CallMethod(logger_object, method, "ss", "%s", message); Py_DECREF(logger_object); if (result) { Py_DECREF(result); } else { PyErr_WarnFormat(PyExc_RuntimeWarning, 1, "lasso could not call method %s on its logger", method); } /* clear any exception emitted during log call */ if (PyErr_Occurred()) { PyErr_Print(); } PyErr_Clear(); } lasso-2.8.2/bindings/python/PaxHeaders/tests0000644000000000000000000000013214404126161016124 xustar0030 mtime=1678814321.693957204 30 atime=1678814326.421984131 30 ctime=1678814321.693957204 lasso-2.8.2/bindings/python/tests/0000755000175000017500000000000014404126161021451 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/bindings/python/tests/PaxHeaders/profiles_tests.py0000644000000000000000000000013214117162531021622 xustar0030 mtime=1631380825.848637964 30 atime=1678098071.753502885 30 ctime=1678814321.685957158 lasso-2.8.2/bindings/python/tests/profiles_tests.py0000755000175000017500000006071514117162531025106 0ustar00bdauvergnebdauvergne00000000000000#! /usr/bin/env python # -*- coding: utf-8 -*- # # $Id: profiles_tests.py 3254 2007-06-05 21:23:57Z fpeters $ # # Python unit tests for Lasso library # # Copyright (C) 2004-2007 Entr'ouvert # http://lasso.entrouvert.org # # Authors: See AUTHORS file in top-level directory. # # 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 Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . import os import unittest import sys if not '..' in sys.path: sys.path.insert(0, '..') if not '../.libs' in sys.path: sys.path.insert(0, '../.libs') import lasso import logging logging.basicConfig() try: dataDir except NameError: srcdir = os.environ.get('TOP_SRCDIR', '.') dataDir = '%s/tests/data' % srcdir def server(local_name, remote_role, remote_name): pwd = os.path.join(dataDir, local_name, 'password') password = None if os.path.exists(pwd): password = open(pwd).read() s = lasso.Server( os.path.join(dataDir, local_name, 'metadata.xml'), os.path.join(dataDir, local_name, 'private-key.pem'), password) s.addProvider(remote_role, os.path.join(dataDir, remote_name, 'metadata.xml')) return s class ServerTestCase(unittest.TestCase): def test01(self): """Server construction, dump & newFromDump.""" lassoServer = lasso.Server( os.path.join(dataDir, 'sp1-la/metadata.xml'), os.path.join(dataDir, 'sp1-la/private-key-raw.pem'), None, os.path.join(dataDir, 'sp1-la/certificate.pem')) lassoServer.addProvider( lasso.PROVIDER_ROLE_IDP, os.path.join(dataDir, 'idp1-la/metadata.xml'), os.path.join(dataDir, 'idp1-la/public-key.pem'), os.path.join(dataDir, 'idp1-la/certificate.pem')) dump = lassoServer.dump() lassoServer2 = lassoServer.newFromDump(dump) dump2 = lassoServer2.dump() self.assertEqual(dump, dump2) def test02(self): """Server construction without argument, dump & newFromDump.""" lassoServer = lasso.Server( os.path.join(dataDir, 'sp1-la/metadata.xml')) lassoServer.addProvider( lasso.PROVIDER_ROLE_IDP, os.path.join(dataDir, 'idp1-la/metadata.xml'), os.path.join(dataDir, 'idp1-la/public-key.pem')) dump = lassoServer.dump() lassoServer2 = lassoServer.newFromDump(dump) dump2 = lassoServer2.dump() self.assertEqual(dump, dump2) class LoginTestCase(unittest.TestCase): def test01(self): """SP login; testing access to authentication request.""" lassoServer = lasso.Server( os.path.join(dataDir, 'sp1-la/metadata.xml'), os.path.join(dataDir, 'sp1-la/private-key-raw.pem'), None, os.path.join(dataDir, 'sp1-la/certificate.pem')) lassoServer.addProvider( lasso.PROVIDER_ROLE_IDP, os.path.join(dataDir, 'idp1-la/metadata.xml'), os.path.join(dataDir, 'idp1-la/public-key.pem'), os.path.join(dataDir, 'idp1-la/certificate.pem')) login = lasso.Login(lassoServer) login.initAuthnRequest() login.request login.request.protocolProfile = lasso.LIB_PROTOCOL_PROFILE_BRWS_ART self.assertEqual(login.request.protocolProfile, lasso.LIB_PROTOCOL_PROFILE_BRWS_ART) def test02(self): """SP login; testing processing of an empty Response.""" lassoServer = lasso.Server( os.path.join(dataDir, 'sp1-la/metadata.xml'), os.path.join(dataDir, 'sp1-la/private-key-raw.pem'), None, os.path.join(dataDir, 'sp1-la/certificate.pem')) lassoServer.addProvider( lasso.PROVIDER_ROLE_IDP, os.path.join(dataDir, 'idp1-la/metadata.xml'), os.path.join(dataDir, 'idp1-la/public-key.pem'), os.path.join(dataDir, 'idp1-la/certificate.pem')) login = lasso.Login(lassoServer) try: login.processResponseMsg('') except lasso.Error as error: if error[0] != lasso.PROFILE_ERROR_INVALID_MSG: raise def test03(self): """Conversion of a lib:AuthnRequest with an AuthnContext into a query and back.""" sp = lasso.Server( os.path.join(dataDir, 'sp1-la/metadata.xml'), os.path.join(dataDir, 'sp1-la/private-key-raw.pem'), None, os.path.join(dataDir, 'sp1-la/certificate.pem')) sp.addProvider( lasso.PROVIDER_ROLE_IDP, os.path.join(dataDir, 'idp1-la/metadata.xml'), os.path.join(dataDir, 'idp1-la/public-key.pem'), os.path.join(dataDir, 'idp1-la/certificate.pem')) spLogin = lasso.Login(sp) spLogin.initAuthnRequest() requestAuthnContext = lasso.LibRequestAuthnContext() authnContextClassRefsList = [] authnContextClassRefsList.append( lasso.LIB_AUTHN_CONTEXT_CLASS_REF_PASSWORD) requestAuthnContext.authnContextClassRef = tuple(authnContextClassRefsList) spLogin.request.requestAuthnContext = requestAuthnContext spLogin.request.protocolProfile = lasso.LIB_PROTOCOL_PROFILE_BRWS_ART spLogin.buildAuthnRequestMsg() authnRequestQuery = spLogin.msgUrl[spLogin.msgUrl.index('?') + 1:] idp = lasso.Server( os.path.join(dataDir, 'idp1-la/metadata.xml'), os.path.join(dataDir, 'idp1-la/private-key-raw.pem'), None, os.path.join(dataDir, 'idp1-la/certificate.pem')) idp.addProvider( lasso.PROVIDER_ROLE_SP, os.path.join(dataDir, 'sp1-la/metadata.xml'), os.path.join(dataDir, 'sp1-la/public-key.pem'), os.path.join(dataDir, 'sp1-la/certificate.pem')) idpLogin = lasso.Login(idp) idpLogin.processAuthnRequestMsg(authnRequestQuery) self.assertTrue(idpLogin.request.requestAuthnContext) authnContextClassRefsList = idpLogin.request.requestAuthnContext.authnContextClassRef self.assertEqual(len(authnContextClassRefsList), 1) self.assertEqual(authnContextClassRefsList[0], lasso.LIB_AUTHN_CONTEXT_CLASS_REF_PASSWORD) def test04(self): """Conversion of a lib:AuthnRequest with extensions into a query and back.""" sp = lasso.Server( os.path.join(dataDir, 'sp1-la/metadata.xml'), os.path.join(dataDir, 'sp1-la/private-key-raw.pem'), None, os.path.join(dataDir, 'sp1-la/certificate.pem')) sp.addProvider( lasso.PROVIDER_ROLE_IDP, os.path.join(dataDir, 'idp1-la/metadata.xml'), os.path.join(dataDir, 'idp1-la/public-key.pem'), os.path.join(dataDir, 'idp1-la/certificate.pem')) spLogin = lasso.Login(sp) spLogin.initAuthnRequest() extensionList = [] for extension in ( 'do', 'do action 2do action 3'): extensionList.append( '%s' % extension) spLogin.request.extension = tuple(extensionList) spLogin.request.protocolProfile = lasso.LIB_PROTOCOL_PROFILE_BRWS_ART spLogin.buildAuthnRequestMsg() authnRequestQuery = spLogin.msgUrl[spLogin.msgUrl.index('?') + 1:] idp = lasso.Server( os.path.join(dataDir, 'idp1-la/metadata.xml'), os.path.join(dataDir, 'idp1-la/private-key-raw.pem'), None, os.path.join(dataDir, 'idp1-la/certificate.pem')) idp.addProvider( lasso.PROVIDER_ROLE_SP, os.path.join(dataDir, 'sp1-la/metadata.xml'), os.path.join(dataDir, 'sp1-la/public-key.pem'), os.path.join(dataDir, 'sp1-la/certificate.pem')) idpLogin = lasso.Login(idp) idpLogin.processAuthnRequestMsg(authnRequestQuery) self.assertTrue(idpLogin.request.extension) extensionsList = idpLogin.request.extension self.assertEqual(len(extensionsList), 1) self.assertTrue('do' in extensionsList[0]) self.assertTrue('do action 2' in extensionsList[0]) self.assertTrue('do action 3' in extensionsList[0]) def test05(self): '''SAMLv2 Authn request emitted and received using Artifact binding''' sp = lasso.Server( os.path.join(dataDir, 'sp5-saml2/metadata.xml'), os.path.join(dataDir, 'sp5-saml2/private-key.pem')) assert sp sp.addProvider( lasso.PROVIDER_ROLE_IDP, os.path.join(dataDir, 'idp5-saml2/metadata.xml')) sp_login = lasso.Login(sp) assert sp_login sp_login.initAuthnRequest(None, lasso.HTTP_METHOD_ARTIFACT_GET) sp_login.buildAuthnRequestMsg() sp_login_dump = sp_login.dump() idp = lasso.Server( os.path.join(dataDir, 'idp5-saml2/metadata.xml'), os.path.join(dataDir, 'idp5-saml2/private-key.pem')) idp.addProvider( lasso.PROVIDER_ROLE_SP, os.path.join(dataDir, 'sp5-saml2/metadata.xml')) idp_login = lasso.Login(idp) idp_login.initRequest(sp_login.msgUrl.split('?')[1], lasso.HTTP_METHOD_ARTIFACT_GET) idp_login.buildRequestMsg() sp_login2 = lasso.Login.newFromDump(sp, sp_login_dump) assert isinstance(sp_login2, lasso.Login) assert idp_login.msgBody sp_login2.processRequestMsg(idp_login.msgBody) sp_login2.buildResponseMsg() assert sp_login2.msgBody try: idp_login.processResponseMsg(sp_login2.msgBody) except Exception: raise assert isinstance(idp_login.request, lasso.Samlp2AuthnRequest) def test_06(self): '''Login test between SP and IdP with encrypted private keys''' sp_server = server('sp7-saml2', lasso.PROVIDER_ROLE_IDP, 'idp7-saml2') idp_server = server('idp7-saml2', lasso.PROVIDER_ROLE_SP, 'sp7-saml2') sp_login = lasso.Login(sp_server) sp_login.initAuthnRequest() sp_login.request.protocolBinding = lasso.SAML2_METADATA_BINDING_POST sp_login.buildAuthnRequestMsg() idp_login = lasso.Login(idp_server) idp_login.setSignatureVerifyHint(lasso.PROFILE_SIGNATURE_VERIFY_HINT_FORCE) idp_login.processAuthnRequestMsg(sp_login.msgUrl.split('?')[1]) idp_login.validateRequestMsg(True, True) idp_login.buildAssertion("None", "None", "None", "None", "None") idp_login.buildAuthnResponseMsg() sp_login.setSignatureVerifyHint(lasso.PROFILE_SIGNATURE_VERIFY_HINT_FORCE) sp_login.processAuthnResponseMsg(idp_login.msgBody) sp_login.acceptSso() def test07(self): '''SAMLv2 SSO with DSA key for the IdP''' default_sign_meth = lasso.getDefaultSignatureMethod() if default_sign_meth != lasso.SIGNATURE_METHOD_RSA_SHA1: self.skipTest("This test requires that lasso is compiled with SHA1 as the default signature method") sp = lasso.Server( os.path.join(dataDir, 'sp5-saml2/metadata.xml'), os.path.join(dataDir, 'sp5-saml2/private-key.pem')) assert sp sp.addProvider( lasso.PROVIDER_ROLE_IDP, os.path.join(dataDir, 'idp12-dsa-saml2/metadata.xml')) sp_login = lasso.Login(sp) assert sp_login sp_login.initAuthnRequest(None, lasso.HTTP_METHOD_REDIRECT) sp_login.buildAuthnRequestMsg() idp = lasso.Server( os.path.join(dataDir, 'idp12-dsa-saml2/metadata.xml'), os.path.join(dataDir, 'idp12-dsa-saml2/private-key.pem')) idp.signatureMethod = lasso.SIGNATURE_METHOD_DSA_SHA1 idp.addProvider( lasso.PROVIDER_ROLE_SP, os.path.join(dataDir, 'sp5-saml2/metadata.xml')) idp_login = lasso.Login(idp) idp_login.processAuthnRequestMsg(sp_login.msgUrl.split('?')[1]) idp_login.protocolProfile = lasso.LOGIN_PROTOCOL_PROFILE_BRWS_POST idp_login.validateRequestMsg(True, True) idp_login.buildAssertion("None", "None", "None", "None", "None") idp_login.buildAuthnResponseMsg() def test08(self): '''Verify KeyEncryptionMethod support''' sp_server = server('sp5-saml2', lasso.PROVIDER_ROLE_IDP, 'idp5-saml2') idp_server = server('idp5-saml2', lasso.PROVIDER_ROLE_SP, 'sp5-saml2') def run(key_encryption_method=None): sp_login = lasso.Login(sp_server) sp_login.initAuthnRequest(None, lasso.HTTP_METHOD_REDIRECT) sp_login.buildAuthnRequestMsg() provider = idp_server.getProvider('http://sp5/metadata') provider.setEncryptionMode(lasso.ENCRYPTION_MODE_ASSERTION) if key_encryption_method: provider.setKeyEncryptionMethod(key_encryption_method) idp_login = lasso.Login(idp_server) idp_login.processAuthnRequestMsg(sp_login.msgUrl.split('?')[1]) idp_login.protocolProfile = lasso.LOGIN_PROTOCOL_PROFILE_BRWS_POST idp_login.validateRequestMsg(True, True) idp_login.buildAssertion("None", "None", "None", "None", "None") idp_login.buildAuthnResponseMsg() sp_login.setSignatureVerifyHint(lasso.PROFILE_SIGNATURE_VERIFY_HINT_FORCE) sp_login.processAuthnResponseMsg(idp_login.msgBody) sp_login.acceptSso() return sp_login.response.debug() os.environ['LASSO_DEFAULT_KEY_ENCRYPTION_METHOD'] = 'rsa-pkcs1' lasso.init() assert 'xmlenc#rsa-1_5' in run() assert 'xmlenc#rsa-oaep-mgf1p' not in run() os.environ['LASSO_DEFAULT_KEY_ENCRYPTION_METHOD'] = 'rsa-oaep' lasso.init() assert 'xmlenc#rsa-1_5' not in run() assert 'xmlenc#rsa-oaep-mgf1p' in run() lasso.setDefaultKeyEncryptionMethod(lasso.KEY_ENCRYPTION_METHOD_PKCS1) assert 'xmlenc#rsa-1_5' in run() assert 'xmlenc#rsa-oaep-mgf1p' not in run() lasso.setDefaultKeyEncryptionMethod(lasso.KEY_ENCRYPTION_METHOD_OAEP) assert 'xmlenc#rsa-1_5' not in run() assert 'xmlenc#rsa-oaep-mgf1p' in run() assert 'xmlenc#rsa-1_5' in run(key_encryption_method=lasso.KEY_ENCRYPTION_METHOD_PKCS1) assert 'xmlenc#rsa-oaep-mgf1p' not in run(key_encryption_method=lasso.KEY_ENCRYPTION_METHOD_PKCS1) assert 'xmlenc#rsa-1_5' not in run(key_encryption_method=lasso.KEY_ENCRYPTION_METHOD_OAEP) assert 'xmlenc#rsa-oaep-mgf1p' in run(key_encryption_method=lasso.KEY_ENCRYPTION_METHOD_OAEP) class LogoutTestCase(unittest.TestCase): def test01(self): """SP logout without session and identity; testing initRequest.""" lassoServer = lasso.Server( os.path.join(dataDir, 'sp1-la/metadata.xml'), os.path.join(dataDir, 'sp1-la/private-key-raw.pem'), None, os.path.join(dataDir, 'sp1-la/certificate.pem')) lassoServer.addProvider( lasso.PROVIDER_ROLE_IDP, os.path.join(dataDir, 'idp1-la/metadata.xml'), os.path.join(dataDir, 'idp1-la/public-key.pem'), os.path.join(dataDir, 'idp1-la/certificate.pem')) logout = lasso.Logout(lassoServer) try: logout.initRequest() except lasso.Error as error: if error[0] != lasso.PROFILE_ERROR_SESSION_NOT_FOUND: raise else: self.fail('logout.initRequest without having set identity before should fail') def test02(self): """IDP logout without session and identity; testing logout.getNextProviderId.""" lassoServer = lasso.Server( os.path.join(dataDir, 'idp1-la/metadata.xml'), os.path.join(dataDir, 'idp1-la/private-key-raw.pem'), None, os.path.join(dataDir, 'idp1-la/certificate.pem')) lassoServer.addProvider( lasso.PROVIDER_ROLE_SP, os.path.join(dataDir, 'sp1-la/metadata.xml'), os.path.join(dataDir, 'sp1-la/public-key.pem'), os.path.join(dataDir, 'sp1-la/certificate.pem')) logout = lasso.Logout(lassoServer) self.assertFalse(logout.getNextProviderId()) def test03(self): """IDP logout; testing processRequestMsg with non Liberty query.""" lassoServer = lasso.Server( os.path.join(dataDir, 'idp1-la/metadata.xml'), os.path.join(dataDir, 'idp1-la/private-key-raw.pem'), None, os.path.join(dataDir, 'idp1-la/certificate.pem')) lassoServer.addProvider( lasso.PROVIDER_ROLE_SP, os.path.join(dataDir, 'sp1-la/metadata.xml'), os.path.join(dataDir, 'sp1-la/public-key.pem'), os.path.join(dataDir, 'sp1-la/certificate.pem')) logout = lasso.Logout(lassoServer) # The processRequestMsg should fail but not abort. try: logout.processRequestMsg('passport=0&lasso=1') except lasso.Error as error: if error[0] != lasso.PROFILE_ERROR_INVALID_MSG: raise else: self.fail('Logout processRequestMsg should have failed.') def test04(self): """IDP logout; testing processResponseMsg with non Liberty query.""" lassoServer = lasso.Server( os.path.join(dataDir, 'idp1-la/metadata.xml'), os.path.join(dataDir, 'idp1-la/private-key-raw.pem'), None, os.path.join(dataDir, 'idp1-la/certificate.pem')) lassoServer.addProvider( lasso.PROVIDER_ROLE_SP, os.path.join(dataDir, 'sp1-la/metadata.xml'), os.path.join(dataDir, 'sp1-la/public-key.pem'), os.path.join(dataDir, 'sp1-la/certificate.pem')) logout = lasso.Logout(lassoServer) # The processResponseMsg should fail but not abort. try: logout.processResponseMsg('liberty=&alliance') except lasso.Error as error: if error[0] != lasso.PROFILE_ERROR_INVALID_MSG: raise 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.""" lassoServer = lasso.Server( os.path.join(dataDir, 'idp1-la/metadata.xml'), os.path.join(dataDir, 'idp1-la/private-key-raw.pem'), None, os.path.join(dataDir, 'idp1-la/certificate.pem')) lassoServer.addProvider( lasso.PROVIDER_ROLE_SP, os.path.join(dataDir, 'sp1-la/metadata.xml'), os.path.join(dataDir, 'sp1-la/public-key.pem'), os.path.join(dataDir, 'sp1-la/certificate.pem')) defederation = lasso.Defederation(lassoServer) # The processNotificationMsg should fail but not abort. try: defederation.processNotificationMsg('nonLibertyQuery=1') except lasso.Error as error: if error[0] != lasso.PROFILE_ERROR_INVALID_MSG: raise else: self.fail('Defederation processNotificationMsg should have failed.') class IdentityTestCase(unittest.TestCase): def test01(self): """Identity newFromDump & dump.""" return # test disabled since dump format changed identityDump = """_CD739B41C602EAEA93626EBD1751CB46_11EA77A4FED32C41824AC5DE87298E65""" identity = lasso.Identity.newFromDump(identityDump) newIdentityDump = identity.dump() self.assertEqual(identityDump, newIdentityDump) class AttributeAuthorityTestCase(unittest.TestCase): def test01(self): '''Attribute request and response test between sp5 and idp6''' s = lasso.Server( os.path.join(dataDir, 'sp5-saml2/metadata.xml'), os.path.join(dataDir, 'sp5-saml2/private-key.pem')) s.addProvider(lasso.PROVIDER_ROLE_ATTRIBUTE_AUTHORITY, os.path.join(dataDir, 'idp6-saml2/metadata.xml')) s2 = lasso.Server( os.path.join(dataDir, 'idp6-saml2/metadata.xml'), os.path.join(dataDir, 'idp6-saml2/private-key.pem')) s2.addProvider(lasso.PROVIDER_ROLE_SP, os.path.join(dataDir, 'sp5-saml2/metadata.xml')) aq = lasso.AssertionQuery(s) rpid = list(s.providers.keys())[0] aq.initRequest(rpid, lasso.HTTP_METHOD_SOAP, lasso.ASSERTION_QUERY_REQUEST_TYPE_ATTRIBUTE) assert aq.request assert aq.remoteProviderId == rpid nid = lasso.Saml2NameID.newWithPersistentFormat( lasso.buildUniqueId(32), s.providerId, s2.providerId) aq.nameIdentifier = nid aq.addAttributeRequest(lasso.SAML2_ATTRIBUTE_NAME_FORMAT_BASIC, 'testAttribute') aq.buildRequestMsg() assert aq.msgUrl assert aq.msgBody aq2 = lasso.AssertionQuery(s2) aq2.processRequestMsg(aq.msgBody) assert aq.request aq2.validateRequest() assert aq2.response assertion = lasso.Saml2Assertion() aq2.response.assertion = (assertion, ) for attribute in aq2.request.attribute: content = lasso.MiscTextNode.newWithString("xxx") content.textChild = True assertion.addAttributeWithNode(attribute.name, attribute.nameFormat, content) assertion.addAttributeWithNode(attribute.name, attribute.nameFormat, content) assertion.subject = aq.request.subject s2.saml2AssertionSetupSignature(assertion) aq2.buildResponseMsg() aq.processResponseMsg(aq2.msgBody) assert aq.response assert aq.response.assertion[0] assert aq.response.assertion[0].attributeStatement[0] assert aq.response.assertion[0].attributeStatement[0].attribute[0] assert aq.response.assertion[0].attributeStatement[0].attribute[0].attributeValue[0] 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') allTests = unittest.TestSuite((serverSuite, loginSuite, logoutSuite, defederationSuite, identitySuite, attributeSuite)) if __name__ == '__main__': sys.exit(not unittest.TextTestRunner(verbosity=2).run(allTests).wasSuccessful()) lasso-2.8.2/bindings/python/tests/PaxHeaders/Makefile.am0000644000000000000000000000013214117162531020237 xustar0030 mtime=1631380825.848637964 30 atime=1678814114.616790983 30 ctime=1678814321.685957158 lasso-2.8.2/bindings/python/tests/Makefile.am0000644000175000017500000000043414117162531023510 0ustar00bdauvergnebdauvergne00000000000000MAINTAINERCLEANFILES = Makefile.in TESTS = # TESTS_ENVIRONMENT=TOP_SRCDIR=$(top_srcdir) if PYTHON_ENABLED TESTS += profiles_tests.py binding_tests.py endif TEST_EXTENSIONS = .py PY_LOG_COMPILER = $(PYTHON) EXTRA_DIST = profiles_tests.py binding_tests.py tests.py XmlTestRunner.py lasso-2.8.2/bindings/python/tests/PaxHeaders/Makefile.in0000644000000000000000000000013214404125673020255 xustar0030 mtime=1678814139.464929385 30 atime=1678814150.056988525 30 ctime=1678814321.685957158 lasso-2.8.2/bindings/python/tests/Makefile.in0000644000175000017500000007154414404125673023540 0ustar00bdauvergnebdauvergne00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ @PYTHON_ENABLED_TRUE@am__append_1 = profiles_tests.py binding_tests.py subdir = bindings/python/tests ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ac_check_class.m4 \ $(top_srcdir)/m4/ac_check_classpath.m4 \ $(top_srcdir)/m4/ac_check_junit.m4 \ $(top_srcdir)/m4/ac_prog_jar.m4 \ $(top_srcdir)/m4/ac_prog_java.m4 \ $(top_srcdir)/m4/ac_prog_java_works.m4 \ $(top_srcdir)/m4/ac_prog_javac.m4 \ $(top_srcdir)/m4/ac_prog_javac_works.m4 \ $(top_srcdir)/m4/ac_prog_javah.m4 \ $(top_srcdir)/m4/ac_try_compile_java.m4 \ $(top_srcdir)/m4/as-compiler-flag.m4 \ $(top_srcdir)/m4/dps_java_check_class.m4 \ $(top_srcdir)/m4/dps_xtra_classpath.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h \ $(top_builddir)/lasso/lasso_config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.py.log=.log) PY_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver PY_LOG_COMPILE = $(PY_LOG_COMPILER) $(AM_PY_LOG_FLAGS) $(PY_LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/test-driver DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CHECK_CFLAGS = @CHECK_CFLAGS@ CHECK_LIBS = @CHECK_LIBS@ CLASSPATH_JUNIT = @CLASSPATH_JUNIT@ CLASSPATH_OPT = @CLASSPATH_OPT@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CSHARPCILINTERPRETER = @CSHARPCILINTERPRETER@ CSHARPCOMPILER = @CSHARPCOMPILER@ CSHARPCYGPATH_W = @CSHARPCYGPATH_W@ CSHARPDYNAMICLINKING = @CSHARPDYNAMICLINKING@ CSHARPLIBRARYPREFIX = @CSHARPLIBRARYPREFIX@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEBUGGING = @DEBUGGING@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLL_FILENAME = @DLL_FILENAME@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GACUTIL = @GACUTIL@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HTML_DIR = @HTML_DIR@ INKSCAPE = @INKSCAPE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVAC_FLAGS = @JAVAC_FLAGS@ JAVAH = @JAVAH@ JAVAH_FLAGS = @JAVAH_FLAGS@ JAVA_INCLUDE = @JAVA_INCLUDE@ JAVA_JUNIT = @JAVA_JUNIT@ JAVA_VERSION = @JAVA_VERSION@ JDK_INCLUDE = @JDK_INCLUDE@ JNI_EXTRA_LDFLAGS = @JNI_EXTRA_LDFLAGS@ JUNIT = @JUNIT@ LASSO_APP_DEFINES = @LASSO_APP_DEFINES@ LASSO_CFLAGS = @LASSO_CFLAGS@ LASSO_CORE_CFLAGS = @LASSO_CORE_CFLAGS@ LASSO_CORE_LIBS = @LASSO_CORE_LIBS@ LASSO_DEFINES = @LASSO_DEFINES@ LASSO_DOCDIR = @LASSO_DOCDIR@ LASSO_LIBS = @LASSO_LIBS@ LASSO_PUB_CFLAGS = @LASSO_PUB_CFLAGS@ LASSO_STATIC_BINARIES = @LASSO_STATIC_BINARIES@ LASSO_VERSION_INFO = @LASSO_VERSION_INFO@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PERLINSTALLSITEARCH = @PERLINSTALLSITEARCH@ PERLMAN3DIR = @PERLMAN3DIR@ PERL_CFLAGS = @PERL_CFLAGS@ PERL_VERSION = @PERL_VERSION@ PHP5 = @PHP5@ PHP5_CONFIG = @PHP5_CONFIG@ PHP5_CONFIG_DIR = @PHP5_CONFIG_DIR@ PHP5_EXTENSION_DIR = @PHP5_EXTENSION_DIR@ PHP5_INCLUDES = @PHP5_INCLUDES@ PHP5_INCLUDE_DIR = @PHP5_INCLUDE_DIR@ PHP5_LDFLAGS = @PHP5_LDFLAGS@ PHP5_LIBS = @PHP5_LIBS@ PHP5_PREFIX = @PHP5_PREFIX@ PHP5_UNPREFIXED_EXTENSION_DIR = @PHP5_UNPREFIXED_EXTENSION_DIR@ PHP5_VERSION = @PHP5_VERSION@ PHP7 = @PHP7@ PHP7_CONFIG = @PHP7_CONFIG@ PHP7_CONFIG_DIR = @PHP7_CONFIG_DIR@ PHP7_EXTENSION_DIR = @PHP7_EXTENSION_DIR@ PHP7_INCLUDES = @PHP7_INCLUDES@ PHP7_INCLUDE_DIR = @PHP7_INCLUDE_DIR@ PHP7_LDFLAGS = @PHP7_LDFLAGS@ PHP7_LIBS = @PHP7_LIBS@ PHP7_PREFIX = @PHP7_PREFIX@ PHP7_UNPREFIXED_EXTENSION_DIR = @PHP7_UNPREFIXED_EXTENSION_DIR@ PHP7_VERSION = @PHP7_VERSION@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PYTHON = @PYTHON@ PYTHON_VERSION = @PYTHON_VERSION@ PY_CFLAGS = @PY_CFLAGS@ PY_DYNLOAD = @PY_DYNLOAD@ PY_EXTRA_LIBS = @PY_EXTRA_LIBS@ PY_LIB_A = @PY_LIB_A@ PY_LIB_LOC = @PY_LIB_LOC@ PY_SITE_PACKAGES = @PY_SITE_PACKAGES@ RANLIB = @RANLIB@ RC = @RC@ REST2HTML = @REST2HTML@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_VERSION = @SWIG_VERSION@ TAR = @TAR@ TESTS_JUNIT = @TESTS_JUNIT@ UPCASED_DLL_FILENAME = @UPCASED_DLL_FILENAME@ VERSION = @VERSION@ VERSION_UNDERSCORED = @VERSION_UNDERSCORED@ WINDOWS_VERSION = @WINDOWS_VERSION@ XSLTPROC = @XSLTPROC@ Z_CFLAGS = @Z_CFLAGS@ Z_LIBS = @Z_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ uudecode = @uudecode@ MAINTAINERCLEANFILES = Makefile.in TESTS = $(am__append_1) TESTS_ENVIRONMENT = TOP_SRCDIR=$(top_srcdir) TEST_EXTENSIONS = .py PY_LOG_COMPILER = $(PYTHON) EXTRA_DIST = profiles_tests.py binding_tests.py tests.py XmlTestRunner.py all: all-am .SUFFIXES: .SUFFIXES: .log .py .py$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign bindings/python/tests/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign bindings/python/tests/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? .py.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(PY_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_PY_LOG_DRIVER_FLAGS) $(PY_LOG_DRIVER_FLAGS) -- $(PY_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.py$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(PY_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_PY_LOG_DRIVER_FLAGS) $(PY_LOG_DRIVER_FLAGS) -- $(PY_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: all all-am check check-TESTS check-am clean clean-generic \ clean-libtool cscopelist-am ctags-am distclean \ distclean-generic distclean-libtool distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am recheck tags-am \ uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lasso-2.8.2/bindings/python/tests/PaxHeaders/XmlTestRunner.py0000644000000000000000000000013214050545511021346 xustar0030 mtime=1621281609.051310339 30 atime=1678098071.761502947 30 ctime=1678814321.693957204 lasso-2.8.2/bindings/python/tests/XmlTestRunner.py0000644000175000017500000000425514050545511024624 0ustar00bdauvergnebdauvergne00000000000000# -*- coding: utf-8 -*- # # $Id: XmlTestRunner.py 3254 2007-06-05 21:23:57Z fpeters $ # # XmlTestRunner # # Copyright (C) 2004-2007 Entr'ouvert # # Authors: Frederic Peters # # 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 Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . import unittest import time import sys from six import print_ def xml(text): if not text: return "" return text.replace('&', '&').replace('<', '<').replace('>', '>') class XmlTestResult(unittest.TestResult): def addSuccess(self, test): print_(""" %s %s """ % (test.id(), xml(test.shortDescription()))) def addError(self, test, err): unittest.TestResult.addError(self, test, err) print_(""" %s %s """ % (test.id(), xml(test.shortDescription()))) # TODO: add err def addFailure(self, test, err): unittest.TestResult.addFailure(self, test, err) print_(""" %s %s """ % (test.id(), xml(test.shortDescription()))) # TODO: add err class XmlTestRunner: def _makeResult(self): return XmlTestResult() def run(self, test): print_("") result = self._makeResult() startTime = time.time() test(result) stopTime = time.time() timeTaken = float(stopTime - startTime) print_(" %s" % timeTaken) print_("") return result lasso-2.8.2/bindings/python/tests/PaxHeaders/binding_tests.py0000644000000000000000000000013214114500706021406 xustar0030 mtime=1630699974.062799746 30 atime=1678098071.757502916 30 ctime=1678814321.689957182 lasso-2.8.2/bindings/python/tests/binding_tests.py0000755000175000017500000003457614114500706024700 0ustar00bdauvergnebdauvergne00000000000000#! /usr/bin/env python # -*- coding: utf-8 -*- # # $Id: binding_tests.py 3283 2007-06-11 09:10:18Z dlaniel $ # # Python unit tests for Lasso library # # Copyright (C) 2004-2007 Entr'ouvert # http://lasso.entrouvert.org # # Authors: See AUTHORS file in top-level directory. # # 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 Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . import unittest import sys import os import logging logging.basicConfig() if not '..' in sys.path: sys.path.insert(0, '..') if not '../.libs' in sys.path: sys.path.insert(0, '../.libs') import lasso try: dataDir except NameError: srcdir = os.environ.get('TOP_SRCDIR', '.') dataDir = '%s/tests/data' % srcdir class BindingTestCase(unittest.TestCase): def test01(self): """Create and delete nodes.""" authnRequest = lasso.LibAuthnRequest() del authnRequest def test02(self): """Get & set simple attributes of nodes.""" authnRequest = lasso.LibAuthnRequest() # Test a string attribute. self.assertEqual(authnRequest.consent, None) authnRequest.consent = lasso.LIB_CONSENT_OBTAINED self.assertEqual(authnRequest.consent, lasso.LIB_CONSENT_OBTAINED) authnRequest.consent = None self.assertEqual(authnRequest.consent, None) # Test a renamed string attribute. self.assertEqual(authnRequest.relayState, None) authnRequest.relayState = 'Hello World!' self.assertEqual(authnRequest.relayState, 'Hello World!') authnRequest.relayState = None self.assertEqual(authnRequest.relayState, None) # Test an integer attribute. self.assertEqual(authnRequest.majorVersion, 0) authnRequest.majorVersion = 314 self.assertEqual(authnRequest.majorVersion, 314) del authnRequest def test03(self): """Get & set attributes of nodes of type string list.""" authnRequest = lasso.LibAuthnRequest() self.assertEqual(authnRequest.respondWith, ()) respondWith = [] self.assertEqual(len(respondWith), 0) respondWith.append('first string') self.assertEqual(len(respondWith), 1) self.assertEqual(respondWith[0], 'first string') respondWith.append('second string') self.assertEqual(len(respondWith), 2) self.assertEqual(respondWith[0], 'first string') self.assertEqual(respondWith[1], 'second string') respondWith.append('third string') self.assertEqual(len(respondWith), 3) self.assertEqual(respondWith[0], 'first string') self.assertEqual(respondWith[1], 'second string') self.assertEqual(respondWith[2], 'third string') authnRequest.respondWith = tuple(respondWith) self.assertEqual(authnRequest.respondWith[0], 'first string') self.assertEqual(authnRequest.respondWith[1], 'second string') self.assertEqual(authnRequest.respondWith[2], 'third string') self.assertEqual(respondWith[0], 'first string') self.assertEqual(respondWith[1], 'second string') self.assertEqual(respondWith[2], 'third string') del respondWith self.assertEqual(authnRequest.respondWith[0], 'first string') self.assertEqual(authnRequest.respondWith[1], 'second string') self.assertEqual(authnRequest.respondWith[2], 'third string') respondWith = authnRequest.respondWith self.assertEqual(respondWith[0], 'first string') self.assertEqual(respondWith[1], 'second string') self.assertEqual(respondWith[2], 'third string') del respondWith self.assertEqual(authnRequest.respondWith[0], 'first string') self.assertEqual(authnRequest.respondWith[1], 'second string') self.assertEqual(authnRequest.respondWith[2], 'third string') authnRequest.respondWith = None self.assertEqual(authnRequest.respondWith, ()) del authnRequest def test04(self): """Get & set attributes of nodes of type node list.""" response = lasso.SamlpResponse() self.assertEqual(response.assertion, ()) assertions = [] self.assertEqual(len(assertions), 0) assertion1 = lasso.SamlAssertion() assertion1.assertionId = 'assertion 1' assertions.append(assertion1) self.assertEqual(len(assertions), 1) self.assertEqual(assertions[0].assertionId, 'assertion 1') self.assertEqual(assertions[0].assertionId, 'assertion 1') assertion2 = lasso.SamlAssertion() assertion2.assertionId = 'assertion 2' assertions.append(assertion2) self.assertEqual(len(assertions), 2) self.assertEqual(assertions[0].assertionId, 'assertion 1') self.assertEqual(assertions[1].assertionId, 'assertion 2') assertion3 = lasso.SamlAssertion() assertion3.assertionId = 'assertion 3' assertions.append(assertion3) self.assertEqual(len(assertions), 3) self.assertEqual(assertions[0].assertionId, 'assertion 1') self.assertEqual(assertions[1].assertionId, 'assertion 2') self.assertEqual(assertions[2].assertionId, 'assertion 3') response.assertion = tuple(assertions) self.assertEqual(response.assertion[0].assertionId, 'assertion 1') self.assertEqual(response.assertion[1].assertionId, 'assertion 2') self.assertEqual(response.assertion[2].assertionId, 'assertion 3') self.assertEqual(assertions[0].assertionId, 'assertion 1') self.assertEqual(assertions[1].assertionId, 'assertion 2') self.assertEqual(assertions[2].assertionId, 'assertion 3') del assertions self.assertEqual(response.assertion[0].assertionId, 'assertion 1') self.assertEqual(response.assertion[1].assertionId, 'assertion 2') self.assertEqual(response.assertion[2].assertionId, 'assertion 3') assertions = response.assertion self.assertEqual(assertions[0].assertionId, 'assertion 1') self.assertEqual(assertions[1].assertionId, 'assertion 2') self.assertEqual(assertions[2].assertionId, 'assertion 3') del assertions self.assertEqual(response.assertion[0].assertionId, 'assertion 1') self.assertEqual(response.assertion[1].assertionId, 'assertion 2') self.assertEqual(response.assertion[2].assertionId, 'assertion 3') response.assertion = None self.assertEqual(response.assertion, ()) del response def test05(self): """Get & set attributes of nodes of type XML list.""" authnRequest = lasso.LibAuthnRequest() self.assertEqual(authnRequest.extension, ()) actionString1 = """\ do 1 """ actionString2 = """\ do 2 """ actionString3 = """\ do 3 """ extension = [] self.assertEqual(len(extension), 0) extension.append(actionString1) self.assertEqual(len(extension), 1) self.assertEqual(extension[0], actionString1) self.assertEqual(extension[0], actionString1) extension.append(actionString2) self.assertEqual(len(extension), 2) self.assertEqual(extension[0], actionString1) self.assertEqual(extension[1], actionString2) extension.append(actionString3) self.assertEqual(len(extension), 3) self.assertEqual(extension[0], actionString1) self.assertEqual(extension[1], actionString2) self.assertEqual(extension[2], actionString3) authnRequest.extension = tuple(extension) self.assertEqual(authnRequest.extension[0], actionString1) self.assertEqual(authnRequest.extension[1], actionString2) self.assertEqual(authnRequest.extension[2], actionString3) self.assertEqual(extension[0], actionString1) self.assertEqual(extension[1], actionString2) self.assertEqual(extension[2], actionString3) del extension self.assertEqual(authnRequest.extension[0], actionString1) self.assertEqual(authnRequest.extension[1], actionString2) self.assertEqual(authnRequest.extension[2], actionString3) extension = authnRequest.extension self.assertEqual(extension[0], actionString1) self.assertEqual(extension[1], actionString2) self.assertEqual(extension[2], actionString3) del extension self.assertEqual(authnRequest.extension[0], actionString1) self.assertEqual(authnRequest.extension[1], actionString2) self.assertEqual(authnRequest.extension[2], actionString3) authnRequest.extension = None self.assertEqual(authnRequest.extension, ()) del authnRequest def test06(self): """Get & set attributes of nodes of type node.""" login = lasso.Login(lasso.Server( os.path.join(dataDir, 'sp1-la/metadata.xml'), os.path.join(dataDir, 'sp1-la/private-key-raw.pem'), None, os.path.join(dataDir, 'sp1-la/certificate.pem'))) self.assertEqual(login.request, None) login.request = lasso.LibAuthnRequest() login.request.consent = lasso.LIB_CONSENT_OBTAINED self.assertEqual(login.request.consent, lasso.LIB_CONSENT_OBTAINED) login.request = None self.assertEqual(login.request, None) del login def test07(self): '''Check reference counting''' s = lasso.Samlp2AuthnRequest() cptr = s._cptr a = sys.getrefcount(s._cptr) del(s) b = sys.getrefcount(cptr) self.assertEqual(b, a-1) def test08(self): '''Test an integer attribute''' authnRequest = lasso.LibAuthnRequest() authnRequest.majorVersion = 314 self.assertEqual(authnRequest.majorVersion, 314) def test09(self): '''Test dictionary attributes''' identity = lasso.Identity.newFromDump(open( os.path.join(dataDir, 'sample-identity-dump-1.xml')).read()) self.assertEqual(len(identity.federations.keys()), 2) self.assertFalse(not 'http://idp1.lasso.lan' in identity.federations.keys()) self.assertEqual( identity.federations['http://idp1.lasso.lan'].localNameIdentifier.content, 'first name id') def test10(self): '''Test Server.setEncryptionPrivateKeyWithPassword''' pkey_path = os.path.join( dataDir, 'idp5-saml2', 'private-key.pem') server = lasso.Server(os.path.join(dataDir, 'idp5-saml2', 'metadata.xml'), pkey_path) # from file server.setEncryptionPrivateKeyWithPassword(pkey_path) # from buffer server.setEncryptionPrivateKeyWithPassword(open(pkey_path).read()) # reset server.setEncryptionPrivateKeyWithPassword() def test11(self): '''Test saving and reloading a Server using an encrypted private key''' pkey = os.path.join(dataDir, 'sp7-saml2', 'private-key.pem') mdata = os.path.join(dataDir, 'sp7-saml2', 'metadata.xml') password = open(os.path.join(dataDir, 'sp7-saml2', 'password')).read().strip() server = lasso.Server(mdata, pkey, password) assert isinstance(server, lasso.Server) server_dump = server.dump() assert server_dump server = lasso.Server.newFromDump(server_dump) assert isinstance(server, lasso.Server) def test12(self): node = lasso.Samlp2Extensions() assert not node.any content = ''' %s ''' node = lasso.Node.newFromXmlNode(content) assert 'next_url' in node.any[1] 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() assert 'michou="zozo"' in node.dump() node = lasso.Node.newFromDump(node.dump()) assert node.any == ('coin',) # on reparse non namespaces attributes are ignore, they should not exist assert node.attributes == {} def test13(self): node = lasso.Samlp2LogoutRequest() node.sessionIndexes = ('1', '2') assert node.sessionIndexes == ('1', '2'), node.sessionIndexes node.sessionIndexes = () assert node.sessionIndexes == (), node.sessionIndexes def test14(self): # verify Error implementation with self.assertRaises(lasso.Error) as cm: lasso.Server('', '', '') assert isinstance(str(cm.exception), str) with self.assertRaises(lasso.Error) as cm: lasso.Error.raise_on_rc(lasso._lasso.XML_ERROR_SCHEMA_INVALID_FRAGMENT) self.assertEqual(str(cm.exception), '') def test_set_list_of_strings(self): node = lasso.Samlp2RequestedAuthnContext() with self.assertRaises(TypeError, msg='value should be a tuple of strings'): node.authnContextClassRef = [None] def test_set_list_of_pygobject(self): node = lasso.Saml2Attribute() class A: _cptr = None value = [A()] with self.assertRaises(TypeError, msg='value should be a tuple of PyGobject'): node.attributeValue = value bindingSuite = unittest.makeSuite(BindingTestCase, 'test') allTests = unittest.TestSuite((bindingSuite, )) if __name__ == '__main__': sys.exit(not unittest.TextTestRunner(verbosity = 2).run(allTests).wasSuccessful()) lasso-2.8.2/bindings/python/tests/PaxHeaders/tests.py0000644000000000000000000000013214117162531017717 xustar0030 mtime=1631380825.848637964 30 atime=1678098071.761502947 30 ctime=1678814321.689957182 lasso-2.8.2/bindings/python/tests/tests.py0000755000175000017500000000536614117162531023204 0ustar00bdauvergnebdauvergne00000000000000#! /usr/bin/env python # -*- coding: utf-8 -*- # # $Id: tests.py 3425 2007-10-10 09:31:03Z dlaniel $ # # Python unit tests for Lasso library # # Copyright (C) 2004-2007 Entr'ouvert # http://lasso.entrouvert.org # # Authors: See AUTHORS file in top-level directory. # # 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 Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . import __builtin__ import imp from optparse import OptionParser import os import sys import time import unittest from six import print_ from XmlTestRunner import XmlTestRunner if not '..' in sys.path: sys.path.insert(0, '..') if not '../.libs' in sys.path: sys.path.insert(0, '../.libs') testSuites = [ 'binding_tests', 'profiles_tests', ] import lasso # Parse command line options. parser = OptionParser() parser.add_option( '-x', '--xml', dest = 'xmlMode', help = 'enable XML output', action = 'store_true', default = False) parser.add_option( '-s', '--source-dir', dest = 'srcDir', help = 'path of source directory', metavar = 'DIR', default = os.getcwd()) (options, args) = parser.parse_args() __builtin__.__dict__['dataDir'] = os.path.join(options.srcDir, '../../../tests/data') if options.xmlMode: print_('') print_('') print_(' Python Bindings') print_(' %s' % time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())) success = True for testSuite in testSuites: fp, pathname, description = imp.find_module(testSuite) try: module = imp.load_module(testSuite, fp, pathname, description) finally: if fp: fp.close() if not module: print_('Unable to load test suite:', testSuite, file=sys.stderr) continue if module.__doc__: doc = module.__doc__ else: doc = testSuite if options.xmlMode: runner = XmlTestRunner() else: runner = unittest.TextTestRunner(verbosity=2) print print_('-' * len(doc)) print_(doc) print_('-' * len(doc)) result = runner.run(module.allTests) success = success and result.wasSuccessful() if options.xmlMode: print_('') sys.exit(not success) lasso-2.8.2/bindings/python/PaxHeaders/examples0000644000000000000000000000013214050545511016601 xustar0030 mtime=1621281609.051310339 30 atime=1678814326.421984131 30 ctime=1678814321.649956953 lasso-2.8.2/bindings/python/examples/0000755000175000017500000000000014050545511022126 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/bindings/python/examples/PaxHeaders/get_attributes_from_assertion.py0000644000000000000000000000013214050545511025367 xustar0030 mtime=1621281609.051310339 30 atime=1678098071.713502571 30 ctime=1678814321.649956953 lasso-2.8.2/bindings/python/examples/get_attributes_from_assertion.py0000644000175000017500000000054714050545511030645 0ustar00bdauvergnebdauvergne00000000000000# 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) for value in attribute.attributeValue: print_(' value : ' + value.any[0].content) lasso-2.8.2/bindings/PaxHeaders/utility-scripts0000644000000000000000000000013214404126161016631 xustar0030 mtime=1678814321.585956589 30 atime=1678814326.421984131 30 ctime=1678814321.585956589 lasso-2.8.2/bindings/utility-scripts/0000755000175000017500000000000014404126161022156 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/bindings/utility-scripts/PaxHeaders/error-analyzer.pl0000644000000000000000000000013213766621500022226 xustar0030 mtime=1608196928.742895137 30 atime=1678098071.641502005 30 ctime=1678814321.585956589 lasso-2.8.2/bindings/utility-scripts/error-analyzer.pl0000644000175000017500000000732413766621500025504 0ustar00bdauvergnebdauvergne00000000000000#! /usr/bin/perl -w eval 'exec /usr/bin/perl -S $0 ${1+"$@"}' if 0; #$running_under_some_shell use strict; use File::Find (); use Data::Dumper; # Set the variable $File::Find::dont_use_nlink if you're using AFS, # since AFS cheats. # for the convenience of &wanted calls, including -eval statements: use vars qw/*name *dir *prune/; *name = *File::Find::name; *dir = *File::Find::dir; *prune = *File::Find::prune; sub wanted; sub unique { my @in = @_; my @ret = (); for my $x (@in) { push @ret, $x if (! grep /$x/, @ret); } return @ret; } my $functions = {}; my $p = $ARGV[0]; # Traverse desired filesystems -d $p && File::Find::find({wanted => \&wanted}, $p); foreach my $function (keys %$functions) { potential_errors($function); } foreach my $name (sort (keys %$functions)) { my $record = $functions->{$name}; next if $record->{'return-type'} !~ /\bg?int\b/ || $record->{'return-type'} =~ /\bstatic\b/; my @derr = @{$record->{'errors'}}; my @inherr = @{$record->{'inherited-errors'}[0]}; my $path = $record->{'file'}; print "$name "; my %temp = (); @temp{@inherr} = (); for (@derr) { delete $temp{$_}; print "$_ "; } if (keys %temp) { foreach (keys %temp) { print "$_ "; } } print "\n"; } exit; sub potential_errors { my $function = shift; return ([],[[],[]]) if ! exists $functions->{$function}; my $record = $functions->{$function}; return ([],[[],[]]) if $record->{'return-type'} !~ /\bg?int\b/ || $record->{'recursing'}; if (! exists $record->{'inherited-errors'}) { my @inheritederrors; my @froms; $record->{'recursing'} = 1; foreach my $call (@{$record->{'calls'}}) { my ($err,$inh) = potential_errors($call); my ($suberr,$subfrom) = @$inh; if (@$err || @$suberr) { push @froms, $call; push @inheritederrors, (@$err, @$suberr); } } $record->{'inherited-errors'} = [[ unique(@inheritederrors) ],[@froms]]; delete $record->{'recursing'}; } return ($record->{'errors'},$record->{'inherited-errors'}); } sub parse_file { my $file = shift; my $path = shift; my $lastline; my $curfunction; my $curtype; my @curerrors; my @curcalls; my $infunction = 0; open FD, "<$file"; while () { MATCHING: { if ($infunction) { if (/^\}/) { #print "finished funcctions $curfunction\n"; $functions->{$curfunction} = { name => $curfunction, 'return-type' => $curtype, 'errors' => [ unique(@curerrors) ], 'calls' => [ @curcalls], 'file' => $path}; $infunction = 0; last MATCHING; } while (/(?:\breturn\b|=).*?([A-Za-z_]+)\(/g) { push @curcalls, $1; } pos = 0; while (/(LASSO_[A-Z_]*_ERROR_[A-Z_]*|LASSO_ERROR_[A-Z_]*)/g) { push @curerrors, $1; } last MATCHING; } if (/^([a-z_]+)\([^;]*$/) { $curfunction = $1; chop $lastline; $curtype = $lastline; @curerrors = (); @curcalls = (); last MATCHING; } if ($curfunction && /^\{/) { $infunction = 1; last MATCHING; } } $lastline = $_; } close FD; } sub wanted { my ($dev,$ino,$mode,$nlink,$uid,$gid); parse_file($_,$File::Find::name) if ($_ =~ /^.*\.c$/s && $File::Find::name !~ /^.*\.svn.*/); } lasso-2.8.2/bindings/PaxHeaders/java0000644000000000000000000000013214404126162014363 xustar0030 mtime=1678814322.721963057 30 atime=1678814326.421984131 30 ctime=1678814322.721963057 lasso-2.8.2/bindings/java/0000755000175000017500000000000014404126162017710 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/bindings/java/PaxHeaders/Makefile.am0000644000000000000000000000013214117162531016475 xustar0030 mtime=1631380825.844637909 30 atime=1678814114.328789381 30 ctime=1678814322.717963035 lasso-2.8.2/bindings/java/Makefile.am0000644000175000017500000000702314117162531021747 0ustar00bdauvergnebdauvergne00000000000000.NOTPARALLEL: MAINTAINERCLEANFILES = Makefile.in MOSTLYCLEANFILES = com_entrouvert_lasso_LassoJNI.c com_entrouvert_lasso_LassoJNI.h \ com/entrouvert/lasso/* lasso.jar *.class $(TESTS) \ __init__.pyc lang.pyc if JAVA_ENABLED AM_CPPFLAGS = \ -I$(top_builddir) \ -I$(top_srcdir) \ $(SASL_CFLAGS) CLASSPATH_ENV= CLASSPATH=.:$(CLASSPATH_JUNIT) CLASSPATH=.:tests if HAVE_AM_SILENT_RULES AM_V_JAVAC = $(am__v_JAVAC_$(V)) am__v_JAVAC_ = $(am__v_JAVAC_$(AM_DEFAULT_VERBOSITY)) am__v_JAVAC_0 = @echo " JAVAC " $@; AM_V_JAR = $(am__v_JAR_$(V)) am__v_JAR_ = $(am__v_JAR_$(AM_DEFAULT_VERBOSITY)) am__v_JAR_0 = @echo " JAR " $@; endif java_extension_LTLIBRARIES = libjnilasso.la java_extensiondir = ${libdir}/java 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 lasso_jar_class_files = $(java_lasso_source_files:.java=.class) %.class: %.java $(AM_V_JAVAC) $(JAVAC) $(CLASSPATH_OPT) $(CLASSPATH) $(JAVAC_FLAGS) -d . $< all_jar_class_files = $(shell find com/entrouvert/lasso -name '*.class' | sed 's%\$$%\\$$%g') lasso.jar: $(java_lasso_source_files:.java=.class) $(AM_V_JAR) $(JAR) -cf $@ $(all_jar_class_files) # Doc apidir = $(docbasedir)/lasso/java-api doc: -mkdir .doc -javadoc -link http://java.sun.com/j2se/1.4.2/docs/api -public -d .doc -sourcepath . -subpackages com.entrouvert.lasso mv .doc doc com_entrouvert_lasso_LassoJNI.h: com/entrouvert/lasso/LassoJNI.class $(java_lasso_source_files:.java=.class) $(AM_V_GEN) $(JAVAH) $(JAVAH_FLAGS) -classpath . `echo $< | sed 'su/u.ug;su.classuu'` libjnilasso_la_CFLAGS = -fno-strict-aliasing $(LASSO_CORE_CFLAGS) -I$(top_srcdir) -I$(top_builddir) $(AM_CFLAGS) @JAVA_INCLUDE@ libjnilasso_la_CFLAGS += -Wno-unused-parameter libjnilasso_la_LDFLAGS = -export-dynamic -prefer-pic -module -avoid-version $(JNI_EXTRA_LDFLAGS) libjnilasso_la_LIBADD = $(top_builddir)/lasso/liblasso.la $(LASSO_LIBS) nodist_libjnilasso_la_SOURCES = com_entrouvert_lasso_LassoJNI.c BUILT_SOURCES = com_entrouvert_lasso_LassoJNI.c com_entrouvert_lasso_LassoJNI.h BINDING_OPTION=#--enable-exception-docs $(java_lasso_source_files) com_entrouvert_lasso_LassoJNI.c: wrapper_top.c wrapper_bottom.c lang.py ../bindings.py $(AM_V_GEN) $(PYTHON) $(top_srcdir)/bindings/bindings.py $(BINDING_OPTION) -l java --src-dir=$(top_srcdir)/lasso/ $(EXTRA_ARGS) && cp $(srcdir)/GObject.java com/entrouvert/lasso doc-publish: doc tar czf doc.tgz -C doc . scp doc.tgz bdauvergne@perso.entrouvert.org: ssh bdauvergne@perso.entrouvert.org tar czf -C public_html/java-binding-doc doc.tgz rm doc.tgz EXTRA_DIST = \ GObject.java \ LassoException_top.java \ tests/BindingTests.java \ tests/LoginTest.java \ lang.py \ __init__.py \ wrapper_bottom.c \ wrapper_top.c # Some of the following classes are built only if junit is available if JUNIT_ENABLED test_source_files= tests/BindingTests.java tests/LoginTest.java $(test_source_files:.java=.class): CLASSPATH=.:$(CLASSPATH_JUNIT) TESTS = AllJunitTests AllJunitTests: JAVAFLAGS +="-Dsrcdir=$(srcdir)" AllJunitTests: $(test_source_files:.java=.class) echo "#! /bin/sh" > $@ echo "OBJDIR=`$(top_builddir)/libtool --config | grep ^objdir | sed 's/.*=//'`" >> $@ echo 'LD_LIBRARY_PATH=$$OBJDIR DYLD_LIBRARY_PATH=$$OBJDIR @JUNIT@ -Djava.library.path=$$OBJDIR BindingTests' >> $@ echo 'LD_LIBRARY_PATH=$$OBJDIR DYLD_LIBRARY_PATH=$$OBJDIR @JUNIT@ -Djava.library.path=$$OBJDIR LoginTest' >> $@ chmod +x $@ endif endif clean-local: -rm -rf com lasso-2.8.2/bindings/java/PaxHeaders/Makefile.in0000644000000000000000000000013214404125673016513 xustar0030 mtime=1678814139.236928112 30 atime=1678814150.028988369 30 ctime=1678814322.717963035 lasso-2.8.2/bindings/java/Makefile.in0000644000175000017500000013047314404125673021773 0ustar00bdauvergnebdauvergne00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = bindings/java ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ac_check_class.m4 \ $(top_srcdir)/m4/ac_check_classpath.m4 \ $(top_srcdir)/m4/ac_check_junit.m4 \ $(top_srcdir)/m4/ac_prog_jar.m4 \ $(top_srcdir)/m4/ac_prog_java.m4 \ $(top_srcdir)/m4/ac_prog_java_works.m4 \ $(top_srcdir)/m4/ac_prog_javac.m4 \ $(top_srcdir)/m4/ac_prog_javac_works.m4 \ $(top_srcdir)/m4/ac_prog_javah.m4 \ $(top_srcdir)/m4/ac_try_compile_java.m4 \ $(top_srcdir)/m4/as-compiler-flag.m4 \ $(top_srcdir)/m4/dps_java_check_class.m4 \ $(top_srcdir)/m4/dps_xtra_classpath.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h \ $(top_builddir)/lasso/lasso_config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(java_extensiondir)" \ "$(DESTDIR)$(lasso_jardir)" LTLIBRARIES = $(java_extension_LTLIBRARIES) am__DEPENDENCIES_1 = @JAVA_ENABLED_TRUE@libjnilasso_la_DEPENDENCIES = \ @JAVA_ENABLED_TRUE@ $(top_builddir)/lasso/liblasso.la \ @JAVA_ENABLED_TRUE@ $(am__DEPENDENCIES_1) @JAVA_ENABLED_TRUE@nodist_libjnilasso_la_OBJECTS = libjnilasso_la-com_entrouvert_lasso_LassoJNI.lo libjnilasso_la_OBJECTS = $(nodist_libjnilasso_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = libjnilasso_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(libjnilasso_la_CFLAGS) $(CFLAGS) $(libjnilasso_la_LDFLAGS) \ $(LDFLAGS) -o $@ @JAVA_ENABLED_TRUE@am_libjnilasso_la_rpath = -rpath \ @JAVA_ENABLED_TRUE@ $(java_extensiondir) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -I$(top_builddir)/lasso depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = \ ./$(DEPDIR)/libjnilasso_la-com_entrouvert_lasso_LassoJNI.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(nodist_libjnilasso_la_SOURCES) DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(lasso_jar_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/test-driver TODO DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CHECK_CFLAGS = @CHECK_CFLAGS@ CHECK_LIBS = @CHECK_LIBS@ CLASSPATH_JUNIT = @CLASSPATH_JUNIT@ CLASSPATH_OPT = @CLASSPATH_OPT@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CSHARPCILINTERPRETER = @CSHARPCILINTERPRETER@ CSHARPCOMPILER = @CSHARPCOMPILER@ CSHARPCYGPATH_W = @CSHARPCYGPATH_W@ CSHARPDYNAMICLINKING = @CSHARPDYNAMICLINKING@ CSHARPLIBRARYPREFIX = @CSHARPLIBRARYPREFIX@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEBUGGING = @DEBUGGING@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLL_FILENAME = @DLL_FILENAME@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GACUTIL = @GACUTIL@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HTML_DIR = @HTML_DIR@ INKSCAPE = @INKSCAPE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVAC_FLAGS = @JAVAC_FLAGS@ JAVAH = @JAVAH@ JAVAH_FLAGS = @JAVAH_FLAGS@ JAVA_INCLUDE = @JAVA_INCLUDE@ JAVA_JUNIT = @JAVA_JUNIT@ JAVA_VERSION = @JAVA_VERSION@ JDK_INCLUDE = @JDK_INCLUDE@ JNI_EXTRA_LDFLAGS = @JNI_EXTRA_LDFLAGS@ JUNIT = @JUNIT@ LASSO_APP_DEFINES = @LASSO_APP_DEFINES@ LASSO_CFLAGS = @LASSO_CFLAGS@ LASSO_CORE_CFLAGS = @LASSO_CORE_CFLAGS@ LASSO_CORE_LIBS = @LASSO_CORE_LIBS@ LASSO_DEFINES = @LASSO_DEFINES@ LASSO_DOCDIR = @LASSO_DOCDIR@ LASSO_LIBS = @LASSO_LIBS@ LASSO_PUB_CFLAGS = @LASSO_PUB_CFLAGS@ LASSO_STATIC_BINARIES = @LASSO_STATIC_BINARIES@ LASSO_VERSION_INFO = @LASSO_VERSION_INFO@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PERLINSTALLSITEARCH = @PERLINSTALLSITEARCH@ PERLMAN3DIR = @PERLMAN3DIR@ PERL_CFLAGS = @PERL_CFLAGS@ PERL_VERSION = @PERL_VERSION@ PHP5 = @PHP5@ PHP5_CONFIG = @PHP5_CONFIG@ PHP5_CONFIG_DIR = @PHP5_CONFIG_DIR@ PHP5_EXTENSION_DIR = @PHP5_EXTENSION_DIR@ PHP5_INCLUDES = @PHP5_INCLUDES@ PHP5_INCLUDE_DIR = @PHP5_INCLUDE_DIR@ PHP5_LDFLAGS = @PHP5_LDFLAGS@ PHP5_LIBS = @PHP5_LIBS@ PHP5_PREFIX = @PHP5_PREFIX@ PHP5_UNPREFIXED_EXTENSION_DIR = @PHP5_UNPREFIXED_EXTENSION_DIR@ PHP5_VERSION = @PHP5_VERSION@ PHP7 = @PHP7@ PHP7_CONFIG = @PHP7_CONFIG@ PHP7_CONFIG_DIR = @PHP7_CONFIG_DIR@ PHP7_EXTENSION_DIR = @PHP7_EXTENSION_DIR@ PHP7_INCLUDES = @PHP7_INCLUDES@ PHP7_INCLUDE_DIR = @PHP7_INCLUDE_DIR@ PHP7_LDFLAGS = @PHP7_LDFLAGS@ PHP7_LIBS = @PHP7_LIBS@ PHP7_PREFIX = @PHP7_PREFIX@ PHP7_UNPREFIXED_EXTENSION_DIR = @PHP7_UNPREFIXED_EXTENSION_DIR@ PHP7_VERSION = @PHP7_VERSION@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PYTHON = @PYTHON@ PYTHON_VERSION = @PYTHON_VERSION@ PY_CFLAGS = @PY_CFLAGS@ PY_DYNLOAD = @PY_DYNLOAD@ PY_EXTRA_LIBS = @PY_EXTRA_LIBS@ PY_LIB_A = @PY_LIB_A@ PY_LIB_LOC = @PY_LIB_LOC@ PY_SITE_PACKAGES = @PY_SITE_PACKAGES@ RANLIB = @RANLIB@ RC = @RC@ REST2HTML = @REST2HTML@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_VERSION = @SWIG_VERSION@ TAR = @TAR@ TESTS_JUNIT = @TESTS_JUNIT@ UPCASED_DLL_FILENAME = @UPCASED_DLL_FILENAME@ VERSION = @VERSION@ VERSION_UNDERSCORED = @VERSION_UNDERSCORED@ WINDOWS_VERSION = @WINDOWS_VERSION@ XSLTPROC = @XSLTPROC@ Z_CFLAGS = @Z_CFLAGS@ Z_LIBS = @Z_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ uudecode = @uudecode@ MAINTAINERCLEANFILES = Makefile.in MOSTLYCLEANFILES = com_entrouvert_lasso_LassoJNI.c com_entrouvert_lasso_LassoJNI.h \ com/entrouvert/lasso/* lasso.jar *.class $(TESTS) \ __init__.pyc lang.pyc @JAVA_ENABLED_TRUE@AM_CPPFLAGS = \ @JAVA_ENABLED_TRUE@ -I$(top_builddir) \ @JAVA_ENABLED_TRUE@ -I$(top_srcdir) \ @JAVA_ENABLED_TRUE@ $(SASL_CFLAGS) @JAVA_ENABLED_TRUE@CLASSPATH_ENV = CLASSPATH=.:$(CLASSPATH_JUNIT) @JAVA_ENABLED_TRUE@CLASSPATH = .:tests @HAVE_AM_SILENT_RULES_TRUE@@JAVA_ENABLED_TRUE@AM_V_JAVAC = $(am__v_JAVAC_$(V)) @HAVE_AM_SILENT_RULES_TRUE@@JAVA_ENABLED_TRUE@am__v_JAVAC_ = $(am__v_JAVAC_$(AM_DEFAULT_VERBOSITY)) @HAVE_AM_SILENT_RULES_TRUE@@JAVA_ENABLED_TRUE@am__v_JAVAC_0 = @echo " JAVAC " $@; @HAVE_AM_SILENT_RULES_TRUE@@JAVA_ENABLED_TRUE@AM_V_JAR = $(am__v_JAR_$(V)) @HAVE_AM_SILENT_RULES_TRUE@@JAVA_ENABLED_TRUE@am__v_JAR_ = $(am__v_JAR_$(AM_DEFAULT_VERBOSITY)) @HAVE_AM_SILENT_RULES_TRUE@@JAVA_ENABLED_TRUE@am__v_JAR_0 = @echo " JAR " $@; @JAVA_ENABLED_TRUE@java_extension_LTLIBRARIES = libjnilasso.la @JAVA_ENABLED_TRUE@java_extensiondir = ${libdir}/java @JAVA_ENABLED_TRUE@java_lasso_source_files := $(shell $(PYTHON) $(top_srcdir)/bindings/bindings.py -l java-list --src-dir=$(top_srcdir)/lasso/ $(EXTRA_ARGS) ) @JAVA_ENABLED_TRUE@lasso_jardir = $(prefix)/share/java @JAVA_ENABLED_TRUE@lasso_jar_DATA = lasso.jar @JAVA_ENABLED_TRUE@lasso_jar_class_files = $(java_lasso_source_files:.java=.class) @JAVA_ENABLED_TRUE@all_jar_class_files = $(shell find com/entrouvert/lasso -name '*.class' | sed 's%\$$%\\$$%g') # Doc @JAVA_ENABLED_TRUE@apidir = $(docbasedir)/lasso/java-api @JAVA_ENABLED_TRUE@libjnilasso_la_CFLAGS = -fno-strict-aliasing \ @JAVA_ENABLED_TRUE@ $(LASSO_CORE_CFLAGS) -I$(top_srcdir) \ @JAVA_ENABLED_TRUE@ -I$(top_builddir) $(AM_CFLAGS) \ @JAVA_ENABLED_TRUE@ @JAVA_INCLUDE@ -Wno-unused-parameter @JAVA_ENABLED_TRUE@libjnilasso_la_LDFLAGS = -export-dynamic -prefer-pic -module -avoid-version $(JNI_EXTRA_LDFLAGS) @JAVA_ENABLED_TRUE@libjnilasso_la_LIBADD = $(top_builddir)/lasso/liblasso.la $(LASSO_LIBS) @JAVA_ENABLED_TRUE@nodist_libjnilasso_la_SOURCES = com_entrouvert_lasso_LassoJNI.c @JAVA_ENABLED_TRUE@BUILT_SOURCES = com_entrouvert_lasso_LassoJNI.c com_entrouvert_lasso_LassoJNI.h @JAVA_ENABLED_TRUE@BINDING_OPTION = #--enable-exception-docs @JAVA_ENABLED_TRUE@EXTRA_DIST = \ @JAVA_ENABLED_TRUE@ GObject.java \ @JAVA_ENABLED_TRUE@ LassoException_top.java \ @JAVA_ENABLED_TRUE@ tests/BindingTests.java \ @JAVA_ENABLED_TRUE@ tests/LoginTest.java \ @JAVA_ENABLED_TRUE@ lang.py \ @JAVA_ENABLED_TRUE@ __init__.py \ @JAVA_ENABLED_TRUE@ wrapper_bottom.c \ @JAVA_ENABLED_TRUE@ wrapper_top.c # Some of the following classes are built only if junit is available @JAVA_ENABLED_TRUE@@JUNIT_ENABLED_TRUE@test_source_files = tests/BindingTests.java tests/LoginTest.java @JAVA_ENABLED_TRUE@@JUNIT_ENABLED_TRUE@TESTS = AllJunitTests all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign bindings/java/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign bindings/java/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-java_extensionLTLIBRARIES: $(java_extension_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(java_extension_LTLIBRARIES)'; test -n "$(java_extensiondir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(java_extensiondir)'"; \ $(MKDIR_P) "$(DESTDIR)$(java_extensiondir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(java_extensiondir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(java_extensiondir)"; \ } uninstall-java_extensionLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(java_extension_LTLIBRARIES)'; test -n "$(java_extensiondir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(java_extensiondir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(java_extensiondir)/$$f"; \ done clean-java_extensionLTLIBRARIES: -test -z "$(java_extension_LTLIBRARIES)" || rm -f $(java_extension_LTLIBRARIES) @list='$(java_extension_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libjnilasso.la: $(libjnilasso_la_OBJECTS) $(libjnilasso_la_DEPENDENCIES) $(EXTRA_libjnilasso_la_DEPENDENCIES) $(AM_V_CCLD)$(libjnilasso_la_LINK) $(am_libjnilasso_la_rpath) $(libjnilasso_la_OBJECTS) $(libjnilasso_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libjnilasso_la-com_entrouvert_lasso_LassoJNI.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< libjnilasso_la-com_entrouvert_lasso_LassoJNI.lo: com_entrouvert_lasso_LassoJNI.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjnilasso_la_CFLAGS) $(CFLAGS) -MT libjnilasso_la-com_entrouvert_lasso_LassoJNI.lo -MD -MP -MF $(DEPDIR)/libjnilasso_la-com_entrouvert_lasso_LassoJNI.Tpo -c -o libjnilasso_la-com_entrouvert_lasso_LassoJNI.lo `test -f 'com_entrouvert_lasso_LassoJNI.c' || echo '$(srcdir)/'`com_entrouvert_lasso_LassoJNI.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libjnilasso_la-com_entrouvert_lasso_LassoJNI.Tpo $(DEPDIR)/libjnilasso_la-com_entrouvert_lasso_LassoJNI.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='com_entrouvert_lasso_LassoJNI.c' object='libjnilasso_la-com_entrouvert_lasso_LassoJNI.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjnilasso_la_CFLAGS) $(CFLAGS) -c -o libjnilasso_la-com_entrouvert_lasso_LassoJNI.lo `test -f 'com_entrouvert_lasso_LassoJNI.c' || echo '$(srcdir)/'`com_entrouvert_lasso_LassoJNI.c mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-lasso_jarDATA: $(lasso_jar_DATA) @$(NORMAL_INSTALL) @list='$(lasso_jar_DATA)'; test -n "$(lasso_jardir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(lasso_jardir)'"; \ $(MKDIR_P) "$(DESTDIR)$(lasso_jardir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(lasso_jardir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(lasso_jardir)" || exit $$?; \ done uninstall-lasso_jarDATA: @$(NORMAL_UNINSTALL) @list='$(lasso_jar_DATA)'; test -n "$(lasso_jardir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(lasso_jardir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? AllJunitTests.log: AllJunitTests @p='AllJunitTests'; \ b='AllJunitTests'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(LTLIBRARIES) $(DATA) installdirs: for dir in "$(DESTDIR)$(java_extensiondir)" "$(DESTDIR)$(lasso_jardir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am install-exec: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-java_extensionLTLIBRARIES clean-libtool \ clean-local mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/libjnilasso_la-com_entrouvert_lasso_LassoJNI.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-java_extensionLTLIBRARIES \ install-lasso_jarDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/libjnilasso_la-com_entrouvert_lasso_LassoJNI.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-java_extensionLTLIBRARIES \ uninstall-lasso_jarDATA .MAKE: all check check-am install install-am install-exec \ install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ check-am clean clean-generic clean-java_extensionLTLIBRARIES \ clean-libtool clean-local cscopelist-am ctags ctags-am \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-java_extensionLTLIBRARIES \ install-lasso_jarDATA install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am \ uninstall-java_extensionLTLIBRARIES uninstall-lasso_jarDATA .PRECIOUS: Makefile .NOTPARALLEL: @JAVA_ENABLED_TRUE@%.class: %.java @JAVA_ENABLED_TRUE@ $(AM_V_JAVAC) $(JAVAC) $(CLASSPATH_OPT) $(CLASSPATH) $(JAVAC_FLAGS) -d . $< @JAVA_ENABLED_TRUE@lasso.jar: $(java_lasso_source_files:.java=.class) @JAVA_ENABLED_TRUE@ $(AM_V_JAR) $(JAR) -cf $@ $(all_jar_class_files) @JAVA_ENABLED_TRUE@doc: @JAVA_ENABLED_TRUE@ -mkdir .doc @JAVA_ENABLED_TRUE@ -javadoc -link http://java.sun.com/j2se/1.4.2/docs/api -public -d .doc -sourcepath . -subpackages com.entrouvert.lasso @JAVA_ENABLED_TRUE@ mv .doc doc @JAVA_ENABLED_TRUE@com_entrouvert_lasso_LassoJNI.h: com/entrouvert/lasso/LassoJNI.class $(java_lasso_source_files:.java=.class) @JAVA_ENABLED_TRUE@ $(AM_V_GEN) $(JAVAH) $(JAVAH_FLAGS) -classpath . `echo $< | sed 'su/u.ug;su.classuu'` @JAVA_ENABLED_TRUE@$(java_lasso_source_files) com_entrouvert_lasso_LassoJNI.c: wrapper_top.c wrapper_bottom.c lang.py ../bindings.py @JAVA_ENABLED_TRUE@ $(AM_V_GEN) $(PYTHON) $(top_srcdir)/bindings/bindings.py $(BINDING_OPTION) -l java --src-dir=$(top_srcdir)/lasso/ $(EXTRA_ARGS) && cp $(srcdir)/GObject.java com/entrouvert/lasso @JAVA_ENABLED_TRUE@doc-publish: doc @JAVA_ENABLED_TRUE@ tar czf doc.tgz -C doc . @JAVA_ENABLED_TRUE@ scp doc.tgz bdauvergne@perso.entrouvert.org: @JAVA_ENABLED_TRUE@ ssh bdauvergne@perso.entrouvert.org tar czf -C public_html/java-binding-doc doc.tgz @JAVA_ENABLED_TRUE@ rm doc.tgz @JAVA_ENABLED_TRUE@@JUNIT_ENABLED_TRUE@$(test_source_files:.java=.class): CLASSPATH=.:$(CLASSPATH_JUNIT) @JAVA_ENABLED_TRUE@@JUNIT_ENABLED_TRUE@AllJunitTests: JAVAFLAGS +="-Dsrcdir=$(srcdir)" @JAVA_ENABLED_TRUE@@JUNIT_ENABLED_TRUE@AllJunitTests: $(test_source_files:.java=.class) @JAVA_ENABLED_TRUE@@JUNIT_ENABLED_TRUE@ echo "#! /bin/sh" > $@ @JAVA_ENABLED_TRUE@@JUNIT_ENABLED_TRUE@ echo "OBJDIR=`$(top_builddir)/libtool --config | grep ^objdir | sed 's/.*=//'`" >> $@ @JAVA_ENABLED_TRUE@@JUNIT_ENABLED_TRUE@ echo 'LD_LIBRARY_PATH=$$OBJDIR DYLD_LIBRARY_PATH=$$OBJDIR @JUNIT@ -Djava.library.path=$$OBJDIR BindingTests' >> $@ @JAVA_ENABLED_TRUE@@JUNIT_ENABLED_TRUE@ echo 'LD_LIBRARY_PATH=$$OBJDIR DYLD_LIBRARY_PATH=$$OBJDIR @JUNIT@ -Djava.library.path=$$OBJDIR LoginTest' >> $@ @JAVA_ENABLED_TRUE@@JUNIT_ENABLED_TRUE@ chmod +x $@ clean-local: -rm -rf com # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lasso-2.8.2/bindings/java/PaxHeaders/TODO0000644000000000000000000000013213766621500015136 xustar0030 mtime=1608196928.722894973 30 atime=1678098073.081513305 30 ctime=1678814322.721963057 lasso-2.8.2/bindings/java/TODO0000644000175000017500000000050113766621500020402 0ustar00bdauvergnebdauvergne00000000000000* utiliser les numéros de version de lasso dans la doc/noms de fichiers * créer une hiérarchie object pour différentier les services SAML 2 des services ID-FF 1.2 ainsi que mutualiser certaines méthodes. * déplacer les points d'accés saml2 et id-ff dans leurs répertoires res pectifs. * supporter plusieurs IdP lasso-2.8.2/PaxHeaders/COPYING0000644000000000000000000000013213766621500012763 xustar0030 mtime=1608196928.706894841 30 atime=1678098069.961488819 30 ctime=1678814319.889946932 lasso-2.8.2/COPYING0000644000175000017500000004310513766621500016236 0ustar00bdauvergnebdauvergne00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 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 Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. lasso-2.8.2/PaxHeaders/config.sub0000644000000000000000000000007414175772605013725 xustar0030 atime=1678814115.140793897 30 ctime=1678814319.909947046 lasso-2.8.2/config.sub0000755000175000017500000010511614175772605017177 0ustar00bdauvergnebdauvergne00000000000000#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2022 Free Software Foundation, Inc. # shellcheck disable=SC2006,SC2268 # see below for rationale timestamp='2022-01-03' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # https://git.savannah.gnu.org/cgit/config.git/plain/config.sub # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. # The "shellcheck disable" line above the timestamp inhibits complaints # about features and limitations of the classic Bourne shell that were # superseded or lifted in POSIX. However, this script identifies a wide # variety of pre-POSIX systems that do not have POSIX shells at all, and # even some reasonably current systems (Solaris 10 as case-in-point) still # have a pre-POSIX /bin/sh. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS Canonicalize a configuration name. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2022 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; *local*) # First pass through any local machine types. echo "$1" exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Split fields of configuration type # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read field1 field2 field3 field4 <&2 exit 1 ;; *-*-*-*) basic_machine=$field1-$field2 basic_os=$field3-$field4 ;; *-*-*) # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two # parts maybe_os=$field2-$field3 case $maybe_os in nto-qnx* | linux-* | uclinux-uclibc* \ | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \ | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \ | storm-chaos* | os2-emx* | rtmk-nova*) basic_machine=$field1 basic_os=$maybe_os ;; android-linux) basic_machine=$field1-unknown basic_os=linux-android ;; *) basic_machine=$field1-$field2 basic_os=$field3 ;; esac ;; *-*) # A lone config we happen to match not fitting any pattern case $field1-$field2 in decstation-3100) basic_machine=mips-dec basic_os= ;; *-*) # Second component is usually, but not always the OS case $field2 in # Prevent following clause from handling this valid os sun*os*) basic_machine=$field1 basic_os=$field2 ;; zephyr*) basic_machine=$field1-unknown basic_os=$field2 ;; # Manufacturers dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \ | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \ | unicom* | ibm* | next | hp | isi* | apollo | altos* \ | convergent* | ncr* | news | 32* | 3600* | 3100* \ | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \ | ultra | tti* | harris | dolphin | highlevel | gould \ | cbm | ns | masscomp | apple | axis | knuth | cray \ | microblaze* | sim | cisco \ | oki | wec | wrs | winbond) basic_machine=$field1-$field2 basic_os= ;; *) basic_machine=$field1 basic_os=$field2 ;; esac ;; esac ;; *) # Convert single-component short-hands not valid as part of # multi-component configurations. case $field1 in 386bsd) basic_machine=i386-pc basic_os=bsd ;; a29khif) basic_machine=a29k-amd basic_os=udi ;; adobe68k) basic_machine=m68010-adobe basic_os=scout ;; alliant) basic_machine=fx80-alliant basic_os= ;; altos | altos3068) basic_machine=m68k-altos basic_os= ;; am29k) basic_machine=a29k-none basic_os=bsd ;; amdahl) basic_machine=580-amdahl basic_os=sysv ;; amiga) basic_machine=m68k-unknown basic_os= ;; amigaos | amigados) basic_machine=m68k-unknown basic_os=amigaos ;; amigaunix | amix) basic_machine=m68k-unknown basic_os=sysv4 ;; apollo68) basic_machine=m68k-apollo basic_os=sysv ;; apollo68bsd) basic_machine=m68k-apollo basic_os=bsd ;; aros) basic_machine=i386-pc basic_os=aros ;; aux) basic_machine=m68k-apple basic_os=aux ;; balance) basic_machine=ns32k-sequent basic_os=dynix ;; blackfin) basic_machine=bfin-unknown basic_os=linux ;; cegcc) basic_machine=arm-unknown basic_os=cegcc ;; convex-c1) basic_machine=c1-convex basic_os=bsd ;; convex-c2) basic_machine=c2-convex basic_os=bsd ;; convex-c32) basic_machine=c32-convex basic_os=bsd ;; convex-c34) basic_machine=c34-convex basic_os=bsd ;; convex-c38) basic_machine=c38-convex basic_os=bsd ;; cray) basic_machine=j90-cray basic_os=unicos ;; crds | unos) basic_machine=m68k-crds basic_os= ;; da30) basic_machine=m68k-da30 basic_os= ;; decstation | pmax | pmin | dec3100 | decstatn) basic_machine=mips-dec basic_os= ;; delta88) basic_machine=m88k-motorola basic_os=sysv3 ;; dicos) basic_machine=i686-pc basic_os=dicos ;; djgpp) basic_machine=i586-pc basic_os=msdosdjgpp ;; ebmon29k) basic_machine=a29k-amd basic_os=ebmon ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson basic_os=ose ;; gmicro) basic_machine=tron-gmicro basic_os=sysv ;; go32) basic_machine=i386-pc basic_os=go32 ;; h8300hms) basic_machine=h8300-hitachi basic_os=hms ;; h8300xray) basic_machine=h8300-hitachi basic_os=xray ;; h8500hms) basic_machine=h8500-hitachi basic_os=hms ;; harris) basic_machine=m88k-harris basic_os=sysv3 ;; hp300 | hp300hpux) basic_machine=m68k-hp basic_os=hpux ;; hp300bsd) basic_machine=m68k-hp basic_os=bsd ;; hppaosf) basic_machine=hppa1.1-hp basic_os=osf ;; hppro) basic_machine=hppa1.1-hp basic_os=proelf ;; i386mach) basic_machine=i386-mach basic_os=mach ;; isi68 | isi) basic_machine=m68k-isi basic_os=sysv ;; m68knommu) basic_machine=m68k-unknown basic_os=linux ;; magnum | m3230) basic_machine=mips-mips basic_os=sysv ;; merlin) basic_machine=ns32k-utek basic_os=sysv ;; mingw64) basic_machine=x86_64-pc basic_os=mingw64 ;; mingw32) basic_machine=i686-pc basic_os=mingw32 ;; mingw32ce) basic_machine=arm-unknown basic_os=mingw32ce ;; monitor) basic_machine=m68k-rom68k basic_os=coff ;; morphos) basic_machine=powerpc-unknown basic_os=morphos ;; moxiebox) basic_machine=moxie-unknown basic_os=moxiebox ;; msdos) basic_machine=i386-pc basic_os=msdos ;; msys) basic_machine=i686-pc basic_os=msys ;; mvs) basic_machine=i370-ibm basic_os=mvs ;; nacl) basic_machine=le32-unknown basic_os=nacl ;; ncr3000) basic_machine=i486-ncr basic_os=sysv4 ;; netbsd386) basic_machine=i386-pc basic_os=netbsd ;; netwinder) basic_machine=armv4l-rebel basic_os=linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony basic_os=newsos ;; news1000) basic_machine=m68030-sony basic_os=newsos ;; necv70) basic_machine=v70-nec basic_os=sysv ;; nh3000) basic_machine=m68k-harris basic_os=cxux ;; nh[45]000) basic_machine=m88k-harris basic_os=cxux ;; nindy960) basic_machine=i960-intel basic_os=nindy ;; mon960) basic_machine=i960-intel basic_os=mon960 ;; nonstopux) basic_machine=mips-compaq basic_os=nonstopux ;; os400) basic_machine=powerpc-ibm basic_os=os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson basic_os=ose ;; os68k) basic_machine=m68k-none basic_os=os68k ;; paragon) basic_machine=i860-intel basic_os=osf ;; parisc) basic_machine=hppa-unknown basic_os=linux ;; psp) basic_machine=mipsallegrexel-sony basic_os=psp ;; pw32) basic_machine=i586-unknown basic_os=pw32 ;; rdos | rdos64) basic_machine=x86_64-pc basic_os=rdos ;; rdos32) basic_machine=i386-pc basic_os=rdos ;; rom68k) basic_machine=m68k-rom68k basic_os=coff ;; sa29200) basic_machine=a29k-amd basic_os=udi ;; sei) basic_machine=mips-sei basic_os=seiux ;; sequent) basic_machine=i386-sequent basic_os= ;; sps7) basic_machine=m68k-bull basic_os=sysv2 ;; st2000) basic_machine=m68k-tandem basic_os= ;; stratus) basic_machine=i860-stratus basic_os=sysv4 ;; sun2) basic_machine=m68000-sun basic_os= ;; sun2os3) basic_machine=m68000-sun basic_os=sunos3 ;; sun2os4) basic_machine=m68000-sun basic_os=sunos4 ;; sun3) basic_machine=m68k-sun basic_os= ;; sun3os3) basic_machine=m68k-sun basic_os=sunos3 ;; sun3os4) basic_machine=m68k-sun basic_os=sunos4 ;; sun4) basic_machine=sparc-sun basic_os= ;; sun4os3) basic_machine=sparc-sun basic_os=sunos3 ;; sun4os4) basic_machine=sparc-sun basic_os=sunos4 ;; sun4sol2) basic_machine=sparc-sun basic_os=solaris2 ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun basic_os= ;; sv1) basic_machine=sv1-cray basic_os=unicos ;; symmetry) basic_machine=i386-sequent basic_os=dynix ;; t3e) basic_machine=alphaev5-cray basic_os=unicos ;; t90) basic_machine=t90-cray basic_os=unicos ;; toad1) basic_machine=pdp10-xkl basic_os=tops20 ;; tpf) basic_machine=s390x-ibm basic_os=tpf ;; udi29k) basic_machine=a29k-amd basic_os=udi ;; ultra3) basic_machine=a29k-nyu basic_os=sym1 ;; v810 | necv810) basic_machine=v810-nec basic_os=none ;; vaxv) basic_machine=vax-dec basic_os=sysv ;; vms) basic_machine=vax-dec basic_os=vms ;; vsta) basic_machine=i386-pc basic_os=vsta ;; vxworks960) basic_machine=i960-wrs basic_os=vxworks ;; vxworks68) basic_machine=m68k-wrs basic_os=vxworks ;; vxworks29k) basic_machine=a29k-wrs basic_os=vxworks ;; xbox) basic_machine=i686-pc basic_os=mingw32 ;; ymp) basic_machine=ymp-cray basic_os=unicos ;; *) basic_machine=$1 basic_os= ;; esac ;; esac # Decode 1-component or ad-hoc basic machines case $basic_machine in # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) cpu=hppa1.1 vendor=winbond ;; op50n) cpu=hppa1.1 vendor=oki ;; op60c) cpu=hppa1.1 vendor=oki ;; ibm*) cpu=i370 vendor=ibm ;; orion105) cpu=clipper vendor=highlevel ;; mac | mpw | mac-mpw) cpu=m68k vendor=apple ;; pmac | pmac-mpw) cpu=powerpc vendor=apple ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) cpu=m68000 vendor=att ;; 3b*) cpu=we32k vendor=att ;; bluegene*) cpu=powerpc vendor=ibm basic_os=cnk ;; decsystem10* | dec10*) cpu=pdp10 vendor=dec basic_os=tops10 ;; decsystem20* | dec20*) cpu=pdp10 vendor=dec basic_os=tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) cpu=m68k vendor=motorola ;; dpx2*) cpu=m68k vendor=bull basic_os=sysv3 ;; encore | umax | mmax) cpu=ns32k vendor=encore ;; elxsi) cpu=elxsi vendor=elxsi basic_os=${basic_os:-bsd} ;; fx2800) cpu=i860 vendor=alliant ;; genix) cpu=ns32k vendor=ns ;; h3050r* | hiux*) cpu=hppa1.1 vendor=hitachi basic_os=hiuxwe2 ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) cpu=m68000 vendor=hp ;; hp9k3[2-9][0-9]) cpu=m68k vendor=hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) cpu=hppa1.1 vendor=hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; i*86v32) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv32 ;; i*86v4*) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv4 ;; i*86v) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv ;; i*86sol2) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=solaris2 ;; j90 | j90-cray) cpu=j90 vendor=cray basic_os=${basic_os:-unicos} ;; iris | iris4d) cpu=mips vendor=sgi case $basic_os in irix*) ;; *) basic_os=irix4 ;; esac ;; miniframe) cpu=m68000 vendor=convergent ;; *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*) cpu=m68k vendor=atari basic_os=mint ;; news-3600 | risc-news) cpu=mips vendor=sony basic_os=newsos ;; next | m*-next) cpu=m68k vendor=next case $basic_os in openstep*) ;; nextstep*) ;; ns2*) basic_os=nextstep2 ;; *) basic_os=nextstep3 ;; esac ;; np1) cpu=np1 vendor=gould ;; op50n-* | op60c-*) cpu=hppa1.1 vendor=oki basic_os=proelf ;; pa-hitachi) cpu=hppa1.1 vendor=hitachi basic_os=hiuxwe2 ;; pbd) cpu=sparc vendor=tti ;; pbb) cpu=m68k vendor=tti ;; pc532) cpu=ns32k vendor=pc532 ;; pn) cpu=pn vendor=gould ;; power) cpu=power vendor=ibm ;; ps2) cpu=i386 vendor=ibm ;; rm[46]00) cpu=mips vendor=siemens ;; rtpc | rtpc-*) cpu=romp vendor=ibm ;; sde) cpu=mipsisa32 vendor=sde basic_os=${basic_os:-elf} ;; simso-wrs) cpu=sparclite vendor=wrs basic_os=vxworks ;; tower | tower-32) cpu=m68k vendor=ncr ;; vpp*|vx|vx-*) cpu=f301 vendor=fujitsu ;; w65) cpu=w65 vendor=wdc ;; w89k-*) cpu=hppa1.1 vendor=winbond basic_os=proelf ;; none) cpu=none vendor=none ;; leon|leon[3-9]) cpu=sparc vendor=$basic_machine ;; leon-*|leon[3-9]-*) cpu=sparc vendor=`echo "$basic_machine" | sed 's/-.*//'` ;; *-*) # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read cpu vendor <&2 exit 1 ;; esac ;; esac # Here we canonicalize certain aliases for manufacturers. case $vendor in digital*) vendor=dec ;; commodore*) vendor=cbm ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if test x$basic_os != x then # First recognize some ad-hoc cases, or perhaps split kernel-os, or else just # set os. case $basic_os in gnu/linux*) kernel=linux os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'` ;; os2-emx) kernel=os2 os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'` ;; nto-qnx*) kernel=nto os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'` ;; *-*) # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read kernel os <&2 exit 1 ;; esac # As a final step for OS-related things, validate the OS-kernel combination # (given a valid OS), if there is a kernel. case $kernel-$os in linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* \ | linux-musl* | linux-relibc* | linux-uclibc* ) ;; uclinux-uclibc* ) ;; -dietlibc* | -newlib* | -musl* | -relibc* | -uclibc* ) # These are just libc implementations, not actual OSes, and thus # require a kernel. echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2 exit 1 ;; kfreebsd*-gnu* | kopensolaris*-gnu*) ;; vxworks-simlinux | vxworks-simwindows | vxworks-spe) ;; nto-qnx*) ;; os2-emx) ;; *-eabi* | *-gnueabi*) ;; -*) # Blank kernel with real OS is always fine. ;; *-*) echo "Invalid configuration \`$1': Kernel \`$kernel' not known to work with OS \`$os'." 1>&2 exit 1 ;; esac # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. case $vendor in unknown) case $cpu-$os in *-riscix*) vendor=acorn ;; *-sunos*) vendor=sun ;; *-cnk* | *-aix*) vendor=ibm ;; *-beos*) vendor=be ;; *-hpux*) vendor=hp ;; *-mpeix*) vendor=hp ;; *-hiux*) vendor=hitachi ;; *-unos*) vendor=crds ;; *-dgux*) vendor=dg ;; *-luna*) vendor=omron ;; *-genix*) vendor=ns ;; *-clix*) vendor=intergraph ;; *-mvs* | *-opened*) vendor=ibm ;; *-os400*) vendor=ibm ;; s390-* | s390x-*) vendor=ibm ;; *-ptx*) vendor=sequent ;; *-tpf*) vendor=ibm ;; *-vxsim* | *-vxworks* | *-windiss*) vendor=wrs ;; *-aux*) vendor=apple ;; *-hms*) vendor=hitachi ;; *-mpw* | *-macos*) vendor=apple ;; *-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*) vendor=atari ;; *-vos*) vendor=stratus ;; esac ;; esac echo "$cpu-$vendor-${kernel:+$kernel-}$os" exit # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: lasso-2.8.2/PaxHeaders/depcomp0000644000000000000000000000007414215102164013275 xustar0030 atime=1678814115.728797166 30 ctime=1678814320.021947684 lasso-2.8.2/depcomp0000755000175000017500000005602014215102164016546 0ustar00bdauvergnebdauvergne00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2018-03-07.03; # UTC # Copyright (C) 1999-2021 Free Software Foundation, Inc. # 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 Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Avoid interferences from the environment. gccflag= dashmflag= # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The second -e expression handles DOS-style file names with drive # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E \ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: lasso-2.8.2/PaxHeaders/autogen.sh0000644000000000000000000000013214042530142013713 xustar0030 mtime=1619701858.149803718 30 atime=1678814108.656757855 30 ctime=1678814319.921947115 lasso-2.8.2/autogen.sh0000755000175000017500000000646514042530142017201 0ustar00bdauvergnebdauvergne00000000000000#!/bin/sh # Run this to generate all the initial makefiles, etc. PROJECT=lasso TEST_TYPE=-f FILE=lasso.pc.in # a silly hack that generates autoregen.sh but it's handy echo "#!/bin/sh" > autoregen.sh echo "./autogen.sh $@ \$@" >> autoregen.sh chmod +x autoregen.sh DIE=0 srcdir=`dirname $0` test -z "$srcdir" && srcdir=. THEDIR="`pwd`" cd "$srcdir" (autoconf --version) < /dev/null > /dev/null 2>&1 || { echo echo "You must have autoconf installed to compile $PROJECT." echo "Download the appropriate package for your distribution," echo "or get the source tarball at ftp://ftp.gnu.org/gnu/autoconf/" DIE=1 } if automake-1.16 --version < /dev/null > /dev/null 2>&1; then AUTOMAKE=automake-1.16 ACLOCAL=aclocal-1.16 elif automake-1.15 --version < /dev/null > /dev/null 2>&1; then AUTOMAKE=automake-1.15 ACLOCAL=aclocal-1.15 elif automake-1.14 --version < /dev/null > /dev/null 2>&1; then AUTOMAKE=automake-1.14 ACLOCAL=aclocal-1.14 elif automake-1.13 --version < /dev/null > /dev/null 2>&1; then AUTOMAKE=automake-1.13 ACLOCAL=aclocal-1.13 elif automake-1.12 --version < /dev/null > /dev/null 2>&1; then AUTOMAKE=automake-1.12 ACLOCAL=aclocal-1.12 elif automake-1.11 --version < /dev/null > /dev/null 2>&1; then AUTOMAKE=automake-1.11 ACLOCAL=aclocal-1.11 elif automake-1.10 --version < /dev/null > /dev/null 2>&1; then AUTOMAKE=automake-1.10 ACLOCAL=aclocal-1.10 elif automake-1.9 --version < /dev/null > /dev/null 2>&1; then AUTOMAKE=automake-1.9 ACLOCAL=aclocal-1.9 elif automake-1.8 --version < /dev/null > /dev/null 2>&1; then AUTOMAKE=automake-1.8 ACLOCAL=aclocal-1.8 elif automake-1.7 --version < /dev/null > /dev/null 2>&1; then AUTOMAKE=automake-1.7 ACLOCAL=aclocal-1.7 elif automake-1.6 --version < /dev/null > /dev/null 2>&1; then AUTOMAKE=automake-1.6 ACLOCAL=aclocal-1.6 else echo echo "You must have automake installed to compile $PROJECT." echo "Download the appropriate package for your distribution," echo "or get the source tarball at ftp://ftp.gnu.org/gnu/automake/" DIE=1 fi if test "$DIE" -eq 1; then exit 1 fi test $TEST_TYPE $FILE || { echo "You must run this script in the top-level $PROJECT directory" exit 1 } if test "$#" = 0; then echo "I am going to run ./configure with no arguments - if you wish " echo "to pass any to it, please specify them on the $0 command line." fi # to support timj aclocal setup we are shipping gnome-doc-utils.m4 # and making sure automake picks it up ;) # this is bad as -I prepends to the search path echo "* Running libtoolize" libtoolize --copy --force GTKDOCIZE=`which gtkdocize` if test -z $GTKDOCIZE; then echo "You don't have gtk-doc installed, and thus" echo "won't be able to generate the documentation." touch gtk-doc.make else echo "* Running gtkdocize" $GTKDOCIZE --flavour no-tmpl || exit $? fi echo "* Running $ACLOCAL" $ACLOCAL $ACLOCAL_FLAGS -I m4 || exit $? echo "* Running autoconf" autoconf || exit $? (autoheader --version) < /dev/null > /dev/null 2>&1 && autoheader echo "* Running $AUTOMAKE" $AUTOMAKE --add-missing -Wno-portability $am_opt || exit $? cd "$THEDIR" if [ "$1" != "noconfig" ]; then $srcdir/configure --enable-gtk-doc --enable-maintainer-mode "$@" || exit $? fi echo echo "Now type 'make install' to install $PROJECT." lasso-2.8.2/PaxHeaders/tests0000644000000000000000000000013214404126161013006 xustar0030 mtime=1678814321.221954517 30 atime=1678814326.421984131 30 ctime=1678814321.221954517 lasso-2.8.2/tests/0000755000175000017500000000000014404126161016333 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tests/PaxHeaders/valgrind0000644000000000000000000000013214050545511014615 xustar0030 mtime=1621281609.275307814 30 atime=1678814326.421984131 30 ctime=1678814321.213954471 lasso-2.8.2/tests/valgrind/0000755000175000017500000000000014050545511020142 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tests/valgrind/PaxHeaders/nss.supp0000644000000000000000000000013213766621500016414 xustar0030 mtime=1608196928.966896974 30 atime=1678098071.289499243 30 ctime=1678814321.213954471 lasso-2.8.2/tests/valgrind/nss.supp0000644000175000017500000000510713766621500021667 0ustar00bdauvergnebdauvergne00000000000000##----------------------------------------------------------------------## # # Errors to suppress by default with NSS # # Format of this file is: # { # name_of_suppression # kind: one of Param Value1 Value2 Value4 Value8 # Free Addr1 Addr2 Addr4 Addr8 # Cond (previously known as Value0) # (if Param: name of system call param, if Free: name of free-ing fn) # caller0 name, or /name/of/so/file.so # caller1 name, or ditto # (optionally: caller2 name) # (optionally: caller3 name) # } ##----------------------------------------------------------------------## { NSS memcmp/prng_RandomUpdate Memcheck:Cond fun:memcmp fun:prng_RandomUpdate } { NSS alg_fips*/prng_RandomUpdate Memcheck:Cond fun:alg_fips* fun:prng_RandomUpdate } { NSS sec_asn1d_parse_leaf/SEC_ASN1* Memcheck:Cond fun:sec_asn1d* fun:SEC_ASN1* } { NSS DES_Do1Block Memcheck:Value4 fun:DES_Do1Block fun:DES_EDE* } { NSS *mp* Memcheck:Cond fun:* fun:*mp_* } { NSS *mp* Memcheck:Cond fun:*mp* fun:* } { NSS *mp* Memcheck:Value4 fun:* fun:*mp* } { NSS *mp* Memcheck:Value4 fun:*mp* fun:*dsa* } { NSS *alg_fips* Memcheck:Cond fun:*alg_fips* fun:* } { NSS memcmp/prng Memcheck:Value4 fun:memcmp fun:*prng* } { NSS *alg_fips* Memcheck:Value4 fun:*alg_fips* fun:*prng* } { NSS *DSA_Generate* Memcheck:Value4 fun:*DSA_Generate* fun:*DSA* } { NSS *DSA_Generate* Memcheck:Cond fun:*DSA_Generate* fun:*DSA* } { NSS *memset/SECITEM* Memcheck:Value4 fun:*mem* fun:*SECITEM* } { NSS *FreeArena* Memcheck:Cond fun:*Arena* fun:*Arena* } { NSS *memcpy/sec* Memcheck:Cond fun:*mem* fun:*sec* } { NSS *memcpy/sec* Memcheck:Value4 fun:*mem* fun:*sec* } { NSS *sec* Memcheck:Value4 fun:*sec* fun:* } { NSS *sec* Memcheck:Cond fun:*sec* fun:* } { NSS *PL_Hash* Memcheck:Value4 fun:*PL_Hash* fun:* } { NSS *PL_Hash* Memcheck:Cond fun:*PL_Hash* fun:* } { NSS *SEC* Memcheck:Value4 fun:*SEC* fun:* } { NSS *SEC* Memcheck:Cond fun:*SEC* fun:* } { NSS *PORT* Memcheck:Value4 fun:*PORT* fun:* } { NSS *PORT* Memcheck:Cond fun:*PORT* fun:* } { NSS *DES* Memcheck:Value4 fun:*DES* fun:* } { NSS *__GI__* Addrcheck,Memcheck:Param write(buf) obj:*libc-2.2*so } { NSS xmlSecBase64* Memcheck:Value4 fun:xmlSecBase64* } { NSS rijndael* Memcheck:Value4 fun:rijndael* } lasso-2.8.2/tests/valgrind/PaxHeaders/lasso.supp0000644000000000000000000000013214050545511016724 xustar0030 mtime=1621281609.275307814 30 atime=1678098071.285499212 30 ctime=1678814321.213954471 lasso-2.8.2/tests/valgrind/lasso.supp0000644000175000017500000000574614050545511022210 0ustar00bdauvergnebdauvergne00000000000000{ suppression 27 Memcheck:Leak fun:calloc fun:g_malloc0 fun:g_hash_table_new_full fun:get_constructors_registry fun:lookup_registry fun:lasso_discovery_register_constructor_for_service_type } { suppression 21 Memcheck:Leak fun:malloc fun:g_malloc fun:g_slice_alloc fun:g_hash_table_new_full fun:get_constructors_registry fun:lookup_registry fun:lasso_discovery_register_constructor_for_service_type } { suppression 20 Memcheck:Leak fun:malloc fun:g_malloc fun:g_strdup fun:lasso_node_class_set_nodename fun:class_init fun:g_type_class_ref } { suppression 16 Memcheck:Leak ... fun:xmlNewNs fun:lasso_node_class_set_ns fun:class_init fun:g_type_class_ref } { suppression 15 Memcheck:Leak fun:malloc fun:g_malloc fun:g_strdup fun:set_registry fun:lasso_discovery_register_constructor_for_service_type } { suppression coin Memcheck:Leak fun:calloc fun:g_malloc0 fun:type_data_make_W } { type alloc 1 Memcheck:Leak fun:realloc fun:g_realloc fun:type_node_any_new_W fun:type_node_new_W } { type alloc 2 Memcheck:Leak fun:malloc fun:realloc fun:g_realloc fun:type_node_any_new_W fun:type_node_new_W } { type alloc 3 Memcheck:Leak fun:malloc fun:realloc fun:g_realloc fun:type_add_flags_W fun:g_type_register_fundamental } { type alloc 4 Memcheck:Leak fun:calloc fun:g_malloc0 fun:type_add_flags_W fun:g_type_register_fundamental } { suppression 103 Memcheck:Cond obj:/lib/i686/cmov/libcrypto.so.0.9.8 obj:/lib/i686/cmov/libcrypto.so.0.9.8 obj:/lib/i686/cmov/libcrypto.so.0.9.8 fun:BIO_vsnprintf fun:BIO_snprintf fun:asn1_add_error fun:d2i_ASN1_SET fun:d2i_AutoPrivateKey fun:ASN1_d2i_bio fun:d2i_PrivateKey_bio } { suppression 125 Memcheck:Leak fun:malloc fun:realloc fun:g_realloc fun:g_quark_from_static_string } { suppression 128 Memcheck:Leak fun:malloc fun:realloc fun:g_realloc fun:type_add_flags_W fun:g_type_register_static } { suppression 129 Memcheck:Leak fun:realloc fun:g_realloc fun:g_boxed_type_register_static } { suppression 131 Memcheck:Leak fun:malloc fun:g_malloc fun:g_param_type_register_static } { suppression 132 Memcheck:Leak fun:calloc fun:g_malloc0 fun:g_type_class_ref } { suppression 133 Memcheck:Leak fun:calloc fun:g_slice_alloc fun:g_hash_table_new_full fun:g_hash_table_new fun:g_quark_from_static_string } { g_type_init Memcheck:Leak fun:malloc ... fun:g_type_init } { g_type_init Memcheck:Leak fun:calloc ... fun:g_type_init } { g_type_init Memcheck:Leak fun:realloc ... fun:g_type_init } { register type Memcheck:Leak fun:malloc ... fun:g_type_register_static ... fun:lasso_*get_type } { register type Memcheck:Leak fun:realloc ... fun:g_type_register_static ... fun:lasso_*get_type } lasso-2.8.2/tests/valgrind/PaxHeaders/glib.supp0000644000000000000000000000013214050545511016520 xustar0030 mtime=1621281609.275307814 30 atime=1678098071.285499212 30 ctime=1678814321.213954471 lasso-2.8.2/tests/valgrind/glib.supp0000644000175000017500000001603614050545511021776 0ustar00bdauvergnebdauvergne00000000000000{ suppression 0 Memcheck:Leak fun:realloc fun:g_realloc fun:g_boxed_type_register_static } { suppression 1 Memcheck:Leak fun:realloc fun:g_realloc fun:g_signal_newv fun:g_signal_new_valist fun:g_signal_new fun:g_object_do_class_init fun:g_type_class_ref } { suppression 2 Memcheck:Leak fun:calloc fun:g_malloc0 fun:g_hash_table_new_full fun:g_hash_table_new fun:g_data_initialize fun:g_datalist_id_set_data_full fun:g_object_init fun:g_type_create_instance } { suppression 3 Memcheck:Leak fun:malloc fun:g_malloc fun:g_memdup fun:g_signal_newv fun:g_signal_new_valist fun:g_signal_new fun:g_object_do_class_init fun:g_type_class_ref } { suppression 4 Memcheck:Leak fun:calloc fun:g_malloc0 fun:type_add_flags_W } { suppression 5 Memcheck:Leak fun:malloc fun:realloc fun:g_realloc fun:g_type_add_interface_check } { suppression 6 Memcheck:Leak fun:malloc fun:g_malloc fun:g_signal_newv fun:g_signal_new_valist fun:g_signal_new fun:g_object_do_class_init fun:g_type_class_ref } { suppression 7 Memcheck:Leak fun:malloc fun:g_malloc fun:g_slice_alloc fun:g_hash_table_new_full fun:g_hash_table_new fun:g_type_init_with_debug_flags } { suppression 8 Memcheck:Leak fun:calloc fun:g_malloc0 fun:g_slice_init_nomessage fun:g_slice_alloc fun:g_hash_table_new_full fun:g_hash_table_new fun:g_quark_from_static_string fun:g_type_init_with_debug_flags } { suppression 9 Memcheck:Leak fun:malloc fun:g_malloc fun:g_slice_alloc fun:g_hash_table_new_full fun:g_hash_table_new fun:g_param_spec_pool_new fun:g_object_do_class_init fun:g_type_class_ref } { suppression 10 Memcheck:Leak fun:calloc fun:g_malloc0 fun:g_hash_table_insert_internal fun:type_node_any_new_W } { suppression 11 Memcheck:Leak fun:realloc fun:g_realloc fun:g_bsearch_array_grow fun:g_bsearch_array_insert fun:g_signal_newv fun:g_signal_new_valist fun:g_signal_new fun:g_object_do_class_init fun:g_type_class_ref } { suppression 12 Memcheck:Leak fun:malloc fun:realloc fun:g_realloc fun:type_node_any_new_W } { suppression 13 Memcheck:Leak fun:calloc fun:g_malloc0 fun:g_closure_new_simple fun:g_signal_type_cclosure_new } { suppression 17 Memcheck:Leak fun:malloc fun:g_malloc fun:g_strdup fun:g_quark_from_string fun:type_node_any_new_W } { suppression 18 Memcheck:Leak fun:malloc fun:g_malloc fun:g_param_type_register_static } { suppression 19 Memcheck:Leak fun:malloc fun:realloc fun:g_realloc fun:type_add_flags_W } { suppression 22 Memcheck:Leak fun:realloc fun:g_realloc fun:g_value_register_transform_func fun:g_value_transforms_init fun:g_type_init_with_debug_flags } { suppression 23 Memcheck:Leak fun:realloc fun:g_realloc fun:type_node_any_new_W } { suppression 24 Memcheck:Leak fun:calloc fun:g_malloc0 fun:type_data_make_W } { suppression 25 Memcheck:Leak fun:malloc fun:realloc fun:g_realloc fun:g_quark_from_static_string fun:g_type_init_with_debug_flags } { suppression 26 Memcheck:Leak fun:realloc fun:g_realloc fun:g_bsearch_array_grow fun:signal_add_class_closure fun:g_signal_newv fun:g_signal_new_valist fun:g_signal_new fun:g_object_do_class_init fun:g_type_class_ref } { suppression 28 Memcheck:Leak fun:malloc fun:g_malloc fun:g_param_spec_pool_new fun:g_object_do_class_init fun:g_type_class_ref } { suppression 29 Memcheck:Leak fun:calloc fun:g_malloc0 fun:g_hash_table_new_full fun:g_hash_table_new fun:g_signal_init fun:g_type_init_with_debug_flags } { suppression 30 Memcheck:Leak fun:malloc fun:g_malloc fun:g_slice_alloc fun:g_hash_table_new_full fun:g_hash_table_new fun:g_quark_from_static_string fun:g_type_init_with_debug_flags } { suppression 31 Memcheck:Leak fun:calloc fun:g_malloc0 fun:g_param_spec_types_init } { suppression 32 Memcheck:Leak fun:calloc fun:g_malloc0 fun:g_hash_table_insert_internal fun:g_quark_from_string fun:type_node_any_new_W } { suppression 33 Memcheck:Leak fun:malloc fun:g_malloc fun:g_slice_alloc fun:g_hash_table_new_full fun:g_hash_table_new fun:g_signal_init fun:g_type_init_with_debug_flags } { suppression 34 Memcheck:Leak fun:malloc fun:g_malloc fun:g_slice_alloc fun:g_hash_table_new_full fun:g_hash_table_new fun:g_data_initialize fun:g_datalist_id_set_data_full fun:g_object_init fun:g_type_create_instance } { suppression 35 Memcheck:Leak fun:calloc fun:g_malloc0 fun:g_type_class_ref } { suppression 36 Memcheck:Leak fun:malloc fun:realloc fun:g_realloc fun:g_closure_set_meta_marshal fun:g_signal_type_cclosure_new } { suppression 37 Memcheck:Leak fun:calloc fun:g_malloc0 fun:g_hash_table_new_full fun:g_hash_table_new fun:g_param_spec_pool_new fun:g_object_do_class_init fun:g_type_class_ref } { suppression 38 Memcheck:Leak fun:calloc fun:g_malloc0 fun:class_init fun:g_type_class_ref } { suppression 40 Memcheck:Leak fun:malloc fun:g_malloc fun:g_strdup fun:g_quark_from_string } { suppression 41 Memcheck:Leak fun:malloc fun:g_malloc fun:g_strdup fun:g_get_filename_charsets fun:g_filename_display_name fun:g_file_get_contents } { suppression 42 Memcheck:Leak fun:calloc fun:g_malloc0 fun:g_get_filename_charsets fun:g_filename_display_name fun:g_file_get_contents } { suppression 42 Memcheck:Leak fun:calloc fun:g_malloc0 fun:g_get_charset fun:g_log_default_handler } { suppression 43 Memcheck:Leak fun:calloc fun:g_malloc0 fun:g_rand_new_with_seed_array fun:g_rand_new fun:g_random_int } { suppression 44 Memcheck:Leak fun:malloc fun:realloc fun:g_realloc fun:g_array_maybe_expand fun:g_array_set_size fun:g_static_private_set fun:g_get_charset fun:g_log_default_handler } { suppression 45 Memcheck:Leak fun:malloc fun:g_malloc fun:g_strdup fun:g_get_charset fun:g_log_default_handler } { suppression 46 Memcheck:Leak fun:malloc fun:g_malloc fun:g_strdup fun:g_intern_string } { suppression 47 Memcheck:Leak fun:calloc fun:g_malloc0 fun:g_thread_self fun:g_static_private_get fun:g_get_charset fun:g_log_default_handler } { suppression 48 Memcheck:Leak fun:malloc fun:g_malloc fun:g_slice_alloc fun:g_array_sized_new fun:g_array_new fun:g_static_private_set fun:g_get_charset fun:g_log_default_handler } { register type Memcheck:Leak ... fun:g_type_init_* } { suppression 49 Memcheck:Leak ... fun:call_init.part.0 fun:call_init fun:_dl_init obj:/lib/x86_64-linux-gnu/ld-2.19.so } { suppression 50 Memcheck:Leak ... fun:g_type_register_static } lasso-2.8.2/tests/valgrind/PaxHeaders/openssl.supp0000644000000000000000000000013214050545511017266 xustar0030 mtime=1621281609.275307814 30 atime=1678098071.285499212 30 ctime=1678814321.213954471 lasso-2.8.2/tests/valgrind/openssl.supp0000644000175000017500000000273614050545511022546 0ustar00bdauvergnebdauvergne00000000000000##----------------------------------------------------------------------## # # Errors to suppress by default with OpenSSL # # Format of this file is: # { # name_of_suppression # kind: one of Param Value1 Value2 Value4 Value8 # Free Addr1 Addr2 Addr4 Addr8 # Cond (previously known as Value0) # (if Param: name of system call param, if Free: name of free-ing fn) # caller0 name, or /name/of/so/file.so # caller1 name, or ditto # (optionally: caller2 name) # (optionally: caller3 name) # } ##----------------------------------------------------------------------## { OpenSSL BN_*(Cond) Memcheck:Cond fun:BN_* } { OpenSSL BN_*(Value4) Memcheck:Value4 fun:BN_* } { OpenSSL bn_*(Cond) Memcheck:Cond fun:bn_* } { OpenSSL bn_*(Value4) Memcheck:Value4 fun:bn_* } { OpenSSL AES_encrypt(Value4) Memcheck:Value4 fun:AES_encrypt fun:AES_cbc_encrypt } { OpenSSL DES_encrypt*(Value4) Memcheck:Value4 fun:DES_encrypt2 fun:DES_encrypt3 } { OpenSSL RSA_padding_add_PKCS1_type_2(Cond) Memcheck:Cond ... fun:RSA_padding_add_PKCS1_type_2 fun:RSA_eay_public_encrypt } { OpenSSL BN_*(Value8) Memcheck:Value8 fun:BN_* } { libcrypto(Value8) Memcheck:Value8 obj:/usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0 } { libcrypto(Cond) Memcheck:Cond obj:/usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0 } { Config Memcheck:Leak ... fun:OPENSSL_config } lasso-2.8.2/tests/PaxHeaders/tests.h0000644000000000000000000000013114364261206014402 xustar0029 mtime=1674666630.78276934 30 atime=1678814244.901521562 30 ctime=1678814321.217954493 lasso-2.8.2/tests/tests.h0000644000175000017500000001273714364261206017665 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __TESTS_H__ #define __TESTS_H__ #include "../lasso/lasso_config.h" #define check_not_null(what) \ ck_assert((what) != NULL) #define check_null(what) \ ck_assert((what) == NULL) #define check_true(what) ck_assert(what) #define check_false(what) ck_assert(! (what)) #define check_good_rc(what) do { int __rc = (what); ck_assert_msg(__rc == 0, "rc = %s(%i)", lasso_strerror(__rc), __rc); } while(0) #define check_bad_rc(what, how) \ { int __rc = (what); \ ck_assert_msg(__rc == how, #what " is not %s(%i), rc = %s(%i)", lasso_strerror(how), how, lasso_strerror(__rc), __rc); \ } #define check_equals(what,to) \ { typeof(what) __tmp1, __tmp2; \ __tmp1 = (what); \ __tmp2 = (to); \ ck_assert_msg(__tmp1 == __tmp2, #what " is not equal to " #to "(%llu) but to %llu", (long long int)__tmp2, (long long int)__tmp1); \ } #define check_not_equals(what,to) \ { typeof(what) __tmp1, __tmp2; \ __tmp1 = (what); \ __tmp2 = (to); \ ck_assert_msg(__tmp1 != __tmp2, #what " is equal to " #to "(%llu)", (long long int)__tmp2); \ } #define check_str_equals(what, to) \ { typeof(what) __tmp; \ __tmp = (what); \ ck_assert_msg(g_strcmp0(__tmp, to) == 0, #what " (%s) is not equal to %s", __tmp, to); \ } #define check_str_not_equals(what, to) \ { typeof(what) __tmp; \ __tmp = (what); \ fail_unless(g_strcmp0(__tmp, to) != 0, "%s:%i: " #what " is equal to %s", __func__, __LINE__, to); \ } void set_mute_logger(); void fail_logger(const gchar *log_domain, GLogLevelFlags log_level, const gchar *message, G_GNUC_UNUSED gpointer user_data); #define block_lasso_logs set_mute_logger(); #define unblock_lasso_logs g_log_set_default_handler(fail_logger, NULL); #define CHECKING_LOG_HANDLER_SIZE 30 struct CheckingLogHandlerUserData { GLogLevelFlags log_levels[CHECKING_LOG_HANDLER_SIZE]; const char *messages[CHECKING_LOG_HANDLER_SIZE]; gboolean endswith[CHECKING_LOG_HANDLER_SIZE]; GLogLevelFlags log_level_found; char *message_found; }; G_GNUC_UNUSED static guint checking_log_handler = 0; G_GNUC_UNUSED static guint checking_log_handler_flag = 0; G_GNUC_UNUSED static struct CheckingLogHandlerUserData checking_logger_user_data; static inline gboolean check_message(const char *a, const char *b, gboolean endswith) { if (endswith) { return strlen(a) >= strlen(b) && strcmp(a+(strlen(a)-strlen(b)), b) == 0; } else { return strcmp(a, b) == 0; } } static inline void checking_logger(G_GNUC_UNUSED const gchar *domain, G_GNUC_UNUSED GLogLevelFlags log_level, G_GNUC_UNUSED const gchar *message, G_GNUC_UNUSED gpointer user_data) { struct CheckingLogHandlerUserData *ck_user_data = user_data; int i = 0; for (i = 0; i < CHECKING_LOG_HANDLER_SIZE; i++) { if (log_level == ck_user_data->log_levels[i] && check_message(message, ck_user_data->messages[i], ck_user_data->endswith[i])) { ck_user_data->log_level_found = log_level; ck_user_data->message_found = g_strdup(message); return; } } g_log_default_handler(domain, log_level, message, user_data); checking_log_handler_flag = 0; } static inline void add_check_log(GLogLevelFlags log_level, const char *message, gboolean endswith) { int i = 0; for (i = 0; i < CHECKING_LOG_HANDLER_SIZE-1; i++) { if (! checking_logger_user_data.messages[i]) { checking_logger_user_data.log_levels[i] = log_level; checking_logger_user_data.messages[i] = message; checking_logger_user_data.endswith[i] = endswith; return; } } g_assert_not_reached(); } /* begin_check_do_log(level, message, endswith)/end_check_do_log() with check that the only * message emitted between the two macros is one equals to message at the level level, * or ending with message if endswith is True. */ static inline void begin_check_do_log(char *domain, GLogLevelFlags level, const char *message, gboolean endswith) { memset(&checking_logger_user_data, 0, sizeof(struct CheckingLogHandlerUserData)); add_check_log(level, message, endswith); checking_log_handler = g_log_set_handler(domain ? domain : LASSO_LOG_DOMAIN, level, checking_logger, &checking_logger_user_data); checking_log_handler_flag = 1; } static inline void end_check_do_log(const char *domain) { g_log_remove_handler(domain ? domain : LASSO_LOG_DOMAIN, checking_log_handler); checking_log_handler = 0; ck_assert_msg(checking_log_handler_flag, "Logging failure: expected log level %d and message «%s», got %d and «%s»", checking_logger_user_data.log_levels[0], checking_logger_user_data.messages[0], checking_logger_user_data.log_level_found, checking_logger_user_data.message_found); if (checking_logger_user_data.message_found) { g_free(checking_logger_user_data.message_found); } checking_log_handler_flag = 0; } #endif /*__TESTS_H__ */ lasso-2.8.2/tests/PaxHeaders/random_tests.c0000644000000000000000000000013214364261206015736 xustar0030 mtime=1674666630.778769315 30 atime=1678814247.265534924 30 ctime=1678814321.201954402 lasso-2.8.2/tests/random_tests.c0000644000175000017500000005544514364261206021223 0ustar00bdauvergnebdauvergne00000000000000/* * Lasso library C unit tests * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include #include #include #include "../lasso/lasso.h" #include "../lasso/xml/lib_assertion.h" #include "../lasso/xml/lib_authentication_statement.h" #include "../lasso/xml/saml_name_identifier.h" #include "../lasso/xml/samlp_response.h" #include "../lasso/utils.h" #include "../lasso/key.h" Suite* random_suite(); START_TEST(test01_provider_new) { LassoProvider *provider; char *dump; provider = lasso_provider_new(LASSO_PROVIDER_ROLE_SP, TESTSDATADIR "/sp1-la/metadata.xml", TESTSDATADIR "/sp1-la/public-key.pem", TESTSDATADIR "/ca1-la/certificate.pem"); ck_assert(LASSO_IS_PROVIDER(provider)); dump = lasso_node_dump(LASSO_NODE(provider)); ck_assert(dump != NULL); g_object_unref(provider); lasso_release_string(dump); } END_TEST START_TEST(test02_provider_new_from_dump) { LassoProvider *provider1, *provider2; char *dump; provider1 = lasso_provider_new(LASSO_PROVIDER_ROLE_SP, TESTSDATADIR "/sp1-la/metadata.xml", TESTSDATADIR "/sp1-la/public-key.pem", TESTSDATADIR "/ca1-la/certificate.pem"); ck_assert(LASSO_IS_PROVIDER(provider1)); dump = lasso_node_dump(LASSO_NODE(provider1)); ck_assert(dump != NULL); provider2 = lasso_provider_new_from_dump(dump); ck_assert(LASSO_IS_PROVIDER(provider2)); lasso_release_string(dump); dump = lasso_node_dump(LASSO_NODE(provider2)); ck_assert(dump != NULL); g_object_unref(provider1); g_object_unref(provider2); lasso_release_string(dump); } END_TEST START_TEST(test01_server_new) { LassoServer *server; LassoProvider *provider; char *dump; char *content = NULL; size_t len; server = lasso_server_new( TESTSDATADIR "/idp1-la/metadata.xml", TESTSDATADIR "/idp1-la/private-key-raw.pem", NULL, /* Secret key to unlock private key */ TESTSDATADIR "/idp1-la/certificate.pem"); ck_assert(LASSO_IS_SERVER(server)); provider = LASSO_PROVIDER(server); ck_assert(server->private_key != NULL); ck_assert(server->private_key_password == NULL); ck_assert(server->certificate != NULL); ck_assert(server->signature_method == lasso_get_default_signature_method()); ck_assert(provider->ProviderID != NULL); ck_assert(provider->role == 0); ck_assert(g_file_get_contents(TESTSDATADIR "/idp1-la/metadata.xml", &content, &len, NULL)); ck_assert(strcmp(provider->metadata_filename, content) == 0); g_free(content); ck_assert(provider->public_key == NULL); ck_assert(provider->ca_cert_chain == NULL); dump = lasso_node_dump(LASSO_NODE(server)); ck_assert(dump != NULL); g_object_unref(server); server = lasso_server_new_from_dump(dump); ck_assert(LASSO_IS_SERVER(server)); provider = LASSO_PROVIDER(server); ck_assert(server->private_key != NULL); ck_assert(server->private_key_password == NULL); ck_assert(server->certificate != NULL); ck_assert(server->signature_method == lasso_get_default_signature_method()); ck_assert(server->providers != NULL); ck_assert(provider->ProviderID != NULL); ck_assert_msg(provider->role == 0, "provider->role != 0 => provider := %d", provider->role); ck_assert(g_file_get_contents(TESTSDATADIR "/idp1-la/metadata.xml", &content, &len, NULL)); ck_assert(strcmp(provider->metadata_filename, content) == 0); ck_assert(provider->public_key == NULL); ck_assert(provider->ca_cert_chain == NULL); g_object_unref(server); lasso_release_string(dump); lasso_release_string(content); } END_TEST START_TEST(test02_server_add_provider) { LassoServer *server; char *dump; server = lasso_server_new( TESTSDATADIR "/idp1-la/metadata.xml", TESTSDATADIR "/idp1-la/private-key-raw.pem", NULL, /* Secret key to unlock private key */ TESTSDATADIR "/idp1-la/certificate.pem"); ck_assert(LASSO_IS_SERVER(server)); ck_assert(server->private_key != NULL); ck_assert(! server->private_key_password); ck_assert(server->certificate != NULL); ck_assert(server->signature_method == lasso_get_default_signature_method()); ck_assert(server->providers != NULL); lasso_server_add_provider( server, LASSO_PROVIDER_ROLE_SP, TESTSDATADIR "/sp1-la/metadata.xml", TESTSDATADIR "/sp1-la/public-key.pem", TESTSDATADIR "/ca1-la/certificate.pem"); ck_assert(g_hash_table_size(server->providers) == 1); dump = lasso_node_dump(LASSO_NODE(server)); g_object_unref(server); lasso_release_string(dump); } END_TEST START_TEST(test03_server_new_from_dump) { LassoServer *server1, *server2; char *dump; server1 = lasso_server_new( TESTSDATADIR "/idp1-la/metadata.xml", TESTSDATADIR "/idp1-la/private-key-raw.pem", NULL, /* Secret key to unlock private key */ TESTSDATADIR "/idp1-la/certificate.pem"); lasso_server_add_provider( server1, LASSO_PROVIDER_ROLE_SP, TESTSDATADIR "/sp1-la/metadata.xml", TESTSDATADIR "/sp1-la/public-key.pem", TESTSDATADIR "/ca1-la/certificate.pem"); dump = lasso_node_dump(LASSO_NODE(server1)); server2 = lasso_server_new_from_dump(dump); g_free(dump); dump = lasso_node_dump(LASSO_NODE(server2)); g_object_unref(server1); g_object_unref(server2); g_free(dump); } END_TEST START_TEST(test04_node_new_from_dump) { LassoNode *node; char *msg = \ "" \ "https://idp1/metadata" \ "_AF452F97C9E1590DDEB91D5BA6AA48ED"\ ""\ ""; char *dump; node = lasso_node_new_from_dump(msg); ck_assert_msg(node != NULL, "new_from_dump failed"); dump = lasso_node_dump(node); ck_assert_msg(dump != NULL, "node_dump failed"); g_object_unref(node); g_free(dump); } END_TEST START_TEST(test05_xsi_type) { /* check lib:AuthnContext element is not converted to * saml:AuthnContext xsi:type="lib:AuthnContextType" and * lib:AuthenticationStatement is converted to * saml:AuthenticationStatement * xsi:type="lib:AuthenticationStatementType" */ LassoSamlAssertion *assertion; LassoLibAuthenticationStatement *stmt; LassoSamlNameIdentifier *name_identifier; char *dump; name_identifier = lasso_saml_name_identifier_new(); assertion = LASSO_SAML_ASSERTION(lasso_lib_assertion_new_full("", "", "", "", "")); assertion->AuthenticationStatement = LASSO_SAML_AUTHENTICATION_STATEMENT( lasso_lib_authentication_statement_new_full( "toto", "toto", "toto", NULL, name_identifier)); g_object_unref(name_identifier); stmt = LASSO_LIB_AUTHENTICATION_STATEMENT(assertion->AuthenticationStatement); stmt->AuthnContext = LASSO_LIB_AUTHN_CONTEXT(lasso_lib_authn_context_new()); stmt->AuthnContext->AuthnContextClassRef = g_strdup("urn:toto"); dump = lasso_node_dump(LASSO_NODE(assertion)); ck_assert_msg(strstr(dump, "xsi:type=\"lib:AuthnContextType\"") == NULL, "AuthnContext got a xsi:type"); g_free(dump); dump = lasso_node_dump(LASSO_NODE(assertion)); ck_assert_msg(strstr(dump, "xsi:type=\"lib:AuthenticationStatementType\"") != NULL, "AuthenticationStatement didn't get a xsi:type"); g_free(dump); g_object_unref(assertion); } END_TEST START_TEST(test06_lib_statuscode) { /* check status code value in samlp:Response; it is a QName, if it * starts with lib:, that namespace must be defined. (was bug#416) */ LassoSamlpResponse *response = LASSO_SAMLP_RESPONSE(lasso_samlp_response_new()); char *dump = NULL; lasso_assign_string(response->Status->StatusCode->Value, LASSO_SAML_STATUS_CODE_SUCCESS); dump = lasso_node_dump(LASSO_NODE(response)); ck_assert_msg(strstr(dump, "xmlns:lib=") == NULL, "liberty namespace should not be defined"); lasso_release_string(dump); lasso_assign_string(response->Status->StatusCode->Value, LASSO_SAML_STATUS_CODE_RESPONDER); response->Status->StatusCode->StatusCode = lasso_samlp_status_code_new(); response->Status->StatusCode->StatusCode->Value = g_strdup( LASSO_LIB_STATUS_CODE_UNKNOWN_PRINCIPAL); dump = lasso_node_dump(LASSO_NODE(response)); ck_assert_msg(strstr(dump, "xmlns:lib=") != NULL, "liberty namespace should be defined"); lasso_release_string(dump); g_object_unref(response); } END_TEST extern xmlSecKey* lasso_xmlsec_load_private_key_from_buffer(const char *buffer, size_t length, const char *password, LassoSignatureMethod method, const char *certificate); extern int lasso_saml2_query_verify_signature(const char *query, const xmlSecKey *sender_public_key); START_TEST(test07_saml2_query_verify_signature) { /* normal query as produces by Lasso */ const char query1[] = "SAMLRequest=fVHJasMwEP0Vo3tqRXY2YRvcOIFAl9CUHnopwpkkAllyNeMuf1%2FZaSG95PrmLfNmMlSNaWXZ0ck%2BwXsHSNFXYyzKYZCzzlvpFGqUVjWAkmq5K%2B%2FvpLjhsvWOXO0Mu5BcVyhE8KSdZdGmytnbNEmTBV%2Bli9ulKMt5KlbVfDkbizWfcVEmUxa9gMfAz1mQBxFiBxuLpCwFiIvxiE9H48mz4FJMZJq8sqgKHbRVNKhORK2MY71vJzFqezSw00f7GPLXztcw9M7ZQRmE3n0bFtQf8IcUWV9JDqm%2B%2BPXCYNUAqb0ilcWXhOx8zIdQe1NtndH1dx%2FTKLp%2BlR7R%2B9FhoMq2b4wEllhUGuM%2Blx4UhZ3Id8Di4pz5%2F2fFDw%3D%3D&RelayState=fake&SigAlg=http%3A%2F%2Fwww.w3.org%2F2001%2F04%2Fxmldsig-more%23rsa-sha256&Signature=Zfz3DE1VMV3thaV4FWpH0fkWsBMzAFJcfvVWAbo0a3cY48Et%2BXUcbr1nvOJUJmhGoie0pQ4%2BcD9ToQlSk7BbJSBCct%2FQQgn2QNkX%2F1lk4v8RU8p5ptJRJ2iPLb8nC6WZhs81HoihQePSuj7Qe5bRUsDKvnWMq6OkD%2Fe6YO77dMXregTcfmnkrXqRb2T6TFfqyOz9i0%2FjmISsmj%2F3kEEfUzVA4LEbeEgiJDj1hec4XW26gQTih53v0sYukq4Eyb4zS2jVd3apUUxUrjn1NUpr7Z7dZ7w5MQlgZ8aw1xFDE8BkxymvIjwf8ciyx6sfTKbCRsoS9E0pQB1vxvh6OMt1Ww%3D%3D"; /* SAMLRequest field was moved in the middle, Signature to the beginning and all & were * changed to ; */ const char query2[] = "Signature=Zfz3DE1VMV3thaV4FWpH0fkWsBMzAFJcfvVWAbo0a3cY48Et%2BXUcbr1nvOJUJmhGoie0pQ4%2BcD9ToQlSk7BbJSBCct%2FQQgn2QNkX%2F1lk4v8RU8p5ptJRJ2iPLb8nC6WZhs81HoihQePSuj7Qe5bRUsDKvnWMq6OkD%2Fe6YO77dMXregTcfmnkrXqRb2T6TFfqyOz9i0%2FjmISsmj%2F3kEEfUzVA4LEbeEgiJDj1hec4XW26gQTih53v0sYukq4Eyb4zS2jVd3apUUxUrjn1NUpr7Z7dZ7w5MQlgZ8aw1xFDE8BkxymvIjwf8ciyx6sfTKbCRsoS9E0pQB1vxvh6OMt1Ww%3D%3D;SAMLRequest=fVHJasMwEP0Vo3tqRXY2YRvcOIFAl9CUHnopwpkkAllyNeMuf1%2FZaSG95PrmLfNmMlSNaWXZ0ck%2BwXsHSNFXYyzKYZCzzlvpFGqUVjWAkmq5K%2B%2FvpLjhsvWOXO0Mu5BcVyhE8KSdZdGmytnbNEmTBV%2Bli9ulKMt5KlbVfDkbizWfcVEmUxa9gMfAz1mQBxFiBxuLpCwFiIvxiE9H48mz4FJMZJq8sqgKHbRVNKhORK2MY71vJzFqezSw00f7GPLXztcw9M7ZQRmE3n0bFtQf8IcUWV9JDqm%2B%2BPXCYNUAqb0ilcWXhOx8zIdQe1NtndH1dx%2FTKLp%2BlR7R%2B9FhoMq2b4wEllhUGuM%2Blx4UhZ3Id8Di4pz5%2F2fFDw%3D%3D;RelayState=fake;SigAlg=http%3A%2F%2Fwww.w3.org%2F2001%2F04%2Fxmldsig-more%23rsa-sha256"; const char query3[] = "SAMLRequest=fVHJasMwEP0Vo3tqRXY2YRvcOIFAl9CUHnopwpkkAllyNeMuf1%2FZaSG95PrmLfNmMlSNaWXZ0ck%2BwXsHSNFXYyzKYZCzzlvpFGqUVjWAkmq5K%2B%2FvpLjhsvWOXO0Mu5BcVyhE8KSdZdGmytnbNEmTBV%2Bli9ulKMt5KlbVfDkbizWfcVEmUxa9gMfAz1mQBxFiBxuLpCwFiIvxiE9H48mz4FJMZJq8sqgKHbRVNKhORK2MY71vJzFqezSw00f7GPLXztcw9M7ZQRmE3n0bFtQf8IcUWV9JDqm%2B%2BPXCYNUAqb0ilcWXhOx8zIdQe1NtndH1dx%2FTKLp%2BlR7R%2B9FhoMq2b4wEllhUGuM%2Blx4UhZ3Id8Di4pz5%2F2fFDw%3D%3D&RelayState=fake&SigAlg=http%3A%2F%2Fwww.w3.org%2F2001%2F04%2Fxmldsig-more%23rsa-sha256&Signature=rUJ%2B9wVSvdGSmZWGuGXgudAPV5KBxRfxRKraBWGIslBz2XreyNbQjSA47DhIfi%2Bxf0awIIGkKcieN3Qd5sqVn4wvFU8fsmfqrdtouYi46aKsj4W91N19TxJ%2BCgrP7ygVEGDaGdc%2BrCQC3%2FuoYTELXq0gYP7tHaXA%2FCaZHfx5Z159crpRxS6eabZ6BGf4ImxiKhE1FuYzKHeISEV1iSyvgx5%2FE8ydSO%2FSP6yA5Rck4JxVJWH6ImbswCVQ80qfqR4NoJ%2BxiZqilbDJnQaSKZggx%2FgjNVoX%2FMVW1FqEmgJNcZpSjNUQqy9u4veSllpxPc2aB%2FpiUjzpbq9XzyFDOQfkUQ%3D%3D"; /* sp5-saml2 key */ const char pkey[] = "-----BEGIN CERTIFICATE-----\n\ MIIDnjCCAoagAwIBAgIBATANBgkqhkiG9w0BAQUFADBUMQswCQYDVQQGEwJGUjEP\n\ MA0GA1UECBMGRnJhbmNlMQ4wDAYDVQQHEwVQYXJpczETMBEGA1UEChMKRW50cm91\n\ dmVydDEPMA0GA1UEAxMGRGFtaWVuMB4XDTA2MTAyNzA5MDc1NFoXDTExMTAyNjA5\n\ MDc1NFowVDELMAkGA1UEBhMCRlIxDzANBgNVBAgTBkZyYW5jZTEOMAwGA1UEBxMF\n\ UGFyaXMxEzARBgNVBAoTCkVudHJvdXZlcnQxDzANBgNVBAMTBkRhbWllbjCCASIw\n\ DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM06Hx6VgHYR9wUf/tZVVTRkVWNq\n\ h9x+PvHA2qH4OYMuqGs4Af6lU2YsZvnrmRdcFWv0+UkdAgXhReCWAZgtB1pd/W9m\n\ 6qDRldCCyysow6xPPKRz/pOTwRXm/fM0QGPeXzwzj34BXOIOuFu+n764vKn18d+u\n\ uVAEzk1576pxTp4pQPzJfdNLrLeQ8vyCshoFU+MYJtp1UA+h2JoO0Y8oGvywbUxH\n\ ioHN5PvnzObfAM4XaDQohmfxM9Uc7Wp4xKAc1nUq5hwBrHpjFMRSz6UCfMoJSGIi\n\ +3xJMkNCjL0XEw5NKVc5jRKkzSkN5j8KTM/k1jPPsDHPRYzbWWhnNtd6JlkCAwEA\n\ AaN7MHkwCQYDVR0TBAIwADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0\n\ ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFP2WWMDShux3iF74+SoO1xf6qhqaMB8G\n\ A1UdIwQYMBaAFGjl6TRXbQDHzSlZu+e8VeBaZMB5MA0GCSqGSIb3DQEBBQUAA4IB\n\ AQAZ/imK7UMognXbs5RfSB8cMW6iNAI+JZqe9XWjvtmLfIIPbHM96o953SiFvrvQ\n\ BZjGmmPMK3UH29cjzDx1R/RQaYTyMrHyTePLh3BMd5mpJ/9eeJCSxPzE2ECqWRUa\n\ pkjukecFXqmRItwgTxSIUE9QkpzvuQRb268PwmgroE0mwtiREADnvTFkLkdiEMew\n\ fiYxZfJJLPBqwlkw/7f1SyzXoPXnz5QbNwDmrHelga6rKSprYKb3pueqaIe8j/AP\n\ NC1/bzp8cGOcJ88BD5+Ny6qgPVCrMLE5twQumJ12V3SvjGNtzFBvg2c/9S5OmVqR\n\ LlTxKnCrWAXftSm1rNtewTsF\n\ -----END CERTIFICATE-----"; xmlSecKeyPtr key = lasso_xmlsec_load_private_key_from_buffer(pkey, sizeof(pkey)-1, NULL, LASSO_SIGNATURE_METHOD_RSA_SHA256, NULL); ck_assert_msg(key != NULL, "Cannot load public key"); ck_assert_msg(lasso_saml2_query_verify_signature(query1, key) == 0, "Signature was not validated"); /* test reordering and semi-colon separator support */ ck_assert_msg(lasso_saml2_query_verify_signature(query2, key) == 0, "Disordered signature was not validated"); ck_assert_msg(lasso_saml2_query_verify_signature(query3, key) != 0, "Altered signature was validated"); xmlSecKeyDestroy(key); } END_TEST START_TEST(test08_lasso_key) { /* normal query as produces by Lasso */ const char query1[] = "SAMLRequest=fVHJasMwEP0Vo3tqRXY2YRvcOIFAl9CUHnopwpkkAllyNeMuf1%2FZaSG95PrmLfNmMlSNaWXZ0ck%2BwXsHSNFXYyzKYZCzzlvpFGqUVjWAkmq5K%2B%2FvpLjhsvWOXO0Mu5BcVyhE8KSdZdGmytnbNEmTBV%2Bli9ulKMt5KlbVfDkbizWfcVEmUxa9gMfAz1mQBxFiBxuLpCwFiIvxiE9H48mz4FJMZJq8sqgKHbRVNKhORK2MY71vJzFqezSw00f7GPLXztcw9M7ZQRmE3n0bFtQf8IcUWV9JDqm%2B%2BPXCYNUAqb0ilcWXhOx8zIdQe1NtndH1dx%2FTKLp%2BlR7R%2B9FhoMq2b4wEllhUGuM%2Blx4UhZ3Id8Di4pz5%2F2fFDw%3D%3D&RelayState=fake&SigAlg=http%3A%2F%2Fwww.w3.org%2F2001%2F04%2Fxmldsig-more%23rsa-sha256&Signature=Zfz3DE1VMV3thaV4FWpH0fkWsBMzAFJcfvVWAbo0a3cY48Et%2BXUcbr1nvOJUJmhGoie0pQ4%2BcD9ToQlSk7BbJSBCct%2FQQgn2QNkX%2F1lk4v8RU8p5ptJRJ2iPLb8nC6WZhs81HoihQePSuj7Qe5bRUsDKvnWMq6OkD%2Fe6YO77dMXregTcfmnkrXqRb2T6TFfqyOz9i0%2FjmISsmj%2F3kEEfUzVA4LEbeEgiJDj1hec4XW26gQTih53v0sYukq4Eyb4zS2jVd3apUUxUrjn1NUpr7Z7dZ7w5MQlgZ8aw1xFDE8BkxymvIjwf8ciyx6sfTKbCRsoS9E0pQB1vxvh6OMt1Ww%3D%3D"; /* SAMLRequest field was moved in the middle, Signature to the beginning and all & were * changed to ; */ const char query2[] = "Signature=Zfz3DE1VMV3thaV4FWpH0fkWsBMzAFJcfvVWAbo0a3cY48Et%2BXUcbr1nvOJUJmhGoie0pQ4%2BcD9ToQlSk7BbJSBCct%2FQQgn2QNkX%2F1lk4v8RU8p5ptJRJ2iPLb8nC6WZhs81HoihQePSuj7Qe5bRUsDKvnWMq6OkD%2Fe6YO77dMXregTcfmnkrXqRb2T6TFfqyOz9i0%2FjmISsmj%2F3kEEfUzVA4LEbeEgiJDj1hec4XW26gQTih53v0sYukq4Eyb4zS2jVd3apUUxUrjn1NUpr7Z7dZ7w5MQlgZ8aw1xFDE8BkxymvIjwf8ciyx6sfTKbCRsoS9E0pQB1vxvh6OMt1Ww%3D%3D;SAMLRequest=fVHJasMwEP0Vo3tqRXY2YRvcOIFAl9CUHnopwpkkAllyNeMuf1%2FZaSG95PrmLfNmMlSNaWXZ0ck%2BwXsHSNFXYyzKYZCzzlvpFGqUVjWAkmq5K%2B%2FvpLjhsvWOXO0Mu5BcVyhE8KSdZdGmytnbNEmTBV%2Bli9ulKMt5KlbVfDkbizWfcVEmUxa9gMfAz1mQBxFiBxuLpCwFiIvxiE9H48mz4FJMZJq8sqgKHbRVNKhORK2MY71vJzFqezSw00f7GPLXztcw9M7ZQRmE3n0bFtQf8IcUWV9JDqm%2B%2BPXCYNUAqb0ilcWXhOx8zIdQe1NtndH1dx%2FTKLp%2BlR7R%2B9FhoMq2b4wEllhUGuM%2Blx4UhZ3Id8Di4pz5%2F2fFDw%3D%3D;RelayState=fake;SigAlg=http%3A%2F%2Fwww.w3.org%2F2001%2F04%2Fxmldsig-more%23rsa-sha256"; const char query3[] = "SAMLRequest=fVHJasMwEP0Vo3tqRXY2YRvcOIFAl9CUHnopwpkkAllyNeMuf1%2FZaSG95PrmLfNmMlSNaWXZ0ck%2BwXsHSNFXYyzKYZCzzlvpFGqUVjWAkmq5K%2B%2FvpLjhsvWOXO0Mu5BcVyhE8KSdZdGmytnbNEmTBV%2Bli9ulKMt5KlbVfDkbizWfcVEmUxa9gMfAz1mQBxFiBxuLpCwFiIvxiE9H48mz4FJMZJq8sqgKHbRVNKhORK2MY71vJzFqezSw00f7GPLXztcw9M7ZQRmE3n0bFtQf8IcUWV9JDqm%2B%2BPXCYNUAqb0ilcWXhOx8zIdQe1NtndH1dx%2FTKLp%2BlR7R%2B9FhoMq2b4wEllhUGuM%2Blx4UhZ3Id8Di4pz5%2F2fFDw%3D%3D&RelayState=fake&SigAlg=http%3A%2F%2Fwww.w3.org%2F2001%2F04%2Fxmldsig-more%23rsa-sha256&Signature=rUJ%2B9wVSvdGSmZWGuGXgudAPV5KBxRfxRKraBWGIslBz2XreyNbQjSA47DhIfi%2Bxf0awIIGkKcieN3Qd5sqVn4wvFU8fsmfqrdtouYi46aKsj4W91N19TxJ%2BCgrP7ygVEGDaGdc%2BrCQC3%2FuoYTELXq0gYP7tHaXA%2FCaZHfx5Z159crpRxS6eabZ6BGf4ImxiKhE1FuYzKHeISEV1iSyvgx5%2FE8ydSO%2FSP6yA5Rck4JxVJWH6ImbswCVQ80qfqR4NoJ%2BxiZqilbDJnQaSKZggx%2FgjNVoX%2FMVW1FqEmgJNcZpSjNUQqy9u4veSllpxPc2aB%2FpiUjzpbq9XzyFDOQfkUQ%3D%3D"; /* sp5-saml2 key */ const char pkey[] = "-----BEGIN CERTIFICATE-----\n\ MIIDnjCCAoagAwIBAgIBATANBgkqhkiG9w0BAQUFADBUMQswCQYDVQQGEwJGUjEP\n\ MA0GA1UECBMGRnJhbmNlMQ4wDAYDVQQHEwVQYXJpczETMBEGA1UEChMKRW50cm91\n\ dmVydDEPMA0GA1UEAxMGRGFtaWVuMB4XDTA2MTAyNzA5MDc1NFoXDTExMTAyNjA5\n\ MDc1NFowVDELMAkGA1UEBhMCRlIxDzANBgNVBAgTBkZyYW5jZTEOMAwGA1UEBxMF\n\ UGFyaXMxEzARBgNVBAoTCkVudHJvdXZlcnQxDzANBgNVBAMTBkRhbWllbjCCASIw\n\ DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM06Hx6VgHYR9wUf/tZVVTRkVWNq\n\ h9x+PvHA2qH4OYMuqGs4Af6lU2YsZvnrmRdcFWv0+UkdAgXhReCWAZgtB1pd/W9m\n\ 6qDRldCCyysow6xPPKRz/pOTwRXm/fM0QGPeXzwzj34BXOIOuFu+n764vKn18d+u\n\ uVAEzk1576pxTp4pQPzJfdNLrLeQ8vyCshoFU+MYJtp1UA+h2JoO0Y8oGvywbUxH\n\ ioHN5PvnzObfAM4XaDQohmfxM9Uc7Wp4xKAc1nUq5hwBrHpjFMRSz6UCfMoJSGIi\n\ +3xJMkNCjL0XEw5NKVc5jRKkzSkN5j8KTM/k1jPPsDHPRYzbWWhnNtd6JlkCAwEA\n\ AaN7MHkwCQYDVR0TBAIwADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0\n\ ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFP2WWMDShux3iF74+SoO1xf6qhqaMB8G\n\ A1UdIwQYMBaAFGjl6TRXbQDHzSlZu+e8VeBaZMB5MA0GCSqGSIb3DQEBBQUAA4IB\n\ AQAZ/imK7UMognXbs5RfSB8cMW6iNAI+JZqe9XWjvtmLfIIPbHM96o953SiFvrvQ\n\ BZjGmmPMK3UH29cjzDx1R/RQaYTyMrHyTePLh3BMd5mpJ/9eeJCSxPzE2ECqWRUa\n\ pkjukecFXqmRItwgTxSIUE9QkpzvuQRb268PwmgroE0mwtiREADnvTFkLkdiEMew\n\ fiYxZfJJLPBqwlkw/7f1SyzXoPXnz5QbNwDmrHelga6rKSprYKb3pueqaIe8j/AP\n\ NC1/bzp8cGOcJ88BD5+Ny6qgPVCrMLE5twQumJ12V3SvjGNtzFBvg2c/9S5OmVqR\n\ LlTxKnCrWAXftSm1rNtewTsF\n\ -----END CERTIFICATE-----"; LassoKey *key = lasso_key_new_for_signature_from_memory(pkey, strlen(pkey), NULL, LASSO_SIGNATURE_METHOD_RSA_SHA256, NULL); LassoKey *key2 = lasso_key_new_for_signature_from_file( TESTSDATADIR "/sp5-saml2/private-key.pem", NULL, LASSO_SIGNATURE_METHOD_RSA_SHA256, NULL); char *message = "http://sp5/metadata\n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ 1Xy/VevGqojdKIvLzkczdd9Mp3AFYvZfsakldADTuO4=\n\ \n\ \n\ R5unK5JQ8no8VCokUKKw8zXglIsjggH16cQxnqKl2GpFeeFh8Tzi4KRXTzVNXi9c\n\ dID0FTAsFM2Ol5Sqg/j2TVasR93PyIg2pUOb00tNwx8D81xEi1lXdWThHfiinYI0\n\ 2qJSFj1H8wt/ceULmnvC0F01ga78LQervkjMaSpqlvyKYrNNOEJEYo0SJSUnUE5p\n\ wlv30BjnUCyXWQl9i03MvpPSOTJkXrFLqbJB8rB/HNdS71lWAU3k8r56OAxzTXUn\n\ WXr73mrQrLGJzbofDjO1Lfz8JpZXRzsffAsMCxKfoL+VzrElPNW5aklrFm603w2w\n\ 6/xQk0BsHvPP8k6V32RuXQ==\n\ \n\ \n\ \n\ \n\ zTofHpWAdhH3BR/+1lVVNGRVY2qH3H4+8cDaofg5gy6oazgB/qVTZixm+euZF1wV\n\ a/T5SR0CBeFF4JYBmC0HWl39b2bqoNGV0ILLKyjDrE88pHP+k5PBFeb98zRAY95f\n\ PDOPfgFc4g64W76fvri8qfXx3665UATOTXnvqnFOnilA/Ml900ust5Dy/IKyGgVT\n\ 4xgm2nVQD6HYmg7Rjyga/LBtTEeKgc3k++fM5t8AzhdoNCiGZ/Ez1RztanjEoBzW\n\ dSrmHAGsemMUxFLPpQJ8yglIYiL7fEkyQ0KMvRcTDk0pVzmNEqTNKQ3mPwpMz+TW\n\ M8+wMc9FjNtZaGc213omWQ==\n\ \n\ \n\ AQAB\n\ \n\ \n\ \n\ \n\ AAQAALQUO+cobSry7mQpUjWDhKkaePFoNDRBMDY3RDY3QjNFM0QzQzA1NzQ="; xmlDoc *doc; doc = xmlParseDoc(BAD_CAST message); ck_assert_msg(key != NULL, "Cannot load public key"); ck_assert_msg(lasso_key_query_verify(key, query1) == 0, "Signature was not validated"); /* test reordering and semi-colon separator support */ ck_assert_msg(lasso_key_query_verify(key, query2) == 0, "Disordered signature was not validated"); ck_assert_msg(lasso_key_query_verify(key, query3) != 0, "Altered signature was validated"); ck_assert_msg(lasso_key_saml2_xml_verify(key, "_5E4DB038BC15C020CE085F743D485443", xmlDocGetRootElement(doc)) == 0, "XML Signature is not validated"); g_object_unref(key); ck_assert_msg(key2 != NULL, "Cannot load public key2"); ck_assert_msg(lasso_key_query_verify(key2, query1) == 0, "Signature was not validated"); /* test reordering and semi-colon separator support */ ck_assert_msg(lasso_key_query_verify(key2, query2) == 0, "Disordered signature was not validated"); ck_assert_msg(lasso_key_query_verify(key2, query3) != 0, "Altered signature was validated"); ck_assert_msg(lasso_key_saml2_xml_verify(key2, "_5E4DB038BC15C020CE085F743D485443", xmlDocGetRootElement(doc)) == 0, "XML Signature is not validated"); g_object_unref(key2); lasso_release_doc(doc); } END_TEST Suite* random_suite() { Suite *s = suite_create("Random tests"); TCase *tc_providers = tcase_create("Provider stuffs"); TCase *tc_servers = tcase_create("Server stuffs"); TCase *tc_node = tcase_create("Node stuff"); TCase *tc_keys = tcase_create("Lasso keys"); suite_add_tcase(s, tc_providers); tcase_add_test(tc_providers, test01_provider_new); tcase_add_test(tc_providers, test02_provider_new_from_dump); suite_add_tcase(s, tc_servers); tcase_add_test(tc_servers, test01_server_new); tcase_add_test(tc_servers, test02_server_add_provider); tcase_add_test(tc_servers, test03_server_new_from_dump); suite_add_tcase(s, tc_node); tcase_add_test(tc_node, test04_node_new_from_dump); tcase_add_test(tc_node, test05_xsi_type); tcase_add_test(tc_node, test06_lib_statuscode); tcase_add_test(tc_node, test07_saml2_query_verify_signature); suite_add_tcase(s, tc_keys); tcase_add_test(tc_keys, test08_lasso_key); return s; } lasso-2.8.2/tests/PaxHeaders/Makefile.am0000644000000000000000000000013214364261206015124 xustar0030 mtime=1674666630.770769266 30 atime=1678814114.988793051 30 ctime=1678814321.189954334 lasso-2.8.2/tests/Makefile.am0000644000175000017500000000353514364261206020402 0ustar00bdauvergnebdauvergne00000000000000MAINTAINERCLEANFILES = Makefile.in if WITH_TESTS TESTS = tests tests2 TESTS_ENVIRONMENT = \ SSL_CERT_FILE=/tmp/coin noinst_PROGRAMS = tests perfs tests2 AM_CPPFLAGS = \ -DPACKAGE=\"@PACKAGE@\" \ -DTESTSDATADIR=\"$(srcdir)/data/\" \ -DTESTSMETADATADIR=\"$(srcdir)/data/metadata/\" \ $(LASSO_CFLAGS) \ $(CHECK_CFLAGS) -Werror -Wall tests_SOURCES = tests.c login_tests.c basic_tests.c non_regression_tests.c random_tests.c metadata_tests.c login_tests_saml2.c assertion_query_saml2.c tests_LDADD = \ $(top_builddir)/lasso/liblasso.la \ $(LASSO_LIBS) \ $(CHECK_LIBS) tests_LDFLAGS = -rpath `cd $(top_builddir)/lasso/.libs/; pwd` -static tests2_SOURCES = tests2.c tests2_LDADD = \ $(top_builddir)/lasso/liblasso.la \ $(LASSO_LIBS) \ $(CHECK_LIBS) tests2_LDFLAGS = -rpath `cd $(top_builddir)/lasso/.libs/; pwd` tests2_CFLAGS = $(AM_CFLAGS) -DSRCDIR=\"$(srcdir)\" perfs_SOURCES = perfs.c perfs_LDADD = $(top_builddir)/lasso/liblasso.la $(LASSO_LIBS) perfs_LDFLAGS = -rpath `cd $(top_builddir)/lasso/.libs/; pwd` .PHONY: valgrind LEAKCHECK = G_DEBUG=gc-friendly MALLOC_CHECK_=2 G_SLICE=always-malloc CK_FORK=no \ valgrind --leak-check=full --log-file=valgrind.log \ --suppressions=$(top_srcdir)/tests/valgrind/glib.supp \ --suppressions=$(top_srcdir)/tests/valgrind/openssl.supp \ --suppressions=$(top_srcdir)/tests/valgrind/lasso.supp \ --num-callers=50 LEAKCHECK_REACHABLE = $(LEAKCHECK) --show-reachable=yes LEAKCHECK_GENSUPPRESSIONS=$(LEAKCHECK) --gen-suppressions=all MASSIF = G_DEBUG=gc-friendly MALLOC_CHECK_=2 G_SLICE=always-malloc CK_FORK=no \ valgrind --tool=massif leakcheck: $(LEAKCHECK) ./tests leakcheck-reachable: $(LEAKCHECK_REACHABLE) ./tests leakcheck-gensuppressions: $(LEAKCHECK_GENSUPPRESSIONS) ./tests massif: $(MASSIF) ./tests endif EXTRA_DIST = valgrind tests.h $(tests_SOURCES) SUBDIRS = data CLEANFILES = result.xml lasso-2.8.2/tests/PaxHeaders/perfs.c0000644000000000000000000000013214114336625014354 xustar0030 mtime=1630649749.886437648 30 atime=1678814249.469547383 30 ctime=1678814321.193954357 lasso-2.8.2/tests/perfs.c0000644000175000017500000001467314114336625017637 0ustar00bdauvergnebdauvergne00000000000000/* * Lasso library performance tests * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include #include #include #include "../lasso/lasso.h" #include "../lasso/xml/saml-2.0/samlp2_response.h" #include "../lasso/xml/saml-2.0/samlp2_authn_request.h" #define IDP_METADATA TESTSDATADIR "/idp%s/metadata.xml" #define IDP_PKEY TESTSDATADIR "/idp%s/private-key.pem" #define SP_METADATA TESTSDATADIR "/sp%s/metadata.xml" #define SP_PKEY TESTSDATADIR "/sp%s/private-key.pem" char* create_authn_response_msg(char *query); #define check_good_rc(what) \ { \ int _rc = (what); \ if (_rc != 0) { \ printf("Error: %s: %s", #what, lasso_strerror(_rc)); \ exit(-1); \ } \ } void create_authn_request(LassoLogin *sp_login, G_GNUC_UNUSED LassoLogin *idp_login) { check_good_rc(lasso_login_init_authn_request(sp_login, NULL, LASSO_HTTP_METHOD_REDIRECT)); LASSO_SAMLP2_AUTHN_REQUEST(sp_login->parent.request)->ProtocolBinding = g_strdup(LASSO_SAML2_METADATA_BINDING_POST); check_good_rc(lasso_login_build_authn_request_msg(sp_login)); } void process_authn_request(LassoLogin *sp_login, LassoLogin *idp_login) { check_good_rc(lasso_login_process_authn_request_msg(idp_login, strchr(sp_login->parent.msg_url, '?')+1)); } void create_authn_response(G_GNUC_UNUSED LassoLogin *sp_login, LassoLogin *idp_login) { if (LASSO_SAMLP2_RESPONSE(idp_login->parent.response)->Assertion) { g_object_unref(LASSO_SAMLP2_RESPONSE(idp_login->parent.response)->Assertion->data); g_list_free(LASSO_SAMLP2_RESPONSE(idp_login->parent.response)->Assertion); LASSO_SAMLP2_RESPONSE(idp_login->parent.response)->Assertion = NULL; } check_good_rc(lasso_login_validate_request_msg(idp_login, 1, 0)); lasso_login_build_assertion(idp_login, LASSO_SAML_AUTHENTICATION_METHOD_PASSWORD, "FIXME: authenticationInstant", "FIXME: reauthenticateOnOrAfter", "FIXME: notBefore", "FIXME: notOnOrAfter"); #if 0 /* activate for simulating simple signature at the assertion level, request/response production should be at the same speed */ lasso_profile_set_signature_hint(&idp_login->parent, LASSO_PROFILE_SIGNATURE_HINT_FORBID); #endif check_good_rc(lasso_login_build_authn_response_msg(idp_login)); } void process_authn_response(LassoLogin *sp_login, LassoLogin *idp_login) { #if 0 lasso_profile_set_signature_verify_hint(&sp_login->parent, LASSO_PROFILE_SIGNATURE_VERIFY_HINT_FORCE); #endif check_good_rc(lasso_login_process_authn_response_msg(sp_login, idp_login->parent.msg_body)); if (sp_login->parent.session) { g_object_unref(sp_login->parent.session); sp_login->parent.session = NULL; } check_good_rc(lasso_login_accept_sso(sp_login)); } void timing(int n, char *text, void (*f)(LassoLogin *sp_login, LassoLogin *idp_login), LassoLogin *sp_login, LassoLogin *idp_login) { int i; struct timeval start, end; int usec; fprintf(stdout, text, n); gettimeofday(&start, NULL); for (i = 0; i < n; i++) { f(sp_login, idp_login); } gettimeofday(&end, NULL); usec = (end.tv_sec*1000000+end.tv_usec)-(start.tv_sec*1000000+start.tv_usec); fprintf(stdout, " total: %.4f seconds (%f request/second) (%.2f ms/request)\n", (double)usec/1000000, (double)n/usec*1000000, (double)usec/1000/n); } int main(int argc, char *argv[]) { LassoServer *sp_server, *idp_server; LassoLogin *sp_login, *idp_login; int n = 100; char sp_metadata[100], sp_pkey[100], idp_metadata[100], idp_pkey[100]; char *index = "5-saml2"; GList *providers; LassoKey *key; LassoProvider *provider; gboolean use_shared_secret = FALSE; int opt = 0; while ((opt = getopt(argc, argv, "hn:s:")) != -1) { switch (opt) { case 'h': use_shared_secret = TRUE; break; case 'n': n = atoi(optarg); break; case 's': index = optarg; break; } } printf("Looping %d times, %susing metadata %s\n", n, use_shared_secret ? "with shared secret key, " : "", index); sprintf(sp_metadata, SP_METADATA, index); sprintf(sp_pkey, SP_PKEY, index); sprintf(idp_metadata, IDP_METADATA, index); sprintf(idp_pkey, IDP_PKEY, index); lasso_init(); sp_server = lasso_server_new( sp_metadata, sp_pkey, NULL, /* Secret key to unlock private key */ NULL); lasso_server_add_provider( sp_server, LASSO_PROVIDER_ROLE_IDP, idp_metadata, idp_pkey, NULL); if (use_shared_secret) { key = lasso_key_new_for_signature_from_memory("xxxxxxxxxxxxxxxx", 16, NULL, LASSO_SIGNATURE_METHOD_HMAC_SHA1, NULL); providers = g_hash_table_get_values(sp_server->providers); provider = LASSO_PROVIDER(providers->data); lasso_provider_set_server_signing_key(provider, key); lasso_provider_add_key(provider, key, FALSE); g_list_free(providers); } idp_server = lasso_server_new( idp_metadata, idp_pkey, NULL, /* Secret key to unlock private key */ NULL); lasso_server_add_provider( idp_server, LASSO_PROVIDER_ROLE_SP, sp_metadata, sp_pkey, NULL); if (use_shared_secret) { providers = g_hash_table_get_values(idp_server->providers); provider = LASSO_PROVIDER(providers->data); lasso_provider_set_server_signing_key(provider, key); lasso_provider_add_key(provider, key, FALSE); g_list_free(providers); } sp_login = lasso_login_new(sp_server); idp_login = lasso_login_new(idp_server); timing(n, "Generating %d AuthnRequest...\n", create_authn_request, sp_login, idp_login); #if 0 printf("%s\n", lasso_node_export_to_xml(sp_login->parent.request)); #endif timing(n, "Processing %d AuthnRequest...\n", process_authn_request, sp_login, idp_login); timing(n, "Generating %d AuthnResponse...\n", create_authn_response, sp_login, idp_login); #if 0 printf("%s\n", lasso_node_export_to_xml(idp_login->parent.response)); #endif timing(n, "Processing %d AuthnResponse...\n", process_authn_response, sp_login, idp_login); return 0; } lasso-2.8.2/tests/PaxHeaders/Makefile.in0000644000000000000000000000013214404125674015140 xustar0030 mtime=1678814140.036932575 30 atime=1678814149.972988056 30 ctime=1678814321.189954334 lasso-2.8.2/tests/Makefile.in0000644000175000017500000013620714404125674020421 0ustar00bdauvergnebdauvergne00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ @WITH_TESTS_TRUE@TESTS = tests$(EXEEXT) tests2$(EXEEXT) @WITH_TESTS_TRUE@noinst_PROGRAMS = tests$(EXEEXT) perfs$(EXEEXT) \ @WITH_TESTS_TRUE@ tests2$(EXEEXT) subdir = tests ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ac_check_class.m4 \ $(top_srcdir)/m4/ac_check_classpath.m4 \ $(top_srcdir)/m4/ac_check_junit.m4 \ $(top_srcdir)/m4/ac_prog_jar.m4 \ $(top_srcdir)/m4/ac_prog_java.m4 \ $(top_srcdir)/m4/ac_prog_java_works.m4 \ $(top_srcdir)/m4/ac_prog_javac.m4 \ $(top_srcdir)/m4/ac_prog_javac_works.m4 \ $(top_srcdir)/m4/ac_prog_javah.m4 \ $(top_srcdir)/m4/ac_try_compile_java.m4 \ $(top_srcdir)/m4/as-compiler-flag.m4 \ $(top_srcdir)/m4/dps_java_check_class.m4 \ $(top_srcdir)/m4/dps_xtra_classpath.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h \ $(top_builddir)/lasso/lasso_config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am__perfs_SOURCES_DIST = perfs.c @WITH_TESTS_TRUE@am_perfs_OBJECTS = perfs.$(OBJEXT) perfs_OBJECTS = $(am_perfs_OBJECTS) am__DEPENDENCIES_1 = @WITH_TESTS_TRUE@perfs_DEPENDENCIES = \ @WITH_TESTS_TRUE@ $(top_builddir)/lasso/liblasso.la \ @WITH_TESTS_TRUE@ $(am__DEPENDENCIES_1) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = perfs_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(perfs_LDFLAGS) $(LDFLAGS) -o $@ am__tests_SOURCES_DIST = tests.c login_tests.c basic_tests.c \ non_regression_tests.c random_tests.c metadata_tests.c \ login_tests_saml2.c assertion_query_saml2.c @WITH_TESTS_TRUE@am_tests_OBJECTS = tests.$(OBJEXT) \ @WITH_TESTS_TRUE@ login_tests.$(OBJEXT) basic_tests.$(OBJEXT) \ @WITH_TESTS_TRUE@ non_regression_tests.$(OBJEXT) \ @WITH_TESTS_TRUE@ random_tests.$(OBJEXT) \ @WITH_TESTS_TRUE@ metadata_tests.$(OBJEXT) \ @WITH_TESTS_TRUE@ login_tests_saml2.$(OBJEXT) \ @WITH_TESTS_TRUE@ assertion_query_saml2.$(OBJEXT) tests_OBJECTS = $(am_tests_OBJECTS) @WITH_TESTS_TRUE@tests_DEPENDENCIES = \ @WITH_TESTS_TRUE@ $(top_builddir)/lasso/liblasso.la \ @WITH_TESTS_TRUE@ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) tests_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(tests_LDFLAGS) $(LDFLAGS) -o $@ am__tests2_SOURCES_DIST = tests2.c @WITH_TESTS_TRUE@am_tests2_OBJECTS = tests2-tests2.$(OBJEXT) tests2_OBJECTS = $(am_tests2_OBJECTS) @WITH_TESTS_TRUE@tests2_DEPENDENCIES = \ @WITH_TESTS_TRUE@ $(top_builddir)/lasso/liblasso.la \ @WITH_TESTS_TRUE@ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) tests2_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(tests2_CFLAGS) $(CFLAGS) \ $(tests2_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -I$(top_builddir)/lasso depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/assertion_query_saml2.Po \ ./$(DEPDIR)/basic_tests.Po ./$(DEPDIR)/login_tests.Po \ ./$(DEPDIR)/login_tests_saml2.Po ./$(DEPDIR)/metadata_tests.Po \ ./$(DEPDIR)/non_regression_tests.Po ./$(DEPDIR)/perfs.Po \ ./$(DEPDIR)/random_tests.Po ./$(DEPDIR)/tests.Po \ ./$(DEPDIR)/tests2-tests2.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(perfs_SOURCES) $(tests_SOURCES) $(tests2_SOURCES) DIST_SOURCES = $(am__perfs_SOURCES_DIST) $(am__tests_SOURCES_DIST) \ $(am__tests2_SOURCES_DIST) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ check recheck distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/test-driver DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CHECK_CFLAGS = @CHECK_CFLAGS@ CHECK_LIBS = @CHECK_LIBS@ CLASSPATH_JUNIT = @CLASSPATH_JUNIT@ CLASSPATH_OPT = @CLASSPATH_OPT@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CSHARPCILINTERPRETER = @CSHARPCILINTERPRETER@ CSHARPCOMPILER = @CSHARPCOMPILER@ CSHARPCYGPATH_W = @CSHARPCYGPATH_W@ CSHARPDYNAMICLINKING = @CSHARPDYNAMICLINKING@ CSHARPLIBRARYPREFIX = @CSHARPLIBRARYPREFIX@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEBUGGING = @DEBUGGING@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLL_FILENAME = @DLL_FILENAME@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GACUTIL = @GACUTIL@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HTML_DIR = @HTML_DIR@ INKSCAPE = @INKSCAPE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVAC_FLAGS = @JAVAC_FLAGS@ JAVAH = @JAVAH@ JAVAH_FLAGS = @JAVAH_FLAGS@ JAVA_INCLUDE = @JAVA_INCLUDE@ JAVA_JUNIT = @JAVA_JUNIT@ JAVA_VERSION = @JAVA_VERSION@ JDK_INCLUDE = @JDK_INCLUDE@ JNI_EXTRA_LDFLAGS = @JNI_EXTRA_LDFLAGS@ JUNIT = @JUNIT@ LASSO_APP_DEFINES = @LASSO_APP_DEFINES@ LASSO_CFLAGS = @LASSO_CFLAGS@ LASSO_CORE_CFLAGS = @LASSO_CORE_CFLAGS@ LASSO_CORE_LIBS = @LASSO_CORE_LIBS@ LASSO_DEFINES = @LASSO_DEFINES@ LASSO_DOCDIR = @LASSO_DOCDIR@ LASSO_LIBS = @LASSO_LIBS@ LASSO_PUB_CFLAGS = @LASSO_PUB_CFLAGS@ LASSO_STATIC_BINARIES = @LASSO_STATIC_BINARIES@ LASSO_VERSION_INFO = @LASSO_VERSION_INFO@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PERLINSTALLSITEARCH = @PERLINSTALLSITEARCH@ PERLMAN3DIR = @PERLMAN3DIR@ PERL_CFLAGS = @PERL_CFLAGS@ PERL_VERSION = @PERL_VERSION@ PHP5 = @PHP5@ PHP5_CONFIG = @PHP5_CONFIG@ PHP5_CONFIG_DIR = @PHP5_CONFIG_DIR@ PHP5_EXTENSION_DIR = @PHP5_EXTENSION_DIR@ PHP5_INCLUDES = @PHP5_INCLUDES@ PHP5_INCLUDE_DIR = @PHP5_INCLUDE_DIR@ PHP5_LDFLAGS = @PHP5_LDFLAGS@ PHP5_LIBS = @PHP5_LIBS@ PHP5_PREFIX = @PHP5_PREFIX@ PHP5_UNPREFIXED_EXTENSION_DIR = @PHP5_UNPREFIXED_EXTENSION_DIR@ PHP5_VERSION = @PHP5_VERSION@ PHP7 = @PHP7@ PHP7_CONFIG = @PHP7_CONFIG@ PHP7_CONFIG_DIR = @PHP7_CONFIG_DIR@ PHP7_EXTENSION_DIR = @PHP7_EXTENSION_DIR@ PHP7_INCLUDES = @PHP7_INCLUDES@ PHP7_INCLUDE_DIR = @PHP7_INCLUDE_DIR@ PHP7_LDFLAGS = @PHP7_LDFLAGS@ PHP7_LIBS = @PHP7_LIBS@ PHP7_PREFIX = @PHP7_PREFIX@ PHP7_UNPREFIXED_EXTENSION_DIR = @PHP7_UNPREFIXED_EXTENSION_DIR@ PHP7_VERSION = @PHP7_VERSION@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PYTHON = @PYTHON@ PYTHON_VERSION = @PYTHON_VERSION@ PY_CFLAGS = @PY_CFLAGS@ PY_DYNLOAD = @PY_DYNLOAD@ PY_EXTRA_LIBS = @PY_EXTRA_LIBS@ PY_LIB_A = @PY_LIB_A@ PY_LIB_LOC = @PY_LIB_LOC@ PY_SITE_PACKAGES = @PY_SITE_PACKAGES@ RANLIB = @RANLIB@ RC = @RC@ REST2HTML = @REST2HTML@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_VERSION = @SWIG_VERSION@ TAR = @TAR@ TESTS_JUNIT = @TESTS_JUNIT@ UPCASED_DLL_FILENAME = @UPCASED_DLL_FILENAME@ VERSION = @VERSION@ VERSION_UNDERSCORED = @VERSION_UNDERSCORED@ WINDOWS_VERSION = @WINDOWS_VERSION@ XSLTPROC = @XSLTPROC@ Z_CFLAGS = @Z_CFLAGS@ Z_LIBS = @Z_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ uudecode = @uudecode@ MAINTAINERCLEANFILES = Makefile.in @WITH_TESTS_TRUE@TESTS_ENVIRONMENT = \ @WITH_TESTS_TRUE@ SSL_CERT_FILE=/tmp/coin @WITH_TESTS_TRUE@AM_CPPFLAGS = \ @WITH_TESTS_TRUE@ -DPACKAGE=\"@PACKAGE@\" \ @WITH_TESTS_TRUE@ -DTESTSDATADIR=\"$(srcdir)/data/\" \ @WITH_TESTS_TRUE@ -DTESTSMETADATADIR=\"$(srcdir)/data/metadata/\" \ @WITH_TESTS_TRUE@ $(LASSO_CFLAGS) \ @WITH_TESTS_TRUE@ $(CHECK_CFLAGS) @WITH_TESTS_TRUE@tests_SOURCES = tests.c login_tests.c basic_tests.c non_regression_tests.c random_tests.c metadata_tests.c login_tests_saml2.c assertion_query_saml2.c @WITH_TESTS_TRUE@tests_LDADD = \ @WITH_TESTS_TRUE@ $(top_builddir)/lasso/liblasso.la \ @WITH_TESTS_TRUE@ $(LASSO_LIBS) \ @WITH_TESTS_TRUE@ $(CHECK_LIBS) @WITH_TESTS_TRUE@tests_LDFLAGS = -rpath `cd $(top_builddir)/lasso/.libs/; pwd` -static @WITH_TESTS_TRUE@tests2_SOURCES = tests2.c @WITH_TESTS_TRUE@tests2_LDADD = \ @WITH_TESTS_TRUE@ $(top_builddir)/lasso/liblasso.la \ @WITH_TESTS_TRUE@ $(LASSO_LIBS) \ @WITH_TESTS_TRUE@ $(CHECK_LIBS) @WITH_TESTS_TRUE@tests2_LDFLAGS = -rpath `cd $(top_builddir)/lasso/.libs/; pwd` @WITH_TESTS_TRUE@tests2_CFLAGS = $(AM_CFLAGS) -DSRCDIR=\"$(srcdir)\" @WITH_TESTS_TRUE@perfs_SOURCES = perfs.c @WITH_TESTS_TRUE@perfs_LDADD = $(top_builddir)/lasso/liblasso.la $(LASSO_LIBS) @WITH_TESTS_TRUE@perfs_LDFLAGS = -rpath `cd $(top_builddir)/lasso/.libs/; pwd` @WITH_TESTS_TRUE@LEAKCHECK = G_DEBUG=gc-friendly MALLOC_CHECK_=2 G_SLICE=always-malloc CK_FORK=no \ @WITH_TESTS_TRUE@ valgrind --leak-check=full --log-file=valgrind.log \ @WITH_TESTS_TRUE@ --suppressions=$(top_srcdir)/tests/valgrind/glib.supp \ @WITH_TESTS_TRUE@ --suppressions=$(top_srcdir)/tests/valgrind/openssl.supp \ @WITH_TESTS_TRUE@ --suppressions=$(top_srcdir)/tests/valgrind/lasso.supp \ @WITH_TESTS_TRUE@ --num-callers=50 @WITH_TESTS_TRUE@LEAKCHECK_REACHABLE = $(LEAKCHECK) --show-reachable=yes @WITH_TESTS_TRUE@LEAKCHECK_GENSUPPRESSIONS = $(LEAKCHECK) --gen-suppressions=all @WITH_TESTS_TRUE@MASSIF = G_DEBUG=gc-friendly MALLOC_CHECK_=2 G_SLICE=always-malloc CK_FORK=no \ @WITH_TESTS_TRUE@ valgrind --tool=massif EXTRA_DIST = valgrind tests.h $(tests_SOURCES) SUBDIRS = data CLEANFILES = result.xml all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign tests/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list perfs$(EXEEXT): $(perfs_OBJECTS) $(perfs_DEPENDENCIES) $(EXTRA_perfs_DEPENDENCIES) @rm -f perfs$(EXEEXT) $(AM_V_CCLD)$(perfs_LINK) $(perfs_OBJECTS) $(perfs_LDADD) $(LIBS) tests$(EXEEXT): $(tests_OBJECTS) $(tests_DEPENDENCIES) $(EXTRA_tests_DEPENDENCIES) @rm -f tests$(EXEEXT) $(AM_V_CCLD)$(tests_LINK) $(tests_OBJECTS) $(tests_LDADD) $(LIBS) tests2$(EXEEXT): $(tests2_OBJECTS) $(tests2_DEPENDENCIES) $(EXTRA_tests2_DEPENDENCIES) @rm -f tests2$(EXEEXT) $(AM_V_CCLD)$(tests2_LINK) $(tests2_OBJECTS) $(tests2_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/assertion_query_saml2.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/basic_tests.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/login_tests.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/login_tests_saml2.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/metadata_tests.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/non_regression_tests.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/perfs.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/random_tests.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tests.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tests2-tests2.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< tests2-tests2.o: tests2.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tests2_CFLAGS) $(CFLAGS) -MT tests2-tests2.o -MD -MP -MF $(DEPDIR)/tests2-tests2.Tpo -c -o tests2-tests2.o `test -f 'tests2.c' || echo '$(srcdir)/'`tests2.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tests2-tests2.Tpo $(DEPDIR)/tests2-tests2.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests2.c' object='tests2-tests2.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tests2_CFLAGS) $(CFLAGS) -c -o tests2-tests2.o `test -f 'tests2.c' || echo '$(srcdir)/'`tests2.c tests2-tests2.obj: tests2.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tests2_CFLAGS) $(CFLAGS) -MT tests2-tests2.obj -MD -MP -MF $(DEPDIR)/tests2-tests2.Tpo -c -o tests2-tests2.obj `if test -f 'tests2.c'; then $(CYGPATH_W) 'tests2.c'; else $(CYGPATH_W) '$(srcdir)/tests2.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tests2-tests2.Tpo $(DEPDIR)/tests2-tests2.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests2.c' object='tests2-tests2.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tests2_CFLAGS) $(CFLAGS) -c -o tests2-tests2.obj `if test -f 'tests2.c'; then $(CYGPATH_W) 'tests2.c'; else $(CYGPATH_W) '$(srcdir)/tests2.c'; fi` mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? tests.log: tests$(EXEEXT) @p='tests$(EXEEXT)'; \ b='tests'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) tests2.log: tests2$(EXEEXT) @p='tests2$(EXEEXT)'; \ b='tests2'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-recursive all-am: Makefile $(PROGRAMS) installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-recursive -rm -f ./$(DEPDIR)/assertion_query_saml2.Po -rm -f ./$(DEPDIR)/basic_tests.Po -rm -f ./$(DEPDIR)/login_tests.Po -rm -f ./$(DEPDIR)/login_tests_saml2.Po -rm -f ./$(DEPDIR)/metadata_tests.Po -rm -f ./$(DEPDIR)/non_regression_tests.Po -rm -f ./$(DEPDIR)/perfs.Po -rm -f ./$(DEPDIR)/random_tests.Po -rm -f ./$(DEPDIR)/tests.Po -rm -f ./$(DEPDIR)/tests2-tests2.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/assertion_query_saml2.Po -rm -f ./$(DEPDIR)/basic_tests.Po -rm -f ./$(DEPDIR)/login_tests.Po -rm -f ./$(DEPDIR)/login_tests_saml2.Po -rm -f ./$(DEPDIR)/metadata_tests.Po -rm -f ./$(DEPDIR)/non_regression_tests.Po -rm -f ./$(DEPDIR)/perfs.Po -rm -f ./$(DEPDIR)/random_tests.Po -rm -f ./$(DEPDIR)/tests.Po -rm -f ./$(DEPDIR)/tests2-tests2.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) check-am install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--depfiles check check-TESTS check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am .PRECIOUS: Makefile @WITH_TESTS_TRUE@ -Werror -Wall @WITH_TESTS_TRUE@.PHONY: valgrind @WITH_TESTS_TRUE@leakcheck: @WITH_TESTS_TRUE@ $(LEAKCHECK) ./tests @WITH_TESTS_TRUE@leakcheck-reachable: @WITH_TESTS_TRUE@ $(LEAKCHECK_REACHABLE) ./tests @WITH_TESTS_TRUE@leakcheck-gensuppressions: @WITH_TESTS_TRUE@ $(LEAKCHECK_GENSUPPRESSIONS) ./tests @WITH_TESTS_TRUE@massif: @WITH_TESTS_TRUE@ $(MASSIF) ./tests # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lasso-2.8.2/tests/PaxHeaders/metadata_tests.c0000644000000000000000000000013214364261206016236 xustar0030 mtime=1674666630.778769315 30 atime=1678814247.589536755 30 ctime=1678814321.205954425 lasso-2.8.2/tests/metadata_tests.c0000644000175000017500000001527414364261206021517 0ustar00bdauvergnebdauvergne00000000000000/* * Lasso library C unit tests * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include #include #include #include "../lasso/lasso.h" #include "../lasso/id-ff/provider.h" #include "../lasso/utils.h" #include "tests.h" #include "../lasso/xml/saml-2.0/saml2_xsd.h" void setup_lasso_flag_pem_public_key() { lasso_flag_pem_public_key = TRUE; } void teardown_lasso_flag_pem_public_key() { lasso_flag_pem_public_key = FALSE; } START_TEST(test01_metadata_load_der_certificate_from_x509_cert) { LassoProvider *provider = lasso_provider_new(LASSO_PROVIDER_ROLE_SP, TESTSMETADATADIR "/metadata_01.xml", NULL, NULL); ck_assert_msg(provider != NULL, "Can't load DER certificate from "); g_object_unref(provider); } END_TEST START_TEST(test02_metadata_load_pem_certificate_from_x509_cert) { LassoProvider *provider = lasso_provider_new(LASSO_PROVIDER_ROLE_SP, TESTSMETADATADIR "/metadata_02.xml", NULL, NULL); ck_assert_msg(provider != NULL, "Can't load PEM certificate from "); g_object_unref(provider); } END_TEST START_TEST(test03_metadata_load_der_public_key_from_keyvalue) { LassoProvider *provider = lasso_provider_new(LASSO_PROVIDER_ROLE_SP, TESTSMETADATADIR "/metadata_03.xml", NULL, NULL); ck_assert_msg(provider != NULL, "Can't load DER public key from "); g_object_unref(provider); } END_TEST START_TEST(test04_metadata_load_pem_public_key_from_keyvalue) { LassoProvider *provider = lasso_provider_new(LASSO_PROVIDER_ROLE_SP, TESTSMETADATADIR "/metadata_04.xml", NULL, NULL); ck_assert_msg(provider != NULL, "Can't load PEM public key from "); g_object_unref(provider); } END_TEST START_TEST(test05_metadata_load_public_key_from_x509_cert) { LassoProvider *provider = lasso_provider_new(LASSO_PROVIDER_ROLE_SP, TESTSMETADATADIR "/metadata_05.xml", NULL, NULL); ck_assert_msg(provider != NULL, "Can't load DER public key from "); g_object_unref(provider); } END_TEST START_TEST(test06_metadata_load_public_key_from_rsa_keyvalue) { LassoProvider *provider = lasso_provider_new(LASSO_PROVIDER_ROLE_SP, TESTSMETADATADIR "/metadata_06.xml", NULL, NULL); ck_assert_msg(provider != NULL, "Can't load RSAKeyValue node"); g_object_unref(provider); } END_TEST START_TEST(test07_metadata_role_descriptors) { LassoProvider *provider = (LassoProvider*)lasso_provider_new(LASSO_PROVIDER_ROLE_IDP, TESTSDATADIR "/idp6-saml2/metadata.xml", NULL, NULL); GList *l; int i = 0; check_not_null(provider); for (i = 1; i < LASSO_PROVIDER_ROLE_LAST; i *= 2) { l = lasso_provider_get_metadata_keys_for_role(provider, i); if (i == LASSO_PROVIDER_ROLE_IDP) { check_equals(g_list_length(l), 10); } else if (i == LASSO_PROVIDER_ROLE_AUTHN_AUTHORITY || i == LASSO_PROVIDER_ROLE_AUTHZ_AUTHORITY || i == LASSO_PROVIDER_ROLE_ATTRIBUTE_AUTHORITY) { check_equals(g_list_length(l), 3); } lasso_release_list_of_strings(l); } l = lasso_provider_get_metadata_list_for_role(provider, LASSO_PROVIDER_ROLE_IDP, LASSO_SAML2_METADATA_ATTRIBUTE_WANT_AUTHN_REQUEST_SIGNED); check_not_null(l); check_null(l->next); check_str_equals((char*)l->data, "true"); lasso_release_gobject(provider); } END_TEST Suite* metadata_suite() { Suite *s = suite_create("Metadata"); TCase *tc_metadata_load_der_certificate_from_x509_cert = tcase_create("Load DER certificate from metadata"); TCase *tc_metadata_load_pem_certificate_from_x509_cert = tcase_create("Load PEM certificate from metadata"); TCase *tc_metadata_load_der_public_key_from_keyvalue = tcase_create("Load DER public key from "); TCase *tc_metadata_load_pem_public_key_from_keyvalue = tcase_create("Load PEM public key from "); TCase *tc_metadata_load_public_key_from_x509_cert = tcase_create("Load DER public key from "); TCase *tc_metadata_load_public_key_from_rsa_keyvalue = tcase_create("Load RSAKeyValue public key"); TCase *tc_metadata_role_descriptors = tcase_create("Lookup different role descriptors datas"); tcase_add_checked_fixture(tc_metadata_load_pem_certificate_from_x509_cert, setup_lasso_flag_pem_public_key, teardown_lasso_flag_pem_public_key); tcase_add_checked_fixture(tc_metadata_load_pem_public_key_from_keyvalue, setup_lasso_flag_pem_public_key, teardown_lasso_flag_pem_public_key); tcase_add_checked_fixture(tc_metadata_load_der_public_key_from_keyvalue, setup_lasso_flag_pem_public_key, teardown_lasso_flag_pem_public_key); tcase_add_checked_fixture(tc_metadata_load_public_key_from_x509_cert, setup_lasso_flag_pem_public_key, teardown_lasso_flag_pem_public_key); tcase_add_checked_fixture(tc_metadata_load_public_key_from_rsa_keyvalue, setup_lasso_flag_pem_public_key, teardown_lasso_flag_pem_public_key); suite_add_tcase(s, tc_metadata_load_der_certificate_from_x509_cert); suite_add_tcase(s, tc_metadata_load_pem_certificate_from_x509_cert); suite_add_tcase(s, tc_metadata_load_der_public_key_from_keyvalue); suite_add_tcase(s, tc_metadata_load_pem_public_key_from_keyvalue); suite_add_tcase(s, tc_metadata_load_public_key_from_x509_cert); suite_add_tcase(s, tc_metadata_load_public_key_from_rsa_keyvalue); suite_add_tcase(s, tc_metadata_role_descriptors); tcase_add_test(tc_metadata_load_der_certificate_from_x509_cert, test01_metadata_load_der_certificate_from_x509_cert); tcase_add_test(tc_metadata_load_pem_certificate_from_x509_cert, test02_metadata_load_pem_certificate_from_x509_cert); tcase_add_test(tc_metadata_load_der_public_key_from_keyvalue, test03_metadata_load_der_public_key_from_keyvalue); tcase_add_test(tc_metadata_load_pem_public_key_from_keyvalue, test04_metadata_load_pem_public_key_from_keyvalue); tcase_add_test(tc_metadata_load_public_key_from_x509_cert, test05_metadata_load_public_key_from_x509_cert); tcase_add_test(tc_metadata_load_public_key_from_rsa_keyvalue, test06_metadata_load_public_key_from_rsa_keyvalue); tcase_add_test(tc_metadata_role_descriptors, test07_metadata_role_descriptors); return s; } lasso-2.8.2/tests/PaxHeaders/non_regression_tests.c0000644000000000000000000000013214114336625017511 xustar0030 mtime=1630649749.886437648 30 atime=1678814246.953533159 30 ctime=1678814321.201954402 lasso-2.8.2/tests/non_regression_tests.c0000644000175000017500000003267114114336625022772 0ustar00bdauvergnebdauvergne00000000000000/* * Lasso library C unit tests * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include #include #include #include "../lasso/lasso.h" #include "tests.h" #include "../lasso/xml/lib_assertion.h" #include "../lasso/xml/lib_authentication_statement.h" #include "../lasso/xml/saml_name_identifier.h" #include "../lasso/xml/samlp_response.h" #include "../lasso/xml/saml-2.0/saml2_attribute.h" #include "../lasso/xml/saml-2.0/samlp2_authn_request.h" #include "../lasso/id-ff/provider.h" #include "../lasso/utils.h" #include #include Suite* non_regression_suite(); START_TEST(test01_googleapps_27092010) { /* * Here the decoded request: * * char *gapp_request = "\n\ google.com"; */ char *b64_encoded_request = "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHNhbWxwOkF1dGhuUmVxdWVzdCB4bWxuczpzYW1scD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOnByb3RvY29sIgpJRD0ibGZub2VoY2ZnYWdmYmVmaWFpamFlZmRwbmRlcHBnbWZsbGVuZWxpayIgVmVyc2lvbj0iMi4wIgpJc3N1ZUluc3RhbnQ9IjIwMTAtMDktMjdUMTI6NTU6MjlaIgpQcm90b2NvbEJpbmRpbmc9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpiaW5kaW5nczpIVFRQLVBPU1QiClByb3ZpZGVyTmFtZT0iZ29vZ2xlLmNvbSIgSXNQYXNzaXZlPSJmYWxzZSIKQXNzZXJ0aW9uQ29uc3VtZXJTZXJ2aWNlVVJMPSJodHRwczovL3d3dy5nb29nbGUuY29tL2EvbGluaWQub3JnL2FjcyI+PHNhbWw6SXNzdWVyCnhtbG5zOnNhbWw9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDphc3NlcnRpb24iPmdvb2dsZS5jb208L3NhbWw6SXNzdWVyPjxzYW1scDpOYW1lSURQb2xpY3kKQWxsb3dDcmVhdGU9InRydWUiCkZvcm1hdD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6MS4xOm5hbWVpZC1mb3JtYXQ6dW5zcGVjaWZpZWQiCi8+PC9zYW1scDpBdXRoblJlcXVlc3Q+Cg=="; char *metadata = "\n\ \n\ \n\ urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress\n\ \n\ \n"; LassoServer *server = NULL; LassoLogin *login = NULL; check_not_null(server = lasso_server_new(TESTSDATADIR "/idp5-saml2/metadata.xml", TESTSDATADIR "/idp5-saml2/private-key.pem", NULL, NULL)); check_good_rc(lasso_server_add_provider_from_buffer(server, LASSO_PROVIDER_ROLE_SP, metadata, NULL, NULL)); check_not_null(login = lasso_login_new(server)); lasso_profile_set_signature_verify_hint(&login->parent, LASSO_PROFILE_SIGNATURE_VERIFY_HINT_IGNORE); check_good_rc(lasso_login_process_authn_request_msg(login, b64_encoded_request)); check_good_rc(lasso_login_validate_request_msg(login, TRUE, TRUE)); check_good_rc(lasso_login_build_authn_response_msg(login)); check_not_null(LASSO_PROFILE(login)->msg_url); check_not_null(LASSO_PROFILE(login)->msg_body); lasso_release_gobject(login); lasso_release_gobject(server); } END_TEST START_TEST(indexed_endpoints_20101008) { LassoProvider *provider = NULL; char *str; char *meta01 = "\n\ \n\ \n\ \n\ \n\ \n"; char *meta02 = "\n\ \n\ \n\ \n\ \n\ \n"; char *meta03 = "\n\ \n\ \n\ \n\ \n\ \n"; char *meta04 = "\n\ \n\ \n\ \n\ \n\ \n"; provider = lasso_provider_new_from_buffer(LASSO_PROVIDER_ROLE_SP, meta01, NULL, NULL); check_not_null(provider); str = lasso_provider_get_assertion_consumer_service_url(provider, NULL); check_str_equals(str, "ok"); g_free(str); str = lasso_provider_get_assertion_consumer_service_url(provider, "0"); check_str_equals(str, "ok"); g_free(str); str = lasso_provider_get_assertion_consumer_service_url(provider, "1"); check_str_equals(str, "wrong"); g_free(str); lasso_release_gobject(provider); provider = lasso_provider_new_from_buffer(LASSO_PROVIDER_ROLE_SP, meta02, NULL, NULL); check_not_null(provider); str = lasso_provider_get_assertion_consumer_service_url(provider, NULL); check_str_equals(str, "ok"); g_free(str); str = lasso_provider_get_assertion_consumer_service_url(provider, "0"); check_str_equals(str, "wrong"); g_free(str); str = lasso_provider_get_assertion_consumer_service_url(provider, "1"); check_str_equals(str, "ok"); g_free(str); lasso_release_gobject(provider); provider = lasso_provider_new_from_buffer(LASSO_PROVIDER_ROLE_SP, meta03, NULL, NULL); check_not_null(provider); str = lasso_provider_get_assertion_consumer_service_url(provider, NULL); check_str_equals(str, "ok"); g_free(str); str = lasso_provider_get_assertion_consumer_service_url(provider, "0"); check_str_equals(str, "wrong"); g_free(str); str = lasso_provider_get_assertion_consumer_service_url(provider, "1"); check_str_equals(str, "ok"); g_free(str); lasso_release_gobject(provider); provider = lasso_provider_new_from_buffer(LASSO_PROVIDER_ROLE_SP, meta04, NULL, NULL); check_not_null(provider); str = lasso_provider_get_assertion_consumer_service_url(provider, NULL); check_str_equals(str, "ok"); g_free(str); str = lasso_provider_get_assertion_consumer_service_url(provider, "0"); check_str_equals(str, "wrong"); g_free(str); str = lasso_provider_get_assertion_consumer_service_url(provider, "1"); check_str_equals(str, "ok"); g_free(str); lasso_release_gobject(provider); } END_TEST START_TEST(remove_warning_when_parssing_unknown_SNIPPET_LIST_NODES_20111007) { LassoNode *node; xmlDoc *xmldoc; const char content[] = "C8NQsm1Y3Gas9m0AMDhxU7UxCSI="; xmldoc = xmlReadMemory(content, sizeof(content)-1, NULL, NULL, 0); check_not_null(xmldoc); node = lasso_node_new_from_xmlNode(xmlDocGetRootElement(xmldoc)); check_not_null(node); check_true(LASSO_IS_SAML2_ATTRIBUTE(node)); check_true(LASSO_IS_NODE(node)); xmlFreeDoc(xmldoc); lasso_release_gobject(node); } END_TEST START_TEST(wrong_endpoint_index_in_artifacts) { LassoServer *server = NULL; LassoLogin *login = NULL; guchar *decoded = NULL; size_t out_len; check_not_null(server = lasso_server_new(TESTSDATADIR "/idp13-artifact-resolution-service-indexed/metadata.xml", TESTSDATADIR "/idp13-artifact-resolution-service-indexed/private-key.pem", NULL, NULL)); check_good_rc(lasso_server_add_provider(server, LASSO_PROVIDER_ROLE_SP, TESTSDATADIR "/sp7-saml2/metadata.xml", NULL, NULL)); check_not_null(login = lasso_login_new(server)); check_good_rc(lasso_login_init_idp_initiated_authn_request(login, "http://sp7/metadata")); lasso_assign_string(LASSO_SAMLP2_AUTHN_REQUEST(login->parent.request)->ProtocolBinding, LASSO_SAML2_METADATA_BINDING_ARTIFACT); check_good_rc(lasso_login_process_authn_request_msg(login, NULL)); check_good_rc(lasso_login_validate_request_msg(login, TRUE, TRUE)); check_good_rc(lasso_login_build_artifact_msg(login, LASSO_HTTP_METHOD_ARTIFACT_GET)); check_not_null(LASSO_PROFILE(login)->msg_url); check_null(LASSO_PROFILE(login)->msg_body); printf("%s\n", LASSO_PROFILE(login)->msg_url); decoded = g_base64_decode(strstr(LASSO_PROFILE(login)->msg_url, "SAMLart=")+8, &out_len); check_equals(decoded[2],0); check_equals(decoded[3],7); lasso_release_gobject(login); lasso_release_gobject(server); lasso_release(decoded); } END_TEST START_TEST(malformed_logout_request) { /* Sent by Songling Han on 2015-08-08 */ LassoServer *server = NULL; LassoLogout *logout = NULL; char *msg = "SAMLRequest=lZJRS8MwFIX/SsnrSJOmmWlCLQz3UpgKTnzwZaRZugW6pPam6s+3WxFRRPAp5HJPznfuTQn61PVqEw5hjA/2ZbQQk3p9jXb8SgrJucRUXi0xp7nAUi8zXEgjZZ43hSwMSp7sAC74a8RSipIaYLS1h6h9nEo0W2JaYCoeWaZYobhIRbZ8Rsl6cnFex4vyGGMPipBMsJTlac7TQpLFm21ee78g87nrLoDpMZ46lNwED/bsMA5eBQ0OlNcnCyoatV3dbtQEo8zcpEYPvTWudXaPkrsQ7/39sGqjHX4C5vkX4Pup86Aus/nbpR9CDCZ0qCov4YdZ+rdIA9jhHB5V5/BT9jfnJxiGWWocmJB2weiO6H0LZGp9dcYCicMIsSSzTVXeTc/W6//aQfCHzvmSzPKqnPe/tXBeY+339r3aZQ3XVlCOdcZbzDPW4ELsp2tLBWXcSslESX5Rfha/fafqAw==tLBWXcSslESX5Rfha%2ffafqAw%3d%3d&Signature=a3Pm6zoaMTJDv8cDOOa+u1BEBvFuAtUmcqsUIUGkOIkCswlq44VNvAJ1NaHZfk8uf+q1KEfl8CLASjL1Rgjzc6JjzRv0U4qRPeF9U5D07W1G+f9AZWMat6AHAwXoAq42B5fdJJtDhCXjEYQRoWKMzJQzn/6QFezUMbErPz3gzku384+RBTrlTpNYdEoC4j2YOGiTBvlZAUdmDNpCkKeEVUOKZhe7V5u8nqOK2F+WhLlCU8g5EIvoEeIXpmY4rn4h2lRsLKJTKLB2RNJoE3U7lBkUzObHmmt0gfiFxGOuL0vxmfrKt/psvZsRMOsVzmZrUW7BVaCw2j0uB7X9njbDiA==0uB7X9njbDiA%3d%3d&SigAlg=http://www.w3.org/2000/09/xmldsig#rsa-sha1sig%23rsa-sha1"; check_not_null(server = lasso_server_new(TESTSDATADIR "/idp5-saml2/metadata.xml", TESTSDATADIR "/idp5-saml2/private-key.pem", NULL, NULL)); check_good_rc(lasso_server_add_provider(server, LASSO_PROVIDER_ROLE_SP, TESTSDATADIR "/sp5-saml2/metadata.xml", NULL, NULL)); check_not_null(logout = lasso_logout_new(server)); block_lasso_logs; check_equals(lasso_logout_process_request_msg(logout, msg), LASSO_PROFILE_ERROR_INVALID_MSG); unblock_lasso_logs; lasso_release_gobject(logout); lasso_release_gobject(server); } END_TEST Suite* non_regression_suite() { struct { char *name; const void *test; } tests[] = { { "Googleapps error from coudot@ on 27-09-2010", test01_googleapps_27092010}, { "Wrong assertionConsumer ordering on 08-10-2010", indexed_endpoints_20101008}, { "Warning when parsing AttributeValue node containing unknown namespace nodes", remove_warning_when_parssing_unknown_SNIPPET_LIST_NODES_20111007 }, { "Wrong endpoint index in artifacts", wrong_endpoint_index_in_artifacts }, { "Malformed logout request", malformed_logout_request }, }; Suite *s = suite_create("Non regression tests"); unsigned int i = 0; for (i = 0 ; i < G_N_ELEMENTS(tests); i++) { TCase *c = tcase_create(tests[i].name); tcase_add_test(c, tests[i].test); suite_add_tcase(s, c); } return s; } lasso-2.8.2/tests/PaxHeaders/tests.c0000644000000000000000000000013014364261206014374 xustar0029 mtime=1674666630.78276934 30 atime=1678814244.813521066 29 ctime=1678814321.19795438 lasso-2.8.2/tests/tests.c0000644000175000017500000001033714364261206017652 0ustar00bdauvergnebdauvergne00000000000000/* * Lasso library C unit tests * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include #include #include #include #include #include #include #include "../lasso/lasso.h" #include "../lasso/lasso_config.h" extern Suite* basic_suite(); extern Suite* login_suite(); extern Suite* login_saml2_suite(); extern Suite* random_suite(); extern Suite* metadata_suite(); extern Suite* assertion_query_suite(); extern Suite* non_regression_suite(); typedef Suite* (*SuiteFunction) (); SuiteFunction suites[] = { basic_suite, login_suite, login_saml2_suite, random_suite, metadata_suite, assertion_query_suite, non_regression_suite, NULL }; void mute_logger(G_GNUC_UNUSED const gchar *domain, G_GNUC_UNUSED GLogLevelFlags log_level, G_GNUC_UNUSED const gchar *message, G_GNUC_UNUSED gpointer user_data) { } int dontfork = 0; int log_failed = 0; void set_mute_logger() { g_log_set_default_handler(mute_logger, NULL); if (log_failed) { log_failed = 0; ck_assert_msg(0, "There were logs, there should not"); } } void fail_logger(const gchar *log_domain G_GNUC_UNUSED, GLogLevelFlags log_level, const gchar *message G_GNUC_UNUSED, G_GNUC_UNUSED gpointer user_data) { const char *level_name G_GNUC_UNUSED = NULL; if (strncmp(message, "libxmlsec", 9) == 0) { return; } switch (log_level) { case G_LOG_LEVEL_ERROR: level_name = "ERROR"; break; case G_LOG_LEVEL_CRITICAL: level_name = "CRITICAL"; break; case G_LOG_LEVEL_WARNING: level_name = "WARNING"; break; case G_LOG_LEVEL_INFO: level_name = "INFO"; break; case G_LOG_LEVEL_MESSAGE: level_name = "MESSAGE"; break; case G_LOG_LEVEL_DEBUG: return; default: g_assert_not_reached(); } if (! dontfork) { ck_assert_msg(0, "No logging output expected: message «%s» was emitted for domain «%s» at the level «%s»", message, log_domain, level_name); } printf("No logging output expected: message «%s» was emitted for domain «%s» at the level «%s»", message, log_domain, level_name); log_failed = 1; G_BREAKPOINT(); } static xmlFreeFunc free_func; static xmlMallocFunc malloc_func; static xmlReallocFunc realloc_func; static xmlStrdupFunc strdup_func; void * my_malloc(size_t size) { void *ptr = malloc_func(size); if (! ptr) { ck_assert_msg(0, "xmlMalloc failed"); } return ptr; } void * my_realloc(void *mem, size_t size) { void *ptr = realloc_func(mem, size); if (! ptr) { ck_assert_msg(0, "xmlRealloc failed"); } return ptr; } void setup_xml_mem_allocation() { xmlMemGet(&free_func, &malloc_func, &realloc_func, &strdup_func); xmlMemSetup(free_func, my_malloc, my_realloc, strdup_func); } int main(int argc, char *argv[]) { int rc = 0; SRunner *sr; int i; int dont_fork = 0; setup_xml_mem_allocation(); for (i=1; i. */ #include #include #include #include "../lasso/lasso.h" #include "../lasso/xml/strings.h" #include "../lasso/xml/xml_idff.h" #include "../lasso/xml/saml-2.0/xml_saml2.h" #include "../lasso/xml/soap-1.1/xml_soap11.h" #include "../lasso/utils.h" #include "../lasso/xml/private.h" #include #include "tests.h" START_TEST(test01_server_load_dump_empty_string) { LassoServer *serverContext; serverContext = lasso_server_new_from_dump(""); ck_assert_msg(serverContext == NULL, "serverContext was created from an empty string dump"); } END_TEST START_TEST(test02_server_load_dump_random_string) { LassoServer *serverContext; begin_check_do_log("libxml2", G_LOG_LEVEL_DEBUG, "libxml2: Start tag expected, '<' not found\n", FALSE); serverContext = lasso_server_new_from_dump("foo"); end_check_do_log("libxml2"); ck_assert_msg(serverContext == NULL, "serverContext was created from a fake dump"); } END_TEST START_TEST(test03_server_load_dump_random_xml) { LassoServer *serverContext; begin_check_do_log(NULL, G_LOG_LEVEL_CRITICAL, " Unable to build a LassoNode from a xmlNode", TRUE); serverContext = lasso_server_new_from_dump(""); end_check_do_log(NULL); ck_assert_msg(serverContext == NULL, "serverContext was created from fake (but valid XML) dump"); } END_TEST START_TEST(test04_identity_load_dump_null) { LassoIdentity *identity; identity = lasso_identity_new_from_dump(NULL); ck_assert_msg(identity == NULL, "identity was created from NULL dump"); } END_TEST START_TEST(test05_identity_load_dump_empty) { LassoIdentity *identity; identity = lasso_identity_new_from_dump(""); ck_assert_msg(identity == NULL, "identity was created from empty dump"); } END_TEST #include "../lasso/registry.h" START_TEST(test06_registry_direct_mapping) { const char *name; gint r; r = lasso_registry_default_add_direct_mapping(LASSO_LIB_HREF, "test", LASSO_LASSO_HREF, "LassoTestClass"); ck_assert_msg(r == 0, "lasso_registry_default_add_direct_mapping should return 0 for new mappings"); name = lasso_registry_default_get_mapping(LASSO_LIB_HREF, "test", LASSO_LASSO_HREF); ck_assert_msg(name != NULL, "lasso_registry_default_get_mapping should return the recent mapping"); ck_assert_msg(strcmp(name, "LassoTestClass") == 0, "lasso_registry_default_get_mapping should return LassoTestClass"); r = lasso_registry_default_add_direct_mapping(LASSO_LIB_HREF, "test", LASSO_LASSO_HREF, "LassoTestClass"); ck_assert_msg(r == LASSO_REGISTRY_ERROR_KEY_EXISTS, "lasso_registry_default_add_direct_mapping should return LASSO_REGISTRY_KEY_EXISTS when done two times"); } END_TEST const char *trad(const char *from_namespace, const char *from_name, const char* to_namespace) { if (strcmp(from_namespace, "coin") == 0 && strcmp(to_namespace, LASSO_LASSO_HREF) == 0) { char *temp = g_strconcat("Lasso", from_name, NULL); const char *ret = g_intern_string(temp); g_free(temp); return ret; } return NULL; } START_TEST(test07_registry_functional_mapping) { const char *name; gint r; r = lasso_registry_default_add_functional_mapping("coin", LASSO_LASSO_HREF, trad); ck_assert_msg(r == 0, "lasso_registry_default_add_functional mapping should return 0 for new mapping"); name = lasso_registry_default_get_mapping("coin", "Assertion", LASSO_LASSO_HREF); ck_assert_msg(name != NULL, "lasso_registry_default_get_mapping should return the recent mapping"); ck_assert_msg(strcmp(name, "LassoAssertion") == 0, "lasso_registry_default_get_mapping should return LassoAssertion"); r = lasso_registry_default_add_functional_mapping("coin", LASSO_LASSO_HREF, trad); ck_assert_msg(r == LASSO_REGISTRY_ERROR_KEY_EXISTS, "lasso_registry_default_add_functional_mapping should return LASSO_REGISTRY_KEY_EXISTS when done two times"); } END_TEST static struct XmlSnippet schema_snippets[] = { {NULL, 0, 0, NULL, NULL, NULL} }; static void class_init(LassoNodeClass *klass, gpointer class_data G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "Assertion"); lasso_node_class_set_ns(nclass,LASSO_SAML2_ASSERTION_HREF, LASSO_SAML2_ASSERTION_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } START_TEST(test08_test_new_from_xmlNode) { gint r; LassoNode *node = NULL; static const GTypeInfo this_info = { sizeof (LassoNodeClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoNode), 0, NULL, NULL }; g_type_register_static(LASSO_TYPE_NODE, "LassoTest", &this_info, 0); r = lasso_registry_default_add_direct_mapping("http://example.com", "Test1", LASSO_LASSO_HREF, "LassoTest"); ck_assert_msg(r == 0, "no mapping for http://example.com:Test1 should exist"); begin_check_do_log(NULL, G_LOG_LEVEL_WARNING, " Class LassoTest has no node_data so no initialization is possible", TRUE); node = lasso_node_new_from_dump(""); end_check_do_log(NULL); ck_assert_msg(node != NULL, "parsing should return an object"); ck_assert_msg(strcmp(G_OBJECT_TYPE_NAME(node), "LassoTest") == 0, "node classname should be LassoTest"); g_object_unref(node); } END_TEST START_TEST(test09_test_deserialization) { char *content = NULL; size_t len = 0; LassoNode *node; g_file_get_contents(TESTSDATADIR "/response-1", &content, &len, NULL); ck_assert_msg(content != NULL, "content should be read"); node = lasso_node_new_from_dump(content); ck_assert_msg(node != NULL, "node should be parsed"); g_object_unref(node); g_free(content); } END_TEST /* try to test all new functions and their associated deserialization codes */ START_TEST(test10_test_alldumps) { LassoNode *node, *node2; char *node_dump; node = LASSO_NODE(lasso_identity_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_identity_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_session_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_session_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_ds_key_info_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_ds_key_info_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_ds_key_value_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_ds_key_value_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_ds_rsa_key_value_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_ds_rsa_key_value_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); /* ID-FF 1.2 */ node = LASSO_NODE(lasso_lib_assertion_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_lib_assertion_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_lib_authn_context_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_lib_authn_context_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_lib_authn_request_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_lib_authn_request_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_lib_authn_request_envelope_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_lib_authn_request_envelope_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_lib_federation_termination_notification_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_lib_federation_termination_notification_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_lib_idp_entries_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_lib_idp_entries_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_lib_idp_entry_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_lib_idp_entry_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_lib_idp_list_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_lib_idp_list_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_lib_logout_request_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_lib_logout_request_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_lib_logout_response_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_lib_logout_response_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_lib_name_identifier_mapping_request_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_lib_name_identifier_mapping_request_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_lib_name_identifier_mapping_response_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_lib_name_identifier_mapping_response_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_lib_register_name_identifier_request_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_lib_register_name_identifier_request_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_lib_register_name_identifier_response_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_lib_register_name_identifier_response_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_lib_request_authn_context_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_lib_request_authn_context_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_lib_scoping_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_lib_scoping_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_lib_subject_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_lib_subject_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_misc_text_node_new()); node_dump = lasso_node_dump(node); ck_assert_msg(node_dump && strcmp(node_dump, "") == 0, "LassoMiscTextNode dump failed"); lasso_release_string(node_dump); lasso_release_gobject(node); /* SAML 2.0 */ node = LASSO_NODE(lasso_saml2_action_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_saml2_action_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_saml2_advice_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_saml2_advice_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_saml2_assertion_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_saml2_assertion_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_saml2_attribute_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_saml2_attribute_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_saml2_attribute_statement_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_saml2_attribute_statement_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_saml2_attribute_value_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_saml2_attribute_value_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_saml2_audience_restriction_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_saml2_audience_restriction_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_saml2_authn_context_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_saml2_authn_context_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_saml2_authn_statement_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_saml2_authn_statement_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_saml2_authz_decision_statement_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_saml2_authz_decision_statement_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_saml2_base_idabstract_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_saml2_base_idabstract_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_saml2_condition_abstract_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_saml2_condition_abstract_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_saml2_conditions_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_saml2_conditions_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_saml2_encrypted_element_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_saml2_encrypted_element_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_saml2_evidence_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_saml2_evidence_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_saml2_key_info_confirmation_data_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_saml2_key_info_confirmation_data_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_saml2_name_id_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_saml2_name_id_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_saml2_one_time_use_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_saml2_one_time_use_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_saml2_proxy_restriction_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_saml2_proxy_restriction_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_saml2_statement_abstract_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_saml2_statement_abstract_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_saml2_subject_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_saml2_subject_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_saml2_subject_confirmation_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_saml2_subject_confirmation_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_saml2_subject_confirmation_data_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_saml2_subject_confirmation_data_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_saml2_subject_locality_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_saml2_subject_locality_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_samlp2_artifact_resolve_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_samlp2_artifact_resolve_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_samlp2_artifact_response_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_samlp2_artifact_response_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_samlp2_assertion_id_request_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_samlp2_assertion_id_request_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_samlp2_attribute_query_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_samlp2_attribute_query_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_samlp2_authn_query_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_samlp2_authn_query_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_samlp2_authn_request_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_samlp2_authn_request_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_samlp2_authz_decision_query_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_samlp2_authz_decision_query_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_samlp2_extensions_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_samlp2_extensions_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_samlp2_idp_entry_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_samlp2_idp_entry_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_samlp2_idp_list_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_samlp2_idp_list_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); /* node = LASSO_NODE(lasso_samlp2_logout_request_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_samlp2_logout_request_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); */ node = LASSO_NODE(lasso_samlp2_logout_response_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_samlp2_logout_response_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); /* node = LASSO_NODE(lasso_samlp2_manage_name_id_request_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_samlp2_manage_name_id_request_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); */ node = LASSO_NODE(lasso_samlp2_manage_name_id_response_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_samlp2_manage_name_id_response_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_samlp2_name_id_mapping_request_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_samlp2_name_id_mapping_request_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_samlp2_name_id_mapping_response_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_samlp2_name_id_mapping_response_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_samlp2_name_id_policy_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_samlp2_name_id_policy_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_samlp2_request_abstract_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_samlp2_request_abstract_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_samlp2_requested_authn_context_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_samlp2_requested_authn_context_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_samlp2_response_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_samlp2_response_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_samlp2_scoping_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_samlp2_scoping_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_samlp2_status_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_samlp2_status_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_samlp2_status_code_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_samlp2_status_code_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_samlp2_status_detail_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_samlp2_status_detail_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_samlp2_status_response_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_samlp2_status_response_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_samlp2_subject_query_abstract_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_samlp2_subject_query_abstract_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_samlp2_terminate_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_samlp2_terminate_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); /* SAML 1.0 */ node = LASSO_NODE(lasso_saml_advice_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_saml_advice_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_saml_assertion_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_saml_assertion_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_saml_attribute_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_saml_attribute_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_saml_attribute_designator_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_saml_attribute_designator_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_saml_attribute_statement_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_saml_attribute_statement_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_saml_attribute_value_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_saml_attribute_value_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_saml_audience_restriction_condition_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_saml_audience_restriction_condition_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_saml_authentication_statement_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_saml_authentication_statement_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_saml_authority_binding_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_saml_authority_binding_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_saml_conditions_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_saml_conditions_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_saml_name_identifier_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_saml_name_identifier_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_saml_subject_confirmation_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_saml_subject_confirmation_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_saml_subject_statement_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_saml_subject_statement_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_samlp_request_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_samlp_request_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_samlp_response_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_samlp_response_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_samlp_status_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_samlp_status_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_samlp_status_code_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_samlp_status_code_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); /* SOAP */ node = LASSO_NODE(lasso_soap_body_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_soap_body_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_soap_detail_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_soap_detail_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_soap_fault_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_soap_fault_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); node = LASSO_NODE(lasso_soap_header_new()); node_dump = lasso_node_dump(node); ck_assert_msg((node2 = lasso_node_new_from_dump(node_dump)) != NULL, "restoring dump failed after lasso_soap_header_new"); lasso_release_string(node_dump); lasso_release_gobject(node2); lasso_release_gobject(node); /* test deserialization of saml2:EncryptedAssertion" */ const char *encrypted_element_xml[] = { "\n\ \ \ ", "\n\ \ \ ", "\n\ \ \ ", "\n\ \ \ ", NULL }; const char **iter = encrypted_element_xml; while (*iter) { xmlDoc *xmldoc; LassoNode *node; xmldoc = xmlParseDoc (BAD_CAST (*iter)); ck_assert_msg(xmldoc != NULL, "Failed to parse %s: no xmldoc", *iter); ck_assert_msg(xmlDocGetRootElement (xmldoc) != NULL, "Failed to parse %s: no root node element", *iter); node = lasso_node_new_from_xmlNode(xmlDocGetRootElement(xmldoc)); ck_assert_msg(LASSO_IS_SAML2_ENCRYPTED_ELEMENT (node), "Parsing of %s did not return a saml2:EncryptedElement, %s", (char*)*iter, g_type_name(G_TYPE_FROM_INSTANCE(node))); g_object_unref(node); lasso_release_doc(xmldoc); ++iter; } } END_TEST /* test NameIDFormat extraction */ START_TEST(test11_get_default_name_id_format) { LassoProvider *provider; char *name_id_format; const GList *name_id_formats; provider = lasso_provider_new(LASSO_PROVIDER_ROLE_SP, TESTSDATADIR "/sp5-saml2/metadata.xml", NULL, NULL); ck_assert_msg(provider != NULL, "lasso_provider_new failed on metadata file: %s", TESTSDATADIR "/sp5-saml2/metadata.xml"); name_id_format = lasso_provider_get_default_name_id_format(provider); ck_assert_msg(name_id_format != NULL, "no default name id format found!"); ck_assert_msg(strcmp(name_id_format, LASSO_SAML2_NAME_IDENTIFIER_FORMAT_EMAIL) == 0, "default name id format is not email, it is: %s", name_id_format); lasso_release_string(name_id_format); name_id_formats = lasso_provider_get_metadata_list(provider, "NameIDFormat"); ck_assert_msg(g_list_length((GList*)name_id_formats) == 1, "lasso_provider_get_metadata_list returned more or less than 1 NameIDFormat: %u", g_list_length((GList*)name_id_formats)); ck_assert_msg(name_id_formats->data != NULL, "first name id format is NULL"); ck_assert_msg(strcmp((char*)name_id_formats->data, LASSO_SAML2_NAME_IDENTIFIER_FORMAT_EMAIL) == 0, "first name id format is not email, it is %s", (char*)name_id_formats->data); /* cleanup */ lasso_release_gobject(provider); } END_TEST #include /* test load federation */ START_TEST(test13_test_lasso_server_load_metadata) { LassoServer *server = NULL; GList *loaded_entity_ids = NULL; GList blacklisted_1 = { .data = "https://identities.univ-jfc.fr/idp/prod", .next = NULL }; const gchar *trusted_roots = TESTSDATADIR "/rootCA.crt"; /* The IDP metadata file is signed with rsa-sha1, so verifying it would * fail incase sha1 is not available */ if (lasso_get_default_signature_method() != LASSO_SIGNATURE_METHOD_RSA_SHA1) { trusted_roots = NULL; } check_not_null(server = lasso_server_new( TESTSDATADIR "/idp5-saml2/metadata.xml", TESTSDATADIR "/idp5-saml2/private-key.pem", NULL, /* Secret key to unlock private key */ NULL)); block_lasso_logs; check_good_rc(lasso_server_load_metadata(server, LASSO_PROVIDER_ROLE_IDP, TESTSDATADIR "/metadata/renater-metadata.xml", trusted_roots, &blacklisted_1, &loaded_entity_ids, LASSO_SERVER_LOAD_METADATA_FLAG_DEFAULT)); unblock_lasso_logs; check_equals(g_hash_table_size(server->providers), 110); check_equals(g_list_length(loaded_entity_ids), 110); lasso_release_list_of_strings(loaded_entity_ids); lasso_release_gobject(server); } END_TEST #include "../lasso/key.h" /* test load federation */ START_TEST(test14_lasso_key) { LassoKey *key; char *buffer; gsize length; char *base64_encoded; check_true(g_file_get_contents(TESTSDATADIR "sp1-la/private-key-raw.pem", &buffer, &length, NULL)); check_not_null(key = lasso_key_new_for_signature_from_memory(buffer, length, NULL, lasso_get_default_signature_method(), NULL)); lasso_release_gobject(key); check_not_null(key = lasso_key_new_for_signature_from_file(TESTSDATADIR "sp1-la/private-key-raw.pem", NULL, lasso_get_default_signature_method(), NULL)); lasso_release_gobject(key); base64_encoded = g_base64_encode(BAD_CAST buffer, length); check_not_null(key = lasso_key_new_for_signature_from_base64_string(base64_encoded, NULL, lasso_get_default_signature_method(), NULL)); lasso_release_string(base64_encoded); lasso_release_string(buffer); lasso_release_gobject(key); } END_TEST /* test load federation */ START_TEST(test15_ds_key_info) { LassoDsKeyInfo *ds_key_info = lasso_ds_key_info_new(); LassoDsKeyValue *ds_key_value = lasso_ds_key_value_new(); LassoDsX509Data *x509_data = lasso_ds_x509_data_new(); char *dump; GList list; LassoNode *node; lasso_ds_x509_data_set_certificate(x509_data, "coucou"); lasso_ds_key_value_set_x509_data(ds_key_value, x509_data); ds_key_info->KeyValue = g_object_ref(ds_key_value); dump = lasso_node_debug((LassoNode*)ds_key_info, 10); lasso_release_gobject(ds_key_info); lasso_release_gobject(ds_key_value); lasso_release_gobject(x509_data); ds_key_info = (LassoDsKeyInfo*)lasso_node_new_from_dump(dump); lasso_release_string(dump); check_not_null(ds_key_info); check_true(LASSO_IS_DS_KEY_INFO(ds_key_info)); check_not_null(ds_key_info->KeyValue); check_true(LASSO_IS_DS_KEY_VALUE(ds_key_info->KeyValue)); x509_data = lasso_ds_key_value_get_x509_data(ds_key_info->KeyValue); check_not_null(x509_data); check_true(LASSO_IS_DS_X509_DATA(x509_data)); check_str_equals(lasso_ds_x509_data_get_certificate(x509_data), "coucou"); /* LassoSaml2SubjectConfirmation */ LassoSaml2SubjectConfirmation *sc = (LassoSaml2SubjectConfirmation*) \ lasso_saml2_subject_confirmation_new(); LassoSaml2KeyInfoConfirmationDataType *kicdt = (LassoSaml2KeyInfoConfirmationDataType*) \ lasso_saml2_key_info_confirmation_data_type_new(); lasso_assign_string(sc->Method, LASSO_SAML2_CONFIRMATION_METHOD_HOLDER_OF_KEY); lasso_assign_new_gobject(sc->SubjectConfirmationData, &kicdt->parent); list = (GList){ .data = ds_key_info, .next = NULL, .prev = NULL }; lasso_saml2_key_info_confirmation_data_type_set_key_info(kicdt, &list); dump = lasso_node_debug((LassoNode*)sc, 10); lasso_release_gobject(sc); lasso_release_gobject(ds_key_info); node = lasso_node_new_from_dump(dump); lasso_release_string(dump); dump = lasso_node_debug(node, 10); lasso_release_string(dump); lasso_release_gobject(node); } END_TEST /* test get issuer */ START_TEST(test16_test_get_issuer) { char *content = NULL; size_t len = 0; char *issuer = NULL; char *in_response_to = NULL; LassoServer *spServerContext = NULL; LassoServer *idpServerContext = NULL; LassoLogin *spLoginContext = NULL; LassoLogin *idpLoginContext = NULL; LassoSamlp2AuthnRequest *request = NULL; char *authnRequestUrl = NULL; char *qs = NULL; g_file_get_contents(TESTSDATADIR "/response-1", &content, &len, NULL); issuer = lasso_profile_get_issuer(content); check_str_equals(issuer, "gefssstg"); lasso_release_string(issuer); in_response_to = lasso_profile_get_in_response_to(content); check_str_equals(in_response_to, "xx"); lasso_release_string(in_response_to); lasso_release_string(content); spServerContext = lasso_server_new( TESTSDATADIR "/sp5-saml2/metadata.xml", TESTSDATADIR "/sp5-saml2/private-key.pem", NULL, /* Secret key to unlock private key */ NULL); lasso_server_add_provider( spServerContext, LASSO_PROVIDER_ROLE_IDP, TESTSDATADIR "/idp5-saml2/metadata.xml", NULL, NULL); idpServerContext = lasso_server_new( TESTSDATADIR "/idp5-saml2/metadata.xml", TESTSDATADIR "/idp5-saml2/private-key.pem", NULL, /* Secret key to unlock private key */ NULL); lasso_server_add_provider( idpServerContext, LASSO_PROVIDER_ROLE_SP, TESTSDATADIR "/sp5-saml2/metadata.xml", NULL, NULL); spLoginContext = lasso_login_new(spServerContext); check_good_rc(lasso_login_init_authn_request(spLoginContext, "http://idp5/metadata", LASSO_HTTP_METHOD_REDIRECT)); request = LASSO_SAMLP2_AUTHN_REQUEST(LASSO_PROFILE(spLoginContext)->request); request->IsPassive = 0; lasso_assign_string(request->NameIDPolicy->Format, LASSO_SAML2_NAME_IDENTIFIER_FORMAT_PERSISTENT); request->NameIDPolicy->AllowCreate = 1; lasso_assign_string(request->ProtocolBinding, LASSO_SAML2_METADATA_BINDING_POST); check_good_rc(lasso_login_build_authn_request_msg(spLoginContext)); authnRequestUrl = LASSO_PROFILE(spLoginContext)->msg_url; qs = strchr(authnRequestUrl, '?') + 1; issuer = lasso_profile_get_issuer(qs); check_true(lasso_strisequal(issuer, "http://sp5/metadata")); lasso_release_string(issuer); idpLoginContext = lasso_login_new(idpServerContext); check_good_rc(lasso_login_process_authn_request_msg(idpLoginContext, qs)); check_good_rc(lasso_login_validate_request_msg(idpLoginContext, 1, 0)); check_good_rc(lasso_login_build_assertion(idpLoginContext, LASSO_SAML_AUTHENTICATION_METHOD_PASSWORD, "FIXME: authenticationInstant", "FIXME: reauthenticateOnOrAfter", "FIXME: notBefore", "FIXME: notOnOrAfter")); check_good_rc(lasso_login_build_authn_response_msg(idpLoginContext)); check_not_null(idpLoginContext->parent.msg_body); check_not_null(idpLoginContext->parent.msg_url); issuer = lasso_profile_get_issuer(idpLoginContext->parent.msg_body); in_response_to = lasso_profile_get_in_response_to(idpLoginContext->parent.msg_body); check_not_null(in_response_to); check_str_equals(issuer, "http://idp5/metadata"); check_str_equals(in_response_to, request->parent.ID); lasso_release_string(issuer); lasso_release_gobject(idpLoginContext); lasso_release_gobject(idpServerContext); lasso_release_gobject(spLoginContext); lasso_release_gobject(spServerContext); begin_check_do_log("Lasso", G_LOG_LEVEL_DEBUG, "could not decode POST SAML message", TRUE); check_null(lasso_profile_get_issuer("")); end_check_do_log("Lasso"); begin_check_do_log("Lasso", G_LOG_LEVEL_DEBUG, "message is not base64", TRUE); check_null(lasso_profile_get_issuer("SAMLRequest=!!hello!!")); end_check_do_log("Lasso"); } END_TEST Suite* basic_suite() { Suite *s = suite_create("Basic"); TCase *tc_server_load_dump_empty_string = tcase_create("Create server from empty string"); TCase *tc_server_load_dump_random_string = tcase_create("Create server from random string"); TCase *tc_server_load_dump_random_xml = tcase_create("Create server from random XML"); TCase *tc_identity_load_dump_null = tcase_create("Create identity from NULL"); TCase *tc_identity_load_dump_empty = tcase_create("Create identity from empty string"); TCase *tc_registry_direct_mapping = tcase_create("Test QName registry with direct mapping"); TCase *tc_registry_functional_mapping = tcase_create("Test QName registry with functional mapping"); TCase *tc_registry_new_from_xmlNode = tcase_create("Test parsing a node that has a mapping to Lasso Object in the registry"); TCase *tc_response_new_from_xmlNode = tcase_create("Test parsing a message from Ping Federate"); TCase *tc_all_dumps = tcase_create("Test dumping all kind of nodes"); TCase *tc_get_default_name_id_format = tcase_create("Test getting default name id format"); TCase *tc_custom_namespace = tcase_create("Test custom namespace handling"); TCase *tc_load_metadata = tcase_create("Test loading a federation metadata file"); TCase *tc_key = tcase_create("Test loading and manipulating LassoKey objects"); TCase *tc_key_info = tcase_create("Test creating and dumping ds:KeyInfo nodes"); TCase *tc_get_issuer = tcase_create("Test get_issuer and get_request_id"); suite_add_tcase(s, tc_server_load_dump_empty_string); suite_add_tcase(s, tc_server_load_dump_random_string); suite_add_tcase(s, tc_server_load_dump_random_xml); suite_add_tcase(s, tc_identity_load_dump_null); suite_add_tcase(s, tc_identity_load_dump_empty); suite_add_tcase(s, tc_registry_direct_mapping); suite_add_tcase(s, tc_registry_functional_mapping); suite_add_tcase(s, tc_registry_new_from_xmlNode); suite_add_tcase(s, tc_response_new_from_xmlNode); suite_add_tcase(s, tc_all_dumps); suite_add_tcase(s, tc_get_default_name_id_format); suite_add_tcase(s, tc_custom_namespace); suite_add_tcase(s, tc_load_metadata); suite_add_tcase(s, tc_key); suite_add_tcase(s, tc_key_info); suite_add_tcase(s, tc_get_issuer); tcase_add_test(tc_server_load_dump_empty_string, test01_server_load_dump_empty_string); tcase_add_test(tc_server_load_dump_random_string, test02_server_load_dump_random_string); tcase_add_test(tc_server_load_dump_random_xml, test03_server_load_dump_random_xml); tcase_add_test(tc_identity_load_dump_null, test04_identity_load_dump_null); tcase_add_test(tc_identity_load_dump_empty, test05_identity_load_dump_empty); tcase_add_test(tc_registry_direct_mapping, test06_registry_direct_mapping); tcase_add_test(tc_registry_functional_mapping, test07_registry_functional_mapping); tcase_add_test(tc_registry_new_from_xmlNode, test08_test_new_from_xmlNode); tcase_add_test(tc_response_new_from_xmlNode, test09_test_deserialization); tcase_add_test(tc_all_dumps, test10_test_alldumps); tcase_add_test(tc_get_default_name_id_format, test11_get_default_name_id_format); tcase_add_test(tc_load_metadata, test13_test_lasso_server_load_metadata); tcase_add_test(tc_key, test14_lasso_key); tcase_add_test(tc_key_info, test15_ds_key_info); tcase_add_test(tc_get_issuer, test16_test_get_issuer); tcase_set_timeout(tc_load_metadata, 10); return s; } lasso-2.8.2/tests/PaxHeaders/login_tests.c0000644000000000000000000000013114364261206015565 xustar0030 mtime=1674666630.774769292 30 atime=1678814245.025522264 29 ctime=1678814321.19795438 lasso-2.8.2/tests/login_tests.c0000644000175000017500000005657414364261206021057 0ustar00bdauvergnebdauvergne00000000000000/* * Lasso library C unit tests * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include #include #include #include "../lasso/lasso.h" #include #include "../lasso/utils.h" #include "../lasso/backward_comp.h" #include "tests.h" #include "../bindings/ghashtable.h" static char* generateIdentityProviderContextDump() { LassoServer *serverContext; char *ret; serverContext = lasso_server_new( TESTSDATADIR "/idp1-la/metadata.xml", TESTSDATADIR "/idp1-la/private-key-raw.pem", NULL, /* Secret key to unlock private key */ TESTSDATADIR "/idp1-la/certificate.pem"); check_not_null(serverContext); check_good_rc(lasso_server_add_provider( serverContext, LASSO_PROVIDER_ROLE_SP, TESTSDATADIR "/sp1-la/metadata.xml", TESTSDATADIR "/sp1-la/public-key.pem", TESTSDATADIR "/ca1-la/certificate.pem")); ret = lasso_server_dump(serverContext); check_not_null(ret); g_object_unref(serverContext); return ret; } static char* generateServiceProviderContextDump() { LassoServer *serverContext; char *ret; serverContext = lasso_server_new( TESTSDATADIR "/sp1-la/metadata.xml", TESTSDATADIR "/sp1-la/private-key-raw.pem", NULL, /* Secret key to unlock private key */ TESTSDATADIR "/sp1-la/certificate.pem"); check_not_null(serverContext); check_good_rc(lasso_server_add_provider( serverContext, LASSO_PROVIDER_ROLE_IDP, TESTSDATADIR "/idp1-la/metadata.xml", TESTSDATADIR "/idp1-la/public-key.pem", TESTSDATADIR "/ca1-la/certificate.pem")); ret = lasso_server_dump(serverContext); check_not_null(ret); g_object_unref(serverContext); return ret; } static char* generateIdentityProviderContextDumpMemory() { LassoServer *serverContext; char *metadata; char *private_key; char *certificate; size_t len; char *ret; g_file_get_contents(TESTSDATADIR "/idp1-la/metadata.xml", &metadata, &len, NULL); g_file_get_contents(TESTSDATADIR "/idp1-la/private-key-raw.pem", &private_key, &len, NULL); g_file_get_contents(TESTSDATADIR "/idp1-la/certificate.pem", &certificate, &len, NULL); serverContext = lasso_server_new_from_buffers( metadata, private_key, NULL, /* Secret key to unlock private key */ certificate); lasso_server_add_provider( serverContext, LASSO_PROVIDER_ROLE_SP, TESTSDATADIR "/sp1-la/metadata.xml", TESTSDATADIR "/sp1-la/public-key.pem", TESTSDATADIR "/ca1-la/certificate.pem"); g_free(metadata); g_free(private_key); g_free(certificate); ret = lasso_server_dump(serverContext); g_object_unref(serverContext); return ret; } START_TEST(test01_generateServersContextDumps) { char *identityProviderContextDump; char *serviceProviderContextDump; identityProviderContextDump = generateIdentityProviderContextDump(); ck_assert_msg(identityProviderContextDump != NULL, "generateIdentityProviderContextDump should not return NULL"); g_free(identityProviderContextDump); serviceProviderContextDump = generateServiceProviderContextDump(); ck_assert_msg(serviceProviderContextDump != NULL, "generateServiceProviderContextDump should not return NULL"); g_free(serviceProviderContextDump); } END_TEST START_TEST(test02_serviceProviderLogin) { char *serviceProviderContextDump, *identityProviderContextDump; LassoServer *spContext, *idpContext; LassoLogin *spLoginContext, *idpLoginContext; LassoLibAuthnRequest *request; int rc = 0; char *relayState; char *authnRequestUrl, *authnRequestQuery; char *responseUrl, *responseQuery; char *idpIdentityContextDump, *idpSessionContextDump; char *serviceProviderId, *soapRequestMsg, *soapResponseMsg; char *spIdentityContextDump; char *spSessionDump; char *spLoginDump; int requestType; char *found; char *artifact_message; char *artifact; serviceProviderContextDump = generateServiceProviderContextDump(); spContext = lasso_server_new_from_dump(serviceProviderContextDump); spLoginContext = lasso_login_new(spContext); ck_assert_msg(spLoginContext != NULL, "lasso_login_new() shouldn't have returned NULL"); check_good_rc(lasso_login_init_authn_request(spLoginContext, "https://idp1/metadata", LASSO_HTTP_METHOD_REDIRECT)); request = LASSO_LIB_AUTHN_REQUEST(LASSO_PROFILE(spLoginContext)->request); ck_assert_msg(LASSO_IS_LIB_AUTHN_REQUEST(request), "request should be authn_request"); request->IsPassive = 0; request->NameIDPolicy = g_strdup(LASSO_LIB_NAMEID_POLICY_TYPE_FEDERATED); request->consent = g_strdup(LASSO_LIB_CONSENT_OBTAINED); relayState = "fake[]"; request->RelayState = g_strdup(relayState); check_good_rc(lasso_login_build_authn_request_msg(spLoginContext)); authnRequestUrl = LASSO_PROFILE(spLoginContext)->msg_url; ck_assert_msg(authnRequestUrl != NULL, "authnRequestUrl shouldn't be NULL"); authnRequestQuery = strchr(authnRequestUrl, '?')+1; ck_assert_msg(strlen(authnRequestQuery) > 0, "authnRequestQuery shouldn't be an empty string"); spLoginDump = lasso_node_dump(LASSO_NODE(spLoginContext)); ck_assert_msg(strstr(authnRequestQuery, "RelayState") != NULL, "authnRequestQuery should contain a RelayState parameter"); ck_assert_msg(strstr(authnRequestQuery, "fake%5B%5D") != NULL, "authnRequestQuery RelayState parameter should be encoded"); /* Identity provider singleSignOn, for a user having no federation. */ identityProviderContextDump = generateIdentityProviderContextDump(); idpContext = lasso_server_new_from_dump(identityProviderContextDump); idpLoginContext = lasso_login_new(idpContext); ck_assert_msg(idpLoginContext != NULL, "lasso_login_new() shouldn't have returned NULL"); check_good_rc(lasso_login_process_authn_request_msg(idpLoginContext, authnRequestQuery)); ck_assert_msg(rc == 0, "lasso_login_process_authn_request_msg failed"); ck_assert_msg(lasso_login_must_authenticate(idpLoginContext), "lasso_login_must_authenticate() should be TRUE"); ck_assert_msg(idpLoginContext->protocolProfile == LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_ART, "protocoleProfile should be ProfileBrwsArt"); ck_assert_msg(! lasso_login_must_ask_for_consent(idpLoginContext), "lasso_login_must_ask_for_consent() should be FALSE"); ck_assert_msg(idpLoginContext->parent.msg_relayState != NULL, "lasso_login_process_authn_request_msg should restore the RelayState parameter"); ck_assert_msg(lasso_strisequal(idpLoginContext->parent.msg_relayState,relayState), "lasso_login_process_authn_request_msg should restore the same RelayState thant sent in the request"); check_good_rc(lasso_login_validate_request_msg(idpLoginContext, 1, /* authentication_result */ 0 /* is_consent_obtained */ )); check_good_rc(lasso_login_build_assertion(idpLoginContext, LASSO_SAML_AUTHENTICATION_METHOD_PASSWORD, "FIXME: authenticationInstant", "FIXME: reauthenticateOnOrAfter", "FIXME: notBefore", "FIXME: notOnOrAfter")); check_good_rc(lasso_login_build_artifact_msg(idpLoginContext, LASSO_HTTP_METHOD_REDIRECT)); idpIdentityContextDump = lasso_identity_dump(LASSO_PROFILE(idpLoginContext)->identity); ck_assert_msg(idpIdentityContextDump != NULL, "lasso_identity_dump shouldn't return NULL"); idpSessionContextDump = lasso_session_dump(LASSO_PROFILE(idpLoginContext)->session); ck_assert_msg(idpSessionContextDump != NULL, "lasso_session_dump shouldn't return NULL"); responseUrl = LASSO_PROFILE(idpLoginContext)->msg_url; ck_assert_msg(responseUrl != NULL, "responseUrl shouldn't be NULL"); responseQuery = strchr(responseUrl, '?')+1; ck_assert_msg(strlen(responseQuery) > 0, "responseQuery shouldn't be an empty string"); ck_assert_msg(strstr(responseQuery, "RelayState") != NULL, "responseQuery should contain a RelayState parameter"); ck_assert_msg(strstr(responseQuery, "fake%5B%5D") != NULL, "responseQuery RelayState parameter should be encoded"); serviceProviderId = g_strdup(LASSO_PROFILE(idpLoginContext)->remote_providerID); ck_assert_msg(serviceProviderId != NULL, "lasso_profile_get_remote_providerID shouldn't return NULL"); if (lasso_flag_thin_sessions) { /* when using thin sessions, the way artifact message is constructed changes as the * session no more contains full assertions. */ artifact = g_strdup(lasso_profile_get_artifact(&idpLoginContext->parent)); artifact_message = g_strdup(lasso_profile_get_artifact_message(&idpLoginContext->parent)); } /* Service provider assertion consumer */ lasso_server_destroy(spContext); lasso_login_destroy(spLoginContext); spContext = lasso_server_new_from_dump(serviceProviderContextDump); check_true(LASSO_IS_SERVER(spContext)); spLoginContext = lasso_login_new_from_dump(spContext, spLoginDump); check_true(LASSO_IS_LOGIN(spLoginContext)); check_good_rc(lasso_login_init_request(spLoginContext, responseQuery, LASSO_HTTP_METHOD_REDIRECT)); ck_assert_msg(spLoginContext->parent.msg_relayState != NULL, "lasso_login_init_request should restore the RelayState parameter"); ck_assert_msg(lasso_strisequal(spLoginContext->parent.msg_relayState,relayState), "lasso_login_init_request should restore the same RelayState thant sent in the request"); ck_assert_msg(rc == 0, "lasso_login_init_request failed"); check_good_rc(lasso_login_build_request_msg(spLoginContext)); ck_assert_msg(rc == 0, "lasso_login_build_request_msg failed"); soapRequestMsg = LASSO_PROFILE(spLoginContext)->msg_body; ck_assert_msg(soapRequestMsg != NULL, "soapRequestMsg must not be NULL"); /* Identity provider SOAP endpoint */ lasso_server_destroy(idpContext); lasso_login_destroy(idpLoginContext); requestType = lasso_profile_get_request_type_from_soap_msg(soapRequestMsg); ck_assert_msg(requestType == LASSO_REQUEST_TYPE_LOGIN, "requestType should be LASSO_REQUEST_TYPE_LOGIN"); idpContext = lasso_server_new_from_dump(identityProviderContextDump); check_true(LASSO_IS_SERVER(idpContext)); idpLoginContext = lasso_login_new(idpContext); check_true(LASSO_IS_LOGIN(idpLoginContext)); check_good_rc(lasso_login_process_request_msg(idpLoginContext, soapRequestMsg)); if (lasso_flag_thin_sessions) { check_str_equals(idpLoginContext->assertionArtifact, artifact); lasso_profile_set_artifact_message(&idpLoginContext->parent, artifact_message); } check_good_rc(lasso_profile_set_session_from_dump(LASSO_PROFILE(idpLoginContext), idpSessionContextDump)); check_good_rc(lasso_login_build_response_msg(idpLoginContext, serviceProviderId)); soapResponseMsg = LASSO_PROFILE(idpLoginContext)->msg_body; ck_assert_msg(soapResponseMsg != NULL, "soapResponseMsg must not be NULL"); /* Service provider assertion consumer (step 2: process SOAP response) */ check_good_rc(lasso_login_process_response_msg(spLoginContext, soapResponseMsg)); check_good_rc(lasso_login_accept_sso(spLoginContext)); ck_assert_msg(LASSO_PROFILE(spLoginContext)->identity != NULL, "spLoginContext has no identity"); spIdentityContextDump = lasso_identity_dump(LASSO_PROFILE(spLoginContext)->identity); check_not_null(spIdentityContextDump); spSessionDump = lasso_session_dump(LASSO_PROFILE(spLoginContext)->session); check_not_null(spSessionDump); /* Test InResponseTo checking */ found = strstr(soapResponseMsg, "Assertion"); ck_assert_msg(found != NULL, "We must find an Assertion"); found = strstr(found, "InResponseTo=\""); ck_assert_msg(found != NULL, "We must find an InResponseTo attribute"); found[sizeof("InResponseTo=\"")] = '?'; lasso_set_flag("no-verify-signature"); begin_check_do_log(NULL, G_LOG_LEVEL_CRITICAL, " If inResponseTo attribute is present, a matching " "request must be present too in the LassoLogin object", TRUE); check_not_equals(lasso_login_process_response_msg(spLoginContext, soapResponseMsg), 0); end_check_do_log(NULL); lasso_set_flag("verify-signature"); check_good_rc(lasso_login_accept_sso(spLoginContext)); ck_assert_msg(rc == 0, "lasso_login_accept_sso must fail"); g_free(spLoginDump); g_free(serviceProviderId); g_free(serviceProviderContextDump); g_free(identityProviderContextDump); g_free(idpSessionContextDump); g_free(idpIdentityContextDump); g_free(spIdentityContextDump); g_free(spSessionDump); g_object_unref(spContext); g_object_unref(idpContext); g_object_unref(spLoginContext); g_object_unref(idpLoginContext); } END_TEST START_TEST(test03_serviceProviderLogin) { char *serviceProviderContextDump, *identityProviderContextDump; LassoServer *spContext, *idpContext; LassoLogin *spLoginContext, *idpLoginContext; LassoLibAuthnRequest *request; int rc = 0; char *relayState; char *authnRequestUrl, *authnRequestQuery; char *responseUrl, *responseQuery; char *idpIdentityContextDump, *idpSessionContextDump; char *serviceProviderId, *soapRequestMsg, *soapResponseMsg; char *spIdentityContextDump; char *spSessionDump; int requestType; char *artifact_message; char *artifact; serviceProviderContextDump = generateServiceProviderContextDump(); spContext = lasso_server_new_from_dump(serviceProviderContextDump); spLoginContext = lasso_login_new(spContext); ck_assert_msg(spLoginContext != NULL, "lasso_login_new() shouldn't have returned NULL"); rc = lasso_login_init_authn_request(spLoginContext, "https://idp1/metadata", LASSO_HTTP_METHOD_REDIRECT); ck_assert_msg(rc == 0, "lasso_login_init_authn_request failed"); request = LASSO_LIB_AUTHN_REQUEST(LASSO_PROFILE(spLoginContext)->request); ck_assert_msg(LASSO_IS_LIB_AUTHN_REQUEST(request), "request should be authn_request"); request->IsPassive = 0; request->NameIDPolicy = g_strdup(LASSO_LIB_NAMEID_POLICY_TYPE_FEDERATED); request->consent = g_strdup(LASSO_LIB_CONSENT_OBTAINED); relayState = "fake"; request->RelayState = g_strdup(relayState); rc = lasso_login_build_authn_request_msg(spLoginContext); ck_assert_msg(rc == 0, "lasso_login_build_authn_request_msg failed"); authnRequestUrl = LASSO_PROFILE(spLoginContext)->msg_url; ck_assert_msg(authnRequestUrl != NULL, "authnRequestUrl shouldn't be NULL"); authnRequestQuery = strchr(authnRequestUrl, '?')+1; ck_assert_msg(strlen(authnRequestQuery) > 0, "authnRequestRequest shouldn't be an empty string"); /* Identity provider singleSignOn, for a user having no federation. */ identityProviderContextDump = generateIdentityProviderContextDumpMemory(); idpContext = lasso_server_new_from_dump(identityProviderContextDump); idpLoginContext = lasso_login_new(idpContext); ck_assert_msg(idpLoginContext != NULL, "lasso_login_new() shouldn't have returned NULL"); rc = lasso_login_process_authn_request_msg(idpLoginContext, authnRequestQuery); ck_assert_msg(rc == 0, "lasso_login_process_authn_request_msg failed"); ck_assert_msg(lasso_login_must_authenticate(idpLoginContext), "lasso_login_must_authenticate() should be TRUE"); ck_assert_msg(idpLoginContext->protocolProfile == LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_ART, "protocoleProfile should be ProfileBrwsArt"); ck_assert_msg(! lasso_login_must_ask_for_consent(idpLoginContext), "lasso_login_must_ask_for_consent() should be FALSE"); rc = lasso_login_validate_request_msg(idpLoginContext, 1, /* authentication_result */ 0 /* is_consent_obtained */ ); rc = lasso_login_build_assertion(idpLoginContext, LASSO_SAML_AUTHENTICATION_METHOD_PASSWORD, "FIXME: authenticationInstant", "FIXME: reauthenticateOnOrAfter", "FIXME: notBefore", "FIXME: notOnOrAfter"); rc = lasso_login_build_artifact_msg(idpLoginContext, LASSO_HTTP_METHOD_REDIRECT); ck_assert_msg(rc == 0, "lasso_login_build_artifact_msg failed"); idpIdentityContextDump = lasso_identity_dump(LASSO_PROFILE(idpLoginContext)->identity); ck_assert_msg(idpIdentityContextDump != NULL, "lasso_identity_dump shouldn't return NULL"); idpSessionContextDump = lasso_session_dump(LASSO_PROFILE(idpLoginContext)->session); ck_assert_msg(idpSessionContextDump != NULL, "lasso_session_dump shouldn't return NULL"); responseUrl = LASSO_PROFILE(idpLoginContext)->msg_url; ck_assert_msg(responseUrl != NULL, "responseUrl shouldn't be NULL"); responseQuery = strchr(responseUrl, '?')+1; ck_assert_msg(strlen(responseQuery) > 0, "responseQuery shouldn't be an empty string"); serviceProviderId = g_strdup(LASSO_PROFILE(idpLoginContext)->remote_providerID); ck_assert_msg(serviceProviderId != NULL, "lasso_profile_get_remote_providerID shouldn't return NULL"); if (lasso_flag_thin_sessions) { /* when using thin sessions, the way artifact message is constructed changes as the * session no more contains full assertions. */ artifact = g_strdup(lasso_profile_get_artifact(&idpLoginContext->parent)); artifact_message = g_strdup(lasso_profile_get_artifact_message(&idpLoginContext->parent)); } /* Service provider assertion consumer */ lasso_server_destroy(spContext); lasso_login_destroy(spLoginContext); spContext = lasso_server_new_from_dump(serviceProviderContextDump); spLoginContext = lasso_login_new(spContext); rc = lasso_login_init_request(spLoginContext, responseQuery, LASSO_HTTP_METHOD_REDIRECT); ck_assert_msg(rc == 0, "lasso_login_init_request failed"); rc = lasso_login_build_request_msg(spLoginContext); ck_assert_msg(rc == 0, "lasso_login_build_request_msg failed"); soapRequestMsg = LASSO_PROFILE(spLoginContext)->msg_body; ck_assert_msg(soapRequestMsg != NULL, "soapRequestMsg must not be NULL"); /* Identity provider SOAP endpoint */ lasso_server_destroy(idpContext); lasso_login_destroy(idpLoginContext); requestType = lasso_profile_get_request_type_from_soap_msg(soapRequestMsg); ck_assert_msg(requestType == LASSO_REQUEST_TYPE_LOGIN, "requestType should be LASSO_REQUEST_TYPE_LOGIN"); idpContext = lasso_server_new_from_dump(identityProviderContextDump); idpLoginContext = lasso_login_new(idpContext); rc = lasso_login_process_request_msg(idpLoginContext, soapRequestMsg); ck_assert_msg(rc == 0, "lasso_login_process_request_msg failed"); if (lasso_flag_thin_sessions) { check_str_equals(idpLoginContext->assertionArtifact, artifact); lasso_profile_set_artifact_message(&idpLoginContext->parent, artifact_message); } rc = lasso_profile_set_session_from_dump(LASSO_PROFILE(idpLoginContext), idpSessionContextDump); ck_assert_msg(rc == 0, "lasso_login_set_assertion_from_dump failed"); rc = lasso_login_build_response_msg(idpLoginContext, serviceProviderId); ck_assert_msg(rc == 0, "lasso_login_build_response_msg failed"); soapResponseMsg = LASSO_PROFILE(idpLoginContext)->msg_body; ck_assert_msg(soapResponseMsg != NULL, "soapResponseMsg must not be NULL"); /* Service provider assertion consumer (step 2: process SOAP response) */ rc = lasso_login_process_response_msg(spLoginContext, soapResponseMsg); ck_assert_msg(rc == 0, "lasso_login_process_response_msg failed"); rc = lasso_login_accept_sso(spLoginContext); ck_assert_msg(rc == 0, "lasso_login_accept_sso failed"); ck_assert_msg(LASSO_PROFILE(spLoginContext)->identity != NULL, "spLoginContext has no identity"); spIdentityContextDump = lasso_identity_dump(LASSO_PROFILE(spLoginContext)->identity); ck_assert_msg(spIdentityContextDump != NULL, "lasso_identity_dump failed"); spSessionDump = lasso_session_dump(LASSO_PROFILE(spLoginContext)->session); g_free(serviceProviderId); g_free(serviceProviderContextDump); g_free(identityProviderContextDump); g_free(idpSessionContextDump); g_free(idpIdentityContextDump); g_free(spIdentityContextDump); g_free(spSessionDump); g_object_unref(spContext); g_object_unref(idpContext); g_object_unref(spLoginContext); g_object_unref(idpLoginContext); } END_TEST START_TEST(test04_multiple_dump_cycle) { char *serviceProviderContextDump, *identityProviderContextDump; LassoServer *spContext, *idpContext; LassoLogin *spLoginContext, *idpLoginContext; LassoLibAuthnRequest *request; int rc = 0; char *relayState; char *authnRequestUrl, *authnRequestQuery; char *idpLoginContextDump; serviceProviderContextDump = generateServiceProviderContextDump(); spContext = lasso_server_new_from_dump(serviceProviderContextDump); spLoginContext = lasso_login_new(spContext); ck_assert_msg(spLoginContext != NULL, "lasso_login_new() shouldn't have returned NULL"); rc = lasso_login_init_authn_request(spLoginContext, "https://idp1/metadata", LASSO_HTTP_METHOD_REDIRECT); ck_assert_msg(rc == 0, "lasso_login_init_authn_request failed"); request = LASSO_LIB_AUTHN_REQUEST(LASSO_PROFILE(spLoginContext)->request); ck_assert_msg(LASSO_IS_LIB_AUTHN_REQUEST(request), "request should be authn_request"); request->IsPassive = 0; request->NameIDPolicy = g_strdup(LASSO_LIB_NAMEID_POLICY_TYPE_FEDERATED); request->consent = g_strdup(LASSO_LIB_CONSENT_OBTAINED); relayState = "fake"; request->RelayState = g_strdup(relayState); rc = lasso_login_build_authn_request_msg(spLoginContext); ck_assert_msg(rc == 0, "lasso_login_build_authn_request_msg failed"); authnRequestUrl = LASSO_PROFILE(spLoginContext)->msg_url; ck_assert_msg(authnRequestUrl != NULL, "authnRequestUrl shouldn't be NULL"); authnRequestQuery = strchr(authnRequestUrl, '?')+1; ck_assert_msg(strlen(authnRequestQuery) > 0, "authnRequestRequest shouldn't be an empty string"); /* Identity provider singleSignOn, for a user having no federation. */ identityProviderContextDump = generateIdentityProviderContextDumpMemory(); idpContext = lasso_server_new_from_dump(identityProviderContextDump); idpLoginContext = lasso_login_new(idpContext); ck_assert_msg(idpLoginContext != NULL, "lasso_login_new() shouldn't have returned NULL"); rc = lasso_login_process_authn_request_msg(idpLoginContext, authnRequestQuery); ck_assert_msg(rc == 0, "lasso_login_process_authn_request_msg failed"); idpLoginContextDump = lasso_login_dump(idpLoginContext); check_not_null(idpLoginContextDump); g_object_unref(idpLoginContext); idpLoginContext = lasso_login_new_from_dump(idpContext, idpLoginContextDump); check_not_null(idpLoginContext); g_free(idpLoginContextDump); idpLoginContextDump = lasso_login_dump(idpLoginContext); check_not_null(idpLoginContextDump); g_object_unref(idpLoginContext); idpLoginContext = lasso_login_new_from_dump(idpContext, idpLoginContextDump); check_not_null(idpLoginContext); g_free(idpLoginContextDump); g_free(serviceProviderContextDump); g_free(identityProviderContextDump); g_object_unref(spContext); g_object_unref(idpContext); g_object_unref(spLoginContext); g_object_unref(idpLoginContext); } END_TEST Suite* login_suite() { Suite *s = suite_create("Login using ID-FF 1.2"); TCase *tc_generate = tcase_create("Generate Server Contexts"); TCase *tc_spLogin = tcase_create("Login initiated by service provider"); TCase *tc_spLoginMemory = tcase_create("Login initiated by service provider without key loading"); TCase *tc_spMultipleDumpCycle = tcase_create("Dump and load Login object multiple times"); suite_add_tcase(s, tc_generate); suite_add_tcase(s, tc_spLogin); suite_add_tcase(s, tc_spLoginMemory); suite_add_tcase(s, tc_spMultipleDumpCycle); tcase_add_test(tc_generate, test01_generateServersContextDumps); tcase_add_test(tc_spLogin, test02_serviceProviderLogin); tcase_add_test(tc_spLoginMemory, test03_serviceProviderLogin); tcase_add_test(tc_spMultipleDumpCycle, test04_multiple_dump_cycle); return s; } lasso-2.8.2/tests/PaxHeaders/login_tests_saml2.c0000644000000000000000000000013214364261206016664 xustar0030 mtime=1674666630.778769315 30 atime=1678814247.801537953 30 ctime=1678814321.205954425 lasso-2.8.2/tests/login_tests_saml2.c0000644000175000017500000020246514364261206022145 0ustar00bdauvergnebdauvergne00000000000000/* * Lasso library C unit tests * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include #include #include #include #include "../lasso/lasso.h" #include "../lasso/xml/saml-2.0/samlp2_authn_request.h" #include "../lasso/utils.h" #include "../lasso/backward_comp.h" #include "../lasso/xml/saml-2.0/samlp2_logout_request.h" #include "../bindings/ghashtable.h" #include "tests.h" static char* generateIdentityProviderContextDump() { LassoServer *serverContext; GList *providers; char *ret; serverContext = lasso_server_new( TESTSDATADIR "/idp5-saml2/metadata.xml", TESTSDATADIR "/idp5-saml2/private-key.pem", NULL, /* Secret key to unlock private key */ NULL); lasso_server_add_provider( serverContext, LASSO_PROVIDER_ROLE_SP, TESTSDATADIR "/sp5-saml2/metadata.xml", NULL, NULL); providers = g_hash_table_get_values(serverContext->providers); lasso_provider_set_encryption_mode(LASSO_PROVIDER(providers->data), LASSO_ENCRYPTION_MODE_ASSERTION | LASSO_ENCRYPTION_MODE_NAMEID); ret = lasso_server_dump(serverContext); g_object_unref(serverContext); g_list_free(providers); return ret; } static char* generateServiceProviderContextDump() { LassoServer *serverContext; char *ret; serverContext = lasso_server_new( TESTSDATADIR "/sp5-saml2/metadata.xml", TESTSDATADIR "/sp5-saml2/private-key.pem", NULL, /* Secret key to unlock private key */ NULL); lasso_server_add_provider( serverContext, LASSO_PROVIDER_ROLE_IDP, TESTSDATADIR "/idp5-saml2/metadata.xml", NULL, NULL); ret = lasso_server_dump(serverContext); g_object_unref(serverContext); return ret; } static char* generateIdentityProviderContextDumpMemory() { LassoServer *serverContext = NULL; char *metadata = NULL; char *private_key = NULL; char *certificate = NULL; size_t len; char *ret = NULL; g_file_get_contents(TESTSDATADIR "/idp5-saml2/metadata.xml", &metadata, &len, NULL); g_file_get_contents(TESTSDATADIR "/idp5-saml2/private-key.pem", &private_key, &len, NULL); g_file_get_contents(TESTSDATADIR "/idp5-saml2/certificate.pem", &certificate, &len, NULL); serverContext = lasso_server_new_from_buffers( metadata, private_key, NULL, /* Secret key to unlock private key */ certificate); lasso_server_add_provider( serverContext, LASSO_PROVIDER_ROLE_SP, TESTSDATADIR "/sp5-saml2/metadata.xml", NULL, NULL); g_free(metadata); g_free(private_key); g_free(certificate); ret = lasso_server_dump(serverContext); g_object_unref(serverContext); return ret; } START_TEST(test01_saml2_generateServersContextDumps) { char *identityProviderContextDump; char *serviceProviderContextDump; identityProviderContextDump = generateIdentityProviderContextDump(); ck_assert_msg(identityProviderContextDump != NULL, "generateIdentityProviderContextDump should not return NULL"); g_free(identityProviderContextDump); serviceProviderContextDump = generateServiceProviderContextDump(); ck_assert_msg(serviceProviderContextDump != NULL, "generateServiceProviderContextDump should not return NULL"); g_free(serviceProviderContextDump); } END_TEST START_TEST(test02_saml2_serviceProviderLogin) { char *serviceProviderContextDump = NULL, *identityProviderContextDump = NULL; LassoServer *spContext = NULL, *idpContext = NULL; LassoLogin *spLoginContext = NULL, *idpLoginContext = NULL; LassoLogout *spLogoutContext = NULL, *idpLogoutContext = NULL; LassoSamlp2AuthnRequest *request = NULL; int rc = 0; char *relayState = NULL; char *authnRequestUrl = NULL, *authnRequestQuery = NULL; char *logoutRequestUrl = NULL, *logoutRequestQuery = NULL; char *logoutResponseUrl = NULL, *logoutResponseQuery = NULL; char *responseUrl = NULL, *responseQuery = NULL; char *idpIdentityContextDump = NULL, *idpSessionContextDump = NULL; char *serviceProviderId = NULL, *soapRequestMsg = NULL, *soapResponseMsg = NULL; char *spIdentityContextDump = NULL; char *spSessionDump = NULL; char *spLoginDump = NULL, *idpLoginDump = NULL; char *found = NULL; LassoSaml2Assertion *assertion; serviceProviderContextDump = generateServiceProviderContextDump(); spContext = lasso_server_new_from_dump(serviceProviderContextDump); spLoginContext = lasso_login_new(spContext); ck_assert_msg(spLoginContext != NULL, "lasso_login_new() shouldn't have returned NULL"); rc = lasso_login_init_authn_request(spLoginContext, "http://idp5/metadata", LASSO_HTTP_METHOD_REDIRECT); ck_assert_msg(rc == 0, "lasso_login_init_authn_request failed"); request = LASSO_SAMLP2_AUTHN_REQUEST(LASSO_PROFILE(spLoginContext)->request); ck_assert_msg(LASSO_IS_SAMLP2_AUTHN_REQUEST(request), "request should be authn_request"); request->IsPassive = 0; lasso_assign_string(request->NameIDPolicy->Format, LASSO_SAML2_NAME_IDENTIFIER_FORMAT_PERSISTENT); request->NameIDPolicy->AllowCreate = 1; relayState = "fake[]"; lasso_assign_string(LASSO_PROFILE(spLoginContext)->msg_relayState, relayState); rc = lasso_login_build_authn_request_msg(spLoginContext); ck_assert_msg(rc == 0, "lasso_login_build_authn_request_msg failed"); authnRequestUrl = LASSO_PROFILE(spLoginContext)->msg_url; ck_assert_msg(authnRequestUrl != NULL, "authnRequestUrl shouldn't be NULL"); authnRequestQuery = strchr(authnRequestUrl, '?')+1; ck_assert_msg(strlen(authnRequestQuery) > 0, "authnRequestQuery shouldn't be an empty string"); spLoginDump = lasso_node_dump(LASSO_NODE(spLoginContext)); ck_assert_msg(strstr(authnRequestQuery, "RelayState") != NULL, "authnRequestQuery should contain a RelayState parameter"); ck_assert_msg(strstr(authnRequestQuery, "fake%5B%5D") != NULL, "authnRequestQuery RelayState parameter should be encoded"); /* Identity provider singleSignOn, for a user having no federation. */ identityProviderContextDump = generateIdentityProviderContextDump(); idpContext = lasso_server_new_from_dump(identityProviderContextDump); idpLoginContext = lasso_login_new(idpContext); ck_assert_msg(idpLoginContext != NULL, "lasso_login_new() shouldn't have returned NULL"); check_good_rc(lasso_login_process_authn_request_msg(idpLoginContext, authnRequestQuery)); check_true(lasso_login_must_authenticate(idpLoginContext)); check_equals(idpLoginContext->protocolProfile, LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_ART); check_false(lasso_login_must_ask_for_consent(idpLoginContext)); check_not_null(idpLoginContext->parent.msg_relayState); check_equals(lasso_strisnotequal(idpLoginContext->parent.msg_relayState,relayState), 0); check_good_rc(lasso_login_validate_request_msg(idpLoginContext, 1, /* authentication_result */ 0 /* is_consent_obtained */ )); check_good_rc(lasso_login_build_assertion(idpLoginContext, LASSO_SAML_AUTHENTICATION_METHOD_PASSWORD, "FIXME: authenticationInstant", "FIXME: reauthenticateOnOrAfter", "FIXME: notBefore", "FIXME: notOnOrAfter")); assertion = (LassoSaml2Assertion*)lasso_login_get_assertion(idpLoginContext); check_true(LASSO_IS_SAML2_ASSERTION(assertion)); lasso_saml2_assertion_set_basic_conditions(LASSO_SAML2_ASSERTION(assertion), 60, 120, FALSE); lasso_release_gobject(assertion); check_good_rc(lasso_login_build_artifact_msg(idpLoginContext, LASSO_HTTP_METHOD_ARTIFACT_GET)); idpIdentityContextDump = lasso_identity_dump(LASSO_PROFILE(idpLoginContext)->identity); check_not_null(idpIdentityContextDump); idpSessionContextDump = lasso_session_dump(LASSO_PROFILE(idpLoginContext)->session); check_not_null(idpSessionContextDump); responseUrl = LASSO_PROFILE(idpLoginContext)->msg_url; check_not_null(responseUrl); responseQuery = strchr(responseUrl, '?')+1; ck_assert_msg(strlen(responseQuery) > 0, "responseQuery shouldn't be an empty string"); check_not_null(strstr(responseQuery, "RelayState")); check_not_null(strstr(responseQuery, "fake%5B%5D")); lasso_assign_string(serviceProviderId, LASSO_PROFILE(idpLoginContext)->remote_providerID); check_not_null(serviceProviderId); /* Service provider assertion consumer */ lasso_server_destroy(spContext); lasso_login_destroy(spLoginContext); spContext = lasso_server_new_from_dump(serviceProviderContextDump); spLoginContext = lasso_login_new_from_dump(spContext, spLoginDump); check_good_rc(lasso_login_init_request(spLoginContext, responseQuery, LASSO_HTTP_METHOD_ARTIFACT_GET)); check_not_null(spLoginContext->parent.msg_relayState); check_equals(lasso_strisnotequal(spLoginContext->parent.msg_relayState,relayState), 0); check_good_rc(lasso_login_build_request_msg(spLoginContext)); soapRequestMsg = LASSO_PROFILE(spLoginContext)->msg_body; check_not_null(soapRequestMsg); /* Identity provider SOAP endpoint */ lasso_server_destroy(idpContext); idpLoginDump = lasso_node_dump(LASSO_NODE(idpLoginContext)); lasso_login_destroy(idpLoginContext); idpContext = lasso_server_new_from_dump(identityProviderContextDump); idpLoginContext = lasso_login_new_from_dump(idpContext, idpLoginDump); check_good_rc(lasso_login_process_request_msg(idpLoginContext, soapRequestMsg)); check_good_rc(lasso_profile_set_session_from_dump(LASSO_PROFILE(idpLoginContext), idpSessionContextDump)); check_good_rc(lasso_login_build_response_msg(idpLoginContext, serviceProviderId)); soapResponseMsg = LASSO_PROFILE(idpLoginContext)->msg_body; check_not_null(soapResponseMsg); /* Service provider assertion consumer (step 2: process SOAP response) */ check_good_rc(lasso_login_process_response_msg(spLoginContext, soapResponseMsg)); check_good_rc(lasso_login_accept_sso(spLoginContext)); assertion = (LassoSaml2Assertion*)lasso_login_get_assertion(spLoginContext); check_true(LASSO_IS_SAML2_ASSERTION(assertion)); check_equals(lasso_saml2_assertion_validate_conditions(assertion, spLoginContext->parent.server->parent.ProviderID), LASSO_SAML2_ASSERTION_VALID); check_equals(lasso_saml2_assertion_validate_conditions(assertion, "coin"), LASSO_SAML2_ASSERTION_INVALID); lasso_release_gobject(assertion); check_not_null(LASSO_PROFILE(spLoginContext)->identity); spIdentityContextDump = lasso_identity_dump(LASSO_PROFILE(spLoginContext)->identity); check_not_null(spIdentityContextDump); spSessionDump = lasso_session_dump(LASSO_PROFILE(spLoginContext)->session); /* Test InResponseTo checking */ if (! strstr(soapResponseMsg, "EncryptedAssertion")) { found = strstr(soapResponseMsg, "Assertion"); check_not_null(found); found = strstr(found, "InResponseTo=\""); check_not_null(found); found[sizeof("InResponseTo=\"")] = '?'; lasso_set_flag("no-verify-signature"); check_not_equals(lasso_login_process_response_msg(spLoginContext, soapResponseMsg), 0); lasso_set_flag("verify-signature"); check_not_equals(lasso_login_accept_sso(spLoginContext), 0); } /* logout test */ /* generate a logout request */ check_not_null(idpLogoutContext = lasso_logout_new(idpContext)); check_good_rc(lasso_profile_set_session_from_dump(&idpLogoutContext->parent, idpSessionContextDump)); check_good_rc(lasso_logout_init_request(idpLogoutContext, NULL, LASSO_HTTP_METHOD_REDIRECT)); check_good_rc(lasso_logout_build_request_msg(idpLogoutContext)); check_not_null(idpLogoutContext->parent.msg_url); check_null(idpLogoutContext->parent.msg_body); check_null(idpLogoutContext->parent.msg_relayState); lasso_assign_string(logoutRequestUrl, idpLogoutContext->parent.msg_url); lasso_release_gobject(idpLogoutContext); logoutRequestQuery = strchr(logoutRequestUrl, '?'); logoutRequestQuery += 1; /* keep only the query */ check_not_null(logoutRequestQuery); /* process the logout request */ check_not_null(spLogoutContext = lasso_logout_new(spContext)); check_good_rc(lasso_profile_set_session_from_dump(&spLogoutContext->parent, spSessionDump)); check_good_rc(lasso_logout_process_request_msg(spLogoutContext, logoutRequestQuery)); check_good_rc(lasso_logout_validate_request(spLogoutContext)); check_good_rc(lasso_logout_build_response_msg(spLogoutContext)); check_not_null(spLogoutContext->parent.msg_url); check_null(spLogoutContext->parent.msg_body); check_null(spLogoutContext->parent.msg_relayState); lasso_assign_string(logoutResponseUrl, spLogoutContext->parent.msg_url); check_not_null(logoutResponseQuery = strchr(logoutResponseUrl, '?')); logoutResponseQuery += 1; /* keep only the query */ lasso_release_gobject(spLogoutContext); /* process the response */ check_not_null(idpLogoutContext = lasso_logout_new(idpContext)); check_good_rc(lasso_profile_set_session_from_dump(&idpLogoutContext->parent, idpSessionContextDump)); check_good_rc(lasso_logout_process_response_msg(idpLogoutContext, logoutResponseQuery)); lasso_release_gobject(idpLogoutContext); lasso_release_string(logoutRequestUrl); lasso_release_string(logoutResponseUrl); g_free(idpLoginDump); g_free(serviceProviderId); g_free(serviceProviderContextDump); g_free(identityProviderContextDump); g_free(idpSessionContextDump); g_free(idpIdentityContextDump); g_free(spIdentityContextDump); g_free(spSessionDump); g_free(spLoginDump); g_object_unref(spContext); g_object_unref(idpContext); g_object_unref(spLoginContext); g_object_unref(idpLoginContext); } END_TEST START_TEST(test03_saml2_serviceProviderLogin) { char *serviceProviderContextDump = NULL, *identityProviderContextDump = NULL; LassoServer *spContext = NULL, *idpContext = NULL; LassoLogin *spLoginContext = NULL, *idpLoginContext = NULL; LassoSamlp2AuthnRequest *request = NULL; char *relayState = NULL; char *authnRequestUrl = NULL, *authnRequestQuery = NULL; char *responseUrl = NULL, *responseQuery = NULL; char *idpIdentityContextDump = NULL, *idpSessionContextDump = NULL; char *serviceProviderId = NULL, *soapRequestMsg = NULL, *soapResponseMsg = NULL; char *spIdentityContextDump = NULL; char *spSessionDump = NULL; char *idpLoginDump = NULL; int rc = 0; serviceProviderContextDump = generateServiceProviderContextDump(); spContext = lasso_server_new_from_dump(serviceProviderContextDump); spLoginContext = lasso_login_new(spContext); ck_assert_msg(spLoginContext != NULL, "lasso_login_new() shouldn't have returned NULL"); rc = lasso_login_init_authn_request(spLoginContext, "http://idp5/metadata", LASSO_HTTP_METHOD_REDIRECT); ck_assert_msg(rc == 0, "lasso_login_init_authn_request failed"); request = LASSO_SAMLP2_AUTHN_REQUEST(LASSO_PROFILE(spLoginContext)->request); ck_assert_msg(LASSO_IS_SAMLP2_AUTHN_REQUEST(request), "request should be authn_request"); request->IsPassive = 0; lasso_assign_string(request->NameIDPolicy->Format, LASSO_SAML2_NAME_IDENTIFIER_FORMAT_PERSISTENT); request->NameIDPolicy->AllowCreate = 1; relayState = "fake"; lasso_assign_string(LASSO_PROFILE(spLoginContext)->msg_relayState, relayState); rc = lasso_login_build_authn_request_msg(spLoginContext); ck_assert_msg(rc == 0, "lasso_login_build_authn_request_msg failed"); authnRequestUrl = LASSO_PROFILE(spLoginContext)->msg_url; ck_assert_msg(authnRequestUrl != NULL, "authnRequestUrl shouldn't be NULL"); authnRequestQuery = strchr(authnRequestUrl, '?')+1; ck_assert_msg(strlen(authnRequestQuery) > 0, "authnRequestRequest shouldn't be an empty string"); /* Identity provider singleSignOn, for a user having no federation. */ identityProviderContextDump = generateIdentityProviderContextDumpMemory(); idpContext = lasso_server_new_from_dump(identityProviderContextDump); idpLoginContext = lasso_login_new(idpContext); ck_assert_msg(idpLoginContext != NULL, "lasso_login_new() shouldn't have returned NULL"); rc = lasso_login_process_authn_request_msg(idpLoginContext, authnRequestQuery); ck_assert_msg(rc == 0, "lasso_login_process_authn_request_msg failed"); ck_assert_msg(lasso_login_must_authenticate(idpLoginContext), "lasso_login_must_authenticate() should be TRUE"); ck_assert_msg(idpLoginContext->protocolProfile == LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_ART, "protocoleProfile should be ProfileBrwsArt"); ck_assert_msg(! lasso_login_must_ask_for_consent(idpLoginContext), "lasso_login_must_ask_for_consent() should be FALSE"); rc = lasso_login_validate_request_msg(idpLoginContext, 1, /* authentication_result */ 0 /* is_consent_obtained */ ); rc = lasso_login_build_assertion(idpLoginContext, LASSO_SAML_AUTHENTICATION_METHOD_PASSWORD, "FIXME: authenticationInstant", "FIXME: reauthenticateOnOrAfter", "FIXME: notBefore", "FIXME: notOnOrAfter"); rc = lasso_login_build_artifact_msg(idpLoginContext, LASSO_HTTP_METHOD_ARTIFACT_GET); ck_assert_msg(rc == 0, "lasso_login_build_artifact_msg failed"); idpIdentityContextDump = lasso_identity_dump(LASSO_PROFILE(idpLoginContext)->identity); ck_assert_msg(idpIdentityContextDump != NULL, "lasso_identity_dump shouldn't return NULL"); idpSessionContextDump = lasso_session_dump(LASSO_PROFILE(idpLoginContext)->session); ck_assert_msg(idpSessionContextDump != NULL, "lasso_session_dump shouldn't return NULL"); responseUrl = LASSO_PROFILE(idpLoginContext)->msg_url; ck_assert_msg(responseUrl != NULL, "responseUrl shouldn't be NULL"); responseQuery = strchr(responseUrl, '?')+1; ck_assert_msg(strlen(responseQuery) > 0, "responseQuery shouldn't be an empty string"); lasso_assign_string(serviceProviderId, LASSO_PROFILE(idpLoginContext)->remote_providerID); ck_assert_msg(serviceProviderId != NULL, "lasso_profile_get_remote_providerID shouldn't return NULL"); /* Service provider assertion consumer */ lasso_server_destroy(spContext); lasso_login_destroy(spLoginContext); spContext = lasso_server_new_from_dump(serviceProviderContextDump); spLoginContext = lasso_login_new(spContext); rc = lasso_login_init_request(spLoginContext, responseQuery, LASSO_HTTP_METHOD_ARTIFACT_GET); ck_assert_msg(rc == 0, "lasso_login_init_request failed"); rc = lasso_login_build_request_msg(spLoginContext); ck_assert_msg(rc == 0, "lasso_login_build_request_msg failed"); soapRequestMsg = LASSO_PROFILE(spLoginContext)->msg_body; ck_assert_msg(soapRequestMsg != NULL, "soapRequestMsg must not be NULL"); /* Identity provider SOAP endpoint */ lasso_server_destroy(idpContext); idpLoginDump = lasso_node_dump(LASSO_NODE(idpLoginContext)); lasso_login_destroy(idpLoginContext); idpContext = lasso_server_new_from_dump(identityProviderContextDump); idpLoginContext = lasso_login_new_from_dump(idpContext, idpLoginDump); rc = lasso_login_process_request_msg(idpLoginContext, soapRequestMsg); ck_assert_msg(rc == 0, "lasso_login_process_request_msg failed"); rc = lasso_profile_set_session_from_dump(LASSO_PROFILE(idpLoginContext), idpSessionContextDump); ck_assert_msg(rc == 0, "lasso_login_set_assertion_from_dump failed"); rc = lasso_login_build_response_msg(idpLoginContext, serviceProviderId); ck_assert_msg(rc == 0, "lasso_login_build_response_msg failed"); soapResponseMsg = LASSO_PROFILE(idpLoginContext)->msg_body; ck_assert_msg(soapResponseMsg != NULL, "soapResponseMsg must not be NULL"); /* Service provider assertion consumer (step 2: process SOAP response) */ rc = lasso_login_process_response_msg(spLoginContext, soapResponseMsg); ck_assert_msg(rc == 0, "lasso_login_process_response_msg failed"); rc = lasso_login_accept_sso(spLoginContext); ck_assert_msg(rc == 0, "lasso_login_accept_sso failed"); ck_assert_msg(LASSO_PROFILE(spLoginContext)->identity != NULL, "spLoginContext has no identity"); spIdentityContextDump = lasso_identity_dump(LASSO_PROFILE(spLoginContext)->identity); ck_assert_msg(spIdentityContextDump != NULL, "lasso_identity_dump failed"); spSessionDump = lasso_session_dump(LASSO_PROFILE(spLoginContext)->session); g_free(idpLoginDump); g_free(serviceProviderId); g_free(serviceProviderContextDump); g_free(identityProviderContextDump); g_free(idpSessionContextDump); g_free(idpIdentityContextDump); g_free(spIdentityContextDump); g_free(spSessionDump); g_object_unref(spContext); g_object_unref(idpContext); g_object_unref(spLoginContext); g_object_unref(idpLoginContext); } END_TEST START_TEST(test04_sso_then_slo_soap) { char *serviceProviderContextDump = NULL, *identityProviderContextDump = NULL; LassoServer *spContext = NULL, *idpContext = NULL; LassoLogin *spLoginContext = NULL, *idpLoginContext = NULL; LassoLogout *spLogoutContext = NULL, *idpLogoutContext = NULL; LassoSamlp2AuthnRequest *request = NULL; int rc = 0; char *relayState = NULL; char *authnRequestUrl = NULL, *authnRequestQuery = NULL; char *logoutRequestSoapMessage = NULL; char *logoutResponseSoapMessage = NULL; char *responseUrl = NULL, *responseQuery = NULL; char *idpIdentityContextDump = NULL, *idpSessionContextDump = NULL; char *serviceProviderId = NULL, *soapRequestMsg = NULL, *soapResponseMsg = NULL; char *spIdentityContextDump = NULL; char *spSessionDump = NULL; char *spLoginDump = NULL, *idpLoginDump = NULL; char *found = NULL; LassoSaml2Assertion *assertion; serviceProviderContextDump = generateServiceProviderContextDump(); spContext = lasso_server_new_from_dump(serviceProviderContextDump); spLoginContext = lasso_login_new(spContext); ck_assert_msg(spLoginContext != NULL, "lasso_login_new() shouldn't have returned NULL"); rc = lasso_login_init_authn_request(spLoginContext, "http://idp5/metadata", LASSO_HTTP_METHOD_REDIRECT); ck_assert_msg(rc == 0, "lasso_login_init_authn_request failed"); request = LASSO_SAMLP2_AUTHN_REQUEST(LASSO_PROFILE(spLoginContext)->request); ck_assert_msg(LASSO_IS_SAMLP2_AUTHN_REQUEST(request), "request should be authn_request"); request->IsPassive = 0; lasso_assign_string(request->NameIDPolicy->Format, LASSO_SAML2_NAME_IDENTIFIER_FORMAT_PERSISTENT); request->NameIDPolicy->AllowCreate = 1; relayState = "fake[]"; lasso_assign_string(LASSO_PROFILE(spLoginContext)->msg_relayState, relayState); rc = lasso_login_build_authn_request_msg(spLoginContext); ck_assert_msg(rc == 0, "lasso_login_build_authn_request_msg failed"); authnRequestUrl = LASSO_PROFILE(spLoginContext)->msg_url; ck_assert_msg(authnRequestUrl != NULL, "authnRequestUrl shouldn't be NULL"); authnRequestQuery = strchr(authnRequestUrl, '?')+1; ck_assert_msg(strlen(authnRequestQuery) > 0, "authnRequestQuery shouldn't be an empty string"); spLoginDump = lasso_node_dump(LASSO_NODE(spLoginContext)); ck_assert_msg(strstr(authnRequestQuery, "RelayState") != NULL, "authnRequestQuery should contain a RelayState parameter"); ck_assert_msg(strstr(authnRequestQuery, "fake%5B%5D") != NULL, "authnRequestQuery RelayState parameter should be encoded"); /* Identity provider singleSignOn, for a user having no federation. */ identityProviderContextDump = generateIdentityProviderContextDump(); idpContext = lasso_server_new_from_dump(identityProviderContextDump); idpLoginContext = lasso_login_new(idpContext); ck_assert_msg(idpLoginContext != NULL, "lasso_login_new() shouldn't have returned NULL"); check_good_rc(lasso_login_process_authn_request_msg(idpLoginContext, authnRequestQuery)); check_true(lasso_login_must_authenticate(idpLoginContext)); check_equals(idpLoginContext->protocolProfile, LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_ART); check_false(lasso_login_must_ask_for_consent(idpLoginContext)); check_not_null(idpLoginContext->parent.msg_relayState); check_equals(lasso_strisnotequal(idpLoginContext->parent.msg_relayState,relayState), 0); check_good_rc(lasso_login_validate_request_msg(idpLoginContext, 1, /* authentication_result */ 0 /* is_consent_obtained */ )); check_good_rc(lasso_login_build_assertion(idpLoginContext, LASSO_SAML_AUTHENTICATION_METHOD_PASSWORD, "FIXME: authenticationInstant", "FIXME: reauthenticateOnOrAfter", "FIXME: notBefore", "FIXME: notOnOrAfter")); assertion = (LassoSaml2Assertion*)lasso_login_get_assertion(idpLoginContext); check_true(LASSO_IS_SAML2_ASSERTION(assertion)); lasso_saml2_assertion_set_basic_conditions(LASSO_SAML2_ASSERTION(assertion), 60, 120, FALSE); lasso_release_gobject(assertion); check_good_rc(lasso_login_build_artifact_msg(idpLoginContext, LASSO_HTTP_METHOD_ARTIFACT_GET)); idpIdentityContextDump = lasso_identity_dump(LASSO_PROFILE(idpLoginContext)->identity); check_not_null(idpIdentityContextDump); idpSessionContextDump = lasso_session_dump(LASSO_PROFILE(idpLoginContext)->session); check_not_null(idpSessionContextDump); responseUrl = LASSO_PROFILE(idpLoginContext)->msg_url; check_not_null(responseUrl); responseQuery = strchr(responseUrl, '?')+1; ck_assert_msg(strlen(responseQuery) > 0, "responseQuery shouldn't be an empty string"); check_not_null(strstr(responseQuery, "RelayState")); check_not_null(strstr(responseQuery, "fake%5B%5D")); lasso_assign_string(serviceProviderId, LASSO_PROFILE(idpLoginContext)->remote_providerID); check_not_null(serviceProviderId); /* Service provider assertion consumer */ lasso_server_destroy(spContext); lasso_login_destroy(spLoginContext); spContext = lasso_server_new_from_dump(serviceProviderContextDump); spLoginContext = lasso_login_new_from_dump(spContext, spLoginDump); check_good_rc(lasso_login_init_request(spLoginContext, responseQuery, LASSO_HTTP_METHOD_ARTIFACT_GET)); check_not_null(spLoginContext->parent.msg_relayState); check_equals(lasso_strisnotequal(spLoginContext->parent.msg_relayState,relayState), 0); check_good_rc(lasso_login_build_request_msg(spLoginContext)); soapRequestMsg = LASSO_PROFILE(spLoginContext)->msg_body; check_not_null(soapRequestMsg); /* Identity provider SOAP endpoint */ lasso_server_destroy(idpContext); idpLoginDump = lasso_node_dump(LASSO_NODE(idpLoginContext)); lasso_login_destroy(idpLoginContext); idpContext = lasso_server_new_from_dump(identityProviderContextDump); idpLoginContext = lasso_login_new_from_dump(idpContext, idpLoginDump); check_good_rc(lasso_login_process_request_msg(idpLoginContext, soapRequestMsg)); check_good_rc(lasso_profile_set_session_from_dump(LASSO_PROFILE(idpLoginContext), idpSessionContextDump)); check_good_rc(lasso_login_build_response_msg(idpLoginContext, serviceProviderId)); soapResponseMsg = LASSO_PROFILE(idpLoginContext)->msg_body; check_not_null(soapResponseMsg); /* Service provider assertion consumer (step 2: process SOAP response) */ check_good_rc(lasso_login_process_response_msg(spLoginContext, soapResponseMsg)); check_good_rc(lasso_login_accept_sso(spLoginContext)); assertion = (LassoSaml2Assertion*)lasso_login_get_assertion(spLoginContext); check_true(LASSO_IS_SAML2_ASSERTION(assertion)); check_equals(lasso_saml2_assertion_validate_conditions(assertion, spLoginContext->parent.server->parent.ProviderID), LASSO_SAML2_ASSERTION_VALID); check_equals(lasso_saml2_assertion_validate_conditions(assertion, "coin"), LASSO_SAML2_ASSERTION_INVALID); lasso_release_gobject(assertion); check_not_null(LASSO_PROFILE(spLoginContext)->identity); spIdentityContextDump = lasso_identity_dump(LASSO_PROFILE(spLoginContext)->identity); check_not_null(spIdentityContextDump); spSessionDump = lasso_session_dump(LASSO_PROFILE(spLoginContext)->session); /* Test InResponseTo checking */ if (! strstr(soapResponseMsg, "EncryptedAssertion")) { found = strstr(soapResponseMsg, "Assertion"); check_not_null(found); found = strstr(found, "InResponseTo=\""); check_not_null(found); found[sizeof("InResponseTo=\"")] = '?'; lasso_set_flag("no-verify-signature"); check_not_equals(lasso_login_process_response_msg(spLoginContext, soapResponseMsg), 0); lasso_set_flag("verify-signature"); check_not_equals(lasso_login_accept_sso(spLoginContext), 0); } /* logout test */ /* generate a logout request */ check_not_null(idpLogoutContext = lasso_logout_new(idpContext)); check_good_rc(lasso_profile_set_session_from_dump(&idpLogoutContext->parent, idpSessionContextDump)); check_good_rc(lasso_logout_init_request(idpLogoutContext, NULL, LASSO_HTTP_METHOD_SOAP)); check_good_rc(lasso_logout_build_request_msg(idpLogoutContext)); check_not_null(idpLogoutContext->parent.msg_url); check_not_null(idpLogoutContext->parent.msg_body); check_null(idpLogoutContext->parent.msg_relayState); lasso_assign_string(logoutRequestSoapMessage, idpLogoutContext->parent.msg_body); check_not_null(logoutRequestSoapMessage); /* process the logout request */ check_not_null(spLogoutContext = lasso_logout_new(spContext)); check_good_rc(lasso_profile_set_session_from_dump(&spLogoutContext->parent, spSessionDump)); check_good_rc(lasso_logout_process_request_msg(spLogoutContext, logoutRequestSoapMessage)); lasso_release(logoutRequestSoapMessage); check_good_rc(lasso_logout_validate_request(spLogoutContext)); check_good_rc(lasso_logout_build_response_msg(spLogoutContext)); check_not_null(spLogoutContext->parent.msg_body); check_null(spLogoutContext->parent.msg_url); check_null(spLogoutContext->parent.msg_relayState); lasso_assign_string(logoutResponseSoapMessage, spLogoutContext->parent.msg_body); lasso_release_gobject(spLogoutContext); lasso_release_gobject(idpLogoutContext); /* process the response */ check_not_null(idpLogoutContext = lasso_logout_new(idpContext)); check_good_rc(lasso_profile_set_session_from_dump(&idpLogoutContext->parent, idpSessionContextDump)); check_good_rc(lasso_logout_process_response_msg(idpLogoutContext, logoutResponseSoapMessage)); lasso_release_gobject(idpLogoutContext); lasso_release_string(logoutResponseSoapMessage); g_free(idpLoginDump); g_free(serviceProviderId); g_free(serviceProviderContextDump); g_free(identityProviderContextDump); g_free(idpSessionContextDump); g_free(idpIdentityContextDump); g_free(spIdentityContextDump); g_free(spSessionDump); g_free(spLoginDump); g_object_unref(spContext); g_object_unref(idpContext); g_object_unref(spLoginContext); g_object_unref(idpLoginContext); } END_TEST START_TEST(test05_sso_idp_with_key_rollover) { LassoServer *idpContext1 = NULL; LassoServer *idpContext2 = NULL; LassoServer *spContext = NULL; LassoLogin *idpLoginContext1 = NULL; LassoLogin *idpLoginContext2 = NULL; LassoLogin *spLoginContext = NULL; /* Create an IdP context for IdP initiated SSO with private key 1 */ idpContext1 = lasso_server_new( TESTSDATADIR "idp11-multikey-saml2/metadata.xml", TESTSDATADIR "idp11-multikey-saml2/private-key-1.pem", NULL, /* Secret key to unlock private key */ TESTSDATADIR "idp11-multikey-saml2/certificate-1.pem"); check_not_null(idpContext1); check_good_rc(lasso_server_add_provider( idpContext1, LASSO_PROVIDER_ROLE_SP, TESTSDATADIR "/sp6-saml2/metadata.xml", NULL, NULL)); /* Create an IdP context for IdP initiated SSO with private key 2 */ idpContext2 = lasso_server_new( TESTSDATADIR "idp11-multikey-saml2/metadata.xml", TESTSDATADIR "idp11-multikey-saml2/private-key-2.pem", NULL, /* Secret key to unlock private key */ TESTSDATADIR "idp11-multikey-saml2/certificate-2.pem"); check_not_null(idpContext2); check_good_rc(lasso_server_add_provider( idpContext2, LASSO_PROVIDER_ROLE_SP, TESTSDATADIR "/sp6-saml2/metadata.xml", NULL, NULL)); /* Create an SP context */ spContext = lasso_server_new( TESTSDATADIR "/sp6-saml2/metadata.xml", TESTSDATADIR "/sp6-saml2/private-key.pem", NULL, /* Secret key to unlock private key */ NULL); check_not_null(spContext); check_good_rc(lasso_server_add_provider( spContext, LASSO_PROVIDER_ROLE_IDP, TESTSDATADIR "/idp11-multikey-saml2/metadata.xml", NULL, NULL)); /* Create login contexts */ idpLoginContext1 = lasso_login_new(idpContext1); check_not_null(idpLoginContext1); idpLoginContext2 = lasso_login_new(idpContext2); check_not_null(idpLoginContext2); spLoginContext = lasso_login_new(spContext); check_not_null(spLoginContext); /* Create first response signed with key 1*/ check_good_rc(lasso_login_init_idp_initiated_authn_request(idpLoginContext1, "http://sp6/metadata")); lasso_assign_string(LASSO_SAMLP2_AUTHN_REQUEST(idpLoginContext1->parent.request)->ProtocolBinding, LASSO_SAML2_METADATA_BINDING_POST); check_good_rc(lasso_login_process_authn_request_msg(idpLoginContext1, NULL)); check_good_rc(lasso_login_validate_request_msg(idpLoginContext1, 1, /* authentication_result */ 0 /* is_consent_obtained */ )); check_good_rc(lasso_login_build_assertion(idpLoginContext1, LASSO_SAML_AUTHENTICATION_METHOD_PASSWORD, "FIXME: authenticationInstant", "FIXME: reauthenticateOnOrAfter", "FIXME: notBefore", "FIXME: notOnOrAfter")); check_good_rc(lasso_login_build_authn_response_msg(idpLoginContext1)); check_not_null(idpLoginContext1->parent.msg_body); check_not_null(idpLoginContext1->parent.msg_url); /* Create second response signed with key 2 */ check_good_rc(lasso_login_init_idp_initiated_authn_request(idpLoginContext2, "http://sp6/metadata")); lasso_assign_string(LASSO_SAMLP2_AUTHN_REQUEST(idpLoginContext2->parent.request)->ProtocolBinding, LASSO_SAML2_METADATA_BINDING_POST); check_good_rc(lasso_login_process_authn_request_msg(idpLoginContext2, NULL)); check_good_rc(lasso_login_validate_request_msg(idpLoginContext2, 1, /* authentication_result */ 0 /* is_consent_obtained */ )); check_good_rc(lasso_login_build_assertion(idpLoginContext2, LASSO_SAML_AUTHENTICATION_METHOD_PASSWORD, "FIXME: authenticationInstant", "FIXME: reauthenticateOnOrAfter", "FIXME: notBefore", "FIXME: notOnOrAfter")); check_good_rc(lasso_login_build_authn_response_msg(idpLoginContext2)); check_not_null(idpLoginContext2->parent.msg_body); check_not_null(idpLoginContext2->parent.msg_url); /* Process response 1 */ check_good_rc(lasso_login_process_authn_response_msg(spLoginContext, idpLoginContext1->parent.msg_body)); check_good_rc(lasso_login_accept_sso(spLoginContext)); /* Process response 2 */ block_lasso_logs; check_good_rc(lasso_login_process_authn_response_msg(spLoginContext, idpLoginContext2->parent.msg_body)); unblock_lasso_logs; check_good_rc(lasso_login_accept_sso(spLoginContext)); /* Cleanup */ lasso_release_gobject(idpLoginContext1); lasso_release_gobject(idpLoginContext2); lasso_release_gobject(spLoginContext); lasso_release_gobject(idpContext1); lasso_release_gobject(idpContext2); lasso_release_gobject(spContext); } END_TEST #define make_context(ctx, server_prefix, server_suffix, provider_role, \ provider_prefix, provider_suffix) \ ctx = lasso_server_new( \ TESTSDATADIR server_prefix "/metadata" server_suffix ".xml", \ TESTSDATADIR server_prefix "/private-key" server_suffix ".pem", \ NULL, /* Secret key to unlock private key */ \ TESTSDATADIR server_prefix "/certificate" server_suffix ".pem"); \ check_not_null(ctx); \ check_good_rc(lasso_server_add_provider( \ ctx, \ provider_role, \ TESTSDATADIR provider_prefix "/metadata" provider_suffix ".xml", \ NULL, \ NULL)); \ providers = g_hash_table_get_values(ctx->providers); \ check_not_null(providers); \ lasso_provider_set_encryption_mode(LASSO_PROVIDER(providers->data), \ LASSO_ENCRYPTION_MODE_ASSERTION | LASSO_ENCRYPTION_MODE_NAMEID); \ g_list_free(providers); void sso_sp_with_key_rollover(LassoServer *idp_context, LassoServer *sp_context) { LassoLogin *idp_login_context; LassoLogin *sp_login_context; check_not_null(idp_login_context = lasso_login_new(idp_context)); check_not_null(sp_login_context = lasso_login_new(sp_context)); /* Create response */ check_good_rc(lasso_login_init_idp_initiated_authn_request(idp_login_context, "http://sp11/metadata")); lasso_assign_string(LASSO_SAMLP2_AUTHN_REQUEST(idp_login_context->parent.request)->ProtocolBinding, LASSO_SAML2_METADATA_BINDING_POST); lasso_assign_string(LASSO_SAMLP2_AUTHN_REQUEST(idp_login_context->parent.request)->NameIDPolicy->Format, LASSO_SAML2_NAME_IDENTIFIER_FORMAT_PERSISTENT); LASSO_SAMLP2_AUTHN_REQUEST(idp_login_context->parent.request)->NameIDPolicy->AllowCreate = 1; block_lasso_logs; check_good_rc(lasso_login_process_authn_request_msg(idp_login_context, NULL)); unblock_lasso_logs; check_good_rc(lasso_login_validate_request_msg(idp_login_context, 1, /* authentication_result */ 0 /* is_consent_obtained */ )); check_good_rc(lasso_login_build_assertion(idp_login_context, LASSO_SAML_AUTHENTICATION_METHOD_PASSWORD, "FIXME: authenticationInstant", "FIXME: reauthenticateOnOrAfter", "FIXME: notBefore", "FIXME: notOnOrAfter")); check_good_rc(lasso_login_build_authn_response_msg(idp_login_context)); check_not_null(idp_login_context->parent.msg_body); check_not_null(idp_login_context->parent.msg_url); /* Process response */ block_lasso_logs; check_good_rc(lasso_login_process_authn_response_msg(sp_login_context, idp_login_context->parent.msg_body)); unblock_lasso_logs; check_good_rc(lasso_login_accept_sso(sp_login_context)); /* Cleanup */ lasso_release_gobject(idp_login_context); lasso_release_gobject(sp_login_context); } START_TEST(test06_sso_sp_with_key_rollover) { LassoServer *idp_context_before_rollover = NULL; LassoServer *idp_context_after_rollover = NULL; LassoServer *sp_context_before_rollover = NULL; LassoServer *sp_context_after_rollover = NULL; GList *providers; /* Create an IdP context for IdP initiated SSO with provider metadata 1 */ make_context(idp_context_before_rollover, "idp6-saml2", "", LASSO_PROVIDER_ROLE_SP, "sp11-multikey-saml2", "-before-rollover") make_context(idp_context_after_rollover, "idp6-saml2", "", LASSO_PROVIDER_ROLE_SP, "sp11-multikey-saml2", "-after-rollover") make_context(sp_context_before_rollover, "sp11-multikey-saml2", "-before-rollover", LASSO_PROVIDER_ROLE_IDP, "idp6-saml2", "") lasso_server_set_encryption_private_key(sp_context_before_rollover, TESTSDATADIR "sp11-multikey-saml2/private-key-after-rollover.pem"); make_context(sp_context_after_rollover, "sp11-multikey-saml2", "-after-rollover", LASSO_PROVIDER_ROLE_IDP, "idp6-saml2", "") lasso_server_set_encryption_private_key(sp_context_after_rollover, TESTSDATADIR "sp11-multikey-saml2/private-key-before-rollover.pem"); /* Tests... */ sso_sp_with_key_rollover(idp_context_before_rollover, sp_context_before_rollover); sso_sp_with_key_rollover(idp_context_after_rollover, sp_context_before_rollover); sso_sp_with_key_rollover(idp_context_before_rollover, sp_context_after_rollover); sso_sp_with_key_rollover(idp_context_after_rollover, sp_context_after_rollover); /* Cleanup */ lasso_release_gobject(idp_context_before_rollover); lasso_release_gobject(idp_context_after_rollover); lasso_release_gobject(sp_context_before_rollover); lasso_release_gobject(sp_context_after_rollover); } END_TEST #define test07_make_context(ctx, server_prefix, provider_role, provider_prefix, key) \ ctx = lasso_server_new( \ TESTSDATADIR server_prefix "/metadata.xml", \ NULL, \ NULL, /* Secret key to unlock private key */ \ NULL); \ check_not_null(ctx); \ check_good_rc(lasso_server_add_provider( \ ctx, \ provider_role, \ TESTSDATADIR provider_prefix "/metadata.xml", \ NULL, \ NULL)); \ providers = g_hash_table_get_values(ctx->providers); \ check_not_null(providers); \ lasso_provider_set_server_signing_key(LASSO_PROVIDER(providers->data), \ key); \ lasso_provider_add_key(LASSO_PROVIDER(providers->data), key, FALSE); \ g_list_free(providers); typedef void (*SsoCallback)(LassoLogin *idp_login_context, LassoLogin *sp_login_context); static void sso_initiated_by_sp(LassoServer *idp_context, LassoServer *sp_context, SsoCallback sso_callback) { LassoLogin *idp_login_context; LassoLogin *sp_login_context; char *authn_request_query; check_not_null(idp_login_context = lasso_login_new(idp_context)); check_not_null(sp_login_context = lasso_login_new(sp_context)); /* Create response */ check_good_rc(lasso_login_init_authn_request(sp_login_context, NULL, LASSO_HTTP_METHOD_REDIRECT)); lasso_assign_string(LASSO_SAMLP2_AUTHN_REQUEST(sp_login_context->parent.request)->ProtocolBinding, LASSO_SAML2_METADATA_BINDING_POST); lasso_assign_string(LASSO_SAMLP2_AUTHN_REQUEST(sp_login_context->parent.request)->NameIDPolicy->Format, LASSO_SAML2_NAME_IDENTIFIER_FORMAT_PERSISTENT); LASSO_SAMLP2_AUTHN_REQUEST(sp_login_context->parent.request)->NameIDPolicy->AllowCreate = 1; check_good_rc(lasso_login_build_authn_request_msg(sp_login_context)); check_not_null(sp_login_context->parent.msg_url); authn_request_query = strchr(sp_login_context->parent.msg_url, '?'); check_not_null(authn_request_query); authn_request_query += 1; check_good_rc(lasso_login_process_authn_request_msg(idp_login_context, authn_request_query)); check_good_rc(lasso_login_validate_request_msg(idp_login_context, 1, /* authentication_result */ 0 /* is_consent_obtained */ )); check_good_rc(lasso_login_build_assertion(idp_login_context, LASSO_SAML_AUTHENTICATION_METHOD_PASSWORD, "FIXME: authenticationInstant", "FIXME: reauthenticateOnOrAfter", "FIXME: notBefore", "FIXME: notOnOrAfter")); check_good_rc(lasso_login_build_authn_response_msg(idp_login_context)); check_not_null(idp_login_context->parent.msg_body); check_not_null(idp_login_context->parent.msg_url); /* Process response */ check_good_rc(lasso_login_process_authn_response_msg(sp_login_context, idp_login_context->parent.msg_body)); check_good_rc(lasso_login_accept_sso(sp_login_context)); if (sso_callback) { sso_callback(idp_login_context, sp_login_context); } /* Cleanup */ lasso_release_gobject(idp_login_context); lasso_release_gobject(sp_login_context); } START_TEST(test07_sso_sp_with_hmac_sha256_signatures) { LassoServer *idp_context = NULL; LassoServer *sp_context = NULL; GList *providers; LassoKey *key = NULL; /* Create the shared key */ key = lasso_key_new_for_signature_from_memory("xxxxxxxxxxxxxxxx", 16, NULL, LASSO_SIGNATURE_METHOD_HMAC_SHA256, NULL); check_true(LASSO_IS_KEY(key)); /* Create an IdP context for IdP initiated SSO with provider metadata 1 */ test07_make_context(idp_context, "idp6-saml2", LASSO_PROVIDER_ROLE_SP, "sp6-saml2", key) test07_make_context(sp_context, "sp6-saml2", LASSO_PROVIDER_ROLE_IDP, "idp6-saml2", key) block_lasso_logs; sso_initiated_by_sp(idp_context, sp_context, NULL); unblock_lasso_logs; /* Cleanup */ lasso_release_gobject(idp_context); lasso_release_gobject(sp_context); lasso_release_gobject(key); } END_TEST typedef struct { char *assertion_consumer_service_url; char *protocol_binding; gboolean use_assertion_consumer_service_idx; int assertion_consumer_service_idx; gboolean stop_after_build_assertion; } SsoSettings; static void sso_initiated_by_sp2(LassoServer *idp_context, LassoServer *sp_context, SsoSettings sso_settings) { LassoLogin *idp_login_context; LassoLogin *sp_login_context; LassoSamlp2AuthnRequest *request; char *authn_request_query; check_not_null(idp_login_context = lasso_login_new(idp_context)); check_not_null(sp_login_context = lasso_login_new(sp_context)); /* Create response */ check_good_rc(lasso_login_init_authn_request(sp_login_context, NULL, LASSO_HTTP_METHOD_REDIRECT)); request = (LassoSamlp2AuthnRequest*)sp_login_context->parent.request; if (sso_settings.assertion_consumer_service_url) { lasso_assign_string(request->AssertionConsumerServiceURL, sso_settings.assertion_consumer_service_url); } if (sso_settings.protocol_binding) { lasso_assign_string(request->ProtocolBinding, sso_settings.protocol_binding); } if (sso_settings.use_assertion_consumer_service_idx) { request->AssertionConsumerServiceIndex = sso_settings.assertion_consumer_service_idx; } lasso_assign_string(LASSO_SAMLP2_AUTHN_REQUEST(sp_login_context->parent.request)->NameIDPolicy->Format, LASSO_SAML2_NAME_IDENTIFIER_FORMAT_PERSISTENT); LASSO_SAMLP2_AUTHN_REQUEST(sp_login_context->parent.request)->NameIDPolicy->AllowCreate = 1; check_good_rc(lasso_login_build_authn_request_msg(sp_login_context)); check_not_null(sp_login_context->parent.msg_url); authn_request_query = strchr(sp_login_context->parent.msg_url, '?'); check_not_null(authn_request_query); authn_request_query += 1; check_good_rc(lasso_login_process_authn_request_msg(idp_login_context, authn_request_query)); check_good_rc(lasso_login_validate_request_msg(idp_login_context, 1, /* authentication_result */ 0 /* is_consent_obtained */ )); check_good_rc(lasso_login_build_assertion(idp_login_context, LASSO_SAML_AUTHENTICATION_METHOD_PASSWORD, "FIXME: authenticationInstant", "FIXME: reauthenticateOnOrAfter", "FIXME: notBefore", "FIXME: notOnOrAfter")); if (sso_settings.stop_after_build_assertion) { goto cleanup; } check_good_rc(lasso_login_build_authn_response_msg(idp_login_context)); check_not_null(idp_login_context->parent.msg_body); check_not_null(idp_login_context->parent.msg_url); /* Process response */ check_good_rc(lasso_login_process_authn_response_msg(sp_login_context, idp_login_context->parent.msg_body)); check_good_rc(lasso_login_accept_sso(sp_login_context)); /* Cleanup */ cleanup: lasso_release_gobject(idp_login_context); lasso_release_gobject(sp_login_context); } START_TEST(test08_test_authnrequest_flags) { LassoServer *idp_context = NULL; LassoServer *sp_context = NULL; GList *providers; /* Create an IdP context for IdP initiated SSO with provider metadata 1 */ make_context(idp_context, "idp5-saml2", "", LASSO_PROVIDER_ROLE_SP, "sp5-saml2", "") make_context(sp_context, "sp5-saml2", "", LASSO_PROVIDER_ROLE_IDP, "idp5-saml2", "") block_lasso_logs; sso_initiated_by_sp2(idp_context, sp_context, (SsoSettings) { .use_assertion_consumer_service_idx = 1, .assertion_consumer_service_idx = 0, .stop_after_build_assertion = 1, }); sso_initiated_by_sp2(idp_context, sp_context, (SsoSettings) { .assertion_consumer_service_url = "http://sp5/singleSignOnPost", .stop_after_build_assertion = 1, }); sso_initiated_by_sp2(idp_context, sp_context, (SsoSettings) { .protocol_binding = LASSO_SAML2_METADATA_BINDING_ARTIFACT, .stop_after_build_assertion = 1, }); sso_initiated_by_sp2(idp_context, sp_context, (SsoSettings) { .assertion_consumer_service_url = "http://sp5/singleSignOnPost", .protocol_binding = LASSO_SAML2_METADATA_BINDING_POST, .stop_after_build_assertion = 1, }); sso_initiated_by_sp2(idp_context, sp_context, (SsoSettings) { .assertion_consumer_service_url = "http://sp5/singleSignOnArtifact", .protocol_binding = LASSO_SAML2_METADATA_BINDING_ARTIFACT, .stop_after_build_assertion = 1, }); sso_initiated_by_sp2(idp_context, sp_context, (SsoSettings) { .assertion_consumer_service_url = "http://sp5/singleSignOnPostAndArtifact", .protocol_binding = LASSO_SAML2_METADATA_BINDING_ARTIFACT, .stop_after_build_assertion = 1, }); sso_initiated_by_sp2(idp_context, sp_context, (SsoSettings) { .assertion_consumer_service_url = "http://sp5/singleSignOnPostAndArtifact", .protocol_binding = LASSO_SAML2_METADATA_BINDING_POST, .stop_after_build_assertion = 1, }); unblock_lasso_logs; /* Cleanup */ lasso_release_gobject(idp_context); lasso_release_gobject(sp_context); } END_TEST typedef enum { ECP_IDP_LIST_NONE, ECP_IDP_LIST_ECP, ECP_IDP_LIST_BOGUS, } EcpIdpListVariant; /* Build an IDPList whose members have an endpoint supporing * the protocol_type and http_method. */ static LassoNode * get_idp_list(const LassoServer *server, LassoMdProtocolType protocol_type, LassoHttpMethod http_method) { GList *idp_entity_ids = NULL; GList *entity_id = NULL; GList *idp_entries = NULL; LassoSamlp2IDPList *idp_list; LassoSamlp2IDPEntry *idp_entry; idp_list = LASSO_SAMLP2_IDP_LIST(lasso_samlp2_idp_list_new()); idp_entity_ids = lasso_server_get_filtered_provider_list(server, LASSO_PROVIDER_ROLE_IDP, protocol_type, http_method); for (entity_id = g_list_first(idp_entity_ids); entity_id != NULL; entity_id = g_list_next(entity_id)) { idp_entry = LASSO_SAMLP2_IDP_ENTRY(lasso_samlp2_idp_entry_new()); idp_entry->ProviderID = g_strdup(entity_id->data); idp_entry->Name = g_strdup_printf("[NAME] %s", idp_entry->ProviderID); idp_entry->Loc = g_strdup_printf("[LOCATION] %s", idp_entry->ProviderID); idp_entries = g_list_append(idp_entries, idp_entry); } lasso_release_list_of_strings(idp_entity_ids); idp_list->IDPEntry = idp_entries; return LASSO_NODE(idp_list); } static LassoNode * get_bogus_idp_list() { char *idp_entity_ids[] = {"http://bogus_1/metadata", NULL}; char **idp_entity_id_iter = NULL; char *entity_id = NULL; GList *idp_entries = NULL; LassoSamlp2IDPList *idp_list; LassoSamlp2IDPEntry *idp_entry; idp_list = LASSO_SAMLP2_IDP_LIST(lasso_samlp2_idp_list_new()); for (idp_entity_id_iter = idp_entity_ids, entity_id = *idp_entity_id_iter; *idp_entity_id_iter != NULL; idp_entity_id_iter++) { idp_entry = LASSO_SAMLP2_IDP_ENTRY(lasso_samlp2_idp_entry_new()); idp_entry->ProviderID = g_strdup(entity_id); idp_entry->Name = g_strdup_printf("[NAME] %s", idp_entry->ProviderID); idp_entry->Loc = g_strdup_printf("[LOCATION] %s", idp_entry->ProviderID); idp_entries = g_list_append(idp_entries, idp_entry); } idp_list->IDPEntry = idp_entries; return LASSO_NODE(idp_list); } static void validate_idp_list(LassoEcp *ecp, EcpIdpListVariant ecpIDPListVariant, LassoSamlp2IDPList *idp_list) { if (ecpIDPListVariant == ECP_IDP_LIST_NONE) { check_null(ecp->sp_idp_list); check_null(ecp->known_sp_provided_idp_entries_supporting_ecp); } else if (ecpIDPListVariant == ECP_IDP_LIST_ECP || ecpIDPListVariant == ECP_IDP_LIST_BOGUS) { GList *ecp_iter, *src_iter; check_not_null(ecp->sp_idp_list); check_not_null(idp_list); check_null(ecp->sp_idp_list->GetComplete); check_null(idp_list->GetComplete); check_equals(g_list_length(ecp->sp_idp_list->IDPEntry), g_list_length(idp_list->IDPEntry)); for (ecp_iter = g_list_first(ecp->sp_idp_list->IDPEntry), src_iter = g_list_first(idp_list->IDPEntry); ecp_iter && src_iter; ecp_iter = g_list_next(ecp_iter), src_iter = g_list_next(src_iter)) { LassoSamlp2IDPEntry *ecp_item, *src_item; ecp_item = LASSO_SAMLP2_IDP_ENTRY(ecp_iter->data); src_item = LASSO_SAMLP2_IDP_ENTRY(src_iter->data); check_not_null(ecp_item->ProviderID); check_not_null(src_item->ProviderID); check_str_equals(ecp_item->ProviderID, src_item->ProviderID); check_not_null(ecp_item->Name); check_not_null(src_item->Name); check_str_equals(ecp_item->Name, src_item->Name); check_not_null(ecp_item->Loc); check_not_null(src_item->Loc); check_str_equals(ecp_item->Loc, src_item->Loc); } if (ecpIDPListVariant == ECP_IDP_LIST_ECP) { check_not_null(ecp->known_sp_provided_idp_entries_supporting_ecp); check_equals(g_list_length(ecp->known_sp_provided_idp_entries_supporting_ecp), g_list_length(idp_list->IDPEntry)); for (ecp_iter = g_list_first(ecp->known_sp_provided_idp_entries_supporting_ecp), src_iter = g_list_first(idp_list->IDPEntry); ecp_iter && src_iter; ecp_iter = g_list_next(ecp_iter), src_iter = g_list_next(src_iter)) { LassoSamlp2IDPEntry *ecp_item, *src_item; ecp_item = LASSO_SAMLP2_IDP_ENTRY(ecp_iter->data); src_item = LASSO_SAMLP2_IDP_ENTRY(src_iter->data); check_not_null(ecp_item->ProviderID); check_not_null(src_item->ProviderID); check_str_equals(ecp_item->ProviderID, src_item->ProviderID); check_not_null(ecp_item->Name); check_not_null(src_item->Name); check_str_equals(ecp_item->Name, src_item->Name); check_not_null(ecp_item->Loc); check_not_null(src_item->Loc); check_str_equals(ecp_item->Loc, src_item->Loc); } } else { check_null(ecp->known_sp_provided_idp_entries_supporting_ecp); } } check_equals(g_list_length(ecp->known_idp_entity_ids_supporting_ecp), 1); check_str_equals((char*)g_list_nth(ecp->known_idp_entity_ids_supporting_ecp, 0)->data, "http://idp5/metadata"); } void test_ecp(EcpIdpListVariant ecpIDPListVariant, LassoProfileSignatureHint signature_hint, LassoProfileSignatureVerifyHint signature_verify_hint) { char *serviceProviderContextDump = NULL, *identityProviderContextDump = NULL; LassoServer *spContext = NULL, *ecpContext=NULL, *idpContext = NULL; LassoLogin *spLoginContext = NULL, *idpLoginContext = NULL; LassoEcp *ecp = NULL; LassoSamlp2AuthnRequest *request = NULL; gboolean is_passive = FALSE; char *provider_name = NULL; char *relayState = NULL; char *messageID = NULL; char *extracted_messageID = NULL; char *spPaosRequestMsg = NULL; char *ecpSoapRequestMsg = NULL; char *idpSoapResponseMsg = NULL; char *ecpPaosResponseMsg = NULL; char *spLoginDump = NULL; LassoSaml2Assertion *assertion; LassoSamlp2IDPList *idp_list = NULL; /* * SAML2 Profile for ECP (Section 4.2) defines these steps for an ECP * transaction * * 1. ECP issues HTTP Request to SP * 2. SP issues to ECP using PAOS * 3. ECP determines IdP * 4. ECP conveys to IdP using SOAP * 5. IdP identifies principal * 6. IdP issues to ECP, targeted at SP using SOAP * 7. ECP conveys to SP using PAOS * 8. SP grants or denies access to principal */ /* * Act as the SP who generates an AuthnRequest & conveys it in PAOS */ /* Create new SP Login Context */ serviceProviderContextDump = generateServiceProviderContextDump(); spContext = lasso_server_new_from_dump(serviceProviderContextDump); spLoginContext = lasso_login_new(spContext); check_not_null(spLoginContext); lasso_profile_set_signature_hint(LASSO_PROFILE(spLoginContext), signature_hint); lasso_profile_set_signature_verify_hint(LASSO_PROFILE(spLoginContext), signature_verify_hint); check_good_rc(lasso_login_init_authn_request(spLoginContext, "http://idp5/metadata", LASSO_HTTP_METHOD_PAOS)); /* Set PAOS authn request parameters */ request = LASSO_SAMLP2_AUTHN_REQUEST(LASSO_PROFILE(spLoginContext)->request); ck_assert_msg(LASSO_IS_SAMLP2_AUTHN_REQUEST(request), "request should be authn_request"); request->IsPassive = is_passive; lasso_assign_string(request->NameIDPolicy->Format, LASSO_SAML2_NAME_IDENTIFIER_FORMAT_PERSISTENT); request->NameIDPolicy->AllowCreate = 1; provider_name = "test_sp_001"; lasso_assign_string(request->ProviderName, provider_name); relayState = "fake[]"; lasso_assign_string(LASSO_PROFILE(spLoginContext)->msg_relayState, relayState); messageID = "id-1234"; lasso_profile_set_message_id(LASSO_PROFILE(spLoginContext), messageID); if (ecpIDPListVariant == ECP_IDP_LIST_ECP) { idp_list = LASSO_SAMLP2_IDP_LIST(get_idp_list(spContext, LASSO_MD_PROTOCOL_TYPE_SINGLE_SIGN_ON, LASSO_HTTP_METHOD_SOAP)); lasso_profile_set_idp_list(LASSO_PROFILE(spLoginContext), LASSO_NODE(idp_list)); } else if (ecpIDPListVariant == ECP_IDP_LIST_BOGUS) { idp_list = LASSO_SAMLP2_IDP_LIST(get_bogus_idp_list()); lasso_profile_set_idp_list(LASSO_PROFILE(spLoginContext), LASSO_NODE(idp_list)); } /* Build PAOS authn request message */ check_good_rc(lasso_login_build_authn_request_msg(spLoginContext)); /* * spPaosRequestMsg is what will be sent back to the ECP client. * No reason to validate the contents of spPaosRequestMsg here * because in the next step the spPaosRequestMsg will be parsed * and we'll validate the parsed values. */ lasso_assign_string(spPaosRequestMsg, LASSO_PROFILE(spLoginContext)->msg_body); check_not_null(spPaosRequestMsg); check_null(LASSO_PROFILE(spLoginContext)->msg_url); check_not_null(strstr(spPaosRequestMsg, "RelayState")); /* Finished with SP Login Context, will create new one later */ lasso_server_destroy(spContext); spContext = NULL; spLoginDump = lasso_node_dump(LASSO_NODE(spLoginContext)); lasso_login_destroy(spLoginContext); spLoginContext = NULL; /* * Act as the ECP client who just received a PAOS request (spPaosRequestMsg). */ /* Create an ECP client & load an IdP */ ecpContext = lasso_server_new(NULL, NULL, NULL, NULL); lasso_provider_set_protocol_conformance(LASSO_PROVIDER(ecpContext), LASSO_PROTOCOL_SAML_2_0); lasso_server_add_provider(ecpContext, LASSO_PROVIDER_ROLE_IDP, TESTSDATADIR "/idp5-saml2/metadata.xml", NULL, NULL); ecp = lasso_ecp_new(ecpContext); check_not_null(ecp); /* parse the spPaosRequestMsg */ check_good_rc(lasso_ecp_process_authn_request_msg(ecp, spPaosRequestMsg)); /* Validate ECP properties received in the spPaosRequestMsg */ check_null(ecp->assertion_consumer_url); check_str_equals(ecp->response_consumer_url, "http://sp5/singleSignOnSOAP"); check_str_equals(ecp->message_id, messageID); check_str_equals(ecp->relaystate, relayState); check_str_equals(ecp->issuer->content, "http://sp5/metadata"); check_str_equals(ecp->provider_name, provider_name); check_equals(ecp->is_passive, is_passive); /* Validate ECP IdP list info & default IdP URL */ validate_idp_list(ecp, ecpIDPListVariant, idp_list); check_str_equals(LASSO_PROFILE(ecp)->msg_url, "http://idp5/singleSignOnSOAP"); /* * ecpSoapRequestMsg is what we'll post to the IdP at the msg_url. */ lasso_assign_string(ecpSoapRequestMsg, LASSO_PROFILE(ecp)->msg_body); check_not_null(ecpSoapRequestMsg); /* * Act as the IdP which just received the SOAP request (ecpSoapRequestMsg) */ /* Create an IdP */ identityProviderContextDump = generateIdentityProviderContextDump(); idpContext = lasso_server_new_from_dump(identityProviderContextDump); idpLoginContext = lasso_login_new(idpContext); check_not_null(idpLoginContext); lasso_profile_set_signature_hint(LASSO_PROFILE(idpLoginContext), signature_hint); lasso_profile_set_signature_verify_hint(LASSO_PROFILE(idpLoginContext), signature_verify_hint); /* Parse the ecpSoapRequestMsg */ check_good_rc(lasso_login_process_authn_request_msg(idpLoginContext, ecpSoapRequestMsg)); check_true(lasso_login_must_authenticate(idpLoginContext)); check_equals(idpLoginContext->protocolProfile, LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_LECP); check_false(lasso_login_must_ask_for_consent(idpLoginContext)); check_good_rc(lasso_login_validate_request_msg(idpLoginContext, 1, /* authentication_result */ 0 /* is_consent_obtained */ )); /* Build IdP response */ check_good_rc(lasso_login_build_assertion(idpLoginContext, LASSO_SAML_AUTHENTICATION_METHOD_PASSWORD, "FIXME: authenticationInstant", "FIXME: reauthenticateOnOrAfter", "FIXME: notBefore", "FIXME: notOnOrAfter")); assertion = (LassoSaml2Assertion*)lasso_login_get_assertion(idpLoginContext); check_true(LASSO_IS_SAML2_ASSERTION(assertion)); lasso_saml2_assertion_set_basic_conditions(LASSO_SAML2_ASSERTION(assertion), 60, 120, FALSE); lasso_release_gobject(assertion); /* Build IdP SOAP response message */ check_good_rc(lasso_login_build_response_msg(idpLoginContext, NULL)); /* idpSoapResponseMsg is what we'll send back to the ECP client */ lasso_assign_string(idpSoapResponseMsg, LASSO_PROFILE(idpLoginContext)->msg_body); check_not_null(idpSoapResponseMsg); /* * Resume acting as the ECP client, process IdP response */ check_good_rc(lasso_ecp_process_response_msg(ecp, idpSoapResponseMsg)); /* Validate ECP properties, only the assertion_consumer_url should have changed */ check_str_equals(ecp->assertion_consumer_url, "http://sp5/singleSignOnSOAP"); check_str_equals(ecp->response_consumer_url, "http://sp5/singleSignOnSOAP"); check_str_equals(ecp->response_consumer_url, ecp->assertion_consumer_url); /* MUST match! */ check_str_equals(ecp->message_id, messageID); check_str_equals(ecp->relaystate, relayState); check_str_equals(ecp->issuer->content, "http://sp5/metadata"); check_str_equals(ecp->provider_name, provider_name); check_equals(ecp->is_passive, is_passive); /* Validate ECP IdP list info */ validate_idp_list(ecp, ecpIDPListVariant, idp_list); lasso_assign_string(ecpPaosResponseMsg, LASSO_PROFILE(ecp)->msg_body); check_not_null(ecpPaosResponseMsg); check_str_equals(LASSO_PROFILE(ecp)->msg_url, ecp->assertion_consumer_url); /* Act as the SP again which has just been posted the ecpPaosResponseMsg */ /* Create new SP Login Context */ spContext = lasso_server_new_from_dump(serviceProviderContextDump); spLoginContext = lasso_login_new(spContext); check_not_null(spLoginContext); lasso_profile_set_signature_hint(LASSO_PROFILE(spLoginContext), signature_hint); lasso_profile_set_signature_verify_hint(LASSO_PROFILE(spLoginContext), signature_verify_hint); /* Parse the ecpPaosResponseMsg */ check_good_rc(lasso_login_process_paos_response_msg(spLoginContext, ecpPaosResponseMsg)); /* Verify we got back the same relayState and messageID */ check_str_equals(LASSO_PROFILE(spLoginContext)->msg_relayState, relayState); extracted_messageID = lasso_profile_get_message_id(LASSO_PROFILE(spLoginContext)); check_str_equals(extracted_messageID, messageID); lasso_release_string(extracted_messageID); g_free(serviceProviderContextDump); g_free(identityProviderContextDump); lasso_release_gobject(spContext); lasso_release_gobject(ecpContext); lasso_release_gobject(idpContext); lasso_release_gobject(spLoginContext); lasso_release_gobject(idpLoginContext); lasso_release_gobject(ecp); lasso_release_string(spLoginDump); lasso_release_string(spPaosRequestMsg); lasso_release_string(ecpSoapRequestMsg); lasso_release_string(idpSoapResponseMsg); lasso_release_string(ecpPaosResponseMsg); lasso_release_gobject(idp_list); } START_TEST(test09_ecp) { test_ecp(ECP_IDP_LIST_NONE, LASSO_PROFILE_SIGNATURE_HINT_MAYBE, LASSO_PROFILE_SIGNATURE_VERIFY_HINT_MAYBE); } END_TEST START_TEST(test10_ecp) { test_ecp(ECP_IDP_LIST_ECP, LASSO_PROFILE_SIGNATURE_HINT_MAYBE, LASSO_PROFILE_SIGNATURE_VERIFY_HINT_MAYBE); } END_TEST START_TEST(test11_ecp) { test_ecp(ECP_IDP_LIST_BOGUS, LASSO_PROFILE_SIGNATURE_HINT_MAYBE, LASSO_PROFILE_SIGNATURE_VERIFY_HINT_MAYBE); } END_TEST START_TEST(test12_ecp) { /* Maybe Sign */ test_ecp(ECP_IDP_LIST_NONE, LASSO_PROFILE_SIGNATURE_HINT_MAYBE, LASSO_PROFILE_SIGNATURE_VERIFY_HINT_MAYBE); test_ecp(ECP_IDP_LIST_NONE, LASSO_PROFILE_SIGNATURE_HINT_MAYBE, LASSO_PROFILE_SIGNATURE_VERIFY_HINT_FORCE); test_ecp(ECP_IDP_LIST_NONE, LASSO_PROFILE_SIGNATURE_HINT_MAYBE, LASSO_PROFILE_SIGNATURE_VERIFY_HINT_IGNORE); /* Force Sign */ test_ecp(ECP_IDP_LIST_NONE, LASSO_PROFILE_SIGNATURE_HINT_FORCE, LASSO_PROFILE_SIGNATURE_VERIFY_HINT_MAYBE); test_ecp(ECP_IDP_LIST_NONE, LASSO_PROFILE_SIGNATURE_HINT_FORCE, LASSO_PROFILE_SIGNATURE_VERIFY_HINT_FORCE); test_ecp(ECP_IDP_LIST_NONE, LASSO_PROFILE_SIGNATURE_HINT_FORCE, LASSO_PROFILE_SIGNATURE_VERIFY_HINT_IGNORE); /* Forbid Sign */ test_ecp(ECP_IDP_LIST_NONE, LASSO_PROFILE_SIGNATURE_HINT_FORBID, LASSO_PROFILE_SIGNATURE_VERIFY_HINT_IGNORE); } END_TEST void check_digest_method(G_GNUC_UNUSED LassoLogin *idp_login_context, LassoLogin *sp_login_context) { char *dump = lasso_node_debug((LassoNode*)sp_login_context->parent.response, 10); check_true(strstr(dump, "") != NULL); lasso_release_string(dump) } START_TEST(test13_sso_sp_with_rsa_sha256_signatures) { LassoServer *idp_context = NULL; LassoServer *sp_context = NULL; GList *providers; LassoKey *key = NULL; /* Create a key for signature algorithm RSA_SHA256 */ key = lasso_key_new_for_signature_from_file(TESTSDATADIR "idp6-saml2/private-key.pem", NULL, LASSO_SIGNATURE_METHOD_RSA_SHA256, NULL); check_true(LASSO_IS_KEY(key)); test07_make_context(idp_context, "idp6-saml2", LASSO_PROVIDER_ROLE_SP, "sp6-saml2", key) test07_make_context(sp_context, "sp6-saml2", LASSO_PROVIDER_ROLE_IDP, "idp6-saml2", key) block_lasso_logs; sso_initiated_by_sp(idp_context, sp_context, check_digest_method); unblock_lasso_logs; /* Cleanup */ lasso_release_gobject(idp_context); lasso_release_gobject(sp_context); lasso_release_gobject(key); } END_TEST Suite* login_saml2_suite() { Suite *s = suite_create("Login using SAML 2.0"); TCase *tc_generate = tcase_create("Generate Server Contexts"); TCase *tc_spLogin = tcase_create("Login initiated by service provider"); TCase *tc_spLoginMemory = tcase_create("Login initiated by service provider without key loading"); TCase *tc_spSloSoap = tcase_create("Login initiated by service provider without key loading and with SLO SOAP"); TCase *tc_idpKeyRollover = tcase_create("Login initiated by idp, idp use two differents signing keys (simulate key roll-over)"); TCase *tc_spKeyRollover = tcase_create("Login initiated by idp, sp use two differents encrypting keys (simulate key roll-over)"); TCase *tc_hmacSignature = tcase_create("Login initiated by sp, using shared-key signature"); TCase *tc_ecp = tcase_create("ECP Login"); suite_add_tcase(s, tc_generate); suite_add_tcase(s, tc_spLogin); suite_add_tcase(s, tc_spLoginMemory); suite_add_tcase(s, tc_spSloSoap); suite_add_tcase(s, tc_idpKeyRollover); suite_add_tcase(s, tc_spKeyRollover); suite_add_tcase(s, tc_hmacSignature); suite_add_tcase(s, tc_ecp); tcase_add_test(tc_generate, test01_saml2_generateServersContextDumps); tcase_add_test(tc_spLogin, test02_saml2_serviceProviderLogin); tcase_add_test(tc_spLoginMemory, test03_saml2_serviceProviderLogin); tcase_add_test(tc_spSloSoap, test04_sso_then_slo_soap); tcase_add_test(tc_idpKeyRollover, test05_sso_idp_with_key_rollover); tcase_add_test(tc_spKeyRollover, test06_sso_sp_with_key_rollover); tcase_add_test(tc_hmacSignature, test07_sso_sp_with_hmac_sha256_signatures); tcase_add_test(tc_spLogin, test08_test_authnrequest_flags); tcase_add_test(tc_ecp, test09_ecp); tcase_add_test(tc_ecp, test10_ecp); tcase_add_test(tc_ecp, test11_ecp); tcase_add_test(tc_ecp, test12_ecp); tcase_add_test(tc_spLogin, test13_sso_sp_with_rsa_sha256_signatures); return s; } lasso-2.8.2/tests/PaxHeaders/tests2.c0000644000000000000000000000013214114336625014461 xustar0030 mtime=1630649749.886437648 30 atime=1678814249.929549983 30 ctime=1678814321.209954448 lasso-2.8.2/tests/tests2.c0000644000175000017500000000140014114336625017724 0ustar00bdauvergnebdauvergne00000000000000#include "../lasso/lasso.h" #include "../lasso/xml/xml.h" #include #include void load(char *file) { LassoNode *node = NULL; char *content; size_t len; xmlNode *xmlnode; g_file_get_contents(file, &content, &len, NULL); node = lasso_node_new_from_dump(content); g_free(content); xmlnode = lasso_node_get_xmlNode(node, TRUE); content = lasso_node_dump(node); g_free(content); content = lasso_node_export_to_soap(node); g_free(content); g_object_unref(node); xmlFreeNode(xmlnode); } int main(G_GNUC_UNUSED int argc, G_GNUC_UNUSED char **argv) { lasso_init(); load(SRCDIR "/data/response-1"); load(SRCDIR "/data/response-2"); load(SRCDIR "/data/response-3"); load(SRCDIR "/data/response-4"); lasso_shutdown(); return 0; } lasso-2.8.2/tests/PaxHeaders/assertion_query_saml2.c0000644000000000000000000000013114114336625017566 xustar0030 mtime=1630649749.886437648 29 atime=1678814248.96154451 30 ctime=1678814321.209954448 lasso-2.8.2/tests/assertion_query_saml2.c0000644000175000017500000000474314114336625023047 0ustar00bdauvergnebdauvergne00000000000000/* * Lasso library C unit tests * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include #include #include #include #include "../lasso/lasso.h" #include "../lasso/utils.h" #include "../lasso/backward_comp.h" #include "../lasso/xml/saml-2.0/saml2_xsd.h" #include "../bindings/ghashtable.h" #include "tests.h" inline static char* generateIdentityProviderContextDump() { LassoServer *serverContext; GList *providers; char *ret; serverContext = lasso_server_new( TESTSDATADIR "/idp6-saml2/metadata.xml", TESTSDATADIR "/idp6-saml2/private-key.pem", NULL, /* Secret key to unlock private key */ NULL); lasso_server_add_provider( serverContext, LASSO_PROVIDER_ROLE_SP, TESTSDATADIR "/sp5-saml2/metadata.xml", NULL, NULL); providers = g_hash_table_get_values(serverContext->providers); lasso_provider_set_encryption_mode(LASSO_PROVIDER(providers->data), LASSO_ENCRYPTION_MODE_ASSERTION | LASSO_ENCRYPTION_MODE_NAMEID); ret = lasso_server_dump(serverContext); g_object_unref(serverContext); return ret; } inline static char* generateServiceProviderContextDump() { LassoServer *serverContext; char *ret; serverContext = lasso_server_new( TESTSDATADIR "/sp5-saml2/metadata.xml", TESTSDATADIR "/sp5-saml2/private-key.pem", NULL, /* Secret key to unlock private key */ NULL); lasso_server_add_provider( serverContext, LASSO_PROVIDER_ROLE_IDP, TESTSDATADIR "/idp6-saml2/metadata.xml", NULL, NULL); ret = lasso_server_dump(serverContext); g_object_unref(serverContext); return ret; } Suite* assertion_query_suite() { Suite *s = suite_create("Assertion Query"); TCase *tc_metadata_access = tcase_create("Extended metadata access"); suite_add_tcase(s, tc_metadata_access); return s; } lasso-2.8.2/tests/PaxHeaders/data0000644000000000000000000000013214404126161013717 xustar0030 mtime=1678814321.541956338 30 atime=1678814326.421984131 30 ctime=1678814321.541956338 lasso-2.8.2/tests/data/0000755000175000017500000000000014404126161017244 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tests/data/PaxHeaders/ca1-la0000644000000000000000000000013213766621500014764 xustar0030 mtime=1608196928.938896744 30 atime=1678814326.421984131 30 ctime=1678814321.261954744 lasso-2.8.2/tests/data/ca1-la/0000755000175000017500000000000013766621500020311 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tests/data/ca1-la/PaxHeaders/jks.keystore0000644000000000000000000000013213766621500017417 xustar0030 mtime=1608196928.938896744 30 atime=1678098071.333499588 30 ctime=1678814321.261954744 lasso-2.8.2/tests/data/ca1-la/jks.keystore0000644000175000017500000000235613766621500022675 0ustar00bdauvergnebdauvergne00000000000000þíþíAentr'ouvert liberty alliance test root certification authority #1þWÂ-%X.509t0‚p0‚X 0  *†H†÷ 0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #110U Entrouvert0 040813103637Z 290404103637Z0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #110U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚¼½PæôÝŠ¹…¨•KÎÈYÉñbKèËFG¯œæ¡-aòÚW¦äô×?}Ø8 âvO•“žä'µ œÔ JpF!iuÝf°5lϾ-o 9ºÙËÄ?^s_®ì([xcÑ«½æ ÚÁ‘3¥W]O(µΩ®‡§jy¢'h¤ … RKsÇ€ íUD½š†8XJKõžY[çmèv„‰˜>Ð}Äf-Ô~a˜x“ÂhA3Ÿ·AuIÑMgx›Ry-ˆoê {Œ‹":6l£5dfüº¥_‰`K„Üd=ž#QºËýƒa l¼ŒŒêšYÝ3ì¦M$«ç Jæ"K>¡T MÅt×VWC{&74 ÍÅŽÚëZhòîÎS™Å”†G(9¤»ä3tÖíú”´Ä ÇžAü/Æ0 p‡Bîô˜ Û0ÑM;œÊPÿßX—wcÑHý1Ünb„Û5®²’úø”ü§¤·[A;_tæ7>Ko„ vOt\|·Ú3¶ˆ¦o(`ïá?LbÁÏ ¹¨i}ÅúzÞðva2PpÕç \½V›]ƒñø”ñlasso-2.8.2/tests/data/ca1-la/PaxHeaders/certificate.pem0000644000000000000000000000013213766621500020026 xustar0030 mtime=1608196928.938896744 30 atime=1678098071.333499588 30 ctime=1678814321.261954744 lasso-2.8.2/tests/data/ca1-la/certificate.pem0000644000175000017500000000307613766621500023304 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN CERTIFICATE----- MIIEcDCCA1igAwIBAgIBADANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJGUjE0 MDIGA1UEAwwrRW50cm91dmVydCBMaWJlcnR5IEFsbGlhbmNlIHRlc3QgUm9vdCBD QSAjMTETMBEGA1UECgwKRW50cm91dmVydDAeFw0wNDA4MTMxMDM2MzdaFw0yOTA0 MDQxMDM2MzdaMFgxCzAJBgNVBAYTAkZSMTQwMgYDVQQDDCtFbnRyb3V2ZXJ0IExp YmVydHkgQWxsaWFuY2UgdGVzdCBSb290IENBICMxMRMwEQYDVQQKDApFbnRyb3V2 ZXJ0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvL1Q5vTdirmFqJVL zshZyfFiS+jLRkevnOYYoS1h8tpXAabk9NcfP33YOAnidk+Vk54H5Ce1DZwf1KBK cJBGIWl13WYDsDVsz74tbww5BrrZy8Q/XnNfruwoW3hj0au95gnawZEzpVddT5Ao tRTOqa6Hp2p5oicAaKSghQpSSwVzxxaACu1VRL2ahjhYSn9L9Z5ZW+dtAB4R6HaE EImYPtAZBX3EZi3UgX5hmHiTwmhBPEJ1tIzJP34y5+0eHyloCrEmysuK0NRKpHtH DdotPSCRdj16jEDYKjHeunauWVGcPMLrth4/vEqNEnDLbVfSO2LZlu4LK8jX0K7t P6pW8wIDAQABo4IBQzCCAT8wHQYDVR0OBBYEFD1RAUjcM/fCNO/Y/iQY0r8S2FqI MB8GA1UdIwQYMBaAFD1RAUjcM/fCNO/Y/iQY0r8S2FqIMA8GA1UdEwEB/wQFMAMB Af8wCwYDVR0PBAQDAgEGMCoGA1UdJQQjMCEGCCsGAQUFBwMBBgorBgEEAYI3CgMD BglghkgBhvhCBAEwEQYJYIZIAYb4QgEBBAQDAgEGMCYGA1UdEQQfMB2GG2h0dHA6 Ly9sYXNzby5lbnRyb3V2ZXJ0Lm9yZzAmBgNVHRIEHzAdhhtodHRwOi8vbGFzc28u ZW50cm91dmVydC5vcmcwUAYJYIZIAYb4QgENBEMWQUVudHInb3V2ZXJ0IExpYmVy dHkgQWxsaWFuY2UgdGVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICMx MA0GCSqGSIb3DQEBBQUAA4IBAQBPqgAG2Pj/g7D/WqPYXOJdx6O+PjOft0F1SdFN ZwN4m1J5LQWIb4HqCnsDjJ2LIjo2bKM1EGRm/LqlX4lgSxwYhJDcZD2eI1G6y/0e g2EKbLyMjOoVmlndfzPspk0kq+egHkrmIks+CKFUIE3FdNdWV0N7Jh43ATQLzRHF jtrrWmgS8gLuzlOZxZSGRyg5f6QAu+QzdNbt+pS0xCDHnkH8L8YwoHCHHkLu9JgM 2xww0U07nMpQ/98TWJd3Y9FI/THcbmKE2zUSrhuykvr4lPynpLdbQZ07X3TmNz5L b4QVCXZPdFx8t9oztoimbyhg7+E/A0xiwc8NuahpfcX6et7w -----END CERTIFICATE----- lasso-2.8.2/tests/data/PaxHeaders/lecp2-ssl0000644000000000000000000000013113766621500015531 xustar0029 mtime=1608196928.94689681 30 atime=1678814326.421984131 30 ctime=1678814321.409955587 lasso-2.8.2/tests/data/lecp2-ssl/0000755000175000017500000000000013766621500021057 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tests/data/lecp2-ssl/PaxHeaders/all.p120000644000000000000000000000013113766621500016702 xustar0029 mtime=1608196928.94689681 30 atime=1678098071.465500624 30 ctime=1678814321.409955587 lasso-2.8.2/tests/data/lecp2-ssl/all.p120000644000175000017500000001046013766621500022154 0ustar00bdauvergnebdauvergne000000000000000‚,0‚ò *†H†÷  ‚ã‚ß0‚Û0‚ ÷ *†H†÷  ‚ è0‚ ä0‚ Ý *†H†÷ 0 *†H†÷  0\ÏMKØ`€‚ °'üB)ÀîûîÜuZ÷G¹ãµÖò°7éAˆÈYû&R{Fêò° rKœ"ªKñ4NIâ훆ª\è9…Ñ=ö¾?È~¯5h¼.4.:š ðåÈz öx ×qŽ#dwfð±'ÝFô£7V§®môPyÁïŠò j’R,ƒlöå®ß뤚î¯j§-°¿ÜŽÂÒÊ}Øð}å¨Û ä®àt)5oR/'8àYŒÅ#ìýüX bÜŒu¨€㲌xÑŒë!XùVUe#ÉpÆKïº*…ù »CÏ£¤€(•szùéŸUõõ19ÅI%m= }¸ñ~-Üh]ÀBP§‘:ùªOhô¿·½bçÇ'Z±®»¥ Òa”˜BÓÈÿkÓ+ƒÈ%¥þ%i4ßþ|'aŽCòž\*WyÒ2pêË2ÒD†§iPOTÍÑi)ÜpØäÁDwÜÅDn(f·µô£òƒ@V2Œí0¤­‘óe#åõk*¤Ï•¿VÔ|IT_‚ÁmU²ÓCŠ¡í‹°œ²Î3ߢ£¢Hf7Õ{I„œcV!§Ò‡q‹‘5”ËuiSÅ7³'$ªÁÚ1Û¶4ÐRë«&)¸Üs¾O¤ùÛ`ßÅîˆÉæýþìûÑÃÊäç7]7ÈwßlNéUgW£Ž–~BkÓƒ\§u $x9 Õ/ž;uHóbí²,Ç«76÷2½dÐèAµèi º8~ ,߇düÝK»GbI\áÕé¤ËYh[Æ`~ %Bü »Ü%ý$´p$浂.ý=á¹ç òU€̈Y*DW@­+F­ S®XÄövÀ´ ŸDøPëoR0óITK´€”ᡪÄÃ}"¬Ì¾Qò‰P‘¡õ«UKW×bÝÿ”=ù¡—6ü5 “YF 6+ô¨£VÏU~WRôë=æZÓ2(×saØ~|Ö—6„ãá×¥^œ¥·®1¸o¨AË NŸùé)Ž?=S˜ˆczô­Ïìqz¶Ú+<˜çoF'Γñ£e†~o7oêU¿'ÖUÖµ˜ ŒØÖÍ“xgËÙ´óŠ!MúID:Ü<®UD‹Øf–V‚!¸/‡f\iŒR4©h„,ZicúEe¢NÞÂË¡ý¤²v<0S‘‡(o±ÃçJ+〭8j xÛk•.´W”qáj­S•9rÏs9W.©ˆQ ¼d·q<ý:ñš:¿$…Øü°g#µ 7Lu6$Vº0ó—Ì®M-ž×ÍcàÚ å™Â¦FÛù^/„3#ö'ì$¶*ÆOx¼B¶ÓšüÞ0bÖN)ß¡wžçÁ5¢4‰8·Œ-¾ Æß?[­¶tªÛ«ÈŒ¯0Ö€ÖŠÚüN§¸úMÕîç#J^·ã2B>cð±aÌK<އk¡#å“ìŸ §{Öpš¨of™JšŠ±P¸¨ÇÅÎýK Ë}óµÖ䬊pö5jkaÓÏb2ŽÄÑ×ì§a !®.Ã+<›Á(hBû4hUl¯A’ÇÞ‡ ç›)·<®;ói”ÝSî G.à‘ö°¹Æ¿Ö°¯ç\unM†þ¸©÷™8%Oí }<}ÿmú§q]ÌA§â±6,@äPÓ2Ð諒ó ²óœ.ì>;$Û­„› YÖ,† °¿ÃŠ:Ï2©r‡mAÕ$¥ª¼„Š”¬Ö'}ùña‰ÉŠåÐð¤U‚ìSLðžx§Ï"öý¢Ž‹Âð,ˆf¡!XUÇ(Ü«_9Æ™éòŠŒ?Ì)%iA\¬ ° Ds¯Æêbî ~-Ssâ,šç'IyÄ‚wÞº¼ÊÙÐkEÄtQ˵DÞ FzœhͪÆUx~+üôÝGLAúÖå)ˆ(‚¾ÛáÁ™ÏÓUsx±)Èý“ÈúMâ¯äÅhšÈtb&a62¹ÓcßKÐÜ~“£«„w§Õ[ŒGK8¢U›V†l¢ËN~/îA•Óòï1KíénJœX§$)Už7ŽÜS_îuVÃC4J§{¿rÏÐGàW0žÔ€×rµîµÖ©›èÔ«ï>ï«XôXâ,ÛüôÖ!Åsõ!,Çùiäg¶À"¯3Þ¨û_ “äœÁÕWÉCNŒ¶ŽÒqïݳÞ;V»”÷KFùú Ù 󪲉 á&m]{ãîZŸÎÚFµý”à¶éV)8¥­ºú „–,­âˆuXfB2FÊUþ_DÆî6ÉL¼ÌÔ¬†¢rC]+Ÿd7+ Ðqæò{j‚êõPú=¼k½ô2¢J~A%²ÙÉÅ‘^° ÿ;é‰Ge¹é*jM„®ú¦A <ÕÚµêV`ÓQ¶JÈMûçIS(N&ÂÈ„Hæh“ו^|í©IåëûÙ¶R 4„62*Ä»lÔ^ƒüLlgVî`º¶™BG§™Û]+ÿeEܾ(ÄÈþA:6"8Oº™ƒ¾½*Ê¥\uÈ÷^5Kèù…zڀǓwÇQ=‹²l·®ÎßwÆÙi@ÙVŠ¿¢0ìQ©Õƒ¥;y„šT\àÒ=þŸQb—§Ï_]–Ä0Ì6üVà †½ÌÍkÄ9‘ÂæÂžæh PÖ«û‰®aqÓï­È)î,é/foJ.;£óê'F¶'µD,s S¡ÏT5§¸96NY“q»ªrhú·øqª«³¸ªš¤€LÆ“¾ù/¯îûul–ËZv+’ŸíjBž“F.…°8¸Fj¬„ÓúãZâ˜Áõ4A1‹!ÑÒ8yb<´Áa ÃZ!rŸÅp’üX£I@ò¨Ċ®HHÃsIüÇ!Ëì›ÏCp-$a@©fi…ŒÇ(h3^|Ÿì»¿ çj«Í%í€Öl¦x˜1ãYŽÁ=g‚û7©Œi4_+õ¥¯‹XÙl÷¤7h9Wr«òC+üYôÅZzÙägën Ö .âDôvéŸÔô9Þ­è¥3åõ—›eKDŽPËèFâYgø‚#`¥=§m~è=UÒžç›ûö3ÆD:n9„†=á¡Ð1úbo/—>•a‹‰„&±´GЖæÚDMÿGÔo>%$$rLŒðr w·Ù4™<“m#±zó(î*-iŽ©EÔ5×¹:3Ñ\´`ˆþ^ÖÌ~kšêÒ§HY†‚òÀÉtës^Òž’Ť2M*y| ‰žƒÅðŠ™¡×èc)„m65j“ nsOV~a¶A•¼ô`ñrƒ²‘8C ¥É;ÿg } bÖX½r˜¤}uÇ=2þ#䆿7æ‹]ÞhlWN{ç$k§ f£ŠV¼´2¹5À³—ï Pv/8L£vÁàä­&*dõ£®•i(û z5‘{x0nq5f !°11uа]õ €ü^~ôüc’ó‰…‚Èü–mô$Ão_lßÅ{O?ç£`q®UÚ ³YGŸÎ“´U¤E¾—°²æ¬Í}qPÒA{a oÎHªWhŽŽ¤¬ë Dîƒõ¢¿§9xѾŒ…ψàiJ†3ŽqëçÑë_Åv$@Šê]3Lo¡Æ#q„R|X9f)©™ Mî`Ÿ(÷ ê9·d2\à›.Ž>0‚Ü *†H†÷  ‚Í‚É0‚Å0‚Á *†H†÷   ‚î0‚ê0 *†H†÷  0p¸ñÈÒ²+´‚ÈöE犓Âg'ꈨIñ(ÊÅðRmBwÚwCi‡ ¦2µžñbQ$>qPu…ï½³:ä‡;¦£ö 1È‚¥YÓ9ñ»fÂù…ÿ—ýU™q¥³Éä·±€T戱¢ß€ŽÖmõá$¢VÒ˜öm@‚~¦×J¿Ùý|L¼Š2÷`ˆk¡@xÊ´W]£žÐØ|gÿ3RŒ 'tïífì±…º`þÏ8*÷_¹är!&óEñaZiv)PBm´ñ¾Œ§¼ BpY¾2d/š¯’Ll+¤Š{µo[B·2nžÆR@Q²3]ÐÓ,ïÁÅçô7À¯f¯t;OCòélRe># „Ža; ˜9GµÚŒÜãµÍri:Œ$ºq™TÿžÍæ]ÒÉ‘59Àv]QÆ1z@#¡º¨5§ø©Z¶™'öQ“ö…&ÞpÒN¯Ũ¡éîŃôßßT.Í¢â)ÄÖ­ƒ„—ûçÍjBßµg1RÆ(}ÎMûeH ZgvGXú1 ÿoÔê ‡¡E-H·[ús…·™ÜÖ…úm*ôßGÞ•ág’¢§°l¢ÒÉNÄu ÓÆI»‰ñ»U»”D~ëeŒeÄÙÈíLÄÌÔ@ÀNXƸynšZÉèßpýüƌʤÅS•º¬á§óuŸx‹Bº$èžÃ0–ƒø8Bݼálå¸$;~¨Ð-€‘OÄÏ^Sˆ`WÆ ƒÞSñëF‡œ=A=uHsÓ@À.ûŒÓ'z{ëën åR_QwC‰° ~!7ûe8ôŽÅ<¹Á1X‰DBKî’7'ó'Q®Ó$L tH73 Æ?wCB·6níÎɰ˜ô^Pc¤…w-g@ÖÒR‹5Z„áhRú'æwõöPM±Õò˜‰ûKnëÓ¼`“säÝÖ/*܆íöäQr&+^^—{¾Ù¥]/ò´ú]K¶z0 Xó+ò1mZ­î¦k¤Íeä!ìîEí ~” øÍM|ÓL±Im»›þ«GM‰ØN­;/lË€.WI!I@ÐÜÉßUáPœ=­dSCv< ‹KX–dÇA½hÉœpÙ¨«B—;|‘å«È½n¸Ì‘Ò7+e4×éçÀÿI4 • WÜdWEþng ]…¯'`ëÞÊBT:po{íœÆ4w¾+ÁH6NåÄ‚{Lì^Ÿ P íÖî¾× Et¹3<>’Ñͽik“¿U–Ÿ|fµ#<¿Z‚Ø/v…~g,nÕxd/³/†#"0— *†H†÷  1‰†Entrouvert SSL Liberty Alliance LECP #2 web server test certificate010!0 +\ž_x—.æÈ¶üušöÃÂüô”pÒ<|èlasso-2.8.2/tests/data/lecp2-ssl/PaxHeaders/jks.keystore0000644000000000000000000000013113766621500020164 xustar0029 mtime=1608196928.94689681 30 atime=1678098071.465500624 30 ctime=1678814321.409955587 lasso-2.8.2/tests/data/lecp2-ssl/jks.keystore0000644000175000017500000001135313766621500023440 0ustar00bdauvergnebdauvergne00000000000000þíþírootþWÀ.ÄX.5090‚Œ0‚t 0  *†H†÷ 0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #210U Entrouvert0 040813103645Z 290404103645Z0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #210U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚Ãõº<¶½þT¶9¬Ê ¨vÕ-:`9 !£ˆé `®/zJ{Ïe ÁÛw¤Z¼ôYrØKÄÁ†[s Š&À ˆëcñoøÓëš3öð·Ïz”Ùöß—uÅýÿ±±«!”ý2ækzB–ki!HÛE=h>©ajOL[fFÀõ9•­\¶,(qÀ÷‚Ç¡waH¨AÓ>pð [_¯4 ÀþJí&-ä!òˆå`ãêë.cÙ;ûÙeõÊy-%Ýõ¿Î©«ÕRÏkûQ qjXÎ{âCi@äðÊ.З·~Vêc U:‰¾Îb‹’1 :Û€´½ŸÌò}«7£‚I0‚E0U·M©Ç-ryìzï‘SÔÏÏð0U#0€·M©Ç-ryìzï‘SÔÏÏð0Uÿ0ÿ0 U0*U%#0!+ +‚7  `†H†øB0 `†H†øB0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0V `†H†øB IGEntr'ouvert Liberty Alliance test web server Certification Authority #20  *†H†÷ ‚{ÍR묅õçj©P³•*¹vÛ¦‹ÔDeAûÑ‚CôÏ!*,¥ŒÇé•’:]ƒ¯¹óËG.dƒ¡>ö¬`ëdäãÇ-èlAÊ4cNí ÆP¥ÀÏG/ ÀÈ ¾ƒÖ¬õ-ÛE‡Ž‹Û·w¨éÜ#º|¡yŽ dÛä4iUâÜuÑÂxæx\Õò¨zšGþªÊFÒèE£àDZê§~&É–á³Q¿"…öü3³ßú×ìL…ÎrùçÌE+Uï@> Ãöž°êúü©%Xn! 6øø4Î ͈¦ñ K–ã{\·ddç>µ4Y»-tgÐö¾Íð*ôç¤J34~¯ù{Ã/Cü«l¥/Ìê‚?˜™žHºY÷@^Á]¸B™‚Él¡XCýÊø¤Çcù¤†íiÝÍ-o‹–DLâ?õR4"éï¿ïÏÛ§Ã¥â¨S;–[Ê’q+.ËáÉ;­9÷%r2/GD+8iÙ¯ÞÛž®‹®ô¦ÞLä“ d“Cö›"·'9ø*ù&ÝÍM„ú²;´¶iÒ´ÊG_\§²£Çðxò‰…ö_1 os[‡¡‡ó˜ð=Ëe6ÞpMAݺ÷æèã>>?WxŠ:è¢'`¨Î!$HäME‡ót^‰ý%BÓÌ=al¸‰Ã«ôFë[´ëdÖ/›Ä„áoÁ…1`ÄtH so›ñv›·Úr!~IÔvÒ?ïòÇá— Ú‚Ó“Ž8+°õÊDÇk&6„™ƒMìzYvÈ}:s˜ž9¢ìÕãMÌáæ_ƒ¿z£eÿ+žG¦‘üµð䯥×F…l ÖßÜn‚k +9 ô‹zÞЕ`ÃõâdñÀФX¨ÏÏVÕN¨HØóŽ s3ÿŸ*RZ›E½]ÃÁJÃ:Úþ‘!M@CðΪVüUfÔ,L£·›,Ž›Æ»Ç™Ê-º=Ú_–+¸lWÈ– ¹~{ )ìÞödЭÑb\‡0¶¦äĸ;"¹uÒ“³˜Xæ 1îÕ2|afVMý[¹NVòû›»ýX·îžrPæ/eÜ\×àͱ½@zШQ“TŸŸˆåRM‡×+tzmÄŽ¡|üa"jéX.509X0‚T0‚< 0  *†H†÷ 0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #210U Entrouvert0 040813104426Z 240814104426Z0210 Ulecp210U  Entrouvert1 0 UFR0‚"0  *†H†÷ ‚0‚ ‚ݘS¿ ŠÓ_»E@g÷>¡È¨6 EUzÅÜ— ­ƒüYñá„ÒC˜¨l–ˆÙü2Ê^|áöNmzJ¦†ýa6Çd‚yÿ1é¼z¯Íœ3ð6b)ÃÌq!±![ZÐ\Ï©‰¡žà×£À©`p¼Š„5M»®_Ê/]Ê}™åž=E„F™Úôbp™ÆzÔ'Tª2ë*nCÿ™D‡.v0«ðÀÔa8ŸçØO¾Ö*†0“ôÔ]« éûÆhcj7F˜°&6f2=«Q îxrþáG¡b=­U¡%Jèåž®Ù÷~PCO×!ÀD¸Oôóþ¥Çg[iÊ¡Fu|—›å [£‚B0‚>0Uv…Êëj/òùŸØ ž'g¦0U#0€·M©Ç-ryìzï‘SÔÏÏð0 Uÿ00 U 0*U%#0!+ +‚7  `†H†øB0 `†H†øBÀ0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0R `†H†øB ECEntrouvert SSL Liberty Alliance LECP #2 web server test certificate0  *†H†÷ ‚Z:ʾÉåÓ€!òJ_NZ(‚.,íöñ¥ ”åõƒö­ev²ªƒ‚¸i´ÕD™f(+,M/‘T®›ñZ @^‡ ²S¿$ýAqÌA§™Öv±ŒòÜNQ-È‹Q‰Æ µ2äGP¿Øžrâu°©ò6‡°úPô6&鮯}„@‹;A†«çC¼0èÕN r‡ñÍ¥’ꋬ÷¯ì›°’JrO6ŽfªG‡µê†iý(¨”©Ä`7 k‰c­°»?£ñ •ÿ~t&».Ó HÓ’Û®ä)XÚ"¦(YêÆhGNð帼Krsèb5ª¼ƒ6X.5090‚Œ0‚t 0  *†H†÷ 0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #210U Entrouvert0 040813103645Z 290404103645Z0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #210U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚Ãõº<¶½þT¶9¬Ê ¨vÕ-:`9 !£ˆé `®/zJ{Ïe ÁÛw¤Z¼ôYrØKÄÁ†[s Š&À ˆëcñoøÓëš3öð·Ïz”Ùöß—uÅýÿ±±«!”ý2ækzB–ki!HÛE=h>©ajOL[fFÀõ9•­\¶,(qÀ÷‚Ç¡waH¨AÓ>pð [_¯4 ÀþJí&-ä!òˆå`ãêë.cÙ;ûÙeõÊy-%Ýõ¿Î©«ÕRÏkûQ qjXÎ{âCi@äðÊ.З·~Vêc U:‰¾Îb‹’1 :Û€´½ŸÌò}«7£‚I0‚E0U·M©Ç-ryìzï‘SÔÏÏð0U#0€·M©Ç-ryìzï‘SÔÏÏð0Uÿ0ÿ0 U0*U%#0!+ +‚7  `†H†øB0 `†H†øB0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0V `†H†øB IGEntr'ouvert Liberty Alliance test web server Certification Authority #20  *†H†÷ ‚{ÍR묅õçj©P³•*¹vÛ¦‹ÔDeAûÑ‚CôÏ!*,¥ŒÇé•’:]ƒ¯¹óËG.dƒ¡>ö¬`ëdäãÇ-èlAÊ4cNí ÆP¥ÀÏG/ ÀÈ ¾ƒÖ¬õ-ÛE‡Ž‹Û·w¨éÜ#º|¡yŽ dÛä4iUâÜuÑÂxæx\Õò¨zšGþªÊFÒèE£àDZê§~&É–á³Q¿"…öü3³ßú×ìL…ÎrùçÌ}J½pYNVÒ’Xá@¤Rç$”útVgùÉë‘4w†NmÃ0­bËžÅôkšhU.Å’k|(öûÐ1€ãêÂò%c‰Ž¿‰ä¼0¾Å…C*¹š¥-ñ¦ =t±Dºº3½ÿ,#ÏtåÅ9žð2ÿ5¨*>Í'3̱8@­¨Î€Ìbˆ„«g:MxätÀf¸Õ2Gwã.x݆èU˜'e†ÒO!ü:¶-;J.V³îN~hõd¨nãfæÓàûƵ+n Àuž.r ŠBнñS&šÉÕüYø)¹óîE²a‘?´Ò’ø:1?µé ¿¸P½0D‰6…Çâ0ñ  M÷hÙ’dl¿©Y9)ïTûãðr=§ —{¬ÃdŠžrù.'ñ*£½¡±Yéj… è‹`³y¹1ý«¼@1&â7ÐéSË·îý–Žá¬{€`,¦0RrM+Ýh|/ä½÷ qC’Å•©9€yG ìTËž<Š-Ðú0l[¾MʬþaÇøàÈ­J« î}7]d¿\zPžâM­Ò+‹#4CµLÙ6Šô—ðPñ£ŽF˜öÉ*C­ŒêàëåÖ×ÔŒúpîÌ¥|ðÿ€{ ¯³1-OSït»˜íOÑ¿‰Þ´Öü¨a„0Ò³Ì÷l†úÊÎæ»O 6O7f’{£o±G£”d*3uR ÈäÑÂÚB6™6†aëgÜŸ+æ%FÕ)$Wž\R}ƒcî`pbŒx:#KCÞD¹ )WKùÞÏ :iÙA­íñ×=-«¶hÎÿ4Üà©Çè¬1®Ô1«by†dœë‹{ÝaÆxpkð†0©¦ Lô/ó×ÄTÀà}|›!“7  “T1äÛ<‘WOq±Ú¨Œ»ŒT5Ž§Ç®Ð¿Rq(‡ Œ9¿Q—…Œð¨ÜIÚ‹j÷÷ j‰Ê‹‘EÞF˜›Žµÿ=ŽwùJyKà´°&J¬mš:\ÑÏš§¯°^êûîz*Ùö¡tLûwM›‘JÙKÎê~'€—9%ºu¨ÚfáNçÕÈGÝV!ÄÆýׯèèsv UUCv50ê†ô9À_ù^ˆ?-Éž)7.¾þ>e»ì$âˆgÌÖ*ú¢®L ùøÇ–¹t"Õ8À âGèÁú f·#¤†A‘þYՀЦX· Áã6m!Îmˆ‘$ìóéÿg5‡NðG”(Ú§Xåè¦O›dÕ?1\uÙ€(¸{¾¸AnTÆa…‰ƒ\AÄ ½ŒnO)“ÕLCɃË>jŸ—“ð7¢Êì×G´rºi“yßR7ã1"Ò{QÎ’Ã<6!ˆyaq0•Àhûî‹Cîþ #Í65ZjI„mÜn/™øÙl\À«Û1ÛUü”p“FDñy‘Çq 1”ï‹Èý=°™¨J‚ca>ÎVx¬·’þ勞8ÌË…@£L»k^#ºØ¯9dÉ©žN‘ÂPð×µ9FÑgënµÚâÝfƒoSBÒ+ÖŽØAïݶøF0ÕÙˆ•ÁÂÛ‘zStY©j‡LÐð✚döGùd« €¨ª-ŽB·,ä×eƒm*°j.Ï 2ØÛY¹LêÁTþ^«ÙÖµasë€8DºØ` ×Ýg[ñ‚jÆw¹im¡ªS}·@‹~‚U‘¸îšêïb:Ü´9ÕqÞOÃëx@¹ÓÅû€)¥§ä Sæ¶Îhjjâ¥DPLjQž‹5v~M²Å?Š Èžs/”Cýp0p~’¾êö^:3Ñùî~ëA’G ŒóL}(dìþPÙ`xo´{’ä9°{²I¾Ï†n•Ùl–}Ž®1,zžZE–ý<?t¿4(ˆAtEjƒùܺ߳k§øE?añCUÅ<6Æx{ñÀ$êPÂDúvÌØÔš£‘ÊsòEê< ÝêcŠÖD&¢%#3›Kþxè\óËÁÂyGLlÏþÄöP÷p4¶G|ɪْ˾1a—`šÝ# ³âƒz‰Ëå8QAÍuõ̳ú2ÚúW#d·¦Ú*5Þ€RËM¨d}ÐØÒ½ba«Õã6,ßOhŒi¹mR¿Þ ‹3.ÞÙ0?I>=ÛG „[19Xäµ—Ïàa̸0‚Ø *†H†÷  ‚É‚Å0‚Á0‚½ *†H†÷   ‚î0‚ê0 *†H†÷  0U¶øæ‹ÈK¨‚ÈÞGdåV{»,`V–BËñ—xá—ÐdͶ¨2˺‡0Ët+"‡h˜§èÀUë áZxA}}j.·ìŒòyßÀN ˜Çá2« 9v®'Ég’gz¡ç5)ù(úïÎcˆŠ<}zrgà3°Þ?¯a|…› €«ÌÛÆÔa‚Éëœh-nÒÿûq½ç=¹ˆ®OÈëXÓ¹Ï}Œ) ýêÚÀl4dÉŽI¦Yʘý¡4±|ìR·9‡Ea+™RƒÖÞ3ð—²!ííÇ; ‹Tà:G£Þ düM¶£çc«ßã)ÖLhk(&lkiÚ[Ñ:Pç­Õ>wŽf³3Á|h_¡æ˜ÂÀ!’Mÿ¹dýæ}Ìš¥¶X6 Z’^ Ð&и(°‚ÏɃºvfgF5–³ºxåwý@îÔN«ða³¶æ\"HóÿUJ5ónÆ1‚FŒšg¢'ãµRÄ%Ñ"¸A>+Ú½J ’[õÎÚEÿT›×«P`2âu*`qéw7]óºVÆÇM¾ÅÚ 7á?EªJ6gp yÌÒ«W |é(…¡L»[­Š~¥“Û{ !l¢óÊ’\¤°ò|âk˯+õÖä¥!¯ÑYêOšÒú(rØ'¶ ȉî[«é°eƒF|‰ß7ҹТ¹ù榽æÓdƒ¾Nfù'Aí+ù-Ö+N´àÅ‹‰ä¡73½P4b•}ãMF­"LŸÚÈÑrÑû³§1-ó;ùRÝ7UuB¡¼§·æ°5é«ðátçš}§ÎjYÂMumO}úr7µÈÐPöˆE껯çÕðÓÔjîǪ£…sJÑ{-+…sí“eÝ6œ^Þ›ß7sö¡È\óä6ÒÅù<µÆFˆ÷1Cfn€ýÈ=Kó8Ó9Ÿgñ´µWàï;ñêé-©‘Ït²”ÇÆÀÒ÷i°QR(ÅžPµN¬SÄÄÚôÆÝê‡:þ`!xcÍ [ž]ÂÌVâÓ KYU¶˜ò©^Ç?%ÞÈßf£†Ó²Û¯f¦P“@ÒýŸ£¤™æþ1ÒÖO«ã¤>>i¯&¢|× Q?`¼+¢3ÂoVq¦ÁÜQ=8Ìà¦=Y8ìeœÎ?Ê¿ó~­E^fUzìQ­E·Å·Î`ÖSøÅ´b>Ò¶CI`,ÿe'™Àd­«lзe“pÒÐù”è xëû íUìåî™.yà«(C³8º®rŸAÐ_ŸýÉÛb7|!yf"–½*tÆÄœÕýÕ«]䜒 Üfh˜¿•x©=…êD7o/nG ZîkÚ›©ªX¨ùïÉ„€è˜©–UáÀŒŽ› ‡(÷³Ëô,ÜIm¸›¨YÛÍb/3Nû¿9+ëµõܵƒÞÔŽÕ;8.IZä–ëê. ï!¶Ê¼Ý©¸ÊCó­Óˆt Ï(ÏIÊ—Å1‘ÏÚL7*~k‹&Á+ÖvÒøò 0¾ÐXb©”¾o8åVBXÚ%Ðn×aFÃÁGŽ‹>Aàéоå_ÄÝõ˜ç’Êw¸¨Ãzì”jkTa6Ø+(*¦æwD}v×dÊLPÓ1»0# *†H†÷  1´°„ÓdÌëppj»¦¯i#铤Úä0“ *†H†÷  1…‚Entrouvert SSL Liberty Alliance SP #3 web server test certificate010!0 +¹ì”Ät–7ò´Ê¿œ½ˆÄ·åU|ÔE˜oZ´ºlasso-2.8.2/tests/data/sp3-ssl/PaxHeaders/jks.keystore0000644000000000000000000000013213766621500017665 xustar0030 mtime=1608196928.958896909 30 atime=1678098071.545501253 30 ctime=1678814321.489956042 lasso-2.8.2/tests/data/sp3-ssl/jks.keystore0000644000175000017500000001134413766621500023140 0ustar00bdauvergnebdauvergne00000000000000þíþírootþWÀ7%X.5090‚Œ0‚t 0  *†H†÷ 0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #310U Entrouvert0 040813103648Z 290404103648Z0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #310U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚Կר©¿Ì 5Ó Tò¯_±Ô£!@Ýž=ZŽ G¤78>1RlêÎFÇ· ð @°EÈLb%€ÌÒ~îp»~ALO·õÐPØ3OgÇI–¯þ(H£œBBÅ}1.Zh€“Vòü›žr¸(’k›÷)jG˜ÖcúåÈòÚ½­rÅ ùR´ŽRDÀ2ÚáÞyfõÿRFƒë’’*J±]š@Áït<³‹0d%ñ¦$UXøÅP0‚p¨Ê"$·$.è]b§¯%² H‚?¤iÄ›õK&²TÀOÜÙ³ÈNîM¸öèørŸí6Á„>yoÀË4qW&´C£‚I0‚E0UKœÅïª<–³<Ëe;ÕcÁƘâ0U#0€KœÅïª<–³<Ëe;ÕcÁƘâ0Uÿ0ÿ0 U0*U%#0!+ +‚7  `†H†øB0 `†H†øB0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0V `†H†øB IGEntr'ouvert Liberty Alliance test web server Certification Authority #30  *†H†÷ ‚1’z‚}+,£xiÀFE‘FÇ ñ¥u̽œ¯mÙ6žÒŸÐV#¤Ú•ùdå#6ê4_DÇrã ]…¬Únë'ŽÐ2ÛéDvBÙ[k®Õ¨V æ „Ãðçp#³ÆLd?|P‡X½”qœiæg¢íF)wÈ<ù©­t åŽs8s#îšÌãûó4·g´O?õ%8Š|Ø4êb‚Ñű•"¬ø¦–m·p«§pÔ{”çý[ìÓŸ`i5®n{>#‚ µØ–ágbP^¨Zàk.ïþŠz-CÆ#¯Q+kG}GÑÕñ¡›óÚ?û‰0.×ðÀÁöðëÎË‚tomcatþWµ0‚ý0 +*‚éÔwo©êee‰³Óú¸ëðlŽaºNÙ ÿúë?ͯ úGFåïþ•½ë3ÌPäØà¿ÛW*ñ²Ý '—Åó™åµh‚µ!ümüùve“ ä¶ášx(ñ%V½†l{ßtî—)ˆ#;óº;¼öÌ`ä$·Ò¶M3Y]¨ÒïUÌи‡Qî i¶v BHú®ÿ¯‰$“ˆP=¶ä5^]LýC«G¡?Lˆ Ì^’‘ðì~×v*JxŒÀõ˜254ŸU Iæ¯u‡ˆµ<®+U¯oA|jfñœwò2°Ç dQQ~o{}‡¡’U¢œÆÓ ŽC2¼éК&^Ö`f)ë]Y¼®KäàC©Þ¾ì2½® ˆÚ•w(ù£õU+×…(¾äùiT|- hD\Œ$ôó8-HŸß…‰ü%­Gïý`…ø“´ Ô©œ¤j}¡›]îvUkæIq‹³öNNè­kôœ.1³E]©XÔ>£Úkt.5È‘§‰;Ýs/,ôšc}µÉ?”²b'I™XÆÚ˜†à‚fýwâñ¶q­ôiXǨm5N"¯¬%®|®õNâV{Ê-1ƒÃ'†h»ª¥D5W)mº)Â÷œ†‹ú™h·k÷ûÙá/Ƈ¨w¦d—xB›™{ÇV_G¾.é{/"&ÃU·ù…=ÿ,CC,¹†QÙ·M }Cžm4‡-mÔ%ëÖÏì¿n4èí;h 2¢ÂãÄ“[Q÷ÆV(=}£5ØÄ;.–‚ç“ÁÆ_€97*Ûpx ŽÛ¡Á¾àâÂg~„˜¹~‚~6Ô§“ùÝ ÷¸¿øh0ãâ‡ãë/_¡Dõ0‹¦r N6eûÖUÓÜîÆÁÖN%}°`Oé‡PdFÌDˆŽ)+×’Œc=©çØîc¾ÜN멬Ûªé"S;×RwgÿmU—bÆ¿:ÞÑ,hW¼j÷Юøw%™.mËt²—”h.‰7ƒO"17/Qè—WÅö߉xb-U-K˵ÉW'l|íX—eËâÝ ×ÈjKKFäÙÅÐx›Dº¨¤K,î ‚¿„›NBÇÜŽj]Ö¨Ùù$ "ˆ×Þ\¤Ù²]Ñg.ó¡‚§q u?!¨°75Æc-c#â 8xK«ñöšRþæ'QÍ&¥Q-co””ÍSä¨SþÆëGgÆúx? …?RÏ M(?)‡Ì9€þöæ6EÊ/Ö‚L¦ t»Î|:î °ðÉ®,°t­Óù9çŒç`ÛàUaÖmÖÐ^Û*–Z ýmæZ;i‚ZAsôA48XE µô"w?mÊÔÝݱŽ9n@¿K=&ÐQK†ÝO',IvZ}ÔebLäáïæÚdË Ó‰ÉP¥YƒC³mcš{L5ÀŒ°𺢒Šã@«_ÀŠd“ïüÿDÇ-½4‡s¨\§ÏSL‰Gº Úk¶‚j¶Bmñ,laX.509T0‚P0‚8 0  *†H†÷ 0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #310U Entrouvert0 040813104427Z 240814104427Z001 0 Usp310U  Entrouvert1 0 UFR0‚"0  *†H†÷ ‚0‚ ‚¡£HU»Ó©¤QÖdõl‹˜ÛqN=_ƸlÔÍâcz®é—2Î{¯,d¥:‰$s I‘@Dk,jÈu6ç´F PnÎ×ðjž/þ_9ÛàDÄ„A ÓHâ­òŸƒà~H‡^4²ÐÖ<×âßÁ7 Ï6ëGævS'æG<´ìÚ¨,’턽±µJ³éôúŒjå;ˆïïɳÀùjüêÕB³sº÷ÊAÃE"'Ü ?Ýí»p¤DÑ|()ùÃi¨môÜ׬pJt/e“ÈmޱþM‰~ϋǩš©ó´¯ƒ<·ïU¯&XSÉè„-á9Ù‹€•™™à1ÌÃÜ飂@0‚<0U9„ªM¥ Žž§þCÒ}¡ÈNát0U#0€KœÅïª<–³<Ëe;ÕcÁƘâ0 Uÿ00 U 0*U%#0!+ +‚7  `†H†øB0 `†H†øBÀ0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0P `†H†øB CAEntrouvert SSL Liberty Alliance SP #3 web server test certificate0  *†H†÷ ‚•;å¬}²XÀ„UÒÑØ¹»ùùlS˜rá Ã¼´ÌuµAÀOάhŒqѺÍýÅ©’’' 9ª¸’iÌsA95s>Êéê Š[ÁÀPZð_°¢1?>iÞçj¶p3< èרPõÜ$Ž5&‡3_½ ¤`8–cJo\HÝÞO‹>æ »‚ÁreÎ3PErðÂ(tØ`À63…é{­”w_)åM]-Î.ylë+©Î2!qP.¬;¯²í a[Ÿ¶”{†Ÿ³[E§€Þ2OÉÜH}T|¶ú$Rmh~BÛƒb©H–Ʀ’Â…NŒeÎ.JöØX4i8œ4}tX.5090‚Œ0‚t 0  *†H†÷ 0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #310U Entrouvert0 040813103648Z 290404103648Z0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #310U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚Կר©¿Ì 5Ó Tò¯_±Ô£!@Ýž=ZŽ G¤78>1RlêÎFÇ· ð @°EÈLb%€ÌÒ~îp»~ALO·õÐPØ3OgÇI–¯þ(H£œBBÅ}1.Zh€“Vòü›žr¸(’k›÷)jG˜ÖcúåÈòÚ½­rÅ ùR´ŽRDÀ2ÚáÞyfõÿRFƒë’’*J±]š@Áït<³‹0d%ñ¦$UXøÅP0‚p¨Ê"$·$.è]b§¯%² H‚?¤iÄ›õK&²TÀOÜÙ³ÈNîM¸öèørŸí6Á„>yoÀË4qW&´C£‚I0‚E0UKœÅïª<–³<Ëe;ÕcÁƘâ0U#0€KœÅïª<–³<Ëe;ÕcÁƘâ0Uÿ0ÿ0 U0*U%#0!+ +‚7  `†H†øB0 `†H†øB0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0V `†H†øB IGEntr'ouvert Liberty Alliance test web server Certification Authority #30  *†H†÷ ‚1’z‚}+,£xiÀFE‘FÇ ñ¥u̽œ¯mÙ6žÒŸÐV#¤Ú•ùdå#6ê4_DÇrã ]…¬Únë'ŽÐ2ÛéDvBÙ[k®Õ¨V æ „Ãðçp#³ÆLd?|P‡X½”qœiæg¢íF)wÈ<ù©­t åŽs8s#îšÌãûó4·g´O?õ%8Š|Ø4êb‚Ñű•"¬ø¦–m·p«§pÔ{”çý[ìÓŸ`i5®n{>#‚ µØ–ágbP^¨Zàk.ïþŠz-CÆ#¯Q+kG}GÑÕñ¡›óÚ?û‰0.×ðÀÁöðëÎË‚á@ˆ¬±äôï×ýÞR%Ý:é5 Ulasso-2.8.2/tests/data/sp3-ssl/PaxHeaders/certificate.pem0000644000000000000000000000013213766621500020274 xustar0030 mtime=1608196928.958896909 30 atime=1678098071.545501253 30 ctime=1678814321.489956042 lasso-2.8.2/tests/data/sp3-ssl/certificate.pem0000644000175000017500000000302613766621500023545 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN CERTIFICATE----- MIIEUDCCAzigAwIBAgIBAjANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjE/ MD0GA1UEAww2RW50cm91dmVydCBMaWJlcnR5IEFsbGlhbmNlIHdlYiBzZXJ2ZXIg dGVzdCBSb290IENBICMzMRMwEQYDVQQKDApFbnRyb3V2ZXJ0MB4XDTA0MDgxMzEw NDQyN1oXDTI0MDgxNDEwNDQyN1owMDEMMAoGA1UEAxMDc3AzMRMwEQYDVQQKEwpF bnRyb3V2ZXJ0MQswCQYDVQQGEwJGUjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC AQoCggEBAKGjSFUHu9OppFEH1mT1bBaLmNtxTj1fxh64bNTN4hFjeq7plzLOAnsA f68sAWSlOokkBHMPDEmRFkBEayydahnIdTYUGee0Rg0dUG7O1xDwap4v/l+NOdvg RMSEQQnTSOKt8p+D4H5Ih140stDWPBcZkNfi3wAawTcMzzbrR+Z2FFMn5kc8tOza Eqgsku2EvbG1AUqz6fT6jAFq5TuI7+/Js8D5avzq1UKzc7r3ykHDRSIn3As/3e27 cKRE0XwoKfnDaagbbfQS3NescEp0L2UYk8htjrH+TYl+z4sVx6maqfO0r4M8t+9V ryZYBlPJ6IQt4TnZi4CVmZngMczD3OkCAwEAAaOCAUAwggE8MB0GA1UdDgQWBBQ5 HIQbqk2lII6ep/5D0n2hyE7hdDAfBgNVHSMEGDAWgBRLnMUF75CqPJazPMtlO9Vj wcaY4jAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIFoDAqBgNVHSUEIzAhBggrBgEF BQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMBEGCWCGSAGG+EIBAQQEAwIGwDAm BgNVHREEHzAdhhtodHRwOi8vbGFzc28uZW50cm91dmVydC5vcmcwJgYDVR0SBB8w HYYbaHR0cDovL2xhc3NvLmVudHJvdXZlcnQub3JnMFAGCWCGSAGG+EIBDQRDFkFF bnRyb3V2ZXJ0IFNTTCBMaWJlcnR5IEFsbGlhbmNlIFNQICMzIHdlYiBzZXJ2ZXIg dGVzdCBjZXJ0aWZpY2F0ZTANBgkqhkiG9w0BAQUFAAOCAQEAlTvlDqx9sljAhFXS H9HYubv5+WxTmHLhoMO8tMx1tUHAAU/OrGiMcdG6H839xakCkpInoDmqF7iSacxz QTk1cz4ZyunqC4pbwcBQWvBfsKIxGz8+aQPe52q2cDMaPAro16hQ9RPcjSSONSZ/ hzMSBV+9gSCkYDiWY0oHb41cSN3eT4s+5qC7gsFyZc4zUABFcgDwwigXdNhgwDYz hel7rZR3XymQ5U1dLc4ueWzrKxWpzjJ/IXFQLqw7r7KB7RgNYVuftpR7hp+zGFtF p4DeMk/J3AdIfVR8tvodJFJtaH5C24NiqUiWxqYSksKFTgSMZc4uSvbYFlg0aTic AjR9dA== -----END CERTIFICATE----- lasso-2.8.2/tests/data/sp3-ssl/PaxHeaders/private-key-raw.pem0000644000000000000000000000013213766621500021041 xustar0030 mtime=1608196928.958896909 30 atime=1678098071.545501253 30 ctime=1678814321.489956042 lasso-2.8.2/tests/data/sp3-ssl/private-key-raw.pem0000644000175000017500000000331513766621500024313 0ustar00bdauvergnebdauvergne000000000000000: sp-jks.keystore 1: tomcat 2: changeit -----BEGIN PRIVATE KEY----- MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCho0hVB7vTqaRRB9Zk9WwWi5jb cU49X8YeuGzUzeIRY3qu6ZcyzgJ7AH+vLAFkpTqJJARzDwxJkRZARGssnWoZyHU2FBnntEYNHVBu ztcQ8GqeL/5fjTnb4ETEhEEJ00jirfKfg+B+SIdeNLLQ1jwXGZDX4t8AGsE3DM8260fmdhRTJ+ZH PLTs2hKoLJLthL2xtQFKs+n0+owBauU7iO/vybPA+Wr86tVCs3O698pBw0UiJ9wLP93tu3CkRNF8 KCn5w2moG230EtzXrHBKdC9lGJPIbY6x/k2Jfs+LFcepmqnztK+DPLfvVa8mWAZTyeiELeE52YuA lZmZ4DHMw9zpAgMBAAECggEAfKtn+s2APX0205jr7+qrd6gsOfVml0frk35D0s8Jcsf7tDVO/UyP 9TcpRH74hBw8zdIN7IDKxWM2elNLJpozX7eRUCio4mHVNgBKLW0zzEjisyfpVuGiosiTwc8QKvff 25a27/nTiRN/9VVIJnNW3apGYX0G6xm3tTIYEQ/f4QwwSGIeBmIVNZ9XLg7YGMDjB3MG29f0tN9+ rZ1/HWABK/mZnYbZzHc8H2eamQ918Vl2h/RS+HvNpFvao9iNeQQXQnikXtwKvGlGkSsd4V3At9hE 6uRurtRt0PmmrBDUifvQd4OQiJNsbA9dpoFW3SkAZfmc0UGGr2U84kmTmA5mEQKBgQDNvztAXKs2 tWD/Vy9/nvrCdjF9qc1+WxIS+rIAXShJ0/7ZVxMv4wOx1zA8WnAOwi26+Q5L+azFTeO6NTc2OMkH aQywJTfzwiOk37jBsO/OgldJ8iS1fI3yZx8ww4Y8LW/eY2L4BrKXpEeptjrckwAfhlBKIFwC8V3e pjYU39qATwKBgQDJHgf2w2i8bi/b7IoPW8hghUho9FlCjeoTTivVhNJNrr/8okExTL7C4JrjQzoM UtZYdedUFKj2yvGrDOMZPVOq6KJFHIsQPlo/JdPhv6T7tZhSrHxLteYxfz0faLH1yNywMtlIaUtx Y3JKH42WgWbWWMse/uuYZYHFkcP5D4CJRwKBgQDFaXFOphvZmFsDZQI8L6xnHcUKz/xN+s/yyfw1 AS2A+RoUK8pLLkUDRHgR0KyoXIRIXGPtXhj6D2wr5JefPQkWRSNZd7yh9GsC7W522nCd8s4SM3Yp dOM17OAuh8yqvOYTucTiOnrtqUDhg+oibiG2Hce3+CiQ4kqxMUW+7bLXXQKBgDjybPTdfgGk/Z47 SxhwN7vE4az+S2wB/R68SsMp2davPaOOWgFYpsdNi+3/8ibdKd5gfEEdnH5NFsMFYiSabd9+Abyq CWJvFWS+FFHezxuK3vfB6WwStHydd7Q2E/XxizPFIitTzU3tB8afSpssRu84s0MykYlUbLuBu8kB L7cvAoGARvSqN3thctjIV+5055yH9z53gGH86hKpifIr6Yuh9KfIHDHKFbap84FnFnpLr9Ox8far u9sEUCQbCVC43RdStr3QIW3QwM99MTRmMNRc78yDFolkb//O6oDoz+bHSZMmmyLZylU/4oOhhA1e X8/7O3jVAg2mH6rWY5EwJOXlNhI= -----END PRIVATE KEY----- lasso-2.8.2/tests/data/PaxHeaders/metadata0000644000000000000000000000013214335160041015475 xustar0030 mtime=1668603937.761708858 30 atime=1678814326.421984131 30 ctime=1678814321.437955747 lasso-2.8.2/tests/data/metadata/0000755000175000017500000000000014335160041021022 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tests/data/metadata/PaxHeaders/metadata_05.xml0000644000000000000000000000013113766621500020370 xustar0029 mtime=1608196928.94689681 30 atime=1678098071.489500813 30 ctime=1678814321.437955747 lasso-2.8.2/tests/data/metadata/metadata_05.xml0000644000175000017500000000155013766621500023642 0ustar00bdauvergnebdauvergne00000000000000 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzTofHpWAdhH3BR/+1lVV NGRVY2qH3H4+8cDaofg5gy6oazgB/qVTZixm+euZF1wVa/T5SR0CBeFF4JYBmC0H Wl39b2bqoNGV0ILLKyjDrE88pHP+k5PBFeb98zRAY95fPDOPfgFc4g64W76fvri8 qfXx3665UATOTXnvqnFOnilA/Ml900ust5Dy/IKyGgVT4xgm2nVQD6HYmg7Rjyga /LBtTEeKgc3k++fM5t8AzhdoNCiGZ/Ez1RztanjEoBzWdSrmHAGsemMUxFLPpQJ8 yglIYiL7fEkyQ0KMvRcTDk0pVzmNEqTNKQ3mPwpMz+TWM8+wMc9FjNtZaGc213om WQIDAQAB lasso-2.8.2/tests/data/metadata/PaxHeaders/metadata_04.xml0000644000000000000000000000013113766621500020367 xustar0029 mtime=1608196928.94689681 30 atime=1678098071.489500813 30 ctime=1678814321.437955747 lasso-2.8.2/tests/data/metadata/metadata_04.xml0000644000175000017500000000154113766621500023641 0ustar00bdauvergnebdauvergne00000000000000 -----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzTofHpWAdhH3BR/+1lVV NGRVY2qH3H4+8cDaofg5gy6oazgB/qVTZixm+euZF1wVa/T5SR0CBeFF4JYBmC0H Wl39b2bqoNGV0ILLKyjDrE88pHP+k5PBFeb98zRAY95fPDOPfgFc4g64W76fvri8 qfXx3665UATOTXnvqnFOnilA/Ml900ust5Dy/IKyGgVT4xgm2nVQD6HYmg7Rjyga /LBtTEeKgc3k++fM5t8AzhdoNCiGZ/Ez1RztanjEoBzWdSrmHAGsemMUxFLPpQJ8 yglIYiL7fEkyQ0KMvRcTDk0pVzmNEqTNKQ3mPwpMz+TWM8+wMc9FjNtZaGc213om WQIDAQAB -----END PUBLIC KEY----- lasso-2.8.2/tests/data/metadata/PaxHeaders/googleapps_metadata.xml0000644000000000000000000000013113766621500022304 xustar0029 mtime=1608196928.94689681 30 atime=1678098071.489500813 30 ctime=1678814321.437955747 lasso-2.8.2/tests/data/metadata/googleapps_metadata.xml0000644000175000017500000000103313766621500025552 0ustar00bdauvergnebdauvergne00000000000000 urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress lasso-2.8.2/tests/data/metadata/PaxHeaders/renater-metadata.xml0000644000000000000000000000013214050545511021515 xustar0030 mtime=1621281609.267307905 30 atime=1678098071.489500813 30 ctime=1678814321.437955747 lasso-2.8.2/tests/data/metadata/renater-metadata.xml0000644000175000017500000557774014050545511025016 0ustar00bdauvergnebdauvergne00000000000000 AIDrFyG3G6IpXdapls2LeP2Awt8= a47ZynaE+fXQFr2QkjjNsPoWhG0Lbed36MZ2/1jNygD2Ck3zYNSBxFTNI0bhZSi+ sYefYhnYDqpz785/90Ym3hVL+olMZ8z7NLlkeDKCScNCi1436j/W4voR0jez3BkA IrMW2p4eUtSwfTHRazMtRacQrwTk3JAbShXuWU7fVnRI4t8oa8t43rf2hz+rRG8F SizMOyyHMak13jaVCmX5qoaO4OWmqs2GhXsx8hRfzJ8o6w417InTLWcuIRNw1/zm 6O6H1as6nmKv34SppCiwdGrTpT6i3/zB3j9Hw7iyuvTF5bbaF+7MMsW/pjw5VOF8 lmNqhsCFdu+JsaTFBIB2Fg== 4hL9YBMYwmy/s6+CuOliYBbdGaiNWnhweLTXsd6VZVnlp1ffNKWN5yalvVRBwE3M QNvXm06c07vTw73h8UtaJZF+NhZrVBg4uRnqQcBHbIlOSEE1CXfboroGcmRagKwS uRdrXrTz7r6tdH70pyEH+UtJjcOqHwvo3uyoT7HIPVnwczeYez0IzhysikI9pnzT /I18E+o8DZm/i4gGvBIXfas+eHVyIm4gpCCOcJA5ooLaP5WzK2C2GuIjQ9VHMLtY 8AlF5Brrk3+LvbWMbqs95zBVwJL0bpyYb6ymroYRFR7ucVV01nmxHM2wa4OkR2Z4 JLWkI+1baG5+by+q+3D1mQ== AQAB MIID6zCCAdMCFALT+lN2uLJWF7p2xOo65/5KwxixMA0GCSqGSIb3DQEBCwUAMEUx CzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRl cm5ldCBXaWRnaXRzIFB0eSBMdGQwIBcNMTkwNjExMDc0NTU2WhgPMjI5MzAzMjUw NzQ1NTZaMB0xCzAJBgNVBAYTAkZSMQ4wDAYDVQQDDAVMYXNzbzCCASIwDQYJKoZI hvcNAQEBBQADggEPADCCAQoCggEBAOIS/WATGMJsv7OvgrjpYmAW3RmojVp4cHi0 17HelWVZ5adX3zSljecmpb1UQcBNzEDb15tOnNO708O94fFLWiWRfjYWa1QYOLkZ 6kHAR2yJTkhBNQl326K6BnJkWoCsErkXa1608+6+rXR+9KchB/lLSY3Dqh8L6N7s qE+xyD1Z8HM3mHs9CM4crIpCPaZ80/yNfBPqPA2Zv4uIBrwSF32rPnh1ciJuIKQg jnCQOaKC2j+VsytgthriI0PVRzC7WPAJReQa65N/i721jG6rPecwVcCS9G6cmG+s pq6GERUe7nFVdNZ5sRzNsGuDpEdmeCS1pCPtW2hufm8vqvtw9ZkCAwEAATANBgkq hkiG9w0BAQsFAAOCAgEAfbHk+QNvLYDNlqwwlu5+88/3CcEx+s1voXOBTxgyIAR2 NVKkO7dAW5me51jPPZhy+xC4i+AAeLW5JGwirM5LDgU+9P02JBsZ4OoZI3pBAZ5m GrmxrMm6q+9mJ+6bMHolfBNN6hoaWeJiknvc1Id7o0Dh4PbdV7r6ISuXisDb/1je tmzxoFuXhmDwwHMTG7eUORVFEgS8V5NNKMv16BeWNDohJVP6icxwoi5JswUl+vfO rvIwx2GAJ2EQAbSZv5ADFQ4/vxeopULgLnblc3BwVG4RTT7plNgT2iXP8YwmEGKb JDHRVFUo1tX6EKkBUI9AgETrdUnLq6XxP11JmrqNL9oOHw+hGb5vT1wyn6FFxZo2 BVgfqdiGbjcs1bTKeQAZKuhaW90oV6+yYD6WtWn/LfHnftAJivALkmUk+XaSqqbO FxuyRsz9C/yq0azr6IkCWhGwBYoLvf2CrvovSYpPXefeQ+1yXNDW7bvfAQfOO9xk SqQi4cYJw9hNqTk2f61x6UX/o8wKVhXEHyaCr9lVLNpCK0Uy07f3zkubx1mW5PST ITSnD8sPD7iMyGOJa5tQJ8W5u2NJT6qo52Jubgc8PapkOoYyEhUaTQEb8RN6D3oD xc8cCKn4HUtpkJKgxYhQDtsomJp2RK7lzjVPXAlFUmld88WgqdJwp9GSvMEktA0= listes.adrisi.fr CN=listes.adrisi.fr,O=ADRISI,C=FR MIICjDCCAfWgAwIBAgIJAK6QpdfDZ9sCMA0GCSqGSIb3DQEBBQUAMDkxCzAJBgNV BAYTAkZSMQ8wDQYDVQQKEwZBRFJJU0kxGTAXBgNVBAMTEGxpc3Rlcy5hZHJpc2ku ZnIwHhcNMDgxMDA4MTU1MTQyWhcNMjgxMDAzMTU1MTQyWjA5MQswCQYDVQQGEwJG UjEPMA0GA1UEChMGQURSSVNJMRkwFwYDVQQDExBsaXN0ZXMuYWRyaXNpLmZyMIGf MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDQESDZ1KOL1oOJKXyRr/yqmHLS1aOn HuxWi7C99LRsGSeOKQtXQY9wCw3Q1jJ7ub9L4jHQvS1ixoIm59ExvQgW//+JmHtm zIcWBPbCs2IsVJxEut4yt2OwnlMLRgWeR4Q0to2cT9ZojfX3aVTuz5hAcQlXm576 WluKp8nFy88BJwIDAQABo4GbMIGYMB0GA1UdDgQWBBTVNI1Xuy45keICtcLsbvEn GVF/qzBpBgNVHSMEYjBggBTVNI1Xuy45keICtcLsbvEnGVF/q6E9pDswOTELMAkG A1UEBhMCRlIxDzANBgNVBAoTBkFEUklTSTEZMBcGA1UEAxMQbGlzdGVzLmFkcmlz aS5mcoIJAK6QpdfDZ9sCMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEA gMJLqLNVkCzTiJ0BYimLAsjFhr9EcO4mQJTl/4qvhewN/k+ouxNRmpstkPjxJfO6 nTY8Q9eb/2CuuYTHqb+vjkS6pLjscQAgo3YPLimkl0UwVtr9x33vOBUQcJdLxNp8 KPBSIyZu8lwahxCT9sNjRrGfpf+v95M70nH3fV+eL1o= listes.adrisi.fr CN=listes.adrisi.fr,O=ADRISI,C=FR MIICjDCCAfWgAwIBAgIJAK6QpdfDZ9sCMA0GCSqGSIb3DQEBBQUAMDkxCzAJBgNV BAYTAkZSMQ8wDQYDVQQKEwZBRFJJU0kxGTAXBgNVBAMTEGxpc3Rlcy5hZHJpc2ku ZnIwHhcNMDgxMDA4MTU1MTQyWhcNMjgxMDAzMTU1MTQyWjA5MQswCQYDVQQGEwJG UjEPMA0GA1UEChMGQURSSVNJMRkwFwYDVQQDExBsaXN0ZXMuYWRyaXNpLmZyMIGf MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDQESDZ1KOL1oOJKXyRr/yqmHLS1aOn HuxWi7C99LRsGSeOKQtXQY9wCw3Q1jJ7ub9L4jHQvS1ixoIm59ExvQgW//+JmHtm zIcWBPbCs2IsVJxEut4yt2OwnlMLRgWeR4Q0to2cT9ZojfX3aVTuz5hAcQlXm576 WluKp8nFy88BJwIDAQABo4GbMIGYMB0GA1UdDgQWBBTVNI1Xuy45keICtcLsbvEn GVF/qzBpBgNVHSMEYjBggBTVNI1Xuy45keICtcLsbvEnGVF/q6E9pDswOTELMAkG A1UEBhMCRlIxDzANBgNVBAoTBkFEUklTSTEZMBcGA1UEAxMQbGlzdGVzLmFkcmlz aS5mcoIJAK6QpdfDZ9sCMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEA gMJLqLNVkCzTiJ0BYimLAsjFhr9EcO4mQJTl/4qvhewN/k+ouxNRmpstkPjxJfO6 nTY8Q9eb/2CuuYTHqb+vjkS6pLjscQAgo3YPLimkl0UwVtr9x33vOBUQcJdLxNp8 KPBSIyZu8lwahxCT9sNjRrGfpf+v95M70nH3fV+eL1o= listes.adrisi.fr CN=listes.adrisi.fr,O=ADRISI,C=FR MIICjDCCAfWgAwIBAgIJAK6QpdfDZ9sCMA0GCSqGSIb3DQEBBQUAMDkxCzAJBgNV BAYTAkZSMQ8wDQYDVQQKEwZBRFJJU0kxGTAXBgNVBAMTEGxpc3Rlcy5hZHJpc2ku ZnIwHhcNMDgxMDA4MTU1MTQyWhcNMjgxMDAzMTU1MTQyWjA5MQswCQYDVQQGEwJG UjEPMA0GA1UEChMGQURSSVNJMRkwFwYDVQQDExBsaXN0ZXMuYWRyaXNpLmZyMIGf MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDQESDZ1KOL1oOJKXyRr/yqmHLS1aOn HuxWi7C99LRsGSeOKQtXQY9wCw3Q1jJ7ub9L4jHQvS1ixoIm59ExvQgW//+JmHtm zIcWBPbCs2IsVJxEut4yt2OwnlMLRgWeR4Q0to2cT9ZojfX3aVTuz5hAcQlXm576 WluKp8nFy88BJwIDAQABo4GbMIGYMB0GA1UdDgQWBBTVNI1Xuy45keICtcLsbvEn GVF/qzBpBgNVHSMEYjBggBTVNI1Xuy45keICtcLsbvEnGVF/q6E9pDswOTELMAkG A1UEBhMCRlIxDzANBgNVBAoTBkFEUklTSTEZMBcGA1UEAxMQbGlzdGVzLmFkcmlz aS5mcoIJAK6QpdfDZ9sCMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEA gMJLqLNVkCzTiJ0BYimLAsjFhr9EcO4mQJTl/4qvhewN/k+ouxNRmpstkPjxJfO6 nTY8Q9eb/2CuuYTHqb+vjkS6pLjscQAgo3YPLimkl0UwVtr9x33vOBUQcJdLxNp8 KPBSIyZu8lwahxCT9sNjRrGfpf+v95M70nH3fV+eL1o= listes.adrisi.fr CN=listes.adrisi.fr,O=ADRISI,C=FR MIICjDCCAfWgAwIBAgIJAK6QpdfDZ9sCMA0GCSqGSIb3DQEBBQUAMDkxCzAJBgNV BAYTAkZSMQ8wDQYDVQQKEwZBRFJJU0kxGTAXBgNVBAMTEGxpc3Rlcy5hZHJpc2ku ZnIwHhcNMDgxMDA4MTU1MTQyWhcNMjgxMDAzMTU1MTQyWjA5MQswCQYDVQQGEwJG UjEPMA0GA1UEChMGQURSSVNJMRkwFwYDVQQDExBsaXN0ZXMuYWRyaXNpLmZyMIGf MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDQESDZ1KOL1oOJKXyRr/yqmHLS1aOn HuxWi7C99LRsGSeOKQtXQY9wCw3Q1jJ7ub9L4jHQvS1ixoIm59ExvQgW//+JmHtm zIcWBPbCs2IsVJxEut4yt2OwnlMLRgWeR4Q0to2cT9ZojfX3aVTuz5hAcQlXm576 WluKp8nFy88BJwIDAQABo4GbMIGYMB0GA1UdDgQWBBTVNI1Xuy45keICtcLsbvEn GVF/qzBpBgNVHSMEYjBggBTVNI1Xuy45keICtcLsbvEnGVF/q6E9pDswOTELMAkG A1UEBhMCRlIxDzANBgNVBAoTBkFEUklTSTEZMBcGA1UEAxMQbGlzdGVzLmFkcmlz aS5mcoIJAK6QpdfDZ9sCMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEA gMJLqLNVkCzTiJ0BYimLAsjFhr9EcO4mQJTl/4qvhewN/k+ouxNRmpstkPjxJfO6 nTY8Q9eb/2CuuYTHqb+vjkS6pLjscQAgo3YPLimkl0UwVtr9x33vOBUQcJdLxNp8 KPBSIyZu8lwahxCT9sNjRrGfpf+v95M70nH3fV+eL1o= shibboleth.highwire.org CN=shibboleth.highwire.org,OU=Domain Control Validated - QuickSSL(R),OU=See www.geotrust.com/resources/cps (c)10,OU=GT25468843,O=shibboleth.highwire.org,C=US,serialNumber=sWmLOPh/LGuivaEWU7vbqM11dDslGNDS MIIDjzCCAvigAwIBAgIDE2llMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0 aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTAwNjE1MDgyMzA1WhcNMTEwNjE3MjIzMDEy WjCB9TEpMCcGA1UEBRMgc1dtTE9QaC9MR3VpdmFFV1U3dmJxTTExZERzbEdORFMx CzAJBgNVBAYTAlVTMSAwHgYDVQQKExdzaGliYm9sZXRoLmhpZ2h3aXJlLm9yZzET MBEGA1UECxMKR1QyNTQ2ODg0MzExMC8GA1UECxMoU2VlIHd3dy5nZW90cnVzdC5j b20vcmVzb3VyY2VzL2NwcyAoYykxMDEvMC0GA1UECxMmRG9tYWluIENvbnRyb2wg VmFsaWRhdGVkIC0gUXVpY2tTU0woUikxIDAeBgNVBAMTF3NoaWJib2xldGguaGln aHdpcmUub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCzSPN2X9bk5MHB f6mUZ/CvBKfgEn46C7GnyzhKuEhsmppVKCxPenesKPvSmxpWWz7/Iwqusq7WHR0Z yVz4qHAyNPmN3U9HHGUeDlU1FZF9xltfzwoYcHJrSDXkSMAoV654f7L4wesBVSjj nPzmbIJlSbKYBbDFY60+dRlSwpRJ1wIDAQABo4HSMIHPMB8GA1UdIwQYMBaAFEjm aPkr0rKV10fYIyAQTzOYkJ/UMA4GA1UdDwEB/wQEAwIE8DAdBgNVHSUEFjAUBggr BgEFBQcDAQYIKwYBBQUHAwIwIgYDVR0RBBswGYIXc2hpYmJvbGV0aC5oaWdod2ly ZS5vcmcwOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC5nZW90cnVzdC5jb20v Y3Jscy9zZWN1cmVjYS5jcmwwHQYDVR0OBBYEFKEHn+uq2uvGkQRbITzHGnUL2a7z MA0GCSqGSIb3DQEBBQUAA4GBAEPaX1aKQj5ePOM8rAGI+T43+f/53tE5ga2O8kvg a4P5WEjXn8A4vnNSHRAHuj5qye0R8f2dqnNHH2znsw1ZMDuUERXn7mqrq6dqWiSq W2YFcT09X+2GlGNmhKY9VxhZH5szboc5IPWil9GpubtQ9cfz8ukLTaAwklS2wn1Y oZQx shibboleth.highwire.org CN=shibboleth.highwire.org,OU=Domain Control Validated - QuickSSL(R),OU=See www.geotrust.com/resources/cps (c)10,OU=GT25468843,O=shibboleth.highwire.org,C=US,serialNumber=sWmLOPh/LGuivaEWU7vbqM11dDslGNDS MIIDjzCCAvigAwIBAgIDE2llMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0 aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTAwNjE1MDgyMzA1WhcNMTEwNjE3MjIzMDEy WjCB9TEpMCcGA1UEBRMgc1dtTE9QaC9MR3VpdmFFV1U3dmJxTTExZERzbEdORFMx CzAJBgNVBAYTAlVTMSAwHgYDVQQKExdzaGliYm9sZXRoLmhpZ2h3aXJlLm9yZzET MBEGA1UECxMKR1QyNTQ2ODg0MzExMC8GA1UECxMoU2VlIHd3dy5nZW90cnVzdC5j b20vcmVzb3VyY2VzL2NwcyAoYykxMDEvMC0GA1UECxMmRG9tYWluIENvbnRyb2wg VmFsaWRhdGVkIC0gUXVpY2tTU0woUikxIDAeBgNVBAMTF3NoaWJib2xldGguaGln aHdpcmUub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCzSPN2X9bk5MHB f6mUZ/CvBKfgEn46C7GnyzhKuEhsmppVKCxPenesKPvSmxpWWz7/Iwqusq7WHR0Z yVz4qHAyNPmN3U9HHGUeDlU1FZF9xltfzwoYcHJrSDXkSMAoV654f7L4wesBVSjj nPzmbIJlSbKYBbDFY60+dRlSwpRJ1wIDAQABo4HSMIHPMB8GA1UdIwQYMBaAFEjm aPkr0rKV10fYIyAQTzOYkJ/UMA4GA1UdDwEB/wQEAwIE8DAdBgNVHSUEFjAUBggr BgEFBQcDAQYIKwYBBQUHAwIwIgYDVR0RBBswGYIXc2hpYmJvbGV0aC5oaWdod2ly ZS5vcmcwOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC5nZW90cnVzdC5jb20v Y3Jscy9zZWN1cmVjYS5jcmwwHQYDVR0OBBYEFKEHn+uq2uvGkQRbITzHGnUL2a7z MA0GCSqGSIb3DQEBBQUAA4GBAEPaX1aKQj5ePOM8rAGI+T43+f/53tE5ga2O8kvg a4P5WEjXn8A4vnNSHRAHuj5qye0R8f2dqnNHH2znsw1ZMDuUERXn7mqrq6dqWiSq W2YFcT09X+2GlGNmhKY9VxhZH5szboc5IPWil9GpubtQ9cfz8ukLTaAwklS2wn1Y oZQx shibboleth.highwire.org CN=shibboleth.highwire.org,OU=Domain Control Validated - QuickSSL(R),OU=See www.geotrust.com/resources/cps (c)10,OU=GT25468843,O=shibboleth.highwire.org,C=US,serialNumber=sWmLOPh/LGuivaEWU7vbqM11dDslGNDS MIIDjzCCAvigAwIBAgIDE2llMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0 aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTAwNjE1MDgyMzA1WhcNMTEwNjE3MjIzMDEy WjCB9TEpMCcGA1UEBRMgc1dtTE9QaC9MR3VpdmFFV1U3dmJxTTExZERzbEdORFMx CzAJBgNVBAYTAlVTMSAwHgYDVQQKExdzaGliYm9sZXRoLmhpZ2h3aXJlLm9yZzET MBEGA1UECxMKR1QyNTQ2ODg0MzExMC8GA1UECxMoU2VlIHd3dy5nZW90cnVzdC5j b20vcmVzb3VyY2VzL2NwcyAoYykxMDEvMC0GA1UECxMmRG9tYWluIENvbnRyb2wg VmFsaWRhdGVkIC0gUXVpY2tTU0woUikxIDAeBgNVBAMTF3NoaWJib2xldGguaGln aHdpcmUub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCzSPN2X9bk5MHB f6mUZ/CvBKfgEn46C7GnyzhKuEhsmppVKCxPenesKPvSmxpWWz7/Iwqusq7WHR0Z yVz4qHAyNPmN3U9HHGUeDlU1FZF9xltfzwoYcHJrSDXkSMAoV654f7L4wesBVSjj nPzmbIJlSbKYBbDFY60+dRlSwpRJ1wIDAQABo4HSMIHPMB8GA1UdIwQYMBaAFEjm aPkr0rKV10fYIyAQTzOYkJ/UMA4GA1UdDwEB/wQEAwIE8DAdBgNVHSUEFjAUBggr BgEFBQcDAQYIKwYBBQUHAwIwIgYDVR0RBBswGYIXc2hpYmJvbGV0aC5oaWdod2ly ZS5vcmcwOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC5nZW90cnVzdC5jb20v Y3Jscy9zZWN1cmVjYS5jcmwwHQYDVR0OBBYEFKEHn+uq2uvGkQRbITzHGnUL2a7z MA0GCSqGSIb3DQEBBQUAA4GBAEPaX1aKQj5ePOM8rAGI+T43+f/53tE5ga2O8kvg a4P5WEjXn8A4vnNSHRAHuj5qye0R8f2dqnNHH2znsw1ZMDuUERXn7mqrq6dqWiSq W2YFcT09X+2GlGNmhKY9VxhZH5szboc5IPWil9GpubtQ9cfz8ukLTaAwklS2wn1Y oZQx shibboleth.highwire.org CN=shibboleth.highwire.org,OU=Domain Control Validated - QuickSSL(R),OU=See www.geotrust.com/resources/cps (c)10,OU=GT25468843,O=shibboleth.highwire.org,C=US,serialNumber=sWmLOPh/LGuivaEWU7vbqM11dDslGNDS MIIDjzCCAvigAwIBAgIDE2llMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0 aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTAwNjE1MDgyMzA1WhcNMTEwNjE3MjIzMDEy WjCB9TEpMCcGA1UEBRMgc1dtTE9QaC9MR3VpdmFFV1U3dmJxTTExZERzbEdORFMx CzAJBgNVBAYTAlVTMSAwHgYDVQQKExdzaGliYm9sZXRoLmhpZ2h3aXJlLm9yZzET MBEGA1UECxMKR1QyNTQ2ODg0MzExMC8GA1UECxMoU2VlIHd3dy5nZW90cnVzdC5j b20vcmVzb3VyY2VzL2NwcyAoYykxMDEvMC0GA1UECxMmRG9tYWluIENvbnRyb2wg VmFsaWRhdGVkIC0gUXVpY2tTU0woUikxIDAeBgNVBAMTF3NoaWJib2xldGguaGln aHdpcmUub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCzSPN2X9bk5MHB f6mUZ/CvBKfgEn46C7GnyzhKuEhsmppVKCxPenesKPvSmxpWWz7/Iwqusq7WHR0Z yVz4qHAyNPmN3U9HHGUeDlU1FZF9xltfzwoYcHJrSDXkSMAoV654f7L4wesBVSjj nPzmbIJlSbKYBbDFY60+dRlSwpRJ1wIDAQABo4HSMIHPMB8GA1UdIwQYMBaAFEjm aPkr0rKV10fYIyAQTzOYkJ/UMA4GA1UdDwEB/wQEAwIE8DAdBgNVHSUEFjAUBggr BgEFBQcDAQYIKwYBBQUHAwIwIgYDVR0RBBswGYIXc2hpYmJvbGV0aC5oaWdod2ly ZS5vcmcwOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC5nZW90cnVzdC5jb20v Y3Jscy9zZWN1cmVjYS5jcmwwHQYDVR0OBBYEFKEHn+uq2uvGkQRbITzHGnUL2a7z MA0GCSqGSIb3DQEBBQUAA4GBAEPaX1aKQj5ePOM8rAGI+T43+f/53tE5ga2O8kvg a4P5WEjXn8A4vnNSHRAHuj5qye0R8f2dqnNHH2znsw1ZMDuUERXn7mqrq6dqWiSq W2YFcT09X+2GlGNmhKY9VxhZH5szboc5IPWil9GpubtQ9cfz8ukLTaAwklS2wn1Y oZQx MIIDjzCCAvigAwIBAgIDE2llMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0 aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTAwNjE1MDgyMzA1WhcNMTEwNjE3MjIzMDEy WjCB9TEpMCcGA1UEBRMgc1dtTE9QaC9MR3VpdmFFV1U3dmJxTTExZERzbEdORFMx CzAJBgNVBAYTAlVTMSAwHgYDVQQKExdzaGliYm9sZXRoLmhpZ2h3aXJlLm9yZzET MBEGA1UECxMKR1QyNTQ2ODg0MzExMC8GA1UECxMoU2VlIHd3dy5nZW90cnVzdC5j b20vcmVzb3VyY2VzL2NwcyAoYykxMDEvMC0GA1UECxMmRG9tYWluIENvbnRyb2wg VmFsaWRhdGVkIC0gUXVpY2tTU0woUikxIDAeBgNVBAMTF3NoaWJib2xldGguaGln aHdpcmUub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCzSPN2X9bk5MHB f6mUZ/CvBKfgEn46C7GnyzhKuEhsmppVKCxPenesKPvSmxpWWz7/Iwqusq7WHR0Z yVz4qHAyNPmN3U9HHGUeDlU1FZF9xltfzwoYcHJrSDXkSMAoV654f7L4wesBVSjj nPzmbIJlSbKYBbDFY60+dRlSwpRJ1wIDAQABo4HSMIHPMB8GA1UdIwQYMBaAFEjm aPkr0rKV10fYIyAQTzOYkJ/UMA4GA1UdDwEB/wQEAwIE8DAdBgNVHSUEFjAUBggr BgEFBQcDAQYIKwYBBQUHAwIwIgYDVR0RBBswGYIXc2hpYmJvbGV0aC5oaWdod2ly ZS5vcmcwOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC5nZW90cnVzdC5jb20v Y3Jscy9zZWN1cmVjYS5jcmwwHQYDVR0OBBYEFKEHn+uq2uvGkQRbITzHGnUL2a7z MA0GCSqGSIb3DQEBBQUAA4GBAEPaX1aKQj5ePOM8rAGI+T43+f/53tE5ga2O8kvg a4P5WEjXn8A4vnNSHRAHuj5qye0R8f2dqnNHH2znsw1ZMDuUERXn7mqrq6dqWiSq W2YFcT09X+2GlGNmhKY9VxhZH5szboc5IPWil9GpubtQ9cfz8ukLTaAwklS2wn1Y oZQx MIIDjzCCAvigAwIBAgIDE2llMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0 aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTAwNjE1MDgyMzA1WhcNMTEwNjE3MjIzMDEy WjCB9TEpMCcGA1UEBRMgc1dtTE9QaC9MR3VpdmFFV1U3dmJxTTExZERzbEdORFMx CzAJBgNVBAYTAlVTMSAwHgYDVQQKExdzaGliYm9sZXRoLmhpZ2h3aXJlLm9yZzET MBEGA1UECxMKR1QyNTQ2ODg0MzExMC8GA1UECxMoU2VlIHd3dy5nZW90cnVzdC5j b20vcmVzb3VyY2VzL2NwcyAoYykxMDEvMC0GA1UECxMmRG9tYWluIENvbnRyb2wg VmFsaWRhdGVkIC0gUXVpY2tTU0woUikxIDAeBgNVBAMTF3NoaWJib2xldGguaGln aHdpcmUub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCzSPN2X9bk5MHB f6mUZ/CvBKfgEn46C7GnyzhKuEhsmppVKCxPenesKPvSmxpWWz7/Iwqusq7WHR0Z yVz4qHAyNPmN3U9HHGUeDlU1FZF9xltfzwoYcHJrSDXkSMAoV654f7L4wesBVSjj nPzmbIJlSbKYBbDFY60+dRlSwpRJ1wIDAQABo4HSMIHPMB8GA1UdIwQYMBaAFEjm aPkr0rKV10fYIyAQTzOYkJ/UMA4GA1UdDwEB/wQEAwIE8DAdBgNVHSUEFjAUBggr BgEFBQcDAQYIKwYBBQUHAwIwIgYDVR0RBBswGYIXc2hpYmJvbGV0aC5oaWdod2ly ZS5vcmcwOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC5nZW90cnVzdC5jb20v Y3Jscy9zZWN1cmVjYS5jcmwwHQYDVR0OBBYEFKEHn+uq2uvGkQRbITzHGnUL2a7z MA0GCSqGSIb3DQEBBQUAA4GBAEPaX1aKQj5ePOM8rAGI+T43+f/53tE5ga2O8kvg a4P5WEjXn8A4vnNSHRAHuj5qye0R8f2dqnNHH2znsw1ZMDuUERXn7mqrq6dqWiSq W2YFcT09X+2GlGNmhKY9VxhZH5szboc5IPWil9GpubtQ9cfz8ukLTaAwklS2wn1Y oZQx urn:mace:shibboleth:1.0:nameIdentifier Ryan Krebs shibboleth-admin@highwire.stanford.edu sel.ens-lsh.fr CN=sel.ens-lsh.fr MIIC8TCCAdmgAwIBAgIJAO/NTHqa9KEeMA0GCSqGSIb3DQEBBQUAMBkxFzAVBgNV BAMTDnNlbC5lbnMtbHNoLmZyMB4XDTA5MTAxNDE0MTIwMFoXDTE5MTAxMjE0MTIw MFowGTEXMBUGA1UEAxMOc2VsLmVucy1sc2guZnIwggEiMA0GCSqGSIb3DQEBAQUA A4IBDwAwggEKAoIBAQDWyEWHGpkYvOb9Zk6XpWbI8OSJWBJsedu+yBjgwwlRQUy+ JJaSY5NY1gjLWbGqFOiiwFsimNmut8x39Q7qlsHyFHgRKCIOqgQmpa2CeQaa4Irl 17QmIAhwEfsXe3opcAHuqKA5z2Nm1KBmKA86CJDjhsWjHbjn63gY2vZEKVrl5KnQ tOuRfr/G8GLKJfea3R9meLOmHgnO7HrcuRz68PJNks9FyR4Wc0Nn0hdXPcFFdsyh m0sy7hkbnKqNlVGJTtiGhHbneRpbP06TbqaR9ATeMUcshQ2p0K2wfv37DMRElW3/ eSbXaPn0ertI0/v0hX1xylaaMOmh5BU/p3YCDY9XAgMBAAGjPDA6MBkGA1UdEQQS MBCCDnNlbC5lbnMtbHNoLmZyMB0GA1UdDgQWBBSTnokLHTQwG9hg4rLqcb1X31Zp 0zANBgkqhkiG9w0BAQUFAAOCAQEALCeF6exEMpFT5UZwNbYbg0DQiyS77F2QRGG3 B7Vtme6RQuFq2USEkS4iW8/GN4COrs1Jc9QBBSUzGMcxXqzFRMzzDXxZsroxtgEC Eg02JDYJxQezHKewJfGgD9wB2iCB7dyo+InPUHvoSBU5dSobgcHfBQoI0sl8PchS PbY+8CZHzRxiY9KqKVQ/tVHGjdmj6fFZMc4lka31ZPHoMMwjkeMPafuVK9XtAv8B lefjum9vCW8BDcvDK7LP75VPYJgoKBqh58JZDAUwYWLd/d8yqepeA/Y/9BfiQD08 pC4sXzFdVf+ghmvdNaiXXE3LFVx2lT4Lgf7VVE2xeMhsbfANAQ== sel.ens-lsh.fr CN=sel.ens-lsh.fr MIIC8TCCAdmgAwIBAgIJAO/NTHqa9KEeMA0GCSqGSIb3DQEBBQUAMBkxFzAVBgNV BAMTDnNlbC5lbnMtbHNoLmZyMB4XDTA5MTAxNDE0MTIwMFoXDTE5MTAxMjE0MTIw MFowGTEXMBUGA1UEAxMOc2VsLmVucy1sc2guZnIwggEiMA0GCSqGSIb3DQEBAQUA A4IBDwAwggEKAoIBAQDWyEWHGpkYvOb9Zk6XpWbI8OSJWBJsedu+yBjgwwlRQUy+ JJaSY5NY1gjLWbGqFOiiwFsimNmut8x39Q7qlsHyFHgRKCIOqgQmpa2CeQaa4Irl 17QmIAhwEfsXe3opcAHuqKA5z2Nm1KBmKA86CJDjhsWjHbjn63gY2vZEKVrl5KnQ tOuRfr/G8GLKJfea3R9meLOmHgnO7HrcuRz68PJNks9FyR4Wc0Nn0hdXPcFFdsyh m0sy7hkbnKqNlVGJTtiGhHbneRpbP06TbqaR9ATeMUcshQ2p0K2wfv37DMRElW3/ eSbXaPn0ertI0/v0hX1xylaaMOmh5BU/p3YCDY9XAgMBAAGjPDA6MBkGA1UdEQQS MBCCDnNlbC5lbnMtbHNoLmZyMB0GA1UdDgQWBBSTnokLHTQwG9hg4rLqcb1X31Zp 0zANBgkqhkiG9w0BAQUFAAOCAQEALCeF6exEMpFT5UZwNbYbg0DQiyS77F2QRGG3 B7Vtme6RQuFq2USEkS4iW8/GN4COrs1Jc9QBBSUzGMcxXqzFRMzzDXxZsroxtgEC Eg02JDYJxQezHKewJfGgD9wB2iCB7dyo+InPUHvoSBU5dSobgcHfBQoI0sl8PchS PbY+8CZHzRxiY9KqKVQ/tVHGjdmj6fFZMc4lka31ZPHoMMwjkeMPafuVK9XtAv8B lefjum9vCW8BDcvDK7LP75VPYJgoKBqh58JZDAUwYWLd/d8yqepeA/Y/9BfiQD08 pC4sXzFdVf+ghmvdNaiXXE3LFVx2lT4Lgf7VVE2xeMhsbfANAQ== shibboleth2sp.brillonline.nl CN=shibboleth2sp.brillonline.nl,O=semantico,L=Brighton,ST=Sussex,C=UK MIIDzzCCAzigAwIBAgIDEACAMA0GCSqGSIb3DQEBBAUAMG8xCzAJBgNVBAYTAlVL MQ8wDQYDVQQIEwZTdXNzZXgxETAPBgNVBAcTCEJyaWdodG9uMRIwEAYDVQQKEwlz ZW1hbnRpY28xKDAmBgNVBAMTH3NlbWFudGljbyBDZXJ0aWZpY2F0ZSBBdXRob3Jp dHkwHhcNMTAwODAzMTEyMjUyWhcNMTUwODAyMTEyMjUyWjBsMQswCQYDVQQGEwJV SzEPMA0GA1UECBMGU3Vzc2V4MREwDwYDVQQHEwhCcmlnaHRvbjESMBAGA1UEChMJ c2VtYW50aWNvMSUwIwYDVQQDExxzaGliYm9sZXRoMnNwLmJyaWxsb25saW5lLm5s MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1ryqiC3McpzrOXZWOeFF GTO4Nd/oiBgEQtfP/oymsEm+1H1TvDDoXpqNVo+tTrWbfZh/yjgsBzxW8/1sWM5n jZO0JygTkJmh5Pmvdz6P7mUNu9HlGk60B8PpU0dRsJrNJRNgBe9vWJnNxaSDerxO M5+iWGJUgRf2jh3+PQ9FFflEBEUpesJHBKKYVLAwk0q2UUcXIzN92xVakUUN8+u6 DapeD9bYi1N/6E9jiwwE7J3JDAhKbGrJRWt63dzCd79iHJG3jj7TdJzQtHoJ3f1r eJ+hE+ST+uikU9GxNfWmoCTTnjh5Cncwl7Zz6aig71MKNR/Z2jjAOIg7CKvI9zjR kwIDAQABo4H3MIH0MAkGA1UdEwQCMAAwLAYJYIZIAYb4QgENBB8WHU9wZW5TU0wg R2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBSeZ1VPClGa+wJ0lwl8apv1 XRb0fTCBmQYDVR0jBIGRMIGOgBQCG06aN/CNamhERsYdRP66sl6+OaFzpHEwbzEL MAkGA1UEBhMCVUsxDzANBgNVBAgTBlN1c3NleDERMA8GA1UEBxMIQnJpZ2h0b24x EjAQBgNVBAoTCXNlbWFudGljbzEoMCYGA1UEAxMfc2VtYW50aWNvIENlcnRpZmlj YXRlIEF1dGhvcml0eYIBADANBgkqhkiG9w0BAQQFAAOBgQBx33DwzT1uEOkH9GrA XO6DXjduvykr96g5B1CmnfdEiFQCninnDdjoIZ0e+437a98rBx81bH4xGdu/Q+4Y E4RTqlWzO+xS8HLYiuSrIL83sSKGPmX94xlWMVvuvoJRhidkKvammP+IReq4q99w OsSkSoP6HZrPCOXMEAK23C8pxQ== shibboleth2sp.brillonline.nl CN=shibboleth2sp.brillonline.nl,O=semantico,L=Brighton,ST=Sussex,C=UK MIIDzzCCAzigAwIBAgIDEACAMA0GCSqGSIb3DQEBBAUAMG8xCzAJBgNVBAYTAlVL MQ8wDQYDVQQIEwZTdXNzZXgxETAPBgNVBAcTCEJyaWdodG9uMRIwEAYDVQQKEwlz ZW1hbnRpY28xKDAmBgNVBAMTH3NlbWFudGljbyBDZXJ0aWZpY2F0ZSBBdXRob3Jp dHkwHhcNMTAwODAzMTEyMjUyWhcNMTUwODAyMTEyMjUyWjBsMQswCQYDVQQGEwJV SzEPMA0GA1UECBMGU3Vzc2V4MREwDwYDVQQHEwhCcmlnaHRvbjESMBAGA1UEChMJ c2VtYW50aWNvMSUwIwYDVQQDExxzaGliYm9sZXRoMnNwLmJyaWxsb25saW5lLm5s MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1ryqiC3McpzrOXZWOeFF GTO4Nd/oiBgEQtfP/oymsEm+1H1TvDDoXpqNVo+tTrWbfZh/yjgsBzxW8/1sWM5n jZO0JygTkJmh5Pmvdz6P7mUNu9HlGk60B8PpU0dRsJrNJRNgBe9vWJnNxaSDerxO M5+iWGJUgRf2jh3+PQ9FFflEBEUpesJHBKKYVLAwk0q2UUcXIzN92xVakUUN8+u6 DapeD9bYi1N/6E9jiwwE7J3JDAhKbGrJRWt63dzCd79iHJG3jj7TdJzQtHoJ3f1r eJ+hE+ST+uikU9GxNfWmoCTTnjh5Cncwl7Zz6aig71MKNR/Z2jjAOIg7CKvI9zjR kwIDAQABo4H3MIH0MAkGA1UdEwQCMAAwLAYJYIZIAYb4QgENBB8WHU9wZW5TU0wg R2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBSeZ1VPClGa+wJ0lwl8apv1 XRb0fTCBmQYDVR0jBIGRMIGOgBQCG06aN/CNamhERsYdRP66sl6+OaFzpHEwbzEL MAkGA1UEBhMCVUsxDzANBgNVBAgTBlN1c3NleDERMA8GA1UEBxMIQnJpZ2h0b24x EjAQBgNVBAoTCXNlbWFudGljbzEoMCYGA1UEAxMfc2VtYW50aWNvIENlcnRpZmlj YXRlIEF1dGhvcml0eYIBADANBgkqhkiG9w0BAQQFAAOBgQBx33DwzT1uEOkH9GrA XO6DXjduvykr96g5B1CmnfdEiFQCninnDdjoIZ0e+437a98rBx81bH4xGdu/Q+4Y E4RTqlWzO+xS8HLYiuSrIL83sSKGPmX94xlWMVvuvoJRhidkKvammP+IReq4q99w OsSkSoP6HZrPCOXMEAK23C8pxQ== www.cairn.info CN=www.cairn.info,O=CAIRN,C=BE MIICgzCCAeygAwIBAgIJANHZ2qyvCn4GMA0GCSqGSIb3DQEBBQUAMDYxCzAJBgNV BAYTAkJFMQ4wDAYDVQQKEwVDQUlSTjEXMBUGA1UEAxMOd3d3LmNhaXJuLmluZm8w HhcNMDgwMTMxMTAxMTUzWhcNMjgwMTI2MTAxMTUzWjA2MQswCQYDVQQGEwJCRTEO MAwGA1UEChMFQ0FJUk4xFzAVBgNVBAMTDnd3dy5jYWlybi5pbmZvMIGfMA0GCSqG SIb3DQEBAQUAA4GNADCBiQKBgQDRPuV40csQ00mQUww+eQ7sNqaJRLBqDgufitNd cMwIl6cgaPAkIvpYVQPwdxhDWqzQCYJagg6pd9Jw/Rcws7rGf1S7vlWQ6vlP/7y1 aA54xMcvM1Bx6FAp0h2oHGDfSf6HlxpsvwAJLi5ArU4EZw8CejYzWwE6XmYbj5ox U9p/gQIDAQABo4GYMIGVMB0GA1UdDgQWBBSKxxPh1wwwyfuboXg0mpgjcRvoujBm BgNVHSMEXzBdgBSKxxPh1wwwyfuboXg0mpgjcRvouqE6pDgwNjELMAkGA1UEBhMC QkUxDjAMBgNVBAoTBUNBSVJOMRcwFQYDVQQDEw53d3cuY2Fpcm4uaW5mb4IJANHZ 2qyvCn4GMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEArQe7ZnkoaPH+ MBICLC8YFFEfEEpF1hLcMcJBqLQYaaqhFw6olWUogbU8eX9Wvz1qKEZwKryJkrAs oDjy4c/5nHwxlFZheFLcnWiQdxmv9qjtZqV41SSn7zNVX0U9YUoY6lrtSZH/4Btk E25Bh11XZRlFI1reece1ILLnGQ7t3Hw= www.cairn.info CN=www.cairn.info,O=CAIRN,C=BE MIICgzCCAeygAwIBAgIJANHZ2qyvCn4GMA0GCSqGSIb3DQEBBQUAMDYxCzAJBgNV BAYTAkJFMQ4wDAYDVQQKEwVDQUlSTjEXMBUGA1UEAxMOd3d3LmNhaXJuLmluZm8w HhcNMDgwMTMxMTAxMTUzWhcNMjgwMTI2MTAxMTUzWjA2MQswCQYDVQQGEwJCRTEO MAwGA1UEChMFQ0FJUk4xFzAVBgNVBAMTDnd3dy5jYWlybi5pbmZvMIGfMA0GCSqG SIb3DQEBAQUAA4GNADCBiQKBgQDRPuV40csQ00mQUww+eQ7sNqaJRLBqDgufitNd cMwIl6cgaPAkIvpYVQPwdxhDWqzQCYJagg6pd9Jw/Rcws7rGf1S7vlWQ6vlP/7y1 aA54xMcvM1Bx6FAp0h2oHGDfSf6HlxpsvwAJLi5ArU4EZw8CejYzWwE6XmYbj5ox U9p/gQIDAQABo4GYMIGVMB0GA1UdDgQWBBSKxxPh1wwwyfuboXg0mpgjcRvoujBm BgNVHSMEXzBdgBSKxxPh1wwwyfuboXg0mpgjcRvouqE6pDgwNjELMAkGA1UEBhMC QkUxDjAMBgNVBAoTBUNBSVJOMRcwFQYDVQQDEw53d3cuY2Fpcm4uaW5mb4IJANHZ 2qyvCn4GMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEArQe7ZnkoaPH+ MBICLC8YFFEfEEpF1hLcMcJBqLQYaaqhFw6olWUogbU8eX9Wvz1qKEZwKryJkrAs oDjy4c/5nHwxlFZheFLcnWiQdxmv9qjtZqV41SSn7zNVX0U9YUoY6lrtSZH/4Btk E25Bh11XZRlFI1reece1ILLnGQ7t3Hw= CAIRN.INFO Cairn est né de la volonté de quatre maisons d’édition (Belin, De Boeck, La Découverte et Erès) ayant en charge la publication et la diffusion de revues de sciences humaines et sociales, d’unir leurs efforts pour améliorer leur présence sur l’Internet, et de proposer à d’autres acteurs souhaitant développer une version électronique de leurs publications, les outils techniques et commerciaux développés à cet effet. L’ambition de Cairn est d’aider les maisons d’édition, organismes ou associations en charge de la publication de revues de sciences humaines francophones à gérer la double publication de ces revues. Dans ce but, les services de Cairn couvrent à la fois la fabrication papier et électronique, la distribution papier (gestion des abonnements, routage) et électronique (texte intégral en ligne, distribution des métadonnées auprès des sites et bases bibliographiques), ainsi que la diffusion et la promotion de ces revues auprès des publics auxquels elles s’adressent. CAIRN SA CAIRN.INFO https://www.cairn.info/ Jean-Baptiste de Vathaire jb.devathaire@cairn.info MIIDGTCCAoKgAwIBAgIJALeu48Y7c7m/MA0GCSqGSIb3DQEBBQUAMGcxCzAJBgNV BAYTAkZSMQ8wDQYDVQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMQwwCgYDVQQK EwNDRkMxDDAKBgNVBAsTA0NGQzEbMBkGA1UEAxMSZGVsb3AuY2Zjb3BpZXMuY29t MB4XDTA5MDYwMjEyMzk0M1oXDTEwMDYwMjEyMzk0M1owZzELMAkGA1UEBhMCRlIx DzANBgNVBAgTBkZyYW5jZTEOMAwGA1UEBxMFUGFyaXMxDDAKBgNVBAoTA0NGQzEM MAoGA1UECxMDQ0ZDMRswGQYDVQQDExJkZWxvcC5jZmNvcGllcy5jb20wgZ8wDQYJ KoZIhvcNAQEBBQADgY0AMIGJAoGBAMFUeNlNN5vyMFeOktqmXVwXWGblGT9zhNBh /Ij1SEhok0to/ta2fehFGwS3p9R8UvsMaaII6FRv1lmrnSwbwlXQdz8fHacsps4m SYjsFpBkeQnwbhnW7xOu1zSk1O7dJgu8CcrUaC2ZdiSyKfzSqdQvGyOXPxl3Dcyr JZTbcdeZAgMBAAGjgcwwgckwHQYDVR0OBBYEFClMHTBKxbK7V63Nqi1HJE136nEy MIGZBgNVHSMEgZEwgY6AFClMHTBKxbK7V63Nqi1HJE136nEyoWukaTBnMQswCQYD VQQGEwJGUjEPMA0GA1UECBMGRnJhbmNlMQ4wDAYDVQQHEwVQYXJpczEMMAoGA1UE ChMDQ0ZDMQwwCgYDVQQLEwNDRkMxGzAZBgNVBAMTEmRlbG9wLmNmY29waWVzLmNv bYIJALeu48Y7c7m/MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAi0aZ 83Era65M1nA7ezyos2IujfoWF2ibJTJvMFIKB4PTH+mlSecPWOkUufhNFw92io+0 kmaOku8eXBMdrjGjf/wtIg3MqxsOstC6Wx8T49eKPdCzDnj6flCAc4aZct1FYm9P 7lrXDBSVTBgsd/9KRGYJ7GkrBYIG9XlU028PPrc= MIIDGTCCAoKgAwIBAgIJALeu48Y7c7m/MA0GCSqGSIb3DQEBBQUAMGcxCzAJBgNV BAYTAkZSMQ8wDQYDVQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMQwwCgYDVQQK EwNDRkMxDDAKBgNVBAsTA0NGQzEbMBkGA1UEAxMSZGVsb3AuY2Zjb3BpZXMuY29t MB4XDTA5MDYwMjEyMzk0M1oXDTEwMDYwMjEyMzk0M1owZzELMAkGA1UEBhMCRlIx DzANBgNVBAgTBkZyYW5jZTEOMAwGA1UEBxMFUGFyaXMxDDAKBgNVBAoTA0NGQzEM MAoGA1UECxMDQ0ZDMRswGQYDVQQDExJkZWxvcC5jZmNvcGllcy5jb20wgZ8wDQYJ KoZIhvcNAQEBBQADgY0AMIGJAoGBAMFUeNlNN5vyMFeOktqmXVwXWGblGT9zhNBh /Ij1SEhok0to/ta2fehFGwS3p9R8UvsMaaII6FRv1lmrnSwbwlXQdz8fHacsps4m SYjsFpBkeQnwbhnW7xOu1zSk1O7dJgu8CcrUaC2ZdiSyKfzSqdQvGyOXPxl3Dcyr JZTbcdeZAgMBAAGjgcwwgckwHQYDVR0OBBYEFClMHTBKxbK7V63Nqi1HJE136nEy MIGZBgNVHSMEgZEwgY6AFClMHTBKxbK7V63Nqi1HJE136nEyoWukaTBnMQswCQYD VQQGEwJGUjEPMA0GA1UECBMGRnJhbmNlMQ4wDAYDVQQHEwVQYXJpczEMMAoGA1UE ChMDQ0ZDMQwwCgYDVQQLEwNDRkMxGzAZBgNVBAMTEmRlbG9wLmNmY29waWVzLmNv bYIJALeu48Y7c7m/MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAi0aZ 83Era65M1nA7ezyos2IujfoWF2ibJTJvMFIKB4PTH+mlSecPWOkUufhNFw92io+0 kmaOku8eXBMdrjGjf/wtIg3MqxsOstC6Wx8T49eKPdCzDnj6flCAc4aZct1FYm9P 7lrXDBSVTBgsd/9KRGYJ7GkrBYIG9XlU028PPrc= urn:mace:shibboleth:1.0:nameIdentifier Bourdin Thomas tbourdin@businesslab.com cnrs.fr MIICrzCCAhigAwIBAgIBADANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQGEwJGUjEN MAsGA1UEChMEQ05SUzEQMA4GA1UECxMHTU9ZMTY3ODEaMBgGA1UEAxMRamFudXMu ZHNpLmNucnMuZnIwHhcNMDkwNzA2MTM0NTQ5WhcNMjkwNzAxMTM0NTQ5WjBKMQsw CQYDVQQGEwJGUjENMAsGA1UEChMEQ05SUzEQMA4GA1UECxMHTU9ZMTY3ODEaMBgG A1UEAxMRamFudXMuZHNpLmNucnMuZnIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ AoGBAMWYVMjJRPP/YAq9wTJDr9rkLfm8VpnK/8MM8c2YqVtewBqnOgnlo0k0n7oC jnkwpmTa0Wycgbx4wek3TeaDG49KrKlSD2HlyvelLvlMuFXYTyqndBk+7p+RX+h3 FjC+qqCUWHzEIfWwNNGNrnLza4WHsb0B5oJZMqB7WSfcpL/5AgMBAAGjgaQwgaEw HQYDVR0OBBYEFAIowpwjXZw7sNhsQhBxv4ISaaHKMHIGA1UdIwRrMGmAFAIowpwj XZw7sNhsQhBxv4ISaaHKoU6kTDBKMQswCQYDVQQGEwJGUjENMAsGA1UEChMEQ05S UzEQMA4GA1UECxMHTU9ZMTY3ODEaMBgGA1UEAxMRamFudXMuZHNpLmNucnMuZnKC AQAwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQCIdgOBuDJQ5nr/kb+u oxlXkk9jwQcsmEgAteIhzE9+tA1PLXJ6di60PMq839lcm8v4gVxk/JtWJzrVY1pi m+gmLH30NygYX8ACokRdLMvL5FQHBsbQN1VTwmXKYCnWoYtSMauaxr+eUhVDjg/s pV1Gt+/saN/LhZGKd3NLvfjacQ== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient CNRS CNRS http://unknown.site.com Benjamin Girard Benjamin.Girard@dsi.cnrs.fr Claude Gross Claude.Gross@urec.cnrs.fr vigny.dr15.cnrs.fr CN=vigny.dr15.cnrs.fr,OU=MOY1500,O=CNRS,C=FR MIIDxzCCAq+gAwIBAgIJAPo3kEvMv2TQMA0GCSqGSIb3DQEBBQUAMEsxCzAJBgNV BAYTAkZSMQ0wCwYDVQQKEwRDTlJTMRAwDgYDVQQLEwdNT1kxNTAwMRswGQYDVQQD ExJ2aWdueS5kcjE1LmNucnMuZnIwHhcNMTAwMjAyMTQxMTQxWhcNMzAwMTI4MTQx MTQxWjBLMQswCQYDVQQGEwJGUjENMAsGA1UEChMEQ05SUzEQMA4GA1UECxMHTU9Z MTUwMDEbMBkGA1UEAxMSdmlnbnkuZHIxNS5jbnJzLmZyMIIBIjANBgkqhkiG9w0B AQEFAAOCAQ8AMIIBCgKCAQEAuOu3SgdnpmhKLHWjBnN8gXDX9dzwhpVOdGLs0qNb Ukw++0bD3GcF6xLlDNxIAN+xN4ZM4XJtqPjKDaHWU3op90z95kYeMKFAa9DCFliA I9G0dHlAvkSpFPwND8av/OeyIIuEAqYjnRLODBwIgimhzvRJu1o3TwdJuYaiUpB+ Xoa+4lqhsa4uz9hjobb2815HOkkUiRRgvLfKtOJ5v/xBql7Up6zRtPj3ivMcwZCq nD6TAgA4FEGZOOHhhu1OVFTzQbSIlFFkauD7j4LhqbZH8JOGn9dUsFbXKUXhkJxB nmsXPwgnERxnQ1r40BfGhvAmmlb3Q8nOro/jPUNIn0c6JwIDAQABo4GtMIGqMB0G A1UdDgQWBBRoJ9AsGZFh1kl/W1dr11C/tNJ7ejB7BgNVHSMEdDBygBRoJ9AsGZFh 1kl/W1dr11C/tNJ7eqFPpE0wSzELMAkGA1UEBhMCRlIxDTALBgNVBAoTBENOUlMx EDAOBgNVBAsTB01PWTE1MDAxGzAZBgNVBAMTEnZpZ255LmRyMTUuY25ycy5mcoIJ APo3kEvMv2TQMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAIpp+c8F O+vFHhXwk6tVvjgdynUoA/zP6cLBm0pMrHhRWGUGPL70yuQhi62qflmxBGfvXEOJ OAr9FkrzludLFFwk333Junf5OPQ/AJkAQoc2ulhHLTI5OFWdinIyO7YntvcSq94r faGrKDKlEYDTFThCHCZ6g+j22Sw/oIP675LLqfO/kXaOdEZ+0o4+iv3cAtm2aZJC /d/9tutboZpYjjtXb7WPuzSMFKYFRS2lVdB/lswrO1k/CuEyIeNKPBRQUfPVjYDZ z3A6v+gutVseedopSZnf9zsLon057HsnJup4BhjCs+tYheo7O6i/RsFofWNMd/Du 39GRuSxjrc9yWYg= vigny.dr15.cnrs.fr CN=vigny.dr15.cnrs.fr,OU=MOY1500,O=CNRS,C=FR MIIDxzCCAq+gAwIBAgIJAPo3kEvMv2TQMA0GCSqGSIb3DQEBBQUAMEsxCzAJBgNV BAYTAkZSMQ0wCwYDVQQKEwRDTlJTMRAwDgYDVQQLEwdNT1kxNTAwMRswGQYDVQQD ExJ2aWdueS5kcjE1LmNucnMuZnIwHhcNMTAwMjAyMTQxMTQxWhcNMzAwMTI4MTQx MTQxWjBLMQswCQYDVQQGEwJGUjENMAsGA1UEChMEQ05SUzEQMA4GA1UECxMHTU9Z MTUwMDEbMBkGA1UEAxMSdmlnbnkuZHIxNS5jbnJzLmZyMIIBIjANBgkqhkiG9w0B AQEFAAOCAQ8AMIIBCgKCAQEAuOu3SgdnpmhKLHWjBnN8gXDX9dzwhpVOdGLs0qNb Ukw++0bD3GcF6xLlDNxIAN+xN4ZM4XJtqPjKDaHWU3op90z95kYeMKFAa9DCFliA I9G0dHlAvkSpFPwND8av/OeyIIuEAqYjnRLODBwIgimhzvRJu1o3TwdJuYaiUpB+ Xoa+4lqhsa4uz9hjobb2815HOkkUiRRgvLfKtOJ5v/xBql7Up6zRtPj3ivMcwZCq nD6TAgA4FEGZOOHhhu1OVFTzQbSIlFFkauD7j4LhqbZH8JOGn9dUsFbXKUXhkJxB nmsXPwgnERxnQ1r40BfGhvAmmlb3Q8nOro/jPUNIn0c6JwIDAQABo4GtMIGqMB0G A1UdDgQWBBRoJ9AsGZFh1kl/W1dr11C/tNJ7ejB7BgNVHSMEdDBygBRoJ9AsGZFh 1kl/W1dr11C/tNJ7eqFPpE0wSzELMAkGA1UEBhMCRlIxDTALBgNVBAoTBENOUlMx EDAOBgNVBAsTB01PWTE1MDAxGzAZBgNVBAMTEnZpZ255LmRyMTUuY25ycy5mcoIJ APo3kEvMv2TQMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAIpp+c8F O+vFHhXwk6tVvjgdynUoA/zP6cLBm0pMrHhRWGUGPL70yuQhi62qflmxBGfvXEOJ OAr9FkrzludLFFwk333Junf5OPQ/AJkAQoc2ulhHLTI5OFWdinIyO7YntvcSq94r faGrKDKlEYDTFThCHCZ6g+j22Sw/oIP675LLqfO/kXaOdEZ+0o4+iv3cAtm2aZJC /d/9tutboZpYjjtXb7WPuzSMFKYFRS2lVdB/lswrO1k/CuEyIeNKPBRQUfPVjYDZ z3A6v+gutVseedopSZnf9zsLon057HsnJup4BhjCs+tYheo7O6i/RsFofWNMd/Du 39GRuSxjrc9yWYg= MIICszCCAhygAwIBAgIJAMCuSnNMDtqPMA0GCSqGSIb3DQEBBQUAMEYxCzAJBgNV BAYTAkZSMQ0wCwYDVQQKEwRDTlJTMQ0wCwYDVQQLEwRVUkVDMRkwFwYDVQQDExB0 Y3MudXJlYy5jbnJzLmZyMB4XDTA5MDkwOTEzNTQ1OVoXDTA5MTAwOTEzNTQ1OVow RjELMAkGA1UEBhMCRlIxDTALBgNVBAoTBENOUlMxDTALBgNVBAsTBFVSRUMxGTAX BgNVBAMTEHRjcy51cmVjLmNucnMuZnIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ AoGBAOgZsEqTrtSNlS1fsvCl1Izzxzc8S+8KfngANeBFo5V4ZQgbw9fEZB5PHBY+ Z9al+44k5W/P78lEbxXKlatRDjmOpN6AaGNIs32y5tGh12VOcYuZQodUlIDjGZSD 1MWaGdiMUj0yjrbGlFmjmfcFY+A3io6Oxj0Se4RSGM3M34o1AgMBAAGjgagwgaUw HQYDVR0OBBYEFNL0xHnl3cVPUhfTPujsb+9fKsJpMHYGA1UdIwRvMG2AFNL0xHnl 3cVPUhfTPujsb+9fKsJpoUqkSDBGMQswCQYDVQQGEwJGUjENMAsGA1UEChMEQ05S UzENMAsGA1UECxMEVVJFQzEZMBcGA1UEAxMQdGNzLnVyZWMuY25ycy5mcoIJAMCu SnNMDtqPMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAUk+JGCOVoRZK fBTCkZP7pZ7eyY4sac9/ibGWlZWZCWPu46tn02IwM1pWrSvkZsCDQq14YHdp81EX Hbxi4y7wrbaGw0VCqYnX8IOa/WZTJJ73TWquqlW1qwta5S0oThOfrxK+J2ccR/BE DZ2+p8tDBGn6OobxctzBT/fE08EiuT0= MIICszCCAhygAwIBAgIJAMCuSnNMDtqPMA0GCSqGSIb3DQEBBQUAMEYxCzAJBgNV BAYTAkZSMQ0wCwYDVQQKEwRDTlJTMQ0wCwYDVQQLEwRVUkVDMRkwFwYDVQQDExB0 Y3MudXJlYy5jbnJzLmZyMB4XDTA5MDkwOTEzNTQ1OVoXDTA5MTAwOTEzNTQ1OVow RjELMAkGA1UEBhMCRlIxDTALBgNVBAoTBENOUlMxDTALBgNVBAsTBFVSRUMxGTAX BgNVBAMTEHRjcy51cmVjLmNucnMuZnIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ AoGBAOgZsEqTrtSNlS1fsvCl1Izzxzc8S+8KfngANeBFo5V4ZQgbw9fEZB5PHBY+ Z9al+44k5W/P78lEbxXKlatRDjmOpN6AaGNIs32y5tGh12VOcYuZQodUlIDjGZSD 1MWaGdiMUj0yjrbGlFmjmfcFY+A3io6Oxj0Se4RSGM3M34o1AgMBAAGjgagwgaUw HQYDVR0OBBYEFNL0xHnl3cVPUhfTPujsb+9fKsJpMHYGA1UdIwRvMG2AFNL0xHnl 3cVPUhfTPujsb+9fKsJpoUqkSDBGMQswCQYDVQQGEwJGUjENMAsGA1UEChMEQ05S UzENMAsGA1UECxMEVVJFQzEZMBcGA1UEAxMQdGNzLnVyZWMuY25ycy5mcoIJAMCu SnNMDtqPMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAUk+JGCOVoRZK fBTCkZP7pZ7eyY4sac9/ibGWlZWZCWPu46tn02IwM1pWrSvkZsCDQq14YHdp81EX Hbxi4y7wrbaGw0VCqYnX8IOa/WZTJJ73TWquqlW1qwta5S0oThOfrxK+J2ccR/BE DZ2+p8tDBGn6OobxctzBT/fE08EiuT0= urn:mace:shibboleth:1.0:nameIdentifier Alice de Bignicourt alice.de-bignicourt@uec.cnrs.fr MIICvzCCAiigAwIBAgIJALPemZHNcaNnMA0GCSqGSIb3DQEBBQUAMEoxCzAJBgNV BAYTAkZSMQ0wCwYDVQQKEwRDTlJTMQ0wCwYDVQQLEwRVUkVDMR0wGwYDVQQDExR0 Y3N0ZXN0LnVyZWMuY25ycy5mcjAeFw0xMDAzMDExNDQyNTlaFw0zMDAyMjQxNDQy NTlaMEoxCzAJBgNVBAYTAkZSMQ0wCwYDVQQKEwRDTlJTMQ0wCwYDVQQLEwRVUkVD MR0wGwYDVQQDExR0Y3N0ZXN0LnVyZWMuY25ycy5mcjCBnzANBgkqhkiG9w0BAQEF AAOBjQAwgYkCgYEA5h72RA7HvaLPRoMCeoWWN4IXUAHvJhcxPw7LQoB7y+rgyfpn ugmCnd8KtlXcHpF0/IOS2srCJiTmsjkMyAjdSj6YWaZIqTyasKPjPT37zPn8AB0q AV0RGWLf/IMzqWdV1fF1KbUWL+tZzbbJ2bDe33grGpq4f8Tt2Xy8dbqokskCAwEA AaOBrDCBqTAdBgNVHQ4EFgQUhaAKtXPiHIvWNLP0B7BgUyFUlqwwegYDVR0jBHMw cYAUhaAKtXPiHIvWNLP0B7BgUyFUlqyhTqRMMEoxCzAJBgNVBAYTAkZSMQ0wCwYD VQQKEwRDTlJTMQ0wCwYDVQQLEwRVUkVDMR0wGwYDVQQDExR0Y3N0ZXN0LnVyZWMu Y25ycy5mcoIJALPemZHNcaNnMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD gYEA4UX5Hl4jP76dnp8uAKkOrUuSZKrqMwVO2XVVgmdcjQ/L3E6QolBEz25L9+mf zIXxms1PJOuc0tCG6DivHU/32oP5NBxgg6VMOJxHf6vX900mnYgOVt1cv9Gv0L+u a6MX8LnHjUFZRe3FI9UqsVx35bREOzo3UrEXqFr6xB3FSt0= MIICvzCCAiigAwIBAgIJALPemZHNcaNnMA0GCSqGSIb3DQEBBQUAMEoxCzAJBgNV BAYTAkZSMQ0wCwYDVQQKEwRDTlJTMQ0wCwYDVQQLEwRVUkVDMR0wGwYDVQQDExR0 Y3N0ZXN0LnVyZWMuY25ycy5mcjAeFw0xMDAzMDExNDQyNTlaFw0zMDAyMjQxNDQy NTlaMEoxCzAJBgNVBAYTAkZSMQ0wCwYDVQQKEwRDTlJTMQ0wCwYDVQQLEwRVUkVD MR0wGwYDVQQDExR0Y3N0ZXN0LnVyZWMuY25ycy5mcjCBnzANBgkqhkiG9w0BAQEF AAOBjQAwgYkCgYEA5h72RA7HvaLPRoMCeoWWN4IXUAHvJhcxPw7LQoB7y+rgyfpn ugmCnd8KtlXcHpF0/IOS2srCJiTmsjkMyAjdSj6YWaZIqTyasKPjPT37zPn8AB0q AV0RGWLf/IMzqWdV1fF1KbUWL+tZzbbJ2bDe33grGpq4f8Tt2Xy8dbqokskCAwEA AaOBrDCBqTAdBgNVHQ4EFgQUhaAKtXPiHIvWNLP0B7BgUyFUlqwwegYDVR0jBHMw cYAUhaAKtXPiHIvWNLP0B7BgUyFUlqyhTqRMMEoxCzAJBgNVBAYTAkZSMQ0wCwYD VQQKEwRDTlJTMQ0wCwYDVQQLEwRVUkVDMR0wGwYDVQQDExR0Y3N0ZXN0LnVyZWMu Y25ycy5mcoIJALPemZHNcaNnMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD gYEA4UX5Hl4jP76dnp8uAKkOrUuSZKrqMwVO2XVVgmdcjQ/L3E6QolBEz25L9+mf zIXxms1PJOuc0tCG6DivHU/32oP5NBxgg6VMOJxHf6vX900mnYgOVt1cv9Gv0L+u a6MX8LnHjUFZRe3FI9UqsVx35bREOzo3UrEXqFr6xB3FSt0= urn:mace:shibboleth:1.0:nameIdentifier Claude Gross Claude.Gross@urec.cnrs.fr ferry.dr15.cnrs.fr CN=ferry.dr15.cnrs.fr,OU=MOY1500,O=CNRS,C=FR MIIDxzCCAq+gAwIBAgIJALuhYUDnr2FUMA0GCSqGSIb3DQEBBQUAMEsxCzAJBgNV BAYTAkZSMQ0wCwYDVQQKEwRDTlJTMRAwDgYDVQQLEwdNT1kxNTAwMRswGQYDVQQD ExJmZXJyeS5kcjE1LmNucnMuZnIwHhcNMTAwMzEwMTM0ODUxWhcNMzAwMzA1MTM0 ODUxWjBLMQswCQYDVQQGEwJGUjENMAsGA1UEChMEQ05SUzEQMA4GA1UECxMHTU9Z MTUwMDEbMBkGA1UEAxMSZmVycnkuZHIxNS5jbnJzLmZyMIIBIjANBgkqhkiG9w0B AQEFAAOCAQ8AMIIBCgKCAQEAy+0VUKR+jwG0/E+d2GEUqYeAS51BfXP0q++uWV3T y61lZRQyvjFkLzGsBn85nPbMFgVV8psyZ7h1b+7lrWsenEWrKcZxtb8ZxCag7RtG 1sBwac8xDgNBMPVtjgD/fflkgZ8tT19zvzw02XzilwY7BeY+qL7mbWO3nEb8G8YA kaLgx8W1+O6Tb4vo1knsvIY9AXv8RQQ7GAVGdbHp1aus5rRJSiBEoxKNVHH+7EnR gTIiQ6H4ubSef2kzPUYzTcfseKqkG0QZKE8DjAqZvcvnAvwEwrZNU/V5MtihwSPj 9cUtZjODj+THGJS9axivcdq01o30GSc1jaGpOxkizx/31QIDAQABo4GtMIGqMB0G A1UdDgQWBBSk69c/MNGzEK0qsfneQUk1kIygBTB7BgNVHSMEdDBygBSk69c/MNGz EK0qsfneQUk1kIygBaFPpE0wSzELMAkGA1UEBhMCRlIxDTALBgNVBAoTBENOUlMx EDAOBgNVBAsTB01PWTE1MDAxGzAZBgNVBAMTEmZlcnJ5LmRyMTUuY25ycy5mcoIJ ALuhYUDnr2FUMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKKg9Y0H nCwdLJejXBk/D1GCqHqKmXti9gYtl4pnSYE6XFBiQLojCMy7CEBdaSJCIKpc7RVj Fjm7OjUrnvm7Zsz0bJvZ4ZJUGqrfoAXqW+GgsJNg8XgqyDOOgzj+5AbA1OugkNDu Si8cEq4vndxU8GVK+Nn9oxntTN6JL06+K0L7ArUZneyFJB5m13i+ZR6aapIOYvOf Z9hy2+1CJMU8lDPIg5W0PI3WmVuFl/hNO/OKdTo8Ix6DVeKoaBVjNERXbGXNW7JI Ugr24VE4pUTqq2xGSOazVN0EKSqULXvM9ZHupGDCJmRH4P3H/X4w8Cq5Y6c0pDtJ 6ZEQiB6UNbs/9mg= ferry.dr15.cnrs.fr CN=ferry.dr15.cnrs.fr,OU=MOY1500,O=CNRS,C=FR MIIDxzCCAq+gAwIBAgIJALuhYUDnr2FUMA0GCSqGSIb3DQEBBQUAMEsxCzAJBgNV BAYTAkZSMQ0wCwYDVQQKEwRDTlJTMRAwDgYDVQQLEwdNT1kxNTAwMRswGQYDVQQD ExJmZXJyeS5kcjE1LmNucnMuZnIwHhcNMTAwMzEwMTM0ODUxWhcNMzAwMzA1MTM0 ODUxWjBLMQswCQYDVQQGEwJGUjENMAsGA1UEChMEQ05SUzEQMA4GA1UECxMHTU9Z MTUwMDEbMBkGA1UEAxMSZmVycnkuZHIxNS5jbnJzLmZyMIIBIjANBgkqhkiG9w0B AQEFAAOCAQ8AMIIBCgKCAQEAy+0VUKR+jwG0/E+d2GEUqYeAS51BfXP0q++uWV3T y61lZRQyvjFkLzGsBn85nPbMFgVV8psyZ7h1b+7lrWsenEWrKcZxtb8ZxCag7RtG 1sBwac8xDgNBMPVtjgD/fflkgZ8tT19zvzw02XzilwY7BeY+qL7mbWO3nEb8G8YA kaLgx8W1+O6Tb4vo1knsvIY9AXv8RQQ7GAVGdbHp1aus5rRJSiBEoxKNVHH+7EnR gTIiQ6H4ubSef2kzPUYzTcfseKqkG0QZKE8DjAqZvcvnAvwEwrZNU/V5MtihwSPj 9cUtZjODj+THGJS9axivcdq01o30GSc1jaGpOxkizx/31QIDAQABo4GtMIGqMB0G A1UdDgQWBBSk69c/MNGzEK0qsfneQUk1kIygBTB7BgNVHSMEdDBygBSk69c/MNGz EK0qsfneQUk1kIygBaFPpE0wSzELMAkGA1UEBhMCRlIxDTALBgNVBAoTBENOUlMx EDAOBgNVBAsTB01PWTE1MDAxGzAZBgNVBAMTEmZlcnJ5LmRyMTUuY25ycy5mcoIJ ALuhYUDnr2FUMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKKg9Y0H nCwdLJejXBk/D1GCqHqKmXti9gYtl4pnSYE6XFBiQLojCMy7CEBdaSJCIKpc7RVj Fjm7OjUrnvm7Zsz0bJvZ4ZJUGqrfoAXqW+GgsJNg8XgqyDOOgzj+5AbA1OugkNDu Si8cEq4vndxU8GVK+Nn9oxntTN6JL06+K0L7ArUZneyFJB5m13i+ZR6aapIOYvOf Z9hy2+1CJMU8lDPIg5W0PI3WmVuFl/hNO/OKdTo8Ix6DVeKoaBVjNERXbGXNW7JI Ugr24VE4pUTqq2xGSOazVN0EKSqULXvM9ZHupGDCJmRH4P3H/X4w8Cq5Y6c0pDtJ 6ZEQiB6UNbs/9mg= MIICazCCAdSgAwIBAgIETA4qBTANBgkqhkiG9w0BAQUFADB6MRAwDgYDVQQGEwdVbmtub3duMRAw DgYDVQQIEwdVbmtub3duMRAwDgYDVQQHEwdVbmtub3duMRAwDgYDVQQKEwdVbmtub3duMRAwDgYD VQQLEwdVbmtub3duMR4wHAYDVQQDExVvcGVuc3NvLnRnZS1hZG9uaXMuZnIwHhcNMTAwNjA4MTEz MTE3WhcNMTEwNjA4MTEzMTE3WjB6MRAwDgYDVQQGEwdVbmtub3duMRAwDgYDVQQIEwdVbmtub3du MRAwDgYDVQQHEwdVbmtub3duMRAwDgYDVQQKEwdVbmtub3duMRAwDgYDVQQLEwdVbmtub3duMR4w HAYDVQQDExVvcGVuc3NvLnRnZS1hZG9uaXMuZnIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGB AJmqGfdCanVxWt2zH7XNsCuP0hk4poRbdRzHW5TNZWooTlYmEkrV+hqxcZquAEjar4HDN6btWKlQ Fn/mTRgtiOSiFgZ5hmvKPAAuvWaa1dA5pcLTMpyz5DQTLrFNBtg9xAtQD0pRc2pUvZ+sAs706K5U 9sfL+SHQYo1ZtnLBrx/zAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAHqQWK8LSReyfchVsGiUvZsYQ V05t9Hf6MpJ0hGd/RKx1egUGFr5Kp9Tv7CAiVjpQgnGvVME8sOWbBRUZF7WfGIeqF6ZOOUGRqNUr CXI213N5P4ff4kQnTt2kPHt5tOlUofByYiJmcz3SNTo5hIRNf/5B7q8Kqb7OMFduRXhfXnk= MIICazCCAdSgAwIBAgIETA4qBTANBgkqhkiG9w0BAQUFADB6MRAwDgYDVQQGEwdVbmtub3duMRAw DgYDVQQIEwdVbmtub3duMRAwDgYDVQQHEwdVbmtub3duMRAwDgYDVQQKEwdVbmtub3duMRAwDgYD VQQLEwdVbmtub3duMR4wHAYDVQQDExVvcGVuc3NvLnRnZS1hZG9uaXMuZnIwHhcNMTAwNjA4MTEz MTE3WhcNMTEwNjA4MTEzMTE3WjB6MRAwDgYDVQQGEwdVbmtub3duMRAwDgYDVQQIEwdVbmtub3du MRAwDgYDVQQHEwdVbmtub3duMRAwDgYDVQQKEwdVbmtub3duMRAwDgYDVQQLEwdVbmtub3duMR4w HAYDVQQDExVvcGVuc3NvLnRnZS1hZG9uaXMuZnIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGB AJmqGfdCanVxWt2zH7XNsCuP0hk4poRbdRzHW5TNZWooTlYmEkrV+hqxcZquAEjar4HDN6btWKlQ Fn/mTRgtiOSiFgZ5hmvKPAAuvWaa1dA5pcLTMpyz5DQTLrFNBtg9xAtQD0pRc2pUvZ+sAs706K5U 9sfL+SHQYo1ZtnLBrx/zAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAHqQWK8LSReyfchVsGiUvZsYQ V05t9Hf6MpJ0hGd/RKx1egUGFr5Kp9Tv7CAiVjpQgnGvVME8sOWbBRUZF7WfGIeqF6ZOOUGRqNUr CXI213N5P4ff4kQnTt2kPHt5tOlUofByYiJmcz3SNTo5hIRNf/5B7q8Kqb7OMFduRXhfXnk= 128 urn:oasis:names:tc:SAML:2.0:nameid-format:transient urn:oasis:names:tc:SAML:2.0:nameid-format:kerberos urn:oasis:names:tc:SAML:2.0:nameid-format:persistent pegase.dr4.cnrs.fr_ss CN=pegase.dr4.cnrs.fr_ss,OU=MOY400,O=CNRS,C=FR CN=pegase.dr4.cnrs.fr_ss,OU=MOY400,O=CNRS,C=FR 10203741666116935684 MIIDzTCCArWgAwIBAgIJAI2a+PvMwKAEMA0GCSqGSIb3DQEBBQUAME0xCzAJBgNV BAYTAkZSMQ0wCwYDVQQKEwRDTlJTMQ8wDQYDVQQLEwZNT1k0MDAxHjAcBgNVBAMU FXBlZ2FzZS5kcjQuY25ycy5mcl9zczAeFw0wOTExMDUwOTEwMjhaFw0xOTExMDMw OTEwMjhaME0xCzAJBgNVBAYTAkZSMQ0wCwYDVQQKEwRDTlJTMQ8wDQYDVQQLEwZN T1k0MDAxHjAcBgNVBAMUFXBlZ2FzZS5kcjQuY25ycy5mcl9zczCCASIwDQYJKoZI hvcNAQEBBQADggEPADCCAQoCggEBAMlwjBlRjMVXB+Q94LdDf3v6KeOtwcMdV5JZ K1NTsCd9eGKB/CEBzc0d65Ul4U2dqEPa8LIg3uaMUXqSDtqDb9BQxjBQ7h1QWcy9 S+Fr3uBIiQ2otLgf6F7nKutvyq8PQGCQqwQlLx49lXzP0oYeDkgcDx+TzEwQ3Zxw 7ZgwDuTA74movEyFTOd6al5tj/o0koVy/ZsetLHEwQKVgtiuDJ+otWMQ1XIDe4kq YxBfnWE1F1CM90cZAYHZ00gi5V+wwdacHhBv7hY5P5Tp0lxTg96iZd3sDcl6LqCX UPxbxIUZsqsQatwv//cJ/CkiPe0CYrytShbKAElu5OLtLgLRRLMCAwEAAaOBrzCB rDAdBgNVHQ4EFgQUg9pp37XbUT6VbQ7NSXZfPmdTNAkwfQYDVR0jBHYwdIAUg9pp 37XbUT6VbQ7NSXZfPmdTNAmhUaRPME0xCzAJBgNVBAYTAkZSMQ0wCwYDVQQKEwRD TlJTMQ8wDQYDVQQLEwZNT1k0MDAxHjAcBgNVBAMUFXBlZ2FzZS5kcjQuY25ycy5m cl9zc4IJAI2a+PvMwKAEMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEB AINamk+ImZ4bTZZ9w7Hgz2gpNgGO0hPyblIEkVAjRAWC9QA6FIQid6XXtufaumZN MtGskuJN0KohWdQ7xC8OjlknfdUBq++eSvFy1EyLaouD/gAxgF4ehvYe5I5sbaRj 2PN0sNEdKN7cqbFT1fHeqRxQxG/aJm+HBV+P5Iq8CBSwum2GiOVKqjRW8ux7lcpo 3bkAw5PezUY1ZArXzfA3YRQs+vv9mxMQ74jWAbTKvlCHrfC61sBRV8ODUaQGxDn/ CQgPZXYAwzXj/tRIcjnDLGMAHdj7QvX5rSZvdk9ugPE9nHRVSMyJuH+xCghkj0Qp TFAILYT7KOyvBq2HJS1VAkU= pegase.dr4.cnrs.fr_ss CN=pegase.dr4.cnrs.fr_ss,OU=MOY400,O=CNRS,C=FR CN=pegase.dr4.cnrs.fr_ss,OU=MOY400,O=CNRS,C=FR 10203741666116935684 MIIDzTCCArWgAwIBAgIJAI2a+PvMwKAEMA0GCSqGSIb3DQEBBQUAME0xCzAJBgNV BAYTAkZSMQ0wCwYDVQQKEwRDTlJTMQ8wDQYDVQQLEwZNT1k0MDAxHjAcBgNVBAMU FXBlZ2FzZS5kcjQuY25ycy5mcl9zczAeFw0wOTExMDUwOTEwMjhaFw0xOTExMDMw OTEwMjhaME0xCzAJBgNVBAYTAkZSMQ0wCwYDVQQKEwRDTlJTMQ8wDQYDVQQLEwZN T1k0MDAxHjAcBgNVBAMUFXBlZ2FzZS5kcjQuY25ycy5mcl9zczCCASIwDQYJKoZI hvcNAQEBBQADggEPADCCAQoCggEBAMlwjBlRjMVXB+Q94LdDf3v6KeOtwcMdV5JZ K1NTsCd9eGKB/CEBzc0d65Ul4U2dqEPa8LIg3uaMUXqSDtqDb9BQxjBQ7h1QWcy9 S+Fr3uBIiQ2otLgf6F7nKutvyq8PQGCQqwQlLx49lXzP0oYeDkgcDx+TzEwQ3Zxw 7ZgwDuTA74movEyFTOd6al5tj/o0koVy/ZsetLHEwQKVgtiuDJ+otWMQ1XIDe4kq YxBfnWE1F1CM90cZAYHZ00gi5V+wwdacHhBv7hY5P5Tp0lxTg96iZd3sDcl6LqCX UPxbxIUZsqsQatwv//cJ/CkiPe0CYrytShbKAElu5OLtLgLRRLMCAwEAAaOBrzCB rDAdBgNVHQ4EFgQUg9pp37XbUT6VbQ7NSXZfPmdTNAkwfQYDVR0jBHYwdIAUg9pp 37XbUT6VbQ7NSXZfPmdTNAmhUaRPME0xCzAJBgNVBAYTAkZSMQ0wCwYDVQQKEwRD TlJTMQ8wDQYDVQQLEwZNT1k0MDAxHjAcBgNVBAMUFXBlZ2FzZS5kcjQuY25ycy5m cl9zc4IJAI2a+PvMwKAEMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEB AINamk+ImZ4bTZZ9w7Hgz2gpNgGO0hPyblIEkVAjRAWC9QA6FIQid6XXtufaumZN MtGskuJN0KohWdQ7xC8OjlknfdUBq++eSvFy1EyLaouD/gAxgF4ehvYe5I5sbaRj 2PN0sNEdKN7cqbFT1fHeqRxQxG/aJm+HBV+P5Iq8CBSwum2GiOVKqjRW8ux7lcpo 3bkAw5PezUY1ZArXzfA3YRQs+vv9mxMQ74jWAbTKvlCHrfC61sBRV8ODUaQGxDn/ CQgPZXYAwzXj/tRIcjnDLGMAHdj7QvX5rSZvdk9ugPE9nHRVSMyJuH+xCghkj0Qp TFAILYT7KOyvBq2HJS1VAkU= ezticket-dev.inist.fr CN=ezticket-dev.inist.fr CN=ezticket-dev.inist.fr 14638227443713838146 MIIDBjCCAe6gAwIBAgIJAMslbk2r8AxCMA0GCSqGSIb3DQEBBQUAMCAxHjAcBgNV BAMTFWV6dGlja2V0LWRldi5pbmlzdC5mcjAeFw0xMDA5MjcxNzA2MDhaFw0yMDA5 MjQxNzA2MDhaMCAxHjAcBgNVBAMTFWV6dGlja2V0LWRldi5pbmlzdC5mcjCCASIw DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOAQ8L+hBRR/YRqo+uOOngi4dke6 ELzLfyGc4wfudzgYd/ui8PKICbC8r9Go74eHJJFgSshFjQRddsQ1dZ4vopOLavCz 6wcfkwkl8Cnb6NQpRvY5hiUFQ3FLzNqlMSt8wuEWsNdhKptqXj9DNKGQKwa1GiMt Z9EJd8N7Ss06C9IyO2CKQp0ZMWTdYKpcqVDPqBNKfkoeIC0+E81L7+2aCoPwYQw+ 4uBj7klJi52o6f98pjplcqLzsWh2BDVdIDG0J4+FIAgEt7HhPk6k+0YzRC2ngOlW GBJOhHYTgxeIBiCa3fuNKFheGo+hgUehQSwogJh6pcG4o/xjT8nI8mg3A0sCAwEA AaNDMEEwIAYDVR0RBBkwF4IVZXp0aWNrZXQtZGV2LmluaXN0LmZyMB0GA1UdDgQW BBQIr2Toi0rn/Ko4FdVXLI17UFvrPzANBgkqhkiG9w0BAQUFAAOCAQEA00IjkMpH x7WAYCnTk6rC7Y0mbhZ/giu8XQqlQKBPXIxFpVLUg+k/DpuHkim106AUig5Nx7pk B8Ga1oC8G1r5HSYDOqO+gYIzDV4COhw8zyBmOuDCuff0MKlm5jVw9cmPHYh9akbY POcYlaZ/u5A2KURJTUBp5STKPVW5aWJfUzdi6qSuebsoVf0tHGkU+fVlF4h+S4Nd ns3F83JEE+ugUpt0Gf+ys/5o1Isdgd4h4+Kgp7yvBAJcN0qhL84j58S+/0j5Pu0Y ZENjT9sYsYznENF/PBnH/WrOJ5bHaxA11YeW1jJRRNXrEIhivQVIJyxWuIaDD6c8 c5KNtXZtZt2AIQ== ezticket-dev.inist.fr CN=ezticket-dev.inist.fr CN=ezticket-dev.inist.fr 14638227443713838146 MIIDBjCCAe6gAwIBAgIJAMslbk2r8AxCMA0GCSqGSIb3DQEBBQUAMCAxHjAcBgNV BAMTFWV6dGlja2V0LWRldi5pbmlzdC5mcjAeFw0xMDA5MjcxNzA2MDhaFw0yMDA5 MjQxNzA2MDhaMCAxHjAcBgNVBAMTFWV6dGlja2V0LWRldi5pbmlzdC5mcjCCASIw DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOAQ8L+hBRR/YRqo+uOOngi4dke6 ELzLfyGc4wfudzgYd/ui8PKICbC8r9Go74eHJJFgSshFjQRddsQ1dZ4vopOLavCz 6wcfkwkl8Cnb6NQpRvY5hiUFQ3FLzNqlMSt8wuEWsNdhKptqXj9DNKGQKwa1GiMt Z9EJd8N7Ss06C9IyO2CKQp0ZMWTdYKpcqVDPqBNKfkoeIC0+E81L7+2aCoPwYQw+ 4uBj7klJi52o6f98pjplcqLzsWh2BDVdIDG0J4+FIAgEt7HhPk6k+0YzRC2ngOlW GBJOhHYTgxeIBiCa3fuNKFheGo+hgUehQSwogJh6pcG4o/xjT8nI8mg3A0sCAwEA AaNDMEEwIAYDVR0RBBkwF4IVZXp0aWNrZXQtZGV2LmluaXN0LmZyMB0GA1UdDgQW BBQIr2Toi0rn/Ko4FdVXLI17UFvrPzANBgkqhkiG9w0BAQUFAAOCAQEA00IjkMpH x7WAYCnTk6rC7Y0mbhZ/giu8XQqlQKBPXIxFpVLUg+k/DpuHkim106AUig5Nx7pk B8Ga1oC8G1r5HSYDOqO+gYIzDV4COhw8zyBmOuDCuff0MKlm5jVw9cmPHYh9akbY POcYlaZ/u5A2KURJTUBp5STKPVW5aWJfUzdi6qSuebsoVf0tHGkU+fVlF4h+S4Nd ns3F83JEE+ugUpt0Gf+ys/5o1Isdgd4h4+Kgp7yvBAJcN0qhL84j58S+/0j5Pu0Y ZENjT9sYsYznENF/PBnH/WrOJ5bHaxA11YeW1jJRRNXrEIhivQVIJyxWuIaDD6c8 c5KNtXZtZt2AIQ== thetra.intra.inist.fr CN=thetra.intra.inist.fr CN=thetra.intra.inist.fr 14033384643799821211 MIIDBjCCAe6gAwIBAgIJAMLAmPtCHCubMA0GCSqGSIb3DQEBBQUAMCAxHjAcBgNV BAMTFXRoZXRyYS5pbnRyYS5pbmlzdC5mcjAeFw0xMTA0MTQwOTUyMTVaFw0yMTA0 MTEwOTUyMTVaMCAxHjAcBgNVBAMTFXRoZXRyYS5pbnRyYS5pbmlzdC5mcjCCASIw DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL0FSnbhEaKLqJJBUgnLnlqcme9W Hfr6+dSYWHTCWDlBAQNz7VzN15BRxGmB36hO6TPWKLX4q3AotJ6p8RpaA5QED3qa F16nz26jSqEgK/1H7Y6rAxVkcZf4tf3wUcm1paHNxZbzR3sHyAZtnKGc4+Hav3Di SLFfXrXpRK/BhNr4SDc+Z4hgqa3BGVg2q+7kV3PVHJfRGTrDYF7DikKsvPmGrJz1 P8RV+fNCDJKzq64xbSVAxZtfpHZYSPyizO7qKpRXw7j8WhlnOlUBoKkRQMRfvCIH By1Bw2c8hwN/ek/SS3P8DtkeF0VuyYOCmL5Ang3mutv53keSP+4KY/2mvMkCAwEA AaNDMEEwIAYDVR0RBBkwF4IVdGhldHJhLmludHJhLmluaXN0LmZyMB0GA1UdDgQW BBRQ0yw0LFBDs0EqtuZo05gtGvesATANBgkqhkiG9w0BAQUFAAOCAQEAs7K1BE24 O9MnIu7mSkCAHqXsIS5mnS84FO/YypCvymOeOaIL1cFs29PQabcnviSpX1hvXzqi JGr7fGxKr+0wMZN18C8NW3wk0/SG+1O/mHG5zRPBtfktVkq+F6CpDGiAojTmZ6Nc n3lvLcmiCBgvHaXpOgpPFqc+WRLZ5Fw+UHiDFol+Hi3MayXnkarp9f7x8RNOQbbT Q3dkxiUKRKr/eLTUSGF+7d/D2LJRQTzgT/l2YYd5kjykDVO7mEgNywjlnLkaMmwm rDohg4bu2tMsP0O9aIeMkYrqlB+Btt7O4LRyXethBLTPPRQzp3kzlY/TIX1ZUOWy f5w988VdPTP/9w== thetra.intra.inist.fr CN=thetra.intra.inist.fr CN=thetra.intra.inist.fr 14033384643799821211 MIIDBjCCAe6gAwIBAgIJAMLAmPtCHCubMA0GCSqGSIb3DQEBBQUAMCAxHjAcBgNV BAMTFXRoZXRyYS5pbnRyYS5pbmlzdC5mcjAeFw0xMTA0MTQwOTUyMTVaFw0yMTA0 MTEwOTUyMTVaMCAxHjAcBgNVBAMTFXRoZXRyYS5pbnRyYS5pbmlzdC5mcjCCASIw DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL0FSnbhEaKLqJJBUgnLnlqcme9W Hfr6+dSYWHTCWDlBAQNz7VzN15BRxGmB36hO6TPWKLX4q3AotJ6p8RpaA5QED3qa F16nz26jSqEgK/1H7Y6rAxVkcZf4tf3wUcm1paHNxZbzR3sHyAZtnKGc4+Hav3Di SLFfXrXpRK/BhNr4SDc+Z4hgqa3BGVg2q+7kV3PVHJfRGTrDYF7DikKsvPmGrJz1 P8RV+fNCDJKzq64xbSVAxZtfpHZYSPyizO7qKpRXw7j8WhlnOlUBoKkRQMRfvCIH By1Bw2c8hwN/ek/SS3P8DtkeF0VuyYOCmL5Ang3mutv53keSP+4KY/2mvMkCAwEA AaNDMEEwIAYDVR0RBBkwF4IVdGhldHJhLmludHJhLmluaXN0LmZyMB0GA1UdDgQW BBRQ0yw0LFBDs0EqtuZo05gtGvesATANBgkqhkiG9w0BAQUFAAOCAQEAs7K1BE24 O9MnIu7mSkCAHqXsIS5mnS84FO/YypCvymOeOaIL1cFs29PQabcnviSpX1hvXzqi JGr7fGxKr+0wMZN18C8NW3wk0/SG+1O/mHG5zRPBtfktVkq+F6CpDGiAojTmZ6Nc n3lvLcmiCBgvHaXpOgpPFqc+WRLZ5Fw+UHiDFol+Hi3MayXnkarp9f7x8RNOQbbT Q3dkxiUKRKr/eLTUSGF+7d/D2LJRQTzgT/l2YYd5kjykDVO7mEgNywjlnLkaMmwm rDohg4bu2tMsP0O9aIeMkYrqlB+Btt7O4LRyXethBLTPPRQzp3kzlY/TIX1ZUOWy f5w988VdPTP/9w== inist.fr CN=inist.fr,O=cnrtl,C=FR CN=inist.fr,O=cnrtl,C=FR 16391191774651880324 MIICcTCCAdqgAwIBAgIJAON5NhMlbhOEMA0GCSqGSIb3DQEBBQUAMDAxCzAJBgNV BAYTAkZSMQ4wDAYDVQQKEwVjbnJ0bDERMA8GA1UEAxMIaW5pc3QuZnIwHhcNMTEw MjA0MTUxMjU4WhcNMzEwMTMwMTUxMjU4WjAwMQswCQYDVQQGEwJGUjEOMAwGA1UE ChMFY25ydGwxETAPBgNVBAMTCGluaXN0LmZyMIGfMA0GCSqGSIb3DQEBAQUAA4GN ADCBiQKBgQCuMWyDQmQJNrCw+tIaxmJFR0QHV1Kip3zCp6IaSHItygi8hWTJ3cx1 EyfBtFSaj40wHhxYVxTlW4fQ+c31QRwV26avQgfka4XOmpz5JkfWVQxHWvuQXjWm hmZqtVFuux2mKUGGe9JkY8E34h9ivyMpb7B5SMcRkzvjUn5OEijfKwIDAQABo4GS MIGPMB0GA1UdDgQWBBRzS/AqE1wFRRy9D8Tw8prLnPnISzBgBgNVHSMEWTBXgBRz S/AqE1wFRRy9D8Tw8prLnPnIS6E0pDIwMDELMAkGA1UEBhMCRlIxDjAMBgNVBAoT BWNucnRsMREwDwYDVQQDEwhpbmlzdC5mcoIJAON5NhMlbhOEMAwGA1UdEwQFMAMB Af8wDQYJKoZIhvcNAQEFBQADgYEAhAtjjY57iyZYD2wKEb0xJxb35mLAs8PljKyt +UgIZt38OqkTAMQj5mrZwgMZv6d5v/7BNcfxgRCGkjKfIV+x88pioK2koFYlJ5QV 5m7mZBw31IJerPqsRNhLRV20FHEEzqf0O3FY1nd+YZPC3YKrLS+1IuAGffqKzcoP DFZWJL4= inist.fr CN=inist.fr,O=cnrtl,C=FR CN=inist.fr,O=cnrtl,C=FR 16391191774651880324 MIICcTCCAdqgAwIBAgIJAON5NhMlbhOEMA0GCSqGSIb3DQEBBQUAMDAxCzAJBgNV BAYTAkZSMQ4wDAYDVQQKEwVjbnJ0bDERMA8GA1UEAxMIaW5pc3QuZnIwHhcNMTEw MjA0MTUxMjU4WhcNMzEwMTMwMTUxMjU4WjAwMQswCQYDVQQGEwJGUjEOMAwGA1UE ChMFY25ydGwxETAPBgNVBAMTCGluaXN0LmZyMIGfMA0GCSqGSIb3DQEBAQUAA4GN ADCBiQKBgQCuMWyDQmQJNrCw+tIaxmJFR0QHV1Kip3zCp6IaSHItygi8hWTJ3cx1 EyfBtFSaj40wHhxYVxTlW4fQ+c31QRwV26avQgfka4XOmpz5JkfWVQxHWvuQXjWm hmZqtVFuux2mKUGGe9JkY8E34h9ivyMpb7B5SMcRkzvjUn5OEijfKwIDAQABo4GS MIGPMB0GA1UdDgQWBBRzS/AqE1wFRRy9D8Tw8prLnPnISzBgBgNVHSMEWTBXgBRz S/AqE1wFRRy9D8Tw8prLnPnIS6E0pDIwMDELMAkGA1UEBhMCRlIxDjAMBgNVBAoT BWNucnRsMREwDwYDVQQDEwhpbmlzdC5mcoIJAON5NhMlbhOEMAwGA1UdEwQFMAMB Af8wDQYJKoZIhvcNAQEFBQADgYEAhAtjjY57iyZYD2wKEb0xJxb35mLAs8PljKyt +UgIZt38OqkTAMQj5mrZwgMZv6d5v/7BNcfxgRCGkjKfIV+x88pioK2koFYlJ5QV 5m7mZBw31IJerPqsRNhLRV20FHEEzqf0O3FY1nd+YZPC3YKrLS+1IuAGffqKzcoP DFZWJL4= MIICzjCCAjegAwIBAgIJAJqJ7F8dekgsMA0GCSqGSIb3DQEBBQUAME8xCzAJBgNV BAYTAkZSMQ0wCwYDVQQKEwRDTlJTMQ8wDQYDVQQLEwZVUFM4MzYxIDAeBgNVBAMT F2xpc3Rlcy5zZXJ2aWNlcy5jbnJzLmZyMB4XDTA5MDkyNTEwMDMwNFoXDTE5MDky MzEwMDMwNFowTzELMAkGA1UEBhMCRlIxDTALBgNVBAoTBENOUlMxDzANBgNVBAsT BlVQUzgzNjEgMB4GA1UEAxMXbGlzdGVzLnNlcnZpY2VzLmNucnMuZnIwgZ8wDQYJ KoZIhvcNAQEBBQADgY0AMIGJAoGBALmQ646bL2AtH29DaMpXg19Ygq8GfNWk0OxP lnav/1h3qB1tkRPt/QV+TOsOGMYl42lT7gZaJQT+MrtQsDaQOJ5Y6gCmjLxSltU9 PGd46y+YCiXhpl540l9WTRb/wGN5nNLG0kQTRuoNDH60MbfujbD0F+mC+94i9/Vy eZfUmIxJAgMBAAGjgbEwga4wHQYDVR0OBBYEFKT9zb9DP1elJsU23minjTh8aPFn MH8GA1UdIwR4MHaAFKT9zb9DP1elJsU23minjTh8aPFnoVOkUTBPMQswCQYDVQQG EwJGUjENMAsGA1UEChMEQ05SUzEPMA0GA1UECxMGVVBTODM2MSAwHgYDVQQDExds aXN0ZXMuc2VydmljZXMuY25ycy5mcoIJAJqJ7F8dekgsMAwGA1UdEwQFMAMBAf8w DQYJKoZIhvcNAQEFBQADgYEAp+hjwCmq130tsxNIXA0I4fQkZuePBEi8EOX3GxaK iAqQ6gagA7XMNOGlw0hTqWSFDzq8ljGOZZ9O9PB1K/dVgR9/HoG2YMRnT4z8bLl/ zG3DyqL2tNA6aKcueyZlJN7Hq/H62PfzU2QSAVI6471RPtOGLg4Ygr2OekmbKSn9 C4g= MIICzjCCAjegAwIBAgIJAJqJ7F8dekgsMA0GCSqGSIb3DQEBBQUAME8xCzAJBgNV BAYTAkZSMQ0wCwYDVQQKEwRDTlJTMQ8wDQYDVQQLEwZVUFM4MzYxIDAeBgNVBAMT F2xpc3Rlcy5zZXJ2aWNlcy5jbnJzLmZyMB4XDTA5MDkyNTEwMDMwNFoXDTE5MDky MzEwMDMwNFowTzELMAkGA1UEBhMCRlIxDTALBgNVBAoTBENOUlMxDzANBgNVBAsT BlVQUzgzNjEgMB4GA1UEAxMXbGlzdGVzLnNlcnZpY2VzLmNucnMuZnIwgZ8wDQYJ KoZIhvcNAQEBBQADgY0AMIGJAoGBALmQ646bL2AtH29DaMpXg19Ygq8GfNWk0OxP lnav/1h3qB1tkRPt/QV+TOsOGMYl42lT7gZaJQT+MrtQsDaQOJ5Y6gCmjLxSltU9 PGd46y+YCiXhpl540l9WTRb/wGN5nNLG0kQTRuoNDH60MbfujbD0F+mC+94i9/Vy eZfUmIxJAgMBAAGjgbEwga4wHQYDVR0OBBYEFKT9zb9DP1elJsU23minjTh8aPFn MH8GA1UdIwR4MHaAFKT9zb9DP1elJsU23minjTh8aPFnoVOkUTBPMQswCQYDVQQG EwJGUjENMAsGA1UEChMEQ05SUzEPMA0GA1UECxMGVVBTODM2MSAwHgYDVQQDExds aXN0ZXMuc2VydmljZXMuY25ycy5mcoIJAJqJ7F8dekgsMAwGA1UdEwQFMAMBAf8w DQYJKoZIhvcNAQEFBQADgYEAp+hjwCmq130tsxNIXA0I4fQkZuePBEi8EOX3GxaK iAqQ6gagA7XMNOGlw0hTqWSFDzq8ljGOZZ9O9PB1K/dVgR9/HoG2YMRnT4z8bLl/ zG3DyqL2tNA6aKcueyZlJN7Hq/H62PfzU2QSAVI6471RPtOGLg4Ygr2OekmbKSn9 C4g= urn:mace:shibboleth:1.0:nameIdentifier Claude Gross listmaster@services.cnrs.fr cpe.fr MIIElzCCA3+gAwIBAgIRANZ+IFZ22zvSEG7SCUToIzIwDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0xMTAzMTAwMDAwMDBaFw0xNDAzMDkyMzU5NTlaMHcxCzAJBgNV BAYTAkZSMRUwEwYDVQQHEwxWSUxMRVVSQkFOTkUxLjAsBgNVBAoTJUVDT0xFIFNV UCBDSElNSUUgUEhZUyBFTEVDVFJPTklRIExZT04xDDAKBgNVBAsTA01DMjETMBEG A1UEAxMKaWRwLmNwZS5mcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB ANfteKQe8KHS3pG87hpzww6gI+7DYLlY0Kz79TtXWI+FJ25PUjKWKwH5diFSXF+X D9b0xdbvEE+WHBJob02TvpXAZDEUfNKA+rL4VnwdYU4NyxHcIxKUENF2rVYJg95g mLeku1suo3L/jdD8OuJucVHOH2F2eFkkibnQyP8J8z80lmN4++l4uBiPmdEn/gfK djJkE8KuUwD4tCtrJBBwfAfjHhZBAqDIlSMJ7mLHk2TAnIbrWOTwPAg7dn1kQtst ZnaUqsQRtkE+SyBW/lGI/VgeVPr7Gt/9pVTGik+78O0c3UKAJNrcdgTpLEa2TTbJ CMmKVSFF1hj4huWmVpLnWtkCAwEAAaOCAV0wggFZMB8GA1UdIwQYMBaAFAy9k2gM 896ro0lrKzdXR+qQ47ntMB0GA1UdDgQWBBRpbQ8kDYZ/3/NCFsg58TRDJRrulTAO BgNVHQ8BAf8EBAMCBaAwDAYDVR0TAQH/BAIwADAdBgNVHSUEFjAUBggrBgEFBQcD AQYIKwYBBQUHAwIwGAYDVR0gBBEwDzANBgsrBgEEAbIxAQICHTA6BgNVHR8EMzAx MC+gLaArhilodHRwOi8vY3JsLnRjcy50ZXJlbmEub3JnL1RFUkVOQVNTTENBLmNy bDBtBggrBgEFBQcBAQRhMF8wNQYIKwYBBQUHMAKGKWh0dHA6Ly9jcnQudGNzLnRl cmVuYS5vcmcvVEVSRU5BU1NMQ0EuY3J0MCYGCCsGAQUFBzABhhpodHRwOi8vb2Nz cC50Y3MudGVyZW5hLm9yZzAVBgNVHREEDjAMggppZHAuY3BlLmZyMA0GCSqGSIb3 DQEBBQUAA4IBAQBbEte9ddKlGVbI4XO/2FARITm2K+U2Sy0KGdUETpYqKmLhU2+E S010xINPbN4jTq6PDZVV5u57MMKEBTPZ2YhbJ/13WW0vrvUuk8sqnM4YXwvIbNlx e0iWdsIH6/CKW5GrC9ozrX6JuPTLW3r2DUj+Dcm+VjgbKdKaJDQgjm4w54ImmAwE pPquhX3HTvQ0TNQWmWy/ZLk2kSdo8F5eT9f8V1zUzVCLyxB4U3y3rA7m0eWxfOil QvA1mfXr3rfYQhhoQK1EzM++MGANJYCV4j2BgQO822sdEYqYKoZCFaY70ZYxkjZH yui/YIiwc1Qxxt+N8n4ltKiD1fdMuTNv9lRZ urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient CPE Lyon CPE Lyon http://unknown.site.com DEPREZ Jerome webmaster@cpe.fr MIIElzCCA3+gAwIBAgIRAIdbTJ6vP+pxMuYW/713vaUwDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0xMTAzMTYwMDAwMDBaFw0xNDAzMTUyMzU5NTlaMHAxCzAJBgNV BAYTAkZSMRUwEwYDVQQHEwxWSUxMRVVSQkFOTkUxLjAsBgNVBAoTJUVDT0xFIFNV UCBDSElNSUUgUEhZUyBFTEVDVFJPTklRIExZT04xGjAYBgNVBAMTEXdpZmlwb3J0 YWwuY3BlLmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmjZOQyWe 5eVwzfXGhlQI4/3L3FbNCXDFBo53k8cDb5J3aR1QYsqFnzXrv+iHMJGonECwqMwV UGo4Lhwk2XBQnPXR4JALUJVlK0mvr06A5m1+HK+EviVAUHN/59FTRsdxbFDd0tCs QMviuMDY1hPW3njL01VM3elyP/C0uHFnTMwh/jjzOPMZT2vJwgEipO+/nq4w459N uRlOixWOipq60V71szfEHwVj4KBkSqbW3ZDDKav9e5obw75bH9RKHZt/YUeEzMle 2Tsv3/C1FdVbPvJveGDKKONyFOZaC8ae/Ln/gefyTW/S6TEuLdtdHXepIe9tEBml f0uR7vXZ/9JZhQIDAQABo4IBZDCCAWAwHwYDVR0jBBgwFoAUDL2TaAzz3qujSWsr N1dH6pDjue0wHQYDVR0OBBYEFEM3YEmWf22CRB484SoF/I8JR+enMA4GA1UdDwEB /wQEAwIFoDAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEF BQcDAjAYBgNVHSAEETAPMA0GCysGAQQBsjEBAgIdMDoGA1UdHwQzMDEwL6AtoCuG KWh0dHA6Ly9jcmwudGNzLnRlcmVuYS5vcmcvVEVSRU5BU1NMQ0EuY3JsMG0GCCsG AQUFBwEBBGEwXzA1BggrBgEFBQcwAoYpaHR0cDovL2NydC50Y3MudGVyZW5hLm9y Zy9URVJFTkFTU0xDQS5jcnQwJgYIKwYBBQUHMAGGGmh0dHA6Ly9vY3NwLnRjcy50 ZXJlbmEub3JnMBwGA1UdEQQVMBOCEXdpZmlwb3J0YWwuY3BlLmZyMA0GCSqGSIb3 DQEBBQUAA4IBAQB8xZVsDI6AqfcxTQzKASTQc2N5ruoCSh53+Fg3j6oVVhlaCYOM VhrDlOsijsNtG7bNw8V9WHI2cyCtDYlshp130OwLGPis3bE8uVBj37EjdQvmF2TW fUiCpMP/bAsOo/58bcvPLMzRFa91wO0y/9GZNdcifURwoFuQf0zHgdyspiAv7ejv UsGjQOVqNxAMyqI/4fdmbiN+goUG7hr1NNPRh7iw7H2tFkeAVJlt3S0sozXT6NvC Fkn2qPqZkcAmd6OMCokXzqT6WavcfZIkLB64M/ibsxrkqI8Z6BDX8YUbzQuyboAF w87/Jzai/pndtpzNtST5yiltC3NQs8vtfEx8 MIIElzCCA3+gAwIBAgIRAIdbTJ6vP+pxMuYW/713vaUwDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0xMTAzMTYwMDAwMDBaFw0xNDAzMTUyMzU5NTlaMHAxCzAJBgNV BAYTAkZSMRUwEwYDVQQHEwxWSUxMRVVSQkFOTkUxLjAsBgNVBAoTJUVDT0xFIFNV UCBDSElNSUUgUEhZUyBFTEVDVFJPTklRIExZT04xGjAYBgNVBAMTEXdpZmlwb3J0 YWwuY3BlLmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmjZOQyWe 5eVwzfXGhlQI4/3L3FbNCXDFBo53k8cDb5J3aR1QYsqFnzXrv+iHMJGonECwqMwV UGo4Lhwk2XBQnPXR4JALUJVlK0mvr06A5m1+HK+EviVAUHN/59FTRsdxbFDd0tCs QMviuMDY1hPW3njL01VM3elyP/C0uHFnTMwh/jjzOPMZT2vJwgEipO+/nq4w459N uRlOixWOipq60V71szfEHwVj4KBkSqbW3ZDDKav9e5obw75bH9RKHZt/YUeEzMle 2Tsv3/C1FdVbPvJveGDKKONyFOZaC8ae/Ln/gefyTW/S6TEuLdtdHXepIe9tEBml f0uR7vXZ/9JZhQIDAQABo4IBZDCCAWAwHwYDVR0jBBgwFoAUDL2TaAzz3qujSWsr N1dH6pDjue0wHQYDVR0OBBYEFEM3YEmWf22CRB484SoF/I8JR+enMA4GA1UdDwEB /wQEAwIFoDAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEF BQcDAjAYBgNVHSAEETAPMA0GCysGAQQBsjEBAgIdMDoGA1UdHwQzMDEwL6AtoCuG KWh0dHA6Ly9jcmwudGNzLnRlcmVuYS5vcmcvVEVSRU5BU1NMQ0EuY3JsMG0GCCsG AQUFBwEBBGEwXzA1BggrBgEFBQcwAoYpaHR0cDovL2NydC50Y3MudGVyZW5hLm9y Zy9URVJFTkFTU0xDQS5jcnQwJgYIKwYBBQUHMAGGGmh0dHA6Ly9vY3NwLnRjcy50 ZXJlbmEub3JnMBwGA1UdEQQVMBOCEXdpZmlwb3J0YWwuY3BlLmZyMA0GCSqGSIb3 DQEBBQUAA4IBAQB8xZVsDI6AqfcxTQzKASTQc2N5ruoCSh53+Fg3j6oVVhlaCYOM VhrDlOsijsNtG7bNw8V9WHI2cyCtDYlshp130OwLGPis3bE8uVBj37EjdQvmF2TW fUiCpMP/bAsOo/58bcvPLMzRFa91wO0y/9GZNdcifURwoFuQf0zHgdyspiAv7ejv UsGjQOVqNxAMyqI/4fdmbiN+goUG7hr1NNPRh7iw7H2tFkeAVJlt3S0sozXT6NvC Fkn2qPqZkcAmd6OMCokXzqT6WavcfZIkLB64M/ibsxrkqI8Z6BDX8YUbzQuyboAF w87/Jzai/pndtpzNtST5yiltC3NQs8vtfEx8 urn:mace:shibboleth:1.0:nameIdentifier DEPREZ Jerome webmaster@cpe.fr cori.recherche.gouv.fr CN=cori.recherche.gouv.fr,O=MENSR,C=FR MIICmzCCAgSgAwIBAgIJALr5lN8Sgho2MA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNV BAYTAkZSMQ4wDAYDVQQKEwVNRU5TUjEfMB0GA1UEAxMWY29yaS5yZWNoZXJjaGUu Z291di5mcjAeFw0wODA5MTAxNDMwNDdaFw0yODA5MDUxNDMwNDdaMD4xCzAJBgNV BAYTAkZSMQ4wDAYDVQQKEwVNRU5TUjEfMB0GA1UEAxMWY29yaS5yZWNoZXJjaGUu Z291di5mcjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAyMBzr8DiYyCq2Dc9 eubMuoDkExhliMz5y0vYxebCULxIiMrky/y+bh8Z7/NIWP8pC/9WnE0sgmFYO0UU 8cZOAYu9csbYiNUQ/M2iiixI7hHyuMU6MMiOP3KZB5IZsu8AOKskpTwnw4Tu2x9t qyJ37IAJBjBVFQgQ/PGat/oe14kCAwEAAaOBoDCBnTAdBgNVHQ4EFgQU5rN3ZBcC mbGp8bWeThWuJsjJlo4wbgYDVR0jBGcwZYAU5rN3ZBcCmbGp8bWeThWuJsjJlo6h QqRAMD4xCzAJBgNVBAYTAkZSMQ4wDAYDVQQKEwVNRU5TUjEfMB0GA1UEAxMWY29y aS5yZWNoZXJjaGUuZ291di5mcoIJALr5lN8Sgho2MAwGA1UdEwQFMAMBAf8wDQYJ KoZIhvcNAQEFBQADgYEAxypKU6EsjpDLlX+Oe43amL/r99iSbJwx3zB/feM48zbK do4wNvFFosHI8Cs2JfpxuR2EytcoOfndHDjnS82y9RxvrAgv6ylvX8vyxwdeB/3X BnnqW0g5zT+RbBN2lyVVADISFJxcHjk8gG9MVknWxqPX7ig91FkvS9BJlHVujn0= cori.recherche.gouv.fr CN=cori.recherche.gouv.fr,O=MENSR,C=FR MIICmzCCAgSgAwIBAgIJALr5lN8Sgho2MA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNV BAYTAkZSMQ4wDAYDVQQKEwVNRU5TUjEfMB0GA1UEAxMWY29yaS5yZWNoZXJjaGUu Z291di5mcjAeFw0wODA5MTAxNDMwNDdaFw0yODA5MDUxNDMwNDdaMD4xCzAJBgNV BAYTAkZSMQ4wDAYDVQQKEwVNRU5TUjEfMB0GA1UEAxMWY29yaS5yZWNoZXJjaGUu Z291di5mcjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAyMBzr8DiYyCq2Dc9 eubMuoDkExhliMz5y0vYxebCULxIiMrky/y+bh8Z7/NIWP8pC/9WnE0sgmFYO0UU 8cZOAYu9csbYiNUQ/M2iiixI7hHyuMU6MMiOP3KZB5IZsu8AOKskpTwnw4Tu2x9t qyJ37IAJBjBVFQgQ/PGat/oe14kCAwEAAaOBoDCBnTAdBgNVHQ4EFgQU5rN3ZBcC mbGp8bWeThWuJsjJlo4wbgYDVR0jBGcwZYAU5rN3ZBcCmbGp8bWeThWuJsjJlo6h QqRAMD4xCzAJBgNVBAYTAkZSMQ4wDAYDVQQKEwVNRU5TUjEfMB0GA1UEAxMWY29y aS5yZWNoZXJjaGUuZ291di5mcoIJALr5lN8Sgho2MAwGA1UdEwQFMAMBAf8wDQYJ KoZIhvcNAQEFBQADgYEAxypKU6EsjpDLlX+Oe43amL/r99iSbJwx3zB/feM48zbK do4wNvFFosHI8Cs2JfpxuR2EytcoOfndHDjnS82y9RxvrAgv6ylvX8vyxwdeB/3X BnnqW0g5zT+RbBN2lyVVADISFJxcHjk8gG9MVknWxqPX7ig91FkvS9BJlHVujn0= tcs.cru.fr CN=tcs.cru.fr,O=CRU,C=FR MIICcTCCAdqgAwIBAgIJAMepm5GIhzZAMA0GCSqGSIb3DQEBBQUAMDAxCzAJBgNV BAYTAkZSMQwwCgYDVQQKEwNDUlUxEzARBgNVBAMTCnRjcy5jcnUuZnIwHhcNMDkw OTI1MTIzOTEzWhcNMTkwOTIzMTIzOTEzWjAwMQswCQYDVQQGEwJGUjEMMAoGA1UE ChMDQ1JVMRMwEQYDVQQDEwp0Y3MuY3J1LmZyMIGfMA0GCSqGSIb3DQEBAQUAA4GN ADCBiQKBgQC01DD10K1UJnFeOOdWsCQgnVXWvtPXpMnVui+qNcmqQ8G6INvWYhDy zVrG40iLw/8/LpQC8226krDkV1FA3N030aDwadnKn96TkWx6zBAkLQGje25N8I1X fvZLg0jBB3S6yRPoaM/QyIaGfsFn6sYhZYQc6IqV5aUu343HvucctQIDAQABo4GS MIGPMB0GA1UdDgQWBBS1/6M70+wWIOgJEOn1vOYELzyfdDBgBgNVHSMEWTBXgBS1 /6M70+wWIOgJEOn1vOYELzyfdKE0pDIwMDELMAkGA1UEBhMCRlIxDDAKBgNVBAoT A0NSVTETMBEGA1UEAxMKdGNzLmNydS5mcoIJAMepm5GIhzZAMAwGA1UdEwQFMAMB Af8wDQYJKoZIhvcNAQEFBQADgYEAnMObS6Fbcqk3LfW+c9GNdzR4oHvteBXV7pTf /p3Soq07bU9a3B5G8LMW0YeQk2OsfUV3whNAkVv0xMms8ctDz3vtqVYrkdKAp/q8 DJPNkdGZrcmHZCc1lphwnDoe6bCURGAX+q9KbYez5eYwg490SeeHd1shn8sSSzjt 1+Hwpj8= tcs.cru.fr CN=tcs.cru.fr,O=CRU,C=FR MIICcTCCAdqgAwIBAgIJAMepm5GIhzZAMA0GCSqGSIb3DQEBBQUAMDAxCzAJBgNV BAYTAkZSMQwwCgYDVQQKEwNDUlUxEzARBgNVBAMTCnRjcy5jcnUuZnIwHhcNMDkw OTI1MTIzOTEzWhcNMTkwOTIzMTIzOTEzWjAwMQswCQYDVQQGEwJGUjEMMAoGA1UE ChMDQ1JVMRMwEQYDVQQDEwp0Y3MuY3J1LmZyMIGfMA0GCSqGSIb3DQEBAQUAA4GN ADCBiQKBgQC01DD10K1UJnFeOOdWsCQgnVXWvtPXpMnVui+qNcmqQ8G6INvWYhDy zVrG40iLw/8/LpQC8226krDkV1FA3N030aDwadnKn96TkWx6zBAkLQGje25N8I1X fvZLg0jBB3S6yRPoaM/QyIaGfsFn6sYhZYQc6IqV5aUu343HvucctQIDAQABo4GS MIGPMB0GA1UdDgQWBBS1/6M70+wWIOgJEOn1vOYELzyfdDBgBgNVHSMEWTBXgBS1 /6M70+wWIOgJEOn1vOYELzyfdKE0pDIwMDELMAkGA1UEBhMCRlIxDDAKBgNVBAoT A0NSVTETMBEGA1UEAxMKdGNzLmNydS5mcoIJAMepm5GIhzZAMAwGA1UdEwQFMAMB Af8wDQYJKoZIhvcNAQEFBQADgYEAnMObS6Fbcqk3LfW+c9GNdzR4oHvteBXV7pTf /p3Soq07bU9a3B5G8LMW0YeQk2OsfUV3whNAkVv0xMms8ctDz3vtqVYrkdKAp/q8 DJPNkdGZrcmHZCc1lphwnDoe6bCURGAX+q9KbYez5eYwg490SeeHd1shn8sSSzjt 1+Hwpj8= MIICxTCCAi6gAwIBAgIJAKQFpsILl3KhMA0GCSqGSIb3DQEBBQUAMEwxCzAJBgNV BAYTAkdCMRIwEAYDVQQIEwlCZXJrc2hpcmUxEDAOBgNVBAcTB05ld2J1cnkxFzAV BgNVBAoTDk15IENvbXBhbnkgTHRkMB4XDTEwMDUwNTA5NDExMVoXDTIwMDUwNDA5 NDExMVowTDELMAkGA1UEBhMCR0IxEjAQBgNVBAgTCUJlcmtzaGlyZTEQMA4GA1UE BxMHTmV3YnVyeTEXMBUGA1UEChMOTXkgQ29tcGFueSBMdGQwgZ8wDQYJKoZIhvcN AQEBBQADgY0AMIGJAoGBAKxNHX0AnJZE6cU/5vSKz/bN5IqGkod/Ai5CWWdAgCau 4v9fPfnVgKqFxl/VVyjfmYndUYgKYBASDogFYvdP+EAS2G7S1s54O0Humv9mA14f Dv8u0TOlXqOu4aABZuHonsWEcmugfOvje/4NUVetZ+h6bwdKQmWmYV1DEhLIH2m/ AgMBAAGjga4wgaswHQYDVR0OBBYEFPuQUgq22htJHB1qLptyMCpM9egKMHwGA1Ud IwR1MHOAFPuQUgq22htJHB1qLptyMCpM9egKoVCkTjBMMQswCQYDVQQGEwJHQjES MBAGA1UECBMJQmVya3NoaXJlMRAwDgYDVQQHEwdOZXdidXJ5MRcwFQYDVQQKEw5N eSBDb21wYW55IEx0ZIIJAKQFpsILl3KhMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcN AQEFBQADgYEASklzCeGUHA6F31fri1ljE8tXCdNQz4A+As/uvKlryyvoKU5t7PUU O9stKmyrN4enRf5/NCnBnznDK/bGFQ7y7025Yt5FK4fN2imeEvfb7xAzt29bRlii /tL1QvrWAe706ca2yoCMDXHBzcsDHam8U6vCWsozwj5EGuzHgxdOpwY= MIICxTCCAi6gAwIBAgIJAKQFpsILl3KhMA0GCSqGSIb3DQEBBQUAMEwxCzAJBgNV BAYTAkdCMRIwEAYDVQQIEwlCZXJrc2hpcmUxEDAOBgNVBAcTB05ld2J1cnkxFzAV BgNVBAoTDk15IENvbXBhbnkgTHRkMB4XDTEwMDUwNTA5NDExMVoXDTIwMDUwNDA5 NDExMVowTDELMAkGA1UEBhMCR0IxEjAQBgNVBAgTCUJlcmtzaGlyZTEQMA4GA1UE BxMHTmV3YnVyeTEXMBUGA1UEChMOTXkgQ29tcGFueSBMdGQwgZ8wDQYJKoZIhvcN AQEBBQADgY0AMIGJAoGBAKxNHX0AnJZE6cU/5vSKz/bN5IqGkod/Ai5CWWdAgCau 4v9fPfnVgKqFxl/VVyjfmYndUYgKYBASDogFYvdP+EAS2G7S1s54O0Humv9mA14f Dv8u0TOlXqOu4aABZuHonsWEcmugfOvje/4NUVetZ+h6bwdKQmWmYV1DEhLIH2m/ AgMBAAGjga4wgaswHQYDVR0OBBYEFPuQUgq22htJHB1qLptyMCpM9egKMHwGA1Ud IwR1MHOAFPuQUgq22htJHB1qLptyMCpM9egKoVCkTjBMMQswCQYDVQQGEwJHQjES MBAGA1UECBMJQmVya3NoaXJlMRAwDgYDVQQHEwdOZXdidXJ5MRcwFQYDVQQKEw5N eSBDb21wYW55IEx0ZIIJAKQFpsILl3KhMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcN AQEFBQADgYEASklzCeGUHA6F31fri1ljE8tXCdNQz4A+As/uvKlryyvoKU5t7PUU O9stKmyrN4enRf5/NCnBnznDK/bGFQ7y7025Yt5FK4fN2imeEvfb7xAzt29bRlii /tL1QvrWAe706ca2yoCMDXHBzcsDHam8U6vCWsozwj5EGuzHgxdOpwY= urn:mace:shibboleth:1.0:nameIdentifier Olivier Salaün olivier.salaun@cru.fr support.cru.fr CN=support.cru.fr,O=CRU,C=FR MIICfTCCAeagAwIBAgIJALqMMIy927JQMA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNV BAYTAkZSMQwwCgYDVQQKEwNDUlUxFzAVBgNVBAMTDnN1cHBvcnQuY3J1LmZyMB4X DTEwMDkyMDEzMjQwMVoXDTMwMDkxNTEzMjQwMVowNDELMAkGA1UEBhMCRlIxDDAK BgNVBAoTA0NSVTEXMBUGA1UEAxMOc3VwcG9ydC5jcnUuZnIwgZ8wDQYJKoZIhvcN AQEBBQADgY0AMIGJAoGBAJwDbzzsS8uTS8Bl0Pj+HvXjYjlYT5PKL1NOxkVD3zgl GomQ1E9ozSq99M04NKQepjT0b3oE8Qp0qAKRgO5I2QD3kBg7NTyhCq3eCis7+hh1 wH/KdNWtVMAPAEC97+br4IeTbBtC16auZfLeyqujIahOqCSXHu31nDMpZa0MWvT3 AgMBAAGjgZYwgZMwHQYDVR0OBBYEFAU8XnJ/h5vdjoieOCAaw/pdsxjbMGQGA1Ud IwRdMFuAFAU8XnJ/h5vdjoieOCAaw/pdsxjboTikNjA0MQswCQYDVQQGEwJGUjEM MAoGA1UEChMDQ1JVMRcwFQYDVQQDEw5zdXBwb3J0LmNydS5mcoIJALqMMIy927JQ MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAi3Wy1etYsCy8vwAb6rlq HDlZBk/xZwm9rcCfD/9ITYYzn49pHMhia4Khrpnpn0zH6P0XRy1aJtjkQLLPDe4U wmLTY0433zuAWBJT7B8KOzqay3pjnMNXfJYKWssiacScp3Bc7/hgYpxQWR7A5nLv tqSRJLOwuuuSGEtLzxwTIKw= support.cru.fr CN=support.cru.fr,O=CRU,C=FR MIICfTCCAeagAwIBAgIJALqMMIy927JQMA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNV BAYTAkZSMQwwCgYDVQQKEwNDUlUxFzAVBgNVBAMTDnN1cHBvcnQuY3J1LmZyMB4X DTEwMDkyMDEzMjQwMVoXDTMwMDkxNTEzMjQwMVowNDELMAkGA1UEBhMCRlIxDDAK BgNVBAoTA0NSVTEXMBUGA1UEAxMOc3VwcG9ydC5jcnUuZnIwgZ8wDQYJKoZIhvcN AQEBBQADgY0AMIGJAoGBAJwDbzzsS8uTS8Bl0Pj+HvXjYjlYT5PKL1NOxkVD3zgl GomQ1E9ozSq99M04NKQepjT0b3oE8Qp0qAKRgO5I2QD3kBg7NTyhCq3eCis7+hh1 wH/KdNWtVMAPAEC97+br4IeTbBtC16auZfLeyqujIahOqCSXHu31nDMpZa0MWvT3 AgMBAAGjgZYwgZMwHQYDVR0OBBYEFAU8XnJ/h5vdjoieOCAaw/pdsxjbMGQGA1Ud IwRdMFuAFAU8XnJ/h5vdjoieOCAaw/pdsxjboTikNjA0MQswCQYDVQQGEwJGUjEM MAoGA1UEChMDQ1JVMRcwFQYDVQQDEw5zdXBwb3J0LmNydS5mcoIJALqMMIy927JQ MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAi3Wy1etYsCy8vwAb6rlq HDlZBk/xZwm9rcCfD/9ITYYzn49pHMhia4Khrpnpn0zH6P0XRy1aJtjkQLLPDe4U wmLTY0433zuAWBJT7B8KOzqay3pjnMNXfJYKWssiacScp3Bc7/hgYpxQWR7A5nLv tqSRJLOwuuuSGEtLzxwTIKw= MIICwTCCAiqgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJGUjEm MCQGA1UEChMdQ29taXRlIFJlc2VhdSBkZXMgVW5pdmVyc2l0ZXMxGTAXBgNVBAMT EHNvdXJjZXN1cC5jcnUuZnIwHhcNMDgwOTE1MTIwMzQ5WhcNMjgwOTEwMTIwMzQ5 WjBQMQswCQYDVQQGEwJGUjEmMCQGA1UEChMdQ29taXRlIFJlc2VhdSBkZXMgVW5p dmVyc2l0ZXMxGTAXBgNVBAMTEHNvdXJjZXN1cC5jcnUuZnIwgZ8wDQYJKoZIhvcN AQEBBQADgY0AMIGJAoGBAKoHgRHVnwdX+iQIvIu2/z5I2g2ljqlYJzp74p2HYslf xnndqD7YodHihtoLDLIkPrGJ6Y0vtOJceb6XjoFr8k+MP41hs59s4p3qQ1M0lbY4 6yEqLXednj00mJkz4XciB0h812bJifjH/rhYx25PdLlnp7Y9xCkq7+2BR1AFWZmZ AgMBAAGjgaowgacwHQYDVR0OBBYEFDgGBRQ5LF28lBPNjNWLu8YCDtxhMHgGA1Ud IwRxMG+AFDgGBRQ5LF28lBPNjNWLu8YCDtxhoVSkUjBQMQswCQYDVQQGEwJGUjEm MCQGA1UEChMdQ29taXRlIFJlc2VhdSBkZXMgVW5pdmVyc2l0ZXMxGTAXBgNVBAMT EHNvdXJjZXN1cC5jcnUuZnKCAQAwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUF AAOBgQB05YFzaYIRKF0JL9Br0U0mCdSyyP3N9Unm2jG7yRrGXCR+2tnj16fwhQlk QIGLfHDFFpfBeBoWozJFBcCmFRCawnK8RYqrApvpy1M/k/Y+yIAhq8G8XfZqzU1G HaaOGqD8nCkO3t3qaIPP4CTmE+GS72ooHHntvoGy/RDn32aVVg== MIICwTCCAiqgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJGUjEm MCQGA1UEChMdQ29taXRlIFJlc2VhdSBkZXMgVW5pdmVyc2l0ZXMxGTAXBgNVBAMT EHNvdXJjZXN1cC5jcnUuZnIwHhcNMDgwOTE1MTIwMzQ5WhcNMjgwOTEwMTIwMzQ5 WjBQMQswCQYDVQQGEwJGUjEmMCQGA1UEChMdQ29taXRlIFJlc2VhdSBkZXMgVW5p dmVyc2l0ZXMxGTAXBgNVBAMTEHNvdXJjZXN1cC5jcnUuZnIwgZ8wDQYJKoZIhvcN AQEBBQADgY0AMIGJAoGBAKoHgRHVnwdX+iQIvIu2/z5I2g2ljqlYJzp74p2HYslf xnndqD7YodHihtoLDLIkPrGJ6Y0vtOJceb6XjoFr8k+MP41hs59s4p3qQ1M0lbY4 6yEqLXednj00mJkz4XciB0h812bJifjH/rhYx25PdLlnp7Y9xCkq7+2BR1AFWZmZ AgMBAAGjgaowgacwHQYDVR0OBBYEFDgGBRQ5LF28lBPNjNWLu8YCDtxhMHgGA1Ud IwRxMG+AFDgGBRQ5LF28lBPNjNWLu8YCDtxhoVSkUjBQMQswCQYDVQQGEwJGUjEm MCQGA1UEChMdQ29taXRlIFJlc2VhdSBkZXMgVW5pdmVyc2l0ZXMxGTAXBgNVBAMT EHNvdXJjZXN1cC5jcnUuZnKCAQAwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUF AAOBgQB05YFzaYIRKF0JL9Br0U0mCdSyyP3N9Unm2jG7yRrGXCR+2tnj16fwhQlk QIGLfHDFFpfBeBoWozJFBcCmFRCawnK8RYqrApvpy1M/k/Y+yIAhq8G8XfZqzU1G HaaOGqD8nCkO3t3qaIPP4CTmE+GS72ooHHntvoGy/RDn32aVVg== urn:mace:shibboleth:1.0:nameIdentifier Géraldine Corstard equipe-sourcesup@cru.fr Olivier Lumineau olivier.lumineau@cru.fr vespa.cru.fr CN=vespa.cru.fr MIIC6zCCAdOgAwIBAgIJAO/KIGJgQPX2MA0GCSqGSIb3DQEBBQUAMBcxFTATBgNV BAMTDHZlc3BhLmNydS5mcjAeFw0wOTExMTMwOTU1MzFaFw0xOTExMTEwOTU1MzFa MBcxFTATBgNVBAMTDHZlc3BhLmNydS5mcjCCASIwDQYJKoZIhvcNAQEBBQADggEP ADCCAQoCggEBAJqQ8hGQ2weM8gnCaAnwOOt0F9icaCiaObY8IwpXhOlAoEDJ1qj3 2nOIf+Rnhj+J9YWm3fNEg9oezXDx37H2//N42u5UVRbr1EibFG3NMkP5yU4gw4cR TR9tFT6ZHdvP/8Lm5WrsmCRJE52issxZ2M+/26+l2/DJSVEo17OQzqStnmEn5Vyu JSQD9ubie43cPtGq/Sq2obof9x9gYzGNWEfYCCZ/44kSRrxayuBcvONhtTgxqcdx 224GqyO4AjX+Vl4N707dKrzI9EZZeZF+fzeapiNcsLcAxEX+tnW96ArNN+Q01VNf 63GQdZ4yhA+0k4cP29a+nICQBWJixf4aQPMCAwEAAaM6MDgwFwYDVR0RBBAwDoIM dmVzcGEuY3J1LmZyMB0GA1UdDgQWBBT1Oo+PU/NW31RZt1+89JezvB9ihTANBgkq hkiG9w0BAQUFAAOCAQEAL1ObI2XPKCTl0yWSWPZO0FybmxgasWLaqRfzsuWi8V70 ctpL7vImZMbob514lN64xlibuJA8kXRivGCxgW326RvpO4kFlYMbYjb6CaC8E86w Dj9Ycoie0F1TG0hkz+fMQFtKns1m8hUivaWZPQI2mgzQp/pyH+WE0T0/qdHTHssV bK4JboivK8VStUlQs+Ber3DQODtUviXqZ4Kc38qjBkwn/Ij0Z2hsCtIDjktBGooS 2iCaaGdnCk4K8HObKWg/hA4O6NQ5Egq76u82sX9fBKnGRE4qUdfH4DPSyHMeXlZU 7Tx1sVrervjjUEXoy4BzjCOhvudjSqIbcJo4IKwYrw== vespa.cru.fr CN=vespa.cru.fr MIIC6zCCAdOgAwIBAgIJAO/KIGJgQPX2MA0GCSqGSIb3DQEBBQUAMBcxFTATBgNV BAMTDHZlc3BhLmNydS5mcjAeFw0wOTExMTMwOTU1MzFaFw0xOTExMTEwOTU1MzFa MBcxFTATBgNVBAMTDHZlc3BhLmNydS5mcjCCASIwDQYJKoZIhvcNAQEBBQADggEP ADCCAQoCggEBAJqQ8hGQ2weM8gnCaAnwOOt0F9icaCiaObY8IwpXhOlAoEDJ1qj3 2nOIf+Rnhj+J9YWm3fNEg9oezXDx37H2//N42u5UVRbr1EibFG3NMkP5yU4gw4cR TR9tFT6ZHdvP/8Lm5WrsmCRJE52issxZ2M+/26+l2/DJSVEo17OQzqStnmEn5Vyu JSQD9ubie43cPtGq/Sq2obof9x9gYzGNWEfYCCZ/44kSRrxayuBcvONhtTgxqcdx 224GqyO4AjX+Vl4N707dKrzI9EZZeZF+fzeapiNcsLcAxEX+tnW96ArNN+Q01VNf 63GQdZ4yhA+0k4cP29a+nICQBWJixf4aQPMCAwEAAaM6MDgwFwYDVR0RBBAwDoIM dmVzcGEuY3J1LmZyMB0GA1UdDgQWBBT1Oo+PU/NW31RZt1+89JezvB9ihTANBgkq hkiG9w0BAQUFAAOCAQEAL1ObI2XPKCTl0yWSWPZO0FybmxgasWLaqRfzsuWi8V70 ctpL7vImZMbob514lN64xlibuJA8kXRivGCxgW326RvpO4kFlYMbYjb6CaC8E86w Dj9Ycoie0F1TG0hkz+fMQFtKns1m8hUivaWZPQI2mgzQp/pyH+WE0T0/qdHTHssV bK4JboivK8VStUlQs+Ber3DQODtUviXqZ4Kc38qjBkwn/Ij0Z2hsCtIDjktBGooS 2iCaaGdnCk4K8HObKWg/hA4O6NQ5Egq76u82sX9fBKnGRE4qUdfH4DPSyHMeXlZU 7Tx1sVrervjjUEXoy4BzjCOhvudjSqIbcJo4IKwYrw== CRU CRU https://www.cru.fr/ listes.cru.fr CN=listes.cru.fr,O=Comite Reseau des Universites,C=FR MIICyDCCAjGgAwIBAgIJALz9N4APNuWWMA0GCSqGSIb3DQEBBQUAME0xCzAJBgNV BAYTAkZSMSYwJAYDVQQKEx1Db21pdGUgUmVzZWF1IGRlcyBVbml2ZXJzaXRlczEW MBQGA1UEAxMNbGlzdGVzLmNydS5mcjAeFw0wODA1MjcxMjUzNDlaFw0yODA1MjIx MjUzNDlaME0xCzAJBgNVBAYTAkZSMSYwJAYDVQQKEx1Db21pdGUgUmVzZWF1IGRl cyBVbml2ZXJzaXRlczEWMBQGA1UEAxMNbGlzdGVzLmNydS5mcjCBnzANBgkqhkiG 9w0BAQEFAAOBjQAwgYkCgYEAw8NaRmrIQww9vd4lsSib0bryMcTjHp1a1koSAg/7 k9qimp2JAWiVjkhxH834TmlF7IKInk2fZjzU/NWeZ9Dy0wcpVTq6qyt+H0nnMRGt 3ngFN+eCrfoR8yQdd12r4GhJQWgJxFDysuZGtmRG0nBfmEKHigAu4t5D17OEWq5Y IM8CAwEAAaOBrzCBrDAdBgNVHQ4EFgQUxswwZJTmFZApZhtgYQHJN+kKgfQwfQYD VR0jBHYwdIAUxswwZJTmFZApZhtgYQHJN+kKgfShUaRPME0xCzAJBgNVBAYTAkZS MSYwJAYDVQQKEx1Db21pdGUgUmVzZWF1IGRlcyBVbml2ZXJzaXRlczEWMBQGA1UE AxMNbGlzdGVzLmNydS5mcoIJALz9N4APNuWWMAwGA1UdEwQFMAMBAf8wDQYJKoZI hvcNAQEFBQADgYEAJvevFKcsQ+nzuQ33VkWaXHisSkCDM0WqEsXccYM4svmlBjr1 Ef4os8Ggd1P8rYiECqXjvQDk5FM4hmMSI8y7tx2hk5fnVqNGCs9zjpkrJmL8H+l+ H/+4HeNmfMHXtZD9PH2lrJDM2G64aNxrWil2gI9fwtLeWcr7qHWApTkiXto= listes.cru.fr CN=listes.cru.fr,O=Comite Reseau des Universites,C=FR MIICyDCCAjGgAwIBAgIJALz9N4APNuWWMA0GCSqGSIb3DQEBBQUAME0xCzAJBgNV BAYTAkZSMSYwJAYDVQQKEx1Db21pdGUgUmVzZWF1IGRlcyBVbml2ZXJzaXRlczEW MBQGA1UEAxMNbGlzdGVzLmNydS5mcjAeFw0wODA1MjcxMjUzNDlaFw0yODA1MjIx MjUzNDlaME0xCzAJBgNVBAYTAkZSMSYwJAYDVQQKEx1Db21pdGUgUmVzZWF1IGRl cyBVbml2ZXJzaXRlczEWMBQGA1UEAxMNbGlzdGVzLmNydS5mcjCBnzANBgkqhkiG 9w0BAQEFAAOBjQAwgYkCgYEAw8NaRmrIQww9vd4lsSib0bryMcTjHp1a1koSAg/7 k9qimp2JAWiVjkhxH834TmlF7IKInk2fZjzU/NWeZ9Dy0wcpVTq6qyt+H0nnMRGt 3ngFN+eCrfoR8yQdd12r4GhJQWgJxFDysuZGtmRG0nBfmEKHigAu4t5D17OEWq5Y IM8CAwEAAaOBrzCBrDAdBgNVHQ4EFgQUxswwZJTmFZApZhtgYQHJN+kKgfQwfQYD VR0jBHYwdIAUxswwZJTmFZApZhtgYQHJN+kKgfShUaRPME0xCzAJBgNVBAYTAkZS MSYwJAYDVQQKEx1Db21pdGUgUmVzZWF1IGRlcyBVbml2ZXJzaXRlczEWMBQGA1UE AxMNbGlzdGVzLmNydS5mcoIJALz9N4APNuWWMAwGA1UdEwQFMAMBAf8wDQYJKoZI hvcNAQEFBQADgYEAJvevFKcsQ+nzuQ33VkWaXHisSkCDM0WqEsXccYM4svmlBjr1 Ef4os8Ggd1P8rYiECqXjvQDk5FM4hmMSI8y7tx2hk5fnVqNGCs9zjpkrJmL8H+l+ H/+4HeNmfMHXtZD9PH2lrJDM2G64aNxrWil2gI9fwtLeWcr7qHWApTkiXto= listes.csiesr.fr CN=listes.csiesr.fr,O=CSIESR,C=FR MIICjDCCAfWgAwIBAgIJAM8ggMqfwxosMA0GCSqGSIb3DQEBBQUAMDkxCzAJBgNV BAYTAkZSMQ8wDQYDVQQKEwZDU0lFU1IxGTAXBgNVBAMTEGxpc3Rlcy5jc2llc3Iu ZnIwHhcNMDgwNjEwMDg0MDMzWhcNMjgwNjA1MDg0MDMzWjA5MQswCQYDVQQGEwJG UjEPMA0GA1UEChMGQ1NJRVNSMRkwFwYDVQQDExBsaXN0ZXMuY3NpZXNyLmZyMIGf MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD8PG7ZMAs8HiE0ebi5x1w6T1PAoRTl dYkc121rt9mZXKciQTcrFB4RrL/u+LwtfzjcoTNrZrunZMrxAAE14uW8KyTWxw18 YQ3XpDO/zcgfFcNQJ3oKqpz3X0cGzXu4/ueub3Amoq4QSPnQsWED+wrwtDVw6Pnj 4IRfzRXh+exa0QIDAQABo4GbMIGYMB0GA1UdDgQWBBRcXk1D8Npvw0Ixz2ksdSei Z4hUgzBpBgNVHSMEYjBggBRcXk1D8Npvw0Ixz2ksdSeiZ4hUg6E9pDswOTELMAkG A1UEBhMCRlIxDzANBgNVBAoTBkNTSUVTUjEZMBcGA1UEAxMQbGlzdGVzLmNzaWVz ci5mcoIJAM8ggMqfwxosMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEA t/9cQS7mA58oBMgPfKOwdLpgpre9jqIBQB/XA7nWYeSuOsLM6Fpee4vU/P6PR9u+ a5w8qHRysNFGcWSlhk7eAhHyXfDIYYpKZiQVynSxMP9bNgwp6fiu+He4G7jhbLlu JVwyyYvQusi+9nTM/wwn2pHdCDVRyZRQF8YzVIXZ3qo= listes.csiesr.fr CN=listes.csiesr.fr,O=CSIESR,C=FR MIICjDCCAfWgAwIBAgIJAM8ggMqfwxosMA0GCSqGSIb3DQEBBQUAMDkxCzAJBgNV BAYTAkZSMQ8wDQYDVQQKEwZDU0lFU1IxGTAXBgNVBAMTEGxpc3Rlcy5jc2llc3Iu ZnIwHhcNMDgwNjEwMDg0MDMzWhcNMjgwNjA1MDg0MDMzWjA5MQswCQYDVQQGEwJG UjEPMA0GA1UEChMGQ1NJRVNSMRkwFwYDVQQDExBsaXN0ZXMuY3NpZXNyLmZyMIGf MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD8PG7ZMAs8HiE0ebi5x1w6T1PAoRTl dYkc121rt9mZXKciQTcrFB4RrL/u+LwtfzjcoTNrZrunZMrxAAE14uW8KyTWxw18 YQ3XpDO/zcgfFcNQJ3oKqpz3X0cGzXu4/ueub3Amoq4QSPnQsWED+wrwtDVw6Pnj 4IRfzRXh+exa0QIDAQABo4GbMIGYMB0GA1UdDgQWBBRcXk1D8Npvw0Ixz2ksdSei Z4hUgzBpBgNVHSMEYjBggBRcXk1D8Npvw0Ixz2ksdSeiZ4hUg6E9pDswOTELMAkG A1UEBhMCRlIxDzANBgNVBAoTBkNTSUVTUjEZMBcGA1UEAxMQbGlzdGVzLmNzaWVz ci5mcoIJAM8ggMqfwxosMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEA t/9cQS7mA58oBMgPfKOwdLpgpre9jqIBQB/XA7nWYeSuOsLM6Fpee4vU/P6PR9u+ a5w8qHRysNFGcWSlhk7eAhHyXfDIYYpKZiQVynSxMP9bNgwp6fiu+He4G7jhbLlu JVwyyYvQusi+9nTM/wwn2pHdCDVRyZRQF8YzVIXZ3qo= univ-jfc.fr MIIEMDCCAxigAwIBAgILAQAAAAABHeOs+yswDQYJKoZIhvcNAQEFBQAwXzELMAkG A1UEBhMCQkUxEzARBgNVBAoTCkN5YmVydHJ1c3QxFzAVBgNVBAsTDkVkdWNhdGlv bmFsIENBMSIwIAYDVQQDExlDeWJlcnRydXN0IEVkdWNhdGlvbmFsIENBMB4XDTA4 MTEyODE1MTgzNFoXDTExMTEyODE1MTgzNFowXTELMAkGA1UEBhMCRlIxMTAvBgNV BAoTKEN0cmUgVW5pdiBGb3JtYXQgUmVjaGVyIE5lIEV0IE1pZGkgUHlyZW4xGzAZ BgNVBAMTEmNhYnJlbC51bml2LWpmYy5mcjCBnzANBgkqhkiG9w0BAQEFAAOBjQAw gYkCgYEA87h0etFcI4Olt2Ovzc2Afti/x6J6J1w8epq0NO61Rz7f+W4XsJoPIfZI 2MGPNHSLtk03kOWc1PUIssj240hmDAWSQVY4a3dnUHzYYwO56gXI4VCaP7oIyJpr 9hLWhsxsI3zfWcfZTyP1ZT/5aSpGz9/Wyb0PFEPfuoSH1ESZlJUCAwEAAaOCAXEw ggFtMFAGA1UdIARJMEcwRQYHKoZIsT4BADA6MDgGCCsGAQUFBwIBFixodHRwOi8v d3d3Lmdsb2JhbHNpZ24ubmV0L3JlcG9zaXRvcnkvY3BzLmNmbTAOBgNVHQ8BAf8E BAMCBaAwHwYDVR0jBBgwFoAUZWWjPdc7EaMKByU3yUJKW3Z3UOEwHQYDVR0OBBYE FI2DDb9K3Z9Sl1OzZJ8byFHO3XoRMDoGA1UdHwQzMDEwL6AtoCuGKWh0dHA6Ly9j cmwuZ2xvYmFsc2lnbi5uZXQvZWR1Y2F0aW9uYWwuY3JsME8GCCsGAQUFBwEBBEMw QTA/BggrBgEFBQcwAoYzaHR0cDovL3NlY3VyZS5nbG9iYWxzaWduLm5ldC9jYWNl cnQvZWR1Y2F0aW9uYWwuY3J0MB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcD AjAdBgNVHREEFjAUghJjYWJyZWwudW5pdi1qZmMuZnIwDQYJKoZIhvcNAQEFBQAD ggEBAHAcNQtULq9RLCTn+/g5jl5ENRxVj+3JI4hMDJMPZJmMsebpv896lTApD7ei jIFKrnew7hdl2lpDRMxKkQS3Ygxa7/HhuOcGBVoFIKyN35Clix3tWhP7P7GxC/JY 6fwLQ9mB8hPhJ5uXHA8he5G2/xsInvW9wRtqq6Sfcz9CHLfYNEUXHq2/LbnBreWA d8v+cbFAWQvaPSss4LZXujMiDo2QCexGuaBGumJ5mXKKOrOzb0GAMPYBStAoR4zX rk3h9JOD0El42/6Z7mwlrGIoUZLC7ZetJegQrcfMUwf2VQp086NFzxhX6oDS3Lod OCtecuSNWAaLANEqmwX3BZkVcmQ= urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient CUFR Jean-François Champollion CUFR Jean-François Champollion http://unknown.site.com J.-M. Kubek jean-marie.kubek@univ-jfc.fr shibboleth.cambridge.org CN=shibboleth.cambridge.org,OU=Terms of use at www.verisign.com/rpa (c)05,O=Cambridge University Press,L=Cambridge,ST=Cambridgeshire,C=GB MIIFRzCCBC+gAwIBAgIQW0xPeJ5N/2LvU44N0W8DpzANBgkqhkiG9w0BAQUFADCB tTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1c2Ug YXQgaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYSAoYykwOTEvMC0GA1UEAxMm VmVyaVNpZ24gQ2xhc3MgMyBTZWN1cmUgU2VydmVyIENBIC0gRzIwHhcNMTAwODI2 MDAwMDAwWhcNMTIwOTI0MjM1OTU5WjCBtzELMAkGA1UEBhMCR0IxFzAVBgNVBAgM DkNhbWJyaWRnZXNoaXJlMRIwEAYDVQQHDAlDYW1icmlkZ2UxIzAhBgNVBAoMGkNh bWJyaWRnZSBVbml2ZXJzaXR5IFByZXNzMTMwMQYDVQQLDCpUZXJtcyBvZiB1c2Ug YXQgd3d3LnZlcmlzaWduLmNvbS9ycGEgKGMpMDUxITAfBgNVBAMMGHNoaWJib2xl dGguY2FtYnJpZGdlLm9yZzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtpZW CaxRbkG64Y9USvFEZ5pFToRQT0ABi4sTzWD1aHNK5ysIzjjq4p330kRfbkCmZzWc DrJ/GTEFCTn+75/wceoaa3NWXCDvxXO+eFsG+JZeWSu/lHrUKd2Ts0247YkTCqjk 50PQqvrrW6C/LuiLXgiotKCiOpcZjAUXLxPzik8CAwEAAaOCAdEwggHNMAkGA1Ud EwQCMAAwCwYDVR0PBAQDAgWgMEUGA1UdHwQ+MDwwOqA4oDaGNGh0dHA6Ly9TVlJT ZWN1cmUtRzItY3JsLnZlcmlzaWduLmNvbS9TVlJTZWN1cmVHMi5jcmwwRAYDVR0g BD0wOzA5BgtghkgBhvhFAQcXAzAqMCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy52 ZXJpc2lnbi5jb20vcnBhMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAf BgNVHSMEGDAWgBSl7wsRzsBBA6NKZZBIshzgVy19RzB2BggrBgEFBQcBAQRqMGgw JAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLnZlcmlzaWduLmNvbTBABggrBgEFBQcw AoY0aHR0cDovL1NWUlNlY3VyZS1HMi1haWEudmVyaXNpZ24uY29tL1NWUlNlY3Vy ZUcyLmNlcjBuBggrBgEFBQcBDARiMGChXqBcMFowWDBWFglpbWFnZS9naWYwITAf MAcGBSsOAwIaBBRLa7kolgYMu9BSOJsprEsHiyEFGDAmFiRodHRwOi8vbG9nby52 ZXJpc2lnbi5jb20vdnNsb2dvMS5naWYwDQYJKoZIhvcNAQEFBQADggEBAKEpNb01 gWfNChWG+c6A1e5KEW0Aw9X6RdeHAzV3I00iu1AhUl8MKCP7KkceNS+SCI8LQOuC /HZyA5mEp/ods2NikLl75KArJPbZ6DWR4xqiF/9/481htFTJoM6rs5WUtcLZqhn6 fgovxxo2aeTdGw4KaEgRMGGApJtAhSmTId4EM+z5zbFNuJVJZD6NQ82Aw3ukd8Jf VYW9DlKAIXGbN6porKWdZ/9Bh4HpIzEd5AWM9p5DQZBOmfBg3OXh1gzR1+A6NVkJ 1xwpVus7sJ8mS4YU18oNblLXdGrmdNGLAh08FVf0YWaAmB6hd+via3bOAzQaqkk+ 4tnfY9KwLiRXOSQ= shibboleth.cambridge.org CN=shibboleth.cambridge.org,OU=Terms of use at www.verisign.com/rpa (c)05,O=Cambridge University Press,L=Cambridge,ST=Cambridgeshire,C=GB MIIFRzCCBC+gAwIBAgIQW0xPeJ5N/2LvU44N0W8DpzANBgkqhkiG9w0BAQUFADCB tTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1c2Ug YXQgaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYSAoYykwOTEvMC0GA1UEAxMm VmVyaVNpZ24gQ2xhc3MgMyBTZWN1cmUgU2VydmVyIENBIC0gRzIwHhcNMTAwODI2 MDAwMDAwWhcNMTIwOTI0MjM1OTU5WjCBtzELMAkGA1UEBhMCR0IxFzAVBgNVBAgM DkNhbWJyaWRnZXNoaXJlMRIwEAYDVQQHDAlDYW1icmlkZ2UxIzAhBgNVBAoMGkNh bWJyaWRnZSBVbml2ZXJzaXR5IFByZXNzMTMwMQYDVQQLDCpUZXJtcyBvZiB1c2Ug YXQgd3d3LnZlcmlzaWduLmNvbS9ycGEgKGMpMDUxITAfBgNVBAMMGHNoaWJib2xl dGguY2FtYnJpZGdlLm9yZzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtpZW CaxRbkG64Y9USvFEZ5pFToRQT0ABi4sTzWD1aHNK5ysIzjjq4p330kRfbkCmZzWc DrJ/GTEFCTn+75/wceoaa3NWXCDvxXO+eFsG+JZeWSu/lHrUKd2Ts0247YkTCqjk 50PQqvrrW6C/LuiLXgiotKCiOpcZjAUXLxPzik8CAwEAAaOCAdEwggHNMAkGA1Ud EwQCMAAwCwYDVR0PBAQDAgWgMEUGA1UdHwQ+MDwwOqA4oDaGNGh0dHA6Ly9TVlJT ZWN1cmUtRzItY3JsLnZlcmlzaWduLmNvbS9TVlJTZWN1cmVHMi5jcmwwRAYDVR0g BD0wOzA5BgtghkgBhvhFAQcXAzAqMCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy52 ZXJpc2lnbi5jb20vcnBhMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAf BgNVHSMEGDAWgBSl7wsRzsBBA6NKZZBIshzgVy19RzB2BggrBgEFBQcBAQRqMGgw JAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLnZlcmlzaWduLmNvbTBABggrBgEFBQcw AoY0aHR0cDovL1NWUlNlY3VyZS1HMi1haWEudmVyaXNpZ24uY29tL1NWUlNlY3Vy ZUcyLmNlcjBuBggrBgEFBQcBDARiMGChXqBcMFowWDBWFglpbWFnZS9naWYwITAf MAcGBSsOAwIaBBRLa7kolgYMu9BSOJsprEsHiyEFGDAmFiRodHRwOi8vbG9nby52 ZXJpc2lnbi5jb20vdnNsb2dvMS5naWYwDQYJKoZIhvcNAQEFBQADggEBAKEpNb01 gWfNChWG+c6A1e5KEW0Aw9X6RdeHAzV3I00iu1AhUl8MKCP7KkceNS+SCI8LQOuC /HZyA5mEp/ods2NikLl75KArJPbZ6DWR4xqiF/9/481htFTJoM6rs5WUtcLZqhn6 fgovxxo2aeTdGw4KaEgRMGGApJtAhSmTId4EM+z5zbFNuJVJZD6NQ82Aw3ukd8Jf VYW9DlKAIXGbN6porKWdZ/9Bh4HpIzEd5AWM9p5DQZBOmfBg3OXh1gzR1+A6NVkJ 1xwpVus7sJ8mS4YU18oNblLXdGrmdNGLAh08FVf0YWaAmB6hd+via3bOAzQaqkk+ 4tnfY9KwLiRXOSQ= classiques-garnier.com www.classiques-garnier.com CN=www.classiques-garnier.com,O=Classiques Garnier,OU=IT,L=Paris,ST=Ile de france,C=FR MIIFKzCCBBOgAwIBAgILAQAAAAABIryimYQwDQYJKoZIhvcNAQEFBQAwajEjMCEG A1UECxMaT3JnYW5pemF0aW9uIFZhbGlkYXRpb24gQ0ExEzARBgNVBAoTCkdsb2Jh bFNpZ24xLjAsBgNVBAMTJUdsb2JhbFNpZ24gT3JnYW5pemF0aW9uIFZhbGlkYXRp b24gQ0EwHhcNMDkwNzI3MTM1MjQxWhcNMTQwNzI3MTM1MjM3WjCBhDELMAkGA1UE BhMCRlIxFjAUBgNVBAgTDUlsZSBkZSBmcmFuY2UxDjAMBgNVBAcTBVBhcmlzMQsw CQYDVQQLEwJJVDEbMBkGA1UEChMSQ2xhc3NpcXVlcyBHYXJuaWVyMSMwIQYDVQQD Exp3d3cuY2xhc3NpcXVlcy1nYXJuaWVyLmNvbTCCASIwDQYJKoZIhvcNAQEBBQAD ggEPADCCAQoCggEBAL8nP9d6RChOzUaiDbYkFQAoV8Qz8cn11CiYwNBz/+SOQjrv Qz2toPH8AblzFYG5YRA8krcqYS09yZ5ftk43PYwFu/RwFbv3AwmfOI+KfqAgSQBj 2Qk3j37ZEYoS7n2qhcMUrbHOKkUFOTH8HB+Gn2jEnEmkNHAJr/TjHtA/Nx2nc5C9 e3UX0Arh5f3pbyE9xhbyXjoF15sdIWepoZHD0IZkNdVDNOfMJ6CEPfIVPcjmEeFi 37eMd7GdLFMMwT6CxCL9EybL+cuVXHob7XTSLlqAg1ZN3cc3QhRtJ0iqbzJkGMLa L+iRJX6bm3RRDtP8z4kPrmv/KvuVQyPousdWzIUCAwEAAaOCAbUwggGxMB8GA1Ud IwQYMBaAFH1tKuxmq6dRNqsCafFwj8RZC5ofMEkGCCsGAQUFBwEBBD0wOzA5Bggr BgEFBQcwAoYtaHR0cDovL3NlY3VyZS5nbG9iYWxzaWduLm5ldC9jYWNlcnQvb3Jn djEuY3J0MD8GA1UdHwQ4MDYwNKAyoDCGLmh0dHA6Ly9jcmwuZ2xvYmFsc2lnbi5u ZXQvT3JnYW5pemF0aW9uVmFsMS5jcmwwHQYDVR0OBBYEFBQBK28O5+m2Li0bEeXM b+ty/8SLMAkGA1UdEwQCMAAwDgYDVR0PAQH/BAQDAgWgMCkGA1UdJQQiMCAGCCsG AQUFBwMBBggrBgEFBQcDAgYKKwYBBAGCNwoDAzBLBgNVHSAERDBCMEAGCSsGAQQB oDIBFDAzMDEGCCsGAQUFBwIBFiVodHRwOi8vd3d3Lmdsb2JhbHNpZ24ubmV0L3Jl cG9zaXRvcnkvMBEGCWCGSAGG+EIBAQQEAwIGwDA9BgNVHREENjA0ghp3d3cuY2xh c3NpcXVlcy1nYXJuaWVyLmNvbYIWY2xhc3NpcXVlcy1nYXJuaWVyLmNvbTANBgkq hkiG9w0BAQUFAAOCAQEAUacaaIG0rZkrFFUbean2hek9ztJ7mFeLESGCA2ROw+xo /ljFSEVejUiVAGgAujBoC99HxQat25/l8vBgjdZjCrNI7Z7dCX1KXOffQJbML++K qObcMD34R7g7inspE0EfwsXQW1gt9x74meMFZ9f6L1gS+wDUf8BAn5REYOkE49OE SLkAaTDyOSzMdHDLVXvUO5WNEPVESa4fOsO7f0qrTD6RmuoLXr5X8u7/1zscORFB yrb4iG/eDeEOzjEDU9cn+PtAnY3pDyAHuwXYPCFr/B2tUgLCNjboyhDDCceXsev+ XcDdIrTujV6ZRQ2HKQBg9pyUBxp5fmi6k2jRAxymdA== classiques-garnier.com www.classiques-garnier.com CN=www.classiques-garnier.com,O=Classiques Garnier,OU=IT,L=Paris,ST=Ile de france,C=FR MIIFKzCCBBOgAwIBAgILAQAAAAABIryimYQwDQYJKoZIhvcNAQEFBQAwajEjMCEG A1UECxMaT3JnYW5pemF0aW9uIFZhbGlkYXRpb24gQ0ExEzARBgNVBAoTCkdsb2Jh bFNpZ24xLjAsBgNVBAMTJUdsb2JhbFNpZ24gT3JnYW5pemF0aW9uIFZhbGlkYXRp b24gQ0EwHhcNMDkwNzI3MTM1MjQxWhcNMTQwNzI3MTM1MjM3WjCBhDELMAkGA1UE BhMCRlIxFjAUBgNVBAgTDUlsZSBkZSBmcmFuY2UxDjAMBgNVBAcTBVBhcmlzMQsw CQYDVQQLEwJJVDEbMBkGA1UEChMSQ2xhc3NpcXVlcyBHYXJuaWVyMSMwIQYDVQQD Exp3d3cuY2xhc3NpcXVlcy1nYXJuaWVyLmNvbTCCASIwDQYJKoZIhvcNAQEBBQAD ggEPADCCAQoCggEBAL8nP9d6RChOzUaiDbYkFQAoV8Qz8cn11CiYwNBz/+SOQjrv Qz2toPH8AblzFYG5YRA8krcqYS09yZ5ftk43PYwFu/RwFbv3AwmfOI+KfqAgSQBj 2Qk3j37ZEYoS7n2qhcMUrbHOKkUFOTH8HB+Gn2jEnEmkNHAJr/TjHtA/Nx2nc5C9 e3UX0Arh5f3pbyE9xhbyXjoF15sdIWepoZHD0IZkNdVDNOfMJ6CEPfIVPcjmEeFi 37eMd7GdLFMMwT6CxCL9EybL+cuVXHob7XTSLlqAg1ZN3cc3QhRtJ0iqbzJkGMLa L+iRJX6bm3RRDtP8z4kPrmv/KvuVQyPousdWzIUCAwEAAaOCAbUwggGxMB8GA1Ud IwQYMBaAFH1tKuxmq6dRNqsCafFwj8RZC5ofMEkGCCsGAQUFBwEBBD0wOzA5Bggr BgEFBQcwAoYtaHR0cDovL3NlY3VyZS5nbG9iYWxzaWduLm5ldC9jYWNlcnQvb3Jn djEuY3J0MD8GA1UdHwQ4MDYwNKAyoDCGLmh0dHA6Ly9jcmwuZ2xvYmFsc2lnbi5u ZXQvT3JnYW5pemF0aW9uVmFsMS5jcmwwHQYDVR0OBBYEFBQBK28O5+m2Li0bEeXM b+ty/8SLMAkGA1UdEwQCMAAwDgYDVR0PAQH/BAQDAgWgMCkGA1UdJQQiMCAGCCsG AQUFBwMBBggrBgEFBQcDAgYKKwYBBAGCNwoDAzBLBgNVHSAERDBCMEAGCSsGAQQB oDIBFDAzMDEGCCsGAQUFBwIBFiVodHRwOi8vd3d3Lmdsb2JhbHNpZ24ubmV0L3Jl cG9zaXRvcnkvMBEGCWCGSAGG+EIBAQQEAwIGwDA9BgNVHREENjA0ghp3d3cuY2xh c3NpcXVlcy1nYXJuaWVyLmNvbYIWY2xhc3NpcXVlcy1nYXJuaWVyLmNvbTANBgkq hkiG9w0BAQUFAAOCAQEAUacaaIG0rZkrFFUbean2hek9ztJ7mFeLESGCA2ROw+xo /ljFSEVejUiVAGgAujBoC99HxQat25/l8vBgjdZjCrNI7Z7dCX1KXOffQJbML++K qObcMD34R7g7inspE0EfwsXQW1gt9x74meMFZ9f6L1gS+wDUf8BAn5REYOkE49OE SLkAaTDyOSzMdHDLVXvUO5WNEPVESa4fOsO7f0qrTD6RmuoLXr5X8u7/1zscORFB yrb4iG/eDeEOzjEDU9cn+PtAnY3pDyAHuwXYPCFr/B2tUgLCNjboyhDDCceXsev+ XcDdIrTujV6ZRQ2HKQBg9pyUBxp5fmi6k2jRAxymdA== listes.couperin.org CN=listes.couperin.org,O=Couperin,C=FR MIICmzCCAgSgAwIBAgIJAIOXnbSE9WiLMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNV BAYTAkZSMREwDwYDVQQKEwhDb3VwZXJpbjEcMBoGA1UEAxMTbGlzdGVzLmNvdXBl cmluLm9yZzAeFw0wOTAzMTYxNDE0NDdaFw0yOTAzMTExNDE0NDdaMD4xCzAJBgNV BAYTAkZSMREwDwYDVQQKEwhDb3VwZXJpbjEcMBoGA1UEAxMTbGlzdGVzLmNvdXBl cmluLm9yZzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvMNDbuuMqHLu1Z/f HbZhHZ8+E5XlmSOySexrV4Chh32bnmYzrD8MAw4N8C5G4gMj5VqZyI3gRtMsNu6p NgTzDbeIRVQUIcyiyGIoFDZBlgphBLxCUM2cepKEAjSrLHCnenwmrwR1QKegiMua 9TRYnc9HX5fJVJrlez9Ka6ih9e0CAwEAAaOBoDCBnTAdBgNVHQ4EFgQUYbcbWOj+ GA5Eq2oeOHH/xV7tV1UwbgYDVR0jBGcwZYAUYbcbWOj+GA5Eq2oeOHH/xV7tV1Wh QqRAMD4xCzAJBgNVBAYTAkZSMREwDwYDVQQKEwhDb3VwZXJpbjEcMBoGA1UEAxMT bGlzdGVzLmNvdXBlcmluLm9yZ4IJAIOXnbSE9WiLMAwGA1UdEwQFMAMBAf8wDQYJ KoZIhvcNAQEFBQADgYEASNrvlle00ZUv1KnOavkAb4nbsKKDVjTKG5b1KMtkmQZ2 0G6tCXwZAUpYHtbFAEjBc+Wh5wlwbtIe86O7nZb1Swmwk7DfZtFCQkfiE3GNCU6k NzcVZSv++1F4CP+OMIZml5+Imft9y5TvxF18VVzTX/DjMkHlJLlI2OnW9gPF240= listes.couperin.org CN=listes.couperin.org,O=Couperin,C=FR MIICmzCCAgSgAwIBAgIJAIOXnbSE9WiLMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNV BAYTAkZSMREwDwYDVQQKEwhDb3VwZXJpbjEcMBoGA1UEAxMTbGlzdGVzLmNvdXBl cmluLm9yZzAeFw0wOTAzMTYxNDE0NDdaFw0yOTAzMTExNDE0NDdaMD4xCzAJBgNV BAYTAkZSMREwDwYDVQQKEwhDb3VwZXJpbjEcMBoGA1UEAxMTbGlzdGVzLmNvdXBl cmluLm9yZzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvMNDbuuMqHLu1Z/f HbZhHZ8+E5XlmSOySexrV4Chh32bnmYzrD8MAw4N8C5G4gMj5VqZyI3gRtMsNu6p NgTzDbeIRVQUIcyiyGIoFDZBlgphBLxCUM2cepKEAjSrLHCnenwmrwR1QKegiMua 9TRYnc9HX5fJVJrlez9Ka6ih9e0CAwEAAaOBoDCBnTAdBgNVHQ4EFgQUYbcbWOj+ GA5Eq2oeOHH/xV7tV1UwbgYDVR0jBGcwZYAUYbcbWOj+GA5Eq2oeOHH/xV7tV1Wh QqRAMD4xCzAJBgNVBAYTAkZSMREwDwYDVQQKEwhDb3VwZXJpbjEcMBoGA1UEAxMT bGlzdGVzLmNvdXBlcmluLm9yZ4IJAIOXnbSE9WiLMAwGA1UdEwQFMAMBAf8wDQYJ KoZIhvcNAQEFBQADgYEASNrvlle00ZUv1KnOavkAb4nbsKKDVjTKG5b1KMtkmQZ2 0G6tCXwZAUpYHtbFAEjBc+Wh5wlwbtIe86O7nZb1Swmwk7DfZtFCQkfiE3GNCU6k NzcVZSv++1F4CP+OMIZml5+Imft9y5TvxF18VVzTX/DjMkHlJLlI2OnW9gPF240= crous-dijon.fr MIIErzCCA5egAwIBAgIRAPce78VI0mZGzFqgRgussIEwDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0xMTAxMTIwMDAwMDBaFw0xNDAxMTEyMzU5NTlaMGAxCzAJBgNV BAYTAkZSMQ4wDAYDVQQHEwVEaWpvbjEXMBUGA1UEChMOQ1JPVVMgZGUgRElKT04x DDAKBgNVBAsTA0RTSTEaMBgGA1UEAxMRbnMuY3JvdXMtZGlqb24uZnIwggEiMA0G CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC4CnU/wibyinuaPI2EqcrvmaWCV9dz Z9zkKanUn0KVoPGaFayhJCI/H0c5D+FEJl/lsA0YKzghi8baSc8L+pmq+LV4DF0k k3Ke9Yfn9gDr5Y+IadmSo7nmxiE42LJrFZBSzPrqK7HClDKskkgHu6lIXX3vDwX9 NTUWOITDsqh+iLziudBc4DLim1brrMVwdpZVwCGWixI+pnx+Mn1KaLkW2migteMW TvAj7uf37zucUa0RhHXI5IbsmRXsH04r7Xq2et74nQETmGS861kBfEtqNWs8oZNF GGT4y7VCq4XIN2ZFp7xZetyzEkrlaGxJyL+2H0PFy2PJkVgU0BRpEA//AgMBAAGj ggGMMIIBiDAfBgNVHSMEGDAWgBQMvZNoDPPeq6NJays3V0fqkOO57TAdBgNVHQ4E FgQUkCg4s3FgI7pzpdqRGT3IeDfAkSUwDgYDVR0PAQH/BAQDAgWgMAwGA1UdEwEB /wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBgGA1UdIAQRMA8w DQYLKwYBBAGyMQECAh0wOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC50Y3Mu dGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcmwwbQYIKwYBBQUHAQEEYTBfMDUGCCsG AQUFBzAChilodHRwOi8vY3J0LnRjcy50ZXJlbmEub3JnL1RFUkVOQVNTTENBLmNy dDAmBggrBgEFBQcwAYYaaHR0cDovL29jc3AudGNzLnRlcmVuYS5vcmcwRAYDVR0R BD0wO4IRbnMuY3JvdXMtZGlqb24uZnKCEmNhcy5jcm91cy1kaWpvbi5mcoISaWRw LmNyb3VzLWRpam9uLmZyMA0GCSqGSIb3DQEBBQUAA4IBAQAIUjdnsILs5B0S4r30 7X842J3m5zaE7xQ2kKKAa8FiF2TNZ+dzQQDbYrB8+nLD85ziWEwLzqGPHulDWbTI YxUX6Stt/KMW5frhCXX2i7hEp3gfKazu+jXou9ISXRuqKCU198d2Ic1Pqu8VoxwF 7BgmqM7TDu+t8FTDF7rufbSKwCIR+yY+3oHtdNlZEdGCvCGOakfBEgqyZ4H6USuH WOVN0EpwAIdhLCQfwekeOM9ZulAKFYRB5tEKfmWS1aqo/7wNx71fJdjFV2mOkdcX B3ix6dIX1SsZx0ffnk3wPlrx6RGiItqiVD6gPDlUY/BRftSiyH/EEEM00YzHtqO/ iTNj urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient crous-dijon.fr MIIErzCCA5egAwIBAgIRAPce78VI0mZGzFqgRgussIEwDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0xMTAxMTIwMDAwMDBaFw0xNDAxMTEyMzU5NTlaMGAxCzAJBgNV BAYTAkZSMQ4wDAYDVQQHEwVEaWpvbjEXMBUGA1UEChMOQ1JPVVMgZGUgRElKT04x DDAKBgNVBAsTA0RTSTEaMBgGA1UEAxMRbnMuY3JvdXMtZGlqb24uZnIwggEiMA0G CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC4CnU/wibyinuaPI2EqcrvmaWCV9dz Z9zkKanUn0KVoPGaFayhJCI/H0c5D+FEJl/lsA0YKzghi8baSc8L+pmq+LV4DF0k k3Ke9Yfn9gDr5Y+IadmSo7nmxiE42LJrFZBSzPrqK7HClDKskkgHu6lIXX3vDwX9 NTUWOITDsqh+iLziudBc4DLim1brrMVwdpZVwCGWixI+pnx+Mn1KaLkW2migteMW TvAj7uf37zucUa0RhHXI5IbsmRXsH04r7Xq2et74nQETmGS861kBfEtqNWs8oZNF GGT4y7VCq4XIN2ZFp7xZetyzEkrlaGxJyL+2H0PFy2PJkVgU0BRpEA//AgMBAAGj ggGMMIIBiDAfBgNVHSMEGDAWgBQMvZNoDPPeq6NJays3V0fqkOO57TAdBgNVHQ4E FgQUkCg4s3FgI7pzpdqRGT3IeDfAkSUwDgYDVR0PAQH/BAQDAgWgMAwGA1UdEwEB /wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBgGA1UdIAQRMA8w DQYLKwYBBAGyMQECAh0wOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC50Y3Mu dGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcmwwbQYIKwYBBQUHAQEEYTBfMDUGCCsG AQUFBzAChilodHRwOi8vY3J0LnRjcy50ZXJlbmEub3JnL1RFUkVOQVNTTENBLmNy dDAmBggrBgEFBQcwAYYaaHR0cDovL29jc3AudGNzLnRlcmVuYS5vcmcwRAYDVR0R BD0wO4IRbnMuY3JvdXMtZGlqb24uZnKCEmNhcy5jcm91cy1kaWpvbi5mcoISaWRw LmNyb3VzLWRpam9uLmZyMA0GCSqGSIb3DQEBBQUAA4IBAQAIUjdnsILs5B0S4r30 7X842J3m5zaE7xQ2kKKAa8FiF2TNZ+dzQQDbYrB8+nLD85ziWEwLzqGPHulDWbTI YxUX6Stt/KMW5frhCXX2i7hEp3gfKazu+jXou9ISXRuqKCU198d2Ic1Pqu8VoxwF 7BgmqM7TDu+t8FTDF7rufbSKwCIR+yY+3oHtdNlZEdGCvCGOakfBEgqyZ4H6USuH WOVN0EpwAIdhLCQfwekeOM9ZulAKFYRB5tEKfmWS1aqo/7wNx71fJdjFV2mOkdcX B3ix6dIX1SsZx0ffnk3wPlrx6RGiItqiVD6gPDlUY/BRftSiyH/EEEM00YzHtqO/ iTNj urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Crous de Dijon Crous de Dijon http://unknown.site.com PERROT Olivier olivier.perrot@crous-dijon.fr crous-poitiers.fr MIIDWzCCAkOgAwIBAgIUMWKZ8/6tKA7kwdsn4f4/cqyDED0wDQYJKoZIhvcNAQEF BQAwJzElMCMGA1UEAxMcc2hpYmJvbGV0aC5jcm91cy1wb2l0aWVycy5mcjAeFw0x MDA2MTAxMzMyNTNaFw0zMDA2MTAxMzMyNTNaMCcxJTAjBgNVBAMTHHNoaWJib2xl dGguY3JvdXMtcG9pdGllcnMuZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK AoIBAQCax6s86p49Xf1m/noYZtAqbN3LTSLj2rpuCe9jcMM9Gpf4X6p0btKZtWVq PMyJ+1oytarshKxBGV7m1U3MkZu88/Bn1OykynsaPPFYCraOWIawJRFJL2t45/By K7LVjmahS2JJj5qfVNuFNL4MsrfNieEZjZHdE/B9FZR4ME5sxwH44WvHEOnmumO7 l6GY8pHrWp8e0HDXf8Y1gn3dj4u0tNs5GBDVygqXgPKsSRi8IHAHKxbNuWx+PDWZ m25S2ouiGO27vkIYYPWvFjyxNqe0KFVD6yVYVoWdHFM7rskYJqE+iinmLpgE+tZX Q2oMnhEZlFeUiSzKq21Pi07JAwfHAgMBAAGjfzB9MFwGA1UdEQRVMFOCHHNoaWJi b2xldGguY3JvdXMtcG9pdGllcnMuZnKGM2h0dHBzOi8vc2hpYmJvbGV0aC5jcm91 cy1wb2l0aWVycy5mci9pZHAvc2hpYmJvbGV0aDAdBgNVHQ4EFgQUhXma4CxtS0tm sfkbl1uusiIUhq8wDQYJKoZIhvcNAQEFBQADggEBAGzVwbgJ/j2DYjRc8NR7NnDG 1FAueaBwSVOPe/zawt1M/nNhyHeIAXzsMaLLTptJmXSI1NYH8Zf0ZePlTj34W+iM MMYtACZXOqn9MROynG9sUKwh3qTe+yrskUoemApa/WndPY3mlEmoee5v7mJnD70Q asxkqS76pkUhyQAUBIZs2XwAdKamI/Fo3kfiOI/3GAFjQObwwnsg9fQLGq/jO8gK n44H8PXS4Vf4LLnN8kOUlNvmDD0us5c73Gli/rg/cKTptN1l+TbZ97qBqjTofxPa uPReZV8LGAFTW7W5OYm6HcXR3TA/vVBHjBqTmNFZ7/8t8dmgZ5uNGJNLsSgBhg8= urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Crous de Poitiers Crous de Poitiers http://unknown.site.com Papon Stephane crous.informatique@ac-poitiers.fr BOUET Jean-Pierre crous.informatique@ac-poitiers.fr crous-poitiers.fr MIIDYTCCAkmgAwIBAgIVAK1JJY+Vni1K2/Gj8TSecZ2nfA5OMA0GCSqGSIb3DQEB BQUAMCgxJjAkBgNVBAMTHXNoaWJib2xldGgyLmNyb3VzLXBvaXRpZXJzLmZyMB4X DTEwMDYxODE2MTUxOVoXDTMwMDYxODE2MTUxOVowKDEmMCQGA1UEAxMdc2hpYmJv bGV0aDIuY3JvdXMtcG9pdGllcnMuZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw ggEKAoIBAQCBCubIqgo0FUOM1f5vf5m3nQci9P++opOfsX5fmLp0bICTokfgFoOZ qEhQmhg/kLnibKyqKs7BqZtSJ+xaku9h7+ueSm1w2apw8QOVim+xe3ll8aymK7xb mdH4zW7B7Jks0zifo7e4nW4stsXfPUJOrCNXRdRET703nk6QN/Qiu17RWt88Uadu cGadx/AQRGeAZcYBR41LML9/U1xF1FsyuT/zdrN/fVZFnqXOrtEXxYEGRm3ozoNi gva/5phybzqwBnpc2SIyRpDuy902LI4WzOLkzeYtpo2lLI5WkoCsXohIMGoFAIj9 itfNchnJBI4ECX1nJopd2qaxJUGK4uxDAgMBAAGjgYEwfzBeBgNVHREEVzBVgh1z aGliYm9sZXRoMi5jcm91cy1wb2l0aWVycy5mcoY0aHR0cHM6Ly9zaGliYm9sZXRo Mi5jcm91cy1wb2l0aWVycy5mci9pZHAvc2hpYmJvbGV0aDAdBgNVHQ4EFgQUaHXQ kgsbK/sw5gbIYYRKSjZpG2wwDQYJKoZIhvcNAQEFBQADggEBAGTaQjStIv9u9FoZ avsynkNcb346aklMcpI2DCN722bMnOEFszECCBUwEsV23E5n1n/7Axq1InKhpOiv T/W9JX1JkE/9aAd5z/oUz2yhhSK1LLz94CZ6UQdVnHXH7ipsHaQryVyO7b+13wcG v+jbjhaMv9VLvYGT+M8DiuyweuLEfE+pVHdheqAQoN7HULjW4qne/1BENMUb/vCi AJHK4x9hJmHdOd7vCFkzLOmJEyQFYBClzWDbakXM90jaPI8NeC6pWc+qgpYjFGTg txfnocW3JJnVt8ty6uqIWt0k+qkO/ogJBnOOe+Lty2s6kWKlpgPNLbT+ongZFDMt 3IP53Xs= urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Crous de Poitiers - personnel Crous de Poitiers - personnel http://unknown.site.com Papon Stephane informatique@crous-poitiers.fr Jean-Pierre BOUET informatique@crous-poitiers.fr www.dawsonera.com CN=www.dawsonera.com,O=Semantico,L=Brighton,ST=East Sussex,C=GB MIIDSTCCAjGgAwIBAgIQOvdMPhrRfQvKM2FkVMlM6DANBgkqhkiG9w0BAQUFADA8 MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMVGhhd3RlLCBJbmMuMRYwFAYDVQQDEw1U aGF3dGUgU1NMIENBMB4XDTEwMTAwODAwMDAwMFoXDTEzMTAyOTIzNTk1OVowZjEL MAkGA1UEBhMCR0IxFDASBgNVBAgTC0Vhc3QgU3Vzc2V4MREwDwYDVQQHFAhCcmln aHRvbjESMBAGA1UEChQJU2VtYW50aWNvMRowGAYDVQQDFBF3d3cuZGF3c29uZXJh LmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1SMQWlmopgjZeH8ITGnf qjgJA+trii8i7lHAjm7EQZS0GS6A7gTtUFlc4pIPPzR2OpgkHM8TcjSQCTAPFmp1 hfUts6JkWTTe0TVHC4VqKuUtWPmq4oo5XsTTzTRt0MV7iLROkI/NNMf0qbgHEFo+ TkljHi1mmQhYsJ3LLO+Py4sCAwEAAaOBoDCBnTAMBgNVHRMBAf8EAjAAMDoGA1Ud HwQzMDEwL6AtoCuGKWh0dHA6Ly9zdnItb3YtY3JsLnRoYXd0ZS5jb20vVGhhd3Rl T1YuY3JsMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAyBggrBgEFBQcB AQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLnRoYXd0ZS5jb20wDQYJKoZI hvcNAQEFBQADggEBAG8liYbeb9+qVKIX/QHZzbMck5+/jROd42ggIoIDJlGawBZA PJ8Q5zxoJwKWcBJ7M1sI/wcI4HntFJgB00fAFGwK1mQo8+kfOCAaSPWEOwomBffc ATMBokvtILGbxmsCtMEFE+R94Bjdvgn/WsOHqj1LO8xNHtOGvbPDMb0NdS+W3R1T yArxEur5uitLP7u/9AcboSbsWJr+EfPmyN4K5p433zWobY9gMpOaIZ5tt3nVuIof Q2zQ39BwHPIUmro1+VsSXK4/Vc2Mg0lraBHNHKBM9H7g7JhTtDZ3YejMB5LxyPSX A+7vljJkaaHxaiFXuPXHzIPyGnY9og0BorlaDE0= SwitchFederation https://www.dawsonera.com/shibboleth www.dawsonera.com CN=www.dawsonera.com MIIDIDCCAgigAwIBAgIJAOR5KoM5PV6KMA0GCSqGSIb3DQEBBQUAMBwxGjAYBgNV BAMTEXd3dy5kYXdzb25lcmEuY29tMB4XDTEwMDEwNDE1NDEwNloXDTEzMDEwMzE1 NDEwNlowHDEaMBgGA1UEAxMRd3d3LmRhd3NvbmVyYS5jb20wggEiMA0GCSqGSIb3 DQEBAQUAA4IBDwAwggEKAoIBAQC4TZLi/hr3MbaoVD6XcjzHi5TJTxkbIhquXnsp oPqguGETWyTYxFksp4BD3UAoJ80emZTtOKOt1RvOd9Su7MAs3+drM3Vl35QA3G37 VFB72N9d3f3JKCr03NpWQF5rr1u/RSU78TSle0zAWRuYi8p7VyBa84wUsNf1Wcek Un5POEJkpEs6voO1TQyJYncoUsApV3Tp/xqQrtbpfU2QaDe+hbOVWsOEsI3mtA2E /SvS1AYT2d/ACQcvbOnk8d5kemgQ6e9lyNNNxKC1iO8yXqmhFUcq7GdoJgznk2xx Eiv5TNzS26b+SYb9HzFm2Vu4gqxbVtNyerv9aKvYXUMgMPzlAgMBAAGjZTBjMEIG A1UdEQQ7MDmCEXd3dy5kYXdzb25lcmEuY29thiRodHRwczovL3d3dy5kYXdzb25l cmEuY29tL3NoaWJib2xldGgwHQYDVR0OBBYEFEAuW+1vUBubcuUtJ9r6uz5980Gx MA0GCSqGSIb3DQEBBQUAA4IBAQBGULJmmiIJWBFt0lCRYYnrN2zPOJt9il16O52f GE7pvSaxop+XknYmTd3G0y/4ZJl4aPTJrwSZ0BXEiMnw6w8lizvQ7vr7iiR3XNX/ pjUpLhVVo/m/c/ZNFWWYA6CKjI0qBDJVgqRryxBSPsGwlGvdGOcmax5352jkrvjU jpMy+zG8SRpk4Irp3UFftDprPDKDQI4haNiuSbrm+jt/LEhWWJSm+aRtxLps3rLI Z0K3/KOUboO98Xu9Xy18gmvfcU3+jBGcC2XYESG8LzZ6cwbpQA//bl7hT3B78p8+ MrfUvPFvRNGvTR5HWWvyLbr35BxskjLce9x6GYpCZSMUdwyt www.dawsonera.com CN=www.dawsonera.com,O=Semantico,L=Brighton,ST=East Sussex,C=GB MIIDSTCCAjGgAwIBAgIQOvdMPhrRfQvKM2FkVMlM6DANBgkqhkiG9w0BAQUFADA8 MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMVGhhd3RlLCBJbmMuMRYwFAYDVQQDEw1U aGF3dGUgU1NMIENBMB4XDTEwMTAwODAwMDAwMFoXDTEzMTAyOTIzNTk1OVowZjEL MAkGA1UEBhMCR0IxFDASBgNVBAgTC0Vhc3QgU3Vzc2V4MREwDwYDVQQHFAhCcmln aHRvbjESMBAGA1UEChQJU2VtYW50aWNvMRowGAYDVQQDFBF3d3cuZGF3c29uZXJh LmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1SMQWlmopgjZeH8ITGnf qjgJA+trii8i7lHAjm7EQZS0GS6A7gTtUFlc4pIPPzR2OpgkHM8TcjSQCTAPFmp1 hfUts6JkWTTe0TVHC4VqKuUtWPmq4oo5XsTTzTRt0MV7iLROkI/NNMf0qbgHEFo+ TkljHi1mmQhYsJ3LLO+Py4sCAwEAAaOBoDCBnTAMBgNVHRMBAf8EAjAAMDoGA1Ud HwQzMDEwL6AtoCuGKWh0dHA6Ly9zdnItb3YtY3JsLnRoYXd0ZS5jb20vVGhhd3Rl T1YuY3JsMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAyBggrBgEFBQcB AQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLnRoYXd0ZS5jb20wDQYJKoZI hvcNAQEFBQADggEBAG8liYbeb9+qVKIX/QHZzbMck5+/jROd42ggIoIDJlGawBZA PJ8Q5zxoJwKWcBJ7M1sI/wcI4HntFJgB00fAFGwK1mQo8+kfOCAaSPWEOwomBffc ATMBokvtILGbxmsCtMEFE+R94Bjdvgn/WsOHqj1LO8xNHtOGvbPDMb0NdS+W3R1T yArxEur5uitLP7u/9AcboSbsWJr+EfPmyN4K5p433zWobY9gMpOaIZ5tt3nVuIof Q2zQ39BwHPIUmro1+VsSXK4/Vc2Mg0lraBHNHKBM9H7g7JhTtDZ3YejMB5LxyPSX A+7vljJkaaHxaiFXuPXHzIPyGnY9og0BorlaDE0= SwitchFederation https://www.dawsonera.com/shibboleth www.dawsonera.com CN=www.dawsonera.com MIIDIDCCAgigAwIBAgIJAOR5KoM5PV6KMA0GCSqGSIb3DQEBBQUAMBwxGjAYBgNV BAMTEXd3dy5kYXdzb25lcmEuY29tMB4XDTEwMDEwNDE1NDEwNloXDTEzMDEwMzE1 NDEwNlowHDEaMBgGA1UEAxMRd3d3LmRhd3NvbmVyYS5jb20wggEiMA0GCSqGSIb3 DQEBAQUAA4IBDwAwggEKAoIBAQC4TZLi/hr3MbaoVD6XcjzHi5TJTxkbIhquXnsp oPqguGETWyTYxFksp4BD3UAoJ80emZTtOKOt1RvOd9Su7MAs3+drM3Vl35QA3G37 VFB72N9d3f3JKCr03NpWQF5rr1u/RSU78TSle0zAWRuYi8p7VyBa84wUsNf1Wcek Un5POEJkpEs6voO1TQyJYncoUsApV3Tp/xqQrtbpfU2QaDe+hbOVWsOEsI3mtA2E /SvS1AYT2d/ACQcvbOnk8d5kemgQ6e9lyNNNxKC1iO8yXqmhFUcq7GdoJgznk2xx Eiv5TNzS26b+SYb9HzFm2Vu4gqxbVtNyerv9aKvYXUMgMPzlAgMBAAGjZTBjMEIG A1UdEQQ7MDmCEXd3dy5kYXdzb25lcmEuY29thiRodHRwczovL3d3dy5kYXdzb25l cmEuY29tL3NoaWJib2xldGgwHQYDVR0OBBYEFEAuW+1vUBubcuUtJ9r6uz5980Gx MA0GCSqGSIb3DQEBBQUAA4IBAQBGULJmmiIJWBFt0lCRYYnrN2zPOJt9il16O52f GE7pvSaxop+XknYmTd3G0y/4ZJl4aPTJrwSZ0BXEiMnw6w8lizvQ7vr7iiR3XNX/ pjUpLhVVo/m/c/ZNFWWYA6CKjI0qBDJVgqRryxBSPsGwlGvdGOcmax5352jkrvjU jpMy+zG8SRpk4Irp3UFftDprPDKDQI4haNiuSbrm+jt/LEhWWJSm+aRtxLps3rLI Z0K3/KOUboO98Xu9Xy18gmvfcU3+jBGcC2XYESG8LzZ6cwbpQA//bl7hT3B78p8+ MrfUvPFvRNGvTR5HWWvyLbr35BxskjLce9x6GYpCZSMUdwyt shibboleth.highwire.org CN=shibboleth.highwire.org,OU=Domain Control Validated - QuickSSL(R),OU=See www.geotrust.com/resources/cps (c)10,OU=GT25468843,O=shibboleth.highwire.org,C=US,serialNumber=sWmLOPh/LGuivaEWU7vbqM11dDslGNDS MIIDjzCCAvigAwIBAgIDE2llMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0 aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTAwNjE1MDgyMzA1WhcNMTEwNjE3MjIzMDEy WjCB9TEpMCcGA1UEBRMgc1dtTE9QaC9MR3VpdmFFV1U3dmJxTTExZERzbEdORFMx CzAJBgNVBAYTAlVTMSAwHgYDVQQKExdzaGliYm9sZXRoLmhpZ2h3aXJlLm9yZzET MBEGA1UECxMKR1QyNTQ2ODg0MzExMC8GA1UECxMoU2VlIHd3dy5nZW90cnVzdC5j b20vcmVzb3VyY2VzL2NwcyAoYykxMDEvMC0GA1UECxMmRG9tYWluIENvbnRyb2wg VmFsaWRhdGVkIC0gUXVpY2tTU0woUikxIDAeBgNVBAMTF3NoaWJib2xldGguaGln aHdpcmUub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCzSPN2X9bk5MHB f6mUZ/CvBKfgEn46C7GnyzhKuEhsmppVKCxPenesKPvSmxpWWz7/Iwqusq7WHR0Z yVz4qHAyNPmN3U9HHGUeDlU1FZF9xltfzwoYcHJrSDXkSMAoV654f7L4wesBVSjj nPzmbIJlSbKYBbDFY60+dRlSwpRJ1wIDAQABo4HSMIHPMB8GA1UdIwQYMBaAFEjm aPkr0rKV10fYIyAQTzOYkJ/UMA4GA1UdDwEB/wQEAwIE8DAdBgNVHSUEFjAUBggr BgEFBQcDAQYIKwYBBQUHAwIwIgYDVR0RBBswGYIXc2hpYmJvbGV0aC5oaWdod2ly ZS5vcmcwOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC5nZW90cnVzdC5jb20v Y3Jscy9zZWN1cmVjYS5jcmwwHQYDVR0OBBYEFKEHn+uq2uvGkQRbITzHGnUL2a7z MA0GCSqGSIb3DQEBBQUAA4GBAEPaX1aKQj5ePOM8rAGI+T43+f/53tE5ga2O8kvg a4P5WEjXn8A4vnNSHRAHuj5qye0R8f2dqnNHH2znsw1ZMDuUERXn7mqrq6dqWiSq W2YFcT09X+2GlGNmhKY9VxhZH5szboc5IPWil9GpubtQ9cfz8ukLTaAwklS2wn1Y oZQx shibboleth.highwire.org CN=shibboleth.highwire.org,OU=Domain Control Validated - QuickSSL(R),OU=See www.geotrust.com/resources/cps (c)10,OU=GT25468843,O=shibboleth.highwire.org,C=US,serialNumber=sWmLOPh/LGuivaEWU7vbqM11dDslGNDS MIIDjzCCAvigAwIBAgIDE2llMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0 aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTAwNjE1MDgyMzA1WhcNMTEwNjE3MjIzMDEy WjCB9TEpMCcGA1UEBRMgc1dtTE9QaC9MR3VpdmFFV1U3dmJxTTExZERzbEdORFMx CzAJBgNVBAYTAlVTMSAwHgYDVQQKExdzaGliYm9sZXRoLmhpZ2h3aXJlLm9yZzET MBEGA1UECxMKR1QyNTQ2ODg0MzExMC8GA1UECxMoU2VlIHd3dy5nZW90cnVzdC5j b20vcmVzb3VyY2VzL2NwcyAoYykxMDEvMC0GA1UECxMmRG9tYWluIENvbnRyb2wg VmFsaWRhdGVkIC0gUXVpY2tTU0woUikxIDAeBgNVBAMTF3NoaWJib2xldGguaGln aHdpcmUub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCzSPN2X9bk5MHB f6mUZ/CvBKfgEn46C7GnyzhKuEhsmppVKCxPenesKPvSmxpWWz7/Iwqusq7WHR0Z yVz4qHAyNPmN3U9HHGUeDlU1FZF9xltfzwoYcHJrSDXkSMAoV654f7L4wesBVSjj nPzmbIJlSbKYBbDFY60+dRlSwpRJ1wIDAQABo4HSMIHPMB8GA1UdIwQYMBaAFEjm aPkr0rKV10fYIyAQTzOYkJ/UMA4GA1UdDwEB/wQEAwIE8DAdBgNVHSUEFjAUBggr BgEFBQcDAQYIKwYBBQUHAwIwIgYDVR0RBBswGYIXc2hpYmJvbGV0aC5oaWdod2ly ZS5vcmcwOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC5nZW90cnVzdC5jb20v Y3Jscy9zZWN1cmVjYS5jcmwwHQYDVR0OBBYEFKEHn+uq2uvGkQRbITzHGnUL2a7z MA0GCSqGSIb3DQEBBQUAA4GBAEPaX1aKQj5ePOM8rAGI+T43+f/53tE5ga2O8kvg a4P5WEjXn8A4vnNSHRAHuj5qye0R8f2dqnNHH2znsw1ZMDuUERXn7mqrq6dqWiSq W2YFcT09X+2GlGNmhKY9VxhZH5szboc5IPWil9GpubtQ9cfz8ukLTaAwklS2wn1Y oZQx logilille.univ-lille1.fr CN=logilille.univ-lille1.fr,O=UNIVERSITE SCIENCES TECHNOLOGIES LILLE,L=VILLENEUVE D'ASCQ,C=FR MIIEqjCCA5KgAwIBAgIQUroqiyrcPHT2S1Nh3HxZVTANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTEwMDUwNTAwMDAwMFoXDTEzMDUwNDIzNTk1OVowfTELMAkGA1UE BhMCRlIxGjAYBgNVBAcTEVZJTExFTkVVVkUgRCdBU0NRMS8wLQYDVQQKEyZVTklW RVJTSVRFIFNDSUVOQ0VTIFRFQ0hOT0xPR0lFUyBMSUxMRTEhMB8GA1UEAxMYbG9n aWxpbGxlLnVuaXYtbGlsbGUxLmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB CgKCAQEAuNj6ir9hbA/088cZvKcZybQ1aP5E6YeYNrbmEQwYKCE07v45RUiN2JOr gdIncP+k3nUlBV6H/n1r6VRXeVWU3ZttEYBzQmxnj7fcey7UC3UVt7BDfaIFS/Nq rBFge6oATXyMWkJCtEJchLi3xEyckccNl9Jy+PMVN1qw+hD5BHbqpGP2xo0HPu2l xgXdtP0v/RVdIXo8IfdEjggCo7XrGfohjnwgcxNYP5cZ9I1D6qGYSz7C87F1i1bs 46RLaP+1zBV+pjLlA279kxGDtOEH5vMgj/0h7MS40KEHhCW3FUWOouM9BRVecPnR yUJA0Se0diA1wFXlAH4l5ccR72IYBwIDAQABo4IBazCCAWcwHwYDVR0jBBgwFoAU DL2TaAzz3qujSWsrN1dH6pDjue0wHQYDVR0OBBYEFDt4W8BQTS9x3VL2CShjeW1z JpUrMA4GA1UdDwEB/wQEAwIFoDAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsG AQUFBwMBBggrBgEFBQcDAjAYBgNVHSAEETAPMA0GCysGAQQBsjEBAgIdMDoGA1Ud HwQzMDEwL6AtoCuGKWh0dHA6Ly9jcmwudGNzLnRlcmVuYS5vcmcvVEVSRU5BU1NM Q0EuY3JsMG0GCCsGAQUFBwEBBGEwXzA1BggrBgEFBQcwAoYpaHR0cDovL2NydC50 Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcnQwJgYIKwYBBQUHMAGGGmh0dHA6 Ly9vY3NwLnRjcy50ZXJlbmEub3JnMCMGA1UdEQQcMBqCGGxvZ2lsaWxsZS51bml2 LWxpbGxlMS5mcjANBgkqhkiG9w0BAQUFAAOCAQEAIBcOVUEswG/+B8U0N/43l90Y bAlUP8/W4ukMvHt4UleLWmX/TTAkQC+hVyTyOCoaTwZWodLtxnVeazD+V+iQfZ8W 2ubIp9pnULvC6L4+Fp9OqGy4ITGpxfdmd5RJ9+ORkODAnx0l/I9t34F6xoWmXO+9 EfDZDbavrOtV6lqO3KdGCyUUGsMUfS2zsioK3NaQPqfRdJC2W8wMmMDZ2kGf2H9l e4E1eiJf3hNySIrXX35U+F5qfGrZ9uQ2TLpO2PqRxD6hxcG6bG7fNmmba5niTs7Y Ga2iOW3vdvTDxqBbKm8wTIx1THAGIzQQJfR5ZY8zkIJRS+HmtqNMzUGyA3+1rg== logilille.univ-lille1.fr CN=logilille.univ-lille1.fr,O=UNIVERSITE SCIENCES TECHNOLOGIES LILLE,L=VILLENEUVE D'ASCQ,C=FR MIIEqjCCA5KgAwIBAgIQUroqiyrcPHT2S1Nh3HxZVTANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTEwMDUwNTAwMDAwMFoXDTEzMDUwNDIzNTk1OVowfTELMAkGA1UE BhMCRlIxGjAYBgNVBAcTEVZJTExFTkVVVkUgRCdBU0NRMS8wLQYDVQQKEyZVTklW RVJTSVRFIFNDSUVOQ0VTIFRFQ0hOT0xPR0lFUyBMSUxMRTEhMB8GA1UEAxMYbG9n aWxpbGxlLnVuaXYtbGlsbGUxLmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB CgKCAQEAuNj6ir9hbA/088cZvKcZybQ1aP5E6YeYNrbmEQwYKCE07v45RUiN2JOr gdIncP+k3nUlBV6H/n1r6VRXeVWU3ZttEYBzQmxnj7fcey7UC3UVt7BDfaIFS/Nq rBFge6oATXyMWkJCtEJchLi3xEyckccNl9Jy+PMVN1qw+hD5BHbqpGP2xo0HPu2l xgXdtP0v/RVdIXo8IfdEjggCo7XrGfohjnwgcxNYP5cZ9I1D6qGYSz7C87F1i1bs 46RLaP+1zBV+pjLlA279kxGDtOEH5vMgj/0h7MS40KEHhCW3FUWOouM9BRVecPnR yUJA0Se0diA1wFXlAH4l5ccR72IYBwIDAQABo4IBazCCAWcwHwYDVR0jBBgwFoAU DL2TaAzz3qujSWsrN1dH6pDjue0wHQYDVR0OBBYEFDt4W8BQTS9x3VL2CShjeW1z JpUrMA4GA1UdDwEB/wQEAwIFoDAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsG AQUFBwMBBggrBgEFBQcDAjAYBgNVHSAEETAPMA0GCysGAQQBsjEBAgIdMDoGA1Ud HwQzMDEwL6AtoCuGKWh0dHA6Ly9jcmwudGNzLnRlcmVuYS5vcmcvVEVSRU5BU1NM Q0EuY3JsMG0GCCsGAQUFBwEBBGEwXzA1BggrBgEFBQcwAoYpaHR0cDovL2NydC50 Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcnQwJgYIKwYBBQUHMAGGGmh0dHA6 Ly9vY3NwLnRjcy50ZXJlbmEub3JnMCMGA1UdEQQcMBqCGGxvZ2lsaWxsZS51bml2 LWxpbGxlMS5mcjANBgkqhkiG9w0BAQUFAAOCAQEAIBcOVUEswG/+B8U0N/43l90Y bAlUP8/W4ukMvHt4UleLWmX/TTAkQC+hVyTyOCoaTwZWodLtxnVeazD+V+iQfZ8W 2ubIp9pnULvC6L4+Fp9OqGy4ITGpxfdmd5RJ9+ORkODAnx0l/I9t34F6xoWmXO+9 EfDZDbavrOtV6lqO3KdGCyUUGsMUfS2zsioK3NaQPqfRdJC2W8wMmMDZ2kGf2H9l e4E1eiJf3hNySIrXX35U+F5qfGrZ9uQ2TLpO2PqRxD6hxcG6bG7fNmmba5niTs7Y Ga2iOW3vdvTDxqBbKm8wTIx1THAGIzQQJfR5ZY8zkIJRS+HmtqNMzUGyA3+1rg== shibboleth.highwire.org CN=shibboleth.highwire.org,OU=Domain Control Validated - QuickSSL(R),OU=See www.geotrust.com/resources/cps (c)10,OU=GT25468843,O=shibboleth.highwire.org,C=US,serialNumber=sWmLOPh/LGuivaEWU7vbqM11dDslGNDS MIIDjzCCAvigAwIBAgIDE2llMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0 aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTAwNjE1MDgyMzA1WhcNMTEwNjE3MjIzMDEy WjCB9TEpMCcGA1UEBRMgc1dtTE9QaC9MR3VpdmFFV1U3dmJxTTExZERzbEdORFMx CzAJBgNVBAYTAlVTMSAwHgYDVQQKExdzaGliYm9sZXRoLmhpZ2h3aXJlLm9yZzET MBEGA1UECxMKR1QyNTQ2ODg0MzExMC8GA1UECxMoU2VlIHd3dy5nZW90cnVzdC5j b20vcmVzb3VyY2VzL2NwcyAoYykxMDEvMC0GA1UECxMmRG9tYWluIENvbnRyb2wg VmFsaWRhdGVkIC0gUXVpY2tTU0woUikxIDAeBgNVBAMTF3NoaWJib2xldGguaGln aHdpcmUub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCzSPN2X9bk5MHB f6mUZ/CvBKfgEn46C7GnyzhKuEhsmppVKCxPenesKPvSmxpWWz7/Iwqusq7WHR0Z yVz4qHAyNPmN3U9HHGUeDlU1FZF9xltfzwoYcHJrSDXkSMAoV654f7L4wesBVSjj nPzmbIJlSbKYBbDFY60+dRlSwpRJ1wIDAQABo4HSMIHPMB8GA1UdIwQYMBaAFEjm aPkr0rKV10fYIyAQTzOYkJ/UMA4GA1UdDwEB/wQEAwIE8DAdBgNVHSUEFjAUBggr BgEFBQcDAQYIKwYBBQUHAwIwIgYDVR0RBBswGYIXc2hpYmJvbGV0aC5oaWdod2ly ZS5vcmcwOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC5nZW90cnVzdC5jb20v Y3Jscy9zZWN1cmVjYS5jcmwwHQYDVR0OBBYEFKEHn+uq2uvGkQRbITzHGnUL2a7z MA0GCSqGSIb3DQEBBQUAA4GBAEPaX1aKQj5ePOM8rAGI+T43+f/53tE5ga2O8kvg a4P5WEjXn8A4vnNSHRAHuj5qye0R8f2dqnNHH2znsw1ZMDuUERXn7mqrq6dqWiSq W2YFcT09X+2GlGNmhKY9VxhZH5szboc5IPWil9GpubtQ9cfz8ukLTaAwklS2wn1Y oZQx shibboleth.highwire.org CN=shibboleth.highwire.org,OU=Domain Control Validated - QuickSSL(R),OU=See www.geotrust.com/resources/cps (c)10,OU=GT25468843,O=shibboleth.highwire.org,C=US,serialNumber=sWmLOPh/LGuivaEWU7vbqM11dDslGNDS MIIDjzCCAvigAwIBAgIDE2llMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0 aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTAwNjE1MDgyMzA1WhcNMTEwNjE3MjIzMDEy WjCB9TEpMCcGA1UEBRMgc1dtTE9QaC9MR3VpdmFFV1U3dmJxTTExZERzbEdORFMx CzAJBgNVBAYTAlVTMSAwHgYDVQQKExdzaGliYm9sZXRoLmhpZ2h3aXJlLm9yZzET MBEGA1UECxMKR1QyNTQ2ODg0MzExMC8GA1UECxMoU2VlIHd3dy5nZW90cnVzdC5j b20vcmVzb3VyY2VzL2NwcyAoYykxMDEvMC0GA1UECxMmRG9tYWluIENvbnRyb2wg VmFsaWRhdGVkIC0gUXVpY2tTU0woUikxIDAeBgNVBAMTF3NoaWJib2xldGguaGln aHdpcmUub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCzSPN2X9bk5MHB f6mUZ/CvBKfgEn46C7GnyzhKuEhsmppVKCxPenesKPvSmxpWWz7/Iwqusq7WHR0Z yVz4qHAyNPmN3U9HHGUeDlU1FZF9xltfzwoYcHJrSDXkSMAoV654f7L4wesBVSjj nPzmbIJlSbKYBbDFY60+dRlSwpRJ1wIDAQABo4HSMIHPMB8GA1UdIwQYMBaAFEjm aPkr0rKV10fYIyAQTzOYkJ/UMA4GA1UdDwEB/wQEAwIE8DAdBgNVHSUEFjAUBggr BgEFBQcDAQYIKwYBBQUHAwIwIgYDVR0RBBswGYIXc2hpYmJvbGV0aC5oaWdod2ly ZS5vcmcwOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC5nZW90cnVzdC5jb20v Y3Jscy9zZWN1cmVjYS5jcmwwHQYDVR0OBBYEFKEHn+uq2uvGkQRbITzHGnUL2a7z MA0GCSqGSIb3DQEBBQUAA4GBAEPaX1aKQj5ePOM8rAGI+T43+f/53tE5ga2O8kvg a4P5WEjXn8A4vnNSHRAHuj5qye0R8f2dqnNHH2znsw1ZMDuUERXn7mqrq6dqWiSq W2YFcT09X+2GlGNmhKY9VxhZH5szboc5IPWil9GpubtQ9cfz8ukLTaAwklS2wn1Y oZQx MIIFIDCCBAigAwIBAgIQRKwcchAJVesvRaoyM06LijANBgkqhkiG9w0BAQUFADCB vDELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1c2Ug YXQgaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYSAoYykxMDE2MDQGA1UEAxMt VmVyaVNpZ24gQ2xhc3MgMyBJbnRlcm5hdGlvbmFsIFNlcnZlciBDQSAtIEczMB4X DTExMDQwMTAwMDAwMFoXDTEzMDQwMzIzNTk1OVowgZsxCzAJBgNVBAYTAlVTMRYw FAYDVQQIEw1NYXNzYWNodXNldHRzMRAwDgYDVQQHFAdJcHN3aWNoMR8wHQYDVQQK FBZFQlNDTyBJbmR1c3RyaWVzLCBJbmMuMR4wHAYDVQQLFBVzaGliYm9sZXRoMS5l cG5ldC5jb20xITAfBgNVBAMUGHNoaWJib2xldGguZWJzY29ob3N0LmNvbTCBnzAN BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEApyJV+9wzY6I+kklwGc4bazyFGsxaAMbe n7lPDbCJ/5z3vjmB+gKJUSxovSvIunEc/8EwQ1XgC90Kwqcaxp+0bd3E3krXSgYk TxoXRk64ZALF6L0g7SpwikCDWjJ3Y31L83mxjAKHgemkGrjNKXptCaU2ONa6+52M KBoceXisJLsCAwEAAaOCAb8wggG7MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgWgMEEG A1UdHwQ6MDgwNqA0oDKGMGh0dHA6Ly9TVlJJbnRsLUczLWNybC52ZXJpc2lnbi5j b20vU1ZSSW50bEczLmNybDBEBgNVHSAEPTA7MDkGC2CGSAGG+EUBBxcDMCowKAYI KwYBBQUHAgEWHGh0dHBzOi8vd3d3LnZlcmlzaWduLmNvbS9ycGEwNAYDVR0lBC0w KwYJYIZIAYb4QgQBBgorBgEEAYI3CgMDBggrBgEFBQcDAQYIKwYBBQUHAwIwcgYI KwYBBQUHAQEEZjBkMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC52ZXJpc2lnbi5j b20wPAYIKwYBBQUHMAKGMGh0dHA6Ly9TVlJJbnRsLUczLWFpYS52ZXJpc2lnbi5j b20vU1ZSSW50bEczLmNlcjBuBggrBgEFBQcBDARiMGChXqBcMFowWDBWFglpbWFn ZS9naWYwITAfMAcGBSsOAwIaBBRLa7kolgYMu9BSOJsprEsHiyEFGDAmFiRodHRw Oi8vbG9nby52ZXJpc2lnbi5jb20vdnNsb2dvMS5naWYwDQYJKoZIhvcNAQEFBQAD ggEBAHBZHUV04SvJMdlt3Md5jc9X633k6wg9RULrZeai6odViYrmfmol8lh7I/Dd accxn2szmnhp0lKXaFNU33MOT/nnXGpe2dP4KD2dg7xW/ONf7/8UX5oKMcy9oxhu Iu+gIVKBbG6VnAO5ctHTE1w/wE7gw8Wvxkl+4Fysfd59fKzlhiaU9TGcTeroEUVd FKbURinepOdF2m0WyzcVLXFTLkyf9hu2Xv4A7zSC/vkWnpOT8K2+8dvh15S8n0mH fSXsKNn8tLSR10gYyD0sXGUYr03Upnjnkg69p4O//GRwf04NEV/NehxL2tvgjbO/ WFUQmFDppVjUgYkCed/yDImwZoE= MIIFIDCCBAigAwIBAgIQRKwcchAJVesvRaoyM06LijANBgkqhkiG9w0BAQUFADCB vDELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1c2Ug YXQgaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYSAoYykxMDE2MDQGA1UEAxMt VmVyaVNpZ24gQ2xhc3MgMyBJbnRlcm5hdGlvbmFsIFNlcnZlciBDQSAtIEczMB4X DTExMDQwMTAwMDAwMFoXDTEzMDQwMzIzNTk1OVowgZsxCzAJBgNVBAYTAlVTMRYw FAYDVQQIEw1NYXNzYWNodXNldHRzMRAwDgYDVQQHFAdJcHN3aWNoMR8wHQYDVQQK FBZFQlNDTyBJbmR1c3RyaWVzLCBJbmMuMR4wHAYDVQQLFBVzaGliYm9sZXRoMS5l cG5ldC5jb20xITAfBgNVBAMUGHNoaWJib2xldGguZWJzY29ob3N0LmNvbTCBnzAN BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEApyJV+9wzY6I+kklwGc4bazyFGsxaAMbe n7lPDbCJ/5z3vjmB+gKJUSxovSvIunEc/8EwQ1XgC90Kwqcaxp+0bd3E3krXSgYk TxoXRk64ZALF6L0g7SpwikCDWjJ3Y31L83mxjAKHgemkGrjNKXptCaU2ONa6+52M KBoceXisJLsCAwEAAaOCAb8wggG7MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgWgMEEG A1UdHwQ6MDgwNqA0oDKGMGh0dHA6Ly9TVlJJbnRsLUczLWNybC52ZXJpc2lnbi5j b20vU1ZSSW50bEczLmNybDBEBgNVHSAEPTA7MDkGC2CGSAGG+EUBBxcDMCowKAYI KwYBBQUHAgEWHGh0dHBzOi8vd3d3LnZlcmlzaWduLmNvbS9ycGEwNAYDVR0lBC0w KwYJYIZIAYb4QgQBBgorBgEEAYI3CgMDBggrBgEFBQcDAQYIKwYBBQUHAwIwcgYI KwYBBQUHAQEEZjBkMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC52ZXJpc2lnbi5j b20wPAYIKwYBBQUHMAKGMGh0dHA6Ly9TVlJJbnRsLUczLWFpYS52ZXJpc2lnbi5j b20vU1ZSSW50bEczLmNlcjBuBggrBgEFBQcBDARiMGChXqBcMFowWDBWFglpbWFn ZS9naWYwITAfMAcGBSsOAwIaBBRLa7kolgYMu9BSOJsprEsHiyEFGDAmFiRodHRw Oi8vbG9nby52ZXJpc2lnbi5jb20vdnNsb2dvMS5naWYwDQYJKoZIhvcNAQEFBQAD ggEBAHBZHUV04SvJMdlt3Md5jc9X633k6wg9RULrZeai6odViYrmfmol8lh7I/Dd accxn2szmnhp0lKXaFNU33MOT/nnXGpe2dP4KD2dg7xW/ONf7/8UX5oKMcy9oxhu Iu+gIVKBbG6VnAO5ctHTE1w/wE7gw8Wvxkl+4Fysfd59fKzlhiaU9TGcTeroEUVd FKbURinepOdF2m0WyzcVLXFTLkyf9hu2Xv4A7zSC/vkWnpOT8K2+8dvh15S8n0mH fSXsKNn8tLSR10gYyD0sXGUYr03Upnjnkg69p4O//GRwf04NEV/NehxL2tvgjbO/ WFUQmFDppVjUgYkCed/yDImwZoE= urn:mace:shibboleth:1.0:nameIdentifier Svetlana Freytsis SFreytsis@ebscohost.com enitab.fr MIIDHzCCAgegAwIBAgIUE3+YG/RODtnMAftUk+3SD6KCU4cwDQYJKoZIhvcNAQEF BQAwGDEWMBQGA1UEAxMNaWRwLmVuaXRhYi5mcjAeFw0xMDA3MDYxNDQzMjZaFw0z MDA3MDYxNDQzMjZaMBgxFjAUBgNVBAMTDWlkcC5lbml0YWIuZnIwggEiMA0GCSqG SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCmAH5cAW+LbvKpIc1p6okFSKDpURUGUZrz 58lRZ+/3G6Ec1sP25XXIoQYFH6M+9/SY6dxEKG3KdcdCp5bU7P2x32zuiIFSbefk whaKouyaDgqyl04ow0Dt1MsbxQ3f6RKZN1dTJe1B1VBG5xPdvCRX/E3qlslvpl/q 1zoI73C4buazgandQQbqhlvPJgQHNjD5wPevxhNRdysnywxO3Zo4lmM3vDNv6/R4 iHUDhyOz0MaJoSyeLLAOAXlOQRqaNJoMC1EDgSD2M8763XvCjTyvs4Wz5/jp3CxP fwtDJ0gq9jPFrBj8v8Ls62Ps32p1LS9mEy9Q8wvc06ePY6XQSy+nAgMBAAGjYTBf MD4GA1UdEQQ3MDWCDWlkcC5lbml0YWIuZnKGJGh0dHBzOi8vaWRwLmVuaXRhYi5m ci9pZHAvc2hpYmJvbGV0aDAdBgNVHQ4EFgQULabgfYRKdPMaeTNuFAvY4XAW8p4w DQYJKoZIhvcNAQEFBQADggEBAJUlgO7TmUkBy+szO2JL3nc4ZdfPrGzBqkcfSQPq JlY3pZjMX9AJOuRUTXfwuc6A5sTZMu56lHoncJZr/crOHXj7NCMiV99V0M9DNk3s 8iZ7Kdnziura1Btg3158+rNpgbgbtjOxq5tQbxDw41W4M+VOT76ttdJjq3QIiAvQ OCuuoL5lcVnAieikeHHCSwqgj6RRMf+EWSMO+eW8YqTlpdMvavscMOAjr3Lqhrlw wBA6a+2VH2OCL4wwK43tVucNVmqIEl7ShfcO5MmdRDwvjA03MPIzYO8a415s/2g3 iq+XHGvfQ2g2DFN4oXfSkv/A0TVmwWxiqyd8SJ77zNILG4o= urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient ENITA de Bordeaux ENITA de Bordeaux http://unknown.site.com MEUNIER Richard r-meunier@enitab.fr PRIOUX Pascal ppx@enitab.fr ens-lsh.fr MIIDQzCCAiugAwIBAgIUaXDeZKLpq89kivZfZ//X0NfeRUYwDQYJKoZIhvcNAQEF BQAwITEfMB0GA1UEAxMWc2hpYmJvbGV0aDIuZW5zLWxzaC5mcjAeFw0wOTA0MjQw ODEyMDFaFw0yOTA0MjQwODEyMDFaMCExHzAdBgNVBAMTFnNoaWJib2xldGgyLmVu cy1sc2guZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDHNMjdxzFx mWO63iu8QH+lMEXiDOjrr8PU+GRKVmThf1S5HZKruPa6l+9gV2mpeKOVDaQTgbGG sHui63HhNt4zzV55IXP9j+NHRyHkEpASXQKDeHLCTCHfs1QKmZKk3IfFcWqCCgVU byWjqv0vMf1g8/+RjDOpsb0eSU7De6rfPr/T/Rig7LqHH+O8ylB1g9pSaWW/oL5W qD+65djAlzlajlL/vmXE5UblgxnPvIpmltpQaRbUCbdJgTDchnRjE3LCFmwaSO7n FcBD4JEnYPe7BOqJv/DQcSNpAK/k5r5emnuCQAAh7wmlw+jmbiCFI78wkqBTAmrO ASkoj819hENJAgMBAAGjczBxMFAGA1UdEQRJMEeCFnNoaWJib2xldGgyLmVucy1s c2guZnKGLWh0dHBzOi8vc2hpYmJvbGV0aDIuZW5zLWxzaC5mci9pZHAvc2hpYmJv bGV0aDAdBgNVHQ4EFgQUo7Hd+mlHXBsrwd5DdoQxDGXouzwwDQYJKoZIhvcNAQEF BQADggEBABWfdOgzwxn6Goz9jU/IOk74GkGkeeVxsIKsS4OiXZyGC7ATMRk2kGPA vgF+2XUURWXsb93mjdkC7YyHDXTgBFUYsX8tv20j5MjDOBQI4l9XVoJ6cOyxfG2+ aNLgjEEAYeu7n1bZCU+9mMeeqHnB8f4ovM4r1PdkBT2ttmUX7dU+coPLa/JetOTO AVXxYRZY4ty/dx2KdOetIcmD8UypcRVAmkry27l6ybWBEA8vqwPn78jFJeS/s92m ALjg3wnfawAlwRtGLxUhf9n7igtjhjrKRL9WVVnMPg08GpB6IDRzNedWjIhE8gmo beyt/O7UlYCwegLabizFFtOY7ztDocU= urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient ens-lsh.fr MIIDQzCCAiugAwIBAgIUaXDeZKLpq89kivZfZ//X0NfeRUYwDQYJKoZIhvcNAQEF BQAwITEfMB0GA1UEAxMWc2hpYmJvbGV0aDIuZW5zLWxzaC5mcjAeFw0wOTA0MjQw ODEyMDFaFw0yOTA0MjQwODEyMDFaMCExHzAdBgNVBAMTFnNoaWJib2xldGgyLmVu cy1sc2guZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDHNMjdxzFx mWO63iu8QH+lMEXiDOjrr8PU+GRKVmThf1S5HZKruPa6l+9gV2mpeKOVDaQTgbGG sHui63HhNt4zzV55IXP9j+NHRyHkEpASXQKDeHLCTCHfs1QKmZKk3IfFcWqCCgVU byWjqv0vMf1g8/+RjDOpsb0eSU7De6rfPr/T/Rig7LqHH+O8ylB1g9pSaWW/oL5W qD+65djAlzlajlL/vmXE5UblgxnPvIpmltpQaRbUCbdJgTDchnRjE3LCFmwaSO7n FcBD4JEnYPe7BOqJv/DQcSNpAK/k5r5emnuCQAAh7wmlw+jmbiCFI78wkqBTAmrO ASkoj819hENJAgMBAAGjczBxMFAGA1UdEQRJMEeCFnNoaWJib2xldGgyLmVucy1s c2guZnKGLWh0dHBzOi8vc2hpYmJvbGV0aDIuZW5zLWxzaC5mci9pZHAvc2hpYmJv bGV0aDAdBgNVHQ4EFgQUo7Hd+mlHXBsrwd5DdoQxDGXouzwwDQYJKoZIhvcNAQEF BQADggEBABWfdOgzwxn6Goz9jU/IOk74GkGkeeVxsIKsS4OiXZyGC7ATMRk2kGPA vgF+2XUURWXsb93mjdkC7YyHDXTgBFUYsX8tv20j5MjDOBQI4l9XVoJ6cOyxfG2+ aNLgjEEAYeu7n1bZCU+9mMeeqHnB8f4ovM4r1PdkBT2ttmUX7dU+coPLa/JetOTO AVXxYRZY4ty/dx2KdOetIcmD8UypcRVAmkry27l6ybWBEA8vqwPn78jFJeS/s92m ALjg3wnfawAlwRtGLxUhf9n7igtjhjrKRL9WVVnMPg08GpB6IDRzNedWjIhE8gmo beyt/O7UlYCwegLabizFFtOY7ztDocU= urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient ENS Lettres et Sciences humaines ENS Lettres et Sciences humaines http://unknown.site.com Christophe Girard Christophe.Girard@ens-lsh.fr Christelle Chaput Christelle.Chaput@ens-lsh.fr MIIEpTCCA42gAwIBAgIRAIh0m4urTRs+4bCQBfNuMt8wDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0xMDAzMzEwMDAwMDBaFw0xMzAzMzAyMzU5NTlaMGYxCzAJBgNV BAYTAkZSMQ0wCwYDVQQHEwRMWU9OMSowKAYDVQQKDCFFY29sZSBOb3JtYWxlIFN1 cMOpcmlldXJlIGRlIEx5b24xHDAaBgNVBAMTE3NpZHByb3h5LmVucy1sc2guZnIw ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCmyXHkG7gztvQklgoeUmmB SAWCZpk4xOI6V/7cBbOW5D3OaRCWwtbjP3ui5bFef9zYn1D2iHS3MOSRHdGnhybC NtODILZVu5IitA4WtFmByg1WcwPsnrPTvph1SzwAlS0ueYWoLktoU+IYeDh0iRLW pu58RtvPKYt2N93yw0nInMUAiYO2RnYvhdLGmjs1JWjSYEPEiH/6mZgL48omCzTK miq+qqh8Esqm0QtGCvcu9iMPKJjvz4VRUUFfC+8FtCBUw+tiXtnNJGW3mcEaPkJP OmCKQcZohJPVM/rrhyp+lz9HqQlVf89A26dTskeZFBWG2yLUDzqVxSr4sHs68qET AgMBAAGjggF8MIIBeDAfBgNVHSMEGDAWgBQMvZNoDPPeq6NJays3V0fqkOO57TAd BgNVHQ4EFgQUBxHkl8gXSDfZopPsCSvKuhzHHxAwDgYDVR0PAQH/BAQDAgWgMAwG A1UdEwEB/wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBgGA1Ud IAQRMA8wDQYLKwYBBAGyMQECAh0wOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2Ny bC50Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcmwwbQYIKwYBBQUHAQEEYTBf MDUGCCsGAQUFBzAChilodHRwOi8vY3J0LnRjcy50ZXJlbmEub3JnL1RFUkVOQVNT TENBLmNydDAmBggrBgEFBQcwAYYaaHR0cDovL29jc3AudGNzLnRlcmVuYS5vcmcw NAYDVR0RBC0wK4ITc2lkcHJveHkuZW5zLWxzaC5mcoIUc2lkcHJveHkyLmVucy1s c2guZnIwDQYJKoZIhvcNAQEFBQADggEBAHFbC1o9eDZzEL8215pL4WA2fY0XVVwS diHXKVBdg9qthA+b4Sx9BBANfGqRRhqtMP8sNtrRuVz/B1YqbO2vbxPRUnZVDBeK TauO0gZr0tPQwqCyI/aouh+mGgrom/dWVDD0H9DvoQc9ZMdvFn9vS6jixaWuvdOE ahXB1DOIBlpJ66RTX5yX4S5iE99NmaFKJw6TCf+p62S0J7Ju7M6gHkXD7eK6rvkL 4pXbLtPydycVfUmVXFKVB435uUQ6LTuh/2bOFGAOU1nzlkLzUtWPx4ZDsTBuKa9V 4+mylmpXFCp5Mhy650CfmcW5ahKlS0p0NNkDis0eWJlBy7zUQfzHTD8= MIIEpTCCA42gAwIBAgIRAIh0m4urTRs+4bCQBfNuMt8wDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0xMDAzMzEwMDAwMDBaFw0xMzAzMzAyMzU5NTlaMGYxCzAJBgNV BAYTAkZSMQ0wCwYDVQQHEwRMWU9OMSowKAYDVQQKDCFFY29sZSBOb3JtYWxlIFN1 cMOpcmlldXJlIGRlIEx5b24xHDAaBgNVBAMTE3NpZHByb3h5LmVucy1sc2guZnIw ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCmyXHkG7gztvQklgoeUmmB SAWCZpk4xOI6V/7cBbOW5D3OaRCWwtbjP3ui5bFef9zYn1D2iHS3MOSRHdGnhybC NtODILZVu5IitA4WtFmByg1WcwPsnrPTvph1SzwAlS0ueYWoLktoU+IYeDh0iRLW pu58RtvPKYt2N93yw0nInMUAiYO2RnYvhdLGmjs1JWjSYEPEiH/6mZgL48omCzTK miq+qqh8Esqm0QtGCvcu9iMPKJjvz4VRUUFfC+8FtCBUw+tiXtnNJGW3mcEaPkJP OmCKQcZohJPVM/rrhyp+lz9HqQlVf89A26dTskeZFBWG2yLUDzqVxSr4sHs68qET AgMBAAGjggF8MIIBeDAfBgNVHSMEGDAWgBQMvZNoDPPeq6NJays3V0fqkOO57TAd BgNVHQ4EFgQUBxHkl8gXSDfZopPsCSvKuhzHHxAwDgYDVR0PAQH/BAQDAgWgMAwG A1UdEwEB/wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBgGA1Ud IAQRMA8wDQYLKwYBBAGyMQECAh0wOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2Ny bC50Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcmwwbQYIKwYBBQUHAQEEYTBf MDUGCCsGAQUFBzAChilodHRwOi8vY3J0LnRjcy50ZXJlbmEub3JnL1RFUkVOQVNT TENBLmNydDAmBggrBgEFBQcwAYYaaHR0cDovL29jc3AudGNzLnRlcmVuYS5vcmcw NAYDVR0RBC0wK4ITc2lkcHJveHkuZW5zLWxzaC5mcoIUc2lkcHJveHkyLmVucy1s c2guZnIwDQYJKoZIhvcNAQEFBQADggEBAHFbC1o9eDZzEL8215pL4WA2fY0XVVwS diHXKVBdg9qthA+b4Sx9BBANfGqRRhqtMP8sNtrRuVz/B1YqbO2vbxPRUnZVDBeK TauO0gZr0tPQwqCyI/aouh+mGgrom/dWVDD0H9DvoQc9ZMdvFn9vS6jixaWuvdOE ahXB1DOIBlpJ66RTX5yX4S5iE99NmaFKJw6TCf+p62S0J7Ju7M6gHkXD7eK6rvkL 4pXbLtPydycVfUmVXFKVB435uUQ6LTuh/2bOFGAOU1nzlkLzUtWPx4ZDsTBuKa9V 4+mylmpXFCp5Mhy650CfmcW5ahKlS0p0NNkDis0eWJlBy7zUQfzHTD8= MIIEpDCCA4ygAwIBAgIQaBzchncrZMXX2gGMkWrClTANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTEwMDMxMTAwMDAwMFoXDTEzMDMxMDIzNTk1OVowZjELMAkGA1UE BhMCRlIxDTALBgNVBAcTBExZT04xKjAoBgNVBAoMIUVjb2xlIE5vcm1hbGUgU3Vw w6lyaWV1cmUgZGUgTHlvbjEcMBoGA1UEAxMTc2lkcHJveHkuZW5zLWxzaC5mcjCC ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALLE6Iw8pMZmML1dxXnYhhaR N6KgK65J9hZepIrgNizSFm3Pu3oPerfyVQtCqCEuPg3KtpQh58FqaFxrrRbIaCc1 8Fjw7w3/AlsvQi126mJGgqJZmWUZo8g8DpX6jwJ7KjG4BkKWe6xYVqZBHbM7qi5B 86y02zijdyYo0h/yiLY3RGoctMjy5lZE682r1TCLf1YfWXxdnoa0oy0i0RG8Gd1t u1LH8WJarbTHtTIxPPj8k3cnCZ7JqhJDTHtmX60GpCGy9N1gB+6uzsvxZjW+0F4c Pj6NqaamxuTyB3KBqzFz2Wy6H8GgMhN06DE6XouI/D9I4J7wwYDt/8dXEaWLEH8C AwEAAaOCAXwwggF4MB8GA1UdIwQYMBaAFAy9k2gM896ro0lrKzdXR+qQ47ntMB0G A1UdDgQWBBQjMtxDOJ/jwel/3/l8itopR5reXDAOBgNVHQ8BAf8EBAMCBaAwDAYD VR0TAQH/BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwGAYDVR0g BBEwDzANBgsrBgEEAbIxAQICHTA6BgNVHR8EMzAxMC+gLaArhilodHRwOi8vY3Js LnRjcy50ZXJlbmEub3JnL1RFUkVOQVNTTENBLmNybDBtBggrBgEFBQcBAQRhMF8w NQYIKwYBBQUHMAKGKWh0dHA6Ly9jcnQudGNzLnRlcmVuYS5vcmcvVEVSRU5BU1NM Q0EuY3J0MCYGCCsGAQUFBzABhhpodHRwOi8vb2NzcC50Y3MudGVyZW5hLm9yZzA0 BgNVHREELTArghNzaWRwcm94eS5lbnMtbHNoLmZyghRzaWRwcm94eTIuZW5zLWxz aC5mcjANBgkqhkiG9w0BAQUFAAOCAQEARPhJSvW/kTXHjQ/tL/nZBeSHeTM0oBvq UJpeipJDi3QXGT6wNw7OrChaAvTCboq+rslNcF6HNEWKgNUbtY8bJr+wYtMmOXjZ sj1HIfX0fL5GCyPGkDpMpIswnbc9m0yoc+0hzrwxKVAkXWMf+8OCPMdqmnRI+EXo PPCuG6O7MVkCfG1EkqpoS8qOwvxtO3rOcl77BO+9/1I0vXtkh2mDCnPbqSwtF3WD pUnFNS/MY0/zsWqAlwZnGS8fqp0vgZiWDipi0vFo7Cy7HSfSGrPl5WVnnZojsmKR nuqzWko80daoKDaf5N5cxPGobFIM385hz7mUQzZOyELlPZ1uBXEuwQ== urn:mace:shibboleth:1.0:nameIdentifier Christophe GIRARD christophe.girard@ens-lyon.fr Kevin REVERCHON kevin.reverchon@ens-lyon.fr ens-lyon.fr MIIErTCCA5WgAwIBAgIQAc1kf8uRsFb9YRhj0YQqJDANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTEwMDMzMTAwMDAwMFoXDTEzMDMzMDIzNTk1OVowaTELMAkGA1UE BhMCRlIxDTALBgNVBAcTBExZT04xKjAoBgNVBAoMIUVjb2xlIE5vcm1hbGUgU3Vw w6lyaWV1cmUgZGUgTHlvbjEfMB0GA1UEAxMWc2hpYmJvbGV0aC5lbnMtbHlvbi5m cjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKenkDAt0aFrCHDigqfe 9zDCD+c5VFDvhbYPy0c5jKhLutpo49R3uevQGTC48JIqfDr/IVLSAM+BM0KuEovL UqLZZuW45RzlR+YGPW+R3fEpE9MmGZz7rltu2vXfxI1AZzqvhhPXCdi2RlEjEwxJ WymfgA8mrlyUp1VQtfgehz+LgRzleFaLcr2ww+WCc7dMxvDU5UfF+SHytfhD/BO6 3FyT/3e3vnE/AKIMe+y1QMLUo0Cue5O4JU1IJCKd4PDpBTu4b6m/l5HC/70Hn2nq jrTWYxsveAMWPzak5SKTo/G7fbxAv+WRYevbYlG+WapfX5KZKyciUyN9i8VExa7f 9pMCAwEAAaOCAYIwggF+MB8GA1UdIwQYMBaAFAy9k2gM896ro0lrKzdXR+qQ47nt MB0GA1UdDgQWBBRTG1iE/xCeq/67td3H7iphPqf+9TAOBgNVHQ8BAf8EBAMCBaAw DAYDVR0TAQH/BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwGAYD VR0gBBEwDzANBgsrBgEEAbIxAQICHTA6BgNVHR8EMzAxMC+gLaArhilodHRwOi8v Y3JsLnRjcy50ZXJlbmEub3JnL1RFUkVOQVNTTENBLmNybDBtBggrBgEFBQcBAQRh MF8wNQYIKwYBBQUHMAKGKWh0dHA6Ly9jcnQudGNzLnRlcmVuYS5vcmcvVEVSRU5B U1NMQ0EuY3J0MCYGCCsGAQUFBzABhhpodHRwOi8vb2NzcC50Y3MudGVyZW5hLm9y ZzA6BgNVHREEMzAxghZzaGliYm9sZXRoLmVucy1seW9uLmZyghdzaGliYm9sZXRo Mi5lbnMtbHlvbi5mcjANBgkqhkiG9w0BAQUFAAOCAQEAEtXgiiMCGQYfpPMbvytv o+cBxF7dHcT61DzS3/imZullXG+G8mZnqe1TNmsZBtHGz+e47bGom36aUKr37wb9 kg7IMpveQaCyPaLPAihxCVGbdhe9n5tWeLO0dele784H1aLMiuGaKyBdOe9rXIRe Mgk6C5960tO3GzQa8tW5g5XaWrej2rTTEqRXozsF5yHlYuCobK4XtOdFV9M3Kesg 0dAqsxZPP+iVUAFIjRmeJ6ZToAUO+RqrMBtwPYHz94DO8mcQwpBnPKdtvaQ0G8HQ rt9C3/DEh4crgo2UidNYNF9GUEwE0pqVNFIDAGfDBJGpX7aHN28jcPyRufZUiszz NA== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient ens-lyon.fr MIIErTCCA5WgAwIBAgIQAc1kf8uRsFb9YRhj0YQqJDANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTEwMDMzMTAwMDAwMFoXDTEzMDMzMDIzNTk1OVowaTELMAkGA1UE BhMCRlIxDTALBgNVBAcTBExZT04xKjAoBgNVBAoMIUVjb2xlIE5vcm1hbGUgU3Vw w6lyaWV1cmUgZGUgTHlvbjEfMB0GA1UEAxMWc2hpYmJvbGV0aC5lbnMtbHlvbi5m cjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKenkDAt0aFrCHDigqfe 9zDCD+c5VFDvhbYPy0c5jKhLutpo49R3uevQGTC48JIqfDr/IVLSAM+BM0KuEovL UqLZZuW45RzlR+YGPW+R3fEpE9MmGZz7rltu2vXfxI1AZzqvhhPXCdi2RlEjEwxJ WymfgA8mrlyUp1VQtfgehz+LgRzleFaLcr2ww+WCc7dMxvDU5UfF+SHytfhD/BO6 3FyT/3e3vnE/AKIMe+y1QMLUo0Cue5O4JU1IJCKd4PDpBTu4b6m/l5HC/70Hn2nq jrTWYxsveAMWPzak5SKTo/G7fbxAv+WRYevbYlG+WapfX5KZKyciUyN9i8VExa7f 9pMCAwEAAaOCAYIwggF+MB8GA1UdIwQYMBaAFAy9k2gM896ro0lrKzdXR+qQ47nt MB0GA1UdDgQWBBRTG1iE/xCeq/67td3H7iphPqf+9TAOBgNVHQ8BAf8EBAMCBaAw DAYDVR0TAQH/BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwGAYD VR0gBBEwDzANBgsrBgEEAbIxAQICHTA6BgNVHR8EMzAxMC+gLaArhilodHRwOi8v Y3JsLnRjcy50ZXJlbmEub3JnL1RFUkVOQVNTTENBLmNybDBtBggrBgEFBQcBAQRh MF8wNQYIKwYBBQUHMAKGKWh0dHA6Ly9jcnQudGNzLnRlcmVuYS5vcmcvVEVSRU5B U1NMQ0EuY3J0MCYGCCsGAQUFBzABhhpodHRwOi8vb2NzcC50Y3MudGVyZW5hLm9y ZzA6BgNVHREEMzAxghZzaGliYm9sZXRoLmVucy1seW9uLmZyghdzaGliYm9sZXRo Mi5lbnMtbHlvbi5mcjANBgkqhkiG9w0BAQUFAAOCAQEAEtXgiiMCGQYfpPMbvytv o+cBxF7dHcT61DzS3/imZullXG+G8mZnqe1TNmsZBtHGz+e47bGom36aUKr37wb9 kg7IMpveQaCyPaLPAihxCVGbdhe9n5tWeLO0dele784H1aLMiuGaKyBdOe9rXIRe Mgk6C5960tO3GzQa8tW5g5XaWrej2rTTEqRXozsF5yHlYuCobK4XtOdFV9M3Kesg 0dAqsxZPP+iVUAFIjRmeJ6ZToAUO+RqrMBtwPYHz94DO8mcQwpBnPKdtvaQ0G8HQ rt9C3/DEh4crgo2UidNYNF9GUEwE0pqVNFIDAGfDBJGpX7aHN28jcPyRufZUiszz NA== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient ENS de Lyon ENS de Lyon http://unknown.site.com Kevin Reverchon kevin.reverchon@ens-lyon.fr Christophe Girard christophe.girard@ens-lyon.fr MIIEpzCCA4+gAwIBAgIQHpHUN1NQ/hd/XoGTdvqpODANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTEwMTEwODAwMDAwMFoXDTEzMTEwNzIzNTk1OVowZzELMAkGA1UE BhMCRlIxDTALBgNVBAcTBExZT04xKjAoBgNVBAoMIUVjb2xlIE5vcm1hbGUgU3Vw w6lyaWV1cmUgZGUgTHlvbjEdMBsGA1UEAxMUc2lkcHJveHkuZW5zLWx5b24uZnIw ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzgnki1bTPsxMqqy1BYQBW Iq8lMdUv3p0Zy++3EAifARI5U8ejkSWDsJ1MnUFVKrVZ6V/NKqpFOcA3P3s40dLz WFXHzwlg8kuLFeP2S8ltfk6M/3IV54fqUHdYeiCQb/yEYFOwnEJdEE4B4cWF6po5 iCRgDl3Vpx+BfvcmHR5S4r9KwIRdRM1p2q3daBRybz562De52mwEbyxE2sVIlzGT lWJZ163rYPbLPC7fAPwdcNCJ0xTxHccw8Y1dF4LC2YcSWcPIihW1yVdgLm0gfSpy VbAu3oyx+fNPnl21CLvZOYi95UxXmtmsNHzZS1gSzcwQW4ihK56FQBX0zbL8wtNB AgMBAAGjggF+MIIBejAfBgNVHSMEGDAWgBQMvZNoDPPeq6NJays3V0fqkOO57TAd BgNVHQ4EFgQUQr6x67s0WMFUoR85f/GqzADqQZIwDgYDVR0PAQH/BAQDAgWgMAwG A1UdEwEB/wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBgGA1Ud IAQRMA8wDQYLKwYBBAGyMQECAh0wOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2Ny bC50Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcmwwbQYIKwYBBQUHAQEEYTBf MDUGCCsGAQUFBzAChilodHRwOi8vY3J0LnRjcy50ZXJlbmEub3JnL1RFUkVOQVNT TENBLmNydDAmBggrBgEFBQcwAYYaaHR0cDovL29jc3AudGNzLnRlcmVuYS5vcmcw NgYDVR0RBC8wLYIUc2lkcHJveHkuZW5zLWx5b24uZnKCFXNpZHByb3h5Mi5lbnMt bHlvbi5mcjANBgkqhkiG9w0BAQUFAAOCAQEARadZ2LcmjcM/idHrs8UDNBf5Rkrk OUibf1hI3KI6vBu3iJfqnY7wfrNiMJVNpLfoB1uZF3NC8WZR2gveq28VME8ctAOo NiEDXrL/UIxJObonIQVZ91zmCy0N/tkcU2zpXLC1f5GmAXwE6Kta5I+dHohLptlI o5ZMxegkmgeGrAfNimulVxaOC0QhEUx2r8P9QVJ/oYHKnyCQvQyu89K0AMg+2z1v IM4x6nQxkVvWaOHIUZnuiLp2Z/TD7JCK0mauqf9gnsL2T0bV9ZWT8aUtf/vBUgJo zGYU6B+bDpaWq6FAyo2R+NXhhslzSxsUoTMvcYq1Qtvb083Xj8TIbacuxw== MIIEpzCCA4+gAwIBAgIQHpHUN1NQ/hd/XoGTdvqpODANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTEwMTEwODAwMDAwMFoXDTEzMTEwNzIzNTk1OVowZzELMAkGA1UE BhMCRlIxDTALBgNVBAcTBExZT04xKjAoBgNVBAoMIUVjb2xlIE5vcm1hbGUgU3Vw w6lyaWV1cmUgZGUgTHlvbjEdMBsGA1UEAxMUc2lkcHJveHkuZW5zLWx5b24uZnIw ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzgnki1bTPsxMqqy1BYQBW Iq8lMdUv3p0Zy++3EAifARI5U8ejkSWDsJ1MnUFVKrVZ6V/NKqpFOcA3P3s40dLz WFXHzwlg8kuLFeP2S8ltfk6M/3IV54fqUHdYeiCQb/yEYFOwnEJdEE4B4cWF6po5 iCRgDl3Vpx+BfvcmHR5S4r9KwIRdRM1p2q3daBRybz562De52mwEbyxE2sVIlzGT lWJZ163rYPbLPC7fAPwdcNCJ0xTxHccw8Y1dF4LC2YcSWcPIihW1yVdgLm0gfSpy VbAu3oyx+fNPnl21CLvZOYi95UxXmtmsNHzZS1gSzcwQW4ihK56FQBX0zbL8wtNB AgMBAAGjggF+MIIBejAfBgNVHSMEGDAWgBQMvZNoDPPeq6NJays3V0fqkOO57TAd BgNVHQ4EFgQUQr6x67s0WMFUoR85f/GqzADqQZIwDgYDVR0PAQH/BAQDAgWgMAwG A1UdEwEB/wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBgGA1Ud IAQRMA8wDQYLKwYBBAGyMQECAh0wOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2Ny bC50Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcmwwbQYIKwYBBQUHAQEEYTBf MDUGCCsGAQUFBzAChilodHRwOi8vY3J0LnRjcy50ZXJlbmEub3JnL1RFUkVOQVNT TENBLmNydDAmBggrBgEFBQcwAYYaaHR0cDovL29jc3AudGNzLnRlcmVuYS5vcmcw NgYDVR0RBC8wLYIUc2lkcHJveHkuZW5zLWx5b24uZnKCFXNpZHByb3h5Mi5lbnMt bHlvbi5mcjANBgkqhkiG9w0BAQUFAAOCAQEARadZ2LcmjcM/idHrs8UDNBf5Rkrk OUibf1hI3KI6vBu3iJfqnY7wfrNiMJVNpLfoB1uZF3NC8WZR2gveq28VME8ctAOo NiEDXrL/UIxJObonIQVZ91zmCy0N/tkcU2zpXLC1f5GmAXwE6Kta5I+dHohLptlI o5ZMxegkmgeGrAfNimulVxaOC0QhEUx2r8P9QVJ/oYHKnyCQvQyu89K0AMg+2z1v IM4x6nQxkVvWaOHIUZnuiLp2Z/TD7JCK0mauqf9gnsL2T0bV9ZWT8aUtf/vBUgJo zGYU6B+bDpaWq6FAyo2R+NXhhslzSxsUoTMvcYq1Qtvb083Xj8TIbacuxw== urn:mace:shibboleth:1.0:nameIdentifier REVERCHON KEVIN kevin.reverchon@ens-lyon.fr ensea.fr MIIEYTCCA0mgAwIBAgIQalAscHUcXrY3ffJVCPgZpTANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTExMDMxMTAwMDAwMFoXDTE0MDMxMDIzNTk1OVowOjELMAkGA1UE BhMCRlIxDjAMBgNVBAoTBUVOU0VBMRswGQYDVQQDExJpZGVudGl0ZXMuZW5zZWEu ZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDgI/UNHWN0oJKTtMoc yNPlfTYAjY0/+humnmGLIl5z2/0PVJWpYHgjbkEUOQLGYCbcbMsxH2zBg9kccNzo Ci/B4ZdIS2e4siRFiktPe6irllE7NBz2WdvuKHFkThKsQDORp0+v/Qn30c418J7L 8iDMBDkVwf7cw2s55gyqRVWvq95geOz3szYgCrTbNCWTmpMI7zRBufcFl4uPrxr/ ym7FWzt7z7ZIVT8T4CdY9WUaP1hBOMMP8oV9Sy6WFzXEYEE2pXTgh6aFxV6GGi5g gQyWCjY6DFCWCJeT7QIaTEGYPZdQuzhf/DZnPV8t4YZw2eb5oh0WS0at9XAFo/T6 hky/AgMBAAGjggFlMIIBYTAfBgNVHSMEGDAWgBQMvZNoDPPeq6NJays3V0fqkOO5 7TAdBgNVHQ4EFgQU7iaqJ3jvIlSmCxg4V6bVZuQQYR8wDgYDVR0PAQH/BAQDAgWg MAwGA1UdEwEB/wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBgG A1UdIAQRMA8wDQYLKwYBBAGyMQECAh0wOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDov L2NybC50Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcmwwbQYIKwYBBQUHAQEE YTBfMDUGCCsGAQUFBzAChilodHRwOi8vY3J0LnRjcy50ZXJlbmEub3JnL1RFUkVO QVNTTENBLmNydDAmBggrBgEFBQcwAYYaaHR0cDovL29jc3AudGNzLnRlcmVuYS5v cmcwHQYDVR0RBBYwFIISaWRlbnRpdGVzLmVuc2VhLmZyMA0GCSqGSIb3DQEBBQUA A4IBAQAT1+a6zeCOHqQfM/dDfGjDSLz2Rio2OCVC78gmN+IKK0vWPEAtfELOeGsT 3QlQJunw2fxWB0Gk6sWgm3zTFjuGTqT33jFJGhdCwsPcmxqb9s8hkz7a2ebi9c0/ 0TBrnNx4rQ/u9fBgAF+9blGt4DwXX760DqEG9kTDYmyayW55U/ictpgdR53sbVCj p3It7uz6kQR7jItMxfAMblu0JUeaaYxaUtmktgorGUzvKl7ZjOGyibX09/kRICSq GfFOHcc9XPh7LvUZpRMFF4VgqfJG7q6rXl14WKYPQd3pVtNAyz5QVyNB5dIRrbw3 iC06H1hDSiBCF+eohVut56vMP1La urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient ensea.fr MIIEYTCCA0mgAwIBAgIQalAscHUcXrY3ffJVCPgZpTANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTExMDMxMTAwMDAwMFoXDTE0MDMxMDIzNTk1OVowOjELMAkGA1UE BhMCRlIxDjAMBgNVBAoTBUVOU0VBMRswGQYDVQQDExJpZGVudGl0ZXMuZW5zZWEu ZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDgI/UNHWN0oJKTtMoc yNPlfTYAjY0/+humnmGLIl5z2/0PVJWpYHgjbkEUOQLGYCbcbMsxH2zBg9kccNzo Ci/B4ZdIS2e4siRFiktPe6irllE7NBz2WdvuKHFkThKsQDORp0+v/Qn30c418J7L 8iDMBDkVwf7cw2s55gyqRVWvq95geOz3szYgCrTbNCWTmpMI7zRBufcFl4uPrxr/ ym7FWzt7z7ZIVT8T4CdY9WUaP1hBOMMP8oV9Sy6WFzXEYEE2pXTgh6aFxV6GGi5g gQyWCjY6DFCWCJeT7QIaTEGYPZdQuzhf/DZnPV8t4YZw2eb5oh0WS0at9XAFo/T6 hky/AgMBAAGjggFlMIIBYTAfBgNVHSMEGDAWgBQMvZNoDPPeq6NJays3V0fqkOO5 7TAdBgNVHQ4EFgQU7iaqJ3jvIlSmCxg4V6bVZuQQYR8wDgYDVR0PAQH/BAQDAgWg MAwGA1UdEwEB/wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBgG A1UdIAQRMA8wDQYLKwYBBAGyMQECAh0wOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDov L2NybC50Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcmwwbQYIKwYBBQUHAQEE YTBfMDUGCCsGAQUFBzAChilodHRwOi8vY3J0LnRjcy50ZXJlbmEub3JnL1RFUkVO QVNTTENBLmNydDAmBggrBgEFBQcwAYYaaHR0cDovL29jc3AudGNzLnRlcmVuYS5v cmcwHQYDVR0RBBYwFIISaWRlbnRpdGVzLmVuc2VhLmZyMA0GCSqGSIb3DQEBBQUA A4IBAQAT1+a6zeCOHqQfM/dDfGjDSLz2Rio2OCVC78gmN+IKK0vWPEAtfELOeGsT 3QlQJunw2fxWB0Gk6sWgm3zTFjuGTqT33jFJGhdCwsPcmxqb9s8hkz7a2ebi9c0/ 0TBrnNx4rQ/u9fBgAF+9blGt4DwXX760DqEG9kTDYmyayW55U/ictpgdR53sbVCj p3It7uz6kQR7jItMxfAMblu0JUeaaYxaUtmktgorGUzvKl7ZjOGyibX09/kRICSq GfFOHcc9XPh7LvUZpRMFF4VgqfJG7q6rXl14WKYPQd3pVtNAyz5QVyNB5dIRrbw3 iC06H1hDSiBCF+eohVut56vMP1La urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient ENSEA ENSEA http://unknown.site.com Jean-Paul Bachmann federation@ensea.fr Jérémie Jacquin federation@ensea.fr ensicaen.fr MIIDQzCCAiugAwIBAgIUWJlRFhwGwMk4lj3M8MGZi+WUiKQwDQYJKoZIhvcNAQEF BQAwITEfMB0GA1UEAxMWc2hpYmJvbGV0aC5lbnNpY2Flbi5mcjAeFw0xMDAzMTUw OTI0MzlaFw0zMDAzMTUwOTI0MzlaMCExHzAdBgNVBAMTFnNoaWJib2xldGguZW5z aWNhZW4uZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCVj+NT2Lhd BHoJ7m+6gaI8xBsdkm7dNyFtVJyfsMU9Dvc/qlhjNR+2YSVbiDdmDvqeMgbrFjcC lMo5ife47oQMLjBUHhvj2xliSt+evvqEUnRRnJU10PIf4Bchub/v82hS5JbPxL8b wLyFag5llUg6hbi93lvhp+bgYk8ZAz5hmJ/VrS3yAQ4sCsogGB1nMuQ00JGZxxxE 4PfQnVL10DDP5/RpHDLENJu4vZKY/7C+S9CEN4RkqxA+yNyP3JS0KRbP9+7ATYiR q+QhF2V4eQZ4KnjiN62O+lJ6Gs3vVBAPqdb2lEFfnaSBsZ19HyZFY6/GjNIcyv3h qf5za6LbS4xBAgMBAAGjczBxMFAGA1UdEQRJMEeCFnNoaWJib2xldGguZW5zaWNh ZW4uZnKGLWh0dHBzOi8vc2hpYmJvbGV0aC5lbnNpY2Flbi5mci9pZHAvc2hpYmJv bGV0aDAdBgNVHQ4EFgQUI3L7p8efYitE5TlY75ZGW7uC4eAwDQYJKoZIhvcNAQEF BQADggEBAIC8Dw+q0N19K6FB0xTbEGYEvLbIXSzPei5QAx8aJVm6fowYs1N582Le UXfwhI2N0hkIUQiPVnZ263lM2J17OO7neACCFtyHPkG0Qa8gMcu+0BuZZ+YU9zyc t7msRhc+8ZFE//98p8mhQ182k1Qwif4Vzn8Sq+ygBIyZyim4zKT2TsS09EuXdzFw jdfJTflIFXumBysheVxnDGXqfaIcl9s4s1PC45Ekvfn0KjA8mHU6OOgR6822HvUo mNhb2f0nJQSmsahxi2OvvzkuegbrCzMH/55Wb51w8oHcXF/2IUHgKdIXEXa7HtMT fM3qXap8JFtk63lFp9nrjdR9nwduKnM= urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient ENSICAEN ENSICAEN http://unknown.site.com LEPLANQUAIS ARNAUD arnaud.leplanquais@ensicaen.fr LEVEE FREDDY freddy.levee@ensicaen.fr teleformation.envam.org CN=teleformation.envam.org,O=ENVAM\ ,C=FR MIICkTCCAfqgAwIBAgIBADANBgkqhkiG9w0BAQUFADBAMQswCQYDVQQGEwJGUjEP MA0GA1UEChMGRU5WQU0gMSAwHgYDVQQDExd0ZWxlZm9ybWF0aW9uLmVudmFtLm9y ZzAeFw0wODA1MjExMDA4MDBaFw0yODA1MTYxMDA4MDBaMEAxCzAJBgNVBAYTAkZS MQ8wDQYDVQQKEwZFTlZBTSAxIDAeBgNVBAMTF3RlbGVmb3JtYXRpb24uZW52YW0u b3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDA22oxc4HLrdagy/gtCPzp t1t3ElFNqF0KcYY0kkxdRQkuVL4PmzfdEFRRVWRcJ1D1duNzjhVSZjNqS5YeGRz+ mWzLbbAt7fwVUBvyyJMzO+TEUCdkCwxtYKBbRXKjhQXeySECLX/dYt8nVmEyPnzh JQb2PgLHrFYEvIwVzS32qwIDAQABo4GaMIGXMB0GA1UdDgQWBBT6/zAqoK/NMDFn wKA4AJsf4PqAdTBoBgNVHSMEYTBfgBT6/zAqoK/NMDFnwKA4AJsf4PqAdaFEpEIw QDELMAkGA1UEBhMCRlIxDzANBgNVBAoTBkVOVkFNIDEgMB4GA1UEAxMXdGVsZWZv cm1hdGlvbi5lbnZhbS5vcmeCAQAwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUF AAOBgQCx8M9+jBkc64BvOXyGUV/Cf5+KxSlC9ZOdS62hR9Lkr/BGir9KWmDmpGHY wQxw/20OItJUU7ugkIoqJrFqyu90u2cMIpdXG0sz98k4xoYHnpDeONrHBv/9+QS+ NhkhPzDERWlAQTTxoIYE1U8KDZ7iiF+U2Z2dmMYKCEskGWQY8A== teleformation.envam.org CN=teleformation.envam.org,O=ENVAM\ ,C=FR MIICkTCCAfqgAwIBAgIBADANBgkqhkiG9w0BAQUFADBAMQswCQYDVQQGEwJGUjEP MA0GA1UEChMGRU5WQU0gMSAwHgYDVQQDExd0ZWxlZm9ybWF0aW9uLmVudmFtLm9y ZzAeFw0wODA1MjExMDA4MDBaFw0yODA1MTYxMDA4MDBaMEAxCzAJBgNVBAYTAkZS MQ8wDQYDVQQKEwZFTlZBTSAxIDAeBgNVBAMTF3RlbGVmb3JtYXRpb24uZW52YW0u b3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDA22oxc4HLrdagy/gtCPzp t1t3ElFNqF0KcYY0kkxdRQkuVL4PmzfdEFRRVWRcJ1D1duNzjhVSZjNqS5YeGRz+ mWzLbbAt7fwVUBvyyJMzO+TEUCdkCwxtYKBbRXKjhQXeySECLX/dYt8nVmEyPnzh JQb2PgLHrFYEvIwVzS32qwIDAQABo4GaMIGXMB0GA1UdDgQWBBT6/zAqoK/NMDFn wKA4AJsf4PqAdTBoBgNVHSMEYTBfgBT6/zAqoK/NMDFnwKA4AJsf4PqAdaFEpEIw QDELMAkGA1UEBhMCRlIxDzANBgNVBAoTBkVOVkFNIDEgMB4GA1UEAxMXdGVsZWZv cm1hdGlvbi5lbnZhbS5vcmeCAQAwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUF AAOBgQCx8M9+jBkc64BvOXyGUV/Cf5+KxSlC9ZOdS62hR9Lkr/BGir9KWmDmpGHY wQxw/20OItJUU7ugkIoqJrFqyu90u2cMIpdXG0sz98k4xoYHnpDeONrHBv/9+QS+ NhkhPzDERWlAQTTxoIYE1U8KDZ7iiF+U2Z2dmMYKCEskGWQY8A== espci.fr MIIEcDCCA1igAwIBAgILAQAAAAABIK/C9AowDQYJKoZIhvcNAQEFBQAwXzELMAkG A1UEBhMCQkUxEzARBgNVBAoTCkN5YmVydHJ1c3QxFzAVBgNVBAsTDkVkdWNhdGlv bmFsIENBMSIwIAYDVQQDExlDeWJlcnRydXN0IEVkdWNhdGlvbmFsIENBMB4XDTA5 MDQxNjE1MzIwNloXDTEyMDQxNjE1MzIwNlowgaIxCzAJBgNVBAYTAkZSMQ8wDQYD VQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMTwwOgYDVQQKEzNFY29sZSBTdXBl cmlldXJlIGRlIFBoeXNpcXVlIGV0IENoaW1pZSBJbmR1c3RyaWVsbGUxHTAbBgNV BAsTFFNlcnZpY2UgSW5mb3JtYXRpcXVlMRUwEwYDVQQDEwx2aXAuZXNwY2kuZnIw gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALqHqDC01AANSoDkkuOh4DvNpVJC it7gEobYXJZ4Q5LHRFgfgkJktae1Rkjp0M/uaDtWK0SDUxXbsmup2qDByV2mTB77 np5Z7CfR9TomZrmkEu+I/yehD4YQK54gyClpd54KcM2wecpmI9zaSF0U2PYvK1Qo pOx4IntT+sYGiIexAgMBAAGjggFrMIIBZzBQBgNVHSAESTBHMEUGByqGSLE+AQAw OjA4BggrBgEFBQcCARYsaHR0cDovL3d3dy5nbG9iYWxzaWduLm5ldC9yZXBvc2l0 b3J5L2Nwcy5jZm0wDgYDVR0PAQH/BAQDAgWgMB8GA1UdIwQYMBaAFGVloz3XOxGj CgclN8lCSlt2d1DhMB0GA1UdDgQWBBTLgGQdwBQK2JvSL8jCOrgDydwvpDA6BgNV HR8EMzAxMC+gLaArhilodHRwOi8vY3JsLmdsb2JhbHNpZ24ubmV0L2VkdWNhdGlv bmFsLmNybDBPBggrBgEFBQcBAQRDMEEwPwYIKwYBBQUHMAKGM2h0dHA6Ly9zZWN1 cmUuZ2xvYmFsc2lnbi5uZXQvY2FjZXJ0L2VkdWNhdGlvbmFsLmNydDAdBgNVHSUE FjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwFwYDVR0RBBAwDoIMdmlwLmVzcGNpLmZy MA0GCSqGSIb3DQEBBQUAA4IBAQBOR9nk7v34geZVHbzGT3DDLD/Lg40y6WvsjZVC xw3TtWxCzX0yQzS0Rp4LGIq0Y7lrafsPm8O0mjONGTQl804kjpKQseRBmpbo1hD4 W3fWjMTXgmrdeGzhCFS0UclpmL8RCmMOcIe1EqqDX5y1My5ux2OU59YF73N746jC W1SdDfa5AXVwFpVrMvkRWgwNw3aTgigy+wZYXTK5Sdv8KORbzFBA5K9alU9pb2rr eN2mKvTxsETWty5R/B8LmP/MTaeA4iDzKUyo/jpZYhkAtEPCzCYftdYV/hSnaw+Z SlJ5Av79EX4lyZjajsILOlHp4w2iExbolx4m5iT49GAabLj0 urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient ESPCI ParisTech ESPCI ParisTech http://unknown.site.com Emmanuel Dreyfus Emmanuel.Dreyfus@espci.fr Jean-Jacques Puig Jean-Jacques.Puig@espci.fr MIIEMTCCAxmgAwIBAgIQUD3byFJyDh1xqI5QKKnFpDANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTEwMDExMTAwMDAwMFoXDTEzMDExMDIzNTk1OVowgZIxCzAJBgNV BAYTAkZSMQ4wDAYDVQQHEwVQYXJpczE8MDoGA1UEChMzRWNvbGUgU3VwZXJpZXVy ZSBkZSBQaHlzaXF1ZSBldCBDaGltaWUgSW5kdXN0cmllbGxlMR0wGwYDVQQLExRT ZXJ2aWNlIEluZm9ybWF0aXF1ZTEWMBQGA1UEAxMNd2lmaS5lc3BjaS5mcjCBnzAN BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvZNOlet3ASLeoMP3oyaDaaGGzxqR+P4v 2HuCvVBNLTsovB1apqWKz/vahb2YVXRKnFKXqpOvUNYiogc4D2d9IM/BQzKIGLNj TbsoaLriJPqS8Ag3AuWehorMzK5MzNqBWCHbtaaQfRvcja64q7t7y0puqTfSOAA/ dQYTqGLGQtkCAwEAAaOCAWAwggFcMB8GA1UdIwQYMBaAFAy9k2gM896ro0lrKzdX R+qQ47ntMB0GA1UdDgQWBBQIOO+OZb4CpGCZu6Los41TO2ECeDAOBgNVHQ8BAf8E BAMCBaAwDAYDVR0TAQH/BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUH AwIwGAYDVR0gBBEwDzANBgsrBgEEAbIxAQICHTA6BgNVHR8EMzAxMC+gLaArhilo dHRwOi8vY3JsLnRjcy50ZXJlbmEub3JnL1RFUkVOQVNTTENBLmNybDBtBggrBgEF BQcBAQRhMF8wNQYIKwYBBQUHMAKGKWh0dHA6Ly9jcnQudGNzLnRlcmVuYS5vcmcv VEVSRU5BU1NMQ0EuY3J0MCYGCCsGAQUFBzABhhpodHRwOi8vb2NzcC50Y3MudGVy ZW5hLm9yZzAYBgNVHREEETAPgg13aWZpLmVzcGNpLmZyMA0GCSqGSIb3DQEBBQUA A4IBAQCDSfYiW49Ztr7kdjPF3ZnNbIK6kYoHfB+gX/pssd7ohH0ZySuqP3G6R1EK QCHvAWE2sdlIn80W4hOOwa9vqwpl6qyya3PtEI76IzMBxunZEtGFqHZMSIC7QtvC 39qbmsD72d0HqsbiIQwFkDiYyOE3luqSxdQdY0PGQTPhuxuUa+WADuDLOJCf+Lny JhLIEcyRc+ZdNibYt9Bez2Q1YypvFb8Dpaz/P9K8dlResBKjK/0je5X5eCF8qe0q ovayB+FRwIEMj9PD6Xz7qvKw7ItmzIGIbloI4pg0b2kB2auxqFOyiDP44Q+Qbf/n E8KqbGfUbpLtALl+XYz3x9YgJ1A5 MIIEMTCCAxmgAwIBAgIQUD3byFJyDh1xqI5QKKnFpDANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTEwMDExMTAwMDAwMFoXDTEzMDExMDIzNTk1OVowgZIxCzAJBgNV BAYTAkZSMQ4wDAYDVQQHEwVQYXJpczE8MDoGA1UEChMzRWNvbGUgU3VwZXJpZXVy ZSBkZSBQaHlzaXF1ZSBldCBDaGltaWUgSW5kdXN0cmllbGxlMR0wGwYDVQQLExRT ZXJ2aWNlIEluZm9ybWF0aXF1ZTEWMBQGA1UEAxMNd2lmaS5lc3BjaS5mcjCBnzAN BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvZNOlet3ASLeoMP3oyaDaaGGzxqR+P4v 2HuCvVBNLTsovB1apqWKz/vahb2YVXRKnFKXqpOvUNYiogc4D2d9IM/BQzKIGLNj TbsoaLriJPqS8Ag3AuWehorMzK5MzNqBWCHbtaaQfRvcja64q7t7y0puqTfSOAA/ dQYTqGLGQtkCAwEAAaOCAWAwggFcMB8GA1UdIwQYMBaAFAy9k2gM896ro0lrKzdX R+qQ47ntMB0GA1UdDgQWBBQIOO+OZb4CpGCZu6Los41TO2ECeDAOBgNVHQ8BAf8E BAMCBaAwDAYDVR0TAQH/BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUH AwIwGAYDVR0gBBEwDzANBgsrBgEEAbIxAQICHTA6BgNVHR8EMzAxMC+gLaArhilo dHRwOi8vY3JsLnRjcy50ZXJlbmEub3JnL1RFUkVOQVNTTENBLmNybDBtBggrBgEF BQcBAQRhMF8wNQYIKwYBBQUHMAKGKWh0dHA6Ly9jcnQudGNzLnRlcmVuYS5vcmcv VEVSRU5BU1NMQ0EuY3J0MCYGCCsGAQUFBzABhhpodHRwOi8vb2NzcC50Y3MudGVy ZW5hLm9yZzAYBgNVHREEETAPgg13aWZpLmVzcGNpLmZyMA0GCSqGSIb3DQEBBQUA A4IBAQCDSfYiW49Ztr7kdjPF3ZnNbIK6kYoHfB+gX/pssd7ohH0ZySuqP3G6R1EK QCHvAWE2sdlIn80W4hOOwa9vqwpl6qyya3PtEI76IzMBxunZEtGFqHZMSIC7QtvC 39qbmsD72d0HqsbiIQwFkDiYyOE3luqSxdQdY0PGQTPhuxuUa+WADuDLOJCf+Lny JhLIEcyRc+ZdNibYt9Bez2Q1YypvFb8Dpaz/P9K8dlResBKjK/0je5X5eCF8qe0q ovayB+FRwIEMj9PD6Xz7qvKw7ItmzIGIbloI4pg0b2kB2auxqFOyiDP44Q+Qbf/n E8KqbGfUbpLtALl+XYz3x9YgJ1A5 Emmanuel Dreyfus Emmanuel.Dreyfus@espci.fr Jean-Jacques Puig Jean-Jacques.Puig@espci.fr MIIEMTCCAxmgAwIBAgIQI8q+hCOn8EnJ47r6SBmTLDANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTA5MTAyOTAwMDAwMFoXDTEyMTAyODIzNTk1OVowgZIxCzAJBgNV BAYTAkZSMQ4wDAYDVQQHEwVQYXJpczE8MDoGA1UEChMzRWNvbGUgU3VwZXJpZXVy ZSBkZSBQaHlzaXF1ZSBldCBDaGltaWUgSW5kdXN0cmllbGxlMR0wGwYDVQQLExRT ZXJ2aWNlIEluZm9ybWF0aXF1ZTEWMBQGA1UEAxMNYmxvZy5lc3BjaS5mcjCBnzAN BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA2ceB5dkS0JKfhVarY6ZkNqOIKxq208Z5 qNVXHZsB+yCrt1as8UjMn1MNGEZiyK4Ss7edO9u8kt2TPyKdKlGu2S8+1mdKInwE F08pWA01ceYAzjW5yJx+qOPiPIgYO6r57YXWpLp/FfuoB+dGw9hanoXFf7nsD258 r4VoxlHseZUCAwEAAaOCAWAwggFcMB8GA1UdIwQYMBaAFAy9k2gM896ro0lrKzdX R+qQ47ntMB0GA1UdDgQWBBRkST8xkTr4BBr9zYuj6Yoz1z1wBzAOBgNVHQ8BAf8E BAMCBaAwDAYDVR0TAQH/BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUH AwIwGAYDVR0gBBEwDzANBgsrBgEEAbIxAQICHTA6BgNVHR8EMzAxMC+gLaArhilo dHRwOi8vY3JsLnRjcy50ZXJlbmEub3JnL1RFUkVOQVNTTENBLmNybDBtBggrBgEF BQcBAQRhMF8wNQYIKwYBBQUHMAKGKWh0dHA6Ly9jcnQudGNzLnRlcmVuYS5vcmcv VEVSRU5BU1NMQ0EuY3J0MCYGCCsGAQUFBzABhhpodHRwOi8vb2NzcC50Y3MudGVy ZW5hLm9yZzAYBgNVHREEETAPgg1ibG9nLmVzcGNpLmZyMA0GCSqGSIb3DQEBBQUA A4IBAQB6SexCQii34uigm24z8haCr8v3D7hQj8GumdoBRLB1tw9Q8Dq3x0epPCeN 1bYS7v9vc0tvgHXP40u6S7Go3jxdyB8KzFxUxgYun2JQjlm6jzyYq24zCHWu7IpS CcaE5+eLNY02vj2n7o47uVoilIzrt32bIaJc/t0mjAx6TNBUGczyguX5a1lXkoln J3aDjYgk+ApC9ChruSxkKimrwejRQFyiEqvgpsVodaVowl34DcXNZ92xLgDjhGwm B3GGAmU/bmRiCdLiNvtROdwV0+Ld3FDt3B1FAoJERQPJ5am3glAkpYfQHDP4Fop5 UMbQrw6/K2Spmor26OFJRVSJkjNw MIIEMTCCAxmgAwIBAgIQI8q+hCOn8EnJ47r6SBmTLDANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTA5MTAyOTAwMDAwMFoXDTEyMTAyODIzNTk1OVowgZIxCzAJBgNV BAYTAkZSMQ4wDAYDVQQHEwVQYXJpczE8MDoGA1UEChMzRWNvbGUgU3VwZXJpZXVy ZSBkZSBQaHlzaXF1ZSBldCBDaGltaWUgSW5kdXN0cmllbGxlMR0wGwYDVQQLExRT ZXJ2aWNlIEluZm9ybWF0aXF1ZTEWMBQGA1UEAxMNYmxvZy5lc3BjaS5mcjCBnzAN BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA2ceB5dkS0JKfhVarY6ZkNqOIKxq208Z5 qNVXHZsB+yCrt1as8UjMn1MNGEZiyK4Ss7edO9u8kt2TPyKdKlGu2S8+1mdKInwE F08pWA01ceYAzjW5yJx+qOPiPIgYO6r57YXWpLp/FfuoB+dGw9hanoXFf7nsD258 r4VoxlHseZUCAwEAAaOCAWAwggFcMB8GA1UdIwQYMBaAFAy9k2gM896ro0lrKzdX R+qQ47ntMB0GA1UdDgQWBBRkST8xkTr4BBr9zYuj6Yoz1z1wBzAOBgNVHQ8BAf8E BAMCBaAwDAYDVR0TAQH/BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUH AwIwGAYDVR0gBBEwDzANBgsrBgEEAbIxAQICHTA6BgNVHR8EMzAxMC+gLaArhilo dHRwOi8vY3JsLnRjcy50ZXJlbmEub3JnL1RFUkVOQVNTTENBLmNybDBtBggrBgEF BQcBAQRhMF8wNQYIKwYBBQUHMAKGKWh0dHA6Ly9jcnQudGNzLnRlcmVuYS5vcmcv VEVSRU5BU1NMQ0EuY3J0MCYGCCsGAQUFBzABhhpodHRwOi8vb2NzcC50Y3MudGVy ZW5hLm9yZzAYBgNVHREEETAPgg1ibG9nLmVzcGNpLmZyMA0GCSqGSIb3DQEBBQUA A4IBAQB6SexCQii34uigm24z8haCr8v3D7hQj8GumdoBRLB1tw9Q8Dq3x0epPCeN 1bYS7v9vc0tvgHXP40u6S7Go3jxdyB8KzFxUxgYun2JQjlm6jzyYq24zCHWu7IpS CcaE5+eLNY02vj2n7o47uVoilIzrt32bIaJc/t0mjAx6TNBUGczyguX5a1lXkoln J3aDjYgk+ApC9ChruSxkKimrwejRQFyiEqvgpsVodaVowl34DcXNZ92xLgDjhGwm B3GGAmU/bmRiCdLiNvtROdwV0+Ld3FDt3B1FAoJERQPJ5am3glAkpYfQHDP4Fop5 UMbQrw6/K2Spmor26OFJRVSJkjNw Emmanuel Dreyfus Emmanuel.Dreyfus@espci.fr Jean-Jacques Puig Jean-Jacques.Puig@espci.fr MIIEqTCCA5GgAwIBAgIQa7eQ33vrTUyqFEw/PKk7ZDANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTA5MTIyMjAwMDAwMFoXDTEyMTIyMTIzNTk1OVowgZQxCzAJBgNV BAYTAkZSMQ4wDAYDVQQHEwVQYXJpczE8MDoGA1UEChMzRWNvbGUgU3VwZXJpZXVy ZSBkZSBQaHlzaXF1ZSBldCBDaGltaWUgSW5kdXN0cmllbGxlMR0wGwYDVQQLExRT ZXJ2aWNlIEluZm9ybWF0aXF1ZTEYMBYGA1UEAxMPdzQubmV0LmVzcGNpLmZyMIGf MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDGcYOCWd9tPSOD99GC6rBXvyuyA3US Iuz1P9MKKFPH5w+Yz4OsVDTyHyntOBXm3K1FvUXmA23nzSaqWZHcdQ0/gJ6HgweN cvHMTrqWs8BW8XpS7pOr8GGNLse74dcfEGDrBBKjYiBhHm4s5LF0y2JupfVRvqWA gD9NyYAC5AtdVQIDAQABo4IB1jCCAdIwHwYDVR0jBBgwFoAUDL2TaAzz3qujSWsr N1dH6pDjue0wHQYDVR0OBBYEFCvEv25erxfY41zZoduBF0gw1C/OMA4GA1UdDwEB /wQEAwIFoDAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEF BQcDAjAYBgNVHSAEETAPMA0GCysGAQQBsjEBAgIdMDoGA1UdHwQzMDEwL6AtoCuG KWh0dHA6Ly9jcmwudGNzLnRlcmVuYS5vcmcvVEVSRU5BU1NMQ0EuY3JsMG0GCCsG AQUFBwEBBGEwXzA1BggrBgEFBQcwAoYpaHR0cDovL2NydC50Y3MudGVyZW5hLm9y Zy9URVJFTkFTU0xDQS5jcnQwJgYIKwYBBQUHMAGGGmh0dHA6Ly9vY3NwLnRjcy50 ZXJlbmEub3JnMIGNBgNVHREEgYUwgYKCD3c0Lm5ldC5lc3BjaS5mcoIRaW50cmFu ZXQuZXNwY2kuZnKCFmludHJhbmV0LnBwbWQuZXNwY2kuZnKCHnd3dy5pbnN0aXR1 dC1sYW5nZXZpbi5lc3BjaS5mcoIRd3d3LnBwbWQuZXNwY2kuZnKCEXd3dy5zbWJw LmVzcGNpLmZyMA0GCSqGSIb3DQEBBQUAA4IBAQBIkyOCBkCOFVR5uMWwG25d89sG 77FQbpA07KUne0sw9eZuSGnUQjGtreRmZgDtzVJip5Z9CApY49TcZ/JQ5r6viB+l l0HYYGn3LgGpSxHumzbuJYpKDkFVNZPOqSZ68ezDukFEdAArh4B2nFtJFoR2kuK+ tjzbLJUnCLtCp03rky5QxuORYoMj735mCqlB8TO41tVl+C6Zi4OFJoJ6Cr3t1Re4 14+oHO+BHrL7N7N6gO4gVsSfRUGEqziKbVhZulYbCaPJ2FGUTdgklmiynOhMgkW3 n4LKtlJAmMC7oLli+A0gJ819bovCLm/4IqgjxjjRZMSPL6YUnpvPlU4PeZpK MIIEqTCCA5GgAwIBAgIQa7eQ33vrTUyqFEw/PKk7ZDANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTA5MTIyMjAwMDAwMFoXDTEyMTIyMTIzNTk1OVowgZQxCzAJBgNV BAYTAkZSMQ4wDAYDVQQHEwVQYXJpczE8MDoGA1UEChMzRWNvbGUgU3VwZXJpZXVy ZSBkZSBQaHlzaXF1ZSBldCBDaGltaWUgSW5kdXN0cmllbGxlMR0wGwYDVQQLExRT ZXJ2aWNlIEluZm9ybWF0aXF1ZTEYMBYGA1UEAxMPdzQubmV0LmVzcGNpLmZyMIGf MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDGcYOCWd9tPSOD99GC6rBXvyuyA3US Iuz1P9MKKFPH5w+Yz4OsVDTyHyntOBXm3K1FvUXmA23nzSaqWZHcdQ0/gJ6HgweN cvHMTrqWs8BW8XpS7pOr8GGNLse74dcfEGDrBBKjYiBhHm4s5LF0y2JupfVRvqWA gD9NyYAC5AtdVQIDAQABo4IB1jCCAdIwHwYDVR0jBBgwFoAUDL2TaAzz3qujSWsr N1dH6pDjue0wHQYDVR0OBBYEFCvEv25erxfY41zZoduBF0gw1C/OMA4GA1UdDwEB /wQEAwIFoDAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEF BQcDAjAYBgNVHSAEETAPMA0GCysGAQQBsjEBAgIdMDoGA1UdHwQzMDEwL6AtoCuG KWh0dHA6Ly9jcmwudGNzLnRlcmVuYS5vcmcvVEVSRU5BU1NMQ0EuY3JsMG0GCCsG AQUFBwEBBGEwXzA1BggrBgEFBQcwAoYpaHR0cDovL2NydC50Y3MudGVyZW5hLm9y Zy9URVJFTkFTU0xDQS5jcnQwJgYIKwYBBQUHMAGGGmh0dHA6Ly9vY3NwLnRjcy50 ZXJlbmEub3JnMIGNBgNVHREEgYUwgYKCD3c0Lm5ldC5lc3BjaS5mcoIRaW50cmFu ZXQuZXNwY2kuZnKCFmludHJhbmV0LnBwbWQuZXNwY2kuZnKCHnd3dy5pbnN0aXR1 dC1sYW5nZXZpbi5lc3BjaS5mcoIRd3d3LnBwbWQuZXNwY2kuZnKCEXd3dy5zbWJw LmVzcGNpLmZyMA0GCSqGSIb3DQEBBQUAA4IBAQBIkyOCBkCOFVR5uMWwG25d89sG 77FQbpA07KUne0sw9eZuSGnUQjGtreRmZgDtzVJip5Z9CApY49TcZ/JQ5r6viB+l l0HYYGn3LgGpSxHumzbuJYpKDkFVNZPOqSZ68ezDukFEdAArh4B2nFtJFoR2kuK+ tjzbLJUnCLtCp03rky5QxuORYoMj735mCqlB8TO41tVl+C6Zi4OFJoJ6Cr3t1Re4 14+oHO+BHrL7N7N6gO4gVsSfRUGEqziKbVhZulYbCaPJ2FGUTdgklmiynOhMgkW3 n4LKtlJAmMC7oLli+A0gJ819bovCLm/4IqgjxjjRZMSPL6YUnpvPlU4PeZpK Emmanuel Dreyfus Emmanuel.Dreyfus@espci.fr Jean-Jacques Puig Jean-Jacques.Puig@espci.fr MIIERTCCAy2gAwIBAgIRAME8SxdLbkEhvLqB9PEOXIAwDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0wOTEwMjkwMDAwMDBaFw0xMjEwMjgyMzU5NTlaMIGUMQswCQYD VQQGEwJGUjEOMAwGA1UEBxMFUGFyaXMxPDA6BgNVBAoTM0Vjb2xlIFN1cGVyaWV1 cmUgZGUgUGh5c2lxdWUgZXQgQ2hpbWllIEluZHVzdHJpZWxsZTEdMBsGA1UECxMU U2VydmljZSBJbmZvcm1hdGlxdWUxGDAWBgNVBAMUDyoucmVzYS5lc3BjaS5mcjCB nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAypnokqQ7qAdyJTk2z/LXpXc9D9vt fbMyqd+AQmNf+W1OiWhS6QExGh7eFmqslbgY5T9NDc6Oavqm3R2xPBdGrfeeKzmP rIdEhLPszF75yCEKfwJtU8zwY3q2B/xuS+4JblAyaKTS/4kyDbvrif7Lrk1hq8Vf +DqTgkE/bjBgAQkCAwEAAaOCAXEwggFtMB8GA1UdIwQYMBaAFAy9k2gM896ro0lr KzdXR+qQ47ntMB0GA1UdDgQWBBR4gEHVS8AN/l9c6exlWT/urAJEfDAOBgNVHQ8B Af8EBAMCBaAwDAYDVR0TAQH/BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB BQUHAwIwGAYDVR0gBBEwDzANBgsrBgEEAbIxAQICHTA6BgNVHR8EMzAxMC+gLaAr hilodHRwOi8vY3JsLnRjcy50ZXJlbmEub3JnL1RFUkVOQVNTTENBLmNybDBtBggr BgEFBQcBAQRhMF8wNQYIKwYBBQUHMAKGKWh0dHA6Ly9jcnQudGNzLnRlcmVuYS5v cmcvVEVSRU5BU1NMQ0EuY3J0MCYGCCsGAQUFBzABhhpodHRwOi8vb2NzcC50Y3Mu dGVyZW5hLm9yZzApBgNVHREEIjAggg8qLnJlc2EuZXNwY2kuZnKCDXJlc2EuZXNw Y2kuZnIwDQYJKoZIhvcNAQEFBQADggEBACsh7jHxO6aCwmPEttyx5aNsuxE8FNZS 8kLrsM6B44yXtPCwGEwrFLGW7UPTmZM8FCFTeGAVpAcn7xdaUFgqnhidWUJwCBj+ kOp5hIQaKm306ksqFdlhJig5tpbjx8BMDHFVlaEYkS9LMInju/tz8b/825V45nxC x5FtCfmtJb0MHaEizIEVN5dmdgobHXUkxBuVnGPKgHPHHoDWxf1oZR6tthn5KxYT Y6OFYwppbUstCzRgUNIyQIZ4bH2NP8vGredwkINYTh45C+EMi3O83S60kaabVK0c mR69ZXsxM9+ExnsAB6MTsUKq+9DE27UsQseI0MbOX6QE865aa73f3yM= MIIERTCCAy2gAwIBAgIRAME8SxdLbkEhvLqB9PEOXIAwDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0wOTEwMjkwMDAwMDBaFw0xMjEwMjgyMzU5NTlaMIGUMQswCQYD VQQGEwJGUjEOMAwGA1UEBxMFUGFyaXMxPDA6BgNVBAoTM0Vjb2xlIFN1cGVyaWV1 cmUgZGUgUGh5c2lxdWUgZXQgQ2hpbWllIEluZHVzdHJpZWxsZTEdMBsGA1UECxMU U2VydmljZSBJbmZvcm1hdGlxdWUxGDAWBgNVBAMUDyoucmVzYS5lc3BjaS5mcjCB nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAypnokqQ7qAdyJTk2z/LXpXc9D9vt fbMyqd+AQmNf+W1OiWhS6QExGh7eFmqslbgY5T9NDc6Oavqm3R2xPBdGrfeeKzmP rIdEhLPszF75yCEKfwJtU8zwY3q2B/xuS+4JblAyaKTS/4kyDbvrif7Lrk1hq8Vf +DqTgkE/bjBgAQkCAwEAAaOCAXEwggFtMB8GA1UdIwQYMBaAFAy9k2gM896ro0lr KzdXR+qQ47ntMB0GA1UdDgQWBBR4gEHVS8AN/l9c6exlWT/urAJEfDAOBgNVHQ8B Af8EBAMCBaAwDAYDVR0TAQH/BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB BQUHAwIwGAYDVR0gBBEwDzANBgsrBgEEAbIxAQICHTA6BgNVHR8EMzAxMC+gLaAr hilodHRwOi8vY3JsLnRjcy50ZXJlbmEub3JnL1RFUkVOQVNTTENBLmNybDBtBggr BgEFBQcBAQRhMF8wNQYIKwYBBQUHMAKGKWh0dHA6Ly9jcnQudGNzLnRlcmVuYS5v cmcvVEVSRU5BU1NMQ0EuY3J0MCYGCCsGAQUFBzABhhpodHRwOi8vb2NzcC50Y3Mu dGVyZW5hLm9yZzApBgNVHREEIjAggg8qLnJlc2EuZXNwY2kuZnKCDXJlc2EuZXNw Y2kuZnIwDQYJKoZIhvcNAQEFBQADggEBACsh7jHxO6aCwmPEttyx5aNsuxE8FNZS 8kLrsM6B44yXtPCwGEwrFLGW7UPTmZM8FCFTeGAVpAcn7xdaUFgqnhidWUJwCBj+ kOp5hIQaKm306ksqFdlhJig5tpbjx8BMDHFVlaEYkS9LMInju/tz8b/825V45nxC x5FtCfmtJb0MHaEizIEVN5dmdgobHXUkxBuVnGPKgHPHHoDWxf1oZR6tthn5KxYT Y6OFYwppbUstCzRgUNIyQIZ4bH2NP8vGredwkINYTh45C+EMi3O83S60kaabVK0c mR69ZXsxM9+ExnsAB6MTsUKq+9DE27UsQseI0MbOX6QE865aa73f3yM= Emmanuel Dreyfus Emmanuel.Dreyfus@espci.fr Jean-Jacques Puig Jean-Jacques.Puig@espci.fr MIIERTCCAy2gAwIBAgIRAME8SxdLbkEhvLqB9PEOXIAwDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0wOTEwMjkwMDAwMDBaFw0xMjEwMjgyMzU5NTlaMIGUMQswCQYD VQQGEwJGUjEOMAwGA1UEBxMFUGFyaXMxPDA6BgNVBAoTM0Vjb2xlIFN1cGVyaWV1 cmUgZGUgUGh5c2lxdWUgZXQgQ2hpbWllIEluZHVzdHJpZWxsZTEdMBsGA1UECxMU U2VydmljZSBJbmZvcm1hdGlxdWUxGDAWBgNVBAMUDyoucmVzYS5lc3BjaS5mcjCB nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAypnokqQ7qAdyJTk2z/LXpXc9D9vt fbMyqd+AQmNf+W1OiWhS6QExGh7eFmqslbgY5T9NDc6Oavqm3R2xPBdGrfeeKzmP rIdEhLPszF75yCEKfwJtU8zwY3q2B/xuS+4JblAyaKTS/4kyDbvrif7Lrk1hq8Vf +DqTgkE/bjBgAQkCAwEAAaOCAXEwggFtMB8GA1UdIwQYMBaAFAy9k2gM896ro0lr KzdXR+qQ47ntMB0GA1UdDgQWBBR4gEHVS8AN/l9c6exlWT/urAJEfDAOBgNVHQ8B Af8EBAMCBaAwDAYDVR0TAQH/BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB BQUHAwIwGAYDVR0gBBEwDzANBgsrBgEEAbIxAQICHTA6BgNVHR8EMzAxMC+gLaAr hilodHRwOi8vY3JsLnRjcy50ZXJlbmEub3JnL1RFUkVOQVNTTENBLmNybDBtBggr BgEFBQcBAQRhMF8wNQYIKwYBBQUHMAKGKWh0dHA6Ly9jcnQudGNzLnRlcmVuYS5v cmcvVEVSRU5BU1NMQ0EuY3J0MCYGCCsGAQUFBzABhhpodHRwOi8vb2NzcC50Y3Mu dGVyZW5hLm9yZzApBgNVHREEIjAggg8qLnJlc2EuZXNwY2kuZnKCDXJlc2EuZXNw Y2kuZnIwDQYJKoZIhvcNAQEFBQADggEBACsh7jHxO6aCwmPEttyx5aNsuxE8FNZS 8kLrsM6B44yXtPCwGEwrFLGW7UPTmZM8FCFTeGAVpAcn7xdaUFgqnhidWUJwCBj+ kOp5hIQaKm306ksqFdlhJig5tpbjx8BMDHFVlaEYkS9LMInju/tz8b/825V45nxC x5FtCfmtJb0MHaEizIEVN5dmdgobHXUkxBuVnGPKgHPHHoDWxf1oZR6tthn5KxYT Y6OFYwppbUstCzRgUNIyQIZ4bH2NP8vGredwkINYTh45C+EMi3O83S60kaabVK0c mR69ZXsxM9+ExnsAB6MTsUKq+9DE27UsQseI0MbOX6QE865aa73f3yM= MIIERTCCAy2gAwIBAgIRAME8SxdLbkEhvLqB9PEOXIAwDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0wOTEwMjkwMDAwMDBaFw0xMjEwMjgyMzU5NTlaMIGUMQswCQYD VQQGEwJGUjEOMAwGA1UEBxMFUGFyaXMxPDA6BgNVBAoTM0Vjb2xlIFN1cGVyaWV1 cmUgZGUgUGh5c2lxdWUgZXQgQ2hpbWllIEluZHVzdHJpZWxsZTEdMBsGA1UECxMU U2VydmljZSBJbmZvcm1hdGlxdWUxGDAWBgNVBAMUDyoucmVzYS5lc3BjaS5mcjCB nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAypnokqQ7qAdyJTk2z/LXpXc9D9vt fbMyqd+AQmNf+W1OiWhS6QExGh7eFmqslbgY5T9NDc6Oavqm3R2xPBdGrfeeKzmP rIdEhLPszF75yCEKfwJtU8zwY3q2B/xuS+4JblAyaKTS/4kyDbvrif7Lrk1hq8Vf +DqTgkE/bjBgAQkCAwEAAaOCAXEwggFtMB8GA1UdIwQYMBaAFAy9k2gM896ro0lr KzdXR+qQ47ntMB0GA1UdDgQWBBR4gEHVS8AN/l9c6exlWT/urAJEfDAOBgNVHQ8B Af8EBAMCBaAwDAYDVR0TAQH/BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB BQUHAwIwGAYDVR0gBBEwDzANBgsrBgEEAbIxAQICHTA6BgNVHR8EMzAxMC+gLaAr hilodHRwOi8vY3JsLnRjcy50ZXJlbmEub3JnL1RFUkVOQVNTTENBLmNybDBtBggr BgEFBQcBAQRhMF8wNQYIKwYBBQUHMAKGKWh0dHA6Ly9jcnQudGNzLnRlcmVuYS5v cmcvVEVSRU5BU1NMQ0EuY3J0MCYGCCsGAQUFBzABhhpodHRwOi8vb2NzcC50Y3Mu dGVyZW5hLm9yZzApBgNVHREEIjAggg8qLnJlc2EuZXNwY2kuZnKCDXJlc2EuZXNw Y2kuZnIwDQYJKoZIhvcNAQEFBQADggEBACsh7jHxO6aCwmPEttyx5aNsuxE8FNZS 8kLrsM6B44yXtPCwGEwrFLGW7UPTmZM8FCFTeGAVpAcn7xdaUFgqnhidWUJwCBj+ kOp5hIQaKm306ksqFdlhJig5tpbjx8BMDHFVlaEYkS9LMInju/tz8b/825V45nxC x5FtCfmtJb0MHaEizIEVN5dmdgobHXUkxBuVnGPKgHPHHoDWxf1oZR6tthn5KxYT Y6OFYwppbUstCzRgUNIyQIZ4bH2NP8vGredwkINYTh45C+EMi3O83S60kaabVK0c mR69ZXsxM9+ExnsAB6MTsUKq+9DE27UsQseI0MbOX6QE865aa73f3yM= Emmanuel Dreyfus Emmanuel.Dreyfus@espci.fr Jean-Jacques Puig Jean-Jacques.Puig@espci.fr MIIERTCCAy2gAwIBAgIRAME8SxdLbkEhvLqB9PEOXIAwDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0wOTEwMjkwMDAwMDBaFw0xMjEwMjgyMzU5NTlaMIGUMQswCQYD VQQGEwJGUjEOMAwGA1UEBxMFUGFyaXMxPDA6BgNVBAoTM0Vjb2xlIFN1cGVyaWV1 cmUgZGUgUGh5c2lxdWUgZXQgQ2hpbWllIEluZHVzdHJpZWxsZTEdMBsGA1UECxMU U2VydmljZSBJbmZvcm1hdGlxdWUxGDAWBgNVBAMUDyoucmVzYS5lc3BjaS5mcjCB nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAypnokqQ7qAdyJTk2z/LXpXc9D9vt fbMyqd+AQmNf+W1OiWhS6QExGh7eFmqslbgY5T9NDc6Oavqm3R2xPBdGrfeeKzmP rIdEhLPszF75yCEKfwJtU8zwY3q2B/xuS+4JblAyaKTS/4kyDbvrif7Lrk1hq8Vf +DqTgkE/bjBgAQkCAwEAAaOCAXEwggFtMB8GA1UdIwQYMBaAFAy9k2gM896ro0lr KzdXR+qQ47ntMB0GA1UdDgQWBBR4gEHVS8AN/l9c6exlWT/urAJEfDAOBgNVHQ8B Af8EBAMCBaAwDAYDVR0TAQH/BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB BQUHAwIwGAYDVR0gBBEwDzANBgsrBgEEAbIxAQICHTA6BgNVHR8EMzAxMC+gLaAr hilodHRwOi8vY3JsLnRjcy50ZXJlbmEub3JnL1RFUkVOQVNTTENBLmNybDBtBggr BgEFBQcBAQRhMF8wNQYIKwYBBQUHMAKGKWh0dHA6Ly9jcnQudGNzLnRlcmVuYS5v cmcvVEVSRU5BU1NMQ0EuY3J0MCYGCCsGAQUFBzABhhpodHRwOi8vb2NzcC50Y3Mu dGVyZW5hLm9yZzApBgNVHREEIjAggg8qLnJlc2EuZXNwY2kuZnKCDXJlc2EuZXNw Y2kuZnIwDQYJKoZIhvcNAQEFBQADggEBACsh7jHxO6aCwmPEttyx5aNsuxE8FNZS 8kLrsM6B44yXtPCwGEwrFLGW7UPTmZM8FCFTeGAVpAcn7xdaUFgqnhidWUJwCBj+ kOp5hIQaKm306ksqFdlhJig5tpbjx8BMDHFVlaEYkS9LMInju/tz8b/825V45nxC x5FtCfmtJb0MHaEizIEVN5dmdgobHXUkxBuVnGPKgHPHHoDWxf1oZR6tthn5KxYT Y6OFYwppbUstCzRgUNIyQIZ4bH2NP8vGredwkINYTh45C+EMi3O83S60kaabVK0c mR69ZXsxM9+ExnsAB6MTsUKq+9DE27UsQseI0MbOX6QE865aa73f3yM= MIIERTCCAy2gAwIBAgIRAME8SxdLbkEhvLqB9PEOXIAwDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0wOTEwMjkwMDAwMDBaFw0xMjEwMjgyMzU5NTlaMIGUMQswCQYD VQQGEwJGUjEOMAwGA1UEBxMFUGFyaXMxPDA6BgNVBAoTM0Vjb2xlIFN1cGVyaWV1 cmUgZGUgUGh5c2lxdWUgZXQgQ2hpbWllIEluZHVzdHJpZWxsZTEdMBsGA1UECxMU U2VydmljZSBJbmZvcm1hdGlxdWUxGDAWBgNVBAMUDyoucmVzYS5lc3BjaS5mcjCB nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAypnokqQ7qAdyJTk2z/LXpXc9D9vt fbMyqd+AQmNf+W1OiWhS6QExGh7eFmqslbgY5T9NDc6Oavqm3R2xPBdGrfeeKzmP rIdEhLPszF75yCEKfwJtU8zwY3q2B/xuS+4JblAyaKTS/4kyDbvrif7Lrk1hq8Vf +DqTgkE/bjBgAQkCAwEAAaOCAXEwggFtMB8GA1UdIwQYMBaAFAy9k2gM896ro0lr KzdXR+qQ47ntMB0GA1UdDgQWBBR4gEHVS8AN/l9c6exlWT/urAJEfDAOBgNVHQ8B Af8EBAMCBaAwDAYDVR0TAQH/BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB BQUHAwIwGAYDVR0gBBEwDzANBgsrBgEEAbIxAQICHTA6BgNVHR8EMzAxMC+gLaAr hilodHRwOi8vY3JsLnRjcy50ZXJlbmEub3JnL1RFUkVOQVNTTENBLmNybDBtBggr BgEFBQcBAQRhMF8wNQYIKwYBBQUHMAKGKWh0dHA6Ly9jcnQudGNzLnRlcmVuYS5v cmcvVEVSRU5BU1NMQ0EuY3J0MCYGCCsGAQUFBzABhhpodHRwOi8vb2NzcC50Y3Mu dGVyZW5hLm9yZzApBgNVHREEIjAggg8qLnJlc2EuZXNwY2kuZnKCDXJlc2EuZXNw Y2kuZnIwDQYJKoZIhvcNAQEFBQADggEBACsh7jHxO6aCwmPEttyx5aNsuxE8FNZS 8kLrsM6B44yXtPCwGEwrFLGW7UPTmZM8FCFTeGAVpAcn7xdaUFgqnhidWUJwCBj+ kOp5hIQaKm306ksqFdlhJig5tpbjx8BMDHFVlaEYkS9LMInju/tz8b/825V45nxC x5FtCfmtJb0MHaEizIEVN5dmdgobHXUkxBuVnGPKgHPHHoDWxf1oZR6tthn5KxYT Y6OFYwppbUstCzRgUNIyQIZ4bH2NP8vGredwkINYTh45C+EMi3O83S60kaabVK0c mR69ZXsxM9+ExnsAB6MTsUKq+9DE27UsQseI0MbOX6QE865aa73f3yM= Emmanuel Dreyfus Emmanuel.Dreyfus@espci.fr Jean-Jacques Puig Jean-Jacques.Puig@espci.fr MIIERTCCAy2gAwIBAgIRAME8SxdLbkEhvLqB9PEOXIAwDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0wOTEwMjkwMDAwMDBaFw0xMjEwMjgyMzU5NTlaMIGUMQswCQYD VQQGEwJGUjEOMAwGA1UEBxMFUGFyaXMxPDA6BgNVBAoTM0Vjb2xlIFN1cGVyaWV1 cmUgZGUgUGh5c2lxdWUgZXQgQ2hpbWllIEluZHVzdHJpZWxsZTEdMBsGA1UECxMU U2VydmljZSBJbmZvcm1hdGlxdWUxGDAWBgNVBAMUDyoucmVzYS5lc3BjaS5mcjCB nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAypnokqQ7qAdyJTk2z/LXpXc9D9vt fbMyqd+AQmNf+W1OiWhS6QExGh7eFmqslbgY5T9NDc6Oavqm3R2xPBdGrfeeKzmP rIdEhLPszF75yCEKfwJtU8zwY3q2B/xuS+4JblAyaKTS/4kyDbvrif7Lrk1hq8Vf +DqTgkE/bjBgAQkCAwEAAaOCAXEwggFtMB8GA1UdIwQYMBaAFAy9k2gM896ro0lr KzdXR+qQ47ntMB0GA1UdDgQWBBR4gEHVS8AN/l9c6exlWT/urAJEfDAOBgNVHQ8B Af8EBAMCBaAwDAYDVR0TAQH/BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB BQUHAwIwGAYDVR0gBBEwDzANBgsrBgEEAbIxAQICHTA6BgNVHR8EMzAxMC+gLaAr hilodHRwOi8vY3JsLnRjcy50ZXJlbmEub3JnL1RFUkVOQVNTTENBLmNybDBtBggr BgEFBQcBAQRhMF8wNQYIKwYBBQUHMAKGKWh0dHA6Ly9jcnQudGNzLnRlcmVuYS5v cmcvVEVSRU5BU1NMQ0EuY3J0MCYGCCsGAQUFBzABhhpodHRwOi8vb2NzcC50Y3Mu dGVyZW5hLm9yZzApBgNVHREEIjAggg8qLnJlc2EuZXNwY2kuZnKCDXJlc2EuZXNw Y2kuZnIwDQYJKoZIhvcNAQEFBQADggEBACsh7jHxO6aCwmPEttyx5aNsuxE8FNZS 8kLrsM6B44yXtPCwGEwrFLGW7UPTmZM8FCFTeGAVpAcn7xdaUFgqnhidWUJwCBj+ kOp5hIQaKm306ksqFdlhJig5tpbjx8BMDHFVlaEYkS9LMInju/tz8b/825V45nxC x5FtCfmtJb0MHaEizIEVN5dmdgobHXUkxBuVnGPKgHPHHoDWxf1oZR6tthn5KxYT Y6OFYwppbUstCzRgUNIyQIZ4bH2NP8vGredwkINYTh45C+EMi3O83S60kaabVK0c mR69ZXsxM9+ExnsAB6MTsUKq+9DE27UsQseI0MbOX6QE865aa73f3yM= MIIERTCCAy2gAwIBAgIRAME8SxdLbkEhvLqB9PEOXIAwDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0wOTEwMjkwMDAwMDBaFw0xMjEwMjgyMzU5NTlaMIGUMQswCQYD VQQGEwJGUjEOMAwGA1UEBxMFUGFyaXMxPDA6BgNVBAoTM0Vjb2xlIFN1cGVyaWV1 cmUgZGUgUGh5c2lxdWUgZXQgQ2hpbWllIEluZHVzdHJpZWxsZTEdMBsGA1UECxMU U2VydmljZSBJbmZvcm1hdGlxdWUxGDAWBgNVBAMUDyoucmVzYS5lc3BjaS5mcjCB nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAypnokqQ7qAdyJTk2z/LXpXc9D9vt fbMyqd+AQmNf+W1OiWhS6QExGh7eFmqslbgY5T9NDc6Oavqm3R2xPBdGrfeeKzmP rIdEhLPszF75yCEKfwJtU8zwY3q2B/xuS+4JblAyaKTS/4kyDbvrif7Lrk1hq8Vf +DqTgkE/bjBgAQkCAwEAAaOCAXEwggFtMB8GA1UdIwQYMBaAFAy9k2gM896ro0lr KzdXR+qQ47ntMB0GA1UdDgQWBBR4gEHVS8AN/l9c6exlWT/urAJEfDAOBgNVHQ8B Af8EBAMCBaAwDAYDVR0TAQH/BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB BQUHAwIwGAYDVR0gBBEwDzANBgsrBgEEAbIxAQICHTA6BgNVHR8EMzAxMC+gLaAr hilodHRwOi8vY3JsLnRjcy50ZXJlbmEub3JnL1RFUkVOQVNTTENBLmNybDBtBggr BgEFBQcBAQRhMF8wNQYIKwYBBQUHMAKGKWh0dHA6Ly9jcnQudGNzLnRlcmVuYS5v cmcvVEVSRU5BU1NMQ0EuY3J0MCYGCCsGAQUFBzABhhpodHRwOi8vb2NzcC50Y3Mu dGVyZW5hLm9yZzApBgNVHREEIjAggg8qLnJlc2EuZXNwY2kuZnKCDXJlc2EuZXNw Y2kuZnIwDQYJKoZIhvcNAQEFBQADggEBACsh7jHxO6aCwmPEttyx5aNsuxE8FNZS 8kLrsM6B44yXtPCwGEwrFLGW7UPTmZM8FCFTeGAVpAcn7xdaUFgqnhidWUJwCBj+ kOp5hIQaKm306ksqFdlhJig5tpbjx8BMDHFVlaEYkS9LMInju/tz8b/825V45nxC x5FtCfmtJb0MHaEizIEVN5dmdgobHXUkxBuVnGPKgHPHHoDWxf1oZR6tthn5KxYT Y6OFYwppbUstCzRgUNIyQIZ4bH2NP8vGredwkINYTh45C+EMi3O83S60kaabVK0c mR69ZXsxM9+ExnsAB6MTsUKq+9DE27UsQseI0MbOX6QE865aa73f3yM= Emmanuel Dreyfus Emmanuel.Dreyfus@espci.fr Jean-Jacques Puig Jean-Jacques.Puig@espci.fr MIIEdDCCA1ygAwIBAgIQCz8+BTTUmD/yAREnK0MS6DANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTA5MTAyOTAwMDAwMFoXDTEyMTAyODIzNTk1OVowgZIxCzAJBgNV BAYTAkZSMQ4wDAYDVQQHEwVQYXJpczE8MDoGA1UEChMzRWNvbGUgU3VwZXJpZXVy ZSBkZSBQaHlzaXF1ZSBldCBDaGltaWUgSW5kdXN0cmllbGxlMR0wGwYDVQQLExRT ZXJ2aWNlIEluZm9ybWF0aXF1ZTEWMBQGA1UEAxMNd2lraS5lc3BjaS5mcjCBnzAN BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAzcs33AruAcWzpT4uAJRSianCa8bZdNnd EbRcqe2NnTY1hoyBOQs5GswU9IdAc7BC6gK0rGHQ3ntaseDcty26xeT68/739P0g UIbvpFouIUpTHVSovK+5YgcgKsB3JeW61NadSu+ANT2Tver24hApq/C4th/1gScd QY0ZqFYlCqkCAwEAAaOCAaMwggGfMB8GA1UdIwQYMBaAFAy9k2gM896ro0lrKzdX R+qQ47ntMB0GA1UdDgQWBBS1n5mbI/TmGbPDCF1WTjqKA9mfkzAOBgNVHQ8BAf8E BAMCBaAwDAYDVR0TAQH/BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUH AwIwGAYDVR0gBBEwDzANBgsrBgEEAbIxAQICHTA6BgNVHR8EMzAxMC+gLaArhilo dHRwOi8vY3JsLnRjcy50ZXJlbmEub3JnL1RFUkVOQVNTTENBLmNybDBtBggrBgEF BQcBAQRhMF8wNQYIKwYBBQUHMAKGKWh0dHA6Ly9jcnQudGNzLnRlcmVuYS5vcmcv VEVSRU5BU1NMQ0EuY3J0MCYGCCsGAQUFBzABhhpodHRwOi8vb2NzcC50Y3MudGVy ZW5hLm9yZzBbBgNVHREEVDBSgg13aWtpLmVzcGNpLmZyghZ3aWtpLmd1bGxpdmVy LmVzcGNpLmZyghF3aWtpLm5icC5lc3BjaS5mcoIWd2lraS5uZXVyb25lcy5lc3Bj aS5mcjANBgkqhkiG9w0BAQUFAAOCAQEAJkYIcAFBhnIbF/VGe/iK57VraJQEk1+a NpufwfuY1tsGFgF3jnww0+uKXmY8jSwwDaFV8wTQ8nYc9qXMoHp9o9UbFtEniVu5 mDxnfkalJjZfP++saq/gYyOt095QTr/8OQfhZZgb4AhIdVm9GgRlIKGFWe7wDN9N +fFsycmu+b60wqnSV6Ddpo6AmclzezV/PpqaqlYz3Wx5HX45cmf3ocZUAl6pdHNz YgV4ibVwCO7eEcEHqEg75t6puHVuH3fJYdA7Xe8kUVuLHxiabHY9KJckr7q0J9pK SzDAzwqjbKXdxtpKxvu9qI0t9FgfJNaVbD1slaUndvQKjlGMSVDuYw== MIIEdDCCA1ygAwIBAgIQCz8+BTTUmD/yAREnK0MS6DANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTA5MTAyOTAwMDAwMFoXDTEyMTAyODIzNTk1OVowgZIxCzAJBgNV BAYTAkZSMQ4wDAYDVQQHEwVQYXJpczE8MDoGA1UEChMzRWNvbGUgU3VwZXJpZXVy ZSBkZSBQaHlzaXF1ZSBldCBDaGltaWUgSW5kdXN0cmllbGxlMR0wGwYDVQQLExRT ZXJ2aWNlIEluZm9ybWF0aXF1ZTEWMBQGA1UEAxMNd2lraS5lc3BjaS5mcjCBnzAN BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAzcs33AruAcWzpT4uAJRSianCa8bZdNnd EbRcqe2NnTY1hoyBOQs5GswU9IdAc7BC6gK0rGHQ3ntaseDcty26xeT68/739P0g UIbvpFouIUpTHVSovK+5YgcgKsB3JeW61NadSu+ANT2Tver24hApq/C4th/1gScd QY0ZqFYlCqkCAwEAAaOCAaMwggGfMB8GA1UdIwQYMBaAFAy9k2gM896ro0lrKzdX R+qQ47ntMB0GA1UdDgQWBBS1n5mbI/TmGbPDCF1WTjqKA9mfkzAOBgNVHQ8BAf8E BAMCBaAwDAYDVR0TAQH/BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUH AwIwGAYDVR0gBBEwDzANBgsrBgEEAbIxAQICHTA6BgNVHR8EMzAxMC+gLaArhilo dHRwOi8vY3JsLnRjcy50ZXJlbmEub3JnL1RFUkVOQVNTTENBLmNybDBtBggrBgEF BQcBAQRhMF8wNQYIKwYBBQUHMAKGKWh0dHA6Ly9jcnQudGNzLnRlcmVuYS5vcmcv VEVSRU5BU1NMQ0EuY3J0MCYGCCsGAQUFBzABhhpodHRwOi8vb2NzcC50Y3MudGVy ZW5hLm9yZzBbBgNVHREEVDBSgg13aWtpLmVzcGNpLmZyghZ3aWtpLmd1bGxpdmVy LmVzcGNpLmZyghF3aWtpLm5icC5lc3BjaS5mcoIWd2lraS5uZXVyb25lcy5lc3Bj aS5mcjANBgkqhkiG9w0BAQUFAAOCAQEAJkYIcAFBhnIbF/VGe/iK57VraJQEk1+a NpufwfuY1tsGFgF3jnww0+uKXmY8jSwwDaFV8wTQ8nYc9qXMoHp9o9UbFtEniVu5 mDxnfkalJjZfP++saq/gYyOt095QTr/8OQfhZZgb4AhIdVm9GgRlIKGFWe7wDN9N +fFsycmu+b60wqnSV6Ddpo6AmclzezV/PpqaqlYz3Wx5HX45cmf3ocZUAl6pdHNz YgV4ibVwCO7eEcEHqEg75t6puHVuH3fJYdA7Xe8kUVuLHxiabHY9KJckr7q0J9pK SzDAzwqjbKXdxtpKxvu9qI0t9FgfJNaVbD1slaUndvQKjlGMSVDuYw== Emmanuel Dreyfus Emmanuel.Dreyfu@espci.fr Jean-Jacques Puig Jean-Jacques.Puig@espci.fr MIIERTCCAy2gAwIBAgIRANfH/jL50mGPJt75G3eExcIwDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0wOTEwMjkwMDAwMDBaFw0xMjEwMjgyMzU5NTlaMIGUMQswCQYD VQQGEwJGUjEOMAwGA1UEBxMFUGFyaXMxPDA6BgNVBAoTM0Vjb2xlIFN1cGVyaWV1 cmUgZGUgUGh5c2lxdWUgZXQgQ2hpbWllIEluZHVzdHJpZWxsZTEdMBsGA1UECxMU U2VydmljZSBJbmZvcm1hdGlxdWUxGDAWBgNVBAMUDyoud2lraS5lc3BjaS5mcjCB nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAzcs33AruAcWzpT4uAJRSianCa8bZ dNndEbRcqe2NnTY1hoyBOQs5GswU9IdAc7BC6gK0rGHQ3ntaseDcty26xeT68/73 9P0gUIbvpFouIUpTHVSovK+5YgcgKsB3JeW61NadSu+ANT2Tver24hApq/C4th/1 gScdQY0ZqFYlCqkCAwEAAaOCAXEwggFtMB8GA1UdIwQYMBaAFAy9k2gM896ro0lr KzdXR+qQ47ntMB0GA1UdDgQWBBS1n5mbI/TmGbPDCF1WTjqKA9mfkzAOBgNVHQ8B Af8EBAMCBaAwDAYDVR0TAQH/BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB BQUHAwIwGAYDVR0gBBEwDzANBgsrBgEEAbIxAQICHTA6BgNVHR8EMzAxMC+gLaAr hilodHRwOi8vY3JsLnRjcy50ZXJlbmEub3JnL1RFUkVOQVNTTENBLmNybDBtBggr BgEFBQcBAQRhMF8wNQYIKwYBBQUHMAKGKWh0dHA6Ly9jcnQudGNzLnRlcmVuYS5v cmcvVEVSRU5BU1NMQ0EuY3J0MCYGCCsGAQUFBzABhhpodHRwOi8vb2NzcC50Y3Mu dGVyZW5hLm9yZzApBgNVHREEIjAggg8qLndpa2kuZXNwY2kuZnKCDXdpa2kuZXNw Y2kuZnIwDQYJKoZIhvcNAQEFBQADggEBAGBl8g1ru2hhrmhfQh+eaZ7wbKqgeU6i W1qtZzyV0DHCBS2xQI++4ynrbwSbP9MmMYnQHnh01bTbhOSTjEmXFqJWFvOlhQMA ecw0cBX0dpcTctkF+uMnT4WGOHBJMmt0zCtFT43GQ357jh4OM8O+lEwa9cvMXgWu gppzKiTjJ8lPfQQ+RBIAKpmXR1B3HCz3dapTWP0N+0uGz1jQUOG3Ls5xVXk8Qkk5 40w4+28k/O71d5rxXn8OszmKJhJxAHvJ6eDHuzkBv4/ZuSI4x6DIlWy9Xo44e5/8 JQSSd4dUX5eHlKTzWrNLrL4FjBahdX/cTyMaSBFYkRdJGSJfO69R/SQ= MIIERTCCAy2gAwIBAgIRANfH/jL50mGPJt75G3eExcIwDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0wOTEwMjkwMDAwMDBaFw0xMjEwMjgyMzU5NTlaMIGUMQswCQYD VQQGEwJGUjEOMAwGA1UEBxMFUGFyaXMxPDA6BgNVBAoTM0Vjb2xlIFN1cGVyaWV1 cmUgZGUgUGh5c2lxdWUgZXQgQ2hpbWllIEluZHVzdHJpZWxsZTEdMBsGA1UECxMU U2VydmljZSBJbmZvcm1hdGlxdWUxGDAWBgNVBAMUDyoud2lraS5lc3BjaS5mcjCB nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAzcs33AruAcWzpT4uAJRSianCa8bZ dNndEbRcqe2NnTY1hoyBOQs5GswU9IdAc7BC6gK0rGHQ3ntaseDcty26xeT68/73 9P0gUIbvpFouIUpTHVSovK+5YgcgKsB3JeW61NadSu+ANT2Tver24hApq/C4th/1 gScdQY0ZqFYlCqkCAwEAAaOCAXEwggFtMB8GA1UdIwQYMBaAFAy9k2gM896ro0lr KzdXR+qQ47ntMB0GA1UdDgQWBBS1n5mbI/TmGbPDCF1WTjqKA9mfkzAOBgNVHQ8B Af8EBAMCBaAwDAYDVR0TAQH/BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB BQUHAwIwGAYDVR0gBBEwDzANBgsrBgEEAbIxAQICHTA6BgNVHR8EMzAxMC+gLaAr hilodHRwOi8vY3JsLnRjcy50ZXJlbmEub3JnL1RFUkVOQVNTTENBLmNybDBtBggr BgEFBQcBAQRhMF8wNQYIKwYBBQUHMAKGKWh0dHA6Ly9jcnQudGNzLnRlcmVuYS5v cmcvVEVSRU5BU1NMQ0EuY3J0MCYGCCsGAQUFBzABhhpodHRwOi8vb2NzcC50Y3Mu dGVyZW5hLm9yZzApBgNVHREEIjAggg8qLndpa2kuZXNwY2kuZnKCDXdpa2kuZXNw Y2kuZnIwDQYJKoZIhvcNAQEFBQADggEBAGBl8g1ru2hhrmhfQh+eaZ7wbKqgeU6i W1qtZzyV0DHCBS2xQI++4ynrbwSbP9MmMYnQHnh01bTbhOSTjEmXFqJWFvOlhQMA ecw0cBX0dpcTctkF+uMnT4WGOHBJMmt0zCtFT43GQ357jh4OM8O+lEwa9cvMXgWu gppzKiTjJ8lPfQQ+RBIAKpmXR1B3HCz3dapTWP0N+0uGz1jQUOG3Ls5xVXk8Qkk5 40w4+28k/O71d5rxXn8OszmKJhJxAHvJ6eDHuzkBv4/ZuSI4x6DIlWy9Xo44e5/8 JQSSd4dUX5eHlKTzWrNLrL4FjBahdX/cTyMaSBFYkRdJGSJfO69R/SQ= Emmanuel Dreyfus Emmanuel.Dreyfus@espci.fr Jean-Jacques Puig Jean-Jacques.Puig@espci.fr www.esup-portail.org CN=www.esup-portail.org,O=Universite de Valenciennes,C=FR MIIC1TCCAj6gAwIBAgIJALC5bLepNyGeMA0GCSqGSIb3DQEBBQUAMFExCzAJBgNV BAYTAkZSMSMwIQYDVQQKExpVbml2ZXJzaXRlIGRlIFZhbGVuY2llbm5lczEdMBsG A1UEAxMUd3d3LmVzdXAtcG9ydGFpbC5vcmcwHhcNMDkxMTA0MTM0ODIwWhcNMjkx MDMwMTM0ODIwWjBRMQswCQYDVQQGEwJGUjEjMCEGA1UEChMaVW5pdmVyc2l0ZSBk ZSBWYWxlbmNpZW5uZXMxHTAbBgNVBAMTFHd3dy5lc3VwLXBvcnRhaWwub3JnMIGf MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDc7VR1FeYA/AvlXQ53yEsnkHjAQ45K Pjs/tUaQk1cUt7eAO4XYiD/LWp/2JyLyDYN5Z395CBtvA+9VpBLKR/NIBxtPeevp FNue5mFLOMwpN1rUCPA6XhMrHVXoqivQF7WRbmCTD0NFsKf1kDvlXRAl+olQznUu iK07e/Xqmu29TwIDAQABo4G0MIGxMB0GA1UdDgQWBBTLmCSQ3Fzd6NM8ZhZPebmD 5v5L2TCBgQYDVR0jBHoweIAUy5gkkNxc3ejTPGYWT3m5g+b+S9mhVaRTMFExCzAJ BgNVBAYTAkZSMSMwIQYDVQQKExpVbml2ZXJzaXRlIGRlIFZhbGVuY2llbm5lczEd MBsGA1UEAxMUd3d3LmVzdXAtcG9ydGFpbC5vcmeCCQCwuWy3qTchnjAMBgNVHRME BTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBAMq/HawqvYcWRMmILWr0kk/HS3UbEB9a bel77CDj2ADQ85Xn9RM9uqMULqrLZTj1ZLZzKZnmZRqAqgaresiOkh0WBVbRjUqL 0XHRjhUV/9/ACLbhriyKE4MaXX6jW9xUBzq8ITpnOoFtqT1l2CvPbg7Pea9WbIoh cNYVn9tolV1A listes.esup-portail.org CN=listes.esup-portail.org,O=ESUP,C=FR MIICmzCCAgSgAwIBAgIJAN9Ehr2+wcfdMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNV BAYTAkZSMQ0wCwYDVQQKEwRFU1VQMSAwHgYDVQQDExdsaXN0ZXMuZXN1cC1wb3J0 YWlsLm9yZzAeFw0wODA2MTAwODQzMDBaFw0yODA2MDUwODQzMDBaMD4xCzAJBgNV BAYTAkZSMQ0wCwYDVQQKEwRFU1VQMSAwHgYDVQQDExdsaXN0ZXMuZXN1cC1wb3J0 YWlsLm9yZzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA5N0v0uAJYXGC7nyJ asYobomHv9z7X1JZuKjyrkNjGoagYrDT1X9/ZGPuV+PBehO77QYhzKFnnSrKox3U 5o5cLcgZRaY0Euem2rC8cLCSm076ZB/4AuB2Kle7jGk4Q7UtDWFZ8NS3iSvFznEM J7BgPB/R5OXq5BbOmxEtOdfgaYUCAwEAAaOBoDCBnTAdBgNVHQ4EFgQUQ8+wfq+t 4qE5f4uUsSHN6RQqZkQwbgYDVR0jBGcwZYAUQ8+wfq+t4qE5f4uUsSHN6RQqZkSh QqRAMD4xCzAJBgNVBAYTAkZSMQ0wCwYDVQQKEwRFU1VQMSAwHgYDVQQDExdsaXN0 ZXMuZXN1cC1wb3J0YWlsLm9yZ4IJAN9Ehr2+wcfdMAwGA1UdEwQFMAMBAf8wDQYJ KoZIhvcNAQEFBQADgYEAJWZZiIYDJ5pKCXEUkvT/yakEScjlzdQv41Xh6+Q3BixE ybGerTynv233yNY8yC0v4RDhFC5gD6T22cz33pAmBWp/U+IMLMfb6EQ/DSdZZyh3 uLooFbururT4bbZdDhsmi6wpdgnYLbl5terbPc8lxloCyVSEwjNif7hKKt1qD/g= listes.esup-portail.org CN=listes.esup-portail.org,O=ESUP,C=FR MIICmzCCAgSgAwIBAgIJAN9Ehr2+wcfdMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNV BAYTAkZSMQ0wCwYDVQQKEwRFU1VQMSAwHgYDVQQDExdsaXN0ZXMuZXN1cC1wb3J0 YWlsLm9yZzAeFw0wODA2MTAwODQzMDBaFw0yODA2MDUwODQzMDBaMD4xCzAJBgNV BAYTAkZSMQ0wCwYDVQQKEwRFU1VQMSAwHgYDVQQDExdsaXN0ZXMuZXN1cC1wb3J0 YWlsLm9yZzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA5N0v0uAJYXGC7nyJ asYobomHv9z7X1JZuKjyrkNjGoagYrDT1X9/ZGPuV+PBehO77QYhzKFnnSrKox3U 5o5cLcgZRaY0Euem2rC8cLCSm076ZB/4AuB2Kle7jGk4Q7UtDWFZ8NS3iSvFznEM J7BgPB/R5OXq5BbOmxEtOdfgaYUCAwEAAaOBoDCBnTAdBgNVHQ4EFgQUQ8+wfq+t 4qE5f4uUsSHN6RQqZkQwbgYDVR0jBGcwZYAUQ8+wfq+t4qE5f4uUsSHN6RQqZkSh QqRAMD4xCzAJBgNVBAYTAkZSMQ0wCwYDVQQKEwRFU1VQMSAwHgYDVQQDExdsaXN0 ZXMuZXN1cC1wb3J0YWlsLm9yZ4IJAN9Ehr2+wcfdMAwGA1UdEwQFMAMBAf8wDQYJ KoZIhvcNAQEFBQADgYEAJWZZiIYDJ5pKCXEUkvT/yakEScjlzdQv41Xh6+Q3BixE ybGerTynv233yNY8yC0v4RDhFC5gD6T22cz33pAmBWp/U+IMLMfb6EQ/DSdZZyh3 uLooFbururT4bbZdDhsmi6wpdgnYLbl5terbPc8lxloCyVSEwjNif7hKKt1qD/g= ec-nantes.fr MIIDODCCAiCgAwIBAgIVAJo2ABzrdqEuYQPEMg3AUqxh974mMA0GCSqGSIb3DQEB BQUAMB4xHDAaBgNVBAMTE3NoaWJiby5lYy1uYW50ZXMuZnIwHhcNMDkwNjIzMTUy MzQ4WhcNMjkwNjIzMTUyMzQ4WjAeMRwwGgYDVQQDExNzaGliYm8uZWMtbmFudGVz LmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkKdUKM4/DHJDjU4M wYoBAjsKU+LuXIELLk25O2l2qdHDvvXNli+i5dlCo87w+os/v7eUadHxCe+76G6b HiUuiMYVGuL1G27QA1AUOG1vAC0mbBIetw3ovME+LkiBwXQqTOlshYq7FaizifwX HGvn3qskkAHg29ZKvBsVyFka891bwvUAbiFjho+dwT/v+A4nXJWzv6vvsGw+u16m XhMyUpZjxGek9/7LpOjK+j9DNWn0wP9LAiEbLr3n7jguPLBBAC6f70U671Zdnf3R mBJkAYRe+YdpYuuVGA5/oIPZGcNb6VBYEH0wxgP+7BpiPoYUqVpiCsKc9FVuFKWG eZzi6wIDAQABo20wazBKBgNVHREEQzBBghNzaGliYm8uZWMtbmFudGVzLmZyhipo dHRwczovL3NoaWJiby5lYy1uYW50ZXMuZnIvaWRwL3NoaWJib2xldGgwHQYDVR0O BBYEFKJXfKXL/okbKTLodXy6vDPmJc8BMA0GCSqGSIb3DQEBBQUAA4IBAQBKmvA3 m29NOTfsDcF2X2zSok+1L9aDG/EGK28kVuojf2hp3GQMpdjXQ/05CtqYtcNDNBOt 2rcopaZQsIRdiaU/hcxT/6JUsacFrowdBbpkNxAAuZ9ZJGUwEosSL61TkX9oaaFP NCaSmFdeleFd7KVMhtOkDy5+BQC9tJyraO5MqPUm5Q0QwXQN84al67IlnhIg0sNc tuTqkhqTxNCAnLzSCtBB/QB36Ao/0hwAHxo6AbFVGQDd2BRhsqQpcApZpb1oDFEh bhRZNLT/IXdDvj9i4zhAYNSRRVQ1vmyZOCoyk8wHLcWSRnurt8bbK2V2DxI0TKZh +LPVwWXes1OQooJD urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Ecole Centrale de Nantes Ecole Centrale de Nantes http://unknown.site.com Guyomarc'h cri-sys@ec-nantes.fr emn.fr MIIDJDCCAgygAwIBAgIVAJZdt1xPd7UWKJgii2kanwcKApotMA0GCSqGSIb3DQEB BQUAMBkxFzAVBgNVBAMTDm50ZS5nZW10ZWNoLmZyMB4XDTA5MDUyMDE3MjgyNFoX DTI5MDUyMDE3MjgyNFowGTEXMBUGA1UEAxMObnRlLmdlbXRlY2guZnIwggEiMA0G CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC4iCTgrLcSAZX5/Lvf3AIy7IUEL0dH WFyInLn9KME0MwePaECP/y7/GkdmfseeUUvEXPVgEIviQjgqN46wW0dg4G+CdBhw VLr+msYPS5upRMnmGuhtyovd425MhUBMRPn0ugicPwQF2u7wqM27SsimUUPZojZj IZ4pB244wrF+iFAcwPhvQo7pzEi5nzSisrWhVD3oxYp2nCwNQGsl6ClGr8gUeu8/ uIAuwP5gLjBV4WLlObeDw3oudCc8RhBtEHevmcO10TAo67Ny7LT+4hKC+OV79sAQ us8coX2KRr2nqdCYdIKuhtYmaoZdi44PcdfGPzqgQvfsJYGhllVED+LrAgMBAAGj YzBhMEAGA1UdEQQ5MDeCDm50ZS5nZW10ZWNoLmZyhiVodHRwczovL250ZS5nZW10 ZWNoLmZyL2lkcC9zaGliYm9sZXRoMB0GA1UdDgQWBBSiUapEWm278Sxm5q+fQP2N STunvjANBgkqhkiG9w0BAQUFAAOCAQEAe5xGN3CE9neVaPtex7sVpzIkNqtkoHWN jtDNpIWy+Uyv8eO9iBsdufVxmkCznTOqDggis3g6AeSHzsy2+LILeuIOq1hXcHXR O1WbkwBXfOzgEokck5HY/n4oWyJGnL9zoo6hE5GnG6sOuotxoquUO1jM/nEXfH+Y xuxFuAJhtGsxX+IKX7q9UQtmWodSeKZq09RjkIN5nEaJnBz3EKiriRxilPtlCjHS WXvTzCxC7xk1+kCao131/bzEtbti5aXRVPrO0Z61nXwQPsxds+6PNaRmx27CLb0P IPUU8qHH25+VWAP/+xbiYvjkfnKh31IHhDHHM47hBpibHchhCe680w== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient emn.fr MIIDJDCCAgygAwIBAgIVAJZdt1xPd7UWKJgii2kanwcKApotMA0GCSqGSIb3DQEB BQUAMBkxFzAVBgNVBAMTDm50ZS5nZW10ZWNoLmZyMB4XDTA5MDUyMDE3MjgyNFoX DTI5MDUyMDE3MjgyNFowGTEXMBUGA1UEAxMObnRlLmdlbXRlY2guZnIwggEiMA0G CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC4iCTgrLcSAZX5/Lvf3AIy7IUEL0dH WFyInLn9KME0MwePaECP/y7/GkdmfseeUUvEXPVgEIviQjgqN46wW0dg4G+CdBhw VLr+msYPS5upRMnmGuhtyovd425MhUBMRPn0ugicPwQF2u7wqM27SsimUUPZojZj IZ4pB244wrF+iFAcwPhvQo7pzEi5nzSisrWhVD3oxYp2nCwNQGsl6ClGr8gUeu8/ uIAuwP5gLjBV4WLlObeDw3oudCc8RhBtEHevmcO10TAo67Ny7LT+4hKC+OV79sAQ us8coX2KRr2nqdCYdIKuhtYmaoZdi44PcdfGPzqgQvfsJYGhllVED+LrAgMBAAGj YzBhMEAGA1UdEQQ5MDeCDm50ZS5nZW10ZWNoLmZyhiVodHRwczovL250ZS5nZW10 ZWNoLmZyL2lkcC9zaGliYm9sZXRoMB0GA1UdDgQWBBSiUapEWm278Sxm5q+fQP2N STunvjANBgkqhkiG9w0BAQUFAAOCAQEAe5xGN3CE9neVaPtex7sVpzIkNqtkoHWN jtDNpIWy+Uyv8eO9iBsdufVxmkCznTOqDggis3g6AeSHzsy2+LILeuIOq1hXcHXR O1WbkwBXfOzgEokck5HY/n4oWyJGnL9zoo6hE5GnG6sOuotxoquUO1jM/nEXfH+Y xuxFuAJhtGsxX+IKX7q9UQtmWodSeKZq09RjkIN5nEaJnBz3EKiriRxilPtlCjHS WXvTzCxC7xk1+kCao131/bzEtbti5aXRVPrO0Z61nXwQPsxds+6PNaRmx27CLb0P IPUU8qHH25+VWAP/+xbiYvjkfnKh31IHhDHHM47hBpibHchhCe680w== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Ecole des Mines de Nantes Ecole des Mines de Nantes http://unknown.site.com Christian Janin Christian.Janin@emn.fr Alain Bouyahyiaoui Alain.Bouyahyiaoui@emn.fr cape.emn.fr CN=cape.emn.fr,OU=SIC,O=Ecole des Mines de Nantes,L=Nantes cedex 3,C=FR MIIECjCCAvKgAwIBAgIQBycTa1WrHveaomDVnDfS0TANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTEwMDIxNTAwMDAwMFoXDTEzMDIxNDIzNTk1OVowbjELMAkGA1UE BhMCRlIxFzAVBgNVBAcTDk5hbnRlcyBjZWRleCAzMSIwIAYDVQQKExlFY29sZSBk ZXMgTWluZXMgZGUgTmFudGVzMQwwCgYDVQQLEwNTSUMxFDASBgNVBAMTC2NhcGUu ZW1uLmZyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDY/7jzjB8dsHBNwcI8 AJdCiLeT1k3D67C1OZXkiSpU7rqCwHR1dUSSrULMsgWPnrdYo/1RQbY6ZfWhxZ8s iubsu/HLiaJwrjS1kIEjNUrYsrvjaT0aUnEYPROSj7hjSTpXvArshmE3nX9WG6yR uAnRCOUw2gMR1hlTtNxnKNzF0wIDAQABo4IBXjCCAVowHwYDVR0jBBgwFoAUDL2T aAzz3qujSWsrN1dH6pDjue0wHQYDVR0OBBYEFEBs3SvBRDfiw30ayfF+QK5aRara MA4GA1UdDwEB/wQEAwIFoDAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUF BwMBBggrBgEFBQcDAjAYBgNVHSAEETAPMA0GCysGAQQBsjEBAgIdMDoGA1UdHwQz MDEwL6AtoCuGKWh0dHA6Ly9jcmwudGNzLnRlcmVuYS5vcmcvVEVSRU5BU1NMQ0Eu Y3JsMG0GCCsGAQUFBwEBBGEwXzA1BggrBgEFBQcwAoYpaHR0cDovL2NydC50Y3Mu dGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcnQwJgYIKwYBBQUHMAGGGmh0dHA6Ly9v Y3NwLnRjcy50ZXJlbmEub3JnMBYGA1UdEQQPMA2CC2NhcGUuZW1uLmZyMA0GCSqG SIb3DQEBBQUAA4IBAQCM3R0xtQRSuIN4IrRGO5IMW+XVMVbOjrsCSH3wGgy7b1Hz 2QiBID5bdc8h29jorF0P6i+ssHkhZfpRLsk9FfjH3e2092iIKv23APFvCk3FWMVp zfB6gsd6SgF4oLplozj5Kbfmb2oK/j1sTTemZbm6dARaHuZx+v3jmqEgo7mqJJeL ANaDK6AqRMwtALygx9xEdsGhp06751qipVxNeNdQTfa8GMT2IF8GFhklwOr5quva MZF1S0LH4CQePPf/Ytv2H4Bp/Lo1maxcne76tXEgV4isKcKAFd3cRmVtuJFUS3LN H6A8z4MgrydfAJVuvb1jhVUu2YcmlLYWLAbpuG/W cape.emn.fr CN=cape.emn.fr,OU=SIC,O=Ecole des Mines de Nantes,L=Nantes cedex 3,C=FR MIIECjCCAvKgAwIBAgIQBycTa1WrHveaomDVnDfS0TANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTEwMDIxNTAwMDAwMFoXDTEzMDIxNDIzNTk1OVowbjELMAkGA1UE BhMCRlIxFzAVBgNVBAcTDk5hbnRlcyBjZWRleCAzMSIwIAYDVQQKExlFY29sZSBk ZXMgTWluZXMgZGUgTmFudGVzMQwwCgYDVQQLEwNTSUMxFDASBgNVBAMTC2NhcGUu ZW1uLmZyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDY/7jzjB8dsHBNwcI8 AJdCiLeT1k3D67C1OZXkiSpU7rqCwHR1dUSSrULMsgWPnrdYo/1RQbY6ZfWhxZ8s iubsu/HLiaJwrjS1kIEjNUrYsrvjaT0aUnEYPROSj7hjSTpXvArshmE3nX9WG6yR uAnRCOUw2gMR1hlTtNxnKNzF0wIDAQABo4IBXjCCAVowHwYDVR0jBBgwFoAUDL2T aAzz3qujSWsrN1dH6pDjue0wHQYDVR0OBBYEFEBs3SvBRDfiw30ayfF+QK5aRara MA4GA1UdDwEB/wQEAwIFoDAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUF BwMBBggrBgEFBQcDAjAYBgNVHSAEETAPMA0GCysGAQQBsjEBAgIdMDoGA1UdHwQz MDEwL6AtoCuGKWh0dHA6Ly9jcmwudGNzLnRlcmVuYS5vcmcvVEVSRU5BU1NMQ0Eu Y3JsMG0GCCsGAQUFBwEBBGEwXzA1BggrBgEFBQcwAoYpaHR0cDovL2NydC50Y3Mu dGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcnQwJgYIKwYBBQUHMAGGGmh0dHA6Ly9v Y3NwLnRjcy50ZXJlbmEub3JnMBYGA1UdEQQPMA2CC2NhcGUuZW1uLmZyMA0GCSqG SIb3DQEBBQUAA4IBAQCM3R0xtQRSuIN4IrRGO5IMW+XVMVbOjrsCSH3wGgy7b1Hz 2QiBID5bdc8h29jorF0P6i+ssHkhZfpRLsk9FfjH3e2092iIKv23APFvCk3FWMVp zfB6gsd6SgF4oLplozj5Kbfmb2oK/j1sTTemZbm6dARaHuZx+v3jmqEgo7mqJJeL ANaDK6AqRMwtALygx9xEdsGhp06751qipVxNeNdQTfa8GMT2IF8GFhklwOr5quva MZF1S0LH4CQePPf/Ytv2H4Bp/Lo1maxcne76tXEgV4isKcKAFd3cRmVtuJFUS3LN H6A8z4MgrydfAJVuvb1jhVUu2YcmlLYWLAbpuG/W emse.fr MIIDIzCCAgugAwIBAgIUWG4OdOHMXs/jWUMbrVKK/qGFpQgwDQYJKoZIhvcNAQEF BQAwGTEXMBUGA1UEAxMOc2hpYmJvLmVtc2UuZnIwHhcNMTEwMTI1MTUxOTAzWhcN MzEwMTI1MTUxOTAzWjAZMRcwFQYDVQQDEw5zaGliYm8uZW1zZS5mcjCCASIwDQYJ KoZIhvcNAQEBBQADggEPADCCAQoCggEBAIcRRG3bC6uPGH2dcbNjJvqCvFfy3P3p joVSK2SVXe1rqJ/mV0PBzyAi0grECmHoCoM8p5wg6IxdOTVrtnXEf4Wfg70bMGQY B/3BA5mXlO5gn9sJD/xx89b+vEJdIjAo8XHLjeLXlM5Om9f69jIxgr8RvmDHFl3E DzeCiNLURAB10ZgwwMjukIyPoFg7Hp77NH85/hni4yG1/7e82i1eKir4IGujDk3y UCc3TIPxLFYEBccoupZ6NfYn7LHgeJOHZktkNjSISyU7ZWlk7xBKrYijTbZmfWBm QxKaaAm/vhj7JgxVUdlgickTgyUZ4wptyHENPK6CLstOEU7eZVksgE0CAwEAAaNj MGEwQAYDVR0RBDkwN4IOc2hpYmJvLmVtc2UuZnKGJWh0dHBzOi8vc2hpYmJvLmVt c2UuZnIvaWRwL3NoaWJib2xldGgwHQYDVR0OBBYEFIeWYn8hGuMdpEWP1VMxfDVP VoIhMA0GCSqGSIb3DQEBBQUAA4IBAQBhsFzDv5g8+KI9HPYtus470fLWG6QeoPJS okvD3oKa25+3hfen1fUgNEg4mLmcKG1+y/Ej9u6UiJrjZeo/iHIu3VSh9KClDAal BRbo30th1KQ122Nhkz1Hzt0MuVprMJbVzNo3jRfTw6iFtadaVPyC1koEvn5FucTD bpyOZ6qLHkuuEPoYgtyn0h/mFudb/XGDD8exhidz7CkuO6IWfT/HB9RC4nf7IAHW 060v4YqkJ/y5F87gyOTwsLlNA1vWuJ4L90/fgzhJ15sp3l38Dr8XPnaegFYRVyAM mG4EGyP6qUE1uSrPxMk9GFtp+QkIXdDDGi5u9iIkLzHPYUMB4IfI urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Ecole des Mines de Saint-Etienne Ecole des Mines de Saint-Etienne http://unknown.site.com Dominique BERTHET dberthet@emse.fr Elisabeth THONNERIEUX thonnerieux@emse.fr ent-etrs.net MIIDKzCCAhOgAwIBAgIUXvJvEuE8bWQyAkG8bh3m7vmoqzgwDQYJKoZIhvcNAQEF BQAwGzEZMBcGA1UEAxMQY2FzLmVudC1ldHJzLm5ldDAeFw0xMTAzMjMxMTMzMDJa Fw0xNjAzMjMxMTMzMDJaMBsxGTAXBgNVBAMTEGNhcy5lbnQtZXRycy5uZXQwggEi MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCHJPDrl8egS/TqUaTu75zjeaWy 7EEl0GgROrdoy4vrvKYOmofMHol90Epqd2e6HVhqUOnqWuUhm95lHfThMezBIPBo 0qOY1QcGstS5allQ/iRY+ODRe3e0CCraHt6JGkckseVDrwlRmZImpJqZkpQyk1Yc fL9mlOrnC9lPrN5THoaazjcREicc0crehoyLkzoZzWWP6vzNMmyW2L9zqUqhbWhP UG6hZQ4c+pRUpjE+EEedzgMnpPy+M5BNcCRyCUCNwL11EvoYEYhcMNvR1x/qS+l0 qqNR2qurS7W/hChAbBjyFw0nWzsAwS6NtiUYgjJ4I3uhOSg54hBQ5lqUTeNbAgMB AAGjZzBlMEQGA1UdEQQ9MDuCEGNhcy5lbnQtZXRycy5uZXSGJ2h0dHBzOi8vY2Fz LmVudC1ldHJzLm5ldC9pZHAvc2hpYmJvbGV0aDAdBgNVHQ4EFgQUiY4Lpt2DpIZo pwRHJPz4FWXDEcowDQYJKoZIhvcNAQEFBQADggEBAFGniMt16npf3zfKPwWo/bXn bivyG35m82xTRKspKLhUHkmXYN3ZaKz9Z44DShDGPlpddzaM7vFZqiEPQwu4Cw8G c3I06F53JEzhZgD9bScVrvONkZD4Si2WLqBpJX6vld2VJ6ptj+Sp0NpuO68tBYV3 8kLkqSXtbGoPO+BmYG+1giEDSxIX/trYzzkzCtJgfZbPlnF0osjOl+vcyBdzwBdF Ww4LysygxWHWOWMRfDDZBdWiXN5hxqwt2AlXbg7bVUVs6yN077J+Cvrs3fJfSARB GE/cxG6DtyEQnF1mr7LZN8U7uNLg0uff90fHQPYL2y0ERDV04Ve9P0DVA0YjWuQ= urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Ecole des Transmissions - Cesson Sévigné Ecole des Transmissions - Cesson Sévigné http://unknown.site.com Patrick JAOUEN patrick.jaouen@ent-etrs.net Dominique MULLER dominique.muller@ent-etrs.net st-cyr.terre.defense.gouv.fr MIIDbjCCAlagAwIBAgIVANw8PR6YH5T2dmzYa0+BVTWT8L5xMA0GCSqGSIb3DQEB BQUAMCsxKTAnBgNVBAMTIGNhcy5zdC1jeXIudGVycmUuZGVmZW5zZS5nb3V2LmZy MB4XDTA5MDIyNDE0MDgyMVoXDTI5MDIyNDE0MDgyMVowKzEpMCcGA1UEAxMgY2Fz LnN0LWN5ci50ZXJyZS5kZWZlbnNlLmdvdXYuZnIwggEiMA0GCSqGSIb3DQEBAQUA A4IBDwAwggEKAoIBAQCglhUEpGlM6njWTwNSv9YQJYSOjElt/d+t+zf7DodWanAz 74WSJKLiARClYxevIXiRe3YWSlPbMnNpwMhycQMStSZVIuW5WKNXyLNm3sdgilEi tElL5FTnTb5PF58yKlJSWxlol0lqoEg3tO0sYU/4iRlo7ImcLvkDVGPmoUgYGrmy 7gsBPlf7Xb06Naa4xRvo7j0wzlnPy4PD8SXEaHkkYyEehoJa5u907Zxl+P1AZMzs 3SNlu99Gm9CfghmHzEmtpaF+9bwioDzOyMABzGqncrq3l+hqnDi6K2+lVieHaUf1 0yHmlXKTNGgjXc2wBM2c60PQhFnU9beRpPT2Qa1bAgMBAAGjgYgwgYUwZAYDVR0R BF0wW4IgY2FzLnN0LWN5ci50ZXJyZS5kZWZlbnNlLmdvdXYuZnKGN2h0dHBzOi8v Y2FzLnN0LWN5ci50ZXJyZS5kZWZlbnNlLmdvdXYuZnIvaWRwL3NoaWJib2xldGgw HQYDVR0OBBYEFDE7bJFpR9H+7WO303Wj5a7aE9G9MA0GCSqGSIb3DQEBBQUAA4IB AQBR6BJEnGM+Y0/Dkw+6DKqJAs+ryXRyCL9lUWWaLT39RItOmZmPljt1LCIPn/6v NiwLtdbGYF5HmL5l9soaVhTO4ZHcSuBFH7NYOLPJtDXxinfT3CY9dWkNBDUl9p9V GgqanKTbB/HT8VHKwVULufd1RHiNfm+9MlJx1jln+KZGZbd8M4iwWOiG5z4f4lCD El4VVe053i2Bn8on/zvrUj3FvJRRt1xRgPecVrUrTTNAWYQGHH7KvsPNFqx8DA4L 6N0Zw+YCL1OhzCoW18pc3yhVpXYCuuEvoFY0mlB74OpfULQ0cyoGE/641IcnitTV AyNij5Syavi1Vz/fsHxnh3gq urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Ecoles de Saint- Cyr Coëtquidan Ecoles de Saint- Cyr Coëtquidan http://unknown.site.com Patrick Jaouen patrick.jaouen@st-cyr.terre-net.defense.gouv.fr Franck Le Calloch franck.lecalloch@st-cyr.terre-net.defense.gouv.fr educagri.fr MIIEjDCCA3SgAwIBAgIRAJTpAXwdFoBjLuH6SIhPq7cwDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0xMDAxMTMwMDAwMDBaFw0xMzAxMTIyMzU5NTlaMGcxCzAJBgNV BAYTAkZSMQ4wDAYDVQQHEwVEaWpvbjEWMBQGA1UEChMNQWdyb3N1cCBEaWpvbjEW MBQGA1UECxMNRWR1dGVyLUNORVJUQTEYMBYGA1UEAxMPY2FzLmVkdWNhZ3JpLmZy MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1LwsM6XLKZ8r94YzLRN0 Xm2CZztRrsBGBdDQy/Pc0VLCTO8Jm84nITedijKQ0/GSEFP2pZakRhdY/iujvbQ0 KgZ47Y5Sb2BNJJBPfk6D6xe5Z/uQ/JvHXLtfnDIg3Tj0JXdHJq4MKxV69F7S8ETV 04nrYNl48BvBekehqH9T6/NabI+mfT6tLyutSbPI+IhfiGA1c+JhK1ANLZP2VU76 omCk5msWzrK8qSGhww40AwHDMoph4tXBL4lDu2N/eGddn0scPLsbBmhVUKoXm2Vu K9/P8XxClwfLYhe19eFKPijHErmp+Z9SuhEdWmH6gWp/dctECw5EuK/4Opi9X3qD bwIDAQABo4IBYjCCAV4wHwYDVR0jBBgwFoAUDL2TaAzz3qujSWsrN1dH6pDjue0w HQYDVR0OBBYEFMHxoJIRi88ezxktrPYyJAP7hfuMMA4GA1UdDwEB/wQEAwIFoDAM BgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAYBgNV HSAEETAPMA0GCysGAQQBsjEBAgIdMDoGA1UdHwQzMDEwL6AtoCuGKWh0dHA6Ly9j cmwudGNzLnRlcmVuYS5vcmcvVEVSRU5BU1NMQ0EuY3JsMG0GCCsGAQUFBwEBBGEw XzA1BggrBgEFBQcwAoYpaHR0cDovL2NydC50Y3MudGVyZW5hLm9yZy9URVJFTkFT U0xDQS5jcnQwJgYIKwYBBQUHMAGGGmh0dHA6Ly9vY3NwLnRjcy50ZXJlbmEub3Jn MBoGA1UdEQQTMBGCD2Nhcy5lZHVjYWdyaS5mcjANBgkqhkiG9w0BAQUFAAOCAQEA PgNDyRyGYpVa02IzgmdN9yexKnZVS+QhvpBnYusS58ueD9Ey3QuSn4aDJk4JpqRV PjQ9FJ+ZMcq07HvrVEEinWSs4UuMQIOrI2EEex90s3JijWq2ru7SeueSTPk0sjiF zIXQQeRwRMZjbz9FL3RiM4zhQzk6RIhJkcGZQLm3oqaw9hZFYxAyAM9UPyjdBH8B So+pEjejX6/HywKDbESeYPtw5EgliwaLYB3fHuHVFwjGOGAwt8/EiqOW95N5yTEL DuqSpF1ZwkNOXPdw/RVOZ1Qrv6uqclI5B9TL5dP6gSFc82Ie6DtISdQkCW+3eAxs ODwi8kDlJ5Q0q6NSzHPYsw== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Educagri - Enseignement Agricole Educagri - Enseignement Agricole http://unknown.site.com Albaro HOLGADO albaro.holgado@educagri.fr Khalid FARRAHE khalid.farrahe@educagri.fr sec.cru.fr CN=sec.cru.fr,O=Comite Reseau des Universites,C=FR MIICrzCCAhigAwIBAgIBADANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQGEwJGUjEm MCQGA1UEChMdQ29taXRlIFJlc2VhdSBkZXMgVW5pdmVyc2l0ZXMxEzARBgNVBAMT CnNlYy5jcnUuZnIwHhcNMDgwNDA0MTI0NDAzWhcNMjgwMzMwMTI0NDAzWjBKMQsw CQYDVQQGEwJGUjEmMCQGA1UEChMdQ29taXRlIFJlc2VhdSBkZXMgVW5pdmVyc2l0 ZXMxEzARBgNVBAMTCnNlYy5jcnUuZnIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ AoGBANQoiF84SjwkKLLcIk2F5MmBgHA0AG/t3qvzCHkDcvO6PtbwGIRTvPTB4eIX 7czslSi6OOC1XmP2nJ7Izf/We6ne2DaNJybsy/y3oPLLpVo5fGlpQAMtb/0AAXhl K9O91Ql2bLF+AfK/LROiAjyhDWs6wfAFr28rs9dVIEmBNpX5AgMBAAGjgaQwgaEw HQYDVR0OBBYEFAB7wuRjA92z4SeSdg3yOJE8OdC/MHIGA1UdIwRrMGmAFAB7wuRj A92z4SeSdg3yOJE8OdC/oU6kTDBKMQswCQYDVQQGEwJGUjEmMCQGA1UEChMdQ29t aXRlIFJlc2VhdSBkZXMgVW5pdmVyc2l0ZXMxEzARBgNVBAMTCnNlYy5jcnUuZnKC AQAwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQC9FQosoiSTYHNENfoI qTKB4rnqK2qJZ7Ic0v7gHE6Y7gqxLHawdHqmlpOxPIt/QplV+oYkHu6Y/vSYjwqj W/N7crbTmwmGmmr36xT6sakwmiFbuNY7TeeKjv5+4khaTn1T9nIpLYiV505B13aW ItB4/nSBNfRVGK8BlyRWucbUCg== sec.cru.fr CN=sec.cru.fr,O=Comite Reseau des Universites,C=FR MIICrzCCAhigAwIBAgIBADANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQGEwJGUjEm MCQGA1UEChMdQ29taXRlIFJlc2VhdSBkZXMgVW5pdmVyc2l0ZXMxEzARBgNVBAMT CnNlYy5jcnUuZnIwHhcNMDgwNDA0MTI0NDAzWhcNMjgwMzMwMTI0NDAzWjBKMQsw CQYDVQQGEwJGUjEmMCQGA1UEChMdQ29taXRlIFJlc2VhdSBkZXMgVW5pdmVyc2l0 ZXMxEzARBgNVBAMTCnNlYy5jcnUuZnIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ AoGBANQoiF84SjwkKLLcIk2F5MmBgHA0AG/t3qvzCHkDcvO6PtbwGIRTvPTB4eIX 7czslSi6OOC1XmP2nJ7Izf/We6ne2DaNJybsy/y3oPLLpVo5fGlpQAMtb/0AAXhl K9O91Ql2bLF+AfK/LROiAjyhDWs6wfAFr28rs9dVIEmBNpX5AgMBAAGjgaQwgaEw HQYDVR0OBBYEFAB7wuRjA92z4SeSdg3yOJE8OdC/MHIGA1UdIwRrMGmAFAB7wuRj A92z4SeSdg3yOJE8OdC/oU6kTDBKMQswCQYDVQQGEwJGUjEmMCQGA1UEChMdQ29t aXRlIFJlc2VhdSBkZXMgVW5pdmVyc2l0ZXMxEzARBgNVBAMTCnNlYy5jcnUuZnKC AQAwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQC9FQosoiSTYHNENfoI qTKB4rnqK2qJZ7Ic0v7gHE6Y7gqxLHawdHqmlpOxPIt/QplV+oYkHu6Y/vSYjwqj W/N7crbTmwmGmmr36xT6sakwmiFbuNY7TeeKjv5+4khaTn1T9nIpLYiV505B13aW ItB4/nSBNfRVGK8BlyRWucbUCg== MIIEfzCCA2egAwIBAgILAQAAAAABJlFlJ0IwDQYJKoZIhvcNAQEFBQAwcTELMAkG A1UEBhMCQkUxHTAbBgNVBAsTFERvbWFpbiBWYWxpZGF0aW9uIENBMRkwFwYDVQQK ExBHbG9iYWxTaWduIG52LXNhMSgwJgYDVQQDEx9HbG9iYWxTaWduIERvbWFpbiBW YWxpZGF0aW9uIENBMB4XDTEwMDEyMTE0MTIzNloXDTExMDMyMjA5NDYzNVowdjEL MAkGA1UEBhMCVVMxITAfBgNVBAsTGERvbWFpbiBDb250cm9sIFZhbGlkYXRlZDEh MB8GA1UEChMYc2RhdXRoLnNjaWVuY2VkaXJlY3QuY29tMSEwHwYDVQQDExhzZGF1 dGguc2NpZW5jZWRpcmVjdC5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGB AN63GgCt/Q3guaShb+1o3lPbjPyvnP+j4sWCNh7wWJhmA4ChozCU1Ik9+D1KzQKr 2IYIe0T9FmcSk8+MJ/MNHphrZk4uUFFnYaS8kfn8o9nD1n83qspONUlz1RJrEq/y +j4CsC/ZXv8s8yh1Wc32s6v/ArU8QKRNLZkC1PR3slrNAgMBAAGjggGVMIIBkTAf BgNVHSMEGDAWgBQ2Ek6eccQmQfH68SlMvxekUyi26zBJBggrBgEFBQcBAQQ9MDsw OQYIKwYBBQUHMAKGLWh0dHA6Ly9zZWN1cmUuZ2xvYmFsc2lnbi5uZXQvY2FjZXJ0 L2R2aGUxLmNydDA5BgNVHR8EMjAwMC6gLKAqhihodHRwOi8vY3JsLmdsb2JhbHNp Z24ubmV0L0RvbWFpblZhbDEuY3JsMB0GA1UdDgQWBBT6RQPwsOleQg31kZp8dS2D KhXxJjAJBgNVHRMEAjAAMA4GA1UdDwEB/wQEAwIE8DApBgNVHSUEIjAgBggrBgEF BQcDAQYIKwYBBQUHAwIGCisGAQQBgjcKAwMwSwYDVR0gBEQwQjBABgkrBgEEAaAy AQowMzAxBggrBgEFBQcCARYlaHR0cDovL3d3dy5nbG9iYWxzaWduLm5ldC9yZXBv c2l0b3J5LzARBglghkgBhvhCAQEEBAMCBsAwIwYDVR0RBBwwGoIYc2RhdXRoLnNj aWVuY2VkaXJlY3QuY29tMA0GCSqGSIb3DQEBBQUAA4IBAQASf9E1ixhtS/la7N/p tZmgxtBxs/vX13MfeOhTvGRg+OoIs+AfnI6tMFs4pPxD5LFBiGW1QF1r1+td8BXR tYad5eItE+JYPEDtScXWon1wNKwte2HWFwtJ8kSsu0Vv/em7m6pZHtaCt9VL3LPt CuJNa76kaRj7CdqFHhrOFFkDHfxsesmzOdxU9Sc0eSzZL10N7Js2OZQ3syjbG1YP Oi+hS5O7CGnG9SeMRTRHpjNZ7BCFdwPNq3rANXxp8ANYySV+8wy39PNAYKe/p1lD vJ4zTqNPZNLIwyBm4UNf89dadRCgT8ESuJvM8RvGCLldk4z+GMc0i34SCZ73lH/Q GBCc MIIEfzCCA2egAwIBAgILAQAAAAABJlFlJ0IwDQYJKoZIhvcNAQEFBQAwcTELMAkG A1UEBhMCQkUxHTAbBgNVBAsTFERvbWFpbiBWYWxpZGF0aW9uIENBMRkwFwYDVQQK ExBHbG9iYWxTaWduIG52LXNhMSgwJgYDVQQDEx9HbG9iYWxTaWduIERvbWFpbiBW YWxpZGF0aW9uIENBMB4XDTEwMDEyMTE0MTIzNloXDTExMDMyMjA5NDYzNVowdjEL MAkGA1UEBhMCVVMxITAfBgNVBAsTGERvbWFpbiBDb250cm9sIFZhbGlkYXRlZDEh MB8GA1UEChMYc2RhdXRoLnNjaWVuY2VkaXJlY3QuY29tMSEwHwYDVQQDExhzZGF1 dGguc2NpZW5jZWRpcmVjdC5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGB AN63GgCt/Q3guaShb+1o3lPbjPyvnP+j4sWCNh7wWJhmA4ChozCU1Ik9+D1KzQKr 2IYIe0T9FmcSk8+MJ/MNHphrZk4uUFFnYaS8kfn8o9nD1n83qspONUlz1RJrEq/y +j4CsC/ZXv8s8yh1Wc32s6v/ArU8QKRNLZkC1PR3slrNAgMBAAGjggGVMIIBkTAf BgNVHSMEGDAWgBQ2Ek6eccQmQfH68SlMvxekUyi26zBJBggrBgEFBQcBAQQ9MDsw OQYIKwYBBQUHMAKGLWh0dHA6Ly9zZWN1cmUuZ2xvYmFsc2lnbi5uZXQvY2FjZXJ0 L2R2aGUxLmNydDA5BgNVHR8EMjAwMC6gLKAqhihodHRwOi8vY3JsLmdsb2JhbHNp Z24ubmV0L0RvbWFpblZhbDEuY3JsMB0GA1UdDgQWBBT6RQPwsOleQg31kZp8dS2D KhXxJjAJBgNVHRMEAjAAMA4GA1UdDwEB/wQEAwIE8DApBgNVHSUEIjAgBggrBgEF BQcDAQYIKwYBBQUHAwIGCisGAQQBgjcKAwMwSwYDVR0gBEQwQjBABgkrBgEEAaAy AQowMzAxBggrBgEFBQcCARYlaHR0cDovL3d3dy5nbG9iYWxzaWduLm5ldC9yZXBv c2l0b3J5LzARBglghkgBhvhCAQEEBAMCBsAwIwYDVR0RBBwwGoIYc2RhdXRoLnNj aWVuY2VkaXJlY3QuY29tMA0GCSqGSIb3DQEBBQUAA4IBAQASf9E1ixhtS/la7N/p tZmgxtBxs/vX13MfeOhTvGRg+OoIs+AfnI6tMFs4pPxD5LFBiGW1QF1r1+td8BXR tYad5eItE+JYPEDtScXWon1wNKwte2HWFwtJ8kSsu0Vv/em7m6pZHtaCt9VL3LPt CuJNa76kaRj7CdqFHhrOFFkDHfxsesmzOdxU9Sc0eSzZL10N7Js2OZQ3syjbG1YP Oi+hS5O7CGnG9SeMRTRHpjNZ7BCFdwPNq3rANXxp8ANYySV+8wy39PNAYKe/p1lD vJ4zTqNPZNLIwyBm4UNf89dadRCgT8ESuJvM8RvGCLldk4z+GMc0i34SCZ73lH/Q GBCc MIIEWjCCA0KgAwIBAgILAQAAAAABH6RRcxowDQYJKoZIhvcNAQEFBQAwcTELMAkG A1UEBhMCQkUxHTAbBgNVBAsTFERvbWFpbiBWYWxpZGF0aW9uIENBMRkwFwYDVQQK ExBHbG9iYWxTaWduIG52LXNhMSgwJgYDVQQDEx9HbG9iYWxTaWduIERvbWFpbiBW YWxpZGF0aW9uIENBMB4XDTA5MDIyMzE3MDczNVoXDTEwMDIxOTA5NDYzNVowdjEL MAkGA1UEBhMCVVMxITAfBgNVBAsTGERvbWFpbiBDb250cm9sIFZhbGlkYXRlZDEh MB8GA1UEChMYc2RhdXRoLnNjaWVuY2VkaXJlY3QuY29tMSEwHwYDVQQDExhzZGF1 dGguc2NpZW5jZWRpcmVjdC5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGB AN63GgCt/Q3guaShb+1o3lPbjPyvnP+j4sWCNh7wWJhmA4ChozCU1Ik9+D1KzQKr 2IYIe0T9FmcSk8+MJ/MNHphrZk4uUFFnYaS8kfn8o9nD1n83qspONUlz1RJrEq/y +j4CsC/ZXv8s8yh1Wc32s6v/ArU8QKRNLZkC1PR3slrNAgMBAAGjggFwMIIBbDAf BgNVHSMEGDAWgBQ2Ek6eccQmQfH68SlMvxekUyi26zBJBggrBgEFBQcBAQQ9MDsw OQYIKwYBBQUHMAKGLWh0dHA6Ly9zZWN1cmUuZ2xvYmFsc2lnbi5uZXQvY2FjZXJ0 L2R2aGUxLmNydDA5BgNVHR8EMjAwMC6gLKAqhihodHRwOi8vY3JsLmdsb2JhbHNp Z24ubmV0L0RvbWFpblZhbDEuY3JsMB0GA1UdDgQWBBT6RQPwsOleQg31kZp8dS2D KhXxJjAJBgNVHRMEAjAAMA4GA1UdDwEB/wQEAwIE8DApBgNVHSUEIjAgBggrBgEF BQcDAQYIKwYBBQUHAwIGCisGAQQBgjcKAwMwSwYDVR0gBEQwQjBABgkrBgEEAaAy AQowMzAxBggrBgEFBQcCARYlaHR0cDovL3d3dy5nbG9iYWxzaWduLm5ldC9yZXBv c2l0b3J5LzARBglghkgBhvhCAQEEBAMCBsAwDQYJKoZIhvcNAQEFBQADggEBADJ+ 9UZwXRkt6X6/O6dxTXCPvUs9cORJnBtyI+PPz65DongeULYuUcthxrG4fpeuFhZQ gnksw36iokhYceAhivo5L8mjrbZTIpHd2pLHokw53pY+0OFodWipK3JvqkkEUH+I M0b8nU1yKuXkxMWgoH2E3FR0xXnVyIq5D21DkkeyMCE3MFJE06MumSFyrZ1z9mWF tqL1frTBYz7ihvqMMaa/VOf7VBmb/45lPzmj0ZGZrAI05EkmxlIfVi3X0oKAplS3 5N1uxV4lIozbMu0SQij0Jq7yXTTA/dk5ReoftLYz66MM1qTqdpq3Aspndpziek2R HmnRvrlTKy71O6pqYNQ= urn:mace:shibboleth:1.0:nameIdentifier Elsevier Shibboleth Support shibbolethsupport@elsevier.com MIIFAzCCA+ugAwIBAgILAQAAAAABLndCYgAwDQYJKoZIhvcNAQEFBQAwcTELMAkG A1UEBhMCQkUxHTAbBgNVBAsTFERvbWFpbiBWYWxpZGF0aW9uIENBMRkwFwYDVQQK ExBHbG9iYWxTaWduIG52LXNhMSgwJgYDVQQDEx9HbG9iYWxTaWduIERvbWFpbiBW YWxpZGF0aW9uIENBMB4XDTExMDMwMjE1MzMzMloXDTE2MDQyMDA5NDYzNVowdjEL MAkGA1UEBhMCVVMxITAfBgNVBAsTGERvbWFpbiBDb250cm9sIFZhbGlkYXRlZDEh MB8GA1UEChMYc2RhdXRoLnNjaWVuY2VkaXJlY3QuY29tMSEwHwYDVQQDExhzZGF1 dGguc2NpZW5jZWRpcmVjdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK AoIBAQDEjJjfvfUFzloMEB+ErmFrBw8uF20PMaMecGT0f/AgyLwi2GGCKStgzqHk RROmyeHodz84BRZkkUn4ZpTDxscNvi7g1pGmMycpUUIe9IBt5HlcdYsGaV64QgJo TMtZnvCWGqdP92XTSBMAH4JgE9ytoZqW2riwCtLbpZcvwOF3PKzzsGtSlUHKgInT Mrz0j7lX834LL4UTpBrMtmBzOxqu8v8wGuI56t4S7+l3D6mQyfVjE9NARMlVs6iD 8DDRZJ8U/f7C9uM5ktIXxH4a2/b53JTXUBzEAGfMYvVCglJUeKSRcaAehITvwc5c 6BlGoD6tLLUolWsjtNbSZmnAjFcDAgMBAAGjggGVMIIBkTAfBgNVHSMEGDAWgBQ2 Ek6eccQmQfH68SlMvxekUyi26zBJBggrBgEFBQcBAQQ9MDswOQYIKwYBBQUHMAKG LWh0dHA6Ly9zZWN1cmUuZ2xvYmFsc2lnbi5uZXQvY2FjZXJ0L2R2aGUxLmNydDA5 BgNVHR8EMjAwMC6gLKAqhihodHRwOi8vY3JsLmdsb2JhbHNpZ24ubmV0L0RvbWFp blZhbDEuY3JsMB0GA1UdDgQWBBRRCRyJ7DLndvI8W0xq76Zt5ozndDAJBgNVHRME AjAAMA4GA1UdDwEB/wQEAwIE8DApBgNVHSUEIjAgBggrBgEFBQcDAQYIKwYBBQUH AwIGCisGAQQBgjcKAwMwSwYDVR0gBEQwQjBABgkrBgEEAaAyAQowMzAxBggrBgEF BQcCARYlaHR0cDovL3d3dy5nbG9iYWxzaWduLm5ldC9yZXBvc2l0b3J5LzARBglg hkgBhvhCAQEEBAMCBsAwIwYDVR0RBBwwGoIYc2RhdXRoLnNjaWVuY2VkaXJlY3Qu Y29tMA0GCSqGSIb3DQEBBQUAA4IBAQBBC+Aw5JdfSQea+ALg3EqneURggb7W23Ox 3PKeYVpchdZLn0d24ty+HdxbESP3MRfaNLa672BZ2QOwWsYVmJevrrG93P/NbUva ILenkWpehosSleTmIJrqFuNPgD2ge7AC3loHcARDGafKOKdKyBLEX11tKEsyec6V N7HagQ4HUkjs3S4wIx9ZMTiOKXs6kqBZ6Q6zNEvfbw86c8VkKhdX8D/69cxD7X90 hUwun2VG2gbOeW8tuZBqYZfAytK0Iex4pVdNHUP4aqD58TW67cpwYunnQdNm4N1M NDzG7fFzOFz67BAdbD3D8oVMP4J/HshVQ661Uyi9Z9ZoXM0F/suy MIIFAzCCA+ugAwIBAgILAQAAAAABLndCYgAwDQYJKoZIhvcNAQEFBQAwcTELMAkG A1UEBhMCQkUxHTAbBgNVBAsTFERvbWFpbiBWYWxpZGF0aW9uIENBMRkwFwYDVQQK ExBHbG9iYWxTaWduIG52LXNhMSgwJgYDVQQDEx9HbG9iYWxTaWduIERvbWFpbiBW YWxpZGF0aW9uIENBMB4XDTExMDMwMjE1MzMzMloXDTE2MDQyMDA5NDYzNVowdjEL MAkGA1UEBhMCVVMxITAfBgNVBAsTGERvbWFpbiBDb250cm9sIFZhbGlkYXRlZDEh MB8GA1UEChMYc2RhdXRoLnNjaWVuY2VkaXJlY3QuY29tMSEwHwYDVQQDExhzZGF1 dGguc2NpZW5jZWRpcmVjdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK AoIBAQDEjJjfvfUFzloMEB+ErmFrBw8uF20PMaMecGT0f/AgyLwi2GGCKStgzqHk RROmyeHodz84BRZkkUn4ZpTDxscNvi7g1pGmMycpUUIe9IBt5HlcdYsGaV64QgJo TMtZnvCWGqdP92XTSBMAH4JgE9ytoZqW2riwCtLbpZcvwOF3PKzzsGtSlUHKgInT Mrz0j7lX834LL4UTpBrMtmBzOxqu8v8wGuI56t4S7+l3D6mQyfVjE9NARMlVs6iD 8DDRZJ8U/f7C9uM5ktIXxH4a2/b53JTXUBzEAGfMYvVCglJUeKSRcaAehITvwc5c 6BlGoD6tLLUolWsjtNbSZmnAjFcDAgMBAAGjggGVMIIBkTAfBgNVHSMEGDAWgBQ2 Ek6eccQmQfH68SlMvxekUyi26zBJBggrBgEFBQcBAQQ9MDswOQYIKwYBBQUHMAKG LWh0dHA6Ly9zZWN1cmUuZ2xvYmFsc2lnbi5uZXQvY2FjZXJ0L2R2aGUxLmNydDA5 BgNVHR8EMjAwMC6gLKAqhihodHRwOi8vY3JsLmdsb2JhbHNpZ24ubmV0L0RvbWFp blZhbDEuY3JsMB0GA1UdDgQWBBRRCRyJ7DLndvI8W0xq76Zt5ozndDAJBgNVHRME AjAAMA4GA1UdDwEB/wQEAwIE8DApBgNVHSUEIjAgBggrBgEFBQcDAQYIKwYBBQUH AwIGCisGAQQBgjcKAwMwSwYDVR0gBEQwQjBABgkrBgEEAaAyAQowMzAxBggrBgEF BQcCARYlaHR0cDovL3d3dy5nbG9iYWxzaWduLm5ldC9yZXBvc2l0b3J5LzARBglg hkgBhvhCAQEEBAMCBsAwIwYDVR0RBBwwGoIYc2RhdXRoLnNjaWVuY2VkaXJlY3Qu Y29tMA0GCSqGSIb3DQEBBQUAA4IBAQBBC+Aw5JdfSQea+ALg3EqneURggb7W23Ox 3PKeYVpchdZLn0d24ty+HdxbESP3MRfaNLa672BZ2QOwWsYVmJevrrG93P/NbUva ILenkWpehosSleTmIJrqFuNPgD2ge7AC3loHcARDGafKOKdKyBLEX11tKEsyec6V N7HagQ4HUkjs3S4wIx9ZMTiOKXs6kqBZ6Q6zNEvfbw86c8VkKhdX8D/69cxD7X90 hUwun2VG2gbOeW8tuZBqYZfAytK0Iex4pVdNHUP4aqD58TW67cpwYunnQdNm4N1M NDzG7fFzOFz67BAdbD3D8oVMP4J/HshVQ661Uyi9Z9ZoXM0F/suy MIIEfzCCA2egAwIBAgILAQAAAAABJlFlJ0IwDQYJKoZIhvcNAQEFBQAwcTELMAkG A1UEBhMCQkUxHTAbBgNVBAsTFERvbWFpbiBWYWxpZGF0aW9uIENBMRkwFwYDVQQK ExBHbG9iYWxTaWduIG52LXNhMSgwJgYDVQQDEx9HbG9iYWxTaWduIERvbWFpbiBW YWxpZGF0aW9uIENBMB4XDTEwMDEyMTE0MTIzNloXDTExMDMyMjA5NDYzNVowdjEL MAkGA1UEBhMCVVMxITAfBgNVBAsTGERvbWFpbiBDb250cm9sIFZhbGlkYXRlZDEh MB8GA1UEChMYc2RhdXRoLnNjaWVuY2VkaXJlY3QuY29tMSEwHwYDVQQDExhzZGF1 dGguc2NpZW5jZWRpcmVjdC5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGB AN63GgCt/Q3guaShb+1o3lPbjPyvnP+j4sWCNh7wWJhmA4ChozCU1Ik9+D1KzQKr 2IYIe0T9FmcSk8+MJ/MNHphrZk4uUFFnYaS8kfn8o9nD1n83qspONUlz1RJrEq/y +j4CsC/ZXv8s8yh1Wc32s6v/ArU8QKRNLZkC1PR3slrNAgMBAAGjggGVMIIBkTAf BgNVHSMEGDAWgBQ2Ek6eccQmQfH68SlMvxekUyi26zBJBggrBgEFBQcBAQQ9MDsw OQYIKwYBBQUHMAKGLWh0dHA6Ly9zZWN1cmUuZ2xvYmFsc2lnbi5uZXQvY2FjZXJ0 L2R2aGUxLmNydDA5BgNVHR8EMjAwMC6gLKAqhihodHRwOi8vY3JsLmdsb2JhbHNp Z24ubmV0L0RvbWFpblZhbDEuY3JsMB0GA1UdDgQWBBT6RQPwsOleQg31kZp8dS2D KhXxJjAJBgNVHRMEAjAAMA4GA1UdDwEB/wQEAwIE8DApBgNVHSUEIjAgBggrBgEF BQcDAQYIKwYBBQUHAwIGCisGAQQBgjcKAwMwSwYDVR0gBEQwQjBABgkrBgEEAaAy AQowMzAxBggrBgEFBQcCARYlaHR0cDovL3d3dy5nbG9iYWxzaWduLm5ldC9yZXBv c2l0b3J5LzARBglghkgBhvhCAQEEBAMCBsAwIwYDVR0RBBwwGoIYc2RhdXRoLnNj aWVuY2VkaXJlY3QuY29tMA0GCSqGSIb3DQEBBQUAA4IBAQASf9E1ixhtS/la7N/p tZmgxtBxs/vX13MfeOhTvGRg+OoIs+AfnI6tMFs4pPxD5LFBiGW1QF1r1+td8BXR tYad5eItE+JYPEDtScXWon1wNKwte2HWFwtJ8kSsu0Vv/em7m6pZHtaCt9VL3LPt CuJNa76kaRj7CdqFHhrOFFkDHfxsesmzOdxU9Sc0eSzZL10N7Js2OZQ3syjbG1YP Oi+hS5O7CGnG9SeMRTRHpjNZ7BCFdwPNq3rANXxp8ANYySV+8wy39PNAYKe/p1lD vJ4zTqNPZNLIwyBm4UNf89dadRCgT8ESuJvM8RvGCLldk4z+GMc0i34SCZ73lH/Q GBCc urn:mace:shibboleth:1.0:nameIdentifier Elsevier Shibboleth Support shibbolethsupport@elsevier.com Dave Santucci dave.santucci@elsevier.com renater.fr MIIDJDCCAgygAwIBAgIVAKv1E4buzmYGim6/fryBXu75scNHMA0GCSqGSIb3DQEB BQUAMBkxFzAVBgNVBAMTDmlkcC5yZW5hdGVyLmZyMB4XDTEwMDkyODE1MTA1NFoX DTMwMDkyODE1MTA1NFowGTEXMBUGA1UEAxMOaWRwLnJlbmF0ZXIuZnIwggEiMA0G CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC1L99BMncXESNb36w5VjLZYX2wehxk nkmrMf1ZEtICtBC2ztmf6AyzKapEbFJz9bIJdaZyKNDdLeJq6d0pPTSLUB9Wuuwa bKojFoWB0KexAhxnuBeVGQUjSxCARPnT7XuxPPA8aB0jskjWaptFLGJlP/Dg6u0q 4kEN93PM9K3Vc2bEc/gAdBKrGgajOPX2ygqratZd/Ud3NG6lKz+DkR5zhfdBmoOo Ups8gFlRECh8rR6NpFnQpwf8g1kGZVbMH0cv91N674Bj3KzfS2K9OhsUBM2CsL4c 2gMh+DMBpDlrIqz71q44C1q3VHK8GGQFzOtYbPI7vVX28RCDtLAUlwP/AgMBAAGj YzBhMEAGA1UdEQQ5MDeCDmlkcC5yZW5hdGVyLmZyhiVodHRwczovL2lkcC5yZW5h dGVyLmZyL2lkcC9zaGliYm9sZXRoMB0GA1UdDgQWBBQxueCim5oupES9j2rn+S2c cKK2EjANBgkqhkiG9w0BAQUFAAOCAQEALXt46iplGub8Ahmw7nTVfi1SJcfoZDQh i35NNcnSOx9xbKPI0NvLZmLqDsmVWJVCW2mUR8nS6R6vWoPH+Bg38UqqWd9WjktX 38kXyLOVKr1+HNN1rdGDXe+qXeheZ8EYkmtR4aKqK7zkjgYfmd2G/7S5tL+GpTSx lTocl77yBB/Rw/MZFmVSomqUOiANNVy5cfbRYhsm7pn2yGDeT1a1o8rizJAUQyf0 dlDov1adZuUaKuHY38rUasnC7mD1YX0W0tnzfg8D1St9OvyV6zD4ROPHrXXA3chN kK/P9Lxm8pMShufWoPHDDyzRHVWUq/JkLoQGz+vyOaYsjyqMmudTrw== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient GIP RENATER GIP RENATER http://unknown.site.com Hached Mehdi hached@renater.fr Anthony Fisson fisson@renater.fr grenoble-inp.fr MIIEOTCCAyGgAwIBAgILAQAAAAABGwdDsEIwDQYJKoZIhvcNAQEFBQAwXzELMAkG A1UEBhMCQkUxEzARBgNVBAoTCkN5YmVydHJ1c3QxFzAVBgNVBAsTDkVkdWNhdGlv bmFsIENBMSIwIAYDVQQDExlDeWJlcnRydXN0IEVkdWNhdGlvbmFsIENBMB4XDTA4 MDcwOTEwMDAxM1oXDTExMDcwOTEwMDAxM1owXTELMAkGA1UEBhMCRlIxKDAmBgNV BAoTH1VuaXZlcnNpdGUgUGllcnJlIE1lbmRlcyBGcmFuY2UxJDAiBgNVBAMTG2Zl ZGVyYXRpb24udXBtZi1ncmVub2JsZS5mcjCBnzANBgkqhkiG9w0BAQEFAAOBjQAw gYkCgYEA2lt9cUQ0X94yQ3iHuq5rhahsi5XvtrQ4NPycObddIIdf6w/QITwuoyuW xfiy1X+VZTybdZUkEMo/cIEpeG6oewNjtnXtRPl54zyi4rSHJM1N07EEkyY6n1Oz W0j4ubYBXFXG2kbRsWMntn0J2EqW4FmiY7rGs+tYmJf60xtKfR8CAwEAAaOCAXow ggF2MFAGA1UdIARJMEcwRQYHKoZIsT4BADA6MDgGCCsGAQUFBwIBFixodHRwOi8v d3d3Lmdsb2JhbHNpZ24ubmV0L3JlcG9zaXRvcnkvY3BzLmNmbTAOBgNVHQ8BAf8E BAMCBaAwHwYDVR0jBBgwFoAUZWWjPdc7EaMKByU3yUJKW3Z3UOEwHQYDVR0OBBYE FOjgSw6AqMx6cK8l2xPKPubZTuMzMDoGA1UdHwQzMDEwL6AtoCuGKWh0dHA6Ly9j cmwuZ2xvYmFsc2lnbi5uZXQvZWR1Y2F0aW9uYWwuY3JsME8GCCsGAQUFBwEBBEMw QTA/BggrBgEFBQcwAoYzaHR0cDovL3NlY3VyZS5nbG9iYWxzaWduLm5ldC9jYWNl cnQvZWR1Y2F0aW9uYWwuY3J0MB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcD AjAmBgNVHREEHzAdghtmZWRlcmF0aW9uLnVwbWYtZ3Jlbm9ibGUuZnIwDQYJKoZI hvcNAQEFBQADggEBAFOUXIN6AxybKM4kNMFdso2WdwC5wX+qfwqEBueYu+4XgYRa EAcG1+MDR33HXXhmrBuLI7j2c23b7LJIhNiNl7NHU9R7oW33b6/0tntMS2bn+kmD tR4rDDLf4bO0s1a8RpBTbu+WqCflcH8wriqWkn1Do5Ix81ThGYYGbG7zaRssCDXl HWda5k9ypj3t4ajMPFVgKfAU4gYVWqvvTqEnzO6oLemKkOiT5bEjm4MSKmiYkrPB 7XYNnfgFsKbhz7BgRYMTUBNjVT7V1wn9/Zg6BzzQHFOntOBNHwYmFZQxp9wpCjeZ pFWD1cKlPq7eD1zfKQZyD2sVmSNnryqGM5E4NiQ= urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Grenoble INP Grenoble INP http://unknown.site.com Balleydier federation.sos@grenoble-inp.fr simoens federation.sos@grenoble-inp.fr telelog.univ-rennes1.fr CN=telelog.univ-rennes1.fr,O=Rennes 1,C=FR MIICpzCCAhCgAwIBAgIJANpySZY8XPPdMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNV BAYTAkZSMREwDwYDVQQKEwhSZW5uZXMgMTEgMB4GA1UEAxMXdGVsZWxvZy51bml2 LXJlbm5lczEuZnIwHhcNMTAwMjE1MTUyNjMxWhcNMzAwMjEwMTUyNjMxWjBCMQsw CQYDVQQGEwJGUjERMA8GA1UEChMIUmVubmVzIDExIDAeBgNVBAMTF3RlbGVsb2cu dW5pdi1yZW5uZXMxLmZyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDFcXU2 eP1ggfnZyncejPyCPL/+as+5RoVsRMQtxvQqd0u/syHmAaw5LWfLnKsQnmAHk7Fa UiE6N0zU8C6y9hbgDRO+TJPMksFtQDjfIgcDy6kyRv+eCjU2OCksxGiJD/AGFiSv bmnCoS4xUbh+7BHtptYi2B5YxbrYSlu3FRqZwwIDAQABo4GkMIGhMB0GA1UdDgQW BBQOThA9cBhsKQOZsNW6c2zPmQhK6zByBgNVHSMEazBpgBQOThA9cBhsKQOZsNW6 c2zPmQhK66FGpEQwQjELMAkGA1UEBhMCRlIxETAPBgNVBAoTCFJlbm5lcyAxMSAw HgYDVQQDExd0ZWxlbG9nLnVuaXYtcmVubmVzMS5mcoIJANpySZY8XPPdMAwGA1Ud EwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAauuE8Z1BNWPQnyMNv2qTGPUisb+J KGNX66gr6F3i7D/p4RvkPgPRlpZfSxOzsBP2Z6fbtLTD4pfJAfLd3iEw4VbHKPzs MaL7BKGa4U8ix0rTu0hqipzla+Tu9TYpTG+LycGY/b5Unrf8FuhYhCXNLgOemi8c AsP/qDn83A7wdeI= telelog.univ-rennes1.fr CN=telelog.univ-rennes1.fr,O=Rennes 1,C=FR MIICpzCCAhCgAwIBAgIJANpySZY8XPPdMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNV BAYTAkZSMREwDwYDVQQKEwhSZW5uZXMgMTEgMB4GA1UEAxMXdGVsZWxvZy51bml2 LXJlbm5lczEuZnIwHhcNMTAwMjE1MTUyNjMxWhcNMzAwMjEwMTUyNjMxWjBCMQsw CQYDVQQGEwJGUjERMA8GA1UEChMIUmVubmVzIDExIDAeBgNVBAMTF3RlbGVsb2cu dW5pdi1yZW5uZXMxLmZyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDFcXU2 eP1ggfnZyncejPyCPL/+as+5RoVsRMQtxvQqd0u/syHmAaw5LWfLnKsQnmAHk7Fa UiE6N0zU8C6y9hbgDRO+TJPMksFtQDjfIgcDy6kyRv+eCjU2OCksxGiJD/AGFiSv bmnCoS4xUbh+7BHtptYi2B5YxbrYSlu3FRqZwwIDAQABo4GkMIGhMB0GA1UdDgQW BBQOThA9cBhsKQOZsNW6c2zPmQhK6zByBgNVHSMEazBpgBQOThA9cBhsKQOZsNW6 c2zPmQhK66FGpEQwQjELMAkGA1UEBhMCRlIxETAPBgNVBAoTCFJlbm5lcyAxMSAw HgYDVQQDExd0ZWxlbG9nLnVuaXYtcmVubmVzMS5mcoIJANpySZY8XPPdMAwGA1Ud EwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAauuE8Z1BNWPQnyMNv2qTGPUisb+J KGNX66gr6F3i7D/p4RvkPgPRlpZfSxOzsBP2Z6fbtLTD4pfJAfLd3iEw4VbHKPzs MaL7BKGa4U8ix0rTu0hqipzla+Tu9TYpTG+LycGY/b5Unrf8FuhYhCXNLgOemi8c AsP/qDn83A7wdeI= shibboleth.ieeexplore.ieee.org MIICzjCCAbagAwIBAgIETGv6kTANBgkqhkiG9w0BAQUFADApMScwJQYDVQQDEx5zaGliYm9sZXRo LmllZWV4cGxvcmUuaWVlZS5vcmcwHhcNMTAwODE4MTUyMTUzWhcNMTMwODE3MTUyMTUzWjApMScw JQYDVQQDEx5zaGliYm9sZXRoLmllZWV4cGxvcmUuaWVlZS5vcmcwggEiMA0GCSqGSIb3DQEBAQUA A4IBDwAwggEKAoIBAQCEZrWYL9uv82FE1/gdMiMAddL0u5QamV7JFESacdtR0djeNMeQp39ImWRW N+Asi35T2LQ6qNnV0qC8ITjl6LsxTKwhQdn00vpZI+QY6UCMyi6v/AzaU3pJ5SeKwEJUONAk/99n 1eqqOhqu+Xgu3a+gvEIKs7k9wDYdPdIqgx7X5d4HnOs5qMqX/o3ocHOL6wHxabETu6udDrr0MBlL DJ3plqbTm/Kh0aWLg9OdRTMjCs4OhjjTe6VYCIZalDUQaHrQbYHANpBeYKk6oOf1sG9o+UGnGPzP YejjgpqgEKfQJqaZD+79Vbx3d8bgaLNQyiEGplnlBJeF/eHxmsIkTqHhAgMBAAEwDQYJKoZIhvcN AQEFBQADggEBAEaT5SZ8+5dBiaC5bwHWqZCySknJOJuZLGfwz7CvHI+WoVzoncsbbv5XFDFxBzWn cqZSynpvRcpeFYJ3HFa9xXdlL3i1BGC5ujOMF9+adI8QBxQdeKHZ3crUt0GluwxWrzs5o7DlkQyo /Au+VP1rnoXgNNEyZuEWOUYPa2k2wOHt68EVkjdNHD4SGZwioWZ7RQGgCKF/fH6Q1iSAjGbKFOFP wx2bdRXfj+vpOPg+EkAJuPArNxQU+b5T9Utxn4QGmsgcgfwwaJJghKs8vXXYa0cuv2eotR3FGr2D lp2GuqI9GPF2ux/KHpTscEDCK+qidpOrFsW7PIE+ct3mDa76BIY= shibboleth.ieeexplore.ieee.org MIICzjCCAbagAwIBAgIETGv6kTANBgkqhkiG9w0BAQUFADApMScwJQYDVQQDEx5zaGliYm9sZXRo LmllZWV4cGxvcmUuaWVlZS5vcmcwHhcNMTAwODE4MTUyMTUzWhcNMTMwODE3MTUyMTUzWjApMScw JQYDVQQDEx5zaGliYm9sZXRoLmllZWV4cGxvcmUuaWVlZS5vcmcwggEiMA0GCSqGSIb3DQEBAQUA A4IBDwAwggEKAoIBAQCEZrWYL9uv82FE1/gdMiMAddL0u5QamV7JFESacdtR0djeNMeQp39ImWRW N+Asi35T2LQ6qNnV0qC8ITjl6LsxTKwhQdn00vpZI+QY6UCMyi6v/AzaU3pJ5SeKwEJUONAk/99n 1eqqOhqu+Xgu3a+gvEIKs7k9wDYdPdIqgx7X5d4HnOs5qMqX/o3ocHOL6wHxabETu6udDrr0MBlL DJ3plqbTm/Kh0aWLg9OdRTMjCs4OhjjTe6VYCIZalDUQaHrQbYHANpBeYKk6oOf1sG9o+UGnGPzP YejjgpqgEKfQJqaZD+79Vbx3d8bgaLNQyiEGplnlBJeF/eHxmsIkTqHhAgMBAAEwDQYJKoZIhvcN AQEFBQADggEBAEaT5SZ8+5dBiaC5bwHWqZCySknJOJuZLGfwz7CvHI+WoVzoncsbbv5XFDFxBzWn cqZSynpvRcpeFYJ3HFa9xXdlL3i1BGC5ujOMF9+adI8QBxQdeKHZ3crUt0GluwxWrzs5o7DlkQyo /Au+VP1rnoXgNNEyZuEWOUYPa2k2wOHt68EVkjdNHD4SGZwioWZ7RQGgCKF/fH6Q1iSAjGbKFOFP wx2bdRXfj+vpOPg+EkAJuPArNxQU+b5T9Utxn4QGmsgcgfwwaJJghKs8vXXYa0cuv2eotR3FGr2D lp2GuqI9GPF2ux/KHpTscEDCK+qidpOrFsW7PIE+ct3mDa76BIY= ifma.fr MIIEizCCA3OgAwIBAgIQLEf5g3ZzwyyqC0OTVDv9IDANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTExMDEwNDAwMDAwMFoXDTEyMDExMDIzNTk1OVowZDELMAkGA1UE BhMCRlIxEDAOBgNVBAcTB0FVQklFUkUxLzAtBgNVBAoTJkluc3RpdHV0IEZyYW5j YWlzIGRlIE1lY2FuaXF1ZSBBdmFuY2VlMRIwEAYDVQQDFAkqLmlmbWEuZnIwggEi MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDTubF0AC1JSefOfgsFnhZ9xQRh TrPenpaPberQU90k56eZAdpPv4LNs8UfF4Pc3LSI84+Y+qNcjyMdLXkl4ao7P5li ewWVRFGy+tsQh0DDZuejXwSV8+VToa4zUO1FFscg8AjfFua+tKAezlXYX9BLvGYJ EZ1OzrK1Wf/FNhak5WNPukrGRrkTUyPbvA4EgaE0GgJoooSuDpnroEAOU2CYV+Ak FjE1JAeTiZbTRaSix9YH1XaLu9jF0K69VP7m8gVFMdOAlMyPKfGiy/SVOAFbZlIV aYekIb4sQkiZMPuRkSKBbmNQt+ep7sZvv3+r5yuqdi2LwspBuUvBu3wUswktAgMB AAGjggFlMIIBYTAfBgNVHSMEGDAWgBQMvZNoDPPeq6NJays3V0fqkOO57TAdBgNV HQ4EFgQUGWxA3csb7HJBW2EjErKBTZWKuwUwDgYDVR0PAQH/BAQDAgWgMAwGA1Ud EwEB/wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBgGA1UdIAQR MA8wDQYLKwYBBAGyMQECAh0wOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC50 Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcmwwbQYIKwYBBQUHAQEEYTBfMDUG CCsGAQUFBzAChilodHRwOi8vY3J0LnRjcy50ZXJlbmEub3JnL1RFUkVOQVNTTENB LmNydDAmBggrBgEFBQcwAYYaaHR0cDovL29jc3AudGNzLnRlcmVuYS5vcmcwHQYD VR0RBBYwFIIJKi5pZm1hLmZyggdpZm1hLmZyMA0GCSqGSIb3DQEBBQUAA4IBAQBO b1eGtVUy3poSFOKP+8/BvDLo3zMK3MKt3f79Lz7ksc15vzvazzgYZdoSsHGvGEvh B547OOjJ5cY8I64BUH8dBkqEJeJdhFkPD3w2aruHbK6o4jLFfvN7bWVga9zb5hUp QjJGfMJnTF18fWmQyHH4ls5WV5vxiSkxZ9NndkIcJifIQtExOraKtKEAlqEZhfEs iM1pw6S3F4ntyFWHen/2vMGrasgRv4fXVe8upcrCcVzCQbRM+WaGVExOzCt7t6DW uSPJk5uXJUYd4cze+6H0Sbm3WrrzNutRVSiWDIsjGSRpjA7P8OfjNq7r+G4KVqCy 1wDmC7ZqG8IpwAXFiRYi urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient IFMA Clermont-Ferrand - Institut Francais de Mecanique Avancee IFMA Clermont-Ferrand - Institut Francais de Mecanique Avancee http://unknown.site.com Christophe DUMONET christophe.dumonet@ifma.fr Frédéric DEDIEU frederic.dedieu@ifma.fr inalco.fr MIIDJzCCAg+gAwIBAgIUXBzPfYV+3ru5apFeK1Xo5W/wdlowDQYJKoZIhvcNAQEF BQAwGjEYMBYGA1UEAxMPbWxkYXAuaW5hbGNvLmZyMB4XDTEwMDkyODE0NTYxOFoX DTMwMDkyODE0NTYxOFowGjEYMBYGA1UEAxMPbWxkYXAuaW5hbGNvLmZyMIIBIjAN BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjXFdyCRby1D4CFQW7ynaRKzJCyzz nRsnF2qPnGuMExCzuWUM5gBqVAjdI+AZXutcXcxkJq71TC22erYIlAob5A8nWTT5 rR/dUtVRwawP/4jv9CqKiRC86zeNRFuUgYd0+Wkrn/RADV0wyfeSaT0KHoqwOu4d iRlks9CMns7/eFLmGsYQcEMHlw9nGTYpx94IClua3/prJjkc45iCYuoWXnGCLq2j MoJDcw3I5u3tSUfzCbp81lWn06oYBIVuzzcZuLRsd0smB41pabVYcS+bbG0yWA4b xIn4ZPQ1vja6YpIix6YZmpcCD6hs02xYfm6sWq/BnNS1vtMD1RjmSJhx4QIDAQAB o2UwYzBCBgNVHREEOzA5gg9tbGRhcC5pbmFsY28uZnKGJmh0dHBzOi8vbWxkYXAu aW5hbGNvLmZyL2lkcC9zaGliYm9sZXRoMB0GA1UdDgQWBBSVnWnWMca1OUkx11t9 LRaeLMgTWzANBgkqhkiG9w0BAQUFAAOCAQEAfmv+9vLBGqsioIPqwy7pTT54CsbR jdvs5Ud7EhkLYDa+EelzwrgmE4z92mmmTFKUixlj070ncHZJjwjdfbDGwcQ/aKT2 cd597hjiVBd85/biLQ3yTBkzJx2UiXm/Wj2qfyHoJDH9UfcLZOorR8R0b1ObSbHY 2EsElJHCh/SrRniERFdJdQ1fzTukaSPa6zu/lLO40gYHu13qenRjMgMn9W85g7V8 e6Kt16MbjbkcX6m9uYJo9HiN5hJ+pP0fV4q8kj2YxAK/av/v0Qp5iXJfBH9QecSK BdKgqhQ4XdLkP9D+5i10GGHVDJL3NYCpNbAqNmHeTJGjc+aSG6XpBZPcVw== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient INALCO - Institut National des Langues et Civilisations Orientales INALCO - Institut National des Langues et Civilisations Orientales http://unknown.site.com Le Pendeven laurent.le_pendeven@inria.fr Casasnovas fabrice.casasnovas@inalco.fr MIIEXzCCA0egAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJmcjEM MAoGA1UECBMDSURGMQ4wDAYDVQQHEwVQQVJJUzEPMA0GA1UEChMGSU5BTENPMSsw KQYJKoZIhvcNAQkBFhxmYWJyaWNlLmNhc2Fzbm92YXNAaW5hbGNvLmZyMRQwEgYD VQQDEwtpbnRlcm5hbC1jYTAeFw0xMTAyMDMxMjU5NTNaFw0yMTAxMzExMjU5NTNa MIGFMQswCQYDVQQGEwJmcjEMMAoGA1UECBMDSURGMQ4wDAYDVQQHEwVQQVJJUzEP MA0GA1UEChMGSU5BTENPMSswKQYJKoZIhvcNAQkBFhxmYWJyaWNlLmNhc2Fzbm92 YXNAaW5hbGNvLmZyMRowGAYDVQQDExFlZHVzcG90LmluYWxjby5mcjCCASIwDQYJ KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMFMm3eobtSriDV1IgwkZyyj66bcB+Z4 2KfoJnSB6ZA3W1GRqIZDqg2EAMZwX0PNwCIutMSHWHz2jECa0psZ6AP5pqJqrIey z90LStazE4k8wN7TSs010kTPsUcbq6lL0uDykvneqiFLAXccs3KVITwkEMWGKl7n P6AapjiW9Kfgomo6G6WtUj6LyRlD1jFTQJ/rFFRVPztbg9DMSZKxcJpPuKzNC9b1 nfCFnQxTyy2P+IZC8QlhO1NysmBKgMfacbFPYw2iJdGz+Y1MrdXYrFvkIProc6Eq HV9jOYnQA4glLXchoHdJ5XWYDB6ICVngrdetXeBJ78qAJwQxwNc4Mh8CAwEAAaOB 3jCB2zAdBgNVHQ4EFgQUX1goMIL4sWmnM9t/jE434gvrwZIwgasGA1UdIwSBozCB oIAUWCgAeO5AxWCR+S/JOdbE8NWPVr2hgYSkgYEwfzELMAkGA1UEBhMCZnIxDDAK BgNVBAgTA0lERjEOMAwGA1UEBxMFUEFSSVMxDzANBgNVBAoTBklOQUxDTzErMCkG CSqGSIb3DQEJARYcZmFicmljZS5jYXNhc25vdmFzQGluYWxjby5mcjEUMBIGA1UE AxMLaW50ZXJuYWwtY2GCAQAwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOC AQEAS1ZHti/VihGkpstC3N77/6MHr1Btu1kob9Mhb08BdbT+qIESm2HsSuSldArU CYUzxWyNT6Rmkhb5coLqiRtHIgGlaxY+IcMRPny1uaDY28Flm6ys+lHEfvEM3bI5 nPVxQAY50iUAbOWuhUkR+8RCqhzWrIupXbtYvl1/wENVLqd4Q4DChbR3hcFHRhwu lowIpS5VkhbUtCuyaYrQ8SNOpjrdtexa2l8X0UVWl2pM2+mDQOTgRhLIdXcC6ISt 9TsBGvrnWXFf3UhLZUldPTtB5rf7Am6yu6+KxXdPb6lQW7MvL6EvYJfozxcWfRbu oEJKqjRMPM/Nt9azB38LPsFUbA== MIIEXzCCA0egAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJmcjEM MAoGA1UECBMDSURGMQ4wDAYDVQQHEwVQQVJJUzEPMA0GA1UEChMGSU5BTENPMSsw KQYJKoZIhvcNAQkBFhxmYWJyaWNlLmNhc2Fzbm92YXNAaW5hbGNvLmZyMRQwEgYD VQQDEwtpbnRlcm5hbC1jYTAeFw0xMTAyMDMxMjU5NTNaFw0yMTAxMzExMjU5NTNa MIGFMQswCQYDVQQGEwJmcjEMMAoGA1UECBMDSURGMQ4wDAYDVQQHEwVQQVJJUzEP MA0GA1UEChMGSU5BTENPMSswKQYJKoZIhvcNAQkBFhxmYWJyaWNlLmNhc2Fzbm92 YXNAaW5hbGNvLmZyMRowGAYDVQQDExFlZHVzcG90LmluYWxjby5mcjCCASIwDQYJ KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMFMm3eobtSriDV1IgwkZyyj66bcB+Z4 2KfoJnSB6ZA3W1GRqIZDqg2EAMZwX0PNwCIutMSHWHz2jECa0psZ6AP5pqJqrIey z90LStazE4k8wN7TSs010kTPsUcbq6lL0uDykvneqiFLAXccs3KVITwkEMWGKl7n P6AapjiW9Kfgomo6G6WtUj6LyRlD1jFTQJ/rFFRVPztbg9DMSZKxcJpPuKzNC9b1 nfCFnQxTyy2P+IZC8QlhO1NysmBKgMfacbFPYw2iJdGz+Y1MrdXYrFvkIProc6Eq HV9jOYnQA4glLXchoHdJ5XWYDB6ICVngrdetXeBJ78qAJwQxwNc4Mh8CAwEAAaOB 3jCB2zAdBgNVHQ4EFgQUX1goMIL4sWmnM9t/jE434gvrwZIwgasGA1UdIwSBozCB oIAUWCgAeO5AxWCR+S/JOdbE8NWPVr2hgYSkgYEwfzELMAkGA1UEBhMCZnIxDDAK BgNVBAgTA0lERjEOMAwGA1UEBxMFUEFSSVMxDzANBgNVBAoTBklOQUxDTzErMCkG CSqGSIb3DQEJARYcZmFicmljZS5jYXNhc25vdmFzQGluYWxjby5mcjEUMBIGA1UE AxMLaW50ZXJuYWwtY2GCAQAwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOC AQEAS1ZHti/VihGkpstC3N77/6MHr1Btu1kob9Mhb08BdbT+qIESm2HsSuSldArU CYUzxWyNT6Rmkhb5coLqiRtHIgGlaxY+IcMRPny1uaDY28Flm6ys+lHEfvEM3bI5 nPVxQAY50iUAbOWuhUkR+8RCqhzWrIupXbtYvl1/wENVLqd4Q4DChbR3hcFHRhwu lowIpS5VkhbUtCuyaYrQ8SNOpjrdtexa2l8X0UVWl2pM2+mDQOTgRhLIdXcC6ISt 9TsBGvrnWXFf3UhLZUldPTtB5rf7Am6yu6+KxXdPb6lQW7MvL6EvYJfozxcWfRbu oEJKqjRMPM/Nt9azB38LPsFUbA== CASASNOVAS fabrice.casasnovas@inalco.fr BELMOUHOUB rachid.belmouhoub@inalco.fr inra.fr MIIENjCCAx6gAwIBAgILAQAAAAABH6fjLKgwDQYJKoZIhvcNAQEFBQAwXzELMAkG A1UEBhMCQkUxEzARBgNVBAoTCkN5YmVydHJ1c3QxFzAVBgNVBAsTDkVkdWNhdGlv bmFsIENBMSIwIAYDVQQDExlDeWJlcnRydXN0IEVkdWNhdGlvbmFsIENBMB4XDTA5 MDIyNDA5NTUwMVoXDTEyMDIyNDA5NTUwMVowajELMAkGA1UEBhMCRlIxEzARBgNV BAgTClNvbWUtU3RhdGUxMDAuBgNVBAoTJ0lOU1RJVFVUIE5BVElPTkFMIFJFQ0hF UkNIRSBBR1JPTk9NSVFVRTEUMBIGA1UEAxMLaWRwLmlucmEuZnIwgZ8wDQYJKoZI hvcNAQEBBQADgY0AMIGJAoGBALXjKuuUE+BJbk8hGVkWa3UN2CooR3EL1Gzohu7t p/x/Cg9fDRp7C1eQx9skU36gXMyNYLt0zFxj/gQtK5uaA/jyrk5Pv5Erl6IgV+/j SB7MoVxxpEAAw5bA7Jn4l7w2TYOSgU23b81l0t0yKRZfMxp6yDBV2sZ0dUQlbOjj /PBLAgMBAAGjggFqMIIBZjBQBgNVHSAESTBHMEUGByqGSLE+AQAwOjA4BggrBgEF BQcCARYsaHR0cDovL3d3dy5nbG9iYWxzaWduLm5ldC9yZXBvc2l0b3J5L2Nwcy5j Zm0wDgYDVR0PAQH/BAQDAgWgMB8GA1UdIwQYMBaAFGVloz3XOxGjCgclN8lCSlt2 d1DhMB0GA1UdDgQWBBSyiTuwksrohbZxTo8OZl/qohvb6TA6BgNVHR8EMzAxMC+g LaArhilodHRwOi8vY3JsLmdsb2JhbHNpZ24ubmV0L2VkdWNhdGlvbmFsLmNybDBP BggrBgEFBQcBAQRDMEEwPwYIKwYBBQUHMAKGM2h0dHA6Ly9zZWN1cmUuZ2xvYmFs c2lnbi5uZXQvY2FjZXJ0L2VkdWNhdGlvbmFsLmNydDAdBgNVHSUEFjAUBggrBgEF BQcDAQYIKwYBBQUHAwIwFgYDVR0RBA8wDYILaWRwLmlucmEuZnIwDQYJKoZIhvcN AQEFBQADggEBAFE92Y/ZvaSGDFHmw4HhEpFKKBNBurDTCEgMaP8xvQ+QAjJlt3lV Yv9HgV44JGPxwxctrFmPdPgxELpwFkMBwWV/aTGoRJGkUiCVyCdUjj6OK+tK51Ib jvYtre2xJ2tWunZPjY9rntoLRmd6OYVj9zpaKAbZpdPvipiUuBSyVvgb4Wx9iODK eZBf3iqJFVrjpryJTRV17PSD+uPBozqjRO9yVTCSbD7dEzMiLGqbigcodaWoVbbk A4iIV8dJ8MhnsUcfCVY9vN5SQT1LMXgOzD0b4kDzyxSWTeOhzyJwL6XjmAe83Swm QUbOdbLdaZttqaZqzJT1bIG8RqlRXrUhD+c= urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient inra.fr MIIENjCCAx6gAwIBAgILAQAAAAABH6fjLKgwDQYJKoZIhvcNAQEFBQAwXzELMAkG A1UEBhMCQkUxEzARBgNVBAoTCkN5YmVydHJ1c3QxFzAVBgNVBAsTDkVkdWNhdGlv bmFsIENBMSIwIAYDVQQDExlDeWJlcnRydXN0IEVkdWNhdGlvbmFsIENBMB4XDTA5 MDIyNDA5NTUwMVoXDTEyMDIyNDA5NTUwMVowajELMAkGA1UEBhMCRlIxEzARBgNV BAgTClNvbWUtU3RhdGUxMDAuBgNVBAoTJ0lOU1RJVFVUIE5BVElPTkFMIFJFQ0hF UkNIRSBBR1JPTk9NSVFVRTEUMBIGA1UEAxMLaWRwLmlucmEuZnIwgZ8wDQYJKoZI hvcNAQEBBQADgY0AMIGJAoGBALXjKuuUE+BJbk8hGVkWa3UN2CooR3EL1Gzohu7t p/x/Cg9fDRp7C1eQx9skU36gXMyNYLt0zFxj/gQtK5uaA/jyrk5Pv5Erl6IgV+/j SB7MoVxxpEAAw5bA7Jn4l7w2TYOSgU23b81l0t0yKRZfMxp6yDBV2sZ0dUQlbOjj /PBLAgMBAAGjggFqMIIBZjBQBgNVHSAESTBHMEUGByqGSLE+AQAwOjA4BggrBgEF BQcCARYsaHR0cDovL3d3dy5nbG9iYWxzaWduLm5ldC9yZXBvc2l0b3J5L2Nwcy5j Zm0wDgYDVR0PAQH/BAQDAgWgMB8GA1UdIwQYMBaAFGVloz3XOxGjCgclN8lCSlt2 d1DhMB0GA1UdDgQWBBSyiTuwksrohbZxTo8OZl/qohvb6TA6BgNVHR8EMzAxMC+g LaArhilodHRwOi8vY3JsLmdsb2JhbHNpZ24ubmV0L2VkdWNhdGlvbmFsLmNybDBP BggrBgEFBQcBAQRDMEEwPwYIKwYBBQUHMAKGM2h0dHA6Ly9zZWN1cmUuZ2xvYmFs c2lnbi5uZXQvY2FjZXJ0L2VkdWNhdGlvbmFsLmNydDAdBgNVHSUEFjAUBggrBgEF BQcDAQYIKwYBBQUHAwIwFgYDVR0RBA8wDYILaWRwLmlucmEuZnIwDQYJKoZIhvcN AQEFBQADggEBAFE92Y/ZvaSGDFHmw4HhEpFKKBNBurDTCEgMaP8xvQ+QAjJlt3lV Yv9HgV44JGPxwxctrFmPdPgxELpwFkMBwWV/aTGoRJGkUiCVyCdUjj6OK+tK51Ib jvYtre2xJ2tWunZPjY9rntoLRmd6OYVj9zpaKAbZpdPvipiUuBSyVvgb4Wx9iODK eZBf3iqJFVrjpryJTRV17PSD+uPBozqjRO9yVTCSbD7dEzMiLGqbigcodaWoVbbk A4iIV8dJ8MhnsUcfCVY9vN5SQT1LMXgOzD0b4kDzyxSWTeOhzyJwL6XjmAe83Swm QUbOdbLdaZttqaZqzJT1bIG8RqlRXrUhD+c= urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient INRA - Institut national de la recherche agronomique INRA - Institut national de la recherche agronomique http://unknown.site.com Delprat iris@jouy.inra.fr MIIDzzCCAregAwIBAgICAnYwDQYJKoZIhvcNAQEEBQAwNjELMAkGA1UEBhMCRlIx DjAMBgNVBAoTBUlOUklBMRcwFQYDVQQDEw5JTlJJQS1TdGFuZGFyZDAeFw0wODA5 MDUxMzM0NTNaFw0xMDA5MDUxMzM0NTNaMGUxCzAJBgNVBAYTAkZSMQ4wDAYDVQQK EwVJTlJJQTEOMAwGA1UECxMFU2llZ2UxFzAVBgNVBAMTDnNlaXNtLmlucmlhLmZy MR0wGwYJKoZIhvcNAQkBFg5zZWlzbUBpbnJpYS5mcjCBnzANBgkqhkiG9w0BAQEF AAOBjQAwgYkCgYEA9og/JOrMNWTtbuQqxKXmaTT4e1hO75hJEpnZDaNo9S1yqCHw A9+jBtztvegEgG9LXnelUCTreEKSiKGcis6JOSd99GoTcFLZ+6P++P/lYX1yaDtf xLx6MJnMmSV5gF48+LliG33NV+2w8431g+u/8Dz/RccMh/T6Lh3ZyzNsKOkCAwEA AaOCATowggE2MAwGA1UdEwEB/wQCMAAwEQYJYIZIAYb4QgEBBAQDAgbAMA4GA1Ud DwEB/wQEAwIF4DAwBglghkgBhvhCAQ0EIxYhc2VydmVyIGNlcnRpZmljYXRlIElO UklBLVN0YW5kYXJkMB0GA1UdDgQWBBQMXKxTWOEX3PhvVIaapbpxMG5T+jBVBgNV HSMETjBMgBQ5b9NnKRs5HsnvdaB8EKmNO0txT6ExpC8wLTELMAkGA1UEBhMCRlIx DjAMBgNVBAoTBUlOUklBMQ4wDAYDVQQDEwVJTlJJQYIBAjBbBgNVHR8EVDBSMFCg TqBMhkpodHRwOi8vaWdjLm5hdGlvbmFsLmlucmlhLmZyL2NnaS1iaW4vbG9hZC5j cmw/Q0E9SU5SSUEtU3RhbmRhcmQmZm9ybWF0PURFUjANBgkqhkiG9w0BAQQFAAOC AQEAq/+A7rWeeT0vTH7SYlCyOy4VGaMja4Zvj/BbALrlLXMe1SZgw5x4O/HR+GQd EER5BxGsyDjKfIIVVcuWupP9z2rn6tUG2yCvDJrGtzLIw7NH+5Xss4GUTWhV4xUO nxelA5IHTj9BgIpuH0YiuFgDIhv0KUNECvNNlBbcPelzmuBoAK2J/ocpUymF/8ka wQ6QprQN82XA48LzhjAcwCWxvINT15ujYFW+gV3tcrmiy0DB3Yp0B2azLKqmuwa1 4AACbyRrP4f1zXX3h/LQ+Vu54PskmMAx8sPGWDw5NiCiwDEX8xydKNLDNYe4MWS2 rv+5/EEYpEAzsZb51tqZNOShxw== MIIDzzCCAregAwIBAgICAnYwDQYJKoZIhvcNAQEEBQAwNjELMAkGA1UEBhMCRlIx DjAMBgNVBAoTBUlOUklBMRcwFQYDVQQDEw5JTlJJQS1TdGFuZGFyZDAeFw0wODA5 MDUxMzM0NTNaFw0xMDA5MDUxMzM0NTNaMGUxCzAJBgNVBAYTAkZSMQ4wDAYDVQQK EwVJTlJJQTEOMAwGA1UECxMFU2llZ2UxFzAVBgNVBAMTDnNlaXNtLmlucmlhLmZy MR0wGwYJKoZIhvcNAQkBFg5zZWlzbUBpbnJpYS5mcjCBnzANBgkqhkiG9w0BAQEF AAOBjQAwgYkCgYEA9og/JOrMNWTtbuQqxKXmaTT4e1hO75hJEpnZDaNo9S1yqCHw A9+jBtztvegEgG9LXnelUCTreEKSiKGcis6JOSd99GoTcFLZ+6P++P/lYX1yaDtf xLx6MJnMmSV5gF48+LliG33NV+2w8431g+u/8Dz/RccMh/T6Lh3ZyzNsKOkCAwEA AaOCATowggE2MAwGA1UdEwEB/wQCMAAwEQYJYIZIAYb4QgEBBAQDAgbAMA4GA1Ud DwEB/wQEAwIF4DAwBglghkgBhvhCAQ0EIxYhc2VydmVyIGNlcnRpZmljYXRlIElO UklBLVN0YW5kYXJkMB0GA1UdDgQWBBQMXKxTWOEX3PhvVIaapbpxMG5T+jBVBgNV HSMETjBMgBQ5b9NnKRs5HsnvdaB8EKmNO0txT6ExpC8wLTELMAkGA1UEBhMCRlIx DjAMBgNVBAoTBUlOUklBMQ4wDAYDVQQDEwVJTlJJQYIBAjBbBgNVHR8EVDBSMFCg TqBMhkpodHRwOi8vaWdjLm5hdGlvbmFsLmlucmlhLmZyL2NnaS1iaW4vbG9hZC5j cmw/Q0E9SU5SSUEtU3RhbmRhcmQmZm9ybWF0PURFUjANBgkqhkiG9w0BAQQFAAOC AQEAq/+A7rWeeT0vTH7SYlCyOy4VGaMja4Zvj/BbALrlLXMe1SZgw5x4O/HR+GQd EER5BxGsyDjKfIIVVcuWupP9z2rn6tUG2yCvDJrGtzLIw7NH+5Xss4GUTWhV4xUO nxelA5IHTj9BgIpuH0YiuFgDIhv0KUNECvNNlBbcPelzmuBoAK2J/ocpUymF/8ka wQ6QprQN82XA48LzhjAcwCWxvINT15ujYFW+gV3tcrmiy0DB3Yp0B2azLKqmuwa1 4AACbyRrP4f1zXX3h/LQ+Vu54PskmMAx8sPGWDw5NiCiwDEX8xydKNLDNYe4MWS2 rv+5/EEYpEAzsZb51tqZNOShxw== urn:mace:shibboleth:1.0:nameIdentifier Philippe Poulard philippe.poulard@inria.fr Florian Dufour Florian.Dufour@inrialpes.fr inria.fr MIIDIDCCAgigAwIBAgIVAMvLhIH/kO4Uk4hR9sz1+w7AbaK+MA0GCSqGSIb3DQEB BQUAMBgxFjAUBgNVBAMTDWlkcDEuaW5yaWEuZnIwHhcNMDkwMzI0MTcyNjQ1WhcN MjkwMzI0MTcyNjQ1WjAYMRYwFAYDVQQDEw1pZHAxLmlucmlhLmZyMIIBIjANBgkq hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApyhY2Zv7OX6n0tXylUfpgQ6TTekJ1qvH sCzxArvcDSIbkmasOeR+tWD96A3/NAAzoT9qUVQGW9jhViWXOHbWnCpy+oGyR558 CwLKyW3s64eLpmCPcQEeJRZ5qrRnwFJf3NaitBrgTnZgP33f+5Rqj9nubSF6kWvO P3V8yYSWhOTZHSfQ2ABPDXlHjbeIdgQlCtJm5wBNl9G3359U7Nbd2LFSOZI/fc5N Ohgv+QxShMRMnSHdZ5aovS1YwY6Gpu7d5gF30NBW/nZJLv3Bl7RzK6RBcCEomKfC Za7mrsZsvLHkgaTvgnSJK6Cvvj7lwKVtThOJ/s2Qot+WifQGZlpoCQIDAQABo2Ew XzA+BgNVHREENzA1gg1pZHAxLmlucmlhLmZyhiRodHRwczovL2lkcDEuaW5yaWEu ZnIvaWRwL3NoaWJib2xldGgwHQYDVR0OBBYEFET2ENke8iQOFpTy3U4iYfalAyhv MA0GCSqGSIb3DQEBBQUAA4IBAQBNFi0mEBlSLzyUGNlZrqwjNe5mELigcT+FUuvS bLwPj+SY2L3iJ55R8rGXzfYDXk93JrvosPZsBJadOkcLmELb9N/xcYqj9J89Riee lrh4lR5aj2HC041cwoiT8X8Dof0Js6eeu6rKY/R3zONDPhhLBYvfw8NiMwufbKwF QLPSDCzmgTrwURi7GudGF8+Nmld2ksTa/GK8CAIJkhvq2JuwdPylUHdp264a/HCj e6mt4EwMWTyPLImuko5g1OJpv3QptusujWHHtMcNzx+t+hu0N7V5litMJ5lVnttV EcLaLwP/Je8J8l5lTIZobkfKNMs4Rj5PbFBXezI5MfIidTIW urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient inria.fr MIIDIDCCAgigAwIBAgIVAMvLhIH/kO4Uk4hR9sz1+w7AbaK+MA0GCSqGSIb3DQEB BQUAMBgxFjAUBgNVBAMTDWlkcDEuaW5yaWEuZnIwHhcNMDkwMzI0MTcyNjQ1WhcN MjkwMzI0MTcyNjQ1WjAYMRYwFAYDVQQDEw1pZHAxLmlucmlhLmZyMIIBIjANBgkq hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApyhY2Zv7OX6n0tXylUfpgQ6TTekJ1qvH sCzxArvcDSIbkmasOeR+tWD96A3/NAAzoT9qUVQGW9jhViWXOHbWnCpy+oGyR558 CwLKyW3s64eLpmCPcQEeJRZ5qrRnwFJf3NaitBrgTnZgP33f+5Rqj9nubSF6kWvO P3V8yYSWhOTZHSfQ2ABPDXlHjbeIdgQlCtJm5wBNl9G3359U7Nbd2LFSOZI/fc5N Ohgv+QxShMRMnSHdZ5aovS1YwY6Gpu7d5gF30NBW/nZJLv3Bl7RzK6RBcCEomKfC Za7mrsZsvLHkgaTvgnSJK6Cvvj7lwKVtThOJ/s2Qot+WifQGZlpoCQIDAQABo2Ew XzA+BgNVHREENzA1gg1pZHAxLmlucmlhLmZyhiRodHRwczovL2lkcDEuaW5yaWEu ZnIvaWRwL3NoaWJib2xldGgwHQYDVR0OBBYEFET2ENke8iQOFpTy3U4iYfalAyhv MA0GCSqGSIb3DQEBBQUAA4IBAQBNFi0mEBlSLzyUGNlZrqwjNe5mELigcT+FUuvS bLwPj+SY2L3iJ55R8rGXzfYDXk93JrvosPZsBJadOkcLmELb9N/xcYqj9J89Riee lrh4lR5aj2HC041cwoiT8X8Dof0Js6eeu6rKY/R3zONDPhhLBYvfw8NiMwufbKwF QLPSDCzmgTrwURi7GudGF8+Nmld2ksTa/GK8CAIJkhvq2JuwdPylUHdp264a/HCj e6mt4EwMWTyPLImuko5g1OJpv3QptusujWHHtMcNzx+t+hu0N7V5litMJ5lVnttV EcLaLwP/Je8J8l5lTIZobkfKNMs4Rj5PbFBXezI5MfIidTIW urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient INRIA - Institut National de Recherche en Informatique et Automatique INRIA - Institut National de Recherche en Informatique et Automatique http://unknown.site.com Nicolas Gouble Nicolas.Gouble@inria.fr MIIECjCCAvKgAwIBAgIRAKjsf+bX4EIkB7Hc8/j4ppUwDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0wOTExMTkwMDAwMDBaFw0xMjExMTgyMzU5NTlaMGwxCzAJBgNV BAYTAkZSMRUwEwYDVQQHEwxST0NRVUVOQ09VUlQxLzAtBgNVBAoTJklOU1QgTkFU IFJFQ0hFUkNIRSBJTkZPUk1BVElRVUUgQVVUT01BMRUwEwYDVQQDEwx3d3cuaW5y aWEuZnIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALpcckWIYSqH3XYATeZw HVZKVHoFnpWA/ShEb0iAavr9Jfj6TYqihpUWt9KVXfh0N4ag/8+ceisd5pZoYvat 4R7MGFMEahZucABjyiwGqO2PwKAnVj/VFNSRDF8ARTaVg+P3YpL40tyi6lwSyXBn S/tYp8phwjdWMKyNS6ZsQ7ydAgMBAAGjggFfMIIBWzAfBgNVHSMEGDAWgBQMvZNo DPPeq6NJays3V0fqkOO57TAdBgNVHQ4EFgQUlCDjwVpI2BSh9AB/5ydHiYqQB6ww DgYDVR0PAQH/BAQDAgWgMAwGA1UdEwEB/wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUH AwEGCCsGAQUFBwMCMBgGA1UdIAQRMA8wDQYLKwYBBAGyMQECAh0wOgYDVR0fBDMw MTAvoC2gK4YpaHR0cDovL2NybC50Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xDQS5j cmwwbQYIKwYBBQUHAQEEYTBfMDUGCCsGAQUFBzAChilodHRwOi8vY3J0LnRjcy50 ZXJlbmEub3JnL1RFUkVOQVNTTENBLmNydDAmBggrBgEFBQcwAYYaaHR0cDovL29j c3AudGNzLnRlcmVuYS5vcmcwFwYDVR0RBBAwDoIMd3d3LmlucmlhLmZyMA0GCSqG SIb3DQEBBQUAA4IBAQAAig8LvX0nDmDKwbtpHobdzx5xlww/x1D4Eh3jP/xIwSLX r9buktdmdqLVXq9kIKnZGGB5owW6KDh38LAURKMGoIqXvbmrmR1sPs6SBaGDrJDa s5mNtlm22/boWu99ueK23JhMucmOVBkB7ktmC7EoncUG/9jR+pNTXUAWLJMWB50M NRyowQ0HT8fXzyq0QBhSXWoEPCMMHnlp4f16utAFacEg+7alsv/CVysfCVufMNng /5yhWR9NJB30ZcCe4N+lkvTVT5aCTGQJ4Foei6zCT5wy7bHIx+qxcWrZ41XqcSdn Z7AhHZuoSbM6lWQ7szJ+j007BzPHbh+oQoR6qf7u MIIECjCCAvKgAwIBAgIRAKjsf+bX4EIkB7Hc8/j4ppUwDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0wOTExMTkwMDAwMDBaFw0xMjExMTgyMzU5NTlaMGwxCzAJBgNV BAYTAkZSMRUwEwYDVQQHEwxST0NRVUVOQ09VUlQxLzAtBgNVBAoTJklOU1QgTkFU IFJFQ0hFUkNIRSBJTkZPUk1BVElRVUUgQVVUT01BMRUwEwYDVQQDEwx3d3cuaW5y aWEuZnIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALpcckWIYSqH3XYATeZw HVZKVHoFnpWA/ShEb0iAavr9Jfj6TYqihpUWt9KVXfh0N4ag/8+ceisd5pZoYvat 4R7MGFMEahZucABjyiwGqO2PwKAnVj/VFNSRDF8ARTaVg+P3YpL40tyi6lwSyXBn S/tYp8phwjdWMKyNS6ZsQ7ydAgMBAAGjggFfMIIBWzAfBgNVHSMEGDAWgBQMvZNo DPPeq6NJays3V0fqkOO57TAdBgNVHQ4EFgQUlCDjwVpI2BSh9AB/5ydHiYqQB6ww DgYDVR0PAQH/BAQDAgWgMAwGA1UdEwEB/wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUH AwEGCCsGAQUFBwMCMBgGA1UdIAQRMA8wDQYLKwYBBAGyMQECAh0wOgYDVR0fBDMw MTAvoC2gK4YpaHR0cDovL2NybC50Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xDQS5j cmwwbQYIKwYBBQUHAQEEYTBfMDUGCCsGAQUFBzAChilodHRwOi8vY3J0LnRjcy50 ZXJlbmEub3JnL1RFUkVOQVNTTENBLmNydDAmBggrBgEFBQcwAYYaaHR0cDovL29j c3AudGNzLnRlcmVuYS5vcmcwFwYDVR0RBBAwDoIMd3d3LmlucmlhLmZyMA0GCSqG SIb3DQEBBQUAA4IBAQAAig8LvX0nDmDKwbtpHobdzx5xlww/x1D4Eh3jP/xIwSLX r9buktdmdqLVXq9kIKnZGGB5owW6KDh38LAURKMGoIqXvbmrmR1sPs6SBaGDrJDa s5mNtlm22/boWu99ueK23JhMucmOVBkB7ktmC7EoncUG/9jR+pNTXUAWLJMWB50M NRyowQ0HT8fXzyq0QBhSXWoEPCMMHnlp4f16utAFacEg+7alsv/CVysfCVufMNng /5yhWR9NJB30ZcCe4N+lkvTVT5aCTGQJ4Foei6zCT5wy7bHIx+qxcWrZ41XqcSdn Z7AhHZuoSbM6lWQ7szJ+j007BzPHbh+oQoR6qf7u urn:mace:shibboleth:1.0:nameIdentifier Philippe Poulard philippe.poulard@inria.fr Florian Dufour Florian.Dufour@inrialpes.fr wiki.inria.fr CN=wiki.inria.fr,O=INST NAT RECHERCHE INFORMATIQUE AUTOMA,L=ROCQUENCOURT,C=FR CN=TERENA SSL CA,O=TERENA,C=NL 44770934802532952006 MIIECzCCAvOgAwIBAgIQIa6Rgn6i31Nrm0OY4gccYzANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTA5MTEyNjAwMDAwMFoXDTEyMTEyNTIzNTk1OVowbTELMAkGA1UE BhMCRlIxFTATBgNVBAcTDFJPQ1FVRU5DT1VSVDEvMC0GA1UEChMmSU5TVCBOQVQg UkVDSEVSQ0hFIElORk9STUFUSVFVRSBBVVRPTUExFjAUBgNVBAMTDXdpa2kuaW5y aWEuZnIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAJOUFBhYYlq6Jboc8ix8 BNGNHNdvUfcjIGX7r/OEFUrrBAuEJxvC1tXJWh3YPAqNc23celbx4a3j3rnhpXRR li2kzgqX1ty170+Yjfep4XvrCFNuLLdFj6Bi7K8mbNkdi2gyqynV2qFNnc52Sg5I EEb29CUd7Ltm6YWcc7hG4XB/AgMBAAGjggFgMIIBXDAfBgNVHSMEGDAWgBQMvZNo DPPeq6NJays3V0fqkOO57TAdBgNVHQ4EFgQUlxpbPrQyNnqQZjTN0H04DcwhurYw DgYDVR0PAQH/BAQDAgWgMAwGA1UdEwEB/wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUH AwEGCCsGAQUFBwMCMBgGA1UdIAQRMA8wDQYLKwYBBAGyMQECAh0wOgYDVR0fBDMw MTAvoC2gK4YpaHR0cDovL2NybC50Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xDQS5j cmwwbQYIKwYBBQUHAQEEYTBfMDUGCCsGAQUFBzAChilodHRwOi8vY3J0LnRjcy50 ZXJlbmEub3JnL1RFUkVOQVNTTENBLmNydDAmBggrBgEFBQcwAYYaaHR0cDovL29j c3AudGNzLnRlcmVuYS5vcmcwGAYDVR0RBBEwD4INd2lraS5pbnJpYS5mcjANBgkq hkiG9w0BAQUFAAOCAQEAG1AoYospFGuxplo/6LAjxaZh6UB4w6PftdY+qsBy7nGt eOXPmBYqoynBYXdaHxGTlFt9U5mi+U3TMkAUdviLKVsFzSNr0SYGUQHfeV2Pj53y WxfRqSGrzcqJS590sESMty15652ixhCpc7trkUf0l8Hx9YSJJbWaITzSnMDuLU96 8E4YWmjPdDlaXx+hBlTjZHkhuWtPJsSxMnq8H/DutcXcpNVM5RddPD0ui7Y6XVbE pLrFH+lyuogjEbnZN5DqM3Rybenf6CZ2G//zjUbAGV4/0UCe3no20R7zrNE65L4p z9jMuz1whmdMFbEenk4zThqEHx3Jv1KfEbyvn+xSfQ== wiki.inria.fr CN=wiki.inria.fr,O=INST NAT RECHERCHE INFORMATIQUE AUTOMA,L=ROCQUENCOURT,C=FR CN=TERENA SSL CA,O=TERENA,C=NL 44770934802532952006 MIIECzCCAvOgAwIBAgIQIa6Rgn6i31Nrm0OY4gccYzANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTA5MTEyNjAwMDAwMFoXDTEyMTEyNTIzNTk1OVowbTELMAkGA1UE BhMCRlIxFTATBgNVBAcTDFJPQ1FVRU5DT1VSVDEvMC0GA1UEChMmSU5TVCBOQVQg UkVDSEVSQ0hFIElORk9STUFUSVFVRSBBVVRPTUExFjAUBgNVBAMTDXdpa2kuaW5y aWEuZnIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAJOUFBhYYlq6Jboc8ix8 BNGNHNdvUfcjIGX7r/OEFUrrBAuEJxvC1tXJWh3YPAqNc23celbx4a3j3rnhpXRR li2kzgqX1ty170+Yjfep4XvrCFNuLLdFj6Bi7K8mbNkdi2gyqynV2qFNnc52Sg5I EEb29CUd7Ltm6YWcc7hG4XB/AgMBAAGjggFgMIIBXDAfBgNVHSMEGDAWgBQMvZNo DPPeq6NJays3V0fqkOO57TAdBgNVHQ4EFgQUlxpbPrQyNnqQZjTN0H04DcwhurYw DgYDVR0PAQH/BAQDAgWgMAwGA1UdEwEB/wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUH AwEGCCsGAQUFBwMCMBgGA1UdIAQRMA8wDQYLKwYBBAGyMQECAh0wOgYDVR0fBDMw MTAvoC2gK4YpaHR0cDovL2NybC50Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xDQS5j cmwwbQYIKwYBBQUHAQEEYTBfMDUGCCsGAQUFBzAChilodHRwOi8vY3J0LnRjcy50 ZXJlbmEub3JnL1RFUkVOQVNTTENBLmNydDAmBggrBgEFBQcwAYYaaHR0cDovL29j c3AudGNzLnRlcmVuYS5vcmcwGAYDVR0RBBEwD4INd2lraS5pbnJpYS5mcjANBgkq hkiG9w0BAQUFAAOCAQEAG1AoYospFGuxplo/6LAjxaZh6UB4w6PftdY+qsBy7nGt eOXPmBYqoynBYXdaHxGTlFt9U5mi+U3TMkAUdviLKVsFzSNr0SYGUQHfeV2Pj53y WxfRqSGrzcqJS590sESMty15652ixhCpc7trkUf0l8Hx9YSJJbWaITzSnMDuLU96 8E4YWmjPdDlaXx+hBlTjZHkhuWtPJsSxMnq8H/DutcXcpNVM5RddPD0ui7Y6XVbE pLrFH+lyuogjEbnZN5DqM3Rybenf6CZ2G//zjUbAGV4/0UCe3no20R7zrNE65L4p z9jMuz1whmdMFbEenk4zThqEHx3Jv1KfEbyvn+xSfQ== inrp.fr MIIEDzCCAvegAwIBAgIQEPmUdTfHruxkTHjwTRTCizANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTA5MTIxNjAwMDAwMFoXDTEyMTIxNTIzNTk1OVowbTELMAkGA1UE BhMCRlIxDTALBgNVBAcTBExZT04xMzAxBgNVBAoTKkluc3RpdHV0IE5hdGlvbmFs IGRlIFJlY2hlcmNoZSBQZWRhZ29naXF1ZTEaMBgGA1UEAxMReGVuLWF1dGgxLmlu cnAuZnIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAIH9xW7kh42d0Dni9faB g6SpY0oQbaZ7hOFheyu3LEggSUNNvYMSz0bDA0dZ8xNzYsVWADseCY2HoqWL+Xli NeF/Baa5RA+w6FqA1CWEsSp/xh5wgZCD7WiKWBhZATMaZsfZrRrBLzDEZzJqd6Ts tPDS1lEtN/PRdCxJ/nLBhsipAgMBAAGjggFkMIIBYDAfBgNVHSMEGDAWgBQMvZNo DPPeq6NJays3V0fqkOO57TAdBgNVHQ4EFgQUxJjyPgtcljXAZIZ7mqxGlX1Pk+8w DgYDVR0PAQH/BAQDAgWgMAwGA1UdEwEB/wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUH AwEGCCsGAQUFBwMCMBgGA1UdIAQRMA8wDQYLKwYBBAGyMQECAh0wOgYDVR0fBDMw MTAvoC2gK4YpaHR0cDovL2NybC50Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xDQS5j cmwwbQYIKwYBBQUHAQEEYTBfMDUGCCsGAQUFBzAChilodHRwOi8vY3J0LnRjcy50 ZXJlbmEub3JnL1RFUkVOQVNTTENBLmNydDAmBggrBgEFBQcwAYYaaHR0cDovL29j c3AudGNzLnRlcmVuYS5vcmcwHAYDVR0RBBUwE4IReGVuLWF1dGgxLmlucnAuZnIw DQYJKoZIhvcNAQEFBQADggEBADFFJWRTqUvTlqBDu+tSehoFipqoALW7qkt3O85H MH3kzY2QraL1h6J6VL4aCcZxuFKlpulcae686QhDmc1ZhHn9DLR+JhwCxybdZ1jD J4EFXkN+tFLyikZPP+h8YG5QupQVNKw1YHkeD3ZlaQO9oLkWR1whIVh9c9Rjufc3 W1V/Y1BDNaYgtSFqKQM3YXM5T7InG3n3hU8zYHvo6Y02GwxSoDe8+r0qmylj7Rh0 WSkerATAg6ZLU3esejHyUJ7fQKsja9ScC0xTKl4EmVrtnXik9deqvDhW+KVOjzJu nvdSiVMGOp7tEnk7iWszpXLQef9mUpwPBYRRU/ObLYpdVB0= MIIDMDCCAhigAwIBAgIVAPPsbX4JJBue4yrC8q/0XftZ+m55MA0GCSqGSIb3DQEB BQUAMBwxGjAYBgNVBAMTEXhlbi1hdXRoMS5pbnJwLmZyMB4XDTA5MDkxNjEyMDQx NFoXDTI5MDkxNjEyMDQxNFowHDEaMBgGA1UEAxMReGVuLWF1dGgxLmlucnAuZnIw ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGIEBAhh9fO5ztFVbleC3p tCHFnbiAhbkkXf4cWw3E0mZl9ID+BXcu4cQmRZIq9XMwf+L0Y6mtFGlkL1qyNHz/ pnsdLeGa2eVeuUSkO5qqjqhsKuqbuc0Kg7XKlCSNYFXSrwFcn2rdGbifl9PS6M/I 6wr7V1d+qaWmK/mcadibCciev3YG2cksGRL7yP80EJR3tsCSVm18T/DNMA9Nek9D L6y/Fg5G48o2ZweSVPrJ6ZVhwV6yVbjylYZvG1IxW2GAS3AbsxIxwIYDx4xkQoVl Qd2z21xcqXe6mks00AvvGRHK9v0oHdbFqFwUATieQMIHDLI7fl37copQbWy62q0p AgMBAAGjaTBnMEYGA1UdEQQ/MD2CEXhlbi1hdXRoMS5pbnJwLmZyhihodHRwczov L3hlbi1hdXRoMS5pbnJwLmZyL2lkcC9zaGliYm9sZXRoMB0GA1UdDgQWBBT8ot12 cx9FCpx9+zh/bRttTvi6TDANBgkqhkiG9w0BAQUFAAOCAQEAaNtqe6TGmF2qh/Z1 3HJG0ddfGpFc0k+8///iEKe376mW6cSInlVFD+uywSBPR+x4l2uC3cC/XLrBNl9U 2FN65CddY6qkEJ6AQ3tZ/ca9/prwxbi6cjkP+sDNmYh0QkWZRbZAq2iaLn/YuK2j gP6h/2kgzvLSJ2k1FKZ5E6h0F6JkZ+eNT+oBPnzUCkd6UmxN469JNfMtaa+mmp1g 0MJnbgQt+SO4MzD8k3lffYFYWK4ct4ZCqj9lbw5FLBuwZLY0pFW0TTiN44vqalPN GQgrVqhopTsGnz8vMpkb5rrGbsWZr7MMy+vuqSdgFCjTHvdX5LhYDhCacmVLAhVN rd1l7w== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient INRP - Institut National de Recherche Pédagogique INRP - Institut National de Recherche Pédagogique http://unknown.site.com Hugo Étiévant assistance@inrp.fr Nicolas Carel assistance@inrp.fr MIIEFjCCAv6gAwIBAgIRAP09qHB0eNPVV02zXVCpSnUwDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0xMDAyMDMwMDAwMDBaFw0xMzAyMDIyMzU5NTlaMHAxCzAJBgNV BAYTAkZSMQ0wCwYDVQQHEwRMWU9OMTMwMQYDVQQKEypJbnN0aXR1dCBOYXRpb25h bCBkZSBSZWNoZXJjaGUgUGVkYWdvZ2lxdWUxHTAbBgNVBAMTFHhlbi1lenByb3h5 MS5pbnJwLmZyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDN/nrAIEA8LpWV 6jB+AfS1Rw366Jof7MHaAD+4NtUaUJ5gXXDJqnGjGGVFBlHUVxWwdtAJLpVThShR bVRyTVssryR8DnqFG49B/LRnT2v3iHIJMnRRDMQI7NIbmEplk//YOtJS1Ul6Fq4T pgtUFsPxIy41I1uTRpsOAtKFUL1oWwIDAQABo4IBZzCCAWMwHwYDVR0jBBgwFoAU DL2TaAzz3qujSWsrN1dH6pDjue0wHQYDVR0OBBYEFIHAS+fI774FljVAFoZmKy48 DKokMA4GA1UdDwEB/wQEAwIFoDAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsG AQUFBwMBBggrBgEFBQcDAjAYBgNVHSAEETAPMA0GCysGAQQBsjEBAgIdMDoGA1Ud HwQzMDEwL6AtoCuGKWh0dHA6Ly9jcmwudGNzLnRlcmVuYS5vcmcvVEVSRU5BU1NM Q0EuY3JsMG0GCCsGAQUFBwEBBGEwXzA1BggrBgEFBQcwAoYpaHR0cDovL2NydC50 Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcnQwJgYIKwYBBQUHMAGGGmh0dHA6 Ly9vY3NwLnRjcy50ZXJlbmEub3JnMB8GA1UdEQQYMBaCFHhlbi1lenByb3h5MS5p bnJwLmZyMA0GCSqGSIb3DQEBBQUAA4IBAQBSW/dgBf+NHprkNCzs9Lc6/Hjvg7By 6EvAc2K3VBHPSJ80UEt8jnD0rq/8ZCtMO46Vszs629LW3Gq/H1jJE877WGAFHdEr uFL1pVUUBGmV58C7zMPF08vcApTZ4RDy/V8CB0OxMoCv0uHVlWhp9KmWWAmd0HiS aGsv2esvgmAWw1Utbsp/snD4GtNZS7vgWW9pMEdkAWZDIIo7zX4E8yEhVSIM9qgO mq/ung3HBvOn+TzUBH8Tf6O6Ii8GQBW0+v10GGFkEDbLIC5qF5VcIyHfun2u578h jaGs3G4hgb4IdqIOZTW3Hw6tcEQ3P/SYjUI1/pzqJKghooYGeE4Yx2r9 MIIEFjCCAv6gAwIBAgIRAP09qHB0eNPVV02zXVCpSnUwDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0xMDAyMDMwMDAwMDBaFw0xMzAyMDIyMzU5NTlaMHAxCzAJBgNV BAYTAkZSMQ0wCwYDVQQHEwRMWU9OMTMwMQYDVQQKEypJbnN0aXR1dCBOYXRpb25h bCBkZSBSZWNoZXJjaGUgUGVkYWdvZ2lxdWUxHTAbBgNVBAMTFHhlbi1lenByb3h5 MS5pbnJwLmZyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDN/nrAIEA8LpWV 6jB+AfS1Rw366Jof7MHaAD+4NtUaUJ5gXXDJqnGjGGVFBlHUVxWwdtAJLpVThShR bVRyTVssryR8DnqFG49B/LRnT2v3iHIJMnRRDMQI7NIbmEplk//YOtJS1Ul6Fq4T pgtUFsPxIy41I1uTRpsOAtKFUL1oWwIDAQABo4IBZzCCAWMwHwYDVR0jBBgwFoAU DL2TaAzz3qujSWsrN1dH6pDjue0wHQYDVR0OBBYEFIHAS+fI774FljVAFoZmKy48 DKokMA4GA1UdDwEB/wQEAwIFoDAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsG AQUFBwMBBggrBgEFBQcDAjAYBgNVHSAEETAPMA0GCysGAQQBsjEBAgIdMDoGA1Ud HwQzMDEwL6AtoCuGKWh0dHA6Ly9jcmwudGNzLnRlcmVuYS5vcmcvVEVSRU5BU1NM Q0EuY3JsMG0GCCsGAQUFBwEBBGEwXzA1BggrBgEFBQcwAoYpaHR0cDovL2NydC50 Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcnQwJgYIKwYBBQUHMAGGGmh0dHA6 Ly9vY3NwLnRjcy50ZXJlbmEub3JnMB8GA1UdEQQYMBaCFHhlbi1lenByb3h5MS5p bnJwLmZyMA0GCSqGSIb3DQEBBQUAA4IBAQBSW/dgBf+NHprkNCzs9Lc6/Hjvg7By 6EvAc2K3VBHPSJ80UEt8jnD0rq/8ZCtMO46Vszs629LW3Gq/H1jJE877WGAFHdEr uFL1pVUUBGmV58C7zMPF08vcApTZ4RDy/V8CB0OxMoCv0uHVlWhp9KmWWAmd0HiS aGsv2esvgmAWw1Utbsp/snD4GtNZS7vgWW9pMEdkAWZDIIo7zX4E8yEhVSIM9qgO mq/ung3HBvOn+TzUBH8Tf6O6Ii8GQBW0+v10GGFkEDbLIC5qF5VcIyHfun2u578h jaGs3G4hgb4IdqIOZTW3Hw6tcEQ3P/SYjUI1/pzqJKghooYGeE4Yx2r9 urn:mace:shibboleth:1.0:nameIdentifier Hugo Étiévant assistance@inrp.fr insa-rouen.fr MIIDTDCCAjSgAwIBAgIVAMjnzzUZMi+gw/G65zb8aEmhPMcsMA0GCSqGSIb3DQEB BQUAMCMxITAfBgNVBAMTGHNoaWJib2xldGguaW5zYS1yb3Vlbi5mcjAeFw0xMDAy MTIxNDE0MTNaFw0zMDAyMTIxNDE0MTNaMCMxITAfBgNVBAMTGHNoaWJib2xldGgu aW5zYS1yb3Vlbi5mcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAIrS +3iUIFUKCA9bdG5CkzYxYKWg6huMkcRrqruetEbUobvCf/B5Q4R2SuEHa+VG2SMd bgjcHSjPIqwtzcaFq9cEK+I24UPSpBUYei/m9//CWMUNR0YGJWgQdtMi9v4N60qP Fiep4U5vj/whakGeMY5J3E8mKrzITemh0yLFThQh+edav5QaPOuOuWW1kx8e3Y2P uCEdDDvxXS6vtUJ0Y9OOmq824e9Olo2DIHsbicraB3hnHVDwljw4gwKGDqlkr7kJ P/5ORgPyRa51RcD21XHaMcNbiZ9BWuyZkgIX7MwY5Pucn9xZBLOCF1XVPrIz5Thw 3JBDfons1+l52SpmlW0CAwEAAaN3MHUwVAYDVR0RBE0wS4IYc2hpYmJvbGV0aC5p bnNhLXJvdWVuLmZyhi9odHRwczovL3NoaWJib2xldGguaW5zYS1yb3Vlbi5mci9p ZHAvc2hpYmJvbGV0aDAdBgNVHQ4EFgQUVroJwDQMTj+P/Qy2rF0hgSrMGd0wDQYJ KoZIhvcNAQEFBQADggEBABzLkZCSjBO68HuRhDjlVblgc9up8dN5pZZMxxWyQfQM GZgv3sYwktpBL/I7jUuEhiMbr5n8I/hq0HrxiBAFulVvuLhahzfY4GxMwEBHTYm/ gOoNn2cJD+ZKFF1PPZ3TYnlbM1nJ17AbSCjS2QxzNygTzi2tDulpOJgUmacLr81Q VZrWGgkPWyDKh3foQ7Olh9eiySh1jSl55uJE4ze1yopOiFyLfe4PHYnsfanu9F0k 2VITeNSh7Epbl3wutJnfXFpa4XpmWMIzeQD7Eowrs5Oewk1peM6kl2fzn4gKcFXo u1n3Fa3LxTYXo8TB+XbBKdEFD+MdaGILc/H8Gb5EEak= urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient insa-rouen.fr MIIDTDCCAjSgAwIBAgIVAMjnzzUZMi+gw/G65zb8aEmhPMcsMA0GCSqGSIb3DQEB BQUAMCMxITAfBgNVBAMTGHNoaWJib2xldGguaW5zYS1yb3Vlbi5mcjAeFw0xMDAy MTIxNDE0MTNaFw0zMDAyMTIxNDE0MTNaMCMxITAfBgNVBAMTGHNoaWJib2xldGgu aW5zYS1yb3Vlbi5mcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAIrS +3iUIFUKCA9bdG5CkzYxYKWg6huMkcRrqruetEbUobvCf/B5Q4R2SuEHa+VG2SMd bgjcHSjPIqwtzcaFq9cEK+I24UPSpBUYei/m9//CWMUNR0YGJWgQdtMi9v4N60qP Fiep4U5vj/whakGeMY5J3E8mKrzITemh0yLFThQh+edav5QaPOuOuWW1kx8e3Y2P uCEdDDvxXS6vtUJ0Y9OOmq824e9Olo2DIHsbicraB3hnHVDwljw4gwKGDqlkr7kJ P/5ORgPyRa51RcD21XHaMcNbiZ9BWuyZkgIX7MwY5Pucn9xZBLOCF1XVPrIz5Thw 3JBDfons1+l52SpmlW0CAwEAAaN3MHUwVAYDVR0RBE0wS4IYc2hpYmJvbGV0aC5p bnNhLXJvdWVuLmZyhi9odHRwczovL3NoaWJib2xldGguaW5zYS1yb3Vlbi5mci9p ZHAvc2hpYmJvbGV0aDAdBgNVHQ4EFgQUVroJwDQMTj+P/Qy2rF0hgSrMGd0wDQYJ KoZIhvcNAQEFBQADggEBABzLkZCSjBO68HuRhDjlVblgc9up8dN5pZZMxxWyQfQM GZgv3sYwktpBL/I7jUuEhiMbr5n8I/hq0HrxiBAFulVvuLhahzfY4GxMwEBHTYm/ gOoNn2cJD+ZKFF1PPZ3TYnlbM1nJ17AbSCjS2QxzNygTzi2tDulpOJgUmacLr81Q VZrWGgkPWyDKh3foQ7Olh9eiySh1jSl55uJE4ze1yopOiFyLfe4PHYnsfanu9F0k 2VITeNSh7Epbl3wutJnfXFpa4XpmWMIzeQD7Eowrs5Oewk1peM6kl2fzn4gKcFXo u1n3Fa3LxTYXo8TB+XbBKdEFD+MdaGILc/H8Gb5EEak= urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient INSA de Rouen INSA de Rouen http://unknown.site.com LE GUILLOUS Franck franck.le-guillous@insa-rouen.fr Kesraoui Nadir nadir.kesraoui@insa-rouen.fr inserm.fr MIIDHzCCAgegAwIBAgIUPRg4DDJsvsJXUOi8j5yeUXXX7vwwDQYJKoZIhvcNAQEF BQAwGDEWMBQGA1UEAxMNaWRwLmluc2VybS5mcjAeFw0xMDA5MjcxMjQwMzVaFw0z MDA5MjcxMjQwMzVaMBgxFjAUBgNVBAMTDWlkcC5pbnNlcm0uZnIwggEiMA0GCSqG SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCZMeilvtmNQnYydiIIwt449Et+Hpk5lqUg 6WSjV5CHD7Lz784CjJwXJ3gZ2c2oC6ejVOFxr0RUuxdxmawVY211MZPuyjY8G34i sqbxBLYseqBw9SGUQqWKgoPTimcHryL+qj18mzOgevSFYKvVJ/q/nqxDor3/c20V KpjVBIL6lMWNqnBrZX63D1O6/clt8RHFDVjOaCHn47IQVBccRfE4AMr9tRCs+q91 CzvGYMyxSy4hlqyPK/WW+LDY5Hmn3Kp8LZWSKekyBZB8nK1j4qSxOET1zFucd3FU MB7pQdtgzs15wbR8JTK1YYO6OJ3ffrY9srenSlcLYdZ3Iud+6pbXAgMBAAGjYTBf MD4GA1UdEQQ3MDWCDWlkcC5pbnNlcm0uZnKGJGh0dHBzOi8vaWRwLmluc2VybS5m ci9pZHAvc2hpYmJvbGV0aDAdBgNVHQ4EFgQU8fCrONu36laDi9nBzT+NIIKejZQw DQYJKoZIhvcNAQEFBQADggEBADDcCgGRVAub909ulzl/iYhzl3QhR9XjKxzWV4JH 4HI7Hb3DAPOcffdbSdG2lLv4qw+Ds9Y08tI9Gof7bDVWE08ye9xFN2BwBTn2KKJz lq6FPbfW5Swi289Q0UvCI7J5LbYTAiU+2CYSSgxg0cGer8ho1+hSsKIoLaqXMjz2 3TMmJK+QuPbnW2jKS3xcdHOUhtZXYKQE+veaHNlNt/8vqF9C7IzCRfSCeT880cHw f6ou5oRTltOZOUJfXI1XMhAUNnU7zQvrFeoGrRzGv3zq8AieXbRyWhXY1Eo1mPpS 4gA/AqUGz/DMMnCEWuy1Dmq9rAOVcoAxntyKDo0ntUiBrUg= urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient inserm.fr MIIDHzCCAgegAwIBAgIUPRg4DDJsvsJXUOi8j5yeUXXX7vwwDQYJKoZIhvcNAQEF BQAwGDEWMBQGA1UEAxMNaWRwLmluc2VybS5mcjAeFw0xMDA5MjcxMjQwMzVaFw0z MDA5MjcxMjQwMzVaMBgxFjAUBgNVBAMTDWlkcC5pbnNlcm0uZnIwggEiMA0GCSqG SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCZMeilvtmNQnYydiIIwt449Et+Hpk5lqUg 6WSjV5CHD7Lz784CjJwXJ3gZ2c2oC6ejVOFxr0RUuxdxmawVY211MZPuyjY8G34i sqbxBLYseqBw9SGUQqWKgoPTimcHryL+qj18mzOgevSFYKvVJ/q/nqxDor3/c20V KpjVBIL6lMWNqnBrZX63D1O6/clt8RHFDVjOaCHn47IQVBccRfE4AMr9tRCs+q91 CzvGYMyxSy4hlqyPK/WW+LDY5Hmn3Kp8LZWSKekyBZB8nK1j4qSxOET1zFucd3FU MB7pQdtgzs15wbR8JTK1YYO6OJ3ffrY9srenSlcLYdZ3Iud+6pbXAgMBAAGjYTBf MD4GA1UdEQQ3MDWCDWlkcC5pbnNlcm0uZnKGJGh0dHBzOi8vaWRwLmluc2VybS5m ci9pZHAvc2hpYmJvbGV0aDAdBgNVHQ4EFgQU8fCrONu36laDi9nBzT+NIIKejZQw DQYJKoZIhvcNAQEFBQADggEBADDcCgGRVAub909ulzl/iYhzl3QhR9XjKxzWV4JH 4HI7Hb3DAPOcffdbSdG2lLv4qw+Ds9Y08tI9Gof7bDVWE08ye9xFN2BwBTn2KKJz lq6FPbfW5Swi289Q0UvCI7J5LbYTAiU+2CYSSgxg0cGer8ho1+hSsKIoLaqXMjz2 3TMmJK+QuPbnW2jKS3xcdHOUhtZXYKQE+veaHNlNt/8vqF9C7IzCRfSCeT880cHw f6ou5oRTltOZOUJfXI1XMhAUNnU7zQvrFeoGrRzGv3zq8AieXbRyWhXY1Eo1mPpS 4gA/AqUGz/DMMnCEWuy1Dmq9rAOVcoAxntyKDo0ntUiBrUg= urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient INSERM INSERM http://unknown.site.com Moizo Laurent resnat.dsi@inserm.fr Stevens Guillaume resnat.dsi@inserm.fr ticket.iop.org MIIFejCCBGKgAwIBAgIQRs9QFKCMIHlnWILL+H/kMjANBgkqhkiG9w0BAQUFADCB tTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1c2Ug YXQgaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYSAoYykxMDEvMC0GA1UEAxMm VmVyaVNpZ24gQ2xhc3MgMyBTZWN1cmUgU2VydmVyIENBIC0gRzMwHhcNMTEwMzA5 MDAwMDAwWhcNMTIwNDA2MjM1OTU5WjCB6DELMAkGA1UEBhMCR0IxDTALBgNVBAgT BEF2b24xEDAOBgNVBAcUB0JyaXN0b2wxGzAZBgNVBAoUEklPUCBQdWJsaXNoaW5n IEx0ZDE1MDMGA1UECxQsVGVybXMgb2YgdXNlIGF0IHd3dy52ZXJpc2lnbi5jby51 ay9ycGEgKGMpMDUxIjAgBgNVBAsTGUF1dGhlbnRpY2F0ZWQgYnkgVmVyaVNpZ24x JzAlBgNVBAsTHk1lbWJlciwgVmVyaVNpZ24gVHJ1c3QgTmV0d29yazEXMBUGA1UE AxQOdGlja2V0LmlvcC5vcmcwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAK0k vYlzSH7vvdi1wquPhBap5XOkZbXSTzxFauceC62qdw2xOwCJW+N8VPliT2bF0+Ic uqBRWXRoF7+z5aJWf7Zrq4XjxlJVd0TkiNGSXRY7IA7c2ciNPS8YP+iVrjoHcO0N 9JFZkfuqnFdajf6exlCe0ZpW9Q/i9QUBglS8oeQhAgMBAAGjggHTMIIBzzAJBgNV HRMEAjAAMAsGA1UdDwQEAwIFoDBFBgNVHR8EPjA8MDqgOKA2hjRodHRwOi8vU1ZS U2VjdXJlLUczLWNybC52ZXJpc2lnbi5jb20vU1ZSU2VjdXJlRzMuY3JsMEYGA1Ud IAQ/MD0wOwYLYIZIAYb4RQEHFwMwLDAqBggrBgEFBQcCARYeaHR0cHM6Ly93d3cu dmVyaXNpZ24uY28udWsvcnBhMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcD AjAfBgNVHSMEGDAWgBQNRFwWU0TBgn4dIKsl9AFj2L55pTB2BggrBgEFBQcBAQRq MGgwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLnZlcmlzaWduLmNvbTBABggrBgEF BQcwAoY0aHR0cDovL1NWUlNlY3VyZS1HMy1haWEudmVyaXNpZ24uY29tL1NWUlNl Y3VyZUczLmNlcjBuBggrBgEFBQcBDARiMGChXqBcMFowWDBWFglpbWFnZS9naWYw ITAfMAcGBSsOAwIaBBRLa7kolgYMu9BSOJsprEsHiyEFGDAmFiRodHRwOi8vbG9n by52ZXJpc2lnbi5jb20vdnNsb2dvMS5naWYwDQYJKoZIhvcNAQEFBQADggEBABp/ vWyJLNePxfNv1kLP9w2F5O6vpJr/y4NuH/Wv5LpJinN9KZ6Jht7zC2g7VaGvA75+ bb95cQ43uJ8KpOMmsaQ4vapwAZLxW/twUMUh2qbUmlmBnkKBPNZxzCRcNmhKOAfe ngqzUjEo/eZpsFfuvg9d/9L1od5kDfGFr4OFeN+Tin7zHoKbRv129NyIwLhaSixA t7LgIqlDQ4PRHCg0YWsE1CBSzSy+nWgDmWjcRIYeFoXve+wpsup3gtoBcxSKp6R5 Zo/W8ldI1Yak/Rkmn/73b1cGG0uqRDWfOHiswnes/xjDIQS9qqJRlNFHd9jkHxwb Ny/fu2lNRrmtoPmTctI= urn:mace:shibboleth:1.0:nameIdentifier IOP Publishing Ltd IOP online services http://www.iop.org/ Peter Haworth peter.haworth@iop.org Richard Corfield richard.corfield@iop.org Chris Hayes chris.hayes@iop.org Laura Shaw laura.shaw@iop.org bretagne.iufm.fr MIIErDCCA5SgAwIBAgIQRmz9EXsKgXSG7w3iHBAacTANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTEwMDQwODAwMDAwMFoXDTEzMDQwNzIzNTk1OVowfDELMAkGA1UE BhMCRlIxDjAMBgNVBAcTBUJyZXN0MRwwGgYDVQQKExNVTklWRVJTSVRFIERFIEJS RVNUMRkwFwYDVQQLExBJVUZNIGRlIEJyZXRhZ25lMSQwIgYDVQQDExtmZWRlcmF0 aW9uLmJyZXRhZ25lLml1Zm0uZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK AoIBAQC9io/anctVdl1XJKVAOdH/smD4k5iu6z/izJwt32LXFSgs5KLYi7pUThAv awK8Iky5+60HAXI6Oyxj4GYY9+2mlyjTi+HXeE4BeIUzznGFcp0tL+Iz3WrY5x+P HQaR9YdjhRbe72jyGPA0lnS6OI7dxJaI18IXqh8nmcS1uJcxyFBsRG9MGVX2PWWZ 8hB3TEL3vNybl59VOltoAjm1m2NikQK70Hr6w+TofDEmht0qAubTWLN7c9v2UGos +/Z1qfAJTZ5En4eG0V2z2NHDwcqbg8dUjUVgmw05aIkhS1ecIp9EkRLdUzbyh5aY yFXaM/6L77+BqHTSswf6X4sKjn9NAgMBAAGjggFuMIIBajAfBgNVHSMEGDAWgBQM vZNoDPPeq6NJays3V0fqkOO57TAdBgNVHQ4EFgQUzLxiXZeukJyQudQQyHUqS7vX 9XwwDgYDVR0PAQH/BAQDAgWgMAwGA1UdEwEB/wQCMAAwHQYDVR0lBBYwFAYIKwYB BQUHAwEGCCsGAQUFBwMCMBgGA1UdIAQRMA8wDQYLKwYBBAGyMQECAh0wOgYDVR0f BDMwMTAvoC2gK4YpaHR0cDovL2NybC50Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xD QS5jcmwwbQYIKwYBBQUHAQEEYTBfMDUGCCsGAQUFBzAChilodHRwOi8vY3J0LnRj cy50ZXJlbmEub3JnL1RFUkVOQVNTTENBLmNydDAmBggrBgEFBQcwAYYaaHR0cDov L29jc3AudGNzLnRlcmVuYS5vcmcwJgYDVR0RBB8wHYIbZmVkZXJhdGlvbi5icmV0 YWduZS5pdWZtLmZyMA0GCSqGSIb3DQEBBQUAA4IBAQChVtxeBUo5Y/kZfvLjKZB2 lgotm/dUiZHxscZRh/Rcnb37Eo9NcuA3UbY9IjkUbS3p1VbLtfFQxjK7SEa/z0ry qxZy9/94Zs43Ntpm2XijY5uL9x6pykzLVFDLG3ZdpnrnJz3MMC6wtF14VcOTwfjm 10hAOLHnc4xuPCEKBZMTeeNaBmARfnbrBiv0cdWI74sE0hJbq2W7e3/atzwvH1O4 LJWCNOb6ewDwXycbnYzCnEvL1z34BTU6GAb4t4yEjQEyPmqOTMbHeE/TD9//7LO6 HF+7wdprWF0e2/C+accIlza8LuwyPv+M5K2Q6XonBrAbHEuWJTFfJ9CxkzK9oj5+ MIIDVzCCAj+gAwIBAgIUd6NolqLYTp7E8s7GebWrv9/qRnMwDQYJKoZIhvcNAQEF BQAwJjEkMCIGA1UEAxMbZmVkZXJhdGlvbi5icmV0YWduZS5pdWZtLmZyMB4XDTA5 MDYxMDE1NTQ0OFoXDTI5MDYxMDE1NTQ0OFowJjEkMCIGA1UEAxMbZmVkZXJhdGlv bi5icmV0YWduZS5pdWZtLmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC AQEAjDPeB1kiK19n/njLD+Wxu1PEHVzdWJfVqfFQd011OON9Mw1sxL083/rcXrHE zPgcgUDHVq98OZfGNFJIRsyQyf+YDqvH8v3xBkSqEgkiypaOSBlrMNFeU5zUsvUm R8l4LUAXOTpT7Ok5ZcdAQcqlrEWKBszAkUw4d4ERvAvK3x78pczppg5cD9yfH/2e dDC7eZc0X8/mjeN8adSZC1lSfYo1xjCPQm02cGOyGmx8XeWqOr+FrdBjZsec+e5d Y0Q0n/aGfEe1SgOlar8FsnZfWCF8STLU0zi6jpqCyDXrmKTsmwcIjI0Gc91NlfwT NzpPTfQpB56t1fT3WedN+fUztQIDAQABo30wezBaBgNVHREEUzBRghtmZWRlcmF0 aW9uLmJyZXRhZ25lLml1Zm0uZnKGMmh0dHBzOi8vZmVkZXJhdGlvbi5icmV0YWdu ZS5pdWZtLmZyL2lkcC9zaGliYm9sZXRoMB0GA1UdDgQWBBRtZOuWaCjO08kcj5Vs OOPhfUIolDANBgkqhkiG9w0BAQUFAAOCAQEAFUIZfk5kOBw9irRVuZRtdGzTfpB0 vaqkd8IecQ6zQYJEz9M9WOVdMFQEv5mcEsjyKCyPUiF6SthecpSZElCASqJWu7Vn bneyuEHau7RVbzISMwFT+VtFhQfKMXRXWvMV1gpNNUJYg1VCZDYbMhBNfMgnmGVo 1CJdAUzq9CI3xQlxZlkpoo+eyBbpYMnrXShVH2G8yrBOAX7lkZziJCwnZ0lvv8N0 bNN2zAnAvAFIkUzRF/Tbl8cx9v95S8o1eI069pS87/eoNI5KUbXmUMlnzYOtLrkm VjJTppfg6Lmhe4fn7LzZPUC5m4MO7POVNVZA31BhxIakHzVXuofK0gUjVQ== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient bretagne.iufm.fr MIIErDCCA5SgAwIBAgIQRmz9EXsKgXSG7w3iHBAacTANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTEwMDQwODAwMDAwMFoXDTEzMDQwNzIzNTk1OVowfDELMAkGA1UE BhMCRlIxDjAMBgNVBAcTBUJyZXN0MRwwGgYDVQQKExNVTklWRVJTSVRFIERFIEJS RVNUMRkwFwYDVQQLExBJVUZNIGRlIEJyZXRhZ25lMSQwIgYDVQQDExtmZWRlcmF0 aW9uLmJyZXRhZ25lLml1Zm0uZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK AoIBAQC9io/anctVdl1XJKVAOdH/smD4k5iu6z/izJwt32LXFSgs5KLYi7pUThAv awK8Iky5+60HAXI6Oyxj4GYY9+2mlyjTi+HXeE4BeIUzznGFcp0tL+Iz3WrY5x+P HQaR9YdjhRbe72jyGPA0lnS6OI7dxJaI18IXqh8nmcS1uJcxyFBsRG9MGVX2PWWZ 8hB3TEL3vNybl59VOltoAjm1m2NikQK70Hr6w+TofDEmht0qAubTWLN7c9v2UGos +/Z1qfAJTZ5En4eG0V2z2NHDwcqbg8dUjUVgmw05aIkhS1ecIp9EkRLdUzbyh5aY yFXaM/6L77+BqHTSswf6X4sKjn9NAgMBAAGjggFuMIIBajAfBgNVHSMEGDAWgBQM vZNoDPPeq6NJays3V0fqkOO57TAdBgNVHQ4EFgQUzLxiXZeukJyQudQQyHUqS7vX 9XwwDgYDVR0PAQH/BAQDAgWgMAwGA1UdEwEB/wQCMAAwHQYDVR0lBBYwFAYIKwYB BQUHAwEGCCsGAQUFBwMCMBgGA1UdIAQRMA8wDQYLKwYBBAGyMQECAh0wOgYDVR0f BDMwMTAvoC2gK4YpaHR0cDovL2NybC50Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xD QS5jcmwwbQYIKwYBBQUHAQEEYTBfMDUGCCsGAQUFBzAChilodHRwOi8vY3J0LnRj cy50ZXJlbmEub3JnL1RFUkVOQVNTTENBLmNydDAmBggrBgEFBQcwAYYaaHR0cDov L29jc3AudGNzLnRlcmVuYS5vcmcwJgYDVR0RBB8wHYIbZmVkZXJhdGlvbi5icmV0 YWduZS5pdWZtLmZyMA0GCSqGSIb3DQEBBQUAA4IBAQChVtxeBUo5Y/kZfvLjKZB2 lgotm/dUiZHxscZRh/Rcnb37Eo9NcuA3UbY9IjkUbS3p1VbLtfFQxjK7SEa/z0ry qxZy9/94Zs43Ntpm2XijY5uL9x6pykzLVFDLG3ZdpnrnJz3MMC6wtF14VcOTwfjm 10hAOLHnc4xuPCEKBZMTeeNaBmARfnbrBiv0cdWI74sE0hJbq2W7e3/atzwvH1O4 LJWCNOb6ewDwXycbnYzCnEvL1z34BTU6GAb4t4yEjQEyPmqOTMbHeE/TD9//7LO6 HF+7wdprWF0e2/C+accIlza8LuwyPv+M5K2Q6XonBrAbHEuWJTFfJ9CxkzK9oj5+ MIIDVzCCAj+gAwIBAgIUd6NolqLYTp7E8s7GebWrv9/qRnMwDQYJKoZIhvcNAQEF BQAwJjEkMCIGA1UEAxMbZmVkZXJhdGlvbi5icmV0YWduZS5pdWZtLmZyMB4XDTA5 MDYxMDE1NTQ0OFoXDTI5MDYxMDE1NTQ0OFowJjEkMCIGA1UEAxMbZmVkZXJhdGlv bi5icmV0YWduZS5pdWZtLmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC AQEAjDPeB1kiK19n/njLD+Wxu1PEHVzdWJfVqfFQd011OON9Mw1sxL083/rcXrHE zPgcgUDHVq98OZfGNFJIRsyQyf+YDqvH8v3xBkSqEgkiypaOSBlrMNFeU5zUsvUm R8l4LUAXOTpT7Ok5ZcdAQcqlrEWKBszAkUw4d4ERvAvK3x78pczppg5cD9yfH/2e dDC7eZc0X8/mjeN8adSZC1lSfYo1xjCPQm02cGOyGmx8XeWqOr+FrdBjZsec+e5d Y0Q0n/aGfEe1SgOlar8FsnZfWCF8STLU0zi6jpqCyDXrmKTsmwcIjI0Gc91NlfwT NzpPTfQpB56t1fT3WedN+fUztQIDAQABo30wezBaBgNVHREEUzBRghtmZWRlcmF0 aW9uLmJyZXRhZ25lLml1Zm0uZnKGMmh0dHBzOi8vZmVkZXJhdGlvbi5icmV0YWdu ZS5pdWZtLmZyL2lkcC9zaGliYm9sZXRoMB0GA1UdDgQWBBRtZOuWaCjO08kcj5Vs OOPhfUIolDANBgkqhkiG9w0BAQUFAAOCAQEAFUIZfk5kOBw9irRVuZRtdGzTfpB0 vaqkd8IecQ6zQYJEz9M9WOVdMFQEv5mcEsjyKCyPUiF6SthecpSZElCASqJWu7Vn bneyuEHau7RVbzISMwFT+VtFhQfKMXRXWvMV1gpNNUJYg1VCZDYbMhBNfMgnmGVo 1CJdAUzq9CI3xQlxZlkpoo+eyBbpYMnrXShVH2G8yrBOAX7lkZziJCwnZ0lvv8N0 bNN2zAnAvAFIkUzRF/Tbl8cx9v95S8o1eI069pS87/eoNI5KUbXmUMlnzYOtLrkm VjJTppfg6Lmhe4fn7LzZPUC5m4MO7POVNVZA31BhxIakHzVXuofK0gUjVQ== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient IUFM de Bretagne IUFM de Bretagne http://unknown.site.com Bellenger Vincent federation@bretagne.iufm.fr Bobet Sandrine federation@bretagne.iufm.fr MIIE+jCCA+KgAwIBAgIQBq11j4GpxCZZxcnUuFm9NDANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTExMDIwMzAwMDAwMFoXDTE0MDIwMjIzNTk1OVowejELMAkGA1UE BhMCRlIxDjAMBgNVBAcTBUJyZXN0MRwwGgYDVQQKExNVTklWRVJTSVRFIERFIEJS RVNUMRkwFwYDVQQLExBJVUZNIGRlIEJyZXRhZ25lMSIwIAYDVQQDExlkaW9ueXNv cy5icmV0YWduZS5pdWZtLmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC AQEA8I8QCqBW7BVS0tOg1FsaV2iqye4AIxvQ6/o7Hc2jmj5LRiZNQeZxgbfPR95h TVF+UHSzQ/exq1cwqMzPsCgOOP7bcGxl7+nHoUbqkFc/aPbPmGnbVO5BmB4bNJRk smZqjmNe+FkwVgQp3aO/XcONvt4kxXdHXaQCHMinw3rWeV9oAiV7TOdW2P83mMQS 4S0IQnWGCBGdJU6RreTcDLTQRtfGmEwAgT0MzhUVkb/ZsyBW9tkeCj6Qc1qGxZ/M hZExrWgZ+2DB4IRNRcW4GWqCjUpjKuMDWHhKieDnv1p6VEYqe7eaPyzq3WiDmUiw Xws/ooh8sXFfqHIzITNUXGh9CwIDAQABo4IBvjCCAbowHwYDVR0jBBgwFoAUDL2T aAzz3qujSWsrN1dH6pDjue0wHQYDVR0OBBYEFMgbQC3ClzPxQwQDCWfkR4FsYvWR MA4GA1UdDwEB/wQEAwIFoDAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUF BwMBBggrBgEFBQcDAjAYBgNVHSAEETAPMA0GCysGAQQBsjEBAgIdMDoGA1UdHwQz MDEwL6AtoCuGKWh0dHA6Ly9jcmwudGNzLnRlcmVuYS5vcmcvVEVSRU5BU1NMQ0Eu Y3JsMG0GCCsGAQUFBwEBBGEwXzA1BggrBgEFBQcwAoYpaHR0cDovL2NydC50Y3Mu dGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcnQwJgYIKwYBBQUHMAGGGmh0dHA6Ly9v Y3NwLnRjcy50ZXJlbmEub3JnMHYGA1UdEQRvMG2CGWRpb255c29zLmJyZXRhZ25l Lml1Zm0uZnKCG2FwcGxpc3Rlc3QuYnJldGFnbmUuaXVmbS5mcoIZZXN1cHRlc3Qu YnJldGFnbmUuaXVmbS5mcoIYd2VibWFpbC5icmV0YWduZS5pdWZtLmZyMA0GCSqG SIb3DQEBBQUAA4IBAQC8VphKIG5yzxld43uGPV6OruVyMXSo1n10fg0bMPPvJG7Q sk+WFnAR/hQ57TtmlTIFYp6b0ebu+2S/PvMaBTvNJ/Wb9VsetcT9ZMMrqWoZtG58 ptPGAsRJRClISKrX8dpD/BlAuDo3ERaHT/YstNfGNGCS3zGPs7hmv69uklsywjsc 4lvJBSyaylSsn9OLy/BoVOOdq4zIA0oc8kptDSQxre1uZriUR/x/XaHOGi6ioklc 2hq1nGa6sPIa3sv29EOqJiPx6U5KIFKkqpJan1IA9S9OSljUHJ8FRLiNa8cZ5e0n 5Ocq5iGPnp1h8SqiJXlFle/oftE8vK2T9FeZFKYM MIIE+jCCA+KgAwIBAgIQBq11j4GpxCZZxcnUuFm9NDANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTExMDIwMzAwMDAwMFoXDTE0MDIwMjIzNTk1OVowejELMAkGA1UE BhMCRlIxDjAMBgNVBAcTBUJyZXN0MRwwGgYDVQQKExNVTklWRVJTSVRFIERFIEJS RVNUMRkwFwYDVQQLExBJVUZNIGRlIEJyZXRhZ25lMSIwIAYDVQQDExlkaW9ueXNv cy5icmV0YWduZS5pdWZtLmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC AQEA8I8QCqBW7BVS0tOg1FsaV2iqye4AIxvQ6/o7Hc2jmj5LRiZNQeZxgbfPR95h TVF+UHSzQ/exq1cwqMzPsCgOOP7bcGxl7+nHoUbqkFc/aPbPmGnbVO5BmB4bNJRk smZqjmNe+FkwVgQp3aO/XcONvt4kxXdHXaQCHMinw3rWeV9oAiV7TOdW2P83mMQS 4S0IQnWGCBGdJU6RreTcDLTQRtfGmEwAgT0MzhUVkb/ZsyBW9tkeCj6Qc1qGxZ/M hZExrWgZ+2DB4IRNRcW4GWqCjUpjKuMDWHhKieDnv1p6VEYqe7eaPyzq3WiDmUiw Xws/ooh8sXFfqHIzITNUXGh9CwIDAQABo4IBvjCCAbowHwYDVR0jBBgwFoAUDL2T aAzz3qujSWsrN1dH6pDjue0wHQYDVR0OBBYEFMgbQC3ClzPxQwQDCWfkR4FsYvWR MA4GA1UdDwEB/wQEAwIFoDAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUF BwMBBggrBgEFBQcDAjAYBgNVHSAEETAPMA0GCysGAQQBsjEBAgIdMDoGA1UdHwQz MDEwL6AtoCuGKWh0dHA6Ly9jcmwudGNzLnRlcmVuYS5vcmcvVEVSRU5BU1NMQ0Eu Y3JsMG0GCCsGAQUFBwEBBGEwXzA1BggrBgEFBQcwAoYpaHR0cDovL2NydC50Y3Mu dGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcnQwJgYIKwYBBQUHMAGGGmh0dHA6Ly9v Y3NwLnRjcy50ZXJlbmEub3JnMHYGA1UdEQRvMG2CGWRpb255c29zLmJyZXRhZ25l Lml1Zm0uZnKCG2FwcGxpc3Rlc3QuYnJldGFnbmUuaXVmbS5mcoIZZXN1cHRlc3Qu YnJldGFnbmUuaXVmbS5mcoIYd2VibWFpbC5icmV0YWduZS5pdWZtLmZyMA0GCSqG SIb3DQEBBQUAA4IBAQC8VphKIG5yzxld43uGPV6OruVyMXSo1n10fg0bMPPvJG7Q sk+WFnAR/hQ57TtmlTIFYp6b0ebu+2S/PvMaBTvNJ/Wb9VsetcT9ZMMrqWoZtG58 ptPGAsRJRClISKrX8dpD/BlAuDo3ERaHT/YstNfGNGCS3zGPs7hmv69uklsywjsc 4lvJBSyaylSsn9OLy/BoVOOdq4zIA0oc8kptDSQxre1uZriUR/x/XaHOGi6ioklc 2hq1nGa6sPIa3sv29EOqJiPx6U5KIFKkqpJan1IA9S9OSljUHJ8FRLiNa8cZ5e0n 5Ocq5iGPnp1h8SqiJXlFle/oftE8vK2T9FeZFKYM urn:mace:shibboleth:1.0:nameIdentifier Bellenger Vincent federation@bretagne.iufm.fr Bobet Sandrine sandrine.bobet@bretagne.iufm.fr MIIEkTCCA3mgAwIBAgIQU+IQezVbjmINI3hWJwZknzANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTExMDIwMzAwMDAwMFoXDTE0MDIwMjIzNTk1OVowYTELMAkGA1UE BhMCRlIxDjAMBgNVBAcTBUJyZXN0MRwwGgYDVQQKExNVTklWRVJTSVRFIERFIEJS RVNUMSQwIgYDVQQDExtwZXBwZXJzcG90LmJyZXRhZ25lLml1Zm0uZnIwggEiMA0G CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD3KSWY+dy286MPaqyECOlymjt4cCFY 21Rt1o15Wx+N9vqOP2/tGyO84RkIafLOlbCe+Z+kGVu7SLpnk29eeBlNbV04+LRP BBt67J88eyKCsTGNX68UVULPRnX6HVW/A1VvUbESXn4Ngl6Sedd8qKN1FYrQ4MIH 1TeAQ/pYCQahEm/npDB00cpU00i7MalHPOg1NNiudNhsicXH01cigGCHTjcX5iRY ucY52xqvCOdGUufKQA/nuRFoI1HP0xByWuSRvPWnqdMwPda8Q2mCSVfleTkxEDV2 PoqZ3rdJOfgmwrd9lKq79a9juFeazbc42vN3VpKkcj/uiZeRKKAu3F+/AgMBAAGj ggFuMIIBajAfBgNVHSMEGDAWgBQMvZNoDPPeq6NJays3V0fqkOO57TAdBgNVHQ4E FgQUMaG46FI9szHcVsfAu4DW2NX48nEwDgYDVR0PAQH/BAQDAgWgMAwGA1UdEwEB /wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBgGA1UdIAQRMA8w DQYLKwYBBAGyMQECAh0wOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC50Y3Mu dGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcmwwbQYIKwYBBQUHAQEEYTBfMDUGCCsG AQUFBzAChilodHRwOi8vY3J0LnRjcy50ZXJlbmEub3JnL1RFUkVOQVNTTENBLmNy dDAmBggrBgEFBQcwAYYaaHR0cDovL29jc3AudGNzLnRlcmVuYS5vcmcwJgYDVR0R BB8wHYIbcGVwcGVyc3BvdC5icmV0YWduZS5pdWZtLmZyMA0GCSqGSIb3DQEBBQUA A4IBAQCOGnio+OtZlD4DvVLRDONxYd9kVAyt06tUHxqqvjUHc4KPohxi7Es985rL BIIKcqgHD5DwcRUZRIUiDKnZ3ixoofQzt9kNsxS2fDHCSZ8UrRUyS3RqHgMYgDTX aLfNucmX66LknKldBWtDOIVloW7cKn3xqYkKnnBf+2mszGInAXrqHrsKZenPV+hc jYylerxPEltER5nP0eEVmcBFht9gPvVBigb9Y6t8y60axvJ8V325QwMis210SXjv vMYRkLHjm4On5Tw5LJgPocy17PUyUrEE9ebq/115v1jRj68cA2aU6F8wwW/NV9hz 2HnHwasJRnAkksSRjaDX1NItgPID MIIEkTCCA3mgAwIBAgIQU+IQezVbjmINI3hWJwZknzANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTExMDIwMzAwMDAwMFoXDTE0MDIwMjIzNTk1OVowYTELMAkGA1UE BhMCRlIxDjAMBgNVBAcTBUJyZXN0MRwwGgYDVQQKExNVTklWRVJTSVRFIERFIEJS RVNUMSQwIgYDVQQDExtwZXBwZXJzcG90LmJyZXRhZ25lLml1Zm0uZnIwggEiMA0G CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD3KSWY+dy286MPaqyECOlymjt4cCFY 21Rt1o15Wx+N9vqOP2/tGyO84RkIafLOlbCe+Z+kGVu7SLpnk29eeBlNbV04+LRP BBt67J88eyKCsTGNX68UVULPRnX6HVW/A1VvUbESXn4Ngl6Sedd8qKN1FYrQ4MIH 1TeAQ/pYCQahEm/npDB00cpU00i7MalHPOg1NNiudNhsicXH01cigGCHTjcX5iRY ucY52xqvCOdGUufKQA/nuRFoI1HP0xByWuSRvPWnqdMwPda8Q2mCSVfleTkxEDV2 PoqZ3rdJOfgmwrd9lKq79a9juFeazbc42vN3VpKkcj/uiZeRKKAu3F+/AgMBAAGj ggFuMIIBajAfBgNVHSMEGDAWgBQMvZNoDPPeq6NJays3V0fqkOO57TAdBgNVHQ4E FgQUMaG46FI9szHcVsfAu4DW2NX48nEwDgYDVR0PAQH/BAQDAgWgMAwGA1UdEwEB /wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBgGA1UdIAQRMA8w DQYLKwYBBAGyMQECAh0wOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC50Y3Mu dGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcmwwbQYIKwYBBQUHAQEEYTBfMDUGCCsG AQUFBzAChilodHRwOi8vY3J0LnRjcy50ZXJlbmEub3JnL1RFUkVOQVNTTENBLmNy dDAmBggrBgEFBQcwAYYaaHR0cDovL29jc3AudGNzLnRlcmVuYS5vcmcwJgYDVR0R BB8wHYIbcGVwcGVyc3BvdC5icmV0YWduZS5pdWZtLmZyMA0GCSqGSIb3DQEBBQUA A4IBAQCOGnio+OtZlD4DvVLRDONxYd9kVAyt06tUHxqqvjUHc4KPohxi7Es985rL BIIKcqgHD5DwcRUZRIUiDKnZ3ixoofQzt9kNsxS2fDHCSZ8UrRUyS3RqHgMYgDTX aLfNucmX66LknKldBWtDOIVloW7cKn3xqYkKnnBf+2mszGInAXrqHrsKZenPV+hc jYylerxPEltER5nP0eEVmcBFht9gPvVBigb9Y6t8y60axvJ8V325QwMis210SXjv vMYRkLHjm4On5Tw5LJgPocy17PUyUrEE9ebq/115v1jRj68cA2aU6F8wwW/NV9hz 2HnHwasJRnAkksSRjaDX1NItgPID urn:mace:shibboleth:1.0:nameIdentifier Bellenger Vincent federation@bretagne.iufm.fr Bobet Sandrine sandrine.bobet@bretagne.iufm.fr MIIE+jCCA+KgAwIBAgIQBq11j4GpxCZZxcnUuFm9NDANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTExMDIwMzAwMDAwMFoXDTE0MDIwMjIzNTk1OVowejELMAkGA1UE BhMCRlIxDjAMBgNVBAcTBUJyZXN0MRwwGgYDVQQKExNVTklWRVJTSVRFIERFIEJS RVNUMRkwFwYDVQQLExBJVUZNIGRlIEJyZXRhZ25lMSIwIAYDVQQDExlkaW9ueXNv cy5icmV0YWduZS5pdWZtLmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC AQEA8I8QCqBW7BVS0tOg1FsaV2iqye4AIxvQ6/o7Hc2jmj5LRiZNQeZxgbfPR95h TVF+UHSzQ/exq1cwqMzPsCgOOP7bcGxl7+nHoUbqkFc/aPbPmGnbVO5BmB4bNJRk smZqjmNe+FkwVgQp3aO/XcONvt4kxXdHXaQCHMinw3rWeV9oAiV7TOdW2P83mMQS 4S0IQnWGCBGdJU6RreTcDLTQRtfGmEwAgT0MzhUVkb/ZsyBW9tkeCj6Qc1qGxZ/M hZExrWgZ+2DB4IRNRcW4GWqCjUpjKuMDWHhKieDnv1p6VEYqe7eaPyzq3WiDmUiw Xws/ooh8sXFfqHIzITNUXGh9CwIDAQABo4IBvjCCAbowHwYDVR0jBBgwFoAUDL2T aAzz3qujSWsrN1dH6pDjue0wHQYDVR0OBBYEFMgbQC3ClzPxQwQDCWfkR4FsYvWR MA4GA1UdDwEB/wQEAwIFoDAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUF BwMBBggrBgEFBQcDAjAYBgNVHSAEETAPMA0GCysGAQQBsjEBAgIdMDoGA1UdHwQz MDEwL6AtoCuGKWh0dHA6Ly9jcmwudGNzLnRlcmVuYS5vcmcvVEVSRU5BU1NMQ0Eu Y3JsMG0GCCsGAQUFBwEBBGEwXzA1BggrBgEFBQcwAoYpaHR0cDovL2NydC50Y3Mu dGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcnQwJgYIKwYBBQUHMAGGGmh0dHA6Ly9v Y3NwLnRjcy50ZXJlbmEub3JnMHYGA1UdEQRvMG2CGWRpb255c29zLmJyZXRhZ25l Lml1Zm0uZnKCG2FwcGxpc3Rlc3QuYnJldGFnbmUuaXVmbS5mcoIZZXN1cHRlc3Qu YnJldGFnbmUuaXVmbS5mcoIYd2VibWFpbC5icmV0YWduZS5pdWZtLmZyMA0GCSqG SIb3DQEBBQUAA4IBAQC8VphKIG5yzxld43uGPV6OruVyMXSo1n10fg0bMPPvJG7Q sk+WFnAR/hQ57TtmlTIFYp6b0ebu+2S/PvMaBTvNJ/Wb9VsetcT9ZMMrqWoZtG58 ptPGAsRJRClISKrX8dpD/BlAuDo3ERaHT/YstNfGNGCS3zGPs7hmv69uklsywjsc 4lvJBSyaylSsn9OLy/BoVOOdq4zIA0oc8kptDSQxre1uZriUR/x/XaHOGi6ioklc 2hq1nGa6sPIa3sv29EOqJiPx6U5KIFKkqpJan1IA9S9OSljUHJ8FRLiNa8cZ5e0n 5Ocq5iGPnp1h8SqiJXlFle/oftE8vK2T9FeZFKYM MIIE+jCCA+KgAwIBAgIQBq11j4GpxCZZxcnUuFm9NDANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTExMDIwMzAwMDAwMFoXDTE0MDIwMjIzNTk1OVowejELMAkGA1UE BhMCRlIxDjAMBgNVBAcTBUJyZXN0MRwwGgYDVQQKExNVTklWRVJTSVRFIERFIEJS RVNUMRkwFwYDVQQLExBJVUZNIGRlIEJyZXRhZ25lMSIwIAYDVQQDExlkaW9ueXNv cy5icmV0YWduZS5pdWZtLmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC AQEA8I8QCqBW7BVS0tOg1FsaV2iqye4AIxvQ6/o7Hc2jmj5LRiZNQeZxgbfPR95h TVF+UHSzQ/exq1cwqMzPsCgOOP7bcGxl7+nHoUbqkFc/aPbPmGnbVO5BmB4bNJRk smZqjmNe+FkwVgQp3aO/XcONvt4kxXdHXaQCHMinw3rWeV9oAiV7TOdW2P83mMQS 4S0IQnWGCBGdJU6RreTcDLTQRtfGmEwAgT0MzhUVkb/ZsyBW9tkeCj6Qc1qGxZ/M hZExrWgZ+2DB4IRNRcW4GWqCjUpjKuMDWHhKieDnv1p6VEYqe7eaPyzq3WiDmUiw Xws/ooh8sXFfqHIzITNUXGh9CwIDAQABo4IBvjCCAbowHwYDVR0jBBgwFoAUDL2T aAzz3qujSWsrN1dH6pDjue0wHQYDVR0OBBYEFMgbQC3ClzPxQwQDCWfkR4FsYvWR MA4GA1UdDwEB/wQEAwIFoDAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUF BwMBBggrBgEFBQcDAjAYBgNVHSAEETAPMA0GCysGAQQBsjEBAgIdMDoGA1UdHwQz MDEwL6AtoCuGKWh0dHA6Ly9jcmwudGNzLnRlcmVuYS5vcmcvVEVSRU5BU1NMQ0Eu Y3JsMG0GCCsGAQUFBwEBBGEwXzA1BggrBgEFBQcwAoYpaHR0cDovL2NydC50Y3Mu dGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcnQwJgYIKwYBBQUHMAGGGmh0dHA6Ly9v Y3NwLnRjcy50ZXJlbmEub3JnMHYGA1UdEQRvMG2CGWRpb255c29zLmJyZXRhZ25l Lml1Zm0uZnKCG2FwcGxpc3Rlc3QuYnJldGFnbmUuaXVmbS5mcoIZZXN1cHRlc3Qu YnJldGFnbmUuaXVmbS5mcoIYd2VibWFpbC5icmV0YWduZS5pdWZtLmZyMA0GCSqG SIb3DQEBBQUAA4IBAQC8VphKIG5yzxld43uGPV6OruVyMXSo1n10fg0bMPPvJG7Q sk+WFnAR/hQ57TtmlTIFYp6b0ebu+2S/PvMaBTvNJ/Wb9VsetcT9ZMMrqWoZtG58 ptPGAsRJRClISKrX8dpD/BlAuDo3ERaHT/YstNfGNGCS3zGPs7hmv69uklsywjsc 4lvJBSyaylSsn9OLy/BoVOOdq4zIA0oc8kptDSQxre1uZriUR/x/XaHOGi6ioklc 2hq1nGa6sPIa3sv29EOqJiPx6U5KIFKkqpJan1IA9S9OSljUHJ8FRLiNa8cZ5e0n 5Ocq5iGPnp1h8SqiJXlFle/oftE8vK2T9FeZFKYM MIIEjTCCA3WgAwIBAgIQWq3DmtRQlftsLSIHM7IMmDANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTEwMTEwOTAwMDAwMFoXDTEzMTEwODIzNTk1OVowXzELMAkGA1UE BhMCRlIxDjAMBgNVBAcTBUJyZXN0MRwwGgYDVQQKExNVTklWRVJTSVRFIERFIEJS RVNUMSIwIAYDVQQDExlkaW9ueXNvcy5icmV0YWduZS5pdWZtLmZyMIIBIjANBgkq hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlRK/MeixCvb/LOU5IqKozQ9hRE1Qo/d3 mhXnarZEmbIUiAmAeBmY5mmAYZXNdjoGu8pILQbXbEyl0WEJKSZwKLyEooeB7FXs ymipMpQWj+Z0br2tY1fLoEQL7E5USIVKM1b3pQ9aeO3qziMn7CSaoCpsdQ5Efj9r 6vNJFU4w4k1/zT5R3zCTFENrEnyurIDBwJNmAOxGYjKBpBysCHHrPEIZ9kN/NyPq wKNVsBBIjbCXlWJx9QmBcNKRlB+Vby6FESKtEXCeHf29AdtEfo9ZwNu0g7+Sq4h+ emPJ7ySigkTwwwNSSeVZhbftKSgmw4p64UJ8IIrZi5sLdrxZPV4L6wIDAQABo4IB bDCCAWgwHwYDVR0jBBgwFoAUDL2TaAzz3qujSWsrN1dH6pDjue0wHQYDVR0OBBYE FOpucgaaHVjCHCgCNVP0wILiwWMUMA4GA1UdDwEB/wQEAwIFoDAMBgNVHRMBAf8E AjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAYBgNVHSAEETAPMA0G CysGAQQBsjEBAgIdMDoGA1UdHwQzMDEwL6AtoCuGKWh0dHA6Ly9jcmwudGNzLnRl cmVuYS5vcmcvVEVSRU5BU1NMQ0EuY3JsMG0GCCsGAQUFBwEBBGEwXzA1BggrBgEF BQcwAoYpaHR0cDovL2NydC50Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcnQw JgYIKwYBBQUHMAGGGmh0dHA6Ly9vY3NwLnRjcy50ZXJlbmEub3JnMCQGA1UdEQQd MBuCGWRpb255c29zLmJyZXRhZ25lLml1Zm0uZnIwDQYJKoZIhvcNAQEFBQADggEB AHBLaAqGrSgsUVT1Irb96c9BcGDr2dxj0HqrhCm2McL2fOwCdfcW4Vr2dczgkUNt ROsf4K3Cw01+Zhf+aWNX13HtFasEPat6oSSdk+FxDBr5ZcJh4NW4Qxogsd+PeV48 3GXdUIiodWyigDRkpyjV80vQsIXlyrEfI38FrbVDqBSMSeJOyR3/efHJCBMFfOsR R/YywjW0k2g3KdtK2PCvIrsLk83hYwWLWSAzCOxPLEjMqu1w7uUe7RWuBXNzWKJV Iprn9ytY15uozoBvPGBZS+fTzphcPJxKf83To0ro1v9FDi0TuQXLpYzK3dzLwq7/ DRrVOut4zQqyNXAjREcxp28= urn:mace:shibboleth:1.0:nameIdentifier Vincent BELLENGER vincent.bellenger@bretagne.iufm.fr Sandrine BOBET sandrine.bobet@bretagne.iufm.fr MIIEqzCCA5OgAwIBAgIRALLUQ6uihok5ueaHnlUgarcwDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0xMDA0MDgwMDAwMDBaFw0xMzA0MDcyMzU5NTlaMHsxCzAJBgNV BAYTAkZSMQ4wDAYDVQQHEwVCcmVzdDEcMBoGA1UEChMTVU5JVkVSU0lURSBERSBC UkVTVDEZMBcGA1UECxMQSVVGTSBkZSBCcmV0YWduZTEjMCEGA1UEAxMaY2FycmVm b3VyLmJyZXRhZ25lLml1Zm0uZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK AoIBAQDSgKuAejmLmObtanfkMYaLSsk7cd/pQcNULbYkLn7rZZD6+al8jXjtdE9z Q8PmXtSjSMRjcNcaroMZD2XVv4ehou1Fub6RuB4x7z7XBbUroGAUNsgPwwdJ5OS3 jVD4qbcEtb+w0JnBitjvLHicsrGahb08uGBrTvlACb93ZitJfsfGHDsvcJ4n1WWb tSrR9G9Ld5XeJQ/5KEgBNnDwC3G3ogyszca++0Yumdr1tPaj4fEzP6zpztK9/Ck1 FBy6Y0GnHoynMNFrsK1P1R8DzF7pHVOiSFFCOg45GpNza6mbohQEm6auw4qClsU1 b+srkPGrEzlFa81k1wAFGz7yNklvAgMBAAGjggFtMIIBaTAfBgNVHSMEGDAWgBQM vZNoDPPeq6NJays3V0fqkOO57TAdBgNVHQ4EFgQUwuz4kAZCiw0lN3kkxsDAwzji vKYwDgYDVR0PAQH/BAQDAgWgMAwGA1UdEwEB/wQCMAAwHQYDVR0lBBYwFAYIKwYB BQUHAwEGCCsGAQUFBwMCMBgGA1UdIAQRMA8wDQYLKwYBBAGyMQECAh0wOgYDVR0f BDMwMTAvoC2gK4YpaHR0cDovL2NybC50Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xD QS5jcmwwbQYIKwYBBQUHAQEEYTBfMDUGCCsGAQUFBzAChilodHRwOi8vY3J0LnRj cy50ZXJlbmEub3JnL1RFUkVOQVNTTENBLmNydDAmBggrBgEFBQcwAYYaaHR0cDov L29jc3AudGNzLnRlcmVuYS5vcmcwJQYDVR0RBB4wHIIaY2FycmVmb3VyLmJyZXRh Z25lLml1Zm0uZnIwDQYJKoZIhvcNAQEFBQADggEBAKUiZg3oHkASzu93L/SJTnwv QXp8snSW1D54auVWW8wmFP7kWjNd4KKpOjceeRmWjo8VQE+DH9gG39Pqx1DPcbin mOAuVkdaAMou7BDNPVrH4m3Ze7hVd7veBybBpCkr4mbQBsiSf9msw2oxB3TnRXun Xr8jgDE7uMXZDNW5Fkl6OXkBiwbQUEiQNdv9ehAL0u5+Gax9elFlimZMfwY3PULd K81RycHY1KFxutQcjGL39AXrkogCJeaBpV2k9sQWjnxlVy8w/jaJe87OS7tmwmtC F4O16mKQTbPoDntU6iQtaj2bwtz2hIBE1AZ4OXnCRlP6lmFwQAe1dJlXypKB2Og= MIIEqzCCA5OgAwIBAgIRALLUQ6uihok5ueaHnlUgarcwDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0xMDA0MDgwMDAwMDBaFw0xMzA0MDcyMzU5NTlaMHsxCzAJBgNV BAYTAkZSMQ4wDAYDVQQHEwVCcmVzdDEcMBoGA1UEChMTVU5JVkVSU0lURSBERSBC UkVTVDEZMBcGA1UECxMQSVVGTSBkZSBCcmV0YWduZTEjMCEGA1UEAxMaY2FycmVm b3VyLmJyZXRhZ25lLml1Zm0uZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK AoIBAQDSgKuAejmLmObtanfkMYaLSsk7cd/pQcNULbYkLn7rZZD6+al8jXjtdE9z Q8PmXtSjSMRjcNcaroMZD2XVv4ehou1Fub6RuB4x7z7XBbUroGAUNsgPwwdJ5OS3 jVD4qbcEtb+w0JnBitjvLHicsrGahb08uGBrTvlACb93ZitJfsfGHDsvcJ4n1WWb tSrR9G9Ld5XeJQ/5KEgBNnDwC3G3ogyszca++0Yumdr1tPaj4fEzP6zpztK9/Ck1 FBy6Y0GnHoynMNFrsK1P1R8DzF7pHVOiSFFCOg45GpNza6mbohQEm6auw4qClsU1 b+srkPGrEzlFa81k1wAFGz7yNklvAgMBAAGjggFtMIIBaTAfBgNVHSMEGDAWgBQM vZNoDPPeq6NJays3V0fqkOO57TAdBgNVHQ4EFgQUwuz4kAZCiw0lN3kkxsDAwzji vKYwDgYDVR0PAQH/BAQDAgWgMAwGA1UdEwEB/wQCMAAwHQYDVR0lBBYwFAYIKwYB BQUHAwEGCCsGAQUFBwMCMBgGA1UdIAQRMA8wDQYLKwYBBAGyMQECAh0wOgYDVR0f BDMwMTAvoC2gK4YpaHR0cDovL2NybC50Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xD QS5jcmwwbQYIKwYBBQUHAQEEYTBfMDUGCCsGAQUFBzAChilodHRwOi8vY3J0LnRj cy50ZXJlbmEub3JnL1RFUkVOQVNTTENBLmNydDAmBggrBgEFBQcwAYYaaHR0cDov L29jc3AudGNzLnRlcmVuYS5vcmcwJQYDVR0RBB4wHIIaY2FycmVmb3VyLmJyZXRh Z25lLml1Zm0uZnIwDQYJKoZIhvcNAQEFBQADggEBAKUiZg3oHkASzu93L/SJTnwv QXp8snSW1D54auVWW8wmFP7kWjNd4KKpOjceeRmWjo8VQE+DH9gG39Pqx1DPcbin mOAuVkdaAMou7BDNPVrH4m3Ze7hVd7veBybBpCkr4mbQBsiSf9msw2oxB3TnRXun Xr8jgDE7uMXZDNW5Fkl6OXkBiwbQUEiQNdv9ehAL0u5+Gax9elFlimZMfwY3PULd K81RycHY1KFxutQcjGL39AXrkogCJeaBpV2k9sQWjnxlVy8w/jaJe87OS7tmwmtC F4O16mKQTbPoDntU6iQtaj2bwtz2hIBE1AZ4OXnCRlP6lmFwQAe1dJlXypKB2Og= MIIEQDCCAyigAwIBAgILAQAAAAABFSimr+YwDQYJKoZIhvcNAQEFBQAwXzELMAkG A1UEBhMCQkUxEzARBgNVBAoTCkN5YmVydHJ1c3QxFzAVBgNVBAsTDkVkdWNhdGlv bmFsIENBMSIwIAYDVQQDExlDeWJlcnRydXN0IEVkdWNhdGlvbmFsIENBMB4XDTA3 MDkyMTE1MTkxM1oXDTEwMDkyMTE1MTkxM1owZTELMAkGA1UEBhMCRlIxMTAvBgNV BAoTKElOU1RJVFVUIFVOSVZFUlNJVEFJUkUgRk9STUFUSU9OIE1BSVRSRVMxIzAh BgNVBAMTGmNhcnJlZm91ci5icmV0YWduZS5pdWZtLmZyMIGfMA0GCSqGSIb3DQEB AQUAA4GNADCBiQKBgQDGIVvnlCZ9d3yD0nfqtpx5lMxw07avb/OE2c0d1KVDkUXw 1AjexVlFPFLXJdSSw+KTMmykhiXAwtQ5z0zNlipNBIqQSxE8uQwjwioOI9j2h8mP y/qfD139L33gK0i0rCxvllyt4Ef9T3pOBAI8HT9rPRktE1azG18VtxuyqSKt7QID AQABo4IBeTCCAXUwUAYDVR0gBEkwRzBFBgcqhkixPgEAMDowOAYIKwYBBQUHAgEW LGh0dHA6Ly93d3cuZ2xvYmFsc2lnbi5uZXQvcmVwb3NpdG9yeS9jcHMuY2ZtMA4G A1UdDwEB/wQEAwIFoDAfBgNVHSMEGDAWgBRlZaM91zsRowoHJTfJQkpbdndQ4TAd BgNVHQ4EFgQUNoBsmBxA48mvkiAESymHVtr5uocwOgYDVR0fBDMwMTAvoC2gK4Yp aHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9lZHVjYXRpb25hbC5jcmwwTwYIKwYB BQUHAQEEQzBBMD8GCCsGAQUFBzAChjNodHRwOi8vc2VjdXJlLmdsb2JhbHNpZ24u bmV0L2NhY2VydC9lZHVjYXRpb25hbC5jcnQwHQYDVR0lBBYwFAYIKwYBBQUHAwEG CCsGAQUFBwMCMCUGA1UdEQQeMByCGmNhcnJlZm91ci5icmV0YWduZS5pdWZtLmZy MA0GCSqGSIb3DQEBBQUAA4IBAQAoHrLCj+qDfct0r4TgI1j0qZsSYUZ31E+38vdg Ac6SFa6/mdE6zHjcxgx8ajgkB/66/u5zVJ+v5VAo/VflWwVZO1R/ywMSNZIzLaNM /se5S5/A5FVtjQuVr2x/DvqhdhSMdrNoC3UkgnojPZTuo0z9F3NDzTqg8jjUImv+ sFLWPiaApkLzZ0USfx5BtDv8/7PCw370PQjV/xdKlx3ntWiwvJ1Texu04izZK3N8 9JmLOTc1H+q81pFwUyBWLexFYs9OQgq3mI/+/0G+MwM3jU6Bofm2zaW9bxPe+9S8 JYHe/5vGr9QBmX1ziAfejq9u94Trf5x3E+SvTfP+in7W0T+h urn:mace:shibboleth:1.0:nameIdentifier Bellenger Vincent federation@bretagne.iufm.fr Bobet Sandrine sandrine.bobet@bretagne.iufm.fr montpellier.iufm.fr MIIDZjCCAk6gAwIBAgIVALjF/HJMRzFhyx4QUhGQtfnc/go0MA0GCSqGSIb3DQEB BQUAMCkxJzAlBgNVBAMTHmZlZGVyYXRpb24ubW9udHBlbGxpZXIuaXVmbS5mcjAe Fw0wOTExMTcxNDM1NTdaFw0yOTExMTcxNDM1NTdaMCkxJzAlBgNVBAMTHmZlZGVy YXRpb24ubW9udHBlbGxpZXIuaXVmbS5mcjCCASIwDQYJKoZIhvcNAQEBBQADggEP ADCCAQoCggEBAIk8UoESjzWA4bGzXWSC96Uc5Y3F2GkWNMcAzqkpEjT6dvY8hWsv pSThfyGbsndBb6sUxdsKzkOcq9jgPG5SbKQH7FCf1aGMdrr67g3lYXBo/61N1zoS IZ27qCMSWWXKEuCM1J8+XGlKO+v/2NGhhy/y/MGCoq/dVS1CEpQR2WmuZ7T85YGX t/8juhUog6qx9luXRp4Vn8AtPjBf8Wx4fa+1fHk2EsbOK+TNmc2S8QMDhrdwEmTO FtlLzVzqwTBMCZK6nvuWccjJLQbPqFzpBS7gMNy9Nbc+MCHs2VPEFottHirNCHle /dVue+/vEaJnoGat6gNF+xe/OaFUS6aYl78CAwEAAaOBhDCBgTBgBgNVHREEWTBX gh5mZWRlcmF0aW9uLm1vbnRwZWxsaWVyLml1Zm0uZnKGNWh0dHBzOi8vZmVkZXJh dGlvbi5tb250cGVsbGllci5pdWZtLmZyL2lkcC9zaGliYm9sZXRoMB0GA1UdDgQW BBSSscKMzM8vdFU0r4f8rJnlUjXhRjANBgkqhkiG9w0BAQUFAAOCAQEADkTGJNdk VCmgQLEKNXBwLmjzKEaXVN0oDkycey2WzqnVFErveI5WUtUwbyTX6gvX34495dHf PpOEHBqBsTLug4ecwWrfurwupVHEpnHXQISO3MfTFuASxSkKg7jCWG1yslmdR6ua +EYRyYeZT7PsLRDvvsSHfgs29dx+L20LOqTv7KZ2q24TEEjQpzg0umSvfJH6iSwe k4efOHibLlXTz1Di9jVrchyw0Ix95i2tRAhkw9MLw37NX7hw73quN3/V1Tg8vNoW UwfIvWcdU+rI3r0sj0XzUxvuWt2E34dY7iRDZMqs9x1IBcLg00oRH3Hc2jvF6Ytw R4xWKyqWIGnn4g== MIIEdTCCA12gAwIBAgICDKYwDQYJKoZIhvcNAQEEBQAwUDELMAkGA1UEBhMCRlIx DDAKBgNVBAoTA0NSVTETMBEGA1UEAxMKYWMtc2VydmV1cjEeMBwGCSqGSIb3DQEJ ARYPY2EtYWRtaW5AY3J1LmZyMB4XDTA3MDIwOTEzNDEwMFoXDTEwMDIwOTEzNDEw MFowdDELMAkGA1UEBhMCRlIxETAPBgNVBAoTCDAzNDE4MThTMScwJQYDVQQDEx5m ZWRlcmF0aW9uLm1vbnRwZWxsaWVyLml1Zm0uZnIxKTAnBgkqhkiG9w0BCQEWGmlu Zm9ybUBtb250cGVsbGllci5pdWZtLmZyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB iQKBgQCzkuQU982HLqlyiPNS1KhtfTw3F94aI+GELkvvRy+rtR7z0J9yZy4DfsqW OM6rTmWNfw5RafnX5UAoyoNvvvP8f9BMmJ7jQE45D+Q3yzgHmHF2F1tL92eTz7we AhaPlZiOXdQO5IBI6LAruUGs5wRdper+6u6lbB+j6z7ylajO1wIDAQABo4IBtzCC AbMwDAYDVR0TAQH/BAIwADARBglghkgBhvhCAQEEBAMCBsAwDgYDVR0PAQH/BAQD AgXgMCwGCWCGSAGG+EIBDQQfFh1DZXJ0aWZpY2F0IHNlcnZldXIgYWMtc2VydmV1 cjAdBgNVHQ4EFgQU5hAjNm223ufj8bnpCHS7Gm6wCKswdwYDVR0jBHAwboAUcQc/ B7Tpf84zBWgE8jSmUL6s9qChU6RRME8xCzAJBgNVBAYTAkZSMQwwCgYDVQQKEwND UlUxEjAQBgNVBAMTCWFjLXJhY2luZTEeMBwGCSqGSIb3DQEJARYPY2EtYWRtaW5A Y3J1LmZyggEDMEsGA1UdHwREMEIwQKA+oDyGOmh0dHA6Ly9pZ2MuY3J1LmZyL2Nn aS1iaW4vbG9hZGNybD9DQT1hYy1zZXJ2ZXVyJmZvcm1hdD1ERVIwHQYDVR0lBBYw FAYIKwYBBQUHAwEGCCsGAQUFBwMCME4GA1UdIARHMEUwQwYOKQMGAQQAAbdfAwEE AAQwMTAvBggrBgEFBQcCARYjaHR0cDovL2lnYy5jcnUuZnIvcmVmZXJlbmNlcy9w Yy5wZGYwDQYJKoZIhvcNAQEEBQADggEBAMdTx24FtReSqJ4TpDYYHkLQFp3m1lNn wwTJXDsmqyuVgG+UDC/2ob3M/fB3ffV7trmBMYDp/36SK9sdOM+KAeJTkFbDiBVr O0uozxNSHj13VqGw7UHcFCX1AykmoYCrSDVL2U8NovZsb9lZfu+dI9JtvLDAF0Sq 3BCJEzlOjHfwWq8rzQYzhXKVeXRZ3nKd1iKLQdg1biltlbgh+IXzj0P9W++TBSEa 7XBGhp2qum5kAy76u2NwWcunMJM7fmExJF+SjGUXtKQ6wxnXQ1zcAJ7atuyPPfEA ST1d3qLq8ftDvKa7Edva60Iw8nCcEd5b4I7ZSlYhFpX7KlK/HNZu6Mk= urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient montpellier.iufm.fr MIIDZjCCAk6gAwIBAgIVALjF/HJMRzFhyx4QUhGQtfnc/go0MA0GCSqGSIb3DQEB BQUAMCkxJzAlBgNVBAMTHmZlZGVyYXRpb24ubW9udHBlbGxpZXIuaXVmbS5mcjAe Fw0wOTExMTcxNDM1NTdaFw0yOTExMTcxNDM1NTdaMCkxJzAlBgNVBAMTHmZlZGVy YXRpb24ubW9udHBlbGxpZXIuaXVmbS5mcjCCASIwDQYJKoZIhvcNAQEBBQADggEP ADCCAQoCggEBAIk8UoESjzWA4bGzXWSC96Uc5Y3F2GkWNMcAzqkpEjT6dvY8hWsv pSThfyGbsndBb6sUxdsKzkOcq9jgPG5SbKQH7FCf1aGMdrr67g3lYXBo/61N1zoS IZ27qCMSWWXKEuCM1J8+XGlKO+v/2NGhhy/y/MGCoq/dVS1CEpQR2WmuZ7T85YGX t/8juhUog6qx9luXRp4Vn8AtPjBf8Wx4fa+1fHk2EsbOK+TNmc2S8QMDhrdwEmTO FtlLzVzqwTBMCZK6nvuWccjJLQbPqFzpBS7gMNy9Nbc+MCHs2VPEFottHirNCHle /dVue+/vEaJnoGat6gNF+xe/OaFUS6aYl78CAwEAAaOBhDCBgTBgBgNVHREEWTBX gh5mZWRlcmF0aW9uLm1vbnRwZWxsaWVyLml1Zm0uZnKGNWh0dHBzOi8vZmVkZXJh dGlvbi5tb250cGVsbGllci5pdWZtLmZyL2lkcC9zaGliYm9sZXRoMB0GA1UdDgQW BBSSscKMzM8vdFU0r4f8rJnlUjXhRjANBgkqhkiG9w0BAQUFAAOCAQEADkTGJNdk VCmgQLEKNXBwLmjzKEaXVN0oDkycey2WzqnVFErveI5WUtUwbyTX6gvX34495dHf PpOEHBqBsTLug4ecwWrfurwupVHEpnHXQISO3MfTFuASxSkKg7jCWG1yslmdR6ua +EYRyYeZT7PsLRDvvsSHfgs29dx+L20LOqTv7KZ2q24TEEjQpzg0umSvfJH6iSwe k4efOHibLlXTz1Di9jVrchyw0Ix95i2tRAhkw9MLw37NX7hw73quN3/V1Tg8vNoW UwfIvWcdU+rI3r0sj0XzUxvuWt2E34dY7iRDZMqs9x1IBcLg00oRH3Hc2jvF6Ytw R4xWKyqWIGnn4g== MIIEdTCCA12gAwIBAgICDKYwDQYJKoZIhvcNAQEEBQAwUDELMAkGA1UEBhMCRlIx DDAKBgNVBAoTA0NSVTETMBEGA1UEAxMKYWMtc2VydmV1cjEeMBwGCSqGSIb3DQEJ ARYPY2EtYWRtaW5AY3J1LmZyMB4XDTA3MDIwOTEzNDEwMFoXDTEwMDIwOTEzNDEw MFowdDELMAkGA1UEBhMCRlIxETAPBgNVBAoTCDAzNDE4MThTMScwJQYDVQQDEx5m ZWRlcmF0aW9uLm1vbnRwZWxsaWVyLml1Zm0uZnIxKTAnBgkqhkiG9w0BCQEWGmlu Zm9ybUBtb250cGVsbGllci5pdWZtLmZyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB iQKBgQCzkuQU982HLqlyiPNS1KhtfTw3F94aI+GELkvvRy+rtR7z0J9yZy4DfsqW OM6rTmWNfw5RafnX5UAoyoNvvvP8f9BMmJ7jQE45D+Q3yzgHmHF2F1tL92eTz7we AhaPlZiOXdQO5IBI6LAruUGs5wRdper+6u6lbB+j6z7ylajO1wIDAQABo4IBtzCC AbMwDAYDVR0TAQH/BAIwADARBglghkgBhvhCAQEEBAMCBsAwDgYDVR0PAQH/BAQD AgXgMCwGCWCGSAGG+EIBDQQfFh1DZXJ0aWZpY2F0IHNlcnZldXIgYWMtc2VydmV1 cjAdBgNVHQ4EFgQU5hAjNm223ufj8bnpCHS7Gm6wCKswdwYDVR0jBHAwboAUcQc/ B7Tpf84zBWgE8jSmUL6s9qChU6RRME8xCzAJBgNVBAYTAkZSMQwwCgYDVQQKEwND UlUxEjAQBgNVBAMTCWFjLXJhY2luZTEeMBwGCSqGSIb3DQEJARYPY2EtYWRtaW5A Y3J1LmZyggEDMEsGA1UdHwREMEIwQKA+oDyGOmh0dHA6Ly9pZ2MuY3J1LmZyL2Nn aS1iaW4vbG9hZGNybD9DQT1hYy1zZXJ2ZXVyJmZvcm1hdD1ERVIwHQYDVR0lBBYw FAYIKwYBBQUHAwEGCCsGAQUFBwMCME4GA1UdIARHMEUwQwYOKQMGAQQAAbdfAwEE AAQwMTAvBggrBgEFBQcCARYjaHR0cDovL2lnYy5jcnUuZnIvcmVmZXJlbmNlcy9w Yy5wZGYwDQYJKoZIhvcNAQEEBQADggEBAMdTx24FtReSqJ4TpDYYHkLQFp3m1lNn wwTJXDsmqyuVgG+UDC/2ob3M/fB3ffV7trmBMYDp/36SK9sdOM+KAeJTkFbDiBVr O0uozxNSHj13VqGw7UHcFCX1AykmoYCrSDVL2U8NovZsb9lZfu+dI9JtvLDAF0Sq 3BCJEzlOjHfwWq8rzQYzhXKVeXRZ3nKd1iKLQdg1biltlbgh+IXzj0P9W++TBSEa 7XBGhp2qum5kAy76u2NwWcunMJM7fmExJF+SjGUXtKQ6wxnXQ1zcAJ7atuyPPfEA ST1d3qLq8ftDvKa7Edva60Iw8nCcEd5b4I7ZSlYhFpX7KlK/HNZu6Mk= urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient IUFM de Montpellier IUFM de Montpellier http://unknown.site.com Nicolas Arles fed-admin@montpellier.iufm.fr inpl-nancy.fr MIIDLzCCAhegAwIBAgIUTsFznm6aNqmW5TEe+PnBd7quOtowDQYJKoZIhvcNAQEF BQAwHDEaMBgGA1UEAxMRaWRwLmlucGwtbmFuY3kuZnIwHhcNMDkwMjI3MTcyMDM3 WhcNMjkwMjI3MTcyMDM3WjAcMRowGAYDVQQDExFpZHAuaW5wbC1uYW5jeS5mcjCC ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAIZw7MsmjNQrUIAafzK7yDvF GfeSKh2gJAUyc53hamAxqCrcld3KuQOEIoY8ybqHBlJJTKlI7l/pfuBgXOP6idyq b9vlS8dhGDkxL7lnSkejOQ05pBxeS+7bo95ddk0hMotFh1AYFYZo59nuphUJmZxU 1zxCvsMM5PHcDK5aI5x/VYrowCzraUQ7ZB232swHGFRFFQs3RjmWaOEennWVD+Ki c3rGzXkJEaRvfatsbiwVBWhoE0+rCkIOKSZqjmGy4xsXJPeJBLMkxkj7g9XO7Ib6 e/ihU+L+p+YraXtFJ7J93eAzcr4ZH1ljXWH3kiFm5aONOZSrU5jkZttqqiK0EWMC AwEAAaNpMGcwRgYDVR0RBD8wPYIRaWRwLmlucGwtbmFuY3kuZnKGKGh0dHBzOi8v aWRwLmlucGwtbmFuY3kuZnIvaWRwL3NoaWJib2xldGgwHQYDVR0OBBYEFBxPfubz d6VUz/d3dpOhInKqGJQAMA0GCSqGSIb3DQEBBQUAA4IBAQBNyIY5zAjzUxPQRJSR 4JUiD4xkYnMAopFFmUPJmD3+Td+zEBjBKalp3v1/j8ay+VmGBNBsMa3AAzGOckNF VvNg1S+EyvVOUGnguYQoUDTmX+PakCrWKn0OoOaeOQnxCozfJ3fA3FCXmGXz9aHF EPfK5jjWj+voI4mGyE8Qx5QQ02f85yUHD736L8LpAhim/7DlXN23U8Nv/8DxLwVz Sydnr+Jcw/wsHTLNyoYAOkGarUOlXLmLeve/Kg2BQma+8cKHGeLlY86x4UYdPc/Z WjuCLk2pj4atYdle0Fv40APATGrqPPO8k+kqaATAUGdPHvhdb7kqtnS9Ohv8GIEp no/V urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient inpl-nancy.fr MIIDLzCCAhegAwIBAgIUTsFznm6aNqmW5TEe+PnBd7quOtowDQYJKoZIhvcNAQEF BQAwHDEaMBgGA1UEAxMRaWRwLmlucGwtbmFuY3kuZnIwHhcNMDkwMjI3MTcyMDM3 WhcNMjkwMjI3MTcyMDM3WjAcMRowGAYDVQQDExFpZHAuaW5wbC1uYW5jeS5mcjCC ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAIZw7MsmjNQrUIAafzK7yDvF GfeSKh2gJAUyc53hamAxqCrcld3KuQOEIoY8ybqHBlJJTKlI7l/pfuBgXOP6idyq b9vlS8dhGDkxL7lnSkejOQ05pBxeS+7bo95ddk0hMotFh1AYFYZo59nuphUJmZxU 1zxCvsMM5PHcDK5aI5x/VYrowCzraUQ7ZB232swHGFRFFQs3RjmWaOEennWVD+Ki c3rGzXkJEaRvfatsbiwVBWhoE0+rCkIOKSZqjmGy4xsXJPeJBLMkxkj7g9XO7Ib6 e/ihU+L+p+YraXtFJ7J93eAzcr4ZH1ljXWH3kiFm5aONOZSrU5jkZttqqiK0EWMC AwEAAaNpMGcwRgYDVR0RBD8wPYIRaWRwLmlucGwtbmFuY3kuZnKGKGh0dHBzOi8v aWRwLmlucGwtbmFuY3kuZnIvaWRwL3NoaWJib2xldGgwHQYDVR0OBBYEFBxPfubz d6VUz/d3dpOhInKqGJQAMA0GCSqGSIb3DQEBBQUAA4IBAQBNyIY5zAjzUxPQRJSR 4JUiD4xkYnMAopFFmUPJmD3+Td+zEBjBKalp3v1/j8ay+VmGBNBsMa3AAzGOckNF VvNg1S+EyvVOUGnguYQoUDTmX+PakCrWKn0OoOaeOQnxCozfJ3fA3FCXmGXz9aHF EPfK5jjWj+voI4mGyE8Qx5QQ02f85yUHD736L8LpAhim/7DlXN23U8Nv/8DxLwVz Sydnr+Jcw/wsHTLNyoYAOkGarUOlXLmLeve/Kg2BQma+8cKHGeLlY86x4UYdPc/Z WjuCLk2pj4atYdle0Fv40APATGrqPPO8k+kqaATAUGdPHvhdb7kqtnS9Ohv8GIEp no/V urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Institut National Polytechnique de Lorraine Nancy Institut National Polytechnique de Lorraine Nancy http://unknown.site.com SENET Thierry sysfede@inpl-nancy.fr MARCHAL Benoît sysfede@inpl-nancy.fr MIIHljCCBX6gAwIBAgIBeTANBgkqhkiG9w0BAQUFADCBojFDMEEGA1UEAxQ6VEVM RUNPTSAmIE1hbmFnZW1lbnQgU3VkUGFyaXMgY2xhc3MzIENlcnRpZmljYXRlIEF1 dGhvcml0eTEmMCQGA1UECxQdVEVMRUNPTSAmIE1hbmFnZW1lbnQgU3VkUGFyaXMx JjAkBgNVBAoUHVRFTEVDT00gJiBNYW5hZ2VtZW50IFN1ZFBhcmlzMQswCQYDVQQG EwJmcjAeFw0wOTAzMTExMDAwMzRaFw0xMTAzMTExMDAwMzRaMIGEMQswCQYDVQQG EwJmcjEQMA4GA1UECBMHRXNzb25uZTENMAsGA1UEBxMERXZyeTEnMCUGA1UEChMe VGVsZWNvbSBldCBNYW5hZ2VtZW50IFN1ZFBhcmlzMQ0wCwYDVQQLEwRzMmlhMRww GgYDVQQDExNibG9nLml0LXN1ZHBhcmlzLmV1MIGfMA0GCSqGSIb3DQEBAQUAA4GN ADCBiQKBgQCjefDneN7N2aU5U53tGYrKmouMEiDR0akWNHOvXJ7xLUXoDo4TueZV XzqEY4uGXG8Q2C15z+7Zt3ZISeMEBKOpalufC10WryvU5lOT/eFgqH4m4FdrGFbz X4EdAIkwILQ7CJy8f8UHhNjSW2dRVqenDccrFG7K0kSUFbfYWkMMywIDAQABo4ID dTCCA3EwEQYJYIZIAYb4QgEBBAQDAgbAMAsGA1UdDwQEAwIE8DAdBgNVHSUEFjAU BggrBgEFBQcDAQYIKwYBBQUHAwIwPgYJYIZIAYb4QgEEBDEWL2h0dHA6Ly9jYS5p dC1zdWRwYXJpcy5ldS9wa2kvVE1TUF9DQS9jcmwtdjEuY3JsMB0GA1UdDgQWBBQ7 td0ddy/3+MoV7M+Gd0ONhtkGyzCBpQYDVR0jBIGdMIGagBTAYNFZZtsQy1gL/FWm DLkyPGvjoaF/pH0wezE2MDQGA1UEAxMtSW5zdGl0dXQgVEVMRUNPTSBjbGFzczIg Q2VydGlmaWNhdGUgQXV0aG9yaXR5MRkwFwYDVQQLExBJbnN0aXR1dCBURUxFQ09N MRkwFwYDVQQKExBJbnN0aXR1dCBURUxFQ09NMQswCQYDVQQGEwJmcoIBATBJBggr BgEFBQcBAQQ9MDswOQYIKwYBBQUHMAKGLWh0dHA6Ly9jYS5pdC1zdWRwYXJpcy5l dS9wa2kvVE1TUF9DQS9pdGNhLmNydDBABgNVHR8EOTA3MDWgM6Axhi9odHRwOi8v Y2EuaXQtc3VkcGFyaXMuZXUvcGtpL1RNU1BfQ0EvY3JsLXYyLmNybDCBnAYDVR0g BIGUMIGRMIGOBgQpAQEBMIGFMDQGCCsGAQUFBwIBFihodHRwOi8vY2EuaXQtc3Vk cGFyaXMuZXUvcGtpL1RNU1BfQ0EvQ1BTME0GCCsGAQUFBwICMEEaP0xpbWl0ZWQg TGlhYmlsaXR5LCBzZWUgaHR0cDovL2NhLml0LXN1ZHBhcmlzLmV1L3BraS9UTVNQ X0NBL0NQVTA9BgNVHRIENjA0gRdhZG1pbnBraUBpdC1zdWRwYXJpcy5ldYYZaHR0 cDovL3d3dy5pdC1zdWRwYXJpcy5ldTCBvQYDVR0RBIG1MIGygRdzMmlhLWlzckBp dC1zdWRwYXJpcy5ldYITYmxvZy5pdC1zdWRwYXJpcy5ldYIYYmxvZy50ZWxlY29t LXN1ZHBhcmlzLmV1ghJibG9nLnRlbGVjb20tZW0uZXWCGWJsb2dzLnRlbGVjb20t c3VkcGFyaXMuZXWCE2Jsb2dzLnRlbGVjb20tZW0uZXWCEmJsb2dzMi5pbnQtZXZy eS5mcoIQYmxvZy5pbnQtZXZyeS5mcjANBgkqhkiG9w0BAQUFAAOCAgEANIqqzbyt hRIVuifxC6ZGBQBLAu5RNnzQ+420WwZEXcMS0y5T9oqI6E7JOiOgZ8x7piV58icr jG5jdAayPvqNdWNwSGOWuFJwmWhFCbV+i0OPs89owHH4HXjGxKU2uUyKMJhtSNTb sUfPT105egamn3wZ0wKsKAFtXXx6+4efuxEubX6oVW5FM4O9W5dWcS7zhb1Y0tfF l4+ghkHbuwA5Vi6GEhSJzF5ycau7YsPzmJK+b3pUhe3jS+aTHfsAl8LoZhj185dt 6XYEaqx8FkLfwBRw06i45D09ZEWOxM3Cr8o3jLnU2o+/p/4rxTTLq9wLjSn3EK1v 72Sub8tWiezzCGauc1Gild4YhSXxKFCC8SMaewp6T8E9gFWafXfcDzZ9WDHz5tuJ cjlcb9CZAw9XXHIQHiyDexYcJnQmVfIRu3s4G4ZRYiyUjeQkVGgthOwR8PdCI0LD J4SlNurY5DChcM7hK4Ey8RSX6wCnTq1GfaSScAeXMLZyNHNJzFivTdnteMQ05GXa J9EXpdsZHzjrqMrbux2r7WdKi4LzoUADDUsUz0RWjVGxMHyLIzdq7k7QyW65FsdP 1LUczmmGoPIWPfgwkqIwZXG1iM4s44o3ZCeLMJesMXCYijLF3M2Tt4cAi6ejSB7e aFvDQAbb5EJe2Bw5ji4H5Q5huSxu24ON6dc= MIIHljCCBX6gAwIBAgIBeTANBgkqhkiG9w0BAQUFADCBojFDMEEGA1UEAxQ6VEVM RUNPTSAmIE1hbmFnZW1lbnQgU3VkUGFyaXMgY2xhc3MzIENlcnRpZmljYXRlIEF1 dGhvcml0eTEmMCQGA1UECxQdVEVMRUNPTSAmIE1hbmFnZW1lbnQgU3VkUGFyaXMx JjAkBgNVBAoUHVRFTEVDT00gJiBNYW5hZ2VtZW50IFN1ZFBhcmlzMQswCQYDVQQG EwJmcjAeFw0wOTAzMTExMDAwMzRaFw0xMTAzMTExMDAwMzRaMIGEMQswCQYDVQQG EwJmcjEQMA4GA1UECBMHRXNzb25uZTENMAsGA1UEBxMERXZyeTEnMCUGA1UEChMe VGVsZWNvbSBldCBNYW5hZ2VtZW50IFN1ZFBhcmlzMQ0wCwYDVQQLEwRzMmlhMRww GgYDVQQDExNibG9nLml0LXN1ZHBhcmlzLmV1MIGfMA0GCSqGSIb3DQEBAQUAA4GN ADCBiQKBgQCjefDneN7N2aU5U53tGYrKmouMEiDR0akWNHOvXJ7xLUXoDo4TueZV XzqEY4uGXG8Q2C15z+7Zt3ZISeMEBKOpalufC10WryvU5lOT/eFgqH4m4FdrGFbz X4EdAIkwILQ7CJy8f8UHhNjSW2dRVqenDccrFG7K0kSUFbfYWkMMywIDAQABo4ID dTCCA3EwEQYJYIZIAYb4QgEBBAQDAgbAMAsGA1UdDwQEAwIE8DAdBgNVHSUEFjAU BggrBgEFBQcDAQYIKwYBBQUHAwIwPgYJYIZIAYb4QgEEBDEWL2h0dHA6Ly9jYS5p dC1zdWRwYXJpcy5ldS9wa2kvVE1TUF9DQS9jcmwtdjEuY3JsMB0GA1UdDgQWBBQ7 td0ddy/3+MoV7M+Gd0ONhtkGyzCBpQYDVR0jBIGdMIGagBTAYNFZZtsQy1gL/FWm DLkyPGvjoaF/pH0wezE2MDQGA1UEAxMtSW5zdGl0dXQgVEVMRUNPTSBjbGFzczIg Q2VydGlmaWNhdGUgQXV0aG9yaXR5MRkwFwYDVQQLExBJbnN0aXR1dCBURUxFQ09N MRkwFwYDVQQKExBJbnN0aXR1dCBURUxFQ09NMQswCQYDVQQGEwJmcoIBATBJBggr BgEFBQcBAQQ9MDswOQYIKwYBBQUHMAKGLWh0dHA6Ly9jYS5pdC1zdWRwYXJpcy5l dS9wa2kvVE1TUF9DQS9pdGNhLmNydDBABgNVHR8EOTA3MDWgM6Axhi9odHRwOi8v Y2EuaXQtc3VkcGFyaXMuZXUvcGtpL1RNU1BfQ0EvY3JsLXYyLmNybDCBnAYDVR0g BIGUMIGRMIGOBgQpAQEBMIGFMDQGCCsGAQUFBwIBFihodHRwOi8vY2EuaXQtc3Vk cGFyaXMuZXUvcGtpL1RNU1BfQ0EvQ1BTME0GCCsGAQUFBwICMEEaP0xpbWl0ZWQg TGlhYmlsaXR5LCBzZWUgaHR0cDovL2NhLml0LXN1ZHBhcmlzLmV1L3BraS9UTVNQ X0NBL0NQVTA9BgNVHRIENjA0gRdhZG1pbnBraUBpdC1zdWRwYXJpcy5ldYYZaHR0 cDovL3d3dy5pdC1zdWRwYXJpcy5ldTCBvQYDVR0RBIG1MIGygRdzMmlhLWlzckBp dC1zdWRwYXJpcy5ldYITYmxvZy5pdC1zdWRwYXJpcy5ldYIYYmxvZy50ZWxlY29t LXN1ZHBhcmlzLmV1ghJibG9nLnRlbGVjb20tZW0uZXWCGWJsb2dzLnRlbGVjb20t c3VkcGFyaXMuZXWCE2Jsb2dzLnRlbGVjb20tZW0uZXWCEmJsb2dzMi5pbnQtZXZy eS5mcoIQYmxvZy5pbnQtZXZyeS5mcjANBgkqhkiG9w0BAQUFAAOCAgEANIqqzbyt hRIVuifxC6ZGBQBLAu5RNnzQ+420WwZEXcMS0y5T9oqI6E7JOiOgZ8x7piV58icr jG5jdAayPvqNdWNwSGOWuFJwmWhFCbV+i0OPs89owHH4HXjGxKU2uUyKMJhtSNTb sUfPT105egamn3wZ0wKsKAFtXXx6+4efuxEubX6oVW5FM4O9W5dWcS7zhb1Y0tfF l4+ghkHbuwA5Vi6GEhSJzF5ycau7YsPzmJK+b3pUhe3jS+aTHfsAl8LoZhj185dt 6XYEaqx8FkLfwBRw06i45D09ZEWOxM3Cr8o3jLnU2o+/p/4rxTTLq9wLjSn3EK1v 72Sub8tWiezzCGauc1Gild4YhSXxKFCC8SMaewp6T8E9gFWafXfcDzZ9WDHz5tuJ cjlcb9CZAw9XXHIQHiyDexYcJnQmVfIRu3s4G4ZRYiyUjeQkVGgthOwR8PdCI0LD J4SlNurY5DChcM7hK4Ey8RSX6wCnTq1GfaSScAeXMLZyNHNJzFivTdnteMQ05GXa J9EXpdsZHzjrqMrbux2r7WdKi4LzoUADDUsUz0RWjVGxMHyLIzdq7k7QyW65FsdP 1LUczmmGoPIWPfgwkqIwZXG1iM4s44o3ZCeLMJesMXCYijLF3M2Tt4cAi6ejSB7e aFvDQAbb5EJe2Bw5ji4H5Q5huSxu24ON6dc= urn:mace:shibboleth:1.0:nameIdentifier Procaccia jehan.procaccia@it-sudparis.eu MIIDjzCCAvigAwIBAgIDE2llMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0 aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTAwNjE1MDgyMzA1WhcNMTEwNjE3MjIzMDEy WjCB9TEpMCcGA1UEBRMgc1dtTE9QaC9MR3VpdmFFV1U3dmJxTTExZERzbEdORFMx CzAJBgNVBAYTAlVTMSAwHgYDVQQKExdzaGliYm9sZXRoLmhpZ2h3aXJlLm9yZzET MBEGA1UECxMKR1QyNTQ2ODg0MzExMC8GA1UECxMoU2VlIHd3dy5nZW90cnVzdC5j b20vcmVzb3VyY2VzL2NwcyAoYykxMDEvMC0GA1UECxMmRG9tYWluIENvbnRyb2wg VmFsaWRhdGVkIC0gUXVpY2tTU0woUikxIDAeBgNVBAMTF3NoaWJib2xldGguaGln aHdpcmUub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCzSPN2X9bk5MHB f6mUZ/CvBKfgEn46C7GnyzhKuEhsmppVKCxPenesKPvSmxpWWz7/Iwqusq7WHR0Z yVz4qHAyNPmN3U9HHGUeDlU1FZF9xltfzwoYcHJrSDXkSMAoV654f7L4wesBVSjj nPzmbIJlSbKYBbDFY60+dRlSwpRJ1wIDAQABo4HSMIHPMB8GA1UdIwQYMBaAFEjm aPkr0rKV10fYIyAQTzOYkJ/UMA4GA1UdDwEB/wQEAwIE8DAdBgNVHSUEFjAUBggr BgEFBQcDAQYIKwYBBQUHAwIwIgYDVR0RBBswGYIXc2hpYmJvbGV0aC5oaWdod2ly ZS5vcmcwOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC5nZW90cnVzdC5jb20v Y3Jscy9zZWN1cmVjYS5jcmwwHQYDVR0OBBYEFKEHn+uq2uvGkQRbITzHGnUL2a7z MA0GCSqGSIb3DQEBBQUAA4GBAEPaX1aKQj5ePOM8rAGI+T43+f/53tE5ga2O8kvg a4P5WEjXn8A4vnNSHRAHuj5qye0R8f2dqnNHH2znsw1ZMDuUERXn7mqrq6dqWiSq W2YFcT09X+2GlGNmhKY9VxhZH5szboc5IPWil9GpubtQ9cfz8ukLTaAwklS2wn1Y oZQx MIIDjzCCAvigAwIBAgIDE2llMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0 aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTAwNjE1MDgyMzA1WhcNMTEwNjE3MjIzMDEy WjCB9TEpMCcGA1UEBRMgc1dtTE9QaC9MR3VpdmFFV1U3dmJxTTExZERzbEdORFMx CzAJBgNVBAYTAlVTMSAwHgYDVQQKExdzaGliYm9sZXRoLmhpZ2h3aXJlLm9yZzET MBEGA1UECxMKR1QyNTQ2ODg0MzExMC8GA1UECxMoU2VlIHd3dy5nZW90cnVzdC5j b20vcmVzb3VyY2VzL2NwcyAoYykxMDEvMC0GA1UECxMmRG9tYWluIENvbnRyb2wg VmFsaWRhdGVkIC0gUXVpY2tTU0woUikxIDAeBgNVBAMTF3NoaWJib2xldGguaGln aHdpcmUub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCzSPN2X9bk5MHB f6mUZ/CvBKfgEn46C7GnyzhKuEhsmppVKCxPenesKPvSmxpWWz7/Iwqusq7WHR0Z yVz4qHAyNPmN3U9HHGUeDlU1FZF9xltfzwoYcHJrSDXkSMAoV654f7L4wesBVSjj nPzmbIJlSbKYBbDFY60+dRlSwpRJ1wIDAQABo4HSMIHPMB8GA1UdIwQYMBaAFEjm aPkr0rKV10fYIyAQTzOYkJ/UMA4GA1UdDwEB/wQEAwIE8DAdBgNVHSUEFjAUBggr BgEFBQcDAQYIKwYBBQUHAwIwIgYDVR0RBBswGYIXc2hpYmJvbGV0aC5oaWdod2ly ZS5vcmcwOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC5nZW90cnVzdC5jb20v Y3Jscy9zZWN1cmVjYS5jcmwwHQYDVR0OBBYEFKEHn+uq2uvGkQRbITzHGnUL2a7z MA0GCSqGSIb3DQEBBQUAA4GBAEPaX1aKQj5ePOM8rAGI+T43+f/53tE5ga2O8kvg a4P5WEjXn8A4vnNSHRAHuj5qye0R8f2dqnNHH2znsw1ZMDuUERXn7mqrq6dqWiSq W2YFcT09X+2GlGNmhKY9VxhZH5szboc5IPWil9GpubtQ9cfz8ukLTaAwklS2wn1Y oZQx urn:mace:shibboleth:1.0:nameIdentifier Ryan Krebs shibboleth-admin@highwire.stanford.edu MIICmDCCAgGgAwIBAgIJAOyyt7pB0BuoMA0GCSqGSIb3DQEBBQUAMD0xCzAJBgNV BAYTAkZSMRYwFAYDVQQKEw1Vbml2IFJlbm5lcyAxMRYwFAYDVQQDEw13aWZpLmpy ZXMub3JnMB4XDTA5MTAxNTE0NDMxNVoXDTI5MTAxMDE0NDMxNVowPTELMAkGA1UE BhMCRlIxFjAUBgNVBAoTDVVuaXYgUmVubmVzIDExFjAUBgNVBAMTDXdpZmkuanJl cy5vcmcwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALEFz+hMeY6vDdcOFsIx /pMSFSO+jjrlUVV+2O5HIotjyT0g22p26Jg5k4E3rPvAiwoFmySkk2ArCsLJ1LTz K27XrqTlXvUpA8J4Y6UOT5ifB1RQexnZmmDMmM7qQY4fg8R3DNVyHcrGbNWMXxug XZXdUvOKfw+tDT45r1KncZF1AgMBAAGjgZ8wgZwwHQYDVR0OBBYEFDKpYU1uKzzP OJJIhFqrroYwDzemMG0GA1UdIwRmMGSAFDKpYU1uKzzPOJJIhFqrroYwDzemoUGk PzA9MQswCQYDVQQGEwJGUjEWMBQGA1UEChMNVW5pdiBSZW5uZXMgMTEWMBQGA1UE AxMNd2lmaS5qcmVzLm9yZ4IJAOyyt7pB0BuoMAwGA1UdEwQFMAMBAf8wDQYJKoZI hvcNAQEFBQADgYEAR1JUbMoJqoRTyfkgS+vzuyyGITXQJ+dYmnRp93u82epWOaz8 2JTYq5NwQaweb6pC8sZ+Mp3LM9V7E7x8CEP3xBNeIVBmIk+gWsDHWJf6IS7NXFkc 8WtoY/WzNE2I70S+4xvmrqjqgwsQF4vOBehQGrJ7fXe8nq/y5nLJRgSHelQ= MIICmDCCAgGgAwIBAgIJAOyyt7pB0BuoMA0GCSqGSIb3DQEBBQUAMD0xCzAJBgNV BAYTAkZSMRYwFAYDVQQKEw1Vbml2IFJlbm5lcyAxMRYwFAYDVQQDEw13aWZpLmpy ZXMub3JnMB4XDTA5MTAxNTE0NDMxNVoXDTI5MTAxMDE0NDMxNVowPTELMAkGA1UE BhMCRlIxFjAUBgNVBAoTDVVuaXYgUmVubmVzIDExFjAUBgNVBAMTDXdpZmkuanJl cy5vcmcwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALEFz+hMeY6vDdcOFsIx /pMSFSO+jjrlUVV+2O5HIotjyT0g22p26Jg5k4E3rPvAiwoFmySkk2ArCsLJ1LTz K27XrqTlXvUpA8J4Y6UOT5ifB1RQexnZmmDMmM7qQY4fg8R3DNVyHcrGbNWMXxug XZXdUvOKfw+tDT45r1KncZF1AgMBAAGjgZ8wgZwwHQYDVR0OBBYEFDKpYU1uKzzP OJJIhFqrroYwDzemMG0GA1UdIwRmMGSAFDKpYU1uKzzPOJJIhFqrroYwDzemoUGk PzA9MQswCQYDVQQGEwJGUjEWMBQGA1UEChMNVW5pdiBSZW5uZXMgMTEWMBQGA1UE AxMNd2lmaS5qcmVzLm9yZ4IJAOyyt7pB0BuoMAwGA1UdEwQFMAMBAf8wDQYJKoZI hvcNAQEFBQADgYEAR1JUbMoJqoRTyfkgS+vzuyyGITXQJ+dYmnRp93u82epWOaz8 2JTYq5NwQaweb6pC8sZ+Mp3LM9V7E7x8CEP3xBNeIVBmIk+gWsDHWJf6IS7NXFkc 8WtoY/WzNE2I70S+4xvmrqjqgwsQF4vOBehQGrJ7fXe8nq/y5nLJRgSHelQ= urn:mace:shibboleth:1.0:nameIdentifier Raymond Bourges fed-admin@listes.univ-rennes1.fr Fabrice Jaunet fabrice.jaunet@univ-rennes1.fr support.cru.fr CN=support.cru.fr,O=CRU,C=FR MIICfTCCAeagAwIBAgIJALqMMIy927JQMA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNV BAYTAkZSMQwwCgYDVQQKEwNDUlUxFzAVBgNVBAMTDnN1cHBvcnQuY3J1LmZyMB4X DTEwMDkyMDEzMjQwMVoXDTMwMDkxNTEzMjQwMVowNDELMAkGA1UEBhMCRlIxDDAK BgNVBAoTA0NSVTEXMBUGA1UEAxMOc3VwcG9ydC5jcnUuZnIwgZ8wDQYJKoZIhvcN AQEBBQADgY0AMIGJAoGBAJwDbzzsS8uTS8Bl0Pj+HvXjYjlYT5PKL1NOxkVD3zgl GomQ1E9ozSq99M04NKQepjT0b3oE8Qp0qAKRgO5I2QD3kBg7NTyhCq3eCis7+hh1 wH/KdNWtVMAPAEC97+br4IeTbBtC16auZfLeyqujIahOqCSXHu31nDMpZa0MWvT3 AgMBAAGjgZYwgZMwHQYDVR0OBBYEFAU8XnJ/h5vdjoieOCAaw/pdsxjbMGQGA1Ud IwRdMFuAFAU8XnJ/h5vdjoieOCAaw/pdsxjboTikNjA0MQswCQYDVQQGEwJGUjEM MAoGA1UEChMDQ1JVMRcwFQYDVQQDEw5zdXBwb3J0LmNydS5mcoIJALqMMIy927JQ MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAi3Wy1etYsCy8vwAb6rlq HDlZBk/xZwm9rcCfD/9ITYYzn49pHMhia4Khrpnpn0zH6P0XRy1aJtjkQLLPDe4U wmLTY0433zuAWBJT7B8KOzqay3pjnMNXfJYKWssiacScp3Bc7/hgYpxQWR7A5nLv tqSRJLOwuuuSGEtLzxwTIKw= support.cru.fr CN=support.cru.fr,O=CRU,C=FR MIICfTCCAeagAwIBAgIJALqMMIy927JQMA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNV BAYTAkZSMQwwCgYDVQQKEwNDUlUxFzAVBgNVBAMTDnN1cHBvcnQuY3J1LmZyMB4X DTEwMDkyMDEzMjQwMVoXDTMwMDkxNTEzMjQwMVowNDELMAkGA1UEBhMCRlIxDDAK BgNVBAoTA0NSVTEXMBUGA1UEAxMOc3VwcG9ydC5jcnUuZnIwgZ8wDQYJKoZIhvcN AQEBBQADgY0AMIGJAoGBAJwDbzzsS8uTS8Bl0Pj+HvXjYjlYT5PKL1NOxkVD3zgl GomQ1E9ozSq99M04NKQepjT0b3oE8Qp0qAKRgO5I2QD3kBg7NTyhCq3eCis7+hh1 wH/KdNWtVMAPAEC97+br4IeTbBtC16auZfLeyqujIahOqCSXHu31nDMpZa0MWvT3 AgMBAAGjgZYwgZMwHQYDVR0OBBYEFAU8XnJ/h5vdjoieOCAaw/pdsxjbMGQGA1Ud IwRdMFuAFAU8XnJ/h5vdjoieOCAaw/pdsxjboTikNjA0MQswCQYDVQQGEwJGUjEM MAoGA1UEChMDQ1JVMRcwFQYDVQQDEw5zdXBwb3J0LmNydS5mcoIJALqMMIy927JQ MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAi3Wy1etYsCy8vwAb6rlq HDlZBk/xZwm9rcCfD/9ITYYzn49pHMhia4Khrpnpn0zH6P0XRy1aJtjkQLLPDe4U wmLTY0433zuAWBJT7B8KOzqay3pjnMNXfJYKWssiacScp3Bc7/hgYpxQWR7A5nLv tqSRJLOwuuuSGEtLzxwTIKw= MIICuTCCAiKgAwIBAgIJAJgO208TxtTkMA0GCSqGSIb3DQEBBQUAMEgxCzAJBgNV BAYTAkZSMRowGAYDVQQKExFub20gZGUgbG9yZ2FuaXNtZTEdMBsGA1UEAxMUaW5z Y3JpcHRpb24uanJlcy5vcmcwHhcNMDkwMjA2MTA1OTUzWhcNMjkwMjAxMTA1OTUz WjBIMQswCQYDVQQGEwJGUjEaMBgGA1UEChMRbm9tIGRlIGxvcmdhbmlzbWUxHTAb BgNVBAMTFGluc2NyaXB0aW9uLmpyZXMub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GN ADCBiQKBgQCp0rxvcbCm2cvg1QS3Oq2Jdp94Fn0QlUFkDE5RMi3wGxZ86EVB7Swf Cj1PTIy7e0pvz4Ll2FTEkwzfzhLNRu00NJtaIbi0ztA3UuTFnBnT97oQ1mm0kSxk XNeBGRzm5BvBejeeeOVv8AEN7Y/ZRwWE232p5Ye9DwcF5J9c3ReRRQIDAQABo4Gq MIGnMB0GA1UdDgQWBBQs3i96aia6+OnaZf15A5TQdL1SIDB4BgNVHSMEcTBvgBQs 3i96aia6+OnaZf15A5TQdL1SIKFMpEowSDELMAkGA1UEBhMCRlIxGjAYBgNVBAoT EW5vbSBkZSBsb3JnYW5pc21lMR0wGwYDVQQDExRpbnNjcmlwdGlvbi5qcmVzLm9y Z4IJAJgO208TxtTkMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEANjv2 Wg3FULqhCB5emx3QhHa2SkrwM0flHicyg/yydELC+7T8pBwjh5ul8BhSzYjeIsTW Kza+l1p4RHH/NAKD3ViwtKJYqcHNcKtO/xxoeN5JbhgSy+PPTTov7wnDZ5Qo0Lul RgwoZ5nNn6ncR261DXhFadAI+3CCBznXA/PeqPc= MIICuTCCAiKgAwIBAgIJAJgO208TxtTkMA0GCSqGSIb3DQEBBQUAMEgxCzAJBgNV BAYTAkZSMRowGAYDVQQKExFub20gZGUgbG9yZ2FuaXNtZTEdMBsGA1UEAxMUaW5z Y3JpcHRpb24uanJlcy5vcmcwHhcNMDkwMjA2MTA1OTUzWhcNMjkwMjAxMTA1OTUz WjBIMQswCQYDVQQGEwJGUjEaMBgGA1UEChMRbm9tIGRlIGxvcmdhbmlzbWUxHTAb BgNVBAMTFGluc2NyaXB0aW9uLmpyZXMub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GN ADCBiQKBgQCp0rxvcbCm2cvg1QS3Oq2Jdp94Fn0QlUFkDE5RMi3wGxZ86EVB7Swf Cj1PTIy7e0pvz4Ll2FTEkwzfzhLNRu00NJtaIbi0ztA3UuTFnBnT97oQ1mm0kSxk XNeBGRzm5BvBejeeeOVv8AEN7Y/ZRwWE232p5Ye9DwcF5J9c3ReRRQIDAQABo4Gq MIGnMB0GA1UdDgQWBBQs3i96aia6+OnaZf15A5TQdL1SIDB4BgNVHSMEcTBvgBQs 3i96aia6+OnaZf15A5TQdL1SIKFMpEowSDELMAkGA1UEBhMCRlIxGjAYBgNVBAoT EW5vbSBkZSBsb3JnYW5pc21lMR0wGwYDVQQDExRpbnNjcmlwdGlvbi5qcmVzLm9y Z4IJAJgO208TxtTkMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEANjv2 Wg3FULqhCB5emx3QhHa2SkrwM0flHicyg/yydELC+7T8pBwjh5ul8BhSzYjeIsTW Kza+l1p4RHH/NAKD3ViwtKJYqcHNcKtO/xxoeN5JbhgSy+PPTTov7wnDZ5Qo0Lul RgwoZ5nNn6ncR261DXhFadAI+3CCBznXA/PeqPc= urn:mace:shibboleth:1.0:nameIdentifier Eric Boyer eric.boyer@insa-toulouse.fr conf-ng.jres.org CN=conf-ng.jres.org,O=CRU,C=FR MIICgzCCAeygAwIBAgIJAP3h1GkV/idOMA0GCSqGSIb3DQEBBQUAMDYxCzAJBgNV BAYTAkZSMQwwCgYDVQQKEwNDUlUxGTAXBgNVBAMTEGNvbmYtbmcuanJlcy5vcmcw HhcNMTEwMTAzMDk1MDEzWhcNMzAxMjI5MDk1MDEzWjA2MQswCQYDVQQGEwJGUjEM MAoGA1UEChMDQ1JVMRkwFwYDVQQDExBjb25mLW5nLmpyZXMub3JnMIGfMA0GCSqG SIb3DQEBAQUAA4GNADCBiQKBgQDalCrdHO2IyjQsoKw4bOuffU2XJEWwq7gmnVxb Cm/SoofthN++Dxht36CpTJ9MlAkszTUp3xzEB0ga5fVZN+dlAKVgAIoBFq/UbMx2 5wd62TFx6pjTxDwsHLalBmVf25Ej70AFfr2AsXgD7tNXqNY1xUvXxwzgx2uweBtG c8jiywIDAQABo4GYMIGVMB0GA1UdDgQWBBTIwBRiSn7JclYAP4EK/OW1FCuv7jBm BgNVHSMEXzBdgBTIwBRiSn7JclYAP4EK/OW1FCuv7qE6pDgwNjELMAkGA1UEBhMC RlIxDDAKBgNVBAoTA0NSVTEZMBcGA1UEAxMQY29uZi1uZy5qcmVzLm9yZ4IJAP3h 1GkV/idOMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEArZN5pS+x2CtR HylKQf0FhHHS0eK9+lcHpKzHZ4/GgBUmRkhy+5VrJOWy2Omr7ABxBzZ8F/gMhWC2 Ppkea+ewbrpbM/XgBy7jg5795/1j2v3iHTUUL/WvIXwbxuydgH62uNos75AylMXN oti+2Ooyuk1NRffOwZHL2tlJ4cq/X9s= conf-ng.jres.org CN=conf-ng.jres.org,O=CRU,C=FR MIICgzCCAeygAwIBAgIJAP3h1GkV/idOMA0GCSqGSIb3DQEBBQUAMDYxCzAJBgNV BAYTAkZSMQwwCgYDVQQKEwNDUlUxGTAXBgNVBAMTEGNvbmYtbmcuanJlcy5vcmcw HhcNMTEwMTAzMDk1MDEzWhcNMzAxMjI5MDk1MDEzWjA2MQswCQYDVQQGEwJGUjEM MAoGA1UEChMDQ1JVMRkwFwYDVQQDExBjb25mLW5nLmpyZXMub3JnMIGfMA0GCSqG SIb3DQEBAQUAA4GNADCBiQKBgQDalCrdHO2IyjQsoKw4bOuffU2XJEWwq7gmnVxb Cm/SoofthN++Dxht36CpTJ9MlAkszTUp3xzEB0ga5fVZN+dlAKVgAIoBFq/UbMx2 5wd62TFx6pjTxDwsHLalBmVf25Ej70AFfr2AsXgD7tNXqNY1xUvXxwzgx2uweBtG c8jiywIDAQABo4GYMIGVMB0GA1UdDgQWBBTIwBRiSn7JclYAP4EK/OW1FCuv7jBm BgNVHSMEXzBdgBTIwBRiSn7JclYAP4EK/OW1FCuv7qE6pDgwNjELMAkGA1UEBhMC RlIxDDAKBgNVBAoTA0NSVTEZMBcGA1UEAxMQY29uZi1uZy5qcmVzLm9yZ4IJAP3h 1GkV/idOMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEArZN5pS+x2CtR HylKQf0FhHHS0eK9+lcHpKzHZ4/GgBUmRkhy+5VrJOWy2Omr7ABxBzZ8F/gMhWC2 Ppkea+ewbrpbM/XgBy7jg5795/1j2v3iHTUUL/WvIXwbxuydgH62uNos75AylMXN oti+2Ooyuk1NRffOwZHL2tlJ4cq/X9s= www.jres.org CN=www.jres.org,O=CRU,C=FR MIICdzCCAeCgAwIBAgIJANOwhG/htPsxMA0GCSqGSIb3DQEBBQUAMDIxCzAJBgNV BAYTAkZSMQwwCgYDVQQKEwNDUlUxFTATBgNVBAMTDHd3dy5qcmVzLm9yZzAeFw0w ODAzMjAxMzU4MzFaFw0yODAzMTUxMzU4MzFaMDIxCzAJBgNVBAYTAkZSMQwwCgYD VQQKEwNDUlUxFTATBgNVBAMTDHd3dy5qcmVzLm9yZzCBnzANBgkqhkiG9w0BAQEF AAOBjQAwgYkCgYEAsys1hMNKSNTr99IkDYfcYT/raIqwT7ZFeUABbypMUzHWNfGE xFwTarIYT3FrZ8F3WItnhXTIyiEtnEMIQIrKk85dh1zNa+ve1jQmiYJKMJI2UXTE /jtfn1Wjk9K00AqAY4IvqopvcR/TGIyJxNFbAwd2bpodaQkTCa7C65c9UfcCAwEA AaOBlDCBkTAdBgNVHQ4EFgQUHw5V2raendRa8J0LggJWijppDBwwYgYDVR0jBFsw WYAUHw5V2raendRa8J0LggJWijppDByhNqQ0MDIxCzAJBgNVBAYTAkZSMQwwCgYD VQQKEwNDUlUxFTATBgNVBAMTDHd3dy5qcmVzLm9yZ4IJANOwhG/htPsxMAwGA1Ud EwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEADHPd3q+f7culMiDQQ03ry93frUqE iH/fiJVVC0NVq3AZevL8DcdpGgYGYnZ7hN13BKVD/Ee/FZk3uX/o4QM+QBsd+YjH 0MMt/i0Jzf8TQJQJWPgLCbYEln1y1CCVmStvcRsyExZa7LKz24cV3G/fUPBeYRWE j3tYmng/knJ+e54= www.jres.org CN=www.jres.org,O=CRU,C=FR MIICdzCCAeCgAwIBAgIJANOwhG/htPsxMA0GCSqGSIb3DQEBBQUAMDIxCzAJBgNV BAYTAkZSMQwwCgYDVQQKEwNDUlUxFTATBgNVBAMTDHd3dy5qcmVzLm9yZzAeFw0w ODAzMjAxMzU4MzFaFw0yODAzMTUxMzU4MzFaMDIxCzAJBgNVBAYTAkZSMQwwCgYD VQQKEwNDUlUxFTATBgNVBAMTDHd3dy5qcmVzLm9yZzCBnzANBgkqhkiG9w0BAQEF AAOBjQAwgYkCgYEAsys1hMNKSNTr99IkDYfcYT/raIqwT7ZFeUABbypMUzHWNfGE xFwTarIYT3FrZ8F3WItnhXTIyiEtnEMIQIrKk85dh1zNa+ve1jQmiYJKMJI2UXTE /jtfn1Wjk9K00AqAY4IvqopvcR/TGIyJxNFbAwd2bpodaQkTCa7C65c9UfcCAwEA AaOBlDCBkTAdBgNVHQ4EFgQUHw5V2raendRa8J0LggJWijppDBwwYgYDVR0jBFsw WYAUHw5V2raendRa8J0LggJWijppDByhNqQ0MDIxCzAJBgNVBAYTAkZSMQwwCgYD VQQKEwNDUlUxFTATBgNVBAMTDHd3dy5qcmVzLm9yZ4IJANOwhG/htPsxMAwGA1Ud EwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEADHPd3q+f7culMiDQQ03ry93frUqE iH/fiJVVC0NVq3AZevL8DcdpGgYGYnZ7hN13BKVD/Ee/FZk3uX/o4QM+QBsd+YjH 0MMt/i0Jzf8TQJQJWPgLCbYEln1y1CCVmStvcRsyExZa7LKz24cV3G/fUPBeYRWE j3tYmng/knJ+e54= MIIDqjCCApKgAwIBAgICAKEwDQYJKoZIhvcNAQEEBQAwXjELMAkGA1UEBhMCRlIx IjAgBgNVBAoTGUZlZGVyYXRpb24gZGUgdGVzdCBkdSBDUlUxKzApBgNVBAMTIkFD IGRlIGxhIGZlZGVyYXRpb24gZGUgdGVzdCBkdSBDUlUwHhcNMDgxMTI3MTA0NjEw WhcNMDkxMTI3MTA0NjEwWjAzMQswCQYDVQQGEwJGUjEMMAoGA1UEChMDQ1JVMRYw FAYDVQQDEw0yMDA5LmpyZXMub3JnMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKbb CZr5liGYvUcL4NgXO3fFQ2dzkiCH5KaiAkNFuMU5YbBu0mcaaQH8fYhLAy+JacgL 31I92Nb3yLtOJz5/pGUCAwEAAaOCAWMwggFfMAwGA1UdEwEB/wQCMAAwEQYJYIZI AYb4QgEBBAQDAgbAMA4GA1UdDwEB/wQEAwIF4DBVBglghkgBhvhCAQ0ESBZGQ2Vy dGlmaWNhdCBzZXJ2ZXVyIGRlIGwnQUMgZGUgdGVzdCBwb3VyIGxhIGbDqWTDqXJh dGlvbiBkZSB0ZXN0IGR1IENSVTAdBgNVHQ4EFgQU4Qa5fEyhZ6Tp7rXON+aDKfqi TDIwgYYGA1UdIwR/MH2AFPHSCguUpXzVOaP7IOP6pNEk7x8JoWKkYDBeMQswCQYD VQQGEwJGUjEiMCAGA1UEChMZRmVkZXJhdGlvbiBkZSB0ZXN0IGR1IENSVTErMCkG A1UEAxMiQUMgZGUgbGEgZmVkZXJhdGlvbiBkZSB0ZXN0IGR1IENSVYIBADAdBgNV HSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0gBAcwBTADBgEAMA0GCSqG SIb3DQEBBAUAA4IBAQDDwt62oRAkEwLev/OxaG2AQFuwgtHwr+7vKEunSNRKU2uy uuWcj0asCvVMHFBOOg9dqEjp0zfDawC+joWO03FOV+Y71dYhD3f54eUouGI+2vNt qYOULhtaZ4s01ccglksBJAdzcELoNyp18aTL10JFThoFPoB9zuQnISULvBkzbf+Y UMf/YppxgbzP0QELmPG0nYCSTg3ExTMxW2Q40wHWhyF0K+Jev7ScmwvoMG8lfAU7 frK4zyzAZRLIgcwEiuklQWtEvDyxdd/wqLVf7Ax4wG8GfxgbUcXkZH5p6pfQLNH5 ddbTZU+DZbRhe2Ms8dwrBe5fK4lX2ArNub4YP8Ga MIIDqjCCApKgAwIBAgICAKEwDQYJKoZIhvcNAQEEBQAwXjELMAkGA1UEBhMCRlIx IjAgBgNVBAoTGUZlZGVyYXRpb24gZGUgdGVzdCBkdSBDUlUxKzApBgNVBAMTIkFD IGRlIGxhIGZlZGVyYXRpb24gZGUgdGVzdCBkdSBDUlUwHhcNMDgxMTI3MTA0NjEw WhcNMDkxMTI3MTA0NjEwWjAzMQswCQYDVQQGEwJGUjEMMAoGA1UEChMDQ1JVMRYw FAYDVQQDEw0yMDA5LmpyZXMub3JnMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKbb CZr5liGYvUcL4NgXO3fFQ2dzkiCH5KaiAkNFuMU5YbBu0mcaaQH8fYhLAy+JacgL 31I92Nb3yLtOJz5/pGUCAwEAAaOCAWMwggFfMAwGA1UdEwEB/wQCMAAwEQYJYIZI AYb4QgEBBAQDAgbAMA4GA1UdDwEB/wQEAwIF4DBVBglghkgBhvhCAQ0ESBZGQ2Vy dGlmaWNhdCBzZXJ2ZXVyIGRlIGwnQUMgZGUgdGVzdCBwb3VyIGxhIGbDqWTDqXJh dGlvbiBkZSB0ZXN0IGR1IENSVTAdBgNVHQ4EFgQU4Qa5fEyhZ6Tp7rXON+aDKfqi TDIwgYYGA1UdIwR/MH2AFPHSCguUpXzVOaP7IOP6pNEk7x8JoWKkYDBeMQswCQYD VQQGEwJGUjEiMCAGA1UEChMZRmVkZXJhdGlvbiBkZSB0ZXN0IGR1IENSVTErMCkG A1UEAxMiQUMgZGUgbGEgZmVkZXJhdGlvbiBkZSB0ZXN0IGR1IENSVYIBADAdBgNV HSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0gBAcwBTADBgEAMA0GCSqG SIb3DQEBBAUAA4IBAQDDwt62oRAkEwLev/OxaG2AQFuwgtHwr+7vKEunSNRKU2uy uuWcj0asCvVMHFBOOg9dqEjp0zfDawC+joWO03FOV+Y71dYhD3f54eUouGI+2vNt qYOULhtaZ4s01ccglksBJAdzcELoNyp18aTL10JFThoFPoB9zuQnISULvBkzbf+Y UMf/YppxgbzP0QELmPG0nYCSTg3ExTMxW2Q40wHWhyF0K+Jev7ScmwvoMG8lfAU7 frK4zyzAZRLIgcwEiuklQWtEvDyxdd/wqLVf7Ax4wG8GfxgbUcXkZH5p6pfQLNH5 ddbTZU+DZbRhe2Ms8dwrBe5fK4lX2ArNub4YP8Ga urn:mace:shibboleth:1.0:nameIdentifier Salaun Olivier fed-contact@ml.renater.fr Hached Mehdi hached@renater.fr AC de la federation de test du CRU CN=AC de la federation de test du CRU,O=Federation de test du CRU,C=FR MIIC/jCCAmegAwIBAgIJAOOugoewaTPuMA0GCSqGSIb3DQEBBQUAMF4xCzAJBgNV BAYTAkZSMSIwIAYDVQQKExlGZWRlcmF0aW9uIGRlIHRlc3QgZHUgQ1JVMSswKQYD VQQDEyJBQyBkZSBsYSBmZWRlcmF0aW9uIGRlIHRlc3QgZHUgQ1JVMB4XDTEwMTEy NDA5Mzc1OFoXDTMwMTExOTA5Mzc1OFowXjELMAkGA1UEBhMCRlIxIjAgBgNVBAoT GUZlZGVyYXRpb24gZGUgdGVzdCBkdSBDUlUxKzApBgNVBAMTIkFDIGRlIGxhIGZl ZGVyYXRpb24gZGUgdGVzdCBkdSBDUlUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ AoGBAL2fyCSWKQRFA1yJc6M5tZ0UmpP8VEyItpVctzTKspbr8kqykaPlfL/f2ywM FDjQhzlyXLssQNpdzS5n6ETt3/WARw+34Um4yb41Nu3iZbCL3LPm0LmM+MY/2p95 Uq/woPvL1kBXsjrny1JiIFU7mXSGjlP2MeHe3bVX1SJQkVL7AgMBAAGjgcMwgcAw HQYDVR0OBBYEFE9DFftH7FtoS9Wz4hPiKdYcMtZMMIGQBgNVHSMEgYgwgYWAFE9D FftH7FtoS9Wz4hPiKdYcMtZMoWKkYDBeMQswCQYDVQQGEwJGUjEiMCAGA1UEChMZ RmVkZXJhdGlvbiBkZSB0ZXN0IGR1IENSVTErMCkGA1UEAxMiQUMgZGUgbGEgZmVk ZXJhdGlvbiBkZSB0ZXN0IGR1IENSVYIJAOOugoewaTPuMAwGA1UdEwQFMAMBAf8w DQYJKoZIhvcNAQEFBQADgYEAksxx6ihZIQk8XvS550BohDltiiHSpwojyR5UzS8o lxZLbTP3yDHMhy/LPLTuK9MaBfEMr/tqU9DyHEucg5688Hai7CuJ8aZiQHnZ5VUT 64U1mXXMZGxhP7zecH468X5rkKMqQPS0W117FKbQM2SM810+BDBOzgStsOKyUeZp cAE= AC de la federation de test du CRU CN=AC de la federation de test du CRU,O=Federation de test du CRU,C=FR MIIC/jCCAmegAwIBAgIJAOOugoewaTPuMA0GCSqGSIb3DQEBBQUAMF4xCzAJBgNV BAYTAkZSMSIwIAYDVQQKExlGZWRlcmF0aW9uIGRlIHRlc3QgZHUgQ1JVMSswKQYD VQQDEyJBQyBkZSBsYSBmZWRlcmF0aW9uIGRlIHRlc3QgZHUgQ1JVMB4XDTEwMTEy NDA5Mzc1OFoXDTMwMTExOTA5Mzc1OFowXjELMAkGA1UEBhMCRlIxIjAgBgNVBAoT GUZlZGVyYXRpb24gZGUgdGVzdCBkdSBDUlUxKzApBgNVBAMTIkFDIGRlIGxhIGZl ZGVyYXRpb24gZGUgdGVzdCBkdSBDUlUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ AoGBAL2fyCSWKQRFA1yJc6M5tZ0UmpP8VEyItpVctzTKspbr8kqykaPlfL/f2ywM FDjQhzlyXLssQNpdzS5n6ETt3/WARw+34Um4yb41Nu3iZbCL3LPm0LmM+MY/2p95 Uq/woPvL1kBXsjrny1JiIFU7mXSGjlP2MeHe3bVX1SJQkVL7AgMBAAGjgcMwgcAw HQYDVR0OBBYEFE9DFftH7FtoS9Wz4hPiKdYcMtZMMIGQBgNVHSMEgYgwgYWAFE9D FftH7FtoS9Wz4hPiKdYcMtZMoWKkYDBeMQswCQYDVQQGEwJGUjEiMCAGA1UEChMZ RmVkZXJhdGlvbiBkZSB0ZXN0IGR1IENSVTErMCkGA1UEAxMiQUMgZGUgbGEgZmVk ZXJhdGlvbiBkZSB0ZXN0IGR1IENSVYIJAOOugoewaTPuMAwGA1UdEwQFMAMBAf8w DQYJKoZIhvcNAQEFBQADgYEAksxx6ihZIQk8XvS550BohDltiiHSpwojyR5UzS8o lxZLbTP3yDHMhy/LPLTuK9MaBfEMr/tqU9DyHEucg5688Hai7CuJ8aZiQHnZ5VUT 64U1mXXMZGxhP7zecH468X5rkKMqQPS0W117FKbQM2SM810+BDBOzgStsOKyUeZp cAE= listes.jres.org CN=listes.jres.org,O=JRES,C=FR MIICgzCCAeygAwIBAgIJAIJYRN26gucMMA0GCSqGSIb3DQEBBQUAMDYxCzAJBgNV BAYTAkZSMQ0wCwYDVQQKEwRKUkVTMRgwFgYDVQQDEw9saXN0ZXMuanJlcy5vcmcw HhcNMDgwNjEwMDg0NDI1WhcNMjgwNjA1MDg0NDI1WjA2MQswCQYDVQQGEwJGUjEN MAsGA1UEChMESlJFUzEYMBYGA1UEAxMPbGlzdGVzLmpyZXMub3JnMIGfMA0GCSqG SIb3DQEBAQUAA4GNADCBiQKBgQCgZE+tXfrYS4JFZwGIgefy4TLfExnu6GeIwX+Q 3AXR6qbRRfMa8XDfOTKr6TX3GrgsfD3V43SCfdCB25wmiKc/L8BCAxfCUMw7Vdz4 2NpVjpR8fbG53cEp11ujSGrbLrW2fXEI3dh+IjekqlqKFU2c5yRCnnyYeFXiHq+Z pJLrRQIDAQABo4GYMIGVMB0GA1UdDgQWBBTZd9st4NJyZzetDY1/iDahb0GXlzBm BgNVHSMEXzBdgBTZd9st4NJyZzetDY1/iDahb0GXl6E6pDgwNjELMAkGA1UEBhMC RlIxDTALBgNVBAoTBEpSRVMxGDAWBgNVBAMTD2xpc3Rlcy5qcmVzLm9yZ4IJAIJY RN26gucMMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAYdP/sngF8B1R vyqdo7ltWKlRsf3iO3oe7v3dEtQEsd3VTV/+AFZtIoE1OeI/7FAGqaY3VDXhqJ4F HuDAOEKP+/b5F3+TSgRwfqzqHYzu9OZdyR0bmFvliYcTHFORoNobXUtOWIhu7rw4 ylEHTHevH4gx7mlWcbqE6tJInF9EKx8= listes.jres.org CN=listes.jres.org,O=JRES,C=FR MIICgzCCAeygAwIBAgIJAIJYRN26gucMMA0GCSqGSIb3DQEBBQUAMDYxCzAJBgNV BAYTAkZSMQ0wCwYDVQQKEwRKUkVTMRgwFgYDVQQDEw9saXN0ZXMuanJlcy5vcmcw HhcNMDgwNjEwMDg0NDI1WhcNMjgwNjA1MDg0NDI1WjA2MQswCQYDVQQGEwJGUjEN MAsGA1UEChMESlJFUzEYMBYGA1UEAxMPbGlzdGVzLmpyZXMub3JnMIGfMA0GCSqG SIb3DQEBAQUAA4GNADCBiQKBgQCgZE+tXfrYS4JFZwGIgefy4TLfExnu6GeIwX+Q 3AXR6qbRRfMa8XDfOTKr6TX3GrgsfD3V43SCfdCB25wmiKc/L8BCAxfCUMw7Vdz4 2NpVjpR8fbG53cEp11ujSGrbLrW2fXEI3dh+IjekqlqKFU2c5yRCnnyYeFXiHq+Z pJLrRQIDAQABo4GYMIGVMB0GA1UdDgQWBBTZd9st4NJyZzetDY1/iDahb0GXlzBm BgNVHSMEXzBdgBTZd9st4NJyZzetDY1/iDahb0GXl6E6pDgwNjELMAkGA1UEBhMC RlIxDTALBgNVBAoTBEpSRVMxGDAWBgNVBAMTD2xpc3Rlcy5qcmVzLm9yZ4IJAIJY RN26gucMMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAYdP/sngF8B1R vyqdo7ltWKlRsf3iO3oe7v3dEtQEsd3VTV/+AFZtIoE1OeI/7FAGqaY3VDXhqJ4F HuDAOEKP+/b5F3+TSgRwfqzqHYzu9OZdyR0bmFvliYcTHFORoNobXUtOWIhu7rw4 ylEHTHevH4gx7mlWcbqE6tJInF9EKx8= MIIDjzCCAvigAwIBAgIDE2llMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0 aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTAwNjE1MDgyMzA1WhcNMTEwNjE3MjIzMDEy WjCB9TEpMCcGA1UEBRMgc1dtTE9QaC9MR3VpdmFFV1U3dmJxTTExZERzbEdORFMx CzAJBgNVBAYTAlVTMSAwHgYDVQQKExdzaGliYm9sZXRoLmhpZ2h3aXJlLm9yZzET MBEGA1UECxMKR1QyNTQ2ODg0MzExMC8GA1UECxMoU2VlIHd3dy5nZW90cnVzdC5j b20vcmVzb3VyY2VzL2NwcyAoYykxMDEvMC0GA1UECxMmRG9tYWluIENvbnRyb2wg VmFsaWRhdGVkIC0gUXVpY2tTU0woUikxIDAeBgNVBAMTF3NoaWJib2xldGguaGln aHdpcmUub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCzSPN2X9bk5MHB f6mUZ/CvBKfgEn46C7GnyzhKuEhsmppVKCxPenesKPvSmxpWWz7/Iwqusq7WHR0Z yVz4qHAyNPmN3U9HHGUeDlU1FZF9xltfzwoYcHJrSDXkSMAoV654f7L4wesBVSjj nPzmbIJlSbKYBbDFY60+dRlSwpRJ1wIDAQABo4HSMIHPMB8GA1UdIwQYMBaAFEjm aPkr0rKV10fYIyAQTzOYkJ/UMA4GA1UdDwEB/wQEAwIE8DAdBgNVHSUEFjAUBggr BgEFBQcDAQYIKwYBBQUHAwIwIgYDVR0RBBswGYIXc2hpYmJvbGV0aC5oaWdod2ly ZS5vcmcwOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC5nZW90cnVzdC5jb20v Y3Jscy9zZWN1cmVjYS5jcmwwHQYDVR0OBBYEFKEHn+uq2uvGkQRbITzHGnUL2a7z MA0GCSqGSIb3DQEBBQUAA4GBAEPaX1aKQj5ePOM8rAGI+T43+f/53tE5ga2O8kvg a4P5WEjXn8A4vnNSHRAHuj5qye0R8f2dqnNHH2znsw1ZMDuUERXn7mqrq6dqWiSq W2YFcT09X+2GlGNmhKY9VxhZH5szboc5IPWil9GpubtQ9cfz8ukLTaAwklS2wn1Y oZQx MIIDjzCCAvigAwIBAgIDE2llMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0 aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTAwNjE1MDgyMzA1WhcNMTEwNjE3MjIzMDEy WjCB9TEpMCcGA1UEBRMgc1dtTE9QaC9MR3VpdmFFV1U3dmJxTTExZERzbEdORFMx CzAJBgNVBAYTAlVTMSAwHgYDVQQKExdzaGliYm9sZXRoLmhpZ2h3aXJlLm9yZzET MBEGA1UECxMKR1QyNTQ2ODg0MzExMC8GA1UECxMoU2VlIHd3dy5nZW90cnVzdC5j b20vcmVzb3VyY2VzL2NwcyAoYykxMDEvMC0GA1UECxMmRG9tYWluIENvbnRyb2wg VmFsaWRhdGVkIC0gUXVpY2tTU0woUikxIDAeBgNVBAMTF3NoaWJib2xldGguaGln aHdpcmUub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCzSPN2X9bk5MHB f6mUZ/CvBKfgEn46C7GnyzhKuEhsmppVKCxPenesKPvSmxpWWz7/Iwqusq7WHR0Z yVz4qHAyNPmN3U9HHGUeDlU1FZF9xltfzwoYcHJrSDXkSMAoV654f7L4wesBVSjj nPzmbIJlSbKYBbDFY60+dRlSwpRJ1wIDAQABo4HSMIHPMB8GA1UdIwQYMBaAFEjm aPkr0rKV10fYIyAQTzOYkJ/UMA4GA1UdDwEB/wQEAwIE8DAdBgNVHSUEFjAUBggr BgEFBQcDAQYIKwYBBQUHAwIwIgYDVR0RBBswGYIXc2hpYmJvbGV0aC5oaWdod2ly ZS5vcmcwOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC5nZW90cnVzdC5jb20v Y3Jscy9zZWN1cmVjYS5jcmwwHQYDVR0OBBYEFKEHn+uq2uvGkQRbITzHGnUL2a7z MA0GCSqGSIb3DQEBBQUAA4GBAEPaX1aKQj5ePOM8rAGI+T43+f/53tE5ga2O8kvg a4P5WEjXn8A4vnNSHRAHuj5qye0R8f2dqnNHH2znsw1ZMDuUERXn7mqrq6dqWiSq W2YFcT09X+2GlGNmhKY9VxhZH5szboc5IPWil9GpubtQ9cfz8ukLTaAwklS2wn1Y oZQx urn:mace:shibboleth:1.0:nameIdentifier Ryan Krebs shibboleth-admin@highwire.stanford.edu MIIDjzCCAvigAwIBAgIDE2llMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0 aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTAwNjE1MDgyMzA1WhcNMTEwNjE3MjIzMDEy WjCB9TEpMCcGA1UEBRMgc1dtTE9QaC9MR3VpdmFFV1U3dmJxTTExZERzbEdORFMx CzAJBgNVBAYTAlVTMSAwHgYDVQQKExdzaGliYm9sZXRoLmhpZ2h3aXJlLm9yZzET MBEGA1UECxMKR1QyNTQ2ODg0MzExMC8GA1UECxMoU2VlIHd3dy5nZW90cnVzdC5j b20vcmVzb3VyY2VzL2NwcyAoYykxMDEvMC0GA1UECxMmRG9tYWluIENvbnRyb2wg VmFsaWRhdGVkIC0gUXVpY2tTU0woUikxIDAeBgNVBAMTF3NoaWJib2xldGguaGln aHdpcmUub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCzSPN2X9bk5MHB f6mUZ/CvBKfgEn46C7GnyzhKuEhsmppVKCxPenesKPvSmxpWWz7/Iwqusq7WHR0Z yVz4qHAyNPmN3U9HHGUeDlU1FZF9xltfzwoYcHJrSDXkSMAoV654f7L4wesBVSjj nPzmbIJlSbKYBbDFY60+dRlSwpRJ1wIDAQABo4HSMIHPMB8GA1UdIwQYMBaAFEjm aPkr0rKV10fYIyAQTzOYkJ/UMA4GA1UdDwEB/wQEAwIE8DAdBgNVHSUEFjAUBggr BgEFBQcDAQYIKwYBBQUHAwIwIgYDVR0RBBswGYIXc2hpYmJvbGV0aC5oaWdod2ly ZS5vcmcwOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC5nZW90cnVzdC5jb20v Y3Jscy9zZWN1cmVjYS5jcmwwHQYDVR0OBBYEFKEHn+uq2uvGkQRbITzHGnUL2a7z MA0GCSqGSIb3DQEBBQUAA4GBAEPaX1aKQj5ePOM8rAGI+T43+f/53tE5ga2O8kvg a4P5WEjXn8A4vnNSHRAHuj5qye0R8f2dqnNHH2znsw1ZMDuUERXn7mqrq6dqWiSq W2YFcT09X+2GlGNmhKY9VxhZH5szboc5IPWil9GpubtQ9cfz8ukLTaAwklS2wn1Y oZQx MIIDjzCCAvigAwIBAgIDE2llMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0 aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTAwNjE1MDgyMzA1WhcNMTEwNjE3MjIzMDEy WjCB9TEpMCcGA1UEBRMgc1dtTE9QaC9MR3VpdmFFV1U3dmJxTTExZERzbEdORFMx CzAJBgNVBAYTAlVTMSAwHgYDVQQKExdzaGliYm9sZXRoLmhpZ2h3aXJlLm9yZzET MBEGA1UECxMKR1QyNTQ2ODg0MzExMC8GA1UECxMoU2VlIHd3dy5nZW90cnVzdC5j b20vcmVzb3VyY2VzL2NwcyAoYykxMDEvMC0GA1UECxMmRG9tYWluIENvbnRyb2wg VmFsaWRhdGVkIC0gUXVpY2tTU0woUikxIDAeBgNVBAMTF3NoaWJib2xldGguaGln aHdpcmUub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCzSPN2X9bk5MHB f6mUZ/CvBKfgEn46C7GnyzhKuEhsmppVKCxPenesKPvSmxpWWz7/Iwqusq7WHR0Z yVz4qHAyNPmN3U9HHGUeDlU1FZF9xltfzwoYcHJrSDXkSMAoV654f7L4wesBVSjj nPzmbIJlSbKYBbDFY60+dRlSwpRJ1wIDAQABo4HSMIHPMB8GA1UdIwQYMBaAFEjm aPkr0rKV10fYIyAQTzOYkJ/UMA4GA1UdDwEB/wQEAwIE8DAdBgNVHSUEFjAUBggr BgEFBQcDAQYIKwYBBQUHAwIwIgYDVR0RBBswGYIXc2hpYmJvbGV0aC5oaWdod2ly ZS5vcmcwOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC5nZW90cnVzdC5jb20v Y3Jscy9zZWN1cmVjYS5jcmwwHQYDVR0OBBYEFKEHn+uq2uvGkQRbITzHGnUL2a7z MA0GCSqGSIb3DQEBBQUAA4GBAEPaX1aKQj5ePOM8rAGI+T43+f/53tE5ga2O8kvg a4P5WEjXn8A4vnNSHRAHuj5qye0R8f2dqnNHH2znsw1ZMDuUERXn7mqrq6dqWiSq W2YFcT09X+2GlGNmhKY9VxhZH5szboc5IPWil9GpubtQ9cfz8ukLTaAwklS2wn1Y oZQx urn:mace:shibboleth:1.0:nameIdentifier Ryan Krebs shibboleth-admin@highwire.stanford.edu MIIDjzCCAvigAwIBAgIDE2llMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0 aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTAwNjE1MDgyMzA1WhcNMTEwNjE3MjIzMDEy WjCB9TEpMCcGA1UEBRMgc1dtTE9QaC9MR3VpdmFFV1U3dmJxTTExZERzbEdORFMx CzAJBgNVBAYTAlVTMSAwHgYDVQQKExdzaGliYm9sZXRoLmhpZ2h3aXJlLm9yZzET MBEGA1UECxMKR1QyNTQ2ODg0MzExMC8GA1UECxMoU2VlIHd3dy5nZW90cnVzdC5j b20vcmVzb3VyY2VzL2NwcyAoYykxMDEvMC0GA1UECxMmRG9tYWluIENvbnRyb2wg VmFsaWRhdGVkIC0gUXVpY2tTU0woUikxIDAeBgNVBAMTF3NoaWJib2xldGguaGln aHdpcmUub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCzSPN2X9bk5MHB f6mUZ/CvBKfgEn46C7GnyzhKuEhsmppVKCxPenesKPvSmxpWWz7/Iwqusq7WHR0Z yVz4qHAyNPmN3U9HHGUeDlU1FZF9xltfzwoYcHJrSDXkSMAoV654f7L4wesBVSjj nPzmbIJlSbKYBbDFY60+dRlSwpRJ1wIDAQABo4HSMIHPMB8GA1UdIwQYMBaAFEjm aPkr0rKV10fYIyAQTzOYkJ/UMA4GA1UdDwEB/wQEAwIE8DAdBgNVHSUEFjAUBggr BgEFBQcDAQYIKwYBBQUHAwIwIgYDVR0RBBswGYIXc2hpYmJvbGV0aC5oaWdod2ly ZS5vcmcwOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC5nZW90cnVzdC5jb20v Y3Jscy9zZWN1cmVjYS5jcmwwHQYDVR0OBBYEFKEHn+uq2uvGkQRbITzHGnUL2a7z MA0GCSqGSIb3DQEBBQUAA4GBAEPaX1aKQj5ePOM8rAGI+T43+f/53tE5ga2O8kvg a4P5WEjXn8A4vnNSHRAHuj5qye0R8f2dqnNHH2znsw1ZMDuUERXn7mqrq6dqWiSq W2YFcT09X+2GlGNmhKY9VxhZH5szboc5IPWil9GpubtQ9cfz8ukLTaAwklS2wn1Y oZQx MIIDjzCCAvigAwIBAgIDE2llMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0 aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTAwNjE1MDgyMzA1WhcNMTEwNjE3MjIzMDEy WjCB9TEpMCcGA1UEBRMgc1dtTE9QaC9MR3VpdmFFV1U3dmJxTTExZERzbEdORFMx CzAJBgNVBAYTAlVTMSAwHgYDVQQKExdzaGliYm9sZXRoLmhpZ2h3aXJlLm9yZzET MBEGA1UECxMKR1QyNTQ2ODg0MzExMC8GA1UECxMoU2VlIHd3dy5nZW90cnVzdC5j b20vcmVzb3VyY2VzL2NwcyAoYykxMDEvMC0GA1UECxMmRG9tYWluIENvbnRyb2wg VmFsaWRhdGVkIC0gUXVpY2tTU0woUikxIDAeBgNVBAMTF3NoaWJib2xldGguaGln aHdpcmUub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCzSPN2X9bk5MHB f6mUZ/CvBKfgEn46C7GnyzhKuEhsmppVKCxPenesKPvSmxpWWz7/Iwqusq7WHR0Z yVz4qHAyNPmN3U9HHGUeDlU1FZF9xltfzwoYcHJrSDXkSMAoV654f7L4wesBVSjj nPzmbIJlSbKYBbDFY60+dRlSwpRJ1wIDAQABo4HSMIHPMB8GA1UdIwQYMBaAFEjm aPkr0rKV10fYIyAQTzOYkJ/UMA4GA1UdDwEB/wQEAwIE8DAdBgNVHSUEFjAUBggr BgEFBQcDAQYIKwYBBQUHAwIwIgYDVR0RBBswGYIXc2hpYmJvbGV0aC5oaWdod2ly ZS5vcmcwOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC5nZW90cnVzdC5jb20v Y3Jscy9zZWN1cmVjYS5jcmwwHQYDVR0OBBYEFKEHn+uq2uvGkQRbITzHGnUL2a7z MA0GCSqGSIb3DQEBBQUAA4GBAEPaX1aKQj5ePOM8rAGI+T43+f/53tE5ga2O8kvg a4P5WEjXn8A4vnNSHRAHuj5qye0R8f2dqnNHH2znsw1ZMDuUERXn7mqrq6dqWiSq W2YFcT09X+2GlGNmhKY9VxhZH5szboc5IPWil9GpubtQ9cfz8ukLTaAwklS2wn1Y oZQx urn:mace:shibboleth:1.0:nameIdentifier Ryan Krebs shibboleth-admin@highwire.stanford.edu MIIDjzCCAvigAwIBAgIDE2llMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0 aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTAwNjE1MDgyMzA1WhcNMTEwNjE3MjIzMDEy WjCB9TEpMCcGA1UEBRMgc1dtTE9QaC9MR3VpdmFFV1U3dmJxTTExZERzbEdORFMx CzAJBgNVBAYTAlVTMSAwHgYDVQQKExdzaGliYm9sZXRoLmhpZ2h3aXJlLm9yZzET MBEGA1UECxMKR1QyNTQ2ODg0MzExMC8GA1UECxMoU2VlIHd3dy5nZW90cnVzdC5j b20vcmVzb3VyY2VzL2NwcyAoYykxMDEvMC0GA1UECxMmRG9tYWluIENvbnRyb2wg VmFsaWRhdGVkIC0gUXVpY2tTU0woUikxIDAeBgNVBAMTF3NoaWJib2xldGguaGln aHdpcmUub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCzSPN2X9bk5MHB f6mUZ/CvBKfgEn46C7GnyzhKuEhsmppVKCxPenesKPvSmxpWWz7/Iwqusq7WHR0Z yVz4qHAyNPmN3U9HHGUeDlU1FZF9xltfzwoYcHJrSDXkSMAoV654f7L4wesBVSjj nPzmbIJlSbKYBbDFY60+dRlSwpRJ1wIDAQABo4HSMIHPMB8GA1UdIwQYMBaAFEjm aPkr0rKV10fYIyAQTzOYkJ/UMA4GA1UdDwEB/wQEAwIE8DAdBgNVHSUEFjAUBggr BgEFBQcDAQYIKwYBBQUHAwIwIgYDVR0RBBswGYIXc2hpYmJvbGV0aC5oaWdod2ly ZS5vcmcwOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC5nZW90cnVzdC5jb20v Y3Jscy9zZWN1cmVjYS5jcmwwHQYDVR0OBBYEFKEHn+uq2uvGkQRbITzHGnUL2a7z MA0GCSqGSIb3DQEBBQUAA4GBAEPaX1aKQj5ePOM8rAGI+T43+f/53tE5ga2O8kvg a4P5WEjXn8A4vnNSHRAHuj5qye0R8f2dqnNHH2znsw1ZMDuUERXn7mqrq6dqWiSq W2YFcT09X+2GlGNmhKY9VxhZH5szboc5IPWil9GpubtQ9cfz8ukLTaAwklS2wn1Y oZQx MIIDjzCCAvigAwIBAgIDE2llMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0 aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTAwNjE1MDgyMzA1WhcNMTEwNjE3MjIzMDEy WjCB9TEpMCcGA1UEBRMgc1dtTE9QaC9MR3VpdmFFV1U3dmJxTTExZERzbEdORFMx CzAJBgNVBAYTAlVTMSAwHgYDVQQKExdzaGliYm9sZXRoLmhpZ2h3aXJlLm9yZzET MBEGA1UECxMKR1QyNTQ2ODg0MzExMC8GA1UECxMoU2VlIHd3dy5nZW90cnVzdC5j b20vcmVzb3VyY2VzL2NwcyAoYykxMDEvMC0GA1UECxMmRG9tYWluIENvbnRyb2wg VmFsaWRhdGVkIC0gUXVpY2tTU0woUikxIDAeBgNVBAMTF3NoaWJib2xldGguaGln aHdpcmUub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCzSPN2X9bk5MHB f6mUZ/CvBKfgEn46C7GnyzhKuEhsmppVKCxPenesKPvSmxpWWz7/Iwqusq7WHR0Z yVz4qHAyNPmN3U9HHGUeDlU1FZF9xltfzwoYcHJrSDXkSMAoV654f7L4wesBVSjj nPzmbIJlSbKYBbDFY60+dRlSwpRJ1wIDAQABo4HSMIHPMB8GA1UdIwQYMBaAFEjm aPkr0rKV10fYIyAQTzOYkJ/UMA4GA1UdDwEB/wQEAwIE8DAdBgNVHSUEFjAUBggr BgEFBQcDAQYIKwYBBQUHAwIwIgYDVR0RBBswGYIXc2hpYmJvbGV0aC5oaWdod2ly ZS5vcmcwOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC5nZW90cnVzdC5jb20v Y3Jscy9zZWN1cmVjYS5jcmwwHQYDVR0OBBYEFKEHn+uq2uvGkQRbITzHGnUL2a7z MA0GCSqGSIb3DQEBBQUAA4GBAEPaX1aKQj5ePOM8rAGI+T43+f/53tE5ga2O8kvg a4P5WEjXn8A4vnNSHRAHuj5qye0R8f2dqnNHH2znsw1ZMDuUERXn7mqrq6dqWiSq W2YFcT09X+2GlGNmhKY9VxhZH5szboc5IPWil9GpubtQ9cfz8ukLTaAwklS2wn1Y oZQx urn:mace:shibboleth:1.0:nameIdentifier Ryan Krebs shibboleth-admin@highwire.stanford.edu MIIE8TCCA9mgAwIBAgIQIGC5kZctP7NQmNlXSbT03jANBgkqhkiG9w0BAQUFADCB sDELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1c2Ug YXQgaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYSAoYykwNTEqMCgGA1UEAxMh VmVyaVNpZ24gQ2xhc3MgMyBTZWN1cmUgU2VydmVyIENBMB4XDTA5MDMyNDAwMDAw MFoXDTEwMDMyNDIzNTk1OVowZTELMAkGA1UEBhMCVVMxDTALBgNVBAgTBE9oaW8x EzARBgNVBAcUCk1pYW1pc2J1cmcxFDASBgNVBAoUC0xFWElTLU5FWElTMRwwGgYD VQQDFBNzaGliLmxleGlzbmV4aXMuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB iQKBgQCtEWywD65HP4J3eQtamqp7vl7iNhs2JJkQtfK55WZY19C6+HpZz275ejSZ xLpKUNvNgtMKN3zzccyOa/8rNPfQNKCa571jxSES/2VxJBXTVSU5z544fWxuEEfa CqQwmFs5agik5fQMFErj8z246S+A+/Aghus9ubiFkg0wOUMCHwIDAQABo4IB0zCC Ac8wCQYDVR0TBAIwADALBgNVHQ8EBAMCBaAwRAYDVR0fBD0wOzA5oDegNYYzaHR0 cDovL1NWUlNlY3VyZS1jcmwudmVyaXNpZ24uY29tL1NWUlNlY3VyZTIwMDUuY3Js MEQGA1UdIAQ9MDswOQYLYIZIAYb4RQEHFwMwKjAoBggrBgEFBQcCARYcaHR0cHM6 Ly93d3cudmVyaXNpZ24uY29tL3JwYTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB BQUHAwIwHwYDVR0jBBgwFoAUb+yvoN2KpO/1KhBnLT9VgrzX7yUweQYIKwYBBQUH AQEEbTBrMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC52ZXJpc2lnbi5jb20wQwYI KwYBBQUHMAKGN2h0dHA6Ly9TVlJTZWN1cmUtYWlhLnZlcmlzaWduLmNvbS9TVlJT ZWN1cmUyMDA1LWFpYS5jZXIwbgYIKwYBBQUHAQwEYjBgoV6gXDBaMFgwVhYJaW1h Z2UvZ2lmMCEwHzAHBgUrDgMCGgQUS2u5KJYGDLvQUjibKaxLB4shBRgwJhYkaHR0 cDovL2xvZ28udmVyaXNpZ24uY29tL3ZzbG9nbzEuZ2lmMA0GCSqGSIb3DQEBBQUA A4IBAQBCbTV4RxQbQoP2b5WEm8T4jMG4ZTUOkclQ5RV3vJJbKb26l2FiHvD2HD9C QLbPiLgjXMaB9CdogUX1BwZVEqsp2+EiJemlQQX5oSNLGizIQxol3ctwvnUHfNFD +/NVCWJ3zf3B4xptsK+lq9TThBQrjOy5Q2yNSAQxjX23g+PA3t6MG6tLh4SLLXMH HkKFBISZwhJ3rOEpTjq5mNviZ/rxlRf0OItOr9GurNvbAw6Yt70PfxzRx0rreEA8 8M5whxz8pMzaSS11t3GzV2I/5J7fv9XIjZzOToVCplm9tax31pcVnnIcyzP7jl3V E0KPgKaVC0S8Zu7p2aREr7lKAfTM urn:mace:shibboleth:1.0:nameIdentifier Brian Rambacher brian.rambacher@lexisnexis.com Brian Rambacher brian.rambacher@lexisnexis.com www.lextenso.fr CN=www.lextenso.fr,O=LEXTENSO,L=PARIS,ST=Ile-de-France,C=FR MIID4TCCA0qgAwIBAgIQMn6c2AcZZYe54T62pwSWJjANBgkqhkiG9w0BAQUFADCB zjELMAkGA1UEBhMCWkExFTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJ Q2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UE CxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhh d3RlIFByZW1pdW0gU2VydmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNl cnZlckB0aGF3dGUuY29tMB4XDTEwMDEyODAwMDAwMFoXDTEyMDEyODIzNTk1OVow YjELMAkGA1UEBhMCRlIxFjAUBgNVBAgTDUlsZS1kZS1GcmFuY2UxDjAMBgNVBAcU BVBBUklTMREwDwYDVQQKFAhMRVhURU5TTzEYMBYGA1UEAxQPd3d3LmxleHRlbnNv LmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6v2mmgYYqC770tw3 gp17b9aRWTNPgedcbGIz/l+ZuMHbK+S0bZMEGP/Yz0vl+2yVr0d2B/nLgKas/LzN vCA8kg1TGrDiaELn4+2em2rB65akGObkjquQMADsPsadfjKBO4EFlKbnmwbDaLeu 4DUDVButVa4ZRwGcPPP1fI7Tfmxe9wYAKD3JzXBgZpymWsAIqrqDwiYQnfMCvp0T f3/wUyymdySLSUzSalKasPdAAur+KRgZagVwAGvSOjGuPN6zI7IhQxdFq4bgG/15 8Cm7uwLrXo6ImU3UUq7IVIL+1r/WS/CwqJw7oaSBFfyaC8nCE3DCedTdtU9/brVV QSJl5QIDAQABo4GmMIGjMAwGA1UdEwEB/wQCMAAwQAYDVR0fBDkwNzA1oDOgMYYv aHR0cDovL2NybC50aGF3dGUuY29tL1RoYXd0ZVNlcnZlclByZW1pdW1DQS5jcmww HQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMDIGCCsGAQUFBwEBBCYwJDAi BggrBgEFBQcwAYYWaHR0cDovL29jc3AudGhhd3RlLmNvbTANBgkqhkiG9w0BAQUF AAOBgQCOA2/PBpff6PBSat3IUGiqy7zj7e/UTPZvi+72HMAuBgMls4RcdzzG57Zl bnGmjnJyB+x8/vr8MBWNmEnia/XJdeTNdxYlDlChsH+CfmVbxy0BdrzVrJwt6Y/M 1oaOnZ59MSH2ecsZwT1w/fk8Qgfl/T1yDInjLQATWijXLgmpgA== www.lextenso.fr CN=www.lextenso.fr,O=LEXTENSO,L=PARIS,ST=Ile-de-France,C=FR MIID4TCCA0qgAwIBAgIQMn6c2AcZZYe54T62pwSWJjANBgkqhkiG9w0BAQUFADCB zjELMAkGA1UEBhMCWkExFTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJ Q2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UE CxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhh d3RlIFByZW1pdW0gU2VydmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNl cnZlckB0aGF3dGUuY29tMB4XDTEwMDEyODAwMDAwMFoXDTEyMDEyODIzNTk1OVow YjELMAkGA1UEBhMCRlIxFjAUBgNVBAgTDUlsZS1kZS1GcmFuY2UxDjAMBgNVBAcU BVBBUklTMREwDwYDVQQKFAhMRVhURU5TTzEYMBYGA1UEAxQPd3d3LmxleHRlbnNv LmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6v2mmgYYqC770tw3 gp17b9aRWTNPgedcbGIz/l+ZuMHbK+S0bZMEGP/Yz0vl+2yVr0d2B/nLgKas/LzN vCA8kg1TGrDiaELn4+2em2rB65akGObkjquQMADsPsadfjKBO4EFlKbnmwbDaLeu 4DUDVButVa4ZRwGcPPP1fI7Tfmxe9wYAKD3JzXBgZpymWsAIqrqDwiYQnfMCvp0T f3/wUyymdySLSUzSalKasPdAAur+KRgZagVwAGvSOjGuPN6zI7IhQxdFq4bgG/15 8Cm7uwLrXo6ImU3UUq7IVIL+1r/WS/CwqJw7oaSBFfyaC8nCE3DCedTdtU9/brVV QSJl5QIDAQABo4GmMIGjMAwGA1UdEwEB/wQCMAAwQAYDVR0fBDkwNzA1oDOgMYYv aHR0cDovL2NybC50aGF3dGUuY29tL1RoYXd0ZVNlcnZlclByZW1pdW1DQS5jcmww HQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMDIGCCsGAQUFBwEBBCYwJDAi BggrBgEFBQcwAYYWaHR0cDovL29jc3AudGhhd3RlLmNvbTANBgkqhkiG9w0BAQUF AAOBgQCOA2/PBpff6PBSat3IUGiqy7zj7e/UTPZvi+72HMAuBgMls4RcdzzG57Zl bnGmjnJyB+x8/vr8MBWNmEnia/XJdeTNdxYlDlChsH+CfmVbxy0BdrzVrJwt6Y/M 1oaOnZ59MSH2ecsZwT1w/fk8Qgfl/T1yDInjLQATWijXLgmpgA== shibboleth.highwire.org CN=shibboleth.highwire.org,OU=Domain Control Validated - QuickSSL(R),OU=See www.geotrust.com/resources/cps (c)10,OU=GT25468843,O=shibboleth.highwire.org,C=US,serialNumber=sWmLOPh/LGuivaEWU7vbqM11dDslGNDS MIIDjzCCAvigAwIBAgIDE2llMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0 aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTAwNjE1MDgyMzA1WhcNMTEwNjE3MjIzMDEy WjCB9TEpMCcGA1UEBRMgc1dtTE9QaC9MR3VpdmFFV1U3dmJxTTExZERzbEdORFMx CzAJBgNVBAYTAlVTMSAwHgYDVQQKExdzaGliYm9sZXRoLmhpZ2h3aXJlLm9yZzET MBEGA1UECxMKR1QyNTQ2ODg0MzExMC8GA1UECxMoU2VlIHd3dy5nZW90cnVzdC5j b20vcmVzb3VyY2VzL2NwcyAoYykxMDEvMC0GA1UECxMmRG9tYWluIENvbnRyb2wg VmFsaWRhdGVkIC0gUXVpY2tTU0woUikxIDAeBgNVBAMTF3NoaWJib2xldGguaGln aHdpcmUub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCzSPN2X9bk5MHB f6mUZ/CvBKfgEn46C7GnyzhKuEhsmppVKCxPenesKPvSmxpWWz7/Iwqusq7WHR0Z yVz4qHAyNPmN3U9HHGUeDlU1FZF9xltfzwoYcHJrSDXkSMAoV654f7L4wesBVSjj nPzmbIJlSbKYBbDFY60+dRlSwpRJ1wIDAQABo4HSMIHPMB8GA1UdIwQYMBaAFEjm aPkr0rKV10fYIyAQTzOYkJ/UMA4GA1UdDwEB/wQEAwIE8DAdBgNVHSUEFjAUBggr BgEFBQcDAQYIKwYBBQUHAwIwIgYDVR0RBBswGYIXc2hpYmJvbGV0aC5oaWdod2ly ZS5vcmcwOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC5nZW90cnVzdC5jb20v Y3Jscy9zZWN1cmVjYS5jcmwwHQYDVR0OBBYEFKEHn+uq2uvGkQRbITzHGnUL2a7z MA0GCSqGSIb3DQEBBQUAA4GBAEPaX1aKQj5ePOM8rAGI+T43+f/53tE5ga2O8kvg a4P5WEjXn8A4vnNSHRAHuj5qye0R8f2dqnNHH2znsw1ZMDuUERXn7mqrq6dqWiSq W2YFcT09X+2GlGNmhKY9VxhZH5szboc5IPWil9GpubtQ9cfz8ukLTaAwklS2wn1Y oZQx shibboleth.highwire.org CN=shibboleth.highwire.org,OU=Domain Control Validated - QuickSSL(R),OU=See www.geotrust.com/resources/cps (c)10,OU=GT25468843,O=shibboleth.highwire.org,C=US,serialNumber=sWmLOPh/LGuivaEWU7vbqM11dDslGNDS MIIDjzCCAvigAwIBAgIDE2llMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0 aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTAwNjE1MDgyMzA1WhcNMTEwNjE3MjIzMDEy WjCB9TEpMCcGA1UEBRMgc1dtTE9QaC9MR3VpdmFFV1U3dmJxTTExZERzbEdORFMx CzAJBgNVBAYTAlVTMSAwHgYDVQQKExdzaGliYm9sZXRoLmhpZ2h3aXJlLm9yZzET MBEGA1UECxMKR1QyNTQ2ODg0MzExMC8GA1UECxMoU2VlIHd3dy5nZW90cnVzdC5j b20vcmVzb3VyY2VzL2NwcyAoYykxMDEvMC0GA1UECxMmRG9tYWluIENvbnRyb2wg VmFsaWRhdGVkIC0gUXVpY2tTU0woUikxIDAeBgNVBAMTF3NoaWJib2xldGguaGln aHdpcmUub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCzSPN2X9bk5MHB f6mUZ/CvBKfgEn46C7GnyzhKuEhsmppVKCxPenesKPvSmxpWWz7/Iwqusq7WHR0Z yVz4qHAyNPmN3U9HHGUeDlU1FZF9xltfzwoYcHJrSDXkSMAoV654f7L4wesBVSjj nPzmbIJlSbKYBbDFY60+dRlSwpRJ1wIDAQABo4HSMIHPMB8GA1UdIwQYMBaAFEjm aPkr0rKV10fYIyAQTzOYkJ/UMA4GA1UdDwEB/wQEAwIE8DAdBgNVHSUEFjAUBggr BgEFBQcDAQYIKwYBBQUHAwIwIgYDVR0RBBswGYIXc2hpYmJvbGV0aC5oaWdod2ly ZS5vcmcwOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC5nZW90cnVzdC5jb20v Y3Jscy9zZWN1cmVjYS5jcmwwHQYDVR0OBBYEFKEHn+uq2uvGkQRbITzHGnUL2a7z MA0GCSqGSIb3DQEBBQUAA4GBAEPaX1aKQj5ePOM8rAGI+T43+f/53tE5ga2O8kvg a4P5WEjXn8A4vnNSHRAHuj5qye0R8f2dqnNHH2znsw1ZMDuUERXn7mqrq6dqWiSq W2YFcT09X+2GlGNmhKY9VxhZH5szboc5IPWil9GpubtQ9cfz8ukLTaAwklS2wn1Y oZQx mines-paristech.fr MIIDUzCCAjugAwIBAgIULpiQTz0SaR3yYl4od7IxCNrwBzUwDQYJKoZIhvcNAQEF BQAwJTEjMCEGA1UEAxMaYXV0aC5taW5lcy1wYXJpc3RlY2guZnI6ODAwHhcNMTAw NjMwMDg0NTUzWhcNMzAwNjMwMDg0NTUzWjAlMSMwIQYDVQQDExphdXRoLm1pbmVz LXBhcmlzdGVjaC5mcjo4MDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB AMgwMOQgpHeIUXIPrAidenRWJoNDtBbBtJewLYBVXNcjlw48JjYUe4kVAibhvpoB GtT/5LDpL7b0f3Dcn79TK1f71KO1NyTReRfE8hahq+9nSfUf9W0g7AE/wzEt/4s2 oQmhxIaLo/y4d8Jm2gdweX7Zru+e8DmdBfH8XVHEFrleY+iZfHM/RH/uc9hN3XrD DFWojw8k+uFBU9MkT8Lw3/qPrCxbMEIcpvrkyDFYiCidJJf9kkSZOBFbfoXMwpyw 6AUrfax3gCUtN55qexEt/kZlbZr/RWCWRXDlevEHoNm/96j9PntgRFahUALUyhxQ BbAx1yzWHRsT5hlPHihht1sCAwEAAaN7MHkwWAYDVR0RBFEwT4IaYXV0aC5taW5l cy1wYXJpc3RlY2guZnI6ODCGMWh0dHBzOi8vYXV0aC5taW5lcy1wYXJpc3RlY2gu ZnI6ODAvaWRwL3NoaWJib2xldGgwHQYDVR0OBBYEFEzaglAXYAkaW5DIa13RKccd GCGNMA0GCSqGSIb3DQEBBQUAA4IBAQC81N/3UxzYjfCOJPaGkaJmTDkIXPvv45ym TCQlISY68bvtWQlf4yGHKW3aLuPZxoCJoGDcYZi4BF2QEPmvQ307GAqJzga3/FlE m6QhFpeYnyX6Wa5OEw/EkPj5yMxnymcEO0mWO/oYUnlzmy7yvUR7M+q/wRE2lKHP RDLESfEaYEQTniavE4zHDQPTfV0L4tmMMuZ1HrOU7w4kxw6QbHbF74GOC8YCRTDR lu66L8LI4yrW5jPq7gDBHSoOwFKbvssCjAdA4qiIU4LkBBspnboZZIP4uNTyp+qg SWg2P9PgjSZlwDZkaVgJlTTZJw1mYNCrsOiWjaa7c18O8gcBYmsL urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient MINES ParisTech MINES ParisTech http://unknown.site.com Aurélien VEILLAS federation@mines-paristech.fr Jose-Marcio Martins da Cruz federation@mines-paristech.fr DefaultKey atlases.muni.cz CN=atlases.muni.cz,O=Masaryk University,DC=cesnet-ca,DC=cz MIIEWTCCA0GgAwIBAgIEQrNNlDANBgkqhkiG9w0BAQUFADBDMRIwEAYKCZImiZPy LGQBGRYCY3oxGTAXBgoJkiaJk/IsZAEZFgljZXNuZXQtY2ExEjAQBgNVBAMTCUNF U05FVCBDQTAeFw0wODA2MTEwNzIwMjFaFw0wOTA3MTEwNzUwMjFaMGYxEjAQBgoJ kiaJk/IsZAEZFgJjejEZMBcGCgmSJomT8ixkARkWCWNlc25ldC1jYTEbMBkGA1UE ChMSTWFzYXJ5ayBVbml2ZXJzaXR5MRgwFgYDVQQDEw9hdGxhc2VzLm11bmkuY3ow gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALCMA7FBuXcnu68dT+OKpRSNcee+ bsNyJu0mGyGHSPrfd/FkDWvUov0Y5a3eHf81AfYEgvcTE7riWdb6wCYPLGmqX5R8 lhg29NoBFS6Vzlh47G1v6IOBSrTNVoJE+KiooMvvIpA1xP4K4uITTcP68zuZQBhQ RrCIxLu44rcB8yfNAgMBAAGjggG0MIIBsDAOBgNVHQ8BAf8EBAMCBaAwGQYDVR0g BBIwEDAOBgwrBgEEAb55AQICAgAwNAYDVR0RBC0wK4ESa291cmlsQGljcy5tdW5p LmN6gg9hdGxhc2VzLm11bmkuY3qHBJP7C6AwggELBgNVHR8EggECMIH/MFqgWKBW pFQwUjESMBAGCgmSJomT8ixkARkWAmN6MRkwFwYKCZImiZPyLGQBGRYJY2VzbmV0 LWNhMRIwEAYDVQQDEwlDRVNORVQgQ0ExDTALBgNVBAMTBENSTDMwgaCggZ2ggZqG Qmh0dHA6Ly93d3cuY2VzbmV0LmN6L3BraS9jcmwvY249Q0VTTkVUJTIwQ0EsZGM9 Y2VzbmV0LWNhLGRjPWN6LmNybIZUbGRhcDovL2xkYXAuY2VzbmV0LWNhLmN6L2Nu PUNFU05FVCUyMENBLGRjPWNlc25ldC1jYSxkYz1jej9jZXJ0aWZpY2F0ZVJldm9j YXRpb25MaXN0MB8GA1UdIwQYMBaAFC9sBcNRJqyvOZw+ODXdUikngMX1MB0GA1Ud DgQWBBS/UmHwtjTXQCwmnLelbFVPtmFlDzANBgkqhkiG9w0BAQUFAAOCAQEAnwPc 7RH4IxhK5ipcWb23SMO8MwBIzd9SFgLR9VIG481+zEk+1LVYC25ikMJ7NL59+xpc YgZ11tDOL1S39CUHwXBF0DZNeO3DZlUjtgEgnWsM2vDRnWJGjRrvU/NHaKFoZ4Om WVtuinyqW2DI95Ud0/XPVHHE0rUbz52cJYlZHqfS/SAiLCsibLR+2EXFQKOlq3bx 3tCYGHrkDvrIrDzEdOFip2Vg2nBFfpa1Zpv3H1R+bfdDIFjslmbe8yeudvf2xoIz pb+YES3Dsl4kBL4tX8vbBtkmrhizFNGhYVaclugl2OUeHM1IxmPyYaVIq25k+iIW OdNCv2cJUkS/Mj8pMA== atlases.muni.cz atlases.muni.cz-new CN=atlases.muni.cz,O=Masaryk University,DC=cesnet-ca,DC=cz MIIEWTCCA0GgAwIBAgIEQrNxVjANBgkqhkiG9w0BAQUFADBDMRIwEAYKCZImiZPy LGQBGRYCY3oxGTAXBgoJkiaJk/IsZAEZFgljZXNuZXQtY2ExEjAQBgNVBAMTCUNF U05FVCBDQTAeFw0wOTA2MTgwODU5MjVaFw0xMDA3MTgwOTI5MjVaMGYxEjAQBgoJ kiaJk/IsZAEZFgJjejEZMBcGCgmSJomT8ixkARkWCWNlc25ldC1jYTEbMBkGA1UE ChMSTWFzYXJ5ayBVbml2ZXJzaXR5MRgwFgYDVQQDEw9hdGxhc2VzLm11bmkuY3ow gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALjZMT6Xt5ZM8WkUdWZ5DWeJzYpu ozchG5dYqq0cOV0fsPd5LpiALLPT//W7pm2r53a1/DNmbqZrk8et+/JuLsjOQy0i GO4yR3t0i056OMD9Y5Fo5DQT7T722NCWhocEkgmj+nZIAoPQ7DsIKlU6mSguAkdb y/sa1Gxu0ZIkRm6rAgMBAAGjggG0MIIBsDAOBgNVHQ8BAf8EBAMCBaAwGQYDVR0g BBIwEDAOBgwrBgEEAb55AQICAgAwNAYDVR0RBC0wK4ESa291cmlsQGljcy5tdW5p LmN6gg9hdGxhc2VzLm11bmkuY3qHBJP7C6AwggELBgNVHR8EggECMIH/MFqgWKBW pFQwUjESMBAGCgmSJomT8ixkARkWAmN6MRkwFwYKCZImiZPyLGQBGRYJY2VzbmV0 LWNhMRIwEAYDVQQDEwlDRVNORVQgQ0ExDTALBgNVBAMTBENSTDQwgaCggZ2ggZqG Qmh0dHA6Ly93d3cuY2VzbmV0LmN6L3BraS9jcmwvY249Q0VTTkVUJTIwQ0EsZGM9 Y2VzbmV0LWNhLGRjPWN6LmNybIZUbGRhcDovL2xkYXAuY2VzbmV0LWNhLmN6L2Nu PUNFU05FVCUyMENBLGRjPWNlc25ldC1jYSxkYz1jej9jZXJ0aWZpY2F0ZVJldm9j YXRpb25MaXN0MB8GA1UdIwQYMBaAFC9sBcNRJqyvOZw+ODXdUikngMX1MB0GA1Ud DgQWBBRqlY2ZZ+ume/u40jXTvXRwUVRnfzANBgkqhkiG9w0BAQUFAAOCAQEAy/zY ix082lbRuTeQuI32iDKNSQT0XH0gMblHMnv5ldru7oCSwM4fC+EP3CcfShA2xVbJ zyKMqHI7pM7r7CrBB24OHV/MQ+tBdo8LoBG3xQByYaE5AS6jmTxHg4p/bHfgBM+K +bQWmTAtwDb5+NnfKoI141bmvI3Vq2q3HSWhu6+SQV4UbtKpg5xGg1q4vCg2UoLN /f/2fKz5d2X1zMutHIa58Qt+dz84oG3OwBN6db1sF8H3mu4tJ9UpF1oabcz3m8R8 dQTMQo3cVb+ob0k5NRSOrZaPFvsYgBh2wNdj0Sp+zjd/NPDAj5j4iMQlhq1IEgPk 4IxKAfvQVoUyjHs+zg== atlases.muni.cz atlasesTCS CN=atlases.muni.cz,O=Masaryk University,C=CZ MIIEaTCCA1GgAwIBAgIRAJWodRv0wQ1r0LBtit4bdAYwDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0wOTEyMTcwMDAwMDBaFw0xMjEyMTYyMzU5NTlaMEQxCzAJBgNV BAYTAkNaMRswGQYDVQQKExJNYXNhcnlrIFVuaXZlcnNpdHkxGDAWBgNVBAMTD2F0 bGFzZXMubXVuaS5jejCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALv0 wLkG+KB7so18gsPG13xP6JsN+wXmV2PIgPjVdiIU3ab1d44o3zvTQbfML1jLanTi fpgTp4GBc7Sk+Ut5r8fmO4b2oWWPmVvRVTQTAefxOJ8EcaLkP2KIKgoA4PrxBU0R ummyB9ory7iG3zyUwXv6UE8B43V9xT9r11JTMVu747jWspq6tsfYsmjYDWGnJPjU ULPZoh3t26PlM5IK/AIMr+zs5HQJu/XFE2fOjZVBRkWmmzmWVSndZx9QKqOcTypd 1M+5I6btXrtMlRX3e/YyQ0WiHK/6Y80N8bgujoyt7EM+Gr4vAvTO0OVYNto8aW1m JxwP5bv80KLhTKSF4+ECAwEAAaOCAWIwggFeMB8GA1UdIwQYMBaAFAy9k2gM896r o0lrKzdXR+qQ47ntMB0GA1UdDgQWBBSAvdbx2HeGy16j42B6grP/zb/G9TAOBgNV HQ8BAf8EBAMCBaAwDAYDVR0TAQH/BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYI KwYBBQUHAwIwGAYDVR0gBBEwDzANBgsrBgEEAbIxAQICHTA6BgNVHR8EMzAxMC+g LaArhilodHRwOi8vY3JsLnRjcy50ZXJlbmEub3JnL1RFUkVOQVNTTENBLmNybDBt BggrBgEFBQcBAQRhMF8wNQYIKwYBBQUHMAKGKWh0dHA6Ly9jcnQudGNzLnRlcmVu YS5vcmcvVEVSRU5BU1NMQ0EuY3J0MCYGCCsGAQUFBzABhhpodHRwOi8vb2NzcC50 Y3MudGVyZW5hLm9yZzAaBgNVHREEEzARgg9hdGxhc2VzLm11bmkuY3owDQYJKoZI hvcNAQEFBQADggEBAA6at/39C8yYR/XlQ2BLya6my2j9xkGylg+8T7rT1ZL2Ckda l6YaZjckWUh/vdSa6M02XVNq9lljb+i97F2CbSUV1HZNy+f2NwUXiUieZQtdpFIv rshymOmUFcqcuyk1e68krGW2L1pthnFD/jHC+6RKvJakn5ggP/3hLYUwaeOYo0mS nel/jb1K+g2X0QkeKTx6Cs/Jpl1jRpzkC7C3gQHmbHufFudaLqP8JjkMaQBivnlC VoXIJzftiwHK2SXx7rH6CNrbfxGeL1C0Rg2RA3jDNRlFI2Y+lIMxiHKNjRIa/JGX Qzh9bTGuFgSX09pFNRoQ77C3Fq3WH3ychuHUyeo= atlases.muni.cz atlasesSelf https://atlases.muni.cz/shibboleth CN=atlases.muni.cz MIIDGDCCAgCgAwIBAgIJALkChkWt/z1OMA0GCSqGSIb3DQEBBQUAMBoxGDAWBgNV BAMTD2F0bGFzZXMubXVuaS5jejAeFw0xMDEwMDcxMTQ2NDVaFw0xMzEwMDcxMTQ2 NDVaMBoxGDAWBgNVBAMTD2F0bGFzZXMubXVuaS5jejCCASIwDQYJKoZIhvcNAQEB BQADggEPADCCAQoCggEBAOTs3HhxPjALxORqKKhNStTsnxHRmmgfuOpD+PffbYfq alNKnaewsW8/7q1+kaX05X1/svdB5xrnQvLoR1K2W149TCrYdSxv1WW9EZJyUpgu WCF3p+HrKqa2ghZVbp2uSThQ50OYa0JFYrMps4CyWG2Wodrb52cAg6BG+SPFIwYE CVIOH455WKKf8Z86dlT5h2uaACTOEMFpG3UnFVAiLWfSgTxcvi/gKuYFtL8XNCxq 1xT5PXHC2nvWmGo8qUUQhxfxhUTILoj2n+Sxr0h/mCRzIDrIwua/lGPWcIL6cF3X /z1DbtUHvn2U/ok2mY2EvWsgDQzbiUkK38ilDFqQyF0CAwEAAaNhMF8wPgYDVR0R BDcwNYIPYXRsYXNlcy5tdW5pLmN6hiJodHRwczovL2F0bGFzZXMubXVuaS5jei9z aGliYm9sZXRoMB0GA1UdDgQWBBR5gQjbmYdw1Q6PkHxIyfEkegtU6jANBgkqhkiG 9w0BAQUFAAOCAQEAulXyvD0hIrqDdDh/CNncTXiVf4HUouCVN2/MiDVItTEoWEyp A0krzYitetlGTQLujJJFOuCehzuF5pQK3V41Qmf/tj1iRz4ox4S9oBl+JfdJ9pCm F1z83ioQqhVRS/Huvmr1ozOFMbnKpMaU5m/T/C5FD1OoB7k8KdLcvHPHWq8tJgab yNn8bEghTAa8qC7GYieg7X6ZpRfPN5wK4U9POnYmHKod4IqbZd9Q7yCJYNKfxp2y PIFp8E0dbQvOnE2+4VQZilfAFQ6NXOORxQDa2CawrT13TE2HdvMU1AJTbG4FCdWH r+eb1o0h3jTHWzkBWafsZOaeUJMHpTqy4IcPpw== DefaultKey atlases.muni.cz CN=atlases.muni.cz,O=Masaryk University,DC=cesnet-ca,DC=cz MIIEWTCCA0GgAwIBAgIEQrNNlDANBgkqhkiG9w0BAQUFADBDMRIwEAYKCZImiZPy LGQBGRYCY3oxGTAXBgoJkiaJk/IsZAEZFgljZXNuZXQtY2ExEjAQBgNVBAMTCUNF U05FVCBDQTAeFw0wODA2MTEwNzIwMjFaFw0wOTA3MTEwNzUwMjFaMGYxEjAQBgoJ kiaJk/IsZAEZFgJjejEZMBcGCgmSJomT8ixkARkWCWNlc25ldC1jYTEbMBkGA1UE ChMSTWFzYXJ5ayBVbml2ZXJzaXR5MRgwFgYDVQQDEw9hdGxhc2VzLm11bmkuY3ow gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALCMA7FBuXcnu68dT+OKpRSNcee+ bsNyJu0mGyGHSPrfd/FkDWvUov0Y5a3eHf81AfYEgvcTE7riWdb6wCYPLGmqX5R8 lhg29NoBFS6Vzlh47G1v6IOBSrTNVoJE+KiooMvvIpA1xP4K4uITTcP68zuZQBhQ RrCIxLu44rcB8yfNAgMBAAGjggG0MIIBsDAOBgNVHQ8BAf8EBAMCBaAwGQYDVR0g BBIwEDAOBgwrBgEEAb55AQICAgAwNAYDVR0RBC0wK4ESa291cmlsQGljcy5tdW5p LmN6gg9hdGxhc2VzLm11bmkuY3qHBJP7C6AwggELBgNVHR8EggECMIH/MFqgWKBW pFQwUjESMBAGCgmSJomT8ixkARkWAmN6MRkwFwYKCZImiZPyLGQBGRYJY2VzbmV0 LWNhMRIwEAYDVQQDEwlDRVNORVQgQ0ExDTALBgNVBAMTBENSTDMwgaCggZ2ggZqG Qmh0dHA6Ly93d3cuY2VzbmV0LmN6L3BraS9jcmwvY249Q0VTTkVUJTIwQ0EsZGM9 Y2VzbmV0LWNhLGRjPWN6LmNybIZUbGRhcDovL2xkYXAuY2VzbmV0LWNhLmN6L2Nu PUNFU05FVCUyMENBLGRjPWNlc25ldC1jYSxkYz1jej9jZXJ0aWZpY2F0ZVJldm9j YXRpb25MaXN0MB8GA1UdIwQYMBaAFC9sBcNRJqyvOZw+ODXdUikngMX1MB0GA1Ud DgQWBBS/UmHwtjTXQCwmnLelbFVPtmFlDzANBgkqhkiG9w0BAQUFAAOCAQEAnwPc 7RH4IxhK5ipcWb23SMO8MwBIzd9SFgLR9VIG481+zEk+1LVYC25ikMJ7NL59+xpc YgZ11tDOL1S39CUHwXBF0DZNeO3DZlUjtgEgnWsM2vDRnWJGjRrvU/NHaKFoZ4Om WVtuinyqW2DI95Ud0/XPVHHE0rUbz52cJYlZHqfS/SAiLCsibLR+2EXFQKOlq3bx 3tCYGHrkDvrIrDzEdOFip2Vg2nBFfpa1Zpv3H1R+bfdDIFjslmbe8yeudvf2xoIz pb+YES3Dsl4kBL4tX8vbBtkmrhizFNGhYVaclugl2OUeHM1IxmPyYaVIq25k+iIW OdNCv2cJUkS/Mj8pMA== atlases.muni.cz atlases.muni.cz-new CN=atlases.muni.cz,O=Masaryk University,DC=cesnet-ca,DC=cz MIIEWTCCA0GgAwIBAgIEQrNxVjANBgkqhkiG9w0BAQUFADBDMRIwEAYKCZImiZPy LGQBGRYCY3oxGTAXBgoJkiaJk/IsZAEZFgljZXNuZXQtY2ExEjAQBgNVBAMTCUNF U05FVCBDQTAeFw0wOTA2MTgwODU5MjVaFw0xMDA3MTgwOTI5MjVaMGYxEjAQBgoJ kiaJk/IsZAEZFgJjejEZMBcGCgmSJomT8ixkARkWCWNlc25ldC1jYTEbMBkGA1UE ChMSTWFzYXJ5ayBVbml2ZXJzaXR5MRgwFgYDVQQDEw9hdGxhc2VzLm11bmkuY3ow gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALjZMT6Xt5ZM8WkUdWZ5DWeJzYpu ozchG5dYqq0cOV0fsPd5LpiALLPT//W7pm2r53a1/DNmbqZrk8et+/JuLsjOQy0i GO4yR3t0i056OMD9Y5Fo5DQT7T722NCWhocEkgmj+nZIAoPQ7DsIKlU6mSguAkdb y/sa1Gxu0ZIkRm6rAgMBAAGjggG0MIIBsDAOBgNVHQ8BAf8EBAMCBaAwGQYDVR0g BBIwEDAOBgwrBgEEAb55AQICAgAwNAYDVR0RBC0wK4ESa291cmlsQGljcy5tdW5p LmN6gg9hdGxhc2VzLm11bmkuY3qHBJP7C6AwggELBgNVHR8EggECMIH/MFqgWKBW pFQwUjESMBAGCgmSJomT8ixkARkWAmN6MRkwFwYKCZImiZPyLGQBGRYJY2VzbmV0 LWNhMRIwEAYDVQQDEwlDRVNORVQgQ0ExDTALBgNVBAMTBENSTDQwgaCggZ2ggZqG Qmh0dHA6Ly93d3cuY2VzbmV0LmN6L3BraS9jcmwvY249Q0VTTkVUJTIwQ0EsZGM9 Y2VzbmV0LWNhLGRjPWN6LmNybIZUbGRhcDovL2xkYXAuY2VzbmV0LWNhLmN6L2Nu PUNFU05FVCUyMENBLGRjPWNlc25ldC1jYSxkYz1jej9jZXJ0aWZpY2F0ZVJldm9j YXRpb25MaXN0MB8GA1UdIwQYMBaAFC9sBcNRJqyvOZw+ODXdUikngMX1MB0GA1Ud DgQWBBRqlY2ZZ+ume/u40jXTvXRwUVRnfzANBgkqhkiG9w0BAQUFAAOCAQEAy/zY ix082lbRuTeQuI32iDKNSQT0XH0gMblHMnv5ldru7oCSwM4fC+EP3CcfShA2xVbJ zyKMqHI7pM7r7CrBB24OHV/MQ+tBdo8LoBG3xQByYaE5AS6jmTxHg4p/bHfgBM+K +bQWmTAtwDb5+NnfKoI141bmvI3Vq2q3HSWhu6+SQV4UbtKpg5xGg1q4vCg2UoLN /f/2fKz5d2X1zMutHIa58Qt+dz84oG3OwBN6db1sF8H3mu4tJ9UpF1oabcz3m8R8 dQTMQo3cVb+ob0k5NRSOrZaPFvsYgBh2wNdj0Sp+zjd/NPDAj5j4iMQlhq1IEgPk 4IxKAfvQVoUyjHs+zg== atlases.muni.cz atlasesTCS CN=atlases.muni.cz,O=Masaryk University,C=CZ MIIEaTCCA1GgAwIBAgIRAJWodRv0wQ1r0LBtit4bdAYwDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0wOTEyMTcwMDAwMDBaFw0xMjEyMTYyMzU5NTlaMEQxCzAJBgNV BAYTAkNaMRswGQYDVQQKExJNYXNhcnlrIFVuaXZlcnNpdHkxGDAWBgNVBAMTD2F0 bGFzZXMubXVuaS5jejCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALv0 wLkG+KB7so18gsPG13xP6JsN+wXmV2PIgPjVdiIU3ab1d44o3zvTQbfML1jLanTi fpgTp4GBc7Sk+Ut5r8fmO4b2oWWPmVvRVTQTAefxOJ8EcaLkP2KIKgoA4PrxBU0R ummyB9ory7iG3zyUwXv6UE8B43V9xT9r11JTMVu747jWspq6tsfYsmjYDWGnJPjU ULPZoh3t26PlM5IK/AIMr+zs5HQJu/XFE2fOjZVBRkWmmzmWVSndZx9QKqOcTypd 1M+5I6btXrtMlRX3e/YyQ0WiHK/6Y80N8bgujoyt7EM+Gr4vAvTO0OVYNto8aW1m JxwP5bv80KLhTKSF4+ECAwEAAaOCAWIwggFeMB8GA1UdIwQYMBaAFAy9k2gM896r o0lrKzdXR+qQ47ntMB0GA1UdDgQWBBSAvdbx2HeGy16j42B6grP/zb/G9TAOBgNV HQ8BAf8EBAMCBaAwDAYDVR0TAQH/BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYI KwYBBQUHAwIwGAYDVR0gBBEwDzANBgsrBgEEAbIxAQICHTA6BgNVHR8EMzAxMC+g LaArhilodHRwOi8vY3JsLnRjcy50ZXJlbmEub3JnL1RFUkVOQVNTTENBLmNybDBt BggrBgEFBQcBAQRhMF8wNQYIKwYBBQUHMAKGKWh0dHA6Ly9jcnQudGNzLnRlcmVu YS5vcmcvVEVSRU5BU1NMQ0EuY3J0MCYGCCsGAQUFBzABhhpodHRwOi8vb2NzcC50 Y3MudGVyZW5hLm9yZzAaBgNVHREEEzARgg9hdGxhc2VzLm11bmkuY3owDQYJKoZI hvcNAQEFBQADggEBAA6at/39C8yYR/XlQ2BLya6my2j9xkGylg+8T7rT1ZL2Ckda l6YaZjckWUh/vdSa6M02XVNq9lljb+i97F2CbSUV1HZNy+f2NwUXiUieZQtdpFIv rshymOmUFcqcuyk1e68krGW2L1pthnFD/jHC+6RKvJakn5ggP/3hLYUwaeOYo0mS nel/jb1K+g2X0QkeKTx6Cs/Jpl1jRpzkC7C3gQHmbHufFudaLqP8JjkMaQBivnlC VoXIJzftiwHK2SXx7rH6CNrbfxGeL1C0Rg2RA3jDNRlFI2Y+lIMxiHKNjRIa/JGX Qzh9bTGuFgSX09pFNRoQ77C3Fq3WH3ychuHUyeo= atlases.muni.cz atlasesSelf https://atlases.muni.cz/shibboleth CN=atlases.muni.cz MIIDGDCCAgCgAwIBAgIJALkChkWt/z1OMA0GCSqGSIb3DQEBBQUAMBoxGDAWBgNV BAMTD2F0bGFzZXMubXVuaS5jejAeFw0xMDEwMDcxMTQ2NDVaFw0xMzEwMDcxMTQ2 NDVaMBoxGDAWBgNVBAMTD2F0bGFzZXMubXVuaS5jejCCASIwDQYJKoZIhvcNAQEB BQADggEPADCCAQoCggEBAOTs3HhxPjALxORqKKhNStTsnxHRmmgfuOpD+PffbYfq alNKnaewsW8/7q1+kaX05X1/svdB5xrnQvLoR1K2W149TCrYdSxv1WW9EZJyUpgu WCF3p+HrKqa2ghZVbp2uSThQ50OYa0JFYrMps4CyWG2Wodrb52cAg6BG+SPFIwYE CVIOH455WKKf8Z86dlT5h2uaACTOEMFpG3UnFVAiLWfSgTxcvi/gKuYFtL8XNCxq 1xT5PXHC2nvWmGo8qUUQhxfxhUTILoj2n+Sxr0h/mCRzIDrIwua/lGPWcIL6cF3X /z1DbtUHvn2U/ok2mY2EvWsgDQzbiUkK38ilDFqQyF0CAwEAAaNhMF8wPgYDVR0R BDcwNYIPYXRsYXNlcy5tdW5pLmN6hiJodHRwczovL2F0bGFzZXMubXVuaS5jei9z aGliYm9sZXRoMB0GA1UdDgQWBBR5gQjbmYdw1Q6PkHxIyfEkegtU6jANBgkqhkiG 9w0BAQUFAAOCAQEAulXyvD0hIrqDdDh/CNncTXiVf4HUouCVN2/MiDVItTEoWEyp A0krzYitetlGTQLujJJFOuCehzuF5pQK3V41Qmf/tj1iRz4ox4S9oBl+JfdJ9pCm F1z83ioQqhVRS/Huvmr1ozOFMbnKpMaU5m/T/C5FD1OoB7k8KdLcvHPHWq8tJgab yNn8bEghTAa8qC7GYieg7X6ZpRfPN5wK4U9POnYmHKod4IqbZd9Q7yCJYNKfxp2y PIFp8E0dbQvOnE2+4VQZilfAFQ6NXOORxQDa2CawrT13TE2HdvMU1AJTbG4FCdWH r+eb1o0h3jTHWzkBWafsZOaeUJMHpTqy4IcPpw== Active www.metapress.com CN=www.metapress.com,OU=Terms of use at www.verisign.com/rpa (c)05,OU=MetaPress,O=EBSCO Industries\, Inc.,L=Birmingham,ST=Alabama,C=US MIIFzjCCBLagAwIBAgIQSxVYxfBDm07E/ewzv9//WDANBgkqhkiG9w0BAQUFADCB tTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1c2Ug YXQgaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYSAoYykwOTEvMC0GA1UEAxMm VmVyaVNpZ24gQ2xhc3MgMyBTZWN1cmUgU2VydmVyIENBIC0gRzIwHhcNMDkwNzA5 MDAwMDAwWhcNMTIwNzIyMjM1OTU5WjCBujELMAkGA1UEBhMCVVMxEDAOBgNVBAgT B0FsYWJhbWExEzARBgNVBAcUCkJpcm1pbmdoYW0xHzAdBgNVBAoUFkVCU0NPIElu ZHVzdHJpZXMsIEluYy4xEjAQBgNVBAsUCU1ldGFQcmVzczEzMDEGA1UECxQqVGVy bXMgb2YgdXNlIGF0IHd3dy52ZXJpc2lnbi5jb20vcnBhIChjKTA1MRowGAYDVQQD FBF3d3cubWV0YXByZXNzLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC ggEBANAPC4w32D0Op8alyIxfONpWuIFeLGCyXnaeOcOErbgnoHopdbWWUo8wjiEU U29vhIMwF3u+j61N8/dqZYxxA4quICrzNXBun2pOmjeTXAR+tXgJVWuYnPhnMSuV vmE3U7lX1ZvwP2FkHE8H2ZyPunsl6RDeJ54x7rKSKdp9OkidT0+O0UySDrgLuqZ8 SF1x9OexB5iptj8mYfj2Jzq/ReHh/HX3ID5JdJMOv2eQ+SEiNjmCYLm+PMPsGioV dNpkx9/pY7VL+n33wC6LqttYHIt1f9IWIvyCpfJwdWEhtehjFIdF3v//x7yO1oWd WhHH8w1ri2vXtMex3owFT5QFeAcCAwEAAaOCAdEwggHNMAkGA1UdEwQCMAAwCwYD VR0PBAQDAgWgMEUGA1UdHwQ+MDwwOqA4oDaGNGh0dHA6Ly9TVlJTZWN1cmUtRzIt Y3JsLnZlcmlzaWduLmNvbS9TVlJTZWN1cmVHMi5jcmwwRAYDVR0gBD0wOzA5Bgtg hkgBhvhFAQcXAzAqMCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy52ZXJpc2lnbi5j b20vcnBhMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAfBgNVHSMEGDAW gBSl7wsRzsBBA6NKZZBIshzgVy19RzB2BggrBgEFBQcBAQRqMGgwJAYIKwYBBQUH MAGGGGh0dHA6Ly9vY3NwLnZlcmlzaWduLmNvbTBABggrBgEFBQcwAoY0aHR0cDov L1NWUlNlY3VyZS1HMi1haWEudmVyaXNpZ24uY29tL1NWUlNlY3VyZUcyLmNlcjBu BggrBgEFBQcBDARiMGChXqBcMFowWDBWFglpbWFnZS9naWYwITAfMAcGBSsOAwIa BBRLa7kolgYMu9BSOJsprEsHiyEFGDAmFiRodHRwOi8vbG9nby52ZXJpc2lnbi5j b20vdnNsb2dvMS5naWYwDQYJKoZIhvcNAQEFBQADggEBADuSJ4d+vP3YzNGiidkS 0pyRxh8xukjDZZoxH1WvC/59Easd5ImEj3S1CK3TRVLMYsqAKLS+ZKw70M3RGjhl cdkC+XKBX8owdoJvxCPzGkcVbl4+fbZBFU9Ig+4D0Td66Y8zvF4WNKVfkfCbOhWk 9S69SYhmpKvPrS17l72FrQl1yr6pBMN43BbjweWaR0r+w6Qous/8p9YRx5bvRGEx bbqSHr+ThK+cA+ejsKFih6b7J1/tISSp3UYu3OGRZfW5aYC+zLX/fSzNpEIOoQkD 1eiD1q3uKUkZ7i5OulGc6iD292VVLCTC5T25o67sGFLUrv3Jaz78uE35egIBTMFu IBA= MIIGLDCCBZWgAwIBAgIQbk/6s8XmacTRZ8mSq+hYxDANBgkqhkiG9w0BAQUFADCB wTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTwwOgYDVQQL EzNDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5 IC0gRzIxOjA4BgNVBAsTMShjKSAxOTk4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1 dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv cmswHhcNMDkwMzI1MDAwMDAwWhcNMTkwMzI0MjM1OTU5WjCBtTELMAkGA1UEBhMC VVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU cnVzdCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1c2UgYXQgaHR0cHM6Ly93 d3cudmVyaXNpZ24uY29tL3JwYSAoYykwOTEvMC0GA1UEAxMmVmVyaVNpZ24gQ2xh c3MgMyBTZWN1cmUgU2VydmVyIENBIC0gRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IB DwAwggEKAoIBAQDUVo9XOzcopkBj0pXVBXTatRlqltZxVy/iwDSMoJWzjOE3JPMu 7UNFBY6J1/raSrX4Po1Ox/lJUEU3QJ90qqBRVWHxYISJpZ6AjS+wIapFgsTPtBR/ RxUgKIKwaBLArlwH1/ZZzMtiVlxNSf8miKtUUTovStoOmOKJcrn892g8xB85essX gfMMrQ/cYWIbEAsEHikYcV5iy0PevjG6cQIZTiapUdqMZGkD3pz9ff17Ybz8hHyI XLTDe+1fK0YS8f0AAZqLW+mjBS6PLlve8xt4+GaRCMBeztWwNsrUqHugffkwer/4 3RlRKyC6/qfPoU6wZ/WAqiuDLtKOVImOHikLAgMBAAGjggKpMIICpTA0BggrBgEF BQcBAQQoMCYwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLnZlcmlzaWduLmNvbTAS BgNVHRMBAf8ECDAGAQH/AgEAMHAGA1UdIARpMGcwZQYLYIZIAYb4RQEHFwMwVjAo BggrBgEFBQcCARYcaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL2NwczAqBggrBgEF BQcCAjAeGhxodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhMDQGA1UdHwQtMCsw KaAnoCWGI2h0dHA6Ly9jcmwudmVyaXNpZ24uY29tL3BjYTMtZzIuY3JsMA4GA1Ud DwEB/wQEAwIBBjBtBggrBgEFBQcBDARhMF+hXaBbMFkwVzBVFglpbWFnZS9naWYw ITAfMAcGBSsOAwIaBBSP5dMahqyNjmvDz4Bq1EgYLHsZLjAlFiNodHRwOi8vbG9n by52ZXJpc2lnbi5jb20vdnNsb2dvLmdpZjApBgNVHREEIjAgpB4wHDEaMBgGA1UE AxMRQ2xhc3MzQ0EyMDQ4LTEtNTIwHQYDVR0OBBYEFKXvCxHOwEEDo0plkEiyHOBX LX1HMIHnBgNVHSMEgd8wgdyhgcekgcQwgcExCzAJBgNVBAYTAlVTMRcwFQYDVQQK Ew5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5 OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYD VQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrghB92f4Hz6getxB5Z/uniTTGMA0G CSqGSIb3DQEBBQUAA4GBAGN0Lz1Tqi+X7CYRZhr+8d5BJxnSf9jBHPniOFY6H5Cu OcUgdav4bC1nHynCIdcUiGNLsJsnY5H48KMBJLb7j+M9AgtvVP7UzNvWhb98lR5e YhHB2QmcQrmy1KotmDojYMyimvFu6M+O0Ro8XhnF15s1sAIjJOUFuNWI4+D6ufRf Standby www.metapress.com CN=www.metapress.com,OU=Terms of use at www.verisign.com/rpa (c)05,OU=MetaPress,O=EBSCO Industries\, Inc.,L=Birmingham,ST=Alabama,C=US MIIFRjCCBC6gAwIBAgIQdLIzOaOg35EBvKHnlscPdTANBgkqhkiG9w0BAQUFADCB sDELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1c2Ug YXQgaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYSAoYykwNTEqMCgGA1UEAxMh VmVyaVNpZ24gQ2xhc3MgMyBTZWN1cmUgU2VydmVyIENBMB4XDTA2MDcyNDAwMDAw MFoXDTA5MDcyMzIzNTk1OVowgboxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBbGFi YW1hMRMwEQYDVQQHFApCaXJtaW5naGFtMR8wHQYDVQQKFBZFQlNDTyBJbmR1c3Ry aWVzLCBJbmMuMRIwEAYDVQQLFAlNZXRhUHJlc3MxMzAxBgNVBAsUKlRlcm1zIG9m IHVzZSBhdCB3d3cudmVyaXNpZ24uY29tL3JwYSAoYykwNTEaMBgGA1UEAxQRd3d3 Lm1ldGFwcmVzcy5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMfIzstI yJHR+53tc/O+p2HnawkV//LN4/6LQgmlI7NnzmJFMXn2LqimfQX74hGbVxqgyWsr f/4iuMJbruWga9yks0/Oc7Ksku4mBL83NSXuCtIhZyd59FGJHrAeEocSpT1tkLSW bdEKGD0dJMQxIpTqEH8hAOWvNnx6wMNg7ZmrAgMBAAGjggHSMIIBzjAJBgNVHRME AjAAMAsGA1UdDwQEAwIFoDBEBgNVHR8EPTA7MDmgN6A1hjNodHRwOi8vU1ZSU2Vj dXJlLWNybC52ZXJpc2lnbi5jb20vU1ZSU2VjdXJlMjAwNS5jcmwwRAYDVR0gBD0w OzA5BgtghkgBhvhFAQcXAzAqMCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy52ZXJp c2lnbi5jb20vcnBhMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAfBgNV HSMEGDAWgBRv7K+g3Yqk7/UqEGctP1WCvNfvJTB5BggrBgEFBQcBAQRtMGswJAYI KwYBBQUHMAGGGGh0dHA6Ly9vY3NwLnZlcmlzaWduLmNvbTBDBggrBgEFBQcwAoY3 aHR0cDovL1NWUlNlY3VyZS1haWEudmVyaXNpZ24uY29tL1NWUlNlY3VyZTIwMDUt YWlhLmNlcjBtBggrBgEFBQcBDARhMF+hXaBbMFkwVzBVFglpbWFnZS9naWYwITAf MAcGBSsOAwIaBBSP5dMahqyNjmvDz4Bq1EgYLHsZLjAlFiNodHRwOi8vbG9nby52 ZXJpc2lnbi5jb20vdnNsb2dvLmdpZjANBgkqhkiG9w0BAQUFAAOCAQEAZ4rLufX0 amcjscgLXzgMxRZGeBJmNMdfcCBbC+E6oACjvAzbmOl/bF5IRUhlvLKfi5r0gAI7 3dI0MiiLwgTxSQ6FPby8lnPxMpWl1PqxNHxjJWDLUxW+Ax25yCXb5sHNGTYKDAi6 Sutce+zXxf1iPe4vNKo2tSkJ0a/6nAN6RWHjwe/K9m8XG/rUZtakaxNp+UoZyKSA 0gkUsWjTWS7QMVagbsfLLIBUz9EzQHlsR3fwQCRSdzWRm5hFTaY864ga8CT1SOtu UF7oxwyXeVZAuNcZEgYmyrY+z8OtMXW+6IJVhyMZOr7iYgmqycucGvwZb8kHa6ge 27MwrVmWJ53c/w== MIIEnDCCBAWgAwIBAgIQdTN9mrDhIzuuLX3kRpFi1DANBgkqhkiG9w0BAQUFADBf MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xNzA1BgNVBAsT LkNsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkw HhcNMDUwMTE5MDAwMDAwWhcNMTUwMTE4MjM1OTU5WjCBsDELMAkGA1UEBhMCVVMx FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz dCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1c2UgYXQgaHR0cHM6Ly93d3cu dmVyaXNpZ24uY29tL3JwYSAoYykwNTEqMCgGA1UEAxMhVmVyaVNpZ24gQ2xhc3Mg MyBTZWN1cmUgU2VydmVyIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC AQEAlcMhEo5AxQ0BX3ZeZpTZcyxYGSK4yfx6OZAqd3J8HT732FXjr0LLhzAC3Fus cOa4RLQrNeuT0hcFfstG1lxToDJRnXRkWPkMmgDqXkRJZHL0zRDihQr5NO6ziGap paRa0A6Yf1gNK1K7hql+LvqySHyN2y1fAXWijQY7i7RhB8m+Ipn4G9G1V2YETTX0 kXGWtZkIJZuXyDrzILHdnpgMSmO3ps6wAc74k2rzDG6fsemEe4GYQeaB3D0s57Rr 4578CBbXs9W5ZhKZfG1xyE2+xw/j+zet1XWHIWuG0EQUWlR5OZZpVsm5Mc2JYVjh 2XYFBa33uQKvp/1HkaIiNFox0QIDAQABo4IBgTCCAX0wEgYDVR0TAQH/BAgwBgEB /wIBADBEBgNVHSAEPTA7MDkGC2CGSAGG+EUBBxcDMCowKAYIKwYBBQUHAgEWHGh0 dHBzOi8vd3d3LnZlcmlzaWduLmNvbS9ycGEwMQYDVR0fBCowKDAmoCSgIoYgaHR0 cDovL2NybC52ZXJpc2lnbi5jb20vcGNhMy5jcmwwDgYDVR0PAQH/BAQDAgEGMBEG CWCGSAGG+EIBAQQEAwIBBjApBgNVHREEIjAgpB4wHDEaMBgGA1UEAxMRQ2xhc3Mz Q0EyMDQ4LTEtNDUwHQYDVR0OBBYEFG/sr6DdiqTv9SoQZy0/VYK81+8lMIGABgNV HSMEeTB3oWOkYTBfMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIElu Yy4xNzA1BgNVBAsTLkNsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlv biBBdXRob3JpdHmCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQEFBQADgYEA w34IRl2RNs9n3Nenr6+4IsOLBHTTsWC85v63RBKBWzFzFGNWxnIu0RoDQ1w4ClBK Tc3athmo9JkNr+P32PF1KGX2av6b9L1S2T/L2hbLpZ4ujmZSeD0m+v6UNohKlV4q TBnvbvqCPy0D79YoszcYz0KyNCFkR9MgazpM3OYDkAw= Active www.metapress.com CN=www.metapress.com,OU=Terms of use at www.verisign.com/rpa (c)05,OU=MetaPress,O=EBSCO Industries\, Inc.,L=Birmingham,ST=Alabama,C=US MIIFzjCCBLagAwIBAgIQSxVYxfBDm07E/ewzv9//WDANBgkqhkiG9w0BAQUFADCB tTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1c2Ug YXQgaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYSAoYykwOTEvMC0GA1UEAxMm VmVyaVNpZ24gQ2xhc3MgMyBTZWN1cmUgU2VydmVyIENBIC0gRzIwHhcNMDkwNzA5 MDAwMDAwWhcNMTIwNzIyMjM1OTU5WjCBujELMAkGA1UEBhMCVVMxEDAOBgNVBAgT B0FsYWJhbWExEzARBgNVBAcUCkJpcm1pbmdoYW0xHzAdBgNVBAoUFkVCU0NPIElu ZHVzdHJpZXMsIEluYy4xEjAQBgNVBAsUCU1ldGFQcmVzczEzMDEGA1UECxQqVGVy bXMgb2YgdXNlIGF0IHd3dy52ZXJpc2lnbi5jb20vcnBhIChjKTA1MRowGAYDVQQD FBF3d3cubWV0YXByZXNzLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC ggEBANAPC4w32D0Op8alyIxfONpWuIFeLGCyXnaeOcOErbgnoHopdbWWUo8wjiEU U29vhIMwF3u+j61N8/dqZYxxA4quICrzNXBun2pOmjeTXAR+tXgJVWuYnPhnMSuV vmE3U7lX1ZvwP2FkHE8H2ZyPunsl6RDeJ54x7rKSKdp9OkidT0+O0UySDrgLuqZ8 SF1x9OexB5iptj8mYfj2Jzq/ReHh/HX3ID5JdJMOv2eQ+SEiNjmCYLm+PMPsGioV dNpkx9/pY7VL+n33wC6LqttYHIt1f9IWIvyCpfJwdWEhtehjFIdF3v//x7yO1oWd WhHH8w1ri2vXtMex3owFT5QFeAcCAwEAAaOCAdEwggHNMAkGA1UdEwQCMAAwCwYD VR0PBAQDAgWgMEUGA1UdHwQ+MDwwOqA4oDaGNGh0dHA6Ly9TVlJTZWN1cmUtRzIt Y3JsLnZlcmlzaWduLmNvbS9TVlJTZWN1cmVHMi5jcmwwRAYDVR0gBD0wOzA5Bgtg hkgBhvhFAQcXAzAqMCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy52ZXJpc2lnbi5j b20vcnBhMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAfBgNVHSMEGDAW gBSl7wsRzsBBA6NKZZBIshzgVy19RzB2BggrBgEFBQcBAQRqMGgwJAYIKwYBBQUH MAGGGGh0dHA6Ly9vY3NwLnZlcmlzaWduLmNvbTBABggrBgEFBQcwAoY0aHR0cDov L1NWUlNlY3VyZS1HMi1haWEudmVyaXNpZ24uY29tL1NWUlNlY3VyZUcyLmNlcjBu BggrBgEFBQcBDARiMGChXqBcMFowWDBWFglpbWFnZS9naWYwITAfMAcGBSsOAwIa BBRLa7kolgYMu9BSOJsprEsHiyEFGDAmFiRodHRwOi8vbG9nby52ZXJpc2lnbi5j b20vdnNsb2dvMS5naWYwDQYJKoZIhvcNAQEFBQADggEBADuSJ4d+vP3YzNGiidkS 0pyRxh8xukjDZZoxH1WvC/59Easd5ImEj3S1CK3TRVLMYsqAKLS+ZKw70M3RGjhl cdkC+XKBX8owdoJvxCPzGkcVbl4+fbZBFU9Ig+4D0Td66Y8zvF4WNKVfkfCbOhWk 9S69SYhmpKvPrS17l72FrQl1yr6pBMN43BbjweWaR0r+w6Qous/8p9YRx5bvRGEx bbqSHr+ThK+cA+ejsKFih6b7J1/tISSp3UYu3OGRZfW5aYC+zLX/fSzNpEIOoQkD 1eiD1q3uKUkZ7i5OulGc6iD292VVLCTC5T25o67sGFLUrv3Jaz78uE35egIBTMFu IBA= MIIGLDCCBZWgAwIBAgIQbk/6s8XmacTRZ8mSq+hYxDANBgkqhkiG9w0BAQUFADCB wTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTwwOgYDVQQL EzNDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5 IC0gRzIxOjA4BgNVBAsTMShjKSAxOTk4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1 dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv cmswHhcNMDkwMzI1MDAwMDAwWhcNMTkwMzI0MjM1OTU5WjCBtTELMAkGA1UEBhMC VVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU cnVzdCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1c2UgYXQgaHR0cHM6Ly93 d3cudmVyaXNpZ24uY29tL3JwYSAoYykwOTEvMC0GA1UEAxMmVmVyaVNpZ24gQ2xh c3MgMyBTZWN1cmUgU2VydmVyIENBIC0gRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IB DwAwggEKAoIBAQDUVo9XOzcopkBj0pXVBXTatRlqltZxVy/iwDSMoJWzjOE3JPMu 7UNFBY6J1/raSrX4Po1Ox/lJUEU3QJ90qqBRVWHxYISJpZ6AjS+wIapFgsTPtBR/ RxUgKIKwaBLArlwH1/ZZzMtiVlxNSf8miKtUUTovStoOmOKJcrn892g8xB85essX gfMMrQ/cYWIbEAsEHikYcV5iy0PevjG6cQIZTiapUdqMZGkD3pz9ff17Ybz8hHyI XLTDe+1fK0YS8f0AAZqLW+mjBS6PLlve8xt4+GaRCMBeztWwNsrUqHugffkwer/4 3RlRKyC6/qfPoU6wZ/WAqiuDLtKOVImOHikLAgMBAAGjggKpMIICpTA0BggrBgEF BQcBAQQoMCYwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLnZlcmlzaWduLmNvbTAS BgNVHRMBAf8ECDAGAQH/AgEAMHAGA1UdIARpMGcwZQYLYIZIAYb4RQEHFwMwVjAo BggrBgEFBQcCARYcaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL2NwczAqBggrBgEF BQcCAjAeGhxodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhMDQGA1UdHwQtMCsw KaAnoCWGI2h0dHA6Ly9jcmwudmVyaXNpZ24uY29tL3BjYTMtZzIuY3JsMA4GA1Ud DwEB/wQEAwIBBjBtBggrBgEFBQcBDARhMF+hXaBbMFkwVzBVFglpbWFnZS9naWYw ITAfMAcGBSsOAwIaBBSP5dMahqyNjmvDz4Bq1EgYLHsZLjAlFiNodHRwOi8vbG9n by52ZXJpc2lnbi5jb20vdnNsb2dvLmdpZjApBgNVHREEIjAgpB4wHDEaMBgGA1UE AxMRQ2xhc3MzQ0EyMDQ4LTEtNTIwHQYDVR0OBBYEFKXvCxHOwEEDo0plkEiyHOBX LX1HMIHnBgNVHSMEgd8wgdyhgcekgcQwgcExCzAJBgNVBAYTAlVTMRcwFQYDVQQK Ew5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5 OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYD VQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrghB92f4Hz6getxB5Z/uniTTGMA0G CSqGSIb3DQEBBQUAA4GBAGN0Lz1Tqi+X7CYRZhr+8d5BJxnSf9jBHPniOFY6H5Cu OcUgdav4bC1nHynCIdcUiGNLsJsnY5H48KMBJLb7j+M9AgtvVP7UzNvWhb98lR5e YhHB2QmcQrmy1KotmDojYMyimvFu6M+O0Ro8XhnF15s1sAIjJOUFuNWI4+D6ufRf Standby www.metapress.com CN=www.metapress.com,OU=Terms of use at www.verisign.com/rpa (c)05,OU=MetaPress,O=EBSCO Industries\, Inc.,L=Birmingham,ST=Alabama,C=US MIIFRjCCBC6gAwIBAgIQdLIzOaOg35EBvKHnlscPdTANBgkqhkiG9w0BAQUFADCB sDELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1c2Ug YXQgaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYSAoYykwNTEqMCgGA1UEAxMh VmVyaVNpZ24gQ2xhc3MgMyBTZWN1cmUgU2VydmVyIENBMB4XDTA2MDcyNDAwMDAw MFoXDTA5MDcyMzIzNTk1OVowgboxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBbGFi YW1hMRMwEQYDVQQHFApCaXJtaW5naGFtMR8wHQYDVQQKFBZFQlNDTyBJbmR1c3Ry aWVzLCBJbmMuMRIwEAYDVQQLFAlNZXRhUHJlc3MxMzAxBgNVBAsUKlRlcm1zIG9m IHVzZSBhdCB3d3cudmVyaXNpZ24uY29tL3JwYSAoYykwNTEaMBgGA1UEAxQRd3d3 Lm1ldGFwcmVzcy5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMfIzstI yJHR+53tc/O+p2HnawkV//LN4/6LQgmlI7NnzmJFMXn2LqimfQX74hGbVxqgyWsr f/4iuMJbruWga9yks0/Oc7Ksku4mBL83NSXuCtIhZyd59FGJHrAeEocSpT1tkLSW bdEKGD0dJMQxIpTqEH8hAOWvNnx6wMNg7ZmrAgMBAAGjggHSMIIBzjAJBgNVHRME AjAAMAsGA1UdDwQEAwIFoDBEBgNVHR8EPTA7MDmgN6A1hjNodHRwOi8vU1ZSU2Vj dXJlLWNybC52ZXJpc2lnbi5jb20vU1ZSU2VjdXJlMjAwNS5jcmwwRAYDVR0gBD0w OzA5BgtghkgBhvhFAQcXAzAqMCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy52ZXJp c2lnbi5jb20vcnBhMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAfBgNV HSMEGDAWgBRv7K+g3Yqk7/UqEGctP1WCvNfvJTB5BggrBgEFBQcBAQRtMGswJAYI KwYBBQUHMAGGGGh0dHA6Ly9vY3NwLnZlcmlzaWduLmNvbTBDBggrBgEFBQcwAoY3 aHR0cDovL1NWUlNlY3VyZS1haWEudmVyaXNpZ24uY29tL1NWUlNlY3VyZTIwMDUt YWlhLmNlcjBtBggrBgEFBQcBDARhMF+hXaBbMFkwVzBVFglpbWFnZS9naWYwITAf MAcGBSsOAwIaBBSP5dMahqyNjmvDz4Bq1EgYLHsZLjAlFiNodHRwOi8vbG9nby52 ZXJpc2lnbi5jb20vdnNsb2dvLmdpZjANBgkqhkiG9w0BAQUFAAOCAQEAZ4rLufX0 amcjscgLXzgMxRZGeBJmNMdfcCBbC+E6oACjvAzbmOl/bF5IRUhlvLKfi5r0gAI7 3dI0MiiLwgTxSQ6FPby8lnPxMpWl1PqxNHxjJWDLUxW+Ax25yCXb5sHNGTYKDAi6 Sutce+zXxf1iPe4vNKo2tSkJ0a/6nAN6RWHjwe/K9m8XG/rUZtakaxNp+UoZyKSA 0gkUsWjTWS7QMVagbsfLLIBUz9EzQHlsR3fwQCRSdzWRm5hFTaY864ga8CT1SOtu UF7oxwyXeVZAuNcZEgYmyrY+z8OtMXW+6IJVhyMZOr7iYgmqycucGvwZb8kHa6ge 27MwrVmWJ53c/w== MIIEnDCCBAWgAwIBAgIQdTN9mrDhIzuuLX3kRpFi1DANBgkqhkiG9w0BAQUFADBf MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xNzA1BgNVBAsT LkNsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkw HhcNMDUwMTE5MDAwMDAwWhcNMTUwMTE4MjM1OTU5WjCBsDELMAkGA1UEBhMCVVMx FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz dCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1c2UgYXQgaHR0cHM6Ly93d3cu dmVyaXNpZ24uY29tL3JwYSAoYykwNTEqMCgGA1UEAxMhVmVyaVNpZ24gQ2xhc3Mg MyBTZWN1cmUgU2VydmVyIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC AQEAlcMhEo5AxQ0BX3ZeZpTZcyxYGSK4yfx6OZAqd3J8HT732FXjr0LLhzAC3Fus cOa4RLQrNeuT0hcFfstG1lxToDJRnXRkWPkMmgDqXkRJZHL0zRDihQr5NO6ziGap paRa0A6Yf1gNK1K7hql+LvqySHyN2y1fAXWijQY7i7RhB8m+Ipn4G9G1V2YETTX0 kXGWtZkIJZuXyDrzILHdnpgMSmO3ps6wAc74k2rzDG6fsemEe4GYQeaB3D0s57Rr 4578CBbXs9W5ZhKZfG1xyE2+xw/j+zet1XWHIWuG0EQUWlR5OZZpVsm5Mc2JYVjh 2XYFBa33uQKvp/1HkaIiNFox0QIDAQABo4IBgTCCAX0wEgYDVR0TAQH/BAgwBgEB /wIBADBEBgNVHSAEPTA7MDkGC2CGSAGG+EUBBxcDMCowKAYIKwYBBQUHAgEWHGh0 dHBzOi8vd3d3LnZlcmlzaWduLmNvbS9ycGEwMQYDVR0fBCowKDAmoCSgIoYgaHR0 cDovL2NybC52ZXJpc2lnbi5jb20vcGNhMy5jcmwwDgYDVR0PAQH/BAQDAgEGMBEG CWCGSAGG+EIBAQQEAwIBBjApBgNVHREEIjAgpB4wHDEaMBgGA1UEAxMRQ2xhc3Mz Q0EyMDQ4LTEtNDUwHQYDVR0OBBYEFG/sr6DdiqTv9SoQZy0/VYK81+8lMIGABgNV HSMEeTB3oWOkYTBfMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIElu Yy4xNzA1BgNVBAsTLkNsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlv biBBdXRob3JpdHmCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQEFBQADgYEA w34IRl2RNs9n3Nenr6+4IsOLBHTTsWC85v63RBKBWzFzFGNWxnIu0RoDQ1w4ClBK Tc3athmo9JkNr+P32PF1KGX2av6b9L1S2T/L2hbLpZ4ujmZSeD0m+v6UNohKlV4q TBnvbvqCPy0D79YoszcYz0KyNCFkR9MgazpM3OYDkAw= MIIC1TCCAj6gAwIBAgIJAI7AigmgPs7lMA0GCSqGSIb3DQEBBQUAMFExCzAJBgNV BAYTAkZSMR4wHAYDVQQKExVQUkVTIE5BTkNZIFVOSVZFUlNJVEUxIjAgBgNVBAMT GWFkbWluLm5hbmN5LXVuaXZlcnNpdGUuZnIwHhcNMDgwNDIxMDgxMDU4WhcNMjgw NDE2MDgxMDU4WjBRMQswCQYDVQQGEwJGUjEeMBwGA1UEChMVUFJFUyBOQU5DWSBV TklWRVJTSVRFMSIwIAYDVQQDExlhZG1pbi5uYW5jeS11bml2ZXJzaXRlLmZyMIGf MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC6zG6yX8XQSw5xugMAFdaZ4O2tuyau hqjrmuVwJf+VDWRo5aDqnXlnYfv8Imkd9OuqRZW9N1ZfNrF8sDMiBslQaSbQ24u4 2ArkJAsy4F87cRiuse0CrJyg2CT/2thRhApR5/ivHxL73pK3CXsV7qg0DZ5qMC28 opMjqnb5RPbqkwIDAQABo4G0MIGxMB0GA1UdDgQWBBQduzcHTZd5XG3aMq1Imu+r YANlajCBgQYDVR0jBHoweIAUHbs3B02XeVxt2jKtSJrvq2ADZWqhVaRTMFExCzAJ BgNVBAYTAkZSMR4wHAYDVQQKExVQUkVTIE5BTkNZIFVOSVZFUlNJVEUxIjAgBgNV BAMTGWFkbWluLm5hbmN5LXVuaXZlcnNpdGUuZnKCCQCOwIoJoD7O5TAMBgNVHRME BTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBAHtaKgC/GFjQHK2trpWHEOdk00+gSlBw UqCTa6a7hy8moiLMrUppavJ0drqa0inBwMIU/9qlBFNSd29ZfklW8M5WH4atVMN+ pVcnJARfZhs7nyPOCb8n6IJpLEE2MF57HmU04SHXDeOE0SJMw82GBm9PLTSNEHSG BR5DWDd0Uo4J MIIC1TCCAj6gAwIBAgIJAI7AigmgPs7lMA0GCSqGSIb3DQEBBQUAMFExCzAJBgNV BAYTAkZSMR4wHAYDVQQKExVQUkVTIE5BTkNZIFVOSVZFUlNJVEUxIjAgBgNVBAMT GWFkbWluLm5hbmN5LXVuaXZlcnNpdGUuZnIwHhcNMDgwNDIxMDgxMDU4WhcNMjgw NDE2MDgxMDU4WjBRMQswCQYDVQQGEwJGUjEeMBwGA1UEChMVUFJFUyBOQU5DWSBV TklWRVJTSVRFMSIwIAYDVQQDExlhZG1pbi5uYW5jeS11bml2ZXJzaXRlLmZyMIGf MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC6zG6yX8XQSw5xugMAFdaZ4O2tuyau hqjrmuVwJf+VDWRo5aDqnXlnYfv8Imkd9OuqRZW9N1ZfNrF8sDMiBslQaSbQ24u4 2ArkJAsy4F87cRiuse0CrJyg2CT/2thRhApR5/ivHxL73pK3CXsV7qg0DZ5qMC28 opMjqnb5RPbqkwIDAQABo4G0MIGxMB0GA1UdDgQWBBQduzcHTZd5XG3aMq1Imu+r YANlajCBgQYDVR0jBHoweIAUHbs3B02XeVxt2jKtSJrvq2ADZWqhVaRTMFExCzAJ BgNVBAYTAkZSMR4wHAYDVQQKExVQUkVTIE5BTkNZIFVOSVZFUlNJVEUxIjAgBgNV BAMTGWFkbWluLm5hbmN5LXVuaXZlcnNpdGUuZnKCCQCOwIoJoD7O5TAMBgNVHRME BTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBAHtaKgC/GFjQHK2trpWHEOdk00+gSlBw UqCTa6a7hy8moiLMrUppavJ0drqa0inBwMIU/9qlBFNSd29ZfklW8M5WH4atVMN+ pVcnJARfZhs7nyPOCb8n6IJpLEE2MF57HmU04SHXDeOE0SJMw82GBm9PLTSNEHSG BR5DWDd0Uo4J urn:mace:shibboleth:1.0:nameIdentifier Vincent MATHIEU contact-fed@univ-nancy2.fr Hugues ROUXEL Hugues.Rouxel@univ-nancy2.fr MIIC4TCCAkqgAwIBAgIJAMDJ9SsSFvAuMA0GCSqGSIb3DQEBBQUAMFUxCzAJBgNV BAYTAkZSMR4wHAYDVQQKExVQUkVTIE5BTkNZIFVOSVZFUlNJVEUxJjAkBgNVBAMT HXNpZmFjLnNhcC5uYW5jeS11bml2ZXJzaXRlLmZyMB4XDTEwMDIwNzE5MDg1MVoX DTMwMDIwMjE5MDg1MVowVTELMAkGA1UEBhMCRlIxHjAcBgNVBAoTFVBSRVMgTkFO Q1kgVU5JVkVSU0lURTEmMCQGA1UEAxMdc2lmYWMuc2FwLm5hbmN5LXVuaXZlcnNp dGUuZnIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAO8zpPaxJyntrWV1xjVf EDzLJUAT0WR18c0hlTws/SdxzVZ7IsuF2tMSWfideKb3ab9yW66Y9JDZOpPl4Ns0 ayb4945pmFOuI/kU0pAEYQ/gSTPSiKTYObmsrBi/f825PvPnaxtdcZoVRvBU61jJ AiSTr951+a6gvMWFPmUC0il9AgMBAAGjgbgwgbUwHQYDVR0OBBYEFM6S1mwW0sac Ha5hEpWb3zMDiquNMIGFBgNVHSMEfjB8gBTOktZsFtLGnB2uYRKVm98zA4qrjaFZ pFcwVTELMAkGA1UEBhMCRlIxHjAcBgNVBAoTFVBSRVMgTkFOQ1kgVU5JVkVSU0lU RTEmMCQGA1UEAxMdc2lmYWMuc2FwLm5hbmN5LXVuaXZlcnNpdGUuZnKCCQDAyfUr EhbwLjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBAMZ0mmRUzVukg/VS 2ONgT95uYL5hojSTsrraCZP2AxQW6fmspLvz3kg0wVpJrDvLVl7Bwx905sdya5J8 dErmFYVvxqTzl1Vaxtlk8wlW/KSVGoobImwkLmKMfCHD3Us53KO2Fj2IAzsxvYdK ootDZMnmwkQbrXPdB+X0LqoizD6z MIIC4TCCAkqgAwIBAgIJAMDJ9SsSFvAuMA0GCSqGSIb3DQEBBQUAMFUxCzAJBgNV BAYTAkZSMR4wHAYDVQQKExVQUkVTIE5BTkNZIFVOSVZFUlNJVEUxJjAkBgNVBAMT HXNpZmFjLnNhcC5uYW5jeS11bml2ZXJzaXRlLmZyMB4XDTEwMDIwNzE5MDg1MVoX DTMwMDIwMjE5MDg1MVowVTELMAkGA1UEBhMCRlIxHjAcBgNVBAoTFVBSRVMgTkFO Q1kgVU5JVkVSU0lURTEmMCQGA1UEAxMdc2lmYWMuc2FwLm5hbmN5LXVuaXZlcnNp dGUuZnIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAO8zpPaxJyntrWV1xjVf EDzLJUAT0WR18c0hlTws/SdxzVZ7IsuF2tMSWfideKb3ab9yW66Y9JDZOpPl4Ns0 ayb4945pmFOuI/kU0pAEYQ/gSTPSiKTYObmsrBi/f825PvPnaxtdcZoVRvBU61jJ AiSTr951+a6gvMWFPmUC0il9AgMBAAGjgbgwgbUwHQYDVR0OBBYEFM6S1mwW0sac Ha5hEpWb3zMDiquNMIGFBgNVHSMEfjB8gBTOktZsFtLGnB2uYRKVm98zA4qrjaFZ pFcwVTELMAkGA1UEBhMCRlIxHjAcBgNVBAoTFVBSRVMgTkFOQ1kgVU5JVkVSU0lU RTEmMCQGA1UEAxMdc2lmYWMuc2FwLm5hbmN5LXVuaXZlcnNpdGUuZnKCCQDAyfUr EhbwLjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBAMZ0mmRUzVukg/VS 2ONgT95uYL5hojSTsrraCZP2AxQW6fmspLvz3kg0wVpJrDvLVl7Bwx905sdya5J8 dErmFYVvxqTzl1Vaxtlk8wlW/KSVGoobImwkLmKMfCHD3Us53KO2Fj2IAzsxvYdK ootDZMnmwkQbrXPdB+X0LqoizD6z urn:mace:shibboleth:1.0:nameIdentifier Vincent MATHIEU contact-fed@univ-nancy2.fr Hugues ROUXEL Hugues.Rouxel@univ-nancy2.fr MIIC8jCCAlugAwIBAgIJALQXupNohQieMA0GCSqGSIb3DQEBBQUAMFoxCzAJBgNV BAYTAkZSMR4wHAYDVQQKExVQUkVTIE5BTkNZIFVOSVZFUlNJVEUxKzApBgNVBAMT InNpZmFjLXRlc3Quc2FwLm5hbmN5LXVuaXZlcnNpdGUuZnIwHhcNMTAwMjA3MTkx MTAzWhcNMzAwMjAyMTkxMTAzWjBaMQswCQYDVQQGEwJGUjEeMBwGA1UEChMVUFJF UyBOQU5DWSBVTklWRVJTSVRFMSswKQYDVQQDEyJzaWZhYy10ZXN0LnNhcC5uYW5j eS11bml2ZXJzaXRlLmZyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDDWgy7 74ew6ufQpiPYsnIhwizs9zaqws6ukpBR5uqUYFReax2Z0VaLBvaqNdmYxwYogU19 DLYZSHvmnW24LoQL9cfljAnwSrFUIkmc18gXMhO/5ddA+nCc4a1ISvuzaWFCK0vb y4egmqLsECVE7c/008fuYJ88zkMONYKJyTm7DwIDAQABo4G/MIG8MB0GA1UdDgQW BBS2dEaXu7j1vvY91fxXvx8JtQX0tzCBjAYDVR0jBIGEMIGBgBS2dEaXu7j1vvY9 1fxXvx8JtQX0t6FepFwwWjELMAkGA1UEBhMCRlIxHjAcBgNVBAoTFVBSRVMgTkFO Q1kgVU5JVkVSU0lURTErMCkGA1UEAxMic2lmYWMtdGVzdC5zYXAubmFuY3ktdW5p dmVyc2l0ZS5mcoIJALQXupNohQieMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEF BQADgYEAvV8vAGF0asE1vIRtVQs4uyYAP3A2IVOoilVQY4fVSJJcqVbbEPigAxFq k/FVRFKD2K2ztirUFYz6dl1edT0JhJUHNQRtHIN9w5UihQQNt373h+YbxnsLpR4B XqG5yp6GNyVSF+tjWVbdOtfRhzXxpAjJ1wglJVzhB//OWObEwfQ= MIIC8jCCAlugAwIBAgIJALQXupNohQieMA0GCSqGSIb3DQEBBQUAMFoxCzAJBgNV BAYTAkZSMR4wHAYDVQQKExVQUkVTIE5BTkNZIFVOSVZFUlNJVEUxKzApBgNVBAMT InNpZmFjLXRlc3Quc2FwLm5hbmN5LXVuaXZlcnNpdGUuZnIwHhcNMTAwMjA3MTkx MTAzWhcNMzAwMjAyMTkxMTAzWjBaMQswCQYDVQQGEwJGUjEeMBwGA1UEChMVUFJF UyBOQU5DWSBVTklWRVJTSVRFMSswKQYDVQQDEyJzaWZhYy10ZXN0LnNhcC5uYW5j eS11bml2ZXJzaXRlLmZyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDDWgy7 74ew6ufQpiPYsnIhwizs9zaqws6ukpBR5uqUYFReax2Z0VaLBvaqNdmYxwYogU19 DLYZSHvmnW24LoQL9cfljAnwSrFUIkmc18gXMhO/5ddA+nCc4a1ISvuzaWFCK0vb y4egmqLsECVE7c/008fuYJ88zkMONYKJyTm7DwIDAQABo4G/MIG8MB0GA1UdDgQW BBS2dEaXu7j1vvY91fxXvx8JtQX0tzCBjAYDVR0jBIGEMIGBgBS2dEaXu7j1vvY9 1fxXvx8JtQX0t6FepFwwWjELMAkGA1UEBhMCRlIxHjAcBgNVBAoTFVBSRVMgTkFO Q1kgVU5JVkVSU0lURTErMCkGA1UEAxMic2lmYWMtdGVzdC5zYXAubmFuY3ktdW5p dmVyc2l0ZS5mcoIJALQXupNohQieMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEF BQADgYEAvV8vAGF0asE1vIRtVQs4uyYAP3A2IVOoilVQY4fVSJJcqVbbEPigAxFq k/FVRFKD2K2ztirUFYz6dl1edT0JhJUHNQRtHIN9w5UihQQNt373h+YbxnsLpR4B XqG5yp6GNyVSF+tjWVbdOtfRhzXxpAjJ1wglJVzhB//OWObEwfQ= urn:mace:shibboleth:1.0:nameIdentifier Vincent MATHIEU contact-fed@univ-nancy2.fr Hugues ROUXEL Hugues.Rouxel@univ-nancy2.fr MIIC2DCCAkGgAwIBAgIJAIEG1HuPf3xcMA0GCSqGSIb3DQEBBQUAMFIxCzAJBgNV BAYTAkZSMR4wHAYDVQQKExVQUkVTIE5BTkNZIFVOSVZFUlNJVEUxIzAhBgNVBAMT Gmxpc3Rlcy5uYW5jeS11bml2ZXJzaXRlLmZyMB4XDTA4MDYyMDA3NDE1MFoXDTM4 MDExNDA3NDE1MFowUjELMAkGA1UEBhMCRlIxHjAcBgNVBAoTFVBSRVMgTkFOQ1kg VU5JVkVSU0lURTEjMCEGA1UEAxMabGlzdGVzLm5hbmN5LXVuaXZlcnNpdGUuZnIw gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM3TFPi2SwWQf2uhO20KJPKdEdle gnf1T5Mfgy9Noc4w0y6mSmzP+BwfjiLDqN3rJXP+TjywlIOPWtVah/WrRkztL0E1 5TRynGNUcRYV+ptr86nJfRIER/WMIl/ueuRvnISmQ65yVS0benCStsKDzXBRPGLj QE83W+M7+2VZN5aZAgMBAAGjgbUwgbIwHQYDVR0OBBYEFIq+mBdwpE72b+BPMhD8 SXdX4tlvMIGCBgNVHSMEezB5gBSKvpgXcKRO9m/gTzIQ/El3V+LZb6FWpFQwUjEL MAkGA1UEBhMCRlIxHjAcBgNVBAoTFVBSRVMgTkFOQ1kgVU5JVkVSU0lURTEjMCEG A1UEAxMabGlzdGVzLm5hbmN5LXVuaXZlcnNpdGUuZnKCCQCBBtR7j398XDAMBgNV HRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBAAeyiwXhJEDx2wCSaLlXEa71K+Sm 71gtF8M0Nosoi2gzXnkEqQ1MlakYst5rC66X+l0EnGVX24PSQKfw3zOfg4Rsn1bE kt+vonqYIBsRD5n0VsqIfm0tN841m53++Fs+Uf/tTgvk/oWB42iTw11FI1UYN09y B4nqcfwFeiBwvseT MIIC2DCCAkGgAwIBAgIJAIEG1HuPf3xcMA0GCSqGSIb3DQEBBQUAMFIxCzAJBgNV BAYTAkZSMR4wHAYDVQQKExVQUkVTIE5BTkNZIFVOSVZFUlNJVEUxIzAhBgNVBAMT Gmxpc3Rlcy5uYW5jeS11bml2ZXJzaXRlLmZyMB4XDTA4MDYyMDA3NDE1MFoXDTM4 MDExNDA3NDE1MFowUjELMAkGA1UEBhMCRlIxHjAcBgNVBAoTFVBSRVMgTkFOQ1kg VU5JVkVSU0lURTEjMCEGA1UEAxMabGlzdGVzLm5hbmN5LXVuaXZlcnNpdGUuZnIw gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM3TFPi2SwWQf2uhO20KJPKdEdle gnf1T5Mfgy9Noc4w0y6mSmzP+BwfjiLDqN3rJXP+TjywlIOPWtVah/WrRkztL0E1 5TRynGNUcRYV+ptr86nJfRIER/WMIl/ueuRvnISmQ65yVS0benCStsKDzXBRPGLj QE83W+M7+2VZN5aZAgMBAAGjgbUwgbIwHQYDVR0OBBYEFIq+mBdwpE72b+BPMhD8 SXdX4tlvMIGCBgNVHSMEezB5gBSKvpgXcKRO9m/gTzIQ/El3V+LZb6FWpFQwUjEL MAkGA1UEBhMCRlIxHjAcBgNVBAoTFVBSRVMgTkFOQ1kgVU5JVkVSU0lURTEjMCEG A1UEAxMabGlzdGVzLm5hbmN5LXVuaXZlcnNpdGUuZnKCCQCBBtR7j398XDAMBgNV HRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBAAeyiwXhJEDx2wCSaLlXEa71K+Sm 71gtF8M0Nosoi2gzXnkEqQ1MlakYst5rC66X+l0EnGVX24PSQKfw3zOfg4Rsn1bE kt+vonqYIBsRD5n0VsqIfm0tN841m53++Fs+Uf/tTgvk/oWB42iTw11FI1UYN09y B4nqcfwFeiBwvseT urn:mace:shibboleth:1.0:nameIdentifier Vincent MATHIEU contact-fed@univ-nancy2.fr Hugues ROUXEL Hugues.Rouxel@univ-nancy2.fr MIICjDCCAfWgAwIBAgIJANHRVBwSxdm/MA0GCSqGSIb3DQEBBQUAMDkxCzAJBgNV BAYTAkZSMRAwDgYDVQQKEwdPUkktT0FJMRgwFgYDVQQDEw93d3cub3JpLW9haS5v cmcwHhcNMDgxMTA0MTI1MDIxWhcNMjgxMDMwMTI1MDIxWjA5MQswCQYDVQQGEwJG UjEQMA4GA1UEChMHT1JJLU9BSTEYMBYGA1UEAxMPd3d3Lm9yaS1vYWkub3JnMIGf MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCmg2lTL6wqzNFS35yd4AMOJL+m3M0T feYdIgJd6Am3HWNISmbeshcFtc9UbhjqtmHUFtpqu+JyP85u+ppVujp4SVAIMOhi Uit2O/Mmvn9Uq9d72mGlXwdk1mkLsbq6O6m0fEcIouEhoOPBoQx43GNIT66+ysl7 0b8/wBNGYKlvRQIDAQABo4GbMIGYMB0GA1UdDgQWBBS73hTFkBqN1Cjb40AHwssb pYPVujBpBgNVHSMEYjBggBS73hTFkBqN1Cjb40AHwssbpYPVuqE9pDswOTELMAkG A1UEBhMCRlIxEDAOBgNVBAoTB09SSS1PQUkxGDAWBgNVBAMTD3d3dy5vcmktb2Fp Lm9yZ4IJANHRVBwSxdm/MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEA Kl8H6LPlnS7J3UNHOih4zYa4qmALt3R+VJFqodoTH08hkv95zb9ELtcxCAELcIUS uglQcqy4IgM2TZHVM5DrkltvVytqvKVT2N9p/gCJ0Mb0QAWcLhzjhKY1Sr2t8BPE c1gMllRGeFl1XPuPPRtX+B8D0Wovn3/XqTTZa8NPvrQ= MIICjDCCAfWgAwIBAgIJANHRVBwSxdm/MA0GCSqGSIb3DQEBBQUAMDkxCzAJBgNV BAYTAkZSMRAwDgYDVQQKEwdPUkktT0FJMRgwFgYDVQQDEw93d3cub3JpLW9haS5v cmcwHhcNMDgxMTA0MTI1MDIxWhcNMjgxMDMwMTI1MDIxWjA5MQswCQYDVQQGEwJG UjEQMA4GA1UEChMHT1JJLU9BSTEYMBYGA1UEAxMPd3d3Lm9yaS1vYWkub3JnMIGf MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCmg2lTL6wqzNFS35yd4AMOJL+m3M0T feYdIgJd6Am3HWNISmbeshcFtc9UbhjqtmHUFtpqu+JyP85u+ppVujp4SVAIMOhi Uit2O/Mmvn9Uq9d72mGlXwdk1mkLsbq6O6m0fEcIouEhoOPBoQx43GNIT66+ysl7 0b8/wBNGYKlvRQIDAQABo4GbMIGYMB0GA1UdDgQWBBS73hTFkBqN1Cjb40AHwssb pYPVujBpBgNVHSMEYjBggBS73hTFkBqN1Cjb40AHwssbpYPVuqE9pDswOTELMAkG A1UEBhMCRlIxEDAOBgNVBAoTB09SSS1PQUkxGDAWBgNVBAMTD3d3dy5vcmktb2Fp Lm9yZ4IJANHRVBwSxdm/MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEA Kl8H6LPlnS7J3UNHOih4zYa4qmALt3R+VJFqodoTH08hkv95zb9ELtcxCAELcIUS uglQcqy4IgM2TZHVM5DrkltvVytqvKVT2N9p/gCJ0Mb0QAWcLhzjhKY1Sr2t8BPE c1gMllRGeFl1XPuPPRtX+B8D0Wovn3/XqTTZa8NPvrQ= urn:mace:shibboleth:1.0:nameIdentifier FARENEAU Florent fed-admin@univ-valenciennes.fr COLMANT Yohan yohan.colmant@univ-valenciennes.fr obspm.fr MIIDODCCAiCgAwIBAgIVAN6NefE7MNV1gsFFJM6ZXxl7ricmMA0GCSqGSIb3DQEB BQUAMB4xHDAaBgNVBAMTE3NoaWJib2xldGgub2JzcG0uZnIwHhcNMTEwMjAzMTYx NTIwWhcNMzEwMjAzMTYxNTIwWjAeMRwwGgYDVQQDExNzaGliYm9sZXRoLm9ic3Bt LmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAorMZSrDEOOO6Zvun +HTeRAYTSqd7FSq6F9ojEwPMs1wu6IREubuy8VdxUiPLawen20ZFp3X8XDCAQnWj qIq2EN4lmc8Ibtq6tVO6OjS5CilSmPw2pzyl1uc6Cipd/AemRahBzDHUPZgKJSSs vABRQDfalExfXUndgnYaROxMKHmrLdBUnHQO/8v0ZQQwXaHxFPCrMoA5FFF6D4Ro xrGhxR0TdDWXdyIat9ltvWIslziH+J1gGY+e1q5tmmAaZCeFdy/MthAhCxuTT64d E1+nXXT+6tUsI7mHc9/5Vusb4bc6UNxNKTECTB566qMK3CVq19JLrvl/ajzZoo1C 06pKywIDAQABo20wazBKBgNVHREEQzBBghNzaGliYm9sZXRoLm9ic3BtLmZyhipo dHRwczovL3NoaWJib2xldGgub2JzcG0uZnIvaWRwL3NoaWJib2xldGgwHQYDVR0O BBYEFI4fpndolWB8RsDA1fRZm87FZGxaMA0GCSqGSIb3DQEBBQUAA4IBAQABf7PS TBmzFMbWo85wif9s/cXjoDefSk3RltzARoLvIBxjeMR+xFanb4VeLLbMpVhoZDE/ EAgQgBZdfZ963sa65/a0MpPQ7c8CwWuVRLNAPFcbOusWMfCV5RGohCbkoPcRWhKy i7WmF8LW2bDPzHIIAJ0fJPEwsPD6MceV9aZgtnvcIax2zObATB9AO4e4HTm/QKPE Z95J8KjcXSTo7FeOLgY4AxTb4F4feNLZmFD0q06+CZLVZ46ZJBx4ISSobKypu6qE wOVcvEXq+Zt5q2+IQgg0Pxk+XEaEj0qq1JmZPrOGOq8wZES2ObjMbnFPwuoNZLMN 4JZ1jEbeKm7bdK4P urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Observatoire de Paris Observatoire de Paris http://unknown.site.com Etienne Vogt interne.admin.DIO@obspm.fr Emmanuel Halbwachs interne.admin.DIO@obspm.fr oca.eu MIIDIzCCAgugAwIBAgIUb2m08LvE9W3VR8JiF3KXtfDzBQgwDQYJKoZIhvcNAQEF BQAwGTEXMBUGA1UEAxMOc2hpYmlkcC5vY2EuZXUwHhcNMTAxMDEzMTUwNTU5WhcN MzAxMDEzMTUwNTU5WjAZMRcwFQYDVQQDEw5zaGliaWRwLm9jYS5ldTCCASIwDQYJ KoZIhvcNAQEBBQADggEPADCCAQoCggEBAJch2GWoe0f9KQu84EpK/UaZCvyDVGSj atkX9dUyvIRVeqADeN/A+NHFA7UwDrmvnsTQ1rC6vyfm+46JNkawAE+YrJwG8h+m V4cYzHXnPl5aVvy5RPsr7CEW/xCcPip4UAzbYqd1Gmfp8JsbcC+q4lms+Q8WQkjO 4wXgkPmDtGpGQmCVVEEJ0UT/dbOLt5SJAy/bTINKPufBji/woi4wpx0nHdsTUuM5 XFjdWaH8UqBmk8bjrH/YTkTcPF4WpjPcvGwzD8LH86+nGtfr+QX8MLHk1eImv/hc UL6Dwglyzj4SyQHsIjExhwrxmA4ldF0DxitVlXGEvvyLTh7yCYuQRysCAwEAAaNj MGEwQAYDVR0RBDkwN4IOc2hpYmlkcC5vY2EuZXWGJWh0dHBzOi8vc2hpYmlkcC5v Y2EuZXUvaWRwL3NoaWJib2xldGgwHQYDVR0OBBYEFNuKpM2Y1u4Q14JUiVMz6Bfy ez+dMA0GCSqGSIb3DQEBBQUAA4IBAQAjUgFHleriCf6AByX9WJFUBkwbwJW2j6b9 gJvaYGfnHhvimPyCY+MBeeG3oQbfAKHIomjOdLIpqr1FftML29+URQ5sZsJ/ZgFV EfjmwNT3i9HRI/bnkZ5o5VtB4aUm1j+icowmI+PLynPLJ2uoQoUyGzovPe6dOQjo mXEJ240DQJ3UsZ95VqxhCPMsOUiWWROEpNiCn4f1UG4WOm/c76Xk6UASVmz2dfkO 4EfGemsx8nr/QL9dFDSBxOxkg7xDjPRFO4Zpp5qLMJS75e5wjjrC6q/1IjBKc5s2 ckUl+LNjeMF9dzwuEGY3PpCQWEpe/lrWvagJwUm8QO8ixrc1AbBw urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Observatoire de la Côte d'Azur Observatoire de la Côte d'Azur http://unknown.site.com Jean-Philippe Ghibaudo sit-nice@oca.eu Jean-Michel Mercier sit-nice@oca.eu MIIE+DCCA+CgAwIBAgIQfNSD82OGzaBP4wni6TBSdTANBgkqhkiG9w0BAQUFADCB sDELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1c2Ug YXQgaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYSAoYykwNTEqMCgGA1UEAxMh VmVyaVNpZ24gQ2xhc3MgMyBTZWN1cmUgU2VydmVyIENBMB4XDTA5MDMyNDAwMDAw MFoXDTExMDMyNjIzNTk1OVowbDELMAkGA1UEBhMCVVMxDTALBgNVBAgTBFV0YWgx DjAMBgNVBAcUBVNhbmR5MSAwHgYDVQQKFBdPdmlkIFRlY2hub2xvZ2llcywgSW5j LjEcMBoGA1UEAxQTc2hpYmJvbGV0aC5vdmlkLmNvbTCBnzANBgkqhkiG9w0BAQEF AAOBjQAwgYkCgYEAsNV/dS8Q1rhxq0FLF1SxFT8tU1gHgqvqPTvG/wewJMZaj5Uq W3bmp6KOarpMvuT4VQ3Hj1825MyF+oF1dMikHZMTqqEk3pV0K/5IGnFlZk6LgmNR qv2MhpOD5TMPQiluIWq/YHHTeIV9tDJdAjQagGyg+5WlvfygpY9DX+64So8CAwEA AaOCAdMwggHPMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgWgMEQGA1UdHwQ9MDswOaA3 oDWGM2h0dHA6Ly9TVlJTZWN1cmUtY3JsLnZlcmlzaWduLmNvbS9TVlJTZWN1cmUy MDA1LmNybDBEBgNVHSAEPTA7MDkGC2CGSAGG+EUBBxcDMCowKAYIKwYBBQUHAgEW HGh0dHBzOi8vd3d3LnZlcmlzaWduLmNvbS9ycGEwHQYDVR0lBBYwFAYIKwYBBQUH AwEGCCsGAQUFBwMCMB8GA1UdIwQYMBaAFG/sr6DdiqTv9SoQZy0/VYK81+8lMHkG CCsGAQUFBwEBBG0wazAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AudmVyaXNpZ24u Y29tMEMGCCsGAQUFBzAChjdodHRwOi8vU1ZSU2VjdXJlLWFpYS52ZXJpc2lnbi5j b20vU1ZSU2VjdXJlMjAwNS1haWEuY2VyMG4GCCsGAQUFBwEMBGIwYKFeoFwwWjBY MFYWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFEtruSiWBgy70FI4mymsSweLIQUY MCYWJGh0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28xLmdpZjANBgkqhkiG 9w0BAQUFAAOCAQEAFhAFaf7Ibtf4KaWACzF6Zwv99IRALP4ZXU+Av+CyPM5klpAw L0l6U7zirVU8/iF1lZzy6C3NzPzjFBGbD1I1bGx5srGfSTQUDVsI0RNxRDqA/ZOM IpexlbZPdV8597MFW3QNOKCmequeT65twUzTaEHbS1z88Eg4mwnu4PfSiZ/ZdrGA 5pY1LnQWIivhtl7saMj+KnY35QvH/ddd51a5xukUWmV1CUorzQu5FkSOeF9PH/81 ewuJnjUzoIMN+jXRoHU4M9IUGEwl8CKivbikEeLlTQ5sTOt7L9WgG6Q7BPBXGxnp NxVaqdBgz0TgSngdNN6/5wsUkGH5aHgdHV5mlg== MIIE+DCCA+CgAwIBAgIQfNSD82OGzaBP4wni6TBSdTANBgkqhkiG9w0BAQUFADCB sDELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1c2Ug YXQgaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYSAoYykwNTEqMCgGA1UEAxMh VmVyaVNpZ24gQ2xhc3MgMyBTZWN1cmUgU2VydmVyIENBMB4XDTA5MDMyNDAwMDAw MFoXDTExMDMyNjIzNTk1OVowbDELMAkGA1UEBhMCVVMxDTALBgNVBAgTBFV0YWgx DjAMBgNVBAcUBVNhbmR5MSAwHgYDVQQKFBdPdmlkIFRlY2hub2xvZ2llcywgSW5j LjEcMBoGA1UEAxQTc2hpYmJvbGV0aC5vdmlkLmNvbTCBnzANBgkqhkiG9w0BAQEF AAOBjQAwgYkCgYEAsNV/dS8Q1rhxq0FLF1SxFT8tU1gHgqvqPTvG/wewJMZaj5Uq W3bmp6KOarpMvuT4VQ3Hj1825MyF+oF1dMikHZMTqqEk3pV0K/5IGnFlZk6LgmNR qv2MhpOD5TMPQiluIWq/YHHTeIV9tDJdAjQagGyg+5WlvfygpY9DX+64So8CAwEA AaOCAdMwggHPMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgWgMEQGA1UdHwQ9MDswOaA3 oDWGM2h0dHA6Ly9TVlJTZWN1cmUtY3JsLnZlcmlzaWduLmNvbS9TVlJTZWN1cmUy MDA1LmNybDBEBgNVHSAEPTA7MDkGC2CGSAGG+EUBBxcDMCowKAYIKwYBBQUHAgEW HGh0dHBzOi8vd3d3LnZlcmlzaWduLmNvbS9ycGEwHQYDVR0lBBYwFAYIKwYBBQUH AwEGCCsGAQUFBwMCMB8GA1UdIwQYMBaAFG/sr6DdiqTv9SoQZy0/VYK81+8lMHkG CCsGAQUFBwEBBG0wazAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AudmVyaXNpZ24u Y29tMEMGCCsGAQUFBzAChjdodHRwOi8vU1ZSU2VjdXJlLWFpYS52ZXJpc2lnbi5j b20vU1ZSU2VjdXJlMjAwNS1haWEuY2VyMG4GCCsGAQUFBwEMBGIwYKFeoFwwWjBY MFYWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFEtruSiWBgy70FI4mymsSweLIQUY MCYWJGh0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28xLmdpZjANBgkqhkiG 9w0BAQUFAAOCAQEAFhAFaf7Ibtf4KaWACzF6Zwv99IRALP4ZXU+Av+CyPM5klpAw L0l6U7zirVU8/iF1lZzy6C3NzPzjFBGbD1I1bGx5srGfSTQUDVsI0RNxRDqA/ZOM IpexlbZPdV8597MFW3QNOKCmequeT65twUzTaEHbS1z88Eg4mwnu4PfSiZ/ZdrGA 5pY1LnQWIivhtl7saMj+KnY35QvH/ddd51a5xukUWmV1CUorzQu5FkSOeF9PH/81 ewuJnjUzoIMN+jXRoHU4M9IUGEwl8CKivbikEeLlTQ5sTOt7L9WgG6Q7BPBXGxnp NxVaqdBgz0TgSngdNN6/5wsUkGH5aHgdHV5mlg== urn:mace:shibboleth:1.0:nameIdentifier Eric COLTEAU support@ovid.com Sebastien BLANC sebastien.blanc@wolterskluwer.com MIIDjzCCAvigAwIBAgIDE2llMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0 aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTAwNjE1MDgyMzA1WhcNMTEwNjE3MjIzMDEy WjCB9TEpMCcGA1UEBRMgc1dtTE9QaC9MR3VpdmFFV1U3dmJxTTExZERzbEdORFMx CzAJBgNVBAYTAlVTMSAwHgYDVQQKExdzaGliYm9sZXRoLmhpZ2h3aXJlLm9yZzET MBEGA1UECxMKR1QyNTQ2ODg0MzExMC8GA1UECxMoU2VlIHd3dy5nZW90cnVzdC5j b20vcmVzb3VyY2VzL2NwcyAoYykxMDEvMC0GA1UECxMmRG9tYWluIENvbnRyb2wg VmFsaWRhdGVkIC0gUXVpY2tTU0woUikxIDAeBgNVBAMTF3NoaWJib2xldGguaGln aHdpcmUub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCzSPN2X9bk5MHB f6mUZ/CvBKfgEn46C7GnyzhKuEhsmppVKCxPenesKPvSmxpWWz7/Iwqusq7WHR0Z yVz4qHAyNPmN3U9HHGUeDlU1FZF9xltfzwoYcHJrSDXkSMAoV654f7L4wesBVSjj nPzmbIJlSbKYBbDFY60+dRlSwpRJ1wIDAQABo4HSMIHPMB8GA1UdIwQYMBaAFEjm aPkr0rKV10fYIyAQTzOYkJ/UMA4GA1UdDwEB/wQEAwIE8DAdBgNVHSUEFjAUBggr BgEFBQcDAQYIKwYBBQUHAwIwIgYDVR0RBBswGYIXc2hpYmJvbGV0aC5oaWdod2ly ZS5vcmcwOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC5nZW90cnVzdC5jb20v Y3Jscy9zZWN1cmVjYS5jcmwwHQYDVR0OBBYEFKEHn+uq2uvGkQRbITzHGnUL2a7z MA0GCSqGSIb3DQEBBQUAA4GBAEPaX1aKQj5ePOM8rAGI+T43+f/53tE5ga2O8kvg a4P5WEjXn8A4vnNSHRAHuj5qye0R8f2dqnNHH2znsw1ZMDuUERXn7mqrq6dqWiSq W2YFcT09X+2GlGNmhKY9VxhZH5szboc5IPWil9GpubtQ9cfz8ukLTaAwklS2wn1Y oZQx MIIDjzCCAvigAwIBAgIDE2llMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0 aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTAwNjE1MDgyMzA1WhcNMTEwNjE3MjIzMDEy WjCB9TEpMCcGA1UEBRMgc1dtTE9QaC9MR3VpdmFFV1U3dmJxTTExZERzbEdORFMx CzAJBgNVBAYTAlVTMSAwHgYDVQQKExdzaGliYm9sZXRoLmhpZ2h3aXJlLm9yZzET MBEGA1UECxMKR1QyNTQ2ODg0MzExMC8GA1UECxMoU2VlIHd3dy5nZW90cnVzdC5j b20vcmVzb3VyY2VzL2NwcyAoYykxMDEvMC0GA1UECxMmRG9tYWluIENvbnRyb2wg VmFsaWRhdGVkIC0gUXVpY2tTU0woUikxIDAeBgNVBAMTF3NoaWJib2xldGguaGln aHdpcmUub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCzSPN2X9bk5MHB f6mUZ/CvBKfgEn46C7GnyzhKuEhsmppVKCxPenesKPvSmxpWWz7/Iwqusq7WHR0Z yVz4qHAyNPmN3U9HHGUeDlU1FZF9xltfzwoYcHJrSDXkSMAoV654f7L4wesBVSjj nPzmbIJlSbKYBbDFY60+dRlSwpRJ1wIDAQABo4HSMIHPMB8GA1UdIwQYMBaAFEjm aPkr0rKV10fYIyAQTzOYkJ/UMA4GA1UdDwEB/wQEAwIE8DAdBgNVHSUEFjAUBggr BgEFBQcDAQYIKwYBBQUHAwIwIgYDVR0RBBswGYIXc2hpYmJvbGV0aC5oaWdod2ly ZS5vcmcwOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC5nZW90cnVzdC5jb20v Y3Jscy9zZWN1cmVjYS5jcmwwHQYDVR0OBBYEFKEHn+uq2uvGkQRbITzHGnUL2a7z MA0GCSqGSIb3DQEBBQUAA4GBAEPaX1aKQj5ePOM8rAGI+T43+f/53tE5ga2O8kvg a4P5WEjXn8A4vnNSHRAHuj5qye0R8f2dqnNHH2znsw1ZMDuUERXn7mqrq6dqWiSq W2YFcT09X+2GlGNmhKY9VxhZH5szboc5IPWil9GpubtQ9cfz8ukLTaAwklS2wn1Y oZQx urn:mace:shibboleth:1.0:nameIdentifier Ryan Krebs shibboleth-admin@highwire.stanford.edu MIIDjzCCAvigAwIBAgIDE2llMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0 aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTAwNjE1MDgyMzA1WhcNMTEwNjE3MjIzMDEy WjCB9TEpMCcGA1UEBRMgc1dtTE9QaC9MR3VpdmFFV1U3dmJxTTExZERzbEdORFMx CzAJBgNVBAYTAlVTMSAwHgYDVQQKExdzaGliYm9sZXRoLmhpZ2h3aXJlLm9yZzET MBEGA1UECxMKR1QyNTQ2ODg0MzExMC8GA1UECxMoU2VlIHd3dy5nZW90cnVzdC5j b20vcmVzb3VyY2VzL2NwcyAoYykxMDEvMC0GA1UECxMmRG9tYWluIENvbnRyb2wg VmFsaWRhdGVkIC0gUXVpY2tTU0woUikxIDAeBgNVBAMTF3NoaWJib2xldGguaGln aHdpcmUub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCzSPN2X9bk5MHB f6mUZ/CvBKfgEn46C7GnyzhKuEhsmppVKCxPenesKPvSmxpWWz7/Iwqusq7WHR0Z yVz4qHAyNPmN3U9HHGUeDlU1FZF9xltfzwoYcHJrSDXkSMAoV654f7L4wesBVSjj nPzmbIJlSbKYBbDFY60+dRlSwpRJ1wIDAQABo4HSMIHPMB8GA1UdIwQYMBaAFEjm aPkr0rKV10fYIyAQTzOYkJ/UMA4GA1UdDwEB/wQEAwIE8DAdBgNVHSUEFjAUBggr BgEFBQcDAQYIKwYBBQUHAwIwIgYDVR0RBBswGYIXc2hpYmJvbGV0aC5oaWdod2ly ZS5vcmcwOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC5nZW90cnVzdC5jb20v Y3Jscy9zZWN1cmVjYS5jcmwwHQYDVR0OBBYEFKEHn+uq2uvGkQRbITzHGnUL2a7z MA0GCSqGSIb3DQEBBQUAA4GBAEPaX1aKQj5ePOM8rAGI+T43+f/53tE5ga2O8kvg a4P5WEjXn8A4vnNSHRAHuj5qye0R8f2dqnNHH2znsw1ZMDuUERXn7mqrq6dqWiSq W2YFcT09X+2GlGNmhKY9VxhZH5szboc5IPWil9GpubtQ9cfz8ukLTaAwklS2wn1Y oZQx MIIDjzCCAvigAwIBAgIDE2llMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0 aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTAwNjE1MDgyMzA1WhcNMTEwNjE3MjIzMDEy WjCB9TEpMCcGA1UEBRMgc1dtTE9QaC9MR3VpdmFFV1U3dmJxTTExZERzbEdORFMx CzAJBgNVBAYTAlVTMSAwHgYDVQQKExdzaGliYm9sZXRoLmhpZ2h3aXJlLm9yZzET MBEGA1UECxMKR1QyNTQ2ODg0MzExMC8GA1UECxMoU2VlIHd3dy5nZW90cnVzdC5j b20vcmVzb3VyY2VzL2NwcyAoYykxMDEvMC0GA1UECxMmRG9tYWluIENvbnRyb2wg VmFsaWRhdGVkIC0gUXVpY2tTU0woUikxIDAeBgNVBAMTF3NoaWJib2xldGguaGln aHdpcmUub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCzSPN2X9bk5MHB f6mUZ/CvBKfgEn46C7GnyzhKuEhsmppVKCxPenesKPvSmxpWWz7/Iwqusq7WHR0Z yVz4qHAyNPmN3U9HHGUeDlU1FZF9xltfzwoYcHJrSDXkSMAoV654f7L4wesBVSjj nPzmbIJlSbKYBbDFY60+dRlSwpRJ1wIDAQABo4HSMIHPMB8GA1UdIwQYMBaAFEjm aPkr0rKV10fYIyAQTzOYkJ/UMA4GA1UdDwEB/wQEAwIE8DAdBgNVHSUEFjAUBggr BgEFBQcDAQYIKwYBBQUHAwIwIgYDVR0RBBswGYIXc2hpYmJvbGV0aC5oaWdod2ly ZS5vcmcwOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC5nZW90cnVzdC5jb20v Y3Jscy9zZWN1cmVjYS5jcmwwHQYDVR0OBBYEFKEHn+uq2uvGkQRbITzHGnUL2a7z MA0GCSqGSIb3DQEBBQUAA4GBAEPaX1aKQj5ePOM8rAGI+T43+f/53tE5ga2O8kvg a4P5WEjXn8A4vnNSHRAHuj5qye0R8f2dqnNHH2znsw1ZMDuUERXn7mqrq6dqWiSq W2YFcT09X+2GlGNmhKY9VxhZH5szboc5IPWil9GpubtQ9cfz8ukLTaAwklS2wn1Y oZQx urn:mace:shibboleth:1.0:nameIdentifier Ryan Krebs shibboleth-admin@highwire.stanford.edu MIIDjzCCAvigAwIBAgIDE2llMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0 aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTAwNjE1MDgyMzA1WhcNMTEwNjE3MjIzMDEy WjCB9TEpMCcGA1UEBRMgc1dtTE9QaC9MR3VpdmFFV1U3dmJxTTExZERzbEdORFMx CzAJBgNVBAYTAlVTMSAwHgYDVQQKExdzaGliYm9sZXRoLmhpZ2h3aXJlLm9yZzET MBEGA1UECxMKR1QyNTQ2ODg0MzExMC8GA1UECxMoU2VlIHd3dy5nZW90cnVzdC5j b20vcmVzb3VyY2VzL2NwcyAoYykxMDEvMC0GA1UECxMmRG9tYWluIENvbnRyb2wg VmFsaWRhdGVkIC0gUXVpY2tTU0woUikxIDAeBgNVBAMTF3NoaWJib2xldGguaGln aHdpcmUub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCzSPN2X9bk5MHB f6mUZ/CvBKfgEn46C7GnyzhKuEhsmppVKCxPenesKPvSmxpWWz7/Iwqusq7WHR0Z yVz4qHAyNPmN3U9HHGUeDlU1FZF9xltfzwoYcHJrSDXkSMAoV654f7L4wesBVSjj nPzmbIJlSbKYBbDFY60+dRlSwpRJ1wIDAQABo4HSMIHPMB8GA1UdIwQYMBaAFEjm aPkr0rKV10fYIyAQTzOYkJ/UMA4GA1UdDwEB/wQEAwIE8DAdBgNVHSUEFjAUBggr BgEFBQcDAQYIKwYBBQUHAwIwIgYDVR0RBBswGYIXc2hpYmJvbGV0aC5oaWdod2ly ZS5vcmcwOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC5nZW90cnVzdC5jb20v Y3Jscy9zZWN1cmVjYS5jcmwwHQYDVR0OBBYEFKEHn+uq2uvGkQRbITzHGnUL2a7z MA0GCSqGSIb3DQEBBQUAA4GBAEPaX1aKQj5ePOM8rAGI+T43+f/53tE5ga2O8kvg a4P5WEjXn8A4vnNSHRAHuj5qye0R8f2dqnNHH2znsw1ZMDuUERXn7mqrq6dqWiSq W2YFcT09X+2GlGNmhKY9VxhZH5szboc5IPWil9GpubtQ9cfz8ukLTaAwklS2wn1Y oZQx MIIDjzCCAvigAwIBAgIDE2llMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0 aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTAwNjE1MDgyMzA1WhcNMTEwNjE3MjIzMDEy WjCB9TEpMCcGA1UEBRMgc1dtTE9QaC9MR3VpdmFFV1U3dmJxTTExZERzbEdORFMx CzAJBgNVBAYTAlVTMSAwHgYDVQQKExdzaGliYm9sZXRoLmhpZ2h3aXJlLm9yZzET MBEGA1UECxMKR1QyNTQ2ODg0MzExMC8GA1UECxMoU2VlIHd3dy5nZW90cnVzdC5j b20vcmVzb3VyY2VzL2NwcyAoYykxMDEvMC0GA1UECxMmRG9tYWluIENvbnRyb2wg VmFsaWRhdGVkIC0gUXVpY2tTU0woUikxIDAeBgNVBAMTF3NoaWJib2xldGguaGln aHdpcmUub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCzSPN2X9bk5MHB f6mUZ/CvBKfgEn46C7GnyzhKuEhsmppVKCxPenesKPvSmxpWWz7/Iwqusq7WHR0Z yVz4qHAyNPmN3U9HHGUeDlU1FZF9xltfzwoYcHJrSDXkSMAoV654f7L4wesBVSjj nPzmbIJlSbKYBbDFY60+dRlSwpRJ1wIDAQABo4HSMIHPMB8GA1UdIwQYMBaAFEjm aPkr0rKV10fYIyAQTzOYkJ/UMA4GA1UdDwEB/wQEAwIE8DAdBgNVHSUEFjAUBggr BgEFBQcDAQYIKwYBBQUHAwIwIgYDVR0RBBswGYIXc2hpYmJvbGV0aC5oaWdod2ly ZS5vcmcwOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC5nZW90cnVzdC5jb20v Y3Jscy9zZWN1cmVjYS5jcmwwHQYDVR0OBBYEFKEHn+uq2uvGkQRbITzHGnUL2a7z MA0GCSqGSIb3DQEBBQUAA4GBAEPaX1aKQj5ePOM8rAGI+T43+f/53tE5ga2O8kvg a4P5WEjXn8A4vnNSHRAHuj5qye0R8f2dqnNHH2znsw1ZMDuUERXn7mqrq6dqWiSq W2YFcT09X+2GlGNmhKY9VxhZH5szboc5IPWil9GpubtQ9cfz8ukLTaAwklS2wn1Y oZQx urn:mace:shibboleth:1.0:nameIdentifier Ryan Krebs shibboleth-admin@highwire.stanford.edu nancy-universite.fr univ-nancy2.fr uhp-nancy.fr inpl-nancy.fr MIIDRzCCAi+gAwIBAgIUFzVpIPxkSJrsvcKbaDbm+Q/jKmcwDQYJKoZIhvcNAQEF BQAwIjEgMB4GA1UEAxMXaWRwLm5hbmN5LXVuaXZlcnNpdGUuZnIwHhcNMDkwMjIz MTQ0OTA1WhcNMjkwMjIzMTQ0OTA1WjAiMSAwHgYDVQQDExdpZHAubmFuY3ktdW5p dmVyc2l0ZS5mcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadIV1Q 0vLW4DiqqLlVWEDu8WUJD7V90qqrtJ/FI6fmfhod2BKukXUy5+ZeUPXQRwmf8qZN ZP/GUeP4z/O7cGpa2bnnjxk79BHnblPjK6xdxQE0Z5ZglhAuPvclZL9ey8RaUG/v DsX05tzFnXbTXyNMr25lKlci7d9GHHm6kPe/OL5SJwxkmSY59+iZL7ai0oumnpv9 CSs00Ms5ZL53t/ppYQqn3mqV5SkYV74GXh8HNFsF2jTIz5aQzV13DQKocya6P9sE 6wdj63/9IV1CUtEHRaWhJWIaK56wd3AbTFjIKhO7FN+l+Lo3qupecZhCWHmINjSC W4HwRsBmNZldLtkCAwEAAaN1MHMwUgYDVR0RBEswSYIXaWRwLm5hbmN5LXVuaXZl cnNpdGUuZnKGLmh0dHBzOi8vaWRwLm5hbmN5LXVuaXZlcnNpdGUuZnIvaWRwL3No aWJib2xldGgwHQYDVR0OBBYEFJAeeNTni2ijryH3NQRgSHYf6LRdMA0GCSqGSIb3 DQEBBQUAA4IBAQBAIoI4bC3TyNFgTDOmNedw9PqMjqrAg4u2PcFZ7Azsf9j+Monq p/qFyTrs/TEWnzUkaoWDGcV83zUkT4BnPcVgmA8kj0tWYA+r0cSIGs0yTE14H7WQ xhf4r4MP5xwG8fJg/ORKYS1Mqp8N5b4WEUPNfGcwtDYVAFAqYDAO6s13WJbOQLCi ojPRw9K4i0XNCD+mYx64Rx/kbVTVnfgiBuPOatHuEFgMfN8Q8WthSVRHs/DO/ca8 ECym6Va+w/chewJA3NcTbjEsK+w3ZbqwcsD+cP3AQP129mW4YnM8gmVHGCGXYppE ZvebKJUlCEYnW7OiLMjN9VNG5AqgFUGd1Bgm urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient nancy-universite.fr univ-nancy2.fr uhp-nancy.fr inpl-nancy.fr MIIDRzCCAi+gAwIBAgIUFzVpIPxkSJrsvcKbaDbm+Q/jKmcwDQYJKoZIhvcNAQEF BQAwIjEgMB4GA1UEAxMXaWRwLm5hbmN5LXVuaXZlcnNpdGUuZnIwHhcNMDkwMjIz MTQ0OTA1WhcNMjkwMjIzMTQ0OTA1WjAiMSAwHgYDVQQDExdpZHAubmFuY3ktdW5p dmVyc2l0ZS5mcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadIV1Q 0vLW4DiqqLlVWEDu8WUJD7V90qqrtJ/FI6fmfhod2BKukXUy5+ZeUPXQRwmf8qZN ZP/GUeP4z/O7cGpa2bnnjxk79BHnblPjK6xdxQE0Z5ZglhAuPvclZL9ey8RaUG/v DsX05tzFnXbTXyNMr25lKlci7d9GHHm6kPe/OL5SJwxkmSY59+iZL7ai0oumnpv9 CSs00Ms5ZL53t/ppYQqn3mqV5SkYV74GXh8HNFsF2jTIz5aQzV13DQKocya6P9sE 6wdj63/9IV1CUtEHRaWhJWIaK56wd3AbTFjIKhO7FN+l+Lo3qupecZhCWHmINjSC W4HwRsBmNZldLtkCAwEAAaN1MHMwUgYDVR0RBEswSYIXaWRwLm5hbmN5LXVuaXZl cnNpdGUuZnKGLmh0dHBzOi8vaWRwLm5hbmN5LXVuaXZlcnNpdGUuZnIvaWRwL3No aWJib2xldGgwHQYDVR0OBBYEFJAeeNTni2ijryH3NQRgSHYf6LRdMA0GCSqGSIb3 DQEBBQUAA4IBAQBAIoI4bC3TyNFgTDOmNedw9PqMjqrAg4u2PcFZ7Azsf9j+Monq p/qFyTrs/TEWnzUkaoWDGcV83zUkT4BnPcVgmA8kj0tWYA+r0cSIGs0yTE14H7WQ xhf4r4MP5xwG8fJg/ORKYS1Mqp8N5b4WEUPNfGcwtDYVAFAqYDAO6s13WJbOQLCi ojPRw9K4i0XNCD+mYx64Rx/kbVTVnfgiBuPOatHuEFgMfN8Q8WthSVRHs/DO/ca8 ECym6Va+w/chewJA3NcTbjEsK+w3ZbqwcsD+cP3AQP129mW4YnM8gmVHGCGXYppE ZvebKJUlCEYnW7OiLMjN9VNG5AqgFUGd1Bgm urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient PRES Nancy Université PRES Nancy Université http://unknown.site.com Vincent MATHIEU contact-fed@univ-nancy2.fr Hugues ROUXEL contact-fed@univ-nancy2.fr MIIEnTCCA4WgAwIBAgIQaz7iGiPWHZqygWm+G089rTANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTA5MTIwODAwMDAwMFoXDTEyMTIwNzIzNTk1OVowbjELMAkGA1UE BhMCRlIxCzAJBgNVBAgTAmZyMQ8wDQYDVQQHEwZSRU5ORVMxHDAaBgNVBAoTE1VO SVZFUlNJVEUgUkVOTkVTIDExIzAhBgNVBAMTGnBhc3NlcmVsbGUudW5pdi1yZW5u ZXMxLmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1MPJ1OqwO/8z WlWZa9SrQFiKKASgDAP6XW+3K4qCxg+nbRWE51twFiwG/mFNBaPTyPm47kBZM23v 4mFnO7znZj2Gvwpm5/OfPGR2ub62E0Ou76ODYfs8qHqyHW8LMm4xpPF6pGVFT2N1 RjidOweM2X8L5tAA3ibZ5OjqHVznhWnTwj+TgjTAJTRzjiNPV1bZsShz16URU/CK xwS9FdJLmyBP/dvxxu1RLmOBAchLqZGiHaAgorOOmk3XMSVV4j7Y1chZCR+yvEO/ G5fMVWGD0lTLA1eGClcaxtMQLDHJNOxeEjDhXooG5pWkIHfC22hlGvZ1Wcd1N7iS eiEt0MkotwIDAQABo4IBbTCCAWkwHwYDVR0jBBgwFoAUDL2TaAzz3qujSWsrN1dH 6pDjue0wHQYDVR0OBBYEFDEANx/5jMCtBhmj4dTaNoGhT/qIMA4GA1UdDwEB/wQE AwIFoDAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcD AjAYBgNVHSAEETAPMA0GCysGAQQBsjEBAgIdMDoGA1UdHwQzMDEwL6AtoCuGKWh0 dHA6Ly9jcmwudGNzLnRlcmVuYS5vcmcvVEVSRU5BU1NMQ0EuY3JsMG0GCCsGAQUF BwEBBGEwXzA1BggrBgEFBQcwAoYpaHR0cDovL2NydC50Y3MudGVyZW5hLm9yZy9U RVJFTkFTU0xDQS5jcnQwJgYIKwYBBQUHMAGGGmh0dHA6Ly9vY3NwLnRjcy50ZXJl bmEub3JnMCUGA1UdEQQeMByCGnBhc3NlcmVsbGUudW5pdi1yZW5uZXMxLmZyMA0G CSqGSIb3DQEBBQUAA4IBAQBq10awdRRkX/5w096CBpcLHrQHXHtFTpMFVSZdm5mF J8/yKsOvfgtG6RRAKotUa7lRuhPeEpNMS0QJf/K8mdN/FzjKIM79kaSXCNezNAQP 1mqSnAbv03I9vOH2ovYf+Hzf0VRwE+NZhR+RsWLwelEP4K+y3yESx5GgbDSZHAbV ir699tTzy3pNqlvzXt0CVz7JWlp+cZ2799t4LrXQrrojzhCoJ1QR04Ve09wqleKX j1D+gSbM4FHd/UFYfnZcTbyUn1J2VsR2fMxbcX2IWR+eukqDxhd+NqmWFLOS+wRR Ysgy+GQJ8U3NUR4UEiaeNkMANrsQJGnycOIahj+0tNsI MIIEnTCCA4WgAwIBAgIQaz7iGiPWHZqygWm+G089rTANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTA5MTIwODAwMDAwMFoXDTEyMTIwNzIzNTk1OVowbjELMAkGA1UE BhMCRlIxCzAJBgNVBAgTAmZyMQ8wDQYDVQQHEwZSRU5ORVMxHDAaBgNVBAoTE1VO SVZFUlNJVEUgUkVOTkVTIDExIzAhBgNVBAMTGnBhc3NlcmVsbGUudW5pdi1yZW5u ZXMxLmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1MPJ1OqwO/8z WlWZa9SrQFiKKASgDAP6XW+3K4qCxg+nbRWE51twFiwG/mFNBaPTyPm47kBZM23v 4mFnO7znZj2Gvwpm5/OfPGR2ub62E0Ou76ODYfs8qHqyHW8LMm4xpPF6pGVFT2N1 RjidOweM2X8L5tAA3ibZ5OjqHVznhWnTwj+TgjTAJTRzjiNPV1bZsShz16URU/CK xwS9FdJLmyBP/dvxxu1RLmOBAchLqZGiHaAgorOOmk3XMSVV4j7Y1chZCR+yvEO/ G5fMVWGD0lTLA1eGClcaxtMQLDHJNOxeEjDhXooG5pWkIHfC22hlGvZ1Wcd1N7iS eiEt0MkotwIDAQABo4IBbTCCAWkwHwYDVR0jBBgwFoAUDL2TaAzz3qujSWsrN1dH 6pDjue0wHQYDVR0OBBYEFDEANx/5jMCtBhmj4dTaNoGhT/qIMA4GA1UdDwEB/wQE AwIFoDAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcD AjAYBgNVHSAEETAPMA0GCysGAQQBsjEBAgIdMDoGA1UdHwQzMDEwL6AtoCuGKWh0 dHA6Ly9jcmwudGNzLnRlcmVuYS5vcmcvVEVSRU5BU1NMQ0EuY3JsMG0GCCsGAQUF BwEBBGEwXzA1BggrBgEFBQcwAoYpaHR0cDovL2NydC50Y3MudGVyZW5hLm9yZy9U RVJFTkFTU0xDQS5jcnQwJgYIKwYBBQUHMAGGGmh0dHA6Ly9vY3NwLnRjcy50ZXJl bmEub3JnMCUGA1UdEQQeMByCGnBhc3NlcmVsbGUudW5pdi1yZW5uZXMxLmZyMA0G CSqGSIb3DQEBBQUAA4IBAQBq10awdRRkX/5w096CBpcLHrQHXHtFTpMFVSZdm5mF J8/yKsOvfgtG6RRAKotUa7lRuhPeEpNMS0QJf/K8mdN/FzjKIM79kaSXCNezNAQP 1mqSnAbv03I9vOH2ovYf+Hzf0VRwE+NZhR+RsWLwelEP4K+y3yESx5GgbDSZHAbV ir699tTzy3pNqlvzXt0CVz7JWlp+cZ2799t4LrXQrrojzhCoJ1QR04Ve09wqleKX j1D+gSbM4FHd/UFYfnZcTbyUn1J2VsR2fMxbcX2IWR+eukqDxhd+NqmWFLOS+wRR Ysgy+GQJ8U3NUR4UEiaeNkMANrsQJGnycOIahj+0tNsI Sébastien Bilbeau fed-admin@listes.univ-rennes1.fr Raymond Bourges raymond.bourges@univ-rennes1.fr MIIEjjCCA3agAwIBAgIRAPoNImxFB73YbecoV+Yf5PgwDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0xMDA2MjQwMDAwMDBaFw0xMzA2MjMyMzU5NTlaMGgxCzAJBgNV BAYTAkZSMQ4wDAYDVQQHEwVEaWpvbjEWMBQGA1UEChMNQWdyb3N1cCBEaWpvbjEW MBQGA1UECxMNRWR1dGVyLUNORVJUQTEZMBcGA1UEAxMQdXZlZC5lZHVjYWdyaS5m cjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL8Kf8zgR6s7iLi0FK2X poCju74sy76xbYsxHTMeEYcNaiPTq5R8NmdaBSZZ/s1KYV/EFsVf97oc8k05zsMO TRpAp46UGhCXIW21RW1XsmeK1Wvh3ux+bmsoM7XYhpL0/4Fu01pa4u27rsX1vqDb ix1ijMr+ZWXXo4gd9GVfBK8fkm6sssMbTjZno9M16tquzzNFgg64FY0bsg9Wzr4S 0O+CIjQq63Nq5uCdCHNQY5I9MrGhvt8OAaKhxMbE4I5WYlXNXpxp5ct6TgtG+0Jz GRu6InpDiMBjB1M5b9f6MMBdFLnky8OWx/3K6ClJjSy9RJPbo/PCiZpX4OJ64qtg P2MCAwEAAaOCAWMwggFfMB8GA1UdIwQYMBaAFAy9k2gM896ro0lrKzdXR+qQ47nt MB0GA1UdDgQWBBRk9ejHJL51FXk8G5AZL/NG+P8cjjAOBgNVHQ8BAf8EBAMCBaAw DAYDVR0TAQH/BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwGAYD VR0gBBEwDzANBgsrBgEEAbIxAQICHTA6BgNVHR8EMzAxMC+gLaArhilodHRwOi8v Y3JsLnRjcy50ZXJlbmEub3JnL1RFUkVOQVNTTENBLmNybDBtBggrBgEFBQcBAQRh MF8wNQYIKwYBBQUHMAKGKWh0dHA6Ly9jcnQudGNzLnRlcmVuYS5vcmcvVEVSRU5B U1NMQ0EuY3J0MCYGCCsGAQUFBzABhhpodHRwOi8vb2NzcC50Y3MudGVyZW5hLm9y ZzAbBgNVHREEFDASghB1dmVkLmVkdWNhZ3JpLmZyMA0GCSqGSIb3DQEBBQUAA4IB AQCQhFA9nhoN/DM+8eU1zC/NmELkL1yuPuLHISpp+XpelhwAn+lvxch5GRRBNj1W 8JTkSxTWpNP7Xp5gfc3ivZ66LCWemmZgJBXAd4LA6mJOjEDx7OMuiN4r2zBKqhYZ D/fI8b8yJIrNcsHl8cTZb9coFs+ZfJQB004Mks5koTq+5ptKfavxX9mHjAMc6gg7 kK+942Qi5wmk/mc2mZUERX75XRbOsmcMMPmfDh0BHdWVfxaJXph2wL/uhreChz4i 5X6zI13YN/rnV5OgM0O/qgfKunLFIXPuxjKCZxmTBWzZEWMt6VA0jEHhvSq6+gtA S9ix06iZ4jle1yhK/UhjJtmP MIIEjjCCA3agAwIBAgIRAPoNImxFB73YbecoV+Yf5PgwDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0xMDA2MjQwMDAwMDBaFw0xMzA2MjMyMzU5NTlaMGgxCzAJBgNV BAYTAkZSMQ4wDAYDVQQHEwVEaWpvbjEWMBQGA1UEChMNQWdyb3N1cCBEaWpvbjEW MBQGA1UECxMNRWR1dGVyLUNORVJUQTEZMBcGA1UEAxMQdXZlZC5lZHVjYWdyaS5m cjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL8Kf8zgR6s7iLi0FK2X poCju74sy76xbYsxHTMeEYcNaiPTq5R8NmdaBSZZ/s1KYV/EFsVf97oc8k05zsMO TRpAp46UGhCXIW21RW1XsmeK1Wvh3ux+bmsoM7XYhpL0/4Fu01pa4u27rsX1vqDb ix1ijMr+ZWXXo4gd9GVfBK8fkm6sssMbTjZno9M16tquzzNFgg64FY0bsg9Wzr4S 0O+CIjQq63Nq5uCdCHNQY5I9MrGhvt8OAaKhxMbE4I5WYlXNXpxp5ct6TgtG+0Jz GRu6InpDiMBjB1M5b9f6MMBdFLnky8OWx/3K6ClJjSy9RJPbo/PCiZpX4OJ64qtg P2MCAwEAAaOCAWMwggFfMB8GA1UdIwQYMBaAFAy9k2gM896ro0lrKzdXR+qQ47nt MB0GA1UdDgQWBBRk9ejHJL51FXk8G5AZL/NG+P8cjjAOBgNVHQ8BAf8EBAMCBaAw DAYDVR0TAQH/BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwGAYD VR0gBBEwDzANBgsrBgEEAbIxAQICHTA6BgNVHR8EMzAxMC+gLaArhilodHRwOi8v Y3JsLnRjcy50ZXJlbmEub3JnL1RFUkVOQVNTTENBLmNybDBtBggrBgEFBQcBAQRh MF8wNQYIKwYBBQUHMAKGKWh0dHA6Ly9jcnQudGNzLnRlcmVuYS5vcmcvVEVSRU5B U1NMQ0EuY3J0MCYGCCsGAQUFBzABhhpodHRwOi8vb2NzcC50Y3MudGVyZW5hLm9y ZzAbBgNVHREEFDASghB1dmVkLmVkdWNhZ3JpLmZyMA0GCSqGSIb3DQEBBQUAA4IB AQCQhFA9nhoN/DM+8eU1zC/NmELkL1yuPuLHISpp+XpelhwAn+lvxch5GRRBNj1W 8JTkSxTWpNP7Xp5gfc3ivZ66LCWemmZgJBXAd4LA6mJOjEDx7OMuiN4r2zBKqhYZ D/fI8b8yJIrNcsHl8cTZb9coFs+ZfJQB004Mks5koTq+5ptKfavxX9mHjAMc6gg7 kK+942Qi5wmk/mc2mZUERX75XRbOsmcMMPmfDh0BHdWVfxaJXph2wL/uhreChz4i 5X6zI13YN/rnV5OgM0O/qgfKunLFIXPuxjKCZxmTBWzZEWMt6VA0jEHhvSq6+gtA S9ix06iZ4jle1yhK/UhjJtmP urn:mace:shibboleth:1.0:nameIdentifier Khalid Farrahe Khalid.Farrahe@educagri.fr MIICLDCCAZWgAwIBAgIGASs0V3flMA0GCSqGSIb3DQEBBQUAMCoxEzARBgNVBAoMCmtleW1hbmFn ZXIxEzARBgNVBAsMCm9pb3NhbWwtc3AwHhcNMTAwOTIxMTI0OTI5WhcNMjAwOTE4MTI0OTI5WjBF MS4wLAYDVQQDDCVodHRwOi8vc2FtbC51bnBpZGYtbmV3LnVuaXYtcGFyaXMxLmZyMRMwEQYDVQQL DApvaW9zYW1sLXNwMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCDNLajLvYzlH5YYnEooUZI mKEkZoEK1Hp5Whn5VD0tgoUlSgjMl5ZftlJft7mYs19om9RKxGW4Csbv6zlUbQk78zQOfl5SIRWO uMNaGjtsWPkrF9/tWZZ3ctQwtIusuI2vHzIoLzGaBAN3JS0e2r93qFME4J/e0uVnk1gUA8oKuwID AQABo0IwQDAdBgNVHQ4EFgQUTJWm5b60D9FsJT3fiuZxrjTt3mUwHwYDVR0jBBgwFoAUTJWm5b60 D9FsJT3fiuZxrjTt3mUwDQYJKoZIhvcNAQEFBQADgYEAMtkKyHQ9kuomDOeO5uE2ck/BmwPYkcR/ WaLH3IcwUb0nqrOZvcqgnKOa7mesZaDUvzOJm4VxFIr8K9PC/58FQfsq7MUiTwlWvRZkKlNmbpJb a8uRd8iDGFMuBp6kIv35sX97H3YVuSgBPi7xjGMdOP0dhoHFGv7iPYbQIXklsZQ= MIICLDCCAZWgAwIBAgIGASs0V3flMA0GCSqGSIb3DQEBBQUAMCoxEzARBgNVBAoMCmtleW1hbmFn ZXIxEzARBgNVBAsMCm9pb3NhbWwtc3AwHhcNMTAwOTIxMTI0OTI5WhcNMjAwOTE4MTI0OTI5WjBF MS4wLAYDVQQDDCVodHRwOi8vc2FtbC51bnBpZGYtbmV3LnVuaXYtcGFyaXMxLmZyMRMwEQYDVQQL DApvaW9zYW1sLXNwMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCDNLajLvYzlH5YYnEooUZI mKEkZoEK1Hp5Whn5VD0tgoUlSgjMl5ZftlJft7mYs19om9RKxGW4Csbv6zlUbQk78zQOfl5SIRWO uMNaGjtsWPkrF9/tWZZ3ctQwtIusuI2vHzIoLzGaBAN3JS0e2r93qFME4J/e0uVnk1gUA8oKuwID AQABo0IwQDAdBgNVHQ4EFgQUTJWm5b60D9FsJT3fiuZxrjTt3mUwHwYDVR0jBBgwFoAUTJWm5b60 D9FsJT3fiuZxrjTt3mUwDQYJKoZIhvcNAQEFBQADgYEAMtkKyHQ9kuomDOeO5uE2ck/BmwPYkcR/ WaLH3IcwUb0nqrOZvcqgnKOa7mesZaDUvzOJm4VxFIr8K9PC/58FQfsq7MUiTwlWvRZkKlNmbpJb a8uRd8iDGFMuBp6kIv35sX97H3YVuSgBPi7xjGMdOP0dhoHFGv7iPYbQIXklsZQ= Benoit Branciard secusup@univ-paris1.fr MIICIjCCAYugAwIBAgIGASNVeUrVMA0GCSqGSIb3DQEBBQUAMCoxEzARBgNVBAoMCmtleW1hbmFn ZXIxEzARBgNVBAsMCm9pb3NhbWwtc3AwHhcNMDkwODI2MDY1MTM1WhcNMTkwODI0MDY1MTM1WjA7 MSQwIgYDVQQDDBtodHRwOi8vc2FtbC53d3cucGVjLXVuaXYuZnIxEzARBgNVBAsMCm9pb3NhbWwt c3AwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAIvFZ+zykv0vCoOmDlMQn5p73XULu8PeJhme n6/bLL4D0gyXYg+O5jdGqacmIkU6CKwJPu8zbur7S4/7Haw6z1f3k2sXCXtOt/0NawekxGD24JBY d75KGY7Ti6Pcl1pwrxCZoQdYNTH5RB1ckn/dDOozwtQ8bNHN7LS4SsJ9cLYlAgMBAAGjQjBAMB0G A1UdDgQWBBTu0somcZXNb8eweUN9Qnfo3VDIgDAfBgNVHSMEGDAWgBTu0somcZXNb8eweUN9Qnfo 3VDIgDANBgkqhkiG9w0BAQUFAAOBgQBYxc8Nci6PDIePEJLdQp2A7w+nTQSfaDhcTbbWvPVDLM25 P1meiq2b6VBbd3vW2AoRVZwZona2C4VtPkmIqGQ50wCxcFtT9J3jzT6eCrRe95iGetGjMZxQJ0tO 6KO5Iq6lwdFp82w92hOjvg4ruO0P6x0kNcebOe5la2A7VmmXoA== MIICIjCCAYugAwIBAgIGASNVeUrVMA0GCSqGSIb3DQEBBQUAMCoxEzARBgNVBAoMCmtleW1hbmFn ZXIxEzARBgNVBAsMCm9pb3NhbWwtc3AwHhcNMDkwODI2MDY1MTM1WhcNMTkwODI0MDY1MTM1WjA7 MSQwIgYDVQQDDBtodHRwOi8vc2FtbC53d3cucGVjLXVuaXYuZnIxEzARBgNVBAsMCm9pb3NhbWwt c3AwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAIvFZ+zykv0vCoOmDlMQn5p73XULu8PeJhme n6/bLL4D0gyXYg+O5jdGqacmIkU6CKwJPu8zbur7S4/7Haw6z1f3k2sXCXtOt/0NawekxGD24JBY d75KGY7Ti6Pcl1pwrxCZoQdYNTH5RB1ckn/dDOozwtQ8bNHN7LS4SsJ9cLYlAgMBAAGjQjBAMB0G A1UdDgQWBBTu0somcZXNb8eweUN9Qnfo3VDIgDAfBgNVHSMEGDAWgBTu0somcZXNb8eweUN9Qnfo 3VDIgDANBgkqhkiG9w0BAQUFAAOBgQBYxc8Nci6PDIePEJLdQp2A7w+nTQSfaDhcTbbWvPVDLM25 P1meiq2b6VBbd3vW2AoRVZwZona2C4VtPkmIqGQ50wCxcFtT9J3jzT6eCrRe95iGetGjMZxQJ0tO 6KO5Iq6lwdFp82w92hOjvg4ruO0P6x0kNcebOe5la2A7VmmXoA== http://www.pec-univ.fr ups-tlse ups-tlse https://www.pec-univ.fr ups-tlse projet-pec@adm.ups-tlse.fr pqshibboleth.proquest.com CN=pqshibboleth.proquest.com,OU=ProQuest,O=Proquest LLC,L=Ann Arbor,ST=Michigan,C=US MIIDfjCCAuegAwIBAgIQLdam9buiuef8UWHoY5kLIzANBgkqhkiG9w0BAQUFADCB zjELMAkGA1UEBhMCWkExFTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJ Q2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UE CxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhh d3RlIFByZW1pdW0gU2VydmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNl cnZlckB0aGF3dGUuY29tMB4XDTA5MTEwOTE5MDQyMFoXDTExMTIwMzIwMjcwNlow gYIxCzAJBgNVBAYTAlVTMREwDwYDVQQIEwhNaWNoaWdhbjESMBAGA1UEBxMJQW5u IEFyYm9yMRUwEwYDVQQKEwxQcm9xdWVzdCBMTEMxETAPBgNVBAsTCFByb1F1ZXN0 MSIwIAYDVQQDExlwcXNoaWJib2xldGgucHJvcXVlc3QuY29tMIGfMA0GCSqGSIb3 DQEBAQUAA4GNADCBiQKBgQC6mEmm1NMcKYxXE2AnGF17Qa+2ipw767rxlCToAga/ BuOfA8qivI5qLjYqk6pLZypOpcilEzmLH51mRErarLrJpXGb3/HryNPmLLU8E8yA GM8N8It0cUh8bfnA6WrzfVpaPOjJ0Cp94ST13lCXreOPbyXk6HTawIA36HYCN8aO cQIDAQABo4GmMIGjMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjBABgNV HR8EOTA3MDWgM6Axhi9odHRwOi8vY3JsLnRoYXd0ZS5jb20vVGhhd3RlUHJlbWl1 bVNlcnZlckNBLmNybDAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6 Ly9vY3NwLnRoYXd0ZS5jb20wDAYDVR0TAQH/BAIwADANBgkqhkiG9w0BAQUFAAOB gQA0OipYoFobNSk3WhJ5FHa1VLqczJs6CJ08Cu+GF/5uQj1gTZm3AKmNc1InNCYQ ESJt1iEoQrTx2IFxfGCluxA4GSPbQ2XbjpnuFwJNSlw8aWek384j9WB4tcEIr8tX cQJPEufYna3DyRj6xSKPXo/Bnld0IjFKJ/A+cVA3UVuinA== pqshibboleth.proquest.com CN=pqshibboleth.proquest.com,OU=ProQuest,O=Proquest LLC,L=Ann Arbor,ST=Michigan,C=US MIIDfjCCAuegAwIBAgIQLdam9buiuef8UWHoY5kLIzANBgkqhkiG9w0BAQUFADCB zjELMAkGA1UEBhMCWkExFTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJ Q2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UE CxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhh d3RlIFByZW1pdW0gU2VydmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNl cnZlckB0aGF3dGUuY29tMB4XDTA5MTEwOTE5MDQyMFoXDTExMTIwMzIwMjcwNlow gYIxCzAJBgNVBAYTAlVTMREwDwYDVQQIEwhNaWNoaWdhbjESMBAGA1UEBxMJQW5u IEFyYm9yMRUwEwYDVQQKEwxQcm9xdWVzdCBMTEMxETAPBgNVBAsTCFByb1F1ZXN0 MSIwIAYDVQQDExlwcXNoaWJib2xldGgucHJvcXVlc3QuY29tMIGfMA0GCSqGSIb3 DQEBAQUAA4GNADCBiQKBgQC6mEmm1NMcKYxXE2AnGF17Qa+2ipw767rxlCToAga/ BuOfA8qivI5qLjYqk6pLZypOpcilEzmLH51mRErarLrJpXGb3/HryNPmLLU8E8yA GM8N8It0cUh8bfnA6WrzfVpaPOjJ0Cp94ST13lCXreOPbyXk6HTawIA36HYCN8aO cQIDAQABo4GmMIGjMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjBABgNV HR8EOTA3MDWgM6Axhi9odHRwOi8vY3JsLnRoYXd0ZS5jb20vVGhhd3RlUHJlbWl1 bVNlcnZlckNBLmNybDAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6 Ly9vY3NwLnRoYXd0ZS5jb20wDAYDVR0TAQH/BAIwADANBgkqhkiG9w0BAQUFAAOB gQA0OipYoFobNSk3WhJ5FHa1VLqczJs6CJ08Cu+GF/5uQj1gTZm3AKmNc1InNCYQ ESJt1iEoQrTx2IFxfGCluxA4GSPbQ2XbjpnuFwJNSlw8aWek384j9WB4tcEIr8tX cQJPEufYna3DyRj6xSKPXo/Bnld0IjFKJ/A+cVA3UVuinA== fed.cru.fr CN=fed.cru.fr MIIC5TCCAc2gAwIBAgIJAOLQPcMRyfO5MA0GCSqGSIb3DQEBBQUAMBUxEzARBgNV BAMTCmZlZC5jcnUuZnIwHhcNMTAwMjE3MDkwODE0WhcNMjAwMjE1MDkwODE0WjAV MRMwEQYDVQQDEwpmZWQuY3J1LmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB CgKCAQEAuqwRDaahljnpxquFaZczqamfSD6oR/4HXnDr/ejA6CoiLs1Csrc4p/Im 8SjbubbyVmuAmYeT8YW30xtxzoLYMlX/k9LfdnQQMNS0BT20fWKMudHWtKOL+gDo ruqK4Ivmv8XJAjzawYvOocxkOZVtsTJ0cP2N+EJTemR4SlEZD2yFGbKdzjfvaocm 2f1EU4uUanpprf/tne2jwInaK4a3VscZ/AYxtaKTubHtcGrGSrxhvapV6CKMbt+A qTW5iWdF4KGdCXUTSzxGjb4mkk1dD5Y4X6zRFSimtE291E2AWL5ricAIPXo6tUax mZJVTj3Z0zI4Xo8yefPbFy/V/mCHUwIDAQABozgwNjAVBgNVHREEDjAMggpmZWQu Y3J1LmZyMB0GA1UdDgQWBBSKhhBVN/91d6MSPBXStg/lgDHU6jANBgkqhkiG9w0B AQUFAAOCAQEAnt8hmxNUOCXMDkJDfM07U/A+Lm+Xc6uXrCJxjr1Nk2zoQDcup4Cp 90QqxmS483yIa9gAOIswctaDKR2ZPdN+70zBwWjMzQTJcuwRaZhYt2z8qTiDUG9z UenrbATCLtWu3PDuGEv4xfgwwSWrdmp/QDbCjs06l3V5WOqZ8/PHY6xbcOQTYpqY rrjYGlE1h9R6cGy+SwUuy+Tg8Npf6YM+jBxeSQy6i0jbb8fzF59ZLsP2Oty18qwR Z1MmB2gTGIGSzBpLi5rxtWJ0uL67+468ZKcspiUlF+TYr9nfUGb6+wk3wWRGKPoD G3v2db1TkOg7SaejzNk+Z0KP8i/gunw49A== fed.cru.fr CN=fed.cru.fr MIIC5TCCAc2gAwIBAgIJAOLQPcMRyfO5MA0GCSqGSIb3DQEBBQUAMBUxEzARBgNV BAMTCmZlZC5jcnUuZnIwHhcNMTAwMjE3MDkwODE0WhcNMjAwMjE1MDkwODE0WjAV MRMwEQYDVQQDEwpmZWQuY3J1LmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB CgKCAQEAuqwRDaahljnpxquFaZczqamfSD6oR/4HXnDr/ejA6CoiLs1Csrc4p/Im 8SjbubbyVmuAmYeT8YW30xtxzoLYMlX/k9LfdnQQMNS0BT20fWKMudHWtKOL+gDo ruqK4Ivmv8XJAjzawYvOocxkOZVtsTJ0cP2N+EJTemR4SlEZD2yFGbKdzjfvaocm 2f1EU4uUanpprf/tne2jwInaK4a3VscZ/AYxtaKTubHtcGrGSrxhvapV6CKMbt+A qTW5iWdF4KGdCXUTSzxGjb4mkk1dD5Y4X6zRFSimtE291E2AWL5ricAIPXo6tUax mZJVTj3Z0zI4Xo8yefPbFy/V/mCHUwIDAQABozgwNjAVBgNVHREEDjAMggpmZWQu Y3J1LmZyMB0GA1UdDgQWBBSKhhBVN/91d6MSPBXStg/lgDHU6jANBgkqhkiG9w0B AQUFAAOCAQEAnt8hmxNUOCXMDkJDfM07U/A+Lm+Xc6uXrCJxjr1Nk2zoQDcup4Cp 90QqxmS483yIa9gAOIswctaDKR2ZPdN+70zBwWjMzQTJcuwRaZhYt2z8qTiDUG9z UenrbATCLtWu3PDuGEv4xfgwwSWrdmp/QDbCjs06l3V5WOqZ8/PHY6xbcOQTYpqY rrjYGlE1h9R6cGy+SwUuy+Tg8Npf6YM+jBxeSQy6i0jbb8fzF59ZLsP2Oty18qwR Z1MmB2gTGIGSzBpLi5rxtWJ0uL67+468ZKcspiUlF+TYr9nfUGb6+wk3wWRGKPoD G3v2db1TkOg7SaejzNk+Z0KP8i/gunw49A== MIIEdzCCA1+gAwIBAgIRALU7cnfbLc1oJeZ3jRMsuAswDQYJKoZIhvcNAQEFBQAwNjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5BIFNTTCBDQTAeFw0xMDAxMjIwMDAwMDBaFw0xMzAxMjEyMzU5NTlaMEUxCzAJBgNVBAYTAk5MMQ8wDQYDVQQKEwZURVJFTkExJTAjBgNVBAMTHHRjcy1lc2NpZW5jZS1zYW1sLnRlcmVuYS5vcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDSe/BpU3VSa/KtSlrHIzeARGMIGg0M6ZH5eYNHSfyNV4YEYrdUhWNUHLujB4KWiCQnqZMHax3g1yiY/7f0sFzng7sMKsGECMx1RXhrBtH15IabwPQHtO25+kpUKsaeprJXh1PneKBmZ61DnDlcsJw5AGjDFL3p1iuNn/6AXMn9GibhZbe2b2gSb+e/89i9NhEpEJQgR90dzRre+xrAQjV3ahrGGs9AV4ENVP9uaH5i/h3MZG7QRZTnxSn57UTEiSWd/6LILH5IcfvhEkPPDmlXQtF9VhGXKYZBY83f0Lo8TUVtcZVxK1YU7Sb1/OY2EsKENB5dmjtZRe6rp3RgWGDrAgMBAAGjggFvMIIBazAfBgNVHSMEGDAWgBQMvZNoDPPeq6NJays3V0fqkOO57TAdBgNVHQ4EFgQUFDOLIP6//PMYotoXXSVbz65lyAIwDgYDVR0PAQH/BAQDAgWgMAwGA1UdEwEB/wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBgGA1UdIAQRMA8wDQYLKwYBBAGyMQECAh0wOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC50Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcmwwbQYIKwYBBQUHAQEEYTBfMDUGCCsGAQUFBzAChilodHRwOi8vY3J0LnRjcy50ZXJlbmEub3JnL1RFUkVOQVNTTENBLmNydDAmBggrBgEFBQcwAYYaaHR0cDovL29jc3AudGNzLnRlcmVuYS5vcmcwJwYDVR0RBCAwHoIcdGNzLWVzY2llbmNlLXNhbWwudGVyZW5hLm9yZzANBgkqhkiG9w0BAQUFAAOCAQEApwOOAu4LUJgYdO2/sgtszmDD7aePHEgWZ7aTYKj7qVXM33TOJmqvNE2DvPmccuPt5lRHUXt1Zac4HAHaK/r6LTQRf9O9z8+T/pjqbiZD8FfZkYaCBHGU4uPXakyEgyAzUmPh5zQOIxbdoKEd9NsRmomDaZLnMn0Vc+dDxexVlDpnGzK7Du68qIS9EyzyiEHYRF6lsnwuwTAN+XYf+c8lS64H82Z3tBuFknMiI1AjV6hbJzvv3D/YBrDGehrumCtg0aKi5EFIgXg4lGj3lV4Q1Y/p0FiuosTZpIyIjTLzJ05Hvp3If6mXlxXGAWXuHYx22FwQ7v8cOCkTfmGwheeKjg== MIIEdzCCA1+gAwIBAgIRALU7cnfbLc1oJeZ3jRMsuAswDQYJKoZIhvcNAQEFBQAwNjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5BIFNTTCBDQTAeFw0xMDAxMjIwMDAwMDBaFw0xMzAxMjEyMzU5NTlaMEUxCzAJBgNVBAYTAk5MMQ8wDQYDVQQKEwZURVJFTkExJTAjBgNVBAMTHHRjcy1lc2NpZW5jZS1zYW1sLnRlcmVuYS5vcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDSe/BpU3VSa/KtSlrHIzeARGMIGg0M6ZH5eYNHSfyNV4YEYrdUhWNUHLujB4KWiCQnqZMHax3g1yiY/7f0sFzng7sMKsGECMx1RXhrBtH15IabwPQHtO25+kpUKsaeprJXh1PneKBmZ61DnDlcsJw5AGjDFL3p1iuNn/6AXMn9GibhZbe2b2gSb+e/89i9NhEpEJQgR90dzRre+xrAQjV3ahrGGs9AV4ENVP9uaH5i/h3MZG7QRZTnxSn57UTEiSWd/6LILH5IcfvhEkPPDmlXQtF9VhGXKYZBY83f0Lo8TUVtcZVxK1YU7Sb1/OY2EsKENB5dmjtZRe6rp3RgWGDrAgMBAAGjggFvMIIBazAfBgNVHSMEGDAWgBQMvZNoDPPeq6NJays3V0fqkOO57TAdBgNVHQ4EFgQUFDOLIP6//PMYotoXXSVbz65lyAIwDgYDVR0PAQH/BAQDAgWgMAwGA1UdEwEB/wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBgGA1UdIAQRMA8wDQYLKwYBBAGyMQECAh0wOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC50Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcmwwbQYIKwYBBQUHAQEEYTBfMDUGCCsGAQUFBzAChilodHRwOi8vY3J0LnRjcy50ZXJlbmEub3JnL1RFUkVOQVNTTENBLmNydDAmBggrBgEFBQcwAYYaaHR0cDovL29jc3AudGNzLnRlcmVuYS5vcmcwJwYDVR0RBCAwHoIcdGNzLWVzY2llbmNlLXNhbWwudGVyZW5hLm9yZzANBgkqhkiG9w0BAQUFAAOCAQEApwOOAu4LUJgYdO2/sgtszmDD7aePHEgWZ7aTYKj7qVXM33TOJmqvNE2DvPmccuPt5lRHUXt1Zac4HAHaK/r6LTQRf9O9z8+T/pjqbiZD8FfZkYaCBHGU4uPXakyEgyAzUmPh5zQOIxbdoKEd9NsRmomDaZLnMn0Vc+dDxexVlDpnGzK7Du68qIS9EyzyiEHYRF6lsnwuwTAN+XYf+c8lS64H82Z3tBuFknMiI1AjV6hbJzvv3D/YBrDGehrumCtg0aKi5EFIgXg4lGj3lV4Q1Y/p0FiuosTZpIyIjTLzJ05Hvp3If6mXlxXGAWXuHYx22FwQ7v8cOCkTfmGwheeKjg== UvT LIS Unix na@example.org MIIEdjCCA16gAwIBAgIQaDG9O4Jn+97HiMuVnaMmcDANBgkqhkiG9w0BAQUFADA2MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEgU1NMIENBMB4XDTEwMDEyMjAwMDAwMFoXDTEzMDEyMTIzNTk1OVowRTELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTElMCMGA1UEAxMcdGNzLXBlcnNvbmFsLXNhbWwudGVyZW5hLm9yZzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANBcWpnN9ebHCveyj0WRiPOylNZXR+KG1uRaiTTT0gDjeajlUlZioQGLX0uoxqWy9D/l86LrAq6VEHX4OaBA+Xz0QonTcLz2ri1Vf1GYDjHtInc+UO6pMQHKCdbxMfS97dUXqz++H25xav/cdSPxXvc9a9mIb3DT2yaR9qsUIR2kGxXqdwoZ1fClQLJOPvEGonvlxxNBfLvaJuhvIGtKx0IXvGdnXEl3bzvp2bGPAwUxSEnFcnhjr4qmIs5QEqaqkSOmfKqwv+v2GCXdUOBjkELGVO4475tR4ouIi5rVoWmx3Tg21m/AWa5UbTBdSS6Di6n2QXsk+0j1L/FVji6exhcCAwEAAaOCAW8wggFrMB8GA1UdIwQYMBaAFAy9k2gM896ro0lrKzdXR+qQ47ntMB0GA1UdDgQWBBSg83c02TvstcJr9ZOENi88KnuA+jAOBgNVHQ8BAf8EBAMCBaAwDAYDVR0TAQH/BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwGAYDVR0gBBEwDzANBgsrBgEEAbIxAQICHTA6BgNVHR8EMzAxMC+gLaArhilodHRwOi8vY3JsLnRjcy50ZXJlbmEub3JnL1RFUkVOQVNTTENBLmNybDBtBggrBgEFBQcBAQRhMF8wNQYIKwYBBQUHMAKGKWh0dHA6Ly9jcnQudGNzLnRlcmVuYS5vcmcvVEVSRU5BU1NMQ0EuY3J0MCYGCCsGAQUFBzABhhpodHRwOi8vb2NzcC50Y3MudGVyZW5hLm9yZzAnBgNVHREEIDAeghx0Y3MtcGVyc29uYWwtc2FtbC50ZXJlbmEub3JnMA0GCSqGSIb3DQEBBQUAA4IBAQA12FYPotUO78yJ3gIa97kuYcQTX8ZwZXWm5hG39UOedTFCn7zFWCcmksL3BrT0rKp3KvRYkmQ9sQ28biv8kOfM0zlOhy7RMNCY/J5jKQpwdiRIWpzbcf+OfDmTmzBcxHJFEU8MwYjWUEwUbAfe+AYagTCZvYVx3tyfP0patzWDvg+c40nDFS4VGQ9NU9cPh1s+uYTblzh0SwDFWleT//JZELcRprsj9lEqH8wyNOEQEmtoEQn25lEpyEY4PacA7oKO95YdUEbqdlxkqtP69W8MpSKUyEXLW0fXBtoD86m7jEZD+V/5QyV8S9VUVCy+u3y2XmFeXbvUqzJHz9x3N25I MIIEdjCCA16gAwIBAgIQaDG9O4Jn+97HiMuVnaMmcDANBgkqhkiG9w0BAQUFADA2MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEgU1NMIENBMB4XDTEwMDEyMjAwMDAwMFoXDTEzMDEyMTIzNTk1OVowRTELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTElMCMGA1UEAxMcdGNzLXBlcnNvbmFsLXNhbWwudGVyZW5hLm9yZzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANBcWpnN9ebHCveyj0WRiPOylNZXR+KG1uRaiTTT0gDjeajlUlZioQGLX0uoxqWy9D/l86LrAq6VEHX4OaBA+Xz0QonTcLz2ri1Vf1GYDjHtInc+UO6pMQHKCdbxMfS97dUXqz++H25xav/cdSPxXvc9a9mIb3DT2yaR9qsUIR2kGxXqdwoZ1fClQLJOPvEGonvlxxNBfLvaJuhvIGtKx0IXvGdnXEl3bzvp2bGPAwUxSEnFcnhjr4qmIs5QEqaqkSOmfKqwv+v2GCXdUOBjkELGVO4475tR4ouIi5rVoWmx3Tg21m/AWa5UbTBdSS6Di6n2QXsk+0j1L/FVji6exhcCAwEAAaOCAW8wggFrMB8GA1UdIwQYMBaAFAy9k2gM896ro0lrKzdXR+qQ47ntMB0GA1UdDgQWBBSg83c02TvstcJr9ZOENi88KnuA+jAOBgNVHQ8BAf8EBAMCBaAwDAYDVR0TAQH/BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwGAYDVR0gBBEwDzANBgsrBgEEAbIxAQICHTA6BgNVHR8EMzAxMC+gLaArhilodHRwOi8vY3JsLnRjcy50ZXJlbmEub3JnL1RFUkVOQVNTTENBLmNybDBtBggrBgEFBQcBAQRhMF8wNQYIKwYBBQUHMAKGKWh0dHA6Ly9jcnQudGNzLnRlcmVuYS5vcmcvVEVSRU5BU1NMQ0EuY3J0MCYGCCsGAQUFBzABhhpodHRwOi8vb2NzcC50Y3MudGVyZW5hLm9yZzAnBgNVHREEIDAeghx0Y3MtcGVyc29uYWwtc2FtbC50ZXJlbmEub3JnMA0GCSqGSIb3DQEBBQUAA4IBAQA12FYPotUO78yJ3gIa97kuYcQTX8ZwZXWm5hG39UOedTFCn7zFWCcmksL3BrT0rKp3KvRYkmQ9sQ28biv8kOfM0zlOhy7RMNCY/J5jKQpwdiRIWpzbcf+OfDmTmzBcxHJFEU8MwYjWUEwUbAfe+AYagTCZvYVx3tyfP0patzWDvg+c40nDFS4VGQ9NU9cPh1s+uYTblzh0SwDFWleT//JZELcRprsj9lEqH8wyNOEQEmtoEQn25lEpyEY4PacA7oKO95YdUEbqdlxkqtP69W8MpSKUyEXLW0fXBtoD86m7jEZD+V/5QyV8S9VUVCy+u3y2XmFeXbvUqzJHz9x3N25I UvT LIS Unix na@example.org tcs.renater.fr CN=tcs.renater.fr,O=RENATER,C=FR MIICiTCCAfKgAwIBAgIJAMSfJnCyfNjgMA0GCSqGSIb3DQEBBQUAMDgxCzAJBgNV BAYTAkZSMRAwDgYDVQQKEwdSRU5BVEVSMRcwFQYDVQQDEw50Y3MucmVuYXRlci5m cjAeFw0wOTA5MjUxMDAzMjBaFw0xOTA5MjMxMDAzMjBaMDgxCzAJBgNVBAYTAkZS MRAwDgYDVQQKEwdSRU5BVEVSMRcwFQYDVQQDEw50Y3MucmVuYXRlci5mcjCBnzAN BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAlACLS92kqZ5Mpn3DBljVcOuwRSryjEzR UaEqbd6fNzz56AlAfNa3hMkOeRFc08EzwjxqN5dtyHolnxyUhO9vD+SkcvwNnDrR /WVmYtSqv38ETyJyTP3LVGw/sn4n+O0SSGEDjsjflrAoDov+6iih/7OliyPBqRJ+ jTkVDgoOj+ECAwEAAaOBmjCBlzAdBgNVHQ4EFgQUudlW9x1hrky7QtNA3FEnYypT Ba4waAYDVR0jBGEwX4AUudlW9x1hrky7QtNA3FEnYypTBa6hPKQ6MDgxCzAJBgNV BAYTAkZSMRAwDgYDVQQKEwdSRU5BVEVSMRcwFQYDVQQDEw50Y3MucmVuYXRlci5m coIJAMSfJnCyfNjgMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAF2CO cB4HveW6vJLjzbWs4CCt0R0zk8JnfMqYlM1uTXwwhx9HaCGDzn6jEkOq7PSkrIzr Yld9aiSwshKAeRrWc9qwmYqLhmAOuoc7J2bkXHhb+l1IW9bDOU4uNe0qcb/GXWvG fxC5YSLasRfufo4LImIcFx8Mx/gZNOyVw3TlHik= tcs.renater.fr CN=tcs.renater.fr,O=RENATER,C=FR MIICiTCCAfKgAwIBAgIJAMSfJnCyfNjgMA0GCSqGSIb3DQEBBQUAMDgxCzAJBgNV BAYTAkZSMRAwDgYDVQQKEwdSRU5BVEVSMRcwFQYDVQQDEw50Y3MucmVuYXRlci5m cjAeFw0wOTA5MjUxMDAzMjBaFw0xOTA5MjMxMDAzMjBaMDgxCzAJBgNVBAYTAkZS MRAwDgYDVQQKEwdSRU5BVEVSMRcwFQYDVQQDEw50Y3MucmVuYXRlci5mcjCBnzAN BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAlACLS92kqZ5Mpn3DBljVcOuwRSryjEzR UaEqbd6fNzz56AlAfNa3hMkOeRFc08EzwjxqN5dtyHolnxyUhO9vD+SkcvwNnDrR /WVmYtSqv38ETyJyTP3LVGw/sn4n+O0SSGEDjsjflrAoDov+6iih/7OliyPBqRJ+ jTkVDgoOj+ECAwEAAaOBmjCBlzAdBgNVHQ4EFgQUudlW9x1hrky7QtNA3FEnYypT Ba4waAYDVR0jBGEwX4AUudlW9x1hrky7QtNA3FEnYypTBa6hPKQ6MDgxCzAJBgNV BAYTAkZSMRAwDgYDVQQKEwdSRU5BVEVSMRcwFQYDVQQDEw50Y3MucmVuYXRlci5m coIJAMSfJnCyfNjgMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAF2CO cB4HveW6vJLjzbWs4CCt0R0zk8JnfMqYlM1uTXwwhx9HaCGDzn6jEkOq7PSkrIzr Yld9aiSwshKAeRrWc9qwmYqLhmAOuoc7J2bkXHhb+l1IW9bDOU4uNe0qcb/GXWvG fxC5YSLasRfufo4LImIcFx8Mx/gZNOyVw3TlHik= fed.cru.fr CN=fed.cru.fr MIIC5TCCAc2gAwIBAgIJAOLQPcMRyfO5MA0GCSqGSIb3DQEBBQUAMBUxEzARBgNV BAMTCmZlZC5jcnUuZnIwHhcNMTAwMjE3MDkwODE0WhcNMjAwMjE1MDkwODE0WjAV MRMwEQYDVQQDEwpmZWQuY3J1LmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB CgKCAQEAuqwRDaahljnpxquFaZczqamfSD6oR/4HXnDr/ejA6CoiLs1Csrc4p/Im 8SjbubbyVmuAmYeT8YW30xtxzoLYMlX/k9LfdnQQMNS0BT20fWKMudHWtKOL+gDo ruqK4Ivmv8XJAjzawYvOocxkOZVtsTJ0cP2N+EJTemR4SlEZD2yFGbKdzjfvaocm 2f1EU4uUanpprf/tne2jwInaK4a3VscZ/AYxtaKTubHtcGrGSrxhvapV6CKMbt+A qTW5iWdF4KGdCXUTSzxGjb4mkk1dD5Y4X6zRFSimtE291E2AWL5ricAIPXo6tUax mZJVTj3Z0zI4Xo8yefPbFy/V/mCHUwIDAQABozgwNjAVBgNVHREEDjAMggpmZWQu Y3J1LmZyMB0GA1UdDgQWBBSKhhBVN/91d6MSPBXStg/lgDHU6jANBgkqhkiG9w0B AQUFAAOCAQEAnt8hmxNUOCXMDkJDfM07U/A+Lm+Xc6uXrCJxjr1Nk2zoQDcup4Cp 90QqxmS483yIa9gAOIswctaDKR2ZPdN+70zBwWjMzQTJcuwRaZhYt2z8qTiDUG9z UenrbATCLtWu3PDuGEv4xfgwwSWrdmp/QDbCjs06l3V5WOqZ8/PHY6xbcOQTYpqY rrjYGlE1h9R6cGy+SwUuy+Tg8Npf6YM+jBxeSQy6i0jbb8fzF59ZLsP2Oty18qwR Z1MmB2gTGIGSzBpLi5rxtWJ0uL67+468ZKcspiUlF+TYr9nfUGb6+wk3wWRGKPoD G3v2db1TkOg7SaejzNk+Z0KP8i/gunw49A== fed.cru.fr CN=fed.cru.fr MIIC5TCCAc2gAwIBAgIJAOLQPcMRyfO5MA0GCSqGSIb3DQEBBQUAMBUxEzARBgNV BAMTCmZlZC5jcnUuZnIwHhcNMTAwMjE3MDkwODE0WhcNMjAwMjE1MDkwODE0WjAV MRMwEQYDVQQDEwpmZWQuY3J1LmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB CgKCAQEAuqwRDaahljnpxquFaZczqamfSD6oR/4HXnDr/ejA6CoiLs1Csrc4p/Im 8SjbubbyVmuAmYeT8YW30xtxzoLYMlX/k9LfdnQQMNS0BT20fWKMudHWtKOL+gDo ruqK4Ivmv8XJAjzawYvOocxkOZVtsTJ0cP2N+EJTemR4SlEZD2yFGbKdzjfvaocm 2f1EU4uUanpprf/tne2jwInaK4a3VscZ/AYxtaKTubHtcGrGSrxhvapV6CKMbt+A qTW5iWdF4KGdCXUTSzxGjb4mkk1dD5Y4X6zRFSimtE291E2AWL5ricAIPXo6tUax mZJVTj3Z0zI4Xo8yefPbFy/V/mCHUwIDAQABozgwNjAVBgNVHREEDjAMggpmZWQu Y3J1LmZyMB0GA1UdDgQWBBSKhhBVN/91d6MSPBXStg/lgDHU6jANBgkqhkiG9w0B AQUFAAOCAQEAnt8hmxNUOCXMDkJDfM07U/A+Lm+Xc6uXrCJxjr1Nk2zoQDcup4Cp 90QqxmS483yIa9gAOIswctaDKR2ZPdN+70zBwWjMzQTJcuwRaZhYt2z8qTiDUG9z UenrbATCLtWu3PDuGEv4xfgwwSWrdmp/QDbCjs06l3V5WOqZ8/PHY6xbcOQTYpqY rrjYGlE1h9R6cGy+SwUuy+Tg8Npf6YM+jBxeSQy6i0jbb8fzF59ZLsP2Oty18qwR Z1MmB2gTGIGSzBpLi5rxtWJ0uL67+468ZKcspiUlF+TYr9nfUGb6+wk3wWRGKPoD G3v2db1TkOg7SaejzNk+Z0KP8i/gunw49A== listes.renater.fr CN=listes.renater.fr,O=Renater,C=FR MIICkjCCAfugAwIBAgIJAJPKcVtcBwW7MA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNV BAYTAkZSMRAwDgYDVQQKEwdSZW5hdGVyMRowGAYDVQQDExFsaXN0ZXMucmVuYXRl ci5mcjAeFw0wODA2MTAwODQ5MTNaFw0yODA2MDUwODQ5MTNaMDsxCzAJBgNVBAYT AkZSMRAwDgYDVQQKEwdSZW5hdGVyMRowGAYDVQQDExFsaXN0ZXMucmVuYXRlci5m cjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA+AT1xi+pkJ7LWbBcK7CwDjd5 0gfIHBFIkIoBejXnTSXdyzkSgbBWczs3PWh0BH3ZjRVrGz/oz4RQbtH8sGax19JS 3l2TmrnhUMqRHTyyGBoSbOu//4EonZCt41IsP6PmChBxX7WV1/HzoqTKcTm1yE7s DaOjEOFPP06Etf4WhwUCAwEAAaOBnTCBmjAdBgNVHQ4EFgQU/BUk8n0sUqNH0HXe w5KpeJ5vDy8wawYDVR0jBGQwYoAU/BUk8n0sUqNH0HXew5KpeJ5vDy+hP6Q9MDsx CzAJBgNVBAYTAkZSMRAwDgYDVQQKEwdSZW5hdGVyMRowGAYDVQQDExFsaXN0ZXMu cmVuYXRlci5mcoIJAJPKcVtcBwW7MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEF BQADgYEAy+jjJONx3BIc+uifGEZ1OUniMe7m14W6/gWHnHz/Jt+Fuoweu6EPeGv+ KZ9Zmrg+6n/RosuB16nKcwRUlvbjxTgthCr1JXH7CbF0fyInnAxkrki3zyhyzc3R x3rqtNmFmwuqjaT1AC83700ZNluqtns50mfg5u3ehXKE8LE2pGw= listes.renater.fr CN=listes.renater.fr,O=Renater,C=FR MIICkjCCAfugAwIBAgIJAJPKcVtcBwW7MA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNV BAYTAkZSMRAwDgYDVQQKEwdSZW5hdGVyMRowGAYDVQQDExFsaXN0ZXMucmVuYXRl ci5mcjAeFw0wODA2MTAwODQ5MTNaFw0yODA2MDUwODQ5MTNaMDsxCzAJBgNVBAYT AkZSMRAwDgYDVQQKEwdSZW5hdGVyMRowGAYDVQQDExFsaXN0ZXMucmVuYXRlci5m cjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA+AT1xi+pkJ7LWbBcK7CwDjd5 0gfIHBFIkIoBejXnTSXdyzkSgbBWczs3PWh0BH3ZjRVrGz/oz4RQbtH8sGax19JS 3l2TmrnhUMqRHTyyGBoSbOu//4EonZCt41IsP6PmChBxX7WV1/HzoqTKcTm1yE7s DaOjEOFPP06Etf4WhwUCAwEAAaOBnTCBmjAdBgNVHQ4EFgQU/BUk8n0sUqNH0HXe w5KpeJ5vDy8wawYDVR0jBGQwYoAU/BUk8n0sUqNH0HXew5KpeJ5vDy+hP6Q9MDsx CzAJBgNVBAYTAkZSMRAwDgYDVQQKEwdSZW5hdGVyMRowGAYDVQQDExFsaXN0ZXMu cmVuYXRlci5mcoIJAJPKcVtcBwW7MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEF BQADgYEAy+jjJONx3BIc+uifGEZ1OUniMe7m14W6/gWHnHz/Jt+Fuoweu6EPeGv+ KZ9Zmrg+6n/RosuB16nKcwRUlvbjxTgthCr1JXH7CbF0fyInnAxkrki3zyhyzc3R x3rqtNmFmwuqjaT1AC83700ZNluqtns50mfg5u3ehXKE8LE2pGw= shibboleth.highwire.org CN=shibboleth.highwire.org,OU=Domain Control Validated - QuickSSL(R),OU=See www.geotrust.com/resources/cps (c)10,OU=GT25468843,O=shibboleth.highwire.org,C=US,serialNumber=sWmLOPh/LGuivaEWU7vbqM11dDslGNDS MIIDjzCCAvigAwIBAgIDE2llMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0 aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTAwNjE1MDgyMzA1WhcNMTEwNjE3MjIzMDEy WjCB9TEpMCcGA1UEBRMgc1dtTE9QaC9MR3VpdmFFV1U3dmJxTTExZERzbEdORFMx CzAJBgNVBAYTAlVTMSAwHgYDVQQKExdzaGliYm9sZXRoLmhpZ2h3aXJlLm9yZzET MBEGA1UECxMKR1QyNTQ2ODg0MzExMC8GA1UECxMoU2VlIHd3dy5nZW90cnVzdC5j b20vcmVzb3VyY2VzL2NwcyAoYykxMDEvMC0GA1UECxMmRG9tYWluIENvbnRyb2wg VmFsaWRhdGVkIC0gUXVpY2tTU0woUikxIDAeBgNVBAMTF3NoaWJib2xldGguaGln aHdpcmUub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCzSPN2X9bk5MHB f6mUZ/CvBKfgEn46C7GnyzhKuEhsmppVKCxPenesKPvSmxpWWz7/Iwqusq7WHR0Z yVz4qHAyNPmN3U9HHGUeDlU1FZF9xltfzwoYcHJrSDXkSMAoV654f7L4wesBVSjj nPzmbIJlSbKYBbDFY60+dRlSwpRJ1wIDAQABo4HSMIHPMB8GA1UdIwQYMBaAFEjm aPkr0rKV10fYIyAQTzOYkJ/UMA4GA1UdDwEB/wQEAwIE8DAdBgNVHSUEFjAUBggr BgEFBQcDAQYIKwYBBQUHAwIwIgYDVR0RBBswGYIXc2hpYmJvbGV0aC5oaWdod2ly ZS5vcmcwOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC5nZW90cnVzdC5jb20v Y3Jscy9zZWN1cmVjYS5jcmwwHQYDVR0OBBYEFKEHn+uq2uvGkQRbITzHGnUL2a7z MA0GCSqGSIb3DQEBBQUAA4GBAEPaX1aKQj5ePOM8rAGI+T43+f/53tE5ga2O8kvg a4P5WEjXn8A4vnNSHRAHuj5qye0R8f2dqnNHH2znsw1ZMDuUERXn7mqrq6dqWiSq W2YFcT09X+2GlGNmhKY9VxhZH5szboc5IPWil9GpubtQ9cfz8ukLTaAwklS2wn1Y oZQx shibboleth.highwire.org CN=shibboleth.highwire.org,OU=Domain Control Validated - QuickSSL(R),OU=See www.geotrust.com/resources/cps (c)10,OU=GT25468843,O=shibboleth.highwire.org,C=US,serialNumber=sWmLOPh/LGuivaEWU7vbqM11dDslGNDS MIIDjzCCAvigAwIBAgIDE2llMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0 aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTAwNjE1MDgyMzA1WhcNMTEwNjE3MjIzMDEy WjCB9TEpMCcGA1UEBRMgc1dtTE9QaC9MR3VpdmFFV1U3dmJxTTExZERzbEdORFMx CzAJBgNVBAYTAlVTMSAwHgYDVQQKExdzaGliYm9sZXRoLmhpZ2h3aXJlLm9yZzET MBEGA1UECxMKR1QyNTQ2ODg0MzExMC8GA1UECxMoU2VlIHd3dy5nZW90cnVzdC5j b20vcmVzb3VyY2VzL2NwcyAoYykxMDEvMC0GA1UECxMmRG9tYWluIENvbnRyb2wg VmFsaWRhdGVkIC0gUXVpY2tTU0woUikxIDAeBgNVBAMTF3NoaWJib2xldGguaGln aHdpcmUub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCzSPN2X9bk5MHB f6mUZ/CvBKfgEn46C7GnyzhKuEhsmppVKCxPenesKPvSmxpWWz7/Iwqusq7WHR0Z yVz4qHAyNPmN3U9HHGUeDlU1FZF9xltfzwoYcHJrSDXkSMAoV654f7L4wesBVSjj nPzmbIJlSbKYBbDFY60+dRlSwpRJ1wIDAQABo4HSMIHPMB8GA1UdIwQYMBaAFEjm aPkr0rKV10fYIyAQTzOYkJ/UMA4GA1UdDwEB/wQEAwIE8DAdBgNVHSUEFjAUBggr BgEFBQcDAQYIKwYBBQUHAwIwIgYDVR0RBBswGYIXc2hpYmJvbGV0aC5oaWdod2ly ZS5vcmcwOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC5nZW90cnVzdC5jb20v Y3Jscy9zZWN1cmVjYS5jcmwwHQYDVR0OBBYEFKEHn+uq2uvGkQRbITzHGnUL2a7z MA0GCSqGSIb3DQEBBQUAA4GBAEPaX1aKQj5ePOM8rAGI+T43+f/53tE5ga2O8kvg a4P5WEjXn8A4vnNSHRAHuj5qye0R8f2dqnNHH2znsw1ZMDuUERXn7mqrq6dqWiSq W2YFcT09X+2GlGNmhKY9VxhZH5szboc5IPWil9GpubtQ9cfz8ukLTaAwklS2wn1Y oZQx MIIDjzCCAvigAwIBAgIDE2llMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0 aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTAwNjE1MDgyMzA1WhcNMTEwNjE3MjIzMDEy WjCB9TEpMCcGA1UEBRMgc1dtTE9QaC9MR3VpdmFFV1U3dmJxTTExZERzbEdORFMx CzAJBgNVBAYTAlVTMSAwHgYDVQQKExdzaGliYm9sZXRoLmhpZ2h3aXJlLm9yZzET MBEGA1UECxMKR1QyNTQ2ODg0MzExMC8GA1UECxMoU2VlIHd3dy5nZW90cnVzdC5j b20vcmVzb3VyY2VzL2NwcyAoYykxMDEvMC0GA1UECxMmRG9tYWluIENvbnRyb2wg VmFsaWRhdGVkIC0gUXVpY2tTU0woUikxIDAeBgNVBAMTF3NoaWJib2xldGguaGln aHdpcmUub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCzSPN2X9bk5MHB f6mUZ/CvBKfgEn46C7GnyzhKuEhsmppVKCxPenesKPvSmxpWWz7/Iwqusq7WHR0Z yVz4qHAyNPmN3U9HHGUeDlU1FZF9xltfzwoYcHJrSDXkSMAoV654f7L4wesBVSjj nPzmbIJlSbKYBbDFY60+dRlSwpRJ1wIDAQABo4HSMIHPMB8GA1UdIwQYMBaAFEjm aPkr0rKV10fYIyAQTzOYkJ/UMA4GA1UdDwEB/wQEAwIE8DAdBgNVHSUEFjAUBggr BgEFBQcDAQYIKwYBBQUHAwIwIgYDVR0RBBswGYIXc2hpYmJvbGV0aC5oaWdod2ly ZS5vcmcwOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC5nZW90cnVzdC5jb20v Y3Jscy9zZWN1cmVjYS5jcmwwHQYDVR0OBBYEFKEHn+uq2uvGkQRbITzHGnUL2a7z MA0GCSqGSIb3DQEBBQUAA4GBAEPaX1aKQj5ePOM8rAGI+T43+f/53tE5ga2O8kvg a4P5WEjXn8A4vnNSHRAHuj5qye0R8f2dqnNHH2znsw1ZMDuUERXn7mqrq6dqWiSq W2YFcT09X+2GlGNmhKY9VxhZH5szboc5IPWil9GpubtQ9cfz8ukLTaAwklS2wn1Y oZQx MIIDjzCCAvigAwIBAgIDE2llMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0 aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTAwNjE1MDgyMzA1WhcNMTEwNjE3MjIzMDEy WjCB9TEpMCcGA1UEBRMgc1dtTE9QaC9MR3VpdmFFV1U3dmJxTTExZERzbEdORFMx CzAJBgNVBAYTAlVTMSAwHgYDVQQKExdzaGliYm9sZXRoLmhpZ2h3aXJlLm9yZzET MBEGA1UECxMKR1QyNTQ2ODg0MzExMC8GA1UECxMoU2VlIHd3dy5nZW90cnVzdC5j b20vcmVzb3VyY2VzL2NwcyAoYykxMDEvMC0GA1UECxMmRG9tYWluIENvbnRyb2wg VmFsaWRhdGVkIC0gUXVpY2tTU0woUikxIDAeBgNVBAMTF3NoaWJib2xldGguaGln aHdpcmUub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCzSPN2X9bk5MHB f6mUZ/CvBKfgEn46C7GnyzhKuEhsmppVKCxPenesKPvSmxpWWz7/Iwqusq7WHR0Z yVz4qHAyNPmN3U9HHGUeDlU1FZF9xltfzwoYcHJrSDXkSMAoV654f7L4wesBVSjj nPzmbIJlSbKYBbDFY60+dRlSwpRJ1wIDAQABo4HSMIHPMB8GA1UdIwQYMBaAFEjm aPkr0rKV10fYIyAQTzOYkJ/UMA4GA1UdDwEB/wQEAwIE8DAdBgNVHSUEFjAUBggr BgEFBQcDAQYIKwYBBQUHAwIwIgYDVR0RBBswGYIXc2hpYmJvbGV0aC5oaWdod2ly ZS5vcmcwOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC5nZW90cnVzdC5jb20v Y3Jscy9zZWN1cmVjYS5jcmwwHQYDVR0OBBYEFKEHn+uq2uvGkQRbITzHGnUL2a7z MA0GCSqGSIb3DQEBBQUAA4GBAEPaX1aKQj5ePOM8rAGI+T43+f/53tE5ga2O8kvg a4P5WEjXn8A4vnNSHRAHuj5qye0R8f2dqnNHH2znsw1ZMDuUERXn7mqrq6dqWiSq W2YFcT09X+2GlGNmhKY9VxhZH5szboc5IPWil9GpubtQ9cfz8ukLTaAwklS2wn1Y oZQx urn:mace:shibboleth:1.0:nameIdentifier Ryan Krebs shibboleth-admin@highwire.stanford.edu MIIDjzCCAvigAwIBAgIDE2llMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0 aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTAwNjE1MDgyMzA1WhcNMTEwNjE3MjIzMDEy WjCB9TEpMCcGA1UEBRMgc1dtTE9QaC9MR3VpdmFFV1U3dmJxTTExZERzbEdORFMx CzAJBgNVBAYTAlVTMSAwHgYDVQQKExdzaGliYm9sZXRoLmhpZ2h3aXJlLm9yZzET MBEGA1UECxMKR1QyNTQ2ODg0MzExMC8GA1UECxMoU2VlIHd3dy5nZW90cnVzdC5j b20vcmVzb3VyY2VzL2NwcyAoYykxMDEvMC0GA1UECxMmRG9tYWluIENvbnRyb2wg VmFsaWRhdGVkIC0gUXVpY2tTU0woUikxIDAeBgNVBAMTF3NoaWJib2xldGguaGln aHdpcmUub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCzSPN2X9bk5MHB f6mUZ/CvBKfgEn46C7GnyzhKuEhsmppVKCxPenesKPvSmxpWWz7/Iwqusq7WHR0Z yVz4qHAyNPmN3U9HHGUeDlU1FZF9xltfzwoYcHJrSDXkSMAoV654f7L4wesBVSjj nPzmbIJlSbKYBbDFY60+dRlSwpRJ1wIDAQABo4HSMIHPMB8GA1UdIwQYMBaAFEjm aPkr0rKV10fYIyAQTzOYkJ/UMA4GA1UdDwEB/wQEAwIE8DAdBgNVHSUEFjAUBggr BgEFBQcDAQYIKwYBBQUHAwIwIgYDVR0RBBswGYIXc2hpYmJvbGV0aC5oaWdod2ly ZS5vcmcwOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC5nZW90cnVzdC5jb20v Y3Jscy9zZWN1cmVjYS5jcmwwHQYDVR0OBBYEFKEHn+uq2uvGkQRbITzHGnUL2a7z MA0GCSqGSIb3DQEBBQUAA4GBAEPaX1aKQj5ePOM8rAGI+T43+f/53tE5ga2O8kvg a4P5WEjXn8A4vnNSHRAHuj5qye0R8f2dqnNHH2znsw1ZMDuUERXn7mqrq6dqWiSq W2YFcT09X+2GlGNmhKY9VxhZH5szboc5IPWil9GpubtQ9cfz8ukLTaAwklS2wn1Y oZQx MIIDjzCCAvigAwIBAgIDE2llMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0 aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTAwNjE1MDgyMzA1WhcNMTEwNjE3MjIzMDEy WjCB9TEpMCcGA1UEBRMgc1dtTE9QaC9MR3VpdmFFV1U3dmJxTTExZERzbEdORFMx CzAJBgNVBAYTAlVTMSAwHgYDVQQKExdzaGliYm9sZXRoLmhpZ2h3aXJlLm9yZzET MBEGA1UECxMKR1QyNTQ2ODg0MzExMC8GA1UECxMoU2VlIHd3dy5nZW90cnVzdC5j b20vcmVzb3VyY2VzL2NwcyAoYykxMDEvMC0GA1UECxMmRG9tYWluIENvbnRyb2wg VmFsaWRhdGVkIC0gUXVpY2tTU0woUikxIDAeBgNVBAMTF3NoaWJib2xldGguaGln aHdpcmUub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCzSPN2X9bk5MHB f6mUZ/CvBKfgEn46C7GnyzhKuEhsmppVKCxPenesKPvSmxpWWz7/Iwqusq7WHR0Z yVz4qHAyNPmN3U9HHGUeDlU1FZF9xltfzwoYcHJrSDXkSMAoV654f7L4wesBVSjj nPzmbIJlSbKYBbDFY60+dRlSwpRJ1wIDAQABo4HSMIHPMB8GA1UdIwQYMBaAFEjm aPkr0rKV10fYIyAQTzOYkJ/UMA4GA1UdDwEB/wQEAwIE8DAdBgNVHSUEFjAUBggr BgEFBQcDAQYIKwYBBQUHAwIwIgYDVR0RBBswGYIXc2hpYmJvbGV0aC5oaWdod2ly ZS5vcmcwOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC5nZW90cnVzdC5jb20v Y3Jscy9zZWN1cmVjYS5jcmwwHQYDVR0OBBYEFKEHn+uq2uvGkQRbITzHGnUL2a7z MA0GCSqGSIb3DQEBBQUAA4GBAEPaX1aKQj5ePOM8rAGI+T43+f/53tE5ga2O8kvg a4P5WEjXn8A4vnNSHRAHuj5qye0R8f2dqnNHH2znsw1ZMDuUERXn7mqrq6dqWiSq W2YFcT09X+2GlGNmhKY9VxhZH5szboc5IPWil9GpubtQ9cfz8ukLTaAwklS2wn1Y oZQx urn:mace:shibboleth:1.0:nameIdentifier Ryan Krebs shibboleth-admin@highwire.stanford.edu MIIC9TCCAl6gAwIBAgIJAJ91E39MhsLiMA0GCSqGSIb3DQEBBQUAMFsxCzAJBgNV BAYTAkZSMS4wLAYDVQQKEyVDaGFuY2VsbGVyaWUgZGVzIFVuaXZlcnNpdGVzIGRl IFBhcmlzMRwwGgYDVQQDExNlZHVzcG90LnNvcmJvbm5lLmZyMB4XDTExMDIxMDEw NTAyN1oXDTMxMDIwNTEwNTAyN1owWzELMAkGA1UEBhMCRlIxLjAsBgNVBAoTJUNo YW5jZWxsZXJpZSBkZXMgVW5pdmVyc2l0ZXMgZGUgUGFyaXMxHDAaBgNVBAMTE2Vk dXNwb3Quc29yYm9ubmUuZnIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALKx sNmlKnLJL3dESoiYNEmd/M+Xz2dvhz1BBSOwIZNSfvo59PNuK6Z8cAJ0MKQQHGR4 l/9kXt0AS2kNFC9xCuM8vsWh/9kkhodJ3zR31uTkvypuoQU0+r3b85ZE2U2Gg8ic tVaYAqz7V0oSzydhx2z5Yzjbe49VBY0IzKByrpVVAgMBAAGjgcAwgb0wHQYDVR0O BBYEFOA+T4d3pjYlR4bkArE8vp3A84afMIGNBgNVHSMEgYUwgYKAFOA+T4d3pjYl R4bkArE8vp3A84afoV+kXTBbMQswCQYDVQQGEwJGUjEuMCwGA1UEChMlQ2hhbmNl bGxlcmllIGRlcyBVbml2ZXJzaXRlcyBkZSBQYXJpczEcMBoGA1UEAxMTZWR1c3Bv dC5zb3Jib25uZS5mcoIJAJ91E39MhsLiMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcN AQEFBQADgYEAAvas3VXfsEkMchUQ6uyutcNqINA6k+nV1cvIUhX8mxISbTRTdcNr n2G2uDO0wNF5OKap71IEyFYM4wbEhAHWreXnpwV24PiKSdJQGMwV8JXtIPtbwZ2C nf6329OuqYDvLz3srJtewYE2fYDqtykmhqR6GLMWIzu0xtSodBmG3tI= MIIC9TCCAl6gAwIBAgIJAJ91E39MhsLiMA0GCSqGSIb3DQEBBQUAMFsxCzAJBgNV BAYTAkZSMS4wLAYDVQQKEyVDaGFuY2VsbGVyaWUgZGVzIFVuaXZlcnNpdGVzIGRl IFBhcmlzMRwwGgYDVQQDExNlZHVzcG90LnNvcmJvbm5lLmZyMB4XDTExMDIxMDEw NTAyN1oXDTMxMDIwNTEwNTAyN1owWzELMAkGA1UEBhMCRlIxLjAsBgNVBAoTJUNo YW5jZWxsZXJpZSBkZXMgVW5pdmVyc2l0ZXMgZGUgUGFyaXMxHDAaBgNVBAMTE2Vk dXNwb3Quc29yYm9ubmUuZnIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALKx sNmlKnLJL3dESoiYNEmd/M+Xz2dvhz1BBSOwIZNSfvo59PNuK6Z8cAJ0MKQQHGR4 l/9kXt0AS2kNFC9xCuM8vsWh/9kkhodJ3zR31uTkvypuoQU0+r3b85ZE2U2Gg8ic tVaYAqz7V0oSzydhx2z5Yzjbe49VBY0IzKByrpVVAgMBAAGjgcAwgb0wHQYDVR0O BBYEFOA+T4d3pjYlR4bkArE8vp3A84afMIGNBgNVHSMEgYUwgYKAFOA+T4d3pjYl R4bkArE8vp3A84afoV+kXTBbMQswCQYDVQQGEwJGUjEuMCwGA1UEChMlQ2hhbmNl bGxlcmllIGRlcyBVbml2ZXJzaXRlcyBkZSBQYXJpczEcMBoGA1UEAxMTZWR1c3Bv dC5zb3Jib25uZS5mcoIJAJ91E39MhsLiMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcN AQEFBQADgYEAAvas3VXfsEkMchUQ6uyutcNqINA6k+nV1cvIUhX8mxISbTRTdcNr n2G2uDO0wNF5OKap71IEyFYM4wbEhAHWreXnpwV24PiKSdJQGMwV8JXtIPtbwZ2C nf6329OuqYDvLz3srJtewYE2fYDqtykmhqR6GLMWIzu0xtSodBmG3tI= Jean-Marc LIGER siris@sorbonne.fr Jean-Pierre LE MOAN lemoan@siris.sorbonne.fr sciencespobordeaux.fr scpobx.fr MIIEkDCCA3igAwIBAgIRAJzjTT6bg4+QhDI8IGescp8wDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0xMTAyMDgwMDAwMDBaFw0xNDAyMDcyMzU5NTlaMGExCzAJBgNV BAYTAkZSMQ8wDQYDVQQHEwZQZXNzYWMxHTAbBgNVBAoTFFNjaWVuY2VzIFBvIEJv cmRlYXV4MSIwIAYDVQQDExlpZHAuc2NpZW5jZXNwb2JvcmRlYXV4LmZyMIIBIjAN BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0y1w1SapxrGmZ0kcubJtxA+a+DH/ nv0R2Qg4WdacENkzIyNVOdzrwYzHyo4Qux1M+mpWF+0A34ILNTtZyD09uRoYnj5F 7JmY6Rdd3sjliL+b8V0+gr68Hu6g6c/KD+VtYuW8OiapKLWcP6dHHSkLPt7Aipb+ BaYAeV7zsKergliVKn9vdcTN4qFSYbZLsFCCq+TLWcb5Zt24soRf0Aig4ATEMO5X z8qZAHShZ/83yR5Ql5ChhnaH95ldUhyfVcbC2lcOUGol4UKIr9Ndl3WA2LRE4Y+Y slyGbVOt9v6hk3cAsJgw7T3K5E+AIi6SuL7k6p3x/yuiHquRUZjT8Owj3wIDAQAB o4IBbDCCAWgwHwYDVR0jBBgwFoAUDL2TaAzz3qujSWsrN1dH6pDjue0wHQYDVR0O BBYEFLJC1NFm9gAudgj7xxJCW095Qwl1MA4GA1UdDwEB/wQEAwIFoDAMBgNVHRMB Af8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAYBgNVHSAEETAP MA0GCysGAQQBsjEBAgIdMDoGA1UdHwQzMDEwL6AtoCuGKWh0dHA6Ly9jcmwudGNz LnRlcmVuYS5vcmcvVEVSRU5BU1NMQ0EuY3JsMG0GCCsGAQUFBwEBBGEwXzA1Bggr BgEFBQcwAoYpaHR0cDovL2NydC50Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xDQS5j cnQwJgYIKwYBBQUHMAGGGmh0dHA6Ly9vY3NwLnRjcy50ZXJlbmEub3JnMCQGA1Ud EQQdMBuCGWlkcC5zY2llbmNlc3BvYm9yZGVhdXguZnIwDQYJKoZIhvcNAQEFBQAD ggEBABM5crkQbXiRohcjJgae3y9MPJZcWT5EKLKVc751iA8KXo3wVF8rdwVhESQ8 cmd2BV7qYQBh19mPfWA9A3nNRhc92ElackeBhF9nOQAoeiWCtTwyqQFlY+Sy9t7/ o+wpprhtqiBgLIVTduiDGGnlKasbWG9Gu5dX9SZ99YSRrYKN8bJAnyKgnhhPLpcz YKnhDvtia42oMyL42dNmMt3WC6fgacHKK5gn854jExb1zxOZ0EZ5Se0nWmUift1I xr6/zUxLKQsLBvsoMidrpEdtqp9m/OkQh5w2yKN4SzxuPzZsfMWK5p/jEgm7MMY5 qdkYclgdqLgBlFr/yaGI1mcNQMY= urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Sciences Po Bordeaux Sciences Po Bordeaux http://unknown.site.com Rouger p.rouger@sciencespobordeaux.fr sciences-po.fr sciences-po.org sciencespo.fr MIIDUDCCAjigAwIBAgIVAPSayRf4eNPJKhqMWVppnJInJ6XeMA0GCSqGSIb3DQEB BQUAMCQxIjAgBgNVBAMTGWZlZGVyYXRpb24uc2NpZW5jZXMtcG8uZnIwHhcNMDkx MTA5MTcwMjM1WhcNMjkxMTA5MTcwMjM1WjAkMSIwIAYDVQQDExlmZWRlcmF0aW9u LnNjaWVuY2VzLXBvLmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA 3uIR9QwANsZZFf0MAGhbhYdMLZRGMijmIN2T/s/dxsQyYDybx7cfQMctEvsWP1NR dMEZ6rNR0wD3uyLI3DZUCoezeHkyY/s1vPqeJFIlzoaQvzR5uVm2Is37gqGEDTKs /M0tCLiXiTZQkxaOxq+HXypNrhUTw2EkXuhomk8LD6sRdAzaKpxGatqkfwByGUXS SkTJqeV0eX5BmC32WPG/vtWqaKUM7H+OjJ/QRQrbfir2znW3Wf4aAAkppJtnvtYY ZkUiOjvziKNlbvwI4GyDiDfl5oGvP5JHIzy4vPBCdLW1JBZhnnOnLv7+nca/g9Ke RlmoOOR2VGqwkAzmwm+83wIDAQABo3kwdzBWBgNVHREETzBNghlmZWRlcmF0aW9u LnNjaWVuY2VzLXBvLmZyhjBodHRwczovL2ZlZGVyYXRpb24uc2NpZW5jZXMtcG8u ZnIvaWRwL3NoaWJib2xldGgwHQYDVR0OBBYEFAFHMcFjXGUqoshwWJhBzgyBC4zL MA0GCSqGSIb3DQEBBQUAA4IBAQDKpWas1Dj9IjKV3yYvTDsxGeZ2uFa1WGo5iKdV +1US2VwADvq7896oRvLDWCpQmh04X6wNee1T6HgHBLsvnFv9PlAjqRmC0likrtet mEf2+tD06zwxnJFj8EwwPTRGXKU5z6vq5QUQtKckCfZTf7W+LhBOd3Oi7/GFHyea p8xY8/Xkx+nxiEJk5IPN1oboKWe0b7Liy7ZowGCXqRsWcFf41APBmzxvqiXGuTem YLbweS7USGQdYgrw8ZYIBgH59pVjdPORwc8c0tCr9jwAavYehWEDd1Hs8S/rma+Q juXUI4qWzUOgFDOh1MiSBezPFp1576XseU8Hiw1T7QZIAhgK MIIDUDCCAjigAwIBAgIVALYXRzpnlr2ss74It/kPDT1kzxV4MA0GCSqGSIb3DQEB BQUAMCQxIjAgBgNVBAMTGWZlZGVyYXRpb24uc2NpZW5jZXMtcG8uZnIwHhcNMDkw NjE5MDk1MTM3WhcNMjkwNjE5MDk1MTM3WjAkMSIwIAYDVQQDExlmZWRlcmF0aW9u LnNjaWVuY2VzLXBvLmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA s1g13BW6C5N7THGGpG7yk4HoX1kjbFjPYihbslRlGYSm2zccvivUkf5dENcIqfE6 qPT3D7uYqvrkeYcELXJ38BiHrtAmuzW3ss9gO/01g+uBjZDaXRguDG3qPz4fgxDl SbuahErVw5m7U7l388P/7veoBeaWzFx/eJeTX/hfIHvHa9I0kvnVUfS+D74WQ5vJ RjcF4nTL2g2vBQb+aytlC9PHid90ptvG2R9/WPCqz4vwUJVgIgemeJiUsQfOrnj2 6LkYCg4hd0WAV+fAaH25fE9ggu6iBqJcUfeyQ/mP3pJB00pE6dNjc5QfpXmFA/j7 jBC9mfHbBQ7KXIjdepwehQIDAQABo3kwdzBWBgNVHREETzBNghlmZWRlcmF0aW9u LnNjaWVuY2VzLXBvLmZyhjBodHRwczovL2ZlZGVyYXRpb24uc2NpZW5jZXMtcG8u ZnIvaWRwL3NoaWJib2xldGgwHQYDVR0OBBYEFNuAcsGNTTS7GMoor6NWV6kgG2ys MA0GCSqGSIb3DQEBBQUAA4IBAQBJcsldsyHR5MGPmkwziCuf3sM2PwzCa40/Mu3H NBbieS8YpQQQNaXsdct1xTCFjkS/gqNRsfd/ngelulZ4xD66h3oVbP1p03t0y3It D+x9X+p9S3TCld38H14x51zV3xPRf/fPDQen6bJ5VH7nqg9d7nnuyC1FLDkW6Eql HTcgCpmWplZnMsMkTqnvi5davtUgK2IxXvhzhN+pLdPxHELoMN4y4oyxnpRxs3A7 tKczTo9NPfV3G9zLwdktz35HRkF7mBfBGdZbJYHJZibHALTxeqXtFzkC+FK0R0hM RCOmYdr+xspPrnyaTVp1P2oNrHXtLHlWmLvtyoKzr0lGAMA8 urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient sciences-po.fr sciences-po.org sciencespo.fr MIIDUDCCAjigAwIBAgIVAPSayRf4eNPJKhqMWVppnJInJ6XeMA0GCSqGSIb3DQEB BQUAMCQxIjAgBgNVBAMTGWZlZGVyYXRpb24uc2NpZW5jZXMtcG8uZnIwHhcNMDkx MTA5MTcwMjM1WhcNMjkxMTA5MTcwMjM1WjAkMSIwIAYDVQQDExlmZWRlcmF0aW9u LnNjaWVuY2VzLXBvLmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA 3uIR9QwANsZZFf0MAGhbhYdMLZRGMijmIN2T/s/dxsQyYDybx7cfQMctEvsWP1NR dMEZ6rNR0wD3uyLI3DZUCoezeHkyY/s1vPqeJFIlzoaQvzR5uVm2Is37gqGEDTKs /M0tCLiXiTZQkxaOxq+HXypNrhUTw2EkXuhomk8LD6sRdAzaKpxGatqkfwByGUXS SkTJqeV0eX5BmC32WPG/vtWqaKUM7H+OjJ/QRQrbfir2znW3Wf4aAAkppJtnvtYY ZkUiOjvziKNlbvwI4GyDiDfl5oGvP5JHIzy4vPBCdLW1JBZhnnOnLv7+nca/g9Ke RlmoOOR2VGqwkAzmwm+83wIDAQABo3kwdzBWBgNVHREETzBNghlmZWRlcmF0aW9u LnNjaWVuY2VzLXBvLmZyhjBodHRwczovL2ZlZGVyYXRpb24uc2NpZW5jZXMtcG8u ZnIvaWRwL3NoaWJib2xldGgwHQYDVR0OBBYEFAFHMcFjXGUqoshwWJhBzgyBC4zL MA0GCSqGSIb3DQEBBQUAA4IBAQDKpWas1Dj9IjKV3yYvTDsxGeZ2uFa1WGo5iKdV +1US2VwADvq7896oRvLDWCpQmh04X6wNee1T6HgHBLsvnFv9PlAjqRmC0likrtet mEf2+tD06zwxnJFj8EwwPTRGXKU5z6vq5QUQtKckCfZTf7W+LhBOd3Oi7/GFHyea p8xY8/Xkx+nxiEJk5IPN1oboKWe0b7Liy7ZowGCXqRsWcFf41APBmzxvqiXGuTem YLbweS7USGQdYgrw8ZYIBgH59pVjdPORwc8c0tCr9jwAavYehWEDd1Hs8S/rma+Q juXUI4qWzUOgFDOh1MiSBezPFp1576XseU8Hiw1T7QZIAhgK MIIDUDCCAjigAwIBAgIVALYXRzpnlr2ss74It/kPDT1kzxV4MA0GCSqGSIb3DQEB BQUAMCQxIjAgBgNVBAMTGWZlZGVyYXRpb24uc2NpZW5jZXMtcG8uZnIwHhcNMDkw NjE5MDk1MTM3WhcNMjkwNjE5MDk1MTM3WjAkMSIwIAYDVQQDExlmZWRlcmF0aW9u LnNjaWVuY2VzLXBvLmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA s1g13BW6C5N7THGGpG7yk4HoX1kjbFjPYihbslRlGYSm2zccvivUkf5dENcIqfE6 qPT3D7uYqvrkeYcELXJ38BiHrtAmuzW3ss9gO/01g+uBjZDaXRguDG3qPz4fgxDl SbuahErVw5m7U7l388P/7veoBeaWzFx/eJeTX/hfIHvHa9I0kvnVUfS+D74WQ5vJ RjcF4nTL2g2vBQb+aytlC9PHid90ptvG2R9/WPCqz4vwUJVgIgemeJiUsQfOrnj2 6LkYCg4hd0WAV+fAaH25fE9ggu6iBqJcUfeyQ/mP3pJB00pE6dNjc5QfpXmFA/j7 jBC9mfHbBQ7KXIjdepwehQIDAQABo3kwdzBWBgNVHREETzBNghlmZWRlcmF0aW9u LnNjaWVuY2VzLXBvLmZyhjBodHRwczovL2ZlZGVyYXRpb24uc2NpZW5jZXMtcG8u ZnIvaWRwL3NoaWJib2xldGgwHQYDVR0OBBYEFNuAcsGNTTS7GMoor6NWV6kgG2ys MA0GCSqGSIb3DQEBBQUAA4IBAQBJcsldsyHR5MGPmkwziCuf3sM2PwzCa40/Mu3H NBbieS8YpQQQNaXsdct1xTCFjkS/gqNRsfd/ngelulZ4xD66h3oVbP1p03t0y3It D+x9X+p9S3TCld38H14x51zV3xPRf/fPDQen6bJ5VH7nqg9d7nnuyC1FLDkW6Eql HTcgCpmWplZnMsMkTqnvi5davtUgK2IxXvhzhN+pLdPxHELoMN4y4oyxnpRxs3A7 tKczTo9NPfV3G9zLwdktz35HRkF7mBfBGdZbJYHJZibHALTxeqXtFzkC+FK0R0hM RCOmYdr+xspPrnyaTVp1P2oNrHXtLHlWmLvtyoKzr0lGAMA8 urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Sciences Po Paris Sciences Po Paris http://unknown.site.com Grégory Quistrebert prs@sciences-po.fr François Cattin prs@sciences-po.fr MIIDRjCCAi6gAwIBAgIJAPpEsjMpUtq9MA0GCSqGSIb3DQEBBQUAMFExEzARBgoJ kiaJk/IsZAEZFgNuZXQxGjAYBgoJkiaJk/IsZAEZFgpzaGliYm9sZXRoMR4wHAYD VQQDExVpc3N1ZXMuc2hpYmJvbGV0aC5uZXQwHhcNMTEwMTA3MTg0MTQ4WhcNMTQw MTA2MTg0MTQ4WjBRMRMwEQYKCZImiZPyLGQBGRYDbmV0MRowGAYKCZImiZPyLGQB GRYKc2hpYmJvbGV0aDEeMBwGA1UEAxMVaXNzdWVzLnNoaWJib2xldGgubmV0MIIB IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtb4jIloWGvHJsSeq0PMjkWDA +hseZ6/6/cEJKPk245f6hktC2k3z0AqJL8Kw9OudOjDx2op2jKm45TuIA46ti6VP f4stLIi7mO1B4A6jTWThCwU0DjMCwBXLhANdBQloyUYJU/usN8RBXlPnWZAV1dVb ygb7GUorkMON+wnFd7nhBePmQdJfbsqvKN8MykWfQ56chS+0lCYhyT7qql2bskJ4 y621WSo47php2NyyU1KNcaFBLoao+UTH7KZ9qHOWJyGJGuWKwgZmCiVd0LQhWywP 3M/JxZvpTr2Bs/J5d8BzZGSFUaHrVcPzIX+5c3sdK4d1wXUur1XE++bh9F9TjwID AQABoyEwHzAdBgNVHQ4EFgQUHtV8GWr64AIUV634b9YBlMEpHOwwDQYJKoZIhvcN AQEFBQADggEBAEzcImXrjUNZF/8AbpcDOqlBO/neTxE0Lcnv4HevHmjqVaemxXK5 E2pAIJexcyCnp4EV7EK+5hpkr5J26iESHr3w4u/BvUvgSLNjlrIFw58mpBM9f+Qe q5bQWff+dmkhrxdhaIVraH70bsuxVKwycmUS0L11nOTxAQbh85wJbIwqH4fKAzQm jPp4VbLesRmUyDV+fY4YrZXHYosfuZLEexJgmgcRgZFug6NbWTclKnxKPhquYjem oHlA8E0OvkQswalMPLfSzhgftYNHohjdQ2oMBUC4uMk9T+r7ZeKkeCiXIzUzEh8M uQfWf/K4Fj4CqCzMOU3mmvy7ricwz/4Kzas= MIIDRjCCAi6gAwIBAgIJAPpEsjMpUtq9MA0GCSqGSIb3DQEBBQUAMFExEzARBgoJ kiaJk/IsZAEZFgNuZXQxGjAYBgoJkiaJk/IsZAEZFgpzaGliYm9sZXRoMR4wHAYD VQQDExVpc3N1ZXMuc2hpYmJvbGV0aC5uZXQwHhcNMTEwMTA3MTg0MTQ4WhcNMTQw MTA2MTg0MTQ4WjBRMRMwEQYKCZImiZPyLGQBGRYDbmV0MRowGAYKCZImiZPyLGQB GRYKc2hpYmJvbGV0aDEeMBwGA1UEAxMVaXNzdWVzLnNoaWJib2xldGgubmV0MIIB IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtb4jIloWGvHJsSeq0PMjkWDA +hseZ6/6/cEJKPk245f6hktC2k3z0AqJL8Kw9OudOjDx2op2jKm45TuIA46ti6VP f4stLIi7mO1B4A6jTWThCwU0DjMCwBXLhANdBQloyUYJU/usN8RBXlPnWZAV1dVb ygb7GUorkMON+wnFd7nhBePmQdJfbsqvKN8MykWfQ56chS+0lCYhyT7qql2bskJ4 y621WSo47php2NyyU1KNcaFBLoao+UTH7KZ9qHOWJyGJGuWKwgZmCiVd0LQhWywP 3M/JxZvpTr2Bs/J5d8BzZGSFUaHrVcPzIX+5c3sdK4d1wXUur1XE++bh9F9TjwID AQABoyEwHzAdBgNVHQ4EFgQUHtV8GWr64AIUV634b9YBlMEpHOwwDQYJKoZIhvcN AQEFBQADggEBAEzcImXrjUNZF/8AbpcDOqlBO/neTxE0Lcnv4HevHmjqVaemxXK5 E2pAIJexcyCnp4EV7EK+5hpkr5J26iESHr3w4u/BvUvgSLNjlrIFw58mpBM9f+Qe q5bQWff+dmkhrxdhaIVraH70bsuxVKwycmUS0L11nOTxAQbh85wJbIwqH4fKAzQm jPp4VbLesRmUyDV+fY4YrZXHYosfuZLEexJgmgcRgZFug6NbWTclKnxKPhquYjem oHlA8E0OvkQswalMPLfSzhgftYNHohjdQ2oMBUC4uMk9T+r7ZeKkeCiXIzUzEh8M uQfWf/K4Fj4CqCzMOU3mmvy7ricwz/4Kzas= urn:mace:shibboleth:1.0:nameIdentifier Shibboleth Contact contact@shibboleth.net MIIDQjCCAiqgAwIBAgIJAKMO1kGnu43yMA0GCSqGSIb3DQEBBQUAME8xEzARBgoJ kiaJk/IsZAEZFgNuZXQxGjAYBgoJkiaJk/IsZAEZFgpzaGliYm9sZXRoMRwwGgYD VQQDExN3aWtpLnNoaWJib2xldGgubmV0MB4XDTExMDEwNzE4NDIzN1oXDTE0MDEw NjE4NDIzN1owTzETMBEGCgmSJomT8ixkARkWA25ldDEaMBgGCgmSJomT8ixkARkW CnNoaWJib2xldGgxHDAaBgNVBAMTE3dpa2kuc2hpYmJvbGV0aC5uZXQwggEiMA0G CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC1viMiWhYa8cmxJ6rQ8yORYMD6Gx5n r/r9wQko+Tbjl/qGS0LaTfPQCokvwrD06506MPHainaMqbjlO4gDjq2LpU9/iy0s iLuY7UHgDqNNZOELBTQOMwLAFcuEA10FCWjJRglT+6w3xEFeU+dZkBXV1VvKBvsZ SiuQw437CcV3ueEF4+ZB0l9uyq8o3wzKRZ9DnpyFL7SUJiHJPuqqXZuyQnjLrbVZ KjjumGnY3LJTUo1xoUEuhqj5RMfspn2oc5YnIYka5YrCBmYKJV3QtCFbLA/cz8nF m+lOvYGz8nl3wHNkZIVRoetVw/Mhf7lzex0rh3XBdS6vVcT75uH0X1OPAgMBAAGj ITAfMB0GA1UdDgQWBBQe1XwZavrgAhRXrfhv1gGUwSkc7DANBgkqhkiG9w0BAQUF AAOCAQEAEv6zwotAweOLEfibTXm5d6odE2o/+rHdeEW+IEAspAvmCK7nAPFkuV47 WMn7JmOd7BWnoXmqFwefJFf3mZtadHnCXReSd8ehGA8/KerSxz9yClMaoanRTEb3 chT+n5Oh2+WgjzR/v5RbChihoOES+Z2mcvbDm9wn3uSBdxbAoG0/YZihaY9LeoNW /CVXv0HYfDw5csol6zwz6dgUDXpfXSXLLKnrjVwARM6lVh00i5i2nfmrWnI41bRh NtrvvBkq2tvnd6wm1DJNDzZQB/nRpCadwp4a64Qa0XJiGCoxFUvkd1+RSHqbBsEF 6w3nDMcYq/BKnF30KZ0Q274eVyQolg== MIIDQjCCAiqgAwIBAgIJAKMO1kGnu43yMA0GCSqGSIb3DQEBBQUAME8xEzARBgoJ kiaJk/IsZAEZFgNuZXQxGjAYBgoJkiaJk/IsZAEZFgpzaGliYm9sZXRoMRwwGgYD VQQDExN3aWtpLnNoaWJib2xldGgubmV0MB4XDTExMDEwNzE4NDIzN1oXDTE0MDEw NjE4NDIzN1owTzETMBEGCgmSJomT8ixkARkWA25ldDEaMBgGCgmSJomT8ixkARkW CnNoaWJib2xldGgxHDAaBgNVBAMTE3dpa2kuc2hpYmJvbGV0aC5uZXQwggEiMA0G CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC1viMiWhYa8cmxJ6rQ8yORYMD6Gx5n r/r9wQko+Tbjl/qGS0LaTfPQCokvwrD06506MPHainaMqbjlO4gDjq2LpU9/iy0s iLuY7UHgDqNNZOELBTQOMwLAFcuEA10FCWjJRglT+6w3xEFeU+dZkBXV1VvKBvsZ SiuQw437CcV3ueEF4+ZB0l9uyq8o3wzKRZ9DnpyFL7SUJiHJPuqqXZuyQnjLrbVZ KjjumGnY3LJTUo1xoUEuhqj5RMfspn2oc5YnIYka5YrCBmYKJV3QtCFbLA/cz8nF m+lOvYGz8nl3wHNkZIVRoetVw/Mhf7lzex0rh3XBdS6vVcT75uH0X1OPAgMBAAGj ITAfMB0GA1UdDgQWBBQe1XwZavrgAhRXrfhv1gGUwSkc7DANBgkqhkiG9w0BAQUF AAOCAQEAEv6zwotAweOLEfibTXm5d6odE2o/+rHdeEW+IEAspAvmCK7nAPFkuV47 WMn7JmOd7BWnoXmqFwefJFf3mZtadHnCXReSd8ehGA8/KerSxz9yClMaoanRTEb3 chT+n5Oh2+WgjzR/v5RbChihoOES+Z2mcvbDm9wn3uSBdxbAoG0/YZihaY9LeoNW /CVXv0HYfDw5csol6zwz6dgUDXpfXSXLLKnrjVwARM6lVh00i5i2nfmrWnI41bRh NtrvvBkq2tvnd6wm1DJNDzZQB/nRpCadwp4a64Qa0XJiGCoxFUvkd1+RSHqbBsEF 6w3nDMcYq/BKnF30KZ0Q274eVyQolg== urn:mace:shibboleth:1.0:nameIdentifier Shibboleth Contact contact@shibboleth.net www.sympa.org CN=www.sympa.org,O=CRU,C=FR MIICejCCAeOgAwIBAgIJAJnxdJGVfGAeMA0GCSqGSIb3DQEBBQUAMDMxCzAJBgNV BAYTAkZSMQwwCgYDVQQKEwNDUlUxFjAUBgNVBAMTDXd3dy5zeW1wYS5vcmcwHhcN MDgwMzIwMTQ0NTQ4WhcNMjgwMzE1MTQ0NTQ4WjAzMQswCQYDVQQGEwJGUjEMMAoG A1UEChMDQ1JVMRYwFAYDVQQDEw13d3cuc3ltcGEub3JnMIGfMA0GCSqGSIb3DQEB AQUAA4GNADCBiQKBgQChP31mNdgalD3PWJHh/P+O1KHVhRCLXOVXVMSg8VHI+0rR fX6Ajc2ux7WurpelXmo4nafAGEKoz5Y8m9Ph/Zgtb/PXQC3ydWvDD4DIPfKC2jhR aEbZSstXhU3pZY0lLgu7ZHe8RuWmuZT11RKCQXDu2IFBSGIg51TnJuUjSw0sYQID AQABo4GVMIGSMB0GA1UdDgQWBBQ295bivnTKDVtbzYASdob7fDrnUjBjBgNVHSME XDBagBQ295bivnTKDVtbzYASdob7fDrnUqE3pDUwMzELMAkGA1UEBhMCRlIxDDAK BgNVBAoTA0NSVTEWMBQGA1UEAxMNd3d3LnN5bXBhLm9yZ4IJAJnxdJGVfGAeMAwG A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAlB3jg+IyBkO45Wo61YE32N6O 0+pVQaMGMf3jCwxRrM96dSJHj0NhTor3ZIsqzhRYZDRR67wJzk0D7QQCnOW90mlg d99p9wFKc5VN5aKrlDrU5guLjbl4avX/IEi1Sjj2eio6sKE/E5JsUs0ct3edtkXB QfGIdEliJJoWsN5ba6I= www.sympa.org CN=www.sympa.org,O=CRU,C=FR MIICejCCAeOgAwIBAgIJAJnxdJGVfGAeMA0GCSqGSIb3DQEBBQUAMDMxCzAJBgNV BAYTAkZSMQwwCgYDVQQKEwNDUlUxFjAUBgNVBAMTDXd3dy5zeW1wYS5vcmcwHhcN MDgwMzIwMTQ0NTQ4WhcNMjgwMzE1MTQ0NTQ4WjAzMQswCQYDVQQGEwJGUjEMMAoG A1UEChMDQ1JVMRYwFAYDVQQDEw13d3cuc3ltcGEub3JnMIGfMA0GCSqGSIb3DQEB AQUAA4GNADCBiQKBgQChP31mNdgalD3PWJHh/P+O1KHVhRCLXOVXVMSg8VHI+0rR fX6Ajc2ux7WurpelXmo4nafAGEKoz5Y8m9Ph/Zgtb/PXQC3ydWvDD4DIPfKC2jhR aEbZSstXhU3pZY0lLgu7ZHe8RuWmuZT11RKCQXDu2IFBSGIg51TnJuUjSw0sYQID AQABo4GVMIGSMB0GA1UdDgQWBBQ295bivnTKDVtbzYASdob7fDrnUjBjBgNVHSME XDBagBQ295bivnTKDVtbzYASdob7fDrnUqE3pDUwMzELMAkGA1UEBhMCRlIxDDAK BgNVBAoTA0NSVTEWMBQGA1UEAxMNd3d3LnN5bXBhLm9yZ4IJAJnxdJGVfGAeMAwG A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAlB3jg+IyBkO45Wo61YE32N6O 0+pVQaMGMf3jCwxRrM96dSJHj0NhTor3ZIsqzhRYZDRR67wJzk0D7QQCnOW90mlg d99p9wFKc5VN5aKrlDrU5guLjbl4avX/IEi1Sjj2eio6sKE/E5JsUs0ct3edtkXB QfGIdEliJJoWsN5ba6I= telecom-lille1.eu MIIDPzCCAiegAwIBAgIUJLHfF/BYKnVTAfbCyG7p6neXmikwDQYJKoZIhvcNAQEF BQAwIDEeMBwGA1UEAxMVaWRwLnRlbGVjb20tbGlsbGUxLmV1MB4XDTA5MTAxMzEy NTE1NVoXDTI5MTAxMzEyNTE1NVowIDEeMBwGA1UEAxMVaWRwLnRlbGVjb20tbGls bGUxLmV1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAke9f/k5yNntZ mKHJse2R1dALp2yQ431GM7WgcwLz61E10KQFp4QvHcRnOA28aQ2ftOdDYXF8Ce/g l/f/gzmfLI3UkV33VQnu7wTUcG7qnA4ixmSz1wXshiBNiCqy+DlvzxxFa1rrrhTK DCGNxJEsNcT42xnnoL739jJt7hhwOzNTR6jd+PtnkBBJkULj0JNU3lgVVLaic61Z 2sqqbp976AE81I5Peu/uNwBEQEze3JZFq4lPMftIT1qCrpZueUzZJe/IaB8gckur U+ts8Qk7X6LaWA9rHLz3M1cS5I/nFgxX5BzNTpJac8YEFl4rN0j8VVNKMuQ8NPoz lMSlVexERQIDAQABo3EwbzBOBgNVHREERzBFghVpZHAudGVsZWNvbS1saWxsZTEu ZXWGLGh0dHBzOi8vaWRwLnRlbGVjb20tbGlsbGUxLmV1L2lkcC9zaGliYm9sZXRo MB0GA1UdDgQWBBRIcbHtrFzmqsjXU8/WEtUyCjUm+DANBgkqhkiG9w0BAQUFAAOC AQEAfeUGRk0BupcoO20DeNRmBokqCZn0N7n5mmco4eJWjl4CD0dvxcNmTHmO9nYS FPVBNASEjmnaU12RSAIM0mVnLwo6kXAQsbKa2xKGL6l3jkmsvcEj8F1Dg5e0QGBe eSdYLGI2mGbAoIQWeK3majTQXZ+UyzVXKjzJ2JCk96MvEwKODd4HGX+Z8eMRE/0A SoP9I+z1FYAuXjOeKazq+UY3jbiSx/UDBAA0g7FHkzJRaFiws0BZiiOkqPMHLGlB cjxHOjLM8xkrkI3+w28uv1nrNWH82728WeyMt5PWqVTyKg8SjPViZWusJF0KUkS/ /jKovrhBMghl87+BWkzQTRzSyw== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient telecom-lille1.eu MIIDPzCCAiegAwIBAgIUJLHfF/BYKnVTAfbCyG7p6neXmikwDQYJKoZIhvcNAQEF BQAwIDEeMBwGA1UEAxMVaWRwLnRlbGVjb20tbGlsbGUxLmV1MB4XDTA5MTAxMzEy NTE1NVoXDTI5MTAxMzEyNTE1NVowIDEeMBwGA1UEAxMVaWRwLnRlbGVjb20tbGls bGUxLmV1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAke9f/k5yNntZ mKHJse2R1dALp2yQ431GM7WgcwLz61E10KQFp4QvHcRnOA28aQ2ftOdDYXF8Ce/g l/f/gzmfLI3UkV33VQnu7wTUcG7qnA4ixmSz1wXshiBNiCqy+DlvzxxFa1rrrhTK DCGNxJEsNcT42xnnoL739jJt7hhwOzNTR6jd+PtnkBBJkULj0JNU3lgVVLaic61Z 2sqqbp976AE81I5Peu/uNwBEQEze3JZFq4lPMftIT1qCrpZueUzZJe/IaB8gckur U+ts8Qk7X6LaWA9rHLz3M1cS5I/nFgxX5BzNTpJac8YEFl4rN0j8VVNKMuQ8NPoz lMSlVexERQIDAQABo3EwbzBOBgNVHREERzBFghVpZHAudGVsZWNvbS1saWxsZTEu ZXWGLGh0dHBzOi8vaWRwLnRlbGVjb20tbGlsbGUxLmV1L2lkcC9zaGliYm9sZXRo MB0GA1UdDgQWBBRIcbHtrFzmqsjXU8/WEtUyCjUm+DANBgkqhkiG9w0BAQUFAAOC AQEAfeUGRk0BupcoO20DeNRmBokqCZn0N7n5mmco4eJWjl4CD0dvxcNmTHmO9nYS FPVBNASEjmnaU12RSAIM0mVnLwo6kXAQsbKa2xKGL6l3jkmsvcEj8F1Dg5e0QGBe eSdYLGI2mGbAoIQWeK3majTQXZ+UyzVXKjzJ2JCk96MvEwKODd4HGX+Z8eMRE/0A SoP9I+z1FYAuXjOeKazq+UY3jbiSx/UDBAA0g7FHkzJRaFiws0BZiiOkqPMHLGlB cjxHOjLM8xkrkI3+w28uv1nrNWH82728WeyMt5PWqVTyKg8SjPViZWusJF0KUkS/ /jKovrhBMghl87+BWkzQTRzSyw== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Telecom Lille1 Telecom Lille1 http://unknown.site.com Landru jacques.landru@telecom-lille1.eu Sion martine.sion@telecom-lille1.eu it-sudparis.eu MIIDSDCCAjCgAwIBAgIVAJv2l61sKf1VgzgHPgGRdmvIdBeGMA0GCSqGSIb3DQEB BQUAMCIxIDAeBgNVBAMTF3NoaWJpZHAxLml0LXN1ZHBhcmlzLmV1MB4XDTA4MTIw NDA4MjIwNFoXDTI4MTIwNDA4MjIwNFowIjEgMB4GA1UEAxMXc2hpYmlkcDEuaXQt c3VkcGFyaXMuZXUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDI6RH6 /i1p4Fwnp+SxINDTFESSAByc3/a7gL4uIjufRKaraJIIuUfQ/8PQud6mTnKmTSY1 +174E9r78IAThKTbdX0Y86JxcAlPXkaPFj3G2aMZEy7YkjxHg7bEqKmrtEmEi5ls 69NQXJae1/v3ReBfNmsmb4lpfLqnspHzN0kM2x9ieuCUTuw6Umwc65Za9GK9J0n/ 8G370vVn9MUWcObx4qeqmeKvXK61KpAQQ5VPSrobB0NafFHq2OHb4Eq6NJmjb3xH Q0jNrga28YNDxKSjLF8hUolTr4bdBroqFKqqRK2DOukXsgkYgy6mTwxMbHlbzTX/ URM7K655kFIcojcpAgMBAAGjdTBzMFIGA1UdEQRLMEmCF3NoaWJpZHAxLml0LXN1 ZHBhcmlzLmV1hi5odHRwczovL3NoaWJpZHAxLml0LXN1ZHBhcmlzLmV1L2lkcC9z aGliYm9sZXRoMB0GA1UdDgQWBBS6EIElOxCx56mi697wUipVtEHCsjANBgkqhkiG 9w0BAQUFAAOCAQEAxSHKlhfZ3cHud+7KJHl0seAdQpwOC11jLz9eOsIzjPSVnPJQ W8rUAUA2kWKiMrmQS6t6nEpPKnx5BcySXMLi5wuvcQ40IWUnPtebALmh26KSheiE 7rmFxq4bKZhG+ZoOqYphlDhqPoDLVpMny5jgePyq5gvLFO03a7e3DsLeH1Shf6sk 17+1tixG41PVxw5Lfl8ODvBF2wmY/josVaZfJ3CbJoQhByUDAGH/Cf327CcefloP PoLdCyt/DO1aGflUdiQA/DF96+XlbGEQL7edHtEsELKz66Z8WK6fasHqNInlTe+S SA354+sPezlzSyImVbYaHH6naLQuFV7cmUNPOQ== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient it-sudparis.eu MIIDSDCCAjCgAwIBAgIVAJv2l61sKf1VgzgHPgGRdmvIdBeGMA0GCSqGSIb3DQEB BQUAMCIxIDAeBgNVBAMTF3NoaWJpZHAxLml0LXN1ZHBhcmlzLmV1MB4XDTA4MTIw NDA4MjIwNFoXDTI4MTIwNDA4MjIwNFowIjEgMB4GA1UEAxMXc2hpYmlkcDEuaXQt c3VkcGFyaXMuZXUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDI6RH6 /i1p4Fwnp+SxINDTFESSAByc3/a7gL4uIjufRKaraJIIuUfQ/8PQud6mTnKmTSY1 +174E9r78IAThKTbdX0Y86JxcAlPXkaPFj3G2aMZEy7YkjxHg7bEqKmrtEmEi5ls 69NQXJae1/v3ReBfNmsmb4lpfLqnspHzN0kM2x9ieuCUTuw6Umwc65Za9GK9J0n/ 8G370vVn9MUWcObx4qeqmeKvXK61KpAQQ5VPSrobB0NafFHq2OHb4Eq6NJmjb3xH Q0jNrga28YNDxKSjLF8hUolTr4bdBroqFKqqRK2DOukXsgkYgy6mTwxMbHlbzTX/ URM7K655kFIcojcpAgMBAAGjdTBzMFIGA1UdEQRLMEmCF3NoaWJpZHAxLml0LXN1 ZHBhcmlzLmV1hi5odHRwczovL3NoaWJpZHAxLml0LXN1ZHBhcmlzLmV1L2lkcC9z aGliYm9sZXRoMB0GA1UdDgQWBBS6EIElOxCx56mi697wUipVtEHCsjANBgkqhkiG 9w0BAQUFAAOCAQEAxSHKlhfZ3cHud+7KJHl0seAdQpwOC11jLz9eOsIzjPSVnPJQ W8rUAUA2kWKiMrmQS6t6nEpPKnx5BcySXMLi5wuvcQ40IWUnPtebALmh26KSheiE 7rmFxq4bKZhG+ZoOqYphlDhqPoDLVpMny5jgePyq5gvLFO03a7e3DsLeH1Shf6sk 17+1tixG41PVxw5Lfl8ODvBF2wmY/josVaZfJ3CbJoQhByUDAGH/Cf327CcefloP PoLdCyt/DO1aGflUdiQA/DF96+XlbGEQL7edHtEsELKz66Z8WK6fasHqNInlTe+S SA354+sPezlzSyImVbYaHH6naLQuFV7cmUNPOQ== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Telecom et Management SudParis Telecom et Management SudParis http://unknown.site.com Procaccia infomatique@it-sudparis.eu Gaboret infomatique@it-sudparis.eu wpublic.it-sudparis.eu CN=wpublic.it-sudparis.eu MIIDCTCCAfGgAwIBAgIJAKkJ5YK4FZlHMA0GCSqGSIb3DQEBBQUAMCExHzAdBgNV BAMTFndwdWJsaWMuaXQtc3VkcGFyaXMuZXUwHhcNMDkxMTA0MTM0NzM1WhcNMTkx MTAyMTM0NzM1WjAhMR8wHQYDVQQDExZ3cHVibGljLml0LXN1ZHBhcmlzLmV1MIIB IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSqIqSnGoj3j88pJ9aeZs9f PHZJpNUdbLPvfDzzHcBIL8vgelJDF6HD+eKfkO3hibT3W4g/UsUBfEw+se9ky1+H 69HHl/7YAkJChbNVBVnxcsTmNqbzIlNX4hX2Kj05Je5+ERvjPeAiGfyW7eMHTdrF j8HlpCoC8euPoCoPLtGn635D+Ljnphe1BIQF7QozSS0bvOQutTWtSgu2Lc4VOKuK JbhGmlfreX9XO2hYpRfyVCWgyn6SJI4GFwk90mYeQEME4wJyNXRdWIsF+AoQf+B6 RkFUBt/QEgStIArAMvmODHhgIXnm3Ri2coqX/3OBlpdKB1+iou9pGnP0UugaFwID AQABo0QwQjAhBgNVHREEGjAYghZ3cHVibGljLml0LXN1ZHBhcmlzLmV1MB0GA1Ud DgQWBBRqQz37T7+2Z/yzdKm+AsqY1+XCpDANBgkqhkiG9w0BAQUFAAOCAQEAH8NF ncfaZErm2GlVwEkHkLOqnxAMpuQzLiQOdSZeo+If8liav15shtkStV1N4Zgf1wDj WVC2M3BDjSXunL90c1h8QygDQib4tvpT6p1K6xEVZVayR3fRIYY/rZDy7Jd28Nko xK7eqzW1v4r9rqSxFy+q5nU12iJ2Q70bjhvNmKPA6ap5uasA7iLjNey7p0cXxZhB x/pZ7JljkfA1xK4fgWkIZIdZjANgK2JOPWHVqWXYWFjGRrEUCT/yEH+EmBQF/30+ /r7W0gdMn5x9YCSGkdhnlTP1qjbrU7d9sHgo/uuipLNKIK0KsLzopCapaPsvU4/z 9lpUQ1jyqa6GVpntdg== MIIDjzCCAvigAwIBAgIDE2llMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0 aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTAwNjE1MDgyMzA1WhcNMTEwNjE3MjIzMDEy WjCB9TEpMCcGA1UEBRMgc1dtTE9QaC9MR3VpdmFFV1U3dmJxTTExZERzbEdORFMx CzAJBgNVBAYTAlVTMSAwHgYDVQQKExdzaGliYm9sZXRoLmhpZ2h3aXJlLm9yZzET MBEGA1UECxMKR1QyNTQ2ODg0MzExMC8GA1UECxMoU2VlIHd3dy5nZW90cnVzdC5j b20vcmVzb3VyY2VzL2NwcyAoYykxMDEvMC0GA1UECxMmRG9tYWluIENvbnRyb2wg VmFsaWRhdGVkIC0gUXVpY2tTU0woUikxIDAeBgNVBAMTF3NoaWJib2xldGguaGln aHdpcmUub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCzSPN2X9bk5MHB f6mUZ/CvBKfgEn46C7GnyzhKuEhsmppVKCxPenesKPvSmxpWWz7/Iwqusq7WHR0Z yVz4qHAyNPmN3U9HHGUeDlU1FZF9xltfzwoYcHJrSDXkSMAoV654f7L4wesBVSjj nPzmbIJlSbKYBbDFY60+dRlSwpRJ1wIDAQABo4HSMIHPMB8GA1UdIwQYMBaAFEjm aPkr0rKV10fYIyAQTzOYkJ/UMA4GA1UdDwEB/wQEAwIE8DAdBgNVHSUEFjAUBggr BgEFBQcDAQYIKwYBBQUHAwIwIgYDVR0RBBswGYIXc2hpYmJvbGV0aC5oaWdod2ly ZS5vcmcwOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC5nZW90cnVzdC5jb20v Y3Jscy9zZWN1cmVjYS5jcmwwHQYDVR0OBBYEFKEHn+uq2uvGkQRbITzHGnUL2a7z MA0GCSqGSIb3DQEBBQUAA4GBAEPaX1aKQj5ePOM8rAGI+T43+f/53tE5ga2O8kvg a4P5WEjXn8A4vnNSHRAHuj5qye0R8f2dqnNHH2znsw1ZMDuUERXn7mqrq6dqWiSq W2YFcT09X+2GlGNmhKY9VxhZH5szboc5IPWil9GpubtQ9cfz8ukLTaAwklS2wn1Y oZQx MIIDjzCCAvigAwIBAgIDE2llMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0 aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTAwNjE1MDgyMzA1WhcNMTEwNjE3MjIzMDEy WjCB9TEpMCcGA1UEBRMgc1dtTE9QaC9MR3VpdmFFV1U3dmJxTTExZERzbEdORFMx CzAJBgNVBAYTAlVTMSAwHgYDVQQKExdzaGliYm9sZXRoLmhpZ2h3aXJlLm9yZzET MBEGA1UECxMKR1QyNTQ2ODg0MzExMC8GA1UECxMoU2VlIHd3dy5nZW90cnVzdC5j b20vcmVzb3VyY2VzL2NwcyAoYykxMDEvMC0GA1UECxMmRG9tYWluIENvbnRyb2wg VmFsaWRhdGVkIC0gUXVpY2tTU0woUikxIDAeBgNVBAMTF3NoaWJib2xldGguaGln aHdpcmUub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCzSPN2X9bk5MHB f6mUZ/CvBKfgEn46C7GnyzhKuEhsmppVKCxPenesKPvSmxpWWz7/Iwqusq7WHR0Z yVz4qHAyNPmN3U9HHGUeDlU1FZF9xltfzwoYcHJrSDXkSMAoV654f7L4wesBVSjj nPzmbIJlSbKYBbDFY60+dRlSwpRJ1wIDAQABo4HSMIHPMB8GA1UdIwQYMBaAFEjm aPkr0rKV10fYIyAQTzOYkJ/UMA4GA1UdDwEB/wQEAwIE8DAdBgNVHSUEFjAUBggr BgEFBQcDAQYIKwYBBQUHAwIwIgYDVR0RBBswGYIXc2hpYmJvbGV0aC5oaWdod2ly ZS5vcmcwOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC5nZW90cnVzdC5jb20v Y3Jscy9zZWN1cmVjYS5jcmwwHQYDVR0OBBYEFKEHn+uq2uvGkQRbITzHGnUL2a7z MA0GCSqGSIb3DQEBBQUAA4GBAEPaX1aKQj5ePOM8rAGI+T43+f/53tE5ga2O8kvg a4P5WEjXn8A4vnNSHRAHuj5qye0R8f2dqnNHH2znsw1ZMDuUERXn7mqrq6dqWiSq W2YFcT09X+2GlGNmhKY9VxhZH5szboc5IPWil9GpubtQ9cfz8ukLTaAwklS2wn1Y oZQx urn:mace:shibboleth:1.0:nameIdentifier Ryan Krebs shibboleth-admin@highwire.stanford.edu shibboleth.highwire.org CN=shibboleth.highwire.org,OU=Domain Control Validated - QuickSSL(R),OU=See www.geotrust.com/resources/cps (c)10,OU=GT25468843,O=shibboleth.highwire.org,C=US,serialNumber=sWmLOPh/LGuivaEWU7vbqM11dDslGNDS MIIDjzCCAvigAwIBAgIDE2llMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0 aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTAwNjE1MDgyMzA1WhcNMTEwNjE3MjIzMDEy WjCB9TEpMCcGA1UEBRMgc1dtTE9QaC9MR3VpdmFFV1U3dmJxTTExZERzbEdORFMx CzAJBgNVBAYTAlVTMSAwHgYDVQQKExdzaGliYm9sZXRoLmhpZ2h3aXJlLm9yZzET MBEGA1UECxMKR1QyNTQ2ODg0MzExMC8GA1UECxMoU2VlIHd3dy5nZW90cnVzdC5j b20vcmVzb3VyY2VzL2NwcyAoYykxMDEvMC0GA1UECxMmRG9tYWluIENvbnRyb2wg VmFsaWRhdGVkIC0gUXVpY2tTU0woUikxIDAeBgNVBAMTF3NoaWJib2xldGguaGln aHdpcmUub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCzSPN2X9bk5MHB f6mUZ/CvBKfgEn46C7GnyzhKuEhsmppVKCxPenesKPvSmxpWWz7/Iwqusq7WHR0Z yVz4qHAyNPmN3U9HHGUeDlU1FZF9xltfzwoYcHJrSDXkSMAoV654f7L4wesBVSjj nPzmbIJlSbKYBbDFY60+dRlSwpRJ1wIDAQABo4HSMIHPMB8GA1UdIwQYMBaAFEjm aPkr0rKV10fYIyAQTzOYkJ/UMA4GA1UdDwEB/wQEAwIE8DAdBgNVHSUEFjAUBggr BgEFBQcDAQYIKwYBBQUHAwIwIgYDVR0RBBswGYIXc2hpYmJvbGV0aC5oaWdod2ly ZS5vcmcwOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC5nZW90cnVzdC5jb20v Y3Jscy9zZWN1cmVjYS5jcmwwHQYDVR0OBBYEFKEHn+uq2uvGkQRbITzHGnUL2a7z MA0GCSqGSIb3DQEBBQUAA4GBAEPaX1aKQj5ePOM8rAGI+T43+f/53tE5ga2O8kvg a4P5WEjXn8A4vnNSHRAHuj5qye0R8f2dqnNHH2znsw1ZMDuUERXn7mqrq6dqWiSq W2YFcT09X+2GlGNmhKY9VxhZH5szboc5IPWil9GpubtQ9cfz8ukLTaAwklS2wn1Y oZQx shibboleth.highwire.org CN=shibboleth.highwire.org,OU=Domain Control Validated - QuickSSL(R),OU=See www.geotrust.com/resources/cps (c)10,OU=GT25468843,O=shibboleth.highwire.org,C=US,serialNumber=sWmLOPh/LGuivaEWU7vbqM11dDslGNDS MIIDjzCCAvigAwIBAgIDE2llMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0 aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTAwNjE1MDgyMzA1WhcNMTEwNjE3MjIzMDEy WjCB9TEpMCcGA1UEBRMgc1dtTE9QaC9MR3VpdmFFV1U3dmJxTTExZERzbEdORFMx CzAJBgNVBAYTAlVTMSAwHgYDVQQKExdzaGliYm9sZXRoLmhpZ2h3aXJlLm9yZzET MBEGA1UECxMKR1QyNTQ2ODg0MzExMC8GA1UECxMoU2VlIHd3dy5nZW90cnVzdC5j b20vcmVzb3VyY2VzL2NwcyAoYykxMDEvMC0GA1UECxMmRG9tYWluIENvbnRyb2wg VmFsaWRhdGVkIC0gUXVpY2tTU0woUikxIDAeBgNVBAMTF3NoaWJib2xldGguaGln aHdpcmUub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCzSPN2X9bk5MHB f6mUZ/CvBKfgEn46C7GnyzhKuEhsmppVKCxPenesKPvSmxpWWz7/Iwqusq7WHR0Z yVz4qHAyNPmN3U9HHGUeDlU1FZF9xltfzwoYcHJrSDXkSMAoV654f7L4wesBVSjj nPzmbIJlSbKYBbDFY60+dRlSwpRJ1wIDAQABo4HSMIHPMB8GA1UdIwQYMBaAFEjm aPkr0rKV10fYIyAQTzOYkJ/UMA4GA1UdDwEB/wQEAwIE8DAdBgNVHSUEFjAUBggr BgEFBQcDAQYIKwYBBQUHAwIwIgYDVR0RBBswGYIXc2hpYmJvbGV0aC5oaWdod2ly ZS5vcmcwOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC5nZW90cnVzdC5jb20v Y3Jscy9zZWN1cmVjYS5jcmwwHQYDVR0OBBYEFKEHn+uq2uvGkQRbITzHGnUL2a7z MA0GCSqGSIb3DQEBBQUAA4GBAEPaX1aKQj5ePOM8rAGI+T43+f/53tE5ga2O8kvg a4P5WEjXn8A4vnNSHRAHuj5qye0R8f2dqnNHH2znsw1ZMDuUERXn7mqrq6dqWiSq W2YFcT09X+2GlGNmhKY9VxhZH5szboc5IPWil9GpubtQ9cfz8ukLTaAwklS2wn1Y oZQx MIIDjzCCAvigAwIBAgIDE2llMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0 aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTAwNjE1MDgyMzA1WhcNMTEwNjE3MjIzMDEy WjCB9TEpMCcGA1UEBRMgc1dtTE9QaC9MR3VpdmFFV1U3dmJxTTExZERzbEdORFMx CzAJBgNVBAYTAlVTMSAwHgYDVQQKExdzaGliYm9sZXRoLmhpZ2h3aXJlLm9yZzET MBEGA1UECxMKR1QyNTQ2ODg0MzExMC8GA1UECxMoU2VlIHd3dy5nZW90cnVzdC5j b20vcmVzb3VyY2VzL2NwcyAoYykxMDEvMC0GA1UECxMmRG9tYWluIENvbnRyb2wg VmFsaWRhdGVkIC0gUXVpY2tTU0woUikxIDAeBgNVBAMTF3NoaWJib2xldGguaGln aHdpcmUub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCzSPN2X9bk5MHB f6mUZ/CvBKfgEn46C7GnyzhKuEhsmppVKCxPenesKPvSmxpWWz7/Iwqusq7WHR0Z yVz4qHAyNPmN3U9HHGUeDlU1FZF9xltfzwoYcHJrSDXkSMAoV654f7L4wesBVSjj nPzmbIJlSbKYBbDFY60+dRlSwpRJ1wIDAQABo4HSMIHPMB8GA1UdIwQYMBaAFEjm aPkr0rKV10fYIyAQTzOYkJ/UMA4GA1UdDwEB/wQEAwIE8DAdBgNVHSUEFjAUBggr BgEFBQcDAQYIKwYBBQUHAwIwIgYDVR0RBBswGYIXc2hpYmJvbGV0aC5oaWdod2ly ZS5vcmcwOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC5nZW90cnVzdC5jb20v Y3Jscy9zZWN1cmVjYS5jcmwwHQYDVR0OBBYEFKEHn+uq2uvGkQRbITzHGnUL2a7z MA0GCSqGSIb3DQEBBQUAA4GBAEPaX1aKQj5ePOM8rAGI+T43+f/53tE5ga2O8kvg a4P5WEjXn8A4vnNSHRAHuj5qye0R8f2dqnNHH2znsw1ZMDuUERXn7mqrq6dqWiSq W2YFcT09X+2GlGNmhKY9VxhZH5szboc5IPWil9GpubtQ9cfz8ukLTaAwklS2wn1Y oZQx MIIDjzCCAvigAwIBAgIDE2llMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0 aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTAwNjE1MDgyMzA1WhcNMTEwNjE3MjIzMDEy WjCB9TEpMCcGA1UEBRMgc1dtTE9QaC9MR3VpdmFFV1U3dmJxTTExZERzbEdORFMx CzAJBgNVBAYTAlVTMSAwHgYDVQQKExdzaGliYm9sZXRoLmhpZ2h3aXJlLm9yZzET MBEGA1UECxMKR1QyNTQ2ODg0MzExMC8GA1UECxMoU2VlIHd3dy5nZW90cnVzdC5j b20vcmVzb3VyY2VzL2NwcyAoYykxMDEvMC0GA1UECxMmRG9tYWluIENvbnRyb2wg VmFsaWRhdGVkIC0gUXVpY2tTU0woUikxIDAeBgNVBAMTF3NoaWJib2xldGguaGln aHdpcmUub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCzSPN2X9bk5MHB f6mUZ/CvBKfgEn46C7GnyzhKuEhsmppVKCxPenesKPvSmxpWWz7/Iwqusq7WHR0Z yVz4qHAyNPmN3U9HHGUeDlU1FZF9xltfzwoYcHJrSDXkSMAoV654f7L4wesBVSjj nPzmbIJlSbKYBbDFY60+dRlSwpRJ1wIDAQABo4HSMIHPMB8GA1UdIwQYMBaAFEjm aPkr0rKV10fYIyAQTzOYkJ/UMA4GA1UdDwEB/wQEAwIE8DAdBgNVHSUEFjAUBggr BgEFBQcDAQYIKwYBBQUHAwIwIgYDVR0RBBswGYIXc2hpYmJvbGV0aC5oaWdod2ly ZS5vcmcwOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC5nZW90cnVzdC5jb20v Y3Jscy9zZWN1cmVjYS5jcmwwHQYDVR0OBBYEFKEHn+uq2uvGkQRbITzHGnUL2a7z MA0GCSqGSIb3DQEBBQUAA4GBAEPaX1aKQj5ePOM8rAGI+T43+f/53tE5ga2O8kvg a4P5WEjXn8A4vnNSHRAHuj5qye0R8f2dqnNHH2znsw1ZMDuUERXn7mqrq6dqWiSq W2YFcT09X+2GlGNmhKY9VxhZH5szboc5IPWil9GpubtQ9cfz8ukLTaAwklS2wn1Y oZQx urn:mace:shibboleth:1.0:nameIdentifier Ryan Krebs shibboleth-admin@highwire.stanford.edu shib.tshhosting.com MIIF7jCCBNagAwIBAgIQE6nUqB9NUlBYPyzlywMpUjANBgkqhkiG9w0BAQUFADCBtTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1c2UgYXQgaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYSAoYykwOTEvMC0GA1UEAxMmVmVyaVNpZ24gQ2xhc3MgMyBTZWN1cmUgU2VydmVyIENBIC0gRzIwHhcNMTAwNzA2MDAwMDAwWhcNMTIwNzEwMjM1OTU5WjCB2jELMAkGA1UEBhMCVVMxFDASBgNVBAgTC0Nvbm5lY3RpY3V0MRMwEQYDVQQHFApFYXN0IEhhdmVuMTAwLgYDVQQKFCdUaG9tc29uIFJldXRlcnMgKFRheCAmIEFjY291bnRpbmcpIEluYy4xGzAZBgNVBAsUElRob21zb24gU2NpZW50aWZpYzEzMDEGA1UECxQqVGVybXMgb2YgdXNlIGF0IHd3dy52ZXJpc2lnbi5jb20vcnBhIChjKTA1MRwwGgYDVQQDFBNzaGliLnRzaGhvc3RpbmcuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyW3478pCuAxKLWVxn6RDCOsnRHN4GP9Z10GWhuE9CTCe+Z95sfeMhwwbpYgclX0ygYv8ZTsDqfu6Ln78RDg/5G4H6ceA0dgiE7FT3yWCR/puIb8kWYgaq5XD5jq+e0cCWWeLhkL836D8LDuIOwKXvbbzaRql38RxJj59lg/XARc7j6UdMUPcKcJrkSeuMrn6gw626x4yL01R5uEc5s+VuwodLo1hTiRsewCOyfX0N7Fv16j8bxEecZtTfGOSL5FoxcjXjAf3JQcFoKr776IY5ImPxNnS1vwfx84tWN0m/481ho/Q9rH15jChF/QXvIENCu/LUfURO0UajjHsyGADdQIDAQABo4IB0TCCAc0wCQYDVR0TBAIwADALBgNVHQ8EBAMCBaAwRQYDVR0fBD4wPDA6oDigNoY0aHR0cDovL1NWUlNlY3VyZS1HMi1jcmwudmVyaXNpZ24uY29tL1NWUlNlY3VyZUcyLmNybDBEBgNVHSAEPTA7MDkGC2CGSAGG+EUBBxcDMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8vd3d3LnZlcmlzaWduLmNvbS9ycGEwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMB8GA1UdIwQYMBaAFKXvCxHOwEEDo0plkEiyHOBXLX1HMHYGCCsGAQUFBwEBBGowaDAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AudmVyaXNpZ24uY29tMEAGCCsGAQUFBzAChjRodHRwOi8vU1ZSU2VjdXJlLUcyLWFpYS52ZXJpc2lnbi5jb20vU1ZSU2VjdXJlRzIuY2VyMG4GCCsGAQUFBwEMBGIwYKFeoFwwWjBYMFYWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFEtruSiWBgy70FI4mymsSweLIQUYMCYWJGh0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28xLmdpZjANBgkqhkiG9w0BAQUFAAOCAQEAH+DiV8qdzW762rt7SIY7+z9xJSobGqzQKZRRFv000lt1peE/UDGyRSc7fSSfnCXgjKxYOLT43z0zFqvX2B3au1E9Sskk4IlBygjRkaJrjRYTJ4xBOMx6ppD93xXC59Unv9VwK5qo/qObqnMWz5ZPJBL8UOQ9QgXfQx0VJ4dxavmAGfeVrcSW8ih+s1KLD2D8F00a8A4wz5HvsGqL3zcph34ZrnHi0CKpOVW75LlZkggo+nm06wWcaYtATsvsvkiBgFhnU8avQWMM7ienzabFPzABgjgq5OgDb6cc3cPmTbuT7A0uVRSN/CkntM5VSDg6KlZId4pE3QsD7TcsbMJirA== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Thomson Reuters Thomson Reuters http://www.thomsonreuters.com Manoj Panicker manoj.panicker@thomsonreuters.com European Help Desk ts.cts.emea@thomson.com Technical Support websupp@thomsonreuters.com telecom-bretagne.eu MIIDSDCCAjCgAwIBAgIVAMDsjMGGzs74lgEgGP3m2lZR6SMhMA0GCSqGSIb3DQEB BQUAMCIxIDAeBgNVBAMTF2lkcC50ZWxlY29tLWJyZXRhZ25lLmV1MB4XDTEwMDIx MDA5NTgyNFoXDTMwMDIxMDA5NTgyNFowIjEgMB4GA1UEAxMXaWRwLnRlbGVjb20t YnJldGFnbmUuZXUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDDyA3F PUpmxBhBziOEouQX8lgfErTEM0EFV5Fg0lNc8NPn/nWmBtyQxbY1yqkmf34Te5ef SdNp39QQ9X6W+y3/p+9k+x6GgVwtvDcGB6fPPtncPHBVMo5V+EeoIE20vUN6TW4H g/RJHoqpZEn1x/G01bprZWCBdadbr2BaZcE5jabTB11wu1zu/7mBXVUtBPMTdHh7 n4M872F8vTeTPVce4WcoDm5ac7qJOnE55t1RyYj7rryDrwThT//NY3sg2IguJn4B +SGImQDS3C688SsdM42OiOD2xnmwgWU+dkLuPLz1w/fZmK5l5Vb2YWdyyHKshU4+ FcIQFwgXpnKgTREJAgMBAAGjdTBzMFIGA1UdEQRLMEmCF2lkcC50ZWxlY29tLWJy ZXRhZ25lLmV1hi5odHRwczovL2lkcC50ZWxlY29tLWJyZXRhZ25lLmV1L2lkcC9z aGliYm9sZXRoMB0GA1UdDgQWBBSzMnv76CtVAByMD9L8/3CVVLT2WjANBgkqhkiG 9w0BAQUFAAOCAQEAa5ho6vHycEIXOcmcfgpj60G6tS9vNKWLJ+H5zdXf+BcsLuky W5xQkgM519BghwJ72xDo4YVyEdp4kEGVKMo6+Vu0bz4AREb4SmMm+N2FCamhK6D8 +9YLDw76+x5xlUVaV0bVGkDAG9IlOzg6gPhoRiJrwg3pzgAiFiysBTTZSPLorTgU BqA6X8hXjbPat/Ry48AOmlkbSSuPKbc8Ij78VcDg9HlAurDJ8lyPKL72VBJdT0JY f7EOBt1e8Cf7GwVdtvHq3LW88y9UTshQMpZtNxk9lXr6FMwcMG0wM1aOn5HRlGSs bm2IAM4xlcyiwzG22vG6NmR4y7NYNG9q6YyiOw== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient telecom-bretagne.eu MIIDSDCCAjCgAwIBAgIVAMDsjMGGzs74lgEgGP3m2lZR6SMhMA0GCSqGSIb3DQEB BQUAMCIxIDAeBgNVBAMTF2lkcC50ZWxlY29tLWJyZXRhZ25lLmV1MB4XDTEwMDIx MDA5NTgyNFoXDTMwMDIxMDA5NTgyNFowIjEgMB4GA1UEAxMXaWRwLnRlbGVjb20t YnJldGFnbmUuZXUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDDyA3F PUpmxBhBziOEouQX8lgfErTEM0EFV5Fg0lNc8NPn/nWmBtyQxbY1yqkmf34Te5ef SdNp39QQ9X6W+y3/p+9k+x6GgVwtvDcGB6fPPtncPHBVMo5V+EeoIE20vUN6TW4H g/RJHoqpZEn1x/G01bprZWCBdadbr2BaZcE5jabTB11wu1zu/7mBXVUtBPMTdHh7 n4M872F8vTeTPVce4WcoDm5ac7qJOnE55t1RyYj7rryDrwThT//NY3sg2IguJn4B +SGImQDS3C688SsdM42OiOD2xnmwgWU+dkLuPLz1w/fZmK5l5Vb2YWdyyHKshU4+ FcIQFwgXpnKgTREJAgMBAAGjdTBzMFIGA1UdEQRLMEmCF2lkcC50ZWxlY29tLWJy ZXRhZ25lLmV1hi5odHRwczovL2lkcC50ZWxlY29tLWJyZXRhZ25lLmV1L2lkcC9z aGliYm9sZXRoMB0GA1UdDgQWBBSzMnv76CtVAByMD9L8/3CVVLT2WjANBgkqhkiG 9w0BAQUFAAOCAQEAa5ho6vHycEIXOcmcfgpj60G6tS9vNKWLJ+H5zdXf+BcsLuky W5xQkgM519BghwJ72xDo4YVyEdp4kEGVKMo6+Vu0bz4AREb4SmMm+N2FCamhK6D8 +9YLDw76+x5xlUVaV0bVGkDAG9IlOzg6gPhoRiJrwg3pzgAiFiysBTTZSPLorTgU BqA6X8hXjbPat/Ry48AOmlkbSSuPKbc8Ij78VcDg9HlAurDJ8lyPKL72VBJdT0JY f7EOBt1e8Cf7GwVdtvHq3LW88y9UTshQMpZtNxk9lXr6FMwcMG0wM1aOn5HRlGSs bm2IAM4xlcyiwzG22vG6NmR4y7NYNG9q6YyiOw== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Télécom Bretagne Télécom Bretagne http://unknown.site.com Claude LE BERRE idp-contact@telecom-bretagne.eu Jean-Francois Berrehare idp-contact@telecom-bretagne.eu telecom-paristech.fr MIIDSzCCAjOgAwIBAgIUOdyX2dtbQ38bYSsIYvHC27pbOf4wDQYJKoZIhvcNAQEF BQAwIzEhMB8GA1UEAxMYaWRwLnRlbGVjb20tcGFyaXN0ZWNoLmZyMB4XDTEwMDEy ODE3MDA0MVoXDTMwMDEyODE3MDA0MVowIzEhMB8GA1UEAxMYaWRwLnRlbGVjb20t cGFyaXN0ZWNoLmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAiVSP MWN9NGSu79LJ5CEhhDAWfKTaaXQRrk26/3axPDtaDJVO9KhJ9oie3SZjlogVvmuE UHiONGqWhO4H1eKXfPKQIpq5e+JpR9Nxr8WMsjhXnToCcMZsSes6E44S3YXWVblv EmWKE3JFUYWO/cpVGZWjdnWierXziUPo8UcRI8BPBqoCgMQzDkVtJngqNPWim0/M S7LbyZmrYbDlwqM74CNFFRK+cknv221xr36sSTVAf9QdbL+zfvxCOxR4vmUxSTG5 FKD89Js9ELMZoadpJYWEkdIJuvZ0R12dtlXn+rYKpqpOuP/X/kjtJM40WpchSWn7 o2z0KwtUVkkugtUN/QIDAQABo3cwdTBUBgNVHREETTBLghhpZHAudGVsZWNvbS1w YXJpc3RlY2guZnKGL2h0dHBzOi8vaWRwLnRlbGVjb20tcGFyaXN0ZWNoLmZyL2lk cC9zaGliYm9sZXRoMB0GA1UdDgQWBBSzcODCJpeqAD7OPTNA7Uf6rJ/73DANBgkq hkiG9w0BAQUFAAOCAQEAPkpw2TRt9SQdGPslqaoEq+/Y+3qdoPAFEipXUxEsexVU RZiHCQm90wLhAV4+IGmk5XuVVKN5M+3kQVDq/iql3W9IoShV71mQhDEqNQJkztGK 1XPWYZu2Qgzui0YessRn7F8/Ts3cRm6L43oAKWJvSR0Zad9L4Eeli/ymCZ+3VO86 hx8qX90cpGu6iYMPfbu+Dl+dFRxJkNY5SGbNGHvv9ZH3FF7f5cN7R8BtWVgo0rTR DmlnOFBrEU8tBkHNwNS0wwdZkOuQjoafB1QOZ39oH7koG+DICom7vxCLTWxcAMj+ 4QsS7+VwhxDRJdfBoQvr3mrm+hxwrCDEGlU3qCaenA== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient telecom-paristech.fr MIIDSzCCAjOgAwIBAgIUOdyX2dtbQ38bYSsIYvHC27pbOf4wDQYJKoZIhvcNAQEF BQAwIzEhMB8GA1UEAxMYaWRwLnRlbGVjb20tcGFyaXN0ZWNoLmZyMB4XDTEwMDEy ODE3MDA0MVoXDTMwMDEyODE3MDA0MVowIzEhMB8GA1UEAxMYaWRwLnRlbGVjb20t cGFyaXN0ZWNoLmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAiVSP MWN9NGSu79LJ5CEhhDAWfKTaaXQRrk26/3axPDtaDJVO9KhJ9oie3SZjlogVvmuE UHiONGqWhO4H1eKXfPKQIpq5e+JpR9Nxr8WMsjhXnToCcMZsSes6E44S3YXWVblv EmWKE3JFUYWO/cpVGZWjdnWierXziUPo8UcRI8BPBqoCgMQzDkVtJngqNPWim0/M S7LbyZmrYbDlwqM74CNFFRK+cknv221xr36sSTVAf9QdbL+zfvxCOxR4vmUxSTG5 FKD89Js9ELMZoadpJYWEkdIJuvZ0R12dtlXn+rYKpqpOuP/X/kjtJM40WpchSWn7 o2z0KwtUVkkugtUN/QIDAQABo3cwdTBUBgNVHREETTBLghhpZHAudGVsZWNvbS1w YXJpc3RlY2guZnKGL2h0dHBzOi8vaWRwLnRlbGVjb20tcGFyaXN0ZWNoLmZyL2lk cC9zaGliYm9sZXRoMB0GA1UdDgQWBBSzcODCJpeqAD7OPTNA7Uf6rJ/73DANBgkq hkiG9w0BAQUFAAOCAQEAPkpw2TRt9SQdGPslqaoEq+/Y+3qdoPAFEipXUxEsexVU RZiHCQm90wLhAV4+IGmk5XuVVKN5M+3kQVDq/iql3W9IoShV71mQhDEqNQJkztGK 1XPWYZu2Qgzui0YessRn7F8/Ts3cRm6L43oAKWJvSR0Zad9L4Eeli/ymCZ+3VO86 hx8qX90cpGu6iYMPfbu+Dl+dFRxJkNY5SGbNGHvv9ZH3FF7f5cN7R8BtWVgo0rTR DmlnOFBrEU8tBkHNwNS0wwdZkOuQjoafB1QOZ39oH7koG+DICom7vxCLTWxcAMj+ 4QsS7+VwhxDRJdfBoQvr3mrm+hxwrCDEGlU3qCaenA== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Télécom ParisTech Télécom ParisTech http://unknown.site.com Frédéric Pauget shibboleth@enst.fr MIIC+jCCAeKgAwIBAgIJAMs22cI5xbdHMA0GCSqGSIb3DQEBBQUAMBwxGjAYBgNV BAMTEWJsb2cudWhwLW5hbmN5LmZyMB4XDTA5MDYyNTEwMTUwNVoXDTE5MDYyMzEw MTUwNVowHDEaMBgGA1UEAxMRYmxvZy51aHAtbmFuY3kuZnIwggEiMA0GCSqGSIb3 DQEBAQUAA4IBDwAwggEKAoIBAQDIqvFGyEsvO9vqHXbtFgfoBrNKhgyIhmV1D9DQ 38Ntj6vTDuyhVGUxfBGArpKu6AK5wDH1pW7eGIDUlvGYuiRWzFzGZPUb7NUAKJP4 kds9cPqpEvY7dfTqr4uF4JV+nHbi2D9VMQe0LaFI7i0H3SB/C5dozv6tzPqeS1pH cgwTgTggYm+qa95wEHskxYQ4LP/+lTSeuwXmhwVnIDoThNCIoa6Rs2o1iPGWOZzD /skpb08yY4W4tBut7wEdOMuU+1KvU9CrMLPUbjhTIxbcwTlBT4TxW0wi4DVuQUf3 soXTicjd7HhuA1qg9Brf5ug0JrxuadhihtExfZwQ/snda6F7AgMBAAGjPzA9MBwG A1UdEQQVMBOCEWJsb2cudWhwLW5hbmN5LmZyMB0GA1UdDgQWBBQGfvHSXiP6pU+u ByqNbWEMffIrgzANBgkqhkiG9w0BAQUFAAOCAQEAOAuXC/CXN/YrRMBGO+gpkOeT ETY5AbFF+Fk9FXbQsuhwqKrkYPRyG5G+qcim4GHS6dSX+SUZAFHI+WrW+WKOzdCB uVSdrdJBOvREelqnlH3mpqVtbzUBharWF/C3b+PGfYS6PI6GJT+QvR5IBjZNLAu5 UuO2QxXxEVxHkgfkEj8xQp6j8I5Q7FYwtIFL1Ff+Fa4LQz+Y3pMUU6sUqdYRufEe JHCThur82nDRH1fbql9vAPer/gQj0TYj5ehijylLGsGTQXuka3M4M4zMebijQWOy Sld+CG3y2Syp4chtnRgnpda2l1D7GQqgP29b5hthKgJITe9FP2Mj30sTs9ywGg== MIIC+jCCAeKgAwIBAgIJAMs22cI5xbdHMA0GCSqGSIb3DQEBBQUAMBwxGjAYBgNV BAMTEWJsb2cudWhwLW5hbmN5LmZyMB4XDTA5MDYyNTEwMTUwNVoXDTE5MDYyMzEw MTUwNVowHDEaMBgGA1UEAxMRYmxvZy51aHAtbmFuY3kuZnIwggEiMA0GCSqGSIb3 DQEBAQUAA4IBDwAwggEKAoIBAQDIqvFGyEsvO9vqHXbtFgfoBrNKhgyIhmV1D9DQ 38Ntj6vTDuyhVGUxfBGArpKu6AK5wDH1pW7eGIDUlvGYuiRWzFzGZPUb7NUAKJP4 kds9cPqpEvY7dfTqr4uF4JV+nHbi2D9VMQe0LaFI7i0H3SB/C5dozv6tzPqeS1pH cgwTgTggYm+qa95wEHskxYQ4LP/+lTSeuwXmhwVnIDoThNCIoa6Rs2o1iPGWOZzD /skpb08yY4W4tBut7wEdOMuU+1KvU9CrMLPUbjhTIxbcwTlBT4TxW0wi4DVuQUf3 soXTicjd7HhuA1qg9Brf5ug0JrxuadhihtExfZwQ/snda6F7AgMBAAGjPzA9MBwG A1UdEQQVMBOCEWJsb2cudWhwLW5hbmN5LmZyMB0GA1UdDgQWBBQGfvHSXiP6pU+u ByqNbWEMffIrgzANBgkqhkiG9w0BAQUFAAOCAQEAOAuXC/CXN/YrRMBGO+gpkOeT ETY5AbFF+Fk9FXbQsuhwqKrkYPRyG5G+qcim4GHS6dSX+SUZAFHI+WrW+WKOzdCB uVSdrdJBOvREelqnlH3mpqVtbzUBharWF/C3b+PGfYS6PI6GJT+QvR5IBjZNLAu5 UuO2QxXxEVxHkgfkEj8xQp6j8I5Q7FYwtIFL1Ff+Fa4LQz+Y3pMUU6sUqdYRufEe JHCThur82nDRH1fbql9vAPer/gQj0TYj5ehijylLGsGTQXuka3M4M4zMebijQWOy Sld+CG3y2Syp4chtnRgnpda2l1D7GQqgP29b5hthKgJITe9FP2Mj30sTs9ywGg== urn:mace:shibboleth:1.0:nameIdentifier Sylvain Brachotte sylvain.brachotte@uhp-nancy.fr www.unr-npdc.org CN=www.unr-npdc.org,O=Universite de Valenciennes,C=FR MIICyDCCAjGgAwIBAgIJAJFWZk2X4ZEAMA0GCSqGSIb3DQEBBQUAME0xCzAJBgNV BAYTAkZSMSMwIQYDVQQKExpVbml2ZXJzaXRlIGRlIFZhbGVuY2llbm5lczEZMBcG A1UEAxMQd3d3LnVuci1ucGRjLm9yZzAeFw0xMDA0MDcwOTI0MTFaFw0zMDA0MDIw OTI0MTFaME0xCzAJBgNVBAYTAkZSMSMwIQYDVQQKExpVbml2ZXJzaXRlIGRlIFZh bGVuY2llbm5lczEZMBcGA1UEAxMQd3d3LnVuci1ucGRjLm9yZzCBnzANBgkqhkiG 9w0BAQEFAAOBjQAwgYkCgYEAu/+6g98NCpKG2TcvIoLdMRjLi2G+23hrGtHsbNdM 14iqAaEQI5w+NdcL4ydl6D578Spqd2RGifGsqVz8dVJTiaizK2g59DO68ARbw18N 4BucSOTRZtwzTYr8qLE73OClqsRfuUuWOSGghIwZj5jFLJpfKowsrJBUBGEouwkI vAsCAwEAAaOBrzCBrDAdBgNVHQ4EFgQU7IfBJCQTQqHHXOwg6r9wkntMqJUwfQYD VR0jBHYwdIAU7IfBJCQTQqHHXOwg6r9wkntMqJWhUaRPME0xCzAJBgNVBAYTAkZS MSMwIQYDVQQKExpVbml2ZXJzaXRlIGRlIFZhbGVuY2llbm5lczEZMBcGA1UEAxMQ d3d3LnVuci1ucGRjLm9yZ4IJAJFWZk2X4ZEAMAwGA1UdEwQFMAMBAf8wDQYJKoZI hvcNAQEFBQADgYEAEEw7C4YCsfyIaU9o6zSlmGLYVvRJ4JqA3anWx2c5QIiVyMfD n+zIhbmBaM9cA3FwtGS/iUUw3LCrC9r9/mT4b0E47ohgPh61JQqaOrmXSF1aA3Z2 4cLMyHVdMkFKIoiae9PsEm3ar2Uciy8JpEWNAmLt6j/6APzDIAS0RI5zTmA= listes.unr-npdc.org CN=listes.unr-npdc.org,O=UVHC,C=FR MIICjzCCAfigAwIBAgIJAK00vc1js/+MMA0GCSqGSIb3DQEBBQUAMDoxCzAJBgNV BAYTAkZSMQ0wCwYDVQQKEwRVVkhDMRwwGgYDVQQDExNsaXN0ZXMudW5yLW5wZGMu b3JnMB4XDTA5MTIyMzE0MDQ1NFoXDTI5MTIxODE0MDQ1NFowOjELMAkGA1UEBhMC RlIxDTALBgNVBAoTBFVWSEMxHDAaBgNVBAMTE2xpc3Rlcy51bnItbnBkYy5vcmcw gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMKJKR1gW/K8i2JH0juyIIRIfdqq dgX0RXk1kDVM0AvYYxsldYUK3JDCpO01UUL/D0Aw+djD+A8dtSmQRhSMs6vfS7Hm xKw6ynqoRE2eN8KF92u1W5+OVDys6ZcwmoOq2UVT7iYdnDTkIZhwmD9Pc4LxHKjy mHlwtfsycxh3HhMTAgMBAAGjgZwwgZkwHQYDVR0OBBYEFGtfl0htPj60jg5iBzD3 QeXUR1T5MGoGA1UdIwRjMGGAFGtfl0htPj60jg5iBzD3QeXUR1T5oT6kPDA6MQsw CQYDVQQGEwJGUjENMAsGA1UEChMEVVZIQzEcMBoGA1UEAxMTbGlzdGVzLnVuci1u cGRjLm9yZ4IJAK00vc1js/+MMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD gYEAYJDz8ZrV6VKSLFuAN1/1lQBT7fgGk1/tDmKjkTzy1jtqbqqJWY/iqb279VIN /7qCTiVniRUzaj1PCMBUDyYJbEv+5o3AQHX/jVWqX6D1lFgS1bSDO4ZTgEae/8Rf RtpXn8eN2P0RtTECms5WaiZozVNOJO/lk6pFRrScvA3wOuc= utc.fr MIIDEzCCAfugAwIBAgIUUqqJXvb5AbgkDCOIeaTw+AhDKzQwDQYJKoZIhvcNAQEF BQAwFTETMBEGA1UEAxMKaWRwLnV0Yy5mcjAeFw0xMDA4MjUxMTQ5MDZaFw0zMDA4 MjUxMTQ5MDZaMBUxEzARBgNVBAMTCmlkcC51dGMuZnIwggEiMA0GCSqGSIb3DQEB AQUAA4IBDwAwggEKAoIBAQCojFMzoxsidrJQ9wH9yaoI8+/iIHmuJltBFTNRmoY/ XkUy/F+C8DW1O+eTIx8LG9d3NnviN/tVM7IxKez9D5V6lCfEiOPmmHiPc13LFC+G v6rwF5tc6mEf66xubrqCGt3VKH8ywQ5iBfKmvpzvduKI/0K3c3a+l6kzp55AdVxV Y/O29zkDy0FcBF4ubfOG8PMhA8n7Siba5/S7S4jm2RcJgDD0XSyBLpCoKXy7KKHm 25wuzaOYZqlYUspdKqw8CHZjT6dxA9Lqg9o2PxBDQdlKuexpEkdSHrE43hisiEVp UgDmh4qWqnKpVrQ8auO4mun0FXGiwppLOOy2PXM0KUwVAgMBAAGjWzBZMDgGA1Ud EQQxMC+CCmlkcC51dGMuZnKGIWh0dHBzOi8vaWRwLnV0Yy5mci9pZHAvc2hpYmJv bGV0aDAdBgNVHQ4EFgQUR6AWFGlHjGLErFUx+0BoK7+w85QwDQYJKoZIhvcNAQEF BQADggEBAF7QWy+SJcgFefxn7IJE6bPUhgiFUkesUd46sudhxT3oxF/17TXqogdN ezuRx9wXOcPrFkW2cEe7aTkDsFPukkwo2BYc2m9dREfuotl6pI73CsVvYXEjmTY3 mGTNKVxb7j2dc9EfJEsTOXc0J7d2S+T92CB4rZ+wC2fj21G4/WQ30lXooXy/kvdW 327nk2WhrA21GfxVga3DRe4N5WTZG/2j2XCfa+TxXGTW66qJ86fB5ormrVFC4ofL oUcxy/ZBMc0HizwoTm7s1siWvszzg2kzOgdywf98wghDNKJ2AtsEZ17KouVxhvDk hChKBBWarG/QuOFPQPpaPOLrhW//PAU= MIIEpzCCA4+gAwIBAgIRANd0mx2mkE7UNMEtPiP7uCUwDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0xMDAxMDYwMDAwMDBaFw0xMzAxMDUyMzU5NTlaMIGDMQswCQYD VQQGEwJGUjESMBAGA1UEBxMJQ09NUElFR05FMTcwNQYDVQQKDC5VVEMgLSBVbml2 ZXJzaXTDqSBkZSBUZWNobm9sb2dpZSBkZSBDb21wacOoZ25lMQ8wDQYDVQQLEwZE U0ktU1IxFjAUBgNVBAMTDWN5Z251cy51dGMuZnIwggEiMA0GCSqGSIb3DQEBAQUA A4IBDwAwggEKAoIBAQCfzE1gPe7FIJZn0JPMyeIvqCDe51rVuVzTi9IbzO9LwHWN JJZkyCkK1bDRgKJUo/VO49814N1N4G4onuwIDau3cOyxoFBP9HqCDLAXwOA5KPFS aZ2onp2T2eWz7KG80J0YoVvOf0eB0ybRaS/ieKq7Z6IYQqSOSv6YDUq2ii+LRqf8 2MihOcVch71VCSWwQBAxvk29h6/i4vzbRTgxYTepR9YiIzSXJkCkhVwqTrmenYzK 3DJJcyVutm3V5NfOqP3HXlaFvmhwtir8KupIGU1LPXAdQFgTUZnvzyA0JBeSbghA pHcwdrL+euqo59WOfqSXjOjlEaTXL6D0WqlGdxGLAgMBAAGjggFgMIIBXDAfBgNV HSMEGDAWgBQMvZNoDPPeq6NJays3V0fqkOO57TAdBgNVHQ4EFgQUsja5CEnf5Buw Av4vEgeVrygsJNIwDgYDVR0PAQH/BAQDAgWgMAwGA1UdEwEB/wQCMAAwHQYDVR0l BBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBgGA1UdIAQRMA8wDQYLKwYBBAGyMQEC Ah0wOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC50Y3MudGVyZW5hLm9yZy9U RVJFTkFTU0xDQS5jcmwwbQYIKwYBBQUHAQEEYTBfMDUGCCsGAQUFBzAChilodHRw Oi8vY3J0LnRjcy50ZXJlbmEub3JnL1RFUkVOQVNTTENBLmNydDAmBggrBgEFBQcw AYYaaHR0cDovL29jc3AudGNzLnRlcmVuYS5vcmcwGAYDVR0RBBEwD4INY3lnbnVz LnV0Yy5mcjANBgkqhkiG9w0BAQUFAAOCAQEAIcSJcfcR9Z7gMcOOGl/NjVBZklF0 ATUKJTb7Dr0cJRPTHfEANWNsn3eQSHwf2y+p7ukyGL6PXEngsEDm+CavxamVbGB2 9cknfnrden8tYy924dq2uwxniWuNoIHuoEXrK1/tj126PYAWPLZgs2WAbw/+hGpM ar9vD4k5grT+DwTqh9GiAIh3EQXj11e03h0fhVlHa/WpbD8zMQLSy7KiLfAVUJmk mhQLQG+GOfNlx3IujS9j/7gE2cI5OTBUrImHjPH41SHCVF8ZOqzyg1v0Xc7JYgTj 70kZXvt58HpgN/IqMlNyBtYCRE5+SVCIaX4bEA0qyOTKwLEZIwZNh3LWQw== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient UTC - Université de Technologie de Compiègne UTC - Université de Technologie de Compiègne http://unknown.site.com David Lewis david.lewis@utc.fr Jean-Marc Berenguier jmb@utc.fr uco.fr MIIDEzCCAfugAwIBAgIURQl7BFLnVi0wi/iXhPCE2PAfSRwwDQYJKoZIhvcNAQEF BQAwFTETMBEGA1UEAxMKd3d3LnVjby5mcjAeFw0xMDA3MDkwOTMxMDRaFw0zMDA3 MDkwOTMxMDRaMBUxEzARBgNVBAMTCnd3dy51Y28uZnIwggEiMA0GCSqGSIb3DQEB AQUAA4IBDwAwggEKAoIBAQC6udh04PlfANR5UJijUauE+9hOhM+mI6JR5aF/sUha 2QEmj03jCXecU9Nh1lzeMZp8yDNPexF8MEUlID4fwB17qCca9HBZR1LZC/IjcXiE svG+8gjcTupFjo64gUBvl8PFoq2G74gox3PApYTbvsQQ/YfLXdxlbJH7mC8M1hqU YcPtI7tH6RCG1dPzKivZTw4k327OFWiv/i5HBylg38vuIMKtI0fNcVh6LfZint1z VKD5dj50KwQmjaW9SFe+6gjcJuP7SxXI6Eatj8FwBtziVURJx2ArRq2QPabIdhrw SRAw3o6R3WDEDvCVEM/3L1JQ9zOZjtyRSQSibics89iNAgMBAAGjWzBZMDgGA1Ud EQQxMC+CCnd3dy51Y28uZnKGIWh0dHBzOi8vd3d3LnVjby5mci9pZHAvc2hpYmJv bGV0aDAdBgNVHQ4EFgQUC2L2yjXLG+twvqARE6wqInRsqe0wDQYJKoZIhvcNAQEF BQADggEBAKQlfGsGPC+c7Cup7+1ewIFragfNG5uGEq3gRHMrXHoGggk/wjVSUx2b el5oRBdI4TpDtxo9LDXAjvCwuBUIH+Y6R/nAU3mLcBkDxPyJSfJd5+3eXyGfMR5z 6N1BCk3ekbgwEz2FbH7FzW6S+W8z4FiGYzvqFLJbtXgETuXWqbfF0AYJZmbSxLEU wIqBZc1OjPjeYpNYU7ccVUXeCz9XM/c6TpL25zvTokX4blDoc1Uo6SXJVQeJtCX/ fPWEJ4OHsMpCDdpzr8u/IEWOClMzEMdDQymLSpDdx7rcBHyBjyRWioaLXRO/6mWs xzrkO8nQxG/mZs6r2woe+V88+/UKhic= urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université Catholique de l'Ouest - Angers Université Catholique de l'Ouest - Angers http://unknown.site.com Lucas Joachim joachim.lucas@uco.fr Zoundi Patrick patrick.zoundi@uco.fr MIICfTCCAeagAwIBAgIJAIR6U33Gqnq/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNV BAYTAkZSMQwwCgYDVQQKEwNVRUIxFzAVBgNVBAMTDmFtZXRoaXMudWViLmV1MB4X DTEwMDMxMTEyNTU0M1oXDTMwMDMwNjEyNTU0M1owNDELMAkGA1UEBhMCRlIxDDAK BgNVBAoTA1VFQjEXMBUGA1UEAxMOYW1ldGhpcy51ZWIuZXUwgZ8wDQYJKoZIhvcN AQEBBQADgY0AMIGJAoGBAK7YBwi3/4blAlpxMrDfljsXVIqpvAIQxxsoBvB7x88m 9XibehwjEVqIbfbVbfdv37O269gK9Z4SDjlG1asesoSFZL2ReGSvoBm1D8C5zsFA u3yQOnAptULyjbvcyr2GcaFSln1tDHEbB2tkx10NjUD2AO7DqQLxFOV5koTfg71r AgMBAAGjgZYwgZMwHQYDVR0OBBYEFFN5oWpaOStkufJko9tz6xT4UBOoMGQGA1Ud IwRdMFuAFFN5oWpaOStkufJko9tz6xT4UBOooTikNjA0MQswCQYDVQQGEwJGUjEM MAoGA1UEChMDVUVCMRcwFQYDVQQDEw5hbWV0aGlzLnVlYi5ldYIJAIR6U33Gqnq/ MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAjAFBjYP/6qx1XX7W+ZeM jnrpXM3rfJFFAtFUlr1JhmRs3XEfDKdiRjdkSSVF5nIABYprK/2ghV78EjuzT5BC c+xsGGXOQDMPvF2m9x7f/tjGTm69GvV0P/8W6/7chF3Hd4crQAnrbhXeyuvdv2DZ CnYb7ufGmKn58YGN+qJ2cNA= MIICfTCCAeagAwIBAgIJAIR6U33Gqnq/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNV BAYTAkZSMQwwCgYDVQQKEwNVRUIxFzAVBgNVBAMTDmFtZXRoaXMudWViLmV1MB4X DTEwMDMxMTEyNTU0M1oXDTMwMDMwNjEyNTU0M1owNDELMAkGA1UEBhMCRlIxDDAK BgNVBAoTA1VFQjEXMBUGA1UEAxMOYW1ldGhpcy51ZWIuZXUwgZ8wDQYJKoZIhvcN AQEBBQADgY0AMIGJAoGBAK7YBwi3/4blAlpxMrDfljsXVIqpvAIQxxsoBvB7x88m 9XibehwjEVqIbfbVbfdv37O269gK9Z4SDjlG1asesoSFZL2ReGSvoBm1D8C5zsFA u3yQOnAptULyjbvcyr2GcaFSln1tDHEbB2tkx10NjUD2AO7DqQLxFOV5koTfg71r AgMBAAGjgZYwgZMwHQYDVR0OBBYEFFN5oWpaOStkufJko9tz6xT4UBOoMGQGA1Ud IwRdMFuAFFN5oWpaOStkufJko9tz6xT4UBOooTikNjA0MQswCQYDVQQGEwJGUjEM MAoGA1UEChMDVUVCMRcwFQYDVQQDEw5hbWV0aGlzLnVlYi5ldYIJAIR6U33Gqnq/ MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAjAFBjYP/6qx1XX7W+ZeM jnrpXM3rfJFFAtFUlr1JhmRs3XEfDKdiRjdkSSVF5nIABYprK/2ghV78EjuzT5BC c+xsGGXOQDMPvF2m9x7f/tjGTm69GvV0P/8W6/7chF3Hd4crQAnrbhXeyuvdv2DZ CnYb7ufGmKn58YGN+qJ2cNA= MIICjDCCAfWgAwIBAgIJAOv7IQ17QLaLMA0GCSqGSIb3DQEBBQUAMDkxCzAJBgNV BAYTAkZSMQwwCgYDVQQKEwNVQlMxHDAaBgNVBAMTE2FtZXRoaXMudW5pdi11YnMu ZnIwHhcNMDkxMTAzMDkwODMzWhcNMTAxMTAzMDkwODMzWjA5MQswCQYDVQQGEwJG UjEMMAoGA1UEChMDVUJTMRwwGgYDVQQDExNhbWV0aGlzLnVuaXYtdWJzLmZyMIGf MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCzLqRBYm3RZh7D3SdiuKhGJ9elce5s z0XDS9tkQ0PpBiwQzyvCtTwrOt6FuP8MSHUjwDoytV6IyRgSLBVTO/vdIPyhc82/ O8Qh5V93ki6iyEEgZRFz4mXJWFvB3ZNvvLRbiJghP7aUrYgti/FwvBHgOnPG9kQd Kjx3M2/QLUNG2wIDAQABo4GbMIGYMB0GA1UdDgQWBBQKU+hhsWJZyLnDGJaJSs6O G+K7TTBpBgNVHSMEYjBggBQKU+hhsWJZyLnDGJaJSs6OG+K7TaE9pDswOTELMAkG A1UEBhMCRlIxDDAKBgNVBAoTA1VCUzEcMBoGA1UEAxMTYW1ldGhpcy51bml2LXVi cy5mcoIJAOv7IQ17QLaLMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEA K6gYPrcc8JUGp9rWufaoCtHVzPeVkacHNYgMIPXKs4Cjn/DPVh9HLOF1bpZ/M8n5 ska4Y2QjNLmYgLI/uwwhJmqRiwzh1GcF1TecI16WtzdSGLN3H6XwVLiNQhU6GKc3 IlgsYbPJoi0KK3xl5xlwQs6sB3RdNWETfMTxR8Di5f0= urn:mace:shibboleth:1.0:nameIdentifier Eric ROZE eric.roze@univ-ubs.fr Sebastien BOMPOIL sebastien.bompoil@univ-ubs.fr MIICuTCCAiKgAwIBAgIJAOLn2xEJOTDKMA0GCSqGSIb3DQEBBQUAMEgxCzAJBgNV BAYTAkZSMR8wHQYDVQQKExZVbml2ZXJzaXR5IG9mIFJlbm5lcyAxMRgwFgYDVQQD Ew9oZWxwZGVzay51ZWIuZXUwHhcNMTAwNjAyMTIwNjA2WhcNMzAwNTI4MTIwNjA2 WjBIMQswCQYDVQQGEwJGUjEfMB0GA1UEChMWVW5pdmVyc2l0eSBvZiBSZW5uZXMg MTEYMBYGA1UEAxMPaGVscGRlc2sudWViLmV1MIGfMA0GCSqGSIb3DQEBAQUAA4GN ADCBiQKBgQDMIogbGztfvWlggXprsn6vlCmh72PGDXgEgreIeVC8glLhFofldcFQ KTSnMH4De5rhCUiS9oMTrpKZ8vuXbhickTLzQyCxIjNu55Ni3pumG9RD+pKuRf+J IYSubCvAXyzakhR5Qv4dLHJPwQGRuwv8XcpF08CR4FAvn5jLulygAwIDAQABo4Gq MIGnMB0GA1UdDgQWBBTSEfENb4hxoUWNIOdkJLTk3X83uTB4BgNVHSMEcTBvgBTS EfENb4hxoUWNIOdkJLTk3X83uaFMpEowSDELMAkGA1UEBhMCRlIxHzAdBgNVBAoT FlVuaXZlcnNpdHkgb2YgUmVubmVzIDExGDAWBgNVBAMTD2hlbHBkZXNrLnVlYi5l dYIJAOLn2xEJOTDKMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAS5Jh ml196oxZE4HPbZ02etorJ/Cx2sxwuyGfRgdgjc4SBQYbGC6AM8M/yBUyG2g3IRFA jq7fk/jCPO3hEepk1QI8UIYtxXPI3QXFdufcJ5vNkrv0SMnjKLYit7DZok7sUmpe x90F+9JaD4a1wfrDgegAIUxJTaU7Dk4/P7a2HzY= MIICuTCCAiKgAwIBAgIJAOLn2xEJOTDKMA0GCSqGSIb3DQEBBQUAMEgxCzAJBgNV BAYTAkZSMR8wHQYDVQQKExZVbml2ZXJzaXR5IG9mIFJlbm5lcyAxMRgwFgYDVQQD Ew9oZWxwZGVzay51ZWIuZXUwHhcNMTAwNjAyMTIwNjA2WhcNMzAwNTI4MTIwNjA2 WjBIMQswCQYDVQQGEwJGUjEfMB0GA1UEChMWVW5pdmVyc2l0eSBvZiBSZW5uZXMg MTEYMBYGA1UEAxMPaGVscGRlc2sudWViLmV1MIGfMA0GCSqGSIb3DQEBAQUAA4GN ADCBiQKBgQDMIogbGztfvWlggXprsn6vlCmh72PGDXgEgreIeVC8glLhFofldcFQ KTSnMH4De5rhCUiS9oMTrpKZ8vuXbhickTLzQyCxIjNu55Ni3pumG9RD+pKuRf+J IYSubCvAXyzakhR5Qv4dLHJPwQGRuwv8XcpF08CR4FAvn5jLulygAwIDAQABo4Gq MIGnMB0GA1UdDgQWBBTSEfENb4hxoUWNIOdkJLTk3X83uTB4BgNVHSMEcTBvgBTS EfENb4hxoUWNIOdkJLTk3X83uaFMpEowSDELMAkGA1UEBhMCRlIxHzAdBgNVBAoT FlVuaXZlcnNpdHkgb2YgUmVubmVzIDExGDAWBgNVBAMTD2hlbHBkZXNrLnVlYi5l dYIJAOLn2xEJOTDKMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAS5Jh ml196oxZE4HPbZ02etorJ/Cx2sxwuyGfRgdgjc4SBQYbGC6AM8M/yBUyG2g3IRFA jq7fk/jCPO3hEepk1QI8UIYtxXPI3QXFdufcJ5vNkrv0SMnjKLYit7DZok7sUmpe x90F+9JaD4a1wfrDgegAIUxJTaU7Dk4/P7a2HzY= urn:mace:shibboleth:1.0:nameIdentifier Sébastien Bilbeau fed-admin@listes.univ-rennes1.fr Raymond Bourges raymond.bourges@univ-rennes1.fr foad.ueb.eu CN=foad.ueb.eu,O=nom de l organisme,C=FR MIICoTCCAgqgAwIBAgIJAOragVnnrZejMA0GCSqGSIb3DQEBBQUAMEAxCzAJBgNV BAYTAkZSMRswGQYDVQQKExJub20gZGUgbCBvcmdhbmlzbWUxFDASBgNVBAMTC2Zv YWQudWViLmV1MB4XDTA5MDQyOTE1MDk0NVoXDTI5MDQyNDE1MDk0NVowQDELMAkG A1UEBhMCRlIxGzAZBgNVBAoTEm5vbSBkZSBsIG9yZ2FuaXNtZTEUMBIGA1UEAxML Zm9hZC51ZWIuZXUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAK9nT8vmVpoX B5aTtE0HtQoZOw/rDud8fkbGOyb8DkIlOLgfWjknKhXnRMbVBJAudvFiasJnnDIx QV2Tr6nGz5KYv7iSODez6IavgQ5xAz/G5z6BY+CMHRY1m8q89KTdMtpT0PmHwh0X MIG8yMw+5vTjgnKOj425P/eSiITsPdO5AgMBAAGjgaIwgZ8wHQYDVR0OBBYEFFdT QIaSmoZptPW0/KVSnP1ROWWPMHAGA1UdIwRpMGeAFFdTQIaSmoZptPW0/KVSnP1R OWWPoUSkQjBAMQswCQYDVQQGEwJGUjEbMBkGA1UEChMSbm9tIGRlIGwgb3JnYW5p c21lMRQwEgYDVQQDEwtmb2FkLnVlYi5ldYIJAOragVnnrZejMAwGA1UdEwQFMAMB Af8wDQYJKoZIhvcNAQEFBQADgYEAf0qMnWLYCGz5Va2E5pN8HGXCFp3PuTPOPV1q uPSHdI99T5vQoV4o7wgxl61R3BxBNIupkRDyLqanmbH3+1jhie0nbAz4hdeIo8HA 1fvIhly7GaMTao7Jd/7n39mcnc6X+gLw7QUZUL1E3AVRMBm5bpqfPpelW6+5j6cY Lt0LE8o= foad.ueb.eu CN=foad.ueb.eu,O=nom de l organisme,C=FR MIICoTCCAgqgAwIBAgIJAOragVnnrZejMA0GCSqGSIb3DQEBBQUAMEAxCzAJBgNV BAYTAkZSMRswGQYDVQQKExJub20gZGUgbCBvcmdhbmlzbWUxFDASBgNVBAMTC2Zv YWQudWViLmV1MB4XDTA5MDQyOTE1MDk0NVoXDTI5MDQyNDE1MDk0NVowQDELMAkG A1UEBhMCRlIxGzAZBgNVBAoTEm5vbSBkZSBsIG9yZ2FuaXNtZTEUMBIGA1UEAxML Zm9hZC51ZWIuZXUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAK9nT8vmVpoX B5aTtE0HtQoZOw/rDud8fkbGOyb8DkIlOLgfWjknKhXnRMbVBJAudvFiasJnnDIx QV2Tr6nGz5KYv7iSODez6IavgQ5xAz/G5z6BY+CMHRY1m8q89KTdMtpT0PmHwh0X MIG8yMw+5vTjgnKOj425P/eSiITsPdO5AgMBAAGjgaIwgZ8wHQYDVR0OBBYEFFdT QIaSmoZptPW0/KVSnP1ROWWPMHAGA1UdIwRpMGeAFFdTQIaSmoZptPW0/KVSnP1R OWWPoUSkQjBAMQswCQYDVQQGEwJGUjEbMBkGA1UEChMSbm9tIGRlIGwgb3JnYW5p c21lMRQwEgYDVQQDEwtmb2FkLnVlYi5ldYIJAOragVnnrZejMAwGA1UdEwQFMAMB Af8wDQYJKoZIhvcNAQEFBQADgYEAf0qMnWLYCGz5Va2E5pN8HGXCFp3PuTPOPV1q uPSHdI99T5vQoV4o7wgxl61R3BxBNIupkRDyLqanmbH3+1jhie0nbAz4hdeIo8HA 1fvIhly7GaMTao7Jd/7n39mcnc6X+gLw7QUZUL1E3AVRMBm5bpqfPpelW6+5j6cY Lt0LE8o= MIICZTCCAc4CCQClb2y1A8UmKjANBgkqhkiG9w0BAQUFADB3MQswCQYDVQQGEwJG UjEPMA0GA1UECBMGRlJBTkNFMQ4wDAYDVQQHEwVST1VFTjENMAsGA1UEChMEVU5J VDEUMBIGA1UEAxMLd3d3LnVuaXQuZXUxIjAgBgkqhkiG9w0BCQEWE3dlYm1hc3Rl ckB1bml0LWMuZnIwHhcNMDgwNDI4MDkyNzIwWhcNMTgwNDI2MDkyNzIwWjB3MQsw CQYDVQQGEwJGUjEPMA0GA1UECBMGRlJBTkNFMQ4wDAYDVQQHEwVST1VFTjENMAsG A1UEChMEVU5JVDEUMBIGA1UEAxMLd3d3LnVuaXQuZXUxIjAgBgkqhkiG9w0BCQEW E3dlYm1hc3RlckB1bml0LWMuZnIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGB AOCAujM3tQqCxAgUlfzZzzIeVCyK4R2IvgV3YzpY3Hf2TiMSjsuzqxR2Mc7B5Lvt r+qJu1M1027bmTcvYf53J0OzuIfAEJsnTWQBksbjG5T31Fs49/HHJTjaZtyUdQqI H4liPJCO72kApjgU9azboLkwtTrM949YWI6dgZ3cZ5ZnAgMBAAEwDQYJKoZIhvcN AQEFBQADgYEAbzru/BYPdLNmAuJPscKwWuMpTK2I/cVHFvI7sQ8wR5J13kjurQ4M qwBmoNsScsaOI/XqHUdUA5DyQlGKkIH79LJYS4Re//XvYZsM6wIC90ZaM/f5DOaV x++pP8yRNmD25wN+4iSvTKKpBM47JQmPUzH3/q9MjyMEos3BB+JsJ94= MIICZTCCAc4CCQClb2y1A8UmKjANBgkqhkiG9w0BAQUFADB3MQswCQYDVQQGEwJG UjEPMA0GA1UECBMGRlJBTkNFMQ4wDAYDVQQHEwVST1VFTjENMAsGA1UEChMEVU5J VDEUMBIGA1UEAxMLd3d3LnVuaXQuZXUxIjAgBgkqhkiG9w0BCQEWE3dlYm1hc3Rl ckB1bml0LWMuZnIwHhcNMDgwNDI4MDkyNzIwWhcNMTgwNDI2MDkyNzIwWjB3MQsw CQYDVQQGEwJGUjEPMA0GA1UECBMGRlJBTkNFMQ4wDAYDVQQHEwVST1VFTjENMAsG A1UEChMEVU5JVDEUMBIGA1UEAxMLd3d3LnVuaXQuZXUxIjAgBgkqhkiG9w0BCQEW E3dlYm1hc3RlckB1bml0LWMuZnIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGB AOCAujM3tQqCxAgUlfzZzzIeVCyK4R2IvgV3YzpY3Hf2TiMSjsuzqxR2Mc7B5Lvt r+qJu1M1027bmTcvYf53J0OzuIfAEJsnTWQBksbjG5T31Fs49/HHJTjaZtyUdQqI H4liPJCO72kApjgU9azboLkwtTrM949YWI6dgZ3cZ5ZnAgMBAAEwDQYJKoZIhvcN AQEFBQADgYEAbzru/BYPdLNmAuJPscKwWuMpTK2I/cVHFvI7sQ8wR5J13kjurQ4M qwBmoNsScsaOI/XqHUdUA5DyQlGKkIH79LJYS4Re//XvYZsM6wIC90ZaM/f5DOaV x++pP8yRNmD25wN+4iSvTKKpBM47JQmPUzH3/q9MjyMEos3BB+JsJ94= urn:mace:shibboleth:1.0:nameIdentifier Vincent Bonamy webmaster@unit-c.fr Alain Kavenoky alain@kavenoky.fr foad.unjf.fr CN=foad.unjf.fr,O=foad.unjf.fr,OU=Domain Control Validated,C=FR MIIEQjCCAyqgAwIBAgILAQAAAAABGvzIjpcwDQYJKoZIhvcNAQEFBQAwcTELMAkG A1UEBhMCQkUxHTAbBgNVBAsTFERvbWFpbiBWYWxpZGF0aW9uIENBMRkwFwYDVQQK ExBHbG9iYWxTaWduIG52LXNhMSgwJgYDVQQDEx9HbG9iYWxTaWduIERvbWFpbiBW YWxpZGF0aW9uIENBMB4XDTA4MDcwNzA5MDkzMloXDTA5MDcwODA5MDkyNFowXjEL MAkGA1UEBhMCRlIxITAfBgNVBAsTGERvbWFpbiBDb250cm9sIFZhbGlkYXRlZDEV MBMGA1UEChMMZm9hZC51bmpmLmZyMRUwEwYDVQQDEwxmb2FkLnVuamYuZnIwgZ8w DQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMoolVCkLDRi/5L+BfsedV99WI4ItP87 KRG8ZxxBdodKJs3pq+11YmhzTqb257GLeaojPxIHeJXNs17MedzzuKYsd7yLRBk5 BW83R00+mfWKtGb9gyt+GvrnsUSL0rRyVNNiDRZnPYnhvcsDNJ91s+djfrVJbdwz JvnkuMYoD7ntAgMBAAGjggFwMIIBbDAfBgNVHSMEGDAWgBQ2Ek6eccQmQfH68SlM vxekUyi26zBJBggrBgEFBQcBAQQ9MDswOQYIKwYBBQUHMAKGLWh0dHA6Ly9zZWN1 cmUuZ2xvYmFsc2lnbi5uZXQvY2FjZXJ0L2R2aGUxLmNydDA5BgNVHR8EMjAwMC6g LKAqhihodHRwOi8vY3JsLmdsb2JhbHNpZ24ubmV0L0RvbWFpblZhbDEuY3JsMB0G A1UdDgQWBBShe9FDMd8vwsJPiaqLlxMvO0MIbTAJBgNVHRMEAjAAMA4GA1UdDwEB /wQEAwIE8DApBgNVHSUEIjAgBggrBgEFBQcDAQYIKwYBBQUHAwIGCisGAQQBgjcK AwMwSwYDVR0gBEQwQjBABgkrBgEEAaAyAQowMzAxBggrBgEFBQcCARYlaHR0cDov L3d3dy5nbG9iYWxzaWduLm5ldC9yZXBvc2l0b3J5LzARBglghkgBhvhCAQEEBAMC BsAwDQYJKoZIhvcNAQEFBQADggEBALR7TFM/0HpqRDW1+rsNKlmdH2NqqJUD27yP MMuosmsGNdsqiLKZLYl1DCTd6v8ODwY3lHJXlc+TX9tAVlVDi4OMh52wJzAzzS0Z RS1iB3p9lcRLeqtHvzQM+5k1R53eDR5Ls01SGxkFUrk1mnyCiMDaSQo1aPA1CV9M IgE/yTVDpLJ5D797utgsHlLY8kxJCuxZzNczGvYUYtK//QhUrCpSqrjliMziuu4E 0Al2ibOPu/l1gzyi3u/VEv09souKg6+rXMkqhK0f5HGCjBPLzEQO9QAyU7Wzm1iL DTqxisZDYJIG4E/h8+fYT6F5Nor9kw5hN29+4zcuCTjRMKKwQO8= foad.unjf.fr CN=foad.unjf.fr,O=foad.unjf.fr,OU=Domain Control Validated,C=FR MIIEQjCCAyqgAwIBAgILAQAAAAABGvzIjpcwDQYJKoZIhvcNAQEFBQAwcTELMAkG A1UEBhMCQkUxHTAbBgNVBAsTFERvbWFpbiBWYWxpZGF0aW9uIENBMRkwFwYDVQQK ExBHbG9iYWxTaWduIG52LXNhMSgwJgYDVQQDEx9HbG9iYWxTaWduIERvbWFpbiBW YWxpZGF0aW9uIENBMB4XDTA4MDcwNzA5MDkzMloXDTA5MDcwODA5MDkyNFowXjEL MAkGA1UEBhMCRlIxITAfBgNVBAsTGERvbWFpbiBDb250cm9sIFZhbGlkYXRlZDEV MBMGA1UEChMMZm9hZC51bmpmLmZyMRUwEwYDVQQDEwxmb2FkLnVuamYuZnIwgZ8w DQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMoolVCkLDRi/5L+BfsedV99WI4ItP87 KRG8ZxxBdodKJs3pq+11YmhzTqb257GLeaojPxIHeJXNs17MedzzuKYsd7yLRBk5 BW83R00+mfWKtGb9gyt+GvrnsUSL0rRyVNNiDRZnPYnhvcsDNJ91s+djfrVJbdwz JvnkuMYoD7ntAgMBAAGjggFwMIIBbDAfBgNVHSMEGDAWgBQ2Ek6eccQmQfH68SlM vxekUyi26zBJBggrBgEFBQcBAQQ9MDswOQYIKwYBBQUHMAKGLWh0dHA6Ly9zZWN1 cmUuZ2xvYmFsc2lnbi5uZXQvY2FjZXJ0L2R2aGUxLmNydDA5BgNVHR8EMjAwMC6g LKAqhihodHRwOi8vY3JsLmdsb2JhbHNpZ24ubmV0L0RvbWFpblZhbDEuY3JsMB0G A1UdDgQWBBShe9FDMd8vwsJPiaqLlxMvO0MIbTAJBgNVHRMEAjAAMA4GA1UdDwEB /wQEAwIE8DApBgNVHSUEIjAgBggrBgEFBQcDAQYIKwYBBQUHAwIGCisGAQQBgjcK AwMwSwYDVR0gBEQwQjBABgkrBgEEAaAyAQowMzAxBggrBgEFBQcCARYlaHR0cDov L3d3dy5nbG9iYWxzaWduLm5ldC9yZXBvc2l0b3J5LzARBglghkgBhvhCAQEEBAMC BsAwDQYJKoZIhvcNAQEFBQADggEBALR7TFM/0HpqRDW1+rsNKlmdH2NqqJUD27yP MMuosmsGNdsqiLKZLYl1DCTd6v8ODwY3lHJXlc+TX9tAVlVDi4OMh52wJzAzzS0Z RS1iB3p9lcRLeqtHvzQM+5k1R53eDR5Ls01SGxkFUrk1mnyCiMDaSQo1aPA1CV9M IgE/yTVDpLJ5D797utgsHlLY8kxJCuxZzNczGvYUYtK//QhUrCpSqrjliMziuu4E 0Al2ibOPu/l1gzyi3u/VEv09souKg6+rXMkqhK0f5HGCjBPLzEQO9QAyU7Wzm1iL DTqxisZDYJIG4E/h8+fYT6F5Nor9kw5hN29+4zcuCTjRMKKwQO8= cours.unjf.fr CN=cours.unjf.fr,O=UNJF,C=FR MIICfTCCAeagAwIBAgIJAOulnyIfncRFMA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNV BAYTAkZSMQ0wCwYDVQQKEwRVTkpGMRYwFAYDVQQDEw1jb3Vycy51bmpmLmZyMB4X DTA5MDUyOTEzMDEyOFoXDTI5MDUyNDEzMDEyOFowNDELMAkGA1UEBhMCRlIxDTAL BgNVBAoTBFVOSkYxFjAUBgNVBAMTDWNvdXJzLnVuamYuZnIwgZ8wDQYJKoZIhvcN AQEBBQADgY0AMIGJAoGBALvydNx8iDz2hOPgQQ8w+lJx6sVFnzBsNAKDg2ryCub8 QLyrTD2hDMSuPZB00t/q9p55DEFihrMkhW1YzaiaFt5G8XymbR9X27bTHaHJaIwL VdMSJw+kZUySzd6huLXYaKA7ZqsleVCIhK/dk2BMS++9J7et6JOxgXQgokU0l53h AgMBAAGjgZYwgZMwHQYDVR0OBBYEFHZtraKVTDrqhbZMiJyhrrqqgSgJMGQGA1Ud IwRdMFuAFHZtraKVTDrqhbZMiJyhrrqqgSgJoTikNjA0MQswCQYDVQQGEwJGUjEN MAsGA1UEChMEVU5KRjEWMBQGA1UEAxMNY291cnMudW5qZi5mcoIJAOulnyIfncRF MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAqgemCChtqc0kv7IT/EwJ G9VE6zifvhqiWao0fOeNSubVhThM3HIH0p00du//+sPwAOwbVsfGnOTshhG5ZY6V a2TB1x4pf8tO85LgilVFIFuVjvG45M7F8X0ACFViqoOk5jY1CJPtPvPuWoM+8ejW f9U7QxVhgQpNH7SpSYE2d00= cours.unjf.fr CN=cours.unjf.fr,O=UNJF,C=FR MIICfTCCAeagAwIBAgIJAOulnyIfncRFMA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNV BAYTAkZSMQ0wCwYDVQQKEwRVTkpGMRYwFAYDVQQDEw1jb3Vycy51bmpmLmZyMB4X DTA5MDUyOTEzMDEyOFoXDTI5MDUyNDEzMDEyOFowNDELMAkGA1UEBhMCRlIxDTAL BgNVBAoTBFVOSkYxFjAUBgNVBAMTDWNvdXJzLnVuamYuZnIwgZ8wDQYJKoZIhvcN AQEBBQADgY0AMIGJAoGBALvydNx8iDz2hOPgQQ8w+lJx6sVFnzBsNAKDg2ryCub8 QLyrTD2hDMSuPZB00t/q9p55DEFihrMkhW1YzaiaFt5G8XymbR9X27bTHaHJaIwL VdMSJw+kZUySzd6huLXYaKA7ZqsleVCIhK/dk2BMS++9J7et6JOxgXQgokU0l53h AgMBAAGjgZYwgZMwHQYDVR0OBBYEFHZtraKVTDrqhbZMiJyhrrqqgSgJMGQGA1Ud IwRdMFuAFHZtraKVTDrqhbZMiJyhrrqqgSgJoTikNjA0MQswCQYDVQQGEwJGUjEN MAsGA1UEChMEVU5KRjEWMBQGA1UEAxMNY291cnMudW5qZi5mcoIJAOulnyIfncRF MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAqgemCChtqc0kv7IT/EwJ G9VE6zifvhqiWao0fOeNSubVhThM3HIH0p00du//+sPwAOwbVsfGnOTshhG5ZY6V a2TB1x4pf8tO85LgilVFIFuVjvG45M7F8X0ACFViqoOk5jY1CJPtPvPuWoM+8ejW f9U7QxVhgQpNH7SpSYE2d00= MIIE0DCCA7igAwIBAgIBATANBgkqhkiG9w0BAQUFADCBojELMAkGA1UEBhMCRlIx FjAUBgNVBAgTDUlsZSBkZSBGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMS4wLAYDVQQK EyVVbml2ZXJzaXRlIFBhcmlzIDEgUGFudGhlb24tU29yYm9ubmUgMSUwIwYJKoZI hvcNAQkBFhZzZWN1c3VwQHVuaXYtcGFyaXMxLmZyMRQwEgYDVQQDEwtpbnRlcm5h bC1jYTAeFw0xMTAyMDMxMDU2MjJaFw0yMTAxMzExMDU2MjJaMIGtMQswCQYDVQQG EwJGUjEWMBQGA1UECBMNSWxlIGRlIEZyYW5jZTEOMAwGA1UEBxMFUGFyaXMxLjAs BgNVBAoTJVVuaXZlcnNpdGUgUGFyaXMgMSBQYW50aGVvbi1Tb3Jib25uZSAxJTAj BgkqhkiG9w0BCQEWFnNlY3VzdXBAdW5pdi1wYXJpczEuZnIxHzAdBgNVBAMTFmVk dXNwb3QudW5pdi1wYXJpczEuZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK AoIBAQDc5NkdUy4MutnQdKVsUf4VcukpDAxjV41cYJzxRxqo3jOrbZdAxls4xg0a PBJPZB9BwcyB+Qr/d2QymEo9vU2pDxZFrbkZD5f4D2PZPSbexBBmM4lEv/Wr1517 6NZqqsrrzYsBuWh+JUBy2OijC7ckfzkv3FwkHFWEcjmPglyZn0MGOx8cSOynU8fn +rdoSpn9LNkmYPAG/rfQKc1k7+qObRhcMsPFVu8fJ45s+oVmHAeOgMkR8tmu8mUP rcnX6Bkds5hCc6k+mH/PJ01qSxMtRAPYu/EBoTySO3bb7OUfUwcH/oyZ/Dt1+d45 xXw0O2jhhlK3h/fpQh4veRhlD9ThAgMBAAGjggECMIH/MB0GA1UdDgQWBBTI3LUH 9Xww4pFgxsDHjvkktCEDnTCBzwYDVR0jBIHHMIHEgBSu0e0V1bJBhiLHBTJY3Ojv 7AywJaGBqKSBpTCBojELMAkGA1UEBhMCRlIxFjAUBgNVBAgTDUlsZSBkZSBGcmFu Y2UxDjAMBgNVBAcTBVBhcmlzMS4wLAYDVQQKEyVVbml2ZXJzaXRlIFBhcmlzIDEg UGFudGhlb24tU29yYm9ubmUgMSUwIwYJKoZIhvcNAQkBFhZzZWN1c3VwQHVuaXYt cGFyaXMxLmZyMRQwEgYDVQQDEwtpbnRlcm5hbC1jYYIBADAMBgNVHRMEBTADAQH/ MA0GCSqGSIb3DQEBBQUAA4IBAQCX3R/oqXhTaJksVahr3NPMGyQ1KkGaXo02OPeh bUt8oDfB41PCw9jSk0BZbNsfRd3XKzhTBT5sx8A114jXNwrT+yrQJsUyR3ZvfuUi 5M5DUwEp3if+ud2Fr60ZByR0zJ9jcl0O9jyuhtjSfx18iRYUFTpxEvZAF9SxMvIx vCKZd75HEsPJ2wQxOqm8FR23N1eDAl2aJFsr8fs9O4ZH5U7wGtmEyfrMUdQMQSbe 0ZVxO27M7Wj15AFWRoj2O86QevgBnrtNKF72fg8ECKJmzUxRN7fF9KD+2+HKRHE+ 7jRxc/21znIXjf897XcrDWUuhSIIAAOh/CQ70NnjrD3DokmE MIIE0DCCA7igAwIBAgIBATANBgkqhkiG9w0BAQUFADCBojELMAkGA1UEBhMCRlIx FjAUBgNVBAgTDUlsZSBkZSBGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMS4wLAYDVQQK EyVVbml2ZXJzaXRlIFBhcmlzIDEgUGFudGhlb24tU29yYm9ubmUgMSUwIwYJKoZI hvcNAQkBFhZzZWN1c3VwQHVuaXYtcGFyaXMxLmZyMRQwEgYDVQQDEwtpbnRlcm5h bC1jYTAeFw0xMTAyMDMxMDU2MjJaFw0yMTAxMzExMDU2MjJaMIGtMQswCQYDVQQG EwJGUjEWMBQGA1UECBMNSWxlIGRlIEZyYW5jZTEOMAwGA1UEBxMFUGFyaXMxLjAs BgNVBAoTJVVuaXZlcnNpdGUgUGFyaXMgMSBQYW50aGVvbi1Tb3Jib25uZSAxJTAj BgkqhkiG9w0BCQEWFnNlY3VzdXBAdW5pdi1wYXJpczEuZnIxHzAdBgNVBAMTFmVk dXNwb3QudW5pdi1wYXJpczEuZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK AoIBAQDc5NkdUy4MutnQdKVsUf4VcukpDAxjV41cYJzxRxqo3jOrbZdAxls4xg0a PBJPZB9BwcyB+Qr/d2QymEo9vU2pDxZFrbkZD5f4D2PZPSbexBBmM4lEv/Wr1517 6NZqqsrrzYsBuWh+JUBy2OijC7ckfzkv3FwkHFWEcjmPglyZn0MGOx8cSOynU8fn +rdoSpn9LNkmYPAG/rfQKc1k7+qObRhcMsPFVu8fJ45s+oVmHAeOgMkR8tmu8mUP rcnX6Bkds5hCc6k+mH/PJ01qSxMtRAPYu/EBoTySO3bb7OUfUwcH/oyZ/Dt1+d45 xXw0O2jhhlK3h/fpQh4veRhlD9ThAgMBAAGjggECMIH/MB0GA1UdDgQWBBTI3LUH 9Xww4pFgxsDHjvkktCEDnTCBzwYDVR0jBIHHMIHEgBSu0e0V1bJBhiLHBTJY3Ojv 7AywJaGBqKSBpTCBojELMAkGA1UEBhMCRlIxFjAUBgNVBAgTDUlsZSBkZSBGcmFu Y2UxDjAMBgNVBAcTBVBhcmlzMS4wLAYDVQQKEyVVbml2ZXJzaXRlIFBhcmlzIDEg UGFudGhlb24tU29yYm9ubmUgMSUwIwYJKoZIhvcNAQkBFhZzZWN1c3VwQHVuaXYt cGFyaXMxLmZyMRQwEgYDVQQDEwtpbnRlcm5hbC1jYYIBADAMBgNVHRMEBTADAQH/ MA0GCSqGSIb3DQEBBQUAA4IBAQCX3R/oqXhTaJksVahr3NPMGyQ1KkGaXo02OPeh bUt8oDfB41PCw9jSk0BZbNsfRd3XKzhTBT5sx8A114jXNwrT+yrQJsUyR3ZvfuUi 5M5DUwEp3if+ud2Fr60ZByR0zJ9jcl0O9jyuhtjSfx18iRYUFTpxEvZAF9SxMvIx vCKZd75HEsPJ2wQxOqm8FR23N1eDAl2aJFsr8fs9O4ZH5U7wGtmEyfrMUdQMQSbe 0ZVxO27M7Wj15AFWRoj2O86QevgBnrtNKF72fg8ECKJmzUxRN7fF9KD+2+HKRHE+ 7jRxc/21znIXjf897XcrDWUuhSIIAAOh/CQ70NnjrD3DokmE Jerome Bertsch secusup@univ-paris1.fr Nicolas Cuissard nicolas.cuissard@univ-paris1.fr MIICZDCCAc2gAwIBAgIJANA8OKkGXIZkMA0GCSqGSIb3DQEBBQUAMEsxCzAJBgNV BAYTAkZSMRswGQYDVQQKDBJVbml2ZXJzaXRlIFBhcmlzIDgxHzAdBgNVBAMMFmVk dXNwb3QudW5pdi1wYXJpczguZnIwHhcNMTEwMzAxMTQyNDUyWhcNMzEwMjI0MTQy NDUyWjBLMQswCQYDVQQGEwJGUjEbMBkGA1UECgwSVW5pdmVyc2l0ZSBQYXJpcyA4 MR8wHQYDVQQDDBZlZHVzcG90LnVuaXYtcGFyaXM4LmZyMIGfMA0GCSqGSIb3DQEB AQUAA4GNADCBiQKBgQC4dPzxCe4Ma8X9jTd+RGyAbwkMi05EGbLzNlE3t3TozVlN aF3KaLjFda+0P19mkwlQt11MJjJx/Sr097mO6G+7PxQ/TkJtRITpUz1W0QM6q8/B SpaDO/cDPW5/WuKuLKSIHbFaL0Ld3fHJ8PjddUysw6yIZDB7jO4xcqF2kXUn6QID AQABo1AwTjAdBgNVHQ4EFgQUHXn4bbfzl/xInFrISMK8r2rucoIwHwYDVR0jBBgw FoAUHXn4bbfzl/xInFrISMK8r2rucoIwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0B AQUFAAOBgQAVRQiYj91txtPvpMOtWk0gUFQuJWJJ+VQGTiWt8B0+uCB+iSY7clOM cyp2Er2LQOos7QUEQU78a5GbFfXk9iW6DZqfK9RJopCRWmcJnHAvBpmPD5UpYtar 83cZx4tlqrz07O/X7UaNRGRHQM8CLXU5E+d+2xWcTw+0apt2JCTQNQ== MIICZDCCAc2gAwIBAgIJANA8OKkGXIZkMA0GCSqGSIb3DQEBBQUAMEsxCzAJBgNV BAYTAkZSMRswGQYDVQQKDBJVbml2ZXJzaXRlIFBhcmlzIDgxHzAdBgNVBAMMFmVk dXNwb3QudW5pdi1wYXJpczguZnIwHhcNMTEwMzAxMTQyNDUyWhcNMzEwMjI0MTQy NDUyWjBLMQswCQYDVQQGEwJGUjEbMBkGA1UECgwSVW5pdmVyc2l0ZSBQYXJpcyA4 MR8wHQYDVQQDDBZlZHVzcG90LnVuaXYtcGFyaXM4LmZyMIGfMA0GCSqGSIb3DQEB AQUAA4GNADCBiQKBgQC4dPzxCe4Ma8X9jTd+RGyAbwkMi05EGbLzNlE3t3TozVlN aF3KaLjFda+0P19mkwlQt11MJjJx/Sr097mO6G+7PxQ/TkJtRITpUz1W0QM6q8/B SpaDO/cDPW5/WuKuLKSIHbFaL0Ld3fHJ8PjddUysw6yIZDB7jO4xcqF2kXUn6QID AQABo1AwTjAdBgNVHQ4EFgQUHXn4bbfzl/xInFrISMK8r2rucoIwHwYDVR0jBBgw FoAUHXn4bbfzl/xInFrISMK8r2rucoIwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0B AQUFAAOBgQAVRQiYj91txtPvpMOtWk0gUFQuJWJJ+VQGTiWt8B0+uCB+iSY7clOM cyp2Er2LQOos7QUEQU78a5GbFfXk9iW6DZqfK9RJopCRWmcJnHAvBpmPD5UpYtar 83cZx4tlqrz07O/X7UaNRGRHQM8CLXU5E+d+2xWcTw+0apt2JCTQNQ== Cyril GHESQUIERE cyril.ghesquiere@univ-paris8.fr u-paris10.fr MIIDNzCCAh+gAwIBAgIUXYwGNR0e3TmvFRcc3TotvuU4p7gwDQYJKoZIhvcNAQEF BQAwHjEcMBoGA1UEAxMTdm0taWRwLnUtcGFyaXMxMC5mcjAeFw0xMDEwMjIwODQz MTVaFw0zMDEwMjIwODQzMTVaMB4xHDAaBgNVBAMTE3ZtLWlkcC51LXBhcmlzMTAu ZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCM0CxtGHa4F5Dcx4qK 6k+fhr6IEa+j4IlHsRHAiI34FmGJii7CTJiZKinweRYfwiiZojNvZsukZdzvbAAM n6NbnsjkF8nZPnBnjJ/bg7SJfs4ncGcHz+IM4A5bFTFBzA/+dGaO5zBadcu+vZeP jcV8ybcfawjXrUsRY0Xfe31mUauB+/c97VHjlTR/C5fWUykdMhGHb7/LFfYOKuxn 7lKySw9zoKWPxANEpJ++vGStHpxC/HwAeRXChtjp9PHzv9q113ULh56CoT3FC/DS T2KhZJaNhErVf13Y/bsFISbc3grU3H2QvG/zHflfXdlxkruc5gMR72EE4TpV8oNm UyL1AgMBAAGjbTBrMEoGA1UdEQRDMEGCE3ZtLWlkcC51LXBhcmlzMTAuZnKGKmh0 dHBzOi8vdm0taWRwLnUtcGFyaXMxMC5mci9pZHAvc2hpYmJvbGV0aDAdBgNVHQ4E FgQU1S9sRpirzeLqClcAIfM/ea3Jp64wDQYJKoZIhvcNAQEFBQADggEBAIaKduGm bcqCr+iJohPeu9KG0eKJIu055jXbmxebWbH+fKSvFmwXnJvalNPC/zauky9b4i26 JSW73/GgffkLpSXbUTY/RA8tvfj1X7VoRDhTNSHHxnbnRp5sX67YCC/ibh7Z+k1A +0xAg/nj1q+nIkvq0nAP2INCzIGrmp/i9iUpoWqTzxO7J+/rccTg6Slzhp/0rijY e5aQgM9fBKDCrua5eM/dQmqNXUV39cL/A19no+8Ba/2xOMwKEti16m4Se/nSFS/q rCORJMk1aKEaE4HycsP0Q5MVsWLPyFUobXXeRW7C6A55FX03nIIhBdZCyQvBFhui 6MGhigYDE9ZLUlw= urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université Paris Ouest Nanterre La Défense Université Paris Ouest Nanterre La Défense http://unknown.site.com Driss Bouzekhrout driss@u-paris10.fr Alain Bonis alain.bonis@u-paris10.fr etu.univ-tlse2.fr univ-tlse2.fr MIIEFjCCAv6gAwIBAgIQU4s2cfoLMcS4CAQ5w7PbVzANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTEwMDIyMjAwMDAwMFoXDTEzMDIyMTIzNTk1OVowcjELMAkGA1UE BhMCRlIxETAPBgNVBAcTCFRPVUxPVVNFMTIwMAYDVQQKDCl1bml2ZXJzaXTDqSB0 b3Vsb3VzZSAyIHRvdWxvdXNlIGxlIG1pcmFpbDEcMBoGA1UEAxMTdG9uZ2EudW5p di10bHNlMi5mcjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAseh2pkmnQfS6 1n8W6B4Zl0oW8VO2U85B1vrP497tOLfg+YZFDExx3o9bo3G1MOe8pPYXX8o4IJbY EZOt+1r90hcIZYHxKUChzbj8A5s3JuDzPW9FBeoccJpyH8kjDAA+jOX/MByoXD1y eyVyXQ8A2z0xHAjtGKsiKk1or/rqtKUCAwEAAaOCAWYwggFiMB8GA1UdIwQYMBaA FAy9k2gM896ro0lrKzdXR+qQ47ntMB0GA1UdDgQWBBRXvFx/fYlHV5DfndKDygeO Anc/ITAOBgNVHQ8BAf8EBAMCBaAwDAYDVR0TAQH/BAIwADAdBgNVHSUEFjAUBggr BgEFBQcDAQYIKwYBBQUHAwIwGAYDVR0gBBEwDzANBgsrBgEEAbIxAQICHTA6BgNV HR8EMzAxMC+gLaArhilodHRwOi8vY3JsLnRjcy50ZXJlbmEub3JnL1RFUkVOQVNT TENBLmNybDBtBggrBgEFBQcBAQRhMF8wNQYIKwYBBQUHMAKGKWh0dHA6Ly9jcnQu dGNzLnRlcmVuYS5vcmcvVEVSRU5BU1NMQ0EuY3J0MCYGCCsGAQUFBzABhhpodHRw Oi8vb2NzcC50Y3MudGVyZW5hLm9yZzAeBgNVHREEFzAVghN0b25nYS51bml2LXRs c2UyLmZyMA0GCSqGSIb3DQEBBQUAA4IBAQBXI9WubDIlttQfTXl0XzzBx5+nBxYa 4Vk3IuemB4pj3xg0sJz+WcX5idfDC9TILD/j7WnceWpNVg5+4bX0LHr8nxXy5GXG y7ruA50fuwFlxL1m1f9Rl3lgSS+9OFX/pwO68j8bG2HaAmagHPMftOdES15tcE24 xRjuQwA+Ci/KVDKRTgMwKPrSLR2unxAEhkQksJ5Qbxz0JZaeDWQuck52JGwY8AxD GwPwffWYrCia2bzxfKPUiZbuIIIMQI/JfP79/rDMk/bsiEaOoFyNMgbqG/xMCqJ8 UiA93mbMlvGxjHprvnENF7KeRcs/1aCCDoPjE7iQ6Ne2AacxR45Vlcer urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient etu.univ-tlse2.fr univ-tlse2.fr MIIEFjCCAv6gAwIBAgIQU4s2cfoLMcS4CAQ5w7PbVzANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTEwMDIyMjAwMDAwMFoXDTEzMDIyMTIzNTk1OVowcjELMAkGA1UE BhMCRlIxETAPBgNVBAcTCFRPVUxPVVNFMTIwMAYDVQQKDCl1bml2ZXJzaXTDqSB0 b3Vsb3VzZSAyIHRvdWxvdXNlIGxlIG1pcmFpbDEcMBoGA1UEAxMTdG9uZ2EudW5p di10bHNlMi5mcjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAseh2pkmnQfS6 1n8W6B4Zl0oW8VO2U85B1vrP497tOLfg+YZFDExx3o9bo3G1MOe8pPYXX8o4IJbY EZOt+1r90hcIZYHxKUChzbj8A5s3JuDzPW9FBeoccJpyH8kjDAA+jOX/MByoXD1y eyVyXQ8A2z0xHAjtGKsiKk1or/rqtKUCAwEAAaOCAWYwggFiMB8GA1UdIwQYMBaA FAy9k2gM896ro0lrKzdXR+qQ47ntMB0GA1UdDgQWBBRXvFx/fYlHV5DfndKDygeO Anc/ITAOBgNVHQ8BAf8EBAMCBaAwDAYDVR0TAQH/BAIwADAdBgNVHSUEFjAUBggr BgEFBQcDAQYIKwYBBQUHAwIwGAYDVR0gBBEwDzANBgsrBgEEAbIxAQICHTA6BgNV HR8EMzAxMC+gLaArhilodHRwOi8vY3JsLnRjcy50ZXJlbmEub3JnL1RFUkVOQVNT TENBLmNybDBtBggrBgEFBQcBAQRhMF8wNQYIKwYBBQUHMAKGKWh0dHA6Ly9jcnQu dGNzLnRlcmVuYS5vcmcvVEVSRU5BU1NMQ0EuY3J0MCYGCCsGAQUFBzABhhpodHRw Oi8vb2NzcC50Y3MudGVyZW5hLm9yZzAeBgNVHREEFzAVghN0b25nYS51bml2LXRs c2UyLmZyMA0GCSqGSIb3DQEBBQUAA4IBAQBXI9WubDIlttQfTXl0XzzBx5+nBxYa 4Vk3IuemB4pj3xg0sJz+WcX5idfDC9TILD/j7WnceWpNVg5+4bX0LHr8nxXy5GXG y7ruA50fuwFlxL1m1f9Rl3lgSS+9OFX/pwO68j8bG2HaAmagHPMftOdES15tcE24 xRjuQwA+Ci/KVDKRTgMwKPrSLR2unxAEhkQksJ5Qbxz0JZaeDWQuck52JGwY8AxD GwPwffWYrCia2bzxfKPUiZbuIIIMQI/JfP79/rDMk/bsiEaOoFyNMgbqG/xMCqJ8 UiA93mbMlvGxjHprvnENF7KeRcs/1aCCDoPjE7iQ6Ne2AacxR45Vlcer urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université Toulouse 2 - Mirail Université Toulouse 2 - Mirail http://unknown.site.com Florent Lartet sos-ent@univ-tlse2.fr Sébastien Delpech sos-ent@univ-tlse2.fr up.univ-mrs.fr MIIDWzCCAkOgAwIBAgIUCJnTN9CwEOZ0NY+gWNK5MvozAxIwDQYJKoZIhvcNAQEF BQAwJzElMCMGA1UEAxMcc2hpYmJvbGV0aDIudW5pdi1wcm92ZW5jZS5mcjAeFw0x MDAyMDQxNjU1NDJaFw0zMDAyMDQxNjU1NDJaMCcxJTAjBgNVBAMTHHNoaWJib2xl dGgyLnVuaXYtcHJvdmVuY2UuZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK AoIBAQCK0rnetRKvBBOCTE2tGEUb8oWECSQuxRRWdMD33mcHz1+RGHFLWq/6I1VN HlwO+6n+naBVosBUmweHkBnPXen1hb9R7R/cMWAQoqpuFukezoluRShYqVIPL/Qx uj8gbvBimXLJ3yiI+Jx6+0tm2Uuhlc50nImzjG/BJLI6D3Ppsuo2qxIC5KKw/P8L 0iRw3IWwQbDMjQFE4ErJKeyH6nuVjnE1ZPLPCdgaDJsCKpyH1eDOz+FWLSj8OyZf XljMD0TpHLSOv9Gxg351wKuhQePGsRnqgPIGELFhOFWwq29N8kB9Pwx4NC4Pl2S/ mllLA3R21UeoyOhWLrmJxnzBSWJVAgMBAAGjfzB9MFwGA1UdEQRVMFOCHHNoaWJi b2xldGgyLnVuaXYtcHJvdmVuY2UuZnKGM2h0dHBzOi8vc2hpYmJvbGV0aDIudW5p di1wcm92ZW5jZS5mci9pZHAvc2hpYmJvbGV0aDAdBgNVHQ4EFgQUy9/XMEXrXmTe PKCczbe20qFLFEwwDQYJKoZIhvcNAQEFBQADggEBAAWl6tc+y4p5GIDtwiDbx71w udYIthldwOmSO0kteDRNbQ5V6rWRbyhC98xj0v7RsoSAoiDQtewaAVQMb1MmkaGS ek3tGUCyBs8Yvg0ofATbHYrTwsdwwEL8Z2MxnAQ7cH3kFCP8Qrmxzfc4gJhTEC/n Wv026zXmQ2HSA8aVXuaXWOpEU6J5rVK9/di14fyXcAAUYC2f7aq8LR+1jm3QXA45 ffy/bdaWAWfJKQ/rgWSjsXVLOcLdtm4IKmJUllpHGhM2o11CG9WXaXZop5SHEwpI sNqCVPczbJPn+LwmFTIP1XtQotdsNaV+qNN4UVneVfmJqDRfwtVht0eFcEPkwMc= urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient up.univ-mrs.fr MIIDWzCCAkOgAwIBAgIUCJnTN9CwEOZ0NY+gWNK5MvozAxIwDQYJKoZIhvcNAQEF BQAwJzElMCMGA1UEAxMcc2hpYmJvbGV0aDIudW5pdi1wcm92ZW5jZS5mcjAeFw0x MDAyMDQxNjU1NDJaFw0zMDAyMDQxNjU1NDJaMCcxJTAjBgNVBAMTHHNoaWJib2xl dGgyLnVuaXYtcHJvdmVuY2UuZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK AoIBAQCK0rnetRKvBBOCTE2tGEUb8oWECSQuxRRWdMD33mcHz1+RGHFLWq/6I1VN HlwO+6n+naBVosBUmweHkBnPXen1hb9R7R/cMWAQoqpuFukezoluRShYqVIPL/Qx uj8gbvBimXLJ3yiI+Jx6+0tm2Uuhlc50nImzjG/BJLI6D3Ppsuo2qxIC5KKw/P8L 0iRw3IWwQbDMjQFE4ErJKeyH6nuVjnE1ZPLPCdgaDJsCKpyH1eDOz+FWLSj8OyZf XljMD0TpHLSOv9Gxg351wKuhQePGsRnqgPIGELFhOFWwq29N8kB9Pwx4NC4Pl2S/ mllLA3R21UeoyOhWLrmJxnzBSWJVAgMBAAGjfzB9MFwGA1UdEQRVMFOCHHNoaWJi b2xldGgyLnVuaXYtcHJvdmVuY2UuZnKGM2h0dHBzOi8vc2hpYmJvbGV0aDIudW5p di1wcm92ZW5jZS5mci9pZHAvc2hpYmJvbGV0aDAdBgNVHQ4EFgQUy9/XMEXrXmTe PKCczbe20qFLFEwwDQYJKoZIhvcNAQEFBQADggEBAAWl6tc+y4p5GIDtwiDbx71w udYIthldwOmSO0kteDRNbQ5V6rWRbyhC98xj0v7RsoSAoiDQtewaAVQMb1MmkaGS ek3tGUCyBs8Yvg0ofATbHYrTwsdwwEL8Z2MxnAQ7cH3kFCP8Qrmxzfc4gJhTEC/n Wv026zXmQ2HSA8aVXuaXWOpEU6J5rVK9/di14fyXcAAUYC2f7aq8LR+1jm3QXA45 ffy/bdaWAWfJKQ/rgWSjsXVLOcLdtm4IKmJUllpHGhM2o11CG9WXaXZop5SHEwpI sNqCVPczbJPn+LwmFTIP1XtQotdsNaV+qNN4UVneVfmJqDRfwtVht0eFcEPkwMc= urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université d'Aix - Marseille 1 - Provence Université d'Aix - Marseille 1 - Provence http://unknown.site.com Michel Aimar shibboleth@univ-provence.fr Herve Bonnat shibboleth@univ-provence.fr univmed.fr MIIEJzCCAw+gAwIBAgIRAMY3TZg1ifoUmCxoudO+lyowDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0wOTExMjYwMDAwMDBaFw0xMjExMjUyMzU5NTlaMIGGMQswCQYD VQQGEwJGUjESMBAGA1UEBxMJTUFSU0VJTExFMTswOQYDVQQKDDJVbml2ZXJzaXTD qSBkZSBsYSBNw6lkaXRlcnJhbsOpZSAgQWl4LW1hcnNlaWxsZSBJSTENMAsGA1UE CxMERE9TSTEXMBUGA1UEAxMOaWRwLnVuaXZtZWQuZnIwgZ8wDQYJKoZIhvcNAQEB BQADgY0AMIGJAoGBANG1bCwwRUAhwniR8iq7kool2RC44VJCu0Bl+FDCL5+iI0Dt w0I1L1tpMjtr1y1vJCZES1h/jSj5bzs/TLUgB9bcWaSWSXxSTum46wFoTRXyY4Fm tBWAoJD53wBLa6/Sd3Vf2dwXwDlpy8xnLK5k2qIDseRiex7b50ihtt9d8yNBAgMB AAGjggFhMIIBXTAfBgNVHSMEGDAWgBQMvZNoDPPeq6NJays3V0fqkOO57TAdBgNV HQ4EFgQURDy6LTDQyxGOBz6R3tJ+yovILMUwDgYDVR0PAQH/BAQDAgWgMAwGA1Ud EwEB/wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBgGA1UdIAQR MA8wDQYLKwYBBAGyMQECAh0wOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC50 Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcmwwbQYIKwYBBQUHAQEEYTBfMDUG CCsGAQUFBzAChilodHRwOi8vY3J0LnRjcy50ZXJlbmEub3JnL1RFUkVOQVNTTENB LmNydDAmBggrBgEFBQcwAYYaaHR0cDovL29jc3AudGNzLnRlcmVuYS5vcmcwGQYD VR0RBBIwEIIOaWRwLnVuaXZtZWQuZnIwDQYJKoZIhvcNAQEFBQADggEBABuClVXf 1fAWBCEMlD0ANvqexI78XCt+9XY+eB3K7u+xu60k8p5vVPcJVsv51yw8z74pmPxP 6eyPKbFa0gpzGzkrnHXrqcUOmxKqhmxzOrLEAUpIZwfUeas6BGO+vNxd0HyDRfhu M9vnFcPY8alAyq1ZvDCAWbx2/pMsrwjIq4TqxmPVPxvLb2NZ6B+iKT0a4S7n9dw8 bPJav2ozYHiAxo+uGoDPI/tUqcKVkqS0Rpd1ZgiGVhFKEHBANidg3evQQMJHHRZw pUn7LQfw7/XF8+mfilhVm4llCntGr+BilhaS6bOqVCpNB3rE1WD8z1O+VhmYg/Rg 8XB3SLhu/rv/T+0= MIIDIzCCAgugAwIBAgIUHLRD37eiGT+ZlwFoluG7ZIJu3P4wDQYJKoZIhvcNAQEF BQAwGTEXMBUGA1UEAxMOaWRwLnVuaXZtZWQuZnIwHhcNMDkwNDMwMTQyNzAzWhcN MjkwNDMwMTQyNzAzWjAZMRcwFQYDVQQDEw5pZHAudW5pdm1lZC5mcjCCASIwDQYJ KoZIhvcNAQEBBQADggEPADCCAQoCggEBAN+RhcKR7CIDwqfGilFlPtiEr1dqX7YE D78Lrl4AOgCn/i8//gYMgE3rSAKu8y2ArqgNSEQwmmvno+7TkB5e7oM42GM6/+l2 SL04uRt74U37H5Yn/hG4zNktEPkOzdxpVECI7T6ZJvevpiEDn909ps/TTMa9PmjE blEo4FUGfSzshF5h59RFo7eEnTQHlsOQNgY2Jqad4AeyJ0ZjNXWOXZfN21Vz+AVQ JXwAWEp0GwuLViOETDQ1NH9wW3m9Y4K7AiLvqYQN933m4Wckusp2gS9yBnRalQU0 CXfJMCqTHEQCAT43y/rwrqquWHdxmdzl9zoMObcSC6gK109ph7r8ZS8CAwEAAaNj MGEwQAYDVR0RBDkwN4IOaWRwLnVuaXZtZWQuZnKGJWh0dHBzOi8vaWRwLnVuaXZt ZWQuZnIvaWRwL3NoaWJib2xldGgwHQYDVR0OBBYEFOrXgseolZZgX4dq6liQ8l58 cZ7hMA0GCSqGSIb3DQEBBQUAA4IBAQC9Rr9R0bqzFzjZG5sDOuOOLdicVxthkHJq XmGQwsTX2nfYjJrHLfnEKFxS1d/rlaed71mW3k9/Aon3nX+qK7oG9CXY50m+uEei LeRvg2vzDoTOFkZEvnCbx5bFy9U8/wwYx/fRDfvET18N3A8kwCbzZHbfNgfjQW98 Nzi2grK54vqbo97jh3WeMeYtbJaymEQV0ttAkaNjClhiaa4CopYFMMSktrpPcKw/ gbPG6pfLnzDKLp8zOYrE086ID2gVWEnaYGZkkVDTBvhumIu5xrTtO7vo7lVpG3g7 np58k7r/kQDRhPWQQgnNCsMUIb6HTuQ9LD43HabQaKZRxiC+glZ/ urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient univmed.fr MIIEJzCCAw+gAwIBAgIRAMY3TZg1ifoUmCxoudO+lyowDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0wOTExMjYwMDAwMDBaFw0xMjExMjUyMzU5NTlaMIGGMQswCQYD VQQGEwJGUjESMBAGA1UEBxMJTUFSU0VJTExFMTswOQYDVQQKDDJVbml2ZXJzaXTD qSBkZSBsYSBNw6lkaXRlcnJhbsOpZSAgQWl4LW1hcnNlaWxsZSBJSTENMAsGA1UE CxMERE9TSTEXMBUGA1UEAxMOaWRwLnVuaXZtZWQuZnIwgZ8wDQYJKoZIhvcNAQEB BQADgY0AMIGJAoGBANG1bCwwRUAhwniR8iq7kool2RC44VJCu0Bl+FDCL5+iI0Dt w0I1L1tpMjtr1y1vJCZES1h/jSj5bzs/TLUgB9bcWaSWSXxSTum46wFoTRXyY4Fm tBWAoJD53wBLa6/Sd3Vf2dwXwDlpy8xnLK5k2qIDseRiex7b50ihtt9d8yNBAgMB AAGjggFhMIIBXTAfBgNVHSMEGDAWgBQMvZNoDPPeq6NJays3V0fqkOO57TAdBgNV HQ4EFgQURDy6LTDQyxGOBz6R3tJ+yovILMUwDgYDVR0PAQH/BAQDAgWgMAwGA1Ud EwEB/wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBgGA1UdIAQR MA8wDQYLKwYBBAGyMQECAh0wOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC50 Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcmwwbQYIKwYBBQUHAQEEYTBfMDUG CCsGAQUFBzAChilodHRwOi8vY3J0LnRjcy50ZXJlbmEub3JnL1RFUkVOQVNTTENB LmNydDAmBggrBgEFBQcwAYYaaHR0cDovL29jc3AudGNzLnRlcmVuYS5vcmcwGQYD VR0RBBIwEIIOaWRwLnVuaXZtZWQuZnIwDQYJKoZIhvcNAQEFBQADggEBABuClVXf 1fAWBCEMlD0ANvqexI78XCt+9XY+eB3K7u+xu60k8p5vVPcJVsv51yw8z74pmPxP 6eyPKbFa0gpzGzkrnHXrqcUOmxKqhmxzOrLEAUpIZwfUeas6BGO+vNxd0HyDRfhu M9vnFcPY8alAyq1ZvDCAWbx2/pMsrwjIq4TqxmPVPxvLb2NZ6B+iKT0a4S7n9dw8 bPJav2ozYHiAxo+uGoDPI/tUqcKVkqS0Rpd1ZgiGVhFKEHBANidg3evQQMJHHRZw pUn7LQfw7/XF8+mfilhVm4llCntGr+BilhaS6bOqVCpNB3rE1WD8z1O+VhmYg/Rg 8XB3SLhu/rv/T+0= MIIDIzCCAgugAwIBAgIUHLRD37eiGT+ZlwFoluG7ZIJu3P4wDQYJKoZIhvcNAQEF BQAwGTEXMBUGA1UEAxMOaWRwLnVuaXZtZWQuZnIwHhcNMDkwNDMwMTQyNzAzWhcN MjkwNDMwMTQyNzAzWjAZMRcwFQYDVQQDEw5pZHAudW5pdm1lZC5mcjCCASIwDQYJ KoZIhvcNAQEBBQADggEPADCCAQoCggEBAN+RhcKR7CIDwqfGilFlPtiEr1dqX7YE D78Lrl4AOgCn/i8//gYMgE3rSAKu8y2ArqgNSEQwmmvno+7TkB5e7oM42GM6/+l2 SL04uRt74U37H5Yn/hG4zNktEPkOzdxpVECI7T6ZJvevpiEDn909ps/TTMa9PmjE blEo4FUGfSzshF5h59RFo7eEnTQHlsOQNgY2Jqad4AeyJ0ZjNXWOXZfN21Vz+AVQ JXwAWEp0GwuLViOETDQ1NH9wW3m9Y4K7AiLvqYQN933m4Wckusp2gS9yBnRalQU0 CXfJMCqTHEQCAT43y/rwrqquWHdxmdzl9zoMObcSC6gK109ph7r8ZS8CAwEAAaNj MGEwQAYDVR0RBDkwN4IOaWRwLnVuaXZtZWQuZnKGJWh0dHBzOi8vaWRwLnVuaXZt ZWQuZnIvaWRwL3NoaWJib2xldGgwHQYDVR0OBBYEFOrXgseolZZgX4dq6liQ8l58 cZ7hMA0GCSqGSIb3DQEBBQUAA4IBAQC9Rr9R0bqzFzjZG5sDOuOOLdicVxthkHJq XmGQwsTX2nfYjJrHLfnEKFxS1d/rlaed71mW3k9/Aon3nX+qK7oG9CXY50m+uEei LeRvg2vzDoTOFkZEvnCbx5bFy9U8/wwYx/fRDfvET18N3A8kwCbzZHbfNgfjQW98 Nzi2grK54vqbo97jh3WeMeYtbJaymEQV0ttAkaNjClhiaa4CopYFMMSktrpPcKw/ gbPG6pfLnzDKLp8zOYrE086ID2gVWEnaYGZkkVDTBvhumIu5xrTtO7vo7lVpG3g7 np58k7r/kQDRhPWQQgnNCsMUIb6HTuQ9LD43HabQaKZRxiC+glZ/ urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université d'Aix - Marseille 2 - Méditerranée Université d'Aix - Marseille 2 - Méditerranée http://unknown.site.com Nantas Sébastien sebastien.nantas@univmed.fr Dominique Lalot dominique.lalot@univmed.fr univ-cezanne.fr MIIDUzCCAjugAwIBAgIUOBF3moTCST6KpsA1B+r+ok/rumUwDQYJKoZIhvcNAQEF BQAwJTEjMCEGA1UEAxMac2hpYmJvbGV0aC51bml2LWNlemFubmUuZnIwHhcNMTAw MzI5MTIwMzE1WhcNMzAwMzI5MTMwMzE1WjAlMSMwIQYDVQQDExpzaGliYm9sZXRo LnVuaXYtY2V6YW5uZS5mcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB AKCVzfSF354m4zTHIS4VExgU9k/kOiJIGm12mBqlcoJ5TTlrYO/6cdmVvsCooClz M23sR6RoarTGF/Z8sYbee475NaxHhy8LjMXe+70horZWJOA5EGSyh+sOV9ejaEzd fUDaQ/KgRpY+hxQUdg08iMU51laNjvHiMmF51lSBxUVkwuoE4xVSVRE5alZYoopo yMb6qLGd2FJ+x5KpnsaydsNV4gFeQqYNAYpImueIJxUU/r3vWVfmAOg5vU/yYL9w bA1n401O1KJaa1qzbP8pxGwC6RhB9fXW+KrLdAzm6llwWTuj1/NfJYnw0LLctSnX OJy2JyEPijU2nwLsKy/I318CAwEAAaN7MHkwWAYDVR0RBFEwT4Iac2hpYmJvbGV0 aC51bml2LWNlemFubmUuZnKGMWh0dHBzOi8vc2hpYmJvbGV0aC51bml2LWNlemFu bmUuZnIvaWRwL3NoaWJib2xldGgwHQYDVR0OBBYEFD4dsk/Q8A68BqWKL3AgIdDp /o6/MA0GCSqGSIb3DQEBBQUAA4IBAQB3fJ1El76f4eCQs7008/wi/eo0KC+ITLY7 73pX5tQSP3F+CEvMwKzz5PnEgkgy0zCQtWulp4wxTuEF+ZSLuzfcuU/Oo1DDNlGk gBaorpyB+RgdAt1UN4bydjVqJN55w3x47DDB4do66Q4nlbDw9zwV06OEJd/gi4g8 bMGCLUDoWqqC/Byo8keidBKkKkJOVmBogA0KS7hw+aby2lEpuCqF90XvRAHsl4Md XEuvMzsYOxSzwK7io2nHMo6VrPiuEk1B/2SisODcFBt8M4mGrYZIrxa0s2y5OzOW jXEnmBct2U2XAgUsz0xYfDfr4OkawnJdYbs2EXlYgCzl7Or+jpjI urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient univ-cezanne.fr MIIDUzCCAjugAwIBAgIUOBF3moTCST6KpsA1B+r+ok/rumUwDQYJKoZIhvcNAQEF BQAwJTEjMCEGA1UEAxMac2hpYmJvbGV0aC51bml2LWNlemFubmUuZnIwHhcNMTAw MzI5MTIwMzE1WhcNMzAwMzI5MTMwMzE1WjAlMSMwIQYDVQQDExpzaGliYm9sZXRo LnVuaXYtY2V6YW5uZS5mcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB AKCVzfSF354m4zTHIS4VExgU9k/kOiJIGm12mBqlcoJ5TTlrYO/6cdmVvsCooClz M23sR6RoarTGF/Z8sYbee475NaxHhy8LjMXe+70horZWJOA5EGSyh+sOV9ejaEzd fUDaQ/KgRpY+hxQUdg08iMU51laNjvHiMmF51lSBxUVkwuoE4xVSVRE5alZYoopo yMb6qLGd2FJ+x5KpnsaydsNV4gFeQqYNAYpImueIJxUU/r3vWVfmAOg5vU/yYL9w bA1n401O1KJaa1qzbP8pxGwC6RhB9fXW+KrLdAzm6llwWTuj1/NfJYnw0LLctSnX OJy2JyEPijU2nwLsKy/I318CAwEAAaN7MHkwWAYDVR0RBFEwT4Iac2hpYmJvbGV0 aC51bml2LWNlemFubmUuZnKGMWh0dHBzOi8vc2hpYmJvbGV0aC51bml2LWNlemFu bmUuZnIvaWRwL3NoaWJib2xldGgwHQYDVR0OBBYEFD4dsk/Q8A68BqWKL3AgIdDp /o6/MA0GCSqGSIb3DQEBBQUAA4IBAQB3fJ1El76f4eCQs7008/wi/eo0KC+ITLY7 73pX5tQSP3F+CEvMwKzz5PnEgkgy0zCQtWulp4wxTuEF+ZSLuzfcuU/Oo1DDNlGk gBaorpyB+RgdAt1UN4bydjVqJN55w3x47DDB4do66Q4nlbDw9zwV06OEJd/gi4g8 bMGCLUDoWqqC/Byo8keidBKkKkJOVmBogA0KS7hw+aby2lEpuCqF90XvRAHsl4Md XEuvMzsYOxSzwK7io2nHMo6VrPiuEk1B/2SisODcFBt8M4mGrYZIrxa0s2y5OzOW jXEnmBct2U2XAgUsz0xYfDfr4OkawnJdYbs2EXlYgCzl7Or+jpjI urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université d'Aix - Marseille 3 - Paul Cézanne Université d'Aix - Marseille 3 - Paul Cézanne http://unknown.site.com FLORET jp.floret@univ-cezanne.fr AZAMBERTI yves.azamberti@univ-cezanne.fr univ-angers.fr MIIDRDCCAiygAwIBAgIVAMHj2Cu/7KEX13/aTUHqdXfb3tFgMA0GCSqGSIb3DQEB BQUAMCExHzAdBgNVBAMTFmZyb250YWwudW5pdi1hbmdlcnMuZnIwHhcNMTAwOTA5 MTAzMjQyWhcNMzAwOTA5MTAzMjQyWjAhMR8wHQYDVQQDExZmcm9udGFsLnVuaXYt YW5nZXJzLmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjIh2qi8D qFiSERXM4uugvV8s4OBCMbosII48TW6O0zG5KMtaLDnTDatBTchVONzQ7M5IEg/7 nM90aocij3FZxWqDnV/o5A/MMuBoB8/J9oWgMVPnB+sBlixpQiWc5L/31HQgVPtL 7AOuyC9xxldTx1e5kDBpW0QDyqZdtbApqAI0N4pCtrIKm8lYTYJ28eZQDUF7nu/h hw6HgSRY3qtCWnpkahaRziIFfsxyt1PJQSmaEdkHheFJWuoW8ptt3DwVn+ywBkX4 EkZnBkuHZ3E5CMWXMz8WzfSqeJj+epi1vCDr80R6v7wKez7CWLt+uit7ZFyjjv+l zKa9OHlDCG52qQIDAQABo3MwcTBQBgNVHREESTBHghZmcm9udGFsLnVuaXYtYW5n ZXJzLmZyhi1odHRwczovL2Zyb250YWwudW5pdi1hbmdlcnMuZnIvaWRwL3NoaWJi b2xldGgwHQYDVR0OBBYEFJC10iOKAVjMBWfVlXG7viH4rneDMA0GCSqGSIb3DQEB BQUAA4IBAQBXoZx/uNmrVDdvRMUZL0ZVPP0XtHRngakIEi0ADSAh2zHAhvMgybDE W2EprWWG3CEltjt59/ugMV7y7/VkAuw2CMcFiKWGNYrlyXqx+u045lFxaB1VEkyH NFCBhYR00KhKcsyLZFGRhjJsRF8BrPPk4APrhMzKMm7yyysWgK8zaIx1G1vWG5FD e2SaH84F6OdHlwY/DFR+h6JFkH7FrBoJxKcnlCTL8NGhH2Kc15JweNdb7aTthrqb 85iK6ee+lD481XBORDuJ9IueWi+kuDTSoTCP403vuFXe3SCMDi5ifHnw+7CH/jd8 +2aam5wgFGGrA1qTjyQEFHulpuQ6mnIK MIIFBjCCA+6gAwIBAgIRAIRe/9/5ngVfyixfnPskWmEwDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0xMDAxMjUwMDAwMDBaFw0xMzAxMjQyMzU5NTlaMIGDMQswCQYD VQQGEwJGUjEPMA0GA1UEBxMGQW5nZXJzMR0wGwYDVQQKDBRVbml2ZXJzaXTDqSBk J0FuZ2VyczEkMCIGA1UECwwbRFNJIC0gU3lzdMOobWVzIGV0IFLDqXNlYXV4MR4w HAYDVQQDExVhcHBsaXMudW5pdi1hbmdlcnMuZnIwggEiMA0GCSqGSIb3DQEBAQUA A4IBDwAwggEKAoIBAQDhQEaBSUbXj6e2LFZ+F7fYxqN9M5dZgf1n5An4uZpszorS ThQ8l7Yk+ZzAewACUlT+kOtkagz2oHaFbCMJGP97/fgindRtXR0UN9MfA9PlIffM ijkGWwmRWFonQOl4Rw5Ib0OGihYLfW6T/aaq97KItRQ1aItdAavBXsCrA6baf/AU 2um9jWAPaJwQVa8ALs9kwWfTId+v6Om/4gA6QO4u70pzKaQ2nIJJQw4LYMrQ77kp tPf5nHPJr0C0cLV6hO+8DxyJEtNo6od2bI6DBwEbcdqcUPO5FybJ8Vh7IkCkER4u NXDg+R5dG9e/uXO6CPS9bjVWEBTxvM/2b1OErgr/AgMBAAGjggG/MIIBuzAfBgNV HSMEGDAWgBQMvZNoDPPeq6NJays3V0fqkOO57TAdBgNVHQ4EFgQUz1Oj5s801Can bXgy14efkllHFmYwDgYDVR0PAQH/BAQDAgWgMAwGA1UdEwEB/wQCMAAwHQYDVR0l BBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBgGA1UdIAQRMA8wDQYLKwYBBAGyMQEC Ah0wOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC50Y3MudGVyZW5hLm9yZy9U RVJFTkFTU0xDQS5jcmwwbQYIKwYBBQUHAQEEYTBfMDUGCCsGAQUFBzAChilodHRw Oi8vY3J0LnRjcy50ZXJlbmEub3JnL1RFUkVOQVNTTENBLmNydDAmBggrBgEFBQcw AYYaaHR0cDovL29jc3AudGNzLnRlcmVuYS5vcmcwdwYDVR0RBHAwboIVYXBwbGlz LnVuaXYtYW5nZXJzLmZyghJjYXMudW5pdi1hbmdlcnMuZnKCEmVudC51bml2LWFu Z2Vycy5mcoIUcmVwcm8udW5pdi1hbmdlcnMuZnKCF3NwaGlueG9sLnVuaXYtYW5n ZXJzLmZyMA0GCSqGSIb3DQEBBQUAA4IBAQAXwoTLfvMX9nmW0+QHAZSIaMcLPP5n DSmy/2CivJYHloQnH+8Nx3dS46uvyvstj8pjmvfgDXt2U8Gf5Io9v8xq6tZdaW21 Vt4vD0OMkacET8kmTdH335XBnhX8j77DH7O03RXBvC/dhdwHWpm6RJMNsgTg7V+M IRt1BBSSSvAUed6QKkNj667+kphWRYp7RsCqaLgKlUG+71uNAK3hpKJhvC0RI8NZ BNMvSj4fLdORNa3pcviIqDwSrVnn/BHX1zKlVZzPjyfQyhEkBu4zoKqAtrT9QhAK fwHszd3F58RSBiXRlQMtnoQFM34lA2DuN4jlt2ybkX2D2wJDMDGsz4aN urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient univ-angers.fr MIIDRDCCAiygAwIBAgIVAMHj2Cu/7KEX13/aTUHqdXfb3tFgMA0GCSqGSIb3DQEB BQUAMCExHzAdBgNVBAMTFmZyb250YWwudW5pdi1hbmdlcnMuZnIwHhcNMTAwOTA5 MTAzMjQyWhcNMzAwOTA5MTAzMjQyWjAhMR8wHQYDVQQDExZmcm9udGFsLnVuaXYt YW5nZXJzLmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjIh2qi8D qFiSERXM4uugvV8s4OBCMbosII48TW6O0zG5KMtaLDnTDatBTchVONzQ7M5IEg/7 nM90aocij3FZxWqDnV/o5A/MMuBoB8/J9oWgMVPnB+sBlixpQiWc5L/31HQgVPtL 7AOuyC9xxldTx1e5kDBpW0QDyqZdtbApqAI0N4pCtrIKm8lYTYJ28eZQDUF7nu/h hw6HgSRY3qtCWnpkahaRziIFfsxyt1PJQSmaEdkHheFJWuoW8ptt3DwVn+ywBkX4 EkZnBkuHZ3E5CMWXMz8WzfSqeJj+epi1vCDr80R6v7wKez7CWLt+uit7ZFyjjv+l zKa9OHlDCG52qQIDAQABo3MwcTBQBgNVHREESTBHghZmcm9udGFsLnVuaXYtYW5n ZXJzLmZyhi1odHRwczovL2Zyb250YWwudW5pdi1hbmdlcnMuZnIvaWRwL3NoaWJi b2xldGgwHQYDVR0OBBYEFJC10iOKAVjMBWfVlXG7viH4rneDMA0GCSqGSIb3DQEB BQUAA4IBAQBXoZx/uNmrVDdvRMUZL0ZVPP0XtHRngakIEi0ADSAh2zHAhvMgybDE W2EprWWG3CEltjt59/ugMV7y7/VkAuw2CMcFiKWGNYrlyXqx+u045lFxaB1VEkyH NFCBhYR00KhKcsyLZFGRhjJsRF8BrPPk4APrhMzKMm7yyysWgK8zaIx1G1vWG5FD e2SaH84F6OdHlwY/DFR+h6JFkH7FrBoJxKcnlCTL8NGhH2Kc15JweNdb7aTthrqb 85iK6ee+lD481XBORDuJ9IueWi+kuDTSoTCP403vuFXe3SCMDi5ifHnw+7CH/jd8 +2aam5wgFGGrA1qTjyQEFHulpuQ6mnIK MIIFBjCCA+6gAwIBAgIRAIRe/9/5ngVfyixfnPskWmEwDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0xMDAxMjUwMDAwMDBaFw0xMzAxMjQyMzU5NTlaMIGDMQswCQYD VQQGEwJGUjEPMA0GA1UEBxMGQW5nZXJzMR0wGwYDVQQKDBRVbml2ZXJzaXTDqSBk J0FuZ2VyczEkMCIGA1UECwwbRFNJIC0gU3lzdMOobWVzIGV0IFLDqXNlYXV4MR4w HAYDVQQDExVhcHBsaXMudW5pdi1hbmdlcnMuZnIwggEiMA0GCSqGSIb3DQEBAQUA A4IBDwAwggEKAoIBAQDhQEaBSUbXj6e2LFZ+F7fYxqN9M5dZgf1n5An4uZpszorS ThQ8l7Yk+ZzAewACUlT+kOtkagz2oHaFbCMJGP97/fgindRtXR0UN9MfA9PlIffM ijkGWwmRWFonQOl4Rw5Ib0OGihYLfW6T/aaq97KItRQ1aItdAavBXsCrA6baf/AU 2um9jWAPaJwQVa8ALs9kwWfTId+v6Om/4gA6QO4u70pzKaQ2nIJJQw4LYMrQ77kp tPf5nHPJr0C0cLV6hO+8DxyJEtNo6od2bI6DBwEbcdqcUPO5FybJ8Vh7IkCkER4u NXDg+R5dG9e/uXO6CPS9bjVWEBTxvM/2b1OErgr/AgMBAAGjggG/MIIBuzAfBgNV HSMEGDAWgBQMvZNoDPPeq6NJays3V0fqkOO57TAdBgNVHQ4EFgQUz1Oj5s801Can bXgy14efkllHFmYwDgYDVR0PAQH/BAQDAgWgMAwGA1UdEwEB/wQCMAAwHQYDVR0l BBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBgGA1UdIAQRMA8wDQYLKwYBBAGyMQEC Ah0wOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC50Y3MudGVyZW5hLm9yZy9U RVJFTkFTU0xDQS5jcmwwbQYIKwYBBQUHAQEEYTBfMDUGCCsGAQUFBzAChilodHRw Oi8vY3J0LnRjcy50ZXJlbmEub3JnL1RFUkVOQVNTTENBLmNydDAmBggrBgEFBQcw AYYaaHR0cDovL29jc3AudGNzLnRlcmVuYS5vcmcwdwYDVR0RBHAwboIVYXBwbGlz LnVuaXYtYW5nZXJzLmZyghJjYXMudW5pdi1hbmdlcnMuZnKCEmVudC51bml2LWFu Z2Vycy5mcoIUcmVwcm8udW5pdi1hbmdlcnMuZnKCF3NwaGlueG9sLnVuaXYtYW5n ZXJzLmZyMA0GCSqGSIb3DQEBBQUAA4IBAQAXwoTLfvMX9nmW0+QHAZSIaMcLPP5n DSmy/2CivJYHloQnH+8Nx3dS46uvyvstj8pjmvfgDXt2U8Gf5Io9v8xq6tZdaW21 Vt4vD0OMkacET8kmTdH335XBnhX8j77DH7O03RXBvC/dhdwHWpm6RJMNsgTg7V+M IRt1BBSSSvAUed6QKkNj667+kphWRYp7RsCqaLgKlUG+71uNAK3hpKJhvC0RI8NZ BNMvSj4fLdORNa3pcviIqDwSrVnn/BHX1zKlVZzPjyfQyhEkBu4zoKqAtrT9QhAK fwHszd3F58RSBiXRlQMtnoQFM34lA2DuN4jlt2ybkX2D2wJDMDGsz4aN urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université d'Angers Université d'Angers http://unknown.site.com Romain Mercier dsi-sr@listes.univ-angers.fr Thierry Oger dsi-sr@listes.univ-angers.fr univ-artois.fr MIIEjTCCA3WgAwIBAgIQfhiuMp3yYJ6yqWinuSDwtjANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTA5MTEwOTAwMDAwMFoXDTEyMTEwODIzNTk1OVowZjELMAkGA1UE BhMCRlIxCzAJBgNVBAgTAmZyMQ4wDAYDVQQHEwVBcnJhczEdMBsGA1UECgwUVW5p dmVyaXN0w6kgZCdBcnRvaXMxGzAZBgNVBAMTEmlkcC51bml2LWFydG9pcy5mcjCC ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANb8Gds/z7pPAw2J78P6oxNq cz/L3GHT4UOuHWBYJfyO6hmcIJyxlVMrUweZ3hi3AeQ0IkbNf2u3PuIqwWaq+Thv dGWnS13UKvXLOjAZBE6vq3C2czct8XLY6GSbS/cZwg9f/yBy2YyU8tbfhnzc1IzP 86HXlFt4knzYJISQXKxoJnAKooG8cPZ9KfgUpL72DhRr7aT/bqaGoTffiRXcIcCD mkdf0BRp3kazLxDeXDegC3kL6lPkmi4sSXsoJlnjThgas94PZj7aFF41W+vU4AJg huch81feOHgbUUqyFYNcrgGYlWx3yPpjsbgaDr8QQGvYHXC8yBB/OcrjxjF4oiUC AwEAAaOCAWUwggFhMB8GA1UdIwQYMBaAFAy9k2gM896ro0lrKzdXR+qQ47ntMB0G A1UdDgQWBBTdrY4eVILdc05x9n7aRqSLxUZp5jAOBgNVHQ8BAf8EBAMCBaAwDAYD VR0TAQH/BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwGAYDVR0g BBEwDzANBgsrBgEEAbIxAQICHTA6BgNVHR8EMzAxMC+gLaArhilodHRwOi8vY3Js LnRjcy50ZXJlbmEub3JnL1RFUkVOQVNTTENBLmNybDBtBggrBgEFBQcBAQRhMF8w NQYIKwYBBQUHMAKGKWh0dHA6Ly9jcnQudGNzLnRlcmVuYS5vcmcvVEVSRU5BU1NM Q0EuY3J0MCYGCCsGAQUFBzABhhpodHRwOi8vb2NzcC50Y3MudGVyZW5hLm9yZzAd BgNVHREEFjAUghJpZHAudW5pdi1hcnRvaXMuZnIwDQYJKoZIhvcNAQEFBQADggEB AHv1xb7b+rrmLB7w614ABH7naiF2BNGC/PRwCBpiq+E0izgDC2ds7lTOhjTMklx/ N1H9ASPO4PfFlDYErthJ7kaJhraY18rYz0GqhXtE3Jahlrtv5TwbmHvZgw60InKG bskQywr9j9DEHhmU2ljHnHj358eBFy9YFN5PNBUmubD2T7kX70Csf6KTtbTXu91s bxntnm8PH+8cdLJI7ee81wT0p4QFOi2bHaQ/cYdWfACMq6jMxzJVn74f6kB0TEpY YDoLB4d8dPDANWeU5cNfAJmAZTM8VGiXIrU13as3Q00+e5hcYVUTdeuWCK916OlL SkmtoDiCCiNb/TnaJR8utgk= MIIEGzCCAwOgAwIBAgILAQAAAAABE3MsD+cwDQYJKoZIhvcNAQEFBQAwXzELMAkG A1UEBhMCQkUxEzARBgNVBAoTCkN5YmVydHJ1c3QxFzAVBgNVBAsTDkVkdWNhdGlv bmFsIENBMSIwIAYDVQQDExlDeWJlcnRydXN0IEVkdWNhdGlvbmFsIENBMB4XDTA3 MDYyODE2MzExM1oXDTEwMDYyODE2MzExM1owSDELMAkGA1UEBhMCRlIxHDAaBgNV BAoTE1VuaXZlcnNpdGUgZCdBcnRvaXMxGzAZBgNVBAMTEmlkcC51bml2LWFydG9p cy5mcjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvHoVvMDAu/6aMQDkvIro LvsC4UJMBOYWzPQe6J0aK9xZoKuLkoxfju5jrQ0eHAXZNbmC5ZdZ//+fkAmETPLa yZm7DByHxexgXOB6C3fsLtheOZrlZljIIvZOKMIouKekuW7+koUgpld3ljwWTFaB sZpLwOMU7rxeBK7W3NhAKvkCAwEAAaOCAXEwggFtMFAGA1UdIARJMEcwRQYHKoZI sT4BADA6MDgGCCsGAQUFBwIBFixodHRwOi8vd3d3Lmdsb2JhbHNpZ24ubmV0L3Jl cG9zaXRvcnkvY3BzLmNmbTAOBgNVHQ8BAf8EBAMCBaAwHwYDVR0jBBgwFoAUZWWj Pdc7EaMKByU3yUJKW3Z3UOEwHQYDVR0OBBYEFI8eKKOgHRYqxZ0pxUXIHivLIh1k MDoGA1UdHwQzMDEwL6AtoCuGKWh0dHA6Ly9jcmwuZ2xvYmFsc2lnbi5uZXQvZWR1 Y2F0aW9uYWwuY3JsME8GCCsGAQUFBwEBBEMwQTA/BggrBgEFBQcwAoYzaHR0cDov L3NlY3VyZS5nbG9iYWxzaWduLm5ldC9jYWNlcnQvZWR1Y2F0aW9uYWwuY3J0MB0G A1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNVHREEFjAUghJpZHAudW5p di1hcnRvaXMuZnIwDQYJKoZIhvcNAQEFBQADggEBAEI2zRBYjJCfuIuqsderruAm zi0xoL/yTDSjy0iSn6BUxs/VfGwt/p6wQ46g6iGVwLfH+xZcJvFpbxH3mg6KFbWp br1gJf2WnhFT9/2ygMiyyG4oo8RAFR+9/OQo0FXEwQbbUDU4z7mwk5zk0rfMkJAv 98SaJEsvhobpvbK/aKuZOX4wFJBk8x85r1AmCSBx2ZDBUnIAkzXsVUz1n0c8PuK9 19nv7f4bjJ5oS8S6zVALHgmHHPc7nZL2yVgkpLT++kqdpgto7BAdIW2hLrzNm2cF yD6/8IdlyTmNH0SATB5mNKhyCDPvGlVAnnA5J8KhwhlLMusgESX0GReR4fd/My4= urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient univ-artois.fr MIIEjTCCA3WgAwIBAgIQfhiuMp3yYJ6yqWinuSDwtjANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTA5MTEwOTAwMDAwMFoXDTEyMTEwODIzNTk1OVowZjELMAkGA1UE BhMCRlIxCzAJBgNVBAgTAmZyMQ4wDAYDVQQHEwVBcnJhczEdMBsGA1UECgwUVW5p dmVyaXN0w6kgZCdBcnRvaXMxGzAZBgNVBAMTEmlkcC51bml2LWFydG9pcy5mcjCC ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANb8Gds/z7pPAw2J78P6oxNq cz/L3GHT4UOuHWBYJfyO6hmcIJyxlVMrUweZ3hi3AeQ0IkbNf2u3PuIqwWaq+Thv dGWnS13UKvXLOjAZBE6vq3C2czct8XLY6GSbS/cZwg9f/yBy2YyU8tbfhnzc1IzP 86HXlFt4knzYJISQXKxoJnAKooG8cPZ9KfgUpL72DhRr7aT/bqaGoTffiRXcIcCD mkdf0BRp3kazLxDeXDegC3kL6lPkmi4sSXsoJlnjThgas94PZj7aFF41W+vU4AJg huch81feOHgbUUqyFYNcrgGYlWx3yPpjsbgaDr8QQGvYHXC8yBB/OcrjxjF4oiUC AwEAAaOCAWUwggFhMB8GA1UdIwQYMBaAFAy9k2gM896ro0lrKzdXR+qQ47ntMB0G A1UdDgQWBBTdrY4eVILdc05x9n7aRqSLxUZp5jAOBgNVHQ8BAf8EBAMCBaAwDAYD VR0TAQH/BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwGAYDVR0g BBEwDzANBgsrBgEEAbIxAQICHTA6BgNVHR8EMzAxMC+gLaArhilodHRwOi8vY3Js LnRjcy50ZXJlbmEub3JnL1RFUkVOQVNTTENBLmNybDBtBggrBgEFBQcBAQRhMF8w NQYIKwYBBQUHMAKGKWh0dHA6Ly9jcnQudGNzLnRlcmVuYS5vcmcvVEVSRU5BU1NM Q0EuY3J0MCYGCCsGAQUFBzABhhpodHRwOi8vb2NzcC50Y3MudGVyZW5hLm9yZzAd BgNVHREEFjAUghJpZHAudW5pdi1hcnRvaXMuZnIwDQYJKoZIhvcNAQEFBQADggEB AHv1xb7b+rrmLB7w614ABH7naiF2BNGC/PRwCBpiq+E0izgDC2ds7lTOhjTMklx/ N1H9ASPO4PfFlDYErthJ7kaJhraY18rYz0GqhXtE3Jahlrtv5TwbmHvZgw60InKG bskQywr9j9DEHhmU2ljHnHj358eBFy9YFN5PNBUmubD2T7kX70Csf6KTtbTXu91s bxntnm8PH+8cdLJI7ee81wT0p4QFOi2bHaQ/cYdWfACMq6jMxzJVn74f6kB0TEpY YDoLB4d8dPDANWeU5cNfAJmAZTM8VGiXIrU13as3Q00+e5hcYVUTdeuWCK916OlL SkmtoDiCCiNb/TnaJR8utgk= MIIEGzCCAwOgAwIBAgILAQAAAAABE3MsD+cwDQYJKoZIhvcNAQEFBQAwXzELMAkG A1UEBhMCQkUxEzARBgNVBAoTCkN5YmVydHJ1c3QxFzAVBgNVBAsTDkVkdWNhdGlv bmFsIENBMSIwIAYDVQQDExlDeWJlcnRydXN0IEVkdWNhdGlvbmFsIENBMB4XDTA3 MDYyODE2MzExM1oXDTEwMDYyODE2MzExM1owSDELMAkGA1UEBhMCRlIxHDAaBgNV BAoTE1VuaXZlcnNpdGUgZCdBcnRvaXMxGzAZBgNVBAMTEmlkcC51bml2LWFydG9p cy5mcjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvHoVvMDAu/6aMQDkvIro LvsC4UJMBOYWzPQe6J0aK9xZoKuLkoxfju5jrQ0eHAXZNbmC5ZdZ//+fkAmETPLa yZm7DByHxexgXOB6C3fsLtheOZrlZljIIvZOKMIouKekuW7+koUgpld3ljwWTFaB sZpLwOMU7rxeBK7W3NhAKvkCAwEAAaOCAXEwggFtMFAGA1UdIARJMEcwRQYHKoZI sT4BADA6MDgGCCsGAQUFBwIBFixodHRwOi8vd3d3Lmdsb2JhbHNpZ24ubmV0L3Jl cG9zaXRvcnkvY3BzLmNmbTAOBgNVHQ8BAf8EBAMCBaAwHwYDVR0jBBgwFoAUZWWj Pdc7EaMKByU3yUJKW3Z3UOEwHQYDVR0OBBYEFI8eKKOgHRYqxZ0pxUXIHivLIh1k MDoGA1UdHwQzMDEwL6AtoCuGKWh0dHA6Ly9jcmwuZ2xvYmFsc2lnbi5uZXQvZWR1 Y2F0aW9uYWwuY3JsME8GCCsGAQUFBwEBBEMwQTA/BggrBgEFBQcwAoYzaHR0cDov L3NlY3VyZS5nbG9iYWxzaWduLm5ldC9jYWNlcnQvZWR1Y2F0aW9uYWwuY3J0MB0G A1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNVHREEFjAUghJpZHAudW5p di1hcnRvaXMuZnIwDQYJKoZIhvcNAQEFBQADggEBAEI2zRBYjJCfuIuqsderruAm zi0xoL/yTDSjy0iSn6BUxs/VfGwt/p6wQ46g6iGVwLfH+xZcJvFpbxH3mg6KFbWp br1gJf2WnhFT9/2ygMiyyG4oo8RAFR+9/OQo0FXEwQbbUDU4z7mwk5zk0rfMkJAv 98SaJEsvhobpvbK/aKuZOX4wFJBk8x85r1AmCSBx2ZDBUnIAkzXsVUz1n0c8PuK9 19nv7f4bjJ5oS8S6zVALHgmHHPc7nZL2yVgkpLT++kqdpgto7BAdIW2hLrzNm2cF yD6/8IdlyTmNH0SATB5mNKhyCDPvGlVAnnA5J8KhwhlLMusgESX0GReR4fd/My4= urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université d'Artois Université d'Artois http://unknown.site.com Demorgny fed-admin@univ-artois.fr Lemiere fed-admin@univ-artois.fr univ-evry.fr MIIDRzCCAi+gAwIBAgIUAq2mpKTxqh6qstX6eHwrmooVbmMwDQYJKoZIhvcNAQEF BQAwIjEgMB4GA1UEAxMXc2hpYmJvbGV0aC51bml2LWV2cnkuZnIwHhcNMTAwOTI0 MTA0OTA0WhcNMzAwOTI0MTA0OTA0WjAiMSAwHgYDVQQDExdzaGliYm9sZXRoLnVu aXYtZXZyeS5mcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJp52EEk t5jLp2Fdl+FW8WxlusVfSKNpnmDCk08OeoWrF+6oxlfGzRxK87iUGawBhHx9Q3Iv pDyxfCBr6Cl8uLD1B881s1HF79T5iNeNS42MwGCjYxDmnDK1Jc1DcNDP8e5wfvBL 2fT8WSjajtOOy+KXFltTsIcoenaCLcPb3l3EBpxmQQdgLwWb886kExL6oeYXxtXs DlTo6jzVCtFRxw9JMx7DaaxlPGHLBkGuUjYV6HJ1lX9N9lKzLt5C8QP+zlvaNj4l l4NWnvoxZ6b6tmB8A3yOv6YJNZmJEztCWr5szNuLIHV1Ps//jinag738uxQVsH2b gYAkC5aLCdheVnMCAwEAAaN1MHMwUgYDVR0RBEswSYIXc2hpYmJvbGV0aC51bml2 LWV2cnkuZnKGLmh0dHBzOi8vc2hpYmJvbGV0aC51bml2LWV2cnkuZnIvaWRwL3No aWJib2xldGgwHQYDVR0OBBYEFEWCfI5AXn3/RakH6dnpRYDa2t9VMA0GCSqGSIb3 DQEBBQUAA4IBAQBLNO5vu0/3c4pxRULtvx6c/OUQQQcjiPraIvVQVrnEb24aGKs7 pIHGnk3VnyPaieODwif5KDUqQc3fkG0tXIUVshI4aRzopVL4qFDfwi7KbpDS6nUC cRyZSJ4Xp6SYPhadkK49sLSe9lf5tdcn8Kr6EpAL3uvQx45HdtzV9CI1KS8nI/ZE +pvpXfptS9ZSrvsEz2SP9KjeEzSWiBTfCmGkKVxTPTiq/Qrg9Ceeoep8sj39Dh6Z 2Y95aiTAmI2kjFbS4s2bZHjk/0TsYmOB8H6X+Ily18J3+xTfqvBw3c/inBzx1NT+ 21YW2cnfO+jzg5ZJqmB5D1PP001cJMAoHwV3 urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université d'Evry Val d'Essonne Université d'Evry Val d'Essonne http://unknown.site.com DE FRANCE assistance-reseau@univ-evry.fr Benichou assistance-reseau@univ-evry.fr univ-orleans.fr MIIDPDCCAiSgAwIBAgIVANWZeCtKF/UQd4fR6YuwUFezr4HpMA0GCSqGSIb3DQEB BQUAMB8xHTAbBgNVBAMTFHNoaWIudW5pdi1vcmxlYW5zLmZyMB4XDTExMDQxMTEy MDgzMFoXDTMxMDQxMTEyMDgzMFowHzEdMBsGA1UEAxMUc2hpYi51bml2LW9ybGVh bnMuZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDCTIQZAwSNXNbF 4QOav/RSjyjZjSxLsQtUazKnrbz4NfBb2ne7rz6vCLsWL5ROCo6SxVvs3pXKNSUD vURq6o98KadI0MIn9b4NM5K/4pczaSlF1R6hw0IPYh5eYefIt4hOc92JXHUPn/AP fQc2xTiMT1ym5mEsPeAefwr0nkbdv/X7joxldaRNqmTgwqrtKacWVY/soMwtRB+m bFHd8bAQmnLTVGl/ZP26or3XaTspPkqnY6F2lg/0Zajrj2suV0zhxJ7h+yvEuQju GTDsB1+y7WUqV6e3ZYwAEirjX3gjK3cdehNYLukk1v9HVP3nFeiMjfHeAuLqWwoP oRwCxs9dAgMBAAGjbzBtMEwGA1UdEQRFMEOCFHNoaWIudW5pdi1vcmxlYW5zLmZy hitodHRwczovL3NoaWIudW5pdi1vcmxlYW5zLmZyL2lkcC9zaGliYm9sZXRoMB0G A1UdDgQWBBS2+qObLJGIfmja7fzCOw56RXQlpzANBgkqhkiG9w0BAQUFAAOCAQEA RZ+y3gkKx9sZ+RCNCfcsqW5J13+vJw5tAog7tiNaeR92/gkPduQnV77R3O1Dc9m1 97EMCsYfY6LReQOEHTy3yl3oJm/VPDlyaHS6pufnfLtf/PYoQEWhJDCNhA4ebJ8R fbi97IoQA3hHQPYwo1qBfZkCy10k2EzHz6hz9EZtEXEjMCcgFGFNhfDkNBWrmDln Lk2EiYwXkYbiqz4l8/tVJ3YFYVNmNezvW/PvgeiJaSKaIWwpeHxu/YdB+grKUckN IM41Gy3rPU+4VD6wsj+dXYpUCvMUwVKaQahxu1DKWH9hrMMBkYio3dLds0GNs0GJ C+qiXdGuUa6kUpYVBFC+Vw== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université d'Orléans Université d'Orléans http://unknown.site.com Maubert Anthony anthony.maubert@univ-orleans.fr u-bordeaux1.fr MIIDMzCCAhugAwIBAgIUYibTz+Dskx28GtVQ2//RrkKDqr8wDQYJKoZIhvcNAQEF BQAwHTEbMBkGA1UEAxMSaWRwLnUtYm9yZGVhdXgxLmZyMB4XDTA5MTEwOTA4NDcx M1oXDTI5MTEwOTA4NDcxM1owHTEbMBkGA1UEAxMSaWRwLnUtYm9yZGVhdXgxLmZy MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzOR5TePy0ieJG9TAQBKb HxfHdPm7Js3sfkvHdCcM0YKVO2S9XmCgR3SLs8Cu6/MZPosaDmz9qE6xD3RdHA+h OZck8PDUOkmlZmJP56XR5LJ5GWkfNFj5spYc330kkmd/pHc1Gvkpg/UTUZHxQ2oC S4a86CvRRLxYV2DJw9Xs6xTQdmq3htBjD1UZt1DdEAfKAB+pAym201O09HtVUKEi f6rF2/V1aPzBiOLkUI/qjFd0Nxv1AmrfzR6iikCwQow0RixV0JSe4fd3L8OsRl4+ Og+HvxMgT1gGtS0l0IxskwBadNORi0izo/+QI72KjQuhwlo4qpHz+5IZQxGG7ZBF fwIDAQABo2swaTBIBgNVHREEQTA/ghJpZHAudS1ib3JkZWF1eDEuZnKGKWh0dHBz Oi8vaWRwLnUtYm9yZGVhdXgxLmZyL2lkcC9zaGliYm9sZXRoMB0GA1UdDgQWBBR8 ZWiS0Xn8gBy8RcQS0rxq2mv18DANBgkqhkiG9w0BAQUFAAOCAQEAfBUQ2pwfnv8r DT1XgVFPYNqDHwAg34D4iiFiD/LxSBxVucCUGNTvBD6G3r/Q7aKpHmQdxhqZgqKF mij0A7JKugv/mXFdjmyA9/GiqPabfQJdDi3QIMgfBb5Vpvcoth+yxRnJ2MzpKAxH BeaIdvQ7FXzDhW7vTFDfbpkC1mLEI5/febpi7CAvMkE6AFa9YpnCNvN2MiW9n/jP bxoITGkd9gp938GswozJ4c8CLWVPt85EOPdpOqNCVXtL661myHQdSYltGFvT+jgd yaUfAtl8hB0qTx/dI2xOtYJa5ROvs2OVSp0mi8otLv2fgDnkRDISwt8QpRTqsMaP PuVhZrOujQ== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient u-bordeaux1.fr MIIDMzCCAhugAwIBAgIUYibTz+Dskx28GtVQ2//RrkKDqr8wDQYJKoZIhvcNAQEF BQAwHTEbMBkGA1UEAxMSaWRwLnUtYm9yZGVhdXgxLmZyMB4XDTA5MTEwOTA4NDcx M1oXDTI5MTEwOTA4NDcxM1owHTEbMBkGA1UEAxMSaWRwLnUtYm9yZGVhdXgxLmZy MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzOR5TePy0ieJG9TAQBKb HxfHdPm7Js3sfkvHdCcM0YKVO2S9XmCgR3SLs8Cu6/MZPosaDmz9qE6xD3RdHA+h OZck8PDUOkmlZmJP56XR5LJ5GWkfNFj5spYc330kkmd/pHc1Gvkpg/UTUZHxQ2oC S4a86CvRRLxYV2DJw9Xs6xTQdmq3htBjD1UZt1DdEAfKAB+pAym201O09HtVUKEi f6rF2/V1aPzBiOLkUI/qjFd0Nxv1AmrfzR6iikCwQow0RixV0JSe4fd3L8OsRl4+ Og+HvxMgT1gGtS0l0IxskwBadNORi0izo/+QI72KjQuhwlo4qpHz+5IZQxGG7ZBF fwIDAQABo2swaTBIBgNVHREEQTA/ghJpZHAudS1ib3JkZWF1eDEuZnKGKWh0dHBz Oi8vaWRwLnUtYm9yZGVhdXgxLmZyL2lkcC9zaGliYm9sZXRoMB0GA1UdDgQWBBR8 ZWiS0Xn8gBy8RcQS0rxq2mv18DANBgkqhkiG9w0BAQUFAAOCAQEAfBUQ2pwfnv8r DT1XgVFPYNqDHwAg34D4iiFiD/LxSBxVucCUGNTvBD6G3r/Q7aKpHmQdxhqZgqKF mij0A7JKugv/mXFdjmyA9/GiqPabfQJdDi3QIMgfBb5Vpvcoth+yxRnJ2MzpKAxH BeaIdvQ7FXzDhW7vTFDfbpkC1mLEI5/febpi7CAvMkE6AFa9YpnCNvN2MiW9n/jP bxoITGkd9gp938GswozJ4c8CLWVPt85EOPdpOqNCVXtL661myHQdSYltGFvT+jgd yaUfAtl8hB0qTx/dI2xOtYJa5ROvs2OVSp0mi8otLv2fgDnkRDISwt8QpRTqsMaP PuVhZrOujQ== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Bordeaux 1 Université de Bordeaux 1 http://unknown.site.com RAYNAL Karen karen.raynal@u-bordeaux1.fr BONNET Pascal pascal.bonnet@u-bordeaux1.fr u-bordeaux2.fr MIIDMzCCAhugAwIBAgIUc4KqBCpHPbcVzlUyb7nDoJn4CK0wDQYJKoZIhvcNAQEF BQAwHTEbMBkGA1UEAxMSaWRwLnUtYm9yZGVhdXgyLmZyMB4XDTA5MDYyMzA5MTUy MVoXDTI5MDYyMzA5MTUyMVowHTEbMBkGA1UEAxMSaWRwLnUtYm9yZGVhdXgyLmZy MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAktJPvpXPKI/6Nl1dysLc oZZCrvCg9QhUW+ELfNLGBR4p8FmkXC/1RT7osvEt6MsFVhjtOO/3idpbQkqXhlMD ORfcm4hSPDCoEM1OmlwlfHBqeVVb+rfLzEswAQt/v+/IGo3cY9ISa+zUbIEOy5Nu +LXG1qYd8/tadV7kgsv+kgvCpkspwdqQArParmjboeGYnGD2E1AL3XgU42R/G3Vn +kNDevHVc1dk6ZKz+7ZqJy5V1pkco5+g9ydAgoTRH6si+AZc975mrzJhAfiwQsoh qwpm546ZLaaPXjzJim7S+jA1clc8R/ljGTBZFaWhVIUqJupj5ynAngeOW4OxECGZ fwIDAQABo2swaTBIBgNVHREEQTA/ghJpZHAudS1ib3JkZWF1eDIuZnKGKWh0dHBz Oi8vaWRwLnUtYm9yZGVhdXgyLmZyL2lkcC9zaGliYm9sZXRoMB0GA1UdDgQWBBQ3 TXyR0d3UvTuQcCnpnWw/mqJyzjANBgkqhkiG9w0BAQUFAAOCAQEAWYtEQih5OA9S Apst2Etm8TTDUAttPVxTPkTf263R/An4g8GLngITxCBE4zySoux8KbqPAhQDoFmT opRajsYbdzHdQJhNXegBeFbjdr3xaPgVq10mAGk0ZHzsdjivyW2XhSDnzXXn79Xa etxfQrJS7o3K992BFAeje6QvjLD3428BBLS6zxMapBPQi07Qufc7Jy7cSLI8xjAj xnCcpD6NEdTmHoD7i4krgmzByDoFLNCnAWQAvwze60yOwOaTZy1ccnKheRE/MGuZ CDJF+BVT5M2AwByRtc/852lumMNLljK4Jmg9SMPqvjKJUrg6xov89NVIF5I+vOBn fNrBEZFRlQ== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Bordeaux 2 - Victor Segalen Université de Bordeaux 2 - Victor Segalen http://unknown.site.com Laurent LAVAUD laurent.lavaud@u-bordeaux2.fr Doris CHAUVET doris.chauvet@u-bordeaux2.fr u-bordeaux3.fr MIIEmDCCA4CgAwIBAgIRAKs62Y2J5eDcqyyUHrEfgyAwDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0xMTAyMDcwMDAwMDBaFw0xNDAyMDYyMzU5NTlaMHAxCzAJBgNV BAYTAkZSMQ8wDQYDVQQHEwZQZXNzYWMxMzAxBgNVBAoMKlVuaXZlcnNpdMOpIE1p Y2hlbCBkZSBNb250YWlnbmUgQm9yZGVhdXggMzEbMBkGA1UEAxMSaWRwLnUtYm9y ZGVhdXgzLmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA06cj7R5h b59JKndjpvyOM/tO4BJLKtBVJuEGrhas6zMAnAkU9vpH2GkJh/uU++fEbkclKanU /Hn244CChidwJ5Ej/aTyEje8LU0kzYId6sS/K8E6g1LX5diumgjEvN61BsszXxfe jYlyzQIKYG10DyvCuNnFvJH9iWzCl38Fc2r0ej6RGCpOPsOmi9/5NCSmhD8u1mAA T3Tgf3XvVKUgG9dw+Rzh4EIry3KPoClfTtlxtCHMJdE27Vw0HYAdO+XEvcbolH3a hEMmVVHnsCsxFgJAv5JVyd1pSKPCzRJuvz1yUcl+4X9Jok691E86vi/dmxBHl/ht 3Nc1zYZka9F3RQIDAQABo4IBZTCCAWEwHwYDVR0jBBgwFoAUDL2TaAzz3qujSWsr N1dH6pDjue0wHQYDVR0OBBYEFIknA6wkBp4b8Nx3FFifFeFN+DjWMA4GA1UdDwEB /wQEAwIFoDAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEF BQcDAjAYBgNVHSAEETAPMA0GCysGAQQBsjEBAgIdMDoGA1UdHwQzMDEwL6AtoCuG KWh0dHA6Ly9jcmwudGNzLnRlcmVuYS5vcmcvVEVSRU5BU1NMQ0EuY3JsMG0GCCsG AQUFBwEBBGEwXzA1BggrBgEFBQcwAoYpaHR0cDovL2NydC50Y3MudGVyZW5hLm9y Zy9URVJFTkFTU0xDQS5jcnQwJgYIKwYBBQUHMAGGGmh0dHA6Ly9vY3NwLnRjcy50 ZXJlbmEub3JnMB0GA1UdEQQWMBSCEmlkcC51LWJvcmRlYXV4My5mcjANBgkqhkiG 9w0BAQUFAAOCAQEACMXkh+jjAg2Z44D2JTu/NIDaxQvFY/sFstQjxl0MzZnHZiww duiZMqm+iY2t7CdZn5BxGyLz8lDU+mNGIDXoFItcb4L54gPErZgo1SonS8+0ZRGN TB/ARen8JkDB5/MfK89GqI28peNzhSgG0dZZ9oobS9+8DLKYDhF2ht7koerST9mx gVC+nRUjaghxZDhcjwtJ5tf9EEahmjlZziwCsByd6rFvU4x1oFvtbaIKMtu1LWKT p6/j/WIKayaCCXh5exdW3B/vGGd36UbwBJfFs3lfBJ+7tKS2yZgsC/8LmPvXVT1A VWvDVq1DTU5MThOZ26w68xDGZ+qtTUt7knXeEA== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Bordeaux 3 Université de Bordeaux 3 http://unknown.site.com Patrice Fortier reseau@u-bordeaux3.fr Antoine Couturié reseau@u-bordeaux3.fr u-bordeaux4.fr MIIEuDCCA6CgAwIBAgIQIPvovFYT4+5WFB2AZYrSqDANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTEwMDExMTAwMDAwMFoXDTEzMDExMDIzNTk1OVowgYoxCzAJBgNV BAYTAkZSMREwDwYDVQQHEwhCT1JERUFVWDFFMEMGA1UEChM8UE9MRSBSRUNIRVJD SEUgRU5TRUlHTkVNRU5UIFNVUEVSSUVVUiBVTklWRVJTSVRFIERFIEJPUkRFQVVY MSEwHwYDVQQDExhmZWRlcmF0aW9uLnUtYm9yZGVhdXguZnIwggEiMA0GCSqGSIb3 DQEBAQUAA4IBDwAwggEKAoIBAQDFSDl9LrEnlAs1uPzTLnmgVhQUKzmBs7+YbYZt hJlY4nN9w9NxgQVu00Na2yYhcZY9RBcBlyndSN0HOMHoEQD3R7pgcp/ODo+umOT+ byor8sZ6wZx4o2PNpqfWFLpw9Eln4bfOQuVn4QnzYw/c2LsPXiXrx0RujHnL8UTn 1mGfavNZjJdSGdUU5LC61BlZwgv+SkPT9r/IBKUr4K5tocg2l0ruQEzYZG1tAlBo n6ypqpo7kZnL0zD2+fAR/YSDhzy+27kiuZ2Y3zZj7IprD2dEvcaIKh90QYdqyO4r V1qLqvsTWMkAtCpPccpziv7dxuyQJdWGbQo0d0T+QuffN16DAgMBAAGjggFrMIIB ZzAfBgNVHSMEGDAWgBQMvZNoDPPeq6NJays3V0fqkOO57TAdBgNVHQ4EFgQUtXle xN1O2Q9MKCxQunNxy5rqFpEwDgYDVR0PAQH/BAQDAgWgMAwGA1UdEwEB/wQCMAAw HQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBgGA1UdIAQRMA8wDQYLKwYB BAGyMQECAh0wOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC50Y3MudGVyZW5h Lm9yZy9URVJFTkFTU0xDQS5jcmwwbQYIKwYBBQUHAQEEYTBfMDUGCCsGAQUFBzAC hilodHRwOi8vY3J0LnRjcy50ZXJlbmEub3JnL1RFUkVOQVNTTENBLmNydDAmBggr BgEFBQcwAYYaaHR0cDovL29jc3AudGNzLnRlcmVuYS5vcmcwIwYDVR0RBBwwGoIY ZmVkZXJhdGlvbi51LWJvcmRlYXV4LmZyMA0GCSqGSIb3DQEBBQUAA4IBAQCgrXKm bdosoVWgVH+DbeZb3fgEoYgcN4TihmGEC8BXBEGJSTYOUfU/A5761oK4QBqMFLLq l8t8AMp2xOklMJxgH5kPo9mb/kskBI8NjZQboJpWCzEpfdNoxkpO1toeTbt0pMb8 SrSx3qncBTBRLvDuc4ipmTc8viOuPtj78crtIy33UBgv7SofkP/j3E6wQLewscGR /SXC61l1WeokO978TNAdqBb40DwODKRl6XAMr+DicGGoItnv85k/F7MVohjQqSqR O5GteCX6/KLs+CMntVAHxwMMbk20O1Vcg1uGKK9M9xvn0QEZaMdN9XS3whKmNsZC VKyEuRVukxe8vA2d MIIELDCCAxSgAwIBAgILAQAAAAABGgGKLagwDQYJKoZIhvcNAQEFBQAwXzELMAkG A1UEBhMCQkUxEzARBgNVBAoTCkN5YmVydHJ1c3QxFzAVBgNVBAsTDkVkdWNhdGlv bmFsIENBMSIwIAYDVQQDExlDeWJlcnRydXN0IEVkdWNhdGlvbmFsIENBMB4XDTA4 MDUxOTE0MTY0MFoXDTExMDUxOTE0MTY0MFowUzELMAkGA1UEBhMCRlIxITAfBgNV BAoTGFVuaXZlcnNpdGUgZGUgQm9yZGVhdXggSTEhMB8GA1UEAxMYZmVkZXJhdGlv bi51LWJvcmRlYXV4LmZyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDBXbfu j9ECYz1i9mB1ngG+owir54YduGNtw7+H5N8zXJ0eGnBJ46ckksm5fKk7Mbqw7fpy HxIkIcse78NBDPby+7szRy6to+LrEWLEQ4HZsuhBvN+k3WMbTsOysnWiYqhok4HT 0gD5aGmW4f+vGHp8dIzP/zy8A+Kh3VST3giAHQIDAQABo4IBdzCCAXMwUAYDVR0g BEkwRzBFBgcqhkixPgEAMDowOAYIKwYBBQUHAgEWLGh0dHA6Ly93d3cuZ2xvYmFs c2lnbi5uZXQvcmVwb3NpdG9yeS9jcHMuY2ZtMA4GA1UdDwEB/wQEAwIFoDAfBgNV HSMEGDAWgBRlZaM91zsRowoHJTfJQkpbdndQ4TAdBgNVHQ4EFgQUzUMWQ1mtrjc1 slM6B/4/w0r3aWswOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC5nbG9iYWxz aWduLm5ldC9lZHVjYXRpb25hbC5jcmwwTwYIKwYBBQUHAQEEQzBBMD8GCCsGAQUF BzAChjNodHRwOi8vc2VjdXJlLmdsb2JhbHNpZ24ubmV0L2NhY2VydC9lZHVjYXRp b25hbC5jcnQwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMCMGA1UdEQQc MBqCGGZlZGVyYXRpb24udS1ib3JkZWF1eC5mcjANBgkqhkiG9w0BAQUFAAOCAQEA PE0zsF/dzWiL+cDDZYKUpOh/hQjXx0pO6Aqpi3vW2N6S+FR5bm+jKI6C7fAYylOJ Rd4ZEMRjbCj6ttLlh0JHfr0fL+T4UhM8A2wJxIglMotc/bExITkGSbggtH6q8K2R tspC1yMPGzSdBCNMdAStJpvY9F8m9qcGioONc4aIcDOhr9WLGt9qlqXki2Faz+Yk qfeKlgSHRs/2w95X2X5ZYewPGZQRbrozPO6E8sYyD8PDHPRvYdemWBchBAg5vXHx BLp1hVyPYOp2E2ciIAxni5cb4RwWUEmud+VI8a8V6Q+HQNPFIEfcNO7azovMdh/K DwR9zqqffVjNz5LbLeGi7g== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Bordeaux IV - Montesquieu Université de Bordeaux IV - Montesquieu http://unknown.site.com Coussy Hélène ssr@univ-bordeaux.fr Facq Laurent ssr@univ-bordeaux.fr univ-brest.fr MIIDTzCCAjegAwIBAgIUcGVhc58lBOziviLuEFA04RVPhjAwDQYJKoZIhvcNAQEF BQAwJDEiMCAGA1UEAxMZZmVkZXJhdGlvbjIudW5pdi1icmVzdC5mcjAeFw0wOTAy MDUxMTUxNDFaFw0yOTAyMDUxMTUxNDFaMCQxIjAgBgNVBAMTGWZlZGVyYXRpb24y LnVuaXYtYnJlc3QuZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCW RzPe3Vq2lpziOaEyUzKIEfjZXr23PfYVy/rwvT64y+Zk+eKNvgjWHMpSqbuX7nqx /2q5G/mox/pk1xaG0iZlsVu97qoUlSJ+POQCp8dAIJNKYpP/vFGUW1RTdE9vzACT U8NRNgZz1Df1e/SwwDUyFOfU58xEgsSUhgxc1skKCvJSpkTH8aDavnVvbKGv08Dr cjvKakemcoPeil5fV40/REHDGHHLtFgE/k8wHIvtRxw+UZ3qF/Pwss1Yvszph5aU b2f/nP9KL6cCIwomwrJYZcQ/llP+ksuwjum6m0V/H0wQYL+EkebIFh1M055RdpAP ilBFaCiL5geQo0RSBrqhAgMBAAGjeTB3MFYGA1UdEQRPME2CGWZlZGVyYXRpb24y LnVuaXYtYnJlc3QuZnKGMGh0dHBzOi8vZmVkZXJhdGlvbjIudW5pdi1icmVzdC5m ci9pZHAvc2hpYmJvbGV0aDAdBgNVHQ4EFgQUbnsYQCi+qnK7dB3sTYe7ArIKwlQw DQYJKoZIhvcNAQEFBQADggEBAIHQBrg0VjCQ1ApOWOBpOVDujQHG7/+oazQ/kJWA YxWZCLCzg5yW74ut1rxxwYlSN/c3ZYU5paZRUeok61SiCNs0ggzqEy6pYt4yJqCu gdmhUHokWFzxzReL34u+XCXzZjd/g52B3DDvHU8OLKzOqc7EXppiuFLh2hRjffjX XIZgjVVgHmtDcih29YmV+LcRlQrHpze8o976ovyXcM/katGaUei8OHAy8LJh7cvu 9Xvuti2J+axxQXdzeUa4KIQ8Gi7EUEEwQ5PVGE/T0AP/fSWlCHuQWk+y9wESI1NL dZkkc0h92MuezOhzNpM1FfXU/7Zb8eYTeQZbOUQhqiLTogg= urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient univ-brest.fr MIIDTzCCAjegAwIBAgIUcGVhc58lBOziviLuEFA04RVPhjAwDQYJKoZIhvcNAQEF BQAwJDEiMCAGA1UEAxMZZmVkZXJhdGlvbjIudW5pdi1icmVzdC5mcjAeFw0wOTAy MDUxMTUxNDFaFw0yOTAyMDUxMTUxNDFaMCQxIjAgBgNVBAMTGWZlZGVyYXRpb24y LnVuaXYtYnJlc3QuZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCW RzPe3Vq2lpziOaEyUzKIEfjZXr23PfYVy/rwvT64y+Zk+eKNvgjWHMpSqbuX7nqx /2q5G/mox/pk1xaG0iZlsVu97qoUlSJ+POQCp8dAIJNKYpP/vFGUW1RTdE9vzACT U8NRNgZz1Df1e/SwwDUyFOfU58xEgsSUhgxc1skKCvJSpkTH8aDavnVvbKGv08Dr cjvKakemcoPeil5fV40/REHDGHHLtFgE/k8wHIvtRxw+UZ3qF/Pwss1Yvszph5aU b2f/nP9KL6cCIwomwrJYZcQ/llP+ksuwjum6m0V/H0wQYL+EkebIFh1M055RdpAP ilBFaCiL5geQo0RSBrqhAgMBAAGjeTB3MFYGA1UdEQRPME2CGWZlZGVyYXRpb24y LnVuaXYtYnJlc3QuZnKGMGh0dHBzOi8vZmVkZXJhdGlvbjIudW5pdi1icmVzdC5m ci9pZHAvc2hpYmJvbGV0aDAdBgNVHQ4EFgQUbnsYQCi+qnK7dB3sTYe7ArIKwlQw DQYJKoZIhvcNAQEFBQADggEBAIHQBrg0VjCQ1ApOWOBpOVDujQHG7/+oazQ/kJWA YxWZCLCzg5yW74ut1rxxwYlSN/c3ZYU5paZRUeok61SiCNs0ggzqEy6pYt4yJqCu gdmhUHokWFzxzReL34u+XCXzZjd/g52B3DDvHU8OLKzOqc7EXppiuFLh2hRjffjX XIZgjVVgHmtDcih29YmV+LcRlQrHpze8o976ovyXcM/katGaUei8OHAy8LJh7cvu 9Xvuti2J+axxQXdzeUa4KIQ8Gi7EUEEwQ5PVGE/T0AP/fSWlCHuQWk+y9wESI1NL dZkkc0h92MuezOhzNpM1FfXU/7Zb8eYTeQZbOUQhqiLTogg= urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Bretagne Occidentale Université de Bretagne Occidentale http://unknown.site.com Villeneuve federation@univ-brest.fr Moulard federation@univ-brest.fr MIIEcDCCA1igAwIBAgICCygwDQYJKoZIhvcNAQEEBQAwUDELMAkGA1UEBhMCRlIx DDAKBgNVBAoTA0NSVTETMBEGA1UEAxMKYWMtc2VydmV1cjEeMBwGCSqGSIb3DQEJ ARYPY2EtYWRtaW5AY3J1LmZyMB4XDTA2MDkyNjEzMzUzOVoXDTA5MDkyNjEzMzUz OVowbzELMAkGA1UEBhMCRlIxETAPBgNVBAoTCDAyOTAzNDZVMR8wHQYDVQQDExZu b2NhdHNydi51bml2LWJyZXN0LmZyMSwwKgYJKoZIhvcNAQkBFh1hbGFpbi5jb3Vz dGFuY2VAdW5pdi1icmVzdC5mcjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA 0gIUk6nNBzFsuh49eDqtvqktnCbq49+2UykU+RigpejPP82geuz5hlUU0IvTOmbk VTRuRsycEOJS2sUjNvCrPEYclxKQINdwK8qX8Qe5y6tknlQHc9A7RbpR0zR6dg/p YJlPUvnKN7klmf0i1V0Iv+4omoWzM4DGd0RyShqKDSsCAwEAAaOCAbcwggGzMAwG A1UdEwEB/wQCMAAwEQYJYIZIAYb4QgEBBAQDAgbAMA4GA1UdDwEB/wQEAwIF4DAs BglghkgBhvhCAQ0EHxYdQ2VydGlmaWNhdCBzZXJ2ZXVyIGFjLXNlcnZldXIwHQYD VR0OBBYEFMf8vCQ1thQ6acloqfXk4DwW2VebMHcGA1UdIwRwMG6AFHEHPwe06X/O MwVoBPI0plC+rPagoVOkUTBPMQswCQYDVQQGEwJGUjEMMAoGA1UEChMDQ1JVMRIw EAYDVQQDEwlhYy1yYWNpbmUxHjAcBgkqhkiG9w0BCQEWD2NhLWFkbWluQGNydS5m coIBAzBLBgNVHR8ERDBCMECgPqA8hjpodHRwOi8vaWdjLmNydS5mci9jZ2ktYmlu L2xvYWRjcmw/Q0E9YWMtc2VydmV1ciZmb3JtYXQ9REVSMB0GA1UdJQQWMBQGCCsG AQUFBwMBBggrBgEFBQcDAjBOBgNVHSAERzBFMEMGDikDBgEEAAG3XwMBBAAEMDEw LwYIKwYBBQUHAgEWI2h0dHA6Ly9pZ2MuY3J1LmZyL3JlZmVyZW5jZXMvcGMucGRm MA0GCSqGSIb3DQEBBAUAA4IBAQCz/BgNfSBYrS3nVz8RWgiFNZgm7wfEWJJ2eemr rPfDSkl4Decrgp+1Ris3or/6dWD2uPtuI4KuXxsi+6BdLtEDhsPc6exHYmKrMIN0 qU5S8+nBS8HtlEXFZ9hH45S7ZeEtudZswjSAhxZVPTD0zs+pyobgjGH19XUT9DzG XM8bCEW/Y9qsKon7Yq6uKb+w3p3EHNuP8iOauP9Q3g4isWkd8OvQp1Df4+0zByA1 TehvA+fjv9k3pjUJNlYyO20zyqyHPPV6HYWjHvLo5Tmvb34iB210s2VZJVWQtpaN pJcxkvtocpq0JMwi911n/lvt0loDL8L9tSbb1RTS8vx8AHyx MIIEcDCCA1igAwIBAgICCygwDQYJKoZIhvcNAQEEBQAwUDELMAkGA1UEBhMCRlIx DDAKBgNVBAoTA0NSVTETMBEGA1UEAxMKYWMtc2VydmV1cjEeMBwGCSqGSIb3DQEJ ARYPY2EtYWRtaW5AY3J1LmZyMB4XDTA2MDkyNjEzMzUzOVoXDTA5MDkyNjEzMzUz OVowbzELMAkGA1UEBhMCRlIxETAPBgNVBAoTCDAyOTAzNDZVMR8wHQYDVQQDExZu b2NhdHNydi51bml2LWJyZXN0LmZyMSwwKgYJKoZIhvcNAQkBFh1hbGFpbi5jb3Vz dGFuY2VAdW5pdi1icmVzdC5mcjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA 0gIUk6nNBzFsuh49eDqtvqktnCbq49+2UykU+RigpejPP82geuz5hlUU0IvTOmbk VTRuRsycEOJS2sUjNvCrPEYclxKQINdwK8qX8Qe5y6tknlQHc9A7RbpR0zR6dg/p YJlPUvnKN7klmf0i1V0Iv+4omoWzM4DGd0RyShqKDSsCAwEAAaOCAbcwggGzMAwG A1UdEwEB/wQCMAAwEQYJYIZIAYb4QgEBBAQDAgbAMA4GA1UdDwEB/wQEAwIF4DAs BglghkgBhvhCAQ0EHxYdQ2VydGlmaWNhdCBzZXJ2ZXVyIGFjLXNlcnZldXIwHQYD VR0OBBYEFMf8vCQ1thQ6acloqfXk4DwW2VebMHcGA1UdIwRwMG6AFHEHPwe06X/O MwVoBPI0plC+rPagoVOkUTBPMQswCQYDVQQGEwJGUjEMMAoGA1UEChMDQ1JVMRIw EAYDVQQDEwlhYy1yYWNpbmUxHjAcBgkqhkiG9w0BCQEWD2NhLWFkbWluQGNydS5m coIBAzBLBgNVHR8ERDBCMECgPqA8hjpodHRwOi8vaWdjLmNydS5mci9jZ2ktYmlu L2xvYWRjcmw/Q0E9YWMtc2VydmV1ciZmb3JtYXQ9REVSMB0GA1UdJQQWMBQGCCsG AQUFBwMBBggrBgEFBQcDAjBOBgNVHSAERzBFMEMGDikDBgEEAAG3XwMBBAAEMDEw LwYIKwYBBQUHAgEWI2h0dHA6Ly9pZ2MuY3J1LmZyL3JlZmVyZW5jZXMvcGMucGRm MA0GCSqGSIb3DQEBBAUAA4IBAQCz/BgNfSBYrS3nVz8RWgiFNZgm7wfEWJJ2eemr rPfDSkl4Decrgp+1Ris3or/6dWD2uPtuI4KuXxsi+6BdLtEDhsPc6exHYmKrMIN0 qU5S8+nBS8HtlEXFZ9hH45S7ZeEtudZswjSAhxZVPTD0zs+pyobgjGH19XUT9DzG XM8bCEW/Y9qsKon7Yq6uKb+w3p3EHNuP8iOauP9Q3g4isWkd8OvQp1Df4+0zByA1 TehvA+fjv9k3pjUJNlYyO20zyqyHPPV6HYWjHvLo5Tmvb34iB210s2VZJVWQtpaN pJcxkvtocpq0JMwi911n/lvt0loDL8L9tSbb1RTS8vx8AHyx urn:mace:shibboleth:1.0:nameIdentifier Villeneuve shibboleth@univ-brest.fr Moulard federation@univ-brest.fr univ-ubs.fr MIIDJzCCAg+gAwIBAgIUQf+bgYI+pflZTXe6Sw+Ijq7sDuwwDQYJKoZIhvcNAQEF BQAwGjEYMBYGA1UEAxMPaWRwLnVuaXYtdWJzLmZyMB4XDTA5MDMyNjA5MzUxM1oX DTI5MDMyNjA4MzUxM1owGjEYMBYGA1UEAxMPaWRwLnVuaXYtdWJzLmZyMIIBIjAN BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzjVVD6f/m26YrFIXqyAhIIZOl5Jy KT/06NrJReinTL27+4mGRcK2Hy3CN412n3FLUlSra1E+1KtgdSXLGH0aipopxsF1 4tNnr7XUGzX3jYLwEf9JAvMjkrmfg6XV+tRM0aEVhbk6T/0kSUVSu0OuY1OtnWMX tEOI5lxBIFiiF2IjkzXfT3IXtn43BLurAtwGEjVcU/h9p4XKAv1vXDnSZIYMV68h Rfnt37Jbk4MOZC5G/b6ruegAWylpZ6/xd3eToWiTf6jf7cTL1rvVCBshyumkgF1z GUzmsUPIieAO2K1cAj6YSYO39Ya+TSpwmeGHfHU2ptmm0Pg+3FgVcQd0vQIDAQAB o2UwYzBCBgNVHREEOzA5gg9pZHAudW5pdi11YnMuZnKGJmh0dHBzOi8vaWRwLnVu aXYtdWJzLmZyL2lkcC9zaGliYm9sZXRoMB0GA1UdDgQWBBRJzRQHNoeR8yfWTVGV cZxCUNFlVTANBgkqhkiG9w0BAQUFAAOCAQEAoKKviDAjDppeG/HLfBnHEGk3huwy QS7vwSXR8iQCkJeFzYJbQNW3C0pZ3gbTjXEwR8a7zyLm08LNTJy1b03oHEZvLf+5 ozxzL0Sj0L8eH/Edra2le2VYp7OpAIKXbktQ7tov7OrNjwvnEThp4emd6ffMNKBy tuagpJOU3yH1CJ1aV9Za1cvobQJryWlwGgvw2Z2ALFs5/BT435lBJbMjuNAR9mC8 GKrzVJxuCZuaFkCNIGIA2lPmHA755Vf5rKi2/4A+qBzN9XJc1RBzTlg9PF1WQzb3 KsqVsaQhhLja8zwz5NlpcXN89WMIL/Bg6T3t5KN4ajbKbWxX/7uMAVsEUw== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Bretagne Sud Université de Bretagne Sud http://unknown.site.com Gwendal Le Fol fed-admin@univ-ubs.fr MIIC2DCCAkGgAwIBAgIJAJmtFlLp56iGMA0GCSqGSIb3DQEBBQUAMFIxCzAJBgNV BAYTAkZSMSMwIQYDVQQKExpVbml2ZXJzaXRlIGRlIEJyZXRhZ25lIFN1ZDEeMBwG A1UEAxMVY2FycmVmb3VyLnVuaXYtdWJzLmZyMB4XDTA5MDUyMjE1MjIwN1oXDTI5 MDUxNzE1MjIwN1owUjELMAkGA1UEBhMCRlIxIzAhBgNVBAoTGlVuaXZlcnNpdGUg ZGUgQnJldGFnbmUgU3VkMR4wHAYDVQQDExVjYXJyZWZvdXIudW5pdi11YnMuZnIw gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAPP0h6T6p/RW1lClsmcFselX1dm/ yzlhtQvxV1/893ro9skaIqfnhc1EhKuGmhy6ryQk2hBARilrYxHpEf8t3iN9UhuX 67qv4s9eDhJbimsIWUOXxNA7SglSg2+S6eR+DayozRwhpIbDyE/TKWejsE/+qk7z /kLMlAc/hNkbfWjfAgMBAAGjgbUwgbIwHQYDVR0OBBYEFF97Xeccrsdt4l2xf2fD Hu5QIjkXMIGCBgNVHSMEezB5gBRfe13nHK7HbeJdsX9nwx7uUCI5F6FWpFQwUjEL MAkGA1UEBhMCRlIxIzAhBgNVBAoTGlVuaXZlcnNpdGUgZGUgQnJldGFnbmUgU3Vk MR4wHAYDVQQDExVjYXJyZWZvdXIudW5pdi11YnMuZnKCCQCZrRZS6eeohjAMBgNV HRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBAJ24hw9K/vW/T5TPCWooqVdJLRae 0aUxzNrpIarPSzqcmw3rs5ZW8ilFvSt27CywQvPainvdekp+OJxYtFaoDrxFJ4+x oTjZH8bZo6wSlX5c7Dwn1R2IYFA7iIqZeJch3ArpijbcMplZ4i644QJ2Qjd7CMeE vTJ7qFg3CQTYFbUd MIIC2DCCAkGgAwIBAgIJAJmtFlLp56iGMA0GCSqGSIb3DQEBBQUAMFIxCzAJBgNV BAYTAkZSMSMwIQYDVQQKExpVbml2ZXJzaXRlIGRlIEJyZXRhZ25lIFN1ZDEeMBwG A1UEAxMVY2FycmVmb3VyLnVuaXYtdWJzLmZyMB4XDTA5MDUyMjE1MjIwN1oXDTI5 MDUxNzE1MjIwN1owUjELMAkGA1UEBhMCRlIxIzAhBgNVBAoTGlVuaXZlcnNpdGUg ZGUgQnJldGFnbmUgU3VkMR4wHAYDVQQDExVjYXJyZWZvdXIudW5pdi11YnMuZnIw gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAPP0h6T6p/RW1lClsmcFselX1dm/ yzlhtQvxV1/893ro9skaIqfnhc1EhKuGmhy6ryQk2hBARilrYxHpEf8t3iN9UhuX 67qv4s9eDhJbimsIWUOXxNA7SglSg2+S6eR+DayozRwhpIbDyE/TKWejsE/+qk7z /kLMlAc/hNkbfWjfAgMBAAGjgbUwgbIwHQYDVR0OBBYEFF97Xeccrsdt4l2xf2fD Hu5QIjkXMIGCBgNVHSMEezB5gBRfe13nHK7HbeJdsX9nwx7uUCI5F6FWpFQwUjEL MAkGA1UEBhMCRlIxIzAhBgNVBAoTGlVuaXZlcnNpdGUgZGUgQnJldGFnbmUgU3Vk MR4wHAYDVQQDExVjYXJyZWZvdXIudW5pdi11YnMuZnKCCQCZrRZS6eeohjAMBgNV HRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBAJ24hw9K/vW/T5TPCWooqVdJLRae 0aUxzNrpIarPSzqcmw3rs5ZW8ilFvSt27CywQvPainvdekp+OJxYtFaoDrxFJ4+x oTjZH8bZo6wSlX5c7Dwn1R2IYFA7iIqZeJch3ArpijbcMplZ4i644QJ2Qjd7CMeE vTJ7qFg3CQTYFbUd urn:mace:shibboleth:1.0:nameIdentifier Gwendal Le Fol fed-admin@univ-ubs.fr unicaen.fr MIIDJDCCAgygAwIBAgIVALLJNRifsaDgq9SZsGgf6vqdEpntMA0GCSqGSIb3DQEB BQUAMBkxFzAVBgNVBAMTDmlkcC51bmljYWVuLmZyMB4XDTA5MDcyNzEzNDMxMFoX DTI5MDcyNzEzNDMxMFowGTEXMBUGA1UEAxMOaWRwLnVuaWNhZW4uZnIwggEiMA0G CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCE/YcYohNvzICcNO78kljWYODlicgW xGoXBtCNtVN3z2E0S58zQdfGDelCvCgmRECKjeHEUJPCj0Ruarg9q9eqcOz44/9D CBZo2uLuNPURnaUeEPt502EPhSXPercAJVjmks7CeqbrA9192EnGWYe8hv5ZqY7d oanvW63YYzwIUtyYShUND7TgZFL6GD08o9prPZrBltL+fuodwXI+aFT5XIX25Su1 FC67/8WU9jbWb4WiIZZnHD6cQDpkhfMTUAmVtZ7sj+qqueCixP0yMTbLpQCisAIP p2mqjC3j5i4ZHm++lrjhtfKOE8emD8V41e7z++Hb/ho95hNl5qOD7MP1AgMBAAGj YzBhMEAGA1UdEQQ5MDeCDmlkcC51bmljYWVuLmZyhiVodHRwczovL2lkcC51bmlj YWVuLmZyL2lkcC9zaGliYm9sZXRoMB0GA1UdDgQWBBTBGIdWisheOftwSUFEzpIO Sm4I9jANBgkqhkiG9w0BAQUFAAOCAQEADIDOox8I0gRyY3uetAbe1n2Kfy/pxsQZ Nr4Tn90NUMG8i2mp7KVoMuBhmJS5/BHJPdHNMprB6PjzlTDiriNxdl3NPSASUq7D E5oMcyemphYHMxcKvXDXif/uRX/dOmRZy77Wt3yjkQjy/Md/fmOYrxd8yKptnhpp sjYkdQpopHxBW3npgmOSS1/5X7qy1di8ckgLfEs7u3qfOZfw6i+nn1/98CjMKlv7 TRVhM943X1kgV4l/lvaMWsPxvgTT8RRvaoAYClmyg6XLbdFC5QQUCjVCPldcbeIY IsKc8ui7+rEvhoAKrdmvAPrxTSfN8KMFQ3tbQDz2E3YzAELQD+4zWg== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Caen - Basse Normandie Université de Caen - Basse Normandie http://unknown.site.com Nicolas HEURTEL nicolas.heurtel@unicaen.fr David SURVILLE david.surville@unicaen.fr u-cergy.fr MIIDJDCCAgygAwIBAgIVAL5VX/FyJxE+QaVPYflgTRs+IqDyMA0GCSqGSIb3DQEB BQUAMBkxFzAVBgNVBAMTDmlkcC51LWNlcmd5LmZyMB4XDTA5MTEyMDE1MTIyNVoX DTI5MTEyMDE1MTIyNVowGTEXMBUGA1UEAxMOaWRwLnUtY2VyZ3kuZnIwggEiMA0G CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7KhqnXYp0okpZLWhOZfE0/a6hGLOB 08hVe7wynrKu5rBBXl290/67ral6I2o2Vb2moNpJ+/4Jfoq/dS6pJqGsAQAIIiuJ B7Cg1OI0xFSBCNlOw7Pl8790IeX+hDxwlmFCiedz8yU4QaqDypmr8minfUIrcLjE Q18eRsHCkRI9yHm6CzZ9qyX9I3pHvkYYwjrOcZ3MR4aWzG+c5IT73Th8SL0Wy6xF 8BKsR5QFb2Lu4lbcIr3PQCmUTetj/4BbOucZG3s1T9T16I5jqLhfraAxkl6rlV5o dRN32vJqMIHWTHBt01SK1h0ox1vfClR86QGFsJDerIy3TRd9AvNwBLkFAgMBAAGj YzBhMEAGA1UdEQQ5MDeCDmlkcC51LWNlcmd5LmZyhiVodHRwczovL2lkcC51LWNl cmd5LmZyL2lkcC9zaGliYm9sZXRoMB0GA1UdDgQWBBSRFHgF1B3bXQf6voF95osf xbAbhDANBgkqhkiG9w0BAQUFAAOCAQEAtiS/TRfjM8+Ush2VSL/y73Qk6FSExEjQ ZEFb5YmXCwpnAmrzKTlTVDhaDyYPB5vMQf0PWN8MB1fOy9J7fnN1ENr0oUVwpgkZ 88THCKybJbsY2NHhxSGVRIkxuIAKh1ofvR3A/9vwteGkzCZYTVloqUR85CBD2qWq zE7fqzssOVC0HYf0fuvZyEV1ix45zxhCVtuSjL/39ttUDNcAe0hbc4J+XdtseBXE +aj1Ghr+XBI3dG4FUhea8Ic6pTg3BPgSdEZVq2xumojU8lKa+1LzF4IY6YKATkz8 o7TC7JeLaEP9IIl444TjCDusYcOd5ESjG4zw6KiQaO9Jpp2jOL/jMg== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Cergy Pontoise Université de Cergy Pontoise http://unknown.site.com Stéphane Patureau Stephane.Patureau@u-cergy.fr Jean-Michel Doublet Jean-Michel.Doublet@u-paris10.fr u-clermont1.fr MIIDMzCCAhugAwIBAgIUNwZDNaZ3tdkFE1H1v5fQOZ0h7xIwDQYJKoZIhvcNAQEF BQAwHTEbMBkGA1UEAxMSaWRwLnUtY2xlcm1vbnQxLmZyMB4XDTA4MTEyNjA4MjQy OFoXDTI4MTEyNjA4MjQyOFowHTEbMBkGA1UEAxMSaWRwLnUtY2xlcm1vbnQxLmZy MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoz9+2ei+Cj+D9fmqSgXV iDUF2Fv9KCEoRmxpIVmQJExVgGpBPzAToKzPu6vP0UXnJTItEGq0cQiOZvdkiwjb i9lYCJTzp6NA8kSjfI0F7/U3DMAOaqBMIv5NaLkZTH+6YPAqMOBQOb1oBs4YsjW+ elFvesreBaPmbSotHWCYgfnb29OLAg37CgAmqDjL7ymPAsE0tPgr9USyjtUhWXsI kz2A2OPd3Qy+EizPJevne5gNu/2nfa0RwxTUG7p9Q2FXhJj1Jg3Ijs0PwWpqSM/q qrmKActd9uzeHenor13kprK47Ep+K+xIV3CC0gFlRxbZohFrpqvXUun4Gyk3dOuq /QIDAQABo2swaTBIBgNVHREEQTA/ghJpZHAudS1jbGVybW9udDEuZnKGKWh0dHBz Oi8vaWRwLnUtY2xlcm1vbnQxLmZyL2lkcC9zaGliYm9sZXRoMB0GA1UdDgQWBBTP x7ipW2IlVbBux4f/glTdrZcq8zANBgkqhkiG9w0BAQUFAAOCAQEAAUqxVk6Dm5ZS jQl1fY+x4Qcc7kSE7vksmWNlhO5WC7NMftDOSzJaoyOlPlP15ONoSPaH/0R2rBRE FTvvQNQ7Mpckur1lnTFvLpkAaZ9YSe+wiksHeXQhxN8vb6PYT4Td1CS98efueae4 1bFIzour2gi4h4e86Zgv18YAr5eBmp38mYYOghxwk67uVdwU2trVIi2EjSbE4AWL +tu/H6jCK1dMSPCt0UZnv0jSOGU+eCtDPOhD2P/338GEPw2NfwpB85TlGIOf5u0a KmDbVb0p+dFwUH3zICKCDJM7OBcUNDM/fcHMBWJ64r17AiGtdZ5Cj0dZQt4ClMC9 Mcelq5/l9A== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient u-clermont1.fr MIIDMzCCAhugAwIBAgIUNwZDNaZ3tdkFE1H1v5fQOZ0h7xIwDQYJKoZIhvcNAQEF BQAwHTEbMBkGA1UEAxMSaWRwLnUtY2xlcm1vbnQxLmZyMB4XDTA4MTEyNjA4MjQy OFoXDTI4MTEyNjA4MjQyOFowHTEbMBkGA1UEAxMSaWRwLnUtY2xlcm1vbnQxLmZy MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoz9+2ei+Cj+D9fmqSgXV iDUF2Fv9KCEoRmxpIVmQJExVgGpBPzAToKzPu6vP0UXnJTItEGq0cQiOZvdkiwjb i9lYCJTzp6NA8kSjfI0F7/U3DMAOaqBMIv5NaLkZTH+6YPAqMOBQOb1oBs4YsjW+ elFvesreBaPmbSotHWCYgfnb29OLAg37CgAmqDjL7ymPAsE0tPgr9USyjtUhWXsI kz2A2OPd3Qy+EizPJevne5gNu/2nfa0RwxTUG7p9Q2FXhJj1Jg3Ijs0PwWpqSM/q qrmKActd9uzeHenor13kprK47Ep+K+xIV3CC0gFlRxbZohFrpqvXUun4Gyk3dOuq /QIDAQABo2swaTBIBgNVHREEQTA/ghJpZHAudS1jbGVybW9udDEuZnKGKWh0dHBz Oi8vaWRwLnUtY2xlcm1vbnQxLmZyL2lkcC9zaGliYm9sZXRoMB0GA1UdDgQWBBTP x7ipW2IlVbBux4f/glTdrZcq8zANBgkqhkiG9w0BAQUFAAOCAQEAAUqxVk6Dm5ZS jQl1fY+x4Qcc7kSE7vksmWNlhO5WC7NMftDOSzJaoyOlPlP15ONoSPaH/0R2rBRE FTvvQNQ7Mpckur1lnTFvLpkAaZ9YSe+wiksHeXQhxN8vb6PYT4Td1CS98efueae4 1bFIzour2gi4h4e86Zgv18YAr5eBmp38mYYOghxwk67uVdwU2trVIi2EjSbE4AWL +tu/H6jCK1dMSPCt0UZnv0jSOGU+eCtDPOhD2P/338GEPw2NfwpB85TlGIOf5u0a KmDbVb0p+dFwUH3zICKCDJM7OBcUNDM/fcHMBWJ64r17AiGtdZ5Cj0dZQt4ClMC9 Mcelq5/l9A== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Clermont Ferrand 1 - Auvergne Université de Clermont Ferrand 1 - Auvergne http://unknown.site.com Touraille Eric Fed-Admin@u-clermont1.fr Pays Denis Fed-Admin@u-clermont1.fr univ-bpclermont.fr MIIDQzCCAiugAwIBAgIUf8Tye3TWDTMkKybmr2WCtI8Rg7gwDQYJKoZIhvcNAQEF BQAwITEfMB0GA1UEAxMWaWRwLnVuaXYtYnBjbGVybW9udC5mcjAeFw0wODExMjUx MzE4MDlaFw0yODExMjUxMzE4MDlaMCExHzAdBgNVBAMTFmlkcC51bml2LWJwY2xl cm1vbnQuZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCgq4L+M8Cr xnSB7fZmGR8wgCnDx6DxFJqAwk45muj/RFAijOjAM9i2iUmjBhpAQjatnybBaGk4 xjLD/TbzQzpXZMzqLpRYgmvqLQ7RG6PabpLDWz+s/oneLFWtvCzFmyRQXe72Kum5 FCeG5Jz9uDniAwdv2u5dG82mr+nO7wP+95GwlcYzs9bVfJZ3L0vBZ0wu4bqAIHAQ +PMX0FVX/2bmqBWjP1XaJjqIk0UnQJ7//Ccg3y888MRyIcg2d8P4OiG4VvhUl7bL QygrvTr0yqrw2XFHdhMAwV7P39Y84+/rAFPg94iiSesPOzZmgv4YvGcsvLjIWwa8 Pi5gOMtJQXqFAgMBAAGjczBxMFAGA1UdEQRJMEeCFmlkcC51bml2LWJwY2xlcm1v bnQuZnKGLWh0dHBzOi8vaWRwLnVuaXYtYnBjbGVybW9udC5mci9pZHAvc2hpYmJv bGV0aDAdBgNVHQ4EFgQU9VjTe9bu+B0flgm74MpOhm2yVJYwDQYJKoZIhvcNAQEF BQADggEBADRoaAXNoIfymTDg2CETOFI/fhK8Sok1vAQo7PJjjeq2Pue965wgWT4Q sJxY9lQdPKlZRonso2ABtY0vNvlB2oQK5Trz8QckUp8MEXQhSDK2EyTc8/jXLae9 4jU4qjGrD4f6h177SSimK2tmesTRJ57EUZd/Mpoy/cpWMKfp9tx6Pe6w5MYVOSpk iqa6wc50EWUt8/EqtC3V45+jo/6mJx1ZPQI2uPP9BK1p+UdljUKZqmQa0ZZJ4IxW UP/k2YNC7B4piqvd0HLqVEDHQmmeiwSPLlFsGozwdYZ+FUuXzJoMguhu3KMw8qV4 P69e+LdcHzrBqln1xmrkY/MMjTqnJ3E= urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient univ-bpclermont.fr MIIDQzCCAiugAwIBAgIUf8Tye3TWDTMkKybmr2WCtI8Rg7gwDQYJKoZIhvcNAQEF BQAwITEfMB0GA1UEAxMWaWRwLnVuaXYtYnBjbGVybW9udC5mcjAeFw0wODExMjUx MzE4MDlaFw0yODExMjUxMzE4MDlaMCExHzAdBgNVBAMTFmlkcC51bml2LWJwY2xl cm1vbnQuZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCgq4L+M8Cr xnSB7fZmGR8wgCnDx6DxFJqAwk45muj/RFAijOjAM9i2iUmjBhpAQjatnybBaGk4 xjLD/TbzQzpXZMzqLpRYgmvqLQ7RG6PabpLDWz+s/oneLFWtvCzFmyRQXe72Kum5 FCeG5Jz9uDniAwdv2u5dG82mr+nO7wP+95GwlcYzs9bVfJZ3L0vBZ0wu4bqAIHAQ +PMX0FVX/2bmqBWjP1XaJjqIk0UnQJ7//Ccg3y888MRyIcg2d8P4OiG4VvhUl7bL QygrvTr0yqrw2XFHdhMAwV7P39Y84+/rAFPg94iiSesPOzZmgv4YvGcsvLjIWwa8 Pi5gOMtJQXqFAgMBAAGjczBxMFAGA1UdEQRJMEeCFmlkcC51bml2LWJwY2xlcm1v bnQuZnKGLWh0dHBzOi8vaWRwLnVuaXYtYnBjbGVybW9udC5mci9pZHAvc2hpYmJv bGV0aDAdBgNVHQ4EFgQU9VjTe9bu+B0flgm74MpOhm2yVJYwDQYJKoZIhvcNAQEF BQADggEBADRoaAXNoIfymTDg2CETOFI/fhK8Sok1vAQo7PJjjeq2Pue965wgWT4Q sJxY9lQdPKlZRonso2ABtY0vNvlB2oQK5Trz8QckUp8MEXQhSDK2EyTc8/jXLae9 4jU4qjGrD4f6h177SSimK2tmesTRJ57EUZd/Mpoy/cpWMKfp9tx6Pe6w5MYVOSpk iqa6wc50EWUt8/EqtC3V45+jo/6mJx1ZPQI2uPP9BK1p+UdljUKZqmQa0ZZJ4IxW UP/k2YNC7B4piqvd0HLqVEDHQmmeiwSPLlFsGozwdYZ+FUuXzJoMguhu3KMw8qV4 P69e+LdcHzrBqln1xmrkY/MMjTqnJ3E= urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Clermont-Ferrand 2 - Blaise Pascal Université de Clermont-Ferrand 2 - Blaise Pascal http://unknown.site.com Touraille Eric Fed-Admin@univ-bpclermont.fr Pays Denis Fed-Admin@univ-bpclermont.fr univ-corse.fr MIIDSzCCAjOgAwIBAgIUMl8XYihMN+c1fr7Z/kwhIqchZ14wDQYJKoZIhvcNAQEF BQAwIzEhMB8GA1UEAxMYc2hpYmJvbGV0aC51bml2LWNvcnNlLmZyMB4XDTEwMDUy MDA4MjIyOFoXDTMwMDUyMDA4MjIyOFowIzEhMB8GA1UEAxMYc2hpYmJvbGV0aC51 bml2LWNvcnNlLmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmBAW WcnpElNR57uUh2Eb7CEy5InpGkloYXu6jUpiZGV/vIM+dB0n2n/gWLLy5G2ME0Om clCBmVWG3uDMNZZyC6EBiEoBWbyj6Af93eEOscjfXXSMWgg0Atmyh84/HZWemhM3 od2NXDRgHRpJ8ZjZ0VcQE4YNjh7kk5yDaFIoHPqpVK5ItNpZfk1nQ6gYHTsuAe9z 6UDYE/fXOqF2+TO3Q+XG8+aRjcf0g+y2PaZnv8eSJGRYG3412oJEG4MggFmsAWkc lCLEiyMk325+7/8tKY5n/Rnd7jCuLEAqZMo2R/PlwbUO7kf5tcRoWaoKeBtjeweP LoIqXeXDkYQB93Q+MQIDAQABo3cwdTBUBgNVHREETTBLghhzaGliYm9sZXRoLnVu aXYtY29yc2UuZnKGL2h0dHBzOi8vc2hpYmJvbGV0aC51bml2LWNvcnNlLmZyL2lk cC9zaGliYm9sZXRoMB0GA1UdDgQWBBStZw7/ALbTOYIUU68SwgUXNM+5LTANBgkq hkiG9w0BAQUFAAOCAQEAjzOt2lHyqGXgYtxbu8D4aCdJfCgT9dKcN3zfZLJKUUBk w5QRiOoz4AKj/QWqYucmWu4KElu6J8GDKsAblw5IGkMto1Pf+hIogTgqSXaFd9/O tu/fwQ4sWsVZIl8MeC735h6C+NK4d3cCB+0fHRJFZ4mriZG9tGHmUHFB4rqn27JK nrsOwXXTta43x7OixVk4T30ALeIRWw9GjwssjHOBI6BvXI36tEM4mjdV6TBP13Qv ajnfP3xyXWF0/SRe0vvOEqDioR1lKpoeqvINaa5O4u60VsqOFPoZPmNxASoOnnz8 T9heLa0GVnNgDEgGzmeVmC1UCkmkhz0s325gEEfxAg== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient univ-corse.fr MIIDSzCCAjOgAwIBAgIUMl8XYihMN+c1fr7Z/kwhIqchZ14wDQYJKoZIhvcNAQEF BQAwIzEhMB8GA1UEAxMYc2hpYmJvbGV0aC51bml2LWNvcnNlLmZyMB4XDTEwMDUy MDA4MjIyOFoXDTMwMDUyMDA4MjIyOFowIzEhMB8GA1UEAxMYc2hpYmJvbGV0aC51 bml2LWNvcnNlLmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmBAW WcnpElNR57uUh2Eb7CEy5InpGkloYXu6jUpiZGV/vIM+dB0n2n/gWLLy5G2ME0Om clCBmVWG3uDMNZZyC6EBiEoBWbyj6Af93eEOscjfXXSMWgg0Atmyh84/HZWemhM3 od2NXDRgHRpJ8ZjZ0VcQE4YNjh7kk5yDaFIoHPqpVK5ItNpZfk1nQ6gYHTsuAe9z 6UDYE/fXOqF2+TO3Q+XG8+aRjcf0g+y2PaZnv8eSJGRYG3412oJEG4MggFmsAWkc lCLEiyMk325+7/8tKY5n/Rnd7jCuLEAqZMo2R/PlwbUO7kf5tcRoWaoKeBtjeweP LoIqXeXDkYQB93Q+MQIDAQABo3cwdTBUBgNVHREETTBLghhzaGliYm9sZXRoLnVu aXYtY29yc2UuZnKGL2h0dHBzOi8vc2hpYmJvbGV0aC51bml2LWNvcnNlLmZyL2lk cC9zaGliYm9sZXRoMB0GA1UdDgQWBBStZw7/ALbTOYIUU68SwgUXNM+5LTANBgkq hkiG9w0BAQUFAAOCAQEAjzOt2lHyqGXgYtxbu8D4aCdJfCgT9dKcN3zfZLJKUUBk w5QRiOoz4AKj/QWqYucmWu4KElu6J8GDKsAblw5IGkMto1Pf+hIogTgqSXaFd9/O tu/fwQ4sWsVZIl8MeC735h6C+NK4d3cCB+0fHRJFZ4mriZG9tGHmUHFB4rqn27JK nrsOwXXTta43x7OixVk4T30ALeIRWw9GjwssjHOBI6BvXI36tEM4mjdV6TBP13Qv ajnfP3xyXWF0/SRe0vvOEqDioR1lKpoeqvINaa5O4u60VsqOFPoZPmNxASoOnnz8 T9heLa0GVnNgDEgGzmeVmC1UCkmkhz0s325gEEfxAg== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Corse Université de Corse http://unknown.site.com VAREILLE vareille@univ-corse.fr univ-fcomte.fr MIIDMzCCAhugAwIBAgIUW6mVllZscKchJexSqcEND0YtS8AwDQYJKoZIhvcNAQEF BQAwHTEbMBkGA1UEAxMSaWRwLnVuaXYtZmNvbXRlLmZyMB4XDTA5MDkyMjA5MjY0 OFoXDTI5MDkyMjA5MjY0OFowHTEbMBkGA1UEAxMSaWRwLnVuaXYtZmNvbXRlLmZy MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAo5IZG9vjS65fZl4V7Rj0 7m98ICKvOdEKifDECnogADu3DKKwTgNRFdluGjA97M/vLYGyDPIxp6WH5/Xn402n dBKoR7x4cCPxcbreXqstbObb6DKLQ9wno2kZGHhCGnSbP04GruIKoLjtZJ0HjkYY 805ZEB+yR543hZoAKvYoL7yNfkbhw4pqiHocd7lDjeW30airDj26endmgxKMDdma QZc+SZQih2c4pwvFeY478VxvMC34U9r+bnljREDXNk6j342vIKTqSEhf2UgMcd6/ ox+ozGhstsDwRPecDyLm9t4VtcL7jAwC2mF/zhAkziDQ1ZSqszLOpM94kPW8rdvC 7QIDAQABo2swaTBIBgNVHREEQTA/ghJpZHAudW5pdi1mY29tdGUuZnKGKWh0dHBz Oi8vaWRwLnVuaXYtZmNvbXRlLmZyL2lkcC9zaGliYm9sZXRoMB0GA1UdDgQWBBTr IVfDPghF09R0vhBjtKCIU7ibzjANBgkqhkiG9w0BAQUFAAOCAQEAjuMuu1Jhi1x6 6ePM1bMbdyGTRAiWeQIBQsHkz6xbHOzAL86/bgIw2hgQqcjq1Tzy3OTFFsduAW1N wIfDITbZ1Bg2FecmYpdxzpwzzTgnPzpaztN013WlCkXURlbf4LP2OBpGe0gC488N v720Gk3YrUSZ4Qvfrr15kRsb92unQ87qT7JWGnp8+3/e8Cuw93bNZZY+rgAjLm8z XqW8svXuUo4q0dQH93j8YzV7Ehhri1crpeix9jNFHU9Nv1UNT4a1kFgbvtqvbJEK nN/RMfsKrrdgX8j3c+CoTxWr/whb+1TSruMB/J1PgNArpPGxNDJEoZloNEMAowoU IVPuFCeDJg== MIIDQDCCAiigAwIBAgIVAO/8T+HZ1meHZeUYYGYKknaNCO9jMA0GCSqGSIb3DQEB BQUAMCAxHjAcBgNVBAMTFXVmYzExMy51bml2LWZjb210ZS5mcjAeFw0wOTA2MjUx MTQ3MzJaFw0xMjA2MjUxMTQ3MzJaMCAxHjAcBgNVBAMTFXVmYzExMy51bml2LWZj b210ZS5mcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKtQ/+GORbpD E5V4drXcwRL9W+hW5IH4hfeJ9garnrJXVDHz2+2NujNZLFudKsWLmzEtdsV9I80H xuvQPeXjwUTu3eA1aPBhG3ffijmAF30+fe72zrWT1lxtwkPPlvAl9NuB3GgRPD4j +ZCie2/pZ96zrjxP4OFtzWe29pn1cSNtoRppoVlejHLSx8xLMWygEVKHo48yvSxO r1CD0XuI9N4xcHfT9PqMwvcHNk4GJ7K+KbmQaLT5LcbOHHInrij77FjyjMyA53+H P1bFHJsXkpTqctjDpWECiqhZq7vT5UmU2BxtKf5DJGvZ1bXu+lZGwvw/umH1bzDo 8v0IbqJM2MUCAwEAAaNxMG8wTgYDVR0RBEcwRYIVdWZjMTEzLnVuaXYtZmNvbXRl LmZyhixodHRwczovL3VmYzExMy51bml2LWZjb210ZS5mci9pZHAvc2hpYmJvbGV0 aDAdBgNVHQ4EFgQU7ZjX/QJkTHhPUK5jJ1VnXRORswswDQYJKoZIhvcNAQEFBQAD ggEBAFl/1/GkovqnPpz0B58Tzug3Hhak1K4sSPTE2QfT0oKF6ffpMj10rUIGnGcj 5hS84epevQOIs1KqIQoU+1FHk80u7QQ6SjeUwOEaRwipBpJJTJ8/8dXYI0AfavuS N6dZU+zaXvYQm3gesWDi//33j8mZ33uCrfGw+hg3VlG6eZddAivDSXMDTodksf4W 3wkXzErY365XtwnOvKJmnhR3WB7kQuHsAInMmm0AIBtv1cNFprAGDMMyLrIIXwQG Yd9szbOmM5Uq2s8WY9fuOWBLbcvTlgwdr+kT9XG5Z81h96q13zi8+a5/aoSEDCyv miWCUgajCZNCnjKwKj7taWSFWuw= urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient univ-fcomte.fr MIIDMzCCAhugAwIBAgIUW6mVllZscKchJexSqcEND0YtS8AwDQYJKoZIhvcNAQEF BQAwHTEbMBkGA1UEAxMSaWRwLnVuaXYtZmNvbXRlLmZyMB4XDTA5MDkyMjA5MjY0 OFoXDTI5MDkyMjA5MjY0OFowHTEbMBkGA1UEAxMSaWRwLnVuaXYtZmNvbXRlLmZy MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAo5IZG9vjS65fZl4V7Rj0 7m98ICKvOdEKifDECnogADu3DKKwTgNRFdluGjA97M/vLYGyDPIxp6WH5/Xn402n dBKoR7x4cCPxcbreXqstbObb6DKLQ9wno2kZGHhCGnSbP04GruIKoLjtZJ0HjkYY 805ZEB+yR543hZoAKvYoL7yNfkbhw4pqiHocd7lDjeW30airDj26endmgxKMDdma QZc+SZQih2c4pwvFeY478VxvMC34U9r+bnljREDXNk6j342vIKTqSEhf2UgMcd6/ ox+ozGhstsDwRPecDyLm9t4VtcL7jAwC2mF/zhAkziDQ1ZSqszLOpM94kPW8rdvC 7QIDAQABo2swaTBIBgNVHREEQTA/ghJpZHAudW5pdi1mY29tdGUuZnKGKWh0dHBz Oi8vaWRwLnVuaXYtZmNvbXRlLmZyL2lkcC9zaGliYm9sZXRoMB0GA1UdDgQWBBTr IVfDPghF09R0vhBjtKCIU7ibzjANBgkqhkiG9w0BAQUFAAOCAQEAjuMuu1Jhi1x6 6ePM1bMbdyGTRAiWeQIBQsHkz6xbHOzAL86/bgIw2hgQqcjq1Tzy3OTFFsduAW1N wIfDITbZ1Bg2FecmYpdxzpwzzTgnPzpaztN013WlCkXURlbf4LP2OBpGe0gC488N v720Gk3YrUSZ4Qvfrr15kRsb92unQ87qT7JWGnp8+3/e8Cuw93bNZZY+rgAjLm8z XqW8svXuUo4q0dQH93j8YzV7Ehhri1crpeix9jNFHU9Nv1UNT4a1kFgbvtqvbJEK nN/RMfsKrrdgX8j3c+CoTxWr/whb+1TSruMB/J1PgNArpPGxNDJEoZloNEMAowoU IVPuFCeDJg== MIIDQDCCAiigAwIBAgIVAO/8T+HZ1meHZeUYYGYKknaNCO9jMA0GCSqGSIb3DQEB BQUAMCAxHjAcBgNVBAMTFXVmYzExMy51bml2LWZjb210ZS5mcjAeFw0wOTA2MjUx MTQ3MzJaFw0xMjA2MjUxMTQ3MzJaMCAxHjAcBgNVBAMTFXVmYzExMy51bml2LWZj b210ZS5mcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKtQ/+GORbpD E5V4drXcwRL9W+hW5IH4hfeJ9garnrJXVDHz2+2NujNZLFudKsWLmzEtdsV9I80H xuvQPeXjwUTu3eA1aPBhG3ffijmAF30+fe72zrWT1lxtwkPPlvAl9NuB3GgRPD4j +ZCie2/pZ96zrjxP4OFtzWe29pn1cSNtoRppoVlejHLSx8xLMWygEVKHo48yvSxO r1CD0XuI9N4xcHfT9PqMwvcHNk4GJ7K+KbmQaLT5LcbOHHInrij77FjyjMyA53+H P1bFHJsXkpTqctjDpWECiqhZq7vT5UmU2BxtKf5DJGvZ1bXu+lZGwvw/umH1bzDo 8v0IbqJM2MUCAwEAAaNxMG8wTgYDVR0RBEcwRYIVdWZjMTEzLnVuaXYtZmNvbXRl LmZyhixodHRwczovL3VmYzExMy51bml2LWZjb210ZS5mci9pZHAvc2hpYmJvbGV0 aDAdBgNVHQ4EFgQU7ZjX/QJkTHhPUK5jJ1VnXRORswswDQYJKoZIhvcNAQEFBQAD ggEBAFl/1/GkovqnPpz0B58Tzug3Hhak1K4sSPTE2QfT0oKF6ffpMj10rUIGnGcj 5hS84epevQOIs1KqIQoU+1FHk80u7QQ6SjeUwOEaRwipBpJJTJ8/8dXYI0AfavuS N6dZU+zaXvYQm3gesWDi//33j8mZ33uCrfGw+hg3VlG6eZddAivDSXMDTodksf4W 3wkXzErY365XtwnOvKJmnhR3WB7kQuHsAInMmm0AIBtv1cNFprAGDMMyLrIIXwQG Yd9szbOmM5Uq2s8WY9fuOWBLbcvTlgwdr+kT9XG5Z81h96q13zi8+a5/aoSEDCyv miWCUgajCZNCnjKwKj7taWSFWuw= urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Franche-Comté Université de Franche-Comté http://unknown.site.com Patrice Koch samuel.godey@univ-fcomte.fr Marc Hamelin samuel.godey@univ-fcomte.fr replicat-moodle.univ-fcomte.fr CN=replicat-moodle.univ-fcomte.fr,O=UFC,C=FR MIICrTCCAhagAwIBAgIJANFgIf1cRoabMA0GCSqGSIb3DQEBBQUAMEQxCzAJBgNV BAYTAkZSMQwwCgYDVQQKEwNVRkMxJzAlBgNVBAMTHnJlcGxpY2F0LW1vb2RsZS51 bml2LWZjb210ZS5mcjAeFw0xMDA0MzAxMDM5MjRaFw0zMDA0MjUxMDM5MjRaMEQx CzAJBgNVBAYTAkZSMQwwCgYDVQQKEwNVRkMxJzAlBgNVBAMTHnJlcGxpY2F0LW1v b2RsZS51bml2LWZjb210ZS5mcjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA q0oMD9tRPrKxyZPkXIv2GxDDMLI+XmstBY67NG/uMpi3Cpp5gKggwDM9P9OUS/rs nWcJSM1rIC1nZYyLiw3UZDjCPTKejYQvIfMyzgsGND6QxjeCGkZ85cbPBrQ/egIY URgiWVwsDXslyDhRbFKTMOmpExCj95HZy9qLuIM4H+ECAwEAAaOBpjCBozAdBgNV HQ4EFgQUk9Htp8Dleb3PtKKJGKE/FhqPzQAwdAYDVR0jBG0wa4AUk9Htp8Dleb3P tKKJGKE/FhqPzQChSKRGMEQxCzAJBgNVBAYTAkZSMQwwCgYDVQQKEwNVRkMxJzAl BgNVBAMTHnJlcGxpY2F0LW1vb2RsZS51bml2LWZjb210ZS5mcoIJANFgIf1cRoab MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAdCTy7yoRx7JyAHPKIJ5Z ANWvQ88w4xBNGcib2trgQ4vLcR8t7k31lB4Kcygl1opUYBDqguc8NCy1ue7ChK0f rNjKecRHUXemGsghGTMSs+cM2yA+R+0YtAVC1mdxRvw+3U02+vKZM4FJHSXA8CpQ SRNlHh3sJoYBlIESWytG+ao= replicat-moodle.univ-fcomte.fr CN=replicat-moodle.univ-fcomte.fr,O=UFC,C=FR MIICrTCCAhagAwIBAgIJANFgIf1cRoabMA0GCSqGSIb3DQEBBQUAMEQxCzAJBgNV BAYTAkZSMQwwCgYDVQQKEwNVRkMxJzAlBgNVBAMTHnJlcGxpY2F0LW1vb2RsZS51 bml2LWZjb210ZS5mcjAeFw0xMDA0MzAxMDM5MjRaFw0zMDA0MjUxMDM5MjRaMEQx CzAJBgNVBAYTAkZSMQwwCgYDVQQKEwNVRkMxJzAlBgNVBAMTHnJlcGxpY2F0LW1v b2RsZS51bml2LWZjb210ZS5mcjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA q0oMD9tRPrKxyZPkXIv2GxDDMLI+XmstBY67NG/uMpi3Cpp5gKggwDM9P9OUS/rs nWcJSM1rIC1nZYyLiw3UZDjCPTKejYQvIfMyzgsGND6QxjeCGkZ85cbPBrQ/egIY URgiWVwsDXslyDhRbFKTMOmpExCj95HZy9qLuIM4H+ECAwEAAaOBpjCBozAdBgNV HQ4EFgQUk9Htp8Dleb3PtKKJGKE/FhqPzQAwdAYDVR0jBG0wa4AUk9Htp8Dleb3P tKKJGKE/FhqPzQChSKRGMEQxCzAJBgNVBAYTAkZSMQwwCgYDVQQKEwNVRkMxJzAl BgNVBAMTHnJlcGxpY2F0LW1vb2RsZS51bml2LWZjb210ZS5mcoIJANFgIf1cRoab MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAdCTy7yoRx7JyAHPKIJ5Z ANWvQ88w4xBNGcib2trgQ4vLcR8t7k31lB4Kcygl1opUYBDqguc8NCy1ue7ChK0f rNjKecRHUXemGsghGTMSs+cM2yA+R+0YtAVC1mdxRvw+3U02+vKZM4FJHSXA8CpQ SRNlHh3sJoYBlIESWytG+ao= ujf-grenoble.fr MIIEozCCA4ugAwIBAgIRAI4l0qeSwD721XynyynW3cMwDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0xMDAxMDgwMDAwMDBaFw0xMzAxMDcyMzU5NTlaMHIxCzAJBgNV BAYTAkZSMREwDwYDVQQHEwhHcmVub2JsZTEqMCgGA1UECgwhVW5pdmVyc2l0w6kg UGllcnJlIE1lbmTDqHMgRnJhbmNlMSQwIgYDVQQDExtmZWRlcmF0aW9uLnVwbWYt Z3Jlbm9ibGUuZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC1LOes Rv4NAi3lZrezozKe/hb2w9zVX5VuxIIx+aoQmjnNtcXPJOmafyE14e1vEtMpo1hU /RheUZeTI/ErvWxPh+1OTaYHkaOB8cwpIDSz1EgJp6lQv/nEex/iNSH/cocCCNcc qQLdpKaeDk37l41CiCL04BAB6D9oauBf7LAXv+nfCD9kBkEcu2HXqNn0jdSlUZhA BEHcqXOusqWFu/+DFx81CZQxgpz69aCszYmgul+0mjo9JQA7YuPfYPUbDeGwkseM ZTDRuavRPN8kAecUdEyWhNxyiHmAoTF0MpcUWS6lcgbBvtyjws4/7D2IgrEkXvw+ VhE6qZokMRVFniv3AgMBAAGjggFuMIIBajAfBgNVHSMEGDAWgBQMvZNoDPPeq6NJ ays3V0fqkOO57TAdBgNVHQ4EFgQUBu+XcJzseO2x3VqaW3AStmtIBH0wDgYDVR0P AQH/BAQDAgWgMAwGA1UdEwEB/wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG AQUFBwMCMBgGA1UdIAQRMA8wDQYLKwYBBAGyMQECAh0wOgYDVR0fBDMwMTAvoC2g K4YpaHR0cDovL2NybC50Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcmwwbQYI KwYBBQUHAQEEYTBfMDUGCCsGAQUFBzAChilodHRwOi8vY3J0LnRjcy50ZXJlbmEu b3JnL1RFUkVOQVNTTENBLmNydDAmBggrBgEFBQcwAYYaaHR0cDovL29jc3AudGNz LnRlcmVuYS5vcmcwJgYDVR0RBB8wHYIbZmVkZXJhdGlvbi51cG1mLWdyZW5vYmxl LmZyMA0GCSqGSIb3DQEBBQUAA4IBAQB54CGL7v56BQCGQnx2i1IwwNMaHGBeRkaa uoZhl/rCVa+T8J2f/3GvsqqP6ebixhbM6vb6cAdj1LZ7zeQ+MoMtRvwCSK1l6CVL Qvkel4O5LJ8NtNn2kN4YSfqs2lfNAn7pBNvbPHf+2+AHJeEW0b/N0g8WWN0Tlfm5 qaw9j+NslVtHqIrFktO3uMqQf4MxsMpExYfJBfQo5K9iWvmsYKYcxyurUDfd/DM2 foqI/gQjYsBDs0kX8KvSyw6qBdmwLbWjn8MXv7Kujt+WCn6avYGogj2y6gCe5oMU 1/tCmqjXVgNZfBz5hWp7Zku7qvEMbAwUOH8vQlFrn1+BMPLsjZ8F MIIEOTCCAyGgAwIBAgILAQAAAAABGwdDsEIwDQYJKoZIhvcNAQEFBQAwXzELMAkG A1UEBhMCQkUxEzARBgNVBAoTCkN5YmVydHJ1c3QxFzAVBgNVBAsTDkVkdWNhdGlv bmFsIENBMSIwIAYDVQQDExlDeWJlcnRydXN0IEVkdWNhdGlvbmFsIENBMB4XDTA4 MDcwOTEwMDAxM1oXDTExMDcwOTEwMDAxM1owXTELMAkGA1UEBhMCRlIxKDAmBgNV BAoTH1VuaXZlcnNpdGUgUGllcnJlIE1lbmRlcyBGcmFuY2UxJDAiBgNVBAMTG2Zl ZGVyYXRpb24udXBtZi1ncmVub2JsZS5mcjCBnzANBgkqhkiG9w0BAQEFAAOBjQAw gYkCgYEA2lt9cUQ0X94yQ3iHuq5rhahsi5XvtrQ4NPycObddIIdf6w/QITwuoyuW xfiy1X+VZTybdZUkEMo/cIEpeG6oewNjtnXtRPl54zyi4rSHJM1N07EEkyY6n1Oz W0j4ubYBXFXG2kbRsWMntn0J2EqW4FmiY7rGs+tYmJf60xtKfR8CAwEAAaOCAXow ggF2MFAGA1UdIARJMEcwRQYHKoZIsT4BADA6MDgGCCsGAQUFBwIBFixodHRwOi8v d3d3Lmdsb2JhbHNpZ24ubmV0L3JlcG9zaXRvcnkvY3BzLmNmbTAOBgNVHQ8BAf8E BAMCBaAwHwYDVR0jBBgwFoAUZWWjPdc7EaMKByU3yUJKW3Z3UOEwHQYDVR0OBBYE FOjgSw6AqMx6cK8l2xPKPubZTuMzMDoGA1UdHwQzMDEwL6AtoCuGKWh0dHA6Ly9j cmwuZ2xvYmFsc2lnbi5uZXQvZWR1Y2F0aW9uYWwuY3JsME8GCCsGAQUFBwEBBEMw QTA/BggrBgEFBQcwAoYzaHR0cDovL3NlY3VyZS5nbG9iYWxzaWduLm5ldC9jYWNl cnQvZWR1Y2F0aW9uYWwuY3J0MB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcD AjAmBgNVHREEHzAdghtmZWRlcmF0aW9uLnVwbWYtZ3Jlbm9ibGUuZnIwDQYJKoZI hvcNAQEFBQADggEBAFOUXIN6AxybKM4kNMFdso2WdwC5wX+qfwqEBueYu+4XgYRa EAcG1+MDR33HXXhmrBuLI7j2c23b7LJIhNiNl7NHU9R7oW33b6/0tntMS2bn+kmD tR4rDDLf4bO0s1a8RpBTbu+WqCflcH8wriqWkn1Do5Ix81ThGYYGbG7zaRssCDXl HWda5k9ypj3t4ajMPFVgKfAU4gYVWqvvTqEnzO6oLemKkOiT5bEjm4MSKmiYkrPB 7XYNnfgFsKbhz7BgRYMTUBNjVT7V1wn9/Zg6BzzQHFOntOBNHwYmFZQxp9wpCjeZ pFWD1cKlPq7eD1zfKQZyD2sVmSNnryqGM5E4NiQ= urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Grenoble 1 - Joseph Fourier Université de Grenoble 1 - Joseph Fourier http://unknown.site.com Bernard Martinet Bernard.Martinet@ujf-grenoble.fr Yoann Mitaine yoann.mitaine@upmf-grenoble.fr upmf-grenoble.fr MIIEozCCA4ugAwIBAgIRAI4l0qeSwD721XynyynW3cMwDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0xMDAxMDgwMDAwMDBaFw0xMzAxMDcyMzU5NTlaMHIxCzAJBgNV BAYTAkZSMREwDwYDVQQHEwhHcmVub2JsZTEqMCgGA1UECgwhVW5pdmVyc2l0w6kg UGllcnJlIE1lbmTDqHMgRnJhbmNlMSQwIgYDVQQDExtmZWRlcmF0aW9uLnVwbWYt Z3Jlbm9ibGUuZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC1LOes Rv4NAi3lZrezozKe/hb2w9zVX5VuxIIx+aoQmjnNtcXPJOmafyE14e1vEtMpo1hU /RheUZeTI/ErvWxPh+1OTaYHkaOB8cwpIDSz1EgJp6lQv/nEex/iNSH/cocCCNcc qQLdpKaeDk37l41CiCL04BAB6D9oauBf7LAXv+nfCD9kBkEcu2HXqNn0jdSlUZhA BEHcqXOusqWFu/+DFx81CZQxgpz69aCszYmgul+0mjo9JQA7YuPfYPUbDeGwkseM ZTDRuavRPN8kAecUdEyWhNxyiHmAoTF0MpcUWS6lcgbBvtyjws4/7D2IgrEkXvw+ VhE6qZokMRVFniv3AgMBAAGjggFuMIIBajAfBgNVHSMEGDAWgBQMvZNoDPPeq6NJ ays3V0fqkOO57TAdBgNVHQ4EFgQUBu+XcJzseO2x3VqaW3AStmtIBH0wDgYDVR0P AQH/BAQDAgWgMAwGA1UdEwEB/wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG AQUFBwMCMBgGA1UdIAQRMA8wDQYLKwYBBAGyMQECAh0wOgYDVR0fBDMwMTAvoC2g K4YpaHR0cDovL2NybC50Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcmwwbQYI KwYBBQUHAQEEYTBfMDUGCCsGAQUFBzAChilodHRwOi8vY3J0LnRjcy50ZXJlbmEu b3JnL1RFUkVOQVNTTENBLmNydDAmBggrBgEFBQcwAYYaaHR0cDovL29jc3AudGNz LnRlcmVuYS5vcmcwJgYDVR0RBB8wHYIbZmVkZXJhdGlvbi51cG1mLWdyZW5vYmxl LmZyMA0GCSqGSIb3DQEBBQUAA4IBAQB54CGL7v56BQCGQnx2i1IwwNMaHGBeRkaa uoZhl/rCVa+T8J2f/3GvsqqP6ebixhbM6vb6cAdj1LZ7zeQ+MoMtRvwCSK1l6CVL Qvkel4O5LJ8NtNn2kN4YSfqs2lfNAn7pBNvbPHf+2+AHJeEW0b/N0g8WWN0Tlfm5 qaw9j+NslVtHqIrFktO3uMqQf4MxsMpExYfJBfQo5K9iWvmsYKYcxyurUDfd/DM2 foqI/gQjYsBDs0kX8KvSyw6qBdmwLbWjn8MXv7Kujt+WCn6avYGogj2y6gCe5oMU 1/tCmqjXVgNZfBz5hWp7Zku7qvEMbAwUOH8vQlFrn1+BMPLsjZ8F MIIEOTCCAyGgAwIBAgILAQAAAAABGwdDsEIwDQYJKoZIhvcNAQEFBQAwXzELMAkG A1UEBhMCQkUxEzARBgNVBAoTCkN5YmVydHJ1c3QxFzAVBgNVBAsTDkVkdWNhdGlv bmFsIENBMSIwIAYDVQQDExlDeWJlcnRydXN0IEVkdWNhdGlvbmFsIENBMB4XDTA4 MDcwOTEwMDAxM1oXDTExMDcwOTEwMDAxM1owXTELMAkGA1UEBhMCRlIxKDAmBgNV BAoTH1VuaXZlcnNpdGUgUGllcnJlIE1lbmRlcyBGcmFuY2UxJDAiBgNVBAMTG2Zl ZGVyYXRpb24udXBtZi1ncmVub2JsZS5mcjCBnzANBgkqhkiG9w0BAQEFAAOBjQAw gYkCgYEA2lt9cUQ0X94yQ3iHuq5rhahsi5XvtrQ4NPycObddIIdf6w/QITwuoyuW xfiy1X+VZTybdZUkEMo/cIEpeG6oewNjtnXtRPl54zyi4rSHJM1N07EEkyY6n1Oz W0j4ubYBXFXG2kbRsWMntn0J2EqW4FmiY7rGs+tYmJf60xtKfR8CAwEAAaOCAXow ggF2MFAGA1UdIARJMEcwRQYHKoZIsT4BADA6MDgGCCsGAQUFBwIBFixodHRwOi8v d3d3Lmdsb2JhbHNpZ24ubmV0L3JlcG9zaXRvcnkvY3BzLmNmbTAOBgNVHQ8BAf8E BAMCBaAwHwYDVR0jBBgwFoAUZWWjPdc7EaMKByU3yUJKW3Z3UOEwHQYDVR0OBBYE FOjgSw6AqMx6cK8l2xPKPubZTuMzMDoGA1UdHwQzMDEwL6AtoCuGKWh0dHA6Ly9j cmwuZ2xvYmFsc2lnbi5uZXQvZWR1Y2F0aW9uYWwuY3JsME8GCCsGAQUFBwEBBEMw QTA/BggrBgEFBQcwAoYzaHR0cDovL3NlY3VyZS5nbG9iYWxzaWduLm5ldC9jYWNl cnQvZWR1Y2F0aW9uYWwuY3J0MB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcD AjAmBgNVHREEHzAdghtmZWRlcmF0aW9uLnVwbWYtZ3Jlbm9ibGUuZnIwDQYJKoZI hvcNAQEFBQADggEBAFOUXIN6AxybKM4kNMFdso2WdwC5wX+qfwqEBueYu+4XgYRa EAcG1+MDR33HXXhmrBuLI7j2c23b7LJIhNiNl7NHU9R7oW33b6/0tntMS2bn+kmD tR4rDDLf4bO0s1a8RpBTbu+WqCflcH8wriqWkn1Do5Ix81ThGYYGbG7zaRssCDXl HWda5k9ypj3t4ajMPFVgKfAU4gYVWqvvTqEnzO6oLemKkOiT5bEjm4MSKmiYkrPB 7XYNnfgFsKbhz7BgRYMTUBNjVT7V1wn9/Zg6BzzQHFOntOBNHwYmFZQxp9wpCjeZ pFWD1cKlPq7eD1zfKQZyD2sVmSNnryqGM5E4NiQ= urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Grenoble 2 - Pierre Mendès France Université de Grenoble 2 - Pierre Mendès France http://unknown.site.com Yoann Mitaine sysadm-dsiu2@upmf-grenoble.fr Pascal Praly sysadm-dsiu2@upmf-grenoble.fr u-grenoble3.fr MIIEozCCA4ugAwIBAgIRAI4l0qeSwD721XynyynW3cMwDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0xMDAxMDgwMDAwMDBaFw0xMzAxMDcyMzU5NTlaMHIxCzAJBgNV BAYTAkZSMREwDwYDVQQHEwhHcmVub2JsZTEqMCgGA1UECgwhVW5pdmVyc2l0w6kg UGllcnJlIE1lbmTDqHMgRnJhbmNlMSQwIgYDVQQDExtmZWRlcmF0aW9uLnVwbWYt Z3Jlbm9ibGUuZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC1LOes Rv4NAi3lZrezozKe/hb2w9zVX5VuxIIx+aoQmjnNtcXPJOmafyE14e1vEtMpo1hU /RheUZeTI/ErvWxPh+1OTaYHkaOB8cwpIDSz1EgJp6lQv/nEex/iNSH/cocCCNcc qQLdpKaeDk37l41CiCL04BAB6D9oauBf7LAXv+nfCD9kBkEcu2HXqNn0jdSlUZhA BEHcqXOusqWFu/+DFx81CZQxgpz69aCszYmgul+0mjo9JQA7YuPfYPUbDeGwkseM ZTDRuavRPN8kAecUdEyWhNxyiHmAoTF0MpcUWS6lcgbBvtyjws4/7D2IgrEkXvw+ VhE6qZokMRVFniv3AgMBAAGjggFuMIIBajAfBgNVHSMEGDAWgBQMvZNoDPPeq6NJ ays3V0fqkOO57TAdBgNVHQ4EFgQUBu+XcJzseO2x3VqaW3AStmtIBH0wDgYDVR0P AQH/BAQDAgWgMAwGA1UdEwEB/wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG AQUFBwMCMBgGA1UdIAQRMA8wDQYLKwYBBAGyMQECAh0wOgYDVR0fBDMwMTAvoC2g K4YpaHR0cDovL2NybC50Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcmwwbQYI KwYBBQUHAQEEYTBfMDUGCCsGAQUFBzAChilodHRwOi8vY3J0LnRjcy50ZXJlbmEu b3JnL1RFUkVOQVNTTENBLmNydDAmBggrBgEFBQcwAYYaaHR0cDovL29jc3AudGNz LnRlcmVuYS5vcmcwJgYDVR0RBB8wHYIbZmVkZXJhdGlvbi51cG1mLWdyZW5vYmxl LmZyMA0GCSqGSIb3DQEBBQUAA4IBAQB54CGL7v56BQCGQnx2i1IwwNMaHGBeRkaa uoZhl/rCVa+T8J2f/3GvsqqP6ebixhbM6vb6cAdj1LZ7zeQ+MoMtRvwCSK1l6CVL Qvkel4O5LJ8NtNn2kN4YSfqs2lfNAn7pBNvbPHf+2+AHJeEW0b/N0g8WWN0Tlfm5 qaw9j+NslVtHqIrFktO3uMqQf4MxsMpExYfJBfQo5K9iWvmsYKYcxyurUDfd/DM2 foqI/gQjYsBDs0kX8KvSyw6qBdmwLbWjn8MXv7Kujt+WCn6avYGogj2y6gCe5oMU 1/tCmqjXVgNZfBz5hWp7Zku7qvEMbAwUOH8vQlFrn1+BMPLsjZ8F MIIEOTCCAyGgAwIBAgILAQAAAAABGwdDsEIwDQYJKoZIhvcNAQEFBQAwXzELMAkG A1UEBhMCQkUxEzARBgNVBAoTCkN5YmVydHJ1c3QxFzAVBgNVBAsTDkVkdWNhdGlv bmFsIENBMSIwIAYDVQQDExlDeWJlcnRydXN0IEVkdWNhdGlvbmFsIENBMB4XDTA4 MDcwOTEwMDAxM1oXDTExMDcwOTEwMDAxM1owXTELMAkGA1UEBhMCRlIxKDAmBgNV BAoTH1VuaXZlcnNpdGUgUGllcnJlIE1lbmRlcyBGcmFuY2UxJDAiBgNVBAMTG2Zl ZGVyYXRpb24udXBtZi1ncmVub2JsZS5mcjCBnzANBgkqhkiG9w0BAQEFAAOBjQAw gYkCgYEA2lt9cUQ0X94yQ3iHuq5rhahsi5XvtrQ4NPycObddIIdf6w/QITwuoyuW xfiy1X+VZTybdZUkEMo/cIEpeG6oewNjtnXtRPl54zyi4rSHJM1N07EEkyY6n1Oz W0j4ubYBXFXG2kbRsWMntn0J2EqW4FmiY7rGs+tYmJf60xtKfR8CAwEAAaOCAXow ggF2MFAGA1UdIARJMEcwRQYHKoZIsT4BADA6MDgGCCsGAQUFBwIBFixodHRwOi8v d3d3Lmdsb2JhbHNpZ24ubmV0L3JlcG9zaXRvcnkvY3BzLmNmbTAOBgNVHQ8BAf8E BAMCBaAwHwYDVR0jBBgwFoAUZWWjPdc7EaMKByU3yUJKW3Z3UOEwHQYDVR0OBBYE FOjgSw6AqMx6cK8l2xPKPubZTuMzMDoGA1UdHwQzMDEwL6AtoCuGKWh0dHA6Ly9j cmwuZ2xvYmFsc2lnbi5uZXQvZWR1Y2F0aW9uYWwuY3JsME8GCCsGAQUFBwEBBEMw QTA/BggrBgEFBQcwAoYzaHR0cDovL3NlY3VyZS5nbG9iYWxzaWduLm5ldC9jYWNl cnQvZWR1Y2F0aW9uYWwuY3J0MB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcD AjAmBgNVHREEHzAdghtmZWRlcmF0aW9uLnVwbWYtZ3Jlbm9ibGUuZnIwDQYJKoZI hvcNAQEFBQADggEBAFOUXIN6AxybKM4kNMFdso2WdwC5wX+qfwqEBueYu+4XgYRa EAcG1+MDR33HXXhmrBuLI7j2c23b7LJIhNiNl7NHU9R7oW33b6/0tntMS2bn+kmD tR4rDDLf4bO0s1a8RpBTbu+WqCflcH8wriqWkn1Do5Ix81ThGYYGbG7zaRssCDXl HWda5k9ypj3t4ajMPFVgKfAU4gYVWqvvTqEnzO6oLemKkOiT5bEjm4MSKmiYkrPB 7XYNnfgFsKbhz7BgRYMTUBNjVT7V1wn9/Zg6BzzQHFOntOBNHwYmFZQxp9wpCjeZ pFWD1cKlPq7eD1zfKQZyD2sVmSNnryqGM5E4NiQ= urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Grenoble 3 - Stendhal Université de Grenoble 3 - Stendhal http://unknown.site.com Dimitrov Nicolay nicolay.dimitrov@u-grenoble3.fr Mitaine Yoann yoann.mitaine@upmf-grenoble.fr univ-lr.fr MIIDKDCCAhCgAwIBAgIVAJLGkE9DxkNOsplkeHW65AlxGjHUMA0GCSqGSIb3DQEB BQUAMBoxGDAWBgNVBAMTD2FwcHMudW5pdi1sci5mcjAeFw0xMDA2MTcxNDQ3NTJa Fw0zMDA2MTcxNDQ3NTJaMBoxGDAWBgNVBAMTD2FwcHMudW5pdi1sci5mcjCCASIw DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAINA9re3jhmmXTXS+LhhOp5nGQNi zOdI4S/wM+i314e40iXbVFtJaZ9SSd0FVxMCIy4hLm2zGaGKFXOB2m6YB4JIeEaY AdRvR1jQ0BzpA3VZ1JpppmH0Zd9287TJ3bJFuZ6i8lk4dnN/Xto8VZDbl/xdwjz4 AS4wQkW/+8dj9TceOrVxUae2z2HkcTRaj9f3i/i0klWyIGiPshvZQ28McoxHlyzI NH7KEy/69Hn8mGOAdIJbNVxJ0IJh0ZxB18Cibkax7MZE9OCw5ZaSKIp1iO3kawuH Hj/yPaz08dm1+dV04TK+ma/iyiJdRpMK3IJbIjIsSzQd8iS0QeR7Uus0Pb0CAwEA AaNlMGMwQgYDVR0RBDswOYIPYXBwcy51bml2LWxyLmZyhiZodHRwczovL2FwcHMu dW5pdi1sci5mci9pZHAvc2hpYmJvbGV0aDAdBgNVHQ4EFgQU0lLp7mBCq1tIB4bn 2zZ52Pp6CfQwDQYJKoZIhvcNAQEFBQADggEBAAsRpHHVbT8G4+qHmQ8R+ODG9xCJ HXEggG5F9unRoDmMB2K8w4VjDTYBq9Jhh5tuVyeYRe+rXXUG+xrvuCqwoSYMIZ38 0GwAsxZDQ7CEyYbRG3uPDlKqaQ0LldP94NBpAA8bqSfWymYVgFbFobbbmqRtvfQ+ N9xtxxr64Z7bpIrsh12L5cg+5Z3C3c8OpUAhEuW/WY+b8tefxE4LxGKslcZelyNT L4+3qb30bEOerAH7IqOZj8N5aye8Pn/DwWFY+Z9IfIDzOG+Ihugy4/4RVjvmHXZa Oos0+f6TvKwg93oxSQA7uxPNKUk4hlu9cmBuBpdHyOW+CZ2UmuDFmizwxoU= urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de La Rochelle Université de La Rochelle http://unknown.site.com Emmanuel Collignon emmanuel.collignon@univ-lr.fr Hugues Villesuzanne hugues.villesuzanne@univ-lr.fr univ-lille1.fr MIIDMjCCAhqgAwIBAgIUFVDNOdEJbuHwIfdnn+cRYs6xfq0wDQYJKoZIhvcNAQEF BQAwHTEbMBkGA1UEAxMSaWRwLnVuaXYtbGlsbGUxLmZyMB4XDTA5MTAwODA5MTU1 NVoXDTI5MTAwODA5MTU1NVowHTEbMBkGA1UEAxMSaWRwLnVuaXYtbGlsbGUxLmZy MIIBITANBgkqhkiG9w0BAQEFAAOCAQ4AMIIBCQKCAQBsQS+H4uWYOep74yJQf5us pkTg19tZEZUjtqkUCBjLt1UJdH1hDiaK+/4qWudwEjcMDvnxBUL8xbIfDDJOXvgh bPKYRJMLTEBmBnt5dslkT46+47cTSPDqK748qbBzrucnbhHuWJ7mG9KG9qTXmiLi 09uwCjeGjnnFu11CKKt1XMJ40/B55W2j1SXiqDHMbdbjRjhfyniVt9t3yp/b4IGh 79UivcebLkPTpAjLp7TMG4VAUXq6oVwfCLkjH8kzZsO0MJ+IAeX0iTIULONw3E0E VAErKUj9FPV9C3zAlPL0oZomDrd0tu7CdreGZRz2u6DCT38XLsVbMumSnvfYFjBF AgMBAAGjazBpMEgGA1UdEQRBMD+CEmlkcC51bml2LWxpbGxlMS5mcoYpaHR0cHM6 Ly9pZHAudW5pdi1saWxsZTEuZnIvaWRwL3NoaWJib2xldGgwHQYDVR0OBBYEFGYf a9RpwCPFriHOSMKJSQ9gQ6vzMA0GCSqGSIb3DQEBBQUAA4IBAQBBv8iK1b67jhuz ZT6LHjtmHgovO7Qa74jggtKblhiqHAMRZWPCep1fleDjR27rYSvfRGzdSug7tfbl EsPyeVqcyKJvD9GXPJuPs/s4VdQmKbldGbBuuFQU6WVGoBlZOXq7wjRMqKd15TK/ 6wE/J0J2TieuAJpFKd6oiPV3YT4ggn6G2lilP1rv2cX6a2qK/j82M7wTLg1rLe5e ocgQGRZdfk7m+u4pfrJr1Dsjy7uOjA0QWzfG5jPSFLV8DiliDDPejz+eDyaz2kib w3l6kfiJYiwyVlk+O2O5ocwTmZtnVvTo3KAvIZwluV6OKXJXB7+mkU5dPtXHmooU +HT9dOog MIIELjCCAxagAwIBAgILAQAAAAABECZN5VQwDQYJKoZIhvcNAQEFBQAwXzELMAkG A1UEBhMCQkUxEzARBgNVBAoTCkN5YmVydHJ1c3QxFzAVBgNVBAsTDkVkdWNhdGlv bmFsIENBMSIwIAYDVQQDExlDeWJlcnRydXN0IEVkdWNhdGlvbmFsIENBMB4XDTA3 MDExNTE1MDkwM1oXDTEwMDExNTE1MDkwM1owWzELMAkGA1UEBhMCRlIxLzAtBgNV BAoTJlVOSVZFUlNJVEUgU0NJRU5DRVMgVEVDSE5PTE9HSUVTIExJTExFMRswGQYD VQQDExJpZHAudW5pdi1saWxsZTEuZnIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ AoGBAJ2AuV0+L8IsR7IirWPIZFnlO7X7kYUmjU3Oepeeg0J8hqhy0Kxz4xMUwt0a KheKsJmj6Ev1yecqG1cy/7eNRo679vW2x1e8zHquhbBe20fMQyzpwrzfUKl95SLw KrSd5Y1zCyo/FuZSpxRSp3eop8ozIhNR1/7XJuO+vhGV6ICtAgMBAAGjggFxMIIB bTBQBgNVHSAESTBHMEUGByqGSLE+AQAwOjA4BggrBgEFBQcCARYsaHR0cDovL3d3 dy5nbG9iYWxzaWduLm5ldC9yZXBvc2l0b3J5L2Nwcy5jZm0wDgYDVR0PAQH/BAQD AgWgMB8GA1UdIwQYMBaAFGVloz3XOxGjCgclN8lCSlt2d1DhMB0GA1UdDgQWBBT2 Kk+xTCHn9liPd2R49AnPZw0rAzA6BgNVHR8EMzAxMC+gLaArhilodHRwOi8vY3Js Lmdsb2JhbHNpZ24ubmV0L2VkdWNhdGlvbmFsLmNybDBPBggrBgEFBQcBAQRDMEEw PwYIKwYBBQUHMAKGM2h0dHA6Ly9zZWN1cmUuZ2xvYmFsc2lnbi5uZXQvY2FjZXJ0 L2VkdWNhdGlvbmFsLmNydDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIw HQYDVR0RBBYwFIISaWRwLnVuaXYtbGlsbGUxLmZyMA0GCSqGSIb3DQEBBQUAA4IB AQANryHVJIc6bXFg3V7yI4IPasTDQq3Ck0vQkJJkr9wqyGXhOQ7izDw/Wj0ZfY8C 9Zf0BIPaik6Z5PSclkgZrPVkubtSP/GWMGJMTtDFojnzipbJ8cET6JCVaJzNNUKw pZ4fxI2/vu+78/Yti2ExnxUfAVICKBmdxlTvtqgynQ4O+PiygZU4MLc+Dgks+OhZ JfeSJIN4ip5Bl81ij/HkJdIQYbaPrdrqI9t+dCmY3hAeBgfVRPXS++kw0m915Tmr QkcaGbqZaFSW3OkK6wPfpMwBND6fTIWejhVa28wLEx7Jv9WhxmHceWAYA3WIQUuk 1BNKbEAxePsbUMFaQk1PgX3f urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient univ-lille1.fr MIIDMjCCAhqgAwIBAgIUFVDNOdEJbuHwIfdnn+cRYs6xfq0wDQYJKoZIhvcNAQEF BQAwHTEbMBkGA1UEAxMSaWRwLnVuaXYtbGlsbGUxLmZyMB4XDTA5MTAwODA5MTU1 NVoXDTI5MTAwODA5MTU1NVowHTEbMBkGA1UEAxMSaWRwLnVuaXYtbGlsbGUxLmZy MIIBITANBgkqhkiG9w0BAQEFAAOCAQ4AMIIBCQKCAQBsQS+H4uWYOep74yJQf5us pkTg19tZEZUjtqkUCBjLt1UJdH1hDiaK+/4qWudwEjcMDvnxBUL8xbIfDDJOXvgh bPKYRJMLTEBmBnt5dslkT46+47cTSPDqK748qbBzrucnbhHuWJ7mG9KG9qTXmiLi 09uwCjeGjnnFu11CKKt1XMJ40/B55W2j1SXiqDHMbdbjRjhfyniVt9t3yp/b4IGh 79UivcebLkPTpAjLp7TMG4VAUXq6oVwfCLkjH8kzZsO0MJ+IAeX0iTIULONw3E0E VAErKUj9FPV9C3zAlPL0oZomDrd0tu7CdreGZRz2u6DCT38XLsVbMumSnvfYFjBF AgMBAAGjazBpMEgGA1UdEQRBMD+CEmlkcC51bml2LWxpbGxlMS5mcoYpaHR0cHM6 Ly9pZHAudW5pdi1saWxsZTEuZnIvaWRwL3NoaWJib2xldGgwHQYDVR0OBBYEFGYf a9RpwCPFriHOSMKJSQ9gQ6vzMA0GCSqGSIb3DQEBBQUAA4IBAQBBv8iK1b67jhuz ZT6LHjtmHgovO7Qa74jggtKblhiqHAMRZWPCep1fleDjR27rYSvfRGzdSug7tfbl EsPyeVqcyKJvD9GXPJuPs/s4VdQmKbldGbBuuFQU6WVGoBlZOXq7wjRMqKd15TK/ 6wE/J0J2TieuAJpFKd6oiPV3YT4ggn6G2lilP1rv2cX6a2qK/j82M7wTLg1rLe5e ocgQGRZdfk7m+u4pfrJr1Dsjy7uOjA0QWzfG5jPSFLV8DiliDDPejz+eDyaz2kib w3l6kfiJYiwyVlk+O2O5ocwTmZtnVvTo3KAvIZwluV6OKXJXB7+mkU5dPtXHmooU +HT9dOog MIIELjCCAxagAwIBAgILAQAAAAABECZN5VQwDQYJKoZIhvcNAQEFBQAwXzELMAkG A1UEBhMCQkUxEzARBgNVBAoTCkN5YmVydHJ1c3QxFzAVBgNVBAsTDkVkdWNhdGlv bmFsIENBMSIwIAYDVQQDExlDeWJlcnRydXN0IEVkdWNhdGlvbmFsIENBMB4XDTA3 MDExNTE1MDkwM1oXDTEwMDExNTE1MDkwM1owWzELMAkGA1UEBhMCRlIxLzAtBgNV BAoTJlVOSVZFUlNJVEUgU0NJRU5DRVMgVEVDSE5PTE9HSUVTIExJTExFMRswGQYD VQQDExJpZHAudW5pdi1saWxsZTEuZnIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ AoGBAJ2AuV0+L8IsR7IirWPIZFnlO7X7kYUmjU3Oepeeg0J8hqhy0Kxz4xMUwt0a KheKsJmj6Ev1yecqG1cy/7eNRo679vW2x1e8zHquhbBe20fMQyzpwrzfUKl95SLw KrSd5Y1zCyo/FuZSpxRSp3eop8ozIhNR1/7XJuO+vhGV6ICtAgMBAAGjggFxMIIB bTBQBgNVHSAESTBHMEUGByqGSLE+AQAwOjA4BggrBgEFBQcCARYsaHR0cDovL3d3 dy5nbG9iYWxzaWduLm5ldC9yZXBvc2l0b3J5L2Nwcy5jZm0wDgYDVR0PAQH/BAQD AgWgMB8GA1UdIwQYMBaAFGVloz3XOxGjCgclN8lCSlt2d1DhMB0GA1UdDgQWBBT2 Kk+xTCHn9liPd2R49AnPZw0rAzA6BgNVHR8EMzAxMC+gLaArhilodHRwOi8vY3Js Lmdsb2JhbHNpZ24ubmV0L2VkdWNhdGlvbmFsLmNybDBPBggrBgEFBQcBAQRDMEEw PwYIKwYBBQUHMAKGM2h0dHA6Ly9zZWN1cmUuZ2xvYmFsc2lnbi5uZXQvY2FjZXJ0 L2VkdWNhdGlvbmFsLmNydDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIw HQYDVR0RBBYwFIISaWRwLnVuaXYtbGlsbGUxLmZyMA0GCSqGSIb3DQEBBQUAA4IB AQANryHVJIc6bXFg3V7yI4IPasTDQq3Ck0vQkJJkr9wqyGXhOQ7izDw/Wj0ZfY8C 9Zf0BIPaik6Z5PSclkgZrPVkubtSP/GWMGJMTtDFojnzipbJ8cET6JCVaJzNNUKw pZ4fxI2/vu+78/Yti2ExnxUfAVICKBmdxlTvtqgynQ4O+PiygZU4MLc+Dgks+OhZ JfeSJIN4ip5Bl81ij/HkJdIQYbaPrdrqI9t+dCmY3hAeBgfVRPXS++kw0m915Tmr QkcaGbqZaFSW3OkK6wPfpMwBND6fTIWejhVa28wLEx7Jv9WhxmHceWAYA3WIQUuk 1BNKbEAxePsbUMFaQk1PgX3f urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Lille 1 - Sciences et Technologies Université de Lille 1 - Sciences et Technologies http://unknown.site.com claude vieville claude.vieville@univ-lille1.fr brigitte wallaert brigitte.wallaert@univ-lille1.fr services-federation.univ-lille1.fr CN=services-federation.univ-lille1.fr,O=UNIVERSITE LILLE 1 - SCIENCES ET TECHNOLOGIES,C=FR MIIDKjCCApOgAwIBAgIBADANBgkqhkiG9w0BAQUFADByMQswCQYDVQQGEwJGUjE2 MDQGA1UEChMtVU5JVkVSU0lURSBMSUxMRSAxIC0gU0NJRU5DRVMgRVQgVEVDSE5P TE9HSUVTMSswKQYDVQQDEyJzZXJ2aWNlcy1mZWRlcmF0aW9uLnVuaXYtbGlsbGUx LmZyMB4XDTA5MTIwMzA4MzcxM1oXDTI5MTEyODA4MzcxM1owcjELMAkGA1UEBhMC RlIxNjA0BgNVBAoTLVVOSVZFUlNJVEUgTElMTEUgMSAtIFNDSUVOQ0VTIEVUIFRF Q0hOT0xPR0lFUzErMCkGA1UEAxMic2VydmljZXMtZmVkZXJhdGlvbi51bml2LWxp bGxlMS5mcjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuZxqmrM9qtCnYl47 BcC9df051vjgY2SnyH91r9kNUsYmbZEUDf0AVfLZzcMYtq+vRu2YAWXsStRK85nD 4iNoPqZfW6gRI/cgBRPLdWLLUXHam4xq6EVGn8LDhE1J5DQVuRwwgDgUteBgFsXO YCVPxq9dfteJAGAv7JXvvY7/H+sCAwEAAaOBzzCBzDAdBgNVHQ4EFgQUFYErP7uE pwB73TEdYu2AJXUFA4AwgZwGA1UdIwSBlDCBkYAUFYErP7uEpwB73TEdYu2AJXUF A4ChdqR0MHIxCzAJBgNVBAYTAkZSMTYwNAYDVQQKEy1VTklWRVJTSVRFIExJTExF IDEgLSBTQ0lFTkNFUyBFVCBURUNITk9MT0dJRVMxKzApBgNVBAMTInNlcnZpY2Vz LWZlZGVyYXRpb24udW5pdi1saWxsZTEuZnKCAQAwDAYDVR0TBAUwAwEB/zANBgkq hkiG9w0BAQUFAAOBgQAm38Xgml1hJJy2tXBszc4TaSNPwK8nuhVWux2AWu9+xTm9 7V2QTUYy2LIJzD2aAom8XAXzfcNDXVTP4n3fxnrQJFBgZK6hOI9HHNcGpYA5pAo9 l5+rbPwtwMLJ5p+AKbG03eSW6dkUlo7YZSmSx1CX1lmoZ/XnzmiiV/2vgcj7Og== services-federation.univ-lille1.fr CN=services-federation.univ-lille1.fr,O=UNIVERSITE LILLE 1 - SCIENCES ET TECHNOLOGIES,C=FR MIIDKjCCApOgAwIBAgIBADANBgkqhkiG9w0BAQUFADByMQswCQYDVQQGEwJGUjE2 MDQGA1UEChMtVU5JVkVSU0lURSBMSUxMRSAxIC0gU0NJRU5DRVMgRVQgVEVDSE5P TE9HSUVTMSswKQYDVQQDEyJzZXJ2aWNlcy1mZWRlcmF0aW9uLnVuaXYtbGlsbGUx LmZyMB4XDTA5MTIwMzA4MzcxM1oXDTI5MTEyODA4MzcxM1owcjELMAkGA1UEBhMC RlIxNjA0BgNVBAoTLVVOSVZFUlNJVEUgTElMTEUgMSAtIFNDSUVOQ0VTIEVUIFRF Q0hOT0xPR0lFUzErMCkGA1UEAxMic2VydmljZXMtZmVkZXJhdGlvbi51bml2LWxp bGxlMS5mcjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuZxqmrM9qtCnYl47 BcC9df051vjgY2SnyH91r9kNUsYmbZEUDf0AVfLZzcMYtq+vRu2YAWXsStRK85nD 4iNoPqZfW6gRI/cgBRPLdWLLUXHam4xq6EVGn8LDhE1J5DQVuRwwgDgUteBgFsXO YCVPxq9dfteJAGAv7JXvvY7/H+sCAwEAAaOBzzCBzDAdBgNVHQ4EFgQUFYErP7uE pwB73TEdYu2AJXUFA4AwgZwGA1UdIwSBlDCBkYAUFYErP7uEpwB73TEdYu2AJXUF A4ChdqR0MHIxCzAJBgNVBAYTAkZSMTYwNAYDVQQKEy1VTklWRVJTSVRFIExJTExF IDEgLSBTQ0lFTkNFUyBFVCBURUNITk9MT0dJRVMxKzApBgNVBAMTInNlcnZpY2Vz LWZlZGVyYXRpb24udW5pdi1saWxsZTEuZnKCAQAwDAYDVR0TBAUwAwEB/zANBgkq hkiG9w0BAQUFAAOBgQAm38Xgml1hJJy2tXBszc4TaSNPwK8nuhVWux2AWu9+xTm9 7V2QTUYy2LIJzD2aAom8XAXzfcNDXVTP4n3fxnrQJFBgZK6hOI9HHNcGpYA5pAo9 l5+rbPwtwMLJ5p+AKbG03eSW6dkUlo7YZSmSx1CX1lmoZ/XnzmiiV/2vgcj7Og== univ-lille2.fr MIIDUDCCAjigAwIBAgIVAMGBW7xEJzxaIuasEf62mP89AVYTMA0GCSqGSIb3DQEB BQUAMCQxIjAgBgNVBAMTGXNoaWJib2xldGgudW5pdi1saWxsZTIuZnIwHhcNMDkw MzI1MTQxODQwWhcNMjkwMzI1MTMxODQwWjAkMSIwIAYDVQQDExlzaGliYm9sZXRo LnVuaXYtbGlsbGUyLmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA hCp8sq+DNFYps5M4M7FvBkoqykn4y65TFoXzfaa/KmDteGdENaWf047z4lIw5blD M50qlhkK/Rsdez4tbQ9/PFkryiAA3ZSrjTQmk4wHCAJX3l4KSyViWItQFHxDeJli C10JkMKZH8JSHDj2+/Ci9QZqgM4bFg3L8Ke90KhY4V7SuPjBxwtGh9Ll3YeKuUBo J9AFpoQgxQ7prCseOvjQipReq7qvtL5H6CrR7vbHMVnd0vpS2HZzfCS0SqTNebD/ 7jmrRuGrMMuDCrnk85u5dHhBD+FjMy8CFpHRYenKWz+JhiNFpzNYo9XCrrTFalg9 FpX5GU0jueQasGTgLvuYUwIDAQABo3kwdzBWBgNVHREETzBNghlzaGliYm9sZXRo LnVuaXYtbGlsbGUyLmZyhjBodHRwczovL3NoaWJib2xldGgudW5pdi1saWxsZTIu ZnIvaWRwL3NoaWJib2xldGgwHQYDVR0OBBYEFC1SkCDSiCXLRCewbAIaFGs7ZHAv MA0GCSqGSIb3DQEBBQUAA4IBAQAj08Cjg156PnRh6n2Uhv00qqUgAuyPT3kyP3tU M7sm3SG6cvv2vbwQbziFC0+IJU+qg04wPwVkPCGBDLnFvFByzDsDyZWZzt7p+U7r oRnikOFpHlEO2JlREDFFLCfTKu76mTQAyAdPuRlUW4BxDYQ/ALiqTrkBGPtKP7bs bdUhi8BWWR4dHjd52atAS7UAu84yhRU9DwdOReykfRNnNcN2bhg/wrRDwuPEsjiV bbWBp26wJq0bLOVvQcU2EELNVgd02tgX0lDMRS4RJ2upPgd+A7CFabjbUxrMTKSI J29lKpifBRU+X7v11Kyj/MTCPuxGjgv9uu7SJPeMKkETrsWc urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Lille 2 Droit et Santé Université de Lille 2 Droit et Santé http://unknown.site.com François Périchon francois.perichon@univ-lille2.fr univ-lille3.fr MIIEzTCCA7WgAwIBAgIQYDIh1KY11M3WgvldGfZ7RjANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTEwMDEyNzAwMDAwMFoXDTEzMDEyNjIzNTk1OVowgaUxCzAJBgNV BAYTAkZSMRowGAYDVQQHExFWSUxMRU5FVVZFIEQnQVNDUTEwMC4GA1UECgwnVW5p dmVyc2l0w6kgQ2hhcmxlcyBkZSBHYXVsbGUgLSBMaWxsZSAzMSswKQYDVQQLEyJD ZW50cmUgZGUgUmVzc291cmNlcyBJbmZvcm1hdGlxdWVzMRswGQYDVQQDExJpZHAu dW5pdi1saWxsZTMuZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC/ lljw0dMtyxsufKDjv4+JXtAsPcVkGU29ZeWhP/m8z7QcnZD2AvmXAk/BR7IQqAKY cDyUamIiVP1XRm3WGIfHpwWuy8AKEUHE5QgJB/rMXa5fArai9ec+7tMPiueFUwHk 3g4DGj6x8e91Cv8a1j6csP8/0y+qUNeaRPUNbCbtyqdwKvqpI23zceLaxJD1Uaqp 23i9WIRY49leYoAPdPqldj3pxj4dKZhOJxqU0K/3y6gG2/LfoSXlsM8a9JXLWaWk CBrgLLuOsFE2DRneIOgZJjr8s9pydvOHeCgFk6693eVbodQlUaVIuZfBEW3u0naO Wq69LY0S0aD2gCmHaziFAgMBAAGjggFlMIIBYTAfBgNVHSMEGDAWgBQMvZNoDPPe q6NJays3V0fqkOO57TAdBgNVHQ4EFgQUeBYv24vRi/V67b1lEfk2+y9rWBwwDgYD VR0PAQH/BAQDAgWgMAwGA1UdEwEB/wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEG CCsGAQUFBwMCMBgGA1UdIAQRMA8wDQYLKwYBBAGyMQECAh0wOgYDVR0fBDMwMTAv oC2gK4YpaHR0cDovL2NybC50Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcmww bQYIKwYBBQUHAQEEYTBfMDUGCCsGAQUFBzAChilodHRwOi8vY3J0LnRjcy50ZXJl bmEub3JnL1RFUkVOQVNTTENBLmNydDAmBggrBgEFBQcwAYYaaHR0cDovL29jc3Au dGNzLnRlcmVuYS5vcmcwHQYDVR0RBBYwFIISaWRwLnVuaXYtbGlsbGUzLmZyMA0G CSqGSIb3DQEBBQUAA4IBAQBVtPB0DhSyKb6wpRRWt/zyCD4KyfmcifHTpmX/+Uqy UisGAqs3F9GaPBBTSfw++n8IeH/tzHXz+8+bz0q0XvB9ibN6oAZ7PpqhvKMOjiv7 rfqbEoaK6FU4IHrLGI8iwxZXrHgRTUraoldd2eDpDa5ccMgWlYpz8WR3t8/tt2/R c2Ou12Nl05z0FtAPTFgflsBKd0PQTEDvpkyR8sHxG1pagcMtRxrT+F8T34h0QEZe xO+4QSEL3ssYjePmj6Oj154B1v9ghnsSIcbokzfXI07d51wpy0zGpdDDOJglheMu MXsvpupYbpRaf9GGX6Eu5xRuvQN/dFK6o4rzHEbgL3Ri urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient univ-lille3.fr MIIEzTCCA7WgAwIBAgIQYDIh1KY11M3WgvldGfZ7RjANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTEwMDEyNzAwMDAwMFoXDTEzMDEyNjIzNTk1OVowgaUxCzAJBgNV BAYTAkZSMRowGAYDVQQHExFWSUxMRU5FVVZFIEQnQVNDUTEwMC4GA1UECgwnVW5p dmVyc2l0w6kgQ2hhcmxlcyBkZSBHYXVsbGUgLSBMaWxsZSAzMSswKQYDVQQLEyJD ZW50cmUgZGUgUmVzc291cmNlcyBJbmZvcm1hdGlxdWVzMRswGQYDVQQDExJpZHAu dW5pdi1saWxsZTMuZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC/ lljw0dMtyxsufKDjv4+JXtAsPcVkGU29ZeWhP/m8z7QcnZD2AvmXAk/BR7IQqAKY cDyUamIiVP1XRm3WGIfHpwWuy8AKEUHE5QgJB/rMXa5fArai9ec+7tMPiueFUwHk 3g4DGj6x8e91Cv8a1j6csP8/0y+qUNeaRPUNbCbtyqdwKvqpI23zceLaxJD1Uaqp 23i9WIRY49leYoAPdPqldj3pxj4dKZhOJxqU0K/3y6gG2/LfoSXlsM8a9JXLWaWk CBrgLLuOsFE2DRneIOgZJjr8s9pydvOHeCgFk6693eVbodQlUaVIuZfBEW3u0naO Wq69LY0S0aD2gCmHaziFAgMBAAGjggFlMIIBYTAfBgNVHSMEGDAWgBQMvZNoDPPe q6NJays3V0fqkOO57TAdBgNVHQ4EFgQUeBYv24vRi/V67b1lEfk2+y9rWBwwDgYD VR0PAQH/BAQDAgWgMAwGA1UdEwEB/wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEG CCsGAQUFBwMCMBgGA1UdIAQRMA8wDQYLKwYBBAGyMQECAh0wOgYDVR0fBDMwMTAv oC2gK4YpaHR0cDovL2NybC50Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcmww bQYIKwYBBQUHAQEEYTBfMDUGCCsGAQUFBzAChilodHRwOi8vY3J0LnRjcy50ZXJl bmEub3JnL1RFUkVOQVNTTENBLmNydDAmBggrBgEFBQcwAYYaaHR0cDovL29jc3Au dGNzLnRlcmVuYS5vcmcwHQYDVR0RBBYwFIISaWRwLnVuaXYtbGlsbGUzLmZyMA0G CSqGSIb3DQEBBQUAA4IBAQBVtPB0DhSyKb6wpRRWt/zyCD4KyfmcifHTpmX/+Uqy UisGAqs3F9GaPBBTSfw++n8IeH/tzHXz+8+bz0q0XvB9ibN6oAZ7PpqhvKMOjiv7 rfqbEoaK6FU4IHrLGI8iwxZXrHgRTUraoldd2eDpDa5ccMgWlYpz8WR3t8/tt2/R c2Ou12Nl05z0FtAPTFgflsBKd0PQTEDvpkyR8sHxG1pagcMtRxrT+F8T34h0QEZe xO+4QSEL3ssYjePmj6Oj154B1v9ghnsSIcbokzfXI07d51wpy0zGpdDDOJglheMu MXsvpupYbpRaf9GGX6Eu5xRuvQN/dFK6o4rzHEbgL3Ri urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Lille 3 Université de Lille 3 http://unknown.site.com DEROSIAUX Sylvain cri.shibboleth@univ-lille3.fr unilim.fr MIIDNzCCAh+gAwIBAgIUCJLJlFRsGEvjGAk03CmBdGzPqAswDQYJKoZIhvcNAQEF BQAwHjEcMBoGA1UEAxMTaWRlbnQtbmV3LnVuaWxpbS5mcjAeFw0xMTA0MDgwOTU1 NDRaFw0zMTA0MDgwOTU1NDRaMB4xHDAaBgNVBAMTE2lkZW50LW5ldy51bmlsaW0u ZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCHrcGQOpTbOfurHfSP YaPZ/HFB3HJYouQKiNu3ZmG3f/jFB5MXJjjqA0ujs7Bgd6yq78ub/jQUANafNXFm r51YIHYLFWULQLBQEbN0wOj7q41UAi/Unw57WTQ7b878WGN1PF9IjrrQK5D7qxQD 6B4rXYr0f6ke9RK6az0ukAESyvClxg2J9xLi+StcilwzD/hh1t4KkFcLCg7r7l+s MN+/NoDeiC9D5EI/GdVnAcyVhlBqH3lvhEAd2/d0coTs11IOcuNQV9UD7G1FZxVW XRgKEysU+9kwK0OJcXIO4ECr35MZZKJzp/qJ6sq1LVeGYW4ceSJphlKk1EBIPS2H VAj3AgMBAAGjbTBrMEoGA1UdEQRDMEGCE2lkZW50LW5ldy51bmlsaW0uZnKGKmh0 dHBzOi8vaWRlbnQtbmV3LnVuaWxpbS5mci9pZHAvc2hpYmJvbGV0aDAdBgNVHQ4E FgQUORrgoAo4rJzB+VbHl2vNbQUkEYAwDQYJKoZIhvcNAQEFBQADggEBACJSI3QE HRMtzbd1h4fRrefD3DRSpg/W6nOEAFNseTeShU6xwBQPI/U+GGOCCPgNF1cdMSFB wnRPLlFjcNDfah2SznWI2yCjz/Lh4Zb+8xmWMUnQ/Rg5ECKahbMQY81xCWDVIOff fr3TPxIcSEJT8CRz7HhIqcnQ6Svuu+Aj6l0wx7lSa/45MhlxMC0gyQeWvjG9i1VO wixNzp6SP7pbBch2TajO9mKgGh15wzU/aO19dXpUO/bpAgNfcOlpd+LlRtQ6AaO+ /rzAmJBWj5oXmNLIuWfDZDz9I6/SSJmsK3i8tTAKxKK3YslapJiwApPNPfAbH5Ac 4dTyIRHkjWvItKk= MIIEfjCCA2agAwIBAgIQLbqT0pu98+5Lzz3fkCALHDANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTA5MTExODAwMDAwMFoXDTEyMTExNzIzNTk1OVowWjELMAkGA1UE BhMCRlIxEDAOBgNVBAcTB0xpbW9nZXMxHzAdBgNVBAoMFlVuaXZlcnNpdMOpIGRl IExpbW9nZXMxGDAWBgNVBAMTD2lkZW50LnVuaWxpbS5mcjCCASIwDQYJKoZIhvcN AQEBBQADggEPADCCAQoCggEBAJcLjOx0+d3V+iv0tHb69oghw1pLxhwLFFqaQT2E zD31VZQD2A7Jv3LMF8gW3p4+8TVkQci3y5lSZhx0/cmXY3e/EDUqzaCqqtqvhOwj etJrLD3uKLvctXqzS+47pwYZsbJ3X1I0rk+ji5G2bpHRLuF3sKSsu9ObnfC/hLFF OelIthD3Sq/4VUxjnX2KP8BEhmXJWP0GcdR89uS2k0RiUQ+uWyRgKGX/UEX14kMb HRr7HOPIcjTH4oweilMa4mS0jBH3B2PIiLw95y1suJPZR5LlNrPBcaGNaMns6KZX wEtiIdtdrFpO4nj8vzh9b/iG2KNL8MlmJUDeSAH498pxrlUCAwEAAaOCAWIwggFe MB8GA1UdIwQYMBaAFAy9k2gM896ro0lrKzdXR+qQ47ntMB0GA1UdDgQWBBQF3yxd bv4AW1IEOuYK61oTFh2BjDAOBgNVHQ8BAf8EBAMCBaAwDAYDVR0TAQH/BAIwADAd BgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwGAYDVR0gBBEwDzANBgsrBgEE AbIxAQICHTA6BgNVHR8EMzAxMC+gLaArhilodHRwOi8vY3JsLnRjcy50ZXJlbmEu b3JnL1RFUkVOQVNTTENBLmNybDBtBggrBgEFBQcBAQRhMF8wNQYIKwYBBQUHMAKG KWh0dHA6Ly9jcnQudGNzLnRlcmVuYS5vcmcvVEVSRU5BU1NMQ0EuY3J0MCYGCCsG AQUFBzABhhpodHRwOi8vb2NzcC50Y3MudGVyZW5hLm9yZzAaBgNVHREEEzARgg9p ZGVudC51bmlsaW0uZnIwDQYJKoZIhvcNAQEFBQADggEBACeY/rIf7EJZz9Qb65Se DLvD+msZFoh87y1Vpnig2vai47C/0N+ojaDPeiF3p6q3B4G9s4kb9pHwxTNufAwe FJzfHm++zFNhidzROeM0t6zyJPVk+ZUG3GBLKDMDJRXPms/15Z3Va/RYGJJC4JUn HM/N/7Za5edII3Imi/G+MsSEbxHIpIijcWfUptlCEj2D07P+xpXEW9FaT0It5pEz QAVywTpD+KyTsKxxNX4b2DCY52PufEdzyUaSJdE/mQ9Q7TaEH/2EgwXNbDPiEzxX Ky8Tl196s2bEKl7+k3H+C5WiLQakO5M++it3+qe5qV4MiC74AR9IBPlNP/wQv6lu 3Tw= urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Limoges Université de Limoges http://unknown.site.com Lainé Jean-Pierre fed-admin@unilim.fr Lafaille Yvon fed-admin@unilim.fr MIIDzTCCArWgAwIBAgIJAJUUb+hioapaMA0GCSqGSIb3DQEBBQUAME0xCzAJBgNV BAYTAkZSMR4wHAYDVQQKExVQUkVTIE5BTkNZIFVOSVZFUlNJVEUxHjAcBgNVBAMT FWFycGUudW5pdi1sb3JyYWluZS5mcjAeFw0xMTAzMTcxMDI1MDRaFw0zMTAzMTIx MDI1MDRaME0xCzAJBgNVBAYTAkZSMR4wHAYDVQQKExVQUkVTIE5BTkNZIFVOSVZF UlNJVEUxHjAcBgNVBAMTFWFycGUudW5pdi1sb3JyYWluZS5mcjCCASIwDQYJKoZI hvcNAQEBBQADggEPADCCAQoCggEBANx7kHaVSM/hhBWXIXUKWlAe5WoLiBL8/s1E AqduEV5m/vjK5BrkGJiqu5ixt2pfjq4ZzxKizAd4jQXVutBGufZY5LwQfnei2RdU Kz1lAKBens68bjX7dyKKqKtAHmDFmJxQCj3yeBd+FRH/55TLyXm4+jfOwmKGOEgU coKzKeNwhw0IROmggW+Qy+BiDL4SOTz2iHUpeSrtLVWcfO1ih+njgKhmL710QKUi tCFi85cP/IGyp0Kr1OhJACpQR5VzASuatR1xw9RytE4VYMxC4UVRCIpYaMJNl+Hk W1mp0/A5/QY9YU/0IMixMwAXCtVrVvyQubd7abKiGd25hy048Z8CAwEAAaOBrzCB rDAdBgNVHQ4EFgQUZuDmOb2ewSlx445LR3ohpZWGqLIwfQYDVR0jBHYwdIAUZuDm Ob2ewSlx445LR3ohpZWGqLKhUaRPME0xCzAJBgNVBAYTAkZSMR4wHAYDVQQKExVQ UkVTIE5BTkNZIFVOSVZFUlNJVEUxHjAcBgNVBAMTFWFycGUudW5pdi1sb3JyYWlu ZS5mcoIJAJUUb+hioapaMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEB AEHgbAQ6soQ+3428UI3IyIB/JO8AJs+X5WppAd8d1WpXSbwpSL37pJbV1wim9i4f 2OpQN5E/lIGbbFOTBT5f2k7gITkBk1VivkNB5lq73PtYM/67CeA2OU1tcCnQ/w5O r8iI4RxAkgWrg0KF3BAoGjvOLeO2gvuyMPt6A5gSdOP0xDBb5YPmD5/LtgKlCplZ IRBxQZoQ1qubsmGPf71zm2yfcX/i0mnWux2I0lR23S0reI+hMDFHzcRY5KOe2F3E upXqzREPyF0MZ4K+DJidV+SYE9wHMw6ar0RhGU84V+qJZnfRzQX69LAPC5730w/s XIWjvbyojEUg9+OxDNw+rPY= MIIDzTCCArWgAwIBAgIJAJUUb+hioapaMA0GCSqGSIb3DQEBBQUAME0xCzAJBgNV BAYTAkZSMR4wHAYDVQQKExVQUkVTIE5BTkNZIFVOSVZFUlNJVEUxHjAcBgNVBAMT FWFycGUudW5pdi1sb3JyYWluZS5mcjAeFw0xMTAzMTcxMDI1MDRaFw0zMTAzMTIx MDI1MDRaME0xCzAJBgNVBAYTAkZSMR4wHAYDVQQKExVQUkVTIE5BTkNZIFVOSVZF UlNJVEUxHjAcBgNVBAMTFWFycGUudW5pdi1sb3JyYWluZS5mcjCCASIwDQYJKoZI hvcNAQEBBQADggEPADCCAQoCggEBANx7kHaVSM/hhBWXIXUKWlAe5WoLiBL8/s1E AqduEV5m/vjK5BrkGJiqu5ixt2pfjq4ZzxKizAd4jQXVutBGufZY5LwQfnei2RdU Kz1lAKBens68bjX7dyKKqKtAHmDFmJxQCj3yeBd+FRH/55TLyXm4+jfOwmKGOEgU coKzKeNwhw0IROmggW+Qy+BiDL4SOTz2iHUpeSrtLVWcfO1ih+njgKhmL710QKUi tCFi85cP/IGyp0Kr1OhJACpQR5VzASuatR1xw9RytE4VYMxC4UVRCIpYaMJNl+Hk W1mp0/A5/QY9YU/0IMixMwAXCtVrVvyQubd7abKiGd25hy048Z8CAwEAAaOBrzCB rDAdBgNVHQ4EFgQUZuDmOb2ewSlx445LR3ohpZWGqLIwfQYDVR0jBHYwdIAUZuDm Ob2ewSlx445LR3ohpZWGqLKhUaRPME0xCzAJBgNVBAYTAkZSMR4wHAYDVQQKExVQ UkVTIE5BTkNZIFVOSVZFUlNJVEUxHjAcBgNVBAMTFWFycGUudW5pdi1sb3JyYWlu ZS5mcoIJAJUUb+hioapaMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEB AEHgbAQ6soQ+3428UI3IyIB/JO8AJs+X5WppAd8d1WpXSbwpSL37pJbV1wim9i4f 2OpQN5E/lIGbbFOTBT5f2k7gITkBk1VivkNB5lq73PtYM/67CeA2OU1tcCnQ/w5O r8iI4RxAkgWrg0KF3BAoGjvOLeO2gvuyMPt6A5gSdOP0xDBb5YPmD5/LtgKlCplZ IRBxQZoQ1qubsmGPf71zm2yfcX/i0mnWux2I0lR23S0reI+hMDFHzcRY5KOe2F3E upXqzREPyF0MZ4K+DJidV+SYE9wHMw6ar0RhGU84V+qJZnfRzQX69LAPC5730w/s XIWjvbyojEUg9+OxDNw+rPY= urn:mace:shibboleth:1.0:nameIdentifier Vincent MATHIEU contact-fed@univ-nancy2.fr Benjamin SECLIER Benjamin.seclier@univ-nancy2.fr MIIEoTCCA4mgAwIBAgIRAPfbi5aK3vLHuqD1Ue4j56wwDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0xMTAzMjEwMDAwMDBaFw0xNDAzMjAyMzU5NTlaMFIxCzAJBgNV BAYTAkZSMR4wHAYDVQQKExVQUkVTIE5BTkNZIFVOSVZFUlNJVEUxIzAhBgNVBAMT GmJhc2VzLWRvYy51bml2LWxvcnJhaW5lLmZyMIIBIjANBgkqhkiG9w0BAQEFAAOC AQ8AMIIBCgKCAQEAwN0nD8s7Y6C1wyA279oTEzg18jsWoAzDFZfSZDj6HIWM24Yn IalXCES8FXdFDoOL2/eAevVk6r5hwPpCJc17y3GJhvNtCQDPFvyvcD9ctiS2U1I+ Al1FRxP3NOonxx2RTTt7FW+Z63/plVgjOtU7IMlTadU17i8gTKMdqEpZppk7Djfn Byyb/mZItVx750XC+rn2mrHFwIdMMr5J/cB5CHfe6JDIiSh9azGvhI0mjBBWdlbC 1C7tQoJG4df8ClN4FJOkyXRilRSs+GdYazEfQwyM8sc7dsBNlOo/w08UUjJZyENY WOq567CTBtDuzJ9y6rh2qoKf/A3WIo1Nhh8sEwIDAQABo4IBjDCCAYgwHwYDVR0j BBgwFoAUDL2TaAzz3qujSWsrN1dH6pDjue0wHQYDVR0OBBYEFEZj5lT5iheZPjrB IsyTwWlQY2ABMA4GA1UdDwEB/wQEAwIFoDAMBgNVHRMBAf8EAjAAMB0GA1UdJQQW MBQGCCsGAQUFBwMBBggrBgEFBQcDAjAYBgNVHSAEETAPMA0GCysGAQQBsjEBAgId MDoGA1UdHwQzMDEwL6AtoCuGKWh0dHA6Ly9jcmwudGNzLnRlcmVuYS5vcmcvVEVS RU5BU1NMQ0EuY3JsMG0GCCsGAQUFBwEBBGEwXzA1BggrBgEFBQcwAoYpaHR0cDov L2NydC50Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcnQwJgYIKwYBBQUHMAGG Gmh0dHA6Ly9vY3NwLnRjcy50ZXJlbmEub3JnMEQGA1UdEQQ9MDuCGmJhc2VzLWRv Yy51bml2LWxvcnJhaW5lLmZygh1iYXNlcy1kb2MubmFuY3ktdW5pdmVyc2l0ZS5m cjANBgkqhkiG9w0BAQUFAAOCAQEAvbkOPUgd2Q4b/KZOx559U49qhzjK/MzHmJmO 0T3pfHAE91/UFG6EL9hB+MvKa+RkTUG/TIFnjHIHwXCUoEu1py9BQsEQZS1cnawu I8AlhZNDyp8M8MKvDuvlLBDQPRDdTutraewamwN5QUAx2sdWDPFT5uVU8qXsG6Cz /PeIOIrXBmoNBcO4O1KXzRDWVmMj9Yk74KZ0FSd4Y/74Z7/EXbnyQsd4tcVRC9bP 3/Z75c9R0zlshTxil3GIHQrgf1bQ+LvSBzwUednkGw4Y3Uy4Xj/cmy9EjAJGDU8Q A+H2RbU3BDBh5EXAcXOMMzZuXBAVJ4CXm7SigT4qO2ITHCj6RQ== MIIEoTCCA4mgAwIBAgIRAPfbi5aK3vLHuqD1Ue4j56wwDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0xMTAzMjEwMDAwMDBaFw0xNDAzMjAyMzU5NTlaMFIxCzAJBgNV BAYTAkZSMR4wHAYDVQQKExVQUkVTIE5BTkNZIFVOSVZFUlNJVEUxIzAhBgNVBAMT GmJhc2VzLWRvYy51bml2LWxvcnJhaW5lLmZyMIIBIjANBgkqhkiG9w0BAQEFAAOC AQ8AMIIBCgKCAQEAwN0nD8s7Y6C1wyA279oTEzg18jsWoAzDFZfSZDj6HIWM24Yn IalXCES8FXdFDoOL2/eAevVk6r5hwPpCJc17y3GJhvNtCQDPFvyvcD9ctiS2U1I+ Al1FRxP3NOonxx2RTTt7FW+Z63/plVgjOtU7IMlTadU17i8gTKMdqEpZppk7Djfn Byyb/mZItVx750XC+rn2mrHFwIdMMr5J/cB5CHfe6JDIiSh9azGvhI0mjBBWdlbC 1C7tQoJG4df8ClN4FJOkyXRilRSs+GdYazEfQwyM8sc7dsBNlOo/w08UUjJZyENY WOq567CTBtDuzJ9y6rh2qoKf/A3WIo1Nhh8sEwIDAQABo4IBjDCCAYgwHwYDVR0j BBgwFoAUDL2TaAzz3qujSWsrN1dH6pDjue0wHQYDVR0OBBYEFEZj5lT5iheZPjrB IsyTwWlQY2ABMA4GA1UdDwEB/wQEAwIFoDAMBgNVHRMBAf8EAjAAMB0GA1UdJQQW MBQGCCsGAQUFBwMBBggrBgEFBQcDAjAYBgNVHSAEETAPMA0GCysGAQQBsjEBAgId MDoGA1UdHwQzMDEwL6AtoCuGKWh0dHA6Ly9jcmwudGNzLnRlcmVuYS5vcmcvVEVS RU5BU1NMQ0EuY3JsMG0GCCsGAQUFBwEBBGEwXzA1BggrBgEFBQcwAoYpaHR0cDov L2NydC50Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcnQwJgYIKwYBBQUHMAGG Gmh0dHA6Ly9vY3NwLnRjcy50ZXJlbmEub3JnMEQGA1UdEQQ9MDuCGmJhc2VzLWRv Yy51bml2LWxvcnJhaW5lLmZygh1iYXNlcy1kb2MubmFuY3ktdW5pdmVyc2l0ZS5m cjANBgkqhkiG9w0BAQUFAAOCAQEAvbkOPUgd2Q4b/KZOx559U49qhzjK/MzHmJmO 0T3pfHAE91/UFG6EL9hB+MvKa+RkTUG/TIFnjHIHwXCUoEu1py9BQsEQZS1cnawu I8AlhZNDyp8M8MKvDuvlLBDQPRDdTutraewamwN5QUAx2sdWDPFT5uVU8qXsG6Cz /PeIOIrXBmoNBcO4O1KXzRDWVmMj9Yk74KZ0FSd4Y/74Z7/EXbnyQsd4tcVRC9bP 3/Z75c9R0zlshTxil3GIHQrgf1bQ+LvSBzwUednkGw4Y3Uy4Xj/cmy9EjAJGDU8Q A+H2RbU3BDBh5EXAcXOMMzZuXBAVJ4CXm7SigT4qO2ITHCj6RQ== urn:mace:shibboleth:1.0:nameIdentifier Vincent MATHIEU contact-fed@univ-nancy2.fr Benjamin SECLIER Benjamin.Seclier@univ-nancy2.fr MIIDyjCCArKgAwIBAgIJALIKtzGdLb1HMA0GCSqGSIb3DQEBBQUAMEwxCzAJBgNV BAYTAkZSMR4wHAYDVQQKExVQUkVTIE5BTkNZIFVOSVZFUlNJVEUxHTAbBgNVBAMT FGV0Yy51bml2LWxvcnJhaW5lLmZyMB4XDTExMDMxNzEwMjkwMVoXDTMxMDMxMjEw MjkwMVowTDELMAkGA1UEBhMCRlIxHjAcBgNVBAoTFVBSRVMgTkFOQ1kgVU5JVkVS U0lURTEdMBsGA1UEAxMUZXRjLnVuaXYtbG9ycmFpbmUuZnIwggEiMA0GCSqGSIb3 DQEBAQUAA4IBDwAwggEKAoIBAQC+rwGrdBgX8fwb+XSmN0jsSwnwm+ISYtWDsAEH KsyNfWQ65/qhcpgYge7nzGS6KJular+u/Q+5YzWJGCqB21CG3QrmhrdUJnsAfVmz 7sWlQGGuYq9CbX7z3w3nIvPZE787HHU5RxBsoJRUK5FqmANvHEXxc9GEm2ZSQZ76 KI8YuimP4eCUWNF3pWP0gqp68a6o6S5yvUK7ta0auFQ8fjzE0CFsgOKI4w8tJD5m lv+srjV2UJDC0U+Bz2Co1OeLtBahj//quHYywk9W1DN7IdGohnL4HU9kc9iVunVx g9BKXUdFPu5mMtqq8ANSFEcAscfybsHsEXwhKssDSNJjF9k9AgMBAAGjga4wgasw HQYDVR0OBBYEFOhFAK7iexFDnMA4Hljd45MbzS/YMHwGA1UdIwR1MHOAFOhFAK7i exFDnMA4Hljd45MbzS/YoVCkTjBMMQswCQYDVQQGEwJGUjEeMBwGA1UEChMVUFJF UyBOQU5DWSBVTklWRVJTSVRFMR0wGwYDVQQDExRldGMudW5pdi1sb3JyYWluZS5m coIJALIKtzGdLb1HMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAJj9 Eakl0ROrB/rndb2574fG6GpRdjus68htEd/b4MWFFLMLDtK82Ac1Mnf4iEzQvqW1 fX16fnxpH52D4PQxdBh/SHrpNIgf4PkP1EUJLdP8z/I5oTATUn2+TYFA84qFQvKe z/+4FWvgibyaodcGuzG7kd+2EzjMEFcAQJf2oBURq99FNk5aZoNuS0K3v3hE23H0 jlKIqCwXhBbu24comeniSQlK3NHGqnhApCjDh/DviY7ufduv/yf58FyyrKFCoJ0T rtphzZX65MR2zG1X16I0hdhIIRfVypjcg1C1jQXK0N0bMqv8+RdEztpNzVzj6Cl/ xrlu5L11ePKnAxNyJn0= MIIDyjCCArKgAwIBAgIJALIKtzGdLb1HMA0GCSqGSIb3DQEBBQUAMEwxCzAJBgNV BAYTAkZSMR4wHAYDVQQKExVQUkVTIE5BTkNZIFVOSVZFUlNJVEUxHTAbBgNVBAMT FGV0Yy51bml2LWxvcnJhaW5lLmZyMB4XDTExMDMxNzEwMjkwMVoXDTMxMDMxMjEw MjkwMVowTDELMAkGA1UEBhMCRlIxHjAcBgNVBAoTFVBSRVMgTkFOQ1kgVU5JVkVS U0lURTEdMBsGA1UEAxMUZXRjLnVuaXYtbG9ycmFpbmUuZnIwggEiMA0GCSqGSIb3 DQEBAQUAA4IBDwAwggEKAoIBAQC+rwGrdBgX8fwb+XSmN0jsSwnwm+ISYtWDsAEH KsyNfWQ65/qhcpgYge7nzGS6KJular+u/Q+5YzWJGCqB21CG3QrmhrdUJnsAfVmz 7sWlQGGuYq9CbX7z3w3nIvPZE787HHU5RxBsoJRUK5FqmANvHEXxc9GEm2ZSQZ76 KI8YuimP4eCUWNF3pWP0gqp68a6o6S5yvUK7ta0auFQ8fjzE0CFsgOKI4w8tJD5m lv+srjV2UJDC0U+Bz2Co1OeLtBahj//quHYywk9W1DN7IdGohnL4HU9kc9iVunVx g9BKXUdFPu5mMtqq8ANSFEcAscfybsHsEXwhKssDSNJjF9k9AgMBAAGjga4wgasw HQYDVR0OBBYEFOhFAK7iexFDnMA4Hljd45MbzS/YMHwGA1UdIwR1MHOAFOhFAK7i exFDnMA4Hljd45MbzS/YoVCkTjBMMQswCQYDVQQGEwJGUjEeMBwGA1UEChMVUFJF UyBOQU5DWSBVTklWRVJTSVRFMR0wGwYDVQQDExRldGMudW5pdi1sb3JyYWluZS5m coIJALIKtzGdLb1HMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAJj9 Eakl0ROrB/rndb2574fG6GpRdjus68htEd/b4MWFFLMLDtK82Ac1Mnf4iEzQvqW1 fX16fnxpH52D4PQxdBh/SHrpNIgf4PkP1EUJLdP8z/I5oTATUn2+TYFA84qFQvKe z/+4FWvgibyaodcGuzG7kd+2EzjMEFcAQJf2oBURq99FNk5aZoNuS0K3v3hE23H0 jlKIqCwXhBbu24comeniSQlK3NHGqnhApCjDh/DviY7ufduv/yf58FyyrKFCoJ0T rtphzZX65MR2zG1X16I0hdhIIRfVypjcg1C1jQXK0N0bMqv8+RdEztpNzVzj6Cl/ xrlu5L11ePKnAxNyJn0= urn:mace:shibboleth:1.0:nameIdentifier Vincent MATHIEU contact-fed@univ-nancy2.fr Benjamin SECLIER Benjamin.Seclier@univ-nancy2.fr MIIC3jCCAkegAwIBAgIJAOMaJU2LDAW6MA0GCSqGSIb3DQEBBQUAMFQxCzAJBgNV BAYTAkZSMSAwHgYDVQQKExdPPVBSRVMgTkFOQ1kgVU5JVkVSU0lURTEjMCEGA1UE AxMacGxhdGluZS1lLnVuaXYtbG9ycmFpbmUuZnIwHhcNMDkxMDA2MTAxNzA4WhcN MjkxMDAxMTAxNzA4WjBUMQswCQYDVQQGEwJGUjEgMB4GA1UEChMXTz1QUkVTIE5B TkNZIFVOSVZFUlNJVEUxIzAhBgNVBAMTGnBsYXRpbmUtZS51bml2LWxvcnJhaW5l LmZyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC7QQvA+fNSD9NjdctjCf4r ogsfSd8ZF3STwGolLXLhXeJ9CPQOQXLP9+GxhCOFUTFa3SO5iaR9GO49ZLGqz94a Zwu423iyBbaU9Yadkgr0mZjy8wlfhhwEjuzle+MbJhLYkNiDbXBumxF6CKmMMP8c p23YJ9YMNzGwnmuWpIeZ1QIDAQABo4G3MIG0MB0GA1UdDgQWBBRdDFtJgaF3UhDq O/ObNpwACRcn2zCBhAYDVR0jBH0we4AUXQxbSYGhd1IQ6jvzmzacAAkXJ9uhWKRW MFQxCzAJBgNVBAYTAkZSMSAwHgYDVQQKExdPPVBSRVMgTkFOQ1kgVU5JVkVSU0lU RTEjMCEGA1UEAxMacGxhdGluZS1lLnVuaXYtbG9ycmFpbmUuZnKCCQDjGiVNiwwF ujAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBADlO7wfX7SjB7Gxa3CMc SK/Cp6gW+lEIvGEK2lGPhBxQIQR/MJ0IBP/cg7X9ScLTu2Q/bDh+XKm215xrshxY C12grBToxZAunJMPC2Akwm0050DcurSq10cuEim2GmHvOnShYkvWawtIbSUqQAmZ 5Ffl+d0avA3gnZev/hTEWXd4 MIIC3jCCAkegAwIBAgIJAOMaJU2LDAW6MA0GCSqGSIb3DQEBBQUAMFQxCzAJBgNV BAYTAkZSMSAwHgYDVQQKExdPPVBSRVMgTkFOQ1kgVU5JVkVSU0lURTEjMCEGA1UE AxMacGxhdGluZS1lLnVuaXYtbG9ycmFpbmUuZnIwHhcNMDkxMDA2MTAxNzA4WhcN MjkxMDAxMTAxNzA4WjBUMQswCQYDVQQGEwJGUjEgMB4GA1UEChMXTz1QUkVTIE5B TkNZIFVOSVZFUlNJVEUxIzAhBgNVBAMTGnBsYXRpbmUtZS51bml2LWxvcnJhaW5l LmZyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC7QQvA+fNSD9NjdctjCf4r ogsfSd8ZF3STwGolLXLhXeJ9CPQOQXLP9+GxhCOFUTFa3SO5iaR9GO49ZLGqz94a Zwu423iyBbaU9Yadkgr0mZjy8wlfhhwEjuzle+MbJhLYkNiDbXBumxF6CKmMMP8c p23YJ9YMNzGwnmuWpIeZ1QIDAQABo4G3MIG0MB0GA1UdDgQWBBRdDFtJgaF3UhDq O/ObNpwACRcn2zCBhAYDVR0jBH0we4AUXQxbSYGhd1IQ6jvzmzacAAkXJ9uhWKRW MFQxCzAJBgNVBAYTAkZSMSAwHgYDVQQKExdPPVBSRVMgTkFOQ1kgVU5JVkVSU0lU RTEjMCEGA1UEAxMacGxhdGluZS1lLnVuaXYtbG9ycmFpbmUuZnKCCQDjGiVNiwwF ujAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBADlO7wfX7SjB7Gxa3CMc SK/Cp6gW+lEIvGEK2lGPhBxQIQR/MJ0IBP/cg7X9ScLTu2Q/bDh+XKm215xrshxY C12grBToxZAunJMPC2Akwm0050DcurSq10cuEim2GmHvOnShYkvWawtIbSUqQAmZ 5Ffl+d0avA3gnZev/hTEWXd4 urn:mace:shibboleth:1.0:nameIdentifier Vincent MATHIEU contact-fed@univ-nancy2.fr Hugues ROUXEL Hugues.Rouxel@univ-nancy2.fr MIICzjCCAjegAwIBAgIJANgaAHm6+tlLMA0GCSqGSIb3DQEBBQUAME8xCzAJBgNV BAYTAkZSMR4wHAYDVQQKExVQUkVTIE5BTkNZIFVOSVZFUlNJVEUxIDAeBgNVBAMT F2xpc3Rlcy51bml2LWxvcnJhaW5lLmZyMB4XDTEwMDIxOTA5NTUyM1oXDTMwMDIx NDA5NTUyM1owTzELMAkGA1UEBhMCRlIxHjAcBgNVBAoTFVBSRVMgTkFOQ1kgVU5J VkVSU0lURTEgMB4GA1UEAxMXbGlzdGVzLnVuaXYtbG9ycmFpbmUuZnIwgZ8wDQYJ KoZIhvcNAQEBBQADgY0AMIGJAoGBANaTJ0v7L3EdGm8jVZin88B96H424KginEXb qL2OKtI0TP41AUaGSGgujLaxKDIQk1QUXBZXJ/KikyWV7wNe2yc0rKm2RIAbK3Ld SQqC7jvF40SdDmUhLsLvg8NOPBO80WsQRi1Qo70OlX5fpZS1iehmzEWHn787nFNc 8i6JTphRAgMBAAGjgbEwga4wHQYDVR0OBBYEFJT1WhParqgULD3xofNjvgdJWy5k MH8GA1UdIwR4MHaAFJT1WhParqgULD3xofNjvgdJWy5koVOkUTBPMQswCQYDVQQG EwJGUjEeMBwGA1UEChMVUFJFUyBOQU5DWSBVTklWRVJTSVRFMSAwHgYDVQQDExds aXN0ZXMudW5pdi1sb3JyYWluZS5mcoIJANgaAHm6+tlLMAwGA1UdEwQFMAMBAf8w DQYJKoZIhvcNAQEFBQADgYEAm1XBtSUeedS/uNRNuLG/MJHVM5gljCaMYxyrA3ne texv+1lCIz2jn/sYlc60qUI6EIxP9l72aCEAYwMBCNoGfIWw5Jq/LJTKS5s2LKIw eueU/oo94OSV2eXRV4GL3yrI2ITJifQ88oXLzGxTnTCirJWnxXUJziREWd/HhMsg tqA= MIICzjCCAjegAwIBAgIJANgaAHm6+tlLMA0GCSqGSIb3DQEBBQUAME8xCzAJBgNV BAYTAkZSMR4wHAYDVQQKExVQUkVTIE5BTkNZIFVOSVZFUlNJVEUxIDAeBgNVBAMT F2xpc3Rlcy51bml2LWxvcnJhaW5lLmZyMB4XDTEwMDIxOTA5NTUyM1oXDTMwMDIx NDA5NTUyM1owTzELMAkGA1UEBhMCRlIxHjAcBgNVBAoTFVBSRVMgTkFOQ1kgVU5J VkVSU0lURTEgMB4GA1UEAxMXbGlzdGVzLnVuaXYtbG9ycmFpbmUuZnIwgZ8wDQYJ KoZIhvcNAQEBBQADgY0AMIGJAoGBANaTJ0v7L3EdGm8jVZin88B96H424KginEXb qL2OKtI0TP41AUaGSGgujLaxKDIQk1QUXBZXJ/KikyWV7wNe2yc0rKm2RIAbK3Ld SQqC7jvF40SdDmUhLsLvg8NOPBO80WsQRi1Qo70OlX5fpZS1iehmzEWHn787nFNc 8i6JTphRAgMBAAGjgbEwga4wHQYDVR0OBBYEFJT1WhParqgULD3xofNjvgdJWy5k MH8GA1UdIwR4MHaAFJT1WhParqgULD3xofNjvgdJWy5koVOkUTBPMQswCQYDVQQG EwJGUjEeMBwGA1UEChMVUFJFUyBOQU5DWSBVTklWRVJTSVRFMSAwHgYDVQQDExds aXN0ZXMudW5pdi1sb3JyYWluZS5mcoIJANgaAHm6+tlLMAwGA1UdEwQFMAMBAf8w DQYJKoZIhvcNAQEFBQADgYEAm1XBtSUeedS/uNRNuLG/MJHVM5gljCaMYxyrA3ne texv+1lCIz2jn/sYlc60qUI6EIxP9l72aCEAYwMBCNoGfIWw5Jq/LJTKS5s2LKIw eueU/oo94OSV2eXRV4GL3yrI2ITJifQ88oXLzGxTnTCirJWnxXUJziREWd/HhMsg tqA= urn:mace:shibboleth:1.0:nameIdentifier Vincent MATHIEU Vincent.Mathieu@univ-nancy2.fr Hugues ROUXEL Hugues.Rouxel@univ-nancy2.fr MIICyDCCAjGgAwIBAgIJALtgz37lHHXOMA0GCSqGSIb3DQEBBQUAME0xCzAJBgNV BAYTAkZSMR4wHAYDVQQKExVQUkVTIE5BTkNZIFVOSVZFUlNJVEUxHjAcBgNVBAMT FXdpa2kudW5pdi1sb3JyYWluZS5mcjAeFw0wOTEyMTcwODUxNDJaFw0yOTEyMTIw ODUxNDJaME0xCzAJBgNVBAYTAkZSMR4wHAYDVQQKExVQUkVTIE5BTkNZIFVOSVZF UlNJVEUxHjAcBgNVBAMTFXdpa2kudW5pdi1sb3JyYWluZS5mcjCBnzANBgkqhkiG 9w0BAQEFAAOBjQAwgYkCgYEA00xXlBIQWAqnUqbVLzo5Kk9JsgTBXo6YAMM0kiu5 18CcvYA/AUq6V3jVHRoNYEnOIHOrGpIhaOIJZI55YzWYuUTYTvJzUCr68cvK3xAr Yd/TlU+YpBSmqFqnJXXDgCPEyw8KX2WGSJ3c+Lh/mmHtiveJXj+yx/WWVm8+w6Bq VG0CAwEAAaOBrzCBrDAdBgNVHQ4EFgQUp8PSsjPmS2eBz3+HYNFUDNfp8tYwfQYD VR0jBHYwdIAUp8PSsjPmS2eBz3+HYNFUDNfp8tahUaRPME0xCzAJBgNVBAYTAkZS MR4wHAYDVQQKExVQUkVTIE5BTkNZIFVOSVZFUlNJVEUxHjAcBgNVBAMTFXdpa2ku dW5pdi1sb3JyYWluZS5mcoIJALtgz37lHHXOMAwGA1UdEwQFMAMBAf8wDQYJKoZI hvcNAQEFBQADgYEAQXzAZClKgMq1fQahdidO83+b1NmsO3JqlVOEKUM6d0qiAR+v J5Or5eUbxKBk9RSFyu27cdYjOlWHt2PIten9lLomKMQTjxLpWwqH907BdrS8a1Y4 1eKcrIA5uCkNMYdF4E6eqe2J98ZMvhBLXb6YH4Etax9dzDH85ZGkjhTwKuc= MIICyDCCAjGgAwIBAgIJALtgz37lHHXOMA0GCSqGSIb3DQEBBQUAME0xCzAJBgNV BAYTAkZSMR4wHAYDVQQKExVQUkVTIE5BTkNZIFVOSVZFUlNJVEUxHjAcBgNVBAMT FXdpa2kudW5pdi1sb3JyYWluZS5mcjAeFw0wOTEyMTcwODUxNDJaFw0yOTEyMTIw ODUxNDJaME0xCzAJBgNVBAYTAkZSMR4wHAYDVQQKExVQUkVTIE5BTkNZIFVOSVZF UlNJVEUxHjAcBgNVBAMTFXdpa2kudW5pdi1sb3JyYWluZS5mcjCBnzANBgkqhkiG 9w0BAQEFAAOBjQAwgYkCgYEA00xXlBIQWAqnUqbVLzo5Kk9JsgTBXo6YAMM0kiu5 18CcvYA/AUq6V3jVHRoNYEnOIHOrGpIhaOIJZI55YzWYuUTYTvJzUCr68cvK3xAr Yd/TlU+YpBSmqFqnJXXDgCPEyw8KX2WGSJ3c+Lh/mmHtiveJXj+yx/WWVm8+w6Bq VG0CAwEAAaOBrzCBrDAdBgNVHQ4EFgQUp8PSsjPmS2eBz3+HYNFUDNfp8tYwfQYD VR0jBHYwdIAUp8PSsjPmS2eBz3+HYNFUDNfp8tahUaRPME0xCzAJBgNVBAYTAkZS MR4wHAYDVQQKExVQUkVTIE5BTkNZIFVOSVZFUlNJVEUxHjAcBgNVBAMTFXdpa2ku dW5pdi1sb3JyYWluZS5mcoIJALtgz37lHHXOMAwGA1UdEwQFMAMBAf8wDQYJKoZI hvcNAQEFBQADgYEAQXzAZClKgMq1fQahdidO83+b1NmsO3JqlVOEKUM6d0qiAR+v J5Or5eUbxKBk9RSFyu27cdYjOlWHt2PIten9lLomKMQTjxLpWwqH907BdrS8a1Y4 1eKcrIA5uCkNMYdF4E6eqe2J98ZMvhBLXb6YH4Etax9dzDH85ZGkjhTwKuc= urn:mace:shibboleth:1.0:nameIdentifier Benjamin SECLIER contact-fed@univ-nancy2.fr Hugues ROUXEL hugues.rouxel@univ-nancy2.fr MIIC6zCCAlSgAwIBAgIJAMoIflXzV55kMA0GCSqGSIb3DQEBBQUAMFgxCzAJBgNV BAYTAkZSMR8wHQYDVQQKExZVbml2ZXJzaXRlIGRlIExvcnJhaW5lMSgwJgYDVQQD Ex9kZXBvdC1hcmNoaXZlcy51bml2LWxvcnJhaW5lLmZyMB4XDTEwMDQwMjA4MzYz NVoXDTMwMDMyODA4MzYzNVowWDELMAkGA1UEBhMCRlIxHzAdBgNVBAoTFlVuaXZl cnNpdGUgZGUgTG9ycmFpbmUxKDAmBgNVBAMTH2RlcG90LWFyY2hpdmVzLnVuaXYt bG9ycmFpbmUuZnIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKtdeS4LoRzt gqYLgL1G0j0Lk67YL8jet5aQJ4K/T9ADhUmgewUUmjebELF4YB1EMpFXmTGvuNhV K7oc56urcB61Ev7vC4F/SOp0oGtvJ5ReeVTTY0kmb+EQMurtmuc05KWSvbT+NOcb vN1n6JUMIdX+GnW/IrBgA9xdRxZYvsKnAgMBAAGjgbwwgbkwHQYDVR0OBBYEFKnI ApHPTPR/18S7YysfKhlPPzAvMIGJBgNVHSMEgYEwf4AUqcgCkc9M9H/XxLtjKx8q GU8/MC+hXKRaMFgxCzAJBgNVBAYTAkZSMR8wHQYDVQQKExZVbml2ZXJzaXRlIGRl IExvcnJhaW5lMSgwJgYDVQQDEx9kZXBvdC1hcmNoaXZlcy51bml2LWxvcnJhaW5l LmZyggkAygh+VfNXnmQwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQBn OybTW3zPwymjNRtyfeR0wP5USIE/P2L1lYWpYDf1YOniDDgVg2BKfpAV9b1/pR/r KiJGDaarUTGwOojjExwsieHEP6KHGlahI1OEJtrQXaR9AbafwGA6mNDBABcdCRPN e+kN68F+XuLNkpsM6xoiyIPShqet32KSKw+naXYo6w== MIIC6zCCAlSgAwIBAgIJAMoIflXzV55kMA0GCSqGSIb3DQEBBQUAMFgxCzAJBgNV BAYTAkZSMR8wHQYDVQQKExZVbml2ZXJzaXRlIGRlIExvcnJhaW5lMSgwJgYDVQQD Ex9kZXBvdC1hcmNoaXZlcy51bml2LWxvcnJhaW5lLmZyMB4XDTEwMDQwMjA4MzYz NVoXDTMwMDMyODA4MzYzNVowWDELMAkGA1UEBhMCRlIxHzAdBgNVBAoTFlVuaXZl cnNpdGUgZGUgTG9ycmFpbmUxKDAmBgNVBAMTH2RlcG90LWFyY2hpdmVzLnVuaXYt bG9ycmFpbmUuZnIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKtdeS4LoRzt gqYLgL1G0j0Lk67YL8jet5aQJ4K/T9ADhUmgewUUmjebELF4YB1EMpFXmTGvuNhV K7oc56urcB61Ev7vC4F/SOp0oGtvJ5ReeVTTY0kmb+EQMurtmuc05KWSvbT+NOcb vN1n6JUMIdX+GnW/IrBgA9xdRxZYvsKnAgMBAAGjgbwwgbkwHQYDVR0OBBYEFKnI ApHPTPR/18S7YysfKhlPPzAvMIGJBgNVHSMEgYEwf4AUqcgCkc9M9H/XxLtjKx8q GU8/MC+hXKRaMFgxCzAJBgNVBAYTAkZSMR8wHQYDVQQKExZVbml2ZXJzaXRlIGRl IExvcnJhaW5lMSgwJgYDVQQDEx9kZXBvdC1hcmNoaXZlcy51bml2LWxvcnJhaW5l LmZyggkAygh+VfNXnmQwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQBn OybTW3zPwymjNRtyfeR0wP5USIE/P2L1lYWpYDf1YOniDDgVg2BKfpAV9b1/pR/r KiJGDaarUTGwOojjExwsieHEP6KHGlahI1OEJtrQXaR9AbafwGA6mNDBABcdCRPN e+kN68F+XuLNkpsM6xoiyIPShqet32KSKw+naXYo6w== urn:mace:shibboleth:1.0:nameIdentifier Benjamin SECLIER contact-fed@univ-nancy2.fr Hugues ROUXEL hugues.rouxel@univ-nancy2.fr universite-lyon.fr MIIDRDCCAiygAwIBAgIVAP2sGfoeCE9dQRA0FpVdm+UCBHNFMA0GCSqGSIb3DQEB BQUAMCExHzAdBgNVBAMTFmlkcC51bml2ZXJzaXRlLWx5b24uZnIwHhcNMTEwMzEw MTEyMzIxWhcNMzEwMzEwMTEyMzIxWjAhMR8wHQYDVQQDExZpZHAudW5pdmVyc2l0 ZS1seW9uLmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu36fHWJ2 j8l174LhbbLmqLR9Mc6O0RmAZGkpt+Wga7mGICSY+bk9TPK64vHBBfUdsx0HkVi3 1EPVf2AK/lJqcd12YJIKy0yisQrxRGYCynF1nhyuVgrgl1kKo6LGjgxb9IRJU2BG xL168MWGzov867Ttdmty53ZmdfjTRGAoK7MmDrBInpWOtR6HcI7tKAGQlThsgbo6 kfXobR6ntp0t90RNPaTUgm+oNlXXsEcMWsLbdeR+d6IxWx9xAPx4D7S+JmA+vAGI P/d/DNUXnvZA9o9ysqhMF4TmD9rNgBL9658h4hwS3OAOlbM9YViQPKmVsc9qBp5w y9y+qk73cTB+ZwIDAQABo3MwcTBQBgNVHREESTBHghZpZHAudW5pdmVyc2l0ZS1s eW9uLmZyhi1odHRwczovL2lkcC51bml2ZXJzaXRlLWx5b24uZnIvaWRwL3NoaWJi b2xldGgwHQYDVR0OBBYEFEanTWpekMShUedKb9mgslNYb/gGMA0GCSqGSIb3DQEB BQUAA4IBAQAU0hITe/utTwqDfRm70ZkGC1gVwPj7cVvQOrWT41dS158IsYuPZlQr p2398RDEob6XcfbuHVERXfL2WZTvg7CD7Ui1g4tM1AffUFauu0AjYW91LP88epsm opoZD5iGwCE8Xwyx36MfgQ2VsuxP64LM8r0H8kTBHbGsuvCjbvKNB6XmXoBHM9S1 h7F5udv5XokwRaF5dzzn5bSOQqxtaUCGfhFpJx0VcmmyBQ6tOhLC9PVC48hyq7v6 RFr+XMux5XOoza21wQf9RWV70eN43LuUxR1ZNdjdHgvwqXFmIauGAaCib8j3/ARv UZpOUBiMjLpIx7nFKyNwPg5DVhxj2BDR urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Lyon Université de Lyon http://unknown.site.com Vincent Lombard sysadmin@universite-lyon.fr Evgueni Podgourski sysadmin@universite-lyon.fr univ-lyon1.fr MIIEzTCCA7WgAwIBAgIQDpHzR56it3k1iP23BSdZxjANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTEwMDUwNTAwMDAwMFoXDTEzMDUwNDIzNTk1OVowbTELMAkGA1UE BhMCRlIxFTATBgNVBAcTDFZpbGxldXJiYW5uZTEqMCgGA1UECgwhVW5pdmVyc2l0 w6kgTHlvbiAxIENsYXVkZSBCZXJuYXJkMRswGQYDVQQDExJhdXRoLnVuaXYtbHlv bjEuZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD0pbguRU4Yjru0 zIAA9BAgNnYR2WmyTQHR0PdXmL6Tib/IMoSgZeNH742uP3AYlFsGRqhS0SD28OjB ZEbuL+OyZO9UvI6g5XOllI62qnN+J4n3rJP4NpBquUhack3Nch5qOqdHcrBfIANP +41V991u2SsqCTAEA8mN/rGy/oX+C6OFMKd6WLJv9e1k23WKAi1GOkVz2YaacMhY YvXtomDCyMrsU0Nivmh+N6OklZoqha+9XT37/Qr9pEsBw9KhZopx9W5kQzguX27N TrVCM4jJZz0INkSWmQ8HraoLO92C5Rj+N2KTojniZ8Yvtc+ID/t4OmHzgM/f/JnN TuLPpWslAgMBAAGjggGeMIIBmjAfBgNVHSMEGDAWgBQMvZNoDPPeq6NJays3V0fq kOO57TAdBgNVHQ4EFgQUQjRVTRrWuH87FAYSuQbVGNEixSswDgYDVR0PAQH/BAQD AgWgMAwGA1UdEwEB/wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMC MBgGA1UdIAQRMA8wDQYLKwYBBAGyMQECAh0wOgYDVR0fBDMwMTAvoC2gK4YpaHR0 cDovL2NybC50Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcmwwbQYIKwYBBQUH AQEEYTBfMDUGCCsGAQUFBzAChilodHRwOi8vY3J0LnRjcy50ZXJlbmEub3JnL1RF UkVOQVNTTENBLmNydDAmBggrBgEFBQcwAYYaaHR0cDovL29jc3AudGNzLnRlcmVu YS5vcmcwVgYDVR0RBE8wTYISYXV0aC51bml2LWx5b24xLmZyghFjYXMudW5pdi1s eW9uMS5mcoIRaWRwLnVuaXYtbHlvbjEuZnKCEXNzby51bml2LWx5b24xLmZyMA0G CSqGSIb3DQEBBQUAA4IBAQBnCANmoLIMKSGdqNR7PbrAIUXC2O8H4eYs9I+dpHgv +P52Xlsr5xRE+XH2SQYqdc0MCYuRz/f16AkaQv3QZ8LIWHYbpXAhEQRnPNz7xqHi DCqFI4WaxnrOmvvZXiUQSFP8yTLmVHc0jDd45I99lRgxSNTgocZBatK6QIzF4V0R xhJiASJIjpShZtNHNKAZ+inJuEzw4dkxxsmAxPadkrGbcatXBYWmuu/CSzkQ7R5F Zc9Pfq13d0fZ6k1NqSMN0rVrhbyPGYG1ImK1vhYzGuWtbBmpr8OtzGnAlp84MXP7 1AMeI4u0CsqPYY5yGurJs5GHV9nsmWhGZrgmg5Yb4dOh MIIEkjCCA3qgAwIBAgIQaIJXCbBe0XSE//ShA44KaDANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTEwMDEyOTAwMDAwMFoXDTEzMDEyODIzNTk1OVowbDELMAkGA1UE BhMCRlIxFTATBgNVBAcTDFZpbGxldXJiYW5uZTEqMCgGA1UECgwhVW5pdmVyc2l0 w6kgTHlvbiAxIENsYXVkZSBCZXJuYXJkMRowGAYDVQQDExFjYXMudW5pdi1seW9u MS5mcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKO+62ZfJpJMeBGm dr/4MteDM9MOXtHuBWEpEW01SF/460JZ3msX6ZaAyWmijsj4jqRq/GV5QBLzBr/7 bvxkAPokxoGP+btlFtHC6m690JI1seDR1VcET9EPQGufUtS9NMh3qrY1zbAMWsJs Jf8d7nqA02z+yw17fyxrBHS0YSF+ah2t88AoufCQzyBc2yYz9bUQfHdSAZRP2mW+ nnky4mJdbAJPf1LuYqyqJustaehEzp+9ws8nz2nM2CZ4ZT1vVzDGt2J8OMTmFdTB ybEcvijKtTtiX26on/uFLeL7Hg5/uJKVlLgiZt+oHJuUA1t2oy0Fy+0ykwgnaL8j El+NCqsCAwEAAaOCAWQwggFgMB8GA1UdIwQYMBaAFAy9k2gM896ro0lrKzdXR+qQ 47ntMB0GA1UdDgQWBBTTuIm/VJi0wyFqmRjuzSBXwZp3DzAOBgNVHQ8BAf8EBAMC BaAwDAYDVR0TAQH/BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIw GAYDVR0gBBEwDzANBgsrBgEEAbIxAQICHTA6BgNVHR8EMzAxMC+gLaArhilodHRw Oi8vY3JsLnRjcy50ZXJlbmEub3JnL1RFUkVOQVNTTENBLmNybDBtBggrBgEFBQcB AQRhMF8wNQYIKwYBBQUHMAKGKWh0dHA6Ly9jcnQudGNzLnRlcmVuYS5vcmcvVEVS RU5BU1NMQ0EuY3J0MCYGCCsGAQUFBzABhhpodHRwOi8vb2NzcC50Y3MudGVyZW5h Lm9yZzAcBgNVHREEFTATghFjYXMudW5pdi1seW9uMS5mcjANBgkqhkiG9w0BAQUF AAOCAQEAT93jVR4kNQHajsar0iu72vfujB5RpuQRg4eBALcbrwQfMtb9+RR15UiU +tPAitECVxLF9fEXUKSXPTntT+CjB2i0aju2GBVT1FO2ke/XOJPX69Dle+48CMzt 8qrmjPjGtp26o+Mv/ULHzLTiz5pS1nD5TAEb/EnEvgVFj0AtRxuO2FxF80pAyvWu L+kWo/1QgQ5tlklpIqxw0NHVJoFZRPQcbCv/f5XD8Uud2lNmTZcfb0UYsfIZBJF4 JORV4AX4SurYgB4asMqJhPaxoAUDWq0DEHJ1DLIkTpV+JcB1nnd/9LKvHrWjpN5X /2KKLMvL6RldWnjRwaLHumgU2Nj5dA== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Lyon 1 - Claude Bernard Université de Lyon 1 - Claude Bernard http://unknown.site.com Vincent HURTEVENT vincent.hurtevent@univ-lyon1.fr Jean-Luc BERNARD Jean-Luc.Bernard@univ-lyon1.fr univ-lyon3.fr MIIDMDCCAhigAwIBAgIVALk8mZ+AAF53uwidDGYBnH0PYWxbMA0GCSqGSIb3DQEB BQUAMBwxGjAYBgNVBAMTEWlkcC51bml2LWx5b24zLmZyMB4XDTEwMTAxMjEzMzk1 NVoXDTMwMTAxMjEzMzk1NVowHDEaMBgGA1UEAxMRaWRwLnVuaXYtbHlvbjMuZnIw ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCnHRL8McVU1CwfcgOZzodc G9yjFNUlE5+tKEwGlkDNpOW+dIK3nZ4o3LxeOZVCA6sBJ6zGvPKLrbwaQ1ec7wUw Zd2/VGlpT6puPc6hPuqa8ghTKgAsYAaLgnnXMTsXgOi2ieu+KpOhBWUChZU8UgjT PFa7KjRzQ7xLoHd4+ZdkXIcb4VUMR8nEBNVQ2C18c4CNgGN6aYPpP++kFHJJi85F 2jmD07ccl0DES2sPfDLpniZDin+eD8ij8UXviy9e8v4ssrXi/qNvP8eHSsDTUkT8 zkMEs6ovVCGMZf/aie0RVaZ0h8G4n9UF2xk/+ASAxVcAl5Kwfy6g4/sno0BDWul7 AgMBAAGjaTBnMEYGA1UdEQQ/MD2CEWlkcC51bml2LWx5b24zLmZyhihodHRwczov L2lkcC51bml2LWx5b24zLmZyL2lkcC9zaGliYm9sZXRoMB0GA1UdDgQWBBQRoWeg Qi5urVmZRbLmZzQW2w0DkjANBgkqhkiG9w0BAQUFAAOCAQEAYA43hVTg4DIEtI5l 1I2MMrZhXAkpihNEC8G2HTtpUAq2GeAKTzUzUyQ133V3JgY8XDkpCM8XhPqI6wAH 5k9pOwKeePRjDWkycJYsBeCl5x1wspNqNGfbWEMfCALXeP8YI5annKFUBnit2VrX eXB9i4dKcDeYCVzKW1hd7meBbw6Iijwnxt7ZESzVzibWVYi/gB3zT2OLHjFhONj4 TWXosGddVcZLkq+eFRjPBFUZmin0Y1i6IPWtHveMnegwrIimwh4hc3Hq9x9frai9 vU4n/dUR4kWq12hY6VObixqfgw9dHPnALDINjOdTHmmXaSJAyv5tQkmIRGZyMOmc n4c/iw== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Lyon 3 - Jean Moulin Université de Lyon 3 - Jean Moulin http://unknown.site.com Jérôme Bodri contact-shibboleth@univ-lyon3.fr Jean-Albert Vescovo contact-shibboleth@univ-lyon3.fr univ-metz.fr MIIDKzCCAhOgAwIBAgIUDlDXTPfnVVlB2vKEEVjKvmdTFq0wDQYJKoZIhvcNAQEF BQAwGzEZMBcGA1UEAxMQaWRwLnVuaXYtbWV0ei5mcjAeFw0wOTA5MTEwNzI0MjVa Fw0yOTA5MTEwNzI0MjVaMBsxGTAXBgNVBAMTEGlkcC51bml2LW1ldHouZnIwggEi MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDqkb/L55sjnTWR3XdSgmEvcd3g Tz1A370iZR1D8HxKO2x3Tc+BLSmCFYbcLzB6dQPTlTPDMQONsymjgE1ttHf9qe89 dGekJSLjj8bju8U9El2yW/C+9ZrlJVbfxOVhINYrumMjCGSTI6TmZ2L6zvL48/yM n5kLUT/YX5huxCj+7qneIop7Ad7kcb71waiIoROpg/CByk8rAnp3W07DkLs1L0HS FQs+GKnBzBdVUDYO06TpjCEVnUm4A6LEUFouCMju+2gZOFMrfvJjW5OYyD1fBu/C 8GKcFtNhRBKIjfM/wYIjxB3FaMb9T2bk1QRfxQZ+OTAfVYRtA2Me/mboiBlNAgMB AAGjZzBlMEQGA1UdEQQ9MDuCEGlkcC51bml2LW1ldHouZnKGJ2h0dHBzOi8vaWRw LnVuaXYtbWV0ei5mci9pZHAvc2hpYmJvbGV0aDAdBgNVHQ4EFgQUOoGLKUM1Vo3n fKTxahxXUU2F23IwDQYJKoZIhvcNAQEFBQADggEBAKsVBCFqX/UmAE6As1MkPXNY RBQgd7W57v5laPwe1SZTcphlW2y50DMlvhpvVZKDV+LS1tCPjPTFNitNhK3Tvoxt u830LZfMZeoMUm95CDgMYTciFtNPofvoMKZqPmQJtkVUrkz6IOE8fd40NWUof7M6 0FS0MVFsfEVFd7WnwsJ8Cz1VolSzwPnhiXP4HbLM3iq7Sp9uRgZ4/I3u50F/jBxC TxqsN7G8FHeWBexfFzQCM9SIWaC+95CK/hlz9Le5dUX+bhlg6sInttCBmSKweb5l o7IxhUAjjTUCfD0SLPFKbyX5XmnD0d93vidA2AAp1Ff0hE28+1+WVvdlwcNf+RU= urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient univ-metz.fr MIIDKzCCAhOgAwIBAgIUDlDXTPfnVVlB2vKEEVjKvmdTFq0wDQYJKoZIhvcNAQEF BQAwGzEZMBcGA1UEAxMQaWRwLnVuaXYtbWV0ei5mcjAeFw0wOTA5MTEwNzI0MjVa Fw0yOTA5MTEwNzI0MjVaMBsxGTAXBgNVBAMTEGlkcC51bml2LW1ldHouZnIwggEi MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDqkb/L55sjnTWR3XdSgmEvcd3g Tz1A370iZR1D8HxKO2x3Tc+BLSmCFYbcLzB6dQPTlTPDMQONsymjgE1ttHf9qe89 dGekJSLjj8bju8U9El2yW/C+9ZrlJVbfxOVhINYrumMjCGSTI6TmZ2L6zvL48/yM n5kLUT/YX5huxCj+7qneIop7Ad7kcb71waiIoROpg/CByk8rAnp3W07DkLs1L0HS FQs+GKnBzBdVUDYO06TpjCEVnUm4A6LEUFouCMju+2gZOFMrfvJjW5OYyD1fBu/C 8GKcFtNhRBKIjfM/wYIjxB3FaMb9T2bk1QRfxQZ+OTAfVYRtA2Me/mboiBlNAgMB AAGjZzBlMEQGA1UdEQQ9MDuCEGlkcC51bml2LW1ldHouZnKGJ2h0dHBzOi8vaWRw LnVuaXYtbWV0ei5mci9pZHAvc2hpYmJvbGV0aDAdBgNVHQ4EFgQUOoGLKUM1Vo3n fKTxahxXUU2F23IwDQYJKoZIhvcNAQEFBQADggEBAKsVBCFqX/UmAE6As1MkPXNY RBQgd7W57v5laPwe1SZTcphlW2y50DMlvhpvVZKDV+LS1tCPjPTFNitNhK3Tvoxt u830LZfMZeoMUm95CDgMYTciFtNPofvoMKZqPmQJtkVUrkz6IOE8fd40NWUof7M6 0FS0MVFsfEVFd7WnwsJ8Cz1VolSzwPnhiXP4HbLM3iq7Sp9uRgZ4/I3u50F/jBxC TxqsN7G8FHeWBexfFzQCM9SIWaC+95CK/hlz9Le5dUX+bhlg6sInttCBmSKweb5l o7IxhUAjjTUCfD0SLPFKbyX5XmnD0d93vidA2AAp1Ff0hE28+1+WVvdlwcNf+RU= urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Metz - Paul Verlaine Université de Metz - Paul Verlaine http://unknown.site.com Yves Agostini crium-reseau@univ-metz.fr authold.univ-metz.fr im.univ-metz.fr sauron.univ-metz.fr superviseur.univ-metz.fr CN=im.univ-metz.fr,OU=CRIUM,O=UNIVERSITE METZ,L=Metz,ST=fr,C=FR MIIE1jCCA76gAwIBAgIQcJ9DzkqhI+AmgehMkvWQ/DANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTA5MTIxNzAwMDAwMFoXDTEyMTIxNjIzNTk1OVowbTELMAkGA1UE BhMCRlIxCzAJBgNVBAgTAmZyMQ0wCwYDVQQHEwRNZXR6MRgwFgYDVQQKEw9VTklW RVJTSVRFIE1FVFoxDjAMBgNVBAsTBUNSSVVNMRgwFgYDVQQDEw9pbS51bml2LW1l dHouZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDAPx9v+rMjJ0OF vrfU6gJ8y6P6ORtofC3xoGQ46cGgvs3bQp1vEhPQw2xzROXaLDYbHvLwiA9LCdqn 0VqEDbh6mMQw1R3SrIcVjEObRBawyE+vqPLx7Lxd2k4eWA5TGid2Vjw1vM3RlzxR xCh6o1wQR9WinYk2EEevYcOBpspfmQ8zkUWXxCN6+qZFTaOli80v6S2q5loSSbZR HLJ4LLRL5Jg4pTXaUD+ypcBd573XAHrLLzl9sdvWKl1Vn+XZ1/G0XfX/sI1m/90H 3t7DIfk3IW6lZoeBXW3c6vchNRiZCGwM26oLBxmxqpU9ieG4q2TLIasjqIERDLY8 CNaxDf3XAgMBAAGjggGnMIIBozAfBgNVHSMEGDAWgBQMvZNoDPPeq6NJays3V0fq kOO57TAdBgNVHQ4EFgQUE8ij2tN8ddSsKFgqXnXmqiu1QtwwDgYDVR0PAQH/BAQD AgWgMAwGA1UdEwEB/wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMC MBgGA1UdIAQRMA8wDQYLKwYBBAGyMQECAh0wOgYDVR0fBDMwMTAvoC2gK4YpaHR0 cDovL2NybC50Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcmwwbQYIKwYBBQUH AQEEYTBfMDUGCCsGAQUFBzAChilodHRwOi8vY3J0LnRjcy50ZXJlbmEub3JnL1RF UkVOQVNTTENBLmNydDAmBggrBgEFBQcwAYYaaHR0cDovL29jc3AudGNzLnRlcmVu YS5vcmcwXwYDVR0RBFgwVoIPaW0udW5pdi1tZXR6LmZyghRhdXRob2xkLnVuaXYt bWV0ei5mcoITc2F1cm9uLnVuaXYtbWV0ei5mcoIYc3VwZXJ2aXNldXIudW5pdi1t ZXR6LmZyMA0GCSqGSIb3DQEBBQUAA4IBAQB4u6WlBimVohmGpOWGAklThy9EXBSe u27blAV0GL87kma7gXQK9p/EwC6XqLXDumv7Ukqpx6aYDGnUJHqPf5Qm0cLl2C5F jf2lMUeurFlZC9rRccw7/QzVIh8v48aA07L5dExDboTGKam1ZiZGM96l3814hu4n oz/1/TY4t45G7k5B09IxkN5PZcmm0ZAgkldRg0td3KKpzkBEK2ayoeaIWJ27yZHR iNuusCOXc6gz3KKata8PeqMme9NEQz18Ud/yy7jpQKwffQklybBJGHvOut7dz2L2 rjMyF09naDaTihNYgBNENuIV2z15kKgELh5d9zcbVwd+fbU0m2mR4Esv MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290 MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9 uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0 WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0 Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= MIIEPDCCAySgAwIBAgIQSEus8arH1xND0aJ0NUmXJTANBgkqhkiG9w0BAQUFADBv MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFk ZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBF eHRlcm5hbCBDQSBSb290MB4XDTA1MDYwNzA4MDkxMFoXDTIwMDUzMDEwNDgzOFow gZcxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtl IENpdHkxHjAcBgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMY aHR0cDovL3d3dy51c2VydHJ1c3QuY29tMR8wHQYDVQQDExZVVE4tVVNFUkZpcnN0 LUhhcmR3YXJlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsffDOD+0 qH/POYJRZ9Btn9L/WPPnnyvsDYlUmbk4mRb34CF5SMK7YXQSlh08anLVPBBnOjnt KxPNZuuVCTOkbJex6MbswXV5nEZejavQav25KlUXEFSzGfCa9vGxXbanbfvgcRdr ooj7AN/+GjF3DJoBerEy4ysBBzhuw6VeI7xFm3tQwckwj9vlK3rTW/szQB6g1ZgX vIuHw4nTXaCOsqqq9o5piAbF+okh8widaS4JM5spDUYPjMxJNLBpUb35Bs1orWZM vD6sYb0KiA7I3z3ufARMnQpea5HW7sftKI2rTYeJc9BupNAeFosU4XZEA39jrOTN SZzFkvSrMqFIWwIDAQABo4GqMIGnMB8GA1UdIwQYMBaAFK29mHo0tCb3+sQmVO8D veAky1QaMB0GA1UdDgQWBBShcl8mGyiYQ5VdBzfVhZadS9LDRTAOBgNVHQ8BAf8E BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBEBgNVHR8EPTA7MDmgN6A1hjNodHRwOi8v Y3JsLnVzZXJ0cnVzdC5jb20vQWRkVHJ1c3RFeHRlcm5hbENBUm9vdC5jcmwwDQYJ KoZIhvcNAQEFBQADggEBADzse+Cuow6WbTDXhcbSaFtFWoKmNA+wyZIjXhFtCBGy dAkjOjUlc1heyrl8KPpH7PmgA1hQtlPvjNs55Gfp2MooRtSn4PU4dfjny1y/HRE8 akCbLURW0/f/BSgyDBXIZEWT6CEkjy3aeoR7T8/NsiV8dxDTlNEEkaglHAkiD31E NREU768A/l7qX46w2ZJZuvwTlqAYAVbO2vYoC7Gv3VxPXLLzj1pxz+0YrWOIHY6V 9+qV5x+tkLiECEeFfyIvGh1IMNZMCNg3GWcyK+tc0LL8blefBDVekAB+EcfeEyrN pG1FJseIVqDwavfY5/wnfmcI0L36tsNhAgFlubgvz1o= MIIEmDCCA4CgAwIBAgIQS8gUAy8H+mqk8Nop32F5ujANBgkqhkiG9w0BAQUFADCB lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3Qt SGFyZHdhcmUwHhcNMDkwNTE4MDAwMDAwWhcNMjAwNTMwMTA0ODM4WjA2MQswCQYD VQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEgU1NMIENB MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw+NIxC9cwcupmf0booNd ij2tOtDipEMfTQ7+NSUwpWkbxOjlwY9UfuFqoppcXN49/ALOlrhfj4NbzGBAkPjk tjolnF8UUeyx56+eUKExVccCvaxSin81joL6hK0V/qJ/gxA6VVOULAEWdJRUYyij 8lspPZSIgCDiFFkhGbSkmOFg5vLrooCDQ+CtaPN5GYtoQ1E/iptBhQw1jF218bbl p8ODtWsjb9Sl61DllPFKX+4nSxQSFSRMDc9ijbcAIa06Mg9YC18em9HfnY6pGTVQ L0GprTvG4EWyUzl/Ib8iGodcNK5Sbwd9ogtOnyt5pn0T3fV/g3wvWl13eHiRoBS/ fQIDAQABo4IBPjCCATowHwYDVR0jBBgwFoAUoXJfJhsomEOVXQc31YWWnUvSw0Uw HQYDVR0OBBYEFAy9k2gM896ro0lrKzdXR+qQ47ntMA4GA1UdDwEB/wQEAwIBBjAS BgNVHRMBAf8ECDAGAQH/AgEAMBgGA1UdIAQRMA8wDQYLKwYBBAGyMQECAh0wRAYD VR0fBD0wOzA5oDegNYYzaHR0cDovL2NybC51c2VydHJ1c3QuY29tL1VUTi1VU0VS Rmlyc3QtSGFyZHdhcmUuY3JsMHQGCCsGAQUFBwEBBGgwZjA9BggrBgEFBQcwAoYx aHR0cDovL2NydC51c2VydHJ1c3QuY29tL1VUTkFkZFRydXN0U2VydmVyX0NBLmNy dDAlBggrBgEFBQcwAYYZaHR0cDovL29jc3AudXNlcnRydXN0LmNvbTANBgkqhkiG 9w0BAQUFAAOCAQEATiPuSJz2hYtxxApuc5NywDqOgIrZs8qy1AGcKM/yXA4hRJML thoh45gBlA5nSYEevj0NTmDa76AxTpXv8916WoIgQ7ahY0OzUGlDYktWYrA0irkT Q1mT7BR5iPNIk+idyfqHcgxrVqDDFY1opYcfcS3mWm08aXFABFXcoEOUIEU4eNe9 itg5xt8Jt1qaqQO4KBB4zb8BG1oRPjj02Bs0ec8z0gH9rJjNbUcRkEy7uVvYcOfV r7bMxIbmdcCeKbYrDyqlaQIN4+mitF3A884saoU4dmHGSYKrUbOCprlBmCiY+2v+ ihb/MX5UR6g83EMmqZsFt57ANEORMNQywxFa4Q== authold.univ-metz.fr im.univ-metz.fr sauron.univ-metz.fr superviseur.univ-metz.fr CN=im.univ-metz.fr,OU=CRIUM,O=UNIVERSITE METZ,L=Metz,ST=fr,C=FR MIIE1jCCA76gAwIBAgIQcJ9DzkqhI+AmgehMkvWQ/DANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTA5MTIxNzAwMDAwMFoXDTEyMTIxNjIzNTk1OVowbTELMAkGA1UE BhMCRlIxCzAJBgNVBAgTAmZyMQ0wCwYDVQQHEwRNZXR6MRgwFgYDVQQKEw9VTklW RVJTSVRFIE1FVFoxDjAMBgNVBAsTBUNSSVVNMRgwFgYDVQQDEw9pbS51bml2LW1l dHouZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDAPx9v+rMjJ0OF vrfU6gJ8y6P6ORtofC3xoGQ46cGgvs3bQp1vEhPQw2xzROXaLDYbHvLwiA9LCdqn 0VqEDbh6mMQw1R3SrIcVjEObRBawyE+vqPLx7Lxd2k4eWA5TGid2Vjw1vM3RlzxR xCh6o1wQR9WinYk2EEevYcOBpspfmQ8zkUWXxCN6+qZFTaOli80v6S2q5loSSbZR HLJ4LLRL5Jg4pTXaUD+ypcBd573XAHrLLzl9sdvWKl1Vn+XZ1/G0XfX/sI1m/90H 3t7DIfk3IW6lZoeBXW3c6vchNRiZCGwM26oLBxmxqpU9ieG4q2TLIasjqIERDLY8 CNaxDf3XAgMBAAGjggGnMIIBozAfBgNVHSMEGDAWgBQMvZNoDPPeq6NJays3V0fq kOO57TAdBgNVHQ4EFgQUE8ij2tN8ddSsKFgqXnXmqiu1QtwwDgYDVR0PAQH/BAQD AgWgMAwGA1UdEwEB/wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMC MBgGA1UdIAQRMA8wDQYLKwYBBAGyMQECAh0wOgYDVR0fBDMwMTAvoC2gK4YpaHR0 cDovL2NybC50Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcmwwbQYIKwYBBQUH AQEEYTBfMDUGCCsGAQUFBzAChilodHRwOi8vY3J0LnRjcy50ZXJlbmEub3JnL1RF UkVOQVNTTENBLmNydDAmBggrBgEFBQcwAYYaaHR0cDovL29jc3AudGNzLnRlcmVu YS5vcmcwXwYDVR0RBFgwVoIPaW0udW5pdi1tZXR6LmZyghRhdXRob2xkLnVuaXYt bWV0ei5mcoITc2F1cm9uLnVuaXYtbWV0ei5mcoIYc3VwZXJ2aXNldXIudW5pdi1t ZXR6LmZyMA0GCSqGSIb3DQEBBQUAA4IBAQB4u6WlBimVohmGpOWGAklThy9EXBSe u27blAV0GL87kma7gXQK9p/EwC6XqLXDumv7Ukqpx6aYDGnUJHqPf5Qm0cLl2C5F jf2lMUeurFlZC9rRccw7/QzVIh8v48aA07L5dExDboTGKam1ZiZGM96l3814hu4n oz/1/TY4t45G7k5B09IxkN5PZcmm0ZAgkldRg0td3KKpzkBEK2ayoeaIWJ27yZHR iNuusCOXc6gz3KKata8PeqMme9NEQz18Ud/yy7jpQKwffQklybBJGHvOut7dz2L2 rjMyF09naDaTihNYgBNENuIV2z15kKgELh5d9zcbVwd+fbU0m2mR4Esv MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290 MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9 uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0 WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0 Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= MIIEPDCCAySgAwIBAgIQSEus8arH1xND0aJ0NUmXJTANBgkqhkiG9w0BAQUFADBv MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFk ZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBF eHRlcm5hbCBDQSBSb290MB4XDTA1MDYwNzA4MDkxMFoXDTIwMDUzMDEwNDgzOFow gZcxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtl IENpdHkxHjAcBgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMY aHR0cDovL3d3dy51c2VydHJ1c3QuY29tMR8wHQYDVQQDExZVVE4tVVNFUkZpcnN0 LUhhcmR3YXJlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsffDOD+0 qH/POYJRZ9Btn9L/WPPnnyvsDYlUmbk4mRb34CF5SMK7YXQSlh08anLVPBBnOjnt KxPNZuuVCTOkbJex6MbswXV5nEZejavQav25KlUXEFSzGfCa9vGxXbanbfvgcRdr ooj7AN/+GjF3DJoBerEy4ysBBzhuw6VeI7xFm3tQwckwj9vlK3rTW/szQB6g1ZgX vIuHw4nTXaCOsqqq9o5piAbF+okh8widaS4JM5spDUYPjMxJNLBpUb35Bs1orWZM vD6sYb0KiA7I3z3ufARMnQpea5HW7sftKI2rTYeJc9BupNAeFosU4XZEA39jrOTN SZzFkvSrMqFIWwIDAQABo4GqMIGnMB8GA1UdIwQYMBaAFK29mHo0tCb3+sQmVO8D veAky1QaMB0GA1UdDgQWBBShcl8mGyiYQ5VdBzfVhZadS9LDRTAOBgNVHQ8BAf8E BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBEBgNVHR8EPTA7MDmgN6A1hjNodHRwOi8v Y3JsLnVzZXJ0cnVzdC5jb20vQWRkVHJ1c3RFeHRlcm5hbENBUm9vdC5jcmwwDQYJ KoZIhvcNAQEFBQADggEBADzse+Cuow6WbTDXhcbSaFtFWoKmNA+wyZIjXhFtCBGy dAkjOjUlc1heyrl8KPpH7PmgA1hQtlPvjNs55Gfp2MooRtSn4PU4dfjny1y/HRE8 akCbLURW0/f/BSgyDBXIZEWT6CEkjy3aeoR7T8/NsiV8dxDTlNEEkaglHAkiD31E NREU768A/l7qX46w2ZJZuvwTlqAYAVbO2vYoC7Gv3VxPXLLzj1pxz+0YrWOIHY6V 9+qV5x+tkLiECEeFfyIvGh1IMNZMCNg3GWcyK+tc0LL8blefBDVekAB+EcfeEyrN pG1FJseIVqDwavfY5/wnfmcI0L36tsNhAgFlubgvz1o= MIIEmDCCA4CgAwIBAgIQS8gUAy8H+mqk8Nop32F5ujANBgkqhkiG9w0BAQUFADCB lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3Qt SGFyZHdhcmUwHhcNMDkwNTE4MDAwMDAwWhcNMjAwNTMwMTA0ODM4WjA2MQswCQYD VQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEgU1NMIENB MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw+NIxC9cwcupmf0booNd ij2tOtDipEMfTQ7+NSUwpWkbxOjlwY9UfuFqoppcXN49/ALOlrhfj4NbzGBAkPjk tjolnF8UUeyx56+eUKExVccCvaxSin81joL6hK0V/qJ/gxA6VVOULAEWdJRUYyij 8lspPZSIgCDiFFkhGbSkmOFg5vLrooCDQ+CtaPN5GYtoQ1E/iptBhQw1jF218bbl p8ODtWsjb9Sl61DllPFKX+4nSxQSFSRMDc9ijbcAIa06Mg9YC18em9HfnY6pGTVQ L0GprTvG4EWyUzl/Ib8iGodcNK5Sbwd9ogtOnyt5pn0T3fV/g3wvWl13eHiRoBS/ fQIDAQABo4IBPjCCATowHwYDVR0jBBgwFoAUoXJfJhsomEOVXQc31YWWnUvSw0Uw HQYDVR0OBBYEFAy9k2gM896ro0lrKzdXR+qQ47ntMA4GA1UdDwEB/wQEAwIBBjAS BgNVHRMBAf8ECDAGAQH/AgEAMBgGA1UdIAQRMA8wDQYLKwYBBAGyMQECAh0wRAYD VR0fBD0wOzA5oDegNYYzaHR0cDovL2NybC51c2VydHJ1c3QuY29tL1VUTi1VU0VS Rmlyc3QtSGFyZHdhcmUuY3JsMHQGCCsGAQUFBwEBBGgwZjA9BggrBgEFBQcwAoYx aHR0cDovL2NydC51c2VydHJ1c3QuY29tL1VUTkFkZFRydXN0U2VydmVyX0NBLmNy dDAlBggrBgEFBQcwAYYZaHR0cDovL29jc3AudXNlcnRydXN0LmNvbTANBgkqhkiG 9w0BAQUFAAOCAQEATiPuSJz2hYtxxApuc5NywDqOgIrZs8qy1AGcKM/yXA4hRJML thoh45gBlA5nSYEevj0NTmDa76AxTpXv8916WoIgQ7ahY0OzUGlDYktWYrA0irkT Q1mT7BR5iPNIk+idyfqHcgxrVqDDFY1opYcfcS3mWm08aXFABFXcoEOUIEU4eNe9 itg5xt8Jt1qaqQO4KBB4zb8BG1oRPjj02Bs0ec8z0gH9rJjNbUcRkEy7uVvYcOfV r7bMxIbmdcCeKbYrDyqlaQIN4+mitF3A884saoU4dmHGSYKrUbOCprlBmCiY+2v+ ihb/MX5UR6g83EMmqZsFt57ANEORMNQywxFa4Q== authold.univ-metz.fr im.univ-metz.fr sauron.univ-metz.fr superviseur.univ-metz.fr CN=im.univ-metz.fr,OU=CRIUM,O=UNIVERSITE METZ,L=Metz,ST=fr,C=FR MIIE1jCCA76gAwIBAgIQcJ9DzkqhI+AmgehMkvWQ/DANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTA5MTIxNzAwMDAwMFoXDTEyMTIxNjIzNTk1OVowbTELMAkGA1UE BhMCRlIxCzAJBgNVBAgTAmZyMQ0wCwYDVQQHEwRNZXR6MRgwFgYDVQQKEw9VTklW RVJTSVRFIE1FVFoxDjAMBgNVBAsTBUNSSVVNMRgwFgYDVQQDEw9pbS51bml2LW1l dHouZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDAPx9v+rMjJ0OF vrfU6gJ8y6P6ORtofC3xoGQ46cGgvs3bQp1vEhPQw2xzROXaLDYbHvLwiA9LCdqn 0VqEDbh6mMQw1R3SrIcVjEObRBawyE+vqPLx7Lxd2k4eWA5TGid2Vjw1vM3RlzxR xCh6o1wQR9WinYk2EEevYcOBpspfmQ8zkUWXxCN6+qZFTaOli80v6S2q5loSSbZR HLJ4LLRL5Jg4pTXaUD+ypcBd573XAHrLLzl9sdvWKl1Vn+XZ1/G0XfX/sI1m/90H 3t7DIfk3IW6lZoeBXW3c6vchNRiZCGwM26oLBxmxqpU9ieG4q2TLIasjqIERDLY8 CNaxDf3XAgMBAAGjggGnMIIBozAfBgNVHSMEGDAWgBQMvZNoDPPeq6NJays3V0fq kOO57TAdBgNVHQ4EFgQUE8ij2tN8ddSsKFgqXnXmqiu1QtwwDgYDVR0PAQH/BAQD AgWgMAwGA1UdEwEB/wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMC MBgGA1UdIAQRMA8wDQYLKwYBBAGyMQECAh0wOgYDVR0fBDMwMTAvoC2gK4YpaHR0 cDovL2NybC50Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcmwwbQYIKwYBBQUH AQEEYTBfMDUGCCsGAQUFBzAChilodHRwOi8vY3J0LnRjcy50ZXJlbmEub3JnL1RF UkVOQVNTTENBLmNydDAmBggrBgEFBQcwAYYaaHR0cDovL29jc3AudGNzLnRlcmVu YS5vcmcwXwYDVR0RBFgwVoIPaW0udW5pdi1tZXR6LmZyghRhdXRob2xkLnVuaXYt bWV0ei5mcoITc2F1cm9uLnVuaXYtbWV0ei5mcoIYc3VwZXJ2aXNldXIudW5pdi1t ZXR6LmZyMA0GCSqGSIb3DQEBBQUAA4IBAQB4u6WlBimVohmGpOWGAklThy9EXBSe u27blAV0GL87kma7gXQK9p/EwC6XqLXDumv7Ukqpx6aYDGnUJHqPf5Qm0cLl2C5F jf2lMUeurFlZC9rRccw7/QzVIh8v48aA07L5dExDboTGKam1ZiZGM96l3814hu4n oz/1/TY4t45G7k5B09IxkN5PZcmm0ZAgkldRg0td3KKpzkBEK2ayoeaIWJ27yZHR iNuusCOXc6gz3KKata8PeqMme9NEQz18Ud/yy7jpQKwffQklybBJGHvOut7dz2L2 rjMyF09naDaTihNYgBNENuIV2z15kKgELh5d9zcbVwd+fbU0m2mR4Esv MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290 MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9 uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0 WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0 Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= MIIEPDCCAySgAwIBAgIQSEus8arH1xND0aJ0NUmXJTANBgkqhkiG9w0BAQUFADBv MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFk ZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBF eHRlcm5hbCBDQSBSb290MB4XDTA1MDYwNzA4MDkxMFoXDTIwMDUzMDEwNDgzOFow gZcxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtl IENpdHkxHjAcBgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMY aHR0cDovL3d3dy51c2VydHJ1c3QuY29tMR8wHQYDVQQDExZVVE4tVVNFUkZpcnN0 LUhhcmR3YXJlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsffDOD+0 qH/POYJRZ9Btn9L/WPPnnyvsDYlUmbk4mRb34CF5SMK7YXQSlh08anLVPBBnOjnt KxPNZuuVCTOkbJex6MbswXV5nEZejavQav25KlUXEFSzGfCa9vGxXbanbfvgcRdr ooj7AN/+GjF3DJoBerEy4ysBBzhuw6VeI7xFm3tQwckwj9vlK3rTW/szQB6g1ZgX vIuHw4nTXaCOsqqq9o5piAbF+okh8widaS4JM5spDUYPjMxJNLBpUb35Bs1orWZM vD6sYb0KiA7I3z3ufARMnQpea5HW7sftKI2rTYeJc9BupNAeFosU4XZEA39jrOTN SZzFkvSrMqFIWwIDAQABo4GqMIGnMB8GA1UdIwQYMBaAFK29mHo0tCb3+sQmVO8D veAky1QaMB0GA1UdDgQWBBShcl8mGyiYQ5VdBzfVhZadS9LDRTAOBgNVHQ8BAf8E BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBEBgNVHR8EPTA7MDmgN6A1hjNodHRwOi8v Y3JsLnVzZXJ0cnVzdC5jb20vQWRkVHJ1c3RFeHRlcm5hbENBUm9vdC5jcmwwDQYJ KoZIhvcNAQEFBQADggEBADzse+Cuow6WbTDXhcbSaFtFWoKmNA+wyZIjXhFtCBGy dAkjOjUlc1heyrl8KPpH7PmgA1hQtlPvjNs55Gfp2MooRtSn4PU4dfjny1y/HRE8 akCbLURW0/f/BSgyDBXIZEWT6CEkjy3aeoR7T8/NsiV8dxDTlNEEkaglHAkiD31E NREU768A/l7qX46w2ZJZuvwTlqAYAVbO2vYoC7Gv3VxPXLLzj1pxz+0YrWOIHY6V 9+qV5x+tkLiECEeFfyIvGh1IMNZMCNg3GWcyK+tc0LL8blefBDVekAB+EcfeEyrN pG1FJseIVqDwavfY5/wnfmcI0L36tsNhAgFlubgvz1o= MIIEmDCCA4CgAwIBAgIQS8gUAy8H+mqk8Nop32F5ujANBgkqhkiG9w0BAQUFADCB lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3Qt SGFyZHdhcmUwHhcNMDkwNTE4MDAwMDAwWhcNMjAwNTMwMTA0ODM4WjA2MQswCQYD VQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEgU1NMIENB MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw+NIxC9cwcupmf0booNd ij2tOtDipEMfTQ7+NSUwpWkbxOjlwY9UfuFqoppcXN49/ALOlrhfj4NbzGBAkPjk tjolnF8UUeyx56+eUKExVccCvaxSin81joL6hK0V/qJ/gxA6VVOULAEWdJRUYyij 8lspPZSIgCDiFFkhGbSkmOFg5vLrooCDQ+CtaPN5GYtoQ1E/iptBhQw1jF218bbl p8ODtWsjb9Sl61DllPFKX+4nSxQSFSRMDc9ijbcAIa06Mg9YC18em9HfnY6pGTVQ L0GprTvG4EWyUzl/Ib8iGodcNK5Sbwd9ogtOnyt5pn0T3fV/g3wvWl13eHiRoBS/ fQIDAQABo4IBPjCCATowHwYDVR0jBBgwFoAUoXJfJhsomEOVXQc31YWWnUvSw0Uw HQYDVR0OBBYEFAy9k2gM896ro0lrKzdXR+qQ47ntMA4GA1UdDwEB/wQEAwIBBjAS BgNVHRMBAf8ECDAGAQH/AgEAMBgGA1UdIAQRMA8wDQYLKwYBBAGyMQECAh0wRAYD VR0fBD0wOzA5oDegNYYzaHR0cDovL2NybC51c2VydHJ1c3QuY29tL1VUTi1VU0VS Rmlyc3QtSGFyZHdhcmUuY3JsMHQGCCsGAQUFBwEBBGgwZjA9BggrBgEFBQcwAoYx aHR0cDovL2NydC51c2VydHJ1c3QuY29tL1VUTkFkZFRydXN0U2VydmVyX0NBLmNy dDAlBggrBgEFBQcwAYYZaHR0cDovL29jc3AudXNlcnRydXN0LmNvbTANBgkqhkiG 9w0BAQUFAAOCAQEATiPuSJz2hYtxxApuc5NywDqOgIrZs8qy1AGcKM/yXA4hRJML thoh45gBlA5nSYEevj0NTmDa76AxTpXv8916WoIgQ7ahY0OzUGlDYktWYrA0irkT Q1mT7BR5iPNIk+idyfqHcgxrVqDDFY1opYcfcS3mWm08aXFABFXcoEOUIEU4eNe9 itg5xt8Jt1qaqQO4KBB4zb8BG1oRPjj02Bs0ec8z0gH9rJjNbUcRkEy7uVvYcOfV r7bMxIbmdcCeKbYrDyqlaQIN4+mitF3A884saoU4dmHGSYKrUbOCprlBmCiY+2v+ ihb/MX5UR6g83EMmqZsFt57ANEORMNQywxFa4Q== authold.univ-metz.fr im.univ-metz.fr sauron.univ-metz.fr superviseur.univ-metz.fr CN=im.univ-metz.fr,OU=CRIUM,O=UNIVERSITE METZ,L=Metz,ST=fr,C=FR MIIE1jCCA76gAwIBAgIQcJ9DzkqhI+AmgehMkvWQ/DANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTA5MTIxNzAwMDAwMFoXDTEyMTIxNjIzNTk1OVowbTELMAkGA1UE BhMCRlIxCzAJBgNVBAgTAmZyMQ0wCwYDVQQHEwRNZXR6MRgwFgYDVQQKEw9VTklW RVJTSVRFIE1FVFoxDjAMBgNVBAsTBUNSSVVNMRgwFgYDVQQDEw9pbS51bml2LW1l dHouZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDAPx9v+rMjJ0OF vrfU6gJ8y6P6ORtofC3xoGQ46cGgvs3bQp1vEhPQw2xzROXaLDYbHvLwiA9LCdqn 0VqEDbh6mMQw1R3SrIcVjEObRBawyE+vqPLx7Lxd2k4eWA5TGid2Vjw1vM3RlzxR xCh6o1wQR9WinYk2EEevYcOBpspfmQ8zkUWXxCN6+qZFTaOli80v6S2q5loSSbZR HLJ4LLRL5Jg4pTXaUD+ypcBd573XAHrLLzl9sdvWKl1Vn+XZ1/G0XfX/sI1m/90H 3t7DIfk3IW6lZoeBXW3c6vchNRiZCGwM26oLBxmxqpU9ieG4q2TLIasjqIERDLY8 CNaxDf3XAgMBAAGjggGnMIIBozAfBgNVHSMEGDAWgBQMvZNoDPPeq6NJays3V0fq kOO57TAdBgNVHQ4EFgQUE8ij2tN8ddSsKFgqXnXmqiu1QtwwDgYDVR0PAQH/BAQD AgWgMAwGA1UdEwEB/wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMC MBgGA1UdIAQRMA8wDQYLKwYBBAGyMQECAh0wOgYDVR0fBDMwMTAvoC2gK4YpaHR0 cDovL2NybC50Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcmwwbQYIKwYBBQUH AQEEYTBfMDUGCCsGAQUFBzAChilodHRwOi8vY3J0LnRjcy50ZXJlbmEub3JnL1RF UkVOQVNTTENBLmNydDAmBggrBgEFBQcwAYYaaHR0cDovL29jc3AudGNzLnRlcmVu YS5vcmcwXwYDVR0RBFgwVoIPaW0udW5pdi1tZXR6LmZyghRhdXRob2xkLnVuaXYt bWV0ei5mcoITc2F1cm9uLnVuaXYtbWV0ei5mcoIYc3VwZXJ2aXNldXIudW5pdi1t ZXR6LmZyMA0GCSqGSIb3DQEBBQUAA4IBAQB4u6WlBimVohmGpOWGAklThy9EXBSe u27blAV0GL87kma7gXQK9p/EwC6XqLXDumv7Ukqpx6aYDGnUJHqPf5Qm0cLl2C5F jf2lMUeurFlZC9rRccw7/QzVIh8v48aA07L5dExDboTGKam1ZiZGM96l3814hu4n oz/1/TY4t45G7k5B09IxkN5PZcmm0ZAgkldRg0td3KKpzkBEK2ayoeaIWJ27yZHR iNuusCOXc6gz3KKata8PeqMme9NEQz18Ud/yy7jpQKwffQklybBJGHvOut7dz2L2 rjMyF09naDaTihNYgBNENuIV2z15kKgELh5d9zcbVwd+fbU0m2mR4Esv MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290 MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9 uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0 WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0 Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= MIIEPDCCAySgAwIBAgIQSEus8arH1xND0aJ0NUmXJTANBgkqhkiG9w0BAQUFADBv MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFk ZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBF eHRlcm5hbCBDQSBSb290MB4XDTA1MDYwNzA4MDkxMFoXDTIwMDUzMDEwNDgzOFow gZcxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtl IENpdHkxHjAcBgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMY aHR0cDovL3d3dy51c2VydHJ1c3QuY29tMR8wHQYDVQQDExZVVE4tVVNFUkZpcnN0 LUhhcmR3YXJlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsffDOD+0 qH/POYJRZ9Btn9L/WPPnnyvsDYlUmbk4mRb34CF5SMK7YXQSlh08anLVPBBnOjnt KxPNZuuVCTOkbJex6MbswXV5nEZejavQav25KlUXEFSzGfCa9vGxXbanbfvgcRdr ooj7AN/+GjF3DJoBerEy4ysBBzhuw6VeI7xFm3tQwckwj9vlK3rTW/szQB6g1ZgX vIuHw4nTXaCOsqqq9o5piAbF+okh8widaS4JM5spDUYPjMxJNLBpUb35Bs1orWZM vD6sYb0KiA7I3z3ufARMnQpea5HW7sftKI2rTYeJc9BupNAeFosU4XZEA39jrOTN SZzFkvSrMqFIWwIDAQABo4GqMIGnMB8GA1UdIwQYMBaAFK29mHo0tCb3+sQmVO8D veAky1QaMB0GA1UdDgQWBBShcl8mGyiYQ5VdBzfVhZadS9LDRTAOBgNVHQ8BAf8E BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBEBgNVHR8EPTA7MDmgN6A1hjNodHRwOi8v Y3JsLnVzZXJ0cnVzdC5jb20vQWRkVHJ1c3RFeHRlcm5hbENBUm9vdC5jcmwwDQYJ KoZIhvcNAQEFBQADggEBADzse+Cuow6WbTDXhcbSaFtFWoKmNA+wyZIjXhFtCBGy dAkjOjUlc1heyrl8KPpH7PmgA1hQtlPvjNs55Gfp2MooRtSn4PU4dfjny1y/HRE8 akCbLURW0/f/BSgyDBXIZEWT6CEkjy3aeoR7T8/NsiV8dxDTlNEEkaglHAkiD31E NREU768A/l7qX46w2ZJZuvwTlqAYAVbO2vYoC7Gv3VxPXLLzj1pxz+0YrWOIHY6V 9+qV5x+tkLiECEeFfyIvGh1IMNZMCNg3GWcyK+tc0LL8blefBDVekAB+EcfeEyrN pG1FJseIVqDwavfY5/wnfmcI0L36tsNhAgFlubgvz1o= MIIEmDCCA4CgAwIBAgIQS8gUAy8H+mqk8Nop32F5ujANBgkqhkiG9w0BAQUFADCB lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3Qt SGFyZHdhcmUwHhcNMDkwNTE4MDAwMDAwWhcNMjAwNTMwMTA0ODM4WjA2MQswCQYD VQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEgU1NMIENB MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw+NIxC9cwcupmf0booNd ij2tOtDipEMfTQ7+NSUwpWkbxOjlwY9UfuFqoppcXN49/ALOlrhfj4NbzGBAkPjk tjolnF8UUeyx56+eUKExVccCvaxSin81joL6hK0V/qJ/gxA6VVOULAEWdJRUYyij 8lspPZSIgCDiFFkhGbSkmOFg5vLrooCDQ+CtaPN5GYtoQ1E/iptBhQw1jF218bbl p8ODtWsjb9Sl61DllPFKX+4nSxQSFSRMDc9ijbcAIa06Mg9YC18em9HfnY6pGTVQ L0GprTvG4EWyUzl/Ib8iGodcNK5Sbwd9ogtOnyt5pn0T3fV/g3wvWl13eHiRoBS/ fQIDAQABo4IBPjCCATowHwYDVR0jBBgwFoAUoXJfJhsomEOVXQc31YWWnUvSw0Uw HQYDVR0OBBYEFAy9k2gM896ro0lrKzdXR+qQ47ntMA4GA1UdDwEB/wQEAwIBBjAS BgNVHRMBAf8ECDAGAQH/AgEAMBgGA1UdIAQRMA8wDQYLKwYBBAGyMQECAh0wRAYD VR0fBD0wOzA5oDegNYYzaHR0cDovL2NybC51c2VydHJ1c3QuY29tL1VUTi1VU0VS Rmlyc3QtSGFyZHdhcmUuY3JsMHQGCCsGAQUFBwEBBGgwZjA9BggrBgEFBQcwAoYx aHR0cDovL2NydC51c2VydHJ1c3QuY29tL1VUTkFkZFRydXN0U2VydmVyX0NBLmNy dDAlBggrBgEFBQcwAYYZaHR0cDovL29jc3AudXNlcnRydXN0LmNvbTANBgkqhkiG 9w0BAQUFAAOCAQEATiPuSJz2hYtxxApuc5NywDqOgIrZs8qy1AGcKM/yXA4hRJML thoh45gBlA5nSYEevj0NTmDa76AxTpXv8916WoIgQ7ahY0OzUGlDYktWYrA0irkT Q1mT7BR5iPNIk+idyfqHcgxrVqDDFY1opYcfcS3mWm08aXFABFXcoEOUIEU4eNe9 itg5xt8Jt1qaqQO4KBB4zb8BG1oRPjj02Bs0ec8z0gH9rJjNbUcRkEy7uVvYcOfV r7bMxIbmdcCeKbYrDyqlaQIN4+mitF3A884saoU4dmHGSYKrUbOCprlBmCiY+2v+ ihb/MX5UR6g83EMmqZsFt57ANEORMNQywxFa4Q== service-wifi.univ-metz.fr stargate1.univ-metz.fr stargate2.univ-metz.fr CN=service-wifi.univ-metz.fr,OU=CRIUM,O=UNIVERSITE METZ,L=Metz,ST=fr,C=FR MIIE1TCCA72gAwIBAgIQVSW+DgSWiRThC6YD6F/oGzANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTEwMTExNTAwMDAwMFoXDTEzMTExNDIzNTk1OVowdzELMAkGA1UE BhMCRlIxCzAJBgNVBAgTAmZyMQ0wCwYDVQQHEwRNZXR6MRgwFgYDVQQKEw9VTklW RVJTSVRFIE1FVFoxDjAMBgNVBAsTBUNSSVVNMSIwIAYDVQQDExlzZXJ2aWNlLXdp ZmkudW5pdi1tZXR6LmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA rPdhN5+oIA0F6YhiT3CpGos32zZ6+HEgkgFacZJeSYiEJUZqh2HcJUyoh+AVBz/9 iArhFaxfTRMIAyYomPOWO/wEJ9T0QR+14+8R3Duvaq2F+gh3Cy67VCWBm2yCMj3r Na2ikxjd+aNZi6MDRv5/TNP/ekilAI23pqoGhWWMEawAiLQPsc/etLs1OTUSZMYC 3QoeU+7JVf4kCIxtagQBAPZsPMg0sOy0pQIFPbxmfsRKXXvCLvdbKjXbKBJ1BkYA 1JZGWiRsnBh31xjz3+YGBftDktdGGYC6PRBocXeoPp7HiA1S2lf6X6ILAF42TquT 1jJJ867NWDnEmqxMoMaLaQIDAQABo4IBnDCCAZgwHwYDVR0jBBgwFoAUDL2TaAzz 3qujSWsrN1dH6pDjue0wHQYDVR0OBBYEFDY0pyMHNZCoyk4wPhXn5c/z5kVqMA4G A1UdDwEB/wQEAwIFoDAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMB BggrBgEFBQcDAjAYBgNVHSAEETAPMA0GCysGAQQBsjEBAgIdMDoGA1UdHwQzMDEw L6AtoCuGKWh0dHA6Ly9jcmwudGNzLnRlcmVuYS5vcmcvVEVSRU5BU1NMQ0EuY3Js MG0GCCsGAQUFBwEBBGEwXzA1BggrBgEFBQcwAoYpaHR0cDovL2NydC50Y3MudGVy ZW5hLm9yZy9URVJFTkFTU0xDQS5jcnQwJgYIKwYBBQUHMAGGGmh0dHA6Ly9vY3Nw LnRjcy50ZXJlbmEub3JnMFQGA1UdEQRNMEuCGXNlcnZpY2Utd2lmaS51bml2LW1l dHouZnKCFnN0YXJnYXRlMS51bml2LW1ldHouZnKCFnN0YXJnYXRlMi51bml2LW1l dHouZnIwDQYJKoZIhvcNAQEFBQADggEBAIJ77t03BPctKuzXg7RDVpfjwJ8P7LwB nC9d/+P6d+zSdU8AqqXGt8yp6ygDhiyRdlTG9M4jsI/i6O5hBZ71rp3n2o1zeasD rUk+Cc+7OdX3y9hOD/8dzw9RpCme9hvzNoc3HebElQvMrrO+ThlhdSY0phkwjPWZ AIk2jP8pPSzPX1PYkqHat71GH/KroXamTODuIUKSoLwrngW0Eq5+KHxaBB4QFX0j dO/+w8y4KKa9WffCWT9SUvfymWDuDEYngv4pl8teJOldjT41TeaLZPhzsVN8iGyu zAc+nxOp+q+GSQ6XMVQu75Ds93+poMCdJyoYHhbFs77DNrsCDN6VNDI= service-wifi.univ-metz.fr stargate1.univ-metz.fr stargate2.univ-metz.fr CN=service-wifi.univ-metz.fr,OU=CRIUM,O=UNIVERSITE METZ,L=Metz,ST=fr,C=FR MIIE1TCCA72gAwIBAgIQVSW+DgSWiRThC6YD6F/oGzANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTEwMTExNTAwMDAwMFoXDTEzMTExNDIzNTk1OVowdzELMAkGA1UE BhMCRlIxCzAJBgNVBAgTAmZyMQ0wCwYDVQQHEwRNZXR6MRgwFgYDVQQKEw9VTklW RVJTSVRFIE1FVFoxDjAMBgNVBAsTBUNSSVVNMSIwIAYDVQQDExlzZXJ2aWNlLXdp ZmkudW5pdi1tZXR6LmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA rPdhN5+oIA0F6YhiT3CpGos32zZ6+HEgkgFacZJeSYiEJUZqh2HcJUyoh+AVBz/9 iArhFaxfTRMIAyYomPOWO/wEJ9T0QR+14+8R3Duvaq2F+gh3Cy67VCWBm2yCMj3r Na2ikxjd+aNZi6MDRv5/TNP/ekilAI23pqoGhWWMEawAiLQPsc/etLs1OTUSZMYC 3QoeU+7JVf4kCIxtagQBAPZsPMg0sOy0pQIFPbxmfsRKXXvCLvdbKjXbKBJ1BkYA 1JZGWiRsnBh31xjz3+YGBftDktdGGYC6PRBocXeoPp7HiA1S2lf6X6ILAF42TquT 1jJJ867NWDnEmqxMoMaLaQIDAQABo4IBnDCCAZgwHwYDVR0jBBgwFoAUDL2TaAzz 3qujSWsrN1dH6pDjue0wHQYDVR0OBBYEFDY0pyMHNZCoyk4wPhXn5c/z5kVqMA4G A1UdDwEB/wQEAwIFoDAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMB BggrBgEFBQcDAjAYBgNVHSAEETAPMA0GCysGAQQBsjEBAgIdMDoGA1UdHwQzMDEw L6AtoCuGKWh0dHA6Ly9jcmwudGNzLnRlcmVuYS5vcmcvVEVSRU5BU1NMQ0EuY3Js MG0GCCsGAQUFBwEBBGEwXzA1BggrBgEFBQcwAoYpaHR0cDovL2NydC50Y3MudGVy ZW5hLm9yZy9URVJFTkFTU0xDQS5jcnQwJgYIKwYBBQUHMAGGGmh0dHA6Ly9vY3Nw LnRjcy50ZXJlbmEub3JnMFQGA1UdEQRNMEuCGXNlcnZpY2Utd2lmaS51bml2LW1l dHouZnKCFnN0YXJnYXRlMS51bml2LW1ldHouZnKCFnN0YXJnYXRlMi51bml2LW1l dHouZnIwDQYJKoZIhvcNAQEFBQADggEBAIJ77t03BPctKuzXg7RDVpfjwJ8P7LwB nC9d/+P6d+zSdU8AqqXGt8yp6ygDhiyRdlTG9M4jsI/i6O5hBZ71rp3n2o1zeasD rUk+Cc+7OdX3y9hOD/8dzw9RpCme9hvzNoc3HebElQvMrrO+ThlhdSY0phkwjPWZ AIk2jP8pPSzPX1PYkqHat71GH/KroXamTODuIUKSoLwrngW0Eq5+KHxaBB4QFX0j dO/+w8y4KKa9WffCWT9SUvfymWDuDEYngv4pl8teJOldjT41TeaLZPhzsVN8iGyu zAc+nxOp+q+GSQ6XMVQu75Ds93+poMCdJyoYHhbFs77DNrsCDN6VNDI= univ-montp1.fr MIIEmjCCA4KgAwIBAgIRAPySCVGZx84C0a/SjMDoFYUwDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0wOTEyMTAwMDAwMDBaFw0xMjEyMDkyMzU5NTlaMGsxCzAJBgNV BAYTAkZSMRQwEgYDVQQHEwtNb250cGVsbGllcjEiMCAGA1UECgwZVW5pdmVyc2l0 w6kgTW9udHBlbGxpZXIgMTEiMCAGA1UEAxMZZmVkZXJhdGlvbi51bml2LW1vbnRw MS5mcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANU8pV0nPebu/GeN 74xGlXxV64piDi9oPdnfhzymqcwhYKxGafdZT7ig5aPa8oqzgqALx6QGb5MW/Jqq sIsnrZ0Viq93WsFix/v023VEbfqMjhS7GvlbkISDFsHwfOqWGOctH4U9YIaxNsPU ycicV+xjkcHCeIkV1/iA5WjsmWjYTiS6OjkYBlJi8K7ewUhJqbjMitJOa+MPiHA+ l2QOweyvBP7CXIBfD+I7SkhAKOkcY1HY3P+E/Jm5FFVq7XgegUI4HnTPYmdFHQcI IIH7h9R0zjGI1cNxXGbcU022Fk1yApbJuiohwKwsl5tkdQSQW1MPAyS2Pd5lOh+t cKVS64UCAwEAAaOCAWwwggFoMB8GA1UdIwQYMBaAFAy9k2gM896ro0lrKzdXR+qQ 47ntMB0GA1UdDgQWBBTvuTrb1SlFO4wuVCAylqcHvnM6+jAOBgNVHQ8BAf8EBAMC BaAwDAYDVR0TAQH/BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIw GAYDVR0gBBEwDzANBgsrBgEEAbIxAQICHTA6BgNVHR8EMzAxMC+gLaArhilodHRw Oi8vY3JsLnRjcy50ZXJlbmEub3JnL1RFUkVOQVNTTENBLmNybDBtBggrBgEFBQcB AQRhMF8wNQYIKwYBBQUHMAKGKWh0dHA6Ly9jcnQudGNzLnRlcmVuYS5vcmcvVEVS RU5BU1NMQ0EuY3J0MCYGCCsGAQUFBzABhhpodHRwOi8vb2NzcC50Y3MudGVyZW5h Lm9yZzAkBgNVHREEHTAbghlmZWRlcmF0aW9uLnVuaXYtbW9udHAxLmZyMA0GCSqG SIb3DQEBBQUAA4IBAQBs719Xv+zweuNrvdoss2F0iOkIyyUp9dM5lHKU4gRqfgfo liHFw2K2kISgVEFN1LItH22Il/XQI/GmkCA77SIAFH4e56iavZXhLLXrTRItyEy7 hytw5E1pOoujgA7muJHOVZC9YPKfxM0Jm+/+AYnvg0gx5XztpIhFiJNrfWCsa4B8 bxjNOQD/A7ABQ8QB8o/SlbOg5JRvdicRxiJ8b1TJ+qC5amcwyIy2kSUKDlUCB5YG dxgENHByQ2jDFbk7bab8C0FqCTYvXDC3zVF3O8teAcLVVqgx77rxi0QaiXglSG5O blhyWpP4kTIvlkwJhn8FGdWa7UIrQP4W68yhBSIz MIIEMTCCAxmgAwIBAgILAQAAAAABEIIWkfkwDQYJKoZIhvcNAQEFBQAwXzELMAkG A1UEBhMCQkUxEzARBgNVBAoTCkN5YmVydHJ1c3QxFzAVBgNVBAsTDkVkdWNhdGlv bmFsIENBMSIwIAYDVQQDExlDeWJlcnRydXN0IEVkdWNhdGlvbmFsIENBMB4XDTA3 MDIwMjEwNTM0MVoXDTEwMDIwMjEwNTM0MVowVzELMAkGA1UEBhMCRlIxJDAiBgNV BAoTG1VOSVZFUlNJVEUgREUgTU9OVFBFTExJRVIgSTEiMCAGA1UEAxMZZmVkZXJh dGlvbi51bml2LW1vbnRwMS5mcjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA 3bV94kw52b7cUZ+5dwKhy7COzH4v8q5kKHa5ZJHb5F5JpqMM4yV+Xcgzkz8/ipZ4 eDgQAlipduJDM0rAiM9h9j0M/PtGJiBEEZ53jnloMNkM0/5I9UZW+hhCnjuefgLW V8OCG6UvfENyi4j057zdZUO8YibaK8WRQhsqhZAjJx8CAwEAAaOCAXgwggF0MFAG A1UdIARJMEcwRQYHKoZIsT4BADA6MDgGCCsGAQUFBwIBFixodHRwOi8vd3d3Lmds b2JhbHNpZ24ubmV0L3JlcG9zaXRvcnkvY3BzLmNmbTAOBgNVHQ8BAf8EBAMCBaAw HwYDVR0jBBgwFoAUZWWjPdc7EaMKByU3yUJKW3Z3UOEwHQYDVR0OBBYEFP0l+5uy PbsiLrOOWT1gvtqkwQV8MDoGA1UdHwQzMDEwL6AtoCuGKWh0dHA6Ly9jcmwuZ2xv YmFsc2lnbi5uZXQvZWR1Y2F0aW9uYWwuY3JsME8GCCsGAQUFBwEBBEMwQTA/Bggr BgEFBQcwAoYzaHR0cDovL3NlY3VyZS5nbG9iYWxzaWduLm5ldC9jYWNlcnQvZWR1 Y2F0aW9uYWwuY3J0MB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAkBgNV HREEHTAbghlmZWRlcmF0aW9uLnVuaXYtbW9udHAxLmZyMA0GCSqGSIb3DQEBBQUA A4IBAQAeKZlIOPhsAlMnS5wjx0dAZ+Cp8JaQBPZ3Kq/8GNDLVV2E/cY0lvzToKGj 5Cnf419b1XlsDm8lIv8UVKzjOynFFkyh5BeglecJjxFOQDgc2vb1bpU+IL3Is257 NPHtrl4X8oa/QEPFfraDADqhvWXuXG1PSavRtA0MhzoJZVs8YsHqYbCmh1Yruple URvWWuxTpQR4l5H2s9OSTAiDVdSh5LjyYh6RSFBcLh6duSz4MiN9CqS50Bsrk6aO q1NvhX2b1yCXrVsed1QzNSERKwQVXlUbuVv+p3aIX8KQueWLe/WzqnZK2qojDUja tiborsB0MdQdBYm8T4Oov4I7sL59 urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient univ-montp1.fr MIIEmjCCA4KgAwIBAgIRAPySCVGZx84C0a/SjMDoFYUwDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0wOTEyMTAwMDAwMDBaFw0xMjEyMDkyMzU5NTlaMGsxCzAJBgNV BAYTAkZSMRQwEgYDVQQHEwtNb250cGVsbGllcjEiMCAGA1UECgwZVW5pdmVyc2l0 w6kgTW9udHBlbGxpZXIgMTEiMCAGA1UEAxMZZmVkZXJhdGlvbi51bml2LW1vbnRw MS5mcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANU8pV0nPebu/GeN 74xGlXxV64piDi9oPdnfhzymqcwhYKxGafdZT7ig5aPa8oqzgqALx6QGb5MW/Jqq sIsnrZ0Viq93WsFix/v023VEbfqMjhS7GvlbkISDFsHwfOqWGOctH4U9YIaxNsPU ycicV+xjkcHCeIkV1/iA5WjsmWjYTiS6OjkYBlJi8K7ewUhJqbjMitJOa+MPiHA+ l2QOweyvBP7CXIBfD+I7SkhAKOkcY1HY3P+E/Jm5FFVq7XgegUI4HnTPYmdFHQcI IIH7h9R0zjGI1cNxXGbcU022Fk1yApbJuiohwKwsl5tkdQSQW1MPAyS2Pd5lOh+t cKVS64UCAwEAAaOCAWwwggFoMB8GA1UdIwQYMBaAFAy9k2gM896ro0lrKzdXR+qQ 47ntMB0GA1UdDgQWBBTvuTrb1SlFO4wuVCAylqcHvnM6+jAOBgNVHQ8BAf8EBAMC BaAwDAYDVR0TAQH/BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIw GAYDVR0gBBEwDzANBgsrBgEEAbIxAQICHTA6BgNVHR8EMzAxMC+gLaArhilodHRw Oi8vY3JsLnRjcy50ZXJlbmEub3JnL1RFUkVOQVNTTENBLmNybDBtBggrBgEFBQcB AQRhMF8wNQYIKwYBBQUHMAKGKWh0dHA6Ly9jcnQudGNzLnRlcmVuYS5vcmcvVEVS RU5BU1NMQ0EuY3J0MCYGCCsGAQUFBzABhhpodHRwOi8vb2NzcC50Y3MudGVyZW5h Lm9yZzAkBgNVHREEHTAbghlmZWRlcmF0aW9uLnVuaXYtbW9udHAxLmZyMA0GCSqG SIb3DQEBBQUAA4IBAQBs719Xv+zweuNrvdoss2F0iOkIyyUp9dM5lHKU4gRqfgfo liHFw2K2kISgVEFN1LItH22Il/XQI/GmkCA77SIAFH4e56iavZXhLLXrTRItyEy7 hytw5E1pOoujgA7muJHOVZC9YPKfxM0Jm+/+AYnvg0gx5XztpIhFiJNrfWCsa4B8 bxjNOQD/A7ABQ8QB8o/SlbOg5JRvdicRxiJ8b1TJ+qC5amcwyIy2kSUKDlUCB5YG dxgENHByQ2jDFbk7bab8C0FqCTYvXDC3zVF3O8teAcLVVqgx77rxi0QaiXglSG5O blhyWpP4kTIvlkwJhn8FGdWa7UIrQP4W68yhBSIz MIIEMTCCAxmgAwIBAgILAQAAAAABEIIWkfkwDQYJKoZIhvcNAQEFBQAwXzELMAkG A1UEBhMCQkUxEzARBgNVBAoTCkN5YmVydHJ1c3QxFzAVBgNVBAsTDkVkdWNhdGlv bmFsIENBMSIwIAYDVQQDExlDeWJlcnRydXN0IEVkdWNhdGlvbmFsIENBMB4XDTA3 MDIwMjEwNTM0MVoXDTEwMDIwMjEwNTM0MVowVzELMAkGA1UEBhMCRlIxJDAiBgNV BAoTG1VOSVZFUlNJVEUgREUgTU9OVFBFTExJRVIgSTEiMCAGA1UEAxMZZmVkZXJh dGlvbi51bml2LW1vbnRwMS5mcjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA 3bV94kw52b7cUZ+5dwKhy7COzH4v8q5kKHa5ZJHb5F5JpqMM4yV+Xcgzkz8/ipZ4 eDgQAlipduJDM0rAiM9h9j0M/PtGJiBEEZ53jnloMNkM0/5I9UZW+hhCnjuefgLW V8OCG6UvfENyi4j057zdZUO8YibaK8WRQhsqhZAjJx8CAwEAAaOCAXgwggF0MFAG A1UdIARJMEcwRQYHKoZIsT4BADA6MDgGCCsGAQUFBwIBFixodHRwOi8vd3d3Lmds b2JhbHNpZ24ubmV0L3JlcG9zaXRvcnkvY3BzLmNmbTAOBgNVHQ8BAf8EBAMCBaAw HwYDVR0jBBgwFoAUZWWjPdc7EaMKByU3yUJKW3Z3UOEwHQYDVR0OBBYEFP0l+5uy PbsiLrOOWT1gvtqkwQV8MDoGA1UdHwQzMDEwL6AtoCuGKWh0dHA6Ly9jcmwuZ2xv YmFsc2lnbi5uZXQvZWR1Y2F0aW9uYWwuY3JsME8GCCsGAQUFBwEBBEMwQTA/Bggr BgEFBQcwAoYzaHR0cDovL3NlY3VyZS5nbG9iYWxzaWduLm5ldC9jYWNlcnQvZWR1 Y2F0aW9uYWwuY3J0MB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAkBgNV HREEHTAbghlmZWRlcmF0aW9uLnVuaXYtbW9udHAxLmZyMA0GCSqGSIb3DQEBBQUA A4IBAQAeKZlIOPhsAlMnS5wjx0dAZ+Cp8JaQBPZ3Kq/8GNDLVV2E/cY0lvzToKGj 5Cnf419b1XlsDm8lIv8UVKzjOynFFkyh5BeglecJjxFOQDgc2vb1bpU+IL3Is257 NPHtrl4X8oa/QEPFfraDADqhvWXuXG1PSavRtA0MhzoJZVs8YsHqYbCmh1Yruple URvWWuxTpQR4l5H2s9OSTAiDVdSh5LjyYh6RSFBcLh6duSz4MiN9CqS50Bsrk6aO q1NvhX2b1yCXrVsed1QzNSERKwQVXlUbuVv+p3aIX8KQueWLe/WzqnZK2qojDUja tiborsB0MdQdBYm8T4Oov4I7sL59 urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Montpellier 1 Université de Montpellier 1 http://unknown.site.com Perrone Stéphane fed-admin@univ-montp1.fr Boz Franck fed-admin@univ-montp1.fr MIIEmTCCA4GgAwIBAgIQBvJ0A8MowyTzOSsU7ERWOzANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTA5MTAyMjAwMDAwMFoXDTEyMTAyMTIzNTk1OVowazELMAkGA1UE BhMCRlIxFDASBgNVBAcTC01vbnRwZWxsaWVyMSIwIAYDVQQKDBlVbml2ZXJzaXTD qSBNb250cGVsbGllciAxMSIwIAYDVQQDExlsb2dpbi5qYXp6LnVuaXYtbW9udHAx LmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0vV0hp2dsHS001Es 5ktxsDug4e9sj/bTkR2S+Va5GRzxcJZ8T0mmjLbvFfOSotYNERtDn8GKtBetKVH1 5zAtA+veV5vu0xDs3b6UkHCEWTwRMswqBEeugxNBA1ybGnwIOlBMod6OtRrStDLj 6/XrxnEhkKsh8QUkYTDPAoS2yv1NHYMFpxiEHprTTR5y/CDIu2Pbu5alefwHw2ei q9hDk+BmCAjwJgjJkRmGJWMxl4gjoPFpw9B/4iCuDvPONLHrcr7b57VjaSbo18L+ hLajwiEixOHAKDD38DloETpLZPalWmRC542Zx2aWHOhZP+jnxVjTQiyLtOLoAvl4 pIjsBwIDAQABo4IBbDCCAWgwHwYDVR0jBBgwFoAUDL2TaAzz3qujSWsrN1dH6pDj ue0wHQYDVR0OBBYEFAv+vgyZH5cwr/uvXUZ7niEuFHqWMA4GA1UdDwEB/wQEAwIF oDAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAY BgNVHSAEETAPMA0GCysGAQQBsjEBAgIdMDoGA1UdHwQzMDEwL6AtoCuGKWh0dHA6 Ly9jcmwudGNzLnRlcmVuYS5vcmcvVEVSRU5BU1NMQ0EuY3JsMG0GCCsGAQUFBwEB BGEwXzA1BggrBgEFBQcwAoYpaHR0cDovL2NydC50Y3MudGVyZW5hLm9yZy9URVJF TkFTU0xDQS5jcnQwJgYIKwYBBQUHMAGGGmh0dHA6Ly9vY3NwLnRjcy50ZXJlbmEu b3JnMCQGA1UdEQQdMBuCGWxvZ2luLmphenoudW5pdi1tb250cDEuZnIwDQYJKoZI hvcNAQEFBQADggEBAJEaX3LV0iAyJutET0vFbXClyoL7KnSS6VMgQf6HbunKIwaf Za5wQKV78vrwirbUgMJ24jPNc11jPIHb8zg5RSgxNJ8iTljj50KDN1gR8Y06eVWD T27T06XTmMxnjrfkPojSECCeEYE/EkbpFpdPwd/QmBAN/c0MwTdQKdVpDCTKev2w WGGptZPGHdfCeifsdnmc+70byfQdgRinOHBIUuzfaQYk2ztgOesCf7cxCkTkQzxf /tfYMQ6DCut1xZRb9F4SG8vntpPM13GyMY+6e83epel1hBGejCoAAgcoXYl+jwUG 6fIlA6psMl7+j6h8J1zKm3HFCx7LslKS/f7KBFY= MIIEmTCCA4GgAwIBAgIQBvJ0A8MowyTzOSsU7ERWOzANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTA5MTAyMjAwMDAwMFoXDTEyMTAyMTIzNTk1OVowazELMAkGA1UE BhMCRlIxFDASBgNVBAcTC01vbnRwZWxsaWVyMSIwIAYDVQQKDBlVbml2ZXJzaXTD qSBNb250cGVsbGllciAxMSIwIAYDVQQDExlsb2dpbi5qYXp6LnVuaXYtbW9udHAx LmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0vV0hp2dsHS001Es 5ktxsDug4e9sj/bTkR2S+Va5GRzxcJZ8T0mmjLbvFfOSotYNERtDn8GKtBetKVH1 5zAtA+veV5vu0xDs3b6UkHCEWTwRMswqBEeugxNBA1ybGnwIOlBMod6OtRrStDLj 6/XrxnEhkKsh8QUkYTDPAoS2yv1NHYMFpxiEHprTTR5y/CDIu2Pbu5alefwHw2ei q9hDk+BmCAjwJgjJkRmGJWMxl4gjoPFpw9B/4iCuDvPONLHrcr7b57VjaSbo18L+ hLajwiEixOHAKDD38DloETpLZPalWmRC542Zx2aWHOhZP+jnxVjTQiyLtOLoAvl4 pIjsBwIDAQABo4IBbDCCAWgwHwYDVR0jBBgwFoAUDL2TaAzz3qujSWsrN1dH6pDj ue0wHQYDVR0OBBYEFAv+vgyZH5cwr/uvXUZ7niEuFHqWMA4GA1UdDwEB/wQEAwIF oDAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAY BgNVHSAEETAPMA0GCysGAQQBsjEBAgIdMDoGA1UdHwQzMDEwL6AtoCuGKWh0dHA6 Ly9jcmwudGNzLnRlcmVuYS5vcmcvVEVSRU5BU1NMQ0EuY3JsMG0GCCsGAQUFBwEB BGEwXzA1BggrBgEFBQcwAoYpaHR0cDovL2NydC50Y3MudGVyZW5hLm9yZy9URVJF TkFTU0xDQS5jcnQwJgYIKwYBBQUHMAGGGmh0dHA6Ly9vY3NwLnRjcy50ZXJlbmEu b3JnMCQGA1UdEQQdMBuCGWxvZ2luLmphenoudW5pdi1tb250cDEuZnIwDQYJKoZI hvcNAQEFBQADggEBAJEaX3LV0iAyJutET0vFbXClyoL7KnSS6VMgQf6HbunKIwaf Za5wQKV78vrwirbUgMJ24jPNc11jPIHb8zg5RSgxNJ8iTljj50KDN1gR8Y06eVWD T27T06XTmMxnjrfkPojSECCeEYE/EkbpFpdPwd/QmBAN/c0MwTdQKdVpDCTKev2w WGGptZPGHdfCeifsdnmc+70byfQdgRinOHBIUuzfaQYk2ztgOesCf7cxCkTkQzxf /tfYMQ6DCut1xZRb9F4SG8vntpPM13GyMY+6e83epel1hBGejCoAAgcoXYl+jwUG 6fIlA6psMl7+j6h8J1zKm3HFCx7LslKS/f7KBFY= urn:mace:shibboleth:1.0:nameIdentifier MORAT Aurélien aurelien.morat@univ-montp1.fr BOZ franck franck.boz@univ-montp1.fr univ-montp2.fr MIIDbTCCAlWgAwIBAgIUd7qthRFKphaqjAKa3OfPkTgoQCgwDQYJKoZIhvcNAQEF BQAwKzEpMCcGA1UEAxMgZmVkZXJhdGlvbnJlbmF0ZXIudW5pdi1tb250cDIuZnIw HhcNMDkwMTI5MTYwOTI1WhcNMjkwMTI5MTYwOTI1WjArMSkwJwYDVQQDEyBmZWRl cmF0aW9ucmVuYXRlci51bml2LW1vbnRwMi5mcjCCASIwDQYJKoZIhvcNAQEBBQAD ggEPADCCAQoCggEBAKbCEkUY6PCN5cAR9Xm2tLH78tkAas47YTI8ExEkF7VBiusg I+xopi8kCGN3wXufANOyfHI3zsphl3eLlwhdsF6c+IbegBywKSnDfMimvB3YWFbh jYOMOZOiFEphCdB2p6hvIKk+YFXH0m4KT1DVHMSzX8CwvXJ2am9lyI6wQdYShFdM zlDIqtQJR48n6HUlDQnWwq9jXxS/rXOOUzIe6w53cG6/mNMutXBoGfMVNSIoNSEC NHBD9RSwTJ5bzv2S2wiBjnCOj5vOpfysZ+duZgEGWM8JNpapB6M4YLoPr3OhcU+e pRahD0suZZUqU0R14hMJgEh2phxXF5pttQM0dwkCAwEAAaOBiDCBhTBkBgNVHREE XTBbgiBmZWRlcmF0aW9ucmVuYXRlci51bml2LW1vbnRwMi5mcoY3aHR0cHM6Ly9m ZWRlcmF0aW9ucmVuYXRlci51bml2LW1vbnRwMi5mci9pZHAvc2hpYmJvbGV0aDAd BgNVHQ4EFgQUWzhOl/tjSF/4azXQikbyjjVrPMEwDQYJKoZIhvcNAQEFBQADggEB AB4ts6C72K9/Wi1Tq91wHJdE83rJrfNpAVyZ1qKUSx6Okrkjga2keVBHSBXuNdfr eYkjMNbj2xLbX+BxKRxMgUnBjmaAdfOrOJFgsN/cqc3TEYo8BQZ7MiCOvzJWAgPV 9TVhrm5qRx8AICoXee0NenuxWoSKYzH2pv4VIkGM0IIRVkDrkOxbxTQCk3Y0yUZ4 iPn+hAxA9eFoYosSr16IJsBRCYiS0Rdr61YUCLgqf87nhWMbpKz5aPc3S0s0SEqa do3SW6CiYjzJ2ZYrYdmDzP0OuN/ZZK9gzH2hyOFaKlDJRKQtkdZ7RKb2tik/PPD6 cHXXZfLohck3GRQ/MJmd5x4= urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Montpellier 2 Université de Montpellier 2 http://unknown.site.com Loïc Bonavent loic.bonavent@univ-montp2.fr univ-montp3.fr MIIDNDCCAhygAwIBAgIVAJwJ10KIuByUPhJVuj+7HqVzV+6RMA0GCSqGSIb3DQEB BQUAMB0xGzAZBgNVBAMTEmlkcC51bml2LW1vbnRwMy5mcjAeFw0wOTExMjQxMDE0 MTNaFw0yOTExMjQxMDE0MTNaMB0xGzAZBgNVBAMTEmlkcC51bml2LW1vbnRwMy5m cjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMTccbqO8bGcrHNnBsYU BzWltaO1wKAcRrxca80YuL1OFrwtpBWEDgGE6cUPm7cL4ykHd24XzvbjUCNI7NBa C9XTU4LNE/A2k4X58Fx4HcQuefKctEun63MxVbjQVrlxH/Z/brtcHp/TSj0sYwNF CzBo1My09sCLtKbFNkmVguny94AJNW6MJHZCrud5C7fZLd6/+wJ+WryFhJw1tjxf hwsxQ3Y4024PWnHdAfyiLjS7I3AdyvsB0KiHRa8rmf75LxPCe3v6jZjGXbmG0ZUW 7tQML4PBGm8WJKlXVLOEQnPxLR1kN/+a1ekGuza7jZY3TElPIP1cR3YbAZMD4o1a DYsCAwEAAaNrMGkwSAYDVR0RBEEwP4ISaWRwLnVuaXYtbW9udHAzLmZyhilodHRw czovL2lkcC51bml2LW1vbnRwMy5mci9pZHAvc2hpYmJvbGV0aDAdBgNVHQ4EFgQU yZI0ysdigysg4IxXXXaXXJnQIxkwDQYJKoZIhvcNAQEFBQADggEBAGDmbv5WKi8X sX0lEJDbHWPHv9zV0DEZcgLDyUN6jzLkldcTNhc2nRY718X+CEMZjwUtGjyrZ6Nz ZrPxy1UTyhxNKBm6YDATPaI3JAKnEcd9P7I/an8M7dPBVLYYU7NxzILG4s4t8Rxu bRtWJ4K9jC1TiBxzd2RBiVEocAKIFceeJfUnpFkn8vEw76TYGF5rmRk6dWoMrjSs LhYBU3U0i6D4AqaPiT3/I7g50VJpzta9zid/fYOLcnSUYXIhkszm6dSG5BV3c57y MkXSNKdtjN34kK2zYFBN7AuP0uFcY+A17JFhotMTIrddHvqq4vTsnW4TBBJ+ulgu MTnHi6+rYEQ= urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient univ-montp3.fr MIIDNDCCAhygAwIBAgIVAJwJ10KIuByUPhJVuj+7HqVzV+6RMA0GCSqGSIb3DQEB BQUAMB0xGzAZBgNVBAMTEmlkcC51bml2LW1vbnRwMy5mcjAeFw0wOTExMjQxMDE0 MTNaFw0yOTExMjQxMDE0MTNaMB0xGzAZBgNVBAMTEmlkcC51bml2LW1vbnRwMy5m cjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMTccbqO8bGcrHNnBsYU BzWltaO1wKAcRrxca80YuL1OFrwtpBWEDgGE6cUPm7cL4ykHd24XzvbjUCNI7NBa C9XTU4LNE/A2k4X58Fx4HcQuefKctEun63MxVbjQVrlxH/Z/brtcHp/TSj0sYwNF CzBo1My09sCLtKbFNkmVguny94AJNW6MJHZCrud5C7fZLd6/+wJ+WryFhJw1tjxf hwsxQ3Y4024PWnHdAfyiLjS7I3AdyvsB0KiHRa8rmf75LxPCe3v6jZjGXbmG0ZUW 7tQML4PBGm8WJKlXVLOEQnPxLR1kN/+a1ekGuza7jZY3TElPIP1cR3YbAZMD4o1a DYsCAwEAAaNrMGkwSAYDVR0RBEEwP4ISaWRwLnVuaXYtbW9udHAzLmZyhilodHRw czovL2lkcC51bml2LW1vbnRwMy5mci9pZHAvc2hpYmJvbGV0aDAdBgNVHQ4EFgQU yZI0ysdigysg4IxXXXaXXJnQIxkwDQYJKoZIhvcNAQEFBQADggEBAGDmbv5WKi8X sX0lEJDbHWPHv9zV0DEZcgLDyUN6jzLkldcTNhc2nRY718X+CEMZjwUtGjyrZ6Nz ZrPxy1UTyhxNKBm6YDATPaI3JAKnEcd9P7I/an8M7dPBVLYYU7NxzILG4s4t8Rxu bRtWJ4K9jC1TiBxzd2RBiVEocAKIFceeJfUnpFkn8vEw76TYGF5rmRk6dWoMrjSs LhYBU3U0i6D4AqaPiT3/I7g50VJpzta9zid/fYOLcnSUYXIhkszm6dSG5BV3c57y MkXSNKdtjN34kK2zYFBN7AuP0uFcY+A17JFhotMTIrddHvqq4vTsnW4TBBJ+ulgu MTnHi6+rYEQ= urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Montpellier 3 Université de Montpellier 3 http://unknown.site.com Verdu Pascale fed-admin@univ-montp3.fr Ginisty Benoit fed-admin@univ-montp3.fr uhp-nancy.fr ciril.fr nancy-universite.fr MIIDPDCCAiSgAwIBAgIVAOEP24v0FvJQg5aj/zN3YK6cblBhMA0GCSqGSIb3DQEB BQUAMB8xHTAbBgNVBAMTFGZlZC1pZHAudWhwLW5hbmN5LmZyMB4XDTEwMTIwMzE2 MDMyOFoXDTMwMTIwMzE2MDMyOFowHzEdMBsGA1UEAxMUZmVkLWlkcC51aHAtbmFu Y3kuZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCLYxO2mvVKRc9C 8p0A443ofTRtwaPPKiHALWlEIX+2lcU4wikIstUoCmEqG/DlkpHMwJ9/BlVWv/4i wIwAz/NWc4l9vG2fXAF92BNfLSzEhKaPha+QNG3EpI+Gj7RLvbkmcOu5h0ft8jPp aGU27xXnfT5rNxa+b23Ye1RLJigL/fhy00AxUPCOrDoj/EYk4/rQqlBeKCWIywNe oeATuRtSA0CLIdqZDPbOetS87wm80xfV6lowK8EmQQu+ssQk/0xt6wvzV63EwTCV Ijn4ehJlIAmC1A/Qq28Gj8eq/HYe8YZjgLhNMDgcU6hs+MfNQyBpPAw1lbIgjCif L9d8HA/3AgMBAAGjbzBtMEwGA1UdEQRFMEOCFGZlZC1pZHAudWhwLW5hbmN5LmZy hitodHRwczovL2ZlZC1pZHAudWhwLW5hbmN5LmZyL2lkcC9zaGliYm9sZXRoMB0G A1UdDgQWBBTdVmVqlgg7EvLPhmHqBEXoMJsjrjANBgkqhkiG9w0BAQUFAAOCAQEA Ynvg0QZGovjW+gj08pCr9gzBfsl1L1hwGs2GhZ1jIvARzdRdhwkm0FqdT9iealF0 xcYPZ1HEmoNR42g4Rlbe9hiZvjm+3Siz5/X5xwGUSjHLaalOczPXQPS0NQgE/71J xxWv2GqYJxQMLFKTwt8junlBB3K/71942IqVie5EwgHeB20b50ph2pp+xDf1p7L3 NNG+fk1yM/YFqDCMtCfGgrtzsbLG3cauKtYxub9MD0ca79xTRXX/Dr5Z9B3zWrS2 GRvpVgKgiveUNXsBNiL0RwewDeVddqI8gOzsuNqlSX6zw403ZciE/FN60HJII77O dVuycn41BQqKH+yCCCu8/g== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient uhp-nancy.fr ciril.fr nancy-universite.fr MIIDPDCCAiSgAwIBAgIVAOEP24v0FvJQg5aj/zN3YK6cblBhMA0GCSqGSIb3DQEB BQUAMB8xHTAbBgNVBAMTFGZlZC1pZHAudWhwLW5hbmN5LmZyMB4XDTEwMTIwMzE2 MDMyOFoXDTMwMTIwMzE2MDMyOFowHzEdMBsGA1UEAxMUZmVkLWlkcC51aHAtbmFu Y3kuZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCLYxO2mvVKRc9C 8p0A443ofTRtwaPPKiHALWlEIX+2lcU4wikIstUoCmEqG/DlkpHMwJ9/BlVWv/4i wIwAz/NWc4l9vG2fXAF92BNfLSzEhKaPha+QNG3EpI+Gj7RLvbkmcOu5h0ft8jPp aGU27xXnfT5rNxa+b23Ye1RLJigL/fhy00AxUPCOrDoj/EYk4/rQqlBeKCWIywNe oeATuRtSA0CLIdqZDPbOetS87wm80xfV6lowK8EmQQu+ssQk/0xt6wvzV63EwTCV Ijn4ehJlIAmC1A/Qq28Gj8eq/HYe8YZjgLhNMDgcU6hs+MfNQyBpPAw1lbIgjCif L9d8HA/3AgMBAAGjbzBtMEwGA1UdEQRFMEOCFGZlZC1pZHAudWhwLW5hbmN5LmZy hitodHRwczovL2ZlZC1pZHAudWhwLW5hbmN5LmZyL2lkcC9zaGliYm9sZXRoMB0G A1UdDgQWBBTdVmVqlgg7EvLPhmHqBEXoMJsjrjANBgkqhkiG9w0BAQUFAAOCAQEA Ynvg0QZGovjW+gj08pCr9gzBfsl1L1hwGs2GhZ1jIvARzdRdhwkm0FqdT9iealF0 xcYPZ1HEmoNR42g4Rlbe9hiZvjm+3Siz5/X5xwGUSjHLaalOczPXQPS0NQgE/71J xxWv2GqYJxQMLFKTwt8junlBB3K/71942IqVie5EwgHeB20b50ph2pp+xDf1p7L3 NNG+fk1yM/YFqDCMtCfGgrtzsbLG3cauKtYxub9MD0ca79xTRXX/Dr5Z9B3zWrS2 GRvpVgKgiveUNXsBNiL0RwewDeVddqI8gOzsuNqlSX6zw403ZciE/FN60HJII77O dVuycn41BQqKH+yCCCu8/g== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Nancy 1 - Henri Poincaré Université de Nancy 1 - Henri Poincaré http://unknown.site.com Sylvain Brachotte service.shib@uhp-nancy.fr Shijia Li-Qiang service.shib@uhp-nancy.fr univ-nancy2.fr MIIDMzCCAhugAwIBAgIUHMuzjWU/+u4zwUZ730Y7V2niyYEwDQYJKoZIhvcNAQEF BQAwHTEbMBkGA1UEAxMSaWRwLnVuaXYtbmFuY3kyLmZyMB4XDTA5MDMwNTE0MzY1 MFoXDTI5MDMwNTE0MzY1MFowHTEbMBkGA1UEAxMSaWRwLnVuaXYtbmFuY3kyLmZy MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAj/RjOoDaG580EcLaBfNj hQo+AbqDiCy98W8hZJosotWMmWCGPUj2vIE84T++h59rEHkCSW1rEVNN9ZFU/DFp pHpRLleqcrVmZ0Ppbk3Jo9CjgB6QtCge7tmdHT6b/Bkq3dhhvaa30txAkg4V5PrG B3EXj6oIkqJOH7BF4pXkYp79BOR5pSiiBoDoqDygAhNfb8w5U09E1GwGOqhdGGsX QPAhIXS4jUp/FJDzcWa+k7x4tVrlitjdMRgk7dXHBhbB7viveMiR7fac4eJU4cVl 1FWBTl91AfrSMXHICAwzCvk481pTjcDGQENG7dGT6R2YaipbAOm7j+6+GAnvhT2e YwIDAQABo2swaTBIBgNVHREEQTA/ghJpZHAudW5pdi1uYW5jeTIuZnKGKWh0dHBz Oi8vaWRwLnVuaXYtbmFuY3kyLmZyL2lkcC9zaGliYm9sZXRoMB0GA1UdDgQWBBRb k90W9B5bWwBteUx+t8cfpYRPqTANBgkqhkiG9w0BAQUFAAOCAQEAbNbhbKRYEI7e PPp6eMI/Mq/vUYl94I8nq0Yum1FeG3heBFMNnw0c+MIxDdl1nIs7Q2UVMJ9kZGBA p2gEtw81h1Ca0QmPXZIGGlgSGiehvJqFczVgz2Uj6NAQEK+OIUGwFVHTr0yvddvs xi0WtBHyFpF30aCVYsBwPv9zQ0GjKe3xEisAhvdfncx134uWEhYzZcaCd9pFN1yY YooUwR9EaHdQJ5W6mz7msvYdPC1xcOiZz/gjj7gi9ry96zs/Vd3nqK2aRmA+56R7 YhFQpTYMUD8STWQIRZKCUyviJJTJVJZ2HMiYNgXqrliX5Prn36/L51R0z1ou1hSu U29Yw8woWg== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient univ-nancy2.fr MIIDMzCCAhugAwIBAgIUHMuzjWU/+u4zwUZ730Y7V2niyYEwDQYJKoZIhvcNAQEF BQAwHTEbMBkGA1UEAxMSaWRwLnVuaXYtbmFuY3kyLmZyMB4XDTA5MDMwNTE0MzY1 MFoXDTI5MDMwNTE0MzY1MFowHTEbMBkGA1UEAxMSaWRwLnVuaXYtbmFuY3kyLmZy MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAj/RjOoDaG580EcLaBfNj hQo+AbqDiCy98W8hZJosotWMmWCGPUj2vIE84T++h59rEHkCSW1rEVNN9ZFU/DFp pHpRLleqcrVmZ0Ppbk3Jo9CjgB6QtCge7tmdHT6b/Bkq3dhhvaa30txAkg4V5PrG B3EXj6oIkqJOH7BF4pXkYp79BOR5pSiiBoDoqDygAhNfb8w5U09E1GwGOqhdGGsX QPAhIXS4jUp/FJDzcWa+k7x4tVrlitjdMRgk7dXHBhbB7viveMiR7fac4eJU4cVl 1FWBTl91AfrSMXHICAwzCvk481pTjcDGQENG7dGT6R2YaipbAOm7j+6+GAnvhT2e YwIDAQABo2swaTBIBgNVHREEQTA/ghJpZHAudW5pdi1uYW5jeTIuZnKGKWh0dHBz Oi8vaWRwLnVuaXYtbmFuY3kyLmZyL2lkcC9zaGliYm9sZXRoMB0GA1UdDgQWBBRb k90W9B5bWwBteUx+t8cfpYRPqTANBgkqhkiG9w0BAQUFAAOCAQEAbNbhbKRYEI7e PPp6eMI/Mq/vUYl94I8nq0Yum1FeG3heBFMNnw0c+MIxDdl1nIs7Q2UVMJ9kZGBA p2gEtw81h1Ca0QmPXZIGGlgSGiehvJqFczVgz2Uj6NAQEK+OIUGwFVHTr0yvddvs xi0WtBHyFpF30aCVYsBwPv9zQ0GjKe3xEisAhvdfncx134uWEhYzZcaCd9pFN1yY YooUwR9EaHdQJ5W6mz7msvYdPC1xcOiZz/gjj7gi9ry96zs/Vd3nqK2aRmA+56R7 YhFQpTYMUD8STWQIRZKCUyviJJTJVJZ2HMiYNgXqrliX5Prn36/L51R0z1ou1hSu U29Yw8woWg== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Nancy 2 Université de Nancy 2 http://unknown.site.com Vincent MATHIEU contact-fed@univ-nancy2.fr Hugues ROUXEL contact-fed@univ-nancy2.fr MIICwjCCAiugAwIBAgIJAIKA2ACyoSA7MA0GCSqGSIb3DQEBBQUAMEsxCzAJBgNV BAYTAkZSMR4wHAYDVQQKExVVbml2ZXJzaXRlIGRlIE5hbmN5IDIxHDAaBgNVBAMT E3dpa2kudW5pdi1uYW5jeTIuZnIwHhcNMDkxMTE4MDgzOTMyWhcNMjkxMTEzMDgz OTMyWjBLMQswCQYDVQQGEwJGUjEeMBwGA1UEChMVVW5pdmVyc2l0ZSBkZSBOYW5j eSAyMRwwGgYDVQQDExN3aWtpLnVuaXYtbmFuY3kyLmZyMIGfMA0GCSqGSIb3DQEB AQUAA4GNADCBiQKBgQC/4cjsn4h1DKrfYHzibQ4eIqM2OtkCUAIPlwWKeM4YCCMA zj8fBHTV8DHSXocaCuSIC3nOZbdM5+GyJw1H76E8e/uV2YncW3eVNSpq+Wk9vnZw NVcNE9rHcNFxc7hTGjUDTjtihHEfvDm04WIvbKPKKcvuOelg5bI5j4ml34MYewID AQABo4GtMIGqMB0GA1UdDgQWBBSHEGVqV3lokbofrt7Gfd5H4RorOzB7BgNVHSME dDBygBSHEGVqV3lokbofrt7Gfd5H4RorO6FPpE0wSzELMAkGA1UEBhMCRlIxHjAc BgNVBAoTFVVuaXZlcnNpdGUgZGUgTmFuY3kgMjEcMBoGA1UEAxMTd2lraS51bml2 LW5hbmN5Mi5mcoIJAIKA2ACyoSA7MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEF BQADgYEAZZwcZn098b+8grtJMYedJi7kNbqqoBshIOwF4qqou/d9s2KSPcoG+wpB 3v8mCOtJGU6uUl3/M94sK/XqbHUCYEV/WYOWorynQxXnyBza9RerBmjYyRXeCb01 pyYDCkN2phZk2L5NTLRpdScPAKWddcr5SFASRVPA+N6BOLJZYIo= MIICwjCCAiugAwIBAgIJAIKA2ACyoSA7MA0GCSqGSIb3DQEBBQUAMEsxCzAJBgNV BAYTAkZSMR4wHAYDVQQKExVVbml2ZXJzaXRlIGRlIE5hbmN5IDIxHDAaBgNVBAMT E3dpa2kudW5pdi1uYW5jeTIuZnIwHhcNMDkxMTE4MDgzOTMyWhcNMjkxMTEzMDgz OTMyWjBLMQswCQYDVQQGEwJGUjEeMBwGA1UEChMVVW5pdmVyc2l0ZSBkZSBOYW5j eSAyMRwwGgYDVQQDExN3aWtpLnVuaXYtbmFuY3kyLmZyMIGfMA0GCSqGSIb3DQEB AQUAA4GNADCBiQKBgQC/4cjsn4h1DKrfYHzibQ4eIqM2OtkCUAIPlwWKeM4YCCMA zj8fBHTV8DHSXocaCuSIC3nOZbdM5+GyJw1H76E8e/uV2YncW3eVNSpq+Wk9vnZw NVcNE9rHcNFxc7hTGjUDTjtihHEfvDm04WIvbKPKKcvuOelg5bI5j4ml34MYewID AQABo4GtMIGqMB0GA1UdDgQWBBSHEGVqV3lokbofrt7Gfd5H4RorOzB7BgNVHSME dDBygBSHEGVqV3lokbofrt7Gfd5H4RorO6FPpE0wSzELMAkGA1UEBhMCRlIxHjAc BgNVBAoTFVVuaXZlcnNpdGUgZGUgTmFuY3kgMjEcMBoGA1UEAxMTd2lraS51bml2 LW5hbmN5Mi5mcoIJAIKA2ACyoSA7MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEF BQADgYEAZZwcZn098b+8grtJMYedJi7kNbqqoBshIOwF4qqou/d9s2KSPcoG+wpB 3v8mCOtJGU6uUl3/M94sK/XqbHUCYEV/WYOWorynQxXnyBza9RerBmjYyRXeCb01 pyYDCkN2phZk2L5NTLRpdScPAKWddcr5SFASRVPA+N6BOLJZYIo= urn:mace:shibboleth:1.0:nameIdentifier SECLIER contact-fed@univ-nancy2.fr ROUXEL hugues.rouxel@univ-nancy2.fr univ-nantes.fr MIIDMzCCAhugAwIBAgIUXhtC9sGfg8MZ1QOlWpmnARmmHMYwDQYJKoZIhvcNAQEF BQAwHTEbMBkGA1UEAxMSaWRwLnVuaXYtbmFudGVzLmZyMB4XDTA5MDMzMTA4MTA1 OVoXDTI5MDMzMTA4MTA1OVowHTEbMBkGA1UEAxMSaWRwLnVuaXYtbmFudGVzLmZy MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAktwRMpbzUDURWbJkTiTj 24JSlknu7dufbohqxC5S5MDGpRx4kZFZFIy+adMWMV/DhS85ggU059xm4PGdoWSd nLfYxWNFma2elqpE4ErVbrRyo66m5wP3Xs2VCQQJqcb9YUM5+8yBU04yXAEPYGUv QX4R6F2J4K6l2xFlX95aHycjJoAqFq3EPkBs3B8svjK3DWZAYPQP0LbxI1VGvzDn Dkl4LrzwOPXTdGuJIQUWULWq1KV/RK9mdTTW7Xm5QBh61U1WQLl3EKJJUD5ziaq0 KttLIND72IKHWYiU5YgC28J6J31BzI2L/TeKk0jmEJl34G6AJ/T82ulrpLZwzu3o 1wIDAQABo2swaTBIBgNVHREEQTA/ghJpZHAudW5pdi1uYW50ZXMuZnKGKWh0dHBz Oi8vaWRwLnVuaXYtbmFudGVzLmZyL2lkcC9zaGliYm9sZXRoMB0GA1UdDgQWBBR0 v7zvoB8/1wVaVqBJiix3/eDmPTANBgkqhkiG9w0BAQUFAAOCAQEAY7x0Byy9iv25 8QhZ7CAD5B0ewKhgS1UO4wmr5UC9bpCAqLdJ1B0PyMZ1Bx3c/TzGloEBoGfiJLu5 DXg61rAdqYa4ihIC5hXCpt9l02EWxWXintKDZ07kcG2aama1EBRh0s3usR8QzLyB giEcLiXmysSZgy1k/VAx2R5DaHimMFk9vJkTckprB/mSlB4aFFVtfsk6b6dxf0JY pF1bmgLeWzeQlAtCz8sNNPwXDvAVbBLLHXnOUa8V9TzhaPlInHHhUs6DLNdGml/9 fLM8XuyqV7zxR0P8IGEgoEuNDgaBilEU3IeExFo/eOojuKJbQkV9w18Q5cxIzGPR 9yMUR1nBIg== MIIEHDCCAwSgAwIBAgILAQAAAAABEAwjIF8wDQYJKoZIhvcNAQEFBQAwXzELMAkG A1UEBhMCQkUxEzARBgNVBAoTCkN5YmVydHJ1c3QxFzAVBgNVBAsTDkVkdWNhdGlv bmFsIENBMSIwIAYDVQQDExlDeWJlcnRydXN0IEVkdWNhdGlvbmFsIENBMB4XDTA3 MDExMDEzMTIxM1oXDTEwMDExMDEzMTIxM1owSTELMAkGA1UEBhMCRlIxHTAbBgNV BAoTFFVuaXZlcnNpdGUgZGUgTmFudGVzMRswGQYDVQQDExJpZHAudW5pdi1uYW50 ZXMuZnIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANxfon+l4HBn9AgheY3d 4VJlDqq2yzU2FfkQPWSAuBB6UqL7AmhzCl6ahuMkjTdR7qLTeDDd1EMeY1WNOjBt CDYKqbDnMr7Y2rni0YdKEm5jPKF7abmzMaKf7onIvdrl7WHoM/kP+bDOEN+Jt4cY NE4JAVRitaQNAcuZdrzfRn1NAgMBAAGjggFxMIIBbTBQBgNVHSAESTBHMEUGByqG SLE+AQAwOjA4BggrBgEFBQcCARYsaHR0cDovL3d3dy5nbG9iYWxzaWduLm5ldC9y ZXBvc2l0b3J5L2Nwcy5jZm0wDgYDVR0PAQH/BAQDAgWgMB8GA1UdIwQYMBaAFGVl oz3XOxGjCgclN8lCSlt2d1DhMB0GA1UdDgQWBBTRb43K0ir7o9mO7S1ZsflqqVgg 4jA6BgNVHR8EMzAxMC+gLaArhilodHRwOi8vY3JsLmdsb2JhbHNpZ24ubmV0L2Vk dWNhdGlvbmFsLmNybDBPBggrBgEFBQcBAQRDMEEwPwYIKwYBBQUHMAKGM2h0dHA6 Ly9zZWN1cmUuZ2xvYmFsc2lnbi5uZXQvY2FjZXJ0L2VkdWNhdGlvbmFsLmNydDAd BgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwHQYDVR0RBBYwFIISaWRwLnVu aXYtbmFudGVzLmZyMA0GCSqGSIb3DQEBBQUAA4IBAQAa07TBNvMJM2QrmL7TNWTz oErVoNUvTh7MWyJNfrKnq+8qcsOxfgysbNYh4eki2osOLlvrKQ3gUfrBZNv6i1rD wccQrMSRFEO4ADl74IEd9b7glSyYQfQcJx+rBzb3LCuC7zqBC3h5tKN7im0Zj6vi m7KgmD04IDsKBPTioVQ3DrK5Ykw38BXnCLQFbptBf+mHw2qMPI6hRFI0WP1pK228 VuW+11skTzpq1sUEmEjNCv2wxM7I/NjEZLgMBaIIFQVuME44ZxLN5MsmtYBJfSG+ /l/w6gbjPDGxPctMJCYoXpQwpuTcqyANMef9cd6zPtlOWS4PYiBiZxwIkvsYX0yB urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Nantes Université de Nantes http://unknown.site.com Pierre-Olivier TERRISSE shibboleth@univ-nantes.fr Dominique MARTHELOT shibboleth@univ-nantes.fr mantis.sig.univ-nantes.fr CN=mantis.sig.univ-nantes.fr,O=nom de l organisme,C=FR MIICyzCCAjSgAwIBAgIJAKDZHvVKktjWMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNV BAYTAkZSMRswGQYDVQQKExJub20gZGUgbCBvcmdhbmlzbWUxIjAgBgNVBAMTGW1h bnRpcy5zaWcudW5pdi1uYW50ZXMuZnIwHhcNMTEwMjE1MTAyMjQ4WhcNMzEwMjEw MTAyMjQ4WjBOMQswCQYDVQQGEwJGUjEbMBkGA1UEChMSbm9tIGRlIGwgb3JnYW5p c21lMSIwIAYDVQQDExltYW50aXMuc2lnLnVuaXYtbmFudGVzLmZyMIGfMA0GCSqG SIb3DQEBAQUAA4GNADCBiQKBgQDPjSAtfssNMhvLuw3Mh8r80yQcHvnWLrznViO3 C1tKbtaA8au4UD3q7ORgZ1qiK40859xq/pZJCp48Z93ynx/D+e0G0GrwYfDB5iTM 7lL2vRfg0OnGWR9BMDviA0cKMh94FxU80LbRrpA9A71/4eZ4GO4mDUv4BYu/rZly oTw6SQIDAQABo4GwMIGtMB0GA1UdDgQWBBQmcAvTqtS1iqtxLZyNBj8x4QhzMDB+ BgNVHSMEdzB1gBQmcAvTqtS1iqtxLZyNBj8x4QhzMKFSpFAwTjELMAkGA1UEBhMC RlIxGzAZBgNVBAoTEm5vbSBkZSBsIG9yZ2FuaXNtZTEiMCAGA1UEAxMZbWFudGlz LnNpZy51bml2LW5hbnRlcy5mcoIJAKDZHvVKktjWMAwGA1UdEwQFMAMBAf8wDQYJ KoZIhvcNAQEFBQADgYEASS4fPZtXjcyWVyzEIxNAtV0J0sAJqx7f9im7pRuNW7kt oegjEpsa9qP8zYP7/6baMkfa12sKcEsVakIxyZ9xZs0k//8JDukADFRj0WFeOaOU GqziKTdVr91IvY5PJFaijgVr3LCi46G3hv6d4w9qNgjspnUB008DTn3AsyJ8dss= mantis.sig.univ-nantes.fr CN=mantis.sig.univ-nantes.fr,O=nom de l organisme,C=FR MIICyzCCAjSgAwIBAgIJAKDZHvVKktjWMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNV BAYTAkZSMRswGQYDVQQKExJub20gZGUgbCBvcmdhbmlzbWUxIjAgBgNVBAMTGW1h bnRpcy5zaWcudW5pdi1uYW50ZXMuZnIwHhcNMTEwMjE1MTAyMjQ4WhcNMzEwMjEw MTAyMjQ4WjBOMQswCQYDVQQGEwJGUjEbMBkGA1UEChMSbm9tIGRlIGwgb3JnYW5p c21lMSIwIAYDVQQDExltYW50aXMuc2lnLnVuaXYtbmFudGVzLmZyMIGfMA0GCSqG SIb3DQEBAQUAA4GNADCBiQKBgQDPjSAtfssNMhvLuw3Mh8r80yQcHvnWLrznViO3 C1tKbtaA8au4UD3q7ORgZ1qiK40859xq/pZJCp48Z93ynx/D+e0G0GrwYfDB5iTM 7lL2vRfg0OnGWR9BMDviA0cKMh94FxU80LbRrpA9A71/4eZ4GO4mDUv4BYu/rZly oTw6SQIDAQABo4GwMIGtMB0GA1UdDgQWBBQmcAvTqtS1iqtxLZyNBj8x4QhzMDB+ BgNVHSMEdzB1gBQmcAvTqtS1iqtxLZyNBj8x4QhzMKFSpFAwTjELMAkGA1UEBhMC RlIxGzAZBgNVBAoTEm5vbSBkZSBsIG9yZ2FuaXNtZTEiMCAGA1UEAxMZbWFudGlz LnNpZy51bml2LW5hbnRlcy5mcoIJAKDZHvVKktjWMAwGA1UdEwQFMAMBAf8wDQYJ KoZIhvcNAQEFBQADgYEASS4fPZtXjcyWVyzEIxNAtV0J0sAJqx7f9im7pRuNW7kt oegjEpsa9qP8zYP7/6baMkfa12sKcEsVakIxyZ9xZs0k//8JDukADFRj0WFeOaOU GqziKTdVr91IvY5PJFaijgVr3LCi46G3hv6d4w9qNgjspnUB008DTn3AsyJ8dss= unice.fr MIIEfzCCA2egAwIBAgIQSotNoT7PriEYt2exFs1UFDANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTEwMDIxMjAwMDAwMFoXDTEyMDIxMjIzNTk1OVowXjELMAkGA1UE BhMCRlIxDTALBgNVBAcTBE5JQ0UxKTAnBgNVBAoTIFVOSVZFUlNJVEUgTklDRSBT T1BISUEgQU5USVBPTElTMRUwEwYDVQQDEwxpZHAudW5pY2UuZnIwggEiMA0GCSqG SIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3qmnC1dm6p8MREZA89vNwF4LwqTIvWsZL FVUnHNHTAuQBVoyaU7XVRYNBj26GWYZ6uLsCBhIjBv61ooVini9644GufHLuUMgx +pR/v0Ho92w+MOENkLbEjwFF00szAmPEgK1PlLMFEOPpfC10z9VSnwUe0Xn316Kn DS5/c3Dhp3a2zmIr19JeNgme/Xj4FeLOU/e7ZpuALBqnoarActz3aifB46LwhUYz d0/SXbOHwIi9jpgE/Hrlg0TL+OpoIEJVjjaL5jyujMY6b9RPvbv9eOqERUUbT45y YNTimL0P4BQRpWToRl0IQYbEgCOGzyLd/wEn/ptCmxgCDrl/3CMdAgMBAAGjggFf MIIBWzAfBgNVHSMEGDAWgBQMvZNoDPPeq6NJays3V0fqkOO57TAdBgNVHQ4EFgQU SlH8XEydtUtztNNGp80FE30LblIwDgYDVR0PAQH/BAQDAgWgMAwGA1UdEwEB/wQC MAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBgGA1UdIAQRMA8wDQYL KwYBBAGyMQECAh0wOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC50Y3MudGVy ZW5hLm9yZy9URVJFTkFTU0xDQS5jcmwwbQYIKwYBBQUHAQEEYTBfMDUGCCsGAQUF BzAChilodHRwOi8vY3J0LnRjcy50ZXJlbmEub3JnL1RFUkVOQVNTTENBLmNydDAm BggrBgEFBQcwAYYaaHR0cDovL29jc3AudGNzLnRlcmVuYS5vcmcwFwYDVR0RBBAw DoIMaWRwLnVuaWNlLmZyMA0GCSqGSIb3DQEBBQUAA4IBAQCk2KDWfolmFNEJy5OQ PMZ5EJVuJQi6b3wUQaGeBt6esfs333q4w57gQmm1dq1wmiZjsBUgN/d9CCPugK/9 /KpoG4sUDEAo5Lx9GktpaRzG9dMbm6uQ07T1VZAHC9RiXuImRD1hOU1VPq1PlCDC 9Uy7nl3o0ShOAjNX+e/cC3A+K8R3XYDsV9wYaTNSMvQrkmrW9M1t+Gt6KWC5DJcs VuYEmDLEXN09X2MBgHAwkTDgHlzhNSTXBBYoWVIDF+uuAyQxJl+D80moz+tE7c/x u5W/LMh8OtGE22Mm0hd7yB0U9sPfkobXWE25qkX8cGb3G7bTBGZN1QiQskwp6iCE mgL9 urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient unice.fr MIIEfzCCA2egAwIBAgIQSotNoT7PriEYt2exFs1UFDANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTEwMDIxMjAwMDAwMFoXDTEyMDIxMjIzNTk1OVowXjELMAkGA1UE BhMCRlIxDTALBgNVBAcTBE5JQ0UxKTAnBgNVBAoTIFVOSVZFUlNJVEUgTklDRSBT T1BISUEgQU5USVBPTElTMRUwEwYDVQQDEwxpZHAudW5pY2UuZnIwggEiMA0GCSqG SIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3qmnC1dm6p8MREZA89vNwF4LwqTIvWsZL FVUnHNHTAuQBVoyaU7XVRYNBj26GWYZ6uLsCBhIjBv61ooVini9644GufHLuUMgx +pR/v0Ho92w+MOENkLbEjwFF00szAmPEgK1PlLMFEOPpfC10z9VSnwUe0Xn316Kn DS5/c3Dhp3a2zmIr19JeNgme/Xj4FeLOU/e7ZpuALBqnoarActz3aifB46LwhUYz d0/SXbOHwIi9jpgE/Hrlg0TL+OpoIEJVjjaL5jyujMY6b9RPvbv9eOqERUUbT45y YNTimL0P4BQRpWToRl0IQYbEgCOGzyLd/wEn/ptCmxgCDrl/3CMdAgMBAAGjggFf MIIBWzAfBgNVHSMEGDAWgBQMvZNoDPPeq6NJays3V0fqkOO57TAdBgNVHQ4EFgQU SlH8XEydtUtztNNGp80FE30LblIwDgYDVR0PAQH/BAQDAgWgMAwGA1UdEwEB/wQC MAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBgGA1UdIAQRMA8wDQYL KwYBBAGyMQECAh0wOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC50Y3MudGVy ZW5hLm9yZy9URVJFTkFTU0xDQS5jcmwwbQYIKwYBBQUHAQEEYTBfMDUGCCsGAQUF BzAChilodHRwOi8vY3J0LnRjcy50ZXJlbmEub3JnL1RFUkVOQVNTTENBLmNydDAm BggrBgEFBQcwAYYaaHR0cDovL29jc3AudGNzLnRlcmVuYS5vcmcwFwYDVR0RBBAw DoIMaWRwLnVuaWNlLmZyMA0GCSqGSIb3DQEBBQUAA4IBAQCk2KDWfolmFNEJy5OQ PMZ5EJVuJQi6b3wUQaGeBt6esfs333q4w57gQmm1dq1wmiZjsBUgN/d9CCPugK/9 /KpoG4sUDEAo5Lx9GktpaRzG9dMbm6uQ07T1VZAHC9RiXuImRD1hOU1VPq1PlCDC 9Uy7nl3o0ShOAjNX+e/cC3A+K8R3XYDsV9wYaTNSMvQrkmrW9M1t+Gt6KWC5DJcs VuYEmDLEXN09X2MBgHAwkTDgHlzhNSTXBBYoWVIDF+uuAyQxJl+D80moz+tE7c/x u5W/LMh8OtGE22Mm0hd7yB0U9sPfkobXWE25qkX8cGb3G7bTBGZN1QiQskwp6iCE mgL9 urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Nice-Sophia Antipolis - UNICE Université de Nice-Sophia Antipolis - UNICE http://unknown.site.com Jean-Charles GODIEN Jean-Charles.Godien@unice.fr Richard Manas Richard.Manas@unice.fr unimes.fr MIIEpDCCA4ygAwIBAgIQL1M6BUXb9ey/N5UwsW6q8zANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTA5MTExOTAwMDAwMFoXDTEyMTExODIzNTk1OVowezELMAkGA1UE BhMCRlIxDzANBgNVBAcMBk7Drm1lczEeMBwGA1UECgwVVW5pdmVyc2l0w6kgZGUg TsOubWVzMRwwGgYDVQQLExN1bml2ZXJzaXRlIGRlIG5pbWVzMR0wGwYDVQQDExRm ZWRlcmF0aW9uLnVuaW1lcy5mcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC ggEBANHvYAl0+rpik/m50vPpeormI0yeYWtu37gDW9P159zOraMiKjfTBU3r5Oe6 PUa4jVWXfDuAO97LWdUMX4m1cTRO/v20JYPeSEVVJSOULzazC/kV9W7wPJRqONkt btJr7a0VgbGR1ZVVEJ3sZggLafUVT09n0YLhMMwdRPDpsD7iE7tdBQuEc7AlpLS0 XWHx4P+6vDdIwyhFIJt8nyVkTs+JkZ+troK8wkYgW/l4bktrajcwQjOHiisdk4ZP WxRiNEcAdWcH4qp86pi6fG2YXy1deYnMtOIz5xyTTVwcl/7xCpWEnj1hbR2x7wRX twgfqAH95T0PhwuioSaj35DShFMCAwEAAaOCAWcwggFjMB8GA1UdIwQYMBaAFAy9 k2gM896ro0lrKzdXR+qQ47ntMB0GA1UdDgQWBBTBXcQRRBdoAv1nWM2OU71HTFaZ xjAOBgNVHQ8BAf8EBAMCBaAwDAYDVR0TAQH/BAIwADAdBgNVHSUEFjAUBggrBgEF BQcDAQYIKwYBBQUHAwIwGAYDVR0gBBEwDzANBgsrBgEEAbIxAQICHTA6BgNVHR8E MzAxMC+gLaArhilodHRwOi8vY3JsLnRjcy50ZXJlbmEub3JnL1RFUkVOQVNTTENB LmNybDBtBggrBgEFBQcBAQRhMF8wNQYIKwYBBQUHMAKGKWh0dHA6Ly9jcnQudGNz LnRlcmVuYS5vcmcvVEVSRU5BU1NMQ0EuY3J0MCYGCCsGAQUFBzABhhpodHRwOi8v b2NzcC50Y3MudGVyZW5hLm9yZzAfBgNVHREEGDAWghRmZWRlcmF0aW9uLnVuaW1l cy5mcjANBgkqhkiG9w0BAQUFAAOCAQEAQi35VtjG2PEd7o4yAWU6acXgddghxls2 2kqlN7KcFl6PpQ2lpHfUHVmncTmafoQEHmlgjFscWYgagRb1UQZ4pmquoEfr2v8Y 0Fox/MQHIUV4xCPyRSIiSGOHAI62rG3HOrV2ha6LusjaJPNdNaetCgX+XJFFNKMm dnUIrUnxSsaMhx/zACINKnb09Ob2AGDz5KgFvq8V0IRcl09d/qWLE61m/wvIZfaF VTP5+9UA1RfGxEIOG3zA4D309fxapoVnb84yM9eRNgtw6hZrzDyZfNWQ1VkSVrFO xqaW8/4VYHjxNTVZ2KxsKKVL1ykc/9Gk5YAITiyKeWFjYhP17R9+Cw== MIIDOzCCAiOgAwIBAgIUayZKXJ950up7YVq8ipegg5ZO0YEwDQYJKoZIhvcNAQEF BQAwHzEdMBsGA1UEAxMUc2hpYmJvbGV0aC51bmltZXMuZnIwHhcNMDkwNjA5MTI0 NDA2WhcNMjkwNjA5MTI0NDA2WjAfMR0wGwYDVQQDExRzaGliYm9sZXRoLnVuaW1l cy5mcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJpbUtiPRm9EROU+ lNgwMYiaxh2G1lNhY6/k34AGNYWQJKYquYBd4LzBBW5qNoizKL1WPFE0l1p/A+GX dtT+gR+kz2t76oVVPath5xUfJcZLlJnonaJdob2VhaCz74Fn+RJZ5B/3anrpMX8j H/sD/sAce/aLKR5PfYz1fKuK/zjIny4JrsTosKf5PBTer9ydT35iz45lAWXKQAKz 3u2YlxAAlV9ucA3li68PZyhOMm+dqylSdNIV8O5KP6/PRhWeGnZ3AJPNADa7lIGl hQp79SodGobzQbVeW3Ewx4BG09mNtULCh1If4JBphfuQ8K2xKSqFFyNtaYPnRCb/ kwdjid0CAwEAAaNvMG0wTAYDVR0RBEUwQ4IUc2hpYmJvbGV0aC51bmltZXMuZnKG K2h0dHBzOi8vc2hpYmJvbGV0aC51bmltZXMuZnIvaWRwL3NoaWJib2xldGgwHQYD VR0OBBYEFPmBTUvVz5Zp8WK9RpqR36yDM3aiMA0GCSqGSIb3DQEBBQUAA4IBAQA0 PVvzXiOrMRdAgxuGgGEP3NqEYQrZaI09j0Gr0O5B4TmlVj/RWthoDnGbbM2iQffy jcQntxwpMdQdhpb8nLD9Z1bFM1YjkQimV1outHM9T9xFfaap9AIWBCoaLrb9MAvr gj22KQQktTZYgsG1IUt5eLyQ217eeqlJxVoqs7w1rIueNzv2IZHF3EkHSzBLBE+U 2xzcwSAPuLtA3YkdjHj4A7xjY/eJDljXNmgwvICDr4jHAW8Y492qLWaabyF62F6C S0NKwDHa5Gof8lqIEaPrmEXAOiNv4dA+gsYVOWnNlDNPytClO1eBT3j+KaXuZdx8 I8bFUJKvmRbLMxfO/CMG urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient unimes.fr MIIEpDCCA4ygAwIBAgIQL1M6BUXb9ey/N5UwsW6q8zANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTA5MTExOTAwMDAwMFoXDTEyMTExODIzNTk1OVowezELMAkGA1UE BhMCRlIxDzANBgNVBAcMBk7Drm1lczEeMBwGA1UECgwVVW5pdmVyc2l0w6kgZGUg TsOubWVzMRwwGgYDVQQLExN1bml2ZXJzaXRlIGRlIG5pbWVzMR0wGwYDVQQDExRm ZWRlcmF0aW9uLnVuaW1lcy5mcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC ggEBANHvYAl0+rpik/m50vPpeormI0yeYWtu37gDW9P159zOraMiKjfTBU3r5Oe6 PUa4jVWXfDuAO97LWdUMX4m1cTRO/v20JYPeSEVVJSOULzazC/kV9W7wPJRqONkt btJr7a0VgbGR1ZVVEJ3sZggLafUVT09n0YLhMMwdRPDpsD7iE7tdBQuEc7AlpLS0 XWHx4P+6vDdIwyhFIJt8nyVkTs+JkZ+troK8wkYgW/l4bktrajcwQjOHiisdk4ZP WxRiNEcAdWcH4qp86pi6fG2YXy1deYnMtOIz5xyTTVwcl/7xCpWEnj1hbR2x7wRX twgfqAH95T0PhwuioSaj35DShFMCAwEAAaOCAWcwggFjMB8GA1UdIwQYMBaAFAy9 k2gM896ro0lrKzdXR+qQ47ntMB0GA1UdDgQWBBTBXcQRRBdoAv1nWM2OU71HTFaZ xjAOBgNVHQ8BAf8EBAMCBaAwDAYDVR0TAQH/BAIwADAdBgNVHSUEFjAUBggrBgEF BQcDAQYIKwYBBQUHAwIwGAYDVR0gBBEwDzANBgsrBgEEAbIxAQICHTA6BgNVHR8E MzAxMC+gLaArhilodHRwOi8vY3JsLnRjcy50ZXJlbmEub3JnL1RFUkVOQVNTTENB LmNybDBtBggrBgEFBQcBAQRhMF8wNQYIKwYBBQUHMAKGKWh0dHA6Ly9jcnQudGNz LnRlcmVuYS5vcmcvVEVSRU5BU1NMQ0EuY3J0MCYGCCsGAQUFBzABhhpodHRwOi8v b2NzcC50Y3MudGVyZW5hLm9yZzAfBgNVHREEGDAWghRmZWRlcmF0aW9uLnVuaW1l cy5mcjANBgkqhkiG9w0BAQUFAAOCAQEAQi35VtjG2PEd7o4yAWU6acXgddghxls2 2kqlN7KcFl6PpQ2lpHfUHVmncTmafoQEHmlgjFscWYgagRb1UQZ4pmquoEfr2v8Y 0Fox/MQHIUV4xCPyRSIiSGOHAI62rG3HOrV2ha6LusjaJPNdNaetCgX+XJFFNKMm dnUIrUnxSsaMhx/zACINKnb09Ob2AGDz5KgFvq8V0IRcl09d/qWLE61m/wvIZfaF VTP5+9UA1RfGxEIOG3zA4D309fxapoVnb84yM9eRNgtw6hZrzDyZfNWQ1VkSVrFO xqaW8/4VYHjxNTVZ2KxsKKVL1ykc/9Gk5YAITiyKeWFjYhP17R9+Cw== MIIDOzCCAiOgAwIBAgIUayZKXJ950up7YVq8ipegg5ZO0YEwDQYJKoZIhvcNAQEF BQAwHzEdMBsGA1UEAxMUc2hpYmJvbGV0aC51bmltZXMuZnIwHhcNMDkwNjA5MTI0 NDA2WhcNMjkwNjA5MTI0NDA2WjAfMR0wGwYDVQQDExRzaGliYm9sZXRoLnVuaW1l cy5mcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJpbUtiPRm9EROU+ lNgwMYiaxh2G1lNhY6/k34AGNYWQJKYquYBd4LzBBW5qNoizKL1WPFE0l1p/A+GX dtT+gR+kz2t76oVVPath5xUfJcZLlJnonaJdob2VhaCz74Fn+RJZ5B/3anrpMX8j H/sD/sAce/aLKR5PfYz1fKuK/zjIny4JrsTosKf5PBTer9ydT35iz45lAWXKQAKz 3u2YlxAAlV9ucA3li68PZyhOMm+dqylSdNIV8O5KP6/PRhWeGnZ3AJPNADa7lIGl hQp79SodGobzQbVeW3Ewx4BG09mNtULCh1If4JBphfuQ8K2xKSqFFyNtaYPnRCb/ kwdjid0CAwEAAaNvMG0wTAYDVR0RBEUwQ4IUc2hpYmJvbGV0aC51bmltZXMuZnKG K2h0dHBzOi8vc2hpYmJvbGV0aC51bmltZXMuZnIvaWRwL3NoaWJib2xldGgwHQYD VR0OBBYEFPmBTUvVz5Zp8WK9RpqR36yDM3aiMA0GCSqGSIb3DQEBBQUAA4IBAQA0 PVvzXiOrMRdAgxuGgGEP3NqEYQrZaI09j0Gr0O5B4TmlVj/RWthoDnGbbM2iQffy jcQntxwpMdQdhpb8nLD9Z1bFM1YjkQimV1outHM9T9xFfaap9AIWBCoaLrb9MAvr gj22KQQktTZYgsG1IUt5eLyQ217eeqlJxVoqs7w1rIueNzv2IZHF3EkHSzBLBE+U 2xzcwSAPuLtA3YkdjHj4A7xjY/eJDljXNmgwvICDr4jHAW8Y492qLWaabyF62F6C S0NKwDHa5Gof8lqIEaPrmEXAOiNv4dA+gsYVOWnNlDNPytClO1eBT3j+KaXuZdx8 I8bFUJKvmRbLMxfO/CMG urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Nimes Université de Nimes http://unknown.site.com Brice QUILLERIE reseaux@unimes.fr Florence VERSE reseaux@unimes.fr univ-paris1.fr MIIDMzCCAhugAwIBAgIUN4OD7GwJor5x7X/cdaXgiF8OElUwDQYJKoZIhvcNAQEF BQAwHTEbMBkGA1UEAxMSaWRwLnVuaXYtcGFyaXMxLmZyMB4XDTA5MDYzMDE4MjIx OFoXDTI5MDYzMDE4MjIxOFowHTEbMBkGA1UEAxMSaWRwLnVuaXYtcGFyaXMxLmZy MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAk7DsGWWjsYm1Rn/nFfrg Ff25b3uadZLPdzBgYurzqIDAZ9Sc39MwxchyFmblmFSqb8vLHM36XKESMWUgmCO7 5GOFv7AsxhbtcXgLVohVKS47ZkTXnSbjg3eUww7s51lirQViAuA8iqRAZvnvPMFa JAbiXe54SIuDI7SQlTfNhpWGUaooDMfmHrgMOkB8MFk0nFDfN1oefPGIUtQ4LKXl 0Ua1paLUFF1Du76lakyiZ+ssZ3EkIy8pN1OssR/3rHmYDfqodgUeexSikB8IsdHp rNU+6NKfVzGQiZtjTT1cqMRBU7ElHtGyliuelZTGN2rWV9pxxDMBCVrCqvBM9yym PwIDAQABo2swaTBIBgNVHREEQTA/ghJpZHAudW5pdi1wYXJpczEuZnKGKWh0dHBz Oi8vaWRwLnVuaXYtcGFyaXMxLmZyL2lkcC9zaGliYm9sZXRoMB0GA1UdDgQWBBRs oNzyg0MZ2ce2hy2748tOvP/+LTANBgkqhkiG9w0BAQUFAAOCAQEAkyfipm/mh/Kt jiFkg7p4oQPJkqoBAMEhv1hNqf+8bWBcbhBwrkJUG/MfR3KWfHgnHexPU6Ri35aF NOFN5mNQvM8DSTdKvRhZV5cM9+s5x1WGSCnsBrRE/QcV0nhm5Kozlbkki93nPBOF YcX73QCPD/T1ewnjA8Pyh8rPoKrT9nOLAdxyENRCucOaXWMM8SAS3wcEuBPIrWX3 0MjL6pTwDGdoRCZ36w+hP802gvZMKu6GlRudUVPdKa0DYqDcTicA5drs0TnuQnBU Q0868rBTfR4z8pLRKvaADmYGslrdNQaXIK9yzi9qzGFQrBUEKJboWW/6hUR7NXuM yutCRUw+eg== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient univ-paris1.fr MIIDMzCCAhugAwIBAgIUN4OD7GwJor5x7X/cdaXgiF8OElUwDQYJKoZIhvcNAQEF BQAwHTEbMBkGA1UEAxMSaWRwLnVuaXYtcGFyaXMxLmZyMB4XDTA5MDYzMDE4MjIx OFoXDTI5MDYzMDE4MjIxOFowHTEbMBkGA1UEAxMSaWRwLnVuaXYtcGFyaXMxLmZy MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAk7DsGWWjsYm1Rn/nFfrg Ff25b3uadZLPdzBgYurzqIDAZ9Sc39MwxchyFmblmFSqb8vLHM36XKESMWUgmCO7 5GOFv7AsxhbtcXgLVohVKS47ZkTXnSbjg3eUww7s51lirQViAuA8iqRAZvnvPMFa JAbiXe54SIuDI7SQlTfNhpWGUaooDMfmHrgMOkB8MFk0nFDfN1oefPGIUtQ4LKXl 0Ua1paLUFF1Du76lakyiZ+ssZ3EkIy8pN1OssR/3rHmYDfqodgUeexSikB8IsdHp rNU+6NKfVzGQiZtjTT1cqMRBU7ElHtGyliuelZTGN2rWV9pxxDMBCVrCqvBM9yym PwIDAQABo2swaTBIBgNVHREEQTA/ghJpZHAudW5pdi1wYXJpczEuZnKGKWh0dHBz Oi8vaWRwLnVuaXYtcGFyaXMxLmZyL2lkcC9zaGliYm9sZXRoMB0GA1UdDgQWBBRs oNzyg0MZ2ce2hy2748tOvP/+LTANBgkqhkiG9w0BAQUFAAOCAQEAkyfipm/mh/Kt jiFkg7p4oQPJkqoBAMEhv1hNqf+8bWBcbhBwrkJUG/MfR3KWfHgnHexPU6Ri35aF NOFN5mNQvM8DSTdKvRhZV5cM9+s5x1WGSCnsBrRE/QcV0nhm5Kozlbkki93nPBOF YcX73QCPD/T1ewnjA8Pyh8rPoKrT9nOLAdxyENRCucOaXWMM8SAS3wcEuBPIrWX3 0MjL6pTwDGdoRCZ36w+hP802gvZMKu6GlRudUVPdKa0DYqDcTicA5drs0TnuQnBU Q0868rBTfR4z8pLRKvaADmYGslrdNQaXIK9yzi9qzGFQrBUEKJboWW/6hUR7NXuM yutCRUw+eg== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Paris 1 Panthéon-Sorbonne Université de Paris 1 Panthéon-Sorbonne http://unknown.site.com Benoit Branciard fed-admin@univ-paris1.fr Abdouroihamane Anli fed-admin@univ-paris1.fr paris1web.univ-paris1.fr emailAddress=crir@univ-paris1.fr,CN=paris1web.univ-paris1.fr,OU=CRIR,O=Universite Paris 1 Pantheon-Sorbonne,L=Paris,ST=Some-State,C=FR MIIEEDCCA3mgAwIBAgIJANuCOfHVLIm2MA0GCSqGSIb3DQEBBQUAMIG3MQswCQYD VQQGEwJGUjETMBEGA1UECBMKU29tZS1TdGF0ZTEOMAwGA1UEBxMFUGFyaXMxLTAr BgNVBAoTJFVuaXZlcnNpdGUgUGFyaXMgMSBQYW50aGVvbi1Tb3Jib25uZTENMAsG A1UECxMEQ1JJUjEhMB8GA1UEAxMYcGFyaXMxd2ViLnVuaXYtcGFyaXMxLmZyMSIw IAYJKoZIhvcNAQkBFhNjcmlyQHVuaXYtcGFyaXMxLmZyMB4XDTA4MDYyNTEzNDc1 MVoXDTEzMTIxNjEzNDc1MVowgbcxCzAJBgNVBAYTAkZSMRMwEQYDVQQIEwpTb21l LVN0YXRlMQ4wDAYDVQQHEwVQYXJpczEtMCsGA1UEChMkVW5pdmVyc2l0ZSBQYXJp cyAxIFBhbnRoZW9uLVNvcmJvbm5lMQ0wCwYDVQQLEwRDUklSMSEwHwYDVQQDExhw YXJpczF3ZWIudW5pdi1wYXJpczEuZnIxIjAgBgkqhkiG9w0BCQEWE2NyaXJAdW5p di1wYXJpczEuZnIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAL/8tppTWb+f etxNj6wIjXMqqSHDYvmBtwu2bW/vRwGGx9dLGjjti6HkerM1ZbPx/suNmJCYQXQK cq3TX3P1xn5Bo1/62O+LJ99PFmPduDS3xS5RDEwL+V74WgFVWo79YZyq3XXcMpGX 0NfFqQSM63EDgS7B3UEgwWx3pXMaz77DAgMBAAGjggEgMIIBHDAdBgNVHQ4EFgQU ERix1j99rDAeeZsy3hVt6k7YSDwwgewGA1UdIwSB5DCB4YAUERix1j99rDAeeZsy 3hVt6k7YSDyhgb2kgbowgbcxCzAJBgNVBAYTAkZSMRMwEQYDVQQIEwpTb21lLVN0 YXRlMQ4wDAYDVQQHEwVQYXJpczEtMCsGA1UEChMkVW5pdmVyc2l0ZSBQYXJpcyAx IFBhbnRoZW9uLVNvcmJvbm5lMQ0wCwYDVQQLEwRDUklSMSEwHwYDVQQDExhwYXJp czF3ZWIudW5pdi1wYXJpczEuZnIxIjAgBgkqhkiG9w0BCQEWE2NyaXJAdW5pdi1w YXJpczEuZnKCCQDbgjnx1SyJtjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUA A4GBAI6fS24CTmbf6fLTgE/dupU3KQN5EYyiE3drYLAVSc09qSSFLoaWuS31HOG9 S1cV9t1gBWZ7P6dkKX6FC6lgfUvDhiHfIpOOMK1vmaSblAnV7ad1nJGhV8hbOxJy pq2164j3eauFzzz2gFJslxaK7u6k5GI2+D/2MJOOXc+Za4kD paris1web.univ-paris1.fr emailAddress=crir@univ-paris1.fr,CN=paris1web.univ-paris1.fr,OU=CRIR,O=Universite Paris 1 Pantheon-Sorbonne,L=Paris,ST=Some-State,C=FR MIIEEDCCA3mgAwIBAgIJANuCOfHVLIm2MA0GCSqGSIb3DQEBBQUAMIG3MQswCQYD VQQGEwJGUjETMBEGA1UECBMKU29tZS1TdGF0ZTEOMAwGA1UEBxMFUGFyaXMxLTAr BgNVBAoTJFVuaXZlcnNpdGUgUGFyaXMgMSBQYW50aGVvbi1Tb3Jib25uZTENMAsG A1UECxMEQ1JJUjEhMB8GA1UEAxMYcGFyaXMxd2ViLnVuaXYtcGFyaXMxLmZyMSIw IAYJKoZIhvcNAQkBFhNjcmlyQHVuaXYtcGFyaXMxLmZyMB4XDTA4MDYyNTEzNDc1 MVoXDTEzMTIxNjEzNDc1MVowgbcxCzAJBgNVBAYTAkZSMRMwEQYDVQQIEwpTb21l LVN0YXRlMQ4wDAYDVQQHEwVQYXJpczEtMCsGA1UEChMkVW5pdmVyc2l0ZSBQYXJp cyAxIFBhbnRoZW9uLVNvcmJvbm5lMQ0wCwYDVQQLEwRDUklSMSEwHwYDVQQDExhw YXJpczF3ZWIudW5pdi1wYXJpczEuZnIxIjAgBgkqhkiG9w0BCQEWE2NyaXJAdW5p di1wYXJpczEuZnIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAL/8tppTWb+f etxNj6wIjXMqqSHDYvmBtwu2bW/vRwGGx9dLGjjti6HkerM1ZbPx/suNmJCYQXQK cq3TX3P1xn5Bo1/62O+LJ99PFmPduDS3xS5RDEwL+V74WgFVWo79YZyq3XXcMpGX 0NfFqQSM63EDgS7B3UEgwWx3pXMaz77DAgMBAAGjggEgMIIBHDAdBgNVHQ4EFgQU ERix1j99rDAeeZsy3hVt6k7YSDwwgewGA1UdIwSB5DCB4YAUERix1j99rDAeeZsy 3hVt6k7YSDyhgb2kgbowgbcxCzAJBgNVBAYTAkZSMRMwEQYDVQQIEwpTb21lLVN0 YXRlMQ4wDAYDVQQHEwVQYXJpczEtMCsGA1UEChMkVW5pdmVyc2l0ZSBQYXJpcyAx IFBhbnRoZW9uLVNvcmJvbm5lMQ0wCwYDVQQLEwRDUklSMSEwHwYDVQQDExhwYXJp czF3ZWIudW5pdi1wYXJpczEuZnIxIjAgBgkqhkiG9w0BCQEWE2NyaXJAdW5pdi1w YXJpczEuZnKCCQDbgjnx1SyJtjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUA A4GBAI6fS24CTmbf6fLTgE/dupU3KQN5EYyiE3drYLAVSc09qSSFLoaWuS31HOG9 S1cV9t1gBWZ7P6dkKX6FC6lgfUvDhiHfIpOOMK1vmaSblAnV7ad1nJGhV8hbOxJy pq2164j3eauFzzz2gFJslxaK7u6k5GI2+D/2MJOOXc+Za4kD listes.univ-paris1.fr CN=listes.univ-paris1.fr,O=Universite Paris 1 Pantheon-Sorbonne,C=FR MIIC+DCCAmGgAwIBAgIJAPzuZnYnwQcXMA0GCSqGSIb3DQEBBQUAMFwxCzAJBgNV BAYTAkZSMS0wKwYDVQQKEyRVbml2ZXJzaXRlIFBhcmlzIDEgUGFudGhlb24tU29y Ym9ubmUxHjAcBgNVBAMTFWxpc3Rlcy51bml2LXBhcmlzMS5mcjAeFw0xMDEwMTkx MzA4NTlaFw0zMDEwMTQxMzA4NTlaMFwxCzAJBgNVBAYTAkZSMS0wKwYDVQQKEyRV bml2ZXJzaXRlIFBhcmlzIDEgUGFudGhlb24tU29yYm9ubmUxHjAcBgNVBAMTFWxp c3Rlcy51bml2LXBhcmlzMS5mcjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA pHC8twiRsoUfJJzit8kaPaodGTrc6OeXMuv+YPkdVK+YLrKikR/Sr8lq6cIIdsFO Lm+8BbQ1AZDwqjwihr8J6tI/Ooe4o7W+N/htJoYwQ82QAM+mOHR2oTpNd4pXc7R0 fsRtP6f0L2HiHQGZL+yP0Jpip1Gr93FzPFzNGR4DE+cCAwEAAaOBwTCBvjAdBgNV HQ4EFgQUwaBf2pOJp0Rv6BeHMgkBgSN0KY8wgY4GA1UdIwSBhjCBg4AUwaBf2pOJ p0Rv6BeHMgkBgSN0KY+hYKReMFwxCzAJBgNVBAYTAkZSMS0wKwYDVQQKEyRVbml2 ZXJzaXRlIFBhcmlzIDEgUGFudGhlb24tU29yYm9ubmUxHjAcBgNVBAMTFWxpc3Rl cy51bml2LXBhcmlzMS5mcoIJAPzuZnYnwQcXMAwGA1UdEwQFMAMBAf8wDQYJKoZI hvcNAQEFBQADgYEAZcRWOE9E8bGGOXvo/WOI5p0wAno7nGYDiYe70F3r8GPcG1B3 vzmzrDUcwqI30eAFuhL2PnhEmDmDS2zAVF/gDujVM5pQySirnlIaRdKLoyX11Oc0 nCB7kA0ANyUyQ1c+FeuO1FbRpVr720YrXOf0B70a7KaySM08fkI5pMOGcs0= listes.univ-paris1.fr CN=listes.univ-paris1.fr,O=Universite Paris 1 Pantheon-Sorbonne,C=FR MIIC+DCCAmGgAwIBAgIJAPzuZnYnwQcXMA0GCSqGSIb3DQEBBQUAMFwxCzAJBgNV BAYTAkZSMS0wKwYDVQQKEyRVbml2ZXJzaXRlIFBhcmlzIDEgUGFudGhlb24tU29y Ym9ubmUxHjAcBgNVBAMTFWxpc3Rlcy51bml2LXBhcmlzMS5mcjAeFw0xMDEwMTkx MzA4NTlaFw0zMDEwMTQxMzA4NTlaMFwxCzAJBgNVBAYTAkZSMS0wKwYDVQQKEyRV bml2ZXJzaXRlIFBhcmlzIDEgUGFudGhlb24tU29yYm9ubmUxHjAcBgNVBAMTFWxp c3Rlcy51bml2LXBhcmlzMS5mcjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA pHC8twiRsoUfJJzit8kaPaodGTrc6OeXMuv+YPkdVK+YLrKikR/Sr8lq6cIIdsFO Lm+8BbQ1AZDwqjwihr8J6tI/Ooe4o7W+N/htJoYwQ82QAM+mOHR2oTpNd4pXc7R0 fsRtP6f0L2HiHQGZL+yP0Jpip1Gr93FzPFzNGR4DE+cCAwEAAaOBwTCBvjAdBgNV HQ4EFgQUwaBf2pOJp0Rv6BeHMgkBgSN0KY8wgY4GA1UdIwSBhjCBg4AUwaBf2pOJ p0Rv6BeHMgkBgSN0KY+hYKReMFwxCzAJBgNVBAYTAkZSMS0wKwYDVQQKEyRVbml2 ZXJzaXRlIFBhcmlzIDEgUGFudGhlb24tU29yYm9ubmUxHjAcBgNVBAMTFWxpc3Rl cy51bml2LXBhcmlzMS5mcoIJAPzuZnYnwQcXMAwGA1UdEwQFMAMBAf8wDQYJKoZI hvcNAQEFBQADgYEAZcRWOE9E8bGGOXvo/WOI5p0wAno7nGYDiYe70F3r8GPcG1B3 vzmzrDUcwqI30eAFuhL2PnhEmDmDS2zAVF/gDujVM5pQySirnlIaRdKLoyX11Oc0 nCB7kA0ANyUyQ1c+FeuO1FbRpVr720YrXOf0B70a7KaySM08fkI5pMOGcs0= univ-paris13.fr MIIDejCCAmKgAwIBAgIVAK7XWBt0cfWGEv/HUzJRJYhKWFD6MA0GCSqGSIb3DQEB BQUAMC4xLDAqBgNVBAMTI2ZlZGVyYXRpb24taWRlbnRpdGUudW5pdi1wYXJpczEz LmZyMB4XDTEwMTAyMzEyMTExNFoXDTMwMTAyMzEyMTExNFowLjEsMCoGA1UEAxMj ZmVkZXJhdGlvbi1pZGVudGl0ZS51bml2LXBhcmlzMTMuZnIwggEiMA0GCSqGSIb3 DQEBAQUAA4IBDwAwggEKAoIBAQCc/y6YY56o8yN7kpm+WTki591jEzoyfZhI883X RMP54gc9B/YlMvhOX0c3yKxsAA9DGZqhC3IpzhNIwEqZdznaDtLyb8qfExgP37zU sKJlqU3fmiZ3PLB1H3MKMu850bQpxcY9mQnboBSfwybTkiggCei2uVls8dgDhr6O M/JkWo2JzAnBKYP8B1nEG3Ynabbk1ncktx1XlUb5Ar7L33GXSBHZmZjQczgifXbl euOjVRlBJodDaQS0dZMKVvEWxPIU2n0Kd7leiWrVe9UJgIOlc9XPCX0EXfNb90fx z5anJggWlCClzAI2BNPM1BlTk+Sf0B4j0Df250uvsqM+6dUjAgMBAAGjgY4wgYsw agYDVR0RBGMwYYIjZmVkZXJhdGlvbi1pZGVudGl0ZS51bml2LXBhcmlzMTMuZnKG Omh0dHBzOi8vZmVkZXJhdGlvbi1pZGVudGl0ZS51bml2LXBhcmlzMTMuZnIvaWRw L3NoaWJib2xldGgwHQYDVR0OBBYEFPPj9MEZxWRXVouk6e4gI+J1lfjsMA0GCSqG SIb3DQEBBQUAA4IBAQAIvX5H/FQEOM68IPlr/uhjuDKEhngLhPp/oJB2rewP6ryS PtgXpCpFVF2LKK5WJGtoXtpAxHg5DFz1UVvcCG2ELivEtZa0L15DxQNQRCkx9ot2 z4FPpojZ5AfAzJixC8QxXL6Em97K5iJic1cin5oRNaX5TJBki5VVGpy1HGJuw2jT rk2djX0eDw4AXkvCk9v20rg2f/JQtCu7Ai1rlRzHzq1bAhaepZmdXOBedBSiPTlX HtqWfXo71mMZC74xUh+ctHhBLqZJ8oKWIif43XpoA5ZXUsgSKKQ11d+l8l9UEFDQ 0pZI2DZg+vSvz1Lncsgyiuy4FDU0VFXEc+gRL3aZ urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Paris 13 Université de Paris 13 http://unknown.site.com Fortier Michael fed-contact@univ-paris13.fr Philippe Werle fed-contact@univ-paris13.fr federation-services.univ-paris13.fr CN=federation-services.univ-paris13.fr,O=UNIV PARIS XIII PARIS-NORD VILLETANEUSE,L=VILLETANEUSE,C=FR MIIEvjCCA6agAwIBAgIRAJndF8JdTR3Pf2YqlcyhrV8wDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0xMDEwMDcwMDAwMDBaFw0xMzEwMDYyMzU5NTlaMIGEMQswCQYD VQQGEwJGUjEVMBMGA1UEBxMMVklMTEVUQU5FVVNFMTAwLgYDVQQKEydVTklWIFBB UklTIFhJSUkgUEFSSVMtTk9SRCBWSUxMRVRBTkVVU0UxLDAqBgNVBAMTI2ZlZGVy YXRpb24tc2VydmljZXMudW5pdi1wYXJpczEzLmZyMIIBIjANBgkqhkiG9w0BAQEF AAOCAQ8AMIIBCgKCAQEAsXzetWt/AvwoIIcUee2n65sDNm0Y77b3VUbSy7xwBhBl CAfRtCmtDThl/8cGvQ4haQhd46syS+s1VmDjNFrmc9vIGS3GkiLtAmAWtnM1afYT C5ntKSY3rOkpfXGK6nrvesuoB5pva0QRGg+9q/nWIHThGIy/JDWjbLWQp++B4RUX EEKoNIlEaMGrBGAJqmdCgpGnxcFoLJ1fYoiTDyzmK5+qpmq20pw99UUkl0NpiwhA QRoSuMUP6jb/P2Sm6Z3dbAa2qic1JX3KNwDPxWp2YRyrAHenA+MTh98ZCBXr8Qri p2VLB/JnUkYWrJE+AfP6O0OkoDizb8sSF6e8Mdbw4wIDAQABo4IBdjCCAXIwHwYD VR0jBBgwFoAUDL2TaAzz3qujSWsrN1dH6pDjue0wHQYDVR0OBBYEFIU0gliBXz2Z gYnyffWFix3l//lGMA4GA1UdDwEB/wQEAwIFoDAMBgNVHRMBAf8EAjAAMB0GA1Ud JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAYBgNVHSAEETAPMA0GCysGAQQBsjEB AgIdMDoGA1UdHwQzMDEwL6AtoCuGKWh0dHA6Ly9jcmwudGNzLnRlcmVuYS5vcmcv VEVSRU5BU1NMQ0EuY3JsMG0GCCsGAQUFBwEBBGEwXzA1BggrBgEFBQcwAoYpaHR0 cDovL2NydC50Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcnQwJgYIKwYBBQUH MAGGGmh0dHA6Ly9vY3NwLnRjcy50ZXJlbmEub3JnMC4GA1UdEQQnMCWCI2ZlZGVy YXRpb24tc2VydmljZXMudW5pdi1wYXJpczEzLmZyMA0GCSqGSIb3DQEBBQUAA4IB AQB+iWur7nIKLh6C2jr4aQ3lkIUGc8yZIwWC/XKPqFj41riD1sbZwyXGXZ/FZOjZ CMtM5934NzoEExTipjGOxiJOBotqxvzzfF05zkQmM/hfJW+t/5LWf3TvPcP9mWmu 6fYIB2ZHgKBJPAoEc+bKje+xbiqN70dwaUQSAAW8dgu5gqRM17mGmfNdE81ePbir YHJR1TsmznO89T+tOLNHuGS828nFwlf9m1mgybEqniag7+hx9Er4WqeGj8WLYTWf iuToRx0DUTa6pJfRA9hler62YJky5Q9OPUvLSybJTcfv4e/nG9GZnstp4AdByc77 ULKxtul8EhV7E4swUTKWNXPI federation-services.univ-paris13.fr CN=federation-services.univ-paris13.fr,O=UNIV PARIS XIII PARIS-NORD VILLETANEUSE,L=VILLETANEUSE,C=FR MIIEvjCCA6agAwIBAgIRAJndF8JdTR3Pf2YqlcyhrV8wDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0xMDEwMDcwMDAwMDBaFw0xMzEwMDYyMzU5NTlaMIGEMQswCQYD VQQGEwJGUjEVMBMGA1UEBxMMVklMTEVUQU5FVVNFMTAwLgYDVQQKEydVTklWIFBB UklTIFhJSUkgUEFSSVMtTk9SRCBWSUxMRVRBTkVVU0UxLDAqBgNVBAMTI2ZlZGVy YXRpb24tc2VydmljZXMudW5pdi1wYXJpczEzLmZyMIIBIjANBgkqhkiG9w0BAQEF AAOCAQ8AMIIBCgKCAQEAsXzetWt/AvwoIIcUee2n65sDNm0Y77b3VUbSy7xwBhBl CAfRtCmtDThl/8cGvQ4haQhd46syS+s1VmDjNFrmc9vIGS3GkiLtAmAWtnM1afYT C5ntKSY3rOkpfXGK6nrvesuoB5pva0QRGg+9q/nWIHThGIy/JDWjbLWQp++B4RUX EEKoNIlEaMGrBGAJqmdCgpGnxcFoLJ1fYoiTDyzmK5+qpmq20pw99UUkl0NpiwhA QRoSuMUP6jb/P2Sm6Z3dbAa2qic1JX3KNwDPxWp2YRyrAHenA+MTh98ZCBXr8Qri p2VLB/JnUkYWrJE+AfP6O0OkoDizb8sSF6e8Mdbw4wIDAQABo4IBdjCCAXIwHwYD VR0jBBgwFoAUDL2TaAzz3qujSWsrN1dH6pDjue0wHQYDVR0OBBYEFIU0gliBXz2Z gYnyffWFix3l//lGMA4GA1UdDwEB/wQEAwIFoDAMBgNVHRMBAf8EAjAAMB0GA1Ud JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAYBgNVHSAEETAPMA0GCysGAQQBsjEB AgIdMDoGA1UdHwQzMDEwL6AtoCuGKWh0dHA6Ly9jcmwudGNzLnRlcmVuYS5vcmcv VEVSRU5BU1NMQ0EuY3JsMG0GCCsGAQUFBwEBBGEwXzA1BggrBgEFBQcwAoYpaHR0 cDovL2NydC50Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcnQwJgYIKwYBBQUH MAGGGmh0dHA6Ly9vY3NwLnRjcy50ZXJlbmEub3JnMC4GA1UdEQQnMCWCI2ZlZGVy YXRpb24tc2VydmljZXMudW5pdi1wYXJpczEzLmZyMA0GCSqGSIb3DQEBBQUAA4IB AQB+iWur7nIKLh6C2jr4aQ3lkIUGc8yZIwWC/XKPqFj41riD1sbZwyXGXZ/FZOjZ CMtM5934NzoEExTipjGOxiJOBotqxvzzfF05zkQmM/hfJW+t/5LWf3TvPcP9mWmu 6fYIB2ZHgKBJPAoEc+bKje+xbiqN70dwaUQSAAW8dgu5gqRM17mGmfNdE81ePbir YHJR1TsmznO89T+tOLNHuGS828nFwlf9m1mgybEqniag7+hx9Er4WqeGj8WLYTWf iuToRx0DUTa6pJfRA9hler62YJky5Q9OPUvLSybJTcfv4e/nG9GZnstp4AdByc77 ULKxtul8EhV7E4swUTKWNXPI u-paris2.fr MIIDKDCCAhCgAwIBAgIVAMp5OwfZhARjYjKiRGsl00NIQdOSMA0GCSqGSIb3DQEB BQUAMBoxGDAWBgNVBAMTD2lkcC51LXBhcmlzMi5mcjAeFw0xMDA1MDQwODMzNTFa Fw0zMDA1MDQwODMzNTFaMBoxGDAWBgNVBAMTD2lkcC51LXBhcmlzMi5mcjCCASIw DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKvTD6tMQ/kZmaHws1Nf63ahdvtG LTEUWdm6XyQWj5wG0eirdgKBEzWofC9d4LjpvzNR9l0CDxFj6wje16c6FeM/hWR/ kQuZ/d6AAe7JgZSalYZO5LVs6Pax8F4WEHO8Kijf3AJLOSQ2KvU1EhXP2C/rtVcg k4xxYsXN8f4PbQ8ZGoo0yJFSVTrhlAzxnJhdm8gppL5jw17WiKSYfZCkMCTu8u/a hQW2RSp1M7uEGWr47egmvrNJwtQbiExcBP3FT/7U5oul3MwY8wT8TJYMDaQP8LTS 1MroYXdVgfO2mmS10T8kgcVt1ps7KcyvmcPk81z314FvWcC77HYkTARFo80CAwEA AaNlMGMwQgYDVR0RBDswOYIPaWRwLnUtcGFyaXMyLmZyhiZodHRwczovL2lkcC51 LXBhcmlzMi5mci9pZHAvc2hpYmJvbGV0aDAdBgNVHQ4EFgQUgKnZrvkI2yO/HhXh iAk91OTmTqAwDQYJKoZIhvcNAQEFBQADggEBACsP2+O+kW7sdhWstnhen0ohxcS7 5Tk9y7+24F0P5SjtOn9RXJk7Wlv25BG4zzNepvuCGuR0AnI0nR1kUpEJv8IWcfeR GtV5tXfgVCb8svamMyUfBhmytlQsebX75ywZXfiIX2NEAnoqfnJQZaAiwjU693G+ Ble6G5wtHtjGkChMA/4SlUS4W1IMZ2R7lCH1x7NOLOy0Pq96IT288UCeZIMgdzbu RtcrJywTYtIWJHXtKJCmqXAZtwk8n+A3ZSEh75ddgWV7HXEV9xQLZD2JqF8c2+ut hqMf53fqkD86bZej00n+26hwr9NPrUSPVB11MOmLAeVPTyLouC66oWMk/pI= urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient u-paris2.fr MIIDKDCCAhCgAwIBAgIVAMp5OwfZhARjYjKiRGsl00NIQdOSMA0GCSqGSIb3DQEB BQUAMBoxGDAWBgNVBAMTD2lkcC51LXBhcmlzMi5mcjAeFw0xMDA1MDQwODMzNTFa Fw0zMDA1MDQwODMzNTFaMBoxGDAWBgNVBAMTD2lkcC51LXBhcmlzMi5mcjCCASIw DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKvTD6tMQ/kZmaHws1Nf63ahdvtG LTEUWdm6XyQWj5wG0eirdgKBEzWofC9d4LjpvzNR9l0CDxFj6wje16c6FeM/hWR/ kQuZ/d6AAe7JgZSalYZO5LVs6Pax8F4WEHO8Kijf3AJLOSQ2KvU1EhXP2C/rtVcg k4xxYsXN8f4PbQ8ZGoo0yJFSVTrhlAzxnJhdm8gppL5jw17WiKSYfZCkMCTu8u/a hQW2RSp1M7uEGWr47egmvrNJwtQbiExcBP3FT/7U5oul3MwY8wT8TJYMDaQP8LTS 1MroYXdVgfO2mmS10T8kgcVt1ps7KcyvmcPk81z314FvWcC77HYkTARFo80CAwEA AaNlMGMwQgYDVR0RBDswOYIPaWRwLnUtcGFyaXMyLmZyhiZodHRwczovL2lkcC51 LXBhcmlzMi5mci9pZHAvc2hpYmJvbGV0aDAdBgNVHQ4EFgQUgKnZrvkI2yO/HhXh iAk91OTmTqAwDQYJKoZIhvcNAQEFBQADggEBACsP2+O+kW7sdhWstnhen0ohxcS7 5Tk9y7+24F0P5SjtOn9RXJk7Wlv25BG4zzNepvuCGuR0AnI0nR1kUpEJv8IWcfeR GtV5tXfgVCb8svamMyUfBhmytlQsebX75ywZXfiIX2NEAnoqfnJQZaAiwjU693G+ Ble6G5wtHtjGkChMA/4SlUS4W1IMZ2R7lCH1x7NOLOy0Pq96IT288UCeZIMgdzbu RtcrJywTYtIWJHXtKJCmqXAZtwk8n+A3ZSEh75ddgWV7HXEV9xQLZD2JqF8c2+ut hqMf53fqkD86bZej00n+26hwr9NPrUSPVB11MOmLAeVPTyLouC66oWMk/pI= urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Paris 2 - Panthéon Assas Université de Paris 2 - Panthéon Assas http://unknown.site.com Georges Gonçalves-Enes ssri@u-paris2.fr Jérôme Nenert ssri@u-paris2.fr upmc.fr MIIDGDCCAgCgAwIBAgIVAN1AZOqK88JKnAIFyCt2qtu7oPjcMA0GCSqGSIb3DQEB BQUAMBYxFDASBgNVBAMTC2lkcC51cG1jLmZyMB4XDTA5MTIyOTEyMDUwN1oXDTI5 MTIyOTEyMDUwN1owFjEUMBIGA1UEAxMLaWRwLnVwbWMuZnIwggEiMA0GCSqGSIb3 DQEBAQUAA4IBDwAwggEKAoIBAQCoXzLI2AobGhWJRoofrUz1FYBOgAk68Q5TIZ+h GvBAJj7/23JkOyaz6vaGqls+iqycDPHx3grJ6KsDbIoCPcgbyb3vyAJOkxT49fzp C0RGJVKGPZoNaCV2KXSO49Il5yWb7zIwXBKBn5QSRSOE7S2YINHzzlGVj2SWCaCJ LY3K7R+O5TMaiqqKXcO20tmme7FDckHc/fPw8H+R8r9TgLvoPbCIqjnvCHsj+192 WNtzs99sMwZ21xaMo0QS9VsX6JMmsJViQwNyAgE6gxbG1SEWD2G1ja7bW/o9LuUG JvDjfDmzNj316AeYMWnzY+275B2fr/JcawcmmF3aK6xPjqRZAgMBAAGjXTBbMDoG A1UdEQQzMDGCC2lkcC51cG1jLmZyhiJodHRwczovL2lkcC51cG1jLmZyL2lkcC9z aGliYm9sZXRoMB0GA1UdDgQWBBQHbFPNG0miSxq1PVDJGqFQbHEdtjANBgkqhkiG 9w0BAQUFAAOCAQEAiznIMyBVikg8EfABaENTvB0ND8rZN1cVNIU/LoiBHL6DF7bQ hGd7JManqhNH5TdHXmfK5CsIZMBGbYIMhyTDxsW3ASNR5Ip2Lpq+9YgTSi+k4FzM VYCRAJw9mjTrDfCVVG2ZdN0FaWLezJhGG0iJDlmpzhDDpBsAt88Aj6uqXJrKGp3Z ExxnD0z0ECRqrbfgM8lUgAW2hS1C4wgO8sz6FpOIJ1kkXZ54TjI9UE2rmWKkD+iT nBrz6NcdhS32ZUARncfqoFZvOY+9rh4Q2SQIRyjKrAG/2TNVxVo6E+xEzx8nN63D Gz5/Q64Ts766vZwDA9u1fXIedZRbjJHYD4o6Fw== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient upmc.fr MIIDGDCCAgCgAwIBAgIVAN1AZOqK88JKnAIFyCt2qtu7oPjcMA0GCSqGSIb3DQEB BQUAMBYxFDASBgNVBAMTC2lkcC51cG1jLmZyMB4XDTA5MTIyOTEyMDUwN1oXDTI5 MTIyOTEyMDUwN1owFjEUMBIGA1UEAxMLaWRwLnVwbWMuZnIwggEiMA0GCSqGSIb3 DQEBAQUAA4IBDwAwggEKAoIBAQCoXzLI2AobGhWJRoofrUz1FYBOgAk68Q5TIZ+h GvBAJj7/23JkOyaz6vaGqls+iqycDPHx3grJ6KsDbIoCPcgbyb3vyAJOkxT49fzp C0RGJVKGPZoNaCV2KXSO49Il5yWb7zIwXBKBn5QSRSOE7S2YINHzzlGVj2SWCaCJ LY3K7R+O5TMaiqqKXcO20tmme7FDckHc/fPw8H+R8r9TgLvoPbCIqjnvCHsj+192 WNtzs99sMwZ21xaMo0QS9VsX6JMmsJViQwNyAgE6gxbG1SEWD2G1ja7bW/o9LuUG JvDjfDmzNj316AeYMWnzY+275B2fr/JcawcmmF3aK6xPjqRZAgMBAAGjXTBbMDoG A1UdEQQzMDGCC2lkcC51cG1jLmZyhiJodHRwczovL2lkcC51cG1jLmZyL2lkcC9z aGliYm9sZXRoMB0GA1UdDgQWBBQHbFPNG0miSxq1PVDJGqFQbHEdtjANBgkqhkiG 9w0BAQUFAAOCAQEAiznIMyBVikg8EfABaENTvB0ND8rZN1cVNIU/LoiBHL6DF7bQ hGd7JManqhNH5TdHXmfK5CsIZMBGbYIMhyTDxsW3ASNR5Ip2Lpq+9YgTSi+k4FzM VYCRAJw9mjTrDfCVVG2ZdN0FaWLezJhGG0iJDlmpzhDDpBsAt88Aj6uqXJrKGp3Z ExxnD0z0ECRqrbfgM8lUgAW2hS1C4wgO8sz6FpOIJ1kkXZ54TjI9UE2rmWKkD+iT nBrz6NcdhS32ZUARncfqoFZvOY+9rh4Q2SQIRyjKrAG/2TNVxVo6E+xEzx8nN63D Gz5/Q64Ts766vZwDA9u1fXIedZRbjJHYD4o6Fw== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Paris 6 - Pierre et Marie Curie Université de Paris 6 - Pierre et Marie Curie http://unknown.site.com Jean Marie THIA jean-marie.thia@upmc.fr Jean-Luc MUNIER jean-luc.munier@upmc.fr MIIEKjCCAxKgAwIBAgIBAjANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJGUjEM MAoGA1UECBMDSURGMQ4wDAYDVQQHEwVQYXJpczENMAsGA1UEChMEVVBNQzEdMBsG CSqGSIb3DQEJARYOcmVzZWF1QHVwbWMuZnIxFDASBgNVBAMTC2ludGVybmFsLWNh MB4XDTExMDIxNTExMzMwOFoXDTM0MTAyMjExMzMwOFowczELMAkGA1UEBhMCRlIx DDAKBgNVBAgTA0lERjEOMAwGA1UEBxMFUGFyaXMxDTALBgNVBAoTBFVQTUMxHTAb BgkqhkiG9w0BCQEWDnJlc2VhdUB1cG1jLmZyMRgwFgYDVQQDEw9lZHVzcG90LnVw bWMuZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC0PsxcrXb3fjyo bYeK/fi5Mg6FugVB4uM1iefnz9uvc1qdcDz94Iyr9Uf5TYerwQWcE4fiTndCBv5I LWBmgu40EzqC/ISY2JFN+uGgEx/5cXdYz4RnQ53MMCluPnNwGXNb/tYgyElKdoS5 73rVROrYhrYkU01eFyM56BsL9htHNnSFNmQA2UfWanYo1PCMXmR/ENsQtKOjRsJi WAGoc/eb1yOEyXGiPewibL49zZ+J4Eo56UQbEoon+KWRlDAi8KbkKmPxhU5vWvwb mEQhKOGhIk0Is+m8hQcL7DU4KVdI6g3096potpBuQBd+ei0oeX+OH1ul/weBP25d KqsoHGWJAgMBAAGjgcwwgckwHQYDVR0OBBYEFJWyLdbFSjunmZ4FXjEkKjJ0WFuw MIGZBgNVHSMEgZEwgY6AFPkvysFlPZBJLXLncDsWx5zJ2UN4oXOkcTBvMQswCQYD VQQGEwJGUjEMMAoGA1UECBMDSURGMQ4wDAYDVQQHEwVQYXJpczENMAsGA1UEChME VVBNQzEdMBsGCSqGSIb3DQEJARYOcmVzZWF1QHVwbWMuZnIxFDASBgNVBAMTC2lu dGVybmFsLWNhggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAG48 o+oU8J2lYwv9X1b83TGwwkL6X5vqSJf0iluYj9XCftm9JdDXCissjYL0SDExt0Gi EWd2cBjdDV3IbUyv4MtMiHsplMgW+6nTOGATJPStndXvS6tseXDYRfDzE2TwKe6Q ETeyfbNzZYGEETM9veNlb3I81TMCRSg9qI4UIZo4zqtqVi54llLFoKSAYly5COM8 1bna0D/lHFGcNaP07e2s0FXaC1v65MG/dq6GBs8+cNgJeG8m32JLsbOFolB1q9ff 9A+jU2k0VlBhMXUbVMREK0heZapuW90b4P8Beg38bIh++NrF2TkQg2iIxBzPWdUR gYTik6uyTwP1RcTmX4s= MIIEKjCCAxKgAwIBAgIBAjANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJGUjEM MAoGA1UECBMDSURGMQ4wDAYDVQQHEwVQYXJpczENMAsGA1UEChMEVVBNQzEdMBsG CSqGSIb3DQEJARYOcmVzZWF1QHVwbWMuZnIxFDASBgNVBAMTC2ludGVybmFsLWNh MB4XDTExMDIxNTExMzMwOFoXDTM0MTAyMjExMzMwOFowczELMAkGA1UEBhMCRlIx DDAKBgNVBAgTA0lERjEOMAwGA1UEBxMFUGFyaXMxDTALBgNVBAoTBFVQTUMxHTAb BgkqhkiG9w0BCQEWDnJlc2VhdUB1cG1jLmZyMRgwFgYDVQQDEw9lZHVzcG90LnVw bWMuZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC0PsxcrXb3fjyo bYeK/fi5Mg6FugVB4uM1iefnz9uvc1qdcDz94Iyr9Uf5TYerwQWcE4fiTndCBv5I LWBmgu40EzqC/ISY2JFN+uGgEx/5cXdYz4RnQ53MMCluPnNwGXNb/tYgyElKdoS5 73rVROrYhrYkU01eFyM56BsL9htHNnSFNmQA2UfWanYo1PCMXmR/ENsQtKOjRsJi WAGoc/eb1yOEyXGiPewibL49zZ+J4Eo56UQbEoon+KWRlDAi8KbkKmPxhU5vWvwb mEQhKOGhIk0Is+m8hQcL7DU4KVdI6g3096potpBuQBd+ei0oeX+OH1ul/weBP25d KqsoHGWJAgMBAAGjgcwwgckwHQYDVR0OBBYEFJWyLdbFSjunmZ4FXjEkKjJ0WFuw MIGZBgNVHSMEgZEwgY6AFPkvysFlPZBJLXLncDsWx5zJ2UN4oXOkcTBvMQswCQYD VQQGEwJGUjEMMAoGA1UECBMDSURGMQ4wDAYDVQQHEwVQYXJpczENMAsGA1UEChME VVBNQzEdMBsGCSqGSIb3DQEJARYOcmVzZWF1QHVwbWMuZnIxFDASBgNVBAMTC2lu dGVybmFsLWNhggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAG48 o+oU8J2lYwv9X1b83TGwwkL6X5vqSJf0iluYj9XCftm9JdDXCissjYL0SDExt0Gi EWd2cBjdDV3IbUyv4MtMiHsplMgW+6nTOGATJPStndXvS6tseXDYRfDzE2TwKe6Q ETeyfbNzZYGEETM9veNlb3I81TMCRSg9qI4UIZo4zqtqVi54llLFoKSAYly5COM8 1bna0D/lHFGcNaP07e2s0FXaC1v65MG/dq6GBs8+cNgJeG8m32JLsbOFolB1q9ff 9A+jU2k0VlBhMXUbVMREK0heZapuW90b4P8Beg38bIh++NrF2TkQg2iIxBzPWdUR gYTik6uyTwP1RcTmX4s= Jean-luc.munier reseau@upmc.fr Jean Marie THIA jean-marie.thia@upmc.fr univ-paris-diderot.fr MIIDTzCCAjegAwIBAgIULx+owuxVqKi5UslTwx01W+5bfXwwDQYJKoZIhvcNAQEF BQAwJDEiMCAGA1UEAxMZaWRwLnVuaXYtcGFyaXMtZGlkZXJvdC5mcjAeFw0wOTAy MDYxNDA0NTNaFw0yOTAyMDYxNDA0NTNaMCQxIjAgBgNVBAMTGWlkcC51bml2LXBh cmlzLWRpZGVyb3QuZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCh y+gvRdhHTBQ+uJSfekeLNUYG6jVf8Q0zGJbq4v2IhM7/QRW/w6gqQYIEdN9tfHsN 9f9yNzcWA425tRxNMSgC0MHqnR1DVzwyhD3p5W7FltE8ZvnUrXdjofZYYXdKhAJT GYFZoWjFbBxtiPi18GC96pEwIs/pvYAmxE/7SkuQChNkd5VHVIvcEwQlLhqVCGQH ZbnqAr4MUHH5Kln9+Xz2wrBfngMuyKCk4Ly4CFpFqovW1wBe4ng8For76e3qXe1J UYUG/AWHkyMey2WYmHc+USBxHurFxksA5G3OrnfvTxFalplVx4At7Oy3Wu39yWeA IwDN2QKKAjMl9yLniSQ7AgMBAAGjeTB3MFYGA1UdEQRPME2CGWlkcC51bml2LXBh cmlzLWRpZGVyb3QuZnKGMGh0dHBzOi8vaWRwLnVuaXYtcGFyaXMtZGlkZXJvdC5m ci9pZHAvc2hpYmJvbGV0aDAdBgNVHQ4EFgQUAZ4jIK9eFzfy+JNjR4VlDQmcP0Uw DQYJKoZIhvcNAQEFBQADggEBAARNJR4nnPoypm4a7nt6xrcf+GelDhZXFFw2SFa5 PIhJFYI947muj6skdsDZohmDuheQjvOZfi2/sMrlJOxHWW7wzzqe34W+d9nv2Fu2 qGZYTZ+7HPA95tlYUPqdKOVRqKlYBUUl2NRVl6xsmZ5HJOkrQGIAl2dgRD61XIZd 7GB8/mmYNTgjSRmVUwdNiHeivKf8EVc9BHKjgWSFV6XHnIS6vlNwWChWAJn+F2nh Jm3u3WwMnxr4uUyZ1id965w81s1CxX9+WZxc/Xj250YNyQ5clBcdwIIAfzFFgpMy tEZ+2RgThLfPPGT8UpeN2JerAZb/8BKGxf0Ri5BLv9RWZSM= urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Paris 7 - Denis Diderot Université de Paris 7 - Denis Diderot http://unknown.site.com Paillous francois.paillous@univ-paris-diderot.fr Barré sebastien.barre@univ-paris-diderot.fr univ-paris8.fr MIIEkjCCA3qgAwIBAgIQFBAawVXuvzc//mWK6T4dbjANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTEwMDkyMjAwMDAwMFoXDTEzMDkyMTIzNTk1OVowazELMAkGA1UE BhMCRlIxFDASBgNVBAcTC1NhaW50LURlbmlzMRswGQYDVQQKExJVTklWRVJTSVRF IFBBUklTIDgxDDAKBgNVBAsTA0RTSTEbMBkGA1UEAxMSaWRwLnVuaXYtcGFyaXM4 LmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5qNEpGdCTJWOof7P xmdOl/jii796b4aG95skVXyvnRzvj6Jpw4snYB6OZUuYoWQrlCBqoyzK5jAdaDq6 TBxcWJVQgIaq7f+PxJ2Op4k0rJ5t/J4JM7DjRuUceFD3IaUkWJvUzinLkIP8g3Yu okq8KpjFiabsTiLdhwn1xQU1CwnOp9fL9poOQIeBU7LIvNUfKgZORdUcz5d9ozwP l+hvICCeIhrjRfi4Ih3jUXBBwLsvVy3e/+BR/QyXQI08IgPQ9xN7SuH8eMGQtLDm nMe++VJuQvlMTDX7bjm2XEiwDE9a7B83yTHVsbsW82rm/wM8MmI5f7SksbzzJN3s 9OBPuQIDAQABo4IBZTCCAWEwHwYDVR0jBBgwFoAUDL2TaAzz3qujSWsrN1dH6pDj ue0wHQYDVR0OBBYEFDAK2RAfzT9HR199B/tcNE88ju7kMA4GA1UdDwEB/wQEAwIF oDAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAY BgNVHSAEETAPMA0GCysGAQQBsjEBAgIdMDoGA1UdHwQzMDEwL6AtoCuGKWh0dHA6 Ly9jcmwudGNzLnRlcmVuYS5vcmcvVEVSRU5BU1NMQ0EuY3JsMG0GCCsGAQUFBwEB BGEwXzA1BggrBgEFBQcwAoYpaHR0cDovL2NydC50Y3MudGVyZW5hLm9yZy9URVJF TkFTU0xDQS5jcnQwJgYIKwYBBQUHMAGGGmh0dHA6Ly9vY3NwLnRjcy50ZXJlbmEu b3JnMB0GA1UdEQQWMBSCEmlkcC51bml2LXBhcmlzOC5mcjANBgkqhkiG9w0BAQUF AAOCAQEAOnx8s8GW4BkQbuMXuipsucq9a2lvij9Owu5qNOGp8ZPx3tR4Bkx+QlnY udl0xzpCaNOfZQms8Qe0B+IiNh2Qi+WxIKCP/aFgG/x35mK4hLMnoWpJsQm0qKYu clNyE0vaUt2u2xSZ1PYrzSaXkpnMuSMziNjZDirOxkp/+wIuRoLBIdYOat1HwiwU y2WL96DRDtoSX+9eJkQSOjpV+o7bcUJqIGPMxg7F7Go8TftqalPPwFzLxmKZ0PS2 071t9i+dLa6IFo06qB805K8dW5CoOu+AFS1o/dH/2LXnKTsM24TvAFTVcW5t4Ygg wU71420WPbMqzekrCHmGCE1ulCNoBg== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Paris 8 - Vincennes Université de Paris 8 - Vincennes http://unknown.site.com David Varon david.varon@univ-paris8.fr dauphine.fr MIIDODCCAiCgAwIBAgIVAL8Gc+NXLeRBFscDZy7qdwGaAlMdMA0GCSqGSIb3DQEB BQUAMB4xHDAaBgNVBAMTE2lkcC5lbnQuZGF1cGhpbmUuZnIwHhcNMTEwMTI0MTgw ODU4WhcNMzEwMTI0MTgwODU4WjAeMRwwGgYDVQQDExNpZHAuZW50LmRhdXBoaW5l LmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuglXJZxWOmFxzj1u NPB0ExGFjXusnDSm+P3D4tWBIrmxVj1z9DK3S9nVUf4jDkSzslwhunSs1GBU0URt MDhQEkKCt9O30Fd4lIGjuH1DoFC/l1KF5plmIbEKkDrr3BMo7BtC+5VHYFm65Jgo AY+ZrBFFNj/CxYDx+oZ9gywwxuP2CGT59t9tRH0Sol4IzPJbcqDKBHGBsKrOajN9 UAjkDxGnx5PjiLVy1raywgE3qKSW9sFy4rukFs6B1TLt1xXSmIhPme9Q2PNmNLsf H31l0mO491gWP5F6dz6OXqtrubBWuqjtEZNLcHL3eduHeUybgXnkWF84BV0376l9 uDEdtwIDAQABo20wazBKBgNVHREEQzBBghNpZHAuZW50LmRhdXBoaW5lLmZyhipo dHRwczovL2lkcC5lbnQuZGF1cGhpbmUuZnIvaWRwL3NoaWJib2xldGgwHQYDVR0O BBYEFPaZs/R1MZFlljBBXfrcl1Z4jCNBMA0GCSqGSIb3DQEBBQUAA4IBAQBW53Ob BRvf38GLJi2TfLH/7HSL7cGlR2aNH2Gin7rumq2TNugtDlqxokdn5lZkr/5+s+Zu 51/n8bawgIyTQdaSHxd0l46o80xKtVfjiWBUm6e1O2sKJmuahbv+Y5sqMW1wr12u th+XQOM174MQMWNMrS7EERMUs9tiBY7qXQTbAPKs+rssU3gRz1APUrZ1MSbwZ3he uy4IfdhPh/g3Z0/Xy+hcDYyw+jN4FfjemHHZ/y9No3OYrLBGH5YxpY5oRfEh1E2C uZUMXJWvgnx3iOoxoAAORWf106TxENjuBE4MbxOK0r7MOSmXjPINJrMTLue5hzZs +M9PCzhKsLPRd3lD urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Paris 9 - Dauphine Université de Paris 9 - Dauphine http://unknown.site.com Lionel LENOBLE lionel.lenoble@dauphine.fr u-pec.fr MIIDHzCCAgegAwIBAgIUL8rXSh9z8lwFNYmrUxZVQXXbx1AwDQYJKoZIhvcNAQEF BQAwGDEWMBQGA1UEAxMNYXV0aC51LXBlYy5mcjAeFw0xMDA3MjMwOTI3MzJaFw0z MDA3MjMwOTI3MzJaMBgxFjAUBgNVBAMTDWF1dGgudS1wZWMuZnIwggEiMA0GCSqG SIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3CIB42PQo6cg8vYefYuJnhAadIkFr7TKV lldoy+uQ8qcyF8ElQdIvvYxkUN0N1RVC9xqez1EiPQ8yKoiH3e24JbaLWMYO5J/K BxFYHwRkrSoW150GkvzCP1l7BuQr9x3fEQPsZjk48uZMzguOJY2JyEneyidxYv7g +XgUrBDK+OerHBWRYXAezuguxn/zr+aOEXx3htVlUI3S6yXoEFr7URasktJ5qAKj O/DfX2rZcUKV9fvGS+dnq4a/kqWD8ycH6NUVu7IbLtCgHLp0BQg6QPkM2Z+AskJv gqHxqhpP8zzD5HU5T3aV+MQ9XIg7l3vlebhp6bF4mlM+K8r9noIvAgMBAAGjYTBf MD4GA1UdEQQ3MDWCDWF1dGgudS1wZWMuZnKGJGh0dHBzOi8vYXV0aC51LXBlYy5m ci9pZHAvc2hpYmJvbGV0aDAdBgNVHQ4EFgQUx0iOH60s6SQCa/NwoN7hZBocV8Iw DQYJKoZIhvcNAQEFBQADggEBAJvL8HOgBpnBhBJJwuM0fWUjxDDN8eoF4kL59Vlz maqV9N3mG3UDGBTcT6jjJ/zO7Pb53PJ69Adj7+d8PSyfSs2y2BC+YDOOzWfgrx3m DVmVBV/uKJfqRq4rMXsNekVyTmRiVojF3Qzeic6HbwTWMbLEmDxWgAVKOSg0Hu1j CANZRHLjo7NC6KWC0Hh0tXrenjG9yvVUxLOE7nnzMiQth4gMlRuLMsWuG5c12RZ7 una3UJI0MM77yR3S40ltFU6EKnQi3HO3TsP2QNWtkyuBaAhBzI8MuL/P3RPpUTca +m1oLcwCBV+imJ+QVPGoY154Eg5BcWrcB2wSC+6+CCPRZks= urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Paris Est Créteil - UPEC Université de Paris Est Créteil - UPEC http://unknown.site.com Josiane PHILAKHAM josiane.philakham@u-pec.fr Bastien SORET bastien.soret@u-pec.fr univ-paris4.fr paris-sorbonne.fr MIIEfjCCA2agAwIBAgIQDoytgyQXDrxQwdffQSgBNTANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTEwMDIxOTAwMDAwMFoXDTEzMDIxODIzNTk1OVowVzELMAkGA1UE BhMCRlIxDjAMBgNVBAcTBVBBUklTMRswGQYDVQQKExJVTklWRVJTSVRFIFBBUklT IDQxGzAZBgNVBAMTEmlkcC51bml2LXBhcmlzNC5mcjCCASIwDQYJKoZIhvcNAQEB BQADggEPADCCAQoCggEBAKqttSIJz1BQxcIHy3dNdnJd+0iaQlWU31Y2zsGckNjR YbW4lwMq5xcnqHwrgUp8PiaFBy6/jioXDpHs5ByrrLLE052hfeEB0W5AO5mN7Yqd URorS4LHo9JsUFrULl0haEF6FFoDD6ABR7djwerDccIebVoICvj9W1ypN8vPmo/P qaXZ0QKcJJjmbuxYxt+JnYQyQhqxZXgbGfelyclhfrCNZsjFmoLL2hvpIINAv3Al 7xFBv1DlKpRImWAjHkqZtWzyGHNU3EryVBrjeoxlRQfVjCMqTnZ5O57bTZc7TK5Y eMlvB0syEnzC68HJ02baPgf1T94S2gD3nvFjfcNcJu8CAwEAAaOCAWUwggFhMB8G A1UdIwQYMBaAFAy9k2gM896ro0lrKzdXR+qQ47ntMB0GA1UdDgQWBBQ+ho3P8U/1 4zqg7ukFkfl9eCelZDAOBgNVHQ8BAf8EBAMCBaAwDAYDVR0TAQH/BAIwADAdBgNV HSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwGAYDVR0gBBEwDzANBgsrBgEEAbIx AQICHTA6BgNVHR8EMzAxMC+gLaArhilodHRwOi8vY3JsLnRjcy50ZXJlbmEub3Jn L1RFUkVOQVNTTENBLmNybDBtBggrBgEFBQcBAQRhMF8wNQYIKwYBBQUHMAKGKWh0 dHA6Ly9jcnQudGNzLnRlcmVuYS5vcmcvVEVSRU5BU1NMQ0EuY3J0MCYGCCsGAQUF BzABhhpodHRwOi8vb2NzcC50Y3MudGVyZW5hLm9yZzAdBgNVHREEFjAUghJpZHAu dW5pdi1wYXJpczQuZnIwDQYJKoZIhvcNAQEFBQADggEBAHwUYz+yFi2FBkcFN3Km 2qfIfiBsLFWB6IfkmQ67R1grVxUSlRIIyJ7L4IWrnzlSfua51Z8UJPvcu69n9eBX qZziEXS4ZAlDKF7w3eLV8lIy3PX35/k6MQeju9XutriZXn/d6j7tN3sn7hYp+2i3 +FffOhUyk30j9dUG3P17NpJBQ8vWjily3GNDwcjkZhWnoNLy23BssXqN7vkrc/8k LsZ2ycJNxU+3DFaLplq4s2S7llycn+QoR2FGFQYbRxEIkEExzPEjcoHxO9Z9NWiX mWTayZwzt0iJJtgUTa8Lr+vSHx2pY70ZHgzsmbwKd1gEn1+u7ltx/5nUar5lRokB bz0= urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient univ-paris4.fr paris-sorbonne.fr MIIEfjCCA2agAwIBAgIQDoytgyQXDrxQwdffQSgBNTANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTEwMDIxOTAwMDAwMFoXDTEzMDIxODIzNTk1OVowVzELMAkGA1UE BhMCRlIxDjAMBgNVBAcTBVBBUklTMRswGQYDVQQKExJVTklWRVJTSVRFIFBBUklT IDQxGzAZBgNVBAMTEmlkcC51bml2LXBhcmlzNC5mcjCCASIwDQYJKoZIhvcNAQEB BQADggEPADCCAQoCggEBAKqttSIJz1BQxcIHy3dNdnJd+0iaQlWU31Y2zsGckNjR YbW4lwMq5xcnqHwrgUp8PiaFBy6/jioXDpHs5ByrrLLE052hfeEB0W5AO5mN7Yqd URorS4LHo9JsUFrULl0haEF6FFoDD6ABR7djwerDccIebVoICvj9W1ypN8vPmo/P qaXZ0QKcJJjmbuxYxt+JnYQyQhqxZXgbGfelyclhfrCNZsjFmoLL2hvpIINAv3Al 7xFBv1DlKpRImWAjHkqZtWzyGHNU3EryVBrjeoxlRQfVjCMqTnZ5O57bTZc7TK5Y eMlvB0syEnzC68HJ02baPgf1T94S2gD3nvFjfcNcJu8CAwEAAaOCAWUwggFhMB8G A1UdIwQYMBaAFAy9k2gM896ro0lrKzdXR+qQ47ntMB0GA1UdDgQWBBQ+ho3P8U/1 4zqg7ukFkfl9eCelZDAOBgNVHQ8BAf8EBAMCBaAwDAYDVR0TAQH/BAIwADAdBgNV HSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwGAYDVR0gBBEwDzANBgsrBgEEAbIx AQICHTA6BgNVHR8EMzAxMC+gLaArhilodHRwOi8vY3JsLnRjcy50ZXJlbmEub3Jn L1RFUkVOQVNTTENBLmNybDBtBggrBgEFBQcBAQRhMF8wNQYIKwYBBQUHMAKGKWh0 dHA6Ly9jcnQudGNzLnRlcmVuYS5vcmcvVEVSRU5BU1NMQ0EuY3J0MCYGCCsGAQUF BzABhhpodHRwOi8vb2NzcC50Y3MudGVyZW5hLm9yZzAdBgNVHREEFjAUghJpZHAu dW5pdi1wYXJpczQuZnIwDQYJKoZIhvcNAQEFBQADggEBAHwUYz+yFi2FBkcFN3Km 2qfIfiBsLFWB6IfkmQ67R1grVxUSlRIIyJ7L4IWrnzlSfua51Z8UJPvcu69n9eBX qZziEXS4ZAlDKF7w3eLV8lIy3PX35/k6MQeju9XutriZXn/d6j7tN3sn7hYp+2i3 +FffOhUyk30j9dUG3P17NpJBQ8vWjily3GNDwcjkZhWnoNLy23BssXqN7vkrc/8k LsZ2ycJNxU+3DFaLplq4s2S7llycn+QoR2FGFQYbRxEIkEExzPEjcoHxO9Z9NWiX mWTayZwzt0iJJtgUTa8Lr+vSHx2pY70ZHgzsmbwKd1gEn1+u7ltx/5nUar5lRokB bz0= urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Paris IV - Sorbonne Université de Paris IV - Sorbonne http://unknown.site.com MARIR Brahim brahim.marir@paris-sorbonne.fr univ-mlv.fr MIIDRDCCAiygAwIBAgIVAOsVp3GQKz6Xcx9OtFvkM7amukrmMA0GCSqGSIb3DQEB BQUAMCExHzAdBgNVBAMTFmZlZGVyYXRpb24udW5pdi1tbHYuZnIwHhcNMTAwMzE4 MTM1NzI4WhcNMzAwMzE4MTM1NzI4WjAhMR8wHQYDVQQDExZmZWRlcmF0aW9uLnVu aXYtbWx2LmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw7smeM80 /nFD4r8hm7CNSCob2BCKaFfxmpMzXH1KGNoXY/rUuHxq+20rBf9ZIBmz5X3hKPPx 6uoyv0cShRmzSF4RRVIZFwHTLcg7oMgez+W8sGSvVpGfEebBrOPPxMbxkeT7uY4I W+5HshRJmateBTOFFMYEygpwmjVWyLBQWqRIuMzNkQ2ZwQGe4uWNw77jxiQ/cUsY 0a9YksmMXYaXmhujiC0QBTT9HdzoOXUlUFGIjc4fLajg9Yo7xB+rIsgdR3hFxKJp 3UpzXh+4WNEys7nAQS0qeGUAR7ZuYjZ1KdsiiwRgPmO++hEJ60djYxfNHSlDKzPA 7P5Ouh2ajGkGKwIDAQABo3MwcTBQBgNVHREESTBHghZmZWRlcmF0aW9uLnVuaXYt bWx2LmZyhi1odHRwczovL2ZlZGVyYXRpb24udW5pdi1tbHYuZnIvaWRwL3NoaWJi b2xldGgwHQYDVR0OBBYEFD201Ic56vhyTeggEA0bzSKkj2EAMA0GCSqGSIb3DQEB BQUAA4IBAQANKnR/4Bvyl462Mpzvar6XTsJefw+XT4S3NjMUT9ixPsIje2+9Z7dm Fj+ubhqEktuQlNdH3EL2orBlLuJt6+pgN+Vsq596rdTLkH0qwHE2VNzGdfGt290o 4Zru/FkS/ZLZjlFsSHr4bWzgQxFBW8Ih/hhnHUfJZBjoyptNEnv15LFZdArcL5mz Kf3CLTRqsyrUlR+i+B7N3hU5i1FeJTewO7ka4fmRYqQwAKlRSq6BYq9QOsOMRh8D JVmaRogOCCkaDbZGYVV24+YY8TQSWTsvzinv92xn8KK3BNvWeF6WpZtYx5DfksZp oQzEfcImKBSTJmTMp1ALyOFK0Vo8V3wV urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Paris-Est Marne-la-Vallée Université de Paris-Est Marne-la-Vallée http://unknown.site.com CVIJETIC Dragan Dragan.Cvijetic@univ-mlv.fr Ouabi Ykhlef Ykhlef.Ouabi@univ-mlv.fr u-psud.fr MIIDIDCCAgigAwIBAgIVAIUJk6EXza7L7QSpNoIN24P1I8rlMA0GCSqGSIb3DQEB BQUAMBgxFjAUBgNVBAMTDXNzby51LXBzdWQuZnIwHhcNMTAwMjA4MTAwOTA0WhcN MzAwMjA4MTAwOTA0WjAYMRYwFAYDVQQDEw1zc28udS1wc3VkLmZyMIIBIjANBgkq hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAroxa30hNBV4PaO3ESgOkEjFPCtg1MaOo L55D4a/hiuuuv4Lfa25MNaiAmUx26o7x575VkYv6UJb9BQmXGUZPwHH0EQDXw/ZZ LGuW8M9K7L1ZYSLfjFVYWBY1jGsUhQjsEkG+G2zpmluUnWh5WUS6Px8wCS+1KbHP HXyR5l/WZoNnH/7A1GLMRokGIt5ZTYDLw9hD3JA9oACCP8c3PgNrZRnQc4kw1/Rl GKAncAfde8U0kv6BhCcjr7M2LDEBVP+gC3wEIO+UOAuSbRpD7ECSJVAc8GqR20b4 5FRFPgKptk9dtoxpyyA3wyPp6DHHiywG24B+GF4xEMv1yUczX1weIQIDAQABo2Ew XzA+BgNVHREENzA1gg1zc28udS1wc3VkLmZyhiRodHRwczovL3Nzby51LXBzdWQu ZnIvaWRwL3NoaWJib2xldGgwHQYDVR0OBBYEFAhfKZQU4qijehvftE595ElwwPE5 MA0GCSqGSIb3DQEBBQUAA4IBAQCjeft61T2pXsTQ+7s/q9nCI3jGTtSjRcA2Pjkx RmlmfmCoJfR1U0eG0bZKjjydBoezTGr5WRGpGPGq9Ta7q5t3tmSFTowq60ZKJwSh CpXXvrIi9lRHMxoTGC2XyxgP9QmzIG/jR/er1zOCbAhTJBiBThdGFCnBwlPmZDIk VwYSV7zlyGtzh7cSldKwIkvifFOh9Op376MhuPAmFqUnfEJGzJbyttrolQ2I4oUw wKiyOu3VYdTiu+FcCFVdKWOOIqV+v/8cWHlaUTS1+RC+exL6305K8Kkv5xhpyxCR QUfLusw8PKdnTW45JL7EEdO48zPq2va8ihPE82nrZVK0wt/q urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Paris-Sud 11 Université de Paris-Sud 11 http://unknown.site.com Laubenberger Stéphane stephane.laubenberger@u-psud.fr Lambert Dominique dominique.lambert@u-psud.fr MIIELDCCAxSgAwIBAgILAQAAAAABG0UB5rkwDQYJKoZIhvcNAQEFBQAwXzELMAkG A1UEBhMCQkUxEzARBgNVBAoTCkN5YmVydHJ1c3QxFzAVBgNVBAsTDkVkdWNhdGlv bmFsIENBMSIwIAYDVQQDExlDeWJlcnRydXN0IEVkdWNhdGlvbmFsIENBMB4XDTA4 MDcyMTA5NDQ1MFoXDTExMDcyMTA5NDQ1MFowWzELMAkGA1UEBhMCRlIxMTAvBgNV BAoTKFVuaXZlcnNpdGUgZGUgUGF1IGV0IGRlcyBQYXlzIGRlIGwnQWRvdXIxGTAX BgNVBAMTEHdpa2kudW5pdi1wYXUuZnIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ AoGBANBi+MivKXXNJIaFdM8Izcy/pUFcCEL1D1JhPfGV60d4jZoUFvgfKtuzqYkQ X1v12T6HR/Q8r9Lz3OskMWZifM/p0QmtfbQp+25jVKT65D3VZImT+TlYEYIT876j wWMYi0rseYQ0c9yR51icdxDwkGKZ0sW4YxtNOQpMD+YHO4N3AgMBAAGjggFvMIIB azBQBgNVHSAESTBHMEUGByqGSLE+AQAwOjA4BggrBgEFBQcCARYsaHR0cDovL3d3 dy5nbG9iYWxzaWduLm5ldC9yZXBvc2l0b3J5L2Nwcy5jZm0wDgYDVR0PAQH/BAQD AgWgMB8GA1UdIwQYMBaAFGVloz3XOxGjCgclN8lCSlt2d1DhMB0GA1UdDgQWBBQb 9DFDd1YEQ8C6SffyycAn/yT9YDA6BgNVHR8EMzAxMC+gLaArhilodHRwOi8vY3Js Lmdsb2JhbHNpZ24ubmV0L2VkdWNhdGlvbmFsLmNybDBPBggrBgEFBQcBAQRDMEEw PwYIKwYBBQUHMAKGM2h0dHA6Ly9zZWN1cmUuZ2xvYmFsc2lnbi5uZXQvY2FjZXJ0 L2VkdWNhdGlvbmFsLmNydDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIw GwYDVR0RBBQwEoIQd2lraS51bml2LXBhdS5mcjANBgkqhkiG9w0BAQUFAAOCAQEA CfzxvlaXkCSNKwz7oITxoIhSq42AJrRb+GzkgYCUbF59RAYXeqfiUrxjWOeJXRYS gNqbCltcsv59+LNrDhjbZGlQmv+eztZqOwy8p1NlPKz2IEhcN+FI9sxLitAwzsfp 9MuBDLYp1DAi0stNclPw/hQNV1AT9wJtpATOnEz1N1XAm+pVAAg6laokQHToTOpf CbFe6VfYpOgHpf5hyhGH+A9RFRB2M8TqsJ5CJojPf/VKhHtV9XL/m6g2da9f1V7g ClO6SAIsWtMAJgTLoNYVZIEt8PvO+/skdSfSHYxTosbgI4ge6d5MwntDjLBXMzB5 RNhVMf9CkA84GBQnmoj3uw== MIIELDCCAxSgAwIBAgILAQAAAAABG0UB5rkwDQYJKoZIhvcNAQEFBQAwXzELMAkG A1UEBhMCQkUxEzARBgNVBAoTCkN5YmVydHJ1c3QxFzAVBgNVBAsTDkVkdWNhdGlv bmFsIENBMSIwIAYDVQQDExlDeWJlcnRydXN0IEVkdWNhdGlvbmFsIENBMB4XDTA4 MDcyMTA5NDQ1MFoXDTExMDcyMTA5NDQ1MFowWzELMAkGA1UEBhMCRlIxMTAvBgNV BAoTKFVuaXZlcnNpdGUgZGUgUGF1IGV0IGRlcyBQYXlzIGRlIGwnQWRvdXIxGTAX BgNVBAMTEHdpa2kudW5pdi1wYXUuZnIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ AoGBANBi+MivKXXNJIaFdM8Izcy/pUFcCEL1D1JhPfGV60d4jZoUFvgfKtuzqYkQ X1v12T6HR/Q8r9Lz3OskMWZifM/p0QmtfbQp+25jVKT65D3VZImT+TlYEYIT876j wWMYi0rseYQ0c9yR51icdxDwkGKZ0sW4YxtNOQpMD+YHO4N3AgMBAAGjggFvMIIB azBQBgNVHSAESTBHMEUGByqGSLE+AQAwOjA4BggrBgEFBQcCARYsaHR0cDovL3d3 dy5nbG9iYWxzaWduLm5ldC9yZXBvc2l0b3J5L2Nwcy5jZm0wDgYDVR0PAQH/BAQD AgWgMB8GA1UdIwQYMBaAFGVloz3XOxGjCgclN8lCSlt2d1DhMB0GA1UdDgQWBBQb 9DFDd1YEQ8C6SffyycAn/yT9YDA6BgNVHR8EMzAxMC+gLaArhilodHRwOi8vY3Js Lmdsb2JhbHNpZ24ubmV0L2VkdWNhdGlvbmFsLmNybDBPBggrBgEFBQcBAQRDMEEw PwYIKwYBBQUHMAKGM2h0dHA6Ly9zZWN1cmUuZ2xvYmFsc2lnbi5uZXQvY2FjZXJ0 L2VkdWNhdGlvbmFsLmNydDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIw GwYDVR0RBBQwEoIQd2lraS51bml2LXBhdS5mcjANBgkqhkiG9w0BAQUFAAOCAQEA CfzxvlaXkCSNKwz7oITxoIhSq42AJrRb+GzkgYCUbF59RAYXeqfiUrxjWOeJXRYS gNqbCltcsv59+LNrDhjbZGlQmv+eztZqOwy8p1NlPKz2IEhcN+FI9sxLitAwzsfp 9MuBDLYp1DAi0stNclPw/hQNV1AT9wJtpATOnEz1N1XAm+pVAAg6laokQHToTOpf CbFe6VfYpOgHpf5hyhGH+A9RFRB2M8TqsJ5CJojPf/VKhHtV9XL/m6g2da9f1V7g ClO6SAIsWtMAJgTLoNYVZIEt8PvO+/skdSfSHYxTosbgI4ge6d5MwntDjLBXMzB5 RNhVMf9CkA84GBQnmoj3uw== urn:mace:shibboleth:1.0:nameIdentifier Anthony Hinsinger anthony.hinsinger@univ-pau.fr MIIELDCCAxSgAwIBAgILAQAAAAABG0UB5rkwDQYJKoZIhvcNAQEFBQAwXzELMAkG A1UEBhMCQkUxEzARBgNVBAoTCkN5YmVydHJ1c3QxFzAVBgNVBAsTDkVkdWNhdGlv bmFsIENBMSIwIAYDVQQDExlDeWJlcnRydXN0IEVkdWNhdGlvbmFsIENBMB4XDTA4 MDcyMTA5NDQ1MFoXDTExMDcyMTA5NDQ1MFowWzELMAkGA1UEBhMCRlIxMTAvBgNV BAoTKFVuaXZlcnNpdGUgZGUgUGF1IGV0IGRlcyBQYXlzIGRlIGwnQWRvdXIxGTAX BgNVBAMTEHdpa2kudW5pdi1wYXUuZnIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ AoGBANBi+MivKXXNJIaFdM8Izcy/pUFcCEL1D1JhPfGV60d4jZoUFvgfKtuzqYkQ X1v12T6HR/Q8r9Lz3OskMWZifM/p0QmtfbQp+25jVKT65D3VZImT+TlYEYIT876j wWMYi0rseYQ0c9yR51icdxDwkGKZ0sW4YxtNOQpMD+YHO4N3AgMBAAGjggFvMIIB azBQBgNVHSAESTBHMEUGByqGSLE+AQAwOjA4BggrBgEFBQcCARYsaHR0cDovL3d3 dy5nbG9iYWxzaWduLm5ldC9yZXBvc2l0b3J5L2Nwcy5jZm0wDgYDVR0PAQH/BAQD AgWgMB8GA1UdIwQYMBaAFGVloz3XOxGjCgclN8lCSlt2d1DhMB0GA1UdDgQWBBQb 9DFDd1YEQ8C6SffyycAn/yT9YDA6BgNVHR8EMzAxMC+gLaArhilodHRwOi8vY3Js Lmdsb2JhbHNpZ24ubmV0L2VkdWNhdGlvbmFsLmNybDBPBggrBgEFBQcBAQRDMEEw PwYIKwYBBQUHMAKGM2h0dHA6Ly9zZWN1cmUuZ2xvYmFsc2lnbi5uZXQvY2FjZXJ0 L2VkdWNhdGlvbmFsLmNydDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIw GwYDVR0RBBQwEoIQd2lraS51bml2LXBhdS5mcjANBgkqhkiG9w0BAQUFAAOCAQEA CfzxvlaXkCSNKwz7oITxoIhSq42AJrRb+GzkgYCUbF59RAYXeqfiUrxjWOeJXRYS gNqbCltcsv59+LNrDhjbZGlQmv+eztZqOwy8p1NlPKz2IEhcN+FI9sxLitAwzsfp 9MuBDLYp1DAi0stNclPw/hQNV1AT9wJtpATOnEz1N1XAm+pVAAg6laokQHToTOpf CbFe6VfYpOgHpf5hyhGH+A9RFRB2M8TqsJ5CJojPf/VKhHtV9XL/m6g2da9f1V7g ClO6SAIsWtMAJgTLoNYVZIEt8PvO+/skdSfSHYxTosbgI4ge6d5MwntDjLBXMzB5 RNhVMf9CkA84GBQnmoj3uw== MIIELDCCAxSgAwIBAgILAQAAAAABG0UB5rkwDQYJKoZIhvcNAQEFBQAwXzELMAkG A1UEBhMCQkUxEzARBgNVBAoTCkN5YmVydHJ1c3QxFzAVBgNVBAsTDkVkdWNhdGlv bmFsIENBMSIwIAYDVQQDExlDeWJlcnRydXN0IEVkdWNhdGlvbmFsIENBMB4XDTA4 MDcyMTA5NDQ1MFoXDTExMDcyMTA5NDQ1MFowWzELMAkGA1UEBhMCRlIxMTAvBgNV BAoTKFVuaXZlcnNpdGUgZGUgUGF1IGV0IGRlcyBQYXlzIGRlIGwnQWRvdXIxGTAX BgNVBAMTEHdpa2kudW5pdi1wYXUuZnIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ AoGBANBi+MivKXXNJIaFdM8Izcy/pUFcCEL1D1JhPfGV60d4jZoUFvgfKtuzqYkQ X1v12T6HR/Q8r9Lz3OskMWZifM/p0QmtfbQp+25jVKT65D3VZImT+TlYEYIT876j wWMYi0rseYQ0c9yR51icdxDwkGKZ0sW4YxtNOQpMD+YHO4N3AgMBAAGjggFvMIIB azBQBgNVHSAESTBHMEUGByqGSLE+AQAwOjA4BggrBgEFBQcCARYsaHR0cDovL3d3 dy5nbG9iYWxzaWduLm5ldC9yZXBvc2l0b3J5L2Nwcy5jZm0wDgYDVR0PAQH/BAQD AgWgMB8GA1UdIwQYMBaAFGVloz3XOxGjCgclN8lCSlt2d1DhMB0GA1UdDgQWBBQb 9DFDd1YEQ8C6SffyycAn/yT9YDA6BgNVHR8EMzAxMC+gLaArhilodHRwOi8vY3Js Lmdsb2JhbHNpZ24ubmV0L2VkdWNhdGlvbmFsLmNybDBPBggrBgEFBQcBAQRDMEEw PwYIKwYBBQUHMAKGM2h0dHA6Ly9zZWN1cmUuZ2xvYmFsc2lnbi5uZXQvY2FjZXJ0 L2VkdWNhdGlvbmFsLmNydDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIw GwYDVR0RBBQwEoIQd2lraS51bml2LXBhdS5mcjANBgkqhkiG9w0BAQUFAAOCAQEA CfzxvlaXkCSNKwz7oITxoIhSq42AJrRb+GzkgYCUbF59RAYXeqfiUrxjWOeJXRYS gNqbCltcsv59+LNrDhjbZGlQmv+eztZqOwy8p1NlPKz2IEhcN+FI9sxLitAwzsfp 9MuBDLYp1DAi0stNclPw/hQNV1AT9wJtpATOnEz1N1XAm+pVAAg6laokQHToTOpf CbFe6VfYpOgHpf5hyhGH+A9RFRB2M8TqsJ5CJojPf/VKhHtV9XL/m6g2da9f1V7g ClO6SAIsWtMAJgTLoNYVZIEt8PvO+/skdSfSHYxTosbgI4ge6d5MwntDjLBXMzB5 RNhVMf9CkA84GBQnmoj3uw== urn:mace:shibboleth:1.0:nameIdentifier Beheregaray Michel fed-admin@univ-pau.fr Hinsinger Anthony anthony.hinsinger@univ-pau.fr univ-pau.fr MIIEnjCCA4agAwIBAgIRAJA9ZFuHhuGQAAnTwzMko8YwDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0xMDAyMjMwMDAwMDBaFw0xMzAyMjIyMzU5NTlaMHgxCzAJBgNV BAYTAkZSMQwwCgYDVQQHEwNQYXUxMjAwBgNVBAoMKVVuaXZlcnNpdMOpIGRlIFBh dSBldCBkZXMgcGF5cyBkZSBsJ0Fkb3VyMQwwCgYDVQQLEwNDUkkxGTAXBgNVBAMT EGF1dGgudW5pdi1wYXUuZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB AQCc0Iytl3JZMw09sJt4OdWO6wBFQ/ndJCMJrMAvJuGHN/gbS8ji6DzemNlLWmRx 5uA3WOHqKpFm1lY0IJcL7uP5/nhZ2EBJ7nYHlZjwM+M+TIHaVgRZVtEBCuiuCvc1 6DG1oKitutodC1+4I0P0uv0LjLl6/YmmNdK36kwHxbDJh0qsu5/IvBj1fY5Jt+vv qZbJm++37T/tfquivK9BzVdmMmTDhU5BgaDH8MGJjpmm3w37/FPtAH9/Ec3fYCpw uLWJCGPWBFTFS/YSObTOQw0e2MywPvH/jlhIgRrQ4bdSsgNwmLagj9EDo1WYxsPx 9Uq8ew/dgP8sU6H4zl/3RoHhAgMBAAGjggFjMIIBXzAfBgNVHSMEGDAWgBQMvZNo DPPeq6NJays3V0fqkOO57TAdBgNVHQ4EFgQUx5kwP4wSMc7IcwLTrxdQRpvDTYow DgYDVR0PAQH/BAQDAgWgMAwGA1UdEwEB/wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUH AwEGCCsGAQUFBwMCMBgGA1UdIAQRMA8wDQYLKwYBBAGyMQECAh0wOgYDVR0fBDMw MTAvoC2gK4YpaHR0cDovL2NybC50Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xDQS5j cmwwbQYIKwYBBQUHAQEEYTBfMDUGCCsGAQUFBzAChilodHRwOi8vY3J0LnRjcy50 ZXJlbmEub3JnL1RFUkVOQVNTTENBLmNydDAmBggrBgEFBQcwAYYaaHR0cDovL29j c3AudGNzLnRlcmVuYS5vcmcwGwYDVR0RBBQwEoIQYXV0aC51bml2LXBhdS5mcjAN BgkqhkiG9w0BAQUFAAOCAQEAgo8xHmEk2y4YQ3B9GcnRFnivkiqplDUUPthv+ah3 2uTS2bLMSbndKCdYizA3P+1FfpEEh+JT1i7ml/wVmgziIm5pvkdzfvIqq+LqAmxr iE7GZGGnFYdt2SXyF5H5wPavr+PiVVGSy6fyi5eNfwlM8rCATrmP9592P2Xs2+af goQOsaR4PJhYaAz2W0U2sy9Za+gQOhNiKlPLs2A1c4pzHKBmcoQA4HK4exJEt/7F PNEVGaLma2kStlOZ5ATX1WPjyMDTq4Aab+SfzX4GWoqG/WfiGh79fv4VkLRUg9Q+ ZiclFSu4G5swGiUE+hKFwuADVfSHvSzLlGQmMGR3lxJTCw== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Pau et des Pays de l'Adour Université de Pau et des Pays de l'Adour http://unknown.site.com Beheregaray Michel fed-admin@univ-pau.fr Hinsinger Anthony fed-admin@univ-pau.fr univ-perp.fr MIIDSzCCAjOgAwIBAgIULLAo5s+4ROzy5UZMrAIGbK8dOywwDQYJKoZIhvcNAQEF BQAwIzEhMB8GA1UEAxMYZmVkZXJhdGlvbjIudW5pdi1wZXJwLmZyMB4XDTEwMDYw NzE1NDAxMFoXDTMwMDYwNzE1NDAxMFowIzEhMB8GA1UEAxMYZmVkZXJhdGlvbjIu dW5pdi1wZXJwLmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4Q5K a1AqPThLeQFDdXi+ebPZnmmv5LdDpm+wEUmZYEK+gPyKwsnCOqueO4bf1YJHWRMq 8hOi16t3RzW85OTuFbkTNfoTSC94Mmq1xM9OiYwYdEhzkSE17k7gngrJhBD/g5gd nCENIs1cPJrmuZOPUstg3CDKC10hBHN8p2cBcpqAkbSJJfSWpJus/6mwpL8aC/Sy P48MZFkOGfonwtZApKq5LogC9FdA3D+iUK2gX6Gmx87VVdblMz4gy1bMExGlpJh1 sLZXzFH6lytiwEki3TQ+FVeARP9YEuMjO/MmlsdyTQ59X+InZRneSw+AX707wwbs CMeQn65kV9+25CostQIDAQABo3cwdTBUBgNVHREETTBLghhmZWRlcmF0aW9uMi51 bml2LXBlcnAuZnKGL2h0dHBzOi8vZmVkZXJhdGlvbjIudW5pdi1wZXJwLmZyL2lk cC9zaGliYm9sZXRoMB0GA1UdDgQWBBR+rUoTfBcWEnKttfZNC2Ij1kszCDANBgkq hkiG9w0BAQUFAAOCAQEAhaevpVw7aySNgUnq2UphJVWGJCnewO9dFjK2puynLYYS 0N4Kml/TwsPMMqxWYYM59QKnExmXxQiEqaXARBMwGxAFsvIMbhoreXuVCkBPuGNM ROvYP6oKNTBWLFZim/NFM0I50TUdhxI9dVgzJfysQZAQ3OAf0u8yBWt8ECqjIAPj cK8jIB+jY0Y2xRYsOyjG2ITF7C8QZRl1/N0xLSINbHzPNHZMvxBdJKhiXXbnOYnz fBD7fiQYaQ/ngsB/aj4MOLHzcFDOyxUXTf5iO7tXX+zioMpLZ4TWPz4VQRoh9V6X GRhvA308h9KMK3qNV6NKcFJeTNJP1BepoG51kFLhSw== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Perpignan Via Domitia Université de Perpignan Via Domitia http://unknown.site.com Stéphane Branchoux federation@univ-perp.fr Rosan Fiscal federation@univ-perp.fr univ-poitiers.fr etu.univ-poitiers.fr MIIEkDCCA3igAwIBAgIQDxpSxURbV8Ia3vp3/tBmOTANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTEwMDIyNTAwMDAwMFoXDTEzMDIyNDIzNTk1OVowZDELMAkGA1UE BhMCRlIxETAPBgNVBAcTCFBvaXRpZXJzMSAwHgYDVQQKDBdVbml2ZXJzaXTDqSBk ZSBQb2l0aWVyczEgMB4GA1UEAxMXc2hpYmJvLnVuaXYtcG9pdGllcnMuZnIwggEi MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD4S0xCC2eVI3VvMBFsqqmwigtP FPFoP3CwIIZCDp7kdrBizkaBgP5krmDcWxpZJiUORMjuJXvqlo9ygOpt5IPefA8Y nnYz3M/jYUThxdZ/f3kFNQBGauGUoFFKn1UEACt7I1Q5fQPSOaYVZWCjB5byy4rs 27f64NfxZMSqD1siruHrEtNE74T67EQkuIcH2D7kYIBF9F8jV3dY7DhgyC7kxtCL dzDfkriUn8FFndwJ/o8NDzhXcshrKyRdbIxpVBJHn5vywDXwjrqtGQBbTWv91JJa kQZ8Easn0wcrY3huEiwXThMk9giK8WQ/NGEx+z3B71tGGHB+mQKv9YuUVAnZAgMB AAGjggFqMIIBZjAfBgNVHSMEGDAWgBQMvZNoDPPeq6NJays3V0fqkOO57TAdBgNV HQ4EFgQUWEcJew1PBoxnhF2py/HCDSxCpVwwDgYDVR0PAQH/BAQDAgWgMAwGA1Ud EwEB/wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBgGA1UdIAQR MA8wDQYLKwYBBAGyMQECAh0wOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC50 Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcmwwbQYIKwYBBQUHAQEEYTBfMDUG CCsGAQUFBzAChilodHRwOi8vY3J0LnRjcy50ZXJlbmEub3JnL1RFUkVOQVNTTENB LmNydDAmBggrBgEFBQcwAYYaaHR0cDovL29jc3AudGNzLnRlcmVuYS5vcmcwIgYD VR0RBBswGYIXc2hpYmJvLnVuaXYtcG9pdGllcnMuZnIwDQYJKoZIhvcNAQEFBQAD ggEBAERMz3wHSxz3bfKk4SX7HLgSCz4Drn3YQQ5T+5MUfYwXw848HVQqpS16qWbf GofrvLvXat12I4IxPTv1SzQEFThNMDcZoHQ5LFbf5lSzGfCot5tifTZ+tjIYNtIJ gSPcfQ/FjANy5Q8IgS0wvlM4WE4gvveXX6SZwAJ8UWz5FjL6FzsR9l0Cgsj3BcYc 2IsiXqzJJDqSXwqsPY3UgYa5oMJY/xrHMyvTOA2XOhRN0WW+wM5aydOC6/FU7kfY crsguf6iboN9+WrUgLAtF63SnSuyMIlIzUba+MLE7ty73V9QCqPXQtH2zuSs2jqb VrPxydAqV9UJdjJN6bPWZDZb64U= MIIETDCCAzSgAwIBAgILAQAAAAABEpVhh1gwDQYJKoZIhvcNAQEFBQAwXzELMAkG A1UEBhMCQkUxEzARBgNVBAoTCkN5YmVydHJ1c3QxFzAVBgNVBAsTDkVkdWNhdGlv bmFsIENBMSIwIAYDVQQDExlDeWJlcnRydXN0IEVkdWNhdGlvbmFsIENBMB4XDTA3 MDUxNjE0NTM1NVoXDTEwMDUxNjE0NTM1NVowdDELMAkGA1UEBhMCRlIxQzBBBgNV BAoTOlVuaXZlcnNpdGUgZGUgUG9pdGllcnMsIENlbnRyZSBkJ0luZm9ybWF0aXF1 ZSBldCBkZSBDYWxjdWwxIDAeBgNVBAMTF3NoaWJiby51bml2LXBvaXRpZXJzLmZy MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC9SpXvDgE5NPJ+UFUJGUQ7gijH 6gHzBRE8ObENbCQWAOEN6FWH0pDE+qNeqhMWFADvdzh3S30DOsKt2Q4pH5hZ9KUs T4blgLJ5rsE1s/+ioB/bNjkTVtuEeUfR0DYlBoekj6XiLxNVWTw8bMZV+CFWDCPh XCzuhVnvgXjlPcLqZQIDAQABo4IBdjCCAXIwUAYDVR0gBEkwRzBFBgcqhkixPgEA MDowOAYIKwYBBQUHAgEWLGh0dHA6Ly93d3cuZ2xvYmFsc2lnbi5uZXQvcmVwb3Np dG9yeS9jcHMuY2ZtMA4GA1UdDwEB/wQEAwIFoDAfBgNVHSMEGDAWgBRlZaM91zsR owoHJTfJQkpbdndQ4TAdBgNVHQ4EFgQUIFsNTUBjFXTsTXCdQLBqWjWRV7kwOgYD VR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9lZHVjYXRp b25hbC5jcmwwTwYIKwYBBQUHAQEEQzBBMD8GCCsGAQUFBzAChjNodHRwOi8vc2Vj dXJlLmdsb2JhbHNpZ24ubmV0L2NhY2VydC9lZHVjYXRpb25hbC5jcnQwHQYDVR0l BBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMCIGA1UdEQQbMBmCF3NoaWJiby51bml2 LXBvaXRpZXJzLmZyMA0GCSqGSIb3DQEBBQUAA4IBAQBhse/km/bsEXE006aZ2atq VKmcaP67NUinmoXXxCzUvOb3l1RzT+npChBnUNJT6nNfCzNC6SOrsHUGrk9ILACL uIJX1b2wXYHoAXEeWkvaQKDq/110pcCcnBYm8WAfu1HMnf62Do6aQPA3sRRAP6jv cp+/HTP/FVqjF0awKB47yl7/lJ7HrclGVUksUfXNazB1yHO/kspHa1ZQRZza5Kt7 6np3odjeR/hL6k5ITofSI3a9MfiVJLjAnVUorrQj8UtdHThqCw4Bq9mQRap6UrIv JyDgIELLa8YR9N60gfHdQ+atsjJCZqB+d7MqPCsvxy2EeIjP8/m05IJgnObrOqOm urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient univ-poitiers.fr etu.univ-poitiers.fr MIIEkDCCA3igAwIBAgIQDxpSxURbV8Ia3vp3/tBmOTANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTEwMDIyNTAwMDAwMFoXDTEzMDIyNDIzNTk1OVowZDELMAkGA1UE BhMCRlIxETAPBgNVBAcTCFBvaXRpZXJzMSAwHgYDVQQKDBdVbml2ZXJzaXTDqSBk ZSBQb2l0aWVyczEgMB4GA1UEAxMXc2hpYmJvLnVuaXYtcG9pdGllcnMuZnIwggEi MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD4S0xCC2eVI3VvMBFsqqmwigtP FPFoP3CwIIZCDp7kdrBizkaBgP5krmDcWxpZJiUORMjuJXvqlo9ygOpt5IPefA8Y nnYz3M/jYUThxdZ/f3kFNQBGauGUoFFKn1UEACt7I1Q5fQPSOaYVZWCjB5byy4rs 27f64NfxZMSqD1siruHrEtNE74T67EQkuIcH2D7kYIBF9F8jV3dY7DhgyC7kxtCL dzDfkriUn8FFndwJ/o8NDzhXcshrKyRdbIxpVBJHn5vywDXwjrqtGQBbTWv91JJa kQZ8Easn0wcrY3huEiwXThMk9giK8WQ/NGEx+z3B71tGGHB+mQKv9YuUVAnZAgMB AAGjggFqMIIBZjAfBgNVHSMEGDAWgBQMvZNoDPPeq6NJays3V0fqkOO57TAdBgNV HQ4EFgQUWEcJew1PBoxnhF2py/HCDSxCpVwwDgYDVR0PAQH/BAQDAgWgMAwGA1Ud EwEB/wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBgGA1UdIAQR MA8wDQYLKwYBBAGyMQECAh0wOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC50 Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcmwwbQYIKwYBBQUHAQEEYTBfMDUG CCsGAQUFBzAChilodHRwOi8vY3J0LnRjcy50ZXJlbmEub3JnL1RFUkVOQVNTTENB LmNydDAmBggrBgEFBQcwAYYaaHR0cDovL29jc3AudGNzLnRlcmVuYS5vcmcwIgYD VR0RBBswGYIXc2hpYmJvLnVuaXYtcG9pdGllcnMuZnIwDQYJKoZIhvcNAQEFBQAD ggEBAERMz3wHSxz3bfKk4SX7HLgSCz4Drn3YQQ5T+5MUfYwXw848HVQqpS16qWbf GofrvLvXat12I4IxPTv1SzQEFThNMDcZoHQ5LFbf5lSzGfCot5tifTZ+tjIYNtIJ gSPcfQ/FjANy5Q8IgS0wvlM4WE4gvveXX6SZwAJ8UWz5FjL6FzsR9l0Cgsj3BcYc 2IsiXqzJJDqSXwqsPY3UgYa5oMJY/xrHMyvTOA2XOhRN0WW+wM5aydOC6/FU7kfY crsguf6iboN9+WrUgLAtF63SnSuyMIlIzUba+MLE7ty73V9QCqPXQtH2zuSs2jqb VrPxydAqV9UJdjJN6bPWZDZb64U= MIIETDCCAzSgAwIBAgILAQAAAAABEpVhh1gwDQYJKoZIhvcNAQEFBQAwXzELMAkG A1UEBhMCQkUxEzARBgNVBAoTCkN5YmVydHJ1c3QxFzAVBgNVBAsTDkVkdWNhdGlv bmFsIENBMSIwIAYDVQQDExlDeWJlcnRydXN0IEVkdWNhdGlvbmFsIENBMB4XDTA3 MDUxNjE0NTM1NVoXDTEwMDUxNjE0NTM1NVowdDELMAkGA1UEBhMCRlIxQzBBBgNV BAoTOlVuaXZlcnNpdGUgZGUgUG9pdGllcnMsIENlbnRyZSBkJ0luZm9ybWF0aXF1 ZSBldCBkZSBDYWxjdWwxIDAeBgNVBAMTF3NoaWJiby51bml2LXBvaXRpZXJzLmZy MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC9SpXvDgE5NPJ+UFUJGUQ7gijH 6gHzBRE8ObENbCQWAOEN6FWH0pDE+qNeqhMWFADvdzh3S30DOsKt2Q4pH5hZ9KUs T4blgLJ5rsE1s/+ioB/bNjkTVtuEeUfR0DYlBoekj6XiLxNVWTw8bMZV+CFWDCPh XCzuhVnvgXjlPcLqZQIDAQABo4IBdjCCAXIwUAYDVR0gBEkwRzBFBgcqhkixPgEA MDowOAYIKwYBBQUHAgEWLGh0dHA6Ly93d3cuZ2xvYmFsc2lnbi5uZXQvcmVwb3Np dG9yeS9jcHMuY2ZtMA4GA1UdDwEB/wQEAwIFoDAfBgNVHSMEGDAWgBRlZaM91zsR owoHJTfJQkpbdndQ4TAdBgNVHQ4EFgQUIFsNTUBjFXTsTXCdQLBqWjWRV7kwOgYD VR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9lZHVjYXRp b25hbC5jcmwwTwYIKwYBBQUHAQEEQzBBMD8GCCsGAQUFBzAChjNodHRwOi8vc2Vj dXJlLmdsb2JhbHNpZ24ubmV0L2NhY2VydC9lZHVjYXRpb25hbC5jcnQwHQYDVR0l BBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMCIGA1UdEQQbMBmCF3NoaWJiby51bml2 LXBvaXRpZXJzLmZyMA0GCSqGSIb3DQEBBQUAA4IBAQBhse/km/bsEXE006aZ2atq VKmcaP67NUinmoXXxCzUvOb3l1RzT+npChBnUNJT6nNfCzNC6SOrsHUGrk9ILACL uIJX1b2wXYHoAXEeWkvaQKDq/110pcCcnBYm8WAfu1HMnf62Do6aQPA3sRRAP6jv cp+/HTP/FVqjF0awKB47yl7/lJ7HrclGVUksUfXNazB1yHO/kspHa1ZQRZza5Kt7 6np3odjeR/hL6k5ITofSI3a9MfiVJLjAnVUorrQj8UtdHThqCw4Bq9mQRap6UrIv JyDgIELLa8YR9N60gfHdQ+atsjJCZqB+d7MqPCsvxy2EeIjP8/m05IJgnObrOqOm urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Poitiers Université de Poitiers http://unknown.site.com Pignon Jacques jacques.pignon@univ-poitiers.fr univ-reims.fr MIIDMDCCAhigAwIBAgIVAL2jIgsvdHaiW3jhATYWI0XNX8mEMA0GCSqGSIb3DQEB BQUAMBwxGjAYBgNVBAMTEWlkcC51bml2LXJlaW1zLmZyMB4XDTA5MDQwOTA3MDY1 MloXDTI5MDQwOTA3MDY1MlowHDEaMBgGA1UEAxMRaWRwLnVuaXYtcmVpbXMuZnIw ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCAzPcBanTJ7Dz5EJtyHuRo jH43UwmGsVSmYXYHCBS5dR/OmxClgdsAnFAfLadx37gO4Ib60Rut5Fj8VzMMNZSY 7QMoxxswchbFWfeQ+Ouo7f78XFlr3uvrREjdBy6wOG9AKpFdoXN1YqDLmSJ8NUXS tLHIqfuG1LQuBGvZeFTd8Aq1KluFbUBlDgJeqfXASR+f+NeRhfi4+/neUsmffOJs cF4LLR9htO8wAQ5jqT38g6Mef15m2YbvfbamS1K0gJ+xkUHdfn2QEChXgBUEA07e BbhhtyO5hF7NdoDwmChrUwOLa19DzvXsq+NtPFXgNyzhrWDWHcxQyNbqif558Agp AgMBAAGjaTBnMEYGA1UdEQQ/MD2CEWlkcC51bml2LXJlaW1zLmZyhihodHRwczov L2lkcC51bml2LXJlaW1zLmZyL2lkcC9zaGliYm9sZXRoMB0GA1UdDgQWBBTGzm17 rh/LTbtXmOsK6s5WTYAj4DANBgkqhkiG9w0BAQUFAAOCAQEAVcEL+y4/0UQ7glis R63eyvaAwsHWpxxHgCCOeKLzEUI1psi/vysmlWJa5R/EE+yJZqTvUyGEurZLgIJv OFxmQBsasPsFKvrvFvwBDuJsC49sYjQeNw30iro9lGNqsqQ9dzVSrGEgqF67uYeV 3wDkziL1KeqOs+Rx6m6YFRGsDbkZ6iQ9G7PFvD6XbNkKscox94T768AFvF69hVTJ L2xmGFNJLLSoZPnMUL2K3EcXychLRIfAzaK0hRvJUrx8HTcHVmdh477BespRaHsB /M7dFoRtQlh4cfry/iAqcvigNqzLB2d2cs52M+VdtWuXnG96iRnCQohf1+u6Tnor Eby/Nw== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient univ-reims.fr MIIDMDCCAhigAwIBAgIVAL2jIgsvdHaiW3jhATYWI0XNX8mEMA0GCSqGSIb3DQEB BQUAMBwxGjAYBgNVBAMTEWlkcC51bml2LXJlaW1zLmZyMB4XDTA5MDQwOTA3MDY1 MloXDTI5MDQwOTA3MDY1MlowHDEaMBgGA1UEAxMRaWRwLnVuaXYtcmVpbXMuZnIw ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCAzPcBanTJ7Dz5EJtyHuRo jH43UwmGsVSmYXYHCBS5dR/OmxClgdsAnFAfLadx37gO4Ib60Rut5Fj8VzMMNZSY 7QMoxxswchbFWfeQ+Ouo7f78XFlr3uvrREjdBy6wOG9AKpFdoXN1YqDLmSJ8NUXS tLHIqfuG1LQuBGvZeFTd8Aq1KluFbUBlDgJeqfXASR+f+NeRhfi4+/neUsmffOJs cF4LLR9htO8wAQ5jqT38g6Mef15m2YbvfbamS1K0gJ+xkUHdfn2QEChXgBUEA07e BbhhtyO5hF7NdoDwmChrUwOLa19DzvXsq+NtPFXgNyzhrWDWHcxQyNbqif558Agp AgMBAAGjaTBnMEYGA1UdEQQ/MD2CEWlkcC51bml2LXJlaW1zLmZyhihodHRwczov L2lkcC51bml2LXJlaW1zLmZyL2lkcC9zaGliYm9sZXRoMB0GA1UdDgQWBBTGzm17 rh/LTbtXmOsK6s5WTYAj4DANBgkqhkiG9w0BAQUFAAOCAQEAVcEL+y4/0UQ7glis R63eyvaAwsHWpxxHgCCOeKLzEUI1psi/vysmlWJa5R/EE+yJZqTvUyGEurZLgIJv OFxmQBsasPsFKvrvFvwBDuJsC49sYjQeNw30iro9lGNqsqQ9dzVSrGEgqF67uYeV 3wDkziL1KeqOs+Rx6m6YFRGsDbkZ6iQ9G7PFvD6XbNkKscox94T768AFvF69hVTJ L2xmGFNJLLSoZPnMUL2K3EcXychLRIfAzaK0hRvJUrx8HTcHVmdh477BespRaHsB /M7dFoRtQlh4cfry/iAqcvigNqzLB2d2cs52M+VdtWuXnG96iRnCQohf1+u6Tnor Eby/Nw== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Reims Champagne-Ardenne Université de Reims Champagne-Ardenne http://unknown.site.com Monclin Yannick yannick.monclin@univ-reims.fr Canart Arnaud arnaud.canart@univ-reims.fr univ-rennes1.fr ensc-rennes.fr sciencespo-rennes.fr MIIDUzCCAjugAwIBAgIUAOfkyDP7IZUpxjLBqzh2u2A52aEwDQYJKoZIhvcNAQEF BQAwJTEjMCEGA1UEAxMaaWRlbnQtc2hpYi51bml2LXJlbm5lczEuZnIwHhcNMDkw MzAyMTE1ODE5WhcNMjkwMzAyMTE1ODE5WjAlMSMwIQYDVQQDExppZGVudC1zaGli LnVuaXYtcmVubmVzMS5mcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB AIgsyIsKtRo7oQxJsA+lI4Yr616n8irMvAEkvp22Z3Qp891HG5Jz3g7UMOv0ec+F LKRLNWoV6+DkM2TZiAji42ltH9pj5t27JhRZ2RMbpOOi37KYGKjUUSK5AVznwutp lvW2p4pYCR8TSuZMaFCxjTz4Re43HYLdH/rS1IjKF8LZPV5ymmHJRIEsC50VPx6S LLqEz46AxgNWc15oBEvLeBwHKQVC170RLAsFxUjQeuUXVTwaSpd9mwgkbzH28w6p dp3q9uAy2iKWXqLUvCIqTuH9u5+iNhnD4ZOYdFb8wW1Ebkbpsb0Vp6Uh64K60n/4 Q/+mpg/CVGDdOkFppYFATa8CAwEAAaN7MHkwWAYDVR0RBFEwT4IaaWRlbnQtc2hp Yi51bml2LXJlbm5lczEuZnKGMWh0dHBzOi8vaWRlbnQtc2hpYi51bml2LXJlbm5l czEuZnIvaWRwL3NoaWJib2xldGgwHQYDVR0OBBYEFJWD/tJoDhnkOpuBRxm6nBAi AwlPMA0GCSqGSIb3DQEBBQUAA4IBAQAnSdwW+9NJWxtugXueUnfSQttGDOUmQIie gUHPCRj8VEbPG6upxZnFC/slOfR+dUeP6hIyCIE1pzqjCe8Lmc9wrKvee3nBPnCf gXMbzpVCNYXOMM8DhikOdBwGOfCWsK5cdkDVz5OWHv+gU/kgo1mcN6EQI8rzSi0h SvwYWTv/BTnA3R/idih2dS8sZDISLsBJnXtIWZTH28S4NX3sttHZSjyALT2nJbLD +2Xhef7YCNxkQshmTU9MI7TzdTNBEQS3p82TT9N4oXNVH0WPY3l0YLKBNzQSvNj2 rkwHcu+LmiqBbNYaIImujo8IZ7laiF30+nPuPGRfCqU7IEjA7cga MIIEIDCCAwigAwIBAgILAQAAAAABDg1Zg/IwDQYJKoZIhvcNAQEFBQAwXzELMAkG A1UEBhMCQkUxEzARBgNVBAoTCkN5YmVydHJ1c3QxFzAVBgNVBAsTDkVkdWNhdGlv bmFsIENBMSIwIAYDVQQDExlDeWJlcnRydXN0IEVkdWNhdGlvbmFsIENBMB4XDTA2 MTAwMzA4NDU0MFoXDTA5MTAwMzA4NDU0MFowTDELMAkGA1UEBhMCRlIxHzAdBgNV BAoTFlVuaXZlcnNpdGUgZGUgUmVubmVzIEkxHDAaBgNVBAMTE2lkcC51bml2LXJl bm5lczEuZnIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAL/LZr3uS5RWbfij yEE89XTGtA5zBnoBRv8QMiBuJeBqa0tXXw9ZS+S3zTVVELpfYIMqwkEHz2ChHRNj K/b/7bxV9VGDFBp/wc/zeA66NDmiWJLqJJufmqM8qH1W5RQKgl/076B+0Aw08yZ/ g7H+Yy85fwWOtEGKmls5knJiTKjBAgMBAAGjggFyMIIBbjBQBgNVHSAESTBHMEUG ByqGSLE+AQAwOjA4BggrBgEFBQcCARYsaHR0cDovL3d3dy5nbG9iYWxzaWduLm5l dC9yZXBvc2l0b3J5L2Nwcy5jZm0wDgYDVR0PAQH/BAQDAgWgMB8GA1UdIwQYMBaA FGVloz3XOxGjCgclN8lCSlt2d1DhMB0GA1UdDgQWBBRCXSK4IHse3wSMKmOOJ9Zb Doh9+zA6BgNVHR8EMzAxMC+gLaArhilodHRwOi8vY3JsLmdsb2JhbHNpZ24ubmV0 L2VkdWNhdGlvbmFsLmNybDBPBggrBgEFBQcBAQRDMEEwPwYIKwYBBQUHMAKGM2h0 dHA6Ly9zZWN1cmUuZ2xvYmFsc2lnbi5uZXQvY2FjZXJ0L2VkdWNhdGlvbmFsLmNy dDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwHgYDVR0RBBcwFYITaWRw LnVuaXYtcmVubmVzMS5mcjANBgkqhkiG9w0BAQUFAAOCAQEAZtXIA+OOcnWCT+QO TIQw16YUD/WRJ16OphFYIp4WNwQ2SbItnEXh68H56GmBjoTbamcBvP5nqhAmv6GL evl7b+DoB6drDcjLn7f2/mBBKVgtp7PcMjtMDW7DhDUYHa5FieDnWtLVfWbulI6d Grs0zm/543uDYpfJL8E3TP0b3nIPSwlXWz+Bo4vuiSl3uIZReXApXy4ny1CJaTxv 5jbH5lF7A+wiz6h7CygZaEnNpdJi16IqK5icl9ypmz/q21b+SY2MtWF80buGU0Qf lOK1LYCamVxgNR1FsI4KN8elzzjYkcTzQWCjZZNX3E30zJua/tb4r2fu9zdHAmTW cKxKUQ== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient univ-rennes1.fr ensc-rennes.fr sciencespo-rennes.fr MIIDUzCCAjugAwIBAgIUAOfkyDP7IZUpxjLBqzh2u2A52aEwDQYJKoZIhvcNAQEF BQAwJTEjMCEGA1UEAxMaaWRlbnQtc2hpYi51bml2LXJlbm5lczEuZnIwHhcNMDkw MzAyMTE1ODE5WhcNMjkwMzAyMTE1ODE5WjAlMSMwIQYDVQQDExppZGVudC1zaGli LnVuaXYtcmVubmVzMS5mcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB AIgsyIsKtRo7oQxJsA+lI4Yr616n8irMvAEkvp22Z3Qp891HG5Jz3g7UMOv0ec+F LKRLNWoV6+DkM2TZiAji42ltH9pj5t27JhRZ2RMbpOOi37KYGKjUUSK5AVznwutp lvW2p4pYCR8TSuZMaFCxjTz4Re43HYLdH/rS1IjKF8LZPV5ymmHJRIEsC50VPx6S LLqEz46AxgNWc15oBEvLeBwHKQVC170RLAsFxUjQeuUXVTwaSpd9mwgkbzH28w6p dp3q9uAy2iKWXqLUvCIqTuH9u5+iNhnD4ZOYdFb8wW1Ebkbpsb0Vp6Uh64K60n/4 Q/+mpg/CVGDdOkFppYFATa8CAwEAAaN7MHkwWAYDVR0RBFEwT4IaaWRlbnQtc2hp Yi51bml2LXJlbm5lczEuZnKGMWh0dHBzOi8vaWRlbnQtc2hpYi51bml2LXJlbm5l czEuZnIvaWRwL3NoaWJib2xldGgwHQYDVR0OBBYEFJWD/tJoDhnkOpuBRxm6nBAi AwlPMA0GCSqGSIb3DQEBBQUAA4IBAQAnSdwW+9NJWxtugXueUnfSQttGDOUmQIie gUHPCRj8VEbPG6upxZnFC/slOfR+dUeP6hIyCIE1pzqjCe8Lmc9wrKvee3nBPnCf gXMbzpVCNYXOMM8DhikOdBwGOfCWsK5cdkDVz5OWHv+gU/kgo1mcN6EQI8rzSi0h SvwYWTv/BTnA3R/idih2dS8sZDISLsBJnXtIWZTH28S4NX3sttHZSjyALT2nJbLD +2Xhef7YCNxkQshmTU9MI7TzdTNBEQS3p82TT9N4oXNVH0WPY3l0YLKBNzQSvNj2 rkwHcu+LmiqBbNYaIImujo8IZ7laiF30+nPuPGRfCqU7IEjA7cga MIIEIDCCAwigAwIBAgILAQAAAAABDg1Zg/IwDQYJKoZIhvcNAQEFBQAwXzELMAkG A1UEBhMCQkUxEzARBgNVBAoTCkN5YmVydHJ1c3QxFzAVBgNVBAsTDkVkdWNhdGlv bmFsIENBMSIwIAYDVQQDExlDeWJlcnRydXN0IEVkdWNhdGlvbmFsIENBMB4XDTA2 MTAwMzA4NDU0MFoXDTA5MTAwMzA4NDU0MFowTDELMAkGA1UEBhMCRlIxHzAdBgNV BAoTFlVuaXZlcnNpdGUgZGUgUmVubmVzIEkxHDAaBgNVBAMTE2lkcC51bml2LXJl bm5lczEuZnIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAL/LZr3uS5RWbfij yEE89XTGtA5zBnoBRv8QMiBuJeBqa0tXXw9ZS+S3zTVVELpfYIMqwkEHz2ChHRNj K/b/7bxV9VGDFBp/wc/zeA66NDmiWJLqJJufmqM8qH1W5RQKgl/076B+0Aw08yZ/ g7H+Yy85fwWOtEGKmls5knJiTKjBAgMBAAGjggFyMIIBbjBQBgNVHSAESTBHMEUG ByqGSLE+AQAwOjA4BggrBgEFBQcCARYsaHR0cDovL3d3dy5nbG9iYWxzaWduLm5l dC9yZXBvc2l0b3J5L2Nwcy5jZm0wDgYDVR0PAQH/BAQDAgWgMB8GA1UdIwQYMBaA FGVloz3XOxGjCgclN8lCSlt2d1DhMB0GA1UdDgQWBBRCXSK4IHse3wSMKmOOJ9Zb Doh9+zA6BgNVHR8EMzAxMC+gLaArhilodHRwOi8vY3JsLmdsb2JhbHNpZ24ubmV0 L2VkdWNhdGlvbmFsLmNybDBPBggrBgEFBQcBAQRDMEEwPwYIKwYBBQUHMAKGM2h0 dHA6Ly9zZWN1cmUuZ2xvYmFsc2lnbi5uZXQvY2FjZXJ0L2VkdWNhdGlvbmFsLmNy dDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwHgYDVR0RBBcwFYITaWRw LnVuaXYtcmVubmVzMS5mcjANBgkqhkiG9w0BAQUFAAOCAQEAZtXIA+OOcnWCT+QO TIQw16YUD/WRJ16OphFYIp4WNwQ2SbItnEXh68H56GmBjoTbamcBvP5nqhAmv6GL evl7b+DoB6drDcjLn7f2/mBBKVgtp7PcMjtMDW7DhDUYHa5FieDnWtLVfWbulI6d Grs0zm/543uDYpfJL8E3TP0b3nIPSwlXWz+Bo4vuiSl3uIZReXApXy4ny1CJaTxv 5jbH5lF7A+wiz6h7CygZaEnNpdJi16IqK5icl9ypmz/q21b+SY2MtWF80buGU0Qf lOK1LYCamVxgNR1FsI4KN8elzzjYkcTzQWCjZZNX3E30zJua/tb4r2fu9zdHAmTW cKxKUQ== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Rennes 1 Université de Rennes 1 http://unknown.site.com Raymond Bourges fed-admin@listes.univ-rennes1.fr Sebastien Bilbeau fed-admin@listes.univ-rennes1.fr sp-sifac.univ-rennes1.fr CN=sp-sifac.univ-rennes1.fr,O=univrennes1,C=FR MIICozCCAgygAwIBAgIBADANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJGUjEU MBIGA1UEChMLdW5pdnJlbm5lczExITAfBgNVBAMTGHNwLXNpZmFjLnVuaXYtcmVu bmVzMS5mcjAeFw0wODAyMTExMjMyNTFaFw0yODAyMDYxMjMyNTFaMEYxCzAJBgNV BAYTAkZSMRQwEgYDVQQKEwt1bml2cmVubmVzMTEhMB8GA1UEAxMYc3Atc2lmYWMu dW5pdi1yZW5uZXMxLmZyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3q4gw xTdtrCETCROnbBj7fr8qo5knGav9K0kY7h+Ls3ntmuo/T2fVXI3Q8+mLrTjKS0cp NDRa42kRJmzTnH2HmL0vh7OzHFgiXmT6qyPv8apIRe+9lENWn3kfn2ZI23oZQcSF 53kzerxgd8UJ13zMej2VJ3ln7Bi5pUeJqjTq/QIDAQABo4GgMIGdMB0GA1UdDgQW BBSLM5/I3ZK+D8DwWm4MOVYry8IZ9DBuBgNVHSMEZzBlgBSLM5/I3ZK+D8DwWm4M OVYry8IZ9KFKpEgwRjELMAkGA1UEBhMCRlIxFDASBgNVBAoTC3VuaXZyZW5uZXMx MSEwHwYDVQQDExhzcC1zaWZhYy51bml2LXJlbm5lczEuZnKCAQAwDAYDVR0TBAUw AwEB/zANBgkqhkiG9w0BAQUFAAOBgQCk8tRrWFIEzMIjdl3YCzkrcEUAO2sZmvdN xULGl7s5CFkDH0WCOn8TKhf5ZAiJF50SEVulrvfmNlxa4QDNouqFKHXeRAmrnGxK 51/3lcttCQWBBucypYqw1abaJ35+faJupTh+N+IHG4A4fV2S3vohh297Y94/OdsI QYCYmgqozg== sp-sifac.univ-rennes1.fr CN=sp-sifac.univ-rennes1.fr,O=univrennes1,C=FR MIICozCCAgygAwIBAgIBADANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJGUjEU MBIGA1UEChMLdW5pdnJlbm5lczExITAfBgNVBAMTGHNwLXNpZmFjLnVuaXYtcmVu bmVzMS5mcjAeFw0wODAyMTExMjMyNTFaFw0yODAyMDYxMjMyNTFaMEYxCzAJBgNV BAYTAkZSMRQwEgYDVQQKEwt1bml2cmVubmVzMTEhMB8GA1UEAxMYc3Atc2lmYWMu dW5pdi1yZW5uZXMxLmZyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3q4gw xTdtrCETCROnbBj7fr8qo5knGav9K0kY7h+Ls3ntmuo/T2fVXI3Q8+mLrTjKS0cp NDRa42kRJmzTnH2HmL0vh7OzHFgiXmT6qyPv8apIRe+9lENWn3kfn2ZI23oZQcSF 53kzerxgd8UJ13zMej2VJ3ln7Bi5pUeJqjTq/QIDAQABo4GgMIGdMB0GA1UdDgQW BBSLM5/I3ZK+D8DwWm4MOVYry8IZ9DBuBgNVHSMEZzBlgBSLM5/I3ZK+D8DwWm4M OVYry8IZ9KFKpEgwRjELMAkGA1UEBhMCRlIxFDASBgNVBAoTC3VuaXZyZW5uZXMx MSEwHwYDVQQDExhzcC1zaWZhYy51bml2LXJlbm5lczEuZnKCAQAwDAYDVR0TBAUw AwEB/zANBgkqhkiG9w0BAQUFAAOBgQCk8tRrWFIEzMIjdl3YCzkrcEUAO2sZmvdN xULGl7s5CFkDH0WCOn8TKhf5ZAiJF50SEVulrvfmNlxa4QDNouqFKHXeRAmrnGxK 51/3lcttCQWBBucypYqw1abaJ35+faJupTh+N+IHG4A4fV2S3vohh297Y94/OdsI QYCYmgqozg== MIICszCCAhygAwIBAgIJALCV7SiUX7g+MA0GCSqGSIb3DQEBBQUAMEYxCzAJBgNV BAYTAkZSMRowGAYDVQQKExFub20gZGUgbG9yZ2FuaXNtZTEbMBkGA1UEAxMSY2Ft cHVzLXByb2YudWViLmV1MB4XDTEwMDkyODA2NTkwNVoXDTMwMDkyMzA2NTkwNVow RjELMAkGA1UEBhMCRlIxGjAYBgNVBAoTEW5vbSBkZSBsb3JnYW5pc21lMRswGQYD VQQDExJjYW1wdXMtcHJvZi51ZWIuZXUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ AoGBANvpNjgst0IYeGUX79ueLpH/9UbJ/FpSiIyKV4xPEBBb3YdkK3QLkk+tVdJO YBBB7zK38Rc6TpDFu8AazPURcLALbgYqLubFWrpMg1HkQX0KWs2EEvJjWskh5/iZ aBvRUGVCUE78otf9/edvtAqqQG1s/tKzC4SLogxAb+wzShZnAgMBAAGjgagwgaUw HQYDVR0OBBYEFFCWTgflusll9WtWwEVDZ4kDMCoFMHYGA1UdIwRvMG2AFFCWTgfl usll9WtWwEVDZ4kDMCoFoUqkSDBGMQswCQYDVQQGEwJGUjEaMBgGA1UEChMRbm9t IGRlIGxvcmdhbmlzbWUxGzAZBgNVBAMTEmNhbXB1cy1wcm9mLnVlYi5ldYIJALCV 7SiUX7g+MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAEhbF9KWZLWZV N3NjSabECOH7ILGInW/734CtViAwVNDUnseOiJyBcOEmBBEaZp8yWBZueCb7KoB8 +4XVJECwgKOLmuH+r5U3gr2Ak9ZYiUk4YTuhJad1SO5d7iSwWnG3qcieUOC0UyFW cyPMRj2+/xFjNtCB4Pp99SBsH/zxDHs= MIICszCCAhygAwIBAgIJALCV7SiUX7g+MA0GCSqGSIb3DQEBBQUAMEYxCzAJBgNV BAYTAkZSMRowGAYDVQQKExFub20gZGUgbG9yZ2FuaXNtZTEbMBkGA1UEAxMSY2Ft cHVzLXByb2YudWViLmV1MB4XDTEwMDkyODA2NTkwNVoXDTMwMDkyMzA2NTkwNVow RjELMAkGA1UEBhMCRlIxGjAYBgNVBAoTEW5vbSBkZSBsb3JnYW5pc21lMRswGQYD VQQDExJjYW1wdXMtcHJvZi51ZWIuZXUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ AoGBANvpNjgst0IYeGUX79ueLpH/9UbJ/FpSiIyKV4xPEBBb3YdkK3QLkk+tVdJO YBBB7zK38Rc6TpDFu8AazPURcLALbgYqLubFWrpMg1HkQX0KWs2EEvJjWskh5/iZ aBvRUGVCUE78otf9/edvtAqqQG1s/tKzC4SLogxAb+wzShZnAgMBAAGjgagwgaUw HQYDVR0OBBYEFFCWTgflusll9WtWwEVDZ4kDMCoFMHYGA1UdIwRvMG2AFFCWTgfl usll9WtWwEVDZ4kDMCoFoUqkSDBGMQswCQYDVQQGEwJGUjEaMBgGA1UEChMRbm9t IGRlIGxvcmdhbmlzbWUxGzAZBgNVBAMTEmNhbXB1cy1wcm9mLnVlYi5ldYIJALCV 7SiUX7g+MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAEhbF9KWZLWZV N3NjSabECOH7ILGInW/734CtViAwVNDUnseOiJyBcOEmBBEaZp8yWBZueCb7KoB8 +4XVJECwgKOLmuH+r5U3gr2Ak9ZYiUk4YTuhJad1SO5d7iSwWnG3qcieUOC0UyFW cyPMRj2+/xFjNtCB4Pp99SBsH/zxDHs= urn:mace:shibboleth:1.0:nameIdentifier Raymond Bourges fed-admin@listes.univ-rennes1.fr Charles Coupeau charles.coupeau@univ-rennes1.fr foad.univ-rennes1.fr CN=foad.univ-rennes1.fr,O=nom de l organisme,C=FR MIICvDCCAiWgAwIBAgIJANa0MQZx20p2MA0GCSqGSIb3DQEBBQUAMEkxCzAJBgNV BAYTAkZSMRswGQYDVQQKExJub20gZGUgbCBvcmdhbmlzbWUxHTAbBgNVBAMTFGZv YWQudW5pdi1yZW5uZXMxLmZyMB4XDTA5MDExMjE0NDMzMVoXDTI5MDEwNzE0NDMz MVowSTELMAkGA1UEBhMCRlIxGzAZBgNVBAoTEm5vbSBkZSBsIG9yZ2FuaXNtZTEd MBsGA1UEAxMUZm9hZC51bml2LXJlbm5lczEuZnIwgZ8wDQYJKoZIhvcNAQEBBQAD gY0AMIGJAoGBAKSDWD0Yayx+3Y56Oce6uUjPIYCjgYVF5qUmtxmUalR7CCCwWQqy RPDy7mTL6nrum1gqkqLj3HGlf4901YPMAkrczR4De9QRIDH0dwTCqkeHQ5bnKcrq rEF3x4+krP5fR/9hbeDjPY1MDYz5ZGUijvXrrCOIL5fY9iEVmZrLmL+1AgMBAAGj gaswgagwHQYDVR0OBBYEFCFqTRVxz0sXh7NfXiAEb6tP+w0hMHkGA1UdIwRyMHCA FCFqTRVxz0sXh7NfXiAEb6tP+w0hoU2kSzBJMQswCQYDVQQGEwJGUjEbMBkGA1UE ChMSbm9tIGRlIGwgb3JnYW5pc21lMR0wGwYDVQQDExRmb2FkLnVuaXYtcmVubmVz MS5mcoIJANa0MQZx20p2MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEA b1L0K2kRRd1Ff/1I1gQ9zJ3yCxwsGN+BqP7vw08ZiiCWKe8ig0fU6cQp9ZwX9sSG V6m98ivh00YWSZlRtwxJ10lth6iYgS3IbdxGC1DbKXQ/wqfMuM26Znyn8KQlRGKO WTiYvOOC1y6c+/0tJNVpGLrdt6H2/xphDrUQjCw5HC8= foad.univ-rennes1.fr CN=foad.univ-rennes1.fr,O=nom de l organisme,C=FR MIICvDCCAiWgAwIBAgIJANa0MQZx20p2MA0GCSqGSIb3DQEBBQUAMEkxCzAJBgNV BAYTAkZSMRswGQYDVQQKExJub20gZGUgbCBvcmdhbmlzbWUxHTAbBgNVBAMTFGZv YWQudW5pdi1yZW5uZXMxLmZyMB4XDTA5MDExMjE0NDMzMVoXDTI5MDEwNzE0NDMz MVowSTELMAkGA1UEBhMCRlIxGzAZBgNVBAoTEm5vbSBkZSBsIG9yZ2FuaXNtZTEd MBsGA1UEAxMUZm9hZC51bml2LXJlbm5lczEuZnIwgZ8wDQYJKoZIhvcNAQEBBQAD gY0AMIGJAoGBAKSDWD0Yayx+3Y56Oce6uUjPIYCjgYVF5qUmtxmUalR7CCCwWQqy RPDy7mTL6nrum1gqkqLj3HGlf4901YPMAkrczR4De9QRIDH0dwTCqkeHQ5bnKcrq rEF3x4+krP5fR/9hbeDjPY1MDYz5ZGUijvXrrCOIL5fY9iEVmZrLmL+1AgMBAAGj gaswgagwHQYDVR0OBBYEFCFqTRVxz0sXh7NfXiAEb6tP+w0hMHkGA1UdIwRyMHCA FCFqTRVxz0sXh7NfXiAEb6tP+w0hoU2kSzBJMQswCQYDVQQGEwJGUjEbMBkGA1UE ChMSbm9tIGRlIGwgb3JnYW5pc21lMR0wGwYDVQQDExRmb2FkLnVuaXYtcmVubmVz MS5mcoIJANa0MQZx20p2MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEA b1L0K2kRRd1Ff/1I1gQ9zJ3yCxwsGN+BqP7vw08ZiiCWKe8ig0fU6cQp9ZwX9sSG V6m98ivh00YWSZlRtwxJ10lth6iYgS3IbdxGC1DbKXQ/wqfMuM26Znyn8KQlRGKO WTiYvOOC1y6c+/0tJNVpGLrdt6H2/xphDrUQjCw5HC8= MIIElzCCA3+gAwIBAgIQR06UnHuxgsOCVOhYATkF5zANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTA5MTAyMjAwMDAwMFoXDTEyMTAyMTIzNTk1OVowazELMAkGA1UE BhMCRlIxCzAJBgNVBAgTAmZyMQ8wDQYDVQQHEwZSRU5ORVMxHDAaBgNVBAoTE1VO SVZFUlNJVEUgUkVOTkVTIDExIDAeBgNVBAMTF3dpZmlzcnYudW5pdi1yZW5uZXMx LmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtlErapEqFh/Q3LKp bvwupydHAME1bjVsAZV4eed9M6WGUPwqc0efgRxz4RI6vXPYWHuSqBUPikq1PRAF S5eT7m9sc1r7PptRDnTxnWLKq9Ps9d7jtvnrPvRC3FhcYqcpSRje8RelSS/Mwiwj UcG2j0t09rhOWkuCWxF/y8IqxJJzgYwhVlBW7we14iiM2wZmll/s+Y7FwGp8WQlg QElaPgaAPMxI+qaFMeotHl57bAnbsuf1gzmGXI+PBUNuErLrnWGWqaKaHB0Z2jAo N33kncpodX4KSnxlVGv2KVP8e42mWDNsDGPEx0xpxdPHNQEc8WD7DwP2UTYl/1kj iUvjxwIDAQABo4IBajCCAWYwHwYDVR0jBBgwFoAUDL2TaAzz3qujSWsrN1dH6pDj ue0wHQYDVR0OBBYEFO1K1KMoh98bimHj4MuXYoCr146mMA4GA1UdDwEB/wQEAwIF oDAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAY BgNVHSAEETAPMA0GCysGAQQBsjEBAgIdMDoGA1UdHwQzMDEwL6AtoCuGKWh0dHA6 Ly9jcmwudGNzLnRlcmVuYS5vcmcvVEVSRU5BU1NMQ0EuY3JsMG0GCCsGAQUFBwEB BGEwXzA1BggrBgEFBQcwAoYpaHR0cDovL2NydC50Y3MudGVyZW5hLm9yZy9URVJF TkFTU0xDQS5jcnQwJgYIKwYBBQUHMAGGGmh0dHA6Ly9vY3NwLnRjcy50ZXJlbmEu b3JnMCIGA1UdEQQbMBmCF3dpZmlzcnYudW5pdi1yZW5uZXMxLmZyMA0GCSqGSIb3 DQEBBQUAA4IBAQDC9dtySfhxQjC20adVk5qCVi0gwGHsCov7cKBTEM2DDntU3X0E sRzC+HaA3AWB5hj4kYV4Q+nRz5mxEJgPz1qzuRkYt8zvHW5S3asLqPXdgBG/4IA5 0zUDP4hQGw1wXg5FWK8ojs/NtiU1RtTB/+EVWr/JVA6jXGYxeQ+ohwR7BTiqkNcq CNv+usLQ+V9/XJliYm5Yrt46pFXH3Icy2zz01tKutYEFy1lupW5LIuRs1qLl08OO BThYg3ZJw6vcs0zevxWpvpFj9UoY58XSecRs9TlFPJSIqbwRHS6PGX5sq5NATA8d rGKezhqBO4bQw9O8lTbN/LSHnDHVn2ms2dwa MIIElzCCA3+gAwIBAgIQR06UnHuxgsOCVOhYATkF5zANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTA5MTAyMjAwMDAwMFoXDTEyMTAyMTIzNTk1OVowazELMAkGA1UE BhMCRlIxCzAJBgNVBAgTAmZyMQ8wDQYDVQQHEwZSRU5ORVMxHDAaBgNVBAoTE1VO SVZFUlNJVEUgUkVOTkVTIDExIDAeBgNVBAMTF3dpZmlzcnYudW5pdi1yZW5uZXMx LmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtlErapEqFh/Q3LKp bvwupydHAME1bjVsAZV4eed9M6WGUPwqc0efgRxz4RI6vXPYWHuSqBUPikq1PRAF S5eT7m9sc1r7PptRDnTxnWLKq9Ps9d7jtvnrPvRC3FhcYqcpSRje8RelSS/Mwiwj UcG2j0t09rhOWkuCWxF/y8IqxJJzgYwhVlBW7we14iiM2wZmll/s+Y7FwGp8WQlg QElaPgaAPMxI+qaFMeotHl57bAnbsuf1gzmGXI+PBUNuErLrnWGWqaKaHB0Z2jAo N33kncpodX4KSnxlVGv2KVP8e42mWDNsDGPEx0xpxdPHNQEc8WD7DwP2UTYl/1kj iUvjxwIDAQABo4IBajCCAWYwHwYDVR0jBBgwFoAUDL2TaAzz3qujSWsrN1dH6pDj ue0wHQYDVR0OBBYEFO1K1KMoh98bimHj4MuXYoCr146mMA4GA1UdDwEB/wQEAwIF oDAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAY BgNVHSAEETAPMA0GCysGAQQBsjEBAgIdMDoGA1UdHwQzMDEwL6AtoCuGKWh0dHA6 Ly9jcmwudGNzLnRlcmVuYS5vcmcvVEVSRU5BU1NMQ0EuY3JsMG0GCCsGAQUFBwEB BGEwXzA1BggrBgEFBQcwAoYpaHR0cDovL2NydC50Y3MudGVyZW5hLm9yZy9URVJF TkFTU0xDQS5jcnQwJgYIKwYBBQUHMAGGGmh0dHA6Ly9vY3NwLnRjcy50ZXJlbmEu b3JnMCIGA1UdEQQbMBmCF3dpZmlzcnYudW5pdi1yZW5uZXMxLmZyMA0GCSqGSIb3 DQEBBQUAA4IBAQDC9dtySfhxQjC20adVk5qCVi0gwGHsCov7cKBTEM2DDntU3X0E sRzC+HaA3AWB5hj4kYV4Q+nRz5mxEJgPz1qzuRkYt8zvHW5S3asLqPXdgBG/4IA5 0zUDP4hQGw1wXg5FWK8ojs/NtiU1RtTB/+EVWr/JVA6jXGYxeQ+ohwR7BTiqkNcq CNv+usLQ+V9/XJliYm5Yrt46pFXH3Icy2zz01tKutYEFy1lupW5LIuRs1qLl08OO BThYg3ZJw6vcs0zevxWpvpFj9UoY58XSecRs9TlFPJSIqbwRHS6PGX5sq5NATA8d rGKezhqBO4bQw9O8lTbN/LSHnDHVn2ms2dwa urn:mace:shibboleth:1.0:nameIdentifier Fabrice Jaunet fed-admin@listes.univ-rennes1.fr Raymond Bourges raymond.bourges@univ-rennes1.fr MIICxDCCAi2gAwIBAgIBADANBgkqhkiG9w0BAQUFADBRMQswCQYDVQQGEwJGUjEc MBoGA1UEChMTdW5pdmVyc2l0ZSBSZW5uZXMgMTEkMCIGA1UEAxMbd2lmaXNydnNo aWIudW5pdi1yZW5uZXMxLmZyMB4XDTA5MTAwNTA5NDA0N1oXDTI5MDkzMDA5NDA0 N1owUTELMAkGA1UEBhMCRlIxHDAaBgNVBAoTE3VuaXZlcnNpdGUgUmVubmVzIDEx JDAiBgNVBAMTG3dpZmlzcnZzaGliLnVuaXYtcmVubmVzMS5mcjCBnzANBgkqhkiG 9w0BAQEFAAOBjQAwgYkCgYEAxzmdmjg3UbdcXIHYSHpnLXV2XEyhTZCCLtEoLwTT IQDRFkDTjcjgQ+8d8wJqL2+t5wZVkayiTtNdNXH4Z8cVpACiRmtw0tXuVXZbK8QA 12zBlINyMZ3V5nwIiKHPGJXZeF8il3xRx9eYbHdlk2rnutOv9dxiWzbXwTjlUZ5a w+8CAwEAAaOBqzCBqDAdBgNVHQ4EFgQUU6GBI39b+fuy1HvsNfkkjGAwiDgweQYD VR0jBHIwcIAUU6GBI39b+fuy1HvsNfkkjGAwiDihVaRTMFExCzAJBgNVBAYTAkZS MRwwGgYDVQQKExN1bml2ZXJzaXRlIFJlbm5lcyAxMSQwIgYDVQQDExt3aWZpc3J2 c2hpYi51bml2LXJlbm5lczEuZnKCAQAwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0B AQUFAAOBgQBFiQGd1V7X5oOKG2obijiRh7xpF3Ig0UTCYRNcFcLmjJwehUS3a16b msgKJ/VkTzjKf1FunndY32FN22OFqh34h8daAms2SMHHyzg3tODNOsD+q2tT3ZRx m+w+WUR81gVVxRCj7ADc+UwdfCraqJBbLwYBVO0ZBomOZXQcSYa4gw== MIICxDCCAi2gAwIBAgIBADANBgkqhkiG9w0BAQUFADBRMQswCQYDVQQGEwJGUjEc MBoGA1UEChMTdW5pdmVyc2l0ZSBSZW5uZXMgMTEkMCIGA1UEAxMbd2lmaXNydnNo aWIudW5pdi1yZW5uZXMxLmZyMB4XDTA5MTAwNTA5NDA0N1oXDTI5MDkzMDA5NDA0 N1owUTELMAkGA1UEBhMCRlIxHDAaBgNVBAoTE3VuaXZlcnNpdGUgUmVubmVzIDEx JDAiBgNVBAMTG3dpZmlzcnZzaGliLnVuaXYtcmVubmVzMS5mcjCBnzANBgkqhkiG 9w0BAQEFAAOBjQAwgYkCgYEAxzmdmjg3UbdcXIHYSHpnLXV2XEyhTZCCLtEoLwTT IQDRFkDTjcjgQ+8d8wJqL2+t5wZVkayiTtNdNXH4Z8cVpACiRmtw0tXuVXZbK8QA 12zBlINyMZ3V5nwIiKHPGJXZeF8il3xRx9eYbHdlk2rnutOv9dxiWzbXwTjlUZ5a w+8CAwEAAaOBqzCBqDAdBgNVHQ4EFgQUU6GBI39b+fuy1HvsNfkkjGAwiDgweQYD VR0jBHIwcIAUU6GBI39b+fuy1HvsNfkkjGAwiDihVaRTMFExCzAJBgNVBAYTAkZS MRwwGgYDVQQKExN1bml2ZXJzaXRlIFJlbm5lcyAxMSQwIgYDVQQDExt3aWZpc3J2 c2hpYi51bml2LXJlbm5lczEuZnKCAQAwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0B AQUFAAOBgQBFiQGd1V7X5oOKG2obijiRh7xpF3Ig0UTCYRNcFcLmjJwehUS3a16b msgKJ/VkTzjKf1FunndY32FN22OFqh34h8daAms2SMHHyzg3tODNOsD+q2tT3ZRx m+w+WUR81gVVxRCj7ADc+UwdfCraqJBbLwYBVO0ZBomOZXQcSYa4gw== MIIEMDCCAxigAwIBAgILAQAAAAABDzh8lLUwDQYJKoZIhvcNAQEFBQAwXzELMAkG A1UEBhMCQkUxEzARBgNVBAoTCkN5YmVydHJ1c3QxFzAVBgNVBAsTDkVkdWNhdGlv bmFsIENBMSIwIAYDVQQDExlDeWJlcnRydXN0IEVkdWNhdGlvbmFsIENBMB4XDTA2 MTEzMDEwNTAyNVoXDTA5MTEzMDEwNTAyNVowVDELMAkGA1UEBhMCRlIxHzAdBgNV BAoTFlVuaXZlcnNpdGUgZGUgUmVubmVzIEkxJDAiBgNVBAMTG3dpZmlzcnZzaGli LnVuaXYtcmVubmVzMS5mcjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAzmq1 20shlSsn1GR0Sen1HhyIQyPONwLWPRVZ9Zmkjo7Kp0jwSjimxbG2EOQQ1bz3LsHj rYmC+XjQPAmp4dqFyQZDRLjDi/JEXqmi0bFMBIEveWUZdJKZSHZ+Wv4vGarJJTsX 6HMMVn0CUayQyDgqnRUG/fRNax4zr8J+cMyJ/B8CAwEAAaOCAXowggF2MFAGA1Ud IARJMEcwRQYHKoZIsT4BADA6MDgGCCsGAQUFBwIBFixodHRwOi8vd3d3Lmdsb2Jh bHNpZ24ubmV0L3JlcG9zaXRvcnkvY3BzLmNmbTAOBgNVHQ8BAf8EBAMCBaAwHwYD VR0jBBgwFoAUZWWjPdc7EaMKByU3yUJKW3Z3UOEwHQYDVR0OBBYEFDwA0tLESpRx 4e8WZ9MGiEhiqn+gMDoGA1UdHwQzMDEwL6AtoCuGKWh0dHA6Ly9jcmwuZ2xvYmFs c2lnbi5uZXQvZWR1Y2F0aW9uYWwuY3JsME8GCCsGAQUFBwEBBEMwQTA/BggrBgEF BQcwAoYzaHR0cDovL3NlY3VyZS5nbG9iYWxzaWduLm5ldC9jYWNlcnQvZWR1Y2F0 aW9uYWwuY3J0MB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAmBgNVHREE HzAdght3aWZpc3J2c2hpYi51bml2LXJlbm5lczEuZnIwDQYJKoZIhvcNAQEFBQAD ggEBAIHZEH616BiYporWjrQaYPg/TKN2+Z5UrFoSTyraz/FeLyxrL2rg2jwtcJWw jKueFPxdkCdtN0tlCaPhIHofqU0qN5wSlI9ZFSZIv1ZJLLyMOI+cUAlrOaq0eTJp zbaMMVyg80KJHk1Buy/8oSJFByBzoB+++KcIfLBPl0D/VAG6u86u46490zAdp1tj mE8eomjQdYagT/O/227NJJ/NTdJpNBDSBN1e4e6e6uyL1sLxK1B1d8XLZ5BfNyMf HqjQGlGAef51GLqOerinIShkoGm1Q0xx4NjQ+vnOqXgU4PRfimaLlbc50Sja7iza 5nW0ZwjycZ7xpGr1gKn2HvJu6xQ= urn:mace:shibboleth:1.0:nameIdentifier Fabrice Jaunet fed-admin@listes.univ-rennes1.fr Raymond Bourges raymond.bourges@univ-rennes1.fr wiki.univ-rennes1.fr CN=wiki.univ-rennes1.fr,O=nom de l organisme,C=FR MIICvDCCAiWgAwIBAgIJANHiQJ6WJHhIMA0GCSqGSIb3DQEBBQUAMEkxCzAJBgNV BAYTAkZSMRswGQYDVQQKExJub20gZGUgbCBvcmdhbmlzbWUxHTAbBgNVBAMTFHdp a2kudW5pdi1yZW5uZXMxLmZyMB4XDTA4MDkwODEyNTEzM1oXDTI4MDkwMzEyNTEz M1owSTELMAkGA1UEBhMCRlIxGzAZBgNVBAoTEm5vbSBkZSBsIG9yZ2FuaXNtZTEd MBsGA1UEAxMUd2lraS51bml2LXJlbm5lczEuZnIwgZ8wDQYJKoZIhvcNAQEBBQAD gY0AMIGJAoGBAMgZ+b4nmBcZOcQkun+Clm11ivHnlBtNE4iuImn0fbsmOgtdGKvG Twf8NoLQFNd/MdqIg8PL52iziNUs9cYYXYLl1J16CYoBSzqLkMxjAgXRbYJMfQKX b4W8AP8jQma6trDi+yLElJF50WbRKtkB95SJ8yTO9fW8gSq1i6kvBgB3AgMBAAGj gaswgagwHQYDVR0OBBYEFEmtueQJypOgukIW85QcyL1hUV/cMHkGA1UdIwRyMHCA FEmtueQJypOgukIW85QcyL1hUV/coU2kSzBJMQswCQYDVQQGEwJGUjEbMBkGA1UE ChMSbm9tIGRlIGwgb3JnYW5pc21lMR0wGwYDVQQDExR3aWtpLnVuaXYtcmVubmVz MS5mcoIJANHiQJ6WJHhIMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEA Jx/+IN3vtrF5KNVGhiKPrKE3vHIQDLuP6zNYh2vdfJFfADGQPD886OLNDQCNe8Ur X5TV0jFYOiu5DW6hoA6CM/bDSOOmXcxqog5GbJH1Mi7V9Tv6tbVRpCiqK3pWsVr+ vyU7Bna0O8o2QZrjIxWD3dnDSw84HjOmfrVsaFflIl8= wiki.univ-rennes1.fr CN=wiki.univ-rennes1.fr,O=nom de l organisme,C=FR MIICvDCCAiWgAwIBAgIJANHiQJ6WJHhIMA0GCSqGSIb3DQEBBQUAMEkxCzAJBgNV BAYTAkZSMRswGQYDVQQKExJub20gZGUgbCBvcmdhbmlzbWUxHTAbBgNVBAMTFHdp a2kudW5pdi1yZW5uZXMxLmZyMB4XDTA4MDkwODEyNTEzM1oXDTI4MDkwMzEyNTEz M1owSTELMAkGA1UEBhMCRlIxGzAZBgNVBAoTEm5vbSBkZSBsIG9yZ2FuaXNtZTEd MBsGA1UEAxMUd2lraS51bml2LXJlbm5lczEuZnIwgZ8wDQYJKoZIhvcNAQEBBQAD gY0AMIGJAoGBAMgZ+b4nmBcZOcQkun+Clm11ivHnlBtNE4iuImn0fbsmOgtdGKvG Twf8NoLQFNd/MdqIg8PL52iziNUs9cYYXYLl1J16CYoBSzqLkMxjAgXRbYJMfQKX b4W8AP8jQma6trDi+yLElJF50WbRKtkB95SJ8yTO9fW8gSq1i6kvBgB3AgMBAAGj gaswgagwHQYDVR0OBBYEFEmtueQJypOgukIW85QcyL1hUV/cMHkGA1UdIwRyMHCA FEmtueQJypOgukIW85QcyL1hUV/coU2kSzBJMQswCQYDVQQGEwJGUjEbMBkGA1UE ChMSbm9tIGRlIGwgb3JnYW5pc21lMR0wGwYDVQQDExR3aWtpLnVuaXYtcmVubmVz MS5mcoIJANHiQJ6WJHhIMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEA Jx/+IN3vtrF5KNVGhiKPrKE3vHIQDLuP6zNYh2vdfJFfADGQPD886OLNDQCNe8Ur X5TV0jFYOiu5DW6hoA6CM/bDSOOmXcxqog5GbJH1Mi7V9Tv6tbVRpCiqK3pWsVr+ vyU7Bna0O8o2QZrjIxWD3dnDSw84HjOmfrVsaFflIl8= uhb.fr univ-rennes2.fr univ-haute-bretagne.fr MIIEKTCCAxGgAwIBAgILAQAAAAABIcmdsYQwDQYJKoZIhvcNAQEFBQAwXzELMAkG A1UEBhMCQkUxEzARBgNVBAoTCkN5YmVydHJ1c3QxFzAVBgNVBAsTDkVkdWNhdGlv bmFsIENBMSIwIAYDVQQDExlDeWJlcnRydXN0IEVkdWNhdGlvbmFsIENBMB4XDTA5 MDYxMDA5MDYyMloXDTEyMDYxMDA5MDYyMlowVzELMAkGA1UEBhMCRlIxLDAqBgNV BAoTI1VuaXZlcnNpdGUgUmVubmVzIElJIEhhdXRlIEJyZXRhZ25lMRowGAYDVQQD ExFzaGliYm9sZXRoLnVoYi5mcjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA qNZx58MkRYXf11pW7ZeA/7N+BFe3Ff5TYX/fHAtfz7vKxhC8OIXAxvzAQTxGOuCv tk7UpktVK2AB+/xRk2vEn66615VpuhG3XnEfNuK14PW6skmOCUoRX+oxGZ+ce2NU A8l9ccGiX0TrDkP6Cm/kGxjQ0xhA1vmMIfM78XK7e90CAwEAAaOCAXAwggFsMFAG A1UdIARJMEcwRQYHKoZIsT4BADA6MDgGCCsGAQUFBwIBFixodHRwOi8vd3d3Lmds b2JhbHNpZ24ubmV0L3JlcG9zaXRvcnkvY3BzLmNmbTAOBgNVHQ8BAf8EBAMCBaAw HwYDVR0jBBgwFoAUZWWjPdc7EaMKByU3yUJKW3Z3UOEwHQYDVR0OBBYEFPJsyXOw NZrpAVYcWlb2Q977LtVYMDoGA1UdHwQzMDEwL6AtoCuGKWh0dHA6Ly9jcmwuZ2xv YmFsc2lnbi5uZXQvZWR1Y2F0aW9uYWwuY3JsME8GCCsGAQUFBwEBBEMwQTA/Bggr BgEFBQcwAoYzaHR0cDovL3NlY3VyZS5nbG9iYWxzaWduLm5ldC9jYWNlcnQvZWR1 Y2F0aW9uYWwuY3J0MB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAcBgNV HREEFTATghFzaGliYm9sZXRoLnVoYi5mcjANBgkqhkiG9w0BAQUFAAOCAQEAPGHU ccQSrHiTgRDoMcIVdbrYJ81UQTUIKgNtAjzr3vAP+StRxrQ3Qhc+mbGlhpM3JeEO Lww7aHepT5CQ/2FIVD8QlqwsswMXAC6R1nant2i8kXXGkbMpasVFdPsz6UTTwdQ0 RytsTKo7A7Mxj5o5hZ2EefCYVB0fxV2Dve5nlvbjcalgXpH4QfFQENyvFv89KrAI wjAeD+MWeH4dKB0soK4y4o21PChx0G1XvylcqIUXucVL4ev4a/K8w3cmX0o1hbEY AXHsbPEHvWOF+hrb4nejBGXMg7K+cY+NXA/OyZXxh+i6rXxbMTwdeSB7vGFEZbEK oPjMz1HGG/xFbczYqg== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Rennes 2 - Haute Bretagne Université de Rennes 2 - Haute Bretagne http://unknown.site.com Yann andre admin-unix@uhb.fr Sylvain Costard admin-unix@uhb.fr MIIEkjCCA3qgAwIBAgIRAIwu87xGOjOtMDwXyuNFQf4wDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0xMDA1MTEwMDAwMDBaFw0xMzA1MTAyMzU5NTlaMGwxCzAJBgNV BAYTAkZSMQswCQYDVQQIEwJmcjEPMA0GA1UEBxMGUmVubmVzMSwwKgYDVQQKEyNV TklWRVJTSVRFIFJFTk5FUyBJSSBIQVVURSBCUkVUQUdORTERMA8GA1UEAxQIKi51 aGIuZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDCoIfsXv6meSwr RSuspZLhRdiLoysEHb2wapbKq3E7xZ8xxgJGlLG757ZOUo5YoDuvJNBnFjq/u0Of bjZP6YWPMB+emK31Eb0kBt9fE3wwmCUa2I6c27uQxpUM/THPyLozbQrLnoqtCn3U 8XweYIYNTQsPGM3ncLU7BGiaR+8wJ41NFecdhyDrZUKl4Arzh0beUBTZVciVeZZt jYV8Ov9JJb8uoMWmY9D9pOROloItaZWKkxizNOi+rMi0dVzsMXd5AGN6I0wAKtnU Duju79iEnnAYyWTkxA4s9lkkeuDsTSuZtlPEHRmPEE6/X/G+a0Bbjacc6ITCMP8F 1bDTvw5PAgMBAAGjggFjMIIBXzAfBgNVHSMEGDAWgBQMvZNoDPPeq6NJays3V0fq kOO57TAdBgNVHQ4EFgQU0A13QDwp5cAyDzMCZqO3nwDbrqUwDgYDVR0PAQH/BAQD AgWgMAwGA1UdEwEB/wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMC MBgGA1UdIAQRMA8wDQYLKwYBBAGyMQECAh0wOgYDVR0fBDMwMTAvoC2gK4YpaHR0 cDovL2NybC50Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcmwwbQYIKwYBBQUH AQEEYTBfMDUGCCsGAQUFBzAChilodHRwOi8vY3J0LnRjcy50ZXJlbmEub3JnL1RF UkVOQVNTTENBLmNydDAmBggrBgEFBQcwAYYaaHR0cDovL29jc3AudGNzLnRlcmVu YS5vcmcwGwYDVR0RBBQwEoIIKi51aGIuZnKCBnVoYi5mcjANBgkqhkiG9w0BAQUF AAOCAQEAZ3qH6Hwen517l+h18DRV9sZwT2FmduGPJuE/0xBDl/9pCC7Z3JcreyIL vRBu7AtZoEK5a5IekQtYxDwn2YjYxFZws+qJ1vmJnRlQ2E+RkBkEpDOazgCcXUSY GSyHoPPERy+4gyymfjrAvtBQxfaANCMyMRH78esc73NPzoqrPGXfnKZO5RBCnEGm C8N7bS1u4ZqBp1VNJQ5IjxdovfHBpCKshd4vWDIqIItGIRJY6eB07Rb5bj/UVSKn woOn1UrRVUxoVfPCp7Iv56N2uwiI2oH2umfW+MM8ynETOdLUid/O4WWYo2ICb7tN EWCGczL/uIhlQuSvoB/GwTs3RuSg/Q== MIIEkjCCA3qgAwIBAgIRAIwu87xGOjOtMDwXyuNFQf4wDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0xMDA1MTEwMDAwMDBaFw0xMzA1MTAyMzU5NTlaMGwxCzAJBgNV BAYTAkZSMQswCQYDVQQIEwJmcjEPMA0GA1UEBxMGUmVubmVzMSwwKgYDVQQKEyNV TklWRVJTSVRFIFJFTk5FUyBJSSBIQVVURSBCUkVUQUdORTERMA8GA1UEAxQIKi51 aGIuZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDCoIfsXv6meSwr RSuspZLhRdiLoysEHb2wapbKq3E7xZ8xxgJGlLG757ZOUo5YoDuvJNBnFjq/u0Of bjZP6YWPMB+emK31Eb0kBt9fE3wwmCUa2I6c27uQxpUM/THPyLozbQrLnoqtCn3U 8XweYIYNTQsPGM3ncLU7BGiaR+8wJ41NFecdhyDrZUKl4Arzh0beUBTZVciVeZZt jYV8Ov9JJb8uoMWmY9D9pOROloItaZWKkxizNOi+rMi0dVzsMXd5AGN6I0wAKtnU Duju79iEnnAYyWTkxA4s9lkkeuDsTSuZtlPEHRmPEE6/X/G+a0Bbjacc6ITCMP8F 1bDTvw5PAgMBAAGjggFjMIIBXzAfBgNVHSMEGDAWgBQMvZNoDPPeq6NJays3V0fq kOO57TAdBgNVHQ4EFgQU0A13QDwp5cAyDzMCZqO3nwDbrqUwDgYDVR0PAQH/BAQD AgWgMAwGA1UdEwEB/wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMC MBgGA1UdIAQRMA8wDQYLKwYBBAGyMQECAh0wOgYDVR0fBDMwMTAvoC2gK4YpaHR0 cDovL2NybC50Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcmwwbQYIKwYBBQUH AQEEYTBfMDUGCCsGAQUFBzAChilodHRwOi8vY3J0LnRjcy50ZXJlbmEub3JnL1RF UkVOQVNTTENBLmNydDAmBggrBgEFBQcwAYYaaHR0cDovL29jc3AudGNzLnRlcmVu YS5vcmcwGwYDVR0RBBQwEoIIKi51aGIuZnKCBnVoYi5mcjANBgkqhkiG9w0BAQUF AAOCAQEAZ3qH6Hwen517l+h18DRV9sZwT2FmduGPJuE/0xBDl/9pCC7Z3JcreyIL vRBu7AtZoEK5a5IekQtYxDwn2YjYxFZws+qJ1vmJnRlQ2E+RkBkEpDOazgCcXUSY GSyHoPPERy+4gyymfjrAvtBQxfaANCMyMRH78esc73NPzoqrPGXfnKZO5RBCnEGm C8N7bS1u4ZqBp1VNJQ5IjxdovfHBpCKshd4vWDIqIItGIRJY6eB07Rb5bj/UVSKn woOn1UrRVUxoVfPCp7Iv56N2uwiI2oH2umfW+MM8ynETOdLUid/O4WWYo2ICb7tN EWCGczL/uIhlQuSvoB/GwTs3RuSg/Q== MIIEMDCCAxigAwIBAgILAQAAAAABDlpKvIgwDQYJKoZIhvcNAQEFBQAwXzELMAkG A1UEBhMCQkUxEzARBgNVBAoTCkN5YmVydHJ1c3QxFzAVBgNVBAsTDkVkdWNhdGlv bmFsIENBMSIwIAYDVQQDExlDeWJlcnRydXN0IEVkdWNhdGlvbmFsIENBMB4XDTA2 MTAxODA3MjAxN1oXDTA5MTAxODA3MjAxN1owXDELMAkGA1UEBhMCRlIxLzAtBgNV BAoTJlVuaXZlcnNpdGUgZGUgUmVubmVzIElJIEhhdXRlIEJyZXRhZ25lMRwwGgYD VQQDExNwcm94eS52cG5zc2wudWhiLmZyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB iQKBgQCpQ01zQd7s5wJ2vcaBrnWV2sWzPUu8K2xHlcKR7WzCDetvO/B2JhqjdN7e lDtPfP8Ko8jdbFtYsxfBgh75sQA4wYHKeUWz/WdTGm7APa3Q09C4QM8RLSoU1uiS 7D0KcmPfEZfDFOINCTLKp4W3yknstkVcXm90Eq9+QLhlByD4KQIDAQABo4IBcjCC AW4wUAYDVR0gBEkwRzBFBgcqhkixPgEAMDowOAYIKwYBBQUHAgEWLGh0dHA6Ly93 d3cuZ2xvYmFsc2lnbi5uZXQvcmVwb3NpdG9yeS9jcHMuY2ZtMA4GA1UdDwEB/wQE AwIFoDAfBgNVHSMEGDAWgBRlZaM91zsRowoHJTfJQkpbdndQ4TAdBgNVHQ4EFgQU bZLB2xrFY5nJyPss2diLZtQeaWowOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2Ny bC5nbG9iYWxzaWduLm5ldC9lZHVjYXRpb25hbC5jcmwwTwYIKwYBBQUHAQEEQzBB MD8GCCsGAQUFBzAChjNodHRwOi8vc2VjdXJlLmdsb2JhbHNpZ24ubmV0L2NhY2Vy dC9lZHVjYXRpb25hbC5jcnQwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMC MB4GA1UdEQQXMBWCE3Byb3h5LnZwbnNzbC51aGIuZnIwDQYJKoZIhvcNAQEFBQAD ggEBAITUNFtzFkUOyEBunJZNjRh3vXQVcekl+WsaClSijJlZLFaDmTBEPvjQ2bhn GkYmzp1sio8PpMJBJ84YJlaKgyhYGlge95LXER1wOq548rAKhzbfeCDnWhuo05eR VlDo7FhyWa59EOHNgiD7d6JiAXTiR7rKLVEMSuSySTXYxli9zNTLrdMLODud5NFv mI0L86sYkDiUkzTGR5qUfQOEdgVDWx3x393htI3KWbmxqQcFpH24aBRcaThexRzO cdjRa+CFQtuxp0+4HwjLi5jibM8TQUUDZJOSAtBntydkxX+ETS5a/Exe9CVfSuQN e9RTEEJFg8l60lxPB01RTexr+e0= urn:mace:shibboleth:1.0:nameIdentifier Hubert Ulliac admin-unix@uhb.fr Yann Andre yann.andre@uhb.fr *.uhb.fr CN=*.uhb.fr,O=Universite Rennes II Haute Bretagne,C=FR MIIEFzCCAv+gAwIBAgILAQAAAAABIVLfy5owDQYJKoZIhvcNAQEFBQAwXzELMAkG A1UEBhMCQkUxEzARBgNVBAoTCkN5YmVydHJ1c3QxFzAVBgNVBAsTDkVkdWNhdGlv bmFsIENBMSIwIAYDVQQDExlDeWJlcnRydXN0IEVkdWNhdGlvbmFsIENBMB4XDTA5 MDUxODA3NDI1NFoXDTEyMDUxODA3NDI1NFowTjELMAkGA1UEBhMCRlIxLDAqBgNV BAoTI1VuaXZlcnNpdGUgUmVubmVzIElJIEhhdXRlIEJyZXRhZ25lMREwDwYDVQQD FAgqLnVoYi5mcjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAqm+rL07xkOeA kSC66+LPIx3P8LqULUfYwRUuvCuXtQUm7QxdU9hot+PmznxYVdGB2YRK0jvSko/I LlJobE8yji34ZIjb6f2mCpK+O1rqHq0OEeyAaS3DInNrMJulwnntkDterrrFWQYc 9vb3IHZ6N9htC9lxaQgRTmSYRiob5B8CAwEAAaOCAWcwggFjMFAGA1UdIARJMEcw RQYHKoZIsT4BADA6MDgGCCsGAQUFBwIBFixodHRwOi8vd3d3Lmdsb2JhbHNpZ24u bmV0L3JlcG9zaXRvcnkvY3BzLmNmbTAOBgNVHQ8BAf8EBAMCBaAwHwYDVR0jBBgw FoAUZWWjPdc7EaMKByU3yUJKW3Z3UOEwHQYDVR0OBBYEFMMKWeRBN9UDw6pKBM7x CLWhVlQXMDoGA1UdHwQzMDEwL6AtoCuGKWh0dHA6Ly9jcmwuZ2xvYmFsc2lnbi5u ZXQvZWR1Y2F0aW9uYWwuY3JsME8GCCsGAQUFBwEBBEMwQTA/BggrBgEFBQcwAoYz aHR0cDovL3NlY3VyZS5nbG9iYWxzaWduLm5ldC9jYWNlcnQvZWR1Y2F0aW9uYWwu Y3J0MB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjATBgNVHREEDDAKgggq LnVoYi5mcjANBgkqhkiG9w0BAQUFAAOCAQEAdGY8A6VzAnUZ36/DwP4ZQruR8xde MoxhOPJIHgDyUyEhEGIp0Xc4jGRSjrKF5zQwcmmnWKSqciGIgjJWHMFt3IvFoXAl pjS9plzJaHds1LxCVmBrGpg88HTXa9g1SNWgHLP79W1UvlZ3ANPbT8yHiODaMyLV lFXS+jNGN/eaC/y8gwVhLIntgRjIT1h+w3EdufSucOFAx961H+EqAuEVu023z9ju bGsalJdMhAQUtqWRtQMItrS7QXH7IgVU6/AlRUxccb13Ia38bvyDNcnF77zAtURG o3/KKaMQrlOkYZAiStvu/ZCeFVDsGUkVs5JFPQGwEHPWMpM/idEDkrg+6A== univ-rouen.fr MIIDTDCCAjSgAwIBAgIVANjzRplW9J/iq7xLYmIILBLBtfAXMA0GCSqGSIb3DQEB BQUAMCMxITAfBgNVBAMTGGFuZHJvbWVkZTIudW5pdi1yb3Vlbi5mcjAeFw0wOTA2 MDQwODM4NTlaFw0yOTA2MDQwODM4NTlaMCMxITAfBgNVBAMTGGFuZHJvbWVkZTIu dW5pdi1yb3Vlbi5mcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALzC SmbAdHkXT30FAHJmyT8iek46CHpTIv03laf8AlR5LCyCuJ1uIsXWHtLNKZ4I3yYc oJIvpZc0jNXBFLIGpNhrfuW3C8DdRU/ZBPN4DnyLkZw1lJKzsgXHvdGskEe/zke0 i3qKphv5v0rMCv8wdKjzqrhoL5SdE8GLQZku8W9n7zSVwOe+yTaO2jWa9afnN4Du DgtvlMb9AaLBIA9+0rmo3oYjsnznOTHsoagwtcXKiLtgx1+ufcSP00Py2/++B1hy 5I/lIgrSP+Saurco1Ss2PXUykS5doyDBNGDhpd6OlM4HSJP/NO3HnkAc4VklsnOc W/+XIeaI8TUScJa8xQMCAwEAAaN3MHUwVAYDVR0RBE0wS4IYYW5kcm9tZWRlMi51 bml2LXJvdWVuLmZyhi9odHRwczovL2FuZHJvbWVkZTIudW5pdi1yb3Vlbi5mci9p ZHAvc2hpYmJvbGV0aDAdBgNVHQ4EFgQULMPM1uyZRCqx7RuPMI2NylGz43AwDQYJ KoZIhvcNAQEFBQADggEBAEKnjzhll1L0WPe8LtlvtHWfUWZfQN4jPYlx33Qdfscz u+mVeD1UKkUiJoG4LxOIo2nNsKzIagygy4XiAs09BdPh8EUKjll/PjWN8uDpQdHw tWe0mchXe76dIgDGBDkdMeqy/lrf/WLaXNEMRvid0H1qjCxA0ISRjWG5FiKO+2vA rZ8qrZgH+gzyWEcuNYOPUUUaef6/L3sp9YAd2MJmDnjlc+a502FpdJ6sMrMKnd4L 5ENON4U3mQ1On6VoEJhR6rPTcEJHTJChUrpxQU8vkFROYb7rK/w8Y/FUI9IvN4ol PmKtqaWeNatDUqezi68xJjibDQmhyFv0OLlA8tu0ae4= urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Rouen Université de Rouen http://unknown.site.com Gouvernet webteam@univ-rouen.fr Moulin webteam@univ-rouen.fr MIICpzCCAhCgAwIBAgIJAIOjioTedgPAMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNV BAYTAkZSMRMwEQYDVQQKEwp1bml2LXJvdWVuMR4wHAYDVQQDExVsaXNpZXV4LnVu aXYtcm91ZW4uZnIwHhcNMTAwMjIzMTQzMTU1WhcNMzAwMjE4MTQzMTU1WjBCMQsw CQYDVQQGEwJGUjETMBEGA1UEChMKdW5pdi1yb3VlbjEeMBwGA1UEAxMVbGlzaWV1 eC51bml2LXJvdWVuLmZyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJTw8V LOPV56sVUUjzyHZaXOwislRv8sWmPApwMXdaB0k0c4hO4bwAVH71VCUcIoyd8P2e N4Qk88XyuZ06maVRjrB8qvfAoe3JykpM3QmGq+uPo8McincjcB1uRW4eYR5cL84j sRoeQbuQ9rW3QRt60PLoE5JNzbcSsNB5aTcWmwIDAQABo4GkMIGhMB0GA1UdDgQW BBQRhZ+T1M7X1Un3ZU6QKlt9Her6TzByBgNVHSMEazBpgBQRhZ+T1M7X1Un3ZU6Q Klt9Her6T6FGpEQwQjELMAkGA1UEBhMCRlIxEzARBgNVBAoTCnVuaXYtcm91ZW4x HjAcBgNVBAMTFWxpc2lldXgudW5pdi1yb3Vlbi5mcoIJAIOjioTedgPAMAwGA1Ud EwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAokOD7/oF9nG87I68MdQssqQpVKCt SKRxMG81ntpSVpSIaclm8XHexR0QlbqgNcAqJZwWAPFZNp50j1bhhUMUlXqyipQm gOutU2hymAnFy7v+MtVWWlcslE3SD40n7OZ2iR1IMSQvjv2GFtFMgOqKNhw+H+YR AWHbqmAlR0o8S1Q= MIICpzCCAhCgAwIBAgIJAIOjioTedgPAMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNV BAYTAkZSMRMwEQYDVQQKEwp1bml2LXJvdWVuMR4wHAYDVQQDExVsaXNpZXV4LnVu aXYtcm91ZW4uZnIwHhcNMTAwMjIzMTQzMTU1WhcNMzAwMjE4MTQzMTU1WjBCMQsw CQYDVQQGEwJGUjETMBEGA1UEChMKdW5pdi1yb3VlbjEeMBwGA1UEAxMVbGlzaWV1 eC51bml2LXJvdWVuLmZyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJTw8V LOPV56sVUUjzyHZaXOwislRv8sWmPApwMXdaB0k0c4hO4bwAVH71VCUcIoyd8P2e N4Qk88XyuZ06maVRjrB8qvfAoe3JykpM3QmGq+uPo8McincjcB1uRW4eYR5cL84j sRoeQbuQ9rW3QRt60PLoE5JNzbcSsNB5aTcWmwIDAQABo4GkMIGhMB0GA1UdDgQW BBQRhZ+T1M7X1Un3ZU6QKlt9Her6TzByBgNVHSMEazBpgBQRhZ+T1M7X1Un3ZU6Q Klt9Her6T6FGpEQwQjELMAkGA1UEBhMCRlIxEzARBgNVBAoTCnVuaXYtcm91ZW4x HjAcBgNVBAMTFWxpc2lldXgudW5pdi1yb3Vlbi5mcoIJAIOjioTedgPAMAwGA1Ud EwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAokOD7/oF9nG87I68MdQssqQpVKCt SKRxMG81ntpSVpSIaclm8XHexR0QlbqgNcAqJZwWAPFZNp50j1bhhUMUlXqyipQm gOutU2hymAnFy7v+MtVWWlcslE3SD40n7OZ2iR1IMSQvjv2GFtFMgOqKNhw+H+YR AWHbqmAlR0o8S1Q= urn:mace:shibboleth:1.0:nameIdentifier gouvernet francois.gouvernet@univ-rouen.fr equipe systeme systeme@univ-rouen.fr univ-st-etienne.fr MIIDWDCCAkCgAwIBAgIVAM60eJPNg42CHzM+jgGiPUF8XxVEMA0GCSqGSIb3DQEB BQUAMCYxJDAiBgNVBAMTG2lwZC10ZXN0LnVuaXYtc3QtZXRpZW5uZS5mcjAeFw0x MDAxMjcxMzMzMTNaFw0zMDAxMjcxMzMzMTNaMCYxJDAiBgNVBAMTG2lwZC10ZXN0 LnVuaXYtc3QtZXRpZW5uZS5mcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC ggEBAL/9p3g2bat/dj9BdEBKhJMfh6ruQAb/WENj8VDd69vd0qlg7gBFdcUAlrWu lWbGxIGSike4JKk/BflJvJsOw56tqdVOgX574nhz74t7wq3bb4oy4+z6QBU4D4fi s81DGmDlYLM+99wTXEeXu6U7MYUoHve76yRLP3tJ/JupT4JVmfWLbmfWpWdaIXTu GIMhPPuZ+tlZyVMUy4Yisj1+hxJkC0XbZ/Tt0k/U6ibmFw2RgMZ4e9I/F5XAAuIL ntj94ucDfkak5IjzdazgL2hyPhRs5HCl8fM02xH3Hiy54o6/ol4Bht3KUotnQ7hf dYDxIxHdAkHqDx7rQuSpyTSZckECAwEAAaN9MHswWgYDVR0RBFMwUYIbaXBkLXRl c3QudW5pdi1zdC1ldGllbm5lLmZyhjJodHRwczovL2lwZC10ZXN0LnVuaXYtc3Qt ZXRpZW5uZS5mci9pZHAvc2hpYmJvbGV0aDAdBgNVHQ4EFgQU71M58iX9SWskgRx3 iaqLJvvFm+swDQYJKoZIhvcNAQEFBQADggEBAKcebag8459paefinfIIkTj5eZPx 7PMt8G3Qn2wdSOCdUqi+wB/ouR9R005RJe2MEZgixUNc2umwTZuO3MR5Rc4+TjyI XzRKyPJ2OmxEL3ly8pKUd0a3fXJZTOikICLLYezOdV2V/QLheIvMfZlhZ1uUhVGB 0uoJRHu/zdhfGClj4eYML47y5EanadjY3nQ91GcDYxFeEFIGtcy+xp+CbEeFeqEH J/tcRGvcPSvO9TGVGz+0YVsDmcGrfiHcokztEZ6Z7ADLep/iXMTpS331wYizQ7Oc I5j1CmAlzfvcYGPy6fOMCjINmd75Sez4RvGbVAQE/tRIM+6ButzQ6Lymrk4= MIIC4TCCAkqgAwIBAgIJAKP6b3sDhrcdMA0GCSqGSIb3DQEBBQUAMFUxEjAQBgoJ kiaJk/IsZAEZFgJGUjEeMBwGCgmSJomT8ixkARkWDlVOSVYtU1QtRVRJRU5FMR8w HQYDVQQDExZpZHAudW5pdi1zdC1ldGllbm5lLmZyMB4XDTEwMDIwNTE0MjkzNVoX DTMwMDEzMTE0MjkzNVowVTESMBAGCgmSJomT8ixkARkWAkZSMR4wHAYKCZImiZPy LGQBGRYOVU5JVi1TVC1FVElFTkUxHzAdBgNVBAMTFmlkcC51bml2LXN0LWV0aWVu bmUuZnIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAK230ru2DZhNVr4lLk97 HkWLsOkkO5aBM7H6APtlLV7UAKcxPk9sOnDcbe/xtONRGBhPtFoiW2MmyywbrJkc afOmUQnOvAbs3n/4lDwdecln+BjTpvU+n6xr7TDzCdV+gOcG6N2kF3pGHpPSvEHi 3ZrO0AInO/PFfy/ycbdiAl1hAgMBAAGjgbgwgbUwHQYDVR0OBBYEFHSHvTF7w+i2 SyZzd/bSNCg0VAWUMIGFBgNVHSMEfjB8gBR0h70xe8Potksmc3f20jQoNFQFlKFZ pFcwVTESMBAGCgmSJomT8ixkARkWAkZSMR4wHAYKCZImiZPyLGQBGRYOVU5JVi1T VC1FVElFTkUxHzAdBgNVBAMTFmlkcC51bml2LXN0LWV0aWVubmUuZnKCCQCj+m97 A4a3HTAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBAHynvHowT2/OUT69 1iIuxxfOmCxO5EgELXu8rELm2TZqMoFrrnTI0KjJuI8biewAaz502Fl8sJU0AiPd 9OKy/g/dfPh8JsUiUfimXwjLr+x0o0R0a3MPUt9v+KpdB/p59Taa3zSHn0nJhc6o Uo0ryH7NTSXhOWxZyz9Mao/M9HHX urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Saint-Etienne - Jean Monnet Université de Saint-Etienne - Jean Monnet http://unknown.site.com Mounier Olivier olivier.mounier@univ-st-etienne.fr Valeille Jean-François jean.francois.valeille@univ-st-etienne.fr univ-savoie.fr MIIEozCCA4ugAwIBAgIRAI4l0qeSwD721XynyynW3cMwDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0xMDAxMDgwMDAwMDBaFw0xMzAxMDcyMzU5NTlaMHIxCzAJBgNV BAYTAkZSMREwDwYDVQQHEwhHcmVub2JsZTEqMCgGA1UECgwhVW5pdmVyc2l0w6kg UGllcnJlIE1lbmTDqHMgRnJhbmNlMSQwIgYDVQQDExtmZWRlcmF0aW9uLnVwbWYt Z3Jlbm9ibGUuZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC1LOes Rv4NAi3lZrezozKe/hb2w9zVX5VuxIIx+aoQmjnNtcXPJOmafyE14e1vEtMpo1hU /RheUZeTI/ErvWxPh+1OTaYHkaOB8cwpIDSz1EgJp6lQv/nEex/iNSH/cocCCNcc qQLdpKaeDk37l41CiCL04BAB6D9oauBf7LAXv+nfCD9kBkEcu2HXqNn0jdSlUZhA BEHcqXOusqWFu/+DFx81CZQxgpz69aCszYmgul+0mjo9JQA7YuPfYPUbDeGwkseM ZTDRuavRPN8kAecUdEyWhNxyiHmAoTF0MpcUWS6lcgbBvtyjws4/7D2IgrEkXvw+ VhE6qZokMRVFniv3AgMBAAGjggFuMIIBajAfBgNVHSMEGDAWgBQMvZNoDPPeq6NJ ays3V0fqkOO57TAdBgNVHQ4EFgQUBu+XcJzseO2x3VqaW3AStmtIBH0wDgYDVR0P AQH/BAQDAgWgMAwGA1UdEwEB/wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG AQUFBwMCMBgGA1UdIAQRMA8wDQYLKwYBBAGyMQECAh0wOgYDVR0fBDMwMTAvoC2g K4YpaHR0cDovL2NybC50Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcmwwbQYI KwYBBQUHAQEEYTBfMDUGCCsGAQUFBzAChilodHRwOi8vY3J0LnRjcy50ZXJlbmEu b3JnL1RFUkVOQVNTTENBLmNydDAmBggrBgEFBQcwAYYaaHR0cDovL29jc3AudGNz LnRlcmVuYS5vcmcwJgYDVR0RBB8wHYIbZmVkZXJhdGlvbi51cG1mLWdyZW5vYmxl LmZyMA0GCSqGSIb3DQEBBQUAA4IBAQB54CGL7v56BQCGQnx2i1IwwNMaHGBeRkaa uoZhl/rCVa+T8J2f/3GvsqqP6ebixhbM6vb6cAdj1LZ7zeQ+MoMtRvwCSK1l6CVL Qvkel4O5LJ8NtNn2kN4YSfqs2lfNAn7pBNvbPHf+2+AHJeEW0b/N0g8WWN0Tlfm5 qaw9j+NslVtHqIrFktO3uMqQf4MxsMpExYfJBfQo5K9iWvmsYKYcxyurUDfd/DM2 foqI/gQjYsBDs0kX8KvSyw6qBdmwLbWjn8MXv7Kujt+WCn6avYGogj2y6gCe5oMU 1/tCmqjXVgNZfBz5hWp7Zku7qvEMbAwUOH8vQlFrn1+BMPLsjZ8F MIIEOTCCAyGgAwIBAgILAQAAAAABGwdDsEIwDQYJKoZIhvcNAQEFBQAwXzELMAkG A1UEBhMCQkUxEzARBgNVBAoTCkN5YmVydHJ1c3QxFzAVBgNVBAsTDkVkdWNhdGlv bmFsIENBMSIwIAYDVQQDExlDeWJlcnRydXN0IEVkdWNhdGlvbmFsIENBMB4XDTA4 MDcwOTEwMDAxM1oXDTExMDcwOTEwMDAxM1owXTELMAkGA1UEBhMCRlIxKDAmBgNV BAoTH1VuaXZlcnNpdGUgUGllcnJlIE1lbmRlcyBGcmFuY2UxJDAiBgNVBAMTG2Zl ZGVyYXRpb24udXBtZi1ncmVub2JsZS5mcjCBnzANBgkqhkiG9w0BAQEFAAOBjQAw gYkCgYEA2lt9cUQ0X94yQ3iHuq5rhahsi5XvtrQ4NPycObddIIdf6w/QITwuoyuW xfiy1X+VZTybdZUkEMo/cIEpeG6oewNjtnXtRPl54zyi4rSHJM1N07EEkyY6n1Oz W0j4ubYBXFXG2kbRsWMntn0J2EqW4FmiY7rGs+tYmJf60xtKfR8CAwEAAaOCAXow ggF2MFAGA1UdIARJMEcwRQYHKoZIsT4BADA6MDgGCCsGAQUFBwIBFixodHRwOi8v d3d3Lmdsb2JhbHNpZ24ubmV0L3JlcG9zaXRvcnkvY3BzLmNmbTAOBgNVHQ8BAf8E BAMCBaAwHwYDVR0jBBgwFoAUZWWjPdc7EaMKByU3yUJKW3Z3UOEwHQYDVR0OBBYE FOjgSw6AqMx6cK8l2xPKPubZTuMzMDoGA1UdHwQzMDEwL6AtoCuGKWh0dHA6Ly9j cmwuZ2xvYmFsc2lnbi5uZXQvZWR1Y2F0aW9uYWwuY3JsME8GCCsGAQUFBwEBBEMw QTA/BggrBgEFBQcwAoYzaHR0cDovL3NlY3VyZS5nbG9iYWxzaWduLm5ldC9jYWNl cnQvZWR1Y2F0aW9uYWwuY3J0MB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcD AjAmBgNVHREEHzAdghtmZWRlcmF0aW9uLnVwbWYtZ3Jlbm9ibGUuZnIwDQYJKoZI hvcNAQEFBQADggEBAFOUXIN6AxybKM4kNMFdso2WdwC5wX+qfwqEBueYu+4XgYRa EAcG1+MDR33HXXhmrBuLI7j2c23b7LJIhNiNl7NHU9R7oW33b6/0tntMS2bn+kmD tR4rDDLf4bO0s1a8RpBTbu+WqCflcH8wriqWkn1Do5Ix81ThGYYGbG7zaRssCDXl HWda5k9ypj3t4ajMPFVgKfAU4gYVWqvvTqEnzO6oLemKkOiT5bEjm4MSKmiYkrPB 7XYNnfgFsKbhz7BgRYMTUBNjVT7V1wn9/Zg6BzzQHFOntOBNHwYmFZQxp9wpCjeZ pFWD1cKlPq7eD1zfKQZyD2sVmSNnryqGM5E4NiQ= urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Savoie Université de Savoie http://unknown.site.com Harbine Christophe admin@univ-savoie.fr Yoann Mitaine admin@univ-savoie.fr unistra.fr u-strasbg.fr MIIDJDCCAgygAwIBAgIVAJL1uSgdsDY7/9L6gFGKRCNK7RlQMA0GCSqGSIb3DQEB BQUAMBkxFzAVBgNVBAMTDmlkcC51bmlzdHJhLmZyMB4XDTEwMTEzMDAxMDc0NFoX DTMwMTEzMDAxMDc0NFowGTEXMBUGA1UEAxMOaWRwLnVuaXN0cmEuZnIwggEiMA0G CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCfZvr54LdhidtcpIinb+VVc0nvNi7G RzVhLGmaWBEe2l/imU0NK+p8Sci4O06Dl17fSfEYh/ymT/X8fzs0ZBL67kmRjKW/ 4LrdaKPISuuBdAQu1ecMw6o5nHvPm8lChQs7+FPuKyHEOdGXU6YJdYcGVZWHGvm3 YK0qZ5HocND7LYGhcTob083wQPtUm8TVisZSBBw/aY4uxQ3aPHqp20vLVlIWpyQH GBVusUsL30y4phRpvGMOhbBUjowba3Ig6cLGxhjmx2z42FoG95nF6NDRyPImp6cP dY3MFGFGOHb7o0eTkp2VpaCNwLDKUZq7IxxEg51BjAISYr4RlclDRlC1AgMBAAGj YzBhMEAGA1UdEQQ5MDeCDmlkcC51bmlzdHJhLmZyhiVodHRwczovL2lkcC51bmlz dHJhLmZyL2lkcC9zaGliYm9sZXRoMB0GA1UdDgQWBBTwSTX+NtpwVFWBJtPaXA23 OEBp1jANBgkqhkiG9w0BAQUFAAOCAQEAhb+7SoxpdMH42J5nFMEXwNAxpPWKVjPq W5zgM3a3W3NSrL6R4j149IMn8YC+WrrfUnWiPYMO0+tEzTxvmL/SQRnV2kQumXN9 Q32B6gTG1pinL1lcxrkO0FI1zcj/adE+2LkrTy3krQu2hkpO2CRYqE+ddzRNWdXd Z6Ym1zSD1ELYVcd6rOjyMA4yXW+8EM9K3P83Xy+o3SkIKd9tZzGv0qfy3CPW+v7V 2Onsdu1A6uvdXVKl8r10oLIRXNp3LzhqFwhyiFzcRmgfOStZPHXzxSM/N9T8d+We gN8WbEdGuWT0j11MYdJkWDRArMdtVtI8aHXkmMCvAuttFvJib8Nzog== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Strasbourg Université de Strasbourg http://unknown.site.com Jean Benoit jean@unistra.fr Eric Decornod decornod@unistra.fr MIIDDzCCAfegAwIBAgIJAIgj9VNfcdVjMA0GCSqGSIb3DQEBBQUAMCMxITAfBgNV BAMTGHNpZmFjLXByb3h5LnUtc3RyYXNiZy5mcjAeFw0xMDEyMTAxNDAxNDRaFw0y MDEyMDcxNDAxNDRaMCMxITAfBgNVBAMTGHNpZmFjLXByb3h5LnUtc3RyYXNiZy5m cjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMl6ZRoLUln8Q5UZJTU0 +po8oObiZab7vIKkeR4zmvrZ+HCBMJFHWSaGxeG7GAETFOkC1/E6kf5ti5PguDha ywDgX/+i3JGOhQeLxpIRELqAqwN/PBOCwoTnfCUv6AtuKoelbBph8oBUD9qRv8HX eNDtHQZtdKUjWq+BLYByhQNXetcEMjV7WT/12RLk1b75szVaTYpsCF2ew1f/caMu BkjfoxUfMQAxKnvTr4T5S6TbQNYbP1PhN9AVEfstqvIRpE6xODUmgJ6HXyAQWwFF eVlEiKUEV2hQ5UxQzbwMmE9E8WFk0C9WZHclwMrw0OZo842p9eZCzcVY8OriCCF3 UpMCAwEAAaNGMEQwIwYDVR0RBBwwGoIYc2lmYWMtcHJveHkudS1zdHJhc2JnLmZy MB0GA1UdDgQWBBS0dD4t/4vAwXnRd0Y/xZCjevEu7DANBgkqhkiG9w0BAQUFAAOC AQEAuBd74P3HnkDBc/bilbTvystYCRGWBeiB363euhf+W4x1hjKXx7OguTtewgYt gNMpjrysBWeuZywQssOcz5LdpiHIro/tVRj8C/K2VLn5L8gto98vG4ZAk3K8+cJd 1RsTGJnJf1tNAahCuPGVqUUHl4CweyQame7dWOr4qfaDJ4JE4M9um8m6IzjcZ97A IgUr+10/ru8AQ3xwsa3BAMgzzUcyjSP3LHXZPWbqH/VikeEldsE8SSRxiT9ekHEV dJs5o251SomkLgQARJ+OvX2FwVIDkUCSFzJJo7u7jjOegBOoOPNR4rK90qkfwaQ+ 1At2jX/JG4pqibe8Lp8hg+rYOg== MIIDDzCCAfegAwIBAgIJAIgj9VNfcdVjMA0GCSqGSIb3DQEBBQUAMCMxITAfBgNV BAMTGHNpZmFjLXByb3h5LnUtc3RyYXNiZy5mcjAeFw0xMDEyMTAxNDAxNDRaFw0y MDEyMDcxNDAxNDRaMCMxITAfBgNVBAMTGHNpZmFjLXByb3h5LnUtc3RyYXNiZy5m cjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMl6ZRoLUln8Q5UZJTU0 +po8oObiZab7vIKkeR4zmvrZ+HCBMJFHWSaGxeG7GAETFOkC1/E6kf5ti5PguDha ywDgX/+i3JGOhQeLxpIRELqAqwN/PBOCwoTnfCUv6AtuKoelbBph8oBUD9qRv8HX eNDtHQZtdKUjWq+BLYByhQNXetcEMjV7WT/12RLk1b75szVaTYpsCF2ew1f/caMu BkjfoxUfMQAxKnvTr4T5S6TbQNYbP1PhN9AVEfstqvIRpE6xODUmgJ6HXyAQWwFF eVlEiKUEV2hQ5UxQzbwMmE9E8WFk0C9WZHclwMrw0OZo842p9eZCzcVY8OriCCF3 UpMCAwEAAaNGMEQwIwYDVR0RBBwwGoIYc2lmYWMtcHJveHkudS1zdHJhc2JnLmZy MB0GA1UdDgQWBBS0dD4t/4vAwXnRd0Y/xZCjevEu7DANBgkqhkiG9w0BAQUFAAOC AQEAuBd74P3HnkDBc/bilbTvystYCRGWBeiB363euhf+W4x1hjKXx7OguTtewgYt gNMpjrysBWeuZywQssOcz5LdpiHIro/tVRj8C/K2VLn5L8gto98vG4ZAk3K8+cJd 1RsTGJnJf1tNAahCuPGVqUUHl4CweyQame7dWOr4qfaDJ4JE4M9um8m6IzjcZ97A IgUr+10/ru8AQ3xwsa3BAMgzzUcyjSP3LHXZPWbqH/VikeEldsE8SSRxiT9ekHEV dJs5o251SomkLgQARJ+OvX2FwVIDkUCSFzJJo7u7jjOegBOoOPNR4rK90qkfwaQ+ 1At2jX/JG4pqibe8Lp8hg+rYOg== urn:mace:shibboleth:1.0:nameIdentifier Jean Benoit jean@unistra.fr Raymond Uhlmann raymond.uhlmann@unistra.fr utt.fr MIIDMDCCAhigAwIBAgIVALZ63CJZA7jvuPJPdCpjCqCwtzUcMA0GCSqGSIb3DQEBBQUAMBwxGjAY BgNVBAMTEXNoaWJib2xldGgudXR0LmZyMB4XDTA5MDgxMzE1Mzc0NVoXDTI5MDgxMzE1Mzc0NVow HDEaMBgGA1UEAxMRc2hpYmJvbGV0aC51dHQuZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK AoIBAQDRy7HRMvRk5btG8GGPHKQVA6k3fFlikIFGHJx+B7Uo+kNdQInrMcixfhrqY8bnu66ljQKB vZ0yMEZfXJTofRfqBePOgtHEwLcgqQm68kRr4q8oLUdS/+XpK4EdPW6UIrFmA1KkcOfC/Jysn4f7 KoFKDpTFmNnl7TGVu9GM/tl3yKGFEbuH8kNvG3uaJJVC59ZE2s/xoMcslriXytje2WP4F95DEYVn ddkYaw86ZHjjxVumcz7nndInsI8j5EVseK8Ch7cSqlmNA44GJ0kdikv4CphntgBIOvoG2ZvvAIW4 DGFdMhZieqtwQ2FEKRxAujWY/Sxq6Zsd5anLj7DL8s09AgMBAAGjaTBnMEYGA1UdEQQ/MD2CEXNo aWJib2xldGgudXR0LmZyhihodHRwczovL3NoaWJib2xldGgudXR0LmZyL2lkcC9zaGliYm9sZXRo MB0GA1UdDgQWBBSt5O7Bubm1wxc8OOwz6hgpfVwMtTANBgkqhkiG9w0BAQUFAAOCAQEApDpM7DKM 7GJs3m+yjN9xIaAVIIUAe+pcIybt8E02fa4+QVaB2RdPvCTgL3cfLZ2ONMEbMqYlWJz0J41P/TaZ x4Sxqv/ih2F1pmFks5UUaMbapNzOX3lL1FfBc718kTLAPLt4m9Gm741A/kx83CS0Q2U4mLXp8I5f fYMgN8FRoxHJOGsBSGs11nl32pzAiai069ZutsSp2mdyRovyNHS2Oxdumai87AHr1JiC3C8mwvQm Sh/3RmGTbPNeXL1AL2zzeKPcSqsEISEVUNbqQFKs37kcfAvy05jGGcfNHtq5GALqx/qhBeXMiVEB BcaKxmhZ8LPhUPppbcjFuLXlaNAphQ== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient utt.fr MIIDMDCCAhigAwIBAgIVALZ63CJZA7jvuPJPdCpjCqCwtzUcMA0GCSqGSIb3DQEBBQUAMBwxGjAY BgNVBAMTEXNoaWJib2xldGgudXR0LmZyMB4XDTA5MDgxMzE1Mzc0NVoXDTI5MDgxMzE1Mzc0NVow HDEaMBgGA1UEAxMRc2hpYmJvbGV0aC51dHQuZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK AoIBAQDRy7HRMvRk5btG8GGPHKQVA6k3fFlikIFGHJx+B7Uo+kNdQInrMcixfhrqY8bnu66ljQKB vZ0yMEZfXJTofRfqBePOgtHEwLcgqQm68kRr4q8oLUdS/+XpK4EdPW6UIrFmA1KkcOfC/Jysn4f7 KoFKDpTFmNnl7TGVu9GM/tl3yKGFEbuH8kNvG3uaJJVC59ZE2s/xoMcslriXytje2WP4F95DEYVn ddkYaw86ZHjjxVumcz7nndInsI8j5EVseK8Ch7cSqlmNA44GJ0kdikv4CphntgBIOvoG2ZvvAIW4 DGFdMhZieqtwQ2FEKRxAujWY/Sxq6Zsd5anLj7DL8s09AgMBAAGjaTBnMEYGA1UdEQQ/MD2CEXNo aWJib2xldGgudXR0LmZyhihodHRwczovL3NoaWJib2xldGgudXR0LmZyL2lkcC9zaGliYm9sZXRo MB0GA1UdDgQWBBSt5O7Bubm1wxc8OOwz6hgpfVwMtTANBgkqhkiG9w0BAQUFAAOCAQEApDpM7DKM 7GJs3m+yjN9xIaAVIIUAe+pcIybt8E02fa4+QVaB2RdPvCTgL3cfLZ2ONMEbMqYlWJz0J41P/TaZ x4Sxqv/ih2F1pmFks5UUaMbapNzOX3lL1FfBc718kTLAPLt4m9Gm741A/kx83CS0Q2U4mLXp8I5f fYMgN8FRoxHJOGsBSGs11nl32pzAiai069ZutsSp2mdyRovyNHS2Oxdumai87AHr1JiC3C8mwvQm Sh/3RmGTbPNeXL1AL2zzeKPcSqsEISEVUNbqQFKs37kcfAvy05jGGcfNHtq5GALqx/qhBeXMiVEB BcaKxmhZ8LPhUPppbcjFuLXlaNAphQ== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Technologie de Troyes Université de Technologie de Troyes http://unknown.site.com el galai cri@utt.fr thevenin cri@utt.fr univ-tlse1.fr MIIDLzCCAhegAwIBAgIUPilvhKG9asW5iBwXGK3LzlgR+LEwDQYJKoZIhvcNAQEF BQAwHDEaMBgGA1UEAxMRaWRwLnVuaXYtdGxzZTEuZnIwHhcNMDkwMzI3MDk0MjAz WhcNMjkwMzI3MDg0MjAzWjAcMRowGAYDVQQDExFpZHAudW5pdi10bHNlMS5mcjCC ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJIHpXFdyqYt0SfN/dwBu6Ta wU10Q4ulbdsbnQxK+0pieDm9VMyyq7y2E/EynsuUsTSBsf+BCLshINpagEblCPp9 +OxzmkpFxT58OXogIktWOW1guMwRx5LvhaOl9HB1n4runZE0i8+hnAYeDqz5mFUg XS+kKwJAVLZYvsNR4lGeWzMI3Hi/no7UBrPB0x8mL7bdzow01oUmbP+V1IqkkdCF qMg2hWbS/BZWJ6OvqkAlaWeIA0n2WtizkQ2F9htGClkW+3nVIEiPpdWoFGkkXrCu 2kFFU2/OKJfNC5YDFr5xphA3KDLgYYmfmKRcbxocx8R52DFnA/zxW8tDCXrPrQEC AwEAAaNpMGcwRgYDVR0RBD8wPYIRaWRwLnVuaXYtdGxzZTEuZnKGKGh0dHBzOi8v aWRwLnVuaXYtdGxzZTEuZnIvaWRwL3NoaWJib2xldGgwHQYDVR0OBBYEFABzfss5 ygsF9uAUFvjC13+onMBHMA0GCSqGSIb3DQEBBQUAA4IBAQCFbGtXLAl0KgiUxUIE nEq0u+Qr1JuDP/xS5Cwx1ofQ1KzQ/THuZedZCJKpnMVBYZCwSytswLoC6XjcR7dk H412YoTPJRz+Ypg8eWed1i22OUgKwgePeA+svUsWSAF1FnDcHpIBiEmhhoViaDM1 V/6XOPXsnqEPhGbATas170NNL52t9rOy3Dqdh5dXCCM68R57ohQhoOAUPShbmioL ZRtnJAhyLGHntYIMFXGlg3UcuBuhUmrxu6+k814oTtw6QCLkORQlL5ZDd2GcyN85 PHcKgk48JIMIVNYkJ3ZKLmo6T6BN/ajAI03X8Hkul8qJSZ7rU5jmX5D0vdHAgJ9z dWXQ urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Toulouse 1 Sciences Sociales Université de Toulouse 1 Sciences Sociales http://unknown.site.com Frédéric SOULIER reseau@univ-tlse1.fr Xavier MARTY reseau@univ-tlse1.fr univ-tlse3.fr MIIDQzCCAiugAwIBAgIUdyy5eL0UrTjscSSpJnKojdThIJcwDQYJKoZIhvcNAQEF BQAwITEfMB0GA1UEAxMWc2hpYmJvbGV0aC51cHMtdGxzZS5mcjAeFw0wOTA1MTkw NzIzMTNaFw0yOTA1MTkwNzIzMTNaMCExHzAdBgNVBAMTFnNoaWJib2xldGgudXBz LXRsc2UuZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCDSYueWm19 K3YtiKE5xRc4CKFGp/aYCA+JIcqXXK7+ky65enp2ObjeYDf2MOcHyiRCNW122y5p Ek4UXqWk+tagZ2WOGTszb2Rw7WCWIM7Z+bCfwjtTplv3DEFgj+gCAo6nIBbTSLmt sCjT95ZxCXxADhXzfjnrrOls7ySgGLQc5yd/lvnlF5l+EDM8uXqoQtfpxuAhFTUE aXJwSqvV4uEX7eyTJQuYcXerMP0BxURRTKayufMqAs6cIxck8DS28b5x0nnt3zTL JcVsc19rxk7AQT5eSGMQLmdq+FQh6hFX0AMo06/7Qd0z1cTWSXNN8LXD+tTDsHAj vPvpa1SpFyjdAgMBAAGjczBxMFAGA1UdEQRJMEeCFnNoaWJib2xldGgudXBzLXRs c2UuZnKGLWh0dHBzOi8vc2hpYmJvbGV0aC51cHMtdGxzZS5mci9pZHAvc2hpYmJv bGV0aDAdBgNVHQ4EFgQUnJKnH/FGOsBSsn6uVbMZZ0wO/IYwDQYJKoZIhvcNAQEF BQADggEBABgI82Q35fXOPU4JxpA1zRehoH8Y70OZmtDy+OxfoYZ8HHBO1ZXtlFJ6 rSQtUHvPKR8VUZy8/Z4D5/FncTTLf/LOhisWHk/BOXJNV3KfOE8aVcQAZd2BzQtf 396ZSsY0HBdgsEGBoWxuZcUeiaI4wzomtE4OfXRngBccgd6580JerqmON7fLytQK m12tRjMzKjY4oPO8ILrjLxIiigbNF5fYfMsWVQFMBHW6wVlBDpuxKmeZTu/TwuqB 8RPESGgN651QtWiUBwk7Na2WAVQvgcmEwr0BZ+vYq8mymtwQiaXGGY1y51ANm3Lf qveDyh76C64hnLr9Jvlv1+E5QP2YPgo= urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Toulouse 3 - Paul Sabatier Université de Toulouse 3 - Paul Sabatier http://unknown.site.com Pierrette Barbaresco pb@cict.fr Christophe Marteau christophe.marteau@cict.fr univ-tours.fr MIIDLzCCAhegAwIBAgIUVH5OPXLEAtiW4UVmoDzKej0fR7wwDQYJKoZIhvcNAQEF BQAwHDEaMBgGA1UEAxMRaWRwLnVuaXYtdG91cnMuZnIwHhcNMDkwNjA5MTI0NTIx WhcNMjkwNjA5MTI0NTIxWjAcMRowGAYDVQQDExFpZHAudW5pdi10b3Vycy5mcjCC ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJV+FLOks9NmLB17N7XlmI+E r7NgQKavtPYd75TgOu5ubqe2YYD7DoLrQQzalOs7dw7Q2b1Pd+DSbqKjthjdD/wm IrvbA3bddVtU0hurW+wOfcP/aqvODxOL2PjYgRucGu82UfocIxbjDQyKvAhS1wsR tz2p0rLdCGKevDJqeJsSC7JAGolSYmnpZHRRY/86qKuvO/5XxBFUxqAuplOD2Cyk +SgMsyd1eRNgfNf18peOPuK/s7midkIoSNfmffQri/gqlxXrZujj7sYQawU1bAt6 IGxxDfKsyzinTxSj/8wXUfO1YaaSZpoOzQI6s42CvqZf5fnLBAu5G7QmGVPSQL8C AwEAAaNpMGcwRgYDVR0RBD8wPYIRaWRwLnVuaXYtdG91cnMuZnKGKGh0dHBzOi8v aWRwLnVuaXYtdG91cnMuZnIvaWRwL3NoaWJib2xldGgwHQYDVR0OBBYEFCJdjIn0 Y6lWGricZa673uc04sZuMA0GCSqGSIb3DQEBBQUAA4IBAQAGMS23ntdqT1WC7zXy KvER9CkWn8VHr3/j8FgHxJ/Ny5+eAAp348PPgk4FIl5W3JAyg5ZwqZYUET34xXBd C66AZjpoQvuyXEtWWlhama0FFW4UMRKjYxGSFf8BJFmyMk4fRtwolbm9s+MWD4bz ZpQtX9RZhBibLqx6BROOvyVFDsXxT/SbR7sHIlZE4Vd9bis6QE2SAefj6qyehYPL Nm452WAqt1hsasELZYoMp3q/jUFuLwIqk4HaoyP0ugbGZS5S+uf6vrodMvoVwf84 Sf1I3HGOP6+0iyh+HO8fJM+1VZRsIxCJy69Z4uWDSacQOJo7cvj6sXSDRdv2Ecm8 DW4K urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient univ-tours.fr MIIDLzCCAhegAwIBAgIUVH5OPXLEAtiW4UVmoDzKej0fR7wwDQYJKoZIhvcNAQEF BQAwHDEaMBgGA1UEAxMRaWRwLnVuaXYtdG91cnMuZnIwHhcNMDkwNjA5MTI0NTIx WhcNMjkwNjA5MTI0NTIxWjAcMRowGAYDVQQDExFpZHAudW5pdi10b3Vycy5mcjCC ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJV+FLOks9NmLB17N7XlmI+E r7NgQKavtPYd75TgOu5ubqe2YYD7DoLrQQzalOs7dw7Q2b1Pd+DSbqKjthjdD/wm IrvbA3bddVtU0hurW+wOfcP/aqvODxOL2PjYgRucGu82UfocIxbjDQyKvAhS1wsR tz2p0rLdCGKevDJqeJsSC7JAGolSYmnpZHRRY/86qKuvO/5XxBFUxqAuplOD2Cyk +SgMsyd1eRNgfNf18peOPuK/s7midkIoSNfmffQri/gqlxXrZujj7sYQawU1bAt6 IGxxDfKsyzinTxSj/8wXUfO1YaaSZpoOzQI6s42CvqZf5fnLBAu5G7QmGVPSQL8C AwEAAaNpMGcwRgYDVR0RBD8wPYIRaWRwLnVuaXYtdG91cnMuZnKGKGh0dHBzOi8v aWRwLnVuaXYtdG91cnMuZnIvaWRwL3NoaWJib2xldGgwHQYDVR0OBBYEFCJdjIn0 Y6lWGricZa673uc04sZuMA0GCSqGSIb3DQEBBQUAA4IBAQAGMS23ntdqT1WC7zXy KvER9CkWn8VHr3/j8FgHxJ/Ny5+eAAp348PPgk4FIl5W3JAyg5ZwqZYUET34xXBd C66AZjpoQvuyXEtWWlhama0FFW4UMRKjYxGSFf8BJFmyMk4fRtwolbm9s+MWD4bz ZpQtX9RZhBibLqx6BROOvyVFDsXxT/SbR7sHIlZE4Vd9bis6QE2SAefj6qyehYPL Nm452WAqt1hsasELZYoMp3q/jUFuLwIqk4HaoyP0ugbGZS5S+uf6vrodMvoVwf84 Sf1I3HGOP6+0iyh+HO8fJM+1VZRsIxCJy69Z4uWDSacQOJo7cvj6sXSDRdv2Ecm8 DW4K urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Tours Université de Tours http://unknown.site.com Patrice Garnier patrice.garnier@univ-tours.fr univ-valenciennes.fr MIIDSzCCAjOgAwIBAgIUf/+c8ye6SzH67ieu864mtMPYXlswDQYJKoZIhvcNAQEF BQAwIzEhMB8GA1UEAxMYaWRwLnVuaXYtdmFsZW5jaWVubmVzLmZyMB4XDTA5MTAx MzEzMTA0M1oXDTI5MTAxMzEzMTA0M1owIzEhMB8GA1UEAxMYaWRwLnVuaXYtdmFs ZW5jaWVubmVzLmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhhYP J3k8hdOdhcye6mC5zPykjAy9JesMuIR/AYr+tWUpeYNbQeVPyMiqQduhBO08Z1Tz sRV/hsuIYv3eD5O+DXFn6U+sY63CzxQrIQ1SC+hIMlzdw7yvdnlkBodgZg6J7LjF bpJvpwhtFp84cxy0g/s6oUy/CUg4gMWwnsoah+dacay1GSvqOHo1lu9pdptHmK7h VGL5DAsw3Mt3Lb5KK9DlLffd6umayoI9f7Gt8Kouxa1HURuiebxRHmDDJXdzNZ94 6IzRoFE3SUi1z3iGVDv8TDp1XLSUhNdYR8Plm84GHs03F3hIU1MKxEscFTd/U4zs hqKfK/mRqE7OvydIRQIDAQABo3cwdTBUBgNVHREETTBLghhpZHAudW5pdi12YWxl bmNpZW5uZXMuZnKGL2h0dHBzOi8vaWRwLnVuaXYtdmFsZW5jaWVubmVzLmZyL2lk cC9zaGliYm9sZXRoMB0GA1UdDgQWBBTNbFHRtwU+XlpYz+rxvTgavdfoJTANBgkq hkiG9w0BAQUFAAOCAQEAb+WTNz5aJNRd/eYTsbgcd/zQLxPssQUgIfW35D2l37r5 uUI/lTvzCS/XGjleZirVlg1I2BcuLyKNXbyc29OYjWXABBZ3pGX4BD3K+/xEMGwN XMQWw4ZdDDfU9Q7jqRog9WIuOcTb/7fRthOOdRPxOnUdl+XfpAqcqpYGPnqX+mXk VRZHYIjjVYLKY1Ye3jUPg3n4/hldWYSy2TxMlMbudAV01tb5jzz3k4c/AwzA5Q9i sch9WHg5TO5d2L1B6b44aMkefP9u+GBNaLZx1B+hb2b6ZCkxHojPHVeUSi1Hpz17 lHNKGM/S8lXO2ADLPujRZnzHaBVAwxxAlSgX+PHvqw== MIIELjCCAxagAwIBAgILAQAAAAABHCKPrcgwDQYJKoZIhvcNAQEFBQAwXzELMAkG A1UEBhMCQkUxEzARBgNVBAoTCkN5YmVydHJ1c3QxFzAVBgNVBAsTDkVkdWNhdGlv bmFsIENBMSIwIAYDVQQDExlDeWJlcnRydXN0IEVkdWNhdGlvbmFsIENBMB4XDTA4 MDkwMjEwMTU1M1oXDTExMDkwMjEwMTU1M1owVTELMAkGA1UEBhMCRlIxIzAhBgNV BAoTGlVuaXZlcnNpdGUgZGUgVmFsZW5jaWVubmVzMSEwHwYDVQQDExhpZHAudW5p di12YWxlbmNpZW5uZXMuZnIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANSf 5C9eFVHbRpt28W4z/U+bm/VvkgHNdQEZPQ2pqXEEu+iNKJaG8lybcidsRyYvhZ14 6ZYizS5LqJNSidHTmOTl+YPLvlp8vJlTMGHtPSKQ4VMW00SXyR3aSNW1o6BPYsbH QJrymiW258t3vucIJXhvxFUf4Lu/inXi1BbdzJMPAgMBAAGjggF3MIIBczBQBgNV HSAESTBHMEUGByqGSLE+AQAwOjA4BggrBgEFBQcCARYsaHR0cDovL3d3dy5nbG9i YWxzaWduLm5ldC9yZXBvc2l0b3J5L2Nwcy5jZm0wDgYDVR0PAQH/BAQDAgWgMB8G A1UdIwQYMBaAFGVloz3XOxGjCgclN8lCSlt2d1DhMB0GA1UdDgQWBBSU9Be0EaWm H7oW2x/Lx7QpYKy1dTA6BgNVHR8EMzAxMC+gLaArhilodHRwOi8vY3JsLmdsb2Jh bHNpZ24ubmV0L2VkdWNhdGlvbmFsLmNybDBPBggrBgEFBQcBAQRDMEEwPwYIKwYB BQUHMAKGM2h0dHA6Ly9zZWN1cmUuZ2xvYmFsc2lnbi5uZXQvY2FjZXJ0L2VkdWNh dGlvbmFsLmNydDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwIwYDVR0R BBwwGoIYaWRwLnVuaXYtdmFsZW5jaWVubmVzLmZyMA0GCSqGSIb3DQEBBQUAA4IB AQArisANwDwXThEFPPcPSkY0cu9T/j2CpNRBGTqoJoT7LRh1/99B3LRRw0b9l/IO WuJKRxMLzbPjluyIs60LAzCXqbztIB41TgwzeyiHAEo3osVehBR4gFHialPVngDv r9UfbLCo796mLEXz437DiDEyGfTexppm/BFKNJNnb2TvlzKtGHFs78NYXHTeBHvs F2XJpzo8oyTFKRpjM5hWwLNCRina0Clsu07wcMEFtt8VQe7Kuy6eeR87HB/jVLIy NxraMQwWgk4zdVwLLxVBKpz2G67WvqI4vVqjcvavJY7rdKbvV9ImXWltKuJsh8ZU UxhrIap6n+MSA85kMvjxjmUG urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient univ-valenciennes.fr MIIDSzCCAjOgAwIBAgIUf/+c8ye6SzH67ieu864mtMPYXlswDQYJKoZIhvcNAQEF BQAwIzEhMB8GA1UEAxMYaWRwLnVuaXYtdmFsZW5jaWVubmVzLmZyMB4XDTA5MTAx MzEzMTA0M1oXDTI5MTAxMzEzMTA0M1owIzEhMB8GA1UEAxMYaWRwLnVuaXYtdmFs ZW5jaWVubmVzLmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhhYP J3k8hdOdhcye6mC5zPykjAy9JesMuIR/AYr+tWUpeYNbQeVPyMiqQduhBO08Z1Tz sRV/hsuIYv3eD5O+DXFn6U+sY63CzxQrIQ1SC+hIMlzdw7yvdnlkBodgZg6J7LjF bpJvpwhtFp84cxy0g/s6oUy/CUg4gMWwnsoah+dacay1GSvqOHo1lu9pdptHmK7h VGL5DAsw3Mt3Lb5KK9DlLffd6umayoI9f7Gt8Kouxa1HURuiebxRHmDDJXdzNZ94 6IzRoFE3SUi1z3iGVDv8TDp1XLSUhNdYR8Plm84GHs03F3hIU1MKxEscFTd/U4zs hqKfK/mRqE7OvydIRQIDAQABo3cwdTBUBgNVHREETTBLghhpZHAudW5pdi12YWxl bmNpZW5uZXMuZnKGL2h0dHBzOi8vaWRwLnVuaXYtdmFsZW5jaWVubmVzLmZyL2lk cC9zaGliYm9sZXRoMB0GA1UdDgQWBBTNbFHRtwU+XlpYz+rxvTgavdfoJTANBgkq hkiG9w0BAQUFAAOCAQEAb+WTNz5aJNRd/eYTsbgcd/zQLxPssQUgIfW35D2l37r5 uUI/lTvzCS/XGjleZirVlg1I2BcuLyKNXbyc29OYjWXABBZ3pGX4BD3K+/xEMGwN XMQWw4ZdDDfU9Q7jqRog9WIuOcTb/7fRthOOdRPxOnUdl+XfpAqcqpYGPnqX+mXk VRZHYIjjVYLKY1Ye3jUPg3n4/hldWYSy2TxMlMbudAV01tb5jzz3k4c/AwzA5Q9i sch9WHg5TO5d2L1B6b44aMkefP9u+GBNaLZx1B+hb2b6ZCkxHojPHVeUSi1Hpz17 lHNKGM/S8lXO2ADLPujRZnzHaBVAwxxAlSgX+PHvqw== MIIELjCCAxagAwIBAgILAQAAAAABHCKPrcgwDQYJKoZIhvcNAQEFBQAwXzELMAkG A1UEBhMCQkUxEzARBgNVBAoTCkN5YmVydHJ1c3QxFzAVBgNVBAsTDkVkdWNhdGlv bmFsIENBMSIwIAYDVQQDExlDeWJlcnRydXN0IEVkdWNhdGlvbmFsIENBMB4XDTA4 MDkwMjEwMTU1M1oXDTExMDkwMjEwMTU1M1owVTELMAkGA1UEBhMCRlIxIzAhBgNV BAoTGlVuaXZlcnNpdGUgZGUgVmFsZW5jaWVubmVzMSEwHwYDVQQDExhpZHAudW5p di12YWxlbmNpZW5uZXMuZnIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANSf 5C9eFVHbRpt28W4z/U+bm/VvkgHNdQEZPQ2pqXEEu+iNKJaG8lybcidsRyYvhZ14 6ZYizS5LqJNSidHTmOTl+YPLvlp8vJlTMGHtPSKQ4VMW00SXyR3aSNW1o6BPYsbH QJrymiW258t3vucIJXhvxFUf4Lu/inXi1BbdzJMPAgMBAAGjggF3MIIBczBQBgNV HSAESTBHMEUGByqGSLE+AQAwOjA4BggrBgEFBQcCARYsaHR0cDovL3d3dy5nbG9i YWxzaWduLm5ldC9yZXBvc2l0b3J5L2Nwcy5jZm0wDgYDVR0PAQH/BAQDAgWgMB8G A1UdIwQYMBaAFGVloz3XOxGjCgclN8lCSlt2d1DhMB0GA1UdDgQWBBSU9Be0EaWm H7oW2x/Lx7QpYKy1dTA6BgNVHR8EMzAxMC+gLaArhilodHRwOi8vY3JsLmdsb2Jh bHNpZ24ubmV0L2VkdWNhdGlvbmFsLmNybDBPBggrBgEFBQcBAQRDMEEwPwYIKwYB BQUHMAKGM2h0dHA6Ly9zZWN1cmUuZ2xvYmFsc2lnbi5uZXQvY2FjZXJ0L2VkdWNh dGlvbmFsLmNydDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwIwYDVR0R BBwwGoIYaWRwLnVuaXYtdmFsZW5jaWVubmVzLmZyMA0GCSqGSIb3DQEBBQUAA4IB AQArisANwDwXThEFPPcPSkY0cu9T/j2CpNRBGTqoJoT7LRh1/99B3LRRw0b9l/IO WuJKRxMLzbPjluyIs60LAzCXqbztIB41TgwzeyiHAEo3osVehBR4gFHialPVngDv r9UfbLCo796mLEXz437DiDEyGfTexppm/BFKNJNnb2TvlzKtGHFs78NYXHTeBHvs F2XJpzo8oyTFKRpjM5hWwLNCRina0Clsu07wcMEFtt8VQe7Kuy6eeR87HB/jVLIy NxraMQwWgk4zdVwLLxVBKpz2G67WvqI4vVqjcvavJY7rdKbvV9ImXWltKuJsh8ZU UxhrIap6n+MSA85kMvjxjmUG urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Valenciennes Université de Valenciennes http://unknown.site.com FARENEAU Florent fed-admin@univ-valenciennes.fr MIIEvTCCA6WgAwIBAgIRAMtvXsQ+k+nzO0MwBKCxNu0wDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0xMDAzMTAwMDAwMDBaFw0xMzAzMDkyMzU5NTlaMIGKMQswCQYD VQQGEwJGUjEVMBMGA1UEBxMMVmFsZW5jaWVubmVzMT0wOwYDVQQKDDRVbml2ZXJz aXTDqSBkZSBWYWxlbmNpZW5uZXMgZXQgZHUgSGFpbmF1dC1DYW1icsOpc2lzMSUw IwYDVQQDExxlenByb3h5LnVuaXYtdmFsZW5jaWVubmVzLmZyMIIBIjANBgkqhkiG 9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyuWNSXbaefUVgFuVmYTohBi0Ig+y4TagmJVZ RQJOcenWAgfruhAvJimDW+aDubxao9AjN/mp130meMXYU+rqfOnFGLY1BoC8a/OR QfpbLrrNkRtOtiDjzPwidIX1EOdU7NhkaRM8yhxa9PsLZkS30Oj8q6u25iIB9qyY kn9xWIEsSWpx/4Z8AbMs5JJ5ONKODRc6dbvbDcDhqMSqjV5X4ecktvMseQEm6FJz Cl0prPraCxrWZGWxggddFnu45wDY6qr85HugpxxZR1NfOdAw1etjTq1An6BkBAwL /AQ1HwKjC0hueFOCrXgXfMnQNYgCHaua4XEnfDubB13FbnIouQIDAQABo4IBbzCC AWswHwYDVR0jBBgwFoAUDL2TaAzz3qujSWsrN1dH6pDjue0wHQYDVR0OBBYEFBjZ eiphF6zmbPpn4n9OP9EuMb4HMA4GA1UdDwEB/wQEAwIFoDAMBgNVHRMBAf8EAjAA MB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAYBgNVHSAEETAPMA0GCysG AQQBsjEBAgIdMDoGA1UdHwQzMDEwL6AtoCuGKWh0dHA6Ly9jcmwudGNzLnRlcmVu YS5vcmcvVEVSRU5BU1NMQ0EuY3JsMG0GCCsGAQUFBwEBBGEwXzA1BggrBgEFBQcw AoYpaHR0cDovL2NydC50Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcnQwJgYI KwYBBQUHMAGGGmh0dHA6Ly9vY3NwLnRjcy50ZXJlbmEub3JnMCcGA1UdEQQgMB6C HGV6cHJveHkudW5pdi12YWxlbmNpZW5uZXMuZnIwDQYJKoZIhvcNAQEFBQADggEB ABEKalshDvJ7QQe5T/I9IT4li9uTi9h9PuSgyUssr8vMl488VXeDnhFYXEsnq6NX fSoEN/rWsQ82UigI2tO5V+IRigTXkxzCSbWjkcJbGVXCpwMGxBL69edqCDgq/I6t CsZvKZYsef/cikEhQ4UeBpboNdD8P4pyA4nVg7kNIDAqLxK+a++h35T0SsIF9m4J Pbjg7VsrpflOQ0TVclwIzxW72p48oe6PU1Ow746lVdWk9jNeWH4vNLwQnCdP6bW1 rGpWyB0pfdfIW+iE8djGTKzQhfTuKPVw+KRb1xOaU7DYtd5C3/c1bjqjMTAlA4Z4 LJYL32jig9GLa9hMHG/mcZk= MIIEvTCCA6WgAwIBAgIRAMtvXsQ+k+nzO0MwBKCxNu0wDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0xMDAzMTAwMDAwMDBaFw0xMzAzMDkyMzU5NTlaMIGKMQswCQYD VQQGEwJGUjEVMBMGA1UEBxMMVmFsZW5jaWVubmVzMT0wOwYDVQQKDDRVbml2ZXJz aXTDqSBkZSBWYWxlbmNpZW5uZXMgZXQgZHUgSGFpbmF1dC1DYW1icsOpc2lzMSUw IwYDVQQDExxlenByb3h5LnVuaXYtdmFsZW5jaWVubmVzLmZyMIIBIjANBgkqhkiG 9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyuWNSXbaefUVgFuVmYTohBi0Ig+y4TagmJVZ RQJOcenWAgfruhAvJimDW+aDubxao9AjN/mp130meMXYU+rqfOnFGLY1BoC8a/OR QfpbLrrNkRtOtiDjzPwidIX1EOdU7NhkaRM8yhxa9PsLZkS30Oj8q6u25iIB9qyY kn9xWIEsSWpx/4Z8AbMs5JJ5ONKODRc6dbvbDcDhqMSqjV5X4ecktvMseQEm6FJz Cl0prPraCxrWZGWxggddFnu45wDY6qr85HugpxxZR1NfOdAw1etjTq1An6BkBAwL /AQ1HwKjC0hueFOCrXgXfMnQNYgCHaua4XEnfDubB13FbnIouQIDAQABo4IBbzCC AWswHwYDVR0jBBgwFoAUDL2TaAzz3qujSWsrN1dH6pDjue0wHQYDVR0OBBYEFBjZ eiphF6zmbPpn4n9OP9EuMb4HMA4GA1UdDwEB/wQEAwIFoDAMBgNVHRMBAf8EAjAA MB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAYBgNVHSAEETAPMA0GCysG AQQBsjEBAgIdMDoGA1UdHwQzMDEwL6AtoCuGKWh0dHA6Ly9jcmwudGNzLnRlcmVu YS5vcmcvVEVSRU5BU1NMQ0EuY3JsMG0GCCsGAQUFBwEBBGEwXzA1BggrBgEFBQcw AoYpaHR0cDovL2NydC50Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcnQwJgYI KwYBBQUHMAGGGmh0dHA6Ly9vY3NwLnRjcy50ZXJlbmEub3JnMCcGA1UdEQQgMB6C HGV6cHJveHkudW5pdi12YWxlbmNpZW5uZXMuZnIwDQYJKoZIhvcNAQEFBQADggEB ABEKalshDvJ7QQe5T/I9IT4li9uTi9h9PuSgyUssr8vMl488VXeDnhFYXEsnq6NX fSoEN/rWsQ82UigI2tO5V+IRigTXkxzCSbWjkcJbGVXCpwMGxBL69edqCDgq/I6t CsZvKZYsef/cikEhQ4UeBpboNdD8P4pyA4nVg7kNIDAqLxK+a++h35T0SsIF9m4J Pbjg7VsrpflOQ0TVclwIzxW72p48oe6PU1Ow746lVdWk9jNeWH4vNLwQnCdP6bW1 rGpWyB0pfdfIW+iE8djGTKzQhfTuKPVw+KRb1xOaU7DYtd5C3/c1bjqjMTAlA4Z4 LJYL32jig9GLa9hMHG/mcZk= urn:mace:shibboleth:1.0:nameIdentifier Fareneau Florent florent.fareneau@univ-valenciennes.fr uvsq.fr MIIDMzCCAhugAwIBAgIUMO6BFdwk5alVPNeSspXonkZTWeswDQYJKoZIhvcNAQEF BQAwHTEbMBkGA1UEAxMSc2hpYmJvbGV0aC51dnNxLmZyMB4XDTEwMTAwNTExMTQw MFoXDTMwMTAwNTExMTQwMFowHTEbMBkGA1UEAxMSc2hpYmJvbGV0aC51dnNxLmZy MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAo1ZxxeymEkqEnXapufkc UEfhQXv/1iuIwtD+7rcxG6+QJsAM7h+3U6UqmJ76/c2xkkMT2+87E+TYUD2ISZh+ ByajOxOeXJZJAZ+o/pHg4AZy1x+DyNJEweOARipGh4TqWeaUPNCtGzriVmfv5dBp FX3/eh7hLNSUFfOldVWuU2NLV9uWK0XHMIvT89/X3O7wNYI9nPT4vuJMyWkqpAIP TBykD3LFDNyIBzhtVoStJ7/uOAX4L52obU3j3HkuM9uac67pB/7b8FJzRdOHsP+K gxhGIPmFO19IelN8PegCSi3yZy6m3bikydI+SJo5ib8Gq8HKYUcg7SrP+T0NI+M8 LQIDAQABo2swaTBIBgNVHREEQTA/ghJzaGliYm9sZXRoLnV2c3EuZnKGKWh0dHBz Oi8vc2hpYmJvbGV0aC51dnNxLmZyL2lkcC9zaGliYm9sZXRoMB0GA1UdDgQWBBTg inmoBiTrLzklizIwevMDHFTLfzANBgkqhkiG9w0BAQUFAAOCAQEAY4zjJzGjeWdX Mgqsoi30wmKnJFY3nwC2pdPnlwgMxP7PRVG8hmNTNjT3Jo5h5HmTQIPa1RhoCIXw 2FUL8mMkEfxUsXwvn+H5GzmplenZxF2600TSFmx0Ic0+gd3TJCgJcB9N6CrkR1S/ C1FLA1wgCxeTsi+KmGq0JNFvQAHIBwG6SwwHuCVWY97C3gaBpILCbZoeJw31Niw5 5qJF/OGV6Pk7AkhK7ZMH0ptOIL2qiUmkUl4x5nU0Dk81rzc5tQVzHUIUfnzAtayv Xyjj+EyUPnVwCMYCUqwr0lvRau6V0YBulvWeViv9Q8PvP3NHklMpriikJOkRxueN cJdVGhbkcQ== urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de Versailles - Saint Quentin en Yvelines Université de Versailles - Saint Quentin en Yvelines http://unknown.site.com Roland TOUCHAIS sysadm@cri.uvsq.fr Thierry Caillet sysadm@cri.uvsq.fr MIIE5DCCA8ygAwIBAgIRALKpjy5MLDqWEQ17Cpfbm60wDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0xMTAyMDQwMDAwMDBaFw0xNDAyMDMyMzU5NTlaMHwxCzAJBgNV BAYTAkZSMRMwEQYDVQQHEwpWRVJTQUlMTEVTMTswOQYDVQQKEzJVTklWRVJTSVRF IERFIFZFUlNBSUxMRVMgU0FJTlQgUVVFTlRJTiBFTiBZVkVMSU5FUzEbMBkGA1UE AxMSdW5pdm5hdXRlcy51dnNxLmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB CgKCAQEArYkdKO2tGFARnF+/BnrzjkoofRi/AXr9Th4UdG4qIQQFnm87kHvlOahe QkMshBG+SIk/5ijiXT3gWuy33qi5iy5JewBtHhsxIG2vjTmpMw16bmETZaCoZJeu wckNaA44mZJ+xQpsPN6xsQkJ8dU19lZRZXon88KVM255K4aaf+T2rwqBaBM1Z7Zy 8P7r2TnsXgkecARm9RiTbUXDGhgM9NK4mKyCynk/uDZ1A0IryT8hOXIflQKLe16q +yx/nKdb3mmiqVIbzUoXwgJ0GmH0g91Ih1Uzci0FawnPZKPoO/S/aI4aRfF4NWTZ vbZrOfeUCgLsfltjDIHZBQhvzCPlQQIDAQABo4IBpTCCAaEwHwYDVR0jBBgwFoAU DL2TaAzz3qujSWsrN1dH6pDjue0wHQYDVR0OBBYEFLqAVqynAyZLSZEmvciojlFl 5gVdMA4GA1UdDwEB/wQEAwIFoDAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsG AQUFBwMBBggrBgEFBQcDAjAYBgNVHSAEETAPMA0GCysGAQQBsjEBAgIdMDoGA1Ud HwQzMDEwL6AtoCuGKWh0dHA6Ly9jcmwudGNzLnRlcmVuYS5vcmcvVEVSRU5BU1NM Q0EuY3JsMG0GCCsGAQUFBwEBBGEwXzA1BggrBgEFBQcwAoYpaHR0cDovL2NydC50 Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcnQwJgYIKwYBBQUHMAGGGmh0dHA6 Ly9vY3NwLnRjcy50ZXJlbmEub3JnMF0GA1UdEQRWMFSCEnVuaXZuYXV0ZXMudXZz cS5mcoIUZWR1c3BvdC10ZXN0LnV2c3EuZnKCD2VkdXNwb3QudXZzcS5mcoIXdW5p dm5hdXRlcy10ZXN0LnV2c3EuZnIwDQYJKoZIhvcNAQEFBQADggEBAH3ypdJknTeA BjlJdglVegY0CS6H+lyfCgTEGd0XFndKcXOWZ93ACMi09EreGP5BA27tkL6JaYBp wGRJnUDv7xN2WbHaLo5tewFIkpf+4Y3J6dFeHTEj4pQMbZR2Kdz4/RUSJiflttyM I8KTPHRkOCMetRADEAnhoF/hkncJ5nxCrz5H+kf+b1dFruq00Hw8onTm5owSpFmT y1U5IQKSz7YIXvlK7x6193i9hQJwT8ASDbKQNIgrXr0tMqYfgJiPYLP5aSZCA0i6 FHvjN/gqk0RqcW+Na26nWWN3nk+vUpm3hVONO5YJJJu3FPyworZXLzkzB8xHhujb LnwEICOAJFg= MIIE5DCCA8ygAwIBAgIRALKpjy5MLDqWEQ17Cpfbm60wDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0xMTAyMDQwMDAwMDBaFw0xNDAyMDMyMzU5NTlaMHwxCzAJBgNV BAYTAkZSMRMwEQYDVQQHEwpWRVJTQUlMTEVTMTswOQYDVQQKEzJVTklWRVJTSVRF IERFIFZFUlNBSUxMRVMgU0FJTlQgUVVFTlRJTiBFTiBZVkVMSU5FUzEbMBkGA1UE AxMSdW5pdm5hdXRlcy51dnNxLmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB CgKCAQEArYkdKO2tGFARnF+/BnrzjkoofRi/AXr9Th4UdG4qIQQFnm87kHvlOahe QkMshBG+SIk/5ijiXT3gWuy33qi5iy5JewBtHhsxIG2vjTmpMw16bmETZaCoZJeu wckNaA44mZJ+xQpsPN6xsQkJ8dU19lZRZXon88KVM255K4aaf+T2rwqBaBM1Z7Zy 8P7r2TnsXgkecARm9RiTbUXDGhgM9NK4mKyCynk/uDZ1A0IryT8hOXIflQKLe16q +yx/nKdb3mmiqVIbzUoXwgJ0GmH0g91Ih1Uzci0FawnPZKPoO/S/aI4aRfF4NWTZ vbZrOfeUCgLsfltjDIHZBQhvzCPlQQIDAQABo4IBpTCCAaEwHwYDVR0jBBgwFoAU DL2TaAzz3qujSWsrN1dH6pDjue0wHQYDVR0OBBYEFLqAVqynAyZLSZEmvciojlFl 5gVdMA4GA1UdDwEB/wQEAwIFoDAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsG AQUFBwMBBggrBgEFBQcDAjAYBgNVHSAEETAPMA0GCysGAQQBsjEBAgIdMDoGA1Ud HwQzMDEwL6AtoCuGKWh0dHA6Ly9jcmwudGNzLnRlcmVuYS5vcmcvVEVSRU5BU1NM Q0EuY3JsMG0GCCsGAQUFBwEBBGEwXzA1BggrBgEFBQcwAoYpaHR0cDovL2NydC50 Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcnQwJgYIKwYBBQUHMAGGGmh0dHA6 Ly9vY3NwLnRjcy50ZXJlbmEub3JnMF0GA1UdEQRWMFSCEnVuaXZuYXV0ZXMudXZz cS5mcoIUZWR1c3BvdC10ZXN0LnV2c3EuZnKCD2VkdXNwb3QudXZzcS5mcoIXdW5p dm5hdXRlcy10ZXN0LnV2c3EuZnIwDQYJKoZIhvcNAQEFBQADggEBAH3ypdJknTeA BjlJdglVegY0CS6H+lyfCgTEGd0XFndKcXOWZ93ACMi09EreGP5BA27tkL6JaYBp wGRJnUDv7xN2WbHaLo5tewFIkpf+4Y3J6dFeHTEj4pQMbZR2Kdz4/RUSJiflttyM I8KTPHRkOCMetRADEAnhoF/hkncJ5nxCrz5H+kf+b1dFruq00Hw8onTm5owSpFmT y1U5IQKSz7YIXvlK7x6193i9hQJwT8ASDbKQNIgrXr0tMqYfgJiPYLP5aSZCA0i6 FHvjN/gqk0RqcW+Na26nWWN3nk+vUpm3hVONO5YJJJu3FPyworZXLzkzB8xHhujb LnwEICOAJFg= Sabin Galuscan sabin.galuscan@uvsq.fr Roland Touchais roland.touchais@uvsq.fr sympa.uvsq.fr CN=sympa.uvsq.fr MIIC7jCCAdagAwIBAgIJAIquh6koOYLXMA0GCSqGSIb3DQEBBQUAMBgxFjAUBgNV BAMTDXN5bXBhLnV2c3EuZnIwHhcNMTAxMjIyMDkwNzUwWhcNMjAxMjE5MDkwNzUw WjAYMRYwFAYDVQQDEw1zeW1wYS51dnNxLmZyMIIBIjANBgkqhkiG9w0BAQEFAAOC AQ8AMIIBCgKCAQEAwg/GzQhT2RdrCXmzw+MKdvFC7EXOwvsDNxZaH5Lys1S/0v6b B0DQfbmkJvx+5wDAwbNnn6kDGuHxlOnnOIWXUQqLPcBnnxQ4fRyOfEe21nV4oZgY 6aPkhwfl/k30xs0guoINFCQCb6rYvpyUkcyEtUDMea1M4z8FScf5nQfuHywSaYxn F5owPsEXP7gcOZuonIlvncULU/Cvw9dmqdT2H73mHEDDbYsaVYJYZbu6NFxPQfKp 6xI8WfTspjnuU7zJkZfrh0m+B5mOaE6SWV3uUPQuySF7UcSI5hv8hW3CzRSmesEj +FGU6wpSm2C2qJH5Zdu5X63m7YkY3Kothxnq2QIDAQABozswOTAYBgNVHREEETAP gg1zeW1wYS51dnNxLmZyMB0GA1UdDgQWBBTib/toblGweMFXeLKsv2jAYoU1zDAN BgkqhkiG9w0BAQUFAAOCAQEACLpdCq/Z8G+F25dLvpSn6oc1Aj7b3uYk1tBeekVx TMkykIPZ0VVU2gjR6gvIm0+4PhZ7dLmSpe41HjqrYrxrv9y7hqmTf/8KOX0WS7n7 q9Dr9II+HCtXyonWe2IBBGm9spDA/tlOAvXkx4ir/MbnVQ2p+wD57FzpUNMMGQAk H02xPg1MgvK1p2G9Vcl4rX98rpPCn7dxMPJr8kUSmo+mmULlGMcegg1kOhM7+Qd5 DSQTzdkKNFnierkgI/tU9GmhEWeYY9y0isyoPjxgp3wFLDh6T5aa+1seDFWaJVBK jpRzhT0VA8LaNx6rztivo5DzMbenSncnQ9fsbvS7kAihDQ== univ-reunion.fr MIIDODCCAiCgAwIBAgIVAL8dyCz520Rx/kdyqcI4TXpOUd79MA0GCSqGSIb3DQEB BQUAMB4xHDAaBgNVBAMTE2lkcC51bml2LXJldW5pb24uZnIwHhcNMDkwMzE2MTQz OTQ5WhcNMjkwMzE2MTQzOTQ5WjAeMRwwGgYDVQQDExNpZHAudW5pdi1yZXVuaW9u LmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqWm8P30Q7FaWJ7EX QBT412i9UZUVcab0hEu7aVY5y7Oz8SH4Pmnku33as+c1mMb/VC502aU/znQY3neO 1uI/b/4w1FCPLbB3ZVz9klXGuj6/HSxWqYwCLbQQBlwpGACXsrTBfu8b3tK+MSYD K77TXECDQA2U4PFIKnpuBZB6cgJpBORthkKb3tg+oBeWj14CgMz5+2w1ouuRsQ6K GiZXf2z1RiqyODnsDst2ml4RrmQzbDFURJ0gdL6qsaUB+SGJqaabo7iYZZKgK/EA 9+jzXCzG97jAyTyse00LliLMOc5/fAY5GLhkpVV5/9rt0W9mXbbRV4TGA6iaJGKZ 9Y6CtQIDAQABo20wazBKBgNVHREEQzBBghNpZHAudW5pdi1yZXVuaW9uLmZyhipo dHRwczovL2lkcC51bml2LXJldW5pb24uZnIvaWRwL3NoaWJib2xldGgwHQYDVR0O BBYEFBbec4spkaLKldRGAyIDjSfMSJzNMA0GCSqGSIb3DQEBBQUAA4IBAQBSjuGF qqn1aEmcSAArdDkgvmAZbCnvUeZuHUEdXufrZ6JMYGS742f3A6onSAK0WZmyg0Tf bS7YQhEdR3NwlFNhkoCCY0IewEp1pRuKxE+u8VD1372JLCOtIRWTgxvc/VPDdw0C UjQmucMfyAn+/mNiR4XRPqOYm1BXvM4RDwTTmYKvaWhUAjnFgr4LTckjS4z6nMfx hYC3u9/xmqRAR2bDXeRB4poDfLVXfGKureDZPWw72aPvzjJ4XGf/aaHI3AmL5zmR gBZQE0UE++9BzuSgkbANei54g+uo5zgXNgeJT15B9waWhUpo8AMbzOKpXgmCAp51 FChXMMiPA+POOLIC urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient univ-reunion.fr MIIDODCCAiCgAwIBAgIVAL8dyCz520Rx/kdyqcI4TXpOUd79MA0GCSqGSIb3DQEB BQUAMB4xHDAaBgNVBAMTE2lkcC51bml2LXJldW5pb24uZnIwHhcNMDkwMzE2MTQz OTQ5WhcNMjkwMzE2MTQzOTQ5WjAeMRwwGgYDVQQDExNpZHAudW5pdi1yZXVuaW9u LmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqWm8P30Q7FaWJ7EX QBT412i9UZUVcab0hEu7aVY5y7Oz8SH4Pmnku33as+c1mMb/VC502aU/znQY3neO 1uI/b/4w1FCPLbB3ZVz9klXGuj6/HSxWqYwCLbQQBlwpGACXsrTBfu8b3tK+MSYD K77TXECDQA2U4PFIKnpuBZB6cgJpBORthkKb3tg+oBeWj14CgMz5+2w1ouuRsQ6K GiZXf2z1RiqyODnsDst2ml4RrmQzbDFURJ0gdL6qsaUB+SGJqaabo7iYZZKgK/EA 9+jzXCzG97jAyTyse00LliLMOc5/fAY5GLhkpVV5/9rt0W9mXbbRV4TGA6iaJGKZ 9Y6CtQIDAQABo20wazBKBgNVHREEQzBBghNpZHAudW5pdi1yZXVuaW9uLmZyhipo dHRwczovL2lkcC51bml2LXJldW5pb24uZnIvaWRwL3NoaWJib2xldGgwHQYDVR0O BBYEFBbec4spkaLKldRGAyIDjSfMSJzNMA0GCSqGSIb3DQEBBQUAA4IBAQBSjuGF qqn1aEmcSAArdDkgvmAZbCnvUeZuHUEdXufrZ6JMYGS742f3A6onSAK0WZmyg0Tf bS7YQhEdR3NwlFNhkoCCY0IewEp1pRuKxE+u8VD1372JLCOtIRWTgxvc/VPDdw0C UjQmucMfyAn+/mNiR4XRPqOYm1BXvM4RDwTTmYKvaWhUAjnFgr4LTckjS4z6nMfx hYC3u9/xmqRAR2bDXeRB4poDfLVXfGKureDZPWw72aPvzjJ4XGf/aaHI3AmL5zmR gBZQE0UE++9BzuSgkbANei54g+uo5zgXNgeJT15B9waWhUpo8AMbzOKpXgmCAp51 FChXMMiPA+POOLIC urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université de la Réunion Université de la Réunion http://unknown.site.com Laurent PEQUIN fed-idp@univ-reunion.fr Matthieu BANNIER fed-idp@univ-reunion.fr univ-lehavre.fr MIIDODCCAiCgAwIBAgIVAKVZEzNuUG9OyP1vnILb2oaJys+2MA0GCSqGSIb3DQEB BQUAMB4xHDAaBgNVBAMTE2lkcC51bml2LWxlaGF2cmUuZnIwHhcNMTAwMjAxMDc0 MTAyWhcNMzAwMjAxMDc0MTAyWjAeMRwwGgYDVQQDExNpZHAudW5pdi1sZWhhdnJl LmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhJ6/Nn9ySl33BpPd S6L9nanWg1w/xaTcjsv0XSZXmLToc2iP0tpNg0VYok5SrFzl+Hw+4QtDvHVTmWLu wssMqg0mUHqnObwJE+/KKIN0Olchhpod2YfKbhko6w0QRSA57BkkUa4IPzlnJY58 Nhz6ZdKn8tiA5NibD7K8JSaP3eurVgO2GKSpz62oQBFLAZNP7WPNC2kRIT6X8D9J NgreBINUGhAAsPzv7TmUK5L6lOipeLY3nQMwyOKCYUNViKonkZKE0lxNHWTPMIR0 8DvVBbFMxn9IjAc+RRuCT24WrJrUhVGI1D+n+aDOgnSdxfFOVjb+grrLbsRRI/lj 9hRezQIDAQABo20wazBKBgNVHREEQzBBghNpZHAudW5pdi1sZWhhdnJlLmZyhipo dHRwczovL2lkcC51bml2LWxlaGF2cmUuZnIvaWRwL3NoaWJib2xldGgwHQYDVR0O BBYEFG9bkcW0TdTyz6LDBdJArcI+NflfMA0GCSqGSIb3DQEBBQUAA4IBAQBHfdlt GfykSuvsXF1U3BZHLuZb8rsSBNXjkYJ/cAa8owWXMeQ0Z/YFiylsVzuexflm8Zeh mvHVJK1IKyUGlNq8XEDxKW+Z9qdaFrXkASExQACMsrITYiYjS51mr14AUsbpJ9VX bzqXS0On3K9tjgVXUV4CxkHbb1Ce+9x6lEjtna3Tw4WsNleuz2tWVvB2SecmeCJk 9rl3+lSEotK7cepJY/AzW9wVBDfFI03j1u7GxY2hlD8r3jEII78lLNQzxUBTYUEf Kh1cWQw98Mp+EFgBRhkOjAzOXC58eYmrzBUXqK6y49R2AyBcZZ/uEigEinRINPi7 TLwIDMskmL3PeTdF urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient univ-lehavre.fr MIIDODCCAiCgAwIBAgIVAKVZEzNuUG9OyP1vnILb2oaJys+2MA0GCSqGSIb3DQEB BQUAMB4xHDAaBgNVBAMTE2lkcC51bml2LWxlaGF2cmUuZnIwHhcNMTAwMjAxMDc0 MTAyWhcNMzAwMjAxMDc0MTAyWjAeMRwwGgYDVQQDExNpZHAudW5pdi1sZWhhdnJl LmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhJ6/Nn9ySl33BpPd S6L9nanWg1w/xaTcjsv0XSZXmLToc2iP0tpNg0VYok5SrFzl+Hw+4QtDvHVTmWLu wssMqg0mUHqnObwJE+/KKIN0Olchhpod2YfKbhko6w0QRSA57BkkUa4IPzlnJY58 Nhz6ZdKn8tiA5NibD7K8JSaP3eurVgO2GKSpz62oQBFLAZNP7WPNC2kRIT6X8D9J NgreBINUGhAAsPzv7TmUK5L6lOipeLY3nQMwyOKCYUNViKonkZKE0lxNHWTPMIR0 8DvVBbFMxn9IjAc+RRuCT24WrJrUhVGI1D+n+aDOgnSdxfFOVjb+grrLbsRRI/lj 9hRezQIDAQABo20wazBKBgNVHREEQzBBghNpZHAudW5pdi1sZWhhdnJlLmZyhipo dHRwczovL2lkcC51bml2LWxlaGF2cmUuZnIvaWRwL3NoaWJib2xldGgwHQYDVR0O BBYEFG9bkcW0TdTyz6LDBdJArcI+NflfMA0GCSqGSIb3DQEBBQUAA4IBAQBHfdlt GfykSuvsXF1U3BZHLuZb8rsSBNXjkYJ/cAa8owWXMeQ0Z/YFiylsVzuexflm8Zeh mvHVJK1IKyUGlNq8XEDxKW+Z9qdaFrXkASExQACMsrITYiYjS51mr14AUsbpJ9VX bzqXS0On3K9tjgVXUV4CxkHbb1Ce+9x6lEjtna3Tw4WsNleuz2tWVvB2SecmeCJk 9rl3+lSEotK7cepJY/AzW9wVBDfFI03j1u7GxY2hlD8r3jEII78lLNQzxUBTYUEf Kh1cWQw98Mp+EFgBRhkOjAzOXC58eYmrzBUXqK6y49R2AyBcZZ/uEigEinRINPi7 TLwIDMskmL3PeTdF urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université du Havre Université du Havre http://unknown.site.com AUGER Géraldine geraldine.auger@univ-lehavre.fr COIRRE Mickaël mickael.coirre@univ-lehavre.fr univ-littoral.fr MIIEmTCCA4GgAwIBAgIQNpYV+0q076RVhq9vmZRQ+DANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTEwMDEwNzAwMDAwMFoXDTEzMDEwNjIzNTk1OVowcDELMAkGA1UE BhMCRlIxEjAQBgNVBAcTCUR1bmtlcnF1ZTEuMCwGA1UECgwlVW5pdmVyc2l0w6kg ZHUgTGl0dG9yYWwgQ8O0dGUgZCdPcGFsZTEdMBsGA1UEAxMUaWRwLnVuaXYtbGl0 dG9yYWwuZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDFN1xJBItC vBt4knmQ8KL9bIdE/Yv8EZJwUMmYf++f2b2RFjE2soBocszLWcZ+quqSbZDQPsY2 JujFa8R3whpl08u7LcNTp6KLuh4yLYd/tDaGMMR71HVdKVCqrfJGlyjnW0DRBDRB rNkACsplQ8Wr1WkGYco23Vvrlwq4n+Qquth4Xekkle5G/BmSZF9+kVbsrYQaXUiI leRaR3wCvfyxKDy8XnbqrU+HaWvC6kows9RxmjCi9cYEWPHXS4qQ4HCDLc3p8CEX tUyNQf19DgZcb818aEslvoxynVe5pWbA2pab3J3B2DnIU5jx+Ehcn46SjUTKRb+J 8ZsGaqUuEiYhAgMBAAGjggFnMIIBYzAfBgNVHSMEGDAWgBQMvZNoDPPeq6NJays3 V0fqkOO57TAdBgNVHQ4EFgQUSD9mGXXrZO7cy8URPaeoW6aW2fMwDgYDVR0PAQH/ BAQDAgWgMAwGA1UdEwEB/wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUF BwMCMBgGA1UdIAQRMA8wDQYLKwYBBAGyMQECAh0wOgYDVR0fBDMwMTAvoC2gK4Yp aHR0cDovL2NybC50Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcmwwbQYIKwYB BQUHAQEEYTBfMDUGCCsGAQUFBzAChilodHRwOi8vY3J0LnRjcy50ZXJlbmEub3Jn L1RFUkVOQVNTTENBLmNydDAmBggrBgEFBQcwAYYaaHR0cDovL29jc3AudGNzLnRl cmVuYS5vcmcwHwYDVR0RBBgwFoIUaWRwLnVuaXYtbGl0dG9yYWwuZnIwDQYJKoZI hvcNAQEFBQADggEBAHqmDSP8dBvNyB/gjkjZ8UW2Adyc6Qgb58XpKcR81tbmsCeC 9vF5IZFawucCNLXk7btI6YG3RRM9jMDIB1vLjWawqzv38OJcwGx45BeZdKAinjbP +CH5i6OymdC10ubFTt2fn0O/PB85r9UtrNghieDqx3rOmdnMenCp4iwj1K5OKDVE eWxjgJM/CWtaOwp/WWryTvTo85ZIvtgI6ejTSaDqHcJBftitunJawQrdixijaWpB RjIAXHurXBitq29gYTxwLspYLpYBWUykotkfhu19lZpmgQVF43Ll1saLE4EhB9tk PXRmrWMW/YbGP711MGAIUhDdGKBmZUWgZ73cI+I= MIIEHzCCAwegAwIBAgILAQAAAAABGgWZXuQwDQYJKoZIhvcNAQEFBQAwXzELMAkG A1UEBhMCQkUxEzARBgNVBAoTCkN5YmVydHJ1c3QxFzAVBgNVBAsTDkVkdWNhdGlv bmFsIENBMSIwIAYDVQQDExlDeWJlcnRydXN0IEVkdWNhdGlvbmFsIENBMB4XDTA4 MDUyMDA5MTE0OFoXDTExMDUyMDA5MTE0OFowSjELMAkGA1UEBhMCRlIxHDAaBgNV BAoTE1VuaXZlcnNpdGUgTGl0dG9yYWwxHTAbBgNVBAMTFGlkcC51bml2LWxpdHRv cmFsLmZyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDPoekX8+Vu1QpIRKfs mB2z0xhVpez8d8zQywuznmQqCql+IVK8S0bqCEKTG5SkDVG0qUyW+a0Rg/M6HAXZ DXgU2mWcErVk5DyIVnvqne4zS7d8kOxtMoY5KqY2mVKaxPBkuToDzcOY2uaOKUsH FQGksSaut9teGUnoai/zQzac2QIDAQABo4IBczCCAW8wUAYDVR0gBEkwRzBFBgcq hkixPgEAMDowOAYIKwYBBQUHAgEWLGh0dHA6Ly93d3cuZ2xvYmFsc2lnbi5uZXQv cmVwb3NpdG9yeS9jcHMuY2ZtMA4GA1UdDwEB/wQEAwIFoDAfBgNVHSMEGDAWgBRl ZaM91zsRowoHJTfJQkpbdndQ4TAdBgNVHQ4EFgQUjf0VTWOhg5AbqUpHUHZxpjY1 6cEwOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9l ZHVjYXRpb25hbC5jcmwwTwYIKwYBBQUHAQEEQzBBMD8GCCsGAQUFBzAChjNodHRw Oi8vc2VjdXJlLmdsb2JhbHNpZ24ubmV0L2NhY2VydC9lZHVjYXRpb25hbC5jcnQw HQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMB8GA1UdEQQYMBaCFGlkcC51 bml2LWxpdHRvcmFsLmZyMA0GCSqGSIb3DQEBBQUAA4IBAQB8e+hNqbjAeRkbPbvn aLhTacR3BgAoIqAYniqOTPjb3nHMydtcILR16I+s7t1vf0M0f6ePCeb8aR9ILvt3 M1v4TehZ+1XrL3EQGD2zgDmzISmulejxZOM9J95w12Y29Peyx6HAvEsxx3PMcDxZ SJ+fnu2xBneemtvCb650rfM560GZS/+8p8QkZoGgFNI2ByOWqnfl1JMa4VSQryPr 6L2FVHWVqxKF/IORwny3w1UPcjFf72UUXfUfnw0OfdPNj9OGuMOl+Eyu8Dq66mKC cFcFX2bCsfE0IFI1iG+99gZ7vr+19GD1Z3TZoiPLUcKiauxah8ZgvDMkh/C9xjjw oK3j urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université du Littoral Côte d'Opale Université du Littoral Côte d'Opale http://unknown.site.com Christine Pierri fed-admin@univ-littoral.fr MIICuTCCAiKgAwIBAgIJAJR/xKVtbD8IMA0GCSqGSIb3DQEBBQUAMEgxCzAJBgNV BAYTAkZSMRwwGgYDVQQKExNVbml2ZXJzaXRlIGR1IE1haW5lMRswGQYDVQQDExJz aWQudW5pdi1sZW1hbnMuZnIwHhcNMTEwMjE4MTEwNjI0WhcNMzEwMjEzMTEwNjI0 WjBIMQswCQYDVQQGEwJGUjEcMBoGA1UEChMTVW5pdmVyc2l0ZSBkdSBNYWluZTEb MBkGA1UEAxMSc2lkLnVuaXYtbGVtYW5zLmZyMIGfMA0GCSqGSIb3DQEBAQUAA4GN ADCBiQKBgQCyJGNN2YSD0Uqj8MuUH5p7MWPM5350xAncknQkRPZVGMne1Z49sLYn 3krzdDv35l7rJluwjY38ie5NQ5AlAEX28MofHf/IzEp1uWWZZtM9PltUsxEGbuHm ceXRpNhtZ6KA7DBwRNqKlWGE7kzepway4Z0hcLSCMR4gHYViqATKRwIDAQABo4Gq MIGnMB0GA1UdDgQWBBTpiJow5PG2ZBDyiL64NNIVqbFWdTB4BgNVHSMEcTBvgBTp iJow5PG2ZBDyiL64NNIVqbFWdaFMpEowSDELMAkGA1UEBhMCRlIxHDAaBgNVBAoT E1VuaXZlcnNpdGUgZHUgTWFpbmUxGzAZBgNVBAMTEnNpZC51bml2LWxlbWFucy5m coIJAJR/xKVtbD8IMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAEXeI qh/edLIY1Ntmc3JrLRN5lJH7ECJlBB9NdopxTOrUSDOBf2jUDP46Z/mmRsK4jAPP Hu3LItDw8xOErXogen+ZO2uqq8S9h3fy4IwJ/SBTrBvkZ+DkYOwcZgXUgWtwLD0r mQsjVXESTAJqspo0HqqO/pQG7DZCnl4p3Cwj8RQ= MIICuTCCAiKgAwIBAgIJAJR/xKVtbD8IMA0GCSqGSIb3DQEBBQUAMEgxCzAJBgNV BAYTAkZSMRwwGgYDVQQKExNVbml2ZXJzaXRlIGR1IE1haW5lMRswGQYDVQQDExJz aWQudW5pdi1sZW1hbnMuZnIwHhcNMTEwMjE4MTEwNjI0WhcNMzEwMjEzMTEwNjI0 WjBIMQswCQYDVQQGEwJGUjEcMBoGA1UEChMTVW5pdmVyc2l0ZSBkdSBNYWluZTEb MBkGA1UEAxMSc2lkLnVuaXYtbGVtYW5zLmZyMIGfMA0GCSqGSIb3DQEBAQUAA4GN ADCBiQKBgQCyJGNN2YSD0Uqj8MuUH5p7MWPM5350xAncknQkRPZVGMne1Z49sLYn 3krzdDv35l7rJluwjY38ie5NQ5AlAEX28MofHf/IzEp1uWWZZtM9PltUsxEGbuHm ceXRpNhtZ6KA7DBwRNqKlWGE7kzepway4Z0hcLSCMR4gHYViqATKRwIDAQABo4Gq MIGnMB0GA1UdDgQWBBTpiJow5PG2ZBDyiL64NNIVqbFWdTB4BgNVHSMEcTBvgBTp iJow5PG2ZBDyiL64NNIVqbFWdaFMpEowSDELMAkGA1UEBhMCRlIxHDAaBgNVBAoT E1VuaXZlcnNpdGUgZHUgTWFpbmUxGzAZBgNVBAMTEnNpZC51bml2LWxlbWFucy5m coIJAJR/xKVtbD8IMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAEXeI qh/edLIY1Ntmc3JrLRN5lJH7ECJlBB9NdopxTOrUSDOBf2jUDP46Z/mmRsK4jAPP Hu3LItDw8xOErXogen+ZO2uqq8S9h3fy4IwJ/SBTrBvkZ+DkYOwcZgXUgWtwLD0r mQsjVXESTAJqspo0HqqO/pQG7DZCnl4p3Cwj8RQ= urn:mace:shibboleth:1.0:nameIdentifier Bruno Richard bruno.richard@univ-lemans.fr Patrick Delage patrick.Delage@univ-lemans.fr MIIETzCCAzegAwIBAgILAQAAAAABGjOHUFcwDQYJKoZIhvcNAQEFBQAwXzELMAkG A1UEBhMCQkUxEzARBgNVBAoTCkN5YmVydHJ1c3QxFzAVBgNVBAsTDkVkdWNhdGlv bmFsIENBMSIwIAYDVQQDExlDeWJlcnRydXN0IEVkdWNhdGlvbmFsIENBMB4XDTA4 MDUyOTA3MTQzN1oXDTExMDUyOTA3MTQzN1owTDELMAkGA1UEBhMCRlIxHDAaBgNV BAoTE1VuaXZlcnNpdGUgZHUgTWFpbmUxHzAdBgNVBAMTFnFhc2hxYWkudW5pdi1s ZW1hbnMuZnIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALXtKahJTyoBK9NS lIYKc/wzlQbJyuNlstWbcOCTKSlI8dpXOzTISF3L2rbGPkOzC847BZrbfnUIhEmf 9GuUSycAc9rkjYA6rYgU6F5jls/vwNdyy9t9PO6qNC8m1zBBJ44N/TI8loWQqkF1 c17Xq2t6HSsMbDCILr0QNYGh7zFLAgMBAAGjggGhMIIBnTBQBgNVHSAESTBHMEUG ByqGSLE+AQAwOjA4BggrBgEFBQcCARYsaHR0cDovL3d3dy5nbG9iYWxzaWduLm5l dC9yZXBvc2l0b3J5L2Nwcy5jZm0wDgYDVR0PAQH/BAQDAgWgMB8GA1UdIwQYMBaA FGVloz3XOxGjCgclN8lCSlt2d1DhMB0GA1UdDgQWBBTLDNN6QaHFFvtRW5fyFH72 dzWQJTA6BgNVHR8EMzAxMC+gLaArhilodHRwOi8vY3JsLmdsb2JhbHNpZ24ubmV0 L2VkdWNhdGlvbmFsLmNybDBPBggrBgEFBQcBAQRDMEEwPwYIKwYBBQUHMAKGM2h0 dHA6Ly9zZWN1cmUuZ2xvYmFsc2lnbi5uZXQvY2FjZXJ0L2VkdWNhdGlvbmFsLmNy dDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwTQYDVR0RBEYwRIIWcWFz aHFhaS51bml2LWxlbWFucy5mcoISZWFkLnVuaXYtbGVtYW5zLmZyghZlYWR0ZXN0 LnVuaXYtbGVtYW5zLmZyMA0GCSqGSIb3DQEBBQUAA4IBAQBHQsFiF+FojDPUwJud sQ5QVsb9+LmSf1YwcRBj+aRxLzVT8vqGg+QxZ/ne0jyOH23yXii+uzXdU/3C5U0b WPby0h45xaShmm3bm4yrQiSI4u5VWHIXkAw+1p7NICxLyYy9T1L+UhrnT0NTm4rd TgGptDdMjvvlgQwb0HGZkaggwnk61Vu/QxthtOUfJgSIB2NCfZX7A+yPmn+buiaj NomarFApRqguoY2ORfCs3vLioi3fDPRVwHONoAROJ1v79qNLGDjUsFW+MstBXIMJ 5vIUzb/jR2/UhjNWi0vyMxzw6Q/vVKLBjNkmyQZVZz4Ylw9rRX2agz88blJvoj2l hMnO MIIETzCCAzegAwIBAgILAQAAAAABGjOHUFcwDQYJKoZIhvcNAQEFBQAwXzELMAkG A1UEBhMCQkUxEzARBgNVBAoTCkN5YmVydHJ1c3QxFzAVBgNVBAsTDkVkdWNhdGlv bmFsIENBMSIwIAYDVQQDExlDeWJlcnRydXN0IEVkdWNhdGlvbmFsIENBMB4XDTA4 MDUyOTA3MTQzN1oXDTExMDUyOTA3MTQzN1owTDELMAkGA1UEBhMCRlIxHDAaBgNV BAoTE1VuaXZlcnNpdGUgZHUgTWFpbmUxHzAdBgNVBAMTFnFhc2hxYWkudW5pdi1s ZW1hbnMuZnIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALXtKahJTyoBK9NS lIYKc/wzlQbJyuNlstWbcOCTKSlI8dpXOzTISF3L2rbGPkOzC847BZrbfnUIhEmf 9GuUSycAc9rkjYA6rYgU6F5jls/vwNdyy9t9PO6qNC8m1zBBJ44N/TI8loWQqkF1 c17Xq2t6HSsMbDCILr0QNYGh7zFLAgMBAAGjggGhMIIBnTBQBgNVHSAESTBHMEUG ByqGSLE+AQAwOjA4BggrBgEFBQcCARYsaHR0cDovL3d3dy5nbG9iYWxzaWduLm5l dC9yZXBvc2l0b3J5L2Nwcy5jZm0wDgYDVR0PAQH/BAQDAgWgMB8GA1UdIwQYMBaA FGVloz3XOxGjCgclN8lCSlt2d1DhMB0GA1UdDgQWBBTLDNN6QaHFFvtRW5fyFH72 dzWQJTA6BgNVHR8EMzAxMC+gLaArhilodHRwOi8vY3JsLmdsb2JhbHNpZ24ubmV0 L2VkdWNhdGlvbmFsLmNybDBPBggrBgEFBQcBAQRDMEEwPwYIKwYBBQUHMAKGM2h0 dHA6Ly9zZWN1cmUuZ2xvYmFsc2lnbi5uZXQvY2FjZXJ0L2VkdWNhdGlvbmFsLmNy dDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwTQYDVR0RBEYwRIIWcWFz aHFhaS51bml2LWxlbWFucy5mcoISZWFkLnVuaXYtbGVtYW5zLmZyghZlYWR0ZXN0 LnVuaXYtbGVtYW5zLmZyMA0GCSqGSIb3DQEBBQUAA4IBAQBHQsFiF+FojDPUwJud sQ5QVsb9+LmSf1YwcRBj+aRxLzVT8vqGg+QxZ/ne0jyOH23yXii+uzXdU/3C5U0b WPby0h45xaShmm3bm4yrQiSI4u5VWHIXkAw+1p7NICxLyYy9T1L+UhrnT0NTm4rd TgGptDdMjvvlgQwb0HGZkaggwnk61Vu/QxthtOUfJgSIB2NCfZX7A+yPmn+buiaj NomarFApRqguoY2ORfCs3vLioi3fDPRVwHONoAROJ1v79qNLGDjUsFW+MstBXIMJ 5vIUzb/jR2/UhjNWi0vyMxzw6Q/vVKLBjNkmyQZVZz4Ylw9rRX2agz88blJvoj2l hMnO urn:mace:shibboleth:1.0:nameIdentifier Patrick Delage fed-tech@univ-lemans.fr Sylvain Bourdais Sylvain.Bourdais@univ-lemans.fr univ-lemans.fr MIIDODCCAiCgAwIBAgIVAOfG5aIZ6Aohb63NMTtvPZ3HLBWfMA0GCSqGSIb3DQEB BQUAMB4xHDAaBgNVBAMTE2lkcDIudW5pdi1sZW1hbnMuZnIwHhcNMTAwNDEyMTE1 ODExWhcNMzAwNDEyMTE1ODExWjAeMRwwGgYDVQQDExNpZHAyLnVuaXYtbGVtYW5z LmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmmABnRWyz2lm0ged F4Prv9GO+Z914ed7yVYJJi3jlCLejmkcDWpfTVm7rRalLX/3sO5KdE7dnXEBxdYf AluI409b9yNcDi8iTcRgQA233FnJxSkYf7yEKFVc5ZWhCvpbvda4NfxPHAi7E3LD 1Rzji0PT+KYzElb/eTPmVl85LCeKK5aM9ILv8b5ziFC70t3JdaNsoXR0esC+5r8o nI80ICke0tibfbHrwlyldiJb/po9m9tSEB3i8NkEOgFXwz7X/fdGHur5gfJwvEXS MXzgSoq9DbpjWKR6/g46hABdmv8+C/+N+mxp4KehoyDcFPbED8pH9cqw9QtLKLgE SXy8uQIDAQABo20wazBKBgNVHREEQzBBghNpZHAyLnVuaXYtbGVtYW5zLmZyhipo dHRwczovL2lkcDIudW5pdi1sZW1hbnMuZnIvaWRwL3NoaWJib2xldGgwHQYDVR0O BBYEFMjVlzAX+5XMpiXoz2pkh/xv8xpAMA0GCSqGSIb3DQEBBQUAA4IBAQB+5SH/ ygI70ba2rP2hmL3klQ1md/zIaK7p3MOOkDy5lkIH31oI6lIFTrKyZg7ML19gMVeA uZhIO9ZWJDrFtBxgDGYeishp1zEctX+ExWuVU9rtWzgCQ7GlqpnJLDAjxCVotdTG oEa3NbsjuPm4R3FaHiEAcVWGun8edQztZ9PRGxk7KDsT7+omuABB80mrvtYHGNCZ lKgdL3SFqkTQMbBvs4ouAnxw++YMfvcqUtxZJZKIKF7QTPeDOPLHLwHEZl6yL/kl dkydWQ+SmHuq9+cAfmW7kzferGnkRoHvIPVNtgGNo7kvQieeLbnGrLYpRWeMFt3f 4weH5Ji9r7v8/chk urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université du Maine - Le Mans Université du Maine - Le Mans http://unknown.site.com Patrick Delage fed-tech@univ-lemans.fr Sylvain Bourdais fed-tech@univ-lemans.fr cayenne.univ-lemans.fr CN=cayenne.univ-lemans.fr CN=cayenne.univ-lemans.fr 14652686086981166233 MIIBuTCCASICCQDLWMxc49IkmTANBgkqhkiG9w0BAQUFADAhMR8wHQYDVQQDExZj YXllbm5lLnVuaXYtbGVtYW5zLmZyMB4XDTEwMDQwNjExNTM1MVoXDTIwMDQwMzEx NTM1MVowITEfMB0GA1UEAxMWY2F5ZW5uZS51bml2LWxlbWFucy5mcjCBnzANBgkq hkiG9w0BAQEFAAOBjQAwgYkCgYEAwaneTnpiwJgidsub4fx5VFkoRaFqovcgbqsx qKOdQdsYUngoZ0ezTIT7Gh5KXf8vkw/sNr1kPk0k1NYVSCJl2GAQRiuUl9+SvRj/ V3iz3MdhaJRdUmxgnxPs4vKDfGAWVDr7OIlTfLR3cut2iizZnwkFdDALIW0+RX0G IKzicEkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQAObRFsGU1IIx35d7/gx7TJaU2m qnGf1hl/9U3e8/Oe+t1mEYuXjirSFXLM16CF2WBDCpL62Ym57p4LTA5mwCIYFSec SBsaNWSic9kTyAdCk4fCAt0zpHM0ZF6RHnIZ88cu4QXcewNUnTKbddBgfTNTV+FN 27fPzIe31OyjZBuifg== cayenne.univ-lemans.fr CN=cayenne.univ-lemans.fr CN=cayenne.univ-lemans.fr 14652686086981166233 MIIBuTCCASICCQDLWMxc49IkmTANBgkqhkiG9w0BAQUFADAhMR8wHQYDVQQDExZj YXllbm5lLnVuaXYtbGVtYW5zLmZyMB4XDTEwMDQwNjExNTM1MVoXDTIwMDQwMzEx NTM1MVowITEfMB0GA1UEAxMWY2F5ZW5uZS51bml2LWxlbWFucy5mcjCBnzANBgkq hkiG9w0BAQEFAAOBjQAwgYkCgYEAwaneTnpiwJgidsub4fx5VFkoRaFqovcgbqsx qKOdQdsYUngoZ0ezTIT7Gh5KXf8vkw/sNr1kPk0k1NYVSCJl2GAQRiuUl9+SvRj/ V3iz3MdhaJRdUmxgnxPs4vKDfGAWVDr7OIlTfLR3cut2iizZnwkFdDALIW0+RX0G IKzicEkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQAObRFsGU1IIx35d7/gx7TJaU2m qnGf1hl/9U3e8/Oe+t1mEYuXjirSFXLM16CF2WBDCpL62Ym57p4LTA5mwCIYFSec SBsaNWSic9kTyAdCk4fCAt0zpHM0ZF6RHnIZ88cu4QXcewNUnTKbddBgfTNTV+FN 27fPzIe31OyjZBuifg== univ-tln.fr MIIDQzCCAiugAwIBAgIURrZcRMW1GJitmEg2t0KC308pj88wDQYJKoZIhvcNAQEF BQAwITEfMB0GA1UEAxMWZmVkZXJhdGlvbi51bml2LXRsbi5mcjAeFw0wOTA5MDYx OTIyNDFaFw0yOTA5MDYxOTIyNDFaMCExHzAdBgNVBAMTFmZlZGVyYXRpb24udW5p di10bG4uZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCv3ysyMoZY CtKudxYcuuSgnBe7k0bF/kNt+EeszFZt7XviNAi50wIAvqt0J4yd43v1SJ9rL2XD pWeC4Xdxblp0yn5DVqnSbmM9ySSocYEhZK32Jo2qidk3KB981R1GaSE74DNxSC5F MxnNq39Jx8tDEGi+9sEXLU4nRqkznuB0NiDIprehTk5nrrH8LyiC4mBVnTWHlaVN oycrr9bfVm/4lXePYEBQFec1q509Mdi6v9+8rb/WSVXEhmmjtKAJGm1Sx3mi2GlY o0cMIraJqYMyKxy6y4uLzx/EpFxjDD1WG4w9qz47BXJ6yELqZftPfSrYyuhxV0u3 3kGdY9pn6bpvAgMBAAGjczBxMFAGA1UdEQRJMEeCFmZlZGVyYXRpb24udW5pdi10 bG4uZnKGLWh0dHBzOi8vZmVkZXJhdGlvbi51bml2LXRsbi5mci9pZHAvc2hpYmJv bGV0aDAdBgNVHQ4EFgQUlfrA9u+WyKMcIN3NB1/XDYtdLl8wDQYJKoZIhvcNAQEF BQADggEBAATpBMb4mUELL5uZ3FvMdEtGK23nRU8SSTmqt3rypazcMlWevgq60mHm CBD4E+bFvvKMAWUx3+jpQzbV2M7I2OMto95G4MVTEnr+vugeQHEDcWIBUo5yjLb6 4qDZ8YWBmzSE/iV8Pbx+6RsLgPcTfXzbClZO/stfspDJhwCrLuMv36xCQcm88Y5Z eHcjM5wZ+FrykOxUsv663wJowcCE0aRkAUnyg1rUfYy4sRJh3EP/MXQpb4/ePTCg lAu3e0usivWcDm0/WX2N6oA9cp0sUsegYtoBY7tmPtml4yMRODG7ZSDqUmLlB3PZ FIrOgN1sOW6bInYYilkc/7jjHW5T6AQ= urn:mace:shibboleth:1.0:nameIdentifier urn:oasis:names:tc:SAML:2.0:nameid-format:transient Université du Sud Toulon Var Université du Sud Toulon Var http://unknown.site.com Twardy Sandrine federation@univ-tln.fr MIIEOjCCAyKgAwIBAgILAQAAAAABH8gCvoMwDQYJKoZIhvcNAQEFBQAwXzELMAkG A1UEBhMCQkUxEzARBgNVBAoTCkN5YmVydHJ1c3QxFzAVBgNVBAsTDkVkdWNhdGlv bmFsIENBMSIwIAYDVQQDExlDeWJlcnRydXN0IEVkdWNhdGlvbmFsIENBMB4XDTA5 MDMwMjE1MjgxMloXDTEyMDMwMjE1MjgxMlowYTELMAkGA1UEBhMCRlIxLzAtBgNV BAoTJlVOSVZFUlNJVEUgTU9OVFBFTExJRVIgSUlJIFBBVUwgVkFMRVJZMSEwHwYD VQQDExhhZGRvYy5iaXUtbW9udHBlbGxpZXIuZnIwgZ8wDQYJKoZIhvcNAQEBBQAD gY0AMIGJAoGBAMtncDzWBOw/Q3MDk7i58exD5m3Ra8AcVXrF6SssjzTggpGg9RmN i8+cD2lmxRB1/mtf3vco6efCmEyOpD/K4xvSZlwoNU9xNo75wc0TcVE5D5GHUWYV PdWKsCwOZHDk/EEqFrVaKYeZRfZjlMrIwlb/SD9bQFV5qR6Rv3INUzfbAgMBAAGj ggF3MIIBczBQBgNVHSAESTBHMEUGByqGSLE+AQAwOjA4BggrBgEFBQcCARYsaHR0 cDovL3d3dy5nbG9iYWxzaWduLm5ldC9yZXBvc2l0b3J5L2Nwcy5jZm0wDgYDVR0P AQH/BAQDAgWgMB8GA1UdIwQYMBaAFGVloz3XOxGjCgclN8lCSlt2d1DhMB0GA1Ud DgQWBBQpK3LHSKi3WQZyliic5aJmWFLXujA6BgNVHR8EMzAxMC+gLaArhilodHRw Oi8vY3JsLmdsb2JhbHNpZ24ubmV0L2VkdWNhdGlvbmFsLmNybDBPBggrBgEFBQcB AQRDMEEwPwYIKwYBBQUHMAKGM2h0dHA6Ly9zZWN1cmUuZ2xvYmFsc2lnbi5uZXQv Y2FjZXJ0L2VkdWNhdGlvbmFsLmNydDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB BQUHAwIwIwYDVR0RBBwwGoIYYWRkb2MuYml1LW1vbnRwZWxsaWVyLmZyMA0GCSqG SIb3DQEBBQUAA4IBAQACZYoUwuc+w7+iR8NgvHphynRXobPgHX1WEgPcpzkFrD/W M9inTqfrzjRXViXOSqpeI1BCcJZoANoHZbz9qAU+FrgU4ngoGMISXwciDRfIqRUY 7E4wiJwWvhDpJnHcruyUwxOw6bLyUZKhcvaO4SbvovpwC9fB193DERfJQHaMKriR EzCG/rRFTSd4OYCmgt5Vc4zY1r5w/IamndY+xZVZp6pDTHTTX+UcBetsarnmpQG5 54GWNE7c6/LDMi3SCc7saTS9kXm69e4L5GWZ6E7Dfu8zIK46ke52L8E1oBFlRVJ3 cHLsCEQNZimwmDAnXWBz56QdLDFB2bDLIJs4X8W2 MIIEOjCCAyKgAwIBAgILAQAAAAABH8gCvoMwDQYJKoZIhvcNAQEFBQAwXzELMAkG A1UEBhMCQkUxEzARBgNVBAoTCkN5YmVydHJ1c3QxFzAVBgNVBAsTDkVkdWNhdGlv bmFsIENBMSIwIAYDVQQDExlDeWJlcnRydXN0IEVkdWNhdGlvbmFsIENBMB4XDTA5 MDMwMjE1MjgxMloXDTEyMDMwMjE1MjgxMlowYTELMAkGA1UEBhMCRlIxLzAtBgNV BAoTJlVOSVZFUlNJVEUgTU9OVFBFTExJRVIgSUlJIFBBVUwgVkFMRVJZMSEwHwYD VQQDExhhZGRvYy5iaXUtbW9udHBlbGxpZXIuZnIwgZ8wDQYJKoZIhvcNAQEBBQAD gY0AMIGJAoGBAMtncDzWBOw/Q3MDk7i58exD5m3Ra8AcVXrF6SssjzTggpGg9RmN i8+cD2lmxRB1/mtf3vco6efCmEyOpD/K4xvSZlwoNU9xNo75wc0TcVE5D5GHUWYV PdWKsCwOZHDk/EEqFrVaKYeZRfZjlMrIwlb/SD9bQFV5qR6Rv3INUzfbAgMBAAGj ggF3MIIBczBQBgNVHSAESTBHMEUGByqGSLE+AQAwOjA4BggrBgEFBQcCARYsaHR0 cDovL3d3dy5nbG9iYWxzaWduLm5ldC9yZXBvc2l0b3J5L2Nwcy5jZm0wDgYDVR0P AQH/BAQDAgWgMB8GA1UdIwQYMBaAFGVloz3XOxGjCgclN8lCSlt2d1DhMB0GA1Ud DgQWBBQpK3LHSKi3WQZyliic5aJmWFLXujA6BgNVHR8EMzAxMC+gLaArhilodHRw Oi8vY3JsLmdsb2JhbHNpZ24ubmV0L2VkdWNhdGlvbmFsLmNybDBPBggrBgEFBQcB AQRDMEEwPwYIKwYBBQUHMAKGM2h0dHA6Ly9zZWN1cmUuZ2xvYmFsc2lnbi5uZXQv Y2FjZXJ0L2VkdWNhdGlvbmFsLmNydDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB BQUHAwIwIwYDVR0RBBwwGoIYYWRkb2MuYml1LW1vbnRwZWxsaWVyLmZyMA0GCSqG SIb3DQEBBQUAA4IBAQACZYoUwuc+w7+iR8NgvHphynRXobPgHX1WEgPcpzkFrD/W M9inTqfrzjRXViXOSqpeI1BCcJZoANoHZbz9qAU+FrgU4ngoGMISXwciDRfIqRUY 7E4wiJwWvhDpJnHcruyUwxOw6bLyUZKhcvaO4SbvovpwC9fB193DERfJQHaMKriR EzCG/rRFTSd4OYCmgt5Vc4zY1r5w/IamndY+xZVZp6pDTHTTX+UcBetsarnmpQG5 54GWNE7c6/LDMi3SCc7saTS9kXm69e4L5GWZ6E7Dfu8zIK46ke52L8E1oBFlRVJ3 cHLsCEQNZimwmDAnXWBz56QdLDFB2bDLIJs4X8W2 urn:mace:shibboleth:1.0:nameIdentifier Bonneaud Mireille si.biu@univ-montp1.fr Houot Thomas thomas.houot@univ-montp1.fr www.biu-montpellier.fr CN=www.biu-montpellier.fr,O=Universit\C3\A9 de Montpellier III Paul-Val\C3\A9ry,L=Montpellier,C=FR MIIEpjCCA46gAwIBAgIRAIQRVPdjRGgiJJYrWbbnTLowDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0wOTEwMTIwMDAwMDBaFw0xMjEwMTEyMzU5NTlaMHoxCzAJBgNV BAYTAkZSMRQwEgYDVQQHEwtNb250cGVsbGllcjE0MDIGA1UECgwrVW5pdmVyc2l0 w6kgZGUgTW9udHBlbGxpZXIgSUlJIFBhdWwtVmFsw6lyeTEfMB0GA1UEAxMWd3d3 LmJpdS1tb250cGVsbGllci5mcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC ggEBANBN1s9+0tJVychtZS+U3J2OKrDMEdiqRf9gO371CsNkJqWytsV7PTAfWNhO Jx3+0ALriUuFm9x6J3ik3nU1q76YfqTMs8Qdyl1PeHzTU3mTsY2AVn89KOa9mPvN 4ZcwNsjCALEm401IvzSJYUKh0bX/XTiIL8WJQEtvngdR4FKYcVrsbcbZRjOJngr0 Z8BE2jt3WzwXYRTR/JijdYVMjtNASI5Ir+oTnth4OCl/6UYNVV/kuPRal+MJeZf7 ITG95ksqv/61aNSgLaD9Va5VeUflyAhEqszbYJqg4w8cadd3xD1PPDG+NyneGFPo soIgDM5NBxXgrPPOcvA+IRGF4lECAwEAAaOCAWkwggFlMB8GA1UdIwQYMBaAFAy9 k2gM896ro0lrKzdXR+qQ47ntMB0GA1UdDgQWBBR4rUTKEuThTcKgsWxbSBdSPwrQ dTAOBgNVHQ8BAf8EBAMCBaAwDAYDVR0TAQH/BAIwADAdBgNVHSUEFjAUBggrBgEF BQcDAQYIKwYBBQUHAwIwGAYDVR0gBBEwDzANBgsrBgEEAbIxAQICHTA6BgNVHR8E MzAxMC+gLaArhilodHRwOi8vY3JsLnRjcy50ZXJlbmEub3JnL1RFUkVOQVNTTENB LmNybDBtBggrBgEFBQcBAQRhMF8wNQYIKwYBBQUHMAKGKWh0dHA6Ly9jcnQudGNz LnRlcmVuYS5vcmcvVEVSRU5BU1NMQ0EuY3J0MCYGCCsGAQUFBzABhhpodHRwOi8v b2NzcC50Y3MudGVyZW5hLm9yZzAhBgNVHREEGjAYghZ3d3cuYml1LW1vbnRwZWxs aWVyLmZyMA0GCSqGSIb3DQEBBQUAA4IBAQC3CrN7wkyUCc3cTUB09TqOhQgjRrCW DPk/ezipw3eR3cSyzWMo2PBWqksilO1Lf2/N+LO1zlgz1reIH9sZnCu7vXipB3pv rvY7d8SEfQLRzvmXs/uRntIpd81ssHF+cC6MYT7UJ2WwAJLZ6KytR0vuYcVlB7di KouVQYkSoPuUSvXzN4XB23QnuXEkzmJNyJEm5HQYHjAZZXKPbtAb0F7UOylZmuJq 4r1rSHrBlIlwkhTGqtyyReN+8INb7MHcH4pi1LZ5g4mfu3aAGj8oXV2UF5UdZhvj PtuLAQQ85DjIDzyPeN9DMQ3LUIpD3fKTY0ydp+SeX497NlePtp/nhrK4 www.biu-montpellier.fr CN=www.biu-montpellier.fr,O=Universit\C3\A9 de Montpellier III Paul-Val\C3\A9ry,L=Montpellier,C=FR MIIEpjCCA46gAwIBAgIRAIQRVPdjRGgiJJYrWbbnTLowDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0wOTEwMTIwMDAwMDBaFw0xMjEwMTEyMzU5NTlaMHoxCzAJBgNV BAYTAkZSMRQwEgYDVQQHEwtNb250cGVsbGllcjE0MDIGA1UECgwrVW5pdmVyc2l0 w6kgZGUgTW9udHBlbGxpZXIgSUlJIFBhdWwtVmFsw6lyeTEfMB0GA1UEAxMWd3d3 LmJpdS1tb250cGVsbGllci5mcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC ggEBANBN1s9+0tJVychtZS+U3J2OKrDMEdiqRf9gO371CsNkJqWytsV7PTAfWNhO Jx3+0ALriUuFm9x6J3ik3nU1q76YfqTMs8Qdyl1PeHzTU3mTsY2AVn89KOa9mPvN 4ZcwNsjCALEm401IvzSJYUKh0bX/XTiIL8WJQEtvngdR4FKYcVrsbcbZRjOJngr0 Z8BE2jt3WzwXYRTR/JijdYVMjtNASI5Ir+oTnth4OCl/6UYNVV/kuPRal+MJeZf7 ITG95ksqv/61aNSgLaD9Va5VeUflyAhEqszbYJqg4w8cadd3xD1PPDG+NyneGFPo soIgDM5NBxXgrPPOcvA+IRGF4lECAwEAAaOCAWkwggFlMB8GA1UdIwQYMBaAFAy9 k2gM896ro0lrKzdXR+qQ47ntMB0GA1UdDgQWBBR4rUTKEuThTcKgsWxbSBdSPwrQ dTAOBgNVHQ8BAf8EBAMCBaAwDAYDVR0TAQH/BAIwADAdBgNVHSUEFjAUBggrBgEF BQcDAQYIKwYBBQUHAwIwGAYDVR0gBBEwDzANBgsrBgEEAbIxAQICHTA6BgNVHR8E MzAxMC+gLaArhilodHRwOi8vY3JsLnRjcy50ZXJlbmEub3JnL1RFUkVOQVNTTENB LmNybDBtBggrBgEFBQcBAQRhMF8wNQYIKwYBBQUHMAKGKWh0dHA6Ly9jcnQudGNz LnRlcmVuYS5vcmcvVEVSRU5BU1NMQ0EuY3J0MCYGCCsGAQUFBzABhhpodHRwOi8v b2NzcC50Y3MudGVyZW5hLm9yZzAhBgNVHREEGjAYghZ3d3cuYml1LW1vbnRwZWxs aWVyLmZyMA0GCSqGSIb3DQEBBQUAA4IBAQC3CrN7wkyUCc3cTUB09TqOhQgjRrCW DPk/ezipw3eR3cSyzWMo2PBWqksilO1Lf2/N+LO1zlgz1reIH9sZnCu7vXipB3pv rvY7d8SEfQLRzvmXs/uRntIpd81ssHF+cC6MYT7UJ2WwAJLZ6KytR0vuYcVlB7di KouVQYkSoPuUSvXzN4XB23QnuXEkzmJNyJEm5HQYHjAZZXKPbtAb0F7UOylZmuJq 4r1rSHrBlIlwkhTGqtyyReN+8INb7MHcH4pi1LZ5g4mfu3aAGj8oXV2UF5UdZhvj PtuLAQQ85DjIDzyPeN9DMQ3LUIpD3fKTY0ydp+SeX497NlePtp/nhrK4 MIIErzCCA5egAwIBAgIRANaebIK2H/dClk5lFIrE4gswDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0xMDAzMTgwMDAwMDBaFw0xMzAzMTcyMzU5NTlaMIGCMQswCQYD VQQGEwJGUjEUMBIGA1UEBxMLTU9OVFBFTExJRVIxLTArBgNVBAoTJFVOSVZFUlNJ VEUgTU9OVFBFTExJRVIgU1VEIERFIEZSQU5DRTENMAsGA1UECxMEUFJFUzEfMB0G A1UEAxMWY2FsZXMuZm9ybWF0aW9ucy1sci5mcjCCASIwDQYJKoZIhvcNAQEBBQAD ggEPADCCAQoCggEBAKw8tN71L2x7X4lpFBgkn1WyuScFlVV/XJvnT5J2E/RAlv02 nlb8bRzfHQ8C6cVrDcOYTXYiXeVzwiH+aCIiZNtsdsOIGsh7NwRpFkurkjbKomxt by54Z+b+iS8QyKSbvuQV/kn5Ih+bwUPjqaS32QIivWxap77YJztRgG8Vw/yGcfSp s5eCjHD7X23NCRvYQOidRpjJrGRfgwSV2EXIF6bmcCGgChrRgrFKeKtXOXRMD8Kc DN/iF3wFmaE6Cq/gA6hLOoPPQ8E6Ifk4AZ4eCVWSZA/2Sj5051/lO3ZDEbf13P8h d8mEyYrEt5U22XuC/WV24Zk6JHsJq9HziXT474UCAwEAAaOCAWkwggFlMB8GA1Ud IwQYMBaAFAy9k2gM896ro0lrKzdXR+qQ47ntMB0GA1UdDgQWBBR2ILQVHW9vPJzn 7flcVe7fFcZ77zAOBgNVHQ8BAf8EBAMCBaAwDAYDVR0TAQH/BAIwADAdBgNVHSUE FjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwGAYDVR0gBBEwDzANBgsrBgEEAbIxAQIC HTA6BgNVHR8EMzAxMC+gLaArhilodHRwOi8vY3JsLnRjcy50ZXJlbmEub3JnL1RF UkVOQVNTTENBLmNybDBtBggrBgEFBQcBAQRhMF8wNQYIKwYBBQUHMAKGKWh0dHA6 Ly9jcnQudGNzLnRlcmVuYS5vcmcvVEVSRU5BU1NMQ0EuY3J0MCYGCCsGAQUFBzAB hhpodHRwOi8vb2NzcC50Y3MudGVyZW5hLm9yZzAhBgNVHREEGjAYghZjYWxlcy5m b3JtYXRpb25zLWxyLmZyMA0GCSqGSIb3DQEBBQUAA4IBAQBXbFNHfiUhgLjAVwff kH5AoGL+I7Bj8HiHK6uq0i2u93iy8Qb+mnHDX3a49/6UVjn3JpQ3Od1f0UL+gZLr ydzIYCsEG1uHZ0BOOoNHqkUkCTLFriAQDN3t6YJNy9NwZJlrgd8O2UmM5oNzrwu8 9O10F8yxT899zdYVHTUeFPjWPWUz7Tr1r5Efp8LWuPmGG7VtqlvwawmnEigN7pcj vHIeI+SnSc0jVasKPj83ipHnmViMDPcDIHqo95y8KZdcHl1LPwiNXCf8REUPiG7p my2+aoNkjW3zgHiCZFZbu0XxXe2RaLqO/J5UwdnGwUhhXJtAw5ZaMaF8iyF8qGuh cHF5 MIIErzCCA5egAwIBAgIRANaebIK2H/dClk5lFIrE4gswDQYJKoZIhvcNAQEFBQAw NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B IFNTTCBDQTAeFw0xMDAzMTgwMDAwMDBaFw0xMzAzMTcyMzU5NTlaMIGCMQswCQYD VQQGEwJGUjEUMBIGA1UEBxMLTU9OVFBFTExJRVIxLTArBgNVBAoTJFVOSVZFUlNJ VEUgTU9OVFBFTExJRVIgU1VEIERFIEZSQU5DRTENMAsGA1UECxMEUFJFUzEfMB0G A1UEAxMWY2FsZXMuZm9ybWF0aW9ucy1sci5mcjCCASIwDQYJKoZIhvcNAQEBBQAD ggEPADCCAQoCggEBAKw8tN71L2x7X4lpFBgkn1WyuScFlVV/XJvnT5J2E/RAlv02 nlb8bRzfHQ8C6cVrDcOYTXYiXeVzwiH+aCIiZNtsdsOIGsh7NwRpFkurkjbKomxt by54Z+b+iS8QyKSbvuQV/kn5Ih+bwUPjqaS32QIivWxap77YJztRgG8Vw/yGcfSp s5eCjHD7X23NCRvYQOidRpjJrGRfgwSV2EXIF6bmcCGgChrRgrFKeKtXOXRMD8Kc DN/iF3wFmaE6Cq/gA6hLOoPPQ8E6Ifk4AZ4eCVWSZA/2Sj5051/lO3ZDEbf13P8h d8mEyYrEt5U22XuC/WV24Zk6JHsJq9HziXT474UCAwEAAaOCAWkwggFlMB8GA1Ud IwQYMBaAFAy9k2gM896ro0lrKzdXR+qQ47ntMB0GA1UdDgQWBBR2ILQVHW9vPJzn 7flcVe7fFcZ77zAOBgNVHQ8BAf8EBAMCBaAwDAYDVR0TAQH/BAIwADAdBgNVHSUE FjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwGAYDVR0gBBEwDzANBgsrBgEEAbIxAQIC HTA6BgNVHR8EMzAxMC+gLaArhilodHRwOi8vY3JsLnRjcy50ZXJlbmEub3JnL1RF UkVOQVNTTENBLmNybDBtBggrBgEFBQcBAQRhMF8wNQYIKwYBBQUHMAKGKWh0dHA6 Ly9jcnQudGNzLnRlcmVuYS5vcmcvVEVSRU5BU1NMQ0EuY3J0MCYGCCsGAQUFBzAB hhpodHRwOi8vb2NzcC50Y3MudGVyZW5hLm9yZzAhBgNVHREEGjAYghZjYWxlcy5m b3JtYXRpb25zLWxyLmZyMA0GCSqGSIb3DQEBBQUAA4IBAQBXbFNHfiUhgLjAVwff kH5AoGL+I7Bj8HiHK6uq0i2u93iy8Qb+mnHDX3a49/6UVjn3JpQ3Od1f0UL+gZLr ydzIYCsEG1uHZ0BOOoNHqkUkCTLFriAQDN3t6YJNy9NwZJlrgd8O2UmM5oNzrwu8 9O10F8yxT899zdYVHTUeFPjWPWUz7Tr1r5Efp8LWuPmGG7VtqlvwawmnEigN7pcj vHIeI+SnSc0jVasKPj83ipHnmViMDPcDIHqo95y8KZdcHl1LPwiNXCf8REUPiG7p my2+aoNkjW3zgHiCZFZbu0XxXe2RaLqO/J5UwdnGwUhhXJtAw5ZaMaF8iyF8qGuh cHF5 urn:mace:shibboleth:1.0:nameIdentifier Malagrida David responsable.informatique@pres-univ-montp.fr authold.univ-metz.fr im.univ-metz.fr sauron.univ-metz.fr superviseur.univ-metz.fr CN=im.univ-metz.fr,OU=CRIUM,O=UNIVERSITE METZ,L=Metz,ST=fr,C=FR MIIE1jCCA76gAwIBAgIQcJ9DzkqhI+AmgehMkvWQ/DANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTA5MTIxNzAwMDAwMFoXDTEyMTIxNjIzNTk1OVowbTELMAkGA1UE BhMCRlIxCzAJBgNVBAgTAmZyMQ0wCwYDVQQHEwRNZXR6MRgwFgYDVQQKEw9VTklW RVJTSVRFIE1FVFoxDjAMBgNVBAsTBUNSSVVNMRgwFgYDVQQDEw9pbS51bml2LW1l dHouZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDAPx9v+rMjJ0OF vrfU6gJ8y6P6ORtofC3xoGQ46cGgvs3bQp1vEhPQw2xzROXaLDYbHvLwiA9LCdqn 0VqEDbh6mMQw1R3SrIcVjEObRBawyE+vqPLx7Lxd2k4eWA5TGid2Vjw1vM3RlzxR xCh6o1wQR9WinYk2EEevYcOBpspfmQ8zkUWXxCN6+qZFTaOli80v6S2q5loSSbZR HLJ4LLRL5Jg4pTXaUD+ypcBd573XAHrLLzl9sdvWKl1Vn+XZ1/G0XfX/sI1m/90H 3t7DIfk3IW6lZoeBXW3c6vchNRiZCGwM26oLBxmxqpU9ieG4q2TLIasjqIERDLY8 CNaxDf3XAgMBAAGjggGnMIIBozAfBgNVHSMEGDAWgBQMvZNoDPPeq6NJays3V0fq kOO57TAdBgNVHQ4EFgQUE8ij2tN8ddSsKFgqXnXmqiu1QtwwDgYDVR0PAQH/BAQD AgWgMAwGA1UdEwEB/wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMC MBgGA1UdIAQRMA8wDQYLKwYBBAGyMQECAh0wOgYDVR0fBDMwMTAvoC2gK4YpaHR0 cDovL2NybC50Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcmwwbQYIKwYBBQUH AQEEYTBfMDUGCCsGAQUFBzAChilodHRwOi8vY3J0LnRjcy50ZXJlbmEub3JnL1RF UkVOQVNTTENBLmNydDAmBggrBgEFBQcwAYYaaHR0cDovL29jc3AudGNzLnRlcmVu YS5vcmcwXwYDVR0RBFgwVoIPaW0udW5pdi1tZXR6LmZyghRhdXRob2xkLnVuaXYt bWV0ei5mcoITc2F1cm9uLnVuaXYtbWV0ei5mcoIYc3VwZXJ2aXNldXIudW5pdi1t ZXR6LmZyMA0GCSqGSIb3DQEBBQUAA4IBAQB4u6WlBimVohmGpOWGAklThy9EXBSe u27blAV0GL87kma7gXQK9p/EwC6XqLXDumv7Ukqpx6aYDGnUJHqPf5Qm0cLl2C5F jf2lMUeurFlZC9rRccw7/QzVIh8v48aA07L5dExDboTGKam1ZiZGM96l3814hu4n oz/1/TY4t45G7k5B09IxkN5PZcmm0ZAgkldRg0td3KKpzkBEK2ayoeaIWJ27yZHR iNuusCOXc6gz3KKata8PeqMme9NEQz18Ud/yy7jpQKwffQklybBJGHvOut7dz2L2 rjMyF09naDaTihNYgBNENuIV2z15kKgELh5d9zcbVwd+fbU0m2mR4Esv MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290 MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9 uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0 WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0 Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= MIIEPDCCAySgAwIBAgIQSEus8arH1xND0aJ0NUmXJTANBgkqhkiG9w0BAQUFADBv MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFk ZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBF eHRlcm5hbCBDQSBSb290MB4XDTA1MDYwNzA4MDkxMFoXDTIwMDUzMDEwNDgzOFow gZcxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtl IENpdHkxHjAcBgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMY aHR0cDovL3d3dy51c2VydHJ1c3QuY29tMR8wHQYDVQQDExZVVE4tVVNFUkZpcnN0 LUhhcmR3YXJlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsffDOD+0 qH/POYJRZ9Btn9L/WPPnnyvsDYlUmbk4mRb34CF5SMK7YXQSlh08anLVPBBnOjnt KxPNZuuVCTOkbJex6MbswXV5nEZejavQav25KlUXEFSzGfCa9vGxXbanbfvgcRdr ooj7AN/+GjF3DJoBerEy4ysBBzhuw6VeI7xFm3tQwckwj9vlK3rTW/szQB6g1ZgX vIuHw4nTXaCOsqqq9o5piAbF+okh8widaS4JM5spDUYPjMxJNLBpUb35Bs1orWZM vD6sYb0KiA7I3z3ufARMnQpea5HW7sftKI2rTYeJc9BupNAeFosU4XZEA39jrOTN SZzFkvSrMqFIWwIDAQABo4GqMIGnMB8GA1UdIwQYMBaAFK29mHo0tCb3+sQmVO8D veAky1QaMB0GA1UdDgQWBBShcl8mGyiYQ5VdBzfVhZadS9LDRTAOBgNVHQ8BAf8E BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBEBgNVHR8EPTA7MDmgN6A1hjNodHRwOi8v Y3JsLnVzZXJ0cnVzdC5jb20vQWRkVHJ1c3RFeHRlcm5hbENBUm9vdC5jcmwwDQYJ KoZIhvcNAQEFBQADggEBADzse+Cuow6WbTDXhcbSaFtFWoKmNA+wyZIjXhFtCBGy dAkjOjUlc1heyrl8KPpH7PmgA1hQtlPvjNs55Gfp2MooRtSn4PU4dfjny1y/HRE8 akCbLURW0/f/BSgyDBXIZEWT6CEkjy3aeoR7T8/NsiV8dxDTlNEEkaglHAkiD31E NREU768A/l7qX46w2ZJZuvwTlqAYAVbO2vYoC7Gv3VxPXLLzj1pxz+0YrWOIHY6V 9+qV5x+tkLiECEeFfyIvGh1IMNZMCNg3GWcyK+tc0LL8blefBDVekAB+EcfeEyrN pG1FJseIVqDwavfY5/wnfmcI0L36tsNhAgFlubgvz1o= MIIEmDCCA4CgAwIBAgIQS8gUAy8H+mqk8Nop32F5ujANBgkqhkiG9w0BAQUFADCB lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3Qt SGFyZHdhcmUwHhcNMDkwNTE4MDAwMDAwWhcNMjAwNTMwMTA0ODM4WjA2MQswCQYD VQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEgU1NMIENB MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw+NIxC9cwcupmf0booNd ij2tOtDipEMfTQ7+NSUwpWkbxOjlwY9UfuFqoppcXN49/ALOlrhfj4NbzGBAkPjk tjolnF8UUeyx56+eUKExVccCvaxSin81joL6hK0V/qJ/gxA6VVOULAEWdJRUYyij 8lspPZSIgCDiFFkhGbSkmOFg5vLrooCDQ+CtaPN5GYtoQ1E/iptBhQw1jF218bbl p8ODtWsjb9Sl61DllPFKX+4nSxQSFSRMDc9ijbcAIa06Mg9YC18em9HfnY6pGTVQ L0GprTvG4EWyUzl/Ib8iGodcNK5Sbwd9ogtOnyt5pn0T3fV/g3wvWl13eHiRoBS/ fQIDAQABo4IBPjCCATowHwYDVR0jBBgwFoAUoXJfJhsomEOVXQc31YWWnUvSw0Uw HQYDVR0OBBYEFAy9k2gM896ro0lrKzdXR+qQ47ntMA4GA1UdDwEB/wQEAwIBBjAS BgNVHRMBAf8ECDAGAQH/AgEAMBgGA1UdIAQRMA8wDQYLKwYBBAGyMQECAh0wRAYD VR0fBD0wOzA5oDegNYYzaHR0cDovL2NybC51c2VydHJ1c3QuY29tL1VUTi1VU0VS Rmlyc3QtSGFyZHdhcmUuY3JsMHQGCCsGAQUFBwEBBGgwZjA9BggrBgEFBQcwAoYx aHR0cDovL2NydC51c2VydHJ1c3QuY29tL1VUTkFkZFRydXN0U2VydmVyX0NBLmNy dDAlBggrBgEFBQcwAYYZaHR0cDovL29jc3AudXNlcnRydXN0LmNvbTANBgkqhkiG 9w0BAQUFAAOCAQEATiPuSJz2hYtxxApuc5NywDqOgIrZs8qy1AGcKM/yXA4hRJML thoh45gBlA5nSYEevj0NTmDa76AxTpXv8916WoIgQ7ahY0OzUGlDYktWYrA0irkT Q1mT7BR5iPNIk+idyfqHcgxrVqDDFY1opYcfcS3mWm08aXFABFXcoEOUIEU4eNe9 itg5xt8Jt1qaqQO4KBB4zb8BG1oRPjj02Bs0ec8z0gH9rJjNbUcRkEy7uVvYcOfV r7bMxIbmdcCeKbYrDyqlaQIN4+mitF3A884saoU4dmHGSYKrUbOCprlBmCiY+2v+ ihb/MX5UR6g83EMmqZsFt57ANEORMNQywxFa4Q== authold.univ-metz.fr im.univ-metz.fr sauron.univ-metz.fr superviseur.univ-metz.fr CN=im.univ-metz.fr,OU=CRIUM,O=UNIVERSITE METZ,L=Metz,ST=fr,C=FR MIIE1jCCA76gAwIBAgIQcJ9DzkqhI+AmgehMkvWQ/DANBgkqhkiG9w0BAQUFADA2 MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEg U1NMIENBMB4XDTA5MTIxNzAwMDAwMFoXDTEyMTIxNjIzNTk1OVowbTELMAkGA1UE BhMCRlIxCzAJBgNVBAgTAmZyMQ0wCwYDVQQHEwRNZXR6MRgwFgYDVQQKEw9VTklW RVJTSVRFIE1FVFoxDjAMBgNVBAsTBUNSSVVNMRgwFgYDVQQDEw9pbS51bml2LW1l dHouZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDAPx9v+rMjJ0OF vrfU6gJ8y6P6ORtofC3xoGQ46cGgvs3bQp1vEhPQw2xzROXaLDYbHvLwiA9LCdqn 0VqEDbh6mMQw1R3SrIcVjEObRBawyE+vqPLx7Lxd2k4eWA5TGid2Vjw1vM3RlzxR xCh6o1wQR9WinYk2EEevYcOBpspfmQ8zkUWXxCN6+qZFTaOli80v6S2q5loSSbZR HLJ4LLRL5Jg4pTXaUD+ypcBd573XAHrLLzl9sdvWKl1Vn+XZ1/G0XfX/sI1m/90H 3t7DIfk3IW6lZoeBXW3c6vchNRiZCGwM26oLBxmxqpU9ieG4q2TLIasjqIERDLY8 CNaxDf3XAgMBAAGjggGnMIIBozAfBgNVHSMEGDAWgBQMvZNoDPPeq6NJays3V0fq kOO57TAdBgNVHQ4EFgQUE8ij2tN8ddSsKFgqXnXmqiu1QtwwDgYDVR0PAQH/BAQD AgWgMAwGA1UdEwEB/wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMC MBgGA1UdIAQRMA8wDQYLKwYBBAGyMQECAh0wOgYDVR0fBDMwMTAvoC2gK4YpaHR0 cDovL2NybC50Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcmwwbQYIKwYBBQUH AQEEYTBfMDUGCCsGAQUFBzAChilodHRwOi8vY3J0LnRjcy50ZXJlbmEub3JnL1RF UkVOQVNTTENBLmNydDAmBggrBgEFBQcwAYYaaHR0cDovL29jc3AudGNzLnRlcmVu YS5vcmcwXwYDVR0RBFgwVoIPaW0udW5pdi1tZXR6LmZyghRhdXRob2xkLnVuaXYt bWV0ei5mcoITc2F1cm9uLnVuaXYtbWV0ei5mcoIYc3VwZXJ2aXNldXIudW5pdi1t ZXR6LmZyMA0GCSqGSIb3DQEBBQUAA4IBAQB4u6WlBimVohmGpOWGAklThy9EXBSe u27blAV0GL87kma7gXQK9p/EwC6XqLXDumv7Ukqpx6aYDGnUJHqPf5Qm0cLl2C5F jf2lMUeurFlZC9rRccw7/QzVIh8v48aA07L5dExDboTGKam1ZiZGM96l3814hu4n oz/1/TY4t45G7k5B09IxkN5PZcmm0ZAgkldRg0td3KKpzkBEK2ayoeaIWJ27yZHR iNuusCOXc6gz3KKata8PeqMme9NEQz18Ud/yy7jpQKwffQklybBJGHvOut7dz2L2 rjMyF09naDaTihNYgBNENuIV2z15kKgELh5d9zcbVwd+fbU0m2mR4Esv MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290 MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9 uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0 WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0 Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= MIIEPDCCAySgAwIBAgIQSEus8arH1xND0aJ0NUmXJTANBgkqhkiG9w0BAQUFADBv MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFk ZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBF eHRlcm5hbCBDQSBSb290MB4XDTA1MDYwNzA4MDkxMFoXDTIwMDUzMDEwNDgzOFow gZcxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtl IENpdHkxHjAcBgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMY aHR0cDovL3d3dy51c2VydHJ1c3QuY29tMR8wHQYDVQQDExZVVE4tVVNFUkZpcnN0 LUhhcmR3YXJlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsffDOD+0 qH/POYJRZ9Btn9L/WPPnnyvsDYlUmbk4mRb34CF5SMK7YXQSlh08anLVPBBnOjnt KxPNZuuVCTOkbJex6MbswXV5nEZejavQav25KlUXEFSzGfCa9vGxXbanbfvgcRdr ooj7AN/+GjF3DJoBerEy4ysBBzhuw6VeI7xFm3tQwckwj9vlK3rTW/szQB6g1ZgX vIuHw4nTXaCOsqqq9o5piAbF+okh8widaS4JM5spDUYPjMxJNLBpUb35Bs1orWZM vD6sYb0KiA7I3z3ufARMnQpea5HW7sftKI2rTYeJc9BupNAeFosU4XZEA39jrOTN SZzFkvSrMqFIWwIDAQABo4GqMIGnMB8GA1UdIwQYMBaAFK29mHo0tCb3+sQmVO8D veAky1QaMB0GA1UdDgQWBBShcl8mGyiYQ5VdBzfVhZadS9LDRTAOBgNVHQ8BAf8E BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBEBgNVHR8EPTA7MDmgN6A1hjNodHRwOi8v Y3JsLnVzZXJ0cnVzdC5jb20vQWRkVHJ1c3RFeHRlcm5hbENBUm9vdC5jcmwwDQYJ KoZIhvcNAQEFBQADggEBADzse+Cuow6WbTDXhcbSaFtFWoKmNA+wyZIjXhFtCBGy dAkjOjUlc1heyrl8KPpH7PmgA1hQtlPvjNs55Gfp2MooRtSn4PU4dfjny1y/HRE8 akCbLURW0/f/BSgyDBXIZEWT6CEkjy3aeoR7T8/NsiV8dxDTlNEEkaglHAkiD31E NREU768A/l7qX46w2ZJZuvwTlqAYAVbO2vYoC7Gv3VxPXLLzj1pxz+0YrWOIHY6V 9+qV5x+tkLiECEeFfyIvGh1IMNZMCNg3GWcyK+tc0LL8blefBDVekAB+EcfeEyrN pG1FJseIVqDwavfY5/wnfmcI0L36tsNhAgFlubgvz1o= MIIEmDCCA4CgAwIBAgIQS8gUAy8H+mqk8Nop32F5ujANBgkqhkiG9w0BAQUFADCB lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3Qt SGFyZHdhcmUwHhcNMDkwNTE4MDAwMDAwWhcNMjAwNTMwMTA0ODM4WjA2MQswCQYD VQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEgU1NMIENB MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw+NIxC9cwcupmf0booNd ij2tOtDipEMfTQ7+NSUwpWkbxOjlwY9UfuFqoppcXN49/ALOlrhfj4NbzGBAkPjk tjolnF8UUeyx56+eUKExVccCvaxSin81joL6hK0V/qJ/gxA6VVOULAEWdJRUYyij 8lspPZSIgCDiFFkhGbSkmOFg5vLrooCDQ+CtaPN5GYtoQ1E/iptBhQw1jF218bbl p8ODtWsjb9Sl61DllPFKX+4nSxQSFSRMDc9ijbcAIa06Mg9YC18em9HfnY6pGTVQ L0GprTvG4EWyUzl/Ib8iGodcNK5Sbwd9ogtOnyt5pn0T3fV/g3wvWl13eHiRoBS/ fQIDAQABo4IBPjCCATowHwYDVR0jBBgwFoAUoXJfJhsomEOVXQc31YWWnUvSw0Uw HQYDVR0OBBYEFAy9k2gM896ro0lrKzdXR+qQ47ntMA4GA1UdDwEB/wQEAwIBBjAS BgNVHRMBAf8ECDAGAQH/AgEAMBgGA1UdIAQRMA8wDQYLKwYBBAGyMQECAh0wRAYD VR0fBD0wOzA5oDegNYYzaHR0cDovL2NybC51c2VydHJ1c3QuY29tL1VUTi1VU0VS Rmlyc3QtSGFyZHdhcmUuY3JsMHQGCCsGAQUFBwEBBGgwZjA9BggrBgEFBQcwAoYx aHR0cDovL2NydC51c2VydHJ1c3QuY29tL1VUTkFkZFRydXN0U2VydmVyX0NBLmNy dDAlBggrBgEFBQcwAYYZaHR0cDovL29jc3AudXNlcnRydXN0LmNvbTANBgkqhkiG 9w0BAQUFAAOCAQEATiPuSJz2hYtxxApuc5NywDqOgIrZs8qy1AGcKM/yXA4hRJML thoh45gBlA5nSYEevj0NTmDa76AxTpXv8916WoIgQ7ahY0OzUGlDYktWYrA0irkT Q1mT7BR5iPNIk+idyfqHcgxrVqDDFY1opYcfcS3mWm08aXFABFXcoEOUIEU4eNe9 itg5xt8Jt1qaqQO4KBB4zb8BG1oRPjj02Bs0ec8z0gH9rJjNbUcRkEy7uVvYcOfV r7bMxIbmdcCeKbYrDyqlaQIN4+mitF3A884saoU4dmHGSYKrUbOCprlBmCiY+2v+ ihb/MX5UR6g83EMmqZsFt57ANEORMNQywxFa4Q== lasso-2.8.2/tests/data/metadata/PaxHeaders/metadata_03.xml0000644000000000000000000000013113766621500020366 xustar0029 mtime=1608196928.94689681 30 atime=1678098071.489500813 30 ctime=1678814321.437955747 lasso-2.8.2/tests/data/metadata/metadata_03.xml0000644000175000017500000000145513766621500023644 0ustar00bdauvergnebdauvergne00000000000000 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzTofHpWAdhH3BR/+1lVV NGRVY2qH3H4+8cDaofg5gy6oazgB/qVTZixm+euZF1wVa/T5SR0CBeFF4JYBmC0H Wl39b2bqoNGV0ILLKyjDrE88pHP+k5PBFeb98zRAY95fPDOPfgFc4g64W76fvri8 qfXx3665UATOTXnvqnFOnilA/Ml900ust5Dy/IKyGgVT4xgm2nVQD6HYmg7Rjyga /LBtTEeKgc3k++fM5t8AzhdoNCiGZ/Ez1RztanjEoBzWdSrmHAGsemMUxFLPpQJ8 yglIYiL7fEkyQ0KMvRcTDk0pVzmNEqTNKQ3mPwpMz+TWM8+wMc9FjNtZaGc213om WQIDAQAB lasso-2.8.2/tests/data/metadata/PaxHeaders/metadata_06.xml0000644000000000000000000000013113766621500020371 xustar0029 mtime=1608196928.94689681 30 atime=1678098071.489500813 30 ctime=1678814321.437955747 lasso-2.8.2/tests/data/metadata/metadata_06.xml0000644000175000017500000000132613766621500023644 0ustar00bdauvergnebdauvergne00000000000000 xA7SEU+e0yQH5rm9kbCDN9o3aPIo7HbP7tX6WOocLZAtNfyxSZDU16ksL6W jubafOqNEpcwR3RdFsT7bCqnXPBe5ELh5u4VEy19MzxkXRgrMvavzyBpVRgBUwUlV 5foK5hhmbktQhyNdy/6LpQRhDUDsTvK+g9Ucj47es9AQJ3U= AQAB lasso-2.8.2/tests/data/metadata/PaxHeaders/metadata_02.xml0000644000000000000000000000013113766621500020365 xustar0029 mtime=1608196928.94689681 30 atime=1678098071.489500813 30 ctime=1678814321.437955747 lasso-2.8.2/tests/data/metadata/metadata_02.xml0000644000175000017500000000335713766621500023646 0ustar00bdauvergnebdauvergne00000000000000 -----BEGIN CERTIFICATE----- MIIDnjCCAoagAwIBAgIBATANBgkqhkiG9w0BAQUFADBUMQswCQYDVQQGEwJGUjEP MA0GA1UECBMGRnJhbmNlMQ4wDAYDVQQHEwVQYXJpczETMBEGA1UEChMKRW50cm91 dmVydDEPMA0GA1UEAxMGRGFtaWVuMB4XDTA2MTAyNzA5MDc1NFoXDTExMTAyNjA5 MDc1NFowVDELMAkGA1UEBhMCRlIxDzANBgNVBAgTBkZyYW5jZTEOMAwGA1UEBxMF UGFyaXMxEzARBgNVBAoTCkVudHJvdXZlcnQxDzANBgNVBAMTBkRhbWllbjCCASIw DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM06Hx6VgHYR9wUf/tZVVTRkVWNq h9x+PvHA2qH4OYMuqGs4Af6lU2YsZvnrmRdcFWv0+UkdAgXhReCWAZgtB1pd/W9m 6qDRldCCyysow6xPPKRz/pOTwRXm/fM0QGPeXzwzj34BXOIOuFu+n764vKn18d+u uVAEzk1576pxTp4pQPzJfdNLrLeQ8vyCshoFU+MYJtp1UA+h2JoO0Y8oGvywbUxH ioHN5PvnzObfAM4XaDQohmfxM9Uc7Wp4xKAc1nUq5hwBrHpjFMRSz6UCfMoJSGIi +3xJMkNCjL0XEw5NKVc5jRKkzSkN5j8KTM/k1jPPsDHPRYzbWWhnNtd6JlkCAwEA AaN7MHkwCQYDVR0TBAIwADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0 ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFP2WWMDShux3iF74+SoO1xf6qhqaMB8G A1UdIwQYMBaAFGjl6TRXbQDHzSlZu+e8VeBaZMB5MA0GCSqGSIb3DQEBBQUAA4IB AQAZ/imK7UMognXbs5RfSB8cMW6iNAI+JZqe9XWjvtmLfIIPbHM96o953SiFvrvQ BZjGmmPMK3UH29cjzDx1R/RQaYTyMrHyTePLh3BMd5mpJ/9eeJCSxPzE2ECqWRUa pkjukecFXqmRItwgTxSIUE9QkpzvuQRb268PwmgroE0mwtiREADnvTFkLkdiEMew fiYxZfJJLPBqwlkw/7f1SyzXoPXnz5QbNwDmrHelga6rKSprYKb3pueqaIe8j/AP NC1/bzp8cGOcJ88BD5+Ny6qgPVCrMLE5twQumJ12V3SvjGNtzFBvg2c/9S5OmVqR LlTxKnCrWAXftSm1rNtewTsF -----END CERTIFICATE----- lasso-2.8.2/tests/data/metadata/PaxHeaders/feide-prod.xml0000644000000000000000000000013113766621500020322 xustar0029 mtime=1608196928.94689681 30 atime=1678098071.489500813 30 ctime=1678814321.437955747 lasso-2.8.2/tests/data/metadata/feide-prod.xml0000644000175000017500000000737413766621500023606 0ustar00bdauvergnebdauvergne00000000000000 MIIDhjCCAm4CCQCMHNhxUI2H1TANBgkqhkiG9w0BAQUFADCBhDELMAkGA1UEBhMCTk8xEjAQBgNVBAcTCVRyb25kaGVpbTETMBEGA1UEChMKVW5pbmV0dCBBUzEOMAwGA1UECxMFRkVJREUxFTATBgNVBAMTDGlkcC5mZWlkZS5ubzElMCMGCSqGSIb3DQEJARYWbW9yaWEtZHJpZnRAdW5pbmV0dC5ubzAeFw0wODA5MDUxMTU0MzNaFw0xODA3MTUxMTU0MzNaMIGEMQswCQYDVQQGEwJOTzESMBAGA1UEBxMJVHJvbmRoZWltMRMwEQYDVQQKEwpVbmluZXR0IEFTMQ4wDAYDVQQLEwVGRUlERTEVMBMGA1UEAxMMaWRwLmZlaWRlLm5vMSUwIwYJKoZIhvcNAQkBFhZtb3JpYS1kcmlmdEB1bmluZXR0Lm5vMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4fTsmIsKVGtniXddnerSeiLeAZAlAOL8v+ebzVzYcpTJzMHrplD+lF2tXxRgs7IGEw3t2zRCtxnGbiGkXPW+oCs4T989z+Sq8nh7Lff/XlyK+jQ7BtfC8RUYQ+eNEQy0Fif+81JyPbiwZovbiL4WrK1GOG81/2CF7rvwyXJkDD1YXJ5W18/c06YLfYJjuzZgEoCVRq6ecgQyPKg1xwIpW2GpkKOBXA7oKWtev+xcmSiLZwZE96mSHjty0L+wW6NUuf2/8VSCc4IED0EbzqFUoeHuGXqPak+tu9+VpP6vmmyp4gSCxsmWtoKm7UC8P1QeCyZxwQaoGlIp78wsE5ao5wIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQACUWuuirUSwDWksdkwKuqsNttnNmivwUMLtKDjHbMcwVK/b4qWjrAjfmJXxamUSYlnGjeoiqSQQuc3/qHCPAZUnN8VqXcZUCBXWjMO7Y/AnnsFKHpkYm51jWckjudeyfUr4UnH7te0OuUrGRIVrRRg3DqLdgrcbkJ98JyT97hnaDMke4qNVwrQFF+yvxYs1aYkILySBB/KPGSTh5sxJovcyWd7GY4ad5nH5oEjXF1yZzndmUuHGlTTzk6SGzmUJgqKyba+KJ/jauy6qNC1gPqfnbntWKDkE9a9ow8tlsi3jHI9AZu9U6LnOvTJ8MjhyXOEByCaDnTpK8JiZr6JvCaV MIIDhjCCAm4CCQCMHNhxUI2H1TANBgkqhkiG9w0BAQUFADCBhDELMAkGA1UEBhMCTk8xEjAQBgNVBAcTCVRyb25kaGVpbTETMBEGA1UEChMKVW5pbmV0dCBBUzEOMAwGA1UECxMFRkVJREUxFTATBgNVBAMTDGlkcC5mZWlkZS5ubzElMCMGCSqGSIb3DQEJARYWbW9yaWEtZHJpZnRAdW5pbmV0dC5ubzAeFw0wODA5MDUxMTU0MzNaFw0xODA3MTUxMTU0MzNaMIGEMQswCQYDVQQGEwJOTzESMBAGA1UEBxMJVHJvbmRoZWltMRMwEQYDVQQKEwpVbmluZXR0IEFTMQ4wDAYDVQQLEwVGRUlERTEVMBMGA1UEAxMMaWRwLmZlaWRlLm5vMSUwIwYJKoZIhvcNAQkBFhZtb3JpYS1kcmlmdEB1bmluZXR0Lm5vMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4fTsmIsKVGtniXddnerSeiLeAZAlAOL8v+ebzVzYcpTJzMHrplD+lF2tXxRgs7IGEw3t2zRCtxnGbiGkXPW+oCs4T989z+Sq8nh7Lff/XlyK+jQ7BtfC8RUYQ+eNEQy0Fif+81JyPbiwZovbiL4WrK1GOG81/2CF7rvwyXJkDD1YXJ5W18/c06YLfYJjuzZgEoCVRq6ecgQyPKg1xwIpW2GpkKOBXA7oKWtev+xcmSiLZwZE96mSHjty0L+wW6NUuf2/8VSCc4IED0EbzqFUoeHuGXqPak+tu9+VpP6vmmyp4gSCxsmWtoKm7UC8P1QeCyZxwQaoGlIp78wsE5ao5wIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQACUWuuirUSwDWksdkwKuqsNttnNmivwUMLtKDjHbMcwVK/b4qWjrAjfmJXxamUSYlnGjeoiqSQQuc3/qHCPAZUnN8VqXcZUCBXWjMO7Y/AnnsFKHpkYm51jWckjudeyfUr4UnH7te0OuUrGRIVrRRg3DqLdgrcbkJ98JyT97hnaDMke4qNVwrQFF+yvxYs1aYkILySBB/KPGSTh5sxJovcyWd7GY4ad5nH5oEjXF1yZzndmUuHGlTTzk6SGzmUJgqKyba+KJ/jauy6qNC1gPqfnbntWKDkE9a9ow8tlsi3jHI9AZu9U6LnOvTJ8MjhyXOEByCaDnTpK8JiZr6JvCaV urn:oasis:names:tc:SAML:2.0:nameid-format:transient Feide Support moria-drift@uninett.no lasso-2.8.2/tests/data/metadata/PaxHeaders/simplesamlphp-metadata.xml0000644000000000000000000000013213766621500022741 xustar0030 mtime=1608196928.954896876 30 atime=1678098071.489500813 30 ctime=1678814321.437955747 lasso-2.8.2/tests/data/metadata/simplesamlphp-metadata.xml0000644000175000017500000000730113766621500026212 0ustar00bdauvergnebdauvergne00000000000000 MIICcTCCAdqgAwIBAgIJAKxvdin5lqsuMA0GCSqGSIb3DQEBBQUAMDAxCzAJBgNVBAYTAkZSMSEwHwYDVQQKExhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwHhcNMTAxMDA1MTQzNzIzWhcNMjAxMDA0MTQzNzIzWjAwMQswCQYDVQQGEwJGUjEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDPNXagKV5qkKzzEKy7e8MP7iQE3og802FVYj77Ld8gph0z4GKWqaYsg43lfJLJ3cOl/yRrvm02eoRSgoKMKi78EGwDdyGCbif4XHL1uxSXReOkzhBezkvBWzLX7QNRItGN9bEmvtLdcN5EprvD94NVJdhj2VYCsOgOaXjxXVRXzwIDAQABo4GSMIGPMB0GA1UdDgQWBBSLjyauR839sgqNb/6eKNjPwXRPfTBgBgNVHSMEWTBXgBSLjyauR839sgqNb/6eKNjPwXRPfaE0pDIwMDELMAkGA1UEBhMCRlIxITAfBgNVBAoTGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZIIJAKxvdin5lqsuMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAZvEqXyFXfkR1qsw5DA0nlfq6VEjFpyliMc/9ppY8u6/rsL0f96ZW+7RuCdpeBjwzGkNMY51udIcmTka9PeXLSjpU7IhEEV7NX5CQxDoYrUjM3VT5AacW7mJDlN90pFKbxN7MEwoylxLYDoK7vDy+s/nmBHEkp/ibGDH6yDPl0GY= MIICcTCCAdqgAwIBAgIJAKxvdin5lqsuMA0GCSqGSIb3DQEBBQUAMDAxCzAJBgNVBAYTAkZSMSEwHwYDVQQKExhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwHhcNMTAxMDA1MTQzNzIzWhcNMjAxMDA0MTQzNzIzWjAwMQswCQYDVQQGEwJGUjEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDPNXagKV5qkKzzEKy7e8MP7iQE3og802FVYj77Ld8gph0z4GKWqaYsg43lfJLJ3cOl/yRrvm02eoRSgoKMKi78EGwDdyGCbif4XHL1uxSXReOkzhBezkvBWzLX7QNRItGN9bEmvtLdcN5EprvD94NVJdhj2VYCsOgOaXjxXVRXzwIDAQABo4GSMIGPMB0GA1UdDgQWBBSLjyauR839sgqNb/6eKNjPwXRPfTBgBgNVHSMEWTBXgBSLjyauR839sgqNb/6eKNjPwXRPfaE0pDIwMDELMAkGA1UEBhMCRlIxITAfBgNVBAoTGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZIIJAKxvdin5lqsuMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAZvEqXyFXfkR1qsw5DA0nlfq6VEjFpyliMc/9ppY8u6/rsL0f96ZW+7RuCdpeBjwzGkNMY51udIcmTka9PeXLSjpU7IhEEV7NX5CQxDoYrUjM3VT5AacW7mJDlN90pFKbxN7MEwoylxLYDoK7vDy+s/nmBHEkp/ibGDH6yDPl0GY= Triskel Studio ac@h-medias.com lasso-2.8.2/tests/data/metadata/PaxHeaders/metadata_01.xml0000644000000000000000000000013113766621500020364 xustar0029 mtime=1608196928.94689681 30 atime=1678098071.489500813 30 ctime=1678814321.437955747 lasso-2.8.2/tests/data/metadata/metadata_01.xml0000644000175000017500000000330513766621500023636 0ustar00bdauvergnebdauvergne00000000000000 MIIDnjCCAoagAwIBAgIBATANBgkqhkiG9w0BAQUFADBUMQswCQYDVQQGEwJGUjEP MA0GA1UECBMGRnJhbmNlMQ4wDAYDVQQHEwVQYXJpczETMBEGA1UEChMKRW50cm91 dmVydDEPMA0GA1UEAxMGRGFtaWVuMB4XDTA2MTAyNzA5MDc1NFoXDTExMTAyNjA5 MDc1NFowVDELMAkGA1UEBhMCRlIxDzANBgNVBAgTBkZyYW5jZTEOMAwGA1UEBxMF UGFyaXMxEzARBgNVBAoTCkVudHJvdXZlcnQxDzANBgNVBAMTBkRhbWllbjCCASIw DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM06Hx6VgHYR9wUf/tZVVTRkVWNq h9x+PvHA2qH4OYMuqGs4Af6lU2YsZvnrmRdcFWv0+UkdAgXhReCWAZgtB1pd/W9m 6qDRldCCyysow6xPPKRz/pOTwRXm/fM0QGPeXzwzj34BXOIOuFu+n764vKn18d+u uVAEzk1576pxTp4pQPzJfdNLrLeQ8vyCshoFU+MYJtp1UA+h2JoO0Y8oGvywbUxH ioHN5PvnzObfAM4XaDQohmfxM9Uc7Wp4xKAc1nUq5hwBrHpjFMRSz6UCfMoJSGIi +3xJMkNCjL0XEw5NKVc5jRKkzSkN5j8KTM/k1jPPsDHPRYzbWWhnNtd6JlkCAwEA AaN7MHkwCQYDVR0TBAIwADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0 ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFP2WWMDShux3iF74+SoO1xf6qhqaMB8G A1UdIwQYMBaAFGjl6TRXbQDHzSlZu+e8VeBaZMB5MA0GCSqGSIb3DQEBBQUAA4IB AQAZ/imK7UMognXbs5RfSB8cMW6iNAI+JZqe9XWjvtmLfIIPbHM96o953SiFvrvQ BZjGmmPMK3UH29cjzDx1R/RQaYTyMrHyTePLh3BMd5mpJ/9eeJCSxPzE2ECqWRUa pkjukecFXqmRItwgTxSIUE9QkpzvuQRb268PwmgroE0mwtiREADnvTFkLkdiEMew fiYxZfJJLPBqwlkw/7f1SyzXoPXnz5QbNwDmrHelga6rKSprYKb3pueqaIe8j/AP NC1/bzp8cGOcJ88BD5+Ny6qgPVCrMLE5twQumJ12V3SvjGNtzFBvg2c/9S5OmVqR LlTxKnCrWAXftSm1rNtewTsF lasso-2.8.2/tests/data/PaxHeaders/sp1-ssl0000644000000000000000000000013213766621500015230 xustar0030 mtime=1608196928.958896909 30 atime=1678814326.421984131 30 ctime=1678814321.473955952 lasso-2.8.2/tests/data/sp1-ssl/0000755000175000017500000000000013766621500020555 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tests/data/sp1-ssl/PaxHeaders/all.p120000644000000000000000000000013213766621500016401 xustar0030 mtime=1608196928.958896909 30 atime=1678098071.525501095 30 ctime=1678814321.473955952 lasso-2.8.2/tests/data/sp1-ssl/all.p120000644000175000017500000001044413766621500021654 0ustar00bdauvergnebdauvergne000000000000000‚ 0‚æ *†H†÷  ‚ׂÓ0‚Ï0‚ ï *†H†÷  ‚ à0‚ Ü0‚ Õ *†H†÷ 0 *†H†÷  0†t@q6-ŠÇ€‚ ¨Í|p¡ÔIVZ”£©öƒÖ)ñq³BÆžA¶è8½ØL½>‚‹¦(dÆ~*š›"Ué¿ÃÙЉÝèà¨eÌà —TÞ!™Â_²ó]¡>½âÝÐ9À×sqbìÀ—ÂV’ BÀºÒ×L…Ѳôœ2kj¢”ÇÖ³NC¯‰y*«-vÿbÚí^%ÓpUšXÕ)8ëdÍ8Fý!ˆ}ñ²<¶×ùê¢dXoÍ ÝKÓ3—Í!~ôª5ÖeóF´¤¦ðÖ¢r¨½å˜»qf•\‹tÀñà^Ü;~gEN\V\Û㙀¢µMq®ÞÑzJ=ŒÌ¼lˆVCû»µ°#ÛFa/!s.2±|HÃ/.Õü£FݦˆðŒéøy>ë)µM6ÚT%’Óhd[åuÌõÞ¢ÿ^ž—¤ˆ_¸…ŒŒ–DtF!WQ¡d}LÈÙ!ä詞rùQK®z,jR ’tWxxˆµÁ0žÁ@Ñ•š‹ý(µ’<îc ÿÈÁ‡ôêxŒ•em!—I¹6Ž8p¢©xŸO!Ÿ!¡âš½ï$îõÁÝ‹:¯¿=Ab¥@~ÜÎÙp¢mÉdE7*áÁ†PðÕ\ÚøòôÙRïÅJ÷=ò-Bßä’ŸåþY©¹à­Ñ¡¡£›þs0 QV´Z•ðþ%ÏVÆjŬ¹¨Ó4$ñÑפrŸfzfô‚^mä?-D½q•]z€_ÈâþÐ ·ûSÀxѱŒ9>(ŒèÀ¸„i¨d( è+èhéËk6åG Ö¸M%U‡>ôç1þAôD¨¦ ÐÚýž4ò'ÔkrU/æ54ì:F‘Ñ|ÐU;c©zëŽx‹ØŒªØ ñ§Å5&•«“ië𩪼™Û5ÖÆ,6¼5›ä'ô™‚ø¦ˆç"§tKNzª\?z¯ñ9öéËOR>=D%ü.èw‡’/-ŠNMã§UJëïœj‹;îmÂ3aY6Ó¹³¯nyð©Ã!ç˜.3òipË¿¿LÕÎF‚Vÿå×Õ^°%[­ÆE¾kÿ€\Œ²·Ê'ŒÎfžNν^ÀBS„±,ÛEg­94ãRŠš‚Ÿ°ÿAïBeÓš+-EC¼åÉý5„V|éøDº $”Ϋ5**` œ\ »g†&ÝÕãvhÈñ¨¬ËƒÉŠXš >ˆ»<ªÞŸ÷¨ëÙIëDÄh?vzˆ‹ÒÔ(yPú¬µ‹F©z0¾è}Xd<ÞpñfŒ7;S§Þ¢c•±=0¸Jæ…ªz+”Üè¢YïWDHm¬[Ué¨@aÙXa…ÞzQ§žÃÂ’,î™_b݆¾2U J[]çI¤&Àë ôÚsŽ”Z<: ­ØT‘m£KDoNÑcCR£ù$ÙãÚ—¿QÎñî[hذèäÌ"Pé„ Îó€¾E%Îâ{…B¨qË3KÒ~ÿn.0ºÔ•Èܺÿ{-CäP¾WôË[—QÐO£#û¹@®0[Ñèˆx|’&ƒ]U‚ç¥îÓêe@ªXºz¿_ Õóú×µàÖt¥z\«—L›y®×œ“ÉâLº˜¿†Ž,ÉÈÐéÛ*¥§ (IùÚp¼%#= ȳ´2;¨ÝÖ°£¯ðüx]×I¤Y¦¡l§t]ÿñËî]¦ÎÄÆíéǵu¸7 ™–C½­ÒYœŸ½<‹VÀ /B¡û]½ÌäŠ þwr“b¥¯hy“wØ.©¿+ɤ-Œù‡â±‹HFeŸªíž´‹á_ÐC7`®Í-ø¥†.àeùx¶ Ú¦$áˆ9»÷QÞcáŸøU*ÀTr¸Ód‚¾IW0"‹á> \ø° ‰­™Ð&ÉTïîº ¢p«pU›v1îÆjw¶#ÁÊ_:Ê h2¶nù™Š² 0eì3Ð ìSÉ.Æ‹)À”ç`††©Ñ¾Š³M­Pc¹¤îE£öÎû9LH4L8à *åð…зù¨¡†À°âðßJ܉¡d\ÛüÉ̵©9‚³-à¹,IÓU~öžÈQBÈ1S]Á½†ãW_Xd@æ£ø°ï±Yx¡V’¢ÓôËŸh\‰ Å±{ˆ™ÆXyÙʶ£­~óz•îPu—A‡LŒ­¤c$ç,½Ž/¾í€ôzcuItã6¿kÿ»£B7œGh ëÓ0&L«®z¥¤é;«Ì8òÙp˜‘>ªtÛçxŸü5vÈ¡|–Ǿ¸~ J®é?ëäÚÊ»ä6KH½*Ìe!DFi/‰E’ ø&±@êƒáI«w}tŒ=™Mñß#¦µNZ¿—õ)G`§„*Æïß)øÎÎfoýÍqb˜'»mZ ô§ך/*¦…w"ÆyX|î±°eÃVKqLJõ7§I䯓ƒ` êÈI?¯–þoD›nMCº­:÷YŠÓ„¹òI´ALr=læÙ×¹‰û ß ŠZþ~ö—f.uû«mZòÖ§×8ýÞ³?öä”Ô/;‡‘u2G¸ñ,c7û—¾Û¾¢J˜ÛŠo ·‡ü«.¤¾î~C«MÑ’K×ÂÒL4nνɈ;}ØgØ EŸ1ú‰-Kì+`Í{çú~¡j®ó(:äA©½¦è;ÏÇãܵ^ÃæO]Å'ÁwÈUä~ûDf]„Έ·ðä ØÈ|ö1ITÉuýÎd‡šY­ªòÐG±µn Å!§Ú”æû#4•~t«¹¼N?£¶íûÕkAÿY  Neq¤˜d¡¡óú(cuý¹M x« æ S©DÍ´o ч(YÊ':&õeMuŒŒ3ªY?CÚýaÌàI¬¯¢}‹ÿ&É}Ìæ`~V«CiN'3߀ߓq—†ß~ <€É7Ãhý Å«Hyøoà‰çR÷1Ùž3L—„½cù)0uXÑ ß]@ì¡]¡zWB%óeÇŠ ‰‡`OÎï§/³hbKïAëß 1®·\RÖå€ýÑl5Þ¨ÞÑ*.Ðaj ª†Ñ)¡¢ËâО<¯0²*<¯^tâ[¦é©ôB»‘xƒÅ£_˜3z“+ÞrcÏKÑm7>6&ùüýÔÀZm1eb ¦nÜ"Îòû3BÞœ2n†¤*,NÐX)ëRÿ¢1–rPq¿ÁŠ ýÙ#€è!lØBÄßÝÌÅJÀˆU^…øÌ}ÍäÏîÓ!ä©^ÁH'Åô/),«!E8Ô/XѶQfq¶ž›ÅЊ¥5»aÆc†fTrç,ð'ðj[±jn©-LãÒãØ?~À—òÏ(%g¶mî–‡ÕË'Jw+Øø[NjC—¡”¬íÁÙòåæPŽ¥IYSyŽ&yØXÚ$Ýx˜™ŠµîMIì"‘à YD’àtAc'#`>ö¾[1µÎOé=%=©õvpÁs~X“}yÓô²>”²ä1dÛ—ì¿ƒÔær}?‘A”tê?åªÿ:ë€EmÈÖæ’è»|™õtæ¶nK”¬ð÷’9ý!û›“:tóÚî„ +žÇý¶þ«¥ÄƒÁ`ÛÓ±¾›Ç×–cNAä½êö_–MÝÈ(íÉøuZèÔNÇ;Ά[}  ÏÓ":vƒÙO»ëÊߨIô«ÐÌzÔmÞû†œUðQû·Âã›Ø›M9^Ç‹a`‡±KJgñ¿”¥\éÙô™89¸Èa{ð Cû9­ÈÄ3Mᵉ†½ü"ׄ ¥h“gqÊæ÷>Æ™!îŽáƒNoO7î4½GÞÕõcqIcœ|DºF &)oDg¨EGã1»0# *†H†÷  1;ñöt~µ”V÷È‹àE>0“ *†H†÷  1…‚Entrouvert SSL Liberty Alliance SP #1 web server test certificate010!0 +“H’K*^9g}Sç$„ aÎ^?“2¯¢xlasso-2.8.2/tests/data/sp1-ssl/PaxHeaders/jks.keystore0000644000000000000000000000013213766621500017663 xustar0030 mtime=1608196928.958896909 30 atime=1678098071.525501095 30 ctime=1678814321.473955952 lasso-2.8.2/tests/data/sp1-ssl/jks.keystore0000644000175000017500000001134513766621500023137 0ustar00bdauvergnebdauvergne00000000000000þíþírootþWÀÿX.5090‚Œ0‚t 0  *†H†÷ 0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #110U Entrouvert0 040813103644Z 290404103644Z0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #110U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚¶”:…;[ÏOê¦ÉqTÏàýý™[êqÎÓÖ0µ×.U&•ˆ-(¦%líŠW,¿vDbáÓ€ ŸIkWçÚJŸâHÈÁéOz?ÃJKB*”4% üFâqjiO)Má³® 0\Cå¶ÌuÆÞp÷7å•í™ßÅj*x™‡È`Bq´zO„F%½§ÕxtcFU‰ùtó¥9¯Êq4¿(Rî®`‹{„Á\d¡}²P F«¢&”g··fŸÜꪕT xë9ö-mp° nUAZ¶§xÕ}Ô±ŸÐæ”Xb±ý7%õQ¯Ú›ú܉Ò )µ–úø8vuïŸÏ©£‚I0‚E0U)®kvÊ5ÉZ;5ò"B?`á;0U#0€)®kvÊ5ÉZ;5ò"B?`á;0Uÿ0ÿ0 U0*U%#0!+ +‚7  `†H†øB0 `†H†øB0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0V `†H†øB IGEntr'ouvert Liberty Alliance test web server Certification Authority #10  *†H†÷ ‚6Y‡y×,Kˆêæ2%ýò©d¤àbªÃ¦è¼ó¹mqqÝ÷…P“ë÷ Ò9OÚŸ”Ä}c€€¿¤MTWÈ/™cƒ¸G ³²òK襲I<|Vï®iœ¦·]º¼À˜ÂCP$| ×ïÏØjš§¦ª!µÁ^`({,Zª×i§¥°r ž­¬†žÏõɱóý£*ˆFjg›/ýr°f̰mºÈ=ñÜ€Ü[“I¼–œëÑöµÀ7Ä£H8zg=¿+™4¢³¨dò}êpp j‹¯rÞ=¡LåZGBmK¾ƒ´jy£ÊÄ©ì°"€tJO:Y­ºtomcatþW½0‚þ0 +*‚ê1GVÆ1Ç‘$8oÞŸ^%Ÿ…0cÉ6ó'%;ï÷4Ëâá>ßv¬@éÛmŒTS\ ë ¡RjŒÀ52qšÁýÃX8x4LJ`øi£P æÝtàö4-|ai‹ =b,¤0îl§ *zô)ûAõI¨5\cñ×o}Ív—me±š^û ö|´ÌZ¦ #.f*Ê9|5Ã>eéuþ:É€¢ÍK9Pæ®f߈Œ-M Ââ‰wRʬŸ ï{j{Íg›Í.åÄ4,ãñ’oÍä¡Bó\íqÔ@æ¨ È4-}•i9‘^0–FdXúåö™ã¹Á2|®Ç´½uiÄ5êX„Ic½ ~ë(¾Èÿi #‡^Pk2•ŸeÜRV¸| ¬jœ¹|j< ¼›<ùgt¤]ãèƒE˜)c§¢Gz5VæO¡{Œþ_”Hé×}ø !ù„yr ™\µCsºæ·©ÆS Æ-`5ŠùbÆD,Š ,åšÒß¹pé@Œ†&Žø•Á#Ù ‰dIÖÐæ1|+p›G—°Ñ_öÑ8w:¾OzuxŒ{[à _ÝIÿÐ`2¢¦#éYS¿ßR­gK\­Š¦{bEÁH¯J¿”/Ha<4t|Ö][Úá‰H8Öq’Zãô̹¾AöXàƒû+zŒêúêÍß›/=QyÅímø›½Oûç£ •k+6c¾¾˜ïT¬„¢œ3%‚Åg‘LŽÑàryOÁfèòþÑv#¨_ö:#Nri¾tÅmzqI_`Iڰݦ% ” þšdugi0g†< kÿ§gQ­¼•÷1Õj>ºp"ÖÖÀ["ÿ’Ÿ“3BIÔ?LÒO¡“œöÁ¿½MÈ*QA«;UÛfØošxý+vœN8P™tèk£G˜Z#A‡KZϲáª#K>lÓñÌ&ØÎ|Øš88ùÚ«TGºù¶ŠÝ/8d›&†ê…ˆEVÄ121)¶Iɶ®tÿw WÆ$^—y,LPÚc¡ˆ BæÀª¼¥^ó@€¿X¢"ë´ñ=¦)Ç?N:ìqsÍ-R.¦îL4ôM›cÇÝ¥˜9%1°tó÷‚$L=§—-nsoY-ˆ.„­¯E”†¢û],¶fÜ_Cè|£sÏvtjßð,gÊØgæǛׇ©^–µãt/£ø¢¿»(c7§êñ¡7]±8¼?™¿‘=ÌÿÅhL¨¡<ÀçÇMƒ‰üqÇ ‹Ùôè96.¼Ì“wƒnÖÐù,­Èlkû÷ ê«£‡ÞK„?³øHŠÑkéÝç±=ENüèÆ´`ëmÉu/»|QäZ~åÔ˜îfV Uº–⧆Wy±.n̉Z8,i.sö?‘–;çëX.509T0‚P0‚8 0  *†H†÷ 0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #110U Entrouvert0 040813104426Z 240814104426Z001 0 Usp110U  Entrouvert1 0 UFR0‚"0  *†H†÷ ‚0‚ ‚­ /%°¨-ä­¡»šd"˜“ÚZ;™S¬•†ùçÐöïË9#à8ç []MN’@€Q89ÂÙJîÞSèq9Òu È;W…Y ýí­pšÔ¯•Z; Ž@Sšº ùCÛJ óÕ¬¨öô3B=úh?® ònKÛoä3ÚÒÚNµ–*eØm‹í”6kÙgÓ (·ÌŸõ ‚¡ãó죂 Ò²Ï<;jæì\Þßp|­Šö]ä|yª?ËÌb)€«) ª€éÖ±NžVÖTëg»–-ŽÉ9ÑE¦JÿÄRÐ °þÖ”F“øQÄë6Í™oH8ŠÌ”ÈìLLsWn1L7Å£‚@0‚<0U†ªä˜XéN:´xV¸³}Òi0U#0€)®kvÊ5ÉZ;5ò"B?`á;0 Uÿ00 U 0*U%#0!+ +‚7  `†H†øB0 `†H†øBÀ0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0P `†H†øB CAEntrouvert SSL Liberty Alliance SP #1 web server test certificate0  *†H†÷ ‚PŠ2„ ·âÝvàlZ}Í^|o5¶pycëþ÷Æ´)0‡Bòµ ð`Ì_NÆzl§6ï½îø¶®ŽíRéÎÊ:½ä­óÛ›ŒcqÑ%Ñ6 æê¸Yâ³wÌ"—ÑuÞŠknMŸ?°Ž’¸'I`H˜áP;Ò2×X£Acå½ûh)¤¤ÝM¦ ØpFWY°ÿ-ÀW_^VÜÑ,€UYnç;ü)]bHŸŒpÔѵ¬¿”\E¾ã½I7<+æŒӑ✭­Wcœ(rßKSÉ6̬§M@IÉż dS9$Âß=O©Í~$+‹YóÀe>8ü1:˜×Þ 2)*í(Þ®X.5090‚Œ0‚t 0  *†H†÷ 0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #110U Entrouvert0 040813103644Z 290404103644Z0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #110U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚¶”:…;[ÏOê¦ÉqTÏàýý™[êqÎÓÖ0µ×.U&•ˆ-(¦%líŠW,¿vDbáÓ€ ŸIkWçÚJŸâHÈÁéOz?ÃJKB*”4% üFâqjiO)Má³® 0\Cå¶ÌuÆÞp÷7å•í™ßÅj*x™‡È`Bq´zO„F%½§ÕxtcFU‰ùtó¥9¯Êq4¿(Rî®`‹{„Á\d¡}²P F«¢&”g··fŸÜꪕT xë9ö-mp° nUAZ¶§xÕ}Ô±ŸÐæ”Xb±ý7%õQ¯Ú›ú܉Ò )µ–úø8vuïŸÏ©£‚I0‚E0U)®kvÊ5ÉZ;5ò"B?`á;0U#0€)®kvÊ5ÉZ;5ò"B?`á;0Uÿ0ÿ0 U0*U%#0!+ +‚7  `†H†øB0 `†H†øB0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0V `†H†øB IGEntr'ouvert Liberty Alliance test web server Certification Authority #10  *†H†÷ ‚6Y‡y×,Kˆêæ2%ýò©d¤àbªÃ¦è¼ó¹mqqÝ÷…P“ë÷ Ò9OÚŸ”Ä}c€€¿¤MTWÈ/™cƒ¸G ³²òK襲I<|Vï®iœ¦·]º¼À˜ÂCP$| ×ïÏØjš§¦ª!µÁ^`({,Zª×i§¥°r ž­¬†žÏõɱóý£*ˆFjg›/ýr°f̰mºÈ=ñÜ€Ü[“I¼–œëÑöµÀ7Ä£H8zg=¿+™4¢³¨dò}êpp j‹¯rÞ=¡LåZGBmK¾ƒ´jy£ÊÄ©ì°"€tJO:Y­º&G)€3_\¬„Z¦a=ù™’ž ~lasso-2.8.2/tests/data/sp1-ssl/PaxHeaders/certificate.pem0000644000000000000000000000013213766621500020272 xustar0030 mtime=1608196928.958896909 30 atime=1678098071.525501095 30 ctime=1678814321.473955952 lasso-2.8.2/tests/data/sp1-ssl/certificate.pem0000644000175000017500000000302613766621500023543 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN CERTIFICATE----- MIIEUDCCAzigAwIBAgIBAjANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjE/ MD0GA1UEAww2RW50cm91dmVydCBMaWJlcnR5IEFsbGlhbmNlIHdlYiBzZXJ2ZXIg dGVzdCBSb290IENBICMxMRMwEQYDVQQKDApFbnRyb3V2ZXJ0MB4XDTA0MDgxMzEw NDQyNloXDTI0MDgxNDEwNDQyNlowMDEMMAoGA1UEAxMDc3AxMRMwEQYDVQQKEwpF bnRyb3V2ZXJ0MQswCQYDVQQGEwJGUjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC AQoCggEBAK0KLyWwqC3kraG7EJpkIpiTgdpaO5lTrJUehvnn0Pbvyzkj4DjnCw5b XU1OkgVAgFEQHRU4OcLZSu7eU+hxOdJ1IMg7V4VZCf3trXCaE9SvlVo7jQyOnUBT mrqg+UPbSqDz1ayoGPb0M0I9+mg/rhQJ8m5L22/kMxDaH9LaTrWWKmXYbYvtlDYD a9ln0wmNKLfMn/UKgqHj8+wOo4Kg0giyzzw7aubsXN7fcH98rYoZ9l3kfHmqPx/L zGIpgKspCx+qgOnWsU6eVtZU62e7li2OyTnRRaZK/8RS0CCw/taURpMc+FHE6zbN mW9IGDiKzJQQyOxMBExzEFduMUw3xQ8CAwEAAaOCAUAwggE8MB0GA1UdDgQWBBSG quSBmFjpTjq0eFZ/uLN90p0BaTAfBgNVHSMEGDAWgBQpga5rdso1yVo7NfIOIgZC P2DhOzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIFoDAqBgNVHSUEIzAhBggrBgEF BQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMBEGCWCGSAGG+EIBAQQEAwIGwDAm BgNVHREEHzAdhhtodHRwOi8vbGFzc28uZW50cm91dmVydC5vcmcwJgYDVR0SBB8w HYYbaHR0cDovL2xhc3NvLmVudHJvdXZlcnQub3JnMFAGCWCGSAGG+EIBDQRDFkFF bnRyb3V2ZXJ0IFNTTCBMaWJlcnR5IEFsbGlhbmNlIFNQICMxIHdlYiBzZXJ2ZXIg dGVzdCBjZXJ0aWZpY2F0ZTANBgkqhkiG9w0BAQUFAAOCAQEAUIoyhCCBt+LdduBs Wn3NXnxvNbZweWPr/vfGtCkwnYdC8rWg8GDMX07GemyBpzbvve74tq6O7VLpzhfK Or3krfPbm4wcY3ED0SXRNiDm6rhZBuKzd8wil9F13oprbk2fP7COkrgnSWBImOEO UDvSMtdYo0Fj5b37aCkeE6Sk3U2mC9hwBEZXWbD/kC3AV19eVtzRLIBVWW7nO/wp EV1iAEifjHDU0bWsvwWUElxFvuMevUk3PCsC5owF05HinK2tV2OcAyhy35BLU8k2 zKynTUBJEsnFvApkG1MBOSTC3z1Pqc1+JCuLWQcS8w/AZT44/AExOpjX3gsyKSoI 7Sjerg== -----END CERTIFICATE----- lasso-2.8.2/tests/data/sp1-ssl/PaxHeaders/private-key-raw.pem0000644000000000000000000000013213766621500021037 xustar0030 mtime=1608196928.958896909 30 atime=1678098071.525501095 30 ctime=1678814321.473955952 lasso-2.8.2/tests/data/sp1-ssl/private-key-raw.pem0000644000175000017500000000331513766621500024311 0ustar00bdauvergnebdauvergne000000000000000: sp-jks.keystore 1: tomcat 2: changeit -----BEGIN PRIVATE KEY----- MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCtCi8lsKgt5K2huxCaZCKYk4Ha WjuZU6yVHob559D278s5I+A45wsOW11NTpIFQIBREB0VODnC2Uru3lPocTnSdSDIO1eFWQn97a1w mhPUr5VaO40Mjp1AU5q6oPlD20qg89WsqBj29DNCPfpoP64UCfJuS9tv5DMQ2h/S2k61lipl2G2L 7ZQ2A2vZZ9MJjSi3zJ/1CoKh4/PsDqOCoNIIss88O2rm7Fze33B/fK2KGfZd5Hx5qj8fy8xiKYCr KQsfqoDp1rFOnlbWVOtnu5Ytjsk50UWmSv/EUtAgsP7WlEaTHPhRxOs2zZlvSBg4isyUEMjsTARM cxBXbjFMN8UPAgMBAAECggEACrbouHK51y2jurH0kzrEEaKAld6kdhgCRbGANhUukTvD36PjDGLy Ak+R9Wl6DS0zRNG0m03B9diylRvbIjdwlyF9iCh0gONEhR6kcKZ5t9+vZcjuMOrbvdHvcMLq7FK1 ykWO44P9F72DNwTTboUS6Fa9VisISWNd7hszgUDXQtMRd0d/B5MOW7O9UUlRNyjUVBhWWCR91v40 5CAsHoF2D7KuLRFecJxfE1vfGCKI7575kkDIVNrc+2HTLsPnBZN9dW01MkZSkAyX6Lm/Kq8f6GkJ pDy0bpuMVFeiOygwH4adnHv6mj2Y9qVCRKOU2QggDTRNeeUIZodHezkhqxvScQKBgQDWX1DxRQxN YhdLMeqgKp7It2GJYQ3J+GkY+BeOH6M1Vkh9k7tU9uT9I8PjUkT3UsrtJN8hJ7lolSk4iy95VzHH QsjhYC4Gr6zDW09xPlJ36aSHiY+JV6fRvJJhp9pYe6kJZwl3IyK9PDpcixg1vUwTalsqNVFj6oxX xjRkuq2FewKBgQDOpC6ECCr26f79Ire1zkYYh+IqW0itVtXU4DcpqEjmbv5TMCmQUwWATMZbl1m1 0+RYwkWqtEdGcHeEiS/quF2GK7IkznO/iq7178A3Y+9z1pd8RwI6xf75C6pQxaZfNokBrSyrj8Wv CTJoTOsHKIq8XAd2M5p3R0yqh9m6IelIfQKBgDgWijwGH9jjUErpTYUIgbDsYgWqsgvlBcJ1rtwN pQsgfyj0DTCGxJUC1Y7ViJvZOqTfX83x8c3OMRHNQOeTi7+h1qM5IfG35xDaBCgR8UvUgqq/sCF0 IMF8gCQy4asC99Aw+EYGmGFAr9hkwDnXRF9UFXQurRPiW0Pf5Pdx7FKfAoGBALN3GAcHaPkk5JZI jrDRQ0OO0DflK8uPvQqy6HW/eADZqPvquk5kLETvaN6nJfyq2IjVwNeu1rAwgTyUQQ9jq6YZURBy VUinU6i43oG8w3whhVMkAKW2y+jT3sljv0i1/mt8UW124kNQg3zeQMjoxwUsEDbyPlcVj1oTvl7P kOGpAoGBAKyFBqg7lfe2Q9Rc9bT0UmuRAJIG/rZXTKXxp2Sh68DlF0Ku5LMJNLEQSM6/O5sr4f/d EMytM0/DzHvnm7VL427FxJPqOvyv9zBM+LqMAdwyAeY37nzLFgYvEN+Bhb0W3I/C6jeZwyzKxg1P aoAdIEmioWN+N+xrbg8OASTFeNS5 -----END PRIVATE KEY----- lasso-2.8.2/tests/data/PaxHeaders/Makefile.in0000644000000000000000000000013214404125674016051 xustar0030 mtime=1678814140.072932776 30 atime=1678814149.984988124 30 ctime=1678814321.257954722 lasso-2.8.2/tests/data/Makefile.in0000644000175000017500000004040014404125674021317 0ustar00bdauvergnebdauvergne00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = tests/data ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ac_check_class.m4 \ $(top_srcdir)/m4/ac_check_classpath.m4 \ $(top_srcdir)/m4/ac_check_junit.m4 \ $(top_srcdir)/m4/ac_prog_jar.m4 \ $(top_srcdir)/m4/ac_prog_java.m4 \ $(top_srcdir)/m4/ac_prog_java_works.m4 \ $(top_srcdir)/m4/ac_prog_javac.m4 \ $(top_srcdir)/m4/ac_prog_javac_works.m4 \ $(top_srcdir)/m4/ac_prog_javah.m4 \ $(top_srcdir)/m4/ac_try_compile_java.m4 \ $(top_srcdir)/m4/as-compiler-flag.m4 \ $(top_srcdir)/m4/dps_java_check_class.m4 \ $(top_srcdir)/m4/dps_xtra_classpath.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h \ $(top_builddir)/lasso/lasso_config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CHECK_CFLAGS = @CHECK_CFLAGS@ CHECK_LIBS = @CHECK_LIBS@ CLASSPATH_JUNIT = @CLASSPATH_JUNIT@ CLASSPATH_OPT = @CLASSPATH_OPT@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CSHARPCILINTERPRETER = @CSHARPCILINTERPRETER@ CSHARPCOMPILER = @CSHARPCOMPILER@ CSHARPCYGPATH_W = @CSHARPCYGPATH_W@ CSHARPDYNAMICLINKING = @CSHARPDYNAMICLINKING@ CSHARPLIBRARYPREFIX = @CSHARPLIBRARYPREFIX@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEBUGGING = @DEBUGGING@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLL_FILENAME = @DLL_FILENAME@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GACUTIL = @GACUTIL@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HTML_DIR = @HTML_DIR@ INKSCAPE = @INKSCAPE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVAC_FLAGS = @JAVAC_FLAGS@ JAVAH = @JAVAH@ JAVAH_FLAGS = @JAVAH_FLAGS@ JAVA_INCLUDE = @JAVA_INCLUDE@ JAVA_JUNIT = @JAVA_JUNIT@ JAVA_VERSION = @JAVA_VERSION@ JDK_INCLUDE = @JDK_INCLUDE@ JNI_EXTRA_LDFLAGS = @JNI_EXTRA_LDFLAGS@ JUNIT = @JUNIT@ LASSO_APP_DEFINES = @LASSO_APP_DEFINES@ LASSO_CFLAGS = @LASSO_CFLAGS@ LASSO_CORE_CFLAGS = @LASSO_CORE_CFLAGS@ LASSO_CORE_LIBS = @LASSO_CORE_LIBS@ LASSO_DEFINES = @LASSO_DEFINES@ LASSO_DOCDIR = @LASSO_DOCDIR@ LASSO_LIBS = @LASSO_LIBS@ LASSO_PUB_CFLAGS = @LASSO_PUB_CFLAGS@ LASSO_STATIC_BINARIES = @LASSO_STATIC_BINARIES@ LASSO_VERSION_INFO = @LASSO_VERSION_INFO@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PERLINSTALLSITEARCH = @PERLINSTALLSITEARCH@ PERLMAN3DIR = @PERLMAN3DIR@ PERL_CFLAGS = @PERL_CFLAGS@ PERL_VERSION = @PERL_VERSION@ PHP5 = @PHP5@ PHP5_CONFIG = @PHP5_CONFIG@ PHP5_CONFIG_DIR = @PHP5_CONFIG_DIR@ PHP5_EXTENSION_DIR = @PHP5_EXTENSION_DIR@ PHP5_INCLUDES = @PHP5_INCLUDES@ PHP5_INCLUDE_DIR = @PHP5_INCLUDE_DIR@ PHP5_LDFLAGS = @PHP5_LDFLAGS@ PHP5_LIBS = @PHP5_LIBS@ PHP5_PREFIX = @PHP5_PREFIX@ PHP5_UNPREFIXED_EXTENSION_DIR = @PHP5_UNPREFIXED_EXTENSION_DIR@ PHP5_VERSION = @PHP5_VERSION@ PHP7 = @PHP7@ PHP7_CONFIG = @PHP7_CONFIG@ PHP7_CONFIG_DIR = @PHP7_CONFIG_DIR@ PHP7_EXTENSION_DIR = @PHP7_EXTENSION_DIR@ PHP7_INCLUDES = @PHP7_INCLUDES@ PHP7_INCLUDE_DIR = @PHP7_INCLUDE_DIR@ PHP7_LDFLAGS = @PHP7_LDFLAGS@ PHP7_LIBS = @PHP7_LIBS@ PHP7_PREFIX = @PHP7_PREFIX@ PHP7_UNPREFIXED_EXTENSION_DIR = @PHP7_UNPREFIXED_EXTENSION_DIR@ PHP7_VERSION = @PHP7_VERSION@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PYTHON = @PYTHON@ PYTHON_VERSION = @PYTHON_VERSION@ PY_CFLAGS = @PY_CFLAGS@ PY_DYNLOAD = @PY_DYNLOAD@ PY_EXTRA_LIBS = @PY_EXTRA_LIBS@ PY_LIB_A = @PY_LIB_A@ PY_LIB_LOC = @PY_LIB_LOC@ PY_SITE_PACKAGES = @PY_SITE_PACKAGES@ RANLIB = @RANLIB@ RC = @RC@ REST2HTML = @REST2HTML@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_VERSION = @SWIG_VERSION@ TAR = @TAR@ TESTS_JUNIT = @TESTS_JUNIT@ UPCASED_DLL_FILENAME = @UPCASED_DLL_FILENAME@ VERSION = @VERSION@ VERSION_UNDERSCORED = @VERSION_UNDERSCORED@ WINDOWS_VERSION = @WINDOWS_VERSION@ XSLTPROC = @XSLTPROC@ Z_CFLAGS = @Z_CFLAGS@ Z_LIBS = @Z_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ uudecode = @uudecode@ MAINTAINERCLEANFILES = Makefile.in EXTRA_DIST = \ ca1-la ca1-ssl ca2-la \ ca2-ssl ca3-la ca3-ssl \ ca4-la ca4-ssl idp10-512-saml2 \ idp11-multikey-saml2 idp12-dsa-saml2 idp13-artifact-resolution-service-indexed \ idp1-la idp1-ssl idp2-la \ idp2-ssl idp3-la idp3-ssl \ idp4-la idp4-ssl idp5-saml2 \ idp6-saml2 idp7-saml2 idp8-1024-la \ idp9-1024-saml2 lecp1-la lecp1-ssl \ lecp2-la lecp2-ssl lecp3-la \ lecp3-ssl lecp4-la lecp4-ssl \ metadata requests response-1 \ response-2 response-3 response-4 \ sample-identity-dump-1.xml sourceid-2.0beta sp10-512-saml2 \ sp11-multikey-saml2 sp1-la sp1-ssl \ sp2-la sp2-ssl sp3-la \ sp3-ssl sp4-la sp4-ssl \ sp5-saml2 sp6-saml2 sp7-saml2 \ sp8-1024-la sp9-1024-saml2 user1-la \ user2-la user3-la user4-la \ rootCA.crt rootCA.key rootCA.srl all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/data/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign tests/data/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lasso-2.8.2/tests/data/PaxHeaders/idp4-ssl0000644000000000000000000000013213766621500015365 xustar0030 mtime=1608196928.942896777 30 atime=1678814326.421984131 30 ctime=1678814321.365955337 lasso-2.8.2/tests/data/idp4-ssl/0000755000175000017500000000000013766621500020712 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tests/data/idp4-ssl/PaxHeaders/all.p120000644000000000000000000000013213766621500016536 xustar0030 mtime=1608196928.942896777 30 atime=1678098071.425500311 30 ctime=1678814321.361955313 lasso-2.8.2/tests/data/idp4-ssl/all.p120000644000175000017500000001045613766621500022014 0ustar00bdauvergnebdauvergne000000000000000‚*0‚ð *†H†÷  ‚á‚Ý0‚Ù0‚ ÷ *†H†÷  ‚ è0‚ ä0‚ Ý *†H†÷ 0 *†H†÷  0刷ãh€€‚ °²²ÏÍ>(ývÍô=>¼ëàĆö±põf «1!ü #¡o¼ÿk>~*íÐTžÝRQóL´›Ñc?÷m’§Â´ È´2’-ñWH<òx«ù‹Õf¦ntþˆÜô_ææ¾÷¢¿:oV’¥´éº=®‘®àË‹O6á“L©Ó×u²–N!m÷¦3ãE5_SÁcð?à€3'ø†¶-Øê1Æn’˜»¸f>m¥+^¿4P s¹…ýúy/ 5‡¾FWWu¡¯û¡éƒÊ>óSúŸlŸ7ʳûµÞ’ž;;ÓoUš÷--h«»ìßT@‡#}4cªµîƒÊ鵨ÌÿúïMíÛq`^ê×ðmOúKæã6ª|B¢n=˜p+Yò@ 8¯AWèæKqb" 3£]rKù:¥Ë™¯ª$ú XêêS½Œ‹}òhÌ•ÔJ¨Ã Å‹ ÙpX·”Š îëWw±ýk…W´×ìþ;ƒìŦ×l—;Té¹ÅvñyÜ¢¯ÏEòˆ™â•þY´É Oè>zû'<«ø„ôc7Ô#ç°¥÷›ÿ]¥k䤸ߡ^ˆLœ4ÀŸlþ¥‡6L¿[®µ1A'ˆ¤ˆÊü±6ì™8™êùØþ©ŽÓ©í%_žþ¢bì7•AÂ,/¸tý?'øP„óÕùÖg«LJ+­óéZ) /¬´¸ ë“?]èЖ]¨xê`A÷bu¥ôÉkO0>ÇÚ¹Z‚„Epĵ«XÔ¨‹B¬O¥(c5ûÁ$Ñw¯¶†é ›Æ…'˯Ò“0·¥ãe© —A#zHVÖjK^Ïâ] ãÓmÞü@—Cìkÿß+ú“ ú-üpÖßh‰y¦PÝ ‰³)ã[ЛCHo]¦7_Åӧᆸ)¾ÝêàQ%Bö°Âá÷wY]‰ŽÜŠåÝÐïÞ6,k´2vîlÀ—S*¡|*BÜó,,fuðîž#,Œc9;å±ÏáMÍ TÛo…ÕF¹ê–¨i îzìHø³—³ð¶ ¨§pÞú`ßµ™ a£L%øCt%ÇzÆ[BPÕ>¦UÓaCH¦•¡.©Ç†7¿}:ÅS`”;PoZàQB–˜SéÚÒ±æ÷+’"ϾmR“Ñ\û5(|G4ˆ5?Ë»Ÿ*ócòL°Ô]Ø%V4`Ä/¨÷!ʑ̸¯Tjw=èöµø[Xòq_œLÛ+ \Š÷Hp@F@DZZˆæ&eµ«wÔ—ÏŠ{ÿ„j(vpHˆ—Õ½_d+`3MCsyO&z¬×äè ‚î-Ëæ®ÿc¼C½dÏV† `äÊ/I󹚩 P}ß°m¾v_ 6« Úv^Ðî-Ú5ÁÍÅ"ÍÌ›– 6#§ -I68RÊ~¦OÂÚß%×-›¸Ê–ÑŸ…ÛNW °FÀ‚•E7—äï$e’¼›2Èg°ç EŠòn{x¡p“|i4F¨ãXð³ò¨¬XJ;SAèÂo6·ÝÄO QØùùK$·ØòÞêÃBÒн•X,É„s1¶XAcO:¢Aè&RÓ`5ß©¸J´¸AZ1‘€SVZlp}H,×%!XPI¡,\÷ÏS_Ú}°fল®­ã3%§rµŒ<¿q‚ԣτQ \‰’Õ‰OJ‹iHÉüÈ>ê?üÜCO0Ãù[êOš„3¶goUÞ¹Ê …G¼80>ê60IaCøôl j†ó8Þvp¬×äž+X^Ô&4xÛ Û'_J¾¢¸cœò*Hà°5b_þ[d4•œLà6ÓÞì¹ wayàHž[~;‰G¤‹'ÇÑR „lî‹ö·•~˜XnG3-¿“@ ’CæŒÂ÷ g¸Œ»&óx¸®~¡ÀJ”’Ï Ú6zú$[ž°Þ$©eZttË…(&EýØØ ^§“]Z«Ð[Ðú—âÐ1 ëèŠÖÙ¡b)Ë;±XžK:m ´Odâð_¤¹ª]¥*Ž65—ûHU镉ٔ <.ÄÀÓó9<‚£¯Lç{"€Šlêp l™l;7®÷)M¹8Ñ‘b™Õ 6_áíçÕ¬Wæ!t„lÏa!rïëÉoL8ûc+LƒõF‡‚'ÔæLþJÎ¥¦Ùê‰=SJ•Á›Ç Ñð)£MÒaÅ17QàX_ÊÒ|'ø’\þàž¦–ã¤\ZwH¯$ý"´ ¬Jˆ‘Žìó3 2ºb¬ò|;g´¡-–æUð%î[ÁÞfDIéT…¸ hä4šUÍ“TŽ T>ØeÀ{“üu) § Ž7™șñÄ›–±nÚétµÛ"g uGæ¬Zy,¶Š"Õ놫yØß‘¡¡¹í;=Âkcœ¤ø¤PC¶žg˜Rì¹ AâXhÍÂÇÚê+ÆúPJFáó»!¯ÊeMcõ*…ú3ˆ®ª+ýº:ZÉûŽÁNË“T#`ys¢C'7¹ÂØ‹ ¤ÿÇ´*pÍÉØö7 "7Û6 Óã2DôÃ)?ϨÛõµäJÚTƒãÊžŒØmÓ⌡3Fó-×rSÃ#·Êv©8Ìt5^_Âay©_,ì¥)cϘwF0cܘÕE5"þð Ñ‹TªË† ˜Í¿ÿ‘Ó_¢Øÿ,=ÆA«Àe#!ÕÅuˆ™rEÃ&p½†_R¾ïÇ`k…¥­Q÷p\ñøíÛê÷]Û™ K†|ä2" ðJΓxíì0 ù‹wp²¡H‚%溶¨’?$´+VrÉ‚ôbó´Xs]*k>ÃXÔJ†» ›ñG޳ñ\X½y'Z¢ÿÂ;þÔ bG¦P^¢‚ë™e¶gHŒ+0‚Ú *†H†÷  ‚Ë‚Ç0‚Ã0‚¿ *†H†÷   ‚î0‚ê0 *†H†÷  0I¬€ Ú¯œ‚Ȩ'.ãPEÖúîˆv´¬ßNv9è’÷ëY¿Féu€žF â®'ノî &Ú€qº8¡Ô˜Õ‚: ëó m„’ЈyÅî]`ªáÿöRdíÅñR…ã:=ƒ~ÚMpew¨ò Òÿ§n¸O ÊxØ€7› <žŒiRq»žÉ›,_ÆtÉÍ8xëq×™”úƒó•žuø.$Ž4·½œh¹õÀÀGÊ3îæÌÿÒAIÞÈÓZ¶]ZáO ïî 5¯G}œµy×sÇ!F eo­‘Óh´Öügª¯ÙšalCöç_Äå¿íŸâŒ]¬†.{+­†égn™îå&Ï/b˜ëåÌhÛ-|Ætû17ᘹ`¤Î qb{s˜›£»ôB´"ËÐ]/é„L7øSáúê@ ƒ]*²¡¾A™#†Q”Qù¼<ú³á^p‘µj8HÌáX¶.Íø»¯M§'˜ëE?…X„c‚¦äÞ¦³1èYÔwõ!‡,й°ßþ*¡ÉP“/o÷&{*mTèXKpALÙØÔbGܱæ8™x·I‰p x„1GNK]s Tûj«z”™ÚΠHÃ5JLºD•g 0ýÓ5' ÷Q³  w¶.`8nyêM‡è+öæ^Ô W‹^¿ùå"‚Uêívêqv'ä Y`÷[†[fßAÈàÍ»Œ Ì=#ddø?sµTš,?jA!B>e'Ä$ûKé =iv\É#ûºÞåc£w ¡RÑ’÷‘îÀÁ¹½·mAà6 ' å{x£IFT½§¼Í¹w©s0àÂzÙ9´Ft'le!XÓBCP/ÛçA\ÆsbÒTn85ÍžáêÞæ²Ì,\"ðWç°}5ðP‘ÌR ýO†+ïÇï²c2S•ÀJüÑ`û%ûÄï¾Òj–~ê…œfoŽUÃh]­tÄ/*ÛôŠj›+k¦Ò `p´Z¸nIÆ{6 ÖñŽË•X”JÃ6^O1ÈHßøN0E ì³Å̺ñw*‡ØùÙ,-øhøÎ™º[q»¼zŽi*û3.!ÿœkÂÔ?ºâ+Çòs‰N²'#çv)¤¸qøtË 6ýÿ<ã¿´É3t륉£T“8^W6ûÅ/lë7ÆdsáãKÞ;Bj­è-f\èëÛÂrI»ÿËÉ´Ò}ì Kh Ú•[VÛnšTE§K; KŸ2‚ì}›5?}µ.‘#k1-½Jõ7=“Fy}…¦ýð]©äB±–Ê•)Q ›Ïxúù¹jó»m"ÅàcJSÚµè‹Á¸d¬äQw¨5¾£~Dtè‡o\ÌZN‘(uÞë+Î+V ‹ÈsÌÐÌP‡+Ì3Æ]zÌ =p°¨ zÝ®ÌBõ^íjߪ–G‹ ¡·oD’Q÷>_‹á!×íòæFAÙì1¦3f×X‘w‚!ª†^5t?ŸžhºhT“ î ‡ÔŒ‹tiòP1{„ságåñˆ§‹¤¡ybí÷!k YAG6µËYɘl…6¤Z•‹Ž_º˜úÄ€éÉ&z€1•(ŽŒ13ÑÊpœShÇ£ D÷ä`1½0# *†H†÷  1!*•=·‚­-´úÝt56³Õ¦Gß0• *†H†÷  1‡„Entrouvert SSL Liberty Alliance IDP #4 web server test certificate010!0 +€‚ý‹>s批ÿnK$ï–À ë'–¹(Þ™Älasso-2.8.2/tests/data/idp4-ssl/PaxHeaders/jks.keystore0000644000000000000000000000013213766621500020020 xustar0030 mtime=1608196928.942896777 30 atime=1678098071.425500311 30 ctime=1678814321.365955337 lasso-2.8.2/tests/data/idp4-ssl/jks.keystore0000644000175000017500000001134713766621500023276 0ustar00bdauvergnebdauvergne00000000000000þíþírootþWÀFfX.5090‚Œ0‚t 0  *†H†÷ 0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #410U Entrouvert0 040813103649Z 290404103649Z0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #410U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚Ò<Õ»†xF ‡ÿ”ï |ï‰þPo_Ó~ç>®¼mÌ{ÅÛ_@TÒzñÆ[4¨<`øûsÃ~j!‰äËó/¡šulI²xÒ6âec R¼ÚXʬøJ“Þo‰+½dÂê ÿkÒפ̓ò¢åxªV …=ùàm±¹‹©é^Y—¹È4ãß=ùÚÁ"2z<ÛôyÒßÛóDÞãÎéÆ^"/U O•É|éE(cð⊚rŸÄ‘œØ‘Aº` Âêú0Fæ`¾²q/ò¿@”¡d© Iª„Hû>;ŒB]Íп8U²Ÿ¨å, élB\²ÿI/î¬6ÇG }GNN5£‚I0‚E0U“Ô<-ÔÂUçåÜ*£z:ºï:…0U#0€“Ô<-ÔÂUçåÜ*£z:ºï:…0Uÿ0ÿ0 U0*U%#0!+ +‚7  `†H†øB0 `†H†øB0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0V `†H†øB IGEntr'ouvert Liberty Alliance test web server Certification Authority #40  *†H†÷ ‚Êêù‚ނלë~xӚĔ´<Êê "1Ñ… ë×ýé†ñ{Â8ãÕW°¡“e›ðÆ™]Ææ„î7#„ÂJ¹qÞiŠ­ä„4ë—ãþâþ,››sr)I¾zeÏ* ôÜc#öê2Bþå>‹Ú“ó²ý.¥óؽ–—"ûl@`£Ñè N‚ŒÂÙ¸¹V9–€±›šC‹Ç QŠDÀƒL ¤'Íí¨È^ëµ,ì2Êœ!øïòåI–Á\Bã@#Æmòo0uîy¢å7z  7˜ö•¸¢‘µì¨ –Æ~þ߉QòßnÀÕ’cÓtÒ~†p©ûæJ†ë&ðžÉŽtomcatþWÂ#X0‚þ0 +*‚êZ–Tv3XŽPl:Èî+Ô÷q¬xØ|žWk "f½9ûñ’G~k/vY¯ õüOÇÅÙ £â…®äßS^¦?Z +›P~òþP½Z÷£Eâäsž$ó?“TÕ`|U5EU ²´ƒ«ÙïÛ‚?C[ÁvCÑòm„³L•DÌc<"— SÄŠò’¡p pG—‘àÚfz5c\ÞfWг+b$Olênè@Ä|{ë.ãæÂŠ:x’†éaªß6b .Ä"õÌúgD5L;‚šÜ? 8Œû3ÔçoVÓ™¿½$}…Ö:ƒ®& µ`k¿¨"pt~§ +îjw$X{¿w˜”t¨¥+é!By}×¼]N˜ÜëﺂÅÙ…}· !®ñùcÛ›¬UmâÄ.¥ƒD•ô©´y ´gÒì=2Œ2a€¥#‹M[ù½fÊÆŽ«@ŒÉ §ß ŸùH†®,ﮤ¤ù(Ë’À:Žð“¥îÉÒzƒÁÚ&âd¸8út6L“Üpî«¥áð{”üRÍlrL¥±<tŽ)ÝcÉK¢= [«'dü ­••'}žµ(즲O;5 «+wÛ.…ÕĶ{Е¦¹úªºXšjW—ÂÐAÇtÙtz‹”þ±‘aßþ……ûâØb ·«Œ¯´v€† í›*(µÒÖˉ@±ÌÁH;ä’[E‘> oð—(#'’³ÐOŸm…XöΫÆÇ@Ÿ6Ô©~TŒ ª®Rˆ¿®7€hvP›v ”Šª=u8„Œè-Ûœà~º OÈR=–÷Rÿ’@¾f•tuìs¾ž/–â5·Ó #ûȉÜ} °O¤E§P^¡§%Üa,˜9-Øo¼žF‰"¨óé —|îOG U¾J×!ñ³ª† VJä†_0Œ ‚"ý,¯ªÍ+c§ÕT5¾'SÆ9 ÉßxR‚áûïi¯»¸Û‘’"ûr²„<Î-1<ñ¿¯$AQ¥ºrBú”Q¶±ø!ذصå D#xš—Nx‚>3Caî~7#í¥’£óF%TôIßF,¨ Ù^Jïm§ËúXIÞÔ3N ñŽÎQ Í`?ËrÔW5À 3¿.üÑ£mÈ+ß l¬6Æk[bІô‹Ky?ÇÃ9Pv$àeDN¹óTZ›-f8Ïp¯ädÏh.j—JH] TŠnÖ×&&p;ãñ ‘Σ‚ )L|8+Íd|UÆÒÀ!Ê©Žëă7eí' £À»"8jaöÇû¶]>€ ¬`®w<þŠÚˆEoêY¾y‰aþéñÉå™5 â xüïDôÐ㲉ŽT‡ß¾÷òaúâæ¥ò¬ÛUnïÇN­QsX.509V0‚R0‚: 0  *†H†÷ 0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #410U Entrouvert0 040813104427Z 240814104427Z011 0 Uidp410U  Entrouvert1 0 UFR0‚"0  *†H†÷ ‚0‚ ‚»-b,¬oªÚúÚz.½EI·e9»,Ÿ‘Û`tžÄ¸¼ÐËyÔ_† £\­B™Q­-&“¬w6))š?ÙÞ,3Ne!Ž”3g2R3È"]ò#2Æ£Ô¯V(ŒùÍaâØP$HÇF—½Ö¥Äô˜ð¯Frs·’…ÿša¯Q\î æ4º.påü7“¾j7Ÿñ JÔÅZn{ ¼6|B¯IÊÕÒ±ÕÊß{®Ãb (Ý–AÆ Û¡Üä¿0S±µ^Vñºý/õt@=•w€OH«Ë±G½—Ë53ªÏ[cá“ñLwžÝëjî¾6? ²z ¿Ì¨¯£‚A0‚=0U¦É´Õ[µlŸÃ”ûTÑ)ÊÿÄþ0U#0€“Ô<-ÔÂUçåÜ*£z:ºï:…0 Uÿ00 U 0*U%#0!+ +‚7  `†H†øB0 `†H†øBÀ0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0Q `†H†øB DBEntrouvert SSL Liberty Alliance IDP #4 web server test certificate0  *†H†÷ ‚ˆß|ü½Å#’Mà¶ŠÛªÛá>óo£ZTÊÿ¤ PHuŸaq*qÓSÔ<:×'ñL«E¸û4/ƒOírï¬ÄØ,ÌÎsÛùMòê)¬‚4O³_|®¼mÌ{ÅÛ_@TÒzñÆ[4¨<`øûsÃ~j!‰äËó/¡šulI²xÒ6âec R¼ÚXʬøJ“Þo‰+½dÂê ÿkÒפ̓ò¢åxªV …=ùàm±¹‹©é^Y—¹È4ãß=ùÚÁ"2z<ÛôyÒßÛóDÞãÎéÆ^"/U O•É|éE(cð⊚rŸÄ‘œØ‘Aº` Âêú0Fæ`¾²q/ò¿@”¡d© Iª„Hû>;ŒB]Íп8U²Ÿ¨å, élB\²ÿI/î¬6ÇG }GNN5£‚I0‚E0U“Ô<-ÔÂUçåÜ*£z:ºï:…0U#0€“Ô<-ÔÂUçåÜ*£z:ºï:…0Uÿ0ÿ0 U0*U%#0!+ +‚7  `†H†øB0 `†H†øB0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0V `†H†øB IGEntr'ouvert Liberty Alliance test web server Certification Authority #40  *†H†÷ ‚Êêù‚ނלë~xӚĔ´<Êê "1Ñ… ë×ýé†ñ{Â8ãÕW°¡“e›ðÆ™]Ææ„î7#„ÂJ¹qÞiŠ­ä„4ë—ãþâþ,››sr)I¾zeÏ* ôÜc#öê2Bþå>‹Ú“ó²ý.¥óؽ–—"ûl@`£Ñè N‚ŒÂÙ¸¹V9–€±›šC‹Ç QŠDÀƒL ¤'Íí¨È^ëµ,ì2Êœ!øïòåI–Á\Bã@#Æmòo0uîy¢å7z  7˜ö•¸¢‘µì¨ –Æ~þ߉QòßnÀÕ’cÓtÒ~†p©ûæJ†ë&ðžÉŽ õ>õ9²xÚ,®2÷4kv{lasso-2.8.2/tests/data/idp4-ssl/PaxHeaders/certificate.pem0000644000000000000000000000013213766621500020427 xustar0030 mtime=1608196928.942896777 30 atime=1678098071.425500311 30 ctime=1678814321.361955313 lasso-2.8.2/tests/data/idp4-ssl/certificate.pem0000644000175000017500000000302613766621500023700 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN CERTIFICATE----- MIIEUjCCAzqgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjE/ MD0GA1UEAww2RW50cm91dmVydCBMaWJlcnR5IEFsbGlhbmNlIHdlYiBzZXJ2ZXIg dGVzdCBSb290IENBICM0MRMwEQYDVQQKDApFbnRyb3V2ZXJ0MB4XDTA0MDgxMzEw NDQyN1oXDTI0MDgxNDEwNDQyN1owMTENMAsGA1UEAxMEaWRwNDETMBEGA1UEChMK RW50cm91dmVydDELMAkGA1UEBhMCRlIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw ggEKAoIBAQC7LWIPLKxvqgWP2vraei69HkVJt2UUObsPLJ+R22AfdB2exLi80Mt5 1F+GDwmjDg8UXK1CHplRrS0mk6x3NikpmhmdP9neLDNOZSGOlDMIZzJSM8giXfIj Msaj1K+QViiM+c1h4thQJEjHRpd/vRIA1qXE9Jjwr39GcnO3koX/mmGvDlFc7gzm NLobLnDl/DeTnb5qN5/xCkrUFMVabnsJvBM2fEKvScrV0rEP1crfFHuuw2IJKN0W lkHGBQzbodwe5L8wU7G1Xlbxuv0v9XRAPZV3AYBPSKvLsUe9l8s1M42qzx4cW2Ph k/EFAkx3nt3rau6+Nhk/DLJ6oL/MqA6vAgMBAAGjggFBMIIBPTAdBgNVHQ4EFgQU psm01Vu1bJ/DlJ37VNEpyp3/xP4wHwYDVR0jBBgwFoAUk9Q8LdTCVeflHtwqo3o6 uu86hR4wDAYDVR0TAQH/BAIwADALBgNVHQ8EBAMCBaAwKgYDVR0lBCMwIQYIKwYB BQUHAwEGCisGAQQBgjcKAwMGCWCGSAGG+EIEATARBglghkgBhvhCAQEEBAMCBsAw JgYDVR0RBB8wHYYbaHR0cDovL2xhc3NvLmVudHJvdXZlcnQub3JnMCYGA1UdEgQf MB2GG2h0dHA6Ly9sYXNzby5lbnRyb3V2ZXJ0Lm9yZzBRBglghkgBhvhCAQ0ERBZC RW50cm91dmVydCBTU0wgTGliZXJ0eSBBbGxpYW5jZSBJRFAgIzQgd2ViIHNlcnZl ciB0ZXN0IGNlcnRpZmljYXRlMA0GCSqGSIb3DQEBBQUAA4IBAQCI33z8vcUjGZJN 4LaK26rb4T4G82+jGFpUyv+kDVBIf3WfYZ0ecSpxG9NT1Dw6kNcn8UyrRbj7NC+B g0/tcu+sxNgszM5z2/lN8uoprII0TxWzGF98GjxLxyjxw61ECoRNUZUt/4p2iXSJ DMq3mUp61RdU2kTw5M5+Be4TipXRZFD3FCALBe18U3RA4VMjsyuLXkGRw7Sv7imt rRIGKY7i1gsWDQTu25TiMK+m9NLYjpqMwnHIlMtmYMK3iOfiAFhUB2jNcp9Vnbz0 9wgoTm/T+gaRNHNcHX54v0kDEN8s6tY4VuWoNhE7N74K3sJit/WJIoha6hTPX+PF JHjNcisk -----END CERTIFICATE----- lasso-2.8.2/tests/data/idp4-ssl/PaxHeaders/private-key-raw.pem0000644000000000000000000000013213766621500021174 xustar0030 mtime=1608196928.942896777 30 atime=1678098071.425500311 30 ctime=1678814321.365955337 lasso-2.8.2/tests/data/idp4-ssl/private-key-raw.pem0000644000175000017500000000331613766621500024447 0ustar00bdauvergnebdauvergne000000000000000: idp-jks.keystore 1: tomcat 2: changeit -----BEGIN PRIVATE KEY----- MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC7LWIPLKxvqgWP2vraei69HkVJ t2UUObsPLJ+R22AfdB2exLi80Mt51F+GDwmjDg8UXK1CHplRrS0mk6x3NikpmhmdP9neLDNOZSGO lDMIZzJSM8giXfIjMsaj1K+QViiM+c1h4thQJEjHRpd/vRIA1qXE9Jjwr39GcnO3koX/mmGvDlFc 7gzmNLobLnDl/DeTnb5qN5/xCkrUFMVabnsJvBM2fEKvScrV0rEP1crfFHuuw2IJKN0WlkHGBQzb odwe5L8wU7G1Xlbxuv0v9XRAPZV3AYBPSKvLsUe9l8s1M42qzx4cW2Phk/EFAkx3nt3rau6+Nhk/ DLJ6oL/MqA6vAgMBAAECggEBAJqAS4DbDzrczNqBlq7gS9QvOGIwz25yeMV9v/lVa3KLFigHmbXB YzOc6XxuzTWaVTgph5ocR9HzcGF3Y9TDEBcW7C2wltWdBnyfXaOjELzO8eqIc5pqkYQcVXrGBGTP uYkkaTNzW7pLOQfEbSkzl7i5dPuuKtABDL3Jm1rbx1/DUpLeSG9gf9IY8Yw3QocN5QVo9o77Pe7+ vu5M1R2amFfIMBvohT1iCX/ApswrhMokjpWZlwBAgYs5jo5L9XFf32jCU6RFGUxkQBPdXEmhhPpr Gp45dUavZvuUBmA3deVw68DeoVnFXtxshCK3kQfd4qA/yZRUiSDg0b2xeRw6kwECgYEA+TUTcTG3 o5cxNU5YABcjIIh+aJR0N/gycO3i3o7SIb5Nk8muGQLVeoCL0mWtI9wa5E1avmRVvygThGhdelmS QzUVB2Dabg2nUTujhO7lA9W3/2FdgFtqhxdMJ7O8C9rlYmxlreQ4n+UOOR1sivgdg8Ygvq0Ig4DM I+Aj/Jcg65cCgYEAwEd495OVl3vfYmZtH7kKGP8XyFuMEkmSzo47Rjm0eXaWg8wXrcW1oA4N+aKT fCD9kCOpFzeuO++YC7IuVM+lXMDDsi0YNM64jak7W+cfXKxR2Pl0W2sZqw0CAIUi5Itp4DMUs0PX FUxZpfaY6xHLzukVSmWv+2fjL28WDskouKkCgYA4zmN3KwkcTkuWRhyDMML+GH8QIb74PyhoW6Ga b93weSu/43o/E0lMWl8E/85e3T54CjYELmTpZR5F0XB1glN35HK9stM3wP8B4mFc3QPxQtdlbHFe 3/fBgYsHhc34udYOAH2RDPPnZtQ+KrniV7qKnjA6psDJESP3jZFGc8C6UwKBgGsTYjn85gFF6lBR 2dMgqI7i/8uDr60/a5G7gybIW8iIUalzrnwG7e4D5aRu9NLbTFlIgpF7YHvgITviLgrs15mff1tp 4WEG/Z9l7rhvLPfevnWl9TYznkezJrpDafr76CoCSDTMQqqJqiLSALZnYqgHBOQ5XJcUc1+m7RGu 1A6BAoGBALutqgkJE5Bmsk2oYowEol9nLb1UoJC8djImY1cLxX/am4dYqlwas6rkdvIpoSj4YoRl znhrkF4ZhHS/DSXhwKsyafU6vc3NoTxbRTqjSPVUpVACGwKYtEaq96IeIJQfTv8NLc94gwXSLMzL HnQz1HwuUZ/WicRiQJuTYFpi+p/p -----END PRIVATE KEY----- lasso-2.8.2/tests/data/PaxHeaders/ca4-la0000644000000000000000000000013213766621500014767 xustar0030 mtime=1608196928.938896744 30 atime=1678814326.421984131 30 ctime=1678814321.293954927 lasso-2.8.2/tests/data/ca4-la/0000755000175000017500000000000013766621500020314 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tests/data/ca4-la/PaxHeaders/jks.keystore0000644000000000000000000000013213766621500017422 xustar0030 mtime=1608196928.938896744 30 atime=1678098071.361499808 30 ctime=1678814321.293954927 lasso-2.8.2/tests/data/ca4-la/jks.keystore0000644000175000017500000000235613766621500022700 0ustar00bdauvergnebdauvergne00000000000000þíþíAentr'ouvert liberty alliance test root certification authority #4þWÂc¾X.509t0‚p0‚X 0  *†H†÷ 0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #410U Entrouvert0 040813103642Z 290404103642Z0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #410U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚Ô]Kʲ¨äxT·÷GkÐ{ì ÛJ——ÉäêˆÄrPyD»©kaº _$žyÅ‚žÒñÊ”’7³z¸ŒÍXL™ ØÝ' 0iut´esQ]íÜÀ°o {G"™àÂo¸õ$—5²ZàÛ[tÙ‘TmŸ)d»w<b¼M†å–‹¼ËÌ>úE^º}uã}}ÃÆ˜Jmd3A;m°ð¹”w¸XœV bM,>ø†[Œà$àµÍ{ä ºžjbêÚñ&(“ Z±ày£‚C0‚?0US‚…4K8Á%\чثõ>è0U#0€S‚…4K8Á%\чثõ>è0Uÿ0ÿ0 U0*U%#0!+ +‚7  `†H†øB0 `†H†øB0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0P `†H†øB CAEntr'ouvert Liberty Alliance test Root Certification Authority #40  *†H†÷ ‚:ðåRG96"Fª_k(Õ áŠuE¨°¯¨â¶ÃN ë²RzÌʉ ïv°{‘[òQé—‚ÛH¬¸Æ‹0¥^EŽ5›´ÆžPLCÍ+Ò35n³7Reð~œxH**Ê–À»HÞ«3y¿–:ƒª¹}˜1™„Þx77’MèÛp¾u9 Í‚Œ†DrVµ_9â¨cEиM «iïÔÜÜ–H:£§zåõ ±ÖB¯,G±À>ô—Xë¼âLö¨ƒ8… ²"œHñÙI@øJhè•Ýx7jŠIϼL•,êm]#u;|4]n£±A)”;:.Ûàϧ“—‚ú¬TâyÜ‹ÒÐQj[üzÒ0ŠºWElasso-2.8.2/tests/data/ca4-la/PaxHeaders/certificate.pem0000644000000000000000000000013213766621500020031 xustar0030 mtime=1608196928.938896744 30 atime=1678098071.361499808 30 ctime=1678814321.293954927 lasso-2.8.2/tests/data/ca4-la/certificate.pem0000644000175000017500000000307613766621500023307 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN CERTIFICATE----- MIIEcDCCA1igAwIBAgIBADANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJGUjE0 MDIGA1UEAwwrRW50cm91dmVydCBMaWJlcnR5IEFsbGlhbmNlIHRlc3QgUm9vdCBD QSAjNDETMBEGA1UECgwKRW50cm91dmVydDAeFw0wNDA4MTMxMDM2NDJaFw0yOTA0 MDQxMDM2NDJaMFgxCzAJBgNVBAYTAkZSMTQwMgYDVQQDDCtFbnRyb3V2ZXJ0IExp YmVydHkgQWxsaWFuY2UgdGVzdCBSb290IENBICM0MRMwEQYDVQQKDApFbnRyb3V2 ZXJ0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1F1LyhwSsqjkeFS3 90dr0HvsHAsP20qXl8nk6ojEclB5RAa7qWthuglfJACeeQfFgp7S8cqUf5I3nbN6 uIzNF1hMmQvY3ScKMBlpdRN0tI0DZXNRFF3t3MCwb6B7RyKZ4B7Cbx+49SSXNbJa 4NtbdNmRBlRtnykZZLsbdzwbYrxNhuUeG5YQF4uPvMvMPvpFXrp9deN9fcPGmEpt ZDNBO22w8Ll/lHe4WBmcFVY8c2NnCCHaphHdbCML9tB0HoVTvGCEL2XRxG5DEgH0 i0A5b/x8s7LNFFJ6iO0+IGJNLD74hluM4CTgtc175Aq6nmpiGera8SaNKAiTDxYK WrHgeQIDAQABo4IBQzCCAT8wHQYDVR0OBBYEFFOChTRLADjBJRWdXNGH2Kt/9T7o MB8GA1UdIwQYMBaAFFOChTRLADjBJRWdXNGH2Kt/9T7oMA8GA1UdEwEB/wQFMAMB Af8wCwYDVR0PBAQDAgEGMCoGA1UdJQQjMCEGCCsGAQUFBwMBBgorBgEEAYI3CgMD BglghkgBhvhCBAEwEQYJYIZIAYb4QgEBBAQDAgEGMCYGA1UdEQQfMB2GG2h0dHA6 Ly9sYXNzby5lbnRyb3V2ZXJ0Lm9yZzAmBgNVHRIEHzAdhhtodHRwOi8vbGFzc28u ZW50cm91dmVydC5vcmcwUAYJYIZIAYb4QgENBEMWQUVudHInb3V2ZXJ0IExpYmVy dHkgQWxsaWFuY2UgdGVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICM0 MA0GCSqGSIb3DQEBBQUAA4IBAQA68OVSRzkFNiIXRqpfawAFKNUN4Yp1Raiwr6gB 4rbDTgrrslJ6zMqJDRvvdrB7kVsc8hxR6ZeC2xlIrAe4xoswpV5FjjWbtMaeUEwC Q80rEdIzNW6zN1IeZfB+nHhIKiqdypbAu0jeqzN5v5aBOoOquX2YMZmE3ng3N5JN 6NtwGr51OSDNgowChkRyVrVfOeIPqGNFBdC4TQmrae/U3NyWSDoUo6d65fUgsQXW Qq8sR7HAPhf0l1jrvOKdTPaogziFDbIinEjx2UkXQPhKaAHold14N2qKAEnPvEyV LOptXSN1O518NF1uo7FBKZQEOxw6Ltvgz6eTl4KPFvqsHVTi -----END CERTIFICATE----- lasso-2.8.2/tests/data/PaxHeaders/sp4-la0000644000000000000000000000013213766621500015026 xustar0030 mtime=1608196928.958896909 30 atime=1678814326.421984131 30 ctime=1678814321.497956088 lasso-2.8.2/tests/data/sp4-la/0000755000175000017500000000000013766621500020353 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tests/data/sp4-la/PaxHeaders/metadata.xml0000644000000000000000000000013213766621500017405 xustar0030 mtime=1608196928.958896909 30 atime=1678098071.549501283 30 ctime=1678814321.493956065 lasso-2.8.2/tests/data/sp4-la/metadata.xml0000644000175000017500000000154213766621500022657 0ustar00bdauvergnebdauvergne00000000000000 https://sp4:2012/assertionConsumer https://sp4:2012/singleLogout http://projectliberty.org/profiles/slo-idp-soap https://sp4:2012/registerNameIdentifier http://projectliberty.org/profiles/rni-sp-soap https://sp4:2012/soapEndpoint true lasso-2.8.2/tests/data/sp4-la/PaxHeaders/public-key.pem0000644000000000000000000000013213766621500017652 xustar0030 mtime=1608196928.958896909 30 atime=1678098071.549501283 30 ctime=1678814321.497956088 lasso-2.8.2/tests/data/sp4-la/public-key.pem0000644000175000017500000000070313766621500023122 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwS69OEoUypRdi7pbzOr9 +CNq/re+NzcDLMmw7ef60wDVCnv2FiFlsQhyAoFGEdk547cjlTMyH6Vx5iSnlKBV Aip8ta39Ba34U/owdu7RyhBTYIEP2vrJ6Pbqotx5RDSwVKJqKa8PzyvgQVVQWYI6 1xYuXjJUdPhRNsAqD2I0N9wCGwjgkEn15JJA9iD+0qwj/lHkmuHdImsiIluRygIN UzaZYKEE9nkAcO/OJyu62geCkEXgTX3frlq1NJIkLujvVLZ9xWL+7L02DDvklDax J7YcSCbgEH5ob7IWi4tXffZ4ttbVlZOPPPPndmhflyXRqPhhEJ04nP6a7NPIDSta kQIDAQAB -----END PUBLIC KEY----- lasso-2.8.2/tests/data/sp4-la/PaxHeaders/jks.keystore0000644000000000000000000000013213766621500017461 xustar0030 mtime=1608196928.958896909 30 atime=1678098071.549501283 30 ctime=1678814321.493956065 lasso-2.8.2/tests/data/sp4-la/jks.keystore0000644000175000017500000001130013766621500022724 0ustar00bdauvergnebdauvergne00000000000000þíþílassoþWÁå0‚ü0 +*‚èoRHfy xÙ‘±mœ%Æ‹ŽA©Ly¼¥$»®‡hÃ[*Km¶šÑŽ7#úÉÚgÿolÒñp—SØÊ?+ÄïÝ'ˆ®xÛq`Ž…|ÞCnÛ¬®Ë;íçz“¥¸¯X;Áá0q‡°¬šAv¿º"ö¾“˜=x„Ú3—$Á’¾e:ØõE¥þnd|"öÃÙÏVŽàðDL8™ó7ÉbÞÌŽØ€©m þÅ?|,Ùù£º"Ž{ÿ5¤G$àÌü±Å›®ÚûÈÛÓ·d„A$µ`&úÍÅc€XoðVpæŒJƒ|Ì8‰’ž»Í~>-­gɉ¥®­>wd¶°›Ó‘Â#?++%¦ °>’ÑIxx4|¦læÄÑÀï,eÕŽf¿ÎDማf¬A} S^6M×ïãÛϣ鵤Hñì˜Ò¡ÔÜ VV™3(“{æ­8žèñíM¦cy c¶q#¨RuÊ%¯7Ý6`‚̱1žüµçÚ÷¨òÞøÚ ¹ÇÓ["ýâšó|$†i­[á6(ÆÐ$D‰FæË¦IRxâÌ[ _ðô'ò4àŽP3/7•¡›ä¼5såZ áoÌ ê³Úb¦ØÌã¤Pæ<º¨7´>#x )ý&±ú\ˆùø×&Nîúpl¯Ž±øçŸ@e Ý›óeºiò­-£ý°¥åºqÃæ0¢ÁK~/ÄUŸ§6ÍÝò”êB:»±š²œy¨èpsç¦fæzWq©ˆñ cíuRíOšƒ™éѪ˦Eñu{1ˆÊãx-‘F¬‚û[†Œ ­-à=Z6ÉC(˜ Ôâõ©]™?Á³˜vÛ5lB«.ƒW¨&šw[•,Ú­ÐÔ#¤°þÇõT6>—† üb‚ÁÓQ‚>æ&ˆÎ °kJ_¯WBáÀn¥$0a?<™·ÂZŸG–d‡AÃ5Ô“Š(% 4j([“6eŸ–n! wSíñy‡®„ÄePŠBÓB5Ž€­¾DOxiòêù‹â(ív|,ÚtÿÖ5f:––8ÍÓ$ªÌfÁ¦°û¬G_àì=“̲oz á@'Þ¹ŒÏæ™f˜£±èè\ìÓü€'u¼[ ³Œë•ݪj!–íÙ[ˆ4ÔIÊ5i‡Ä¶$ÖëvÓ-׈IiƒeÏÍEºV·ÕV5ßùzîkìøgDÃþaðe¶Ë¹øk's³€!o§GúŒ#~9A›Dу?â£íÞu†&CO°š`‚-[_¥ú&·­{ƒ¨|Ö]¨®'¨RbWzzÃS=1EˆP 9Áûk0êîÿÏ>®yØT– Â?Ð9€þôÈœÔ])¨ CV+ÓžUð“Ý6?nŸY†ê.ƒ µˆÎþ£}K]XðBÿ ¬¦ì;W`p6<º[‚žðëTPW¬`wžŒ3ÏjfÆ|$]d1Éå—ÞŸü a äÒibA‹¢"¥·Úv\mÅ:¸<X.509-0‚)0‚ 0  *†H†÷ 0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #410U Entrouvert0 040813104425Z 240814104425Z001 0 Usp410U  Entrouvert1 0 UFR0‚"0  *†H†÷ ‚0‚ ‚Á.½8JÊ”]‹º[Ìêýø#jþ·¾77,ɰíçúÓÕ {ö!e±rFÙ9ã·#•32¥qæ$§” U*|µ­ý­øSú0vîÑÊS`ÚúÉèöê¢ÜyD4°T¢j)¯Ï+àAUPY‚:×.^2TtøQ6À*b47ÜàIõä’@ö þÒ¬#þQäšáÝ"k""[‘Ê S6™`¡öypïÎ'+ºÚ‚EàM}ß®Zµ4’$.èïT¶}Åbþì½6 ;ä”6±'¶H&à~ho²‹‹W}öx¶ÖÕ•“<óçvh_—%Ѩøa8œþšìÓÈ +Z‘£‚$0‚ 0U&Ðêð?iôAS×AÏx~Z0U#0€S‚…4K8Á%\чثõ>è0 Uÿ00 U€0U%0++0 `†H†øB€0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0A `†H†øB 42Entrouvert Liberty Alliance SP #4 test certificate0  *†H†÷ ‚–†¥¡§Ï! Z™ñÔ¢t·È TëÄ?“%dó ËÅôü¤­´Kt ͆½‹%(½t©›+O ‹yŒ„J3fø9GÒ›&N·è2šÝ‹m­ X½å£s*ôW2Gà!á¼{_?@@¦v\‹ Ú˜vgÔæ"ŽÒ1'Õ‹ˆçõ€¡øÈ)+hãêéb9L›…»u&d!Ò¥‡}.9ÕˆúRKcåÌ‘bËfmù»WÇ>i”¥ŠBÿgW;7-Řî™1½zE?°Þ s$Ñ3–œ@§:DÇÐl#ÖÓ¼p[³[TåPsAs]_H¦ýˆá2dq¾ÚΖ“¶¹ÖMØ¢´càX.509t0‚p0‚X 0  *†H†÷ 0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #410U Entrouvert0 040813103642Z 290404103642Z0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #410U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚Ô]Kʲ¨äxT·÷GkÐ{ì ÛJ——ÉäêˆÄrPyD»©kaº _$žyÅ‚žÒñÊ”’7³z¸ŒÍXL™ ØÝ' 0iut´esQ]íÜÀ°o {G"™àÂo¸õ$—5²ZàÛ[tÙ‘TmŸ)d»w<b¼M†å–‹¼ËÌ>úE^º}uã}}ÃÆ˜Jmd3A;m°ð¹”w¸XœV bM,>ø†[Œà$àµÍ{ä ºžjbêÚñ&(“ Z±ày£‚C0‚?0US‚…4K8Á%\чثõ>è0U#0€S‚…4K8Á%\чثõ>è0Uÿ0ÿ0 U0*U%#0!+ +‚7  `†H†øB0 `†H†øB0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0P `†H†øB CAEntr'ouvert Liberty Alliance test Root Certification Authority #40  *†H†÷ ‚:ðåRG96"Fª_k(Õ áŠuE¨°¯¨â¶ÃN ë²RzÌʉ ïv°{‘[òQé—‚ÛH¬¸Æ‹0¥^EŽ5›´ÆžPLCÍ+Ò35n³7Reð~œxH**Ê–À»HÞ«3y¿–:ƒª¹}˜1™„Þx77’MèÛp¾u9 Í‚Œ†DrVµ_9â¨cEиM «iïÔÜÜ–H:£§zåõ ±ÖB¯,G±À>ô—Xë¼âLö¨ƒ8… ²"œHñÙI@øJhè•Ýx7jŠIϼL•,êm]#u;|4]n£±A)”;:.Ûàϧ“—‚ú¬TâAentr'ouvert liberty alliance test root certification authority #4þWÀûX.509t0‚p0‚X 0  *†H†÷ 0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #410U Entrouvert0 040813103642Z 290404103642Z0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #410U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚Ô]Kʲ¨äxT·÷GkÐ{ì ÛJ——ÉäêˆÄrPyD»©kaº _$žyÅ‚žÒñÊ”’7³z¸ŒÍXL™ ØÝ' 0iut´esQ]íÜÀ°o {G"™àÂo¸õ$—5²ZàÛ[tÙ‘TmŸ)d»w<b¼M†å–‹¼ËÌ>úE^º}uã}}ÃÆ˜Jmd3A;m°ð¹”w¸XœV bM,>ø†[Œà$àµÍ{ä ºžjbêÚñ&(“ Z±ày£‚C0‚?0US‚…4K8Á%\чثõ>è0U#0€S‚…4K8Á%\чثõ>è0Uÿ0ÿ0 U0*U%#0!+ +‚7  `†H†øB0 `†H†øB0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0P `†H†øB CAEntr'ouvert Liberty Alliance test Root Certification Authority #40  *†H†÷ ‚:ðåRG96"Fª_k(Õ áŠuE¨°¯¨â¶ÃN ë²RzÌʉ ïv°{‘[òQé—‚ÛH¬¸Æ‹0¥^EŽ5›´ÆžPLCÍ+Ò35n³7Reð~œxH**Ê–À»HÞ«3y¿–:ƒª¹}˜1™„Þx77’MèÛp¾u9 Í‚Œ†DrVµ_9â¨cEиM «iïÔÜÜ–H:£§zåõ ±ÖB¯,G±À>ô—Xë¼âLö¨ƒ8… ²"œHñÙI@øJhè•Ýx7jŠIϼL•,êm]#u;|4]n£±A)”;:.Ûàϧ“—‚ú¬Tâa´2´N’+2w麱’ƒ7`_Êlasso-2.8.2/tests/data/sp4-la/PaxHeaders/certificate.pem0000644000000000000000000000013213766621500020070 xustar0030 mtime=1608196928.958896909 30 atime=1678098071.549501283 30 ctime=1678814321.493956065 lasso-2.8.2/tests/data/sp4-la/certificate.pem0000644000175000017500000000274113766621500023344 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN CERTIFICATE----- MIIEKTCCAxGgAwIBAgIBAjANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJGUjE0 MDIGA1UEAwwrRW50cm91dmVydCBMaWJlcnR5IEFsbGlhbmNlIHRlc3QgUm9vdCBD QSAjNDETMBEGA1UECgwKRW50cm91dmVydDAeFw0wNDA4MTMxMDQ0MjVaFw0yNDA4 MTQxMDQ0MjVaMDAxDDAKBgNVBAMTA3NwNDETMBEGA1UEChMKRW50cm91dmVydDEL MAkGA1UEBhMCRlIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDBLr04 ShTKlF2LulvM6v34I2r+t743NwMsybDt5/rTANUKe/YWIWWxCHICgUYR2TnjtyOV MzIfpXHmJKeUoFUCKny1rf0FrfhT+jB27tHKEFNggQ/a+sno9uqi3HlENLBUomop rw/PK+BBVVBZgjrXFi5eMlR0+FE2wCoPYjQ33AIbCOCQSfXkkkD2IP7SrCP+UeSa 4d0iayIiW5HKAg1TNplgoQT2eQBw784nK7raB4KQReBNfd+uWrU0kiQu6O9Utn3F Yv7svTYMO+SUNrEnthxIJuAQfmhvshaLi1d99ni21tWVk4888+d2aF+XJdGo+GEQ nTic/prs08gNK1qRAgMBAAGjggEkMIIBIDAdBgNVHQ4EFgQUJtDq8Bo/f2n0QQNT 1w4bQc94flowHwYDVR0jBBgwFoAUU4KFNEsAOMElFZ1c0YfYq3/1PugwDAYDVR0T AQH/BAIwADALBgNVHQ8EBAMCB4AwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUF BwMIMBEGCWCGSAGG+EIBAQQEAwIHgDAmBgNVHREEHzAdhhtodHRwOi8vbGFzc28u ZW50cm91dmVydC5vcmcwJgYDVR0SBB8wHYYbaHR0cDovL2xhc3NvLmVudHJvdXZl cnQub3JnMEEGCWCGSAGG+EIBDQQ0FjJFbnRyb3V2ZXJ0IExpYmVydHkgQWxsaWFu Y2UgU1AgIzQgdGVzdCBjZXJ0aWZpY2F0ZTANBgkqhkiG9w0BAQUFAAOCAQEAloal oafPIQ1amfHUonS3yAlU6xbEP5MlF2TzC8vF9PykrbRLdAzNhr2LJSi9dKmbK08L ixJ5jIRKM2b4OUcQjdKbESZOtxjoMprdi22tDQVYveWjcyr0VzJH4CHhvHtfPwVA QKZ2XIsJ2piPdmfUHuYikI7SMSfVi4jn9YAcofjIKSto4+rpYjlMm4W7dSZkIdKl h30uOdWI+lJLY+XMkR5iywZmnRJt+btXxz5pB5SlikL/Z1c7NxQtxZjuAJkxgb16 kEU/sN4LcyTRM5acQKcUOkTH0Gwj1g/TvHBbs1tU5VBzQXNdX0im/YjhMmRxvtrO lpO2udZN2AKitBdj4A== -----END CERTIFICATE----- lasso-2.8.2/tests/data/sp4-la/PaxHeaders/private-key-raw.pem0000644000000000000000000000013213766621500020635 xustar0030 mtime=1608196928.958896909 30 atime=1678098071.549501283 30 ctime=1678814321.493956065 lasso-2.8.2/tests/data/sp4-la/private-key-raw.pem0000644000175000017500000000331413766621500024106 0ustar00bdauvergnebdauvergne000000000000000: sp-jks.keystore 1: lasso 2: changeit -----BEGIN PRIVATE KEY----- MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDBLr04ShTKlF2LulvM6v34I2r+ t743NwMsybDt5/rTANUKe/YWIWWxCHICgUYR2TnjtyOVMzIfpXHmJKeUoFUCKny1rf0FrfhT+jB2 7tHKEFNggQ/a+sno9uqi3HlENLBUomoprw/PK+BBVVBZgjrXFi5eMlR0+FE2wCoPYjQ33AIbCOCQ SfXkkkD2IP7SrCP+UeSa4d0iayIiW5HKAg1TNplgoQT2eQBw784nK7raB4KQReBNfd+uWrU0kiQu 6O9Utn3FYv7svTYMO+SUNrEnthxIJuAQfmhvshaLi1d99ni21tWVk4888+d2aF+XJdGo+GEQnTic /prs08gNK1qRAgMBAAECggEAXGLr3zWeh9s4eZBgQrnHR5o4myRodaN7gznZwY0FqU9mkyMBZ0gF iAqP657DUdnfE4YMIFhhijznIbc55Zxfyy9igMh6jvLKJe8qqlZAQjBYj3hpisIRObaMM+LYo8PG 6FLcDp9IIj3Le7M/P+9GEILtHeNX/LCctmBkPQMsEeHyom2BJqzd11BjIQ+UaqA9HHVkyahm+4pE M4YRn3nlgGJwH0umPhf3d52Pi217w1OUrfDHZbPRoVl1p6znA2mBCcD5hKEoc8Z2OLWSQ2UeTD0c VSavswTkJ0TC89Jt/EzLSzBNNDJP1o8rCJdw/phFIEDIAvd0m/FXvksS4o3BgQKBgQDq0FpSCayq SThRCBFri/HbDpiw82XU1N7EPjGLSvmcCphN+eNO4IL/Sg20igDmiBcnIryNkX+VdS5XD4WvPV2P Dxv/3NQ5yW20K9JesRZ4YU4H/anCUQcArLKNG5FeninyaEoUTQXYg1imKpAIgzYnYu8018w8iQMy 238oKofmeQKBgQDSnM0kGI8tSTI4lIjGkcDOGd2vnmy4b+iqsCX/VBb9ZPpcDL+X+xYwmEMolfzI +fFWVcF5oE9zwYlcIEpU49FrtozCYB1bfGpdFB32I8F53M7T08zP6OOz6xyYvUhzkTeDBgFftHj3 hb+B/QlqpeMfFl5QNkW1TKsFI/JjGjlu2QKBgBXXa49V9wmf5e0jovst+UE3ClzrRv2VD2ORpWof fzhUg/Y82DfuCkFU0hGJBKxs3Dp3sLI6ZnOwgq72cqjqPFmiPih+kf8ODXZE3TyRnFV2N5vmrHO2 tcAKUFFvzwXOEHjL2pgo0fJhxU0viFZCXjcrrLRtnkHDPNjuMdW6nwmBAoGAGwBDRIdpg7LIn3xb dKmnAEVMqIE1Cwg92fQvSuaq892IQ1jXD1L/a0d6BLAF8nYovJrN7RviU8LSK19waCW06YxDy3+r A9mVgU1c8ftviIIIehvDPDxtRNm1ltddfIN3jHKupmhqwcEB5lZcaLHPxmKFwN7UXQPxQP10y8PG 7TECgYAM3/VQKlSm4yvQHw4gNpcdWyMv7JZYxCBnsZhCq1ffuuNsCz0IV6HotClopmk1y0blIR2L wRhl2EwvAxcVZu1xSmDLUwtAhfHtW38aRifbx/vJEV82PdgA2y1Jg2V531uOJKjcs1geAHLQZBSc W+ICxNxXq7EyKr1wCDNeGZwU5w== -----END PRIVATE KEY----- lasso-2.8.2/tests/data/PaxHeaders/sp6-saml20000644000000000000000000000013214050545511015444 xustar0030 mtime=1621281609.267307905 30 atime=1678814326.421984131 30 ctime=1678814321.509956157 lasso-2.8.2/tests/data/sp6-saml2/0000755000175000017500000000000014050545511020771 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tests/data/sp6-saml2/PaxHeaders/metadata.xml0000644000000000000000000000013214050545511020023 xustar0030 mtime=1621281609.267307905 30 atime=1678098071.561501378 30 ctime=1678814321.505956133 lasso-2.8.2/tests/data/sp6-saml2/metadata.xml0000644000175000017500000001060314050545511023273 0ustar00bdauvergnebdauvergne00000000000000 MIIDnjCCAoagAwIBAgIBATANBgkqhkiG9w0BAQUFADBUMQswCQYDVQQGEwJGUjEPMA0GA1UECBMGRnJhbmNlMQ4wDAYDVQQHEwVQYXJpczETMBEGA1UEChMKRW50cm91dmVydDEPMA0GA1UEAxMGRGFtaWVuMB4XDTA2MTAyNzA5MDc1NFoXDTExMTAyNjA5MDc1NFowVDELMAkGA1UEBhMCRlIxDzANBgNVBAgTBkZyYW5jZTEOMAwGA1UEBxMFUGFyaXMxEzARBgNVBAoTCkVudHJvdXZlcnQxDzANBgNVBAMTBkRhbWllbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM06Hx6VgHYR9wUf/tZVVTRkVWNqh9x+PvHA2qH4OYMuqGs4Af6lU2YsZvnrmRdcFWv0+UkdAgXhReCWAZgtB1pd/W9m6qDRldCCyysow6xPPKRz/pOTwRXm/fM0QGPeXzwzj34BXOIOuFu+n764vKn18d+uuVAEzk1576pxTp4pQPzJfdNLrLeQ8vyCshoFU+MYJtp1UA+h2JoO0Y8oGvywbUxHioHN5PvnzObfAM4XaDQohmfxM9Uc7Wp4xKAc1nUq5hwBrHpjFMRSz6UCfMoJSGIi+3xJMkNCjL0XEw5NKVc5jRKkzSkN5j8KTM/k1jPPsDHPRYzbWWhnNtd6JlkCAwEAAaN7MHkwCQYDVR0TBAIwADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFP2WWMDShux3iF74+SoO1xf6qhqaMB8GA1UdIwQYMBaAFGjl6TRXbQDHzSlZu+e8VeBaZMB5MA0GCSqGSIb3DQEBBQUAA4IBAQAZ/imK7UMognXbs5RfSB8cMW6iNAI+JZqe9XWjvtmLfIIPbHM96o953SiFvrvQBZjGmmPMK3UH29cjzDx1R/RQaYTyMrHyTePLh3BMd5mpJ/9eeJCSxPzE2ECqWRUapkjukecFXqmRItwgTxSIUE9QkpzvuQRb268PwmgroE0mwtiREADnvTFkLkdiEMewfiYxZfJJLPBqwlkw/7f1SyzXoPXnz5QbNwDmrHelga6rKSprYKb3pueqaIe8j/APNC1/bzp8cGOcJ88BD5+Ny6qgPVCrMLE5twQumJ12V3SvjGNtzFBvg2c/9S5OmVqRLlTxKnCrWAXftSm1rNtewTsF MIIDnjCCAoagAwIBAgIBATANBgkqhkiG9w0BAQUFADBUMQswCQYDVQQGEwJGUjEPMA0GA1UECBMGRnJhbmNlMQ4wDAYDVQQHEwVQYXJpczETMBEGA1UEChMKRW50cm91dmVydDEPMA0GA1UEAxMGRGFtaWVuMB4XDTA2MTAyNzA5MDc1NFoXDTExMTAyNjA5MDc1NFowVDELMAkGA1UEBhMCRlIxDzANBgNVBAgTBkZyYW5jZTEOMAwGA1UEBxMFUGFyaXMxEzARBgNVBAoTCkVudHJvdXZlcnQxDzANBgNVBAMTBkRhbWllbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM06Hx6VgHYR9wUf/tZVVTRkVWNqh9x+PvHA2qH4OYMuqGs4Af6lU2YsZvnrmRdcFWv0+UkdAgXhReCWAZgtB1pd/W9m6qDRldCCyysow6xPPKRz/pOTwRXm/fM0QGPeXzwzj34BXOIOuFu+n764vKn18d+uuVAEzk1576pxTp4pQPzJfdNLrLeQ8vyCshoFU+MYJtp1UA+h2JoO0Y8oGvywbUxHioHN5PvnzObfAM4XaDQohmfxM9Uc7Wp4xKAc1nUq5hwBrHpjFMRSz6UCfMoJSGIi+3xJMkNCjL0XEw5NKVc5jRKkzSkN5j8KTM/k1jPPsDHPRYzbWWhnNtd6JlkCAwEAAaN7MHkwCQYDVR0TBAIwADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFP2WWMDShux3iF74+SoO1xf6qhqaMB8GA1UdIwQYMBaAFGjl6TRXbQDHzSlZu+e8VeBaZMB5MA0GCSqGSIb3DQEBBQUAA4IBAQAZ/imK7UMognXbs5RfSB8cMW6iNAI+JZqe9XWjvtmLfIIPbHM96o953SiFvrvQBZjGmmPMK3UH29cjzDx1R/RQaYTyMrHyTePLh3BMd5mpJ/9eeJCSxPzE2ECqWRUapkjukecFXqmRItwgTxSIUE9QkpzvuQRb268PwmgroE0mwtiREADnvTFkLkdiEMewfiYxZfJJLPBqwlkw/7f1SyzXoPXnz5QbNwDmrHelga6rKSprYKb3pueqaIe8j/APNC1/bzp8cGOcJ88BD5+Ny6qgPVCrMLE5twQumJ12V3SvjGNtzFBvg2c/9S5OmVqRLlTxKnCrWAXftSm1rNtewTsF WCS Entrouvert lasso-2.8.2/tests/data/sp6-saml2/PaxHeaders/private-key.pem0000644000000000000000000000013213766621500020472 xustar0030 mtime=1608196928.958896909 30 atime=1678098071.561501378 30 ctime=1678814321.509956157 lasso-2.8.2/tests/data/sp6-saml2/private-key.pem0000644000175000017500000000321313766621500023741 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN RSA PRIVATE KEY----- MIIEowIBAAKCAQEAzTofHpWAdhH3BR/+1lVVNGRVY2qH3H4+8cDaofg5gy6oazgB /qVTZixm+euZF1wVa/T5SR0CBeFF4JYBmC0HWl39b2bqoNGV0ILLKyjDrE88pHP+ k5PBFeb98zRAY95fPDOPfgFc4g64W76fvri8qfXx3665UATOTXnvqnFOnilA/Ml9 00ust5Dy/IKyGgVT4xgm2nVQD6HYmg7Rjyga/LBtTEeKgc3k++fM5t8AzhdoNCiG Z/Ez1RztanjEoBzWdSrmHAGsemMUxFLPpQJ8yglIYiL7fEkyQ0KMvRcTDk0pVzmN EqTNKQ3mPwpMz+TWM8+wMc9FjNtZaGc213omWQIDAQABAoIBAEPj5keHzWdBqiXX 38WnlPgv+M9afndCjDANTEYoh14OIUjWzlIe/ufd6HLkrVA89hkwgQbewbyQOT2C YiSlQLl0PlKMCTIKIzVHD07HvXNTAwykEqNfTZChSYEa1/Ixre+MXvugF8nwdKxk 8xN0qXTQF6OXeVYvQNAAdng743YON4ubqKlEezIwnfG/jcoZrGkiTpx+k1JXJsZN 4dHKFP12RRhUTGjaOkBo41w8GNKQLFpy1vqAOYMyi1SJcrwpAu3H0iQug9SylQaM bFjt8j/m13gu3zXIJbi8xbyg3nqpxl9dxcZG/cDA9z2tLu/h3G3nPq7CXvkZxmjl ePvOCwECgYEA9zbwYMtd8tT3PHtrCtjwkfxV0dvMmfNw/rRT4ShWtKLmgX+K9nz/ T4qpbehz4z7OvsLjQ6Bt6wjMNMw9SEBeEMyDVTpmzSD2PowARegmeLX4CsilqHHl /AMYUtywEQ2f65/CWPiMIt8mLnEyJ/dsyVLpuzGUNNt34Yaqpu2qXnUCgYEA1IUy PObmTh3I8ZyESyGhbu2TYs0A8Zy6eTIAv0ijOIpmUykzjE5pR9sB3nYEd4GTHPEv hF6SWfNIDDr83TqThJYzkFyXMCxiVLH55U42wlsvwp4jTnOI3K/7Y7U/lEmBlgcl JbIIv1t9okg3+Kuu4i7iB6JR89cSO/Wfcdu/c9UCgYAHE5eF7cxeqyH4pT/HK7aX NzXtr/EHZySQ5fCQvWrd+NvIUTJVI/ba/AklkEXg92dLpqCCyxDabYIK8N3AN7d5 m6EWy3kt3geueqt3VNHlGrBi/qNfUwNWV3BWzuJrWox9XjFeAp9gUCrzoWHiKv7+ NFVkemLXsICaABTaemsqEQKBgQDJJ4n1u1gieG7Kwqs1sg9rP9RRoFlUWFTogjvS 0p4r1lQkQstX8qAUM2gBeROhSjRFIMUpNZqxKWT4rpzJibg3tzP3YKx6HIi2Qf+W 3AFY1ZbPT397sj/JI4l/Rv93DFxr9TdkBq/g8GhqQpE3/sj5rgaj0zBe7SOFPWg+ DRGaQQKBgEEcSF5KmpIHnhi3WlfGiEtx3kcD63orKME0YYA5BM6wnmRT4QiSw+qj i7ljrKGSbmdMFC3ArM42/k2lXYpVLsYWmyaRYSgbdowxLM1XxDJMFIPR2uG6N+vi HzWkRxi2SXKU42vfs5eA0itHvQP2DfUx8VuvtwVbOxDGgntYia70 -----END RSA PRIVATE KEY----- lasso-2.8.2/tests/data/PaxHeaders/lecp1-la0000644000000000000000000000013113766621500015323 xustar0029 mtime=1608196928.94689681 30 atime=1678814326.421984131 30 ctime=1678814321.397955518 lasso-2.8.2/tests/data/lecp1-la/0000755000175000017500000000000013766621500020651 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tests/data/lecp1-la/PaxHeaders/metadata.xml0000644000000000000000000000013013766621500017701 xustar0029 mtime=1608196928.94689681 29 atime=1678098071.45350053 30 ctime=1678814321.393955496 lasso-2.8.2/tests/data/lecp1-la/metadata.xml0000644000175000017500000000310113766621500023146 0ustar00bdauvergnebdauvergne00000000000000 https://lecp1:2014/singleSignOn http://projectliberty.org/profiles/sso-get https://lecp1:2014/singleLogout http://projectliberty.org/profiles/slo-idp-soap https://lecp1:2014/registerNameIdentifier http://projectliberty.org/profiles/rni-sp-http https://lecp1:2014/soapEndpoint https://lecp1:2014/assertionConsumer https://lecp1:2014/singleLogout http://projectliberty.org/profiles/slo-idp-soap https://lecp1:2014/registerNameIdentifier http://projectliberty.org/profiles/rni-sp-soap https://lecp1:2014/soapEndpoint true lasso-2.8.2/tests/data/lecp1-la/PaxHeaders/public-key.pem0000644000000000000000000000013013766621500020146 xustar0029 mtime=1608196928.94689681 29 atime=1678098071.45350053 30 ctime=1678814321.397955518 lasso-2.8.2/tests/data/lecp1-la/public-key.pem0000644000175000017500000000070313766621500023420 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyh/s5dBFdMcDgv9IyLCj jn4yNgGGhmCUtnzp8Yi9O+5ClioGN+bnbrXVWUWBhJqhp25OX77Bgozrs8fdv/8M qlIzK6CxanZJLwwJy56bwBYdfR+vNzM/c2YA7AltPeyGTg/XIVdUWJM83RXYLrMl iaApaIzO43sFmQhZ6wSyOLYDpIFQOPD1/1w9fbeQi0UkNAkQAyv7kit2bQG84KtS XhYFvs/vo+3d16AP4q6U7E0aie5b/566AlrvLZIroLPrF2oonp5VpYjDGPnnph2h Z+vfWKIJn+FmoTrF9oaCCjkLa6BhxM8FOpsmEDNpPwbg3suz8tljFOd4dO/MGIX4 0wIDAQAB -----END PUBLIC KEY----- lasso-2.8.2/tests/data/lecp1-la/PaxHeaders/jks.keystore0000644000000000000000000000013013766621500017755 xustar0029 mtime=1608196928.94689681 29 atime=1678098071.45350053 30 ctime=1678814321.393955496 lasso-2.8.2/tests/data/lecp1-la/jks.keystore0000644000175000017500000001130413766621500023226 0ustar00bdauvergnebdauvergne00000000000000þíþílassoþWÀbp0‚ü0 +*‚è®ÈΚY‹w«Õ`Û©oHÛºn/~0,Hý?º—˜hž¼NÓï_iŒ-!3»¥¦"XxüuoiÖ“V@NTõò`{g½Ò?³¿¸‚ *ØB%­ žq¿I˜Ÿžøa•²ÿ‚Yæ¶À6‚%Ò£îä›õ£ûõ‡Ñ2lÈ@ÒUtIüù›·‚c’Óû ´Gt>žâNÏYƒà Æ öÎÝ Š‹”XUßÙÐ58°ií¾îÄŸ'F–Ÿ(:©¯ü¸xzFlïõ¦XOX¯ ÆR’‚‘„EàßìöeUÐê~Ñ1ÃxÜ/U…¿šR4¿œ×ÆÝàiʽ¿£˜a”‹ @~†ìé)w‘Fã}^,™Ws?ÆèKBBX;¹°zAœ½ütHvüÿNŽß¾ud3ýñ.õL„­úÅ h×¼áÙ!±íÞ/ØuIÌ‘tS\¦ôTÓb1R<3Šß@=œb$#«pçpõ§ü¾uóüi8’+%‰)|+¢÷—n“*GĪ=ÉŸMµ¦Ý‚¡Ó#Xœš§GW˜zz©ý'ES²®¢[n›‡îEÂçZDÅ_뺵Í÷[yI­AºOFuwt€Ï*‹#â –¢"oº‹¢" æ!¯Ôãí±c^ÙCòʂר¯ŸÝ´D ËGÉØÁqÓáG}4Ô¨RB8¿Ü`Ñ>Z :â]×ñMö&P˯>щ_$>3¼ RÆLø9o¶‘2=šò’¹Ð!m tVGâ2VE‹è66ä¡¥b‹²”&Äȧrn + ÂZ9µÃ~,/o/Ö;$‹L³ª]s’Àu£Ù@ ±™ ‹¹ÏP $~‚ò;yó€¼µœ—†½–®¦^2Z¨.…ko‡zÔ³¤ñì OĘT &£µk`G÷šþ5/éœÍmyVFýè‘?TlLÈ/µ×ñQ}üêÞ]^½Úàµï0eÿýÈ¢ ’dë-Vo»žnËÞË_ûÄä´ãÙU}ÕÔƒJmK¸Pªy®€Px±ûˆ½¸1ìÌ8Xw· wåB<‹/¦àÇÙV–vSi ¾Ýœíu‰x;£‡a,NÔAÐÑÞBr¸ïO¹V@c˜£¤¤ehhsÉIUÖÌOàC/_wçVSÅ5b\@¤– ½âå6…ñj!å¶„ßhèø€ÛgçÙ[6Ž™tþ¯Þî,­JôCÔ‡³Zõvw²``]$B‚³=çâjù©S—Ë´;w:#¡õ(1‘ª®n!ˆb¢x0vöj>g½Ž·¹åšTêýÁÓO´sþÈ\eÔ>=-ˆ± <½ÑúqÓ‘ÖÚáç ñv}Nb>è¡DW×OA¹`A8’noë¼¢HE%ÄÕøš]ÁÃ»ÉÆÉÓ÷k÷NÁ{xŒ³aÊæÈžÖÛ_Í9s«É¢§Dí‚ë|ìýÀ~ÖM «e•“›2׬– ‹¤ý%¥I<)WI¸üdçŇHæuÝ«ìrL~Ajƒ@\p‡½ŠÉó,;=ûÜLVÅç NOi¢dÜ’žá¨×Ý:Ûˆs|~Û’r+NL:è:á.´íPrßÎ]†ÛüA¹qþ¥ X.50910‚-0‚ 0  *†H†÷ 0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #110U Entrouvert0 040813104423Z 240814104423Z0210 Ulecp110U  Entrouvert1 0 UFR0‚"0  *†H†÷ ‚0‚ ‚ÊìåÐEtÇ‚ÿHȰ£Ž~26††`”¶|éñˆ½;îB–*7æçnµÕYE„š¡§nN_¾Á‚Œë³ÇÝ¿ÿ ªR3+ ±jvI/ Ëž›À}¯73?sfì m=ì†N×!WTX“<ÝØ.³%‰ )hŒÎã{™Yë²8¶¤P8ðõÿ\=}·‹E$4 +û’+vm¼à«R^¾Ïï£íÝ× â®”ìM‰î[ÿžºZï-’+ ³ëj(žžU¥ˆÃù禡gëßX¢ Ÿáf¡:Åö†‚ 9 k aÄÏ:›&3i?àÞ˳òÙcçxtïÌ…øÓ£‚&0‚"0U2æøÃ•¯W=ƒì8DJWbñ²ó0U#0€=QHÜ3÷Â4ïØþ$Ò¿ØZˆ0 Uÿ00 U€0U%0++0 `†H†øB€0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0C `†H†øB 64Entrouvert Liberty Alliance LECP #1 test certificate0  *†H†÷ ‚'Õ#K¾`yàßO¢LÈÆsqo &Ës×h˜8Ôaû|ïKðRÖ4×íeO#-Ý›&þaXŸl*–ÏäÅ Öjïæ­dS.y€õï–ã1@ÓP×:XG t2= ñr‚YùK¢eØkvˆÅÔݪçŽAÚÙm‰¯?žåñÀCÿkïèOFulÐwnm~:'Û\¸ñ.ȳ·M —ÎЬ¡A{Ìšrw’Ç—V"FþÈë5ú4‚Ð`ĈçQîF¸U–l0Ô=ÕÿC†ß:× tT.qO@ûÆþ=uZá!µ’°üRÏ{YNÎhþRTq" |t…h¨ð øŒïçF6X.509t0‚p0‚X 0  *†H†÷ 0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #110U Entrouvert0 040813103637Z 290404103637Z0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #110U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚¼½PæôÝŠ¹…¨•KÎÈYÉñbKèËFG¯œæ¡-aòÚW¦äô×?}Ø8 âvO•“žä'µ œÔ JpF!iuÝf°5lϾ-o 9ºÙËÄ?^s_®ì([xcÑ«½æ ÚÁ‘3¥W]O(µΩ®‡§jy¢'h¤ … RKsÇ€ íUD½š†8XJKõžY[çmèv„‰˜>Ð}Äf-Ô~a˜x“ÂhA3Ÿ·AuIÑMgx›Ry-ˆoê {Œ‹":6l£5dfüº¥_‰`K„Üd=ž#QºËýƒa l¼ŒŒêšYÝ3ì¦M$«ç Jæ"K>¡T MÅt×VWC{&74 ÍÅŽÚëZhòîÎS™Å”†G(9¤»ä3tÖíú”´Ä ÇžAü/Æ0 p‡Bîô˜ Û0ÑM;œÊPÿßX—wcÑHý1Ünb„Û5®²’úø”ü§¤·[A;_tæ7>Ko„ vOt\|·Ú3¶ˆ¦o(`ïá?LbÁÏ ¹¨i}ÅúzÞðAentr'ouvert liberty alliance test root certification authority #1þW¿Ñ]X.509t0‚p0‚X 0  *†H†÷ 0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #110U Entrouvert0 040813103637Z 290404103637Z0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #110U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚¼½PæôÝŠ¹…¨•KÎÈYÉñbKèËFG¯œæ¡-aòÚW¦äô×?}Ø8 âvO•“žä'µ œÔ JpF!iuÝf°5lϾ-o 9ºÙËÄ?^s_®ì([xcÑ«½æ ÚÁ‘3¥W]O(µΩ®‡§jy¢'h¤ … RKsÇ€ íUD½š†8XJKõžY[çmèv„‰˜>Ð}Äf-Ô~a˜x“ÂhA3Ÿ·AuIÑMgx›Ry-ˆoê {Œ‹":6l£5dfüº¥_‰`K„Üd=ž#QºËýƒa l¼ŒŒêšYÝ3ì¦M$«ç Jæ"K>¡T MÅt×VWC{&74 ÍÅŽÚëZhòîÎS™Å”†G(9¤»ä3tÖíú”´Ä ÇžAü/Æ0 p‡Bîô˜ Û0ÑM;œÊPÿßX—wcÑHý1Ünb„Û5®²’úø”ü§¤·[A;_tæ7>Ko„ vOt\|·Ú3¶ˆ¦o(`ïá?LbÁÏ ¹¨i}ÅúzÞð"hl—þD’8ѹšîöº1Ñ•Ä.lasso-2.8.2/tests/data/lecp1-la/PaxHeaders/certificate.pem0000644000000000000000000000013013766621500020364 xustar0029 mtime=1608196928.94689681 29 atime=1678098071.45350053 30 ctime=1678814321.393955496 lasso-2.8.2/tests/data/lecp1-la/certificate.pem0000644000175000017500000000274513766621500023646 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN CERTIFICATE----- MIIELTCCAxWgAwIBAgIBAzANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJGUjE0 MDIGA1UEAwwrRW50cm91dmVydCBMaWJlcnR5IEFsbGlhbmNlIHRlc3QgUm9vdCBD QSAjMTETMBEGA1UECgwKRW50cm91dmVydDAeFw0wNDA4MTMxMDQ0MjNaFw0yNDA4 MTQxMDQ0MjNaMDIxDjAMBgNVBAMTBWxlY3AxMRMwEQYDVQQKEwpFbnRyb3V2ZXJ0 MQswCQYDVQQGEwJGUjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMof 7OXQRXTHA4L/SMiwo45+MjYBhoZglLZ86fGIvTvuQpYqBjfm52611VlFgYSaoadu Tl++wYKM67PH3b//DKpSMyugsWp2SS8MCcuem8AWHX0frzczP3NmAOwJbT3shk4P 1yFXVFiTPN0V2C6zJYmgKWiMzuN7BZkIWesEsji2A6SBUDjw9f9cPX23kItFJDQJ EAMr+5Irdm0BvOCrUl4WBb7P76Pt3degD+KulOxNGonuW/+eugJa7y2SK6Cz6xdq KJ6eVaWIwxj556YdoWfr31iiCZ/hZqE6xfaGggo5C2ugYcTPBTqbJhAzaT8G4N7L s/LZYxTneHTvzBiF+NMCAwEAAaOCASYwggEiMB0GA1UdDgQWBBQVMub4w5UFr1c9 g+w4REpXYvGy8zAfBgNVHSMEGDAWgBQ9UQFI3DP3wjTv2P4kGNK/EthaiDAMBgNV HRMBAf8EAjAAMAsGA1UdDwQEAwIHgDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYB BQUHAwgwEQYJYIZIAYb4QgEBBAQDAgeAMCYGA1UdEQQfMB2GG2h0dHA6Ly9sYXNz by5lbnRyb3V2ZXJ0Lm9yZzAmBgNVHRIEHzAdhhtodHRwOi8vbGFzc28uZW50cm91 dmVydC5vcmcwQwYJYIZIAYb4QgENBDYWNEVudHJvdXZlcnQgTGliZXJ0eSBBbGxp YW5jZSBMRUNQICMxIHRlc3QgY2VydGlmaWNhdGUwDQYJKoZIhvcNAQEFBQADggEB ACcA1SNLvmB54N8DT6JMyMZzcW8LJstz12iYONRh+xF870vwUtY01+1lTx4jLd2b Gib+YVifbCqBls/kxQzWEmrv5q1kUy55gPXvluMxQNNQ1zpYRwoedDI9IPFyglkW +UuikGXYa3aIxdTdqueOQdrZbYmvPxue5fHAFkP/a+/oT0Z1bNB3bm1+OifbXLjx LsizH7eBTcINl87QrKFBnXvMmnJ3kscIlwJWIkb+yOs1+jSC0GDEiOdR7ka4VcKW bBUw1D3V/0OG3zodjdcJdFQucU9A+8Yd/j11WhLhIbWSsPxSz3tZTs5o/lJUcSIK fHSFaKjwGwn4jO+PAedGHTY= -----END CERTIFICATE----- lasso-2.8.2/tests/data/lecp1-la/PaxHeaders/private-key-raw.pem0000644000000000000000000000013013766621500021131 xustar0029 mtime=1608196928.94689681 29 atime=1678098071.45350053 30 ctime=1678814321.397955518 lasso-2.8.2/tests/data/lecp1-la/private-key-raw.pem0000644000175000017500000000331613766621500024406 0ustar00bdauvergnebdauvergne000000000000000: lecp-jks.keystore 1: lasso 2: changeit -----BEGIN PRIVATE KEY----- MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDKH+zl0EV0xwOC/0jIsKOOfjI2 AYaGYJS2fOnxiL077kKWKgY35udutdVZRYGEmqGnbk5fvsGCjOuzx92//wyqUjMroLFqdkkvDAnL npvAFh19H683Mz9zZgDsCW097IZOD9chV1RYkzzdFdgusyWJoClojM7jewWZCFnrBLI4tgOkgVA4 8PX/XD19t5CLRSQ0CRADK/uSK3ZtAbzgq1JeFgW+z++j7d3XoA/irpTsTRqJ7lv/nroCWu8tkiug s+sXaiienlWliMMY+eemHaFn699Yogmf4WahOsX2hoIKOQtroGHEzwU6myYQM2k/BuDey7Py2WMU 53h078wYhfjTAgMBAAECggEATUEgkcImGflLDVG3pwVkrjzrwhqZKVlW3d0mqavi8Doj9zM+xzUZ NgaH8iQP2fgkW1Nc31mQqu5j1IZK6mx4kczzQ/Saex+U30eRouMPkr6hLMbkeIu878WICq+bsnRp 7QI+7r5rPaOhOrtzsn3EljLCQPS4yteljxVTEPHtkKDJ9tn7Joyv28GbyhnFvknrKa0Mv0X2bId2 m0Qz+6h9aMCKBtl2i+tH3axmyXTn2sfMb88nhgiWU8bSfx+EfR4nFYdzbAvvV3W/bJ5Fq510L6dn uhPHljxLGjXDyOqba69YR+VHLLrQU/H8qFVgIsxKY8OoiKAjf//OgbabEB3lkQKBgQD/oF/ty5n/ diBHxlNkyxE5MYjb2oxklmBg3Iifk0CbN7c2+NoEJ44rKgOut8W0QZpAM3XH5qvttjuYmCTbC6k1 58MACKHlDx2GDY4AC1U47UNs77gAfldOf7zH4S76WkDHh4c45jcOg8dEi58G8CvS7naPJtlxl94i OZjbHdP4mwKBgQDKa4lfZYXozl4WxU4eKFkFqEl2FZtkeLFUGmS+VwIx81eyZg/IVeCAnwjRpmky RCevctXqASz3ZsZJ8TEkwKI3e9j7PBuoZ66cE4yqvvCYVpCzuICMb+Bwd5OJSFiElnaQXVUBzwdZ v4WJ6LbsNuqJKRAqhwIT+BzHv/klDYf4KQKBgHKpqH4NBu3dOcuYPY4HvJkQDBi6JqF0BpVMNwiF T8SQMGG7LGgSqiXYecBkdI1Po/ZKXvmlEdfWF1NyY43R5Dvm0sRwGtaZeh/Icrq4WqjnXIg/2yR1 h4oRqEdsTdtEoqwdsd0m/ulG2Rp5GoNNNgsupgW+YmkeuyhU96jJ72wjAoGAJschIwhk9euK9NvJ kldybnYF1Lxg74d7mTwRLrGmdwFCPKf2wA9LmfhdjSRPJNUPsTnTpyeggKjMtd+h5YON0AlG0SJ7 vfBW8AmCujcoClcTE4r1/XF1UrZlqjgU1RmqDxACN/18UAIzx+6wFGKU3b/jG/KPQFoY0V+CkEme UbkCgYBC0MuD08rleEF3cN6gtwWxJyYFO1+LbN09zmydqiAet8jchecQ5gs4oiUp/AIREWAhRRq7 WN6pI6I+DmiZ/dyuCTCIvzY8Apa1Dmb2t+2BtNmM4e/w2Ia+CkTb9NSOF+XKJ2w+U28zMr6rIg4Q t6t/iCpOEPqo7fxZd7QvWkw5vg== -----END PRIVATE KEY----- lasso-2.8.2/tests/data/PaxHeaders/idp9-1024-saml20000644000000000000000000000013214050545511016165 xustar0030 mtime=1621281609.259307995 30 atime=1678814326.421984131 30 ctime=1678814321.389955473 lasso-2.8.2/tests/data/idp9-1024-saml2/0000755000175000017500000000000014050545511021512 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tests/data/idp9-1024-saml2/PaxHeaders/metadata.xml0000644000000000000000000000013214050545511020544 xustar0030 mtime=1621281609.259307995 30 atime=1678098071.449500498 30 ctime=1678814321.389955473 lasso-2.8.2/tests/data/idp9-1024-saml2/metadata.xml0000644000175000017500000000671014050545511024020 0ustar00bdauvergnebdauvergne00000000000000 MIICHjCCAYegAwIBAgIJAIqpRTWoklygMA0GCSqGSIb3DQEBBQUAMBUxEzARBgNVBAoTCkVudHJvdXZlcnQwHhcNMTEwMTE5MTg0MzIwWhcNMTEwMjE4MTg0MzIwWjAVMRMwEQYDVQQKEwpFbnRyb3V2ZXJ0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3vSEy6WMnyN20hiRAsZ8kAJAS+wgztD3WoyULdTz3S8JlqGRW2cCuoS77o539aA2C2lUehNrw/0h9uyrT2GroAjlw8wb6pQrpydteL8A59RtvhfdqwOfScV6Y9dUwKGvoGtC9sbB3mBtkb7MaWmhFucNe02KV5Tas1Xl6hexjEwIDAQABo3YwdDAdBgNVHQ4EFgQUBe+8IQnCGoU6FG+E2CTD44Mnji0wRQYDVR0jBD4wPIAUBe+8IQnCGoU6FG+E2CTD44Mnji2hGaQXMBUxEzARBgNVBAoTCkVudHJvdXZlcnSCCQCKqUU1qJJcoDAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBABdOD1MRL9hnkc9ilB5VZ2SDYAqH7L6ed1VwQBzNzIyX3Uy9tldn5jGOEeRTax9I/YTEpcwetlUVE+MiJTa+V/XlfPC4BcbRE+EdLAT+pmSFAOo/5XoFIgNBTXS1sj0QJ8mZLgGVWmP8rjtvTVIw995pG1L9No/KM70CaHDKyXq9 MIICHjCCAYegAwIBAgIJAIqpRTWoklygMA0GCSqGSIb3DQEBBQUAMBUxEzARBgNVBAoTCkVudHJvdXZlcnQwHhcNMTEwMTE5MTg0MzIwWhcNMTEwMjE4MTg0MzIwWjAVMRMwEQYDVQQKEwpFbnRyb3V2ZXJ0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3vSEy6WMnyN20hiRAsZ8kAJAS+wgztD3WoyULdTz3S8JlqGRW2cCuoS77o539aA2C2lUehNrw/0h9uyrT2GroAjlw8wb6pQrpydteL8A59RtvhfdqwOfScV6Y9dUwKGvoGtC9sbB3mBtkb7MaWmhFucNe02KV5Tas1Xl6hexjEwIDAQABo3YwdDAdBgNVHQ4EFgQUBe+8IQnCGoU6FG+E2CTD44Mnji0wRQYDVR0jBD4wPIAUBe+8IQnCGoU6FG+E2CTD44Mnji2hGaQXMBUxEzARBgNVBAoTCkVudHJvdXZlcnSCCQCKqUU1qJJcoDAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBABdOD1MRL9hnkc9ilB5VZ2SDYAqH7L6ed1VwQBzNzIyX3Uy9tldn5jGOEeRTax9I/YTEpcwetlUVE+MiJTa+V/XlfPC4BcbRE+EdLAT+pmSFAOo/5XoFIgNBTXS1sj0QJ8mZLgGVWmP8rjtvTVIw995pG1L9No/KM70CaHDKyXq9 Entr'ouvert lasso-2.8.2/tests/data/idp9-1024-saml2/PaxHeaders/private-key.pem0000644000000000000000000000013113766621500021212 xustar0029 mtime=1608196928.94689681 30 atime=1678098071.449500498 30 ctime=1678814321.389955473 lasso-2.8.2/tests/data/idp9-1024-saml2/private-key.pem0000644000175000017500000000156713766621500024474 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN RSA PRIVATE KEY----- MIICXQIBAAKBgQC3vSEy6WMnyN20hiRAsZ8kAJAS+wgztD3WoyULdTz3S8JlqGRW 2cCuoS77o539aA2C2lUehNrw/0h9uyrT2GroAjlw8wb6pQrpydteL8A59Rtvhfdq wOfScV6Y9dUwKGvoGtC9sbB3mBtkb7MaWmhFucNe02KV5Tas1Xl6hexjEwIDAQAB AoGBAJQa7NbYD+gy3ps0gaZwRsJDfd7+4NaklDAeY67/urvwImvFN9RWRB2/qVqH wcNRC4sNqQ0ntEAM1wcaRuRqj4jDdB8KG2ecE1ASNP1LaaL3AbDY9zADLRGW93W7 FKBksd7PyQoTknzpPoZl2u+dmxKZ7lJrQHilqLcE0VgCLZchAkEA7tr+S+vkPQe6 Bw50vUB8CygB5qN/y96afMm/7guMMVzGvZqfqOPIdLNaJBqTcMWYQKZBLDPrccRE uPVJ1zt8AwJBAMTtW+tFvlKtBN3NVf7xArWilAEhNtHUUhl0V5w/iWSSnpJyDG5D M1kuMLjn0yR94YJu14/+ozXcsho8qzYNN7ECQQDWfcoGm5qmQ54GYDDtEk9SJWcv mntUtF2+2d2FAtGuMkY2VfgyTfrg8X5tFYB5sLd8ts+nxigUTc/42CyrHzvJAkBh pdULf8TVGCgul7AJv5Z5XImJWd/mAiNHrfH3b2YAcdehhF33mujuUsIkHggLs0PM Oow3QavKfInwCp9XKQyxAkBTHNG2wBF81ZITfrxJ2XekJYH81P6nPw/UrKerB6qa BLSQBiELJrHLC8w4hkL4MFDUSS2NJd3kjwXfCQs/HSca -----END RSA PRIVATE KEY----- lasso-2.8.2/tests/data/PaxHeaders/idp2-ssl0000644000000000000000000000013013766621500015361 xustar0030 mtime=1608196928.942896777 30 atime=1678814326.421984131 28 ctime=1678814321.3419552 lasso-2.8.2/tests/data/idp2-ssl/0000755000175000017500000000000013766621500020710 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tests/data/idp2-ssl/PaxHeaders/all.p120000644000000000000000000000013013766621500016532 xustar0030 mtime=1608196928.942896777 30 atime=1678098071.405500154 28 ctime=1678814321.3419552 lasso-2.8.2/tests/data/idp2-ssl/all.p120000644000175000017500000001045613766621500022012 0ustar00bdauvergnebdauvergne000000000000000‚*0‚ð *†H†÷  ‚á‚Ý0‚Ù0‚ ÷ *†H†÷  ‚ è0‚ ä0‚ Ý *†H†÷ 0 *†H†÷  0çCÑ„á‹rÑ€‚ °ZHÝ‹ÚpqJ­²J²Ý‘ðØJA nÖUšpAhö.¦`z”E‚HÎ;Íu"%Ù$€œò„²Q9?Á²÷äá}€ °—ÆÙOTÂG<¨ë°$‰” ‡æ‚Ý2U›Üð Û¦„ã’Ï^Q¬„í…Ê)ǧýùÔϱyå+ºr}7¾B"z•@·8ÑZYù8:~¾Œñaž ÜúH‡#3ÄRâžÎŒ…Ç4 :Ú¯M‹˜ê^áÁD:ÈÚ‚÷½{ð4°ŽÊ€å6 ߨ:Ú›ëT¡ ñé¼BrÚØîG«ƒÃ m´i¬d(Æ&ce«Á§€yo#¿7éðhjþ Ú2S7š”Ë2(v} ùÌSÕ¯Þ7g«*8×ò-£ÅWÀöBL Nk‘åt‹ñoNñ`ù:7}…úÙ®[Uퟮl+·à( NóqoVhéÉœÖ/þô5‡TîŒy±Éàárµœ¤‚iå5v»çddÁzú½ ‡Rºµ¸8×½)¢Ë‹R¹-Ÿ/K«§ƒ4F6Ög‡¨Ró_óñUæ]SôóLÈGîÛØ°Âjq¥ëbO9{‚‹3âçÒºð‘ÿÇ6’ô@çGé6ò&ú͈µÆpÃYSãYĉ4°¬¹Šß]˜*Ũ)ôH¿“Ö!$cJp‚£0$¾Õ_îP³`Ñ»\¶'’Ñê¶hkgöˆ<#Wv@õÙ„÷ÌÏM4}šØhÓ%S·(>Xë!æ–n<î§­/¹Kõ)½“¯§\§œé;$ƒŽ\zú p{kßõ?ªõá<¬%?†çÊ»þ(§´•c`‘õ1ˆ8°(¯âl£)·:8'•N|Al¼Œ®†#iSVíJÚ«-}w– ƒ.ÛÇÜU>©¹ÞÕÇ´„D¯LC6}6¥'÷¦iÇf›Å˜6ÙØÿƒ)öØ|M8ÔßÇþ¿x Ç&ºO W ŠNO¢öGêç¬ZcÙoY3˾g Z&§E¼uµ²\%û¢ÃMR¾DŒÎ!¢ÃÔ#,ù2úœÃïó€*(CK E¦ã¯í°øý•iö’ #BmmßwA†q+„šÞÛÂ.ánåe*|¿Ò H±î÷ÿ™YS7U9„¼:×z#FÅvE86R¸:ˆÀºV_ÃÅÕñ õmèì]wc¨óØùJЯŠZ°¥Ë º¢°š/Ãüÿã7avW/ý…T®÷ÚèOq=hw¦$)?6†ÇE€—QÉô© {l°IÛikRfÞo,Ì:(]L¾‹tNæ;ñ…F¡¸7P‚-ï‚m­²¨SîÿwJ>ç„;Iq™¤ï°Rî0…òÜÊu¡‰+ªCϺ"B³EnÒî¸ïóˆ|qõ{ˆ–‘D¤-­åôzMÆs-1–GFÎ~"ƒÏ#á’D‡ôaUÿ_LÔ“ (·ZgÉç‰ñà$Gv•Rg!äbšû˜îêÚ•›qó _Ùê°E{âÙäkœX+qj! ‘ÏÌé –0Fp„÷2šC:¯°iU¨=˜fúÚ—H¿ÿˆµG33Âbr¹“XˆÚžŠ ó§Œ×}ÈÆhâ:ÿv¥Hž† ’h(ò¤¢ïÚú‘²w´½¢¹Ld_Ȱé0Übê¿XÇBñÈåóš¨ñhvØËA+":u´öÊ#cÄ Ïc"þ†€”†ÖD­:Æš7ºä¹Å”O/u©¸=æ¥\ùƒ`? KÍ·¥‘À&¨*›säc6R*%œaÓ¯0ÇQPbà áÀ #·¤^2D}GçZQÒrhì™&Ã÷‘¨NÝ\”g±¤Ç’a˜e#ÆÜGkù €˜UNê£,ˆ{ìÊ#©Æ°Â‡‰SÊåE êN™õ¤†Uˆ$€ØwWL¬E[QÊaü†STî±là…<%‰ó)Ñšuzž>w(×İÄØß¶j˜_QÖIðKs”`‚x¶N—ÈÈÔÂÌK°§.Ô¦;;5T§ˆ…å°*¨ú@ëâ<~ ŒÕ«Ђ´`JÙÒø”t 8©Âõ$ýXêÛ(þáI5‰²sæVæúä·¼¶öß…îúÒÕ;iDh±"/^ ‰#Œž‚­‰ *ošžHÜE\),„iÆ;¹I'è šr ³Ä†¨qî¨ò†)Ï,bìncýœô«ÀÝÞˆæÈü×$ký~üF±/“î6Y•ÈhZm]LwíùºIÛzÍ-†_•,y5nõì_9"H/èüR:ÀÀ–º Y¹Ø|7Îêb–‚¼°&¿æ®Ä¨²|÷Z+7\P¦Ÿp‹ûð!òן’ ©vÕ/Š?¸r(Q“ðñá+³lÁ`±ý»*`ÐñÅØ#k˜DL¬2áXzJnú§Ë‘ G&czßpànŠÁÞ¸ûN°Æ"ç–W7Óðª" #¡ ­Lû ™ÍΔ.Ù1JèVLñkÜûxaÒš×Ø­ùFË>Ý߃ÝÜš sv÷Òë°å®Öß|ÈG¬½z»e/ãß;RýÚö$í(Œ‡×£=²00_ކ"UZ'âæŠl¸—·Æ]ÿÄpãQç³ ÚˆiðG[‡ ÌÓ‰} ˜bÄð¥N•Äyÿø Û8Ú¢˜ €ƒˆçÞ[|8¼þ…àñLßI¾EhÛú^ØÊ—[Ohtð-´Üc²š½­áÎUþ¬wQ=#­Å4—•*‹&ËÃùÚD¶  ÐûÑgvä¦+“îöx9XÞò`%Õõ¤H#†\«zªðgGw™ˆPv'UÛ&æ<ª!†G4SÚ?í°nªþÛÔhŽ-{–‡Ç;ÁséÂôAY:Oß¡å\ÛCdž2é$ÔBªnn}¢![ž›ðÉ¢†¥"jm°ôd•£¡#Í~pUvŒ%{ýÇH$ƒªB™'Z Òèê’ž†§Ï»2£»„wQÄÌ™Ÿüú}¬Už &_.~RHÓ¼Þß\Z-×&æüPmlÕø÷XÔLéœ:§Œ`Vö­Y©¥(ý(¸,¾GþüE‘g®‡Ç‹¹º†ÿ˜ÓÐÏ`@åØKᦨw.ùîà©À5ÜÈFaaJ$õp?Ïuj¿©("ÑaÛÙÒ&´\ü¦­qGñ±oÆZÑÙõ:ýŸ æÞÚ5¨¦ ëFOÏ×Ööi¢Ø2ZÉÀ¼ ûFÀý² 6Iäî5w ¹j5Š3µLãâØä` ýÍ9 K„Öò¡h¹@uàì­ß)M~¤{ña‹’Ÿ€YTµãN–¸ŒÎÎì ¼6 @¼Ø=­ñ5Mê6ÞG+á´ç(n‡KbU¡8®0»lZeœQÿ0û ,™ã0‚Ú *†H†÷  ‚Ë‚Ç0‚Ã0‚¿ *†H†÷   ‚î0‚ê0 *†H†÷  0D.„Ë‹ßB/‚È6­<ìµ%µd`èø—œŽ@ÿÁbî¶.å³#;ha~7@h<L½=ˆý²ãŒÙ×ÏJ1Û ,ؼþ‡ó–Ã5£É°þ{©‡Q‡ò©}Tÿ@I ›­óé¿|âØ“fùŸËu’x®Ë{IXDqeg0ÑØÚsþœ6€$ 0â¬$·Q™„Ld7¬J:-nÙ­xñ£OÓã:swé§ÜÇyÇ@< /¾”ÄŸµô¾óf ¯ú‰£™o– DŽÆ„âÙÇç>Çc/ذíã4£&wW×£n“Ë £ÚŽéüè`N(is:Õ7vÄàð0‚¸¯Vr¼[âï=WgæFЉ*iôcâ:б¥`à:}ξHOEž ,-N3 ƒ |AEm1à¿.aG&/αýÁ`ââôÛƒz~nUe¢„õ—Ì'Œò2Ó Êüå„ÐèXÙ“®X¹ó½ŸòÎKÄ’tœhAäÄÙh¶‡É[í°yYÔTVÁè>:?Cºaɶþ C+´ãÞѳ…ÀaåB5äácûƒ·¤0® –PÌi¼ É禹‹ùˆ!Œ2³Ò˜6¾ ‹éßÌéâ]Ë/½ûýPü§ׯ³‚N£äF^[Ãðllî¢åkR¸Ô»^·øWî¿ôõxSSLéo¾ÅCñj/¡Qÿ혊–ë5e~Éð%u CînÀˆL"½‚kP˜åc5¶;'Ù[y0ê9EµšV]P¬©ê‡„h'üõêÄdR³[·öïN¡S@/æ‹D•6¹¤~Q}ŒÀKÒ´Ú‡Î;útC†/aŠ4rн²ƒÆ!ÁÓÿôÖf#ÕeHû&yîD© Ï|hØd²£zÛåƒÄ>å¨@– (_»-·¼=çž…¿535oͱ¹‚âb”Ò}›ö˜±Óð,qº!¤ræ¼M¿¸é›/cLàñ…ÂgÀ.‘ÄŒµòYŒÞpgfú=«ãþ$:Óè*—¿‚˜ =ÚFÆ‚ùѲõ 7Ë1@+ö“Ì|¯gåbÒî­ñAø…à©LÙ6¯rîùÊ_ûIëñiÚ'6g°òC±,¤fç­4i±ÑZ¦&ÔèåÅΰ1eQ0m\Ò£¡³ôÓ¡«V EÄöâü ÄQê¶)"lV@“¶?^\ˆû·âý·ÏÖØèQh’'Ä×-+_ÅqZÆNò6Úw©})TËñUˆá×’4hõv¼ëåž–ÇHR¹"•w©“øýcÌñ:”[Í{¥²Cÿößb_s]6+M‘ÓBqeÊ0í¡e-= XÚ^~Tãf $a&i;A^©2ʉU=M‹ÅÜ`#‰±×B|JZEóåÃTôÐ¥•ýÍ?(+§Ñ¡Ä+<~L¿:‡Q…Í‹þ1ûl4«œä1½0# *†H†÷  1Ø*Óoðx­Ä±š­éa|Æ|9X0• *†H†÷  1‡„Entrouvert SSL Liberty Alliance IDP #2 web server test certificate010!0 +Ø¢«Pÿì/¼ymDÛô µÞ$mÒÏP{–­Slasso-2.8.2/tests/data/idp2-ssl/PaxHeaders/jks.keystore0000644000000000000000000000013013766621500020014 xustar0030 mtime=1608196928.942896777 30 atime=1678098071.405500154 28 ctime=1678814321.3419552 lasso-2.8.2/tests/data/idp2-ssl/jks.keystore0000644000175000017500000001134613766621500023273 0ustar00bdauvergnebdauvergne00000000000000þíþírootþWÀ&WX.5090‚Œ0‚t 0  *†H†÷ 0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #210U Entrouvert0 040813103645Z 290404103645Z0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #210U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚Ãõº<¶½þT¶9¬Ê ¨vÕ-:`9 !£ˆé `®/zJ{Ïe ÁÛw¤Z¼ôYrØKÄÁ†[s Š&À ˆëcñoøÓëš3öð·Ïz”Ùöß—uÅýÿ±±«!”ý2ækzB–ki!HÛE=h>©ajOL[fFÀõ9•­\¶,(qÀ÷‚Ç¡waH¨AÓ>pð [_¯4 ÀþJí&-ä!òˆå`ãêë.cÙ;ûÙeõÊy-%Ýõ¿Î©«ÕRÏkûQ qjXÎ{âCi@äðÊ.З·~Vêc U:‰¾Îb‹’1 :Û€´½ŸÌò}«7£‚I0‚E0U·M©Ç-ryìzï‘SÔÏÏð0U#0€·M©Ç-ryìzï‘SÔÏÏð0Uÿ0ÿ0 U0*U%#0!+ +‚7  `†H†øB0 `†H†øB0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0V `†H†øB IGEntr'ouvert Liberty Alliance test web server Certification Authority #20  *†H†÷ ‚{ÍR묅õçj©P³•*¹vÛ¦‹ÔDeAûÑ‚CôÏ!*,¥ŒÇé•’:]ƒ¯¹óËG.dƒ¡>ö¬`ëdäãÇ-èlAÊ4cNí ÆP¥ÀÏG/ ÀÈ ¾ƒÖ¬õ-ÛE‡Ž‹Û·w¨éÜ#º|¡yŽ dÛä4iUâÜuÑÂxæx\Õò¨zšGþªÊFÒèE£àDZê§~&É–á³Q¿"…öü3³ßú×ìL…Îrùç̴…í…,ëÞÎgÔØe¦ÑPØO&›Äà*¼”>Þ{Ú&gã(DàH™D‚»^ÖSÛ× ÿ~•¨O@óðø-ÙZQíóBJ#ª•RÌæq%lö 9P/`²F­HlÓÈY­wűwÖ–¸n¨/~î|<í¥œ7Î,ègi½þÇX·J|Q­¡¦YuC¨ÿ½ˆ8È*×ñD$Òá²Ì% (IÊ„EÓÀ»zWBk ¡ î쟑œj[Ë«¤AžÀ×ÏÔRs;Ñå™YÀ‹Ñƒw›ŒKY+š¾3ÜÚ•Þc“{ë"R¡·¢ŸD0Œè[¬i±‹¸¶]ÒëãÁ>c$¯JHo•Þç³\ýƧ÷ÅÎ `K8㋽ġ°˜×Jy t™»‹g‚>µ9‘A~弞J¾ú=\azÉ&Í"Ï¿"3­aÞE!øKc_:R®jBX«‚§›ÀïÚ²;Λ'öÒ´…ÐÉÍÿdÓ03‡5ë/Õ!Õä¯?e|?L/Þ*ù`Wt­‹ÒOS–Àe£rš) VÞ!ËÜï ùPRÇ=¤vIäò‚Cƒh›äÂaè<³ë¼$z›‚ˆ˜{IùT}J塌=ð±L»ˆ×ºkìëd•N…ÂZ nòë'Û“Y޷ĉž¥”u©=²ÙIàR$Çæt†Â”µ ©º"òSyD¡œÜJS,7æRý5ßdÞªZ J:£w”Iº|+ ±tÁ#Þ,w#]4`ïÈØ®5xu,;CžE¢Ì³cæÁxô ƒ^^(ßú÷€·•(ªºpR4`7c.ÙëŠx ]é@/·DÉnåp>/~¾Ðʈœ¾6 Zª f Á¹Ùon„äÀåé à5"xµÏ²ùsÜ=Q¯ vëC?êžèÞJ^ÂMÆ$¿Äz¿ HW?†*½4?#sð ¿iE0¤\—^™¿Çå@{çD(_aÑZ¯ÆŒI|õŸYr4^m>Sov‰××ò´U*þª„,õË„wðD!žÔp}ÝΪ»»ÃÍ„Ý&‰6ø³žÃvÖÈýõ E¹ºU–AhIiçu4wu„Ÿ³—´gµ÷ת£d=lš¸>©òæVs¨@µ(IªCµD’[숋7ÂÙ$á·ÛX–e±&BÉ=Ê!¯†f«Ý‘Ç‚¸1M)?cèÒÄçð{¡æ°˜ÔQKÙ.Ev€5›ß÷?£˜° ã£s…QKXìY¯lý²3{a((ú+Ö ÀEÛÅ-ÛÁŠÛO¯=c ®˜¦ -` ²Ù[˜2âÜÂq½Œë¿5ùjgŸöZ‘‹"2¡ke05ƪ¢\¬vÅoÙ"î"v¸Æ0Ì«‚MXbnÄÄ•e>–± òEÜÒÅéÛ¶9µÂ !†¹Ü;÷êuÆ}ÁTg“)ÜŽÛWæ&§ÊÞîÏ׆Îpne¹ˆ,Q…ëA*!.çéZÎD'AmøV\BSÁpÚްU¹Ï²¢&`í"æâøì}÷®ŠÓ¥Í&%…nW*éÖ¯¦H¹#ˆ7 ãÃ×~ưku l—¦hâ¯R¾-Ð+í¨$oìïWšä&›H7©ÐÛöWäÃ9¤D𘲠Št£ªiÿîÃJØ£‚A0‚=0Um>—Åf;?ç53qÁ·¨0U#0€·M©Ç-ryìzï‘SÔÏÏð0 Uÿ00 U 0*U%#0!+ +‚7  `†H†øB0 `†H†øBÀ0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0Q `†H†øB DBEntrouvert SSL Liberty Alliance IDP #2 web server test certificate0  *†H†÷ ‚šw°ÜŒàJ,Èw OH®üJò—”næÌÅÎÍÒî‚@§¤P\t" ˆ\ß'}6£ÙBÍi„¹k 2–&‚âng;v­5@d—Ê£îe¼xáy¥?”¡½V敉±¿/‚R’´«ðèÈÎg¿Þ£\.ýiG¹›$v-<ÅRÙ̬dnT1yD@Û© A¾I”£ò€™ò ·ÑiªÚO²W˜‚ÀqLúˆ(ÆæŠGeŠ69ÛÔµõTbBâéíÎjº‰›GÅürÌ?~À0H¥Î± ÃÏ-K«}®¬1Φõy‰±yõ»¡Mù; iØ8e2­«4íƒâk ÉØÉ ÄÔX.5090‚Œ0‚t 0  *†H†÷ 0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #210U Entrouvert0 040813103645Z 290404103645Z0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #210U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚Ãõº<¶½þT¶9¬Ê ¨vÕ-:`9 !£ˆé `®/zJ{Ïe ÁÛw¤Z¼ôYrØKÄÁ†[s Š&À ˆëcñoøÓëš3öð·Ïz”Ùöß—uÅýÿ±±«!”ý2ækzB–ki!HÛE=h>©ajOL[fFÀõ9•­\¶,(qÀ÷‚Ç¡waH¨AÓ>pð [_¯4 ÀþJí&-ä!òˆå`ãêë.cÙ;ûÙeõÊy-%Ýõ¿Î©«ÕRÏkûQ qjXÎ{âCi@äðÊ.З·~Vêc U:‰¾Îb‹’1 :Û€´½ŸÌò}«7£‚I0‚E0U·M©Ç-ryìzï‘SÔÏÏð0U#0€·M©Ç-ryìzï‘SÔÏÏð0Uÿ0ÿ0 U0*U%#0!+ +‚7  `†H†øB0 `†H†øB0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0V `†H†øB IGEntr'ouvert Liberty Alliance test web server Certification Authority #20  *†H†÷ ‚{ÍR묅õçj©P³•*¹vÛ¦‹ÔDeAûÑ‚CôÏ!*,¥ŒÇé•’:]ƒ¯¹óËG.dƒ¡>ö¬`ëdäãÇ-èlAÊ4cNí ÆP¥ÀÏG/ ÀÈ ¾ƒÖ¬õ-ÛE‡Ž‹Û·w¨éÜ#º|¡yŽ dÛä4iUâÜuÑÂxæx\Õò¨zšGþªÊFÒèE£àDZê§~&É–á³Q¿"…öü3³ßú×ìL…ÎrùÃ§Ì first name id second name id lasso-2.8.2/tests/data/PaxHeaders/idp2-la0000644000000000000000000000013213766621500015156 xustar0030 mtime=1608196928.942896777 30 atime=1678814326.421984131 30 ctime=1678814321.337955177 lasso-2.8.2/tests/data/idp2-la/0000755000175000017500000000000013766621500020503 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tests/data/idp2-la/PaxHeaders/metadata.xml0000644000000000000000000000013213766621500017535 xustar0030 mtime=1608196928.942896777 30 atime=1678098071.401500122 30 ctime=1678814321.337955177 lasso-2.8.2/tests/data/idp2-la/metadata.xml0000644000175000017500000000531213766621500023006 0ustar00bdauvergnebdauvergne00000000000000 https://idp2:2000/singleSignOn http://projectliberty.org/profiles/brws-art http://projectliberty.org/profiles/brws-post https://idp2:2000/singleLogout https://idp2:2000/singleLogoutReturn http://projectliberty.org/profiles/slo-idp-soap http://projectliberty.org/profiles/slo-idp-http http://projectliberty.org/profiles/slo-sp-soap http://projectliberty.org/profiles/slo-sp-http https://idp2:2000/federationTermination https://idp2:2000/federationTerminationReturn http://projectliberty.org/profiles/fedterm-idp-soap http://projectliberty.org/profiles/fedterm-idp-http http://projectliberty.org/profiles/fedterm-sp-soap http://projectliberty.org/profiles/fedterm-sp-http https://idp2:2000/registerNameIdentifier https://idp2:2000/registerNameIdentifierReturn http://projectliberty.org/profiles/rni-idp-soap http://projectliberty.org/profiles/rni-idp-http http://projectliberty.org/profiles/rni-sp-soap http://projectliberty.org/profiles/rni-sp-http https://idp2:2000/soapEndpoint lasso-2.8.2/tests/data/idp2-la/PaxHeaders/public-key.pem0000644000000000000000000000013213766621500020002 xustar0030 mtime=1608196928.942896777 30 atime=1678098071.401500122 30 ctime=1678814321.337955177 lasso-2.8.2/tests/data/idp2-la/public-key.pem0000644000175000017500000000070313766621500023252 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwhO887NKma8n79+BHHBL +KBJAQq04SqCdX4oQvFL4zjsoeffQA2z30eCxOcHbDRjJ0zZh18CYciXB8pZLNEn JzEQRxHqNQXUDYFV9QOEit2bf/rhwa48CYPEQKdMy8KiQdaq4AGPVvdyl97d09eT E9y6ouqD/t0UVbq1cYAXO36gQ249+at8h3m9G5opxX8oU0tEoCtCH89P8y+VHy8i jx8lcaOLBi6g4wv9zc0aa0VygHc89xCbnlAPEDEEPdxUMosDkXm6IqKzbCXYVPED uw1ESD2zFo23xV4yZ3Pggkif8v3IDbpuzo2nf03zYzLcx77iHwHcxnNMxPqICE0S +wIDAQAB -----END PUBLIC KEY----- lasso-2.8.2/tests/data/idp2-la/PaxHeaders/jks.keystore0000644000000000000000000000013213766621500017611 xustar0030 mtime=1608196928.942896777 30 atime=1678098071.401500122 30 ctime=1678814321.337955177 lasso-2.8.2/tests/data/idp2-la/jks.keystore0000644000175000017500000001130413766621500023060 0ustar00bdauvergnebdauvergne00000000000000þíþílassoþWÀhÚ0‚þ0 +*‚ê|o#GÿsÁ¡?˜½à5§Oñ=õ¿Œú6Ž|¿+-aäcý}-"§¬]˜ï c” œÄU„9ÍZÙ/‡¬£?ÉÈeùw4Œ”É\g$›sö½G¿Šå€nØ@ã,j±ȯzÁ‚ŒEPìé€Låÿ7!ƒA,‹’½1ĸá½üãϵeI£….¨D%’÷ñÂâ#¶[D—YàâÃð:°ÿTÒ”!¿ùÑg"¾MU>—sû/ ´/Ü„ÿþ2¢½‡Ð1àõ_:ƾPÔž‹j)[ò ƒ¬GBgÌËG ^UP˜SŒsÑ}ÆšÌ1͸I†â}îvÓ: VäÅ#Jæ›&0àb-÷¾J}lœñº‚É”óír¤uT´?;5æU„¨UÊ Ïþ ;j娯"³G¶r!„J¢ðQ~®„%“LÝ]®¸G^·¼ô;E^/ñsî"ŽÛJnDq°Žù3n! HÌ}ÛÑ¥‰Tªß¬#•ç›ÐÑõ56nÿs+½Å÷ChªÊDAð/R4Å\[»¾aJ[Úæèè`| ¦6·&¼%Ú´)-Ôg ïœÝZ«R A#^C¼ ¦žyPÃmÛÁª¨ÑYýñ%ß„¯ïçBF"»rgõSµ*‡œ’Vz¶Î1¨/.Enï Â'ššqð–Ö‘â°r‡B¿¢!¬P¢å‡#ì7K(M}¼_>é²=XAmù3[ĹG¯TÙä±NÂÉ;J%=B6˜’O7žNSP‚¡kÓèÚùš Ôvž Á‹Ÿ—ÙîõiA_g<ÇÜš§Žw€Û$QlඉGÚ3ä]´veúXÎÒVgVu`iÑ¥Áè¶ýDI ^£×+5€Ó Ò,´FÒ«lÇBTÚ†Çܶö“ö/¾¨zL9 k_Å@DƒìÜ颊¼– o-:Ñ(Ü?šqøN›³ƒ‚jf9à:ˇ”G§vÍÞ˧&1E),ôOTÄkoKÔ^-‹ $˜K XeŽɦK'!HõÈI+”‡'úºË&§èyCqsn6w.v,PÐÎ, *…;qëìê“öÛIh5›E ýH6‚c@AÚ…)Ùe"&4HRà ¶9=×nÓA±’¥uYxùèËÉ•;Ð< 38ûîùCò®¬¤Qî±kÙŽŒÙºl]LÑÐ@YÛã“Ût1<7E¬–‡ Í‚vCã„Hu|öªãf%ô2ï›Î˜$TË.¿ÿ;J½2Z|Èé2]WuÃí= $Ö••!WœTúmà“¥ÜJë“ÙQù(U`$¯QN^ÂO—7³@È{ˆ[›|Õ´5¡º›Œ$Àî?e˜ÅNèUÁÕ×§RŠhWßæ& ÉÓ~£zaÚsú…;úÉã`oüéxË8V¸tDÙÚH5ã¡®l&Ù7h6`)ã¥v*ˆRk`v}´BN:¾z¹å–ä@TkæiH¶zÌ…ClÔýÁ!C/«$³ëù‰µÜ¬å{¯pw“¸ ìS–ˆƒ©D˱÷>-®Ç‹xÓ« ›PÑ¡EFÀOOKÏá'øWâY©˜û– Žûß <ÔX.509/0‚+0‚ 0  *†H†÷ 0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #210U Entrouvert0 040813104423Z 240814104423Z011 0 Uidp210U  Entrouvert1 0 UFR0‚"0  *†H†÷ ‚0‚ ‚¼ó³J™¯'ïßpKø I ´á*‚u~(BñKã8ì¡çß@ ³ßG‚Äçl4c'LÙ‡_aÈ—ÊY,Ñ''1Gê5Ô Uõ„ŠÝ›úáÁ®< ƒÄ@§LË¢AÖªàV÷r—ÞÝÓדܺ¢êƒþÝUºµq€;~ Cn=ù«|‡y½š)Å(SKD +BÏOó/•/"%q£‹. ã ýÍÍkEr€w<÷›žP1=ÜT2‹‘yº"¢³l%ØTñ» DH=³·Å^2gsà‚HŸòýÈ ºnΧMóc2ÜǾâÜÆsLÄúˆMû£‚%0‚!0UÓnòºèÜ4ÕBWÐ0T<+ ç`Z0U#0€ò Uå«‘cøñNìÛû ¯žr0 Uÿ00 U€0U%0++0 `†H†øB€0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0B `†H†øB 53Entrouvert Liberty Alliance IDP #2 test certificate0  *†H†÷ ‚KŠƒÙÁÊ&ÑÙ/Ð,½­= †Í§ldRÃʽF˜Æç¤ˆžüe:¯@v²v½ÿ,^‚<ˆœQÃíšòiÜ#«°§m ið\û©5LÆGGc–ŠÉKO-žoí®CKgÑæ³eo‡BN³GįtŽŽR HZý—B&ÆTðßvŒÇDÁʯ…EC°H÷©kEÁlŽ÷¹Ñ×€9Sn0¼¨ÀEäàê+ÅzêrÀË"×òƒ Nl.ÄhWG{` …Ñ6a14uåô FtÅ úm½ÁIü(]B\ÁUðo#蜞ïƒíõWzH›¶Òcs³iY;ìF,=ªAX.509t0‚p0‚X 0  *†H†÷ 0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #210U Entrouvert0 040813103640Z 290404103640Z0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #210U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚á áâ À¥ª’.…l᥅¢ÕåDRXYÑÈóD¬õ•Qûqè UåϾ±Ç£ÜÐg†8nÖÿÜþÓu qI´Û¦.Øo^iÛ܆ ùEÈ 3‡ É˲áÉÀJ\Uâw)‰$ ”¥žæ¤ÎwÅ×û¶MéÍ#/^0àN~ÅeïƒÇA|•Ì•’ÕÍ©–ÍäI±s•#I/®Þv/2 IÙbï들çLR+ÖRq«Ø³[˜œŸ½3ÈäÔrMjYHë+wÓ™:qg|ØÅX“‘»ÃÂÃ.ö¨$±ˆb–=ã(®!ßzð×ßÉMî)Á¹M”C`ô.%2°ØV£‚C0‚?0Uò Uå«‘cøñNìÛû ¯žr0U#0€ò Uå«‘cøñNìÛû ¯žr0Uÿ0ÿ0 U0*U%#0!+ +‚7  `†H†øB0 `†H†øB0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0P `†H†øB CAEntr'ouvert Liberty Alliance test Root Certification Authority #20  *†H†÷ ‚àšS\I«ÃŒ³D›ý€âK®CuË = &Ê*¬%BOŠq1I}dÖ¢j«úÖöwþ\³Õ‘÷FhÔÝÈÑ,þóyý8•Bm›Ç=Šž/6( C‹œÌ1Yإ뎤¡w‘D…*Gè.Äqìýôp5œi'r§Jãð4,Á# ­4:Mþ4i2ÊŽ K˜%ÁDŠYói’|TËÍÛ ¿â¬D91Ðe‚ØýÐÙáòœvûF69<åÁÁ–M²ÂŒ;ÅpÔp9‹sœÊå`êÌ*' [Z@ÄP€* /OVóæ“`ÿf|†öX  8âAentr'ouvert liberty alliance test root certification authority #2þW¿ÙÉX.509t0‚p0‚X 0  *†H†÷ 0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #210U Entrouvert0 040813103640Z 290404103640Z0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #210U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚á áâ À¥ª’.…l᥅¢ÕåDRXYÑÈóD¬õ•Qûqè UåϾ±Ç£ÜÐg†8nÖÿÜþÓu qI´Û¦.Øo^iÛ܆ ùEÈ 3‡ É˲áÉÀJ\Uâw)‰$ ”¥žæ¤ÎwÅ×û¶MéÍ#/^0àN~ÅeïƒÇA|•Ì•’ÕÍ©–ÍäI±s•#I/®Þv/2 IÙbï들çLR+ÖRq«Ø³[˜œŸ½3ÈäÔrMjYHë+wÓ™:qg|ØÅX“‘»ÃÂÃ.ö¨$±ˆb–=ã(®!ßzð×ßÉMî)Á¹M”C`ô.%2°ØV£‚C0‚?0Uò Uå«‘cøñNìÛû ¯žr0U#0€ò Uå«‘cøñNìÛû ¯žr0Uÿ0ÿ0 U0*U%#0!+ +‚7  `†H†øB0 `†H†øB0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0P `†H†øB CAEntr'ouvert Liberty Alliance test Root Certification Authority #20  *†H†÷ ‚àšS\I«ÃŒ³D›ý€âK®CuË = &Ê*¬%BOŠq1I}dÖ¢j«úÖöwþ\³Õ‘÷FhÔÝÈÑ,þóyý8•Bm›Ç=Šž/6( C‹œÌ1Yإ뎤¡w‘D…*Gè.Äqìýôp5œi'r§Jãð4,Á# ­4:Mþ4i2ÊŽ K˜%ÁDŠYói’|TËÍÛ ¿â¬D91Ðe‚ØýÐÙáòœvûF69<åÁÁ–M²ÂŒ;ÅpÔp9‹sœÊå`êÌ*' [Z@ÄP€* /OVóæ“`ÿf|†öX  8âTïµ~²é'AˆûÇ{ú¡Ñó$5yzlasso-2.8.2/tests/data/idp2-la/PaxHeaders/certificate.pem0000644000000000000000000000013213766621500020220 xustar0030 mtime=1608196928.942896777 30 atime=1678098071.401500122 30 ctime=1678814321.337955177 lasso-2.8.2/tests/data/idp2-la/certificate.pem0000644000175000017500000000274113766621500023474 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN CERTIFICATE----- MIIEKzCCAxOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJGUjE0 MDIGA1UEAwwrRW50cm91dmVydCBMaWJlcnR5IEFsbGlhbmNlIHRlc3QgUm9vdCBD QSAjMjETMBEGA1UECgwKRW50cm91dmVydDAeFw0wNDA4MTMxMDQ0MjNaFw0yNDA4 MTQxMDQ0MjNaMDExDTALBgNVBAMTBGlkcDIxEzARBgNVBAoTCkVudHJvdXZlcnQx CzAJBgNVBAYTAkZSMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwhO8 87NKma8n79+BHHBL+KBJAQq04SqCdX4oQvFL4zjsoeffQA2z30eCxOcHbDRjJ0zZ h18CYciXB8pZLNEnJzEQRxHqNQXUDYFV9QOEit2bf/rhwa48CYPEQKdMy8KiQdaq 4AGPVvdyl97d09eTE9y6ouqD/t0UVbq1cYAXO36gQ249+at8h3m9G5opxX8oU0tE oCtCH89P8y+VHy8ijx8lcaOLBi6g4wv9zc0aa0VygHc89xCbnlAPEDEEPdxUMosD kXm6IqKzbCXYVPEDuw1ESD2zFo23xV4yZ3Pggkif8v3IDbpuzo2nf03zYzLcx77i HwHcxnNMxPqICE0S+wIDAQABo4IBJTCCASEwHQYDVR0OBBYEFI/TbvK66Nw01UJX 0DBUPCsM52BaMB8GA1UdIwQYMBaAFPIgVeWrkWP48RFO7BHb+wuvnhRyMAwGA1Ud EwEB/wQCMAAwCwYDVR0PBAQDAgeAMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEF BQcDCDARBglghkgBhvhCAQEEBAMCB4AwJgYDVR0RBB8wHYYbaHR0cDovL2xhc3Nv LmVudHJvdXZlcnQub3JnMCYGA1UdEgQfMB2GG2h0dHA6Ly9sYXNzby5lbnRyb3V2 ZXJ0Lm9yZzBCBglghkgBhvhCAQ0ENRYzRW50cm91dmVydCBMaWJlcnR5IEFsbGlh bmNlIElEUCAjMiB0ZXN0IGNlcnRpZmljYXRlMA0GCSqGSIb3DQEBBQUAA4IBAQBL ioPZDsHKJtHZL9Asva09DQGGzadsHGRSw8q9GkaYxuekj4ie/GU6r0B2sna9/yxe gjyIgZxRw+2a8mncGyOrsB3Cp20KafBc+42pNQNMAB3GR0djlorJS08tnm/trkNL Z9EY5rMYZW+HQk6zR8SvdI6OUqBIWhf9l0ImxlTw33aMx0QPwcqvhUVDsEj3qWtF wWyO97nR14A5U24wvKjAReTg6ivFeupywMsiFtfyf4MJTgRsLsRoVxhHkHtgCYXR BTZhMTR1GeX0DUZ0xQwH+m0EvcFJ/CgEXUJcwVXwbyPonJ7vH4Pt9Vd6B0ibE7bS B2Nzs2lZBTvsRhksPapB -----END CERTIFICATE----- lasso-2.8.2/tests/data/idp2-la/PaxHeaders/private-key-raw.pem0000644000000000000000000000013213766621500020765 xustar0030 mtime=1608196928.942896777 30 atime=1678098071.401500122 30 ctime=1678814321.337955177 lasso-2.8.2/tests/data/idp2-la/private-key-raw.pem0000644000175000017500000000331513766621500024237 0ustar00bdauvergnebdauvergne000000000000000: idp-jks.keystore 1: lasso 2: changeit -----BEGIN PRIVATE KEY----- MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDCE7zzs0qZryfv34EccEv4oEkB CrThKoJ1fihC8UvjOOyh599ADbPfR4LE5wdsNGMnTNmHXwJhyJcHylks0ScnMRBHEeo1BdQNgVX1 A4SK3Zt/+uHBrjwJg8RAp0zLwqJB1qrgAY9W93KX3t3T15MT3Lqi6oP+3RRVurVxgBc7fqBDbj35 q3yHeb0bminFfyhTS0SgK0Ifz0/zL5UfLyKPHyVxo4sGLqDjC/3NzRprRXKAdzz3EJueUA8QMQQ9 3FQyiwOReboiorNsJdhU8QO7DURIPbMWjbfFXjJnc+CCSJ/y/cgNum7Ojad/TfNjMtzHvuIfAdzG c0zE+ogITRL7AgMBAAECggEBAIQ2OhSy4XFM16Ib2rLq9XZMiy9AgfSapwEvjnH8O7xxfRLXCUlz jEPhTX6h/HaEQb/2JIKKAO9oXSsbeCCF42xZikNAOxMgA1On9kzRtqt7SIGpAb6V2aSJtVpuHmz5 DNxZR1MO/P072T8IvomgZDu1tRdjN8SaC05TwWOu5STLcMfeDkthWW1Lh/JemPiCZtVMcDW2bFaH f++wrPt+Mevd3tdp80OqxiWxefnM1/uVGJmLH+EdNSW9jGCjj0I35u2xSp0i1q+IK9UYUQw/tGNA HhHUtjCW3ZUFV1r7g2FCwTjN/OKGZje1x9N+hq2mbZjdfWPANujNhx3aXcrfLzECgYEA5Phr2V14 NepfS+OCbt5lcaFQDYicOxs7YV+OwzXiVPk6QTX4WFxyIQtRy0v9nAiHa7P+RGY8GiM9vTJbqxd4 BFTnNmKw5fyF7Hwp4S2xgVdfApWpWg5vfCMyIYokNuJw0sdlvdHgh36riNEkyG4IoCWfKAK8sV5E wGgB9QGc5C0CgYEA2PzTxlIYnp2ImL/2XKzke6X0n7mh2Jn46poXt1ypSMkrL69jQVsQ0CltbrTr Lb2HOFBYNdCezLeA/yiGWIgvKaghAd1ADQ0J2NrKYISazWhShD8jYGAPYYNOdMtzVmKgRUnfumnj R7Yb5fPK3ZIWLwNsckd+zcyjkXJxKYxDBMcCgYB4f+xyNmifJzsDuzXXlx8YD+cLWEuwJ4K2mg2N 2nvEcG0iCH8sMWq2zTg8nz9WsH5kRhOYd51FvCovuaLYhb9ZuDz+OC4UuzLX4/g+U0fJY+vSdmTr yhEN6Y/masboQ39QzjNTFHLvm9A2bqrG+HF9po7+BYK8bXoNMC9ne3PP+QKBgG/n3DQwjL/o0NSu U5kyFVfrm8BwVRbHOceMFuUa5bdDAIHEOzUuiPpCE00AAzYAw+b4ELYYVH2RufZd6QNpoKEkM3mp qGnSqpxrIeorGUcMIVpQ0abXg7cvp9u2PVJ05OE3Gyohh/So57RtSdeBiu1OH7TESJJMkqLlWZUq 4DlrAoGBAMvDkYikGi3mVQWRrGfnIiTgcY2rp5rj1RotTWU3ETmLfsoWrVYpY9kYzM7JeR1GimS1 YYIp+khoEyG29vuJx5XLxdivsA5qVeArbR3AznCnESOZVPQ7aqcn18KuVcUhtthCkSOQglVXKPk8 BnBo7gRdr1kXazhtPVutkuM+f5UY -----END PRIVATE KEY----- lasso-2.8.2/tests/data/PaxHeaders/idp3-la0000644000000000000000000000013213766621500015157 xustar0030 mtime=1608196928.942896777 30 atime=1678814326.421984131 30 ctime=1678814321.345955222 lasso-2.8.2/tests/data/idp3-la/0000755000175000017500000000000013766621500020504 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tests/data/idp3-la/PaxHeaders/metadata.xml0000644000000000000000000000013213766621500017536 xustar0030 mtime=1608196928.942896777 30 atime=1678098071.413500216 30 ctime=1678814321.345955222 lasso-2.8.2/tests/data/idp3-la/metadata.xml0000644000175000017500000000153313766621500023010 0ustar00bdauvergnebdauvergne00000000000000 https://idp3:2002/singleSignOn http://projectliberty.org/profiles/sso-get https://idp3:2002/singleLogout http://projectliberty.org/profiles/slo-idp-soap https://idp3:2002/registerNameIdentifier http://projectliberty.org/profiles/rni-sp-http https://idp3:2002/soapEndpoint lasso-2.8.2/tests/data/idp3-la/PaxHeaders/public-key.pem0000644000000000000000000000013213766621500020003 xustar0030 mtime=1608196928.942896777 30 atime=1678098071.413500216 30 ctime=1678814321.345955222 lasso-2.8.2/tests/data/idp3-la/public-key.pem0000644000175000017500000000070313766621500023253 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnH5cQ9RpkeFqkq3Mw3c+ 89J9Fg263315njP9JCmNVP3I0LkBRWVB7uA75hTMJ+WwdnbtfO8Hav8l8+x+hp1N ZY9q8WxoS+3qkf6XFrvRvHnt2GZS9G95QVp3tca7g0VJ+br2DHDMclTczz/+pG5C h2aRVZCSeCDSUcf7NTnyy6kf7ZEGYPrzi+AS434ya4Sd1o6CDyMdm5Ni0FEM+B8b FLQMlo7FZv1C+tOg4ZKm6YIh8TJz8zMWb5n4VtJSIh+OAHJqjdVIBdlF8B7Yk5cR o16zm031c9UUrXtVbNfURSEvjNrP/b4fr52uj42mUOUYl7ApLmcxZ7yBXkhNS32C RQIDAQAB -----END PUBLIC KEY----- lasso-2.8.2/tests/data/idp3-la/PaxHeaders/jks.keystore0000644000000000000000000000013213766621500017612 xustar0030 mtime=1608196928.942896777 30 atime=1678098071.413500216 30 ctime=1678814321.345955222 lasso-2.8.2/tests/data/idp3-la/jks.keystore0000644000175000017500000001130313766621500023060 0ustar00bdauvergnebdauvergne00000000000000þíþílassoþWÁÕò0‚ý0 +*‚é—  2yßr„òÚ%õülçäh‘K!ìi‚=}Ë ¥ Y¨¤Ó#{—ÎÒ-·~qÀV;?1…"(Í—ßDýÐ7!’:\.¡ða¢ö(8âsKZÁû÷˜¸Ö4l6*Üô-ªªÖ]ƒi‹-dݾ9 …WŠ\3‰råA"âMA2ûÄ)hîYmXÌ«ƒbl÷ªÌô-¼­2¼ãÀ½š-¦ ùÐKõ±—æ ÃD¬Ñû½J9y$¤X|=U»CŒ ’ùÛ AoœŠß4¬Ýúâ; èöè‹jÁÈ6’ZuæR`"<ÛøÔÍ‘ øƒÇÐGÖ»9‰Ý^‡ iÄO~™Ò{šáö2´¾‘3 ÿE>`ôر4x<À®˜Ÿú] µY7[_ÏÊK?i²Ïxë‚ÛËWÝCXZ£«]¿§üÌd>Púì5HO@Åxe+;Ý‚lć õB£å޴̬$_Á/[5¦//Íûšý|ázUÎN KÉ|w?U ç›Pc"ñsÀdJÚ¤2ìR³lþ,÷ˆ@X²¦ööýsx™¡/HN¶>ÆÊc«~^žD¡vœö„h6twûÆï–Ùf±•ÓiørÄåZ@„b•@$sÚS’‰1cëð‹ÁÜ6r´ xÌžv¦Õ˜ˆˆgžù×íþ Cq¥€º0ô¢ }(M³Rpž–2=«8%ãvDª)SçþÁÿć“vÆó{@hNØÇß%˜ Ì"€˜Aoéó|o¿ðÄÙ=ñz|áY(l<©dÄ>:£K`ý(ðí~RçC eS`y¿Îï:÷®beñ?ÌD×"©”X43õ‘ó´5Z0(S9Äãt€S”ô„hÌ<ù”Ûëã‘Y{]bC®‚ë+ö¸”gèq×û “ôØAÆ#7ÖÌÖf³xaÿ¿ú(oØ)'sŽ ËR=¾qÙLºÕýÖºï=AGŒYÂŒ,Þ–}aÛ{jJá±’™ÿ>?->œ›rR¹¶ôé7WÈ ìü¹„¹ó¹q­¦xAËsC6ó[»zðòmŠ¥¶z ¨íu^ŽÀbêòC1Y8HéWE[P—fk!î™á‰p æœ.×X][– HŽòŨ¬Îº½ë%¤ËR3t°™å§üÒC‹Òt”gɃ”b!_¤ IPXLŽª?dÈô7&ÓÆG³'‰ K8P{†,q_!¹Wô£_oVI¬Ï@‰f:kì¦MØ üméCÅÄ“+Êd;ã*SõNcÝj•ÔCš]>tù@—²BsD²Â좎՜CZIBlöœ´ŽÜh&ÀʦS'"> ¾vΧHÐÈÂ!ÃJQwX.509/0‚+0‚ 0  *†H†÷ 0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #310U Entrouvert0 040813104424Z 240814104424Z011 0 Uidp310U  Entrouvert1 0 UFR0‚"0  *†H†÷ ‚0‚ ‚œ~\CÔi‘áj’­ÌÃw>óÒ} ºß}yž3ý$)TýÈйEeAîà;æÌ'å°vví|ïjÿ%óì~†MejñlhKíê‘þ—»Ñ¼yíØfRôoyAZwµÆ»ƒEIùºö pÌrTÜÏ?þ¤nB‡f‘U’x ÒQÇû59òË©í‘`úó‹àã~2k„ÖŽ‚#›“bÐQ ø´ –ŽÅfýBúÓ á’¦é‚!ñ2só3o™øVÒR"ŽrjÕHÙEðØ“—£^³›MõsÕ­{Ul×ÔE!/ŒÚÏý¾¯®¦På—°).g1g¼^HMK}‚E£‚%0‚!0U¶Qcý®0È¿×U‡`U’²K•Ô0U#0€“_¥íù»•â.«­Ÿ»ê*A‘ 0 Uÿ00 U€0U%0++0 `†H†øB€0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0B `†H†øB 53Entrouvert Liberty Alliance IDP #3 test certificate0  *†H†÷ ‚$ 1–ƒ½fÍ»˜—ï ¬ûj脨Mñ8“Ñg+IäA^ñÓ1áÓBõ“Ä šT¬yð½Ôlc>Ÿ¹÷j¬\†ù\y9ØÒŠû÷Ó1v•\OÖÉ):b¾ ‘Îó[ íŠEÈÎÊÃâ&N7:á$ã“2T‹üñ_è:QÀ¼î†ãÒQñ]kYʤ=íØ‹¢k»¬‹Ÿp m™=eAgqÎRq—Töäyµ ðó)}ÈÛoÒ¬[%ÛÆÒ‚ïh¦@¬}‚ZYú( bø¿¸W×&…Øã[8k)‘OìÉ\oUË"Ó¤jf[p–ÞÙ&ÃX.509t0‚p0‚X 0  *†H†÷ 0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #310U Entrouvert0 040813103640Z 290404103640Z0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #310U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚¢”ZàOÕ½WuG“eI·¬’3´¬${š )Û4ó·ÏΙíp’þôhCÍ—TbiÛ”Ã.öÝWå¬;fèÝ#«%¶æ?jÒåÄÛ%iYA‰›Ê 5ñŒ™²ç%¹|ŸKF_wj_òŸßsG„º…åx8_¿–ù .÷kŒ´©ÐšÈ‚' ›û¶éEðÁ‹kpHv—%&‰mfúƒÒ41?ØÛpø`[ÑçMdo Áóûá 8]Gwì¨a3‰Ê°.ŽhbláLÍ‚Œw^ ÷òûÚ¹ÿÕ9›ûŠdöè#®U²ºœ;PT²3<0··ŽÞP\RíóüÍ£‚C0‚?0U“_¥íù»•â.«­Ÿ»ê*A‘ 0U#0€“_¥íù»•â.«­Ÿ»ê*A‘ 0Uÿ0ÿ0 U0*U%#0!+ +‚7  `†H†øB0 `†H†øB0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0P `†H†øB CAEntr'ouvert Liberty Alliance test Root Certification Authority #30  *†H†÷ ‚&üfŸ®pÌW±,(j¤œ ÓÌ‚2\}Ý«à¨#^Èâ)´ù±Öí,Ú¥°# ¥í‡Á/ûÑÔL+i¨&üeTµ€Þ±F \›¡N1¹ó‡7‚| ñðŒ‰³‡¶Hþ{ØJÓ–-§W4¹†j•V~cr:HBrÊÀ¬ÿ¥þh*H¤9fìñ*£¤í¨Wº¦Ž ”˜¹y…ëÍ’"‰>pus­Öa±h5~i›‹L›ÁMØr<»çFÜ'` ì·×¼¥Hå åe8Œ‡(ñà§© øŒ)·ÿc(貎®X!†¾&‡±bÕþÓ1ðié¶îùmx5¿}Óó÷CÉ™ÓAentr'ouvert liberty alliance test root certification authority #3þW¿ë‹X.509t0‚p0‚X 0  *†H†÷ 0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #310U Entrouvert0 040813103640Z 290404103640Z0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #310U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚¢”ZàOÕ½WuG“eI·¬’3´¬${š )Û4ó·ÏΙíp’þôhCÍ—TbiÛ”Ã.öÝWå¬;fèÝ#«%¶æ?jÒåÄÛ%iYA‰›Ê 5ñŒ™²ç%¹|ŸKF_wj_òŸßsG„º…åx8_¿–ù .÷kŒ´©ÐšÈ‚' ›û¶éEðÁ‹kpHv—%&‰mfúƒÒ41?ØÛpø`[ÑçMdo Áóûá 8]Gwì¨a3‰Ê°.ŽhbláLÍ‚Œw^ ÷òûÚ¹ÿÕ9›ûŠdöè#®U²ºœ;PT²3<0··ŽÞP\RíóüÍ£‚C0‚?0U“_¥íù»•â.«­Ÿ»ê*A‘ 0U#0€“_¥íù»•â.«­Ÿ»ê*A‘ 0Uÿ0ÿ0 U0*U%#0!+ +‚7  `†H†øB0 `†H†øB0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0P `†H†øB CAEntr'ouvert Liberty Alliance test Root Certification Authority #30  *†H†÷ ‚&üfŸ®pÌW±,(j¤œ ÓÌ‚2\}Ý«à¨#^Èâ)´ù±Öí,Ú¥°# ¥í‡Á/ûÑÔL+i¨&üeTµ€Þ±F \›¡N1¹ó‡7‚| ñðŒ‰³‡¶Hþ{ØJÓ–-§W4¹†j•V~cr:HBrÊÀ¬ÿ¥þh*H¤9fìñ*£¤í¨Wº¦Ž ”˜¹y…ëÍ’"‰>pus­Öa±h5~i›‹L›ÁMØr<»çFÜ'` ì·×¼¥Hå åe8Œ‡(ñà§© øŒ)·ÿc(貎®X!†¾&‡±bÕþÓ1ðié¶îùmx5¿}Óó÷CəӇUtå½rã¼™d?ýO%lasso-2.8.2/tests/data/idp3-la/PaxHeaders/certificate.pem0000644000000000000000000000013213766621500020221 xustar0030 mtime=1608196928.942896777 30 atime=1678098071.409500184 30 ctime=1678814321.345955222 lasso-2.8.2/tests/data/idp3-la/certificate.pem0000644000175000017500000000274113766621500023475 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN CERTIFICATE----- MIIEKzCCAxOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJGUjE0 MDIGA1UEAwwrRW50cm91dmVydCBMaWJlcnR5IEFsbGlhbmNlIHRlc3QgUm9vdCBD QSAjMzETMBEGA1UECgwKRW50cm91dmVydDAeFw0wNDA4MTMxMDQ0MjRaFw0yNDA4 MTQxMDQ0MjRaMDExDTALBgNVBAMTBGlkcDMxEzARBgNVBAoTCkVudHJvdXZlcnQx CzAJBgNVBAYTAkZSMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnH5c Q9RpkeFqkq3Mw3c+89J9Fg263315njP9JCmNVP3I0LkBRWVB7uA75hTMJ+Wwdnbt fO8Hav8l8+x+hp1NZY9q8WxoS+3qkf6XFrvRvHnt2GZS9G95QVp3tca7g0VJ+br2 DHDMclTczz/+pG5Ch2aRVZCSeCDSUcf7NTnyy6kf7ZEGYPrzi+AS434ya4Sd1o6C DyMdm5Ni0FEM+B8bFLQMlo7FZv1C+tOg4ZKm6YIh8TJz8zMWb5n4VtJSIh+OAHJq jdVIBdlF8B7Yk5cRo16zm031c9UUrXtVbNfURSEvjNrP/b4fr52uj42mUOUYl7Ap LmcxZ7yBXkhNS32CRQIDAQABo4IBJTCCASEwHQYDVR0OBBYEFLZRGGP9Ba4wyL/X VYdgVZKyS5XUMB8GA1UdIwQYMBaAFJNfpe35u5XiGi6Qq62fu+oqQZELMAwGA1Ud EwEB/wQCMAAwCwYDVR0PBAQDAgeAMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEF BQcDCDARBglghkgBhvhCAQEEBAMCB4AwJgYDVR0RBB8wHYYbaHR0cDovL2xhc3Nv LmVudHJvdXZlcnQub3JnMCYGA1UdEgQfMB2GG2h0dHA6Ly9sYXNzby5lbnRyb3V2 ZXJ0Lm9yZzBCBglghkgBhvhCAQ0ENRYzRW50cm91dmVydCBMaWJlcnR5IEFsbGlh bmNlIElEUCAjMyB0ZXN0IGNlcnRpZmljYXRlMA0GCSqGSIb3DQEBBQUAA4IBAQAk CzEQloO9Zs27mH+X7wms+2rohKhN8ZA4k9FnK0mB5EFe8dMx4dNC9ZPECZpUrHnw fxu91GxjFj6fuRv3EGqsXIb5XHk5ENgE0or79wTTMXaVXE/WCMkZKTpivqAPkc4S 81sED6DtikXIzsrD4iZOHTc6FOEk45MyBlSL/PFf6DoYFVHAAgO87obj0lHxXWsd WcqkPRII7diLogZru6yLn3CNDW2ZPWVBZ3HOUnGXj1T25Hm1DPDzKX0XyNtv0qxb JdvG0oLvaKZAHAisAX2CWln6KAli+L+4V9cmhdiQ41saOGspkQEaT+yQyRFcb1XL ItOkamYVWwVwlt7ZJn/D -----END CERTIFICATE----- lasso-2.8.2/tests/data/idp3-la/PaxHeaders/private-key-raw.pem0000644000000000000000000000013213766621500020766 xustar0030 mtime=1608196928.942896777 30 atime=1678098071.413500216 30 ctime=1678814321.345955222 lasso-2.8.2/tests/data/idp3-la/private-key-raw.pem0000644000175000017500000000331513766621500024240 0ustar00bdauvergnebdauvergne000000000000000: idp-jks.keystore 1: lasso 2: changeit -----BEGIN PRIVATE KEY----- MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCcflxD1GmR4WqSrczDdz7z0n0W DbrffXmeM/0kKY1U/cjQuQFFZUHu4DvmFMwn5bB2du187wdq/yXz7H6GnU1lj2rxbGhL7eqR/pcW u9G8ee3YZlL0b3lBWne1xruDRUn5uvYMcMxyVNzPP/6kbkKHZpFVkJJ4INJRx/s1OfLLqR/tkQZg +vOL4BLjfjJrhJ3WjoIPIx2bk2LQUQz4HxsUtAyWjsVm/UL606DhkqbpgiHxMnPzMxZvmfhW0lIi H44AcmqN1UgF2UXwHtiTlxGjXrObTfVz1RSte1Vs19RFIS+M2s/9vh+vna6PjaZQ5RiXsCkuZzFn vIFeSE1LfYJFAgMBAAECggEAWmoHFIlclRQPZr9TVntGu8gYzO0R0p3D7ktLLeFz7m7R3wWEXnuq JEEZWk0ZxtNFqKv9efj/6CmR2+P/Ffc8CDlcKC/h8jx7Ee5tjIznGGW5rRUxSFg/Tirejv9KxwT5 QHdsQLPK6yNsj7EBhi7N8TypKy5j8VPFL8rCsHXSeSdOJuScrSUhYjhzlR2/fOcDXFjRBGu7jq5q k6UIqCJnemEqgf0nkg550rK5bZD2bO9bwK7TtP/s958FqH17sjFvRZYceDC88RepWuUgTgdPxkiI KMvM14lPGuISxqQfT7uf0cLHpFHqMa/tGU0b8MDkPKm+LyKolH3W9Brm+ksg4QKBgQDKXD9w796h Hhfhg6S/iME6AVb4mZgtBnJAIktacRZk9PdP9BqZ1+vHjGNHeJ4utxhiSFzmwTYX9rvuqV6PoVXX kenk+gRqeLeA8HJylaT2XUTkDAIHc9qPQyyqfFTcZPra9o/ylF0EToGL3GgjjlmB5QhmYNY4p0UV bxzHHegLiwKBgQDF+bDBS6tXaMsg5Nf1Dvap9nP4rvPRMesJ5LVLBYahs0kr0Z7/X8EUp9mTxPFp 4LNbtDq4mjEfMtme9u/dOZKx5RzRa7ODznCBbNV74Fys5VWyc4XEHO2oRh0/MNR+QkzYJcVrZkkn 50nnCDZnrRf322XBAxun8xqVMMQ/qnWjbwKBgQCzG07zkPuFs3MDoVbySAJuar0lsBymzWvWJAR5 +loN5Vv4ImBhBmGj7zf4DGRFiL1GUDIZ860DLNlN9g7CJdQqxvU0O64o5svUjf1eOeEWRZsyFQa+ veYWoygnhYA+ygnWQCFMXdCufSXgOqbZwaard6Ilq1QwNKzKudvIyUmW3QKBgCabJmjLRMJq4RGt Dp/vJxLFyJ+6HjmxLlBjlSboEPT/bUlqO0M5fQF2KeuzABDRjKhZYQoWp3WaCO4C4YuWapDeSNxd 0EfnvfC/NHJPskLVBf0iofc4XO/vnExyTT3B2BJeaz0iWSm65KJ064cULhRbaGBXJtF9irWFKP/x UbdpAoGAF0TxF8d41o4g/5Wlbir0DK5wmEeGIuj6DCDVNiP//yUuQigRsLXLX3ctE6JkgHbLKQW1 ZX0Wn3v7PnAxfkGXWHxLzWotnQ/142CoZeatNZpwRoiEtK7I9477EvXxz8lRWdXrcCGzqRpvWhoM DUZIeetLMuekFsGtCKw5oeKO814= -----END PRIVATE KEY----- lasso-2.8.2/tests/data/PaxHeaders/sp8-1024-la0000644000000000000000000000013213766621500015416 xustar0030 mtime=1608196928.958896909 30 atime=1678814326.421984131 30 ctime=1678814321.513956179 lasso-2.8.2/tests/data/sp8-1024-la/0000755000175000017500000000000013766621500020743 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tests/data/sp8-1024-la/PaxHeaders/metadata.xml0000644000000000000000000000013113766621500017774 xustar0030 mtime=1608196928.958896909 29 atime=1678098071.56950144 30 ctime=1678814321.513956179 lasso-2.8.2/tests/data/sp8-1024-la/metadata.xml0000644000175000017500000000550313766621500023250 0ustar00bdauvergnebdauvergne00000000000000 https://sp1:2006/assertionConsumer https://sp1:2006/singleLogout https://sp1:2006/singleLogoutReturn http://projectliberty.org/profiles/slo-idp-soap http://projectliberty.org/profiles/slo-idp-http http://projectliberty.org/profiles/slo-sp-soap http://projectliberty.org/profiles/slo-sp-http https://sp1:2006/federationTermination https://sp1:2006/federationTerminationReturn http://projectliberty.org/profiles/fedterm-idp-soap http://projectliberty.org/profiles/fedterm-idp-http http://projectliberty.org/profiles/fedterm-sp-soap http://projectliberty.org/profiles/fedterm-sp-http https://sp1:2006/registerNameIdentifier https://sp1:2006/registerNameIdentifierReturn http://projectliberty.org/profiles/rni-idp-soap http://projectliberty.org/profiles/rni-idp-http http://projectliberty.org/profiles/rni-sp-soap http://projectliberty.org/profiles/rni-sp-http http://projectliberty.org/profiles/nim-sp-http https://sp1:2006/soapEndpoint true Name of the organization lasso-2.8.2/tests/data/sp8-1024-la/PaxHeaders/public-key.pem0000644000000000000000000000013113766621500020241 xustar0030 mtime=1608196928.958896909 29 atime=1678098071.56950144 30 ctime=1678814321.513956179 lasso-2.8.2/tests/data/sp8-1024-la/public-key.pem0000644000175000017500000000042013766621500023506 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC+hN7M7ug6LL5OaH8Mi9aiOR5n khAH5zH/p+pIL0gTXJJoswfHh8S6aQbtbvL7tWirAzhJ+TCgFVnHvhmTFm1o/Uky juFQDCZOW+xESNiK6L0rM+fblzuZTER3ONSETL7Kc7KZd6miqm8i7zRuBKu7TDQk 3eEgYkdWG+1Fod6E4wIDAQAB -----END PUBLIC KEY----- lasso-2.8.2/tests/data/sp8-1024-la/PaxHeaders/private-key-raw.pem0000644000000000000000000000013113766621500021224 xustar0030 mtime=1608196928.958896909 29 atime=1678098071.56950144 30 ctime=1678814321.513956179 lasso-2.8.2/tests/data/sp8-1024-la/private-key-raw.pem0000644000175000017500000000156713766621500024506 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN RSA PRIVATE KEY----- MIICWwIBAAKBgQC+hN7M7ug6LL5OaH8Mi9aiOR5nkhAH5zH/p+pIL0gTXJJoswfH h8S6aQbtbvL7tWirAzhJ+TCgFVnHvhmTFm1o/UkyjuFQDCZOW+xESNiK6L0rM+fb lzuZTER3ONSETL7Kc7KZd6miqm8i7zRuBKu7TDQk3eEgYkdWG+1Fod6E4wIDAQAB AoGAPaoL4xDAoXOx9PbliE4Knl8WdDdWcPhnunPC5LJJBdtEmBa6Qd6z0hIEZ/0t MEM7KX7VTTwWfPnsITZqWK09o9rANXluaSKK1qU5JbyoT06ci+vITtOhfnwNQsNa sT7cZuIP4ispl5hnv3nLPGefj7LQCqiZmRFgjfYhdSSsAwECQQDeReBxL+RkxaZQ FuBFtg8bnUixecyGipKFcr2KTCXw6kvITOqI085MAOqiwzGkTC9iZMJViGzCB3jE H/oXO00DAkEA222Fp0blV600nvoXhgfWItBMOhBHNZHEbcF4makXbLTOPpnp40CU YYct5qWWU2NFmM77HulonqMHTzdQla2yoQJAVeC3o+O2Ib0/0cfU5Po/ghLV6EQ/ 4medztOTKeDb8+YCW6RkJXN4TGM6RKKYBnus/x4g+30XUCwk29ni/aDa0wJACpY8 LpfzFMnckhcK74KNSFy4cMy8Qs9npMwC35cS9EG8+bQ/XqGNBy+YfVpb6GYPw5Go +BLW42CGR8Ipdy9MQQJAFdnh0fUfVEQ8O28hbtmCCTSWi9JhdwM1d6frmg9pVrfd clmyHAC4aDDSA+5itLRSQjFW9GxtfvSpotLLxnYT8g== -----END RSA PRIVATE KEY----- lasso-2.8.2/tests/data/PaxHeaders/response-10000644000000000000000000000013213766621500015722 xustar0030 mtime=1608196928.954896876 30 atime=1678098071.497500875 30 ctime=1678814321.445955791 lasso-2.8.2/tests/data/response-10000644000175000017500000001241513766621500021175 0ustar00bdauvergnebdauvergne00000000000000gefssstggefssstg AuvPOsEPfXxMD4Je7W3W9Qk34/g= qO+/JLyIspZUvOCtp0tsf+8NTL9mSFZyhuzWnflQnG8MaGJ6RUwXtMeupfwsjmfJPJ7lMxV45abT TN1UWASzfhPWH+rWbi3lqzut3vPTxZyj8i+nGDdkIMpxLpf9WXT+LTLgiQZsK9IU27sJuM7CuyEN 9Kyr2076DF6pz/w0/20= MIIE1DCCA7ygAwIBAgIRALvyUuiiVghKTPVWuO9rkJMwDQYJKoZIhvcNAQEFBQAwazELMAkGA1UE BhMCVVMxLTArBgNVBAoTJFRydXN0ZWQgU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTEtMCsG A1UEAxMkVHJ1c3RlZCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MB4XDTA4MTEwNjAwMDAw MFoXDTEwMTEwNjIzNTk1OVowgdUxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDVDESMBAGA1UEBxMJ RmFpcmZpZWxkMSEwHwYDVQQKExhHZW5lcmFsIEVsZWN0cmljIENvbXBhbnkxGDAWBgNVBAsTD0dF IEdJUyBDb3JwdDUwODEtMCsGA1UECxMkUHJvdmlkZWQgYnkgR2VuZXJhbCBFbGVjdHJpYyBDb21w YW55MRcwFQYDVQQLEw5FbnRlcnByaXNlIFNTTDEgMB4GA1UEAxMXZnNzLnN0YWdlLmdlY29tcGFu eS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM7CP9FlNdLPYof1BtyJ128uYeFHWc0P 8eyXZe6AHO2nmL2ZqXpzpDt2xeLGqu+7jakE5Ijr9ePLgyQ+2Up7gUlMVmrklU/i5JU4V0HYFkdD FQQHzcAHI0Y/UStf4iZ1SEYVqPHJECyrXSn8a9N4UoZbvqCmD4ycaY+bCvYgeclvAgMBAAGjggGK MIIBhjAfBgNVHSMEGDAWgBQxlflM+yx445/iHjtrODIv/ZeZ5jAdBgNVHQ4EFgQUoFBIe8x/db40 xTRYEEVO2z7gPO4wDgYDVR0PAQH/BAQDAgWgMAwGA1UdEwEB/wQCMAAwHQYDVR0lBBYwFAYIKwYB BQUHAwEGCCsGAQUFBwMCMBEGCWCGSAGG+EIBAQQEAwIGwDBLBgNVHSAERDBCMEAGCysGAQQBsjEB AgIIMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY3NjdHJ1c3RlZHNlY3VyZS5jb20vY3BzMIGm BgNVHR8EgZ4wgZswS6BJoEeGRWh0dHA6Ly9jcmwuY3NjdHJ1c3RlZHNlY3VyZS5jb20vVHJ1c3Rl ZFNlY3VyZUNlcnRpZmljYXRlQXV0aG9yaXR5LmNybDBMoEqgSIZGaHR0cDovL2NybDIuY3NjdHJ1 c3RlZHNlY3VyZS5jb20vVHJ1c3RlZFNlY3VyZUNlcnRpZmljYXRlQXV0aG9yaXR5LmNybDANBgkq hkiG9w0BAQUFAAOCAQEAQBsHyu5MeDUwRU87H6olcF7M6WVa2y0YvqT858bI1fhPgg608agz2E/h 6lKdKBnsw9T1IzdEAd61hSGggb+nN86gXTbAGtdYCC0f3J+5l19VqzMeHTyvfI2uMlE+2GXYqGjV Wan5r5CBuPYExJou4boigfhSVTPkjkNBSbVd5mby61XuULXQraozGwJouWG2m0292fQ8tiFcZZ6S Pt+GiSi4+PatACeb0wXK/lTeus3dWJ5m1pRYt6tGp5Q+h/uTA2094uKxEpjZ+TYFBadLxNvNcRQb /06AaxVLZFuFpJwfFzyQYE1CyRNgjl6prucUWQ1e/OMn15BGSnY4Ft3c8w== zsI/0WU10s9ih/UG3InXby5h4UdZzQ/x7Jdl7oAc7aeYvZmpenOkO3bF4saq77uNqQTkiOv148uD JD7ZSnuBSUxWauSVT+LklThXQdgWR0MVBAfNwAcjRj9RK1/iJnVIRhWo8ckQLKtdKfxr03hShlu+ oKYPjJxpj5sK9iB5yW8= AQAB 999999500Webrooturn:oasis:names:tc:SAML:2.0:ac:classes:unspecifiedUser999999500Test999999500@apctest.ge.com lasso-2.8.2/tests/data/PaxHeaders/lecp4-ssl0000644000000000000000000000013113766621500015533 xustar0029 mtime=1608196928.94689681 30 atime=1678814326.421984131 30 ctime=1678814321.429955701 lasso-2.8.2/tests/data/lecp4-ssl/0000755000175000017500000000000013766621500021061 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tests/data/lecp4-ssl/PaxHeaders/all.p120000644000000000000000000000013113766621500016704 xustar0029 mtime=1608196928.94689681 30 atime=1678098071.485500781 30 ctime=1678814321.429955701 lasso-2.8.2/tests/data/lecp4-ssl/all.p120000644000175000017500000001046013766621500022156 0ustar00bdauvergnebdauvergne000000000000000‚,0‚ò *†H†÷  ‚ã‚ß0‚Û0‚ ÷ *†H†÷  ‚ è0‚ ä0‚ Ý *†H†÷ 0 *†H†÷  0Ožyoø.K†€‚ °Íáv ?î“q+Ž-ÑÕ;¸:½4P¤¤8IÆsKE„ã\1º ûë0X.ZÄT'Ü…ˆ9ü¶ö}PÖàœjž|¦ÎDvá¶N„ÕCàagÍX+±<=J ,ðÎ4oƒ•£¯è;ýØôV4J.œŒ}¬½ÛÕ¸ûºÜá´ê¢@ÚЫ·ÔûiÀQ wM“~‰$Ôú'1Í ONw.7â$>º×¾n=eRe;"12[ïR÷BîÎá3ðóïaq«:ð´² žÊ¤Ü®§ýüß "hn ÛÛb§©»ððàs2ð.zjûRV¡äåä@È|Tó„có)`aZhúœ'Ù¸¹²eƒvå!pÈxïEWypKú##ùBãÑ}kƒÝA÷=&(^ ]yjT}TCW;u+7Th3øâøã_tàðn£ÊÖQ_°ös¡3Èí¼ZÓ®÷#P)Ââå?ˆQOƒ ×Uœýey¼óÔ^­/€dƈ¤.“Æ.¯ÎöѸ6ˆàLuáÿ¨~'zÊ¢’õô[nüËÝfâ½ò³…òØKóÏð¹2™ý ÀŠlÌ0ÈÀ,„÷€J¾üIJTÿÒMø€2x ¿S\zÂöÅýúâ3éú_µD£Þ÷ž÷zeÚ†#‹ºø‰=™ÎºyÞ,c×V2 -UtÎ Ïž}´¡¯ˆQ­ëÌv89¶KÏP4:êé;DNáR§µ•Ë÷´kTå/£'=Œ4etç•ÆØU3i{—VË ð~®rbÃÒÇ(v+:ùÊSþ™ïkÅC¦zÑåç‘×.+e°h¯?k§Øw¦3³ìc__˜ ¹¬û_9ìUëÿAš€*ïdÓ”F¾¾½Ç‡rù*’µ/Tx¯h¨%¨üG›@¾ôè>ÇòL Œ£kÆñÒ6þÒ³ÂöÛl*B™` ¾Éè38Ý}e§ÕžeÉÎ" ŽA¢$ $¹µ?·µ+g*‚•¯{bì¹P(°ÿWÃ7_èC&Œûº~z\K=ïWf„æd¦2KÿACåÜ#»£XbòhžÀHE5Û­Ô»ãN÷`®=63¡xâç ÃmÖ€ éŸ7Hhd Gâ@»Bœ¡«¢Ï1T{‡Ÿ¨I¾Ø £èT”M¢øO\•Q°®–ˆ gdçæ ,LpœüÞºÈ!å gdG€4ð+ÅcÞš‹îÛ¶½d 4Çðmò‚Z›HaMLÌ>°î±ðZ‡pôH³Åkòoq¢0ðqÙ‡1|æÐ´ þÀjÚPi±¾KÊ¿Ÿ)ÄÙ^±˜ äÅu¤Í¼â)u'][ø™™-xŒ)[ÅòËꟚÅû•¹ðÅ^‚Nn£Ð©à”t~°{<ç/!Ú¡îOÌíNïËüÕCeÔ™R=s¢œö†2ð\®ÁÊ>‘#…œª":áœø{w@€Î>ò=tc¢›#ºó&¢üN?U¢,é4逗‰|³?r¶dš5‚}ŽAcÅ+·CŠ´Ew%§^BVQ¤›‚ å•8ð1;õCí¯·5íÙÕ±øiN‘ío^îÇwgë4M~/˜ìG™iáVÃG)¹a„ížÁú«^×nd.„ˆŸÅiV)é±·ÍyßÒá €Ç3©*þRLh,ü§É„ ÷Q/à·¹æåȶâÙ}´… _ç㣶·´Û{Áêï! þ‹ÈŠèÒÉuì—@mçzüŽAÕ°V8î9Rù~…ß,øº9ÌŒ\ïÝùŽ5½fm1„dqµ¥ö¡[½K_¾ãg°ËÂKÞHŽ(îBrFÐ7õF*¯+õƒN”Wðv*£¾™C"Ÿ´ïäÍ êIòÿY2ñEý&^î:é~²'~Ë–Öå9¸‡|r®}âó½@åh'»³¡M›‹íæFÚdE Éì¯?»2¬ Íívh²_²þHˆ¤sxÊԆèf:µÿ#QnÒÌ{Ò'XÉèÉ ñqîq‡©PÖ®L¡’bÍ–&hxÝËÀ ôØ‚·Ó´®À_‰z^ªêAí‚t'„;I¨¤èS¤„7úF7<‘.Ý a«?Ž~šÔ|¾¾'·Åî)D¯:‚å0’—æäÁ^³jðô—iÅÄ…ú‘ïÙ_Ÿ&Œ$¾“ãL¬j»=Ô'ÕlƒMd–ßÒÿ0ʃì3 ;®yWà”x5õõ÷ºNR¯ÚÃÆ¥7W!]i=µQ²BÌ~]üâho]0$ÐÜQ%¶UÐL…›-êcÖä)\U·Ìÿ r1šÄ¹ßQs TbæÐÓè]òo$-Äõ¥øÏpÀ7U“pGï&fù³ÙíîI_±—®òüÇ  (W4¨ »(e\‡: ÞI‰ÈB´\J7Lw:_W\õŸd§à=;-ž”Lýˆ©÷¸«;KD"ŒHsKuZ7Š,ݨà•ÍٸǪµÿµñû+ÞÄqñô›yÔ7Ûžê!’ïêÉ_P] Îf0î¬+ÚhY9ÛÆq@`Sˆ|wŠÍ΢ lì\O© n+Ý ô1:ŠŠû”*“öÓGIzBlê0Øá å„ —"D!,ã,eF/ä·ÇÄÔæy¼ž¬¡Up/4r±¿Þq0ƒ_äfõÈ«k>éÿŠò‰`är* ?1ãnH“|[‹êð óäñå bþó~OTÁÈ2áüò_°‘˜ãlÜ›¨Íd4ȉ’!¨c`ˆˆ½wUgô#èJ¬åFv&‹½·ÏÞ:¼ƒ>ž=®¯†77‡†Y;±»„[À(ðxni§z§Â<š1Y£ ©S3_K1?® yÇ'g‘®u”ËkåÇ&Ï{tÁRç"üÏ¿/ 8©Þ1ËÐøCˆ 9C y‚cdý&˜ aIFÜ_y+¶½&(+سXüËÇm8É(‰g¨,}Å?gÆ»:L™Ø?<˜Œ;>®©ýp@l0ÄòVœÊx‰Ü†’ gÁšaèG§ÒÐ`ˇ›ß*”XÕDS{b.›l¦=Yô õᯈt È›ôA>äE¦v­•ñäÀ£í„¹= _à éRa±(c]‚ˆ÷„Ñ!–©QI=]"qn¦ù•DÈ*NF9ÏuÃÌMU«Êoø¸/Eçëîµ,htÐK›®)Ã1›«T"j/8ä’ÖZٲɮK"iá!EÀ€pxÕÝ. ÇÚ›û³5.£–›+EÒ6Jœð<ù ͺ÷^aHi˜Wyzl;ºÜQ”TŸ×ÿÅh0¥ÛŠ"»zYXg=ðð X{&óÙ–Ñh¸ËV¢Âs/0™‹ýŽ/vؼýèÔ­þ¶fOíÀSz‡¼ÆõÏŠéÄ`f4¬áa=º“|¿«§»¤VÐâtæ9–îb[1e}Jé¨C÷k|àeDUø†ÁT%‡‡þöé:.äá}‘9$y5A)kÿQâ-dªáŸÞèYB¹È6šƒ".…§Ÿ£K¦qû†írÐx*ˆ0‚Ü *†H†÷  ‚Í‚É0‚Å0‚Á *†H†÷   ‚î0‚ê0 *†H†÷  0ùÿp<.›cq‚È_š‹¹H2×ú´3µ?žøäÀ(y{Xqö Ž£¾ª®‡Y”§ÎÞPUQÂKŽò"iº\zîB—Èkã¯Ä 7¼·HLõ}c6Ó%Äö}hvk©Qò¾H×Ú ËÏ}ÚÇÛÑ/ðç57$© ôøkÁdôdÊPl@p”æ™6Ú•nÖY*–» ËBv+ùÍ£U8J½ÈÔ»’ÒB·ñìuzi›í«sµ³hcµéâí ¢Ë96廉$ºÔNC&¬Êhò::HFõrÕèü‚ޱ Í1~ïl_¾e¸¾áR­ÏÏUÄ1à:ænD޶%Xxè ‡Þ™ƒÊÿ˽¦w›7Á«Z 8)Î9‘]±Šp¬rv=Ë8êñezõ$–©G"ÿ™¸û‡ÀÍ®Ògt#T™cKîËìG•]R9þ¶#´îW°‚üNR&*äºúÄgŠKAY £šýx€gE)Ƿͱ•ꛞø­ž½^~m¨´ÿµè5nk­?؃Í&³9Ý&+?ÏÐÈ…áˆ8^ÎÇÝ0ï¥BZ ç¹êˆå?|/Skñ–fr>¤²7º±h‚YUj™1Í”,ãäOËüK«`i4¯\-ðÕPßÑ&%éè’l´g·Ò‡NòB_àãæA`Z•cÌoNu»»µ ÙÖØÄs,Çt)Û'yˆ@0úÏöõñºÐšª³Ÿ@jÅé4²PSSî8F¤ªõ`7zìÃàFXtõÏ+4ÞöPù9¾æ×I)ZÎäoÛùõþ]Ò£ápµš'Tó5^Ÿ¿ð/sáÞç¶:þÄ —P¿Ó!¿v}mÉð çz•çöu³ÿwùy¾«ÕÙÈQ3­¾¼xë¹oÞ™dϨ¶ô¨§¼ÿ]–„ÔtÑQ€ÝÑXŸ»9¹ïÑbZàð# s²@¶>š 3KŒ‰ƒ[@/]®JY¹\oi¡ÊèømÏ P`„4FÄŠiVqž;ñ½…-Æ|#[nñ]rQÚÅö[ëÙ#ß¼ðó ÐwÐ]»R³8Ê#h«¬×6kׇÃKMBa„Gyšd\ý}â!,,Ò'Übwû¬NÞa‹L–›£Áki«°CY‡ž¾oð+¡O…ºú2‡WŒg]k 3Í¥’ø>D¶}øµ‹‘p¤d=e‡àÈ¡…³ÎæÒÒøÔ¶9¡à&u W»2iyÍw¨¨l ´„´öæªj §ho—È,sܾ€Þ’ú"N»T_–äêóŸ ¬ÂÛù¾à.¯ÕuUFÄÇ…m%b7zx4ø-{A‘‰×ý4ÄQ‰=#’Ö>z2 Œ…ä€xÇqšÿͯ ¹öu]{¦fXÓ\@8¢äØ,K¹…[=.çá§BAhTHÛ 7}l¹a.âN>õ Þýeˆ‹¹šÂßk!.=:X{,Ö^1œ'¶×šV® `È„É-™ù;0a¾ÂCA_~G=zqsCAprÓ´©b ³,¸…ð ¸7œ+rÖJ1¿0# *†H†÷  1¥± öy?mÌ|=öaÓj}qü4Ó0— *†H†÷  1‰†Entrouvert SSL Liberty Alliance LECP #4 web server test certificate010!0 +bŽº`ɲÑ~€²“M¾†Ôê[s “Älasso-2.8.2/tests/data/lecp4-ssl/PaxHeaders/jks.keystore0000644000000000000000000000013113766621500020166 xustar0029 mtime=1608196928.94689681 30 atime=1678098071.485500781 30 ctime=1678814321.429955701 lasso-2.8.2/tests/data/lecp4-ssl/jks.keystore0000644000175000017500000001135113766621500023440 0ustar00bdauvergnebdauvergne00000000000000þíþírootþWÀXuX.5090‚Œ0‚t 0  *†H†÷ 0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #410U Entrouvert0 040813103649Z 290404103649Z0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #410U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚Ò<Õ»†xF ‡ÿ”ï |ï‰þPo_Ó~ç>®¼mÌ{ÅÛ_@TÒzñÆ[4¨<`øûsÃ~j!‰äËó/¡šulI²xÒ6âec R¼ÚXʬøJ“Þo‰+½dÂê ÿkÒפ̓ò¢åxªV …=ùàm±¹‹©é^Y—¹È4ãß=ùÚÁ"2z<ÛôyÒßÛóDÞãÎéÆ^"/U O•É|éE(cð⊚rŸÄ‘œØ‘Aº` Âêú0Fæ`¾²q/ò¿@”¡d© Iª„Hû>;ŒB]Íп8U²Ÿ¨å, élB\²ÿI/î¬6ÇG }GNN5£‚I0‚E0U“Ô<-ÔÂUçåÜ*£z:ºï:…0U#0€“Ô<-ÔÂUçåÜ*£z:ºï:…0Uÿ0ÿ0 U0*U%#0!+ +‚7  `†H†øB0 `†H†øB0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0V `†H†øB IGEntr'ouvert Liberty Alliance test web server Certification Authority #40  *†H†÷ ‚Êêù‚ނלë~xӚĔ´<Êê "1Ñ… ë×ýé†ñ{Â8ãÕW°¡“e›ðÆ™]Ææ„î7#„ÂJ¹qÞiŠ­ä„4ë—ãþâþ,››sr)I¾zeÏ* ôÜc#öê2Bþå>‹Ú“ó²ý.¥óؽ–—"ûl@`£Ñè N‚ŒÂÙ¸¹V9–€±›šC‹Ç QŠDÀƒL ¤'Íí¨È^ëµ,ì2Êœ!øïòåI–Á\Bã@#Æmòo0uîy¢å7z  7˜ö•¸¢‘µì¨ –Æ~þ߉QòßnÀÕ’cÓtÒ~†p©ûæJ†ë&ðžÉŽtomcatþWÂ)ö0‚þ0 +*‚ê‘ÊVÓäP{%ÚÎÙß°i"‹N%UnçO-À‚;·¥qûWNr}ľxˆŸJåÕe©ª\ï½{itÐSÿ FðZØå‘D"G·‚Y¶¦D8OǦš[4/EöºV¬A¢-4Öá¾;™dzdê(ì8L"fh\CÑ?èä1ÐxItOãÓ:5±®qÎÏæõO·íw†GtÚ(Ü,Ü [¦®±ÇüMäð»RäøBÑ”ßÅÞ>œv;…Z5xX37´z¸ ^pòˆÚ‹¯ÜãºÛr ‚ sÑ0 ¼Fˆ?½îAÜ ó´ôí~Ð= †i"“äv éy´•ŒäüÐ>Ü6¢"6ÂK‰ò¿ÅHÖÞgÒÀHÏ’¡ûÙcü>¼ÿdšMÙ˜ÇÁqi‘Ë.‚é~.4ÁËóÄX(À§‡% ›FV̘+‡žðÍEçÙ{OWr¬@†: ÕDZÍ—ùÞ» éX뇔„Ü ;6Œ Ó„íŒ(`qß#ò>¨ïbê+MľÍËÇW®0bù±•|Âs‹†ÈQË|ñh¦•¥6fÛB}œ´ôKlt¨øGÏ€`GJM Y‹øà "ÙË–Yø”÷§q É›´Ô«ÞïÖ@&S9ÍÖÂg3ÄW'dÁÞ¤uŸS*‚F*—…@Ñ£.Ð'£¸}Q$# úST±°WÍFFípܶX” r4´K}ù“ߣ­»M=) hìç|«SpŽTÐGt/2Jê¯Â”ÜŸ¼Œ4'ècl÷_1J¢Z5’ Þ=ÙÏEÒš¬»›2Aé‡ à=^P'ÿ÷†Íˆ»`œ¢ ël*J8GŽÒ¾ËON}}dEpADiʳl‘“jT¨Z# ³ ޵¾¸öYeÇõg›·Ç¥ƒ^|ÒƒÙº‚eäʲ£l…×ÕUÚ 7‰J+Ãã¾S‹Ø\Ôíwèªz°¶3ö)PÙx6tL…>Êåà¢Îv±½ê|›.syNÞlv÷M¾é·/C€áR›Á[Èžò—Â\ƒ–%n‹ùµ… ?ýel‰ùnx:ÃÚ3 GàT-ÿñ˜ýÕoÄoâˆÿe¸?SQ·CƒGûe䱓¡ ½l”çlOÉRÎ~ÆUU‰·Z”×ÿ“æv%tN%E씲7ðGØiÔý©$vüŒ”däuóÜgÓ>gÞd#Ÿ+ôì*@)±Ú&H —u¼›¸07ì¾ë™ÿÔÓdù§€,gÄî@ðpé*éÐÀdW]eº€µºÈ~9¡ Vk°˜l×/!]&’·oñ_¨,X”Õ›éıiáJÚµá ˜èd ¢,W–ú)ÈRÄ_]}æ -mê{’†2{\º¤íåšÇžwßÕf(*…Ð:ý:ýT.¶Ÿ ¶¬ä}Lµ¸dXIÚWƒ¡ ·Hî<öu­7Äð* W hCƒvIà¿à•à¥èVr›ºõm£¨Õ0UÖ½ƒ;ªgåóh)ŸÙhgß7ò0U#0€“Ô<-ÔÂUçåÜ*£z:ºï:…0 Uÿ00 U 0*U%#0!+ +‚7  `†H†øB0 `†H†øBÀ0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0R `†H†øB ECEntrouvert SSL Liberty Alliance LECP #4 web server test certificate0  *†H†÷ ‚ÐBâ…#^EöR`²†­¾{Eã2¨Y&Ï®¿Ð%ŒB[‡¢™ùˆí‡ÕøMk‰çÚB©ˆ…ý^¨Ê@Ù°¢6+ú%¤¬–ZðäW©¡´Ú—ñ‰‡ 3_<ê¸CŒÇƒLðø`/ŠóñËX2gqöj¯a°™ì‰˜>¾ äŠ1¨i´°&¦ñW4&F8\§Ô‚áwÈ“XpgzSm#5óX‡9Ã'#1S’k¤¿¶üßÒ¿„ƵõâJY'ß—M+‚®e¹íÙ_–coаl»nåAï™cêÜjT!!?×ôfyAeË ìÕZMQíãþÌ>ŽPX.5090‚Œ0‚t 0  *†H†÷ 0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #410U Entrouvert0 040813103649Z 290404103649Z0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #410U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚Ò<Õ»†xF ‡ÿ”ï |ï‰þPo_Ó~ç>®¼mÌ{ÅÛ_@TÒzñÆ[4¨<`øûsÃ~j!‰äËó/¡šulI²xÒ6âec R¼ÚXʬøJ“Þo‰+½dÂê ÿkÒפ̓ò¢åxªV …=ùàm±¹‹©é^Y—¹È4ãß=ùÚÁ"2z<ÛôyÒßÛóDÞãÎéÆ^"/U O•É|éE(cð⊚rŸÄ‘œØ‘Aº` Âêú0Fæ`¾²q/ò¿@”¡d© Iª„Hû>;ŒB]Íп8U²Ÿ¨å, élB\²ÿI/î¬6ÇG }GNN5£‚I0‚E0U“Ô<-ÔÂUçåÜ*£z:ºï:…0U#0€“Ô<-ÔÂUçåÜ*£z:ºï:…0Uÿ0ÿ0 U0*U%#0!+ +‚7  `†H†øB0 `†H†øB0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0V `†H†øB IGEntr'ouvert Liberty Alliance test web server Certification Authority #40  *†H†÷ ‚Êêù‚ނלë~xӚĔ´<Êê "1Ñ… ë×ýé†ñ{Â8ãÕW°¡“e›ðÆ™]Ææ„î7#„ÂJ¹qÞiŠ­ä„4ë—ãþâþ,››sr)I¾zeÏ* ôÜc#öê2Bþå>‹Ú“ó²ý.¥óؽ–—"ûl@`£Ñè N‚ŒÂÙ¸¹V9–€±›šC‹Ç QŠDÀƒL ¤'Íí¨È^ëµ,ì2Êœ!øïòåI–Á\Bã@#Æmòo0uîy¢å7z  7˜ö•¸¢‘µì¨ –Æ~þ߉QòßnÀÕ’cÓtÒ~†p©ûæJ†ë&ðžÉŽíðª=雸à•o³è·¤tëlasso-2.8.2/tests/data/lecp4-ssl/PaxHeaders/certificate.pem0000644000000000000000000000013113766621500020575 xustar0029 mtime=1608196928.94689681 30 atime=1678098071.485500781 30 ctime=1678814321.429955701 lasso-2.8.2/tests/data/lecp4-ssl/certificate.pem0000644000175000017500000000303213766621500024044 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN CERTIFICATE----- MIIEVDCCAzygAwIBAgIBAzANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjE/ MD0GA1UEAww2RW50cm91dmVydCBMaWJlcnR5IEFsbGlhbmNlIHdlYiBzZXJ2ZXIg dGVzdCBSb290IENBICM0MRMwEQYDVQQKDApFbnRyb3V2ZXJ0MB4XDTA0MDgxMzEw NDQyN1oXDTI0MDgxNDEwNDQyN1owMjEOMAwGA1UEAxMFbGVjcDQxEzARBgNVBAoT CkVudHJvdXZlcnQxCzAJBgNVBAYTAkZSMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A MIIBCgKCAQEAuuEKd2NcgV4rlXlQhQvQ4SSZdcr+UCo/z66rUgfpCF2Y76mJj1/C IRruq98Blh2rLCYsCK1u+PdzRKqNJv1GyhIy2bfhFIhBoVTtfYehkFkCX/cmC/e/ aE0OX1yrp9dy7MtlhPt1jBdPz6nWdqJZ8KfiEE+lQhh8LdaBLU0XB50aPz2jlUAv +ShcwVEkW0qP7iEf5X9Tey6oyGVroZFpHQRJadQaIWaoUsNjMJdiQs993a9F+5QR 8vMRWCN3q236r02MxAIt0VfT1Nd2tHqHYrIJnmMgy/ysJ42oBPdOFgD7QEbwmHsk Pw2xdgIkgKK7MgSroZXSfx+RQLULrI+KFwIDAQABo4IBQjCCAT4wHQYDVR0OBBYE FNa9gzuNqgNn5fNoKZ/ZaGffGjfyMB8GA1UdIwQYMBaAFJPUPC3UwlXn5R7cKqN6 OrrvOoUeMAwGA1UdEwEB/wQCMAAwCwYDVR0PBAQDAgWgMCoGA1UdJQQjMCEGCCsG AQUFBwMBBgorBgEEAYI3CgMDBglghkgBhvhCBAEwEQYJYIZIAYb4QgEBBAQDAgbA MCYGA1UdEQQfMB2GG2h0dHA6Ly9sYXNzby5lbnRyb3V2ZXJ0Lm9yZzAmBgNVHRIE HzAdhhtodHRwOi8vbGFzc28uZW50cm91dmVydC5vcmcwUgYJYIZIAYb4QgENBEUW Q0VudHJvdXZlcnQgU1NMIExpYmVydHkgQWxsaWFuY2UgTEVDUCAjNCB3ZWIgc2Vy dmVyIHRlc3QgY2VydGlmaWNhdGUwDQYJKoZIhvcNAQEFBQADggEBANBC4oUjXkX2 UmCyhq2+e0XjMqhZJs+uv9AljBdCW4eimQ75iO2Hf9X4TWuJ59pCqRCIhRD9Xo2o ykDZsKI2K/olpKyWHVoeBvDkV6mhtNqPl/GJh6AzHl886rhDF4zHg0zw+GAvivPx y1gyHmdxf/ZqrxFhsJnsiRKYPr4g5IoxqGm0sCam8Vc0jSZGOBYOXKfUguF3B8iT WHBnelNtIzXzWBaHOQHDJyMxU5JrEqS/tvzf0r8ThMa19R7iSlkn34+XTSuCEBkG rgVlue3ZAV+WY41virBsuxsaFG7lQe+ZY+rcalQfISE/1/RmeUFlyw3s1VpNUQh/ 7eP+zAU+jlA= -----END CERTIFICATE----- lasso-2.8.2/tests/data/lecp4-ssl/PaxHeaders/private-key-raw.pem0000644000000000000000000000013113766621500021342 xustar0029 mtime=1608196928.94689681 30 atime=1678098071.485500781 30 ctime=1678814321.429955701 lasso-2.8.2/tests/data/lecp4-ssl/private-key-raw.pem0000644000175000017500000000331713766621500024617 0ustar00bdauvergnebdauvergne000000000000000: lecp-jks.keystore 1: tomcat 2: changeit -----BEGIN PRIVATE KEY----- MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC64Qp3Y1yBXiuVeVCFC9DhJJl1 yv5QKj/PrqtSB+kIXZjvqYmPX8IhGu6r3wGWHassJiwIrW7493NEqo0m/UbKEjLZt+EUiEGhVO19 h6GQWQJf9yYL979oTQ5fXKun13Lsy2WE+3WMF0/PqdZ2olnwp+IQT6VCGHwt1oEtTRcHnRo/PaOV QC/5KFzBUSRbSo/uIR/lf1N7LqjIZWuhkWkdBElp1BohZqhSw2Mwl2JCz33dr0X7lBHy8xFYI3er bfqvTYzEAi3RV9PU13a0eodisgmeYyDL/KwnjagE904WAPtARvCYeyQ/DbF2AiSAorsyBKuhldJ/ H5FAtQusj4oXAgMBAAECggEABGlJgPX0eg1KBBZAA1P7E0V05eXryOKmbPWXj7EmHA9xi765w4uk HnnvRllWRT/gCYPBKFdHtlLJAsbv3ArAgAab8q23f2+T9QX3MS5hbvHa7377A+9OMl0XSML8PlME oHhQpin1ZWArfyBoMpa0fszHtlDa+stvKvnURMh8Ea7mVngw0fSV9nQXeNkNf8/1BTAuwRblqACb 8BNB3qXm3LW2nJbGf1kovM1KWQzx/uZ0L9ksaIDyZIO7DoAQ5jO+eAVcU1QuxpYYSAmWjXcNhYHv 9+y2D0GmmU0dMjP6cT/SMMBcqyv8vvNqVC9wpZqh0hxkIwEYZDl6wayFCWZxYQKBgQDoNiDPcnox 3ziRk7sPguC/uLm2fF2EnBhqauHJQXLb7JgShJchNDT4HMu2ylPfbIU5KWCktBxE45oAkaxkX02C 5b/J9pEbEeSEefgMuZVxVOVIwr8fAzZV8b3MjA/JkMG5TJa6tqiES+S9BP4ohjm4U69fPAuU5Kvq Edk5lv5xRwKBgQDOBgvmz6JtdsNKm+Ao5BZF14rVlzGSKAU1e0TCqPgTSyKv+lsTYhS3AIMmTY72 iMU07v5UN9qcVP7Ilkop7ImaaW/qvCXDBiHqOU0yNDd/idXGrDNRDijSfqvdkjG2SvQ4wXS7qxr0 MLFD8E8kBHVaHqujij0Pi+kl6qJySJ8IsQKBgQC/gcyDaZUPRlof7WdLfpOeall2/5AcyqN0OFun oDt61t///auqLaU1roHvaWPMknI410Al9YiO4+phZ8J2MQb62kHW7Wt0mMgO3YxN6kwuYGaMIFiA 2iRYsvrmE+j9Qk4SZPC2YegO24x0uwZlI3W85/9tGlcu33xMmZW94iJMBwKBgBYvPn7XIuVooXTa PhQJI4DXyeJgCn1zg8QThv7zFOt27sBGVCJNMG/YRUcNmPRhG+MsTQSikw68dEcDL+89wj93VQ7Q vbw3X9WJ4A8k4kkAfZ2ME2aKAMlRzI3qXSIFBjFKW5iNvzRGPgBT0yHMvRo8LT1J+HNBHJTxpBZs TXuxAoGBAJ+4cgh0pyerz/RCAGJKm6amocqiA/QsUWY2Tvyo2ucteJU1+tO164Mdmsq0CQt2jFxQ wdAQDUN+j3LTOrUb9b/a2IlkxFco7sNI0QuI3OYb7ODVmeuretk1XYTFEfcVi8hrvpSPBKTZwKbo 2aQTfeppYHXGA2xwD6pSHji7uImt -----END PRIVATE KEY----- lasso-2.8.2/tests/data/PaxHeaders/idp8-1024-la0000644000000000000000000000013113766621500015547 xustar0030 mtime=1608196928.942896777 30 atime=1678814326.421984131 29 ctime=1678814321.38595545 lasso-2.8.2/tests/data/idp8-1024-la/0000755000175000017500000000000013766621500021075 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tests/data/idp8-1024-la/PaxHeaders/metadata.xml0000644000000000000000000000013113766621500020126 xustar0030 mtime=1608196928.942896777 30 atime=1678098071.445500467 29 ctime=1678814321.38595545 lasso-2.8.2/tests/data/idp8-1024-la/metadata.xml0000644000175000017500000000551113766621500023401 0ustar00bdauvergnebdauvergne00000000000000 https://idp1:1998/singleSignOn http://projectliberty.org/profiles/brws-art http://projectliberty.org/profiles/brws-post https://idp1:1998/singleLogout https://idp1:1998/singleLogoutReturn http://projectliberty.org/profiles/slo-idp-soap http://projectliberty.org/profiles/slo-idp-http http://projectliberty.org/profiles/slo-sp-soap http://projectliberty.org/profiles/slo-sp-http https://idp1:1998/federationTermination https://idp1:1998/federationTerminationReturn http://projectliberty.org/profiles/fedterm-idp-soap http://projectliberty.org/profiles/fedterm-idp-http http://projectliberty.org/profiles/fedterm-sp-soap http://projectliberty.org/profiles/fedterm-sp-http https://idp1:1998/registerNameIdentifier https://idp1:1998/registerNameIdentifierReturn http://projectliberty.org/profiles/rni-idp-soap http://projectliberty.org/profiles/rni-idp-http http://projectliberty.org/profiles/rni-sp-soap http://projectliberty.org/profiles/rni-sp-http http://projectliberty.org/profiles/nim-sp-http https://idp1:1998/soapEndpoint lasso-2.8.2/tests/data/idp8-1024-la/PaxHeaders/public-key.pem0000644000000000000000000000013113766621500020373 xustar0030 mtime=1608196928.942896777 30 atime=1678098071.445500467 29 ctime=1678814321.38595545 lasso-2.8.2/tests/data/idp8-1024-la/public-key.pem0000644000175000017500000000042013766621500023640 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDBc8xpMintURNbO86VLc83Uk2I j0eAWgwhpeCmLURL/fUunmC3P7xfZIx1fKQmRHqQBD/4YH119ZVvC1oKKRPrcbib DWIni5QMJM9dNIzaFhj+D6Vb8xK2n2FwcjSKvqhActpEceytAQn/WCgInYFtJdXw cc4wNT1qykf2sfvbvwIDAQAB -----END PUBLIC KEY----- lasso-2.8.2/tests/data/idp8-1024-la/PaxHeaders/private-key-raw.pem0000644000000000000000000000013113766621500021356 xustar0030 mtime=1608196928.942896777 30 atime=1678098071.445500467 29 ctime=1678814321.38595545 lasso-2.8.2/tests/data/idp8-1024-la/private-key-raw.pem0000644000175000017500000000156713766621500024640 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN RSA PRIVATE KEY----- MIICXAIBAAKBgQDBc8xpMintURNbO86VLc83Uk2Ij0eAWgwhpeCmLURL/fUunmC3 P7xfZIx1fKQmRHqQBD/4YH119ZVvC1oKKRPrcbibDWIni5QMJM9dNIzaFhj+D6Vb 8xK2n2FwcjSKvqhActpEceytAQn/WCgInYFtJdXwcc4wNT1qykf2sfvbvwIDAQAB AoGADpf9w7HVF+IV47wPSZG7ICFFWBf2/OfOInuxBthDXrg51tp70VctjsS3E+Xj PD/OPy8S5FnjHRL5wvbIRBv1NJv43+KTfC3oFAgQqmAII93GyVk374DJDI5aRLos fZGSUBxIGrJyxUrXHoliPJxuFV3tgHfSrZo8YtY0gr6gSIECQQD8J1Svmbe5xKYN 2xKD0OJ3THKOkPM6GgLK1WKvQelaELu0cTYXDcAEKQ0MN2fpvK6dxHfQcNZlWUre RBIK4W/1AkEAxGc8qQACY2bo+18KCGw7P80BJeFrlbuIXbih1EhkL5NJ/ps7X/kJ R6CrBXqsXrW9FMLZSWIKcBlMho9xVO1QYwJADM/qy6lh3nyRe27AOBZrC2jFAV14 HmGn9qp1Aza0JrFm+DowZ2d5dDypvw8ppoTB0p5jACJbonaxCS4oRIlD6QJAJ6FN NCy0TqptSIuc0qZELlOHb8VUmBoHIiInRVZ2IMNvothf2rW9kZ5x4+Ek9tdlF9NZ VN1bjdMNBfnbvG9GUQJBAOW+dYaBop4wVMc0D7kAjWqji3t3MrpA2yIvPZmYlu0M 3MX7R5G74YCfFgwDovKTDQYr9FMJGiqy0f6lQl8Uy2w= -----END RSA PRIVATE KEY----- lasso-2.8.2/tests/data/PaxHeaders/ca3-ssl0000644000000000000000000000013213766621500015173 xustar0030 mtime=1608196928.938896744 30 atime=1678814326.421984131 30 ctime=1678814321.289954903 lasso-2.8.2/tests/data/ca3-ssl/0000755000175000017500000000000013766621500020520 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tests/data/ca3-ssl/PaxHeaders/jks.keystore0000644000000000000000000000013213766621500017626 xustar0030 mtime=1608196928.938896744 30 atime=1678098071.357499776 30 ctime=1678814321.289954903 lasso-2.8.2/tests/data/ca3-ssl/jks.keystore0000644000175000017500000000242513766621500023101 0ustar00bdauvergnebdauvergne00000000000000þíþíLentr'ouvert liberty alliance web server test root certification authority #3þWÂs•X.5090‚Œ0‚t 0  *†H†÷ 0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #310U Entrouvert0 040813103648Z 290404103648Z0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #310U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚Կר©¿Ì 5Ó Tò¯_±Ô£!@Ýž=ZŽ G¤78>1RlêÎFÇ· ð @°EÈLb%€ÌÒ~îp»~ALO·õÐPØ3OgÇI–¯þ(H£œBBÅ}1.Zh€“Vòü›žr¸(’k›÷)jG˜ÖcúåÈòÚ½­rÅ ùR´ŽRDÀ2ÚáÞyfõÿRFƒë’’*J±]š@Áït<³‹0d%ñ¦$UXøÅP0‚p¨Ê"$·$.è]b§¯%² H‚?¤iÄ›õK&²TÀOÜÙ³ÈNîM¸öèørŸí6Á„>yoÀË4qW&´C£‚I0‚E0UKœÅïª<–³<Ëe;ÕcÁƘâ0U#0€KœÅïª<–³<Ëe;ÕcÁƘâ0Uÿ0ÿ0 U0*U%#0!+ +‚7  `†H†øB0 `†H†øB0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0V `†H†øB IGEntr'ouvert Liberty Alliance test web server Certification Authority #30  *†H†÷ ‚1’z‚}+,£xiÀFE‘FÇ ñ¥u̽œ¯mÙ6žÒŸÐV#¤Ú•ùdå#6ê4_DÇrã ]…¬Únë'ŽÐ2ÛéDvBÙ[k®Õ¨V æ „Ãðçp#³ÆLd?|P‡X½”qœiæg¢íF)wÈ<ù©­t åŽs8s#îšÌãûó4·g´O?õ%8Š|Ø4êb‚Ñű•"¬ø¦–m·p«§pÔ{”çý[ìÓŸ`i5®n{>#‚ µØ–ágbP^¨Zàk.ïþŠz-CÆ#¯Q+kG}GÑÕñ¡›óÚ?û‰0.×ðÀÁöðëÎË‚ ÈK34 ˆy>JÉ<CtMò lasso-2.8.2/tests/data/ca3-ssl/PaxHeaders/certificate.pem0000644000000000000000000000013213766621500020235 xustar0030 mtime=1608196928.938896744 30 atime=1678098071.357499776 30 ctime=1678814321.289954903 lasso-2.8.2/tests/data/ca3-ssl/certificate.pem0000644000175000017500000000314713766621500023512 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN CERTIFICATE----- MIIEjDCCA3SgAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjE/ MD0GA1UEAww2RW50cm91dmVydCBMaWJlcnR5IEFsbGlhbmNlIHdlYiBzZXJ2ZXIg dGVzdCBSb290IENBICMzMRMwEQYDVQQKDApFbnRyb3V2ZXJ0MB4XDTA0MDgxMzEw MzY0OFoXDTI5MDQwNDEwMzY0OFowYzELMAkGA1UEBhMCRlIxPzA9BgNVBAMMNkVu dHJvdXZlcnQgTGliZXJ0eSBBbGxpYW5jZSB3ZWIgc2VydmVyIHRlc3QgUm9vdCBD QSAjMzETMBEGA1UECgwKRW50cm91dmVydDCCASIwDQYJKoZIhvcNAQEBBQADggEP ADCCAQoCggEBANS/16ipkL/MCzXDkwsNVPKvX7HUoyFA3Z49Wo4LRxOkNzg+MVIZ bOrORscPtwrwGApAsEURyExiJYDM0n7ucLt+QUxPt/XQUNgzHE9nxxxJlq/+KBNI ow6cQo9CxX0xkC5aHA5oD4CTVvL8m55yuCiSa5v3KWpHmNZj+uXI8toDva1yxaD5 UrQFjlJECMAy2gLh3nkWZvX/Ug9Gg+uSkipKDrFdmkDB73Q8D7MFHYswZCXxpiRV WPjFUDCdgnCoyiIktyQu6F0QYqevJbIJkEiCP6QcacSb9UsmslTAT9zZs8iNTu5N HLgU9uj4cp/tNsGEnQE+eW/AyzRxVxEmtEMCAwEAAaOCAUkwggFFMB0GA1UdDgQW BBRLnMUF75CqPJazPMtlO9VjwcaY4jAfBgNVHSMEGDAWgBRLnMUF75CqPJazPMtl O9VjwcaY4jAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBBjAqBgNVHSUEIzAh BggrBgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMBEGCWCGSAGG+EIBAQQE AwIBBjAmBgNVHREEHzAdhhtodHRwOi8vbGFzc28uZW50cm91dmVydC5vcmcwJgYD VR0SBB8wHYYbaHR0cDovL2xhc3NvLmVudHJvdXZlcnQub3JnMFYGCWCGSAGG+EIB DQRJFkdFbnRyJ291dmVydCBMaWJlcnR5IEFsbGlhbmNlIHRlc3Qgd2ViIHNlcnZl ciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAjMzANBgkqhkiG9w0BAQUFAAOCAQEA MRWSeoJ9KyyjeGnAjUZFkUYQxyAA8aV1zL2cr49t2Tae0p/QViOk2pX5ZAXlIzbq EzRfRBnHcuMgXYWs2hRu6xQnjtAy2+lEdkLZW2t/rtWoVgvmCYTD8OdwI7PGA0we ZD98UIdYvZRxnGnmZ6IC7UYpd8g8+amtdAWg5Y5zGThzI+6aH8zjGBn78zQOD7dn tE8/9SUdOIp82DQF6mKC0cWxf5UirPimlm23cKuncNR7GJTn/QZb7NOfYH9pNa4T bhZ7PiOCCwO12JbhGWcWYlBeqFrgay7v/ooUei1DxiOvUStrR31H0dXxoZvz2j/7 iY8wLtfwwI/B9vDrzsuCAA== -----END CERTIFICATE----- lasso-2.8.2/tests/data/PaxHeaders/sp10-512-saml20000644000000000000000000000013114050545511016023 xustar0030 mtime=1621281609.267307905 30 atime=1678814326.421984131 29 ctime=1678814321.45795586 lasso-2.8.2/tests/data/sp10-512-saml2/0000755000175000017500000000000014050545511021351 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tests/data/sp10-512-saml2/PaxHeaders/metadata.xml0000644000000000000000000000013014050545511020401 xustar0030 mtime=1621281609.267307905 29 atime=1678098071.50950097 29 ctime=1678814321.45795586 lasso-2.8.2/tests/data/sp10-512-saml2/metadata.xml0000644000175000017500000000656414050545511023666 0ustar00bdauvergnebdauvergne00000000000000 MIIBmTCCAUOgAwIBAgIJAMM6SlwxhC9XMA0GCSqGSIb3DQEBBQUAMBUxEzARBgNVBAoTCkVudHJvdXZlcnQwHhcNMTEwMTIwMTA0NjQ1WhcNMTEwMjE5MTA0NjQ1WjAVMRMwEQYDVQQKEwpFbnRyb3V2ZXJ0MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAK/H+OVH+NfUIQuBAMYMrjsDD8XStM1qZ7zDqCGRnfiABk7o5z4APjZXN5VLF97og1ADOshTWXTkxKLRw6JhFnECAwEAAaN2MHQwHQYDVR0OBBYEFDZUn4rpDqlYtyiG+Jcd+aqtubatMEUGA1UdIwQ+MDyAFDZUn4rpDqlYtyiG+Jcd+aqtubatoRmkFzAVMRMwEQYDVQQKEwpFbnRyb3V2ZXJ0ggkAwzpKXDGEL1cwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAANBAFauKkVbSBdi9W2yMbu1Q9hj8uihOqAempKhh/gKCB5leLD1nuFZgEOwNKDzKlCrURt5VeVrdIvAOoQLbi1wOPQ= MIIBmTCCAUOgAwIBAgIJAMM6SlwxhC9XMA0GCSqGSIb3DQEBBQUAMBUxEzARBgNVBAoTCkVudHJvdXZlcnQwHhcNMTEwMTIwMTA0NjQ1WhcNMTEwMjE5MTA0NjQ1WjAVMRMwEQYDVQQKEwpFbnRyb3V2ZXJ0MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAK/H+OVH+NfUIQuBAMYMrjsDD8XStM1qZ7zDqCGRnfiABk7o5z4APjZXN5VLF97og1ADOshTWXTkxKLRw6JhFnECAwEAAaN2MHQwHQYDVR0OBBYEFDZUn4rpDqlYtyiG+Jcd+aqtubatMEUGA1UdIwQ+MDyAFDZUn4rpDqlYtyiG+Jcd+aqtubatoRmkFzAVMRMwEQYDVQQKEwpFbnRyb3V2ZXJ0ggkAwzpKXDGEL1cwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAANBAFauKkVbSBdi9W2yMbu1Q9hj8uihOqAempKhh/gKCB5leLD1nuFZgEOwNKDzKlCrURt5VeVrdIvAOoQLbi1wOPQ= urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress Example SAML 2.0 metadatas lasso-2.8.2/tests/data/sp10-512-saml2/PaxHeaders/private-key.pem0000644000000000000000000000013113766621500021051 xustar0030 mtime=1608196928.958896909 30 atime=1678098071.513501001 29 ctime=1678814321.45795586 lasso-2.8.2/tests/data/sp10-512-saml2/private-key.pem0000644000175000017500000000075513766621500024331 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN RSA PRIVATE KEY----- MIIBOgIBAAJBAK/H+OVH+NfUIQuBAMYMrjsDD8XStM1qZ7zDqCGRnfiABk7o5z4A PjZXN5VLF97og1ADOshTWXTkxKLRw6JhFnECAwEAAQJAEYk3kVgOwSlOaqFh/GAD eauihS+yDdQRqUkzmrW2NrYUZJWjAKxwb8z2XZQ+5ORigt3G/PIRzx2+ifreOS0K aQIhAOnEdu6VlTU0w6I/wlEnV0nIDDtJfXPTYLDc2jJfZpi3AiEAwH+3Iu8TrKro x5a+Zqmn9VnoC9chH+0upyqKyPB3khcCIQDMoe+ecJC5j6PFbtzSH4cYjiau62kH MD0O9XWH7N0pxwIgW/ZnulO29X1s2bUFXyxb5hW+irGKzKLV79yeEuL2bJ8CIG/u L6uXZfuAlQgIRzWCjmZH1e015RCMUQ/5A6dkKL42 -----END RSA PRIVATE KEY----- lasso-2.8.2/tests/data/sp10-512-saml2/PaxHeaders/certificate.pem0000644000000000000000000000013013766621500021072 xustar0030 mtime=1608196928.958896909 29 atime=1678098071.50950097 29 ctime=1678814321.45795586 lasso-2.8.2/tests/data/sp10-512-saml2/certificate.pem0000644000175000017500000000114713766621500024347 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN CERTIFICATE----- MIIBmTCCAUOgAwIBAgIJAMM6SlwxhC9XMA0GCSqGSIb3DQEBBQUAMBUxEzARBgNV BAoTCkVudHJvdXZlcnQwHhcNMTEwMTIwMTA0NjQ1WhcNMTEwMjE5MTA0NjQ1WjAV MRMwEQYDVQQKEwpFbnRyb3V2ZXJ0MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAK/H +OVH+NfUIQuBAMYMrjsDD8XStM1qZ7zDqCGRnfiABk7o5z4APjZXN5VLF97og1AD OshTWXTkxKLRw6JhFnECAwEAAaN2MHQwHQYDVR0OBBYEFDZUn4rpDqlYtyiG+Jcd +aqtubatMEUGA1UdIwQ+MDyAFDZUn4rpDqlYtyiG+Jcd+aqtubatoRmkFzAVMRMw EQYDVQQKEwpFbnRyb3V2ZXJ0ggkAwzpKXDGEL1cwDAYDVR0TBAUwAwEB/zANBgkq hkiG9w0BAQUFAANBAFauKkVbSBdi9W2yMbu1Q9hj8uihOqAempKhh/gKCB5leLD1 nuFZgEOwNKDzKlCrURt5VeVrdIvAOoQLbi1wOPQ= -----END CERTIFICATE----- lasso-2.8.2/tests/data/PaxHeaders/idp5-saml20000644000000000000000000000013214050545511015575 xustar0030 mtime=1621281609.259307995 30 atime=1678814326.421984131 30 ctime=1678814321.369955359 lasso-2.8.2/tests/data/idp5-saml2/0000755000175000017500000000000014050545511021122 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tests/data/idp5-saml2/PaxHeaders/metadata.xml0000644000000000000000000000013214050545511020154 xustar0030 mtime=1621281609.259307995 30 atime=1678098071.429500341 30 ctime=1678814321.369955359 lasso-2.8.2/tests/data/idp5-saml2/metadata.xml0000644000175000017500000001071014050545511023423 0ustar00bdauvergnebdauvergne00000000000000 MIIDnjCCAoagAwIBAgIBATANBgkqhkiG9w0BAQUFADBUMQswCQYDVQQGEwJGUjEPMA0GA1UECBMGRnJhbmNlMQ4wDAYDVQQHEwVQYXJpczETMBEGA1UEChMKRW50cm91dmVydDEPMA0GA1UEAxMGRGFtaWVuMB4XDTA2MTAyNzA5MDc1NFoXDTExMTAyNjA5MDc1NFowVDELMAkGA1UEBhMCRlIxDzANBgNVBAgTBkZyYW5jZTEOMAwGA1UEBxMFUGFyaXMxEzARBgNVBAoTCkVudHJvdXZlcnQxDzANBgNVBAMTBkRhbWllbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM06Hx6VgHYR9wUf/tZVVTRkVWNqh9x+PvHA2qH4OYMuqGs4Af6lU2YsZvnrmRdcFWv0+UkdAgXhReCWAZgtB1pd/W9m6qDRldCCyysow6xPPKRz/pOTwRXm/fM0QGPeXzwzj34BXOIOuFu+n764vKn18d+uuVAEzk1576pxTp4pQPzJfdNLrLeQ8vyCshoFU+MYJtp1UA+h2JoO0Y8oGvywbUxHioHN5PvnzObfAM4XaDQohmfxM9Uc7Wp4xKAc1nUq5hwBrHpjFMRSz6UCfMoJSGIi+3xJMkNCjL0XEw5NKVc5jRKkzSkN5j8KTM/k1jPPsDHPRYzbWWhnNtd6JlkCAwEAAaN7MHkwCQYDVR0TBAIwADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFP2WWMDShux3iF74+SoO1xf6qhqaMB8GA1UdIwQYMBaAFGjl6TRXbQDHzSlZu+e8VeBaZMB5MA0GCSqGSIb3DQEBBQUAA4IBAQAZ/imK7UMognXbs5RfSB8cMW6iNAI+JZqe9XWjvtmLfIIPbHM96o953SiFvrvQBZjGmmPMK3UH29cjzDx1R/RQaYTyMrHyTePLh3BMd5mpJ/9eeJCSxPzE2ECqWRUapkjukecFXqmRItwgTxSIUE9QkpzvuQRb268PwmgroE0mwtiREADnvTFkLkdiEMewfiYxZfJJLPBqwlkw/7f1SyzXoPXnz5QbNwDmrHelga6rKSprYKb3pueqaIe8j/APNC1/bzp8cGOcJ88BD5+Ny6qgPVCrMLE5twQumJ12V3SvjGNtzFBvg2c/9S5OmVqRLlTxKnCrWAXftSm1rNtewTsF MIIDnjCCAoagAwIBAgIBATANBgkqhkiG9w0BAQUFADBUMQswCQYDVQQGEwJGUjEPMA0GA1UECBMGRnJhbmNlMQ4wDAYDVQQHEwVQYXJpczETMBEGA1UEChMKRW50cm91dmVydDEPMA0GA1UEAxMGRGFtaWVuMB4XDTA2MTAyNzA5MDc1NFoXDTExMTAyNjA5MDc1NFowVDELMAkGA1UEBhMCRlIxDzANBgNVBAgTBkZyYW5jZTEOMAwGA1UEBxMFUGFyaXMxEzARBgNVBAoTCkVudHJvdXZlcnQxDzANBgNVBAMTBkRhbWllbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM06Hx6VgHYR9wUf/tZVVTRkVWNqh9x+PvHA2qH4OYMuqGs4Af6lU2YsZvnrmRdcFWv0+UkdAgXhReCWAZgtB1pd/W9m6qDRldCCyysow6xPPKRz/pOTwRXm/fM0QGPeXzwzj34BXOIOuFu+n764vKn18d+uuVAEzk1576pxTp4pQPzJfdNLrLeQ8vyCshoFU+MYJtp1UA+h2JoO0Y8oGvywbUxHioHN5PvnzObfAM4XaDQohmfxM9Uc7Wp4xKAc1nUq5hwBrHpjFMRSz6UCfMoJSGIi+3xJMkNCjL0XEw5NKVc5jRKkzSkN5j8KTM/k1jPPsDHPRYzbWWhnNtd6JlkCAwEAAaN7MHkwCQYDVR0TBAIwADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFP2WWMDShux3iF74+SoO1xf6qhqaMB8GA1UdIwQYMBaAFGjl6TRXbQDHzSlZu+e8VeBaZMB5MA0GCSqGSIb3DQEBBQUAA4IBAQAZ/imK7UMognXbs5RfSB8cMW6iNAI+JZqe9XWjvtmLfIIPbHM96o953SiFvrvQBZjGmmPMK3UH29cjzDx1R/RQaYTyMrHyTePLh3BMd5mpJ/9eeJCSxPzE2ECqWRUapkjukecFXqmRItwgTxSIUE9QkpzvuQRb268PwmgroE0mwtiREADnvTFkLkdiEMewfiYxZfJJLPBqwlkw/7f1SyzXoPXnz5QbNwDmrHelga6rKSprYKb3pueqaIe8j/APNC1/bzp8cGOcJ88BD5+Ny6qgPVCrMLE5twQumJ12V3SvjGNtzFBvg2c/9S5OmVqRLlTxKnCrWAXftSm1rNtewTsF Entr'ouvert lasso-2.8.2/tests/data/idp5-saml2/PaxHeaders/private-key.pem0000644000000000000000000000013213766621500020623 xustar0030 mtime=1608196928.942896777 30 atime=1678098071.429500341 30 ctime=1678814321.369955359 lasso-2.8.2/tests/data/idp5-saml2/private-key.pem0000644000175000017500000000321313766621500024072 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN RSA PRIVATE KEY----- MIIEowIBAAKCAQEAzTofHpWAdhH3BR/+1lVVNGRVY2qH3H4+8cDaofg5gy6oazgB /qVTZixm+euZF1wVa/T5SR0CBeFF4JYBmC0HWl39b2bqoNGV0ILLKyjDrE88pHP+ k5PBFeb98zRAY95fPDOPfgFc4g64W76fvri8qfXx3665UATOTXnvqnFOnilA/Ml9 00ust5Dy/IKyGgVT4xgm2nVQD6HYmg7Rjyga/LBtTEeKgc3k++fM5t8AzhdoNCiG Z/Ez1RztanjEoBzWdSrmHAGsemMUxFLPpQJ8yglIYiL7fEkyQ0KMvRcTDk0pVzmN EqTNKQ3mPwpMz+TWM8+wMc9FjNtZaGc213omWQIDAQABAoIBAEPj5keHzWdBqiXX 38WnlPgv+M9afndCjDANTEYoh14OIUjWzlIe/ufd6HLkrVA89hkwgQbewbyQOT2C YiSlQLl0PlKMCTIKIzVHD07HvXNTAwykEqNfTZChSYEa1/Ixre+MXvugF8nwdKxk 8xN0qXTQF6OXeVYvQNAAdng743YON4ubqKlEezIwnfG/jcoZrGkiTpx+k1JXJsZN 4dHKFP12RRhUTGjaOkBo41w8GNKQLFpy1vqAOYMyi1SJcrwpAu3H0iQug9SylQaM bFjt8j/m13gu3zXIJbi8xbyg3nqpxl9dxcZG/cDA9z2tLu/h3G3nPq7CXvkZxmjl ePvOCwECgYEA9zbwYMtd8tT3PHtrCtjwkfxV0dvMmfNw/rRT4ShWtKLmgX+K9nz/ T4qpbehz4z7OvsLjQ6Bt6wjMNMw9SEBeEMyDVTpmzSD2PowARegmeLX4CsilqHHl /AMYUtywEQ2f65/CWPiMIt8mLnEyJ/dsyVLpuzGUNNt34Yaqpu2qXnUCgYEA1IUy PObmTh3I8ZyESyGhbu2TYs0A8Zy6eTIAv0ijOIpmUykzjE5pR9sB3nYEd4GTHPEv hF6SWfNIDDr83TqThJYzkFyXMCxiVLH55U42wlsvwp4jTnOI3K/7Y7U/lEmBlgcl JbIIv1t9okg3+Kuu4i7iB6JR89cSO/Wfcdu/c9UCgYAHE5eF7cxeqyH4pT/HK7aX NzXtr/EHZySQ5fCQvWrd+NvIUTJVI/ba/AklkEXg92dLpqCCyxDabYIK8N3AN7d5 m6EWy3kt3geueqt3VNHlGrBi/qNfUwNWV3BWzuJrWox9XjFeAp9gUCrzoWHiKv7+ NFVkemLXsICaABTaemsqEQKBgQDJJ4n1u1gieG7Kwqs1sg9rP9RRoFlUWFTogjvS 0p4r1lQkQstX8qAUM2gBeROhSjRFIMUpNZqxKWT4rpzJibg3tzP3YKx6HIi2Qf+W 3AFY1ZbPT397sj/JI4l/Rv93DFxr9TdkBq/g8GhqQpE3/sj5rgaj0zBe7SOFPWg+ DRGaQQKBgEEcSF5KmpIHnhi3WlfGiEtx3kcD63orKME0YYA5BM6wnmRT4QiSw+qj i7ljrKGSbmdMFC3ArM42/k2lXYpVLsYWmyaRYSgbdowxLM1XxDJMFIPR2uG6N+vi HzWkRxi2SXKU42vfs5eA0itHvQP2DfUx8VuvtwVbOxDGgntYia70 -----END RSA PRIVATE KEY----- lasso-2.8.2/tests/data/PaxHeaders/response-40000644000000000000000000000013213766621500015725 xustar0030 mtime=1608196928.954896876 30 atime=1678098071.501500907 30 ctime=1678814321.449955815 lasso-2.8.2/tests/data/response-40000644000175000017500000001520013766621500021173 0ustar00bdauvergnebdauvergne00000000000000 https://vip.espci.fr/saml2/idp/metadata.php https://vip.espci.fr/saml2/idp/metadata.php l0FLnXbJqY6azSX8I4s6CEJsYKE= XdSCHxHEA0hkqnK3exyVq6Md0+VQa9ZGDtBuKIOVJVkScAYvJBzG2b7o3B1pBbYQNrsOvXcXg/JdWmCfA1EucAnj5Fopxk2oyNRKuMUb00igX/ftFTou5mszletZ2Nwx8urasklEh/LKXSIQLx5nA2tfpuQqC5u+GXCKccGQBIQ= MIIEcDCCA1igAwIBAgILAQAAAAABIK/C9AowDQYJKoZIhvcNAQEFBQAwXzELMAkGA1UEBhMCQkUxEzARBgNVBAoTCkN5YmVydHJ1c3QxFzAVBgNVBAsTDkVkdWNhdGlvbmFsIENBMSIwIAYDVQQDExlDeWJlcnRydXN0IEVkdWNhdGlvbmFsIENBMB4XDTA5MDQxNjE1MzIwNloXDTEyMDQxNjE1MzIwNlowgaIxCzAJBgNVBAYTAkZSMQ8wDQYDVQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMTwwOgYDVQQKEzNFY29sZSBTdXBlcmlldXJlIGRlIFBoeXNpcXVlIGV0IENoaW1pZSBJbmR1c3RyaWVsbGUxHTAbBgNVBAsTFFNlcnZpY2UgSW5mb3JtYXRpcXVlMRUwEwYDVQQDEwx2aXAuZXNwY2kuZnIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALqHqDC01AANSoDkkuOh4DvNpVJCit7gEobYXJZ4Q5LHRFgfgkJktae1Rkjp0M/uaDtWK0SDUxXbsmup2qDByV2mTB77np5Z7CfR9TomZrmkEu+I/yehD4YQK54gyClpd54KcM2wecpmI9zaSF0U2PYvK1QopOx4IntT+sYGiIexAgMBAAGjggFrMIIBZzBQBgNVHSAESTBHMEUGByqGSLE+AQAwOjA4BggrBgEFBQcCARYsaHR0cDovL3d3dy5nbG9iYWxzaWduLm5ldC9yZXBvc2l0b3J5L2Nwcy5jZm0wDgYDVR0PAQH/BAQDAgWgMB8GA1UdIwQYMBaAFGVloz3XOxGjCgclN8lCSlt2d1DhMB0GA1UdDgQWBBTLgGQdwBQK2JvSL8jCOrgDydwvpDA6BgNVHR8EMzAxMC+gLaArhilodHRwOi8vY3JsLmdsb2JhbHNpZ24ubmV0L2VkdWNhdGlvbmFsLmNybDBPBggrBgEFBQcBAQRDMEEwPwYIKwYBBQUHMAKGM2h0dHA6Ly9zZWN1cmUuZ2xvYmFsc2lnbi5uZXQvY2FjZXJ0L2VkdWNhdGlvbmFsLmNydDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwFwYDVR0RBBAwDoIMdmlwLmVzcGNpLmZyMA0GCSqGSIb3DQEBBQUAA4IBAQBOR9nk7v34geZVHbzGT3DDLD/Lg40y6WvsjZVCxw3TtWxCzX0yQzS0Rp4LGIq0Y7lrafsPm8O0mjONGTQl804kjpKQseRBmpbo1hD4W3fWjMTXgmrdeGzhCFS0UclpmL8RCmMOcIe1EqqDX5y1My5ux2OU59YF73N746jCW1SdDfa5AXVwFpVrMvkRWgwNw3aTgigy+wZYXTK5Sdv8KORbzFBA5K9alU9pb2rreN2mKvTxsETWty5R/B8LmP/MTaeA4iDzKUyo/jpZYhkAtEPCzCYftdYV/hSnaw+ZSlJ5Av79EX4lyZjajsILOlHp4w2iExbolx4m5iT49GAabLj0 _eda702125448e7e9c6b903eadb06c18dd6f3777131 https://bacasable.net.espci.fr/mellon/endpoint/metadata urn:oasis:names:tc:SAML:2.0:ac:classes:Password Emmanuel Dreyfus info edreyfus ciril crunch-ssh espci-mail gs-admin info-ssh linux-adm mail-ssh ras test vpn wifi wikifondation wikisg www www-ssh www0-admin wwwloa wwwmmn-ssh wwwnbp wwwnbp-ssh wwwppmd lasso-2.8.2/tests/data/PaxHeaders/lecp1-ssl0000644000000000000000000000013113766621500015530 xustar0029 mtime=1608196928.94689681 30 atime=1678814326.421984131 30 ctime=1678814321.401955542 lasso-2.8.2/tests/data/lecp1-ssl/0000755000175000017500000000000013766621500021056 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tests/data/lecp1-ssl/PaxHeaders/all.p120000644000000000000000000000013113766621500016701 xustar0029 mtime=1608196928.94689681 30 atime=1678098071.457500562 30 ctime=1678814321.401955542 lasso-2.8.2/tests/data/lecp1-ssl/all.p120000644000175000017500000001046013766621500022153 0ustar00bdauvergnebdauvergne000000000000000‚,0‚ò *†H†÷  ‚ã‚ß0‚Û0‚ ÷ *†H†÷  ‚ è0‚ ä0‚ Ý *†H†÷ 0 *†H†÷  0ë?sAݹþ€‚ °If‡lü-Ìü¹ú?p¦<à¬ÅøHüXº}—®Z¾DW]™ NènrCÉ]‰çåÿØQ¤{g¯£7?ÂLÀ“îZ+a(æ‰|éväzî?ÖpJ›È2´ŒØ^ 7¤Í,ŒQÞJî¿Nd…ëÔýÙ'½•¢1[iÿ9Q»1–$miúk09bž‡@ ռР¤‚p î5³–1ë>±õK¯PõÓ£¨FŸå¡ÞÏïÔ;ZOñ³ tõc%]–|bQ€üŠ_ÐõFˆy¼Â_£æÉ‚ír2¸¤°ëPIÍ‚^» ‹†’¦î(!â1­÷fˆ®ª;V!#ÉçRrp¸"_¦Ræ:­õŒ³>}D|•„{b¤gë{Èý7ê Ôžƒ9s* +7§ü òð<3ìÓGžœY þ¸ã!Í€ËVOƒé:¯7_s~|³%÷÷¼Ë7ÔZL_ñºß"¦Í-ñ5}íö¤ê •ŠËú±BÚ¶t ¨€% Xî¹_ûÅ•¢EÖ8û÷‹;Ñïë¯ >m»sR?~±ãþwâ¿‹Â5…p½jöÔÙ}%›W›ï =lYU› Ž"À :ÀÌÁ0è%[PrBïÿ·-àÅä”3M>õ kRœž/—›CïÎvÉ1¢òاhúõ¤+õùY“UûyÔ̽mª*ÇkÊ^¤q´õk•ϲJ!|Ñ$:ÝE¾„…c0“Ç< z íèß^éø$v‚sšN"™òÕIÝZñ”JàÄ#Š’çù/nf-D7D9u{îÉ¥_J¤I닾@à´òöPÁ VãFø9#U@P Ý:w´f[Î0¸tĬfõão•ËÐE„æöôK¼d`*‹nù4fá“ò”޽{ÎØY ßFËV|è¦uA'cÝV(Ü­=œ¦”š§¬t)c7öIñò$wl¤gš™;¸ïtʘ‡8–¹óÈu˜­(/åï¿{¦ÉP;²&X[R¬·ÀØfôÍRuóK©/j»úcÙ_‰09ÍTxžšC¡»kmu{ª–ñ‡Z UQÁ›q?¸Â©ëÁ°¶DpøŒÁ|áCÖÈŽpÚƒŠšíÉ÷­Š!­OJ¬Îïj}z{¬òm’ÜdoKMÉé)¸AN'ÊSD¥!Ђ'p‹è³*\ç¦fŸ)»ý`iüC_Xžµ+í¢2HÝ{`õ:€˜Ãw”­4ɹu &æ~ Åç&à¡ôEÔDñøNBG³˺0…~@µÆ#3;EPµ!'¸.U,éš83…dI´žTŒÜâ€tWrÒh•m ï‚t„š*Z ¥¥å'¡šEœuê]M‚Ô÷ÕÐå¨%À Ûó7øØ5-Ïã 4 +Êä¿dƒ3àE¹}-ž5öváÂo­i^¶@ìX†ÖÅ{ . ܆ÈN“"–Äï cÌ4×Ct ‹Q>xXRrŠlpdÛºmiÈÌòoé³çá…QþºµÄY÷{ǼJúFì?5bæô‰7F}.ÉûÃýnÙb”XUõ`µ%¬ÅÐÓ$Û]ee> æ°S6óaAiî'Ýþ)†LcÊ)—ëiçÛ·õ¬nœŠâµÍ@2‘2ÄÉK –Èk7MRܳuÕ« ®¨üK©Ìh¹É¬ë}=UÂ~ªßóBµ¿_Lp]ƒƒ:êã+á_,ý†¨÷ ¿ïéæª" ]¿„_PUÂ!mÚ‰_C ~XÐl„ “cþÃ#q1ÝÜo;4Îéµö"gýòNœdE· ‰Ïúm ØÇÁüàýy&KÌ¿ÏÕ’ÕEÍ‚Wwtß¿œÏnwHˆËq;)u-· ¾Fædù ™$ÅúþÝS€\¨l‰/ôÐÜò‰7‰w¼ñ²qìíûhª‚Ãß%ˆx0S_õœ ÑÎç ÈäaNBûã{XuÎmJ’$ ÁêIp%}j\¼¤þŒ•Ñ)”A™4•ßüu³Öï:"„ʼkø'ºNUüÄ x`TdPËi(H!ëbÇaÎ.¶Ü8À²©lœQåêèE·¦ù—ø-' ïÂÐû(†ö,Zõ©±´ ³Îú!  e6^‹—œ1òϤî',tD¤H“®|ŠÇˆÛÉȵ†ÝmG¡Ê›¢Îáp‰¬H;5®åž‹ñhþÂ"®§è…*ï’Éb,¢Œ©´O2(‰M(±1Æ»ü²Ö‰ÜÀþ1|91’&À„9Gþr´*o½\ä×9À‰Z-ø9ÓOÚÍn !äÈéùò~Þ©ö´ÜW&˜’²–­g¯AÕ‡`©Õn„ðÍNÛ—É炌~ž¤Þ«1o¯RW¤qÎÿèˆ 9-´Ÿ>ƒ®ºâ~ÇNt“õaÎà!JH’¬gì—s0&[t¨a`b˜bxâA#­ü÷Œ“t[¯àþðP™Ý²mÍÛÀ¦É J³`Œ(ò2ÿ+ý®Ø,‰¶,õ#ΘVÙ8ß):~Lk-ÈD€HiÞŒ /‰fVÖáýÙ2rKæ´{ûÅwjöBy|çK‹~±-Õ}SÅàIÔc,Ûñá³Ù×ßa¶¾u¡ƒò|£<ÂÄ~?_3G<àj>´ÏDnLJ½&˜†¾žIz ‚d.5çãØ7 7—ìÈoÐ#YzøvÂåÃ4g·lïÖÉpˆ£4IwNQÐÁ&AõæxHfê„~N_yß#ض¤mP,Ñc‘¾ãTŒ ™E‚ E¤é|¼¬ÆDDc?1èÚBþü)ø%ÙPGè?õI¿Ë221C|…¨‡v7©¢h†ŠC”ÚŒŠ~ýe#¤yéAâƒÑJåó|`É Å ¼õÅ!­X–%£KnN;þ¹Ós}“¾´Î…ŒJ UéP¢¥, É-ìHuä ~Pö3}¨ÄDf×瀞7ù •’1ðíc“\‰VZàùG²Å·z;ò,É"¡;(ôà•/Fè‘!Gkú5{À.u¯ª tùsÁ¥`ˆàºƒÚëðvrß~ ½Û?„Ož1ý¸ˆ¥5ÿfPèÏKÅõ³°Zˆ¦ûeØ×Ðä3ò­eu [¦Ö–b½[åÜë!E].}ÆÛ‚eURXóð LƒìRˆÿ”v ?¿ÜÃneY‡Z‚á%NJ«wUD2ܙí|öòºÓ0]ˆðxy ²…îjÛ8dáŸÚÅ«á,y ¸†¿-$ V¿Ñ\nòÐuz³HÙCÊG"F$ƒÚO¡àln|JŒÍ5âd`EOyÚ¾nö3Ð8Ÿ½›]ž9–¼m}ÿn±â8á·jÈ.×¾z¢Í1™÷¾cL}3¶òܵõd)C›‰ùE·4Ñ%†Ì0ãþWú1Ì– wWãòQwt©•¢µ_æ½Máæÿ~Ù_àÕrçÐÚ5¤d­aÝg£$âgóP³¿÷OŽ72‘9›ìô,rúCÓä ‰ëðsö )çÚßZ§¥Ë©wG-²¸òŒÆ#Ù§û>íjG“N*Ê[H®kúH1V‹E `NF9õ ¨>—ÔÂO5Ži£a‹‹]‚Íþa$@„ˆ8ýåàI[ø|þràäúæ6T«ú‘¸ÈÝ)0‚Ü *†H†÷  ‚Í‚É0‚Å0‚Á *†H†÷   ‚î0‚ê0 *†H†÷  0 ªC2ÃQw:‚Èü.5þΦò¹Ê3ENš’ú½!îÐQþšÎ€W'|ЦÏðû÷|¢þœNqð5¿Ø‹­O¥‘bù › —úW3•D©œ6Å¿ñ÷ÁAߥóK—«Ôh0M.”Æðé;®jr½K£“Û—P´ü«TæÉá¯>Xšûšp}ï4u›ô8îºõÕ°ÁCÅvhÐý«X‘•‹²Ûòç#W‘Ú"ÒzA.¿Ù©êS*lè,‘›À¡GA õÂZJ~Hö(`[ ã£÷N«nßÁšÇäšÍ—vÕ/gÅMÓ ‡D¦€uåÍŽšgz•¸ŽÇ°gÔ©î¦8]#B.&L[Ò/îÄ ªFÈYŸ)ó´3Pçì.qc'¢œŠü[€ÑòŸÏ¯ZùöqŠf#.™#fn#.§ ƒêÇ»°3ð@›ZUŽš%,,Dê¾c\ÖÝU¼ *šß§UL·q¥¼ÍâZ€q)ªpP-DÜÏ9^fzæíȯÐ÷Ät0—=Ÿ…4 ·ù0ÑŠU@?ÚVÔS•s‰tuΖ7Pe ž7×¾-ã‘úñÚ]Ï£Ïw2‡ …LZø×ж‹¹H¨¤y*#Mÿ£¿y†Béð>›d eæ¥ $ûøY&ƒ+'j ô"Ð^â#ïbüÜ\íïA)òkWx* '›9hÉpVW$Zøø °mý*üLŽM¶úoïÿŠ.&Lµ=ÊegwBFTz ßaXÖJ"ìhàp"³~90áLÄy X{º9tRŽ‘b ^ùD¾Ó³hõ¼ŠåN°û¸œ0iá“Éè&,Ì4Ï”½ñ•8U–h¬–óÕHÂÙ'OÔ B'v½T¢Pߊæ›LPåC| "Åzˆè mz‘v§¨Ìqnü ýüÓ»tÒ'Yý$Ã`1ûšcfÍë_õͽcÑÓ¿§sýMòõÚß1‘§Š¸µ5æ¦Á`¿y8ͤÛVQ<,¸+z †™‰Ôr KÅÿù¡ð°{H³ÄöUrÆÓœöl¨&ر™Òçšdö"מ—òbMTa«š,t[¨IÇÄÙ ™¾O”ˆ¬¢5œf´‘E¹p_»ø˜–`Ë9Š Å©ƒÅ9KD÷ÇêÝ t½#6l\è¦wö#n`þlêÀÉC‚cÛ|SØù°µÈÙgÍ![pbk S™m§Ùû îyýa­ç+OÌ4š`—øâDu00L™ç»ˆéõgOɬìÎÏ¥û›ÀŒ”o»×r”FûþÂá+ö,Ü"9ïV±Ãgã >~sÝÚ×±ÌsKšªzwŠ˜‘è]z_51¿0# *†H†÷  1$½¿€Æ1 «NèrÞ 0— *†H†÷  1‰†Entrouvert SSL Liberty Alliance LECP #1 web server test certificate010!0 +oæf°x'êAhº¼Ð_ø 1ƒn餾Jlasso-2.8.2/tests/data/lecp1-ssl/PaxHeaders/jks.keystore0000644000000000000000000000013113766621500020163 xustar0029 mtime=1608196928.94689681 30 atime=1678098071.457500562 30 ctime=1678814321.401955542 lasso-2.8.2/tests/data/lecp1-ssl/jks.keystore0000644000175000017500000001135213766621500023436 0ustar00bdauvergnebdauvergne00000000000000þíþírootþWÀ"MX.5090‚Œ0‚t 0  *†H†÷ 0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #110U Entrouvert0 040813103644Z 290404103644Z0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #110U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚¶”:…;[ÏOê¦ÉqTÏàýý™[êqÎÓÖ0µ×.U&•ˆ-(¦%líŠW,¿vDbáÓ€ ŸIkWçÚJŸâHÈÁéOz?ÃJKB*”4% üFâqjiO)Má³® 0\Cå¶ÌuÆÞp÷7å•í™ßÅj*x™‡È`Bq´zO„F%½§ÕxtcFU‰ùtó¥9¯Êq4¿(Rî®`‹{„Á\d¡}²P F«¢&”g··fŸÜꪕT xë9ö-mp° nUAZ¶§xÕ}Ô±ŸÐæ”Xb±ý7%õQ¯Ú›ú܉Ò )µ–úø8vuïŸÏ©£‚I0‚E0U)®kvÊ5ÉZ;5ò"B?`á;0U#0€)®kvÊ5ÉZ;5ò"B?`á;0Uÿ0ÿ0 U0*U%#0!+ +‚7  `†H†øB0 `†H†øB0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0V `†H†øB IGEntr'ouvert Liberty Alliance test web server Certification Authority #10  *†H†÷ ‚6Y‡y×,Kˆêæ2%ýò©d¤àbªÃ¦è¼ó¹mqqÝ÷…P“ë÷ Ò9OÚŸ”Ä}c€€¿¤MTWÈ/™cƒ¸G ³²òK襲I<|Vï®iœ¦·]º¼À˜ÂCP$| ×ïÏØjš§¦ª!µÁ^`({,Zª×i§¥°r ž­¬†žÏõɱóý£*ˆFjg›/ýr°f̰mºÈ=ñÜ€Ü[“I¼–œëÑöµÀ7Ä£H8zg=¿+™4¢³¨dò}êpp j‹¯rÞ=¡LåZGBmK¾ƒ´jy£ÊÄ©ì°"€tJO:Y­ºtomcatþW 0‚ÿ0 +*‚ë9 JÏú>–±ÛAbȘ;e':2GÕ`ÖÄÒ_í –A…•"‘΄u•ô$ãf\R 3z‰ù¸±ŽÞ9äÊë…ùû}W~ú(=÷CêèÀ½òbQf.`]Ê;”þ©Ï9O|"aÇö>Ý›cOZQ¾A?—™_–äc2±Ø wCªy3zªYŠ ñoEøgß½®<(^oÛZJ›1¹ѽm œÈ;&SŽþ0^•Uò\’džLäâ²Ót]ïïh°omÚ Ø òT) ò)$€Løž€:–¨‚¡¸åS%žÁ褜n–ã.¼ 6Ë|y1‡z†{jú(ÌFÿCyݲoÀ!¸‚zÇÎú3êÄs1 ˆòn VuîôFÁlØùrãÛœWs?ÒÓ¶Nô˜d»you±Û“r[ÄïÝ'ëú+»Ê 9þ°XuLÝ×Çdz­-]ç£ê*üÖ¢—ü¹léØ5Íi|h’˪Óâzé“PVdþ¡¸ÖµC›˜qŠwóvf¿oÅȈo)f´'çn¢{3æ X1ïÛ³/î ó"JÓÎ3ÖHdÔŠù#ä)-뵜ý‘ÒÛ?ñ”Ø?§Â?ß^ï 4¬³¨ïï¤Yç­èáKÔuS_6:|Š7H¡­ÀFR8,çI ñN»z:Œ•” €"Œí“ ꘌê`÷Hj0ã"!¸’¶¤€{mòo9ÅT¢É-C-y›ÿêbJ«`Öwj{ôË6šõ$õÀøœ=d«Û¾øÑkg@XÚcèX.509X0‚T0‚< 0  *†H†÷ 0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #110U Entrouvert0 040813104426Z 240814104426Z0210 Ulecp110U  Entrouvert1 0 UFR0‚"0  *†H†÷ ‚0‚ ‚ý/=éù”]:AÏ0ÊÛ¹~bÚ§ß‹5ë|yj‹e[Ì0ÖXC¥hMÊö[î@ wÊB‰"L*’οÊ]fyP Øß{ª£‚¦†lN +žù^2x¨ÙRпÄdg#ÖÍÍk‹ÞhTçcãp Ò¿Š"ØZía‚8€4Ö¯e¯â÷qå±™mKø÷(Éâ&ø`'â…@ЊS|½t’ !WŸXTÿbð˜‰É’a£”Ø'´­ƒüw:Òv"¼ë>C¨· š=´ÚÝ–¹lõâ÷í¿] k‚³œÎM BbŽFáóo‡†Àíú)Æ™_´)îaÞï!ÿ8"‰£‚B0‚>0U?ˆ[€µåOM.ÐRÏTÝ»É0U#0€)®kvÊ5ÉZ;5ò"B?`á;0 Uÿ00 U 0*U%#0!+ +‚7  `†H†øB0 `†H†øBÀ0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0R `†H†øB ECEntrouvert SSL Liberty Alliance LECP #1 web server test certificate0  *†H†÷ ‚n>_çHš](—zÔ.ùÝŒ¸bçΛ E‘=9ϳwnš¬Èdh2X_O‘ŒÌ–y‡Rk"½[,x˜ÊîMM…ZnYŒ­†ê‚1z•7O¨Ô¢Ž¦A–«{½Ý‹Öl¶žíBl¯ p/~rq¹‡´aÛ×Ý6‡œn’ Òp .‚5¿íDf yÀr‚p¢L·³Õ…㉩3‹°°DÆu(Œ·ŽE%Ï”tó{TÒ*¸ èXíX.5090‚Œ0‚t 0  *†H†÷ 0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #110U Entrouvert0 040813103644Z 290404103644Z0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #110U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚¶”:…;[ÏOê¦ÉqTÏàýý™[êqÎÓÖ0µ×.U&•ˆ-(¦%líŠW,¿vDbáÓ€ ŸIkWçÚJŸâHÈÁéOz?ÃJKB*”4% üFâqjiO)Má³® 0\Cå¶ÌuÆÞp÷7å•í™ßÅj*x™‡È`Bq´zO„F%½§ÕxtcFU‰ùtó¥9¯Êq4¿(Rî®`‹{„Á\d¡}²P F«¢&”g··fŸÜꪕT xë9ö-mp° nUAZ¶§xÕ}Ô±ŸÐæ”Xb±ý7%õQ¯Ú›ú܉Ò )µ–úø8vuïŸÏ©£‚I0‚E0U)®kvÊ5ÉZ;5ò"B?`á;0U#0€)®kvÊ5ÉZ;5ò"B?`á;0Uÿ0ÿ0 U0*U%#0!+ +‚7  `†H†øB0 `†H†øB0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0V `†H†øB IGEntr'ouvert Liberty Alliance test web server Certification Authority #10  *†H†÷ ‚6Y‡y×,Kˆêæ2%ýò©d¤àbªÃ¦è¼ó¹mqqÝ÷…P“ë÷ Ò9OÚŸ”Ä}c€€¿¤MTWÈ/™cƒ¸G ³²òK襲I<|Vï®iœ¦·]º¼À˜ÂCP$| ×ïÏØjš§¦ª!µÁ^`({,Zª×i§¥°r ž­¬†žÏõɱóý£*ˆFjg›/ýr°f̰mºÈ=ñÜ€Ü[“I¼–œëÑöµÀ7Ä£H8zg=¿+™4¢³¨dò}êpp j‹¯rÞ=¡LåZGBmK¾ƒ´jy£ÊÄ©ì°"€tJO:Y­ºsðw5RŒ6O­ +â[±WÔ°±÷lasso-2.8.2/tests/data/lecp1-ssl/PaxHeaders/certificate.pem0000644000000000000000000000013113766621500020572 xustar0029 mtime=1608196928.94689681 30 atime=1678098071.457500562 30 ctime=1678814321.401955542 lasso-2.8.2/tests/data/lecp1-ssl/certificate.pem0000644000175000017500000000303213766621500024041 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN CERTIFICATE----- MIIEVDCCAzygAwIBAgIBAzANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjE/ MD0GA1UEAww2RW50cm91dmVydCBMaWJlcnR5IEFsbGlhbmNlIHdlYiBzZXJ2ZXIg dGVzdCBSb290IENBICMxMRMwEQYDVQQKDApFbnRyb3V2ZXJ0MB4XDTA0MDgxMzEw NDQyNloXDTI0MDgxNDEwNDQyNlowMjEOMAwGA1UEAxMFbGVjcDExEzARBgNVBAoT CkVudHJvdXZlcnQxCzAJBgNVBAYTAkZSMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A MIIBCgKCAQEA/S896fmUXTpBzzDK27l+YhraFKffizXrfHlqix0dZVvMMNZYQ6Vo TRbK9lvuQA13ykKJIkwqks6/yl1meQABUAwF2N97qqOCpoZsTgornvl/XjIAFHio B9kUUtC/xGQAZyPWzc1ri95oVI3nY+NwINK/ihUi2FrtGGGCOIA01q9lr+L3EXHl sZltSwb49wcoyeIm+GAnBeKFnR5A0IpTfL0QdJILGiFXnxZYVP9i8JiJyZJhoxSU BtgntK2D/Hc60nYivOs+QxSotwuaPbTa3Za5bPXi9+2/XQtrgrOczk2gQmKORuHz b4eGwBHt+inGmV+0KY/uYX/e7yH/OAciiQIDAQABo4IBQjCCAT4wHQYDVR0OBBYE FD+IB1sGgAS1j+VPTS7QUs9U3bvJMB8GA1UdIwQYMBaAFCmBrmt2yjXJWjs18g4i BkI/YOE7MAwGA1UdEwEB/wQCMAAwCwYDVR0PBAQDAgWgMCoGA1UdJQQjMCEGCCsG AQUFBwMBBgorBgEEAYI3CgMDBglghkgBhvhCBAEwEQYJYIZIAYb4QgEBBAQDAgbA MCYGA1UdEQQfMB2GG2h0dHA6Ly9sYXNzby5lbnRyb3V2ZXJ0Lm9yZzAmBgNVHRIE HzAdhhtodHRwOi8vbGFzc28uZW50cm91dmVydC5vcmcwUgYJYIZIAYb4QgENBEUW Q0VudHJvdXZlcnQgU1NMIExpYmVydHkgQWxsaWFuY2UgTEVDUCAjMSB3ZWIgc2Vy dmVyIHRlc3QgY2VydGlmaWNhdGUwDQYJKoZIhvcNAQEFBQADggEBAG4+B1/ngR9I ml0ol3rULhv53Yy4YufOmwxFkT05zxizGXdumqzIZGgyWF9PkYzMlh15F4dSazxq cC2f+KsjXohA08WLozA61edmw9VPepkZzqZcH5TB7POyCqZdTBeyQ2lwkPuPI8l/ ++w5gmTuRCISAfBvJgQ+f38ivVsseJjK7k0VTYVablmMrYbqgjEDgXqVGTdPqNSi jqZBlqt7vd2LFdZstp7tQmyPrwpwL34QcnG5hwe0YdvX3TaHnAhukqDScAsugjW/ Gu1EZgt5GQbAE3ITgnCiBEy3s9WF44kbqTOLEbCwRMZ1KIy3jkUlH8+UdPN7VNIf Kg+4HCDoWO0= -----END CERTIFICATE----- lasso-2.8.2/tests/data/lecp1-ssl/PaxHeaders/private-key-raw.pem0000644000000000000000000000013113766621500021337 xustar0029 mtime=1608196928.94689681 30 atime=1678098071.461500592 30 ctime=1678814321.401955542 lasso-2.8.2/tests/data/lecp1-ssl/private-key-raw.pem0000644000175000017500000000332313766621500024611 0ustar00bdauvergnebdauvergne000000000000000: lecp-jks.keystore 1: tomcat 2: changeit -----BEGIN PRIVATE KEY----- MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQD9Lz3p+ZRdOkHPMMrbuX5iGtoU p9+LNet8eWqLHR1lW8ww1lhDpWhNFsr2W+5ADXfKQokiTCqSzr/KXWZ5AAFQDAXY33uqo4KmhmxO Ciue+X9eMgAUeKgH2RRS0L/EZABnI9bNzWuL3mhUjedj43Ag0r+KFSLYWu0YYYI4gDTWr2Wv4vcR ceWxmW1LBvj3ByjJ4ib4YCcF4oWdHkDQilN8vRB0kgsaIVefFlhU/2LwmInJkmGjFJQG2Ce0rYP8 dzrSdiK86z5DFKi3C5o9tNrdlrls9eL37b9dC2uCs5zOTaBCYo5G4fNvh4bAEe36KcaZX7Qpj+5h f97vIf84ByKJAgMBAAECggEBAPF9lAKN6bOak5a6JWO65A9TKVu2W4R+46QQc01JcfZxvqt+ZyXu qTOOX/zn5rH1pqKnIAI0wA7TYR/2Qn17QcVGEnWvhFdYKpAHe1pcXQr/UztXWbgs9ai2p6nuLlt2 PuQhzQrzunbopn6v81rVXugP3F4qltfism8k4n5d2whA0oRwI4vpdoCPBUd/51BaJy7HCxBklxVQ /9OtcPvA8Zw5yD6qSdg+3M1ALij7nsXpjva+MUI+0aYXMTmLhH7pC1gs7zo/EqghcoiVAbNvTrPk t3sjClic4anlJ9Nq1aHG+6tTpvfOopA1hPpsJO0fSyn+JD0Y+RAaKp1pfmINarkCgYEA/sXWvEeg Mm75+flTxWr3TxjHBjhul3k/qp6MaeVDGXmcGaYzA1V4IdEifRz1kAF3ZLy3621Z7TSM5Zlg9t+A lRO63f18Bz3uDG7eW6cMeVgq/sZoi0Shc4/eKLoV+b1QulrrcOQRjBerhnufwW4m3WByRc3iSYQO Eaf4i1afEWMCgYEA/mdxzW0SY3ubgNLOFHIueBReNdfWVkfLBq5Hg7aQMR7bUy3Mev4dovQCu6fI 7AQSW2C4poyuX83w94TqOMnJ9T9AH7zHiAux25AmdAfsMwSI1UumU4hhyY7iHMjiI71Vd1yBPL3+ lM5nI73RuJgmKZ7Y2NDM2ZFU5NxWqGz11iMCgYBbhcixVG25EGLeqPGuDtIO6RC+LFGWOqljapd4 hzKGmUg5cpoKzY5dX5qrJVcVx2EToDPV8C+I5gLjjCjoJrwzUaYkjyYaF+ZHMyDP/f+eK80uPypZ NWtmbz1YlhjE4Xx5paXEpTmkgPBOXGS0gRSXHEmQx/hNfpHrR9MigxibjwKBgQCGpzoVASY6gbJM /UcWi1kNNbqnxRYtlNJhNt2jWX34gdyUqikQ8G+/UGgh6yztvzn4I7mYbd3d16MzX6aZaDT9Gf1W zxTNbWM2U5YG1Cqw1jWWr/PZQtZ/WKFVmv4W7J/QDaZaADY/jQAKau4WRnHslacxG1NR1RqaCAXW H9X/AQKBgQCYTOzm8ziKH9xgusVg2pwe4UE3E9n6IK5Jl6Z9Ymwi1vXYd1Vv07X1v8CrEyhqT/77 YaMpjdbGnGJLGf5otASgNT6KZ7OimGSzTRb/v0NjYZFu7IMlK76yjCNFdNMMcm8rlqNS0mkYiuOG xNLFlYPrUE56RApavuNIxJYleQ8v3Q== -----END PRIVATE KEY----- lasso-2.8.2/tests/data/PaxHeaders/sp9-1024-saml20000644000000000000000000000013114050545511016032 xustar0029 mtime=1621281609.27130786 30 atime=1678814326.421984131 30 ctime=1678814321.517956201 lasso-2.8.2/tests/data/sp9-1024-saml2/0000755000175000017500000000000014050545511021360 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tests/data/sp9-1024-saml2/PaxHeaders/metadata.xml0000644000000000000000000000013114050545511020411 xustar0029 mtime=1621281609.27130786 30 atime=1678098071.573501472 30 ctime=1678814321.517956201 lasso-2.8.2/tests/data/sp9-1024-saml2/metadata.xml0000644000175000017500000000734414050545511023672 0ustar00bdauvergnebdauvergne00000000000000 MIICHjCCAYegAwIBAgIJAKCn8J6jYs6kMA0GCSqGSIb3DQEBBQUAMBUxEzARBgNVBAoTCkVudHJvdXZlcnQwHhcNMTEwMTE5MjAxNDE2WhcNMTEwMjE4MjAxNDE2WjAVMRMwEQYDVQQKEwpFbnRyb3V2ZXJ0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDGI2g/WLmdODxhiraxFklG09r6C/yjX06zTt1MapA5+eIcEg2Hp+elCwcCogL1ZK9/vYlU2yzIGgxV5mVVUybgdQuIvmEi8BlWM4HM5np97J/g6r41vG5auA4ve1XpF11rVO9Ru1LIQwMaHXJVf0yojNLH6VOmJU3GDELjKB+VLwIDAQABo3YwdDAdBgNVHQ4EFgQUssAKE1M50yrgLpqoFzRbSOeZ41swRQYDVR0jBD4wPIAUssAKE1M50yrgLpqoFzRbSOeZ41uhGaQXMBUxEzARBgNVBAoTCkVudHJvdXZlcnSCCQCgp/Ceo2LOpDAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBABPxbVQuuVzkfZFmeUJHS6WSvTKoEfJKXm7xLB9ChtPixZkPN6XXYaV0zx6cIwiUBi97ijcMU4W/+s5Xn4rB/HJ2UWPlObpjZOxdl1eGsrTw8l7LWPls1B0b0wYms32q6bDVwPWVlDqc5Z13b9M38bNF5SUdZmcRJzk3LKXZ9nkA MIICHjCCAYegAwIBAgIJAKCn8J6jYs6kMA0GCSqGSIb3DQEBBQUAMBUxEzARBgNVBAoTCkVudHJvdXZlcnQwHhcNMTEwMTE5MjAxNDE2WhcNMTEwMjE4MjAxNDE2WjAVMRMwEQYDVQQKEwpFbnRyb3V2ZXJ0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDGI2g/WLmdODxhiraxFklG09r6C/yjX06zTt1MapA5+eIcEg2Hp+elCwcCogL1ZK9/vYlU2yzIGgxV5mVVUybgdQuIvmEi8BlWM4HM5np97J/g6r41vG5auA4ve1XpF11rVO9Ru1LIQwMaHXJVf0yojNLH6VOmJU3GDELjKB+VLwIDAQABo3YwdDAdBgNVHQ4EFgQUssAKE1M50yrgLpqoFzRbSOeZ41swRQYDVR0jBD4wPIAUssAKE1M50yrgLpqoFzRbSOeZ41uhGaQXMBUxEzARBgNVBAoTCkVudHJvdXZlcnSCCQCgp/Ceo2LOpDAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBABPxbVQuuVzkfZFmeUJHS6WSvTKoEfJKXm7xLB9ChtPixZkPN6XXYaV0zx6cIwiUBi97ijcMU4W/+s5Xn4rB/HJ2UWPlObpjZOxdl1eGsrTw8l7LWPls1B0b0wYms32q6bDVwPWVlDqc5Z13b9M38bNF5SUdZmcRJzk3LKXZ9nkA urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress Example SAML 2.0 metadatas lasso-2.8.2/tests/data/sp9-1024-saml2/PaxHeaders/private-key.pem0000644000000000000000000000013213766621500021061 xustar0030 mtime=1608196928.958896909 30 atime=1678098071.573501472 30 ctime=1678814321.517956201 lasso-2.8.2/tests/data/sp9-1024-saml2/private-key.pem0000644000175000017500000000156713766621500024342 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN RSA PRIVATE KEY----- MIICXQIBAAKBgQDGI2g/WLmdODxhiraxFklG09r6C/yjX06zTt1MapA5+eIcEg2H p+elCwcCogL1ZK9/vYlU2yzIGgxV5mVVUybgdQuIvmEi8BlWM4HM5np97J/g6r41 vG5auA4ve1XpF11rVO9Ru1LIQwMaHXJVf0yojNLH6VOmJU3GDELjKB+VLwIDAQAB AoGAKqJ3zhmzZwcwxvRoN1bKUblIh0GJDUZ20tKHf+f2PONuKgggbS5OBA+JZKGj 7VXLBbutD1tSGYSxXtKCv4dy97xDWlsWmc9AhWss0i7bYMQ+bps0buCtLclrBbOA 5N9/NU1j2E+V7CStQ8C7P3DbEjYuwm9lB+A85HFaONXhT5ECQQDzAKw8j/+6M5Ib asuO+Vj7WIelVaXJ2pjLrf78pQInYt1elO/bqqi4AMJu953OIY7dlDKlu1BPd+9J 5/lrw6q7AkEA0LxtXRfiJrcZdQf8X6Uq51hceQSbnkWB+d4CREMtAK2tpbsb/kJc INvG2ncVb0MUbv/6jrlHZf7/oua6PpbaHQJBANpHT2+zVd33dxXjr2gFeTWFh4sv TRXtovTKndJpkm64surD1FU4jgeCvySYjorbwA4vkfMnN/O6Yxq7ImP3xgMCQQDP TYOTxAd/CbNHrnGvj7qnXfMg4TmoG0H1pM49ezWzicl+YfBwOPmETKEWENSB1m3x u1nc6xeErZa280yeonTlAkAHzm/BUqAY8I1IMQMcNn4db9CJK3pRHRHjPxYMClWK TPsLK5iak13+EZ6r9Lej/i1J4cujVh7ijA7J9zH+01Ve -----END RSA PRIVATE KEY----- lasso-2.8.2/tests/data/PaxHeaders/sp11-multikey-saml20000644000000000000000000000013213766621500017367 xustar0030 mtime=1608196928.958896909 30 atime=1678814326.421984131 30 ctime=1678814321.461955883 lasso-2.8.2/tests/data/sp11-multikey-saml2/0000755000175000017500000000000013766621500022714 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tests/data/sp11-multikey-saml2/PaxHeaders/certificate-after-rollover.pem0000644000000000000000000000013213766621500025372 xustar0030 mtime=1608196928.958896909 30 atime=1678098071.513501001 30 ctime=1678814321.461955883 lasso-2.8.2/tests/data/sp11-multikey-saml2/certificate-after-rollover.pem0000644000175000017500000000244213766621500030644 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN CERTIFICATE----- MIIDnjCCAoagAwIBAgIBATANBgkqhkiG9w0BAQUFADBUMQswCQYDVQQGEwJGUjEP MA0GA1UECBMGRnJhbmNlMQ4wDAYDVQQHEwVQYXJpczETMBEGA1UEChMKRW50cm91 dmVydDEPMA0GA1UEAxMGRGFtaWVuMB4XDTA2MTAyNzA5MDc1NFoXDTExMTAyNjA5 MDc1NFowVDELMAkGA1UEBhMCRlIxDzANBgNVBAgTBkZyYW5jZTEOMAwGA1UEBxMF UGFyaXMxEzARBgNVBAoTCkVudHJvdXZlcnQxDzANBgNVBAMTBkRhbWllbjCCASIw DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM06Hx6VgHYR9wUf/tZVVTRkVWNq h9x+PvHA2qH4OYMuqGs4Af6lU2YsZvnrmRdcFWv0+UkdAgXhReCWAZgtB1pd/W9m 6qDRldCCyysow6xPPKRz/pOTwRXm/fM0QGPeXzwzj34BXOIOuFu+n764vKn18d+u uVAEzk1576pxTp4pQPzJfdNLrLeQ8vyCshoFU+MYJtp1UA+h2JoO0Y8oGvywbUxH ioHN5PvnzObfAM4XaDQohmfxM9Uc7Wp4xKAc1nUq5hwBrHpjFMRSz6UCfMoJSGIi +3xJMkNCjL0XEw5NKVc5jRKkzSkN5j8KTM/k1jPPsDHPRYzbWWhnNtd6JlkCAwEA AaN7MHkwCQYDVR0TBAIwADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0 ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFP2WWMDShux3iF74+SoO1xf6qhqaMB8G A1UdIwQYMBaAFGjl6TRXbQDHzSlZu+e8VeBaZMB5MA0GCSqGSIb3DQEBBQUAA4IB AQAZ/imK7UMognXbs5RfSB8cMW6iNAI+JZqe9XWjvtmLfIIPbHM96o953SiFvrvQ BZjGmmPMK3UH29cjzDx1R/RQaYTyMrHyTePLh3BMd5mpJ/9eeJCSxPzE2ECqWRUa pkjukecFXqmRItwgTxSIUE9QkpzvuQRb268PwmgroE0mwtiREADnvTFkLkdiEMew fiYxZfJJLPBqwlkw/7f1SyzXoPXnz5QbNwDmrHelga6rKSprYKb3pueqaIe8j/AP NC1/bzp8cGOcJ88BD5+Ny6qgPVCrMLE5twQumJ12V3SvjGNtzFBvg2c/9S5OmVqR LlTxKnCrWAXftSm1rNtewTsF -----END CERTIFICATE----- lasso-2.8.2/tests/data/sp11-multikey-saml2/PaxHeaders/private-key-before-rollover.pem0000644000000000000000000000013213766621500025511 xustar0030 mtime=1608196928.958896909 30 atime=1678098071.517501032 30 ctime=1678814321.461955883 lasso-2.8.2/tests/data/sp11-multikey-saml2/private-key-before-rollover.pem0000644000175000017500000000156713766621500030772 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN RSA PRIVATE KEY----- MIICXQIBAAKBgQDGI2g/WLmdODxhiraxFklG09r6C/yjX06zTt1MapA5+eIcEg2H p+elCwcCogL1ZK9/vYlU2yzIGgxV5mVVUybgdQuIvmEi8BlWM4HM5np97J/g6r41 vG5auA4ve1XpF11rVO9Ru1LIQwMaHXJVf0yojNLH6VOmJU3GDELjKB+VLwIDAQAB AoGAKqJ3zhmzZwcwxvRoN1bKUblIh0GJDUZ20tKHf+f2PONuKgggbS5OBA+JZKGj 7VXLBbutD1tSGYSxXtKCv4dy97xDWlsWmc9AhWss0i7bYMQ+bps0buCtLclrBbOA 5N9/NU1j2E+V7CStQ8C7P3DbEjYuwm9lB+A85HFaONXhT5ECQQDzAKw8j/+6M5Ib asuO+Vj7WIelVaXJ2pjLrf78pQInYt1elO/bqqi4AMJu953OIY7dlDKlu1BPd+9J 5/lrw6q7AkEA0LxtXRfiJrcZdQf8X6Uq51hceQSbnkWB+d4CREMtAK2tpbsb/kJc INvG2ncVb0MUbv/6jrlHZf7/oua6PpbaHQJBANpHT2+zVd33dxXjr2gFeTWFh4sv TRXtovTKndJpkm64surD1FU4jgeCvySYjorbwA4vkfMnN/O6Yxq7ImP3xgMCQQDP TYOTxAd/CbNHrnGvj7qnXfMg4TmoG0H1pM49ezWzicl+YfBwOPmETKEWENSB1m3x u1nc6xeErZa280yeonTlAkAHzm/BUqAY8I1IMQMcNn4db9CJK3pRHRHjPxYMClWK TPsLK5iak13+EZ6r9Lej/i1J4cujVh7ijA7J9zH+01Ve -----END RSA PRIVATE KEY----- lasso-2.8.2/tests/data/sp11-multikey-saml2/PaxHeaders/certificate-before-rollover.pem0000644000000000000000000000013213766621500025533 xustar0030 mtime=1608196928.958896909 30 atime=1678098071.517501032 30 ctime=1678814321.461955883 lasso-2.8.2/tests/data/sp11-multikey-saml2/certificate-before-rollover.pem0000644000175000017500000000143213766621500031003 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN CERTIFICATE----- MIICHjCCAYegAwIBAgIJAKCn8J6jYs6kMA0GCSqGSIb3DQEBBQUAMBUxEzARBgNV BAoTCkVudHJvdXZlcnQwHhcNMTEwMTE5MjAxNDE2WhcNMTEwMjE4MjAxNDE2WjAV MRMwEQYDVQQKEwpFbnRyb3V2ZXJ0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB gQDGI2g/WLmdODxhiraxFklG09r6C/yjX06zTt1MapA5+eIcEg2Hp+elCwcCogL1 ZK9/vYlU2yzIGgxV5mVVUybgdQuIvmEi8BlWM4HM5np97J/g6r41vG5auA4ve1Xp F11rVO9Ru1LIQwMaHXJVf0yojNLH6VOmJU3GDELjKB+VLwIDAQABo3YwdDAdBgNV HQ4EFgQUssAKE1M50yrgLpqoFzRbSOeZ41swRQYDVR0jBD4wPIAUssAKE1M50yrg LpqoFzRbSOeZ41uhGaQXMBUxEzARBgNVBAoTCkVudHJvdXZlcnSCCQCgp/Ceo2LO pDAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBABPxbVQuuVzkfZFmeUJH S6WSvTKoEfJKXm7xLB9ChtPixZkPN6XXYaV0zx6cIwiUBi97ijcMU4W/+s5Xn4rB /HJ2UWPlObpjZOxdl1eGsrTw8l7LWPls1B0b0wYms32q6bDVwPWVlDqc5Z13b9M3 8bNF5SUdZmcRJzk3LKXZ9nkA -----END CERTIFICATE----- lasso-2.8.2/tests/data/sp11-multikey-saml2/PaxHeaders/metadata-after-rollover.xml0000644000000000000000000000013213766621500024707 xustar0030 mtime=1608196928.958896909 30 atime=1678098071.517501032 30 ctime=1678814321.461955883 lasso-2.8.2/tests/data/sp11-multikey-saml2/metadata-after-rollover.xml0000644000175000017500000001035613766621500030164 0ustar00bdauvergnebdauvergne00000000000000 MIICHjCCAYegAwIBAgIJAKCn8J6jYs6kMA0GCSqGSIb3DQEBBQUAMBUxEzARBgNV BAoTCkVudHJvdXZlcnQwHhcNMTEwMTE5MjAxNDE2WhcNMTEwMjE4MjAxNDE2WjAV MRMwEQYDVQQKEwpFbnRyb3V2ZXJ0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB gQDGI2g/WLmdODxhiraxFklG09r6C/yjX06zTt1MapA5+eIcEg2Hp+elCwcCogL1 ZK9/vYlU2yzIGgxV5mVVUybgdQuIvmEi8BlWM4HM5np97J/g6r41vG5auA4ve1Xp F11rVO9Ru1LIQwMaHXJVf0yojNLH6VOmJU3GDELjKB+VLwIDAQABo3YwdDAdBgNV HQ4EFgQUssAKE1M50yrgLpqoFzRbSOeZ41swRQYDVR0jBD4wPIAUssAKE1M50yrg LpqoFzRbSOeZ41uhGaQXMBUxEzARBgNVBAoTCkVudHJvdXZlcnSCCQCgp/Ceo2LO pDAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBABPxbVQuuVzkfZFmeUJH S6WSvTKoEfJKXm7xLB9ChtPixZkPN6XXYaV0zx6cIwiUBi97ijcMU4W/+s5Xn4rB /HJ2UWPlObpjZOxdl1eGsrTw8l7LWPls1B0b0wYms32q6bDVwPWVlDqc5Z13b9M3 8bNF5SUdZmcRJzk3LKXZ9nkA MIIDnjCCAoagAwIBAgIBATANBgkqhkiG9w0BAQUFADBUMQswCQYDVQQGEwJGUjEP MA0GA1UECBMGRnJhbmNlMQ4wDAYDVQQHEwVQYXJpczETMBEGA1UEChMKRW50cm91 dmVydDEPMA0GA1UEAxMGRGFtaWVuMB4XDTA2MTAyNzA5MDc1NFoXDTExMTAyNjA5 MDc1NFowVDELMAkGA1UEBhMCRlIxDzANBgNVBAgTBkZyYW5jZTEOMAwGA1UEBxMF UGFyaXMxEzARBgNVBAoTCkVudHJvdXZlcnQxDzANBgNVBAMTBkRhbWllbjCCASIw DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM06Hx6VgHYR9wUf/tZVVTRkVWNq h9x+PvHA2qH4OYMuqGs4Af6lU2YsZvnrmRdcFWv0+UkdAgXhReCWAZgtB1pd/W9m 6qDRldCCyysow6xPPKRz/pOTwRXm/fM0QGPeXzwzj34BXOIOuFu+n764vKn18d+u uVAEzk1576pxTp4pQPzJfdNLrLeQ8vyCshoFU+MYJtp1UA+h2JoO0Y8oGvywbUxH ioHN5PvnzObfAM4XaDQohmfxM9Uc7Wp4xKAc1nUq5hwBrHpjFMRSz6UCfMoJSGIi +3xJMkNCjL0XEw5NKVc5jRKkzSkN5j8KTM/k1jPPsDHPRYzbWWhnNtd6JlkCAwEA AaN7MHkwCQYDVR0TBAIwADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0 ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFP2WWMDShux3iF74+SoO1xf6qhqaMB8G A1UdIwQYMBaAFGjl6TRXbQDHzSlZu+e8VeBaZMB5MA0GCSqGSIb3DQEBBQUAA4IB AQAZ/imK7UMognXbs5RfSB8cMW6iNAI+JZqe9XWjvtmLfIIPbHM96o953SiFvrvQ BZjGmmPMK3UH29cjzDx1R/RQaYTyMrHyTePLh3BMd5mpJ/9eeJCSxPzE2ECqWRUa pkjukecFXqmRItwgTxSIUE9QkpzvuQRb268PwmgroE0mwtiREADnvTFkLkdiEMew fiYxZfJJLPBqwlkw/7f1SyzXoPXnz5QbNwDmrHelga6rKSprYKb3pueqaIe8j/AP NC1/bzp8cGOcJ88BD5+Ny6qgPVCrMLE5twQumJ12V3SvjGNtzFBvg2c/9S5OmVqR LlTxKnCrWAXftSm1rNtewTsF urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress Example SAML 2.0 metadatas lasso-2.8.2/tests/data/sp11-multikey-saml2/PaxHeaders/private-key-after-rollover.pem0000644000000000000000000000013213766621500025350 xustar0030 mtime=1608196928.958896909 30 atime=1678098071.517501032 30 ctime=1678814321.461955883 lasso-2.8.2/tests/data/sp11-multikey-saml2/private-key-after-rollover.pem0000644000175000017500000000321313766621500030617 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN RSA PRIVATE KEY----- MIIEowIBAAKCAQEAzTofHpWAdhH3BR/+1lVVNGRVY2qH3H4+8cDaofg5gy6oazgB /qVTZixm+euZF1wVa/T5SR0CBeFF4JYBmC0HWl39b2bqoNGV0ILLKyjDrE88pHP+ k5PBFeb98zRAY95fPDOPfgFc4g64W76fvri8qfXx3665UATOTXnvqnFOnilA/Ml9 00ust5Dy/IKyGgVT4xgm2nVQD6HYmg7Rjyga/LBtTEeKgc3k++fM5t8AzhdoNCiG Z/Ez1RztanjEoBzWdSrmHAGsemMUxFLPpQJ8yglIYiL7fEkyQ0KMvRcTDk0pVzmN EqTNKQ3mPwpMz+TWM8+wMc9FjNtZaGc213omWQIDAQABAoIBAEPj5keHzWdBqiXX 38WnlPgv+M9afndCjDANTEYoh14OIUjWzlIe/ufd6HLkrVA89hkwgQbewbyQOT2C YiSlQLl0PlKMCTIKIzVHD07HvXNTAwykEqNfTZChSYEa1/Ixre+MXvugF8nwdKxk 8xN0qXTQF6OXeVYvQNAAdng743YON4ubqKlEezIwnfG/jcoZrGkiTpx+k1JXJsZN 4dHKFP12RRhUTGjaOkBo41w8GNKQLFpy1vqAOYMyi1SJcrwpAu3H0iQug9SylQaM bFjt8j/m13gu3zXIJbi8xbyg3nqpxl9dxcZG/cDA9z2tLu/h3G3nPq7CXvkZxmjl ePvOCwECgYEA9zbwYMtd8tT3PHtrCtjwkfxV0dvMmfNw/rRT4ShWtKLmgX+K9nz/ T4qpbehz4z7OvsLjQ6Bt6wjMNMw9SEBeEMyDVTpmzSD2PowARegmeLX4CsilqHHl /AMYUtywEQ2f65/CWPiMIt8mLnEyJ/dsyVLpuzGUNNt34Yaqpu2qXnUCgYEA1IUy PObmTh3I8ZyESyGhbu2TYs0A8Zy6eTIAv0ijOIpmUykzjE5pR9sB3nYEd4GTHPEv hF6SWfNIDDr83TqThJYzkFyXMCxiVLH55U42wlsvwp4jTnOI3K/7Y7U/lEmBlgcl JbIIv1t9okg3+Kuu4i7iB6JR89cSO/Wfcdu/c9UCgYAHE5eF7cxeqyH4pT/HK7aX NzXtr/EHZySQ5fCQvWrd+NvIUTJVI/ba/AklkEXg92dLpqCCyxDabYIK8N3AN7d5 m6EWy3kt3geueqt3VNHlGrBi/qNfUwNWV3BWzuJrWox9XjFeAp9gUCrzoWHiKv7+ NFVkemLXsICaABTaemsqEQKBgQDJJ4n1u1gieG7Kwqs1sg9rP9RRoFlUWFTogjvS 0p4r1lQkQstX8qAUM2gBeROhSjRFIMUpNZqxKWT4rpzJibg3tzP3YKx6HIi2Qf+W 3AFY1ZbPT397sj/JI4l/Rv93DFxr9TdkBq/g8GhqQpE3/sj5rgaj0zBe7SOFPWg+ DRGaQQKBgEEcSF5KmpIHnhi3WlfGiEtx3kcD63orKME0YYA5BM6wnmRT4QiSw+qj i7ljrKGSbmdMFC3ArM42/k2lXYpVLsYWmyaRYSgbdowxLM1XxDJMFIPR2uG6N+vi HzWkRxi2SXKU42vfs5eA0itHvQP2DfUx8VuvtwVbOxDGgntYia70 -----END RSA PRIVATE KEY----- lasso-2.8.2/tests/data/sp11-multikey-saml2/PaxHeaders/metadata-before-rollover.xml0000644000000000000000000000013213766621500025050 xustar0030 mtime=1608196928.958896909 30 atime=1678098071.517501032 30 ctime=1678814321.461955883 lasso-2.8.2/tests/data/sp11-multikey-saml2/metadata-before-rollover.xml0000644000175000017500000001035613766621500030325 0ustar00bdauvergnebdauvergne00000000000000 MIICHjCCAYegAwIBAgIJAKCn8J6jYs6kMA0GCSqGSIb3DQEBBQUAMBUxEzARBgNV BAoTCkVudHJvdXZlcnQwHhcNMTEwMTE5MjAxNDE2WhcNMTEwMjE4MjAxNDE2WjAV MRMwEQYDVQQKEwpFbnRyb3V2ZXJ0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB gQDGI2g/WLmdODxhiraxFklG09r6C/yjX06zTt1MapA5+eIcEg2Hp+elCwcCogL1 ZK9/vYlU2yzIGgxV5mVVUybgdQuIvmEi8BlWM4HM5np97J/g6r41vG5auA4ve1Xp F11rVO9Ru1LIQwMaHXJVf0yojNLH6VOmJU3GDELjKB+VLwIDAQABo3YwdDAdBgNV HQ4EFgQUssAKE1M50yrgLpqoFzRbSOeZ41swRQYDVR0jBD4wPIAUssAKE1M50yrg LpqoFzRbSOeZ41uhGaQXMBUxEzARBgNVBAoTCkVudHJvdXZlcnSCCQCgp/Ceo2LO pDAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBABPxbVQuuVzkfZFmeUJH S6WSvTKoEfJKXm7xLB9ChtPixZkPN6XXYaV0zx6cIwiUBi97ijcMU4W/+s5Xn4rB /HJ2UWPlObpjZOxdl1eGsrTw8l7LWPls1B0b0wYms32q6bDVwPWVlDqc5Z13b9M3 8bNF5SUdZmcRJzk3LKXZ9nkA MIIDnjCCAoagAwIBAgIBATANBgkqhkiG9w0BAQUFADBUMQswCQYDVQQGEwJGUjEP MA0GA1UECBMGRnJhbmNlMQ4wDAYDVQQHEwVQYXJpczETMBEGA1UEChMKRW50cm91 dmVydDEPMA0GA1UEAxMGRGFtaWVuMB4XDTA2MTAyNzA5MDc1NFoXDTExMTAyNjA5 MDc1NFowVDELMAkGA1UEBhMCRlIxDzANBgNVBAgTBkZyYW5jZTEOMAwGA1UEBxMF UGFyaXMxEzARBgNVBAoTCkVudHJvdXZlcnQxDzANBgNVBAMTBkRhbWllbjCCASIw DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM06Hx6VgHYR9wUf/tZVVTRkVWNq h9x+PvHA2qH4OYMuqGs4Af6lU2YsZvnrmRdcFWv0+UkdAgXhReCWAZgtB1pd/W9m 6qDRldCCyysow6xPPKRz/pOTwRXm/fM0QGPeXzwzj34BXOIOuFu+n764vKn18d+u uVAEzk1576pxTp4pQPzJfdNLrLeQ8vyCshoFU+MYJtp1UA+h2JoO0Y8oGvywbUxH ioHN5PvnzObfAM4XaDQohmfxM9Uc7Wp4xKAc1nUq5hwBrHpjFMRSz6UCfMoJSGIi +3xJMkNCjL0XEw5NKVc5jRKkzSkN5j8KTM/k1jPPsDHPRYzbWWhnNtd6JlkCAwEA AaN7MHkwCQYDVR0TBAIwADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0 ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFP2WWMDShux3iF74+SoO1xf6qhqaMB8G A1UdIwQYMBaAFGjl6TRXbQDHzSlZu+e8VeBaZMB5MA0GCSqGSIb3DQEBBQUAA4IB AQAZ/imK7UMognXbs5RfSB8cMW6iNAI+JZqe9XWjvtmLfIIPbHM96o953SiFvrvQ BZjGmmPMK3UH29cjzDx1R/RQaYTyMrHyTePLh3BMd5mpJ/9eeJCSxPzE2ECqWRUa pkjukecFXqmRItwgTxSIUE9QkpzvuQRb268PwmgroE0mwtiREADnvTFkLkdiEMew fiYxZfJJLPBqwlkw/7f1SyzXoPXnz5QbNwDmrHelga6rKSprYKb3pueqaIe8j/AP NC1/bzp8cGOcJ88BD5+Ny6qgPVCrMLE5twQumJ12V3SvjGNtzFBvg2c/9S5OmVqR LlTxKnCrWAXftSm1rNtewTsF urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress Example SAML 2.0 metadatas lasso-2.8.2/tests/data/PaxHeaders/user4-la0000644000000000000000000000013213766621500015362 xustar0030 mtime=1608196928.962896942 30 atime=1678814326.421984131 30 ctime=1678814321.537956316 lasso-2.8.2/tests/data/user4-la/0000755000175000017500000000000013766621500020707 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tests/data/user4-la/PaxHeaders/public-key.pem0000644000000000000000000000013213766621500020206 xustar0030 mtime=1608196928.962896942 30 atime=1678098071.593501629 30 ctime=1678814321.537956316 lasso-2.8.2/tests/data/user4-la/public-key.pem0000644000175000017500000000070313766621500023456 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyRyg0MZC6L6gEb/uYot1 63KC0kO4+nc9K7xh3+D0esIdFVkAfD3enmrXj8+/OMOaGZMbJ2zJZFvI3CnyZeQe YmGnmcw5vQzlQ9U4oxCmDRKQeb6H3gGLIpehsdgSQm3ilnuJsj1oPN2kUCjGvZ07 w652Qf4Pl3mWxZkpvt8zd1tr9Lw5usDibgsTcAIL/HZa+kGCddEuyMhwOrN6A90D TyWrRo2Xir/Szh2MJokDehtNgjz6zgDfVOqA1GA4Z8pzsdzdn7KvfyUoT8hVBSbG ET4FxLDwBx5sK6LwQSdIv5RJLb9VrGhEgDSJ/n3rl7tEbA0VG7V4uzIME+rWlfuX zwIDAQAB -----END PUBLIC KEY----- lasso-2.8.2/tests/data/user4-la/PaxHeaders/all.p120000644000000000000000000000013213766621500016533 xustar0030 mtime=1608196928.962896942 30 atime=1678098071.593501629 30 ctime=1678814321.537956316 lasso-2.8.2/tests/data/user4-la/all.p120000644000175000017500000001023713766621500022006 0ustar00bdauvergnebdauvergne000000000000000‚›0‚a *†H†÷  ‚R‚N0‚J0‚ ‡ *†H†÷  ‚ x0‚ t0‚ m *†H†÷ 0 *†H†÷  0ë ŽÒš~&€‚ @C1DK¨V€ª+,.Œ•Ø,JÁÝr†’Zœ7éÆŠ5ýÿñ·ϲU_ £mØ–"\C—;Éô¿^ˆÃý÷Lu¨±R“Ž'â4Á;Å»DdCÆÁC]×¢ÂH°[Jóª6ó|;é/Ë‚³¶÷’qQ¢Mš¾ˆ‡ùúB¨¨¯*ói5KHYW¾êVÉ©nƒlz<¡ýuKêAæîø<,¯,Ø ¦šÍÇGP%}ó ;ˆËå™nî®Óâ0–±VôPÔJëD÷šÂ{¿Ç“ÖN%LûPÔ&æè©²SÌ8)†°8‘va¼÷€Ðê¿2O9MâÑgþÖÝ{l ZÃKÇÉëñdÞ¤&­ä7À Þ%–mk"æJÄÁ'Áª>é@Ëf1<@ø&‚R\ú¡)‚œ r2u\ýK#s‘Ðè•·!e]òÑ ÑÌæ}%@¡{UÙêQiáËéÊd]y 6°& Õ«Û\î @Ù;ú³˜/ Üä䔋e=6=x”Ç\«¹ &Rõ6C° hXê¹OŠ£ª‹äd3ÞÝ®rlc[û5{+xÍß PºF—®L´Ìÿ‚'í3óiÍÕŒ(vw)í†HÇ%ƒ›Yû#Æ'>úwNª$ó0+Rx©ÕN[ñæŠÀÁ-o±Ód£æ ̨æ¨sgåúyBW¨¤6H’ð°Æ<òÆ4ÆRÍÂÙ!éYP˜Ðƒ{V%ÊxýàÇHæ½Ú¬= ºó³]ˆÚc’AIí`–#MÉ':« ža˜ØàÏ|~¾4V´jfPUmAfZ6¨òýó’-*ºöÓEß¾Uw3I`éÍ0SdÉA½Ìg=üO‚KpL{Œ6ô5 í©‹x øp±i_hœ ƒ ætn¥+ëïPÏ8“\ö8º• 2ë2¬ƒ£êwáî‹a|A†9+9Y@ Éù£LŽžM?BŠÅY+¬øxëòÁ5T-ƒ~òY~ÎH;0š¿¤ää<´Ø,`ôf‘!‰>¿Ýs/å?-O« ÎBQz}?vø“3,ìäÀ´cÈÝÈ€qŸ™³Èñu­®µVí”q/T`T*Ù³šœn3VÚóW@ÀùÍ Ú9êÏQi¤›—éVìM»ü)DÏ/ZQ®Ùœ&<ž tÙ”n5t—?¥uõºT€=¨ê¾Äc¸P#lÇÁN¦¶ô«~ÖyÖtÍÙJjši¢îB¥ ôáK=ûUÝ$Õ±àHjaã´»ª²âöÒµf7Õ…ö´úBlu­(œú*KXñ1'¾¾y–ÚOÉœY½1%9Á® 'BŠ"{"ÏÂ58š}bÚ'ŒÙ}Òû*¿úÑÔ#xkåQßšC×PœÃ êéù§˜Èë\TÖï8¬©-IÏT.܃Ê)wŠ¥ìâ(¶ ~â!5ö‡ætÆy ¹Ü ‹y@/† TÖêü‘Rk©ßà³5ª ÌR Sð|e(õa•ÊÆ@ª·ž®À=-NP%–,¸s³fn›k)0¨å_‘VXìm‰þ%Eú(Zý„ݘüœÈ¤¸Q‰Ÿ½ÔCÊf=Km§×OÁEhµÖ´Â Û¢AsÓôß¿½¾íÁæk¤ïþóoø‘½ ؃«†õ5Ÿ§t ·öáØ'ÒíÏÜþA? ¤Wü¼q¯8=Á¢Lb·VG%¿~^¿Nbj£ˆÀØ÷›g‰Â!Å ôÕkêÁÏÓÔš³6£òìsøýÝ$Ú¶ ߆‚8ZÉOçt¤¡#òçmÔ»RP(òãR±yŸ =è2®CÆ›uÅ}ÿ@²’`À„JèÎ$•;>0°|Zcy»ˆÔ2÷õ\%½ #ãtnTÌÇO[AB#X,›:á“4å,©W ?ˆííûØE‡\ï/ÚùÊÇ‹nê»C—¶}Z?S¿vƒá—’ü¨’°ÏQÚ“¶”Ù\Ñe2etðuŠ=Ä åß¹ynçk'' sÆÅ@Û¶—¾v±æ‘å²,[À™ÑËA^?\&¨;E2‰Ññ¤QIL9¡j±*å¸yÏÇŸÏùO_aÞ‚¾SÍ{&9¼\OÒSxh z &….ÝÁS†Yw?Æ;îž3kRú¢r¾t¦éNÑ £Ì—§pø³¿‹Ê:á``•u­Î ²l\0ð{ö9Õ ¹oIcK%òµ <±x ½ƒN ìHSÿÝ5g„kùš^NÍo¿– ˜×hé"†Îø&»±B\’;éF{Í8Ü´’€`l'`:méPS€Š‚7íV®¨zöîà.%[KpjIÏBϱsìYë}z¨##Šƒ<^¡¬¢‚E6X¡¡:zN‚ć3®¾TL-–Ìj§û˜³õ‹ìX×ÔUÙœ&-—ýæ­<28ÌGv#Pªßä©:ñ@¶ Èp&Œ›/­îj~eßa/*ùyði=i]'½ðTU€Tx"rãeÚK%¸ý88.ê{¡7Io\ÆqñË뉔ˆcÿŠzXBåC»¢‘ï!;6ßW[ÍH¡:Ë÷¾ Ì£\´$çT¡RA]lY«A9ˆGä±+Cx91ªj1‰ÈÖ¸ž‚RLƒ–uO{€S ÷A³¼â(¯JÔ*(^;K¬Ø¸bæÛm• Ž/1‰¥žw¢;p–nœ×r%0ÀÄ›&l¤v¡øÉ¦€géÒd ºâUóHºÑ¡b®­Q«>è~s7Òþ –Ù¬±ë9F«À¶/2ðös1µ<´Ù´«º]¿í ?T=¶úònÓ:ʾò9·è´Ì9à>ÅÕ?%JoÓÑÀ”|¬©4;¥500ѤÈB2¹or¸¹ŒbWt5gÐÉÓÏK"rEÑŠªC+S5ì… ÚÊ˸­×ÄeÁµG”Ó¹z£Û‘t»’-Tç@‹£ÉŒ{X¤ìu‚èBÏuÉÃ0‚» *†H†÷  ‚¬‚¨0‚¤0‚  *†H†÷   ‚î0‚ê0 *†H†÷  0IÀj™T]O|‚ÈTÃENyz=œÂÂãM/‚ÔªfÍ· ê©ð‡y¥­‚B~ b<Ç]<—…îÞ'ýÔBú5<:¤$7ôpû`Ppp!‘»{k•µ»£¿v1¶Ú})£zàcÔ;ŸTꞌ€º(¤*ñ{®]¶ªë.ë×Ù&WfZ(ñÉôð(fxïé¤×H¸HYýX{ý JØ @<ü ®RÂáEóW\(H*µ•a¶p‘ý)"Idg)ãæŠ-ë‰Yseào–wëãzÕ±XzöOÇóQ‹np[þCê©â< G#îÚÏ¿¿A‚I:]ãä(ZsJü÷—ªV[ú, F êrÉ#u’5êú0ͨãØêêõß·ŽâJkÛ[+¢äCîN(VA–R–Ѿþûï,Ny -?@ˆŸƒtP5JcuuÚè¼o?§À-X(išçºN®ôÛKÍAü`Ò`ZRÆ–\˪ñÆ*M  ¸LL¦XCháÅáO¶üÞ†S%’Û^öܼ€‘Ðýÿ÷u÷‘‹os„ìXëüÒ}¼÷Lù­D‘I“eln Ÿ*ƒ÷wUOSþ|¾ë¬¢§ñˆªï‰„ŠF–¾ï8_m/Äû¨Ú9Ãt™Íù±´ÝrÛÍÕ×g° ‡¸Ø«5Š®üÜ ¾Ÿ‡¡ç\ªXX\{kÇ!0söR/•^7ªà„‚VNù}ƒx€E§Aµ;wœfç*øy \‘CÏBzÉ/7§Bã™ÃÛk"C§£±¶n3À¾´tÁlo³Fb+“J’a+ïøÂë+¥p¿ÃcS [Î×ûãõJŽ¡–#~ÍÊ'÷Ç&ã@|íNÕe,*[ .%=–Š  €tHDŒÚVƒ_ â"q~Sx3}j¹ ð‘þImeÅ.„ÄÖÓ Þ‡š®­ºšÈn¹–íPÖÅ}.õâ& jÒ¯ÖÊñQ¾Òwñ~¥ÊGXÄ÷ÎݘeºŠß“Œð0C˯AñWY.¾>¯œMKBä‰T%’ø˜OŽ ãZåÉhƒRÁM ´Pß‹Þió‰k'§‚)šÖ†Ð5M|$DâàÊ&hüµ¾ã¬ÜdgBežäáH[ûäªß«ZÝ¢¬O§iG±-£õ¡ ð¹ _~áæ7Dʼ½æÄí‘G1Ψˆò¤(R,i‡p䘵R)Ûåâ Jʧȶ.¨Fc–æ1‘3‡Ö6Ô–IP¯²’*÷n ‘Vº¶ƒ°ñ“xÝ.¸D7/lr;ŠÖÃ*.éLÆL¯h‰U¥Ü(ê/ˆÀÞ<¦]9q*­aÈúç·ù Éú–Àa_–ï‚ü}c¬Òë¿ÜÜêqÛ)Ÿ ÷ž'f±D«'«‹k3ÓÍ™©£ÑjÆXëѰsµù'þfšv ¨Äëº0Ò‘(5®™&.Ï$Ê(Ýâ…Ô/㵋(¸é‰ñz´{TíÐ…ÈÅÅÆ‡eWœ»…í åêp*]çô£Ê®3'æ¶‚¸<«¦>*’ ¯ß鿃¯&}h‚²ñéšÅÌù¹ [éiÊf@µ5sQ{šqi’žü<Û4Ò1ž0# *†H†÷  1ÈuGZ¬>4{$…@ž¸Ö÷^ …T0w *†H†÷  1jhEntrouvert Liberty Alliance test user #3 certificate010!0 +¹ŽÈ¿ÝX®¨DðÎç§RÝàëq:µ¼ölasso-2.8.2/tests/data/user4-la/PaxHeaders/jks.keystore0000644000000000000000000000013213766621500020015 xustar0030 mtime=1608196928.962896942 30 atime=1678098071.593501629 30 ctime=1678814321.537956316 lasso-2.8.2/tests/data/user4-la/jks.keystore0000644000175000017500000001130513766621500023265 0ustar00bdauvergnebdauvergne00000000000000þíþílassoþWÂÕ0‚ý0 +*‚éK‘˜Ñˆ÷jçB9±!Òöü/>Á-'—þ*ØØK<ª¾qI?†…B$øJש•`E…ÓBlPßj[Í(:<ö¹’œ3½P@)Þº²e7²/hêHF|÷ V;K k@ôUKúbó>gJˆS+Ò[(a1X%Šu=¾ïWtõ1=üO£oxÀ7ã V—þzÓ/ªúô¥WSKíðMQBr\4:Ž å„Ì×]©IÛD¢·5±¾O+Gé5ÏÛ5G×šŽ¥»g;#lû3åóW¢''l)Ó~ö´Œv”ûÁý»áúÙ« JuØaö'M–+ÛŒÐëX†¥r U³ Dz0(BŽ“s肼\PX×ñÍ:s¡®]ð»~ôp¦þ½Ï™žÒ:yçtQš<Âàw/.¬[ãFWèK–n<º½ï‚í[ùÕŠÛW‰\g[B‚oFºô†üu1Á=–ÁþÃÓÊ0¸ ¹”ù³‹¥v+tˆË±ä+™0ŸjG¿Û0nÈì9}ËÝ_¤›Óþ Qê6᯦HÎ@:òŠAî¦K´9w3 ÌÕzŽ7W¢±ùÚ t¸×ت\ËgŸ5ÒwS‘ ĽR<ÞÒn¹j}ñ7C^ýŽquéŸ$¸ðé4íHždcÆÒ,EÈ΋RY¡M>û’†ÉUõH …å9=õX.50910‚-0‚ 0  *†H†÷ 0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #410U Entrouvert0 040813104425Z 240814104425Z0210 Uuser410U  Entrouvert1 0 UFR0‚"0  *†H†÷ ‚0‚ ‚É ÐÆBè¾ ¿îb‹uër‚ÒC¸úw=+¼aßàôzÂY|=Þžj×Ï¿8Ú“'lÉd[ÈÜ)òeäba§™Ì9½ åCÕ8£¦ y¾‡Þ‹"—¡±ØBmâ–{‰²=h<ݤP(ƽ;îvAþ—y–Å™)¾ß3w[kô¼9ºÀân p üvZúA‚uÑ.ÈÈp:³zÝO%«F—Š¿ÒÎŒ&‰zM‚<úÎßTê€Ô`8gÊs±ÜÝŸ²¯%(OÈU&Æ>İðl+¢ðA'H¿”I-¿U¬hD€4‰þ}ë—»Dl µx»2 êÖ•û—Ï£‚&0‚"0U·&­.©¼ðoø(b½wÜx^q0U#0€S‚…4K8Á%\чثõ>è0 Uÿ00 U€0U%0++0 `†H†øB€0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0C `†H†øB 64Entrouvert Liberty Alliance USER #4 test certificate0  *†H†÷ ‚¯#®P‘õ÷…¬êé‹¡Ay½ƒ(%BíéXNÜßÏ;y²oµ€sÜo#}Güò)­@]£u}ãœñØÂ»ý@ÄNΈµhÑóɵ±ƒGÉÚ)†_A×0ŠÖ¶(B†é6œ5*Y'ìÞFŨ{Odè´9I¬s?-ŸÈèaÙ9s‘v …ú%ýá’8 œ¶Y:FÛèSjCÒÄv%¿2‘²Ö·|OJ< º¶GVEˆ¼&4¨F–xùˆkë”J¸¤[ dQî*².ø?€ü•ﮬ*-šã2ÌȰVã(j|6 Ü=¾Ÿä¬;*7ts7×¾½útH­ÖºµAX.509t0‚p0‚X 0  *†H†÷ 0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #410U Entrouvert0 040813103642Z 290404103642Z0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #410U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚Ô]Kʲ¨äxT·÷GkÐ{ì ÛJ——ÉäêˆÄrPyD»©kaº _$žyÅ‚žÒñÊ”’7³z¸ŒÍXL™ ØÝ' 0iut´esQ]íÜÀ°o {G"™àÂo¸õ$—5²ZàÛ[tÙ‘TmŸ)d»w<b¼M†å–‹¼ËÌ>úE^º}uã}}ÃÆ˜Jmd3A;m°ð¹”w¸XœV bM,>ø†[Œà$àµÍ{ä ºžjbêÚñ&(“ Z±ày£‚C0‚?0US‚…4K8Á%\чثõ>è0U#0€S‚…4K8Á%\чثõ>è0Uÿ0ÿ0 U0*U%#0!+ +‚7  `†H†øB0 `†H†øB0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0P `†H†øB CAEntr'ouvert Liberty Alliance test Root Certification Authority #40  *†H†÷ ‚:ðåRG96"Fª_k(Õ áŠuE¨°¯¨â¶ÃN ë²RzÌʉ ïv°{‘[òQé—‚ÛH¬¸Æ‹0¥^EŽ5›´ÆžPLCÍ+Ò35n³7Reð~œxH**Ê–À»HÞ«3y¿–:ƒª¹}˜1™„Þx77’MèÛp¾u9 Í‚Œ†DrVµ_9â¨cEиM «iïÔÜÜ–H:£§zåõ ±ÖB¯,G±À>ô—Xë¼âLö¨ƒ8… ²"œHñÙI@øJhè•Ýx7jŠIϼL•,êm]#u;|4]n£±A)”;:.Ûàϧ“—‚ú¬TâAentr'ouvert liberty alliance test root certification authority #4þWÀ±X.509t0‚p0‚X 0  *†H†÷ 0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #410U Entrouvert0 040813103642Z 290404103642Z0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #410U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚Ô]Kʲ¨äxT·÷GkÐ{ì ÛJ——ÉäêˆÄrPyD»©kaº _$žyÅ‚žÒñÊ”’7³z¸ŒÍXL™ ØÝ' 0iut´esQ]íÜÀ°o {G"™àÂo¸õ$—5²ZàÛ[tÙ‘TmŸ)d»w<b¼M†å–‹¼ËÌ>úE^º}uã}}ÃÆ˜Jmd3A;m°ð¹”w¸XœV bM,>ø†[Œà$àµÍ{ä ºžjbêÚñ&(“ Z±ày£‚C0‚?0US‚…4K8Á%\чثõ>è0U#0€S‚…4K8Á%\чثõ>è0Uÿ0ÿ0 U0*U%#0!+ +‚7  `†H†øB0 `†H†øB0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0P `†H†øB CAEntr'ouvert Liberty Alliance test Root Certification Authority #40  *†H†÷ ‚:ðåRG96"Fª_k(Õ áŠuE¨°¯¨â¶ÃN ë²RzÌʉ ïv°{‘[òQé—‚ÛH¬¸Æ‹0¥^EŽ5›´ÆžPLCÍ+Ò35n³7Reð~œxH**Ê–À»HÞ«3y¿–:ƒª¹}˜1™„Þx77’MèÛp¾u9 Í‚Œ†DrVµ_9â¨cEиM «iïÔÜÜ–H:£§zåõ ±ÖB¯,G±À>ô—Xë¼âLö¨ƒ8… ²"œHñÙI@øJhè•Ýx7jŠIϼL•,êm]#u;|4]n£±A)”;:.Ûàϧ“—‚ú¬Tâ}7^“ÿ ?Ñ—è÷oÕllasso-2.8.2/tests/data/user4-la/PaxHeaders/certificate.pem0000644000000000000000000000013213766621500020424 xustar0030 mtime=1608196928.962896942 30 atime=1678098071.593501629 30 ctime=1678814321.537956316 lasso-2.8.2/tests/data/user4-la/certificate.pem0000644000175000017500000000274513766621500023704 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN CERTIFICATE----- MIIELTCCAxWgAwIBAgIBBDANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJGUjE0 MDIGA1UEAwwrRW50cm91dmVydCBMaWJlcnR5IEFsbGlhbmNlIHRlc3QgUm9vdCBD QSAjNDETMBEGA1UECgwKRW50cm91dmVydDAeFw0wNDA4MTMxMDQ0MjVaFw0yNDA4 MTQxMDQ0MjVaMDIxDjAMBgNVBAMTBXVzZXI0MRMwEQYDVQQKEwpFbnRyb3V2ZXJ0 MQswCQYDVQQGEwJGUjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMkc oNDGQui+oBG/7mKLdetygtJDuPp3PSu8Yd/g9HrCHRVZAHw93p5q14/PvzjDmhmT GydsyWRbyNwp8mXkHmJhp5nMOb0M5UPVOKMQpg0SkHm+h94BiyKXobHYEkJt4pZ7 ibI9aDzdpFAoxr2dO8OudkH+D5d5lsWZKb7fM3dba/S8ObrA4m4LE3ACC/x2WvpB gnXRLsjIcDqzegPdA08lq0aNl4q/0s4djCaJA3obTYI8+s4A31TqgNRgOGfKc7Hc 3Z+yr38lKE/IVQUmxhE+BcSw8AcebCui8EEnSL+USS2/VaxoRIA0if5965e7RGwN FRu1eLsyDBPq1pX7l88CAwEAAaOCASYwggEiMB0GA1UdDgQWBBSPtyatLqm88G/4 KGK9D3cO3HhecTAfBgNVHSMEGDAWgBRTgoU0SwA4wSUVnVzRh9irf/U+6DAMBgNV HRMBAf8EAjAAMAsGA1UdDwQEAwIHgDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYB BQUHAwgwEQYJYIZIAYb4QgEBBAQDAgeAMCYGA1UdEQQfMB2GG2h0dHA6Ly9sYXNz by5lbnRyb3V2ZXJ0Lm9yZzAmBgNVHRIEHzAdhhtodHRwOi8vbGFzc28uZW50cm91 dmVydC5vcmcwQwYJYIZIAYb4QgENBDYWNEVudHJvdXZlcnQgTGliZXJ0eSBBbGxp YW5jZSBVU0VSICM0IHRlc3QgY2VydGlmaWNhdGUwDQYJKoZIhvcNAQEFBQADggEB AK8jrlCR9feFrOoY6YuhQXm9gyglQu3pWE7c388HO3myb7WAc9xvnSN9R/zyEymt QF2jdX3jnPGB2MK7/UAbxE7OiLVo0fPJtY+xAoNHydophl9BBNcdMIrWkLYoQobp Npw1KlkTJ+zeRsWoe09k6LQ5SawTAXM/LZ/IGehh2TlzkX92CYX6JY0E/eGSOKCc tlk6RtvoU2pD0sQBdiW/HDKRsta3fAcUT0o8Cbq2R1ZFiLwXJjSoRpZ4+Yhr65RK uKRbC2RR7iqyLvg/gPyV766sKi2a4zICzMiwVuMHKGp8NgsV3D2+n+SsCDsqN3Rz N9e+vfp0SAePrdZ/uhoctUE= -----END CERTIFICATE----- lasso-2.8.2/tests/data/user4-la/PaxHeaders/private-key-raw.pem0000644000000000000000000000013213766621500021171 xustar0030 mtime=1608196928.962896942 30 atime=1678098071.593501629 30 ctime=1678814321.537956316 lasso-2.8.2/tests/data/user4-la/private-key-raw.pem0000644000175000017500000000331613766621500024444 0ustar00bdauvergnebdauvergne000000000000000: user-jks.keystore 1: lasso 2: changeit -----BEGIN PRIVATE KEY----- MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDJHKDQxkLovqARv+5ii3XrcoLS Q7j6dz0rvGHf4PR6wh0VWQB8Pd6eatePz784w5oZkxsnbMlkW8jcKfJl5B5iYaeZzDm9DOVD1Tij EKYNEpB5vofeAYsil6Gx2BJCbeKWe4myPWg83aRQKMa9nTvDrnZB/g+XeZbFmSm+3zN3W2v0vDm6 wOJuCxNwAgv8dlr6QYJ10S7IyHA6s3oD3QNPJatGjZeKv9LOHYwmiQN6G02CPPrOAN9U6oDUYDhn ynOx3N2fsq9/JShPyFUFJsYRPgXEsPAHHmwrovBBJ0i/lEktv1WsaESANIn+feuXu0RsDRUbtXi7 MgwT6taV+5fPAgMBAAECggEBAMAXzitcFDDHU5FgqEwMNVftCrPX5+mk1xLdXwc+kYZnvuvTFTmW xvq9xqQgpN+NRbXD4x3nNP3dBZ/1mQhluffymum2PjgrBxmhofVvQ4wc/U6sBI6zHrit6M48OkSl PNbLrRxItzXb5sSCDkKy2pDwJRinmTDv/GlFALDF9Ry8zo0Ekhj87Re3TLksg6ppN/tIUY/F6md+ Khq+Jdf3f7+4wQ8E7DVSTDT0JezefrJumrB2u4XXYqLZIFla7ZWuOdzkE6Z4PHvU7zjvTCw4Vy99 BgP/Du9eSIwO7tqisBJD0U0XVPMJca0k2TbbiH6vyZMkLBULtS05Su/WSLu3SmECgYEA4zon1XmI r95L4QV6bDcfKss/enWBUWSdBePn+po5AhXkhQqbNxOAc2TE5890xWEUsrpmZVpIuoe99lBbLod9 iMZht3gNDiy/T0tqJziAyTtNbHZhV5WmUbzoS/oV5ofWRhxbjh57rOW1JaWWx5OSj6rjwgyDzXmZ 8EpNAEUnoGcCgYEA4pPpf+LFOPaS56gSsPF/D2IRvXCCArccvlwoz7+ACK+tv86qNxHr/wGyw8Ko dYx8Y2lScOvmgFmabGPL88gfo713GzeSgvPKrSDOBDO8kqE7fUm+F6LGw0Hq4PXur0lFSgTAFupY 5d4c2yJ3qUMlS1ZoaeHoIySMSfqa1UTQDFkCgYBfa2+I3NWCjQYuQ3+qa+dhsCJDCY85n9e0voUP Hq5r6seg+tg9Y6ogSyPI+Lxfmqn3eAFB9IzwD8q84fe4bVtREYW9ZuOMnUvlP5UfTUH/vzB/KKMu BYDneD3Qkf+aZFad8JCd+L0U2Q2d9pB/1L/KJwgn19uNcNAtMPZu85t1ZwKBgEShPuoAu3J8pZTL wRWdoLn9H5h9GrRN2MQEUExVGigHZp6hr8dMg2pTjl1jeflZG1hVT6ZqngAko/TO6bkm1gaX3hr9 Y0CNLcfxFtYJAcZ8VfOmQZEROhlsvwNzGuA3VmiMNc77HwBJnf32W76GWyaNvsTLq6/xYxkJcprE 5CvJAoGAdRQdAZ2QVjpne6ZO54ck5JK5nN/6UoYN7oWXFOVRn10lRY4Apo+vq/Sd8fggb7rxU8KO 3UBbzljGLAJqAxpWVubsRqnspx9jnX+XTFULH8wEZvkBECXra2/XKP55FdX781t7JaS9x2S/igA4 5QLPvkF4AH7U11/Ar0OQqNLppms= -----END PRIVATE KEY----- lasso-2.8.2/tests/data/PaxHeaders/ca2-la0000644000000000000000000000013213766621500014765 xustar0030 mtime=1608196928.938896744 30 atime=1678814326.421984131 30 ctime=1678814321.273954812 lasso-2.8.2/tests/data/ca2-la/0000755000175000017500000000000013766621500020312 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tests/data/ca2-la/PaxHeaders/jks.keystore0000644000000000000000000000013213766621500017420 xustar0030 mtime=1608196928.938896744 30 atime=1678098071.341499651 30 ctime=1678814321.273954812 lasso-2.8.2/tests/data/ca2-la/jks.keystore0000644000175000017500000000235613766621500022676 0ustar00bdauvergnebdauvergne00000000000000þíþíAentr'ouvert liberty alliance test root certification authority #2þWÂZþX.509t0‚p0‚X 0  *†H†÷ 0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #210U Entrouvert0 040813103640Z 290404103640Z0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #210U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚á áâ À¥ª’.…l᥅¢ÕåDRXYÑÈóD¬õ•Qûqè UåϾ±Ç£ÜÐg†8nÖÿÜþÓu qI´Û¦.Øo^iÛ܆ ùEÈ 3‡ É˲áÉÀJ\Uâw)‰$ ”¥žæ¤ÎwÅ×û¶MéÍ#/^0àN~ÅeïƒÇA|•Ì•’ÕÍ©–ÍäI±s•#I/®Þv/2 IÙbï들çLR+ÖRq«Ø³[˜œŸ½3ÈäÔrMjYHë+wÓ™:qg|ØÅX“‘»ÃÂÃ.ö¨$±ˆb–=ã(®!ßzð×ßÉMî)Á¹M”C`ô.%2°ØV£‚C0‚?0Uò Uå«‘cøñNìÛû ¯žr0U#0€ò Uå«‘cøñNìÛû ¯žr0Uÿ0ÿ0 U0*U%#0!+ +‚7  `†H†øB0 `†H†øB0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0P `†H†øB CAEntr'ouvert Liberty Alliance test Root Certification Authority #20  *†H†÷ ‚àšS\I«ÃŒ³D›ý€âK®CuË = &Ê*¬%BOŠq1I}dÖ¢j«úÖöwþ\³Õ‘÷FhÔÝÈÑ,þóyý8•Bm›Ç=Šž/6( C‹œÌ1Yإ뎤¡w‘D…*Gè.Äqìýôp5œi'r§Jãð4,Á# ­4:Mþ4i2ÊŽ K˜%ÁDŠYói’|TËÍÛ ¿â¬D91Ðe‚ØýÐÙáòœvûF69<åÁÁ–M²ÂŒ;ÅpÔp9‹sœÊå`êÌ*' [Z@ÄP€* /OVóæ“`ÿf|†öX  8âº=ë ~ÍàOÃçµC*?f3;lasso-2.8.2/tests/data/ca2-la/PaxHeaders/certificate.pem0000644000000000000000000000013213766621500020027 xustar0030 mtime=1608196928.938896744 30 atime=1678098071.341499651 30 ctime=1678814321.273954812 lasso-2.8.2/tests/data/ca2-la/certificate.pem0000644000175000017500000000307613766621500023305 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN CERTIFICATE----- MIIEcDCCA1igAwIBAgIBADANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJGUjE0 MDIGA1UEAwwrRW50cm91dmVydCBMaWJlcnR5IEFsbGlhbmNlIHRlc3QgUm9vdCBD QSAjMjETMBEGA1UECgwKRW50cm91dmVydDAeFw0wNDA4MTMxMDM2NDBaFw0yOTA0 MDQxMDM2NDBaMFgxCzAJBgNVBAYTAkZSMTQwMgYDVQQDDCtFbnRyb3V2ZXJ0IExp YmVydHkgQWxsaWFuY2UgdGVzdCBSb290IENBICMyMRMwEQYDVQQKDApFbnRyb3V2 ZXJ0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4Qzh4gzApaqSLg6F bOGlhaIX1eVEUgBYWdHI80Ss9ZVR+3HoClXlzwO+sQLHo9zQZ4Y4btb/3P7TdQlx HEm02xCmLthvXo9pEtvchg35HEXIDTOHCwvJy7LhyRjASlxV4ncpiSQLwpSlnuak znfF1/u2FE0X6c0jL14w4E5+xWXvg8dBfJXMlZLVzamWzQfkSbFzlSNJjy+u3hB2 LzINSdli7wXrkxuk50xSK9ZScavYs1sCmB0RnJ+9M8jk1HJNallI6wIrnXed05k6 cWd82MVYk5G7GMPCwy72qCSxiBFilj3DoyiuId968NffyU3uKQ/BuU2UQ2D0LiUy sNhWjQIDAQABo4IBQzCCAT8wHQYDVR0OBBYEFPIgVeWrkWP48RFO7BHb+wuvnhRy MB8GA1UdIwQYMBaAFPIgVeWrkWP48RFO7BHb+wuvnhRyMA8GA1UdEwEB/wQFMAMB Af8wCwYDVR0PBAQDAgEGMCoGA1UdJQQjMCEGCCsGAQUFBwMBBgorBgEEAYI3CgMD BglghkgBhvhCBAEwEQYJYIZIAYb4QgEBBAQDAgEGMCYGA1UdEQQfMB2GG2h0dHA6 Ly9sYXNzby5lbnRyb3V2ZXJ0Lm9yZzAmBgNVHRIEHzAdhhtodHRwOi8vbGFzc28u ZW50cm91dmVydC5vcmcwUAYJYIZIAYb4QgENBEMWQUVudHInb3V2ZXJ0IExpYmVy dHkgQWxsaWFuY2UgdGVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICMy MA0GCSqGSIb3DQEBBQUAA4IBAQDgmlNcSavDjLNEm/2ABOJLF65DdcsMDD0NJsoq rCURQhJPinExSX1k1qIPaqv61vZ3EP5cs9WR90Zo1N3I0Sz+8wJ5/TiVQm2bkMc9 ip4vNjxzkxKJT7VUHdx07K0TPigXC0OLnMwxWdil646koXeRRIUqCEfoLsRx7P30 cDWcjxZpJ3KnSuPwNCwOwSMJrTQ6Tf40BGmdMsqOoEuYJcFEDoqQWfNpDpJ8GVTL zdsKv+KsRDkx0GWC2P3Q2eEcF/KcdvtGNjk85cHBlk2ywow7xQ9w1HA5i3OcyuVg 6swqJwlbWhVAxFCAKhwJIC8RHk9W8+aTYP9/ZnyG9lgLoDji -----END CERTIFICATE----- lasso-2.8.2/tests/data/PaxHeaders/requests0000644000000000000000000000013213766621500015601 xustar0030 mtime=1608196928.954896876 30 atime=1678814326.421984131 30 ctime=1678814321.441955769 lasso-2.8.2/tests/data/requests/0000755000175000017500000000000013766621500021126 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tests/data/requests/PaxHeaders/googleapps_request.xml0000644000000000000000000000013213766621500022310 xustar0030 mtime=1608196928.954896876 30 atime=1678098071.493500845 30 ctime=1678814321.441955769 lasso-2.8.2/tests/data/requests/googleapps_request.xml0000644000175000017500000000112613766621500025560 0ustar00bdauvergnebdauvergne00000000000000 google.com lasso-2.8.2/tests/data/PaxHeaders/lecp2-la0000644000000000000000000000013113766621500015324 xustar0029 mtime=1608196928.94689681 30 atime=1678814326.421984131 30 ctime=1678814321.405955564 lasso-2.8.2/tests/data/lecp2-la/0000755000175000017500000000000013766621500020652 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tests/data/lecp2-la/PaxHeaders/metadata.xml0000644000000000000000000000013113766621500017703 xustar0029 mtime=1608196928.94689681 30 atime=1678098071.461500592 30 ctime=1678814321.405955564 lasso-2.8.2/tests/data/lecp2-la/metadata.xml0000644000175000017500000000310113766621500023147 0ustar00bdauvergnebdauvergne00000000000000 https://lecp2:2016/singleSignOn http://projectliberty.org/profiles/sso-get https://lecp2:2016/singleLogout http://projectliberty.org/profiles/slo-idp-soap https://lecp2:2016/registerNameIdentifier http://projectliberty.org/profiles/rni-sp-http https://lecp2:2016/soapEndpoint https://lecp2:2016/assertionConsumer https://lecp2:2016/singleLogout http://projectliberty.org/profiles/slo-idp-soap https://lecp2:2016/registerNameIdentifier http://projectliberty.org/profiles/rni-sp-soap https://lecp2:2016/soapEndpoint true lasso-2.8.2/tests/data/lecp2-la/PaxHeaders/public-key.pem0000644000000000000000000000013113766621500020150 xustar0029 mtime=1608196928.94689681 30 atime=1678098071.461500592 30 ctime=1678814321.405955564 lasso-2.8.2/tests/data/lecp2-la/public-key.pem0000644000175000017500000000070313766621500023421 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA7qG21hOHABEUKUYF+M7k 9jgRqPncPcvdxup+i462Ql9WtULSQ6KeuXpBI4T54eMJaUpqyCmf6E6KJR9LN6rT YUDGNYwJ69SxD1/cuCQtleUUsr0gCh9RXV7QtE8zI503wExzFQnRHK5k1kLyVVwk hOArJDn17XZUIu0oeVEfuH2MViNnuC0tRRyNXQcagFjlzOwOcw4vGadsRkqQnJXG 9jAsVL8YGMEHaIEKVy29HH7Ci5Y4eJRWgItGWJlInPU7ytA8J5dnU6N8PcbvIb6l dQQFn/Uwtz1NWx9xXTJXxlaonjPJYN0AmLUqNw3HIfcXXKs9k1H3/Q7Cmnmdd6OO ZwIDAQAB -----END PUBLIC KEY----- lasso-2.8.2/tests/data/lecp2-la/PaxHeaders/jks.keystore0000644000000000000000000000013113766621500017757 xustar0029 mtime=1608196928.94689681 30 atime=1678098071.461500592 30 ctime=1678814321.405955564 lasso-2.8.2/tests/data/lecp2-la/jks.keystore0000644000175000017500000001130513766621500023230 0ustar00bdauvergnebdauvergne00000000000000þíþílassoþWÀoL0‚ý0 +*‚éD]²C¹ !ɘì”çÈý»d²’¿#ÉZ]ù–K_ƶ› ;TÛ2üI#1ðV6Ù¤™ÉtYçt£ãã ýÑÆ¼W൴”8?âàïÝ·#ß0;J|•Á ×ä†Ñ,¬­y›+ ]4¼Aý„×aõº2É/Ãr„¾ øž2ÐJ4n3¼åJü uVfö¢€+”Xº1Y`&©kú²m¸æÃUG|¸:áO4ößý9m´½lö–rV¡Î¾©¾ kª¸)b”¯h½\9yÍtòL%ûÅᆠ؛ôéä‚5çæýܣ݌µjÍößF±Œµg ¾ÆƒË''Áy䣅£nv#‚W&a¿(º,[†·XL&Àø{F;&ÆËoÝO²´pŸ™xC§[I¿çÄ6ªÄøÂüè›*×ÑW¸p'ÈÖ®N䨺aøìö9`M“Gþ‰¡†®¢²ã†öFG§­ $Kæ±Çëƒ1ÍÓq0ÄXN‰<›Š`ùÆ<\løF4 à,Ý ¼BZ1Vö[kik »p.%¡´³¥˜jh2Ô"+4Gêç¶R²„'OBãÿS5«¯Ž”3bT†G֚͘,ŠCm ¾Ÿô^rÚì’„/Ïù~.ù(¸ß¥|uĦ^¤DÜÙ•CkgÈŽˆ=<Œê¦=Æãàé”–ÌJ:—þC˜˜Ų,Íïhªˆ#UŒ¼¨d q•˜6¦D*Ü3œpCP q ûâ•÷Õæ¾›¹#±š‚À¢*|›úÇš³X­Þ%ô›ÐRÛÂ,yŠdÖŽ#HtØ/ßÁüÞ[¯ÚÖ«µ…äõé ~ÚsR×S«$Ù•ï”tqñë>t…¼xÄ\@Š”¦‹0õžœ}¸¿nD‡Ùù[9QUögIš€@¾W)Pî´]aæN]³‚™×z¹jÜméo±Ö°CÀKÝ×ÁÃ×Õ-Xû’¼­Îbm€{› ¦BÃð˜Ã®nÎy»² Ã¶ÎæQé°”Ml»¦Bxù¬uÍ šŒ—vœTU†ùüè¾™cK$ ‚&‚/’ü†]µ4#!r92<¦i=úí¼œù¾·È–§ßÝü{BuÙ)¼é°9òÐôr­3}Õ@,·DÔ²Ô.—í%¤oŽ‘=èvyt“îZÝÈdW"ßÛ»Yd< d£™ÊÍ‘ i¬™=~æEÆWÔÑCT®ã-] ê5Í»ÂZð~Š*n˜ÚD}±1XŸÁº»ÂG¹·$z—Ñ7±‰²tÒÁ†¥kKõuã>WÂxƒ xã‘“™q¶ìÂÂ¤ÌøÕ?ºÏÛÊ õ$ÿ˜¾¨QDáh4b¯DõÂá|‰C!©ÁÐ$ÎêÄlIcɳÛÚ‡P`Ñ훵۫xk "1[,ŠÓü¡»¡]p2¾±±ët¤Íœßá$Çzç‡~kûM•‹ý¼j«‰;Ÿ¯hf«w!œËù½Ö˜d®„A«/àÄ‚™ß¨ÅÔ"Øgï™X»øŸ8²›ÎG_¥ÐvqG·Dï^X ý¦<H($Y¸î­‹ú[ ]Êò˜z1ÒêÓýŸåSæiîâ5Ë÷/ãjU^º›Wδíù|°ø‡X.50910‚-0‚ 0  *†H†÷ 0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #210U Entrouvert0 040813104424Z 240814104424Z0210 Ulecp210U  Entrouvert1 0 UFR0‚"0  *†H†÷ ‚0‚ ‚î¡¶Ö‡)FøÎäö8¨ùÜ=ËÝÆê~‹Ž¶B_VµBÒC¢ž¹zA#„ùáã iJjÈ)ŸèNŠ%K7ªÓa@Æ5Œ ëÔ±_ܸ$-•å²½ Q]^дO3#7ÀLs Ñ®dÖBòU\$„à+$9õívT"í(yQ¸}ŒV#g¸--E]€XåÌìs/§lFJœ•Æö0,T¿Áh W-½~‹–8x”V€‹FX™Hœõ;ÊÐ<'—gS£|=Æï!¾¥uŸõ0·=M[q]2WÆV¨ž3É`ݘµ*7 Ç!÷\«=“Q÷ýšyw£Žg£‚&0‚"0UGŽ©„Øš¶”¨e—‹€¨ÞòÐ0U#0€ò Uå«‘cøñNìÛû ¯žr0 Uÿ00 U€0U%0++0 `†H†øB€0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0C `†H†øB 64Entrouvert Liberty Alliance LECP #2 test certificate0  *†H†÷ ‚xá˜H‡-¥ÓoÂp˜<±n¦ƒóAn_xP£jïhÃGŠ/Æ‘îåvúÂ÷§zEÆDäô7ý&‰[,ؼ5Á4j·{'Ú Âȶo7Ýèê%¯è†Ó&6L÷iïÝ6ým¦ÚÌ%0fõ «^ÙÎb߃àCRÖ 7€%É2ÝÚT8wÞbToÎ.ŸuRü3[Kç´õôÛâg/6IâKìL°Ü§ØH PÊ pÏ©øÂJSŽ¡7­o¥2ØÒ«.×Vo)× (+šÝH˜3ŒÍ9ñä)äŸâû·ÅêWäpÀ^½º£b-‡t-„F3.ÈÝ-‹/È`C|X.509t0‚p0‚X 0  *†H†÷ 0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #210U Entrouvert0 040813103640Z 290404103640Z0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #210U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚á áâ À¥ª’.…l᥅¢ÕåDRXYÑÈóD¬õ•Qûqè UåϾ±Ç£ÜÐg†8nÖÿÜþÓu qI´Û¦.Øo^iÛ܆ ùEÈ 3‡ É˲áÉÀJ\Uâw)‰$ ”¥žæ¤ÎwÅ×û¶MéÍ#/^0àN~ÅeïƒÇA|•Ì•’ÕÍ©–ÍäI±s•#I/®Þv/2 IÙbï들çLR+ÖRq«Ø³[˜œŸ½3ÈäÔrMjYHë+wÓ™:qg|ØÅX“‘»ÃÂÃ.ö¨$±ˆb–=ã(®!ßzð×ßÉMî)Á¹M”C`ô.%2°ØV£‚C0‚?0Uò Uå«‘cøñNìÛû ¯žr0U#0€ò Uå«‘cøñNìÛû ¯žr0Uÿ0ÿ0 U0*U%#0!+ +‚7  `†H†øB0 `†H†øB0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0P `†H†øB CAEntr'ouvert Liberty Alliance test Root Certification Authority #20  *†H†÷ ‚àšS\I«ÃŒ³D›ý€âK®CuË = &Ê*¬%BOŠq1I}dÖ¢j«úÖöwþ\³Õ‘÷FhÔÝÈÑ,þóyý8•Bm›Ç=Šž/6( C‹œÌ1Yإ뎤¡w‘D…*Gè.Äqìýôp5œi'r§Jãð4,Á# ­4:Mþ4i2ÊŽ K˜%ÁDŠYói’|TËÍÛ ¿â¬D91Ðe‚ØýÐÙáòœvûF69<åÁÁ–M²ÂŒ;ÅpÔp9‹sœÊå`êÌ*' [Z@ÄP€* /OVóæ“`ÿf|†öX  8âAentr'ouvert liberty alliance test root certification authority #2þW¿á¾X.509t0‚p0‚X 0  *†H†÷ 0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #210U Entrouvert0 040813103640Z 290404103640Z0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #210U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚á áâ À¥ª’.…l᥅¢ÕåDRXYÑÈóD¬õ•Qûqè UåϾ±Ç£ÜÐg†8nÖÿÜþÓu qI´Û¦.Øo^iÛ܆ ùEÈ 3‡ É˲áÉÀJ\Uâw)‰$ ”¥žæ¤ÎwÅ×û¶MéÍ#/^0àN~ÅeïƒÇA|•Ì•’ÕÍ©–ÍäI±s•#I/®Þv/2 IÙbï들çLR+ÖRq«Ø³[˜œŸ½3ÈäÔrMjYHë+wÓ™:qg|ØÅX“‘»ÃÂÃ.ö¨$±ˆb–=ã(®!ßzð×ßÉMî)Á¹M”C`ô.%2°ØV£‚C0‚?0Uò Uå«‘cøñNìÛû ¯žr0U#0€ò Uå«‘cøñNìÛû ¯žr0Uÿ0ÿ0 U0*U%#0!+ +‚7  `†H†øB0 `†H†øB0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0P `†H†øB CAEntr'ouvert Liberty Alliance test Root Certification Authority #20  *†H†÷ ‚àšS\I«ÃŒ³D›ý€âK®CuË = &Ê*¬%BOŠq1I}dÖ¢j«úÖöwþ\³Õ‘÷FhÔÝÈÑ,þóyý8•Bm›Ç=Šž/6( C‹œÌ1Yإ뎤¡w‘D…*Gè.Äqìýôp5œi'r§Jãð4,Á# ­4:Mþ4i2ÊŽ K˜%ÁDŠYói’|TËÍÛ ¿â¬D91Ðe‚ØýÐÙáòœvûF69<åÁÁ–M²ÂŒ;ÅpÔp9‹sœÊå`êÌ*' [Z@ÄP€* /OVóæ“`ÿf|†öX  8â ô_üè£odb(#ùíA¸f±flasso-2.8.2/tests/data/lecp2-la/PaxHeaders/certificate.pem0000644000000000000000000000013113766621500020366 xustar0029 mtime=1608196928.94689681 30 atime=1678098071.461500592 30 ctime=1678814321.405955564 lasso-2.8.2/tests/data/lecp2-la/certificate.pem0000644000175000017500000000274513766621500023647 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN CERTIFICATE----- MIIELTCCAxWgAwIBAgIBAzANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJGUjE0 MDIGA1UEAwwrRW50cm91dmVydCBMaWJlcnR5IEFsbGlhbmNlIHRlc3QgUm9vdCBD QSAjMjETMBEGA1UECgwKRW50cm91dmVydDAeFw0wNDA4MTMxMDQ0MjRaFw0yNDA4 MTQxMDQ0MjRaMDIxDjAMBgNVBAMTBWxlY3AyMRMwEQYDVQQKEwpFbnRyb3V2ZXJ0 MQswCQYDVQQGEwJGUjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAO6h ttYThwARFClGBfjO5PY4Eaj53D3L3cbqfouOtkJfVrVC0kOinrl6QSOE+eHjCWlK asgpn+hOiiUfSzeq02FAxjWMCevUsQ9f3LgkLZXlFLK9IAofUV1e0LRPMyOdN8BM cxUJ0RyuZNZC8lVcJITgKyQ59e12VCLtKHlRH7h9jFYjZ7gtLUUcjV0HGoBY5czs DnMOLxmnbEZKkJyVxvYwLFS/GBjBB2iBClctvRx+wouWOHiUVoCLRliZSJz1O8rQ PCeXZ1OjfD3G7yG+pXUEBZ/1MLc9TVsfcV0yV8ZWqJ4zyWDdAJi1KjcNxyH3F1yr PZNR9/0Owpp5nXejjmcCAwEAAaOCASYwggEiMB0GA1UdDgQWBBRHjgSphNidmraU Bahll4uAqN7y0DAfBgNVHSMEGDAWgBTyIFXlq5Fj+PERTuwR2/sLr54UcjAMBgNV HRMBAf8EAjAAMAsGA1UdDwQEAwIHgDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYB BQUHAwgwEQYJYIZIAYb4QgEBBAQDAgeAMCYGA1UdEQQfMB2GG2h0dHA6Ly9sYXNz by5lbnRyb3V2ZXJ0Lm9yZzAmBgNVHRIEHzAdhhtodHRwOi8vbGFzc28uZW50cm91 dmVydC5vcmcwQwYJYIZIAYb4QgENBDYWNEVudHJvdXZlcnQgTGliZXJ0eSBBbGxp YW5jZSBMRUNQICMyIHRlc3QgY2VydGlmaWNhdGUwDQYJKoZIhvcNAQEFBQADggEB AHgH4ZhIhy2l02/CcJg8sW6mg/MPQW5feFCjau9ow0eKL8aR7uV2gfrC9wCnekXG HkTk9Df9JolbLNi8NcE0ard7EifaDMLIthxvN43d6Oolr+gdhtMmNkz3ae/dNgcV /W2m2swlGzBm9SCrXtnOYt+D4ENS1iA3gCXJMt3aVDh33mJUE2/OCC6fdVL8M41b FkvntPX02+JnGi82SeJL7Eyw3KfYSAudUBjKCnDPqQL4wkpTHAWOoTcYrW+lMhDY gdKrLtdWbynXDR0oK5oE3UiYHzMOjM058RnkBCnkn+L7txYOxepXAuRwwF69uqNi LYd0LYRGMy7I3S2LL8hgQ3w= -----END CERTIFICATE----- lasso-2.8.2/tests/data/lecp2-la/PaxHeaders/private-key-raw.pem0000644000000000000000000000013113766621500021133 xustar0029 mtime=1608196928.94689681 30 atime=1678098071.461500592 30 ctime=1678814321.405955564 lasso-2.8.2/tests/data/lecp2-la/private-key-raw.pem0000644000175000017500000000331613766621500024407 0ustar00bdauvergnebdauvergne000000000000000: lecp-jks.keystore 1: lasso 2: changeit -----BEGIN PRIVATE KEY----- MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDuobbWE4cAERQpRgX4zuT2OBGo +dw9y93G6n6LjrZCX1a1QtJDop65ekEjhPnh4wlpSmrIKZ/oToolH0s3qtNhQMY1jAnr1LEPX9y4 JC2V5RSyvSAKH1FdXtC0TzMjnTfATHMVCdEcrmTWQvJVXCSE4CskOfXtdlQi7Sh5UR+4fYxWI2e4 LS1FHI1dBxqAWOXM7A5zDi8Zp2xGSpCclcb2MCxUvxgYwQdogQpXLb0cfsKLljh4lFaAi0ZYmUic 9TvK0Dwnl2dTo3w9xu8hvqV1BAWf9TC3PU1bH3FdMlfGVqieM8lg3QCYtSo3Dcch9xdcqz2TUff9 DsKaeZ13o45nAgMBAAECggEAU/2xV9oZqylXuks+MNvJdOw5Mwt2vH1z+t5wWfiKKARchYIWdd3Y Fhp0sObN+ParSlb6DKex89cpAnXoSJiku9dLrG800r/S7kFkc5+wN9EgnuS4UTfCsKV9uekia8eb ZuDBpMcGxhyPu2Zm2yqKZAZuyNppuAHtDToCA+lMy+cer2oaDJuSDBFADinJpWZW/Daima5lby+O txOdfhkPvm8+gbd/70LurVMdU3B3iSg6dV+oRJo02XBEChrMbGSaWJVjld6Tk+uHX168YVcIsUvo yw9cPwAOEbEGcUsX3Y6B/BA9xJ5DVl77ZRQ1gQK0vM+wi/1YFvOg8akUdGBI4QKBgQD3WwQ6OH29 TSu6tnX0GOKnSVA1NbweQOKSB8YAHSe2U7lggFjCILALwErgXaIoSFMl21AqrL4QwhwjxtkC9wee 3Vsz9wUAQ17rvETHvjad8LKoLJ4sl+q0r4hVOZ9xMppSycMwkCl2VGp6uOBjmRgGZrPunDivBqTK LxO3LRBQ8QKBgQD2+KY23mlvMhdrszWgRTaad4Qcn6wJcBd6oIKr5B3tZIO55UTP83CduEiwydY3 ZeQfUVP8aenETK1hBn5rz/qF4sXKgOudhDVj3tTIMxKLYYHrEuVKWN/DdM8ZLu6uJakYo7/7yioI +ldtwhR0u/nN7Clj5lpaMdNCX8RX2mjU1wKBgEcBdKQ15Tp7Natih1er8RxuejzcEQVqQOAEpT0R IX5AaH2gOlp3wbGN4LCpkEwZ/uxmGYw2jFUJM8S9Zzxnp2NeTbkMFv5tWIk5QVFJdCpAlziZnkpU zcZSgUNdyDxZd11+l66QI6bZMrvJ6HgO0Yu83bgIVmk/8fwsKW+y2vUxAoGAYxVM8hR3LmJlXRMv /5XlG0G54hX5Wmv7L3p4EmhZzWUXKBygZ+GeG9jUaQEBDYa2aA4j6M/BNr0gjh2h2LU/KDnb6qug W7iwBtpeeddrqDm9esdA8HwJggw6DjtzDLEVT0pa+rSX+rQdIW7M8Cx+QyxtSqQfObJltGphhnGc v08CgYEA2simxg/IuXnoJwIemlgzS3NaXmkUbnUbZ22U7pAE2jSf71+cBuYTQbtCWyzajM3CvHg4 VrBwCKCOJA5T4VQwBtZJ8KKFTJd2Rp4p9qPihkJhmm9ek6gjowjLsF+DjSeLhacLQeHUmYOihb/d bzT/42gTtERh/jIdcX0a0cVrQaE= -----END PRIVATE KEY----- lasso-2.8.2/tests/data/PaxHeaders/lecp3-la0000644000000000000000000000013113766621500015325 xustar0029 mtime=1608196928.94689681 30 atime=1678814326.421984131 30 ctime=1678814321.417955632 lasso-2.8.2/tests/data/lecp3-la/0000755000175000017500000000000013766621500020653 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tests/data/lecp3-la/PaxHeaders/metadata.xml0000644000000000000000000000013113766621500017704 xustar0029 mtime=1608196928.94689681 30 atime=1678098071.469500656 30 ctime=1678814321.417955632 lasso-2.8.2/tests/data/lecp3-la/metadata.xml0000644000175000017500000000310113766621500023150 0ustar00bdauvergnebdauvergne00000000000000 https://lecp3:2018/singleSignOn http://projectliberty.org/profiles/sso-get https://lecp3:2018/singleLogout http://projectliberty.org/profiles/slo-idp-soap https://lecp3:2018/registerNameIdentifier http://projectliberty.org/profiles/rni-sp-http https://lecp3:2018/soapEndpoint https://lecp3:2018/assertionConsumer https://lecp3:2018/singleLogout http://projectliberty.org/profiles/slo-idp-soap https://lecp3:2018/registerNameIdentifier http://projectliberty.org/profiles/rni-sp-soap https://lecp3:2018/soapEndpoint true lasso-2.8.2/tests/data/lecp3-la/PaxHeaders/public-key.pem0000644000000000000000000000013113766621500020151 xustar0029 mtime=1608196928.94689681 30 atime=1678098071.473500687 30 ctime=1678814321.417955632 lasso-2.8.2/tests/data/lecp3-la/public-key.pem0000644000175000017500000000070313766621500023422 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxEQjLwtpMR5pb/SZzbFa cJOmWFzOVO/T9DIuu16xvB+yiI5J18VeR7UL1YEK6DuPd2yYQNrl+XTFKEehco/W AFO5tnep+oaTDvj+4hU5j/j2vzWr8kyFzsg0IfPT5MHHjgRxs2a2J281iddCoiP/ DjpR7u11qBgA922ql56UmqtZxTSHmCjC6XCQ1n+kvNCAPDvlbZP+SGVauM1m57nu Ru/2kU0bBb8ibAAg/Hs5e8mrs9uhfE7j7j2DMeiGMM4tBvkdsHNwDGE2X9Z0GQhJ Cdt+y7iLn5G0kV6jFCwxxMeSdL4FJUJ+tNxMMk+I+VQZXjCs0Y7Vsw5u3eOLP25h MwIDAQAB -----END PUBLIC KEY----- lasso-2.8.2/tests/data/lecp3-la/PaxHeaders/jks.keystore0000644000000000000000000000013013766621500017757 xustar0029 mtime=1608196928.94689681 30 atime=1678098071.469500656 29 ctime=1678814321.41395561 lasso-2.8.2/tests/data/lecp3-la/jks.keystore0000644000175000017500000001130513766621500023231 0ustar00bdauvergnebdauvergne00000000000000þíþílassoþWÁÜC0‚ý0 +*‚édöŒh]9Lîfã™;9«\TXwp!‘26µB(#ýî ƒš5÷{V’lü_ºð¢Óñ¸UªÚˆ7˜n„v :…Ï$ߤuÂi5á„߯€!Œ¸µœ„HJÇœ¿€#EïÎ/݆¥*Ø&6nC´Ö´Œ3Â}”„è¦Üñäíë(ºGåA1t Å@ÀŠƒvÅø<Ò@5«ßÐv»h`©¯»Ü“ edŒ4ÙêíU»ͼ¶ƒ¶ùêübXEÍód°]ù0)^»ö¸Ï®£6È’ £ü2‚#95ѽnë·Íçi»Á]Ô­³pÍ÷~ü§cn—ûu(‹¸Is|ú$Vþ}LJË3H ‹´™í*zR†CBEéÿ }e.0;;sSŠŸ}¢l¹L /JõÚ´fŸ¡Hs.ôûã,âñC_¢ýÉÙU ÖæCêb ‹P 4@ÙŽ´aÝ÷øšzˆAog×ýÝñCaí²^Ïr™Ò™@OîOþºô!N™È¿væÜÆ(ÀNþã/ÕÆPr¦ØÞ–V ¡jäÄ 4&Ëf*…æIðP"p@Ö³‹™ã}™…E´{bÎ`ÃáRU¤q¿º!ý ®vqcï/»ù¤vlŸêóiÁÑ œzFÝ3bkr™Óþ‰Á²3Þ°þiø¼þ°3Sy$E«/wõ%'ƒV‹âƒÍ~òŸZ«ŽôÍ4žÂ¸`Øâ›’>çÐQð¢^K¹@‚Ò2ûYE0ÝéHú‡²òæö8@c T$j´²É@ ã$mi'm•6ë?æyj7õZGÚyN¦c÷Û!OòéP&ÄE·´½vóÆ@EC …þO¤I´^Ñ‹aÙów¯lÏõ›–õ+B±†‰…ÿò,ùèHK?ŸHà½ë1W{Щí©ì……W/Š*ÜÜž"FøÙÿ$@=”Õ ë× ç\mÌÖà|ˆÛêždªôi2¬ýc¿ýH;! í’8"'m>Ð?óCnùH àC(=bOËì¥Tï-öž·3¯œ!êMk2ìkî4 öj|ÄR§$p…Ÿo ’U^Å øœiä:äX·#›nÈ Q¶6?,`æÇMлód£û[ܽOdIN˜ì×¼¿vú8Ï@5çøpxúWO»¨jpq«¡«Êב…4aãV¿Ö dl^gÐ+c² e¤ƒp„•xÉ)–fY¸‚|©ˆÆá ò£¼w ºÖñD>ډ÷ûñHËÄ8ÕÁ™ž>gÔ?Â¥dŽ®ñÚÅg©4;õ i›É8ä©´WÞ79`jï“T5sý3ü¥~4É <#Í•u #óâªN*A$Mû dþ½»‹_…‰ &Ô‰¢xö·ç=´×½+þCH’îg¼åä‹‘Ö6ˆ¼—àм³>qȨ̈€6³$à>i̬‹»K>¿ýª¸ â¬à OJ¿‘‰ÎåRõáçoQ<"ÉËXm´žÌv';@\Ï`‚ùm…—³Ž#æV»ú X.50910‚-0‚ 0  *†H†÷ 0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #310U Entrouvert0 040813104424Z 240814104424Z0210 Ulecp310U  Entrouvert1 0 UFR0‚"0  *†H†÷ ‚0‚ ‚ÄD#/ i1ioô™Í±Zp“¦X\ÎTïÓô2.»^±¼²ˆŽI×Å^Gµ Õ è;wl˜@ÚåùtÅ(G¡rÖS¹¶w©ú†“øþâ9øö¿5«òL…ÎÈ4!óÓäÁÇŽq³f¶'o5‰×B¢#ÿ:Qîíu¨÷mª—ž”š«YÅ4‡˜(ÂépÖ¤¼Ð€<;åm“þHeZ¸Ífç¹îFïö‘M¿"l ü{9{É«³Û¡|Nãî=ƒ1è†0Î-ù°sp a6_ÖtI Û~˸‹Ÿ‘´‘^£,1ÄÇ’t¾%B~´ÜL2OˆùT^0¬ÑŽÕ³nÝã‹?na3£‚&0‚"0UÿuçiÏhöÁ!¥ÍÝWX«'+(\0U#0€“_¥íù»•â.«­Ÿ»ê*A‘ 0 Uÿ00 U€0U%0++0 `†H†øB€0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0C `†H†øB 64Entrouvert Liberty Alliance LECP #3 test certificate0  *†H†÷ ‚‚{°#Îøœj[j¿)òyßAŸ‡´ÜÛZ‰:Þ6Y°ËïAå˜a¹¤!.>%ôã h@ ì)I»€cÂÆh¦íÑàmìhÄ&_B™Ú”‘Î/¬úŸ»ÂáҬ箑ɟí±åÈU²L$Î/X.509t0‚p0‚X 0  *†H†÷ 0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #310U Entrouvert0 040813103640Z 290404103640Z0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #310U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚¢”ZàOÕ½WuG“eI·¬’3´¬${š )Û4ó·ÏΙíp’þôhCÍ—TbiÛ”Ã.öÝWå¬;fèÝ#«%¶æ?jÒåÄÛ%iYA‰›Ê 5ñŒ™²ç%¹|ŸKF_wj_òŸßsG„º…åx8_¿–ù .÷kŒ´©ÐšÈ‚' ›û¶éEðÁ‹kpHv—%&‰mfúƒÒ41?ØÛpø`[ÑçMdo Áóûá 8]Gwì¨a3‰Ê°.ŽhbláLÍ‚Œw^ ÷òûÚ¹ÿÕ9›ûŠdöè#®U²ºœ;PT²3<0··ŽÞP\RíóüÍ£‚C0‚?0U“_¥íù»•â.«­Ÿ»ê*A‘ 0U#0€“_¥íù»•â.«­Ÿ»ê*A‘ 0Uÿ0ÿ0 U0*U%#0!+ +‚7  `†H†øB0 `†H†øB0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0P `†H†øB CAEntr'ouvert Liberty Alliance test Root Certification Authority #30  *†H†÷ ‚&üfŸ®pÌW±,(j¤œ ÓÌ‚2\}Ý«à¨#^Èâ)´ù±Öí,Ú¥°# ¥í‡Á/ûÑÔL+i¨&üeTµ€Þ±F \›¡N1¹ó‡7‚| ñðŒ‰³‡¶Hþ{ØJÓ–-§W4¹†j•V~cr:HBrÊÀ¬ÿ¥þh*H¤9fìñ*£¤í¨Wº¦Ž ”˜¹y…ëÍ’"‰>pus­Öa±h5~i›‹L›ÁMØr<»çFÜ'` ì·×¼¥Hå åe8Œ‡(ñà§© øŒ)·ÿc(貎®X!†¾&‡±bÕþÓ1ðié¶îùmx5¿}Óó÷CÉ™ÓAentr'ouvert liberty alliance test root certification authority #3þW¿ôºX.509t0‚p0‚X 0  *†H†÷ 0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #310U Entrouvert0 040813103640Z 290404103640Z0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #310U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚¢”ZàOÕ½WuG“eI·¬’3´¬${š )Û4ó·ÏΙíp’þôhCÍ—TbiÛ”Ã.öÝWå¬;fèÝ#«%¶æ?jÒåÄÛ%iYA‰›Ê 5ñŒ™²ç%¹|ŸKF_wj_òŸßsG„º…åx8_¿–ù .÷kŒ´©ÐšÈ‚' ›û¶éEðÁ‹kpHv—%&‰mfúƒÒ41?ØÛpø`[ÑçMdo Áóûá 8]Gwì¨a3‰Ê°.ŽhbláLÍ‚Œw^ ÷òûÚ¹ÿÕ9›ûŠdöè#®U²ºœ;PT²3<0··ŽÞP\RíóüÍ£‚C0‚?0U“_¥íù»•â.«­Ÿ»ê*A‘ 0U#0€“_¥íù»•â.«­Ÿ»ê*A‘ 0Uÿ0ÿ0 U0*U%#0!+ +‚7  `†H†øB0 `†H†øB0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0P `†H†øB CAEntr'ouvert Liberty Alliance test Root Certification Authority #30  *†H†÷ ‚&üfŸ®pÌW±,(j¤œ ÓÌ‚2\}Ý«à¨#^Èâ)´ù±Öí,Ú¥°# ¥í‡Á/ûÑÔL+i¨&üeTµ€Þ±F \›¡N1¹ó‡7‚| ñðŒ‰³‡¶Hþ{ØJÓ–-§W4¹†j•V~cr:HBrÊÀ¬ÿ¥þh*H¤9fìñ*£¤í¨Wº¦Ž ”˜¹y…ëÍ’"‰>pus­Öa±h5~i›‹L›ÁMØr<»çFÜ'` ì·×¼¥Hå åe8Œ‡(ñà§© øŒ)·ÿc(貎®X!†¾&‡±bÕþÓ1ðié¶îùmx5¿}Óó÷CəӲ :ßÛ,ˆ#Hv^ž9´Ë—é1“lasso-2.8.2/tests/data/lecp3-la/PaxHeaders/certificate.pem0000644000000000000000000000013013766621500020366 xustar0029 mtime=1608196928.94689681 30 atime=1678098071.469500656 29 ctime=1678814321.41395561 lasso-2.8.2/tests/data/lecp3-la/certificate.pem0000644000175000017500000000274513766621500023650 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN CERTIFICATE----- MIIELTCCAxWgAwIBAgIBAzANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJGUjE0 MDIGA1UEAwwrRW50cm91dmVydCBMaWJlcnR5IEFsbGlhbmNlIHRlc3QgUm9vdCBD QSAjMzETMBEGA1UECgwKRW50cm91dmVydDAeFw0wNDA4MTMxMDQ0MjRaFw0yNDA4 MTQxMDQ0MjRaMDIxDjAMBgNVBAMTBWxlY3AzMRMwEQYDVQQKEwpFbnRyb3V2ZXJ0 MQswCQYDVQQGEwJGUjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMRE Iy8LaTEeaW/0mc2xWnCTplhczlTv0/QyLrtesbwfsoiOSdfFXke1C9WBCug7j3ds mEDa5fl0xShHoXKP1gBTubZ3qfqGkw74/uIVOY/49r81q/JMhc7INCHz0+TBx44E cbNmtidvNYnXQqIj/w46Ue7tdagYAPdtqpeelJqrWcU0h5gowulwkNZ/pLzQgDw7 5W2T/khlWrjNZue57kbv9pFNGwW/ImwAIPx7OXvJq7PboXxO4+49gzHohjDOLQb5 HbBzcAxhNl/WdBkISQnbfsu4i5+RtJFeoxQsMcTHknS+BSVCfrTcTDJPiPlUGV4w rNGO1bMObt3jiz9uYTMCAwEAAaOCASYwggEiMB0GA1UdDgQWBBT/dedpz2j2DsEh pc3dV1irJysoXDAfBgNVHSMEGDAWgBSTX6Xt+buV4houkKutn7vqKkGRCzAMBgNV HRMBAf8EAjAAMAsGA1UdDwQEAwIHgDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYB BQUHAwgwEQYJYIZIAYb4QgEBBAQDAgeAMCYGA1UdEQQfMB2GG2h0dHA6Ly9sYXNz by5lbnRyb3V2ZXJ0Lm9yZzAmBgNVHRIEHzAdhhtodHRwOi8vbGFzc28uZW50cm91 dmVydC5vcmcwQwYJYIZIAYb4QgENBDYWNEVudHJvdXZlcnQgTGliZXJ0eSBBbGxp YW5jZSBMRUNQICMzIHRlc3QgY2VydGlmaWNhdGUwDQYJKoZIhvcNAQEFBQADggEB AIJ7sCPO+JxqW2q/KRPyed9Bn4e03NtaiTreNlmwy+9B5QKYYQe5FKQ8Z7keuh9o BHcRVc4OOBeLSdg6fTGIu7OyPzw4D+tbZITNyfrWFi2sh7gdx/v8bM8B59lLTEun 32dNz76jL7Q72cfpDvHVvwSVNbEWMPWQGdWboUABiqoEMD2ROnm2AACre7bLcV+t 5UyfXmXsYg5X7cxuGCW8IBxFGORMQ4TruxC1zQJ3KXZQYB2pQD03VWsapA4+IS4Q PiX0kOMNAGhAoOwpSbuAY8LGaKbt0eBt7GjEJl9CCJnalJGdzi8YrPqfu8Lh0qzn rpHJn+2x5QMIyI9Vskwkzi8= -----END CERTIFICATE----- lasso-2.8.2/tests/data/lecp3-la/PaxHeaders/private-key-raw.pem0000644000000000000000000000013113766621500021134 xustar0029 mtime=1608196928.94689681 30 atime=1678098071.469500656 30 ctime=1678814321.417955632 lasso-2.8.2/tests/data/lecp3-la/private-key-raw.pem0000644000175000017500000000331613766621500024410 0ustar00bdauvergnebdauvergne000000000000000: lecp-jks.keystore 1: lasso 2: changeit -----BEGIN PRIVATE KEY----- MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDERCMvC2kxHmlv9JnNsVpwk6ZY XM5U79P0Mi67XrG8H7KIjknXxV5HtQvVgQroO493bJhA2uX5dMUoR6Fyj9YAU7m2d6n6hpMO+P7i FTmP+Pa/NavyTIXOyDQh89PkwceOBHGzZrYnbzWJ10KiI/8OOlHu7XWoGAD3baqXnpSaq1nFNIeY KMLpcJDWf6S80IA8O+Vtk/5IZVq4zWbnue5G7/aRTRsFvyJsACD8ezl7yauz26F8TuPuPYMx6IYw zi0G+R2wc3AMYTZf1nQZCEkJ237LuIufkbSRXqMULDHEx5J0vgUlQn603EwyT4j5VBleMKzRjtWz Dm7d44s/bmEzAgMBAAECggEATgNPgOmmPHH8MxYk9I/khQ8LdeAd28EgnNY9oRi4yTBIRONaErxP B229cHZEoZ7bHfs6Yb0g4JE7tRET6Xem9qZREWhrVjubxL3QgokxQjsRyVtKJ5unLFSD9GL4/NrR uW+mykqvaOlZfJrlz5FDVqJz4ubcd55i8/bRckcEhp2WWusXZxT3SkHbeDTYV+ERLBjRx+41yg3C ltiiWnfuyQmkeIKIr0IJ5qxMz8nuXpmd1QdQEvy8Ib2Hf6y1AcneLEeftHo5dZKyA2J/aAV71TUg OZ8FXZBGmH7N1pSp7BEEFBcx6uxeIVS6aHaWTBF3L8WAjBTVvyAPysYxXxzjsQKBgQD6fn/4NrIK pEGyXR4pY246VZG7y8gBGb/IC5wbIXugddKG/Et6ijEUVkLK72vR2zN4q1NXVchm9WYXNxKxs9vT SD1xlink/q1nYgFmUBxXFtjCdpcGGIeq/UDASjXR4R4rLLzmo85c2YneX9Px1WicRl7/2Mqdqh6r 4bufW1u7xQKBgQDIlIDYjYGBqHJdhTCnlZdolG4omkTtCxOXs77B4xzwHUCaRSjslkIeRfM73s5J sDFJ8bPGNPGdKVUer7u95nGJCEhC2g6ZlIfigfbpKdRNWwhXwMk+VUcLH6tvNO/dLfxiI/wbcDvF vS7lbYcFl5vRC4IwkBKubx9MAg1s/RIglwKBgCFcJ37PCfcQ2Q8AB7xLWaq7KqVwBjrfSwNBSJD0 bJp6FoeTohm3vcGPm2WbbSiNoNU5O+gtrHrJw8bjtsGjymrg/A3cicfNgxp5muYdVSjkCgob8REG w0qqX608NN62tGXbl2y/9AO5lPrgmEFkwoHNfWllXdaRiXQqo+odKKJhAoGBAKF0+KpYbdEC2Nxy 5BFiFvi10l6Yn7b33ZOVuo2z1Y1q3p/P3/thkGNyBzNATGmAjIxrJTz9TSgnJz+GUeew4d9ebVxy zqHNr/wihbB2XVDPYE3S/6tPVdqcaZEg2Zv+8lPFh6BGnba0bFV97twPh/uj+e5BauhCxryWQlxi 8f6NAoGARPuoxP5tZVKrRlMmUSKlqyxF6mveS/egdQVaFHfna0xN5Ajk/4GqP4Ew+/oxt3GtEAd/ j+bATAR+q7Sf/CPmstsH5IiwFjkahyH0R9FeiezCVNjAKAJGn11XC1mR3MRvNquDBaPHmacR2Co/ 4BBmsCPiRI65UFxyQGuLOs9k0Kk= -----END PRIVATE KEY----- lasso-2.8.2/tests/data/PaxHeaders/sp2-la0000644000000000000000000000013213766621500015024 xustar0030 mtime=1608196928.958896909 30 atime=1678814326.421984131 30 ctime=1678814321.477955974 lasso-2.8.2/tests/data/sp2-la/0000755000175000017500000000000013766621500020351 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tests/data/sp2-la/PaxHeaders/metadata.xml0000644000000000000000000000013213766621500017403 xustar0030 mtime=1608196928.958896909 30 atime=1678098071.529501127 30 ctime=1678814321.477955974 lasso-2.8.2/tests/data/sp2-la/metadata.xml0000644000175000017500000000514213766621500022655 0ustar00bdauvergnebdauvergne00000000000000 https://sp2:2008/assertionConsumer https://sp2:2008/singleLogout https://sp2:2008/singleLogoutReturn http://projectliberty.org/profiles/slo-idp-soap http://projectliberty.org/profiles/slo-idp-http http://projectliberty.org/profiles/slo-sp-soap http://projectliberty.org/profiles/slo-sp-http https://sp2:2008/federationTermination https://sp2:2008/federationTerminationReturn http://projectliberty.org/profiles/fedterm-idp-soap http://projectliberty.org/profiles/fedterm-idp-http http://projectliberty.org/profiles/fedterm-sp-soap http://projectliberty.org/profiles/fedterm-sp-http https://sp2:2008/registerNameIdentifier https://sp2:2008/registerNameIdentifierReturn http://projectliberty.org/profiles/rni-idp-soap http://projectliberty.org/profiles/rni-idp-http http://projectliberty.org/profiles/rni-sp-soap http://projectliberty.org/profiles/rni-sp-http https://sp2:2008/soapEndpoint true lasso-2.8.2/tests/data/sp2-la/PaxHeaders/public-key.pem0000644000000000000000000000013213766621500017650 xustar0030 mtime=1608196928.958896909 30 atime=1678098071.529501127 30 ctime=1678814321.477955974 lasso-2.8.2/tests/data/sp2-la/public-key.pem0000644000175000017500000000070313766621500023120 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3LTKlolHNrEtKq75yOZc lYCXbVd68SLAJskwL0P7K7GpoO3535Fbi5auT8R+z8X+jtKrsFr3m9LwUyNHtfvr koN1oGwa5tSqBpM+d4nGc+R6lrLNXMRQ5m75+W10BqZF65adfFkX0Kbp+BDRez3f wEEEaMqmE7nlkXoQYvSAGkzmHr6Rm6BHSjL55D4qxQY/UKlJrXmX9h0LNSggu7DG GnuZabrUJTkTYsPVMipgpBPgex1+WY5FwoMPSfTtdYtmVhh3D4O9hO99E8TFs+np JXpqHoV1cCisjYuuOVJw4NSQQ8grRa/f6veCytvZgPidPp4m7R+eyhdC1roh7rbf qQIDAQAB -----END PUBLIC KEY----- lasso-2.8.2/tests/data/sp2-la/PaxHeaders/jks.keystore0000644000000000000000000000013213766621500017457 xustar0030 mtime=1608196928.958896909 30 atime=1678098071.529501127 30 ctime=1678814321.477955974 lasso-2.8.2/tests/data/sp2-la/jks.keystore0000644000175000017500000001130113766621500022723 0ustar00bdauvergnebdauvergne00000000000000þíþílassoþWÀl0‚ý0 +*‚éâhô~° …¸ÍÁÿðRš:ÑŸ+ôUt¢˜$»8¨‚–5"~Ò‰¦ƒ xhX†“©KE¨Å¥¨¹n¶dÞ£\t"|ókÒ³]ÎÕ?{¼ß$ ©¸üv`34á&TÖÖ Ö[$OÔí]É𫵽 Èçtƒ*¶¨‰ýyö€Žß4d`„”¼%/òsañ´ò(M•Ì·—Š •›·"íWÿóÓ³£/»Û4tˆ7± @¤G}d½yp^¡ô±~ :ÎöBý#%Âä\ãÑœzYѺ¶Y„ÜãA(¼‡¹Úô!ƒ¢TEuÖA%ºE­„è´<ù¦7J±Ìƒ{»Œ…¦÷¸óä@žlÀ~>‡°×`åà«—ó,SkfKÖcP`º$Bµ ¸ÿD¹æOê¢ð`€ÍÓW•A f,‡´­$Úðò[õv5ÒxÙç)íù çž™J”Ô‘hÏÕnËVÊò °µ•yéÔ?yã(=LM…ÔÀ*L? ½'Õ­ñèe‚vJ4žÇ‚†¬§à b¶k_¸Yl/·N2ê³döYúˆvÔf ›r±6eESÅ–F„îîs‰lû‰¬. ò¦X›–-Wa£ÿî>vÝ–Øtç²z}8%üZ#xuD—•õÞ£‹¤}“gÐRÕn°²~ˆª'(!ãB>ôwÅÁŠ,™–+Â(¡íÝ—[XâÀ·ø/>æ'ÆÚ.~-.¿t¿—RéûÍ+0Œïp޾˜äS\ÔT®±3w…h5ñ¨ÿ´|šô¦Û„s S§J£f³©µI_FòŸii'|õ¯”çUV(³_Kà¸îˆìLÕ ìZõåÖ(~]H¼TçjƒÉÚ!T¶,/%zª3'å{.úšÎôìÂÞž’\6` *–ñÃu‡8g›V)Н` jæí°ý= ªé•Vo!£aóÓjëUê!b™š#Œ`üî¬s¤";ëuO?û?/îä)éNÅy²õ’hG8‹dÑ˱ÌhuçiiȘ†µÌz?@·ð#•à»\wåÌ÷±vËw‰Æsäz–²Í\ÄPænùùmt¦Eë–|YЦéøÑ{=ßÀAhʦ¹å‘zbô€L澑› GJ2ùä>*Å?P©I­y—ö 5( »°Æ{™iºÔ%9bÃÕ2*`¤à{~YŽEƒIôíu‹fVwƒ½„ï}Äųéé%zj…up(¬‹®9RpàÔCÈ+E¯ßê÷‚ÊÛÙ€ø>ž&ížÊBÖº!î¶ß©£‚$0‚ 0Uy›zˆ¼ù&Å?^q¨èñ`ž“0U#0€ò Uå«‘cøñNìÛû ¯žr0 Uÿ00 U€0U%0++0 `†H†øB€0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0A `†H†øB 42Entrouvert Liberty Alliance SP #2 test certificate0  *†H†÷ ‚11böVéë%¯¿ûöÀÄÍæ‘•þ!š«D'<º(ÊΪF~ŸéØä‰Ò'Hß(¸ËªñÂP¨æûÔ’s€²œ«ëË}83˜Òƒ§y710³ÌW‹TAl™ë!Ü¢¨ùwëþ˜Å»5zå÷wÙ´bI¹|ס š† :éY"x°¹‘kDJ \Nëq±Aÿ6^‹¤sdd±ÿr™«0u™ ‡'©uBþÁsÖpG·Œ³Æm­5“[?¿Âµ$‰ÛŸçÙ"ÿî2="wåïéày7ò„ÀãC˜ûN‚îÛ¾»-¡«àcö>›¨e¡„ˆÖ­d®‡·…>r)(E›e‘1×ÉX.509t0‚p0‚X 0  *†H†÷ 0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #210U Entrouvert0 040813103640Z 290404103640Z0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #210U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚á áâ À¥ª’.…l᥅¢ÕåDRXYÑÈóD¬õ•Qûqè UåϾ±Ç£ÜÐg†8nÖÿÜþÓu qI´Û¦.Øo^iÛ܆ ùEÈ 3‡ É˲áÉÀJ\Uâw)‰$ ”¥žæ¤ÎwÅ×û¶MéÍ#/^0àN~ÅeïƒÇA|•Ì•’ÕÍ©–ÍäI±s•#I/®Þv/2 IÙbï들çLR+ÖRq«Ø³[˜œŸ½3ÈäÔrMjYHë+wÓ™:qg|ØÅX“‘»ÃÂÃ.ö¨$±ˆb–=ã(®!ßzð×ßÉMî)Á¹M”C`ô.%2°ØV£‚C0‚?0Uò Uå«‘cøñNìÛû ¯žr0U#0€ò Uå«‘cøñNìÛû ¯žr0Uÿ0ÿ0 U0*U%#0!+ +‚7  `†H†øB0 `†H†øB0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0P `†H†øB CAEntr'ouvert Liberty Alliance test Root Certification Authority #20  *†H†÷ ‚àšS\I«ÃŒ³D›ý€âK®CuË = &Ê*¬%BOŠq1I}dÖ¢j«úÖöwþ\³Õ‘÷FhÔÝÈÑ,þóyý8•Bm›Ç=Šž/6( C‹œÌ1Yإ뎤¡w‘D…*Gè.Äqìýôp5œi'r§Jãð4,Á# ­4:Mþ4i2ÊŽ K˜%ÁDŠYói’|TËÍÛ ¿â¬D91Ðe‚ØýÐÙáòœvûF69<åÁÁ–M²ÂŒ;ÅpÔp9‹sœÊå`êÌ*' [Z@ÄP€* /OVóæ“`ÿf|†öX  8âAentr'ouvert liberty alliance test root certification authority #2þW¿Ý¾X.509t0‚p0‚X 0  *†H†÷ 0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #210U Entrouvert0 040813103640Z 290404103640Z0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #210U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚á áâ À¥ª’.…l᥅¢ÕåDRXYÑÈóD¬õ•Qûqè UåϾ±Ç£ÜÐg†8nÖÿÜþÓu qI´Û¦.Øo^iÛ܆ ùEÈ 3‡ É˲áÉÀJ\Uâw)‰$ ”¥žæ¤ÎwÅ×û¶MéÍ#/^0àN~ÅeïƒÇA|•Ì•’ÕÍ©–ÍäI±s•#I/®Þv/2 IÙbï들çLR+ÖRq«Ø³[˜œŸ½3ÈäÔrMjYHë+wÓ™:qg|ØÅX“‘»ÃÂÃ.ö¨$±ˆb–=ã(®!ßzð×ßÉMî)Á¹M”C`ô.%2°ØV£‚C0‚?0Uò Uå«‘cøñNìÛû ¯žr0U#0€ò Uå«‘cøñNìÛû ¯žr0Uÿ0ÿ0 U0*U%#0!+ +‚7  `†H†øB0 `†H†øB0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0P `†H†øB CAEntr'ouvert Liberty Alliance test Root Certification Authority #20  *†H†÷ ‚àšS\I«ÃŒ³D›ý€âK®CuË = &Ê*¬%BOŠq1I}dÖ¢j«úÖöwþ\³Õ‘÷FhÔÝÈÑ,þóyý8•Bm›Ç=Šž/6( C‹œÌ1Yإ뎤¡w‘D…*Gè.Äqìýôp5œi'r§Jãð4,Á# ­4:Mþ4i2ÊŽ K˜%ÁDŠYói’|TËÍÛ ¿â¬D91Ðe‚ØýÐÙáòœvûF69<åÁÁ–M²ÂŒ;ÅpÔp9‹sœÊå`êÌ*' [Z@ÄP€* /OVóæ“`ÿf|†öX  8â+ÞÞ¤«£ca¨ýRí1¯Êlasso-2.8.2/tests/data/sp2-la/PaxHeaders/certificate.pem0000644000000000000000000000013213766621500020066 xustar0030 mtime=1608196928.958896909 30 atime=1678098071.529501127 30 ctime=1678814321.477955974 lasso-2.8.2/tests/data/sp2-la/certificate.pem0000644000175000017500000000274113766621500023342 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN CERTIFICATE----- MIIEKTCCAxGgAwIBAgIBAjANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJGUjE0 MDIGA1UEAwwrRW50cm91dmVydCBMaWJlcnR5IEFsbGlhbmNlIHRlc3QgUm9vdCBD QSAjMjETMBEGA1UECgwKRW50cm91dmVydDAeFw0wNDA4MTMxMDQ0MjNaFw0yNDA4 MTQxMDQ0MjNaMDAxDDAKBgNVBAMTA3NwMjETMBEGA1UEChMKRW50cm91dmVydDEL MAkGA1UEBhMCRlIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDctMqW iUc2sS0qrvnI5lyVgJdtV3rxIsAmyTAvQ/srsamg7fnfkVuLlq5PxH7Pxf6O0quw Wveb0vBTI0e1++uSg3WgbBrm1KoGkz53icZz5HqWss1cxFDmbvn5bXQGpkXrlp18 WRfQpun4ENF7Pd/AQQRoyqYTueWRehBi9IAaTOYevpGboEdKMvnkPirFBj9QqUmt eZf2HQs1KCC7sMYae5lputQlORNiw9UyKmCkE+B7HX5ZjkXCgw9J9O11i2ZWGHcP g72E730TxMWz6eklemoehXVwKKyNi645UnDg1JBDyCtFr9/q94LK29mA+J0+nibt H57KF0LWuiHutt+pAgMBAAGjggEkMIIBIDAdBgNVHQ4EFgQUecIAm3qIvPkmxT9e EXGo6PFgnpMwHwYDVR0jBBgwFoAU8iBV5auRY/jxEU7sEdv7C6+eFHIwDAYDVR0T AQH/BAIwADALBgNVHQ8EBAMCB4AwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUF BwMIMBEGCWCGSAGG+EIBAQQEAwIHgDAmBgNVHREEHzAdhhtodHRwOi8vbGFzc28u ZW50cm91dmVydC5vcmcwJgYDVR0SBB8wHYYbaHR0cDovL2xhc3NvLmVudHJvdXZl cnQub3JnMEEGCWCGSAGG+EIBDQQ0FjJFbnRyb3V2ZXJ0IExpYmVydHkgQWxsaWFu Y2UgU1AgIzIgdGVzdCBjZXJ0aWZpY2F0ZTANBgkqhkiG9w0BAQUFAAOCAQEABjEx YvYVVunrJa+/+/bAxM3mkZX+IZqrRCc8uijKzqpGfp/p2OSJ0idI3yi4y6rxwlCo 5vvUknOAspyr68t9GTgzmALSg6d5NzEws8wRV4tUDkEEbJnrIdyiqPl36/6Yxbs1 euX3d9m0YkkIuXzXoQqahgkUOulZIniwuZEPaw5ESgxcTusecbECQf82Xoukc2Rk sf9ymaswdZkLhyepdUL+wXPWcEe3jLMexm2tNQCTWz+/wrUkiduf59ki/+4yPSJ3 5e/p4AZ5N/IbhMDjQ5j7D06C7h7bvrstoasP4GP2Po0Sm6hloYSI1q1kwq6HtwCF PnIpFChFm2WRMRjXyQ== -----END CERTIFICATE----- lasso-2.8.2/tests/data/sp2-la/PaxHeaders/private-key-raw.pem0000644000000000000000000000013213766621500020633 xustar0030 mtime=1608196928.958896909 30 atime=1678098071.529501127 30 ctime=1678814321.477955974 lasso-2.8.2/tests/data/sp2-la/private-key-raw.pem0000644000175000017500000000331413766621500024104 0ustar00bdauvergnebdauvergne000000000000000: sp-jks.keystore 1: lasso 2: changeit -----BEGIN PRIVATE KEY----- MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDctMqWiUc2sS0qrvnI5lyVgJdt V3rxIsAmyTAvQ/srsamg7fnfkVuLlq5PxH7Pxf6O0quwWveb0vBTI0e1++uSg3WgbBrm1KoGkz53 icZz5HqWss1cxFDmbvn5bXQGpkXrlp18WRfQpun4ENF7Pd/AQQRoyqYTueWRehBi9IAaTOYevpGb oEdKMvnkPirFBj9QqUmteZf2HQs1KCC7sMYae5lputQlORNiw9UyKmCkE+B7HX5ZjkXCgw9J9O11 i2ZWGHcPg72E730TxMWz6eklemoehXVwKKyNi645UnDg1JBDyCtFr9/q94LK29mA+J0+nibtH57K F0LWuiHutt+pAgMBAAECggEASu1RraNzOr0RsWDvyeVy3wpl3igJw91hUImSwykYFzBcfxbrcpvd cVk5WjlCN/Vmw0QAJ4Hqd8s37XGXwc+BnR7mCw1IYL8n7c2FMn3ikqupdonDMFAxitl4Idanwi4m pKFgW7u/WwWffqjvBSDvWkx4W78YfK/qoOXItF9/Me3xvN6Bm/CGZ0Aw58hHKub6WOhC8v2Pta4o ctJHOvvzfJnQr2VdTXxApC8Un3pF6RFiDD3WPrAvKKKiLc8tG6ABwd7E3az8YhEPIXT3KQiCq8HH RzIIojM6k+Bkegm/o9GILdcyfIVw3hVtkhdJzTkyKYI9EraE+zgAYJPzveWzdQKBgQD63XFnP4HD J61OFWWvKiYpeFK7usbnPRnhnvJDn0wVjwqNE4txMLPhmTwkQ96mt/1jDn4URbuaKDBAjBBmRiyK yBHXzC/b0mvbOyWUGOv0uTFnm+qGG4kuPujs0+SgzBOpA9c4nFuy8lUEsg9hhlzGazqD6YGkmChA fqZa+HjhVwKBgQDhOVA4eQVk8b2ljIiejArQ9YuQnVP/j1mkHab63N2o4wLljAt0028LMM0BnfAq 37/5VpQKa79082UU2uVD8gqg2hY9LflW1ESiRBaKMPGZwGbAtPbHYOnEnrURtD5OxMLKVJ/5t8r4 16ed5NO95VV8eLF4FdYEBjjWUJ4Tx1Cm/wKBgQDObXnro+57UCLjpefOg7hzV3d80uzpSvYJGmnw CxzogJQGEpcjxRfAA//hN5f3SF9RK5PDyr3c1EUgWCEGh6gPayKDmJmpITVvaPQ7MWa4McvdngcV 44K2cz3n41S2nDdxVJ+9DazHS3F6M6tEbPPaslGsSnFLp4k3yP/Ky7tscQKBgG9UEEZJ9BOotvC9 Hc8ZNEOEDH/odNvvdQT9r0tzn5Ha3NSwu/z8gnhKoBt7gXr/7PoIBNd92T6rDT0Y0pkabIyEINgP AKAd/usisu2OMe6pP2FkUlPNoOAS/zgIG4B+HDc9S3J5mjgVCYKv2MaWNQJ4+mh8irSkirXNVcY7 EK/rAoGALgORJHbmON9nRdcqEigZrKMK5M4vQOlazpVQ1adlSw11pIeXgpVAOxmv8/zWzt2mLwWa BbM10eUEHxGPugRRzOj8CQZq4pvfC5/urp3Zt4VUb5yltFWenJwZvBNjWydlBMeAkaRTZVw81E7c doCD0cMNFuuS643wqNLlWebHeX4= -----END PRIVATE KEY----- lasso-2.8.2/tests/data/PaxHeaders/idp11-multikey-saml20000644000000000000000000000013214335157720017522 xustar0030 mtime=1668603856.101460296 30 atime=1678814326.421984131 30 ctime=1678814321.309955017 lasso-2.8.2/tests/data/idp11-multikey-saml2/0000755000175000017500000000000014335157720023047 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tests/data/idp11-multikey-saml2/PaxHeaders/metadata.xml0000644000000000000000000000013214050545511022072 xustar0030 mtime=1621281609.259307995 30 atime=1678098071.377499933 30 ctime=1678814321.309955017 lasso-2.8.2/tests/data/idp11-multikey-saml2/metadata.xml0000644000175000017500000000774514050545511025357 0ustar00bdauvergnebdauvergne00000000000000 MIICHjCCAYegAwIBAgIJAIqpRTWoklygMA0GCSqGSIb3DQEBBQUAMBUxEzARBgNVBAoTCkVudHJvdXZlcnQwHhcNMTEwMTE5MTg0MzIwWhcNMTEwMjE4MTg0MzIwWjAVMRMwEQYDVQQKEwpFbnRyb3V2ZXJ0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3vSEy6WMnyN20hiRAsZ8kAJAS+wgztD3WoyULdTz3S8JlqGRW2cCuoS77o539aA2C2lUehNrw/0h9uyrT2GroAjlw8wb6pQrpydteL8A59RtvhfdqwOfScV6Y9dUwKGvoGtC9sbB3mBtkb7MaWmhFucNe02KV5Tas1Xl6hexjEwIDAQABo3YwdDAdBgNVHQ4EFgQUBe+8IQnCGoU6FG+E2CTD44Mnji0wRQYDVR0jBD4wPIAUBe+8IQnCGoU6FG+E2CTD44Mnji2hGaQXMBUxEzARBgNVBAoTCkVudHJvdXZlcnSCCQCKqUU1qJJcoDAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBABdOD1MRL9hnkc9ilB5VZ2SDYAqH7L6ed1VwQBzNzIyX3Uy9tldn5jGOEeRTax9I/YTEpcwetlUVE+MiJTa+V/XlfPC4BcbRE+EdLAT+pmSFAOo/5XoFIgNBTXS1sj0QJ8mZLgGVWmP8rjtvTVIw995pG1L9No/KM70CaHDKyXq9 MIIDnjCCAoagAwIBAgIBATANBgkqhkiG9w0BAQUFADBUMQswCQYDVQQGEwJGUjEPMA0GA1UECBMGRnJhbmNlMQ4wDAYDVQQHEwVQYXJpczETMBEGA1UEChMKRW50cm91dmVydDEPMA0GA1UEAxMGRGFtaWVuMB4XDTA2MTAyNzA5MDc1NFoXDTExMTAyNjA5MDc1NFowVDELMAkGA1UEBhMCRlIxDzANBgNVBAgTBkZyYW5jZTEOMAwGA1UEBxMFUGFyaXMxEzARBgNVBAoTCkVudHJvdXZlcnQxDzANBgNVBAMTBkRhbWllbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM06Hx6VgHYR9wUf/tZVVTRkVWNqh9x+PvHA2qH4OYMuqGs4Af6lU2YsZvnrmRdcFWv0+UkdAgXhReCWAZgtB1pd/W9m6qDRldCCyysow6xPPKRz/pOTwRXm/fM0QGPeXzwzj34BXOIOuFu+n764vKn18d+uuVAEzk1576pxTp4pQPzJfdNLrLeQ8vyCshoFU+MYJtp1UA+h2JoO0Y8oGvywbUxHioHN5PvnzObfAM4XaDQohmfxM9Uc7Wp4xKAc1nUq5hwBrHpjFMRSz6UCfMoJSGIi+3xJMkNCjL0XEw5NKVc5jRKkzSkN5j8KTM/k1jPPsDHPRYzbWWhnNtd6JlkCAwEAAaN7MHkwCQYDVR0TBAIwADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFP2WWMDShux3iF74+SoO1xf6qhqaMB8GA1UdIwQYMBaAFGjl6TRXbQDHzSlZu+e8VeBaZMB5MA0GCSqGSIb3DQEBBQUAA4IBAQAZ/imK7UMognXbs5RfSB8cMW6iNAI+JZqe9XWjvtmLfIIPbHM96o953SiFvrvQBZjGmmPMK3UH29cjzDx1R/RQaYTyMrHyTePLh3BMd5mpJ/9eeJCSxPzE2ECqWRUapkjukecFXqmRItwgTxSIUE9QkpzvuQRb268PwmgroE0mwtiREADnvTFkLkdiEMewfiYxZfJJLPBqwlkw/7f1SyzXoPXnz5QbNwDmrHelga6rKSprYKb3pueqaIe8j/APNC1/bzp8cGOcJ88BD5+Ny6qgPVCrMLE5twQumJ12V3SvjGNtzFBvg2c/9S5OmVqRLlTxKnCrWAXftSm1rNtewTsF Entr'ouvert lasso-2.8.2/tests/data/idp11-multikey-saml2/PaxHeaders/certificate-1.pem0000644000000000000000000000013213766621500022721 xustar0030 mtime=1608196928.938896744 30 atime=1678098071.377499933 30 ctime=1678814321.309955017 lasso-2.8.2/tests/data/idp11-multikey-saml2/certificate-1.pem0000644000175000017500000000143213766621500026171 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN CERTIFICATE----- MIICHjCCAYegAwIBAgIJAIqpRTWoklygMA0GCSqGSIb3DQEBBQUAMBUxEzARBgNV BAoTCkVudHJvdXZlcnQwHhcNMTEwMTE5MTg0MzIwWhcNMTEwMjE4MTg0MzIwWjAV MRMwEQYDVQQKEwpFbnRyb3V2ZXJ0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB gQC3vSEy6WMnyN20hiRAsZ8kAJAS+wgztD3WoyULdTz3S8JlqGRW2cCuoS77o539 aA2C2lUehNrw/0h9uyrT2GroAjlw8wb6pQrpydteL8A59RtvhfdqwOfScV6Y9dUw KGvoGtC9sbB3mBtkb7MaWmhFucNe02KV5Tas1Xl6hexjEwIDAQABo3YwdDAdBgNV HQ4EFgQUBe+8IQnCGoU6FG+E2CTD44Mnji0wRQYDVR0jBD4wPIAUBe+8IQnCGoU6 FG+E2CTD44Mnji2hGaQXMBUxEzARBgNVBAoTCkVudHJvdXZlcnSCCQCKqUU1qJJc oDAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBABdOD1MRL9hnkc9ilB5V Z2SDYAqH7L6ed1VwQBzNzIyX3Uy9tldn5jGOEeRTax9I/YTEpcwetlUVE+MiJTa+ V/XlfPC4BcbRE+EdLAT+pmSFAOo/5XoFIgNBTXS1sj0QJ8mZLgGVWmP8rjtvTVIw 995pG1L9No/KM70CaHDKyXq9 -----END CERTIFICATE----- lasso-2.8.2/tests/data/idp11-multikey-saml2/PaxHeaders/private-key-1.pem0000644000000000000000000000013213766621500022677 xustar0030 mtime=1608196928.938896744 30 atime=1678098071.377499933 30 ctime=1678814321.309955017 lasso-2.8.2/tests/data/idp11-multikey-saml2/private-key-1.pem0000644000175000017500000000156713766621500026160 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN RSA PRIVATE KEY----- MIICXQIBAAKBgQC3vSEy6WMnyN20hiRAsZ8kAJAS+wgztD3WoyULdTz3S8JlqGRW 2cCuoS77o539aA2C2lUehNrw/0h9uyrT2GroAjlw8wb6pQrpydteL8A59Rtvhfdq wOfScV6Y9dUwKGvoGtC9sbB3mBtkb7MaWmhFucNe02KV5Tas1Xl6hexjEwIDAQAB AoGBAJQa7NbYD+gy3ps0gaZwRsJDfd7+4NaklDAeY67/urvwImvFN9RWRB2/qVqH wcNRC4sNqQ0ntEAM1wcaRuRqj4jDdB8KG2ecE1ASNP1LaaL3AbDY9zADLRGW93W7 FKBksd7PyQoTknzpPoZl2u+dmxKZ7lJrQHilqLcE0VgCLZchAkEA7tr+S+vkPQe6 Bw50vUB8CygB5qN/y96afMm/7guMMVzGvZqfqOPIdLNaJBqTcMWYQKZBLDPrccRE uPVJ1zt8AwJBAMTtW+tFvlKtBN3NVf7xArWilAEhNtHUUhl0V5w/iWSSnpJyDG5D M1kuMLjn0yR94YJu14/+ozXcsho8qzYNN7ECQQDWfcoGm5qmQ54GYDDtEk9SJWcv mntUtF2+2d2FAtGuMkY2VfgyTfrg8X5tFYB5sLd8ts+nxigUTc/42CyrHzvJAkBh pdULf8TVGCgul7AJv5Z5XImJWd/mAiNHrfH3b2YAcdehhF33mujuUsIkHggLs0PM Oow3QavKfInwCp9XKQyxAkBTHNG2wBF81ZITfrxJ2XekJYH81P6nPw/UrKerB6qa BLSQBiELJrHLC8w4hkL4MFDUSS2NJd3kjwXfCQs/HSca -----END RSA PRIVATE KEY----- lasso-2.8.2/tests/data/idp11-multikey-saml2/PaxHeaders/certificate-2.pem0000644000000000000000000000013213766621500022722 xustar0030 mtime=1608196928.938896744 30 atime=1678098071.377499933 30 ctime=1678814321.309955017 lasso-2.8.2/tests/data/idp11-multikey-saml2/certificate-2.pem0000644000175000017500000000244213766621500026174 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN CERTIFICATE----- MIIDnjCCAoagAwIBAgIBATANBgkqhkiG9w0BAQUFADBUMQswCQYDVQQGEwJGUjEP MA0GA1UECBMGRnJhbmNlMQ4wDAYDVQQHEwVQYXJpczETMBEGA1UEChMKRW50cm91 dmVydDEPMA0GA1UEAxMGRGFtaWVuMB4XDTA2MTAyNzA5MDc1NFoXDTExMTAyNjA5 MDc1NFowVDELMAkGA1UEBhMCRlIxDzANBgNVBAgTBkZyYW5jZTEOMAwGA1UEBxMF UGFyaXMxEzARBgNVBAoTCkVudHJvdXZlcnQxDzANBgNVBAMTBkRhbWllbjCCASIw DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM06Hx6VgHYR9wUf/tZVVTRkVWNq h9x+PvHA2qH4OYMuqGs4Af6lU2YsZvnrmRdcFWv0+UkdAgXhReCWAZgtB1pd/W9m 6qDRldCCyysow6xPPKRz/pOTwRXm/fM0QGPeXzwzj34BXOIOuFu+n764vKn18d+u uVAEzk1576pxTp4pQPzJfdNLrLeQ8vyCshoFU+MYJtp1UA+h2JoO0Y8oGvywbUxH ioHN5PvnzObfAM4XaDQohmfxM9Uc7Wp4xKAc1nUq5hwBrHpjFMRSz6UCfMoJSGIi +3xJMkNCjL0XEw5NKVc5jRKkzSkN5j8KTM/k1jPPsDHPRYzbWWhnNtd6JlkCAwEA AaN7MHkwCQYDVR0TBAIwADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0 ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFP2WWMDShux3iF74+SoO1xf6qhqaMB8G A1UdIwQYMBaAFGjl6TRXbQDHzSlZu+e8VeBaZMB5MA0GCSqGSIb3DQEBBQUAA4IB AQAZ/imK7UMognXbs5RfSB8cMW6iNAI+JZqe9XWjvtmLfIIPbHM96o953SiFvrvQ BZjGmmPMK3UH29cjzDx1R/RQaYTyMrHyTePLh3BMd5mpJ/9eeJCSxPzE2ECqWRUa pkjukecFXqmRItwgTxSIUE9QkpzvuQRb268PwmgroE0mwtiREADnvTFkLkdiEMew fiYxZfJJLPBqwlkw/7f1SyzXoPXnz5QbNwDmrHelga6rKSprYKb3pueqaIe8j/AP NC1/bzp8cGOcJ88BD5+Ny6qgPVCrMLE5twQumJ12V3SvjGNtzFBvg2c/9S5OmVqR LlTxKnCrWAXftSm1rNtewTsF -----END CERTIFICATE----- lasso-2.8.2/tests/data/idp11-multikey-saml2/PaxHeaders/private-key-2.pem0000644000000000000000000000013213766621500022700 xustar0030 mtime=1608196928.942896777 30 atime=1678098071.377499933 30 ctime=1678814321.309955017 lasso-2.8.2/tests/data/idp11-multikey-saml2/private-key-2.pem0000644000175000017500000000321313766621500026147 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN RSA PRIVATE KEY----- MIIEowIBAAKCAQEAzTofHpWAdhH3BR/+1lVVNGRVY2qH3H4+8cDaofg5gy6oazgB /qVTZixm+euZF1wVa/T5SR0CBeFF4JYBmC0HWl39b2bqoNGV0ILLKyjDrE88pHP+ k5PBFeb98zRAY95fPDOPfgFc4g64W76fvri8qfXx3665UATOTXnvqnFOnilA/Ml9 00ust5Dy/IKyGgVT4xgm2nVQD6HYmg7Rjyga/LBtTEeKgc3k++fM5t8AzhdoNCiG Z/Ez1RztanjEoBzWdSrmHAGsemMUxFLPpQJ8yglIYiL7fEkyQ0KMvRcTDk0pVzmN EqTNKQ3mPwpMz+TWM8+wMc9FjNtZaGc213omWQIDAQABAoIBAEPj5keHzWdBqiXX 38WnlPgv+M9afndCjDANTEYoh14OIUjWzlIe/ufd6HLkrVA89hkwgQbewbyQOT2C YiSlQLl0PlKMCTIKIzVHD07HvXNTAwykEqNfTZChSYEa1/Ixre+MXvugF8nwdKxk 8xN0qXTQF6OXeVYvQNAAdng743YON4ubqKlEezIwnfG/jcoZrGkiTpx+k1JXJsZN 4dHKFP12RRhUTGjaOkBo41w8GNKQLFpy1vqAOYMyi1SJcrwpAu3H0iQug9SylQaM bFjt8j/m13gu3zXIJbi8xbyg3nqpxl9dxcZG/cDA9z2tLu/h3G3nPq7CXvkZxmjl ePvOCwECgYEA9zbwYMtd8tT3PHtrCtjwkfxV0dvMmfNw/rRT4ShWtKLmgX+K9nz/ T4qpbehz4z7OvsLjQ6Bt6wjMNMw9SEBeEMyDVTpmzSD2PowARegmeLX4CsilqHHl /AMYUtywEQ2f65/CWPiMIt8mLnEyJ/dsyVLpuzGUNNt34Yaqpu2qXnUCgYEA1IUy PObmTh3I8ZyESyGhbu2TYs0A8Zy6eTIAv0ijOIpmUykzjE5pR9sB3nYEd4GTHPEv hF6SWfNIDDr83TqThJYzkFyXMCxiVLH55U42wlsvwp4jTnOI3K/7Y7U/lEmBlgcl JbIIv1t9okg3+Kuu4i7iB6JR89cSO/Wfcdu/c9UCgYAHE5eF7cxeqyH4pT/HK7aX NzXtr/EHZySQ5fCQvWrd+NvIUTJVI/ba/AklkEXg92dLpqCCyxDabYIK8N3AN7d5 m6EWy3kt3geueqt3VNHlGrBi/qNfUwNWV3BWzuJrWox9XjFeAp9gUCrzoWHiKv7+ NFVkemLXsICaABTaemsqEQKBgQDJJ4n1u1gieG7Kwqs1sg9rP9RRoFlUWFTogjvS 0p4r1lQkQstX8qAUM2gBeROhSjRFIMUpNZqxKWT4rpzJibg3tzP3YKx6HIi2Qf+W 3AFY1ZbPT397sj/JI4l/Rv93DFxr9TdkBq/g8GhqQpE3/sj5rgaj0zBe7SOFPWg+ DRGaQQKBgEEcSF5KmpIHnhi3WlfGiEtx3kcD63orKME0YYA5BM6wnmRT4QiSw+qj i7ljrKGSbmdMFC3ArM42/k2lXYpVLsYWmyaRYSgbdowxLM1XxDJMFIPR2uG6N+vi HzWkRxi2SXKU42vfs5eA0itHvQP2DfUx8VuvtwVbOxDGgntYia70 -----END RSA PRIVATE KEY----- lasso-2.8.2/tests/data/PaxHeaders/idp6-saml20000644000000000000000000000013214050545511015576 xustar0030 mtime=1621281609.259307995 30 atime=1678814326.421984131 30 ctime=1678814321.373955382 lasso-2.8.2/tests/data/idp6-saml2/0000755000175000017500000000000014050545511021123 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tests/data/idp6-saml2/PaxHeaders/metadata.xml0000644000000000000000000000013214050545511020155 xustar0030 mtime=1621281609.259307995 30 atime=1678098071.433500373 30 ctime=1678814321.373955382 lasso-2.8.2/tests/data/idp6-saml2/metadata.xml0000644000175000017500000001322414050545511023427 0ustar00bdauvergnebdauvergne00000000000000 MIIDnjCCAoagAwIBAgIBATANBgkqhkiG9w0BAQUFADBUMQswCQYDVQQGEwJGUjEPMA0GA1UECBMGRnJhbmNlMQ4wDAYDVQQHEwVQYXJpczETMBEGA1UEChMKRW50cm91dmVydDEPMA0GA1UEAxMGRGFtaWVuMB4XDTA2MTAyNzA5MDc1NFoXDTExMTAyNjA5MDc1NFowVDELMAkGA1UEBhMCRlIxDzANBgNVBAgTBkZyYW5jZTEOMAwGA1UEBxMFUGFyaXMxEzARBgNVBAoTCkVudHJvdXZlcnQxDzANBgNVBAMTBkRhbWllbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM06Hx6VgHYR9wUf/tZVVTRkVWNqh9x+PvHA2qH4OYMuqGs4Af6lU2YsZvnrmRdcFWv0+UkdAgXhReCWAZgtB1pd/W9m6qDRldCCyysow6xPPKRz/pOTwRXm/fM0QGPeXzwzj34BXOIOuFu+n764vKn18d+uuVAEzk1576pxTp4pQPzJfdNLrLeQ8vyCshoFU+MYJtp1UA+h2JoO0Y8oGvywbUxHioHN5PvnzObfAM4XaDQohmfxM9Uc7Wp4xKAc1nUq5hwBrHpjFMRSz6UCfMoJSGIi+3xJMkNCjL0XEw5NKVc5jRKkzSkN5j8KTM/k1jPPsDHPRYzbWWhnNtd6JlkCAwEAAaN7MHkwCQYDVR0TBAIwADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFP2WWMDShux3iF74+SoO1xf6qhqaMB8GA1UdIwQYMBaAFGjl6TRXbQDHzSlZu+e8VeBaZMB5MA0GCSqGSIb3DQEBBQUAA4IBAQAZ/imK7UMognXbs5RfSB8cMW6iNAI+JZqe9XWjvtmLfIIPbHM96o953SiFvrvQBZjGmmPMK3UH29cjzDx1R/RQaYTyMrHyTePLh3BMd5mpJ/9eeJCSxPzE2ECqWRUapkjukecFXqmRItwgTxSIUE9QkpzvuQRb268PwmgroE0mwtiREADnvTFkLkdiEMewfiYxZfJJLPBqwlkw/7f1SyzXoPXnz5QbNwDmrHelga6rKSprYKb3pueqaIe8j/APNC1/bzp8cGOcJ88BD5+Ny6qgPVCrMLE5twQumJ12V3SvjGNtzFBvg2c/9S5OmVqRLlTxKnCrWAXftSm1rNtewTsF MIIDnjCCAoagAwIBAgIBATANBgkqhkiG9w0BAQUFADBUMQswCQYDVQQGEwJGUjEPMA0GA1UECBMGRnJhbmNlMQ4wDAYDVQQHEwVQYXJpczETMBEGA1UEChMKRW50cm91dmVydDEPMA0GA1UEAxMGRGFtaWVuMB4XDTA2MTAyNzA5MDc1NFoXDTExMTAyNjA5MDc1NFowVDELMAkGA1UEBhMCRlIxDzANBgNVBAgTBkZyYW5jZTEOMAwGA1UEBxMFUGFyaXMxEzARBgNVBAoTCkVudHJvdXZlcnQxDzANBgNVBAMTBkRhbWllbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM06Hx6VgHYR9wUf/tZVVTRkVWNqh9x+PvHA2qH4OYMuqGs4Af6lU2YsZvnrmRdcFWv0+UkdAgXhReCWAZgtB1pd/W9m6qDRldCCyysow6xPPKRz/pOTwRXm/fM0QGPeXzwzj34BXOIOuFu+n764vKn18d+uuVAEzk1576pxTp4pQPzJfdNLrLeQ8vyCshoFU+MYJtp1UA+h2JoO0Y8oGvywbUxHioHN5PvnzObfAM4XaDQohmfxM9Uc7Wp4xKAc1nUq5hwBrHpjFMRSz6UCfMoJSGIi+3xJMkNCjL0XEw5NKVc5jRKkzSkN5j8KTM/k1jPPsDHPRYzbWWhnNtd6JlkCAwEAAaN7MHkwCQYDVR0TBAIwADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFP2WWMDShux3iF74+SoO1xf6qhqaMB8GA1UdIwQYMBaAFGjl6TRXbQDHzSlZu+e8VeBaZMB5MA0GCSqGSIb3DQEBBQUAA4IBAQAZ/imK7UMognXbs5RfSB8cMW6iNAI+JZqe9XWjvtmLfIIPbHM96o953SiFvrvQBZjGmmPMK3UH29cjzDx1R/RQaYTyMrHyTePLh3BMd5mpJ/9eeJCSxPzE2ECqWRUapkjukecFXqmRItwgTxSIUE9QkpzvuQRb268PwmgroE0mwtiREADnvTFkLkdiEMewfiYxZfJJLPBqwlkw/7f1SyzXoPXnz5QbNwDmrHelga6rKSprYKb3pueqaIe8j/APNC1/bzp8cGOcJ88BD5+Ny6qgPVCrMLE5twQumJ12V3SvjGNtzFBvg2c/9S5OmVqRLlTxKnCrWAXftSm1rNtewTsF urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress urn:oasis:names:tc:SAML:1.1:nameid-format:kerberos urn:oasis:names:tc:SAML:1.1:nameid-format:X509SubjectName Entr'ouvert lasso-2.8.2/tests/data/idp6-saml2/PaxHeaders/private-key.pem0000644000000000000000000000013213766621500020624 xustar0030 mtime=1608196928.942896777 30 atime=1678098071.437500404 30 ctime=1678814321.373955382 lasso-2.8.2/tests/data/idp6-saml2/private-key.pem0000644000175000017500000000321313766621500024073 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN RSA PRIVATE KEY----- MIIEowIBAAKCAQEAzTofHpWAdhH3BR/+1lVVNGRVY2qH3H4+8cDaofg5gy6oazgB /qVTZixm+euZF1wVa/T5SR0CBeFF4JYBmC0HWl39b2bqoNGV0ILLKyjDrE88pHP+ k5PBFeb98zRAY95fPDOPfgFc4g64W76fvri8qfXx3665UATOTXnvqnFOnilA/Ml9 00ust5Dy/IKyGgVT4xgm2nVQD6HYmg7Rjyga/LBtTEeKgc3k++fM5t8AzhdoNCiG Z/Ez1RztanjEoBzWdSrmHAGsemMUxFLPpQJ8yglIYiL7fEkyQ0KMvRcTDk0pVzmN EqTNKQ3mPwpMz+TWM8+wMc9FjNtZaGc213omWQIDAQABAoIBAEPj5keHzWdBqiXX 38WnlPgv+M9afndCjDANTEYoh14OIUjWzlIe/ufd6HLkrVA89hkwgQbewbyQOT2C YiSlQLl0PlKMCTIKIzVHD07HvXNTAwykEqNfTZChSYEa1/Ixre+MXvugF8nwdKxk 8xN0qXTQF6OXeVYvQNAAdng743YON4ubqKlEezIwnfG/jcoZrGkiTpx+k1JXJsZN 4dHKFP12RRhUTGjaOkBo41w8GNKQLFpy1vqAOYMyi1SJcrwpAu3H0iQug9SylQaM bFjt8j/m13gu3zXIJbi8xbyg3nqpxl9dxcZG/cDA9z2tLu/h3G3nPq7CXvkZxmjl ePvOCwECgYEA9zbwYMtd8tT3PHtrCtjwkfxV0dvMmfNw/rRT4ShWtKLmgX+K9nz/ T4qpbehz4z7OvsLjQ6Bt6wjMNMw9SEBeEMyDVTpmzSD2PowARegmeLX4CsilqHHl /AMYUtywEQ2f65/CWPiMIt8mLnEyJ/dsyVLpuzGUNNt34Yaqpu2qXnUCgYEA1IUy PObmTh3I8ZyESyGhbu2TYs0A8Zy6eTIAv0ijOIpmUykzjE5pR9sB3nYEd4GTHPEv hF6SWfNIDDr83TqThJYzkFyXMCxiVLH55U42wlsvwp4jTnOI3K/7Y7U/lEmBlgcl JbIIv1t9okg3+Kuu4i7iB6JR89cSO/Wfcdu/c9UCgYAHE5eF7cxeqyH4pT/HK7aX NzXtr/EHZySQ5fCQvWrd+NvIUTJVI/ba/AklkEXg92dLpqCCyxDabYIK8N3AN7d5 m6EWy3kt3geueqt3VNHlGrBi/qNfUwNWV3BWzuJrWox9XjFeAp9gUCrzoWHiKv7+ NFVkemLXsICaABTaemsqEQKBgQDJJ4n1u1gieG7Kwqs1sg9rP9RRoFlUWFTogjvS 0p4r1lQkQstX8qAUM2gBeROhSjRFIMUpNZqxKWT4rpzJibg3tzP3YKx6HIi2Qf+W 3AFY1ZbPT397sj/JI4l/Rv93DFxr9TdkBq/g8GhqQpE3/sj5rgaj0zBe7SOFPWg+ DRGaQQKBgEEcSF5KmpIHnhi3WlfGiEtx3kcD63orKME0YYA5BM6wnmRT4QiSw+qj i7ljrKGSbmdMFC3ArM42/k2lXYpVLsYWmyaRYSgbdowxLM1XxDJMFIPR2uG6N+vi HzWkRxi2SXKU42vfs5eA0itHvQP2DfUx8VuvtwVbOxDGgntYia70 -----END RSA PRIVATE KEY----- lasso-2.8.2/tests/data/idp6-saml2/PaxHeaders/certificate.pem0000644000000000000000000000013213766621500020646 xustar0030 mtime=1608196928.942896777 30 atime=1678098071.433500373 30 ctime=1678814321.373955382 lasso-2.8.2/tests/data/idp6-saml2/certificate.pem0000644000175000017500000000244213766621500024120 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN CERTIFICATE----- MIIDnjCCAoagAwIBAgIBATANBgkqhkiG9w0BAQUFADBUMQswCQYDVQQGEwJGUjEP MA0GA1UECBMGRnJhbmNlMQ4wDAYDVQQHEwVQYXJpczETMBEGA1UEChMKRW50cm91 dmVydDEPMA0GA1UEAxMGRGFtaWVuMB4XDTA2MTAyNzA5MDc1NFoXDTExMTAyNjA5 MDc1NFowVDELMAkGA1UEBhMCRlIxDzANBgNVBAgTBkZyYW5jZTEOMAwGA1UEBxMF UGFyaXMxEzARBgNVBAoTCkVudHJvdXZlcnQxDzANBgNVBAMTBkRhbWllbjCCASIw DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM06Hx6VgHYR9wUf/tZVVTRkVWNq h9x+PvHA2qH4OYMuqGs4Af6lU2YsZvnrmRdcFWv0+UkdAgXhReCWAZgtB1pd/W9m 6qDRldCCyysow6xPPKRz/pOTwRXm/fM0QGPeXzwzj34BXOIOuFu+n764vKn18d+u uVAEzk1576pxTp4pQPzJfdNLrLeQ8vyCshoFU+MYJtp1UA+h2JoO0Y8oGvywbUxH ioHN5PvnzObfAM4XaDQohmfxM9Uc7Wp4xKAc1nUq5hwBrHpjFMRSz6UCfMoJSGIi +3xJMkNCjL0XEw5NKVc5jRKkzSkN5j8KTM/k1jPPsDHPRYzbWWhnNtd6JlkCAwEA AaN7MHkwCQYDVR0TBAIwADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0 ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFP2WWMDShux3iF74+SoO1xf6qhqaMB8G A1UdIwQYMBaAFGjl6TRXbQDHzSlZu+e8VeBaZMB5MA0GCSqGSIb3DQEBBQUAA4IB AQAZ/imK7UMognXbs5RfSB8cMW6iNAI+JZqe9XWjvtmLfIIPbHM96o953SiFvrvQ BZjGmmPMK3UH29cjzDx1R/RQaYTyMrHyTePLh3BMd5mpJ/9eeJCSxPzE2ECqWRUa pkjukecFXqmRItwgTxSIUE9QkpzvuQRb268PwmgroE0mwtiREADnvTFkLkdiEMew fiYxZfJJLPBqwlkw/7f1SyzXoPXnz5QbNwDmrHelga6rKSprYKb3pueqaIe8j/AP NC1/bzp8cGOcJ88BD5+Ny6qgPVCrMLE5twQumJ12V3SvjGNtzFBvg2c/9S5OmVqR LlTxKnCrWAXftSm1rNtewTsF -----END CERTIFICATE----- lasso-2.8.2/tests/data/PaxHeaders/idp13-artifact-resolution-service-indexed0000644000000000000000000000013214050545511023710 xustar0030 mtime=1621281609.259307995 30 atime=1678814326.421984131 30 ctime=1678814321.321955086 lasso-2.8.2/tests/data/idp13-artifact-resolution-service-indexed/0000755000175000017500000000000014050545511027235 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tests/data/idp13-artifact-resolution-service-indexed/PaxHeaders/metadata.xml0000644000000000000000000000013214050545511026267 xustar0030 mtime=1621281609.259307995 30 atime=1678098071.385499996 30 ctime=1678814321.321955086 lasso-2.8.2/tests/data/idp13-artifact-resolution-service-indexed/metadata.xml0000644000175000017500000000671614050545511031551 0ustar00bdauvergnebdauvergne00000000000000 MIIDnjCCAoagAwIBAgIBATANBgkqhkiG9w0BAQUFADBUMQswCQYDVQQGEwJGUjEPMA0GA1UECBMGRnJhbmNlMQ4wDAYDVQQHEwVQYXJpczETMBEGA1UEChMKRW50cm91dmVydDEPMA0GA1UEAxMGRGFtaWVuMB4XDTA2MTAyNzA5MDc1NFoXDTExMTAyNjA5MDc1NFowVDELMAkGA1UEBhMCRlIxDzANBgNVBAgTBkZyYW5jZTEOMAwGA1UEBxMFUGFyaXMxEzARBgNVBAoTCkVudHJvdXZlcnQxDzANBgNVBAMTBkRhbWllbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM06Hx6VgHYR9wUf/tZVVTRkVWNqh9x+PvHA2qH4OYMuqGs4Af6lU2YsZvnrmRdcFWv0+UkdAgXhReCWAZgtB1pd/W9m6qDRldCCyysow6xPPKRz/pOTwRXm/fM0QGPeXzwzj34BXOIOuFu+n764vKn18d+uuVAEzk1576pxTp4pQPzJfdNLrLeQ8vyCshoFU+MYJtp1UA+h2JoO0Y8oGvywbUxHioHN5PvnzObfAM4XaDQohmfxM9Uc7Wp4xKAc1nUq5hwBrHpjFMRSz6UCfMoJSGIi+3xJMkNCjL0XEw5NKVc5jRKkzSkN5j8KTM/k1jPPsDHPRYzbWWhnNtd6JlkCAwEAAaN7MHkwCQYDVR0TBAIwADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFP2WWMDShux3iF74+SoO1xf6qhqaMB8GA1UdIwQYMBaAFGjl6TRXbQDHzSlZu+e8VeBaZMB5MA0GCSqGSIb3DQEBBQUAA4IBAQAZ/imK7UMognXbs5RfSB8cMW6iNAI+JZqe9XWjvtmLfIIPbHM96o953SiFvrvQBZjGmmPMK3UH29cjzDx1R/RQaYTyMrHyTePLh3BMd5mpJ/9eeJCSxPzE2ECqWRUapkjukecFXqmRItwgTxSIUE9QkpzvuQRb268PwmgroE0mwtiREADnvTFkLkdiEMewfiYxZfJJLPBqwlkw/7f1SyzXoPXnz5QbNwDmrHelga6rKSprYKb3pueqaIe8j/APNC1/bzp8cGOcJ88BD5+Ny6qgPVCrMLE5twQumJ12V3SvjGNtzFBvg2c/9S5OmVqRLlTxKnCrWAXftSm1rNtewTsF MIIDnjCCAoagAwIBAgIBATANBgkqhkiG9w0BAQUFADBUMQswCQYDVQQGEwJGUjEPMA0GA1UECBMGRnJhbmNlMQ4wDAYDVQQHEwVQYXJpczETMBEGA1UEChMKRW50cm91dmVydDEPMA0GA1UEAxMGRGFtaWVuMB4XDTA2MTAyNzA5MDc1NFoXDTExMTAyNjA5MDc1NFowVDELMAkGA1UEBhMCRlIxDzANBgNVBAgTBkZyYW5jZTEOMAwGA1UEBxMFUGFyaXMxEzARBgNVBAoTCkVudHJvdXZlcnQxDzANBgNVBAMTBkRhbWllbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM06Hx6VgHYR9wUf/tZVVTRkVWNqh9x+PvHA2qH4OYMuqGs4Af6lU2YsZvnrmRdcFWv0+UkdAgXhReCWAZgtB1pd/W9m6qDRldCCyysow6xPPKRz/pOTwRXm/fM0QGPeXzwzj34BXOIOuFu+n764vKn18d+uuVAEzk1576pxTp4pQPzJfdNLrLeQ8vyCshoFU+MYJtp1UA+h2JoO0Y8oGvywbUxHioHN5PvnzObfAM4XaDQohmfxM9Uc7Wp4xKAc1nUq5hwBrHpjFMRSz6UCfMoJSGIi+3xJMkNCjL0XEw5NKVc5jRKkzSkN5j8KTM/k1jPPsDHPRYzbWWhnNtd6JlkCAwEAAaN7MHkwCQYDVR0TBAIwADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFP2WWMDShux3iF74+SoO1xf6qhqaMB8GA1UdIwQYMBaAFGjl6TRXbQDHzSlZu+e8VeBaZMB5MA0GCSqGSIb3DQEBBQUAA4IBAQAZ/imK7UMognXbs5RfSB8cMW6iNAI+JZqe9XWjvtmLfIIPbHM96o953SiFvrvQBZjGmmPMK3UH29cjzDx1R/RQaYTyMrHyTePLh3BMd5mpJ/9eeJCSxPzE2ECqWRUapkjukecFXqmRItwgTxSIUE9QkpzvuQRb268PwmgroE0mwtiREADnvTFkLkdiEMewfiYxZfJJLPBqwlkw/7f1SyzXoPXnz5QbNwDmrHelga6rKSprYKb3pueqaIe8j/APNC1/bzp8cGOcJ88BD5+Ny6qgPVCrMLE5twQumJ12V3SvjGNtzFBvg2c/9S5OmVqRLlTxKnCrWAXftSm1rNtewTsF Entr'ouvert lasso-2.8.2/tests/data/idp13-artifact-resolution-service-indexed/PaxHeaders/private-key.pem0000644000000000000000000000013213766621500026736 xustar0030 mtime=1608196928.942896777 30 atime=1678098071.385499996 30 ctime=1678814321.321955086 lasso-2.8.2/tests/data/idp13-artifact-resolution-service-indexed/private-key.pem0000644000175000017500000000321313766621500032205 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN RSA PRIVATE KEY----- MIIEowIBAAKCAQEAzTofHpWAdhH3BR/+1lVVNGRVY2qH3H4+8cDaofg5gy6oazgB /qVTZixm+euZF1wVa/T5SR0CBeFF4JYBmC0HWl39b2bqoNGV0ILLKyjDrE88pHP+ k5PBFeb98zRAY95fPDOPfgFc4g64W76fvri8qfXx3665UATOTXnvqnFOnilA/Ml9 00ust5Dy/IKyGgVT4xgm2nVQD6HYmg7Rjyga/LBtTEeKgc3k++fM5t8AzhdoNCiG Z/Ez1RztanjEoBzWdSrmHAGsemMUxFLPpQJ8yglIYiL7fEkyQ0KMvRcTDk0pVzmN EqTNKQ3mPwpMz+TWM8+wMc9FjNtZaGc213omWQIDAQABAoIBAEPj5keHzWdBqiXX 38WnlPgv+M9afndCjDANTEYoh14OIUjWzlIe/ufd6HLkrVA89hkwgQbewbyQOT2C YiSlQLl0PlKMCTIKIzVHD07HvXNTAwykEqNfTZChSYEa1/Ixre+MXvugF8nwdKxk 8xN0qXTQF6OXeVYvQNAAdng743YON4ubqKlEezIwnfG/jcoZrGkiTpx+k1JXJsZN 4dHKFP12RRhUTGjaOkBo41w8GNKQLFpy1vqAOYMyi1SJcrwpAu3H0iQug9SylQaM bFjt8j/m13gu3zXIJbi8xbyg3nqpxl9dxcZG/cDA9z2tLu/h3G3nPq7CXvkZxmjl ePvOCwECgYEA9zbwYMtd8tT3PHtrCtjwkfxV0dvMmfNw/rRT4ShWtKLmgX+K9nz/ T4qpbehz4z7OvsLjQ6Bt6wjMNMw9SEBeEMyDVTpmzSD2PowARegmeLX4CsilqHHl /AMYUtywEQ2f65/CWPiMIt8mLnEyJ/dsyVLpuzGUNNt34Yaqpu2qXnUCgYEA1IUy PObmTh3I8ZyESyGhbu2TYs0A8Zy6eTIAv0ijOIpmUykzjE5pR9sB3nYEd4GTHPEv hF6SWfNIDDr83TqThJYzkFyXMCxiVLH55U42wlsvwp4jTnOI3K/7Y7U/lEmBlgcl JbIIv1t9okg3+Kuu4i7iB6JR89cSO/Wfcdu/c9UCgYAHE5eF7cxeqyH4pT/HK7aX NzXtr/EHZySQ5fCQvWrd+NvIUTJVI/ba/AklkEXg92dLpqCCyxDabYIK8N3AN7d5 m6EWy3kt3geueqt3VNHlGrBi/qNfUwNWV3BWzuJrWox9XjFeAp9gUCrzoWHiKv7+ NFVkemLXsICaABTaemsqEQKBgQDJJ4n1u1gieG7Kwqs1sg9rP9RRoFlUWFTogjvS 0p4r1lQkQstX8qAUM2gBeROhSjRFIMUpNZqxKWT4rpzJibg3tzP3YKx6HIi2Qf+W 3AFY1ZbPT397sj/JI4l/Rv93DFxr9TdkBq/g8GhqQpE3/sj5rgaj0zBe7SOFPWg+ DRGaQQKBgEEcSF5KmpIHnhi3WlfGiEtx3kcD63orKME0YYA5BM6wnmRT4QiSw+qj i7ljrKGSbmdMFC3ArM42/k2lXYpVLsYWmyaRYSgbdowxLM1XxDJMFIPR2uG6N+vi HzWkRxi2SXKU42vfs5eA0itHvQP2DfUx8VuvtwVbOxDGgntYia70 -----END RSA PRIVATE KEY----- lasso-2.8.2/tests/data/idp13-artifact-resolution-service-indexed/PaxHeaders/certificate.pem0000644000000000000000000000013213766621500026760 xustar0030 mtime=1608196928.942896777 30 atime=1678098071.385499996 30 ctime=1678814321.321955086 lasso-2.8.2/tests/data/idp13-artifact-resolution-service-indexed/certificate.pem0000644000175000017500000000244213766621500032232 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN CERTIFICATE----- MIIDnjCCAoagAwIBAgIBATANBgkqhkiG9w0BAQUFADBUMQswCQYDVQQGEwJGUjEP MA0GA1UECBMGRnJhbmNlMQ4wDAYDVQQHEwVQYXJpczETMBEGA1UEChMKRW50cm91 dmVydDEPMA0GA1UEAxMGRGFtaWVuMB4XDTA2MTAyNzA5MDc1NFoXDTExMTAyNjA5 MDc1NFowVDELMAkGA1UEBhMCRlIxDzANBgNVBAgTBkZyYW5jZTEOMAwGA1UEBxMF UGFyaXMxEzARBgNVBAoTCkVudHJvdXZlcnQxDzANBgNVBAMTBkRhbWllbjCCASIw DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM06Hx6VgHYR9wUf/tZVVTRkVWNq h9x+PvHA2qH4OYMuqGs4Af6lU2YsZvnrmRdcFWv0+UkdAgXhReCWAZgtB1pd/W9m 6qDRldCCyysow6xPPKRz/pOTwRXm/fM0QGPeXzwzj34BXOIOuFu+n764vKn18d+u uVAEzk1576pxTp4pQPzJfdNLrLeQ8vyCshoFU+MYJtp1UA+h2JoO0Y8oGvywbUxH ioHN5PvnzObfAM4XaDQohmfxM9Uc7Wp4xKAc1nUq5hwBrHpjFMRSz6UCfMoJSGIi +3xJMkNCjL0XEw5NKVc5jRKkzSkN5j8KTM/k1jPPsDHPRYzbWWhnNtd6JlkCAwEA AaN7MHkwCQYDVR0TBAIwADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0 ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFP2WWMDShux3iF74+SoO1xf6qhqaMB8G A1UdIwQYMBaAFGjl6TRXbQDHzSlZu+e8VeBaZMB5MA0GCSqGSIb3DQEBBQUAA4IB AQAZ/imK7UMognXbs5RfSB8cMW6iNAI+JZqe9XWjvtmLfIIPbHM96o953SiFvrvQ BZjGmmPMK3UH29cjzDx1R/RQaYTyMrHyTePLh3BMd5mpJ/9eeJCSxPzE2ECqWRUa pkjukecFXqmRItwgTxSIUE9QkpzvuQRb268PwmgroE0mwtiREADnvTFkLkdiEMew fiYxZfJJLPBqwlkw/7f1SyzXoPXnz5QbNwDmrHelga6rKSprYKb3pueqaIe8j/AP NC1/bzp8cGOcJ88BD5+Ny6qgPVCrMLE5twQumJ12V3SvjGNtzFBvg2c/9S5OmVqR LlTxKnCrWAXftSm1rNtewTsF -----END CERTIFICATE----- lasso-2.8.2/tests/data/PaxHeaders/rootCA.crt0000644000000000000000000000013214050545511015676 xustar0030 mtime=1621281609.267307905 30 atime=1678098071.593501629 30 ctime=1678814321.541956338 lasso-2.8.2/tests/data/rootCA.crt0000644000175000017500000000363014050545511021150 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN CERTIFICATE----- MIIFbTCCA1WgAwIBAgIUJD9pAmQfrAv6NLPnweO4XUdIbzkwDQYJKoZIhvcNAQEL BQAwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoM GEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDAgFw0xOTA2MTEwNzQzNTVaGA8yMjkz MDMyNTA3NDM1NVowRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUx ITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDCCAiIwDQYJKoZIhvcN AQEBBQADggIPADCCAgoCggIBAJuPnHwxmpRquFkFok4VkO39j5NT2a8+Wfp8zYnh qLt3CG3oDyFftWyF97NJYoxDPbio2fVYJiBKutDOMYPsJfrd4SoqcDOGOAdfkNl9 SEhCnzrzlOj6ZcDoNTG0IvKh+NzLgfpU1wggyLW2ZXwvwf8hNGW9YR1i8XY5TSmt 0z9Dawsg2QAyYjoemUeDOVWEFWISmXySC2osXGANcOaaFMEv1Ryj5HWHzcCVZZ0g UBG9iDZqewDvPg+SRvC2k16coeRjsSstHzVqBxOWpp5Oium39K8jXV6jG+JkFn49 C2RBldpajbPhvHKOdtJeID20njgmfCRZB/KfQGPPf8xXk4wBTxPU9L8wKy370unZ P4WD1vq35KfPsiUdlavzqYkOkI20iWIZO6853oSPlJ4zmBVNXP8VhQm0h2VovNH+ Zde4vaPtQXPwwNbCvBItu5m1uaigPgRycBJV8M0gdliAICfCMeSwQDrhkX6ck17n uBpxBTCn9GEFN/+7miNH/roH03NHU3vciqTAi1MrDA3jfOZkYBC/Cd5AmsMc6NTO Xc57mFwuZ+BmQI6w1ddL5e+5Y/DA57VexfTdG+/TpS+D9oBJUmaczkAG+27YKs8f mJKoTSPULjXK8pwwcBMk8HuS5bt6fBBmqbJb8bwXceEHCBg7WCYNmXy5lXwUUwAh NDwDAgMBAAGjUzBRMB0GA1UdDgQWBBRWppx3mP/hCh9ZLKZfwGBeg1wiPjAfBgNV HSMEGDAWgBRWppx3mP/hCh9ZLKZfwGBeg1wiPjAPBgNVHRMBAf8EBTADAQH/MA0G CSqGSIb3DQEBCwUAA4ICAQAWfNrX65UUI55f0A8svSIUVy8c7YjX8P70xMWq7Cpe tRPo8C98JCr8MtUaAx6VFx4sjHyCPmEIIf+u7aDxRhrxpqAQAQl5me8OxqwmOxKu I7WeRrjAvOux52xfjqtm36fx9SUDu94ox5LdG+NNtG29AbLZeAs4pe4qVqH1GQb9 fw3lvxwKV+AovpVZ7eXyscfSvKWi4rgzVJl27me/rgLZsVYJ2gAjTI77vGN1G0ro q2iaTvEALHlzhKepVg1IAJAGJLSZegcK3zwWOqZzkL77De6Z3+zbxwNopcy/CGEs 9v9gDyL1LeAJ3o/dehvPiqMWogTVO6X77sNIiiu41sdaWSTiFllmyO+hQqS69R68 NOe+uAP1+taLhD16kp7XHS0MIXEPaQbEgrXtqb163oMJSAaok3xXNyRJ7ZNMS4CT 0QJE15PpnbRYoQOf4QrrsDmpl2ybU7MR9uOj64qVSvUtBcq1w7ljPStbkN7F7OOU pepVvNaWe820kgQ/l9tu1WY9D7PFGP6iWY4AwdxcpWwlJnIr104X3PQ0Y5/msYVs zEnqaNiEOnbmTZUvn5jJOwh8DWUo+LffRQx/PoZlhZ/L/L3RtpGUV2E+E5Gzqs7W gey9iG11CVcvK/wdCj0zhW/XpesQuwinIMawGS6G92igHo+AFjJoGaGiw3jYdep8 CA== -----END CERTIFICATE----- lasso-2.8.2/tests/data/PaxHeaders/sp4-ssl0000644000000000000000000000013213766621500015233 xustar0030 mtime=1608196928.958896909 30 atime=1678814326.421984131 30 ctime=1678814321.501956111 lasso-2.8.2/tests/data/sp4-ssl/0000755000175000017500000000000013766621500020560 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tests/data/sp4-ssl/PaxHeaders/all.p120000644000000000000000000000013213766621500016404 xustar0030 mtime=1608196928.958896909 30 atime=1678098071.553501315 30 ctime=1678814321.497956088 lasso-2.8.2/tests/data/sp4-ssl/all.p120000644000175000017500000001044413766621500021657 0ustar00bdauvergnebdauvergne000000000000000‚ 0‚æ *†H†÷  ‚ׂÓ0‚Ï0‚ ï *†H†÷  ‚ à0‚ Ü0‚ Õ *†H†÷ 0 *†H†÷  0® nö&wò#€‚ ¨}9bçTè:ý$ð Bý¸¹æ WQ²vçã*°Ó¬Ï¶Vöþ9°Ú€DՀƕõž;ž"¡wT·UŨ酿y‚eŽ5S„l(ïrECÍt žg&¯>4l.‡ÆçäA–*²Ò·(-wË@…]§ÿ~hšžî…¹omÑGk¦9öƒ¤‘aê‚OjؼÀ™ä4s]j¬ÐÇÂAa+ž›÷¦º_ Óé4ßõl–„Ûýh¡Y’ôây¬Nv¯Éa¦Ü?bEºËWñ ¦³YøÞäż<]Nç4ÛÖ\™I÷¹×5k|tHI˜‹E5/{ª j‚øÂrÿÈ 2ë5Ê®=س‹õ<± «Ü­æ‡e»ciI1.¿ÍY  ¢M ¶qmî*ïž‹ýäÖ·Jî6 ¥ÉÁ¯2P§üJCÊ,r ~9Ð@”#<§;v3%bîÉÙÿrý8}oÚØ˜aJ™Üjªý)|*Eçy€è¤i9mT³ŽA(Ôêù_ÉJÜž·YH¶Ã"ÿÈJrˆB½03Zaº$Á_?V·d9²?ýú7"…|¥”OÑ{P·q ^~¥­ëa¶pe×RɈCså0’F@ãþ”v¥8v‹€‘á£Úv»¨®ÂÐVöIüÛuŒ{K‡!k~EJ,Ñž`b,d¶‘M–éHvÆ +•Ÿž¼†ô³¦W©VÒwü»Ï§·`´Áf‚FÕôµŠÛÆ^P|ÎÁò­{Fe`vþ‚–‡˜…y»—å_±£bQuØ/Š¢ééyô¦ ÄÏ_G%‹¡R0I b¤ÞO( ´éTGÔ«-UFÁ²³‚­×Ï-GüÕV7Ú•Õù‹ì ²_P’‹zh”o— m9‚¸6 øÊuc…ƒ•é’¦kþ2ÏË0HÛ„a¬ b‹s¦æˆh§7à­VÒpì³e†™FHZE0ÉIZ*R⼋kÄΩ½¿'™">è|<ûÿsLà`Âg]°®Íj9B̾’OÈVŠ}1nW•–’W¿@^ᣑáÑ2"Õm¹ËFø{ Áf>x ý òû‹_% 3‚C{xTÎàðý[2¸ShÌë ÉŸ(¯Øókàhc.ïAô}2 dm‚)ãNéyÕDî”Þ$ƒd „ÜÂ,@гÜUÞ62“£é³Ú«Î!bH€Ù´V° B‡Ë/° Š\–£nÀ³ùSÇ_ûצÊZ©’Æ„OÅkó¬RfÜ@æ[‰¿¿žmTò #1ÝVО ü GBkÏ\`Ö:óí xë²iHQ0!ÉÕ³ûºÜe…¼7mBºÑòNêμ®!¼é‘PLƒ"xlîÆx¸~sSu½š¢«v¨Ö¢;¤6&A‰«‚ð±Ÿ;Џ9þäfÅEp¨Ï¦Xì Û Jr½’B à¿Ð¦^S Ypü¸wˆûŽÜKÖ;D‰/!µäÄÇ9‚Z@ðB1úã]$J0 qˆx8µ+w©8vÛ¨„|Âk0ÿx…ÄÕм !æFiúÜ;lÝ5D máÍâõá£Û/æ6Þ1š;C--J‡ñ‹ˆnLI;uj¾Qã@|v‡õŠÂd{H¦¤Û hÿr°G³äš×[Ë;¾#óï¾[)½Ö1ÄŽ†ú`MÊýúBòRìN—AŸ¬Nkdé4&äêdï ƒ!•ØPx<.F/&àuáµô³±¢D4#ßÒ t d»¯¶t›1Si{å.¦UWGÙxø)°îͺ+!q6„™üm-Ú#+°Š}¹QÄWsÊ9ˆåò›Ø)Þ“=L—|®Ä×@¼Mã•F¡ZG¶ÎÓêß…•ktsëí¿½FE¾%?ñÅÑì-Ã)«Æœ$ ²Áœ-4–u$¾PdB«À·e²²z_åãƒyÒOs~X†àww[\ð ž.CO°iÿ¾wðáXO vt2töÝÆÑAIlDÄ„—Ô›~6LÑ7roŽ½È’! Xg__YÛ©¥ êRôëV®U·ÒÚé¨î‹¶®#ã’¿½³[o©“\Fk•È, Ø©åaÜCÝFÍïaÜ‹ý}1 ™NÁOÙ0Bm ‹˜â3N\PIîÓDç ‹ê ÀLëºÎy»V3 èÚK(jþ6K M£[,1$‡“­¬ÿ]Èáiï ÃW¡™ŸØgžÑså9´ þÈ1 À…¾s„ôí_‘𔇘هà×êêdÒbÆ,Ÿ¶ò8g  ¦ýP_‰êe›øòXWhuÑ÷·Î¶ëØÜèa$×[ò±xôÍœ†"©ï©Ob“ŒlmÁ&ž¹ºˆ#pêºÙf^ªwe’Œ™ê§5‹¥ª™ «š>SUY¢Aí˼ׇ,pdÁõµ(“™Ìc¡t}`ײÞǾÿi¯Ï-à E,P ®Ü[ÇRQµmX¯ÓÁ?äât‘Ž^Tà‹ §†³TÅw$£…/þÕë‹›ã~Å‹%Æ dX”-I³O'6ÚÝ) cO4µ]©Úëϸ´ÖÝÓxûZ"¤SIÍSoF½êJWÅãÒ'R¬Šh‚@Áük:gKH¸¿=Ø9kWHî"ß)öÑTƒ­*8Ì̽;cîcR'"Ø´hmoÏGÛçÃÊYônóÒ¿Lqi†“åÝ9Œ?–ìÄC”P¤‰ÀÙDòÆ—K“Z&Q3g0[>i+±KóvÌ%»;&¬]Ó >›ÒÔ€)œº,-s$ÌÀ‰ËX«ûÃL¾üÀΘÙëJã0C®¨<íý’¹|³®˜z“·y0Ñ@ßwÞ3ŠäÏ N¼œÀGñÊÛÐ#Òœ“©'wÖþä•\8ÏÎz/ ŽPŸþŸÚø š¨»ŒÅÇG¾u6©{òú©zà:Ë!ý"eÐÈÏ£Ûk⦸ˢ²ð K~ÿxMeP<§q¤Ù¦¯zµÜ!ï+\K\<þM[*º›’dOi»`˲qeˆ Ù×ðsD¥´3§ÌX(#Cu”S,Rá, RɶŸý6ü˜@>I9DW©êÀÓ%·•›6ø=³ÉãÞ‡L·b™ ÒpÁœÞœ «ÕÐßi£ôWÕ »Ðe´æ h6X%EZào5X´,O±MLÃòPQGÏCtÊçs‘>[cp7q7<áò«š<𫙉<wB1ÑDeMA§¤”VÛ;Õ“]WHJ Xîã9œ# ßvR·’™¯öcà~øE ¬J—…käþ³#¦5ÃgÑŠ¿Nç “„t™Ùè顊Aâ/Q2©Æp“wi`ºŒï¼c¥—`æF¡^{Å÷Væi)ïáÌke%®„ñá&ív÷ø •¶—.Ü'Ûzh–>KKªø4ôhïÆ$h¨ ¬–ÛG•ðg‘È£lj–•Bk§@qzp¹nlĺñš†«Yjާ&#ä‘`LùϸÑBÂ+63«¤ÿI¾†Bÿ’ª­½ãîGÐXôáš·ÈcG5ÑÉE²zCߪB¥Ä¨í5úL %€ yw0‚Ø *†H†÷  ‚É‚Å0‚Á0‚½ *†H†÷   ‚î0‚ê0 *†H†÷  0‘þmÓÏîð‚È=Þø%$;/< <ÙÐ}{q–\• ‹Ü‹‚É~@¾%»µ’¢ÖsQ l„X±`ª0²:æW ¿ö;þýÛíf¤ ¶ÿ'ŘY–0TU  ðqб‡£ÙL§èŒ¶"»»~˜àߟ==ÖÒ†+ðˆ’e·Å”´3aUB/4)cD+¼ç®’²·z u ir€«O* ®µâpã¾K`]s¢à9›ÑJU ¿zV=ÛÎÆJJ˜§b—‰>­ÚDЬÝXœU¶/·­“&Åioé|G»…†^ÚÓ\½Eyp‹õ5D|´´[èk×ã4†4#Ï*)ÞZ8`û¬0K{ýÊHé¹?DŒ2p¸ ×’I2è¿3ÐréÞ7És 0d™·êX‡‚Ì͹yã`ÑІ‘ºŽ— ÅŒ{©àó;u¦¥*!¨cŠv±q&"lœ…¿´K㇓øsº[¨µ,Z²Kb'5WÛìüüè¨6NÚFÉ42³•´__ʲ²T,W H07‚í`’¾ªG6Gõ-ÑÍO…¿-eeøäø Ä|¼7r…‚hc¦Ž] œ!v +Bz$?¸–“°kÎÚ —[Ø;@ ¨3…­"çþSØž¸Ûb§¸ojã?\,S K¼ó×_Œ5t¨ßHÚD£~E'^•I þ,|CšöpÕ]™Ö'•ŸÄ심zÒð¡'’­´v³aN¶°#G~í ‚ ï5ñÆÆãJaH®m{œÁY *‹‰A³äkÀ&+vAÜqO˜Àì¯Ínmeók¯ìõÈ') Í>v Yæ~>Xºu˜…E޽rZÚ‚õÛt¸<&jZŒð™;Ztô;ôôm´UžJtÙ«GGg°]# ›Iiàƒb¦rMÅÇzV·ëÈ$kˆa›¨F4`]¢ì¿“®Ú°æ ùÎý¹z¾ÏcIÞ‡Ö Ú~”œà¸\&Z®¾¯6cqŽßbt/ ª}æÃP›þKÄÝ“·ÐáøRÿ~|ç{·~&K„ÏA0ç ~ɹ $MØkç}=½éÝÖˆ¥|u%z­üöÏôÊc%>£C®Dœ¥ëêÜ„à:í—,Õ05Z&ŸÄD‰‹þç™èÖOŸq/N:qÇ€š¼*‰e,ëç÷µ;¥ë…º[ª0Þ©Š0õRé§È帤«Iö@ B£ó“ (t†1†h0ÝÎÀ&Òº¥ñ´ß~ ðÀ^C)ïÞF`Ì‚XÊ‚…“bÿæÔ,Ђ°‰[H¿0bÑ4þ†Ñ„W¦œLÅ—Wîó¦U—rϯßI¾­Fÿ¤ÒE¯²‚ž²±ùb­MÁð³DðN20@¸Åê[§8 ˜Ÿ/bõ G–¢4›î¸±&ë™0‡tŒô ÇŽ 4Õ “¶>SÃWsà)c Ñ%c[9fưCJq0M€t;[}p@ÆÄ‚|“¥µ èØïßÞ§ÆSá;"¼OÒU•îŸßA)¨!-QËû°_ôç}‡]Ö2\8ÊP*Á—ƒôcØÿÝÆ/N@AЈäòù-ç=«‰¶÷ù3?cÁ ‚yªoºPS±…™îú× ?Ý÷j"eWÀI1»0# *†H†÷  1KRʽ›©ÐÑî~cädlMš†ƒð0“ *†H†÷  1…‚Entrouvert SSL Liberty Alliance SP #4 web server test certificate010!0 +Ì6V>à.¡eÀ‘;—…¶4¨cß#Á,=Hlasso-2.8.2/tests/data/sp4-ssl/PaxHeaders/jks.keystore0000644000000000000000000000013213766621500017666 xustar0030 mtime=1608196928.958896909 30 atime=1678098071.553501315 30 ctime=1678814321.497956088 lasso-2.8.2/tests/data/sp4-ssl/jks.keystore0000644000175000017500000001134413766621500023141 0ustar00bdauvergnebdauvergne00000000000000þíþírootþWÀT8X.5090‚Œ0‚t 0  *†H†÷ 0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #410U Entrouvert0 040813103649Z 290404103649Z0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #410U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚Ò<Õ»†xF ‡ÿ”ï |ï‰þPo_Ó~ç>®¼mÌ{ÅÛ_@TÒzñÆ[4¨<`øûsÃ~j!‰äËó/¡šulI²xÒ6âec R¼ÚXʬøJ“Þo‰+½dÂê ÿkÒפ̓ò¢åxªV …=ùàm±¹‹©é^Y—¹È4ãß=ùÚÁ"2z<ÛôyÒßÛóDÞãÎéÆ^"/U O•É|éE(cð⊚rŸÄ‘œØ‘Aº` Âêú0Fæ`¾²q/ò¿@”¡d© Iª„Hû>;ŒB]Íп8U²Ÿ¨å, élB\²ÿI/î¬6ÇG }GNN5£‚I0‚E0U“Ô<-ÔÂUçåÜ*£z:ºï:…0U#0€“Ô<-ÔÂUçåÜ*£z:ºï:…0Uÿ0ÿ0 U0*U%#0!+ +‚7  `†H†øB0 `†H†øB0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0V `†H†øB IGEntr'ouvert Liberty Alliance test web server Certification Authority #40  *†H†÷ ‚Êêù‚ނלë~xӚĔ´<Êê "1Ñ… ë×ýé†ñ{Â8ãÕW°¡“e›ðÆ™]Ææ„î7#„ÂJ¹qÞiŠ­ä„4ë—ãþâþ,››sr)I¾zeÏ* ôÜc#öê2Bþå>‹Ú“ó²ý.¥óؽ–—"ûl@`£Ñè N‚ŒÂÙ¸¹V9–€±›šC‹Ç QŠDÀƒL ¤'Íí¨È^ëµ,ì2Êœ!øïòåI–Á\Bã@#Æmòo0uîy¢å7z  7˜ö•¸¢‘µì¨ –Æ~þ߉QòßnÀÕ’cÓtÒ~†p©ûæJ†ë&ðžÉŽtomcatþWÂ&ª0‚ý0 +*‚éz*¹=u8öñ§è^;*¡ÁŽAëó iQ¶õ®<½©MZ¤¦w’†ÜU^7’q|2þ§ÿø<½<ÅÞpG‘É»f¨ü¥è2ð‘R¥oZu"€Xlޤ(`¹û˜Cœž—;wÛ€hWjæèJp¸Ü®„'œæIcº²/Ô‡‚Ë¡W—%»JgŽ(·ÀÛ:Q-ÍñH§ÒÅ©­•K +†ÍP!ƒÙ¹ì™”«ÆÊB”?-"?ÁC·ˆ…ç° Ñ®4_aËiñ“±›œa¶g´‹m䊴Ü(Åe6Ç'sȰ˜a1›AÅ)¤Z“^Æ\¹…gª™Û:8£S1Êoqƒ²NíôdöNônd¿yë÷º[CÀùµø^¡âM¯Äð·¼#Ú‹Ì!i¬îe˨á¼ZmåSíÍþ1âÝ‘ˆËÛ6¸¹Ü„´f­m ’žÈxšŽKªŸ»9Æ1£üf³ ŸÑ¦ªÞ%ä* Ãjg׎T<ðÓ]”Z´ÇäŸ0™—,vÞ@Ée»Ì³ºàˆûFƒVÀóFʨ^Bħ)w .Ç-zjlM¨yåûŸž„At[ ‚ØÜ%e鮡${‡‹$¸­ù"t´°Ü½xJ&ú•'CPkžB™hôÛ(Z.„:yo¶CUv¥ó ¿Ifȱb1<&xÓÖŽü‹ø(¬”7§Ÿ2ÅVf÷—>\‘ÜÉ’l$9ù0¼®É‚³Ú.…µ‘cs|Xñ ™û¸ƒŒ¯Öˆ31­J °Z’¢ÉÕOs/Hgµs€=ÀYÆêMüŸAy ÕP¼cäáÊàtå«¿ N¦*ˆí ×ðhc8>ôVbD`88lG ‚1lvO¯þž˜VþžË«ïG}íeøÍ}‚ñ —Ñêë¶wÕÀ­ó{¨U´:EŽ Øh”Gø}K“OÖ~yYÝfœ2Ä›N£<°ýÐ I¯Ö{svH(–ïxV Û«R{ûj›ˆ¶ñ 5y¹®´wWû!¹ÔúË ™Ü‚ *ª9—‘q¯ÓÎÅ‹uM¿vÔ’ÐT £ïÙ}AêÎÝûéd®;Šì?ÒHL@\ºôXÇ<²FÓ´…¶„·-—Æò‹-ÖUðàT¥¿ùÝL­´BŠ-)( 6{Þð·¬K×À§²¥DRaÂÜ„èˆ`T#Á;ô?·¦vèÒbN Ò$î"ú ©dMÞ† bf"ÇŸBê‘ÑÂÀÒð#Äà¾ê5£¡öµÖs`£- WºØ!«³AÐê àÂ*ª¡Nj³U'»ã]‹ ÒÆ Ô"†Õs^%pJ¤èoöüh+ŸyÖ¡ò¤W¸N´%8è%ÖÙ×Y÷Ø¥y}Þ 0áU«ê)5=[óÊ‘»ÜÔç-ÿqCÏf,U¸î;<6ÑœƒÌ6H“v±ìPMљړDicl˜ò=H›{ÁœQ# ¶D€U"‚¦ñòÁN?¢ÄMÆ3HHd-nm—5\Èe^YËG—p@lSW>£[å]¸´~·_ÞÖ“3=*¨ÈO\d`Ï„jAÝ\<ìI²)S¬]Fúõ‹àL˜ñü7údúíäU»(„-Gø·U]\šoCÎvÙ(ÔqăˆêVåË`þYÍ „ßýÿÑýlĬQ¼aôUàX.509T0‚P0‚8 0  *†H†÷ 0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #410U Entrouvert0 040813104427Z 240814104427Z001 0 Usp410U  Entrouvert1 0 UFR0‚"0  *†H†÷ ‚0‚ ‚Àpßä-¡•Ng-þ‘²L{m\d —Ìà¨)HÊŠ`>0­„J}¼…`é“×»ƒá™5 T¸ûZ§¤†Äù ÉÒ‡?ƒL+ÚŽà~¹â9õÂðç;¹Gy§•AåÅ/ë¸fKª\û|ðéêöãšå®RÊTá€}“õ>D«Aùã¾)Ï^w¿ÿ( È\%î5…(žù×ñÛ‹^¨â5k‚è®ãqŠvA·G}v¯m‘£ò¹»¨|°©$ ⤼ÚzvØf8eß0$„}´M/H¨§B)9'Èú{5;¬ÄQïŠÝˆõ¸6¨×|HÉ0(D°hÙ®áMÈ}£‚@0‚<0U$;¾]àd¨Yi€^£„á ´?Õ0U#0€“Ô<-ÔÂUçåÜ*£z:ºï:…0 Uÿ00 U 0*U%#0!+ +‚7  `†H†øB0 `†H†øBÀ0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0P `†H†øB CAEntrouvert SSL Liberty Alliance SP #4 web server test certificate0  *†H†÷ ‚‚•ö²@"0‘¾gòÎÇÑ!†Äp¦ëKÍ<ú d=3D °“°É~ƬºÒïž 'Ý6rpìàñÑ|[Íà¬xÍÒ¿²_Ü/†`¥ì¤¸ï˦ ãíñIéföˆ0ŒÓw@Ÿù·Ë°K:ÍÄÁˆªÂãvâ›8X=°ù`ˆ†-žZ× ¸Ü§­ê1Aç~ôNz4©r}5Ê0\CýD‘|•aN·ú‹iämìZ%¢Ò˜Ã¦8,þËômu‡Ø0¥é^h»ª`Ÿýa²‰ûº½¼kÂ\]¡@&ê4•sÀm{,ì- å¾ÌÊs~äƒ_íI^­ØX.5090‚Œ0‚t 0  *†H†÷ 0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #410U Entrouvert0 040813103649Z 290404103649Z0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #410U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚Ò<Õ»†xF ‡ÿ”ï |ï‰þPo_Ó~ç>®¼mÌ{ÅÛ_@TÒzñÆ[4¨<`øûsÃ~j!‰äËó/¡šulI²xÒ6âec R¼ÚXʬøJ“Þo‰+½dÂê ÿkÒפ̓ò¢åxªV …=ùàm±¹‹©é^Y—¹È4ãß=ùÚÁ"2z<ÛôyÒßÛóDÞãÎéÆ^"/U O•É|éE(cð⊚rŸÄ‘œØ‘Aº` Âêú0Fæ`¾²q/ò¿@”¡d© Iª„Hû>;ŒB]Íп8U²Ÿ¨å, élB\²ÿI/î¬6ÇG }GNN5£‚I0‚E0U“Ô<-ÔÂUçåÜ*£z:ºï:…0U#0€“Ô<-ÔÂUçåÜ*£z:ºï:…0Uÿ0ÿ0 U0*U%#0!+ +‚7  `†H†øB0 `†H†øB0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0V `†H†øB IGEntr'ouvert Liberty Alliance test web server Certification Authority #40  *†H†÷ ‚Êêù‚ނלë~xӚĔ´<Êê "1Ñ… ë×ýé†ñ{Â8ãÕW°¡“e›ðÆ™]Ææ„î7#„ÂJ¹qÞiŠ­ä„4ë—ãþâþ,››sr)I¾zeÏ* ôÜc#öê2Bþå>‹Ú“ó²ý.¥óؽ–—"ûl@`£Ñè N‚ŒÂÙ¸¹V9–€±›šC‹Ç QŠDÀƒL ¤'Íí¨È^ëµ,ì2Êœ!øïòåI–Á\Bã@#Æmòo0uîy¢å7z  7˜ö•¸¢‘µì¨ –Æ~þ߉QòßnÀÕ’cÓtÒ~†p©ûæJ†ë&ðžÉŽ}Vž¦— ­Ò®1?º@ø››lasso-2.8.2/tests/data/sp4-ssl/PaxHeaders/certificate.pem0000644000000000000000000000013213766621500020275 xustar0030 mtime=1608196928.958896909 30 atime=1678098071.553501315 30 ctime=1678814321.497956088 lasso-2.8.2/tests/data/sp4-ssl/certificate.pem0000644000175000017500000000302613766621500023546 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN CERTIFICATE----- MIIEUDCCAzigAwIBAgIBAjANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjE/ MD0GA1UEAww2RW50cm91dmVydCBMaWJlcnR5IEFsbGlhbmNlIHdlYiBzZXJ2ZXIg dGVzdCBSb290IENBICM0MRMwEQYDVQQKDApFbnRyb3V2ZXJ0MB4XDTA0MDgxMzEw NDQyN1oXDTI0MDgxNDEwNDQyN1owMDEMMAoGA1UEAxMDc3A0MRMwEQYDVQQKEwpF bnRyb3V2ZXJ0MQswCQYDVQQGEwJGUjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC AQoCggEBAMBw3+QtoZVOZy3+kbJMe21cZAyXzOCoKUjKimA+MK2NhEp9vIVg6R2T Ete7g+GZNQpUB7j7Wqd/pIbE+SDJ0oc/g0wrE9oHjuB+ueI5APXC8Oc7uUd5p52V QeXFLxvruGZLwqoBXPsPfPAW6eqB9uOa5a5SHspU4Q6AfZP1HD5EqxVB+eO+Kc9e dxC//yigyFwl7jUEhSie+dfx24teqOI1axmC6K4c43GKdn9Bt0d9dq9tkaPyAbm7 qHywqRYkoB3ipLzaenbYZjhl3zAkhH20TS9IqKeBQik5J8j6ezU7rMRRCO+K3Y+I 9bg2kAao13xIyTAoBUSwaNkZruFNyH0CAwEAAaOCAUAwggE8MB0GA1UdDgQWBBQk Owe+XeBkqFkFaYBeo4ThILQ/1TAfBgNVHSMEGDAWgBST1Dwt1MJV5+Ue3Cqjejq6 7zqFHjAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIFoDAqBgNVHSUEIzAhBggrBgEF BQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMBEGCWCGSAGG+EIBAQQEAwIGwDAm BgNVHREEHzAdhhtodHRwOi8vbGFzc28uZW50cm91dmVydC5vcmcwJgYDVR0SBB8w HYYbaHR0cDovL2xhc3NvLmVudHJvdXZlcnQub3JnMFAGCWCGSAGG+EIBDQRDFkFF bnRyb3V2ZXJ0IFNTTCBMaWJlcnR5IEFsbGlhbmNlIFNQICM0IHdlYiBzZXJ2ZXIg dGVzdCBjZXJ0aWZpY2F0ZTANBgkqhkiG9w0BAQUFAAOCAQEAgpX2skAiMJG+Z/LO GMfRIYbEBgBwkKbrBkvNFjz6CWQ9M0QLsJOwyX7GrLrS7w6eoCcA3TZyFR5w7ODx 0XxbzeCseM3SvwWyX9wOL4YAYAKl7KS478scpqDj7fFJ6Wb2iDCMCNOdd0Cf+bfL sEs6zQ4bxMGIBarC43bimzhYPRcbsH/5G2AciAKGLZ5a1w243KetHOoxGUEb5370 Tno0D6lyfTXKBzBcQ/1EkXyVYU63+otp5G3sWiWi0pjDpjgs/sv0bXWH2DCl6V5o u6pgn/1hson7ur28aw7CBVxdHaFAJuo0lXPAbXssCOwtDRnlvszKc34R5IOBXx7t SV6t2A== -----END CERTIFICATE----- lasso-2.8.2/tests/data/sp4-ssl/PaxHeaders/private-key-raw.pem0000644000000000000000000000013213766621500021042 xustar0030 mtime=1608196928.958896909 30 atime=1678098071.553501315 30 ctime=1678814321.501956111 lasso-2.8.2/tests/data/sp4-ssl/private-key-raw.pem0000644000175000017500000000331513766621500024314 0ustar00bdauvergnebdauvergne000000000000000: sp-jks.keystore 1: tomcat 2: changeit -----BEGIN PRIVATE KEY----- MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDAcN/kLaGVTmct/pGyTHttXGQM l8zgqClIyopgPjCtjYRKfbyFYOkdkxLXu4PhmTUKVAe4+1qnf6SGxPkgydKHP4NMKxPaB47gfrni OQD1wvDnO7lHeaedlUHlxS8b67hmS8KqAVz7D3zwFunqgfbjmuWuUh7KVOEOgH2T9Rw+RKsVQfnj vinPXncQv/8ooMhcJe41BIUonvnX8duLXqjiNWsZguiuHONxinZ/QbdHfXavbZGj8gG5u6h8sKkW JKAd4qS82np22GY4Zd8wJIR9tE0vSKingUIpOSfI+ns1O6zEUQjvit2PiPW4NpAGqNd8SMkwKAVE sGjZGa7hTch9AgMBAAECggEAOYkFx2jFKKiaPKwhz1cCh/3Zg9JW1MwyG6tCl+fAEgN/i+3v0Uja KZdxSMKteWOe8gmRjYLI5c9J12lIur7cjMc2cC1o8ATWeNQqqzIz0UaJU/kNOgtrS7f2TcYYgZaG OT9pYf6qV/2XcwjGwvA8amxDQ00WG5Qo/Xb5FKVx3kOQxYYY1XSUMQCRurz6Ipdo+/0RaZZyfSLN 7S0v116Cc/gxz+eo812nEeOYvWW72m7b46TT33jxAdYGijMTQF+dAEBz+6AayyiBAJLAbo31fMsq n0SCO1rZDL2JhXQX7qtZS4pC2P/+9zeeMOEGicQ776AB3tn/arz3eNt5GwEjmQKBgQDkG7yUshj0 XNTwGX1qmawAojp7lMay50aEmDtEKHJ9hTObosAjKiiMKMWUhLW/DiApwuKJdkEq/VfLoCim/7bZ dYeke/G43ASUKkDnlzLebquVoTXUQt1Gthwebdd40GhuK4oR8HLt2UonsbHi7DRYuxftjwSv7jUT nUIXwfS0NwKBgQDX+Kxt9Bb1kF5FkgWAhaIv9+000aE/JXKMZpSv1lYNYqs+OsWv3bRk4MmNRuTL +6lB6qBO9kHoprbmgCpJEKs3hE12XLX6tZ7MvJgwd2MophycI3JRHZPoHlatSRXtD7pKWAghDM0M BX3JcjZK3l7+YKpsYYMZEka6x2ss8r126wKBgF8wA925BBjUtDcNK/zT66bIC8eOKex1/kNOk0y5 5Czk7MhBfhQuf4UdbnWve3gimOFUZdwe8MrTtVNPnicyBkdweA33esM9bNu3ViZOPff8DrX988yD qnrbe5hnFcdgkHOIz7D0ucDvL7aovCaJkr6ENFP5nmcb7CInOXFYipi5AoGAE4kCz89MZFnyrQhQ RxfPW9dpNWXg1/1jJyAAQwd4MS3Dn5VhXE8JijZrBMRs3aad4MCAT6QmwgySbrcZHBLN6e+lshcg vtS+0HYergOejIa5/8WVCZFLV6um23XI7fCGQUNFOPgXdAbrIdWa45rJrOjBgZwwZ4wnqa1wHFi4 mpECgYEAxQKcLe4OSmtcvHNfOq+0xiQoub0xPmclnh7b6zFROyQ3ZfsVL/+KqpkoR7W8ahmIMizI PbGf8iunffh9FhstLfZrLHP7lUugs41tQsX6L2CCcqeRYHE2lPkLTJ4zEvpE7tln/0a2TKjTiV58 Xvby+2P6B4u/0ZqjPwoI7eMVkVI= -----END PRIVATE KEY----- lasso-2.8.2/tests/data/PaxHeaders/lecp4-la0000644000000000000000000000013113766621500015326 xustar0029 mtime=1608196928.94689681 30 atime=1678814326.421984131 30 ctime=1678814321.425955678 lasso-2.8.2/tests/data/lecp4-la/0000755000175000017500000000000013766621500020654 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tests/data/lecp4-la/PaxHeaders/metadata.xml0000644000000000000000000000013013766621500017704 xustar0029 mtime=1608196928.94689681 29 atime=1678098071.48150075 30 ctime=1678814321.425955678 lasso-2.8.2/tests/data/lecp4-la/metadata.xml0000644000175000017500000000310113766621500023151 0ustar00bdauvergnebdauvergne00000000000000 https://lecp4:2020/singleSignOn http://projectliberty.org/profiles/sso-get https://lecp4:2020/singleLogout http://projectliberty.org/profiles/slo-idp-soap https://lecp4:2020/registerNameIdentifier http://projectliberty.org/profiles/rni-sp-http https://lecp4:2020/soapEndpoint https://lecp4:2020/assertionConsumer https://lecp4:2020/singleLogout http://projectliberty.org/profiles/slo-idp-soap https://lecp4:2020/registerNameIdentifier http://projectliberty.org/profiles/rni-sp-soap https://lecp4:2020/soapEndpoint true lasso-2.8.2/tests/data/lecp4-la/PaxHeaders/public-key.pem0000644000000000000000000000013013766621500020151 xustar0029 mtime=1608196928.94689681 29 atime=1678098071.48150075 30 ctime=1678814321.425955678 lasso-2.8.2/tests/data/lecp4-la/public-key.pem0000644000175000017500000000070313766621500023423 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsf+It6kS7XSYMyuFE/pA JB8DyPaVu4EN0Q7W0qcifFhF7fket/TDOmNfXbMDBxPLcG4kxE+bME7+xwcCK3JE j1Yd7IEbnv0IlPj+oKI70pmLMktTr/i4Bso5N1ZGAWwX9XRwCX3uDZhGckUprr6q YiFwhLRdCkd99aFvfiSeAnrZDlqX+QYhtVoKjbae53cmr6eRoKY4sdZcxu1EJiQL 7IrbA4bLNtQnqMDmP05+7YO42V2J+mSQEK15DpLguyutOqCAesKaVIDe2lqtG+fA sjYl0AlW4Gha2qehAT6PVsab2fwGdkI+cAVha8SsQY5XqYDq92ust8NJ4y9kG8pF 6QIDAQAB -----END PUBLIC KEY----- lasso-2.8.2/tests/data/lecp4-la/PaxHeaders/jks.keystore0000644000000000000000000000013013766621500017760 xustar0029 mtime=1608196928.94689681 29 atime=1678098071.48150075 30 ctime=1678814321.425955678 lasso-2.8.2/tests/data/lecp4-la/jks.keystore0000644000175000017500000001130413766621500023231 0ustar00bdauvergnebdauvergne00000000000000þíþílassoþWÁè®0‚ü0 +*‚è], ™~Œò:ª8Vÿ½Îû4ŠüŽüÛ·ÝqòYÍ31¸2¾HLdp»¼fö’{d‹bµö˜Ôïa«.•À“”nÅö™{b;\ãÓ£)$ ´ƒ£ÖÇÔx@tã´y~DˆR’€ê#øo"Ž"úQÚæÿ‡î-DÃgÜÆ„_zøÅ£OD¨!¢‰T¨v׺]ùÀ^¬çt›V ÄŒïrØ—“j7Mbaæ~ë~ W7wÕ=ÚJh5 Î`†œ‘ÆuVî'¡W×ì•ühÒÐÏ?%ñ\' nŒbÐOq]^’Ý¿-*P4]úÚÒ ÑœØ=NÖwÙÃf\5Uäæs?ß*…=©ë mP®øÓGS`ÆoTDŸ—h¼I¼Ó»aû #Íïﵺ×ô @UoÕY€h+xÖîœõ2pVpátÊÄüYz‡b"·ƒ<¼×Þ“Cñ#Ö“Âq†d&WÕ7þd`¨¢–®×'QÒ%žû¤üø]ªhühlŸèÑ#¤³ò&Sç M/U¾3$Â*ºx‰2yë·é3•_!ÉÜÈê1„ž)C.ÿ¸ÀËøhbG‹ûtÙl’.†ÎæàCªÁ#áäšz xlºcs}¡ ùÂl­qÞÍÃ@}’5-B½ç¶ØN\½õ™=ëyïGÎÿu~V!e‡·.~ïæ' ®P•õx+€;Ë$EÔì÷¹{¨'e“š‹>z½÷l š]j·g’+v浜Œbå„N“« ÈšžeFñ8‚ªrÜü?ˉ) ÈmEËødc@Î3Ed2+Y›Vás;qåµûTŠá¸iŒÝ }Q!w7–­jSfÜ£,–=Ì#Æ¥7ˆž³«Úñ¬-¥^Ég¾éþw²šÉêikÕ&D&çª-Ñzø‡å§yÈí ?¨ÌøûñJ¬ÒÄ]̹ª™kë—¸ïµàLºm†jF7ùÎ#jŸ]8†Ê¥%”R¯¾IÚ÷q „O¡,=é§Ãz&¢~†(ì™ù VD3Õ¨¸µ8M²‡°ùÅ€¥˜ UŽW yT­ç¤sWçÝœâ_õ<ŠÕH÷ g;9\fOp˜"r¾ÞÆäv“Î>¢vYá Ð!˜Ë aõêê¸ÄÄñáÉÂt·q~Òã88IÝq-®Ôz²äŒùv¼xsè@Ÿ;¯~.ñÁÈfbô†,,¨y"¨ˆD¼_¯Ö:¬ÏÙ¿ñEé@È©“:­zÊq7ó¥’‹%¦+èÈQ|ÿÛˆE$dÌŽÒ¶dHæù÷z»ø[¿ÜP™¾ä:ÛôK7ÌÐNVÆ›ÙüvB>pakĬAŽW©€ê÷k¬·ÃIã/dÊE飂&0‚"0Uø$ºSŠûd›ƒµÓàÑ›à E”|0U#0€S‚…4K8Á%\чثõ>è0 Uÿ00 U€0U%0++0 `†H†øB€0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0C `†H†øB 64Entrouvert Liberty Alliance LECP #4 test certificate0  *†H†÷ ‚>kV§3³?ذIm rîÎ öj*ÓªáZÙhy`GOg S&]c—þ!–n¸Æ…ž¸¹à2)Bõ§¼³£Iÿ Ž˜—%ÛpM$æz!·ŒÙÕìl*Hx:&˜_¨ È‚!™aheöKóž°.¼¢1áZ’E<‰nõT¥q;jýôéÓ€dyÂVÈw8Ä?jɽa6IUÎéR<7¬·ù ×Ê~î –úãëCnÂ=ª\MÅÙ^¸ èg').[½'%UŒòbZÈG”—·”Fê•ë9…Reç‰éÝ:Ž§ÆøÏ${üZë‡ÖÑofv¬Gsgîˆi3~ijX.509t0‚p0‚X 0  *†H†÷ 0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #410U Entrouvert0 040813103642Z 290404103642Z0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #410U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚Ô]Kʲ¨äxT·÷GkÐ{ì ÛJ——ÉäêˆÄrPyD»©kaº _$žyÅ‚žÒñÊ”’7³z¸ŒÍXL™ ØÝ' 0iut´esQ]íÜÀ°o {G"™àÂo¸õ$—5²ZàÛ[tÙ‘TmŸ)d»w<b¼M†å–‹¼ËÌ>úE^º}uã}}ÃÆ˜Jmd3A;m°ð¹”w¸XœV bM,>ø†[Œà$àµÍ{ä ºžjbêÚñ&(“ Z±ày£‚C0‚?0US‚…4K8Á%\чثõ>è0U#0€S‚…4K8Á%\чثõ>è0Uÿ0ÿ0 U0*U%#0!+ +‚7  `†H†øB0 `†H†øB0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0P `†H†øB CAEntr'ouvert Liberty Alliance test Root Certification Authority #40  *†H†÷ ‚:ðåRG96"Fª_k(Õ áŠuE¨°¯¨â¶ÃN ë²RzÌʉ ïv°{‘[òQé—‚ÛH¬¸Æ‹0¥^EŽ5›´ÆžPLCÍ+Ò35n³7Reð~œxH**Ê–À»HÞ«3y¿–:ƒª¹}˜1™„Þx77’MèÛp¾u9 Í‚Œ†DrVµ_9â¨cEиM «iïÔÜÜ–H:£§zåõ ±ÖB¯,G±À>ô—Xë¼âLö¨ƒ8… ²"œHñÙI@øJhè•Ýx7jŠIϼL•,êm]#u;|4]n£±A)”;:.Ûàϧ“—‚ú¬TâAentr'ouvert liberty alliance test root certification authority #4þWÀ X.509t0‚p0‚X 0  *†H†÷ 0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #410U Entrouvert0 040813103642Z 290404103642Z0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #410U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚Ô]Kʲ¨äxT·÷GkÐ{ì ÛJ——ÉäêˆÄrPyD»©kaº _$žyÅ‚žÒñÊ”’7³z¸ŒÍXL™ ØÝ' 0iut´esQ]íÜÀ°o {G"™àÂo¸õ$—5²ZàÛ[tÙ‘TmŸ)d»w<b¼M†å–‹¼ËÌ>úE^º}uã}}ÃÆ˜Jmd3A;m°ð¹”w¸XœV bM,>ø†[Œà$àµÍ{ä ºžjbêÚñ&(“ Z±ày£‚C0‚?0US‚…4K8Á%\чثõ>è0U#0€S‚…4K8Á%\чثõ>è0Uÿ0ÿ0 U0*U%#0!+ +‚7  `†H†øB0 `†H†øB0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0P `†H†øB CAEntr'ouvert Liberty Alliance test Root Certification Authority #40  *†H†÷ ‚:ðåRG96"Fª_k(Õ áŠuE¨°¯¨â¶ÃN ë²RzÌʉ ïv°{‘[òQé—‚ÛH¬¸Æ‹0¥^EŽ5›´ÆžPLCÍ+Ò35n³7Reð~œxH**Ê–À»HÞ«3y¿–:ƒª¹}˜1™„Þx77’MèÛp¾u9 Í‚Œ†DrVµ_9â¨cEиM «iïÔÜÜ–H:£§zåõ ±ÖB¯,G±À>ô—Xë¼âLö¨ƒ8… ²"œHñÙI@øJhè•Ýx7jŠIϼL•,êm]#u;|4]n£±A)”;:.Ûàϧ“—‚ú¬T⺊à!ÿìn«í.OÊ1~Ô¥ûöÏlasso-2.8.2/tests/data/lecp4-la/PaxHeaders/certificate.pem0000644000000000000000000000013113766621500020370 xustar0029 mtime=1608196928.94689681 30 atime=1678098071.477500719 30 ctime=1678814321.425955678 lasso-2.8.2/tests/data/lecp4-la/certificate.pem0000644000175000017500000000274513766621500023651 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN CERTIFICATE----- MIIELTCCAxWgAwIBAgIBAzANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJGUjE0 MDIGA1UEAwwrRW50cm91dmVydCBMaWJlcnR5IEFsbGlhbmNlIHRlc3QgUm9vdCBD QSAjNDETMBEGA1UECgwKRW50cm91dmVydDAeFw0wNDA4MTMxMDQ0MjVaFw0yNDA4 MTQxMDQ0MjVaMDIxDjAMBgNVBAMTBWxlY3A0MRMwEQYDVQQKEwpFbnRyb3V2ZXJ0 MQswCQYDVQQGEwJGUjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALH/ iLepEu10mDMrhRP6QCQfA8j2lbuBDdEO1tKnInxYRe35Hrf0wzpjX12zAwcTy3Bu JMRPmzBO/scHAityRI9WHeyBG579CJT4/qCiO9KZizJLU6/4uAbKOTdWRgFsF/V0 cAl97g2YRnJFKa6+qmIhcIS0XQpHffWhb34kngJ62Q5al/kGIbVaCo22nud3Jq+n kaCmOLHWXMbtRCYkC+yK2wOGyzbUJ6jA5j9Ofu2DuNldifpkkBCteQ6S4LsrrTqg gHrCmlSA3tparRvnwLI2JdAJVuBoWtqnoQE+j1bGm9n8BnZCPnAFYWvErEGOV6mA 6vdrrLfDSeMvZBvKRekCAwEAAaOCASYwggEiMB0GA1UdDgQWBBT4JLpTivtkm4O1 0+DRm+AgC0WUfDAfBgNVHSMEGDAWgBRTgoU0SwA4wSUVnVzRh9irf/U+6DAMBgNV HRMBAf8EAjAAMAsGA1UdDwQEAwIHgDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYB BQUHAwgwEQYJYIZIAYb4QgEBBAQDAgeAMCYGA1UdEQQfMB2GG2h0dHA6Ly9sYXNz by5lbnRyb3V2ZXJ0Lm9yZzAmBgNVHRIEHzAdhhtodHRwOi8vbGFzc28uZW50cm91 dmVydC5vcmcwQwYJYIZIAYb4QgENBDYWNEVudHJvdXZlcnQgTGliZXJ0eSBBbGxp YW5jZSBMRUNQICM0IHRlc3QgY2VydGlmaWNhdGUwDQYJKoZIhvcNAQEFBQADggEB AD5rVgOnM7M/xZiwSQ9toHLuzgv2aioZ06rhWtloeWBHAE9nHwtTJhJdY5f+IZYC jW64xoWeuLngMilC9acWvLMbo0l//wyOmBiXJdtwTSTmeiG3jNnV7GwqSHg6Jphf gaigyIIhmWFoZfZLGvOesC68ojEE4VqSRTyJbvVUpXE7av306dOAZAZ5w4JWyHc4 xD9qyb1hNhcHSVXO6VI8N6y3+SDXyn9+7gp/lvrj60Nuwj2qXE0ZxRPZBl6BuA3o ZycpGS4eW70nJVWM8mJayB9HlJe3lEbqles5hVIfZeeJ6d06jhinxvjPJHv8WuuH 1tFvZnasR3Nn7ohpM4F+aWo= -----END CERTIFICATE----- lasso-2.8.2/tests/data/lecp4-la/PaxHeaders/private-key-raw.pem0000644000000000000000000000013013766621500021134 xustar0029 mtime=1608196928.94689681 29 atime=1678098071.48150075 30 ctime=1678814321.425955678 lasso-2.8.2/tests/data/lecp4-la/private-key-raw.pem0000644000175000017500000000331613766621500024411 0ustar00bdauvergnebdauvergne000000000000000: lecp-jks.keystore 1: lasso 2: changeit -----BEGIN PRIVATE KEY----- MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCx/4i3qRLtdJgzK4UT+kAkHwPI 9pW7gQ3RDtbSpyJ8WEXt+R639MM6Y19dswMHE8twbiTET5swTv7HBwIrckSPVh3sgRue/QiU+P6g ojvSmYsyS1Ov+LgGyjk3VkYBbBf1dHAJfe4NmEZyRSmuvqpiIXCEtF0KR331oW9+JJ4CetkOWpf5 BiG1WgqNtp7ndyavp5Ggpjix1lzG7UQmJAvsitsDhss21CeowOY/Tn7tg7jZXYn6ZJAQrXkOkuC7 K606oIB6wppUgN7aWq0b58CyNiXQCVbgaFrap6EBPo9WxpvZ/AZ2Qj5wBWFrxKxBjlepgOr3a6y3 w0njL2QbykXpAgMBAAECggEAFKsxevIdComxaq+xAkLa09buH5XSiTVRH2dztn5F2N5/METvNjkr uknztvOkdFvuEZ4YktsTkCZ8GyxLKjRYlbRQQTg0tt928aWAG7L681d0/GAW1aYx6EfvIOfZtSyS E6RzpgaDb/ywoXA6iNoG+uIbKK2w6BKpI66dPa6O0oazvm1abzD1+CLLILPRyrt4sgOz/BRVZ1yl wPJU1Zy0Y/f/Bak/qeoQRMTIiIjcZoCpWnn97uiGOoYRmmCDJ8w63FLQy/HOSotzOStihJaydFd0 kh3crD3KdBDPJ7l5oIaKJ7rK6iNyXHPhN9VFQGNCuIUrCst9/EC4LQu2j105AQKBgQDVtmiMoGBy ik56Zwy6qXS89QmIYVf7lD+EfsHB+DvRyX4bl08SSF29dujyeZn6uOJVxtIPRB/DP8nXFMOQMJpO kPv1frPd1SEIYqvSqtbAJnh4eOOLVA093u2NubKEt3bSC1we9Tv+wdrYHhZzgk6AGNRzO2P0TL71 849fncOxuQKBgQDVOASVp8nouQwgSBHjwLEXQtiAm/B3yzym+rpZ4WznKHyImeRAMTagmJyihWfr ot3PJyeODu2iZPZVD1Xj37KVeidukSEpv5FuTCHplJ3Z5Gs6gg7CQpn/HakloQISfnk1twt2k7dQ CGFhaob2BFQfj969koAgCaOh2qMxZiYNsQKBgC+IEli0kr7m4+11Xe9mIQClvykF/XuGzVm6l318 qFFQbyvTy1JVpgOtnsHPKeAJns1VGwMqM6ZJWarsg1JefPNca61+MKL19BLZXz3LoVe7NrAUswcZ +pf4LP2If5vk8hhlTmfUQzO2CeZnSrcGFE+JNjcqzmBXcWFielDZ1dyBAoGAS4IoFXuzRGhsA+6h 7z8pN+yjUYBn+3SNCTFX10a+02oCGDovnBARoXQKXH/UGp214YujNWrR+yW4Gs1whF+PFeKJnl1l GizOavopNFg+QpDi7Hhsk50UfkVZxoqrejMx57ToKVkMnRoqql4YZ32G8Rp5Ljd4il//g+0yx+a9 6TECgYBZwsKrgMTqGv1rWfppze5YA5KvIVcPK+KhU8u6/vrXRPlKz2AcHKlUqqMf4tNYFin4FViw fDrX6mIvro0Xi9L7HekD9GYd9sQdp1OsY9AeiNJudHSh35B/R+mL7Z8g/VgtQ0+zlL41GzkiiFt6 RNfQUGy0G/+5YJyJO31Fic71ZA== -----END PRIVATE KEY----- lasso-2.8.2/tests/data/PaxHeaders/sp7-saml20000644000000000000000000000013114050545511015444 xustar0029 mtime=1621281609.27130786 30 atime=1678814326.421984131 30 ctime=1678814321.509956157 lasso-2.8.2/tests/data/sp7-saml2/0000755000175000017500000000000014050545511020772 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tests/data/sp7-saml2/PaxHeaders/metadata.xml0000644000000000000000000000013114050545511020023 xustar0029 mtime=1621281609.27130786 30 atime=1678098071.565501409 30 ctime=1678814321.509956157 lasso-2.8.2/tests/data/sp7-saml2/metadata.xml0000644000175000017500000000567214050545511023306 0ustar00bdauvergnebdauvergne00000000000000 MIIDnjCCAoagAwIBAgIBATANBgkqhkiG9w0BAQUFADBUMQswCQYDVQQGEwJGUjEPMA0GA1UECBMGRnJhbmNlMQ4wDAYDVQQHEwVQYXJpczETMBEGA1UEChMKRW50cm91dmVydDEPMA0GA1UEAxMGRGFtaWVuMB4XDTA2MTAyNzA5MDc1NFoXDTExMTAyNjA5MDc1NFowVDELMAkGA1UEBhMCRlIxDzANBgNVBAgTBkZyYW5jZTEOMAwGA1UEBxMFUGFyaXMxEzARBgNVBAoTCkVudHJvdXZlcnQxDzANBgNVBAMTBkRhbWllbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM06Hx6VgHYR9wUf/tZVVTRkVWNqh9x+PvHA2qH4OYMuqGs4Af6lU2YsZvnrmRdcFWv0+UkdAgXhReCWAZgtB1pd/W9m6qDRldCCyysow6xPPKRz/pOTwRXm/fM0QGPeXzwzj34BXOIOuFu+n764vKn18d+uuVAEzk1576pxTp4pQPzJfdNLrLeQ8vyCshoFU+MYJtp1UA+h2JoO0Y8oGvywbUxHioHN5PvnzObfAM4XaDQohmfxM9Uc7Wp4xKAc1nUq5hwBrHpjFMRSz6UCfMoJSGIi+3xJMkNCjL0XEw5NKVc5jRKkzSkN5j8KTM/k1jPPsDHPRYzbWWhnNtd6JlkCAwEAAaN7MHkwCQYDVR0TBAIwADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFP2WWMDShux3iF74+SoO1xf6qhqaMB8GA1UdIwQYMBaAFGjl6TRXbQDHzSlZu+e8VeBaZMB5MA0GCSqGSIb3DQEBBQUAA4IBAQAZ/imK7UMognXbs5RfSB8cMW6iNAI+JZqe9XWjvtmLfIIPbHM96o953SiFvrvQBZjGmmPMK3UH29cjzDx1R/RQaYTyMrHyTePLh3BMd5mpJ/9eeJCSxPzE2ECqWRUapkjukecFXqmRItwgTxSIUE9QkpzvuQRb268PwmgroE0mwtiREADnvTFkLkdiEMewfiYxZfJJLPBqwlkw/7f1SyzXoPXnz5QbNwDmrHelga6rKSprYKb3pueqaIe8j/APNC1/bzp8cGOcJ88BD5+Ny6qgPVCrMLE5twQumJ12V3SvjGNtzFBvg2c/9S5OmVqRLlTxKnCrWAXftSm1rNtewTsF Lasso Test SP7 lasso-2.8.2/tests/data/sp7-saml2/PaxHeaders/private-key.pem0000644000000000000000000000013114050545511020464 xustar0029 mtime=1621281609.27130786 30 atime=1678098071.565501409 30 ctime=1678814321.509956157 lasso-2.8.2/tests/data/sp7-saml2/private-key.pem0000644000175000017500000000321314050545511023734 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN RSA PRIVATE KEY----- MIIEowIBAAKCAQEAzTofHpWAdhH3BR/+1lVVNGRVY2qH3H4+8cDaofg5gy6oazgB /qVTZixm+euZF1wVa/T5SR0CBeFF4JYBmC0HWl39b2bqoNGV0ILLKyjDrE88pHP+ k5PBFeb98zRAY95fPDOPfgFc4g64W76fvri8qfXx3665UATOTXnvqnFOnilA/Ml9 00ust5Dy/IKyGgVT4xgm2nVQD6HYmg7Rjyga/LBtTEeKgc3k++fM5t8AzhdoNCiG Z/Ez1RztanjEoBzWdSrmHAGsemMUxFLPpQJ8yglIYiL7fEkyQ0KMvRcTDk0pVzmN EqTNKQ3mPwpMz+TWM8+wMc9FjNtZaGc213omWQIDAQABAoIBAEPj5keHzWdBqiXX 38WnlPgv+M9afndCjDANTEYoh14OIUjWzlIe/ufd6HLkrVA89hkwgQbewbyQOT2C YiSlQLl0PlKMCTIKIzVHD07HvXNTAwykEqNfTZChSYEa1/Ixre+MXvugF8nwdKxk 8xN0qXTQF6OXeVYvQNAAdng743YON4ubqKlEezIwnfG/jcoZrGkiTpx+k1JXJsZN 4dHKFP12RRhUTGjaOkBo41w8GNKQLFpy1vqAOYMyi1SJcrwpAu3H0iQug9SylQaM bFjt8j/m13gu3zXIJbi8xbyg3nqpxl9dxcZG/cDA9z2tLu/h3G3nPq7CXvkZxmjl ePvOCwECgYEA9zbwYMtd8tT3PHtrCtjwkfxV0dvMmfNw/rRT4ShWtKLmgX+K9nz/ T4qpbehz4z7OvsLjQ6Bt6wjMNMw9SEBeEMyDVTpmzSD2PowARegmeLX4CsilqHHl /AMYUtywEQ2f65/CWPiMIt8mLnEyJ/dsyVLpuzGUNNt34Yaqpu2qXnUCgYEA1IUy PObmTh3I8ZyESyGhbu2TYs0A8Zy6eTIAv0ijOIpmUykzjE5pR9sB3nYEd4GTHPEv hF6SWfNIDDr83TqThJYzkFyXMCxiVLH55U42wlsvwp4jTnOI3K/7Y7U/lEmBlgcl JbIIv1t9okg3+Kuu4i7iB6JR89cSO/Wfcdu/c9UCgYAHE5eF7cxeqyH4pT/HK7aX NzXtr/EHZySQ5fCQvWrd+NvIUTJVI/ba/AklkEXg92dLpqCCyxDabYIK8N3AN7d5 m6EWy3kt3geueqt3VNHlGrBi/qNfUwNWV3BWzuJrWox9XjFeAp9gUCrzoWHiKv7+ NFVkemLXsICaABTaemsqEQKBgQDJJ4n1u1gieG7Kwqs1sg9rP9RRoFlUWFTogjvS 0p4r1lQkQstX8qAUM2gBeROhSjRFIMUpNZqxKWT4rpzJibg3tzP3YKx6HIi2Qf+W 3AFY1ZbPT397sj/JI4l/Rv93DFxr9TdkBq/g8GhqQpE3/sj5rgaj0zBe7SOFPWg+ DRGaQQKBgEEcSF5KmpIHnhi3WlfGiEtx3kcD63orKME0YYA5BM6wnmRT4QiSw+qj i7ljrKGSbmdMFC3ArM42/k2lXYpVLsYWmyaRYSgbdowxLM1XxDJMFIPR2uG6N+vi HzWkRxi2SXKU42vfs5eA0itHvQP2DfUx8VuvtwVbOxDGgntYia70 -----END RSA PRIVATE KEY----- lasso-2.8.2/tests/data/sp7-saml2/PaxHeaders/password0000644000000000000000000000013213766621500017315 xustar0030 mtime=1608196928.958896909 30 atime=1678098071.565501409 30 ctime=1678814321.509956157 lasso-2.8.2/tests/data/sp7-saml2/password0000644000175000017500000000001013766621500022554 0ustar00bdauvergnebdauvergne00000000000000geronimolasso-2.8.2/tests/data/PaxHeaders/idp10-512-saml20000644000000000000000000000013114050545511016155 xustar0029 mtime=1621281609.25530804 30 atime=1678814326.421984131 30 ctime=1678814321.305954995 lasso-2.8.2/tests/data/idp10-512-saml2/0000755000175000017500000000000014050545511021503 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tests/data/idp10-512-saml2/PaxHeaders/metadata.xml0000644000000000000000000000013214050545511020535 xustar0030 mtime=1621281609.259307995 30 atime=1678098071.369499871 30 ctime=1678814321.305954995 lasso-2.8.2/tests/data/idp10-512-saml2/metadata.xml0000644000175000017500000000615014050545511024007 0ustar00bdauvergnebdauvergne00000000000000 MIIBmTCCAUOgAwIBAgIJAJZMU0OBRTvOMA0GCSqGSIb3DQEBBQUAMBUxEzARBgNVBAoTCkVudHJvdXZlcnQwHhcNMTEwMTIwMTA1MzAwWhcNMTEwMjE5MTA1MzAwWjAVMRMwEQYDVQQKEwpFbnRyb3V2ZXJ0MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMdiEXDlw9BRQPiLRmt8pb0nq08iyOcrkPqXZv55qcisDbq6rKVvNIadKdNR5A1G7C1i7e6mXkoLsC8q2+Fb8VECAwEAAaN2MHQwHQYDVR0OBBYEFC7+TXCAbY1opCnQQzUVTcITJ9fOMEUGA1UdIwQ+MDyAFC7+TXCAbY1opCnQQzUVTcITJ9fOoRmkFzAVMRMwEQYDVQQKEwpFbnRyb3V2ZXJ0ggkAlkxTQ4FFO84wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAANBAFkpYCnHeE10PZsQaUrgwAV4Os77wqPmD+H5YGfZX2gOSBemrs1CJ7VQskTLf1sb6szfy7pZe7iBl6brQOEmhwY= MIIBmTCCAUOgAwIBAgIJAJZMU0OBRTvOMA0GCSqGSIb3DQEBBQUAMBUxEzARBgNVBAoTCkVudHJvdXZlcnQwHhcNMTEwMTIwMTA1MzAwWhcNMTEwMjE5MTA1MzAwWjAVMRMwEQYDVQQKEwpFbnRyb3V2ZXJ0MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMdiEXDlw9BRQPiLRmt8pb0nq08iyOcrkPqXZv55qcisDbq6rKVvNIadKdNR5A1G7C1i7e6mXkoLsC8q2+Fb8VECAwEAAaN2MHQwHQYDVR0OBBYEFC7+TXCAbY1opCnQQzUVTcITJ9fOMEUGA1UdIwQ+MDyAFC7+TXCAbY1opCnQQzUVTcITJ9fOoRmkFzAVMRMwEQYDVQQKEwpFbnRyb3V2ZXJ0ggkAlkxTQ4FFO84wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAANBAFkpYCnHeE10PZsQaUrgwAV4Os77wqPmD+H5YGfZX2gOSBemrs1CJ7VQskTLf1sb6szfy7pZe7iBl6brQOEmhwY= Entr'ouvert lasso-2.8.2/tests/data/idp10-512-saml2/PaxHeaders/private-key.pem0000644000000000000000000000013213766621500021204 xustar0030 mtime=1608196928.938896744 30 atime=1678098071.369499871 30 ctime=1678814321.305954995 lasso-2.8.2/tests/data/idp10-512-saml2/private-key.pem0000644000175000017500000000076113766621500024460 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN RSA PRIVATE KEY----- MIIBOwIBAAJBAMdiEXDlw9BRQPiLRmt8pb0nq08iyOcrkPqXZv55qcisDbq6rKVv NIadKdNR5A1G7C1i7e6mXkoLsC8q2+Fb8VECAwEAAQJAVjpUXqYPvG0XkyXwq5W5 vAeG7++UQV23Epkd4tpNEkqKarO/llKozReUs3u4tSmmVZSec+3w+6SWQ6Pc58eF fQIhAPbYuXVZtJ/w3w3u3e2LrgoJf9HHkvk/fqKuXfWgBmm3AiEAzsbHuS2q2q1Z cBJw8cY/cSCHD/jmR5Km+d1zoRAKnTcCIQCyHmykqxhVGQA7E5P8ZwAsqfIbs8Dw Lcr5JI0UQmaePQIgNXg7n0wK2V9oOE3cfPjJ4QQLSPsQ+UMYAJbeVrDiPcMCIQDv jQ68NuOV+20MsnLYcrI+Jz80Wt+rjH/Pc018GZI2HQ== -----END RSA PRIVATE KEY----- lasso-2.8.2/tests/data/idp10-512-saml2/PaxHeaders/certificate.pem0000644000000000000000000000013213766621500021226 xustar0030 mtime=1608196928.938896744 30 atime=1678098071.369499871 30 ctime=1678814321.305954995 lasso-2.8.2/tests/data/idp10-512-saml2/certificate.pem0000644000175000017500000000114713766621500024501 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN CERTIFICATE----- MIIBmTCCAUOgAwIBAgIJAJZMU0OBRTvOMA0GCSqGSIb3DQEBBQUAMBUxEzARBgNV BAoTCkVudHJvdXZlcnQwHhcNMTEwMTIwMTA1MzAwWhcNMTEwMjE5MTA1MzAwWjAV MRMwEQYDVQQKEwpFbnRyb3V2ZXJ0MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMdi EXDlw9BRQPiLRmt8pb0nq08iyOcrkPqXZv55qcisDbq6rKVvNIadKdNR5A1G7C1i 7e6mXkoLsC8q2+Fb8VECAwEAAaN2MHQwHQYDVR0OBBYEFC7+TXCAbY1opCnQQzUV TcITJ9fOMEUGA1UdIwQ+MDyAFC7+TXCAbY1opCnQQzUVTcITJ9fOoRmkFzAVMRMw EQYDVQQKEwpFbnRyb3V2ZXJ0ggkAlkxTQ4FFO84wDAYDVR0TBAUwAwEB/zANBgkq hkiG9w0BAQUFAANBAFkpYCnHeE10PZsQaUrgwAV4Os77wqPmD+H5YGfZX2gOSBem rs1CJ7VQskTLf1sb6szfy7pZe7iBl6brQOEmhwY= -----END CERTIFICATE----- lasso-2.8.2/tests/data/PaxHeaders/idp4-la0000644000000000000000000000013213766621500015160 xustar0030 mtime=1608196928.942896777 30 atime=1678814326.421984131 30 ctime=1678814321.357955291 lasso-2.8.2/tests/data/idp4-la/0000755000175000017500000000000013766621500020505 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tests/data/idp4-la/PaxHeaders/metadata.xml0000644000000000000000000000013213766621500017537 xustar0030 mtime=1608196928.942896777 30 atime=1678098071.421500279 30 ctime=1678814321.357955291 lasso-2.8.2/tests/data/idp4-la/metadata.xml0000644000175000017500000000153313766621500023011 0ustar00bdauvergnebdauvergne00000000000000 https://idp4:2004/singleSignOn http://projectliberty.org/profiles/sso-get https://idp4:2004/singleLogout http://projectliberty.org/profiles/slo-idp-soap https://idp4:2004/registerNameIdentifier http://projectliberty.org/profiles/rni-sp-http https://idp4:2004/soapEndpoint lasso-2.8.2/tests/data/idp4-la/PaxHeaders/public-key.pem0000644000000000000000000000013213766621500020004 xustar0030 mtime=1608196928.942896777 30 atime=1678098071.421500279 30 ctime=1678814321.357955291 lasso-2.8.2/tests/data/idp4-la/public-key.pem0000644000175000017500000000070313766621500023254 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAo7t+Y6cmkd6wwA2bOx8C FCKmip63r3C1Ovgrb5xXDDQayf3E/OiSRoxF2Ieuf26fIaV7r+nuUyUPdKXeT6SF cjbTjzueNv7K7YwqAykaQSuHZsvPD9RBFSuK4F3HUf39xRhIFiQgyPK9pAm+A10G 0VLy6s1ENXH5QTD1EhObI6c6gUq4JC8QlIKSTK4qMi1lJyjB1k5dKPjONU0mnTs8 ncfl1yF4uM95mUddPZXnBS0MeS6TvQ9qYwAzAeesFShMI5bLg39n+Ak1hqWQvsuV EqxG0BQAC7TgTPA1Dcm48isdxgwc0EqANlSZKvoLODa4IDvps8dYt+JXYjVPMJex 5QIDAQAB -----END PUBLIC KEY----- lasso-2.8.2/tests/data/idp4-la/PaxHeaders/jks.keystore0000644000000000000000000000013213766621500017613 xustar0030 mtime=1608196928.942896777 30 atime=1678098071.421500279 30 ctime=1678814321.357955291 lasso-2.8.2/tests/data/idp4-la/jks.keystore0000644000175000017500000001130313766621500023061 0ustar00bdauvergnebdauvergne00000000000000þíþílassoþWÁâˆ0‚ý0 +*‚é¯nX4P×!¦³´ñt2¨å‡ØÕ·}݇¨¬ûE—{hľÒÏHœÂûË.ðœýÆlаhÿýx< …†7,@žt³,+Ín(UŠð qÒªf-{û13³ÂrÆe7Ð@ÃöQè“Kâʨ«¥O‘¥œß'ÄÐs^¡¸Í£µ‚XÑs9™àìƒÛ ù焽fÙdŠ€2jq†l#uùÒc~޽p¬¥dº’ÝûhOi%Ûý%Åί.‹û)Ýíf€õ–7€ØG÷|—eÃmžûÿrH²2$ÞŠ?@¾hG7 ‡ÇId[ý·-¨K1+8ÚFZƒN›ˆ*µ!»5 áĪ{"ï9þ$F°EòN'ØTCõžØÆ¶¼a1y‘9ƒI»åýØ%`‘²#•§Ã¡.Ø+Mñk·$jêLÂKù6$ùûû/{/×õ¯TìXe’ÌwÐÅ(ÙF£3Ÿ¼YD¸†àŸ‚ëõŒu;ŸåíÈ=0§2ûï̆x0‡G%ú€pÙMƒh}r{Óhæ8¶ùŠª—Q–.S»oƒYOS¥qP‚¤ÎTÏPƒ˜qÖטR\0Ð伃'E¢~ (yü ¤ú•=/½øfùHB–kÊÐòWPŒ²í}TÄ@û2dݘ&Q®[ÆiÓül&-oßh[®`Q7ÓOñ5Ý÷‚Q'²„IÆOÝÏèË-äÁ󃘘ŠâNËËxÇm]U•: søÜÜš?äÍÿÚÆ"¼!¨šÁ¬+_ƒ¶ªÚE¼nÜiØÑKQà6¼ûW*ÆŒ³VL48>U¯BÞEÇkïa^ÏÁÔÚ¥i¥l, Ðf¶¨ 9ûµ¦Î]çü‡“Y{Þr¬ý/–S¢ù3æw)r"÷¢)t/Vìwãí†EtÑÃo௬'Y#¨ZÏÅcÉ?OMT`ç1 CFQÒPØ[Uõª¡b–NÊôç!d!HÞ  ò͘÷$cðjþ-œÆ³«óJ\ôZ´à•™©ÇQ kf¤a’Ìwçÿ}~fÁÌ*~¦t¾”õn,Ñð‡6xÓY³©BäRK(š;Áwm¾jø60üà Ñ³µ£ö4‹¯yÓ)¦ˆ¨,òè2gFÌçúä¥~‹t^v—JRKo vrmç¶›¢¾³¤1pí~ÐÇ𚛢}=(¸hΊL0ê0 ˆ/þ° ¶AJCi y¨ùrÏÂ᫉44¹rsõ}iµF¦eÖc7ÏÖ,©q)ˆpYñ-ªgÔ‘v _åÙË—cÆTd’ Çïç`Ò‰±×”õíƒ!殇š ×-_.—Ƈ÷d,r_êÄh4úéèž|4£¤×à§Û bX‰‰ gN|nd*€Ñe÷8ù¡0py{Ó#8lš†\¨ÇѪ¿‰\_¿AÔ³V!~ͳøÊÃqx&Âf$»ìÚ‘2YØõ"%â»Ë_URþz•Zøt|ÝŽpî¡ó8×Í-OX.509/0‚+0‚ 0  *†H†÷ 0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #410U Entrouvert0 040813104425Z 240814104425Z011 0 Uidp410U  Entrouvert1 0 UFR0‚"0  *†H†÷ ‚0‚ ‚£»~c§&‘Þ°À ›;"¦Šž·¯pµ:ø+oœW 4ÉýÄüè’FŒE؇®nŸ!¥{¯éîS%t¥ÞO¤…r6Ó;ž6þÊíŒ*)A+‡fËÏÔA+Šà]ÇQýýÅH$ Èò½¤ ¾]ÑRòêÍD5qùA0õ›#§:J¸$/”‚’L®*2-e'(ÁÖN](øÎ5M&;<Çå×!x¸Ïy™G]=•ç- y.“½jc3ç¬(L#–˃gø 5†¥¾Ë•¬FÐ ´àLð5 ɸò+Æ ÐJ€6T™*ú 86¸ ;é³ÇX·âWb5O0—±å£‚%0‚!0U|~ê‡QÑ6^ÈýøœcÒÊ ­äF0U#0€S‚…4K8Á%\чثõ>è0 Uÿ00 U€0U%0++0 `†H†øB€0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0B `†H†øB 53Entrouvert Liberty Alliance IDP #4 test certificate0  *†H†÷ ‚˜a:\ÿD]¸ÃCKÍ“¡ÐêlìiDˆy¬RÃ!•;ÖtfÄþÈÔØBË‚¹n*„yÀ*áJ’1Úv‰ë8ø…!òH€¨å¬ y…˜¡¤,|`°èxME¸èŠE]±Œ·‡NÛRÅÊÚ¥Ù·¢Òåd‚*ŽP”’¼:0ˆç> £+‡¦Û$÷{GXõ Á?ÀNRq0g(A5m|,B™Êcsª†Î']ª®mbtŒß±¦ Ä|Z¥TÍt/=&¨ò$ÉT¿’ô,a9vùw7ñC¶ìø;Ny\dûGÒÍ»¼r˜ÓzFA/ 54Ïà:Uᤉ֖¾FX.509t0‚p0‚X 0  *†H†÷ 0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #410U Entrouvert0 040813103642Z 290404103642Z0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #410U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚Ô]Kʲ¨äxT·÷GkÐ{ì ÛJ——ÉäêˆÄrPyD»©kaº _$žyÅ‚žÒñÊ”’7³z¸ŒÍXL™ ØÝ' 0iut´esQ]íÜÀ°o {G"™àÂo¸õ$—5²ZàÛ[tÙ‘TmŸ)d»w<b¼M†å–‹¼ËÌ>úE^º}uã}}ÃÆ˜Jmd3A;m°ð¹”w¸XœV bM,>ø†[Œà$àµÍ{ä ºžjbêÚñ&(“ Z±ày£‚C0‚?0US‚…4K8Á%\чثõ>è0U#0€S‚…4K8Á%\чثõ>è0Uÿ0ÿ0 U0*U%#0!+ +‚7  `†H†øB0 `†H†øB0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0P `†H†øB CAEntr'ouvert Liberty Alliance test Root Certification Authority #40  *†H†÷ ‚:ðåRG96"Fª_k(Õ áŠuE¨°¯¨â¶ÃN ë²RzÌʉ ïv°{‘[òQé—‚ÛH¬¸Æ‹0¥^EŽ5›´ÆžPLCÍ+Ò35n³7Reð~œxH**Ê–À»HÞ«3y¿–:ƒª¹}˜1™„Þx77’MèÛp¾u9 Í‚Œ†DrVµ_9â¨cEиM «iïÔÜÜ–H:£§zåõ ±ÖB¯,G±À>ô—Xë¼âLö¨ƒ8… ²"œHñÙI@øJhè•Ýx7jŠIϼL•,êm]#u;|4]n£±A)”;:.Ûàϧ“—‚ú¬TâAentr'ouvert liberty alliance test root certification authority #4þW¿ÿ7X.509t0‚p0‚X 0  *†H†÷ 0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #410U Entrouvert0 040813103642Z 290404103642Z0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #410U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚Ô]Kʲ¨äxT·÷GkÐ{ì ÛJ——ÉäêˆÄrPyD»©kaº _$žyÅ‚žÒñÊ”’7³z¸ŒÍXL™ ØÝ' 0iut´esQ]íÜÀ°o {G"™àÂo¸õ$—5²ZàÛ[tÙ‘TmŸ)d»w<b¼M†å–‹¼ËÌ>úE^º}uã}}ÃÆ˜Jmd3A;m°ð¹”w¸XœV bM,>ø†[Œà$àµÍ{ä ºžjbêÚñ&(“ Z±ày£‚C0‚?0US‚…4K8Á%\чثõ>è0U#0€S‚…4K8Á%\чثõ>è0Uÿ0ÿ0 U0*U%#0!+ +‚7  `†H†øB0 `†H†øB0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0P `†H†øB CAEntr'ouvert Liberty Alliance test Root Certification Authority #40  *†H†÷ ‚:ðåRG96"Fª_k(Õ áŠuE¨°¯¨â¶ÃN ë²RzÌʉ ïv°{‘[òQé—‚ÛH¬¸Æ‹0¥^EŽ5›´ÆžPLCÍ+Ò35n³7Reð~œxH**Ê–À»HÞ«3y¿–:ƒª¹}˜1™„Þx77’MèÛp¾u9 Í‚Œ†DrVµ_9â¨cEиM «iïÔÜÜ–H:£§zåõ ±ÖB¯,G±À>ô—Xë¼âLö¨ƒ8… ²"œHñÙI@øJhè•Ýx7jŠIϼL•,êm]#u;|4]n£±A)”;:.Ûàϧ“—‚ú¬Tâ`¤î|…We•ž¯Þu¯ÄÆ0£—lasso-2.8.2/tests/data/idp4-la/PaxHeaders/certificate.pem0000644000000000000000000000013213766621500020222 xustar0030 mtime=1608196928.942896777 30 atime=1678098071.421500279 30 ctime=1678814321.357955291 lasso-2.8.2/tests/data/idp4-la/certificate.pem0000644000175000017500000000274113766621500023476 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN CERTIFICATE----- MIIEKzCCAxOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJGUjE0 MDIGA1UEAwwrRW50cm91dmVydCBMaWJlcnR5IEFsbGlhbmNlIHRlc3QgUm9vdCBD QSAjNDETMBEGA1UECgwKRW50cm91dmVydDAeFw0wNDA4MTMxMDQ0MjVaFw0yNDA4 MTQxMDQ0MjVaMDExDTALBgNVBAMTBGlkcDQxEzARBgNVBAoTCkVudHJvdXZlcnQx CzAJBgNVBAYTAkZSMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAo7t+ Y6cmkd6wwA2bOx8CFCKmip63r3C1Ovgrb5xXDDQayf3E/OiSRoxF2Ieuf26fIaV7 r+nuUyUPdKXeT6SFcjbTjzueNv7K7YwqAykaQSuHZsvPD9RBFSuK4F3HUf39xRhI FiQgyPK9pAm+A10G0VLy6s1ENXH5QTD1EhObI6c6gUq4JC8QlIKSTK4qMi1lJyjB 1k5dKPjONU0mnTs8ncfl1yF4uM95mUddPZXnBS0MeS6TvQ9qYwAzAeesFShMI5bL g39n+Ak1hqWQvsuVEqxG0BQAC7TgTPA1Dcm48isdxgwc0EqANlSZKvoLODa4IDvp s8dYt+JXYjVPMJex5QIDAQABo4IBJTCCASEwHQYDVR0OBBYEFHx+6odR0TZeyP2N +Jxj0soMreRGMB8GA1UdIwQYMBaAFFOChTRLADjBJRWdXNGH2Kt/9T7oMAwGA1Ud EwEB/wQCMAAwCwYDVR0PBAQDAgeAMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEF BQcDCDARBglghkgBhvhCAQEEBAMCB4AwJgYDVR0RBB8wHYYbaHR0cDovL2xhc3Nv LmVudHJvdXZlcnQub3JnMCYGA1UdEgQfMB2GG2h0dHA6Ly9sYXNzby5lbnRyb3V2 ZXJ0Lm9yZzBCBglghkgBhvhCAQ0ENRYzRW50cm91dmVydCBMaWJlcnR5IEFsbGlh bmNlIElEUCAjNCB0ZXN0IGNlcnRpZmljYXRlMA0GCSqGSIb3DQEBBQUAA4IBAQAB mGE6XP9EXbgZw0NLzZOh0J3qbOxpRIh5rFLDIQCVCDvWdGbE/sjU2ELLD4K5biqE eRLAKgLhSpIx2naJ6zgPBfiFIfJIgKjlrAwdeYWYoaQsfGCw6HhNRbjoikVdsRKM t4dOfxLbFlLFytql2bcSotLlZIIqjlCUkrw6MIjnPiAAoysThx6m2xydJAQD93tH WPULwZA/wE5ScTBnKEEQNW18LBhCmcpjc6qGziddqq5tYnSdjALfsaYgxHxapVTN dC89JqjyJMlUv5L0LABhORN2+Xc3H/FDj7bs+DtOeVxk+0fSzbu8cpjTekZBLw2N NTTP4DpVHuF/pInWlr5G -----END CERTIFICATE----- lasso-2.8.2/tests/data/idp4-la/PaxHeaders/private-key-raw.pem0000644000000000000000000000013213766621500020767 xustar0030 mtime=1608196928.942896777 30 atime=1678098071.421500279 30 ctime=1678814321.357955291 lasso-2.8.2/tests/data/idp4-la/private-key-raw.pem0000644000175000017500000000331513766621500024241 0ustar00bdauvergnebdauvergne000000000000000: idp-jks.keystore 1: lasso 2: changeit -----BEGIN PRIVATE KEY----- MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCju35jpyaR3rDADZs7HwIUIqaK nrevcLU6+CtvnFcMNBrJ/cT86JJGjEXYh65/bp8hpXuv6e5TJQ90pd5PpIVyNtOPO542/srtjCoD KRpBK4dmy88P1EEVK4rgXcdR/f3FGEgWJCDI8r2kCb4DXQbRUvLqzUQ1cflBMPUSE5sjpzqBSrgk LxCUgpJMrioyLWUnKMHWTl0o+M41TSadOzydx+XXIXi4z3mZR109lecFLQx5LpO9D2pjADMB56wV KEwjlsuDf2f4CTWGpZC+y5USrEbQFAALtOBM8DUNybjyKx3GDBzQSoA2VJkq+gs4NrggO+mzx1i3 4ldiNU8wl7HlAgMBAAECggEAIQcdQ7TgDuTA+rzD53Ul0jH7LlM98mHl7PNKr8T1ujx4eu554hp4 B0sce8VC6enCp+LdxGqH7LW5HGqpIZ+qW5O7sVTxYV6cSLbRcrnD1gmV0qKiLis+xap25TOFlYCK xEtVn0HCa0asAn8EmWEWkvsMjVjCvZU0FnZtuSvDS7mJUiRNS6JMarS6Hpmm44Tm/ohPIdlzzviO PtyqgGHSRiQx0j+4Q7b+BXB1GcS62pmrSC0cbPSeuSVvG5mkHl0qDGVxJPFZu+XwxHleufMWxaER uZ6mRq6nOC2tEMrEvxIQo/pSi+tkCwEYorl1aEW4nRJH6+FefRkAl9ouCIo/MQKBgQDZHyy/kf+H QTVlensUDtfr1SwKfn31T490dgcxYHVcnVl7I5q/BmJ4tcIzjACHVyxI1dhsv2AlR5XWT8CjaMCF fCEoPpEsBsMn0+eYKdpr8Sf1MvdLoN7JJ4MBh9kQWJiglbAmGLM8oseid3jYBhBncFQTolgxX0c4 4KV1eOlCgwKBgQDBDPV4nGsGA5MaoaM3p6MJ3lrzaLBOR6C1s5kfMxWbEH6vDLp/EmlAeUbWTis+ YrQLQFZLqo0xySbQPmpF8WVd5nFs2OfA1j85alrDJhBcyCIJXtQNAQKXmEev83guVb3fDoetyQ8X xBhRfGQmiWJ7sy4mMhi94KH676dwUkhtdwKBgQCTCF6IWLlfgdREJV6F5ctpBFIvxRtNbZRrPKaA VJ8FmfUHw8O+ivdSYVvjBnMxM+JkbJSEiFD2zfR1TkrZHk4J11ao5z3uP6IXLZRPYkBtCsGRdfMr /wP/2scH2VQwkp7BWL0R/3YZoO5qYleuiuS+972oEi+BN9GGffLui3QDOwKBgC6A26TZMSK6u7Xf l/yxIiIfcRNPdaD1ui3q/Ii6eorm901dqJMxsS75x+mZ3OrjRfGr5t3FUMvcY8AoONtuYfezqkEJ IxKdyY8gIor94VUoVKKjODuFscUoxqQI5ztqJhnUWzSuyTb1YtJGP63UzGd16zkCOlmLAhn7nv78 ozvTAoGAHLPnSfHVnF5IN+5lqdc9Xd4xwCvp1OQ2kCaIQ5WdQhgRHmcDiElaD0EldMsV8TL+Tnuf rwR8MJKRyQIBfgq09Qrcrkb2MYKL4cKxLPQT7tCA80R8Cit8vipt60NqHctQ+TKEaupN/N1Qa615 prQbB4mncJuqA2xXpVRlTtMrRpw= -----END PRIVATE KEY----- lasso-2.8.2/tests/data/PaxHeaders/ca2-ssl0000644000000000000000000000013213766621500015172 xustar0030 mtime=1608196928.938896744 30 atime=1678814326.421984131 30 ctime=1678814321.277954835 lasso-2.8.2/tests/data/ca2-ssl/0000755000175000017500000000000013766621500020517 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tests/data/ca2-ssl/PaxHeaders/jks.keystore0000644000000000000000000000013213766621500017625 xustar0030 mtime=1608196928.938896744 30 atime=1678098071.345499682 30 ctime=1678814321.277954835 lasso-2.8.2/tests/data/ca2-ssl/jks.keystore0000644000175000017500000000242513766621500023100 0ustar00bdauvergnebdauvergne00000000000000þíþíLentr'ouvert liberty alliance web server test root certification authority #2þWÂouX.5090‚Œ0‚t 0  *†H†÷ 0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #210U Entrouvert0 040813103645Z 290404103645Z0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #210U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚Ãõº<¶½þT¶9¬Ê ¨vÕ-:`9 !£ˆé `®/zJ{Ïe ÁÛw¤Z¼ôYrØKÄÁ†[s Š&À ˆëcñoøÓëš3öð·Ïz”Ùöß—uÅýÿ±±«!”ý2ækzB–ki!HÛE=h>©ajOL[fFÀõ9•­\¶,(qÀ÷‚Ç¡waH¨AÓ>pð [_¯4 ÀþJí&-ä!òˆå`ãêë.cÙ;ûÙeõÊy-%Ýõ¿Î©«ÕRÏkûQ qjXÎ{âCi@äðÊ.З·~Vêc U:‰¾Îb‹’1 :Û€´½ŸÌò}«7£‚I0‚E0U·M©Ç-ryìzï‘SÔÏÏð0U#0€·M©Ç-ryìzï‘SÔÏÏð0Uÿ0ÿ0 U0*U%#0!+ +‚7  `†H†øB0 `†H†øB0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0V `†H†øB IGEntr'ouvert Liberty Alliance test web server Certification Authority #20  *†H†÷ ‚{ÍR묅õçj©P³•*¹vÛ¦‹ÔDeAûÑ‚CôÏ!*,¥ŒÇé•’:]ƒ¯¹óËG.dƒ¡>ö¬`ëdäãÇ-èlAÊ4cNí ÆP¥ÀÏG/ ÀÈ ¾ƒÖ¬õ-ÛE‡Ž‹Û·w¨éÜ#º|¡yŽ dÛä4iUâÜuÑÂxæx\Õò¨zšGþªÊFÒèE£àDZê§~&É–á³Q¿"…öü3³ßú×ìL…Îrùç̠ÓMŸ-±’Ù¨üR =´4ë{p•ç6qƒ‰“H¯M5p˾9Sz2Sê«Pž2•âzº«C¸û:'vy~8N[ó¥}´Ó=ÙEn01‹Kì¿çFÆ‚žŠGðí.¼-ÃÓ¹-±û3ãFµL‚•P;‡ýµ)J†­É}´€ætÇmgàÆtc§Çêêªk>rz |Tøñn+Œïzî.MÛA•…Pð‡ˆ?7Hø [¢¾œ>ò¨ž£±ô×ò–ƒv»Ý¿±Mµ÷`£[á;¼ö0·”“p"ÃüApPÑú×ë[0…sgET/³]¨4¹-SØÞ:Q‘ÒÁgð@Õ¶Þj¶057Ý&Tæ¹+8¤Ô+ÌǾV…†Ÿ¢1°YóÒŸ«5ùã2™Ö9#ÆßáMàdÏṋѦ§Q`¦Ð}r¬¸¥}à ¶Ÿ[³RéÖàû–_ET6… Õ*æ^¤ÛÐ(Z<è#Eî@šƒÑuI d iYkõ‘ÆÃî:×eKႇb¯;×LÓd«ŽÙ‡6û°äa§³ –7aH†­ÔS¸¡-åKó”­?^ü°ò›â¿Ý‡½ÃÒ¾4Ýž‰¦ >>Zc,»ZTÌm­s¿ÙcSH9V«ÞˆH3•`5w'GúÈ9yC`æBOFr×ù`hÑÉ7«‡…ç9:ÞEKLÒ‹Ù ÚÅXæ5ŸÓ¬h»Àã“í:þ¯¸ˆoƹiæM{Nš½ÒÁkt&Rm,U»¢èQ&3ÕÒÛlGš„aÉ,h!h! ½òî@bLnÒ1$Då%ŠmG/\r!‹A~…þÛ@.à!Ýõ=Af53è{Ø iÅ¿ªà‹±”9îž$àN•Ábpw{¸f:ÈËÚ> [¾· Vå¹–¿¥ê‘Íù|ië.†dÇ‘ðT÷šu”UW¹˜(–ê’ÕŽ ¶N¼¤i—!¶gü“ž3§/Yl¼úNݜ劗D¶ho An“¿ÿàY/-ÊK+…N2RT"Ì~§|4ð‹÷1+ÐÑ„Ïu;&Cà_rÖ…5Ø´rÆDµuÑ16Fj³cNüLqÿä.A þN=§^vÿIZ…òÚŠ"?JÅš Û(g4êõ8Ÿñ²}Ì«AÁpýŽôP¾û æ­5»¯¥js!åH>ež"ò¸ ‡>’SW|“¢Ã³Àà Z¤53³´C®ñ`ÒY~ü™Þî`xɼú«f°@Zþ›üÕ¹žœ*w®8€]Ûµ·¹Ëy”œfnEâ³Øœå•²Iˆ‡°àåBÜ^¹Ü¶^™Kd’sYüÆ€Ý$rÅ%)…„ßçMÁŒ9„t¸dªbHc“SJ-ܨ\ŒuÚGf‰ÎÌbU쯦UÚr@Ù¹—ÇÕŸìÒµ›AT9D#P¬-¡¨T'à+‚%ªë2€v¶šíUKo °)[±PÌîèßü×)œhËÅÎÌÔ|3Ë•µäí"tb$É3Îz^܇ec‰æHy¡96u{gÞ4‰O„Wí*ò±¢/2z7›¸’à‡ýDm"l2–ô‡Ÿ .… %)cbEŽ{ÐIºÌ 6-@(ö^Ûó,ðä~]s$;œ¢½#Ç `Ý8ÛÂþÁË|ÇHNhŠogZI t 5ZNEvéàÝ2äZgà“¥ÅJ®_Ž¢£çÞysíã:$9÷¨0UŒe+{`¶ë9YbÉ2ÃÒ<ÑÀ߸'¨¯e%T°Ô&:e>S ùb(‡É‰âò¤æòVo®Q¶S‹ÝÇñ&(¯&ø•£ÉÝ"×5*H+è—XcF7ºüŽèÁ8›}ŠœºŽ‹× Ïéó>¸Ýó›Ü«B@Ä€9Ô½[ÙÁ¡hß0b€}»=¸Û”Ui,@xé€D-^«L´e³j€â~vóòmŒÇ)ݳp++Lèþ¶9OüB¡4[Ê Ë:Ž÷‰»ÛU…q Rq÷Û»jBN“ˆ ñ²é¹•©WDa¨O×Ͷs1½Çǧ—Ô”Ò>'ôÐ&½¡0‚Ø *†H†÷  ‚É‚Å0‚Á0‚½ *†H†÷   ‚î0‚ê0 *†H†÷  0õÑy™» *–‚ȳÌñ»þ6ìGR¶ðÿrþ²H˜‘ÝÜø÷—ë‹®d`ª¬ìDom‡'åb™KáES8k˜;·Ÿ»Ö, IϹ%òþ,)uõŒ¼€áתµÒE¶xˆ¯WO ôÊÁ©H‡.7×C9ftƒœ“¿ž£D×Êãx ¤Å¼ØNôiG¿¿ç4 ³.‘l€ë ˜ ¤OÉ!5¹­ÔÕö!ë9Ý7ü6Ä*ÁšKÇÈk¡wXÚ|úO…G,í?ûç½ëë5 ¤a ¥ þ jMJWè)ûËÕm×5XUˆ‚üÍê+í3ˆCg„I»í=Ö½Fÿä ]‚¼lì²ÏÔªVw¬"?Ö%ªM‘ÜÍžët&^;x…¢Ø4R©€rt‰2ÍöU¹>£2â}ÊT#¼¡¡‹Ç¸ñò”JÞJ~ÖUߨ³Ya 6s" :"swã*5ýÄÐ×âïVÞ«]âØ]Ö1çôËû¶c$¿Y<Ǹ2o€ ‡HQfr¢Âu =Ä)@LÆ&ü„pÇy-ôŸ™ö—àÛÿuY¼¥>¼T_ßiJÿUÏÈh†DÆ…hQ™òÛ;a‚`Ô×ì)ò)ù»­aV…¨zbÕ‘é¤èûÑgDâ'ÿÿstN´uÜf‘ °ûwn7ršBzI 8¼MOžË^gã–”éÃEÓ?\Ô ‹¾Ž§n,Yò÷³ÎÆ OQÕ{›†4Èn«É*‚Ëï‰Ö„øßM"' N,nÞçòæ^YÍEûzlpHý¼‘NTÆÞâ´Ä%;˜wm¼@j'щsEc”òžtñe‡Ÿùä–¿ÐAñ¸©ÿêc±¥æÖè¸hèhÔá¦=Ý}3¯0-^qϸÌKˆ¿²uuD64H™’~wÀ›qxŠÐ¬÷ª{Vô¯úY¢¾Fì7Kô–†÷æ¢;9ù)Y¡Â 1ÃëNæþ¾º -V‘ÕòoZÖ÷X¼Cœ¨|DL{˜¨~e3°$*1ú1¹®Ë\àâ´’’iZÿo1»™F£ÉÒöœÂ´j¹ND¤.ÆΕ¨8¼'}|ÆûQ1i¨úÂòTå^8ÆùúéSJ_ô‡]¦?æDàpÒ˜ PÍÖß<ù\A"ÍBæÆÑuݾ.ËÀyx7k0MAr×HÄ |e°!xÀa$D éQöKNÞi¦ Â%Lóœ“)9ðû“r¨.xqjbú_ºj8H/ªõ:TºNP`UÕÌývéˆJ={0é÷ƒ‚F#¥[lûNíFDi¢ºlkï¹á ”ƒ X Ây;M÷¦.‚)òNÌIuã]œáµȯPáðVI`¦q%âçˆj80˜¶çž²LµÙìéO®ób!¬®cÄŠbS´ïdž26pëõÇ ÎÍÒ‚o ^ùÊÅÛt¶+>Õ 2àæ‰Æö+—ÿk´‘£ aÆd¤ôûÕN`°Â퇗õ.æ¨ÖŸ±MGU1»0# *†H†÷  1øß•ÔÁ@ëÛèäæéK%P±ÛA00“ *†H†÷  1…‚Entrouvert SSL Liberty Alliance SP #2 web server test certificate010!0 +ê-‹6R<ñIÇkdN2½·!ÏŽ‡(Ô D%lasso-2.8.2/tests/data/sp2-ssl/PaxHeaders/jks.keystore0000644000000000000000000000013213766621500017664 xustar0030 mtime=1608196928.958896909 30 atime=1678098071.533501158 30 ctime=1678814321.481955996 lasso-2.8.2/tests/data/sp2-ssl/jks.keystore0000644000175000017500000001134413766621500023137 0ustar00bdauvergnebdauvergne00000000000000þíþírootþWÀ*“X.5090‚Œ0‚t 0  *†H†÷ 0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #210U Entrouvert0 040813103645Z 290404103645Z0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #210U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚Ãõº<¶½þT¶9¬Ê ¨vÕ-:`9 !£ˆé `®/zJ{Ïe ÁÛw¤Z¼ôYrØKÄÁ†[s Š&À ˆëcñoøÓëš3öð·Ïz”Ùöß—uÅýÿ±±«!”ý2ækzB–ki!HÛE=h>©ajOL[fFÀõ9•­\¶,(qÀ÷‚Ç¡waH¨AÓ>pð [_¯4 ÀþJí&-ä!òˆå`ãêë.cÙ;ûÙeõÊy-%Ýõ¿Î©«ÕRÏkûQ qjXÎ{âCi@äðÊ.З·~Vêc U:‰¾Îb‹’1 :Û€´½ŸÌò}«7£‚I0‚E0U·M©Ç-ryìzï‘SÔÏÏð0U#0€·M©Ç-ryìzï‘SÔÏÏð0Uÿ0ÿ0 U0*U%#0!+ +‚7  `†H†øB0 `†H†øB0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0V `†H†øB IGEntr'ouvert Liberty Alliance test web server Certification Authority #20  *†H†÷ ‚{ÍR묅õçj©P³•*¹vÛ¦‹ÔDeAûÑ‚CôÏ!*,¥ŒÇé•’:]ƒ¯¹óËG.dƒ¡>ö¬`ëdäãÇ-èlAÊ4cNí ÆP¥ÀÏG/ ÀÈ ¾ƒÖ¬õ-ÛE‡Ž‹Û·w¨éÜ#º|¡yŽ dÛä4iUâÜuÑÂxæx\Õò¨zšGþªÊFÒèE£àDZê§~&É–á³Q¿"…öü3³ßú×ìL…ÎrùçÌ)xÚ)½,Í÷ ŒMôç]ÒiMi²aÑ5Ïlýsô/µW‰µË_GIµ»2Ö:ç±9”x%ð¢ÕTÏ ”IUˆOGúX?¼ïµ%c)ç×Ý t1§eÐé4¼ìY1»‘|üCºDìf)¸,-›Fú t6g?ßÏY1m–>ep«ÅF½¡kXMöF~”ª¶ôOŒã¬ÂE-´Í·ú„ó˜<1¬Õxï´?Ƽ`06EX’:Μÿ¸Èø¿Ãús×±ï®KJ;¤º.Hžw^ž Pž°¢±²•‹Ï¢ã/޵”†p(ã¦õÌa4ì“I1êôäI[=y‚ëÎÔ#.P÷[”a0<3hh¸"Ê;öfŒîüÍðPóÁkï÷Pm3 `ü½ªÎû‹y|t·U‘w +U˜¬ô›ÜÄzl‚ìÚ Á£~d·Cï,­$ˆT2ã9èúÎTÑ›×ÉVž/m³ØdÂC‚µÆÕÚ~Š¥ÀÝJyŽÅI¬*²ëßê¸Lw4ºqaj–×x®üêèôM$×¹P‰™2|% çH”éUŠaeUP|­¬ƒÈT µnΚ£‡f+Δ5Amrù`B+šÏ {ö-VþÖ¾Ííø‚”+çãÄ6ŒÑb={ƒìߨÒ,˽ç(&Ã,Ï.Ä&eÓtq „Š£„EÔ‰Ù +SñŒ¥^ÝB›æÝ%vb}ª¯—°ÝH‰à$ Ý;À!]Ï‘Y÷¼0ÌTE©§q}I‘ºr™b·W§LQ0t§ZŒ¨'›ß)Î?ª=íÓ#昀°ï=ßw¨èöÌ ¶|›U .ØõŸo\v²T^ÞÏ…ØÅRmÿO(Ïóói)úÕØmöÙúG¬þÅÐâcX.509T0‚P0‚8 0  *†H†÷ 0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #210U Entrouvert0 040813104426Z 240814104426Z001 0 Usp210U  Entrouvert1 0 UFR0‚"0  *†H†÷ ‚0‚ ‚žÿÛdÃM>.ïï÷yˆçO„’yŠà”;èžôs«Jƒp¿/x£Ü£s¦”­+¶;§ëºá𽋅Á>åA#MäÍ)½Õá̦¾¬vxFDø§FB7©Ö; g0¤Z±9M&Æö<^Mx¼½ø@ uª²÷oF…cMßsB“ùQ¯ë˜1·„—Ó!‰ ò‰uOV¼œ,¶\­i‰ ‰™âP÷K0åÒÂAaŽèMv7¿gl@¾W9ú¾R6…Gqã0m2‡£µ@ÐŒð_ôa ®&“és °–ûgÔ^¿È4ˆ{È‘ ¡+µÝ,Èø]?<ËØŽ™ÏÛ|Ô1‰ R‰"‘@ª‰]fÄã‚@0‚<0UÓI ²:sR‘ØÍq[0È!qà0U#0€·M©Ç-ryìzï‘SÔÏÏð0 Uÿ00 U 0*U%#0!+ +‚7  `†H†øB0 `†H†øBÀ0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0P `†H†øB CAEntrouvert SSL Liberty Alliance SP #2 web server test certificate0  *†H†÷ ‚hé#ݬÍg^æNÀŸêÞå>ÉܳÐU!\eÿgµ´zâ(|ÆH5.oì½·Þ¿ªA$ÙëíÓàÂÑSÚ‚Î’3<ӎ≺3ŒÌgÎamöøˆó»¥qÞ—‹*Y¶¢X¤Ë°:ÜbWLj¢~*kõal6¢sm )ŽçVßâyàã^§‘Û-ý¥Ìò’`SÈ~ž •ÏJÏ—îUb°>n»XÕê ¢ ¬‚àÜ\½m~.iÊø>.ßZÏ9‹­Cc™óü5ÞÓ0éÓ¿3\ÿnÒ£R–IF´Sà F‡`¡‹7yyŒ3b˜g…5pJ‘ʧI†MÁ X.5090‚Œ0‚t 0  *†H†÷ 0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #210U Entrouvert0 040813103645Z 290404103645Z0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #210U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚Ãõº<¶½þT¶9¬Ê ¨vÕ-:`9 !£ˆé `®/zJ{Ïe ÁÛw¤Z¼ôYrØKÄÁ†[s Š&À ˆëcñoøÓëš3öð·Ïz”Ùöß—uÅýÿ±±«!”ý2ækzB–ki!HÛE=h>©ajOL[fFÀõ9•­\¶,(qÀ÷‚Ç¡waH¨AÓ>pð [_¯4 ÀþJí&-ä!òˆå`ãêë.cÙ;ûÙeõÊy-%Ýõ¿Î©«ÕRÏkûQ qjXÎ{âCi@äðÊ.З·~Vêc U:‰¾Îb‹’1 :Û€´½ŸÌò}«7£‚I0‚E0U·M©Ç-ryìzï‘SÔÏÏð0U#0€·M©Ç-ryìzï‘SÔÏÏð0Uÿ0ÿ0 U0*U%#0!+ +‚7  `†H†øB0 `†H†øB0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0V `†H†øB IGEntr'ouvert Liberty Alliance test web server Certification Authority #20  *†H†÷ ‚{ÍR묅õçj©P³•*¹vÛ¦‹ÔDeAûÑ‚CôÏ!*,¥ŒÇé•’:]ƒ¯¹óËG.dƒ¡>ö¬`ëdäãÇ-èlAÊ4cNí ÆP¥ÀÏG/ ÀÈ ¾ƒÖ¬õ-ÛE‡Ž‹Û·w¨éÜ#º|¡yŽ dÛä4iUâÜuÑÂxæx\Õò¨zšGþªÊFÒèE£àDZê§~&É–á³Q¿"…öü3³ßú×ìL…Îrùç̮¼mÌ{ÅÛ_@TÒzñÆ[4¨<`øûsÃ~j!‰äËó/¡šulI²xÒ6âec R¼ÚXʬøJ“Þo‰+½dÂê ÿkÒפ̓ò¢åxªV …=ùàm±¹‹©é^Y—¹È4ãß=ùÚÁ"2z<ÛôyÒßÛóDÞãÎéÆ^"/U O•É|éE(cð⊚rŸÄ‘œØ‘Aº` Âêú0Fæ`¾²q/ò¿@”¡d© Iª„Hû>;ŒB]Íп8U²Ÿ¨å, élB\²ÿI/î¬6ÇG }GNN5£‚I0‚E0U“Ô<-ÔÂUçåÜ*£z:ºï:…0U#0€“Ô<-ÔÂUçåÜ*£z:ºï:…0Uÿ0ÿ0 U0*U%#0!+ +‚7  `†H†øB0 `†H†øB0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0V `†H†øB IGEntr'ouvert Liberty Alliance test web server Certification Authority #40  *†H†÷ ‚Êêù‚ނלë~xӚĔ´<Êê "1Ñ… ë×ýé†ñ{Â8ãÕW°¡“e›ðÆ™]Ææ„î7#„ÂJ¹qÞiŠ­ä„4ë—ãþâþ,››sr)I¾zeÏ* ôÜc#öê2Bþå>‹Ú“ó²ý.¥óؽ–—"ûl@`£Ñè N‚ŒÂÙ¸¹V9–€±›šC‹Ç QŠDÀƒL ¤'Íí¨È^ëµ,ì2Êœ!øïòåI–Á\Bã@#Æmòo0uîy¢å7z  7˜ö•¸¢‘µì¨ –Æ~þ߉QòßnÀÕ’cÓtÒ~†p©ûæJ†ë&ðžÉŽ"Ð]±¹â#æ½µuK©¤¾÷+^lasso-2.8.2/tests/data/ca4-ssl/PaxHeaders/certificate.pem0000644000000000000000000000013213766621500020236 xustar0030 mtime=1608196928.938896744 30 atime=1678098071.365499839 30 ctime=1678814321.297954949 lasso-2.8.2/tests/data/ca4-ssl/certificate.pem0000644000175000017500000000314713766621500023513 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN CERTIFICATE----- MIIEjDCCA3SgAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjE/ MD0GA1UEAww2RW50cm91dmVydCBMaWJlcnR5IEFsbGlhbmNlIHdlYiBzZXJ2ZXIg dGVzdCBSb290IENBICM0MRMwEQYDVQQKDApFbnRyb3V2ZXJ0MB4XDTA0MDgxMzEw MzY0OVoXDTI5MDQwNDEwMzY0OVowYzELMAkGA1UEBhMCRlIxPzA9BgNVBAMMNkVu dHJvdXZlcnQgTGliZXJ0eSBBbGxpYW5jZSB3ZWIgc2VydmVyIHRlc3QgUm9vdCBD QSAjNDETMBEGA1UECgwKRW50cm91dmVydDCCASIwDQYJKoZIhvcNAQEBBQADggEP ADCCAQoCggEBANI81buGeEYKhwD/lO8MfO+J/h0FUAVvX9N+5z6uvG3Me8UE219A VNJ68YHGWzSoPGD4+3ONA8N+ahYhieTL8y+hmnVsSbIfeNI24mVjClK82gNYw4qs +EqT3m+JK71kwhHqoP9r0tekzYPyouV4qlYNhT0I+eBtnbG5i6npXlmXucgfNA7j 3z352sEiMno82/R50t/b80Te487pxl4iLwZVDE+VyXwF6UUoY/Diippyn8SRnNiR QbpgoAXCA+r6MI1G5mC+snEv8o+/QJQToQBkqaAXSaqESPs+O4xCXc3QvzhVsp+o 5SwM6WxCXLL/SS/urDYVx0cAIBV9R05OGTUCAwEAAaOCAUkwggFFMB0GA1UdDgQW BBST1Dwt1MJV5+Ue3Cqjejq67zqFHjAfBgNVHSMEGDAWgBST1Dwt1MJV5+Ue3Cqj ejq67zqFHjAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBBjAqBgNVHSUEIzAh BggrBgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMBEGCWCGSAGG+EIBAQQE AwIBBjAmBgNVHREEHzAdhhtodHRwOi8vbGFzc28uZW50cm91dmVydC5vcmcwJgYD VR0SBB8wHYYbaHR0cDovL2xhc3NvLmVudHJvdXZlcnQub3JnMFYGCWCGSAGG+EIB DQRJFkdFbnRyJ291dmVydCBMaWJlcnR5IEFsbGlhbmNlIHRlc3Qgd2ViIHNlcnZl ciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAjNDANBgkqhkiG9w0BAQUFAAOCAQEA yur5gt6C15zrfnjTmsSUGgO0PMrqChkiHjHRAoUNA+vX/Rbphhnxe8I449UHV7Ch f5Nlm/CNxpldxuaE7jcjhMIGSrlx3mmKrY3khDTrlxzj/uL+LJubc3IWKUm+ehVl zxwqDPSN3GMj9uoyQv7lPovak/OQsv0RLqXz2L2WlyL7bEBgo9HoIE6CjMLZuLlW OQKWgLGbmkOLnccBIFGKF0TAE4NMIKQTJ83tqMhe67Us7Bsyypwh+O/y5UmWwVxC 40Ajxm3ybzB17nmi5Td6CR4MN5j2lbiiFZG17KgMloHGfv5/34lR8t9uwNUQkmPT dNJ+hnCp++ZKhusm8J7Jjg== -----END CERTIFICATE----- lasso-2.8.2/tests/data/PaxHeaders/sourceid-2.0beta0000644000000000000000000000013213766621500016674 xustar0030 mtime=1608196928.958896909 30 atime=1678814326.421984131 30 ctime=1678814321.453955837 lasso-2.8.2/tests/data/sourceid-2.0beta/0000755000175000017500000000000013766621500022221 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tests/data/sourceid-2.0beta/PaxHeaders/login-response.xml0000644000000000000000000000013213766621500022437 xustar0030 mtime=1608196928.958896909 30 atime=1678098071.505500938 30 ctime=1678814321.453955837 lasso-2.8.2/tests/data/sourceid-2.0beta/login-response.xml0000644000175000017500000000456213766621500025716 0ustar00bdauvergnebdauvergne00000000000000https://sp2/metadataiNrjxJrEqcOP3WpgSwtUoM7iKdNQurn:oasis:names:tc:SAML:1.0:cm:artifact 9XPQAZgwCnUHe1C/ebXio2+u/04= FB0xnlcFDNYoWEFAkaLSxVvC20yOrr89UIfbCIwzcULiS/KMFaJKCA== lasso-2.8.2/tests/data/PaxHeaders/idp12-dsa-saml20000644000000000000000000000013114050545511016417 xustar0030 mtime=1621281609.259307995 30 atime=1678814326.421984131 29 ctime=1678814321.31395504 lasso-2.8.2/tests/data/idp12-dsa-saml2/0000755000175000017500000000000014050545511021745 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tests/data/idp12-dsa-saml2/PaxHeaders/metadata.xml0000644000000000000000000000013114050545511020776 xustar0030 mtime=1621281609.259307995 30 atime=1678098071.381499965 29 ctime=1678814321.31395504 lasso-2.8.2/tests/data/idp12-dsa-saml2/metadata.xml0000644000175000017500000001077014050545511024254 0ustar00bdauvergnebdauvergne00000000000000 MIIDsDCCA3CgAwIBAgIBATAJBgcqhkjOOAQDMIGFMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExCzAJBgNVBAcTAlNKMREwDwYDVQQKEwhJcm9uUG9ydDELMAkGA1UECxMCcWExHDAaBgNVBAMME0RTQTEwMjRfU0hBMV9TRVJWRVIxHjAcBgkqhkiG9w0BCQEWD2hiYXJ6aW5AbWFpbC5xYTAeFw0xMjA0MDQwMDI3MDBaFw0xMzA0MDQwMDI3MDBaMIGFMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExCzAJBgNVBAcTAlNKMREwDwYDVQQKEwhJcm9uUG9ydDELMAkGA1UECxMCcWExHDAaBgNVBAMME0RTQTEwMjRfU0hBMV9TRVJWRVIxHjAcBgkqhkiG9w0BCQEWD2hiYXJ6aW5AbWFpbC5xYTCCAbgwggEsBgcqhkjOOAQBMIIBHwKBgQCcShHE1F8mmcKpd4dSPX5SB+SrlTyBGBBhlLyxiW7/VhMy9wQ/CL8bTOLh8QH1cB80TzYzHxDfYRGO/lEd6RyFjTxiug3s8ca91M2RH3dPIC1p5b7obs0jXJNGY52+54G4UFk9eFTRmcf7pE3GuPOtTtHxHkLvuzQJWHS85xAPiwIVAKMz1hUnqArzTw0TJPtpHkT5cvtJAoGBAIAj9xJRC0xeXhlzvEXFLqnJXTIrBEeQiwtH7yoGJCZVRkPB28pKFszDnt61IkdU5H+zhEqgiMOo+hGHH3imePCSxLGNnmAx/PR7qqPJPEK+nweLMixCFgjg3FzVc/Re3PbRbW0Rx9yIZjwnSFSq0somQACzJqZfTe421NGJilBuA4GFAAKBgQCW2Ts1hQ/2dPM+Qcuh+iCrHhhdvSda+4D+k/defiMm7Bmdj56Xrgjv9j9ZEXaZBHJkx1XnXbrEXfYQkSIK77+d+MLorC/SM5Yz2xXatP8tnSmQE9cE4Lb9/OfNFbs+JBNKjiBi5ZrB8phiPQULdh4vkE2QAj77DB3RfeAGMljBHqNvMG0wDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUopBgnBRcDnmbgd42wcHXpHV94WMwCwYDVR0PBAQDAgXgMBEGCWCGSAGG+EIBAQQEAwIGQDAeBglghkgBhvhCAQ0EERYPeGNhIGNlcnRpZmljYXRlMAkGByqGSM44BAMDLwAwLAIUNrgbrTIlxUCNFUTbcILsXO2J4awCFF7XlpaByAVaK3OZxd+7C6sPq6yi MIIDsDCCA3CgAwIBAgIBATAJBgcqhkjOOAQDMIGFMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExCzAJBgNVBAcTAlNKMREwDwYDVQQKEwhJcm9uUG9ydDELMAkGA1UECxMCcWExHDAaBgNVBAMME0RTQTEwMjRfU0hBMV9TRVJWRVIxHjAcBgkqhkiG9w0BCQEWD2hiYXJ6aW5AbWFpbC5xYTAeFw0xMjA0MDQwMDI3MDBaFw0xMzA0MDQwMDI3MDBaMIGFMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExCzAJBgNVBAcTAlNKMREwDwYDVQQKEwhJcm9uUG9ydDELMAkGA1UECxMCcWExHDAaBgNVBAMME0RTQTEwMjRfU0hBMV9TRVJWRVIxHjAcBgkqhkiG9w0BCQEWD2hiYXJ6aW5AbWFpbC5xYTCCAbgwggEsBgcqhkjOOAQBMIIBHwKBgQCcShHE1F8mmcKpd4dSPX5SB+SrlTyBGBBhlLyxiW7/VhMy9wQ/CL8bTOLh8QH1cB80TzYzHxDfYRGO/lEd6RyFjTxiug3s8ca91M2RH3dPIC1p5b7obs0jXJNGY52+54G4UFk9eFTRmcf7pE3GuPOtTtHxHkLvuzQJWHS85xAPiwIVAKMz1hUnqArzTw0TJPtpHkT5cvtJAoGBAIAj9xJRC0xeXhlzvEXFLqnJXTIrBEeQiwtH7yoGJCZVRkPB28pKFszDnt61IkdU5H+zhEqgiMOo+hGHH3imePCSxLGNnmAx/PR7qqPJPEK+nweLMixCFgjg3FzVc/Re3PbRbW0Rx9yIZjwnSFSq0somQACzJqZfTe421NGJilBuA4GFAAKBgQCW2Ts1hQ/2dPM+Qcuh+iCrHhhdvSda+4D+k/defiMm7Bmdj56Xrgjv9j9ZEXaZBHJkx1XnXbrEXfYQkSIK77+d+MLorC/SM5Yz2xXatP8tnSmQE9cE4Lb9/OfNFbs+JBNKjiBi5ZrB8phiPQULdh4vkE2QAj77DB3RfeAGMljBHqNvMG0wDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUopBgnBRcDnmbgd42wcHXpHV94WMwCwYDVR0PBAQDAgXgMBEGCWCGSAGG+EIBAQQEAwIGQDAeBglghkgBhvhCAQ0EERYPeGNhIGNlcnRpZmljYXRlMAkGByqGSM44BAMDLwAwLAIUNrgbrTIlxUCNFUTbcILsXO2J4awCFF7XlpaByAVaK3OZxd+7C6sPq6yi Entr'ouvert lasso-2.8.2/tests/data/idp12-dsa-saml2/PaxHeaders/private-key.pem0000644000000000000000000000013113766621500021445 xustar0030 mtime=1608196928.942896777 30 atime=1678098071.381499965 29 ctime=1678814321.31395504 lasso-2.8.2/tests/data/idp12-dsa-saml2/private-key.pem0000644000175000017500000000124013766621500024713 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN DSA PRIVATE KEY----- MIIBvAIBAAKBgQCcShHE1F8mmcKpd4dSPX5SB+SrlTyBGBBhlLyxiW7/VhMy9wQ/ CL8bTOLh8QH1cB80TzYzHxDfYRGO/lEd6RyFjTxiug3s8ca91M2RH3dPIC1p5b7o bs0jXJNGY52+54G4UFk9eFTRmcf7pE3GuPOtTtHxHkLvuzQJWHS85xAPiwIVAKMz 1hUnqArzTw0TJPtpHkT5cvtJAoGBAIAj9xJRC0xeXhlzvEXFLqnJXTIrBEeQiwtH 7yoGJCZVRkPB28pKFszDnt61IkdU5H+zhEqgiMOo+hGHH3imePCSxLGNnmAx/PR7 qqPJPEK+nweLMixCFgjg3FzVc/Re3PbRbW0Rx9yIZjwnSFSq0somQACzJqZfTe42 1NGJilBuAoGBAJbZOzWFD/Z08z5By6H6IKseGF29J1r7gP6T915+IybsGZ2Pnpeu CO/2P1kRdpkEcmTHVeddusRd9hCRIgrvv534wuisL9IzljPbFdq0/y2dKZAT1wTg tv38580Vuz4kE0qOIGLlmsHymGI9BQt2Hi+QTZACPvsMHdF94AYyWMEeAhRv7V+3 CzayXAXi95cvJTWAbc7dEQ== -----END DSA PRIVATE KEY----- lasso-2.8.2/tests/data/PaxHeaders/idp1-ssl0000644000000000000000000000013213766621500015362 xustar0030 mtime=1608196928.938896744 30 atime=1678814326.421984131 30 ctime=1678814321.329955132 lasso-2.8.2/tests/data/idp1-ssl/0000755000175000017500000000000013766621500020707 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tests/data/idp1-ssl/PaxHeaders/all.p120000644000000000000000000000013113766621500016532 xustar0030 mtime=1608196928.938896744 29 atime=1678098071.39750009 30 ctime=1678814321.329955132 lasso-2.8.2/tests/data/idp1-ssl/all.p120000644000175000017500000001045613766621500022011 0ustar00bdauvergnebdauvergne000000000000000‚*0‚ð *†H†÷  ‚á‚Ý0‚Ù0‚ ÷ *†H†÷  ‚ è0‚ ä0‚ Ý *†H†÷ 0 *†H†÷  0ûòœõ0éj€‚ °ùBâ*ÙªíjX­UP \ÀíéÓÇÒ’«ºŸ¦o`‡.N¸—yðÔ̯SøÃfщRbo)Â&#¹VóýøR5ù&7¬T«›œ´ã/÷>”<»ú}õ@}Ô’èG,A¶­«u0À&±ª ‡ÛMrÙ :,eúV€YRâŽúF3ì]Pæ ÝY·0Ýq3Úè‰;Ξ2 ȉs>² ÉÆzÈ €æšƒ3—õÑmöºsCtýÌ2Ï>àÒž×îLa í„ÖeåN¨X Þ9Mûù‘~• ?Ì—ÄXf;¢×ò6 ߌõ'Ÿýõã’oáç*grºÅW&]ÔIΦÑÍó²IÁ3 ‹ x»ÇPÐ[dIÄò…éÇWk‘ßøåóäöÅÅ%Ác8E'YÀÌDðØSï"Þ—)!öDŸöö[4v&]£–ñä}+C49}ÂÊ8W˜¼´7 s|ù™Ú!ª¡Û½ƒ½^Eȶ, ù€ù\pŽD”;9W¡ïÛVõêfÝÄéØÿ¹².L]jÛŒ"感 žÀl ŽÜMèê¼P{|úgÏ/~ܘsô+Tî@2¯Ö'»ðý ç7TÊÂ;Üî2Rgäûöå¼¢zòeˆÿö¸Jj,3*ůt:®äË;PþßwÇaß”ÏL=ôw½pWàÿè<†A„Ï̪û Ø5¡{:ö–ò}s ‹Ô·«—7H7 Ò=1ªú?£•žðtG2;’uê q¼8* Y~³ Ø:1qá­ë?w ‹‚o`BŒl —šß¸”Zÿäl¡'»ÍnaT+-|ëZ]r²vìˆez©•ଵX©˜ÄÿÏç“üŠ( ºï6"*Î?ûma Ž7(Ò´#<æ°ñÖö ˆ â…02¬‡›ßË1ÎëÃsU é¦2ÈÖr‚þ#ÁŒ>\wùf.0ÙŒ^ÛwÎ#¢­g”»Ñ6åc^}ëÌ·àüwÒ*ë䞨”Ö@€úG,DÃHˆ)Xò|¹ž+tk­ <åjì}UhÜÅdšHï¤ cŽò²Æ$ÝV)qô€c`hh‹€âܼÃ÷ÄX}È-ÅQKØ+mg2„ÕQ0‰žÏfƒªfÚG$«‹ŠlrQŽz,f0n$…ašjgýãO‡îðÞ×ã÷´ð"}Äç×XøMGpƒ_cå85ËAQžö¯±:>è“0+ì)¾ ¹+Éð)/[õ–«Ï›¡I €ùe‰=úg´Pé>G¾ºõèµ2Êe#gŒPu·Ïª_PàX>À‰'ˆÌâwý¶e8dý…WWP<|T3té¦je„v “ˆ ô½ã·ÿ-[ܘâNÈÉçOóh¾:™µýpFQÑËüÆ~'†œÒ³+æºÅo;ƃHäijþ—*$&åUÏÔè2ÍÁ¤§éá¶ïÅ/mXg‘lYÝ.Ñež± oœñ’‚šÍ‡цŸ *((p\¬ËŸ¼ÙN©«”º¿ËDç·uø¥T 1"4tÑl ïfÖÑü 7KRtb jý©›šƒnrYCÜ]<ÖÏšÏa;@FAݪ%Xu0Z‡tÅ{6×üMk6…'z_ËÀÿqíñBü7Y‹Ñ‰Î‘V×DïÁ€b öç¥ Œ0é½ä5²šô×§Ø©"³:|l¢,ÏF_ À5ŒTR“Y”4^/ŒCJêû×+¸Jtÿ_}7íuΪ_3GI Ç­yþX$¸IÍLE—hÛD:Ç*øP/B|ù¯]¸û¿‡/¸µ`ÿt²‡”d‚·£¶5ÐnwÝ.¤a xåÈÅ^ѵÏG0ÖÄÖ©tì Ïþn1èötȱf Oã¡…„¦`ïo†œ<ž{® tµ–‡ý•¨­µ?n ÉÃÜôTu¤¸,˜pÄ´ÕÃT¨ýԹϤ+¡ŠË‹ 6ïP~q‘Æ*™2ÿ¢ƒ›3O+Y d´ b¨Š&…ÕwªþóDi©dhPø-S¨61Źۧšã–‡ÆM#.ZùwS³‚êöÞù‰ zŒú‹©8î îFDÃ~¿pçò™³¢ÞXð„ ´Ú¸ó{!H%ݘðZ £Ë”¸íAße«Ž˜œU›O‚~@Þ"K— à£ÝV9'¨÷œ?>QxµíNxÕéñù I×ÂvZdòüÌÁFoü0ÖFóZfê¹ÕÕ?—« R›ðÏ~ «>"WÖx]Š„JPrߦÎqûïþMÉûácydV¹å@qc*hì3LddL Õ罃(ÌBÕE–G饖Úfuµ_5©yž7´­ÿJ„’lt>‘NRÚÂÆpTPîø±PüiþÖ2 ™ö›A$]Bú¸ä£ŸÌá`{úa¨_PúÒ OëÂ]æNÅœ:øtgÕ¿’—%Ïeõ•OÕR+ðá(s8mWŽcmÛlèÿë<¬Séš›ÇÒ6GÎÞ¼‰v*&C۲顦™´éÜ9<ènž¶Qf6Y)ÖúÔN–G§¡|¼ö{»A5oŽu¥TÅd‚Á&²™Ixý(àeàú`»[{´«8Q »›ôuf ç’ÏŸÍBÈ“={ÕMæ?z¥b~òÂû)ç§?;3Äq±x„‰ó?@q©®H&7.J‡Z‹W5¿åáÖ&ÞÅùxg¨nÓ[÷1Øþ¯¯Û5 E©í7…ÐE ©Ô·2¿z¼æaï«)ÖýsT[}Iéýf:ÚV _Rß cÍ<Ƙ¹Gê³ü—'—ÞÎE]lqgäIâ[MW½ÀõÈž…ú®q5EjÈ ‹Y˪›m™Ò |Ak.T ‡·õôüV¼ü°YF´´ÚóþŸqJW ¤úºkæcjËñÅà <œhTÝf¢©li«L±*€›Záìõ*já¿ß§vÔԓæQC*]¿ˆY,:”¼ö+SnkA¢z¶Åè”=®~q Ür ˜‹bûŸ6.Ã.ÑD7s˜mó½øy!ƒ È·!ºV;^˜+5ˆ6klžÊJåR2#·±§Ñî™´õÌÍ}¬ÙºÈ}y÷5ƒê5Aª­j–‚zˆ€àÏ×pœ9¢gEÍÍË%Ï—0C»û¦•ï©BNâ{Š9û´žº4­¾¬°0‚Ú *†H†÷  ‚Ë‚Ç0‚Ã0‚¿ *†H†÷   ‚î0‚ê0 *†H†÷  0]9–1) nÌ‚ÈVe¯Ý°!æ &q²T¬_(‹×³ž@[B ¯ÌéJËá¸ÅŸåÁ¬‚!D óêÔkX|„~§˜z2WÛr%å9¹â)aÒL±gûmÀÙë *ÌRÉÂZó¾‘=8IПˆ)J¢åÈ1P«z;qÊ ŒçÎíUPu` dýx¨öa’eâ›7ÛÑ# ¢Sâúoeu”×àšu÷v—î-A¬;9tíRËì«L>³¨‡¶0#¶B6±yRK‹ˆoÌëß…)œª¡&•êa‚Q«¾-I"²‚ÊU0]'je¥;*>!«“wÁî’~ù6Ù™†«õ³/ƒýà3‚ŽîÔ݃O{Gop–½ô\sìÒGTÑ:ñ…ÕêŽÀ=äÞÙ—Áî깞jBæ!NvBa:&ëä”`ïg¡YIúƒ"ÌÔΊ¹Ì~IÓxt\ê°9˜>±wÞ¶Dìëë?E!Oÿ¸n+æ‡ 2n®<-VRo]¥¤ÿÈT?J ü­mÔÃËkc’˜ŸdJ‚-8ûÑÓn,ÙE0­éžè+• Z…l&ëãæ†®W¡5e¼2«NÞ}Š«>-ó“¼) èbj†é‚UÄØÓD£6íYûXúudó†ß¼‘ËÀ%ªåÞŸŒE»Fc2ùdÃïÁø Œ9­5ŠoQÚDÀõ+(éž±Uü1þQœ+°]¼f÷Æ´üÇ©‡\¨Cm‘ ÚOvmzRÿE™´´k§FÿGöF‰1ç²;Æ.Igv@'ÓàIOW² ƒuµ¹ÐMšû}ÆAlX“JJôXb'øŒ|øµ#$ѵ¼tÅÁS™B"Úx7éó©¿}û£ðÖn@Y4eißÏW“by HEQnÙöß¡têNùoí^À¶¾…¨p{ѹ_GRÌœësHmªQLvLÌŒ(V1iÆ/û[ÁäQ $1¶‚CkŒ‘¦2>Sy=¤]$\(írô"Y‡Def#æù©u4‹ V™‘U @£Ò )õ5ZvçéN¡Ð š2æí®‚ˆ¡§ç/ˆXÕE£á†á8À!~?wp¾@—^u/fEÉâU½ªè"^X2—™xØ™à ®výîßãt±›œÇïmgÝg>5C½Éý"‹­Ÿ®€W/ y×–pbVîŽ,2Ù†uؽ"Ó ¢·í ·gr+ê¤?‰å ‘›CÈlòðkŠ[5•¿Ò‘­øÇ{cÚÿúkóûaFÛëó›L×6Ù®~CKù}÷Zƒª€ðl›Å‘~@&'½hÛŒV´îIòÿw·$K³l°frÇÄZ{) %ÅŸ hi¦˜fÍZ^K¿Oè ɉ›ÒpÄÏsÝ3h«‹èµ‡9b˜\ôsoðodéúnüaV5áW×Ù'pò€H_ç±…f„©œASüùýæ&$ø€È½ª> />‘w\!|„NÚ²ªw˜ìØè9¼À^ôZ1ëírz @ÿäVÖ(ÕÈâÒ"•Áµ¿ {q} À "ßé) ·¦ýŽm娭Q‡¢~n‘µ*¸n<4H—M™rs¦Ì¤ùäëÅ£³G4ÔÙkÙ\y1½0# *†H†÷  1¶¦ÆþÄúê.f¾‰­ù`ôõx0• *†H†÷  1‡„Entrouvert SSL Liberty Alliance IDP #1 web server test certificate010!0 +´*óÑ/æUÖÎ~ÜûË|˜£c¶~ ±ïÔÓêFlasso-2.8.2/tests/data/idp1-ssl/PaxHeaders/jks.keystore0000644000000000000000000000013113766621500020014 xustar0030 mtime=1608196928.938896744 29 atime=1678098071.39750009 30 ctime=1678814321.329955132 lasso-2.8.2/tests/data/idp1-ssl/jks.keystore0000644000175000017500000001134713766621500023273 0ustar00bdauvergnebdauvergne00000000000000þíþírootþWÀ¦X.5090‚Œ0‚t 0  *†H†÷ 0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #110U Entrouvert0 040813103644Z 290404103644Z0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #110U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚¶”:…;[ÏOê¦ÉqTÏàýý™[êqÎÓÖ0µ×.U&•ˆ-(¦%líŠW,¿vDbáÓ€ ŸIkWçÚJŸâHÈÁéOz?ÃJKB*”4% üFâqjiO)Má³® 0\Cå¶ÌuÆÞp÷7å•í™ßÅj*x™‡È`Bq´zO„F%½§ÕxtcFU‰ùtó¥9¯Êq4¿(Rî®`‹{„Á\d¡}²P F«¢&”g··fŸÜꪕT xë9ö-mp° nUAZ¶§xÕ}Ô±ŸÐæ”Xb±ý7%õQ¯Ú›ú܉Ò )µ–úø8vuïŸÏ©£‚I0‚E0U)®kvÊ5ÉZ;5ò"B?`á;0U#0€)®kvÊ5ÉZ;5ò"B?`á;0Uÿ0ÿ0 U0*U%#0!+ +‚7  `†H†øB0 `†H†øB0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0V `†H†øB IGEntr'ouvert Liberty Alliance test web server Certification Authority #10  *†H†÷ ‚6Y‡y×,Kˆêæ2%ýò©d¤àbªÃ¦è¼ó¹mqqÝ÷…P“ë÷ Ò9OÚŸ”Ä}c€€¿¤MTWÈ/™cƒ¸G ³²òK襲I<|Vï®iœ¦·]º¼À˜ÂCP$| ×ïÏØjš§¦ª!µÁ^`({,Zª×i§¥°r ž­¬†žÏõɱóý£*ˆFjg›/ýr°f̰mºÈ=ñÜ€Ü[“I¼–œëÑöµÀ7Ä£H8zg=¿+™4¢³¨dò}êpp j‹¯rÞ=¡LåZGBmK¾ƒ´jy£ÊÄ©ì°"€tJO:Y­ºtomcatþWÂ0‚þ0 +*‚ê£ÆoNö_Âg*ØdÓÉ‚'Ÿ)æ~ø=ÿ{Påëéô\ã‘ý†ý2Æ8Å„¥ÿH*ïQµÙ¦3º;ülqš½“áöaUIN¿äsøȈži{£ ¶òõ=*Rfª —à”Íð "G¢Ë™;xŸ¬ÍÍ«Á©SO æ_ ±è[Vù{kÎWœúˆÁèõÑ~ñq;ö›FOB=,}F¬õa5))f}t;V^$³!²:YˆøtAWC ¾Â/n&ÓrÍûóLû3u0m“hãw£”ÿjt°=“ʦ<)3dÊÀN2I¾À?-q¤…z[Á£Õ‹ÏAf N±j€[©{ãÆ¤¶Û·81a‰xWÑCP‡X•gsIiÂ+O¢u]u¸º¡Ö>R61 š”õ‚É ú]±µ¼Àî§²3å}qÓëx­~úùGðköÃG0¶âý4ô°Ôjïí&ù4â¼»J"zžWO‰ñ£ô?B@F Nú ¤bTÌ}ʲÆ{½E¼¾îÚñÏI`( þ1¶À“7T¾Ø-vbïฤ›¾¤›­"Ú²pn ­¿(“×d›bõpLóu«ÿ¢V-.¢OÎþ`c¢þg,‡A“$>1j¡„»YÃxm£dð0 ¢žÆ®ßúúˆyú+Rœîs¦´ì3Æ ØZðUáçª4š6:÷8ñdG}»|§°EÓjœßíTñeßÝL-Þ0I{7„ûµü?„FÜ*~³÷˜Äzc9ÀE‘*½5Ø3)˜Ê€FçãaACcé^‹j•ç{v^ˆ/ÍM4go&ß&hœ‹µ4ˆúZ#oPï_«ò±P ÃY¶ªœlÁäéB¼ñ‚¨. N`Á§m}?€6?-W8¢˜ÙšÀ«ßÅ£(ì§À–m£Ro`^jH»ømŸ&?a¨ô©ŽBeóÓ„~H›¤¸nÏâŠ4€l~î¿,Û|à=÷TƳã»ÿ6/(‚.ö# ë4”RÍwìýc2B‚sFÆÈÿ7°lFfêä}%›† µ¥D)tñ`Ó‰[ãXÀ+]e+­ä5Ÿ—ŠOW{ã˜Æµ´Ýℯ.ú׿Ék$åÅ]ï`-8 üž©g—lMïþÈ—¿CÛ§Ê^IfGO*ƒ‘ž[ôÈç àÑØÿýžÅ…Ïõ09¶,V´¼XM0ßy%Il6 õ+>µUý©» 3µTÓf£•ûÏÁQRÎw8_f®Ï¼rJð˜IÁ d;3§l“tðõˆãµ¨°“u?wdÈ&}(š7u‘1SÖ7Ã@ùÃ5å²íIš°Ônœw„S®îöVGû²x5“Û×Z¼jÌÆ^¿ 3!©^Ì!¿hç„hûü'„ÎÔ†æÂ ©h»uã¼)PÎr<ôÂx¹ý¾Æ.ïÂ÷m#­á­Ÿ#.3¿ÚÆÞqFÕ¾Èþ8~ýpQúþhkeãÀN?â1Ú9Ws «’{äl§X.509V0‚R0‚: 0  *†H†÷ 0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #110U Entrouvert0 040813104425Z 240814104425Z011 0 Uidp110U  Entrouvert1 0 UFR0‚"0  *†H†÷ ‚0‚ ‚±ÿ?¡äbL1¦Ï‡çÌ¿i¸:½ ¯žÒH±Øs¬•I©×™"épi_gF}Дܗ¼ßZ†þ‘whuW˜ÇÂͶ»j2GËŽ¶—Ä6ÝkÍRŸxcDhf7Æ+÷UyS—ÏVâo"{Vªù¬¹+Ì—‰Ò0Ÿ™ Í…–󸇅…‘㗢ѴY½0ƒXÍÂù—ÿÆ%>e¾¢Ÿlø÷ÛWb>®˜YÎçM ¢–æO×g²'CnM3I*7Éú[ê!q U§²(95%=}}á…C†aêî‘>8Ói^õSçg›NÓ"¾æù´yLž kó• 'ËÊÍò^m€S½±a£‚A0‚=0U æg­}Äö¶8œ6}(Þ36Ö§0U#0€)®kvÊ5ÉZ;5ò"B?`á;0 Uÿ00 U 0*U%#0!+ +‚7  `†H†øB0 `†H†øBÀ0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0Q `†H†øB DBEntrouvert SSL Liberty Alliance IDP #1 web server test certificate0  *†H†÷ ‚M6Ÿ;Ek»ÚÀð¾ºó:jý¤Œ0ÕuŸC(Ãq„‰”}àO:ðÀêmõ'íŸRirq ,Ä þŒgcuæ¹,^Æ«sªÖÀ‚üýްk’¨È¤[yé]0JHOµÝ“…}ƒæl› M|Ü'`hÊŒ#jwë`¡*Á8æZ¸üùVA­Oäé‘ôÀîFÉ›žÒr[ºÖø ‹dÑÙ´è'¹îÍ-VÄe9Ô[µ0ê'.+²D›£Z½û¸µk(Q%Š¥ÚÕÊX.5090‚Œ0‚t 0  *†H†÷ 0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #110U Entrouvert0 040813103644Z 290404103644Z0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #110U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚¶”:…;[ÏOê¦ÉqTÏàýý™[êqÎÓÖ0µ×.U&•ˆ-(¦%líŠW,¿vDbáÓ€ ŸIkWçÚJŸâHÈÁéOz?ÃJKB*”4% üFâqjiO)Má³® 0\Cå¶ÌuÆÞp÷7å•í™ßÅj*x™‡È`Bq´zO„F%½§ÕxtcFU‰ùtó¥9¯Êq4¿(Rî®`‹{„Á\d¡}²P F«¢&”g··fŸÜꪕT xë9ö-mp° nUAZ¶§xÕ}Ô±ŸÐæ”Xb±ý7%õQ¯Ú›ú܉Ò )µ–úø8vuïŸÏ©£‚I0‚E0U)®kvÊ5ÉZ;5ò"B?`á;0U#0€)®kvÊ5ÉZ;5ò"B?`á;0Uÿ0ÿ0 U0*U%#0!+ +‚7  `†H†øB0 `†H†øB0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0V `†H†øB IGEntr'ouvert Liberty Alliance test web server Certification Authority #10  *†H†÷ ‚6Y‡y×,Kˆêæ2%ýò©d¤àbªÃ¦è¼ó¹mqqÝ÷…P“ë÷ Ò9OÚŸ”Ä}c€€¿¤MTWÈ/™cƒ¸G ³²òK襲I<|Vï®iœ¦·]º¼À˜ÂCP$| ×ïÏØjš§¦ª!µÁ^`({,Zª×i§¥°r ž­¬†žÏõɱóý£*ˆFjg›/ýr°f̰mºÈ=ñÜ€Ü[“I¼–œëÑöµÀ7Ä£H8zg=¿+™4¢³¨dò}êpp j‹¯rÞ=¡LåZGBmK¾ƒ´jy£ÊÄ©ì°"€tJO:Y­º]Ï6E³‰Ü«)5rñßãllasso-2.8.2/tests/data/idp1-ssl/PaxHeaders/certificate.pem0000644000000000000000000000013113766621500020423 xustar0030 mtime=1608196928.938896744 29 atime=1678098071.39750009 30 ctime=1678814321.329955132 lasso-2.8.2/tests/data/idp1-ssl/certificate.pem0000644000175000017500000000302613766621500023675 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN CERTIFICATE----- MIIEUjCCAzqgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjE/ MD0GA1UEAww2RW50cm91dmVydCBMaWJlcnR5IEFsbGlhbmNlIHdlYiBzZXJ2ZXIg dGVzdCBSb290IENBICMxMRMwEQYDVQQKDApFbnRyb3V2ZXJ0MB4XDTA0MDgxMzEw NDQyNVoXDTI0MDgxNDEwNDQyNVowMTENMAsGA1UEAxMEaWRwMTETMBEGA1UEChMK RW50cm91dmVydDELMAkGA1UEBhMCRlIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw ggEKAoIBAQCx/z+h5GJMFzGmFs8Hh+fMGL9puDq9C6+e0hFIAbHYc6yVSRSp15kd IulwaV9nRn3QlNyXvN8RWob+kXdodVeYDsfCzba7ajIQH0fLjraXxDbda81Sn3hj RGhmnTfGK/dVeVOXz1YZ4m8VInsFVo+q+awduSvMl4nSMJ+ZC82FlgbzuIeFhZHj l6LRtFm9MINYBh/NwvmX/8aNJT5lvqKfbPj321eQYj6umFnO500LopbmT9dnsicF Q25NM0kqN8n6W+ohcQlVAqeyKDk1JT0AfX3hhUOGFmHq7pE+ONNpXvVT52ebTtMi vub5tHlMniBr85UNJ8vKzfJebYBTvbFhAgMBAAGjggFBMIIBPTAdBgNVHQ4EFgQU oOZnrX3E9rY4nDZ9KN6QETM21qcwHwYDVR0jBBgwFoAUKYGua3bKNclaOzXyDiIG Qj9g4TswDAYDVR0TAQH/BAIwADALBgNVHQ8EBAMCBaAwKgYDVR0lBCMwIQYIKwYB BQUHAwEGCisGAQQBgjcKAwMGCWCGSAGG+EIEATARBglghkgBhvhCAQEEBAMCBsAw JgYDVR0RBB8wHYYbaHR0cDovL2xhc3NvLmVudHJvdXZlcnQub3JnMCYGA1UdEgQf MB2GG2h0dHA6Ly9sYXNzby5lbnRyb3V2ZXJ0Lm9yZzBRBglghkgBhvhCAQ0ERBZC RW50cm91dmVydCBTU0wgTGliZXJ0eSBBbGxpYW5jZSBJRFAgIzEgd2ViIHNlcnZl ciB0ZXN0IGNlcnRpZmljYXRlMA0GCSqGSIb3DQEBBQUAA4IBAQBNNp87RWu72sDw vhK68zpq/aSMMNUHdZ8YQyjDcYSJlBx94E868MDqbfUVJ+2fUmlycQosxAz+jBxn Y3XmuSxexp2rc6rWwIIH/P0bjrBrkqjIPGYlvT36Sd+DkYVEBe0tSuvN2O7RiF5G G9C4CC/SFfw7g8F1lcrfftA8SB66QbD/XcZBsS1ari/p4ckxydA+pFt56V0wSkhP td2ThX2D5mybDU183CdgB2jKjCNqd+tgoSrBBjjmWrj8+VZBrU/k6ZH0wO5GGsmb ntJyW7rW+AmLZNHZtOgnuQXuBM0tVsRlOdRbtTDqJy4rHrJEm6NavfvCj7i1ayhR JYql2tXK -----END CERTIFICATE----- lasso-2.8.2/tests/data/idp1-ssl/PaxHeaders/private-key-raw.pem0000644000000000000000000000013113766621500021170 xustar0030 mtime=1608196928.938896744 29 atime=1678098071.39750009 30 ctime=1678814321.329955132 lasso-2.8.2/tests/data/idp1-ssl/private-key-raw.pem0000644000175000017500000000331613766621500024444 0ustar00bdauvergnebdauvergne000000000000000: idp-jks.keystore 1: tomcat 2: changeit -----BEGIN PRIVATE KEY----- MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCx/z+h5GJMFzGmFs8Hh+fMGL9p uDq9C6+e0hFIAbHYc6yVSRSp15kdIulwaV9nRn3QlNyXvN8RWob+kXdodVeYDsfCzba7ajIQH0fL jraXxDbda81Sn3hjRGhmnTfGK/dVeVOXz1YZ4m8VInsFVo+q+awduSvMl4nSMJ+ZC82FlgbzuIeF hZHjl6LRtFm9MINYBh/NwvmX/8aNJT5lvqKfbPj321eQYj6umFnO500LopbmT9dnsicFQ25NM0kq N8n6W+ohcQlVAqeyKDk1JT0AfX3hhUOGFmHq7pE+ONNpXvVT52ebTtMivub5tHlMniBr85UNJ8vK zfJebYBTvbFhAgMBAAECggEBAJ1NIrHygEAYW0MZcxqHq3y9/iLysc4xjqF/qdAF12KfT0yayg0S wHh0SvKR3MMLE9MKSyw5uLTAWP6OFYWV9bQmk7j/TVaxEc8Xpb4pwAm9WHMzer9iuOSZJt5QYGLc pfa+gvZtP/0eE+cMksVz6wFBJi8aXq+u2BiN6e059gXvx476O62cMWj0w9wqAkrO5DZDUuyri1bU oN/BPcL+0JM00Mc1RfznrA5WsrrHTUxQZUy3/nDu5vhbC3bOK/t0KVydXJf3Bl/oCL72PZkKzbVl li0RLrg1259eR9jkrvu5hiqAgxcaR07fVGzX01weBX9wWLnXc9+VMCUyI7pJqfECgYEA2kxYFgKM PvBHKT+NvJ+nZWpYiYFR7oopvUYyYWms1F1kehg6Pemdl3RuhB2ZzXKhABSh3/dVQlz7OktlTTXn y6da+BeMYpetNq33nlrObkYZEte2jWl9QuxRE5zenAW+RiHRY+rvtrCOoOpCMtSVtqnf0QZ39NPN SLHy+qcTFsUCgYEA0L0QEKie4kbL3iNDjx9BFQexSTGvPRaPwNRnvNqQAIF5MgeZpsRxIqDF7A1G wwc9q0nCdkHBcCRS4glfnEBomd+k7TA2fiQfLn9+WQ7kfJeyi6xvb8kwHPFR5ZzgfKIIeB7wgK7J mUqoGOvb4T1U/k2RaChU/6pHJI0ko7z8+e0CgYBMavlTCyVJSxe+Ks9VPpZ8/BNuX2TtGlSuO4qb a0DjPqZTz3NkBQnz4QBnI22Z7AzMWGyqWIzyJFaV+5rEwqAYPMetnaC5StuKDrBmMOee1s8kN3ti WZFOAigHs5yCBcisCF6imbW8wGXNkvQFk0Gtph4BsEAB5rswPYsPj7kw+QKBgQCwE2sjwjkUAkgh /3kTl3ect7pyVXjOfOOR8xn2kh76bjy/WO3hYL9WSGvr7F8OUGNSw4tHmbwETn+jr+h4s1QIyEAk 25B74xhybpUzpn5SItw3OaNelkUBhQZiO2yZdUzTlrWktsvThMg7DWmSm9vAD8piI/NfHlGYoX6Q p/B1GQKBgGEzKZjuROFccoPUhoTgY0xZAFlaKBspzelgvfOBg7qxvmjL0ZX82ct0opoL36VB2caQ Zvy17lgvyHU9Dw6RM6j+1kxdTrKQC+6Ow+DGLUwrHlW0mxUfeFHN6NLXGgsYJwC8A75jHh7wdPrl xwHZieb/v+a4XMKZeNmYfrV+MyVa -----END PRIVATE KEY----- lasso-2.8.2/tests/data/PaxHeaders/response-20000644000000000000000000000013213766621500015723 xustar0030 mtime=1608196928.954896876 30 atime=1678098071.497500875 30 ctime=1678814321.445955791 lasso-2.8.2/tests/data/response-20000644000175000017500000000744613766621500021206 0ustar00bdauvergnebdauvergne00000000000000http://idp5/metadata qMli6MfowrcVD5sX9qx5nvZe0lI= elUruTbgjvLHOWnIhphsVxBe2YS6I3+vfafeFYZuVFG0vTsllOlEA7wLx9KOL9mS 6fH85wZX9MhjIInRvGYII8mF0/44Znzs2oja/Fya8RLSYGpLG+ApCycifOrDWzug JsA61l1KjQjb+FBjZDiUoQQPuIPGHjb37DPYo76VMsokmBiMxzmwzoDF9BPutOan 86aKbnisJj1nJELI0ByNYHQ6S7sG37CqyQCOZS4ejLzKLZiabi1kprqvAUNWudJd 823Z3aGeTmAfEqSaAQdN6Xe6Jm2yhKHQViAjWVUHNy3Sv+r8QUeZ2EyrMoLzSchf WbWtCZv1likzLE7wmk774A== http://idp5/metadatahttp://idp5/metadata eybLGqaQGyA4dHn/XVeISNH+52A= sMhV5ZxdTWgIzEOAgUlh5T8vBJMmhDYBXqvDNgCZZ14mhn8ZZAnzmlzuXY6KycRm Ko8RPCcbhkVnTzhDG0osMe9NGhnRSJ0Ra1mO/6lyPJP62z+GSHkQvnkH944nqDEs wFp7NbqwccvbVslCQUf0Dm4leOhWZV6dZFBIR6W755W1nFpgM+AWiIBIUxu9k7TO kq7wXhaXZCKtzpvh60g17ezOR9XuovUf79igPbsR1d7cFaTbhfPknoC2/WDYS+dy JGqf73erEE/oEXCFuUYulZkcUAAtFa/T7CF2nQ2GM82F+p1gogOK3U3f11YZPovD ZBG6A4U7T+8RC3tTemLnWA== _E7799BC7D0C299FABBB7367100656120http://sp5/metadataurn:oasis:names:tc:SAML:1.0:am:passwordlasso-2.8.2/tests/data/PaxHeaders/user2-la0000644000000000000000000000013113766621500015357 xustar0030 mtime=1608196928.962896942 30 atime=1678814326.421984131 29 ctime=1678814321.52995627 lasso-2.8.2/tests/data/user2-la/0000755000175000017500000000000013766621500020705 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tests/data/user2-la/PaxHeaders/public-key.pem0000644000000000000000000000013113766621500020203 xustar0030 mtime=1608196928.962896942 30 atime=1678098071.585501566 29 ctime=1678814321.52995627 lasso-2.8.2/tests/data/user2-la/public-key.pem0000644000175000017500000000070313766621500023454 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1vWTHP3FskzjcvkYBxqW syqWRyGi8hJk9l/5FFngMw0oGGdRu49g9Kbhma1PnLMfhC0dLT4WhpVny/6aUgqg tYXIfTHXbZEzRJr8rJ46XA9/Al29mWxCGjuFLOvyF97rJQcdz1iPx9zUoRu80r2X l63XFTbFEuOSwa2rVJPe6CuG2sUn64QGDvl9b+2LySx0EWl4WT3xNPn6BjLbtFnt TwjAbSAlJIPYuYm2AXx88wEDIncApnr7aaxAnda5MdIOe2IJT2Vm0b6uKwSdZ+jf 1XnZkIWDCYwoDtfBdLQtMxI+dPDALseiwJBIZgvfD/IesJx7iK+v18zh7PRozJtW 0wIDAQAB -----END PUBLIC KEY----- lasso-2.8.2/tests/data/user2-la/PaxHeaders/all.p120000644000000000000000000000013213766621500016531 xustar0030 mtime=1608196928.958896909 30 atime=1678098071.581501535 30 ctime=1678814321.525956247 lasso-2.8.2/tests/data/user2-la/all.p120000644000175000017500000001023713766621500022004 0ustar00bdauvergnebdauvergne000000000000000‚›0‚a *†H†÷  ‚R‚N0‚J0‚ ‡ *†H†÷  ‚ x0‚ t0‚ m *†H†÷ 0 *†H†÷  0c7°þ”S°§€‚ @È“\1‘ÿcÏÌ(LÆOëPCJ!(B {Þ z“îû9s»§j —›?¼™ÐÝ‹ó)B—¼U딉7»ì¥*bÑÀª-»eÖ;Ü|Ýwo*ɽÏõ¿˜Ñ?Üû¢¨(ã~öæ^¥üâ  áH'#ý½·DºKL™&ëÕ¥’îBe™ÞÞÿ4Z><˜2©ã²`:Q R—ùç"r†Ë©M,¬Ê„­þ$¼|#%ƒ3jb(÷;oOïM —1¬Í ’$qàÜ*Ï‚41íyxû´P°Ï+g2’Ë:@ò‘‚OÑ>9åL`ÁŸ’>ðWRè4Ù^&öcZ׋%Át‡¬§pÍóûÆM«iól­&o2Ü)<¬²[þ´Xî#2t¡>JS:~õ±ñižÑD£ïöJ¦ôîg’òu)ÌÒó$«e ÝIHPu­—cÌMòµð>šéôŽŽïÌ\ciþ† -èY&P%]EáE}Auù°h|SQžö6*óTm\..QŸ±Wª¿1{¤k_Ò‚Nêê8NZ3IJÞ'v›Ç%ÖŸGxyŠ`Ç$HÖäÙgËêZ²LÉËOés‡öål®È´¬ȵǔ²?Õc»çfã=`¬zÃ}_–õ®Î×y`cJ`¨c„CíÔ,À»Z•[M¾…ÔXÞ‰£§°^'Úî°èñ\Z s±?àdÕ–#bè¢;ýûÍ¥J2–E>4ý\œDN;}Ñ ¾¦eta! ¡Ü²Ýz¦åšGR·ÔÑ0±Åб?¤bÉmRûŠ¥+vªËäåö8Ó“²ÎÞºîwL¢oLH±ƒsB²¦±ó`¾ñ÷ôg½æ€a®kGÈFôh·žO‡1Ú¢HÁâD»UMÞÄugºØ•òèÜîA¤•ßÄÜ ÖY¸»ë‚ÁNî¯êÓ±óÛp &‚¹1,®âä?ÌÄV8aÈ"!lÌ$°oìÔ,Î1³.ù'v¬« ¬áÇtÇÙúCËPîÞs“óÏ Èô™rØüÝ’=;ä$ú?¢é©HТ—"ÿ-2N‘ÔjÉÓ/Š—°Oõóõ¾µŠç…Ì“­ÔØpœfRµ¬ÏqßXµ|×¶‰šþĭ狾ٴ™öy<µ1ÍR1]Ê}ÀcùPJHÝN$äÉ¥Ñç’‘±ý[_wBÆE}i¦åP;#¨²>¯Ÿ÷p©R_xázÖÊfŽªÜ8=è[jbÊ\†ùŽÙÄœ‹£þ1O¶ Ï «»ÒÓ³ì¡ ÒËKÛ¨Ù1Ejç±ºÕ ìü•rn±<Á–BŸÃËn_«î’iZ]­3VV*Ë÷Þt4_—!»eОômQ`¦Æu«àLra™—`cÆÖª0Ìïð˜3!CBN;æ+ÐsEŒx ³¿A*uO60°æÐ£y"G‘M-8I¤žÑv‹åÉ=¥ïÚRÖx$|6íªivX•û—ö¬äK½0§["]¨=ÕþÊ›ò‘;q-LÐߌ6µÓb/æ:7ÍC‰í¿!½»÷ˆû§¹…q³†VДý½?®VÁñ\ 'qFìŠxè–³žàŸ.yHm…:Øw îPÔŠý/ŠçP#6”ßl ÜA”êm€aâUI¯ÊºIäó ¢››H%qÚ¥j2n¹zy1öi»ÙehqŠîx꙲…mS 0å™Sz-ïO{‡þEËít»)wß4¿y`ôp­—0y.ÝÃí‘N6üZ|)_BDপx,<|ï±Y¥ŽÊyÕ k hå÷8V’Ÿr;ðl|«ßT̓0]ñ! v@\ãÏìòßSÌ¢ÿÓé0õŸ#*¹ÍBî¶ú#¬NéÉÆ—‡"ó2‰Îp¥½¥)¤_ªFH7Ģȭ©iœiúæB ¦s9Fü¯­[*ºNµHf&[Ê…“ ˆdðqß2¨êÏcru>‡s$x9ò@? 7_uêKàCÜò(J¤EL¢6õÛß9„/°ÖG}òâiŒ7õ]K+Wà<$XGv«ç-Pgô™&›\\ah<ò¾ uwqwZò¾žšÀQþÓ”¼ë.X”—{O"{£Ílé?Çj¶î† öüú=›ž”vÀ\ÁGMÔ’˜;Ò¾–hÊÇiæÕT å¤ô/Xæl<õl¸¦4GW·,1^ÄGG.ª,S×jÂkóR­MJt‰ÊìG.Žóûhä¡î^ÞMò¼¦‡ÿmB÷wÿ@{ô!_°:ømÜà½ÿj¼ð^¾­O¹ý<Ô¥É- 7˜ÜïÇ\eØ} 'J,=f*ÿÂõß=®.¶5 |&âšÓ¨å˜QõtTÒŸ½†Nh¯Uh-ûÁ_AW‹" ¡}¢–II‹Aë¶_¨,y›Šœ”Dý.ÝW²¾ ÚN¢-¾óѰ(1h¥å¡I˜Â$–V·Ë¦6pý–JÜŽõq 'm èî²çh^ï¯I“r£6¡8 ²4ÊGÿ'£5‰;Êvˆ5«ã„2ƒ[ÚLÕ5ƒI¯Ð.OŸ4>îOæ/^Û +ƒª¾ä?%%(6~¹ÀF§Z?µ9û¨À"îs¨òRlmf¢òļül…s³ºëžŒâng_‘ CÁ0ÜË) ¼áê"˜™y9¨ €¬õ! ª¨Ý=s“=SP8¿p¬i7iœ¨&˜'¥;ïì…³(ú° *»žRºÉ¥GœqÉOBäÆ>7ú0h’w¼§§“šþ}]õí‡eWYO'OiSžÄ]!”§Þ5þ’e”„úØàï í*¿J]øùÑi´Ä†6y5´µð _ôb‡–Îêæ÷Êß¡Œ7?õ œ¼ô£þá:Ç›ë’eƒ~óÖKÈ^GŽj¥'\êNê›íŸôÂùÐK–·²29w…~ Æô*´™ê Gƒî™Kí¥E×xa8Z®á# ›ÐWMΧ}íäCc†sÔÕzn¦‡œ¬LXO€Îð@ïㄎ°Sö sœgµfºë?'DfÝ+³ÿ„ÙÚb,Yž¸á Äz¾­DÐŒT•!y]œ„ÕÏf&h” œG‘TÑE“ p#>Å2ÁF ø9õö žÂŠ–Õ{ST™~;Z!?³ò·¯Hú$™\>0w6è]@Œx N´°A1¸×ïéÙË!œ-ŠìŒ@Kr[y/ œ™EÐ[0;ÕÌP`›8ëx$WÛ-øei‰z—¶™ÿòòP¬º ì"lÈ«bL6A=Fkf%·¹ïr–V orñŸÙùba3¡iÖñPUÖè« gÂ6[]Ɉ«.âèwsr®]CæÉ m mÙï÷jÓ‡r£ÇXe *íþqmšør²(r± ëë\½ŸùÂŽ¾…Öú/l ÷’Yø¸Q;ˆ´'&¯ÜÛ âã]‹‡¬ GØ묡æ¬WjBÓúÃ,ÈË3ã`!Þi¯q…ú¯¦™¶µðUä ’½)éòê)éI bEê úY–æx²›Œ3åh[Zæ\Ûõý{##Ï}6ÉÊ8l¾ ˆ”W›¡X‚_Ç%%.(K•ˉùxk>ptÕTsè‘}r@‰ö×;û–¨7šÐ‡D:µŽ_¡¯Þc6áÙ™˜³ YŸƒ–ÔŒ@IØ#«-ËÐÕǯëðÛeðg«gM¦.ã…ýqÚ9«³üKÎ Þæ u¡X–èÑe÷I_g’Tĵ†ÊÎlá…D–-•Œ3—e)q¢8l÷LbBJè>û7ãlØæŠŒlÊÝпa5»¾2«j²î(ÎÀèžâ£uÎ;_Äç‘Õæç•Ýüx"¹w-Ⱦü±T²í6©Á+]Òæœm'H:쩳Az•#%!>‚6"y.ËUsV47‰A•üžLÌæR%•uí‹<ðA¿qa½3àžÔ,YÚ/2|àŒ3µ„Æ…›3œR@…ö»?‡‡ë…-L¥Ùñ•ûMÜOÞ?¦JÞqíø‘ä&(l|1ž0# *†H†÷  1vÙ„Õf¼‡§èÅgý/Ó>§_0w *†H†÷  1jhEntrouvert Liberty Alliance test user #2 certificate010!0 +ƒv ñÚY'aoQi§ç‘V*ÙÑé]Æ3Ùè}+lasso-2.8.2/tests/data/user2-la/PaxHeaders/jks.keystore0000644000000000000000000000013113766621500020012 xustar0030 mtime=1608196928.958896909 30 atime=1678098071.585501566 29 ctime=1678814321.52995627 lasso-2.8.2/tests/data/user2-la/jks.keystore0000644000175000017500000001130513766621500023263 0ustar00bdauvergnebdauvergne00000000000000þíþílassoþWÁÑ÷0‚ý0 +*‚逛…Œ§@v™<v/u]eÙû)-@F_Gû4ý,]³Õ®|¡µ¥œdbñÝ1 åCâ þ ½8"§'¿iþÏ5@Ø>¶‚ÎFÞÙ["ödÏÀ2©½ûÏußZ<º7Ú(ÔnïO+¾:åˆýpÆÔ­|zÙ¾{½¹½¢ËÑï19¨Za4pä1n»y®8urWÍš 7à 6yuó+Ê»3 ‹«¿Ù? ÀIöHf·ü›âaÚXD{ã°lÈIìÝ9f;Ýïí+žk¯Åh"íŠþ&“Ê­[ŽlhÆaÃ5 ¯¹ÂMxKåe”¶'7Òv å¬ck, Ãûp×Wî;‘:Õ àfiÒ:›«ÒºHG( Ú‹öÀ®´[´kwv´ì!ªûçç„#5ÒHz]ü&s]ôÇá ÚEûFÛJÊœÃstßyPà§ô™Œ ÿ4K?0¯pOH˜œhhÁ $‚ëH+hù€¤æ ô=ø,Ó :‹BÙ(âÖƒe44*f¶&„â#ßZ7Ž B, UÀD<„ƶ ˜¸f y°5’…S2D¹3’³õ†•Z‡§ÂjØæÓ¨ÍÊ ,ëA^­·æ—ÕW ó~káòŒ¶+­cŠQ3Ÿ°ð¢í÷qf mçÆU{—…æY°> ¢„ùËWuõîhš–Áò¢FRºüP÷†P+î†M’˜ÛÞ}ê­.lVBX.50910‚-0‚ 0  *†H†÷ 0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #210U Entrouvert0 040813104424Z 240814104424Z0210 Uuser210U  Entrouvert1 0 UFR0‚"0  *†H†÷ ‚0‚ ‚Öõ“ýŲLãrù–³*–G!¢òdö_ùYà3 (gQ»`ô¦á™­Oœ³„-->†•gËþšR  µ…È}1×m‘3Dšü¬ž:\]½™lB;…,ëòÞë%ÏXÇÜÔ¡¼Ò½——­×6Åã’Á­«T“Þè+†ÚÅ'ë„ù}oí‹É,tixY=ñ4ùú2Û´YíOÀm %$ƒØ¹‰¶||ó"w¦zûi¬@Ö¹1Ò{b OefѾ®+gèßÕyÙ…ƒ Œ(×Át´-3>tðÀ.Ç¢ÀHf ßò°œ{ˆ¯¯×ÌáìôhÌ›VÓ£‚&0‚"0Uwx§åÄAS2×ÂytƒYgü Q0U#0€ò Uå«‘cøñNìÛû ¯žr0 Uÿ00 U€0U%0++0 `†H†øB€0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0C `†H†øB 64Entrouvert Liberty Alliance USER #2 test certificate0  *†H†÷ ‚ÉcÌ}2¡Ü›nh„‚Çíî(ÛK {HDÙîr¥E{Mû¿'ޝJå3¯9Rœ8ÇmùªF2à„…5p4»2éƒIÓá­?¬ïÐâC…V ƒ+øŠâÍ4?8Ó<9…è@1J*ÊYáoë¶2ŠÒ”$ȼ¨àÙàêwâ eñ9<5‚iŽ‹Jd¸®b¼sÜKQä×EÒa¸°ÊG g/ÞV†G-pSE’i'½yIä±[¡ +¿› éCÙŠ˜¢NF'pPT¸ECPÞ?Ø,}Ã+ —èm¿mÔ®¿‡tWÖ4;ÓâdE8ô¼åï~¢X.509t0‚p0‚X 0  *†H†÷ 0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #210U Entrouvert0 040813103640Z 290404103640Z0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #210U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚á áâ À¥ª’.…l᥅¢ÕåDRXYÑÈóD¬õ•Qûqè UåϾ±Ç£ÜÐg†8nÖÿÜþÓu qI´Û¦.Øo^iÛ܆ ùEÈ 3‡ É˲áÉÀJ\Uâw)‰$ ”¥žæ¤ÎwÅ×û¶MéÍ#/^0àN~ÅeïƒÇA|•Ì•’ÕÍ©–ÍäI±s•#I/®Þv/2 IÙbï들çLR+ÖRq«Ø³[˜œŸ½3ÈäÔrMjYHë+wÓ™:qg|ØÅX“‘»ÃÂÃ.ö¨$±ˆb–=ã(®!ßzð×ßÉMî)Á¹M”C`ô.%2°ØV£‚C0‚?0Uò Uå«‘cøñNìÛû ¯žr0U#0€ò Uå«‘cøñNìÛû ¯žr0Uÿ0ÿ0 U0*U%#0!+ +‚7  `†H†øB0 `†H†øB0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0P `†H†øB CAEntr'ouvert Liberty Alliance test Root Certification Authority #20  *†H†÷ ‚àšS\I«ÃŒ³D›ý€âK®CuË = &Ê*¬%BOŠq1I}dÖ¢j«úÖöwþ\³Õ‘÷FhÔÝÈÑ,þóyý8•Bm›Ç=Šž/6( C‹œÌ1Yإ뎤¡w‘D…*Gè.Äqìýôp5œi'r§Jãð4,Á# ­4:Mþ4i2ÊŽ K˜%ÁDŠYói’|TËÍÛ ¿â¬D91Ðe‚ØýÐÙáòœvûF69<åÁÁ–M²ÂŒ;ÅpÔp9‹sœÊå`êÌ*' [Z@ÄP€* /OVóæ“`ÿf|†öX  8âAentr'ouvert liberty alliance test root certification authority #2þW¿æöX.509t0‚p0‚X 0  *†H†÷ 0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #210U Entrouvert0 040813103640Z 290404103640Z0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #210U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚á áâ À¥ª’.…l᥅¢ÕåDRXYÑÈóD¬õ•Qûqè UåϾ±Ç£ÜÐg†8nÖÿÜþÓu qI´Û¦.Øo^iÛ܆ ùEÈ 3‡ É˲áÉÀJ\Uâw)‰$ ”¥žæ¤ÎwÅ×û¶MéÍ#/^0àN~ÅeïƒÇA|•Ì•’ÕÍ©–ÍäI±s•#I/®Þv/2 IÙbï들çLR+ÖRq«Ø³[˜œŸ½3ÈäÔrMjYHë+wÓ™:qg|ØÅX“‘»ÃÂÃ.ö¨$±ˆb–=ã(®!ßzð×ßÉMî)Á¹M”C`ô.%2°ØV£‚C0‚?0Uò Uå«‘cøñNìÛû ¯žr0U#0€ò Uå«‘cøñNìÛû ¯žr0Uÿ0ÿ0 U0*U%#0!+ +‚7  `†H†øB0 `†H†øB0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0P `†H†øB CAEntr'ouvert Liberty Alliance test Root Certification Authority #20  *†H†÷ ‚àšS\I«ÃŒ³D›ý€âK®CuË = &Ê*¬%BOŠq1I}dÖ¢j«úÖöwþ\³Õ‘÷FhÔÝÈÑ,þóyý8•Bm›Ç=Šž/6( C‹œÌ1Yإ뎤¡w‘D…*Gè.Äqìýôp5œi'r§Jãð4,Á# ­4:Mþ4i2ÊŽ K˜%ÁDŠYói’|TËÍÛ ¿â¬D91Ðe‚ØýÐÙáòœvûF69<åÁÁ–M²ÂŒ;ÅpÔp9‹sœÊå`êÌ*' [Z@ÄP€* /OVóæ“`ÿf|†öX  8â¡DV®7wOˆ€ûµDgSYQ÷˜lasso-2.8.2/tests/data/user2-la/PaxHeaders/certificate.pem0000644000000000000000000000013113766621500020421 xustar0030 mtime=1608196928.958896909 30 atime=1678098071.585501566 29 ctime=1678814321.52995627 lasso-2.8.2/tests/data/user2-la/certificate.pem0000644000175000017500000000274513766621500023702 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN CERTIFICATE----- MIIELTCCAxWgAwIBAgIBBDANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJGUjE0 MDIGA1UEAwwrRW50cm91dmVydCBMaWJlcnR5IEFsbGlhbmNlIHRlc3QgUm9vdCBD QSAjMjETMBEGA1UECgwKRW50cm91dmVydDAeFw0wNDA4MTMxMDQ0MjRaFw0yNDA4 MTQxMDQ0MjRaMDIxDjAMBgNVBAMTBXVzZXIyMRMwEQYDVQQKEwpFbnRyb3V2ZXJ0 MQswCQYDVQQGEwJGUjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANb1 kxz9xbJM43L5GAcalrMqlkchovISZPZf+RRZ4DMNKBhnUbuPYPSm4ZmtT5yzH4Qt HS0+FoaVZ8v+mlIKoLWFyH0x122RM0Sa/KyeOlwPfwJdvZlsQho7hSzr8hfe6yUH Hc9Yj8fc1KEbvNK9l5et1xU2xRLjksGtq1ST3ugrhtrFJ+uEBg75fW/ti8ksdBFp eFk98TT5+gYy27RZ7U8IwG0gJSSD2LmJtgF8fPMBAyJ3AKZ6+2msQJ3WuTHSDnti CU9lZtG+risEnWfo39V52ZCFgwmMKA7XwXS0LTMSPnTwwC7HosCQSGYL3w/yHrCc e4ivr9fM4ez0aMybVtMCAwEAAaOCASYwggEiMB0GA1UdDgQWBBR3eKflxEFTMhrX wht5dINZZ/ygUTAfBgNVHSMEGDAWgBTyIFXlq5Fj+PERTuwR2/sLr54UcjAMBgNV HRMBAf8EAjAAMAsGA1UdDwQEAwIHgDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYB BQUHAwgwEQYJYIZIAYb4QgEBBAQDAgeAMCYGA1UdEQQfMB2GG2h0dHA6Ly9sYXNz by5lbnRyb3V2ZXJ0Lm9yZzAmBgNVHRIEHzAdhhtodHRwOi8vbGFzc28uZW50cm91 dmVydC5vcmcwQwYJYIZIAYb4QgENBDYWNEVudHJvdXZlcnQgTGliZXJ0eSBBbGxp YW5jZSBVU0VSICMyIHRlc3QgY2VydGlmaWNhdGUwDQYJKoZIhvcNAQEFBQADggEB AIHJY8x9ADKh3JtuaJ2Egsd/7e4ojdtLCXtIf0SN2e5ypUUCe037vyeOr5BK5TMC rzlSnDjHbQH5qkYy4ISFNRlwHjQHuzLpg0nT4a0/rB0F79DiQ4VWCYMr+ACK4s00 PzjTgTw5hehAMUoCKspZ4W/rtjKKgdKUfySNyLyo4Nnggep34qBl8Ro5ATw1gmmO AIsSSmS4rgBikB28EnPcS1HkAddF0g4bYbiwykcNZy/eVsKGRy1wU0WSaSe9eUkX 5LFboQorv5sBC+lD2YqYok4VRidwUFS4RUNQ3j/YLBJ9wysgl+htv23Urr+HdIEW V9aPNDvTf+JkRTj0vOXvfqI= -----END CERTIFICATE----- lasso-2.8.2/tests/data/user2-la/PaxHeaders/private-key-raw.pem0000644000000000000000000000013113766621500021166 xustar0030 mtime=1608196928.962896942 30 atime=1678098071.585501566 29 ctime=1678814321.52995627 lasso-2.8.2/tests/data/user2-la/private-key-raw.pem0000644000175000017500000000331613766621500024442 0ustar00bdauvergnebdauvergne000000000000000: user-jks.keystore 1: lasso 2: changeit -----BEGIN PRIVATE KEY----- MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDW9ZMc/cWyTONy+RgHGpazKpZH IaLyEmT2X/kUWeAzDSgYZ1G7j2D0puGZrU+csx+ELR0tPhaGlWfL/ppSCqC1hch9MddtkTNEmvys njpcD38CXb2ZbEIaO4Us6/IX3uslBx3PWI/H3NShG7zSvZeXrdcVNsUS45LBratUk97oK4baxSfr hAYO+X1v7YvJLHQRaXhZPfE0+foGMtu0We1PCMBtICUkg9i5ibYBfHzzAQMidwCmevtprECd1rkx 0g57YglPZWbRvq4rBJ1n6N/VedmQhYMJjCgO18F0tC0zEj508MAux6LAkEhmC98P8h6wnHuIr6/X zOHs9GjMm1bTAgMBAAECggEACIFE5dPAm7JhGW5znexWZBZeRcg160ABEKJxd3Wq4jo2COklmbct jeCAcpUh3kBUEeW7DswzFfYZWj/jmTVkcGovqYxsSqCBF8jOEIJeKsBONSjCVKys3N7YARQAyyL9 yMREUKzfW3gITauMSAZKVi0Boow9NecdKl6Vtc339tWXeDwJQaOeglEre3ulEHpb/TS846EFHi1/ uSgexO4/GvLHVTc0M88PuWaDBIHVu06d+WEoeCgHIUs4JuiMkCMN+kmjZFuYnLNypsEwua/Y2PH3 +TUXVgSAdV79aBA2nnoXnRBZu2D3f3yWMyQZRNSKikiH4QZijmzLvqyD5MHjsQKBgQDy/kUSVTiG Nw4QOmEhnfHt0NzyBybW8UjmWMGNbvLiFlGKA+/wljUr9ILFKQw+n7M19N2CNhGvCsRJ0ce8eTKX 5bU4hQQPTBuja2dU9Mhoxcvf5gMZiLPWKgH8PS9C4c+SOnKIJ4j+7jMqpQ3jhz2+EDOpPmDEW+RQ zD8aC+eRqwKBgQDidyf4l+MH/qcHQhMGV+kHO6O3WhibxnHNaupzlcPYD8Fai7CbuYYbZbtfhFZa cty7HIG3LSEAauqV7tcPm+5Vxf2bLpb0LEhgIK3SYkliWVktLzFNpsW2T+jyCKlHQBxCR1TGBmLJ SxlSTb9ymy90MSMBVA5kvW27u0oh51N3eQKBgE7hwlR4O9g+KR+VhBCgsHfuVLtxHOer/mlgqLyc JtbEPgYazxp/+JTjVExizenKeCfs7Leni8gSK7R3GGsTwRvUYycM70tz/ojnhezrZd+1TkDJ73mr ig3dJzXWOvBwU6z5slKG2w8/Dncqi76wGZgItGydplY4Kn8cPuPat3rvAoGAWqDa0yZdic6EI2hy 2qAFtopMe0zH+lcRJea6iqUNqgKsG0M52ygEniQ5NwFr2WiMIylGU/rwcQ1YccYSNMHvQE4qrpaX fIHYOPf69+2zdnNRN77iGTQ7fTk/fNSwgb4LUQ7gwxq9H9c4+/H3QrMN647admagF/qi1nUeNrEv eukCgYEAv5y4D8rLYbZ+wBrDHOv5bpSLrDtu8U6LayulgECFs7UCtdaCDMI2mD8UPqmYsLzs0wAP 61ixvv9xKPuicroyaaVl+d7uXMZa7qTbF8dXaA2xV2RF9sTn5P1FB8WXbRoG/uaqUI33vPTOgeqD FOS6P9g0WlSXrQtGCRgHQiJM9XU= -----END PRIVATE KEY----- lasso-2.8.2/tests/data/PaxHeaders/sp5-saml20000644000000000000000000000013214114365700015444 xustar0030 mtime=1630661568.530512902 30 atime=1678814326.421984131 30 ctime=1678814321.501956111 lasso-2.8.2/tests/data/sp5-saml2/0000755000175000017500000000000014114365700020771 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tests/data/sp5-saml2/PaxHeaders/metadata.xml0000644000000000000000000000013214050545511020022 xustar0030 mtime=1621281609.267307905 30 atime=1678098071.557501346 30 ctime=1678814321.501956111 lasso-2.8.2/tests/data/sp5-saml2/metadata.xml0000644000175000017500000001206014050545511023271 0ustar00bdauvergnebdauvergne00000000000000 MIIDnjCCAoagAwIBAgIBATANBgkqhkiG9w0BAQUFADBUMQswCQYDVQQGEwJGUjEPMA0GA1UECBMGRnJhbmNlMQ4wDAYDVQQHEwVQYXJpczETMBEGA1UEChMKRW50cm91dmVydDEPMA0GA1UEAxMGRGFtaWVuMB4XDTA2MTAyNzA5MDc1NFoXDTExMTAyNjA5MDc1NFowVDELMAkGA1UEBhMCRlIxDzANBgNVBAgTBkZyYW5jZTEOMAwGA1UEBxMFUGFyaXMxEzARBgNVBAoTCkVudHJvdXZlcnQxDzANBgNVBAMTBkRhbWllbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM06Hx6VgHYR9wUf/tZVVTRkVWNqh9x+PvHA2qH4OYMuqGs4Af6lU2YsZvnrmRdcFWv0+UkdAgXhReCWAZgtB1pd/W9m6qDRldCCyysow6xPPKRz/pOTwRXm/fM0QGPeXzwzj34BXOIOuFu+n764vKn18d+uuVAEzk1576pxTp4pQPzJfdNLrLeQ8vyCshoFU+MYJtp1UA+h2JoO0Y8oGvywbUxHioHN5PvnzObfAM4XaDQohmfxM9Uc7Wp4xKAc1nUq5hwBrHpjFMRSz6UCfMoJSGIi+3xJMkNCjL0XEw5NKVc5jRKkzSkN5j8KTM/k1jPPsDHPRYzbWWhnNtd6JlkCAwEAAaN7MHkwCQYDVR0TBAIwADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFP2WWMDShux3iF74+SoO1xf6qhqaMB8GA1UdIwQYMBaAFGjl6TRXbQDHzSlZu+e8VeBaZMB5MA0GCSqGSIb3DQEBBQUAA4IBAQAZ/imK7UMognXbs5RfSB8cMW6iNAI+JZqe9XWjvtmLfIIPbHM96o953SiFvrvQBZjGmmPMK3UH29cjzDx1R/RQaYTyMrHyTePLh3BMd5mpJ/9eeJCSxPzE2ECqWRUapkjukecFXqmRItwgTxSIUE9QkpzvuQRb268PwmgroE0mwtiREADnvTFkLkdiEMewfiYxZfJJLPBqwlkw/7f1SyzXoPXnz5QbNwDmrHelga6rKSprYKb3pueqaIe8j/APNC1/bzp8cGOcJ88BD5+Ny6qgPVCrMLE5twQumJ12V3SvjGNtzFBvg2c/9S5OmVqRLlTxKnCrWAXftSm1rNtewTsF MIIDnjCCAoagAwIBAgIBATANBgkqhkiG9w0BAQUFADBUMQswCQYDVQQGEwJGUjEPMA0GA1UECBMGRnJhbmNlMQ4wDAYDVQQHEwVQYXJpczETMBEGA1UEChMKRW50cm91dmVydDEPMA0GA1UEAxMGRGFtaWVuMB4XDTA2MTAyNzA5MDc1NFoXDTExMTAyNjA5MDc1NFowVDELMAkGA1UEBhMCRlIxDzANBgNVBAgTBkZyYW5jZTEOMAwGA1UEBxMFUGFyaXMxEzARBgNVBAoTCkVudHJvdXZlcnQxDzANBgNVBAMTBkRhbWllbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM06Hx6VgHYR9wUf/tZVVTRkVWNqh9x+PvHA2qH4OYMuqGs4Af6lU2YsZvnrmRdcFWv0+UkdAgXhReCWAZgtB1pd/W9m6qDRldCCyysow6xPPKRz/pOTwRXm/fM0QGPeXzwzj34BXOIOuFu+n764vKn18d+uuVAEzk1576pxTp4pQPzJfdNLrLeQ8vyCshoFU+MYJtp1UA+h2JoO0Y8oGvywbUxHioHN5PvnzObfAM4XaDQohmfxM9Uc7Wp4xKAc1nUq5hwBrHpjFMRSz6UCfMoJSGIi+3xJMkNCjL0XEw5NKVc5jRKkzSkN5j8KTM/k1jPPsDHPRYzbWWhnNtd6JlkCAwEAAaN7MHkwCQYDVR0TBAIwADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFP2WWMDShux3iF74+SoO1xf6qhqaMB8GA1UdIwQYMBaAFGjl6TRXbQDHzSlZu+e8VeBaZMB5MA0GCSqGSIb3DQEBBQUAA4IBAQAZ/imK7UMognXbs5RfSB8cMW6iNAI+JZqe9XWjvtmLfIIPbHM96o953SiFvrvQBZjGmmPMK3UH29cjzDx1R/RQaYTyMrHyTePLh3BMd5mpJ/9eeJCSxPzE2ECqWRUapkjukecFXqmRItwgTxSIUE9QkpzvuQRb268PwmgroE0mwtiREADnvTFkLkdiEMewfiYxZfJJLPBqwlkw/7f1SyzXoPXnz5QbNwDmrHelga6rKSprYKb3pueqaIe8j/APNC1/bzp8cGOcJ88BD5+Ny6qgPVCrMLE5twQumJ12V3SvjGNtzFBvg2c/9S5OmVqRLlTxKnCrWAXftSm1rNtewTsF urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress Example SAML 2.0 metadatas lasso-2.8.2/tests/data/sp5-saml2/PaxHeaders/private-key.pem0000644000000000000000000000013213766621500020471 xustar0030 mtime=1608196928.958896909 30 atime=1678098071.557501346 30 ctime=1678814321.501956111 lasso-2.8.2/tests/data/sp5-saml2/private-key.pem0000644000175000017500000000321313766621500023740 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN RSA PRIVATE KEY----- MIIEowIBAAKCAQEAzTofHpWAdhH3BR/+1lVVNGRVY2qH3H4+8cDaofg5gy6oazgB /qVTZixm+euZF1wVa/T5SR0CBeFF4JYBmC0HWl39b2bqoNGV0ILLKyjDrE88pHP+ k5PBFeb98zRAY95fPDOPfgFc4g64W76fvri8qfXx3665UATOTXnvqnFOnilA/Ml9 00ust5Dy/IKyGgVT4xgm2nVQD6HYmg7Rjyga/LBtTEeKgc3k++fM5t8AzhdoNCiG Z/Ez1RztanjEoBzWdSrmHAGsemMUxFLPpQJ8yglIYiL7fEkyQ0KMvRcTDk0pVzmN EqTNKQ3mPwpMz+TWM8+wMc9FjNtZaGc213omWQIDAQABAoIBAEPj5keHzWdBqiXX 38WnlPgv+M9afndCjDANTEYoh14OIUjWzlIe/ufd6HLkrVA89hkwgQbewbyQOT2C YiSlQLl0PlKMCTIKIzVHD07HvXNTAwykEqNfTZChSYEa1/Ixre+MXvugF8nwdKxk 8xN0qXTQF6OXeVYvQNAAdng743YON4ubqKlEezIwnfG/jcoZrGkiTpx+k1JXJsZN 4dHKFP12RRhUTGjaOkBo41w8GNKQLFpy1vqAOYMyi1SJcrwpAu3H0iQug9SylQaM bFjt8j/m13gu3zXIJbi8xbyg3nqpxl9dxcZG/cDA9z2tLu/h3G3nPq7CXvkZxmjl ePvOCwECgYEA9zbwYMtd8tT3PHtrCtjwkfxV0dvMmfNw/rRT4ShWtKLmgX+K9nz/ T4qpbehz4z7OvsLjQ6Bt6wjMNMw9SEBeEMyDVTpmzSD2PowARegmeLX4CsilqHHl /AMYUtywEQ2f65/CWPiMIt8mLnEyJ/dsyVLpuzGUNNt34Yaqpu2qXnUCgYEA1IUy PObmTh3I8ZyESyGhbu2TYs0A8Zy6eTIAv0ijOIpmUykzjE5pR9sB3nYEd4GTHPEv hF6SWfNIDDr83TqThJYzkFyXMCxiVLH55U42wlsvwp4jTnOI3K/7Y7U/lEmBlgcl JbIIv1t9okg3+Kuu4i7iB6JR89cSO/Wfcdu/c9UCgYAHE5eF7cxeqyH4pT/HK7aX NzXtr/EHZySQ5fCQvWrd+NvIUTJVI/ba/AklkEXg92dLpqCCyxDabYIK8N3AN7d5 m6EWy3kt3geueqt3VNHlGrBi/qNfUwNWV3BWzuJrWox9XjFeAp9gUCrzoWHiKv7+ NFVkemLXsICaABTaemsqEQKBgQDJJ4n1u1gieG7Kwqs1sg9rP9RRoFlUWFTogjvS 0p4r1lQkQstX8qAUM2gBeROhSjRFIMUpNZqxKWT4rpzJibg3tzP3YKx6HIi2Qf+W 3AFY1ZbPT397sj/JI4l/Rv93DFxr9TdkBq/g8GhqQpE3/sj5rgaj0zBe7SOFPWg+ DRGaQQKBgEEcSF5KmpIHnhi3WlfGiEtx3kcD63orKME0YYA5BM6wnmRT4QiSw+qj i7ljrKGSbmdMFC3ArM42/k2lXYpVLsYWmyaRYSgbdowxLM1XxDJMFIPR2uG6N+vi HzWkRxi2SXKU42vfs5eA0itHvQP2DfUx8VuvtwVbOxDGgntYia70 -----END RSA PRIVATE KEY----- lasso-2.8.2/tests/data/PaxHeaders/user1-la0000644000000000000000000000013213766621500015357 xustar0030 mtime=1608196928.958896909 30 atime=1678814326.421984131 30 ctime=1678814321.525956247 lasso-2.8.2/tests/data/user1-la/0000755000175000017500000000000013766621500020704 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tests/data/user1-la/PaxHeaders/public-key.pem0000644000000000000000000000013213766621500020203 xustar0030 mtime=1608196928.958896909 30 atime=1678098071.581501535 30 ctime=1678814321.525956247 lasso-2.8.2/tests/data/user1-la/public-key.pem0000644000175000017500000000070313766621500023453 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwbZbaH1dGgWBoxrq+l1D 5rcA/tyFakIjpgcmKABIZ00Ts9Av/472OMYPpOdfwkD3EmVWibmxrzXXVRSkI/+O 5APHAb66fGv8FK18U/v3Wchh/i57Oaaa5l6j97WokSnJgj+Egxcw0t2k5CmmEcO0 H/HNb6VuS1Lm3z3cFgmJHxtByMOY22Soc6sgKW4HMKP0DLF08ZZjh9j568R3WlI9 /MAQ4lD2005hUMm/vpCgWYo3lS/PgEwzmyZcrWIa9WLY6XrH/jf2vXF/XdEnyPvA fFeb8Tl74a68l/OZsXpqwmHDlD1dCKuJpEuEGQBqEYH1VBm0Wx6ds1mW5NUmKcbp PwIDAQAB -----END PUBLIC KEY----- lasso-2.8.2/tests/data/user1-la/PaxHeaders/all.p120000644000000000000000000000013213766621500016530 xustar0030 mtime=1608196928.958896909 30 atime=1678098071.577501503 30 ctime=1678814321.521956225 lasso-2.8.2/tests/data/user1-la/all.p120000644000175000017500000001023713766621500022003 0ustar00bdauvergnebdauvergne000000000000000‚›0‚a *†H†÷  ‚R‚N0‚J0‚ ‡ *†H†÷  ‚ x0‚ t0‚ m *†H†÷ 0 *†H†÷  0ži1ç=€‚ @úèoŸÑaF½=Vî3%–NŽ5䳪ëžxïN`AÛk¿à·:üå℃µúDÏt‘q‹]Šô’5ÉÉySM Ðk 7%h@Ï7}»ëN¹Ñ+ËÜtq,ɨ±òmK r,\ž äË;yêm£h]2Iwë1P%M'èAH{rTCÀ?ÍþXõ]•];Ú~+ߦ³z.—vP.WšñJ•8¹Œ?s+0,^»ée/‰Þð|á+dðûá"GBÙ;””È=ã.]Ç+dJжdzˆäS[ª·-ÖöìrÚ–ŒÎÚ¹ã®ßDW`RFD ¤æª³ëa=îå=~gù<<÷ã}¡Ò¯À(+.ýÚÍÜþQ â%M ·§-] <(qÅ)vó„Šô>éÍ©Ëü¿Çj`FŸ>|Ð?lMó6l‹7<.z?X0 V-ؘ*å©\LsÐJÐÝqŒÁžøwr ó›Ñ­J¯ÎÓVš#Ÿ°AMðˆÅÑ6l¨†WÕÞTw¢üÜÄ(PG:âõÕœ@ᜱžPËÝ>oÅ€Œ[,£ûSŽœeë,nü%d}8›¯b°e!ænìÉÓé“'s•xŒœÍ6§&Ø‚®ô‹½£f¦# ;«ìˆ¨9 QϤ°á.ðÚl^]ã¬4ôSïèÃ@¦T?>À~Lh3.úæ55rÈ1ÂÂEÖªˆó@G ‘‡6†‚5¶·V}ÝIåk=i™¿Žïfÿðn‘vRg;2"ðI²ÃÑDµ/…ª©“ëf–¦Äýt-»  {t4Ð]«ØÚ›×†nØÑ¨ú¿5À8öˆ 2”ô@ï.Ǽ״©»^ºDE1àž<ñÏŒs‰}?w6Î|OG*d ]”p!Ïx=l!Üz@#'v¤ÝVÍ]Bñ‘œÆÛd_—!I¡4æù0´.zš®rÊë§.LïçðÊ{¥óŠÝ¡Õë]¼hù?ZúAº¯¦´bÒZÌUVý‡t`ƒˆ…ˆ1G[™ðGP£WÍsJÞpC‘5P ªIv°G¿MÉܶ!Æm7‹hFï·GÔÏþ‚Qɽ]‹\÷Võào÷• ^¯6¾va/­~’ ””#ö9­"âT­bšªç.TŸín|4k8»£0ædyϰèEM};Oq…L5K—(â.Xz4ÑIE;ÅKçÄéEÿ­ÞÝ8ÎÁäüñˆø:Ù„“Å0qѶœºÊq? ÛrhœûÞwHÓX ßÚѬƒ#¤Õoœg‹:ïEHß*ÏUêÞ¼\kÿF„¹ƒëöÐÿ7 ôyi4Üð |¦0”`“+ô„ê- Êï@äÝî  óP¡êZçR Œu¸Æ£<’¢Q´"/¨3<,kÇHé_ìh9Î $ßAÔáÇ*(séZÎÖ"»þo«)¨_4âQhrÍrj0e^hîŸg-QÍH•±§ôz­P_•%ä'P\!µ˜¥#A9sÏÛm¨:üHd+ý/,nÔ,iÑ‹»ÍÜ÷DÊ8ç©;gpz†ÕlìE§ l%_^xa‹Æò¤vo9ú*Ÿ‘·ú!îÒùÃ7yú~ˆ³ÒÒ| ®Š-6¬¢?¾}íé$‘¿Û¡$ÔD½'nï~ 7£[Wh±”™Âð?6÷ïÈï(í@4»£ªU®2“Q793Î|jå"ÊþoÅ”^wÓýÕ ¼å“±@™1AÞ8òedµ×O#_€—k¨ÞÕp;_–T÷eø)æÀGþ½#v ÒÜÁpë{(Àìô÷ï©Ð`S ¶{›Ž]™ƒì󸆺©Ú¼0µ÷Aµ³¦U4bÍ(U½¶…¥µ—5×ó@&{}ÞŒ/÷îÃÃ\®¥³pSÆÑ©L¦Iw×i±ö4½D0Ù{ãÙ æÑŸd‡¦ÿ„¨º1?š6>¦.²|3¨Å°ããÒ&ç\µþìÇ»½ô#˜<Ùv”ñR‚Z`Ë¥:Ùšb†Ér*®5D³i"-=„²{âÓ×}¦HSÎ^L;·’ìjIcT¡‘üHÆtÁåNJ$™SaZ؆>Ël/#ê”ȉ.ŒŒÃY`ò™u¹ ø– ÝáÒŠ“˜»¸Â¬¯¨?"‹ø”6ôÙ ³è§­/› ~Hî¯Þ×"˜ü³î•„½ »k) Ù¾æß„XÛVQtîÖ#W¬­‹q›¼ýÑòÿ Bjò<ÎÕI~¨]æYï qð¡ú³£oÍ®±Ç¨m1RøÍvˆ…¸´½Dðšî±KÄZo-ÿ»%–¼F™5;$Ï0XJ± R<á›XÞ€&YvÝt€ˆ¢Ó!ÃÀRnß“‹}!”T½Rõç“RuÅäìnª¥zé¨ñ9÷ÿ›î°]¢¿AD1<0:Äf³är¸”æÄÔVÖ·ŽÖ;lfÈ÷'Ub L‹JÀ6$TP –se‹û-"Øy>mÚI(íÓ2äœÓ꺩Þò‡q¨TÉ÷ÌØùS°†¦*âÙ­Ê™}#ofư‘-åRªóŽR4-*5æ&”B¶øy žñDÏLYHR¤:Ÿz¡¢°/Uj;>¹åðh„YXbR9$t2;B0Ž?„[\ÝÖŒ#v t¼ÎÀ굓-VŽ7õóLŠ1B`ô ÞþÕ׳Ѕäÿ֫ŶáÝ+2½àÚÄk õ;0=%‚Ëa¿qµ?¿”ØDt>Ȣǫ=š>&Ò‰|ñKLë…ø°K‰èÛ\ådý'»8nÙÈÞÓ3ËŽéå29÷Oi¸g‘kÙ¢­¿ƒx#Ë8<Ì}DzÙ4ö†™ÚdS,‚|›èïßu@Ž)žÜnøëFÒ)Þ@•qÐí±ßy¡ °+8O€©HdX$K?« ã_+%£ãÈR÷5]=Ò=”Þ93º«©š´E½¥ŒJEëü3+Kî7™®~YñĪîˆ#—¤ÄâÎC– ÷îK 5…E<þÙIíd>rNP'€D[ÈÌLóÞGó7„¤öt|kA­ñކÄD£.}5~[âbôÔjmç\ap´ u-ëT¶ðNÙ4ÕÓú6$EX(Ð3ÏVÄNæí†d2uìî–0^Ø×±”³IU‰BMívø2pónd9Mn2dÎA`œ¾Ü=YÁ!)ïÿ¡eîe†qÁú`*¦ ¶ê‚vjæcè¬ÇÓιԛ”ÛÑòýBC~0vhîæÒ§&I)QÐÛP8Ò~Í6Üž~SNkl‚igl€ûÍQ6D{‚°ï^È;%>•pÉy { \aSƒ²’dC¬^ÏjVW‚†í­¾ÛÚ‘§§Šu’õÐ4Óp$§N@ý‡( ,ÁVÐ5®ÅLG™þ1s=µGÍ+ª²AnÆn!/ó×)nɝׯµÑ+6cg¢õNjý*°Y8zx±jË H-Ì6hÇM|U…œÆãô∠‚<78çs-V°[<'Ü¡+¹ŽIŒË÷÷Û87©±2T`gpdÈŸYnë¼Ï¬¥&ËBY˜'ÞŠ5 †hámcÛ¸5X½ÿ <9x‹‡±&צ&å ûkÐàOØj–à*?gÉ 1ŽNpF£@´’téÁ¦Ã¦ú'Åt*,ªŠJâïš‹•Ô{2çÚýsñÍV5û”ê÷ué­»<¸‡®ŽÛwZ`º£_8˜²àwÖ“^$ÚdL·„uä4^,~°/xF~HŽ ÞõmlJê»È X•ºvÉy¸ÃÎèDIϹpƉ=›éâbxP\0:B8^¯8t'âåù—R'£&è0™í Ö±ƒWY¿âÓ¨ÿÕž$ꉪP6†Wl$rYö‡¡&N ð`ÀÛ嬠ÝûäAáì"Û*{Ò0…â„6lmÏi'•§É7rœŽ\Áˆ¾¼jð3fëRBbR¦´ï) S´Û¿¥­ ¾ßð<°†bG1É­¶þN> +V^§ ÝÖ—Ö÷ÆÛ×h–­)o 'ëθÊI˜vÄ`-‘.}'‰B"mšâ¾í¡à=Utje¢¯9Fj@~]™!-¨¾”Ý^[ð9¥–¬j°Tþâ„{âí aÃéò ÷„ÿP^~1ž0# *†H†÷  1 F*ÎBª³<¬¼OyÓ1Ì¥0w *†H†÷  1jhEntrouvert Liberty Alliance test user #1 certificate010!0 +Œï@ ½×ÖåäÿŠ„e戨z¥wè•¶¤ÏEê9lasso-2.8.2/tests/data/user1-la/PaxHeaders/jks.keystore0000644000000000000000000000013213766621500020012 xustar0030 mtime=1608196928.958896909 30 atime=1678098071.577501503 30 ctime=1678814321.521956225 lasso-2.8.2/tests/data/user1-la/jks.keystore0000644000175000017500000001130613766621500023263 0ustar00bdauvergnebdauvergne00000000000000þíþílassoþWÀe®0‚þ0 +*‚êsx°®Õ@Ê-´ì”6æâg® l'#(…¸UZ<¦'_ )Œ !SUíü¬oa|Ö®o(yƒDýNürþk¾+Ö »(è¬[‘Z¤ÈIm¾¤uO¹ËwñäžÓïÓ}E)ÑUþà-‰güÃþeÒ.cÈ, äpz¢ùpÆÒ+Ü©ŠÃü0ÜÌ-©°9 ÃDZ|ö.–}I®O0å ¹‡xc^{¿£«ýD¸Hì£fü\xSú°BEЛö ë $Jx_§5â%årHkLÖƒo±V‰ü­tÁƒ*G^D¿cz߬¤S×ù¦¯çÙ)؉8AÒЈ±Bp#µ½xr ˆ–á¯øîàŒhЕ°l籕y_ãÆ§ã·{RípLJÑÜ Ô…pæÖ‚Ðï7öï“ᦃ"õósCŠ"‰‘”ÿå!™Ç~,aS,Ï…¬¸_¼cßÒ´ÉsP‚ãT+æ=n¬:™+ß:a"_ŸÊ„±m bö|Qª†”8¦Gù?¼N ~§;çq Ð¤¡¯ŽåpE|Y‡4ñ:5&ôîX;!qœ_¢œ$âÑDé0¼æUš(Ó@ÂÑNç[–Q†—(vl[LÓ¹÷Ý[¨›!VyÏ^¨ð¯o‘F!šVNOîSe®8ÅäÚV ZÉß5’µ %ã#5û?óçÔ ±š%X.50910‚-0‚ 0  *†H†÷ 0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #110U Entrouvert0 040813104423Z 240814104423Z0210 Uuser110U  Entrouvert1 0 UFR0‚"0  *†H†÷ ‚0‚ ‚Á¶[h}]£êú]Cæ·þÜ…jB#¦&(HgM³Ð/ÿŽö8Ƥç_Â@÷eV‰¹±¯5×U¤#ÿŽäǾº|kü­|Sû÷YÈaþ.{9¦šæ^£÷µ¨‘)É‚?„ƒ0Òݤä)¦ôñÍo¥nKRæß=Ü ‰AÈØÛd¨s« )n0£ô ±tñ–c‡ØùëÄwZR=üÀâPöÓNaPÉ¿¾ YŠ7•/Ï€L3›&\­bõbØézÇþ7ö½q]Ñ'ÈûÀ|W›ñ9{ᮼ—ó™±zjÂaÔ=]«‰¤K„jõT´[³Y–äÕ&)Æé?£‚&0‚"0UBíâ$7€ÁL¬C¡ý0ϹÝ´0U#0€=QHÜ3÷Â4ïØþ$Ò¿ØZˆ0 Uÿ00 U€0U%0++0 `†H†øB€0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0C `†H†øB 64Entrouvert Liberty Alliance USER #1 test certificate0  *†H†÷ ‚diøQ'Hæ£mÛ(SÅrÝ›vÁ϶,"Ò˜Æ!ýzÊe𷃘?§B|ж³ÜòÍêïÞ¡ Fe—­Zlzøâäè¥:Þþ7®>ðá˜e¸)§)®‹°Ÿ³¤¸ò¡¯åìzÇ©v©²‡LxÝ a×S´Ï»ÞkÄŠ%ÛÓ[ÿ¹’KhöTÌ–„‚ù[¹É –~~q¢™CªæÚ†6 hàöXf“Cö'ñAW.±°ÔÁOšT~õrã‘oƒ3þE$Þ8Ücs* þK£Éjú¨Jù¿Ñ:œKÔÍ_DÕÞÊÂÈk:λïjÒÒSÁî÷îX.509t0‚p0‚X 0  *†H†÷ 0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #110U Entrouvert0 040813103637Z 290404103637Z0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #110U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚¼½PæôÝŠ¹…¨•KÎÈYÉñbKèËFG¯œæ¡-aòÚW¦äô×?}Ø8 âvO•“žä'µ œÔ JpF!iuÝf°5lϾ-o 9ºÙËÄ?^s_®ì([xcÑ«½æ ÚÁ‘3¥W]O(µΩ®‡§jy¢'h¤ … RKsÇ€ íUD½š†8XJKõžY[çmèv„‰˜>Ð}Äf-Ô~a˜x“ÂhA3Ÿ·AuIÑMgx›Ry-ˆoê {Œ‹":6l£5dfüº¥_‰`K„Üd=ž#QºËýƒa l¼ŒŒêšYÝ3ì¦M$«ç Jæ"K>¡T MÅt×VWC{&74 ÍÅŽÚëZhòîÎS™Å”†G(9¤»ä3tÖíú”´Ä ÇžAü/Æ0 p‡Bîô˜ Û0ÑM;œÊPÿßX—wcÑHý1Ünb„Û5®²’úø”ü§¤·[A;_tæ7>Ko„ vOt\|·Ú3¶ˆ¦o(`ïá?LbÁÏ ¹¨i}ÅúzÞðAentr'ouvert liberty alliance test root certification authority #1þW¿ÕƒX.509t0‚p0‚X 0  *†H†÷ 0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #110U Entrouvert0 040813103637Z 290404103637Z0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #110U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚¼½PæôÝŠ¹…¨•KÎÈYÉñbKèËFG¯œæ¡-aòÚW¦äô×?}Ø8 âvO•“žä'µ œÔ JpF!iuÝf°5lϾ-o 9ºÙËÄ?^s_®ì([xcÑ«½æ ÚÁ‘3¥W]O(µΩ®‡§jy¢'h¤ … RKsÇ€ íUD½š†8XJKõžY[çmèv„‰˜>Ð}Äf-Ô~a˜x“ÂhA3Ÿ·AuIÑMgx›Ry-ˆoê {Œ‹":6l£5dfüº¥_‰`K„Üd=ž#QºËýƒa l¼ŒŒêšYÝ3ì¦M$«ç Jæ"K>¡T MÅt×VWC{&74 ÍÅŽÚëZhòîÎS™Å”†G(9¤»ä3tÖíú”´Ä ÇžAü/Æ0 p‡Bîô˜ Û0ÑM;œÊPÿßX—wcÑHý1Ünb„Û5®²’úø”ü§¤·[A;_tæ7>Ko„ vOt\|·Ú3¶ˆ¦o(`ïá?LbÁÏ ¹¨i}ÅúzÞðJ ¨’û´{£ý,Í6Úú˜‘Œ†lasso-2.8.2/tests/data/user1-la/PaxHeaders/certificate.pem0000644000000000000000000000013213766621500020421 xustar0030 mtime=1608196928.958896909 30 atime=1678098071.577501503 30 ctime=1678814321.521956225 lasso-2.8.2/tests/data/user1-la/certificate.pem0000644000175000017500000000274513766621500023701 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN CERTIFICATE----- MIIELTCCAxWgAwIBAgIBBDANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJGUjE0 MDIGA1UEAwwrRW50cm91dmVydCBMaWJlcnR5IEFsbGlhbmNlIHRlc3QgUm9vdCBD QSAjMTETMBEGA1UECgwKRW50cm91dmVydDAeFw0wNDA4MTMxMDQ0MjNaFw0yNDA4 MTQxMDQ0MjNaMDIxDjAMBgNVBAMTBXVzZXIxMRMwEQYDVQQKEwpFbnRyb3V2ZXJ0 MQswCQYDVQQGEwJGUjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMG2 W2h9XRoFgaMa6vpdQ+a3AP7chWpCI6YHJigASGdNE7PQL/+O9jjGD6TnX8JA9xJl Vom5sa8111UUpCP/juQDxwG+unxr/BStfFP791nIYf4uezmmmuZeo/e1qJEpyYI/ hIMXMNLdpOQpphHDtB/xzW+lbktS5t893BYJiR8bQcjDmNtkqHOrICluBzCj9Ayx dPGWY4fY+evEd1pSPfzAEOJQ9tNOYVDJv76QoFmKN5Uvz4BMM5smXK1iGvVi2Ol6 x/439r1xf13RJ8j7wHxXm/E5e+GuvJfzmbF6asJhw5Q9XQiriaRLhBkAahGB9VQZ tFsenbNZluTVJinG6T8CAwEAAaOCASYwggEiMB0GA1UdDgQWBBRC7eIkNxuAwUys Q6H9GzDPud0CtDAfBgNVHSMEGDAWgBQ9UQFI3DP3wjTv2P4kGNK/EthaiDAMBgNV HRMBAf8EAjAAMAsGA1UdDwQEAwIHgDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYB BQUHAwgwEQYJYIZIAYb4QgEBBAQDAgeAMCYGA1UdEQQfMB2GG2h0dHA6Ly9sYXNz by5lbnRyb3V2ZXJ0Lm9yZzAmBgNVHRIEHzAdhhtodHRwOi8vbGFzc28uZW50cm91 dmVydC5vcmcwQwYJYIZIAYb4QgENBDYWNEVudHJvdXZlcnQgTGliZXJ0eSBBbGxp YW5jZSBVU0VSICMxIHRlc3QgY2VydGlmaWNhdGUwDQYJKoZIhvcNAQEFBQADggEB AGRp+FEnB0jmo23bgShTxXLdCJt2wRDPtiwi0pjGAiH9esplkPC3g5gGP6eBQnzQ trPc8s3qw6+QGd6hDUZll61abHr44uR/DuiBGKU63v43rj7w4ZhluCmnKa6LsJ+z pLjyoa/l7HrHHKl2Ex6psodMeI/dDGHXUwK0zw673mvEiiUb29Nb/7mSS2j2VBAY zJaEgvlbuQXJAwyWfn5xopkGQwKq5tqGNiBo4PZYZpND9ifxEUFXLrGw1MFPmlR+ 9RN/cuORb4Mz/kUk3jjcY3MqDf5Lo8lq+qgVH0of+b/ROpxLHdTNf18IRNXeBcrC yGsDOs6772rS0lPB7hX3Hu4= -----END CERTIFICATE----- lasso-2.8.2/tests/data/user1-la/PaxHeaders/private-key-raw.pem0000644000000000000000000000013213766621500021166 xustar0030 mtime=1608196928.958896909 30 atime=1678098071.577501503 30 ctime=1678814321.521956225 lasso-2.8.2/tests/data/user1-la/private-key-raw.pem0000644000175000017500000000331613766621500024441 0ustar00bdauvergnebdauvergne000000000000000: user-jks.keystore 1: lasso 2: changeit -----BEGIN PRIVATE KEY----- MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDBtltofV0aBYGjGur6XUPmtwD+ 3IVqQiOmByYoAEhnTROz0C//jvY4xg+k51/CQPcSZVaJubGvNddVFKQj/47kA8cBvrp8a/wUrXxT +/dZyGH+Lns5pprmXqP3taiRKcmCP4SDFzDS3aTkKaYRw7Qf8c1vpW5LUubfPdwWCYkfG0HIw5jb ZKhzqyApbgcwo/QMsXTxlmOH2PnrxHdaUj38wBDiUPbTTmFQyb++kKBZijeVL8+ATDObJlytYhr1 Ytjpesf+N/a9cX9d0SfI+8B8V5vxOXvhrryX85mxemrCYcOUPV0Iq4mkS4QZAGoRgfVUGbRbHp2z WZbk1SYpxuk/AgMBAAECggEBAJvwx0kokoheImxBQSRnbEAQ1nZU4/oUYEpJuwe8ooy2WcQJNnqO hdxSZUmlEUt5rOxcM/wPRuD7gOt3AGQSWN9pwwy+k7WR4I5s0odxcUAPtgM/O+e/HTeSvICu9pJV h2iY5X36b01xLEqY1J28ZAbLS0wzasSsajsQu1nqNz6X9IBuJEoNpBTsg50VAgWYzwz8YSL0A68m xXlgNEsIcnP6IE6+NXbAnHaEP6ZOfOIjO1ioCkivZY84TJzPEV3lP7got3Tvp8re5ok65Ge0h+7A QsSpcYYIqbxFr+sBUEwoE3tI5l17o87ELABEKDUmqpifMQu4ov3HD/2MSoj+o2ECgYEA9Q4y9TcB 3DizDcVMlYtYtL0E8jgGc29pyTCB+UqngNWz92e1SFY3k8ARirftER7tG9bS4QvpIuyUvqu0o3jY sBi0+yc4p5dwGYpjZxOUSbWDfTFzousW7WgQ1SMqgHnYZ5WScDqePtnxbNFrHG05ROYozKdWHUTf qumPXm3px5kCgYEAyl0ihEGXsAuRhRBO57DKOuMK1vIEwAg8KPoKeoNS53t5qgG0YQflFvTW4gJj OKj8DUZCwNvFx7McffxDkX2JSbKoKfVAScn2e5y+3cftBYu8XYiynKaxgiqFnI884z2FGcrhsLYr LSQBAgO3scSz/EZqNKL56h0VMDFdeolYXpcCgYEA0tSkgtQQhadCZVaZzQ9WAimdV8dbxXTVToKt UA0qj21MqE5RaSrEJhnY/b+/9jrlRE5On8/fhGyGjIStpPcTdm3LR0k3NPjVOSQW4Ve2/LNtrQge tMwNrbMayES5DE/IH1ZP5r6H5wsa6sRBovNVkjFyaKCPNh9LT4AiGNv3hgECgYBKCe1ZCk6fYHwr fR4BcxNqnCsZHY9TWy/3phQzYtzwSKLo6pq+bY8J6Sa9pjX7QwiFKtG9kis4t3WTOrrV/mI+jpks UMjmtnfyHhVPO5ii0M9oQV1oJy0G/NvJvjZ+xcFvAGW2q8/8QhIEVKve5KMdh/3PqFlbqKxZ55XW AW5NnQKBgA49QGva3upc8FJ3M0Sw/CLDMZwaPkYGmS4/hDitVHwM+v5fSVx8SRsNLQsUKI0yKSoe ATVfcgua6DF3vdeXk3CHyOTF2aOWScAoHk4fLYnSwmuKrkNVjUa5r79FdXSAKc8kXnp+GRh+djMZ nsC34ap5xanZgpgCMjFfKQtjci4R -----END PRIVATE KEY----- lasso-2.8.2/tests/data/PaxHeaders/lecp3-ssl0000644000000000000000000000013113766621500015532 xustar0029 mtime=1608196928.94689681 30 atime=1678814326.421984131 30 ctime=1678814321.421955655 lasso-2.8.2/tests/data/lecp3-ssl/0000755000175000017500000000000013766621500021060 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tests/data/lecp3-ssl/PaxHeaders/all.p120000644000000000000000000000013113766621500016703 xustar0029 mtime=1608196928.94689681 30 atime=1678098071.473500687 30 ctime=1678814321.421955655 lasso-2.8.2/tests/data/lecp3-ssl/all.p120000644000175000017500000001046013766621500022155 0ustar00bdauvergnebdauvergne000000000000000‚,0‚ò *†H†÷  ‚ã‚ß0‚Û0‚ ÷ *†H†÷  ‚ è0‚ ä0‚ Ý *†H†÷ 0 *†H†÷  0ŽMÐOJ¢´†€‚ °U˜ÞQ·ŠÆù¡Û¶jü-–„]–íòâãÇÓÒÆ~“Êò(˜|3è–®Öˆ³Ûî ¹Õô î#GL†Ç.y½Á–‡6há ¸ïUu9e*Áò"KkdRûò™†^ÁùMU÷Ùe\ü¾ÿô÷ØÊ³ƒZ¡Œ†z:$ºÅfM'‚»Y“y޾Pd|K7Ñs½dèìÎ=QÎ<óù64±!ÁÆî¡¡OÕxI/4¨¢–,,­Ãy2&oçR÷êzöpàß|'3tËãü˜wKX¶êBæ¯K*¶A—Ñ—BÛ´¤.z ZbÖ{VÅ”ôCˆ0Ýû]üÊà€<íÆ<’y)´'ì%?‹myz\Â;Ÿ8žýÿÃÇZì­ÄÑV—/9ßÀž—˜w«g5Ï ¼k{ Š,¢”a·ÉÑÉ/‰2Ä}Ä™´RVõ·‰Yím^}A‘²…ö°!%YšL@™1'm¬¼çX£¼ÏTκ™¢Ä¥ÖÒæÕ"9¢õóâƒÙ‰»J±–êEŠÏׯÀÏ[«ß¸Ÿ˜î ¤hô¿"X'÷¾Rzôº?ŸjäU\‹âºm7<Ïäœhyc1ñ­0\?¾‘[ÌXó fôÈúšÅYœlË×â}¿!÷‘¼ ê¯Be[Ièâw’y6/¯ƒ” Ä=¹YlX7ĉŸˆSìz]Ø[hbGïÝNÇþgƒLÝeå/yÊŽ1ŽWm5g†)ª|5"5§N*¿œzÉ{3SÛc ËÅKN¼/h±©l2È€©ƒæâ»­ªÂËÄ]gÒŒgÁêYLÁµÔÌ!Aq~³©ôýßjÊã¢ð\ ãzÁãfÿ\™&zÄóD(vŒtñã3&„9Bd¸‡ˆYBpUË_e3U`ÿL°GOXÃD®-–p’D†©_ù§x[ÁiHÖè°¼ðdXÜ0Ö±Î@·‚.RÂáž03AlÁ‹hi¿ E0¢¼æS@Íøàm®Gz è>÷_x¦x….î’νnj$æË .[`Ê6>ÿû Ó·ýG†v‚~Z¡Ñ09p;º2„U¶&¼pfÒšYþöfqt]à8Ím´¾HYòéß bÿÇé×iP²b÷h¹%Óg>0ìNŒ|¯#”loé×àŒ€B»¥âPF*Ô|@Ù·nW}‰?/Éi#ºn"ó(­SÓ&ÙöBYOEË£“¿ì™|¾.êCHLѨ£ŒjoKkÊ ¢þM)óÜŒ•žV)ÌŠÝ+üQ\…M°„ž{P“¦ÞN­ ‡îùîI¯Ý}¸.X4Áéà»Ún6 Uu(WZ¸R^Ué2V+I÷üsÍ^}wÞ#\÷-ÿëØ¿‰hlÊV[výacV‹6¤0¥Ö›è ”†¨¬¹œôêÍ<éæsÒùºfІ:Êx[Cs…jsÔ9WZâ9<Ïb„¶™š»è×ñ`„·MA‚öÉGŸe¿+'KÆúLtåv‰ 1¿EUô®:óp5”RZ/¿ìœúÈ+ûŠé&Ù+í\6Ðåæ ïbd$»/‰¢sÞ%§<¥F±iZèJ(ígœ=Ó%ÈKKÀ¸0llÊ0ÑÔ¾›÷€ÃXéXë˜ã` øõØ%faŒkŸÇ#ˆOAÁ´_ðóˆŸ3ÛýŽr[[5)‘`dMus˜ÙU'¦w°3í5ÞdµäÄϼvé¶7w¢Ãߦd¼d¨Øóò¯ø"&¹Ç Bhµ‰¯ÂŽ¢èM H'”j‡Ú e>µ&Îý„µÉÁ‘™2ý'»+¬l»K"íãXTH¾ÞîyQÑ52¦îyÿ€¥ÇÛì…C‚„—ÔA=&iö4¯èŽ@òõ…íõóÅhÙR÷¶ù¹×íÌTm‡9ˆÜŽ6Ûà—¼¹¦Ì'3×ø–Zë½j„%ûÄTÂêûjajÚH ÅüRä8±ÕQ‰ø/,H±Â+‡Ã-Ã2«’='rWÀèì´}°éfl‚Ô¢yû¨÷ùá`fÖŒoVñÜ­j7Þh¥ªJ‡sˆ´›¡í’CæÈÐ/èÕÇëÎÑ O¬GFtÄà{KMµƒ\´P;ß [0Ï#sçPf‚h9—@¢'Áá ŠjZ¨ jÇ) ì˜îGº™²U>“ªþmÕ\PÁ$¹@­Œ4_}zλ9dQ ÐÔë:øC“8Z½€Þqß‘p\Äu‚F Tíøãï¼ì ^a8“Ûj Û½+Ž4xùaù•(e$sy¥ >Ág[²~>̳»”CŸ¶v?ZTšK»‘srñFåeçLÞÅ …2‚±(‹zõz9<·º Ù÷³0Ü%ôfM ìbë é ÅÁlqÊaþý…6OTë•9’/ŠVRnÓ½͸•±í& þÏ6§H˜ÓzYÕØÄ&MôµÉ’ë_Ý{ž:½]zÆ£ÅÇq²&©†K/iJVwH.úOâO·ûÀcÆCþ–!]c4L\?$®½œI("Áv&L1zcaÁqð5ƒ «o¤7¶ä5rc³µ8N©[™KÖÑZP~LgÌuÉ`ZPXùzѶ\ àþÓmµ¸a`|`ñÁÜ”t#‡cídŽ<áq|ìkÏ~ÕjÑâ‘ôJ¢±ýWàî·Ô/œåÓ6à§‘Q*žLfÑ{vȺ1 åÅ;¨5–<³–›‰i{”çšc*›Ç¡W•ägÙ”)xY«¼½œ°ËþkŸøÓ‚3ÄËv¤ž¼Teç.·¬`Ý¿6ÙjŽ&Î=Ù0"yÅ\×{ãb´ÿ¶Í-Pß»,­QÝùJ±RéÍ®ØÉA;–©£§¬‘þò¦JœK(4áøò?ƒ"ŒD¢É]å¤$ ãw¿°äì(ýd 1qã<‰fDJiöqèË;ùZƒ+M¾©V´Ù3SƒÄY“ ´É`Í.¶{Û¾7Pÿ‹‚¸œÚŠ4Å {1>ZXSäÖÅÊW/ ³Áòâ©§«G†ÊcW‡ ÊŒÉú’Îî[4øžnÌŸ¸BW\¿”ˆ¿n'ª]+ŽslBŒ æ÷G6€/e#üC¨ž_ó#0‚Ü *†H†÷  ‚Í‚É0‚Å0‚Á *†H†÷   ‚î0‚ê0 *†H†÷  0}hbŒ¨&‚È%<;ÿ‡›ê)Ÿß9¨c¶*¾·¿Å3óR>¼ RÒûwä…ŒÔ 8ÂW?@øûÕ G*ÏS^¤Òæ{-ÌÃJÙƒmбùOŽóœÊ7Á«ê7*"Ħraøå3l'\fŒö«{Ô‹™\™N"…Ù‹y^·¦5¨ž7e,ë?_Eàw°ûŒY@Bš[~3Át° ]V¥Ï"ê’ju±c[oÝ ]¬ª…ËÓ(‚Ó…5bs¾iP(ÚCPS˜àGyÇ ý÷ 4Z&å“ ?Fü·;ŸY Z­™6oËз+•MÖÐ>´­!KÜ{¦€Ž‹€†:ùú“«<ÓÁèpÜ2¤ËGøÐúâßEÅ®ˆ]}±G¦¢â€K!ùpeÔ-ˆ±õJá£N•RóßζÅòåï²åSR̹-BÜx• Lj‰–mú¿‰³7½mùn)Ï¢ÛFýæL/Üü³¨ Òˆ N‰Çý‚êÒo‚UwP–t^yá¨àÿl5j6éA»ý^¾)]i—Ozõ*dï\é¡ìqFg89È»Å/Þrd7)lFù dâ1ª}Jt²_ΆMá¤ò8©vØã&òØä{Ä êcg?bd|ÁÄâWl¤wV u®¢ŽAIÏQ Ê£ eo¶î“¢nÝbÔïö?߃K#ý Á¦±V}LèßdDÅÄoľMòÜh¿D(ÙÄLUXnkíÿW ‹ƒk–ü¼]¯º3"ÍzŸ‡MØ‹ (Èý|¯„î`­¤v.a”%íhzLMj[2Ý=OxÇpÌ _˜<û Æx¾”²W MðÄØz~ÛüƒÃƒò€› êŽNÄu:1[•C{¬;¾~Ê_4îSˆ‚Ôd~¬U‚%ðé)éz|îÐ:{òUÁÔìGJ§ŠèÛŸ@µÕ-Jš¹pSá±3 OØ )$0Ne¨â~t‰Ì ‹n}Ã…DGæ lM‘¿° î"]²§Kcrô †cYˆ(²-eKe}>™ŸÝ+ äàØÜªÊ€ê@’®>tŠðŠD”g|Ûú¨t8ø×ÜÞMö utÃ6gMIIå—hô¯Äé"¿%ƒ,Y¼¸FÒŠ}&u£Eôhby-ߨ”•¿PÈ›|†59¶,žS`E¨Í£û(1ˆ‘gIÉ4õÔôcãx@Ǽ€i| yï‹Cnçõe°5p!úc:RÄbÞJét ÚkØ8«]þÜ»a¥½9“Ãã^ï(çq%mY8IZÙ×þ÷‚+¤vk¤£/û§Ú_4&~ù£PB 0q§«Ô!\«@˰He’w¡w÷²²;ƒ{Gx§‚ïøH·fŠÔá‘:”[Úµ2ÏÏuõ2ôš}8K¦Ù{· Vó†å쉴3a%¡³'¥ÓÇ{ø‰Uk3µùqG›ÿDOºOj4)Ćp&?碳>¿y¼¬Ùc»øá!ÞwEˆõM©E¥‰Þ¬'¹átɱÈ`½Ô³{„—?Ƶ膸©-ÍÊÅ*Ƶ'KJü¥B† â×å,~ ßð©Tyû"ª£-É•ökJœª#ªÚ©i~ÏúVl’)ôþu0/ÜóM}¹T1¿0# *†H†÷  1‚þÓt ‚÷ðež¶™ˆôÆ&j0— *†H†÷  1‰†Entrouvert SSL Liberty Alliance LECP #3 web server test certificate010!0 +UWa Yš1A‹q›¼`‘o“8J÷ØTølÈ`Åqlasso-2.8.2/tests/data/lecp3-ssl/PaxHeaders/jks.keystore0000644000000000000000000000013113766621500020165 xustar0029 mtime=1608196928.94689681 30 atime=1678098071.473500687 30 ctime=1678814321.421955655 lasso-2.8.2/tests/data/lecp3-ssl/jks.keystore0000644000175000017500000001135013766621500023436 0ustar00bdauvergnebdauvergne00000000000000þíþírootþWÀBX.5090‚Œ0‚t 0  *†H†÷ 0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #310U Entrouvert0 040813103648Z 290404103648Z0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #310U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚Կר©¿Ì 5Ó Tò¯_±Ô£!@Ýž=ZŽ G¤78>1RlêÎFÇ· ð @°EÈLb%€ÌÒ~îp»~ALO·õÐPØ3OgÇI–¯þ(H£œBBÅ}1.Zh€“Vòü›žr¸(’k›÷)jG˜ÖcúåÈòÚ½­rÅ ùR´ŽRDÀ2ÚáÞyfõÿRFƒë’’*J±]š@Áït<³‹0d%ñ¦$UXøÅP0‚p¨Ê"$·$.è]b§¯%² H‚?¤iÄ›õK&²TÀOÜÙ³ÈNîM¸öèørŸí6Á„>yoÀË4qW&´C£‚I0‚E0UKœÅïª<–³<Ëe;ÕcÁƘâ0U#0€KœÅïª<–³<Ëe;ÕcÁƘâ0Uÿ0ÿ0 U0*U%#0!+ +‚7  `†H†øB0 `†H†øB0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0V `†H†øB IGEntr'ouvert Liberty Alliance test web server Certification Authority #30  *†H†÷ ‚1’z‚}+,£xiÀFE‘FÇ ñ¥u̽œ¯mÙ6žÒŸÐV#¤Ú•ùdå#6ê4_DÇrã ]…¬Únë'ŽÐ2ÛéDvBÙ[k®Õ¨V æ „Ãðçp#³ÆLd?|P‡X½”qœiæg¢íF)wÈ<ù©­t åŽs8s#îšÌãûó4·g´O?õ%8Š|Ø4êb‚Ñű•"¬ø¦–m·p«§pÔ{”çý[ìÓŸ`i5®n{>#‚ µØ–ágbP^¨Zàk.ïþŠz-CÆ#¯Q+kG}GÑÕñ¡›óÚ?û‰0.×ðÀÁöðëÎË‚tomcatþWÂü0‚ý0 +*‚é…üQ©h{,î§KæÕŽ*5\Ñ{IöxxíN»§©ý[ua‚ÇÕg^‹üòc©*wÜ—Àn«¿°AÁñ&Ë<ûN(4ÝKCå—1„…€ØÞdŽæpT¼?ŠS9,\Bеæjζ· RÜÌŸeæú‹#üš8»´›é ³sŒRÖc»ÎßlUÝL é6G=FSѸ<>a û¨•u߬jŠœ—{¹ÆTXÌ52r?…ƒE@ÜK¼þë‹$Å “)ޤ܀«©«‹^0pè†ÒP䬱fÙy Èè£ïf†XLëQ™ÿ—·„ïÀ! ÜY’ê{¸$fYB •´KAtÿßJ8#»{Â,æ3oÚúRÌű A ‘ÝlùEÒhçØÀÎÕ;E_±•ë{õEùÐm5EÏkv—y¾íxdCõ!¸–Z ÈÒ!£I°éܲ|öYUØ©þ³æ¯i×|.­E•|ðÅ‚ 9¯µ ²±g\n€mŒ/f"«GG‹b£4+¾ß$ÌöþÑÝ.¦ç0TˆûÍ< Uä>õFŽ«_§o™b?äOÅ×ÓNñÜFñ%¦QŒž˜ÿvžù(9¦{AnÛasÄæµ~j4UHþ›{Õ²Wiû_6êå¹w$¼Ã 8¦^üQdn£Ü› OAÅùÐi¶é¸÷‰˜¤‰™¯«BÙj±>y¤†“$eQ2Œ»M©–¤«(ÀµÙñ¬J‰ƒ-ñŽ%ŠƒÔ=ùnÇõzzá;¨Pç7½8ÊðJL×@è0Êßpt/ x§—u#2Òœ¡œóQ§˜Y¥…DÁÇ8üOc=ÜfòÀñÀIl$Û$ÿ’·¾ÙIß ëÙßy©ºÊ'$’“æû±±ê`7RÔ‹‚$õ+„ˆoç¿-¶„Ü®”¹q#–CÚ§z‚ s­»vÇÍYi²XR)#v˜­6=žTm'¦l-±.–úÅ}/‚6u­¨Y¨]r€0³¡»FÍÒ섃qæý»Ró—Øæ¾°ÀþΠt'Xæ,ê) éþóË–h0*UEó…äEK™Yë}Á…ÍÉ'?SËnn›;NQmðW3_½®)¦·ƒ‚— A“¶ÊwÝš—˜Qãt­ ñÀjôÜ+m-?ƒé,õéCbÜNô9 ;¬FîѼX‚×X²aŠ·#ó­Wê†IPÑtìI¡ pʺ&óAorp+*SŸYUV3–Ëûþ–YO»„ÜÍ~NWy ®®Ošaš`ìÛzœ©~ X¯×?™{Î\Ö5/fÃùß“{Ô±í%?¸’lœ~ìô.|W_ɦ¬ÌÖ꺟Ç1Ü¥ë^»ð Ø]¾¢Éæ¤íOAœ_¾>óyñ&|»bü¸Y"H¾ìIeÕù©€æ—b•"˜Y±ßÀÃFöÚþ*^F±# (™†¨þ×ýù»>U‰søý X.509X0‚T0‚< 0  *†H†÷ 0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #310U Entrouvert0 040813104427Z 240814104427Z0210 Ulecp310U  Entrouvert1 0 UFR0‚"0  *†H†÷ ‚0‚ ‚Ãj@ùxzžðô3€+Ëô3­‹+².Š7~&Ö9‡aãS^MoS6qHðÑ;õ<Ìäh±õ‹Î§Éc`Cpp©ß†QÞ’—Ãi&È” é*LH[2Ÿ—éMNë->@„ä RˆS<–éˆ˰|pÕ·M*3)>Zð¡iлßé;Ú dN …ÝAåæU=4HÇûñƒälà,ÁW¥ÆI+¯ˆñlËÉzs®m©ä@´>œ21œ&UmªÞÑÕ ÅÏ‚3‡r´U/+MÏœé F•L ˆŽ¨†rtå<äé«—«-^%¹ĤKMZà«ìͰ܄ÑÂ룂B0‚>0U"¼š[¬¤y꯫n{£ÌdÇâNI0U#0€KœÅïª<–³<Ëe;ÕcÁƘâ0 Uÿ00 U 0*U%#0!+ +‚7  `†H†øB0 `†H†øBÀ0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0R `†H†øB ECEntrouvert SSL Liberty Alliance LECP #3 web server test certificate0  *†H†÷ ‚&fϾMî™ã¨ùß%›è&¥Wqy•Z€d´þ¢âøœZõºÈhBãzü±ÛÓœ¨!¨Ú­Fq©á†pò?¾ÿÒW’§ØLÁÉ}tmøa5ëžJCöA¼)=kp‡jàMD‘ÅŽ!í$~îqßô PSÍJ[íQ“}üÔäD7mÂEý2'Ò °¶Uo(¤Í›PnH‰ödÌ]Mݺ'Z\)y'åìÝ–ˆÅVŽó@^ÍûõBêbWr­Š±î¼ö=KDéΞ~yµvûnåßâúüfï ''\wÞ%ŠÑ%är§X(´\ÿ€•‰ûgc«açX.5090‚Œ0‚t 0  *†H†÷ 0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #310U Entrouvert0 040813103648Z 290404103648Z0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #310U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚Կר©¿Ì 5Ó Tò¯_±Ô£!@Ýž=ZŽ G¤78>1RlêÎFÇ· ð @°EÈLb%€ÌÒ~îp»~ALO·õÐPØ3OgÇI–¯þ(H£œBBÅ}1.Zh€“Vòü›žr¸(’k›÷)jG˜ÖcúåÈòÚ½­rÅ ùR´ŽRDÀ2ÚáÞyfõÿRFƒë’’*J±]š@Áït<³‹0d%ñ¦$UXøÅP0‚p¨Ê"$·$.è]b§¯%² H‚?¤iÄ›õK&²TÀOÜÙ³ÈNîM¸öèørŸí6Á„>yoÀË4qW&´C£‚I0‚E0UKœÅïª<–³<Ëe;ÕcÁƘâ0U#0€KœÅïª<–³<Ëe;ÕcÁƘâ0Uÿ0ÿ0 U0*U%#0!+ +‚7  `†H†øB0 `†H†øB0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0V `†H†øB IGEntr'ouvert Liberty Alliance test web server Certification Authority #30  *†H†÷ ‚1’z‚}+,£xiÀFE‘FÇ ñ¥u̽œ¯mÙ6žÒŸÐV#¤Ú•ùdå#6ê4_DÇrã ]…¬Únë'ŽÐ2ÛéDvBÙ[k®Õ¨V æ „Ãðçp#³ÆLd?|P‡X½”qœiæg¢íF)wÈ<ù©­t åŽs8s#îšÌãûó4·g´O?õ%8Š|Ø4êb‚Ñű•"¬ø¦–m·p«§pÔ{”çý[ìÓŸ`i5®n{>#‚ µØ–ágbP^¨Zàk.ïþŠz-CÆ#¯Q+kG}GÑÕñ¡›óÚ?û‰0.×ðÀÁöðëÎË‚hi ]£ßÄ¿{{DKŠæ»\Ršlasso-2.8.2/tests/data/lecp3-ssl/PaxHeaders/certificate.pem0000644000000000000000000000013113766621500020574 xustar0029 mtime=1608196928.94689681 30 atime=1678098071.473500687 30 ctime=1678814321.421955655 lasso-2.8.2/tests/data/lecp3-ssl/certificate.pem0000644000175000017500000000303213766621500024043 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN CERTIFICATE----- MIIEVDCCAzygAwIBAgIBAzANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjE/ MD0GA1UEAww2RW50cm91dmVydCBMaWJlcnR5IEFsbGlhbmNlIHdlYiBzZXJ2ZXIg dGVzdCBSb290IENBICMzMRMwEQYDVQQKDApFbnRyb3V2ZXJ0MB4XDTA0MDgxMzEw NDQyN1oXDTI0MDgxNDEwNDQyN1owMjEOMAwGA1UEAxMFbGVjcDMxEzARBgNVBAoT CkVudHJvdXZlcnQxCzAJBgNVBAYTAkZSMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A MIIBCgKCAQEAw2pA+Xh6nvD0HDOAK8v0M5AYrYsrshQuijd+JtY5h2EC41NeTW9T NoFxSPDRO/U8zOQPaLH1i86nyWNgQ3BwganfhlHekpfDFgVpJsiUDekqG49MSFsy n5fpTU7rLQ8+B0CE5AtSiFM8lukViAHLsHxwG9W3TSozKT5a8KEVadC73+kdBzsH 2qBkTgyF3UHlkOZVPTRIx/vxnYPkDmwaD+AswVelxkkrr52I8Z1sy8l6c65tCKnk QLQ+nDIxnCadVW2q3tHVoA7Fz4Izh3K0VRASLytNz5wR6QtGlUwgiI6ohnJ05Tzk 6auXqy1eJbkZxKRLTVrgq+zNsNyE0QPC6wIDAQABo4IBQjCCAT4wHQYDVR0OBBYE FCIVvJpbrKR56q+rbnujzGTH4k5JMB8GA1UdIwQYMBaAFEucxQXvkKo8lrM8y2U7 1WPBxpjiMAwGA1UdEwEB/wQCMAAwCwYDVR0PBAQDAgWgMCoGA1UdJQQjMCEGCCsG AQUFBwMBBgorBgEEAYI3CgMDBglghkgBhvhCBAEwEQYJYIZIAYb4QgEBBAQDAgbA MCYGA1UdEQQfMB2GG2h0dHA6Ly9sYXNzby5lbnRyb3V2ZXJ0Lm9yZzAmBgNVHRIE HzAdhhtodHRwOi8vbGFzc28uZW50cm91dmVydC5vcmcwUgYJYIZIAYb4QgENBEUW Q0VudHJvdXZlcnQgU1NMIExpYmVydHkgQWxsaWFuY2UgTEVDUCAjMyB3ZWIgc2Vy dmVyIHRlc3QgY2VydGlmaWNhdGUwDQYJKoZIhvcNAQEFBQADggEBACZmz75N7pnj qPnfJZvoJqVXcXmVWhSAZBW0/qIAf+L4GBacWhz1ushoQuN6/LHb05wFqCGo2q1G CHGpHeGGGHDyAhc/vv/SV5IRp9hMwR/JfXRt+AJhNesVnkpD9kG8KT1rcIdq4E1E kcWOIe0kfu5xFN/0ClBTzRJKGIFb7VEGk3381OREN48TbcJF/TIn0iCwtlVvKKTN HptQbkiJ9mTMXU3dugQnWlwpeSeNGOXs3ZaIxVaO80Bezfv1QupiEFdyrYqx7hi8 9j1LROnOnn4QEXkftXb7buXf4vr8Zu8gJydcdxHeJYrRJRDkcqdYKJAXtFz/GICV iftnY6sQYec= -----END CERTIFICATE----- lasso-2.8.2/tests/data/lecp3-ssl/PaxHeaders/private-key-raw.pem0000644000000000000000000000013113766621500021341 xustar0029 mtime=1608196928.94689681 30 atime=1678098071.473500687 30 ctime=1678814321.421955655 lasso-2.8.2/tests/data/lecp3-ssl/private-key-raw.pem0000644000175000017500000000331713766621500024616 0ustar00bdauvergnebdauvergne000000000000000: lecp-jks.keystore 1: tomcat 2: changeit -----BEGIN PRIVATE KEY----- MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDDakD5eHqe8PQcM4Ary/QzkBit iyuyFC6KN34m1jmHYQLjU15Nb1M2gXFI8NE79TzM5A9osfWLzqfJY2BDcHCBqd+GUd6Sl8MWBWkm yJQN6Sobj0xIWzKfl+lNTustDz4HQITkC1KIUzyW6RWIAcuwfHAb1bdNKjMpPlrwoRVp0Lvf6R0H OwfaoGRODIXdQeWQ5lU9NEjH+/Gdg+QObBoP4CzBV6XGSSuvnYjxnWzLyXpzrm0IqeRAtD6cMjGc Jp1Vbare0dWgDsXPgjOHcrRVEBIvK03PnBHpC0aVTCCIjqiGcnTlPOTpq5erLV4luRnEpEtNWuCr 7M2w3ITRA8LrAgMBAAECggEAKxnpgNzQ9vOgdAPr9j0C/MiAmO6EUb/fz/6TZY+EmtaL44YE28F9 Mh101ii/jaD2qx52Q5pU1WRcX6/6kIVhW0gTlDXEiMLOdbH10mcVOMg/0FpX8fGjhc3k2HdaqdKd 1M2nQgE5T/ZD++knJZt3yNJ5i7oktvFi3WrydfahmXfcmyMCvSGIyHSG7HztJoi5PapJR4DLfiRA 3chMiP13DS6xVlJ0nTfAQI39rVfT7y6mUokYDse/CnWMg/8MGi7KGbXaJmiW8QjslMZdYqEw5/fe ERjX5yxDe8nHyUMFXI7b45GXTzq5c+UU4VsDO0zoFJTpdh+F0Zy6zI/1LfVwmQKBgQD0WM9Hjb8O TdBK2PoFe/3h/bZ+MHbdPoyFLsKoy2PPW9rPTGa2852VgdN256ih8zmuU5jhko98pv961333KT2A hcLybFUTQDJrsG3Cu6/QZUM0a3uBzQdcp4Mp/6Y+gl+r0ZerapyMNdc6AvBaO3i5BVpOQdPPawFt asXxawKwpwKBgQDMvAsVY05tBTNtyu8ES2nh2RRWUYrgGyii0eAhSy3WKLeyaXyB8mH1EHmJ0wc0 vBLO2XLiZxIaD9KAH6vHYc31OF66kVxX8XVJLZplsRjqrnQw5XqvKPSvcjZQ6tHGeYIOtcjm5hK5 Y4pAvxqhKGTWGogh70M0BCVwuKjLk5RAHQKBgCK8wXMVtrSs4VDSufCvqO9I53nXH/7iFo4UkL34 dE8Vau0Pmoal6aBInayI0JN9hZS/87sV3+pDv4xSOGk75q9v1MAsIIglF0XyBhiqIBuLWduI8D0K zeIhOmdtHdBDLqC5oktPU8QnH1ry8gKR896x4R3BBAC34LMSe+OPaAl/AoGBALcx4/EFZR2kM7qg hXMgT+QpLEt4t32Ej73xck4YSTGCSa05OpHEYua4ESjETYRgbavtYyE2/TmYwtCmhjzoRTSRdiIX A7wlcL9EMQ2hhBwqcgl2rWqiiR+cYQHSvFaOT1P+UYBaipKcgQ8icR+XV3NFVl6XC1k2BJJyiYdv zI35AoGAQLNnfKAMELagnTv27NasVqqKJOf1CP2zo4xDIcpXqoBEBxvvXXr8B5FO1GwBeit/3Koz u6HRmvPUFSgf+QcAtj3U9V/x2mtrnKFJUlWKtfcfLbKkBMp/NeUD6jFAY353KhJEDRELGgetHFUV uPlvxHkSLcz/EbiM3TWqkJeJ6XQ= -----END PRIVATE KEY----- lasso-2.8.2/tests/data/PaxHeaders/idp3-ssl0000644000000000000000000000013213766621500015364 xustar0030 mtime=1608196928.942896777 30 atime=1678814326.421984131 30 ctime=1678814321.353955268 lasso-2.8.2/tests/data/idp3-ssl/0000755000175000017500000000000013766621500020711 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tests/data/idp3-ssl/PaxHeaders/all.p120000644000000000000000000000013213766621500016535 xustar0030 mtime=1608196928.942896777 30 atime=1678098071.417500247 30 ctime=1678814321.353955268 lasso-2.8.2/tests/data/idp3-ssl/all.p120000644000175000017500000001045613766621500022013 0ustar00bdauvergnebdauvergne000000000000000‚*0‚ð *†H†÷  ‚á‚Ý0‚Ù0‚ ÷ *†H†÷  ‚ è0‚ ä0‚ Ý *†H†÷ 0 *†H†÷  0êMo*î¾€‚ °…µŽEpo2Û˜ú?~ó&ÒDäM€ÆÎ¶ÃË]›,>6ë¡`ÕóÈ9V7p»Ëj²ý›YP5Öeï–0Nœ¤eeu…¡['«‡-1tñ'jV»>"€Šü@âóùµpÎ1ÀعK½.²¾I†Ó9&Ÿ Ç–‘²>à€i7K— æ/­ÎhE¦ö<º2ÀuVŽë#3Ôñúßð+0_x߯®FM0œ?P\J‘ÿSšcýÍs¢ÊYµåk!!Iáy°ä>¯ÆŸH°ŒÓüÅ8Ô%û¤–ÿN90m›¤PY§¨­,ø2ê*í™BƒBßȰ±ïYsY ¡°€»Q}W)ŠƒO£Ó_*uD¸3ŸJnwÖíHó6jÁtr‚ÇËgÂçCÜâþtp,z‘ÌG¿€lŸï¿©Ôßê”òÜh¨‘ÁaeC+|&ÇÐ'ìCòŒAí× _ü:ò—UjFÎyoퟌ‡¹Ž ɯ'ÄÈ àWr¶+ÐS9…9Ìø8#,ïHãÙ kÝøÆÃjnž;ž4Ã…â¨2Ó‚}|„˜™Ç×]GÝõ{(ç½Ô}©V¯gC²gk±´iyù­Við»?¹][½Ôß{Së–­ÔmjºW_›ؼ,—3=ß©·ÚÑ[lÇž!nÔ“A\#ìÞvŠÆã ›N9?æå¿ÂQƹ`¨žŸG¦ÿú\­cŸù±»2tŽýŠ_ ?1MwÖÀ6ve'EOeB‘Ç ‘3Ë”6ÓœÓÊyÇ ¦ü ¥€ë\(¸7 '§fÄðÔ0ƒhúÉ( <¨PLX\45ãõ a"ÀòËÄ7¡Ü>Zf4Är»g½0Ø?'¢ËS2íÛTÔÕD—ò‹ˆ úfÿÔ’ÅamÇ[e1ã4­ÖYm^c’& @ AK-E1®oÒ'vcÇÿ.€ûÅ`åezÄÈ6ÖA…b*YT³=Ú¯‘ïû´Æ Œ#Q™O-ðS¬Û¢ì|ánîc{±"¹{ÀˇŸþ ;˜˜ƒ!Æ|.^Ï êFÍ놩 æLò5X݉c3к§eâé  ‹•œ¾ ~Þ–joꃨÆQo;:8m|#¡û¥ŠÝïwo튎º¶v3ÀÍUSæb‹„Áâ)ôÝ÷ÖÛñ믠¹#,LûÖIåÛB’SæÍŠC ʨ/o.#+°g›ÞrQAö5@bŒØ>ƒØ¤kt¤]ùîØï ÿöWn— Ahi(‘ÈíQèö^Qà§²¤+ŠQV’̪¼ê‘¼,ðئå}|¹…—©Ô稊ºMrRñFR¨eÈ‚lXñ ·|°²Jå U^OÔnÚ-œËÙ ÐÖÂ|Š‘Sã}Ö°\ ‚þ0à‡ÿà½5³Ü¬ÏQ£®3®•W—½ÍQKívŽ:Æj4œ#äç™Vž©2o)Û'\ÄÝÈ`ƒ¯Ù|ºà(õNBë”é£"›6EØÞ Ï{¬]­Ÿx}á*RZ99¶XʼnúX6{ˆè9Œ<ÞcY®…ÑvpQ°ÒFŒ>1k M—íN‡f–×A¯…ÆIO¬ÛoSb$M‹ÇMØ Dˆ¼{ò´^"ˆUqS%ï.I‡Ú¸*^ØóTY ú猔X,íX‰h§Dõ1_V> ˆwjC£'‘ž4ñwà ÞIEšõã Û¼`·îŸé*ŒcÃ'íF¯ xe ž8|ªë|WŠ, ‚½/ü—9ƒ,AÏŽZ¢ÑÇÑ¥í (J”6¨8S¾þö\€Æu8AŠÆ|òðÊaß?ÅÏO›I¨ý?ûA8‡te0Ïp|WÙüÓÜÌжžÑš\­×7Ðö˜ëµgŽ °:³rÝÐzK¥›tÇl^’¸CíÁ~ ç]8 -,¬òoÜ’(óö€'SpQEæ×ìeù »öÃÝVAéĽ¹jþ0ýÒ†•€„}½xk5” ô,kqœƒU­”¶¶¿‰ˆ’¯ß7'(ÿ­¬))Ηƒà‘%‚ÑœR}u¤Xk-|.&x[½2¨zD”ƒ)uÝZ âîÙ¿}—UФ¦霱XùkÝ¢=Ã&L4™¦’¶@ùÏ¿s[:{|Œâôúqùžã^»¬ÿ |DÚv¿¾ë–’°vL*%¶hKì¢ð¹ nyNß-YBƒȯd¤¬1PFØÚM¸ŠËÓâ,—=ÝéS£‹'ã‡%Sg|Ëì÷~!-sЫYeë£p0®7¨\f޳€¾Y8pͯf¤ŸÓ:U•éé’&pW°ú3¹¨d`»5ÿKÕpovf‹äws–÷=å[à¦êo6åô´àeæü7ƈUü{+·…Ç¿{ˆå‰ FWEüLö¨áÎä¬hû•2£§ÁsDitˆè¢Å1ÒM«Î¼Dkbo®÷ax"õ K;ÀBš2ÿ­”–/cÚÿt‚g·KÔÍ ‹]Ðãˆ:[ìO¾ö¼ëNSò¸’|ótNsŠË·]QØ,=e‰šgÂú{,¨¤D_ù©ÏŸÊ7øx`)£s©–!q#jLÞæ‚ÏÉ:]¸Ò .™Ò8\‡ë:Æcõ¾Åßp)`¿0;žŠoäÊ<€Žô,õr÷Ÿ‰º0iáþÄàòUÈýIãy”%1†ðÃfkRû2Ñv wuŸ¼YC¦á!Cø‡ (bÜ ¨ËÕš …•ºÜµ‘¾¢Õ]‹vöû `ÛOzpú£ÍpÈÕžXûd1}f}æ&œhGÏ<è€]L_ †Ý‹Sä à¡­ÔÙ‚Kç4®£`Ü<åÔ̧ärl{Å)©eø@¥ýÓ–þ™yNK,‚£´R&[ ãš,\O‡š[>f$GBIN˜ UˆŠBgÖôK«  z$Z¢E`MRÉ=Êí¤rt#;*I»³-”zˆ­\a5a#»Ò‡Na÷ÙQ¬{}’<Ѿ´Ê_g÷0i™¿ƒƒZDDß1½0# *†H†÷  1ÎÒûö(»çDq Žq!¦Æ70• *†H†÷  1‡„Entrouvert SSL Liberty Alliance IDP #3 web server test certificate010!0 +°¨]µ '–Qß7Ã(eŒÞoå`6{Ž¥lasso-2.8.2/tests/data/idp3-ssl/PaxHeaders/jks.keystore0000644000000000000000000000013213766621500020017 xustar0030 mtime=1608196928.942896777 30 atime=1678098071.417500247 30 ctime=1678814321.353955268 lasso-2.8.2/tests/data/idp3-ssl/jks.keystore0000644000175000017500000001134713766621500023275 0ustar00bdauvergnebdauvergne00000000000000þíþírootþWÀ3X.5090‚Œ0‚t 0  *†H†÷ 0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #310U Entrouvert0 040813103648Z 290404103648Z0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #310U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚Կר©¿Ì 5Ó Tò¯_±Ô£!@Ýž=ZŽ G¤78>1RlêÎFÇ· ð @°EÈLb%€ÌÒ~îp»~ALO·õÐPØ3OgÇI–¯þ(H£œBBÅ}1.Zh€“Vòü›žr¸(’k›÷)jG˜ÖcúåÈòÚ½­rÅ ùR´ŽRDÀ2ÚáÞyfõÿRFƒë’’*J±]š@Áït<³‹0d%ñ¦$UXøÅP0‚p¨Ê"$·$.è]b§¯%² H‚?¤iÄ›õK&²TÀOÜÙ³ÈNîM¸öèørŸí6Á„>yoÀË4qW&´C£‚I0‚E0UKœÅïª<–³<Ëe;ÕcÁƘâ0U#0€KœÅïª<–³<Ëe;ÕcÁƘâ0Uÿ0ÿ0 U0*U%#0!+ +‚7  `†H†øB0 `†H†øB0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0V `†H†øB IGEntr'ouvert Liberty Alliance test web server Certification Authority #30  *†H†÷ ‚1’z‚}+,£xiÀFE‘FÇ ñ¥u̽œ¯mÙ6žÒŸÐV#¤Ú•ùdå#6ê4_DÇrã ]…¬Únë'ŽÐ2ÛéDvBÙ[k®Õ¨V æ „Ãðçp#³ÆLd?|P‡X½”qœiæg¢íF)wÈ<ù©­t åŽs8s#îšÌãûó4·g´O?õ%8Š|Ø4êb‚Ñű•"¬ø¦–m·p«§pÔ{”çý[ìÓŸ`i5®n{>#‚ µØ–ágbP^¨Zàk.ïþŠz-CÆ#¯Q+kG}GÑÕñ¡›óÚ?û‰0.×ðÀÁöðëÎË‚tomcatþWÂl0‚þ0 +*‚ê†:£)v—Ø(ÐJ`Ð¥Õ†N.K÷å÷ÚÀVµS~µ€>qKô.p7¦&êßè„nÀ , ‘YÍÌX€–á›ÒC¾íÅ }Öàä8jý/3¦8WwÖgÍúfNBF²v*kÝ%¿GQ^1>1áFø±–щÓÂRbD‰È¨ë ¢Ã]®ñ/4áòu=h¿ìÌ€¬"ý¥¢-z…]•ç3÷–4©Ût—HJÖÍ™¤”'BÀÒêC.N„º¥ûE¨ ZÌÙèmU*•ƒÈ®k}Aš =¥´•Þ^ `óºÃ³Swè2å(Œ››šjÌ:EhÃ!±nƒu"IV¦WvuhCj¬^ù˘K|7Ä®y|IŽ™®GaÊJsBдüCÈrz´^ѯ~(2åÍü…tâ¸Þ»kqþqcLÛw«£(dãØäRQÌ_†óïN¡Gc¤ L 4<¤Ëg†$æí:£{HJ\\g _ÄH•CË;bsì¹ ¬DBa qÔRPjë; ÀÞ€4oϱÅr!2éôH¶bsäIU™çfPpC Ößfr/Xcf4+«rûâ9 kkØE梎wŒÆu5Jlí©ì0uua•½Áº+"k0bUŹO•8ûRý.“d•gîU=“hâÄ+ÔNƒ0аÞË ™–x‚ ÿj ð ­e 1z.!#|¬¬Âî»;ª†Þ –×MMDѱæá§Œ"ó‡†Ç?/•Ÿ&ú¿¶Ûè!l΀ B`}yÑ TU¢YmÜåUØâ*‡pæ y™…çæ¹Ü›bÛòzèŒj»µ žq¾Lmd§gÝvƒ‹¡ŸÍs‚0­ñ†õ Ây õ4•=ø´mN:‘…°Øû™¯«ÁƒQf"P+Ïü»Ýi˜Ë¨uiP4ãœr¸zëÆU«ß5¬g ˜ÇÕ© ×5Ù+£è%­oØðòUêX}Ö€_x_hÇ¡O›« ЬÏ<-¤Â0É`3T&HDyNÇšM@è`ôds¸ ~ôAY0ã.3n&÷‹ÿ°§v'sè7Y€œSƾᄠþX.509V0‚R0‚: 0  *†H†÷ 0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #310U Entrouvert0 040813104427Z 240814104427Z011 0 Uidp310U  Entrouvert1 0 UFR0‚"0  *†H†÷ ‚0‚ ‚¥øÀ´»$Ή­H»_E‹Å_‚© AÓiï!¤ÂCëñFB—õÉ©‚\2íJtÑRé¥i†x™Ö Pᙂ×}2³Çºy-;—Z‹Wq3e/#” çS,‡H£øçöð~z"‹Fýa1tö]Í”Ks‰(}ëœþ¥LG$ M)=ÆÑ55}wA!¹›}Oà¤vôô»E]†µ¨ã¾ï:V· fdoCÛƒ\0â%ü[¤÷oÍp’klä ¢¤&Êr¦9ý©UÔ 7)ŒL’Ì&ÖÍǘ ØÞ/ÑP3zÛAæþå’XËÜB½¤x<3´"VÙÈ•‡hÏ Ñ¥s ÉætøQoϳ£‚A0‚=0UieÐB±ø]ªÛ®¢þ%£Ž6.0U#0€KœÅïª<–³<Ëe;ÕcÁƘâ0 Uÿ00 U 0*U%#0!+ +‚7  `†H†øB0 `†H†øBÀ0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0Q `†H†øB DBEntrouvert SSL Liberty Alliance IDP #3 web server test certificate0  *†H†÷ ‚,s((¶êSA¦EˆËQvÄöx; ¢ÎÑÔ=f™ŽÐÐ4’dш~pjÐÜ@Êsݱ°Â¦Šžš°C¤‹>m,®óëVÌw¬ïS(úÙî Ÿ³¢à=áW)ègÚ”þ½`D¾™ç{k9àWÞöÚa.”Xû+ýû€ðT%¬BàððQÖÊ[Úý€GŠ)¨d$®Hzñµ/ý©ê+D³D‹ÁgÿÿÑÞøT¡øXí(}«šÒK•Ÿ a‹%ü„ i`Áæ¬Ø-ngo sLW=ìtÎô-fË d‚ë>»«£ru«¢ëÅj§ƒü"8aößZZŠÁøÚX.5090‚Œ0‚t 0  *†H†÷ 0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #310U Entrouvert0 040813103648Z 290404103648Z0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #310U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚Կר©¿Ì 5Ó Tò¯_±Ô£!@Ýž=ZŽ G¤78>1RlêÎFÇ· ð @°EÈLb%€ÌÒ~îp»~ALO·õÐPØ3OgÇI–¯þ(H£œBBÅ}1.Zh€“Vòü›žr¸(’k›÷)jG˜ÖcúåÈòÚ½­rÅ ùR´ŽRDÀ2ÚáÞyfõÿRFƒë’’*J±]š@Áït<³‹0d%ñ¦$UXøÅP0‚p¨Ê"$·$.è]b§¯%² H‚?¤iÄ›õK&²TÀOÜÙ³ÈNîM¸öèørŸí6Á„>yoÀË4qW&´C£‚I0‚E0UKœÅïª<–³<Ëe;ÕcÁƘâ0U#0€KœÅïª<–³<Ëe;ÕcÁƘâ0Uÿ0ÿ0 U0*U%#0!+ +‚7  `†H†øB0 `†H†øB0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0V `†H†øB IGEntr'ouvert Liberty Alliance test web server Certification Authority #30  *†H†÷ ‚1’z‚}+,£xiÀFE‘FÇ ñ¥u̽œ¯mÙ6žÒŸÐV#¤Ú•ùdå#6ê4_DÇrã ]…¬Únë'ŽÐ2ÛéDvBÙ[k®Õ¨V æ „Ãðçp#³ÆLd?|P‡X½”qœiæg¢íF)wÈ<ù©­t åŽs8s#îšÌãûó4·g´O?õ%8Š|Ø4êb‚Ñű•"¬ø¦–m·p«§pÔ{”çý[ìÓŸ`i5®n{>#‚ µØ–ágbP^¨Zàk.ïþŠz-CÆ#¯Q+kG}GÑÕñ¡›óÚ?û‰0.×ðÀÁöðëÎË‚Ò#÷ru…ÙñY.ˆfNýûv)lasso-2.8.2/tests/data/idp3-ssl/PaxHeaders/certificate.pem0000644000000000000000000000013213766621500020426 xustar0030 mtime=1608196928.942896777 30 atime=1678098071.417500247 30 ctime=1678814321.353955268 lasso-2.8.2/tests/data/idp3-ssl/certificate.pem0000644000175000017500000000302613766621500023677 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN CERTIFICATE----- MIIEUjCCAzqgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjE/ MD0GA1UEAww2RW50cm91dmVydCBMaWJlcnR5IEFsbGlhbmNlIHdlYiBzZXJ2ZXIg dGVzdCBSb290IENBICMzMRMwEQYDVQQKDApFbnRyb3V2ZXJ0MB4XDTA0MDgxMzEw NDQyN1oXDTI0MDgxNDEwNDQyN1owMTENMAsGA1UEAxMEaWRwMzETMBEGA1UEChMK RW50cm91dmVydDELMAkGA1UEBhMCRlIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw ggEKAoIBAQCl+MC0uwQkzomtSLtfRYvFX4KpoEHTjWkW7yGkwkPr8UZCl/XJF6mC XDLtSnTRUumlEGmGeJnWoFDhmYLXfTKzx7p5LTsdl1qLV3EzDmUvI5QgAOdTLIdI oxT4Hgfn9vB+eiKLRv1hMXT2Xc2US3OJKH3rnP6lTEckC00pPcbRNTV9d0EhuZt9 T+CkdvT0u0VdhrWo477vOla3oGZkb0Pbg1ww4iX8W6T3F2/NcJJrbOQNBqIEpCbK cqY5/alV1AkWNykdjEySzCbWEM3HmAzY3i/RUDMInXoa20Hm/uWSWMvcQr2keDwz tCJWjdnIlYdozw3RpXMgyeYTdPhRb8+zAgMBAAGjggFBMIIBPTAdBgNVHQ4EFgQU HGll0EKx+BBdqtuuov4CJaOONi4wHwYDVR0jBBgwFoAUS5zFBe+QqjyWszzLZTvV Y8HGmOIwDAYDVR0TAQH/BAIwADALBgNVHQ8EBAMCBaAwKgYDVR0lBCMwIQYIKwYB BQUHAwEGCisGAQQBgjcKAwMGCWCGSAGG+EIEATARBglghkgBhvhCAQEEBAMCBsAw JgYDVR0RBB8wHYYbaHR0cDovL2xhc3NvLmVudHJvdXZlcnQub3JnMCYGA1UdEgQf MB2GG2h0dHA6Ly9sYXNzby5lbnRyb3V2ZXJ0Lm9yZzBRBglghkgBhvhCAQ0ERBZC RW50cm91dmVydCBTU0wgTGliZXJ0eSBBbGxpYW5jZSBJRFAgIzMgd2ViIHNlcnZl ciB0ZXN0IGNlcnRpZmljYXRlMA0GCSqGSIb3DQEBBQUAA4IBAQAscygotupTQaZF iMtRdsT2eDsLos7R1D1mmQYEjtDQNJJk0Yh+cBBq0NxAAMpz3bGwwgAGpoqeB5qw Q6SLPm0WLK6N8+tWHsx3rO9TKPrZ7g2fs6LgPeFXKehn2pT+vWBEvpnne2s5E+BX 3vbaYS6UWPsr/fsOgPBUACUIrELg8PBR1spb2v2ABBdHiimoZCSujUgDF3oO8bUv nf2p6itEs39Ei8Fn/x2P/9HeF/hUofhY7Sh9q5rSSwgHlZ8gYYuNJfwXhAxpYMHm rH/YLW4XZ28YC3MVTFc97HTO9C1mywxkgus+u6ujcnWrouvFaqeDEPyBIjhh9hDf WlqKwfja -----END CERTIFICATE----- lasso-2.8.2/tests/data/idp3-ssl/PaxHeaders/private-key-raw.pem0000644000000000000000000000013213766621500021173 xustar0030 mtime=1608196928.942896777 30 atime=1678098071.417500247 30 ctime=1678814321.353955268 lasso-2.8.2/tests/data/idp3-ssl/private-key-raw.pem0000644000175000017500000000331613766621500024446 0ustar00bdauvergnebdauvergne000000000000000: idp-jks.keystore 1: tomcat 2: changeit -----BEGIN PRIVATE KEY----- MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCl+MC0uwQkzomtSLtfRYvFX4Kp oEHTjWkW7yGkwkPr8UZCl/XJF6mCXDLtSnTRUumlEGmGeJnWoFDhmYLXfTKzx7p5LTsdl1qLV3Ez DmUvI5QgAOdTLIdIoxT4Hgfn9vB+eiKLRv1hMXT2Xc2US3OJKH3rnP6lTEckC00pPcbRNTV9d0Eh uZt9T+CkdvT0u0VdhrWo477vOla3oGZkb0Pbg1ww4iX8W6T3F2/NcJJrbOQNBqIEpCbKcqY5/alV 1AkWNykdjEySzCbWEM3HmAzY3i/RUDMInXoa20Hm/uWSWMvcQr2keDwztCJWjdnIlYdozw3RpXMg yeYTdPhRb8+zAgMBAAECggEAAy5JQy1yXuI2cUO7k4/Zpea2slmH6W4EXZQnqOiwNI1jM1OGOlxh u0XZFAMhSgG0yJ0P6KvXBu37ntc6UrbridaCFGBxiZek/JaobLoR5l1gMVzTEh0AWrwFYtvwetmY slPU5aZupLY176LMldL8W9ySzTktCC32DxLIX8n3TXsXp8L+dirX7iWX+4FEBtcyVNZzLGyqgujv UDA+HSw5UlyT/swG0U5OSTLRQtjTZUD2zUiiaPFqi5NhlPIZAXhXg5lY+aUj23+ejpbPm4HXh2XA CjPIajvpunmyg5jMHfjvajWecYauJsBemJktROznhMZ+Uf2AoB22ooXgnu6eQQKBgQDdEDscSPME kk1ICoJjdid03amjRmuDpqEk5KXLspHFgX6RB73Gj76Qor/sqCCZc6uZFCjQv6gddACBl0tsYncT uExHZbc5I9Ap2RX13LAZXTCyQzcTqeNjMaRt+FoEdskkqFHo8KUNGUnw89VcbHkGl3INL2zVtxEL eVbL8PQUzQKBgQDAM5/4laf/EqYI4xOlCiZTwO1gEPlDhduYUkEQn3PQKykASB5WLzz1cxkMlwb0 d66HqRVRw2Ouo4FlyrXqsd2Suq8/rm7b3SeYQgAaTHHuVrqmVD+5DFDs2DXPl4x6od50A6DMuU2K 8FJGYsRWnOQobKxFBOgvBPcR/kswSc92fwKBgQDDImKrMxGhRWuGXhB+r3tgw5HMmIqrKVkxccuQ JU5bo1UPvF+eeKBkl+UGh9pO2jXs6EinC6bgaNdRjTV8tOYbuCFNHNJBVAWaCxBBeM7RdNtZX8+s QdiAZP+aOxFqw1gGTbYQAuwOxfXpBbOe4/lpAiIg1W4isHgRQsiFOWqbOQKBgD+VlJmXYQF4eOc9 wDT8O5u/mogKdXwKH5CvvYizR4wZizHlqeuXKxKEZkgM+qcLpPiKTlxDSInw25ECU9Z1yziMfAeU PGaOLlgnlYMdwR85H/yAqKgeU/NWv86Sc03qmP5GaP7xWp7ZTE6uxAdnVe+tq/wVWH6dpOMV/mfW M0UfAoGBAJV3tCGFpQVeRaIOlyz7HHEvvoh6MnBEiadliKIeAJEJ+URnNWXLq4tAkGfPMyIKpeEb HYRKnlJzvQewO3C6mML27TlaqR0G9cT5b0ih9aKJ8krQvsWPEgr+nI6AaU1Wt1dwHV4440/dZkRz 7fZ8xqd+6YEPPmmlmWrh83Jkdpe7 -----END PRIVATE KEY----- lasso-2.8.2/tests/data/PaxHeaders/response-30000644000000000000000000000013213766621500015724 xustar0030 mtime=1608196928.954896876 30 atime=1678098071.501500907 30 ctime=1678814321.445955791 lasso-2.8.2/tests/data/response-30000644000175000017500000000624213766621500021200 0ustar00bdauvergnebdauvergne00000000000000 http://idp5/metadata http://idp5/metadata http://idp5/metadata _E7799BC7D0C299FABBB7367100656120 http://sp5/metadata urn:oasis:names:tc:SAML:1.0:am:password lasso-2.8.2/tests/data/PaxHeaders/user3-la0000644000000000000000000000013213766621500015361 xustar0030 mtime=1608196928.962896942 30 atime=1678814326.421984131 30 ctime=1678814321.533956293 lasso-2.8.2/tests/data/user3-la/0000755000175000017500000000000013766621500020706 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tests/data/user3-la/PaxHeaders/public-key.pem0000644000000000000000000000013213766621500020205 xustar0030 mtime=1608196928.962896942 30 atime=1678098071.589501597 30 ctime=1678814321.533956293 lasso-2.8.2/tests/data/user3-la/public-key.pem0000644000175000017500000000070313766621500023455 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqRgG5X/W8OCv6WJXSxQW f2o6O2oMHThzDPvaqOU1hezEM56jYSAdZW2z3QPBrhh8GvL3T8OxmWBGrsWcoa4i 9dOKOelACdOPWQBmC9lOQL3C2ijf33rCXhw3pbuR5q1JVa2OGDcTqMMAeTKoreIp XqCXLvM1/CFjc+O3V2vKVmGFYlSAGqED2QuND1/rFO2QVOSBKnZEyn1sgCFoTy1F VPScAqu+4uC2fXBc/FRA8fFGGmR6P4tEtkEyOVdIPCWipcy6xe5lXUEAk8AO533h WjCxLh2Rig2M/tfgrZvSdEuKgDFqYlVtwB0dzwnqAPIHLc/I1ViEM0ZgPKkMVFAu pQIDAQAB -----END PUBLIC KEY----- lasso-2.8.2/tests/data/user3-la/PaxHeaders/all.p120000644000000000000000000000013213766621500016532 xustar0030 mtime=1608196928.962896942 30 atime=1678098071.589501597 30 ctime=1678814321.533956293 lasso-2.8.2/tests/data/user3-la/all.p120000644000175000017500000001023713766621500022005 0ustar00bdauvergnebdauvergne000000000000000‚›0‚a *†H†÷  ‚R‚N0‚J0‚ ‡ *†H†÷  ‚ x0‚ t0‚ m *†H†÷ 0 *†H†÷  0ql¢užñ€‚ @*„dRèǤKqB]ÜÿÔD ”öÒ+±¥«ÉM¤yŒ¶žûÅŸ£®û¥ AJr–Ìw2É·O[ÃQ°:\[>“ôê€öHò!Ý莥£‰Fä_ÂÒBÍ»Î)gæB7à¦îXk"s{S!+P8¯¨+¿ó•vã -–ÈÙ5QöjÙ‚Ark×–Ø!N·_[ÔÅyœ\,GZ—ƒi/º( ïûQ#¦ÇÑ )ï›Ò©Â†J¦Ú]µö1š9Ò40.¥K,&o/HAð£ŠkÙ*/>ò^ÉhsRà|^Í`¡ê>í`²htÚ\¢æ>|60ênËzìQ¢n2[üÊ„o‘ÒäÓ’¨)Qæ+I †°r/¶5Ø ©÷ çã +"ýlýT&dÈþ9†`oêÞÒëä©ò“4Bd}_™ûÇ ‚Þäqc>Ýþšéó ‚lkßÇ*g¥Iòvhö¡aØ5>Å‚® ÃÍêØªdú4Š0­Øu¹H%bçKðµ ‰|# 5ˆN8áõ%öœu¢íüi™5ïkÚ™¬@5¥LÊ|>ðL,9° lÃ_\ØÎ-=¯®ž‚±‹p·4Ëøjñ¸5ǶÛä.Ö”Jl†üòR, ¸œœáÑkäAøÉ´dü0†T„®—º÷Þ x( ~ƒ#ž¢y­¯ \+Äœž¯AC[°ÁÍRO¤œFÎäf»ZûÚ((Ÿˆ_Gx5R,ˆP>ôeÐSÊ  ¼åžˆ>×£ßÍlÆ=('(’oÒßåIñ(¶?z±3RgÜi¹³~:S<ÅØ=ˆò0Øó5%éñïö^y†³äI!ò'ÍW}¦†^ÕæjLcùµé°o±:ïeJðH‚¤Fo8íJ+²€[{1‚±ë¦/j¥h‚i}uŒ_Ë%ám (ÂpøJøŠÒè?¾Ê¯î«î{ííÎõ߇Ò»öcwû~èf7*C®¿æÄgœzXùûGÛ­©·ÌþZ„Og|$Å.Õv³s–¡¢ê"žVvr²KÚŸE=DÜ|´i9iJS¤¦9"ÚÔ[‹ `}WÚñe–öˆJ`€ƒnÏ3æ”PëTOhôp±øbUPúÇã‡ô[y¨Šw\nSˆ9„?]ú†ˆÃ¢";¬;;‹«)if%Šå·ÊÍåÈ›gº¦—Ög—dvRïc»Š˜ …~ÅÖ݆ ˜ 6¥Éf:á|»dW@}Qž¤þ~Í8D·áH‹äBØ'âå:·­M£ü3ÎÉ?¯@æ¾ki¹Ÿ¹‘õœœµ‚Ð ïóÇ:Ì®‹y}È*m™/ÍšI!ÍõeÂx0S_®=E{Ó"d6Ïï|’(v#·Š™×u~ÐL¦†Ñà1à «3B2Ž2 Ñ‚€ýÁû´°×ÈÍb€=ªhÿ F2†Bvk&3§‘,Vù|.6: ÖŽà,–;«èºhKæ×èõ‡F¢Ñî’ög4;Åý‡6@P‚cÖ[³ÐûU}_}Šg׊R• k1•¡ z ÖBÚZŸœsgh? îKÄ£Šî !Ò†€3&šz¿{7‰”Ç{‹BPö´á°àkiÍïqQö6­“M ÚwÊZÆÍ¤QueNpðV_#]ÕÐ{OküdÚª‰9ØÍñ˜¯#aƒ=Í¥ °à5¼„ån¶ùUãn]”½½À'Ý_DÃM:œJ|$Pk*[îS±›ƒNðú ¶“‰¡$rG®ÿš`osú/”zú”œ@ &1 Îð\˜Ûw;Ž ¼#7ÁœY¦ì¿7P’où­^¯?d“ûŒ5/À"ÃbB-þ2&’ˆs®51 ý¼i79+g®‚\ˆê/2¤ŠçâçrÝÌP9ÕÆedŠ2Š•ãÌô±E?¬0óì$³“߉&!8Ÿ]“!¤ÃÚ¶÷³´÷º_kÏ}Ò«ûëé"¨raPaŒ50 eíÌzˆ4£‘Š!kŽ NXÞLA\¶Ô´7>Ú‹õS&Î…[еè¼3©k­úGmê9>¼[¯iD1¹¡®ùËq`«’˜ŠöùÊXg‹€Á §€(Åõ•î¤N.ùt)fŸR"f"…ÛY•Ìéy2t4ùõWJÉ [ÇF5-«0DÐvгУD4¿ËЍ‰ˆ„±=§ VÓ¦±ÖLzêyÉ“òzÏŠ'MÅ…§>’2Ñ|Ý» Y÷„¥~aØÝO:ÍÌ@¸kü&EO\"òò¥_6ãèV–âöAó‰ €$œûô”0%c®M_ìA}“‚1ÜÐ>‘\匣Ƙâƒ/oÐ ßy¦Ëä‰ï( ‹ýYšé¾&ýa~}wt[":,±ˆó47‘b!¦2Ëp¬>³ê¼5qÒT•0Ü8qv~¯õí‘Q<“îF©8êŒF/ óßC¹{¢ý™-‡=~³lhñ‰ÇmØëóÀãïZ ÃÁOVfAúˆFìeÏrí§“ÑìÅ÷ZWññ‹D£Éž4?äñœ¯mF&|­¿/ýbÛ~W«¯ W¡W+ ƒ¢%ÑÚifÆëþyuFS¦aßÜ™‹Vx ‚)±ŽdMÉç…ÍŸòãþÔÖaå¢: £¯¶‰è !ÍLàÕj>6¥ÂÀ+HÑz¿Û‚::$3 ÄñªöìýòÕ·ï¿ÎD¨ü´ÕjïN”&Œ´6Q*{á²DàëU–µ¶!™+×tÔm£Û_ð‰³Q%Çš¶]"€ú£ü`5£ ’Ž…¿cf-Õ} èöW1ÂöÀâÑÛ,yª‹×çüÅ\d2xCŸ]Çj `ž! õ+7EDL‘‘ŠFÁo 0‚» *†H†÷  ‚¬‚¨0‚¤0‚  *†H†÷   ‚î0‚ê0 *†H†÷  0…³ Ê©Ñ+‚È´¬Öé“é‘MXBaH}øÆ·F{ ™ ‚¼>fúÜêT¼„§u“Vó‰dÞ-ºÊúä¯aJaÂ)fæÝñé8Áå»`;µuºX™Rró·VûB¶3,†p YeæÄ¸« ‡!¶nœ›Nt‰…dØ~…É ”qê^—P6+Σ ÷]å,<©i+|ûÒÓ²”ïì(ä~BÌÝÖÉU„[saWþ‚–Ê*#›.¸4ÂøPÚ6_ÊŽè´æ¦ÄoW$Htz‚sø¾\ï$¹ì´¯ª 2Ì 9˜óĨYòÕaÞ»LgТ)2ÿ‘P Ûxå³8RSó”d‘•3©£Á?Ô]÷Pu‚Dà.1ùowm'‰1Àæ#zJlN¯A|˜n\¶R¥fÄ[q«~Éqr%eïÞÞì‚9¹N¨‚EVx"¸P?/W…ÙM":ljWž;bäÉÜ„ò¤5´Õ‘ Á*Ïݲےò§Ðù&uG€¢v9ºãTÿ“,2‡LcE¦EQŸl—V¤™9·,ݤœ¨z¼ŠÅÜ;æªhKõSçþ£)| žíÐ×â¶yùN²ùÞVá/uÙ€q Lþ?ˆàFÍùghø§^[1ìÑîÀuÐ<ã›sÕ5íÊŠ£rv •’WÊúõV‹àÃ6¼ù õ³bþpÖ.äE$álÈ~£é–Ìä'þ}vw²jaÕ°E_¼q"~ïx®°4f(*‹áË»r9Oþ—(gQ×ΕZÙ>›‹7ôT^ái4Èë%ïjßý¨à§‚½òΜr¬UÈçHzfoj>§ípÁ=Ø]&"en·¯òq~z°ô†#ô k­Õ.‘©VQŽ„Å:q:#û"EUôÓѧdxìÃÚ»!4ƒuƒ@­ê¤Þ+bñEüCspleqꋯhÂ<ú¤g5e{Ãâ£6BbEL WöŸt|†ìh«¸qÕå2PýÔ /åNœØ Ác埿®„Ñ #XE‘Œä!g›úuMÿ@HÍ3 ”Gjñ]ºý‚ pöô#ÚŸ&QrŸGô’35DH1%úX܋Ү½’S¸ ¨Sþ!ÎþçÁ(tFNÈç«~ÉÈÞ©ï1só¹Srvotüoñ0ˆ¸ ¨Co¡rÏ…k»ó÷r°gëÑg’**˜^Ã, D‘«‹úWþ”Z¤ëUX7óQATÇÑ™ÂNÂðÚOJyËuÕC©Å(¯ë§Ýˆ(£RÀ‘Ðoù8F‚e~’$ýEåq³X¸e ‚{Ñ3µrù;‚ÂcÐò5zæŒÜS—ìÄæ7 Hä‡6fµ]AŠØ$~¯#g¢!f†=-øÁ#„·… „bLå«Ï¦Y¸ª5ÿÀ¹ð0ÏúÑzúØÌ”×LuýM« 3*\OùÁߣ1ØáŸbs¢czæ}ëKØã/ 2z0_È4IxYNPÔI§êÅðnˆA0*oa+×®€ûâUZžðÒޯϓ%\ “’ ³åú¸`Ýì`ò’HsšÞvï8UíÀ!Dzc¾íË`*týÁp‚:Œ{££mÁùõg1ž0# *†H†÷  1GVר6€:ǯx¿ üã»}ÔdÃ0w *†H†÷  1jhEntrouvert Liberty Alliance test user #3 certificate010!0 +µn.=&ñ’Al¸î„∳ÙG0F•’»(šlasso-2.8.2/tests/data/user3-la/PaxHeaders/jks.keystore0000644000000000000000000000013213766621500020014 xustar0030 mtime=1608196928.962896942 30 atime=1678098071.589501597 30 ctime=1678814321.533956293 lasso-2.8.2/tests/data/user3-la/jks.keystore0000644000175000017500000001130413766621500023263 0ustar00bdauvergnebdauvergne00000000000000þíþílassoþWÁßZ0‚ü0 +*‚èØøéÉœ(9aV(glX0º)h0ñµ0 Zå‘0©¬D¬LÒ?† ÃáÿÎÊÒÅD#Æ7ýb5†RŽÅX´È“ªlž=†Ä>œÃs•9œ(Fˆ µw]sÙ3ÿoŒ†nÒ– ë&‡*§á„«ÚÏJ{¦YŒ_Æ èùàDjñš–›D—#Vy¶‚ä×1RŒÞŒ5ÌC,ÀŸ¹§k}ÛûG’ÌÄVõoÀ(þTAc%|pç¢õ 6ï¡l6pŠƒØ:Ít—¬Á'!qd&Õ²>Áƒ?®X†hø5»mE“ækÝu}Qqƒæô(©àJé¶Ô(FâFÍŒèýÚøªr·TNö¾NøJAÂߪ1«ŠAޤ)ŒU7POŠ`2ÙÔ]Ùs¯ž‰ádŒË`qwÍUãbhúN\~Ó:ìÇY··E³Ø,û•9ÒÄñ™à!CÒ(TÁ¿u,¡“þXsk8ÎÌêsAVÎ)å|cÿ¶†í‹~HóMÜ–”>é˜[¾*±ÚHô{]vÉÅ›ãÒ§Ûj2Xû¹Ä° 때vD: •%ž÷.æÊ£ üÐd8Ï›ÛGº46h:Ùå~ÙH|^ãFæ^5ZÊ{+S`C¬¨Ü¡Þλæãå±íÒ½…êùT³(„‚^(Ô< Òþ|}¶Õ®üèö(2߯ýìŽn8Šôþ—°Žâ]ò°”¨­¾¯ª Šï“ë´£ï± ‚k.Œ;"FU|éÓªwöåLø41¶T©ñhˆŸÇm!Ñ ¾ ˜îX¤â”-mØfA­F|8Z²Œú»b#Íï0ݧ¶´§ƒ@—¢þ¯”d˶õ«œÄ1‰ˆ­jLu®¢aÆô\¦ý S_HÒ þR÷ î³ýA§¦NwO0³àlLŠWJ¶LŽûÖ¥¿=£„r#BÂ3Ï•éË åSÖªÔd®"+¿ìC›'.×.lû*j8VjúÜ]I¯î—|Z>%PzÌ«™À®yx²ÈSÔ˜"4éuaîáQNèdP¸c‹–¥KÕb]˜>û/=câWT*ê•ÏE3eÃx¯E•èµEy‰PÃЋ”ÐU¸0 b) ÈJ|(̤µ\¸öÊT‡3[‚ÑÄ“ŸW=MOMüN`=#ÞstDö³Ív/_ø4[ôœ®|”u¬ÿjC* %üJþ¹£Î«ÔMý4@À¸ LO°sJ¿ß<…™¶Q˜Œ /iÔpî¶ ÿ/ò:/ÅD`^ƃ”åOL#˜W;Z#·fÑ-ÖX³Î€ěң?w/@+SÁc|n@ÇÜGhñÕfJœ ÃGâú,cbü½ùŠ•íd&Ôçàæ8ÌÓG,…fmzs=~Uî`{F_¶€px¼¿ù0 úà€¦·/äyQð‹f¯Œ¿öH!c RÒãâ,ym+ý%G™Ú˽¢ŸÜKÕÁ†XánX.509t0‚p0‚X 0  *†H†÷ 0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #310U Entrouvert0 040813103640Z 290404103640Z0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #310U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚¢”ZàOÕ½WuG“eI·¬’3´¬${š )Û4ó·ÏΙíp’þôhCÍ—TbiÛ”Ã.öÝWå¬;fèÝ#«%¶æ?jÒåÄÛ%iYA‰›Ê 5ñŒ™²ç%¹|ŸKF_wj_òŸßsG„º…åx8_¿–ù .÷kŒ´©ÐšÈ‚' ›û¶éEðÁ‹kpHv—%&‰mfúƒÒ41?ØÛpø`[ÑçMdo Áóûá 8]Gwì¨a3‰Ê°.ŽhbláLÍ‚Œw^ ÷òûÚ¹ÿÕ9›ûŠdöè#®U²ºœ;PT²3<0··ŽÞP\RíóüÍ£‚C0‚?0U“_¥íù»•â.«­Ÿ»ê*A‘ 0U#0€“_¥íù»•â.«­Ÿ»ê*A‘ 0Uÿ0ÿ0 U0*U%#0!+ +‚7  `†H†øB0 `†H†øB0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0P `†H†øB CAEntr'ouvert Liberty Alliance test Root Certification Authority #30  *†H†÷ ‚&üfŸ®pÌW±,(j¤œ ÓÌ‚2\}Ý«à¨#^Èâ)´ù±Öí,Ú¥°# ¥í‡Á/ûÑÔL+i¨&üeTµ€Þ±F \›¡N1¹ó‡7‚| ñðŒ‰³‡¶Hþ{ØJÓ–-§W4¹†j•V~cr:HBrÊÀ¬ÿ¥þh*H¤9fìñ*£¤í¨Wº¦Ž ”˜¹y…ëÍ’"‰>pus­Öa±h5~i›‹L›ÁMØr<»çFÜ'` ì·×¼¥Hå åe8Œ‡(ñà§© øŒ)·ÿc(貎®X!†¾&‡±bÕþÓ1ðié¶îùmx5¿}Óó÷CÉ™ÓAentr'ouvert liberty alliance test root certification authority #3þW¿ù×X.509t0‚p0‚X 0  *†H†÷ 0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #310U Entrouvert0 040813103640Z 290404103640Z0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #310U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚¢”ZàOÕ½WuG“eI·¬’3´¬${š )Û4ó·ÏΙíp’þôhCÍ—TbiÛ”Ã.öÝWå¬;fèÝ#«%¶æ?jÒåÄÛ%iYA‰›Ê 5ñŒ™²ç%¹|ŸKF_wj_òŸßsG„º…åx8_¿–ù .÷kŒ´©ÐšÈ‚' ›û¶éEðÁ‹kpHv—%&‰mfúƒÒ41?ØÛpø`[ÑçMdo Áóûá 8]Gwì¨a3‰Ê°.ŽhbláLÍ‚Œw^ ÷òûÚ¹ÿÕ9›ûŠdöè#®U²ºœ;PT²3<0··ŽÞP\RíóüÍ£‚C0‚?0U“_¥íù»•â.«­Ÿ»ê*A‘ 0U#0€“_¥íù»•â.«­Ÿ»ê*A‘ 0Uÿ0ÿ0 U0*U%#0!+ +‚7  `†H†øB0 `†H†øB0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0P `†H†øB CAEntr'ouvert Liberty Alliance test Root Certification Authority #30  *†H†÷ ‚&üfŸ®pÌW±,(j¤œ ÓÌ‚2\}Ý«à¨#^Èâ)´ù±Öí,Ú¥°# ¥í‡Á/ûÑÔL+i¨&üeTµ€Þ±F \›¡N1¹ó‡7‚| ñðŒ‰³‡¶Hþ{ØJÓ–-§W4¹†j•V~cr:HBrÊÀ¬ÿ¥þh*H¤9fìñ*£¤í¨Wº¦Ž ”˜¹y…ëÍ’"‰>pus­Öa±h5~i›‹L›ÁMØr<»çFÜ'` ì·×¼¥Hå åe8Œ‡(ñà§© øŒ)·ÿc(貎®X!†¾&‡±bÕþÓ1ðié¶îùmx5¿}Óó÷CəӠ»ÈÏù0v»(zeoîÁÝlasso-2.8.2/tests/data/user3-la/PaxHeaders/certificate.pem0000644000000000000000000000013213766621500020423 xustar0030 mtime=1608196928.962896942 30 atime=1678098071.589501597 30 ctime=1678814321.533956293 lasso-2.8.2/tests/data/user3-la/certificate.pem0000644000175000017500000000274513766621500023703 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN CERTIFICATE----- MIIELTCCAxWgAwIBAgIBBDANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJGUjE0 MDIGA1UEAwwrRW50cm91dmVydCBMaWJlcnR5IEFsbGlhbmNlIHRlc3QgUm9vdCBD QSAjMzETMBEGA1UECgwKRW50cm91dmVydDAeFw0wNDA4MTMxMDQ0MjRaFw0yNDA4 MTQxMDQ0MjRaMDIxDjAMBgNVBAMTBXVzZXIzMRMwEQYDVQQKEwpFbnRyb3V2ZXJ0 MQswCQYDVQQGEwJGUjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKkY BuV/1vDgr+liV0sUFn9qOjtqDB04cwz72qjlNYXsxDOeo2EgHWVts90Dwa4YfBry 90/DsZlgRq7FnKGuIvXTijnpQAnTj1kAZgvZTkC9wtoo3996wl4cN6W7keatSVWt jhg3E6jDAHkyqK3iKV6gly7zNfwhY3Pjt1drylZhhWJUgBqhA9kLjQ9f6xTtkFTk gSp2RMp9bIAhaE8tRVT0nAKrvuLgtn1wXPxUQPHxRhpkej+LRLZBMjlXSDwloqXM usXuZV1BAJPADud94VowsS4dkYoNjP7X4K2b0nRLioAxamJVbcAdHc8J6gDyBy3P yNVYhDNGYDypDFRQLqUCAwEAAaOCASYwggEiMB0GA1UdDgQWBBQHko8YxDHT9/84 Ufa/zuAikq5R7zAfBgNVHSMEGDAWgBSTX6Xt+buV4houkKutn7vqKkGRCzAMBgNV HRMBAf8EAjAAMAsGA1UdDwQEAwIHgDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYB BQUHAwgwEQYJYIZIAYb4QgEBBAQDAgeAMCYGA1UdEQQfMB2GG2h0dHA6Ly9sYXNz by5lbnRyb3V2ZXJ0Lm9yZzAmBgNVHRIEHzAdhhtodHRwOi8vbGFzc28uZW50cm91 dmVydC5vcmcwQwYJYIZIAYb4QgENBDYWNEVudHJvdXZlcnQgTGliZXJ0eSBBbGxp YW5jZSBVU0VSICMzIHRlc3QgY2VydGlmaWNhdGUwDQYJKoZIhvcNAQEFBQADggEB ABG+/tj6lJ8p3gnKfEyGY8gLYCXcGU1pxEmffGq74jMfzuvkrkCaw3+TA0s1OhWF VDYpPrmjzqvUFg5N/TRAwLgKTE9/sHNKv988hZm2UZiMDS9p1HDutgz/L4EI8joI L8VEYF7Gg5TlT0wjmFc7WiO3ZtEt1lizzgWAG8Sb0qM/dy9AK5BTwWMYfG4TQMd/ 3Edo8dVmSpwgw0fiBPosY2L8vRz5ipXtZBwm1Ofg5jjM00cshZBmbXofcz1+Ve5g e0ZftoAccB94vL/5MAv64ICmH7cv5HlR8Itmr4y/9kghYwxSBdLj4ix5BW0rFP0l R5nay72in9xLG9XBhljhboE= -----END CERTIFICATE----- lasso-2.8.2/tests/data/user3-la/PaxHeaders/private-key-raw.pem0000644000000000000000000000013213766621500021170 xustar0030 mtime=1608196928.962896942 30 atime=1678098071.589501597 30 ctime=1678814321.533956293 lasso-2.8.2/tests/data/user3-la/private-key-raw.pem0000644000175000017500000000331613766621500024443 0ustar00bdauvergnebdauvergne000000000000000: user-jks.keystore 1: lasso 2: changeit -----BEGIN PRIVATE KEY----- MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCpGAblf9bw4K/pYldLFBZ/ajo7 agwdOHMM+9qo5TWF7MQznqNhIB1lbbPdA8GuGHwa8vdPw7GZYEauxZyhriL104o56UAJ049ZAGYL 2U5AvcLaKN/fesJeHDelu5HmrUlVrY4YNxOowwB5Mqit4ileoJcu8zX8IWNz47dXa8pWYYViVIAa oQPZC40PX+sU7ZBU5IEqdkTKfWyAIWhPLUVU9JwCq77i4LZ9cFz8VEDx8UYaZHo/i0S2QTI5V0g8 JaKlzLrF7mVdQQCTwA7nfeFaMLEuHZGKDYz+1+Ctm9J0S4qAMWpiVW3AHR3PCeoA8gctz8jVWIQz RmA8qQxUUC6lAgMBAAECggEBAKPIB/YG6zQJDZoqjI7F+DyVsa2WvAEZiiaLU3HAASWk/S1afLk4 mACET3DFkLWGNb8MkwsJa1456HykH2BjAK3Gpd4N1N8vsWrtfeoAI1GF+9O/P4iAqP7qqeO3WExs j9mS70z5G+ucZTr/HG6/3n4vYgAxxppd5Kx9Zjogx6z92ViFnJCQ/WyZkL1XKmiD4HJx7t8n56Mx INqWMH8YQPLgruDQXFJq9HWJd6Ym0r6kURuYhLj5J7kkHml1ahOklnQ1S1jQcSF6O0hLwcBUSPmC kkK1FKy2q0H7yrdLMJsyYL7RQPQDONyMkEuzFi3gWt3wtLGf20XcXzASrpM3/YkCgYEA0iy2xQIx 5cclyBH3v/rk2IEPTPsIlXR5ZPJvCJE7OuCjNV5auc0CeBWgIhHwkbfzUE3qNxF6oGiHA8rUs7E9 BSMstXpXhkcDmMHhjP0kO1PvTptr2JfpYHoDsym6L68wpmn6ub9Xn/uhpctUzhPPL6HhFgI3Xf83 mIO2oGguQS8CgYEAzfZP3g9Wb6pBmeQGNdzcqrxDWEyp7uHEvsLMNmAc937F0L/S6i7Ri3Ca+6xc kRxtOHqcgirvnA8nTiHF2901kg/LIlTn+zA6+5U35HBMbnfW8ynJAsfpV5h5DDcYcXhlO8oQhgtS WIg/07SNZMXJ/o0zUdcizqJd6t0AZZ+YEGsCgYEA0PZh9XgcMi+RUd0DbR2/P775fnksbKP0OjiL yoHS2NQVkO8x1v+Mj+Y4YwdhHxA8WsBMuNmpCSlD67JTTiFO4Pe68OglczzRx6QkY7AfwNjP2mDO lfdbsm89lHlNQzG0dhBylxE1xrtBWXzS4V1yphIVn3Mup0cjeICkJ9HNA0MCgYBePvjbDz+pR0pP hiVFXnRneFCExkf4dL0X4YGa3C5FHnCcjjqQSK5AVV3GDmApUs2zy390nPsZ+WEuAoxMiJPr62gz pJCmw7Ipz2VNFgoTfqkQii1eJWZkW/QAH/ICcmo4isU24VVkB6zVTkhpNYyx+6DhMUXPMkMxpsF4 vyfRUwJ/PGdBTVjMxH4smMuIeSsKPJ/SmzoOHiTAwnPV906q5b+QNl2PBNTXqRkTxv/+WLqohUwD wnde00uDL3XysXyFWYcLTvBslSqg8eZypCmxrChsL2ayYLb1MjEcmWS1b+8SZu3/0lWf97aGVtwp T0DVl5Fm+eKOYyVqsFNRqLUdkA== -----END PRIVATE KEY----- lasso-2.8.2/tests/data/PaxHeaders/sp3-la0000644000000000000000000000013113766621500015024 xustar0030 mtime=1608196928.958896909 30 atime=1678814326.421984131 29 ctime=1678814321.48595602 lasso-2.8.2/tests/data/sp3-la/0000755000175000017500000000000013766621500020352 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tests/data/sp3-la/PaxHeaders/metadata.xml0000644000000000000000000000013113766621500017403 xustar0030 mtime=1608196928.958896909 30 atime=1678098071.537501189 29 ctime=1678814321.48595602 lasso-2.8.2/tests/data/sp3-la/metadata.xml0000644000175000017500000000514213766621500022656 0ustar00bdauvergnebdauvergne00000000000000 https://sp3:2010/assertionConsumer https://sp3:2010/singleLogout https://sp3:2010/singleLogoutReturn http://projectliberty.org/profiles/slo-idp-soap http://projectliberty.org/profiles/slo-idp-http http://projectliberty.org/profiles/slo-sp-soap http://projectliberty.org/profiles/slo-sp-http https://sp3:2010/federationTermination https://sp3:2010/federationTerminationReturn http://projectliberty.org/profiles/fedterm-idp-soap http://projectliberty.org/profiles/fedterm-idp-http http://projectliberty.org/profiles/fedterm-sp-soap http://projectliberty.org/profiles/fedterm-sp-http https://sp3:2010/registerNameIdentifier https://sp3:2010/registerNameIdentifierReturn http://projectliberty.org/profiles/rni-idp-soap http://projectliberty.org/profiles/rni-idp-http http://projectliberty.org/profiles/rni-sp-soap http://projectliberty.org/profiles/rni-sp-http https://sp3:2010/soapEndpoint true lasso-2.8.2/tests/data/sp3-la/PaxHeaders/public-key.pem0000644000000000000000000000013113766621500017650 xustar0030 mtime=1608196928.958896909 30 atime=1678098071.541501221 29 ctime=1678814321.48595602 lasso-2.8.2/tests/data/sp3-la/public-key.pem0000644000175000017500000000070313766621500023121 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxZZ+N8PimG7fPAxR8PT4 RBw05DtJMReKY7keZ/g1s4DdT6HRCvfqvWJTUtkPYefBLMJPVFPdbpUbKtNY4+CO qYFTb4j7rw/yZzsd6EYYqy9LYmLEH17On6eFMfUE7nmrJUHYa46Q0c+HjEoixvEV eqDTiLZnA2jEW5hVFOyXbTQisW8OEG/Ul+AoCCPBZWwghrUTImggsiyhv40IIxRm sds+2P6TWRMvOWQz6G/yDOJAYLlgGlWveey7GLoZ885PrQQrtS2rwfOSPBp9onE4 PnaGbHsolCmYumcnvCxPTCYKCslsEmZelx6tOYBPkgOYds+pUN3qkq6vx9sXULid zQIDAQAB -----END PUBLIC KEY----- lasso-2.8.2/tests/data/sp3-la/PaxHeaders/jks.keystore0000644000000000000000000000013113766621500017457 xustar0030 mtime=1608196928.958896909 30 atime=1678098071.537501189 29 ctime=1678814321.48595602 lasso-2.8.2/tests/data/sp3-la/jks.keystore0000644000175000017500000001130213766621500022725 0ustar00bdauvergnebdauvergne00000000000000þíþílassoþWÁÙ0‚þ0 +*‚ê§jMêu0&Ò(,õTh,¨-$YƒýÕt‹¥÷$´!ZKrE %w÷pÞ1P MåêY!gàÝñòTN˜L›ÕP&uF¦\*¨uþ¾(ÐþÐÆÑDQÂÉ¥…„ÞlÐâôG×K¢Víqe4Ñ®®‘阜HªÎn!,5¶ÝEèÿȪá—–öæ™Iå)’=h0+ð’ߖ볳ɋ­¢ãÕŽAûwã’ÀÏ J*4É'vŸ- ¶m¸Ž%‘]ý%äå™k‰3'¡‚@¨/½Ö`ó#Ò‘êEœV @7ݺÉð[]Šç¾£ÙUö¤6B“˜vfÊ•]ÐÃӭÙYƈv&1‚´âư0ú.“iÀO2LÌb.ùìì¥g}ð ã$ ê’a¡êvÔíÒ X¥‘w¿Æ(÷ésçŒËó®xâÝeô™§Xo2a;[Ñoѳ9fµ,)C¸ƒ!õ8ñBùŽ„¬Cín­ f«üý€jPiÂÿ\.Tª,CÏ4êÈé¿Xxȧ@¾I3E|ÒÊ’pïÒê&nvÛî|úP×vúÀd¼¦øuÞþ}ÙwYõP2Õ1kFTÿ)#·ó&H¼·ÕÀî·>Ìèzf\¢ø—Á‘ÖÜê”Xeh#–æ4Jö°ìÔ ûæw°œ»Ã@–Éxàd÷«àL‘#8ª1qsâ$qÐdP¦Œ(®myp\jàV/:‰=2H¹U\’D®oÙ_Ôîò›œ. ©ë0t—rj¤Ïvža€ ÈRH[Ž›Ï$zèívN1{Üc=éqaë¨;p¤ðx°´Å©ÃxFMæ¯.5 ús½Ó K<µLEØã/$äÁ§ ÒžEeÉ5®4¨ÆÁ³§´v÷¡ÿE¾uœØ궉Œ/kæô‹ÄÍEõòÌoX¢d~šX ô1ð;މ‡#•+Tê" _”ƒ\qÔ¡N ‘¤°óì"õçØ5Lu—r¯3<óz³5T€*Ⱥ+•˦ÌC^¤#ù¼YºV…˜øˆ\ì‚éð6üòÓm]u%Öïý2Žý’ ØöÆ L«>ÓQôwY †ó˜ÒFÞÀ³ï1},¯·*”ÃŽ7¹µ¥fô×"@u²[z 3*÷L>§~€’D‹««+#Cøþþ ™uæäκ¸tÀߪô…ä÷ªn簃ѱá¿a~"Ý­"å­g;™þ€ÝØ 2¼ïðŸé4þ¶{ÓÖâE‹•Îé ƒ{3DöHŽ}NŸ^ÀÖoñ§w:xI+Ó^D»¡ÛþÕ{üÞ~å’cîP bGðpi"[Øâ“¡Ú #°pPÖIA\¦»ûu7šï\¼¥;R£à9X(䱊o‡X.509-0‚)0‚ 0  *†H†÷ 0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #310U Entrouvert0 040813104424Z 240814104424Z001 0 Usp310U  Entrouvert1 0 UFR0‚"0  *†H†÷ ‚0‚ ‚Å–~7Ãâ˜nß< QðôøD4ä;I1Šc¹gø5³€ÝO¡Ñ ÷ê½bSRÙaçÁ,ÂOTSÝn•*ÓXãàŽ©Soˆû¯òg;èF«/KbbÄ^Ο§…1õîy«%AØkŽÑχŒJ"Æñz Óˆ¶ghÄ[˜Uì—m4"±ooÔ—à(#Áel †µ"h ²,¡¿#f±Û>Øþ“Y/9d3èoò â@`¹`U¯y컺óÎO­+µ-«Áó’<}¢q8>v†l{(”)˜ºg'¼,OL& Élf^—­9€O’˜vÏ©PÝê’®¯ÇÛP¸Í£‚$0‚ 0UQ¾$Õê&RKŽò£S È•R"!)—0U#0€“_¥íù»•â.«­Ÿ»ê*A‘ 0 Uÿ00 U€0U%0++0 `†H†øB€0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0A `†H†øB 42Entrouvert Liberty Alliance SP #3 test certificate0  *†H†÷ ‚O¸Üʉ#<ËX7J# íñlž@}’!(ZóÝÎæ.øòÚlÖ^8Äg(¥dgþÂÊ>äû@ðŠou·¥Ÿ2e»co„¬GJbþ Ð$¹…Hú}s†BE]f+¡öà£01yE•€u ú€ÑþcA¢WvE<:Ë^xÑΊñiêˆ?yêÏ"®¨¨Ð!M­4SÈí¦µ]Ê÷‘Ì R‘ŠÉq°Ï˜Õ–±ô» H–y‘ö€çyâÎêñðäØjçšÿ·›Q•¿T,YM“%f~ ß•u÷–75Cû¨Zh”g‰!;¡K¡Ur >…æ³DxÇÛp±Pf]bT·D‡5ŽaŠMX.509t0‚p0‚X 0  *†H†÷ 0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #310U Entrouvert0 040813103640Z 290404103640Z0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #310U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚¢”ZàOÕ½WuG“eI·¬’3´¬${š )Û4ó·ÏΙíp’þôhCÍ—TbiÛ”Ã.öÝWå¬;fèÝ#«%¶æ?jÒåÄÛ%iYA‰›Ê 5ñŒ™²ç%¹|ŸKF_wj_òŸßsG„º…åx8_¿–ù .÷kŒ´©ÐšÈ‚' ›û¶éEðÁ‹kpHv—%&‰mfúƒÒ41?ØÛpø`[ÑçMdo Áóûá 8]Gwì¨a3‰Ê°.ŽhbláLÍ‚Œw^ ÷òûÚ¹ÿÕ9›ûŠdöè#®U²ºœ;PT²3<0··ŽÞP\RíóüÍ£‚C0‚?0U“_¥íù»•â.«­Ÿ»ê*A‘ 0U#0€“_¥íù»•â.«­Ÿ»ê*A‘ 0Uÿ0ÿ0 U0*U%#0!+ +‚7  `†H†øB0 `†H†øB0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0P `†H†øB CAEntr'ouvert Liberty Alliance test Root Certification Authority #30  *†H†÷ ‚&üfŸ®pÌW±,(j¤œ ÓÌ‚2\}Ý«à¨#^Èâ)´ù±Öí,Ú¥°# ¥í‡Á/ûÑÔL+i¨&üeTµ€Þ±F \›¡N1¹ó‡7‚| ñðŒ‰³‡¶Hþ{ØJÓ–-§W4¹†j•V~cr:HBrÊÀ¬ÿ¥þh*H¤9fìñ*£¤í¨Wº¦Ž ”˜¹y…ëÍ’"‰>pus­Öa±h5~i›‹L›ÁMØr<»çFÜ'` ì·×¼¥Hå åe8Œ‡(ñà§© øŒ)·ÿc(貎®X!†¾&‡±bÕþÓ1ðié¶îùmx5¿}Óó÷CÉ™ÓAentr'ouvert liberty alliance test root certification authority #3þW¿ðÏX.509t0‚p0‚X 0  *†H†÷ 0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #310U Entrouvert0 040813103640Z 290404103640Z0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #310U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚¢”ZàOÕ½WuG“eI·¬’3´¬${š )Û4ó·ÏΙíp’þôhCÍ—TbiÛ”Ã.öÝWå¬;fèÝ#«%¶æ?jÒåÄÛ%iYA‰›Ê 5ñŒ™²ç%¹|ŸKF_wj_òŸßsG„º…åx8_¿–ù .÷kŒ´©ÐšÈ‚' ›û¶éEðÁ‹kpHv—%&‰mfúƒÒ41?ØÛpø`[ÑçMdo Áóûá 8]Gwì¨a3‰Ê°.ŽhbláLÍ‚Œw^ ÷òûÚ¹ÿÕ9›ûŠdöè#®U²ºœ;PT²3<0··ŽÞP\RíóüÍ£‚C0‚?0U“_¥íù»•â.«­Ÿ»ê*A‘ 0U#0€“_¥íù»•â.«­Ÿ»ê*A‘ 0Uÿ0ÿ0 U0*U%#0!+ +‚7  `†H†øB0 `†H†øB0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0P `†H†øB CAEntr'ouvert Liberty Alliance test Root Certification Authority #30  *†H†÷ ‚&üfŸ®pÌW±,(j¤œ ÓÌ‚2\}Ý«à¨#^Èâ)´ù±Öí,Ú¥°# ¥í‡Á/ûÑÔL+i¨&üeTµ€Þ±F \›¡N1¹ó‡7‚| ñðŒ‰³‡¶Hþ{ØJÓ–-§W4¹†j•V~cr:HBrÊÀ¬ÿ¥þh*H¤9fìñ*£¤í¨Wº¦Ž ”˜¹y…ëÍ’"‰>pus­Öa±h5~i›‹L›ÁMØr<»çFÜ'` ì·×¼¥Hå åe8Œ‡(ñà§© øŒ)·ÿc(貎®X!†¾&‡±bÕþÓ1ðié¶îùmx5¿}Óó÷Cəӽ°oÓ¨TîÀÃÓ*:Ū. ÌìŸlasso-2.8.2/tests/data/sp3-la/PaxHeaders/certificate.pem0000644000000000000000000000013113766621500020066 xustar0030 mtime=1608196928.958896909 30 atime=1678098071.537501189 29 ctime=1678814321.48595602 lasso-2.8.2/tests/data/sp3-la/certificate.pem0000644000175000017500000000274113766621500023343 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN CERTIFICATE----- MIIEKTCCAxGgAwIBAgIBAjANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJGUjE0 MDIGA1UEAwwrRW50cm91dmVydCBMaWJlcnR5IEFsbGlhbmNlIHRlc3QgUm9vdCBD QSAjMzETMBEGA1UECgwKRW50cm91dmVydDAeFw0wNDA4MTMxMDQ0MjRaFw0yNDA4 MTQxMDQ0MjRaMDAxDDAKBgNVBAMTA3NwMzETMBEGA1UEChMKRW50cm91dmVydDEL MAkGA1UEBhMCRlIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDFln43 w+KYbt88DFHw9PhEHDTkO0kxF4pjuR5n+DWzgN1PodEK9+q9YlNS2Q9h58Eswk9U U91ulRsq01jj4I6pgVNviPuvD/JnOx3oRhirL0tiYsQfXs6fp4Ux9QTueaslQdhr jpDRz4eMSiLG8RV6oNOItmcDaMRbmFUU7JdtNCKxbw4Qb9SX4CgII8FlbCCGtRMi aCCyLKG/jQgjFGax2z7Y/pNZEy85ZDPob/IM4kBguWAaVa957LsYuhnzzk+tBCu1 LavB85I8Gn2icTg+doZseyiUKZi6Zye8LE9MJgoKyWwSZl6XHq05gE+SA5h2z6lQ 3eqSrq/H2xdQuJ3NAgMBAAGjggEkMIIBIDAdBgNVHQ4EFgQUUb4k1eomUkuO8qNT DciVUiIhKZcwHwYDVR0jBBgwFoAUk1+l7fm7leIaLpCrrZ+76ipBkQswDAYDVR0T AQH/BAIwADALBgNVHQ8EBAMCB4AwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUF BwMIMBEGCWCGSAGG+EIBAQQEAwIHgDAmBgNVHREEHzAdhhtodHRwOi8vbGFzc28u ZW50cm91dmVydC5vcmcwJgYDVR0SBB8wHYYbaHR0cDovL2xhc3NvLmVudHJvdXZl cnQub3JnMEEGCWCGSAGG+EIBDQQ0FjJFbnRyb3V2ZXJ0IExpYmVydHkgQWxsaWFu Y2UgU1AgIzMgdGVzdCBjZXJ0aWZpY2F0ZTANBgkqhkiG9w0BAQUFAAOCAQEAT7jc yokjPMtYN0ojjQnt8WyeQH2SIShaG/Pdgc7mLvjy2mwQ1l44xGcopWRn/sLKPuT7 QPCKHG91t6WfMmW7Y2+ErA5HSmL+INAkuYVI+hl9c4YOQkVdB2YrH6H2GOCjAjAx eUWVkIB1DPqA0f5jQaJXH3ZFPAA6y1540c6K8WnqGIg/eerPIq6oqNAhTa00U8jt Eqa1Xcr3kcwgUpGKyRNxsM+Y1Zax9LsKSJZ5kRL2gOd54s7q8fDk2Grnmv+3m1GV v1QFLFlNkyVmfg3flXX3ljc1Q437H6haaJRniSE7oUuhVXINPoXms0R4x9twsQVQ FWZdYlS3RIc1jmGKTQ== -----END CERTIFICATE----- lasso-2.8.2/tests/data/sp3-la/PaxHeaders/private-key-raw.pem0000644000000000000000000000013113766621500020633 xustar0030 mtime=1608196928.958896909 30 atime=1678098071.537501189 29 ctime=1678814321.48595602 lasso-2.8.2/tests/data/sp3-la/private-key-raw.pem0000644000175000017500000000331413766621500024105 0ustar00bdauvergnebdauvergne000000000000000: sp-jks.keystore 1: lasso 2: changeit -----BEGIN PRIVATE KEY----- MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDFln43w+KYbt88DFHw9PhEHDTk O0kxF4pjuR5n+DWzgN1PodEK9+q9YlNS2Q9h58Eswk9UU91ulRsq01jj4I6pgVNviPuvD/JnOx3o RhirL0tiYsQfXs6fp4Ux9QTueaslQdhrjpDRz4eMSiLG8RV6oNOItmcDaMRbmFUU7JdtNCKxbw4Q b9SX4CgII8FlbCCGtRMiaCCyLKG/jQgjFGax2z7Y/pNZEy85ZDPob/IM4kBguWAaVa957LsYuhnz zk+tBCu1LavB85I8Gn2icTg+doZseyiUKZi6Zye8LE9MJgoKyWwSZl6XHq05gE+SA5h2z6lQ3eqS rq/H2xdQuJ3NAgMBAAECggEAYCkQvmUH53W2EQxR6LngBY3Qs+6ifVDemg/i22iyAe1KR9IR4Yus Y4Tx1lUrJlPa8MSURQ8XqhTJBvuavDRyWc5F4/c/vgA90b20nXFX2iAHSReWKUpDtvGZYinDv6fZ AiXchOP6WRHt/vmpmTaFZIvWxyc2VTNstMMbTTajr5IewhVeqIzWAHaAj0Czv4CezaTf3ItcacY4 OR9JTlaLnRpdsFUJJZc9eOTlgIGt7zkQ7IvADG696VAKxW4ix+PWNxFAFqUiElobbLVYJvslI4u4 uSi7dRfpTGMwyuKvhPGvbHYywc7ldyk9wpXptFXhwrvzaP8ALvwgladdT03ehQKBgQD67oYFyxsK 2nIane8Hvqnd/n0mri2Qk5HrsKlFM7O2hTcNdvfzh0+ykQPdW+adNgBaSYDbRHnh4GgHo2SyrxwQ ifOG1CYed+gJYg4chMZz42nCH5u1IZRHNaiwtTWb480g9uQ51jhPwDFIbFliSOCMXshYWlraYdeV M020sRtG0wKBgQDJlCXXhwwANEu/Zp23u0FQeMMnBuBMk6vhKCcK9Vm4weIcF2pOu3isRuKuv0T7 zdQmA/v4sa+C023C1T/DP/zmE9fliDE1+55IKTS4iT/rYdddjE8yWvuedONYMor307rijySJz3U7 uvtiYPnI0e7eBIr+xAHIFx8SSGYYvFbk3wKBgQD4HRsV5WMC00YZvWnZDZRmtbjHo1fYaaHSGyb0 DxA2e/gYbzbybCvIk4zvtmwLrJair6Uiqc2eI0aZrtzltTGZxN2vxls+qy8bAAKV/k8/zXAICzrp 2Z8E3jDDMRol3xQ38QdvjLq3WIEibEfhX8/v29RbUFQfNLl2hHjkHm6rEwKBgQCpHqpBEQR4h2el xao9I9XAdhEFBTfaB2sFFHLtNrt3zvKtLtf6Bj9QCojUo5R0zlNXMbCNDkZ6NHi6Jb/BSEYdojhY UtM2v0wkrq2UxVHjYcsWqUkorjy8zMSQkpcVJYZ93iqBlJR+8HlIKKRoX/lQO++Bn2D/RqbC6AsA ZcNhcQKBgAgFvTlAmCtHdA/YT/pyIn0KVLxm32DPXLqj6j+wXfKbPZNjqre2pTFFhpf/svZs8xvc KVKeZEgZtpn97ysYVf98Kg8RvFPQnsZ3uawDhXkQ8NLp9ICTlp5s5qlOXHW4nusECZI4x0qNdO9r nJDjp388iAOk8kDt4pGoXhSV59zl -----END PRIVATE KEY----- lasso-2.8.2/tests/data/PaxHeaders/ca3-la0000644000000000000000000000013213766621500014766 xustar0030 mtime=1608196928.938896744 30 atime=1678814326.421984131 30 ctime=1678814321.285954881 lasso-2.8.2/tests/data/ca3-la/0000755000175000017500000000000013766621500020313 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tests/data/ca3-la/PaxHeaders/jks.keystore0000644000000000000000000000013213766621500017421 xustar0030 mtime=1608196928.938896744 30 atime=1678098071.353499746 30 ctime=1678814321.285954881 lasso-2.8.2/tests/data/ca3-la/jks.keystore0000644000175000017500000000235613766621500022677 0ustar00bdauvergnebdauvergne00000000000000þíþíAentr'ouvert liberty alliance test root certification authority #3þWÂ_·X.509t0‚p0‚X 0  *†H†÷ 0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #310U Entrouvert0 040813103640Z 290404103640Z0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #310U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚¢”ZàOÕ½WuG“eI·¬’3´¬${š )Û4ó·ÏΙíp’þôhCÍ—TbiÛ”Ã.öÝWå¬;fèÝ#«%¶æ?jÒåÄÛ%iYA‰›Ê 5ñŒ™²ç%¹|ŸKF_wj_òŸßsG„º…åx8_¿–ù .÷kŒ´©ÐšÈ‚' ›û¶éEðÁ‹kpHv—%&‰mfúƒÒ41?ØÛpø`[ÑçMdo Áóûá 8]Gwì¨a3‰Ê°.ŽhbláLÍ‚Œw^ ÷òûÚ¹ÿÕ9›ûŠdöè#®U²ºœ;PT²3<0··ŽÞP\RíóüÍ£‚C0‚?0U“_¥íù»•â.«­Ÿ»ê*A‘ 0U#0€“_¥íù»•â.«­Ÿ»ê*A‘ 0Uÿ0ÿ0 U0*U%#0!+ +‚7  `†H†øB0 `†H†øB0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0P `†H†øB CAEntr'ouvert Liberty Alliance test Root Certification Authority #30  *†H†÷ ‚&üfŸ®pÌW±,(j¤œ ÓÌ‚2\}Ý«à¨#^Èâ)´ù±Öí,Ú¥°# ¥í‡Á/ûÑÔL+i¨&üeTµ€Þ±F \›¡N1¹ó‡7‚| ñðŒ‰³‡¶Hþ{ØJÓ–-§W4¹†j•V~cr:HBrÊÀ¬ÿ¥þh*H¤9fìñ*£¤í¨Wº¦Ž ”˜¹y…ëÍ’"‰>pus­Öa±h5~i›‹L›ÁMØr<»çFÜ'` ì·×¼¥Hå åe8Œ‡(ñà§© øŒ)·ÿc(貎®X!†¾&‡±bÕþÓ1ðié¶îùmx5¿}Óó÷CÉ™Ó>‹ÞOðÎCNнšy@¢nÞlasso-2.8.2/tests/data/ca3-la/PaxHeaders/certificate.pem0000644000000000000000000000013213766621500020030 xustar0030 mtime=1608196928.938896744 30 atime=1678098071.353499746 30 ctime=1678814321.281954858 lasso-2.8.2/tests/data/ca3-la/certificate.pem0000644000175000017500000000307613766621500023306 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN CERTIFICATE----- MIIEcDCCA1igAwIBAgIBADANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJGUjE0 MDIGA1UEAwwrRW50cm91dmVydCBMaWJlcnR5IEFsbGlhbmNlIHRlc3QgUm9vdCBD QSAjMzETMBEGA1UECgwKRW50cm91dmVydDAeFw0wNDA4MTMxMDM2NDBaFw0yOTA0 MDQxMDM2NDBaMFgxCzAJBgNVBAYTAkZSMTQwMgYDVQQDDCtFbnRyb3V2ZXJ0IExp YmVydHkgQWxsaWFuY2UgdGVzdCBSb290IENBICMzMRMwEQYDVQQKDApFbnRyb3V2 ZXJ0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAopQBWuBPGtW9V3VH k2VJt4GsBJIztKwHJHuaCSnbNPO3Ac/Ome1wkv4d9GhDzQaXVBViaduUwy723Vfl rDtm6N0jq48PJbYa5j9qHdLlGsTbJWlZQRERiZsEygo18YyZsucluXwcn0tGX3dq X/Kf33NHhLqF5Xg4X7+W+QoJLvdrjLSp0JrIgicKm/u26UXwwYtrcEh2lyUmABuJ bWYC+oPSNBAxP9jbcPhgW9ER501kbxUKwfP74SA4XUd37KhhM4nKsC6OnWhibOFM zYKMd14KBB738vvauf+QCNU5mxP7nY2KZPboI65VsrqcO1BUsjM8MLe3jt5QXFLt A/P8zQIDAQABo4IBQzCCAT8wHQYDVR0OBBYEFJNfpe35u5XiGi6Qq62fu+oqQZEL MB8GA1UdIwQYMBaAFJNfpe35u5XiGi6Qq62fu+oqQZELMA8GA1UdEwEB/wQFMAMB Af8wCwYDVR0PBAQDAgEGMCoGA1UdJQQjMCEGCCsGAQUFBwMBBgorBgEEAYI3CgMD BglghkgBhvhCBAEwEQYJYIZIAYb4QgEBBAQDAgEGMCYGA1UdEQQfMB2GG2h0dHA6 Ly9sYXNzby5lbnRyb3V2ZXJ0Lm9yZzAmBgNVHRIEHzAdhhtodHRwOi8vbGFzc28u ZW50cm91dmVydC5vcmcwUAYJYIZIAYb4QgENBEMWQUVudHInb3V2ZXJ0IExpYmVy dHkgQWxsaWFuY2UgdGVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICMz MA0GCSqGSIb3DQEBBQUAA4IBAQAm/GYIn64PcMxXsSwoaheknCDTzIIyXH3dq+Co I17I4im0+bED1u0s2qWwIwul7YfBLwf70dRMK41pqCb8ZQhUtYAb3rFGDFyQm6FO MbnzhzeCfA3x8IyJs4e2SP572ErTBA6WLQKnVzSNBLmGapVWfmNyOp1IQnLKwKz/ pf5oKkikOWbs8SqjpBqd7aiBV7qmjqCUmLl5hevNkiKJPnB1cwOt1mGxaDUHfmmb i0ybwU3Ycjy750bcJ2AM7LfXvKVI5RkK5WU4jIco8eCnqSAa+Iwptxz/YygO6LKO rlghhr4mh7Fi1f4X0xgxGY/waem27vltAXg1v33T8/dDyZnT -----END CERTIFICATE----- lasso-2.8.2/tests/data/PaxHeaders/idp1-la0000644000000000000000000000013213766621500015155 xustar0030 mtime=1608196928.938896744 30 atime=1678814326.421984131 30 ctime=1678814321.325955108 lasso-2.8.2/tests/data/idp1-la/0000755000175000017500000000000013766621500020502 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tests/data/idp1-la/PaxHeaders/metadata.xml0000644000000000000000000000013213766621500017534 xustar0030 mtime=1608196928.938896744 30 atime=1678098071.389500029 30 ctime=1678814321.325955108 lasso-2.8.2/tests/data/idp1-la/metadata.xml0000644000175000017500000000551113766621500023006 0ustar00bdauvergnebdauvergne00000000000000 https://idp1:1998/singleSignOn http://projectliberty.org/profiles/brws-art http://projectliberty.org/profiles/brws-post https://idp1:1998/singleLogout https://idp1:1998/singleLogoutReturn http://projectliberty.org/profiles/slo-idp-soap http://projectliberty.org/profiles/slo-idp-http http://projectliberty.org/profiles/slo-sp-soap http://projectliberty.org/profiles/slo-sp-http https://idp1:1998/federationTermination https://idp1:1998/federationTerminationReturn http://projectliberty.org/profiles/fedterm-idp-soap http://projectliberty.org/profiles/fedterm-idp-http http://projectliberty.org/profiles/fedterm-sp-soap http://projectliberty.org/profiles/fedterm-sp-http https://idp1:1998/registerNameIdentifier https://idp1:1998/registerNameIdentifierReturn http://projectliberty.org/profiles/rni-idp-soap http://projectliberty.org/profiles/rni-idp-http http://projectliberty.org/profiles/rni-sp-soap http://projectliberty.org/profiles/rni-sp-http http://projectliberty.org/profiles/nim-sp-http https://idp1:1998/soapEndpoint lasso-2.8.2/tests/data/idp1-la/PaxHeaders/public-key.pem0000644000000000000000000000013213766621500020001 xustar0030 mtime=1608196928.938896744 30 atime=1678098071.393500059 30 ctime=1678814321.325955108 lasso-2.8.2/tests/data/idp1-la/public-key.pem0000644000175000017500000000070313766621500023251 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyGhotVOjmA+Plan0bIUu lvlkHXMv2oYpmnk5y3XSnUnMBk+SPkApGBwvs5dayOI6kcoAVbVYSOLX/LbP/0Bc iJGryalFVgsoyn1PpOCOsj74EY8y5uAVeDfyOwHBigXKfHZM7+jDkBnh8+oAAQ9u 2090WXhH1WnHC2nag9KLh/lvHMTmOdSmNHt/bD62TrKazvWnqEZKY+Vjub/Fwau6 3MJXFSyWkE6PQjJzHUEfqDCLDd78BraMyaD8bflqSafKj0k1nBj0sW3xPU8o69P0 8eQ4dKVwwE70P2+KdZkW1tyGKUdbM7cMEZg0A0PjoHOskjbImp9xdwDYg/bYaW6r 3QIDAQAB -----END PUBLIC KEY----- lasso-2.8.2/tests/data/idp1-la/PaxHeaders/jks.keystore0000644000000000000000000000013213766621500017610 xustar0030 mtime=1608196928.938896744 30 atime=1678098071.389500029 30 ctime=1678814321.325955108 lasso-2.8.2/tests/data/idp1-la/jks.keystore0000644000175000017500000001130413766621500023057 0ustar00bdauvergnebdauvergne00000000000000þíþílassoþWÀ[Ô0‚þ0 +*‚ê;Þ?"Iäw÷˜Ùá¾BtpAæUúâÓ{Aef7ÇÈëiçÞÉõåzë<-Ðý »j¹+*ŠúY«§0sâ'òôMN?W¼Ç„ Mv2…oê8V…½ ®ndü‚Ú^‚»wl¿FÁ“UÌŸí(ôñ¸6Æ€2«ð /}¿îÅïƒ …9cPQ­ø“êZuñàÿD)|w³uŪÇÌ• D·mäP ÖÝõ5H%±@#ùFn$·™Dã³Âùv%¦“ç´tJSP°bV+زgŠR`zŠd°•2ü2+—oKzVµˆæo€A¥ j¬vJL2~ž³áâõÌ3ÉòXg> –e·¨ï¤y£úskŽ)›4T~·xi"Íä‘aD='šÚ¶¨ôbÛ g¼#—pL“ÀܰaÄår L€s1iˆ$%ñ€Óý_¾—Àï0,%J¿yûÙ»Db²üL¯pÂÁEª#8ŠyëëÇ⥇€šáëáÚ Ì û5"µÿS³BWÑé¶ñâŠèÈV‘NSIo˜ÃÓ‰¤±4¤·å Ô-.WõgçÓ[zÛhQ\Y/¥¡µÞÖ,´¿/I”'aSpº*EB( Ï}QÃÞbàl!rßÑ>"ÒIg†ï+Y3=w‚òÄä9×yK&ŽÝœºíΤ ÙçÙ'' WAbB½Rºvg!Q&—¥ , Ïô™¤ío3ø”ÓtaHŸl¿Á4ã4ŽÕ‚ò@fîtk´WH~ïøNˆÚ8—l õNgKÅ7â!>Çy›„êŒjh_c8h  ×XâòHs]f@d_¦Þ#aÜ~˜ïWÔôÌØnS7  ÊœéF êF_œOz~Íl²Ûõ˜×]ºð`M*T•!Öéï3 |Î9so]©CÓÔìA,kýÞTtY¦Z'Ù^;A†=úç¼­8A®8/Îáî¶©“›¼®_l).ÄfÍ;fŠkÀìdëóG2|ŠQÄ»0UÓîª&òÍlŒ§‚k.?ºÐ/Áe¯É[Ö{{Àì ŒLÒ¨R¾œUGÊŠÛU¤Ïp®”Ñõó÷ñ³7Aÿ@d B ÒQÌ‹ðëlÔð“çÁ(V›#3á;ÆÚÇðÒÐa>ˆHÏåbiB‚¬¤ ®¡-uÇ *0ù¸‘†9¶<¡Òÿq#¸"ulÍY—c_ÙÑ Ö¯ºË£`M¢‚qö(A|´›VDãL+sóÜê¸ É=Ícƒˆ†Ë­PQ é8 (Góû\Fx—a÷[“"ñß jÅËP‚kü{Øùé5Î¥5–³,@ý··•»yTŽR¶€ëò ˲š¦ìù«’elèGhØw"1]eïÌt‘: ¦—QÊ#k£ßR0DrŒõ¦a—3}òýfHë„OoX.509/0‚+0‚ 0  *†H†÷ 0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #110U Entrouvert0 040813104422Z 240814104422Z011 0 Uidp110U  Entrouvert1 0 UFR0‚"0  *†H†÷ ‚0‚ ‚ÈhhµS£˜•©ôl….–ùds/Ú†)šy9ËuÒIÌO’>@)/³—ZÈâ:‘ÊUµXHâ×ü¶Ïÿ@\ˆ‘«É©EV (Ê}O¤à޲>ø2æàx7ò;ÁŠÊ|vLïèÃáóênÛOtYxGÕiÇ iÚƒÒ‹‡ùoÄæ9Ô¦4{l>¶N²šÎõ§¨FJcåc¹¿ÅÁ«ºÜÂW,–NB2sA¨0‹ Þü¶ŒÉ ümùjI§ÊI5œô±mñ=O(ëÓôñä8t¥pÀNô?oŠu™Ö܆)G[3· ˜4Cã s¬’6ÈšŸqw؃öØin«Ý£‚%0‚!0UºÓ>"L¤Ë—D¨Á 8ÄßBç¿|0U#0€=QHÜ3÷Â4ïØþ$Ò¿ØZˆ0 Uÿ00 U€0U%0++0 `†H†øB€0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0B `†H†øB 53Entrouvert Liberty Alliance IDP #1 test certificate0  *†H†÷ ‚\×3j3Ù–"›\$WQLkóèè´¡ê\Šƒè£F¾ªð”¡1jä…ñz@*¦ü†«÷=fø©æ5$I±[Eº9®·rGs½9nt"q)Ä|øXÅöõXœ ~À&€1GÄWÁ+¶ƒ´øWQÛ¶\ŸÁŒeâM÷~,Uý’"Éz/-_I n$ú2Ù€ó8‰Šk¹È¨t|ƒSYøØì»ÑÜ& g˜‘bT}û–tL X'C|€™ã ‰#–Æ­pÔ»T R„úä7EŠ+{ .xMÎP8êÇqüë7Lv@-¨!ùêšïòM_ÞÓNoÒ½ž£f3/ï™·/E©ÄóX.509t0‚p0‚X 0  *†H†÷ 0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #110U Entrouvert0 040813103637Z 290404103637Z0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #110U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚¼½PæôÝŠ¹…¨•KÎÈYÉñbKèËFG¯œæ¡-aòÚW¦äô×?}Ø8 âvO•“žä'µ œÔ JpF!iuÝf°5lϾ-o 9ºÙËÄ?^s_®ì([xcÑ«½æ ÚÁ‘3¥W]O(µΩ®‡§jy¢'h¤ … RKsÇ€ íUD½š†8XJKõžY[çmèv„‰˜>Ð}Äf-Ô~a˜x“ÂhA3Ÿ·AuIÑMgx›Ry-ˆoê {Œ‹":6l£5dfüº¥_‰`K„Üd=ž#QºËýƒa l¼ŒŒêšYÝ3ì¦M$«ç Jæ"K>¡T MÅt×VWC{&74 ÍÅŽÚëZhòîÎS™Å”†G(9¤»ä3tÖíú”´Ä ÇžAü/Æ0 p‡Bîô˜ Û0ÑM;œÊPÿßX—wcÑHý1Ünb„Û5®²’úø”ü§¤·[A;_tæ7>Ko„ vOt\|·Ú3¶ˆ¦o(`ïá?LbÁÏ ¹¨i}ÅúzÞðAentr'ouvert liberty alliance test root certification authority #1þW¿¾íX.509t0‚p0‚X 0  *†H†÷ 0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #110U Entrouvert0 040813103637Z 290404103637Z0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #110U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚¼½PæôÝŠ¹…¨•KÎÈYÉñbKèËFG¯œæ¡-aòÚW¦äô×?}Ø8 âvO•“žä'µ œÔ JpF!iuÝf°5lϾ-o 9ºÙËÄ?^s_®ì([xcÑ«½æ ÚÁ‘3¥W]O(µΩ®‡§jy¢'h¤ … RKsÇ€ íUD½š†8XJKõžY[çmèv„‰˜>Ð}Äf-Ô~a˜x“ÂhA3Ÿ·AuIÑMgx›Ry-ˆoê {Œ‹":6l£5dfüº¥_‰`K„Üd=ž#QºËýƒa l¼ŒŒêšYÝ3ì¦M$«ç Jæ"K>¡T MÅt×VWC{&74 ÍÅŽÚëZhòîÎS™Å”†G(9¤»ä3tÖíú”´Ä ÇžAü/Æ0 p‡Bîô˜ Û0ÑM;œÊPÿßX—wcÑHý1Ünb„Û5®²’úø”ü§¤·[A;_tæ7>Ko„ vOt\|·Ú3¶ˆ¦o(`ïá?LbÁÏ ¹¨i}ÅúzÞðÞn’B´p_¯¤âØs¹({W[lasso-2.8.2/tests/data/idp1-la/PaxHeaders/certificate.pem0000644000000000000000000000013213766621500020217 xustar0030 mtime=1608196928.938896744 30 atime=1678098071.389500029 30 ctime=1678814321.325955108 lasso-2.8.2/tests/data/idp1-la/certificate.pem0000644000175000017500000000274113766621500023473 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN CERTIFICATE----- MIIEKzCCAxOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJGUjE0 MDIGA1UEAwwrRW50cm91dmVydCBMaWJlcnR5IEFsbGlhbmNlIHRlc3QgUm9vdCBD QSAjMTETMBEGA1UECgwKRW50cm91dmVydDAeFw0wNDA4MTMxMDQ0MjJaFw0yNDA4 MTQxMDQ0MjJaMDExDTALBgNVBAMTBGlkcDExEzARBgNVBAoTCkVudHJvdXZlcnQx CzAJBgNVBAYTAkZSMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyGho tVOjmA+Plan0bIUulvlkHXMv2oYpmnk5y3XSnUnMBk+SPkApGBwvs5dayOI6kcoA VbVYSOLX/LbP/0BciJGryalFVgsoyn1PpOCOsj74EY8y5uAVeDfyOwHBigXKfHZM 7+jDkBnh8+oAAQ9u2090WXhH1WnHC2nag9KLh/lvHMTmOdSmNHt/bD62TrKazvWn qEZKY+Vjub/Fwau63MJXFSyWkE6PQjJzHUEfqDCLDd78BraMyaD8bflqSafKj0k1 nBj0sW3xPU8o69P08eQ4dKVwwE70P2+KdZkW1tyGKUdbM7cMEZg0A0PjoHOskjbI mp9xdwDYg/bYaW6r3QIDAQABo4IBJTCCASEwHQYDVR0OBBYEFLrTPiJMpMuXRB6o wQs4xN9C5798MB8GA1UdIwQYMBaAFD1RAUjcM/fCNO/Y/iQY0r8S2FqIMAwGA1Ud EwEB/wQCMAAwCwYDVR0PBAQDAgeAMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEF BQcDCDARBglghkgBhvhCAQEEBAMCB4AwJgYDVR0RBB8wHYYbaHR0cDovL2xhc3Nv LmVudHJvdXZlcnQub3JnMCYGA1UdEgQfMB2GG2h0dHA6Ly9sYXNzby5lbnRyb3V2 ZXJ0Lm9yZzBCBglghkgBhvhCAQ0ENRYzRW50cm91dmVydCBMaWJlcnR5IEFsbGlh bmNlIElEUCAjMSB0ZXN0IGNlcnRpZmljYXRlMA0GCSqGSIb3DQEBBQUAA4IBAQBc 1zMdajPZliKbXCRXGZ1RTBVr8+jotKHqXIqD6BGjRr6q8JShMWrkhfF6QCqmB/wb hqv3PWb4G6nmNSRJsVtFujmNrrdyR3O9OW50InEpxHwV+A+QWMX29QVYnAt+wCaA MUfEgVfBK7aDtPhXUdu2XJ/BHoxl4k33fixV/ZIiAcl6Ly1fSQluJPoy2YDzOImK a7nIqHR8g1NZBvjY7LvR3J0mC2eYkWJUfQf7lnRMoFgnQ3yAmeMNBokjlhXGrXDU u1QMUoT65DdFA4orewkueE3OUDjqx3H86zdMdkAtqCH5A+qa7/JNX97TG05v0r2e o2YzCC/vmQC3Fi9FqcTz -----END CERTIFICATE----- lasso-2.8.2/tests/data/idp1-la/PaxHeaders/private-key-raw.pem0000644000000000000000000000013213766621500020764 xustar0030 mtime=1608196928.938896744 30 atime=1678098071.393500059 30 ctime=1678814321.325955108 lasso-2.8.2/tests/data/idp1-la/private-key-raw.pem0000644000175000017500000000331513766621500024236 0ustar00bdauvergnebdauvergne000000000000000: idp-jks.keystore 1: lasso 2: changeit -----BEGIN PRIVATE KEY----- MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDIaGi1U6OYD4+VqfRshS6W+WQd cy/ahimaeTnLddKdScwGT5I+QCkYHC+zl1rI4jqRygBVtVhI4tf8ts//QFyIkavJqUVWCyjKfU+k 4I6yPvgRjzLm4BV4N/I7AcGKBcp8dkzv6MOQGeHz6gABD27bT3RZeEfVaccLadqD0ouH+W8cxOY5 1KY0e39sPrZOsprO9aeoRkpj5WO5v8XBq7rcwlcVLJaQTo9CMnMdQR+oMIsN3vwGtozJoPxt+WpJ p8qPSTWcGPSxbfE9Tyjr0/Tx5Dh0pXDATvQ/b4p1mRbW3IYpR1sztwwRmDQDQ+Ogc6ySNsian3F3 ANiD9thpbqvdAgMBAAECggEALsb4EcLo/3g6WoOl8qKPglvJu3oEZGxGT7EWBWCF/YKZJavzBaay MNd7Zt7gKN1tMFRHCbpfVfvk0C7Xk8uxDYt63oItFe1a4xCmw2RKyl4aRvb2uZ76Q+pDFvTM+Otr HOv7/0+EPiFcdTNcNuMkS/pavPtvQOgEtqxJfdVqDh2HnYfIBx7ex7oI5tE1Tag3bx8dpfYThENr XfC04cBkprUreqhFX8TGX2kaWViCo4psfWue+zTYuBhxsu4HfxtgboKM0EqWvh89955KxQ9K1BXu jUXPO0Ai6lpNlWrXsJ0KP6Mf9crzGN8OLuCU3dC/rzDzpddNoO6ATVy0NP8dYQKBgQDwcDw8aWBN nxoUttizKBXQq5QpSU0+Bot3E8O97/ETnCZjyGtNuB0vUqqZY9mFmFu/y8medR86FRSA9nbNA57L 4oCb7sCgdOq9zC2QM3BfTeaTXQkFS8QuwfuBzIFdANVufnsZZ74e65a/Ae1zAZQqr1uFE8igwDs7 JyVggv7pZQKBgQDVYOrF6hyFUuClFXUScvvT8H8NUpwtE5VGJI1pw2pzdHVJ6G5YBdPbAQcgY9Kb jOjtEOnL+XQL2VSKIy9/6uWS6w5Utq01v95BmjIB5VJ/6W36dKL0bsdq3DR1HChTV2VqOlSSpXuQ YzzVQEh4YQ8tiozlIFYQDZv5LLzS/tTNGQKBgQDU88MWCorGFP1njU6+1ukDaYQPUSH9ppRNgg7j IinWIX4K8I7BRilrKX953erhnUDdzaOkGb3vlo4Tbrdn+yXhFJquATdQplzmf3l3d2e2sWtf542+ yA1ZEGwu2S9WbQ+cDp/+r1i/UA+y2wUw0Bwn9ipL4mrWnYuYZ6J+KWeW1QKBgFZyMEtEYI+nFvnq qoZx7RJdMav9FuawM166ekwp7lueB9KMhv/ERKNKVE/MAUwhl1BL9Nw9UMVoI/be8GR7jsypzCGH 7L6E4A9l3/KirHzD3lmEnWw34TSqx9nWMYQqOR0DSrYqste5TLD8nR+f+t0xb4l4Q0W3rcQSWuGE ekQpAoGBAOKuwo0CGKgErHnlI2m1FhP7uCVCYKU1WZL1Jxvzktym9EzuiQfNKP8i7ahftIOAwZsL tB/ZoENp38zgLUHfoJ7DUFrv7N6npWy7DQenHr7EqxuV+S4b5Qex2S7hg1EGaIr7TP1VuYJM/Sfs YkOXUr/24CxZ3GyaVYN+Kr/HZg/i -----END PRIVATE KEY----- lasso-2.8.2/tests/data/PaxHeaders/sp1-la0000644000000000000000000000013213766621500015023 xustar0030 mtime=1608196928.958896909 30 atime=1678814326.421984131 30 ctime=1678814321.469955928 lasso-2.8.2/tests/data/sp1-la/0000755000175000017500000000000013766621500020350 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tests/data/sp1-la/PaxHeaders/metadata.xml0000644000000000000000000000013213766621500017402 xustar0030 mtime=1608196928.958896909 30 atime=1678098071.521501064 30 ctime=1678814321.469955928 lasso-2.8.2/tests/data/sp1-la/metadata.xml0000644000175000017500000000550313766621500022655 0ustar00bdauvergnebdauvergne00000000000000 https://sp1:2006/assertionConsumer https://sp1:2006/singleLogout https://sp1:2006/singleLogoutReturn http://projectliberty.org/profiles/slo-idp-soap http://projectliberty.org/profiles/slo-idp-http http://projectliberty.org/profiles/slo-sp-soap http://projectliberty.org/profiles/slo-sp-http https://sp1:2006/federationTermination https://sp1:2006/federationTerminationReturn http://projectliberty.org/profiles/fedterm-idp-soap http://projectliberty.org/profiles/fedterm-idp-http http://projectliberty.org/profiles/fedterm-sp-soap http://projectliberty.org/profiles/fedterm-sp-http https://sp1:2006/registerNameIdentifier https://sp1:2006/registerNameIdentifierReturn http://projectliberty.org/profiles/rni-idp-soap http://projectliberty.org/profiles/rni-idp-http http://projectliberty.org/profiles/rni-sp-soap http://projectliberty.org/profiles/rni-sp-http http://projectliberty.org/profiles/nim-sp-http https://sp1:2006/soapEndpoint true Name of the organization lasso-2.8.2/tests/data/sp1-la/PaxHeaders/public-key.pem0000644000000000000000000000013213766621500017647 xustar0030 mtime=1608196928.958896909 30 atime=1678098071.521501064 30 ctime=1678814321.469955928 lasso-2.8.2/tests/data/sp1-la/public-key.pem0000644000175000017500000000070313766621500023117 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6d9cXr4Jv3bnr8iQVAR2 Hw+SNYK+hiuHM2QBr+OWDwR5pEiQxdfTa6AZtpXDOpKGIA7Diu/eJU7/wEORw0cS 3OZDkkpfzS8RosJBA8lUWuStcHk57YjvROGEyWPIUar0vm3hD2mjX+NLmS/TkXHR /fhSC9K9BwT52rtq6IRdQBEmkZGBsYpLvUx0GqHevOGYTNTC/25uBhtQvxIQFkfk 6OBnz5q0gbBQEY94FbNwEaa7i7WnfDxdsu3Eggrf4Y6eUx7M6WbheZAEHK47zpWz ab19qKVQyLggxzqEG+U6+wi4oy+NQfevmH/yqH/dQ1yq4a5MpQ08ammbYU9YqIwi 8QIDAQAB -----END PUBLIC KEY----- lasso-2.8.2/tests/data/sp1-la/PaxHeaders/jks.keystore0000644000000000000000000000013213766621500017456 xustar0030 mtime=1608196928.958896909 30 atime=1678098071.521501064 30 ctime=1678814321.465955906 lasso-2.8.2/tests/data/sp1-la/jks.keystore0000644000175000017500000001130113766621500022722 0ustar00bdauvergnebdauvergne00000000000000þíþílassoþWÀ_0‚ý0 +*‚éºÐ~®§M>FÖ„Š'x“”Ž'¥7Ý(˜²áè`C±h0zƒö‰(¼ñŽ¡6Èí‘‘ô]½Î•dÖßñ{ØÇ«fÊÿâÑZíçH;À5p¾÷Ý;çD;õ&BÃ$vXô;œUÉd@ŒÐmóÉ’Ú…¸º«V8ÿ²=?­ƒØ¥AJб¨Í4¡ñ¤þbè®§FÀ£å“(÷1`Ý`ƒrÿë¡QàbVò|‚d·I›~(:iäÝw¨ÖJ±0dæŠ0‡&^ £‰s{àîà›ÿ%?l¸U`j½{®nø‡)h6qÒýѺZƒ_å‹+qVƒmìx8VÔN¯3EŒV¾ƒ^’–¢›2¾þ›ccœdt¦[L½â4šÆÆw„RCK6`Š©^²à¼u9ÞbïR­dãzü¹qünwm=ܰå ®¿v±:Æç‰:ö¦Z¤ªÓ¸ÆaÏå]x—À`Á!WXg9ªù÷Lï.Nm€¾ÊYÓÏ¢iý5îj<:Ô#ëþÕÇp@Åìi¹ÁòiÚ\àð„µyWA·ÿ­q±ÑÊ)Ѝ_aHÐããûÊ{Êûæ‰FDáÌž8áŽ\tJðù-J¾m÷0ÿ:§ HóâŽ[³(Êð°æ3—Ú–är^™ìlàkHßù†Ê¶Uj4aéc§sâ¬M÷ÚŸÌ¡ÀsGëÉÝëµ<Éy¨Ùè>ŽoxËïÞ¶I …-¿~ɼ2ÆjQšÚÓ&Êa(MVk áèºÄ• kEàûBªêÆJƒƒŸª KVC³”albÚñ òâêÖ;8¾Íø'³/;S?±f1+>—ˆÅ&â·zö_ÁÙ}ŠÈàßöíácplKPs„mVÓ·Ç ‰r”¨Ì›/Õsí‚AÂ/›À‚®‡'ù’ 'ôêÔëÞCsjrƬÀaS/ã²a”YÄkkB¤š÷tÈ!®³Döª˜Û®e…™Ù›ðoÈ’.IAÞ~èù/AeH!÷%‘bZÕ玉êXóÛ?u>,=œjƒ’Êÿ!7ªt’œ¸µ.<ÉŠÌ'¯¬‘žÄà]wg:·TD阇2æb&¾u\b8‚L;´-Ò„³YÄè,x)äe@¤°qf‘!‹räë•¶äf­.VÎ,„ö§Þû6ÖE—´Û:Ám›™ªøDl˜–½æáv84uX…-„Íâ‚ÿ!â›&ˆ‹ÉÑÔæãgOhäL‚|†Öÿä‡ßküdyÓUXs¦[HÐ}Êž•a‡ƒAQŸ•³! ¾ŸDýð|¶¯·~˜mx~ç”ë´:‘Î6Ç¡6tƒx{°k?”ã¢U¿ó¸÷Ǿ°úòü±îiÀOṮR-AEQý“üºµ%8¦#ÌŸ •«#Ônfö‹¾A2¾ÂeÓ(z‰*Ú%®D®†yœðÿb§Ì-dÎt.7OªPÏ0/UYuI Èøa“;µÎ|dÝSÇiþP9­_er÷k9]4Ó|]I"È1Æ-£Z‘ß3üíßv¾ÊÔ¬aß=œjZ.¹‹ š–IÐALÐd&þí ƒiu |ܸl‘vBößí†0~áà§tO»bÕJi”ÆÙÊ`]î7±šÊRl-ön('c 2.{‹®ÇX.509-0‚)0‚ 0  *†H†÷ 0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #110U Entrouvert0 040813104423Z 240814104423Z001 0 Usp110U  Entrouvert1 0 UFR0‚"0  *†H†÷ ‚0‚ ‚éß\^¾ ¿vç¯ÈTv’5‚¾†+‡3d¯ã–y¤HÅ×Ók ¶•Ã:’† ÊïÞ%NÿÀC‘ÃGÜæC’J_Í/¢ÂAÉTZä­py9íˆïDá„ÉcÈQªô¾mái£_ãK™/Ó‘qÑýøR Ò½ùÚ»jè„]@&‘‘±ŠK½Lt¡Þ¼á˜LÔÂÿnnP¿GäèàgÏš´°Px³p¦»‹µ§|<]²íÄ‚ ß᎞SÌéfáy®;Ε³i½}¨¥Pȸ Ç:„å:û¸£/A÷¯˜ò¨ÝC\ªá®L¥ Ô©õÕA³r»ÿ ÿ]°_†Q0U#0€=QHÜ3÷Â4ïØþ$Ò¿ØZˆ0 Uÿ00 U€0U%0++0 `†H†øB€0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0A `†H†øB 42Entrouvert Liberty Alliance SP #1 test certificate0  *†H†÷ ‚Ë GÜÚå¶ÍÊ)ûúš F©ùŠrøpNpÄ–BêhÓsÙÿ93¶v?gãÊo3ȦªÖzìÕÜòü½î ÄïšžÈ.;_˜–ÖÊuÆtNܶMÎ…,‚ÑŽè º@Dë8TMº—Yw;‘¥gv>•lì´Š«Ñ’вv'¡«÷¹{”À°ÉwíüÖ²›©’^Tš S.|£Ÿ=¬ôN'k¡Lk-MÑÏü%­©_«ísœ&óž¥ß)3—ŽRûìûžoL€ÍJehQ”oàw€ k\í*ŒŠùýÇ"ZpK<ŸÄ=™(µŠ}q¯Ú_¹bgX.509t0‚p0‚X 0  *†H†÷ 0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #110U Entrouvert0 040813103637Z 290404103637Z0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #110U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚¼½PæôÝŠ¹…¨•KÎÈYÉñbKèËFG¯œæ¡-aòÚW¦äô×?}Ø8 âvO•“žä'µ œÔ JpF!iuÝf°5lϾ-o 9ºÙËÄ?^s_®ì([xcÑ«½æ ÚÁ‘3¥W]O(µΩ®‡§jy¢'h¤ … RKsÇ€ íUD½š†8XJKõžY[çmèv„‰˜>Ð}Äf-Ô~a˜x“ÂhA3Ÿ·AuIÑMgx›Ry-ˆoê {Œ‹":6l£5dfüº¥_‰`K„Üd=ž#QºËýƒa l¼ŒŒêšYÝ3ì¦M$«ç Jæ"K>¡T MÅt×VWC{&74 ÍÅŽÚëZhòîÎS™Å”†G(9¤»ä3tÖíú”´Ä ÇžAü/Æ0 p‡Bîô˜ Û0ÑM;œÊPÿßX—wcÑHý1Ünb„Û5®²’úø”ü§¤·[A;_tæ7>Ko„ vOt\|·Ú3¶ˆ¦o(`ïá?LbÁÏ ¹¨i}ÅúzÞðAentr'ouvert liberty alliance test root certification authority #1þW¿ÍX.509t0‚p0‚X 0  *†H†÷ 0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #110U Entrouvert0 040813103637Z 290404103637Z0X1 0 UFR1402U +Entrouvert Liberty Alliance test Root CA #110U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚¼½PæôÝŠ¹…¨•KÎÈYÉñbKèËFG¯œæ¡-aòÚW¦äô×?}Ø8 âvO•“žä'µ œÔ JpF!iuÝf°5lϾ-o 9ºÙËÄ?^s_®ì([xcÑ«½æ ÚÁ‘3¥W]O(µΩ®‡§jy¢'h¤ … RKsÇ€ íUD½š†8XJKõžY[çmèv„‰˜>Ð}Äf-Ô~a˜x“ÂhA3Ÿ·AuIÑMgx›Ry-ˆoê {Œ‹":6l£5dfüº¥_‰`K„Üd=ž#QºËýƒa l¼ŒŒêšYÝ3ì¦M$«ç Jæ"K>¡T MÅt×VWC{&74 ÍÅŽÚëZhòîÎS™Å”†G(9¤»ä3tÖíú”´Ä ÇžAü/Æ0 p‡Bîô˜ Û0ÑM;œÊPÿßX—wcÑHý1Ünb„Û5®²’úø”ü§¤·[A;_tæ7>Ko„ vOt\|·Ú3¶ˆ¦o(`ïá?LbÁÏ ¹¨i}ÅúzÞðb/tºn8Ã…·E ]æLóSlasso-2.8.2/tests/data/sp1-la/PaxHeaders/certificate.pem0000644000000000000000000000013213766621500020065 xustar0030 mtime=1608196928.958896909 30 atime=1678098071.521501064 30 ctime=1678814321.465955906 lasso-2.8.2/tests/data/sp1-la/certificate.pem0000644000175000017500000000274113766621500023341 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN CERTIFICATE----- MIIEKTCCAxGgAwIBAgIBAjANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJGUjE0 MDIGA1UEAwwrRW50cm91dmVydCBMaWJlcnR5IEFsbGlhbmNlIHRlc3QgUm9vdCBD QSAjMTETMBEGA1UECgwKRW50cm91dmVydDAeFw0wNDA4MTMxMDQ0MjNaFw0yNDA4 MTQxMDQ0MjNaMDAxDDAKBgNVBAMTA3NwMTETMBEGA1UEChMKRW50cm91dmVydDEL MAkGA1UEBhMCRlIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDp31xe vgm/duevyJBUBHYfD5I1gr6GK4czZAGv45YPBHmkSJDF19NroBm2lcM6koYgDsOK 794lTv/AQ5HDRxLc5kOSSl/NLxGiwkEDyVRa5K1weTntiO9E4YTJY8hRqvS+beEP aaNf40uZL9ORcdH9+FIL0r0HBPnau2rohF1AESaRkYGxiku9THQaod684ZhM1ML/ bm4GG1C/EhAWR+To4GfPmrSBsFARj3gVs3ARpruLtad8PF2y7cSCCt/hjp5THszp ZuF5kAQcrjvOlbNpvX2opVDIuCDHOoQb5Tr7CLijL41B96+Yf/Kof91DXKrhrkyl DTxqaZthT1iojCLxAgMBAAGjggEkMIIBIDAdBgNVHQ4EFgQUMz7UqfXVQbNyu/+g /12wHF8YhlEwHwYDVR0jBBgwFoAUPVEBSNwz98I079j+JBjSvxLYWogwDAYDVR0T AQH/BAIwADALBgNVHQ8EBAMCB4AwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUF BwMIMBEGCWCGSAGG+EIBAQQEAwIHgDAmBgNVHREEHzAdhhtodHRwOi8vbGFzc28u ZW50cm91dmVydC5vcmcwJgYDVR0SBB8wHYYbaHR0cDovL2xhc3NvLmVudHJvdXZl cnQub3JnMEEGCWCGSAGG+EIBDQQ0FjJFbnRyb3V2ZXJ0IExpYmVydHkgQWxsaWFu Y2UgU1AgIzEgdGVzdCBjZXJ0aWZpY2F0ZTANBgkqhkiG9w0BAQUFAAOCAQEAHMsK R9wa2hPlts3KKfv6miBGqfmKH3L4HHBOcMSWQupo03PZ/zkztggcdj9n48pvMx3I pqoI1hV67AXV3BUf8vwFve6gxO+ansguO1+YltbKdcYVdE7ctk2BzoUFfywEgh7R kI7oC7qPQH9EDus4VE26l51ZdzuRpWd2PpVs7LQUihir0ZLQsnYnoav3uXuUwLDJ d+0E/Naym6kbkl5UFZoADVMuGHyjnz2s9E4na6FMaw4tTdHPHvwlralfDqvtc5wm 8xOepX/fKTOXjlL77Pueb0yAzUplaFGUb+B3gAprXAXtKoyK+f3HIlpwSzyfEcQ9 BpkotYp9ca/aX7liZw== -----END CERTIFICATE----- lasso-2.8.2/tests/data/sp1-la/PaxHeaders/private-key-raw.pem0000644000000000000000000000013213766621500020632 xustar0030 mtime=1608196928.958896909 30 atime=1678098071.521501064 30 ctime=1678814321.469955928 lasso-2.8.2/tests/data/sp1-la/private-key-raw.pem0000644000175000017500000000331413766621500024103 0ustar00bdauvergnebdauvergne000000000000000: sp-jks.keystore 1: lasso 2: changeit -----BEGIN PRIVATE KEY----- MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDp31xevgm/duevyJBUBHYfD5I1 gr6GK4czZAGv45YPBHmkSJDF19NroBm2lcM6koYgDsOK794lTv/AQ5HDRxLc5kOSSl/NLxGiwkED yVRa5K1weTntiO9E4YTJY8hRqvS+beEPaaNf40uZL9ORcdH9+FIL0r0HBPnau2rohF1AESaRkYGx iku9THQaod684ZhM1ML/bm4GG1C/EhAWR+To4GfPmrSBsFARj3gVs3ARpruLtad8PF2y7cSCCt/h jp5THszpZuF5kAQcrjvOlbNpvX2opVDIuCDHOoQb5Tr7CLijL41B96+Yf/Kof91DXKrhrkylDTxq aZthT1iojCLxAgMBAAECggEBALf81ohabQTJoH+0A4d1cxAAif+6+fRHrjeJx6H+I4Fw/dl2lR5w Ko2TCGeR7mLX/tidhMx65ILpYV56SeQcuAQ8yo/+Htwm2XL363n1G33eRWwkkqQChGnmGTbuXxuQ qLZfbx1W+AZppIHBFGpp5tAsWS+f/MHW8lFX/EUsTMgmtPTOL5lb5wnC3gRVSn4KSrZ6QhTfKbKu dxNsoDMKVlZIwgKifqbx7cq0sHe9oUkSDdi1pvXKokwwOAup6AU2fQhL0/UtkaAVPNW0z0ypPMmY NZr4m90Dh8QrbkxXRn85At59bVMe9yS9p6/kp4SnydfEl0LxJqc9yJKcntjRWzkCgYEA9rHBYXAa TlthfK+y98txzEfUv2VLd3yASySQkriVmBlVwWUuObgT/+Xbv3OLuy2p3Ss8LT4sUp/zw16GIooR kq0pSQmXMl5Y7dvqP9lvg/UfpF5DCfdsxBjNyMJ95/snDtO3uPFng+w0pUnGcfEyUCP1u+PbCY3U IX3uv6w6+AMCgYEA8rHKAbs363q3BVMQRk9ERwkYt/IJJpKK0QB7+F4cZC8lyzYjBtxldoeB+SPl viHoegZTzXab+/xK6Fe70OtVCLcBa62smGgiDzKWI8WZVT9DwLTg0VItHp3nfbsxJhnaNHu44B6S Pqlmf/p5OyGg1+2Qc2b5kRIqw2HgeeVTqPsCgYBXT4RM0xtMXkU7lwe1cdi93zJp5xT1nifd8HwG obO4WEckooXgwci6SgUjVma/AaNb9sBeluGjAJ+Kpvq8YLdlfUneYrmThxbcYHggzvkL8AaZ6w65 CUwCf3DdvBBJuXcSZVZh63ail0futBS7IQ2YlZGURUmxsPPCQsrsJa3dNwKBgBQffbprBZX21NoS KxVJWUXykSQfY3bZS71MpvrPAtejuSSCVqEpARi036gCu/fp49bKU4SDwyc/og5lx+LowGI6mlmN SvRQHhLYhO5uYepZloqR9NomUCtruFgKf2bDWf5kC845erLLZP5TjF3EygtdXU7USPkoYndU1EIH K8qlAoGAHnxhxF+4Expc3iQWRWhIfD3m28hHM8jAHuXZ9eDWFmQK7vrqb4NBAzu7ExlMtsv1mFPN 0BApqwEbS7dhY9lMvA5bi2gEIKEartE1+gepfOgdqbaV808+S2Ggmd1yEpFosj6ZxjsZtmGU82fW l1Lb5OB09DigVuwuv+ar5pGwly4= -----END PRIVATE KEY----- lasso-2.8.2/tests/data/PaxHeaders/rootCA.srl0000644000000000000000000000013214050545511015706 xustar0030 mtime=1621281609.267307905 30 atime=1678098071.597501661 30 ctime=1678814321.541956338 lasso-2.8.2/tests/data/rootCA.srl0000644000175000017500000000005114050545511021152 0ustar00bdauvergnebdauvergne0000000000000002D3FA5376B8B25617BA76C4EA3AE7FE4AC318B1 lasso-2.8.2/tests/data/PaxHeaders/idp7-saml20000644000000000000000000000013214050545511015577 xustar0030 mtime=1621281609.259307995 30 atime=1678814326.421984131 30 ctime=1678814321.381955427 lasso-2.8.2/tests/data/idp7-saml2/0000755000175000017500000000000014050545511021124 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tests/data/idp7-saml2/PaxHeaders/metadata.xml0000644000000000000000000000013214050545511020156 xustar0030 mtime=1621281609.259307995 30 atime=1678098071.441500437 30 ctime=1678814321.381955427 lasso-2.8.2/tests/data/idp7-saml2/metadata.xml0000644000175000017500000001327214050545511023433 0ustar00bdauvergnebdauvergne00000000000000 MIIDnjCCAoagAwIBAgIBATANBgkqhkiG9w0BAQUFADBUMQswCQYDVQQGEwJGUjEP MA0GA1UECBMGRnJhbmNlMQ4wDAYDVQQHEwVQYXJpczETMBEGA1UEChMKRW50cm91 dmVydDEPMA0GA1UEAxMGRGFtaWVuMB4XDTA2MTAyNzA5MDc1NFoXDTExMTAyNjA5 MDc1NFowVDELMAkGA1UEBhMCRlIxDzANBgNVBAgTBkZyYW5jZTEOMAwGA1UEBxMF UGFyaXMxEzARBgNVBAoTCkVudHJvdXZlcnQxDzANBgNVBAMTBkRhbWllbjCCASIw DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM06Hx6VgHYR9wUf/tZVVTRkVWNq h9x+PvHA2qH4OYMuqGs4Af6lU2YsZvnrmRdcFWv0+UkdAgXhReCWAZgtB1pd/W9m 6qDRldCCyysow6xPPKRz/pOTwRXm/fM0QGPeXzwzj34BXOIOuFu+n764vKn18d+u uVAEzk1576pxTp4pQPzJfdNLrLeQ8vyCshoFU+MYJtp1UA+h2JoO0Y8oGvywbUxH ioHN5PvnzObfAM4XaDQohmfxM9Uc7Wp4xKAc1nUq5hwBrHpjFMRSz6UCfMoJSGIi +3xJMkNCjL0XEw5NKVc5jRKkzSkN5j8KTM/k1jPPsDHPRYzbWWhnNtd6JlkCAwEA AaN7MHkwCQYDVR0TBAIwADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0 ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFP2WWMDShux3iF74+SoO1xf6qhqaMB8G A1UdIwQYMBaAFGjl6TRXbQDHzSlZu+e8VeBaZMB5MA0GCSqGSIb3DQEBBQUAA4IB AQAZ/imK7UMognXbs5RfSB8cMW6iNAI+JZqe9XWjvtmLfIIPbHM96o953SiFvrvQ BZjGmmPMK3UH29cjzDx1R/RQaYTyMrHyTePLh3BMd5mpJ/9eeJCSxPzE2ECqWRUa pkjukecFXqmRItwgTxSIUE9QkpzvuQRb268PwmgroE0mwtiREADnvTFkLkdiEMew fiYxZfJJLPBqwlkw/7f1SyzXoPXnz5QbNwDmrHelga6rKSprYKb3pueqaIe8j/AP NC1/bzp8cGOcJ88BD5+Ny6qgPVCrMLE5twQumJ12V3SvjGNtzFBvg2c/9S5OmVqR LlTxKnCrWAXftSm1rNtewTsF MIIDnjCCAoagAwIBAgIBATANBgkqhkiG9w0BAQUFADBUMQswCQYDVQQGEwJGUjEP MA0GA1UECBMGRnJhbmNlMQ4wDAYDVQQHEwVQYXJpczETMBEGA1UEChMKRW50cm91 dmVydDEPMA0GA1UEAxMGRGFtaWVuMB4XDTA2MTAyNzA5MDc1NFoXDTExMTAyNjA5 MDc1NFowVDELMAkGA1UEBhMCRlIxDzANBgNVBAgTBkZyYW5jZTEOMAwGA1UEBxMF UGFyaXMxEzARBgNVBAoTCkVudHJvdXZlcnQxDzANBgNVBAMTBkRhbWllbjCCASIw DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM06Hx6VgHYR9wUf/tZVVTRkVWNq h9x+PvHA2qH4OYMuqGs4Af6lU2YsZvnrmRdcFWv0+UkdAgXhReCWAZgtB1pd/W9m 6qDRldCCyysow6xPPKRz/pOTwRXm/fM0QGPeXzwzj34BXOIOuFu+n764vKn18d+u uVAEzk1576pxTp4pQPzJfdNLrLeQ8vyCshoFU+MYJtp1UA+h2JoO0Y8oGvywbUxH ioHN5PvnzObfAM4XaDQohmfxM9Uc7Wp4xKAc1nUq5hwBrHpjFMRSz6UCfMoJSGIi +3xJMkNCjL0XEw5NKVc5jRKkzSkN5j8KTM/k1jPPsDHPRYzbWWhnNtd6JlkCAwEA AaN7MHkwCQYDVR0TBAIwADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0 ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFP2WWMDShux3iF74+SoO1xf6qhqaMB8G A1UdIwQYMBaAFGjl6TRXbQDHzSlZu+e8VeBaZMB5MA0GCSqGSIb3DQEBBQUAA4IB AQAZ/imK7UMognXbs5RfSB8cMW6iNAI+JZqe9XWjvtmLfIIPbHM96o953SiFvrvQ BZjGmmPMK3UH29cjzDx1R/RQaYTyMrHyTePLh3BMd5mpJ/9eeJCSxPzE2ECqWRUa pkjukecFXqmRItwgTxSIUE9QkpzvuQRb268PwmgroE0mwtiREADnvTFkLkdiEMew fiYxZfJJLPBqwlkw/7f1SyzXoPXnz5QbNwDmrHelga6rKSprYKb3pueqaIe8j/AP NC1/bzp8cGOcJ88BD5+Ny6qgPVCrMLE5twQumJ12V3SvjGNtzFBvg2c/9S5OmVqR LlTxKnCrWAXftSm1rNtewTsF urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress urn:oasis:names:tc:SAML:1.1:nameid-format:kerberos urn:oasis:names:tc:SAML:1.1:nameid-format:X509SubjectName Entr'ouvert lasso-2.8.2/tests/data/idp7-saml2/PaxHeaders/private-key.pem0000644000000000000000000000013213766621500020625 xustar0030 mtime=1608196928.942896777 30 atime=1678098071.441500437 30 ctime=1678814321.381955427 lasso-2.8.2/tests/data/idp7-saml2/private-key.pem0000644000175000017500000000334613766621500024103 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN RSA PRIVATE KEY----- Proc-Type: 4,ENCRYPTED DEK-Info: AES-256-CBC,41BE9422FBDF1769BFEF03F9116F7A86 qKrThgVCsCb5Lx/7RIpwuvDZi6gvxEFb33QEjIEWdZ+ad0dkGRvxrIqqj+XvHEeW V57oPO1sFAlgb+zBrGZpqItCAJEqC4NU55SwKZpKUtT0XdlHFRyfORlBwzb0qW/3 dZbyhsEm+164MdXsCZiUYS/VAm8b1pYmBIkoPSZMMnPljNYVigRpYttF9dwMYgTQ u/FwRS696qGSyo7ko00P8UbtTLgM+ufkCFNld6uxYphSNXAQyRQz4vQs97emNE58 4JB5//0agCOa9qUz14ZQSpM2JyoevMHUOHyjbGJOLsCMPnQEboKvgj0gsZcgP2Ys K4Nf/EQKadBbXpK4olxz50e6ybR0i7nylYsu7YVFyFR9GWbra29OAYEPvQxvBll7 RIoZ4hI0ZgBY0qFFcyZbKH94Pqk5w0QSjfkHPcH/WL0UjLb+n59KsIUnmZ3dtiF9 9mdE71wq94jOcqibjVmUy3Gyw4COZKTTjq9ptuLBC6fEPxGh6dfpSSV431Wpvpxy OE15vfeT1i/ymH0ckWsQXgUqZ6QTuaTvlu5JpD94Blu7p6Rzj5fxEnLhOtwjXWpq k6MAlS9bKhGbPbnzAqm5HkRypgDaNBPRXZhb9LClB5ysfjZRNdxCWrWusEGEtioQ TdkPsUZ78d8m3u+FvOM2mTVkQBa6sAEl1l8fuOITuaNCYLBIIhyAvJfXRHhOC+zs nvS6DX+3bZupxFJFcMi9fqlmz0QSXj4tKlbHY/xo3dGqQj5BWyibo8tDVhVIYy99 zo/t8J0LTfSSCIvoV2gFHSoC7RIJ9Q25L0AV6TQiB2F/7FTeznfd7Tk9ZHokmiED 5VAKGRjDmPCZIJr2pbeEmwzs3r/p53JfLyNProv+ljTJLgdFtG1en5A3MsmymR0c LTIxHWZjAwl7ai1yGghzqVYllm+OFjo6LsSusbuQwKs+Bo9qZPCBb10gQGur+ZR8 r9Vfd3WV/WMJfi8Ciogd+uXhPzVxf5PyBvZh9vwqXHSB9YLxe+NpAxLxF5OuZmJx VBdTA5y19XUvyucOOxjcJZaZTP6BYADsaUxhQIQHfyUtk6Y7Iwk2Abf4TQIuC5x6 XEeRSmbKPCkuKh9L0H4KcK6hmFSyh7AICpUEW7tcMtK9HaZT/K5jsHPkG5q/3GXh ed7e0QaA2Qc0uAvoFgGTPkgE6Nym30R6NUlnHl2T3gK9Ei6fQKdTYPYgRXAKmbNO Wp0cjQ7w1zUNjoxkACX2Br2xm3DhnLVFPj6AWpnCsTtQA3ecgIzvSZugxpr0muP0 SIPpBuyko+t0YQjP3DOZxeiLQ5o+3VxI749KfDuaNZsDN7ZPso7Pt1oG34uGgsFl UypVEv+CgzTkepPPqJTWgK5VfNrSK3ev7Is90bpiyjwqywlwYaZUOXBm+wBwUmtH T+lLtw00R5JGolA4I2MCd4PTauzbj30jLYJWLLW8sZcfMgpwnKUNtVwRaDMnOXIA eX0cesfIbMiYF1sgR2Lqar/uqSJf1Kx8xIFdvqYZWsudF0ij4fva4xtCc0bgrnSy lz91YgfF95hTd/qcCiO5GQxScG7umtUZLYmZKqtYKDjCkvtvnGFhqB5Ie21DK6OX -----END RSA PRIVATE KEY----- lasso-2.8.2/tests/data/idp7-saml2/PaxHeaders/password0000644000000000000000000000013213766621500017447 xustar0030 mtime=1608196928.942896777 30 atime=1678098071.441500437 30 ctime=1678814321.381955427 lasso-2.8.2/tests/data/idp7-saml2/password0000644000175000017500000000001013766621500022706 0ustar00bdauvergnebdauvergne00000000000000geronimolasso-2.8.2/tests/data/PaxHeaders/ca1-ssl0000644000000000000000000000013213766621500015171 xustar0030 mtime=1608196928.938896744 30 atime=1678814326.421984131 30 ctime=1678814321.265954767 lasso-2.8.2/tests/data/ca1-ssl/0000755000175000017500000000000013766621500020516 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/tests/data/ca1-ssl/PaxHeaders/jks.keystore0000644000000000000000000000013113766621500017623 xustar0030 mtime=1608196928.938896744 29 atime=1678098071.33749962 30 ctime=1678814321.265954767 lasso-2.8.2/tests/data/ca1-ssl/jks.keystore0000644000175000017500000000242513766621500023077 0ustar00bdauvergnebdauvergne00000000000000þíþíLentr'ouvert liberty alliance web server test root certification authority #1þWÂg:X.5090‚Œ0‚t 0  *†H†÷ 0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #110U Entrouvert0 040813103644Z 290404103644Z0c1 0 UFR1?0=U 6Entrouvert Liberty Alliance web server test Root CA #110U Entrouvert0‚"0  *†H†÷ ‚0‚ ‚¶”:…;[ÏOê¦ÉqTÏàýý™[êqÎÓÖ0µ×.U&•ˆ-(¦%líŠW,¿vDbáÓ€ ŸIkWçÚJŸâHÈÁéOz?ÃJKB*”4% üFâqjiO)Má³® 0\Cå¶ÌuÆÞp÷7å•í™ßÅj*x™‡È`Bq´zO„F%½§ÕxtcFU‰ùtó¥9¯Êq4¿(Rî®`‹{„Á\d¡}²P F«¢&”g··fŸÜꪕT xë9ö-mp° nUAZ¶§xÕ}Ô±ŸÐæ”Xb±ý7%õQ¯Ú›ú܉Ò )µ–úø8vuïŸÏ©£‚I0‚E0U)®kvÊ5ÉZ;5ò"B?`á;0U#0€)®kvÊ5ÉZ;5ò"B?`á;0Uÿ0ÿ0 U0*U%#0!+ +‚7  `†H†øB0 `†H†øB0&U0†http://lasso.entrouvert.org0&U0†http://lasso.entrouvert.org0V `†H†øB IGEntr'ouvert Liberty Alliance test web server Certification Authority #10  *†H†÷ ‚6Y‡y×,Kˆêæ2%ýò©d¤àbªÃ¦è¼ó¹mqqÝ÷…P“ë÷ Ò9OÚŸ”Ä}c€€¿¤MTWÈ/™cƒ¸G ³²òK襲I<|Vï®iœ¦·]º¼À˜ÂCP$| ×ïÏØjš§¦ª!µÁ^`({,Zª×i§¥°r ž­¬†žÏõɱóý£*ˆFjg›/ýr°f̰mºÈ=ñÜ€Ü[“I¼–œëÑöµÀ7Ä£H8zg=¿+™4¢³¨dò}êpp j‹¯rÞ=¡LåZGBmK¾ƒ´jy£ÊÄ©ì°"€tJO:Y­ºí”\•ѧÓðÛB{³ŒolXÈ>lasso-2.8.2/tests/data/ca1-ssl/PaxHeaders/certificate.pem0000644000000000000000000000013113766621500020232 xustar0030 mtime=1608196928.938896744 29 atime=1678098071.33749962 30 ctime=1678814321.265954767 lasso-2.8.2/tests/data/ca1-ssl/certificate.pem0000644000175000017500000000314713766621500023510 0ustar00bdauvergnebdauvergne00000000000000-----BEGIN CERTIFICATE----- MIIEjDCCA3SgAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjE/ MD0GA1UEAww2RW50cm91dmVydCBMaWJlcnR5IEFsbGlhbmNlIHdlYiBzZXJ2ZXIg dGVzdCBSb290IENBICMxMRMwEQYDVQQKDApFbnRyb3V2ZXJ0MB4XDTA0MDgxMzEw MzY0NFoXDTI5MDQwNDEwMzY0NFowYzELMAkGA1UEBhMCRlIxPzA9BgNVBAMMNkVu dHJvdXZlcnQgTGliZXJ0eSBBbGxpYW5jZSB3ZWIgc2VydmVyIHRlc3QgUm9vdCBD QSAjMTETMBEGA1UECgwKRW50cm91dmVydDCCASIwDQYJKoZIhvcNAQEBBQADggEP ADCCAQoCggEBALaUOhGFO50YW89P6h2myXFUGM8R4P39mVvqcRrO09YAMLXXLlUm lYgCLSiBpiVs7YpXLL92RGLh04Agn0lrH1fn2kobn+JIyMHpDxpPej/DSktCKpQ0 JSD8RuJxamlPKU3hGLOuAgAJMFxD5bbMdcbecPc35ZXtGpnfxQVqKniZh8hgQnG0 ek+ERiW9pxXVeHRjRlWJ+XTzBaU5r8pxNB6/KFLurmCLGXuEwVxkwqF9slAKRqui JpRnt7dmnxfc6qoFlRFUCXjrOfYtbQFwBxiwoG5VQRZatqd41X3UsZ/Q5pRYYrH9 Nw4l9VGv2pv63IkV0gwptZb6+Dh2de+fz6kCAwEAAaOCAUkwggFFMB0GA1UdDgQW BBQpga5rdso1yVo7NfIOIgZCP2DhOzAfBgNVHSMEGDAWgBQpga5rdso1yVo7NfIO IgZCP2DhOzAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBBjAqBgNVHSUEIzAh BggrBgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMBEGCWCGSAGG+EIBAQQE AwIBBjAmBgNVHREEHzAdhhtodHRwOi8vbGFzc28uZW50cm91dmVydC5vcmcwJgYD VR0SBB8wHYYbaHR0cDovL2xhc3NvLmVudHJvdXZlcnQub3JnMFYGCWCGSAGG+EIB DQRJFkdFbnRyJ291dmVydCBMaWJlcnR5IEFsbGlhbmNlIHRlc3Qgd2ViIHNlcnZl ciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAjMTANBgkqhkiG9w0BAQUFAAOCAQEA NlkWh3nXLO+crkuI6uYyJf3yqQ5kpOBiqsOm6LzzuRxtcXHd94WBgR9Qk+v3DdI5 T9qflAHEfWOAgL+kTVRXyAQvmWODuEcNs7LyHxNL6KWySTx8G1bvrmkRnKYSt126 vMCYEMJDUA8kfKDX78/YapqnpqohtcFeYCh7LB0BG1qq12mnnaWwcgqerQSshp7P 9cmx8/2jKogIgUZqZ5sv/XIasGbMsG26yB898dydgNwGW42TScK8lpzr0fa1AMA3 xKNIOHpnPb8rmTSis6hk8n3qcAQacApqi69y3hk9oUzlWhhHQm1LvoO0anmjysSp 7BqwIo2AdBdKTxA6Wa26FQ== -----END CERTIFICATE----- lasso-2.8.2/PaxHeaders/lasso0000644000000000000000000000013214404126161012765 xustar0030 mtime=1678814321.009953309 30 atime=1678814326.421984131 30 ctime=1678814321.009953309 lasso-2.8.2/lasso/0000755000175000017500000000000014404126161016312 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/lasso/PaxHeaders/keyprivate.h0000644000000000000000000000013214114336625015404 xustar0030 mtime=1630649749.814436864 30 atime=1678814151.112994426 30 ctime=1678814320.041947798 lasso-2.8.2/lasso/keyprivate.h0000644000175000017500000000227614114336625020663 0ustar00bdauvergnebdauvergne00000000000000/* * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2011 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_KEY_PRIVATE_H__ #define __LASSO_KEY_PRIVATE_H__ #include "xml/private.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ LassoSignatureContext lasso_key_get_signature_context(LassoKey *key); LassoKeyType lasso_key_get_key_type(LassoKey *key); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_KEY_PRIVATE_H__ */ lasso-2.8.2/lasso/PaxHeaders/saml-2.00000644000000000000000000000013214404126161014216 xustar0030 mtime=1678814321.113953902 30 atime=1678814326.421984131 30 ctime=1678814321.113953902 lasso-2.8.2/lasso/saml-2.0/0000755000175000017500000000000014404126161017543 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/lasso/saml-2.0/PaxHeaders/Makefile.am0000644000000000000000000000013113766621500016335 xustar0029 mtime=1608196928.79089553 30 atime=1678814114.812792073 30 ctime=1678814321.065953628 lasso-2.8.2/lasso/saml-2.0/Makefile.am0000644000175000017500000000135113766621500021606 0ustar00bdauvergnebdauvergne00000000000000MAINTAINERCLEANFILES = Makefile.in liblassoincludedir = $(includedir)/lasso/saml-2.0 AM_CPPFLAGS = \ -I$(top_builddir) \ -I$(top_srcdir) \ $(LASSO_CORE_CFLAGS) \ -DG_LOG_DOMAIN=\"lasso\" noinst_LTLIBRARIES = liblasso-saml-20.la liblasso_saml_20_la_SOURCES = \ assertion_query.c \ ecp.c \ federation.c \ profile.c \ provider.c \ login.c \ logout.c \ name_id_management.c \ server.c \ saml2_helper.c liblassoinclude_HEADERS = \ assertion_query.h \ ecp.h \ profile.h \ name_id_management.h \ provider.h \ saml2_helper.h lasso_private_h_sources = \ federationprivate.h \ profileprivate.h \ providerprivate.h \ loginprivate.h \ logoutprivate.h \ serverprivate.h \ ecpprivate.h EXTRA_DIST = $(lasso_private_h_sources) lasso-2.8.2/lasso/saml-2.0/PaxHeaders/profileprivate.h0000644000000000000000000000013214114336625017505 xustar0030 mtime=1630649749.818436908 30 atime=1678814151.012993868 30 ctime=1678814321.105953856 lasso-2.8.2/lasso/saml-2.0/profileprivate.h0000644000175000017500000001140514114336625022756 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAML20_PROFILE_PRIVATE_H__ #define __LASSO_SAML20_PROFILE_PRIVATE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "../id-ff/profile.h" #include "../xml/saml-2.0/saml2_name_id.h" #include "../xml/saml-2.0/saml2_encrypted_element.h" #include "../xml/saml-2.0/samlp2_status_response.h" #include "../xml/saml-2.0/samlp2_request_abstract.h" #include "../xml/saml-2.0/saml2_subject.h" #include "../xml/soap-1.1/soap_header.h" #include "../id-ff/provider.h" int lasso_saml20_profile_init_request(LassoProfile *profile, const char *remote_provider_id, gboolean first_in_session, LassoSamlp2RequestAbstract *request_abstract, LassoHttpMethod http_method, LassoMdProtocolType protocol_type); #define lasso_saml20_profile_set_response_status_success(profile, code2) \ lasso_saml20_profile_set_response_status(profile, LASSO_SAML2_STATUS_CODE_SUCCESS, code2) #define lasso_saml20_profile_set_response_status_responder(profile, code2) \ lasso_saml20_profile_set_response_status(profile, LASSO_SAML2_STATUS_CODE_RESPONDER, code2) #define lasso_saml20_profile_set_response_status_requester(profile, code2) \ lasso_saml20_profile_set_response_status(profile, LASSO_SAML2_STATUS_CODE_REQUESTER, code2) int lasso_saml20_profile_set_response_status(LassoProfile *profile, const char *code1, const char *code2); int lasso_saml20_profile_init_artifact_resolve(LassoProfile *profile, LassoProviderRole role, const char *msg, LassoHttpMethod method); int lasso_saml20_profile_process_artifact_resolve(LassoProfile *profile, const char *msg); int lasso_saml20_profile_build_artifact_response(LassoProfile *profile); int lasso_saml20_profile_process_artifact_response(LassoProfile *profile, const char *msg); gint lasso_saml20_profile_set_session_from_dump(LassoProfile *profile); gint lasso_saml20_profile_process_name_identifier_decryption(LassoProfile *profile, LassoSaml2NameID **name_id, LassoSaml2EncryptedElement **encrypted_id); int lasso_saml20_profile_process_soap_request(LassoProfile *profile, const char *request_msg); int lasso_saml20_profile_process_soap_response(LassoProfile *profile, const char *response_msg); int lasso_saml20_profile_process_soap_response_with_headers(LassoProfile *profile, const char *response_msg, LassoSoapHeader **return_header); int lasso_saml20_profile_process_any_request(LassoProfile *profile, LassoNode *request_node, const char *request_msg); int lasso_saml20_profile_process_any_response(LassoProfile *profile, LassoSamlp2StatusResponse *response_node, LassoHttpMethod *response_method, const char *response_msg); int lasso_saml20_profile_setup_request_signing(LassoProfile *profile); int lasso_saml20_profile_build_request_msg(LassoProfile *profile, const char *service, LassoHttpMethod method, const char *url); int lasso_saml20_profile_build_response_msg(LassoProfile *profile, char *service, LassoHttpMethod method, const char *_url); int lasso_saml20_profile_init_response(LassoProfile *profile, LassoSamlp2StatusResponse *status_response, const char *status_code1, const char *status_code2); int lasso_saml20_profile_validate_request(LassoProfile *profile, gboolean needs_identity, LassoSamlp2StatusResponse *status_response, LassoProvider **provider_out); gint lasso_saml20_profile_build_http_redirect_query_simple(LassoProfile *profile, LassoNode *msg, const char *profile_name, gboolean is_response); gint lasso_saml20_profile_build_http_redirect(LassoProfile *profile, LassoNode *msg, const char *url); gint lasso_profile_saml20_setup_message_signature(LassoProfile *profile, LassoNode *request_or_response); gint lasso_saml20_profile_setup_encrypted_node(LassoProvider *provider, LassoNode **node_to_encrypt, LassoNode **node_destination); int lasso_saml20_profile_setup_subject(LassoProfile *profile, LassoSaml2Subject *subject); int lasso_saml20_profile_check_signature_status(LassoProfile *profile); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAML20_PROFILE_PRIVATE_H__ */ lasso-2.8.2/lasso/saml-2.0/PaxHeaders/Makefile.in0000644000000000000000000000013214404125673016347 xustar0030 mtime=1678814139.692930656 30 atime=1678814149.884987564 30 ctime=1678814321.081953719 lasso-2.8.2/lasso/saml-2.0/Makefile.in0000644000175000017500000006404014404125673021623 0ustar00bdauvergnebdauvergne00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = lasso/saml-2.0 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ac_check_class.m4 \ $(top_srcdir)/m4/ac_check_classpath.m4 \ $(top_srcdir)/m4/ac_check_junit.m4 \ $(top_srcdir)/m4/ac_prog_jar.m4 \ $(top_srcdir)/m4/ac_prog_java.m4 \ $(top_srcdir)/m4/ac_prog_java_works.m4 \ $(top_srcdir)/m4/ac_prog_javac.m4 \ $(top_srcdir)/m4/ac_prog_javac_works.m4 \ $(top_srcdir)/m4/ac_prog_javah.m4 \ $(top_srcdir)/m4/ac_try_compile_java.m4 \ $(top_srcdir)/m4/as-compiler-flag.m4 \ $(top_srcdir)/m4/dps_java_check_class.m4 \ $(top_srcdir)/m4/dps_xtra_classpath.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(liblassoinclude_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h \ $(top_builddir)/lasso/lasso_config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) liblasso_saml_20_la_LIBADD = am_liblasso_saml_20_la_OBJECTS = assertion_query.lo ecp.lo \ federation.lo profile.lo provider.lo login.lo logout.lo \ name_id_management.lo server.lo saml2_helper.lo liblasso_saml_20_la_OBJECTS = $(am_liblasso_saml_20_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -I$(top_builddir)/lasso depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/assertion_query.Plo \ ./$(DEPDIR)/ecp.Plo ./$(DEPDIR)/federation.Plo \ ./$(DEPDIR)/login.Plo ./$(DEPDIR)/logout.Plo \ ./$(DEPDIR)/name_id_management.Plo ./$(DEPDIR)/profile.Plo \ ./$(DEPDIR)/provider.Plo ./$(DEPDIR)/saml2_helper.Plo \ ./$(DEPDIR)/server.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(liblasso_saml_20_la_SOURCES) DIST_SOURCES = $(liblasso_saml_20_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(liblassoincludedir)" HEADERS = $(liblassoinclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CHECK_CFLAGS = @CHECK_CFLAGS@ CHECK_LIBS = @CHECK_LIBS@ CLASSPATH_JUNIT = @CLASSPATH_JUNIT@ CLASSPATH_OPT = @CLASSPATH_OPT@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CSHARPCILINTERPRETER = @CSHARPCILINTERPRETER@ CSHARPCOMPILER = @CSHARPCOMPILER@ CSHARPCYGPATH_W = @CSHARPCYGPATH_W@ CSHARPDYNAMICLINKING = @CSHARPDYNAMICLINKING@ CSHARPLIBRARYPREFIX = @CSHARPLIBRARYPREFIX@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEBUGGING = @DEBUGGING@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLL_FILENAME = @DLL_FILENAME@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GACUTIL = @GACUTIL@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HTML_DIR = @HTML_DIR@ INKSCAPE = @INKSCAPE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVAC_FLAGS = @JAVAC_FLAGS@ JAVAH = @JAVAH@ JAVAH_FLAGS = @JAVAH_FLAGS@ JAVA_INCLUDE = @JAVA_INCLUDE@ JAVA_JUNIT = @JAVA_JUNIT@ JAVA_VERSION = @JAVA_VERSION@ JDK_INCLUDE = @JDK_INCLUDE@ JNI_EXTRA_LDFLAGS = @JNI_EXTRA_LDFLAGS@ JUNIT = @JUNIT@ LASSO_APP_DEFINES = @LASSO_APP_DEFINES@ LASSO_CFLAGS = @LASSO_CFLAGS@ LASSO_CORE_CFLAGS = @LASSO_CORE_CFLAGS@ LASSO_CORE_LIBS = @LASSO_CORE_LIBS@ LASSO_DEFINES = @LASSO_DEFINES@ LASSO_DOCDIR = @LASSO_DOCDIR@ LASSO_LIBS = @LASSO_LIBS@ LASSO_PUB_CFLAGS = @LASSO_PUB_CFLAGS@ LASSO_STATIC_BINARIES = @LASSO_STATIC_BINARIES@ LASSO_VERSION_INFO = @LASSO_VERSION_INFO@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PERLINSTALLSITEARCH = @PERLINSTALLSITEARCH@ PERLMAN3DIR = @PERLMAN3DIR@ PERL_CFLAGS = @PERL_CFLAGS@ PERL_VERSION = @PERL_VERSION@ PHP5 = @PHP5@ PHP5_CONFIG = @PHP5_CONFIG@ PHP5_CONFIG_DIR = @PHP5_CONFIG_DIR@ PHP5_EXTENSION_DIR = @PHP5_EXTENSION_DIR@ PHP5_INCLUDES = @PHP5_INCLUDES@ PHP5_INCLUDE_DIR = @PHP5_INCLUDE_DIR@ PHP5_LDFLAGS = @PHP5_LDFLAGS@ PHP5_LIBS = @PHP5_LIBS@ PHP5_PREFIX = @PHP5_PREFIX@ PHP5_UNPREFIXED_EXTENSION_DIR = @PHP5_UNPREFIXED_EXTENSION_DIR@ PHP5_VERSION = @PHP5_VERSION@ PHP7 = @PHP7@ PHP7_CONFIG = @PHP7_CONFIG@ PHP7_CONFIG_DIR = @PHP7_CONFIG_DIR@ PHP7_EXTENSION_DIR = @PHP7_EXTENSION_DIR@ PHP7_INCLUDES = @PHP7_INCLUDES@ PHP7_INCLUDE_DIR = @PHP7_INCLUDE_DIR@ PHP7_LDFLAGS = @PHP7_LDFLAGS@ PHP7_LIBS = @PHP7_LIBS@ PHP7_PREFIX = @PHP7_PREFIX@ PHP7_UNPREFIXED_EXTENSION_DIR = @PHP7_UNPREFIXED_EXTENSION_DIR@ PHP7_VERSION = @PHP7_VERSION@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PYTHON = @PYTHON@ PYTHON_VERSION = @PYTHON_VERSION@ PY_CFLAGS = @PY_CFLAGS@ PY_DYNLOAD = @PY_DYNLOAD@ PY_EXTRA_LIBS = @PY_EXTRA_LIBS@ PY_LIB_A = @PY_LIB_A@ PY_LIB_LOC = @PY_LIB_LOC@ PY_SITE_PACKAGES = @PY_SITE_PACKAGES@ RANLIB = @RANLIB@ RC = @RC@ REST2HTML = @REST2HTML@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_VERSION = @SWIG_VERSION@ TAR = @TAR@ TESTS_JUNIT = @TESTS_JUNIT@ UPCASED_DLL_FILENAME = @UPCASED_DLL_FILENAME@ VERSION = @VERSION@ VERSION_UNDERSCORED = @VERSION_UNDERSCORED@ WINDOWS_VERSION = @WINDOWS_VERSION@ XSLTPROC = @XSLTPROC@ Z_CFLAGS = @Z_CFLAGS@ Z_LIBS = @Z_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ uudecode = @uudecode@ MAINTAINERCLEANFILES = Makefile.in liblassoincludedir = $(includedir)/lasso/saml-2.0 AM_CPPFLAGS = \ -I$(top_builddir) \ -I$(top_srcdir) \ $(LASSO_CORE_CFLAGS) \ -DG_LOG_DOMAIN=\"lasso\" noinst_LTLIBRARIES = liblasso-saml-20.la liblasso_saml_20_la_SOURCES = \ assertion_query.c \ ecp.c \ federation.c \ profile.c \ provider.c \ login.c \ logout.c \ name_id_management.c \ server.c \ saml2_helper.c liblassoinclude_HEADERS = \ assertion_query.h \ ecp.h \ profile.h \ name_id_management.h \ provider.h \ saml2_helper.h lasso_private_h_sources = \ federationprivate.h \ profileprivate.h \ providerprivate.h \ loginprivate.h \ logoutprivate.h \ serverprivate.h \ ecpprivate.h EXTRA_DIST = $(lasso_private_h_sources) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign lasso/saml-2.0/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign lasso/saml-2.0/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } liblasso-saml-20.la: $(liblasso_saml_20_la_OBJECTS) $(liblasso_saml_20_la_DEPENDENCIES) $(EXTRA_liblasso_saml_20_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(liblasso_saml_20_la_OBJECTS) $(liblasso_saml_20_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/assertion_query.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/federation.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/login.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/logout.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/name_id_management.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/profile.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/provider.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saml2_helper.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/server.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-liblassoincludeHEADERS: $(liblassoinclude_HEADERS) @$(NORMAL_INSTALL) @list='$(liblassoinclude_HEADERS)'; test -n "$(liblassoincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(liblassoincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(liblassoincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(liblassoincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(liblassoincludedir)" || exit $$?; \ done uninstall-liblassoincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(liblassoinclude_HEADERS)'; test -n "$(liblassoincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(liblassoincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(liblassoincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/assertion_query.Plo -rm -f ./$(DEPDIR)/ecp.Plo -rm -f ./$(DEPDIR)/federation.Plo -rm -f ./$(DEPDIR)/login.Plo -rm -f ./$(DEPDIR)/logout.Plo -rm -f ./$(DEPDIR)/name_id_management.Plo -rm -f ./$(DEPDIR)/profile.Plo -rm -f ./$(DEPDIR)/provider.Plo -rm -f ./$(DEPDIR)/saml2_helper.Plo -rm -f ./$(DEPDIR)/server.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-liblassoincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/assertion_query.Plo -rm -f ./$(DEPDIR)/ecp.Plo -rm -f ./$(DEPDIR)/federation.Plo -rm -f ./$(DEPDIR)/login.Plo -rm -f ./$(DEPDIR)/logout.Plo -rm -f ./$(DEPDIR)/name_id_management.Plo -rm -f ./$(DEPDIR)/profile.Plo -rm -f ./$(DEPDIR)/provider.Plo -rm -f ./$(DEPDIR)/saml2_helper.Plo -rm -f ./$(DEPDIR)/server.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-liblassoincludeHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libtool clean-noinstLTLIBRARIES \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-liblassoincludeHEADERS \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-liblassoincludeHEADERS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lasso-2.8.2/lasso/saml-2.0/PaxHeaders/federationprivate.h0000644000000000000000000000013214114336625020165 xustar0030 mtime=1630649749.818436908 30 atime=1678814151.008993845 30 ctime=1678814321.101953833 lasso-2.8.2/lasso/saml-2.0/federationprivate.h0000644000175000017500000000237414114336625023443 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAML20_FEDERATION_PRIVATE_H__ #define __LASSO_SAML20_FEDERATION_PRIVATE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ void lasso_saml20_federation_build_local_name_identifier(LassoFederation *federation, const gchar *nameQualifier, const gchar *format, const gchar *content); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAML20_FEDERATION_PRIVATE_H__ */ lasso-2.8.2/lasso/saml-2.0/PaxHeaders/serverprivate.h0000644000000000000000000000013214114336625017353 xustar0030 mtime=1630649749.822436951 30 atime=1678814151.012993868 30 ctime=1678814321.109953878 lasso-2.8.2/lasso/saml-2.0/serverprivate.h0000644000175000017500000000272114114336625022625 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAML20_SERVER_PRIVATE_H__ #define __LASSO_SAML20_SERVER_PRIVATE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "../xml/xml.h" #include "../id-ff/server.h" int lasso_saml20_server_load_affiliation(LassoServer *server, xmlNode *node); lasso_error_t lasso_saml20_server_load_metadata(LassoServer *server, LassoProviderRole role, xmlDoc *doc, xmlNode *root_node, GList *blacklisted_entity_ids, GList **loaded_entity_ids, xmlSecKeysMngr *keys_mngr, LassoServerLoadMetadataFlag flags); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAML20_SERVER_PRIVATE_H__ */ lasso-2.8.2/lasso/saml-2.0/PaxHeaders/saml2_helper.c0000644000000000000000000000013214114500706017013 xustar0030 mtime=1630699974.070799833 30 atime=1678814239.861493091 30 ctime=1678814321.101953833 lasso-2.8.2/lasso/saml-2.0/saml2_helper.c0000644000175000017500000007272614114500706022301 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "saml2_helper.h" #include "../id-ff/server.h" #include "../id-ff/serverprivate.h" #include "../xml/saml-2.0/saml2_audience_restriction.h" #include "../xml/saml-2.0/saml2_one_time_use.h" #include "../xml/saml-2.0/saml2_proxy_restriction.h" #include "../xml/saml-2.0/saml2_attribute.h" #include "../xml/saml-2.0/saml2_attribute_statement.h" #include "../xml/saml-2.0/saml2_attribute_value.h" #include "../xml/private.h" #include "../utils.h" #include "provider.h" #include static GList* lasso_saml2_assertion_get_audience_restrictions(LassoSaml2Assertion *assertion); /** * lasso_saml2_assertion_has_audience_restriction: * @saml2_assertion: a #LassoSaml2Assertion object * * Verify that a #LassoSaml2AudienceRestriction is present in the assertion. * * Return value: TRUE if a #LassoSaml2AudienceRestriction is present in the Conditions of the * #LassoSaml2Assertion. */ gboolean lasso_saml2_assertion_has_audience_restriction(LassoSaml2Assertion *saml2_assertion) { return lasso_saml2_assertion_get_audience_restrictions(saml2_assertion) != NULL; } /** * lasso_saml2_assertion_is_audience_restricted: * @saml2_assertion: a #LassoSaml2Assertion object * @providerID: the providerID that will be compared to the audience restriction declarations. * * Verify that the assertion is restricted to the given providerID. * * Return value: TRUE if @providerID is part of a #LassoSaml2AudienceRestriction element in the * assertion, FALSE otherwise. */ gboolean lasso_saml2_assertion_is_audience_restricted(LassoSaml2Assertion *saml2_assertion, char* providerID) { GList *it; lasso_foreach(it, lasso_saml2_assertion_get_audience_restrictions(saml2_assertion)) { if (LASSO_IS_SAML2_AUDIENCE_RESTRICTION(it->data)) { LassoSaml2AudienceRestriction *saml2_audience_restriction; saml2_audience_restriction = (LassoSaml2AudienceRestriction*)it->data; if (lasso_strisequal(saml2_audience_restriction->Audience,providerID)) return TRUE; } } return FALSE; } /** * lasso_saml2_name_id_new_with_persistent_format: * @id: the identifier for the princiapl * @idpID: the entity ID of the IdP * @providerID: the entity ID of the provider * * Create a new #LassoSaml2NameID object, which the #LASSO_SAML2_NAME_IDENTIFIER_FORMAT_PERSISTENT * format, @id as content, @idpID as NameQualifier and @providerID as SPNameQualifier. * * Since: 2.3 * Return value: a newly created #LassoSaml2NameID */ LassoSaml2NameID* lasso_saml2_name_id_new_with_persistent_format(const char *id, const char *idpID, const char *providerID) { return lasso_saml2_name_id_build_persistent(id, idpID, providerID); } /** * lasso_saml2_name_id_build_persistent: * @id: the identifier for the princiapl * @idpID: the entity ID of the IdP * @providerID: the entity ID of the provider * * Create a new #LassoSaml2NameID object, which the #LASSO_SAML2_NAME_IDENTIFIER_FORMAT_PERSISTENT * format, @id as content, @idpID as NameQualifier and @providerID as SPNameQualifier. * * Return value: a newly created #LassoSaml2NameID * Deprecated: 2.3: use lasso_saml2_name_id_new_with_persistent_format() instead. */ LassoSaml2NameID* lasso_saml2_name_id_build_persistent(const char *id, const char *idpID, const char *providerID) { LassoSaml2NameID *saml2_name_id; saml2_name_id = (LassoSaml2NameID*)lasso_saml2_name_id_new(); saml2_name_id->content = g_strdup(id); saml2_name_id->Format = g_strdup(LASSO_SAML2_NAME_IDENTIFIER_FORMAT_PERSISTENT); saml2_name_id->NameQualifier = g_strdup(idpID); saml2_name_id->SPNameQualifier = g_strdup(providerID); return saml2_name_id; } /** * lasso_saml2_name_id_build_encrypted_persistent * @id: the identifier for the principal * @idpID: the entity ID of the IdP * @provider: the provider for which the NameID is created. * * Create a new #LassoSaml2NameID issued by @idpID and targeted at @provider, and encrypt it using * @provider public key. * * Return value: a newly created #LassoSaml2EncryptedElement object. */ LassoSaml2EncryptedElement* lasso_saml2_encrypted_element_build_encrypted_persistent_name_id( const char *id, const char *idpID, const LassoProvider *provider) { LassoSaml2NameID *saml2_name_id; LassoSaml2EncryptedElement *encrypted_element; saml2_name_id = lasso_saml2_name_id_build_persistent(id, idpID, provider->ProviderID); encrypted_element = lasso_provider_saml2_node_encrypt(provider, (LassoNode*)saml2_name_id); lasso_release_gobject(saml2_name_id); return encrypted_element; } static LassoSaml2Conditions* lasso_saml2_assertion_get_conditions(LassoSaml2Assertion *saml2_assertion, gboolean create) { if (! LASSO_IS_SAML2_CONDITIONS(saml2_assertion->Conditions) && create) { lasso_assign_new_gobject (saml2_assertion->Conditions, (LassoSaml2Conditions*)lasso_saml2_conditions_new()); } return saml2_assertion->Conditions; } static LassoSaml2Subject* lasso_saml2_assertion_get_subject(LassoSaml2Assertion *saml2_assertion, gboolean create) { if (! LASSO_IS_SAML2_SUBJECT(saml2_assertion->Subject) && create) { lasso_assign_new_gobject(saml2_assertion->Subject, (LassoSaml2Subject*)lasso_saml2_subject_new()); } return saml2_assertion->Subject; } static LassoSaml2SubjectConfirmation* lasso_saml2_assertion_get_subject_confirmation(LassoSaml2Assertion *saml2_assertion, gboolean create) { LassoSaml2Subject *subject; subject = lasso_saml2_assertion_get_subject (saml2_assertion, create); if (subject == NULL) return NULL; if (! LASSO_IS_SAML2_SUBJECT_CONFIRMATION(subject->SubjectConfirmation) && create) { lasso_assign_new_gobject(subject->SubjectConfirmation, (LassoSaml2SubjectConfirmation*)lasso_saml2_subject_confirmation_new()); } return subject->SubjectConfirmation; } LassoSaml2SubjectConfirmationData* lasso_saml2_assertion_get_subject_confirmation_data(LassoSaml2Assertion *saml2_assertion, gboolean create) { LassoSaml2SubjectConfirmation *subject_confirmation; subject_confirmation = lasso_saml2_assertion_get_subject_confirmation (saml2_assertion, create); if (subject_confirmation == NULL) return NULL; if (! LASSO_IS_SAML2_SUBJECT_CONFIRMATION_DATA(subject_confirmation->SubjectConfirmationData) && create) { lasso_assign_new_gobject(subject_confirmation->SubjectConfirmationData, (LassoSaml2SubjectConfirmationData*)lasso_saml2_subject_confirmation_data_new()); } return subject_confirmation->SubjectConfirmationData; } /** * lasso_saml2_assertion_set_subject_name_id: * @saml2_assertion: a #LassoSaml2Assertion object * @node: a #LassoSaml2NameID or #LassoSaml2EncryptedElement * * Set the subject NameID, which can be a simple #LassoSaml2NameID object or an encrypted * #LassoSaml2NameID as a #LassoSaml2EncryptedElement. */ void lasso_saml2_assertion_set_subject_name_id(LassoSaml2Assertion *saml2_assertion, LassoNode *node) { LassoSaml2Subject *saml2_subject; g_return_if_fail (LASSO_IS_SAML2_ASSERTION (saml2_assertion)); saml2_subject = lasso_saml2_assertion_get_subject (saml2_assertion, TRUE); if (LASSO_IS_SAML2_NAME_ID(node)) { lasso_assign_gobject (saml2_subject->NameID, node); } else if (LASSO_IS_SAML2_ENCRYPTED_ELEMENT(node)) { lasso_assign_gobject(saml2_subject->EncryptedID, node) } else { message(G_LOG_LEVEL_WARNING, "Cannot set subject name id, since node is neither an EncryptedElement or a NameID"); } } /** * lasso_saml2_assertion_set_subject_confirmation_name_id: * @saml2_assertion: a #LassoSaml2Assertion object * @node: a #LassoSaml2NameID or #LassoSaml2EncryptedElement * * Set the subject NameID, which can be a simple #LassoSaml2NameID object or an encrypted * #LassoSaml2NameID as a #LassoSaml2EncryptedElement. */ void lasso_saml2_assertion_set_subject_confirmation_name_id(LassoSaml2Assertion *saml2_assertion, LassoNode *node) { LassoSaml2SubjectConfirmation *saml2_subject_confirmation; g_return_if_fail (LASSO_IS_SAML2_ASSERTION (saml2_assertion)); saml2_subject_confirmation = lasso_saml2_assertion_get_subject_confirmation (saml2_assertion, TRUE); if (LASSO_IS_SAML2_NAME_ID(node)) { lasso_assign_gobject (saml2_subject_confirmation->NameID, node); } else if (LASSO_IS_SAML2_ENCRYPTED_ELEMENT(node)) { lasso_assign_gobject(saml2_subject_confirmation->EncryptedID, node) } else { message(G_LOG_LEVEL_WARNING, "Cannot set subject name id, since node is neither an EncryptedElement or a NameID"); } } #define set_notbefore_and_notonorafter(node, tolerance, length) \ if (tolerance != -1 && length != -1) \ { \ time_t now, a, b; \ now = time(NULL); \ a = now - tolerance; \ b = now + length + tolerance; \ lasso_assign_new_string (node->NotBefore, \ lasso_time_to_iso_8601_gmt (a)); \ lasso_assign_new_string (node->NotOnOrAfter, \ lasso_time_to_iso_8601_gmt (b)); \ } /** * lasso_saml2_set_subject_confirmation_data: * @saml2_assertion: a #LassoSaml2Assertion object * @tolerance: tolerance to the range of time when the subject can be confirmed * @length: length of the range of time when the subject can be confirmed * @Recipient: the URL where the assertion can be consumed * @InResponseTo: the identifier of the request which resulted in this assertion * @Address: the address IP from which the subject should submit this assertion. * */ void lasso_saml2_assertion_set_subject_confirmation_data(LassoSaml2Assertion *saml2_assertion, time_t tolerance, time_t length, const char *Recipient, const char *InResponseTo, const char *Address) { LassoSaml2SubjectConfirmationData *saml2_subject_confirmation_data; g_return_if_fail(LASSO_IS_SAML2_ASSERTION (saml2_assertion)); saml2_subject_confirmation_data = lasso_saml2_assertion_get_subject_confirmation_data (saml2_assertion, TRUE); set_notbefore_and_notonorafter (saml2_subject_confirmation_data, tolerance, length); lasso_assign_string (saml2_subject_confirmation_data->Recipient, Recipient); lasso_assign_string (saml2_subject_confirmation_data->InResponseTo, InResponseTo); lasso_assign_string (saml2_subject_confirmation_data->Address, Address); } /** * lasso_saml2_assertion_set_basic_conditions: * @tolerance:(default -1): tolerance to the range of time when the assertion is valid * @length:(default -1): length of the range of time when the assertion is valid * @one_time_use:(default FALSE): can the assertion be kept or should it be used immediately * * Set conditions limiting usage of the assertion. * * @tolerance and @length are time quantity measured in seconds, it defines the time range in which * the assertion is valid, it is computed as [now()-tolerance, now()+length+tolerance]. * @one_time_use allows the issuer to limit caching of the assertion. * @proxy_count specify how many proxy hop can be traversed before this assertion should lose any trust. * */ void lasso_saml2_assertion_set_basic_conditions(LassoSaml2Assertion *saml2_assertion, time_t tolerance, time_t length, gboolean one_time_use) { g_return_if_fail (LASSO_IS_SAML2_ASSERTION (saml2_assertion)); /* ensure conditions exists */ lasso_saml2_assertion_get_conditions (saml2_assertion, TRUE); set_notbefore_and_notonorafter (saml2_assertion->Conditions, tolerance, length); lasso_saml2_assertion_set_one_time_use(saml2_assertion, one_time_use); } /** * lasso_saml2_assertion_set_one_time_use: * @saml2_assertion: a #LassoSaml2Assertion object * @one_time_use: is this assertion to be used one time only ? * * Set the one time use condition on this assertion. */ void lasso_saml2_assertion_set_one_time_use(LassoSaml2Assertion *saml2_assertion, gboolean one_time_use) { LassoSaml2Conditions * saml2_conditions; g_return_if_fail (LASSO_IS_SAML2_ASSERTION (saml2_assertion)); saml2_conditions = lasso_saml2_assertion_get_conditions(saml2_assertion, TRUE); if (one_time_use) { if (! saml2_conditions->OneTimeUse) { lasso_list_add_new_gobject(saml2_conditions->OneTimeUse, lasso_saml2_one_time_use_new()); } } else { if (saml2_conditions->OneTimeUse) { lasso_release_list_of_gobjects(saml2_conditions->OneTimeUse); } } } /** * lasso_saml2_assertion_add_audience_restriction: * @saml2_assertion: a #LassoSaml2Assertion object * @providerId: the provider id to restrict audience to * * Add an audience restriction to a #LassoSaml2Assertion. * */ void lasso_saml2_assertion_add_audience_restriction(LassoSaml2Assertion *saml2_assertion, const char *providerID) { LassoSaml2AudienceRestriction *audience_restriction; LassoSaml2Conditions *conditions; g_return_if_fail (LASSO_IS_SAML2_ASSERTION(saml2_assertion)); conditions = lasso_saml2_assertion_get_conditions (saml2_assertion, TRUE); audience_restriction = (LassoSaml2AudienceRestriction*) lasso_saml2_audience_restriction_new(); lasso_assign_string(audience_restriction->Audience, providerID); lasso_list_add_new_gobject(conditions->AudienceRestriction, audience_restriction); } /** * lasso_saml2_assertion_add_proxy_limit: * @saml2_assertion: a #LassoSaml2Assertion object * @proxy_count:(default -1): the number of hops in the proxy chain, a negative value means no limitation * @proxy_audiences:(allow-none)(element-type string): a list of audience restriction for newly issued assertion * based on the @saml2_assertion assertion. An empty list means no audience restriction. * * A #LassoSaml2ProxyRestriction to the conditions of consumption of @saml2_assertion. */ void lasso_saml2_assertion_add_proxy_limit (LassoSaml2Assertion *saml2_assertion, int proxy_count, GList *proxy_audiences) { LassoSaml2ProxyRestriction *saml2_proxy_restriction; g_return_if_fail (LASSO_IS_SAML2_ASSERTION (saml2_assertion)); /* ensure conditions exists */ lasso_saml2_assertion_get_conditions (saml2_assertion, TRUE); saml2_proxy_restriction = (LassoSaml2ProxyRestriction*)lasso_saml2_proxy_restriction_new (); if (proxy_count >= 0) { saml2_proxy_restriction->Count = g_strdup_printf("%i", proxy_count); } if (proxy_audiences) { lasso_assign_string (saml2_proxy_restriction->Audience, proxy_audiences->data); if (proxy_audiences->next) { message(G_LOG_LEVEL_WARNING, "Trying to set multiple proxy_audience restriction is not possible with currrent version of Lasso"); } } } /** * lasso_saml2_assertion_validate_time_checks: * @saml2_assertion: a #LassoSaml2Assertion object * @tolerance: a duration as seconds * @now:(default 0): the current time as seconds since EPOCH or 0 to use the system time. * * Check if the @saml2_assertion conditions about NotBefore and NotOnOrAfter are valid with respect * to the @now time or the current time. @tolerance allows to loosely check for validatity, i.e. * start time is decreased of @tolerance seconds and end time is increased of @tolerance seconds. * * Return value: a value among #LassoSaml2AssertionValidationState. */ LassoSaml2AssertionValidationState lasso_saml2_assertion_validate_time_checks(LassoSaml2Assertion *saml2_assertion, unsigned int tolerance, time_t now) { LassoSaml2Conditions *saml2_conditions; g_return_val_if_fail (LASSO_SAML2_ASSERTION (saml2_assertion), LASSO_SAML2_ASSERTION_INDETERMINATE); saml2_conditions = lasso_saml2_assertion_get_conditions(saml2_assertion, FALSE); if (saml2_conditions == NULL) return LASSO_SAML2_ASSERTION_VALID; if (now == 0) now = time(NULL); if (saml2_conditions->NotBefore) { time_t a = lasso_iso_8601_gmt_to_time_t (saml2_conditions->NotBefore); a -= tolerance; if (a == -1) return LASSO_SAML2_ASSERTION_INDETERMINATE; if (now < a) { return LASSO_SAML2_ASSERTION_INVALID; } } if (saml2_conditions->NotOnOrAfter) { time_t b = lasso_iso_8601_gmt_to_time_t (saml2_conditions->NotOnOrAfter); b += tolerance; if (b == -1) return LASSO_SAML2_ASSERTION_INDETERMINATE; if (now >= b) { return LASSO_SAML2_ASSERTION_INVALID; } } return LASSO_SAML2_ASSERTION_VALID; } /** * lasso_saml2_assertion_has_one_time_use: * @saml2_assertion: a #LassoSaml2Assertion object * * Return whether this assertion has the OneTimeUse property. * * In this case the relaying party must add the assertion ID to a OneTimeUser cache and discards any * assertion received in the future with the same ID. * * Return value: TRUE if this assertion has the property OneTimeUse, FALSE otherwise. */ gboolean lasso_saml2_assertion_has_one_time_use(LassoSaml2Assertion *saml2_assertion) { LassoSaml2Conditions *saml2_conditions; g_return_val_if_fail (LASSO_SAML2_ASSERTION (saml2_assertion), FALSE); saml2_conditions = lasso_saml2_assertion_get_conditions(saml2_assertion, FALSE); if (saml2_conditions == NULL) return FALSE; if (saml2_conditions->OneTimeUse) return TRUE; return FALSE; } /** * lasso_saml2_assertion_allows_proxying: * @saml2_assertion: a #LassoSaml2Assertion object * * Test whether this @saml2_assertion allows to mint new assertion on the basis of it. * It verifies that the proxying count is positive (or absent). * * Return value: a value among #LassoSaml2AssertionValidationState enumeration. * #LASSO_SAML2_ASSERTION_INDETERMINATE usually means that an element was not conform to the XML * Schema for SAML 2.0. */ LassoSaml2AssertionValidationState lasso_saml2_assertion_allows_proxying(LassoSaml2Assertion *saml2_assertion) { LassoSaml2Conditions *saml2_conditions; LassoSaml2ProxyRestriction *proxy_restriction; g_return_val_if_fail (LASSO_SAML2_ASSERTION (saml2_assertion), LASSO_SAML2_ASSERTION_INDETERMINATE); saml2_conditions = lasso_saml2_assertion_get_conditions(saml2_assertion, FALSE); if (saml2_conditions == NULL) return LASSO_SAML2_ASSERTION_VALID; if (! saml2_conditions->ProxyRestriction) return LASSO_SAML2_ASSERTION_VALID; if (! LASSO_IS_SAML2_PROXY_RESTRICTION(saml2_conditions->ProxyRestriction->data) || saml2_conditions->ProxyRestriction->next) return LASSO_SAML2_ASSERTION_INDETERMINATE; proxy_restriction = saml2_conditions->ProxyRestriction->data; if (proxy_restriction == NULL) return LASSO_SAML2_ASSERTION_VALID; if (proxy_restriction->Count) { long int count; if (! lasso_string_to_xsd_integer(proxy_restriction->Count, &count) || count < 0) { return LASSO_SAML2_ASSERTION_INDETERMINATE; } if (count == 0) { return LASSO_SAML2_ASSERTION_INVALID; } } return LASSO_SAML2_ASSERTION_VALID; } /** * lasso_saml2_assertion_allows_proxying_to: * @saml2_assertion: a #LassoSaml2Assertion object * @audience:(allow-none): the relaying party which we want to proxy to * * Test whether this @saml2_assertion allows to mint new assertion on the basis of it targetted for * @audience. It verifies that if @audience is * non-NULL it is part of the proxy Audience restriction. If @audience is NULL, it checks that no * proxying Audience restriction is present. * * Return value: a value among #LassoSaml2AssertionValidationState enumeration. * #LASSO_SAML2_ASSERTION_INDETERMINATE usually means that an element was not conform to the XML * Schema for SAML 2.0. */ LassoSaml2AssertionValidationState lasso_saml2_assertion_allows_proxying_to(LassoSaml2Assertion *saml2_assertion, const char *audience) { LassoSaml2Conditions *saml2_conditions; LassoSaml2ProxyRestriction *proxy_restriction; g_return_val_if_fail (LASSO_SAML2_ASSERTION (saml2_assertion), LASSO_SAML2_ASSERTION_INDETERMINATE); saml2_conditions = lasso_saml2_assertion_get_conditions(saml2_assertion, FALSE); if (saml2_conditions == NULL) return LASSO_SAML2_ASSERTION_VALID; if (! saml2_conditions->ProxyRestriction) return LASSO_SAML2_ASSERTION_VALID; if (! LASSO_IS_SAML2_PROXY_RESTRICTION(saml2_conditions->ProxyRestriction->data) || saml2_conditions->ProxyRestriction->next) return LASSO_SAML2_ASSERTION_INDETERMINATE; proxy_restriction = saml2_conditions->ProxyRestriction->data; if (proxy_restriction == NULL) return LASSO_SAML2_ASSERTION_VALID; /* FIXME: Change saml2:ProxyRestriction class */ if (lasso_strisnotequal(proxy_restriction->Audience,audience)) { return LASSO_SAML2_ASSERTION_INVALID; } return LASSO_SAML2_ASSERTION_VALID; } /** * lasso_saml2_assertion_validate_audience: * @saml2_assertion: a #LassoSaml2Assertion object * @audience: the name of an entity * * Check if the @saml2_assertion is directed to a given @audience. * * Return value: a value among #LassoSaml2AssertionValidationState enumeration. */ LassoSaml2AssertionValidationState lasso_saml2_assertion_validate_audience(LassoSaml2Assertion *saml2_assertion, const gchar *audience) { LassoSaml2Conditions *saml2_conditions; gboolean did_audience = FALSE; gboolean found_audience = FALSE; g_return_val_if_fail (LASSO_SAML2_ASSERTION (saml2_assertion), LASSO_SAML2_ASSERTION_INDETERMINATE); saml2_conditions = lasso_saml2_assertion_get_conditions(saml2_assertion, FALSE); if (saml2_conditions == NULL) return LASSO_SAML2_ASSERTION_VALID; lasso_foreach_full_begin (LassoSaml2AudienceRestriction*, saml2_audience_restriction, it, saml2_conditions->AudienceRestriction) did_audience = TRUE; if (lasso_strisequal(saml2_audience_restriction->Audience,audience)) { found_audience = TRUE; } lasso_foreach_full_end() if (did_audience && ! found_audience) { return LASSO_SAML2_ASSERTION_INVALID; } return LASSO_SAML2_ASSERTION_VALID; } /** * lasso_saml2_assertion_validate_conditions: * @saml2_assertion: a #LassoSaml2Assertion object * @relaying_party_providerID:(allow-none): the providerID of the current relaying party, use to * check for audience restrictions. * * Check the validation of the assertion with respect to the conditions of consumption that it * contains. System functions are used for getting current time and checking eventual time * constraints. * * Return value: LASSO_SAML2_ASSERTION_VALID if the assertion is valid, * LASSO_SAML2_ASSERTION_INVALID is some check failed, LASSO_SAML2_ASSERTION_INDETERMINATE if * somehting was impossible to eveluate. */ LassoSaml2AssertionValidationState lasso_saml2_assertion_validate_conditions(LassoSaml2Assertion *saml2_assertion, const char *relaying_party_providerID) { LassoSaml2AssertionValidationState state; state = lasso_saml2_assertion_validate_time_checks(saml2_assertion, 0, 0); if (state != LASSO_SAML2_ASSERTION_VALID) return state; state = lasso_saml2_assertion_validate_audience(saml2_assertion, relaying_party_providerID); return state; } /** * lasso_saml2_assertion_get_issuer_provider: * @saml2_assertion: a #LassoSaml2 assertion * @server: a #LassoServer object * * Return the #LassoProvider object for the provider who created this assertion. * * Return value: a #LassoProvider object, or NULL if the Issuer element is missing, or the given * provider unknown to the #LassoServer object. */ LassoProvider* lasso_saml2_assertion_get_issuer_provider(const LassoSaml2Assertion *saml2_assertion, const LassoServer *server) { LassoSaml2NameID *issuer; g_return_val_if_fail (LASSO_IS_SAML2_ASSERTION (saml2_assertion), NULL); issuer = saml2_assertion->Issuer; g_return_val_if_fail (LASSO_IS_SAML2_NAME_ID (issuer), NULL); g_return_val_if_fail (issuer->Format == NULL || lasso_strisequal(issuer->Format,LASSO_SAML2_NAME_IDENTIFIER_FORMAT_ENTITY), NULL); g_return_val_if_fail (LASSO_IS_SERVER(server), NULL); if (lasso_strisequal(server->parent.ProviderID,issuer->content)) { return (LassoProvider*)&server->parent; } return lasso_server_get_provider (server, issuer->content); } /** * lasso_server_saml2_assertion_setup_signature: * @server: a #LassoServer object * @saml2_assertion: a #LassoSaml2Assertion object * * Configure signature on a saml2:Assertion element. * * Return value: 0 if successfull, an error code otherwise. */ int lasso_server_saml2_assertion_setup_signature(LassoServer *server, LassoSaml2Assertion *saml2_assertion) { LassoSignatureContext context = LASSO_SIGNATURE_CONTEXT_NONE; GList *audience_restrictions = NULL; char *provider_id = NULL; lasso_error_t rc = 0; lasso_bad_param(SERVER, server); lasso_bad_param(SAML2_ASSERTION, saml2_assertion); /* instead of this we should probably allow to pass a provider id or object in a new API */ audience_restrictions = lasso_saml2_assertion_get_audience_restrictions(saml2_assertion); if (audience_restrictions) { provider_id = ((LassoSaml2AudienceRestriction*)audience_restrictions->data)->Audience; } lasso_check_good_rc(lasso_server_get_signature_context_for_provider_by_name(server, provider_id, &context)); lasso_node_set_signature(&saml2_assertion->parent, context); if (! saml2_assertion->ID) { lasso_assign_new_string(saml2_assertion->ID, lasso_build_unique_id(32)); } cleanup: return rc; } /** * lasso_saml2_assertion_add_attribute_with_node: * @assertion: a #LassoSaml2Assertion object * @name: the attribute name * @name_format: the attribute name format (the namespace of the name) * @content: a #LassoNode object to put as content of the attribute * * Add a new attribute declaration and set this node as the content. * * Return value: 0 if successful, an error code otherwise. */ int lasso_saml2_assertion_add_attribute_with_node(LassoSaml2Assertion *assertion, const char *name, const char *name_format, LassoNode *content) { LassoSaml2AttributeValue *attribute_value = NULL; LassoSaml2Attribute *attribute = NULL; LassoSaml2AttributeStatement *attribute_statement = NULL; int rc = 0; lasso_bad_param(SAML2_ASSERTION, assertion); lasso_check_non_empty_string(name); lasso_check_non_empty_string(name_format); lasso_bad_param(NODE, content); attribute_value = lasso_saml2_attribute_value_new(); lasso_list_add_gobject(attribute_value->any, content); attribute = LASSO_SAML2_ATTRIBUTE(lasso_saml2_attribute_new()); lasso_assign_string(attribute->Name, name); lasso_assign_string(attribute->NameFormat, LASSO_SAML2_ATTRIBUTE_NAME_FORMAT_URI); lasso_list_add_new_gobject(attribute->AttributeValue, attribute_value); if (assertion->AttributeStatement && LASSO_IS_SAML2_ATTRIBUTE_STATEMENT( assertion->AttributeStatement->data)) { attribute_statement = (LassoSaml2AttributeStatement*) assertion->AttributeStatement->data; } else { attribute_statement = LASSO_SAML2_ATTRIBUTE_STATEMENT(lasso_saml2_attribute_statement_new()); lasso_list_add_new_gobject(assertion->AttributeStatement, attribute_statement); } lasso_list_add_new_gobject(attribute_statement->Attribute, attribute); cleanup: return rc; } /** * lasso_saml2_assertion_get_in_response_to: * @assertion: a #LassoSaml2Assertion object * * Return the ID of the request this assertion respond to. * * Return value: the InResponseTo attribute content of the SubjectConfirmationData if found */ const char* lasso_saml2_assertion_get_in_response_to(LassoSaml2Assertion *assertion) { LassoSaml2SubjectConfirmationData *scd; scd = lasso_saml2_assertion_get_subject_confirmation_data(assertion, FALSE); if (! scd) return NULL; return scd->InResponseTo; } /** * lasso_saml2_encrypted_element_server_decrypt: * @encrypted_element: a #LassoSaml2EncryptedElement object * @server: a #LassoServer object * @decrypted_node:(out): an output arg for a #LassoNode * * Decrypt the given encrypted element using the encryption private key of the @server object * * Return value: 0 if successful, an error code otherwise. See * lasso_saml2_encrypted_element_server_decrypt(). */ int lasso_saml2_encrypted_element_server_decrypt(LassoSaml2EncryptedElement* encrypted_element, LassoServer *server, LassoNode** decrypted_node) { lasso_bad_param(SERVER, server); int rc = 0; GList *encryption_private_keys; encryption_private_keys = lasso_server_get_encryption_private_keys(server); if (! encryption_private_keys) { return LASSO_PROFILE_ERROR_MISSING_ENCRYPTION_PRIVATE_KEY; } lasso_foreach_full_begin(xmlSecKey*, encryption_private_key, it, encryption_private_keys) { rc = lasso_saml2_encrypted_element_decrypt(encrypted_element, encryption_private_key, decrypted_node); if (rc == 0) break; } lasso_foreach_full_end(); return rc; } /** * lasso_saml2_assertion_decrypt_subject: * @assertion: a #LassoSaml2Assertion object * @server: a #LassoServer object * * Decipher (if needed) the EncryptedID of the Subject. * * Return value: 0 if successful, an error code otherwise. See * lasso_saml2_encrypted_element_server_decrypt(). */ int lasso_saml2_assertion_decrypt_subject(LassoSaml2Assertion *assertion, LassoServer *server) { lasso_bad_param(SAML2_ASSERTION, assertion); lasso_bad_param(SERVER, server); if (assertion->Subject && ! assertion->Subject->NameID && assertion->Subject->EncryptedID) { return lasso_saml2_encrypted_element_server_decrypt(assertion->Subject->EncryptedID, server, (LassoNode**)&assertion->Subject->NameID); } return 0; } /** * lasso_saml2_assertion_get_audience_restrictions: * @assertion: a #LassoSaml2Assertion * * Returns the list of audience restriction associated to the given assertion * * Return value:(transfer none): the GList of the Saml2AudienceRestriction nodes */ static GList* lasso_saml2_assertion_get_audience_restrictions(LassoSaml2Assertion *assertion) { g_return_val_if_fail (LASSO_IS_SAML2_ASSERTION(assertion), NULL); if (! LASSO_IS_SAML2_CONDITIONS(assertion->Conditions)) return FALSE; return assertion->Conditions->AudienceRestriction; } lasso-2.8.2/lasso/saml-2.0/PaxHeaders/profile.c0000644000000000000000000000013214364261206016104 xustar0030 mtime=1674666630.754769169 30 atime=1678814232.145449532 30 ctime=1678814321.089953764 lasso-2.8.2/lasso/saml-2.0/profile.c0000644000175000017500000015362514364261206021370 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../xml/private.h" #include #include "../utils.h" #include "providerprivate.h" #include "profileprivate.h" #include "profile.h" #include "provider.h" #include "../id-ff/providerprivate.h" #include "../id-ff/profile.h" #include "../id-ff/profileprivate.h" #include "../id-ff/serverprivate.h" #include "../id-ff/sessionprivate.h" #include "../id-ff/login.h" #include "../xml/private.h" #include "../xml/soap-1.1/soap_envelope.h" #include "../xml/saml-2.0/samlp2_request_abstract.h" #include "../xml/saml-2.0/samlp2_artifact_resolve.h" #include "../xml/saml-2.0/samlp2_artifact_response.h" #include "../xml/saml-2.0/samlp2_authn_request.h" #include "../xml/saml-2.0/samlp2_name_id_mapping_response.h" #include "../xml/saml-2.0/samlp2_status_response.h" #include "../xml/saml-2.0/samlp2_response.h" #include "../xml/saml-2.0/saml2_assertion.h" #include "../xml/saml-2.0/saml2_xsd.h" #include "../xml/soap-1.1/soap_envelope.h" #include "../xml/misc_text_node.h" #include "../utils.h" #include "../debug.h" static char* lasso_saml20_profile_build_artifact(LassoProvider *provider); static int lasso_saml20_profile_export_to_query(LassoProfile *profile, LassoNode *msg, char **query, LassoSignatureContext context); static gint lasso_profile_saml20_build_artifact_get_request_msg(LassoProfile *profile, const char *service); static gint lasso_profile_saml20_build_artifact_post_request_msg(LassoProfile *profile, const char *service); static gint lasso_profile_saml20_build_artifact_get_response_msg(LassoProfile *profile, const char *service); static gint lasso_profile_saml20_build_artifact_post_response_msg(LassoProfile *profile, const char *service); static char* lasso_saml20_profile_generate_artifact(LassoProfile *profile, int part); #define check_msg_body \ if (! profile->msg_body) { \ return critical_error(LASSO_PROFILE_ERROR_BUILDING_MESSAGE_FAILED); \ } /* * Helper functions */ static int get_provider(LassoProfile *profile, LassoProvider **provider_out) { LassoProvider *provider; LassoServer *server; int rc = 0; lasso_bad_param(PROFILE, profile); lasso_extract_node_or_fail(server, profile->server, SERVER, LASSO_PROFILE_ERROR_MISSING_SERVER); provider = lasso_server_get_provider(server, profile->remote_providerID); if (! provider) { return LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND; } *provider_out = provider; cleanup: return rc; } static char * get_url(LassoProvider *provider, const char *service, const char *binding) { char *meta; char *result; meta = g_strdup_printf("%s %s", service, binding); result = lasso_provider_get_metadata_one(provider, meta); lasso_release_string(meta); return result; } static char * get_response_url(LassoProvider *provider, const char *service, const char *binding) { char *meta; char *result; meta = g_strdup_printf("%s %s ResponseLocation", service, binding); result = lasso_provider_get_metadata_one(provider, meta); lasso_release_string(meta); if (! result) { result = get_url(provider, service, binding); } return result; } static const char* http_method_to_binding(LassoHttpMethod method) { switch (method) { case LASSO_HTTP_METHOD_POST: return "HTTP-POST"; case LASSO_HTTP_METHOD_REDIRECT: return "HTTP-Redirect"; case LASSO_HTTP_METHOD_SOAP: return "SOAP"; case LASSO_HTTP_METHOD_ARTIFACT_GET: case LASSO_HTTP_METHOD_ARTIFACT_POST: return "HTTP-Artifact"; case LASSO_HTTP_METHOD_PAOS: return "PAOS"; default: return ""; } } /* * Artifact Handling functions */ /** * lasso_saml20_profile_generate_artifact * @profile: a #LassoProfile * @part: 0 for request, 1 for response * * Generates an artifact for current request or response and sets @profile * attributes accordingly. * * Return value: the generated artifact (internally allocated, don't free) **/ static char* lasso_saml20_profile_generate_artifact(LassoProfile *profile, int part) { LassoNode *what = NULL; lasso_assign_new_string(profile->private_data->artifact, lasso_saml20_profile_build_artifact(&profile->server->parent)); if (part == 0) { what = profile->request; } else if (part == 1) { what = profile->response; } else { /* XXX: RequestDenied here? */ } /* Remove signature at the response level, if needed if will be on the ArtifactResponse */ lasso_node_remove_signature(what); /* Keep an XML copy of the response for later retrieval */ lasso_assign_new_string(profile->private_data->artifact_message, lasso_node_export_to_xml(what)); return profile->private_data->artifact; } static char* lasso_saml20_profile_build_artifact(LassoProvider *provider) { xmlSecByte samlArt[44], *b64_samlArt = NULL; char *source_succinct_id = NULL; char *ret = NULL; unsigned short index; source_succinct_id = lasso_sha1(provider->ProviderID); /* XXX: unchecked return value*/ goto_cleanup_if_fail(lasso_saml20_provider_get_artifact_resolution_service_index(provider, &index) == 0); /* Artifact Format is described in saml-bindings-2.0-os, 3.6.4.2. */ memcpy(samlArt, "\000\004", 2); /* type code */ samlArt[2] = 0xFF & (index >> 8); samlArt[3] = 0xFF & index; memcpy(samlArt+4, source_succinct_id, 20); lasso_build_random_sequence((char*)samlArt+24, 20); b64_samlArt = xmlSecBase64Encode(samlArt, 44, 0); ret = g_strdup((char*)b64_samlArt); cleanup: if (ret == NULL) { warning("Unable to find an artifact resolution service for entity id %s with %d", provider->ProviderID, provider->role); } lasso_release_string(source_succinct_id); lasso_release_xml_string(b64_samlArt); return ret; } /* * this function factorize all case for producing SAML artifact messages */ static gint lasso_profile_saml20_build_artifact_msg(LassoProfile *profile, const char *url, int request_or_response, int get_or_post) { char *artifact = lasso_saml20_profile_generate_artifact(profile, request_or_response); if (artifact == NULL) { return critical_error(LASSO_PROFILE_ERROR_BUILDING_QUERY_FAILED); } /* hack... */ if (LASSO_IS_LOGIN(profile)) { LassoLogin *login = (LassoLogin*)profile; lasso_assign_string(login->assertionArtifact, artifact); } if (get_or_post == 0) { char *query; if (profile->msg_relayState) { query = lasso_url_add_parameters(NULL, 0, LASSO_SAML2_FIELD_ARTIFACT, artifact, "RelayState", profile->msg_relayState, NULL); } else { query = lasso_url_add_parameters(NULL, 0, LASSO_SAML2_FIELD_ARTIFACT, artifact, NULL); } lasso_assign_new_string(profile->msg_url, lasso_concat_url_query(url, query)); lasso_release_string(query); } else { lasso_assign_string(profile->msg_url, url); lasso_assign_string(profile->msg_body, artifact); } return 0; } enum { REQUEST = 0, RESPONSE = 1, GET = 0, POST = 1 }; static gint lasso_profile_saml20_build_artifact_get_request_msg(LassoProfile *profile, const char *url) { return lasso_profile_saml20_build_artifact_msg(profile, url, REQUEST, GET); } static gint lasso_profile_saml20_build_artifact_post_request_msg(LassoProfile *profile, const char *url) { return lasso_profile_saml20_build_artifact_msg(profile, url, REQUEST, POST); } static gint lasso_profile_saml20_build_artifact_get_response_msg(LassoProfile *profile, const char *url) { return lasso_profile_saml20_build_artifact_msg(profile, url, RESPONSE, GET); } static gint lasso_profile_saml20_build_artifact_post_response_msg(LassoProfile *profile, const char *url) { return lasso_profile_saml20_build_artifact_msg(profile, url, RESPONSE, POST); } int lasso_saml20_profile_init_artifact_resolve(LassoProfile *profile, LassoProviderRole remote_provider_role, const char *msg, LassoHttpMethod method) { xmlChar **query_fields; char *artifact_b64 = NULL; xmlChar *provider_succinct_id_b64 = NULL; char *provider_succinct_id[21]; char *artifact = NULL; int artifact_len = 0; LassoSamlp2RequestAbstract *request = NULL; LassoProvider *remote_provider = NULL; int i = 0; int rc = 0; unsigned short index_endpoint = 0; if (method == LASSO_HTTP_METHOD_ARTIFACT_GET) { query_fields = lasso_urlencoded_to_strings(msg); for (i=0; query_fields[i]; i++) { if (strncmp((char*)query_fields[i], LASSO_SAML2_FIELD_ARTIFACT "=", 8) == 0) { lasso_assign_string(artifact_b64, (char*)query_fields[i]+8); } } lasso_release_array_of_xml_strings(query_fields); if (artifact_b64 == NULL) { return LASSO_PROFILE_ERROR_MISSING_ARTIFACT; } } else if (method == LASSO_HTTP_METHOD_ARTIFACT_POST) { lasso_assign_string(artifact_b64, msg); } else { return critical_error(LASSO_PROFILE_ERROR_INVALID_HTTP_METHOD); } goto_cleanup_if_fail_with_rc(lasso_base64_decode(artifact_b64, &artifact, &artifact_len), LASSO_PROFILE_ERROR_INVALID_ARTIFACT); goto_cleanup_if_fail_with_rc(artifact_len == 44, LASSO_PROFILE_ERROR_INVALID_ARTIFACT); /* wrong type code */ goto_cleanup_if_fail_with_rc(artifact[0] == 0 && artifact[1] == 4, LASSO_PROFILE_ERROR_INVALID_ARTIFACT); memcpy(provider_succinct_id, artifact+4, 20); provider_succinct_id[20] = 0; provider_succinct_id_b64 = xmlSecBase64Encode((xmlChar*)provider_succinct_id, 20, 0); lasso_assign_new_string(profile->remote_providerID, lasso_server_get_providerID_from_hash( profile->server, (char*)provider_succinct_id_b64)); goto_cleanup_if_fail_with_rc(profile->remote_providerID, LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND); /* resolve the resolver url using the endpoint index in the artifact string */ remote_provider = lasso_server_get_provider(profile->server, profile->remote_providerID); index_endpoint = (artifact[2] << 16) + artifact[3]; lasso_assign_string(profile->msg_url, lasso_saml20_provider_get_endpoint_url(remote_provider, remote_provider_role, LASSO_SAML2_METADATA_ELEMENT_ARTIFACT_RESOLUTION_SERVICE, NULL, FALSE, FALSE, index_endpoint)); goto_cleanup_if_fail_with_rc(profile->msg_url, LASSO_PROFILE_ERROR_ENDPOINT_INDEX_NOT_FOUND); lasso_assign_new_gobject(profile->request, lasso_samlp2_artifact_resolve_new()); request = LASSO_SAMLP2_REQUEST_ABSTRACT(profile->request); lasso_transfer_string(LASSO_SAMLP2_ARTIFACT_RESOLVE(request)->Artifact, artifact_b64); request->ID = lasso_build_unique_id(32); lasso_assign_string(request->Version, "2.0"); request->Issuer = LASSO_SAML2_NAME_ID(lasso_saml2_name_id_new_with_string( LASSO_PROVIDER(profile->server)->ProviderID)); request->IssueInstant = lasso_get_current_time(); lasso_check_good_rc(lasso_profile_saml20_setup_message_signature(profile, (LassoNode*)request)); cleanup: lasso_release_string(artifact_b64); lasso_release_string(artifact); lasso_release_xml_string(provider_succinct_id_b64); return rc; } int lasso_saml20_profile_process_artifact_resolve(LassoProfile *profile, const char *msg) { LassoProvider *remote_provider; int rc = 0; LassoProfileSignatureVerifyHint sig_verify_hint; /* FIXME: parse only one time the message, reuse the parsed document for signature * validation */ lasso_assign_new_gobject(profile->request, lasso_node_new_from_soap(msg)); if (profile->request == NULL) { return critical_error(LASSO_PROFILE_ERROR_INVALID_MSG); } if (! LASSO_IS_SAMLP2_ARTIFACT_RESOLVE(profile->request)) { return critical_error(LASSO_PROFILE_ERROR_INVALID_MSG); } lasso_assign_string(profile->private_data->artifact, LASSO_SAMLP2_ARTIFACT_RESOLVE(profile->request)->Artifact); sig_verify_hint = lasso_profile_get_signature_verify_hint(profile); lasso_assign_string(profile->remote_providerID, LASSO_SAMLP2_REQUEST_ABSTRACT( profile->request)->Issuer->content); remote_provider = lasso_server_get_provider(profile->server, profile->remote_providerID); goto_cleanup_if_fail_with_rc(remote_provider, LASSO_PROFILE_ERROR_UNKNOWN_PROVIDER); if (sig_verify_hint != LASSO_PROFILE_SIGNATURE_VERIFY_HINT_IGNORE) { profile->signature_status = lasso_provider_verify_signature(remote_provider, msg, "ID", LASSO_MESSAGE_FORMAT_SOAP); } switch (lasso_profile_get_signature_verify_hint(profile)) { case LASSO_PROFILE_SIGNATURE_VERIFY_HINT_MAYBE: case LASSO_PROFILE_SIGNATURE_VERIFY_HINT_FORCE: rc = profile->signature_status; break; case LASSO_PROFILE_SIGNATURE_VERIFY_HINT_IGNORE: break; default: g_assert(0); break; } cleanup: return rc; } int lasso_saml20_profile_build_artifact_response(LassoProfile *profile) { LassoSamlp2StatusResponse *response = NULL; int rc = 0; if ( ! LASSO_IS_SAMLP2_REQUEST_ABSTRACT(profile->request)) { return LASSO_PROFILE_ERROR_MISSING_REQUEST; } /* Setup the response */ response = LASSO_SAMLP2_STATUS_RESPONSE(lasso_samlp2_artifact_response_new()); lasso_assign_new_gobject(profile->response, response); response->ID = lasso_build_unique_id(32); lasso_assign_string(response->Version, "2.0"); response->Issuer = LASSO_SAML2_NAME_ID(lasso_saml2_name_id_new_with_string( LASSO_PROVIDER(profile->server)->ProviderID)); response->IssueInstant = lasso_get_current_time(); lasso_assign_string(response->InResponseTo, LASSO_SAMLP2_REQUEST_ABSTRACT(profile->request)->ID); /* Add content */ if (profile->private_data->artifact_message) { xmlDoc *doc; xmlNode *node; char *content = profile->private_data->artifact_message; doc = lasso_xml_parse_memory(content, strlen(content)); if (doc) { node = xmlDocGetRootElement(doc); lasso_assign_new_gobject(LASSO_SAMLP2_ARTIFACT_RESPONSE(response)->any, lasso_misc_text_node_new_with_xml_node(node)); lasso_release_doc(doc); lasso_saml20_profile_set_response_status(profile, LASSO_SAML2_STATUS_CODE_SUCCESS, NULL); } else { lasso_saml20_profile_set_response_status(profile, LASSO_SAML2_STATUS_CODE_RESPONDER, LASSO_PRIVATE_STATUS_CODE_FAILED_TO_RESTORE_ARTIFACT); } } else { /* if no artifact is present, it is a success anyway */ lasso_saml20_profile_set_response_status(profile, LASSO_SAML2_STATUS_CODE_SUCCESS, NULL); } /* Setup the signature */ lasso_check_good_rc(lasso_profile_saml20_setup_message_signature(profile, (LassoNode*)response)); /* Serialize the message */ lasso_assign_new_string(profile->msg_body, lasso_node_export_to_soap(profile->response)); cleanup: return rc; } int lasso_saml20_profile_process_artifact_response(LassoProfile *profile, const char *msg) { LassoSamlp2ArtifactResponse *artifact_response; int rc = 0; artifact_response = (LassoSamlp2ArtifactResponse*)lasso_samlp2_artifact_response_new(); lasso_check_good_rc(lasso_saml20_profile_process_any_response(profile, &artifact_response->parent, NULL, msg)); /* XXX: check signature status */ goto_cleanup_if_fail_with_rc(profile->response != NULL, critical_error(LASSO_PROFILE_ERROR_INVALID_RESPONSE)); if (artifact_response->any == NULL) { rc = LASSO_PROFILE_ERROR_MISSING_RESPONSE; } else { if (LASSO_IS_SAMLP2_REQUEST_ABSTRACT(artifact_response->any)) { lasso_assign_gobject(profile->request, artifact_response->any); } else if (LASSO_IS_SAMLP2_STATUS_RESPONSE(artifact_response->any)) { lasso_assign_gobject(profile->response, artifact_response->any); } else { rc = LASSO_PROFILE_ERROR_INVALID_RESPONSE; } } cleanup: lasso_release_gobject(artifact_response); return rc; } /** * lasso_saml20_profile_is_saml_query: * @query: HTTP query string * * Tests the query string to know if the URL is called as the result of a * SAML redirect (action initiated elsewhere) or not. * * Return value: TRUE if SAML query, FALSE otherwise **/ gboolean lasso_profile_is_saml_query(const gchar *query) { gchar *parameters[] = { LASSO_SAML2_FIELD_REQUEST "=", LASSO_SAML2_FIELD_RESPONSE "=", LASSO_SAML2_FIELD_ARTIFACT "=", NULL }; gint i; g_return_val_if_fail(query, FALSE); for (i=0; parameters[i]; i++) { if (strstr(query, parameters[i])) return TRUE; } return FALSE; } static void lasso_saml20_profile_set_session_from_dump_decrypt( LassoSaml2Assertion *assertion, LassoProfile *profile) { if (LASSO_IS_SAML2_ASSERTION(assertion) == FALSE) { return; } if (assertion->Subject != NULL && ! assertion->Subject->NameID && assertion->Subject->EncryptedID != NULL) { if (assertion->Subject->EncryptedID->original_data) { /* already decrypted */ lasso_assign_gobject(assertion->Subject->NameID, assertion->Subject->EncryptedID->original_data); lasso_release_gobject(assertion->Subject->EncryptedID); } else { /* decrypt */ int rc; GList *encryption_private_keys = lasso_server_get_encryption_private_keys(profile->server); rc = LASSO_PROFILE_ERROR_MISSING_ENCRYPTION_PRIVATE_KEY; lasso_foreach_full_begin(xmlSecKey*, encryption_private_key, it, encryption_private_keys); { rc = lasso_saml2_encrypted_element_decrypt( assertion->Subject->EncryptedID, encryption_private_key, (LassoNode**)&assertion->Subject->NameID); if (rc == 0) break; } lasso_foreach_full_end(); if (rc == 0) { lasso_release_gobject(assertion->Subject->EncryptedID); } else { message(G_LOG_LEVEL_WARNING, "Could not decrypt EncrypteID from" " assertion in session dump: %s", lasso_strerror(rc)); } } } } gint lasso_saml20_profile_set_session_from_dump(LassoProfile *profile) { GList *assertions = NULL; lasso_bad_param(PROFILE, profile); if (lasso_session_count_assertions(profile->session) > 0) { assertions = lasso_session_get_assertions(profile->session, NULL); g_list_foreach(assertions, (GFunc)lasso_saml20_profile_set_session_from_dump_decrypt, profile); lasso_release_list(assertions); } return 0; } /** * lasso_saml20_profile_process_name_identifier_decryption: * @profile: the #LassoProfile object * @name_id: the field containing the #LassoSaml2NameID object * @encrypted_id: the field containing an encrypted #LassoSaml2NameID as a * #LassoSaml2EncryptedElement * * Place content of the NameID in the profile nameIdentifier field, if no NameID is present but an * EncryptedElement is, then decrypt it, store it in place of the name_id field and in the * nameIdentifier field of the profile. * * Return value: 0 if successful, * LASSO_PROFILE_ERROR_MISSING_NAME_IDENTIFIER if no NameID can be found, * LASSO_PROFILE_ERROR_MISSING_ENCRYPTION_PRIVATE_KEY if an encryption element is present but no no * decryption key. */ gint lasso_saml20_profile_process_name_identifier_decryption(LassoProfile *profile, LassoSaml2NameID **name_id, LassoSaml2EncryptedElement **encrypted_id) { int rc = 0; lasso_bad_param(PROFILE, profile); lasso_null_param(name_id); lasso_null_param(encrypted_id); if (*name_id == NULL && *encrypted_id != NULL) { if (! LASSO_IS_SAML2_ENCRYPTED_ELEMENT(*encrypted_id)) { return LASSO_PROFILE_ERROR_MISSING_NAME_IDENTIFIER; } rc = LASSO_PROFILE_ERROR_MISSING_ENCRYPTION_PRIVATE_KEY; lasso_foreach_full_begin(xmlSecKey*, encryption_private_key, it, lasso_server_get_encryption_private_keys(profile->server)); { rc = lasso_saml2_encrypted_element_decrypt(*encrypted_id, encryption_private_key, &profile->nameIdentifier); if (rc == 0) break; } lasso_foreach_full_end(); if (rc) goto cleanup; if (! LASSO_IS_SAML2_NAME_ID(profile->nameIdentifier)) { rc = LASSO_PROFILE_ERROR_MISSING_NAME_IDENTIFIER; goto cleanup; } // swap the node contents lasso_assign_gobject(*name_id, LASSO_SAML2_NAME_ID(profile->nameIdentifier)); lasso_release_gobject(*encrypted_id); } else { lasso_assign_gobject(profile->nameIdentifier, (LassoNode*)*name_id); } cleanup: return rc; } /* * Request handling functions */ /** * lasso_saml20_profile_process_any_request: * @profile: a #LassoProfile object * @request_node: a #LassoNode object which will be initialized with the content of @request_msg * @request_msg: a string containing the request message as a SOAP XML message, a query string of * the content of SAMLRequest POST field. * * Parse a request message, initialize the given node object with it, try to extract basic SAML * profile information like the remote_provider_id or the name_id and validate the signature. * * Signature validation status is accessible in profile->signature_status, beware that if signature * validation fails no error code will be returned, you must explicitely verify the * profile->signature_status code. * * Return value: 0 if parsing is successful (even if signature validation fails), and otherwise, * LASSO_PROFILE_ERROR_INVALID_MSG, LASSO_PROFILE_ERROR_UNSUPPORTED_PROFILE, * * LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND. */ int lasso_saml20_profile_process_any_request(LassoProfile *profile, LassoNode *request_node, const char *request_msg) { int rc = 0; LassoProvider *remote_provider = NULL; LassoSamlp2RequestAbstract *request_abstract = NULL; LassoMessageFormat format; xmlDoc *doc = NULL; xmlNode *content = NULL; lasso_bad_param(PROFILE, profile); /* reset signature_status */ profile->signature_status = 0; format = lasso_node_init_from_message_with_format(request_node, request_msg, LASSO_MESSAGE_FORMAT_UNKNOWN, &doc, &content); if (format <= LASSO_MESSAGE_FORMAT_UNKNOWN) { rc = LASSO_PROFILE_ERROR_INVALID_MSG; goto cleanup; } switch (format) { case LASSO_MESSAGE_FORMAT_BASE64: profile->http_request_method = LASSO_HTTP_METHOD_POST; break; case LASSO_MESSAGE_FORMAT_SOAP: profile->http_request_method = LASSO_HTTP_METHOD_SOAP; break; case LASSO_MESSAGE_FORMAT_QUERY: profile->http_request_method = LASSO_HTTP_METHOD_REDIRECT; break; default: rc = LASSO_PROFILE_ERROR_UNSUPPORTED_PROFILE; goto cleanup; } lasso_assign_gobject(profile->request, request_node); if (format == LASSO_MESSAGE_FORMAT_QUERY) { lasso_assign_new_string(profile->msg_relayState, lasso_get_relaystate_from_query(request_msg)); } lasso_extract_node_or_fail(request_abstract, profile->request, SAMLP2_REQUEST_ABSTRACT, LASSO_PROFILE_ERROR_INVALID_MSG); goto_cleanup_if_fail_with_rc(LASSO_IS_SAML2_NAME_ID(request_abstract->Issuer), LASSO_PROFILE_ERROR_MISSING_ISSUER); lasso_assign_string(profile->remote_providerID, request_abstract->Issuer->content); rc = get_provider(profile, &remote_provider); goto_cleanup_if_fail(rc == 0); /* verify the signature at the request level */ if (content && doc && format != LASSO_MESSAGE_FORMAT_QUERY) { profile->signature_status = lasso_provider_verify_saml_signature(remote_provider, content, doc); } else if (format == LASSO_MESSAGE_FORMAT_QUERY) { profile->signature_status = lasso_provider_verify_query_signature(remote_provider, request_msg); } else { profile->signature_status = LASSO_PROFILE_ERROR_CANNOT_VERIFY_SIGNATURE; } cleanup: lasso_release_doc(doc); return rc; } int lasso_saml20_profile_process_soap_request(LassoProfile *profile, const char *request_msg) { int rc = 0; LassoSaml2NameID *issuer = NULL; LassoProvider *remote_provider = NULL; LassoSamlp2RequestAbstract *request_abstract = NULL; lasso_bad_param(PROFILE, profile); profile->signature_status = 0; lasso_assign_new_gobject(profile->request, lasso_node_new_from_soap(request_msg)); profile->http_request_method = LASSO_HTTP_METHOD_SOAP; lasso_extract_node_or_fail(request_abstract, profile->request, SAMLP2_REQUEST_ABSTRACT, LASSO_PROFILE_ERROR_INVALID_MSG); lasso_extract_node_or_fail(issuer, request_abstract->Issuer, SAML2_NAME_ID, LASSO_PROFILE_ERROR_MISSING_ISSUER); lasso_assign_string(profile->remote_providerID, issuer->content); rc = get_provider(profile, &remote_provider); goto_cleanup_if_fail(rc == 0); profile->signature_status = lasso_provider_verify_signature( remote_provider, request_msg, "ID", LASSO_MESSAGE_FORMAT_SOAP); switch (lasso_profile_get_signature_verify_hint(profile)) { case LASSO_PROFILE_SIGNATURE_VERIFY_HINT_FORCE: case LASSO_PROFILE_SIGNATURE_VERIFY_HINT_MAYBE: rc = profile->signature_status; break; case LASSO_PROFILE_SIGNATURE_VERIFY_HINT_IGNORE: break; case LASSO_PROFILE_SIGNATURE_VERIFY_HINT_LAST: g_assert_not_reached(); break; } cleanup: return rc; } int lasso_saml20_profile_init_request(LassoProfile *profile, const char *remote_provider_id, gboolean first_in_session, LassoSamlp2RequestAbstract *request_abstract, LassoHttpMethod http_method, LassoMdProtocolType protocol_type) { LassoServer *server = NULL; LassoSession *session = NULL; LassoProvider *remote_provider = NULL; LassoSaml2NameID *name_id = NULL; char *remote_provider_id_auto = NULL; int rc = 0; lasso_bad_param(PROFILE, profile); lasso_bad_param(SAMLP2_REQUEST_ABSTRACT, request_abstract); if (http_method != LASSO_HTTP_METHOD_ANY && http_method != LASSO_HTTP_METHOD_REDIRECT && http_method != LASSO_HTTP_METHOD_POST && http_method != LASSO_HTTP_METHOD_ARTIFACT_GET && http_method != LASSO_HTTP_METHOD_ARTIFACT_POST && http_method != LASSO_HTTP_METHOD_SOAP && http_method != LASSO_HTTP_METHOD_PAOS) { return critical_error(LASSO_PROFILE_ERROR_INVALID_HTTP_METHOD); } /* verify server and session object */ lasso_extract_node_or_fail(server, profile->server, SERVER, LASSO_PROFILE_ERROR_MISSING_SERVER); if (LASSO_IS_SESSION(profile->session)) { session = profile->session; } /* * With PAOS the ECP client determines the remote provider. * Everthing in the following block of code depends on * establishing the remote provider and subsequetnly operating * on the remote provider. */ if (http_method != LASSO_HTTP_METHOD_PAOS) { /* set remote provider Id */ if (! remote_provider_id) { if (first_in_session) { if (! session) { return LASSO_PROFILE_ERROR_SESSION_NOT_FOUND; } remote_provider_id_auto = lasso_session_get_provider_index(session, 0); } else { remote_provider_id_auto = lasso_server_get_first_providerID(server); } } if (! remote_provider_id && ! remote_provider_id_auto) { rc = LASSO_PROFILE_ERROR_CANNOT_FIND_A_PROVIDER; goto cleanup; } if (remote_provider_id) { lasso_assign_string(profile->remote_providerID, remote_provider_id); } else { lasso_assign_new_string(profile->remote_providerID, remote_provider_id_auto); } rc = get_provider(profile, &remote_provider); if (rc) goto cleanup; /* set the name identifier */ name_id = (LassoSaml2NameID*)lasso_profile_get_nameIdentifier(profile); if (LASSO_IS_SAML2_NAME_ID(name_id)) { lasso_assign_gobject(profile->nameIdentifier, (LassoNode*)name_id); } /* verify that this provider supports the current http method */ if (http_method == LASSO_HTTP_METHOD_ANY) { http_method = lasso_saml20_provider_get_first_http_method((LassoProvider*)server, remote_provider, protocol_type); } if (http_method == LASSO_HTTP_METHOD_NONE) { rc = LASSO_PROFILE_ERROR_UNSUPPORTED_PROFILE; goto cleanup; } if (! lasso_saml20_provider_accept_http_method( (LassoProvider*)server, remote_provider, protocol_type, http_method, TRUE)) { rc = LASSO_PROFILE_ERROR_UNSUPPORTED_PROFILE; } } profile->http_request_method = http_method; /* initialize request fields */ lasso_assign_new_string(request_abstract->ID, lasso_build_unique_id(32)); lasso_assign_string(request_abstract->Version, "2.0"); lasso_assign_new_gobject(request_abstract->Issuer, LASSO_SAML2_NAME_ID(lasso_saml2_name_id_new_with_string( LASSO_PROVIDER(profile->server)->ProviderID))); lasso_assign_new_string(request_abstract->IssueInstant, lasso_get_current_time()); lasso_assign_gobject(profile->request, LASSO_NODE(request_abstract)); /* set signature */ lasso_check_good_rc(lasso_profile_saml20_setup_message_signature(profile, profile->request)); cleanup: return rc; } static int lasso_saml20_profile_build_redirect_request_msg(LassoProfile *profile, const char *url) { return lasso_saml20_profile_build_http_redirect(profile, profile->request, url); } static int lasso_saml20_profile_build_post_request_msg(LassoProfile *profile, const char *url) { lasso_assign_string(profile->msg_url, url); lasso_assign_new_string(profile->msg_body, lasso_node_export_to_base64(profile->request)); check_msg_body; return 0; } static int lasso_saml20_profile_build_soap_request_msg(LassoProfile *profile, const char *url) { lasso_assign_string(profile->msg_url, url); lasso_assign_new_string(profile->msg_body, lasso_node_export_to_soap(profile->request)); check_msg_body; return 0; } /* * the url parameters is special for this function, it does not give the destination of the message * (it's implicit for the caller of this function) but where response should be posted later). */ static int lasso_profile_saml20_build_paos_request_msg(LassoProfile *profile, const char *url) { int rc = 0; LassoSamlp2AuthnRequest *request; LassoSamlp2IDPList *idp_list = NULL; char *message_id = NULL; lasso_extract_node_or_fail(request, profile->request, SAMLP2_AUTHN_REQUEST, LASSO_PROFILE_ERROR_MISSING_REQUEST); if (lasso_profile_get_idp_list(profile)) { lasso_extract_node_or_fail(idp_list, lasso_profile_get_idp_list(profile), SAMLP2_IDP_LIST, LASSO_PROFILE_ERROR_INVALID_IDP_LIST); } message_id = lasso_profile_get_message_id(profile); lasso_assign_new_string(profile->msg_body, lasso_node_export_to_paos_request_full(profile->request, profile->server->parent.ProviderID, url, message_id, profile->msg_relayState, request->IsPassive, request->ProviderName, idp_list)); check_msg_body; cleanup: lasso_release_string(message_id); return rc; } int lasso_saml20_profile_build_request_msg(LassoProfile *profile, const char *service, LassoHttpMethod method, const char *_url) { char *made_url = NULL, *url; int rc = 0; lasso_bad_param(PROFILE, profile); lasso_profile_clean_msg_info(profile); url = (char*)_url; /* check presence of a request */ if (! LASSO_IS_SAMLP2_REQUEST_ABSTRACT(profile->request)) { return critical_error(LASSO_PROFILE_ERROR_MISSING_REQUEST); } /* if not explicitely given, automatically determine an URI from the metadatas */ if (url == NULL) { LassoProvider *provider; lasso_check_good_rc(get_provider(profile, &provider)); made_url = url = get_url(provider, service, http_method_to_binding(method)); } // Usage of the Destination attribute on a request is mandated only // in "3.4.5.2" and "3.5.5.2" in saml-bindings-2.0-os for signed requests // and is marked as optional in the XSD schema otherwise. // PAOS is a special case because an SP does not select an IdP - ECP does // it instead. Therefore, this attribute needs to be left unpopulated. if (method == LASSO_HTTP_METHOD_PAOS) { lasso_release_string(((LassoSamlp2RequestAbstract*)profile->request)->Destination); } else if (url) { lasso_assign_string(((LassoSamlp2RequestAbstract*)profile->request)->Destination, url); } else { rc = LASSO_PROFILE_ERROR_UNKNOWN_PROFILE_URL; goto cleanup; } switch (method) { case LASSO_HTTP_METHOD_SOAP: rc = lasso_saml20_profile_build_soap_request_msg(profile, url); break; case LASSO_HTTP_METHOD_POST: rc = lasso_saml20_profile_build_post_request_msg(profile, url); break; case LASSO_HTTP_METHOD_REDIRECT: rc = lasso_saml20_profile_build_redirect_request_msg(profile, url); break; case LASSO_HTTP_METHOD_ARTIFACT_GET: rc = lasso_profile_saml20_build_artifact_get_request_msg(profile, url); break; case LASSO_HTTP_METHOD_ARTIFACT_POST: rc = lasso_profile_saml20_build_artifact_post_request_msg(profile, url); break; case LASSO_HTTP_METHOD_PAOS: rc = lasso_profile_saml20_build_paos_request_msg(profile, url); break; default: rc = LASSO_PROFILE_ERROR_INVALID_HTTP_METHOD; break; } cleanup: lasso_release_string(made_url); return rc; } /* * Response handling functions */ int lasso_saml20_profile_set_response_status(LassoProfile *profile, const char *code1, const char *code2) { LassoSamlp2StatusResponse *status_response = NULL; LassoSamlp2Status *status = NULL; LassoSamlp2StatusCode *status_code1 = NULL; LassoSamlp2StatusCode *status_code2 = NULL; int rc = 0; lasso_bad_param(PROFILE, profile); lasso_null_param(code1); lasso_extract_node_or_fail(status_response, profile->response, SAMLP2_STATUS_RESPONSE, LASSO_PROFILE_ERROR_MISSING_RESPONSE); if (! LASSO_IS_SAMLP2_STATUS(status_response->Status)) { lasso_assign_new_gobject(status_response->Status, (LassoSamlp2Status*)lasso_samlp2_status_new()); } status = status_response->Status; if (! LASSO_IS_SAMLP2_STATUS_CODE(status->StatusCode)) { lasso_assign_new_gobject(status->StatusCode, (LassoSamlp2StatusCode*)lasso_samlp2_status_code_new()); } status_code1 = status->StatusCode; lasso_assign_string(status_code1->Value, code1); if (code2) { if (! LASSO_IS_SAMLP2_STATUS_CODE(status_code1->StatusCode)) { lasso_assign_new_gobject(status_code1->StatusCode, (LassoSamlp2StatusCode*)lasso_samlp2_status_code_new()); } status_code2 = status_code1->StatusCode; lasso_assign_string(status_code2->Value, code2); } cleanup: return rc; } int lasso_saml20_profile_init_response(LassoProfile *profile, LassoSamlp2StatusResponse *status_response, const char *status_code1, const char *status_code2) { int rc = 0; lasso_bad_param(PROFILE, profile); if (! LASSO_IS_SAMLP2_STATUS_RESPONSE(status_response)) return LASSO_PROFILE_ERROR_MISSING_RESPONSE; lasso_assign_gobject(profile->response, status_response); lasso_assign_new_string(status_response->ID, lasso_build_unique_id(32)); lasso_assign_string(status_response->Version, "2.0"); if (LASSO_IS_SERVER(profile->server)) { lasso_assign_new_gobject(status_response->Issuer, LASSO_SAML2_NAME_ID(lasso_saml2_name_id_new_with_string( profile->server->parent.ProviderID))); } lasso_assign_new_string(status_response->IssueInstant, lasso_get_current_time()); if (LASSO_IS_SAMLP2_REQUEST_ABSTRACT(profile->request)) { lasso_assign_string(status_response->InResponseTo, ((LassoSamlp2RequestAbstract*)profile->request)->ID); } lasso_check_good_rc(lasso_profile_saml20_setup_message_signature(profile, profile->response)); if (status_code1) { lasso_saml20_profile_set_response_status(profile, status_code1, status_code2); } cleanup: return rc; } int lasso_saml20_profile_validate_request(LassoProfile *profile, gboolean needs_identity, LassoSamlp2StatusResponse *status_response, LassoProvider **provider_out) { int rc = 0; LassoSamlp2RequestAbstract *request_abstract = NULL; LassoSaml2NameID *issuer = NULL; LassoProvider *provider = NULL; lasso_bad_param(PROFILE, profile); lasso_bad_param(SAMLP2_STATUS_RESPONSE, status_response); /* verify request presence */ lasso_extract_node_or_fail(request_abstract, profile->request, SAMLP2_REQUEST_ABSTRACT, LASSO_PROFILE_ERROR_MISSING_REQUEST); /* look for identity object */ if (needs_identity) { goto_cleanup_if_fail_with_rc(LASSO_IS_IDENTITY(profile->identity), LASSO_PROFILE_ERROR_IDENTITY_NOT_FOUND); } /* extract provider */ lasso_extract_node_or_fail(issuer, request_abstract->Issuer, SAML2_NAME_ID, LASSO_PROFILE_ERROR_MISSING_ISSUER); lasso_assign_string(profile->remote_providerID, issuer->content); rc = get_provider(profile, &provider); if (rc) goto cleanup; /* init the response */ lasso_saml20_profile_init_response(profile, status_response, LASSO_SAML2_STATUS_CODE_SUCCESS, NULL); switch (lasso_profile_get_signature_verify_hint(profile)) { case LASSO_PROFILE_SIGNATURE_VERIFY_HINT_MAYBE: case LASSO_PROFILE_SIGNATURE_VERIFY_HINT_FORCE: if (profile->signature_status) { lasso_saml20_profile_set_response_status(profile, LASSO_SAML2_STATUS_CODE_REQUESTER, LASSO_LIB_STATUS_CODE_INVALID_SIGNATURE); return profile->signature_status; } case LASSO_PROFILE_SIGNATURE_VERIFY_HINT_IGNORE: break; case LASSO_PROFILE_SIGNATURE_VERIFY_HINT_LAST: g_assert_not_reached(); } cleanup: if (provider && provider_out) *provider_out = provider; return rc; } /** * lasso_saml20_profile_export_to_query: * @profile: a #LassoProfile * @msg: a #LassoNode to export as a query * @query: an ouput variable to store the result * @signature_method: the signature method for signing the query * @private_key_file:(allow-none): the private key to eventually sign the query * @private_key_password:(allow-none): the password of the private key if there is one * * Create a query following the DEFLATE encoding of the SAML 2.0 HTTP * Redirect binding. If the root message node has an XML signature, signature is removed and query * is signed. * * Return value: 0 if successful, an error code otherwise. */ static int lasso_saml20_profile_export_to_query(LassoProfile *profile, LassoNode *msg, char **query, LassoSignatureContext context) { char *unsigned_query = NULL; char *result = NULL; int rc = 0; unsigned_query = lasso_node_build_query(msg); goto_cleanup_if_fail_with_rc(unsigned_query != NULL, LASSO_PROFILE_ERROR_BUILDING_QUERY_FAILED); if (profile->msg_relayState) { unsigned_query = lasso_url_add_parameters(unsigned_query, 1, "RelayState", profile->msg_relayState, NULL); if (strlen(profile->msg_relayState) > 80) { message(G_LOG_LEVEL_WARNING, "Encoded a RelayState of more than 80 bytes, " "see #3.4.3 of saml-bindings-2.0-os"); } } if (lasso_ok_signature_method(context.signature_method)) { result = lasso_query_sign(unsigned_query, context); goto_cleanup_if_fail_with_rc(result != NULL, LASSO_PROFILE_ERROR_BUILDING_QUERY_FAILED); lasso_transfer_string(*query, result); } else { lasso_transfer_string(*query, unsigned_query); } cleanup: lasso_release_string(unsigned_query); lasso_release_string(result); return rc; } /** * lasso_saml20_profile_build_http_redirect: * @profile: a #LassoProfile object * @msg: a #LassoNode object representing a SAML 2.0 message * @must_sign: wheter to sign the query message using query signatures * @url: the URL where the query is targeted * * Build an HTTP URL with a query-string following the SAML 2.0 HTTP-Redirect binding rules, * eventually sign it. Any signature at the message level is removed. * * Return value: 0 if successful, an error code otherwise. */ gint lasso_saml20_profile_build_http_redirect(LassoProfile *profile, LassoNode *msg, const char *url) { char *query = NULL; int rc = 0; LassoSignatureContext context = LASSO_SIGNATURE_CONTEXT_NONE; goto_cleanup_if_fail_with_rc (url != NULL, LASSO_PROFILE_ERROR_UNKNOWN_PROFILE_URL); /* if message is signed, remove XML signature, add query signature */ lasso_assign_signature_context(context, lasso_node_get_signature(msg)); if (lasso_ok_signature_method(context.signature_method)) { lasso_node_remove_signature(msg); } lasso_check_good_rc(lasso_saml20_profile_export_to_query(profile, msg, &query, context)); lasso_assign_new_string(profile->msg_url, lasso_concat_url_query(url, query)); lasso_release(profile->msg_body); lasso_release(query); lasso_assign_new_signature_context(context, LASSO_SIGNATURE_CONTEXT_NONE); cleanup: return rc; } static int lasso_saml20_profile_build_redirect_response_msg(LassoProfile *profile, const char *url) { return lasso_saml20_profile_build_http_redirect(profile, profile->response, url); } static int lasso_saml20_profile_build_post_response_msg(LassoProfile *profile, const char *url) { lasso_assign_string(profile->msg_url, url); lasso_assign_new_string(profile->msg_body, lasso_node_export_to_base64(profile->response)); check_msg_body; return 0; } static int lasso_saml20_profile_build_soap_response_msg(LassoProfile *profile) { lasso_release_string(profile->msg_url); lasso_assign_new_string(profile->msg_body, lasso_node_export_to_soap(profile->response)); check_msg_body; return 0; } int lasso_saml20_profile_build_response_msg(LassoProfile *profile, char *service, LassoHttpMethod method, const char *_url) { LassoProvider *provider; char *made_url = NULL, *url; int rc = 0; lasso_bad_param(PROFILE, profile); lasso_profile_clean_msg_info(profile); lasso_check_good_rc(get_provider(profile, &provider)); url = (char*)_url; /* check presence of a request */ if (! LASSO_IS_SAMLP2_STATUS_RESPONSE(profile->response)) { return critical_error(LASSO_PROFILE_ERROR_MISSING_RESPONSE); } /* if not explicitely given, automatically determine an URI from the metadatas */ if (url == NULL && service && method != LASSO_HTTP_METHOD_SOAP) { made_url = url = get_response_url(provider, service, http_method_to_binding(method)); } /* only asynchronous bindings needs an URL for the response, SOAP does not need it, and PAOS * is special (response is a SOAP request !?! ) */ if (! url) { switch (method) { case LASSO_HTTP_METHOD_POST: case LASSO_HTTP_METHOD_REDIRECT: case LASSO_HTTP_METHOD_ARTIFACT_GET: case LASSO_HTTP_METHOD_ARTIFACT_POST: case LASSO_HTTP_METHOD_PAOS: goto_cleanup_with_rc(critical_error(LASSO_PROFILE_ERROR_UNKNOWN_PROFILE_URL)); default: break; } } if (url) { lasso_assign_string(((LassoSamlp2StatusResponse*)profile->response)->Destination, url); } switch (method) { case LASSO_HTTP_METHOD_POST: rc = lasso_saml20_profile_build_post_response_msg(profile, url); break; case LASSO_HTTP_METHOD_REDIRECT: rc = lasso_saml20_profile_build_redirect_response_msg(profile, url); break; case LASSO_HTTP_METHOD_SOAP: rc = lasso_saml20_profile_build_soap_response_msg(profile); break; case LASSO_HTTP_METHOD_ARTIFACT_GET: rc = lasso_profile_saml20_build_artifact_get_response_msg(profile, url); break; case LASSO_HTTP_METHOD_ARTIFACT_POST: rc = lasso_profile_saml20_build_artifact_post_response_msg(profile, url); break; default: rc= LASSO_PROFILE_ERROR_UNSUPPORTED_PROFILE; break; } cleanup: lasso_release_string(made_url); return rc; } static gboolean _lasso_saml20_is_valid_issuer(LassoSaml2NameID *name_id) { if (! LASSO_IS_SAML2_NAME_ID(name_id)) return FALSE; if (name_id->Format && lasso_strisnotequal(name_id->Format,LASSO_SAML2_NAME_IDENTIFIER_FORMAT_ENTITY)) { return FALSE; } return TRUE; } /** * lasso_saml20_profile_process_any_response: * @profile: the SAML 2.0 #LassoProfile object * @status_response: the prototype for the response object * @response_msg: the content of the response message * * Generic method for SAML 2.0 protocol message handling. * * It tries to validate a signature on the response msg, the result of this operation is kept inside * profile->signature_status. Use it afterward in your specific profile. Beware that it does not * return an error code if signature validation failed. It let's specific profile accept unsigned * messages. * * Return value: 0 if successful, an error code otherwise. */ int lasso_saml20_profile_process_any_response(LassoProfile *profile, LassoSamlp2StatusResponse *status_response, LassoHttpMethod *response_method, const char *response_msg) { int rc = 0; LassoProvider *remote_provider = NULL; LassoServer *server = NULL; LassoSamlp2StatusResponse *response_abstract = NULL; LassoSamlp2Status *status = NULL; LassoSamlp2StatusCode *status_code1 = NULL; LassoMessageFormat format; gboolean missing_issuer = FALSE; xmlDoc *doc = NULL; xmlNode *content = NULL; lasso_bad_param(PROFILE, profile); lasso_bad_param(SAMLP2_STATUS_RESPONSE, status_response); /* reset signature_status */ profile->signature_status = 0; format = lasso_node_init_from_message_with_format((LassoNode*)status_response, response_msg, LASSO_MESSAGE_FORMAT_UNKNOWN, &doc, &content); if (format <= LASSO_MESSAGE_FORMAT_UNKNOWN) { rc = LASSO_PROFILE_ERROR_INVALID_MSG; goto cleanup; } if (response_method) { switch (format) { case LASSO_MESSAGE_FORMAT_SOAP: *response_method = LASSO_HTTP_METHOD_SOAP; break; case LASSO_MESSAGE_FORMAT_QUERY: *response_method = LASSO_HTTP_METHOD_REDIRECT; break; case LASSO_MESSAGE_FORMAT_BASE64: *response_method = LASSO_HTTP_METHOD_POST; break; default: return LASSO_PROFILE_ERROR_UNSUPPORTED_PROFILE; } } lasso_assign_gobject(profile->response, (LassoNode*)status_response); lasso_extract_node_or_fail(response_abstract, profile->response, SAMLP2_STATUS_RESPONSE, LASSO_PROFILE_ERROR_INVALID_MSG); lasso_extract_node_or_fail(server, profile->server, SERVER, LASSO_PROFILE_ERROR_MISSING_SERVER); if (_lasso_saml20_is_valid_issuer(response_abstract->Issuer)) { lasso_assign_string(profile->remote_providerID, response_abstract->Issuer->content); remote_provider = lasso_server_get_provider(server, profile->remote_providerID); } else { missing_issuer = TRUE; } if (remote_provider) { /* verify the signature at the message level */ if (content && doc && format != LASSO_MESSAGE_FORMAT_QUERY) { profile->signature_status = lasso_provider_verify_saml_signature(remote_provider, content, doc); } else if (format == LASSO_MESSAGE_FORMAT_QUERY) { profile->signature_status = lasso_provider_verify_query_signature(remote_provider, response_msg); } else { profile->signature_status = LASSO_DS_ERROR_SIGNATURE_VERIFICATION_FAILED; } } else { rc = LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND; profile->signature_status = LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND; goto cleanup; } /* verify status code */ lasso_extract_node_or_fail(status, status_response->Status, SAMLP2_STATUS, LASSO_PROFILE_ERROR_MISSING_STATUS_CODE); lasso_extract_node_or_fail(status_code1, status->StatusCode, SAMLP2_STATUS_CODE, LASSO_PROFILE_ERROR_MISSING_STATUS_CODE); if (lasso_strisnotequal(status_code1->Value,LASSO_SAML2_STATUS_CODE_SUCCESS)) { LassoSamlp2StatusCode *status_code2 = status_code1->StatusCode; rc = LASSO_PROFILE_ERROR_STATUS_NOT_SUCCESS; if (!status_code2) goto cleanup; if (!status_code2->Value) goto cleanup; /* FIXME: what to do with secondary status code ? */ if (lasso_strisequal(status_code2->Value, LASSO_SAML2_STATUS_CODE_REQUEST_DENIED)) { rc = LASSO_PROFILE_ERROR_REQUEST_DENIED; } } cleanup: lasso_release_doc(doc); if (rc) { return rc; } switch (lasso_profile_get_signature_verify_hint(profile)) { case LASSO_PROFILE_SIGNATURE_VERIFY_HINT_MAYBE: case LASSO_PROFILE_SIGNATURE_VERIFY_HINT_FORCE: if (profile->signature_status) { return LASSO_PROFILE_ERROR_CANNOT_VERIFY_SIGNATURE; } case LASSO_PROFILE_SIGNATURE_VERIFY_HINT_IGNORE: break; case LASSO_PROFILE_SIGNATURE_VERIFY_HINT_LAST: g_assert_not_reached(); } if (missing_issuer) { return LASSO_PROFILE_ERROR_MISSING_ISSUER; } return 0; } /** * lasso_saml20_profile_process_soap_response: * * Generic method for processing SAML 2.0 protocol message as a SOAP response. * * Return value: 0 if successful; an error code otherwise. */ int lasso_saml20_profile_process_soap_response(LassoProfile *profile, const char *response_msg) { return lasso_saml20_profile_process_soap_response_with_headers( profile, response_msg, NULL); } /** * lasso_saml20_profile_process_soap_response_with_headers: * @profile: the SAML 2.0 #LassoProfile object * @response_msg: xml response message * @header_return: If non-NULL the soap headers are returned at this * pointer as a #LassoSoapHeader object. * * Generic method for processing SAML 2.0 protocol message as a SOAP response. * The SOAP headers are returned via the header_return parameter * if the parameter is non-NULL. The caller is responsible for freeing * the SOAP header by calling lasso_release_gobject(). * * Return value: 0 if successful; an error code otherwise. */ int lasso_saml20_profile_process_soap_response_with_headers(LassoProfile *profile, const char *response_msg, LassoSoapHeader **header_return) { int rc = 0; LassoSoapEnvelope *envelope = NULL; LassoSoapHeader *header = NULL; LassoSoapBody *body = NULL; LassoSaml2NameID *issuer = NULL; LassoProvider *remote_provider = NULL; LassoServer *server = NULL; LassoSamlp2StatusResponse *response_abstract = NULL; lasso_bad_param(PROFILE, profile); lasso_null_param(response_msg); if (header_return) { *header_return = NULL; } profile->signature_status = 0; /* Get the SOAP envelope */ lasso_extract_node_or_fail(envelope, lasso_soap_envelope_new_from_message(response_msg), SOAP_ENVELOPE, LASSO_PROFILE_ERROR_INVALID_SOAP_MSG); /* Get and validate the SOAP body, assign it to the profile response */ lasso_extract_node_or_fail(body, envelope->Body, SOAP_BODY, LASSO_SOAP_ERROR_MISSING_BODY); if (body->any && LASSO_IS_NODE(body->any->data)) { lasso_assign_gobject(profile->response, body->any->data); } else { lasso_release_gobject(profile->response); goto_cleanup_with_rc(LASSO_SOAP_ERROR_MISSING_BODY); } /* Get the optional SOAP header, validate it, optionally return it */ if (envelope->Header) { lasso_extract_node_or_fail(header, envelope->Header, SOAP_HEADER, LASSO_PROFILE_ERROR_INVALID_SOAP_MSG); } if (header_return) { if (header) { lasso_assign_gobject(*header_return, header); } } /* Extract and validate the response data */ lasso_extract_node_or_fail(response_abstract, profile->response, SAMLP2_STATUS_RESPONSE, LASSO_PROFILE_ERROR_INVALID_MSG); lasso_extract_node_or_fail(server, profile->server, SERVER, LASSO_PROFILE_ERROR_MISSING_SERVER); lasso_extract_node_or_fail(issuer, response_abstract->Issuer, SAML2_NAME_ID, LASSO_PROFILE_ERROR_MISSING_ISSUER); lasso_assign_string(profile->remote_providerID, issuer->content); remote_provider = lasso_server_get_provider(server, profile->remote_providerID); if (remote_provider == NULL) { rc = LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND; goto cleanup; } profile->signature_status = lasso_provider_verify_signature( remote_provider, response_msg, "ID", LASSO_MESSAGE_FORMAT_SOAP); switch (lasso_profile_get_signature_verify_hint(profile)) { case LASSO_PROFILE_SIGNATURE_VERIFY_HINT_MAYBE: case LASSO_PROFILE_SIGNATURE_VERIFY_HINT_FORCE: rc = profile->signature_status; break; case LASSO_PROFILE_SIGNATURE_VERIFY_HINT_IGNORE: break; default: g_assert(0); break; } cleanup: lasso_release_gobject(envelope); return rc; } gint lasso_saml20_profile_build_http_redirect_query_simple(LassoProfile *profile, LassoNode *msg, const char *profile_name, gboolean is_response) { char *idx = NULL; char *url = NULL; LassoProvider *remote_provider = NULL; int rc = 0; goto_cleanup_if_fail_with_rc(profile->remote_providerID != NULL, LASSO_PROFILE_ERROR_MISSING_REMOTE_PROVIDERID); remote_provider = lasso_server_get_provider(profile->server, profile->remote_providerID); goto_cleanup_if_fail_with_rc(LASSO_IS_PROVIDER(remote_provider), LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND); if (is_response) { idx = g_strdup_printf("%s HTTP-Redirect ResponseLocation", profile_name); url = lasso_provider_get_metadata_one(remote_provider, idx); lasso_release(idx); } if (url == NULL) { idx = g_strdup_printf("%s HTTP-Redirect", profile_name); url = lasso_provider_get_metadata_one(remote_provider, idx); lasso_release(idx); } /* remove signature at the message level */ rc = lasso_saml20_profile_build_http_redirect(profile, msg, url); cleanup: lasso_release(url); return rc; } gint lasso_profile_saml20_setup_message_signature(LassoProfile *profile, LassoNode *request_or_response) { lasso_bad_param(PROFILE, profile); LassoSignatureContext context = LASSO_SIGNATURE_CONTEXT_NONE; lasso_error_t rc = 0; switch (lasso_profile_get_signature_hint(profile)) { case LASSO_PROFILE_SIGNATURE_HINT_MAYBE: if (! lasso_flag_sign_messages) { message(G_LOG_LEVEL_WARNING, "message should be signed but no-sign-messages flag is " \ "activated, so it won't be"); return 0; } break; case LASSO_PROFILE_SIGNATURE_HINT_FORBID: return 0; default: break; } if (! LASSO_IS_SERVER(profile->server)) { return LASSO_PROFILE_ERROR_MISSING_SERVER; } lasso_check_good_rc(lasso_server_get_signature_context_for_provider_by_name(profile->server, profile->remote_providerID, &context)); lasso_check_good_rc(lasso_node_set_signature(request_or_response, context)); cleanup: return rc; } /** * lasso_saml20_profile_setup_subject: * @profile: a #LassoProfile object * @subject: a #LassoSaml2Subject object * * Encrypt subject if necessary. */ int lasso_saml20_profile_setup_subject(LassoProfile *profile, LassoSaml2Subject *subject) { LassoProvider *remote_provider; remote_provider = lasso_server_get_provider(profile->server, profile->remote_providerID); g_return_val_if_fail (LASSO_IS_PROVIDER(remote_provider), LASSO_ERROR_CAST_FAILED); if (! (lasso_provider_get_encryption_mode(remote_provider) & LASSO_ENCRYPTION_MODE_NAMEID)) { return 0; } return lasso_saml20_profile_setup_encrypted_node(remote_provider, (LassoNode**)subject->NameID, (LassoNode**)subject->EncryptedID); } gint lasso_saml20_profile_setup_encrypted_node(LassoProvider *provider, LassoNode **node_to_encrypt, LassoNode **node_destination) { LassoNode *encrypted_node; if (! LASSO_IS_PROVIDER(provider)) { return critical_error(LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND); } encrypted_node = (LassoNode*)lasso_node_encrypt(*node_to_encrypt, lasso_provider_get_encryption_public_key(provider), lasso_provider_get_encryption_sym_key_type(provider), lasso_provider_get_key_encryption_method(provider), provider->ProviderID); if (! encrypted_node) { return LASSO_DS_ERROR_ENCRYPTION_FAILED; } lasso_assign_new_gobject(*node_destination, encrypted_node); lasso_release_gobject(*node_to_encrypt); return 0; } /** * Check the profile->signature_status flag, if signature validation is activated, report it as an * error, if not not return 0. */ int lasso_saml20_profile_check_signature_status(LassoProfile *profile) { int rc = 0; if (profile->signature_status) { switch (lasso_profile_get_signature_verify_hint(profile)) { case LASSO_PROFILE_SIGNATURE_VERIFY_HINT_MAYBE: case LASSO_PROFILE_SIGNATURE_VERIFY_HINT_FORCE: rc = profile->signature_status; break; case LASSO_PROFILE_SIGNATURE_VERIFY_HINT_IGNORE: break; case LASSO_PROFILE_SIGNATURE_VERIFY_HINT_LAST: g_assert_not_reached(); break; } } return rc; } lasso-2.8.2/lasso/saml-2.0/PaxHeaders/profile.h0000644000000000000000000000013214114336625016112 xustar0030 mtime=1630649749.818436908 30 atime=1678814151.012993868 30 ctime=1678814321.069953651 lasso-2.8.2/lasso/saml-2.0/profile.h0000644000175000017500000000217514114336625021367 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAML2_PROFIL_H__ #define __LASSO_SAML2_PROFIL_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ LASSO_EXPORT gboolean lasso_profile_is_saml_query(const gchar *query); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAML2_PROFIL_H__ */ lasso-2.8.2/lasso/saml-2.0/PaxHeaders/name_id_management.h0000644000000000000000000000013214114336625020242 xustar0030 mtime=1630649749.818436908 30 atime=1678814151.008993845 30 ctime=1678814321.073953673 lasso-2.8.2/lasso/saml-2.0/name_id_management.h0000644000175000017500000000701514114336625023515 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_NAME_ID_MANAGEMENT_H__ #define __LASSO_NAME_ID_MANAGEMENT_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "../id-ff/profile.h" #include "../xml/saml-2.0/samlp2_manage_name_id_request.h" #include "../xml/saml-2.0/samlp2_manage_name_id_response.h" #define LASSO_TYPE_NAME_ID_MANAGEMENT (lasso_name_id_management_get_type()) #define LASSO_NAME_ID_MANAGEMENT(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_NAME_ID_MANAGEMENT, LassoNameIdManagement)) #define LASSO_NAME_ID_MANAGEMENT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_NAME_ID_MANAGEMENT, \ LassoNameIdManagementClass)) #define LASSO_IS_NAME_ID_MANAGEMENT(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_NAME_ID_MANAGEMENT)) #define LASSO_IS_NAME_ID_MANAGEMENT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_NAME_ID_MANAGEMENT)) #define LASSO_NAME_ID_MANAGEMENT_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_NAME_ID_MANAGEMENT, \ LassoNameIdManagementClass)) typedef struct _LassoNameIdManagement LassoNameIdManagement; typedef struct _LassoNameIdManagementClass LassoNameIdManagementClass; struct _LassoNameIdManagement { LassoProfile parent; /*< private >*/ void *private_data; /* reserved for future use */ }; struct _LassoNameIdManagementClass { LassoProfileClass parent; }; LASSO_EXPORT GType lasso_name_id_management_get_type(void); LASSO_EXPORT LassoNameIdManagement *lasso_name_id_management_new(LassoServer *server); LASSO_EXPORT LassoNameIdManagement *lasso_name_id_management_new_from_dump( LassoServer *server, const char *dump); LASSO_EXPORT char* lasso_name_id_management_dump(LassoNameIdManagement *name_id_management); LASSO_EXPORT void lasso_name_id_management_destroy(LassoNameIdManagement *name_id_management); LASSO_EXPORT lasso_error_t lasso_name_id_management_init_request( LassoNameIdManagement *name_id_management, char *remote_provider_id, char *new_name_id, LassoHttpMethod http_method); LASSO_EXPORT lasso_error_t lasso_name_id_management_build_request_msg( LassoNameIdManagement *name_id_management); LASSO_EXPORT lasso_error_t lasso_name_id_management_process_request_msg( LassoNameIdManagement *name_id_management, gchar *request_msg); LASSO_EXPORT lasso_error_t lasso_name_id_management_validate_request( LassoNameIdManagement *name_id_management); LASSO_EXPORT lasso_error_t lasso_name_id_management_build_response_msg( LassoNameIdManagement *name_id_management); LASSO_EXPORT lasso_error_t lasso_name_id_management_process_response_msg( LassoNameIdManagement *name_id_management, gchar *response_msg); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_NAME_ID_MANAGEMENT_H__ */ lasso-2.8.2/lasso/saml-2.0/PaxHeaders/logoutprivate.h0000644000000000000000000000013214114336625017356 xustar0030 mtime=1630649749.818436908 30 atime=1678814151.008993845 30 ctime=1678814321.109953878 lasso-2.8.2/lasso/saml-2.0/logoutprivate.h0000644000175000017500000000313714114336625022632 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAML20_LOGOUT_PRIVATE_H__ #define __LASSO_SAML20_LOGOUT_PRIVATE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "../id-ff/logout.h" int lasso_saml20_logout_init_request(LassoLogout *logout, LassoProvider *remote_provider, LassoHttpMethod http_method); int lasso_saml20_logout_build_request_msg(LassoLogout *logout); int lasso_saml20_logout_process_request_msg(LassoLogout *logout, char *request_msg); int lasso_saml20_logout_validate_request(LassoLogout *logout); int lasso_saml20_logout_build_response_msg(LassoLogout *logout); int lasso_saml20_logout_process_response_msg(LassoLogout *logout, const char *response_msg); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAML20_LOGOUT_PRIVATE_H__ */ lasso-2.8.2/lasso/saml-2.0/PaxHeaders/logout.c0000644000000000000000000000013114114336625015755 xustar0030 mtime=1630649749.818436908 30 atime=1678814237.533479945 29 ctime=1678814321.09795381 lasso-2.8.2/lasso/saml-2.0/logout.c0000644000175000017500000003271114114336625021232 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../xml/private.h" #include "providerprivate.h" #include "logoutprivate.h" #include "profileprivate.h" #include "federationprivate.h" #include "../id-ff/providerprivate.h" #include "../id-ff/logout.h" #include "../id-ff/logoutprivate.h" #include "../id-ff/sessionprivate.h" #include "../id-ff/profileprivate.h" #include "../id-ff/serverprivate.h" #include "../id-ff/sessionprivate.h" #include "../xml/xml_enc.h" #include "../xml/saml-2.0/samlp2_logout_request.h" #include "../xml/saml-2.0/samlp2_logout_response.h" #include "../xml/saml-2.0/saml2_assertion.h" #include "../xml/saml-2.0/saml2_authn_statement.h" #include "../utils.h" static void check_soap_support(gchar *key, LassoProvider *provider, LassoProfile *profile); int lasso_saml20_logout_init_request(LassoLogout *logout, LassoProvider *remote_provider, LassoHttpMethod http_method) { LassoProfile *profile = &logout->parent; LassoSession *session = NULL; LassoSamlp2LogoutRequest *logout_request = NULL; GList *name_ids = NULL; LassoSaml2NameID *name_id = NULL; int rc = 0; logout_request = (LassoSamlp2LogoutRequest*) lasso_samlp2_logout_request_new(); lasso_check_good_rc(lasso_saml20_profile_init_request(profile, remote_provider->ProviderID, FALSE, &logout_request->parent, http_method, LASSO_MD_PROTOCOL_TYPE_SINGLE_LOGOUT)); /* session existence has been checked in id-ff/ */ session = lasso_profile_get_session(profile); name_ids = lasso_session_get_name_ids(session, profile->remote_providerID); if (!name_ids || ! LASSO_IS_SAML2_NAME_ID(name_ids->data)) { goto_cleanup_with_rc(LASSO_PROFILE_ERROR_MISSING_ASSERTION); } name_id = name_ids->data; /* take the first */ /* Set the NameID */ lasso_assign_gobject(logout_request->NameID, name_id); /* Encrypt NameID */ if (lasso_provider_get_encryption_mode(remote_provider) == LASSO_ENCRYPTION_MODE_NAMEID) { lasso_check_good_rc(lasso_saml20_profile_setup_encrypted_node(remote_provider, (LassoNode**)&logout_request->NameID, (LassoNode**)&logout_request->EncryptedID)); } /* set the session index if one is found */ { GList *session_indexes = lasso_session_get_session_indexes(profile->session, remote_provider->ProviderID, &name_id->parent); lasso_samlp2_logout_request_set_session_indexes(logout_request, session_indexes); lasso_release_list_of_strings(session_indexes); } cleanup: lasso_release_list_of_gobjects(name_ids); lasso_release_gobject(logout_request); return rc; } int lasso_saml20_logout_build_request_msg(LassoLogout *logout) { LassoProfile *profile = &logout->parent; return lasso_saml20_profile_build_request_msg(profile, "SingleLogoutService", logout->parent.http_request_method, NULL); } int lasso_saml20_logout_process_request_msg(LassoLogout *logout, char *request_msg) { LassoProfile *profile = NULL; LassoSamlp2LogoutRequest *logout_request = NULL; int rc1 = 0, rc2 = 0, rc = 0; lasso_bad_param(LOGOUT, logout); lasso_null_param(request_msg); profile = LASSO_PROFILE(logout); logout_request = (LassoSamlp2LogoutRequest*) lasso_samlp2_logout_request_new(); rc1 = lasso_saml20_profile_process_any_request(profile, (LassoNode*)logout_request, request_msg); goto_cleanup_if_fail_with_rc(rc1 == 0, rc1); /* remember initial request method, for setting it for generating response */ logout->initial_http_request_method = profile->http_request_method; rc2 = lasso_saml20_profile_process_name_identifier_decryption(profile, &logout_request->NameID, &logout_request->EncryptedID); goto_cleanup_if_fail_with_rc(rc2 == 0, rc2); lasso_check_good_rc(lasso_saml20_profile_check_signature_status(profile)); cleanup: lasso_release_gobject(logout_request); return rc; } int lasso_saml20_logout_validate_request(LassoLogout *logout) { LassoProfile *profile = &logout->parent; LassoProvider *remote_provider = NULL; LassoSamlp2StatusResponse *response = NULL; LassoSaml2NameID *name_id = NULL; LassoSamlp2LogoutRequest *logout_request = NULL; GList *local_session_indexes = NULL; GList *logout_session_indexes = NULL; int rc = 0; goto_cleanup_if_fail_with_rc(LASSO_IS_SAMLP2_LOGOUT_REQUEST(profile->request), LASSO_PROFILE_ERROR_MISSING_REQUEST); logout_request = (LassoSamlp2LogoutRequest*)profile->request; /* check the issuer */ lasso_assign_string(profile->remote_providerID, logout_request->parent.Issuer->content); remote_provider = lasso_server_get_provider(profile->server, profile->remote_providerID); goto_cleanup_if_fail_with_rc(LASSO_IS_PROVIDER(remote_provider), LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND); /* create the response */ response = (LassoSamlp2StatusResponse*)lasso_samlp2_logout_response_new(); lasso_check_good_rc(lasso_saml20_profile_init_response(profile, response, LASSO_SAML2_STATUS_CODE_SUCCESS, NULL)); /* Get the name identifier */ name_id = LASSO_SAMLP2_LOGOUT_REQUEST(profile->request)->NameID; if (name_id == NULL) { lasso_saml20_profile_set_response_status_responder( profile, LASSO_LIB_STATUS_CODE_FEDERATION_DOES_NOT_EXIST); goto_cleanup_with_rc(LASSO_PROFILE_ERROR_NAME_IDENTIFIER_NOT_FOUND); } if (profile->session == NULL) { lasso_saml20_profile_set_response_status_responder(profile, LASSO_SAML2_STATUS_CODE_REQUEST_DENIED); goto_cleanup_with_rc(LASSO_PROFILE_ERROR_SESSION_NOT_FOUND); } /* verify authentication */ if (profile->session) { local_session_indexes = lasso_session_get_session_indexes(profile->session, profile->remote_providerID, &name_id->parent); } if (! local_session_indexes) { lasso_saml20_profile_set_response_status_responder(profile, LASSO_SAML2_STATUS_CODE_REQUEST_DENIED); return LASSO_PROFILE_ERROR_MISSING_ASSERTION; } /* verify session index */ if (remote_provider->role == LASSO_PROVIDER_ROLE_IDP && logout_request->SessionIndex == NULL) { /* ok, no SessionIndex from IdP, all sessions logout */ } else { GList *i, *j; int ok = 0; logout_session_indexes = lasso_samlp2_logout_request_get_session_indexes(logout_request); lasso_foreach(i, logout_session_indexes) { lasso_foreach(j, local_session_indexes) { if (lasso_strisequal((char*)i->data, (char*)j->data)) { ok = 1; } } } if (! ok) { lasso_saml20_profile_set_response_status_responder(profile, LASSO_SAML2_STATUS_CODE_REQUEST_DENIED); goto_cleanup_with_rc(LASSO_LOGOUT_ERROR_UNKNOWN_PRINCIPAL); } } /* if SOAP request method at IDP then verify all the remote service providers support SOAP protocol profile. If one remote authenticated principal service provider doesn't support SOAP then return UnsupportedProfile to original service provider */ if (remote_provider->role == LASSO_PROVIDER_ROLE_SP && profile->http_request_method == LASSO_HTTP_METHOD_SOAP) { logout->private_data->all_soap = TRUE; g_hash_table_foreach(profile->server->providers, (GHFunc)check_soap_support, profile); if (logout->private_data->all_soap == FALSE) { lasso_saml20_profile_set_response_status_responder(profile, LASSO_LIB_STATUS_CODE_UNSUPPORTED_PROFILE); goto_cleanup_with_rc(LASSO_LOGOUT_ERROR_UNSUPPORTED_PROFILE); } } /* everything is ok, remove assertion */ lasso_session_remove_assertion(profile->session, profile->remote_providerID); /* if at IDP and nb sp logged > 1, then backup remote provider id, * request and response */ if (remote_provider->role == LASSO_PROVIDER_ROLE_SP && lasso_session_count_assertions(profile->session) >= 1) { lasso_transfer_string(logout->initial_remote_providerID, profile->remote_providerID); lasso_transfer_gobject(logout->initial_request, profile->request); lasso_transfer_gobject(logout->initial_response, profile->response); } cleanup: lasso_release_gobject(response); lasso_release_list_of_strings(local_session_indexes); lasso_release_list_of_strings(logout_session_indexes); return rc; } static void check_soap_support(G_GNUC_UNUSED gchar *key, LassoProvider *provider, LassoProfile *profile) { const GList *supported_profiles; if (strcmp(provider->ProviderID, profile->remote_providerID) == 0) return; /* original service provider (initiated logout) */ if (! lasso_session_has_slo_session(profile->session, provider->ProviderID)) { return; } supported_profiles = lasso_provider_get_metadata_list(provider, "SingleLogoutService SOAP"); if (supported_profiles) return; /* provider support profile */ LASSO_LOGOUT(profile)->private_data->all_soap = FALSE; } /* If at IDP and if there is no more assertion, IDP has logged out every SPs, return the initial * response to initial SP. Caution: We can't use the test (remote_provider->role == * LASSO_PROVIDER_ROLE_SP) to know whether the server is acting as an IDP or a SP, because it can be * a proxy. So we have to use the role of the initial remote provider instead. */ static void lasso_saml20_logout_restore_initial_state(LassoLogout *logout) { LassoProfile *profile = &logout->parent; if (logout->initial_remote_providerID) { lasso_transfer_string(profile->remote_providerID, logout->initial_remote_providerID); lasso_transfer_gobject(profile->request, logout->initial_request); lasso_transfer_gobject(profile->response, logout->initial_response); /* if some of the logout failed, set a partial logout status code */ if (logout->private_data->partial_logout || lasso_session_count_assertions(profile->session) > 0) { /* reset the partial logout status */ logout->private_data->partial_logout = FALSE; lasso_saml20_profile_set_response_status(profile, LASSO_SAML2_STATUS_CODE_SUCCESS, LASSO_SAML2_STATUS_CODE_PARTIAL_LOGOUT); } } } int lasso_saml20_logout_build_response_msg(LassoLogout *logout) { LassoProfile *profile = LASSO_PROFILE(logout); LassoSamlp2StatusResponse *response = NULL; int rc = 0; /* SP initiated logout */ lasso_saml20_logout_restore_initial_state(logout); if (! LASSO_IS_SAMLP2_STATUS_RESPONSE(profile->response)) { /* no response set here means request denied */ response = (LassoSamlp2StatusResponse*) lasso_samlp2_logout_response_new(); /* verify signature status */ if (lasso_saml20_profile_check_signature_status(profile) != 0) { lasso_check_good_rc(lasso_saml20_profile_init_response(profile, response, LASSO_SAML2_STATUS_CODE_REQUESTER, LASSO_LIB_STATUS_CODE_INVALID_SIGNATURE)); } else { lasso_check_good_rc(lasso_saml20_profile_init_response(profile, response, LASSO_SAML2_STATUS_CODE_RESPONDER, LASSO_SAML2_STATUS_CODE_REQUEST_DENIED)); } } else { lasso_check_good_rc(lasso_profile_saml20_setup_message_signature( profile, profile->response)); } /* build logout response message */ /* FIXME: should allow to override default response method, should just match that * request/response are of the same type synchronous or asynchronous */ rc = lasso_saml20_profile_build_response_msg(profile, "SingleLogoutService", logout->initial_http_request_method, NULL); cleanup: lasso_release_gobject(response); return rc; } int lasso_saml20_logout_process_response_msg(LassoLogout *logout, const char *response_msg) { LassoProfile *profile = &logout->parent; LassoHttpMethod response_method; LassoProvider *remote_provider = NULL; LassoSamlp2StatusResponse *response = NULL; int rc = 0; response = (LassoSamlp2StatusResponse*) lasso_samlp2_logout_response_new(); lasso_check_good_rc(lasso_saml20_profile_process_any_response(profile, response, &response_method, response_msg)); /* only if asked we report, otherwise we do not care */ if (profile->signature_status && lasso_profile_get_signature_verify_hint(profile) == (LassoProfileSignatureVerifyHint)LASSO_PROFILE_SIGNATURE_HINT_FORCE) { goto_cleanup_with_rc(profile->signature_status); } remote_provider = lasso_server_get_provider(logout->parent.server, logout->parent.remote_providerID); goto_cleanup_if_fail_with_rc(LASSO_IS_PROVIDER(remote_provider), LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND); cleanup: /* Not Success find finer error */ while (rc == LASSO_PROFILE_ERROR_STATUS_NOT_SUCCESS) { LassoSamlp2StatusCode *sub_status_code; char *value; logout->private_data->partial_logout = TRUE; sub_status_code = response->Status->StatusCode->StatusCode; if (! sub_status_code) break; value = sub_status_code->Value; if (lasso_strisequal(value,LASSO_SAML2_STATUS_CODE_PARTIAL_LOGOUT)) { rc = LASSO_LOGOUT_ERROR_PARTIAL_LOGOUT; break; } if (lasso_strisequal(value,LASSO_SAML2_STATUS_CODE_REQUEST_DENIED)) { rc = LASSO_LOGOUT_ERROR_REQUEST_DENIED; break; } if (lasso_strisequal(value,LASSO_SAML2_STATUS_CODE_UNKNOWN_PRINCIPAL)) { rc = LASSO_LOGOUT_ERROR_UNKNOWN_PRINCIPAL; break; } break; } if (lasso_session_count_assertions(profile->session) == 0) { lasso_saml20_logout_restore_initial_state(logout); } lasso_release_gobject(response); return rc; } lasso-2.8.2/lasso/saml-2.0/PaxHeaders/provider.h0000644000000000000000000000013214114336625016304 xustar0030 mtime=1630649749.818436908 30 atime=1678814151.012993868 30 ctime=1678814321.073953673 lasso-2.8.2/lasso/saml-2.0/provider.h0000644000175000017500000000242514114336625021557 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAML20_PROVIDER_H__ #define __LASSO_SAML20_PROVIDER_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "../xml/saml-2.0/saml2_encrypted_element.h" #include "../id-ff/provider.h" LASSO_EXPORT LassoSaml2EncryptedElement* lasso_provider_saml2_node_encrypt(const LassoProvider *provider, LassoNode *lasso_node); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAML20_PROVIDER_H__ */ lasso-2.8.2/lasso/saml-2.0/PaxHeaders/login.c0000644000000000000000000000013214364261206015554 xustar0030 mtime=1674666630.750769144 30 atime=1678814235.545468721 30 ctime=1678814321.093953788 lasso-2.8.2/lasso/saml-2.0/login.c0000644000175000017500000016345114364261206021036 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../xml/private.h" #include #include #include "providerprivate.h" #include "loginprivate.h" #include "profileprivate.h" #include "federationprivate.h" #include "saml2_helper.h" #include "../id-ff/providerprivate.h" #include "../id-ff/serverprivate.h" #include "../id-ff/login.h" #include "../id-ff/identityprivate.h" #include "../id-ff/sessionprivate.h" #include "../id-ff/loginprivate.h" #include "../xml/ecp/ecp_relaystate.h" #include "../xml/paos_response.h" #include "../xml/xml_enc.h" #include "../xml/saml-2.0/samlp2_authn_request.h" #include "../xml/saml-2.0/samlp2_response.h" #include "../xml/saml-2.0/saml2_assertion.h" #include "../xml/saml-2.0/saml2_audience_restriction.h" #include "../xml/saml-2.0/saml2_authn_statement.h" #include "../xml/saml-2.0/saml2_encrypted_element.h" #include "../xml/saml-2.0/saml2_attribute.h" #include "../xml/saml-2.0/saml2_attribute_statement.h" #include "../xml/saml-2.0/saml2_attribute_value.h" #include "../xml/saml-2.0/saml2_name_id.h" #include "../xml/saml-2.0/saml2_xsd.h" #include "../xml/saml-2.0/samlp2_artifact_response.h" #include "../utils.h" static int lasso_saml20_login_process_federation(LassoLogin *login, gboolean is_consent_obtained); static gboolean lasso_saml20_login_must_ask_for_consent_private(LassoLogin *login); static gint lasso_saml20_login_process_response_status_and_assertion(LassoLogin *login); static char* lasso_saml20_login_get_assertion_consumer_service_url(LassoLogin *login, LassoProvider *remote_provider); static gboolean _lasso_login_must_verify_signature(LassoProfile *profile) G_GNUC_UNUSED; static gboolean _lasso_login_must_verify_authn_request_signature(LassoProfile *profile); /* No need to check type of arguments, it has been done in lasso_login_* methods */ gint lasso_saml20_login_init_authn_request(LassoLogin *login, LassoHttpMethod http_method) { LassoProfile *profile = NULL; LassoSamlp2RequestAbstract *request = NULL; gchar *default_name_id_format = NULL; int rc = 0; profile = &login->parent; /* new */ request = (LassoSamlp2RequestAbstract*)lasso_samlp2_authn_request_new(); lasso_check_good_rc(lasso_saml20_profile_init_request(profile, profile->remote_providerID, FALSE, request, http_method, LASSO_MD_PROTOCOL_TYPE_SINGLE_SIGN_ON)); /* FIXME: keep old behaviour */ login->http_method = login->parent.http_request_method; /* save request ID, for later check */ lasso_assign_string(login->private_data->request_id, request->ID); /* set name id policy */ lasso_assign_new_gobject(LASSO_SAMLP2_AUTHN_REQUEST(request)->NameIDPolicy, lasso_samlp2_name_id_policy_new()); /* set name id policy format */ /* no need to check server, done in init_request */ default_name_id_format = lasso_provider_get_metadata_one_for_role(&profile->server->parent, LASSO_PROVIDER_ROLE_SP, "NameIDFormat"); if (default_name_id_format) { /* steal the string */ lasso_assign_new_string(LASSO_SAMLP2_AUTHN_REQUEST(request)->NameIDPolicy->Format, default_name_id_format); } else { lasso_assign_string(LASSO_SAMLP2_AUTHN_REQUEST(request)->NameIDPolicy->Format, LASSO_SAML2_NAME_IDENTIFIER_FORMAT_TRANSIENT); } cleanup: lasso_release_gobject(request); return rc; } static gboolean want_authn_request_signed(LassoProvider *provider) { char *s; gboolean rc = FALSE; s = lasso_provider_get_metadata_one_for_role(provider, LASSO_PROVIDER_ROLE_IDP, LASSO_SAML2_METADATA_ATTRIBUTE_WANT_AUTHN_REQUEST_SIGNED); if (lasso_strisequal(s, "true")) { rc = TRUE; } lasso_release_string(s); return rc; } static gboolean authn_request_signed(LassoProvider *provider) { char *s; gboolean rc = FALSE; s = lasso_provider_get_metadata_one_for_role(provider, LASSO_PROVIDER_ROLE_SP, LASSO_SAML2_METADATA_ATTRIBUTE_AUTHN_REQUEST_SIGNED); if (lasso_strisequal(s,"true")) { rc = TRUE; } lasso_release_string(s); return rc; } static gboolean _lasso_login_must_sign_non_authn_request(LassoLogin *profile) { switch (lasso_profile_get_signature_hint(&profile->parent)) { case LASSO_PROFILE_SIGNATURE_HINT_MAYBE: return lasso_flag_add_signature; case LASSO_PROFILE_SIGNATURE_HINT_FORCE: return TRUE; case LASSO_PROFILE_SIGNATURE_HINT_FORBID: return FALSE; default: return TRUE; } } static gboolean _lasso_login_must_sign(LassoProfile *profile) { gboolean ret; LassoProvider *remote_provider; remote_provider = lasso_server_get_provider(profile->server, profile->remote_providerID); switch (lasso_profile_get_signature_hint(profile)) { case LASSO_PROFILE_SIGNATURE_HINT_MAYBE: /* If our metadatas say that we sign, then we sign, * If the IdP says that he wants our signature, then we sign * Otherwise we do not. */ ret = authn_request_signed(&profile->server->parent) || want_authn_request_signed(remote_provider); return ret; case LASSO_PROFILE_SIGNATURE_HINT_FORCE: return TRUE; case LASSO_PROFILE_SIGNATURE_HINT_FORBID: return FALSE; } g_assert(0); return TRUE; } static gboolean _lasso_login_must_verify_authn_request_signature(LassoProfile *profile) { LassoProvider *remote_provider; remote_provider = lasso_server_get_provider(profile->server, profile->remote_providerID); switch (lasso_profile_get_signature_verify_hint(profile)) { /* If our metadatas say that we want signature, then we verify, * If the SP says that he signs, then we verify * Otherwise we do not. */ case LASSO_PROFILE_SIGNATURE_VERIFY_HINT_MAYBE: return want_authn_request_signed(&profile->server->parent) || authn_request_signed(remote_provider); case LASSO_PROFILE_SIGNATURE_VERIFY_HINT_IGNORE: return FALSE; case LASSO_PROFILE_SIGNATURE_VERIFY_HINT_FORCE: return TRUE; case LASSO_PROFILE_SIGNATURE_VERIFY_HINT_LAST: break; } g_assert(0); return TRUE; } static gboolean _lasso_login_must_verify_signature(LassoProfile *profile) { switch (lasso_profile_get_signature_verify_hint(profile)) { case LASSO_PROFILE_SIGNATURE_VERIFY_HINT_MAYBE: return lasso_flag_verify_signature; case LASSO_PROFILE_SIGNATURE_VERIFY_HINT_IGNORE: return FALSE; case LASSO_PROFILE_SIGNATURE_VERIFY_HINT_FORCE: return TRUE; case LASSO_PROFILE_SIGNATURE_VERIFY_HINT_LAST: break; } g_assert(0); return TRUE; } gint lasso_saml20_login_build_authn_request_msg(LassoLogin *login) { char *assertionConsumerServiceURL = NULL; gboolean must_sign = TRUE; LassoProfile *profile; LassoSamlp2AuthnRequest *authn_request; int rc = 0; profile = &login->parent; lasso_extract_node_or_fail(authn_request, profile->request, SAMLP2_AUTHN_REQUEST, LASSO_PROFILE_ERROR_INVALID_REQUEST); /* default is to sign ! */ must_sign = _lasso_login_must_sign(profile); if (! must_sign) { lasso_node_remove_signature(profile->request); } /* support old way of doing PAOS */ if (login->http_method == LASSO_HTTP_METHOD_SOAP && lasso_strisequal(authn_request->ProtocolBinding,LASSO_SAML2_METADATA_BINDING_PAOS)) { login->http_method = LASSO_HTTP_METHOD_PAOS; } if (login->http_method == LASSO_HTTP_METHOD_PAOS) { /* * PAOS is special, the url passed to build_request is the * AssertionConsumerServiceURL of this SP, not the * destination IdP URL. This is done to fill paos:responseConsumerURL * appropriately down the line in build_request_msg. * See https://dev.entrouvert.org/issues/34409 for more information. */ if (authn_request->AssertionConsumerServiceURL) { assertionConsumerServiceURL = authn_request->AssertionConsumerServiceURL; if (!lasso_saml20_provider_check_assertion_consumer_service_url( LASSO_PROVIDER(profile->server), assertionConsumerServiceURL, LASSO_SAML2_METADATA_BINDING_PAOS)) { rc = LASSO_PROFILE_ERROR_INVALID_REQUEST; goto cleanup; } } else { assertionConsumerServiceURL = lasso_saml20_provider_get_assertion_consumer_service_url_by_binding( LASSO_PROVIDER(profile->server), LASSO_SAML2_METADATA_BINDING_PAOS); lasso_assign_new_string(authn_request->AssertionConsumerServiceURL, assertionConsumerServiceURL); } } lasso_check_good_rc(lasso_saml20_profile_build_request_msg(profile, "SingleSignOnService", login->http_method, assertionConsumerServiceURL)); cleanup: return rc; } int lasso_saml20_login_process_authn_request_msg(LassoLogin *login, const char *authn_request_msg) { LassoNode *request = NULL; LassoProfile *profile = LASSO_PROFILE(login); LassoSamlp2StatusResponse *response = NULL; LassoSamlp2AuthnRequest *authn_request = NULL; LassoProvider *remote_provider = NULL; LassoServer *server = NULL; const gchar *protocol_binding = NULL; const char *status1 = LASSO_SAML2_STATUS_CODE_RESPONDER; const char *status2 = NULL; int rc = 0; if (authn_request_msg == NULL) { if (profile->request == NULL) { return critical_error(LASSO_PROFILE_ERROR_MISSING_REQUEST); } /* AuthnRequest already set by .._init_idp_initiated_authn_request, or from a * previously failed call to process_authn_request that we retry. */ request = lasso_ref(profile->request); } else { request = lasso_samlp2_authn_request_new(); lasso_check_good_rc(lasso_saml20_profile_process_any_request(profile, request, authn_request_msg)); } if (! LASSO_IS_SAMLP2_AUTHN_REQUEST(request)) { return critical_error(LASSO_PROFILE_ERROR_INVALID_MSG); } authn_request = LASSO_SAMLP2_AUTHN_REQUEST(request); /* intialize the response */ response = (LassoSamlp2StatusResponse*) lasso_samlp2_response_new(); lasso_assign_string(response->InResponseTo, LASSO_SAMLP2_REQUEST_ABSTRACT(profile->request)->ID); /* reset response binding */ login->protocolProfile = 0; /* find the remote provider */ if (! authn_request->parent.Issuer || ! authn_request->parent.Issuer->content) { rc = LASSO_PROFILE_ERROR_INVALID_REQUEST; goto cleanup; } remote_provider = lasso_server_get_provider(profile->server, profile->remote_providerID); if (remote_provider == NULL) { rc = LASSO_PROFILE_ERROR_UNKNOWN_PROVIDER; goto cleanup; } lasso_extract_node_or_fail(server, lasso_profile_get_server(&login->parent), SERVER, LASSO_PROFILE_ERROR_MISSING_SERVER); remote_provider->role = LASSO_PROVIDER_ROLE_SP; server->parent.role = LASSO_PROVIDER_ROLE_IDP; if (((authn_request->ProtocolBinding != NULL) || (authn_request->AssertionConsumerServiceURL != NULL)) && (authn_request->AssertionConsumerServiceIndex != -1)) { rc = LASSO_PROFILE_ERROR_INVALID_REQUEST; goto cleanup; } /* try to find a protocol profile for sending the response */ protocol_binding = authn_request->ProtocolBinding; if (protocol_binding || authn_request->AssertionConsumerServiceURL) { if (authn_request->AssertionConsumerServiceURL) { if (protocol_binding) { if (! lasso_saml20_provider_check_assertion_consumer_service_url( remote_provider, authn_request->AssertionConsumerServiceURL, authn_request->ProtocolBinding)) { // Sent ACS URL is unknown rc = LASSO_PROFILE_ERROR_INVALID_PROTOCOLPROFILE; goto cleanup; } } else { // Only ACS URL sent, choose the first associated binding protocol_binding = lasso_saml20_provider_get_assertion_consumer_service_binding_by_url( remote_provider, authn_request->AssertionConsumerServiceURL); if (! protocol_binding) { rc = LASSO_PROFILE_ERROR_INVALID_PROTOCOLPROFILE; goto cleanup; } lasso_assign_string(authn_request->ProtocolBinding, protocol_binding); } } if (lasso_strisequal(protocol_binding,LASSO_SAML2_METADATA_BINDING_ARTIFACT)) { login->protocolProfile = LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_ART; } else if (lasso_strisequal(protocol_binding,LASSO_SAML2_METADATA_BINDING_POST)) { login->protocolProfile = LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_POST; } else if (lasso_strisequal(protocol_binding,LASSO_SAML2_METADATA_BINDING_SOAP)) { login->protocolProfile = LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_LECP; } else if (lasso_strisequal(protocol_binding,LASSO_SAML2_METADATA_BINDING_REDIRECT)) { login->protocolProfile = LASSO_LOGIN_PROTOCOL_PROFILE_REDIRECT; goto_cleanup_with_rc(LASSO_PROFILE_ERROR_INVALID_PROTOCOLPROFILE); } else if (lasso_strisequal(protocol_binding,LASSO_SAML2_METADATA_BINDING_PAOS)) { login->protocolProfile = LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_LECP; } else { rc = LASSO_PROFILE_ERROR_INVALID_PROTOCOLPROFILE; goto cleanup; } } else { /* protocol binding not set; so it will look into * AssertionConsumerServiceIndex * Also, if AssertionConsumerServiceIndex is not set in request, * its value will be -1, which is just the right value to get * default assertion consumer... (convenient) */ gchar *binding; int service_index = authn_request->AssertionConsumerServiceIndex; binding = lasso_saml20_provider_get_assertion_consumer_service_binding( remote_provider, service_index); if (binding == NULL) { if (service_index == -1) { goto_cleanup_with_rc(LASSO_LOGIN_ERROR_NO_DEFAULT_ENDPOINT); } else { goto_cleanup_with_rc(LASSO_PROFILE_ERROR_INVALID_PROTOCOLPROFILE); } } else if (lasso_strisequal(binding,"HTTP-Artifact")) { login->protocolProfile = LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_ART; } else if (lasso_strisequal(binding,"HTTP-POST")) { login->protocolProfile = LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_POST; } else if (lasso_strisequal(binding,"HTTP-Redirect")) { login->protocolProfile = LASSO_LOGIN_PROTOCOL_PROFILE_REDIRECT; } else if (lasso_strisequal(binding,"SOAP")) { login->protocolProfile = LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_LECP; } else if (lasso_strisequal(binding,"PAOS")) { login->protocolProfile = LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_LECP; } lasso_release_string(binding); } if (_lasso_login_must_verify_authn_request_signature(profile) && profile->signature_status) { status1 = LASSO_SAML2_STATUS_CODE_REQUESTER; status2 = LASSO_LIB_STATUS_CODE_INVALID_SIGNATURE; rc = profile->signature_status; } else { status1 = LASSO_SAML2_STATUS_CODE_SUCCESS; status2 = NULL; } lasso_saml20_profile_init_response(profile, response, status1, status2); cleanup: lasso_release_gobject(request); lasso_release_gobject(response); return rc; } gboolean lasso_saml20_login_must_authenticate(LassoLogin *login) { LassoSamlp2AuthnRequest *request; gboolean matched = TRUE; GList *assertions = NULL; LassoProfile *profile = &login->parent; if (! LASSO_IS_SAMLP2_AUTHN_REQUEST(profile->request)) return FALSE; request = LASSO_SAMLP2_AUTHN_REQUEST(profile->request); if (request->ForceAuthn == TRUE && request->IsPassive == FALSE) return TRUE; if (request->RequestedAuthnContext) { char *comparison = request->RequestedAuthnContext->Comparison; GList *class_refs = request->RequestedAuthnContext->AuthnContextClassRef; char *class_ref; GList *t1, *t2; int compa = -1; if (comparison == NULL || lasso_strisequal(comparison,"exact")) { compa = 0; } else if (lasso_strisequal(comparison,"minimum")) { message(G_LOG_LEVEL_CRITICAL, "'minimum' comparison is not implemented"); compa = 1; } else if (lasso_strisequal(comparison,"better")) { message(G_LOG_LEVEL_CRITICAL, "'better' comparison is not implemented"); compa = 2; } else if (lasso_strisequal(comparison,"maximum")) { message(G_LOG_LEVEL_CRITICAL, "'maximum' comparison is not implemented"); compa = 3; } if (class_refs) { matched = FALSE; } assertions = lasso_session_get_assertions(profile->session, NULL); for (t1 = class_refs; t1 && !matched; t1 = g_list_next(t1)) { class_ref = t1->data; for (t2 = assertions; t2 && !matched; t2 = g_list_next(t2)) { LassoSaml2Assertion *assertion; LassoSaml2AuthnStatement *as = NULL; char *method; GList *t3; if (LASSO_IS_SAML2_ASSERTION(t2->data) == FALSE) { continue; } assertion = t2->data; for (t3 = assertion->AuthnStatement; t3; t3 = g_list_next(t3)) { if (LASSO_IS_SAML2_AUTHN_STATEMENT(t3->data)) { as = t3->data; break; } } if (as == NULL) continue; if (as->AuthnContext == NULL) continue; method = as->AuthnContext->AuthnContextClassRef; switch (compa) { case 1: /* minimum */ /* XXX: implement 'minimum' comparison */ case 2: /* better */ /* XXX: implement 'better' comparison */ case 3: /* maximum */ /* XXX: implement 'maximum' comparison */ case 0: /* exact */ if (lasso_strisequal(method,class_ref)) { matched = TRUE; } break; default: /* never reached */ break; } if (matched == TRUE) { break; } } } } else { /* if nothing specific was asked; don't look for any * particular assertions, one is enough */ matched = (profile->session != NULL && \ lasso_session_count_assertions(profile->session) > 0); } if (assertions) { lasso_release_list(assertions); } if (matched == FALSE && request->IsPassive == FALSE) return TRUE; if (profile->identity == NULL && request->IsPassive) { lasso_saml20_profile_set_response_status_responder(LASSO_PROFILE(login), LASSO_SAML2_STATUS_CODE_NO_PASSIVE); return FALSE; } return FALSE; } static gboolean lasso_saml20_login_must_ask_for_consent_private(LassoLogin *login) { LassoProfile *profile = LASSO_PROFILE(login); LassoSamlp2NameIDPolicy *name_id_policy; char *consent; LassoFederation *federation; const char *name_id_sp_name_qualifier = NULL; LassoProvider *remote_provider; gboolean rc = TRUE; name_id_policy = LASSO_SAMLP2_AUTHN_REQUEST(profile->request)->NameIDPolicy; if (name_id_policy) { char *format = name_id_policy->Format; if (lasso_strisequal(format,LASSO_SAML2_NAME_IDENTIFIER_FORMAT_TRANSIENT)) { goto_cleanup_with_rc (FALSE) } if (name_id_policy->AllowCreate == FALSE) { goto_cleanup_with_rc (FALSE) } } remote_provider = lasso_server_get_provider(profile->server, profile->remote_providerID); name_id_sp_name_qualifier = lasso_provider_get_sp_name_qualifier(remote_provider); /* if something goes wrong better to ask thant to let go */ if (name_id_sp_name_qualifier == NULL) goto_cleanup_with_rc (TRUE) if (profile->identity && profile->identity->federations) { federation = g_hash_table_lookup(profile->identity->federations, name_id_sp_name_qualifier); if (federation) { goto_cleanup_with_rc (FALSE) } } consent = LASSO_SAMLP2_REQUEST_ABSTRACT(profile->request)->Consent; if (consent == NULL) goto_cleanup_with_rc (FALSE) if (lasso_strisequal(consent,LASSO_SAML2_CONSENT_OBTAINED)) goto_cleanup_with_rc (FALSE) if (lasso_strisequal(consent,LASSO_SAML2_CONSENT_PRIOR)) goto_cleanup_with_rc (FALSE) if (lasso_strisequal(consent,LASSO_SAML2_CONSENT_IMPLICIT)) goto_cleanup_with_rc (FALSE) if (lasso_strisequal(consent,LASSO_SAML2_CONSENT_EXPLICIT)) goto_cleanup_with_rc (FALSE) if (lasso_strisequal(consent,LASSO_SAML2_CONSENT_UNAVAILABLE)) goto_cleanup_with_rc (TRUE) if (lasso_strisequal(consent,LASSO_SAML2_CONSENT_INAPPLICABLE)) goto_cleanup_with_rc (TRUE) cleanup: return rc; } gboolean lasso_saml20_login_must_ask_for_consent(LassoLogin *login) { LassoProfile *profile = LASSO_PROFILE(login); if (LASSO_SAMLP2_AUTHN_REQUEST(profile->request)->IsPassive) return FALSE; return lasso_saml20_login_must_ask_for_consent_private(login); } int lasso_saml20_login_validate_request_msg(LassoLogin *login, gboolean authentication_result, gboolean is_consent_obtained) { LassoProfile *profile; int rc = 0; profile = LASSO_PROFILE(login); if (authentication_result == FALSE) { lasso_saml20_profile_set_response_status_responder(profile, LASSO_SAML2_STATUS_CODE_REQUEST_DENIED); goto_cleanup_with_rc(LASSO_LOGIN_ERROR_REQUEST_DENIED); } if (_lasso_login_must_verify_authn_request_signature(profile) && profile->signature_status) { lasso_saml20_profile_set_response_status_requester(profile, LASSO_LIB_STATUS_CODE_INVALID_SIGNATURE); if (profile->signature_status == LASSO_DS_ERROR_SIGNATURE_NOT_FOUND) { goto_cleanup_with_rc(LASSO_LOGIN_ERROR_UNSIGNED_AUTHN_REQUEST); } goto_cleanup_with_rc(LASSO_LOGIN_ERROR_INVALID_SIGNATURE); } rc = lasso_saml20_login_process_federation(login, is_consent_obtained); if (rc == LASSO_LOGIN_ERROR_FEDERATION_NOT_FOUND) { lasso_saml20_profile_set_response_status_requester(profile, LASSO_LIB_STATUS_CODE_FEDERATION_DOES_NOT_EXIST); goto cleanup; } /* UNKNOWN_PROVIDER, CONSENT_NOT_OBTAINED */ if (rc) { lasso_saml20_profile_set_response_status_responder(profile, LASSO_SAML2_STATUS_CODE_REQUEST_DENIED); goto cleanup; } lasso_saml20_profile_set_response_status_success(profile, NULL); cleanup: return rc; } static int lasso_saml20_login_process_federation(LassoLogin *login, gboolean is_consent_obtained) { LassoProfile *profile = LASSO_PROFILE(login); LassoSamlp2NameIDPolicy *name_id_policy; char *name_id_policy_format = NULL; LassoFederation *federation; const char *name_id_sp_name_qualifier = NULL; LassoProvider *remote_provider; int rc = 0; /* verify if identity already exists else create it */ if (profile->identity == NULL) { profile->identity = lasso_identity_new(); } remote_provider = lasso_server_get_provider(profile->server, profile->remote_providerID); if (! LASSO_IS_PROVIDER(remote_provider)) { goto_cleanup_with_rc (LASSO_PROFILE_ERROR_UNKNOWN_PROVIDER); } if (! LASSO_IS_SAMLP2_AUTHN_REQUEST(profile->request)) { goto_cleanup_with_rc(critical_error(LASSO_PROFILE_ERROR_INVALID_REQUEST)); } name_id_policy = ((LassoSamlp2AuthnRequest*)profile->request)->NameIDPolicy; if (name_id_policy) { name_id_policy_format = name_id_policy->Format; } if (! name_id_policy_format) { name_id_policy_format = lasso_provider_get_default_name_id_format(remote_provider); } lasso_assign_string(login->nameIDPolicy, name_id_policy_format); if (lasso_saml20_login_must_ask_for_consent_private(login) && !is_consent_obtained) { goto_cleanup_with_rc (LASSO_LOGIN_ERROR_CONSENT_NOT_OBTAINED) } if (lasso_strisnotequal(name_id_policy_format,LASSO_SAML2_NAME_IDENTIFIER_FORMAT_PERSISTENT)) { /* non persistent case, TRANSIENT is handled by lasso_login_build_assertion() and * other format are the sole responsibility of the caller */ goto_cleanup_with_rc (0) } /* PERSISTENT case, try to federation or find an existing federation */ name_id_sp_name_qualifier = lasso_provider_get_sp_name_qualifier(remote_provider); if (name_id_sp_name_qualifier == NULL) { goto_cleanup_with_rc (LASSO_PROFILE_ERROR_UNKNOWN_PROVIDER); } /* search a federation in the identity */ federation = lasso_identity_get_federation(profile->identity, name_id_sp_name_qualifier); if (! federation && ( ! name_id_policy || name_id_policy->AllowCreate == FALSE)) { goto_cleanup_with_rc (LASSO_LOGIN_ERROR_FEDERATION_NOT_FOUND) } if (! federation && name_id_policy && name_id_policy->AllowCreate) { federation = lasso_federation_new(name_id_sp_name_qualifier); lasso_saml20_federation_build_local_name_identifier(federation, LASSO_PROVIDER(profile->server)->ProviderID, LASSO_SAML2_NAME_IDENTIFIER_FORMAT_PERSISTENT, NULL); lasso_assign_string(LASSO_SAML2_NAME_ID(federation->local_nameIdentifier)->SPNameQualifier, name_id_sp_name_qualifier); lasso_identity_add_federation(profile->identity, federation); } lasso_assign_gobject(profile->nameIdentifier, federation->local_nameIdentifier); cleanup: return rc; } static LassoFederation* _lasso_login_saml20_get_federation(LassoLogin *login) { LassoFederation *federation = NULL; const char *name_id_sp_name_qualifier = NULL; name_id_sp_name_qualifier = lasso_provider_get_sp_name_qualifier( lasso_server_get_provider(login->parent.server, login->parent.remote_providerID)); federation = lasso_identity_get_federation(login->parent.identity, name_id_sp_name_qualifier); return federation; } int lasso_saml20_login_build_assertion(LassoLogin *login, const char *authenticationMethod, const char *authenticationInstant, const char *notBefore, const char *notOnOrAfter) { LassoProfile *profile = &login->parent; LassoSaml2Assertion *assertion = NULL; LassoSaml2AudienceRestriction *audience_restriction = NULL; LassoSamlp2NameIDPolicy *name_id_policy = NULL; LassoSaml2NameID *name_id = NULL; LassoSaml2AuthnStatement *authentication_statement; LassoProvider *provider = NULL; LassoSamlp2Response *response = NULL; LassoSamlp2RequestAbstract *request_abstract = NULL; LassoSamlp2AuthnRequest *authn_request = NULL; gboolean do_encrypt_nameid = FALSE; gboolean do_encrypt_assertion = FALSE; int rc = 0; provider = lasso_server_get_provider(profile->server, profile->remote_providerID); if (provider) { do_encrypt_nameid = lasso_provider_get_encryption_mode(provider) & LASSO_ENCRYPTION_MODE_NAMEID; do_encrypt_assertion = lasso_provider_get_encryption_mode(provider) & LASSO_ENCRYPTION_MODE_ASSERTION; } if (LASSO_IS_SAMLP2_AUTHN_REQUEST(profile->request)) { authn_request = (LassoSamlp2AuthnRequest*)profile->request; request_abstract = &authn_request->parent; } goto_cleanup_if_fail_with_rc(LASSO_IS_SAMLP2_RESPONSE(profile->response), LASSO_PROFILE_ERROR_MISSING_RESPONSE); assertion = LASSO_SAML2_ASSERTION(lasso_saml2_assertion_new()); assertion->ID = lasso_build_unique_id(32); lasso_assign_string(assertion->Version, "2.0"); assertion->IssueInstant = lasso_get_current_time(); assertion->Issuer = LASSO_SAML2_NAME_ID(lasso_saml2_name_id_new_with_string( LASSO_PROVIDER(profile->server)->ProviderID)); assertion->Conditions = LASSO_SAML2_CONDITIONS(lasso_saml2_conditions_new()); lasso_assign_string(assertion->Conditions->NotBefore, notBefore); lasso_assign_string(assertion->Conditions->NotOnOrAfter, notOnOrAfter); audience_restriction = LASSO_SAML2_AUDIENCE_RESTRICTION( lasso_saml2_audience_restriction_new()); lasso_assign_string(audience_restriction->Audience, profile->remote_providerID); lasso_list_add_new_gobject(assertion->Conditions->AudienceRestriction, audience_restriction); assertion->Subject = LASSO_SAML2_SUBJECT(lasso_saml2_subject_new()); assertion->Subject->SubjectConfirmation = LASSO_SAML2_SUBJECT_CONFIRMATION( lasso_saml2_subject_confirmation_new()); assertion->Subject->SubjectConfirmation->Method = g_strdup( LASSO_SAML2_CONFIRMATION_METHOD_BEARER); assertion->Subject->SubjectConfirmation->SubjectConfirmationData = LASSO_SAML2_SUBJECT_CONFIRMATION_DATA( lasso_saml2_subject_confirmation_data_new()); lasso_assign_string( assertion->Subject->SubjectConfirmation->SubjectConfirmationData->NotOnOrAfter, notOnOrAfter); /* If request is present, refer to it in the response */ if (authn_request) { if (request_abstract->ID) { lasso_assign_string(assertion->Subject->SubjectConfirmation->SubjectConfirmationData->InResponseTo, request_abstract->ID); /* * It MUST NOT contain a NotBefore attribute. If * the containing message is in response to an , * then the InResponseTo attribute MUST match the request's ID. */ lasso_release_string(assertion->Subject->SubjectConfirmation->SubjectConfirmationData->NotBefore); } name_id_policy = authn_request->NameIDPolicy; } /* TRANSIENT */ if (!name_id_policy || name_id_policy->Format == NULL || lasso_strisequal(name_id_policy->Format,LASSO_SAML2_NAME_IDENTIFIER_FORMAT_UNSPECIFIED) || lasso_strisequal(name_id_policy->Format,LASSO_SAML2_NAME_IDENTIFIER_FORMAT_TRANSIENT)) { char *id = lasso_build_unique_id(32); name_id = (LassoSaml2NameID*)lasso_saml2_name_id_new_with_string(id); lasso_release_string(id); lasso_assign_string(name_id->NameQualifier, lasso_provider_get_sp_name_qualifier(&profile->server->parent)); lasso_assign_string(name_id->Format, LASSO_SAML2_NAME_IDENTIFIER_FORMAT_TRANSIENT); assertion->Subject->NameID = name_id; /* FEDERATED */ } else if (lasso_strisequal(name_id_policy->Format, LASSO_SAML2_NAME_IDENTIFIER_FORMAT_PERSISTENT) || lasso_strisequal(name_id_policy->Format, LASSO_SAML2_NAME_IDENTIFIER_FORMAT_ENCRYPTED)) { LassoFederation *federation; federation = _lasso_login_saml20_get_federation(login); goto_cleanup_if_fail_with_rc(federation != NULL, LASSO_PROFILE_ERROR_FEDERATION_NOT_FOUND); if (lasso_strisequal(name_id_policy->Format,LASSO_SAML2_NAME_IDENTIFIER_FORMAT_ENCRYPTED)) { do_encrypt_nameid = TRUE; } lasso_assign_gobject(assertion->Subject->NameID, federation->local_nameIdentifier); /* ALL OTHER KIND OF NAME ID FORMATS */ } else { /* caller must set the name identifier content afterwards */ name_id = LASSO_SAML2_NAME_ID(lasso_saml2_name_id_new()); lasso_assign_string(name_id->NameQualifier, LASSO_PROVIDER(profile->server)->ProviderID); lasso_assign_string(name_id->Format, name_id_policy->Format); assertion->Subject->NameID = name_id; if (do_encrypt_nameid) { message(G_LOG_LEVEL_WARNING, "NameID encryption is currently not " "supported with non transient or persisent NameID format"); do_encrypt_nameid = FALSE; } } authentication_statement = LASSO_SAML2_AUTHN_STATEMENT(lasso_saml2_authn_statement_new()); authentication_statement->AuthnInstant = g_strdup(authenticationInstant); authentication_statement->AuthnContext = LASSO_SAML2_AUTHN_CONTEXT( lasso_saml2_authn_context_new()); authentication_statement->AuthnContext->AuthnContextClassRef = g_strdup( authenticationMethod); /* if remote provider supports logout profile, add a session index == ID of the assertion */ if (lasso_provider_get_first_http_method(&login->parent.server->parent, provider, LASSO_MD_PROTOCOL_TYPE_SINGLE_LOGOUT) != LASSO_HTTP_METHOD_NONE) { lasso_assign_string(authentication_statement->SessionIndex, assertion->ID); } lasso_list_add_new_gobject(assertion->AuthnStatement, authentication_statement); /* Save signing material in assertion private datas to be able to sign later */ lasso_check_good_rc(lasso_server_saml2_assertion_setup_signature(profile->server, assertion)); /* Encrypt NameID */ if (do_encrypt_nameid) { /* store assertion in session object */ if (profile->session == NULL) { profile->session = lasso_session_new(); } lasso_session_add_assertion(profile->session, profile->remote_providerID, LASSO_NODE(assertion)); /* FIXME: as with assertions, it should be possible to setup encryption of NameID for later */ goto_cleanup_if_fail_with_rc(provider != NULL, LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND); assertion->Subject->EncryptedID = (LassoSaml2EncryptedElement*)lasso_node_encrypt( (LassoNode*)assertion->Subject->NameID, lasso_provider_get_encryption_public_key(provider), lasso_provider_get_encryption_sym_key_type(provider), lasso_provider_get_key_encryption_method(provider), provider->ProviderID); goto_cleanup_if_fail_with_rc(assertion->Subject->EncryptedID != NULL, LASSO_DS_ERROR_ENCRYPTION_FAILED); lasso_release_gobject(assertion->Subject->NameID); } /* Save encryption material in assertion private datas to be able to encrypt later */ if (do_encrypt_assertion) { lasso_node_set_encryption((LassoNode*)assertion, lasso_provider_get_encryption_public_key(provider), lasso_provider_get_encryption_sym_key_type(provider), lasso_provider_get_key_encryption_method(provider)); } response = LASSO_SAMLP2_RESPONSE(profile->response); lasso_list_add_gobject(response->Assertion, assertion); lasso_assign_gobject(login->private_data->saml2_assertion, assertion); cleanup: lasso_release_gobject(assertion); return rc; } gint lasso_saml20_login_build_artifact_msg(LassoLogin *login, LassoHttpMethod http_method) { LassoProfile *profile; LassoProvider *remote_provider; char *url; LassoSaml2Assertion *assertion; LassoSamlp2StatusResponse *response; int rc = 0; profile = &login->parent; if (profile->remote_providerID == NULL) return critical_error(LASSO_PROFILE_ERROR_MISSING_REMOTE_PROVIDERID); if (http_method != LASSO_HTTP_METHOD_ARTIFACT_GET && http_method != LASSO_HTTP_METHOD_ARTIFACT_POST) { return critical_error(LASSO_PROFILE_ERROR_INVALID_HTTP_METHOD); } if (! LASSO_IS_SAMLP2_RESPONSE(profile->response)) { return critical_error(LASSO_PROFILE_ERROR_MISSING_RESPONSE); } response = (LassoSamlp2StatusResponse*)profile->response; /* XXX: why checking now ? */ if (response->Status == NULL || response->Status->StatusCode == NULL || response->Status->StatusCode->Value == NULL) { return critical_error(LASSO_PROFILE_ERROR_MISSING_STATUS_CODE); } remote_provider = lasso_server_get_provider(profile->server, profile->remote_providerID); if (LASSO_IS_PROVIDER(remote_provider) == FALSE) return critical_error(LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND); url = lasso_saml20_login_get_assertion_consumer_service_url(login, remote_provider); assertion = login->private_data->saml2_assertion; if (LASSO_IS_SAML2_ASSERTION(assertion) && url) { LassoSaml2SubjectConfirmationData *subject_confirmation_data; subject_confirmation_data = lasso_saml2_assertion_get_subject_confirmation_data(assertion, TRUE); lasso_assign_string(subject_confirmation_data->Recipient, url); } /* If there is a non-encrypted NameID, fix the assertion in the session */ if (assertion && assertion->Subject && assertion->Subject->NameID) { /* store assertion in session object */ if (profile->session == NULL) { profile->session = lasso_session_new(); } lasso_session_add_assertion(profile->session, profile->remote_providerID, LASSO_NODE(assertion)); } lasso_check_good_rc(lasso_saml20_profile_build_response_msg(profile, NULL, http_method, url)); cleanup: lasso_release_string(url); return rc; } gint lasso_saml20_login_init_request(LassoLogin *login, gchar *response_msg, LassoHttpMethod response_http_method) { return lasso_saml20_profile_init_artifact_resolve(LASSO_PROFILE(login), LASSO_PROVIDER_ROLE_IDP, response_msg, response_http_method); } gint lasso_saml20_login_build_request_msg(LassoLogin *login) { LassoProfile *profile; lasso_error_t rc = 0; profile = &login->parent; if (_lasso_login_must_sign_non_authn_request(login)) { rc = lasso_profile_saml20_setup_message_signature(profile, profile->request); if (rc != 0) { return rc; } } else { lasso_node_remove_signature(profile->request); } return lasso_saml20_profile_build_request_msg(profile, "ArtifactResolutionService", LASSO_HTTP_METHOD_SOAP, profile->msg_url); } gint lasso_saml20_login_process_request_msg(LassoLogin *login, gchar *request_msg) { LassoProfile *profile = LASSO_PROFILE(login); int rc = 0; rc = lasso_saml20_profile_process_artifact_resolve(profile, request_msg); if (rc != 0) { return rc; } /* compat with liberty id-ff code */ lasso_assign_new_string(login->assertionArtifact, lasso_profile_get_artifact(profile)); return 0; } gint lasso_saml20_login_build_response_msg(LassoLogin *login) { LassoProfile *profile = LASSO_PROFILE(login); LassoProvider *remote_provider; LassoSaml2Assertion *assertion; int rc = 0; if (login->protocolProfile == LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_LECP) { char *assertionConsumerURL; lasso_check_good_rc(lasso_profile_saml20_setup_message_signature(profile, profile->response)); remote_provider = lasso_server_get_provider(profile->server, profile->remote_providerID); if (LASSO_IS_PROVIDER(remote_provider) == FALSE) return critical_error(LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND); assertionConsumerURL = lasso_saml20_provider_get_assertion_consumer_service_url_by_binding( remote_provider, LASSO_SAML2_METADATA_BINDING_PAOS); assertion = login->private_data->saml2_assertion; if (LASSO_IS_SAML2_ASSERTION(assertion) == TRUE) { assertion->Subject->SubjectConfirmation->SubjectConfirmationData->Recipient = g_strdup(assertionConsumerURL); } /* If response is signed it MUST have Destination attribute, optional otherwise */ lasso_assign_string(((LassoSamlp2StatusResponse*)profile->response)->Destination, assertionConsumerURL); /* build an ECP SOAP Response */ lasso_assign_new_string(profile->msg_body, lasso_node_export_to_ecp_soap_response( LASSO_NODE(profile->response), assertionConsumerURL)); lasso_release_string(assertionConsumerURL); return rc; } return lasso_saml20_profile_build_artifact_response(LASSO_PROFILE(login)); cleanup: return rc; } /** * lasso_saml20_login_process_paos_response_msg: * @login: a #LassoLogin profile object * @msg: ECP to SP PAOS message * * Process an ECP to SP PAOS response message. * * SAML2 Profile for ECP (Section 4.2) defines these steps for an ECP * transaction * * 1. ECP issues HTTP Request to SP * 2. SP issues to ECP using PAOS * 3. ECP determines IdP * 4. ECP conveys to IdP using SOAP * 5. IdP identifies principal * 6. IdP issues to ECP, targeted at SP using SOAP * 7. ECP conveys to SP using PAOS * 8. SP grants or denies access to principal * * This function is used in the implemention of Step 8 in an SP. The * ECP response from Step 7 has been received from the ECP client, the * SP must now parse the response and act upon the result of the Authn * request the SP issued in Step 2. If the SOAP body contains a * samlp:Response with a saml:Assertion the assertion is processed in * the context of the @login parameter. * * The response may contain in the SOAP header a paos:Response or * ecp:RelayState elment, both are optional. If the ecp:RelayState is * present it is assigned to the #LassoProfile.msg_relayState * field. If the paos:Response is present it's refToMessageID * attribute is assigned to the #LassoProfile.msg_messageID field. */ gint lasso_saml20_login_process_paos_response_msg(LassoLogin *login, gchar *msg) { LassoSoapHeader *header = NULL; LassoProfile *profile; int rc; lasso_null_param(msg); profile = LASSO_PROFILE(login); /* * lasso_saml20_profile_process_soap_response_with_headers() * performs a signature check on the SAML message. A signature * can also appear on the assertion which is checked by * lasso_saml20_login_process_response_status_and_assertion() * (below). Therefore if the error is SIGNATURE_NOT_FOUND we * proceed because * lasso_saml20_login_process_response_status_and_assertion() * will test the signature on the assertion. */ rc = lasso_saml20_profile_process_soap_response_with_headers(profile, msg, &header); if (rc != 0 && rc != LASSO_DS_ERROR_SIGNATURE_NOT_FOUND) { return rc; } /* * If the SOAP message contained a header check for the optional * paos:Response and ecp:RelayState elements, if they exist extract their * values into the profile. */ if (header) { GList *i = NULL; LassoEcpRelayState *ecp_relaystate = NULL; LassoPaosResponse *paos_response = NULL; lasso_foreach(i, header->Other) { if (!ecp_relaystate && LASSO_IS_ECP_RELAYSTATE(i->data)) { ecp_relaystate = (LassoEcpRelayState *)i->data; } else if (!paos_response && LASSO_IS_PAOS_RESPONSE(i->data)) { paos_response = (LassoPaosResponse *)i->data; } if (ecp_relaystate && paos_response) break; } if (ecp_relaystate) { lasso_assign_string(profile->msg_relayState, ecp_relaystate->RelayState); } if (paos_response) { lasso_profile_set_message_id(profile, paos_response->refToMessageID); } lasso_release_gobject(header); } rc = lasso_saml20_login_process_response_status_and_assertion(login); return rc; } /** * lasso_saml20_login_process_authn_response_msg: * @login: a #LassoLogin profile object * @authn_response_msg: a string containg a response msg to an #LassoSaml2AuthnRequest * * Parse a response made using binding HTTP-Redirect, HTTP-Post or HTTP-SOAP. Any signature * validation error is reported. * * Return value: 0 if succesfull, an error code otherwise. */ gint lasso_saml20_login_process_authn_response_msg(LassoLogin *login, gchar *authn_response_msg) { LassoProfile *profile = NULL; LassoSamlp2Response *samlp2_response = NULL; LassoHttpMethod response_method = LASSO_HTTP_METHOD_NONE; int rc = 0; lasso_null_param(authn_response_msg); /* parse the message */ profile = LASSO_PROFILE(login); samlp2_response = (LassoSamlp2Response*)lasso_samlp2_response_new(); rc = lasso_saml20_profile_process_any_response(profile, (LassoSamlp2StatusResponse*)samlp2_response, &response_method, authn_response_msg); if (response_method != LASSO_HTTP_METHOD_POST) { /* Only HTTP-Post binding is possible through this method */ goto_cleanup_with_rc(LASSO_PROFILE_ERROR_UNSUPPORTED_PROFILE); } /* Skip signature errors, let lasso_saml20_login_process_response_status_and_assertion * handle them */ goto_cleanup_if_fail (rc == 0 || rc == LASSO_LOGIN_ERROR_STATUS_NOT_SUCCESS || rc == LASSO_PROFILE_ERROR_CANNOT_VERIFY_SIGNATURE); rc = lasso_saml20_login_process_response_status_and_assertion(login); cleanup: lasso_release_gobject(samlp2_response); return rc; } gint lasso_saml20_login_process_response_msg(LassoLogin *login, gchar *response_msg) { LassoProfile *profile = LASSO_PROFILE(login); int rc = 0; rc = lasso_saml20_profile_process_artifact_response(profile, response_msg); if (rc) { return rc; } if (LASSO_IS_SAMLP2_ARTIFACT_RESPONSE(login->parent.response)) { return lasso_saml20_login_process_authn_request_msg(login, NULL); } else { return lasso_saml20_login_process_response_status_and_assertion(login); } } static gint lasso_saml20_login_check_assertion_signature(LassoLogin *login, LassoSaml2Assertion *assertion) { xmlNode *original_node = NULL; LassoSaml2NameID *Issuer = NULL; LassoServer *server = NULL; LassoProfile *profile = NULL; char *remote_provider_id = NULL; LassoProvider *remote_provider; int rc = 0; lasso_bad_param(SAML2_ASSERTION, assertion); profile = (LassoProfile*)login; lasso_extract_node_or_fail(server, lasso_profile_get_server(profile), SERVER, LASSO_PROFILE_ERROR_MISSING_SERVER); /* Get an issuer */ Issuer = assertion->Issuer; if (! Issuer || /* No issuer */ ! Issuer->content || /* No issuer content */ (Issuer->Format && lasso_strisnotequal(Issuer->Format,LASSO_SAML2_NAME_IDENTIFIER_FORMAT_ENTITY))) /* Issuer format is not entity */ { rc = LASSO_PROFILE_ERROR_MISSING_ISSUER; goto cleanup; } else { remote_provider_id = Issuer->content; } remote_provider = lasso_server_get_provider(server, remote_provider_id); goto_cleanup_if_fail_with_rc(remote_provider, LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND); /* Get the original node */ original_node = lasso_node_get_original_xmlnode(LASSO_NODE(assertion)); goto_cleanup_if_fail_with_rc(original_node, LASSO_PROFILE_ERROR_CANNOT_VERIFY_SIGNATURE); /* Shouldn't set the profile->signature_status here as we're only * checking the assertion signature. * Instead, we'll set the status after all the assertions are iterated. */ rc = lasso_provider_verify_saml_signature(remote_provider, original_node, NULL); #define log_verify_assertion_signature_error(msg) \ message(G_LOG_LEVEL_WARNING, "Could not verify signature of assertion" \ "ID:%s, " msg ".", assertion->ID); cleanup: switch (rc) { case LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND: log_verify_assertion_signature_error("Issuer is unknown"); break; case LASSO_PROFILE_ERROR_MISSING_ISSUER: log_verify_assertion_signature_error( "no Issuer found or Issuer has bad format"); break; case LASSO_PROFILE_ERROR_CANNOT_VERIFY_SIGNATURE: log_verify_assertion_signature_error( " the original xmlNode is certainly not accessible anymore"); default: break; } #undef log_verify_assertion_signature_error return rc; } static gint _lasso_saml20_login_decrypt_assertion(LassoLogin *login, LassoSamlp2Response *samlp2_response) { GList *encryption_private_keys = NULL; GList *it = NULL; gboolean at_least_one_decryption_failture = FALSE; gboolean at_least_one_malformed_element = FALSE; if (! samlp2_response->EncryptedAssertion) return 0; /* nothing to do */ encryption_private_keys = lasso_server_get_encryption_private_keys(login->parent.server); if (! encryption_private_keys) { message(G_LOG_LEVEL_WARNING, "Missing private encryption key, cannot decrypt assertions."); return LASSO_DS_ERROR_DECRYPTION_FAILED_MISSING_PRIVATE_KEY; } lasso_foreach (it, samlp2_response->EncryptedAssertion) { LassoSaml2EncryptedElement *encrypted_assertion; LassoSaml2Assertion * assertion = NULL; int rc1 = 0; if (! LASSO_IS_SAML2_ENCRYPTED_ELEMENT(it->data)) { message(G_LOG_LEVEL_WARNING, "EncryptedAssertion contains a non EncryptedElement object"); at_least_one_malformed_element |= TRUE; continue; } encrypted_assertion = (LassoSaml2EncryptedElement*)it->data; lasso_foreach_full_begin(xmlSecKey*, encryption_private_key, it, encryption_private_keys) { rc1 = lasso_saml2_encrypted_element_decrypt(encrypted_assertion, encryption_private_key, (LassoNode**)&assertion); if (rc1 == 0) break; } lasso_foreach_full_end(); if (rc1 == LASSO_DS_ERROR_DECRYPTION_FAILED) { message(G_LOG_LEVEL_WARNING, "Could not decrypt the EncryptedKey"); at_least_one_decryption_failture |= TRUE; continue; } else if (rc1) { message(G_LOG_LEVEL_WARNING, "Could not decrypt an assertion: %s", lasso_strerror(rc1)); at_least_one_decryption_failture |= TRUE; continue; } if (! LASSO_IS_SAML2_ASSERTION(assertion)) { message(G_LOG_LEVEL_WARNING, "EncryptedAssertion contains something that is not an assertion"); lasso_release_gobject(assertion); continue; } /* copy the assertion to the clear assertion list */ lasso_list_add_new_gobject(samlp2_response->Assertion, assertion); } if (at_least_one_decryption_failture) { return LASSO_DS_ERROR_DECRYPTION_FAILED; } if (at_least_one_malformed_element) { return LASSO_XML_ERROR_SCHEMA_INVALID_FRAGMENT; } return 0; } /* Verify that an assertion comes from a designated Issuer */ static gboolean _lasso_check_assertion_issuer(LassoSaml2Assertion *assertion, const gchar *provider_id) { if (! LASSO_SAML2_ASSERTION(assertion) || ! provider_id) return FALSE; if (! assertion->Issuer || ! assertion->Issuer->content) return FALSE; return lasso_strisequal(assertion->Issuer->content,provider_id); } static gint lasso_saml20_login_process_response_status_and_assertion(LassoLogin *login) { LassoSamlp2StatusResponse *response; LassoSamlp2Response *samlp2_response = NULL; LassoSaml2Assertion *last_assertion = NULL; LassoProfile *profile; char *status_value; lasso_error_t rc = 0; lasso_error_t assertion_signature_status = 0; LassoProfileSignatureVerifyHint verify_hint = LASSO_PROFILE_SIGNATURE_VERIFY_HINT_LAST; profile = &login->parent; lasso_extract_node_or_fail(response, profile->response, SAMLP2_STATUS_RESPONSE, LASSO_PROFILE_ERROR_INVALID_MSG); lasso_extract_node_or_fail(samlp2_response, response, SAMLP2_RESPONSE, LASSO_PROFILE_ERROR_INVALID_MSG); if (response->Status == NULL || ! LASSO_IS_SAMLP2_STATUS(response->Status) || response->Status->StatusCode == NULL || response->Status->StatusCode->Value == NULL) { return LASSO_PROFILE_ERROR_MISSING_STATUS_CODE; } status_value = response->Status->StatusCode->Value; if (status_value && lasso_strisnotequal(status_value,LASSO_SAML2_STATUS_CODE_SUCCESS)) { if (lasso_strisequal(status_value,LASSO_SAML2_STATUS_CODE_REQUEST_DENIED)) return LASSO_LOGIN_ERROR_REQUEST_DENIED; if (lasso_strisequal(status_value,LASSO_SAML2_STATUS_CODE_RESPONDER) || lasso_strisequal(status_value,LASSO_SAML2_STATUS_CODE_REQUESTER)) { /* samlp:Responder */ if (response->Status->StatusCode->StatusCode && response->Status->StatusCode->StatusCode->Value) { status_value = response->Status->StatusCode->StatusCode->Value; if (lasso_strisequal(status_value,LASSO_LIB_STATUS_CODE_FEDERATION_DOES_NOT_EXIST)) { return LASSO_LOGIN_ERROR_FEDERATION_NOT_FOUND; } if (lasso_strisequal(status_value,LASSO_LIB_STATUS_CODE_UNKNOWN_PRINCIPAL)) { return LASSO_LOGIN_ERROR_UNKNOWN_PRINCIPAL; } } } return LASSO_LOGIN_ERROR_STATUS_NOT_SUCCESS; } /* Decrypt all EncryptedAssertions */ _lasso_saml20_login_decrypt_assertion(login, samlp2_response); /* Check there is at least one assertion */ goto_cleanup_if_fail_with_rc (samlp2_response->Assertion != NULL, LASSO_PROFILE_ERROR_MISSING_ASSERTION); /* In case of verify_hint as 'FORCE', if there's no response signature, * we reject. * In case of 'MAYBE', if response signature is present and valid, or * not present, then we proceed with checking assertion signature(s). * In any case, if there's a response signature and it's not valid, * we reject. */ verify_hint = lasso_profile_get_signature_verify_hint(profile); if (profile->signature_status == LASSO_DS_ERROR_SIGNATURE_NOT_FOUND) { if (verify_hint == LASSO_PROFILE_SIGNATURE_VERIFY_HINT_FORCE) { goto_cleanup_with_rc(profile->signature_status); } } else if (profile->signature_status != 0) { goto_cleanup_with_rc(profile->signature_status); } lasso_foreach_full_begin(LassoSaml2Assertion*, assertion, it, samlp2_response->Assertion); LassoSaml2Subject *subject = NULL; /* All Assertions MUST come from the same issuer as the Response. */ if (! _lasso_check_assertion_issuer(assertion, profile->remote_providerID)) { goto_cleanup_with_rc(LASSO_PROFILE_ERROR_INVALID_ISSUER); } if (profile->signature_status != 0) { /* When response signature is not present */ if (verify_hint == LASSO_PROFILE_SIGNATURE_VERIFY_HINT_MAYBE) { assertion_signature_status = lasso_saml20_login_check_assertion_signature(login, assertion); if (assertion_signature_status) { goto_cleanup_with_rc(assertion_signature_status); } } } else { /* response signature is present and valid */ assertion_signature_status = lasso_saml20_login_check_assertion_signature(login, assertion); if (assertion_signature_status) { /* assertion signature is not valid or not present */ if (verify_hint == LASSO_PROFILE_SIGNATURE_VERIFY_HINT_FORCE) { /* In case of FORCE, we reject right away */ goto_cleanup_with_rc(assertion_signature_status); } else if (verify_hint == LASSO_PROFILE_SIGNATURE_VERIFY_HINT_MAYBE) { /* In case of MAYBE, if assertion signature is present and invalid, then we reject */ if (assertion_signature_status != LASSO_DS_ERROR_SIGNATURE_NOT_FOUND) { goto_cleanup_with_rc(assertion_signature_status); } } } } lasso_extract_node_or_fail(subject, assertion->Subject, SAML2_SUBJECT, LASSO_PROFILE_ERROR_MISSING_SUBJECT); /* Verify Subject->SubjectConfirmationData->InResponseTo */ if (login->private_data->request_id) { const char *in_response_to = lasso_saml2_assertion_get_in_response_to(assertion); if (lasso_strisnotequal(in_response_to,login->private_data->request_id)) { rc = LASSO_LOGIN_ERROR_ASSERTION_DOES_NOT_MATCH_REQUEST_ID; goto cleanup; } } /** Handle nameid */ lasso_check_good_rc(lasso_saml20_profile_process_name_identifier_decryption(profile, &subject->NameID, &subject->EncryptedID)); last_assertion = assertion; lasso_foreach_full_end(); /* set the default assertion to the last one */ if (last_assertion) { lasso_assign_gobject (login->private_data->saml2_assertion, last_assertion); } cleanup: return rc; } gint lasso_saml20_login_accept_sso(LassoLogin *login) { LassoProfile *profile; LassoSaml2Assertion *assertion; GList *previous_assertion_ids, *t; LassoSaml2NameID *ni; LassoFederation *federation; profile = LASSO_PROFILE(login); if (LASSO_SAMLP2_RESPONSE(profile->response)->Assertion == NULL) return LASSO_PROFILE_ERROR_MISSING_ASSERTION; assertion = LASSO_SAMLP2_RESPONSE(profile->response)->Assertion->data; if (assertion == NULL) return LASSO_PROFILE_ERROR_MISSING_ASSERTION; previous_assertion_ids = lasso_session_get_assertion_ids(profile->session, profile->remote_providerID); lasso_foreach(t, previous_assertion_ids) { if (lasso_strisequal(t->data, assertion->ID)) { lasso_release_list_of_strings(previous_assertion_ids); return LASSO_LOGIN_ERROR_ASSERTION_REPLAY; } } lasso_release_list_of_strings(previous_assertion_ids); lasso_session_add_assertion(profile->session, profile->remote_providerID, LASSO_NODE(assertion)); if (assertion->Subject && assertion->Subject->NameID) { ni = assertion->Subject->NameID; } else { return LASSO_PROFILE_ERROR_MISSING_NAME_IDENTIFIER; } /* create federation, only if nameidentifier format is Federated */ if (ni && ni->Format && lasso_strisequal(ni->Format,LASSO_SAML2_NAME_IDENTIFIER_FORMAT_PERSISTENT)) { federation = lasso_federation_new(LASSO_PROFILE(login)->remote_providerID); lasso_assign_gobject(federation->local_nameIdentifier, ni); /* add federation in identity */ lasso_identity_add_federation(LASSO_PROFILE(login)->identity, federation); } return 0; } gint lasso_saml20_login_build_authn_response_msg(LassoLogin *login) { LassoProfile *profile; LassoProvider *remote_provider = NULL; LassoSaml2Assertion *assertion = NULL; LassoHttpMethod http_method = LASSO_HTTP_METHOD_NONE; char *url = NULL; int rc = 0; profile = &login->parent; if (login->protocolProfile != LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_POST && login->protocolProfile != LASSO_LOGIN_PROTOCOL_PROFILE_REDIRECT) { return critical_error(LASSO_PROFILE_ERROR_INVALID_PROTOCOLPROFILE); } if (_lasso_login_must_sign_non_authn_request(login)) { lasso_check_good_rc(lasso_profile_saml20_setup_message_signature(profile, profile->response)); } else { lasso_node_remove_signature(profile->response); } remote_provider = lasso_server_get_provider(profile->server, profile->remote_providerID); if (LASSO_IS_PROVIDER(remote_provider) == FALSE) return critical_error(LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND); url = lasso_saml20_login_get_assertion_consumer_service_url(login, remote_provider); assertion = login->private_data->saml2_assertion; if (LASSO_IS_SAML2_ASSERTION(assertion) && url) { LassoSaml2SubjectConfirmationData *subject_confirmation_data; subject_confirmation_data = lasso_saml2_assertion_get_subject_confirmation_data(assertion, TRUE); lasso_assign_string(subject_confirmation_data->Recipient, url); } /* If there is a non-encrypted NameID, fix the assertion in the session */ if (assertion && assertion->Subject && assertion->Subject->NameID) { /* store assertion in session object */ if (profile->session == NULL) { profile->session = lasso_session_new(); } lasso_session_add_assertion(profile->session, profile->remote_providerID, LASSO_NODE(assertion)); } switch (login->protocolProfile) { case LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_POST: http_method = LASSO_HTTP_METHOD_POST; break; case LASSO_LOGIN_PROTOCOL_PROFILE_REDIRECT: http_method = LASSO_HTTP_METHOD_REDIRECT; break; default: message(G_LOG_LEVEL_CRITICAL, "Cannot happen"); break; } lasso_check_good_rc(lasso_saml20_profile_build_response_msg(profile, NULL, http_method, url)); cleanup: lasso_release_string(url); return rc; } static char* lasso_saml20_login_get_assertion_consumer_service_url(LassoLogin *login, LassoProvider *remote_provider) { LassoSamlp2AuthnRequest *request; char *url = NULL; request = LASSO_SAMLP2_AUTHN_REQUEST(LASSO_PROFILE(login)->request); if (request->AssertionConsumerServiceURL) { if (lasso_saml20_provider_check_assertion_consumer_service_url(remote_provider, request->AssertionConsumerServiceURL, request->ProtocolBinding)) { return g_strdup(request->AssertionConsumerServiceURL); } } if (request->AssertionConsumerServiceIndex != -1 || request->ProtocolBinding == NULL) { url = lasso_saml20_provider_get_assertion_consumer_service_url(remote_provider, request->AssertionConsumerServiceIndex); } if (url == NULL && request->ProtocolBinding) { url = lasso_saml20_provider_get_assertion_consumer_service_url_by_binding( remote_provider, request->ProtocolBinding); } if (url == NULL) { message(G_LOG_LEVEL_WARNING, "can't find assertion consumer service url (going for default)"); url = lasso_saml20_provider_get_assertion_consumer_service_url(remote_provider, -1); } return url; } gint lasso_saml20_login_init_idp_initiated_authn_request(LassoLogin *login, const gchar *remote_providerID) { LassoProfile *profile = NULL; LassoProvider *provider = NULL; LassoServer *server = NULL; gchar *default_name_id_format = NULL; int rc = 0; profile = &login->parent; lasso_extract_node_or_fail(server, lasso_profile_get_server(profile), SERVER, LASSO_PROFILE_ERROR_MISSING_SERVER); provider = lasso_server_get_provider(server, remote_providerID); if (! LASSO_IS_PROVIDER(provider)) return LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND; /* fix roles */ server->parent.role = LASSO_PROVIDER_ROLE_IDP; provider->role = LASSO_PROVIDER_ROLE_SP; lasso_assign_string(profile->remote_providerID, remote_providerID); lasso_assign_new_gobject(profile->request, lasso_samlp2_authn_request_new()); lasso_assign_new_gobject(LASSO_SAMLP2_AUTHN_REQUEST(profile->request)->NameIDPolicy, lasso_samlp2_name_id_policy_new()); lasso_assign_new_gobject(LASSO_SAMLP2_REQUEST_ABSTRACT(profile->request)->Issuer, LASSO_SAML2_NAME_ID(lasso_saml2_name_id_new_with_string( (char*)remote_providerID))); default_name_id_format = lasso_provider_get_default_name_id_format(provider); /* Change default NameIDFormat if default exists */ if (default_name_id_format) { lasso_assign_new_string(LASSO_SAMLP2_AUTHN_REQUEST(profile->request)->NameIDPolicy->Format, default_name_id_format); } else { /* we eventually used the default of the IDP (not of the target SP), so we reset to * Lasso default, that is Transient */ lasso_assign_string(LASSO_SAMLP2_AUTHN_REQUEST(profile->request)->NameIDPolicy->Format, LASSO_SAML2_NAME_IDENTIFIER_FORMAT_TRANSIENT); } lasso_assign_string(LASSO_SAMLP2_AUTHN_REQUEST(profile->request)->NameIDPolicy->SPNameQualifier, remote_providerID); cleanup: return rc; } lasso-2.8.2/lasso/saml-2.0/PaxHeaders/assertion_query.h0000644000000000000000000000013214114336625017706 xustar0030 mtime=1630649749.818436908 30 atime=1678814151.008993845 30 ctime=1678814321.065953628 lasso-2.8.2/lasso/saml-2.0/assertion_query.h0000644000175000017500000001123514114336625023160 0ustar00bdauvergnebdauvergne00000000000000/* $Id: assertion_query.h 3237 2007-05-30 17:17:45Z dlaniel $ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_ASSERTION_QUERY_H__ #define __LASSO_ASSERTION_QUERY_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "../id-ff/profile.h" #include "../xml/saml-2.0/samlp2_manage_name_id_request.h" #include "../xml/saml-2.0/samlp2_manage_name_id_response.h" #define LASSO_TYPE_ASSERTION_QUERY (lasso_assertion_query_get_type()) #define LASSO_ASSERTION_QUERY(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_ASSERTION_QUERY, LassoAssertionQuery)) #define LASSO_ASSERTION_QUERY_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_ASSERTION_QUERY, \ LassoAssertionQueryClass)) #define LASSO_IS_ASSERTION_QUERY(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_ASSERTION_QUERY)) #define LASSO_IS_ASSERTION_QUERY_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_ASSERTION_QUERY)) #define LASSO_ASSERTION_QUERY_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_ASSERTION_QUERY, \ LassoAssertionQueryClass)) typedef struct _LassoAssertionQuery LassoAssertionQuery; typedef struct _LassoAssertionQueryClass LassoAssertionQueryClass; typedef struct _LassoAssertionQueryPrivate LassoAssertionQueryPrivate; /** * LassoAssertionQueryRequestType: * @LASSO_ASSERTION_QUERY_REQUEST_TYPE_UNSET: the unknown value * @LASSO_ASSERTION_QUERY_REQUEST_TYPE_ASSERTION_ID: an AssertionID request, to retrieve an * assertion by its ID. * @LASSO_ASSERTION_QUERY_REQUEST_TYPE_AUTHN: an AuthnQuery request, which is used to request existing authentication assertions about a given subject from an Authentication Authority * @LASSO_ASSERTION_QUERY_REQUEST_TYPE_ATTRIBUTE: an AttributeQuery, which is used to retrieve * attribute an a principal. * @LASSO_ASSERTION_QUERY_REQUEST_TYPE_AUTHZ_DECISION: an AuthzDecisionQuery, which is used to * request authorisation to let a principal access a certain resource. * * Enumerate the existing kind of AssertionQuery requests. **/ typedef enum { LASSO_ASSERTION_QUERY_REQUEST_TYPE_UNSET = 0, LASSO_ASSERTION_QUERY_REQUEST_TYPE_ASSERTION_ID, LASSO_ASSERTION_QUERY_REQUEST_TYPE_AUTHN, LASSO_ASSERTION_QUERY_REQUEST_TYPE_ATTRIBUTE, LASSO_ASSERTION_QUERY_REQUEST_TYPE_AUTHZ_DECISION, LASSO_ASSERTION_QUERY_REQUEST_TYPE_LAST } LassoAssertionQueryRequestType; struct _LassoAssertionQuery { LassoProfile parent; /*< private >*/ LassoAssertionQueryPrivate *private_data; }; struct _LassoAssertionQueryClass { LassoProfileClass parent; }; LASSO_EXPORT GType lasso_assertion_query_get_type(void); LASSO_EXPORT LassoAssertionQuery *lasso_assertion_query_new(LassoServer *server); LASSO_EXPORT void lasso_assertion_query_destroy(LassoAssertionQuery *assertion_query); LASSO_EXPORT lasso_error_t lasso_assertion_query_init_request( LassoAssertionQuery *assertion_query, char *remote_provider_id, LassoHttpMethod http_method, LassoAssertionQueryRequestType query_request_type); LASSO_EXPORT lasso_error_t lasso_assertion_query_validate_request( LassoAssertionQuery *assertion_query); LASSO_EXPORT lasso_error_t lasso_assertion_query_build_request_msg( LassoAssertionQuery *assertion_query); LASSO_EXPORT lasso_error_t lasso_assertion_query_process_request_msg( LassoAssertionQuery *assertion_query, gchar *request_msg); LASSO_EXPORT lasso_error_t lasso_assertion_query_build_response_msg( LassoAssertionQuery *assertion_query); LASSO_EXPORT lasso_error_t lasso_assertion_query_process_response_msg( LassoAssertionQuery *assertion_query, gchar *response_msg); LASSO_EXPORT lasso_error_t lasso_assertion_query_add_attribute_request(LassoAssertionQuery *assertion_query, char *format, char *name); LASSO_EXPORT LassoAssertionQueryRequestType lasso_assertion_query_get_request_type( LassoAssertionQuery *assertion_query); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_ASSERTION_QUERY_H__ */ lasso-2.8.2/lasso/saml-2.0/PaxHeaders/ecp.h0000644000000000000000000000013214114336625015221 xustar0030 mtime=1630649749.818436908 30 atime=1678814151.008993845 30 ctime=1678814321.069953651 lasso-2.8.2/lasso/saml-2.0/ecp.h0000644000175000017500000000630414114336625020474 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_ECP_H__ #define __LASSO_ECP_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "../xml/xml.h" #include "../id-ff/profile.h" #include "../xml//saml-2.0/samlp2_idp_list.h" #define LASSO_TYPE_ECP (lasso_ecp_get_type()) #define LASSO_ECP(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_ECP, LassoEcp)) #define LASSO_ECP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_ECP, LassoEcpClass)) #define LASSO_IS_ECP(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_ECP)) #define LASSO_IS_ECP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_ECP)) #define LASSO_ECP_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_ECP, LassoEcpClass)) typedef struct _LassoEcp LassoEcp; typedef struct _LassoEcpClass LassoEcpClass; typedef struct _LassoEcpPrivate LassoEcpPrivate; struct _LassoEcp { LassoProfile parent; /*< public >*/ gchar *assertion_consumer_url; gchar *message_id; gchar *response_consumer_url; gchar *relaystate; LassoSaml2NameID *issuer; gchar *provider_name; gboolean is_passive; LassoSamlp2IDPList *sp_idp_list; GList *known_sp_provided_idp_entries_supporting_ecp; /* of LassoSamlp2IDPEntry */ GList *known_idp_entity_ids_supporting_ecp; /* of strings */ /*< private >*/ LassoEcpPrivate *private_data; }; struct _LassoEcpClass { LassoProfileClass parent_class; }; LASSO_EXPORT GType lasso_ecp_get_type(void); LASSO_EXPORT LassoEcp* lasso_ecp_new(LassoServer *server); LASSO_EXPORT lasso_error_t lasso_ecp_process_authn_request_msg(LassoEcp *ecp, const char *authn_request_msg); LASSO_EXPORT lasso_error_t lasso_ecp_process_response_msg(LassoEcp *ecp, const char *response_msg); LASSO_EXPORT void lasso_ecp_destroy(LassoEcp *ecp); LASSO_EXPORT gboolean lasso_ecp_is_provider_in_sp_idplist(LassoEcp *ecp, const gchar *entity_id); LASSO_EXPORT gboolean lasso_ecp_is_idp_entry_known_idp_supporting_ecp(LassoEcp *ecp, const LassoSamlp2IDPEntry *idp_entry); LASSO_EXPORT void lasso_ecp_set_known_sp_provided_idp_entries_supporting_ecp(LassoEcp *ecp); LASSO_EXPORT gboolean lasso_ecp_has_sp_idplist(LassoEcp *ecp); LASSO_EXPORT gchar *lasso_ecp_get_endpoint_url_by_entity_id(LassoEcp *ecp, const gchar *entity_id); LASSO_EXPORT int lasso_ecp_process_sp_idp_list(LassoEcp *ecp, const LassoSamlp2IDPList *sp_idp_list); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_ECP_H__ */ lasso-2.8.2/lasso/saml-2.0/PaxHeaders/ecp.c0000644000000000000000000000013214364261206015213 xustar0030 mtime=1674666630.750769144 30 atime=1678814230.705441406 30 ctime=1678814321.085953742 lasso-2.8.2/lasso/saml-2.0/ecp.c0000644000175000017500000007475114364261206020501 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ /* * SAML2 Profile for ECP (Section 4.2) defines these steps for an ECP * transaction * * 1. ECP issues HTTP Request to SP * 2. SP issues to ECP using PAOS * 3. ECP determines IdP * 4. ECP conveys to IdP using SOAP * 5. IdP identifies principal * 6. IdP issues to ECP, targeted at SP using SOAP * 7. ECP conveys to SP using PAOS * 8. SP grants or denies access to principal */ /** * SECTION:ecp * @short_description: Enhanced Client or Proxy Profile (SAMLv2) * * # Introduction * * The #LassoEcp object is used to implement a SAMLv2 ECP client. * If you want to support ECP in a SP see [ecp-sp]. * If you want to support ECP in a IdP see [ecp-idp]. * * # ECP Operational Steps * * SAML2 Profile for ECP (Section 4.2) defines these steps for an ECP * transaction * * 1. ECP issues HTTP Request to SP * 2. SP issues <samlp:AuthnRequest> to ECP using PAOS * 3. ECP determines IdP * 4. ECP conveys <samlp:AuthnRequest> to IdP using SOAP * 5. IdP identifies principal * 6. IdP issues <samlp:Response> to ECP, targeted at SP using SOAP * 7. ECP conveys <samlp:Response> to SP using PAOS * 8. SP grants or denies access to principal * * * * **/ /** * SECTION:ecp-sp * @short_description: How to support ECP in an SP * * * |[ * login = lasso_login_new(server); * ]| */ /** * SECTION:ecp-idp * @short_description: How to support ECP in an IdP * * * |[ * login = lasso_login_new(server); * ]| */ #include "../xml/private.h" #include #include #include "profileprivate.h" #include "../id-ff/serverprivate.h" #include "ecpprivate.h" #include "ecp.h" #include "../utils.h" #include "../xml/soap-1.1/soap_envelope.h" #include "../xml/soap-1.1/soap_header.h" #include "../xml/soap-1.1/soap_body.h" #include "../xml/soap-1.1/soap_fault.h" #include "../xml/misc_text_node.h" #include "../xml/paos_request.h" #include "../xml/paos_response.h" #include "../xml/ecp/ecp_request.h" #include "../xml/ecp/ecp_response.h" #include "../xml/ecp/ecp_relaystate.h" #include "../xml/lib_authn_request.h" #include "../xml/saml-2.0/samlp2_response.h" #include "../xml/saml-2.0/samlp2_authn_request.h" /*****************************************************************************/ /* Prototypes */ /*****************************************************************************/ static gboolean is_provider_in_sp_idplist(GList *idp_list, const gchar *entity_id); static gboolean is_idp_entry_in_entity_id_list(GList *entity_id_list, const LassoSamlp2IDPEntry *idp_entry); static GList * intersect_sp_idplist_with_entity_id_list(GList *sp_provided_idp_entries, GList *known_idp_entity_ids_supporting_ecp); /*****************************************************************************/ /* public methods */ /*****************************************************************************/ /** * lasso_ecp_destroy: * @ecp: a #LassoEcp * * Destroys a #LassoEcp object * **/ void lasso_ecp_destroy(LassoEcp *ecp) { lasso_node_destroy(LASSO_NODE(ecp)); } /** * lasso_ecp_is_provider_in_sp_idplist: * @ecp: a #LassoEcp * @entity_id: EntityID to check if member of #LassoEcp.IDPList * * Check to see if the provider with @entity_id is in the * ecp IDPList returned by the SP. * * Return value: TRUE if @entity_id is in #LassoEcp.IDPList, FALSE otherwise */ gboolean lasso_ecp_is_provider_in_sp_idplist(LassoEcp *ecp, const gchar *entity_id) { return is_provider_in_sp_idplist(ecp->sp_idp_list->IDPEntry, entity_id); } /** * lasso_ecp_is_idp_entry_known_idp_supporting_ecp: * @ecp: a #LassoEcp * @idp_entry: #LassoSamlp2IDPEntry to check if member of @entity_id_list * * Check to see if the @idp_entry is in the @entity_id_list * * * Return value: TRUE if @entity_id is in @idp_list, FALSE otherwise */ gboolean lasso_ecp_is_idp_entry_known_idp_supporting_ecp(LassoEcp *ecp, const LassoSamlp2IDPEntry *idp_entry) { return is_idp_entry_in_entity_id_list(ecp->known_idp_entity_ids_supporting_ecp, idp_entry); } /** * lasso_ecp_set_known_sp_provided_idp_entries_supporting_ecp: * @ecp: a #LassoEcp * * The SP may provide a list of #LassoSamlp2IDPEntry * (#LassoEcp.sp_idp_list) which it trusts. The ECP client * has a list of IDP EntityID's it knows supports ECP * (#LassoEcp.known_idp_entity_ids_supporting_ecp). The set of * possible IDP's which can service the SP's authn request are the * interesection of these two lists (the IDP's the SP approves and * IDP's the ECP knows about). This find the common members between * the two lists and assign them to * #LassoEcp.known_sp_provided_idp_entries_supporting_ecp. */ void lasso_ecp_set_known_sp_provided_idp_entries_supporting_ecp(LassoEcp *ecp) { lasso_assign_new_list_of_strings(ecp->known_sp_provided_idp_entries_supporting_ecp, intersect_sp_idplist_with_entity_id_list(ecp->sp_idp_list ? ecp->sp_idp_list->IDPEntry : NULL, ecp->known_idp_entity_ids_supporting_ecp)); } /** * lasso_ecp_has_sp_idplist: * @ecp: a #LassoEcp * * Returns TRUE if the SP provided an IDP List, FALSE otherwise. */ gboolean lasso_ecp_has_sp_idplist(LassoEcp *ecp) { return ecp->sp_idp_list && ecp->sp_idp_list->IDPEntry != NULL; } /** * lasso_ecp_get_endpoint_url_by_entity_id: * @ecp: a #LassoEcp * @entity_id: the EntityID of the IdP * * Returns the SingleSignOnService SOAP endpoint URL for the specified * @entity_id. If the provider cannot be found or if the provider does * not have a matching endpoint NULL will be returned. * * Returns: url (must be freed by caller) */ gchar * lasso_ecp_get_endpoint_url_by_entity_id(LassoEcp *ecp, const gchar *entity_id) { LassoProfile *profile; profile = LASSO_PROFILE(ecp); return lasso_server_get_endpoint_url_by_id(profile->server, entity_id, "SingleSignOnService SOAP"); } /** * lasso_ecp_process_sp_idp_list: * @ecp: a #LassoEcp * * The SP may optionally send a list of IdP's it trusts in ecp:IDPList. * The ecp:IDPList may not be complete if the IDPList.GetComplete is * non-NULL. If so the IDPList.GetComplete is a URL where a complete * IDPList may be fetched. * * Whenever the IDPList is updated this function needs to be called * because it sets the * #LassoEcp.known_sp_provided_idp_entries_supporting_ecp and the * default IdP URL (#LassoProfile.msg_url). * * The #LassoEcp client has a list of IdP's it knows supports ECP * (#LassoEcp.known_idp_entity_ids_supporting_ecp). The set of IdP's * available to select from should be those in common between SP * provided IdP list and those known by this ECP client to support * ECP. * * This routine sets the * #LassoEcp.known_sp_provided_idp_entries_supporting_ecp list to the * common members (e.g. intersection) of the SP provided IdP list and * the list of known IdP's supporting ECP. * * A default IdP will be selected and it's endpoint URL will be * assigned to #LassoProfile.msg_url. * * If the SP provided an IDP list then the default URL will be taken * from first IDPEntry in * #LassoEcp.known_sp_provided_idp_entries_supporting_ecp otherwise * it will be taken from #LassoEcp.known_idp_entity_ids_supporting_ecp. * */ int lasso_ecp_process_sp_idp_list(LassoEcp *ecp, const LassoSamlp2IDPList *sp_idp_list) { int rc = 0; LassoProfile *profile; gchar *provider_id = NULL; gchar *url; profile = LASSO_PROFILE(ecp); lasso_assign_gobject(ecp->sp_idp_list, sp_idp_list); /* Build a list of IdP's which are common between the SP and those we know support ECP */ lasso_ecp_set_known_sp_provided_idp_entries_supporting_ecp(ecp); /* Select a default IdP */ provider_id = NULL; if (lasso_ecp_has_sp_idplist(ecp)) { /* Select first IDP provided by SP that is in our IDP list */ if (ecp->known_sp_provided_idp_entries_supporting_ecp) { provider_id = ((LassoSamlp2IDPEntry*)ecp->known_sp_provided_idp_entries_supporting_ecp->data)->ProviderID; } } if (!provider_id) { /* Select first IDP from our IDP list */ if (ecp->known_idp_entity_ids_supporting_ecp) { provider_id = ecp->known_idp_entity_ids_supporting_ecp->data; } } /* If we have a default IdP assign it's ECP URL to the profile->msg_url */ lasso_release_string(profile->msg_url) if (provider_id) { url = lasso_ecp_get_endpoint_url_by_entity_id(ecp, provider_id); lasso_assign_new_string(profile->msg_url, url); } return rc; } /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static LassoNodeClass *parent_class = NULL; /** * compare_idp_entry_to_entity_id: * * Helper function for is_provider_in_sp_idplist(). */ static gboolean compare_idp_entry_to_entity_id(gconstpointer a, gconstpointer b) { const LassoSamlp2IDPEntry *idp_entry = LASSO_SAMLP2_IDP_ENTRY(a); const gchar *entity_id = b; return g_strcmp0(idp_entry->ProviderID, entity_id); } /** * is_provider_in_sp_idplist: * @idp_list: GList of LassoSamlp2IDPEntry * @entity_id: EntityID to check if member of @idp_list * * Check if the provider with @entity_id is in the #idp_list. * * Return value: TRUE if @entity_id is in @idp_list, FALSE otherwise */ static gboolean is_provider_in_sp_idplist(GList *idp_list, const gchar *entity_id) { return g_list_find_custom(idp_list, entity_id, compare_idp_entry_to_entity_id) == NULL ? FALSE : TRUE; } /** * compare_entity_id_to_idp_entry: * * Helper function for is_idp_entry_in_entity_id_list(). */ static gboolean compare_entity_id_to_idp_entry(gconstpointer a, gconstpointer b) { const gchar *entity_id = a; const LassoSamlp2IDPEntry *idp_entry = LASSO_SAMLP2_IDP_ENTRY(b); return g_strcmp0(entity_id, idp_entry->ProviderID); } /** * is_idp_entry_in_entity_id_list: * @entity_id_list: #GList of entity id's * @idp_entry: #LassoSamlp2IDPEntry to check if member of @entity_id_list * * Check if the provider with @entity_id is in the #idp_list. * * Return value: TRUE if @entity_id is in @idp_list, FALSE otherwise */ static gboolean is_idp_entry_in_entity_id_list(GList *entity_id_list, const LassoSamlp2IDPEntry *idp_entry) { return g_list_find_custom(entity_id_list, idp_entry, compare_entity_id_to_idp_entry) == NULL ? FALSE : TRUE; } /* * intersect_sp_idplist_with_entity_id_list: * @sp_provided_idp_entries: #GList of #LassoSamlp2IDPEntry * @known_idp_entity_ids_supporting_ecp: #GList of entity id's * * The SP may provide a list of #LassoSamlp2IDPEntry which it * trusts. The ECP client has a list of IDP EntityID's it knows * supports ECP. The set of possible IDP's which can service the SP's * authn request are the interesection of these two lists (the IDP's * the SP approves and IDP's the ECP knows about). This function * accepts the SP's IDPEntry list and returns a new list containing * only those the ECP client knows about. The returned list must be * freed with lasso_release_list_of_gobjects(). * * Return value: GList of #LassoSamlp2IDPEntry * (caller must free with lasso_release_list_of_gobjects()) */ static GList * intersect_sp_idplist_with_entity_id_list(GList *sp_provided_idp_entries, GList *known_idp_entity_ids_supporting_ecp) { GList *i; GList *new_list = NULL; lasso_foreach(i, sp_provided_idp_entries) { LassoSamlp2IDPEntry *idp_entry = i->data; if (is_idp_entry_in_entity_id_list(known_idp_entity_ids_supporting_ecp, idp_entry)) { lasso_list_add_gobject(new_list, idp_entry); } } return new_list; } /*****************************************************************************/ /* overridden parent class methods */ /*****************************************************************************/ static void dispose(GObject *object) { LassoEcp *ecp = LASSO_ECP(object); if (ecp->private_data->dispose_has_run) { return; } ecp->private_data->dispose_has_run = TRUE; lasso_release_string(ecp->assertion_consumer_url); lasso_release_string(ecp->message_id); lasso_release_string(ecp->response_consumer_url); lasso_release_string(ecp->relaystate); lasso_release_gobject(ecp->issuer); lasso_release_string(ecp->provider_name); lasso_release_gobject(ecp->sp_idp_list); lasso_release_list_of_gobjects(ecp->known_sp_provided_idp_entries_supporting_ecp); lasso_release_list_of_strings(ecp->known_idp_entity_ids_supporting_ecp); G_OBJECT_CLASS(parent_class)->dispose(G_OBJECT(ecp)); } static void finalize(GObject *object) { LassoEcp *ecp = LASSO_ECP(object); lasso_release(ecp->private_data); G_OBJECT_CLASS(parent_class)->finalize(object); } /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void instance_init(LassoEcp *ecp, G_GNUC_UNUSED void *unused) { ecp->private_data = g_new0(LassoEcpPrivate, 1); } static void class_init(LassoEcpClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "Ecp"); lasso_node_class_set_ns(nclass, LASSO_LASSO_HREF, LASSO_LASSO_PREFIX); G_OBJECT_CLASS(klass)->dispose = dispose; G_OBJECT_CLASS(klass)->finalize = finalize; } /** * lasso_ecp_process_authn_request_msg: * @ecp: this #LassoEcp object * @authn_request_msg: the PAOS authn request received from the SP * * This function implements the following ECP step: * ECP Step 3, ECP determines IdP * ECP Step 4, parse SP PAOS Authn request, build SOAP for IdP * * This is to be used in an ECP client. The @authn_request_msg is the * SOAP PAOS message received from the SP in response to a resource * request with an HTTP Accept header indicating PAOS support. * * The following actions are implemented: * * * Extract the samlp:AuthnRequest from the SOAP body and build a * new SOAP message containing the samlp:AuthnRequest which will * be forwarded to the IdP. This new SOAP message is stored in the * #LassoProfile.msg_body. * * * Parse the SOAP header which will contain a paos:Request, a * ecp:Request and optionally a ecp:RelayState. Some of the data * in these headers need to be preserved for later processing steps. * * 1. The paos:Request.responseConsumerURL is copied to the * #LassoEcp.response_consumer_url. This is necessary because the * ECP client MUST assure it matches the * ecp:Response.AssertionConsumerServiceURL returned by the IdP to * prevent man-in-the-middle attacks. It must also match the * samlp:AuthnRequest.AssertionConsumerServiceURL. * * 2. If the paos:Request contained a messageID it is copied to * #LassoEcp.message_id so it can be returned in the subsequent * paos:Response.refToMessageID. This allows a provider to * correlate messages. * * 3. If an ecp:RelayState is present it is copied to * #LassoEcp.relaystate. This is necessary because in step 7 when * the ECP responds to the SP it must include RelayState provided in * the request. * * * In addition the following items are copied to the #LassoEcp for * informational purposes: * * * #LassoEcp.issuer = ecp:Request.Issuer * * * #LassoEcp.provider_name = ecp:Request.ProviderName * * * #LassoEcp.is_passive = ecp:Request.IsPassive * * * #LassoEcp.sp_idp_list = ecp:Request.IDPList * * # IdP Selection * * In Step 3. The ECP must determine the IdP to forward the * AuthnRequest to. There are two sets of IdP's which come into * play. The ECP client has a set of IdP's it knows about because * their metadata has been loaded into the #LassoServer object. The SP * may optionally send a list of IdP's in the ecp:Request that it * trusts. * * The selected IdP *must* be one of the IdP's loaded into the * #LassoServer object from metadata because the IdP endpoints must be * known. Furthermore the IdP *must* support the SingleSignOnService * using the SOAP binding. Therefore the known IdP's are filtered for * those that match this criteria and a list of their EntityID's are * assigned to #LassoEcp.known_idp_entity_ids_supporting_ecp. The * selected IdP *must* be a member of this list. * * The SP may optionally send a list of IdP's it trusts. If the SP * sends an IDPList the selected IdP should be a member of this list * and from above we know it must also be a member of the * #LassoEcp.known_idp_entity_ids_supporting_ecp. Therefore the * #LassoEcp.known_sp_provided_idp_entries_supporting_ecp list is set * to the common members (e.g. intersection) of the SP provided IdP * list and the list of known IdP's supporting ECP. * * When making an IdP selection if the SP provided an IdP List (use * #LassoEcp.lasso_ecp_has_sp_idplist()) then it should be selected * from the #LassoEcp.known_sp_provided_idp_entries_supporting_ecp * list. Otherwise the IdP should be selected from * #LassoEcp.known_idp_entity_ids_supporting_ecp. * * A default IdP will be selected using the above logic by picking the * first IdP in the appropriate list, it's endpoint URL will be * assigned to #LassoProfile.msg_url. The above processing is * implemented by #LassoEcp.lasso_ecp_process_sp_idp_list() and if the * SP IDPList is updated this routine should be called. * * A note about the 3 IdP lists. The #LassoEcp.sp_idp_list.IDPList * and #LassoEcp.known_sp_provided_idp_entries_supporting_ecp are * #GList's of #LassoSamlp2IDPEntry object which have a ProviderID, * Name, and Loc attribute. You may wish to use this SP provided * information when making a decision or presenting in a user * interface that allows a user to make a choice. The * #LassoEcp.known_idp_entity_ids_supporting_ecp is a #GList of * EntityID strings. * * Given the EntityID of an IdP you can get the ECP endpoint by * calling #LassoEcp.lasso_ecp_get_endpoint_url_by_entity_id() * * # Results * * After a successful return from this call you are ready to complete * Step 4. and forward the request the IdP. * * The URL to send to the request to will be #LassoProfile.msg_url (if * you accept the default IdP) and the body of the message to post * will be #LassoProfile.msg_body. * * * # Side Effects * * After a successful return the #LassoEcp object will be updated with: * * * ecp->response_consumer_url = paos_request->responseConsumerURL * * ecp->message_id = paos_request->messageID * * ecp->relaystate = ecp_relaystate->RelayState * * ecp->issuer = ecp_request->Issue * * ecp->provider_name = ecp_request->ProviderName * * ecp->is_passive = ecp_request->IsPassive * * ecp->known_idp_entity_ids_supporting_ecp * * ecp->sp_idp_list = ecp_request->IDPList * * ecp->known_sp_provided_idp_entries_supporting_ecp * */ int lasso_ecp_process_authn_request_msg(LassoEcp *ecp, const char *authn_request_msg) { int rc = 0; LassoSoapEnvelope *envelope = NULL; LassoSoapHeader *header = NULL; LassoSoapBody *body = NULL; LassoPaosRequest *paos_request = NULL; LassoEcpRequest *ecp_request = NULL; LassoEcpRelayState *ecp_relaystate = NULL; LassoSamlp2AuthnRequest *authn_request = NULL; GList *i; LassoProfile *profile; g_return_val_if_fail(LASSO_IS_ECP(ecp), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); g_return_val_if_fail(authn_request_msg != NULL, LASSO_PARAM_ERROR_INVALID_VALUE); profile = LASSO_PROFILE(ecp); /* Get the SOAP envelope */ lasso_extract_node_or_fail(envelope, lasso_soap_envelope_new_from_message(authn_request_msg), SOAP_ENVELOPE, LASSO_PROFILE_ERROR_INVALID_SOAP_MSG); /* Get the SOAP body */ lasso_extract_node_or_fail(body, envelope->Body, SOAP_BODY, LASSO_SOAP_ERROR_MISSING_BODY); goto_cleanup_if_fail_with_rc(body->any && LASSO_IS_NODE(body->any->data), LASSO_SOAP_ERROR_MISSING_BODY); lasso_extract_node_or_fail(authn_request, body->any->data, SAMLP2_AUTHN_REQUEST, LASSO_ECP_ERROR_MISSING_AUTHN_REQUEST); /* Get the SOAP header */ lasso_extract_node_or_fail(header, envelope->Header, SOAP_HEADER, LASSO_SOAP_ERROR_MISSING_HEADER); goto_cleanup_if_fail_with_rc(header->Other && LASSO_IS_NODE(header->Other->data), LASSO_SOAP_ERROR_MISSING_HEADER); /* * Get the following header elements: * * paos:Request (required) * * ecp:Request (required) * * ecp:RelayState (optional) */ lasso_foreach(i, header->Other) { if (!paos_request && LASSO_IS_PAOS_REQUEST(i->data)) { paos_request = (LassoPaosRequest *)i->data; } else if (!ecp_request && LASSO_IS_ECP_REQUEST(i->data)) { ecp_request = (LassoEcpRequest *)i->data; } else if (!ecp_relaystate && LASSO_IS_ECP_RELAYSTATE(i->data)) { ecp_relaystate = (LassoEcpRelayState *)i->data; } if (ecp_relaystate && ecp_request && paos_request) break; } goto_cleanup_if_fail_with_rc(paos_request, LASSO_PAOS_ERROR_MISSING_REQUEST); goto_cleanup_if_fail_with_rc(ecp_request, LASSO_ECP_ERROR_MISSING_REQUEST); /* Copy data for later use */ if (paos_request->responseConsumerURL) { lasso_assign_string(ecp->response_consumer_url, paos_request->responseConsumerURL); } else { goto_cleanup_with_rc(LASSO_PAOS_ERROR_MISSING_RESPONSE_CONSUMER_URL); } if (paos_request->messageID) { lasso_assign_string(ecp->message_id, paos_request->messageID); } if (ecp_relaystate) { lasso_assign_string(ecp->relaystate, ecp_relaystate->RelayState); } lasso_assign_gobject(ecp->issuer, ecp_request->Issuer); lasso_assign_string(ecp->provider_name, ecp_request->ProviderName); ecp->is_passive = ecp_request->IsPassive; /* * Build a SOAP envelope whose body contains the original * AuthnRequest received from the SP. The obvious solution is to * serialize into XML the LassoSamlp2AuthnRequest LassoNode that * was serialized from XML when we parsed the PAOS request * (e.g. lasso_node_export_to_soap(LASSO_NODE(authn_request))) but * that won't work because XML serialization is not symmetric. * Serializing from XML into a LassoNode and then serializing the * LassoNode back into XML does not produce the originial XML * content. This is mostly due to the presence of signatures. In * order to forward the *exact* same XML AuthnRequest we received * from the SP to the IdP we mark the LassoSamlp2AuthnRequest with * a flag indicating it's xmlNode needs to be preserved * (e.g. keep_xmlnode = TRUE). We copy the xmlNode into a special * LassoNode (LassoMiscTextNode) which is capable of preserving * the exact xmlNode thus insuring no modification was made to the * content. * * We assign the SOAP message to the profile->msg_body so it's * available for transmitting to the IdP. */ { xmlNodePtr xml; LassoMiscTextNode *misc; xml = lasso_node_get_original_xmlnode(LASSO_NODE(authn_request)); misc = lasso_misc_text_node_new_with_xml_node(xml); lasso_assign_new_string(LASSO_PROFILE(ecp)->msg_body, lasso_node_export_to_soap(LASSO_NODE(misc))); lasso_release_gobject(misc); } /* Set up for IdP selection, build IdP lists, make default IdP choice */ /* Filter our server's list of IdP's to only include those that support ECP */ ecp->known_idp_entity_ids_supporting_ecp = lasso_server_get_filtered_provider_list( profile->server, LASSO_PROVIDER_ROLE_IDP, LASSO_MD_PROTOCOL_TYPE_SINGLE_SIGN_ON, LASSO_HTTP_METHOD_SOAP); /* Update the IdP lists and select a default URL */ lasso_ecp_process_sp_idp_list(ecp, ecp_request->IDPList); cleanup: lasso_release_gobject(envelope); return rc; } /** * lasso_ecp_process_response_msg: * @ecp: this #LassoEcp object * @response_msg: the SOAP response from the IdP * * * The function implements ECP Step 7; parse IdP SOAP response and * build PAOS response for SP. * * See SAML Profile Section 4.2.4.5 PAOS Response Header Block: ECP to SP * * This is to be used in an ECP client. The @response_msg parameter * contains the SOAP response from the IdP. We extract the ECP Header * Block and body from it. We will generate a new PAOS message to send * to the SP, the SOAP header will contain a paos:Response. If we * received a paos:Request.MessageID in Step. 4 from the SP then we * will copy it back to the paos:Response.refToMessageID. If we * received a RelayState we will add that to the SOAP header as well. * * To prevent a man-in-the-middle attack we verify the * responseConsumerURL we received in Step 4 matches the * ecp:Response.AssertionConsumerServiceURL we just received back from * the IdP. If they do not match we return a * #LASSO_ECP_ERROR_ASSERTION_CONSUMER_URL_MISMATCH error and set the * #LassoProvider.msg_body to the appropriate SOAP fault. * * The new PAOS message for the SP we are buiding contains the IdP * response in the new SOAP body and the new SOAP headers will contain * a paso:Response and optionally an ecp:RelayState. * * After a successful return from this call you are ready to complete * Step 7. and forward the response to the SP. * * The PASO message is assigned to the #LassoProvider.msg_body and * the desination URL is assigned to the #LassoProvider.msg_url. * * # Side Effects * * After a successful return the #LassoEcp object will be updated with: * * * ecp->assertion_consumer_url = ecp_response->AssertionConsumerServiceURL * * ecp.profile.msg_url = ecp->assertion_consumer_url * * ecp.profile.msg_body_url = PAOS response to SP */ int lasso_ecp_process_response_msg(LassoEcp *ecp, const char *response_msg) { int rc = 0; LassoSoapEnvelope *envelope = NULL; LassoSoapHeader *header = NULL; LassoSoapBody *body = NULL; LassoPaosResponse *paos_response = NULL; LassoEcpResponse *ecp_response = NULL; LassoEcpRelayState *ecp_relaystate = NULL; LassoSamlp2Response *samlp2_response = NULL; GList *i; GList *headers = NULL; g_return_val_if_fail(LASSO_IS_ECP(ecp), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); g_return_val_if_fail(response_msg != NULL, LASSO_PARAM_ERROR_INVALID_VALUE); /* Get the SOAP envelope */ lasso_extract_node_or_fail(envelope, lasso_soap_envelope_new_from_message(response_msg), SOAP_ENVELOPE, LASSO_PROFILE_ERROR_INVALID_SOAP_MSG); /* Get the SOAP body */ lasso_extract_node_or_fail(body, envelope->Body, SOAP_BODY, LASSO_SOAP_ERROR_MISSING_BODY); goto_cleanup_if_fail_with_rc(body->any && LASSO_IS_NODE(body->any->data), LASSO_SOAP_ERROR_MISSING_BODY); lasso_extract_node_or_fail(samlp2_response, body->any->data, SAMLP2_RESPONSE, LASSO_ECP_ERROR_MISSING_SAML_RESPONSE); /* Get the SOAP header */ lasso_extract_node_or_fail(header, envelope->Header, SOAP_HEADER, LASSO_SOAP_ERROR_MISSING_HEADER); goto_cleanup_if_fail_with_rc(header->Other && LASSO_IS_NODE(header->Other->data), LASSO_SOAP_ERROR_MISSING_HEADER); /* * Get the following header elements: * * ecp:Response (required) */ lasso_foreach(i, header->Other) { if (!ecp_response && LASSO_IS_ECP_RESPONSE(i->data)) { ecp_response = (LassoEcpResponse *)i->data; } if (ecp_response) break; } goto_cleanup_if_fail_with_rc(ecp_response, LASSO_ECP_ERROR_MISSING_RESPONSE); lasso_assign_string(ecp->assertion_consumer_url, ecp_response->AssertionConsumerServiceURL); /* * The ECP MUST confirm the ecp:Response * AssertionConsumerServiceURL corresponds to the paos:Request * responseConsumerURL. Since the responseConsumerServiceURL MAY * be relative and the AssertionConsumerServiceURL is absolute * some processing/normalization may be required. * * If the values do not match the ECP MUST generate a SOAP fault * and MUST not return the SAML response. */ if (lasso_strisnotequal(ecp->response_consumer_url, ecp_response->AssertionConsumerServiceURL)) { goto_cleanup_with_rc(LASSO_ECP_ERROR_ASSERTION_CONSUMER_URL_MISMATCH); } /* Generate SOAP headers */ paos_response = LASSO_PAOS_RESPONSE(lasso_paos_response_new(ecp->message_id)); lasso_list_add_new_gobject(headers, paos_response); if (ecp->relaystate) { ecp_relaystate = LASSO_ECP_RELAYSTATE(lasso_ecp_relay_state_new(ecp->relaystate)); lasso_list_add_new_gobject(headers, ecp_relaystate); } /* * Create a SOAP document and assign it to the LassoEcp->msg_body. * See comment in lasso_ecp_process_authn_request_msg() where the * profile->msg_body is assigned for an explanation of what is * being done here. */ { xmlNodePtr xml; LassoMiscTextNode *misc; xml = lasso_node_get_original_xmlnode(LASSO_NODE(samlp2_response)); misc = lasso_misc_text_node_new_with_xml_node(xml); lasso_assign_new_string(LASSO_PROFILE(ecp)->msg_body, lasso_node_export_to_soap_with_headers(LASSO_NODE(misc), headers)); lasso_release_gobject(misc); } /* Set the destination URL for the the PAOS response */ lasso_assign_string(LASSO_PROFILE(ecp)->msg_url, ecp->response_consumer_url); cleanup: if (rc) { LassoSoapFault *fault = NULL; fault = lasso_soap_fault_new_full(LASSO_SOAP_FAULT_CODE_CLIENT, lasso_strerror(rc)); lasso_assign_new_string(LASSO_PROFILE(ecp)->msg_body, lasso_node_export_to_soap(LASSO_NODE(fault))); } lasso_release_list_of_gobjects(headers); lasso_release_gobject(envelope); return rc; } GType lasso_ecp_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoEcpClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoEcp), 0, (GInstanceInitFunc) instance_init, NULL }; this_type = g_type_register_static(LASSO_TYPE_PROFILE, "LassoEcp", &this_info, 0); } return this_type; } /** * lasso_ecp_new * * Creates a new #LassoEcp. * * Return value: a newly created #LassoEcp object; or NULL if an error * occured **/ LassoEcp* lasso_ecp_new(LassoServer *server) { LassoEcp *ecp; ecp = g_object_new(LASSO_TYPE_ECP, NULL); LASSO_PROFILE(ecp)->server = g_object_ref(server); return ecp; } lasso-2.8.2/lasso/saml-2.0/PaxHeaders/federation.c0000644000000000000000000000013214114336625016565 xustar0030 mtime=1630649749.818436908 30 atime=1678814231.677446891 30 ctime=1678814321.085953742 lasso-2.8.2/lasso/saml-2.0/federation.c0000644000175000017500000000334314114336625022040 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../xml/private.h" #include "../id-ff/federation.h" #include "federationprivate.h" #include "../xml/saml-2.0/saml2_name_id.h" static LassoNode* lasso_saml20_federation_build_name_identifier(const gchar *nameQualifier, const gchar *format, const gchar *content) { LassoSaml2NameID *name_id; name_id = LASSO_SAML2_NAME_ID(lasso_saml2_name_id_new()); if (content == NULL) { name_id->content = lasso_build_unique_id(32); } else { name_id->content = g_strdup(content); } name_id->NameQualifier = g_strdup(nameQualifier); name_id->Format = g_strdup(format); return LASSO_NODE(name_id); } void lasso_saml20_federation_build_local_name_identifier(LassoFederation *federation, const gchar *nameQualifier, const gchar *format, const gchar *content) { federation->local_nameIdentifier = lasso_saml20_federation_build_name_identifier( nameQualifier, format, content); } lasso-2.8.2/lasso/saml-2.0/PaxHeaders/server.c0000644000000000000000000000013114114336625015752 xustar0030 mtime=1630649749.822436951 30 atime=1678814239.253489657 29 ctime=1678814321.09795381 lasso-2.8.2/lasso/saml-2.0/server.c0000644000175000017500000002024514114336625021226 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include #include "../utils.h" #include "../xml/private.h" #include "serverprivate.h" #include "../id-ff/serverprivate.h" #include "../id-ff/providerprivate.h" #include "../xml/saml-2.0/saml2_xsd.h" int lasso_saml20_server_load_affiliation(LassoServer *server, xmlNode *node) { xmlNode *t; char *owner_id, *member_id, *affiliation_id; LassoProvider *provider; if (strcmp((char*)node->ns->href, LASSO_SAML2_METADATA_HREF) != 0) { /* not saml 2 metadata ns */ return LASSO_XML_ERROR_NODE_NOT_FOUND; } for (t = node->children; t; t = t->next) { if (t->type == XML_ELEMENT_NODE && strcmp((char*)t->name, "AffiliationDescriptor") == 0) { break; } } if (t == NULL) { /* no AffiliationDescriptor element */ return LASSO_XML_ERROR_NODE_NOT_FOUND; } affiliation_id = (char*)xmlGetProp(node, (xmlChar*)"entityID"); owner_id = (char*)xmlGetProp(t, (xmlChar*)"affiliationOwnerID"); for (t = t->children; t; t = t->next) { if (t->type == XML_ELEMENT_NODE && strcmp((char*)t->name, "AffiliateMember") == 0) { member_id = (char*)xmlNodeGetContent(t); provider = lasso_server_get_provider(server, member_id); if (provider == NULL) { message(G_LOG_LEVEL_WARNING, "Failed to find affiliate member: %s", member_id); xmlFree(member_id); continue; } if (provider->private_data->affiliation_owner_id) { message(G_LOG_LEVEL_WARNING, "Provider %s in more than one affiliation", provider->ProviderID); lasso_release_string(provider->private_data->affiliation_owner_id); } provider->private_data->affiliation_owner_id = g_strdup(owner_id); provider->private_data->affiliation_id = g_strdup(affiliation_id); xmlFree(member_id); } } xmlFree(affiliation_id); xmlFree(owner_id); return 0; } static void debug_report_signature_error(xmlNode *node, lasso_error_t result) { xmlChar *path; path = xmlGetNodePath(node); debug("Could not check signature whose xpath is '%s': %s", path, lasso_strerror(result)); lasso_release_xml_string(path); } static gboolean _lasso_test_sp_descriptor(xmlNode *node) { return xmlSecFindChild(node, BAD_CAST LASSO_SAML2_METADATA_ELEMENT_SP_SSO_DESCRIPTOR, BAD_CAST LASSO_SAML2_METADATA_HREF) != NULL; } static gboolean _lasso_test_idp_descriptor(xmlNode *node) { return xmlSecFindChild(node, BAD_CAST LASSO_SAML2_METADATA_ELEMENT_IDP_SSO_DESCRIPTOR, BAD_CAST LASSO_SAML2_METADATA_HREF) != NULL; } static lasso_error_t lasso_saml20_server_load_metadata_entity(LassoServer *server, LassoProviderRole role, xmlDoc *doc, xmlNode *entity, GList *blacklisted_entity_ids, GList **loaded_end, xmlSecKeysMngr *keys_mngr, LassoServerLoadMetadataFlag flags) { LassoProvider *provider = NULL; gboolean check_signature = flags & LASSO_SERVER_LOAD_METADATA_FLAG_CHECK_ENTITY_DESCRIPTOR_SIGNATURE; if (role == LASSO_PROVIDER_ROLE_IDP && ! _lasso_test_idp_descriptor(entity)) { return 0; } if (role == LASSO_PROVIDER_ROLE_SP && ! _lasso_test_sp_descriptor(entity)) { return 0; } if (keys_mngr && check_signature) { lasso_error_t result; result = lasso_verify_signature(entity, doc, "ID", keys_mngr, NULL, EMPTY_URI, NULL); if (result != 0) { debug_report_signature_error(entity, result); return result; } } provider = lasso_provider_new_from_xmlnode(role, entity); if (provider) { char *name = provider->ProviderID; if (g_list_find_custom(blacklisted_entity_ids, name, (GCompareFunc) g_strcmp0)) { lasso_release_gobject(provider); return LASSO_SERVER_ERROR_NO_PROVIDER_LOADED; } if (loaded_end) { *loaded_end = g_list_prepend(*loaded_end, g_strdup(name)); } g_hash_table_insert(server->providers, g_strdup(name), provider); return 0; } else { return LASSO_SERVER_ERROR_NO_PROVIDER_LOADED; } } static lasso_error_t lasso_saml20_server_load_metadata_child(LassoServer *server, LassoProviderRole role, xmlDoc *doc, xmlNode *child, GList *blacklisted_entity_ids, GList **loaded_end, xmlSecKeysMngr *keys_mngr, LassoServerLoadMetadataFlag flags); static lasso_error_t lasso_saml20_server_load_metadata_entities(LassoServer *server, LassoProviderRole role, xmlDoc *doc, xmlNode *entities, GList *blacklisted_entity_ids, GList **loaded_end, xmlSecKeysMngr *keys_mngr, LassoServerLoadMetadataFlag flags) { xmlNode *child; gboolean at_least_one = FALSE; gboolean check_signature = flags & LASSO_SERVER_LOAD_METADATA_FLAG_CHECK_ENTITIES_DESCRIPTOR_SIGNATURE; gboolean inherit_signature = flags & LASSO_SERVER_LOAD_METADATA_FLAG_INHERIT_SIGNATURE; /* if a key store is passed, check signature */ if (keys_mngr && check_signature) { lasso_error_t result; result = lasso_verify_signature(entities, doc, "ID", keys_mngr, NULL, EMPTY_URI, NULL); if (result == 0) { if (inherit_signature) { keys_mngr = NULL; } } else { debug_report_signature_error(entities, result); return result; } } child = xmlSecGetNextElementNode(entities->children); while (child) { lasso_error_t rc = 0; rc = lasso_saml20_server_load_metadata_child(server, role, doc, child, blacklisted_entity_ids, loaded_end, keys_mngr, flags); if (rc == 0) { at_least_one = TRUE; } child = xmlSecGetNextElementNode(child->next); } return at_least_one ? 0 : LASSO_SERVER_ERROR_NO_PROVIDER_LOADED; } static lasso_error_t lasso_saml20_server_load_metadata_child(LassoServer *server, LassoProviderRole role, xmlDoc *doc, xmlNode *child, GList *blacklisted_entity_ids, GList **loaded_end, xmlSecKeysMngr *keys_mngr, LassoServerLoadMetadataFlag flags) { if (xmlSecCheckNodeName(child, BAD_CAST LASSO_SAML2_METADATA_ELEMENT_ENTITY_DESCRIPTOR, BAD_CAST LASSO_SAML2_METADATA_HREF)) { return lasso_saml20_server_load_metadata_entity(server, role, doc, child, blacklisted_entity_ids, loaded_end, keys_mngr, flags); } else if (xmlSecCheckNodeName(child, BAD_CAST LASSO_SAML2_METADATA_ELEMENT_ENTITIES_DESCRIPTOR, BAD_CAST LASSO_SAML2_METADATA_HREF)) { return lasso_saml20_server_load_metadata_entities(server, role, doc, child, blacklisted_entity_ids, loaded_end, keys_mngr, flags); } return LASSO_SERVER_ERROR_INVALID_XML; } /** * lasso_saml20_server_load_metadata: * @server: a #LassoServer object * @role: the role of providers to load * @root_node: the root node a SAML 2.0 metadata file * @blacklisted_entity_ids: a list of entity IDs of provider to skip * @loaded_entity_ids: an out parameter to return the list of the loaded providers entity IDs * * Load the SAML 2.0 providers present in the given metadata as pointed to by the @root_node * parameter. If at least one provider is loaded the call is deemed successful. * * Return value: 0 if at least one provider has been loaded, LASSO_SERVER_ERROR_NO_PROVIDER_LOADED * otherwise. */ lasso_error_t lasso_saml20_server_load_metadata(LassoServer *server, LassoProviderRole role, xmlDoc *doc, xmlNode *root_node, GList *blacklisted_entity_ids, GList **loaded_entity_ids, xmlSecKeysMngr *keys_mngr, LassoServerLoadMetadataFlag flags) { lasso_error_t rc = 0; GList *loaded = NULL; GList **loaded_end = NULL; if (loaded_entity_ids) { loaded_end = &loaded; } rc = lasso_saml20_server_load_metadata_child(server, role, doc, root_node, blacklisted_entity_ids, loaded_end, keys_mngr, flags); if (loaded_entity_ids) { loaded = g_list_reverse(loaded); lasso_release_list_of_strings(*loaded_entity_ids); *loaded_entity_ids = loaded; } return rc; } lasso-2.8.2/lasso/saml-2.0/PaxHeaders/providerprivate.h0000644000000000000000000000013214114336625017677 xustar0030 mtime=1630649749.818436908 30 atime=1678814151.012993868 30 ctime=1678814321.105953856 lasso-2.8.2/lasso/saml-2.0/providerprivate.h0000644000175000017500000000506614114336625023156 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAML20_PROVIDER_PRIVATE_H__ #define __LASSO_SAML20_PROVIDER_PRIVATE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "../xml/xml.h" #include "../id-ff/provider.h" gboolean lasso_saml20_provider_load_metadata(LassoProvider *provider, xmlNode *root_node); LassoHttpMethod lasso_saml20_provider_get_first_http_method(LassoProvider *provider, LassoProvider *remote_provider, LassoMdProtocolType protocol_type); gboolean lasso_saml20_provider_accept_http_method(LassoProvider *provider, LassoProvider *remote_provider, LassoMdProtocolType protocol_type, LassoHttpMethod http_method, gboolean initiate_profile); char* lasso_saml20_provider_build_artifact(LassoProvider *provider); gchar* lasso_saml20_provider_get_assertion_consumer_service_url(LassoProvider *provider, int service_id); gchar* lasso_saml20_provider_get_assertion_consumer_service_binding(LassoProvider *provider, int service_id); gchar* lasso_saml20_provider_get_assertion_consumer_service_url_by_binding(LassoProvider *provider, const gchar *binding); gboolean lasso_saml20_provider_check_assertion_consumer_service_url(LassoProvider *provider, const gchar *url, const gchar *binding); const gchar* lasso_saml20_provider_get_assertion_consumer_service_binding_by_url( LassoProvider *provider, const char *url); lasso_error_t lasso_saml20_provider_get_artifact_resolution_service_index(LassoProvider *provider, unsigned short *index); const gchar* lasso_saml20_provider_get_endpoint_url(LassoProvider *provider, LassoProviderRole role, const char *kind, GSList *bindings, gboolean is_response, gboolean is_default, int idx); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAML20_PROVIDER_PRIVATE_H__ */ lasso-2.8.2/lasso/saml-2.0/PaxHeaders/name_id_management.c0000644000000000000000000000013114115351423020226 xustar0030 mtime=1630917395.111573704 30 atime=1678814238.437485049 29 ctime=1678814321.09795381 lasso-2.8.2/lasso/saml-2.0/name_id_management.c0000644000175000017500000004310114115351423023476 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../xml/private.h" #include "name_id_management.h" #include "providerprivate.h" #include "profileprivate.h" #include "serverprivate.h" #include "../id-ff/providerprivate.h" #include "../id-ff/profileprivate.h" #include "../id-ff/identityprivate.h" #include "../id-ff/serverprivate.h" #include "../xml/xml_enc.h" #include "../utils.h" #include "../xml/saml-2.0/samlp2_manage_name_id_request.h" #include "../xml/misc_text_node.h" /** * SECTION:name_id_management * @short_description: Name Id Management Profile (SAMLv2) * **/ /*****************************************************************************/ /* public methods */ /*****************************************************************************/ /** * lasso_name_id_management_init_request: * @name_id_management: a #LassoNameIdManagement * @remote_provider_id: the providerID of the remote provider. * @new_name_id: the new NameId or NULL to terminate a federation * @http_method: if set, then it get the protocol profile in metadata * corresponding of this HTTP request method. * * Initializes a new Name Id Management Request. If @new_name_id is NULL, it is a Termination * request, if not and we are an IdP is a NameID change request, if we are a SP, it is a request to * add a SP provided Id to the NameID of the IdP. It can be useful if the SP do not want to store * the federation, instead he can export its own identifiers to the IdP. * * Return value: 0 on success; or a negative value otherwise. **/ gint lasso_name_id_management_init_request(LassoNameIdManagement *name_id_management, char *remote_provider_id, char *new_name_id, LassoHttpMethod http_method) { LassoProfile *profile = NULL; LassoProvider *remote_provider; LassoSamlp2ManageNameIDRequest *manage_name_id_request = NULL; LassoSamlp2RequestAbstract *request = NULL; gboolean do_encrypt = FALSE; int rc = 0; lasso_bad_param(NAME_ID_MANAGEMENT, name_id_management); profile = LASSO_PROFILE(name_id_management); remote_provider = lasso_server_get_provider(profile->server, remote_provider_id); if (! LASSO_IS_PROVIDER(remote_provider)) { return LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND; } request = (LassoSamlp2RequestAbstract*)lasso_samlp2_manage_name_id_request_new(); manage_name_id_request = LASSO_SAMLP2_MANAGE_NAME_ID_REQUEST(request); lasso_check_good_rc(lasso_saml20_profile_init_request(profile, remote_provider_id, TRUE, request, http_method, LASSO_MD_PROTOCOL_TYPE_MANAGE_NAME_ID)); lasso_assign_gobject(manage_name_id_request->NameID, (LassoSaml2NameID*)profile->nameIdentifier); do_encrypt = (lasso_provider_get_encryption_mode(remote_provider) == LASSO_ENCRYPTION_MODE_NAMEID); if (do_encrypt) { /* Encrypt old nameid */ lasso_check_good_rc(lasso_saml20_profile_setup_encrypted_node(remote_provider, (LassoNode**)&manage_name_id_request->NameID, (LassoNode**)&manage_name_id_request->EncryptedID)); } if (new_name_id) { if (do_encrypt) { LassoMiscTextNode *text_node; text_node = (LassoMiscTextNode*)lasso_misc_text_node_new_with_string(new_name_id); text_node->name = "NewEncryptedID"; text_node->ns_href = LASSO_SAML2_PROTOCOL_HREF; text_node->ns_prefix = LASSO_SAML2_PROTOCOL_PREFIX; lasso_check_good_rc(lasso_saml20_profile_setup_encrypted_node(remote_provider, (LassoNode**)&text_node, (LassoNode**)&manage_name_id_request->NewEncryptedID)); lasso_release_string(manage_name_id_request->NewID); } else { lasso_assign_string(manage_name_id_request->NewID, new_name_id); } } else { lasso_assign_new_gobject(manage_name_id_request->Terminate, LASSO_SAMLP2_TERMINATE(lasso_samlp2_terminate_new())); /* if we are the IdP we can apply termination immediately. */ if (profile->server->parent.role & LASSO_PROVIDER_ROLE_IDP) { lasso_identity_remove_federation(profile->identity, profile->remote_providerID); } } cleanup: lasso_release_gobject(request); return rc; } /** * lasso_name_id_management_build_request_msg: * @name_id_management: a #LassoNameIdManagement * * Builds the Name Id Management request message. * * Return value: 0 on success; or a negative value otherwise. **/ gint lasso_name_id_management_build_request_msg(LassoNameIdManagement *name_id_management) { lasso_bad_param(NAME_ID_MANAGEMENT, name_id_management); return lasso_saml20_profile_build_request_msg(&name_id_management->parent, "ManageNameIDService", name_id_management->parent.http_request_method, NULL); } /** * lasso_name_id_management_process_request_msg: * @name_id_management: a #LassoNameIdManagement * @request_msg: the Name Id Management request message * * Processes a Name Id Management request message. Rebuilds a request object * from the message and check its signature. * * Return value: 0 on success; or a negative value otherwise. **/ gint lasso_name_id_management_process_request_msg(LassoNameIdManagement *name_id_management, char *request_msg) { LassoProfile *profile = NULL; LassoSamlp2ManageNameIDRequest *request = NULL; int rc = 0; lasso_bad_param(NAME_ID_MANAGEMENT, name_id_management); lasso_null_param(request_msg); profile = LASSO_PROFILE(name_id_management); request = (LassoSamlp2ManageNameIDRequest*)lasso_samlp2_manage_name_id_request_new(); lasso_check_good_rc(lasso_saml20_profile_process_any_request(profile, (LassoNode*)request, request_msg)); lasso_check_good_rc(lasso_saml20_profile_process_name_identifier_decryption(profile, &request->NameID, &request->EncryptedID)); lasso_check_good_rc(lasso_saml20_profile_check_signature_status(profile)); cleanup: lasso_release_gobject(request); return rc; } /** * lasso_name_id_management_validate_request: * @name_id_management: a #LassoNameIdManagement * * Processes a Name Id Management request, performing requested actions against * principal federations. Profile identity may have to be saved afterwards. * * Return value: 0 on success; or a negative value otherwise. **/ int lasso_name_id_management_validate_request(LassoNameIdManagement *name_id_management) { LassoProfile *profile = NULL; LassoProvider *remote_provider = NULL; LassoSamlp2StatusResponse *response = NULL; LassoSaml2NameID *name_id = NULL; LassoFederation *federation = NULL; int rc = 0; lasso_bad_param(NAME_ID_MANAGEMENT, name_id_management); profile = LASSO_PROFILE(name_id_management); response = (LassoSamlp2StatusResponse*)lasso_samlp2_manage_name_id_response_new(); rc = lasso_saml20_profile_validate_request(profile, TRUE, response, &remote_provider); if (rc) goto cleanup; /* Get the federation */ federation = lasso_identity_get_federation(profile->identity, remote_provider->ProviderID); if (LASSO_IS_FEDERATION(federation) == FALSE) { rc = critical_error(LASSO_PROFILE_ERROR_FEDERATION_NOT_FOUND); goto cleanup; } /* Get the name identifier */ name_id = LASSO_SAMLP2_MANAGE_NAME_ID_REQUEST(profile->request)->NameID; if (! LASSO_IS_SAML2_NAME_ID(name_id)) { message(G_LOG_LEVEL_CRITICAL, "Name identifier not found in name id management request"); lasso_saml20_profile_set_response_status_requester( profile, "MissingNameID"); rc = LASSO_PROFILE_ERROR_NAME_IDENTIFIER_NOT_FOUND; goto cleanup; } /* Check it matches */ if (! lasso_federation_verify_name_identifier(federation, (LassoNode*)name_id)) { lasso_saml20_profile_set_response_status_responder( profile, LASSO_SAML2_STATUS_CODE_UNKNOWN_PRINCIPAL); rc = LASSO_PROFILE_ERROR_FEDERATION_NOT_FOUND; goto cleanup; } /* Ok it matches, now apply modifications */ if (LASSO_SAMLP2_MANAGE_NAME_ID_REQUEST(profile->request)->Terminate) { /* defederation */ lasso_identity_remove_federation(profile->identity, remote_provider->ProviderID); } else { /* name registration */ LassoSaml2NameID *new_name_id; new_name_id = LASSO_SAML2_NAME_ID(lasso_saml2_name_id_new()); new_name_id->Format = g_strdup(name_id->Format); new_name_id->NameQualifier = g_strdup(name_id->NameQualifier); new_name_id->SPNameQualifier = g_strdup(name_id->SPNameQualifier); if (remote_provider->role == LASSO_PROVIDER_ROLE_SP) { /* if the requester is the service provider, the new * identifier MUST appear in subsequent * elements in the SPProvidedID attribute * -- saml-core-2.0-os.pdf, page 58 */ new_name_id->SPProvidedID = g_strdup( LASSO_SAMLP2_MANAGE_NAME_ID_REQUEST(profile->request)->NewID); new_name_id->content = g_strdup(name_id->content); } else { /* If the requester is the identity provider, the new * value will appear in subsequent elements as * the element's content. * -- saml-core-2.0-os.pdf, page 58 */ new_name_id->content = g_strdup( LASSO_SAMLP2_MANAGE_NAME_ID_REQUEST(profile->request)->NewID); } /* Get federation */ lasso_assign_gobject(federation->local_nameIdentifier, new_name_id); /* Set identity is_dirty */ lasso_identity_add_federation(profile->identity, federation); } cleanup: lasso_release_gobject(response); return rc; } /** * lasso_name_id_management_build_response_msg: * @name_id_management: a #LassoNameIdManagement * * Builds the Name Id Management response message. * * Return value: 0 on success; or a negative value otherwise. **/ int lasso_name_id_management_build_response_msg(LassoNameIdManagement *name_id_management) { LassoProfile *profile = NULL; LassoSamlp2StatusResponse *response; int rc = 0; lasso_bad_param(NAME_ID_MANAGEMENT, name_id_management); profile = &name_id_management->parent; /* no response set here means request denied */ if (! LASSO_IS_SAMLP2_STATUS_RESPONSE(profile->response)) { response = (LassoSamlp2StatusResponse*)lasso_samlp2_manage_name_id_response_new(); if (lasso_saml20_profile_check_signature_status(profile)) { lasso_check_good_rc(lasso_saml20_profile_init_response(profile, response, LASSO_SAML2_STATUS_CODE_REQUESTER, LASSO_LIB_STATUS_CODE_INVALID_SIGNATURE)); } else { lasso_check_good_rc(lasso_saml20_profile_init_response(profile, response, LASSO_SAML2_STATUS_CODE_RESPONDER, LASSO_SAML2_STATUS_CODE_REQUEST_DENIED)); } lasso_release_gobject(response); } /* use the same binding as for the request */ rc = lasso_saml20_profile_build_response_msg(profile, "ManageNameIDService", profile->http_request_method, NULL); cleanup: return rc; } /** * lasso_name_id_management_process_response_msg: * @name_id_management: a #LassoNameIdManagement * @response_msg: the response message * * Parses the response message and builds the corresponding response object. * Performs requested actions against principal federations. Profile identity * may have to be saved afterwards. * * Return value: 0 on success; or a negative value otherwise. **/ gint lasso_name_id_management_process_response_msg( LassoNameIdManagement *name_id_management, gchar *response_msg) { LassoProfile *profile = NULL; LassoSamlp2StatusResponse *response = NULL; int rc = 0; lasso_bad_param(NAME_ID_MANAGEMENT, name_id_management); lasso_null_param(response_msg); profile = &name_id_management->parent; response = (LassoSamlp2StatusResponse*)lasso_samlp2_manage_name_id_response_new(); lasso_check_good_rc(lasso_saml20_profile_process_any_response(profile, response, NULL, response_msg)); /* Stop here if signature validation failed. */ lasso_check_good_rc(lasso_saml20_profile_check_signature_status(profile)); if (LASSO_SAMLP2_MANAGE_NAME_ID_REQUEST(profile->request)->Terminate) { lasso_identity_remove_federation(profile->identity, profile->remote_providerID); } else { LassoSaml2NameID *new_name_id, *name_id; LassoFederation *federation; name_id = LASSO_SAMLP2_MANAGE_NAME_ID_REQUEST(profile->request)->NameID; new_name_id = LASSO_SAML2_NAME_ID(lasso_saml2_name_id_new()); new_name_id->Format = g_strdup(name_id->Format); new_name_id->NameQualifier = g_strdup(name_id->NameQualifier); new_name_id->SPNameQualifier = g_strdup(name_id->SPNameQualifier); if (LASSO_PROVIDER(profile->server)->role == LASSO_PROVIDER_ROLE_SP) { /* if the requester is the service provider, the new * identifier MUST appear in subsequent * elements in the SPProvidedID attribute * -- saml-core-2.0-os.pdf, page 58 */ new_name_id->SPProvidedID = g_strdup( LASSO_SAMLP2_MANAGE_NAME_ID_REQUEST(profile->request)->NewID); new_name_id->content = g_strdup(name_id->content); } else { /* If the requester is the identity provider, the new * value will appear in subsequent elements as * the element's content. * -- saml-core-2.0-os.pdf, page 58 */ new_name_id->content = g_strdup( LASSO_SAMLP2_MANAGE_NAME_ID_REQUEST(profile->request)->NewID); } /* Get federation */ federation = g_hash_table_lookup(profile->identity->federations, profile->remote_providerID); if (LASSO_IS_FEDERATION(federation) == FALSE) { return critical_error(LASSO_PROFILE_ERROR_FEDERATION_NOT_FOUND); } if (federation->local_nameIdentifier) lasso_node_destroy(LASSO_NODE(federation->local_nameIdentifier)); federation->local_nameIdentifier = LASSO_NODE(g_object_ref(new_name_id)); profile->identity->is_dirty = TRUE; } cleanup: lasso_release_gobject(response); return rc; } /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; static xmlNode* get_xmlNode(LassoNode *node, gboolean lasso_dump) { xmlNode *xmlnode; xmlnode = parent_class->get_xmlNode(node, lasso_dump); xmlNodeSetName(xmlnode, (xmlChar*)"NameIdManagement"); xmlSetProp(xmlnode, (xmlChar*)"NameIdManagementDumpVersion", (xmlChar*)"1"); return xmlnode; } /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoNameIdManagementClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->get_xmlNode = get_xmlNode; nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "NameIdManagement"); lasso_node_class_set_ns(nclass, LASSO_LASSO_HREF, LASSO_LASSO_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_name_id_management_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoNameIdManagementClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoNameIdManagement), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_PROFILE, "LassoNameIdManagement", &this_info, 0); } return this_type; } /** * lasso_name_id_management_new: * @server: the #LassoServer * * Creates a new #LassoNameIdManagement. * * Return value: a newly created #LassoNameIdManagement object; or NULL if an error * occured **/ LassoNameIdManagement* lasso_name_id_management_new(LassoServer *server) { LassoNameIdManagement *name_id_management; g_return_val_if_fail(LASSO_IS_SERVER(server), NULL); name_id_management = g_object_new(LASSO_TYPE_NAME_ID_MANAGEMENT, NULL); /* fresh object dont need to check previous value */ LASSO_PROFILE(name_id_management)->server = g_object_ref(server); return name_id_management; } /** * lasso_name_id_management_destroy: * @name_id_management: a #LassoNameIdManagement * * Destroys a #LassoNameIdManagement object. **/ void lasso_name_id_management_destroy(LassoNameIdManagement *name_id_management) { lasso_node_destroy(LASSO_NODE(name_id_management)); } /** * lasso_name_id_management_new_from_dump: * @server: the #LassoServer * @dump: XML name_id_management dump * * Restores the @dump to a new #LassoLogout. * * Return value: a newly created #LassoLogout; or NULL if an error occured **/ LassoNameIdManagement* lasso_name_id_management_new_from_dump(LassoServer *server, const char *dump) { LassoNameIdManagement *name_id_management; name_id_management = (LassoNameIdManagement*)lasso_node_new_from_dump(dump); if (LASSO_IS_NAME_ID_MANAGEMENT(name_id_management)) { lasso_assign_gobject(name_id_management->parent.server, server); } else { lasso_release_gobject(name_id_management); } return name_id_management; } /** * lasso_name_id_management_dump: * @name_id_management: a #LassoLogout * * Dumps @name_id_management content to an XML string. * * Return value:(transfer full): the dump string. It must be freed by the caller. **/ gchar* lasso_name_id_management_dump(LassoNameIdManagement *name_id_management) { return lasso_node_dump(LASSO_NODE(name_id_management)); } lasso-2.8.2/lasso/saml-2.0/PaxHeaders/assertion_query.c0000644000000000000000000000013214364261206017700 xustar0030 mtime=1674666630.746769119 30 atime=1678814229.829436464 30 ctime=1678814321.081953719 lasso-2.8.2/lasso/saml-2.0/assertion_query.c0000644000175000017500000004612114364261206023154 0ustar00bdauvergnebdauvergne00000000000000/* $Id: assertion_query.c 3237 2007-05-30 17:17:45Z dlaniel $ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../id-ff/session.h" #include "../xml/private.h" #include "assertion_query.h" #include "providerprivate.h" #include "profileprivate.h" #include "../id-ff/providerprivate.h" #include "../id-ff/profileprivate.h" #include "../id-ff/identityprivate.h" #include "../id-ff/serverprivate.h" #include "../xml/xml_enc.h" #include "../xml/saml-2.0/saml2_assertion.h" #include "../xml/saml-2.0/samlp2_assertion_id_request.h" #include "../xml/saml-2.0/samlp2_authn_query.h" #include "../xml/saml-2.0/samlp2_attribute_query.h" #include "../xml/saml-2.0/samlp2_authz_decision_query.h" #include "../xml/saml-2.0/samlp2_response.h" #include "../xml/saml-2.0/samlp2_subject_query_abstract.h" #include "../utils.h" struct _LassoAssertionQueryPrivate { LassoAssertionQueryRequestType query_request_type; }; LassoMdProtocolType _lasso_assertion_query_type_to_protocol_type(LassoAssertionQueryRequestType query_request_type) { LassoMdProtocolType types[4] = { LASSO_MD_PROTOCOL_TYPE_ASSERTION_ID_REQUEST, LASSO_MD_PROTOCOL_TYPE_AUTHN_QUERY, LASSO_MD_PROTOCOL_TYPE_ATTRIBUTE, LASSO_MD_PROTOCOL_TYPE_AUTHZ, }; if (query_request_type < LASSO_ASSERTION_QUERY_REQUEST_TYPE_ASSERTION_ID || query_request_type > LASSO_ASSERTION_QUERY_REQUEST_TYPE_AUTHZ_DECISION) { return -1; } return types[query_request_type - LASSO_ASSERTION_QUERY_REQUEST_TYPE_ASSERTION_ID]; } /*****************************************************************************/ /* public methods */ /*****************************************************************************/ /** * lasso_assertion_query_init_request: * @assertion_query: a #LassoAssertionQuery * @remote_provider_id: (allow-none): the providerID of the remote provider. * @http_method: if set, then it get the protocol profile in metadata * corresponding of this HTTP request method. * @query_request_type: the type of request. * * Initializes a new Assertion Query Request. * For the AssertionID request type, the remote_provider_id is mandatory, for all other kind of * request it is optional if we can find a provider supporting the associated role, i.e. * IDP; authentication, attribute and authorization authority. * * Return value: 0 on success; or a negative value otherwise. **/ gint lasso_assertion_query_init_request(LassoAssertionQuery *assertion_query, char *remote_provider_id, LassoHttpMethod http_method, LassoAssertionQueryRequestType query_request_type) { LassoProfile *profile; LassoNode *request; gint rc = 0; g_return_val_if_fail(http_method == LASSO_HTTP_METHOD_ANY || http_method == LASSO_HTTP_METHOD_SOAP, LASSO_PARAM_ERROR_INVALID_VALUE); g_return_val_if_fail(LASSO_IS_ASSERTION_QUERY(assertion_query), LASSO_PARAM_ERROR_INVALID_VALUE); profile = LASSO_PROFILE(assertion_query); /* set the remote provider id */ profile->remote_providerID = NULL; if (remote_provider_id) { profile->remote_providerID = g_strdup(remote_provider_id); } else { LassoProviderRole role = LASSO_PROVIDER_ROLE_NONE; switch (query_request_type) { case LASSO_ASSERTION_QUERY_REQUEST_TYPE_AUTHN: role = LASSO_PROVIDER_ROLE_AUTHN_AUTHORITY; break; case LASSO_ASSERTION_QUERY_REQUEST_TYPE_ATTRIBUTE: role = LASSO_PROVIDER_ROLE_ATTRIBUTE_AUTHORITY; break; case LASSO_ASSERTION_QUERY_REQUEST_TYPE_AUTHZ_DECISION: role = LASSO_PROVIDER_ROLE_AUTHZ_AUTHORITY; break; /* other request types should not happen or should not go there */ default: return critical_error(LASSO_PARAM_ERROR_INVALID_VALUE); } profile->remote_providerID = lasso_server_get_first_providerID_by_role(profile->server, role); } g_return_val_if_fail(profile->remote_providerID != NULL, LASSO_PARAM_ERROR_INVALID_VALUE); assertion_query->private_data->query_request_type = query_request_type; switch (query_request_type) { case LASSO_ASSERTION_QUERY_REQUEST_TYPE_ASSERTION_ID: request = lasso_samlp2_assertion_id_request_new(); break; case LASSO_ASSERTION_QUERY_REQUEST_TYPE_AUTHN: request = lasso_samlp2_authn_query_new(); break; case LASSO_ASSERTION_QUERY_REQUEST_TYPE_ATTRIBUTE: request = lasso_samlp2_attribute_query_new(); break; case LASSO_ASSERTION_QUERY_REQUEST_TYPE_AUTHZ_DECISION: request = lasso_samlp2_authz_decision_query_new(); break; default: return critical_error(LASSO_PARAM_ERROR_INVALID_VALUE); } /* Setup usual request attributes */ if (LASSO_IS_SAMLP2_SUBJECT_QUERY_ABSTRACT(request)) { LassoSamlp2SubjectQueryAbstract *sqa; sqa = (LassoSamlp2SubjectQueryAbstract*)request; sqa->Subject = (LassoSaml2Subject*)lasso_saml2_subject_new(); } lasso_check_good_rc(lasso_saml20_profile_init_request(profile, profile->remote_providerID, TRUE, (LassoSamlp2RequestAbstract*)request, http_method, _lasso_assertion_query_type_to_protocol_type(query_request_type))); cleanup: lasso_release_gobject(request); return rc; } /** * lasso_assertion_query_build_request_msg: * @assertion_query: a #LassoAssertionQuery * * Build an Assertion Query profile request message. * * Return value: 0 on success; or a negative value otherwise. **/ gint lasso_assertion_query_build_request_msg(LassoAssertionQuery *assertion_query) { LassoProfile *profile; LassoProvider *remote_provider; gint rc = 0; g_return_val_if_fail(LASSO_IS_ASSERTION_QUERY(assertion_query), LASSO_PARAM_ERROR_INVALID_VALUE); profile = LASSO_PROFILE(assertion_query); lasso_profile_clean_msg_info(profile); remote_provider = lasso_server_get_provider(profile->server, profile->remote_providerID); if (LASSO_IS_PROVIDER(remote_provider) == FALSE) { return critical_error(LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND); } /* fill and encrypt if necessary */ if (LASSO_IS_SAMLP2_SUBJECT_QUERY_ABSTRACT(profile->request)) do { LassoSaml2NameID *nameID = NULL; LassoSamlp2SubjectQueryAbstract *subject_query; subject_query = (LassoSamlp2SubjectQueryAbstract*)profile->request; if (! LASSO_IS_SAML2_SUBJECT(subject_query->Subject)) { lasso_assign_new_gobject(subject_query->Subject, lasso_saml2_subject_new()); } /* verify that there is a NameID */ if ( (! LASSO_IS_SAML2_NAME_ID(subject_query->Subject->NameID) && ! LASSO_IS_SAML2_ENCRYPTED_ELEMENT(subject_query->Subject->EncryptedID))) { /* if not try to get the local profile one */ nameID = (LassoSaml2NameID*)profile->nameIdentifier; if (! LASSO_IS_SAML2_NAME_ID(nameID)) nameID = (LassoSaml2NameID*)lasso_profile_get_nameIdentifier(profile); /* if none found, try to get the identity object or session object one */ if (! LASSO_IS_SAML2_NAME_ID(nameID)) return LASSO_PROFILE_ERROR_MISSING_NAME_IDENTIFIER; lasso_assign_gobject(subject_query->Subject->NameID, nameID); } lasso_check_good_rc(lasso_saml20_profile_setup_subject(profile, subject_query->Subject)); } while(FALSE); if (profile->http_request_method == LASSO_HTTP_METHOD_SOAP) { LassoAssertionQueryRequestType type; const char *url; /* XXX: support only SOAP */ static const gchar *servicepoints[LASSO_ASSERTION_QUERY_REQUEST_TYPE_LAST] = { NULL, NULL, "AuthnQueryService SOAP", "AttributeService SOAP", "AuthzService SOAP", }; static const LassoProviderRole roles[LASSO_ASSERTION_QUERY_REQUEST_TYPE_LAST] = { LASSO_PROVIDER_ROLE_NONE, LASSO_PROVIDER_ROLE_NONE, LASSO_PROVIDER_ROLE_AUTHN_AUTHORITY, LASSO_PROVIDER_ROLE_ATTRIBUTE_AUTHORITY, LASSO_PROVIDER_ROLE_AUTHZ_AUTHORITY, }; type = assertion_query->private_data->query_request_type; if (type == LASSO_ASSERTION_QUERY_REQUEST_TYPE_ASSERTION_ID) { return LASSO_ERROR_UNDEFINED; } if (type < LASSO_ASSERTION_QUERY_REQUEST_TYPE_ASSERTION_ID || type > LASSO_ASSERTION_QUERY_REQUEST_TYPE_AUTHZ_DECISION) { return LASSO_PARAM_ERROR_INVALID_VALUE; } url = lasso_provider_get_metadata_one_for_role(remote_provider, roles[type], servicepoints[type]); return lasso_saml20_profile_build_request_msg(&assertion_query->parent, NULL, LASSO_HTTP_METHOD_SOAP, url); } cleanup: return rc; } /** * lasso_assertion_query_process_request_msg: * @assertion_query: a #LassoAssertionQuery * @request_msg: the Assertion query or request message * * Processes a Assertion query or request message. Rebuilds a request object * from the message and check its signature. * * Return value: 0 on success; or a negative value otherwise. **/ gint lasso_assertion_query_process_request_msg(LassoAssertionQuery *assertion_query, char *request_msg) { LassoProfile *profile = NULL; LassoSamlp2SubjectQueryAbstract *subject_query = NULL; LassoSaml2Subject *subject = NULL; int rc = 0; g_return_val_if_fail(LASSO_IS_ASSERTION_QUERY(assertion_query), LASSO_PARAM_ERROR_INVALID_VALUE); profile = LASSO_PROFILE(assertion_query); lasso_check_good_rc(lasso_saml20_profile_process_soap_request(profile, request_msg)); lasso_extract_node_or_fail(subject_query, profile->request, SAMLP2_SUBJECT_QUERY_ABSTRACT, LASSO_PROFILE_ERROR_INVALID_MSG); lasso_extract_node_or_fail(subject, subject_query->Subject, SAML2_SUBJECT, LASSO_PROFILE_ERROR_MISSING_SUBJECT); lasso_check_good_rc(lasso_saml20_profile_process_name_identifier_decryption(profile, &subject->NameID, &subject->EncryptedID)); cleanup: return rc; } /** * lasso_assertion_query_validate_request: * @assertion_query: a #LassoAssertionQuery * * Processes a Assertion query or request; caller must add assertions to the * response afterwards. * * Return value: 0 on success; or a negative value otherwise. **/ int lasso_assertion_query_validate_request(LassoAssertionQuery *assertion_query) { LassoProfile *profile; LassoProvider *remote_provider; LassoSamlp2StatusResponse *response; int rc = 0; g_return_val_if_fail(LASSO_IS_ASSERTION_QUERY(assertion_query), LASSO_PARAM_ERROR_INVALID_VALUE); profile = LASSO_PROFILE(assertion_query); response = (LassoSamlp2StatusResponse*) lasso_samlp2_response_new(); lasso_check_good_rc(lasso_saml20_profile_validate_request(profile, FALSE, response, &remote_provider)); cleanup: lasso_release_gobject(response); return rc; } /** * lasso_assertion_query_build_response_msg: * @assertion_query: a #LassoAssertionQuery * * Builds the Response message. * * Return value: 0 on success; or a negative value otherwise. **/ int lasso_assertion_query_build_response_msg(LassoAssertionQuery *assertion_query) { LassoProfile *profile; LassoSamlp2StatusResponse *response; int rc = 0; g_return_val_if_fail(LASSO_IS_ASSERTION_QUERY(assertion_query), LASSO_PARAM_ERROR_INVALID_VALUE); profile = LASSO_PROFILE(assertion_query); lasso_profile_clean_msg_info(profile); if (profile->response == NULL) { /* no response set here means request denied */ response = (LassoSamlp2StatusResponse*) lasso_samlp2_response_new(); lasso_check_good_rc(lasso_saml20_profile_init_response( profile, response, LASSO_SAML2_STATUS_CODE_RESPONDER, LASSO_SAML2_STATUS_CODE_REQUEST_DENIED)); return 0; } /* build logout response message */ rc = lasso_saml20_profile_build_response_msg(profile, NULL, profile->http_request_method, NULL); cleanup: return rc; } /** * lasso_assertion_query_process_response_msg: * @assertion_query: a #LassoAssertionQuery * @response_msg: the response message * * Parses the response message and builds the corresponding response object. * * Return value: 0 on success; or a negative value otherwise. **/ gint lasso_assertion_query_process_response_msg( LassoAssertionQuery *assertion_query, gchar *response_msg) { LassoProfile *profile = NULL; LassoSamlp2StatusResponse *response = NULL; int rc = 0; lasso_bad_param(ASSERTION_QUERY, assertion_query); profile = &assertion_query->parent; lasso_check_good_rc(lasso_saml20_profile_process_soap_response(profile, response_msg)); cleanup: lasso_release_gobject(response); return rc; } static LassoSaml2Attribute* lasso_assertion_query_lookup_attribute(LassoAssertionQuery *assertion_query, char *format, char *name) { LassoSaml2Attribute *result = NULL; LassoSamlp2AttributeQuery *query = NULL; g_return_val_if_fail(LASSO_IS_ASSERTION_QUERY(assertion_query) || ! format || ! name, NULL); query = (LassoSamlp2AttributeQuery*) assertion_query->parent.request; g_return_val_if_fail(LASSO_IS_SAMLP2_ATTRIBUTE_QUERY(query), NULL); lasso_foreach_full_begin(LassoSaml2Attribute*, attribute, it, query->Attribute) { if (LASSO_IS_SAML2_ATTRIBUTE(attribute) && lasso_strisequal(attribute->NameFormat,format) && lasso_strisequal(attribute->Name,name)) { result = attribute; break; } } lasso_foreach_full_end() return result; } /** * lasso_assertion_query_add_attribute_request: * @assertion_query: a #LassoAssertionQuery object * @attribute_format: the attribute designator format * @attribute_name: the attribute designator name * * Append a new attribute designator to the current attribute request. * * Return value: 0 if successful, an error code otherwise. */ int lasso_assertion_query_add_attribute_request(LassoAssertionQuery *assertion_query, char *format, char *name) { int rc = 0; LassoSaml2Attribute *attribute = NULL; LassoSamlp2AttributeQuery *query = NULL; lasso_bad_param(ASSERTION_QUERY, assertion_query); lasso_null_param(format); lasso_null_param(name); query = (LassoSamlp2AttributeQuery*) assertion_query->parent.request; g_return_val_if_fail(LASSO_IS_SAMLP2_ATTRIBUTE_QUERY(query), LASSO_ASSERTION_QUERY_ERROR_NOT_AN_ATTRIBUTE_QUERY); /* Check unicity */ attribute = lasso_assertion_query_lookup_attribute(assertion_query, format, name); if (attribute != NULL) { return LASSO_ASSERTION_QUERY_ERROR_ATTRIBUTE_REQUEST_ALREADY_EXIST; } /* Do the work */ attribute = (LassoSaml2Attribute*)lasso_saml2_attribute_new(); lasso_assign_string(attribute->NameFormat, format); lasso_assign_string(attribute->Name, name); lasso_list_add_new_gobject(query->Attribute, attribute); return rc; } /** * lasso_assertion_query_get_request_type: * @assertion_query: a #LassoAssertionQuery object * * Return the type of the last processed request. * * Return value: a #LassoAssertionQueryRequestType value */ LassoAssertionQueryRequestType lasso_assertion_query_get_request_type(LassoAssertionQuery *assertion_query) { LassoNode *request; GType type; g_return_val_if_fail(LASSO_IS_ASSERTION_QUERY(assertion_query), LASSO_ASSERTION_QUERY_REQUEST_TYPE_UNSET); request = assertion_query->parent.request; if (! G_IS_OBJECT(request)) return LASSO_ASSERTION_QUERY_REQUEST_TYPE_UNSET; type = G_OBJECT_TYPE(request); if (type == LASSO_TYPE_SAMLP2_ASSERTION_ID_REQUEST) return LASSO_ASSERTION_QUERY_REQUEST_TYPE_ASSERTION_ID; if (type == LASSO_TYPE_SAMLP2_AUTHN_QUERY) return LASSO_ASSERTION_QUERY_REQUEST_TYPE_AUTHN; if (type == LASSO_TYPE_SAMLP2_ATTRIBUTE_QUERY) return LASSO_ASSERTION_QUERY_REQUEST_TYPE_ATTRIBUTE; if (type == LASSO_TYPE_SAMLP2_AUTHZ_DECISION_QUERY) return LASSO_ASSERTION_QUERY_REQUEST_TYPE_AUTHZ_DECISION; return LASSO_ASSERTION_QUERY_REQUEST_TYPE_UNSET; } /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; static xmlNode* get_xmlNode(LassoNode *node, gboolean lasso_dump) { xmlNode *xmlnode; xmlnode = parent_class->get_xmlNode(node, lasso_dump); xmlNodeSetName(xmlnode, (xmlChar*)"AssertionQuery"); xmlSetProp(xmlnode, (xmlChar*)"AssertionQueryDumpVersion", (xmlChar*)"1"); return xmlnode; } static int init_from_xml(LassoNode *node, xmlNode *xmlnode) { return parent_class->init_from_xml(node, xmlnode); } /*****************************************************************************/ /* overridden parent class methods */ /*****************************************************************************/ static void finalize(GObject *object) { LassoAssertionQuery *profile = LASSO_ASSERTION_QUERY(object); lasso_release(profile->private_data); profile->private_data = NULL; G_OBJECT_CLASS(parent_class)->finalize(object); } /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void instance_init(LassoAssertionQuery *assertion_query, G_GNUC_UNUSED void *unused) { assertion_query->private_data = g_new0(LassoAssertionQueryPrivate, 1); } static void class_init(LassoAssertionQueryClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->get_xmlNode = get_xmlNode; nclass->init_from_xml = init_from_xml; nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "AssertionQuery"); lasso_node_class_set_ns(nclass, LASSO_LASSO_HREF, LASSO_LASSO_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); G_OBJECT_CLASS(klass)->finalize = finalize; } GType lasso_assertion_query_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoAssertionQueryClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoAssertionQuery), 0, (GInstanceInitFunc) instance_init, NULL }; this_type = g_type_register_static(LASSO_TYPE_PROFILE, "LassoAssertionQuery", &this_info, 0); } return this_type; } /** * lasso_assertion_query_new: * @server: the #LassoServer * * Creates a new #LassoAssertionQuery. * * Return value: a newly created #LassoAssertionQuery object; or NULL if * an error occured **/ LassoAssertionQuery* lasso_assertion_query_new(LassoServer *server) { LassoAssertionQuery *assertion_query; g_return_val_if_fail(LASSO_IS_SERVER(server), NULL); assertion_query = g_object_new(LASSO_TYPE_ASSERTION_QUERY, NULL); LASSO_PROFILE(assertion_query)->server = lasso_ref(server); return assertion_query; } /** * lasso_assertion_query_destroy: * @assertion_query: a #LassoAssertionQuery * * Destroys a #LassoAssertionQuery object. **/ void lasso_assertion_query_destroy(LassoAssertionQuery *assertion_query) { lasso_release_gobject(assertion_query); } lasso-2.8.2/lasso/saml-2.0/PaxHeaders/loginprivate.h0000644000000000000000000000013214114336625017155 xustar0030 mtime=1630649749.818436908 30 atime=1678814151.008993845 30 ctime=1678814321.109953878 lasso-2.8.2/lasso/saml-2.0/loginprivate.h0000644000175000017500000000532214114336625022427 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAML20_LOGIN_PRIVATE_H__ #define __LASSO_SAML20_LOGIN_PRIVATE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "../id-ff/login.h" gint lasso_saml20_login_init_authn_request(LassoLogin *login, LassoHttpMethod http_method); gint lasso_saml20_login_build_authn_request_msg(LassoLogin *login); gint lasso_saml20_login_build_authn_response_msg(LassoLogin *login); gint lasso_saml20_login_process_authn_request_msg(LassoLogin *login, const char *authn_request_msg); gboolean lasso_saml20_login_must_authenticate(LassoLogin *login); gboolean lasso_saml20_login_must_ask_for_consent(LassoLogin *login); int lasso_saml20_login_validate_request_msg(LassoLogin *login, gboolean authentication_result, gboolean is_consent_obtained); int lasso_saml20_login_build_assertion(LassoLogin *login, const char *authenticationMethod, const char *authenticationInstant, const char *notBefore, const char *notOnOrAfter); gint lasso_saml20_login_build_artifact_msg(LassoLogin *login, LassoHttpMethod http_method); gint lasso_saml20_login_init_request(LassoLogin *login, gchar *response_msg, LassoHttpMethod response_http_method); gint lasso_saml20_login_build_request_msg(LassoLogin *login); gint lasso_saml20_login_process_request_msg(LassoLogin *login, gchar *request_msg); gint lasso_saml20_login_build_response_msg(LassoLogin *login); gint lasso_saml20_login_process_response_msg(LassoLogin *login, gchar *response_msg); gint lasso_saml20_login_process_authn_response_msg(LassoLogin *login, gchar *authn_response_msg); gint lasso_saml20_login_accept_sso(LassoLogin *login); gint lasso_saml20_login_process_paos_response_msg(LassoLogin *login, gchar *paos_response_msg); gint lasso_saml20_login_init_idp_initiated_authn_request(LassoLogin *login, const gchar *remote_providerID); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAML20_LOGIN_PRIVATE_H__ */ lasso-2.8.2/lasso/saml-2.0/PaxHeaders/ecpprivate.h0000644000000000000000000000013214114336625016614 xustar0030 mtime=1630649749.818436908 30 atime=1678814151.008993845 30 ctime=1678814321.113953902 lasso-2.8.2/lasso/saml-2.0/ecpprivate.h0000644000175000017500000000217714114336625022073 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_ECP_PRIVATE_H__ #define __LASSO_ECP_PRIVATE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include struct _LassoEcpPrivate { gboolean dispose_has_run; }; #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_ECP_PRIVATE_H__ */ lasso-2.8.2/lasso/saml-2.0/PaxHeaders/saml2_helper.h0000644000000000000000000000013214114336625017027 xustar0030 mtime=1630649749.822436951 30 atime=1678814151.012993868 30 ctime=1678814321.077953697 lasso-2.8.2/lasso/saml-2.0/saml2_helper.h0000644000175000017500000001262014114336625022300 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAML20_SAML2_HELPER_H__ #define __LASSO_SAML20_SAML2_HELPER_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "../export.h" #include "../xml/saml-2.0/saml2_assertion.h" #include "../xml/saml-2.0/saml2_name_id.h" #include "../xml/saml-2.0/saml2_encrypted_element.h" #include "../id-ff/provider.h" #include "../id-ff/server.h" typedef enum { LASSO_SAML2_ASSERTION_VALID, LASSO_SAML2_ASSERTION_INVALID, LASSO_SAML2_ASSERTION_INDETERMINATE } LassoSaml2AssertionValidationState; /** * LASSO_DURATION_MINUTE: * * Number of seconds in a minute. */ #define LASSO_DURATION_MINUTE 60 /** * LASSO_DURATION_HOUR: * * Number of seconds in a hour. */ #define LASSO_DURATION_HOUR 3600 /** * LASSO_DURATION_DAY: * * Number of seconds in a day. */ #define LASSO_DURATION_DAY 24*LASSO_DURATION_HOUR /** * LASSO_DURATION_WEEK: * * Number of seconds in a week. */ #define LASSO_DURATION_WEEK 7*LASSO_DURATION_DAY LASSO_EXPORT gboolean lasso_saml2_assertion_has_audience_restriction( LassoSaml2Assertion *saml2_assertion); LASSO_EXPORT gboolean lasso_saml2_assertion_is_audience_restricted( LassoSaml2Assertion *saml2_assertion, char* providerID); LASSO_EXPORT LassoSaml2NameID* lasso_saml2_name_id_build_persistent(const char *id, const char *idpID, const char *providerID); LASSO_EXPORT LassoSaml2EncryptedElement* lasso_saml2_encrypted_element_build_encrypted_persistent_name_id(const char *id, const char *idpID, const LassoProvider *provider); LASSO_EXPORT void lasso_saml2_assertion_set_subject_name_id(LassoSaml2Assertion *saml2_assertion, LassoNode *node); LASSO_EXPORT void lasso_saml2_assertion_set_subject_confirmation_name_id( LassoSaml2Assertion *saml2_assertion, LassoNode *node); LASSO_EXPORT void lasso_saml2_assertion_set_subject_confirmation_data( LassoSaml2Assertion *saml2_assertion, time_t tolerance, time_t length, const char *Recipient, const char *InResponseTo, const char *Address); LASSO_EXPORT void lasso_saml2_assertion_set_basic_conditions(LassoSaml2Assertion *saml2_assertion, time_t tolerance, time_t length, gboolean one_time_use); LASSO_EXPORT void lasso_saml2_assertion_add_audience_restriction( LassoSaml2Assertion *saml2_assertion, const char *providerID); LASSO_EXPORT void lasso_saml2_assertion_add_proxy_limit (LassoSaml2Assertion *saml2_assertion, int proxy_count, GList *proxy_audiences); LASSO_EXPORT LassoSaml2AssertionValidationState lasso_saml2_assertion_validate_conditions( LassoSaml2Assertion *saml2_assertion, const char *relaying_party_providerID); LASSO_EXPORT LassoProvider* lasso_saml2_assertion_get_issuer_provider( const LassoSaml2Assertion *saml2_assertion, const LassoServer *server); LASSO_EXPORT lasso_error_t lasso_server_saml2_assertion_setup_signature(LassoServer *server, LassoSaml2Assertion *saml2_assertion); LASSO_EXPORT lasso_error_t lasso_saml2_assertion_add_attribute_with_node(LassoSaml2Assertion *assertion, const char *name, const char *nameformat, LassoNode *content); LASSO_EXPORT LassoSaml2SubjectConfirmationData* lasso_saml2_assertion_get_subject_confirmation_data(LassoSaml2Assertion *saml2_assertion, gboolean create); LASSO_EXPORT const char* lasso_saml2_assertion_get_in_response_to(LassoSaml2Assertion *assertion); LASSO_EXPORT lasso_error_t lasso_saml2_encrypted_element_server_decrypt( LassoSaml2EncryptedElement* encrypted_element, LassoServer *server, LassoNode** decrypted_node); LASSO_EXPORT lasso_error_t lasso_saml2_assertion_decrypt_subject(LassoSaml2Assertion *assertion, LassoServer *server); LASSO_EXPORT LassoSaml2AssertionValidationState lasso_saml2_assertion_validate_time_checks( LassoSaml2Assertion *saml2_assertion, unsigned int tolerance, time_t now); LASSO_EXPORT LassoSaml2AssertionValidationState lasso_saml2_assertion_validate_audience( LassoSaml2Assertion *saml2_assertion, const gchar *audience); LASSO_EXPORT gboolean lasso_saml2_assertion_has_one_time_use(LassoSaml2Assertion *saml2_assertion); LASSO_EXPORT LassoSaml2AssertionValidationState lasso_saml2_assertion_allows_proxying( LassoSaml2Assertion *saml2_assertion); LASSO_EXPORT LassoSaml2AssertionValidationState lasso_saml2_assertion_allows_proxying_to( LassoSaml2Assertion *saml2_assertion, const char *audience); LASSO_EXPORT void lasso_saml2_assertion_set_one_time_use(LassoSaml2Assertion *saml2_assertion, gboolean one_time_use); LASSO_EXPORT LassoSaml2NameID* lasso_saml2_name_id_new_with_persistent_format(const char *id, const char *idpID, const char *providerID); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAML20_SAML2_HELPER_H__ */ lasso-2.8.2/lasso/saml-2.0/PaxHeaders/provider.c0000644000000000000000000000013214117162531016273 xustar0030 mtime=1631380825.852638017 30 atime=1678814234.433462444 30 ctime=1678814321.093953788 lasso-2.8.2/lasso/saml-2.0/provider.c0000644000175000017500000006541214117162531021553 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include #include #include "../xml/private.h" #include #include #include "providerprivate.h" #include "../id-ff/server.h" #include "../id-ff/providerprivate.h" #include "../utils.h" #include "provider.h" #include "../xml/saml-2.0/saml2_attribute.h" #include "../xml/saml-2.0/saml2_xsd.h" enum HttpMethodKind { SYNC_NOT_APPLICABLE, SYNCHRONOUS, ASYNCHRONOUS }; const char *profile_names[LASSO_MD_PROTOCOL_TYPE_LAST] = { "", /* No fedterm in SAML 2.0 */ "NameIDMappingService", /*IDPSSODescriptor*/ "", /* No rni in SAML 2.0 */ "SingleLogoutService", /*SSODescriptor*/ "SingleSignOnService", /*IDPSSODescriptor*/ "ArtifactResolutionService", /*SSODescriptor*/ "ManageNameIDService", /*SSODescriptor*/ "AssertionIDRequestService", /* IDPSSODescriptor, AuthnAuhtorityDescriptor, PDPDescriptor, AttributeAuthorityDescriptor */ "AuthnQueryService", /*AuthnAuthorityDescriptor*/ "AuthzService", /*PDPDescriptor*/ "AttributeService" /*AttributeAuthorityDescriptor*/ }; static enum HttpMethodKind http_method_kind(LassoHttpMethod method) { switch (method) { case LASSO_HTTP_METHOD_SOAP: return ASYNCHRONOUS; case LASSO_HTTP_METHOD_GET: case LASSO_HTTP_METHOD_POST: case LASSO_HTTP_METHOD_REDIRECT: case LASSO_HTTP_METHOD_ARTIFACT_GET: case LASSO_HTTP_METHOD_ARTIFACT_POST: return SYNCHRONOUS; default: return SYNC_NOT_APPLICABLE; } } static const char* binding_uri_to_identifier(const char *uri) { if (strcmp(uri, LASSO_SAML2_METADATA_BINDING_SOAP) == 0) { return "SOAP"; } else if (strcmp(uri, LASSO_SAML2_METADATA_BINDING_REDIRECT) == 0) { return "HTTP-Redirect"; } else if (strcmp(uri, LASSO_SAML2_METADATA_BINDING_POST) == 0) { return "HTTP-POST"; } else if (strcmp(uri, LASSO_SAML2_METADATA_BINDING_ARTIFACT) == 0) { return "HTTP-Artifact"; } else if (strcmp(uri, LASSO_SAML2_METADATA_BINDING_PAOS) == 0) { return "PAOS"; } else if (strcmp(uri, LASSO_SAML2_METADATA_BINDING_URI) == 0) { return "URI"; } return NULL; } static LassoHttpMethod binding_uri_to_http_method(const char *uri) { if (strcmp(uri, LASSO_SAML2_METADATA_BINDING_SOAP) == 0) { return LASSO_HTTP_METHOD_SOAP; } else if (strcmp(uri, LASSO_SAML2_METADATA_BINDING_REDIRECT) == 0) { return LASSO_HTTP_METHOD_REDIRECT; } else if (strcmp(uri, LASSO_SAML2_METADATA_BINDING_POST) == 0) { return LASSO_HTTP_METHOD_POST; } else if (strcmp(uri, LASSO_SAML2_METADATA_BINDING_ARTIFACT) == 0) { return LASSO_HTTP_METHOD_ARTIFACT_GET; } else if (strcmp(uri, LASSO_SAML2_METADATA_BINDING_PAOS) == 0) { return LASSO_HTTP_METHOD_PAOS; } return LASSO_HTTP_METHOD_NONE; } static gboolean checkSaml2MdNode(xmlNode *t, char *name) { return xmlSecCheckNodeName(t, BAD_CAST name, BAD_CAST LASSO_SAML2_METADATA_HREF); } static xmlChar* getSaml2MdProp(xmlNode *t, char *name) { return xmlGetProp(t, BAD_CAST name); } static gboolean hasSaml2MdProp(xmlNode *t, char *name) { return xmlHasProp(t, BAD_CAST name) != NULL; } static gboolean xsdIsTrue(xmlChar *value) { if (value && strcmp((char*)value, "true") == 0) return TRUE; return FALSE; } static gboolean xsdIsFalse(xmlChar *value) { if (value && strcmp((char*)value, "false") == 0) return TRUE; return FALSE; } static gboolean xsdUnsignedShortParse(xmlChar *value, int *out) { int l = 0; errno = 0; l = strtol((char*)value, NULL, 10); if (((l == INT_MIN || l == INT_MAX) && errno == ERANGE) || errno == EINVAL || l < 0 || l >= 65535) { return FALSE; } *out = l; return TRUE; } static void load_endpoint_type2(xmlNode *xmlnode, LassoProvider *provider, LassoProviderRole role, int *counter) { xmlChar *binding = getSaml2MdProp(xmlnode, LASSO_SAML2_METADATA_ATTRIBUTE_BINDING); xmlChar *location = getSaml2MdProp(xmlnode, LASSO_SAML2_METADATA_ATTRIBUTE_LOCATION); xmlChar *response_location = getSaml2MdProp(xmlnode, LASSO_SAML2_METADATA_ATTRIBUTE_RESPONSE_LOCATION); xmlChar *index = getSaml2MdProp(xmlnode, LASSO_SAML2_METADATA_ATTRIBUTE_INDEX); xmlChar *isDefault = getSaml2MdProp(xmlnode, LASSO_SAML2_METADATA_ATTRIBUTE_ISDEFAULT); gboolean indexed_endpoint = FALSE; int idx = *counter++; int is_default = 0; EndpointType *endpoint_type; if (! binding || ! location) { warning("Invalid endpoint node %s", (char*) xmlnode->name); goto cleanup; } indexed_endpoint = checkSaml2MdNode(xmlnode, LASSO_SAML2_METADATA_ELEMENT_ASSERTION_CONSUMER_SERVICE) || checkSaml2MdNode(xmlnode, LASSO_SAML2_METADATA_ELEMENT_ARTIFACT_RESOLUTION_SERVICE); if (indexed_endpoint) { if (! index || ! xsdUnsignedShortParse(index, &idx)) { warning("Invalid AssertionConsumerService, no index set"); goto cleanup; } /* isDefault is 0 if invalid or not present * -1 if true (comes first) * +1 if false (comes last) */ if (isDefault) { if (xsdIsTrue(isDefault)) { is_default = -1; } if (xsdIsFalse(isDefault)) { is_default = 1; } } } endpoint_type = g_new0(EndpointType, 1); endpoint_type->kind = g_strdup((char*)xmlnode->name); endpoint_type->binding = g_strdup((char*)binding); endpoint_type->url = g_strdup((char*)location); endpoint_type->return_url = g_strdup((char*)response_location); endpoint_type->role = role; endpoint_type->index = idx; endpoint_type->is_default = is_default; lasso_list_add(provider->private_data->endpoints, (void*)endpoint_type); cleanup: lasso_release_xml_string(binding); lasso_release_xml_string(location); lasso_release_xml_string(response_location); lasso_release_xml_string(isDefault); lasso_release_xml_string(index); } static gint compare_endpoint_type(const EndpointType *a, const EndpointType *b) { int c; /* order the sequence of endpoints: * - first by role, * - then by profile, * - then by isDefault attribute (truth first, then absent, then false) * - then by index * - then by binding */ if (a->role < b->role) return -1; if (a->role > b->role) return +1; c = g_strcmp0(a->kind,b->kind); if (c != 0) return c; if (a->is_default < b->is_default) return -1; if (a->is_default > b->is_default) return +1; if (a->index < b->index) return -1; if (a->index > b->index) return +1; return 0; } static void load_endpoint_type(xmlNode *xmlnode, LassoProvider *provider, LassoProviderRole role) { xmlChar *binding = xmlGetProp(xmlnode, BAD_CAST "Binding"); char *name = NULL; char *response_name = NULL; LassoProviderPrivate *private_data = provider->private_data; const char *binding_s = NULL; xmlChar *value = NULL; xmlChar *response_value = NULL; binding_s = binding_uri_to_identifier((char*)binding); if (! binding_s) { debug("Endpoint loading failed, unknown binding: %s", binding); goto cleanup; } /* get endpoint location */ value = getSaml2MdProp(xmlnode, LASSO_SAML2_METADATA_ATTRIBUTE_LOCATION); if (value == NULL) { debug("Endpoint loading failed, missing location on element %s", xmlnode->name); goto cleanup; } /* special case of AssertionConsumerService */ if (checkSaml2MdNode(xmlnode, LASSO_SAML2_METADATA_ELEMENT_ASSERTION_CONSUMER_SERVICE)) { xmlChar *index = getSaml2MdProp(xmlnode, LASSO_SAML2_METADATA_ATTRIBUTE_INDEX); xmlChar *is_default = getSaml2MdProp(xmlnode, LASSO_SAML2_METADATA_ATTRIBUTE_ISDEFAULT); if (xsdIsTrue(is_default) && ! private_data->default_assertion_consumer) { lasso_assign_string(private_data->default_assertion_consumer, (char*)index); } name = g_strdup_printf(LASSO_SAML2_METADATA_ELEMENT_ASSERTION_CONSUMER_SERVICE " %s %s", binding_s, index); lasso_release_xml_string(index); lasso_release_xml_string(is_default); } else { name = g_strdup_printf("%s %s", xmlnode->name, binding_s); } /* Response endpoint ? */ response_value = getSaml2MdProp(xmlnode, LASSO_SAML2_METADATA_ATTRIBUTE_RESPONSE_LOCATION); if (response_value) { response_name = g_strdup_printf("%s " LASSO_SAML2_METADATA_ATTRIBUTE_RESPONSE_LOCATION, name); _lasso_provider_add_metadata_value_for_role(provider, role, response_name, (char*)response_value); } _lasso_provider_add_metadata_value_for_role(provider, role, name, (char*)value); cleanup: lasso_release_xml_string(binding); lasso_release_xml_string(value); lasso_release_xml_string(response_value); lasso_release_string(name); lasso_release_string(response_name); } /* * Apply algorithm for find a default assertion consumer when no declared assertion consumer has the * isDefault attribute */ static gboolean load_default_assertion_consumer(xmlNode *descriptor, LassoProvider *provider) { xmlChar *index = NULL; xmlChar *is_default = NULL; xmlNode *t = NULL; LassoProviderPrivate *pdata = provider->private_data; g_return_val_if_fail(pdata, FALSE); if (provider->private_data->default_assertion_consumer) { return TRUE; } t = xmlSecGetNextElementNode(descriptor->children); while (t) { if (checkSaml2MdNode(t, LASSO_SAML2_METADATA_ELEMENT_ASSERTION_CONSUMER_SERVICE)) { lasso_release_xml_string(is_default); is_default = getSaml2MdProp(t, LASSO_SAML2_METADATA_ATTRIBUTE_ISDEFAULT); if (! xsdIsFalse(is_default)) { index = getSaml2MdProp(t, LASSO_SAML2_METADATA_ATTRIBUTE_INDEX); if (! index) { t = xmlSecGetNextElementNode(t->next); continue; } lasso_assign_string(pdata->default_assertion_consumer, (char*)index); lasso_release_xml_string(index); break; } } t = xmlSecGetNextElementNode(t->next); } lasso_release_xml_string(is_default); if (provider->private_data->default_assertion_consumer) { return TRUE; } t = xmlSecFindChild(descriptor, BAD_CAST LASSO_SAML2_METADATA_ELEMENT_ASSERTION_CONSUMER_SERVICE, BAD_CAST LASSO_SAML2_METADATA_HREF); if (! t) { return FALSE; } index = getSaml2MdProp(t, LASSO_SAML2_METADATA_ATTRIBUTE_INDEX); if (! index) { return FALSE; } lasso_assign_string( pdata->default_assertion_consumer, (char*)index); lasso_release_xml_string(index); return TRUE; } static gboolean load_descriptor(xmlNode *xmlnode, LassoProvider *provider, LassoProviderRole role) { static char * const descriptor_attrs[] = { LASSO_SAML2_METADATA_ATTRIBUTE_VALID_UNTIL, LASSO_SAML2_METADATA_ATTRIBUTE_CACHE_DURATION, LASSO_SAML2_METADATA_ATTRIBUTE_AUTHN_REQUEST_SIGNED, LASSO_SAML2_METADATA_ATTRIBUTE_WANT_AUTHN_REQUEST_SIGNED, LASSO_SAML2_METADATA_ATTRIBUTE_ERROR_URL, NULL }; int i; xmlNode *t; xmlChar *value; LassoProviderPrivate *pdata = provider->private_data; char *token, *saveptr = NULL; int counter = 0; /* check protocol support enumeration */ value = getSaml2MdProp(xmlnode, LASSO_SAML2_METADATA_ATTRIBUTE_PROTOCOL_SUPPORT_ENUMERATION); token = strtok_r((char*) value, " ", &saveptr); while (token) { if (strcmp(token, LASSO_SAML2_PROTOCOL_HREF) == 0) break; token = strtok_r(NULL, " ", &saveptr); } if (lasso_strisnotequal(token,LASSO_SAML2_PROTOCOL_HREF)) { lasso_release_xml_string(value); return FALSE; } lasso_release_xml_string(value); /* add role to supported roles for the provider */ pdata->roles |= role; t = xmlSecGetNextElementNode(xmlnode->children); while (t) { if (checkSaml2MdNode(t, LASSO_SAML2_METADATA_ELEMENT_KEY_DESCRIPTOR)) { _lasso_provider_load_key_descriptor(provider, t); } else if (checkSaml2MdNode(t, LASSO_SAML2_ASSERTION_ELEMENT_ATTRIBUTE) && role == LASSO_PROVIDER_ROLE_IDP) { LassoSaml2Attribute *attribute; attribute = (LassoSaml2Attribute*) lasso_node_new_from_xmlNode(t); lasso_list_add_new_gobject(pdata->attributes, attribute); } else if (hasSaml2MdProp(t, LASSO_SAML2_METADATA_ATTRIBUTE_BINDING)) { load_endpoint_type(t, provider, role); load_endpoint_type2(t, provider, role, &counter); } else { value = xmlNodeGetContent(t); _lasso_provider_add_metadata_value_for_role(provider, role, (char*)t->name, (char*)value); lasso_release_xml_string(value); } t = xmlSecGetNextElementNode(t->next); } provider->private_data->endpoints = g_list_sort(provider->private_data->endpoints, (GCompareFunc) compare_endpoint_type); for (i = 0; descriptor_attrs[i]; i++) { value = getSaml2MdProp(xmlnode, descriptor_attrs[i]); if (value == NULL) { continue; } _lasso_provider_add_metadata_value_for_role(provider, role, descriptor_attrs[i], (char*)value); lasso_release_xml_string(value); } if (! load_default_assertion_consumer(xmlnode, provider) && role == LASSO_PROVIDER_ROLE_SP) { message(G_LOG_LEVEL_WARNING, "Could not find a default assertion consumer, " "check the metadata file"); return FALSE; } return TRUE; } gboolean lasso_saml20_provider_load_metadata(LassoProvider *provider, xmlNode *root_node) { xmlNode *node = NULL, *descriptor_node; xmlChar *providerID; xmlChar providerID_cpy[150] = ""; LassoProviderPrivate *pdata = provider->private_data; static const struct { char *name; LassoProviderRole role; } descriptors[] = { { LASSO_SAML2_METADATA_ELEMENT_IDP_SSO_DESCRIPTOR, LASSO_PROVIDER_ROLE_IDP }, { LASSO_SAML2_METADATA_ELEMENT_SP_SSO_DESCRIPTOR, LASSO_PROVIDER_ROLE_SP }, { LASSO_SAML2_METADATA_ELEMENT_ATTRIBUTE_AUTHORITY_DESCRIPTOR, LASSO_PROVIDER_ROLE_ATTRIBUTE_AUTHORITY }, { LASSO_SAML2_METADATA_ELEMENT_PDP_DESCRIPTOR, LASSO_PROVIDER_ROLE_AUTHZ_AUTHORITY }, { LASSO_SAML2_METADATA_ELEMENT_AUTHN_DESCRIPTOR, LASSO_PROVIDER_ROLE_AUTHN_AUTHORITY }, { NULL, 0 } }; gboolean loaded_one_or_more_descriptor = FALSE; /* find a root node for the metadata file */ if (xmlSecCheckNodeName(root_node, BAD_CAST LASSO_SAML2_METADATA_ELEMENT_ENTITY_DESCRIPTOR, BAD_CAST LASSO_SAML2_METADATA_HREF)) { node = root_node; } else if (xmlSecCheckNodeName(root_node, BAD_CAST LASSO_SAML2_METADATA_ELEMENT_ENTITIES_DESCRIPTOR, BAD_CAST LASSO_SAML2_METADATA_HREF)) { node = xmlSecFindChild(root_node, BAD_CAST LASSO_SAML2_METADATA_ELEMENT_ENTITY_DESCRIPTOR, BAD_CAST LASSO_SAML2_METADATA_HREF); } g_return_val_if_fail (node, FALSE); providerID = xmlGetProp(node, (xmlChar*)"entityID"); g_return_val_if_fail(providerID, FALSE); lasso_assign_string(provider->ProviderID, (char*)providerID); g_strlcpy((char*) providerID_cpy, (char*) providerID, 150); lasso_release_xml_string(providerID); /* initialize roles */ pdata->roles = LASSO_PROVIDER_ROLE_NONE; lasso_set_string_from_prop(&pdata->valid_until, node, BAD_CAST LASSO_SAML2_METADATA_ATTRIBUTE_VALID_UNTIL, BAD_CAST LASSO_SAML2_METADATA_HREF); lasso_set_string_from_prop(&pdata->cache_duration, node, BAD_CAST LASSO_SAML2_METADATA_ATTRIBUTE_CACHE_DURATION, BAD_CAST LASSO_SAML2_METADATA_HREF); descriptor_node = xmlSecGetNextElementNode(node->children); while (descriptor_node) { int i = 0; while (descriptors[i].name) { char *name = descriptors[i].name; LassoProviderRole role = descriptors[i].role; if (checkSaml2MdNode(descriptor_node, name)) { loaded_one_or_more_descriptor |= load_descriptor(descriptor_node, provider, role); } i++; } if (checkSaml2MdNode(descriptor_node, LASSO_SAML2_METADATA_ELEMENT_ORGANIZATION)) { lasso_assign_xml_node(pdata->organization, descriptor_node); } descriptor_node = xmlSecGetNextElementNode(descriptor_node->next); } if (! LASSO_IS_SERVER(provider) && (! loaded_one_or_more_descriptor || (pdata->roles & provider->role) == 0)) { /* We must at least load one descriptor, and we must load a descriptor for our * assigned role or we fail. */ if (! loaded_one_or_more_descriptor) { warning("%s: No descriptor was loaded, failing", providerID_cpy); } if ((pdata->roles & provider->role) == 0) { warning("%s: Loaded roles and prescribed role does not intersect", providerID_cpy); } return FALSE; } return TRUE; } enum { FOR_RESPONSE = 1 }; /** * has_synchronous_methods: * @provider: a #LassoProvider object * @protocol_type: a #LassoMdProtocolType value * @for_response: a boolean stating whether we need the answer for receiving a response. * * Return whether the given @provider support a certain protocol with a synchronous binding. * If we need to receive a response for this protocol, @for_response must be set to True. * * Return result: TRUE if @provider supports @protocol_type with a synchronous binding, eventually * for receiving responses, FALSE otherwise. */ static gboolean has_synchronous_methods(LassoProvider *provider, LassoMdProtocolType protocol_type, gboolean for_response) { GList *t = NULL; const char *kind = NULL; LassoHttpMethod result = LASSO_HTTP_METHOD_NONE; if (protocol_type < LASSO_MD_PROTOCOL_TYPE_LAST) { kind = profile_names[protocol_type]; } if (! kind) { return LASSO_HTTP_METHOD_NONE; } if (for_response && protocol_type == LASSO_MD_PROTOCOL_TYPE_SINGLE_SIGN_ON) { kind = LASSO_SAML2_METADATA_ELEMENT_ASSERTION_CONSUMER_SERVICE; } lasso_foreach(t, provider->private_data->endpoints) { EndpointType *endpoint_type = (EndpointType*)t->data; if (endpoint_type && lasso_strisequal(endpoint_type->kind, kind)) { result = binding_uri_to_http_method(endpoint_type->binding); if (http_method_kind(result) == SYNCHRONOUS) return TRUE; } } return FALSE; } LassoHttpMethod lasso_saml20_provider_get_first_http_method(LassoProvider *provider, LassoProvider *remote_provider, LassoMdProtocolType protocol_type) { GList *t = NULL; const char *kind = NULL; LassoHttpMethod result = LASSO_HTTP_METHOD_NONE; if (protocol_type < LASSO_MD_PROTOCOL_TYPE_LAST) { kind = profile_names[protocol_type]; } if (! kind) { return LASSO_HTTP_METHOD_NONE; } lasso_foreach(t, remote_provider->private_data->endpoints) { EndpointType *endpoint_type = (EndpointType*)t->data; if (endpoint_type && lasso_strisequal(endpoint_type->kind, kind)) { result = binding_uri_to_http_method(endpoint_type->binding); /* a synchronous method needs another synchronous method for receiving the * response on the local side */ if (http_method_kind(result) == SYNCHRONOUS && ! has_synchronous_methods(provider, protocol_type, FOR_RESPONSE)) continue; if (result != LASSO_HTTP_METHOD_NONE) break; } } return result; } gboolean lasso_saml20_provider_accept_http_method(G_GNUC_UNUSED LassoProvider *provider, LassoProvider *remote_provider, LassoMdProtocolType protocol_type, LassoHttpMethod http_method, G_GNUC_UNUSED gboolean initiate_profile) { GList *t = NULL; const char *kind = NULL; if (protocol_type < LASSO_MD_PROTOCOL_TYPE_LAST) { kind = profile_names[protocol_type]; } if (! kind) { warning("Could not find a first http method for protocol type %u", protocol_type); return FALSE; } lasso_foreach(t, remote_provider->private_data->endpoints) { EndpointType *endpoint_type = (EndpointType*)t->data; if (endpoint_type && endpoint_type->role == remote_provider->role && lasso_strisequal(endpoint_type->kind, kind)) { if (binding_uri_to_http_method(endpoint_type->binding) == http_method) { return TRUE; } } } return FALSE; } gboolean lasso_saml20_provider_check_assertion_consumer_service_url(LassoProvider *provider, const gchar *url, const gchar *binding) { GList *t = NULL; lasso_foreach (t, provider->private_data->endpoints) { EndpointType *endpoint_type = (EndpointType*) t->data; if (endpoint_type && endpoint_type->role == LASSO_PROVIDER_ROLE_SP && lasso_strisequal(endpoint_type->url,url) && lasso_strisequal(endpoint_type->binding,binding)) { return TRUE; } } return FALSE; } static const char *supported_assertion_consumer_bindings[] = { LASSO_SAML2_METADATA_BINDING_POST, LASSO_SAML2_METADATA_BINDING_ARTIFACT, NULL }; static gboolean match_any(const char *key, const char *array[]) { const char **t = array; while (*t) { if (lasso_strisequal(key,*t)) { return TRUE; } t++; } return FALSE; } static EndpointType * lasso_saml20_provider_get_assertion_consumer_service(LassoProvider *provider, int service_id) { const char *kind = LASSO_SAML2_METADATA_ELEMENT_ASSERTION_CONSUMER_SERVICE; GList *t = NULL; EndpointType *result = NULL; if (service_id != -1) { lasso_foreach(t, provider->private_data->endpoints) { EndpointType *endpoint_type = (EndpointType*) t->data; if (! endpoint_type) continue; if (endpoint_type->role == LASSO_PROVIDER_ROLE_SP && lasso_strisequal(endpoint_type->kind,kind) && endpoint_type->index == service_id) { result = endpoint_type; break; } } } else { /* lookup a default supported endpoint type */ lasso_foreach(t, provider->private_data->endpoints) { EndpointType *endpoint_type = (EndpointType*) t->data; if (! endpoint_type) continue; if (endpoint_type->role == LASSO_PROVIDER_ROLE_SP && lasso_strisequal(endpoint_type->kind,kind) && match_any(endpoint_type->binding, supported_assertion_consumer_bindings)) { result = endpoint_type; break; } } } return result; } gchar* lasso_saml20_provider_get_assertion_consumer_service_url(LassoProvider *provider, int service_id) { EndpointType *endpoint_type = lasso_saml20_provider_get_assertion_consumer_service(provider, service_id); if (endpoint_type) { return g_strdup(endpoint_type->url); } return NULL; } gchar* lasso_saml20_provider_get_assertion_consumer_service_binding(LassoProvider *provider, int service_id) { EndpointType *endpoint_type = lasso_saml20_provider_get_assertion_consumer_service(provider, service_id); if (endpoint_type) { return g_strdup(binding_uri_to_identifier(endpoint_type->binding)); } return NULL; } const gchar* lasso_saml20_provider_get_assertion_consumer_service_binding_by_url(LassoProvider *provider, const char *url) { const char *kind = LASSO_SAML2_METADATA_ELEMENT_ASSERTION_CONSUMER_SERVICE; GList *t = NULL; lasso_foreach(t, provider->private_data->endpoints) { EndpointType *endpoint_type = (EndpointType*) t->data; if (! endpoint_type) continue; if (endpoint_type->role == LASSO_PROVIDER_ROLE_SP && lasso_strisequal(endpoint_type->kind,kind) && lasso_strisequal(endpoint_type->url,url)) { return endpoint_type->binding; } } return NULL; } gchar* lasso_saml20_provider_get_assertion_consumer_service_url_by_binding(LassoProvider *provider, const gchar *binding) { const char *kind = LASSO_SAML2_METADATA_ELEMENT_ASSERTION_CONSUMER_SERVICE; GList *t = NULL; lasso_foreach(t, provider->private_data->endpoints) { EndpointType *endpoint_type = (EndpointType*) t->data; if (! endpoint_type) continue; if (endpoint_type->role == LASSO_PROVIDER_ROLE_SP && lasso_strisequal(endpoint_type->kind,kind) && lasso_strisequal(endpoint_type->binding,binding)) { return g_strdup(endpoint_type->url); } } return NULL; } /** * lasso_saml20_provider_get_endpoint_url: * @provider: a #LassoProvider object * @role: the role of the given provider, * @kind: the endpoint kind, ex. AssertionConsumerService * @bindings:(allow-none): a list of string, giving binding to match, if needed, * @is_response: TRUE if the URL will be user for returning a response * @is_default: TRUE if we are looking for the default endpoint * @idx: if >= 0 look for the endpoint with the given index * * Return the best URL for reaching the given endpoint */ const gchar* lasso_saml20_provider_get_endpoint_url(LassoProvider *provider, LassoProviderRole role, const char *kind, GSList *bindings, gboolean is_response, gboolean is_default, int idx) { EndpointType* endpoint_type = NULL; GList *t = NULL; if (! LASSO_IS_PROVIDER(provider) || !kind) return NULL; lasso_foreach(t, provider->private_data->endpoints) { endpoint_type = (EndpointType*) t->data; if (! endpoint_type) continue; if (! endpoint_type->binding) continue; if (endpoint_type->role != role \ && role != LASSO_PROVIDER_ROLE_ANY \ && role != LASSO_PROVIDER_ROLE_NONE) continue; if (! lasso_strisequal(endpoint_type->kind, kind)) continue; /* endpoints are already properly ordered so that the first matching one is the * default one */ if (is_default) break; else if (idx >= 0) { if (endpoint_type->index == idx) break; } else { /* if all else fails return the first matching one or the first matching our * list of bindings */ if (!bindings || g_slist_find_custom(bindings, endpoint_type->binding, (GCompareFunc)g_strcmp0)) break; } endpoint_type = NULL; } if (! endpoint_type) return NULL; if (is_response && endpoint_type->return_url) return endpoint_type->return_url; else return endpoint_type->url; } lasso_error_t lasso_saml20_provider_get_artifact_resolution_service_index(LassoProvider *provider, unsigned short *index) { const char *kind = LASSO_SAML2_METADATA_ELEMENT_ARTIFACT_RESOLUTION_SERVICE; GList *t = NULL; lasso_bad_param(PROVIDER, provider) lasso_null_param(index); lasso_foreach(t, provider->private_data->endpoints) { EndpointType *endpoint_type = (EndpointType*) t->data; if (! endpoint_type) continue; /* endpoints are already properly ordered to provide the default endpoint first, so * we just need to return the first matching one */ if (endpoint_type->role == provider->role || provider->role == LASSO_PROVIDER_ROLE_NONE || provider->role == LASSO_PROVIDER_ROLE_ANY) { if (lasso_strisequal(endpoint_type->kind,kind)) { *index = endpoint_type->index; return 0; } } } return -1; } /** * lasso_provider_saml2_node_encrypt: * @provider: a #LassoProvider object * @lasso_node: a #LassoNode object * * Dump the node object to an XML fragment, then encrypt this fragment using encryption key of * @provider, then encapsulate the resulting encrypted content into a #LassoSaml2EncryptedElement. * * Return value: a newly created #LassoSaml2EncryptedElement if successfull, NULL otherwise. */ LassoSaml2EncryptedElement* lasso_provider_saml2_node_encrypt(const LassoProvider *provider, LassoNode *lasso_node) { LassoSaml2EncryptedElement *saml2_encrypted_element; g_return_val_if_fail(LASSO_IS_PROVIDER (provider), NULL); g_return_val_if_fail(LASSO_IS_NODE (lasso_node), NULL); saml2_encrypted_element = lasso_node_encrypt(lasso_node, lasso_provider_get_encryption_public_key(provider), lasso_provider_get_encryption_sym_key_type(provider), lasso_provider_get_key_encryption_method(provider), provider->ProviderID); return saml2_encrypted_element; } lasso-2.8.2/lasso/PaxHeaders/Makefile.am0000644000000000000000000000013114117162531015077 xustar0030 mtime=1631380825.848637964 29 atime=1678814114.75279174 30 ctime=1678814320.005947593 lasso-2.8.2/lasso/Makefile.am0000644000175000017500000000570514117162531020357 0ustar00bdauvergnebdauvergne00000000000000SUBDIRS = xml id-ff saml-2.0 liblassoincludedir = $(includedir)/lasso AM_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir) $(LASSO_CORE_CFLAGS) ## Added to activate libtool 1.5.6 windows resources partial support LTRCCOMPILE = $(LIBTOOL) --tag=RC --mode=compile $(RC) \ `echo $(DEFS) $(DEFAULT_INCLUDES) $(AM_CPPFLAGS) |\ sed -e 's/-I/--include-dir /g;s/-D/--define /g'` ## Added to activate libtool 1.5.6 windows resources partial support lasso.rc.lo: $(top_srcdir)/win32/lasso.rc $(LTRCCOMPILE) -i $< -o $@ lib_LTLIBRARIES = liblasso.la liblassoinclude_HEADERS = export.h lasso.h lasso_config.h errors.h \ registry.h ctypes.h key.h nodist_liblassoinclude_HEADERS = debug.h utils.h registry-private.h logging.h backward_comp.h keyprivate.h BUILT_SOURCES = types.c errors.c symbols.sym liblasso_la_SOURCES = lasso.c errors.c registry.c utils.c logging.c key.c types.c: $(srcdir)/*.h $(srcdir)/*/*.h $(srcdir)/*/*/*.h $(PYTHON) $(srcdir)/extract_types.py $(srcdir) $(SYMBOLS_ARGS) symbols.sym: $(srcdir)/*.h $(srcdir)/*/*.h $(srcdir)/*/*/*.h $(PYTHON) $(srcdir)/extract_symbols.py $(srcdir) $(SYMBOLS_ARGS) > symbols.sym MAINTAINERCLEANFILES = \ Makefile.in \ lasso_config.h.in clean-local: -rm -f types.c symbols.sym errors.c EXTRA_DIST = $(nodist_liblassoinclude_HEADERS) extract_types.py extract_symbols.py build_strerror.py \ errors.c.in extract_sections.py errors.c if MINGW liblasso_la_LIBADD = \ $(top_builddir)/lasso/xml/liblasso-xml.la \ $(top_builddir)/lasso/xml/ecp/liblasso-xml-ecp.la \ $(top_builddir)/lasso/xml/saml-2.0/liblasso-xml-saml2.la \ $(top_builddir)/lasso/xml/soap-1.1/liblasso-xml-soap11.la \ $(top_builddir)/lasso/xml/dsig/liblasso-xml-dsig.la \ $(top_builddir)/lasso/id-ff/liblasso-id-ff.la \ $(top_builddir)/lasso/saml-2.0/liblasso-saml-20.la \ $(LASSO_LIBS) \ lasso.rc.lo # Just make damn sure the ABI stays the same between # upgrades. # Obviously if you don't, fixing the situation up again can be painful. liblasso_la_LDFLAGS = -no-undefined -version-info @LASSO_VERSION_INFO@ \ -Wl,--add-stdcall-alias else liblasso_la_LIBADD = \ $(top_builddir)/lasso/xml/ecp/liblasso-xml-ecp.la \ $(top_builddir)/lasso/xml/liblasso-xml.la \ $(top_builddir)/lasso/xml/saml-2.0/liblasso-xml-saml2.la \ $(top_builddir)/lasso/xml/soap-1.1/liblasso-xml-soap11.la \ $(top_builddir)/lasso/xml/dsig/liblasso-xml-dsig.la \ $(top_builddir)/lasso/id-ff/liblasso-id-ff.la \ $(top_builddir)/lasso/saml-2.0/liblasso-saml-20.la \ $(LASSO_LIBS) # Just make damn sure the ABI stays the same between # upgrades. # Obviously if you don't, fixing the situation up again can be painful. liblasso_la_LDFLAGS = -no-undefined -version-info @LASSO_VERSION_INFO@ \ -export-symbols symbols.sym endif $(srcdir)/errors.c: $(srcdir)/errors.h $(srcdir)/build_strerror.py $(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 lasso-2.8.2/lasso/PaxHeaders/ctypes.h0000644000000000000000000000013214114336625014530 xustar0030 mtime=1630649749.794436646 30 atime=1678814151.112994426 30 ctime=1678814320.013947639 lasso-2.8.2/lasso/ctypes.h0000644000175000017500000000214314114336625020000 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_CTYPES_H__ #define __LASSO_CTYPES_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /* Mark error returning functions */ typedef int lasso_error_t; #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_CTYPES_H__ */ lasso-2.8.2/lasso/PaxHeaders/lasso_config.h0000644000000000000000000000013114404125706015664 xustar0029 mtime=1678814150.20098933 30 atime=1678814151.112994426 30 ctime=1678814320.009947615 lasso-2.8.2/lasso/lasso_config.h0000644000175000017500000000021614404125706021134 0ustar00bdauvergnebdauvergne00000000000000/* lasso/lasso_config.h. Generated from lasso_config.h.in by configure. */ /* lasso/lasso_config.h.in. */ #define LASSO_LOG_DOMAIN "Lasso" lasso-2.8.2/lasso/PaxHeaders/Makefile.in0000644000000000000000000000013214404125673015116 xustar0030 mtime=1678814139.616930232 30 atime=1678814149.844987341 30 ctime=1678814320.017947661 lasso-2.8.2/lasso/Makefile.in0000644000175000017500000010742214404125673020374 0ustar00bdauvergnebdauvergne00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = lasso ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ac_check_class.m4 \ $(top_srcdir)/m4/ac_check_classpath.m4 \ $(top_srcdir)/m4/ac_check_junit.m4 \ $(top_srcdir)/m4/ac_prog_jar.m4 \ $(top_srcdir)/m4/ac_prog_java.m4 \ $(top_srcdir)/m4/ac_prog_java_works.m4 \ $(top_srcdir)/m4/ac_prog_javac.m4 \ $(top_srcdir)/m4/ac_prog_javac_works.m4 \ $(top_srcdir)/m4/ac_prog_javah.m4 \ $(top_srcdir)/m4/ac_try_compile_java.m4 \ $(top_srcdir)/m4/as-compiler-flag.m4 \ $(top_srcdir)/m4/dps_java_check_class.m4 \ $(top_srcdir)/m4/dps_xtra_classpath.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(liblassoinclude_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h lasso_config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" \ "$(DESTDIR)$(liblassoincludedir)" \ "$(DESTDIR)$(liblassoincludedir)" LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = @MINGW_FALSE@liblasso_la_DEPENDENCIES = $(top_builddir)/lasso/xml/ecp/liblasso-xml-ecp.la \ @MINGW_FALSE@ $(top_builddir)/lasso/xml/liblasso-xml.la \ @MINGW_FALSE@ $(top_builddir)/lasso/xml/saml-2.0/liblasso-xml-saml2.la \ @MINGW_FALSE@ $(top_builddir)/lasso/xml/soap-1.1/liblasso-xml-soap11.la \ @MINGW_FALSE@ $(top_builddir)/lasso/xml/dsig/liblasso-xml-dsig.la \ @MINGW_FALSE@ $(top_builddir)/lasso/id-ff/liblasso-id-ff.la \ @MINGW_FALSE@ $(top_builddir)/lasso/saml-2.0/liblasso-saml-20.la \ @MINGW_FALSE@ $(am__DEPENDENCIES_1) @MINGW_TRUE@liblasso_la_DEPENDENCIES = \ @MINGW_TRUE@ $(top_builddir)/lasso/xml/liblasso-xml.la \ @MINGW_TRUE@ $(top_builddir)/lasso/xml/ecp/liblasso-xml-ecp.la \ @MINGW_TRUE@ $(top_builddir)/lasso/xml/saml-2.0/liblasso-xml-saml2.la \ @MINGW_TRUE@ $(top_builddir)/lasso/xml/soap-1.1/liblasso-xml-soap11.la \ @MINGW_TRUE@ $(top_builddir)/lasso/xml/dsig/liblasso-xml-dsig.la \ @MINGW_TRUE@ $(top_builddir)/lasso/id-ff/liblasso-id-ff.la \ @MINGW_TRUE@ $(top_builddir)/lasso/saml-2.0/liblasso-saml-20.la \ @MINGW_TRUE@ $(am__DEPENDENCIES_1) lasso.rc.lo am_liblasso_la_OBJECTS = lasso.lo errors.lo registry.lo utils.lo \ logging.lo key.lo liblasso_la_OBJECTS = $(am_liblasso_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = liblasso_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(liblasso_la_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/errors.Plo ./$(DEPDIR)/key.Plo \ ./$(DEPDIR)/lasso.Plo ./$(DEPDIR)/logging.Plo \ ./$(DEPDIR)/registry.Plo ./$(DEPDIR)/utils.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(liblasso_la_SOURCES) DIST_SOURCES = $(liblasso_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(liblassoinclude_HEADERS) $(nodist_liblassoinclude_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ lasso_config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/lasso_config.h.in \ $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CHECK_CFLAGS = @CHECK_CFLAGS@ CHECK_LIBS = @CHECK_LIBS@ CLASSPATH_JUNIT = @CLASSPATH_JUNIT@ CLASSPATH_OPT = @CLASSPATH_OPT@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CSHARPCILINTERPRETER = @CSHARPCILINTERPRETER@ CSHARPCOMPILER = @CSHARPCOMPILER@ CSHARPCYGPATH_W = @CSHARPCYGPATH_W@ CSHARPDYNAMICLINKING = @CSHARPDYNAMICLINKING@ CSHARPLIBRARYPREFIX = @CSHARPLIBRARYPREFIX@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEBUGGING = @DEBUGGING@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLL_FILENAME = @DLL_FILENAME@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GACUTIL = @GACUTIL@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HTML_DIR = @HTML_DIR@ INKSCAPE = @INKSCAPE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVAC_FLAGS = @JAVAC_FLAGS@ JAVAH = @JAVAH@ JAVAH_FLAGS = @JAVAH_FLAGS@ JAVA_INCLUDE = @JAVA_INCLUDE@ JAVA_JUNIT = @JAVA_JUNIT@ JAVA_VERSION = @JAVA_VERSION@ JDK_INCLUDE = @JDK_INCLUDE@ JNI_EXTRA_LDFLAGS = @JNI_EXTRA_LDFLAGS@ JUNIT = @JUNIT@ LASSO_APP_DEFINES = @LASSO_APP_DEFINES@ LASSO_CFLAGS = @LASSO_CFLAGS@ LASSO_CORE_CFLAGS = @LASSO_CORE_CFLAGS@ LASSO_CORE_LIBS = @LASSO_CORE_LIBS@ LASSO_DEFINES = @LASSO_DEFINES@ LASSO_DOCDIR = @LASSO_DOCDIR@ LASSO_LIBS = @LASSO_LIBS@ LASSO_PUB_CFLAGS = @LASSO_PUB_CFLAGS@ LASSO_STATIC_BINARIES = @LASSO_STATIC_BINARIES@ LASSO_VERSION_INFO = @LASSO_VERSION_INFO@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PERLINSTALLSITEARCH = @PERLINSTALLSITEARCH@ PERLMAN3DIR = @PERLMAN3DIR@ PERL_CFLAGS = @PERL_CFLAGS@ PERL_VERSION = @PERL_VERSION@ PHP5 = @PHP5@ PHP5_CONFIG = @PHP5_CONFIG@ PHP5_CONFIG_DIR = @PHP5_CONFIG_DIR@ PHP5_EXTENSION_DIR = @PHP5_EXTENSION_DIR@ PHP5_INCLUDES = @PHP5_INCLUDES@ PHP5_INCLUDE_DIR = @PHP5_INCLUDE_DIR@ PHP5_LDFLAGS = @PHP5_LDFLAGS@ PHP5_LIBS = @PHP5_LIBS@ PHP5_PREFIX = @PHP5_PREFIX@ PHP5_UNPREFIXED_EXTENSION_DIR = @PHP5_UNPREFIXED_EXTENSION_DIR@ PHP5_VERSION = @PHP5_VERSION@ PHP7 = @PHP7@ PHP7_CONFIG = @PHP7_CONFIG@ PHP7_CONFIG_DIR = @PHP7_CONFIG_DIR@ PHP7_EXTENSION_DIR = @PHP7_EXTENSION_DIR@ PHP7_INCLUDES = @PHP7_INCLUDES@ PHP7_INCLUDE_DIR = @PHP7_INCLUDE_DIR@ PHP7_LDFLAGS = @PHP7_LDFLAGS@ PHP7_LIBS = @PHP7_LIBS@ PHP7_PREFIX = @PHP7_PREFIX@ PHP7_UNPREFIXED_EXTENSION_DIR = @PHP7_UNPREFIXED_EXTENSION_DIR@ PHP7_VERSION = @PHP7_VERSION@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PYTHON = @PYTHON@ PYTHON_VERSION = @PYTHON_VERSION@ PY_CFLAGS = @PY_CFLAGS@ PY_DYNLOAD = @PY_DYNLOAD@ PY_EXTRA_LIBS = @PY_EXTRA_LIBS@ PY_LIB_A = @PY_LIB_A@ PY_LIB_LOC = @PY_LIB_LOC@ PY_SITE_PACKAGES = @PY_SITE_PACKAGES@ RANLIB = @RANLIB@ RC = @RC@ REST2HTML = @REST2HTML@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_VERSION = @SWIG_VERSION@ TAR = @TAR@ TESTS_JUNIT = @TESTS_JUNIT@ UPCASED_DLL_FILENAME = @UPCASED_DLL_FILENAME@ VERSION = @VERSION@ VERSION_UNDERSCORED = @VERSION_UNDERSCORED@ WINDOWS_VERSION = @WINDOWS_VERSION@ XSLTPROC = @XSLTPROC@ Z_CFLAGS = @Z_CFLAGS@ Z_LIBS = @Z_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ uudecode = @uudecode@ SUBDIRS = xml id-ff saml-2.0 liblassoincludedir = $(includedir)/lasso AM_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir) $(LASSO_CORE_CFLAGS) LTRCCOMPILE = $(LIBTOOL) --tag=RC --mode=compile $(RC) \ `echo $(DEFS) $(DEFAULT_INCLUDES) $(AM_CPPFLAGS) |\ sed -e 's/-I/--include-dir /g;s/-D/--define /g'` lib_LTLIBRARIES = liblasso.la liblassoinclude_HEADERS = export.h lasso.h lasso_config.h errors.h \ registry.h ctypes.h key.h nodist_liblassoinclude_HEADERS = debug.h utils.h registry-private.h logging.h backward_comp.h keyprivate.h BUILT_SOURCES = types.c errors.c symbols.sym liblasso_la_SOURCES = lasso.c errors.c registry.c utils.c logging.c key.c MAINTAINERCLEANFILES = \ Makefile.in \ lasso_config.h.in EXTRA_DIST = $(nodist_liblassoinclude_HEADERS) extract_types.py extract_symbols.py build_strerror.py \ errors.c.in extract_sections.py errors.c @MINGW_FALSE@liblasso_la_LIBADD = \ @MINGW_FALSE@ $(top_builddir)/lasso/xml/ecp/liblasso-xml-ecp.la \ @MINGW_FALSE@ $(top_builddir)/lasso/xml/liblasso-xml.la \ @MINGW_FALSE@ $(top_builddir)/lasso/xml/saml-2.0/liblasso-xml-saml2.la \ @MINGW_FALSE@ $(top_builddir)/lasso/xml/soap-1.1/liblasso-xml-soap11.la \ @MINGW_FALSE@ $(top_builddir)/lasso/xml/dsig/liblasso-xml-dsig.la \ @MINGW_FALSE@ $(top_builddir)/lasso/id-ff/liblasso-id-ff.la \ @MINGW_FALSE@ $(top_builddir)/lasso/saml-2.0/liblasso-saml-20.la \ @MINGW_FALSE@ $(LASSO_LIBS) @MINGW_TRUE@liblasso_la_LIBADD = \ @MINGW_TRUE@ $(top_builddir)/lasso/xml/liblasso-xml.la \ @MINGW_TRUE@ $(top_builddir)/lasso/xml/ecp/liblasso-xml-ecp.la \ @MINGW_TRUE@ $(top_builddir)/lasso/xml/saml-2.0/liblasso-xml-saml2.la \ @MINGW_TRUE@ $(top_builddir)/lasso/xml/soap-1.1/liblasso-xml-soap11.la \ @MINGW_TRUE@ $(top_builddir)/lasso/xml/dsig/liblasso-xml-dsig.la \ @MINGW_TRUE@ $(top_builddir)/lasso/id-ff/liblasso-id-ff.la \ @MINGW_TRUE@ $(top_builddir)/lasso/saml-2.0/liblasso-saml-20.la \ @MINGW_TRUE@ $(LASSO_LIBS) \ @MINGW_TRUE@ lasso.rc.lo # Just make damn sure the ABI stays the same between # upgrades. # Obviously if you don't, fixing the situation up again can be painful. @MINGW_FALSE@liblasso_la_LDFLAGS = -no-undefined -version-info @LASSO_VERSION_INFO@ \ @MINGW_FALSE@ -export-symbols symbols.sym # Just make damn sure the ABI stays the same between # upgrades. # Obviously if you don't, fixing the situation up again can be painful. @MINGW_TRUE@liblasso_la_LDFLAGS = -no-undefined -version-info @LASSO_VERSION_INFO@ \ @MINGW_TRUE@ -Wl,--add-stdcall-alias all: $(BUILT_SOURCES) lasso_config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign lasso/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign lasso/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): lasso_config.h: stamp-h2 @test -f $@ || rm -f stamp-h2 @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h2 stamp-h2: $(srcdir)/lasso_config.h.in $(top_builddir)/config.status @rm -f stamp-h2 cd $(top_builddir) && $(SHELL) ./config.status lasso/lasso_config.h distclean-hdr: -rm -f lasso_config.h stamp-h2 install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } liblasso.la: $(liblasso_la_OBJECTS) $(liblasso_la_DEPENDENCIES) $(EXTRA_liblasso_la_DEPENDENCIES) $(AM_V_CCLD)$(liblasso_la_LINK) -rpath $(libdir) $(liblasso_la_OBJECTS) $(liblasso_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/errors.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/key.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lasso.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/logging.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/registry.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utils.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-liblassoincludeHEADERS: $(liblassoinclude_HEADERS) @$(NORMAL_INSTALL) @list='$(liblassoinclude_HEADERS)'; test -n "$(liblassoincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(liblassoincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(liblassoincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(liblassoincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(liblassoincludedir)" || exit $$?; \ done uninstall-liblassoincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(liblassoinclude_HEADERS)'; test -n "$(liblassoincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(liblassoincludedir)'; $(am__uninstall_files_from_dir) install-nodist_liblassoincludeHEADERS: $(nodist_liblassoinclude_HEADERS) @$(NORMAL_INSTALL) @list='$(nodist_liblassoinclude_HEADERS)'; test -n "$(liblassoincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(liblassoincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(liblassoincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(liblassoincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(liblassoincludedir)" || exit $$?; \ done uninstall-nodist_liblassoincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(nodist_liblassoinclude_HEADERS)'; test -n "$(liblassoincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(liblassoincludedir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-recursive all-am: Makefile $(LTLIBRARIES) $(HEADERS) lasso_config.h installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(liblassoincludedir)" "$(DESTDIR)$(liblassoincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-recursive install-exec: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-recursive clean-am: clean-generic clean-libLTLIBRARIES clean-libtool clean-local \ mostlyclean-am distclean: distclean-recursive -rm -f ./$(DEPDIR)/errors.Plo -rm -f ./$(DEPDIR)/key.Plo -rm -f ./$(DEPDIR)/lasso.Plo -rm -f ./$(DEPDIR)/logging.Plo -rm -f ./$(DEPDIR)/registry.Plo -rm -f ./$(DEPDIR)/utils.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-liblassoincludeHEADERS \ install-nodist_liblassoincludeHEADERS install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/errors.Plo -rm -f ./$(DEPDIR)/key.Plo -rm -f ./$(DEPDIR)/lasso.Plo -rm -f ./$(DEPDIR)/logging.Plo -rm -f ./$(DEPDIR)/registry.Plo -rm -f ./$(DEPDIR)/utils.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-libLTLIBRARIES \ uninstall-liblassoincludeHEADERS \ uninstall-nodist_liblassoincludeHEADERS .MAKE: $(am__recursive_targets) all check install install-am \ install-exec install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--depfiles check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool clean-local cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-hdr distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-libLTLIBRARIES \ install-liblassoincludeHEADERS install-man \ install-nodist_liblassoincludeHEADERS install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-libLTLIBRARIES uninstall-liblassoincludeHEADERS \ uninstall-nodist_liblassoincludeHEADERS .PRECIOUS: Makefile lasso.rc.lo: $(top_srcdir)/win32/lasso.rc $(LTRCCOMPILE) -i $< -o $@ types.c: $(srcdir)/*.h $(srcdir)/*/*.h $(srcdir)/*/*/*.h $(PYTHON) $(srcdir)/extract_types.py $(srcdir) $(SYMBOLS_ARGS) symbols.sym: $(srcdir)/*.h $(srcdir)/*/*.h $(srcdir)/*/*/*.h $(PYTHON) $(srcdir)/extract_symbols.py $(srcdir) $(SYMBOLS_ARGS) > symbols.sym clean-local: -rm -f types.c symbols.sym errors.c $(srcdir)/errors.c: $(srcdir)/errors.h $(srcdir)/build_strerror.py $(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 # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lasso-2.8.2/lasso/PaxHeaders/extract_types.py0000644000000000000000000000013214117162531016314 xustar0030 mtime=1631380825.848637964 30 atime=1678814150.988993733 30 ctime=1678814320.041947798 lasso-2.8.2/lasso/extract_types.py0000644000175000017500000000227214117162531021567 0ustar00bdauvergnebdauvergne00000000000000#! /usr/bin/env python import io import glob import re import sys import six if len(sys.argv) == 2: srcdir = sys.argv[1] else: srcdir = '.' fd = io.StringIO() six.print_(u"/* This file has been autogenerated; changes will be lost */", file=fd) six.print_(u"", file=fd) six.print_(u"typedef GType (*type_function) ();", file=fd) six.print_(u"", file=fd) header_files = [] for header_file in sorted(glob.glob('%s/*/*.h' % srcdir) + glob.glob('%s/*/*/*.h' % srcdir)): assert not ('/id-wsf/' in header_file or '/id-wsf-2.0' in header_file) header_files.append(header_file) try: type = re.findall('lasso_.*get_type', io.open(header_file, encoding='utf-8').read())[0] except IndexError: continue six.print_("extern GType %s();" % type, file=fd) six.print_(u"", file=fd) six.print_(u"type_function functions[] = {", file=fd) for header_file in header_files: try: type = re.findall('lasso_.*get_type', io.open(header_file, encoding='utf-8').read())[0] except IndexError: continue six.print_(u"\t%s," % type, file=fd) six.print_(u"\tNULL", file=fd) six.print_(u"};", file=fd) io.open('types.c', 'w', encoding='utf-8').write(fd.getvalue()) lasso-2.8.2/lasso/PaxHeaders/export.h0000644000000000000000000000013114114336625014541 xustar0029 mtime=1630649749.79843669 30 atime=1678814151.112994426 30 ctime=1678814320.005947593 lasso-2.8.2/lasso/export.h0000644000175000017500000000511514114336625020014 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_EXPORT_H__ #define __LASSO_EXPORT_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "ctypes.h" /* Now, the export orgy begins. The following we must do for the * Windows platform with MSVC compiler. */ #if !defined LASSO_EXPORT # if (defined _MSC_VER || defined MINGW32) /* if we compile libxmlsec itself: */ # if defined(IN_LASSO) # if !defined(LASSO_STATIC) # define LASSO_EXPORT __declspec(dllexport) # else # define LASSO_EXPORT extern # endif /* if a client program includes this file: */ # else # if !defined(LASSO_STATIC) # define LASSO_EXPORT __declspec(dllimport) # else # define LASSO_EXPORT # endif # endif /* This holds on all other platforms/compilers, which are easier to handle in regard to this. */ # else # define LASSO_EXPORT # endif #endif #if !defined LASSO_EXPORT_VAR # if (defined _MSC_VER || defined MINGW32) /* if we compile libxmlsec itself: */ # if defined(IN_LASSO) # if !defined(LASSO_STATIC) # define LASSO_EXPORT_VAR __declspec(dllexport) extern # else # define LASSO_EXPORT_VAR extern # endif /* if we compile libxmlsec-crypto itself: */ # elif defined(IN_LASSO_CRYPTO) # define LASSO_EXPORT_VAR extern /* if a client program includes this file: */ # else # if !defined(LASSO_STATIC) # define LASSO_EXPORT_VAR __declspec(dllimport) extern # else # define LASSO_EXPORT_VAR extern # endif # endif /* This holds on all other platforms/compilers, which are easier to handle in regard to this. */ # else # define LASSO_EXPORT_VAR extern # endif #endif #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_EXPORT_H__ */ lasso-2.8.2/lasso/PaxHeaders/extract_symbols.py0000644000000000000000000000013114117162531016637 xustar0030 mtime=1631380825.848637964 30 atime=1678814151.092994315 29 ctime=1678814320.04594782 lasso-2.8.2/lasso/extract_symbols.py0000644000175000017500000000110614117162531022106 0ustar00bdauvergnebdauvergne00000000000000#! /usr/bin/env python import io import glob import re import sys import six if len(sys.argv) == 2: srcdir = sys.argv[1] else: srcdir = '.' regex = re.compile('LASSO_EXPORT[^;(]*(lasso_[a-zA-Z0-9_]+)', re.MULTILINE) symbols = [] for header_file in glob.glob('%s/*/*.h' % srcdir) + glob.glob('%s/*.h' % srcdir) + \ glob.glob('%s/*/*/*.h' % srcdir): assert not ('/id-wsf/' in header_file or '/id-wsf-2.0' in header_file) symbols.extend(regex.findall(io.open(header_file, encoding='utf-8').read().replace('\\\n', ''))) for s in symbols: six.print_(s) lasso-2.8.2/lasso/PaxHeaders/errors.h0000644000000000000000000000013214117162531014531 xustar0030 mtime=1631380825.848637964 30 atime=1678814151.064994158 30 ctime=1678814320.013947639 lasso-2.8.2/lasso/errors.h0000644000175000017500000005274214117162531020013 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ /** * SECTION:errors * @short_description: Error codes returned by lasso functions * @include: lasso/errors.h * * Most functions in lasso return signed integer error codes. The convention is to give: * * a negative error code for programming or runtime recoverable errors, * a positive error code for Liberty Alliance recoverable errors. * * * Beware that this convention is not always well followed. */ #include "export.h" LASSO_EXPORT const char* lasso_strerror(int error_code); /** * LASSO_ERROR_UNDEFINED: * * Undefined error. */ #define LASSO_ERROR_UNDEFINED -1 /** * LASSO_ERROR_UNIMPLEMENTED: * * Unimplemented part of Lasso. */ #define LASSO_ERROR_UNIMPLEMENTED -2 /** * LASSO_ERROR_OUT_OF_MEMORY: * * Out of memory */ #define LASSO_ERROR_OUT_OF_MEMORY -3 /** * LASSO_ERROR_CAST_FAILED: * * Expected GObject class was not found, cast failed */ #define LASSO_ERROR_CAST_FAILED -4 /* generic XML */ /** * LASSO_XML_ERROR_NODE_NOT_FOUND: * * Unable to get child of element. */ #define LASSO_XML_ERROR_NODE_NOT_FOUND -10 /** * LASSO_XML_ERROR_NODE_CONTENT_NOT_FOUND: * * Unable to get content of element. */ #define LASSO_XML_ERROR_NODE_CONTENT_NOT_FOUND -11 /** * LASSO_XML_ERROR_ATTR_NOT_FOUND: * * Unable to get attribute of element. */ #define LASSO_XML_ERROR_ATTR_NOT_FOUND -12 /** * LASSO_XML_ERROR_ATTR_VALUE_NOT_FOUND: * * Unable to get attribute value of element. */ #define LASSO_XML_ERROR_ATTR_VALUE_NOT_FOUND -13 /** * LASSO_XML_ERROR_INVALID_FILE: * * Invalid XML file */ #define LASSO_XML_ERROR_INVALID_FILE -14 /** * LASSO_XML_ERROR_OBJECT_CONSTRUCTION_FAILED: * * Construction of an object from an XML document failed. */ #define LASSO_XML_ERROR_OBJECT_CONSTRUCTION_FAILED -15 /** * LASSO_XML_ERROR_MISSING_NAMESPACE: * * A namespace is missing. */ #define LASSO_XML_ERROR_MISSING_NAMESPACE -16 /** * LASSO_XML_ERROR_SCHEMA_INVALID_FRAGMENT: * * An XML tree does not respect at least an XML schema of its namespaces. */ #define LASSO_XML_ERROR_SCHEMA_INVALID_FRAGMENT 17 /** * LASSO_XML_ERROR_ATTR_VALUE_INVALID: * * Attribute value is invalid. */ #define LASSO_XML_ERROR_ATTR_VALUE_INVALID -18 /* XMLDSig */ /** * LASSO_DS_ERROR_SIGNATURE_NOT_FOUND: * * Signature element not found. */ #define LASSO_DS_ERROR_SIGNATURE_NOT_FOUND 101 /** * LASSO_DS_ERROR_INVALID_SIGNATURE: * * Invalid signature. */ #define LASSO_DS_ERROR_INVALID_SIGNATURE 102 #define LASSO_DS_ERROR_SIGNATURE_TMPL_CREATION_FAILED -103 /** * LASSO_DS_ERROR_CONTEXT_CREATION_FAILED: * * Failed to create signature context. */ #define LASSO_DS_ERROR_CONTEXT_CREATION_FAILED -104 /** * LASSO_DS_ERROR_PUBLIC_KEY_LOAD_FAILED: * * Failed to load public key. */ #define LASSO_DS_ERROR_PUBLIC_KEY_LOAD_FAILED -105 /** * LASSO_DS_ERROR_PRIVATE_KEY_LOAD_FAILED: * * Failed to load private key. */ #define LASSO_DS_ERROR_PRIVATE_KEY_LOAD_FAILED -106 /** * LASSO_DS_ERROR_CERTIFICATE_LOAD_FAILED: * * Failed to load certificate. */ #define LASSO_DS_ERROR_CERTIFICATE_LOAD_FAILED -107 /** * LASSO_DS_ERROR_SIGNATURE_FAILED: * * Failed to sign the node. */ #define LASSO_DS_ERROR_SIGNATURE_FAILED -108 /** * LASSO_DS_ERROR_KEYS_MNGR_CREATION_FAILED: * * Failed to create keys manager. */ #define LASSO_DS_ERROR_KEYS_MNGR_CREATION_FAILED -109 /** * LASSO_DS_ERROR_KEYS_MNGR_INIT_FAILED: * * Failed to initialize keys manager. */ #define LASSO_DS_ERROR_KEYS_MNGR_INIT_FAILED -110 /** * LASSO_DS_ERROR_SIGNATURE_VERIFICATION_FAILED: * * Failed to verify signature. */ #define LASSO_DS_ERROR_SIGNATURE_VERIFICATION_FAILED -111 #define LASSO_DS_ERROR_CA_CERT_CHAIN_LOAD_FAILED -112 /** * LASSO_DS_ERROR_INVALID_SIGALG: * * Invalid signature algorithm. */ #define LASSO_DS_ERROR_INVALID_SIGALG -113 /** * LASSO_DS_ERROR_DIGEST_COMPUTE_FAILED: * * Computation of an SHA1 digest failed. */ #define LASSO_DS_ERROR_DIGEST_COMPUTE_FAILED -114 /** * LASSO_DS_ERROR_SIGNATURE_TEMPLATE_NOT_FOUND: * * Signature template has not been found. */ #define LASSO_DS_ERROR_SIGNATURE_TEMPLATE_NOT_FOUND -115 /** * LASSO_DS_ERROR_TOO_MUCH_REFERENCES: * * SAML signature must contain only one reference */ #define LASSO_DS_ERROR_TOO_MUCH_REFERENCES -116 /** * LASSO_DS_ERROR_INVALID_REFERENCE_FOR_SAML: * * SAML signature reference must be to a Request, a Reponse or an Assertion ID attribute */ #define LASSO_DS_ERROR_INVALID_REFERENCE_FOR_SAML -117 /** * LASSO_DS_ERROR_DECRYPTION_FAILED: * * Decryption of an encrypted node failed */ #define LASSO_DS_ERROR_DECRYPTION_FAILED 118 /** * LASSO_DS_ERROR_ENCRYPTION_FAILED: * * Creation of an encrypted node failed */ #define LASSO_DS_ERROR_ENCRYPTION_FAILED -119 /** * LASSO_DS_ERROR_DECRYPTION_FAILED_MISSING_PRIVATE_KEY: * * Could not decrypt because the private key is not present. */ #define LASSO_DS_ERROR_DECRYPTION_FAILED_MISSING_PRIVATE_KEY 120 /* Server */ /** * LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND: * * The identifier of a provider is unknown to #LassoServer. To register a provider in a #LassoServer * object, you must use the methods lasso_server_add_provider() or * lasso_server_add_provider_from_buffer(). */ #define LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND -201 /** * LASSO_SERVER_ERROR_ADD_PROVIDER_FAILED: * * Failed to add new provider. */ #define LASSO_SERVER_ERROR_ADD_PROVIDER_FAILED -202 /** * LASSO_SERVER_ERROR_ADD_PROVIDER_PROTOCOL_MISMATCH: * * Failed to add new provider (protocol mismatch). It means that you tried to add a provider * supporting a protocol imcompatible with the protocol declared for your #LassoServer, for example * metadata for ID-FF 1.2 with metadata for SAML 2.0. */ #define LASSO_SERVER_ERROR_ADD_PROVIDER_PROTOCOL_MISMATCH -203 /** * LASSO_SERVER_ERROR_SET_ENCRYPTION_PRIVATE_KEY_FAILED: * * Failed to load encryption private key. */ #define LASSO_SERVER_ERROR_SET_ENCRYPTION_PRIVATE_KEY_FAILED 204 /** * LASSO_SERVER_ERROR_INVALID_XML: * * Parsed XML is invalid. */ #define LASSO_SERVER_ERROR_INVALID_XML -205 /** * LASSO_SERVER_ERROR_NO_PROVIDER_LOADED * * When loading a metadata file it indicates that no provider could be loaded. * It could be because the file is not well formed, or because there is no provider for the * role sought. * */ #define LASSO_SERVER_ERROR_NO_PROVIDER_LOADED 206 /* Single Logout */ /** * LASSO_LOGOUT_ERROR_UNSUPPORTED_PROFILE: * * Unsupported protocol profile */ #define LASSO_LOGOUT_ERROR_UNSUPPORTED_PROFILE -301 /** * LASSO_LOGOUT_ERROR_REQUEST_DENIED: * * Request denied by identity provider */ #define LASSO_LOGOUT_ERROR_REQUEST_DENIED 302 /** * LASSO_LOGOUT_ERROR_FEDERATION_NOT_FOUND: * * Federation not found on logout */ #define LASSO_LOGOUT_ERROR_FEDERATION_NOT_FOUND 303 /** * LASSO_LOGOUT_ERROR_UNKNOWN_PRINCIPAL: * * Unknown principal on logout */ #define LASSO_LOGOUT_ERROR_UNKNOWN_PRINCIPAL 304 /** * LASSO_LOGOUT_ERROR_PARTIAL_LOGOUT: * * Logout could not be propagated to every service provider in the current session. */ #define LASSO_LOGOUT_ERROR_PARTIAL_LOGOUT 305 /* Profile */ /** * LASSO_PROFILE_ERROR_INVALID_QUERY: * * Invalid URL query */ #define LASSO_PROFILE_ERROR_INVALID_QUERY -401 /** * LASSO_PROFILE_ERROR_INVALID_POST_MSG: * * Invalid POST message */ #define LASSO_PROFILE_ERROR_INVALID_POST_MSG -402 /** * LASSO_PROFILE_ERROR_INVALID_SOAP_MSG: * * Invalid SOAP message */ #define LASSO_PROFILE_ERROR_INVALID_SOAP_MSG -403 /** * LASSO_PROFILE_ERROR_MISSING_REQUEST: * * Missing request */ #define LASSO_PROFILE_ERROR_MISSING_REQUEST -404 /** * LASSO_PROFILE_ERROR_INVALID_HTTP_METHOD: * * Invalid HTTP method */ #define LASSO_PROFILE_ERROR_INVALID_HTTP_METHOD -405 /** * LASSO_PROFILE_ERROR_INVALID_PROTOCOLPROFILE: * * Invalid protocol profile */ #define LASSO_PROFILE_ERROR_INVALID_PROTOCOLPROFILE -406 /** * LASSO_PROFILE_ERROR_INVALID_MSG: * * Invalid message */ #define LASSO_PROFILE_ERROR_INVALID_MSG -407 /** * LASSO_PROFILE_ERROR_MISSING_REMOTE_PROVIDERID: * * ProviderID not found */ #define LASSO_PROFILE_ERROR_MISSING_REMOTE_PROVIDERID -408 /** * LASSO_PROFILE_ERROR_UNSUPPORTED_PROFILE: * * Unsupported protocol profile */ #define LASSO_PROFILE_ERROR_UNSUPPORTED_PROFILE -409 /** * LASSO_PROFILE_ERROR_UNKNOWN_PROFILE_URL: * * Unable to find Profile URL in metadata */ #define LASSO_PROFILE_ERROR_UNKNOWN_PROFILE_URL -410 /** * LASSO_PROFILE_ERROR_IDENTITY_NOT_FOUND: * * Identity not found */ #define LASSO_PROFILE_ERROR_IDENTITY_NOT_FOUND -411 /** * LASSO_PROFILE_ERROR_FEDERATION_NOT_FOUND: * * Federation not found */ #define LASSO_PROFILE_ERROR_FEDERATION_NOT_FOUND -412 /** * LASSO_PROFILE_ERROR_NAME_IDENTIFIER_NOT_FOUND: * * Name identifier not found */ #define LASSO_PROFILE_ERROR_NAME_IDENTIFIER_NOT_FOUND -413 /** * LASSO_PROFILE_ERROR_BUILDING_QUERY_FAILED: * * Error building request QUERY url */ #define LASSO_PROFILE_ERROR_BUILDING_QUERY_FAILED -414 /** * LASSO_PROFILE_ERROR_BUILDING_REQUEST_FAILED: * * Error building request object */ #define LASSO_PROFILE_ERROR_BUILDING_REQUEST_FAILED -415 /** * LASSO_PROFILE_ERROR_BUILDING_MESSAGE_FAILED: * * Error building request message */ #define LASSO_PROFILE_ERROR_BUILDING_MESSAGE_FAILED -416 /** * LASSO_PROFILE_ERROR_BUILDING_RESPONSE_FAILED: * * Error building response object */ #define LASSO_PROFILE_ERROR_BUILDING_RESPONSE_FAILED -417 /** * LASSO_PROFILE_ERROR_SESSION_NOT_FOUND: * * Session not found */ #define LASSO_PROFILE_ERROR_SESSION_NOT_FOUND -418 /** * LASSO_PROFILE_ERROR_BAD_IDENTITY_DUMP: * * Failed to create identity from dump */ #define LASSO_PROFILE_ERROR_BAD_IDENTITY_DUMP -419 /** * LASSO_PROFILE_ERROR_BAD_SESSION_DUMP: * * Failed to create session from dump */ #define LASSO_PROFILE_ERROR_BAD_SESSION_DUMP -420 /** * LASSO_PROFILE_ERROR_MISSING_RESPONSE: * * Missing response */ #define LASSO_PROFILE_ERROR_MISSING_RESPONSE -421 /** * LASSO_PROFILE_ERROR_MISSING_STATUS_CODE: * * Missing status code */ #define LASSO_PROFILE_ERROR_MISSING_STATUS_CODE -422 /** * LASSO_PROFILE_ERROR_MISSING_ARTIFACT: * * Missing SAML artifact */ #define LASSO_PROFILE_ERROR_MISSING_ARTIFACT -423 /** * LASSO_PROFILE_ERROR_MISSING_RESOURCE_OFFERING: * * Missing ressource offering */ #define LASSO_PROFILE_ERROR_MISSING_RESOURCE_OFFERING 424 /** * LASSO_PROFILE_ERROR_MISSING_SERVICE_DESCRIPTION: * * Missing service description */ #define LASSO_PROFILE_ERROR_MISSING_SERVICE_DESCRIPTION 425 /** * LASSO_PROFILE_ERROR_MISSING_SERVICE_TYPE: * * Missing service type */ #define LASSO_PROFILE_ERROR_MISSING_SERVICE_TYPE 426 /** * LASSO_PROFILE_ERROR_MISSING_ASSERTION: * * When looking for an assertion we did not found it. */ #define LASSO_PROFILE_ERROR_MISSING_ASSERTION -427 /** * LASSO_PROFILE_ERROR_MISSING_SUBJECT: * * Missing subject */ #define LASSO_PROFILE_ERROR_MISSING_SUBJECT -428 /** * LASSO_PROFILE_ERROR_MISSING_NAME_IDENTIFIER: * * Missing name identifier */ #define LASSO_PROFILE_ERROR_MISSING_NAME_IDENTIFIER -429 /** * LASSO_PROFILE_ERROR_INVALID_ARTIFACT: * * Invalid artifact */ #define LASSO_PROFILE_ERROR_INVALID_ARTIFACT -430 /** * LASSO_PROFILE_ERROR_MISSING_ENCRYPTION_PRIVATE_KEY: * * Found an encrypted element but encryption private key is not set */ #define LASSO_PROFILE_ERROR_MISSING_ENCRYPTION_PRIVATE_KEY -431 /** * LASSO_PROFILE_ERROR_STATUS_NOT_SUCCESS: * * Status code is not success */ #define LASSO_PROFILE_ERROR_STATUS_NOT_SUCCESS -432 /** * LASSO_PROFILE_ERROR_MISSING_ISSUER: * * Missing issuer */ #define LASSO_PROFILE_ERROR_MISSING_ISSUER -433 /** * LASSO_PROFILE_ERROR_MISSING_SERVICE_INSTANCE: * * Missing service instance */ #define LASSO_PROFILE_ERROR_MISSING_SERVICE_INSTANCE -434 /** * LASSO_PROFILE_ERROR_MISSING_ENDPOINT_REFERENCE: * * Missing endpoint reference */ #define LASSO_PROFILE_ERROR_MISSING_ENDPOINT_REFERENCE -435 /** * LASSO_PROFILE_ERROR_MISSING_ENDPOINT_REFERENCE_ADDRESS: * * Missing endpoint reference address */ #define LASSO_PROFILE_ERROR_MISSING_ENDPOINT_REFERENCE_ADDRESS -436 /** * LASSO_PROFILE_ERROR_INVALID_ISSUER: * * Assertion issuer is not the same as the requested issuer */ #define LASSO_PROFILE_ERROR_INVALID_ISSUER -437 /** * LASSO_PROFILE_ERROR_MISSING_SERVER: * * No server object set in the profile */ #define LASSO_PROFILE_ERROR_MISSING_SERVER -438 /** * LASSO_PROFILE_ERROR_UNKNOWN_PROVIDER: * @Deprecated: Since 2.2.3 * * The issuer of the message is unknown to us */ #define LASSO_PROFILE_ERROR_UNKNOWN_PROVIDER 439 /** * LASSO_PROFILE_ERROR_CANNOT_VERIFY_SIGNATURE: * * The profile cannot verify a signature on the message */ #define LASSO_PROFILE_ERROR_CANNOT_VERIFY_SIGNATURE 440 /** * LASSO_PROFILE_ERROR_CANNOT_FIND_A_PROVIDER: * * Profile was called without a specific provider and we cannot find one. */ #define LASSO_PROFILE_ERROR_CANNOT_FIND_A_PROVIDER -441 /** * LASSO_PROFILE_ERROR_RESPONSE_DOES_NOT_MATCH_REQUEST: * * Received response does not refer to the request sent */ #define LASSO_PROFILE_ERROR_RESPONSE_DOES_NOT_MATCH_REQUEST -442 /** * LASSO_PROFILE_ERROR_INVALID_REQUEST: * * Received request is not of the expected type. */ #define LASSO_PROFILE_ERROR_INVALID_REQUEST 443 /* * LASSO_PROFILE_ERROR_INVALID_REQUEST: * * Received request is not of the expected type. */ #define LASSO_PROFILE_ERROR_INVALID_RESPONSE 444 /** * LASSO_PROFILE_ERROR_UNSUPPPORTED_BINDING * * The responder reported that he does not support this binding */ #define LASSO_PROFILE_ERROR_UNSUPPORTED_BINDING 445 /** * LASSO_PROFILE_ERROR_INVALID_ASSERTION_CONDITIONS: * * An assertion conditions could not be validated. */ #define LASSO_PROFILE_ERROR_INVALID_ASSERTION_CONDITIONS 446 /** * LASSO_PROFILE_ERROR_INVALID_ASSERTION: * * The assertion is malformed, Issuer differs from NameQualifier of the subject, signature cannot be * verified. */ #define LASSO_PROFILE_ERROR_INVALID_ASSERTION 447 /** * LASSO_PROFILE_ERROR_UNKNOWN_ISSUER: * * The issuer of an assertion is unkown to us. */ #define LASSO_PROFILE_ERROR_UNKNOWN_ISSUER 448 /** * LASSO_PROFILE_ERROR_ISSUER_IS_NOT_AN_IDP * * The issuer of an assertion is not considered as an IdP */ #define LASSO_PROFILE_ERROR_ISSUER_IS_NOT_AN_IDP 449 /** * LASSO_PROFILE_ERROR_REQUEST_DENIED: * * Generic error when an IdP or an SP return the RequestDenied status code in its response. * */ #define LASSO_PROFILE_ERROR_REQUEST_DENIED 450 /** * LASSO_PROFILE_ERROR_ENDPOINT_INDEX_NOT_FOUND * * A received artifact contains an andpoint index which does not exist in the metadata of the * corresponding provider. */ #define LASSO_PROFILE_ERROR_ENDPOINT_INDEX_NOT_FOUND 451 /** * LASSO_PROFILE_ERROR_INVALID_IDP_LIST * * The IDP list is invalid */ #define LASSO_PROFILE_ERROR_INVALID_IDP_LIST 452 /* functions/methods parameters checking */ /** * LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ: * * An object type provided as parameter is invalid or object is NULL. */ #define LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ -501 /** * LASSO_PARAM_ERROR_INVALID_VALUE: * * A parameter value is invalid. */ #define LASSO_PARAM_ERROR_INVALID_VALUE -502 /** * LASSO_PARAM_ERROR_CHECK_FAILED: * * The error return location should be either NULL or contains a NULL error. */ #define LASSO_PARAM_ERROR_CHECK_FAILED -503 /** * LASSO_PARAM_ERROR_NON_INITIALIZED_OBJECT: * * The call failed because an argument is a partially-initialized object. */ #define LASSO_PARAM_ERROR_NON_INITIALIZED_OBJECT -504 /* Single Sign-On */ /** * LASSO_LOGIN_ERROR_FEDERATION_NOT_FOUND: * * Federation not found on login */ #define LASSO_LOGIN_ERROR_FEDERATION_NOT_FOUND 601 /** * LASSO_LOGIN_ERROR_CONSENT_NOT_OBTAINED: * * Consent of the principal was not obtained. */ #define LASSO_LOGIN_ERROR_CONSENT_NOT_OBTAINED 602 /** * LASSO_LOGIN_ERROR_INVALID_NAMEIDPOLICY: * * Invalid NameIDPolicy in lib:AuthnRequest */ #define LASSO_LOGIN_ERROR_INVALID_NAMEIDPOLICY -603 /** * LASSO_LOGIN_ERROR_REQUEST_DENIED: * * Request denied. */ #define LASSO_LOGIN_ERROR_REQUEST_DENIED 604 /** * LASSO_LOGIN_ERROR_INVALID_SIGNATURE: * * The signature of a message or of an assertion is invalid. That is badly computed or with an * unknown key. */ #define LASSO_LOGIN_ERROR_INVALID_SIGNATURE 605 /** * LASSO_LOGIN_ERROR_UNSIGNED_AUTHN_REQUEST: * * An unsigned authn request was received but the metadata specify that they must be signed. */ #define LASSO_LOGIN_ERROR_UNSIGNED_AUTHN_REQUEST 606 /** * LASSO_LOGIN_ERROR_STATUS_NOT_SUCCESS: * * Status code is not success */ #define LASSO_LOGIN_ERROR_STATUS_NOT_SUCCESS 607 /** * LASSO_LOGIN_ERROR_UNKNOWN_PRINCIPAL: * * Unknown principal */ #define LASSO_LOGIN_ERROR_UNKNOWN_PRINCIPAL 608 /** * LASSO_LOGIN_ERROR_NO_DEFAULT_ENDPOINT: * * No default endpoint */ #define LASSO_LOGIN_ERROR_NO_DEFAULT_ENDPOINT 609 /** * LASSO_LOGIN_ERROR_ASSERTION_REPLAY: * * Assertion replay */ #define LASSO_LOGIN_ERROR_ASSERTION_REPLAY 610 /** * LASSO_LOGIN_ERROR_ASSERTION_DOES_NOT_MATCH_REQUEST_ID: * * If inResponseTo attribute is present, a matching request must be present too in the LassoLogin object */ #define LASSO_LOGIN_ERROR_ASSERTION_DOES_NOT_MATCH_REQUEST_ID 611 /** * LASSO_LOGIN_ERROR_INVALID_ASSERTION_SIGNATURE: * * Signature on an assertion could not be verified. */ #define LASSO_LOGIN_ERROR_INVALID_ASSERTION_SIGNATURE 612 /* Federation Termination Notification */ /** * LASSO_DEFEDERATION_ERROR_MISSING_NAME_IDENTIFIER: * * Name identifier not found in request */ #define LASSO_DEFEDERATION_ERROR_MISSING_NAME_IDENTIFIER -700 /* Soap */ /** * LASSO_SOAP_ERROR_REDIRECT_REQUEST_FAULT: * * A SOAP Fault containing a Redirect Request was received */ #define LASSO_SOAP_ERROR_REDIRECT_REQUEST_FAULT 800 #define LASSO_SOAP_FAULT_REDIRECT_REQUEST LASSO_SOAP_ERROR_REDIRECT_REQUEST_FAULT /** * LASSO_SOAP_ERROR_MISSING_ENVELOPE: * * Missing SOAP envelope */ #define LASSO_SOAP_ERROR_MISSING_ENVELOPE -801 /** * LASSO_SOAP_ERROR_MISSING_HEADER: * * Missing SOAP header */ #define LASSO_SOAP_ERROR_MISSING_HEADER -802 /** * LASSO_SOAP_ERROR_MISSING_BODY: * * Missing SOAP body */ #define LASSO_SOAP_ERROR_MISSING_BODY -803 /** * LASSO_SOAP_ERROR_MISSING_SOAP_FAULT_DETAIL: * * Missing SOAP fault detail */ #define LASSO_SOAP_ERROR_MISSING_SOAP_FAULT_DETAIL -804 /* Name Identifier Mapping */ /** * LASSO_NAME_IDENTIFIER_MAPPING_ERROR_MISSING_TARGET_NAMESPACE: * * Target name space not found */ #define LASSO_NAME_IDENTIFIER_MAPPING_ERROR_MISSING_TARGET_NAMESPACE -900 #define LASSO_NAME_IDENTIFIER_MAPPING_ERROR_FORBIDDEN_CALL_ON_THIS_SIDE -901 #define LASSO_NAME_IDENTIFIER_MAPPING_ERROR_MISSING_TARGET_IDENTIFIER -902 /* Lasso registry */ /** * LASSO_REGISTRY_ERROR_KEY_EXISTS: * * Key alreadys exists in the registry */ #define LASSO_REGISTRY_ERROR_KEY_EXISTS -1400 /* Lasso provider */ /** * LASSO_PROVIDER_ERROR_MISSING_PUBLIC_KEY: * * The provider has no known public key */ #define LASSO_PROVIDER_ERROR_MISSING_PUBLIC_KEY -1500 /** * LASSO_ASSERTION_QUERY_ERROR_ATTRIBUTE_REQUEST_ALREADY_EXIST: * * Tried to add the same attribute request a second time. */ #define LASSO_ASSERTION_QUERY_ERROR_ATTRIBUTE_REQUEST_ALREADY_EXIST 1901 /** * LASSO_ASSERTION_QUERY_ERROR_NOT_AN_ATTRIBUTE_QUERY * * The current assertion query does not contain an attribute query. */ #define LASSO_ASSERTION_QUERY_ERROR_NOT_AN_ATTRIBUTE_QUERY 1902 /** * LASSO_XMLENC_ERROR_INVALID_ENCRYPTED_DATA * * The EncryptedData node is invalid, look at the logs. */ #define LASSO_XMLENC_ERROR_INVALID_ENCRYPTED_DATA -2001 /** * LASSO_PAOS_ERROR_MISSING_REQUEST * * Missing PAOS Request */ #define LASSO_PAOS_ERROR_MISSING_REQUEST -2101 /** * LASSO_PAOS_ERROR_MISSING_RESPONSE * * Missing PAOS Response */ #define LASSO_PAOS_ERROR_MISSING_RESPONSE -2102 /** * LASSO_PAOS_ERROR_MISSING_RESPONSE_CONSUMER_URL * * Missing paos:Request responseConsumerURL */ #define LASSO_PAOS_ERROR_MISSING_RESPONSE_CONSUMER_URL -2103 /** * LASSO_ECP_ERROR_MISSING_REQUEST * * Missing ECP Request */ #define LASSO_ECP_ERROR_MISSING_REQUEST -2201 /** * LASSO_ECP_ERROR_MISSING_RESPONSE * * Missing ECP Response */ #define LASSO_ECP_ERROR_MISSING_RESPONSE -2202 /** * LASSO_ECP_ERROR_MISSING_RELAYSTATE * * Missing ECP RelayState */ #define LASSO_ECP_ERROR_MISSING_RELAYSTATE -2203 /** * LASSO_ECP_ERROR_MISSING_AUTHN_REQUEST * * Missing samlp:AuthnRequest in ECP request */ #define LASSO_ECP_ERROR_MISSING_AUTHN_REQUEST -2204 /** * LASSO_ECP_ERROR_MISSING_SAML_RESPONSE * * Missing samlp:Response in IdP ECP response */ #define LASSO_ECP_ERROR_MISSING_SAML_RESPONSE -2205 /** * LASSO_ECP_ERROR_ASSERTION_CONSUMER_URL_MISMATCH * * The ecp:Request responseConsumerURL and ecp:Response AssertionConsumerURL do not match */ #define LASSO_ECP_ERROR_ASSERTION_CONSUMER_URL_MISMATCH -2206 lasso-2.8.2/lasso/PaxHeaders/utils.c0000644000000000000000000000013114364261206014352 xustar0030 mtime=1674666630.754769169 30 atime=1678814242.753509426 29 ctime=1678814320.02994773 lasso-2.8.2/lasso/utils.c0000644000175000017500000000767614364261206017643 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include #include #include #include #include "utils.h" /** * SECTION:utilities * @short_description: Misc functions used internally in Lasso * @stability: Internal * @include: utils.h */ /** * lasso_safe_prefix_string: * @str: a C string * @length: the maximum length of an extract of the string * * Produce a limite length safe extract of a string, for debugging purpose. Special characters are * replaced by their C string 'quoting'. * * Return value: a C string, of size < @length where newline, carriage returns and tabs are replaced * by their C quotes. */ gchar* lasso_safe_prefix_string(const gchar *str, gsize length) { GString *output; gchar *ret; gsize outputted = 0, i = 0; if (str == NULL) { return strdup("NULL"); } output = g_string_sized_new(length); for (i = 0; i < length && str[i] && outputted < length; i++) { gchar c = 0; guint len; if ((guchar)str[i] < 128 && (guchar)str[i] > 31) { g_string_append_c(output, str[i]); outputted++; continue; } switch (str[i]) { case '\n': c = 'n'; break; case '\t': c = 't'; break; case '\r': c = 'r'; } if (c) { if (outputted - length > 1) { g_string_append_c(output, '\\'); g_string_append_c(output, c); outputted += 2; continue; } } if (c < 8) { len = 3; } else if (c < 64) { len = 4; } else { len = 5; } if (outputted - length >= len) { g_string_append_c(output, '\\'); g_string_append_printf(output, "%o", (guint)str[i]); } break; } ret = output->str; lasso_release_gstring(output, FALSE); return ret; } /** * lasso_gobject_is_of_type: * @a: a #GObject object * @b: a #GType value * * Return true if object @a is of type @b. * * Return value: whether object @a is of type @b. */ int lasso_gobject_is_of_type(GObject *a, GType b) { GType typeid = (GType)b; if (a && G_IS_OBJECT(a)) { return G_OBJECT_TYPE(G_OBJECT(a)) == typeid ? 0 : 1; } return 1; } static int lasso_extract_gtype_from_list_compare_func(const void *a, const void *b) { return lasso_gobject_is_of_type((GObject*)a, (GType)b); } GObject* lasso_extract_gtype_from_list(GType type, GList *list) { GList *needle; needle = g_list_find_custom(list, (gconstpointer)type, lasso_extract_gtype_from_list_compare_func); if (needle) { return needle->data; } return NULL; } /** * lasso_extract_gtype_from_list_or_new: * @type: a #GType * @list: a pointer to a #GList pointer variable * @create: whether to look up an object whose #GType is type, or to just create it. * * If create is TRUE, add a new object of type @type to @list and return it. * Otherwise try to look up an object of type @type, and if none is found add a new one and return * it. * * Return value: a #GObject of type @type. */ GObject * lasso_extract_gtype_from_list_or_new(GType type, GList **list, gboolean create) { GObject *result = NULL; g_assert (list); if (! create) { result = lasso_extract_gtype_from_list(type, *list); } if (result == NULL) { result = g_object_new(type, NULL); lasso_list_add_new_gobject(*list, result); } return result; } lasso-2.8.2/lasso/PaxHeaders/registry.h0000644000000000000000000000013214114336625015071 xustar0030 mtime=1630649749.818436908 30 atime=1678814151.112994426 30 ctime=1678814320.013947639 lasso-2.8.2/lasso/registry.h0000644000175000017500000000326414114336625020346 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __REGISTRY_H__ #define __REGISTRY_H__ #include #include "export.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ typedef const char *(*LassoRegistryTranslationFunction)(const char *from_namespace, const char *from_name, const char *to_namespace); LASSO_EXPORT lasso_error_t lasso_registry_default_add_direct_mapping(const char *from_namespace, const char *from_name, const char *to_namespace, const char *to_name); LASSO_EXPORT lasso_error_t lasso_registry_default_add_functional_mapping(const char*from_namespace, const char *to_namespace, LassoRegistryTranslationFunction translation_function); LASSO_EXPORT const char* lasso_registry_default_get_mapping(const char *from_namespace, const char *from_name, const char *to_namespace); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __REGISTRY_H__ */ lasso-2.8.2/lasso/PaxHeaders/key.c0000644000000000000000000000013114364261206014002 xustar0030 mtime=1674666630.746769119 29 atime=1678814243.37351293 30 ctime=1678814320.033947753 lasso-2.8.2/lasso/key.c0000644000175000017500000002575114364261206017265 0ustar00bdauvergnebdauvergne00000000000000/* * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2011 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "key.h" #include "keyprivate.h" #include "xml/private.h" #include "xmlsec/xmltree.h" /*****************************************************************************/ /* private methods */ /*****************************************************************************/ struct _LassoKeyPrivate { enum _LassoKeyType type; union { LassoSignatureContext signature; } context; }; #define LASSO_KEY_GET_PRIVATE(o) \ (G_TYPE_INSTANCE_GET_PRIVATE ((o), LASSO_TYPE_KEY, LassoKeyPrivate)) static struct XmlSnippet schema_snippets[] = { {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void instance_init(LassoKey *key, G_GNUC_UNUSED void *unused) { key->private_data = LASSO_KEY_GET_PRIVATE(key); } static void dispose(GObject *g_object) { LassoKey *key = (LassoKey*)g_object; if (key->private_data) { switch (key->private_data->type) { case LASSO_KEY_TYPE_FOR_SIGNATURE: lasso_assign_new_signature_context( key->private_data->context.signature, LASSO_SIGNATURE_CONTEXT_NONE); break; } } G_OBJECT_CLASS(parent_class)->dispose(G_OBJECT(key)); } static void class_init(LassoKeyClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "Key"); lasso_node_class_set_ns(nclass, LASSO_LASSO_HREF, LASSO_LASSO_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); g_type_class_add_private(klass, sizeof(LassoKeyPrivate)); G_OBJECT_CLASS(klass)->dispose = dispose; } GType lasso_key_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoKeyClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoKey), 0, (GInstanceInitFunc) instance_init, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoKey", &this_info, 0); } return this_type; } static LassoKey* lasso_key_new() { return g_object_new(LASSO_TYPE_KEY, NULL); } static LassoKey* lasso_key_new_for_signature_from_context(LassoSignatureContext context) { LassoKey *key = lasso_key_new(); key->private_data->type = LASSO_KEY_TYPE_FOR_SIGNATURE; lasso_assign_new_signature_context( key->private_data->context.signature, context); if (! lasso_validate_signature_context(key->private_data->context.signature)) { lasso_release_gobject(key); } return key; } /** * lasso_key_new_for_signature_from_file: * @filename_or_buffer: a file path of a string containing the key PEM or Base64 encoded * @password: an eventual password to decoded the private key contained in @buffer * @signature_method: the signature method to associate to this key * @certificate: a certificate as a file path or PEM encoded in a NULL-terminated string, to * associate with the key, it will be used to fill the KeyInfo node in an eventual signature. * * Create a new #LassoKey object, you can use it to sign XML message or to specify the key of a * provider. * * Return value:(transfer full): a newly allocated #LassoKey object */ LassoKey* lasso_key_new_for_signature_from_file(char *filename_or_buffer, char *password, LassoSignatureMethod signature_method, char *certificate) { return lasso_key_new_for_signature_from_context( lasso_make_signature_context_from_path_or_string(filename_or_buffer, password, signature_method, certificate)); } /** * lasso_key_new_for_signature_from_memory: * @buffer: a byte buffer of size @size * @size: the size of @buffer * @password: an eventual password to decoded the private key contained in @buffer * @signature_method: the signature method to associate to this key * @certificate: a certificate as a file path or PEM encoded in a NULL-terminated string, to * associate with the key, it will be used to fill the KeyInfo node in an eventual signature. * * Create a new #LassoKey object, you can use it to sign XML message or to specify the key of a * provider. * * Return value:(transfer full): a newly allocated #LassoKey object */ LassoKey* lasso_key_new_for_signature_from_memory(const void *buffer, size_t size, char *password, LassoSignatureMethod signature_method, char *certificate) { return lasso_key_new_for_signature_from_context( lasso_make_signature_context_from_buffer(buffer, size, password, signature_method, certificate)); } /** * lasso_key_new_for_signature_from_base64_string: * @base64_string: a NULL-terminated string containing a base64 encode representation of the key * @password: an eventual password to decoded the private key contained in @buffer * @signature_method: the signature method to associate to this key * @certificate: a certificate as a file path or PEM encoded in a NULL-terminated string, to * associate with the key, it will be used to fill the KeyInfo node in an eventual signature. * * Create a new #LassoKey object, you can use it to sign XML message or to specify the key of a * provider. * * Return value:(transfer full): a newly allocated #LassoKey object */ LassoKey* lasso_key_new_for_signature_from_base64_string(char *base64_string, char *password, LassoSignatureMethod signature_method, char *certificate) { LassoKey *key = NULL; char *buffer = NULL; int length = 0; if (lasso_base64_decode(base64_string, &buffer, &length)) { key = lasso_key_new_for_signature_from_context( lasso_make_signature_context_from_buffer(buffer, length, password, signature_method, certificate)); lasso_release_string(buffer); } return key; } static xmlNode * find_xmlnode_with_saml2_id(xmlNode *xmlnode, const char *id) { xmlNode *found = NULL; xmlNode *t; if (! xmlnode) return NULL; if (xmlHasProp(xmlnode, BAD_CAST "ID")) { xmlChar *value; value = xmlGetProp(xmlnode, BAD_CAST "ID"); if (lasso_strisequal((char*)value, id)) { found = xmlnode; } xmlFree(value); } if (found) { return found; } t = xmlSecGetNextElementNode(xmlnode->children); while (t) { found = find_xmlnode_with_saml2_id(t, id); if (found) { return found; } t = xmlSecGetNextElementNode(t->next); } return NULL; } /** * lasso_key_saml2_xml_verify: * @key: a #LassoKey object * @id: the value of the ID attribute of signed node * @document: the document containing the signed node * * Verify the first signature node child of the node with the given id. It follows from the profile * of XMLDsig used by the SAML 2.0 specification. * * Return value: 0 if the signature validate, an error code otherwise. */ lasso_error_t lasso_key_saml2_xml_verify(LassoKey *key, char *id, xmlNode *document) { xmlNode *signed_node; LassoSignatureContext signature_context; signed_node = find_xmlnode_with_saml2_id(document, id); if (! signed_node) { return LASSO_DS_ERROR_INVALID_REFERENCE_FOR_SAML; } signature_context = lasso_key_get_signature_context(key); return lasso_verify_signature(signed_node, signed_node->doc, "ID", NULL, signature_context.signature_key, NO_OPTION, NULL); } /** * lasso_key_saml2_xml_sign: * @key: a #LassoKey object * @id: the value of the ID attribute of signed node * @document: the document containing the signed node * * Sign the first signature node child of the node with the given id. It no signature node is found * a new one is added at the end of the children list of the signed node. * * The passed document node is modified in-place. * * Return value: The modified xmlNode object, or NULL if the signature failed. */ xmlNode* lasso_key_saml2_xml_sign(LassoKey *key, const char *id, xmlNode *document) { xmlNode *signed_node; LassoSignatureContext signature_context; signed_node = find_xmlnode_with_saml2_id(document, id); if (! signed_node) { return NULL; } signature_context = lasso_key_get_signature_context(key); lasso_xmlnode_add_saml2_signature_template(signed_node, signature_context, id); if (lasso_sign_node(signed_node, signature_context, "ID", id) == 0) { return document; } else { return NULL; } } /** * lasso_key_query_verify: * key: a #LassoKey object * query: a raw HTTP query string * * Check if this query string contains a proper SAML2 signature for this key. * * Return value: 0 if a valid signature was found, an error code otherwise. */ lasso_error_t lasso_key_query_verify(LassoKey *key, const char *query) { LassoSignatureContext signature_context; lasso_bad_param(KEY, key); signature_context = lasso_key_get_signature_context(key); if (! lasso_validate_signature_context(signature_context)) return LASSO_ERROR_UNDEFINED; return lasso_saml2_query_verify_signature(query, signature_context.signature_key); } /** * lasso_key_query_verify: * key: a #LassoKey object * query: a raw HTTP query string * * Sign the given query string using the given key. * * Return value: the signed query string. */ char* lasso_key_query_sign(LassoKey *key, const char *query) { LassoSignatureContext signature_context; if (! LASSO_IS_KEY(key)) return NULL; signature_context = lasso_key_get_signature_context(key); if (! lasso_validate_signature_context(signature_context)) return NULL; return lasso_query_sign((char*)query, signature_context); } /** * lasso_key_get_signature_context: * @key: a #LassoKey object * * Private method to extract the signature context embedded in a LassoKey object. * * Return value: a #LassoSignatureContext structure value. */ LassoSignatureContext lasso_key_get_signature_context(LassoKey *key) { if (key->private_data && key->private_data->type == LASSO_KEY_TYPE_FOR_SIGNATURE) { return key->private_data->context.signature; } return LASSO_SIGNATURE_CONTEXT_NONE; } /** * lasso_key_get_key_type: * @key: a #LassoKey object * * Return the type of key, i.e. which operation it supports. */ LassoKeyType lasso_key_get_key_type(LassoKey *key) { lasso_return_val_if_fail(LASSO_IS_KEY(key), LASSO_KEY_TYPE_FOR_SIGNATURE); return key->private_data->type; } lasso-2.8.2/lasso/PaxHeaders/backward_comp.h0000644000000000000000000000013214114336625016015 xustar0030 mtime=1630649749.794436646 30 atime=1678814151.112994426 30 ctime=1678814320.041947798 lasso-2.8.2/lasso/backward_comp.h0000644000175000017500000000263714114336625021275 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . * */ #ifndef BACKWARD_COMP_H #define BACKWARD_COMP_H 1 /* This file contains re-implementations of functions which only exists in recent version of our * dependencies, like GLib, OpenSSL or libxml. */ /* GLIB backward-compatibility */ #if (GLIB_MAJOR_VERSION == 2 && GLIB_MINOR_VERSION < 16) #include static inline int g_strcmp0(const char *str1, const char *str2) { if (str1 == NULL && str2 == NULL) { return 0; } if (str1 == NULL) { return -1; } if (str2 == NULL) { return 1; } return strcmp(str1, str2); } #endif #endif /* BACKWARD_COMP_H */ lasso-2.8.2/lasso/PaxHeaders/xml0000644000000000000000000000013214404126160013564 xustar0030 mtime=1678814320.833952307 30 atime=1678814326.421984131 30 ctime=1678814320.833952307 lasso-2.8.2/lasso/xml/0000755000175000017500000000000014404126160017111 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/lasso/xml/PaxHeaders/saml_assertion.c0000644000000000000000000000013214114336625017037 xustar0030 mtime=1630649749.874437517 30 atime=1678814201.989279651 30 ctime=1678814320.345949528 lasso-2.8.2/lasso/xml/saml_assertion.c0000644000175000017500000001716414114336625022320 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "private.h" #include "../utils.h" #include #include #include #include "saml_assertion.h" /** * SECTION:saml_assertion * @short_description: <saml:Assertion> * *

Schema fragment for saml:Assertion * * * * * * * * * * * * * * * * * * * * * * From oasis-sstc-saml-schema-assertion-1.0.xsd: * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "Conditions", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSamlAssertion, Conditions), NULL, NULL, NULL}, { "Advice", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSamlAssertion, Advice), NULL, NULL, NULL}, { "SubjectStatement", SNIPPET_NODE,G_STRUCT_OFFSET(LassoSamlAssertion, SubjectStatement), NULL, NULL, NULL}, { "AuthenticationStatement", SNIPPET_NODE | SNIPPET_JUMP_ON_MATCH | SNIPPET_BACK_1, G_STRUCT_OFFSET(LassoSamlAssertion, AuthenticationStatement), NULL, NULL, NULL}, { "AttributeStatement", SNIPPET_NODE | SNIPPET_JUMP_ON_MATCH | SNIPPET_BACK_2, G_STRUCT_OFFSET(LassoSamlAssertion, AttributeStatement), NULL, NULL, NULL}, { "Signature", SNIPPET_SIGNATURE, G_STRUCT_OFFSET(LassoSamlAssertion, AssertionID), NULL, LASSO_DS_PREFIX, LASSO_DS_HREF}, { "MajorVersion", SNIPPET_ATTRIBUTE | SNIPPET_INTEGER, G_STRUCT_OFFSET(LassoSamlAssertion, MajorVersion), NULL, NULL, NULL}, { "MinorVersion", SNIPPET_ATTRIBUTE | SNIPPET_INTEGER, G_STRUCT_OFFSET(LassoSamlAssertion, MinorVersion), NULL, NULL, NULL}, { "AssertionID", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSamlAssertion, AssertionID), NULL, NULL, NULL}, { "Issuer", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSamlAssertion, Issuer), NULL, NULL, NULL}, { "IssueInstant", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSamlAssertion, IssueInstant), NULL, NULL, NULL}, /* hidden fields; use in lasso dumps */ { "SignType", SNIPPET_ATTRIBUTE | SNIPPET_INTEGER | SNIPPET_LASSO_DUMP, G_STRUCT_OFFSET(LassoSamlAssertion, sign_type), NULL, NULL, NULL}, { "SignMethod", SNIPPET_ATTRIBUTE | SNIPPET_INTEGER | SNIPPET_LASSO_DUMP, G_STRUCT_OFFSET(LassoSamlAssertion, sign_method), NULL, NULL, NULL}, { "PrivateKeyFile", SNIPPET_CONTENT | SNIPPET_LASSO_DUMP, G_STRUCT_OFFSET(LassoSamlAssertion, private_key_file), NULL, NULL, NULL}, { "CertificateFile", SNIPPET_CONTENT | SNIPPET_LASSO_DUMP, G_STRUCT_OFFSET(LassoSamlAssertion, certificate_file), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; static void insure_namespace(xmlNode *xmlnode, xmlNs *ns) { /* insure children are kept in saml namespace */ xmlNode *t; xmlNs *xsi_ns; t = xmlnode->children; while (t) { if (t->type != XML_ELEMENT_NODE) { t = t->next; continue; } if (xmlnode->ns && strcmp((char*)xmlnode->ns->href, LASSO_LIB_HREF) == 0) { char *typename, *gtypename; GType gtype; typename = g_strdup_printf("lib:%sType", xmlnode->name); gtypename = g_strdup_printf("LassoSaml%s", xmlnode->name); gtype = g_type_from_name(gtypename); if (gtype) { xmlSetNs(xmlnode, ns); if (xmlHasNsProp(t, (xmlChar*)"type", (xmlChar*)LASSO_XSI_HREF) == NULL) { xsi_ns = xmlNewNs(xmlnode, (xmlChar*)LASSO_XSI_HREF, (xmlChar*)LASSO_XSI_PREFIX); xmlNewNsProp(xmlnode, xsi_ns, (xmlChar*)"type", (xmlChar*)typename); } } lasso_release(gtypename); lasso_release(typename); } insure_namespace(t, ns); t = t->next; } } static xmlNode* get_xmlNode(LassoNode *node, gboolean lasso_dump) { xmlNode *xmlnode; xmlNs *ns; xmlnode = parent_class->get_xmlNode(node, lasso_dump); ns = xmlSearchNs(NULL, xmlnode, (xmlChar*)"saml"); insure_namespace(xmlnode, ns); return xmlnode; } /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSamlAssertionClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->get_xmlNode = get_xmlNode; nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "Assertion"); lasso_node_class_set_ns(nclass, LASSO_SAML_ASSERTION_HREF, LASSO_SAML_ASSERTION_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); nclass->node_data->id_attribute_name = "AssertionID"; nclass->node_data->id_attribute_offset = G_STRUCT_OFFSET(LassoSamlAssertion, AssertionID); nclass->node_data->sign_type_offset = G_STRUCT_OFFSET(LassoSamlAssertion, sign_type); nclass->node_data->sign_method_offset = G_STRUCT_OFFSET(LassoSamlAssertion, sign_method); nclass->node_data->private_key_file_offset = G_STRUCT_OFFSET(LassoSamlAssertion, private_key_file); nclass->node_data->certificate_file_offset = G_STRUCT_OFFSET(LassoSamlAssertion, certificate_file); nclass->node_data->keep_xmlnode = TRUE; } GType lasso_saml_assertion_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSamlAssertionClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSamlAssertion), 0, NULL, NULL, }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoSamlAssertion", &this_info, 0); } return this_type; } /** * lasso_saml_assertion_new: * * Creates a new #LassoSamlAssertion object. * * Return value: a newly created #LassoSamlAssertion object **/ LassoSamlAssertion* lasso_saml_assertion_new() { return g_object_new(LASSO_TYPE_SAML_ASSERTION, NULL); } lasso-2.8.2/lasso/xml/PaxHeaders/saml_subject_locality.c0000644000000000000000000000013214114336625020367 xustar0030 mtime=1630649749.874437517 30 atime=1678814210.461327318 30 ctime=1678814320.365949642 lasso-2.8.2/lasso/xml/saml_subject_locality.c0000644000175000017500000000637214114336625023647 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "private.h" #include "saml_subject_locality.h" /** * SECTION:saml_subject_locality * @short_description: <saml:SubjectLocality> * *
Schema fragment for saml:SubjectLocality * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "IPAddress", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSamlSubjectLocality, IPAddress), NULL, NULL, NULL}, { "DNSAddress", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSamlSubjectLocality, DNSAddress), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSamlSubjectLocalityClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "SubjectLocality"); lasso_node_class_set_ns(nclass, LASSO_SAML_ASSERTION_HREF, LASSO_SAML_ASSERTION_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_saml_subject_locality_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSamlSubjectLocalityClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSamlSubjectLocality), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoSamlSubjectLocality", &this_info, 0); } return this_type; } /** * lasso_saml_subject_locality_new: * * Creates a new #LassoSamlSubjectLocality object. * * Return value: a newly created #LassoSamlSubjectLocality object **/ LassoNode* lasso_saml_subject_locality_new() { return g_object_new(LASSO_TYPE_SAML_SUBJECT_LOCALITY, NULL); } lasso-2.8.2/lasso/xml/PaxHeaders/saml_authentication_statement.h0000644000000000000000000000013214114336625022140 xustar0030 mtime=1630649749.874437517 30 atime=1678814151.024993934 30 ctime=1678814320.277949142 lasso-2.8.2/lasso/xml/saml_authentication_statement.h0000644000175000017500000000607314114336625025416 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAML_AUTHENTICATION_STATEMENT_H__ #define __LASSO_SAML_AUTHENTICATION_STATEMENT_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "saml_authority_binding.h" #include "saml_subject_locality.h" #include "saml_subject_statement_abstract.h" #define LASSO_TYPE_SAML_AUTHENTICATION_STATEMENT (lasso_saml_authentication_statement_get_type()) #define LASSO_SAML_AUTHENTICATION_STATEMENT(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML_AUTHENTICATION_STATEMENT,\ LassoSamlAuthenticationStatement)) #define LASSO_SAML_AUTHENTICATION_STATEMENT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML_AUTHENTICATION_STATEMENT, \ LassoSamlAuthenticationStatementClass)) #define LASSO_IS_SAML_AUTHENTICATION_STATEMENT(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML_AUTHENTICATION_STATEMENT)) #define LASSO_IS_SAML_AUTHENTICATION_STATEMENT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML_AUTHENTICATION_STATEMENT)) #define LASSO_SAML_AUTHENTICATION_STATEMENT_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML_AUTHENTICATION_STATEMENT, \ LassoSamlAuthenticationStatementClass)) typedef struct _LassoSamlAuthenticationStatement LassoSamlAuthenticationStatement; typedef struct _LassoSamlAuthenticationStatementClass LassoSamlAuthenticationStatementClass; struct _LassoSamlAuthenticationStatement { LassoSamlSubjectStatementAbstract parent; /*< public >*/ /* */ LassoSamlSubjectLocality *SubjectLocality; /* */ GList *AuthorityBinding; /* of LassoNode */ /* */ char *AuthenticationMethod; /* */ char *AuthenticationInstant; }; struct _LassoSamlAuthenticationStatementClass { LassoSamlSubjectStatementAbstractClass parent; }; LASSO_EXPORT GType lasso_saml_authentication_statement_get_type(void); LASSO_EXPORT LassoNode* lasso_saml_authentication_statement_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAML_AUTHENTICATION_STATEMENT_H__ */ lasso-2.8.2/lasso/xml/PaxHeaders/saml-2.00000644000000000000000000000013214404126160015015 xustar0030 mtime=1678814320.669951374 30 atime=1678814326.421984131 30 ctime=1678814320.669951374 lasso-2.8.2/lasso/xml/saml-2.0/0000755000175000017500000000000014404126160020342 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/samlp2_name_id_policy.h0000644000000000000000000000013214114336625021503 xustar0030 mtime=1630649749.870437474 30 atime=1678814151.020993912 30 ctime=1678814320.573950826 lasso-2.8.2/lasso/xml/saml-2.0/samlp2_name_id_policy.h0000644000175000017500000000670714114336625024765 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAMLP2_NAME_ID_POLICY_H__ #define __LASSO_SAMLP2_NAME_ID_POLICY_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "../xml.h" #define LASSO_TYPE_SAMLP2_NAME_ID_POLICY (lasso_samlp2_name_id_policy_get_type()) #define LASSO_SAMLP2_NAME_ID_POLICY(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAMLP2_NAME_ID_POLICY, \ LassoSamlp2NameIDPolicy)) #define LASSO_SAMLP2_NAME_ID_POLICY_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAMLP2_NAME_ID_POLICY, \ LassoSamlp2NameIDPolicyClass)) #define LASSO_IS_SAMLP2_NAME_ID_POLICY(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAMLP2_NAME_ID_POLICY)) #define LASSO_IS_SAMLP2_NAME_ID_POLICY_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAMLP2_NAME_ID_POLICY)) #define LASSO_SAMLP2_NAME_ID_POLICY_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAMLP2_NAME_ID_POLICY, \ LassoSamlp2NameIDPolicyClass)) typedef struct _LassoSamlp2NameIDPolicy LassoSamlp2NameIDPolicy; typedef struct _LassoSamlp2NameIDPolicyClass LassoSamlp2NameIDPolicyClass; /** * LassoSamlp2NameIDPolicy: * @Format: the name-identifier format, see #LASSO_SAML2_NAME_IDENTIFIER_FORMAT_EMAIL, * #LASSO_SAML2_NAME_IDENTIFIER_FORMAT_X509, #LASSO_SAML2_NAME_IDENTIFIER_FORMAT_WINDOWS, * #LASSO_SAML2_NAME_IDENTIFIER_FORMAT_KERBEROS, #LASSO_SAML2_NAME_IDENTIFIER_FORMAT_ENTITY, * #LASSO_SAML2_NAME_IDENTIFIER_FORMAT_PERSISTENT, #LASSO_SAML2_NAME_IDENTIFIER_FORMAT_TRANSIENT or * #LASSO_SAML2_NAME_IDENTIFIER_FORMAT_ENCRYPTED. * @SPNameQualifier: other providerID to use as SPNameQualifier in the returned assertion. By * default an IdP create a NameID for the requesting entity, this field allows to obtain a NameID * qualified for a third party. * @AllowCreate: authorize the identity provider to create a new federation, otherwise it must * report a failure in case no existing federation is found (status code of * #LASSO_LIB_STATUS_CODE_FEDERATION_DOES_NOT_EXIST and error code of * #LASSO_PROFILE_ERROR_FEDERATION_NOT_FOUND). * * NameIDPolicy element is part of AuthnRequest and allows to give hint to the identity provider * about the NameID the service provider desire to receive. */ struct _LassoSamlp2NameIDPolicy { LassoNode parent; /*< public >*/ /* attributes */ char *Format; char *SPNameQualifier; gboolean AllowCreate; }; struct _LassoSamlp2NameIDPolicyClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_samlp2_name_id_policy_get_type(void); LASSO_EXPORT LassoNode* lasso_samlp2_name_id_policy_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAMLP2_NAME_ID_POLICY_H__ */ lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/saml2_name_id.h0000644000000000000000000000013114114336625017743 xustar0029 mtime=1630649749.86643743 30 atime=1678814151.016993891 30 ctime=1678814320.541950645 lasso-2.8.2/lasso/xml/saml-2.0/saml2_name_id.h0000644000175000017500000000460714114336625023223 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAML2_NAME_ID_H__ #define __LASSO_SAML2_NAME_ID_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "../xml.h" #define LASSO_TYPE_SAML2_NAME_ID (lasso_saml2_name_id_get_type()) #define LASSO_SAML2_NAME_ID(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML2_NAME_ID, \ LassoSaml2NameID)) #define LASSO_SAML2_NAME_ID_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML2_NAME_ID, \ LassoSaml2NameIDClass)) #define LASSO_IS_SAML2_NAME_ID(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML2_NAME_ID)) #define LASSO_IS_SAML2_NAME_ID_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML2_NAME_ID)) #define LASSO_SAML2_NAME_ID_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML2_NAME_ID, \ LassoSaml2NameIDClass)) typedef struct _LassoSaml2NameID LassoSaml2NameID; typedef struct _LassoSaml2NameIDClass LassoSaml2NameIDClass; struct _LassoSaml2NameID { LassoNode parent; /*< public >*/ /* elements */ char *content; /* attributes */ char *Format; char *SPProvidedID; char *NameQualifier; char *SPNameQualifier; }; struct _LassoSaml2NameIDClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_saml2_name_id_get_type(void); LASSO_EXPORT LassoNode* lasso_saml2_name_id_new(void); LASSO_EXPORT LassoNode* lasso_saml2_name_id_new_with_string(char *content); LASSO_EXPORT gboolean lasso_saml2_name_id_equals(LassoSaml2NameID *name_id, LassoSaml2NameID *other_name_id); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAML2_NAME_ID_H__ */ lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/samlp2_requested_authn_context.h0000644000000000000000000000013214114336625023474 xustar0030 mtime=1630649749.870437474 30 atime=1678814151.020993912 30 ctime=1678814320.573950826 lasso-2.8.2/lasso/xml/saml-2.0/samlp2_requested_authn_context.h0000644000175000017500000000521414114336625026746 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAMLP2_REQUESTED_AUTHN_CONTEXT_H__ #define __LASSO_SAMLP2_REQUESTED_AUTHN_CONTEXT_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "../xml.h" #define LASSO_TYPE_SAMLP2_REQUESTED_AUTHN_CONTEXT (lasso_samlp2_requested_authn_context_get_type()) #define LASSO_SAMLP2_REQUESTED_AUTHN_CONTEXT(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAMLP2_REQUESTED_AUTHN_CONTEXT, \ LassoSamlp2RequestedAuthnContext)) #define LASSO_SAMLP2_REQUESTED_AUTHN_CONTEXT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAMLP2_REQUESTED_AUTHN_CONTEXT, \ LassoSamlp2RequestedAuthnContextClass)) #define LASSO_IS_SAMLP2_REQUESTED_AUTHN_CONTEXT(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAMLP2_REQUESTED_AUTHN_CONTEXT)) #define LASSO_IS_SAMLP2_REQUESTED_AUTHN_CONTEXT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAMLP2_REQUESTED_AUTHN_CONTEXT)) #define LASSO_SAMLP2_REQUESTED_AUTHN_CONTEXT_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAMLP2_REQUESTED_AUTHN_CONTEXT, \ LassoSamlp2RequestedAuthnContextClass)) typedef struct _LassoSamlp2RequestedAuthnContext LassoSamlp2RequestedAuthnContext; typedef struct _LassoSamlp2RequestedAuthnContextClass LassoSamlp2RequestedAuthnContextClass; struct _LassoSamlp2RequestedAuthnContext { LassoNode parent; /*< public >*/ /* elements */ GList *AuthnContextClassRef; /* of strings */ GList *AuthnContextDeclRef; /* of strings */ /* attributes */ char *Comparison; }; struct _LassoSamlp2RequestedAuthnContextClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_samlp2_requested_authn_context_get_type(void); LASSO_EXPORT LassoNode* lasso_samlp2_requested_authn_context_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAMLP2_REQUESTED_AUTHN_CONTEXT_H__ */ lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/saml2_subject_locality.h0000644000000000000000000000013114114336625021706 xustar0029 mtime=1630649749.86643743 30 atime=1678814151.020993912 30 ctime=1678814320.549950691 lasso-2.8.2/lasso/xml/saml-2.0/saml2_subject_locality.h0000644000175000017500000000454514114336625025167 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAML2_SUBJECT_LOCALITY_H__ #define __LASSO_SAML2_SUBJECT_LOCALITY_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "../xml.h" #define LASSO_TYPE_SAML2_SUBJECT_LOCALITY (lasso_saml2_subject_locality_get_type()) #define LASSO_SAML2_SUBJECT_LOCALITY(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML2_SUBJECT_LOCALITY, \ LassoSaml2SubjectLocality)) #define LASSO_SAML2_SUBJECT_LOCALITY_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML2_SUBJECT_LOCALITY, \ LassoSaml2SubjectLocalityClass)) #define LASSO_IS_SAML2_SUBJECT_LOCALITY(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML2_SUBJECT_LOCALITY)) #define LASSO_IS_SAML2_SUBJECT_LOCALITY_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML2_SUBJECT_LOCALITY)) #define LASSO_SAML2_SUBJECT_LOCALITY_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML2_SUBJECT_LOCALITY, \ LassoSaml2SubjectLocalityClass)) typedef struct _LassoSaml2SubjectLocality LassoSaml2SubjectLocality; typedef struct _LassoSaml2SubjectLocalityClass LassoSaml2SubjectLocalityClass; struct _LassoSaml2SubjectLocality { LassoNode parent; /*< public >*/ /* attributes */ char *Address; char *DNSName; }; struct _LassoSaml2SubjectLocalityClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_saml2_subject_locality_get_type(void); LASSO_EXPORT LassoNode* lasso_saml2_subject_locality_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAML2_SUBJECT_LOCALITY_H__ */ lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/saml2_attribute_statement.h0000644000000000000000000000013214114336625022437 xustar0030 mtime=1630649749.862437387 30 atime=1678814151.016993891 30 ctime=1678814320.521950531 lasso-2.8.2/lasso/xml/saml-2.0/saml2_attribute_statement.h0000644000175000017500000000506714114336625025717 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAML2_ATTRIBUTE_STATEMENT_H__ #define __LASSO_SAML2_ATTRIBUTE_STATEMENT_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "saml2_statement_abstract.h" #define LASSO_TYPE_SAML2_ATTRIBUTE_STATEMENT (lasso_saml2_attribute_statement_get_type()) #define LASSO_SAML2_ATTRIBUTE_STATEMENT(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML2_ATTRIBUTE_STATEMENT, \ LassoSaml2AttributeStatement)) #define LASSO_SAML2_ATTRIBUTE_STATEMENT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML2_ATTRIBUTE_STATEMENT, \ LassoSaml2AttributeStatementClass)) #define LASSO_IS_SAML2_ATTRIBUTE_STATEMENT(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML2_ATTRIBUTE_STATEMENT)) #define LASSO_IS_SAML2_ATTRIBUTE_STATEMENT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML2_ATTRIBUTE_STATEMENT)) #define LASSO_SAML2_ATTRIBUTE_STATEMENT_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML2_ATTRIBUTE_STATEMENT, \ LassoSaml2AttributeStatementClass)) typedef struct _LassoSaml2AttributeStatement LassoSaml2AttributeStatement; typedef struct _LassoSaml2AttributeStatementClass LassoSaml2AttributeStatementClass; struct _LassoSaml2AttributeStatement { LassoSaml2StatementAbstract parent; /*< public >*/ /* elements */ GList *Attribute; /* of LassoSaml2Attribute */ GList *EncryptedAttribute; /* of LassoSaml2EncryptedElement */ }; struct _LassoSaml2AttributeStatementClass { LassoSaml2StatementAbstractClass parent; }; LASSO_EXPORT GType lasso_saml2_attribute_statement_get_type(void); LASSO_EXPORT LassoNode* lasso_saml2_attribute_statement_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAML2_ATTRIBUTE_STATEMENT_H__ */ lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/saml2_audience_restriction.h0000644000000000000000000000013214114336625022552 xustar0030 mtime=1630649749.862437387 30 atime=1678814151.016993891 30 ctime=1678814320.525950554 lasso-2.8.2/lasso/xml/saml-2.0/saml2_audience_restriction.h0000644000175000017500000000476214114336625026033 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAML2_AUDIENCE_RESTRICTION_H__ #define __LASSO_SAML2_AUDIENCE_RESTRICTION_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "saml2_condition_abstract.h" #define LASSO_TYPE_SAML2_AUDIENCE_RESTRICTION (lasso_saml2_audience_restriction_get_type()) #define LASSO_SAML2_AUDIENCE_RESTRICTION(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML2_AUDIENCE_RESTRICTION, \ LassoSaml2AudienceRestriction)) #define LASSO_SAML2_AUDIENCE_RESTRICTION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML2_AUDIENCE_RESTRICTION, \ LassoSaml2AudienceRestrictionClass)) #define LASSO_IS_SAML2_AUDIENCE_RESTRICTION(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML2_AUDIENCE_RESTRICTION)) #define LASSO_IS_SAML2_AUDIENCE_RESTRICTION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML2_AUDIENCE_RESTRICTION)) #define LASSO_SAML2_AUDIENCE_RESTRICTION_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML2_AUDIENCE_RESTRICTION, \ LassoSaml2AudienceRestrictionClass)) typedef struct _LassoSaml2AudienceRestriction LassoSaml2AudienceRestriction; typedef struct _LassoSaml2AudienceRestrictionClass LassoSaml2AudienceRestrictionClass; struct _LassoSaml2AudienceRestriction { LassoSaml2ConditionAbstract parent; /*< public >*/ /* elements */ char *Audience; }; struct _LassoSaml2AudienceRestrictionClass { LassoSaml2ConditionAbstractClass parent; }; LASSO_EXPORT GType lasso_saml2_audience_restriction_get_type(void); LASSO_EXPORT LassoNode* lasso_saml2_audience_restriction_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAML2_AUDIENCE_RESTRICTION_H__ */ lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/samlp2_status.c0000644000000000000000000000013214114336625020046 xustar0030 mtime=1630649749.870437474 30 atime=1678814175.297129784 30 ctime=1678814320.657951306 lasso-2.8.2/lasso/xml/saml-2.0/samlp2_status.c0000644000175000017500000000647114114336625023326 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "samlp2_status.h" /** * SECTION:samlp2_status * @short_description: <samlp2:Status> * *
Schema fragment for samlp2:Status * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "StatusCode", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSamlp2Status, StatusCode), NULL, NULL, NULL}, { "StatusMessage", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoSamlp2Status, StatusMessage), NULL, NULL, NULL}, { "StatusDetail", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSamlp2Status, StatusDetail), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSamlp2StatusClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "Status"); lasso_node_class_set_ns(nclass, LASSO_SAML2_PROTOCOL_HREF, LASSO_SAML2_PROTOCOL_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_samlp2_status_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSamlp2StatusClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSamlp2Status), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoSamlp2Status", &this_info, 0); } return this_type; } /** * lasso_samlp2_status_new: * * Creates a new #LassoSamlp2Status object. * * Return value: a newly created #LassoSamlp2Status object **/ LassoNode* lasso_samlp2_status_new() { return g_object_new(LASSO_TYPE_SAMLP2_STATUS, NULL); } lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/saml2_proxy_restriction.c0000644000000000000000000000013214315071673022153 xustar0030 mtime=1664381883.522467631 30 atime=1678814159.421040879 30 ctime=1678814320.617951077 lasso-2.8.2/lasso/xml/saml-2.0/saml2_proxy_restriction.c0000644000175000017500000000677614315071673025443 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "saml2_proxy_restriction.h" /** * SECTION:saml2_proxy_restriction * @short_description: <saml2:ProxyRestriction> * *
Schema fragment for saml2:ProxyRestriction * * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "Audience", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoSaml2ProxyRestriction, Audience), NULL, NULL, NULL}, { "Count", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSaml2ProxyRestriction, Count), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSaml2ProxyRestrictionClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "ProxyRestriction"); lasso_node_class_set_ns(nclass, LASSO_SAML2_ASSERTION_HREF, LASSO_SAML2_ASSERTION_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_saml2_proxy_restriction_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSaml2ProxyRestrictionClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSaml2ProxyRestriction), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_SAML2_CONDITION_ABSTRACT, "LassoSaml2ProxyRestriction", &this_info, 0); } return this_type; } /** * lasso_saml2_proxy_restriction_new: * * Creates a new #LassoSaml2ProxyRestriction object. * * Return value: a newly created #LassoSaml2ProxyRestriction object **/ LassoNode* lasso_saml2_proxy_restriction_new() { return g_object_new(LASSO_TYPE_SAML2_PROXY_RESTRICTION, NULL); } lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/saml2_encrypted_element.c0000644000000000000000000000013114114336625022050 xustar0029 mtime=1630649749.86643743 30 atime=1678814156.745025911 30 ctime=1678814320.609951031 lasso-2.8.2/lasso/xml/saml-2.0/saml2_encrypted_element.c0000644000175000017500000001205714114336625025326 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "saml2_encrypted_element.h" #include "../xml.h" #include "../../utils.h" #include "../../errors.h" #include "../xml_enc.h" #include "../../registry.h" /** * SECTION:saml2_encrypted_element * @short_description: <saml2:EncryptedElement> * * This element can contain an encrypted XML document fragment, use * lasso_saml2_encrypted_element_decrypt() to retrieve it. * *
Schema fragment for saml2:EncryptedElement * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "EncryptedData", SNIPPET_XMLNODE, G_STRUCT_OFFSET(LassoSaml2EncryptedElement, EncryptedData), NULL, LASSO_XMLENC_PREFIX, LASSO_XMLENC_HREF}, { "EncryptedKey", SNIPPET_LIST_XMLNODES, G_STRUCT_OFFSET(LassoSaml2EncryptedElement, EncryptedKey), NULL, LASSO_XMLENC_PREFIX, LASSO_XMLENC_HREF}, { "NameID", SNIPPET_NODE | SNIPPET_LASSO_DUMP, G_STRUCT_OFFSET(LassoSaml2EncryptedElement, original_data), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSaml2EncryptedElementClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "EncryptedElement"); lasso_node_class_set_ns(nclass, LASSO_SAML2_ASSERTION_HREF, LASSO_SAML2_ASSERTION_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_saml2_encrypted_element_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSaml2EncryptedElementClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSaml2EncryptedElement), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoSaml2EncryptedElement", &this_info, 0); lasso_registry_default_add_direct_mapping(LASSO_SAML2_ASSERTION_HREF, "EncryptedID", LASSO_LASSO_HREF, "LassoSaml2EncryptedElement"); lasso_registry_default_add_direct_mapping(LASSO_SAML2_ASSERTION_HREF, "EncryptedAttribute", LASSO_LASSO_HREF, "LassoSaml2EncryptedElement"); lasso_registry_default_add_direct_mapping(LASSO_SAML2_ASSERTION_HREF, "EncryptedAssertion", LASSO_LASSO_HREF, "LassoSaml2EncryptedElement"); lasso_registry_default_add_direct_mapping(LASSO_SAML2_PROTOCOL_HREF, "NewEncryptedID", LASSO_LASSO_HREF, "LassoSaml2EncryptedElement"); } return this_type; } /** * lasso_saml2_encrypted_element_new: * * Creates a new #LassoSaml2EncryptedElement object. * * Return value: a newly created #LassoSaml2EncryptedElement object **/ LassoNode* lasso_saml2_encrypted_element_new() { return g_object_new(LASSO_TYPE_SAML2_ENCRYPTED_ELEMENT, NULL); } /** * lasso_saml2_encrypted_element_decrypt: * @encrypted_element: the #LassoSaml2EncryptedElement to decrypt * @encryption_private_key: the #xmlSecKey to decrypt the node * * * Decrypt the content of a #LassoSaml2EncryptedElement using the given #xmlSecKey. * The #xmlNode resulting of decrypting it is converted into a #LassoNode object. * * Return value: 0 if successful, an error otherwise. */ int lasso_saml2_encrypted_element_decrypt(LassoSaml2EncryptedElement* encrypted_element, xmlSecKey *encryption_private_key, LassoNode **decrypted_node) { return lasso_node_decrypt_xmlnode(encrypted_element->EncryptedData, encrypted_element->EncryptedKey, encryption_private_key, decrypted_node); } lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/saml2_base_idabstract.h0000644000000000000000000000013214114336625021462 xustar0030 mtime=1630649749.862437387 30 atime=1678814151.016993891 30 ctime=1678814320.533950599 lasso-2.8.2/lasso/xml/saml-2.0/saml2_base_idabstract.h0000644000175000017500000000453114114336625024735 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAML2_BASE_IDABSTRACT_H__ #define __LASSO_SAML2_BASE_IDABSTRACT_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "../xml.h" #define LASSO_TYPE_SAML2_BASE_IDABSTRACT (lasso_saml2_base_idabstract_get_type()) #define LASSO_SAML2_BASE_IDABSTRACT(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML2_BASE_IDABSTRACT, \ LassoSaml2BaseIDAbstract)) #define LASSO_SAML2_BASE_IDABSTRACT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML2_BASE_IDABSTRACT, \ LassoSaml2BaseIDAbstractClass)) #define LASSO_IS_SAML2_BASE_IDABSTRACT(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML2_BASE_IDABSTRACT)) #define LASSO_IS_SAML2_BASE_IDABSTRACT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML2_BASE_IDABSTRACT)) #define LASSO_SAML2_BASE_IDABSTRACT_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML2_BASE_IDABSTRACT, \ LassoSaml2BaseIDAbstractClass)) typedef struct _LassoSaml2BaseIDAbstract LassoSaml2BaseIDAbstract; typedef struct _LassoSaml2BaseIDAbstractClass LassoSaml2BaseIDAbstractClass; struct _LassoSaml2BaseIDAbstract { LassoNode parent; /*< public >*/ /* attributes */ char *NameQualifier; char *SPNameQualifier; }; struct _LassoSaml2BaseIDAbstractClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_saml2_base_idabstract_get_type(void); LASSO_EXPORT LassoNode* lasso_saml2_base_idabstract_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAML2_BASE_IDABSTRACT_H__ */ lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/saml2_evidence.c0000644000000000000000000000013114114336625020124 xustar0029 mtime=1630649749.86643743 30 atime=1678814157.157028215 30 ctime=1678814320.609951031 lasso-2.8.2/lasso/xml/saml-2.0/saml2_evidence.c0000644000175000017500000001045014114336625023375 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "saml2_evidence.h" /** * SECTION:saml2_evidence * @short_description: <saml2:Evidence> * *
Schema fragment for saml2:Evidence * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { /* 1 */ { "AssertionIDRef", SNIPPET_LIST_NODES | SNIPPET_JUMP_ON_MATCH | SNIPPET_JUMP_4, G_STRUCT_OFFSET(LassoSaml2Evidence, AssertionIDRef), NULL, NULL, NULL}, { "AssertionURIRef", SNIPPET_LIST_NODES | SNIPPET_JUMP_ON_MATCH | SNIPPET_JUMP_3, G_STRUCT_OFFSET(LassoSaml2Evidence, AssertionURIRef), NULL, NULL, NULL}, { "Assertion", SNIPPET_LIST_NODES | SNIPPET_JUMP_ON_MATCH | SNIPPET_JUMP_2, G_STRUCT_OFFSET(LassoSaml2Evidence, Assertion), NULL, NULL, NULL}, { "EncryptedAssertion", SNIPPET_LIST_NODES | SNIPPET_MANDATORY | SNIPPET_JUMP_ON_MATCH | SNIPPET_JUMP_1, G_STRUCT_OFFSET(LassoSaml2Evidence, EncryptedAssertion), NULL, NULL, NULL}, /* star */ { "AssertionIDRef", SNIPPET_LIST_NODES, G_STRUCT_OFFSET(LassoSaml2Evidence, AssertionIDRef), NULL, NULL, NULL}, { "AssertionURIRef", SNIPPET_LIST_NODES | SNIPPET_JUMP_ON_MATCH | SNIPPET_BACK_1, G_STRUCT_OFFSET(LassoSaml2Evidence, AssertionURIRef), NULL, NULL, NULL}, { "Assertion", SNIPPET_LIST_NODES | SNIPPET_JUMP_ON_MATCH | SNIPPET_BACK_2, G_STRUCT_OFFSET(LassoSaml2Evidence, Assertion), NULL, NULL, NULL}, { "EncryptedAssertion", SNIPPET_LIST_NODES | SNIPPET_JUMP_ON_MATCH | SNIPPET_BACK_3, G_STRUCT_OFFSET(LassoSaml2Evidence, EncryptedAssertion), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSaml2EvidenceClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "Evidence"); lasso_node_class_set_ns(nclass, LASSO_SAML2_ASSERTION_HREF, LASSO_SAML2_ASSERTION_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_saml2_evidence_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSaml2EvidenceClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSaml2Evidence), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoSaml2Evidence", &this_info, 0); } return this_type; } /** * lasso_saml2_evidence_new: * * Creates a new #LassoSaml2Evidence object. * * Return value: a newly created #LassoSaml2Evidence object **/ LassoNode* lasso_saml2_evidence_new() { return g_object_new(LASSO_TYPE_SAML2_EVIDENCE, NULL); } lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/samlp2_requested_authn_context.c0000644000000000000000000000013214114336625023467 xustar0030 mtime=1630649749.870437474 30 atime=1678814173.593120233 30 ctime=1678814320.653951282 lasso-2.8.2/lasso/xml/saml-2.0/samlp2_requested_authn_context.c0000644000175000017500000001053314114336625026741 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "samlp2_requested_authn_context.h" /** * SECTION:samlp2_requested_authn_context * @short_description: <samlp2:RequestedAuthnContext> * *
Schema fragment for samlp2:RequestedAuthnContext * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "AuthnContextClassRef", SNIPPET_LIST_CONTENT | SNIPPET_JUMP_ON_MATCH | SNIPPET_JUMP_2, G_STRUCT_OFFSET(LassoSamlp2RequestedAuthnContext, AuthnContextClassRef), NULL, LASSO_SAML2_ASSERTION_PREFIX, LASSO_SAML2_ASSERTION_HREF }, { "AuthnContextDeclRef", SNIPPET_LIST_CONTENT | SNIPPET_MANDATORY | SNIPPET_JUMP_ON_MATCH | SNIPPET_JUMP_2, G_STRUCT_OFFSET(LassoSamlp2RequestedAuthnContext, AuthnContextDeclRef), NULL, LASSO_SAML2_ASSERTION_PREFIX, LASSO_SAML2_ASSERTION_HREF }, { "AuthnContextClassRef", SNIPPET_LIST_CONTENT | SNIPPET_JUMP_ON_MISS | SNIPPET_JUMP_2, G_STRUCT_OFFSET(LassoSamlp2RequestedAuthnContext, AuthnContextClassRef), NULL, LASSO_SAML2_ASSERTION_PREFIX, LASSO_SAML2_ASSERTION_HREF }, { "AuthnContextDeclRef", SNIPPET_LIST_CONTENT, G_STRUCT_OFFSET(LassoSamlp2RequestedAuthnContext, AuthnContextDeclRef), NULL, LASSO_SAML2_ASSERTION_PREFIX, LASSO_SAML2_ASSERTION_HREF }, { "Comparison", SNIPPET_ATTRIBUTE | SNIPPET_OPTIONAL, G_STRUCT_OFFSET(LassoSamlp2RequestedAuthnContext, Comparison), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSamlp2RequestedAuthnContextClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "RequestedAuthnContext"); lasso_node_class_set_ns(nclass, LASSO_SAML2_PROTOCOL_HREF, LASSO_SAML2_PROTOCOL_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_samlp2_requested_authn_context_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSamlp2RequestedAuthnContextClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSamlp2RequestedAuthnContext), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoSamlp2RequestedAuthnContext", &this_info, 0); } return this_type; } /** * lasso_samlp2_requested_authn_context_new: * * Creates a new #LassoSamlp2RequestedAuthnContext object. * * Return value: a newly created #LassoSamlp2RequestedAuthnContext object **/ LassoNode* lasso_samlp2_requested_authn_context_new() { return g_object_new(LASSO_TYPE_SAMLP2_REQUESTED_AUTHN_CONTEXT, NULL); } lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/Makefile.am0000644000000000000000000000013213766621500017136 xustar0030 mtime=1608196928.878896252 30 atime=1678814114.928792718 30 ctime=1678814320.517950508 lasso-2.8.2/lasso/xml/saml-2.0/Makefile.am0000644000175000017500000000624313766621500022413 0ustar00bdauvergnebdauvergne00000000000000EXTRA_DIST = xml_saml2.h MAINTAINERCLEANFILES = Makefile.in liblassoincludedir = $(includedir)/lasso/xml/saml-2.0 AM_CPPFLAGS = \ -I$(top_builddir) \ -I$(top_srcdir) \ $(LASSO_CORE_CFLAGS) \ -DG_LOG_DOMAIN=\"lasso\" noinst_LTLIBRARIES = liblasso-xml-saml2.la liblasso_xml_saml2_la_SOURCES = \ saml2_action.c \ saml2_advice.c \ saml2_assertion.c \ saml2_attribute.c \ saml2_attribute_statement.c \ saml2_attribute_value.c \ saml2_audience_restriction.c \ saml2_authn_context.c \ saml2_authn_statement.c \ saml2_authz_decision_statement.c \ saml2_base_idabstract.c \ saml2_condition_abstract.c \ saml2_conditions.c \ saml2_encrypted_element.c \ saml2_evidence.c \ saml2_key_info_confirmation_data.c \ saml2_key_info_confirmation_data_type.c \ saml2_name_id.c \ saml2_one_time_use.c \ saml2_proxy_restriction.c \ saml2_statement_abstract.c \ saml2_subject.c \ saml2_subject_confirmation.c \ saml2_subject_confirmation_data.c \ saml2_subject_locality.c \ samlp2_artifact_resolve.c \ samlp2_artifact_response.c \ samlp2_assertion_id_request.c \ samlp2_attribute_query.c \ samlp2_authn_query.c \ samlp2_authn_request.c \ samlp2_authz_decision_query.c \ samlp2_extensions.c \ samlp2_idp_entry.c \ samlp2_idp_list.c \ samlp2_logout_request.c \ samlp2_logout_response.c \ samlp2_manage_name_id_request.c \ samlp2_manage_name_id_response.c \ samlp2_name_id_mapping_request.c \ samlp2_name_id_mapping_response.c \ samlp2_name_id_policy.c \ samlp2_request_abstract.c \ samlp2_requested_authn_context.c \ samlp2_response.c \ samlp2_scoping.c \ samlp2_status.c \ samlp2_status_code.c \ samlp2_status_detail.c \ samlp2_status_response.c \ samlp2_subject_query_abstract.c \ samlp2_terminate.c liblassoinclude_HEADERS = \ saml2_action.h \ saml2_advice.h \ saml2_assertion.h \ saml2_attribute.h \ saml2_attribute_statement.h \ saml2_attribute_value.h \ saml2_audience_restriction.h \ saml2_authn_context.h \ saml2_authn_statement.h \ saml2_authz_decision_statement.h \ saml2_base_idabstract.h \ saml2_condition_abstract.h \ saml2_conditions.h \ saml2_encrypted_element.h \ saml2_evidence.h \ saml2_key_info_confirmation_data.h \ saml2_key_info_confirmation_data_type.h \ saml2_name_id.h \ saml2_one_time_use.h \ saml2_proxy_restriction.h \ saml2_statement_abstract.h \ saml2_subject_confirmation_data.h \ saml2_subject_confirmation.h \ saml2_subject.h \ saml2_subject_locality.h \ samlp2_artifact_resolve.h \ samlp2_artifact_response.h \ samlp2_assertion_id_request.h \ samlp2_attribute_query.h \ samlp2_authn_query.h \ samlp2_authn_request.h \ samlp2_authz_decision_query.h \ samlp2_extensions.h \ samlp2_idp_entry.h \ samlp2_idp_list.h \ samlp2_logout_request.h \ samlp2_logout_response.h \ samlp2_manage_name_id_request.h \ samlp2_manage_name_id_response.h \ samlp2_name_id_mapping_request.h \ samlp2_name_id_mapping_response.h \ samlp2_name_id_policy.h \ samlp2_request_abstract.h \ samlp2_requested_authn_context.h \ samlp2_response.h \ samlp2_scoping.h \ samlp2_status_code.h \ samlp2_status_detail.h \ samlp2_status.h \ samlp2_status_response.h \ samlp2_subject_query_abstract.h \ samlp2_terminate.h \ saml2_strings.h \ saml2_xsd.h lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/samlp2_manage_name_id_request.c0000644000000000000000000000013214114336625023177 xustar0030 mtime=1630649749.870437474 30 atime=1678814170.589103401 30 ctime=1678814320.645951236 lasso-2.8.2/lasso/xml/saml-2.0/samlp2_manage_name_id_request.c0000644000175000017500000001140314114336625026446 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "samlp2_manage_name_id_request.h" /** * SECTION:samlp2_manage_name_id_request * @short_description: <samlp2:ManageNameIDRequest> * *
Schema fragment for samlp2:ManageNameIDRequest * * * * * * * * * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "NameID", SNIPPET_NODE | SNIPPET_JUMP_ON_MATCH | SNIPPET_JUMP_2, G_STRUCT_OFFSET(LassoSamlp2ManageNameIDRequest, NameID), NULL, LASSO_SAML2_ASSERTION_PREFIX, LASSO_SAML2_ASSERTION_HREF}, { "EncryptedID", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSamlp2ManageNameIDRequest, EncryptedID), "LassoSaml2EncryptedElement", LASSO_SAML2_ASSERTION_PREFIX, LASSO_SAML2_ASSERTION_HREF}, { "NewID", SNIPPET_CONTENT | SNIPPET_JUMP_ON_MATCH | SNIPPET_JUMP_3, G_STRUCT_OFFSET(LassoSamlp2ManageNameIDRequest, NewID), NULL, NULL, NULL}, { "NewEncryptedID", SNIPPET_NODE | SNIPPET_JUMP_ON_MATCH | SNIPPET_JUMP_2, G_STRUCT_OFFSET(LassoSamlp2ManageNameIDRequest, NewEncryptedID), "LassoSaml2EncryptedElement", NULL, NULL}, { "Terminate", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSamlp2ManageNameIDRequest, Terminate), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static LassoNodeClass *parent_class = NULL; static int init_from_xml(LassoNode *node, xmlNode *xmlnode) { int rc = 0; LassoSamlp2ManageNameIDRequest *nid_request = (LassoSamlp2ManageNameIDRequest*)node; rc = parent_class->init_from_xml(node, xmlnode); if ((nid_request->NameID != 0) + (nid_request->EncryptedID != 0) != 1) { error("samlp2:LogoutRequest needs one of BaseID, NameID or EncryptedID"); rc = 1; } return rc; } static void class_init(LassoSamlp2ManageNameIDRequestClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); klass->parent.parent.init_from_xml = init_from_xml; nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "ManageNameIDRequest"); lasso_node_class_set_ns(nclass, LASSO_SAML2_PROTOCOL_HREF, LASSO_SAML2_PROTOCOL_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_samlp2_manage_name_id_request_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSamlp2ManageNameIDRequestClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSamlp2ManageNameIDRequest), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_SAMLP2_REQUEST_ABSTRACT, "LassoSamlp2ManageNameIDRequest", &this_info, 0); } return this_type; } /** * lasso_samlp2_manage_name_id_request_new: * * Creates a new #LassoSamlp2ManageNameIDRequest object. * * Return value: a newly created #LassoSamlp2ManageNameIDRequest object **/ LassoNode* lasso_samlp2_manage_name_id_request_new() { return g_object_new(LASSO_TYPE_SAMLP2_MANAGE_NAME_ID_REQUEST, NULL); } lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/saml2_attribute_statement.c0000644000000000000000000000013214114336625022432 xustar0030 mtime=1630649749.862437387 30 atime=1678814152.989004911 30 ctime=1678814320.597950964 lasso-2.8.2/lasso/xml/saml-2.0/saml2_attribute_statement.c0000644000175000017500000000710214114336625025702 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "saml2_attribute_statement.h" /** * SECTION:saml2_attribute_statement * @short_description: <saml2:AttributeStatement> * *
Schema fragment for saml2:AttributeStatement * * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "Attribute", SNIPPET_LIST_NODES, G_STRUCT_OFFSET(LassoSaml2AttributeStatement, Attribute), NULL, NULL, NULL}, { "EncryptedAttribute", SNIPPET_LIST_NODES | SNIPPET_JUMP_ON_MATCH | SNIPPET_BACK_1, G_STRUCT_OFFSET(LassoSaml2AttributeStatement, EncryptedAttribute), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSaml2AttributeStatementClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "AttributeStatement"); lasso_node_class_set_ns(nclass, LASSO_SAML2_ASSERTION_HREF, LASSO_SAML2_ASSERTION_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_saml2_attribute_statement_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSaml2AttributeStatementClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSaml2AttributeStatement), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_SAML2_STATEMENT_ABSTRACT, "LassoSaml2AttributeStatement", &this_info, 0); } return this_type; } /** * lasso_saml2_attribute_statement_new: * * Creates a new #LassoSaml2AttributeStatement object. * * Return value: a newly created #LassoSaml2AttributeStatement object **/ LassoNode* lasso_saml2_attribute_statement_new() { return g_object_new(LASSO_TYPE_SAML2_ATTRIBUTE_STATEMENT, NULL); } lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/saml2_condition_abstract.h0000644000000000000000000000013214114336625022221 xustar0030 mtime=1630649749.862437387 30 atime=1678814151.016993891 30 ctime=1678814320.533950599 lasso-2.8.2/lasso/xml/saml-2.0/saml2_condition_abstract.h0000644000175000017500000000454714114336625025503 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAML2_CONDITION_ABSTRACT_H__ #define __LASSO_SAML2_CONDITION_ABSTRACT_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "../xml.h" #define LASSO_TYPE_SAML2_CONDITION_ABSTRACT (lasso_saml2_condition_abstract_get_type()) #define LASSO_SAML2_CONDITION_ABSTRACT(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML2_CONDITION_ABSTRACT, \ LassoSaml2ConditionAbstract)) #define LASSO_SAML2_CONDITION_ABSTRACT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML2_CONDITION_ABSTRACT, \ LassoSaml2ConditionAbstractClass)) #define LASSO_IS_SAML2_CONDITION_ABSTRACT(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML2_CONDITION_ABSTRACT)) #define LASSO_IS_SAML2_CONDITION_ABSTRACT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML2_CONDITION_ABSTRACT)) #define LASSO_SAML2_CONDITION_ABSTRACT_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML2_CONDITION_ABSTRACT, \ LassoSaml2ConditionAbstractClass)) typedef struct _LassoSaml2ConditionAbstract LassoSaml2ConditionAbstract; typedef struct _LassoSaml2ConditionAbstractClass LassoSaml2ConditionAbstractClass; struct _LassoSaml2ConditionAbstract { LassoNode parent; /*< public >*/ }; struct _LassoSaml2ConditionAbstractClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_saml2_condition_abstract_get_type(void); LASSO_EXPORT LassoNode* lasso_saml2_condition_abstract_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAML2_CONDITION_ABSTRACT_H__ */ lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/Makefile.in0000644000000000000000000000013214404125673017147 xustar0030 mtime=1678814139.864931616 30 atime=1678814149.924987788 30 ctime=1678814320.589950918 lasso-2.8.2/lasso/xml/saml-2.0/Makefile.in0000644000175000017500000012031414404125673022420 0ustar00bdauvergnebdauvergne00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = lasso/xml/saml-2.0 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ac_check_class.m4 \ $(top_srcdir)/m4/ac_check_classpath.m4 \ $(top_srcdir)/m4/ac_check_junit.m4 \ $(top_srcdir)/m4/ac_prog_jar.m4 \ $(top_srcdir)/m4/ac_prog_java.m4 \ $(top_srcdir)/m4/ac_prog_java_works.m4 \ $(top_srcdir)/m4/ac_prog_javac.m4 \ $(top_srcdir)/m4/ac_prog_javac_works.m4 \ $(top_srcdir)/m4/ac_prog_javah.m4 \ $(top_srcdir)/m4/ac_try_compile_java.m4 \ $(top_srcdir)/m4/as-compiler-flag.m4 \ $(top_srcdir)/m4/dps_java_check_class.m4 \ $(top_srcdir)/m4/dps_xtra_classpath.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(liblassoinclude_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h \ $(top_builddir)/lasso/lasso_config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) liblasso_xml_saml2_la_LIBADD = am_liblasso_xml_saml2_la_OBJECTS = saml2_action.lo saml2_advice.lo \ saml2_assertion.lo saml2_attribute.lo \ saml2_attribute_statement.lo saml2_attribute_value.lo \ saml2_audience_restriction.lo saml2_authn_context.lo \ saml2_authn_statement.lo saml2_authz_decision_statement.lo \ saml2_base_idabstract.lo saml2_condition_abstract.lo \ saml2_conditions.lo saml2_encrypted_element.lo \ saml2_evidence.lo saml2_key_info_confirmation_data.lo \ saml2_key_info_confirmation_data_type.lo saml2_name_id.lo \ saml2_one_time_use.lo saml2_proxy_restriction.lo \ saml2_statement_abstract.lo saml2_subject.lo \ saml2_subject_confirmation.lo \ saml2_subject_confirmation_data.lo saml2_subject_locality.lo \ samlp2_artifact_resolve.lo samlp2_artifact_response.lo \ samlp2_assertion_id_request.lo samlp2_attribute_query.lo \ samlp2_authn_query.lo samlp2_authn_request.lo \ samlp2_authz_decision_query.lo samlp2_extensions.lo \ samlp2_idp_entry.lo samlp2_idp_list.lo \ samlp2_logout_request.lo samlp2_logout_response.lo \ samlp2_manage_name_id_request.lo \ samlp2_manage_name_id_response.lo \ samlp2_name_id_mapping_request.lo \ samlp2_name_id_mapping_response.lo samlp2_name_id_policy.lo \ samlp2_request_abstract.lo samlp2_requested_authn_context.lo \ samlp2_response.lo samlp2_scoping.lo samlp2_status.lo \ samlp2_status_code.lo samlp2_status_detail.lo \ samlp2_status_response.lo samlp2_subject_query_abstract.lo \ samlp2_terminate.lo liblasso_xml_saml2_la_OBJECTS = $(am_liblasso_xml_saml2_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -I$(top_builddir)/lasso depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/saml2_action.Plo \ ./$(DEPDIR)/saml2_advice.Plo ./$(DEPDIR)/saml2_assertion.Plo \ ./$(DEPDIR)/saml2_attribute.Plo \ ./$(DEPDIR)/saml2_attribute_statement.Plo \ ./$(DEPDIR)/saml2_attribute_value.Plo \ ./$(DEPDIR)/saml2_audience_restriction.Plo \ ./$(DEPDIR)/saml2_authn_context.Plo \ ./$(DEPDIR)/saml2_authn_statement.Plo \ ./$(DEPDIR)/saml2_authz_decision_statement.Plo \ ./$(DEPDIR)/saml2_base_idabstract.Plo \ ./$(DEPDIR)/saml2_condition_abstract.Plo \ ./$(DEPDIR)/saml2_conditions.Plo \ ./$(DEPDIR)/saml2_encrypted_element.Plo \ ./$(DEPDIR)/saml2_evidence.Plo \ ./$(DEPDIR)/saml2_key_info_confirmation_data.Plo \ ./$(DEPDIR)/saml2_key_info_confirmation_data_type.Plo \ ./$(DEPDIR)/saml2_name_id.Plo \ ./$(DEPDIR)/saml2_one_time_use.Plo \ ./$(DEPDIR)/saml2_proxy_restriction.Plo \ ./$(DEPDIR)/saml2_statement_abstract.Plo \ ./$(DEPDIR)/saml2_subject.Plo \ ./$(DEPDIR)/saml2_subject_confirmation.Plo \ ./$(DEPDIR)/saml2_subject_confirmation_data.Plo \ ./$(DEPDIR)/saml2_subject_locality.Plo \ ./$(DEPDIR)/samlp2_artifact_resolve.Plo \ ./$(DEPDIR)/samlp2_artifact_response.Plo \ ./$(DEPDIR)/samlp2_assertion_id_request.Plo \ ./$(DEPDIR)/samlp2_attribute_query.Plo \ ./$(DEPDIR)/samlp2_authn_query.Plo \ ./$(DEPDIR)/samlp2_authn_request.Plo \ ./$(DEPDIR)/samlp2_authz_decision_query.Plo \ ./$(DEPDIR)/samlp2_extensions.Plo \ ./$(DEPDIR)/samlp2_idp_entry.Plo \ ./$(DEPDIR)/samlp2_idp_list.Plo \ ./$(DEPDIR)/samlp2_logout_request.Plo \ ./$(DEPDIR)/samlp2_logout_response.Plo \ ./$(DEPDIR)/samlp2_manage_name_id_request.Plo \ ./$(DEPDIR)/samlp2_manage_name_id_response.Plo \ ./$(DEPDIR)/samlp2_name_id_mapping_request.Plo \ ./$(DEPDIR)/samlp2_name_id_mapping_response.Plo \ ./$(DEPDIR)/samlp2_name_id_policy.Plo \ ./$(DEPDIR)/samlp2_request_abstract.Plo \ ./$(DEPDIR)/samlp2_requested_authn_context.Plo \ ./$(DEPDIR)/samlp2_response.Plo ./$(DEPDIR)/samlp2_scoping.Plo \ ./$(DEPDIR)/samlp2_status.Plo \ ./$(DEPDIR)/samlp2_status_code.Plo \ ./$(DEPDIR)/samlp2_status_detail.Plo \ ./$(DEPDIR)/samlp2_status_response.Plo \ ./$(DEPDIR)/samlp2_subject_query_abstract.Plo \ ./$(DEPDIR)/samlp2_terminate.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(liblasso_xml_saml2_la_SOURCES) DIST_SOURCES = $(liblasso_xml_saml2_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(liblassoincludedir)" HEADERS = $(liblassoinclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CHECK_CFLAGS = @CHECK_CFLAGS@ CHECK_LIBS = @CHECK_LIBS@ CLASSPATH_JUNIT = @CLASSPATH_JUNIT@ CLASSPATH_OPT = @CLASSPATH_OPT@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CSHARPCILINTERPRETER = @CSHARPCILINTERPRETER@ CSHARPCOMPILER = @CSHARPCOMPILER@ CSHARPCYGPATH_W = @CSHARPCYGPATH_W@ CSHARPDYNAMICLINKING = @CSHARPDYNAMICLINKING@ CSHARPLIBRARYPREFIX = @CSHARPLIBRARYPREFIX@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEBUGGING = @DEBUGGING@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLL_FILENAME = @DLL_FILENAME@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GACUTIL = @GACUTIL@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HTML_DIR = @HTML_DIR@ INKSCAPE = @INKSCAPE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVAC_FLAGS = @JAVAC_FLAGS@ JAVAH = @JAVAH@ JAVAH_FLAGS = @JAVAH_FLAGS@ JAVA_INCLUDE = @JAVA_INCLUDE@ JAVA_JUNIT = @JAVA_JUNIT@ JAVA_VERSION = @JAVA_VERSION@ JDK_INCLUDE = @JDK_INCLUDE@ JNI_EXTRA_LDFLAGS = @JNI_EXTRA_LDFLAGS@ JUNIT = @JUNIT@ LASSO_APP_DEFINES = @LASSO_APP_DEFINES@ LASSO_CFLAGS = @LASSO_CFLAGS@ LASSO_CORE_CFLAGS = @LASSO_CORE_CFLAGS@ LASSO_CORE_LIBS = @LASSO_CORE_LIBS@ LASSO_DEFINES = @LASSO_DEFINES@ LASSO_DOCDIR = @LASSO_DOCDIR@ LASSO_LIBS = @LASSO_LIBS@ LASSO_PUB_CFLAGS = @LASSO_PUB_CFLAGS@ LASSO_STATIC_BINARIES = @LASSO_STATIC_BINARIES@ LASSO_VERSION_INFO = @LASSO_VERSION_INFO@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PERLINSTALLSITEARCH = @PERLINSTALLSITEARCH@ PERLMAN3DIR = @PERLMAN3DIR@ PERL_CFLAGS = @PERL_CFLAGS@ PERL_VERSION = @PERL_VERSION@ PHP5 = @PHP5@ PHP5_CONFIG = @PHP5_CONFIG@ PHP5_CONFIG_DIR = @PHP5_CONFIG_DIR@ PHP5_EXTENSION_DIR = @PHP5_EXTENSION_DIR@ PHP5_INCLUDES = @PHP5_INCLUDES@ PHP5_INCLUDE_DIR = @PHP5_INCLUDE_DIR@ PHP5_LDFLAGS = @PHP5_LDFLAGS@ PHP5_LIBS = @PHP5_LIBS@ PHP5_PREFIX = @PHP5_PREFIX@ PHP5_UNPREFIXED_EXTENSION_DIR = @PHP5_UNPREFIXED_EXTENSION_DIR@ PHP5_VERSION = @PHP5_VERSION@ PHP7 = @PHP7@ PHP7_CONFIG = @PHP7_CONFIG@ PHP7_CONFIG_DIR = @PHP7_CONFIG_DIR@ PHP7_EXTENSION_DIR = @PHP7_EXTENSION_DIR@ PHP7_INCLUDES = @PHP7_INCLUDES@ PHP7_INCLUDE_DIR = @PHP7_INCLUDE_DIR@ PHP7_LDFLAGS = @PHP7_LDFLAGS@ PHP7_LIBS = @PHP7_LIBS@ PHP7_PREFIX = @PHP7_PREFIX@ PHP7_UNPREFIXED_EXTENSION_DIR = @PHP7_UNPREFIXED_EXTENSION_DIR@ PHP7_VERSION = @PHP7_VERSION@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PYTHON = @PYTHON@ PYTHON_VERSION = @PYTHON_VERSION@ PY_CFLAGS = @PY_CFLAGS@ PY_DYNLOAD = @PY_DYNLOAD@ PY_EXTRA_LIBS = @PY_EXTRA_LIBS@ PY_LIB_A = @PY_LIB_A@ PY_LIB_LOC = @PY_LIB_LOC@ PY_SITE_PACKAGES = @PY_SITE_PACKAGES@ RANLIB = @RANLIB@ RC = @RC@ REST2HTML = @REST2HTML@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_VERSION = @SWIG_VERSION@ TAR = @TAR@ TESTS_JUNIT = @TESTS_JUNIT@ UPCASED_DLL_FILENAME = @UPCASED_DLL_FILENAME@ VERSION = @VERSION@ VERSION_UNDERSCORED = @VERSION_UNDERSCORED@ WINDOWS_VERSION = @WINDOWS_VERSION@ XSLTPROC = @XSLTPROC@ Z_CFLAGS = @Z_CFLAGS@ Z_LIBS = @Z_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ uudecode = @uudecode@ EXTRA_DIST = xml_saml2.h MAINTAINERCLEANFILES = Makefile.in liblassoincludedir = $(includedir)/lasso/xml/saml-2.0 AM_CPPFLAGS = \ -I$(top_builddir) \ -I$(top_srcdir) \ $(LASSO_CORE_CFLAGS) \ -DG_LOG_DOMAIN=\"lasso\" noinst_LTLIBRARIES = liblasso-xml-saml2.la liblasso_xml_saml2_la_SOURCES = \ saml2_action.c \ saml2_advice.c \ saml2_assertion.c \ saml2_attribute.c \ saml2_attribute_statement.c \ saml2_attribute_value.c \ saml2_audience_restriction.c \ saml2_authn_context.c \ saml2_authn_statement.c \ saml2_authz_decision_statement.c \ saml2_base_idabstract.c \ saml2_condition_abstract.c \ saml2_conditions.c \ saml2_encrypted_element.c \ saml2_evidence.c \ saml2_key_info_confirmation_data.c \ saml2_key_info_confirmation_data_type.c \ saml2_name_id.c \ saml2_one_time_use.c \ saml2_proxy_restriction.c \ saml2_statement_abstract.c \ saml2_subject.c \ saml2_subject_confirmation.c \ saml2_subject_confirmation_data.c \ saml2_subject_locality.c \ samlp2_artifact_resolve.c \ samlp2_artifact_response.c \ samlp2_assertion_id_request.c \ samlp2_attribute_query.c \ samlp2_authn_query.c \ samlp2_authn_request.c \ samlp2_authz_decision_query.c \ samlp2_extensions.c \ samlp2_idp_entry.c \ samlp2_idp_list.c \ samlp2_logout_request.c \ samlp2_logout_response.c \ samlp2_manage_name_id_request.c \ samlp2_manage_name_id_response.c \ samlp2_name_id_mapping_request.c \ samlp2_name_id_mapping_response.c \ samlp2_name_id_policy.c \ samlp2_request_abstract.c \ samlp2_requested_authn_context.c \ samlp2_response.c \ samlp2_scoping.c \ samlp2_status.c \ samlp2_status_code.c \ samlp2_status_detail.c \ samlp2_status_response.c \ samlp2_subject_query_abstract.c \ samlp2_terminate.c liblassoinclude_HEADERS = \ saml2_action.h \ saml2_advice.h \ saml2_assertion.h \ saml2_attribute.h \ saml2_attribute_statement.h \ saml2_attribute_value.h \ saml2_audience_restriction.h \ saml2_authn_context.h \ saml2_authn_statement.h \ saml2_authz_decision_statement.h \ saml2_base_idabstract.h \ saml2_condition_abstract.h \ saml2_conditions.h \ saml2_encrypted_element.h \ saml2_evidence.h \ saml2_key_info_confirmation_data.h \ saml2_key_info_confirmation_data_type.h \ saml2_name_id.h \ saml2_one_time_use.h \ saml2_proxy_restriction.h \ saml2_statement_abstract.h \ saml2_subject_confirmation_data.h \ saml2_subject_confirmation.h \ saml2_subject.h \ saml2_subject_locality.h \ samlp2_artifact_resolve.h \ samlp2_artifact_response.h \ samlp2_assertion_id_request.h \ samlp2_attribute_query.h \ samlp2_authn_query.h \ samlp2_authn_request.h \ samlp2_authz_decision_query.h \ samlp2_extensions.h \ samlp2_idp_entry.h \ samlp2_idp_list.h \ samlp2_logout_request.h \ samlp2_logout_response.h \ samlp2_manage_name_id_request.h \ samlp2_manage_name_id_response.h \ samlp2_name_id_mapping_request.h \ samlp2_name_id_mapping_response.h \ samlp2_name_id_policy.h \ samlp2_request_abstract.h \ samlp2_requested_authn_context.h \ samlp2_response.h \ samlp2_scoping.h \ samlp2_status_code.h \ samlp2_status_detail.h \ samlp2_status.h \ samlp2_status_response.h \ samlp2_subject_query_abstract.h \ samlp2_terminate.h \ saml2_strings.h \ saml2_xsd.h all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign lasso/xml/saml-2.0/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign lasso/xml/saml-2.0/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } liblasso-xml-saml2.la: $(liblasso_xml_saml2_la_OBJECTS) $(liblasso_xml_saml2_la_DEPENDENCIES) $(EXTRA_liblasso_xml_saml2_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(liblasso_xml_saml2_la_OBJECTS) $(liblasso_xml_saml2_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saml2_action.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saml2_advice.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saml2_assertion.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saml2_attribute.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saml2_attribute_statement.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saml2_attribute_value.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saml2_audience_restriction.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saml2_authn_context.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saml2_authn_statement.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saml2_authz_decision_statement.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saml2_base_idabstract.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saml2_condition_abstract.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saml2_conditions.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saml2_encrypted_element.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saml2_evidence.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saml2_key_info_confirmation_data.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saml2_key_info_confirmation_data_type.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saml2_name_id.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saml2_one_time_use.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saml2_proxy_restriction.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saml2_statement_abstract.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saml2_subject.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saml2_subject_confirmation.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saml2_subject_confirmation_data.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saml2_subject_locality.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/samlp2_artifact_resolve.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/samlp2_artifact_response.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/samlp2_assertion_id_request.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/samlp2_attribute_query.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/samlp2_authn_query.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/samlp2_authn_request.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/samlp2_authz_decision_query.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/samlp2_extensions.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/samlp2_idp_entry.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/samlp2_idp_list.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/samlp2_logout_request.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/samlp2_logout_response.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/samlp2_manage_name_id_request.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/samlp2_manage_name_id_response.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/samlp2_name_id_mapping_request.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/samlp2_name_id_mapping_response.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/samlp2_name_id_policy.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/samlp2_request_abstract.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/samlp2_requested_authn_context.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/samlp2_response.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/samlp2_scoping.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/samlp2_status.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/samlp2_status_code.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/samlp2_status_detail.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/samlp2_status_response.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/samlp2_subject_query_abstract.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/samlp2_terminate.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-liblassoincludeHEADERS: $(liblassoinclude_HEADERS) @$(NORMAL_INSTALL) @list='$(liblassoinclude_HEADERS)'; test -n "$(liblassoincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(liblassoincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(liblassoincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(liblassoincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(liblassoincludedir)" || exit $$?; \ done uninstall-liblassoincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(liblassoinclude_HEADERS)'; test -n "$(liblassoincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(liblassoincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(liblassoincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/saml2_action.Plo -rm -f ./$(DEPDIR)/saml2_advice.Plo -rm -f ./$(DEPDIR)/saml2_assertion.Plo -rm -f ./$(DEPDIR)/saml2_attribute.Plo -rm -f ./$(DEPDIR)/saml2_attribute_statement.Plo -rm -f ./$(DEPDIR)/saml2_attribute_value.Plo -rm -f ./$(DEPDIR)/saml2_audience_restriction.Plo -rm -f ./$(DEPDIR)/saml2_authn_context.Plo -rm -f ./$(DEPDIR)/saml2_authn_statement.Plo -rm -f ./$(DEPDIR)/saml2_authz_decision_statement.Plo -rm -f ./$(DEPDIR)/saml2_base_idabstract.Plo -rm -f ./$(DEPDIR)/saml2_condition_abstract.Plo -rm -f ./$(DEPDIR)/saml2_conditions.Plo -rm -f ./$(DEPDIR)/saml2_encrypted_element.Plo -rm -f ./$(DEPDIR)/saml2_evidence.Plo -rm -f ./$(DEPDIR)/saml2_key_info_confirmation_data.Plo -rm -f ./$(DEPDIR)/saml2_key_info_confirmation_data_type.Plo -rm -f ./$(DEPDIR)/saml2_name_id.Plo -rm -f ./$(DEPDIR)/saml2_one_time_use.Plo -rm -f ./$(DEPDIR)/saml2_proxy_restriction.Plo -rm -f ./$(DEPDIR)/saml2_statement_abstract.Plo -rm -f ./$(DEPDIR)/saml2_subject.Plo -rm -f ./$(DEPDIR)/saml2_subject_confirmation.Plo -rm -f ./$(DEPDIR)/saml2_subject_confirmation_data.Plo -rm -f ./$(DEPDIR)/saml2_subject_locality.Plo -rm -f ./$(DEPDIR)/samlp2_artifact_resolve.Plo -rm -f ./$(DEPDIR)/samlp2_artifact_response.Plo -rm -f ./$(DEPDIR)/samlp2_assertion_id_request.Plo -rm -f ./$(DEPDIR)/samlp2_attribute_query.Plo -rm -f ./$(DEPDIR)/samlp2_authn_query.Plo -rm -f ./$(DEPDIR)/samlp2_authn_request.Plo -rm -f ./$(DEPDIR)/samlp2_authz_decision_query.Plo -rm -f ./$(DEPDIR)/samlp2_extensions.Plo -rm -f ./$(DEPDIR)/samlp2_idp_entry.Plo -rm -f ./$(DEPDIR)/samlp2_idp_list.Plo -rm -f ./$(DEPDIR)/samlp2_logout_request.Plo -rm -f ./$(DEPDIR)/samlp2_logout_response.Plo -rm -f ./$(DEPDIR)/samlp2_manage_name_id_request.Plo -rm -f ./$(DEPDIR)/samlp2_manage_name_id_response.Plo -rm -f ./$(DEPDIR)/samlp2_name_id_mapping_request.Plo -rm -f ./$(DEPDIR)/samlp2_name_id_mapping_response.Plo -rm -f ./$(DEPDIR)/samlp2_name_id_policy.Plo -rm -f ./$(DEPDIR)/samlp2_request_abstract.Plo -rm -f ./$(DEPDIR)/samlp2_requested_authn_context.Plo -rm -f ./$(DEPDIR)/samlp2_response.Plo -rm -f ./$(DEPDIR)/samlp2_scoping.Plo -rm -f ./$(DEPDIR)/samlp2_status.Plo -rm -f ./$(DEPDIR)/samlp2_status_code.Plo -rm -f ./$(DEPDIR)/samlp2_status_detail.Plo -rm -f ./$(DEPDIR)/samlp2_status_response.Plo -rm -f ./$(DEPDIR)/samlp2_subject_query_abstract.Plo -rm -f ./$(DEPDIR)/samlp2_terminate.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-liblassoincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/saml2_action.Plo -rm -f ./$(DEPDIR)/saml2_advice.Plo -rm -f ./$(DEPDIR)/saml2_assertion.Plo -rm -f ./$(DEPDIR)/saml2_attribute.Plo -rm -f ./$(DEPDIR)/saml2_attribute_statement.Plo -rm -f ./$(DEPDIR)/saml2_attribute_value.Plo -rm -f ./$(DEPDIR)/saml2_audience_restriction.Plo -rm -f ./$(DEPDIR)/saml2_authn_context.Plo -rm -f ./$(DEPDIR)/saml2_authn_statement.Plo -rm -f ./$(DEPDIR)/saml2_authz_decision_statement.Plo -rm -f ./$(DEPDIR)/saml2_base_idabstract.Plo -rm -f ./$(DEPDIR)/saml2_condition_abstract.Plo -rm -f ./$(DEPDIR)/saml2_conditions.Plo -rm -f ./$(DEPDIR)/saml2_encrypted_element.Plo -rm -f ./$(DEPDIR)/saml2_evidence.Plo -rm -f ./$(DEPDIR)/saml2_key_info_confirmation_data.Plo -rm -f ./$(DEPDIR)/saml2_key_info_confirmation_data_type.Plo -rm -f ./$(DEPDIR)/saml2_name_id.Plo -rm -f ./$(DEPDIR)/saml2_one_time_use.Plo -rm -f ./$(DEPDIR)/saml2_proxy_restriction.Plo -rm -f ./$(DEPDIR)/saml2_statement_abstract.Plo -rm -f ./$(DEPDIR)/saml2_subject.Plo -rm -f ./$(DEPDIR)/saml2_subject_confirmation.Plo -rm -f ./$(DEPDIR)/saml2_subject_confirmation_data.Plo -rm -f ./$(DEPDIR)/saml2_subject_locality.Plo -rm -f ./$(DEPDIR)/samlp2_artifact_resolve.Plo -rm -f ./$(DEPDIR)/samlp2_artifact_response.Plo -rm -f ./$(DEPDIR)/samlp2_assertion_id_request.Plo -rm -f ./$(DEPDIR)/samlp2_attribute_query.Plo -rm -f ./$(DEPDIR)/samlp2_authn_query.Plo -rm -f ./$(DEPDIR)/samlp2_authn_request.Plo -rm -f ./$(DEPDIR)/samlp2_authz_decision_query.Plo -rm -f ./$(DEPDIR)/samlp2_extensions.Plo -rm -f ./$(DEPDIR)/samlp2_idp_entry.Plo -rm -f ./$(DEPDIR)/samlp2_idp_list.Plo -rm -f ./$(DEPDIR)/samlp2_logout_request.Plo -rm -f ./$(DEPDIR)/samlp2_logout_response.Plo -rm -f ./$(DEPDIR)/samlp2_manage_name_id_request.Plo -rm -f ./$(DEPDIR)/samlp2_manage_name_id_response.Plo -rm -f ./$(DEPDIR)/samlp2_name_id_mapping_request.Plo -rm -f ./$(DEPDIR)/samlp2_name_id_mapping_response.Plo -rm -f ./$(DEPDIR)/samlp2_name_id_policy.Plo -rm -f ./$(DEPDIR)/samlp2_request_abstract.Plo -rm -f ./$(DEPDIR)/samlp2_requested_authn_context.Plo -rm -f ./$(DEPDIR)/samlp2_response.Plo -rm -f ./$(DEPDIR)/samlp2_scoping.Plo -rm -f ./$(DEPDIR)/samlp2_status.Plo -rm -f ./$(DEPDIR)/samlp2_status_code.Plo -rm -f ./$(DEPDIR)/samlp2_status_detail.Plo -rm -f ./$(DEPDIR)/samlp2_status_response.Plo -rm -f ./$(DEPDIR)/samlp2_subject_query_abstract.Plo -rm -f ./$(DEPDIR)/samlp2_terminate.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-liblassoincludeHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libtool clean-noinstLTLIBRARIES \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-liblassoincludeHEADERS \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-liblassoincludeHEADERS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/saml2_attribute_value.h0000644000000000000000000000013214114336625021547 xustar0030 mtime=1630649749.862437387 30 atime=1678814151.016993891 30 ctime=1678814320.525950554 lasso-2.8.2/lasso/xml/saml-2.0/saml2_attribute_value.h0000644000175000017500000000452114114336625025021 0ustar00bdauvergnebdauvergne00000000000000/* $Id: saml2_attribute_value.h 2261 2005-01-27 23:41:05Z dlaniel $ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAML2_ATTRIBUTE_VALUE_H__ #define __LASSO_SAML2_ATTRIBUTE_VALUE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "../xml.h" #define LASSO_TYPE_SAML2_ATTRIBUTE_VALUE (lasso_saml2_attribute_value_get_type()) #define LASSO_SAML2_ATTRIBUTE_VALUE(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML2_ATTRIBUTE_VALUE, \ LassoSaml2AttributeValue)) #define LASSO_SAML2_ATTRIBUTE_VALUE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML2_ATTRIBUTE_VALUE, \ LassoSaml2AttributeValueClass)) #define LASSO_IS_SAML2_ATTRIBUTE_VALUE(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML2_ATTRIBUTE_VALUE)) #define LASSO_IS_SAML2_ATTRIBUTE_VALUE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML2_ATTRIBUTE_VALUE)) #define LASSO_SAML2_ATTRIBUTE_VALUE_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML2_ATTRIBUTE_VALUE, \ LassoSaml2AttributeValueClass)) typedef struct _LassoSaml2AttributeValue LassoSaml2AttributeValue; typedef struct _LassoSaml2AttributeValueClass LassoSaml2AttributeValueClass; struct _LassoSaml2AttributeValue { LassoNode parent; /*< public >*/ GList *any; /* of LassoNode */ }; struct _LassoSaml2AttributeValueClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_saml2_attribute_value_get_type(void); LASSO_EXPORT LassoSaml2AttributeValue* lasso_saml2_attribute_value_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAML2_ATTRIBUTE_VALUE_H__ */ lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/samlp2_artifact_resolve.h0000644000000000000000000000013114114336625022063 xustar0029 mtime=1630649749.86643743 30 atime=1678814151.020993912 30 ctime=1678814320.553950713 lasso-2.8.2/lasso/xml/saml-2.0/samlp2_artifact_resolve.h0000644000175000017500000000464114114336625025341 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAMLP2_ARTIFACT_RESOLVE_H__ #define __LASSO_SAMLP2_ARTIFACT_RESOLVE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "samlp2_request_abstract.h" #define LASSO_TYPE_SAMLP2_ARTIFACT_RESOLVE (lasso_samlp2_artifact_resolve_get_type()) #define LASSO_SAMLP2_ARTIFACT_RESOLVE(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAMLP2_ARTIFACT_RESOLVE, \ LassoSamlp2ArtifactResolve)) #define LASSO_SAMLP2_ARTIFACT_RESOLVE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAMLP2_ARTIFACT_RESOLVE, \ LassoSamlp2ArtifactResolveClass)) #define LASSO_IS_SAMLP2_ARTIFACT_RESOLVE(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAMLP2_ARTIFACT_RESOLVE)) #define LASSO_IS_SAMLP2_ARTIFACT_RESOLVE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAMLP2_ARTIFACT_RESOLVE)) #define LASSO_SAMLP2_ARTIFACT_RESOLVE_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAMLP2_ARTIFACT_RESOLVE, \ LassoSamlp2ArtifactResolveClass)) typedef struct _LassoSamlp2ArtifactResolve LassoSamlp2ArtifactResolve; typedef struct _LassoSamlp2ArtifactResolveClass LassoSamlp2ArtifactResolveClass; struct _LassoSamlp2ArtifactResolve { LassoSamlp2RequestAbstract parent; /*< public >*/ /* elements */ char *Artifact; }; struct _LassoSamlp2ArtifactResolveClass { LassoSamlp2RequestAbstractClass parent; }; LASSO_EXPORT GType lasso_samlp2_artifact_resolve_get_type(void); LASSO_EXPORT LassoNode* lasso_samlp2_artifact_resolve_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAMLP2_ARTIFACT_RESOLVE_H__ */ lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/saml2_subject_locality.c0000644000000000000000000000013114114336625021701 xustar0029 mtime=1630649749.86643743 30 atime=1678814162.257056747 30 ctime=1678814320.625951123 lasso-2.8.2/lasso/xml/saml-2.0/saml2_subject_locality.c0000644000175000017500000000643714114336625025164 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "saml2_subject_locality.h" /** * SECTION:saml2_subject_locality * @short_description: <saml2:SubjectLocality> * *
Schema fragment for saml2:SubjectLocality * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "Address", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSaml2SubjectLocality, Address), NULL, NULL, NULL}, { "DNSName", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSaml2SubjectLocality, DNSName), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSaml2SubjectLocalityClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "SubjectLocality"); lasso_node_class_set_ns(nclass, LASSO_SAML2_ASSERTION_HREF, LASSO_SAML2_ASSERTION_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_saml2_subject_locality_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSaml2SubjectLocalityClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSaml2SubjectLocality), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoSaml2SubjectLocality", &this_info, 0); } return this_type; } /** * lasso_saml2_subject_locality_new: * * Creates a new #LassoSaml2SubjectLocality object. * * Return value: a newly created #LassoSaml2SubjectLocality object **/ LassoNode* lasso_saml2_subject_locality_new() { return g_object_new(LASSO_TYPE_SAML2_SUBJECT_LOCALITY, NULL); } lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/samlp2_name_id_mapping_request.h0000644000000000000000000000013214114336625023407 xustar0030 mtime=1630649749.870437474 30 atime=1678814151.020993912 30 ctime=1678814320.569950804 lasso-2.8.2/lasso/xml/saml-2.0/samlp2_name_id_mapping_request.h0000644000175000017500000000551214114336625026662 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAMLP2_NAME_ID_MAPPING_REQUEST_H__ #define __LASSO_SAMLP2_NAME_ID_MAPPING_REQUEST_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "samlp2_request_abstract.h" #include "saml2_encrypted_element.h" #include "saml2_name_id.h" #include "saml2_base_idabstract.h" #include "samlp2_name_id_policy.h" #define LASSO_TYPE_SAMLP2_NAME_ID_MAPPING_REQUEST (lasso_samlp2_name_id_mapping_request_get_type()) #define LASSO_SAMLP2_NAME_ID_MAPPING_REQUEST(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAMLP2_NAME_ID_MAPPING_REQUEST, \ LassoSamlp2NameIDMappingRequest)) #define LASSO_SAMLP2_NAME_ID_MAPPING_REQUEST_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAMLP2_NAME_ID_MAPPING_REQUEST, \ LassoSamlp2NameIDMappingRequestClass)) #define LASSO_IS_SAMLP2_NAME_ID_MAPPING_REQUEST(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAMLP2_NAME_ID_MAPPING_REQUEST)) #define LASSO_IS_SAMLP2_NAME_ID_MAPPING_REQUEST_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAMLP2_NAME_ID_MAPPING_REQUEST)) #define LASSO_SAMLP2_NAME_ID_MAPPING_REQUEST_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAMLP2_NAME_ID_MAPPING_REQUEST, \ LassoSamlp2NameIDMappingRequestClass)) typedef struct _LassoSamlp2NameIDMappingRequest LassoSamlp2NameIDMappingRequest; typedef struct _LassoSamlp2NameIDMappingRequestClass LassoSamlp2NameIDMappingRequestClass; struct _LassoSamlp2NameIDMappingRequest { LassoSamlp2RequestAbstract parent; /*< public >*/ /* elements */ LassoSaml2BaseIDAbstract *BaseID; LassoSaml2NameID *NameID; LassoSaml2EncryptedElement *EncryptedID; LassoSamlp2NameIDPolicy *NameIDPolicy; }; struct _LassoSamlp2NameIDMappingRequestClass { LassoSamlp2RequestAbstractClass parent; }; LASSO_EXPORT GType lasso_samlp2_name_id_mapping_request_get_type(void); LASSO_EXPORT LassoNode* lasso_samlp2_name_id_mapping_request_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAMLP2_NAME_ID_MAPPING_REQUEST_H__ */ lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/saml2_assertion.h0000644000000000000000000000013214114336625020357 xustar0030 mtime=1630649749.862437387 30 atime=1678814151.016993891 30 ctime=1678814320.521950531 lasso-2.8.2/lasso/xml/saml-2.0/saml2_assertion.h0000644000175000017500000000572514114336625023640 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAML2_ASSERTION_H__ #define __LASSO_SAML2_ASSERTION_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #define LASSO_TYPE_SAML2_ASSERTION (lasso_saml2_assertion_get_type()) #define LASSO_SAML2_ASSERTION(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML2_ASSERTION, \ LassoSaml2Assertion)) #define LASSO_SAML2_ASSERTION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML2_ASSERTION, \ LassoSaml2AssertionClass)) #define LASSO_IS_SAML2_ASSERTION(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML2_ASSERTION)) #define LASSO_IS_SAML2_ASSERTION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML2_ASSERTION)) #define LASSO_SAML2_ASSERTION_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML2_ASSERTION, \ LassoSaml2AssertionClass)) typedef struct _LassoSaml2Assertion LassoSaml2Assertion; typedef struct _LassoSaml2AssertionClass LassoSaml2AssertionClass; #include "saml2_advice.h" #include "saml2_conditions.h" #include "saml2_subject.h" #include "saml2_name_id.h" #include "../xml_enc.h" struct _LassoSaml2Assertion { LassoNode parent; /*< public >*/ /* elements */ LassoSaml2NameID *Issuer; LassoSaml2Subject *Subject; LassoSaml2Conditions *Conditions; LassoSaml2Advice *Advice; GList *Statement; /* of LassoSaml2StatementAbstract */ GList *AuthnStatement; /* of LassoSaml2AuthnStatement */ GList *AuthzDecisionStatement; /* of LassoSaml2AuthzDecisionStatement */ GList *AttributeStatement; /* of LassoSaml2AttributeStatement */ /* attributes */ char *Version; char *ID; char *IssueInstant; /*< private >*/ /* ds:Signature stuffs */ LassoSignatureType sign_type; LassoSignatureMethod sign_method; char *private_key_file; char *certificate_file; gboolean encryption_activated; char *encryption_public_key_str; LassoEncryptionSymKeyType encryption_sym_key_type; }; struct _LassoSaml2AssertionClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_saml2_assertion_get_type(void); LASSO_EXPORT LassoNode* lasso_saml2_assertion_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAML2_ASSERTION_H__ */ lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/saml2_subject.h0000644000000000000000000000013114114336625020006 xustar0029 mtime=1630649749.86643743 30 atime=1678814151.016993891 30 ctime=1678814320.549950691 lasso-2.8.2/lasso/xml/saml-2.0/saml2_subject.h0000644000175000017500000000456614114336625023272 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAML2_SUBJECT_H__ #define __LASSO_SAML2_SUBJECT_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "saml2_subject_confirmation.h" #include "saml2_encrypted_element.h" #include "saml2_name_id.h" #include "saml2_base_idabstract.h" #define LASSO_TYPE_SAML2_SUBJECT (lasso_saml2_subject_get_type()) #define LASSO_SAML2_SUBJECT(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML2_SUBJECT, \ LassoSaml2Subject)) #define LASSO_SAML2_SUBJECT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML2_SUBJECT, \ LassoSaml2SubjectClass)) #define LASSO_IS_SAML2_SUBJECT(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML2_SUBJECT)) #define LASSO_IS_SAML2_SUBJECT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML2_SUBJECT)) #define LASSO_SAML2_SUBJECT_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML2_SUBJECT, \ LassoSaml2SubjectClass)) typedef struct _LassoSaml2Subject LassoSaml2Subject; typedef struct _LassoSaml2SubjectClass LassoSaml2SubjectClass; struct _LassoSaml2Subject { LassoNode parent; /*< public >*/ /* elements */ LassoSaml2BaseIDAbstract *BaseID; LassoSaml2NameID *NameID; LassoSaml2EncryptedElement *EncryptedID; LassoSaml2SubjectConfirmation *SubjectConfirmation; }; struct _LassoSaml2SubjectClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_saml2_subject_get_type(void); LASSO_EXPORT LassoNode* lasso_saml2_subject_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAML2_SUBJECT_H__ */ lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/samlp2_manage_name_id_request.h0000644000000000000000000000013214114336625023204 xustar0030 mtime=1630649749.870437474 30 atime=1678814151.020993912 30 ctime=1678814320.565950781 lasso-2.8.2/lasso/xml/saml-2.0/samlp2_manage_name_id_request.h0000644000175000017500000000543214114336625026460 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAMLP2_MANAGE_NAME_ID_REQUEST_H__ #define __LASSO_SAMLP2_MANAGE_NAME_ID_REQUEST_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "samlp2_request_abstract.h" #include "samlp2_terminate.h" #include "saml2_encrypted_element.h" #include "saml2_name_id.h" #define LASSO_TYPE_SAMLP2_MANAGE_NAME_ID_REQUEST (lasso_samlp2_manage_name_id_request_get_type()) #define LASSO_SAMLP2_MANAGE_NAME_ID_REQUEST(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAMLP2_MANAGE_NAME_ID_REQUEST, \ LassoSamlp2ManageNameIDRequest)) #define LASSO_SAMLP2_MANAGE_NAME_ID_REQUEST_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAMLP2_MANAGE_NAME_ID_REQUEST, \ LassoSamlp2ManageNameIDRequestClass)) #define LASSO_IS_SAMLP2_MANAGE_NAME_ID_REQUEST(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAMLP2_MANAGE_NAME_ID_REQUEST)) #define LASSO_IS_SAMLP2_MANAGE_NAME_ID_REQUEST_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAMLP2_MANAGE_NAME_ID_REQUEST)) #define LASSO_SAMLP2_MANAGE_NAME_ID_REQUEST_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAMLP2_MANAGE_NAME_ID_REQUEST, \ LassoSamlp2ManageNameIDRequestClass)) typedef struct _LassoSamlp2ManageNameIDRequest LassoSamlp2ManageNameIDRequest; typedef struct _LassoSamlp2ManageNameIDRequestClass LassoSamlp2ManageNameIDRequestClass; struct _LassoSamlp2ManageNameIDRequest { LassoSamlp2RequestAbstract parent; /*< public >*/ /* elements */ LassoSaml2NameID *NameID; LassoSaml2EncryptedElement *EncryptedID; char *NewID; LassoSaml2EncryptedElement *NewEncryptedID; LassoSamlp2Terminate *Terminate; }; struct _LassoSamlp2ManageNameIDRequestClass { LassoSamlp2RequestAbstractClass parent; }; LASSO_EXPORT GType lasso_samlp2_manage_name_id_request_get_type(void); LASSO_EXPORT LassoNode* lasso_samlp2_manage_name_id_request_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAMLP2_MANAGE_NAME_ID_REQUEST_H__ */ lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/saml2_one_time_use.c0000644000000000000000000000013114114336625021015 xustar0029 mtime=1630649749.86643743 30 atime=1678814158.977038395 30 ctime=1678814320.617951077 lasso-2.8.2/lasso/xml/saml-2.0/saml2_one_time_use.c0000644000175000017500000000577114114336625024300 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "saml2_one_time_use.h" /** * SECTION:saml2_one_time_use * @short_description: <saml2:OneTimeUse> * *
Schema fragment for saml2:OneTimeUse * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSaml2OneTimeUseClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "OneTimeUse"); lasso_node_class_set_ns(nclass, LASSO_SAML2_ASSERTION_HREF, LASSO_SAML2_ASSERTION_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_saml2_one_time_use_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSaml2OneTimeUseClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSaml2OneTimeUse), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_SAML2_CONDITION_ABSTRACT, "LassoSaml2OneTimeUse", &this_info, 0); } return this_type; } /** * lasso_saml2_one_time_use_new: * * Creates a new #LassoSaml2OneTimeUse object. * * Return value: a newly created #LassoSaml2OneTimeUse object **/ LassoNode* lasso_saml2_one_time_use_new() { return g_object_new(LASSO_TYPE_SAML2_ONE_TIME_USE, NULL); } lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/samlp2_artifact_resolve.c0000644000000000000000000000013114114336625022056 xustar0029 mtime=1630649749.86643743 30 atime=1678814162.933060531 30 ctime=1678814320.625951123 lasso-2.8.2/lasso/xml/saml-2.0/samlp2_artifact_resolve.c0000644000175000017500000000644114114336625025334 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "samlp2_artifact_resolve.h" /** * SECTION:samlp2_artifact_resolve * @short_description: <samlp2:ArtifactResolve> * *
Schema fragment for samlp2:ArtifactResolve * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "Artifact", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoSamlp2ArtifactResolve, Artifact), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSamlp2ArtifactResolveClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "ArtifactResolve"); lasso_node_class_set_ns(nclass, LASSO_SAML2_PROTOCOL_HREF, LASSO_SAML2_PROTOCOL_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_samlp2_artifact_resolve_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSamlp2ArtifactResolveClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSamlp2ArtifactResolve), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_SAMLP2_REQUEST_ABSTRACT, "LassoSamlp2ArtifactResolve", &this_info, 0); } return this_type; } /** * lasso_samlp2_artifact_resolve_new: * * Creates a new #LassoSamlp2ArtifactResolve object. * * Return value: a newly created #LassoSamlp2ArtifactResolve object **/ LassoNode* lasso_samlp2_artifact_resolve_new() { return g_object_new(LASSO_TYPE_SAMLP2_ARTIFACT_RESOLVE, NULL); } lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/samlp2_manage_name_id_response.c0000644000000000000000000000013214114336625023345 xustar0030 mtime=1630649749.870437474 30 atime=1678814171.157106583 30 ctime=1678814320.645951236 lasso-2.8.2/lasso/xml/saml-2.0/samlp2_manage_name_id_response.c0000644000175000017500000000575614114336625026632 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "samlp2_manage_name_id_response.h" /** * SECTION:samlp2_manage_name_id_response * @short_description: <samlp2:ManageNameIDResponse> * *
Schema fragment for samlp2:ManageNameIDResponse * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { {NULL, 0, 0, NULL, NULL, NULL} }; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSamlp2ManageNameIDResponseClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "ManageNameIDResponse"); lasso_node_class_set_ns(nclass, LASSO_SAML2_PROTOCOL_HREF, LASSO_SAML2_PROTOCOL_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_samlp2_manage_name_id_response_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSamlp2ManageNameIDResponseClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSamlp2ManageNameIDResponse), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_SAMLP2_STATUS_RESPONSE, "LassoSamlp2ManageNameIDResponse", &this_info, 0); } return this_type; } /** * lasso_samlp2_manage_name_id_response_new: * * Creates a new #LassoSamlp2ManageNameIDResponse object. * * Return value: a newly created #LassoSamlp2ManageNameIDResponse object **/ LassoNode* lasso_samlp2_manage_name_id_response_new() { return g_object_new(LASSO_TYPE_SAMLP2_MANAGE_NAME_ID_RESPONSE, NULL); } lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/samlp2_status_detail.h0000644000000000000000000000013214114336625021375 xustar0030 mtime=1630649749.870437474 30 atime=1678814151.024993934 30 ctime=1678814320.581950872 lasso-2.8.2/lasso/xml/saml-2.0/samlp2_status_detail.h0000644000175000017500000000437714114336625024660 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAMLP2_STATUS_DETAIL_H__ #define __LASSO_SAMLP2_STATUS_DETAIL_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "../xml.h" #define LASSO_TYPE_SAMLP2_STATUS_DETAIL (lasso_samlp2_status_detail_get_type()) #define LASSO_SAMLP2_STATUS_DETAIL(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAMLP2_STATUS_DETAIL, \ LassoSamlp2StatusDetail)) #define LASSO_SAMLP2_STATUS_DETAIL_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAMLP2_STATUS_DETAIL, \ LassoSamlp2StatusDetailClass)) #define LASSO_IS_SAMLP2_STATUS_DETAIL(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAMLP2_STATUS_DETAIL)) #define LASSO_IS_SAMLP2_STATUS_DETAIL_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAMLP2_STATUS_DETAIL)) #define LASSO_SAMLP2_STATUS_DETAIL_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAMLP2_STATUS_DETAIL, \ LassoSamlp2StatusDetailClass)) typedef struct _LassoSamlp2StatusDetail LassoSamlp2StatusDetail; typedef struct _LassoSamlp2StatusDetailClass LassoSamlp2StatusDetailClass; struct _LassoSamlp2StatusDetail { LassoNode parent; /*< public >*/ }; struct _LassoSamlp2StatusDetailClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_samlp2_status_detail_get_type(void); LASSO_EXPORT LassoNode* lasso_samlp2_status_detail_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAMLP2_STATUS_DETAIL_H__ */ lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/saml2_attribute_value.c0000644000000000000000000000013214335203004021527 xustar0030 mtime=1668613636.006239841 30 atime=1678814153.417007304 30 ctime=1678814320.597950964 lasso-2.8.2/lasso/xml/saml-2.0/saml2_attribute_value.c0000644000175000017500000001032514335203004025000 0ustar00bdauvergnebdauvergne00000000000000/* $Id: saml2_attribute_value.c 2820 2006-10-09 10:09:25Z dlaniel $ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "saml2_attribute_value.h" /** * SECTION:saml2_attribute_value * @short_description: value of an attribute in a SAML 2.0 assertion * @see_also: #LassoSaml2Attribute, #LassoSaml2AttributeStatement, #LassoSaml2Assertion * *
Schema fragment from saml-schema-assertion-2.0.xsd) * * * ]]> *
* * This object support a special of specifying its content. If the any * attribute is %NULL, then you can attach an xmlNode using * lasso_node_set_original_xmlnode() and it will be used to generate the content of the serialized * xmlNode for this object. The content (attributes, childrent and namespaces) of the * node will be copied to the result node created by a call to lasso_node_get_xmlNode(). */ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ struct _LassoSaml2AttributeValuePrivate { GHashTable *any_attributes; }; static struct XmlSnippet schema_snippets[] = { { "any", SNIPPET_LIST_NODES | SNIPPET_ANY | SNIPPET_ALLOW_TEXT, G_STRUCT_OFFSET(LassoSaml2AttributeValue, any), NULL, NULL, NULL}, { "any_attributes", SNIPPET_ATTRIBUTE | SNIPPET_ANY | SNIPPET_PRIVATE, G_STRUCT_OFFSET(struct _LassoSaml2AttributeValuePrivate, any_attributes), NULL, NULL, NULL }, {NULL, 0, 0, NULL, NULL, NULL} }; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static xmlNode* get_xmlNode(LassoNode *node, gboolean lasso_dump) { LassoSaml2AttributeValue *value = LASSO_SAML2_ATTRIBUTE_VALUE(node); LassoNodeClass *parent_class = NULL; xmlNode *cur; parent_class = g_type_class_peek_parent(LASSO_NODE_GET_CLASS(node)); cur = parent_class->get_xmlNode(node, lasso_dump); if (value->any) { return cur; } else { return lasso_node_get_xmlnode_for_any_type(node, cur); } } static void class_init(LassoSaml2AttributeValueClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); nclass->get_xmlNode = get_xmlNode; nclass->node_data->keep_xmlnode = TRUE; lasso_node_class_set_nodename(nclass, "AttributeValue"); lasso_node_class_set_ns(nclass, LASSO_SAML2_ASSERTION_HREF, LASSO_SAML2_ASSERTION_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); g_type_class_add_private(klass, sizeof(struct _LassoSaml2AttributeValuePrivate)); } GType lasso_saml2_attribute_value_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSaml2AttributeValueClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSaml2AttributeValue), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoSaml2AttributeValue", &this_info, 0); } return this_type; } LassoSaml2AttributeValue* lasso_saml2_attribute_value_new() { return g_object_new(LASSO_TYPE_SAML2_ATTRIBUTE_VALUE, NULL); } lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/saml2_statement_abstract.h0000644000000000000000000000013114114336625022236 xustar0029 mtime=1630649749.86643743 30 atime=1678814151.016993891 30 ctime=1678814320.545950667 lasso-2.8.2/lasso/xml/saml-2.0/saml2_statement_abstract.h0000644000175000017500000000454714114336625025521 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAML2_STATEMENT_ABSTRACT_H__ #define __LASSO_SAML2_STATEMENT_ABSTRACT_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "../xml.h" #define LASSO_TYPE_SAML2_STATEMENT_ABSTRACT (lasso_saml2_statement_abstract_get_type()) #define LASSO_SAML2_STATEMENT_ABSTRACT(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML2_STATEMENT_ABSTRACT, \ LassoSaml2StatementAbstract)) #define LASSO_SAML2_STATEMENT_ABSTRACT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML2_STATEMENT_ABSTRACT, \ LassoSaml2StatementAbstractClass)) #define LASSO_IS_SAML2_STATEMENT_ABSTRACT(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML2_STATEMENT_ABSTRACT)) #define LASSO_IS_SAML2_STATEMENT_ABSTRACT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML2_STATEMENT_ABSTRACT)) #define LASSO_SAML2_STATEMENT_ABSTRACT_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML2_STATEMENT_ABSTRACT, \ LassoSaml2StatementAbstractClass)) typedef struct _LassoSaml2StatementAbstract LassoSaml2StatementAbstract; typedef struct _LassoSaml2StatementAbstractClass LassoSaml2StatementAbstractClass; struct _LassoSaml2StatementAbstract { LassoNode parent; /*< public >*/ }; struct _LassoSaml2StatementAbstractClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_saml2_statement_abstract_get_type(void); LASSO_EXPORT LassoNode* lasso_saml2_statement_abstract_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAML2_STATEMENT_ABSTRACT_H__ */ lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/saml2_subject_confirmation_data.c0000644000000000000000000000013114114336625023542 xustar0029 mtime=1630649749.86643743 30 atime=1678814161.669053457 30 ctime=1678814320.625951123 lasso-2.8.2/lasso/xml/saml-2.0/saml2_subject_confirmation_data.c0000644000175000017500000001146714114336625027024 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "saml2_subject_confirmation_data.h" /** * SECTION:saml2_subject_confirmation_data * @short_description: <saml2:SubjectConfirmationData> * *
Schema fragment for saml2:SubjectConfirmationData * * * * * * * * * * * * * * * * ]]> *
*/ struct _LassoSaml2SubjectConfirmationDataPrivate { GList *any; GHashTable *attributes; }; /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "NotBefore", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSaml2SubjectConfirmationData, NotBefore), NULL, NULL, NULL}, { "NotOnOrAfter", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSaml2SubjectConfirmationData, NotOnOrAfter), NULL, NULL, NULL}, { "Recipient", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSaml2SubjectConfirmationData, Recipient), NULL, NULL, NULL}, { "InResponseTo", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSaml2SubjectConfirmationData, InResponseTo), NULL, NULL, NULL}, { "Address", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSaml2SubjectConfirmationData, Address), NULL, NULL, NULL}, { "", SNIPPET_LIST_NODES | SNIPPET_ANY | SNIPPET_PRIVATE, G_STRUCT_OFFSET(struct _LassoSaml2SubjectConfirmationDataPrivate, any), NULL, NULL, NULL}, { "", SNIPPET_ATTRIBUTE | SNIPPET_ANY | SNIPPET_PRIVATE, G_STRUCT_OFFSET(struct _LassoSaml2SubjectConfirmationDataPrivate, attributes), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSaml2SubjectConfirmationDataClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "SubjectConfirmationData"); lasso_node_class_set_ns(nclass, LASSO_SAML2_ASSERTION_HREF, LASSO_SAML2_ASSERTION_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); g_type_class_add_private(klass, sizeof(struct _LassoSaml2SubjectConfirmationDataPrivate)); } GType lasso_saml2_subject_confirmation_data_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSaml2SubjectConfirmationDataClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSaml2SubjectConfirmationData), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoSaml2SubjectConfirmationData", &this_info, 0); } return this_type; } /** * lasso_saml2_subject_confirmation_data_new: * * Creates a new #LassoSaml2SubjectConfirmationData object. * * Return value: a newly created #LassoSaml2SubjectConfirmationData object **/ LassoNode* lasso_saml2_subject_confirmation_data_new() { return g_object_new(LASSO_TYPE_SAML2_SUBJECT_CONFIRMATION_DATA, NULL); } lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/saml2_attribute.c0000644000000000000000000000013214114336625020346 xustar0030 mtime=1630649749.862437387 30 atime=1678814152.589002676 30 ctime=1678814320.593950941 lasso-2.8.2/lasso/xml/saml-2.0/saml2_attribute.c0000644000175000017500000000720314114336625023620 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "saml2_attribute.h" /** * SECTION:saml2_attribute * @short_description: <saml2:Attribute> * *
Schema fragment for saml2:Attribute * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "AttributeValue", SNIPPET_LIST_NODES, G_STRUCT_OFFSET(LassoSaml2Attribute, AttributeValue), NULL, NULL, NULL}, { "Name", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSaml2Attribute, Name), NULL, NULL, NULL}, { "NameFormat", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSaml2Attribute, NameFormat), NULL, NULL, NULL}, { "FriendlyName", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSaml2Attribute, FriendlyName), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSaml2AttributeClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "Attribute"); lasso_node_class_set_ns(nclass, LASSO_SAML2_ASSERTION_HREF, LASSO_SAML2_ASSERTION_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_saml2_attribute_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSaml2AttributeClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSaml2Attribute), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoSaml2Attribute", &this_info, 0); } return this_type; } /** * lasso_saml2_attribute_new: * * Creates a new #LassoSaml2Attribute object. * * Return value: a newly created #LassoSaml2Attribute object **/ LassoNode* lasso_saml2_attribute_new() { return g_object_new(LASSO_TYPE_SAML2_ATTRIBUTE, NULL); } lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/samlp2_name_id_mapping_response.c0000644000000000000000000000013014114336625023546 xustar0030 mtime=1630649749.870437474 29 atime=1678814172.18111232 29 ctime=1678814320.64995126 lasso-2.8.2/lasso/xml/saml-2.0/samlp2_name_id_mapping_response.c0000644000175000017500000000711514114336625027024 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "samlp2_name_id_mapping_response.h" /** * SECTION:samlp2_name_id_mapping_response * @short_description: <samlp2:NameIDMappingResponse> * *
Schema fragment for samlp2:NameIDMappingResponse * * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "NameID", SNIPPET_NODE | SNIPPET_JUMP_ON_MATCH | SNIPPET_JUMP_2, G_STRUCT_OFFSET(LassoSamlp2NameIDMappingResponse, NameID), NULL, LASSO_SAML2_ASSERTION_PREFIX, LASSO_SAML2_ASSERTION_HREF}, { "EncryptedID", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSamlp2NameIDMappingResponse, EncryptedID), NULL, LASSO_SAML2_ASSERTION_PREFIX, LASSO_SAML2_ASSERTION_HREF}, {NULL, 0, 0, NULL, NULL, NULL} }; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSamlp2NameIDMappingResponseClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "NameIDMappingResponse"); lasso_node_class_set_ns(nclass, LASSO_SAML2_PROTOCOL_HREF, LASSO_SAML2_PROTOCOL_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_samlp2_name_id_mapping_response_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSamlp2NameIDMappingResponseClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSamlp2NameIDMappingResponse), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_SAMLP2_STATUS_RESPONSE, "LassoSamlp2NameIDMappingResponse", &this_info, 0); } return this_type; } /** * lasso_samlp2_name_id_mapping_response_new: * * Creates a new #LassoSamlp2NameIDMappingResponse object. * * Return value: a newly created #LassoSamlp2NameIDMappingResponse object **/ LassoNode* lasso_samlp2_name_id_mapping_response_new() { return g_object_new(LASSO_TYPE_SAMLP2_NAME_ID_MAPPING_RESPONSE, NULL); } lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/samlp2_status_code.c0000644000000000000000000000013214114336625021040 xustar0030 mtime=1630649749.870437474 30 atime=1678814175.745132295 30 ctime=1678814320.661951328 lasso-2.8.2/lasso/xml/saml-2.0/samlp2_status_code.c0000644000175000017500000000635014114336625024314 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "samlp2_status_code.h" /** * SECTION:samlp2_status_code * @short_description: <samlp2:StatusCode> * *
Schema fragment for samlp2:StatusCode * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "StatusCode", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSamlp2StatusCode, StatusCode), NULL, NULL, NULL}, { "Value", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSamlp2StatusCode, Value), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSamlp2StatusCodeClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "StatusCode"); lasso_node_class_set_ns(nclass, LASSO_SAML2_PROTOCOL_HREF, LASSO_SAML2_PROTOCOL_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_samlp2_status_code_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSamlp2StatusCodeClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSamlp2StatusCode), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoSamlp2StatusCode", &this_info, 0); } return this_type; } /** * lasso_samlp2_status_code_new: * * Creates a new #LassoSamlp2StatusCode object. * * Return value: a newly created #LassoSamlp2StatusCode object **/ LassoNode* lasso_samlp2_status_code_new() { return g_object_new(LASSO_TYPE_SAMLP2_STATUS_CODE, NULL); } lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/saml2_authz_decision_statement.c0000644000000000000000000000013214114336625023437 xustar0030 mtime=1630649749.862437387 30 atime=1678814155.077016584 30 ctime=1678814320.605951009 lasso-2.8.2/lasso/xml/saml-2.0/saml2_authz_decision_statement.c0000644000175000017500000000767714114336625026730 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "saml2_authz_decision_statement.h" /** * SECTION:saml2_authz_decision_statement * @short_description: <saml2:AuthzDecisionStatement> * *
Schema fragment for saml2:AuthzDecisionStatement * * * * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "Action", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSaml2AuthzDecisionStatement, Action), NULL, NULL, NULL}, { "Evidence", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSaml2AuthzDecisionStatement, Evidence), NULL, NULL, NULL}, { "Resource", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSaml2AuthzDecisionStatement, Resource), NULL, NULL, NULL}, { "Decision", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSaml2AuthzDecisionStatement, Decision), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSaml2AuthzDecisionStatementClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "AuthzDecisionStatement"); lasso_node_class_set_ns(nclass, LASSO_SAML2_ASSERTION_HREF, LASSO_SAML2_ASSERTION_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_saml2_authz_decision_statement_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSaml2AuthzDecisionStatementClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSaml2AuthzDecisionStatement), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_SAML2_STATEMENT_ABSTRACT, "LassoSaml2AuthzDecisionStatement", &this_info, 0); } return this_type; } /** * lasso_saml2_authz_decision_statement_new: * * Creates a new #LassoSaml2AuthzDecisionStatement object. * * Return value: a newly created #LassoSaml2AuthzDecisionStatement object **/ LassoNode* lasso_saml2_authz_decision_statement_new() { return g_object_new(LASSO_TYPE_SAML2_AUTHZ_DECISION_STATEMENT, NULL); } lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/samlp2_extensions.c0000644000000000000000000000013214114336625020722 xustar0030 mtime=1630649749.870437474 30 atime=1678814167.045083551 30 ctime=1678814320.637951191 lasso-2.8.2/lasso/xml/saml-2.0/samlp2_extensions.c0000644000175000017500000001257414114336625024203 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "samlp2_extensions.h" /** * SECTION:samlp2_extensions * @short_description: <samlp2:Extensions> * *
Schema fragment for samlp2:Extensions * * * * * * ]]> *
* * To specify the content of this object you must attach an xmlNode to it using * lasso_node_set_original_xmlnode(). The content (attributes, children and namespaces) of this node * will be copied to the result node returned by calls to lasso_node_get_xmlNode(). * */ typedef struct _LassoSamlp2ExtensionsPrivate LassoSamlp2ExtensionsPrivate; struct _LassoSamlp2ExtensionsPrivate { GList *any; GHashTable *attributes; }; /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { {"", SNIPPET_LIST_XMLNODES | SNIPPET_ANY | SNIPPET_PRIVATE, G_STRUCT_OFFSET(LassoSamlp2ExtensionsPrivate, any), NULL, NULL, NULL}, {"", SNIPPET_ATTRIBUTE | SNIPPET_ANY | SNIPPET_PRIVATE, G_STRUCT_OFFSET(LassoSamlp2ExtensionsPrivate, attributes), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; #define GET_PRIVATE(x) G_TYPE_INSTANCE_GET_PRIVATE(x, \ LASSO_TYPE_SAMLP2_EXTENSIONS, LassoSamlp2ExtensionsPrivate) /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSamlp2ExtensionsClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); nclass->node_data->keep_xmlnode = TRUE; lasso_node_class_set_nodename(nclass, "Extensions"); lasso_node_class_set_ns(nclass, LASSO_SAML2_PROTOCOL_HREF, LASSO_SAML2_PROTOCOL_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); g_type_class_add_private(G_OBJECT_CLASS(klass), sizeof(LassoSamlp2ExtensionsPrivate)); } GType lasso_samlp2_extensions_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSamlp2ExtensionsClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSamlp2Extensions), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoSamlp2Extensions", &this_info, 0); } return this_type; } /** * lasso_samlp2_extensions_new: * * Creates a new #LassoSamlp2Extensions object. * * Return value: a newly created #LassoSamlp2Extensions object **/ LassoNode* lasso_samlp2_extensions_new() { return g_object_new(LASSO_TYPE_SAMLP2_EXTENSIONS, NULL); } /** * lasso_samlp2_extensions_get_any: * * Return the list of contained XML nodes. * * Return value:(element-type xmlNode)(transfer none): a #GList of xmlNode. */ GList* lasso_samlp2_extensions_get_any(LassoSamlp2Extensions *extensions) { LassoSamlp2ExtensionsPrivate *pv = NULL; pv = GET_PRIVATE(extensions); return pv->any; } /** * lasso_samlp2_extensions_set_any: * @any:(allow-none)(element-type xmlNode)(transfer none): a list of xmlNode. * * Set the list of contained XML nodes. * */ void lasso_samlp2_extensions_set_any(LassoSamlp2Extensions *extensions, GList *any) { LassoSamlp2ExtensionsPrivate *pv = NULL; pv = GET_PRIVATE(extensions); lasso_assign_list_of_xml_node(pv->any, any); } /** * lasso_samlp2_extensions_get_attributes: * * Return the list of contained XML nodes. * * Return value:(element-type xmlNode)(transfer none): a #GList of xmlNode. */ GHashTable* lasso_samlp2_extensions_get_attributes(LassoSamlp2Extensions *extensions) { LassoSamlp2ExtensionsPrivate *pv = NULL; pv = GET_PRIVATE(extensions); return pv->attributes; } /** * lasso_samlp2_extensions_set_attributes: * @attributes:(element-type char* char*): table of attributes. * * Set the table of XML attributes. */ void lasso_samlp2_extensions_set_attributes(LassoSamlp2Extensions *extensions, GHashTable *attributes) { LassoSamlp2ExtensionsPrivate *pv = NULL; pv = GET_PRIVATE(extensions); lasso_assign_table_of_attributes(pv->attributes, attributes); } lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/saml2_advice.h0000644000000000000000000000013214114336625017603 xustar0030 mtime=1630649749.862437387 30 atime=1678814151.016993891 30 ctime=1678814320.517950508 lasso-2.8.2/lasso/xml/saml-2.0/saml2_advice.h0000644000175000017500000000442014114336625023053 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAML2_ADVICE_H__ #define __LASSO_SAML2_ADVICE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "../xml.h" #define LASSO_TYPE_SAML2_ADVICE (lasso_saml2_advice_get_type()) #define LASSO_SAML2_ADVICE(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML2_ADVICE, \ LassoSaml2Advice)) #define LASSO_SAML2_ADVICE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML2_ADVICE, \ LassoSaml2AdviceClass)) #define LASSO_IS_SAML2_ADVICE(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML2_ADVICE)) #define LASSO_IS_SAML2_ADVICE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML2_ADVICE)) #define LASSO_SAML2_ADVICE_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML2_ADVICE, \ LassoSaml2AdviceClass)) typedef struct _LassoSaml2Advice LassoSaml2Advice; typedef struct _LassoSaml2AdviceClass LassoSaml2AdviceClass; struct _LassoSaml2Advice { LassoNode parent; /*< public >*/ /* elements */ GList *AssertionIDRef; /* of LassoNode */ GList *AssertionURIRef; /* of LassoNode */ GList *Assertion; /* of LassoSaml2Assertion */ GList *EncryptedAssertion; /* of LassoSaml2EncryptedElement */ }; struct _LassoSaml2AdviceClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_saml2_advice_get_type(void); LASSO_EXPORT LassoNode* lasso_saml2_advice_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAML2_ADVICE_H__ */ lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/saml2_audience_restriction.c0000644000000000000000000000013214114336625022545 xustar0030 mtime=1630649749.862437387 30 atime=1678814153.829009607 30 ctime=1678814320.597950964 lasso-2.8.2/lasso/xml/saml-2.0/saml2_audience_restriction.c0000644000175000017500000000655714114336625026032 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "saml2_audience_restriction.h" /** * SECTION:saml2_audience_restriction * @short_description: <saml2:AudienceRestriction> * *
Schema fragment for saml2:AudienceRestriction * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "Audience", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoSaml2AudienceRestriction, Audience), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSaml2AudienceRestrictionClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "AudienceRestriction"); lasso_node_class_set_ns(nclass, LASSO_SAML2_ASSERTION_HREF, LASSO_SAML2_ASSERTION_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_saml2_audience_restriction_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSaml2AudienceRestrictionClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSaml2AudienceRestriction), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_SAML2_CONDITION_ABSTRACT, "LassoSaml2AudienceRestriction", &this_info, 0); } return this_type; } /** * lasso_saml2_audience_restriction_new: * * Creates a new #LassoSaml2AudienceRestriction object. * * Return value: a newly created #LassoSaml2AudienceRestriction object **/ LassoNode* lasso_saml2_audience_restriction_new() { return g_object_new(LASSO_TYPE_SAML2_AUDIENCE_RESTRICTION, NULL); } lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/samlp2_artifact_response.c0000644000000000000000000000013114114336625022235 xustar0029 mtime=1630649749.86643743 30 atime=1678814163.465063508 30 ctime=1678814320.629951145 lasso-2.8.2/lasso/xml/saml-2.0/samlp2_artifact_response.c0000644000175000017500000000651614114336625025516 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "samlp2_artifact_response.h" /** * SECTION:samlp2_artifact_response * @short_description: <samlp2:ArtifactResponse> * *
Schema fragment for samlp2:ArtifactResponse * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "any", SNIPPET_NODE | SNIPPET_ANY, G_STRUCT_OFFSET(LassoSamlp2ArtifactResponse, any), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSamlp2ArtifactResponseClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "ArtifactResponse"); lasso_node_class_set_ns(nclass, LASSO_SAML2_PROTOCOL_HREF, LASSO_SAML2_PROTOCOL_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_samlp2_artifact_response_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSamlp2ArtifactResponseClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSamlp2ArtifactResponse), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_SAMLP2_STATUS_RESPONSE, "LassoSamlp2ArtifactResponse", &this_info, 0); } return this_type; } /** * lasso_samlp2_artifact_response_new: * * Creates a new #LassoSamlp2ArtifactResponse object. * * Return value: a newly created #LassoSamlp2ArtifactResponse object **/ LassoNode* lasso_samlp2_artifact_response_new() { return g_object_new(LASSO_TYPE_SAMLP2_ARTIFACT_RESPONSE, NULL); } lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/samlp2_response.c0000644000000000000000000000013214114336625020361 xustar0030 mtime=1630649749.870437474 30 atime=1678814174.153123371 30 ctime=1678814320.653951282 lasso-2.8.2/lasso/xml/saml-2.0/samlp2_response.c0000644000175000017500000001132714114336625023635 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "samlp2_response.h" #include "saml2_assertion.h" #include "saml2_encrypted_element.h" #include "../../utils.h" /** * SECTION:samlp2_response * @short_description: <samlp2:Response> * *
Schema fragment for samlp2:Response * * * * * * * * * * * ]]> *
*/ extern LassoNode* lasso_assertion_encrypt(LassoSaml2Assertion *assertion, char *recipient); /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "Assertion", SNIPPET_LIST_NODES, G_STRUCT_OFFSET(LassoSamlp2Response, Assertion), NULL, LASSO_SAML2_ASSERTION_PREFIX, LASSO_SAML2_ASSERTION_HREF}, { "EncryptedAssertion", SNIPPET_LIST_NODES | SNIPPET_JUMP_ON_MATCH | SNIPPET_BACK_1, G_STRUCT_OFFSET(LassoSamlp2Response, EncryptedAssertion), NULL, LASSO_SAML2_ASSERTION_PREFIX, LASSO_SAML2_ASSERTION_HREF}, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; static xmlNode* get_xmlNode(LassoNode *node, gboolean lasso_dump) { LassoSamlp2Response *response = LASSO_SAMLP2_RESPONSE(node); GList *assertions = NULL; GList *Assertion_save = NULL; LassoNode *encrypted_element = NULL; xmlNode *result = NULL; /* Encrypt Assertions for messages but not for dumps */ if (lasso_dump == FALSE) { Assertion_save = response->Assertion; response->Assertion = NULL; lasso_foreach (assertions, Assertion_save) { encrypted_element = lasso_assertion_encrypt(assertions->data, NULL); if (encrypted_element != NULL) { lasso_list_add_new_gobject(response->EncryptedAssertion, encrypted_element); } else { lasso_list_add_gobject(response->Assertion, assertions->data); } } } result = parent_class->get_xmlNode(node, lasso_dump); if (lasso_dump == FALSE) { lasso_release_list_of_gobjects(response->EncryptedAssertion); lasso_assign_new_list_of_gobjects(response->Assertion, Assertion_save); } return result; } /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSamlp2ResponseClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->get_xmlNode = get_xmlNode; nclass->node_data = g_new0(LassoNodeClassData, 1); nclass->node_data->keep_xmlnode = TRUE; lasso_node_class_set_nodename(nclass, "Response"); lasso_node_class_set_ns(nclass, LASSO_SAML2_PROTOCOL_HREF, LASSO_SAML2_PROTOCOL_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_samlp2_response_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSamlp2ResponseClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSamlp2Response), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_SAMLP2_STATUS_RESPONSE, "LassoSamlp2Response", &this_info, 0); } return this_type; } /** * lasso_samlp2_response_new: * * Creates a new #LassoSamlp2Response object. * * Return value: a newly created #LassoSamlp2Response object **/ LassoNode* lasso_samlp2_response_new() { return g_object_new(LASSO_TYPE_SAMLP2_RESPONSE, NULL); } lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/samlp2_response.h0000644000000000000000000000013114114336625020365 xustar0030 mtime=1630649749.870437474 30 atime=1678814151.020993912 29 ctime=1678814320.57795085 lasso-2.8.2/lasso/xml/saml-2.0/samlp2_response.h0000644000175000017500000000446614114336625023650 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAMLP2_RESPONSE_H__ #define __LASSO_SAMLP2_RESPONSE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "samlp2_status_response.h" #define LASSO_TYPE_SAMLP2_RESPONSE (lasso_samlp2_response_get_type()) #define LASSO_SAMLP2_RESPONSE(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAMLP2_RESPONSE, \ LassoSamlp2Response)) #define LASSO_SAMLP2_RESPONSE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAMLP2_RESPONSE, \ LassoSamlp2ResponseClass)) #define LASSO_IS_SAMLP2_RESPONSE(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAMLP2_RESPONSE)) #define LASSO_IS_SAMLP2_RESPONSE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAMLP2_RESPONSE)) #define LASSO_SAMLP2_RESPONSE_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAMLP2_RESPONSE, \ LassoSamlp2ResponseClass)) typedef struct _LassoSamlp2Response LassoSamlp2Response; typedef struct _LassoSamlp2ResponseClass LassoSamlp2ResponseClass; struct _LassoSamlp2Response { LassoSamlp2StatusResponse parent; /*< public >*/ /* elements */ GList *Assertion; /* of LassoSaml2Assertion */ GList *EncryptedAssertion; /* of LassoSaml2EncryptedElement */ }; struct _LassoSamlp2ResponseClass { LassoSamlp2StatusResponseClass parent; }; LASSO_EXPORT GType lasso_samlp2_response_get_type(void); LASSO_EXPORT LassoNode* lasso_samlp2_response_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAMLP2_RESPONSE_H__ */ lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/saml2_key_info_confirmation_data_type.c0000644000000000000000000000013214364261206024747 xustar0030 mtime=1674666630.762769217 30 atime=1678814158.013033003 30 ctime=1678814320.613951055 lasso-2.8.2/lasso/xml/saml-2.0/saml2_key_info_confirmation_data_type.c0000644000175000017500000001427614364261206030231 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "saml2_key_info_confirmation_data_type.h" #include "../../registry.h" #include "../dsig/ds_key_info.h" #include "../../utils.h" /** * SECTION:saml2_key_info_confirmation_data_type * @short_description: <saml2:KeyInfoConfirmationDataType> * *
Schema fragment for saml2:KeyInfoConfirmationDataType * * * * * * * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ struct _LassoSaml2KeyInfoConfirmationDataTypePrivate { GList *KeyInfo; }; static struct XmlSnippet schema_snippets[] = { { "KeyInfo", SNIPPET_LIST_NODES|SNIPPET_PRIVATE, G_STRUCT_OFFSET(LassoSaml2KeyInfoConfirmationDataTypePrivate, KeyInfo), "LassoDsKeyInfo", LASSO_DS_PREFIX, LASSO_DS_HREF}, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; #define LASSO_SAML2_KEY_INFO_CONFIRMATION_DATA_TYPE_GET_PRIVATE(o) \ (G_TYPE_INSTANCE_GET_PRIVATE ((o), LASSO_TYPE_SAML2_KEY_INFO_CONFIRMATION_DATA_TYPE, LassoSaml2KeyInfoConfirmationDataTypePrivate)) /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void instance_init(LassoSaml2KeyInfoConfirmationDataType *saml2_key_info_confirmation_data_type, G_GNUC_UNUSED void *unused) { saml2_key_info_confirmation_data_type->private_data = LASSO_SAML2_KEY_INFO_CONFIRMATION_DATA_TYPE_GET_PRIVATE( saml2_key_info_confirmation_data_type); } static void class_init(LassoSaml2KeyInfoConfirmationDataTypeClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); nclass->node_data->xsi_sub_type = TRUE; lasso_node_class_set_nodename(nclass, "KeyInfoConfirmationDataType"); lasso_node_class_set_ns(nclass, LASSO_SAML2_ASSERTION_HREF, LASSO_SAML2_ASSERTION_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); g_type_class_add_private(klass, sizeof(LassoSaml2KeyInfoConfirmationDataTypePrivate)); } GType lasso_saml2_key_info_confirmation_data_type_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSaml2KeyInfoConfirmationDataTypeClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSaml2KeyInfoConfirmationDataType), 0, (GInstanceInitFunc)instance_init, NULL }; this_type = g_type_register_static(LASSO_TYPE_SAML2_SUBJECT_CONFIRMATION_DATA, "LassoSaml2KeyInfoConfirmationDataType", &this_info, 0); lasso_registry_default_add_direct_mapping(LASSO_SAML2_ASSERTION_HREF, "KeyInfoConfirmationDataType", LASSO_LASSO_HREF, "LassoSaml2KeyInfoConfirmationDataType"); } return this_type; } /** * lasso_saml2_key_info_confirmation_data_type_new: * * Creates a new #LassoSaml2KeyInfoConfirmationDataType object. * * Return value: a newly created #LassoSaml2KeyInfoConfirmationDataType object **/ LassoNode* lasso_saml2_key_info_confirmation_data_type_new() { return g_object_new(LASSO_TYPE_SAML2_KEY_INFO_CONFIRMATION_DATA_TYPE, NULL); } /** * lasso_saml2_key_info_confirmation_data_type_get_key_info: * @kicdt: a #LassoSaml2KeyInfoConfirmationDataType object. * * Return the list of KeyInfo node contained in the saml2:SubjectConfirmationData of type * saml2:KeyInfoConfirmationDataType. * * Return value:(element-type LassoDsKeyInfo)(transfer none): a list of #LassoDsKeyInfo objects. */ GList* lasso_saml2_key_info_confirmation_data_type_get_key_info( LassoSaml2KeyInfoConfirmationDataType *kicdt) { lasso_return_val_if_fail(LASSO_IS_SAML2_KEY_INFO_CONFIRMATION_DATA_TYPE(kicdt), NULL); return kicdt->private_data->KeyInfo; } /** * lasso_saml2_key_info_confirmation_data_type_set_key_info: * @kicdt: a #LassoSaml2KeyInfoConfirmationDataType object. * @key_infos:(tranfer none)(element-type LassoDsKeyInfo): a list of #LassoDsKeyInfo object. * * Set the list of ds:KeyInfo nodes for the saml2:SubjectConfirmationData of type * saml2:KeyInfoConfirmationDataType. */ void lasso_saml2_key_info_confirmation_data_type_set_key_info( LassoSaml2KeyInfoConfirmationDataType *kicdt, GList *key_infos) { lasso_return_if_fail(LASSO_IS_SAML2_KEY_INFO_CONFIRMATION_DATA_TYPE(kicdt)); lasso_assign_list_of_gobjects( kicdt->private_data->KeyInfo, key_infos); } lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/samlp2_logout_response.h0000644000000000000000000000013214114336625021757 xustar0030 mtime=1630649749.870437474 30 atime=1678814151.020993912 30 ctime=1678814320.565950781 lasso-2.8.2/lasso/xml/saml-2.0/samlp2_logout_response.h0000644000175000017500000000473014114336625025233 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAMLP2_LOGOUT_RESPONSE_H__ #define __LASSO_SAMLP2_LOGOUT_RESPONSE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "samlp2_status_response.h" #define LASSO_TYPE_SAMLP2_LOGOUT_RESPONSE (lasso_samlp2_logout_response_get_type()) #define LASSO_SAMLP2_LOGOUT_RESPONSE(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAMLP2_LOGOUT_RESPONSE, \ LassoSamlp2LogoutResponse)) #define LASSO_SAMLP2_LOGOUT_RESPONSE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAMLP2_LOGOUT_RESPONSE, \ LassoSamlp2LogoutResponseClass)) #define LASSO_IS_SAMLP2_LOGOUT_RESPONSE(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAMLP2_LOGOUT_RESPONSE)) #define LASSO_IS_SAMLP2_LOGOUT_RESPONSE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAMLP2_LOGOUT_RESPONSE)) #define LASSO_SAMLP2_LOGOUT_RESPONSE_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAMLP2_LOGOUT_RESPONSE, \ LassoSamlp2LogoutResponseClass)) typedef struct _LassoSamlp2LogoutResponse LassoSamlp2LogoutResponse; typedef struct _LassoSamlp2LogoutResponseClass LassoSamlp2LogoutResponseClass; struct _LassoSamlp2LogoutResponse { LassoSamlp2StatusResponse parent; /* This field is deprecated do not use it, * kept for ABI compatibility */ /*< private >*/ G_GNUC_DEPRECATED char *relayState; }; struct _LassoSamlp2LogoutResponseClass { LassoSamlp2StatusResponseClass parent; }; LASSO_EXPORT GType lasso_samlp2_logout_response_get_type(void); LASSO_EXPORT LassoNode* lasso_samlp2_logout_response_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAMLP2_LOGOUT_RESPONSE_H__ */ lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/samlp2_status_detail.c0000644000000000000000000000013114114336625021367 xustar0030 mtime=1630649749.870437474 30 atime=1678814176.201134851 29 ctime=1678814320.66595135 lasso-2.8.2/lasso/xml/saml-2.0/samlp2_status_detail.c0000644000175000017500000000604314114336625024643 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "samlp2_status_detail.h" /** * SECTION:samlp2_status_detail * @short_description: <samlp2:StatusDetail> * *
Schema fragment for samlp2:StatusDetail * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSamlp2StatusDetailClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "StatusDetail"); lasso_node_class_set_ns(nclass, LASSO_SAML2_PROTOCOL_HREF, LASSO_SAML2_PROTOCOL_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_samlp2_status_detail_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSamlp2StatusDetailClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSamlp2StatusDetail), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoSamlp2StatusDetail", &this_info, 0); } return this_type; } /** * lasso_samlp2_status_detail_new: * * Creates a new #LassoSamlp2StatusDetail object. * * Return value: a newly created #LassoSamlp2StatusDetail object **/ LassoNode* lasso_samlp2_status_detail_new() { return g_object_new(LASSO_TYPE_SAMLP2_STATUS_DETAIL, NULL); } lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/samlp2_assertion_id_request.c0000644000000000000000000000013114114336625022755 xustar0029 mtime=1630649749.86643743 30 atime=1678814164.145067315 30 ctime=1678814320.629951145 lasso-2.8.2/lasso/xml/saml-2.0/samlp2_assertion_id_request.c0000644000175000017500000000665614114336625026243 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "samlp2_assertion_id_request.h" /** * SECTION:samlp2_assertion_idrequest * @short_description: <samlp2:AssertionIDRequest> * *
Schema fragment for samlp2:AssertionIDRequest * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "AssertionIDRef", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoSamlp2AssertionIDRequest, AssertionIDRef), NULL, LASSO_SAML2_ASSERTION_PREFIX, LASSO_SAML2_ASSERTION_HREF}, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSamlp2AssertionIDRequestClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "AssertionIDRequest"); lasso_node_class_set_ns(nclass, LASSO_SAML2_PROTOCOL_HREF, LASSO_SAML2_PROTOCOL_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_samlp2_assertion_id_request_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSamlp2AssertionIDRequestClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSamlp2AssertionIDRequest), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_SAMLP2_REQUEST_ABSTRACT, "LassoSamlp2AssertionIDRequest", &this_info, 0); } return this_type; } /** * lasso_samlp2_assertion_id_request_new: * * Creates a new #LassoSamlp2AssertionIDRequest object. * * Return value: a newly created #LassoSamlp2AssertionIDRequest object **/ LassoNode* lasso_samlp2_assertion_id_request_new() { return g_object_new(LASSO_TYPE_SAMLP2_ASSERTION_ID_REQUEST, NULL); } lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/saml2_key_info_confirmation_data.h0000644000000000000000000000013114114336625023713 xustar0029 mtime=1630649749.86643743 30 atime=1678814151.016993891 30 ctime=1678814320.537950621 lasso-2.8.2/lasso/xml/saml-2.0/saml2_key_info_confirmation_data.h0000644000175000017500000000512214114336625027164 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAML2_KEY_INFO_CONFIRMATION_DATA_H__ #define __LASSO_SAML2_KEY_INFO_CONFIRMATION_DATA_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "../xml.h" #define LASSO_TYPE_SAML2_KEY_INFO_CONFIRMATION_DATA \ (lasso_saml2_key_info_confirmation_data_get_type()) #define LASSO_SAML2_KEY_INFO_CONFIRMATION_DATA(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML2_KEY_INFO_CONFIRMATION_DATA, \ LassoSaml2KeyInfoConfirmationData)) #define LASSO_SAML2_KEY_INFO_CONFIRMATION_DATA_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML2_KEY_INFO_CONFIRMATION_DATA, \ LassoSaml2KeyInfoConfirmationDataClass)) #define LASSO_IS_SAML2_KEY_INFO_CONFIRMATION_DATA(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML2_KEY_INFO_CONFIRMATION_DATA)) #define LASSO_IS_SAML2_KEY_INFO_CONFIRMATION_DATA_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML2_KEY_INFO_CONFIRMATION_DATA)) #define LASSO_SAML2_KEY_INFO_CONFIRMATION_DATA_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML2_KEY_INFO_CONFIRMATION_DATA, \ LassoSaml2KeyInfoConfirmationDataClass)) typedef struct _LassoSaml2KeyInfoConfirmationData LassoSaml2KeyInfoConfirmationData; typedef struct _LassoSaml2KeyInfoConfirmationDataClass LassoSaml2KeyInfoConfirmationDataClass; struct _LassoSaml2KeyInfoConfirmationData { LassoNode parent; /*< public >*/ /* elements */ /* XXX */ void *KeyInfo; }; struct _LassoSaml2KeyInfoConfirmationDataClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_saml2_key_info_confirmation_data_get_type(void); LASSO_EXPORT LassoNode* lasso_saml2_key_info_confirmation_data_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAML2_KEY_INFO_CONFIRMATION_DATA_H__ */ lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/samlp2_status.h0000644000000000000000000000013214114336625020053 xustar0030 mtime=1630649749.870437474 30 atime=1678814151.020993912 30 ctime=1678814320.581950872 lasso-2.8.2/lasso/xml/saml-2.0/samlp2_status.h0000644000175000017500000000436214114336625023330 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAMLP2_STATUS_H__ #define __LASSO_SAMLP2_STATUS_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "samlp2_status_code.h" #include "samlp2_status_detail.h" #define LASSO_TYPE_SAMLP2_STATUS (lasso_samlp2_status_get_type()) #define LASSO_SAMLP2_STATUS(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAMLP2_STATUS, \ LassoSamlp2Status)) #define LASSO_SAMLP2_STATUS_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAMLP2_STATUS, \ LassoSamlp2StatusClass)) #define LASSO_IS_SAMLP2_STATUS(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAMLP2_STATUS)) #define LASSO_IS_SAMLP2_STATUS_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAMLP2_STATUS)) #define LASSO_SAMLP2_STATUS_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAMLP2_STATUS, \ LassoSamlp2StatusClass)) typedef struct _LassoSamlp2Status LassoSamlp2Status; typedef struct _LassoSamlp2StatusClass LassoSamlp2StatusClass; struct _LassoSamlp2Status { LassoNode parent; /*< public >*/ /* elements */ LassoSamlp2StatusCode *StatusCode; char *StatusMessage; LassoSamlp2StatusDetail *StatusDetail; }; struct _LassoSamlp2StatusClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_samlp2_status_get_type(void); LASSO_EXPORT LassoNode* lasso_samlp2_status_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAMLP2_STATUS_H__ */ lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/samlp2_attribute_query.h0000644000000000000000000000013114114336625021757 xustar0029 mtime=1630649749.86643743 30 atime=1678814151.020993912 30 ctime=1678814320.553950713 lasso-2.8.2/lasso/xml/saml-2.0/samlp2_attribute_query.h0000644000175000017500000000472314114336625025236 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAMLP2_ATTRIBUTE_QUERY_H__ #define __LASSO_SAMLP2_ATTRIBUTE_QUERY_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "samlp2_subject_query_abstract.h" #include "saml2_attribute.h" #define LASSO_TYPE_SAMLP2_ATTRIBUTE_QUERY (lasso_samlp2_attribute_query_get_type()) #define LASSO_SAMLP2_ATTRIBUTE_QUERY(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAMLP2_ATTRIBUTE_QUERY, \ LassoSamlp2AttributeQuery)) #define LASSO_SAMLP2_ATTRIBUTE_QUERY_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAMLP2_ATTRIBUTE_QUERY, \ LassoSamlp2AttributeQueryClass)) #define LASSO_IS_SAMLP2_ATTRIBUTE_QUERY(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAMLP2_ATTRIBUTE_QUERY)) #define LASSO_IS_SAMLP2_ATTRIBUTE_QUERY_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAMLP2_ATTRIBUTE_QUERY)) #define LASSO_SAMLP2_ATTRIBUTE_QUERY_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAMLP2_ATTRIBUTE_QUERY, \ LassoSamlp2AttributeQueryClass)) typedef struct _LassoSamlp2AttributeQuery LassoSamlp2AttributeQuery; typedef struct _LassoSamlp2AttributeQueryClass LassoSamlp2AttributeQueryClass; struct _LassoSamlp2AttributeQuery { LassoSamlp2SubjectQueryAbstract parent; /*< public >*/ /* elements */ GList *Attribute; /* of LassoSaml2Attribute */ }; struct _LassoSamlp2AttributeQueryClass { LassoSamlp2SubjectQueryAbstractClass parent; }; LASSO_EXPORT GType lasso_samlp2_attribute_query_get_type(void); LASSO_EXPORT LassoNode* lasso_samlp2_attribute_query_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAMLP2_ATTRIBUTE_QUERY_H__ */ lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/samlp2_status_code.h0000644000000000000000000000013114114336625021044 xustar0030 mtime=1630649749.870437474 30 atime=1678814151.024993934 29 ctime=1678814320.57795085 lasso-2.8.2/lasso/xml/saml-2.0/samlp2_status_code.h0000644000175000017500000000443714114336625024325 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAMLP2_STATUS_CODE_H__ #define __LASSO_SAMLP2_STATUS_CODE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "../xml.h" #define LASSO_TYPE_SAMLP2_STATUS_CODE (lasso_samlp2_status_code_get_type()) #define LASSO_SAMLP2_STATUS_CODE(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAMLP2_STATUS_CODE, \ LassoSamlp2StatusCode)) #define LASSO_SAMLP2_STATUS_CODE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAMLP2_STATUS_CODE, \ LassoSamlp2StatusCodeClass)) #define LASSO_IS_SAMLP2_STATUS_CODE(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAMLP2_STATUS_CODE)) #define LASSO_IS_SAMLP2_STATUS_CODE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAMLP2_STATUS_CODE)) #define LASSO_SAMLP2_STATUS_CODE_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAMLP2_STATUS_CODE, \ LassoSamlp2StatusCodeClass)) typedef struct _LassoSamlp2StatusCode LassoSamlp2StatusCode; typedef struct _LassoSamlp2StatusCodeClass LassoSamlp2StatusCodeClass; struct _LassoSamlp2StatusCode { LassoNode parent; /*< public >*/ /* elements */ LassoSamlp2StatusCode *StatusCode; /* attributes */ char *Value; }; struct _LassoSamlp2StatusCodeClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_samlp2_status_code_get_type(void); LASSO_EXPORT LassoNode* lasso_samlp2_status_code_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAMLP2_STATUS_CODE_H__ */ lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/saml2_subject.c0000644000000000000000000000013114114336625020001 xustar0029 mtime=1630649749.86643743 30 atime=1678814160.393046317 30 ctime=1678814320.621951101 lasso-2.8.2/lasso/xml/saml-2.0/saml2_subject.c0000644000175000017500000000764314114336625023264 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "saml2_subject.h" /** * SECTION:saml2_subject * @short_description: <saml2:Subject> * *
Schema fragment for saml2:Subject * * * * * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "BaseID", SNIPPET_NODE | SNIPPET_JUMP_ON_MATCH | SNIPPET_JUMP_3, G_STRUCT_OFFSET(LassoSaml2Subject, BaseID), NULL, NULL, NULL}, { "NameID", SNIPPET_NODE | SNIPPET_JUMP_ON_MATCH | SNIPPET_JUMP_2, G_STRUCT_OFFSET(LassoSaml2Subject, NameID), NULL, NULL, NULL}, { "EncryptedID", SNIPPET_NODE | SNIPPET_JUMP_ON_MISS | SNIPPET_JUMP_2, G_STRUCT_OFFSET(LassoSaml2Subject, EncryptedID), "LassoSaml2EncryptedElement", NULL, NULL}, { "SubjectConfirmation", SNIPPET_NODE | SNIPPET_OPTIONAL | SNIPPET_JUMP_ON_MATCH | SNIPPET_JUMP_2, G_STRUCT_OFFSET(LassoSaml2Subject, SubjectConfirmation), NULL, NULL, NULL}, { "SubjectConfirmation", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSaml2Subject, SubjectConfirmation), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSaml2SubjectClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "Subject"); lasso_node_class_set_ns(nclass, LASSO_SAML2_ASSERTION_HREF, LASSO_SAML2_ASSERTION_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_saml2_subject_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSaml2SubjectClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSaml2Subject), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoSaml2Subject", &this_info, 0); } return this_type; } /** * lasso_saml2_subject_new: * * Creates a new #LassoSaml2Subject object. * * Return value: a newly created #LassoSaml2Subject object **/ LassoNode* lasso_saml2_subject_new() { return g_object_new(LASSO_TYPE_SAML2_SUBJECT, NULL); } lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/samlp2_status_response.c0000644000000000000000000000013114364261206021762 xustar0030 mtime=1674666630.762769217 30 atime=1678814176.621137206 29 ctime=1678814320.66595135 lasso-2.8.2/lasso/xml/saml-2.0/samlp2_status_response.c0000644000175000017500000001525214364261206025240 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "../../utils.h" #include "samlp2_status_response.h" #include "saml2_strings.h" #include #include /** * SECTION:samlp2_status_response * @short_description: <samlp2:StatusResponse> * *
Schema fragment for samlp2:StatusResponse * * * * * * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "Issuer", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSamlp2StatusResponse, Issuer), "LassoSaml2NameID", LASSO_SAML2_ASSERTION_PREFIX, LASSO_SAML2_ASSERTION_HREF}, { "Signature", SNIPPET_SIGNATURE, G_STRUCT_OFFSET(LassoSamlp2StatusResponse, ID), NULL, LASSO_DS_PREFIX, LASSO_DS_HREF}, { "Extensions", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSamlp2StatusResponse, Extensions), NULL, NULL, NULL}, { "Status", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSamlp2StatusResponse, Status), NULL, NULL, NULL}, { "ID", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSamlp2StatusResponse, ID), NULL, NULL, NULL}, { "InResponseTo", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSamlp2StatusResponse, InResponseTo), NULL, NULL, NULL}, { "Version", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSamlp2StatusResponse, Version), NULL, NULL, NULL}, { "IssueInstant", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSamlp2StatusResponse, IssueInstant), NULL, NULL, NULL}, { "Destination", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSamlp2StatusResponse, Destination), NULL, NULL, NULL}, { "Consent", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSamlp2StatusResponse, Consent), NULL, NULL, NULL}, /* hidden fields; used in lasso dumps */ { "SignType", SNIPPET_ATTRIBUTE | SNIPPET_INTEGER | SNIPPET_LASSO_DUMP, G_STRUCT_OFFSET(LassoSamlp2StatusResponse, sign_type), NULL, NULL, NULL}, { "SignMethod", SNIPPET_ATTRIBUTE | SNIPPET_INTEGER | SNIPPET_LASSO_DUMP, G_STRUCT_OFFSET(LassoSamlp2StatusResponse, sign_method), NULL, NULL, NULL}, { "PrivateKeyFile", SNIPPET_CONTENT | SNIPPET_LASSO_DUMP, G_STRUCT_OFFSET(LassoSamlp2StatusResponse, private_key_file), NULL, NULL, NULL}, { "CertificateFile", SNIPPET_CONTENT | SNIPPET_LASSO_DUMP, G_STRUCT_OFFSET(LassoSamlp2StatusResponse, certificate_file), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; static gchar* build_query(LassoNode *node) { char *ret, *deflated_message; deflated_message = lasso_node_build_deflated_query(node); if (deflated_message == NULL) { return NULL; } ret = g_strdup_printf(LASSO_SAML2_FIELD_RESPONSE "=%s", deflated_message); lasso_release(deflated_message); return ret; } static gboolean init_from_query(LassoNode *node, char **query_fields) { return lasso_node_init_from_saml2_query_fields(node, query_fields, NULL); } /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void instance_init(LassoSamlp2StatusResponse *node, G_GNUC_UNUSED void *unused) { node->sign_type = LASSO_SIGNATURE_TYPE_NONE; } static void class_init(LassoSamlp2StatusResponseClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->build_query = build_query; nclass->init_from_query = init_from_query; nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "StatusResponse"); lasso_node_class_set_ns(nclass, LASSO_SAML2_PROTOCOL_HREF, LASSO_SAML2_PROTOCOL_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); nclass->node_data->id_attribute_name = "ID"; nclass->node_data->id_attribute_offset = G_STRUCT_OFFSET(LassoSamlp2StatusResponse, ID); nclass->node_data->sign_type_offset = G_STRUCT_OFFSET( LassoSamlp2StatusResponse, sign_type); nclass->node_data->sign_method_offset = G_STRUCT_OFFSET( LassoSamlp2StatusResponse, sign_method); nclass->node_data->private_key_file_offset = G_STRUCT_OFFSET(LassoSamlp2StatusResponse, private_key_file); nclass->node_data->certificate_file_offset = G_STRUCT_OFFSET(LassoSamlp2StatusResponse, certificate_file); nclass->node_data->keep_xmlnode = TRUE; } GType lasso_samlp2_status_response_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSamlp2StatusResponseClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSamlp2StatusResponse), 0, (GInstanceInitFunc) instance_init, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoSamlp2StatusResponse", &this_info, 0); } return this_type; } /** * lasso_samlp2_status_response_new: * * Creates a new #LassoSamlp2StatusResponse object. * * Return value: a newly created #LassoSamlp2StatusResponse object **/ LassoNode* lasso_samlp2_status_response_new() { return g_object_new(LASSO_TYPE_SAMLP2_STATUS_RESPONSE, NULL); } lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/saml2_action.c0000644000000000000000000000013214114336625017620 xustar0030 mtime=1630649749.862437387 30 atime=1678814151.188994851 30 ctime=1678814320.589950918 lasso-2.8.2/lasso/xml/saml-2.0/saml2_action.c0000644000175000017500000000714214114336625023074 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "saml2_action.h" /** * SECTION:saml2_action * @short_description: <saml2:Action> * *
Schema fragment for saml2:Action * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "content", SNIPPET_TEXT_CHILD, G_STRUCT_OFFSET(LassoSaml2Action, content), NULL, NULL, NULL}, { "Namespace", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSaml2Action, Namespace), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSaml2ActionClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "Action"); lasso_node_class_set_ns(nclass, LASSO_SAML2_ASSERTION_HREF, LASSO_SAML2_ASSERTION_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_saml2_action_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSaml2ActionClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSaml2Action), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoSaml2Action", &this_info, 0); } return this_type; } /** * lasso_saml2_action_new: * * Creates a new #LassoSaml2Action object. * * Return value: a newly created #LassoSaml2Action object **/ LassoNode* lasso_saml2_action_new() { return g_object_new(LASSO_TYPE_SAML2_ACTION, NULL); } /** * lasso_saml2_action_new_with_string: * @content: content of the new element * * Creates a new #LassoSaml2Action object and initializes it * with @content. * * Return value: a newly created #LassoSaml2Action object **/ LassoNode* lasso_saml2_action_new_with_string(char *content) { LassoSaml2Action *object; object = g_object_new(LASSO_TYPE_SAML2_ACTION, NULL); object->content = g_strdup(content); return LASSO_NODE(object); } lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/xml_saml2.h0000644000000000000000000000013214114336625017150 xustar0030 mtime=1630649749.870437474 30 atime=1678814151.024993934 30 ctime=1678814320.669951374 lasso-2.8.2/lasso/xml/saml-2.0/xml_saml2.h0000644000175000017500000000540114114336625022420 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_XML_SAML2_H__ #define __LASSO_XML_SAML2_H__ #include "saml2_action.h" #include "saml2_advice.h" #include "saml2_assertion.h" #include "saml2_attribute.h" #include "saml2_attribute_statement.h" #include "saml2_attribute_value.h" #include "saml2_audience_restriction.h" #include "saml2_authn_context.h" #include "saml2_authn_statement.h" #include "saml2_authz_decision_statement.h" #include "saml2_base_idabstract.h" #include "saml2_condition_abstract.h" #include "saml2_conditions.h" #include "saml2_encrypted_element.h" #include "saml2_evidence.h" #include "saml2_key_info_confirmation_data.h" #include "saml2_key_info_confirmation_data_type.h" #include "saml2_name_id.h" #include "saml2_one_time_use.h" #include "saml2_proxy_restriction.h" #include "saml2_statement_abstract.h" #include "saml2_subject_confirmation_data.h" #include "saml2_subject_confirmation.h" #include "saml2_subject.h" #include "saml2_subject_locality.h" #include "samlp2_artifact_resolve.h" #include "samlp2_artifact_response.h" #include "samlp2_assertion_id_request.h" #include "samlp2_attribute_query.h" #include "samlp2_authn_query.h" #include "samlp2_authn_request.h" #include "samlp2_authz_decision_query.h" #include "samlp2_extensions.h" #include "samlp2_idp_entry.h" #include "samlp2_idp_list.h" #include "samlp2_logout_request.h" #include "samlp2_logout_response.h" #include "samlp2_manage_name_id_request.h" #include "samlp2_manage_name_id_response.h" #include "samlp2_name_id_mapping_request.h" #include "samlp2_name_id_mapping_response.h" #include "samlp2_name_id_policy.h" #include "samlp2_request_abstract.h" #include "samlp2_requested_authn_context.h" #include "samlp2_response.h" #include "samlp2_scoping.h" #include "samlp2_status_code.h" #include "samlp2_status_detail.h" #include "samlp2_status.h" #include "samlp2_status_response.h" #include "samlp2_subject_query_abstract.h" #include "samlp2_terminate.h" #endif /* __LASSO_XML_SAML2_H__ */ lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/saml2_encrypted_element.h0000644000000000000000000000013114114336625022055 xustar0029 mtime=1630649749.86643743 30 atime=1678814151.016993891 30 ctime=1678814320.537950621 lasso-2.8.2/lasso/xml/saml-2.0/saml2_encrypted_element.h0000644000175000017500000000520214114336625025325 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAML2_ENCRYPTED_ELEMENT_H__ #define __LASSO_SAML2_ENCRYPTED_ELEMENT_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "../xml.h" #include #define LASSO_TYPE_SAML2_ENCRYPTED_ELEMENT (lasso_saml2_encrypted_element_get_type()) #define LASSO_SAML2_ENCRYPTED_ELEMENT(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML2_ENCRYPTED_ELEMENT, \ LassoSaml2EncryptedElement)) #define LASSO_SAML2_ENCRYPTED_ELEMENT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML2_ENCRYPTED_ELEMENT, \ LassoSaml2EncryptedElementClass)) #define LASSO_IS_SAML2_ENCRYPTED_ELEMENT(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML2_ENCRYPTED_ELEMENT)) #define LASSO_IS_SAML2_ENCRYPTED_ELEMENT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML2_ENCRYPTED_ELEMENT)) #define LASSO_SAML2_ENCRYPTED_ELEMENT_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML2_ENCRYPTED_ELEMENT, \ LassoSaml2EncryptedElementClass)) typedef struct _LassoSaml2EncryptedElement LassoSaml2EncryptedElement; typedef struct _LassoSaml2EncryptedElementClass LassoSaml2EncryptedElementClass; struct _LassoSaml2EncryptedElement { LassoNode parent; /*< public >*/ /* elements */ xmlNode *EncryptedData; GList *EncryptedKey; /* of xmlNode* */ LassoNode *original_data; }; struct _LassoSaml2EncryptedElementClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_saml2_encrypted_element_get_type(void); LASSO_EXPORT LassoNode* lasso_saml2_encrypted_element_new(void); LASSO_EXPORT lasso_error_t lasso_saml2_encrypted_element_decrypt(LassoSaml2EncryptedElement* encrypted_element, xmlSecKey *encryption_private_key, LassoNode** decrypted_node); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAML2_ENCRYPTED_ELEMENT_H__ */ lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/samlp2_request_abstract.c0000644000000000000000000000013214364261206022075 xustar0030 mtime=1674666630.762769217 30 atime=1678814173.113117543 30 ctime=1678814320.653951282 lasso-2.8.2/lasso/xml/saml-2.0/samlp2_request_abstract.c0000644000175000017500000001457614364261206025362 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "../../utils.h" #include #include #include "samlp2_request_abstract.h" /** * SECTION:samlp2_request_abstract * @short_description: <samlp2:RequestAbstract> * *
Schema fragment for samlp2:RequestAbstract * * * * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "Issuer", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSamlp2RequestAbstract, Issuer), "LassoSaml2NameID", LASSO_SAML2_ASSERTION_PREFIX, LASSO_SAML2_ASSERTION_HREF}, { "Signature", SNIPPET_SIGNATURE, G_STRUCT_OFFSET(LassoSamlp2RequestAbstract, ID), NULL, LASSO_DS_PREFIX, LASSO_DS_HREF}, { "Extensions", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSamlp2RequestAbstract, Extensions), NULL, NULL, NULL}, { "ID", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSamlp2RequestAbstract, ID), NULL, NULL, NULL}, { "Version", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSamlp2RequestAbstract, Version), NULL, NULL, NULL}, { "IssueInstant", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSamlp2RequestAbstract, IssueInstant), NULL, NULL, NULL}, { "Destination", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSamlp2RequestAbstract, Destination), NULL, NULL, NULL}, { "Consent", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSamlp2RequestAbstract, Consent), NULL, NULL, NULL}, /* hidden fields; used in lasso dumps */ { "SignType", SNIPPET_ATTRIBUTE | SNIPPET_INTEGER | SNIPPET_LASSO_DUMP, G_STRUCT_OFFSET(LassoSamlp2RequestAbstract, sign_type), NULL, NULL, NULL}, { "SignMethod", SNIPPET_ATTRIBUTE | SNIPPET_INTEGER | SNIPPET_LASSO_DUMP, G_STRUCT_OFFSET(LassoSamlp2RequestAbstract, sign_method), NULL, NULL, NULL}, { "PrivateKeyFile", SNIPPET_CONTENT | SNIPPET_LASSO_DUMP, G_STRUCT_OFFSET(LassoSamlp2RequestAbstract, private_key_file), NULL, NULL, NULL}, { "CertificateFile", SNIPPET_CONTENT | SNIPPET_LASSO_DUMP, G_STRUCT_OFFSET(LassoSamlp2RequestAbstract, certificate_file), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; static gboolean init_from_query(LassoNode *node, char **query_fields) { return lasso_node_init_from_saml2_query_fields(node, query_fields, NULL); } static gchar* build_query(LassoNode *node) { char *ret, *deflated_message; deflated_message = lasso_node_build_deflated_query(node); if (deflated_message == NULL) { return NULL; } ret = g_strdup_printf(LASSO_SAML2_FIELD_REQUEST "=%s", deflated_message); lasso_release(deflated_message); return ret; } /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void instance_init(LassoSamlp2RequestAbstract *node, G_GNUC_UNUSED void *unused) { node->sign_type = LASSO_SIGNATURE_TYPE_NONE; } static void class_init(LassoSamlp2RequestAbstractClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->build_query = build_query; nclass->init_from_query = init_from_query; nclass->node_data = g_new0(LassoNodeClassData, 1); nclass->node_data->keep_xmlnode = TRUE; lasso_node_class_set_nodename(nclass, "RequestAbstract"); lasso_node_class_set_ns(nclass, LASSO_SAML2_PROTOCOL_HREF, LASSO_SAML2_PROTOCOL_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); nclass->node_data->id_attribute_name = "ID"; nclass->node_data->id_attribute_offset = G_STRUCT_OFFSET(LassoSamlp2RequestAbstract, ID); nclass->node_data->sign_type_offset = G_STRUCT_OFFSET( LassoSamlp2RequestAbstract, sign_type); nclass->node_data->sign_method_offset = G_STRUCT_OFFSET( LassoSamlp2RequestAbstract, sign_method); nclass->node_data->private_key_file_offset = G_STRUCT_OFFSET(LassoSamlp2RequestAbstract, private_key_file); nclass->node_data->certificate_file_offset = G_STRUCT_OFFSET(LassoSamlp2RequestAbstract, certificate_file); } GType lasso_samlp2_request_abstract_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSamlp2RequestAbstractClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSamlp2RequestAbstract), 0, (GInstanceInitFunc) instance_init, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoSamlp2RequestAbstract", &this_info, 0); } return this_type; } /** * lasso_samlp2_request_abstract_new: * * Creates a new #LassoSamlp2RequestAbstract object. * * Return value: a newly created #LassoSamlp2RequestAbstract object **/ LassoNode* lasso_samlp2_request_abstract_new() { return g_object_new(LASSO_TYPE_SAMLP2_REQUEST_ABSTRACT, NULL); } lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/saml2_action.h0000644000000000000000000000013214114336625017625 xustar0030 mtime=1630649749.862437387 30 atime=1678814151.016993891 30 ctime=1678814320.517950508 lasso-2.8.2/lasso/xml/saml-2.0/saml2_action.h0000644000175000017500000000430714114336625023101 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAML2_ACTION_H__ #define __LASSO_SAML2_ACTION_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "../xml.h" #define LASSO_TYPE_SAML2_ACTION (lasso_saml2_action_get_type()) #define LASSO_SAML2_ACTION(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML2_ACTION, \ LassoSaml2Action)) #define LASSO_SAML2_ACTION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML2_ACTION, \ LassoSaml2ActionClass)) #define LASSO_IS_SAML2_ACTION(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML2_ACTION)) #define LASSO_IS_SAML2_ACTION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML2_ACTION)) #define LASSO_SAML2_ACTION_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML2_ACTION, \ LassoSaml2ActionClass)) typedef struct _LassoSaml2Action LassoSaml2Action; typedef struct _LassoSaml2ActionClass LassoSaml2ActionClass; struct _LassoSaml2Action { LassoNode parent; /*< public >*/ /* elements */ char *content; /* attributes */ char *Namespace; }; struct _LassoSaml2ActionClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_saml2_action_get_type(void); LASSO_EXPORT LassoNode* lasso_saml2_action_new(void); LASSO_EXPORT LassoNode* lasso_saml2_action_new_with_string(char *content); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAML2_ACTION_H__ */ lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/saml2_key_info_confirmation_data_type.h0000644000000000000000000000013214115351423024747 xustar0030 mtime=1630917395.111573704 30 atime=1678814151.016993891 30 ctime=1678814320.541950645 lasso-2.8.2/lasso/xml/saml-2.0/saml2_key_info_confirmation_data_type.h0000644000175000017500000000632514115351423030225 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAML2_KEY_INFO_CONFIRMATION_DATA_TYPE_H__ #define __LASSO_SAML2_KEY_INFO_CONFIRMATION_DATA_TYPE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "../xml.h" #include "../dsig/ds_key_info.h" #include "saml2_subject_confirmation_data.h" #define LASSO_TYPE_SAML2_KEY_INFO_CONFIRMATION_DATA_TYPE \ (lasso_saml2_key_info_confirmation_data_type_get_type()) #define LASSO_SAML2_KEY_INFO_CONFIRMATION_DATA_TYPE(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML2_KEY_INFO_CONFIRMATION_DATA_TYPE, \ LassoSaml2KeyInfoConfirmationDataType)) #define LASSO_SAML2_KEY_INFO_CONFIRMATION_DATA_TYPE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML2_KEY_INFO_CONFIRMATION_DATA_TYPE, \ LassoSaml2KeyInfoConfirmationDataTypeClass)) #define LASSO_IS_SAML2_KEY_INFO_CONFIRMATION_DATA_TYPE(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML2_KEY_INFO_CONFIRMATION_DATA_TYPE)) #define LASSO_IS_SAML2_KEY_INFO_CONFIRMATION_DATA_TYPE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML2_KEY_INFO_CONFIRMATION_DATA_TYPE)) #define LASSO_SAML2_KEY_INFO_CONFIRMATION_DATA_TYPE_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML2_KEY_INFO_CONFIRMATION_DATA_TYPE, \ LassoSaml2KeyInfoConfirmationDataTypeClass)) typedef struct _LassoSaml2KeyInfoConfirmationDataType LassoSaml2KeyInfoConfirmationDataType; typedef struct _LassoSaml2KeyInfoConfirmationDataTypeClass LassoSaml2KeyInfoConfirmationDataTypeClass; typedef struct _LassoSaml2KeyInfoConfirmationDataTypePrivate LassoSaml2KeyInfoConfirmationDataTypePrivate; struct _LassoSaml2KeyInfoConfirmationDataType { LassoSaml2SubjectConfirmationData parent; /*< private >*/ LassoSaml2KeyInfoConfirmationDataTypePrivate *private_data; }; struct _LassoSaml2KeyInfoConfirmationDataTypeClass { LassoSaml2SubjectConfirmationDataClass parent; }; LASSO_EXPORT GType lasso_saml2_key_info_confirmation_data_type_get_type(void); LASSO_EXPORT LassoNode* lasso_saml2_key_info_confirmation_data_type_new(void); LASSO_EXPORT GList *lasso_saml2_key_info_confirmation_data_type_get_key_info( LassoSaml2KeyInfoConfirmationDataType *kicdt); LASSO_EXPORT void lasso_saml2_key_info_confirmation_data_type_set_key_info( LassoSaml2KeyInfoConfirmationDataType *kicdt, GList *key_infos); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAML2_KEY_INFO_CONFIRMATION_DATA_TYPE_H__ */ lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/saml2_strings.h0000644000000000000000000000013214117162531020035 xustar0030 mtime=1631380825.852638017 30 atime=1678814151.016993891 30 ctime=1678814320.585950896 lasso-2.8.2/lasso/xml/saml-2.0/saml2_strings.h0000644000175000017500000004025014117162531023306 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . * */ /** * SECTION:saml2_strings * @short_description: String constants from SAML 2.0 specifications * @long_desscription: A lots of elements contains URL or enum based content, * @include: lasso/xml/saml-2.0/saml2_strings.h * @stability: Stable * @see_also: #LassoSamlp2AuthnRequest, #LassoSaml2Assertion, #LassoLogin */ #ifndef __LASSO_SAML2_STRINGS_H__ #define __LASSO_SAML2_STRINGS_H__ /** * LASSO_SAML2_METADATA_HREF: * * Namespace for SAML 2.0 metadata * */ #define LASSO_SAML2_METADATA_HREF "urn:oasis:names:tc:SAML:2.0:metadata" /** * LASSO_SAML2_METADATA_PREFIX: * * Preferred prefix for namespace of SAML 2.0 metadata */ #define LASSO_SAML2_METADATA_PREFIX "md" /** * LASSO_SAML2_PROTOCOL_HREF: * * Namespace for SAML 2.0 protocol. * */ #define LASSO_SAML2_PROTOCOL_HREF "urn:oasis:names:tc:SAML:2.0:protocol" /** * LASSO_SAML2_PROTOCOL_PREFIX: * * Preferred prefix for namespace of SAML 2.0 protocol * */ #define LASSO_SAML2_PROTOCOL_PREFIX "samlp" /** * LASSO_SAML2_ASSERTION_HREF: * * Namespace for SAML 2.0 assertion * */ #define LASSO_SAML2_ASSERTION_HREF "urn:oasis:names:tc:SAML:2.0:assertion" /** * LASSO_SAML2_ASSERTION_PREFIX: * * Preferred prefix for namespace of SAML 2.0 assertion * */ #define LASSO_SAML2_ASSERTION_PREFIX "saml" /* Bindings URIs */ /** * LASSO_SAML2_METADATA_BINDING_SOAP: * * URI for the SOAP binding. */ #define LASSO_SAML2_METADATA_BINDING_SOAP "urn:oasis:names:tc:SAML:2.0:bindings:SOAP" /** * LASSO_SAML2_METADATA_BINDING_REDIRECT: * * URI for the HTTP-Redirect binding. */ #define LASSO_SAML2_METADATA_BINDING_REDIRECT "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" /** * LASSO_SAML2_METADATA_BINDING_POST: * * URI for the HTTP-Post binding. */ #define LASSO_SAML2_METADATA_BINDING_POST "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" /** * LASSO_SAML2_METADATA_BINDING_ARTIFACT: * * URI for the HTTP-Artifact binding. */ #define LASSO_SAML2_METADATA_BINDING_ARTIFACT "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact" /** * LASSO_SAML2_METADATA_BINDING_PAOS: * * URI for the PAOS (or reverse SOAP) binding. */ #define LASSO_SAML2_METADATA_BINDING_PAOS "urn:oasis:names:tc:SAML:2.0:bindings:PAOS" /** * LASSO_SAML2_METADATA_BINDING_URI: * * URI for the URI special binding. */ #define LASSO_SAML2_METADATA_BINDING_URI "urn:oasis:names:tc:SAML:2.0:bindings:URI" /** * LASSO_SAML2_DEFLATE_ENCODING: * * URI for URL-Encoding of kind DEFLATE (compress message content before encoding in the URI). */ #define LASSO_SAML2_DEFLATE_ENCODING "urn:oasis:names:tc:SAML:2.0:bindings:URL-Encoding:DEFLATE" /* Name Identifier Format */ /* note that SAML 2.0 can also use SAML 1.1 name identifier formats */ /** * LASSO_SAML2_NAME_IDENTIFIER_FORMAT_UNSPECIFIED: * * Name identifier format for local names, or free format name. * * From saml-core-2.0-os.pdf: *
The interpretation of the content of the element is left to individual implementations.
*/ #define LASSO_SAML2_NAME_IDENTIFIER_FORMAT_UNSPECIFIED \ "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified" /** * LASSO_SAML2_NAME_IDENTIFIER_FORMAT_EMAIL: * * Name identifier format for email addresses. * * From saml-core-2.0-os.pdf: *
Indicates that the content of the element is in the form of an email address, * specifically "addr-spec" as defined in IETF RFC 2822 [RFC 2822] Section 3.4.1. An addr-spec has * the form local-part@domain. Note that an addr-spec has no phrase (such as a common name) before * it, has no comment (text surrounded in parentheses) after it, and is not surrounded by "<" and * ">".
*/ #define LASSO_SAML2_NAME_IDENTIFIER_FORMAT_EMAIL \ "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress" #define LASSO_SAML2_NAME_IDENTIFIER_FORMAT_X509 \ "urn:oasis:names:tc:SAML:1.1:nameid-format:X509SubjectName" #define LASSO_SAML2_NAME_IDENTIFIER_FORMAT_WINDOWS \ "urn:oasis:names:tc:SAML:1.1:nameid-format:WindowsDomainQualifiedName" #define LASSO_SAML2_NAME_IDENTIFIER_FORMAT_KERBEROS \ "urn:oasis:names:tc:SAML:2.0:nameid-format:kerberos" /** * LASSO_SAML2_NAME_IDENTIFIER_FORMAT_ENTITY: * * Name identifier format for SAML 2.0 entities, i.e. identity and service providers. * * From saml-core-2.0-os.pdf: *
Indicates that the content of the element is the * identifier of an entity that provides SAML-based services (such as a SAML authority, requester, or responder) or is a participant in SAML profiles (such as a * service provider supporting the browser SSO profile). Such an identifier can be used in the * <Issuer> element to identify the issuer of a SAML request, response, or assertion, or within the * <NameID> element to make assertions about system entities that can issue SAML requests, * responses, and assertions. It can also be used in other elements and attributes whose purpose is * to identify a system entity in various protocol exchanges. The syntax of such an * identifier is a URI of not more than 1024 characters in length. It is RECOMMENDED that a system * entity use a URL containing its own domain name to identify itself. The * NameQualifier, SPNameQualifier, and SPProvidedID attributes MUST be omitted.
*/ #define LASSO_SAML2_NAME_IDENTIFIER_FORMAT_ENTITY \ "urn:oasis:names:tc:SAML:2.0:nameid-format:entity" /** * LASSO_SAML2_NAME_IDENTIFIER_FORMAT_PERSISTENT: * * Name identifier format for SAML 2.0 federation. * */ #define LASSO_SAML2_NAME_IDENTIFIER_FORMAT_PERSISTENT \ "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" /** * LASSO_SAML2_NAME_IDENTIFIER_FORMAT_TRANSIENT: * * Name identifier format for temporary SAML 2.0 federation. */ #define LASSO_SAML2_NAME_IDENTIFIER_FORMAT_TRANSIENT \ "urn:oasis:names:tc:SAML:2.0:nameid-format:transient" #define LASSO_SAML2_NAME_IDENTIFIER_FORMAT_ENCRYPTED \ "urn:oasis:names:tc:SAML:2.0:nameid-format:encrypted" /* Attribute Name Format */ /** * LASSO_SAML2_ATTRIBUTE_NAME_FORMAT_UNSPECIFIED: * * Attribute format whose interpretation is left to individual implementations. */ #define LASSO_SAML2_ATTRIBUTE_NAME_FORMAT_UNSPECIFIED "urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified" /** * LASSO_SAML2_ATTRIBUTE_NAME_FORMAT_URI: * * From saml-core-2.0-os.pdf: *
The attribute name follows the convention for URI references [RFC 2396], for example * as used in XACML attribute identifiers. The interpretation of the URI content or naming * scheme is application- specific. See [SAMLProf] for attribute profiles that make use of this identifier.
*/ #define LASSO_SAML2_ATTRIBUTE_NAME_FORMAT_URI "urn:oasis:names:tc:SAML:2.0:attrname-format:uri" /** * LASSO_SAML2_ATTRIBUTE_NAME_FORMAT_BASIC: * * Attribute format whose names are in the xs:Name domain. */ #define LASSO_SAML2_ATTRIBUTE_NAME_FORMAT_BASIC "urn:oasis:names:tc:SAML:2.0:attrname-format:basic" /* Actions */ /* Actions are used by the Authorization profile */ /** * LASSO_SAML2_ACTION_NAMESPACE_RWEDC: * * Namespace for actions among: Read, Write, Execute, Delete and Control. */ #define LASSO_SAML2_ACTION_NAMESPACE_RWEDC "urn:oasis:names:tc:SAML:1.0:action:rwedc" /** * LASSO_SAML2_ACTION_NAMESPACE_RWEDC_NEGATION: * * Namespace for actions among: Read, Write, Execute, Delete and Control and their negations, ~Read, * ~Write, ~Execute, ~Delete, ~Control. */ #define LASSO_SAML2_ACTION_NAMESPACE_RWEDC_NEGATION "urn:oasis:names:tc:SAML:1.0:action:rwedc-negation" /** * LASSO_SAML2_ACTION_NAMESPACE_GHPP: * * Namespace for actions among: GET, HEAD, PUT, POST. */ #define LASSO_SAML2_ACTION_NAMESPACE_GHPP "urn:oasis:names:tc:SAML:1.0:action:ghpp" /** * LASSO_SAML2_ACTION_NAMESPACE_UNIX: * * Namespace for actions represented by a four digit numeric code in octal value, as Unix file * permissions codes. */ #define LASSO_SAML2_ACTION_NAMESPACE_UNIX "urn:oasis:names:tc:SAML:1.0:action:unix" /* Individual actions */ #define LASSO_SAML2_ACTION_RWEDC_READ "Read" #define LASSO_SAML2_ACTION_RWEDC_WRITE "Write" #define LASSO_SAML2_ACTION_RWEDC_EXECUTE "Execute" #define LASSO_SAML2_ACTION_RWEDC_DELETE "Delete" #define LASSO_SAML2_ACTION_RWEDC_CONTROL "Control" #define LASSO_SAML2_ACTION_RWEDC_NEGATION "~" #define LASSO_SAML2_ACTION_GHPP_GET "GET" #define LASSO_SAML2_ACTION_GHPP_HEAD "HEAD" #define LASSO_SAML2_ACTION_GHPP_PUT "PUT" #define LASSO_SAML2_ACTION_GHPP_POST "POST" /* Consent */ #define LASSO_SAML2_CONSENT_OBTAINED "urn:oasis:names:tc:SAML:2.0:consent:obtained" #define LASSO_SAML2_CONSENT_PRIOR "urn:oasis:names:tc:SAML:2.0:consent:prior" #define LASSO_SAML2_CONSENT_IMPLICIT "urn:oasis:names:tc:SAML:2.0:consent:current-implicit" #define LASSO_SAML2_CONSENT_EXPLICIT "urn:oasis:names:tc:SAML:2.0:consent:current-explicit" #define LASSO_SAML2_CONSENT_UNAVAILABLE "urn:oasis:names:tc:SAML:2.0:consent:unavailable" #define LASSO_SAML2_CONSENT_INAPPLICABLE "urn:oasis:names:tc:SAML:2.0:consent:inapplicable" /* Status Code */ #define LASSO_SAML2_STATUS_CODE_SUCCESS "urn:oasis:names:tc:SAML:2.0:status:Success" #define LASSO_SAML2_STATUS_CODE_REQUESTER "urn:oasis:names:tc:SAML:2.0:status:Requester" #define LASSO_SAML2_STATUS_CODE_RESPONDER "urn:oasis:names:tc:SAML:2.0:status:Responder" #define LASSO_SAML2_STATUS_CODE_VERSION_MISMATCH \ "urn:oasis:names:tc:SAML:2.0:status:VersionMismatch" #define LASSO_SAML2_STATUS_CODE_AUTHN_FAILED "urn:oasis:names:tc:SAML:2.0:status:AuthnFailed" #define LASSO_SAML2_STATUS_CODE_INVALID_ATTR_NAME \ "urn:oasis:names:tc:SAML:2.0:status:InvalidAttrNameOrValue" #define LASSO_SAML2_STATUS_CODE_INVALID_NAME_ID_POLICY \ "urn:oasis:names:tc:SAML:2.0:status:InvalidNameIDPolicy" #define LASSO_SAML2_STATUS_CODE_NO_AUTHN_CONTEXT \ "urn:oasis:names:tc:SAML:2.0:status:NoAuthnContext" #define LASSO_SAML2_STATUS_CODE_NO_AVAILABLE_IDP \ "urn:oasis:names:tc:SAML:2.0:status:NoAvailableIDP" #define LASSO_SAML2_STATUS_CODE_NO_PASSIVE \ "urn:oasis:names:tc:SAML:2.0:status:NoPassive" #define LASSO_SAML2_STATUS_CODE_NO_SUPPORTED_IDP \ "urn:oasis:names:tc:SAML:2.0:status:NoSupportedIDP" #define LASSO_SAML2_STATUS_CODE_PARTIAL_LOGOUT \ "urn:oasis:names:tc:SAML:2.0:status:PartialLogout" #define LASSO_SAML2_STATUS_CODE_PROXY_COUNT_EXCEEDED \ "urn:oasis:names:tc:SAML:2.0:status:ProxyCountExceeded" #define LASSO_SAML2_STATUS_CODE_REQUEST_DENIED \ "urn:oasis:names:tc:SAML:2.0:status:RequestDenied" #define LASSO_SAML2_STATUS_CODE_REQUEST_UNSUPPORTED \ "urn:oasis:names:tc:SAML:2.0:status:RequestUnsupported" #define LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_DEPRECATED \ "urn:oasis:names:tc:SAML:2.0:status:RequestVersionDeprecated" #define LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_TOO_HIGH \ "urn:oasis:names:tc:SAML:2.0:status:RequestVersionTooHigh" #define LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_TOO_LOW \ "urn:oasis:names:tc:SAML:2.0:status:RequestVersionTooLow" #define LASSO_SAML2_STATUS_CODE_RESOURCE_NOT_RECOGNIZED \ "urn:oasis:names:tc:SAML:2.0:status:ResourceNotRecognized" #define LASSO_SAML2_STATUS_CODE_TOO_MANY_RESPONSES \ "urn:oasis:names:tc:SAML:2.0:status:TooManyResponses" #define LASSO_SAML2_STATUS_CODE_UNKNOWN_ATTR_PROFILE \ "urn:oasis:names:tc:SAML:2.0:status:UnknownAttrProfile" #define LASSO_SAML2_STATUS_CODE_UNKNOWN_PRINCIPAL \ "urn:oasis:names:tc:SAML:2.0:status:UnknownPrincipal" #define LASSO_SAML2_STATUS_CODE_UNSUPPORTED_BINDING \ "urn:oasis:names:tc:SAML:2.0:status:UnsupportedBinding" /* AuthnClassRef */ #define LASSO_SAML2_AUTHN_CONTEXT_AUTHENTICATED_TELEPHONY \ "urn:oasis:names:tc:SAML:2.0:ac:classes:AuthenticatedTelephony" #define LASSO_SAML2_AUTHN_CONTEXT_INTERNET_PROTOCOL \ "urn:oasis:names:tc:SAML:2.0:ac:classes:InternetProtocol" #define LASSO_SAML2_AUTHN_CONTEXT_INTERNET_PROTOCOL_PASSWORD \ "urn:oasis:names:tc:SAML:2.0:ac:classes:InternetProtocolPassword" #define LASSO_SAML2_AUTHN_CONTEXT_KERBEROS \ "urn:oasis:names:tc:SAML:2.0:ac:classes:Kerberos" #define LASSO_SAML2_AUTHN_CONTEXT_MOBILE_ONE_FACTOR_CONTRACT \ "urn:oasis:names:tc:SAML:2.0:ac:classes:MobileOneFactorContract" #define LASSO_SAML2_AUTHN_CONTEXT_MOBILE_ONE_FACTOR_UNREGISTERED \ "urn:oasis:names:tc:SAML:2.0:ac:classes:MobileOneFactorUnregistered" #define LASSO_SAML2_AUTHN_CONTEXT_MOBILE_TWO_FACTOR_CONTRACT \ "urn:oasis:names:tc:SAML:2.0:ac:classes:MobileTwoFactorContract" #define LASSO_SAML2_AUTHN_CONTEXT_MOBILE_TWO_FACTOR_UNREGISTERED \ "urn:oasis:names:tc:SAML:2.0:ac:classes:MobileTwoFactorUnregistered" #define LASSO_SAML2_AUTHN_CONTEXT_NOMAD_TELEPHONY \ "urn:oasis:names:tc:SAML:2.0:ac:classes:NomadTelephony" #define LASSO_SAML2_AUTHN_CONTEXT_PERSONALIZED_TELEPHONY \ "urn:oasis:names:tc:SAML:2.0:ac:classes:PersonalizedTelephony" #define LASSO_SAML2_AUTHN_CONTEXT_PGP \ "urn:oasis:names:tc:SAML:2.0:ac:classes:PGP" #define LASSO_SAML2_AUTHN_CONTEXT_PASSWORD_PROTECTED_TRANSPORT \ "urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport" #define LASSO_SAML2_AUTHN_CONTEXT_PASSWORD \ "urn:oasis:names:tc:SAML:2.0:ac:classes:Password" #define LASSO_SAML2_AUTHN_CONTEXT_PREVIOUS_SESSION \ "urn:oasis:names:tc:SAML:2.0:ac:classes:PreviousSession" #define LASSO_SAML2_AUTHN_CONTEXT_SMARTCARD \ "urn:oasis:names:tc:SAML:2.0:ac:classes:Smartcard" #define LASSO_SAML2_AUTHN_CONTEXT_SMARTCARD_PKI \ "urn:oasis:names:tc:SAML:2.0:ac:classes:SmartcardPKI" #define LASSO_SAML2_AUTHN_CONTEXT_SOFTWARE_PKI \ "urn:oasis:names:tc:SAML:2.0:ac:classes:SoftwarePKI" #define LASSO_SAML2_AUTHN_CONTEXT_SPKI \ "urn:oasis:names:tc:SAML:2.0:ac:classes:SPKI" #define LASSO_SAML2_AUTHN_CONTEXT_SECURE_REMOTE_PASSWORD \ "urn:oasis:names:tc:SAML:2.0:ac:classes:SecureRemotePassword" #define LASSO_SAML2_AUTHN_CONTEXT_TLS_CLIENT \ "urn:oasis:names:tc:SAML:2.0:ac:classes:TLSClient" #define LASSO_SAML2_AUTHN_CONTEXT_X509 \ "urn:oasis:names:tc:SAML:2.0:ac:classes:X509" #define LASSO_SAML2_AUTHN_CONTEXT_TELEPHONY \ "urn:oasis:names:tc:SAML:2.0:ac:classes:Telephony" #define LASSO_SAML2_AUTHN_CONTEXT_TIME_SYNC_TOKEN \ "urn:oasis:names:tc:SAML:2.0:ac:classes:TimeSyncToken" #define LASSO_SAML2_AUTHN_CONTEXT_XMLDSIG \ "urn:oasis:names:tc:SAML:2.0:ac:classes:XMLDSig" #define LASSO_SAML2_AUTHN_CONTEXT_UNSPECIFIED \ "urn:oasis:names:tc:SAML:2.0:ac:classes:unspecified" /* Confirmation methods */ #define LASSO_SAML2_CONFIRMATION_METHOD_BEARER "urn:oasis:names:tc:SAML:2.0:cm:bearer" #define LASSO_SAML2_CONFIRMATION_METHOD_HOLDER_OF_KEY "urn:oasis:names:tc:SAML:2.0:cm:holder-of-key" /* POST and GET request fields */ #define LASSO_SAML2_FIELD_ENCODING "SAMLEncoding" #define LASSO_SAML2_FIELD_RESPONSE "SAMLResponse" #define LASSO_SAML2_FIELD_REQUEST "SAMLRequest" #define LASSO_SAML2_FIELD_ARTIFACT "SAMLart" #define LASSO_SAML2_FIELD_RELAYSTATE "RelayState" #define LASSO_SAML2_FIELD_SIGNATURE "Signature" #define LASSO_SAML2_FIELD_SIGALG "SigAlg" /* SAML 2.0 Attribute Profiles */ #define LASSO_SAML2_ATTRIBUTE_PROFILE_BASIC "urn:oasis:names:tc:SAML:2.0:profiles:attribute:basic" #define LASSO_SAML2_ATTRIBUTE_PROFILE_X500 "urn:oasis:names:tc:SAML:2.0:profiles:attribute:X500" #define LASSO_SAML2_ATTRIBUTE_PROFILE_UUID "urn:oasis:names:tc:SAML:2.0:profiles:attribute:UUID" #define LASSO_SAML2_ATTRIBUTE_PROFILE_DCE "urn:oasis:names:tc:SAML:2.0:profiles:attribute:DCE" /* SAML 2.0 SSO Profile */ #define LASSO_SAML2_ECP_PROFILE_WANT_AUTHN_SIGNED "urn:oasis:names:tc:SAML:2.0:profiles:SSO:ecp:2.0:WantAuthnRequestsSigned" /* SAML 2.0 Conditions */ #define LASSO_SAML2_CONDITIONS_DELEGATION "urn:oasis:names:tc:SAML:2.0:conditions:delegation" #endif /* __LASSO_SAML2_STRINGS_H__ */ lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/samlp2_authn_request.c0000644000000000000000000000013214364261206021411 xustar0030 mtime=1674666630.762769217 30 atime=1678814165.921077257 30 ctime=1678814320.633951169 lasso-2.8.2/lasso/xml/saml-2.0/samlp2_authn_request.c0000644000175000017500000001345314364261206024667 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "samlp2_authn_request.h" /** * SECTION:samlp2_authn_request * @short_description: <samlp2:AuthnRequest> * *
Schema fragment for samlp2:AuthnRequest * * * * * * * * * * * * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "Subject", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSamlp2AuthnRequest, Subject), NULL, LASSO_SAML2_ASSERTION_PREFIX, LASSO_SAML2_ASSERTION_HREF}, { "NameIDPolicy", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSamlp2AuthnRequest, NameIDPolicy), NULL, NULL, NULL}, { "Conditions", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSamlp2AuthnRequest, Conditions), NULL, LASSO_SAML2_ASSERTION_PREFIX, LASSO_SAML2_ASSERTION_HREF}, { "RequestedAuthnContext", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSamlp2AuthnRequest, RequestedAuthnContext), NULL, NULL, NULL}, { "Scoping", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSamlp2AuthnRequest, Scoping), NULL, NULL, NULL}, { "ForceAuthn", SNIPPET_ATTRIBUTE | SNIPPET_BOOLEAN, G_STRUCT_OFFSET(LassoSamlp2AuthnRequest, ForceAuthn), NULL, NULL, NULL}, { "IsPassive", SNIPPET_ATTRIBUTE | SNIPPET_BOOLEAN, G_STRUCT_OFFSET(LassoSamlp2AuthnRequest, IsPassive), NULL, NULL, NULL}, { "ProtocolBinding", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSamlp2AuthnRequest, ProtocolBinding), NULL, NULL, NULL}, { "AssertionConsumerServiceIndex", SNIPPET_ATTRIBUTE | SNIPPET_INTEGER | SNIPPET_OPTIONAL_NEG, G_STRUCT_OFFSET(LassoSamlp2AuthnRequest, AssertionConsumerServiceIndex), NULL, NULL, NULL}, { "AssertionConsumerServiceURL", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSamlp2AuthnRequest, AssertionConsumerServiceURL), NULL, NULL, NULL}, { "AttributeConsumingServiceIndex", SNIPPET_ATTRIBUTE | SNIPPET_INTEGER | SNIPPET_OPTIONAL_NEG, G_STRUCT_OFFSET(LassoSamlp2AuthnRequest, AttributeConsumingServiceIndex), NULL, NULL, NULL}, { "ProviderName", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSamlp2AuthnRequest, ProviderName), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void instance_init(LassoSamlp2AuthnRequest *node, G_GNUC_UNUSED void *unused) { node->AssertionConsumerServiceIndex = -1; node->AttributeConsumingServiceIndex = -1; } static void class_init(LassoSamlp2AuthnRequestClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); nclass->node_data->keep_xmlnode = TRUE; lasso_node_class_set_nodename(nclass, "AuthnRequest"); lasso_node_class_set_ns(nclass, LASSO_SAML2_PROTOCOL_HREF, LASSO_SAML2_PROTOCOL_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_samlp2_authn_request_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSamlp2AuthnRequestClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSamlp2AuthnRequest), 0, (GInstanceInitFunc) instance_init, NULL }; this_type = g_type_register_static(LASSO_TYPE_SAMLP2_REQUEST_ABSTRACT, "LassoSamlp2AuthnRequest", &this_info, 0); } return this_type; } /** * lasso_samlp2_authn_request_new: * * Creates a new #LassoSamlp2AuthnRequest object. * * Return value: a newly created #LassoSamlp2AuthnRequest object **/ LassoNode* lasso_samlp2_authn_request_new() { return g_object_new(LASSO_TYPE_SAMLP2_AUTHN_REQUEST, NULL); } lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/samlp2_scoping.h0000644000000000000000000000013114114336625020171 xustar0030 mtime=1630649749.870437474 30 atime=1678814151.020993912 29 ctime=1678814320.57795085 lasso-2.8.2/lasso/xml/saml-2.0/samlp2_scoping.h0000644000175000017500000000433414114336625023446 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAMLP2_SCOPING_H__ #define __LASSO_SAMLP2_SCOPING_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "samlp2_idp_list.h" #define LASSO_TYPE_SAMLP2_SCOPING (lasso_samlp2_scoping_get_type()) #define LASSO_SAMLP2_SCOPING(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAMLP2_SCOPING, \ LassoSamlp2Scoping)) #define LASSO_SAMLP2_SCOPING_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAMLP2_SCOPING, \ LassoSamlp2ScopingClass)) #define LASSO_IS_SAMLP2_SCOPING(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAMLP2_SCOPING)) #define LASSO_IS_SAMLP2_SCOPING_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAMLP2_SCOPING)) #define LASSO_SAMLP2_SCOPING_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAMLP2_SCOPING, \ LassoSamlp2ScopingClass)) typedef struct _LassoSamlp2Scoping LassoSamlp2Scoping; typedef struct _LassoSamlp2ScopingClass LassoSamlp2ScopingClass; struct _LassoSamlp2Scoping { LassoNode parent; /*< public >*/ /* elements */ LassoSamlp2IDPList *IDPList; char *RequesterID; /* attributes */ char *ProxyCount; }; struct _LassoSamlp2ScopingClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_samlp2_scoping_get_type(void); LASSO_EXPORT LassoNode* lasso_samlp2_scoping_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAMLP2_SCOPING_H__ */ lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/samlp2_scoping.c0000644000000000000000000000013214114336625020165 xustar0030 mtime=1630649749.870437474 30 atime=1678814174.781126891 30 ctime=1678814320.657951306 lasso-2.8.2/lasso/xml/saml-2.0/samlp2_scoping.c0000644000175000017500000000656414114336625023450 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "samlp2_scoping.h" /** * SECTION:samlp2_scoping * @short_description: <samlp2:Scoping> * *
Schema fragment for samlp2:Scoping * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "IDPList", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSamlp2Scoping, IDPList), NULL, NULL, NULL}, { "RequesterID", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoSamlp2Scoping, RequesterID), NULL, NULL, NULL}, { "ProxyCount", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoSamlp2Scoping, ProxyCount), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSamlp2ScopingClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "Scoping"); lasso_node_class_set_ns(nclass, LASSO_SAML2_PROTOCOL_HREF, LASSO_SAML2_PROTOCOL_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_samlp2_scoping_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSamlp2ScopingClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSamlp2Scoping), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoSamlp2Scoping", &this_info, 0); } return this_type; } /** * lasso_samlp2_scoping_new: * * Creates a new #LassoSamlp2Scoping object. * * Return value: a newly created #LassoSamlp2Scoping object **/ LassoNode* lasso_samlp2_scoping_new() { return g_object_new(LASSO_TYPE_SAMLP2_SCOPING, NULL); } lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/samlp2_authn_query.h0000644000000000000000000000013114114336625021073 xustar0029 mtime=1630649749.86643743 30 atime=1678814151.020993912 30 ctime=1678814320.557950736 lasso-2.8.2/lasso/xml/saml-2.0/samlp2_authn_query.h0000644000175000017500000000465314114336625024354 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAMLP2_AUTHN_QUERY_H__ #define __LASSO_SAMLP2_AUTHN_QUERY_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "samlp2_requested_authn_context.h" #include "samlp2_subject_query_abstract.h" #define LASSO_TYPE_SAMLP2_AUTHN_QUERY (lasso_samlp2_authn_query_get_type()) #define LASSO_SAMLP2_AUTHN_QUERY(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAMLP2_AUTHN_QUERY, \ LassoSamlp2AuthnQuery)) #define LASSO_SAMLP2_AUTHN_QUERY_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAMLP2_AUTHN_QUERY, \ LassoSamlp2AuthnQueryClass)) #define LASSO_IS_SAMLP2_AUTHN_QUERY(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAMLP2_AUTHN_QUERY)) #define LASSO_IS_SAMLP2_AUTHN_QUERY_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAMLP2_AUTHN_QUERY)) #define LASSO_SAMLP2_AUTHN_QUERY_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAMLP2_AUTHN_QUERY, \ LassoSamlp2AuthnQueryClass)) typedef struct _LassoSamlp2AuthnQuery LassoSamlp2AuthnQuery; typedef struct _LassoSamlp2AuthnQueryClass LassoSamlp2AuthnQueryClass; struct _LassoSamlp2AuthnQuery { LassoSamlp2SubjectQueryAbstract parent; /*< public >*/ /* elements */ LassoSamlp2RequestedAuthnContext *RequestedAuthnContext; /* attributes */ char *SessionIndex; }; struct _LassoSamlp2AuthnQueryClass { LassoSamlp2SubjectQueryAbstractClass parent; }; LASSO_EXPORT GType lasso_samlp2_authn_query_get_type(void); LASSO_EXPORT LassoNode* lasso_samlp2_authn_query_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAMLP2_AUTHN_QUERY_H__ */ lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/samlp2_request_abstract.h0000644000000000000000000000013214114336625022103 xustar0030 mtime=1630649749.870437474 30 atime=1678814151.020993912 30 ctime=1678814320.573950826 lasso-2.8.2/lasso/xml/saml-2.0/samlp2_request_abstract.h0000644000175000017500000000531114114336625025353 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAMLP2_REQUEST_ABSTRACT_H__ #define __LASSO_SAMLP2_REQUEST_ABSTRACT_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "saml2_name_id.h" #include "samlp2_extensions.h" #define LASSO_TYPE_SAMLP2_REQUEST_ABSTRACT (lasso_samlp2_request_abstract_get_type()) #define LASSO_SAMLP2_REQUEST_ABSTRACT(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAMLP2_REQUEST_ABSTRACT, \ LassoSamlp2RequestAbstract)) #define LASSO_SAMLP2_REQUEST_ABSTRACT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAMLP2_REQUEST_ABSTRACT, \ LassoSamlp2RequestAbstractClass)) #define LASSO_IS_SAMLP2_REQUEST_ABSTRACT(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAMLP2_REQUEST_ABSTRACT)) #define LASSO_IS_SAMLP2_REQUEST_ABSTRACT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAMLP2_REQUEST_ABSTRACT)) #define LASSO_SAMLP2_REQUEST_ABSTRACT_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAMLP2_REQUEST_ABSTRACT, \ LassoSamlp2RequestAbstractClass)) typedef struct _LassoSamlp2RequestAbstract LassoSamlp2RequestAbstract; typedef struct _LassoSamlp2RequestAbstractClass LassoSamlp2RequestAbstractClass; struct _LassoSamlp2RequestAbstract { LassoNode parent; /*< public >*/ /* elements */ LassoSaml2NameID *Issuer; LassoSamlp2Extensions *Extensions; /* attributes */ char *ID; char *Version; char *IssueInstant; char *Destination; char *Consent; /*< private >*/ /* ds:Signature stuffs */ LassoSignatureType sign_type; LassoSignatureMethod sign_method; char *private_key_file; char *certificate_file; }; struct _LassoSamlp2RequestAbstractClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_samlp2_request_abstract_get_type(void); LASSO_EXPORT LassoNode* lasso_samlp2_request_abstract_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAMLP2_REQUEST_ABSTRACT_H__ */ lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/saml2_conditions.h0000644000000000000000000000013114114336625020520 xustar0029 mtime=1630649749.86643743 30 atime=1678814151.016993891 30 ctime=1678814320.533950599 lasso-2.8.2/lasso/xml/saml-2.0/saml2_conditions.h0000644000175000017500000000472514114336625024001 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAML2_CONDITIONS_H__ #define __LASSO_SAML2_CONDITIONS_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "../xml.h" #define LASSO_TYPE_SAML2_CONDITIONS (lasso_saml2_conditions_get_type()) #define LASSO_SAML2_CONDITIONS(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML2_CONDITIONS, \ LassoSaml2Conditions)) #define LASSO_SAML2_CONDITIONS_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML2_CONDITIONS, \ LassoSaml2ConditionsClass)) #define LASSO_IS_SAML2_CONDITIONS(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML2_CONDITIONS)) #define LASSO_IS_SAML2_CONDITIONS_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML2_CONDITIONS)) #define LASSO_SAML2_CONDITIONS_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML2_CONDITIONS, \ LassoSaml2ConditionsClass)) typedef struct _LassoSaml2Conditions LassoSaml2Conditions; typedef struct _LassoSaml2ConditionsClass LassoSaml2ConditionsClass; struct _LassoSaml2Conditions { LassoNode parent; /*< public >*/ /* elements */ GList *Condition; /* of LassoSaml2ConditionAbstract */ GList *AudienceRestriction; /* of LassoSaml2AudienceRestriction */ GList *OneTimeUse; /* of LassoSaml2OneTimeUse */ GList *ProxyRestriction; /* of LassoSaml2ProxyRestriction */ /* attributes */ char *NotBefore; char *NotOnOrAfter; }; struct _LassoSaml2ConditionsClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_saml2_conditions_get_type(void); LASSO_EXPORT LassoNode* lasso_saml2_conditions_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAML2_CONDITIONS_H__ */ lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/samlp2_logout_response.c0000644000000000000000000000013214114336625021752 xustar0030 mtime=1630649749.870437474 30 atime=1678814169.925099681 30 ctime=1678814320.641951214 lasso-2.8.2/lasso/xml/saml-2.0/samlp2_logout_response.c0000644000175000017500000000577214114336625025235 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include #include "samlp2_logout_response.h" /** * SECTION:samlp2_logout_response * @short_description: <samlp2:LogoutResponse> * *
Schema fragment for samlp2:LogoutResponse * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSamlp2LogoutResponseClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "LogoutResponse"); lasso_node_class_set_ns(nclass, LASSO_SAML2_PROTOCOL_HREF, LASSO_SAML2_PROTOCOL_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_samlp2_logout_response_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSamlp2LogoutResponseClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSamlp2LogoutResponse), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_SAMLP2_STATUS_RESPONSE, "LassoSamlp2LogoutResponse", &this_info, 0); } return this_type; } /** * lasso_samlp2_logout_response_new: * * Creates a new #LassoSamlp2LogoutResponse object. * * Return value: a newly created #LassoSamlp2LogoutResponse object **/ LassoNode* lasso_samlp2_logout_response_new() { return g_object_new(LASSO_TYPE_SAMLP2_LOGOUT_RESPONSE, NULL); } lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/samlp2_terminate.c0000644000000000000000000000013114114336625020512 xustar0030 mtime=1630649749.870437474 29 atime=1678814177.53314232 30 ctime=1678814320.669951374 lasso-2.8.2/lasso/xml/saml-2.0/samlp2_terminate.c0000644000175000017500000000554114114336625023770 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "samlp2_terminate.h" /** * SECTION:samlp2_terminate * @short_description: <samlp2:Terminate> * *
Schema fragment for samlp2:Terminate * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSamlp2TerminateClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "Terminate"); lasso_node_class_set_ns(nclass, LASSO_SAML2_PROTOCOL_HREF, LASSO_SAML2_PROTOCOL_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_samlp2_terminate_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSamlp2TerminateClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSamlp2Terminate), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoSamlp2Terminate", &this_info, 0); } return this_type; } /** * lasso_samlp2_terminate_new: * * Creates a new #LassoSamlp2Terminate object. * * Return value: a newly created #LassoSamlp2Terminate object **/ LassoNode* lasso_samlp2_terminate_new() { return g_object_new(LASSO_TYPE_SAMLP2_TERMINATE, NULL); } lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/samlp2_assertion_id_request.h0000644000000000000000000000013114114336625022762 xustar0029 mtime=1630649749.86643743 30 atime=1678814151.020993912 30 ctime=1678814320.553950713 lasso-2.8.2/lasso/xml/saml-2.0/samlp2_assertion_id_request.h0000644000175000017500000000500614114336625026234 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAMLP2_ASSERTION_ID_REQUEST_H__ #define __LASSO_SAMLP2_ASSERTION_ID_REQUEST_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "samlp2_request_abstract.h" #define LASSO_TYPE_SAMLP2_ASSERTION_ID_REQUEST (lasso_samlp2_assertion_id_request_get_type()) #define LASSO_SAMLP2_ASSERTION_ID_REQUEST(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAMLP2_ASSERTION_ID_REQUEST, \ LassoSamlp2AssertionIDRequest)) #define LASSO_SAMLP2_ASSERTION_ID_REQUEST_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAMLP2_ASSERTION_ID_REQUEST, \ LassoSamlp2AssertionIDRequestClass)) #define LASSO_IS_SAMLP2_ASSERTION_ID_REQUEST(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAMLP2_ASSERTION_ID_REQUEST)) #define LASSO_IS_SAMLP2_ASSERTION_ID_REQUEST_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAMLP2_ASSERTION_ID_REQUEST)) #define LASSO_SAMLP2_ASSERTION_ID_REQUEST_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAMLP2_ASSERTION_ID_REQUEST, \ LassoSamlp2AssertionIDRequestClass)) typedef struct _LassoSamlp2AssertionIDRequest LassoSamlp2AssertionIDRequest; typedef struct _LassoSamlp2AssertionIDRequestClass LassoSamlp2AssertionIDRequestClass; struct _LassoSamlp2AssertionIDRequest { LassoSamlp2RequestAbstract parent; /*< public >*/ /* elements */ char *AssertionIDRef; }; struct _LassoSamlp2AssertionIDRequestClass { LassoSamlp2RequestAbstractClass parent; }; LASSO_EXPORT GType lasso_samlp2_assertion_id_request_get_type(void); LASSO_EXPORT LassoNode* lasso_samlp2_assertion_id_request_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAMLP2_ASSERTION_ID_REQUEST_H__ */ lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/saml2_authn_statement.h0000644000000000000000000000013214114336625021553 xustar0030 mtime=1630649749.862437387 30 atime=1678814151.016993891 30 ctime=1678814320.529950576 lasso-2.8.2/lasso/xml/saml-2.0/saml2_authn_statement.h0000644000175000017500000000512014114336625025021 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAML2_AUTHN_STATEMENT_H__ #define __LASSO_SAML2_AUTHN_STATEMENT_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "saml2_subject_locality.h" #include "saml2_authn_context.h" #include "saml2_statement_abstract.h" #define LASSO_TYPE_SAML2_AUTHN_STATEMENT (lasso_saml2_authn_statement_get_type()) #define LASSO_SAML2_AUTHN_STATEMENT(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML2_AUTHN_STATEMENT, \ LassoSaml2AuthnStatement)) #define LASSO_SAML2_AUTHN_STATEMENT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML2_AUTHN_STATEMENT, \ LassoSaml2AuthnStatementClass)) #define LASSO_IS_SAML2_AUTHN_STATEMENT(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML2_AUTHN_STATEMENT)) #define LASSO_IS_SAML2_AUTHN_STATEMENT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML2_AUTHN_STATEMENT)) #define LASSO_SAML2_AUTHN_STATEMENT_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML2_AUTHN_STATEMENT, \ LassoSaml2AuthnStatementClass)) typedef struct _LassoSaml2AuthnStatement LassoSaml2AuthnStatement; typedef struct _LassoSaml2AuthnStatementClass LassoSaml2AuthnStatementClass; struct _LassoSaml2AuthnStatement { LassoSaml2StatementAbstract parent; /*< public >*/ /* elements */ LassoSaml2SubjectLocality *SubjectLocality; LassoSaml2AuthnContext *AuthnContext; /* attributes */ char *AuthnInstant; char *SessionIndex; char *SessionNotOnOrAfter; }; struct _LassoSaml2AuthnStatementClass { LassoSaml2StatementAbstractClass parent; }; LASSO_EXPORT GType lasso_saml2_authn_statement_get_type(void); LASSO_EXPORT LassoNode* lasso_saml2_authn_statement_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAML2_AUTHN_STATEMENT_H__ */ lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/saml2_authz_decision_statement.h0000644000000000000000000000013214114336625023444 xustar0030 mtime=1630649749.862437387 30 atime=1678814151.016993891 30 ctime=1678814320.529950576 lasso-2.8.2/lasso/xml/saml-2.0/saml2_authz_decision_statement.h0000644000175000017500000000534414114336625026722 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAML2_AUTHZ_DECISION_STATEMENT_H__ #define __LASSO_SAML2_AUTHZ_DECISION_STATEMENT_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "saml2_action.h" #include "saml2_evidence.h" #include "saml2_statement_abstract.h" #define LASSO_TYPE_SAML2_AUTHZ_DECISION_STATEMENT (lasso_saml2_authz_decision_statement_get_type()) #define LASSO_SAML2_AUTHZ_DECISION_STATEMENT(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML2_AUTHZ_DECISION_STATEMENT, \ LassoSaml2AuthzDecisionStatement)) #define LASSO_SAML2_AUTHZ_DECISION_STATEMENT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML2_AUTHZ_DECISION_STATEMENT, \ LassoSaml2AuthzDecisionStatementClass)) #define LASSO_IS_SAML2_AUTHZ_DECISION_STATEMENT(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML2_AUTHZ_DECISION_STATEMENT)) #define LASSO_IS_SAML2_AUTHZ_DECISION_STATEMENT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML2_AUTHZ_DECISION_STATEMENT)) #define LASSO_SAML2_AUTHZ_DECISION_STATEMENT_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML2_AUTHZ_DECISION_STATEMENT, \ LassoSaml2AuthzDecisionStatementClass)) typedef struct _LassoSaml2AuthzDecisionStatement LassoSaml2AuthzDecisionStatement; typedef struct _LassoSaml2AuthzDecisionStatementClass LassoSaml2AuthzDecisionStatementClass; struct _LassoSaml2AuthzDecisionStatement { LassoSaml2StatementAbstract parent; /*< public >*/ /* elements */ LassoSaml2Action *Action; LassoSaml2Evidence *Evidence; /* attributes */ char *Resource; char *Decision; }; struct _LassoSaml2AuthzDecisionStatementClass { LassoSaml2StatementAbstractClass parent; }; LASSO_EXPORT GType lasso_saml2_authz_decision_statement_get_type(void); LASSO_EXPORT LassoNode* lasso_saml2_authz_decision_statement_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAML2_AUTHZ_DECISION_STATEMENT_H__ */ lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/samlp2_authn_request.h0000644000000000000000000000013114114336625021416 xustar0029 mtime=1630649749.86643743 30 atime=1678814151.020993912 30 ctime=1678814320.557950736 lasso-2.8.2/lasso/xml/saml-2.0/samlp2_authn_request.h0000644000175000017500000000600214114336625024665 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAMLP2_AUTHN_REQUEST_H__ #define __LASSO_SAMLP2_AUTHN_REQUEST_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "samlp2_request_abstract.h" #include "saml2_conditions.h" #include "samlp2_requested_authn_context.h" #include "saml2_subject.h" #include "samlp2_scoping.h" #include "samlp2_name_id_policy.h" #define LASSO_TYPE_SAMLP2_AUTHN_REQUEST (lasso_samlp2_authn_request_get_type()) #define LASSO_SAMLP2_AUTHN_REQUEST(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAMLP2_AUTHN_REQUEST, \ LassoSamlp2AuthnRequest)) #define LASSO_SAMLP2_AUTHN_REQUEST_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAMLP2_AUTHN_REQUEST, \ LassoSamlp2AuthnRequestClass)) #define LASSO_IS_SAMLP2_AUTHN_REQUEST(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAMLP2_AUTHN_REQUEST)) #define LASSO_IS_SAMLP2_AUTHN_REQUEST_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAMLP2_AUTHN_REQUEST)) #define LASSO_SAMLP2_AUTHN_REQUEST_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAMLP2_AUTHN_REQUEST, \ LassoSamlp2AuthnRequestClass)) typedef struct _LassoSamlp2AuthnRequest LassoSamlp2AuthnRequest; typedef struct _LassoSamlp2AuthnRequestClass LassoSamlp2AuthnRequestClass; struct _LassoSamlp2AuthnRequest { LassoSamlp2RequestAbstract parent; /*< public >*/ /* elements */ LassoSaml2Subject *Subject; LassoSamlp2NameIDPolicy *NameIDPolicy; LassoSaml2Conditions *Conditions; LassoSamlp2RequestedAuthnContext *RequestedAuthnContext; LassoSamlp2Scoping *Scoping; /* attributes */ gboolean ForceAuthn; gboolean IsPassive; char *ProtocolBinding; int AssertionConsumerServiceIndex; char *AssertionConsumerServiceURL; int AttributeConsumingServiceIndex; char *ProviderName; /* This field is deprecated do not use it, * kept for ABI compatibility */ /*< private >*/ G_GNUC_DEPRECATED char *relayState; }; struct _LassoSamlp2AuthnRequestClass { LassoSamlp2RequestAbstractClass parent; }; LASSO_EXPORT GType lasso_samlp2_authn_request_get_type(void); LASSO_EXPORT LassoNode* lasso_samlp2_authn_request_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAMLP2_AUTHN_REQUEST_H__ */ lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/samlp2_terminate.h0000644000000000000000000000013214114336625020520 xustar0030 mtime=1630649749.870437474 30 atime=1678814151.024993934 30 ctime=1678814320.585950896 lasso-2.8.2/lasso/xml/saml-2.0/samlp2_terminate.h0000644000175000017500000000424014114336625023770 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAMLP2_TERMINATE_H__ #define __LASSO_SAMLP2_TERMINATE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "../xml.h" #define LASSO_TYPE_SAMLP2_TERMINATE (lasso_samlp2_terminate_get_type()) #define LASSO_SAMLP2_TERMINATE(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAMLP2_TERMINATE, \ LassoSamlp2Terminate)) #define LASSO_SAMLP2_TERMINATE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAMLP2_TERMINATE, \ LassoSamlp2TerminateClass)) #define LASSO_IS_SAMLP2_TERMINATE(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAMLP2_TERMINATE)) #define LASSO_IS_SAMLP2_TERMINATE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAMLP2_TERMINATE)) #define LASSO_SAMLP2_TERMINATE_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAMLP2_TERMINATE, \ LassoSamlp2TerminateClass)) typedef struct _LassoSamlp2Terminate LassoSamlp2Terminate; typedef struct _LassoSamlp2TerminateClass LassoSamlp2TerminateClass; struct _LassoSamlp2Terminate { LassoNode parent; /*< public >*/ }; struct _LassoSamlp2TerminateClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_samlp2_terminate_get_type(void); LASSO_EXPORT LassoNode* lasso_samlp2_terminate_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAMLP2_TERMINATE_H__ */ lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/saml2_conditions.c0000644000000000000000000000013214114336625020514 xustar0030 mtime=1630649749.862437387 30 atime=1678814156.325023563 30 ctime=1678814320.609951031 lasso-2.8.2/lasso/xml/saml-2.0/saml2_conditions.c0000644000175000017500000001002214114336625023757 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "saml2_conditions.h" /** * SECTION:saml2_conditions * @short_description: <saml2:Conditions> * *
Schema fragment for saml2:Conditions * * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "Condition", SNIPPET_LIST_NODES, G_STRUCT_OFFSET(LassoSaml2Conditions, Condition), NULL, NULL, NULL}, { "AudienceRestriction", SNIPPET_LIST_NODES | SNIPPET_JUMP_ON_MATCH | SNIPPET_BACK_1, G_STRUCT_OFFSET(LassoSaml2Conditions, AudienceRestriction), NULL, NULL, NULL}, { "OneTimeUse", SNIPPET_LIST_NODES | SNIPPET_JUMP_ON_MATCH | SNIPPET_BACK_2, G_STRUCT_OFFSET(LassoSaml2Conditions, OneTimeUse), NULL, NULL, NULL}, { "ProxyRestriction", SNIPPET_LIST_NODES | SNIPPET_JUMP_ON_MATCH | SNIPPET_BACK_3, G_STRUCT_OFFSET(LassoSaml2Conditions, ProxyRestriction), NULL, NULL, NULL}, { "NotBefore", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSaml2Conditions, NotBefore), NULL, NULL, NULL}, { "NotOnOrAfter", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSaml2Conditions, NotOnOrAfter), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSaml2ConditionsClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "Conditions"); lasso_node_class_set_ns(nclass, LASSO_SAML2_ASSERTION_HREF, LASSO_SAML2_ASSERTION_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_saml2_conditions_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSaml2ConditionsClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSaml2Conditions), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoSaml2Conditions", &this_info, 0); } return this_type; } /** * lasso_saml2_conditions_new: * * Creates a new #LassoSaml2Conditions object. * * Return value: a newly created #LassoSaml2Conditions object **/ LassoNode* lasso_saml2_conditions_new() { return g_object_new(LASSO_TYPE_SAML2_CONDITIONS, NULL); } lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/samlp2_authn_query.c0000644000000000000000000000013114114336625021066 xustar0029 mtime=1630649749.86643743 30 atime=1678814165.301073786 30 ctime=1678814320.633951169 lasso-2.8.2/lasso/xml/saml-2.0/samlp2_authn_query.c0000644000175000017500000000670114114336625024343 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "samlp2_authn_query.h" /** * SECTION:samlp2_authn_query * @short_description: <samlp2:AuthnQuery> * *
Schema fragment for samlp2:AuthnQuery * * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "RequestedAuthnContext", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSamlp2AuthnQuery, RequestedAuthnContext), NULL, NULL, NULL}, { "SessionIndex", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSamlp2AuthnQuery, SessionIndex), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSamlp2AuthnQueryClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "AuthnQuery"); lasso_node_class_set_ns(nclass, LASSO_SAML2_PROTOCOL_HREF, LASSO_SAML2_PROTOCOL_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_samlp2_authn_query_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSamlp2AuthnQueryClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSamlp2AuthnQuery), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_SAMLP2_SUBJECT_QUERY_ABSTRACT, "LassoSamlp2AuthnQuery", &this_info, 0); } return this_type; } /** * lasso_samlp2_authn_query_new: * * Creates a new #LassoSamlp2AuthnQuery object. * * Return value: a newly created #LassoSamlp2AuthnQuery object **/ LassoNode* lasso_samlp2_authn_query_new() { return g_object_new(LASSO_TYPE_SAMLP2_AUTHN_QUERY, NULL); } lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/saml2_proxy_restriction.h0000644000000000000000000000013114114336625022155 xustar0029 mtime=1630649749.86643743 30 atime=1678814151.016993891 30 ctime=1678814320.545950667 lasso-2.8.2/lasso/xml/saml-2.0/saml2_proxy_restriction.h0000644000175000017500000000470414114336625025433 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAML2_PROXY_RESTRICTION_H__ #define __LASSO_SAML2_PROXY_RESTRICTION_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "saml2_condition_abstract.h" #define LASSO_TYPE_SAML2_PROXY_RESTRICTION (lasso_saml2_proxy_restriction_get_type()) #define LASSO_SAML2_PROXY_RESTRICTION(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML2_PROXY_RESTRICTION, \ LassoSaml2ProxyRestriction)) #define LASSO_SAML2_PROXY_RESTRICTION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML2_PROXY_RESTRICTION, \ LassoSaml2ProxyRestrictionClass)) #define LASSO_IS_SAML2_PROXY_RESTRICTION(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML2_PROXY_RESTRICTION)) #define LASSO_IS_SAML2_PROXY_RESTRICTION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML2_PROXY_RESTRICTION)) #define LASSO_SAML2_PROXY_RESTRICTION_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML2_PROXY_RESTRICTION, \ LassoSaml2ProxyRestrictionClass)) typedef struct _LassoSaml2ProxyRestriction LassoSaml2ProxyRestriction; typedef struct _LassoSaml2ProxyRestrictionClass LassoSaml2ProxyRestrictionClass; struct _LassoSaml2ProxyRestriction { LassoSaml2ConditionAbstract parent; /*< public >*/ /* elements */ char *Audience; /* attributes */ char *Count; }; struct _LassoSaml2ProxyRestrictionClass { LassoSaml2ConditionAbstractClass parent; }; LASSO_EXPORT GType lasso_saml2_proxy_restriction_get_type(void); LASSO_EXPORT LassoNode* lasso_saml2_proxy_restriction_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAML2_PROXY_RESTRICTION_H__ */ lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/samlp2_idp_entry.c0000644000000000000000000000013214114336625020520 xustar0030 mtime=1630649749.870437474 30 atime=1678814167.641086889 30 ctime=1678814320.637951191 lasso-2.8.2/lasso/xml/saml-2.0/samlp2_idp_entry.c0000644000175000017500000000650614114336625023777 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "samlp2_idp_entry.h" /** * SECTION:samlp2_idp_entry * @short_description: <samlp2:IDPEntry> * *
Schema fragment for samlp2:IDPEntry * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "ProviderID", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSamlp2IDPEntry, ProviderID), NULL, NULL, NULL}, { "Name", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSamlp2IDPEntry, Name), NULL, NULL, NULL}, { "Loc", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSamlp2IDPEntry, Loc), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSamlp2IDPEntryClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "IDPEntry"); lasso_node_class_set_ns(nclass, LASSO_SAML2_PROTOCOL_HREF, LASSO_SAML2_PROTOCOL_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_samlp2_idp_entry_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSamlp2IDPEntryClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSamlp2IDPEntry), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoSamlp2IDPEntry", &this_info, 0); } return this_type; } /** * lasso_samlp2_idp_entry_new: * * Creates a new #LassoSamlp2IDPEntry object. * * Return value: a newly created #LassoSamlp2IDPEntry object **/ LassoNode* lasso_samlp2_idp_entry_new() { return g_object_new(LASSO_TYPE_SAMLP2_IDP_ENTRY, NULL); } lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/samlp2_attribute_query.c0000644000000000000000000000013114114336625021752 xustar0029 mtime=1630649749.86643743 30 atime=1678814164.717070517 30 ctime=1678814320.629951145 lasso-2.8.2/lasso/xml/saml-2.0/samlp2_attribute_query.c0000644000175000017500000000656514114336625025237 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "samlp2_attribute_query.h" /** * SECTION:samlp2_attribute_query * @short_description: <samlp2:AttributeQuery> * *
Schema fragment for samlp2:AttributeQuery * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "Attribute", SNIPPET_LIST_NODES , G_STRUCT_OFFSET(LassoSamlp2AttributeQuery, Attribute), NULL, LASSO_SAML2_ASSERTION_PREFIX, LASSO_SAML2_ASSERTION_HREF}, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSamlp2AttributeQueryClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "AttributeQuery"); lasso_node_class_set_ns(nclass, LASSO_SAML2_PROTOCOL_HREF, LASSO_SAML2_PROTOCOL_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_samlp2_attribute_query_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSamlp2AttributeQueryClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSamlp2AttributeQuery), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_SAMLP2_SUBJECT_QUERY_ABSTRACT, "LassoSamlp2AttributeQuery", &this_info, 0); } return this_type; } /** * lasso_samlp2_attribute_query_new: * * Creates a new #LassoSamlp2AttributeQuery object. * * Return value: a newly created #LassoSamlp2AttributeQuery object **/ LassoNode* lasso_samlp2_attribute_query_new() { return g_object_new(LASSO_TYPE_SAMLP2_ATTRIBUTE_QUERY, NULL); } lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/saml2_statement_abstract.c0000644000000000000000000000013114114336625022231 xustar0029 mtime=1630649749.86643743 30 atime=1678814159.869043385 30 ctime=1678814320.621951101 lasso-2.8.2/lasso/xml/saml-2.0/saml2_statement_abstract.c0000644000175000017500000000712714114336625025511 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "saml2_statement_abstract.h" /** * SECTION:saml2_statement_abstract * @short_description: <saml2:StatementAbstract> * *
Schema fragment for saml2:StatementAbstract * * * * * * * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSaml2StatementAbstractClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "StatementAbstract"); lasso_node_class_set_ns(nclass, LASSO_SAML2_ASSERTION_HREF, LASSO_SAML2_ASSERTION_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_saml2_statement_abstract_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSaml2StatementAbstractClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSaml2StatementAbstract), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoSaml2StatementAbstract", &this_info, 0); } return this_type; } /** * lasso_saml2_statement_abstract_new: * * Creates a new #LassoSaml2StatementAbstract object. * * Return value: a newly created #LassoSaml2StatementAbstract object **/ LassoNode* lasso_saml2_statement_abstract_new() { return g_object_new(LASSO_TYPE_SAML2_STATEMENT_ABSTRACT, NULL); } lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/saml2_condition_abstract.c0000644000000000000000000000013214114336625022214 xustar0030 mtime=1630649749.862437387 30 atime=1678814155.905021213 30 ctime=1678814320.605951009 lasso-2.8.2/lasso/xml/saml-2.0/saml2_condition_abstract.c0000644000175000017500000000704114114336625025466 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "../../registry.h" #include "saml2_condition_abstract.h" /** * SECTION:saml2_condition_abstract * @short_description: <saml2:ConditionAbstract> * *
Schema fragment for saml2:ConditionAbstract * * * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSaml2ConditionAbstractClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); nclass->node_data->keep_xmlnode = TRUE; lasso_node_class_set_nodename(nclass, "Condition"); lasso_node_class_set_ns(nclass, LASSO_SAML2_ASSERTION_HREF, LASSO_SAML2_ASSERTION_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_saml2_condition_abstract_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSaml2ConditionAbstractClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSaml2ConditionAbstract), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoSaml2ConditionAbstract", &this_info, 0); lasso_registry_default_add_direct_mapping(LASSO_SAML2_ASSERTION_HREF, "Condition", LASSO_LASSO_HREF, "LassoSaml2ConditionAbstract"); } return this_type; } /** * lasso_saml2_condition_abstract_new: * * Creates a new #LassoSaml2ConditionAbstract object. * * Return value: a newly created #LassoSaml2ConditionAbstract object **/ LassoNode* lasso_saml2_condition_abstract_new() { return g_object_new(LASSO_TYPE_SAML2_CONDITION_ABSTRACT, NULL); } lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/samlp2_artifact_response.h0000644000000000000000000000013114114336625022242 xustar0029 mtime=1630649749.86643743 30 atime=1678814151.020993912 30 ctime=1678814320.553950713 lasso-2.8.2/lasso/xml/saml-2.0/samlp2_artifact_response.h0000644000175000017500000000467014114336625025522 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAMLP2_ARTIFACT_RESPONSE_H__ #define __LASSO_SAMLP2_ARTIFACT_RESPONSE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "samlp2_status_response.h" #define LASSO_TYPE_SAMLP2_ARTIFACT_RESPONSE (lasso_samlp2_artifact_response_get_type()) #define LASSO_SAMLP2_ARTIFACT_RESPONSE(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAMLP2_ARTIFACT_RESPONSE, \ LassoSamlp2ArtifactResponse)) #define LASSO_SAMLP2_ARTIFACT_RESPONSE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAMLP2_ARTIFACT_RESPONSE, \ LassoSamlp2ArtifactResponseClass)) #define LASSO_IS_SAMLP2_ARTIFACT_RESPONSE(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAMLP2_ARTIFACT_RESPONSE)) #define LASSO_IS_SAMLP2_ARTIFACT_RESPONSE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAMLP2_ARTIFACT_RESPONSE)) #define LASSO_SAMLP2_ARTIFACT_RESPONSE_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAMLP2_ARTIFACT_RESPONSE, \ LassoSamlp2ArtifactResponseClass)) typedef struct _LassoSamlp2ArtifactResponse LassoSamlp2ArtifactResponse; typedef struct _LassoSamlp2ArtifactResponseClass LassoSamlp2ArtifactResponseClass; struct _LassoSamlp2ArtifactResponse { LassoSamlp2StatusResponse parent; /*< public >*/ /* elements */ LassoNode *any; }; struct _LassoSamlp2ArtifactResponseClass { LassoSamlp2StatusResponseClass parent; }; LASSO_EXPORT GType lasso_samlp2_artifact_response_get_type(void); LASSO_EXPORT LassoNode* lasso_samlp2_artifact_response_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAMLP2_ARTIFACT_RESPONSE_H__ */ lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/saml2_authn_context.h0000644000000000000000000000013214114336625021233 xustar0030 mtime=1630649749.862437387 30 atime=1678814151.016993891 30 ctime=1678814320.525950554 lasso-2.8.2/lasso/xml/saml-2.0/saml2_authn_context.h0000644000175000017500000000456114114336625024511 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAML2_AUTHN_CONTEXT_H__ #define __LASSO_SAML2_AUTHN_CONTEXT_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "../xml.h" #define LASSO_TYPE_SAML2_AUTHN_CONTEXT (lasso_saml2_authn_context_get_type()) #define LASSO_SAML2_AUTHN_CONTEXT(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML2_AUTHN_CONTEXT, \ LassoSaml2AuthnContext)) #define LASSO_SAML2_AUTHN_CONTEXT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML2_AUTHN_CONTEXT, \ LassoSaml2AuthnContextClass)) #define LASSO_IS_SAML2_AUTHN_CONTEXT(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML2_AUTHN_CONTEXT)) #define LASSO_IS_SAML2_AUTHN_CONTEXT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML2_AUTHN_CONTEXT)) #define LASSO_SAML2_AUTHN_CONTEXT_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML2_AUTHN_CONTEXT, \ LassoSaml2AuthnContextClass)) typedef struct _LassoSaml2AuthnContext LassoSaml2AuthnContext; typedef struct _LassoSaml2AuthnContextClass LassoSaml2AuthnContextClass; struct _LassoSaml2AuthnContext { LassoNode parent; /*< public >*/ /* elements */ char *AuthnContextClassRef; /* XXX */ void *AuthnContextDecl; char *AuthnContextDeclRef; char *AuthenticatingAuthority; }; struct _LassoSaml2AuthnContextClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_saml2_authn_context_get_type(void); LASSO_EXPORT LassoNode* lasso_saml2_authn_context_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAML2_AUTHN_CONTEXT_H__ */ lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/samlp2_logout_request.c0000644000000000000000000000013214114336625021604 xustar0030 mtime=1630649749.870437474 30 atime=1678814169.033094685 30 ctime=1678814320.641951214 lasso-2.8.2/lasso/xml/saml-2.0/samlp2_logout_request.c0000644000175000017500000002403714114336625025062 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "../../utils.h" #include "samlp2_logout_request.h" #include #include /** * SECTION:samlp2_logout_request * @short_description: <samlp2:LogoutRequest> * *
Schema fragment for samlp2:LogoutRequest * * * * * * * * * * * * * * * * * ]]> *
*/ typedef struct _LassoSamlp2LogoutRequestPrivate LassoSamlp2LogoutRequestPrivate; struct _LassoSamlp2LogoutRequestPrivate { GList *SessionIndex; }; /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "BaseID", SNIPPET_NODE | SNIPPET_JUMP_ON_MATCH | SNIPPET_JUMP_3, G_STRUCT_OFFSET(LassoSamlp2LogoutRequest, BaseID), NULL, LASSO_SAML2_ASSERTION_PREFIX, LASSO_SAML2_ASSERTION_HREF}, { "NameID", SNIPPET_NODE | SNIPPET_JUMP_ON_MATCH | SNIPPET_JUMP_2, G_STRUCT_OFFSET(LassoSamlp2LogoutRequest, NameID), NULL, LASSO_SAML2_ASSERTION_PREFIX, LASSO_SAML2_ASSERTION_HREF}, { "EncryptedID", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSamlp2LogoutRequest, EncryptedID), NULL, LASSO_SAML2_ASSERTION_PREFIX, LASSO_SAML2_ASSERTION_HREF}, { "SessionIndex", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoSamlp2LogoutRequest, SessionIndex), NULL, NULL, NULL}, { "SessionIndex", SNIPPET_LIST_NODES, 0, NULL, NULL, NULL}, { "Reason", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSamlp2LogoutRequest, Reason), NULL, NULL, NULL}, { "NotOnOrAfter", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSamlp2LogoutRequest, NotOnOrAfter), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; #define SESSION_INDEX "SessionIndex" #define GET_PRIVATE(x) G_TYPE_INSTANCE_GET_PRIVATE(x, \ LASSO_TYPE_SAMLP2_LOGOUT_REQUEST, LassoSamlp2LogoutRequestPrivate) static void dispose(GObject *object) { LassoSamlp2LogoutRequest *logout_request = LASSO_SAMLP2_LOGOUT_REQUEST(object); LassoSamlp2LogoutRequestPrivate *pv; pv = GET_PRIVATE(logout_request); lasso_release_list_of_strings(pv->SessionIndex); G_OBJECT_CLASS(parent_class)->dispose(G_OBJECT(logout_request)); } /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ /* GROSS HACK: in order to support multiple session index elements, we use a private field that is * directly parsed or serialized through the overloaded get_xmlNode and init_from_xml virtual * methods. The structure of LassoSamlp2LogoutRequest is part, until the next major release, of our * public ABI, so we cound not do otherwise. * * The last parsed element is kept in the legacy field logout_request->SessionIndex. At parsing and * serializing time it is separated from other elements. This should keep the old behaviour intact. */ static xmlNode* get_xmlNode(LassoNode *node, gboolean lasso_dump) { xmlNode *xmlnode; GList *other_session_index, *it; char *keep_session_index; other_session_index = lasso_samlp2_logout_request_get_session_indexes((LassoSamlp2LogoutRequest*)node); /* save SessionIndex simple field, and nullify it */ keep_session_index = ((LassoSamlp2LogoutRequest*)node)->SessionIndex; ((LassoSamlp2LogoutRequest*)node)->SessionIndex = NULL; xmlnode = parent_class->get_xmlNode(node, lasso_dump); lasso_foreach(it, other_session_index) { xmlNode *child = xmlSecAddChild(xmlnode, BAD_CAST SESSION_INDEX, BAD_CAST LASSO_SAML2_PROTOCOL_HREF); #if (XMLSEC_MAJOR > 1) || (XMLSEC_MAJOR == 1 && XMLSEC_MINOR > 2) || (XMLSEC_MAJOR == 1 && XMLSEC_MINOR == 2 && XMLSEC_SUBMINOR > 12) xmlSecNodeEncodeAndSetContent(child, BAD_CAST it->data); #else xmlChar *content; content = xmlEncodeSpecialChars(child->doc, BAD_CAST it->data); xmlNodeSetContent(child, content); xmlFree(content); #endif } ((LassoSamlp2LogoutRequest*)node)->SessionIndex = keep_session_index; lasso_release_list_of_strings(other_session_index); return xmlnode; } static int init_from_xml(LassoNode *node, xmlNode *xmlnode) { int rc = 0; xmlNode *child = NULL; LassoSamlp2LogoutRequestPrivate *pv = NULL; LassoSamlp2LogoutRequest *logout_request = (LassoSamlp2LogoutRequest*)node; rc = parent_class->init_from_xml(node, xmlnode); if ((logout_request->BaseID != 0) + (logout_request->NameID != 0) + (logout_request->EncryptedID != 0) != 1) { error("samlp2:LogoutRequest needs one of BaseID, NameID or EncryptedID"); rc = 1; } if (rc == 0) { pv = GET_PRIVATE(node); child = xmlSecFindChild(xmlnode, BAD_CAST SESSION_INDEX, BAD_CAST LASSO_SAML2_PROTOCOL_HREF); while (child && xmlSecCheckNodeName(child, BAD_CAST SESSION_INDEX, BAD_CAST LASSO_SAML2_PROTOCOL_HREF)) { xmlChar *content = xmlNodeGetContent(child); lasso_list_add_string(pv->SessionIndex, (char*) content); lasso_release_xml_string(content); child = xmlSecGetNextElementNode(child->next); } /* remove the first one, since it is also stored in node->SessionIndex */ if (pv->SessionIndex) { lasso_release_string(pv->SessionIndex->data); pv->SessionIndex = g_list_delete_link(pv->SessionIndex, pv->SessionIndex); } } return rc; } static void class_init(LassoSamlp2LogoutRequestClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); klass->parent.parent.init_from_xml = init_from_xml; klass->parent.parent.get_xmlNode = get_xmlNode; lasso_node_class_set_nodename(nclass, "LogoutRequest"); lasso_node_class_set_ns(nclass, LASSO_SAML2_PROTOCOL_HREF, LASSO_SAML2_PROTOCOL_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); g_type_class_add_private(G_OBJECT_CLASS(klass), sizeof(LassoSamlp2LogoutRequestPrivate)); G_OBJECT_CLASS(klass)->dispose = dispose; } GType lasso_samlp2_logout_request_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSamlp2LogoutRequestClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSamlp2LogoutRequest), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_SAMLP2_REQUEST_ABSTRACT, "LassoSamlp2LogoutRequest", &this_info, 0); } return this_type; } /** * lasso_samlp2_logout_request_get_session_indexes: * @logout_request: a #LogoutRequest object * * If the logout request contains more than one SessionIndex element, this method must be used to * retrieve due to historical circonstances. It will a return a list of the content of the * SessionIndex elements. * * Return value:(element-type utf8)(transfer full): a #GList of sessions index. */ GList* lasso_samlp2_logout_request_get_session_indexes(LassoSamlp2LogoutRequest *logout_request) { GList *ret = NULL; LassoSamlp2LogoutRequestPrivate *pv = NULL; g_return_val_if_fail(LASSO_IS_SAMLP2_LOGOUT_REQUEST(logout_request), NULL); /* Return concatenation of old field + new private field */ pv = GET_PRIVATE(logout_request); lasso_assign_list_of_strings(ret, pv->SessionIndex); if (logout_request->SessionIndex) { ret = g_list_prepend(ret, g_strdup(logout_request->SessionIndex)); } return ret; } /** * lasso_samlp2_logout_request_set_session_indexes: * @logout_request: a #LogoutRequest object * @session_index:(element-type utf8): a list of session index * * If you want to set more than one SessionIndex on a LogoutRequest, use this method. Beware that * the public field named SessionIndex corresponds to the last element in this list. This is an * symptom of the way elements are parsed by Lasso. * */ void lasso_samlp2_logout_request_set_session_indexes(LassoSamlp2LogoutRequest *logout_request, GList *session_index) { LassoSamlp2LogoutRequestPrivate *pv; g_return_if_fail(LASSO_IS_SAMLP2_LOGOUT_REQUEST(logout_request)); /* assign rest of the list to the new private field */ pv = GET_PRIVATE(logout_request); if (! session_index) { lasso_release_string(logout_request->SessionIndex); lasso_release_list_of_strings(pv->SessionIndex); } else { lasso_assign_string(logout_request->SessionIndex, (char*) session_index->data); lasso_assign_list_of_strings(pv->SessionIndex, session_index->next); } } /** * lasso_samlp2_logout_request_new: * * Creates a new #LassoSamlp2LogoutRequest object. * * Return value: a newly created #LassoSamlp2LogoutRequest object **/ LassoNode* lasso_samlp2_logout_request_new() { return g_object_new(LASSO_TYPE_SAMLP2_LOGOUT_REQUEST, NULL); } lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/saml2_authn_context.c0000644000000000000000000000013114114500706021216 xustar0030 mtime=1630699974.070799833 29 atime=1678814154.24101191 30 ctime=1678814320.601950986 lasso-2.8.2/lasso/xml/saml-2.0/saml2_authn_context.c0000644000175000017500000001130114114500706024463 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "saml2_authn_context.h" /** * SECTION:saml2_authn_context * @short_description: <saml2:AuthnContext> * *
Schema fragment for saml2:AuthnContext * * * * * * * * * * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "AuthnContextClassRef", SNIPPET_CONTENT | SNIPPET_OPTIONAL | SNIPPET_JUMP_ON_MISS | SNIPPET_JUMP_3, G_STRUCT_OFFSET(LassoSaml2AuthnContext, AuthnContextClassRef), NULL, NULL, NULL}, { "AuthnContextDecl", SNIPPET_NODE | SNIPPET_OPTIONAL | SNIPPET_JUMP_ON_MATCH | SNIPPET_JUMP_4, G_STRUCT_OFFSET(LassoSaml2AuthnContext, AuthnContextDecl), NULL, NULL, NULL}, { "AuthnContextDeclRef", SNIPPET_CONTENT | SNIPPET_OPTIONAL | SNIPPET_JUMP | SNIPPET_JUMP_3, G_STRUCT_OFFSET(LassoSaml2AuthnContext, AuthnContextDeclRef), NULL, NULL, NULL}, { "AuthnContextDecl", SNIPPET_NODE | SNIPPET_OPTIONAL | SNIPPET_JUMP_ON_MATCH | SNIPPET_JUMP_2, G_STRUCT_OFFSET(LassoSaml2AuthnContext, AuthnContextDecl), NULL, NULL, NULL}, { "AuthnContextDeclRef", SNIPPET_CONTENT | SNIPPET_MANDATORY, G_STRUCT_OFFSET(LassoSaml2AuthnContext, AuthnContextDeclRef), NULL, NULL, NULL}, { "AuthenticatingAuthority", SNIPPET_CONTENT | SNIPPET_OPTIONAL, G_STRUCT_OFFSET(LassoSaml2AuthnContext, AuthenticatingAuthority), NULL, NULL, NULL}, /* Other AuthenticatingAuthority are just ignored, it's a work-around to at least accept correct SAML message. * See https://dev.entrouvert.org/issues/29340 */ { "AuthenticatingAuthority", SNIPPET_LIST_CONTENT | SNIPPET_OPTIONAL, 0, NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSaml2AuthnContextClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "AuthnContext"); lasso_node_class_set_ns(nclass, LASSO_SAML2_ASSERTION_HREF, LASSO_SAML2_ASSERTION_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_saml2_authn_context_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSaml2AuthnContextClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSaml2AuthnContext), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoSaml2AuthnContext", &this_info, 0); } return this_type; } /** * lasso_saml2_authn_context_new: * * Creates a new #LassoSaml2AuthnContext object. * * Return value: a newly created #LassoSaml2AuthnContext object **/ LassoNode* lasso_saml2_authn_context_new() { return g_object_new(LASSO_TYPE_SAML2_AUTHN_CONTEXT, NULL); } lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/saml2_one_time_use.h0000644000000000000000000000013114114336625021022 xustar0029 mtime=1630649749.86643743 30 atime=1678814151.016993891 30 ctime=1678814320.541950645 lasso-2.8.2/lasso/xml/saml-2.0/saml2_one_time_use.h0000644000175000017500000000437014114336625024277 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAML2_ONE_TIME_USE_H__ #define __LASSO_SAML2_ONE_TIME_USE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "saml2_condition_abstract.h" #define LASSO_TYPE_SAML2_ONE_TIME_USE (lasso_saml2_one_time_use_get_type()) #define LASSO_SAML2_ONE_TIME_USE(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML2_ONE_TIME_USE, \ LassoSaml2OneTimeUse)) #define LASSO_SAML2_ONE_TIME_USE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML2_ONE_TIME_USE, \ LassoSaml2OneTimeUseClass)) #define LASSO_IS_SAML2_ONE_TIME_USE(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML2_ONE_TIME_USE)) #define LASSO_IS_SAML2_ONE_TIME_USE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML2_ONE_TIME_USE)) #define LASSO_SAML2_ONE_TIME_USE_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML2_ONE_TIME_USE, \ LassoSaml2OneTimeUseClass)) typedef struct _LassoSaml2OneTimeUse LassoSaml2OneTimeUse; typedef struct _LassoSaml2OneTimeUseClass LassoSaml2OneTimeUseClass; struct _LassoSaml2OneTimeUse { LassoSaml2ConditionAbstract parent; /*< public >*/ }; struct _LassoSaml2OneTimeUseClass { LassoSaml2ConditionAbstractClass parent; }; LASSO_EXPORT GType lasso_saml2_one_time_use_get_type(void); LASSO_EXPORT LassoNode* lasso_saml2_one_time_use_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAML2_ONE_TIME_USE_H__ */ lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/samlp2_idp_list.h0000644000000000000000000000013214114336625020337 xustar0030 mtime=1630649749.870437474 30 atime=1678814151.020993912 30 ctime=1678814320.561950759 lasso-2.8.2/lasso/xml/saml-2.0/samlp2_idp_list.h0000644000175000017500000000433214114336625023611 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAMLP2_IDP_LIST_H__ #define __LASSO_SAMLP2_IDP_LIST_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "samlp2_idp_entry.h" #define LASSO_TYPE_SAMLP2_IDP_LIST (lasso_samlp2_idp_list_get_type()) #define LASSO_SAMLP2_IDP_LIST(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAMLP2_IDP_LIST, \ LassoSamlp2IDPList)) #define LASSO_SAMLP2_IDP_LIST_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAMLP2_IDP_LIST, \ LassoSamlp2IDPListClass)) #define LASSO_IS_SAMLP2_IDP_LIST(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAMLP2_IDP_LIST)) #define LASSO_IS_SAMLP2_IDP_LIST_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAMLP2_IDP_LIST)) #define LASSO_SAMLP2_IDP_LIST_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAMLP2_IDP_LIST, \ LassoSamlp2IDPListClass)) typedef struct _LassoSamlp2IDPList LassoSamlp2IDPList; typedef struct _LassoSamlp2IDPListClass LassoSamlp2IDPListClass; struct _LassoSamlp2IDPList { LassoNode parent; /*< public >*/ /* elements */ GList *IDPEntry; /* of LassoSamlp2IDPEntry */ char *GetComplete; }; struct _LassoSamlp2IDPListClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_samlp2_idp_list_get_type(void); LASSO_EXPORT LassoNode* lasso_samlp2_idp_list_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAMLP2_IDP_LIST_H__ */ lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/samlp2_name_id_mapping_response.h0000644000000000000000000000013214114336625023555 xustar0030 mtime=1630649749.870437474 30 atime=1678814151.020993912 30 ctime=1678814320.569950804 lasso-2.8.2/lasso/xml/saml-2.0/samlp2_name_id_mapping_response.h0000644000175000017500000000532314114336625027030 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAMLP2_NAME_ID_MAPPING_RESPONSE_H__ #define __LASSO_SAMLP2_NAME_ID_MAPPING_RESPONSE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "samlp2_status_response.h" #include "saml2_encrypted_element.h" #include "saml2_name_id.h" #define LASSO_TYPE_SAMLP2_NAME_ID_MAPPING_RESPONSE \ (lasso_samlp2_name_id_mapping_response_get_type()) #define LASSO_SAMLP2_NAME_ID_MAPPING_RESPONSE(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAMLP2_NAME_ID_MAPPING_RESPONSE, \ LassoSamlp2NameIDMappingResponse)) #define LASSO_SAMLP2_NAME_ID_MAPPING_RESPONSE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAMLP2_NAME_ID_MAPPING_RESPONSE, \ LassoSamlp2NameIDMappingResponseClass)) #define LASSO_IS_SAMLP2_NAME_ID_MAPPING_RESPONSE(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAMLP2_NAME_ID_MAPPING_RESPONSE)) #define LASSO_IS_SAMLP2_NAME_ID_MAPPING_RESPONSE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAMLP2_NAME_ID_MAPPING_RESPONSE)) #define LASSO_SAMLP2_NAME_ID_MAPPING_RESPONSE_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAMLP2_NAME_ID_MAPPING_RESPONSE, \ LassoSamlp2NameIDMappingResponseClass)) typedef struct _LassoSamlp2NameIDMappingResponse LassoSamlp2NameIDMappingResponse; typedef struct _LassoSamlp2NameIDMappingResponseClass LassoSamlp2NameIDMappingResponseClass; struct _LassoSamlp2NameIDMappingResponse { LassoSamlp2StatusResponse parent; /*< public >*/ /* elements */ LassoSaml2NameID *NameID; LassoSaml2EncryptedElement *EncryptedID; }; struct _LassoSamlp2NameIDMappingResponseClass { LassoSamlp2StatusResponseClass parent; }; LASSO_EXPORT GType lasso_samlp2_name_id_mapping_response_get_type(void); LASSO_EXPORT LassoNode* lasso_samlp2_name_id_mapping_response_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAMLP2_NAME_ID_MAPPING_RESPONSE_H__ */ lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/saml2_advice.c0000644000000000000000000000013214114336625017576 xustar0030 mtime=1630649749.862437387 30 atime=1678814151.688997645 30 ctime=1678814320.593950941 lasso-2.8.2/lasso/xml/saml-2.0/saml2_advice.c0000644000175000017500000000723714114336625023057 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "saml2_advice.h" /** * SECTION:saml2_advice * @short_description: <saml2:Advice> * *
Schema fragment for saml2:Advice * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "AssertionIDRef", SNIPPET_LIST_NODES, G_STRUCT_OFFSET(LassoSaml2Advice, AssertionIDRef), NULL, NULL, NULL}, { "AssertionURIRef", SNIPPET_LIST_NODES | SNIPPET_JUMP_ON_MATCH | SNIPPET_BACK_1, G_STRUCT_OFFSET(LassoSaml2Advice, AssertionURIRef), NULL, NULL, NULL}, { "Assertion", SNIPPET_LIST_NODES | SNIPPET_JUMP_ON_MATCH | SNIPPET_BACK_2, G_STRUCT_OFFSET(LassoSaml2Advice, Assertion), NULL, NULL, NULL}, { "EncryptedAssertion", SNIPPET_LIST_NODES | SNIPPET_JUMP_ON_MATCH | SNIPPET_BACK_3, G_STRUCT_OFFSET(LassoSaml2Advice, EncryptedAssertion), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSaml2AdviceClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "Advice"); lasso_node_class_set_ns(nclass, LASSO_SAML2_ASSERTION_HREF, LASSO_SAML2_ASSERTION_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_saml2_advice_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSaml2AdviceClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSaml2Advice), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoSaml2Advice", &this_info, 0); } return this_type; } /** * lasso_saml2_advice_new: * * Creates a new #LassoSaml2Advice object. * * Return value: a newly created #LassoSaml2Advice object **/ LassoNode* lasso_saml2_advice_new() { return g_object_new(LASSO_TYPE_SAML2_ADVICE, NULL); } lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/samlp2_authz_decision_query.c0000644000000000000000000000013114114336625022757 xustar0029 mtime=1630649749.86643743 30 atime=1678814166.429080101 30 ctime=1678814320.637951191 lasso-2.8.2/lasso/xml/saml-2.0/samlp2_authz_decision_query.c0000644000175000017500000000744514114336625026242 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "samlp2_authz_decision_query.h" /** * SECTION:samlp2_authz_decision_query * @short_description: <samlp2:AuthzDecisionQuery> * *
Schema fragment for samlp2:AuthzDecisionQuery * * * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "Action", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSamlp2AuthzDecisionQuery, Action), NULL, LASSO_SAML2_ASSERTION_PREFIX, LASSO_SAML2_ASSERTION_HREF}, { "Evidence", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSamlp2AuthzDecisionQuery, Evidence), NULL, LASSO_SAML2_ASSERTION_PREFIX, LASSO_SAML2_ASSERTION_HREF}, { "Resource", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSamlp2AuthzDecisionQuery, Resource), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSamlp2AuthzDecisionQueryClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "AuthzDecisionQuery"); lasso_node_class_set_ns(nclass, LASSO_SAML2_PROTOCOL_HREF, LASSO_SAML2_PROTOCOL_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_samlp2_authz_decision_query_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSamlp2AuthzDecisionQueryClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSamlp2AuthzDecisionQuery), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_SAMLP2_SUBJECT_QUERY_ABSTRACT, "LassoSamlp2AuthzDecisionQuery", &this_info, 0); } return this_type; } /** * lasso_samlp2_authz_decision_query_new: * * Creates a new #LassoSamlp2AuthzDecisionQuery object. * * Return value: a newly created #LassoSamlp2AuthzDecisionQuery object **/ LassoNode* lasso_samlp2_authz_decision_query_new() { return g_object_new(LASSO_TYPE_SAMLP2_AUTHZ_DECISION_QUERY, NULL); } lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/saml2_name_id.c0000644000000000000000000000013114114336625017736 xustar0029 mtime=1630649749.86643743 30 atime=1678814158.477035598 30 ctime=1678814320.613951055 lasso-2.8.2/lasso/xml/saml-2.0/saml2_name_id.c0000644000175000017500000001244214114336625023212 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "../../utils.h" #include "../../registry.h" #include "saml2_name_id.h" /** * SECTION:saml2_name_id * @short_description: <saml2:NameID> * *
Schema fragment for saml2:NameID * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "content", SNIPPET_TEXT_CHILD, G_STRUCT_OFFSET(LassoSaml2NameID, content), NULL, NULL, NULL}, { "Format", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSaml2NameID, Format), NULL, NULL, NULL}, { "SPProvidedID", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSaml2NameID, SPProvidedID), NULL, NULL, NULL}, { "NameQualifier", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSaml2NameID, NameQualifier), NULL, NULL, NULL}, { "SPNameQualifier", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSaml2NameID, SPNameQualifier), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSaml2NameIDClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "NameID"); lasso_node_class_set_ns(nclass, LASSO_SAML2_ASSERTION_HREF, LASSO_SAML2_ASSERTION_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_saml2_name_id_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSaml2NameIDClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSaml2NameID), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoSaml2NameID", &this_info, 0); lasso_registry_default_add_direct_mapping( LASSO_SAML2_ASSERTION_HREF, "Issuer", LASSO_LASSO_HREF, "LassoSaml2NameID"); } return this_type; } /** * lasso_saml2_name_id_new: * * Creates a new #LassoSaml2NameID object. * * Return value: a newly created #LassoSaml2NameID object **/ LassoNode* lasso_saml2_name_id_new() { return g_object_new(LASSO_TYPE_SAML2_NAME_ID, NULL); } /** * lasso_saml2_name_id_new_with_string: * @content: the Name Identifier. * * Creates a new #LassoSaml2NameID object and initializes it * with @content. Beware that no format is set. * * Return value: a newly created #LassoSaml2NameID object **/ LassoNode* lasso_saml2_name_id_new_with_string(char *content) { LassoSaml2NameID *object; object = g_object_new(LASSO_TYPE_SAML2_NAME_ID, NULL); object->content = g_strdup(content); return LASSO_NODE(object); } /** * lasso_saml2_name_id_equals: * @name_id: a #LassoSaml2NameID object * @other_name_id: another #LassoSaml2NameID object * * Return TRUE if @name_id equals @other_name_id. * * Return value: TRUE if the two NameID are equal and are #LassoSaml2NameID objects, FALSE * otherwise. */ gboolean lasso_saml2_name_id_equals(LassoSaml2NameID *name_id, LassoSaml2NameID *other_name_id) { if (! LASSO_IS_SAML2_NAME_ID(name_id) || ! LASSO_IS_SAML2_NAME_ID(other_name_id)) return FALSE; /* check obligatory content */ if (!name_id->content || !other_name_id->content || strcmp(name_id->content, other_name_id->content) != 0) return FALSE; /* check optional content */ if (lasso_strisnotequal(name_id->Format,other_name_id->Format)) return FALSE; if (lasso_strisnotequal(name_id->SPProvidedID,other_name_id->SPProvidedID)) return FALSE; if (lasso_strisnotequal(name_id->NameQualifier,other_name_id->NameQualifier)) return FALSE; if (lasso_strisnotequal(name_id->SPNameQualifier,other_name_id->SPNameQualifier)) return FALSE; return TRUE; } lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/saml2_subject_confirmation.c0000644000000000000000000000013114114336625022551 xustar0029 mtime=1630649749.86643743 30 atime=1678814161.017049809 30 ctime=1678814320.621951101 lasso-2.8.2/lasso/xml/saml-2.0/saml2_subject_confirmation.c0000644000175000017500000000777114114336625026036 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "saml2_subject_confirmation.h" /** * SECTION:saml2_subject_confirmation * @short_description: <saml2:SubjectConfirmation> * *
Schema fragment for saml2:SubjectConfirmation * * * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "BaseID", SNIPPET_NODE | SNIPPET_JUMP_ON_MATCH | SNIPPET_JUMP_3, G_STRUCT_OFFSET(LassoSaml2SubjectConfirmation, BaseID), NULL, NULL, NULL}, { "NameID", SNIPPET_NODE | SNIPPET_JUMP_ON_MATCH | SNIPPET_JUMP_2, G_STRUCT_OFFSET(LassoSaml2SubjectConfirmation, NameID), NULL, NULL, NULL}, { "EncryptedID", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSaml2SubjectConfirmation, EncryptedID), "LassoSaml2EncryptedElement", NULL, NULL}, { "SubjectConfirmationData", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSaml2SubjectConfirmation, SubjectConfirmationData), NULL, NULL, NULL}, { "Method", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSaml2SubjectConfirmation, Method), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSaml2SubjectConfirmationClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "SubjectConfirmation"); lasso_node_class_set_ns(nclass, LASSO_SAML2_ASSERTION_HREF, LASSO_SAML2_ASSERTION_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_saml2_subject_confirmation_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSaml2SubjectConfirmationClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSaml2SubjectConfirmation), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoSaml2SubjectConfirmation", &this_info, 0); } return this_type; } /** * lasso_saml2_subject_confirmation_new: * * Creates a new #LassoSaml2SubjectConfirmation object. * * Return value: a newly created #LassoSaml2SubjectConfirmation object **/ LassoNode* lasso_saml2_subject_confirmation_new() { return g_object_new(LASSO_TYPE_SAML2_SUBJECT_CONFIRMATION, NULL); } lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/saml2_assertion.c0000644000000000000000000000013214364261206020351 xustar0030 mtime=1674666630.758769192 30 atime=1678814152.113000015 30 ctime=1678814320.593950941 lasso-2.8.2/lasso/xml/saml-2.0/saml2_assertion.c0000644000175000017500000001723714364261206023633 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../../utils.h" #include "../private.h" #include #include #include #include "saml2_assertion.h" /** * SECTION:saml2_assertion * @short_description: <saml2:Assertion> * *
Schema fragment for saml2:Assertion * * * * * * * * * * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "Issuer", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSaml2Assertion, Issuer), "LassoSaml2NameID", NULL, NULL}, { "Signature", SNIPPET_SIGNATURE, G_STRUCT_OFFSET(LassoSaml2Assertion, ID), NULL, LASSO_DS_PREFIX, LASSO_DS_HREF}, { "Subject", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSaml2Assertion, Subject), NULL, NULL, NULL}, { "Conditions", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSaml2Assertion, Conditions), NULL, NULL, NULL}, { "Advice", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSaml2Assertion, Advice), NULL, NULL, NULL}, { "Statement", SNIPPET_LIST_NODES, G_STRUCT_OFFSET(LassoSaml2Assertion, Statement), NULL, NULL, NULL}, { "AuthnStatement", SNIPPET_LIST_NODES | SNIPPET_JUMP_ON_MATCH | SNIPPET_BACK_1, G_STRUCT_OFFSET(LassoSaml2Assertion, AuthnStatement), NULL, NULL, NULL}, { "AuthzDecisionStatement", SNIPPET_LIST_NODES | SNIPPET_JUMP_ON_MATCH | SNIPPET_BACK_2, G_STRUCT_OFFSET(LassoSaml2Assertion, AuthzDecisionStatement), NULL, NULL, NULL}, { "AttributeStatement", SNIPPET_LIST_NODES | SNIPPET_JUMP_ON_MATCH | SNIPPET_BACK_3, G_STRUCT_OFFSET(LassoSaml2Assertion, AttributeStatement), NULL, NULL, NULL}, { "Version", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSaml2Assertion, Version), NULL, NULL, NULL}, { "ID", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSaml2Assertion, ID), NULL, NULL, NULL}, { "IssueInstant", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSaml2Assertion, IssueInstant), NULL, NULL, NULL}, /* hidden fields; used in lasso dumps */ { "SignType", SNIPPET_ATTRIBUTE | SNIPPET_INTEGER | SNIPPET_LASSO_DUMP, G_STRUCT_OFFSET(LassoSaml2Assertion, sign_type), NULL, NULL, NULL}, { "SignMethod", SNIPPET_ATTRIBUTE | SNIPPET_INTEGER | SNIPPET_LASSO_DUMP, G_STRUCT_OFFSET(LassoSaml2Assertion, sign_method), NULL, NULL, NULL}, { "PrivateKeyFile", SNIPPET_CONTENT | SNIPPET_LASSO_DUMP, G_STRUCT_OFFSET(LassoSaml2Assertion, private_key_file), NULL, NULL, NULL}, { "CertificateFile", SNIPPET_CONTENT | SNIPPET_LASSO_DUMP, G_STRUCT_OFFSET(LassoSaml2Assertion, certificate_file), NULL, NULL, NULL}, { "EncryptionActivated", SNIPPET_ATTRIBUTE | SNIPPET_BOOLEAN | SNIPPET_LASSO_DUMP, G_STRUCT_OFFSET(LassoSaml2Assertion, encryption_activated), NULL, NULL, NULL}, { "EncryptionPublicKeyStr", SNIPPET_CONTENT | SNIPPET_LASSO_DUMP, G_STRUCT_OFFSET(LassoSaml2Assertion, encryption_public_key_str), NULL, NULL, NULL}, { "EncryptionSymKeyType", SNIPPET_ATTRIBUTE | SNIPPET_INTEGER | SNIPPET_LASSO_DUMP, G_STRUCT_OFFSET(LassoSaml2Assertion, encryption_sym_key_type), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; static xmlNode* get_xmlNode(LassoNode *node, gboolean lasso_dump) { xmlNode *xmlnode, *original_xmlnode; /* If assertion has been deserialized and contain a signature, dump it from the * original xmlnode. */ original_xmlnode = lasso_node_get_original_xmlnode(node); while (original_xmlnode) { xmlNode *signature, *signature_value; signature = xmlSecFindChild(original_xmlnode, xmlSecNodeSignature, xmlSecDSigNs); if (! signature) break; signature_value = xmlSecFindNode(signature, xmlSecNodeSignatureValue, xmlSecDSigNs); if (signature_value && signature_value->children) { return xmlCopyNode(original_xmlnode, 1); } break; } xmlnode = parent_class->get_xmlNode(node, lasso_dump); return xmlnode; } /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void instance_init(LassoSaml2Assertion *node, G_GNUC_UNUSED void *unused) { node->sign_type = LASSO_SIGNATURE_TYPE_NONE; node->encryption_sym_key_type = LASSO_ENCRYPTION_SYM_KEY_TYPE_DEFAULT; } static void class_init(LassoSaml2AssertionClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->get_xmlNode = get_xmlNode; nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "Assertion"); lasso_node_class_set_ns(nclass,LASSO_SAML2_ASSERTION_HREF, LASSO_SAML2_ASSERTION_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); nclass->node_data->id_attribute_name = "ID"; nclass->node_data->id_attribute_offset = G_STRUCT_OFFSET(LassoSaml2Assertion, ID); nclass->node_data->sign_type_offset = G_STRUCT_OFFSET( LassoSaml2Assertion, sign_type); nclass->node_data->sign_method_offset = G_STRUCT_OFFSET( LassoSaml2Assertion, sign_method); nclass->node_data->private_key_file_offset = G_STRUCT_OFFSET(LassoSaml2Assertion, private_key_file); nclass->node_data->certificate_file_offset = G_STRUCT_OFFSET(LassoSaml2Assertion, certificate_file); nclass->node_data->keep_xmlnode = TRUE; } GType lasso_saml2_assertion_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSaml2AssertionClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSaml2Assertion), 0, (GInstanceInitFunc) instance_init, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoSaml2Assertion", &this_info, 0); } return this_type; } /** * lasso_saml2_assertion_new: * * Creates a new #LassoSaml2Assertion object. * * Return value: a newly created #LassoSaml2Assertion object **/ LassoNode* lasso_saml2_assertion_new() { return g_object_new(LASSO_TYPE_SAML2_ASSERTION, NULL); } lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/samlp2_authz_decision_query.h0000644000000000000000000000013114114336625022764 xustar0029 mtime=1630649749.86643743 30 atime=1678814151.020993912 30 ctime=1678814320.557950736 lasso-2.8.2/lasso/xml/saml-2.0/samlp2_authz_decision_query.h0000644000175000017500000000522214114336625026236 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAMLP2_AUTHZ_DECISION_QUERY_H__ #define __LASSO_SAMLP2_AUTHZ_DECISION_QUERY_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "saml2_action.h" #include "saml2_evidence.h" #include "samlp2_subject_query_abstract.h" #define LASSO_TYPE_SAMLP2_AUTHZ_DECISION_QUERY (lasso_samlp2_authz_decision_query_get_type()) #define LASSO_SAMLP2_AUTHZ_DECISION_QUERY(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAMLP2_AUTHZ_DECISION_QUERY, \ LassoSamlp2AuthzDecisionQuery)) #define LASSO_SAMLP2_AUTHZ_DECISION_QUERY_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAMLP2_AUTHZ_DECISION_QUERY, \ LassoSamlp2AuthzDecisionQueryClass)) #define LASSO_IS_SAMLP2_AUTHZ_DECISION_QUERY(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAMLP2_AUTHZ_DECISION_QUERY)) #define LASSO_IS_SAMLP2_AUTHZ_DECISION_QUERY_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAMLP2_AUTHZ_DECISION_QUERY)) #define LASSO_SAMLP2_AUTHZ_DECISION_QUERY_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAMLP2_AUTHZ_DECISION_QUERY, \ LassoSamlp2AuthzDecisionQueryClass)) typedef struct _LassoSamlp2AuthzDecisionQuery LassoSamlp2AuthzDecisionQuery; typedef struct _LassoSamlp2AuthzDecisionQueryClass LassoSamlp2AuthzDecisionQueryClass; struct _LassoSamlp2AuthzDecisionQuery { LassoSamlp2SubjectQueryAbstract parent; /*< public >*/ /* elements */ LassoSaml2Action *Action; LassoSaml2Evidence *Evidence; /* attributes */ char *Resource; }; struct _LassoSamlp2AuthzDecisionQueryClass { LassoSamlp2SubjectQueryAbstractClass parent; }; LASSO_EXPORT GType lasso_samlp2_authz_decision_query_get_type(void); LASSO_EXPORT LassoNode* lasso_samlp2_authz_decision_query_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAMLP2_AUTHZ_DECISION_QUERY_H__ */ lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/samlp2_extensions.h0000644000000000000000000000013214114336625020727 xustar0030 mtime=1630649749.870437474 30 atime=1678814151.020993912 30 ctime=1678814320.561950759 lasso-2.8.2/lasso/xml/saml-2.0/samlp2_extensions.h0000644000175000017500000000511414114336625024200 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAMLP2_EXTENSIONS_H__ #define __LASSO_SAMLP2_EXTENSIONS_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "../xml.h" #define LASSO_TYPE_SAMLP2_EXTENSIONS (lasso_samlp2_extensions_get_type()) #define LASSO_SAMLP2_EXTENSIONS(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAMLP2_EXTENSIONS, \ LassoSamlp2Extensions)) #define LASSO_SAMLP2_EXTENSIONS_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAMLP2_EXTENSIONS, \ LassoSamlp2ExtensionsClass)) #define LASSO_IS_SAMLP2_EXTENSIONS(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAMLP2_EXTENSIONS)) #define LASSO_IS_SAMLP2_EXTENSIONS_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAMLP2_EXTENSIONS)) #define LASSO_SAMLP2_EXTENSIONS_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAMLP2_EXTENSIONS, \ LassoSamlp2ExtensionsClass)) typedef struct _LassoSamlp2Extensions LassoSamlp2Extensions; typedef struct _LassoSamlp2ExtensionsClass LassoSamlp2ExtensionsClass; struct _LassoSamlp2Extensions { LassoNode parent; /*< public >*/ }; struct _LassoSamlp2ExtensionsClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_samlp2_extensions_get_type(void); LASSO_EXPORT LassoNode* lasso_samlp2_extensions_new(void); LASSO_EXPORT GList* lasso_samlp2_extensions_get_any(LassoSamlp2Extensions *extensions); LASSO_EXPORT void lasso_samlp2_extensions_set_any(LassoSamlp2Extensions *extensions, GList *any); LASSO_EXPORT GHashTable* lasso_samlp2_extensions_get_attributes(LassoSamlp2Extensions *extensions); LASSO_EXPORT void lasso_samlp2_extensions_set_attributes(LassoSamlp2Extensions *extensions, GHashTable *attributes); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAMLP2_EXTENSIONS_H__ */ lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/samlp2_subject_query_abstract.c0000644000000000000000000000013114114336625023271 xustar0030 mtime=1630649749.870437474 30 atime=1678814177.089139831 29 ctime=1678814320.66595135 lasso-2.8.2/lasso/xml/saml-2.0/samlp2_subject_query_abstract.c0000644000175000017500000000652514114336625026552 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "samlp2_subject_query_abstract.h" /** * SECTION:samlp2_subject_query_abstract * @short_description: <samlp2:SubjectQueryAbstract> * *
Schema fragment for samlp2:SubjectQueryAbstract * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "Subject", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSamlp2SubjectQueryAbstract, Subject), NULL, LASSO_SAML2_ASSERTION_PREFIX, LASSO_SAML2_ASSERTION_HREF }, {NULL, 0, 0, NULL, NULL, NULL} }; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSamlp2SubjectQueryAbstractClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "SubjectQueryAbstract"); lasso_node_class_set_ns(nclass, LASSO_SAML2_PROTOCOL_HREF, LASSO_SAML2_PROTOCOL_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_samlp2_subject_query_abstract_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSamlp2SubjectQueryAbstractClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSamlp2SubjectQueryAbstract), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_SAMLP2_REQUEST_ABSTRACT, "LassoSamlp2SubjectQueryAbstract", &this_info, 0); } return this_type; } /** * lasso_samlp2_subject_query_abstract_new: * * Creates a new #LassoSamlp2SubjectQueryAbstract object. * * Return value: a newly created #LassoSamlp2SubjectQueryAbstract object **/ LassoNode* lasso_samlp2_subject_query_abstract_new() { return g_object_new(LASSO_TYPE_SAMLP2_SUBJECT_QUERY_ABSTRACT, NULL); } lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/saml2_evidence.h0000644000000000000000000000013114114336625020131 xustar0029 mtime=1630649749.86643743 30 atime=1678814151.016993891 30 ctime=1678814320.537950621 lasso-2.8.2/lasso/xml/saml-2.0/saml2_evidence.h0000644000175000017500000000450314114336625023404 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAML2_EVIDENCE_H__ #define __LASSO_SAML2_EVIDENCE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "../xml.h" #define LASSO_TYPE_SAML2_EVIDENCE (lasso_saml2_evidence_get_type()) #define LASSO_SAML2_EVIDENCE(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML2_EVIDENCE, \ LassoSaml2Evidence)) #define LASSO_SAML2_EVIDENCE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML2_EVIDENCE, \ LassoSaml2EvidenceClass)) #define LASSO_IS_SAML2_EVIDENCE(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML2_EVIDENCE)) #define LASSO_IS_SAML2_EVIDENCE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML2_EVIDENCE)) #define LASSO_SAML2_EVIDENCE_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML2_EVIDENCE, \ LassoSaml2EvidenceClass)) typedef struct _LassoSaml2Evidence LassoSaml2Evidence; typedef struct _LassoSaml2EvidenceClass LassoSaml2EvidenceClass; struct _LassoSaml2Evidence { LassoNode parent; /*< public >*/ /* elements */ GList *AssertionIDRef; /* of LassoNode */ GList *AssertionURIRef; /* of LassoNode */ GList *Assertion; /* of LassoSaml2Assertion */ GList *EncryptedAssertion; /* of LassoSaml2EncryptedElement */ }; struct _LassoSaml2EvidenceClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_saml2_evidence_get_type(void); LASSO_EXPORT LassoNode* lasso_saml2_evidence_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAML2_EVIDENCE_H__ */ lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/saml2_base_idabstract.c0000644000000000000000000000013214114336625021455 xustar0030 mtime=1630649749.862437387 30 atime=1678814155.501018955 30 ctime=1678814320.605951009 lasso-2.8.2/lasso/xml/saml-2.0/saml2_base_idabstract.c0000644000175000017500000000636014114336625024732 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "saml2_base_idabstract.h" /** * SECTION:saml2_base_idabstract * @short_description: <saml2:BaseIDAbstract> * *
Schema fragment for saml2:BaseIDAbstract * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "NameQualifier", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSaml2BaseIDAbstract, NameQualifier), NULL, NULL, NULL}, { "SPNameQualifier", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSaml2BaseIDAbstract, SPNameQualifier), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSaml2BaseIDAbstractClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "BaseIDAbstract"); lasso_node_class_set_ns(nclass, LASSO_SAML2_ASSERTION_HREF, LASSO_SAML2_ASSERTION_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_saml2_base_idabstract_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSaml2BaseIDAbstractClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSaml2BaseIDAbstract), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoSaml2BaseIDAbstract", &this_info, 0); } return this_type; } /** * lasso_saml2_base_idabstract_new: * * Creates a new #LassoSaml2BaseIDAbstract object. * * Return value: a newly created #LassoSaml2BaseIDAbstract object **/ LassoNode* lasso_saml2_base_idabstract_new() { return g_object_new(LASSO_TYPE_SAML2_BASE_IDABSTRACT, NULL); } lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/saml2_attribute.h0000644000000000000000000000013214114336625020353 xustar0030 mtime=1630649749.862437387 30 atime=1678814151.016993891 30 ctime=1678814320.521950531 lasso-2.8.2/lasso/xml/saml-2.0/saml2_attribute.h0000644000175000017500000000441014114336625023622 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAML2_ATTRIBUTE_H__ #define __LASSO_SAML2_ATTRIBUTE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "../xml.h" #define LASSO_TYPE_SAML2_ATTRIBUTE (lasso_saml2_attribute_get_type()) #define LASSO_SAML2_ATTRIBUTE(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML2_ATTRIBUTE, \ LassoSaml2Attribute)) #define LASSO_SAML2_ATTRIBUTE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML2_ATTRIBUTE, \ LassoSaml2AttributeClass)) #define LASSO_IS_SAML2_ATTRIBUTE(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML2_ATTRIBUTE)) #define LASSO_IS_SAML2_ATTRIBUTE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML2_ATTRIBUTE)) #define LASSO_SAML2_ATTRIBUTE_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML2_ATTRIBUTE, \ LassoSaml2AttributeClass)) typedef struct _LassoSaml2Attribute LassoSaml2Attribute; typedef struct _LassoSaml2AttributeClass LassoSaml2AttributeClass; struct _LassoSaml2Attribute { LassoNode parent; /*< public >*/ /* elements */ GList *AttributeValue; /* of LassoNode */ /* attributes */ char *Name; char *NameFormat; char *FriendlyName; }; struct _LassoSaml2AttributeClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_saml2_attribute_get_type(void); LASSO_EXPORT LassoNode* lasso_saml2_attribute_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAML2_ATTRIBUTE_H__ */ lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/samlp2_idp_entry.h0000644000000000000000000000013214114336625020525 xustar0030 mtime=1630649749.870437474 30 atime=1678814151.020993912 30 ctime=1678814320.561950759 lasso-2.8.2/lasso/xml/saml-2.0/samlp2_idp_entry.h0000644000175000017500000000432514114336625024001 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAMLP2_IDP_ENTRY_H__ #define __LASSO_SAMLP2_IDP_ENTRY_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "../xml.h" #define LASSO_TYPE_SAMLP2_IDP_ENTRY (lasso_samlp2_idp_entry_get_type()) #define LASSO_SAMLP2_IDP_ENTRY(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAMLP2_IDP_ENTRY, \ LassoSamlp2IDPEntry)) #define LASSO_SAMLP2_IDP_ENTRY_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAMLP2_IDP_ENTRY, \ LassoSamlp2IDPEntryClass)) #define LASSO_IS_SAMLP2_IDP_ENTRY(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAMLP2_IDP_ENTRY)) #define LASSO_IS_SAMLP2_IDP_ENTRY_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAMLP2_IDP_ENTRY)) #define LASSO_SAMLP2_IDP_ENTRY_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAMLP2_IDP_ENTRY, \ LassoSamlp2IDPEntryClass)) typedef struct _LassoSamlp2IDPEntry LassoSamlp2IDPEntry; typedef struct _LassoSamlp2IDPEntryClass LassoSamlp2IDPEntryClass; struct _LassoSamlp2IDPEntry { LassoNode parent; /*< public >*/ /* attributes */ char *ProviderID; char *Name; char *Loc; }; struct _LassoSamlp2IDPEntryClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_samlp2_idp_entry_get_type(void); LASSO_EXPORT LassoNode* lasso_samlp2_idp_entry_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAMLP2_IDP_ENTRY_H__ */ lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/saml2_subject_confirmation.h0000644000000000000000000000013114114336625022556 xustar0029 mtime=1630649749.86643743 30 atime=1678814151.016993891 30 ctime=1678814320.549950691 lasso-2.8.2/lasso/xml/saml-2.0/saml2_subject_confirmation.h0000644000175000017500000000535514114336625026037 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAML2_SUBJECT_CONFIRMATION_H__ #define __LASSO_SAML2_SUBJECT_CONFIRMATION_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "saml2_encrypted_element.h" #include "saml2_name_id.h" #include "saml2_base_idabstract.h" #include "saml2_subject_confirmation_data.h" #define LASSO_TYPE_SAML2_SUBJECT_CONFIRMATION (lasso_saml2_subject_confirmation_get_type()) #define LASSO_SAML2_SUBJECT_CONFIRMATION(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML2_SUBJECT_CONFIRMATION, \ LassoSaml2SubjectConfirmation)) #define LASSO_SAML2_SUBJECT_CONFIRMATION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML2_SUBJECT_CONFIRMATION, \ LassoSaml2SubjectConfirmationClass)) #define LASSO_IS_SAML2_SUBJECT_CONFIRMATION(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML2_SUBJECT_CONFIRMATION)) #define LASSO_IS_SAML2_SUBJECT_CONFIRMATION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML2_SUBJECT_CONFIRMATION)) #define LASSO_SAML2_SUBJECT_CONFIRMATION_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML2_SUBJECT_CONFIRMATION, \ LassoSaml2SubjectConfirmationClass)) typedef struct _LassoSaml2SubjectConfirmation LassoSaml2SubjectConfirmation; typedef struct _LassoSaml2SubjectConfirmationClass LassoSaml2SubjectConfirmationClass; struct _LassoSaml2SubjectConfirmation { LassoNode parent; /*< public >*/ /* elements */ LassoSaml2BaseIDAbstract *BaseID; LassoSaml2NameID *NameID; LassoSaml2EncryptedElement *EncryptedID; LassoSaml2SubjectConfirmationData *SubjectConfirmationData; /* attributes */ char *Method; }; struct _LassoSaml2SubjectConfirmationClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_saml2_subject_confirmation_get_type(void); LASSO_EXPORT LassoNode* lasso_saml2_subject_confirmation_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAML2_SUBJECT_CONFIRMATION_H__ */ lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/samlp2_manage_name_id_response.h0000644000000000000000000000013214114336625023352 xustar0030 mtime=1630649749.870437474 30 atime=1678814151.020993912 30 ctime=1678814320.569950804 lasso-2.8.2/lasso/xml/saml-2.0/samlp2_manage_name_id_response.h0000644000175000017500000000504114114336625026622 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAMLP2_MANAGE_NAME_ID_RESPONSE_H__ #define __LASSO_SAMLP2_MANAGE_NAME_ID_RESPONSE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "samlp2_status_response.h" #define LASSO_TYPE_SAMLP2_MANAGE_NAME_ID_RESPONSE (lasso_samlp2_manage_name_id_response_get_type()) #define LASSO_SAMLP2_MANAGE_NAME_ID_RESPONSE(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAMLP2_MANAGE_NAME_ID_RESPONSE, \ LassoSamlp2ManageNameIDResponse)) #define LASSO_SAMLP2_MANAGE_NAME_ID_RESPONSE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAMLP2_MANAGE_NAME_ID_RESPONSE, \ LassoSamlp2ManageNameIDResponseClass)) #define LASSO_IS_SAMLP2_MANAGE_NAME_ID_RESPONSE(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAMLP2_MANAGE_NAME_ID_RESPONSE)) #define LASSO_IS_SAMLP2_MANAGE_NAME_ID_RESPONSE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAMLP2_MANAGE_NAME_ID_RESPONSE)) #define LASSO_SAMLP2_MANAGE_NAME_ID_RESPONSE_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAMLP2_MANAGE_NAME_ID_RESPONSE, \ LassoSamlp2ManageNameIDResponseClass)) typedef struct _LassoSamlp2ManageNameIDResponse LassoSamlp2ManageNameIDResponse; typedef struct _LassoSamlp2ManageNameIDResponseClass LassoSamlp2ManageNameIDResponseClass; struct _LassoSamlp2ManageNameIDResponse { LassoSamlp2StatusResponse parent; /*< public >*/ }; struct _LassoSamlp2ManageNameIDResponseClass { LassoSamlp2StatusResponseClass parent; }; LASSO_EXPORT GType lasso_samlp2_manage_name_id_response_get_type(void); LASSO_EXPORT LassoNode* lasso_samlp2_manage_name_id_response_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAMLP2_MANAGE_NAME_ID_RESPONSE_H__ */ lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/saml2_authn_statement.c0000644000000000000000000000013214114336625021546 xustar0030 mtime=1630649749.862437387 30 atime=1678814154.669014303 30 ctime=1678814320.601950986 lasso-2.8.2/lasso/xml/saml-2.0/saml2_authn_statement.c0000644000175000017500000001001314114336625025011 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "saml2_authn_statement.h" /** * SECTION:saml2_authn_statement * @short_description: <saml2:AuthnStatement> * *
Schema fragment for saml2:AuthnStatement * * * * * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "SubjectLocality", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSaml2AuthnStatement, SubjectLocality), NULL, NULL, NULL}, { "AuthnContext", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSaml2AuthnStatement, AuthnContext), NULL, NULL, NULL}, { "AuthnInstant", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSaml2AuthnStatement, AuthnInstant), NULL, NULL, NULL}, { "SessionIndex", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSaml2AuthnStatement, SessionIndex), NULL, NULL, NULL}, { "SessionNotOnOrAfter", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSaml2AuthnStatement, SessionNotOnOrAfter), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSaml2AuthnStatementClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "AuthnStatement"); lasso_node_class_set_ns(nclass, LASSO_SAML2_ASSERTION_HREF, LASSO_SAML2_ASSERTION_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_saml2_authn_statement_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSaml2AuthnStatementClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSaml2AuthnStatement), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_SAML2_STATEMENT_ABSTRACT, "LassoSaml2AuthnStatement", &this_info, 0); } return this_type; } /** * lasso_saml2_authn_statement_new: * * Creates a new #LassoSaml2AuthnStatement object. * * Return value: a newly created #LassoSaml2AuthnStatement object **/ LassoNode* lasso_saml2_authn_statement_new() { return g_object_new(LASSO_TYPE_SAML2_AUTHN_STATEMENT, NULL); } lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/samlp2_subject_query_abstract.h0000644000000000000000000000013214114336625023277 xustar0030 mtime=1630649749.870437474 30 atime=1678814151.024993934 30 ctime=1678814320.585950896 lasso-2.8.2/lasso/xml/saml-2.0/samlp2_subject_query_abstract.h0000644000175000017500000000513314114336625026551 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAMLP2_SUBJECT_QUERY_ABSTRACT_H__ #define __LASSO_SAMLP2_SUBJECT_QUERY_ABSTRACT_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "samlp2_request_abstract.h" #include "saml2_subject.h" #define LASSO_TYPE_SAMLP2_SUBJECT_QUERY_ABSTRACT (lasso_samlp2_subject_query_abstract_get_type()) #define LASSO_SAMLP2_SUBJECT_QUERY_ABSTRACT(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAMLP2_SUBJECT_QUERY_ABSTRACT, \ LassoSamlp2SubjectQueryAbstract)) #define LASSO_SAMLP2_SUBJECT_QUERY_ABSTRACT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAMLP2_SUBJECT_QUERY_ABSTRACT, \ LassoSamlp2SubjectQueryAbstractClass)) #define LASSO_IS_SAMLP2_SUBJECT_QUERY_ABSTRACT(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAMLP2_SUBJECT_QUERY_ABSTRACT)) #define LASSO_IS_SAMLP2_SUBJECT_QUERY_ABSTRACT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAMLP2_SUBJECT_QUERY_ABSTRACT)) #define LASSO_SAMLP2_SUBJECT_QUERY_ABSTRACT_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAMLP2_SUBJECT_QUERY_ABSTRACT, \ LassoSamlp2SubjectQueryAbstractClass)) typedef struct _LassoSamlp2SubjectQueryAbstract LassoSamlp2SubjectQueryAbstract; typedef struct _LassoSamlp2SubjectQueryAbstractClass LassoSamlp2SubjectQueryAbstractClass; struct _LassoSamlp2SubjectQueryAbstract { LassoSamlp2RequestAbstract parent; /*< public >*/ /* elements */ LassoSaml2Subject *Subject; }; struct _LassoSamlp2SubjectQueryAbstractClass { LassoSamlp2RequestAbstractClass parent; }; LASSO_EXPORT GType lasso_samlp2_subject_query_abstract_get_type(void); LASSO_EXPORT LassoNode* lasso_samlp2_subject_query_abstract_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAMLP2_SUBJECT_QUERY_ABSTRACT_H__ */ lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/saml2_key_info_confirmation_data.c0000644000000000000000000000013114114336625023706 xustar0029 mtime=1630649749.86643743 30 atime=1678814157.593030654 30 ctime=1678814320.613951055 lasso-2.8.2/lasso/xml/saml-2.0/saml2_key_info_confirmation_data.c0000644000175000017500000000667314114336625027173 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "saml2_key_info_confirmation_data.h" /** * SECTION:saml2_key_info_confirmation_data * @short_description: <saml2:KeyInfoConfirmationData> * *
Schema fragment for saml2:KeyInfoConfirmationData * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "KeyInfo", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSaml2KeyInfoConfirmationData, KeyInfo), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSaml2KeyInfoConfirmationDataClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "KeyInfoConfirmationData"); lasso_node_class_set_ns(nclass, LASSO_SAML2_ASSERTION_HREF, LASSO_SAML2_ASSERTION_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_saml2_key_info_confirmation_data_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSaml2KeyInfoConfirmationDataClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSaml2KeyInfoConfirmationData), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoSaml2KeyInfoConfirmationData", &this_info, 0); } return this_type; } /** * lasso_saml2_key_info_confirmation_data_new: * * Creates a new #LassoSaml2KeyInfoConfirmationData object. * * Return value: a newly created #LassoSaml2KeyInfoConfirmationData object **/ LassoNode* lasso_saml2_key_info_confirmation_data_new() { return g_object_new(LASSO_TYPE_SAML2_KEY_INFO_CONFIRMATION_DATA, NULL); } lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/samlp2_idp_list.c0000644000000000000000000000013214114336625020332 xustar0030 mtime=1630649749.870437474 30 atime=1678814168.341090809 30 ctime=1678814320.641951214 lasso-2.8.2/lasso/xml/saml-2.0/samlp2_idp_list.c0000644000175000017500000000630014114336625023601 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "samlp2_idp_list.h" /** * SECTION:samlp2_idp_list * @short_description: <samlp2:IDPList> * *
Schema fragment for samlp2:IDPList * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "IDPEntry", SNIPPET_LIST_NODES, G_STRUCT_OFFSET(LassoSamlp2IDPList, IDPEntry), NULL, NULL, NULL}, { "GetComplete", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoSamlp2IDPList, GetComplete), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSamlp2IDPListClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "IDPList"); lasso_node_class_set_ns(nclass, LASSO_SAML2_PROTOCOL_HREF, LASSO_SAML2_PROTOCOL_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_samlp2_idp_list_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSamlp2IDPListClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSamlp2IDPList), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoSamlp2IDPList", &this_info, 0); } return this_type; } /** * lasso_samlp2_idp_list_new: * * Creates a new #LassoSamlp2IDPList object. * * Return value: a newly created #LassoSamlp2IDPList object **/ LassoNode* lasso_samlp2_idp_list_new() { return g_object_new(LASSO_TYPE_SAMLP2_IDP_LIST, NULL); } lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/samlp2_logout_request.h0000644000000000000000000000013214114336625021611 xustar0030 mtime=1630649749.870437474 30 atime=1678814151.020993912 30 ctime=1678814320.565950781 lasso-2.8.2/lasso/xml/saml-2.0/samlp2_logout_request.h0000644000175000017500000000576214114336625025073 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAMLP2_LOGOUT_REQUEST_H__ #define __LASSO_SAMLP2_LOGOUT_REQUEST_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "samlp2_request_abstract.h" #include "saml2_encrypted_element.h" #include "saml2_name_id.h" #include "saml2_base_idabstract.h" #define LASSO_TYPE_SAMLP2_LOGOUT_REQUEST (lasso_samlp2_logout_request_get_type()) #define LASSO_SAMLP2_LOGOUT_REQUEST(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAMLP2_LOGOUT_REQUEST, \ LassoSamlp2LogoutRequest)) #define LASSO_SAMLP2_LOGOUT_REQUEST_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAMLP2_LOGOUT_REQUEST, \ LassoSamlp2LogoutRequestClass)) #define LASSO_IS_SAMLP2_LOGOUT_REQUEST(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAMLP2_LOGOUT_REQUEST)) #define LASSO_IS_SAMLP2_LOGOUT_REQUEST_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAMLP2_LOGOUT_REQUEST)) #define LASSO_SAMLP2_LOGOUT_REQUEST_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAMLP2_LOGOUT_REQUEST, \ LassoSamlp2LogoutRequestClass)) typedef struct _LassoSamlp2LogoutRequest LassoSamlp2LogoutRequest; typedef struct _LassoSamlp2LogoutRequestClass LassoSamlp2LogoutRequestClass; struct _LassoSamlp2LogoutRequest { LassoSamlp2RequestAbstract parent; /*< public >*/ /* elements */ LassoSaml2BaseIDAbstract *BaseID; LassoSaml2NameID *NameID; LassoSaml2EncryptedElement *EncryptedID; char *SessionIndex; /* attributes */ char *Reason; char *NotOnOrAfter; /* This field is deprecated do not use it, * kept for ABI compatibility */ /*< private >*/ G_GNUC_DEPRECATED char *relayState; }; struct _LassoSamlp2LogoutRequestClass { LassoSamlp2RequestAbstractClass parent; }; LASSO_EXPORT GType lasso_samlp2_logout_request_get_type(void); LASSO_EXPORT LassoNode* lasso_samlp2_logout_request_new(void); LASSO_EXPORT GList* lasso_samlp2_logout_request_get_session_indexes( LassoSamlp2LogoutRequest *logout_request); LASSO_EXPORT void lasso_samlp2_logout_request_set_session_indexes( LassoSamlp2LogoutRequest *logout_request, GList *session_index); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAMLP2_LOGOUT_REQUEST_H__ */ lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/saml2_subject_confirmation_data.h0000644000000000000000000000013114114336625023547 xustar0029 mtime=1630649749.86643743 30 atime=1678814151.020993912 30 ctime=1678814320.545950667 lasso-2.8.2/lasso/xml/saml-2.0/saml2_subject_confirmation_data.h0000644000175000017500000000520714114336625027024 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAML2_SUBJECT_CONFIRMATION_DATA_H__ #define __LASSO_SAML2_SUBJECT_CONFIRMATION_DATA_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "../xml.h" #define LASSO_TYPE_SAML2_SUBJECT_CONFIRMATION_DATA \ (lasso_saml2_subject_confirmation_data_get_type()) #define LASSO_SAML2_SUBJECT_CONFIRMATION_DATA(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML2_SUBJECT_CONFIRMATION_DATA, \ LassoSaml2SubjectConfirmationData)) #define LASSO_SAML2_SUBJECT_CONFIRMATION_DATA_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML2_SUBJECT_CONFIRMATION_DATA, \ LassoSaml2SubjectConfirmationDataClass)) #define LASSO_IS_SAML2_SUBJECT_CONFIRMATION_DATA(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML2_SUBJECT_CONFIRMATION_DATA)) #define LASSO_IS_SAML2_SUBJECT_CONFIRMATION_DATA_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML2_SUBJECT_CONFIRMATION_DATA)) #define LASSO_SAML2_SUBJECT_CONFIRMATION_DATA_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML2_SUBJECT_CONFIRMATION_DATA, \ LassoSaml2SubjectConfirmationDataClass)) typedef struct _LassoSaml2SubjectConfirmationData LassoSaml2SubjectConfirmationData; typedef struct _LassoSaml2SubjectConfirmationDataClass LassoSaml2SubjectConfirmationDataClass; struct _LassoSaml2SubjectConfirmationData { LassoNode parent; /*< public >*/ /* attributes */ char *NotBefore; char *NotOnOrAfter; char *Recipient; char *InResponseTo; char *Address; }; struct _LassoSaml2SubjectConfirmationDataClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_saml2_subject_confirmation_data_get_type(void); LASSO_EXPORT LassoNode* lasso_saml2_subject_confirmation_data_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAML2_SUBJECT_CONFIRMATION_DATA_H__ */ lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/saml2_xsd.h0000644000000000000000000000013114114336625017145 xustar0029 mtime=1630649749.86643743 30 atime=1678814151.020993912 30 ctime=1678814320.589950918 lasso-2.8.2/lasso/xml/saml-2.0/saml2_xsd.h0000644000175000017500000000524014114336625022417 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . * */ #ifndef __LASSO_SAML2_XSD_H__ #define __LASSO_SAML2_XSD_H__ /* SAML 2.0 Metadata XSD */ #define LASSO_SAML2_METADATA_ELEMENT_ENTITY_DESCRIPTOR "EntityDescriptor" #define LASSO_SAML2_METADATA_ELEMENT_ENTITIES_DESCRIPTOR "EntitiesDescriptor" #define LASSO_SAML2_METADATA_ELEMENT_IDP_SSO_DESCRIPTOR "IDPSSODescriptor" #define LASSO_SAML2_METADATA_ELEMENT_SP_SSO_DESCRIPTOR "SPSSODescriptor" #define LASSO_SAML2_METADATA_ELEMENT_ATTRIBUTE_AUTHORITY_DESCRIPTOR "AttributeAuthorityDescriptor" #define LASSO_SAML2_METADATA_ELEMENT_PDP_DESCRIPTOR "PDPDescriptor" #define LASSO_SAML2_METADATA_ELEMENT_AUTHN_DESCRIPTOR "AuthnAuthorityDescriptor" #define LASSO_SAML2_METADATA_ELEMENT_ORGANIZATION "Organization" #define LASSO_SAML2_METADATA_ELEMENT_KEY_DESCRIPTOR "KeyDescriptor" #define LASSO_SAML2_METADATA_ELEMENT_ASSERTION_CONSUMER_SERVICE "AssertionConsumerService" #define LASSO_SAML2_METADATA_ELEMENT_ARTIFACT_RESOLUTION_SERVICE "ArtifactResolutionService" #define LASSO_SAML2_METADATA_ATTRIBUTE_BINDING "Binding" #define LASSO_SAML2_METADATA_ATTRIBUTE_VALID_UNTIL "validUntil" #define LASSO_SAML2_METADATA_ATTRIBUTE_CACHE_DURATION "cacheDuration" #define LASSO_SAML2_METADATA_ATTRIBUTE_LOCATION "Location" #define LASSO_SAML2_METADATA_ATTRIBUTE_RESPONSE_LOCATION "ResponseLocation" #define LASSO_SAML2_METADATA_ATTRIBUTE_INDEX "index" #define LASSO_SAML2_METADATA_ATTRIBUTE_ISDEFAULT "isDefault" #define LASSO_SAML2_METADATA_ATTRIBUTE_AUTHN_REQUEST_SIGNED "AuthnRequestsSigned" #define LASSO_SAML2_METADATA_ATTRIBUTE_WANT_AUTHN_REQUEST_SIGNED "WantAuthnRequestsSigned" #define LASSO_SAML2_METADATA_ATTRIBUTE_ERROR_URL "errorURL" #define LASSO_SAML2_METADATA_ATTRIBUTE_PROTOCOL_SUPPORT_ENUMERATION "protocolSupportEnumeration" /* SAML 2.0 Assertion XSD */ #define LASSO_SAML2_ASSERTION_ELEMENT_ATTRIBUTE "Attribute" #endif /* __LASSO_SAML2_XSD_H__ */ lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/samlp2_name_id_mapping_request.c0000644000000000000000000000013214114336625023402 xustar0030 mtime=1630649749.870437474 30 atime=1678814171.625109205 30 ctime=1678814320.645951236 lasso-2.8.2/lasso/xml/saml-2.0/samlp2_name_id_mapping_request.c0000644000175000017500000000777614114336625026673 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "samlp2_name_id_mapping_request.h" /** * SECTION:samlp2_name_id_mapping_request * @short_description: <samlp2:NameIDMappingRequest> * *
Schema fragment for samlp2:NameIDMappingRequest * * * * * * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "BaseID", SNIPPET_NODE | SNIPPET_JUMP_ON_MATCH | SNIPPET_JUMP_3, G_STRUCT_OFFSET(LassoSamlp2NameIDMappingRequest, BaseID), NULL, LASSO_SAML2_ASSERTION_PREFIX, LASSO_SAML2_ASSERTION_HREF}, { "NameID", SNIPPET_NODE | SNIPPET_JUMP_ON_MATCH | SNIPPET_JUMP_2, G_STRUCT_OFFSET(LassoSamlp2NameIDMappingRequest, NameID), NULL, LASSO_SAML2_ASSERTION_PREFIX, LASSO_SAML2_ASSERTION_HREF}, { "EncryptedID", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSamlp2NameIDMappingRequest, EncryptedID), NULL, LASSO_SAML2_ASSERTION_PREFIX, LASSO_SAML2_ASSERTION_HREF}, { "NameIDPolicy", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSamlp2NameIDMappingRequest, NameIDPolicy), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSamlp2NameIDMappingRequestClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "NameIDMappingRequest"); lasso_node_class_set_ns(nclass, LASSO_SAML2_PROTOCOL_HREF, LASSO_SAML2_PROTOCOL_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_samlp2_name_id_mapping_request_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSamlp2NameIDMappingRequestClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSamlp2NameIDMappingRequest), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_SAMLP2_REQUEST_ABSTRACT, "LassoSamlp2NameIDMappingRequest", &this_info, 0); } return this_type; } /** * lasso_samlp2_name_id_mapping_request_new: * * Creates a new #LassoSamlp2NameIDMappingRequest object. * * Return value: a newly created #LassoSamlp2NameIDMappingRequest object **/ LassoNode* lasso_samlp2_name_id_mapping_request_new() { return g_object_new(LASSO_TYPE_SAMLP2_NAME_ID_MAPPING_REQUEST, NULL); } lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/samlp2_name_id_policy.c0000644000000000000000000000013114114336625021475 xustar0030 mtime=1630649749.870437474 30 atime=1678814172.653114966 29 ctime=1678814320.64995126 lasso-2.8.2/lasso/xml/saml-2.0/samlp2_name_id_policy.c0000644000175000017500000000673014114336625024754 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "samlp2_name_id_policy.h" /** * SECTION:samlp2_name_id_policy * @short_description: <samlp2:NameIDPolicy> * *
Schema fragment for samlp2:NameIDPolicy * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "Format", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSamlp2NameIDPolicy, Format), NULL, NULL, NULL}, { "SPNameQualifier", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSamlp2NameIDPolicy, SPNameQualifier), NULL, NULL, NULL}, { "AllowCreate", SNIPPET_ATTRIBUTE | SNIPPET_BOOLEAN, G_STRUCT_OFFSET(LassoSamlp2NameIDPolicy, AllowCreate), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSamlp2NameIDPolicyClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "NameIDPolicy"); lasso_node_class_set_ns(nclass, LASSO_SAML2_PROTOCOL_HREF, LASSO_SAML2_PROTOCOL_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_samlp2_name_id_policy_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSamlp2NameIDPolicyClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSamlp2NameIDPolicy), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoSamlp2NameIDPolicy", &this_info, 0); } return this_type; } /** * lasso_samlp2_name_id_policy_new: * * Creates a new #LassoSamlp2NameIDPolicy object. * * Return value: a newly created #LassoSamlp2NameIDPolicy object **/ LassoNode* lasso_samlp2_name_id_policy_new() { return g_object_new(LASSO_TYPE_SAMLP2_NAME_ID_POLICY, NULL); } lasso-2.8.2/lasso/xml/saml-2.0/PaxHeaders/samlp2_status_response.h0000644000000000000000000000013214114336625021771 xustar0030 mtime=1630649749.870437474 30 atime=1678814151.024993934 30 ctime=1678814320.581950872 lasso-2.8.2/lasso/xml/saml-2.0/samlp2_status_response.h0000644000175000017500000000537314114336625025251 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAMLP2_STATUS_RESPONSE_H__ #define __LASSO_SAMLP2_STATUS_RESPONSE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "samlp2_status.h" #include "saml2_name_id.h" #include "samlp2_extensions.h" #define LASSO_TYPE_SAMLP2_STATUS_RESPONSE (lasso_samlp2_status_response_get_type()) #define LASSO_SAMLP2_STATUS_RESPONSE(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAMLP2_STATUS_RESPONSE, \ LassoSamlp2StatusResponse)) #define LASSO_SAMLP2_STATUS_RESPONSE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAMLP2_STATUS_RESPONSE, \ LassoSamlp2StatusResponseClass)) #define LASSO_IS_SAMLP2_STATUS_RESPONSE(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAMLP2_STATUS_RESPONSE)) #define LASSO_IS_SAMLP2_STATUS_RESPONSE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAMLP2_STATUS_RESPONSE)) #define LASSO_SAMLP2_STATUS_RESPONSE_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAMLP2_STATUS_RESPONSE, \ LassoSamlp2StatusResponseClass)) typedef struct _LassoSamlp2StatusResponse LassoSamlp2StatusResponse; typedef struct _LassoSamlp2StatusResponseClass LassoSamlp2StatusResponseClass; struct _LassoSamlp2StatusResponse { LassoNode parent; /*< public >*/ /* elements */ LassoSaml2NameID *Issuer; LassoSamlp2Extensions *Extensions; LassoSamlp2Status *Status; /* attributes */ char *ID; char *InResponseTo; char *Version; char *IssueInstant; char *Destination; char *Consent; /*< private >*/ /* ds:Signature stuffs */ LassoSignatureType sign_type; LassoSignatureMethod sign_method; char *private_key_file; char *certificate_file; }; struct _LassoSamlp2StatusResponseClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_samlp2_status_response_get_type(void); LASSO_EXPORT LassoNode* lasso_samlp2_status_response_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAMLP2_STATUS_RESPONSE_H__ */ lasso-2.8.2/lasso/xml/PaxHeaders/lib_federation_termination_notification.c0000644000000000000000000000013214114336625024141 xustar0030 mtime=1630649749.858437342 30 atime=1678814193.305230839 30 ctime=1678814320.321949393 lasso-2.8.2/lasso/xml/lib_federation_termination_notification.c0000644000175000017500000001632714114336625027422 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../utils.h" #include "private.h" #include "lib_federation_termination_notification.h" #include /** * SECTION:lib_federation_termination_notification * @short_description: <lib:FederationTerminationNotification> * *
Schema fragment for lib:FederationTerminationNotification * * * * * * * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "Extension", SNIPPET_EXTENSION, G_STRUCT_OFFSET(LassoLibFederationTerminationNotification, Extension), NULL, NULL, NULL}, { "ProviderID", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoLibFederationTerminationNotification, ProviderID), NULL, NULL, NULL}, { "NameIdentifier", SNIPPET_NODE, G_STRUCT_OFFSET(LassoLibFederationTerminationNotification, NameIdentifier), NULL, LASSO_SAML_ASSERTION_PREFIX, LASSO_SAML_ASSERTION_HREF}, { "consent", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoLibFederationTerminationNotification, consent), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; static struct QuerySnippet query_snippets[] = { { "RequestID", NULL }, { "MajorVersion", NULL }, { "MinorVersion", NULL }, { "IssueInstant", NULL }, { "ProviderID", NULL }, { "NameIdentifier/NameQualifier", "NameQualifier" }, { "NameIdentifier/Format", "NameFormat" }, { "NameIdentifier/content", "NameIdentifier" }, { "consent", NULL }, { NULL, NULL } }; static LassoNodeClass *parent_class = NULL; static gchar* build_query(LassoNode *node) { LassoLibFederationTerminationNotification *request; char *s, *query; xmlChar *t; request = LASSO_LIB_FEDERATION_TERMINATION_NOTIFICATION(node); query = lasso_node_build_query_from_snippets(node); if (request->RelayState) { t = xmlURIEscapeStr((xmlChar*)request->RelayState, NULL); s = g_strdup_printf((char*)t, "%s&RelayState=%s", query, request->RelayState); xmlFree(t); lasso_release(query); query = s; } return query; } static gboolean init_from_query(LassoNode *node, char **query_fields) { LassoLibFederationTerminationNotification *request; gboolean rc; request = LASSO_LIB_FEDERATION_TERMINATION_NOTIFICATION(node); request->NameIdentifier = lasso_saml_name_identifier_new(); rc = parent_class->init_from_query(node, query_fields); if (request->ProviderID == NULL || request->NameIdentifier->content == NULL || request->NameIdentifier->Format == NULL) { lasso_node_destroy(LASSO_NODE(request->NameIdentifier)); request->NameIdentifier = NULL; return FALSE; } return rc; } /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoLibFederationTerminationNotificationClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->build_query = build_query; nclass->init_from_query = init_from_query; nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "FederationTerminationNotification"); lasso_node_class_set_ns(nclass, LASSO_LIB_HREF, LASSO_LIB_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); lasso_node_class_add_query_snippets(nclass, query_snippets); } GType lasso_lib_federation_termination_notification_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoLibFederationTerminationNotificationClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoLibFederationTerminationNotification), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_SAMLP_REQUEST_ABSTRACT, "LassoLibFederationTerminationNotification", &this_info, 0); } return this_type; } /** * lasso_lib_federation_termination_notification_new: * * Creates a new #LassoLibFederationTerminationNotification object. * * Return value: a newly created #LassoLibFederationTerminationNotification * object **/ LassoNode* lasso_lib_federation_termination_notification_new() { return g_object_new(LASSO_TYPE_LIB_FEDERATION_TERMINATION_NOTIFICATION, NULL); } /** * lasso_lib_federation_termination_notification_new_full: * @providerID: the provider ID doing the notification * @nameIdentifier: the name identifier for the federation to terminate. * @sign_type: a #LassoSignatureType value * @sign_method: a #LassoSignatureMethod value * * Creates a new #LassoLibFederationTerminationNotification object and * initializes it with the parameters. * * Return value: a newly created #LassoLibFederationTerminationNotification * object **/ LassoNode* lasso_lib_federation_termination_notification_new_full(char *providerID, LassoSamlNameIdentifier *nameIdentifier, LassoSignatureType sign_type, LassoSignatureMethod sign_method) { LassoSamlpRequestAbstract *request; request = g_object_new(LASSO_TYPE_LIB_FEDERATION_TERMINATION_NOTIFICATION, NULL); request->RequestID = lasso_build_unique_id(32); request->MajorVersion = LASSO_LIB_MAJOR_VERSION_N; request->MinorVersion = LASSO_LIB_MINOR_VERSION_N; request->IssueInstant = lasso_get_current_time(); request->sign_type = sign_type; request->sign_method = sign_method; LASSO_LIB_FEDERATION_TERMINATION_NOTIFICATION(request)->ProviderID = g_strdup(providerID); LASSO_LIB_FEDERATION_TERMINATION_NOTIFICATION(request)->NameIdentifier = g_object_ref(nameIdentifier); return LASSO_NODE(request); } lasso-2.8.2/lasso/xml/PaxHeaders/lib_logout_response.h0000644000000000000000000000013214114336625020076 xustar0030 mtime=1630649749.858437342 30 atime=1678814151.012993868 30 ctime=1678814320.245948959 lasso-2.8.2/lasso/xml/lib_logout_response.h0000644000175000017500000000475114114336625023355 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_LIB_LOGOUT_RESPONSE_H__ #define __LASSO_LIB_LOGOUT_RESPONSE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "lib_status_response.h" #include "lib_logout_request.h" #define LASSO_TYPE_LIB_LOGOUT_RESPONSE (lasso_lib_logout_response_get_type()) #define LASSO_LIB_LOGOUT_RESPONSE(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_LIB_LOGOUT_RESPONSE, LassoLibLogoutResponse)) #define LASSO_LIB_LOGOUT_RESPONSE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_LIB_LOGOUT_RESPONSE, \ LassoLibLogoutResponseClass)) #define LASSO_IS_LIB_LOGOUT_RESPONSE(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_LIB_LOGOUT_RESPONSE)) #define LASSO_IS_LIB_LOGOUT_RESPONSE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_LIB_LOGOUT_RESPONSE)) #define LASSO_LIB_LOGOUT_RESPONSE_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_LIB_LOGOUT_RESPONSE, \ LassoLibLogoutResponseClass)) typedef struct _LassoLibLogoutResponse LassoLibLogoutResponse; typedef struct _LassoLibLogoutResponseClass LassoLibLogoutResponseClass; struct _LassoLibLogoutResponse { LassoLibStatusResponse parent; }; struct _LassoLibLogoutResponseClass { LassoLibStatusResponseClass parent; }; LASSO_EXPORT GType lasso_lib_logout_response_get_type(void); LASSO_EXPORT LassoNode* lasso_lib_logout_response_new(void); LASSO_EXPORT LassoNode* lasso_lib_logout_response_new_full( char *providerID, const char *statusCodeValue, LassoLibLogoutRequest *request, LassoSignatureType sign_type, LassoSignatureMethod sign_method); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_LIB_LOGOUT_RESPONSE_H__ */ lasso-2.8.2/lasso/xml/PaxHeaders/saml_condition_abstract.c0000644000000000000000000000013214114336625020701 xustar0030 mtime=1630649749.874437517 30 atime=1678814207.417310186 30 ctime=1678814320.357949597 lasso-2.8.2/lasso/xml/saml_condition_abstract.c0000644000175000017500000000501314114336625024150 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "private.h" #include "saml_condition_abstract.h" /** * SECTION:saml_condition_abstract * @short_description: <:saml:ConditionAbstract> * *
Schema fragment for saml:ConditionAbstract * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSamlConditionAbstractClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "ConditionAbstract"); lasso_node_class_set_ns(nclass, LASSO_SAML_ASSERTION_HREF, LASSO_SAML_ASSERTION_PREFIX); } GType lasso_saml_condition_abstract_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSamlConditionAbstractClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSamlConditionAbstract), 0, NULL, NULL, }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoSamlConditionAbstract", &this_info, 0); } return this_type; } lasso-2.8.2/lasso/xml/PaxHeaders/lib_authn_request_envelope.h0000644000000000000000000000013214114336625021433 xustar0030 mtime=1630649749.858437342 30 atime=1678814151.012993868 30 ctime=1678814320.225948845 lasso-2.8.2/lasso/xml/lib_authn_request_envelope.h0000644000175000017500000000637314114336625024714 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_LIB_AUTHN_REQUEST_ENVELOPE_H__ #define __LASSO_LIB_AUTHN_REQUEST_ENVELOPE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "xml.h" #include "lib_idp_list.h" #include "lib_authn_request.h" #define LASSO_TYPE_LIB_AUTHN_REQUEST_ENVELOPE (lasso_lib_authn_request_envelope_get_type()) #define LASSO_LIB_AUTHN_REQUEST_ENVELOPE(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_LIB_AUTHN_REQUEST_ENVELOPE, \ LassoLibAuthnRequestEnvelope)) #define LASSO_LIB_AUTHN_REQUEST_ENVELOPE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_LIB_AUTHN_REQUEST_ENVELOPE, \ LassoLibAuthnRequestEnvelopeClass)) #define LASSO_IS_LIB_AUTHN_REQUEST_ENVELOPE(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_LIB_AUTHN_REQUEST_ENVELOPE)) #define LASSO_IS_LIB_AUTHN_REQUEST_ENVELOPE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_LIB_AUTHN_REQUEST_ENVELOPE)) #define LASSO_LIB_AUTHN_REQUEST_ENVELOPE_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_LIB_AUTHN_REQUEST_ENVELOPE, \ LassoLibAuthnRequestEnvelopeClass)) typedef struct _LassoLibAuthnRequestEnvelope LassoLibAuthnRequestEnvelope; typedef struct _LassoLibAuthnRequestEnvelopeClass LassoLibAuthnRequestEnvelopeClass; struct _LassoLibAuthnRequestEnvelope { LassoNode parent; /*< public >*/ /* */ GList *Extension; /* of xmlNode* */ /* */ LassoLibAuthnRequest *AuthnRequest; /* */ char *ProviderID; /* */ char *ProviderName; /* */ char *AssertionConsumerServiceURL; /* */ LassoLibIDPList *IDPList; /* */ gboolean IsPassive; }; struct _LassoLibAuthnRequestEnvelopeClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_lib_authn_request_envelope_get_type(void); LASSO_EXPORT LassoLibAuthnRequestEnvelope* lasso_lib_authn_request_envelope_new(void); LASSO_EXPORT LassoLibAuthnRequestEnvelope* lasso_lib_authn_request_envelope_new_full( LassoLibAuthnRequest *authnRequest, char *providerID, char *assertionConsumerServiceURL); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_LIB_AUTHN_REQUEST_ENVELOPE_H__ */ lasso-2.8.2/lasso/xml/PaxHeaders/saml_advice.c0000644000000000000000000000013214114336625016263 xustar0030 mtime=1630649749.870437474 30 atime=1678814201.533277087 30 ctime=1678814320.345949528 lasso-2.8.2/lasso/xml/saml_advice.c0000644000175000017500000000656514114336625021547 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "private.h" #include "saml_advice.h" #include "saml_assertion.h" /** * SECTION:saml_advice * @short_description: <saml:Advice> * *
Schema fragment for saml:Advice * * * * * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "AssertionIDReference", SNIPPET_LIST_CONTENT, G_STRUCT_OFFSET(LassoSamlAdvice, AssertionIDReference), NULL, NULL, NULL}, { "Assertion", SNIPPET_NODE | SNIPPET_JUMP_ON_MATCH | SNIPPET_BACK_1, G_STRUCT_OFFSET(LassoSamlAdvice, Assertion), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSamlAdviceClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "Advice"); lasso_node_class_set_ns(nclass, LASSO_SAML_ASSERTION_HREF, LASSO_SAML_ASSERTION_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_saml_advice_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSamlAdviceClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSamlAdvice), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoSamlAdvice", &this_info, 0); } return this_type; } /** * lasso_saml_advice_new: * * Creates a new #LassoSamlAdvice object. * * Return value: a newly created #LassoSamlAdvice **/ LassoNode* lasso_saml_advice_new() { return g_object_new(LASSO_TYPE_SAML_ADVICE, NULL); } lasso-2.8.2/lasso/xml/PaxHeaders/saml_subject_confirmation.h0000644000000000000000000000013214114336625021244 xustar0030 mtime=1630649749.874437517 30 atime=1678814151.024993934 30 ctime=1678814320.285949188 lasso-2.8.2/lasso/xml/saml_subject_confirmation.h0000644000175000017500000000524414114336625024521 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAML_SUBJECT_CONFIRMATION_H__ #define __LASSO_SAML_SUBJECT_CONFIRMATION_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "xml.h" #include "dsig/ds_key_info.h" #define LASSO_TYPE_SAML_SUBJECT_CONFIRMATION (lasso_saml_subject_confirmation_get_type()) #define LASSO_SAML_SUBJECT_CONFIRMATION(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML_SUBJECT_CONFIRMATION, \ LassoSamlSubjectConfirmation)) #define LASSO_SAML_SUBJECT_CONFIRMATION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML_SUBJECT_CONFIRMATION, \ LassoSamlSubjectConfirmationClass)) #define LASSO_IS_SAML_SUBJECT_CONFIRMATION(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML_SUBJECT_CONFIRMATION)) #define LASSO_IS_SAML_SUBJECT_CONFIRMATION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML_SUBJECT_CONFIRMATION)) #define LASSO_SAML_SUBJECT_CONFIRMATION_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML_SUBJECT_CONFIRMATION, \ LassoSamlSubjectConfirmationClass)) typedef struct _LassoSamlSubjectConfirmation LassoSamlSubjectConfirmation; typedef struct _LassoSamlSubjectConfirmationClass LassoSamlSubjectConfirmationClass; struct _LassoSamlSubjectConfirmation { LassoNode parent; /*< public >*/ /* */ GList *ConfirmationMethod; /* of strings */ /* */ char *SubjectConfirmationData; LassoDsKeyInfo *KeyInfo; }; struct _LassoSamlSubjectConfirmationClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_saml_subject_confirmation_get_type(void); LASSO_EXPORT LassoSamlSubjectConfirmation* lasso_saml_subject_confirmation_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAML_SUBJECT_CONFIRMATION_H__ */ lasso-2.8.2/lasso/xml/PaxHeaders/lib_name_identifier_mapping_response.c0000644000000000000000000000013214114336625023415 xustar0030 mtime=1630649749.858437342 30 atime=1678814196.749250191 30 ctime=1678814320.329949438 lasso-2.8.2/lasso/xml/lib_name_identifier_mapping_response.c0000644000175000017500000001323314114336625026667 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "private.h" #include "lib_name_identifier_mapping_response.h" /** * SECTION:lib_name_identifier_mapping_response * @short_description: <lib:NameIdentifierMappingResponse> * *
Schema fragment for lib:NameIdentifierMappingResponse * * * * * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "Extension", SNIPPET_EXTENSION, G_STRUCT_OFFSET(LassoLibNameIdentifierMappingResponse, Extension), NULL, NULL, NULL}, { "ProviderID", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoLibNameIdentifierMappingResponse, ProviderID), NULL, NULL, NULL}, { "Status", SNIPPET_NODE, G_STRUCT_OFFSET(LassoLibNameIdentifierMappingResponse, Status), NULL, LASSO_SAML_PROTOCOL_PREFIX, LASSO_SAML_PROTOCOL_HREF}, { "NameIdentifier", SNIPPET_NODE, G_STRUCT_OFFSET(LassoLibNameIdentifierMappingResponse, NameIdentifier), NULL, LASSO_SAML_ASSERTION_PREFIX, LASSO_SAML_ASSERTION_HREF}, {NULL, 0, 0, NULL, NULL, NULL} }; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoLibNameIdentifierMappingResponseClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "NameIdentifierMappingResponse"); lasso_node_class_set_ns(nclass, LASSO_LIB_HREF, LASSO_LIB_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_lib_name_identifier_mapping_response_get_type() { static GType name_identifier_mapping_response_type = 0; if (!name_identifier_mapping_response_type) { static const GTypeInfo name_identifier_mapping_response_info = { sizeof (LassoLibNameIdentifierMappingResponseClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoLibNameIdentifierMappingResponse), 0, NULL, NULL }; name_identifier_mapping_response_type = g_type_register_static (LASSO_TYPE_SAMLP_RESPONSE_ABSTRACT, "LassoLibNameIdentifierMappingResponse", &name_identifier_mapping_response_info, 0); } return name_identifier_mapping_response_type; } /** * lasso_lib_name_identifier_mapping_response_new: * * Creates a new #LassoLibNameIdentifierMappingResponse object. * * Return value: a newly created #LassoLibNameIdentifierMappingResponse object **/ LassoNode* lasso_lib_name_identifier_mapping_response_new() { return g_object_new(LASSO_TYPE_LIB_NAME_IDENTIFIER_MAPPING_RESPONSE, NULL); } /** * lasso_lib_name_identifier_mapping_response_new_full: * @providerID: the providerID of the responder * @statusCodeValue: a response status code * @request: the request which is asnwered by this response * @sign_type: a #LassoSignatureType value * @sign_method: a #LassoSignatureMethod value * * Creates a new #LassoLibNameIdentifierMappingResponse object and initializes * it with the parameters. * * Return value: a newly created #LassoLibNameIdentifierMappingResponse object **/ LassoNode* lasso_lib_name_identifier_mapping_response_new_full(char *providerID, const char *statusCodeValue, LassoLibNameIdentifierMappingRequest *request, LassoSignatureType sign_type, LassoSignatureMethod sign_method) { LassoLibNameIdentifierMappingResponse *response; response = g_object_new(LASSO_TYPE_LIB_NAME_IDENTIFIER_MAPPING_RESPONSE, NULL); lasso_samlp_response_abstract_fill( LASSO_SAMLP_RESPONSE_ABSTRACT(response), LASSO_SAMLP_REQUEST_ABSTRACT(request)->RequestID, request->ProviderID); LASSO_SAMLP_RESPONSE_ABSTRACT(response)->sign_type = sign_type; LASSO_SAMLP_RESPONSE_ABSTRACT(response)->sign_method = sign_method; response->ProviderID = g_strdup(providerID); response->Status = lasso_samlp_status_new(); response->Status->StatusCode = lasso_samlp_status_code_new(); response->Status->StatusCode->Value = g_strdup(statusCodeValue); return LASSO_NODE(response); } lasso-2.8.2/lasso/xml/PaxHeaders/saml_subject_statement_abstract.c0000644000000000000000000000013214114336625022436 xustar0030 mtime=1630649749.874437517 30 atime=1678814211.457332925 30 ctime=1678814320.369949666 lasso-2.8.2/lasso/xml/saml_subject_statement_abstract.c0000644000175000017500000000601114114336625025704 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "private.h" #include "saml_subject_statement_abstract.h" /** * SECTION:saml_subject_statement_abstract * @short_description: <saml:SubjectStatementAbstractType> * *
Schema fragment for saml:SubjectStatementAbstractType * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "Subject", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSamlSubjectStatementAbstract, Subject), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSamlSubjectStatementAbstractClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "SubjectStatementAbstract"); lasso_node_class_set_ns(nclass, LASSO_SAML_ASSERTION_HREF, LASSO_SAML_ASSERTION_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_saml_subject_statement_abstract_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSamlSubjectStatementAbstractClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSamlSubjectStatementAbstract), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_SAML_STATEMENT_ABSTRACT, "LassoSamlSubjectStatementAbstract", &this_info, 0); } return this_type; } lasso-2.8.2/lasso/xml/PaxHeaders/lib_authn_request.h0000644000000000000000000000013214114336625017536 xustar0030 mtime=1630649749.854437299 30 atime=1678814151.012993868 30 ctime=1678814320.225948845 lasso-2.8.2/lasso/xml/lib_authn_request.h0000644000175000017500000001023614114336625023010 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_LIB_AUTHN_REQUEST_H__ #define __LASSO_LIB_AUTHN_REQUEST_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "samlp_request_abstract.h" #include "lib_request_authn_context.h" #include "lib_scoping.h" #define LASSO_TYPE_LIB_AUTHN_REQUEST (lasso_lib_authn_request_get_type()) #define LASSO_LIB_AUTHN_REQUEST(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_LIB_AUTHN_REQUEST, LassoLibAuthnRequest)) #define LASSO_LIB_AUTHN_REQUEST_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_LIB_AUTHN_REQUEST, LassoLibAuthnRequestClass)) #define LASSO_IS_LIB_AUTHN_REQUEST(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_LIB_AUTHN_REQUEST)) #define LASSO_IS_LIB_AUTHN_REQUEST_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_LIB_AUTHN_REQUEST)) #define LASSO_LIB_AUTHN_REQUEST_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_LIB_AUTHN_REQUEST, LassoLibAuthnRequestClass)) typedef struct _LassoLibAuthnRequest LassoLibAuthnRequest; typedef struct _LassoLibAuthnRequestClass LassoLibAuthnRequestClass; /** * LassoLibAuthnRequest: * * @ProviderID isthe service provider identifier, this field will often be * filled with lasso_login_init_authn_request() * * @nameIDPolicy tells the identity provider about the policy to use for * federation; it must be one of #LASSO_LIB_NAMEID_POLICY_TYPE_NONE, * #LASSO_LIB_NAMEID_POLICY_TYPE_ONE_TIME, * #LASSO_LIB_NAMEID_POLICY_TYPE_FEDERATED or * #LASSO_LIB_NAMEID_POLICY_TYPE_ANY. * * @IsPassive; if %TRUE (default) it tells the identity provider not to * interact with the user. * * @ForceAuthn; only used if @IsPassive is %FALSE, it tells the identity * provider to force authentication of the user even when already * authenticated. * * @ProtocolProfile is the Single Sign-On and Federation profile to adopt; * either #LASSO_LIB_PROTOCOL_PROFILE_BRWS_ART (which is the default value) * or #LASSO_LIB_PROTOCOL_PROFILE_BRWS_POST. * */ struct _LassoLibAuthnRequest { LassoSamlpRequestAbstract parent; /*< public >*/ /* */ GList *Extension; /* of xmlNode* */ /* */ char *ProviderID; /* */ char *AffiliationID; /* */ char *NameIDPolicy; /* */ gboolean ForceAuthn; /* */ gboolean IsPassive; /* */ char *ProtocolProfile; /* */ char *AssertionConsumerServiceID; /* */ LassoLibRequestAuthnContext *RequestAuthnContext; /* */ char *RelayState; /* */ LassoLibScoping *Scoping; /* */ char *consent; }; struct _LassoLibAuthnRequestClass { LassoSamlpRequestAbstractClass parent; }; LASSO_EXPORT GType lasso_lib_authn_request_get_type(void); LASSO_EXPORT LassoLibAuthnRequest* lasso_lib_authn_request_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_LIB_AUTHN_REQUEST_H__ */ lasso-2.8.2/lasso/xml/PaxHeaders/lib_status_response.c0000644000000000000000000000013214114336625020103 xustar0030 mtime=1630649749.858437342 30 atime=1678814199.101263412 30 ctime=1678814320.337949483 lasso-2.8.2/lasso/xml/lib_status_response.c0000644000175000017500000001170214114336625023354 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "private.h" #include "lib_status_response.h" #include #include "../utils.h" /** * SECTION:lib_status_response * @short_description: <lib:StatusResponse> * *
Schema fragment for lib:StatusResponse * * * * * * * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "Extension", SNIPPET_EXTENSION, G_STRUCT_OFFSET(LassoLibStatusResponse, Extension), NULL, NULL, NULL}, { "ProviderID", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoLibStatusResponse, ProviderID), NULL, NULL, NULL}, { "Status", SNIPPET_NODE, G_STRUCT_OFFSET(LassoLibStatusResponse, Status), NULL, LASSO_SAML_PROTOCOL_PREFIX, LASSO_SAML_PROTOCOL_HREF}, { "RelayState", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoLibStatusResponse, RelayState), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; static struct QuerySnippet query_snippets[] = { { "ResponseID", NULL }, { "MajorVersion", NULL }, { "MinorVersion", NULL }, { "IssueInstant", NULL }, { "Recipient", NULL }, { "ProviderID", NULL }, { "Status", "Value" }, { "RelayState", NULL }, { "InResponseTo", NULL }, { NULL, NULL } }; static LassoNodeClass *parent_class = NULL; static gboolean init_from_query(LassoNode *node, char **query_fields) { LassoLibStatusResponse *response = LASSO_LIB_STATUS_RESPONSE(node); gboolean rc; response->Status = lasso_samlp_status_new(); rc = parent_class->init_from_query(node, query_fields); if (response->ProviderID == NULL || response->Status == NULL) return FALSE; if (response->Status->StatusCode) { LassoSamlpStatusCode *code = response->Status->StatusCode; if (code->Value && strchr(code->Value, ':') == NULL) { lasso_assign_string(code->Value, g_strdup_printf("samlp:%s", code->Value)); } } return rc; } /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoLibStatusResponseClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->init_from_query = init_from_query; nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "StatusResponse"); lasso_node_class_set_ns(nclass, LASSO_LIB_HREF, LASSO_LIB_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); lasso_node_class_add_query_snippets(nclass, query_snippets); } GType lasso_lib_status_response_get_type() { static GType status_response_type = 0; if (!status_response_type) { static const GTypeInfo status_response_info = { sizeof (LassoLibStatusResponseClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoLibStatusResponse), 0, NULL, NULL }; status_response_type = g_type_register_static(LASSO_TYPE_SAMLP_RESPONSE_ABSTRACT, "LassoLibStatusResponse", &status_response_info, 0); } return status_response_type; } /** * lasso_lib_status_response_new: * * Creates a new #LassoLibStatusResponse object. * * Return value: a newly created #LassoLibStatusResponse object **/ LassoNode* lasso_lib_status_response_new() { return g_object_new(LASSO_TYPE_LIB_STATUS_RESPONSE, NULL); } lasso-2.8.2/lasso/xml/PaxHeaders/xml_idff.h0000644000000000000000000000013214114336625015611 xustar0030 mtime=1630649749.886437648 30 atime=1678814151.028993957 30 ctime=1678814320.381949733 lasso-2.8.2/lasso/xml/xml_idff.h0000644000175000017500000000531314114336625021063 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_XML_IDFF_H__ #define __LASSO_XML_IDFF_H__ #include "xml.h" #include "dsig/ds_key_info.h" #include "dsig/ds_key_value.h" #include "dsig/ds_rsa_key_value.h" #include "dsig/ds_x509_data.h" #include "lib_assertion.h" #include "lib_authentication_statement.h" #include "lib_authn_context.h" #include "lib_authn_request_envelope.h" #include "lib_authn_request.h" #include "lib_authn_response_envelope.h" #include "lib_authn_response.h" #include "lib_federation_termination_notification.h" #include "lib_idp_entries.h" #include "lib_idp_entry.h" #include "lib_idp_list.h" #include "lib_logout_request.h" #include "lib_logout_response.h" #include "lib_name_identifier_mapping_request.h" #include "lib_name_identifier_mapping_response.h" #include "lib_register_name_identifier_request.h" #include "lib_register_name_identifier_response.h" #include "lib_request_authn_context.h" #include "lib_scoping.h" #include "lib_status_response.h" #include "lib_subject.h" #include "misc_text_node.h" #include "saml_advice.h" #include "saml_assertion.h" #include "saml_attribute_designator.h" #include "saml_attribute.h" #include "saml_attribute_statement.h" #include "saml_attribute_value.h" #include "saml_audience_restriction_condition.h" #include "saml_authentication_statement.h" #include "saml_authority_binding.h" #include "saml_condition_abstract.h" #include "saml_conditions.h" #include "saml_name_identifier.h" #include "samlp_request_abstract.h" #include "samlp_request.h" #include "samlp_response_abstract.h" #include "samlp_response.h" #include "samlp_status_code.h" #include "samlp_status.h" #include "saml_statement_abstract.h" #include "saml_subject_confirmation.h" #include "saml_subject.h" #include "saml_subject_locality.h" #include "saml_subject_statement_abstract.h" #include "saml_subject_statement.h" #include "strings.h" #include "xml_enc.h" #endif /* __LASSO_XML_IDFF_H__ */ lasso-2.8.2/lasso/xml/PaxHeaders/lib_status_response.h0000644000000000000000000000013214114336625020110 xustar0030 mtime=1630649749.858437342 30 atime=1678814151.016993891 30 ctime=1678814320.257949028 lasso-2.8.2/lasso/xml/lib_status_response.h0000644000175000017500000000513614114336625023365 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_LIB_STATUS_RESPONSE_H__ #define __LASSO_LIB_STATUS_RESPONSE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "samlp_response_abstract.h" #include "samlp_status.h" #define LASSO_TYPE_LIB_STATUS_RESPONSE (lasso_lib_status_response_get_type()) #define LASSO_LIB_STATUS_RESPONSE(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_LIB_STATUS_RESPONSE, LassoLibStatusResponse)) #define LASSO_LIB_STATUS_RESPONSE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_LIB_STATUS_RESPONSE, \ LassoLibStatusResponseClass)) #define LASSO_IS_LIB_STATUS_RESPONSE(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_LIB_STATUS_RESPONSE)) #define LASSO_IS_LIB_STATUS_RESPONSE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_LIB_STATUS_RESPONSE)) #define LASSO_LIB_STATUS_RESPONSE_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_LIB_STATUS_RESPONSE, \ LassoLibStatusResponseClass)) typedef struct _LassoLibStatusResponse LassoLibStatusResponse; typedef struct _LassoLibStatusResponseClass LassoLibStatusResponseClass; struct _LassoLibStatusResponse { LassoSamlpResponseAbstract parent; /*< public >*/ /* */ GList *Extension; /* of xmlNode* */ /* */ char *ProviderID; /* */ LassoSamlpStatus *Status; /* */ char *RelayState; }; struct _LassoLibStatusResponseClass { LassoSamlpResponseAbstractClass parent; }; LASSO_EXPORT GType lasso_lib_status_response_get_type(void); LASSO_EXPORT LassoNode* lasso_lib_status_response_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_LIB_STATUS_RESPONSE_H__ */ lasso-2.8.2/lasso/xml/PaxHeaders/Makefile.am0000644000000000000000000000013214335172043015701 xustar0030 mtime=1668609059.485462269 30 atime=1678814114.840792228 30 ctime=1678814320.213948778 lasso-2.8.2/lasso/xml/Makefile.am0000644000175000017500000000574714335172043021166 0ustar00bdauvergnebdauvergne00000000000000MAINTAINERCLEANFILES = Makefile.in SUBDIRS = saml-2.0 soap-1.1 dsig ecp liblassoincludedir = $(includedir)/lasso/xml AM_CPPFLAGS = \ -I$(top_builddir) \ -I$(top_srcdir) \ $(LASSO_CORE_CFLAGS) \ -DG_LOG_DOMAIN=\"lasso\" noinst_LTLIBRARIES = liblasso-xml.la liblasso_xml_la_SOURCES = \ tools.c \ xml.c \ lib_assertion.c \ lib_authentication_statement.c \ lib_authn_context.c \ lib_authn_request.c \ lib_authn_request_envelope.c \ lib_authn_response.c \ lib_authn_response_envelope.c \ lib_federation_termination_notification.c \ lib_idp_entries.c \ lib_idp_entry.c \ lib_idp_list.c \ lib_logout_request.c \ lib_logout_response.c \ lib_name_identifier_mapping_request.c \ lib_name_identifier_mapping_response.c \ lib_register_name_identifier_request.c \ lib_register_name_identifier_response.c \ lib_request_authn_context.c \ lib_scoping.c \ lib_status_response.c \ lib_subject.c \ misc_text_node.c \ paos_request.c \ paos_response.c \ saml_advice.c \ saml_assertion.c \ saml_attribute.c \ saml_attribute_designator.c \ saml_attribute_statement.c \ saml_attribute_value.c \ saml_audience_restriction_condition.c \ saml_authentication_statement.c \ saml_authority_binding.c \ saml_condition_abstract.c \ saml_conditions.c \ saml_name_identifier.c \ saml_statement_abstract.c \ saml_subject.c \ saml_subject_confirmation.c \ saml_subject_locality.c \ saml_subject_statement.c \ saml_subject_statement_abstract.c \ samlp_request.c \ samlp_request_abstract.c \ samlp_response.c \ samlp_response_abstract.c \ samlp_status.c \ samlp_status_code.c liblassoinclude_HEADERS = \ strings.h \ xml.h \ lib_assertion.h \ lib_authentication_statement.h \ lib_authn_context.h \ lib_authn_request.h \ lib_authn_request_envelope.h \ lib_authn_response.h \ lib_authn_response_envelope.h \ lib_federation_termination_notification.h \ lib_idp_entries.h \ lib_idp_entry.h \ lib_idp_list.h \ lib_logout_request.h \ lib_logout_response.h \ lib_name_identifier_mapping_request.h \ lib_name_identifier_mapping_response.h \ lib_register_name_identifier_request.h \ lib_register_name_identifier_response.h \ lib_request_authn_context.h \ lib_scoping.h \ lib_status_response.h \ lib_subject.h \ misc_text_node.h \ paos_request.h \ paos_response.h \ saml_advice.h \ saml_assertion.h \ saml_attribute.h \ saml_attribute_designator.h \ saml_attribute_statement.h \ saml_attribute_value.h \ saml_audience_restriction_condition.h \ saml_authentication_statement.h \ saml_authority_binding.h \ saml_condition_abstract.h \ saml_conditions.h \ saml_name_identifier.h \ saml_statement_abstract.h \ saml_subject.h \ saml_subject_confirmation.h \ saml_subject_locality.h \ saml_subject_statement.h \ saml_subject_statement_abstract.h \ samlp_request.h \ samlp_request_abstract.h \ samlp_response.h \ samlp_response_abstract.h \ samlp_status.h \ samlp_status_code.h \ xml_enc.h \ tools.h lasso_private_h_sources = \ private.h EXTRA_DIST = $(lasso_private_h_sources) xml_idff.h lasso-2.8.2/lasso/xml/PaxHeaders/saml_subject_statement.h0000644000000000000000000000013114114336625020557 xustar0030 mtime=1630649749.874437517 30 atime=1678814151.024993934 29 ctime=1678814320.28994921 lasso-2.8.2/lasso/xml/saml_subject_statement.h0000644000175000017500000000455114114336625024035 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAML_SUBJECT_STATEMENT_H__ #define __LASSO_SAML_SUBJECT_STATEMENT_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "saml_subject_statement_abstract.h" #define LASSO_TYPE_SAML_SUBJECT_STATEMENT (lasso_saml_subject_statement_get_type()) #define LASSO_SAML_SUBJECT_STATEMENT(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML_SUBJECT_STATEMENT, \ LassoSamlSubjectStatement)) #define LASSO_SAML_SUBJECT_STATEMENT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML_SUBJECT_STATEMENT, \ LassoSamlSubjectStatementClass)) #define LASSO_IS_SAML_SUBJECT_STATEMENT(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML_SUBJECT_STATEMENT)) #define LASSO_IS_SAML_SUBJECT_STATEMENT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML_SUBJECT_STATEMENT)) #define LASSO_SAML_SUBJECT_STATEMENT_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML_SUBJECT_STATEMENT, \ LassoSamlSubjectStatementClass)) typedef struct _LassoSamlSubjectStatement LassoSamlSubjectStatement; typedef struct _LassoSamlSubjectStatementClass LassoSamlSubjectStatementClass; struct _LassoSamlSubjectStatement { LassoSamlSubjectStatementAbstract parent; }; struct _LassoSamlSubjectStatementClass { LassoSamlStatementAbstractClass parent; }; LASSO_EXPORT GType lasso_saml_subject_statement_get_type(void); LASSO_EXPORT LassoNode* lasso_saml_subject_statement_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAML_SUBJECT_STATEMENT_H__ */ lasso-2.8.2/lasso/xml/PaxHeaders/lib_register_name_identifier_request.h0000644000000000000000000000013214114336625023445 xustar0030 mtime=1630649749.858437342 30 atime=1678814151.012993868 30 ctime=1678814320.249948983 lasso-2.8.2/lasso/xml/lib_register_name_identifier_request.h0000644000175000017500000000712614114336625026723 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_LIB_REGISTER_NAME_IDENTIFIER_REQUEST_H__ #define __LASSO_LIB_REGISTER_NAME_IDENTIFIER_REQUEST_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "samlp_request_abstract.h" #include "saml_name_identifier.h" #define LASSO_TYPE_LIB_REGISTER_NAME_IDENTIFIER_REQUEST \ (lasso_lib_register_name_identifier_request_get_type()) #define LASSO_LIB_REGISTER_NAME_IDENTIFIER_REQUEST(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_LIB_REGISTER_NAME_IDENTIFIER_REQUEST, \ LassoLibRegisterNameIdentifierRequest)) #define LASSO_LIB_REGISTER_NAME_IDENTIFIER_REQUEST_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_LIB_REGISTER_NAME_IDENTIFIER_REQUEST, \ LassoLibRegisterNameIdentifierRequestClass)) #define LASSO_IS_LIB_REGISTER_NAME_IDENTIFIER_REQUEST(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_LIB_REGISTER_NAME_IDENTIFIER_REQUEST)) #define LASSO_IS_LIB_REGISTER_NAME_IDENTIFIER_REQUEST_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_LIB_REGISTER_NAME_IDENTIFIER_REQUEST)) #define LASSO_LIB_REGISTER_NAME_IDENTIFIER_REQUEST_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_LIB_REGISTER_NAME_IDENTIFIER_REQUEST, \ LassoLibRegisterNameIdentifierRequestClass)) typedef struct _LassoLibRegisterNameIdentifierRequest LassoLibRegisterNameIdentifierRequest; typedef struct _LassoLibRegisterNameIdentifierRequestClass \ LassoLibRegisterNameIdentifierRequestClass; struct _LassoLibRegisterNameIdentifierRequest { LassoSamlpRequestAbstract parent; /*< public >*/ /* */ GList *Extension; /* of xmlNode* */ /* */ char *ProviderID; /* */ LassoSamlNameIdentifier *IDPProvidedNameIdentifier; /* */ LassoSamlNameIdentifier *SPProvidedNameIdentifier; /* */ LassoSamlNameIdentifier *OldProvidedNameIdentifier; /* */ char *RelayState; }; struct _LassoLibRegisterNameIdentifierRequestClass { LassoSamlpRequestAbstractClass parent; }; LASSO_EXPORT GType lasso_lib_register_name_identifier_request_get_type(void); LASSO_EXPORT LassoNode* lasso_lib_register_name_identifier_request_new(void); LASSO_EXPORT LassoNode* lasso_lib_register_name_identifier_request_new_full( const char *providerID, LassoSamlNameIdentifier *idpNameIdentifier, LassoSamlNameIdentifier *spNameIdentifier, LassoSamlNameIdentifier *oldNameIdentifier, LassoSignatureType sign_type, LassoSignatureMethod sign_method); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_LIB_REGISTER_NAME_IDENTIFIER_REQUEST_H__ */ lasso-2.8.2/lasso/xml/PaxHeaders/samlp_response_abstract.c0000644000000000000000000000013214364261206020730 xustar0030 mtime=1674666630.766769242 30 atime=1678814213.617345087 30 ctime=1678814320.373949688 lasso-2.8.2/lasso/xml/samlp_response_abstract.c0000644000175000017500000001311214364261206024176 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "private.h" #include "../utils.h" #include #include #include "samlp_response_abstract.h" /** * SECTION:samlp_response_abstract * @short_description: <samlp:ResponseAbstractType> * *
Schema fragment for samlp:ResponseAbstractType * * * * * * * * * * * * * From oasis-sstc-saml-schema-assertion-1.0.xsd: * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "Signature", SNIPPET_SIGNATURE, G_STRUCT_OFFSET(LassoSamlpResponseAbstract, ResponseID), NULL, LASSO_DS_PREFIX, LASSO_DS_HREF}, { "ResponseID", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSamlpResponseAbstract, ResponseID), NULL, NULL, NULL}, { "MajorVersion", SNIPPET_ATTRIBUTE | SNIPPET_INTEGER, G_STRUCT_OFFSET(LassoSamlpResponseAbstract, MajorVersion), NULL, NULL, NULL}, { "MinorVersion", SNIPPET_ATTRIBUTE | SNIPPET_INTEGER, G_STRUCT_OFFSET(LassoSamlpResponseAbstract, MinorVersion), NULL, NULL, NULL}, { "IssueInstant", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSamlpResponseAbstract, IssueInstant), NULL, NULL, NULL}, { "InResponseTo", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSamlpResponseAbstract, InResponseTo), NULL, NULL, NULL}, { "Recipient", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSamlpResponseAbstract, Recipient), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void instance_init(LassoSamlpResponseAbstract *node, G_GNUC_UNUSED void *unused) { node->sign_type = LASSO_SIGNATURE_TYPE_NONE; } static void class_init(LassoSamlpResponseAbstractClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "ResponseAbstract"); lasso_node_class_set_ns(nclass, LASSO_SAML_PROTOCOL_HREF, LASSO_SAML_PROTOCOL_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); nclass->node_data->id_attribute_name = "ResponseID"; nclass->node_data->id_attribute_offset = G_STRUCT_OFFSET(LassoSamlpResponseAbstract, ResponseID); nclass->node_data->sign_type_offset = G_STRUCT_OFFSET(LassoSamlpResponseAbstract, sign_type); nclass->node_data->sign_method_offset = G_STRUCT_OFFSET(LassoSamlpResponseAbstract, sign_method); nclass->node_data->private_key_file_offset = G_STRUCT_OFFSET(LassoSamlpResponseAbstract, private_key_file); nclass->node_data->certificate_file_offset = G_STRUCT_OFFSET(LassoSamlpResponseAbstract, certificate_file); } GType lasso_samlp_response_abstract_get_type() { static GType response_abstract_type = 0; if (!response_abstract_type) { static const GTypeInfo response_abstract_info = { sizeof (LassoSamlpResponseAbstractClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSamlpResponseAbstract), 0, (GInstanceInitFunc) instance_init, NULL }; response_abstract_type = g_type_register_static(LASSO_TYPE_NODE , "LassoSamlpResponseAbstract", &response_abstract_info, 0); } return response_abstract_type; } void lasso_samlp_response_abstract_fill(LassoSamlpResponseAbstract *response, const char *InResponseTo, const char *Recipient) { response->ResponseID = lasso_build_unique_id(32); response->MajorVersion = LASSO_LIB_MAJOR_VERSION_N; response->MinorVersion = LASSO_LIB_MINOR_VERSION_N; response->IssueInstant = lasso_get_current_time(); response->InResponseTo = g_strdup(InResponseTo); response->Recipient = g_strdup(Recipient); } lasso-2.8.2/lasso/xml/PaxHeaders/saml_name_identifier.c0000644000000000000000000000013114114336625020151 xustar0030 mtime=1630649749.874437517 30 atime=1678814208.525316421 29 ctime=1678814320.36194962 lasso-2.8.2/lasso/xml/saml_name_identifier.c0000644000175000017500000001016214114336625023422 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "private.h" #include "saml_name_identifier.h" #include /** * SECTION:saml_name_identifier * @short_description: <saml:NameIdentifier> * *
Schema fragment for saml:NameIdentifier * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "NameQualifier", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSamlNameIdentifier, NameQualifier), NULL, NULL, NULL}, { "Format", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSamlNameIdentifier, Format), NULL, NULL, NULL}, { "content", SNIPPET_TEXT_CHILD, G_STRUCT_OFFSET(LassoSamlNameIdentifier, content), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSamlNameIdentifierClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "NameIdentifier"); lasso_node_class_set_ns(nclass, LASSO_SAML_ASSERTION_HREF, LASSO_SAML_ASSERTION_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_saml_name_identifier_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSamlNameIdentifierClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSamlNameIdentifier), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoSamlNameIdentifier", &this_info, 0); } return this_type; } gboolean lasso_saml_name_identifier_equals(LassoSamlNameIdentifier *a, LassoSamlNameIdentifier *b) { if (a == NULL || b == NULL) return FALSE; if (! LASSO_IS_SAML_NAME_IDENTIFIER(a) && ! LASSO_IS_SAML_NAME_IDENTIFIER(b)) { return FALSE; } return lasso_strisequal(a->NameQualifier, b->NameQualifier) && lasso_strisequal(a->Format, b->Format) && lasso_strisequal(a->content, b->content); } /** * lasso_saml_name_identifier_new: * * Creates a new #LassoSamlNameIdentifier object. * * Return value: a newly created #LassoSamlNameIdentifier object **/ LassoSamlNameIdentifier* lasso_saml_name_identifier_new() { return g_object_new(LASSO_TYPE_SAML_NAME_IDENTIFIER, NULL); } LassoSamlNameIdentifier* lasso_saml_name_identifier_new_from_xmlNode(xmlNode *xmlnode) { LassoNode *node; node = g_object_new(LASSO_TYPE_SAML_NAME_IDENTIFIER, NULL); lasso_node_init_from_xml(node, xmlnode); return LASSO_SAML_NAME_IDENTIFIER(node); } lasso-2.8.2/lasso/xml/PaxHeaders/Makefile.in0000644000000000000000000000013214404125673015716 xustar0030 mtime=1678814139.736930902 30 atime=1678814149.896987632 30 ctime=1678814320.305949301 lasso-2.8.2/lasso/xml/Makefile.in0000644000175000017500000012636414404125673021202 0ustar00bdauvergnebdauvergne00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = lasso/xml ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ac_check_class.m4 \ $(top_srcdir)/m4/ac_check_classpath.m4 \ $(top_srcdir)/m4/ac_check_junit.m4 \ $(top_srcdir)/m4/ac_prog_jar.m4 \ $(top_srcdir)/m4/ac_prog_java.m4 \ $(top_srcdir)/m4/ac_prog_java_works.m4 \ $(top_srcdir)/m4/ac_prog_javac.m4 \ $(top_srcdir)/m4/ac_prog_javac_works.m4 \ $(top_srcdir)/m4/ac_prog_javah.m4 \ $(top_srcdir)/m4/ac_try_compile_java.m4 \ $(top_srcdir)/m4/as-compiler-flag.m4 \ $(top_srcdir)/m4/dps_java_check_class.m4 \ $(top_srcdir)/m4/dps_xtra_classpath.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(liblassoinclude_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h \ $(top_builddir)/lasso/lasso_config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) liblasso_xml_la_LIBADD = am_liblasso_xml_la_OBJECTS = tools.lo xml.lo lib_assertion.lo \ lib_authentication_statement.lo lib_authn_context.lo \ lib_authn_request.lo lib_authn_request_envelope.lo \ lib_authn_response.lo lib_authn_response_envelope.lo \ lib_federation_termination_notification.lo lib_idp_entries.lo \ lib_idp_entry.lo lib_idp_list.lo lib_logout_request.lo \ lib_logout_response.lo lib_name_identifier_mapping_request.lo \ lib_name_identifier_mapping_response.lo \ lib_register_name_identifier_request.lo \ lib_register_name_identifier_response.lo \ lib_request_authn_context.lo lib_scoping.lo \ lib_status_response.lo lib_subject.lo misc_text_node.lo \ paos_request.lo paos_response.lo saml_advice.lo \ saml_assertion.lo saml_attribute.lo \ saml_attribute_designator.lo saml_attribute_statement.lo \ saml_attribute_value.lo saml_audience_restriction_condition.lo \ saml_authentication_statement.lo saml_authority_binding.lo \ saml_condition_abstract.lo saml_conditions.lo \ saml_name_identifier.lo saml_statement_abstract.lo \ saml_subject.lo saml_subject_confirmation.lo \ saml_subject_locality.lo saml_subject_statement.lo \ saml_subject_statement_abstract.lo samlp_request.lo \ samlp_request_abstract.lo samlp_response.lo \ samlp_response_abstract.lo samlp_status.lo \ samlp_status_code.lo liblasso_xml_la_OBJECTS = $(am_liblasso_xml_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -I$(top_builddir)/lasso depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/lib_assertion.Plo \ ./$(DEPDIR)/lib_authentication_statement.Plo \ ./$(DEPDIR)/lib_authn_context.Plo \ ./$(DEPDIR)/lib_authn_request.Plo \ ./$(DEPDIR)/lib_authn_request_envelope.Plo \ ./$(DEPDIR)/lib_authn_response.Plo \ ./$(DEPDIR)/lib_authn_response_envelope.Plo \ ./$(DEPDIR)/lib_federation_termination_notification.Plo \ ./$(DEPDIR)/lib_idp_entries.Plo ./$(DEPDIR)/lib_idp_entry.Plo \ ./$(DEPDIR)/lib_idp_list.Plo \ ./$(DEPDIR)/lib_logout_request.Plo \ ./$(DEPDIR)/lib_logout_response.Plo \ ./$(DEPDIR)/lib_name_identifier_mapping_request.Plo \ ./$(DEPDIR)/lib_name_identifier_mapping_response.Plo \ ./$(DEPDIR)/lib_register_name_identifier_request.Plo \ ./$(DEPDIR)/lib_register_name_identifier_response.Plo \ ./$(DEPDIR)/lib_request_authn_context.Plo \ ./$(DEPDIR)/lib_scoping.Plo \ ./$(DEPDIR)/lib_status_response.Plo \ ./$(DEPDIR)/lib_subject.Plo ./$(DEPDIR)/misc_text_node.Plo \ ./$(DEPDIR)/paos_request.Plo ./$(DEPDIR)/paos_response.Plo \ ./$(DEPDIR)/saml_advice.Plo ./$(DEPDIR)/saml_assertion.Plo \ ./$(DEPDIR)/saml_attribute.Plo \ ./$(DEPDIR)/saml_attribute_designator.Plo \ ./$(DEPDIR)/saml_attribute_statement.Plo \ ./$(DEPDIR)/saml_attribute_value.Plo \ ./$(DEPDIR)/saml_audience_restriction_condition.Plo \ ./$(DEPDIR)/saml_authentication_statement.Plo \ ./$(DEPDIR)/saml_authority_binding.Plo \ ./$(DEPDIR)/saml_condition_abstract.Plo \ ./$(DEPDIR)/saml_conditions.Plo \ ./$(DEPDIR)/saml_name_identifier.Plo \ ./$(DEPDIR)/saml_statement_abstract.Plo \ ./$(DEPDIR)/saml_subject.Plo \ ./$(DEPDIR)/saml_subject_confirmation.Plo \ ./$(DEPDIR)/saml_subject_locality.Plo \ ./$(DEPDIR)/saml_subject_statement.Plo \ ./$(DEPDIR)/saml_subject_statement_abstract.Plo \ ./$(DEPDIR)/samlp_request.Plo \ ./$(DEPDIR)/samlp_request_abstract.Plo \ ./$(DEPDIR)/samlp_response.Plo \ ./$(DEPDIR)/samlp_response_abstract.Plo \ ./$(DEPDIR)/samlp_status.Plo ./$(DEPDIR)/samlp_status_code.Plo \ ./$(DEPDIR)/tools.Plo ./$(DEPDIR)/xml.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(liblasso_xml_la_SOURCES) DIST_SOURCES = $(liblasso_xml_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(liblassoincludedir)" HEADERS = $(liblassoinclude_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CHECK_CFLAGS = @CHECK_CFLAGS@ CHECK_LIBS = @CHECK_LIBS@ CLASSPATH_JUNIT = @CLASSPATH_JUNIT@ CLASSPATH_OPT = @CLASSPATH_OPT@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CSHARPCILINTERPRETER = @CSHARPCILINTERPRETER@ CSHARPCOMPILER = @CSHARPCOMPILER@ CSHARPCYGPATH_W = @CSHARPCYGPATH_W@ CSHARPDYNAMICLINKING = @CSHARPDYNAMICLINKING@ CSHARPLIBRARYPREFIX = @CSHARPLIBRARYPREFIX@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEBUGGING = @DEBUGGING@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLL_FILENAME = @DLL_FILENAME@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GACUTIL = @GACUTIL@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HTML_DIR = @HTML_DIR@ INKSCAPE = @INKSCAPE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVAC_FLAGS = @JAVAC_FLAGS@ JAVAH = @JAVAH@ JAVAH_FLAGS = @JAVAH_FLAGS@ JAVA_INCLUDE = @JAVA_INCLUDE@ JAVA_JUNIT = @JAVA_JUNIT@ JAVA_VERSION = @JAVA_VERSION@ JDK_INCLUDE = @JDK_INCLUDE@ JNI_EXTRA_LDFLAGS = @JNI_EXTRA_LDFLAGS@ JUNIT = @JUNIT@ LASSO_APP_DEFINES = @LASSO_APP_DEFINES@ LASSO_CFLAGS = @LASSO_CFLAGS@ LASSO_CORE_CFLAGS = @LASSO_CORE_CFLAGS@ LASSO_CORE_LIBS = @LASSO_CORE_LIBS@ LASSO_DEFINES = @LASSO_DEFINES@ LASSO_DOCDIR = @LASSO_DOCDIR@ LASSO_LIBS = @LASSO_LIBS@ LASSO_PUB_CFLAGS = @LASSO_PUB_CFLAGS@ LASSO_STATIC_BINARIES = @LASSO_STATIC_BINARIES@ LASSO_VERSION_INFO = @LASSO_VERSION_INFO@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PERLINSTALLSITEARCH = @PERLINSTALLSITEARCH@ PERLMAN3DIR = @PERLMAN3DIR@ PERL_CFLAGS = @PERL_CFLAGS@ PERL_VERSION = @PERL_VERSION@ PHP5 = @PHP5@ PHP5_CONFIG = @PHP5_CONFIG@ PHP5_CONFIG_DIR = @PHP5_CONFIG_DIR@ PHP5_EXTENSION_DIR = @PHP5_EXTENSION_DIR@ PHP5_INCLUDES = @PHP5_INCLUDES@ PHP5_INCLUDE_DIR = @PHP5_INCLUDE_DIR@ PHP5_LDFLAGS = @PHP5_LDFLAGS@ PHP5_LIBS = @PHP5_LIBS@ PHP5_PREFIX = @PHP5_PREFIX@ PHP5_UNPREFIXED_EXTENSION_DIR = @PHP5_UNPREFIXED_EXTENSION_DIR@ PHP5_VERSION = @PHP5_VERSION@ PHP7 = @PHP7@ PHP7_CONFIG = @PHP7_CONFIG@ PHP7_CONFIG_DIR = @PHP7_CONFIG_DIR@ PHP7_EXTENSION_DIR = @PHP7_EXTENSION_DIR@ PHP7_INCLUDES = @PHP7_INCLUDES@ PHP7_INCLUDE_DIR = @PHP7_INCLUDE_DIR@ PHP7_LDFLAGS = @PHP7_LDFLAGS@ PHP7_LIBS = @PHP7_LIBS@ PHP7_PREFIX = @PHP7_PREFIX@ PHP7_UNPREFIXED_EXTENSION_DIR = @PHP7_UNPREFIXED_EXTENSION_DIR@ PHP7_VERSION = @PHP7_VERSION@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PYTHON = @PYTHON@ PYTHON_VERSION = @PYTHON_VERSION@ PY_CFLAGS = @PY_CFLAGS@ PY_DYNLOAD = @PY_DYNLOAD@ PY_EXTRA_LIBS = @PY_EXTRA_LIBS@ PY_LIB_A = @PY_LIB_A@ PY_LIB_LOC = @PY_LIB_LOC@ PY_SITE_PACKAGES = @PY_SITE_PACKAGES@ RANLIB = @RANLIB@ RC = @RC@ REST2HTML = @REST2HTML@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_VERSION = @SWIG_VERSION@ TAR = @TAR@ TESTS_JUNIT = @TESTS_JUNIT@ UPCASED_DLL_FILENAME = @UPCASED_DLL_FILENAME@ VERSION = @VERSION@ VERSION_UNDERSCORED = @VERSION_UNDERSCORED@ WINDOWS_VERSION = @WINDOWS_VERSION@ XSLTPROC = @XSLTPROC@ Z_CFLAGS = @Z_CFLAGS@ Z_LIBS = @Z_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ uudecode = @uudecode@ MAINTAINERCLEANFILES = Makefile.in SUBDIRS = saml-2.0 soap-1.1 dsig ecp liblassoincludedir = $(includedir)/lasso/xml AM_CPPFLAGS = \ -I$(top_builddir) \ -I$(top_srcdir) \ $(LASSO_CORE_CFLAGS) \ -DG_LOG_DOMAIN=\"lasso\" noinst_LTLIBRARIES = liblasso-xml.la liblasso_xml_la_SOURCES = \ tools.c \ xml.c \ lib_assertion.c \ lib_authentication_statement.c \ lib_authn_context.c \ lib_authn_request.c \ lib_authn_request_envelope.c \ lib_authn_response.c \ lib_authn_response_envelope.c \ lib_federation_termination_notification.c \ lib_idp_entries.c \ lib_idp_entry.c \ lib_idp_list.c \ lib_logout_request.c \ lib_logout_response.c \ lib_name_identifier_mapping_request.c \ lib_name_identifier_mapping_response.c \ lib_register_name_identifier_request.c \ lib_register_name_identifier_response.c \ lib_request_authn_context.c \ lib_scoping.c \ lib_status_response.c \ lib_subject.c \ misc_text_node.c \ paos_request.c \ paos_response.c \ saml_advice.c \ saml_assertion.c \ saml_attribute.c \ saml_attribute_designator.c \ saml_attribute_statement.c \ saml_attribute_value.c \ saml_audience_restriction_condition.c \ saml_authentication_statement.c \ saml_authority_binding.c \ saml_condition_abstract.c \ saml_conditions.c \ saml_name_identifier.c \ saml_statement_abstract.c \ saml_subject.c \ saml_subject_confirmation.c \ saml_subject_locality.c \ saml_subject_statement.c \ saml_subject_statement_abstract.c \ samlp_request.c \ samlp_request_abstract.c \ samlp_response.c \ samlp_response_abstract.c \ samlp_status.c \ samlp_status_code.c liblassoinclude_HEADERS = \ strings.h \ xml.h \ lib_assertion.h \ lib_authentication_statement.h \ lib_authn_context.h \ lib_authn_request.h \ lib_authn_request_envelope.h \ lib_authn_response.h \ lib_authn_response_envelope.h \ lib_federation_termination_notification.h \ lib_idp_entries.h \ lib_idp_entry.h \ lib_idp_list.h \ lib_logout_request.h \ lib_logout_response.h \ lib_name_identifier_mapping_request.h \ lib_name_identifier_mapping_response.h \ lib_register_name_identifier_request.h \ lib_register_name_identifier_response.h \ lib_request_authn_context.h \ lib_scoping.h \ lib_status_response.h \ lib_subject.h \ misc_text_node.h \ paos_request.h \ paos_response.h \ saml_advice.h \ saml_assertion.h \ saml_attribute.h \ saml_attribute_designator.h \ saml_attribute_statement.h \ saml_attribute_value.h \ saml_audience_restriction_condition.h \ saml_authentication_statement.h \ saml_authority_binding.h \ saml_condition_abstract.h \ saml_conditions.h \ saml_name_identifier.h \ saml_statement_abstract.h \ saml_subject.h \ saml_subject_confirmation.h \ saml_subject_locality.h \ saml_subject_statement.h \ saml_subject_statement_abstract.h \ samlp_request.h \ samlp_request_abstract.h \ samlp_response.h \ samlp_response_abstract.h \ samlp_status.h \ samlp_status_code.h \ xml_enc.h \ tools.h lasso_private_h_sources = \ private.h EXTRA_DIST = $(lasso_private_h_sources) xml_idff.h all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign lasso/xml/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign lasso/xml/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } liblasso-xml.la: $(liblasso_xml_la_OBJECTS) $(liblasso_xml_la_DEPENDENCIES) $(EXTRA_liblasso_xml_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(liblasso_xml_la_OBJECTS) $(liblasso_xml_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib_assertion.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib_authentication_statement.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib_authn_context.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib_authn_request.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib_authn_request_envelope.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib_authn_response.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib_authn_response_envelope.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib_federation_termination_notification.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib_idp_entries.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib_idp_entry.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib_idp_list.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib_logout_request.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib_logout_response.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib_name_identifier_mapping_request.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib_name_identifier_mapping_response.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib_register_name_identifier_request.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib_register_name_identifier_response.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib_request_authn_context.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib_scoping.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib_status_response.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib_subject.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/misc_text_node.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/paos_request.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/paos_response.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saml_advice.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saml_assertion.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saml_attribute.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saml_attribute_designator.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saml_attribute_statement.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saml_attribute_value.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saml_audience_restriction_condition.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saml_authentication_statement.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saml_authority_binding.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saml_condition_abstract.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saml_conditions.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saml_name_identifier.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saml_statement_abstract.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saml_subject.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saml_subject_confirmation.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saml_subject_locality.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saml_subject_statement.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saml_subject_statement_abstract.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/samlp_request.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/samlp_request_abstract.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/samlp_response.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/samlp_response_abstract.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/samlp_status.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/samlp_status_code.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tools.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xml.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-liblassoincludeHEADERS: $(liblassoinclude_HEADERS) @$(NORMAL_INSTALL) @list='$(liblassoinclude_HEADERS)'; test -n "$(liblassoincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(liblassoincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(liblassoincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(liblassoincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(liblassoincludedir)" || exit $$?; \ done uninstall-liblassoincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(liblassoinclude_HEADERS)'; test -n "$(liblassoincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(liblassoincludedir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(liblassoincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -f ./$(DEPDIR)/lib_assertion.Plo -rm -f ./$(DEPDIR)/lib_authentication_statement.Plo -rm -f ./$(DEPDIR)/lib_authn_context.Plo -rm -f ./$(DEPDIR)/lib_authn_request.Plo -rm -f ./$(DEPDIR)/lib_authn_request_envelope.Plo -rm -f ./$(DEPDIR)/lib_authn_response.Plo -rm -f ./$(DEPDIR)/lib_authn_response_envelope.Plo -rm -f ./$(DEPDIR)/lib_federation_termination_notification.Plo -rm -f ./$(DEPDIR)/lib_idp_entries.Plo -rm -f ./$(DEPDIR)/lib_idp_entry.Plo -rm -f ./$(DEPDIR)/lib_idp_list.Plo -rm -f ./$(DEPDIR)/lib_logout_request.Plo -rm -f ./$(DEPDIR)/lib_logout_response.Plo -rm -f ./$(DEPDIR)/lib_name_identifier_mapping_request.Plo -rm -f ./$(DEPDIR)/lib_name_identifier_mapping_response.Plo -rm -f ./$(DEPDIR)/lib_register_name_identifier_request.Plo -rm -f ./$(DEPDIR)/lib_register_name_identifier_response.Plo -rm -f ./$(DEPDIR)/lib_request_authn_context.Plo -rm -f ./$(DEPDIR)/lib_scoping.Plo -rm -f ./$(DEPDIR)/lib_status_response.Plo -rm -f ./$(DEPDIR)/lib_subject.Plo -rm -f ./$(DEPDIR)/misc_text_node.Plo -rm -f ./$(DEPDIR)/paos_request.Plo -rm -f ./$(DEPDIR)/paos_response.Plo -rm -f ./$(DEPDIR)/saml_advice.Plo -rm -f ./$(DEPDIR)/saml_assertion.Plo -rm -f ./$(DEPDIR)/saml_attribute.Plo -rm -f ./$(DEPDIR)/saml_attribute_designator.Plo -rm -f ./$(DEPDIR)/saml_attribute_statement.Plo -rm -f ./$(DEPDIR)/saml_attribute_value.Plo -rm -f ./$(DEPDIR)/saml_audience_restriction_condition.Plo -rm -f ./$(DEPDIR)/saml_authentication_statement.Plo -rm -f ./$(DEPDIR)/saml_authority_binding.Plo -rm -f ./$(DEPDIR)/saml_condition_abstract.Plo -rm -f ./$(DEPDIR)/saml_conditions.Plo -rm -f ./$(DEPDIR)/saml_name_identifier.Plo -rm -f ./$(DEPDIR)/saml_statement_abstract.Plo -rm -f ./$(DEPDIR)/saml_subject.Plo -rm -f ./$(DEPDIR)/saml_subject_confirmation.Plo -rm -f ./$(DEPDIR)/saml_subject_locality.Plo -rm -f ./$(DEPDIR)/saml_subject_statement.Plo -rm -f ./$(DEPDIR)/saml_subject_statement_abstract.Plo -rm -f ./$(DEPDIR)/samlp_request.Plo -rm -f ./$(DEPDIR)/samlp_request_abstract.Plo -rm -f ./$(DEPDIR)/samlp_response.Plo -rm -f ./$(DEPDIR)/samlp_response_abstract.Plo -rm -f ./$(DEPDIR)/samlp_status.Plo -rm -f ./$(DEPDIR)/samlp_status_code.Plo -rm -f ./$(DEPDIR)/tools.Plo -rm -f ./$(DEPDIR)/xml.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-liblassoincludeHEADERS install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/lib_assertion.Plo -rm -f ./$(DEPDIR)/lib_authentication_statement.Plo -rm -f ./$(DEPDIR)/lib_authn_context.Plo -rm -f ./$(DEPDIR)/lib_authn_request.Plo -rm -f ./$(DEPDIR)/lib_authn_request_envelope.Plo -rm -f ./$(DEPDIR)/lib_authn_response.Plo -rm -f ./$(DEPDIR)/lib_authn_response_envelope.Plo -rm -f ./$(DEPDIR)/lib_federation_termination_notification.Plo -rm -f ./$(DEPDIR)/lib_idp_entries.Plo -rm -f ./$(DEPDIR)/lib_idp_entry.Plo -rm -f ./$(DEPDIR)/lib_idp_list.Plo -rm -f ./$(DEPDIR)/lib_logout_request.Plo -rm -f ./$(DEPDIR)/lib_logout_response.Plo -rm -f ./$(DEPDIR)/lib_name_identifier_mapping_request.Plo -rm -f ./$(DEPDIR)/lib_name_identifier_mapping_response.Plo -rm -f ./$(DEPDIR)/lib_register_name_identifier_request.Plo -rm -f ./$(DEPDIR)/lib_register_name_identifier_response.Plo -rm -f ./$(DEPDIR)/lib_request_authn_context.Plo -rm -f ./$(DEPDIR)/lib_scoping.Plo -rm -f ./$(DEPDIR)/lib_status_response.Plo -rm -f ./$(DEPDIR)/lib_subject.Plo -rm -f ./$(DEPDIR)/misc_text_node.Plo -rm -f ./$(DEPDIR)/paos_request.Plo -rm -f ./$(DEPDIR)/paos_response.Plo -rm -f ./$(DEPDIR)/saml_advice.Plo -rm -f ./$(DEPDIR)/saml_assertion.Plo -rm -f ./$(DEPDIR)/saml_attribute.Plo -rm -f ./$(DEPDIR)/saml_attribute_designator.Plo -rm -f ./$(DEPDIR)/saml_attribute_statement.Plo -rm -f ./$(DEPDIR)/saml_attribute_value.Plo -rm -f ./$(DEPDIR)/saml_audience_restriction_condition.Plo -rm -f ./$(DEPDIR)/saml_authentication_statement.Plo -rm -f ./$(DEPDIR)/saml_authority_binding.Plo -rm -f ./$(DEPDIR)/saml_condition_abstract.Plo -rm -f ./$(DEPDIR)/saml_conditions.Plo -rm -f ./$(DEPDIR)/saml_name_identifier.Plo -rm -f ./$(DEPDIR)/saml_statement_abstract.Plo -rm -f ./$(DEPDIR)/saml_subject.Plo -rm -f ./$(DEPDIR)/saml_subject_confirmation.Plo -rm -f ./$(DEPDIR)/saml_subject_locality.Plo -rm -f ./$(DEPDIR)/saml_subject_statement.Plo -rm -f ./$(DEPDIR)/saml_subject_statement_abstract.Plo -rm -f ./$(DEPDIR)/samlp_request.Plo -rm -f ./$(DEPDIR)/samlp_request_abstract.Plo -rm -f ./$(DEPDIR)/samlp_response.Plo -rm -f ./$(DEPDIR)/samlp_response_abstract.Plo -rm -f ./$(DEPDIR)/samlp_status.Plo -rm -f ./$(DEPDIR)/samlp_status_code.Plo -rm -f ./$(DEPDIR)/tools.Plo -rm -f ./$(DEPDIR)/xml.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-liblassoincludeHEADERS .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--depfiles check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am \ install-liblassoincludeHEADERS install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-liblassoincludeHEADERS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lasso-2.8.2/lasso/xml/PaxHeaders/saml_conditions.h0000644000000000000000000000013214114336625017206 xustar0030 mtime=1630649749.874437517 30 atime=1678814151.024993934 30 ctime=1678814320.281949164 lasso-2.8.2/lasso/xml/saml_conditions.h0000644000175000017500000000513314114336625022460 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAML_CONDITIONS_H__ #define __LASSO_SAML_CONDITIONS_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "xml.h" #include "saml_audience_restriction_condition.h" #include "saml_condition_abstract.h" #define LASSO_TYPE_SAML_CONDITIONS (lasso_saml_conditions_get_type()) #define LASSO_SAML_CONDITIONS(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML_CONDITIONS, LassoSamlConditions)) #define LASSO_SAML_CONDITIONS_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML_CONDITIONS, LassoSamlConditionsClass)) #define LASSO_IS_SAML_CONDITIONS(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML_CONDITIONS)) #define LASSO_IS_SAML_CONDITIONS_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML_CONDITIONS)) #define LASSO_SAML_CONDITIONS_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML_CONDITIONS, LassoSamlConditionsClass)) typedef struct _LassoSamlConditions LassoSamlConditions; typedef struct _LassoSamlConditionsClass LassoSamlConditionsClass; struct _LassoSamlConditions { LassoNode parent; /*< public >*/ /* */ GList *Condition; /* of LassoNode */ /* */ GList *AudienceRestrictionCondition; /* of LassoSamlAudienceRestrictionCondition */ /* */ char *NotBefore; /* */ char *NotOnOrAfter; }; struct _LassoSamlConditionsClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_saml_conditions_get_type(void); LASSO_EXPORT LassoSamlConditions* lasso_saml_conditions_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAML_CONDITIONS_H__ */ lasso-2.8.2/lasso/xml/PaxHeaders/lib_idp_entry.c0000644000000000000000000000013214114336625016637 xustar0030 mtime=1630649749.858437342 30 atime=1678814194.257236188 30 ctime=1678814320.325949415 lasso-2.8.2/lasso/xml/lib_idp_entry.c0000644000175000017500000000633514114336625022116 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "private.h" #include "lib_idp_entry.h" /** * SECTION:lib_idp_entry * @short_description: <lib:IDPEntry> * *
Schema fragment for lib:IDPEntry * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "ProviderID", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoLibIDPEntry, ProviderID), NULL, NULL, NULL}, { "ProviderName", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoLibIDPEntry, ProviderName), NULL, NULL, NULL}, { "Loc", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoLibIDPEntry, Loc), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoLibIDPEntryClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "IDPEntry"); lasso_node_class_set_ns(nclass, LASSO_LIB_HREF, LASSO_LIB_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_lib_idp_entry_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoLibIDPEntryClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoLibIDPEntry), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoLibIDPEntry", &this_info, 0); } return this_type; } /** * lasso_lib_idp_entry_new: * * Creates a new #LassoLibIDPEntry object. * * Return value: a newly created @LassoLibIDPEntry object **/ LassoNode* lasso_lib_idp_entry_new() { return g_object_new(LASSO_TYPE_LIB_IDP_ENTRY, NULL); } lasso-2.8.2/lasso/xml/PaxHeaders/lib_subject.c0000644000000000000000000000013114114336625016300 xustar0030 mtime=1630649749.858437342 29 atime=1678814199.56526602 30 ctime=1678814320.341949506 lasso-2.8.2/lasso/xml/lib_subject.c0000644000175000017500000000631714114336625021560 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "private.h" #include "lib_subject.h" /** * SECTION:lib_subject * @short_description: <lib:Subject> * *
Schema fragment for lib:Subject * * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "IDPProvidedNameIdentifier", SNIPPET_NODE, G_STRUCT_OFFSET(LassoLibSubject, IDPProvidedNameIdentifier), "LassoSamlNameIdentifier", LASSO_LIB_PREFIX, LASSO_LIB_HREF}, {NULL, 0, 0, NULL, NULL, NULL} }; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoLibSubjectClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); nclass->node_data->xsi_sub_type = TRUE; lasso_node_class_set_nodename(nclass, "SubjectType"); lasso_node_class_set_ns(nclass, LASSO_LIB_HREF, LASSO_LIB_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_lib_subject_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoLibSubjectClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoLibSubject), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_SAML_SUBJECT, "LassoLibSubject", &this_info, 0); } return this_type; } /** * lasso_lib_subject_new: * * Creates a new #LassoLibSubject object. * * Return value: a newly created #LassoLibSubject object **/ LassoLibSubject* lasso_lib_subject_new() { return g_object_new(LASSO_TYPE_LIB_SUBJECT, NULL); } lasso-2.8.2/lasso/xml/PaxHeaders/lib_authn_request.c0000644000000000000000000000013214364261206017530 xustar0030 mtime=1674666630.758769192 30 atime=1678814191.481220594 30 ctime=1678814320.313949347 lasso-2.8.2/lasso/xml/lib_authn_request.c0000644000175000017500000001767314364261206023016 0ustar00bdauvergnebdauvergne00000000000000/* $id: lib_authn_request.c,v 1.18 2004/11/26 14:13:02 fpeters Exp $ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "private.h" #include "lib_authn_request.h" #include #include "../utils.h" /** * SECTION:lib_authn_request * @short_description: <lib:AuthnRequest> * @see_also: #LassoLogin * * Authentication requests are sent from a service provider to an identity * provider. * *
* The lib:AuthnRequest is defined as an extension of samlp:RequestAbstractType. * The RequestID attribute in samlp:RequestAbstractType has uniqueness * requirements placed on it by [SAMLCore11], which require it to have the * properties of a nonce. *
* *
Schema fragment for lib:AuthnRequest * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "Extension", SNIPPET_EXTENSION, G_STRUCT_OFFSET(LassoLibAuthnRequest, Extension), NULL, NULL, NULL}, { "ProviderID", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoLibAuthnRequest, ProviderID), NULL, NULL, NULL}, { "AffiliationID", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoLibAuthnRequest, AffiliationID), NULL, NULL, NULL}, { "NameIDPolicy", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoLibAuthnRequest, NameIDPolicy), NULL, NULL, NULL}, { "ForceAuthn", SNIPPET_CONTENT | SNIPPET_BOOLEAN, G_STRUCT_OFFSET(LassoLibAuthnRequest, ForceAuthn), NULL, NULL, NULL}, { "IsPassive", SNIPPET_CONTENT | SNIPPET_BOOLEAN, G_STRUCT_OFFSET(LassoLibAuthnRequest, IsPassive), NULL, NULL, NULL}, { "ProtocolProfile", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoLibAuthnRequest, ProtocolProfile), NULL, NULL, NULL}, { "AssertionConsumerServiceID", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoLibAuthnRequest, AssertionConsumerServiceID), NULL, NULL, NULL}, { "RequestAuthnContext", SNIPPET_NODE, G_STRUCT_OFFSET(LassoLibAuthnRequest, RequestAuthnContext), NULL, NULL, NULL}, { "RelayState", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoLibAuthnRequest, RelayState), NULL, NULL, NULL}, { "Scoping", SNIPPET_NODE, G_STRUCT_OFFSET(LassoLibAuthnRequest, Scoping), NULL, NULL, NULL}, { "consent", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoLibAuthnRequest, consent), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; static struct QuerySnippet query_snippets[] = { { "RequestID", NULL }, { "MajorVersion", NULL }, { "MinorVersion", NULL }, { "IssueInstant", NULL }, { "ProviderID", NULL }, { "AffiliationID", NULL }, { "ForceAuthn", NULL }, { "IsPassive", NULL }, { "NameIDPolicy", NULL }, { "ProtocolProfile", NULL }, { "AssertionConsumerServiceID", NULL }, { "RequestAuthnContext/AuthnContextStatementRef", "AuthnContextStatementRef" }, { "RequestAuthnContext/AuthnContextClassRef", "AuthnContextClassRef" }, { "RequestAuthnContext/AuthnContextComparison", "AuthnContextComparison" }, { "RelayState", NULL }, { "Scoping/ProxyCount", "ProxyCount" }, { "Scoping/IDPList/IDPEntries", "IDPEntries" }, { "Scoping/IDPList/GetComplete", "GetComplete" }, { "consent", NULL }, { "Extension", NULL }, { NULL, NULL } }; static LassoNodeClass *parent_class = NULL; static gboolean init_from_query(LassoNode *node, char **query_fields) { LassoLibAuthnRequest *request = LASSO_LIB_AUTHN_REQUEST(node); gboolean rc; request->RequestAuthnContext = lasso_lib_request_authn_context_new(); /* XXX needs code for Scoping, IDPList, IDPEntries... */ rc = parent_class->init_from_query(node, query_fields); if (request->RequestAuthnContext->AuthnContextClassRef == NULL && request->RequestAuthnContext->AuthnContextStatementRef == NULL && request->RequestAuthnContext->AuthnContextComparison == NULL) { lasso_release_gobject(request->RequestAuthnContext); } if (request->ProviderID == NULL) return FALSE; return rc; } /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void instance_init(LassoLibAuthnRequest *node, G_GNUC_UNUSED void *unused) { node->IsPassive = TRUE; } static void class_init(LassoLibAuthnRequestClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->init_from_query = init_from_query; nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "AuthnRequest"); lasso_node_class_set_ns(nclass, LASSO_LIB_HREF, LASSO_LIB_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); lasso_node_class_add_query_snippets(nclass, query_snippets); } GType lasso_lib_authn_request_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoLibAuthnRequestClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoLibAuthnRequest), 0, (GInstanceInitFunc) instance_init, NULL }; this_type = g_type_register_static(LASSO_TYPE_SAMLP_REQUEST_ABSTRACT, "LassoLibAuthnRequest", &this_info, 0); } return this_type; } /** * lasso_lib_authn_request_new: * * Creates a new #LassoLibAuthnRequest object. * * Return value: a newly created #LassoLibAuthnRequest object **/ LassoLibAuthnRequest* lasso_lib_authn_request_new() { return g_object_new(LASSO_TYPE_LIB_AUTHN_REQUEST, NULL); } lasso-2.8.2/lasso/xml/PaxHeaders/saml_name_identifier.h0000644000000000000000000000013214114336625020157 xustar0030 mtime=1630649749.874437517 30 atime=1678814151.024993934 30 ctime=1678814320.281949164 lasso-2.8.2/lasso/xml/saml_name_identifier.h0000644000175000017500000000600114114336625023424 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAML_NAME_IDENTIFIER_H__ #define __LASSO_SAML_NAME_IDENTIFIER_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "xml.h" #define LASSO_TYPE_SAML_NAME_IDENTIFIER (lasso_saml_name_identifier_get_type()) #define LASSO_SAML_NAME_IDENTIFIER(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML_NAME_IDENTIFIER, \ LassoSamlNameIdentifier)) #define LASSO_SAML_NAME_IDENTIFIER_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML_NAME_IDENTIFIER, \ LassoSamlNameIdentifierClass)) #define LASSO_IS_SAML_NAME_IDENTIFIER(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML_NAME_IDENTIFIER)) #define LASSO_IS_SAML_NAME_IDENTIFIER_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML_NAME_IDENTIFIER)) #define LASSO_SAML_NAME_IDENTIFIER_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML_NAME_IDENTIFIER, \ LassoSamlNameIdentifierClass)) typedef struct _LassoSamlNameIdentifier LassoSamlNameIdentifier; typedef struct _LassoSamlNameIdentifierClass LassoSamlNameIdentifierClass; /** * LassoSamlNameIdentifier: * * @NameQualifier is the provider ID of the provider that created the name * identifier. * * @Format is a string constant defined by the Liberty * Alliance. The following constants are defined: * #LASSO_LIB_NAME_IDENTIFIER_FORMAT_FEDERATED, * #LASSO_LIB_NAME_IDENTIFIER_FORMAT_ONE_TIME, * #LASSO_LIB_NAME_IDENTIFIER_FORMAT_ENCRYPTED (when providers transmit name * identifiers) and * #LASSO_LIB_NAME_IDENTIFIER_FORMAT_ENTITYID. * */ struct _LassoSamlNameIdentifier { LassoNode parent; /*< public >*/ char *NameQualifier; char *Format; char *content; }; struct _LassoSamlNameIdentifierClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_saml_name_identifier_get_type(void); LASSO_EXPORT LassoSamlNameIdentifier* lasso_saml_name_identifier_new(void); LASSO_EXPORT LassoSamlNameIdentifier* lasso_saml_name_identifier_new_from_xmlNode( xmlNode *xmlnode); LASSO_EXPORT gboolean lasso_saml_name_identifier_equals(LassoSamlNameIdentifier *a, LassoSamlNameIdentifier *b); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAML_NAME_IDENTIFIER_H__ */ lasso-2.8.2/lasso/xml/PaxHeaders/misc_text_node.h0000644000000000000000000000013214114336625017025 xustar0030 mtime=1630649749.858437342 30 atime=1678814151.016993891 30 ctime=1678814320.261949051 lasso-2.8.2/lasso/xml/misc_text_node.h0000644000175000017500000000520414114336625022276 0ustar00bdauvergnebdauvergne00000000000000/* $Id: misc_text_node.h,v 1.0 2005/10/14 15:17:55 fpeters Exp $ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_MISC_TEXT_NODE_H__ #define __LASSO_MISC_TEXT_NODE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "xml.h" #define LASSO_TYPE_MISC_TEXT_NODE (lasso_misc_text_node_get_type()) #define LASSO_MISC_TEXT_NODE(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_MISC_TEXT_NODE, \ LassoMiscTextNode)) #define LASSO_MISC_TEXT_NODE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_MISC_TEXT_NODE, \ LassoMiscTextNodeClass)) #define LASSO_IS_MISC_TEXT_NODE(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_MISC_TEXT_NODE)) #define LASSO_IS_MISC_TEXT_NODE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_MISC_TEXT_NODE)) #define LASSO_MISC_TEXT_NODE_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_MISC_TEXT_NODE, \ LassoMiscTextNodeClass)) typedef struct _LassoMiscTextNode LassoMiscTextNode; typedef struct _LassoMiscTextNodeClass LassoMiscTextNodeClass; struct _LassoMiscTextNode { LassoNode parent; /*< public >*/ /* elements */ char *content; char *name; char *ns_href; char *ns_prefix; gboolean text_child; }; struct _LassoMiscTextNodeClass { LassoNodeClass parent; }; LASSO_EXPORT void lasso_misc_text_node_set_xml_content(LassoMiscTextNode *misc_text_node, xmlNode *node); LASSO_EXPORT xmlNode* lasso_misc_text_node_get_xml_content(LassoMiscTextNode *misc_text_node); LASSO_EXPORT GType lasso_misc_text_node_get_type(void); LASSO_EXPORT LassoNode* lasso_misc_text_node_new(void); LASSO_EXPORT LassoMiscTextNode* lasso_misc_text_node_new_with_string(const char *content); LASSO_EXPORT LassoMiscTextNode* lasso_misc_text_node_new_with_xml_node(xmlNode *xml_node); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_MISC_TEXT_NODE_H__ */ lasso-2.8.2/lasso/xml/PaxHeaders/saml_attribute_designator.c0000644000000000000000000000013214114336625021252 xustar0030 mtime=1630649749.874437517 30 atime=1678814203.413287659 30 ctime=1678814320.349949552 lasso-2.8.2/lasso/xml/saml_attribute_designator.c0000644000175000017500000000672114114336625024530 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "private.h" #include "saml_attribute_designator.h" /** * SECTION:saml_attribute_designator * @short_description: object mapping for a saml:AttributeDesignator * * The schema fragment (oasis-sstc-saml-schema-assertion-1.1.xsd) is: * *
* Schema fragment for saml:AttributeDesignator * * * * * * * ]]> * *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "AttributeName", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSamlAttributeDesignator, AttributeName), NULL, NULL, NULL}, { "AttributeNamespace", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSamlAttributeDesignator, AttributeNamespace), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSamlAttributeDesignatorClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "AttributeDesignator"); lasso_node_class_set_ns(nclass, LASSO_SAML_ASSERTION_HREF, LASSO_SAML_ASSERTION_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_saml_attribute_designator_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSamlAttributeDesignatorClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSamlAttributeDesignator), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoSamlAttributeDesignator", &this_info, 0); } return this_type; } /** * lasso_saml_attribute_designator_new: * * Creates a new #LassoSamlAttributeDesignator object. * * Return value: a newly created #LassoSamlAttributeDesignator object **/ LassoNode* lasso_saml_attribute_designator_new() { return g_object_new(LASSO_TYPE_SAML_ATTRIBUTE_DESIGNATOR, NULL); } lasso-2.8.2/lasso/xml/PaxHeaders/lib_authn_request_envelope.c0000644000000000000000000000013214114336625021426 xustar0030 mtime=1630649749.858437342 30 atime=1678814191.941223178 30 ctime=1678814320.317949369 lasso-2.8.2/lasso/xml/lib_authn_request_envelope.c0000644000175000017500000001345014114336625024701 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "private.h" #include "lib_authn_request_envelope.h" /** * SECTION:lib_authn_request_envelope * @short_description: <lib:AuthnRequestEnvelope> * *
Schema fragment for lib:AuthnRequestEnvelope * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "Extension", SNIPPET_EXTENSION, G_STRUCT_OFFSET(LassoLibAuthnRequestEnvelope, Extension), NULL, NULL, NULL}, { "AuthnRequest", SNIPPET_NODE, G_STRUCT_OFFSET(LassoLibAuthnRequestEnvelope, AuthnRequest), NULL, NULL, NULL}, { "ProviderID", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoLibAuthnRequestEnvelope, ProviderID), NULL, NULL, NULL}, { "ProviderName", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoLibAuthnRequestEnvelope, ProviderName), NULL, NULL, NULL}, { "AssertionConsumerServiceURL", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoLibAuthnRequestEnvelope, AssertionConsumerServiceURL), NULL, NULL, NULL}, { "IDPList", SNIPPET_NODE, G_STRUCT_OFFSET(LassoLibAuthnRequestEnvelope, IDPList), NULL, NULL, NULL}, { "IsPassive", SNIPPET_CONTENT | SNIPPET_BOOLEAN, G_STRUCT_OFFSET(LassoLibAuthnRequestEnvelope, IsPassive), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoLibAuthnRequestEnvelopeClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "AuthnRequestEnvelope"); lasso_node_class_set_ns(nclass, LASSO_LIB_HREF, LASSO_LIB_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_lib_authn_request_envelope_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoLibAuthnRequestEnvelopeClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoLibAuthnRequestEnvelope), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoLibAuthnRequestEnvelope", &this_info, 0); } return this_type; } /** * lasso_lib_authn_request_envelope_new: * * Creates a new #LassoLibAuthnRequestEnvelope object. * * Return value: a newly created #LassoLibAuthnRequestEnvelope object **/ LassoLibAuthnRequestEnvelope* lasso_lib_authn_request_envelope_new() { return g_object_new(LASSO_TYPE_LIB_AUTHN_REQUEST_ENVELOPE, NULL); } /** * lasso_lib_authn_request_envelope_new_full: * @authnRequest: the #LassoLibAuthnRequest to envelop * @providerID: service provider ID * @assertionConsumerServiceURL: assertion consumer service URL on the service * provider * * Creates a new #LassoLibAuthnRequestEnvelope object and initializes it with * the parameters. * * Return value: a newly created #LassoLibAuthnRequestEnvelope object **/ LassoLibAuthnRequestEnvelope* lasso_lib_authn_request_envelope_new_full(LassoLibAuthnRequest *authnRequest, char *providerID, char *assertionConsumerServiceURL) { LassoLibAuthnRequestEnvelope *request; request = g_object_new(LASSO_TYPE_LIB_AUTHN_REQUEST_ENVELOPE, NULL); request->AuthnRequest = g_object_ref(authnRequest); request->ProviderID = g_strdup(providerID); request->AssertionConsumerServiceURL = g_strdup(assertionConsumerServiceURL); return request; } lasso-2.8.2/lasso/xml/PaxHeaders/saml_advice.h0000644000000000000000000000013214114336625016270 xustar0030 mtime=1630649749.870437474 30 atime=1678814151.024993934 30 ctime=1678814320.265949073 lasso-2.8.2/lasso/xml/saml_advice.h0000644000175000017500000000426414114336625021546 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAML_ADVICE_H__ #define __LASSO_SAML_ADVICE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "xml.h" #define LASSO_TYPE_SAML_ADVICE (lasso_saml_advice_get_type()) #define LASSO_SAML_ADVICE(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML_ADVICE, LassoSamlAdvice)) #define LASSO_SAML_ADVICE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML_ADVICE, LassoSamlAdviceClass)) #define LASSO_IS_SAML_ADVICE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML_ADVICE)) #define LASSO_IS_SAML_ADVICE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML_ADVICE)) #define LASSO_SAML_ADVICE_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML_ADVICE, LassoSamlAdviceClass)) typedef struct _LassoSamlAdvice LassoSamlAdvice; typedef struct _LassoSamlAdviceClass LassoSamlAdviceClass; struct _LassoSamlAdvice { LassoNode parent; /*< public >*/ /* */ GList *AssertionIDReference; /* of LassoNode */ /* */ struct _LassoSamlAssertion *Assertion; }; struct _LassoSamlAdviceClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_saml_advice_get_type(void); LASSO_EXPORT LassoNode* lasso_saml_advice_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAML_ADVICE_H__ */ lasso-2.8.2/lasso/xml/PaxHeaders/lib_authn_context.h0000644000000000000000000000013214114336625017532 xustar0030 mtime=1630649749.854437299 30 atime=1678814151.012993868 30 ctime=1678814320.221948823 lasso-2.8.2/lasso/xml/lib_authn_context.h0000644000175000017500000000476114114336625023012 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_LIB_AUTHN_CONTEXT_H__ #define __LASSO_LIB_AUTHN_CONTEXT_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "xml.h" #define LASSO_TYPE_LIB_AUTHN_CONTEXT (lasso_lib_authn_context_get_type()) #define LASSO_LIB_AUTHN_CONTEXT(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_LIB_AUTHN_CONTEXT, LassoLibAuthnContext)) #define LASSO_LIB_AUTHN_CONTEXT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_LIB_AUTHN_CONTEXT, LassoLibAuthnContextClass)) #define LASSO_IS_LIB_AUTHN_CONTEXT(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_LIB_AUTHN_CONTEXT)) #define LASSO_IS_LIB_AUTHN_CONTEXT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_LIB_AUTHN_CONTEXT)) #define LASSO_LIB_AUTHN_CONTEXT_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_LIB_AUTHN_CONTEXT, LassoLibAuthnContextClass)) typedef struct _LassoLibAuthnContext LassoLibAuthnContext; typedef struct _LassoLibAuthnContextClass LassoLibAuthnContextClass; struct _LassoLibAuthnContext { LassoNode parent; /*< public >*/ /* */ char *AuthnContextClassRef; /* */ char *AuthnContextStatementRef; /* */ void *AuthenticationContextStatement; /* TODO: support that element */ }; struct _LassoLibAuthnContextClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_lib_authn_context_get_type(void); LASSO_EXPORT LassoNode* lasso_lib_authn_context_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_LIB_AUTHN_CONTEXT_H__ */ lasso-2.8.2/lasso/xml/PaxHeaders/lib_federation_termination_notification.h0000644000000000000000000000013214114336625024146 xustar0030 mtime=1630649749.858437342 30 atime=1678814151.012993868 30 ctime=1678814320.233948891 lasso-2.8.2/lasso/xml/lib_federation_termination_notification.h0000644000175000017500000000663114114336625027424 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_LIB_FEDERATION_TERMINATION_NOTIFICATION_H__ #define __LASSO_LIB_FEDERATION_TERMINATION_NOTIFICATION_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "saml_name_identifier.h" #include "samlp_request_abstract.h" #define LASSO_TYPE_LIB_FEDERATION_TERMINATION_NOTIFICATION \ (lasso_lib_federation_termination_notification_get_type()) #define LASSO_LIB_FEDERATION_TERMINATION_NOTIFICATION(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_LIB_FEDERATION_TERMINATION_NOTIFICATION, \ LassoLibFederationTerminationNotification)) #define LASSO_LIB_FEDERATION_TERMINATION_NOTIFICATION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_LIB_FEDERATION_TERMINATION_NOTIFICATION, \ LassoLibFederationTerminationNotificationClass)) #define LASSO_IS_LIB_FEDERATION_TERMINATION_NOTIFICATION(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_LIB_FEDERATION_TERMINATION_NOTIFICATION)) #define LASSO_IS_LIB_FEDERATION_TERMINATION_NOTIFICATION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_LIB_FEDERATION_TERMINATION_NOTIFICATION)) #define LASSO_LIB_FEDERATION_TERMINATION_NOTIFICATION_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_LIB_FEDERATION_TERMINATION_NOTIFICATION, \ LassoLibFederationTerminationNotificationClass)) typedef struct _LassoLibFederationTerminationNotification \ LassoLibFederationTerminationNotification; typedef struct _LassoLibFederationTerminationNotificationClass \ LassoLibFederationTerminationNotificationClass; struct _LassoLibFederationTerminationNotification { LassoSamlpRequestAbstract parent; /*< public >*/ /* */ GList *Extension; /* of xmlNode* */ /* */ char *ProviderID; /* */ LassoSamlNameIdentifier *NameIdentifier; /* */ char *consent; char *RelayState; /* not in schema but allowed in redirects */ }; struct _LassoLibFederationTerminationNotificationClass { LassoSamlpRequestAbstractClass parent; }; LASSO_EXPORT GType lasso_lib_federation_termination_notification_get_type(void); LASSO_EXPORT LassoNode* lasso_lib_federation_termination_notification_new(void); LASSO_EXPORT LassoNode* lasso_lib_federation_termination_notification_new_full( char *providerID, LassoSamlNameIdentifier *nameIdentifier, LassoSignatureType sign_type, LassoSignatureMethod sign_method); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_LIB_FEDERATION_TERMINATION_NOTIFICATION_H__ */ lasso-2.8.2/lasso/xml/PaxHeaders/saml_audience_restriction_condition.c0000644000000000000000000000013214114336625023300 xustar0030 mtime=1630649749.874437517 30 atime=1678814205.793301048 30 ctime=1678814320.353949574 lasso-2.8.2/lasso/xml/saml_audience_restriction_condition.c0000644000175000017500000001006214114336625026547 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "private.h" #include "saml_audience_restriction_condition.h" /* * schema fragment (oasis-sstc-saml-schema-assertion-1.0.xsd): * * * * * * * * * * * * * */ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "Audience", SNIPPET_LIST_CONTENT, G_STRUCT_OFFSET(LassoSamlAudienceRestrictionCondition, Audience), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSamlAudienceRestrictionConditionClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "AudienceRestrictionCondition"); lasso_node_class_set_ns(nclass, LASSO_SAML_ASSERTION_HREF, LASSO_SAML_ASSERTION_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_saml_audience_restriction_condition_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSamlAudienceRestrictionConditionClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSamlAudienceRestrictionCondition), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_SAML_CONDITION_ABSTRACT, "LassoSamlAudienceRestrictionCondition", &this_info, 0); } return this_type; } /** * lasso_saml_audience_restriction_condition_new: * * Creates a new #LassoSamlAudienceRestrictionCondition object. * * Return value: a newly created #LassoSamlAudienceRestrictionCondition **/ LassoSamlAudienceRestrictionCondition* lasso_saml_audience_restriction_condition_new() { return g_object_new(LASSO_TYPE_SAML_AUDIENCE_RESTRICTION_CONDITION, NULL); } /** * lasso_saml_audience_restriction_condition_new_full: * @audience: a string which specify to which audience the restriction condition applies * * Creates a new #LassoSamlAudienceRestrictionCondition object and initializes * it with the parameters. * * Return value: a newly created #LassoSamlAudienceRestrictionCondition **/ LassoSamlAudienceRestrictionCondition* lasso_saml_audience_restriction_condition_new_full(const char *audience) { LassoSamlAudienceRestrictionCondition *condition; condition = lasso_saml_audience_restriction_condition_new(); if (audience != NULL) { condition->Audience = g_list_append(condition->Audience, g_strdup(audience)); } return condition; } lasso-2.8.2/lasso/xml/PaxHeaders/paos_response.h0000644000000000000000000000013214114336625016701 xustar0030 mtime=1630649749.862437387 30 atime=1678814151.016993891 30 ctime=1678814320.261949051 lasso-2.8.2/lasso/xml/paos_response.h0000644000175000017500000000427014114336625022154 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_PAOS_RESPONSE_H__ #define __LASSO_PAOS_RESPONSE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #define LASSO_TYPE_PAOS_RESPONSE (lasso_paos_response_get_type()) #define LASSO_PAOS_RESPONSE(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_PAOS_RESPONSE, LassoPaosResponse)) #define LASSO_PAOS_RESPONSE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_PAOS_RESPONSE, LassoPaosResponseClass)) #define LASSO_IS_PAOS_RESPONSE(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_PAOS_RESPONSE)) #define LASSO_IS_PAOS_RESPONSE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_PAOS_RESPONSE)) #define LASSO_PAOS_RESPONSE_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_PAOS_RESPONSE, LassoPaosResponseClass)) typedef struct _LassoPaosResponse LassoPaosResponse; typedef struct _LassoPaosResponseClass LassoPaosResponseClass; struct _LassoPaosResponse { LassoNode parent; gchar *refToMessageID; gboolean mustUnderstand; gchar *actor; }; struct _LassoPaosResponseClass { LassoNodeClass parent; }; LASSO_EXPORT int lasso_paos_response_validate(LassoPaosResponse *node); LASSO_EXPORT GType lasso_paos_response_get_type(void); LASSO_EXPORT LassoNode* lasso_paos_response_new(const gchar *refToMessageID); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_PAOS_RESPONSE_H__ */ lasso-2.8.2/lasso/xml/PaxHeaders/saml_authentication_statement.c0000644000000000000000000000013214114336625022133 xustar0030 mtime=1630649749.874437517 30 atime=1678814206.393304424 30 ctime=1678814320.353949574 lasso-2.8.2/lasso/xml/saml_authentication_statement.c0000644000175000017500000001010214114336625025375 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "private.h" #include "saml_authentication_statement.h" /** * SECTION:saml_authentication_statement * @short_description: <saml:AuthenticationStatement> * *
Schema fragment for saml:AuthenticationStatement * * * * * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "SubjectLocality", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSamlAuthenticationStatement, SubjectLocality), NULL, NULL, NULL}, { "AuthorityBinding", SNIPPET_LIST_NODES, G_STRUCT_OFFSET(LassoSamlAuthenticationStatement, AuthorityBinding), NULL, NULL, NULL}, { "AuthenticationMethod", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSamlAuthenticationStatement, AuthenticationMethod), NULL, NULL, NULL}, { "AuthenticationInstant", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSamlAuthenticationStatement, AuthenticationInstant), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSamlAuthenticationStatementClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "AuthenticationStatement"); lasso_node_class_set_ns(nclass, LASSO_SAML_ASSERTION_HREF, LASSO_SAML_ASSERTION_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_saml_authentication_statement_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSamlAuthenticationStatementClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSamlAuthenticationStatement), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_SAML_SUBJECT_STATEMENT_ABSTRACT, "LassoSamlAuthenticationStatement", &this_info, 0); } return this_type; } /** * lasso_saml_authentication_statement_new: * * Creates a new #LassoSamlAuthenticationStatement object. * * Return value: a newly created #LassoSamlAuthenticationStatement object **/ LassoNode* lasso_saml_authentication_statement_new() { return g_object_new(LASSO_TYPE_SAML_AUTHENTICATION_STATEMENT, NULL); } lasso-2.8.2/lasso/xml/PaxHeaders/saml_attribute_value.h0000644000000000000000000000013214114336625020234 xustar0030 mtime=1630649749.874437517 30 atime=1678814151.024993934 30 ctime=1678814320.273949118 lasso-2.8.2/lasso/xml/saml_attribute_value.h0000644000175000017500000000454414114336625023513 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: Nicolas Clapies * Valery Febvre * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAML_ATTRIBUTE_VALUE_H__ #define __LASSO_SAML_ATTRIBUTE_VALUE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "xml.h" #define LASSO_TYPE_SAML_ATTRIBUTE_VALUE (lasso_saml_attribute_value_get_type()) #define LASSO_SAML_ATTRIBUTE_VALUE(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML_ATTRIBUTE_VALUE, \ LassoSamlAttributeValue)) #define LASSO_SAML_ATTRIBUTE_VALUE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML_ATTRIBUTE_VALUE, \ LassoSamlAttributeValueClass)) #define LASSO_IS_SAML_ATTRIBUTE_VALUE(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML_ATTRIBUTE_VALUE)) #define LASSO_IS_SAML_ATTRIBUTE_VALUE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML_ATTRIBUTE_VALUE)) #define LASSO_SAML_ATTRIBUTE_VALUE_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML_ATTRIBUTE_VALUE, \ LassoSamlAttributeValueClass)) typedef struct _LassoSamlAttributeValue LassoSamlAttributeValue; typedef struct _LassoSamlAttributeValueClass LassoSamlAttributeValueClass; struct _LassoSamlAttributeValue { LassoNode parent; /*< public >*/ GList *any; /* of LassoNode */ }; struct _LassoSamlAttributeValueClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_saml_attribute_value_get_type(void); LASSO_EXPORT LassoSamlAttributeValue* lasso_saml_attribute_value_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAML_ATTRIBUTE_VALUE_H__ */ lasso-2.8.2/lasso/xml/PaxHeaders/saml_condition_abstract.h0000644000000000000000000000013214114336625020706 xustar0030 mtime=1630649749.874437517 30 atime=1678814151.024993934 30 ctime=1678814320.277949142 lasso-2.8.2/lasso/xml/saml_condition_abstract.h0000644000175000017500000000437514114336625024167 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAML_CONDITION_ABSTRACT_H__ #define __LASSO_SAML_CONDITION_ABSTRACT_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "xml.h" #define LASSO_TYPE_SAML_CONDITION_ABSTRACT (lasso_saml_condition_abstract_get_type()) #define LASSO_SAML_CONDITION_ABSTRACT(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML_CONDITION_ABSTRACT, \ LassoSamlConditionAbstract)) #define LASSO_SAML_CONDITION_ABSTRACT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML_CONDITION_ABSTRACT, \ LassoSamlConditionAbstractClass)) #define LASSO_IS_SAML_CONDITION_ABSTRACT(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML_CONDITION_ABSTRACT)) #define LASSO_IS_SAML_CONDITION_ABSTRACT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML_CONDITION_ABSTRACT)) #define LASSO_SAML_CONDITION_ABSTRACT_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML_CONDITION_ABSTRACT, \ LassoSamlConditionAbstractClass)) typedef struct _LassoSamlConditionAbstract LassoSamlConditionAbstract; typedef struct _LassoSamlConditionAbstractClass LassoSamlConditionAbstractClass; struct _LassoSamlConditionAbstract { LassoNode parent; }; struct _LassoSamlConditionAbstractClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_saml_condition_abstract_get_type(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAML_CONDITION_ABSTRACT_H__ */ lasso-2.8.2/lasso/xml/PaxHeaders/saml_subject_confirmation.c0000644000000000000000000000013214114336625021237 xustar0030 mtime=1630649749.874437517 30 atime=1678814209.985324638 30 ctime=1678814320.365949642 lasso-2.8.2/lasso/xml/saml_subject_confirmation.c0000644000175000017500000000733414114336625024516 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "private.h" #include "saml_subject_confirmation.h" /** * SECTION:saml_subject_confirmation * @short_description: <saml:SubjectConfirmation> * *
Schema fragment for saml:SubjectConfirmation * * * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "ConfirmationMethod", SNIPPET_LIST_CONTENT, G_STRUCT_OFFSET(LassoSamlSubjectConfirmation, ConfirmationMethod), NULL, NULL, NULL}, { "SubjectConfirmationData", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoSamlSubjectConfirmation, SubjectConfirmationData), NULL, NULL, NULL}, { "KeyInfo", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSamlSubjectConfirmation, KeyInfo), NULL, LASSO_DS_PREFIX, LASSO_DS_HREF}, {NULL, 0, 0, NULL, NULL, NULL} }; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSamlSubjectConfirmationClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "SubjectConfirmation"); lasso_node_class_set_ns(nclass, LASSO_SAML_ASSERTION_HREF, LASSO_SAML_ASSERTION_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_saml_subject_confirmation_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSamlSubjectConfirmationClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSamlSubjectConfirmation), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoSamlSubjectConfirmation", &this_info, 0); } return this_type; } /** * lasso_saml_subject_confirmation_new: * * Creates a new #LassoSamlSubjectConfirmation object. * * Return value: a newly created #LassoSamlSubjectConfirmation object **/ LassoSamlSubjectConfirmation* lasso_saml_subject_confirmation_new() { return g_object_new(LASSO_TYPE_SAML_SUBJECT_CONFIRMATION, NULL); } lasso-2.8.2/lasso/xml/PaxHeaders/ecp0000644000000000000000000000013214404126160014333 xustar0030 mtime=1678814320.885952604 30 atime=1678814326.421984131 30 ctime=1678814320.885952604 lasso-2.8.2/lasso/xml/ecp/0000755000175000017500000000000014404126160017660 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/lasso/xml/ecp/PaxHeaders/Makefile.am0000644000000000000000000000013214050545511016446 xustar0030 mtime=1621281609.159309122 30 atime=1678814114.900792561 30 ctime=1678814320.877952558 lasso-2.8.2/lasso/xml/ecp/Makefile.am0000644000175000017500000000062214050545511021716 0ustar00bdauvergnebdauvergne00000000000000MAINTAINERCLEANFILES = Makefile.in liblassoincludedir = $(includedir)/lasso/xml/ecp AM_CPPFLAGS = \ -I$(top_builddir) \ -I$(top_srcdir) \ $(LASSO_CORE_CFLAGS) \ -DG_LOG_DOMAIN=\"lasso\" noinst_LTLIBRARIES = liblasso-xml-ecp.la liblasso_xml_ecp_la_SOURCES = \ ecp_request.c \ ecp_response.c \ ecp_relaystate.c liblassoinclude_HEADERS = \ ecp_request.h \ ecp_response.h \ ecp_relaystate.h lasso-2.8.2/lasso/xml/ecp/PaxHeaders/Makefile.in0000644000000000000000000000013014404125673016463 xustar0029 mtime=1678814139.82093137 30 atime=1678814149.912987722 29 ctime=1678814320.88195258 lasso-2.8.2/lasso/xml/ecp/Makefile.in0000644000175000017500000006054314404125673021745 0ustar00bdauvergnebdauvergne00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = lasso/xml/ecp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ac_check_class.m4 \ $(top_srcdir)/m4/ac_check_classpath.m4 \ $(top_srcdir)/m4/ac_check_junit.m4 \ $(top_srcdir)/m4/ac_prog_jar.m4 \ $(top_srcdir)/m4/ac_prog_java.m4 \ $(top_srcdir)/m4/ac_prog_java_works.m4 \ $(top_srcdir)/m4/ac_prog_javac.m4 \ $(top_srcdir)/m4/ac_prog_javac_works.m4 \ $(top_srcdir)/m4/ac_prog_javah.m4 \ $(top_srcdir)/m4/ac_try_compile_java.m4 \ $(top_srcdir)/m4/as-compiler-flag.m4 \ $(top_srcdir)/m4/dps_java_check_class.m4 \ $(top_srcdir)/m4/dps_xtra_classpath.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(liblassoinclude_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h \ $(top_builddir)/lasso/lasso_config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) liblasso_xml_ecp_la_LIBADD = am_liblasso_xml_ecp_la_OBJECTS = ecp_request.lo ecp_response.lo \ ecp_relaystate.lo liblasso_xml_ecp_la_OBJECTS = $(am_liblasso_xml_ecp_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -I$(top_builddir)/lasso depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/ecp_relaystate.Plo \ ./$(DEPDIR)/ecp_request.Plo ./$(DEPDIR)/ecp_response.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(liblasso_xml_ecp_la_SOURCES) DIST_SOURCES = $(liblasso_xml_ecp_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(liblassoincludedir)" HEADERS = $(liblassoinclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CHECK_CFLAGS = @CHECK_CFLAGS@ CHECK_LIBS = @CHECK_LIBS@ CLASSPATH_JUNIT = @CLASSPATH_JUNIT@ CLASSPATH_OPT = @CLASSPATH_OPT@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CSHARPCILINTERPRETER = @CSHARPCILINTERPRETER@ CSHARPCOMPILER = @CSHARPCOMPILER@ CSHARPCYGPATH_W = @CSHARPCYGPATH_W@ CSHARPDYNAMICLINKING = @CSHARPDYNAMICLINKING@ CSHARPLIBRARYPREFIX = @CSHARPLIBRARYPREFIX@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEBUGGING = @DEBUGGING@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLL_FILENAME = @DLL_FILENAME@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GACUTIL = @GACUTIL@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HTML_DIR = @HTML_DIR@ INKSCAPE = @INKSCAPE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVAC_FLAGS = @JAVAC_FLAGS@ JAVAH = @JAVAH@ JAVAH_FLAGS = @JAVAH_FLAGS@ JAVA_INCLUDE = @JAVA_INCLUDE@ JAVA_JUNIT = @JAVA_JUNIT@ JAVA_VERSION = @JAVA_VERSION@ JDK_INCLUDE = @JDK_INCLUDE@ JNI_EXTRA_LDFLAGS = @JNI_EXTRA_LDFLAGS@ JUNIT = @JUNIT@ LASSO_APP_DEFINES = @LASSO_APP_DEFINES@ LASSO_CFLAGS = @LASSO_CFLAGS@ LASSO_CORE_CFLAGS = @LASSO_CORE_CFLAGS@ LASSO_CORE_LIBS = @LASSO_CORE_LIBS@ LASSO_DEFINES = @LASSO_DEFINES@ LASSO_DOCDIR = @LASSO_DOCDIR@ LASSO_LIBS = @LASSO_LIBS@ LASSO_PUB_CFLAGS = @LASSO_PUB_CFLAGS@ LASSO_STATIC_BINARIES = @LASSO_STATIC_BINARIES@ LASSO_VERSION_INFO = @LASSO_VERSION_INFO@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PERLINSTALLSITEARCH = @PERLINSTALLSITEARCH@ PERLMAN3DIR = @PERLMAN3DIR@ PERL_CFLAGS = @PERL_CFLAGS@ PERL_VERSION = @PERL_VERSION@ PHP5 = @PHP5@ PHP5_CONFIG = @PHP5_CONFIG@ PHP5_CONFIG_DIR = @PHP5_CONFIG_DIR@ PHP5_EXTENSION_DIR = @PHP5_EXTENSION_DIR@ PHP5_INCLUDES = @PHP5_INCLUDES@ PHP5_INCLUDE_DIR = @PHP5_INCLUDE_DIR@ PHP5_LDFLAGS = @PHP5_LDFLAGS@ PHP5_LIBS = @PHP5_LIBS@ PHP5_PREFIX = @PHP5_PREFIX@ PHP5_UNPREFIXED_EXTENSION_DIR = @PHP5_UNPREFIXED_EXTENSION_DIR@ PHP5_VERSION = @PHP5_VERSION@ PHP7 = @PHP7@ PHP7_CONFIG = @PHP7_CONFIG@ PHP7_CONFIG_DIR = @PHP7_CONFIG_DIR@ PHP7_EXTENSION_DIR = @PHP7_EXTENSION_DIR@ PHP7_INCLUDES = @PHP7_INCLUDES@ PHP7_INCLUDE_DIR = @PHP7_INCLUDE_DIR@ PHP7_LDFLAGS = @PHP7_LDFLAGS@ PHP7_LIBS = @PHP7_LIBS@ PHP7_PREFIX = @PHP7_PREFIX@ PHP7_UNPREFIXED_EXTENSION_DIR = @PHP7_UNPREFIXED_EXTENSION_DIR@ PHP7_VERSION = @PHP7_VERSION@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PYTHON = @PYTHON@ PYTHON_VERSION = @PYTHON_VERSION@ PY_CFLAGS = @PY_CFLAGS@ PY_DYNLOAD = @PY_DYNLOAD@ PY_EXTRA_LIBS = @PY_EXTRA_LIBS@ PY_LIB_A = @PY_LIB_A@ PY_LIB_LOC = @PY_LIB_LOC@ PY_SITE_PACKAGES = @PY_SITE_PACKAGES@ RANLIB = @RANLIB@ RC = @RC@ REST2HTML = @REST2HTML@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_VERSION = @SWIG_VERSION@ TAR = @TAR@ TESTS_JUNIT = @TESTS_JUNIT@ UPCASED_DLL_FILENAME = @UPCASED_DLL_FILENAME@ VERSION = @VERSION@ VERSION_UNDERSCORED = @VERSION_UNDERSCORED@ WINDOWS_VERSION = @WINDOWS_VERSION@ XSLTPROC = @XSLTPROC@ Z_CFLAGS = @Z_CFLAGS@ Z_LIBS = @Z_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ uudecode = @uudecode@ MAINTAINERCLEANFILES = Makefile.in liblassoincludedir = $(includedir)/lasso/xml/ecp AM_CPPFLAGS = \ -I$(top_builddir) \ -I$(top_srcdir) \ $(LASSO_CORE_CFLAGS) \ -DG_LOG_DOMAIN=\"lasso\" noinst_LTLIBRARIES = liblasso-xml-ecp.la liblasso_xml_ecp_la_SOURCES = \ ecp_request.c \ ecp_response.c \ ecp_relaystate.c liblassoinclude_HEADERS = \ ecp_request.h \ ecp_response.h \ ecp_relaystate.h all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign lasso/xml/ecp/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign lasso/xml/ecp/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } liblasso-xml-ecp.la: $(liblasso_xml_ecp_la_OBJECTS) $(liblasso_xml_ecp_la_DEPENDENCIES) $(EXTRA_liblasso_xml_ecp_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(liblasso_xml_ecp_la_OBJECTS) $(liblasso_xml_ecp_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecp_relaystate.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecp_request.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecp_response.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-liblassoincludeHEADERS: $(liblassoinclude_HEADERS) @$(NORMAL_INSTALL) @list='$(liblassoinclude_HEADERS)'; test -n "$(liblassoincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(liblassoincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(liblassoincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(liblassoincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(liblassoincludedir)" || exit $$?; \ done uninstall-liblassoincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(liblassoinclude_HEADERS)'; test -n "$(liblassoincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(liblassoincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(liblassoincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/ecp_relaystate.Plo -rm -f ./$(DEPDIR)/ecp_request.Plo -rm -f ./$(DEPDIR)/ecp_response.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-liblassoincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/ecp_relaystate.Plo -rm -f ./$(DEPDIR)/ecp_request.Plo -rm -f ./$(DEPDIR)/ecp_response.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-liblassoincludeHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libtool clean-noinstLTLIBRARIES \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-liblassoincludeHEADERS \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-liblassoincludeHEADERS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lasso-2.8.2/lasso/xml/ecp/PaxHeaders/ecp_response.c0000644000000000000000000000013214114336625017250 xustar0030 mtime=1630649749.826436995 30 atime=1678814183.565176154 30 ctime=1678814320.885952604 lasso-2.8.2/lasso/xml/ecp/ecp_response.c0000644000175000017500000001370714114336625022530 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "ecp_response.h" /** * SECTION:ecp_response * @short_description: <ecp:Response> * *
Schema fragment for ecp:Response * * * * * * * ]]> *
*/ /*****************************************************************************/ /* public methods */ /*****************************************************************************/ /** * lasso_ecp_response_validate: * @response: The #LassoEcpResponse object to validate * * Validates the #LassoEcpResponse object conforms to required values. * * * AssertionConsumerServiceURL must be non-NULL * mustUnderstand must be TRUE * actor must be equal to #LASSO_SOAP_ENV_ACTOR * * * Returns: 0 on success, error code otherwise **/ int lasso_ecp_response_validate(LassoEcpResponse *response) { g_return_val_if_fail(LASSO_IS_ECP_RESPONSE(response), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); if (response->AssertionConsumerServiceURL == NULL) { error("%s.AssertionConsumerServiceURL missing", G_OBJECT_CLASS_NAME(response)); return LASSO_XML_ERROR_ATTR_NOT_FOUND; } if (!response->mustUnderstand) { error("%s.mustUnderstand must be True", G_OBJECT_CLASS_NAME(response)); return LASSO_XML_ERROR_ATTR_VALUE_INVALID; } if (response->actor == NULL) { error("%s.actor missing", G_OBJECT_CLASS_NAME(response)); return LASSO_XML_ERROR_ATTR_NOT_FOUND; } if (lasso_strisnotequal(response->actor, LASSO_SOAP_ENV_ACTOR)) { error("%s.actor invalid, must be \"%s\" not \"%s\"", G_OBJECT_CLASS_NAME(response), LASSO_SOAP_ENV_ACTOR, response->actor); return LASSO_XML_ERROR_ATTR_VALUE_INVALID; } return 0; } /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "AssertionConsumerServiceURL", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoEcpResponse, AssertionConsumerServiceURL), NULL, NULL, NULL}, { "mustUnderstand", SNIPPET_ATTRIBUTE | SNIPPET_BOOLEAN, G_STRUCT_OFFSET(LassoEcpResponse, mustUnderstand), NULL, LASSO_SOAP_ENV_PREFIX, LASSO_SOAP_ENV_HREF}, { "actor", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoEcpResponse, actor), NULL, LASSO_SOAP_ENV_PREFIX, LASSO_SOAP_ENV_HREF}, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; static int init_from_xml(LassoNode *node, xmlNode *xmlnode) { lasso_error_t rc = 0; LassoEcpResponse *response = LASSO_ECP_RESPONSE(node); lasso_check_good_rc(parent_class->init_from_xml(node, xmlnode)); lasso_check_good_rc(lasso_ecp_response_validate(response)); cleanup: return rc; } /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoEcpResponseClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); nclass->init_from_xml = init_from_xml; lasso_node_class_set_nodename(nclass, "Response"); lasso_node_class_set_ns(nclass, LASSO_ECP_HREF, LASSO_ECP_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_ecp_response_get_type() { static GType ecp_response_type = 0; if (!ecp_response_type) { static const GTypeInfo response_info = { sizeof (LassoEcpResponseClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoEcpResponse), 0, NULL, NULL }; ecp_response_type = g_type_register_static(LASSO_TYPE_NODE, "LassoEcpResponse", &response_info, 0); } return ecp_response_type; } /** * lasso_ecp_response_new: * @AssertionConsumerServiceURL: (allow-none): * * Creates and initializes a new #LassoEcpResponse object. * * The # object is initialized as follows: * * AssertionConsumerServiceURL = @AssertionConsumerServiceURL * mustUnderstand = TRUE * actor = #LASSO_SOAP_ENV_ACTOR * * * Returns: a newly created and initialized #LassoEcpResponse object **/ LassoNode* lasso_ecp_response_new(const gchar *AssertionConsumerServiceURL) { LassoEcpResponse *response; response = g_object_new(LASSO_TYPE_ECP_RESPONSE, NULL); if (AssertionConsumerServiceURL) { response->AssertionConsumerServiceURL = g_strdup(AssertionConsumerServiceURL); } response->mustUnderstand = TRUE; response->actor = g_strdup(LASSO_SOAP_ENV_ACTOR); return LASSO_NODE(response); } lasso-2.8.2/lasso/xml/ecp/PaxHeaders/ecp_request.h0000644000000000000000000000013214114336625017107 xustar0030 mtime=1630649749.826436995 30 atime=1678814151.012993868 30 ctime=1678814320.877952558 lasso-2.8.2/lasso/xml/ecp/ecp_request.h0000644000175000017500000000457714114336625022374 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_ECP_REQUEST_H__ #define __LASSO_ECP_REQUEST_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "../xml.h" #include "../saml-2.0/saml2_name_id.h" #include "../saml-2.0/samlp2_idp_list.h" #define LASSO_TYPE_ECP_REQUEST (lasso_ecp_request_get_type()) #define LASSO_ECP_REQUEST(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_ECP_REQUEST, LassoEcpRequest)) #define LASSO_ECP_REQUEST_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_ECP_REQUEST, LassoEcpRequestClass)) #define LASSO_IS_ECP_REQUEST(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_ECP_REQUEST)) #define LASSO_IS_ECP_REQUEST_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_ECP_REQUEST)) #define LASSO_ECP_REQUEST_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_ECP_REQUEST, LassoEcpRequestClass)) typedef struct _LassoEcpRequest LassoEcpRequest; typedef struct _LassoEcpRequestClass LassoEcpRequestClass; struct _LassoEcpRequest { LassoNode parent; LassoSaml2NameID *Issuer; LassoSamlp2IDPList *IDPList; gboolean mustUnderstand; gchar *actor; gchar *ProviderName; gboolean IsPassive; }; struct _LassoEcpRequestClass { LassoNodeClass parent; }; LASSO_EXPORT int lasso_ecp_request_validate(LassoEcpRequest *request); LASSO_EXPORT GType lasso_ecp_request_get_type(void); LASSO_EXPORT LassoNode* lasso_ecp_request_new(const gchar *Issuer, gboolean IsPassive, const gchar *ProviderName, LassoSamlp2IDPList *IDPList); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_ECP_REQUEST_H__ */ lasso-2.8.2/lasso/xml/ecp/PaxHeaders/ecp_request.c0000644000000000000000000000013114364261206017100 xustar0030 mtime=1674666630.754769169 30 atime=1678814183.025173124 29 ctime=1678814320.88195258 lasso-2.8.2/lasso/xml/ecp/ecp_request.c0000644000175000017500000001515614364261206022361 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "ecp_request.h" /** * SECTION:ecp_request * @short_description: <ecp:Request> * *
Schema fragment for ecp:Request * * * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* public methods */ /*****************************************************************************/ /** * lasso_ecp_request_validate: * @request: the #LassoEcpRequest object to validate * * Validates the #LassoEcpRequest object conforms to required values. * * * mustUnderstand must be TRUE * actor must be equal to #LASSO_SOAP_ENV_ACTOR * * * Returns: 0 on success, error code otherwise **/ int lasso_ecp_request_validate(LassoEcpRequest *request) { g_return_val_if_fail(LASSO_IS_ECP_REQUEST(request), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); if (!request->mustUnderstand) { error("%s.mustUnderstand must be True", G_OBJECT_CLASS_NAME(request)); return LASSO_XML_ERROR_ATTR_VALUE_INVALID; } if (request->actor == NULL) { error("%s.actor missing", G_OBJECT_CLASS_NAME(request)); return LASSO_XML_ERROR_ATTR_NOT_FOUND; } if (lasso_strisnotequal(request->actor, LASSO_SOAP_ENV_ACTOR)) { error("%s.actor invalid, must be \"%s\" not \"%s\"", G_OBJECT_CLASS_NAME(request), LASSO_SOAP_ENV_ACTOR, request->actor); return LASSO_XML_ERROR_ATTR_VALUE_INVALID; } return 0; } /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "Issuer", SNIPPET_NODE, G_STRUCT_OFFSET(LassoEcpRequest, Issuer), "LassoSaml2NameID", LASSO_SAML2_ASSERTION_PREFIX, LASSO_SAML2_ASSERTION_HREF}, { "IDPList", SNIPPET_NODE, G_STRUCT_OFFSET(LassoEcpRequest, IDPList), NULL, LASSO_SAML2_PROTOCOL_PREFIX, LASSO_SAML2_PROTOCOL_HREF}, { "mustUnderstand", SNIPPET_ATTRIBUTE | SNIPPET_BOOLEAN, G_STRUCT_OFFSET(LassoEcpRequest, mustUnderstand), NULL, LASSO_SOAP_ENV_PREFIX, LASSO_SOAP_ENV_HREF}, { "actor", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoEcpRequest, actor), NULL, LASSO_SOAP_ENV_PREFIX, LASSO_SOAP_ENV_HREF}, { "ProviderName", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoEcpRequest, ProviderName), NULL, NULL, NULL}, { "IsPassive", SNIPPET_ATTRIBUTE | SNIPPET_BOOLEAN, G_STRUCT_OFFSET(LassoEcpRequest, IsPassive), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; static int init_from_xml(LassoNode *node, xmlNode *xmlnode) { lasso_error_t rc = 0; LassoEcpRequest *request = LASSO_ECP_REQUEST(node); lasso_check_good_rc(parent_class->init_from_xml(node, xmlnode)); lasso_check_good_rc(lasso_ecp_request_validate(request)); cleanup: return rc; } /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void instance_init(LassoEcpRequest *node, G_GNUC_UNUSED void *unused) { node->IsPassive = TRUE; } static void class_init(LassoEcpRequestClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); nclass->init_from_xml = init_from_xml; lasso_node_class_set_nodename(nclass, "Request"); lasso_node_class_set_ns(nclass, LASSO_ECP_HREF, LASSO_ECP_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_ecp_request_get_type() { static GType ecp_request_type = 0; if (!ecp_request_type) { static const GTypeInfo request_info = { sizeof (LassoEcpRequestClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoEcpRequest), 0, (GInstanceInitFunc) instance_init, NULL }; ecp_request_type = g_type_register_static(LASSO_TYPE_NODE, "LassoEcpRequest", &request_info, 0); } return ecp_request_type; } /** * lasso_ecp_request_new: * @Issuer: * @IsPassive: * @ProviderName: * @IDPList: (allow-none): * * Creates and intializes new #LassoEcpRequest object. * * The #LassoEcpRequest object is initialized as follows: * * Issuer = @Issuer * IsPassive = @IsPassive * ProviderName = @ProviderName * IDPList = @IDPList (if non-NULL) * mustUnderstand = TRUE * actor = #LASSO_SOAP_ENV_ACTOR * * * Returns: a newly created and initialized #LassoEcpRequest object **/ LassoNode* lasso_ecp_request_new(const char *Issuer, gboolean IsPassive, const gchar *ProviderName, LassoSamlp2IDPList *IDPList) { LassoEcpRequest *request; request = g_object_new(LASSO_TYPE_ECP_REQUEST, NULL); request->Issuer = LASSO_SAML2_NAME_ID(lasso_saml2_name_id_new_with_string((char*)Issuer)); request->IsPassive = IsPassive; request->ProviderName = g_strdup(ProviderName); if (IDPList) { lasso_assign_gobject(request->IDPList, IDPList); } request->mustUnderstand = TRUE; request->actor = g_strdup(LASSO_SOAP_ENV_ACTOR); return LASSO_NODE(request); } lasso-2.8.2/lasso/xml/ecp/PaxHeaders/ecp_response.h0000644000000000000000000000013214114336625017255 xustar0030 mtime=1630649749.826436995 30 atime=1678814151.012993868 30 ctime=1678814320.877952558 lasso-2.8.2/lasso/xml/ecp/ecp_response.h0000644000175000017500000000431714114336625022532 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_ECP_RESPONSE_H__ #define __LASSO_ECP_RESPONSE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "../xml.h" #define LASSO_TYPE_ECP_RESPONSE (lasso_ecp_response_get_type()) #define LASSO_ECP_RESPONSE(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_ECP_RESPONSE, LassoEcpResponse)) #define LASSO_ECP_RESPONSE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_ECP_RESPONSE, LassoEcpResponseClass)) #define LASSO_IS_ECP_RESPONSE(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_ECP_RESPONSE)) #define LASSO_IS_ECP_RESPONSE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_ECP_RESPONSE)) #define LASSO_ECP_RESPONSE_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_ECP_RESPONSE, LassoEcpResponseClass)) typedef struct _LassoEcpResponse LassoEcpResponse; typedef struct _LassoEcpResponseClass LassoEcpResponseClass; struct _LassoEcpResponse { LassoNode parent; gboolean mustUnderstand; gchar *actor; gchar *AssertionConsumerServiceURL; }; struct _LassoEcpResponseClass { LassoNodeClass parent; }; LASSO_EXPORT int lasso_ecp_response_validate(LassoEcpResponse *response); LASSO_EXPORT GType lasso_ecp_response_get_type(void); LASSO_EXPORT LassoNode* lasso_ecp_response_new(const gchar *AssertionConsumerServiceURL); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_ECP_RESPONSE_H__ */ lasso-2.8.2/lasso/xml/ecp/PaxHeaders/ecp_relaystate.h0000644000000000000000000000013114114336625017573 xustar0030 mtime=1630649749.826436995 30 atime=1678814151.012993868 29 ctime=1678814320.88195258 lasso-2.8.2/lasso/xml/ecp/ecp_relaystate.h0000644000175000017500000000435314114336625023051 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_ECP_RELAYSTATE_H__ #define __LASSO_ECP_RELAYSTATE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "../xml.h" #define LASSO_TYPE_ECP_RELAYSTATE (lasso_ecp_relay_state_get_type()) #define LASSO_ECP_RELAYSTATE(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_ECP_RELAYSTATE, LassoEcpRelayState)) #define LASSO_ECP_RELAYSTATE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_ECP_RELAYSTATE, LassoEcpRelayStateClass)) #define LASSO_IS_ECP_RELAYSTATE(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_ECP_RELAYSTATE)) #define LASSO_IS_ECP_RELAYSTATE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_ECP_RELAYSTATE)) #define LASSO_ECP_RELAYSTATE_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_ECP_RELAYSTATE, LassoEcpRelayStateClass)) typedef struct _LassoEcpRelayState LassoEcpRelayState; typedef struct _LassoEcpRelayStateClass LassoEcpRelayStateClass; struct _LassoEcpRelayState { LassoNode parent; gchar *RelayState; gboolean mustUnderstand; gchar *actor; }; struct _LassoEcpRelayStateClass { LassoNodeClass parent; }; LASSO_EXPORT int lasso_ecp_relay_state_validate(LassoEcpRelayState *relaystate); LASSO_EXPORT GType lasso_ecp_relay_state_get_type(void); LASSO_EXPORT LassoNode* lasso_ecp_relay_state_new(const gchar *RelayState); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_ECP_RELAYSTATE_H__ */ lasso-2.8.2/lasso/xml/ecp/PaxHeaders/ecp_relaystate.c0000644000000000000000000000013214114336625017567 xustar0030 mtime=1630649749.826436995 30 atime=1678814184.061178937 30 ctime=1678814320.885952604 lasso-2.8.2/lasso/xml/ecp/ecp_relaystate.c0000644000175000017500000001357714114336625023054 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "ecp_relaystate.h" /** * SECTION:ecp_relaystate * @short_description: <ecp:RelayState> * *
Schema fragment for ecp:RelayState * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* public methods */ /*****************************************************************************/ /** * lasso_ecp_relay_state_validate: * @relaystate: The #LassoEcpRelayState * * Validates the #LassoEcpRelayState object conforms to required values. * * * RelayState must be non-NULL * mustUnderstand must be TRUE * actor must be equal to #LASSO_SOAP_ENV_ACTOR * * * Returns: 0 on success, error code otherwise **/ int lasso_ecp_relay_state_validate(LassoEcpRelayState *relaystate) { g_return_val_if_fail(LASSO_IS_ECP_RELAYSTATE(relaystate), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); if (relaystate->RelayState == NULL) { error("%s.RelayState missing", G_OBJECT_CLASS_NAME(relaystate)); return LASSO_XML_ERROR_NODE_CONTENT_NOT_FOUND; } if (!relaystate->mustUnderstand) { error("%s.mustUnderstand must be True", G_OBJECT_CLASS_NAME(relaystate)); return LASSO_XML_ERROR_ATTR_VALUE_INVALID; } if (relaystate->actor == NULL) { error("%s.actor missing", G_OBJECT_CLASS_NAME(relaystate)); return LASSO_XML_ERROR_ATTR_NOT_FOUND; } if (lasso_strisnotequal(relaystate->actor, LASSO_SOAP_ENV_ACTOR)) { error("%s.actor invalid, must be \"%s\" not \"%s\"", G_OBJECT_CLASS_NAME(relaystate), LASSO_SOAP_ENV_ACTOR, relaystate->actor); return LASSO_XML_ERROR_ATTR_VALUE_INVALID; } return 0; } /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "RelayState", SNIPPET_TEXT_CHILD, G_STRUCT_OFFSET(LassoEcpRelayState, RelayState), NULL, NULL, NULL}, { "mustUnderstand", SNIPPET_ATTRIBUTE | SNIPPET_BOOLEAN, G_STRUCT_OFFSET(LassoEcpRelayState, mustUnderstand), NULL, LASSO_SOAP_ENV_PREFIX, LASSO_SOAP_ENV_HREF}, { "actor", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoEcpRelayState, actor), NULL, LASSO_SOAP_ENV_PREFIX, LASSO_SOAP_ENV_HREF}, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; static int init_from_xml(LassoNode *node, xmlNode *xmlnode) { lasso_error_t rc = 0; LassoEcpRelayState *relaystate = LASSO_ECP_RELAYSTATE(node); lasso_check_good_rc(parent_class->init_from_xml(node, xmlnode)); lasso_check_good_rc(lasso_ecp_relay_state_validate(relaystate)); cleanup: return rc; } /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoEcpRelayStateClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); nclass->init_from_xml = init_from_xml; lasso_node_class_set_nodename(nclass, "RelayState"); lasso_node_class_set_ns(nclass, LASSO_ECP_HREF, LASSO_ECP_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_ecp_relay_state_get_type() { static GType ecp_relay_state_type = 0; if (!ecp_relay_state_type) { static const GTypeInfo relaystate_info = { sizeof (LassoEcpRelayStateClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoEcpRelayState), 0, NULL, NULL }; ecp_relay_state_type = g_type_register_static(LASSO_TYPE_NODE, "LassoEcpRelayState", &relaystate_info, 0); } return ecp_relay_state_type; } /** * lasso_ecp_relay_state_new: * @RelayState: (allow-none): * * * The #LassoEcpRelayState object is initialized as follows: * * RelayState = @RelayState (if non-NULL) * mustUnderstand = TRUE * actor = #LASSO_SOAP_ENV_ACTOR * * * Returns: a newly created and initialized #LassoEcpRelayState object **/ LassoNode* lasso_ecp_relay_state_new(const gchar *RelayState) { LassoEcpRelayState *relaystate; relaystate = g_object_new(LASSO_TYPE_ECP_RELAYSTATE, NULL); if (RelayState) { relaystate->RelayState = g_strdup(RelayState); } relaystate->mustUnderstand = TRUE; relaystate->actor = g_strdup(LASSO_SOAP_ENV_ACTOR); return LASSO_NODE(relaystate); } lasso-2.8.2/lasso/xml/PaxHeaders/saml_assertion.h0000644000000000000000000000013214114336625017044 xustar0030 mtime=1630649749.874437517 30 atime=1678814151.024993934 30 ctime=1678814320.265949073 lasso-2.8.2/lasso/xml/saml_assertion.h0000644000175000017500000000601114114336625022312 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAML_ASSERTION_H__ #define __LASSO_SAML_ASSERTION_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "xml.h" #include "saml_advice.h" #include "saml_authentication_statement.h" #include "saml_conditions.h" #include "saml_statement_abstract.h" #include "saml_subject_statement.h" #include "saml_attribute_statement.h" #define LASSO_TYPE_SAML_ASSERTION (lasso_saml_assertion_get_type()) #define LASSO_SAML_ASSERTION(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML_ASSERTION, LassoSamlAssertion)) #define LASSO_SAML_ASSERTION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML_ASSERTION, LassoSamlAssertionClass)) #define LASSO_IS_SAML_ASSERTION(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML_ASSERTION)) #define LASSO_IS_SAML_ASSERTION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML_ASSERTION)) #define LASSO_SAML_ASSERTION_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML_ASSERTION, LassoSamlAssertionClass)) typedef struct _LassoSamlAssertion LassoSamlAssertion; typedef struct _LassoSamlAssertionClass LassoSamlAssertionClass; struct _LassoSamlAssertion { LassoNode parent; /*< public >*/ /* */ LassoSamlConditions *Conditions; /* */ LassoSamlAdvice *Advice; void *Statement; /* XXX LassoSamlStatement missing from lasso */ LassoSamlSubjectStatement *SubjectStatement; LassoSamlAuthenticationStatement *AuthenticationStatement; void *AuthorizationDecisionStatement; /* XXX LassoSamlAuthorizationDecisionStatement missing from lasso*/ LassoSamlAttributeStatement *AttributeStatement; int MajorVersion; int MinorVersion; char *AssertionID; char *Issuer; char *IssueInstant; /* ds:Signature stuff */ LassoSignatureType sign_type; LassoSignatureMethod sign_method; char *private_key_file; char *certificate_file; }; struct _LassoSamlAssertionClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_saml_assertion_get_type(void); LASSO_EXPORT LassoSamlAssertion* lasso_saml_assertion_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAML_ASSERTION_H__ */ lasso-2.8.2/lasso/xml/PaxHeaders/lib_authn_response.c0000644000000000000000000000013214114336625017677 xustar0030 mtime=1630649749.858437342 30 atime=1678814192.377225626 30 ctime=1678814320.317949369 lasso-2.8.2/lasso/xml/lib_authn_response.c0000644000175000017500000001045214114336625023151 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "private.h" #include "lib_authn_response.h" /** * SECTION:lib_authn_response * @short_description: <lib:AuthnResponse> * *
Schema fragment for lib:AuthnResponse * * * * * * * * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "Extension", SNIPPET_EXTENSION, G_STRUCT_OFFSET(LassoLibAuthnResponse, Extension), NULL, NULL, NULL}, { "ProviderID", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoLibAuthnResponse, ProviderID), NULL, NULL, NULL}, { "RelayState", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoLibAuthnResponse, RelayState), NULL, NULL, NULL}, { "consent", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoLibAuthnResponse, consent), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoLibAuthnResponseClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "AuthnResponse"); lasso_node_class_set_ns(nclass, LASSO_LIB_HREF, LASSO_LIB_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_lib_authn_response_get_type() { static GType authn_response_type = 0; if (!authn_response_type) { static const GTypeInfo authn_response_info = { sizeof (LassoLibAuthnResponseClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoLibAuthnResponse), 0, NULL, NULL }; authn_response_type = g_type_register_static(LASSO_TYPE_SAMLP_RESPONSE, "LassoLibAuthnResponse", &authn_response_info, 0); } return authn_response_type; } /** * lasso_lib_authn_response_new: * @providerID: the identity provider ID * @request: the #LassoLibAuthnRequest it is a response to * * Creates a new #LassoLibAuthnResponse object. * * Return value: a newly created #LassoLibAuthnResponse object **/ LassoNode* lasso_lib_authn_response_new(char *providerID, LassoLibAuthnRequest *request) { LassoLibAuthnResponse *response; response = g_object_new(LASSO_TYPE_LIB_AUTHN_RESPONSE, NULL); if (providerID) { lasso_samlp_response_abstract_fill( LASSO_SAMLP_RESPONSE_ABSTRACT(response), LASSO_SAMLP_REQUEST_ABSTRACT(request)->RequestID, request->ProviderID); response->ProviderID = g_strdup(providerID); response->RelayState = g_strdup(request->RelayState); } return LASSO_NODE(response); } lasso-2.8.2/lasso/xml/PaxHeaders/paos_request.h0000644000000000000000000000013214114336625016533 xustar0030 mtime=1630649749.862437387 30 atime=1678814151.016993891 30 ctime=1678814320.261949051 lasso-2.8.2/lasso/xml/paos_request.h0000644000175000017500000000434214114336625022006 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_PAOS_REQUEST_H__ #define __LASSO_PAOS_REQUEST_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #define LASSO_TYPE_PAOS_REQUEST (lasso_paos_request_get_type()) #define LASSO_PAOS_REQUEST(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_PAOS_REQUEST, LassoPaosRequest)) #define LASSO_PAOS_REQUEST_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_PAOS_REQUEST, LassoPaosRequestClass)) #define LASSO_IS_PAOS_REQUEST(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_PAOS_REQUEST)) #define LASSO_IS_PAOS_REQUEST_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_PAOS_REQUEST)) #define LASSO_PAOS_REQUEST_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_PAOS_REQUEST, LassoPaosRequestClass)) typedef struct _LassoPaosRequest LassoPaosRequest; typedef struct _LassoPaosRequestClass LassoPaosRequestClass; struct _LassoPaosRequest { LassoNode parent; gchar *responseConsumerURL; gchar *messageID; gchar *service; gboolean mustUnderstand; gchar *actor; }; struct _LassoPaosRequestClass { LassoNodeClass parent; }; LASSO_EXPORT int lasso_paos_request_validate(LassoPaosRequest *node); LASSO_EXPORT GType lasso_paos_request_get_type(void); LASSO_EXPORT LassoNode* lasso_paos_request_new(const gchar *responseConsumerURL, const gchar *messageID); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_PAOS_REQUEST_H__ */ lasso-2.8.2/lasso/xml/PaxHeaders/saml_attribute.h0000644000000000000000000000013214114336625017040 xustar0030 mtime=1630649749.874437517 30 atime=1678814151.024993934 30 ctime=1678814320.269949096 lasso-2.8.2/lasso/xml/saml_attribute.h0000644000175000017500000000436614114336625022321 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAML_ATTRIBUTE_H__ #define __LASSO_SAML_ATTRIBUTE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "saml_attribute_designator.h" #define LASSO_TYPE_SAML_ATTRIBUTE (lasso_saml_attribute_get_type()) #define LASSO_SAML_ATTRIBUTE(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML_ATTRIBUTE, LassoSamlAttribute)) #define LASSO_SAML_ATTRIBUTE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML_ATTRIBUTE, LassoSamlAttributeClass)) #define LASSO_IS_SAML_ATTRIBUTE(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML_ATTRIBUTE)) #define LASSO_IS_SAML_ATTRIBUTE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML_ATTRIBUTE)) #define LASSO_SAML_ATTRIBUTE_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML_ATTRIBUTE, LassoSamlAttributeClass)) typedef struct _LassoSamlAttribute LassoSamlAttribute; typedef struct _LassoSamlAttributeClass LassoSamlAttributeClass; struct _LassoSamlAttribute { LassoSamlAttributeDesignator parent; /*< public >*/ gchar *attributeName; gchar *attributeNameSpace; GList *AttributeValue; /* of LassoNode */ }; struct _LassoSamlAttributeClass { LassoSamlAttributeDesignatorClass parent; }; LASSO_EXPORT GType lasso_saml_attribute_get_type(void); LASSO_EXPORT LassoSamlAttribute* lasso_saml_attribute_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAML_ATTRIBUTE_H__ */ lasso-2.8.2/lasso/xml/PaxHeaders/saml_subject_statement_abstract.h0000644000000000000000000000013214114336625022443 xustar0030 mtime=1630649749.874437517 30 atime=1678814151.024993934 30 ctime=1678814320.293949233 lasso-2.8.2/lasso/xml/saml_subject_statement_abstract.h0000644000175000017500000000514114114336625025714 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAML_SUBJECT_STATEMENT_ABSTRACT_H__ #define __LASSO_SAML_SUBJECT_STATEMENT_ABSTRACT_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "saml_statement_abstract.h" #include "saml_subject.h" #define LASSO_TYPE_SAML_SUBJECT_STATEMENT_ABSTRACT \ (lasso_saml_subject_statement_abstract_get_type()) #define LASSO_SAML_SUBJECT_STATEMENT_ABSTRACT(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML_SUBJECT_STATEMENT_ABSTRACT, \ LassoSamlSubjectStatementAbstract)) #define LASSO_SAML_SUBJECT_STATEMENT_ABSTRACT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML_SUBJECT_STATEMENT_ABSTRACT, \ LassoSamlSubjectStatementAbstractClass)) #define LASSO_IS_SAML_SUBJECT_STATEMENT_ABSTRACT(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML_SUBJECT_STATEMENT_ABSTRACT)) #define LASSO_IS_SAML_SUBJECT_STATEMENT_ABSTRACT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML_SUBJECT_STATEMENT_ABSTRACT)) #define LASSO_SAML_SUBJECT_STATEMENT_ABSTRACT_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML_SUBJECT_STATEMENT_ABSTRACT, \ LassoSamlSubjectStatementAbstractClass)) typedef struct _LassoSamlSubjectStatementAbstract LassoSamlSubjectStatementAbstract; typedef struct _LassoSamlSubjectStatementAbstractClass LassoSamlSubjectStatementAbstractClass; struct _LassoSamlSubjectStatementAbstract { LassoSamlStatementAbstract parent; /*< public >*/ /* */ LassoSamlSubject *Subject; }; struct _LassoSamlSubjectStatementAbstractClass { LassoSamlStatementAbstractClass parent; }; LASSO_EXPORT GType lasso_saml_subject_statement_abstract_get_type(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAML_SUBJECT_STATEMENT_ABSTRACT_H__ */ lasso-2.8.2/lasso/xml/PaxHeaders/tools.h0000644000000000000000000000013214114336625015161 xustar0030 mtime=1630649749.882437604 30 atime=1678814151.028993957 30 ctime=1678814320.305949301 lasso-2.8.2/lasso/xml/tools.h0000644000175000017500000000223614114336625020434 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_TOOLS_H__ #define __LASSO_TOOLS_H__ LASSO_EXPORT char* lasso_build_unique_id(unsigned int size); LASSO_EXPORT guint lasso_log_set_handler(GLogLevelFlags log_levels, GLogFunc log_func, gpointer user_data); LASSO_EXPORT void lasso_log_remove_handler(guint handler_id); #endif /* __LASSO_TOOLS_H__ */ lasso-2.8.2/lasso/xml/PaxHeaders/lib_subject.h0000644000000000000000000000013214114336625016306 xustar0030 mtime=1630649749.858437342 30 atime=1678814151.016993891 30 ctime=1678814320.257949028 lasso-2.8.2/lasso/xml/lib_subject.h0000644000175000017500000000425414114336625021563 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_LIB_SUBJECT_H__ #define __LASSO_LIB_SUBJECT_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "saml_subject.h" #include "saml_name_identifier.h" #define LASSO_TYPE_LIB_SUBJECT (lasso_lib_subject_get_type()) #define LASSO_LIB_SUBJECT(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_LIB_SUBJECT, LassoLibSubject)) #define LASSO_LIB_SUBJECT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_LIB_SUBJECT, LassoLibSubjectClass)) #define LASSO_IS_LIB_SUBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_LIB_SUBJECT)) #define LASSO_IS_LIB_SUBJECT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_LIB_SUBJECT)) #define LASSO_LIB_SUBJECT_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_LIB_SUBJECT, LassoLibSubjectClass)) typedef struct _LassoLibSubject LassoLibSubject; typedef struct _LassoLibSubjectClass LassoLibSubjectClass; struct _LassoLibSubject { LassoSamlSubject parent; /*< public >*/ /* */ LassoSamlNameIdentifier *IDPProvidedNameIdentifier; }; struct _LassoLibSubjectClass { LassoSamlSubjectClass parent; }; LASSO_EXPORT GType lasso_lib_subject_get_type(void); LASSO_EXPORT LassoLibSubject* lasso_lib_subject_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_LIB_SUBJECT_H__ */ lasso-2.8.2/lasso/xml/PaxHeaders/saml_statement_abstract.h0000644000000000000000000000013214114336625020724 xustar0030 mtime=1630649749.874437517 30 atime=1678814151.024993934 30 ctime=1678814320.285949188 lasso-2.8.2/lasso/xml/saml_statement_abstract.h0000644000175000017500000000437514114336625024205 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAML_STATEMENT_ABSTRACT_H__ #define __LASSO_SAML_STATEMENT_ABSTRACT_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "xml.h" #define LASSO_TYPE_SAML_STATEMENT_ABSTRACT (lasso_saml_statement_abstract_get_type()) #define LASSO_SAML_STATEMENT_ABSTRACT(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML_STATEMENT_ABSTRACT, \ LassoSamlStatementAbstract)) #define LASSO_SAML_STATEMENT_ABSTRACT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML_STATEMENT_ABSTRACT, \ LassoSamlStatementAbstractClass)) #define LASSO_IS_SAML_STATEMENT_ABSTRACT(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML_STATEMENT_ABSTRACT)) #define LASSO_IS_SAML_STATEMENT_ABSTRACT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML_STATEMENT_ABSTRACT)) #define LASSO_SAML_STATEMENT_ABSTRACT_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML_STATEMENT_ABSTRACT, \ LassoSamlStatementAbstractClass)) typedef struct _LassoSamlStatementAbstract LassoSamlStatementAbstract; typedef struct _LassoSamlStatementAbstractClass LassoSamlStatementAbstractClass; struct _LassoSamlStatementAbstract { LassoNode parent; }; struct _LassoSamlStatementAbstractClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_saml_statement_abstract_get_type(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAML_STATEMENT_ABSTRACT_H__ */ lasso-2.8.2/lasso/xml/PaxHeaders/lib_register_name_identifier_response.c0000644000000000000000000000013214114336625023606 xustar0030 mtime=1630649749.858437342 30 atime=1678814197.745255789 30 ctime=1678814320.333949461 lasso-2.8.2/lasso/xml/lib_register_name_identifier_response.c0000644000175000017500000001107614114336625027063 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "private.h" #include "lib_register_name_identifier_response.h" /** * SECTION:lib_register_name_identifier_response * @short_description: <lib:RegisterNameIdentifierResponse> * *
Schema fragment for lib:RegisterNameIdentifierResponse * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoLibRegisterNameIdentifierResponseClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "RegisterNameIdentifierResponse"); lasso_node_class_set_ns(nclass, LASSO_LIB_HREF, LASSO_LIB_PREFIX); } GType lasso_lib_register_name_identifier_response_get_type() { static GType register_name_identifier_response_type = 0; if (!register_name_identifier_response_type) { static const GTypeInfo register_name_identifier_response_info = { sizeof (LassoLibRegisterNameIdentifierResponseClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoLibRegisterNameIdentifierResponse), 0, NULL, NULL, }; register_name_identifier_response_type = g_type_register_static( LASSO_TYPE_LIB_STATUS_RESPONSE, "LassoLibRegisterNameIdentifierResponse", ®ister_name_identifier_response_info, 0); } return register_name_identifier_response_type; } /** * lasso_lib_register_name_identifier_response_new: * * Creates a new #LassoLibRegisterNameIdentifierResponse object. * * Return value: a newly created #LassoLibRegisterNameIdentifierResponse object **/ LassoNode* lasso_lib_register_name_identifier_response_new() { return g_object_new(LASSO_TYPE_LIB_REGISTER_NAME_IDENTIFIER_RESPONSE, NULL); } /** * lasso_lib_register_name_identifier_response_new_full: * @providerID: the providerID of the responder * @statusCodeValue: a response status code * @request: the request which is answered by this response * @sign_type: a #LassoSignatureType value * @sign_method: a #LassoSignatureMethod value * * Creates a new #LassoLibRegisterNameIdentifierResponse object and initializes * it with the parameters. * * Return value: a newly created #LassoLibRegisterNameIdentifierResponse object **/ LassoNode* lasso_lib_register_name_identifier_response_new_full(const char *providerID, const char *statusCodeValue, LassoLibRegisterNameIdentifierRequest *request, LassoSignatureType sign_type, LassoSignatureMethod sign_method) { LassoLibStatusResponse *response; response = g_object_new(LASSO_TYPE_LIB_REGISTER_NAME_IDENTIFIER_RESPONSE, NULL); LASSO_LIB_STATUS_RESPONSE(response)->ProviderID = g_strdup(providerID); lasso_samlp_response_abstract_fill( LASSO_SAMLP_RESPONSE_ABSTRACT(response), LASSO_SAMLP_REQUEST_ABSTRACT(request)->RequestID, request->ProviderID); LASSO_SAMLP_RESPONSE_ABSTRACT(response)->sign_type = sign_type; LASSO_SAMLP_RESPONSE_ABSTRACT(response)->sign_method = sign_method; response->RelayState = g_strdup(request->RelayState); response->Status = lasso_samlp_status_new(); response->Status->StatusCode = lasso_samlp_status_code_new(); response->Status->StatusCode->Value = g_strdup(statusCodeValue); return LASSO_NODE(response); } lasso-2.8.2/lasso/xml/PaxHeaders/lib_register_name_identifier_response.h0000644000000000000000000000013214114336625023613 xustar0030 mtime=1630649749.858437342 30 atime=1678814151.016993891 30 ctime=1678814320.249948983 lasso-2.8.2/lasso/xml/lib_register_name_identifier_response.h0000644000175000017500000000576614114336625027101 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_LIB_REGISTER_NAME_IDENTIFIER_RESPONSE_H__ #define __LASSO_LIB_REGISTER_NAME_IDENTIFIER_RESPONSE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "lib_register_name_identifier_request.h" #include "lib_status_response.h" #define LASSO_TYPE_LIB_REGISTER_NAME_IDENTIFIER_RESPONSE \ (lasso_lib_register_name_identifier_response_get_type()) #define LASSO_LIB_REGISTER_NAME_IDENTIFIER_RESPONSE(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_LIB_REGISTER_NAME_IDENTIFIER_RESPONSE, \ LassoLibRegisterNameIdentifierResponse)) #define LASSO_LIB_REGISTER_NAME_IDENTIFIER_RESPONSE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_LIB_REGISTER_NAME_IDENTIFIER_RESPONSE, \ LassoLibRegisterNameIdentifierResponseClass)) #define LASSO_IS_LIB_REGISTER_NAME_IDENTIFIER_RESPONSE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ LASSO_TYPE_LIB_REGISTER_NAME_IDENTIFIER_RESPONSE)) #define LASSO_IS_LIB_REGISTER_NAME_IDENTIFIER_RESPONSE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_LIB_REGISTER_NAME_IDENTIFIER_RESPONSE)) #define LASSO_LIB_REGISTER_NAME_IDENTIFIER_RESPONSE_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_LIB_REGISTER_NAME_IDENTIFIER_RESPONSE, \ LassoLibRegisterNameIdentifierResponseClass)) typedef struct _LassoLibRegisterNameIdentifierResponse LassoLibRegisterNameIdentifierResponse; typedef struct _LassoLibRegisterNameIdentifierResponseClass \ LassoLibRegisterNameIdentifierResponseClass; struct _LassoLibRegisterNameIdentifierResponse { LassoLibStatusResponse parent; }; struct _LassoLibRegisterNameIdentifierResponseClass { LassoLibStatusResponseClass parent; }; LASSO_EXPORT GType lasso_lib_register_name_identifier_response_get_type(void); LASSO_EXPORT LassoNode* lasso_lib_register_name_identifier_response_new(void); LASSO_EXPORT LassoNode* lasso_lib_register_name_identifier_response_new_full( const char *providerID, const char *statusCodeValue, LassoLibRegisterNameIdentifierRequest *request, LassoSignatureType sign_type, LassoSignatureMethod sign_method); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_LIB_REGISTER_NAME_IDENTIFIER_RESPONSE_H__ */ lasso-2.8.2/lasso/xml/PaxHeaders/samlp_response_abstract.h0000644000000000000000000000013214114336625020736 xustar0030 mtime=1630649749.874437517 30 atime=1678814151.024993934 30 ctime=1678814320.297949256 lasso-2.8.2/lasso/xml/samlp_response_abstract.h0000644000175000017500000000613514114336625024213 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAMLP_RESPONSE_ABSTRACT_H__ #define __LASSO_SAMLP_RESPONSE_ABSTRACT_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "xml.h" #define LASSO_TYPE_SAMLP_RESPONSE_ABSTRACT (lasso_samlp_response_abstract_get_type()) #define LASSO_SAMLP_RESPONSE_ABSTRACT(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAMLP_RESPONSE_ABSTRACT, \ LassoSamlpResponseAbstract)) #define LASSO_SAMLP_RESPONSE_ABSTRACT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAMLP_RESPONSE_ABSTRACT, \ LassoSamlpResponseAbstractClass)) #define LASSO_IS_SAMLP_RESPONSE_ABSTRACT(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAMLP_RESPONSE_ABSTRACT)) #define LASSO_IS_SAMLP_RESPONSE_ABSTRACT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAMLP_RESPONSE_ABSTRACT)) #define LASSO_SAMLP_RESPONSE_ABSTRACT_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAMLP_RESPONSE_ABSTRACT, \ LassoSamlpResponseAbstractClass)) typedef struct _LassoSamlpResponseAbstract LassoSamlpResponseAbstract; typedef struct _LassoSamlpResponseAbstractClass LassoSamlpResponseAbstractClass; struct _LassoSamlpResponseAbstract { LassoNode parent; /*< public >*/ /* */ char *ResponseID; /* */ char *InResponseTo; /* */ int MajorVersion; /* */ int MinorVersion; /* */ char *IssueInstant; /* */ char *Recipient; /* ds:Signature stuffs */ LassoSignatureType sign_type; LassoSignatureMethod sign_method; char *private_key_file; char *certificate_file; }; struct _LassoSamlpResponseAbstractClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_samlp_response_abstract_get_type (void); LASSO_EXPORT void lasso_samlp_response_abstract_fill(LassoSamlpResponseAbstract *response, const char *InResponseTo, const char *Recipient); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAMLP_RESPONSE_ABSTRACT_H__ */ lasso-2.8.2/lasso/xml/PaxHeaders/samlp_status_code.h0000644000000000000000000000013214114336625017532 xustar0030 mtime=1630649749.878437561 30 atime=1678814151.028993957 30 ctime=1678814320.301949278 lasso-2.8.2/lasso/xml/samlp_status_code.h0000644000175000017500000000451014114336625023002 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAMLP_STATUS_CODE_H__ #define __LASSO_SAMLP_STATUS_CODE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "xml.h" #define LASSO_TYPE_SAMLP_STATUS_CODE (lasso_samlp_status_code_get_type()) #define LASSO_SAMLP_STATUS_CODE(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAMLP_STATUS_CODE, LassoSamlpStatusCode)) #define LASSO_SAMLP_STATUS_CODE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAMLP_STATUS_CODE, LassoSamlpStatusCodeClass)) #define LASSO_IS_SAMLP_STATUS_CODE(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAMLP_STATUS_CODE)) #define LASSO_IS_SAMLP_STATUS_CODE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAMLP_STATUS_CODE)) #define LASSO_SAMLP_STATUS_CODE_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAMLP_STATUS_CODE, LassoSamlpStatusCodeClass)) typedef struct _LassoSamlpStatusCode LassoSamlpStatusCode; typedef struct _LassoSamlpStatusCodeClass LassoSamlpStatusCodeClass; struct _LassoSamlpStatusCode { LassoNode parent; /*< public >*/ /* */ LassoSamlpStatusCode *StatusCode; /* */ char *Value; }; struct _LassoSamlpStatusCodeClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_samlp_status_code_get_type(void); LASSO_EXPORT LassoSamlpStatusCode* lasso_samlp_status_code_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAMLP_STATUS_CODE_H__ */ lasso-2.8.2/lasso/xml/PaxHeaders/lib_authn_response.h0000644000000000000000000000013214114336625017704 xustar0030 mtime=1630649749.858437342 30 atime=1678814151.012993868 30 ctime=1678814320.229948869 lasso-2.8.2/lasso/xml/lib_authn_response.h0000644000175000017500000000513714114336625023162 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_LIB_AUTHN_RESPONSE_H__ #define __LASSO_LIB_AUTHN_RESPONSE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "samlp_response.h" #include "lib_authn_request.h" #define LASSO_TYPE_LIB_AUTHN_RESPONSE (lasso_lib_authn_response_get_type()) #define LASSO_LIB_AUTHN_RESPONSE(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_LIB_AUTHN_RESPONSE, LassoLibAuthnResponse)) #define LASSO_LIB_AUTHN_RESPONSE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ LASSO_TYPE_LIB_AUTHN_RESPONSE, LassoLibAuthnResponseClass)) #define LASSO_IS_LIB_AUTHN_RESPONSE(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_LIB_AUTHN_RESPONSE)) #define LASSO_IS_LIB_AUTHN_RESPONSE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_LIB_AUTHN_RESPONSE)) #define LASSO_LIB_AUTHN_RESPONSE_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_LIB_AUTHN_RESPONSE, \ LassoLibAuthnResponseClass)) typedef struct _LassoLibAuthnResponse LassoLibAuthnResponse; typedef struct _LassoLibAuthnResponseClass LassoLibAuthnResponseClass; struct _LassoLibAuthnResponse { LassoSamlpResponse parent; /*< public >*/ /* */ GList *Extension; /* of xmlNode* */ /* */ char *ProviderID; /* */ char *RelayState; /* */ char *consent; }; struct _LassoLibAuthnResponseClass { LassoSamlpResponseClass parent; }; LASSO_EXPORT GType lasso_lib_authn_response_get_type(void); LASSO_EXPORT LassoNode* lasso_lib_authn_response_new( char *providerID, LassoLibAuthnRequest *request); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_LIB_AUTHN_RESPONSE_H__ */ lasso-2.8.2/lasso/xml/PaxHeaders/lib_assertion.h0000644000000000000000000000013014114336625016654 xustar0030 mtime=1630649749.854437299 30 atime=1678814151.012993868 28 ctime=1678814320.2179488 lasso-2.8.2/lasso/xml/lib_assertion.h0000644000175000017500000000446114114336625022133 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_LIB_ASSERTION_H__ #define __LASSO_LIB_ASSERTION_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "saml_assertion.h" #define LASSO_TYPE_LIB_ASSERTION (lasso_lib_assertion_get_type()) #define LASSO_LIB_ASSERTION(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_LIB_ASSERTION, LassoLibAssertion)) #define LASSO_LIB_ASSERTION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_LIB_ASSERTION, LassoLibAssertionClass)) #define LASSO_IS_LIB_ASSERTION(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_LIB_ASSERTION)) #define LASSO_IS_LIB_ASSERTION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_LIB_ASSERTION)) #define LASSO_LIB_ASSERTION_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_LIB_ASSERTION, LassoLibAssertionClass)) typedef struct _LassoLibAssertion LassoLibAssertion; typedef struct _LassoLibAssertionClass LassoLibAssertionClass; struct _LassoLibAssertion { LassoSamlAssertion parent; /*< public >*/ char *InResponseTo; }; struct _LassoLibAssertionClass { LassoSamlAssertionClass parent; }; LASSO_EXPORT GType lasso_lib_assertion_get_type (void); LASSO_EXPORT LassoLibAssertion* lasso_lib_assertion_new(void); LASSO_EXPORT LassoLibAssertion* lasso_lib_assertion_new_full( const char *issuer, const char *requestID, const char *audience, const char *notBefore, const char *notOnOrAfter); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_LIB_ASSERTION_H__ */ lasso-2.8.2/lasso/xml/PaxHeaders/lib_request_authn_context.h0000644000000000000000000000013214114336625021302 xustar0030 mtime=1630649749.858437342 30 atime=1678814151.016993891 30 ctime=1678814320.253949005 lasso-2.8.2/lasso/xml/lib_request_authn_context.h0000644000175000017500000000545214114336625024560 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_LIB_REQUEST_AUTHN_CONTEXT_H__ #define __LASSO_LIB_REQUEST_AUTHN_CONTEXT_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "xml.h" #define LASSO_TYPE_LIB_REQUEST_AUTHN_CONTEXT (lasso_lib_request_authn_context_get_type()) #define LASSO_LIB_REQUEST_AUTHN_CONTEXT(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_LIB_REQUEST_AUTHN_CONTEXT, \ LassoLibRequestAuthnContext)) #define LASSO_LIB_REQUEST_AUTHN_CONTEXT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_LIB_REQUEST_AUTHN_CONTEXT, \ LassoLibRequestAuthnContextClass)) #define LASSO_IS_LIB_REQUEST_AUTHN_CONTEXT(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_LIB_REQUEST_AUTHN_CONTEXT)) #define LASSO_IS_LIB_REQUEST_AUTHN_CONTEXT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_LIB_REQUEST_AUTHN_CONTEXT)) #define LASSO_LIB_REQUEST_AUTHN_CONTEXT_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_LIB_REQUEST_AUTHN_CONTEXT, \ LassoLibRequestAuthnContextClass)) typedef struct _LassoLibRequestAuthnContext LassoLibRequestAuthnContext; typedef struct _LassoLibRequestAuthnContextClass LassoLibRequestAuthnContextClass; struct _LassoLibRequestAuthnContext { LassoNode parent; /*< public >*/ /* */ GList *AuthnContextClassRef; /* of strings */ /* */ GList *AuthnContextStatementRef; /* of strings */ /* */ char *AuthnContextComparison; }; struct _LassoLibRequestAuthnContextClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_lib_request_authn_context_get_type(void); LASSO_EXPORT LassoLibRequestAuthnContext* lasso_lib_request_authn_context_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_LIB_REQUEST_AUTHN_CONTEXT_H__ */ lasso-2.8.2/lasso/xml/PaxHeaders/strings.h0000644000000000000000000000013214114336625015512 xustar0030 mtime=1630649749.878437561 30 atime=1678814151.028993957 30 ctime=1678814320.213948778 lasso-2.8.2/lasso/xml/strings.h0000644000175000017500000010700714114336625020767 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . * */ /* * This header file copy part of the SOAP 1.1 specification you can found there: * http://www.w3.org/TR/soap12-part1/ * whom copyright is: * Copyright © 2007 W3C® (MIT, ERCIM, Keio), All Rights Reserved. W3C liability, trademark and * document use rules apply. */ /** * SECTION:strings * @short_description: General strings constants for Lasso * @include: lasso/xml/strings.h * **/ #ifndef __LASSO_STRINGS_H__ #define __LASSO_STRINGS_H__ #include "saml-2.0/saml2_strings.h" #include "dsig/strings.h" /*****************************************************************************/ /* SOAP 1.1 */ /*****************************************************************************/ /** * LASSO_SOAP_ENV_HREF: * * Namespace for SOAP 1.1 messages * */ #define LASSO_SOAP_ENV_HREF "http://schemas.xmlsoap.org/soap/envelope/" /** * LASSO_SOAP_ENV_PREFIX: * * Preferred prefix for namespace of SOAP 1.1 messages * */ #define LASSO_SOAP_ENV_PREFIX "s" #define LASSO_SOAP_ENV_ACTOR "http://schemas.xmlsoap.org/soap/actor/next" /** * LASSO_SOAP_FAULT_CODE_SERVER: * * Quoting from SOAP 1.1 specifications: * « The Server class of errors indicate that the message could not be processed for reasons not * directly attributable to the contents of the message itself but rather to the processing of the * message. For example, processing could include communicating with an upstream processor, which * didn't respond. The message may succeed at a later point in time. See also section 4.4 for a * description of the SOAP Fault detail sub-element. » */ #define LASSO_SOAP_FAULT_CODE_SERVER "s:Server" /** * LASSO_SOAP_FAULT_CODE_CLIENT: * * Quoting from SOAP 1.1 specifications: * « The Client class of errors indicate that the message was incorrectly formed or did not contain * the appropriate information in order to succeed. For example, the message could lack the proper * authentication or payment information. It is generally an indication that the message should not * be resent without change. See also section 4.4 for a description of the SOAP Fault detail * sub-element. » */ #define LASSO_SOAP_FAULT_CODE_CLIENT "s:Client" /** * LASSO_SOAP_FAULT_CODE_MUST_UNDERSTAND: * * Quoting from SOAP 1.1 specifications: * « The processing party found an invalid namespace for the SOAP Envelope element (see section * 4.1.2) » */ #define LASSO_SOAP_FAULT_CODE_MUST_UNDERSTAND "s:MustUnderstand" /** * LASSO_SOAP_FAULT_CODE_CLIENT: * * Quoting from SOAP 1.1 specifications: * « An immediate child element of the SOAP Header element that was either not understood or not * obeyed by the processing party contained a SOAP mustUnderstand attribute with a value of "1" (see * section 4.2.3) » */ #define LASSO_SOAP_FAULT_CODE_VERSION_MISMATCH "s:VersionMismatch" /** * LASSO_PRIVATE_STATUS_CODE_FAILED_TO_RESTORE_ARTIFACT: * * An artifact content is present but Lasso failed to rebuild the corresponding XML content. */ #define LASSO_PRIVATE_STATUS_CODE_FAILED_TO_RESTORE_ARTIFACT "FailedToRestoreArtifact" /* * WS-Security Utility */ /** * LASSO_WSUTIL1_HREF: * * Namespace for FIXME * */ #define LASSO_WSUTIL1_HREF \ "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" /** * LASSO_WSUTIL1_PREFIX: * * Preferred prefix for namespace of FIXME * */ #define LASSO_WSUTIL1_PREFIX "wsutil" /** * LASSO_XMLENC_HREF * * Namespace for xmlenc-core */ #define LASSO_XMLENC_HREF "http://www.w3.org/2001/04/xmlenc#" /** * LASSO_XMLENC_PREFIX * * Preferred prefix for namespace of xmlenc-core */ #define LASSO_XMLENC_PREFIX "xmlenc" /*****************************************************************************/ /* Lasso */ /*****************************************************************************/ /** * LASSO_LASSO_HREF: * * Namespace for Lasso internal serialization format */ #define LASSO_LASSO_HREF "http://www.entrouvert.org/namespaces/lasso/0.0" /** * LASSO_LASSO_PREFIX: * * Preferred prefix for the lasso internal serialization format namespace. */ #define LASSO_LASSO_PREFIX "lasso" /** * LASSO_PYHTON_HREF: * * Namespace for translation of Lasso symbols to the python namespace. */ #define LASSO_PYTHON_HREF "http://www.entrouvert.org/namespaces/python/0.0" /** * LASSO_SIGNATURE_TYPE_ATTRIBUTE: * * Attribute name for the Lasso signature type attribute. */ #define LASSO_SIGNATURE_TYPE_ATTRIBUTE BAD_CAST "SignatureType" /** * LASSO_SIGNATURE_METHOD_ATTRIBUTE: * * Attribute name for the Lasso signature type attribute. */ #define LASSO_SIGNATURE_METHOD_ATTRIBUTE BAD_CAST "SignatureMethod" /** * LASSO_PRIVATE_KEY_ATTRIBUTE: * * Attribute name for the Lasso private key attribute. */ #define LASSO_PRIVATE_KEY_ATTRIBUTE BAD_CAST "PrivateKey" /** * LASSO_PRIVATE_KEY_PASSWORD_ATTRIBUTE: * * Attribute name for the Lasso private key attribute. */ #define LASSO_PRIVATE_KEY_PASSWORD_ATTRIBUTE BAD_CAST "PrivateKeyPassword" /** * LASSO_CERTIFICATE_ATTRIBUTE: * * Attribute name for the Lasso private key attribute. */ #define LASSO_CERTIFICATE_ATTRIBUTE BAD_CAST "Certificate" /*****************************************************************************/ /* Liberty Alliance ID-FF */ /*****************************************************************************/ /** * LASSO_LIB_HREF: * * Namespace for the elements specific to ID-FF 1.2 (not part of SAML 1.0) */ #define LASSO_LIB_HREF "urn:liberty:iff:2003-08" /** * LASSO_LIB_PREFIX: * * Preferred prefix for the ID-FF 1.2 namespace */ #define LASSO_LIB_PREFIX "lib" /* Versioning */ /** * LASSO_LIB_MAJOR_VERSION_N: * * Major version of the ID-FF protocol supported. */ #define LASSO_LIB_MAJOR_VERSION_N 1 /** * LASSO_LIB_MINOR_VERSION_N * * Minor version of the ID-FF protocol supported. */ #define LASSO_LIB_MINOR_VERSION_N 2 /* NameIDPolicyType */ /** * LASSO_LIB_NAMEID_POLICY_TYPE_NONE: * * None policy for use in #LassoLibAuthnRequest. It * means an existing federation must be used and an error should be produced if * none existed beforehand. */ #define LASSO_LIB_NAMEID_POLICY_TYPE_NONE "none" /** * LASSO_LIB_NAMEID_POLICY_TYPE_ONE_TIME: * * Onetime policy for use in #LassoLibAuthnRequest. It * means a federation must not be created between identity and service * provider. A temporary name identifier should be used instead. */ #define LASSO_LIB_NAMEID_POLICY_TYPE_ONE_TIME "onetime" /** * LASSO_LIB_NAMEID_POLICY_TYPE_FEDERATED: * * Federated policy for use in #LassoLibAuthnRequest. It * means a federation may be created between identity and service provider (if * it didn't exist before). */ #define LASSO_LIB_NAMEID_POLICY_TYPE_FEDERATED "federated" /** * LASSO_LIB_NAMEID_POLICY_TYPE_ANY: * * Any policy for use in #LassoLibAuthnRequest. It means * a federation may be created if the principal agrees and it can fall back to * onetime if he does not. */ #define LASSO_LIB_NAMEID_POLICY_TYPE_ANY "any" /* AuthenticationClassRef */ /** * LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_INTERNET_PROTOCOL: * * The Internet Protocol class is identified when a Principal is authenticated through the use of a * provided IP address. * Source: Liberty ID-FF Authentication Context Specification v1.3 */ #define LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_INTERNET_PROTOCOL \ "http://www.projectliberty.org/schemas/authctx/classes/InternetProtocol" /** * LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_INTERNET_PROTOCOL_PASSWORD: * * The Internet Protocol Password class is identified when a Principal is authenticated through the * use of a provided IP address, in addition to username/password. * Source: Liberty ID-FF Authentication Context Specification v1.3 */ #define LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_INTERNET_PROTOCOL_PASSWORD \ "http://www.projectliberty.org/schemas/authctx/classes/InternetProtocolPassword" /** * LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_ONE_FACTOR_UNREGISTERED: * * Reflects no mobile customer registration procedures and an authentication of the mobile device * without requiring explicit end-user interaction. Again, this context authenticates only the * device and never the user, it is useful when services other than the mobile operator want to add * a secure device authentication to their authentication process. * * Source: Liberty ID-FF Authentication Context Specification v1.3 */ #define LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_ONE_FACTOR_UNREGISTERED \ "http://www.projectliberty.org/schemas/authctx/classes/MobileOneFactorUnregistered" /** * LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_TWO_FACTOR_UNREGISTERED: * * Reflects no mobile customer registration procedures and a two-factor based authentication, such * as secure device and user PIN. This context class is useful when a service other than the mobile * operator wants to link their customer ID to a mobile supplied two-factor authentication service * by capturing mobile phone data at enrollment. * * Source: Liberty ID-FF Authentication Context Specification v1.3 */ #define LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_TWO_FACTOR_UNREGISTERED \ "http://www.projectliberty.org/schemas/authctx/classes/MobileTwoFactorUnregistered" /** * LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_ONE_FACTOR_CONTRACT: * * Reflects mobile contract customer registration procedures and a single factor authentication. For * example, a digital signing device with tamper resistant memory for key storage, such as the * mobile MSISDN, but no required PIN or biometric for real-time user authentication. * * Source: Liberty ID-FF Authentication Context Specification v1.3 */ #define LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_ONE_FACTOR_CONTRACT \ "http://www.projectliberty.org/schemas/authctx/classes/MobileOneFactorContract" /** * LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_TWO_FACTOR_CONTRACT: * * Reflects mobile contract customer registration procedures and a two-factor based authentication. * For example, a digital signing device with tamper resistant memory for key storage, such as a GSM * SIM, that requires explicit proof of user identity and intent, such as a PIN or biometric. * * Source: Liberty ID-FF Authentication Context Specification v1.3 */ #define LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_TWO_FACTOR_CONTRACT \ "http://www.projectliberty.org/schemas/authctx/classes/MobileTwoFactorContract" /** * LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PASSWORD: * * The Password class is identified when a Principal authenticates to an identity provider through * the presentation of a password over an unprotected HTTP session. * * Source: Liberty ID-FF Authentication Context Specification v1.3 */ #define LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PASSWORD \ "http://www.projectliberty.org/schemas/authctx/classes/Password" /** * LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PASSWORD_PROTECTED_TRANSPORT: * * The PasswordProtectedTransport class is identified when a Principal authenticates to an identity * provider through the presentation of a password over a protected session. * * Source: Liberty ID-FF Authentication Context Specification v1.3 */ #define LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PASSWORD_PROTECTED_TRANSPORT \ "http://www.projectliberty.org/schemas/authctx/classes/PasswordProtectedTransport" /** * LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PREVIOUS_SESSION: * * The PreviousSession class is identified when a Principal had authenticated to an identity * provider at some point in the past using any authentication context supported by that identity * provider. Consequently, a subsequent authentication event that the identity provider will assert * to the service provider may be significantly separated in time from the Principals current * resource access request. The context for the previously authenticated session is explicitly not * included in this context class because the user has not authenticated during this session, and so * the mechanism that the user employed to authenticate in a previous session should not be used as * part of a decision on whether to now allow access to a resource. * * Source: Liberty ID-FF Authentication Context Specification v1.3 */ #define LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PREVIOUS_SESSION \ "http://www.projectliberty.org/schemas/authctx/classes/PreviousSession" /** * LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SMARTCARD: * * The Smartcard class is identified when a Principal authenticates to an identity provider using a * smartcard. * * Source: Liberty ID-FF Authentication Context Specification v1.3 */ #define LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SMARTCARD \ "http://www.projectliberty.org/schemas/authctx/classes/Smartcard" /** * LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SMARTCARD_PKI: * * The SmartcardPKI class is identified when a Principal authenticates to an identity provider * through a two-factor authentication mechanism using a smartcard with enclosed private key and a PIN. * * Source: Liberty ID-FF Authentication Context Specification v1.3 */ #define LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SMARTCARD_PKI \ "http://www.projectliberty.org/schemas/authctx/classes/SmartcardPKI" /** * LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SOFTWARE_PKI: * * The Software-PKI class is identified when a Principal uses an X.509 certificate stored in * software to authenticate to the identity provider. * * Source: Liberty ID-FF Authentication Context Specification v1.3 */ #define LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SOFTWARE_PKI \ "http://www.projectliberty.org/schemas/authctx/classes/SoftwarePKI" /** * LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_TIME_SYNC_TOKEN: * The TimeSyncToken class is identified when a Principal authenticates through a time * synchronization token. * * Source: Liberty ID-FF Authentication Context Specification v1.3 */ #define LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_TIME_SYNC_TOKEN \ "http://www.projectliberty.org/schemas/authctx/classes/TimeSyncToken" /* AuthnContextComparison */ /** * LASSO_LIB_AUTHN_CONTEXT_COMPARISON_EXACT: * * Ask for the exact authentication context. */ #define LASSO_LIB_AUTHN_CONTEXT_COMPARISON_EXACT "exact" /** * LASSO_LIB_AUTHN_CONTEXT_COMPARISON_MINIMUM: * * Ask for at least this authentication context. */ #define LASSO_LIB_AUTHN_CONTEXT_COMPARISON_MINIMUM "minimum" /** * LASSO_LIB_AUTHN_CONTEXT_COMPARISON_MAXIMUM: * * Ask for at most this authentication context. */ #define LASSO_LIB_AUTHN_CONTEXT_COMPARISON_MAXIMUM "maximum" /** * LASSO_LIB_AUTHN_CONTEXT_COMPARISON_BETTER : * * Ask for a better authentication context than that. */ #define LASSO_LIB_AUTHN_CONTEXT_COMPARISON_BETTER "better" /* StatusCodes */ /** * LASSO_LIB_STATUS_CODE_FEDERATION_DOES_NOT_EXIST: * * Second level status code. * * Used by an identity provider to indicate that the Principal has not federated his or her identity * with the service provider, and the service provider indicated a requirement for federation. * * Source: Liberty ID-FF Protocols and Schema Specification 1.2 */ #define LASSO_LIB_STATUS_CODE_FEDERATION_DOES_NOT_EXIST "lib:FederationDoesNotExist" /** * LASSO_LIB_STATUS_CODE_INVALID_ASSERTION_CONSUMER_SERVICE_INDEX: * * Second level status code. * * If the <AssertionConsumerServiceID> element is provided, then the identity provider MUST search * for the value among the id attributes in the <AssertionConsumerServiceURL> elements in the * provider’s meta- data to determine the URL to use. If no match can be found, then the provider * MUST return an error with a second-level <samlp:StatusCode> of * lib:InvalidAssertionConsumerServiceIndex to the default URL (the <AssertionConsumerServiceURL> * with an isDefault attribute of "true"). * * Source: Liberty ID-FF Protocols and Schema Specification 1.2 */ #define LASSO_LIB_STATUS_CODE_INVALID_ASSERTION_CONSUMER_SERVICE_INDEX \ "lib:InvalidAssertionConsumerServiceIndex" /** * LASSO_LIB_STATUS_CODE_INVALID_SIGNATURE: * * Second level status code. * * Indicate a failure in the processing of the signature of the request. * This code is not part of the ID-FF 1.2 specification. * */ #define LASSO_LIB_STATUS_CODE_INVALID_SIGNATURE "lib:InvalidSignature" /** * LASSO_LIB_STATUS_CODE_NO_AUTHN_CONTEXT: * * Used by an identity provider to indicate that the specified authentication context information in * the request prohibits authentication from taking place. * * Source: Liberty ID-FF Protocols and Schema Specification 1.2 */ #define LASSO_LIB_STATUS_CODE_NO_AUTHN_CONTEXT "lib:NoAuthnContext" /** * LASSO_LIB_STATUS_CODE_NO_AVAILABLEIDP: * * Used by an intermediary to indicate that none of the supported identity provider URLs from the * <IDPList> can be resolved or that none of the supported identity providers are available. * * Source: Liberty ID-FF Protocols and Schema Specification 1.2 */ #define LASSO_LIB_STATUS_CODE_NO_AVAILABLEIDP "lib:NoAvailableIDP" /** * LASSO_LIB_STATUS_CODE_NO_PASSIVE: * * Used by an identity provider or an intermediary to indicate that authentication of the Principal * requires interaction and cannot be performed passively. * * Source: Liberty ID-FF Protocols and Schema Specification 1.2 */ #define LASSO_LIB_STATUS_CODE_NO_PASSIVE "lib:NoPassive" /** * LASSO_LIB_STATUS_CODE_NO_SUPPORTEDIDP : * * Used by an intermediary to indicate that none of the identity providers are supported by the * intermediary. * * Source: Liberty ID-FF Protocols and Schema Specification 1.2 */ #define LASSO_LIB_STATUS_CODE_NO_SUPPORTEDIDP "lib:NoSupportedIDP" /** * LASSO_LIB_STATUS_CODE_PROXY_COUNT_EXCEEDED : * * Used by an identity provider to indicate that it cannot authenticate the principal itself, and * was not permitted to relay the request further. * * Source: Liberty ID-FF Protocols and Schema Specification 1.2 */ #define LASSO_LIB_STATUS_CODE_PROXY_COUNT_EXCEEDED "lib:ProxyCountExceeded" /** * LASSO_LIB_STATUS_CODE_UNKNOWN_PRINCIPAL : * * Used by an identity provider to indicate that the Principal is not known to it. * * Source: Liberty ID-FF Protocols and Schema Specification 1.2 */ #define LASSO_LIB_STATUS_CODE_UNKNOWN_PRINCIPAL "lib:UnknownPrincipal" /** * LASSO_LIB_STATUS_CODE_UNSIGNED_AUTHN_REQUEST : * * If the requesting provider’s <AuthnRequestsSigned> metadata element is "true", then any request * messages it generates MUST be signed. If an unsigned request is received, then the provider MUST * return an error with a second- level <samlp:StatusCode> of lib:UnsignedAuthnRequest. * * Source: Liberty ID-FF Protocols and Schema Specification 1.2 */ #define LASSO_LIB_STATUS_CODE_UNSIGNED_AUTHN_REQUEST "lib:UnsignedAuthnRequest" /** * LASSO_LIB_STATUS_CODE_UNSUPPORTED_PROFILE : * * If an error occurs during this further processing of the logout (for example, relying service * providers may not all implement the Single Logout profile used by the requesting service * provider), then the identity provider MUST respond to the original requester with a * <LogoutResponse> message, indicating the status of the logout request. The value * "lib:UnsupportedProfile" is provided for a second-level <samlp:StatusCode>, indicating that a * service provider should retry the <LogoutRequest> using a different profile. * * Source: Liberty ID-FF Protocols and Schema Specification 1.2 */ #define LASSO_LIB_STATUS_CODE_UNSUPPORTED_PROFILE "lib:UnsupportedProfile" /* ProtocolProfile */ /** * LASSO_LIB_PROTOCOL_PROFILE_BRWS_ART: * * Identifies the Single Sign-On "Artifact" profile; where an artifact is * passed from identity provider to service provider and back to get the * #LassoLibAssertion. */ #define LASSO_LIB_PROTOCOL_PROFILE_BRWS_ART \ "http://projectliberty.org/profiles/brws-art" /** * LASSO_LIB_PROTOCOL_PROFILE_BRWS_POST: * * Identifies the Single Sign-On "POST" profile; where the #LassoLibAssertion * is sent directly from the identity provider to the service provider in an * HTML form submission message. */ #define LASSO_LIB_PROTOCOL_PROFILE_BRWS_POST \ "http://projectliberty.org/profiles/brws-post" /** * LASSO_LIB_PROTOCOL_PROFILE_BRWS_LECP: * * Identifies the Single Sign-On "LECP" profile; where the #LassoLibAssertion * is sent directly from the identity provider to the service provider in a * PAOS response. See #LassoLecp. * */ #define LASSO_LIB_PROTOCOL_PROFILE_BRWS_LECP \ "http://projectliberty.org/profiles/lecp" /** * LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_IDP_HTTP: * * Identifies the Federation Termination "Redirect" profile; where the request for federation * termination is sent from the identity provider to the service provider in a redirected GET request. * */ #define LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_IDP_HTTP \ "http://projectliberty.org/profiles/fedterm-idp-http" #define LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_IDP_SOAP \ "http://projectliberty.org/profiles/fedterm-idp-soap" #define LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_SP_HTTP \ "http://projectliberty.org/profiles/fedterm-sp-http" #define LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_SP_SOAP \ "http://projectliberty.org/profiles/fedterm-sp-soap" #define LASSO_LIB_PROTOCOL_PROFILE_NIM_SP_HTTP \ "http://projectliberty.org/profiles/nim-sp-http" #define LASSO_LIB_PROTOCOL_PROFILE_RNI_IDP_HTTP "http://projectliberty.org/profiles/rni-idp-http" #define LASSO_LIB_PROTOCOL_PROFILE_RNI_IDP_SOAP "http://projectliberty.org/profiles/rni-idp-soap" #define LASSO_LIB_PROTOCOL_PROFILE_RNI_SP_HTTP "http://projectliberty.org/profiles/rni-sp-http" #define LASSO_LIB_PROTOCOL_PROFILE_RNI_SP_SOAP "http://projectliberty.org/profiles/rni-sp-soap" #define LASSO_LIB_PROTOCOL_PROFILE_SLO_SP_HTTP "http://projectliberty.org/profiles/slo-sp-http" #define LASSO_LIB_PROTOCOL_PROFILE_SLO_SP_SOAP "http://projectliberty.org/profiles/slo-sp-soap" #define LASSO_LIB_PROTOCOL_PROFILE_SLO_IDP_HTTP "http://projectliberty.org/profiles/slo-idp-http" #define LASSO_LIB_PROTOCOL_PROFILE_SLO_IDP_SOAP "http://projectliberty.org/profiles/slo-idp-soap" /* NameIdentifier formats */ /** * LASSO_LIB_NAME_IDENTIFIER_FORMAT_FEDERATED: * * Federated name identifier constant, used in * #LassoSamlNameIdentifier. It implies the name identifier belongs to * a federation established between SP and IdP. */ #define LASSO_LIB_NAME_IDENTIFIER_FORMAT_FEDERATED "urn:liberty:iff:nameid:federated" /** * LASSO_LIB_NAME_IDENTIFIER_FORMAT_ONE_TIME: * * "One-time" name identifier constant, used in #LassoSamlNameIdentifier. */ #define LASSO_LIB_NAME_IDENTIFIER_FORMAT_ONE_TIME "urn:liberty:iff:nameid:one-time" /** * LASSO_LIB_NAME_IDENTIFIER_FORMAT_ENCRYPTED: * * "Encrypted" name identifier constant, used in #LassoSamlNameIdentifier. */ #define LASSO_LIB_NAME_IDENTIFIER_FORMAT_ENCRYPTED "urn:liberty:iff:nameid:encrypted" #define LASSO_LIB_NAME_IDENTIFIER_FORMAT_ENTITYID "urn:liberty:iff:nameid:entityID" /* Consent */ #define LASSO_LIB_CONSENT_OBTAINED "urn:liberty:consent:obtained" #define LASSO_LIB_CONSENT_OBTAINED_PRIOR "urn:liberty:consent:obtained:prior" #define LASSO_LIB_CONSENT_OBTAINED_CURRENT_IMPLICIT "urn:liberty:consent:obtained:current:implicit" #define LASSO_LIB_CONSENT_OBTAINED_CURRENT_EXPLICIT "urn:liberty:consent:obtained:current:explicit" #define LASSO_LIB_CONSENT_UNAVAILABLE "urn:liberty:consent:unavailable" #define LASSO_LIB_CONSENT_INAPPLICABLE "urn:liberty:consent:inapplicable" /*****************************************************************************/ /* METADATA */ /*****************************************************************************/ /* prefix & href */ /** * LASSO_METADATA_HREF: * * Namespace for ID-FF 1.2 metadatas. * */ #define LASSO_METADATA_HREF "urn:liberty:metadata:2003-08" /** * LASSO_METADATA_PREFIX: * * Preferred prefix for ID-FF 1.2 metadata namespace. */ #define LASSO_METADATA_PREFIX "md" /*****************************************************************************/ /* SAML */ /*****************************************************************************/ /* prefix & href */ /** * LASSO_SAML_ASSERTION_HREF: * * Namespace for SAML 1.0 assertion elements. */ #define LASSO_SAML_ASSERTION_HREF "urn:oasis:names:tc:SAML:1.0:assertion" /** * LASSO_SAML_ASSERTION_PREFIX: * * Preferred prefix for assertion elements. */ #define LASSO_SAML_ASSERTION_PREFIX "saml" /** * LASSO_SAML_PROTOCOL_HREF: * * Namespace for SAML 1.0 protocol elements. */ #define LASSO_SAML_PROTOCOL_HREF "urn:oasis:names:tc:SAML:1.0:protocol" /** * LASSO_SAML_PROTOCOL_PREFIX: * * Preferred prefix for assertion elements. */ #define LASSO_SAML_PROTOCOL_PREFIX "samlp" /* Versioning */ /** * LASSO_SAML_MAJOR_VERSION_N: * * Major version number of the SAML specification used for ID-FF support in Lasso. */ #define LASSO_SAML_MAJOR_VERSION_N 1 /** * LASSO_SAML_MINOR_VERSION_N: * * Minor version number of the SAML specification used for ID-FF support in Lasso. */ #define LASSO_SAML_MINOR_VERSION_N 1 /* First level StatusCodes */ /** * LASSO_SAML_STATUS_CODE_SUCCESS: * * A protocol request succeeded. */ #define LASSO_SAML_STATUS_CODE_SUCCESS "samlp:Success" /** * LASSO_SAML_STATUS_CODE_VERSION_MISMATCH: * * Request failed, because the version is not supported by the provider. Look at second level status * for more details. */ #define LASSO_SAML_STATUS_CODE_VERSION_MISMATCH "samlp:VersionMismatch" /** * LASSO_SAML_STATUS_CODE_REQUESTER: * * Request failed because of the requester. Look at second level status for more details. */ #define LASSO_SAML_STATUS_CODE_REQUESTER "samlp:Requester" /** * LASSO_SAML_STATUS_CODE_RESPONDER: * * Request failed because of the responder. Look at second level status for more details. */ #define LASSO_SAML_STATUS_CODE_RESPONDER "samlp:Responder" /* Second level status codes */ /** * LASSO_SAML_STATUS_CODE_REQUEST_VERSION_TOO_HIGH: * * Request failed because the version of protocol used is too high. * Used with #LASSO_SAML_STATUS_CODE_VERSION_MISMATCH. */ #define LASSO_SAML_STATUS_CODE_REQUEST_VERSION_TOO_HIGH "samlp:RequestVersionTooHigh" /** * LASSO_SAML_STATUS_CODE_REQUEST_VERSION_TOO_LOW: * * Request failed because the version of protocol used is too low. * Used with #LASSO_SAML_STATUS_CODE_VERSION_MISMATCH. */ #define LASSO_SAML_STATUS_CODE_REQUEST_VERSION_TOO_LOW "samlp:RequestVersionTooLow" /** * LASSO_SAML_STATUS_CODE_REQUEST_VERSION_DEPRECATED: * * Request failed because the version of protocol used is deprecated. * Used with #LASSO_SAML_STATUS_CODE_VERSION_MISMATCH. */ #define LASSO_SAML_STATUS_CODE_REQUEST_VERSION_DEPRECATED "samlp:RequestVersionDeprecated" /** * LASSO_SAML_STATUS_CODE_TOO_MANY_RESPONSES: * * Request failed because too many data should be returned. * Used with #LASSO_SAML_STATUS_CODE_RESPONDER. */ #define LASSO_SAML_STATUS_CODE_TOO_MANY_RESPONSES "samlp:TooManyResponses" /** * LASSO_SAML_STATUS_CODE_RESOURCE_NOT_RECOGNIZED: * * Request failed because the responder does not wish to support resource-specific attribute * queries, or the resource value provided is invalid or unrecognized. * Use with #LASSO_SAML_STATUS_CODE_RESPONDER. */ #define LASSO_SAML_STATUS_CODE_RESOURCE_NOT_RECOGNIZED "samlp:ResourceNotRecognized" /** * LASSO_SAML_STATUS_CODE_REQUEST_DENIED: * * The SAML responder or SAML authority is able to process the request but has chosen not to * respond. This status code MAY be used when there is concern about the security context of the * request message or the sequence of request messages received from a particular requester. * * Source: Assertions and Protocol for the OASIS Security Assertion Markup Language (SAML) V1.1 * */ #define LASSO_SAML_STATUS_CODE_REQUEST_DENIED "samlp:RequestDenied" /* AuthenticationMethods */ /** * LASSO_SAML_AUTHENTICATION_METHOD_PASSWORD: * * The authentication was performed by means of a password. */ #define LASSO_SAML_AUTHENTICATION_METHOD_PASSWORD "urn:oasis:names:tc:SAML:1.0:am:password" /** * LASSO_SAML_AUTHENTICATION_METHOD_KERBEROS: * * The authentication was performed by means of the Kerberos protocol [RFC 1510], an instantiation * of the Needham-Schroeder symmetric key authentication mechanism [Needham78]. * */ #define LASSO_SAML_AUTHENTICATION_METHOD_KERBEROS "urn:ietf:rfc:1510" /** * LASSO_SAML_AUTHENTICATION_METHOD_SECURE_REMOTE_PASSWORD: * * The authentication was performed by means of Secure Remote Password protocol as specified in [RFC * 2945]. * */ #define LASSO_SAML_AUTHENTICATION_METHOD_SECURE_REMOTE_PASSWORD "urn:ietf:rfc:2945" /** * LASSO_SAML_AUTHENTICATION_METHOD_HARDWARE_TOKEN: * * The authentication was performed using some (unspecified) hardware token. */ #define LASSO_SAML_AUTHENTICATION_METHOD_HARDWARE_TOKEN \ "urn:oasis:names:tc:SAML:1.0:am:HardwareToken" /** * LASSO_SAML_AUTHENTICATION_METHOD_SMARTCARD_PKI: * * The authentication was performed using either the SSL or TLS protocol with certificate-based * client authentication. TLS is described in [RFC 2246]. * */ #define LASSO_SAML_AUTHENTICATION_METHOD_SMARTCARD_PKI "urn:ietf:rfc:2246" /** * LASSO_SAML_AUTHENTICATION_METHOD_SOFTWARE_PKI: * * The authentication was performed by some (unspecified) mechanism on a key authenticated by means * of an X.509 PKI [X.500][PKIX]. It may have been one of the mechanisms for which a more specific * identifier has been defined below. * */ #define LASSO_SAML_AUTHENTICATION_METHOD_SOFTWARE_PKI "urn:oasis:names:tc:SAML:1.0:am:X509-PKI" /** * LASSO_SAML_AUTHENTICATION_METHOD_PGP: * * The authentication was performed by some (unspecified) mechanism on a key authenticated by means * of a PGP web of trust [PGP]. It may have been one of the mechanisms for which a more specific * identifier has been defined below. * */ #define LASSO_SAML_AUTHENTICATION_METHOD_PGP "urn:oasis:names:tc:SAML:1.0:am:PGP" /** * LASSO_SAML_AUTHENTICATION_METHODS_PKI: * * The authentication was performed by some (unspecified) mechanism on a key authenticated by means * of a PGP web of trust [PGP]. It may have been one of the mechanisms for which a more specific * identifier has been defined below. * */ #define LASSO_SAML_AUTHENTICATION_METHODS_PKI "urn:oasis:names:tc:SAML:1.0:am:SPKI" /** * LASSO_SAML_AUTHENTICATION_METHOD_XKMS: * * The authentication was performed by some (unspecified) mechanism on a key authenticated by means * of a PGP web of trust [PGP]. It may have been one of the mechanisms for which a more specific * identifier has been defined below. * */ #define LASSO_SAML_AUTHENTICATION_METHOD_XKMS "urn:oasis:names:tc:SAML:1.0:am:XKMS" /** * LASSO_SAML_AUTHENTICATION_METHOD_XMLD_SIG: * * The authentication was performed by means of an XML digital signature [RFC 3075]. */ #define LASSO_SAML_AUTHENTICATION_METHOD_XMLD_SIG "urn:ietf:rfc:3075" /** * LASSO_SAML_AUTHENTICATION_METHOD_UNSPECIFIED: * * The authentication was performed by an unspecified means. */ #define LASSO_SAML_AUTHENTICATION_METHOD_UNSPECIFIED \ "urn:oasis:names:tc:SAML:1.0:am:unspecified" /** * LASSO_SAML_AUTHENTICATION_METHOD_LIBERTY: * * * The authentication was performed by a liberty alliance protocol. */ #define LASSO_SAML_AUTHENTICATION_METHOD_LIBERTY "urn:liberty:ac:2003-08" /* ConfirmationMethods */ /** * LASSO_SAML_CONFIRMATION_METHOD_ARTIFACT: * * Confirmation method when the browser-artifact binding is used. */ #define LASSO_SAML_CONFIRMATION_METHOD_ARTIFACT "urn:oasis:names:tc:SAML:1.0:cm:artifact" /** * LASSO_SAML_CONFIRMATION_METHOD_ARTIFACT01: * * * Deprecated confirmation method when the browser-artifact binding is used. */ #define LASSO_SAML_CONFIRMATION_METHOD_ARTIFACT01 "urn:oasis:names:tc:SAML:1.0:cm:artifact-01" /** * LASSO_SAML_CONFIRMATION_METHOD_BEARER: * * Confirmation method when subject of the assertion is the one holding it. */ #define LASSO_SAML_CONFIRMATION_METHOD_BEARER "urn:oasis:names:tc:SAML:1.0:cm:bearer" /** * LASSO_SAML_CONFIRMATION_METHOD_HOLDER_OF_KEY: * * A ds:KeyInfo must be present in the SubjecConfirmation element. It MUST be * used to confirm assertion subject identity. */ #define LASSO_SAML_CONFIRMATION_METHOD_HOLDER_OF_KEY \ "urn:oasis:names:tc:SAML:1.0:cm:holder-of-key" /** * LASSO_SAML_CONFIRMATION_METHOD_SENDER_VOUCHES: * * Indicates that no other information is available about the context of use of the assertion. The * relying party * SHOULD utilize other means to determine if it should process the assertion further. * */ #define LASSO_SAML_CONFIRMATION_METHOD_SENDER_VOUCHES \ "urn:oasis:names:tc:SAML:1.0:cm:sender-vouches" /* Extensions */ /** * LASSO_SAML_EXT_CHANNEL_BINDING: * * Indicates support for channel binding * */ #define LASSO_SAML_EXT_CHANNEL_BINDING "urn:oasis:names:tc:SAML:protocol:ext:channel-binding" /*****************************************************************************/ /* POAS BINDING */ /*****************************************************************************/ /** * LASSO_PAOS_HREF: * * Namespace for FIXME * */ #define LASSO_PAOS_HREF "urn:liberty:paos:2003-08" /** * LASSO_PAOS_PREFIX: * * URN binding name for PAOS * */ #define LASSO_PAOS_PREFIX "paos" /*****************************************************************************/ /* ECP PROFILE */ /*****************************************************************************/ /** * LASSO_ECP_HREF: * * Namespace for FIXME * */ #define LASSO_ECP_HREF "urn:oasis:names:tc:SAML:2.0:profiles:SSO:ecp" /** * LASSO_ECP_PREFIX: * * SAML 2 URN profile name for Enhanced Client & Proxy (ECP) * */ #define LASSO_ECP_PREFIX "ecp" /*****************************************************************************/ /* Others */ /*****************************************************************************/ /* xsi prefix & href */ /** * LASSO_XSI_HREF: * * Namespace for XMLSchema instance * */ #define LASSO_XSI_HREF "http://www.w3.org/2001/XMLSchema-instance" /** * LASSO_XSI_PREFIX: * * Preferred prefix for namespace of XMLSChema instance * */ #define LASSO_XSI_PREFIX "xsi" /** * LASSO_XML_HREF: * * Namespace for XML namespace */ #define LASSO_XML_HREF "http://www.w3.org/XML/1998/namespace" /** * LASSO_XML_PREFIX: * * Preferred prefix for XML namespace */ #define LASSO_XML_PREFIX "xml" #endif /* __LASSO_STRINGS_H__ */ lasso-2.8.2/lasso/xml/PaxHeaders/samlp_request_abstract.c0000644000000000000000000000013214364261206020562 xustar0030 mtime=1674666630.762769217 30 atime=1678814212.581339253 30 ctime=1678814320.373949688 lasso-2.8.2/lasso/xml/samlp_request_abstract.c0000644000175000017500000001151214364261206024032 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "private.h" #include "../utils.h" #include #include #include "samlp_request_abstract.h" /** * SECTION:samlp_request_abstract * @short_description: <samlp:RequestAbstractType> * *
Schema fragment for samlp:RequestAbstractType * * * * * * * * * * * * * * From oasis-sstc-saml-schema-assertion-1.0.xsd: * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "RespondWith", SNIPPET_LIST_CONTENT, G_STRUCT_OFFSET(LassoSamlpRequestAbstract, RespondWith), NULL, NULL, NULL}, { "Signature", SNIPPET_SIGNATURE, G_STRUCT_OFFSET(LassoSamlpRequestAbstract, RequestID), NULL, LASSO_DS_PREFIX, LASSO_DS_HREF}, { "RequestID", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSamlpRequestAbstract, RequestID), NULL, NULL, NULL}, { "MajorVersion", SNIPPET_ATTRIBUTE | SNIPPET_INTEGER, G_STRUCT_OFFSET(LassoSamlpRequestAbstract, MajorVersion), NULL, NULL, NULL}, { "MinorVersion", SNIPPET_ATTRIBUTE | SNIPPET_INTEGER, G_STRUCT_OFFSET(LassoSamlpRequestAbstract, MinorVersion), NULL, NULL, NULL}, { "IssueInstant", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSamlpRequestAbstract, IssueInstant), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void instance_init(LassoSamlpRequestAbstract *node, G_GNUC_UNUSED void *unused) { node->sign_type = LASSO_SIGNATURE_TYPE_NONE; } static void class_init(LassoSamlpRequestAbstractClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "RequestAbstract"); lasso_node_class_set_ns(nclass, LASSO_SAML_PROTOCOL_HREF, LASSO_SAML_PROTOCOL_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); nclass->node_data->id_attribute_name = "RequestID"; nclass->node_data->id_attribute_offset = G_STRUCT_OFFSET(LassoSamlpRequestAbstract, RequestID); nclass->node_data->sign_type_offset = G_STRUCT_OFFSET( LassoSamlpRequestAbstract, sign_type); nclass->node_data->sign_method_offset = G_STRUCT_OFFSET( LassoSamlpRequestAbstract, sign_method); nclass->node_data->private_key_file_offset = G_STRUCT_OFFSET(LassoSamlpRequestAbstract, private_key_file); nclass->node_data->certificate_file_offset = G_STRUCT_OFFSET(LassoSamlpRequestAbstract, certificate_file); } GType lasso_samlp_request_abstract_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSamlpRequestAbstractClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSamlpRequestAbstract), 0, (GInstanceInitFunc) instance_init, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoSamlpRequestAbstract", &this_info, 0); } return this_type; } lasso-2.8.2/lasso/xml/PaxHeaders/samlp_status.c0000644000000000000000000000013214114336625016533 xustar0030 mtime=1630649749.878437561 30 atime=1678814214.109347857 30 ctime=1678814320.377949711 lasso-2.8.2/lasso/xml/samlp_status.c0000644000175000017500000001016314114336625022004 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../utils.h" #include "private.h" #include "samlp_status.h" /** * SECTION:samlp_status * @short_description: <samlp:Status> * *
Schema fragment for samlp:Status * * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "StatusCode", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSamlpStatus, StatusCode), NULL, NULL, NULL}, { "StatusMessage", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoSamlpStatus, StatusMessage), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; static gchar* build_query(LassoNode *node) { LassoSamlpStatusCode *code = LASSO_SAMLP_STATUS(node)->StatusCode; GString *s; char *t; s = g_string_sized_new(200); while (code) { if (s->len) g_string_append(s, " "); g_string_append(s, code->Value); code = code->StatusCode; } t = s->str; lasso_release_gstring(s, FALSE); return t; } static gboolean init_from_query(LassoNode *node, char **query_fields) { char **values; LassoSamlpStatusCode *code; int i; code = lasso_samlp_status_code_new(); LASSO_SAMLP_STATUS(node)->StatusCode = code; values = g_strsplit(*query_fields, " ", 0); for (i = 0; values[i]; i++) { code->Value = g_strdup(values[i]); if (values[i+1]) { code->StatusCode = lasso_samlp_status_code_new(); code = code->StatusCode; } } g_strfreev(values); return TRUE; } /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSamlpStatusClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); nclass->build_query = build_query; nclass->init_from_query = init_from_query; nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "Status"); lasso_node_class_set_ns(nclass, LASSO_SAML_PROTOCOL_HREF, LASSO_SAML_PROTOCOL_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_samlp_status_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSamlpStatusClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSamlpStatus), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoSamlpStatus", &this_info, 0); } return this_type; } /** * lasso_samlp_status_new: * * Creates a new #LassoSamlpStatus object. * * Return value: a newly created #LassoSamlpStatus object **/ LassoSamlpStatus* lasso_samlp_status_new() { return g_object_new(LASSO_TYPE_SAMLP_STATUS, NULL); } lasso-2.8.2/lasso/xml/PaxHeaders/lib_idp_list.c0000644000000000000000000000013214114336625016451 xustar0030 mtime=1630649749.858437342 30 atime=1678814194.721238795 30 ctime=1678814320.325949415 lasso-2.8.2/lasso/xml/lib_idp_list.c0000644000175000017500000000615414114336625021727 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "private.h" #include "lib_idp_list.h" /** * SECTION:lib_idp_list * @short_description: <lib:IDPList> * *
Schema fragment for lib:IDPList * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "IDPEntries", SNIPPET_NODE, G_STRUCT_OFFSET(LassoLibIDPList, IDPEntries), NULL, NULL, NULL}, { "GetComplete", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoLibIDPList, GetComplete), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoLibIDPListClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "IDPList"); lasso_node_class_set_ns(nclass, LASSO_LIB_HREF, LASSO_LIB_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_lib_idp_list_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoLibIDPListClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoLibIDPList), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoLibIDPList", &this_info, 0); } return this_type; } /** * lasso_lib_idp_list_new: * * Creates a new #LassoLibIDPList object. * * Return value: a newly created #LassoLibIDPList object **/ LassoNode* lasso_lib_idp_list_new() { return g_object_new(LASSO_TYPE_LIB_IDP_LIST, NULL); } lasso-2.8.2/lasso/xml/PaxHeaders/lib_name_identifier_mapping_request.c0000644000000000000000000000013214114336625023247 xustar0030 mtime=1630649749.858437342 30 atime=1678814196.253247404 30 ctime=1678814320.329949438 lasso-2.8.2/lasso/xml/lib_name_identifier_mapping_request.c0000644000175000017500000001356114114336625026525 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "private.h" #include "lib_name_identifier_mapping_request.h" /** * SECTION:lib_name_identifier_mapping_request * @short_description: <lib:NameIdentifierMappingRequest> * *
Schema fragment for lib:NameIdentifierMappingRequest * * * * * * * * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "Extension", SNIPPET_EXTENSION, G_STRUCT_OFFSET(LassoLibNameIdentifierMappingRequest, Extension), NULL, NULL, NULL}, { "ProviderID", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoLibNameIdentifierMappingRequest, ProviderID), NULL, NULL, NULL}, { "NameIdentifier", SNIPPET_NODE, G_STRUCT_OFFSET(LassoLibNameIdentifierMappingRequest, NameIdentifier), NULL, LASSO_SAML_ASSERTION_PREFIX, LASSO_SAML_ASSERTION_HREF}, { "TargetNamespace", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoLibNameIdentifierMappingRequest, TargetNamespace), NULL, NULL, NULL}, { "consent", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoLibNameIdentifierMappingRequest, consent), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoLibNameIdentifierMappingRequestClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "NameIdentifierMappingRequest"); lasso_node_class_set_ns(nclass, LASSO_LIB_HREF, LASSO_LIB_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_lib_name_identifier_mapping_request_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoLibNameIdentifierMappingRequestClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoLibNameIdentifierMappingRequest), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_SAMLP_REQUEST_ABSTRACT, "LassoLibNameIdentifierMappingRequest", &this_info, 0); } return this_type; } /** * lasso_lib_name_identifier_mapping_request_new: * * Creates a new #LassoLibNameIdentifierMappingRequest object. * * Return value: a newly created #LassoLibNameIdentifierMappingRequest object **/ LassoNode* lasso_lib_name_identifier_mapping_request_new() { return g_object_new(LASSO_TYPE_LIB_NAME_IDENTIFIER_MAPPING_REQUEST, NULL); } /** * lasso_lib_name_identifier_mapping_request_new_full: * @providerID: the provider ID requesting the name identifier mapping * @nameIdentifier: a #LassoSamlNameIdentifier object * @targetNamespace: an URI for the target namespace * @sign_type: a #LassoSignatureType value * @sign_method: a #LassoSignatureMethod value * * Creates a new #LassoLibNameIdentifierMappingRequest object and initializes it with the * parameters. It also setups the signature on the request object, you must preceise the signing key * later. * * Return value: a newly created #LassoLibNameIdentifierMappingRequest object **/ LassoNode* lasso_lib_name_identifier_mapping_request_new_full(char *providerID, LassoSamlNameIdentifier *nameIdentifier, const char *targetNamespace, LassoSignatureType sign_type, LassoSignatureMethod sign_method) { LassoSamlpRequestAbstract *request; request = g_object_new(LASSO_TYPE_LIB_NAME_IDENTIFIER_MAPPING_REQUEST, NULL); request->RequestID = lasso_build_unique_id(32); request->MajorVersion = LASSO_LIB_MAJOR_VERSION_N; request->MinorVersion = LASSO_LIB_MINOR_VERSION_N; request->IssueInstant = lasso_get_current_time(); request->sign_type = sign_type; request->sign_method = sign_method; /* ProviderID */ LASSO_LIB_NAME_IDENTIFIER_MAPPING_REQUEST(request)->ProviderID = g_strdup(providerID); LASSO_LIB_NAME_IDENTIFIER_MAPPING_REQUEST(request)->NameIdentifier = g_object_ref(nameIdentifier); LASSO_LIB_NAME_IDENTIFIER_MAPPING_REQUEST(request)->TargetNamespace = g_strdup(targetNamespace); /* XXX: consent ? */ return LASSO_NODE(request); } lasso-2.8.2/lasso/xml/PaxHeaders/saml_attribute_statement.c0000644000000000000000000000013214114336625021117 xustar0030 mtime=1630649749.874437517 30 atime=1678814204.249292362 30 ctime=1678814320.349949552 lasso-2.8.2/lasso/xml/saml_attribute_statement.c0000644000175000017500000000667014114336625024400 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "private.h" #include "saml_attribute_statement.h" /** * SECTION:saml_attribute_statement * @short_description: object mapping for a saml:AttributeStatement * * The schema fragment (oasis-sstc-saml-schema-assertion-1.1.xsd): *
* Schema fragment for saml:AttributeStatement * * * * * * * * * * * * ]]> * *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "Attribute", SNIPPET_LIST_NODES, G_STRUCT_OFFSET(LassoSamlAttributeStatement, Attribute), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSamlAttributeStatementClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "AttributeStatement"); lasso_node_class_set_ns(nclass, LASSO_SAML_ASSERTION_HREF, LASSO_SAML_ASSERTION_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_saml_attribute_statement_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSamlAttributeStatementClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSamlAttributeStatement), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_SAML_SUBJECT_STATEMENT_ABSTRACT, "LassoSamlAttributeStatement", &this_info, 0); } return this_type; } /** * lasso_saml_attribute_statement_new: * * Creates a new #LassoSamlAttributeStatement object. * * Return value: a newly created #LassoSamlAttributeStatement object **/ LassoSamlAttributeStatement* lasso_saml_attribute_statement_new() { return g_object_new(LASSO_TYPE_SAML_ATTRIBUTE_STATEMENT, NULL); } lasso-2.8.2/lasso/xml/PaxHeaders/samlp_request.h0000644000000000000000000000013214114336625016705 xustar0030 mtime=1630649749.874437517 30 atime=1678814151.024993934 30 ctime=1678814320.293949233 lasso-2.8.2/lasso/xml/samlp_request.h0000644000175000017500000000427714114336625022167 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAMLP_REQUEST_H__ #define __LASSO_SAMLP_REQUEST_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "samlp_request_abstract.h" #define LASSO_TYPE_SAMLP_REQUEST (lasso_samlp_request_get_type()) #define LASSO_SAMLP_REQUEST(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAMLP_REQUEST, LassoSamlpRequest)) #define LASSO_SAMLP_REQUEST_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAMLP_REQUEST, LassoSamlpRequestClass)) #define LASSO_IS_SAMLP_REQUEST(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAMLP_REQUEST)) #define LASSO_IS_SAMLP_REQUEST_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAMLP_REQUEST)) #define LASSO_SAMLP_REQUEST_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAMLP_REQUEST, LassoSamlpRequestClass)) typedef struct _LassoSamlpRequest LassoSamlpRequest; typedef struct _LassoSamlpRequestClass LassoSamlpRequestClass; struct _LassoSamlpRequest { LassoSamlpRequestAbstract parent; /*< public >*/ /* */ char *AssertionArtifact; }; struct _LassoSamlpRequestClass { LassoSamlpRequestAbstractClass parent; }; LASSO_EXPORT GType lasso_samlp_request_get_type(void); LASSO_EXPORT LassoNode* lasso_samlp_request_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAMLP_REQUEST_H__ */ lasso-2.8.2/lasso/xml/PaxHeaders/saml_attribute_designator.h0000644000000000000000000000013214114336625021257 xustar0030 mtime=1630649749.874437517 30 atime=1678814151.024993934 30 ctime=1678814320.269949096 lasso-2.8.2/lasso/xml/saml_attribute_designator.h0000644000175000017500000000466414114336625024541 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAML_ATTRIBUTE_DESIGNATOR_H__ #define __LASSO_SAML_ATTRIBUTE_DESIGNATOR_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "xml.h" #define LASSO_TYPE_SAML_ATTRIBUTE_DESIGNATOR (lasso_saml_attribute_designator_get_type()) #define LASSO_SAML_ATTRIBUTE_DESIGNATOR(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML_ATTRIBUTE_DESIGNATOR, \ LassoSamlAttributeDesignator)) #define LASSO_SAML_ATTRIBUTE_DESIGNATOR_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML_ATTRIBUTE_DESIGNATOR, \ LassoSamlAttributeDesignatorClass)) #define LASSO_IS_SAML_ATTRIBUTE_DESIGNATOR(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML_ATTRIBUTE_DESIGNATOR)) #define LASSO_IS_SAML_ATTRIBUTE_DESIGNATOR_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML_ATTRIBUTE_DESIGNATOR)) #define LASSO_SAML_ATTRIBUTE_DESIGNATOR_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML_ATTRIBUTE_DESIGNATOR, \ LassoSamlAttributeDesignatorClass)) typedef struct _LassoSamlAttributeDesignator LassoSamlAttributeDesignator; typedef struct _LassoSamlAttributeDesignatorClass LassoSamlAttributeDesignatorClass; struct _LassoSamlAttributeDesignator { LassoNode parent; /*< public >*/ char *AttributeName; char *AttributeNamespace; }; struct _LassoSamlAttributeDesignatorClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_saml_attribute_designator_get_type(void); LASSO_EXPORT LassoNode* lasso_saml_attribute_designator_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAML_ATTRIBUTE_DESIGNATOR_H__ */ lasso-2.8.2/lasso/xml/PaxHeaders/saml_subject.h0000644000000000000000000000013214114336625016474 xustar0030 mtime=1630649749.874437517 30 atime=1678814151.024993934 30 ctime=1678814320.285949188 lasso-2.8.2/lasso/xml/saml_subject.h0000644000175000017500000000444714114336625021755 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAML_SUBJECT_H__ #define __LASSO_SAML_SUBJECT_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "xml.h" #include "saml_name_identifier.h" #include "saml_subject_confirmation.h" #include "saml-2.0/saml2_encrypted_element.h" #define LASSO_TYPE_SAML_SUBJECT (lasso_saml_subject_get_type()) #define LASSO_SAML_SUBJECT(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML_SUBJECT, LassoSamlSubject)) #define LASSO_SAML_SUBJECT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML_SUBJECT, LassoSamlSubjectClass)) #define LASSO_IS_SAML_SUBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML_SUBJECT)) #define LASSO_IS_SAML_SUBJECT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML_SUBJECT)) #define LASSO_SAML_SUBJECT_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML_SUBJECT, LassoSamlSubjectClass)) typedef struct _LassoSamlSubject LassoSamlSubject; typedef struct _LassoSamlSubjectClass LassoSamlSubjectClass; struct _LassoSamlSubject { LassoNode parent; /*< public >*/ LassoSamlNameIdentifier *NameIdentifier; LassoSamlSubjectConfirmation *SubjectConfirmation; LassoSaml2EncryptedElement *EncryptedNameIdentifier; }; struct _LassoSamlSubjectClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_saml_subject_get_type(void); LASSO_EXPORT LassoNode* lasso_saml_subject_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAML_SUBJECT_H__ */ lasso-2.8.2/lasso/xml/PaxHeaders/lib_logout_response.c0000644000000000000000000000013214114336625020071 xustar0030 mtime=1630649749.858437342 30 atime=1678814195.741244527 30 ctime=1678814320.329949438 lasso-2.8.2/lasso/xml/lib_logout_response.c0000644000175000017500000001004614114336625023342 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "private.h" #include "lib_logout_response.h" /** * SECTION:lib_logout_response * @short_description: <lib:LogoutResponse> * *
Schema fragment for lib:LogoutResponse * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoLibLogoutResponseClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "LogoutResponse"); lasso_node_class_set_ns(nclass, LASSO_LIB_HREF, LASSO_LIB_PREFIX); } GType lasso_lib_logout_response_get_type() { static GType logout_response_type = 0; if (!logout_response_type) { static const GTypeInfo logout_response_info = { sizeof (LassoLibLogoutResponseClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoLibLogoutResponse), 0, NULL, NULL, }; logout_response_type = g_type_register_static(LASSO_TYPE_LIB_STATUS_RESPONSE, "LassoLibLogoutResponse", &logout_response_info, 0); } return logout_response_type; } /** * lasso_lib_logout_response_new: * * Creates a new #LassoLibLogoutResponse object. * * Return value: a newly created #LassoLibLogoutResponse object **/ LassoNode* lasso_lib_logout_response_new() { return g_object_new(LASSO_TYPE_LIB_LOGOUT_RESPONSE, NULL); } /** * lasso_lib_logout_response_new_full: * @providerID: the providerID of the responded * @statusCodeValue: a response status code * @request: the request this is a response to * @sign_type: a #LassoSignatureType value * @sign_method: a #LassoSignatureMethod value * * Creates a new #LassoLibLogoutResponse object and initializes it with the * parameters. * * Return value: a newly created #LassoLibLogoutResponse object **/ LassoNode* lasso_lib_logout_response_new_full(char *providerID, const char *statusCodeValue, LassoLibLogoutRequest *request, LassoSignatureType sign_type, LassoSignatureMethod sign_method) { LassoLibStatusResponse *response; response = g_object_new(LASSO_TYPE_LIB_LOGOUT_RESPONSE, NULL); lasso_samlp_response_abstract_fill( LASSO_SAMLP_RESPONSE_ABSTRACT(response), LASSO_SAMLP_REQUEST_ABSTRACT(request)->RequestID, request->ProviderID); LASSO_SAMLP_RESPONSE_ABSTRACT(response)->sign_type = sign_type; LASSO_SAMLP_RESPONSE_ABSTRACT(response)->sign_method = sign_method; response->ProviderID = g_strdup(providerID); response->RelayState = g_strdup(request->RelayState); response->Status = lasso_samlp_status_new(); response->Status->StatusCode = lasso_samlp_status_code_new(); response->Status->StatusCode->Value = g_strdup(statusCodeValue); return LASSO_NODE(response); } lasso-2.8.2/lasso/xml/PaxHeaders/lib_request_authn_context.c0000644000000000000000000000013214114336625021275 xustar0030 mtime=1630649749.858437342 30 atime=1678814198.209258398 30 ctime=1678814320.337949483 lasso-2.8.2/lasso/xml/lib_request_authn_context.c0000644000175000017500000000755514114336625024561 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "private.h" #include "lib_request_authn_context.h" /** * SECTION:lib_request_authn_context * @short_description: <lib:RequestAuthnContext> * * Information describing which authentication context the requester desires the * identity provider to use in authenticating the Principal. * *
Schema fragment for lib:RequestAuthnContext * * * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "AuthnContextClassRef", SNIPPET_LIST_CONTENT, G_STRUCT_OFFSET(LassoLibRequestAuthnContext, AuthnContextClassRef), NULL, NULL, NULL}, { "AuthnContextStatementRef", SNIPPET_LIST_CONTENT, G_STRUCT_OFFSET(LassoLibRequestAuthnContext, AuthnContextStatementRef), NULL, NULL, NULL}, { "AuthnContextComparison", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoLibRequestAuthnContext, AuthnContextComparison), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoLibRequestAuthnContextClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "RequestAuthnContext"); lasso_node_class_set_ns(nclass, LASSO_LIB_HREF, LASSO_LIB_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_lib_request_authn_context_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoLibRequestAuthnContextClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoLibRequestAuthnContext), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoLibRequestAuthnContext", &this_info, 0); } return this_type; } /** * lasso_lib_request_authn_context_new: * * Creates a new #LassoLibRequestAuthnContext object. * * Return value: a newly created #LassoLibRequestAuthnContext object **/ LassoLibRequestAuthnContext* lasso_lib_request_authn_context_new() { return g_object_new(LASSO_TYPE_LIB_REQUEST_AUTHN_CONTEXT, NULL); } lasso-2.8.2/lasso/xml/PaxHeaders/lib_logout_request.h0000644000000000000000000000013214114336625017730 xustar0030 mtime=1630649749.858437342 30 atime=1678814151.012993868 30 ctime=1678814320.241948937 lasso-2.8.2/lasso/xml/lib_logout_request.h0000644000175000017500000000570614114336625023210 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_LIB_LOGOUT_REQUEST_H__ #define __LASSO_LIB_LOGOUT_REQUEST_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "samlp_request_abstract.h" #include "saml_name_identifier.h" #define LASSO_TYPE_LIB_LOGOUT_REQUEST (lasso_lib_logout_request_get_type()) #define LASSO_LIB_LOGOUT_REQUEST(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_LIB_LOGOUT_REQUEST, LassoLibLogoutRequest)) #define LASSO_LIB_LOGOUT_REQUEST_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_LIB_LOGOUT_REQUEST, \ LassoLibLogoutRequestClass)) #define LASSO_IS_LIB_LOGOUT_REQUEST(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_LIB_LOGOUT_REQUEST)) #define LASSO_IS_LIB_LOGOUT_REQUEST_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_LIB_LOGOUT_REQUEST)) #define LASSO_LIB_LOGOUT_REQUEST_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_LIB_LOGOUT_REQUEST, \ LassoLibLogoutRequestClass)) typedef struct _LassoLibLogoutRequest LassoLibLogoutRequest; typedef struct _LassoLibLogoutRequestClass LassoLibLogoutRequestClass; struct _LassoLibLogoutRequest { LassoSamlpRequestAbstract parent; /*< public >*/ /* */ GList *Extension; /* of xmlNode* */ char *ProviderID; LassoSamlNameIdentifier *NameIdentifier; char *SessionIndex; char *RelayState; char *consent; char *NotOnOrAfter; }; struct _LassoLibLogoutRequestClass { LassoSamlpRequestAbstractClass parent; }; LASSO_EXPORT GType lasso_lib_logout_request_get_type(void); LASSO_EXPORT LassoNode* lasso_lib_logout_request_new(void); LASSO_EXPORT LassoNode* lasso_lib_logout_request_new_full( char *providerID, LassoSamlNameIdentifier *nameIdentifier, LassoSignatureType sign_type, LassoSignatureMethod sign_method); LASSO_EXPORT void lasso_lib_logout_request_set_session_indexes( LassoLibLogoutRequest *lib_logout_request, GList *session_indexes); LASSO_EXPORT GList* lasso_lib_logout_request_get_session_indexes( LassoLibLogoutRequest *lib_logout_request); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_LIB_LOGOUT_REQUEST_H__ */ lasso-2.8.2/lasso/xml/PaxHeaders/lib_authentication_statement.c0000644000000000000000000000013214114336625021745 xustar0030 mtime=1630649749.854437299 30 atime=1678814190.569215472 30 ctime=1678814320.313949347 lasso-2.8.2/lasso/xml/lib_authentication_statement.c0000644000175000017500000001542014114336625025217 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "private.h" #include "lib_authentication_statement.h" #include "lib_subject.h" /** * SECTION:lib_authentication_statement * @short_description: <lib:AuthenticationStatement> * *
Schema fragment for lib:AuthenticationStatement * * * * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "AuthnContext", SNIPPET_NODE, G_STRUCT_OFFSET(LassoLibAuthenticationStatement, AuthnContext), NULL, NULL, NULL}, { "ReauthenticateOnOrAfter", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoLibAuthenticationStatement, ReauthenticateOnOrAfter), NULL, NULL, NULL}, { "SessionIndex", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoLibAuthenticationStatement, SessionIndex), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoLibAuthenticationStatementClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); nclass->node_data->xsi_sub_type = TRUE; lasso_node_class_set_nodename(nclass, "AuthenticationStatementType"); lasso_node_class_set_ns(nclass, LASSO_LIB_HREF, LASSO_LIB_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_lib_authentication_statement_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoLibAuthenticationStatementClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoLibAuthenticationStatement), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_SAML_AUTHENTICATION_STATEMENT, "LassoLibAuthenticationStatement", &this_info, 0); } return this_type; } /** * lasso_lib_authentication_statement_new: * * Creates a new #LassoLibAuthenticationStatement object. * * Return value: a newly created #LassoLibAuthenticationStatement object **/ LassoLibAuthenticationStatement* lasso_lib_authentication_statement_new(void) { return g_object_new(LASSO_TYPE_LIB_AUTHENTICATION_STATEMENT, NULL); } /** * lasso_lib_authentication_statement_new_full: * @authenticationMethod: an URI identifier for the authentication method * @authenticationInstant:(allow-none): an ISO-8601 formatted timestamp for the authentication * instant * @reauthenticateOnOrAfter:(allow-none): an ISO-8601 formatted timestamp to set a limit on the value of this * authentication * @sp_identifier:(allow-none) a #LassoSamlNameIdentifier object, the SP qualifier for the subject of this statement * @idp_identifier: a #LassoSamlNameIdentifier object, the IdP qualifier for the subject of this statemtn * * Creates a new #LassoLibAuthenticationStatement object and initializes its subject, * its AuthenticationMethod, its AuthenticationInstant, * * Return value: a newly created #LassoLibAuthenticationStatement object **/ LassoLibAuthenticationStatement* lasso_lib_authentication_statement_new_full(const char *authenticationMethod, const char *authenticationInstant, const char *reauthenticateOnOrAfter, LassoSamlNameIdentifier *sp_identifier, LassoSamlNameIdentifier *idp_identifier) { LassoSamlAuthenticationStatement *statement; LassoSamlNameIdentifier *new_identifier, *new_idp_identifier; LassoLibSubject *subject; LassoSamlSubjectConfirmation *subject_confirmation; char *time; g_return_val_if_fail(LASSO_IS_SAML_NAME_IDENTIFIER(idp_identifier), NULL); g_return_val_if_fail(authenticationMethod, NULL); subject = lasso_lib_subject_new(); if (sp_identifier == NULL) { new_identifier = idp_identifier; } else { new_identifier = sp_identifier; } statement = g_object_new(LASSO_TYPE_LIB_AUTHENTICATION_STATEMENT, NULL); statement->AuthenticationMethod = g_strdup(authenticationMethod); if (authenticationInstant == NULL) { time = lasso_get_current_time(); } else { time = g_strdup(authenticationInstant); } statement->AuthenticationInstant = time; LASSO_LIB_AUTHENTICATION_STATEMENT(statement)->ReauthenticateOnOrAfter = g_strdup(reauthenticateOnOrAfter); LASSO_SAML_SUBJECT(subject)->NameIdentifier = g_object_ref(new_identifier); if (sp_identifier != NULL) { /* create a new IdpProvidedNameIdentifier and use idp_identifier data to fill it */ new_idp_identifier = lasso_saml_name_identifier_new(); new_idp_identifier->content = g_strdup(idp_identifier->content); new_idp_identifier->NameQualifier = g_strdup(idp_identifier->NameQualifier); new_idp_identifier->Format = g_strdup(idp_identifier->Format); subject->IDPProvidedNameIdentifier = new_idp_identifier; } /* SubjectConfirmation & Subject */ subject_confirmation = lasso_saml_subject_confirmation_new(); subject_confirmation->ConfirmationMethod = NULL; LASSO_SAML_SUBJECT(subject)->SubjectConfirmation = subject_confirmation; LASSO_SAML_SUBJECT_STATEMENT_ABSTRACT(statement)->Subject = LASSO_SAML_SUBJECT(subject); return LASSO_LIB_AUTHENTICATION_STATEMENT(statement); } lasso-2.8.2/lasso/xml/PaxHeaders/saml_statement_abstract.c0000644000000000000000000000012714114336625020723 xustar0030 mtime=1630649749.874437517 28 atime=1678814209.0013191 29 ctime=1678814320.36194962 lasso-2.8.2/lasso/xml/saml_statement_abstract.c0000644000175000017500000000501214114336625024165 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "private.h" #include "saml_statement_abstract.h" /** * SECTION:saml_statement_abstract * @short_description: <saml:StatementAbstract> * *
Schema fragment for saml:StatementAbstract * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSamlStatementAbstractClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "StatementAbstract"); lasso_node_class_set_ns(nclass, LASSO_SAML_ASSERTION_HREF, LASSO_SAML_ASSERTION_PREFIX); } GType lasso_saml_statement_abstract_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSamlStatementAbstractClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSamlStatementAbstract), 0, NULL, NULL, }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoSamlStatementAbstract", &this_info, 0); } return this_type; } lasso-2.8.2/lasso/xml/PaxHeaders/paos_request.c0000644000000000000000000000013214114336625016526 xustar0030 mtime=1630649749.858437342 30 atime=1678814200.557271598 30 ctime=1678814320.341949506 lasso-2.8.2/lasso/xml/paos_request.c0000644000175000017500000001561714114336625022010 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "private.h" #include "paos_request.h" #include /** * SECTION:paos_request * @short_description: <paos:Request> * *
Schema fragment for paos:Request * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* public methods */ /*****************************************************************************/ /** * lasso_paos_request_validate: * @request: The #LassoPaosRequest object to validate * * Validates the object conforms to required values. * * * responseConsumerURL must be non-NULL * mustUnderstand must be TRUE * actor must be equal to #LASSO_SOAP_ENV_ACTOR * service must be equal to #LASSO_ECP_HREF * * * Returns: 0 on success, error code otherwise **/ int lasso_paos_request_validate(LassoPaosRequest *request) { g_return_val_if_fail(LASSO_IS_PAOS_REQUEST(request), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); if (request->responseConsumerURL == NULL) { error("%s.responseConsumerURL missing", G_OBJECT_CLASS_NAME(request)); return LASSO_XML_ERROR_ATTR_NOT_FOUND; } if (request->service == NULL) { error("%s.service missing", G_OBJECT_CLASS_NAME(request)); return LASSO_XML_ERROR_ATTR_NOT_FOUND; } if (lasso_strisnotequal(request->service, LASSO_ECP_HREF)) { error("%s.service invalid, must be \"%s\" not \"%s\"", G_OBJECT_CLASS_NAME(request), LASSO_ECP_HREF, request->service); return LASSO_XML_ERROR_ATTR_VALUE_INVALID; } if (!request->mustUnderstand) { error("%s.mustUnderstand must be True", G_OBJECT_CLASS_NAME(request)); return LASSO_XML_ERROR_ATTR_VALUE_INVALID; } if (request->actor == NULL) { error("%s.actor missing", G_OBJECT_CLASS_NAME(request)); return LASSO_XML_ERROR_ATTR_NOT_FOUND; } if (lasso_strisnotequal(request->actor, LASSO_SOAP_ENV_ACTOR)) { error("%s.actor invalid, must be \"%s\" not \"%s\"", G_OBJECT_CLASS_NAME(request), LASSO_SOAP_ENV_ACTOR, request->actor); return LASSO_XML_ERROR_ATTR_VALUE_INVALID; } return 0; } /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "responseConsumerURL", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoPaosRequest, responseConsumerURL), NULL, NULL, NULL}, { "service", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoPaosRequest, service), NULL, NULL, NULL}, { "messageID", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoPaosRequest, messageID), NULL, NULL, NULL}, { "mustUnderstand", SNIPPET_ATTRIBUTE | SNIPPET_BOOLEAN, G_STRUCT_OFFSET(LassoPaosRequest, mustUnderstand), NULL, LASSO_SOAP_ENV_PREFIX, LASSO_SOAP_ENV_HREF}, { "actor", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoPaosRequest, actor), NULL, LASSO_SOAP_ENV_PREFIX, LASSO_SOAP_ENV_HREF}, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; static int init_from_xml(LassoNode *node, xmlNode *xmlnode) { lasso_error_t rc = 0; LassoPaosRequest *request = LASSO_PAOS_REQUEST(node); lasso_check_good_rc(parent_class->init_from_xml(node, xmlnode)); lasso_check_good_rc(lasso_paos_request_validate(request)); cleanup: return rc; } /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoPaosRequestClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); nclass->init_from_xml = init_from_xml; lasso_node_class_set_nodename(nclass, "Request"); lasso_node_class_set_ns(nclass, LASSO_PAOS_HREF, LASSO_PAOS_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_paos_request_get_type() { static GType paos_request_type = 0; if (!paos_request_type) { static const GTypeInfo request_info = { sizeof (LassoPaosRequestClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoPaosRequest), 0, NULL, NULL }; paos_request_type = g_type_register_static(LASSO_TYPE_NODE, "LassoPaosRequest", &request_info, 0); } return paos_request_type; } /** * lasso_paos_request_new: * @responseConsumerURL: (allow-none): * @messageID: (allow-none): * * The #LassoPaosRequest object is initialized as follows: * * responseConsumerURL = @responseConsumerURL (if non-NULL) * messageID = @messageID (if non-NULL) otherwise generated unique id * mustUnderstand = TRUE * actor = #LASSO_SOAP_ENV_ACTOR * service = #LASSO_ECP_HREF * * * Returns: newly created & initialized #LassoPaosRequest object **/ LassoNode* lasso_paos_request_new(const gchar *responseConsumerURL, const gchar *messageID) { LassoPaosRequest *request; request = g_object_new(LASSO_TYPE_PAOS_REQUEST, NULL); if (responseConsumerURL) { request->responseConsumerURL = g_strdup(responseConsumerURL); } if (messageID) { request->messageID = g_strdup(messageID); } else { request->messageID = lasso_build_unique_id(32); } request->mustUnderstand = TRUE; request->actor = g_strdup(LASSO_SOAP_ENV_ACTOR); request->service = g_strdup(LASSO_ECP_HREF); return LASSO_NODE(request); } lasso-2.8.2/lasso/xml/PaxHeaders/saml_subject.c0000644000000000000000000000013114114336625016466 xustar0030 mtime=1630649749.874437517 30 atime=1678814209.473321756 29 ctime=1678814320.36194962 lasso-2.8.2/lasso/xml/saml_subject.c0000644000175000017500000000661314114336625021745 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "private.h" #include "saml_subject.h" /** * SECTION:saml_subject * @short_description: <saml:Subject> * *
Schema fragment for saml:Subject * * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "NameIdentifier", SNIPPET_NODE | SNIPPET_JUMP_ON_MISS | SNIPPET_JUMP_2, G_STRUCT_OFFSET(LassoSamlSubject, NameIdentifier), NULL, NULL, NULL}, { "EncryptedNameIdentifier", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSamlSubject, EncryptedNameIdentifier), "LassoSaml2EncryptedElement", NULL, NULL }, { "SubjectConfirmation", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSamlSubject, SubjectConfirmation), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSamlSubjectClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "Subject"); lasso_node_class_set_ns(nclass, LASSO_SAML_ASSERTION_HREF, LASSO_SAML_ASSERTION_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_saml_subject_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSamlSubjectClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSamlSubject), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoSamlSubject", &this_info, 0); } return this_type; } /** * lasso_saml_subject_new: * * Creates a new #LassoSamlSubject object. * * Return value: a newly created #LassoSamlSubject object **/ LassoNode* lasso_saml_subject_new() { return g_object_new(LASSO_TYPE_SAML_SUBJECT, NULL); } lasso-2.8.2/lasso/xml/PaxHeaders/lib_idp_entries.c0000644000000000000000000000013214114336625017147 xustar0030 mtime=1630649749.858437342 30 atime=1678814193.793233581 30 ctime=1678814320.321949393 lasso-2.8.2/lasso/xml/lib_idp_entries.c0000644000175000017500000000573014114336625022424 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "private.h" #include "lib_idp_entries.h" /** * SECTION:lib_idp_entries * @short_description: <lib:IDPEntries> * *
Schema fragment for lib:IDPEntries * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "IDPEntry", SNIPPET_LIST_NODES, G_STRUCT_OFFSET(LassoLibIDPEntries, IDPEntry), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoLibIDPEntriesClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "IDPEntries"); lasso_node_class_set_ns(nclass, LASSO_LIB_HREF, LASSO_LIB_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_lib_idp_entries_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoLibIDPEntriesClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoLibIDPEntries), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoLibIDPEntries", &this_info, 0); } return this_type; } /** * lasso_lib_idp_entries_new: * * Creates a new #LassoLibIDPEntries object. * * Return value: a newly created #LassoLibIDPEntries object **/ LassoNode* lasso_lib_idp_entries_new() { return g_object_new(LASSO_TYPE_LIB_IDP_ENTRIES, NULL); } lasso-2.8.2/lasso/xml/PaxHeaders/lib_authn_response_envelope.h0000644000000000000000000000013214114336625021601 xustar0030 mtime=1630649749.858437342 30 atime=1678814151.012993868 30 ctime=1678814320.233948891 lasso-2.8.2/lasso/xml/lib_authn_response_envelope.h0000644000175000017500000000520414114336625025052 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_LIB_AUTHN_RESPONSE_ENVELOPE_H__ #define __LASSO_LIB_AUTHN_RESPONSE_ENVELOPE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "lib_authn_response.h" #define LASSO_TYPE_LIB_AUTHN_RESPONSE_ENVELOPE (lasso_lib_authn_response_envelope_get_type()) #define LASSO_LIB_AUTHN_RESPONSE_ENVELOPE(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_LIB_AUTHN_RESPONSE_ENVELOPE, \ LassoLibAuthnResponseEnvelope)) #define LASSO_LIB_AUTHN_RESPONSE_ENVELOPE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_LIB_AUTHN_RESPONSE_ENVELOPE, \ LassoLibAuthnResponseEnvelopeClass)) #define LASSO_IS_LIB_AUTHN_RESPONSE_ENVELOPE(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_LIB_AUTHN_RESPONSE_ENVELOPE)) #define LASSO_IS_LIB_AUTHN_RESPONSE_ENVELOPE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_LIB_AUTHN_RESPONSE_ENVELOPE)) #define LASSO_LIB_AUTHN_RESPONSE_ENVELOPE_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_LIB_AUTHN_RESPONSE_ENVELOPE, \ LassoLibAuthnResponseEnvelopeClass)) typedef struct _LassoLibAuthnResponseEnvelope LassoLibAuthnResponseEnvelope; typedef struct _LassoLibAuthnResponseEnvelopeClass LassoLibAuthnResponseEnvelopeClass; struct _LassoLibAuthnResponseEnvelope { LassoNode parent; /*< public >*/ GList *Extension; /* of xmlNode* */ LassoLibAuthnResponse *AuthnResponse; char *AssertionConsumerServiceURL; }; struct _LassoLibAuthnResponseEnvelopeClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_lib_authn_response_envelope_get_type (void); LASSO_EXPORT LassoLibAuthnResponseEnvelope* lasso_lib_authn_response_envelope_new( LassoLibAuthnResponse *response, char *assertionConsumerServiceURL); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_LIB_AUTHN_RESPONSE_ENVELOPE_H__ */ lasso-2.8.2/lasso/xml/PaxHeaders/saml_authority_binding.h0000644000000000000000000000013214114336625020557 xustar0030 mtime=1630649749.874437517 30 atime=1678814151.024993934 30 ctime=1678814320.277949142 lasso-2.8.2/lasso/xml/saml_authority_binding.h0000644000175000017500000000506214114336625024032 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAML_AUTHORITY_BINDING_H__ #define __LASSO_SAML_AUTHORITY_BINDING_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "xml.h" #define LASSO_TYPE_SAML_AUTHORITY_BINDING (lasso_saml_authority_binding_get_type()) #define LASSO_SAML_AUTHORITY_BINDING(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML_AUTHORITY_BINDING, \ LassoSamlAuthorityBinding)) #define LASSO_SAML_AUTHORITY_BINDING_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML_AUTHORITY_BINDING, \ LassoSamlAuthorityBindingClass)) #define LASSO_IS_SAML_AUTHORITY_BINDING(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML_AUTHORITY_BINDING)) #define LASSO_IS_SAML_AUTHORITY_BINDING_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML_AUTHORITY_BINDING)) #define LASSO_SAML_AUTHORITY_BINDING_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML_AUTHORITY_BINDING, \ LassoSamlAuthorityBindingClass)) typedef struct _LassoSamlAuthorityBinding LassoSamlAuthorityBinding; typedef struct _LassoSamlAuthorityBindingClass LassoSamlAuthorityBindingClass; struct _LassoSamlAuthorityBinding { LassoNode parent; /*< public >*/ /* */ char *AuthorityKind; /* */ char *Location; /* */ char *Binding; }; struct _LassoSamlAuthorityBindingClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_saml_authority_binding_get_type(void); LASSO_EXPORT LassoNode* lasso_saml_authority_binding_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAML_AUTHORITY_BINDING_H__ */ lasso-2.8.2/lasso/xml/PaxHeaders/lib_register_name_identifier_request.c0000644000000000000000000000013214114336625023440 xustar0030 mtime=1630649749.858437342 30 atime=1678814197.237252935 30 ctime=1678814320.333949461 lasso-2.8.2/lasso/xml/lib_register_name_identifier_request.c0000644000175000017500000002124114114336625026710 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "private.h" #include "lib_register_name_identifier_request.h" #include "../utils.h" /** * SECTION:lib_register_name_identifier_request * @short_description: <lib:RegisterNameIdentifierRequest> * *
Schema fragment for lib:RegisterNameIdentifierRequest * * * * * * * * * * * * * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "Extension", SNIPPET_EXTENSION, G_STRUCT_OFFSET(LassoLibRegisterNameIdentifierRequest, Extension), NULL, NULL, NULL}, { "ProviderID", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoLibRegisterNameIdentifierRequest, ProviderID), NULL, NULL, NULL}, { "IDPProvidedNameIdentifier", SNIPPET_NODE, G_STRUCT_OFFSET(LassoLibRegisterNameIdentifierRequest, IDPProvidedNameIdentifier), "LassoSamlNameIdentifier", LASSO_LIB_PREFIX, LASSO_LIB_HREF}, { "SPProvidedNameIdentifier", SNIPPET_NODE, G_STRUCT_OFFSET(LassoLibRegisterNameIdentifierRequest, SPProvidedNameIdentifier), "LassoSamlNameIdentifier", LASSO_LIB_PREFIX, LASSO_LIB_HREF}, { "OldProvidedNameIdentifier", SNIPPET_NODE, G_STRUCT_OFFSET(LassoLibRegisterNameIdentifierRequest, OldProvidedNameIdentifier), "LassoSamlNameIdentifier", LASSO_LIB_PREFIX, LASSO_LIB_HREF}, { "RelayState", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoLibRegisterNameIdentifierRequest, RelayState), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; static struct QuerySnippet query_snippets[] = { { "RequestID", NULL }, { "MajorVersion", NULL }, { "MinorVersion", NULL }, { "IssueInstant", NULL }, { "ProviderID", NULL }, { "IDPProvidedNameIdentifier/NameQualifier", "IDPNameQualifier"}, { "IDPProvidedNameIdentifier/Format", "IDPNameFormat"}, { "IDPProvidedNameIdentifier/content", "IDPProvidedNameIdentifier"}, { "SPProvidedNameIdentifier/NameQualifier", "SPNameQualifier"}, { "SPProvidedNameIdentifier/Format", "SPNameFormat"}, { "SPProvidedNameIdentifier/content", "SPProvidedNameIdentifier"}, { "OldProvidedNameIdentifier/NameQualifier", "OldNameQualifier"}, { "OldProvidedNameIdentifier/Format", "OldNameFormat"}, { "OldProvidedNameIdentifier/content", "OldProvidedNameIdentifier"}, { "RelayState", NULL }, { NULL, NULL } }; static LassoNodeClass *parent_class = NULL; static gboolean init_from_query(LassoNode *node, char **query_fields) { LassoLibRegisterNameIdentifierRequest *request; gboolean rc; request = LASSO_LIB_REGISTER_NAME_IDENTIFIER_REQUEST(node); request->IDPProvidedNameIdentifier = lasso_saml_name_identifier_new(); request->SPProvidedNameIdentifier = lasso_saml_name_identifier_new(); request->OldProvidedNameIdentifier = lasso_saml_name_identifier_new(); rc = parent_class->init_from_query(node, query_fields); if (request->IDPProvidedNameIdentifier->content == NULL) { lasso_release_gobject(request->IDPProvidedNameIdentifier); } if (request->SPProvidedNameIdentifier->content == NULL) { lasso_release_gobject(request->SPProvidedNameIdentifier); } if (request->OldProvidedNameIdentifier->content == NULL) { lasso_release_gobject(request->OldProvidedNameIdentifier); } if (request->ProviderID == NULL || request->OldProvidedNameIdentifier == NULL || request->IDPProvidedNameIdentifier == NULL) { return FALSE; } return rc; } /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoLibRegisterNameIdentifierRequestClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->init_from_query = init_from_query; nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "RegisterNameIdentifierRequest"); lasso_node_class_set_ns(nclass, LASSO_LIB_HREF, LASSO_LIB_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); lasso_node_class_add_query_snippets(nclass, query_snippets); } GType lasso_lib_register_name_identifier_request_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoLibRegisterNameIdentifierRequestClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoLibRegisterNameIdentifierRequest), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_SAMLP_REQUEST_ABSTRACT, "LassoLibRegisterNameIdentifierRequest", &this_info, 0); } return this_type; } /** * lasso_lib_register_name_identifier_request_new: * * Creates a new #LassoLibRegisterNameIdentifierRequest object. * * Return value: a newly created #LassoLibRegisterNameIdentifierRequest object **/ LassoNode* lasso_lib_register_name_identifier_request_new() { return g_object_new(LASSO_TYPE_LIB_REGISTER_NAME_IDENTIFIER_REQUEST, NULL); } /** * lasso_lib_register_name_identifier_request_new_full: * @providerID: the providerID of the requester * @idpNameIdentifier: a #LassoSamlNameIdentifier object, giving the new idp provided name * identifier * @spNameIdentifier: a #LassoSamlNameIdentifier object, giving the new sp provided name identifier * @oldNameIdentifier: a #LassoSamlNameIdentifier object, giving the old name identifier * @sign_type: a #LassoSignatureType value * @sign_method: a #LassoSignatureMethod value * * Creates a new #LassoLibRegisterNameIdentifierRequest object and initializes * it with the parameters. * * Return value: a newly created #LassoLibRegisterNameIdentifierRequest object **/ LassoNode* lasso_lib_register_name_identifier_request_new_full(const char *providerID, LassoSamlNameIdentifier *idpNameIdentifier, LassoSamlNameIdentifier *spNameIdentifier, LassoSamlNameIdentifier *oldNameIdentifier, LassoSignatureType sign_type, LassoSignatureMethod sign_method) { LassoLibRegisterNameIdentifierRequest *request; LassoSamlpRequestAbstract *request_base; request = g_object_new(LASSO_TYPE_LIB_REGISTER_NAME_IDENTIFIER_REQUEST, NULL); request_base = LASSO_SAMLP_REQUEST_ABSTRACT(request); request_base->RequestID = lasso_build_unique_id(32); request_base->MajorVersion = LASSO_LIB_MAJOR_VERSION_N; request_base->MinorVersion = LASSO_LIB_MINOR_VERSION_N; request_base->IssueInstant = lasso_get_current_time(); request_base->sign_type = sign_type; request_base->sign_method = sign_method; request->ProviderID = g_strdup(providerID); request->IDPProvidedNameIdentifier = idpNameIdentifier; request->SPProvidedNameIdentifier = spNameIdentifier; request->OldProvidedNameIdentifier = oldNameIdentifier; return LASSO_NODE(request_base); } lasso-2.8.2/lasso/xml/PaxHeaders/lib_authn_response_envelope.c0000644000000000000000000000013214114336625021574 xustar0030 mtime=1630649749.858437342 30 atime=1678814192.821228121 30 ctime=1678814320.321949393 lasso-2.8.2/lasso/xml/lib_authn_response_envelope.c0000644000175000017500000000667214114336625025057 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "private.h" #include "lib_authn_response_envelope.h" /** * SECTION:lib_authn_response_envelope * @short_description: <lib:AuthnResponseEnvelope> * */ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "AuthnResponse", SNIPPET_NODE, G_STRUCT_OFFSET(LassoLibAuthnResponseEnvelope, AuthnResponse), NULL, NULL, NULL}, { "AssertionConsumerServiceURL", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoLibAuthnResponseEnvelope, AssertionConsumerServiceURL), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoLibAuthnResponseEnvelopeClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "AuthnResponseEnvelope"); lasso_node_class_set_ns(nclass, LASSO_LIB_HREF, LASSO_LIB_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_lib_authn_response_envelope_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoLibAuthnResponseEnvelopeClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoLibAuthnResponseEnvelope), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoLibAuthnResponseEnvelope", &this_info, 0); } return this_type; } /** * lasso_lib_authn_response_envelope_new: * @response: the #LassoLibAuthnResponse to envelop * @assertionConsumerServiceURL: assertion consumer service URL on the service * provider * * Creates a new #LassoLibAuthnResponseEnvelope object and initializes it with * the parameters. * * Return value: a newly created #LassoLibAuthnResponseEnvelope object **/ LassoLibAuthnResponseEnvelope* lasso_lib_authn_response_envelope_new(LassoLibAuthnResponse *response, char *assertionConsumerServiceURL) { LassoLibAuthnResponseEnvelope *envelope; envelope = g_object_new(LASSO_TYPE_LIB_AUTHN_RESPONSE_ENVELOPE, NULL); if (response) { envelope->AuthnResponse = response; envelope->AssertionConsumerServiceURL = g_strdup(assertionConsumerServiceURL); } return envelope; } lasso-2.8.2/lasso/xml/PaxHeaders/samlp_status_code.c0000644000000000000000000000013214114336625017525 xustar0030 mtime=1630649749.878437561 30 atime=1678814214.609350673 30 ctime=1678814320.377949711 lasso-2.8.2/lasso/xml/samlp_status_code.c0000644000175000017500000000627014114336625023002 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "private.h" #include "samlp_status_code.h" /** * SECTION:samlp_status_code * @short_description: <samlp:StatusCode> * *
Schema fragment for samlp:StatusCode * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "StatusCode", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSamlpStatusCode, StatusCode), NULL, NULL, NULL}, { "Value", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSamlpStatusCode, Value), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSamlpStatusCodeClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "StatusCode"); lasso_node_class_set_ns(nclass, LASSO_SAML_PROTOCOL_HREF, LASSO_SAML_PROTOCOL_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_samlp_status_code_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSamlpStatusCodeClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSamlpStatusCode), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoSamlpStatusCode", &this_info, 0); } return this_type; } /** * lasso_samlp_status_code_new: * * Creates a new #LassoSamlpStatusCode object. * * Return value: a newly created #LassoSamlpStatusCode object **/ LassoSamlpStatusCode* lasso_samlp_status_code_new() { return g_object_new(LASSO_TYPE_SAMLP_STATUS_CODE, NULL); } lasso-2.8.2/lasso/xml/PaxHeaders/xml_enc.h0000644000000000000000000000013214117162531015442 xustar0030 mtime=1631380825.856638071 30 atime=1678814151.028993957 30 ctime=1678814320.301949278 lasso-2.8.2/lasso/xml/xml_enc.h0000644000175000017500000000406514117162531020717 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_XML_ENC_H__ #define __LASSO_XML_ENC_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include #include "xml.h" /** * LassoEncryptionSymKeyType: * @LASSO_ENCRYPTION_SYM_KEY_TYPE_DEFAULT : Default type (AES 128) * @LASSO_ENCRYPTION_SYM_KEY_TYPE_AES_256 : Aes 256 bits key * @LASSO_ENCRYPTION_SYM_KEY_TYPE_AES_128 : Aes 128 bits key * @LASSO_ENCRYPTION_SYM_KEY_TYPE_3DES : Triple DES 192 bits key * * Encryption symetric key type. **/ typedef enum { LASSO_ENCRYPTION_SYM_KEY_TYPE_DEFAULT, LASSO_ENCRYPTION_SYM_KEY_TYPE_AES_256, LASSO_ENCRYPTION_SYM_KEY_TYPE_AES_128, LASSO_ENCRYPTION_SYM_KEY_TYPE_3DES, LASSO_ENCRYTPION_SYM_KEY_TYPE_LAST } LassoEncryptionSymKeyType; /** * LassoKeyEncryptionMethod: * @LASSO_KEY_ENCRYPTION_METHOD_PKCS1 : RSA PKCS1.5 padding * @LASSO_KEY_ENCRYPTION_METHOD_OAEP : RSA OAEP padding * * Encryption symetric key encryption type. **/ typedef enum { LASSO_KEY_ENCRYPTION_METHOD_DEFAULT, LASSO_KEY_ENCRYPTION_METHOD_PKCS1, LASSO_KEY_ENCRYPTION_METHOD_OAEP, LASSO_KEY_ENCRYPTION_METHOD_LAST, LASSO_KEY_ENCRYPTION_METHOD_INVALID = -1 } LassoKeyEncryptionMethod; #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_XML_H__ */ lasso-2.8.2/lasso/xml/PaxHeaders/saml_subject_statement.c0000644000000000000000000000013214114336625020553 xustar0030 mtime=1630649749.874437517 30 atime=1678814210.949330065 30 ctime=1678814320.369949666 lasso-2.8.2/lasso/xml/saml_subject_statement.c0000644000175000017500000000514114114336625024024 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "private.h" #include "saml_subject_statement.h" /* The schema fragment (oasis-sstc-saml-schema-assertion-1.0.xsd): */ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSamlSubjectStatementClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "SubjectStatement"); lasso_node_class_set_ns(nclass, LASSO_SAML_ASSERTION_HREF, LASSO_SAML_ASSERTION_PREFIX); } GType lasso_saml_subject_statement_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSamlSubjectStatementClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSamlSubjectStatement), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_SAML_SUBJECT_STATEMENT_ABSTRACT, "LassoSamlSubjectStatement", &this_info, 0); } return this_type; } /** * lasso_saml_subject_statement_new: * * Creates a new #LassoSamlSubjectStatement object. * * Return value: a newly created #LassoSamlSubjectStatement object **/ LassoNode* lasso_saml_subject_statement_new() { return g_object_new(LASSO_TYPE_SAML_SUBJECT_STATEMENT, NULL); } lasso-2.8.2/lasso/xml/PaxHeaders/soap-1.10000644000000000000000000000013214404126160015023 xustar0030 mtime=1678814320.761951897 30 atime=1678814326.421984131 30 ctime=1678814320.761951897 lasso-2.8.2/lasso/xml/soap-1.1/0000755000175000017500000000000014404126160020350 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/lasso/xml/soap-1.1/PaxHeaders/Makefile.am0000644000000000000000000000013113766621500017143 xustar0030 mtime=1608196928.910896515 30 atime=1678814114.960792896 29 ctime=1678814320.73795176 lasso-2.8.2/lasso/xml/soap-1.1/Makefile.am0000644000175000017500000000074713766621500022424 0ustar00bdauvergnebdauvergne00000000000000MAINTAINERCLEANFILES = Makefile.in liblassoincludedir = $(includedir)/lasso/xml/soap-1.1 AM_CPPFLAGS = \ -I$(top_builddir) \ -I$(top_srcdir) \ $(LASSO_CORE_CFLAGS) \ -DG_LOG_DOMAIN=\"lasso\" noinst_LTLIBRARIES = liblasso-xml-soap11.la liblasso_xml_soap11_la_SOURCES = \ soap_body.c \ soap_detail.c \ soap_fault.c \ soap_envelope.c \ soap_header.c liblassoinclude_HEADERS = \ soap_body.h \ soap_detail.h \ soap_fault.h \ soap_envelope.h \ soap_header.h \ xml_soap11.h lasso-2.8.2/lasso/xml/soap-1.1/PaxHeaders/Makefile.in0000644000000000000000000000013214404125673017155 xustar0030 mtime=1678814139.952932106 30 atime=1678814149.940987877 30 ctime=1678814320.749951829 lasso-2.8.2/lasso/xml/soap-1.1/Makefile.in0000644000175000017500000006157514404125673022443 0ustar00bdauvergnebdauvergne00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = lasso/xml/soap-1.1 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ac_check_class.m4 \ $(top_srcdir)/m4/ac_check_classpath.m4 \ $(top_srcdir)/m4/ac_check_junit.m4 \ $(top_srcdir)/m4/ac_prog_jar.m4 \ $(top_srcdir)/m4/ac_prog_java.m4 \ $(top_srcdir)/m4/ac_prog_java_works.m4 \ $(top_srcdir)/m4/ac_prog_javac.m4 \ $(top_srcdir)/m4/ac_prog_javac_works.m4 \ $(top_srcdir)/m4/ac_prog_javah.m4 \ $(top_srcdir)/m4/ac_try_compile_java.m4 \ $(top_srcdir)/m4/as-compiler-flag.m4 \ $(top_srcdir)/m4/dps_java_check_class.m4 \ $(top_srcdir)/m4/dps_xtra_classpath.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(liblassoinclude_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h \ $(top_builddir)/lasso/lasso_config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) liblasso_xml_soap11_la_LIBADD = am_liblasso_xml_soap11_la_OBJECTS = soap_body.lo soap_detail.lo \ soap_fault.lo soap_envelope.lo soap_header.lo liblasso_xml_soap11_la_OBJECTS = $(am_liblasso_xml_soap11_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -I$(top_builddir)/lasso depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/soap_body.Plo \ ./$(DEPDIR)/soap_detail.Plo ./$(DEPDIR)/soap_envelope.Plo \ ./$(DEPDIR)/soap_fault.Plo ./$(DEPDIR)/soap_header.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(liblasso_xml_soap11_la_SOURCES) DIST_SOURCES = $(liblasso_xml_soap11_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(liblassoincludedir)" HEADERS = $(liblassoinclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CHECK_CFLAGS = @CHECK_CFLAGS@ CHECK_LIBS = @CHECK_LIBS@ CLASSPATH_JUNIT = @CLASSPATH_JUNIT@ CLASSPATH_OPT = @CLASSPATH_OPT@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CSHARPCILINTERPRETER = @CSHARPCILINTERPRETER@ CSHARPCOMPILER = @CSHARPCOMPILER@ CSHARPCYGPATH_W = @CSHARPCYGPATH_W@ CSHARPDYNAMICLINKING = @CSHARPDYNAMICLINKING@ CSHARPLIBRARYPREFIX = @CSHARPLIBRARYPREFIX@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEBUGGING = @DEBUGGING@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLL_FILENAME = @DLL_FILENAME@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GACUTIL = @GACUTIL@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HTML_DIR = @HTML_DIR@ INKSCAPE = @INKSCAPE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVAC_FLAGS = @JAVAC_FLAGS@ JAVAH = @JAVAH@ JAVAH_FLAGS = @JAVAH_FLAGS@ JAVA_INCLUDE = @JAVA_INCLUDE@ JAVA_JUNIT = @JAVA_JUNIT@ JAVA_VERSION = @JAVA_VERSION@ JDK_INCLUDE = @JDK_INCLUDE@ JNI_EXTRA_LDFLAGS = @JNI_EXTRA_LDFLAGS@ JUNIT = @JUNIT@ LASSO_APP_DEFINES = @LASSO_APP_DEFINES@ LASSO_CFLAGS = @LASSO_CFLAGS@ LASSO_CORE_CFLAGS = @LASSO_CORE_CFLAGS@ LASSO_CORE_LIBS = @LASSO_CORE_LIBS@ LASSO_DEFINES = @LASSO_DEFINES@ LASSO_DOCDIR = @LASSO_DOCDIR@ LASSO_LIBS = @LASSO_LIBS@ LASSO_PUB_CFLAGS = @LASSO_PUB_CFLAGS@ LASSO_STATIC_BINARIES = @LASSO_STATIC_BINARIES@ LASSO_VERSION_INFO = @LASSO_VERSION_INFO@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PERLINSTALLSITEARCH = @PERLINSTALLSITEARCH@ PERLMAN3DIR = @PERLMAN3DIR@ PERL_CFLAGS = @PERL_CFLAGS@ PERL_VERSION = @PERL_VERSION@ PHP5 = @PHP5@ PHP5_CONFIG = @PHP5_CONFIG@ PHP5_CONFIG_DIR = @PHP5_CONFIG_DIR@ PHP5_EXTENSION_DIR = @PHP5_EXTENSION_DIR@ PHP5_INCLUDES = @PHP5_INCLUDES@ PHP5_INCLUDE_DIR = @PHP5_INCLUDE_DIR@ PHP5_LDFLAGS = @PHP5_LDFLAGS@ PHP5_LIBS = @PHP5_LIBS@ PHP5_PREFIX = @PHP5_PREFIX@ PHP5_UNPREFIXED_EXTENSION_DIR = @PHP5_UNPREFIXED_EXTENSION_DIR@ PHP5_VERSION = @PHP5_VERSION@ PHP7 = @PHP7@ PHP7_CONFIG = @PHP7_CONFIG@ PHP7_CONFIG_DIR = @PHP7_CONFIG_DIR@ PHP7_EXTENSION_DIR = @PHP7_EXTENSION_DIR@ PHP7_INCLUDES = @PHP7_INCLUDES@ PHP7_INCLUDE_DIR = @PHP7_INCLUDE_DIR@ PHP7_LDFLAGS = @PHP7_LDFLAGS@ PHP7_LIBS = @PHP7_LIBS@ PHP7_PREFIX = @PHP7_PREFIX@ PHP7_UNPREFIXED_EXTENSION_DIR = @PHP7_UNPREFIXED_EXTENSION_DIR@ PHP7_VERSION = @PHP7_VERSION@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PYTHON = @PYTHON@ PYTHON_VERSION = @PYTHON_VERSION@ PY_CFLAGS = @PY_CFLAGS@ PY_DYNLOAD = @PY_DYNLOAD@ PY_EXTRA_LIBS = @PY_EXTRA_LIBS@ PY_LIB_A = @PY_LIB_A@ PY_LIB_LOC = @PY_LIB_LOC@ PY_SITE_PACKAGES = @PY_SITE_PACKAGES@ RANLIB = @RANLIB@ RC = @RC@ REST2HTML = @REST2HTML@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_VERSION = @SWIG_VERSION@ TAR = @TAR@ TESTS_JUNIT = @TESTS_JUNIT@ UPCASED_DLL_FILENAME = @UPCASED_DLL_FILENAME@ VERSION = @VERSION@ VERSION_UNDERSCORED = @VERSION_UNDERSCORED@ WINDOWS_VERSION = @WINDOWS_VERSION@ XSLTPROC = @XSLTPROC@ Z_CFLAGS = @Z_CFLAGS@ Z_LIBS = @Z_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ uudecode = @uudecode@ MAINTAINERCLEANFILES = Makefile.in liblassoincludedir = $(includedir)/lasso/xml/soap-1.1 AM_CPPFLAGS = \ -I$(top_builddir) \ -I$(top_srcdir) \ $(LASSO_CORE_CFLAGS) \ -DG_LOG_DOMAIN=\"lasso\" noinst_LTLIBRARIES = liblasso-xml-soap11.la liblasso_xml_soap11_la_SOURCES = \ soap_body.c \ soap_detail.c \ soap_fault.c \ soap_envelope.c \ soap_header.c liblassoinclude_HEADERS = \ soap_body.h \ soap_detail.h \ soap_fault.h \ soap_envelope.h \ soap_header.h \ xml_soap11.h all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign lasso/xml/soap-1.1/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign lasso/xml/soap-1.1/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } liblasso-xml-soap11.la: $(liblasso_xml_soap11_la_OBJECTS) $(liblasso_xml_soap11_la_DEPENDENCIES) $(EXTRA_liblasso_xml_soap11_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(liblasso_xml_soap11_la_OBJECTS) $(liblasso_xml_soap11_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/soap_body.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/soap_detail.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/soap_envelope.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/soap_fault.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/soap_header.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-liblassoincludeHEADERS: $(liblassoinclude_HEADERS) @$(NORMAL_INSTALL) @list='$(liblassoinclude_HEADERS)'; test -n "$(liblassoincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(liblassoincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(liblassoincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(liblassoincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(liblassoincludedir)" || exit $$?; \ done uninstall-liblassoincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(liblassoinclude_HEADERS)'; test -n "$(liblassoincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(liblassoincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(liblassoincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/soap_body.Plo -rm -f ./$(DEPDIR)/soap_detail.Plo -rm -f ./$(DEPDIR)/soap_envelope.Plo -rm -f ./$(DEPDIR)/soap_fault.Plo -rm -f ./$(DEPDIR)/soap_header.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-liblassoincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/soap_body.Plo -rm -f ./$(DEPDIR)/soap_detail.Plo -rm -f ./$(DEPDIR)/soap_envelope.Plo -rm -f ./$(DEPDIR)/soap_fault.Plo -rm -f ./$(DEPDIR)/soap_header.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-liblassoincludeHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libtool clean-noinstLTLIBRARIES \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-liblassoincludeHEADERS \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-liblassoincludeHEADERS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lasso-2.8.2/lasso/xml/soap-1.1/PaxHeaders/soap_detail.c0000644000000000000000000000013214114336625017537 xustar0030 mtime=1630649749.878437561 30 atime=1678814178.721148982 30 ctime=1678814320.753951851 lasso-2.8.2/lasso/xml/soap-1.1/soap_detail.c0000644000175000017500000000701014114336625023005 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "soap_detail.h" #include "../private.h" /* * * * * * * Fault reporting structure * * * * * * * * * * * * * * * * * */ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "", SNIPPET_LIST_NODES, G_STRUCT_OFFSET(LassoSoapDetail, any), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSoapDetailClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "detail"); lasso_node_class_set_ns(nclass, LASSO_SOAP_ENV_HREF, LASSO_SOAP_ENV_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_soap_detail_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSoapDetailClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSoapDetail), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoSoapDetail", &this_info, 0); } return this_type; } LassoSoapDetail* lasso_soap_detail_new() { LassoSoapDetail *node; node = g_object_new(LASSO_TYPE_SOAP_DETAIL, NULL); return node; } LassoSoapDetail* lasso_soap_detail_new_from_message(const gchar *message) { LassoSoapDetail *node; g_return_val_if_fail(message != NULL, NULL); node = g_object_new(LASSO_TYPE_SOAP_DETAIL, NULL); lasso_node_init_from_message(LASSO_NODE(node), message); return node; } lasso-2.8.2/lasso/xml/soap-1.1/PaxHeaders/soap_detail.h0000644000000000000000000000013214114336625017544 xustar0030 mtime=1630649749.878437561 30 atime=1678814151.028993957 30 ctime=1678814320.741951784 lasso-2.8.2/lasso/xml/soap-1.1/soap_detail.h0000644000175000017500000000416714114336625023024 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SOAP_DETAIL_H__ #define __LASSO_SOAP_DETAIL_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "../xml.h" #define LASSO_TYPE_SOAP_DETAIL (lasso_soap_detail_get_type()) #define LASSO_SOAP_DETAIL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), \ LASSO_TYPE_SOAP_DETAIL, LassoSoapDetail)) #define LASSO_SOAP_DETAIL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), \ LASSO_TYPE_SOAP_DETAIL, LassoSoapDetailClass)) #define LASSO_IS_SOAP_DETAIL(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SOAP_DETAIL)) #define LASSO_IS_SOAP_DETAIL_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass),LASSO_TYPE_SOAP_DETAIL)) #define LASSO_SOAP_DETAIL_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SOAP_DETAIL, LassoSoapDetailClass)) typedef struct _LassoSoapDetail LassoSoapDetail; typedef struct _LassoSoapDetailClass LassoSoapDetailClass; struct _LassoSoapDetail { LassoNode parent; GList *any; /* of LassoNode */ }; struct _LassoSoapDetailClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_soap_detail_get_type(void); LASSO_EXPORT LassoSoapDetail* lasso_soap_detail_new(void); LASSO_EXPORT LassoSoapDetail* lasso_soap_detail_new_from_message(const gchar *message); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SOAP_DETAIL_H__ */ lasso-2.8.2/lasso/xml/soap-1.1/PaxHeaders/soap_body.h0000644000000000000000000000013214114336625017237 xustar0030 mtime=1630649749.878437561 30 atime=1678814151.028993957 30 ctime=1678814320.741951784 lasso-2.8.2/lasso/xml/soap-1.1/soap_body.h0000644000175000017500000000416314114336625022513 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SOAP_BODY_H__ #define __LASSO_SOAP_BODY_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "../xml.h" #define LASSO_TYPE_SOAP_BODY (lasso_soap_body_get_type()) #define LASSO_SOAP_BODY(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), \ LASSO_TYPE_SOAP_BODY, LassoSoapBody)) #define LASSO_SOAP_BODY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), \ LASSO_TYPE_SOAP_BODY, LassoSoapBodyClass)) #define LASSO_IS_SOAP_BODY(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SOAP_BODY)) #define LASSO_IS_SOAP_BODY_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass),LASSO_TYPE_SOAP_BODY)) #define LASSO_SOAP_BODY_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SOAP_BODY, LassoSoapBodyClass)) typedef struct _LassoSoapBody LassoSoapBody; typedef struct _LassoSoapBodyClass LassoSoapBodyClass; struct _LassoSoapBody { LassoNode parent; GList *any; /* of LassoNode */ gchar *Id; /* TODO : supports of any attributes */ }; struct _LassoSoapBodyClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_soap_body_get_type(void); LASSO_EXPORT LassoSoapBody* lasso_soap_body_new(void); LASSO_EXPORT LassoSoapBody* lasso_soap_body_new_from_message(const gchar *message); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SOAP_BODY_H__ */ lasso-2.8.2/lasso/xml/soap-1.1/PaxHeaders/xml_soap11.h0000644000000000000000000000013214114336625017244 xustar0030 mtime=1630649749.878437561 30 atime=1678814151.028993957 30 ctime=1678814320.749951829 lasso-2.8.2/lasso/xml/soap-1.1/xml_soap11.h0000644000175000017500000000210214114336625022507 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_XML_SOAP11_H__ #define __LASSO_XML_SOAP11_H__ #include "soap_body.h" #include "soap_detail.h" #include "soap_envelope.h" #include "soap_fault.h" #include "soap_header.h" #endif /* __LASSO_XML_SOAP11_H__ */ lasso-2.8.2/lasso/xml/soap-1.1/PaxHeaders/soap_envelope.h0000644000000000000000000000013214114336625020117 xustar0030 mtime=1630649749.878437561 30 atime=1678814151.028993957 30 ctime=1678814320.745951806 lasso-2.8.2/lasso/xml/soap-1.1/soap_envelope.h0000644000175000017500000000450614114336625023374 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SOAP_ENVELOPE_H__ #define __LASSO_SOAP_ENVELOPE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "../xml.h" #include "soap_body.h" #include "soap_header.h" #define LASSO_TYPE_SOAP_ENVELOPE (lasso_soap_envelope_get_type()) #define LASSO_SOAP_ENVELOPE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), \ LASSO_TYPE_SOAP_ENVELOPE, LassoSoapEnvelope)) #define LASSO_SOAP_ENVELOPE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), \ LASSO_TYPE_SOAP_ENVELOPE, LassoSoapEnvelopeClass)) #define LASSO_IS_SOAP_ENVELOPE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SOAP_ENVELOPE)) #define LASSO_IS_SOAP_ENVELOPE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass),LASSO_TYPE_SOAP_ENVELOPE)) #define LASSO_SOAP_ENVELOPE_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SOAP_ENVELOPE, LassoSoapEnvelopeClass)) typedef struct _LassoSoapEnvelope LassoSoapEnvelope; typedef struct _LassoSoapEnvelopeClass LassoSoapEnvelopeClass; struct _LassoSoapEnvelope { LassoNode parent; LassoSoapHeader *Header; LassoSoapBody *Body; }; struct _LassoSoapEnvelopeClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_soap_envelope_get_type(void); LASSO_EXPORT LassoSoapEnvelope* lasso_soap_envelope_new(LassoSoapBody *body); LASSO_EXPORT LassoSoapEnvelope* lasso_soap_envelope_new_from_message(const gchar *message); LASSO_EXPORT LassoSoapEnvelope* lasso_soap_envelope_new_full(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SOAP_ENVELOPE_H__ */ lasso-2.8.2/lasso/xml/soap-1.1/PaxHeaders/soap_envelope.c0000644000000000000000000000013214114336625020112 xustar0030 mtime=1630649749.878437561 30 atime=1678814179.641154141 30 ctime=1678814320.757951875 lasso-2.8.2/lasso/xml/soap-1.1/soap_envelope.c0000644000175000017500000001067714114336625023375 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "soap_envelope.h" #include "../../utils.h" /** * SECTION:soap_envelope * @short_description: <soap:Envelope> * */ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "Header", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSoapEnvelope, Header), NULL, NULL, NULL}, { "Body", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSoapEnvelope, Body), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSoapEnvelopeClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "Envelope"); lasso_node_class_set_ns(nclass, LASSO_SOAP_ENV_HREF, LASSO_SOAP_ENV_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_soap_envelope_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSoapEnvelopeClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSoapEnvelope), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoSoapEnvelope", &this_info, 0); } return this_type; } /** * lasso_soap_envelope_new: * * Creates a new #LassoSoapEnvelope with a new empty #LassoSoapBody * member. Note, this function does not add a #LassoSoapHeader, if * you need both headers and a body use * lasso_soap_envelope_new_full() instead. * * Returns: new #LassoSoapEnvelope **/ LassoSoapEnvelope* lasso_soap_envelope_new(LassoSoapBody *body) { LassoSoapEnvelope *envelope; envelope = g_object_new(LASSO_TYPE_SOAP_ENVELOPE, NULL); lasso_assign_gobject(envelope->Body, body); return envelope; } /** * lasso_soap_envelope_new_from_message: * @message: XML document * * Given an XML document in @message, parse it and convert it into a * #LassoNode, then insert that #LassoNode into the body of the newly * returned #LassoSoapEnvelope. * * Returns: new #LassoSoapEnvelope **/ LassoSoapEnvelope* lasso_soap_envelope_new_from_message(const gchar *message) { LassoSoapEnvelope *envelope; g_return_val_if_fail(message != NULL, NULL); envelope = LASSO_SOAP_ENVELOPE(lasso_node_new_from_dump(message)); if (! LASSO_IS_SOAP_ENVELOPE(envelope)) { lasso_release_gobject(envelope); } return envelope; } /** * lasso_soap_envelope_new_full: * * Creates a new #LassoSoapEnvelope with new empty #LassoSoapHeader * and #LassoSoapBody members. * * Returns: new #LassoSoapEnvelope **/ LassoSoapEnvelope* lasso_soap_envelope_new_full() { LassoSoapEnvelope *envelope = NULL; LassoSoapHeader *header = NULL; LassoSoapBody *body = NULL; LassoSoapEnvelope *result = NULL; envelope = g_object_new(LASSO_TYPE_SOAP_ENVELOPE, NULL); goto_cleanup_if_fail(envelope); header = lasso_soap_header_new(); goto_cleanup_if_fail(header); lasso_assign_gobject(envelope->Header, header); body = lasso_soap_body_new(); goto_cleanup_if_fail(body); lasso_assign_gobject(envelope->Body, body); lasso_transfer_gobject(result, envelope); cleanup: lasso_release_gobject(envelope); lasso_release_gobject(header); lasso_release_gobject(body); return result; } lasso-2.8.2/lasso/xml/soap-1.1/PaxHeaders/soap_header.c0000644000000000000000000000013214114336625017525 xustar0030 mtime=1630649749.878437561 30 atime=1678814180.173157125 30 ctime=1678814320.761951897 lasso-2.8.2/lasso/xml/soap-1.1/soap_header.c0000644000175000017500000000544514114336625023005 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "soap_header.h" /** * SECTION:soap_header * @short_description: <soap:Header> * */ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "any", SNIPPET_LIST_NODES | SNIPPET_ANY, G_STRUCT_OFFSET(LassoSoapHeader, Other), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSoapHeaderClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "Header"); lasso_node_class_set_ns(nclass, LASSO_SOAP_ENV_HREF, LASSO_SOAP_ENV_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_soap_header_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSoapHeaderClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSoapHeader), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoSoapHeader", &this_info, 0); } return this_type; } LassoSoapHeader* lasso_soap_header_new() { LassoSoapHeader *node; node = g_object_new(LASSO_TYPE_SOAP_HEADER, NULL); return node; } LassoSoapHeader* lasso_soap_header_new_from_message(const gchar *message) { LassoSoapHeader *node; g_return_val_if_fail(message != NULL, NULL); node = g_object_new(LASSO_TYPE_SOAP_HEADER, NULL); lasso_node_init_from_message(LASSO_NODE(node), message); return node; } lasso-2.8.2/lasso/xml/soap-1.1/PaxHeaders/soap_fault.h0000644000000000000000000000013214114336625017415 xustar0030 mtime=1630649749.878437561 30 atime=1678814151.028993957 30 ctime=1678814320.745951806 lasso-2.8.2/lasso/xml/soap-1.1/soap_fault.h0000644000175000017500000000444314114336625022672 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SOAP_FAULT_H__ #define __LASSO_SOAP_FAULT_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "../xml.h" #include "soap_detail.h" #define LASSO_TYPE_SOAP_FAULT (lasso_soap_fault_get_type()) #define LASSO_SOAP_FAULT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), \ LASSO_TYPE_SOAP_FAULT, LassoSoapFault)) #define LASSO_SOAP_FAULT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), \ LASSO_TYPE_SOAP_FAULT, LassoSoapFaultClass)) #define LASSO_IS_SOAP_FAULT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SOAP_FAULT)) #define LASSO_IS_SOAP_FAULT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass),LASSO_TYPE_SOAP_FAULT)) #define LASSO_SOAP_FAULT_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SOAP_FAULT, LassoSoapFaultClass)) typedef struct _LassoSoapFault LassoSoapFault; typedef struct _LassoSoapFaultClass LassoSoapFaultClass; struct _LassoSoapFault { LassoNode parent; gchar *faultcode; gchar *faultstring; GList *faultactor; /* of string */ LassoSoapDetail *Detail; }; struct _LassoSoapFaultClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_soap_fault_get_type(void); LASSO_EXPORT LassoSoapFault* lasso_soap_fault_new(void); LASSO_EXPORT LassoSoapFault* lasso_soap_fault_new_from_message(const gchar *message); LASSO_EXPORT LassoSoapFault* lasso_soap_fault_new_full(const char *faultcode, const char *faultstring); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SOAP_FAULT_H__ */ lasso-2.8.2/lasso/xml/soap-1.1/PaxHeaders/soap_header.h0000644000000000000000000000013214114336625017532 xustar0030 mtime=1630649749.878437561 30 atime=1678814151.028993957 30 ctime=1678814320.745951806 lasso-2.8.2/lasso/xml/soap-1.1/soap_header.h0000644000175000017500000000417214114336625023006 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SOAP_HEADER_H__ #define __LASSO_SOAP_HEADER_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "../xml.h" #define LASSO_TYPE_SOAP_HEADER (lasso_soap_header_get_type()) #define LASSO_SOAP_HEADER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), \ LASSO_TYPE_SOAP_HEADER, LassoSoapHeader)) #define LASSO_SOAP_HEADER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), \ LASSO_TYPE_SOAP_HEADER, LassoSoapHeaderClass)) #define LASSO_IS_SOAP_HEADER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SOAP_HEADER)) #define LASSO_IS_SOAP_HEADER_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass),LASSO_TYPE_SOAP_HEADER)) #define LASSO_SOAP_HEADER_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SOAP_HEADER, LassoSoapHeaderClass)) typedef struct _LassoSoapHeader LassoSoapHeader; typedef struct _LassoSoapHeaderClass LassoSoapHeaderClass; struct _LassoSoapHeader { LassoNode parent; GList *Other; /* of LassoNode */ }; struct _LassoSoapHeaderClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_soap_header_get_type(void); LASSO_EXPORT LassoSoapHeader* lasso_soap_header_new(void); LASSO_EXPORT LassoSoapHeader* lasso_soap_header_new_from_message(const gchar *message); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SOAP_HEADER_H__ */ lasso-2.8.2/lasso/xml/soap-1.1/PaxHeaders/soap_body.c0000644000000000000000000000013214114336625017232 xustar0030 mtime=1630649749.878437561 30 atime=1678814178.229146222 30 ctime=1678814320.753951851 lasso-2.8.2/lasso/xml/soap-1.1/soap_body.c0000644000175000017500000000710214114336625022502 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "soap_body.h" /** * SECTION:soap_body * @short_description: <soap:Body> * *
Schema fragment for soap:Body * * * * * * * * * Prose in the spec does not specify that attributes are allowed on the Body element * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "any", SNIPPET_LIST_NODES | SNIPPET_ANY, G_STRUCT_OFFSET(LassoSoapBody, any), NULL, NULL, NULL}, { "Id", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSoapBody, Id), NULL, LASSO_WSUTIL1_PREFIX, LASSO_WSUTIL1_HREF }, {NULL, 0, 0, NULL, NULL, NULL} }; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static LassoNodeClass *parent_class = NULL; static void class_init(LassoSoapBodyClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(nclass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "Body"); lasso_node_class_set_ns(nclass, LASSO_SOAP_ENV_HREF, LASSO_SOAP_ENV_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_soap_body_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSoapBodyClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSoapBody), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoSoapBody", &this_info, 0); } return this_type; } LassoSoapBody* lasso_soap_body_new() { LassoSoapBody *node; node = g_object_new(LASSO_TYPE_SOAP_BODY, NULL); return node; } LassoSoapBody* lasso_soap_body_new_from_message(const gchar *message) { LassoSoapBody *node; g_return_val_if_fail(message != NULL, NULL); node = g_object_new(LASSO_TYPE_SOAP_BODY, NULL); lasso_node_init_from_message(LASSO_NODE(node), message); return node; } lasso-2.8.2/lasso/xml/soap-1.1/PaxHeaders/soap_fault.c0000644000000000000000000000013214114336625017410 xustar0030 mtime=1630649749.878437561 30 atime=1678814179.181151561 30 ctime=1678814320.757951875 lasso-2.8.2/lasso/xml/soap-1.1/soap_fault.c0000644000175000017500000001046614114336625022667 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "soap_fault.h" #include "../private.h" #include "../../utils.h" /** * SECTION:soap_fault * @short_description: object mapping for a soap11:Fault * @stability: Stable * *
* Schema fragment for soap11:Fault * * * * * * Fault reporting structure * * * * * * * * * * * * * * * * * ]]> * *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "faultcode", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoSoapFault, faultcode), NULL, NULL, NULL}, { "faultstring", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoSoapFault, faultstring), NULL, NULL, NULL}, { "detail", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSoapFault, Detail), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSoapFaultClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "Fault"); lasso_node_class_set_ns(nclass, LASSO_SOAP_ENV_HREF, LASSO_SOAP_ENV_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_soap_fault_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSoapFaultClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSoapFault), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoSoapFault", &this_info, 0); } return this_type; } LassoSoapFault* lasso_soap_fault_new() { LassoSoapFault *node; node = g_object_new(LASSO_TYPE_SOAP_FAULT, NULL); return node; } LassoSoapFault* lasso_soap_fault_new_from_message(const gchar *message) { LassoSoapFault *node; g_return_val_if_fail(message != NULL, NULL); node = g_object_new(LASSO_TYPE_SOAP_FAULT, NULL); lasso_node_init_from_message(LASSO_NODE(node), message); return node; } LassoSoapFault* lasso_soap_fault_new_full(const char *faultcode, const char *faultstring) { LassoSoapFault *soap_fault; if (! faultcode && ! faultstring) return NULL; soap_fault = g_object_new(LASSO_TYPE_SOAP_FAULT, NULL); lasso_assign_string(soap_fault->faultcode, faultcode); lasso_assign_string(soap_fault->faultstring, faultstring); return soap_fault; } lasso-2.8.2/lasso/xml/PaxHeaders/lib_name_identifier_mapping_response.h0000644000000000000000000000013214114336625023422 xustar0030 mtime=1630649749.858437342 30 atime=1678814151.012993868 30 ctime=1678814320.245948959 lasso-2.8.2/lasso/xml/lib_name_identifier_mapping_response.h0000644000175000017500000000657414114336625026706 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_LIB_NAME_IDENTIFIER_MAPPING_RESPONSE_H__ #define __LASSO_LIB_NAME_IDENTIFIER_MAPPING_RESPONSE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "samlp_response_abstract.h" #include "samlp_status.h" #include "saml_name_identifier.h" #include "lib_name_identifier_mapping_request.h" #define LASSO_TYPE_LIB_NAME_IDENTIFIER_MAPPING_RESPONSE \ (lasso_lib_name_identifier_mapping_response_get_type()) #define LASSO_LIB_NAME_IDENTIFIER_MAPPING_RESPONSE(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_LIB_NAME_IDENTIFIER_MAPPING_RESPONSE, \ LassoLibNameIdentifierMappingResponse)) #define LASSO_LIB_NAME_IDENTIFIER_MAPPING_RESPONSE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_LIB_NAME_IDENTIFIER_MAPPING_RESPONSE, \ LassoLibNameIdentifierMappingResponseClass)) #define LASSO_IS_LIB_NAME_IDENTIFIER_MAPPING_RESPONSE(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_LIB_NAME_IDENTIFIER_MAPPING_RESPONSE)) #define LASSO_IS_LIB_NAME_IDENTIFIER_MAPPING_RESPONSE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_LIB_NAME_IDENTIFIER_MAPPING_RESPONSE)) #define LASSO_LIB_NAME_IDENTIFIER_MAPPING_RESPONSE_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_LIB_NAME_IDENTIFIER_MAPPING_RESPONSE, \ LassoLibNameIdentifierMappingResponseClass)) typedef struct _LassoLibNameIdentifierMappingResponse LassoLibNameIdentifierMappingResponse; typedef struct _LassoLibNameIdentifierMappingResponseClass \ LassoLibNameIdentifierMappingResponseClass; struct _LassoLibNameIdentifierMappingResponse { LassoSamlpResponseAbstract parent; /*< public >*/ /* */ GList *Extension; /* of xmlNode* */ /* */ char *ProviderID; /* */ LassoSamlpStatus *Status; /* */ LassoSamlNameIdentifier *NameIdentifier; }; struct _LassoLibNameIdentifierMappingResponseClass { LassoSamlpResponseAbstractClass parent; }; LASSO_EXPORT GType lasso_lib_name_identifier_mapping_response_get_type(void); LASSO_EXPORT LassoNode* lasso_lib_name_identifier_mapping_response_new(void); LASSO_EXPORT LassoNode* lasso_lib_name_identifier_mapping_response_new_full( char *provideRID, const char *statusCodeValue, LassoLibNameIdentifierMappingRequest *request, LassoSignatureType sign_type, LassoSignatureMethod sign_method); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_LIB_NAME_IDENTIFIER_MAPPING_RESPONSE_H__ */ lasso-2.8.2/lasso/xml/PaxHeaders/samlp_response.c0000644000000000000000000000013214114336625017046 xustar0030 mtime=1630649749.874437517 30 atime=1678814213.081342069 30 ctime=1678814320.373949688 lasso-2.8.2/lasso/xml/samlp_response.c0000644000175000017500000001252014114336625022316 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "private.h" #include "samlp_response.h" #include /** * SECTION:samlp_response * @short_description: <samlp:Response> * *
Schema fragment for samlp:Response * * * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "Status", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSamlpResponse, Status), NULL, NULL, NULL}, { "Assertion", SNIPPET_LIST_NODES, G_STRUCT_OFFSET(LassoSamlpResponse, Assertion), NULL, LASSO_SAML_ASSERTION_PREFIX, LASSO_SAML_ASSERTION_HREF}, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; static gboolean has_lib_status(LassoSamlpStatusCode *status_code) { if (status_code == NULL) return FALSE; if (strncmp(status_code->Value, "lib", 3) == 0) return TRUE; return has_lib_status(status_code->StatusCode); } static xmlNode* get_xmlNode(LassoNode *node, gboolean lasso_dump) { xmlNode *xmlnode, *t; xmlnode = parent_class->get_xmlNode(node, lasso_dump); if (LASSO_SAMLP_RESPONSE(node)->Status && has_lib_status(LASSO_SAMLP_RESPONSE(node)->Status->StatusCode)) { /* liberty QName, add liberty namespace */ xmlNewNs(xmlnode, (xmlChar*)LASSO_LIB_HREF, (xmlChar*)LASSO_LIB_PREFIX); } for (t = xmlnode->children; t && strcmp((char*)t->name, "Assertion"); t = t->next) ; if (t && strcmp((char*)t->ns->href, LASSO_LIB_HREF) == 0) { /* liberty nodes are not allowed in samlp nodes */ xmlSetNs(t, xmlNewNs(xmlnode, (xmlChar*)LASSO_SAML_ASSERTION_HREF, (xmlChar*)LASSO_SAML_ASSERTION_PREFIX)); if (xmlHasNsProp(t, (xmlChar*)"type", (xmlChar*)LASSO_XSI_HREF) == NULL) xmlNewNsProp(t, xmlNewNs(xmlnode, (xmlChar*)LASSO_XSI_HREF, (xmlChar*)LASSO_XSI_PREFIX), (xmlChar*)"type", (xmlChar*)"lib:AssertionType"); } return xmlnode; } /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSamlpResponseClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->get_xmlNode = get_xmlNode; nclass->node_data = g_new0(LassoNodeClassData, 1); nclass->node_data->keep_xmlnode = TRUE; lasso_node_class_set_nodename(nclass, "Response"); lasso_node_class_set_ns(nclass, LASSO_SAML_PROTOCOL_HREF, LASSO_SAML_PROTOCOL_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_samlp_response_get_type() { static GType response_type = 0; if (!response_type) { static const GTypeInfo response_info = { sizeof (LassoSamlpResponseClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSamlpResponse), 0, NULL, NULL }; response_type = g_type_register_static(LASSO_TYPE_SAMLP_RESPONSE_ABSTRACT , "LassoSamlpResponse", &response_info, 0); } return response_type; } /** * lasso_samlp_response_new: * * Creates a new #LassoSamlpResponse object. * * Return value: a newly created #LassoSamlpResponse object **/ LassoNode* lasso_samlp_response_new() { LassoSamlpResponseAbstract *response; LassoSamlpStatusCode *status_code; LassoSamlpStatus *status; response = g_object_new(LASSO_TYPE_SAMLP_RESPONSE, NULL); response->ResponseID = lasso_build_unique_id(32); response->MajorVersion = LASSO_SAML_MAJOR_VERSION_N; response->MinorVersion = LASSO_SAML_MINOR_VERSION_N; response->IssueInstant = lasso_get_current_time(); /* Add Status */ status = LASSO_SAMLP_STATUS(lasso_samlp_status_new()); status_code = LASSO_SAMLP_STATUS_CODE(lasso_samlp_status_code_new()); status_code->Value = g_strdup(LASSO_SAML_STATUS_CODE_REQUEST_DENIED); status->StatusCode = status_code; LASSO_SAMLP_RESPONSE(response)->Status = status; return LASSO_NODE(response); } lasso-2.8.2/lasso/xml/PaxHeaders/dsig0000644000000000000000000000013214404126160014512 xustar0030 mtime=1678814320.829952284 30 atime=1678814326.421984131 30 ctime=1678814320.829952284 lasso-2.8.2/lasso/xml/dsig/0000755000175000017500000000000014404126160020037 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/lasso/xml/dsig/PaxHeaders/ds_key_info.h0000644000000000000000000000013114114336625017237 xustar0030 mtime=1630649749.826436995 30 atime=1678814151.012993868 29 ctime=1678814320.80995217 lasso-2.8.2/lasso/xml/dsig/ds_key_info.h0000644000175000017500000000410414114336625022507 0ustar00bdauvergnebdauvergne00000000000000/* $Id * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_DS_KEY_INFO_H__ #define __LASSO_DS_KEY_INFO_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "../xml.h" #include "ds_key_value.h" #define LASSO_TYPE_DS_KEY_INFO (lasso_ds_key_info_get_type()) #define LASSO_DS_KEY_INFO(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_DS_KEY_INFO, \ LassoDsKeyInfo)) #define LASSO_DS_KEY_INFO_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_DS_KEY_INFO, \ LassoDsKeyInfoClass)) #define LASSO_IS_DS_KEY_INFO(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_DS_KEY_INFO)) #define LASSO_IS_DS_KEY_INFO_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_DS_KEY_INFO)) #define LASSO_DS_KEY_INFO_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_DS_KEY_INFO, \ LassoDsKeyInfoClass)) typedef struct _LassoDsKeyInfo LassoDsKeyInfo; typedef struct _LassoDsKeyInfoClass LassoDsKeyInfoClass; struct _LassoDsKeyInfo { LassoNode parent; LassoDsKeyValue *KeyValue; }; struct _LassoDsKeyInfoClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_ds_key_info_get_type(void); LASSO_EXPORT LassoDsKeyInfo* lasso_ds_key_info_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_DS_KEY_INFO_H__ */ lasso-2.8.2/lasso/xml/dsig/PaxHeaders/xml_dsig.h0000644000000000000000000000013214114336625016555 xustar0030 mtime=1630649749.826436995 30 atime=1678814151.012993868 30 ctime=1678814320.817952216 lasso-2.8.2/lasso/xml/dsig/xml_dsig.h0000644000175000017500000000210014114336625022016 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_XML_DSIG_H__ #define __LASSO_XML_DSIG_H__ #include "ds_key_info.h" #include "ds_key_value.h" #include "ds_rsa_key_value.h" #include "ds_x509_data.h" #include "strings.h" #endif /* __LASSO_XML_DSIG_H__ */ lasso-2.8.2/lasso/xml/dsig/PaxHeaders/Makefile.am0000644000000000000000000000013113766621500016632 xustar0030 mtime=1608196928.810895695 30 atime=1678814114.872792406 29 ctime=1678814320.80995217 lasso-2.8.2/lasso/xml/dsig/Makefile.am0000644000175000017500000000072713766621500022111 0ustar00bdauvergnebdauvergne00000000000000MAINTAINERCLEANFILES = Makefile.in liblassoincludedir = $(includedir)/lasso/xml/dsig AM_CPPFLAGS = \ -I$(top_builddir) \ -I$(top_srcdir) \ $(LASSO_CORE_CFLAGS) \ -DG_LOG_DOMAIN=\"lasso\" noinst_LTLIBRARIES = liblasso-xml-dsig.la liblasso_xml_dsig_la_SOURCES = \ ds_key_info.c \ ds_key_value.c \ ds_rsa_key_value.c \ ds_x509_data.c liblassoinclude_HEADERS = \ ds_key_info.h \ ds_key_value.h \ ds_rsa_key_value.h \ ds_x509_data.h \ strings.h \ xml_dsig.h lasso-2.8.2/lasso/xml/dsig/PaxHeaders/Makefile.in0000644000000000000000000000013114404125673016643 xustar0029 mtime=1678814139.76893108 30 atime=1678814149.956987966 30 ctime=1678814320.817952216 lasso-2.8.2/lasso/xml/dsig/Makefile.in0000644000175000017500000006123614404125673022124 0ustar00bdauvergnebdauvergne00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = lasso/xml/dsig ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ac_check_class.m4 \ $(top_srcdir)/m4/ac_check_classpath.m4 \ $(top_srcdir)/m4/ac_check_junit.m4 \ $(top_srcdir)/m4/ac_prog_jar.m4 \ $(top_srcdir)/m4/ac_prog_java.m4 \ $(top_srcdir)/m4/ac_prog_java_works.m4 \ $(top_srcdir)/m4/ac_prog_javac.m4 \ $(top_srcdir)/m4/ac_prog_javac_works.m4 \ $(top_srcdir)/m4/ac_prog_javah.m4 \ $(top_srcdir)/m4/ac_try_compile_java.m4 \ $(top_srcdir)/m4/as-compiler-flag.m4 \ $(top_srcdir)/m4/dps_java_check_class.m4 \ $(top_srcdir)/m4/dps_xtra_classpath.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(liblassoinclude_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h \ $(top_builddir)/lasso/lasso_config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) liblasso_xml_dsig_la_LIBADD = am_liblasso_xml_dsig_la_OBJECTS = ds_key_info.lo ds_key_value.lo \ ds_rsa_key_value.lo ds_x509_data.lo liblasso_xml_dsig_la_OBJECTS = $(am_liblasso_xml_dsig_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -I$(top_builddir)/lasso depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/ds_key_info.Plo \ ./$(DEPDIR)/ds_key_value.Plo ./$(DEPDIR)/ds_rsa_key_value.Plo \ ./$(DEPDIR)/ds_x509_data.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(liblasso_xml_dsig_la_SOURCES) DIST_SOURCES = $(liblasso_xml_dsig_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(liblassoincludedir)" HEADERS = $(liblassoinclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CHECK_CFLAGS = @CHECK_CFLAGS@ CHECK_LIBS = @CHECK_LIBS@ CLASSPATH_JUNIT = @CLASSPATH_JUNIT@ CLASSPATH_OPT = @CLASSPATH_OPT@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CSHARPCILINTERPRETER = @CSHARPCILINTERPRETER@ CSHARPCOMPILER = @CSHARPCOMPILER@ CSHARPCYGPATH_W = @CSHARPCYGPATH_W@ CSHARPDYNAMICLINKING = @CSHARPDYNAMICLINKING@ CSHARPLIBRARYPREFIX = @CSHARPLIBRARYPREFIX@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEBUGGING = @DEBUGGING@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLL_FILENAME = @DLL_FILENAME@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GACUTIL = @GACUTIL@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HTML_DIR = @HTML_DIR@ INKSCAPE = @INKSCAPE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVAC_FLAGS = @JAVAC_FLAGS@ JAVAH = @JAVAH@ JAVAH_FLAGS = @JAVAH_FLAGS@ JAVA_INCLUDE = @JAVA_INCLUDE@ JAVA_JUNIT = @JAVA_JUNIT@ JAVA_VERSION = @JAVA_VERSION@ JDK_INCLUDE = @JDK_INCLUDE@ JNI_EXTRA_LDFLAGS = @JNI_EXTRA_LDFLAGS@ JUNIT = @JUNIT@ LASSO_APP_DEFINES = @LASSO_APP_DEFINES@ LASSO_CFLAGS = @LASSO_CFLAGS@ LASSO_CORE_CFLAGS = @LASSO_CORE_CFLAGS@ LASSO_CORE_LIBS = @LASSO_CORE_LIBS@ LASSO_DEFINES = @LASSO_DEFINES@ LASSO_DOCDIR = @LASSO_DOCDIR@ LASSO_LIBS = @LASSO_LIBS@ LASSO_PUB_CFLAGS = @LASSO_PUB_CFLAGS@ LASSO_STATIC_BINARIES = @LASSO_STATIC_BINARIES@ LASSO_VERSION_INFO = @LASSO_VERSION_INFO@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PERLINSTALLSITEARCH = @PERLINSTALLSITEARCH@ PERLMAN3DIR = @PERLMAN3DIR@ PERL_CFLAGS = @PERL_CFLAGS@ PERL_VERSION = @PERL_VERSION@ PHP5 = @PHP5@ PHP5_CONFIG = @PHP5_CONFIG@ PHP5_CONFIG_DIR = @PHP5_CONFIG_DIR@ PHP5_EXTENSION_DIR = @PHP5_EXTENSION_DIR@ PHP5_INCLUDES = @PHP5_INCLUDES@ PHP5_INCLUDE_DIR = @PHP5_INCLUDE_DIR@ PHP5_LDFLAGS = @PHP5_LDFLAGS@ PHP5_LIBS = @PHP5_LIBS@ PHP5_PREFIX = @PHP5_PREFIX@ PHP5_UNPREFIXED_EXTENSION_DIR = @PHP5_UNPREFIXED_EXTENSION_DIR@ PHP5_VERSION = @PHP5_VERSION@ PHP7 = @PHP7@ PHP7_CONFIG = @PHP7_CONFIG@ PHP7_CONFIG_DIR = @PHP7_CONFIG_DIR@ PHP7_EXTENSION_DIR = @PHP7_EXTENSION_DIR@ PHP7_INCLUDES = @PHP7_INCLUDES@ PHP7_INCLUDE_DIR = @PHP7_INCLUDE_DIR@ PHP7_LDFLAGS = @PHP7_LDFLAGS@ PHP7_LIBS = @PHP7_LIBS@ PHP7_PREFIX = @PHP7_PREFIX@ PHP7_UNPREFIXED_EXTENSION_DIR = @PHP7_UNPREFIXED_EXTENSION_DIR@ PHP7_VERSION = @PHP7_VERSION@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PYTHON = @PYTHON@ PYTHON_VERSION = @PYTHON_VERSION@ PY_CFLAGS = @PY_CFLAGS@ PY_DYNLOAD = @PY_DYNLOAD@ PY_EXTRA_LIBS = @PY_EXTRA_LIBS@ PY_LIB_A = @PY_LIB_A@ PY_LIB_LOC = @PY_LIB_LOC@ PY_SITE_PACKAGES = @PY_SITE_PACKAGES@ RANLIB = @RANLIB@ RC = @RC@ REST2HTML = @REST2HTML@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_VERSION = @SWIG_VERSION@ TAR = @TAR@ TESTS_JUNIT = @TESTS_JUNIT@ UPCASED_DLL_FILENAME = @UPCASED_DLL_FILENAME@ VERSION = @VERSION@ VERSION_UNDERSCORED = @VERSION_UNDERSCORED@ WINDOWS_VERSION = @WINDOWS_VERSION@ XSLTPROC = @XSLTPROC@ Z_CFLAGS = @Z_CFLAGS@ Z_LIBS = @Z_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ uudecode = @uudecode@ MAINTAINERCLEANFILES = Makefile.in liblassoincludedir = $(includedir)/lasso/xml/dsig AM_CPPFLAGS = \ -I$(top_builddir) \ -I$(top_srcdir) \ $(LASSO_CORE_CFLAGS) \ -DG_LOG_DOMAIN=\"lasso\" noinst_LTLIBRARIES = liblasso-xml-dsig.la liblasso_xml_dsig_la_SOURCES = \ ds_key_info.c \ ds_key_value.c \ ds_rsa_key_value.c \ ds_x509_data.c liblassoinclude_HEADERS = \ ds_key_info.h \ ds_key_value.h \ ds_rsa_key_value.h \ ds_x509_data.h \ strings.h \ xml_dsig.h all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign lasso/xml/dsig/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign lasso/xml/dsig/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } liblasso-xml-dsig.la: $(liblasso_xml_dsig_la_OBJECTS) $(liblasso_xml_dsig_la_DEPENDENCIES) $(EXTRA_liblasso_xml_dsig_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(liblasso_xml_dsig_la_OBJECTS) $(liblasso_xml_dsig_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ds_key_info.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ds_key_value.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ds_rsa_key_value.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ds_x509_data.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-liblassoincludeHEADERS: $(liblassoinclude_HEADERS) @$(NORMAL_INSTALL) @list='$(liblassoinclude_HEADERS)'; test -n "$(liblassoincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(liblassoincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(liblassoincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(liblassoincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(liblassoincludedir)" || exit $$?; \ done uninstall-liblassoincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(liblassoinclude_HEADERS)'; test -n "$(liblassoincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(liblassoincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(liblassoincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/ds_key_info.Plo -rm -f ./$(DEPDIR)/ds_key_value.Plo -rm -f ./$(DEPDIR)/ds_rsa_key_value.Plo -rm -f ./$(DEPDIR)/ds_x509_data.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-liblassoincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/ds_key_info.Plo -rm -f ./$(DEPDIR)/ds_key_value.Plo -rm -f ./$(DEPDIR)/ds_rsa_key_value.Plo -rm -f ./$(DEPDIR)/ds_x509_data.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-liblassoincludeHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libtool clean-noinstLTLIBRARIES \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-liblassoincludeHEADERS \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-liblassoincludeHEADERS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lasso-2.8.2/lasso/xml/dsig/PaxHeaders/ds_key_value.h0000644000000000000000000000013114114336625017420 xustar0030 mtime=1630649749.826436995 30 atime=1678814151.012993868 29 ctime=1678814320.80995217 lasso-2.8.2/lasso/xml/dsig/ds_key_value.h0000644000175000017500000000451514114336625022676 0ustar00bdauvergnebdauvergne00000000000000/* $Id * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_DS_KEY_VALUE_H__ #define __LASSO_DS_KEY_VALUE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "../xml.h" #include "ds_rsa_key_value.h" #include "ds_x509_data.h" #define LASSO_TYPE_DS_KEY_VALUE (lasso_ds_key_value_get_type()) #define LASSO_DS_KEY_VALUE(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_DS_KEY_VALUE, \ LassoDsKeyValue)) #define LASSO_DS_KEY_VALUE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_DS_KEY_VALUE, \ LassoDsKeyValueClass)) #define LASSO_IS_DS_KEY_VALUE(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_DS_KEY_VALUE)) #define LASSO_IS_DS_KEY_VALUE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_DS_KEY_VALUE)) #define LASSO_DS_KEY_VALUE_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_DS_KEY_VALUE, \ LassoDsKeyValueClass)) typedef struct _LassoDsKeyValue LassoDsKeyValue; typedef struct _LassoDsKeyValueClass LassoDsKeyValueClass; struct _LassoDsKeyValue { LassoNode parent; LassoDsRsaKeyValue *RSAKeyValue; }; struct _LassoDsKeyValueClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_ds_key_value_get_type(void); LASSO_EXPORT LassoDsKeyValue* lasso_ds_key_value_new(void); LASSO_EXPORT LassoDsX509Data *lasso_ds_key_value_get_x509_data(LassoDsKeyValue *key_value); LASSO_EXPORT void lasso_ds_key_value_set_x509_data(LassoDsKeyValue *key_value, LassoDsX509Data *x509_data); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_DS_KEY_VALUE_H__ */ lasso-2.8.2/lasso/xml/dsig/PaxHeaders/ds_rsa_key_value.h0000644000000000000000000000013214114336625020266 xustar0030 mtime=1630649749.826436995 30 atime=1678814151.012993868 30 ctime=1678814320.813952194 lasso-2.8.2/lasso/xml/dsig/ds_rsa_key_value.h0000644000175000017500000000425414114336625023543 0ustar00bdauvergnebdauvergne00000000000000/* $Id * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_DS_RSA_KEY_VALUE_H__ #define __LASSO_DS_RSA_KEY_VALUE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "../xml.h" #define LASSO_TYPE_DS_RSA_KEY_VALUE (lasso_ds_rsa_key_value_get_type()) #define LASSO_DS_RSA_KEY_VALUE(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_DS_RSA_KEY_VALUE, \ LassoDsRsaKeyValue)) #define LASSO_DS_RSA_KEY_VALUE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_DS_RSA_KEY_VALUE, \ LassoDsRsaKeyValueClass)) #define LASSO_IS_DS_RSA_KEY_VALUE(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_DS_RSA_KEY_VALUE)) #define LASSO_IS_DS_RSA_KEY_VALUE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_DS_RSA_KEY_VALUE)) #define LASSO_DS_RSA_KEY_VALUE_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_DS_RSA_KEY_VALUE, \ LassoDsRsaKeyValueClass)) typedef struct _LassoDsRsaKeyValue LassoDsRsaKeyValue; typedef struct _LassoDsRsaKeyValueClass LassoDsRsaKeyValueClass; struct _LassoDsRsaKeyValue { LassoNode parent; char *Modulus; char *Exponent; }; struct _LassoDsRsaKeyValueClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_ds_rsa_key_value_get_type(void); LASSO_EXPORT LassoDsRsaKeyValue* lasso_ds_rsa_key_value_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_DS_RSA_KEY_VALUE_H__ */ lasso-2.8.2/lasso/xml/dsig/PaxHeaders/ds_x509_data.c0000644000000000000000000000013214364261206017125 xustar0030 mtime=1674666630.754769169 30 atime=1678814182.321169175 30 ctime=1678814320.829952284 lasso-2.8.2/lasso/xml/dsig/ds_x509_data.c0000644000175000017500000001463414364261206022405 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "ds_x509_data.h" /** * SECTION:ds_x509_data * @short_description: object mapping for an XML DSIG KeyValue element * */ struct _LassoDsX509DataPrivate { char *X509Certificate; char *X509SubjectName; char *X509CRL; }; #define LASSO_DS_X509_DATA_GET_PRIVATE(o) \ (G_TYPE_INSTANCE_GET_PRIVATE ((o), LASSO_TYPE_DS_X509_DATA, LassoDsX509DataPrivate)) /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "X509Certificate", SNIPPET_CONTENT|SNIPPET_PRIVATE, G_STRUCT_OFFSET(LassoDsX509DataPrivate, X509Certificate), NULL, NULL, NULL}, { "X509SubjectName", SNIPPET_CONTENT|SNIPPET_PRIVATE, G_STRUCT_OFFSET(LassoDsX509DataPrivate, X509SubjectName), NULL, NULL, NULL}, { "X509CRL", SNIPPET_CONTENT|SNIPPET_PRIVATE, G_STRUCT_OFFSET(LassoDsX509DataPrivate, X509CRL), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void instance_init(LassoDsX509Data *x509_data, G_GNUC_UNUSED void *unused) { x509_data->private_data = LASSO_DS_X509_DATA_GET_PRIVATE(x509_data); } static void class_init(LassoDsX509DataClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "X509Data"); lasso_node_class_set_ns(nclass, LASSO_DS_HREF, LASSO_DS_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); g_type_class_add_private(klass, sizeof(LassoDsX509DataPrivate)); } GType lasso_ds_x509_data_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoDsX509DataClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoDsX509Data), 0, (GInstanceInitFunc)instance_init, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoDsX509Data", &this_info, 0); } return this_type; } /** * lasso_ds_x509_data_new: * * Creates a new #LassoDsX509Data object. * * Return value: a newly created #LassoDsX509Data object **/ LassoDsX509Data* lasso_ds_x509_data_new() { return g_object_new(LASSO_TYPE_DS_X509_DATA, NULL); } /** * lasso_ds_x509_data_get_certificate: * @x509_data: a #LassoDsX509Data object * * Return the content of the X509Certificate sub-element, it should be a base64 encoded string. * * Return value:(transfer none): the string currently set in the X509Certificate private field of * the #LassoDsX509Data structure. */ const char* lasso_ds_x509_data_get_certificate(LassoDsX509Data *x509_data) { lasso_return_val_if_fail(LASSO_IS_DS_X509_DATA(x509_data), NULL); return x509_data->private_data->X509Certificate; } /** * lasso_ds_x509_data_set_certificate: * @x509_data: a #LassoDsX509Data object * @certificate: a base64 encoded string of the DER representation of the X509 certificate * * Set the content of the X509Certificate sub-element, it should be a base64 encoded string. * */ void lasso_ds_x509_data_set_certificate(LassoDsX509Data *x509_data, const char *certificate) { lasso_return_if_fail(LASSO_IS_DS_X509_DATA(x509_data)); lasso_assign_string(x509_data->private_data->X509Certificate, certificate); } /** * lasso_ds_x509_data_get_subject_name: * @x509_data: a #LassoDsX509Data object * * Return the content of the X509SubjectName sub-element, it should be a base64 encoded string. * * Return value:(transfer none): the string currently set in the X509SubjectName private field of * the #LassoDsX509Data structure. */ const char* lasso_ds_x509_data_get_subject_name(LassoDsX509Data *x509_data) { lasso_return_val_if_fail(LASSO_IS_DS_X509_DATA(x509_data), NULL); return x509_data->private_data->X509SubjectName; } /** * lasso_ds_x509_data_set_subject_name: * @x509_data: a #LassoDsX509Data object * @subject_name: a base64 encoded string of the DER representation of the X509 subject_name * * Set the content of the X509SubjectName sub-element, it should be a base64 encoded string. * */ void lasso_ds_x509_data_set_subject_name(LassoDsX509Data *x509_data, const char *subject_name) { lasso_return_if_fail(LASSO_IS_DS_X509_DATA(x509_data)); lasso_assign_string(x509_data->private_data->X509SubjectName, subject_name); } /** * lasso_ds_x509_data_get_crl: * @x509_data: a #LassoDsX509Data object * * Return the content of the X509CRL sub-element, it should be a base64 encoded string. * * Return value:(transfer none): the string currently set in the X509CRL private field of * the #LassoDsX509Data structure. */ const char* lasso_ds_x509_data_get_crl(LassoDsX509Data *x509_data) { lasso_return_val_if_fail(LASSO_IS_DS_X509_DATA(x509_data), NULL); return x509_data->private_data->X509CRL; } /** * lasso_ds_x509_data_set_crl: * @x509_data: a #LassoDsX509Data object * @crl: a base64 encoded string of the DER representation of the X509 CRL * * Set the content of the X509CRL sub-element, it should be a base64 encoded string. * */ void lasso_ds_x509_data_set_crl(LassoDsX509Data *x509_data, const char *crl) { lasso_return_if_fail(LASSO_IS_DS_X509_DATA(x509_data)); lasso_assign_string(x509_data->private_data->X509CRL, crl); } lasso-2.8.2/lasso/xml/dsig/PaxHeaders/ds_key_value.c0000644000000000000000000000013214114336625017414 xustar0030 mtime=1630649749.826436995 30 atime=1678814181.261163228 30 ctime=1678814320.825952262 lasso-2.8.2/lasso/xml/dsig/ds_key_value.c0000644000175000017500000000740114114336625022666 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "ds_key_value.h" /** * SECTION:ds_key_value * @short_description: object mapping for an XML DSIG KeyValue element * */ struct _LassoDsKeyValuePrivate { LassoDsX509Data *X509Data; }; typedef struct _LassoDsKeyValuePrivate LassoDsKeyValuePrivate; #define LASSO_DS_KEY_VALUE_GET_PRIVATE(o) \ (G_TYPE_INSTANCE_GET_PRIVATE ((o), LASSO_TYPE_DS_KEY_VALUE, LassoDsKeyValuePrivate)) /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "RSAKeyValue", SNIPPET_NODE, G_STRUCT_OFFSET(LassoDsKeyValue, RSAKeyValue), NULL, NULL, NULL}, { "X509Data", SNIPPET_NODE|SNIPPET_PRIVATE, G_STRUCT_OFFSET(LassoDsKeyValuePrivate, X509Data), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoDsKeyValueClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "KeyValue"); lasso_node_class_set_ns(nclass, LASSO_DS_HREF, LASSO_DS_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); g_type_class_add_private(klass, sizeof(LassoDsKeyValuePrivate)); } GType lasso_ds_key_value_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoDsKeyValueClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoDsKeyValue), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoDsKeyValue", &this_info, 0); } return this_type; } /** * lasso_ds_key_value_new: * * Creates a new #LassoDsKeyValue object. * * Return value: a newly created #LassoDsKeyValue object **/ LassoDsKeyValue* lasso_ds_key_value_new() { return g_object_new(LASSO_TYPE_DS_KEY_VALUE, NULL); } /** * lasso_ds_key_value_get_x509_data: * * Get the X509 Data node if there is one. * * Return value:(transfer none): the internal value of the X509Data field */ LassoDsX509Data* lasso_ds_key_value_get_x509_data(LassoDsKeyValue *key_value) { lasso_return_val_if_fail(LASSO_IS_DS_KEY_VALUE(key_value), NULL); return LASSO_DS_KEY_VALUE_GET_PRIVATE(key_value)->X509Data; } /** * lasso_ds_key_value_set_x509_data: * * Set the X509 Data node. * */ void lasso_ds_key_value_set_x509_data(LassoDsKeyValue *key_value, LassoDsX509Data *x509_data) { lasso_return_if_fail(LASSO_IS_DS_KEY_VALUE(key_value)); lasso_assign_gobject(LASSO_DS_KEY_VALUE_GET_PRIVATE(key_value)->X509Data, x509_data); } lasso-2.8.2/lasso/xml/dsig/PaxHeaders/ds_rsa_key_value.c0000644000000000000000000000013214114336625020261 xustar0030 mtime=1630649749.826436995 30 atime=1678814181.741165921 30 ctime=1678814320.829952284 lasso-2.8.2/lasso/xml/dsig/ds_rsa_key_value.c0000644000175000017500000000544614114336625023542 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "ds_rsa_key_value.h" /* * SECTION:ds_rsa_key_value * @short_description: Object representation of an XML DSIG element to hold an RSA key * */ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "Modulus", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoDsRsaKeyValue, Modulus), NULL, NULL, NULL}, { "Exponent", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoDsRsaKeyValue, Exponent), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoDsRsaKeyValueClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "RsaKeyValue"); lasso_node_class_set_ns(nclass, LASSO_DS_HREF, LASSO_DS_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_ds_rsa_key_value_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoDsRsaKeyValueClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoDsRsaKeyValue), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoDsRsaKeyValue", &this_info, 0); } return this_type; } /** * lasso_ds_rsa_key_value_new: * * Creates a new #LassoDsRsaKeyValue object. * * Return value: a newly created #LassoDsRsaKeyValue object **/ LassoDsRsaKeyValue* lasso_ds_rsa_key_value_new() { return g_object_new(LASSO_TYPE_DS_RSA_KEY_VALUE, NULL); } lasso-2.8.2/lasso/xml/dsig/PaxHeaders/strings.h0000644000000000000000000000013214114336625016440 xustar0030 mtime=1630649749.826436995 30 atime=1678814151.012993868 30 ctime=1678814320.817952216 lasso-2.8.2/lasso/xml/dsig/strings.h0000644000175000017500000000314514114336625021713 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . * */ /* * This header file copy part of the SOAP 1.1 specification you can found there: * http://www.w3.org/TR/soap12-part1/ * whom copyright is: * Copyright © 2007 W3C® (MIT, ERCIM, Keio), All Rights Reserved. W3C liability, trademark and * document use rules apply. */ /** * SECTION:dsig_strings * @short_description: General strings constants for XMLDsig * @include: lasso/xml/dsig/strings.h * **/ #ifndef __LASSO_DSIG_STRINGS_H__ #define __LASSO_DSIG_STRINGS_H__ /* xmldsig prefix & href */ /** * LASSO_DS_HREF: * * Namespace for FIXME * */ #define LASSO_DS_HREF "http://www.w3.org/2000/09/xmldsig#" /** * LASSO_DS_PREFIX: * * Preferred prefix for namespace of FIXME * */ #define LASSO_DS_PREFIX "ds" #endif /* __LASSO_DSIG_STRINGS_H__ */ lasso-2.8.2/lasso/xml/dsig/PaxHeaders/ds_x509_data.h0000644000000000000000000000013214114336625017133 xustar0030 mtime=1630649749.826436995 30 atime=1678814151.012993868 30 ctime=1678814320.813952194 lasso-2.8.2/lasso/xml/dsig/ds_x509_data.h0000644000175000017500000000532614114336625022411 0ustar00bdauvergnebdauvergne00000000000000/* $Id * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_DS_X509_DATA_H__ #define __LASSO_DS_X509_DATA_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "../xml.h" #define LASSO_TYPE_DS_X509_DATA (lasso_ds_x509_data_get_type()) #define LASSO_DS_X509_DATA(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_DS_X509_DATA, \ LassoDsX509Data)) #define LASSO_DS_X509_DATA_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_DS_X509_DATA, \ LassoDsX509DataClass)) #define LASSO_IS_DS_X509_DATA(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_DS_X509_DATA)) #define LASSO_IS_DS_X509_DATA_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_DS_X509_DATA)) #define LASSO_DS_X509_DATA_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_DS_X509_DATA, \ LassoDsX509DataClass)) typedef struct _LassoDsX509Data LassoDsX509Data; typedef struct _LassoDsX509DataClass LassoDsX509DataClass; typedef struct _LassoDsX509DataPrivate LassoDsX509DataPrivate; struct _LassoDsX509Data { LassoNode parent; /*< private >*/ LassoDsX509DataPrivate *private_data; }; struct _LassoDsX509DataClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_ds_x509_data_get_type(void); LASSO_EXPORT LassoDsX509Data* lasso_ds_x509_data_new(void); LASSO_EXPORT const char *lasso_ds_x509_data_get_certificate(LassoDsX509Data *x509_data); LASSO_EXPORT void lasso_ds_x509_data_set_certificate(LassoDsX509Data *x509_data, const char *certificate); LASSO_EXPORT const char *lasso_ds_x509_data_get_subject_name(LassoDsX509Data *x509_data); LASSO_EXPORT void lasso_ds_x509_data_set_subject_name(LassoDsX509Data *x509_data, const char *subject_name); LASSO_EXPORT const char *lasso_ds_x509_data_get_crl(LassoDsX509Data *x509_data); LASSO_EXPORT void lasso_ds_x509_data_set_crl(LassoDsX509Data *x509_data, const char *crl); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_DS_X509_DATA_H__ */ lasso-2.8.2/lasso/xml/dsig/PaxHeaders/ds_key_info.c0000644000000000000000000000013214114336625017233 xustar0030 mtime=1630649749.826436995 30 atime=1678814180.793160602 30 ctime=1678814320.821952239 lasso-2.8.2/lasso/xml/dsig/ds_key_info.c0000644000175000017500000000516014114336625022505 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "../private.h" #include "ds_key_info.h" /** * SECTION:ds_key_info * @short_description: object mapping for an XML DSIG KeyInfo element * */ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "KeyValue", SNIPPET_NODE, G_STRUCT_OFFSET(LassoDsKeyInfo, KeyValue), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoDsKeyInfoClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "KeyInfo"); lasso_node_class_set_ns(nclass, LASSO_DS_HREF, LASSO_DS_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_ds_key_info_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoDsKeyInfoClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoDsKeyInfo), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoDsKeyInfo", &this_info, 0); } return this_type; } /** * lasso_ds_key_info_new: * * Creates a new #LassoDsKeyInfo object. * * Return value: a newly created #LassoDsKeyInfo object **/ LassoDsKeyInfo* lasso_ds_key_info_new() { return g_object_new(LASSO_TYPE_DS_KEY_INFO, NULL); } lasso-2.8.2/lasso/xml/PaxHeaders/paos_response.c0000644000000000000000000000013214114336625016674 xustar0030 mtime=1630649749.862437387 30 atime=1678814201.053274387 30 ctime=1678814320.345949528 lasso-2.8.2/lasso/xml/paos_response.c0000644000175000017500000001315014114336625022144 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "private.h" #include "paos_response.h" #include /** * SECTION:paos_response * @short_description: <paos:Response> * *
Schema fragment for paos:Response * * * * * * * ]]> *
*/ /*****************************************************************************/ /* public methods */ /*****************************************************************************/ /** * lasso_paos_response_validate: * @response: The #LassoPaosResponse object to validate * * Validates the object conforms to required values. * * * mustUnderstand must be TRUE * actor must be equal to #LASSO_SOAP_ENV_ACTOR * * * Returns: 0 on success, error code otherwise **/ int lasso_paos_response_validate(LassoPaosResponse *response) { g_return_val_if_fail(LASSO_IS_PAOS_RESPONSE(response), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); if (!response->mustUnderstand) { error("%s.mustUnderstand must be True", G_OBJECT_CLASS_NAME(response)); return LASSO_XML_ERROR_ATTR_VALUE_INVALID; } if (response->actor == NULL) { error("%s.actor missing", G_OBJECT_CLASS_NAME(response)); return LASSO_XML_ERROR_ATTR_NOT_FOUND; } if (lasso_strisnotequal(response->actor, LASSO_SOAP_ENV_ACTOR)) { error("%s.actor invalid, must be \"%s\" not \"%s\"", G_OBJECT_CLASS_NAME(response), LASSO_SOAP_ENV_ACTOR, response->actor); return LASSO_XML_ERROR_ATTR_VALUE_INVALID; } return 0; } /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "refToMessageID", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoPaosResponse, refToMessageID), NULL, NULL, NULL}, { "mustUnderstand", SNIPPET_ATTRIBUTE | SNIPPET_BOOLEAN, G_STRUCT_OFFSET(LassoPaosResponse, mustUnderstand), NULL, LASSO_SOAP_ENV_PREFIX, LASSO_SOAP_ENV_HREF}, { "actor", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoPaosResponse, actor), NULL, LASSO_SOAP_ENV_PREFIX, LASSO_SOAP_ENV_HREF}, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; static int init_from_xml(LassoNode *node, xmlNode *xmlnode) { lasso_error_t rc = 0; LassoPaosResponse *response = LASSO_PAOS_RESPONSE(node); lasso_check_good_rc(parent_class->init_from_xml(node, xmlnode)); lasso_check_good_rc(lasso_paos_response_validate(response)); cleanup: return rc; } /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoPaosResponseClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); nclass->init_from_xml = init_from_xml; lasso_node_class_set_nodename(nclass, "Response"); lasso_node_class_set_ns(nclass, LASSO_PAOS_HREF, LASSO_PAOS_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_paos_response_get_type() { static GType paos_response_type = 0; if (!paos_response_type) { static const GTypeInfo response_info = { sizeof (LassoPaosResponseClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoPaosResponse), 0, NULL, NULL }; paos_response_type = g_type_register_static(LASSO_TYPE_NODE, "LassoPaosResponse", &response_info, 0); } return paos_response_type; } /** * lasso_paos_response_new: * @refToMessageID: (allow-none): * * The #LassoPaosResponse object is initialized as follows: * * refToMessageID = @refToMessageID (if non-NULL) * mustUnderstand = TRUE * actor = #LASSO_SOAP_ENV_ACTOR * * * Return value: a newly created and initialized #LassoPaosResponse object **/ LassoNode* lasso_paos_response_new(const char *refToMessageID) { LassoPaosResponse *response; response = g_object_new(LASSO_TYPE_PAOS_RESPONSE, NULL); if (refToMessageID) { response->refToMessageID = g_strdup(refToMessageID); } response->mustUnderstand = TRUE; response->actor = g_strdup(LASSO_SOAP_ENV_ACTOR); return LASSO_NODE(response); } lasso-2.8.2/lasso/xml/PaxHeaders/lib_idp_list.h0000644000000000000000000000013214114336625016456 xustar0030 mtime=1630649749.858437342 30 atime=1678814151.012993868 30 ctime=1678814320.241948937 lasso-2.8.2/lasso/xml/lib_idp_list.h0000644000175000017500000000430014114336625021723 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_LIB_IDP_LIST_H__ #define __LASSO_LIB_IDP_LIST_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "xml.h" #include "lib_idp_entries.h" #define LASSO_TYPE_LIB_IDP_LIST (lasso_lib_idp_list_get_type()) #define LASSO_LIB_IDP_LIST(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_LIB_IDP_LIST, LassoLibIDPList)) #define LASSO_LIB_IDP_LIST_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_LIB_IDP_LIST, LassoLibIDPListClass)) #define LASSO_IS_LIB_IDP_LIST(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_LIB_IDP_LIST)) #define LASSO_IS_LIB_IDP_LIST_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_LIB_IDP_LIST)) #define LASSO_LIB_IDP_LIST_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_LIB_IDP_LIST, LassoLibIDPListClass)) typedef struct _LassoLibIDPList LassoLibIDPList; typedef struct _LassoLibIDPListClass LassoLibIDPListClass; struct _LassoLibIDPList { LassoNode parent; /*< public >*/ /* */ LassoLibIDPEntries *IDPEntries; /* */ char *GetComplete; }; struct _LassoLibIDPListClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_lib_idp_list_get_type(void); LASSO_EXPORT LassoNode* lasso_lib_idp_list_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_LIB_IDP_LIST_H__ */ lasso-2.8.2/lasso/xml/PaxHeaders/lib_authn_context.c0000644000000000000000000000013214114336625017525 xustar0030 mtime=1630649749.854437299 30 atime=1678814191.049218168 30 ctime=1678814320.313949347 lasso-2.8.2/lasso/xml/lib_authn_context.c0000644000175000017500000000654114114336625023003 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "private.h" #include "lib_authn_context.h" /** * SECTION:lib_authn_context * @short_description: <lib:AuthnContext> * *
Schema fragment for lib:AuthnContext * * * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "AuthnContextClassRef", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoLibAuthnContext, AuthnContextClassRef), NULL, NULL, NULL}, { "AuthnContextStatementRef", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoLibAuthnContext, AuthnContextStatementRef), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoLibAuthnContextClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "AuthnContext"); lasso_node_class_set_ns(nclass, LASSO_LIB_HREF, LASSO_LIB_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_lib_authn_context_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoLibAuthnContextClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoLibAuthnContext), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoLibAuthnContext", &this_info, 0); } return this_type; } /** * lasso_lib_authn_context_new: * * Creates a new #LassoLibAuthnContext object. * * Return value: a newly created #LassoLibAuthnContext object **/ LassoNode* lasso_lib_authn_context_new() { return g_object_new(LASSO_TYPE_LIB_AUTHN_CONTEXT, NULL); } lasso-2.8.2/lasso/xml/PaxHeaders/xml.c0000644000000000000000000000013214364261206014613 xustar0030 mtime=1674666630.770769266 30 atime=1678814187.073195842 30 ctime=1678814320.309949323 lasso-2.8.2/lasso/xml/xml.c0000644000175000017500000031363214364261206020073 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ /** * SECTION:node * @short_description: Base class for all Lasso objects * * #LassoNode is the base class for Lasso objects; just a step over GObject as * defined in glib. * */ #include "private.h" #include #include #include #include #include #include #include #include #include #include #include #include "xml.h" #include "xml_enc.h" #include "saml_name_identifier.h" #include "../utils.h" #include "../registry.h" #include "../debug.h" #include "soap-1.1/soap_envelope.h" #include "soap-1.1/soap_body.h" #include "misc_text_node.h" #include "../lasso_config.h" /* Needed for ECP */ #include "saml-2.0/samlp2_idp_list.h" #include "paos_request.h" #include "ecp/ecp_request.h" #include "ecp/ecp_response.h" #include "ecp/ecp_relaystate.h" #include "../key.h" #define LOG_LEVEL_XML_DEBUG G_LOG_LEVEL_DEBUG /* change to G_LOG_LEVEL_WARNING so it shows in Apache log */ static void lasso_node_build_xmlNode_from_snippets(LassoNode *node, LassoNodeClass *class, xmlNode *xmlnode, struct XmlSnippet *snippets, gboolean lasso_dump); static struct XmlSnippet* find_xml_snippet_by_name(LassoNode *node, char *name, LassoNodeClass **class_p); static gboolean set_value_at_path(LassoNode *node, char *path, char *query_value); static char* get_value_by_path(LassoNode *node, char *path, struct XmlSnippet *xml_snippet); static gboolean find_path(LassoNode *node, char *path, LassoNode **value_node, LassoNodeClass **class_p, struct XmlSnippet **snippet); static void lasso_node_add_signature_template(LassoNode *node, xmlNode *xmlnode, struct XmlSnippet *snippet_signature); static void lasso_node_traversal(LassoNode *node, void (*do_to_node)(LassoNode *node, SnippetType type), SnippetType type); static LassoNode* lasso_node_new_from_xmlNode_with_type(xmlNode *xmlnode, char *typename); static void lasso_node_remove_original_xmlnode(LassoNode *node, SnippetType type); static LassoSignatureMethod default_signature_method = LASSO_SIGNATURE_METHOD_RSA_SHA1; static LassoSignatureMethod min_signature_method = LASSO_SIGNATURE_METHOD_RSA_SHA1; static LassoKeyEncryptionMethod default_encryption_key_encryption_method = LASSO_KEY_ENCRYPTION_METHOD_OAEP; /*****************************************************************************/ /* virtual public methods */ /*****************************************************************************/ static char* _lasso_node_export_to_xml(LassoNode *node, gboolean format, gboolean dump, int level) { xmlNode *xmlnode; char *ret; g_return_val_if_fail (LASSO_IS_NODE(node), NULL); xmlnode = lasso_node_get_xmlNode(node, dump); if (xmlnode == NULL) { return NULL; } ret = lasso_xmlnode_to_string(xmlnode, format, level); xmlFreeNode(xmlnode); return ret; } /** * lasso_node_dump: * @node: a #LassoNode * * Dumps @node. All datas in object are dumped in an XML format. * * Return value:(transfer full): a full XML dump of @node. The string must be freed by the * caller. **/ char* lasso_node_dump(LassoNode *node) { return _lasso_node_export_to_xml(node, FALSE, TRUE, 0); } /** * lasso_node_debug: * @node: a #LassoNode * @level:(default 10): the indentation depth, i.e. the depth of the last nodes to be indented. * * Create a debug dump for @node, it is pretty printed so any contained signature will be * uncheckable. * * Return value:(transfer full): a full indented and so human readable dump of @node. The string must be freed by * the caller. */ char* lasso_node_debug(LassoNode *node, int level) { return _lasso_node_export_to_xml(node, TRUE, TRUE, level); } /** * lasso_node_destroy: * @node: a #LassoNode * * Destroys the #LassoNode. **/ void lasso_node_destroy(LassoNode *node) { if (node == NULL) { return; } if (LASSO_IS_NODE(node)) { LassoNodeClass *class = LASSO_NODE_GET_CLASS(node); class->destroy(node); } } /** * lasso_node_export_to_base64: * @node: a #LassoNode * * Exports @node to a base64-encoded message. * * Return value: a base64-encoded export of @node. The string must be freed by * the caller. **/ char* lasso_node_export_to_base64(LassoNode *node) { char *str; char *ret; g_return_val_if_fail(LASSO_IS_NODE(node), NULL); str = lasso_node_export_to_xml(node); if (str == NULL) return NULL; ret = (char*)xmlSecBase64Encode(BAD_CAST str, strlen(str), 0); lasso_release_string(str); return ret; } /** * lasso_node_export_to_ecp_soap_response: * @node: a #LassoNode * * Exports @node to a ECP SOAP message. * * Return value: a ECP SOAP export of @node. The string must be freed by the * caller. **/ char* lasso_node_export_to_ecp_soap_response(LassoNode *node, const char *assertionConsumerURL) { char *ret = NULL; LassoNode *ecp_response = NULL; GList *headers = NULL; lasso_return_null_if_fail(LASSO_IS_NODE(node)); lasso_return_null_if_fail(assertionConsumerURL); /* Build the soap header elements */ ecp_response = lasso_ecp_response_new(assertionConsumerURL); goto_cleanup_if_fail(ecp_response); lasso_list_add_new_gobject(headers, ecp_response); /* Create soap envelope and serialize into an xml document */ ret = lasso_node_export_to_soap_with_headers(node, headers); cleanup: lasso_release_list_of_gobjects(headers); return ret; } /** * lasso_node_export_to_paos_request: * @node: a #LassoNode * * Exports @node to a PAOS message. * * Deprecated, use lasso_node_export_to_paos_request_full() instead * * Return value: a PAOS export of @node. The string must be freed by the * caller. **/ char * lasso_node_export_to_paos_request(LassoNode *node, const char *issuer, const char *responseConsumerURL, const char *relay_state) { return lasso_node_export_to_paos_request_full(node, issuer, responseConsumerURL, NULL, relay_state, TRUE, NULL, NULL); } /** * lasso_node_export_to_paos_request_full: * @node: * @issuer: * @responseConsumerURL: * @message_id: (allow-none): * @relay_state: (allow-none): * @is_passive: * @provider_name: (allow-none): * @idp_list: (allow-none): * * Creates a new SOAP message. The SOAP headers include a PaosRequst, * a EcpRequest and optionally a EcpRelayState. The SOAP body contains * the @node parameters. * * Returns: string containing a PAOS request. The string must be freed * by the caller. **/ char * lasso_node_export_to_paos_request_full(LassoNode *node, const char *issuer, const char *responseConsumerURL, const char *message_id, const char *relay_state, gboolean is_passive, gchar *provider_name, LassoSamlp2IDPList *idp_list) { char *ret = NULL; LassoNode *paos_request = NULL; LassoNode *ecp_request = NULL; LassoNode *ecp_relaystate = NULL; GList *headers = NULL; lasso_return_null_if_fail(LASSO_IS_NODE(node)); lasso_return_null_if_fail(issuer); lasso_return_null_if_fail(responseConsumerURL); /* Build the soap header elements */ paos_request = lasso_paos_request_new(responseConsumerURL, message_id); goto_cleanup_if_fail(paos_request); lasso_list_add_new_gobject(headers, paos_request); ecp_request = lasso_ecp_request_new(issuer, is_passive, provider_name, idp_list); goto_cleanup_if_fail(ecp_request); lasso_list_add_new_gobject(headers, ecp_request); if (relay_state) { ecp_relaystate = lasso_ecp_relay_state_new(relay_state); goto_cleanup_if_fail(ecp_relaystate); lasso_list_add_new_gobject(headers, ecp_relaystate); } /* Create soap envelope and serialize into an xml document */ ret = lasso_node_export_to_soap_with_headers(node, headers); cleanup: lasso_release_list_of_gobjects(headers); return ret; } /** * lasso_node_export_to_query: * @node: a #LassoNode * @sign_method:(default 1): the Signature transform method * @private_key_file:(allow-none): the path to the private key (may be NULL) * * Exports @node to a HTTP query string. If @private_key_file is NULL, * query won't be signed. * * Return value: a HTTP query export of @node. The string must be freed by the * caller. **/ char* lasso_node_export_to_query(LassoNode *node, LassoSignatureMethod sign_method, const char *private_key_file) { return lasso_node_export_to_query_with_password(node, sign_method, private_key_file, NULL); } /** * lasso_node_export_to_query_with_password: * @node: a #LassoNode * @sign_method:(default 1): the Signature transform method * @private_key_file:(allow-none): the path to the private key (may be NULL) * @private_key_file_password:(allow-none): the password needed to decrypt the private key * * Exports @node to a HTTP query string. If @private_key_file is NULL, * query won't be signed. * * Return value: a HTTP query export of @node. The string must be freed by the * caller. **/ char* lasso_node_export_to_query_with_password(LassoNode *node, LassoSignatureMethod sign_method, const char *private_key_file, const char *private_key_file_password) { char *unsigned_query, *query = NULL; LassoSignatureContext context = LASSO_SIGNATURE_CONTEXT_NONE; g_return_val_if_fail(LASSO_IS_NODE(node), NULL); context.signature_method = sign_method; context.signature_key = lasso_xmlsec_load_private_key(private_key_file, private_key_file_password, sign_method, NULL); if (! context.signature_key) { return NULL; } unsigned_query = lasso_node_build_query(node); if (unsigned_query){ query = lasso_query_sign(unsigned_query, context); if (query) { lasso_release(unsigned_query); unsigned_query = query; } } lasso_release_sec_key(context.signature_key); return unsigned_query; } /** * lasso_node_export_to_xml: * @node: a #LassoNode * * Exports @node to an xml message. * * Return value: an xml export of @node. The string must be freed by the * caller. **/ gchar* lasso_node_export_to_xml(LassoNode *node) { return _lasso_node_export_to_xml(node, FALSE, FALSE, 0); } /** * lasso_node_export_to_soap: * @node: a #LassoNode * * Exports @node to a SOAP message. * * Return value: a SOAP export of @node. The string must be freed by the * caller. **/ char* lasso_node_export_to_soap(LassoNode *node) { LassoSoapEnvelope *envelope; LassoSoapBody *body; char *ret; g_return_val_if_fail(LASSO_IS_NODE(node), NULL); body = lasso_soap_body_new(); envelope = lasso_soap_envelope_new(body); lasso_list_add_gobject(body->any, node); ret = lasso_node_export_to_xml((LassoNode*)envelope); lasso_release_gobject(envelope); lasso_release_gobject(body); return ret; } /** * lasso_node_export_to_soap_with_headers: * @node: a #LassoNode, becomes the SOAP body * @headers: (allow-none): #GList of #LassNode * * Exports @node to a SOAP message. The @node becomes the SOAP body. * each header in the #headers list is added to the SOAP header if non-NULL. * @headers is permitted to be an empty list (e.g. NULL). * * * Create SOAP envelope with variable number of header nodes * * You need to form a SOAP message with authn_request as the body and * paos_request, ecp_request and ecp_relaystate as SOAP header elements. * It is possible one or more of these may be NULL and should be skipped. * * char *text = NULL; * LassoNode *paos_request = NULL; * LassoNode *ecp_request = NULL; * LassoNode *ecp_relaystate = NULL; * GList *headers = NULL; * * paos_request = lasso_paos_request_new(responseConsumerURL, message_id); * ecp_request = lasso_ecp_request_new(issuer, is_passive, provider_name, idp_list); * * lasso_list_add_new_gobject(headers, paos_request); * lasso_list_add_new_gobject(headers, ecp_request); * lasso_list_add_new_gobject(headers, ecp_relaystate); * * text = lasso_node_export_to_soap_with_headers(node, headers); * * lasso_release_list_of_gobjects(headers); * * * * Return value: a SOAP export of @node. The string must be freed by the * caller. **/ char* lasso_node_export_to_soap_with_headers(LassoNode *node, GList *headers) { GList *i; LassoSoapEnvelope *envelope = NULL; LassoNode *header = NULL; char *ret = NULL; g_return_val_if_fail(LASSO_IS_NODE(node), NULL); envelope = lasso_soap_envelope_new_full(); lasso_list_add_gobject(envelope->Body->any, node); lasso_foreach(i, headers) { header = i->data; if (!header) continue; goto_cleanup_if_fail(LASSO_IS_NODE(header)); lasso_list_add_gobject(envelope->Header->Other, header); /* adds ref */ } ret = lasso_node_export_to_xml((LassoNode*)envelope); cleanup: lasso_release_gobject(envelope); return ret; } /** * lasso_node_encrypt: * @lasso_node: a #LassoNode to encrypt * @encryption_public_key : RSA public key the node will be encrypted with * * Generate a DES key and encrypt it with the RSA key. * Then encrypt @lasso_node with the DES key. * * Return value: an xmlNode which is the @node in an encrypted fashion. * It must be freed by the caller. **/ LassoSaml2EncryptedElement* lasso_node_encrypt(LassoNode *lasso_node, xmlSecKey *encryption_public_key, LassoEncryptionSymKeyType encryption_sym_key_type, LassoKeyEncryptionMethod key_encryption_method, const char *recipient) { xmlDocPtr doc = NULL; xmlNodePtr orig_node = NULL; LassoSaml2EncryptedElement *encrypted_element = NULL, *ret = NULL; xmlSecKeysMngrPtr key_manager = NULL; xmlNodePtr key_info_node = NULL; xmlNodePtr encrypted_key_node = NULL; xmlNodePtr encrypted_data = NULL; xmlNodePtr key_info_node2 = NULL; xmlSecEncCtxPtr enc_ctx = NULL; xmlSecTransformId xmlsec_encryption_sym_key_type; xmlSecTransformId xmlsec_key_encryption_method; xmlSecKey *duplicate = NULL; if (encryption_public_key == NULL || !xmlSecKeyIsValid(encryption_public_key)) { message(G_LOG_LEVEL_WARNING, "Invalid encryption key"); goto cleanup; } /* Create a document to contain the node to encrypt */ doc = xmlNewDoc((xmlChar*)"1.0"); orig_node = lasso_node_get_xmlNode(lasso_node, FALSE); xmlDocSetRootElement(doc, orig_node); /* Get the symetric key type */ switch (encryption_sym_key_type) { case LASSO_ENCRYPTION_SYM_KEY_TYPE_AES_256: xmlsec_encryption_sym_key_type = xmlSecTransformAes256CbcId; break; case LASSO_ENCRYPTION_SYM_KEY_TYPE_3DES: xmlsec_encryption_sym_key_type = xmlSecTransformDes3CbcId; break; case LASSO_ENCRYPTION_SYM_KEY_TYPE_AES_128: default: xmlsec_encryption_sym_key_type = xmlSecTransformAes128CbcId; break; } /* Get the symetric key encryption type */ switch(key_encryption_method) { case LASSO_KEY_ENCRYPTION_METHOD_PKCS1: xmlsec_key_encryption_method = xmlSecTransformRsaPkcs1Id; break; case LASSO_KEY_ENCRYPTION_METHOD_OAEP: default: xmlsec_key_encryption_method = xmlSecTransformRsaOaepId; break; } /* Create encryption template for a specific symetric key type */ /* saml-core 2.2.4 line 498: * The Type attribute SHOULD be present and, if present, MUST contain a value of * http://www.w3.org/2001/04/xmlenc#Element. */ encrypted_data = xmlSecTmplEncDataCreate(doc, xmlsec_encryption_sym_key_type, NULL, xmlSecTypeEncElement, NULL, NULL); if (encrypted_data == NULL) { message(G_LOG_LEVEL_WARNING, "Failed to create encryption template"); goto cleanup; } if (xmlSecTmplEncDataEnsureCipherValue(encrypted_data) == NULL) { message(G_LOG_LEVEL_WARNING, "Failed to add CipherValue node"); goto cleanup; } /* create and initialize keys manager, we use a simple list based * keys manager, implement your own xmlSecKeysStore klass if you need * something more sophisticated */ key_manager = xmlSecKeysMngrCreate(); if (key_manager == NULL) { message(G_LOG_LEVEL_WARNING, "Failed to create keys manager"); goto cleanup; } if (xmlSecCryptoAppDefaultKeysMngrInit(key_manager) < 0) { message(G_LOG_LEVEL_WARNING, "Failed to initialize keys manager"); goto cleanup; } /* add key to keys manager, from now on keys manager is responsible * for destroying key */ duplicate = xmlSecKeyDuplicate(encryption_public_key); if (xmlSecCryptoAppDefaultKeysMngrAdoptKey(key_manager, duplicate) < 0) { lasso_release_sec_key(duplicate); goto cleanup; } /* add */ key_info_node = xmlSecTmplEncDataEnsureKeyInfo(encrypted_data, NULL); if (key_info_node == NULL) { message(G_LOG_LEVEL_WARNING, "Failed to add key info"); goto cleanup; } /* add to store the encrypted session key */ encrypted_key_node = xmlSecTmplKeyInfoAddEncryptedKey(key_info_node, xmlsec_key_encryption_method, NULL, NULL, (xmlChar*)recipient); if (encrypted_key_node == NULL) { message(G_LOG_LEVEL_WARNING, "Failed to add encrypted key"); goto cleanup; } /* we want to put encrypted key in the node */ if (xmlSecTmplEncDataEnsureCipherValue(encrypted_key_node) == NULL) { message(G_LOG_LEVEL_WARNING, "Failed to add CipherValue node"); goto cleanup; } /* add and nodes to */ key_info_node2 = xmlSecTmplEncDataEnsureKeyInfo(encrypted_key_node, NULL); if (key_info_node2 == NULL) { message(G_LOG_LEVEL_WARNING, "Failed to add key info"); goto cleanup; } /* check id of the key */ if (xmlSecKeyGetData(encryption_public_key, xmlSecOpenSSLKeyDataRsaId) != 0) { xmlNode *key_value = xmlSecTmplKeyInfoAddKeyValue(key_info_node2); if (key_value == NULL) { message(G_LOG_LEVEL_WARNING, "Failed to add key value"); goto cleanup; } } else { /* it must be a certificate */ xmlNodePtr x509_data; x509_data = xmlSecTmplKeyInfoAddX509Data(key_info_node2); if (x509_data == NULL) { message(G_LOG_LEVEL_WARNING, "Failed to add X509 data"); goto cleanup; } } /* create encryption context */ enc_ctx = (xmlSecEncCtxPtr)xmlSecEncCtxCreate(key_manager); if (enc_ctx == NULL) { message(G_LOG_LEVEL_WARNING, "Failed to create encryption context"); goto cleanup; } /* generate a symetric key */ switch (encryption_sym_key_type) { case LASSO_ENCRYPTION_SYM_KEY_TYPE_AES_256: enc_ctx->encKey = xmlSecKeyGenerate(xmlSecKeyDataAesId, 256, xmlSecKeyDataTypeSession); break; case LASSO_ENCRYPTION_SYM_KEY_TYPE_3DES: enc_ctx->encKey = xmlSecKeyGenerate(xmlSecKeyDataDesId, 192, xmlSecKeyDataTypeSession); break; case LASSO_ENCRYPTION_SYM_KEY_TYPE_AES_128: default: enc_ctx->encKey = xmlSecKeyGenerate(xmlSecKeyDataAesId, 128, xmlSecKeyDataTypeSession); break; } if (enc_ctx->encKey == NULL) { message(G_LOG_LEVEL_WARNING, "Failed to generate session des key"); goto cleanup; } /* encrypt the data */ if (xmlSecEncCtxXmlEncrypt(enc_ctx, encrypted_data, orig_node) < 0) { message(G_LOG_LEVEL_WARNING, "Encryption failed"); goto cleanup; } /* Create a new EncryptedElement */ encrypted_element = LASSO_SAML2_ENCRYPTED_ELEMENT(lasso_saml2_encrypted_element_new()); lasso_assign_gobject(encrypted_element->original_data, lasso_node); lasso_assign_xml_node(encrypted_element->EncryptedData, xmlDocGetRootElement(doc)); lasso_transfer_gobject(ret, encrypted_element); cleanup: lasso_release_key_manager(key_manager); lasso_release_gobject(encrypted_element); lasso_release_encrypt_context(enc_ctx); lasso_release_doc(doc); return ret; } /** * lasso_node_init_from_query: * @node: a #LassoNode (or derived class) * @query: the query string * * Initialiazes @node fields with data from @query string. * * Return value: %TRUE if success **/ gboolean lasso_node_init_from_query(LassoNode *node, const char *query) { LassoNodeClass *class; xmlChar **query_fields; int i; gboolean rc; g_return_val_if_fail(LASSO_IS_NODE(node), FALSE); class = LASSO_NODE_GET_CLASS(node); query_fields = lasso_urlencoded_to_strings(query); rc = class->init_from_query(node, (char**)query_fields); for (i = 0; query_fields[i]; i++) { xmlFree(query_fields[i]); query_fields[i] = NULL; } lasso_release_array_of_xml_strings(query_fields); return rc; } /** * lasso_node_init_from_xml: * @node: a #LassoNode (or derived class) * @xmlnode: the libxml2 node * * Initialiazes @node fields with data from @xmlnode XML node. * * Return value: 0 on success; or a negative value otherwise. **/ int lasso_node_init_from_xml(LassoNode *node, xmlNode *xmlnode) { LassoNodeClass *class; g_return_val_if_fail(LASSO_IS_NODE(node), LASSO_XML_ERROR_OBJECT_CONSTRUCTION_FAILED); class = LASSO_NODE_GET_CLASS(node); return class->init_from_xml(node, xmlnode); } /** * lasso_node_build_query: * @node: a #LassoNode * * Build an HTTP query from the given LassoNode, this is a pure virtual * function, you must overload it in subclass. * * Return value: a newly allocated string containing the query if it succeed, * or NULL otherwise. */ char* lasso_node_build_query(LassoNode *node) { LassoNodeClass *class; g_return_val_if_fail (LASSO_IS_NODE(node), NULL); class = LASSO_NODE_GET_CLASS(node); return class->build_query(node); } static LassoNodeClassData* lasso_legacy_get_signature_node_data(LassoNode *node, LassoNodeClass **out_klass) { LassoNodeClass *klass = NULL; LassoNodeClassData *node_data = NULL; klass = LASSO_NODE_GET_CLASS(node); /* find a klass defining a signature */ while (klass && LASSO_IS_NODE_CLASS(klass)) { if (klass->node_data && klass->node_data->sign_type_offset) { if (out_klass) { *out_klass = klass; } node_data = klass->node_data; break; } klass = g_type_class_peek_parent(klass); } return node_data; } static gboolean lasso_legacy_extract_and_copy_signature_parameters(LassoNode *node, LassoNodeClassData *node_data) { LassoSignatureMethod signature_method = LASSO_SIGNATURE_METHOD_NONE; char *private_key_file = NULL; char *certificate_file = NULL; if (! node_data) { return FALSE; } signature_method = G_STRUCT_MEMBER(LassoSignatureMethod, node, node_data->sign_method_offset); private_key_file = G_STRUCT_MEMBER(char *, node, node_data->private_key_file_offset); certificate_file = G_STRUCT_MEMBER(char *, node, node_data->certificate_file_offset); if (! lasso_ok_signature_method(signature_method)) { return FALSE; } if (lasso_node_set_signature(node, lasso_make_signature_context_from_path_or_string(private_key_file, NULL, signature_method, certificate_file)) != 0) { return FALSE; } return TRUE; } /** * lasso_node_get_xmlNode: * @node: a #LassoNode * @lasso_dump: whether to include lasso-specific nodes * * Builds an XML representation of @node. * * Return value: a new xmlNode. It must be freed by the caller. **/ xmlNode* lasso_node_get_xmlNode(LassoNode *node, gboolean lasso_dump) { xmlNode *xmlnode = NULL; LassoSignatureContext context; LassoNodeClassData *node_data; g_return_val_if_fail (LASSO_IS_NODE(node), NULL); xmlnode = LASSO_NODE_GET_CLASS(node)->get_xmlNode(node, lasso_dump); node_data = lasso_legacy_get_signature_node_data(node, NULL); context = lasso_node_get_signature(node); /* support for legacy way to put a signature on a node */ if (! lasso_validate_signature_context(context)) { if (lasso_legacy_extract_and_copy_signature_parameters(node, node_data)) context = lasso_node_get_signature(node); } if (! lasso_dump && node_data && xmlnode && lasso_validate_signature_context(context)) { int rc; char *id_attribute = G_STRUCT_MEMBER(char*, node, node_data->id_attribute_offset); rc = lasso_sign_node(xmlnode, context, node_data->id_attribute_name, id_attribute); if (rc != 0) { warning("Signing of %s:%s failed: %s", xmlnode->ns->prefix, xmlnode->name, lasso_strerror(rc)); lasso_release_xml_node(xmlnode); } } return xmlnode; } /** * lasso_node_cleanup_original_xmlnodes: * * @node: a #LassoNode * * Traverse the #LassoNode tree starting at Node and remove keeped xmlNode if one is found. * * Return value: None */ void lasso_node_cleanup_original_xmlnodes(LassoNode *node) { lasso_node_traversal(node, lasso_node_remove_original_xmlnode, 0); } static GQuark original_xmlnode_quark; static GQuark custom_element_quark; /** * lasso_node_get_original_xmlnode: * @node: a #LassoNode * * Retrieve the original xmlNode eventually associated to this #LassoNode. * * Return value:(transfer none): an #xmlNodePtr or NULL. */ xmlNodePtr lasso_node_get_original_xmlnode(LassoNode *node) { return g_object_get_qdata(G_OBJECT(node), original_xmlnode_quark); } static void original_xmlnode_free(void *node) { xmlNode *xnode = (xmlNode*)node; if (node) { if (lasso_flag_memory_debug) { fprintf(stderr, "freeing original xmlnode %s (at %p)\n", xnode->name, xnode); } xmlFreeNode(xnode); } } /** * lasso_node_set_original_xmlnode: * @node: the #LassoNode object * @xmlnode: an #xmlNode * * Set the underlying XML representation of the object. * */ void lasso_node_set_original_xmlnode(LassoNode *node, xmlNode* xmlnode) { if (xmlnode) { xmlNode *copy = NULL; xmlNode *parent = xmlnode->parent; copy = xmlCopyNode(xmlnode, 1); /* excl-c14n can move some namespace declarations at the point where the document is * cut, to simulate it we copy on the new node all namespaces from the parents of * the node which are not shadowed by another declaration on this node or one of its * parent. */ while (parent && parent->type == XML_ELEMENT_NODE) { xmlNs *ns_def = parent->nsDef; xmlNs *local_ns_def; while (ns_def) { int ok = 1; local_ns_def = copy->nsDef; while (local_ns_def) { if (lasso_strisequal((char*)local_ns_def->prefix, (char*)ns_def->prefix)) { ok = 0; break; } local_ns_def = local_ns_def->next; } if (ok) { xmlNewNs(copy, ns_def->href, ns_def->prefix); } ns_def = ns_def->next; } parent = parent->parent; } if (lasso_flag_memory_debug) { fprintf(stderr, "setting original xmlnode (at %p) on node %s:%p\n", copy, G_OBJECT_TYPE_NAME (node), node); } g_object_set_qdata_full(G_OBJECT(node), original_xmlnode_quark, copy, (GDestroyNotify)original_xmlnode_free); } else { if (lasso_flag_memory_debug) { fprintf(stderr, "clearing original xmlnode on node %p\n", node); } g_object_set_qdata_full(G_OBJECT(node), original_xmlnode_quark, NULL, (GDestroyNotify)original_xmlnode_free); } } struct _CustomElement { char *prefix; char *href; char *nodename; GHashTable *namespaces; LassoSignatureContext signature_context; xmlSecKey *encryption_public_key; LassoEncryptionSymKeyType encryption_sym_key_type; LassoKeyEncryptionMethod key_encryption_method; }; static struct _CustomElement * _lasso_node_new_custom_element() { struct _CustomElement *ret = g_new0(struct _CustomElement, 1); ret->namespaces = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); return ret; } static void _lasso_node_free_custom_element(struct _CustomElement *custom_element) { if (custom_element) { lasso_release_string(custom_element->prefix); lasso_release_string(custom_element->href); lasso_release_string(custom_element->nodename); lasso_release_ghashtable(custom_element->namespaces); lasso_release_sec_key(custom_element->encryption_public_key); lasso_release_sec_key(custom_element->signature_context.signature_key); } lasso_release(custom_element); } /** * _lasso_node_get_custom_element: * @node: a #LassoNode object * * Return the eventually attached custom namespace object * * Return value: NULL or an #_CustomElement structure. */ static struct _CustomElement* _lasso_node_get_custom_element(LassoNode *node) { if (! LASSO_NODE(node)) return NULL; return g_object_get_qdata((GObject*)node, custom_element_quark); } static struct _CustomElement* _lasso_node_get_custom_element_or_create(LassoNode *node) { struct _CustomElement *custom_element; if (! LASSO_IS_NODE(node)) return NULL; custom_element = _lasso_node_get_custom_element(node); if (! custom_element) { custom_element = _lasso_node_new_custom_element(); g_object_set_qdata_full((GObject*)node, custom_element_quark, custom_element, (GDestroyNotify)_lasso_node_free_custom_element); } return custom_element; } /** * lasso_node_set_custom_namespace: * @node: a #LassoNode object * @prefix: the prefix to use for the definition * @href: the URI of the namespace * * Set a custom namespace for an object instance, use it with object existing a lot of revision of * the nearly same namespace. */ void lasso_node_set_custom_namespace(LassoNode *node, const char *prefix, const char *href) { struct _CustomElement *custom_element; custom_element = _lasso_node_get_custom_element_or_create(node); g_return_if_fail (custom_element != NULL); lasso_assign_string(custom_element->prefix, prefix); lasso_assign_string(custom_element->href, href); } /** * lasso_node_set_signature: * @node: a #LassoNode object * @signature_context: a #LassoSignatureContext structure * * Setup a signature on @node. * * Return value: 0 if successful, an error code otherwise. */ int lasso_node_set_signature(LassoNode *node, LassoSignatureContext context) { struct _CustomElement *custom_element; int rc = 0; lasso_bad_param(NODE, node); custom_element = _lasso_node_get_custom_element_or_create(node); g_return_val_if_fail (custom_element != NULL, LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); if (custom_element->signature_context.signature_key) { lasso_release_sec_key(custom_element->signature_context.signature_key); } custom_element->signature_context.signature_method = context.signature_method; lasso_assign_new_sec_key(custom_element->signature_context.signature_key, context.signature_key); return rc; } /** * lasso_node_get_signature: * @node: a #LassoNode object * @type: an output for the signature type * @method: an output for the signature method * @private_key: an output for the private key * @private_key_password: an output for the private key password * @certificate: an output for the certificate * * Return signature parameters stored with this node. */ LassoSignatureContext lasso_node_get_signature(LassoNode *node) { struct _CustomElement *custom_element; g_return_val_if_fail (LASSO_IS_NODE(node), LASSO_SIGNATURE_CONTEXT_NONE); custom_element = _lasso_node_get_custom_element(node); if (! custom_element) { return LASSO_SIGNATURE_CONTEXT_NONE; } return custom_element->signature_context; } /** * lasso_node_set_encryption: * @node: a @LassoNode object * @encryption_public_key: an #xmlSecKey used to crypt the session key * @encryption_sym_key_type: the kind of session key to use * * Setup a node for future encryption. It is read by saml2:EncryptedElement for eventually * encrypting nodes. * * Return value: 0 if successful, LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ if node is not a * #LassoNode. */ void lasso_node_set_encryption(LassoNode *node, xmlSecKey *encryption_public_key, LassoEncryptionSymKeyType encryption_sym_key_type, LassoKeyEncryptionMethod key_encryption_method) { struct _CustomElement *custom_element; g_return_if_fail(LASSO_IS_NODE(node)); if (encryption_public_key) { custom_element = _lasso_node_get_custom_element_or_create(node); if (! custom_element) { return; } } else { custom_element = _lasso_node_get_custom_element(node); if (! custom_element) { return; } lasso_release_sec_key(custom_element->encryption_public_key); return; } lasso_assign_sec_key(custom_element->encryption_public_key, encryption_public_key); if (encryption_sym_key_type < LASSO_ENCRYTPION_SYM_KEY_TYPE_LAST) { custom_element->encryption_sym_key_type = encryption_sym_key_type; } else { custom_element->encryption_sym_key_type = LASSO_ENCRYPTION_SYM_KEY_TYPE_DEFAULT; } if (LASSO_KEY_ENCRYPTION_METHOD_DEFAULT < key_encryption_method && key_encryption_method < LASSO_KEY_ENCRYPTION_METHOD_LAST) { custom_element->key_encryption_method = key_encryption_method; } else { custom_element->key_encryption_method = lasso_get_default_key_encryption_method(); } } /** * lasso_node_get_encryption: * @node: a #LassoNode object * @encryption_public_key_ptr: a pointer on a pointer to an #xmlSecKey object, to hold the the * public key used to encrypt the session key * @encryption_sym_key_type: a pointer on a #LassoEncryptionSymKeyType * * Lookup eventual configuration for encrypting the given node. */ void lasso_node_get_encryption(LassoNode *node, xmlSecKey **encryption_public_key, LassoEncryptionSymKeyType *encryption_sym_key_type, LassoKeyEncryptionMethod *key_encryption_method) { struct _CustomElement *custom_element; g_return_if_fail(LASSO_IS_NODE(node)); custom_element = _lasso_node_get_custom_element(node); if (custom_element && custom_element->encryption_public_key) { lasso_assign_sec_key(*encryption_public_key, custom_element->encryption_public_key); *encryption_sym_key_type = custom_element->encryption_sym_key_type; *key_encryption_method = custom_element->key_encryption_method; } } /** * lasso_node_set_custom_nodename: * @node: a #LassoNode object * @nodename: the name to use for the node * * Set a custom nodename for an object instance, use it with object implement a schema type and not * a real element. */ void lasso_node_set_custom_nodename(LassoNode *node, const char *nodename) { struct _CustomElement *custom_element; custom_element = _lasso_node_get_custom_element_or_create(node); g_return_if_fail (custom_element != NULL); lasso_assign_string(custom_element->nodename, nodename); } /** * lasso_node_add_custom_namespace: * @prefix: prefix name * @href: href url * * Add a custom namespace declaration at this node level */ void lasso_node_add_custom_namespace(LassoNode *node, const char *prefix, const char *href) { struct _CustomElement *custom_element; custom_element = _lasso_node_get_custom_element_or_create(node); g_return_if_fail(custom_element != NULL); g_hash_table_insert(custom_element->namespaces, g_strdup(prefix), g_strdup(href)); } /*****************************************************************************/ /* implementation methods */ /*****************************************************************************/ static void lasso_node_remove_original_xmlnode(LassoNode *node, SnippetType type) { LassoNodeClass *class; class = LASSO_NODE_GET_CLASS(node); if (class->node_data->keep_xmlnode || type & SNIPPET_KEEP_XMLNODE) { lasso_node_set_original_xmlnode(node, NULL); } } static void lasso_node_traversal(LassoNode *node, void (*do_to_node)(LassoNode *node, SnippetType type), SnippetType type) { LassoNodeClass *class; struct XmlSnippet *snippet; if (node == NULL || do_to_node == NULL) { return; } class = LASSO_NODE_GET_CLASS(node); do_to_node(node, type); while (class && LASSO_IS_NODE_CLASS(class) && class->node_data) { GType g_type = G_TYPE_FROM_CLASS(class); snippet = class->node_data->snippets; while (snippet->name != NULL) { SnippetType type; void **value = SNIPPET_STRUCT_MEMBER_P(node, g_type, snippet); type = snippet->type & 0xff; switch (type) { case SNIPPET_NODE: case SNIPPET_NODE_IN_CHILD: lasso_node_traversal(*value, do_to_node, snippet->type); break; case SNIPPET_LIST_NODES: { GList *list = *value; while (list != NULL) { if (list->data) { lasso_node_traversal(LASSO_NODE(list->data), do_to_node, snippet->type); } list = g_list_next(list); } } break; case SNIPPET_UNUSED1: g_assert_not_reached(); default: break; } snippet++; } class = g_type_class_peek_parent(class); } } static void lasso_node_impl_destroy(LassoNode *node) { g_object_unref(G_OBJECT(node)); } #define trace_snippet(format, args...) \ lasso_trace(format "%s.%s\n", ## args, G_OBJECT_TYPE_NAME(node), snippet->name) /** * _lasso_node_collect_namespaces: * @namespaces: a pointer to a pointer on a #GHashTable * @node: an #xmlNode pointer * * Follow the parent link of the @node to collect all declared namespaces, it is usefull for content * that need to be interpreted with respect to declared namespaces (XPath for example). */ void _lasso_node_collect_namespaces(GHashTable **namespaces, xmlNode *node) { if (*namespaces == NULL) { *namespaces = g_hash_table_new_full( g_str_hash, g_str_equal, g_free, g_free); } while (node) { if (node->type == XML_ELEMENT_NODE) { xmlNs *nsDef = node->nsDef; while (nsDef) { if (nsDef->prefix && nsDef->href) { g_hash_table_insert(*namespaces, g_strdup((char*)nsDef->prefix), g_strdup((char*)nsDef->href)); } nsDef = nsDef->next; } } node = node->parent; } } gboolean lasso_get_integer_attribute(xmlNode *node, xmlChar *attribute_name, xmlChar *ns_href, int *integer, long int low, long int high) { xmlChar *content = NULL; gboolean rc = FALSE; long int what; g_assert (integer); content = xmlGetNsProp(node, attribute_name, ns_href); if (! content) goto cleanup; if (! lasso_string_to_xsd_integer((char*)content, &what)) goto cleanup; if (what < low || what >= high) goto cleanup; *integer = what; rc = TRUE; cleanup: lasso_release_xml_string(content); return rc; } static inline gboolean lasso_equal_namespace(xmlNs *t1, xmlNs *t2) { return t1 && t2 && (t1 == t2 || lasso_strisequal((char*)t1->href, (char*)t2->href)); } static void snippet_set_value(LassoNode *node, LassoNodeClass *class, struct XmlSnippet *snippet, xmlChar *content) { void *value; GType g_type = G_TYPE_FROM_CLASS(class); /* If not offset, it means it is handled by an adhoc init_from_xml */ if (! snippet->offset && ! (snippet->type & SNIPPET_PRIVATE)) { return; } value = SNIPPET_STRUCT_MEMBER_P(node, g_type, snippet); if (snippet->type & SNIPPET_INTEGER) { int val = strtol((char*)content, NULL, 10); if (((val == INT_MIN || val == INT_MAX) && errno == ERANGE) || errno == EINVAL || val < 0) { if (snippet->type & SNIPPET_OPTIONAL_NEG) { val = -1; } else { val = 0; } } (*(int*)value) = val; } else if (snippet->type & SNIPPET_BOOLEAN) { int val = 0; if (strcmp((char*)content, "true") == 0) { val = 1; } else if (strcmp((char*)content, "1") == 0) { val = 1; } (*(int*)value) = val; } else { lasso_assign_string((*(char**)value), (char*)content); if (lasso_flag_memory_debug == TRUE) { fprintf(stderr, " setting prop %s/%s to value %p: %s\n", G_OBJECT_TYPE_NAME(node), snippet->name, *(void**)value, (char*)content); } } } gboolean next_node_snippet(GSList **class_iter_p, struct XmlSnippet **snippet_p) { while (*class_iter_p) { if (*snippet_p) { if ((*snippet_p)->name) { SnippetType type = (*snippet_p)->type; /* special case for ArtifactResponse */ if (type & SNIPPET_ANY && (type & 0xff) == SNIPPET_NODE) return TRUE; if (! (type & SNIPPET_ANY) && (*snippet_p)->name[0] != '\0') { switch (type & 0xff) { case SNIPPET_NODE: case SNIPPET_NODE_IN_CHILD: case SNIPPET_LIST_XMLNODES: case SNIPPET_LIST_CONTENT: case SNIPPET_LIST_NODES: case SNIPPET_EXTENSION: case SNIPPET_XMLNODE: case SNIPPET_CONTENT: case SNIPPET_SIGNATURE: return TRUE; default: break; } } ++*snippet_p; } else { *class_iter_p = g_slist_next(*class_iter_p); *snippet_p = NULL; } } else { *snippet_p = ((LassoNodeClass*)(*class_iter_p)->data) ->node_data->snippets; } } return FALSE; } static inline gboolean is_snippet_type(struct XmlSnippet *snippet, SnippetType simple_type) { return (snippet->type & 0xff) == simple_type; } static inline gboolean is_snippet_mandatory(struct XmlSnippet *snippet) { return snippet->type & SNIPPET_MANDATORY ? TRUE : FALSE; } static inline gboolean is_snippet_multiple(struct XmlSnippet *snippet) { switch (snippet->type & 0xff) { case SNIPPET_LIST_XMLNODES: case SNIPPET_LIST_CONTENT: case SNIPPET_LIST_NODES: case SNIPPET_EXTENSION: return TRUE; default: return FALSE; } } static inline gboolean node_match_snippet(xmlNode *parent, xmlNode *node, struct XmlSnippet *snippet) { /* special case of ArtifactResponse */ if (snippet->type & SNIPPET_ANY) { message(LOG_LEVEL_XML_DEBUG, "Matching node %s vs SNIPPET_ANY: SUCCESS", node->name); return TRUE; } else { if (!lasso_strisequal(snippet->name, (char*)node->name)) { message(LOG_LEVEL_XML_DEBUG, "Matching node %s vs snippet %s: FAILURE names don't match", node->name, snippet->name); return FALSE; } if ((snippet->ns_uri == NULL) && lasso_equal_namespace(parent->ns, node->ns)) { message(LOG_LEVEL_XML_DEBUG, "Matching node %s vs snippet %s: SUCCESS namespace prefixes match", node->name, snippet->name); return TRUE; } if ((node->ns != NULL) && lasso_strisequal((char*)node->ns->href, snippet->ns_uri)) { message(LOG_LEVEL_XML_DEBUG, "Matching node %s vs snippet %s: SUCCESS namespace URIs match", node->name, snippet->name); return TRUE; } message(LOG_LEVEL_XML_DEBUG, "Matching node %s vs snippet %s: FAILURE", node->name, snippet->name); return FALSE; } } /** FIXME: return a real error code */ static int lasso_node_impl_init_from_xml(LassoNode *node, xmlNode *xmlnode) { struct XmlSnippet *snippet; xmlNode *t; LassoNodeClass *class; void *value; SnippetType type; struct XmlSnippet *snippet_any = NULL; struct XmlSnippet *snippet_any_attribute = NULL; GType g_type_collect_namespaces = 0, g_type_any = 0, g_type_any_attribute = 0; struct XmlSnippet *snippet_collect_namespaces = NULL; struct XmlSnippet *snippet_signature = NULL; gboolean keep_xmlnode = FALSE; GSList *class_list = NULL; GSList *class_iter = NULL; xmlAttr *attr = NULL; GType g_type = 0; LassoNodeClass *node_class; gint rc = 0; message(LOG_LEVEL_XML_DEBUG, "lasso_node_impl_init_from_xml <%s>", xmlnode->name); if (! xmlnode) { rc = 1; goto cleanup; } node_class = class = LASSO_NODE_GET_CLASS(node); /* No node_data no initialization possible */ if (! class->node_data) { message(G_LOG_LEVEL_WARNING, "Class %s has no node_data so no initialization " "is possible", G_OBJECT_CLASS_NAME(class)); rc = 1; goto cleanup; } /* check node href and name match the node_data */ { gboolean name_mismatch = FALSE; LassoNodeClass *check_class = class; /* if node is an xsi subtype of a real element, find the real element class */ while (check_class->node_data->xsi_sub_type) { check_class = g_type_class_peek_parent(check_class); } name_mismatch = name_mismatch || lasso_strisnotequal((char*)check_class->node_data->node_name, (char*)xmlnode->name); name_mismatch = name_mismatch || ! lasso_equal_namespace(check_class->node_data->ns, xmlnode->ns); if (xmlnode->ns) { name_mismatch = name_mismatch && lasso_strisnotequal( G_OBJECT_CLASS_NAME(class), lasso_registry_default_get_mapping((char*)xmlnode->ns->href, (char*)xmlnode->name, LASSO_LASSO_HREF)); } if (name_mismatch) { warning("lasso_node_impl_init_from_xml: expected name an href do not match node, expected %s:%s received %s:%s", class->node_data->ns ? class->node_data->ns->href : NULL, class->node_data->node_name, xmlnode->ns ? xmlnode->ns->href : NULL, xmlnode->name); rc = 1; goto cleanup; } } /* Collect special snippets like SNIPPET_COLLECT_NAMESPACES, SNIPPET_ANY, SNIPPET_ATTRIBUTE * or SNIPPET_SIGNATURE, and initialize class_list in reverse. */ while (class && LASSO_IS_NODE_CLASS(class)) { if (class->node_data) { GType g_type = G_TYPE_FROM_CLASS(class); keep_xmlnode |= class->node_data->keep_xmlnode; if (class->node_data->snippets) class_list = g_slist_prepend(class_list, class); for (snippet = class->node_data->snippets; snippet && snippet->name; snippet++) { type = snippet->type & 0xff; if (snippet->name && snippet->name[0] == '\0' && type == SNIPPET_COLLECT_NAMESPACES) { snippet_collect_namespaces = snippet; g_type_collect_namespaces = g_type; } else if (type == SNIPPET_SIGNATURE) { snippet_signature = snippet; } else if (type == SNIPPET_ATTRIBUTE && snippet->type & SNIPPET_ANY) { g_type_any_attribute = g_type; snippet_any_attribute = snippet; } else if (type == SNIPPET_TEXT_CHILD) { xmlChar *tmp = xmlNodeGetContent(xmlnode); snippet_set_value(node, class, snippet, tmp); lasso_release_xml_string(tmp); } else if (type != SNIPPET_ATTRIBUTE && type != SNIPPET_NODE && snippet->type & SNIPPET_ANY) { if (! snippet_any) { g_type_any = g_type; snippet_any = snippet; } else { message(G_LOG_LEVEL_CRITICAL, "Two 'any' node snippet for class %s", g_type_name(G_TYPE_FROM_INSTANCE(node))); } } } } class = g_type_class_peek_parent(class); } /* If any class asked for keeping the xmlNode, keep it around */ if (keep_xmlnode) { lasso_node_set_original_xmlnode(node, xmlnode); } /** Collect attributes */ for (attr = xmlnode->properties; attr; attr = attr->next) { xmlChar *content; content = xmlNodeGetContent((xmlNode*)attr); int ok = 0; /* Skip xsi:type if it was used to find the node class */ if (attr->ns && lasso_strisequal((char*)attr->name, "type") && lasso_strisequal((char*)attr->ns->href, LASSO_XSI_HREF)) { char *colon = strchr((char*)content, ':'); if (colon) { xmlNs *ns; *colon = '\0'; ns = xmlSearchNs(NULL, xmlnode, content); *colon = ':'; if (ns && lasso_strisequal((char*)ns->href, (char*)node_class->node_data->ns->href) && lasso_strisequal(&colon[1], node_class->node_data->node_name)) { lasso_release_xml_string(content); continue; } } } for (class_iter = class_list; class_iter; class_iter = class_iter->next) { class = class_iter->data; for (snippet = class->node_data->snippets; snippet && snippet->name; snippet++) { type = snippet->type & 0xff; /* assign attribute content if attribute has the same name as the * snippet and: * - the snippet and the attribute have no namespace * - the snippet has no namespace but the attribute has the same * namespace as the node * - the snippet and the node have a namespace, which are equal. */ if (type != SNIPPET_ATTRIBUTE) continue; if (! lasso_strisequal((char*)attr->name, (char*)snippet->name)) continue; if (attr->ns) { gboolean same_namespace, given_namespace; same_namespace = lasso_equal_namespace(attr->ns, xmlnode->ns) && ! snippet->ns_uri; given_namespace = snippet->ns_uri && lasso_strisequal((char*)attr->ns->href, snippet->ns_uri); if (! same_namespace && ! given_namespace) break; } snippet_set_value(node, class, snippet, content); ok = 1; break; } } if (! ok && attr->ns && snippet_any_attribute) { GHashTable **any_attribute; gchar *key; any_attribute = SNIPPET_STRUCT_MEMBER_P(node, g_type_any_attribute, snippet_any_attribute); if (*any_attribute == NULL) { *any_attribute = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); } if (lasso_equal_namespace(attr->ns, xmlnode->ns)) { key = g_strdup((char*)attr->name); } else { key = g_strdup_printf("{%s}%s", attr->ns->href, attr->name); } g_hash_table_insert(*any_attribute, key, g_strdup((char*)content)); lasso_release_xml_string(content); } else if (! ok) { if (! attr->ns || (lasso_strisnotequal((char*)attr->ns->href, LASSO_XSI_HREF) && lasso_strisnotequal((char*)attr->ns->href, LASSO_XML_HREF))) { warning("lasso_node_impl_init_from_xml: Unexpected attribute: {%s}%s = %s", attr->ns ? attr->ns->href : NULL, attr->name, content); } } lasso_release_xml_string(content); } /* Collect children nodes in reverse order of class parents (older parent first), skip non * node and ANY snippets) */ class_iter = class_list; snippet = ((LassoNodeClass*)class_iter->data)->node_data->snippets; next_node_snippet(&class_iter, &snippet); for (t = xmlnode->children; t && class_iter && snippet; t = t->next) { /* Only collect text node if: * - there is a LIST_XMLNODES any snippet * - there is a LIST_NODES any snippet with the ALLOW_TEXT modifier */ if (t->type == XML_TEXT_NODE && snippet_any && (is_snippet_type(snippet_any, SNIPPET_LIST_XMLNODES) || (is_snippet_type(snippet_any, SNIPPET_LIST_NODES) && (snippet_any->type & SNIPPET_ALLOW_TEXT)))) { GList **location = SNIPPET_STRUCT_MEMBER_P(node, g_type_any, snippet_any); if (is_snippet_type(snippet_any, SNIPPET_LIST_XMLNODES)) { lasso_list_add_xml_node(*location, t); } else { lasso_list_add_new_gobject(*location, lasso_node_new_from_xmlNode_with_type(t, "LassoMiscTextNode")); } } else if (t->type == XML_COMMENT_NODE || t->type == XML_PI_NODE || t->type == XML_TEXT_NODE) { /* ignore comments */ continue; } else if (t->type == XML_ELEMENT_NODE) { LassoNode *subnode = NULL; xmlNode *first_child = NULL; GList **list = NULL; xmlChar *content = NULL; gboolean match = FALSE; struct XmlSnippet *matched_snippet = NULL; #define ADVANCE_MATCH \ if (snippet->type & SNIPPET_JUMP_ON_MATCH) { \ snippet += (ptrdiff_t)SNIPPET_JUMP_OFFSET(snippet->type); \ } else { \ snippet++; \ } \ next_node_snippet(&class_iter, &snippet); #define ADVANCE_MISS \ if (snippet->type & SNIPPET_JUMP_ON_MISS) { \ snippet += (ptrdiff_t)SNIPPET_JUMP_OFFSET(snippet->type); \ } else { \ snippet++; \ } \ next_node_snippet(&class_iter, &snippet); #define ERROR \ message(G_LOG_LEVEL_CRITICAL, "Element <%s:%s> was not expected at this location inside element <%s>. " \ "Please ensure the XML correctly follows XML schema", \ (t->ns == NULL) ? "" : ((t->ns->prefix == NULL)? (char*)t->ns->href : (char*)t->ns->prefix), \ t->name, \ xmlnode->name); \ rc = 1; \ goto cleanup; /* Find a matching snippet */ while (class_iter && snippet) { gboolean mandatory = is_snippet_mandatory(snippet); gboolean multiple = is_snippet_multiple(snippet); if ((match = node_match_snippet(xmlnode, t, snippet))) { matched_snippet = snippet; class = class_iter->data; g_type = G_TYPE_FROM_CLASS(class); value = SNIPPET_STRUCT_MEMBER_P(node, g_type, snippet); list = value; if (! multiple || (snippet->type & SNIPPET_JUMP_ON_MATCH)) { ADVANCE_MATCH; } break; } else { if (mandatory) { break; } else { ADVANCE_MISS; } } } if (! match) { ERROR; } #undef ADVANCE #undef ERROR if (matched_snippet->offset || (matched_snippet->type & SNIPPET_PRIVATE)) { switch (matched_snippet->type & 0xff) { case SNIPPET_LIST_NODES: case SNIPPET_NODE: subnode = lasso_node_new_from_xmlNode_with_type(t, matched_snippet->class_name); if (subnode == NULL) { message(G_LOG_LEVEL_CRITICAL, "Failed to create LassoNode from XML node"); } else { if (is_snippet_type(matched_snippet, SNIPPET_NODE)) { lasso_assign_new_gobject(*(LassoNode**)value, subnode); } else { lasso_list_add_new_gobject(*list, subnode); } } break; case SNIPPET_NODE_IN_CHILD: first_child = xmlSecGetNextElementNode(t->children); if (first_child) { subnode = lasso_node_new_from_xmlNode_with_type(first_child, matched_snippet->class_name); lasso_assign_new_gobject(*(LassoNode**)value, subnode); } break; case SNIPPET_XMLNODE: lasso_assign_xml_node(*(xmlNode**)value, t); break; case SNIPPET_LIST_XMLNODES: case SNIPPET_EXTENSION: lasso_list_add_xml_node(*list, t); break; case SNIPPET_CONTENT: case SNIPPET_LIST_CONTENT: content = xmlNodeGetContent(t); if (is_snippet_type(matched_snippet, SNIPPET_CONTENT)) { snippet_set_value(node, class, matched_snippet, content); } else { /* only list of string-like xsd:type supported */ lasso_list_add_string(*list, (char*)content); } lasso_release_xml_string(content); break; case SNIPPET_SIGNATURE: /* We ignore it */ break; default: g_assert_not_reached(); } } /* When creating a new LassoNode and option KEEP_XMLNODE is present, * we attached the xmlNode to the LassoNode */ if (subnode && (matched_snippet->type & SNIPPET_KEEP_XMLNODE)) { lasso_node_set_original_xmlnode(subnode, t); } } else { g_assert_not_reached(); } } if (t) { /* t is an ELEMENT that dont match any snippet, when taken in order */ if (snippet_any && is_snippet_type(snippet_any, SNIPPET_LIST_XMLNODES)) { value = SNIPPET_STRUCT_MEMBER_P(node, g_type_any, snippet_any); GList **list = value; for (; t; t = t->next) { lasso_list_add_xml_node(*list, t); } } else if (snippet_any && is_snippet_type(snippet_any, SNIPPET_LIST_NODES)) { value = SNIPPET_STRUCT_MEMBER_P(node, g_type_any, snippet_any); GList **list = value; for (; t; t = t->next) { LassoNode *subnode = NULL; if (t->type == XML_TEXT_NODE && (snippet_any->type & SNIPPET_ALLOW_TEXT)) { lasso_list_add_new_gobject(*list, lasso_node_new_from_xmlNode_with_type(t, "LassoMiscTextNode")); } else if (t->type == XML_ELEMENT_NODE) { subnode = lasso_node_new_from_xmlNode_with_type(t, snippet_any->class_name); if (subnode && (snippet_any->type & SNIPPET_KEEP_XMLNODE)) { lasso_node_set_original_xmlnode(subnode, t); } if (! subnode) { subnode = (LassoNode*) lasso_misc_text_node_new_with_xml_node(t); } lasso_list_add_new_gobject(*list, subnode); } } } else if (snippet_any) { g_assert_not_reached(); } else { for (; t; t = t->next) { if (t->type == XML_ELEMENT_NODE) { critical("lasso_node_impl_init_from_xml: Cannot match " "element {%s}%s with a snippet of " "class %s", t->ns ? t->ns->href : NULL, t->name, g_type_name(G_TYPE_FROM_INSTANCE(node))); rc = 1; goto cleanup; } } } } /* Collect namespaces on the current node */ if (snippet_collect_namespaces) { void *value = SNIPPET_STRUCT_MEMBER_P(node, g_type_collect_namespaces, snippet_collect_namespaces); _lasso_node_collect_namespaces(value, xmlnode); } /* Collect signature parameters */ { LassoSignatureMethod method = 0; xmlChar *private_key = NULL; xmlChar *private_key_password = NULL; xmlChar *certificate = NULL; LassoSignatureContext signature_context = LASSO_SIGNATURE_CONTEXT_NONE; while (snippet_signature) { int what; if (! lasso_get_integer_attribute(xmlnode, LASSO_SIGNATURE_METHOD_ATTRIBUTE, BAD_CAST LASSO_LIB_HREF, &what, lasso_get_min_signature_method(), LASSO_SIGNATURE_METHOD_LAST)) break; method = what; if (! lasso_get_integer_attribute(xmlnode, LASSO_SIGNATURE_METHOD_ATTRIBUTE, BAD_CAST LASSO_LIB_HREF, &what, LASSO_SIGNATURE_TYPE_NONE+1, LASSO_SIGNATURE_TYPE_LAST)) break; private_key_password = xmlGetNsProp(xmlnode, LASSO_PRIVATE_KEY_PASSWORD_ATTRIBUTE, BAD_CAST LASSO_LIB_HREF); if (! private_key) break; private_key = xmlGetNsProp(xmlnode, LASSO_PRIVATE_KEY_ATTRIBUTE, BAD_CAST LASSO_LIB_HREF); certificate = xmlGetNsProp(xmlnode, LASSO_CERTIFICATE_ATTRIBUTE, BAD_CAST LASSO_LIB_HREF); signature_context.signature_method = method; signature_context.signature_key = lasso_xmlsec_load_private_key((char*) private_key, (char*) private_key_password, method, (char*) certificate); lasso_node_set_signature(node, signature_context); break; } lasso_release_xml_string(private_key); lasso_release_xml_string(private_key_password); lasso_release_xml_string(certificate); } cleanup: lasso_release_slist(class_list); message(LOG_LEVEL_XML_DEBUG, "lasso_node_impl_init_from_xml rc=%d", xmlnode->name, rc); return rc; } #undef trace_snippet /** * lasso_node_remove_signature: * @node: a #LassoNode object * * Remove any signature setup on this node. */ void lasso_node_remove_signature(LassoNode *node) { LassoNodeClass *klass; if (! LASSO_IS_NODE(node)) return; klass = LASSO_NODE_GET_CLASS(node); /* follow the class parenting chain */ while (klass && LASSO_IS_NODE_CLASS(klass)) { if (klass && klass->node_data && klass->node_data->sign_type_offset != 0) { G_STRUCT_MEMBER(LassoSignatureType, node, klass->node_data->sign_type_offset) = LASSO_SIGNATURE_TYPE_NONE; } klass = g_type_class_peek_parent(klass); } lasso_node_set_signature(node, LASSO_SIGNATURE_CONTEXT_NONE); } /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static void _xmlnode_add_custom_namespace(const char *prefix, const char *href, xmlNode *xmlnode) { xmlNs *existing = NULL; existing = xmlSearchNs(NULL, xmlnode, BAD_CAST prefix); if (existing) { if (lasso_strisnotequal((char *)existing->href,href)) { message(G_LOG_LEVEL_CRITICAL, "Cannot add namespace %s='%s' to node %s, " "namespace already exists with another href", prefix, href, (char*)xmlnode->name); } return; } xmlNewNs(xmlnode, BAD_CAST href, BAD_CAST prefix); } static char* lasso_node_impl_build_query(LassoNode *node) { return lasso_node_build_query_from_snippets(node); } static xmlNode* lasso_node_impl_get_xmlNode(LassoNode *node, gboolean lasso_dump) { LassoNodeClass *class = LASSO_NODE_GET_CLASS(node); LassoNodeClass *version_class = NULL; xmlNode *xmlnode; xmlNs *ns = NULL; GSList *list_classes = NULL, *iter_classes = NULL; LassoNode *value_node; struct XmlSnippet *version_snippet; struct _CustomElement *custom_element; LassoNodeClass *xsi_sub_type_data_class = NULL; LassoNodeClass *node_name_class = class; while (node_name_class->node_data->xsi_sub_type) { node_name_class= g_type_class_peek_parent(node_name_class); } if (node_name_class != class) { xsi_sub_type_data_class = class; } g_assert(node_name_class && node_name_class->node_data && node_name_class->node_data->node_name); /* Create node in its namespace */ xmlnode = xmlNewNode(NULL, (xmlChar*)node_name_class->node_data->node_name); if (node_name_class->node_data->ns) { ns = get_or_define_ns(xmlnode, node_name_class->node_data->ns->href, node_name_class->node_data->ns->prefix); xmlSetNs(xmlnode, ns); } /* If subtype, set an xsi:type attribute */ if (xsi_sub_type_data_class) { set_xsi_type(xmlnode, xsi_sub_type_data_class->node_data->ns->prefix, xsi_sub_type_data_class->node_data->ns->href, BAD_CAST xsi_sub_type_data_class->node_data->node_name); } custom_element = _lasso_node_get_custom_element(node); /* collect all classes in reverse order */ while (class && LASSO_IS_NODE_CLASS(class)) { if (class->node_data && class->node_data->snippets) list_classes = g_slist_prepend(list_classes, class); class = g_type_class_peek_parent(class); } /* set a custom namespace if one is found */ if (custom_element != NULL) { if (custom_element->href) { xmlChar *prefix = BAD_CAST (custom_element->prefix); xmlNs *ns = NULL, *oldns = NULL; oldns = xmlSearchNs(NULL, xmlnode, prefix); if (prefix && oldns) { prefix = NULL; } // remove existing default namespace if (prefix == NULL) { xmlNs *cur = xmlnode->nsDef, *last = NULL; while (cur) { if (cur->prefix == NULL) { if (last) { last->next = cur->next; } else { xmlnode->nsDef = cur->next; } xmlFreeNs(cur); } last = cur; cur = cur->next; } } ns = xmlNewNs(xmlnode, (xmlChar*)custom_element->href, (xmlChar*)custom_element->prefix); /* skip the base class namespace, it is replaced by the custom one */ xmlSetNs(xmlnode, ns); } if (custom_element->nodename) { xmlNodeSetName(xmlnode, BAD_CAST (custom_element->nodename)); } g_hash_table_foreach(custom_element->namespaces, (GHFunc)_xmlnode_add_custom_namespace, xmlnode); } for (iter_classes = list_classes; iter_classes; iter_classes = g_slist_next(iter_classes)) { class = iter_classes->data; lasso_node_build_xmlNode_from_snippets(node, (LassoNodeClass*)class, xmlnode, class->node_data->snippets, lasso_dump); } xmlCleanNs(xmlnode); /* backward compatibility with Liberty ID-FF 1.1; */ if (find_path(node, "MajorVersion", &value_node, &version_class, &version_snippet) == TRUE) { int *value; int major_version, minor_version; value = SNIPPET_STRUCT_MEMBER_P(value_node, G_TYPE_FROM_CLASS(version_class), version_snippet); major_version = *value; if (find_path(node, "MinorVersion", &value_node, &version_class, &version_snippet) == TRUE) { value = SNIPPET_STRUCT_MEMBER_P(value_node, G_TYPE_FROM_CLASS(version_class), version_snippet); minor_version = *value; } else { minor_version = 0; } if (strcmp((char*)xmlnode->ns->href, LASSO_LIB_HREF) == 0) { if (major_version == 1 && minor_version == 0) { xmlFree((xmlChar*)xmlnode->ns->href); /* warning: discard const */ xmlnode->ns->href = xmlStrdup((xmlChar*) "http://projectliberty.org/schemas/core/2002/12"); } } } g_slist_free(list_classes); return xmlnode; } /*****************************************************************************/ /* overridden parent class methods */ /*****************************************************************************/ static GObjectClass *parent_class = NULL; static void lasso_node_dispose(GObject *object) { LassoNodeClass *class; struct XmlSnippet *snippet; SnippetType type; if (lasso_flag_memory_debug == TRUE) { fprintf(stderr, "dispose of %s (at %p)\n", G_OBJECT_TYPE_NAME(object), object); } class = LASSO_NODE_GET_CLASS(object); while (class && LASSO_IS_NODE_CLASS(class) && class->node_data) { for (snippet = class->node_data->snippets; snippet && snippet->name; snippet++) { void **value = SNIPPET_STRUCT_MEMBER_P(object, G_TYPE_FROM_CLASS(class), snippet); type = snippet->type & 0xff; if (! snippet->offset && ! (snippet->type & SNIPPET_PRIVATE)) continue; if (snippet->type & SNIPPET_BOOLEAN) continue; if (snippet->type & SNIPPET_INTEGER) continue; if (*value == NULL) continue; if (lasso_flag_memory_debug == TRUE) { fprintf(stderr, " freeing %s/%s (at %p)\n", G_OBJECT_TYPE_NAME(object), snippet->name, *value); } switch (type) { case SNIPPET_NODE: case SNIPPET_NODE_IN_CHILD: lasso_release_gobject(*value); break; case SNIPPET_XMLNODE: xmlFreeNode(*value); break; case SNIPPET_LIST_NODES: lasso_release_list_of_gobjects((*(GList**)value)); break; case SNIPPET_EXTENSION: case SNIPPET_LIST_XMLNODES: lasso_release_list_of_xml_node(*(GList**)value); break; case SNIPPET_LIST_CONTENT: lasso_release_list_of_strings(*(GList**)value); break; case SNIPPET_CONTENT: case SNIPPET_TEXT_CHILD: case SNIPPET_ATTRIBUTE: { if (snippet->type & SNIPPET_ANY) { if (*value) { lasso_release_ghashtable(*value); } } else { lasso_release_string(*(char**)value); } } break; case SNIPPET_SIGNATURE: break; /* no real element here */ case SNIPPET_COLLECT_NAMESPACES: if (*value) { lasso_release_ghashtable(*value); } break; default: fprintf(stderr, "%d\n", type); g_assert_not_reached(); } if (type != SNIPPET_SIGNATURE) { /* Signature snippet is not something to free, * so don't set the value to NULL */ *value = NULL; } } class = g_type_class_peek_parent(class); } parent_class->dispose(object); } /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static gboolean init_from_query(LassoNode *node, char **query_fields) { return lasso_node_init_from_query_fields(node, query_fields); } static void class_init(LassoNodeClass *class, void *unused G_GNUC_UNUSED) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); parent_class = g_type_class_peek_parent(class); /* virtual public methods */ class->destroy = lasso_node_impl_destroy; class->init_from_query = init_from_query; class->init_from_xml = lasso_node_impl_init_from_xml; /* virtual private methods */ class->build_query = lasso_node_impl_build_query; class->get_xmlNode = lasso_node_impl_get_xmlNode; /* override */ gobject_class->dispose = lasso_node_dispose; original_xmlnode_quark = g_quark_from_static_string("lasso_original_xmlnode"); custom_element_quark = g_quark_from_static_string("lasso_custom_element"); class->node_data = NULL; } static void base_class_finalize(LassoNodeClass *class) { if (class->node_data) { LassoNodeClassData *data = class->node_data; if (data->ns) { xmlFreeNs(data->ns); } if (data->node_name) { lasso_release(data->node_name); } lasso_release(class->node_data); class->node_data = NULL; } } GType lasso_node_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoNodeClass), NULL, (GBaseFinalizeFunc) base_class_finalize, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoNode), 0, NULL, NULL, }; this_type = g_type_register_static(G_TYPE_OBJECT , "LassoNode", &this_info, 0); } return this_type; } /** * lasso_node_new: * * Creates a new #LassoNode. * * Return value: a newly created #LassoNode object **/ LassoNode* lasso_node_new() { return g_object_new(LASSO_TYPE_NODE, NULL); } /** * lasso_node_new_from_dump: * @dump: XML object dump * * Restores the @dump to a new #LassoNode subclass. * * Return value: a newly created object; or NULL if an error occured. **/ LassoNode* lasso_node_new_from_dump(const char *dump) { LassoNode *node; xmlDoc *doc; if (dump == NULL) return NULL; doc = lasso_xml_parse_memory(dump, strlen(dump)); if (doc == NULL) return NULL; node = lasso_node_new_from_xmlNode(xmlDocGetRootElement(doc)); lasso_release_doc(doc); return node; } /** * lasso_node_new_from_soap: * @soap: the SOAP message * * Parses SOAP message and creates a new Lasso object with the right class. * * Return value: node if success; NULL otherwise **/ LassoNode* lasso_node_new_from_soap(const char *soap) { xmlDoc *doc; xmlNode *xmlnode; LassoNode *node = NULL; doc = lasso_xml_parse_memory(soap, strlen(soap)); if (doc == NULL) { return NULL; } xmlnode = lasso_xml_get_soap_content(xmlDocGetRootElement(doc)); if (xmlnode == NULL) { return NULL; } node = lasso_node_new_from_xmlNode(xmlnode); lasso_release_doc(doc); return node; } /* How finding a typename from an xmlNode works ? * * There is three way to get to a typename: * 1. by an xsi:type QName attribute, that we resolve * 2. by constructing a QName from the namespace of the xsi:type and the name of the node * 3. by resolving the QName of the node * * To resolve a typename you must map the QName using the default registry object, or use * prefix_from_href_and_nodename() to mat the QName to a prefix used to build the typename with this * template: typename = "Lasso" + prefix + name_part(QName). * * The resolving algorithm is in the function _type_name_from_href_and_nodename(). * * The prefix extraction in prefix_from_href_and_nodename(). * */ static const char * prefix_from_href_and_nodename(const xmlChar *href, G_GNUC_UNUSED const xmlChar *nodename) { char *prefix = NULL; if (strcmp((char*)href, LASSO_LASSO_HREF) == 0) prefix = ""; else if (strcmp((char*)href, LASSO_SAML_ASSERTION_HREF) == 0) prefix = "Saml"; else if (strcmp((char*)href, LASSO_SAML_PROTOCOL_HREF) == 0) prefix = "Samlp"; else if (strcmp((char*)href, LASSO_LIB_HREF) == 0) prefix = "Lib"; else if (strcmp((char*)href, LASSO_SAML2_ASSERTION_HREF) == 0) prefix = "Saml2"; else if (strcmp((char*)href, LASSO_SAML2_PROTOCOL_HREF) == 0) prefix = "Samlp2"; else if (strcmp((char*)href, LASSO_ECP_HREF) == 0) prefix = "Ecp"; else if (strcmp((char*)href, LASSO_PAOS_HREF) == 0) prefix = "Paos"; else if (strcmp((char*)href, LASSO_SOAP_ENV_HREF) == 0) prefix = "Soap"; else if (strcmp((char*)href, LASSO_DS_HREF) == 0) prefix = "Ds"; return prefix; } /* * _type_name_from_href_and_nodename: * @href: the href part of a QName * @nodename: the name part of a QName * * Return value: a typename string if one if found that exists, NULL otherwise. */ static char* _type_name_from_href_and_nodename(char *href, char *nodename) { const char *prefix = prefix_from_href_and_nodename(BAD_CAST (href), BAD_CAST (nodename)); char *typename = NULL; if (!href || !nodename) return NULL; /* FIXME: hardcoded mappings */ if (prefix != NULL && strcmp(prefix, "Soap") == 0 && strcmp(nodename, "detail") == 0) { typename = g_strdup("LassoSoapDetail"); } else { /* first try with registered mappings */ const char *ctypename = lasso_registry_default_get_mapping(href, nodename, LASSO_LASSO_HREF); if (ctypename) { typename = g_strdup(ctypename); } /* finally try the default behaviour */ if (prefix != NULL && typename == NULL) { typename = g_strdup_printf("Lasso%s%s", prefix, nodename); } } /* Does it really exist ? */ if (typename && g_type_from_name (typename) == 0) { lasso_release_string(typename); } return typename; } /** * _lasso_node_new_from_xmlNode: * @node: an xmlNode * * Builds a new #LassoNode from an xmlNode. * * Return value: a new node **/ static LassoNode* _lasso_node_new_from_xmlNode(xmlNode *xmlnode) { char *typename = NULL; xmlChar *xsitype = NULL; LassoNode *node = NULL; gboolean fromXsi = FALSE; xsitype = xmlGetNsProp(xmlnode, (xmlChar*)"type", (xmlChar*)LASSO_XSI_HREF); if (xsitype) { xmlChar *xmlPrefix, *separator; xmlNsPtr xsiNs = NULL; char *xsiNodeName = NULL; /** Honor xsi:type */ xmlPrefix = (xmlChar*)xsitype; separator = (xmlChar*)strchr((char*)xsitype, ':'); if (separator != NULL) { xmlPrefix = (xmlChar*)g_strndup((char*)xmlPrefix, (size_t)(separator - xmlPrefix)); xsiNs = xmlSearchNs(NULL, xmlnode, xmlPrefix); if (xsiNs != NULL) { xsiNodeName = g_strdup((char*)(separator+1)); if (strcmp((char*)xsiNs->href, LASSO_LASSO_HREF) == 0) { typename = g_strdup(xsiNodeName); } } lasso_release(xmlPrefix); } if (! typename && xsiNs && xsiNodeName) { typename = _type_name_from_href_and_nodename ((char*)xsiNs->href, xsiNodeName); } if (! typename && xsiNs) { typename = _type_name_from_href_and_nodename ((char*)xsiNs->href, (char*)xmlnode->name); } lasso_release_xml_string(xsitype); if (xsiNodeName) lasso_release_string(xsiNodeName); if (typename) fromXsi = TRUE; } if (typename == NULL && xmlnode->ns && xmlnode->ns->href) { typename = _type_name_from_href_and_nodename ((char*)xmlnode->ns->href, (char*)xmlnode->name); } if (typename) { node = lasso_node_new_from_xmlNode_with_type(xmlnode, typename); } if (! node) { goto cleanup; } if (! fromXsi) { /* if the typename was not obtained via xsi:type but through mapping of the element * name then keep the element name */ if (LASSO_NODE_GET_CLASS(node)->node_data && LASSO_NODE_GET_CLASS(node)->node_data->node_name && lasso_strisnotequal((char*)xmlnode->name, LASSO_NODE_GET_CLASS(node)->node_data->node_name)) { lasso_node_set_custom_nodename(node, (char*)xmlnode->name); } if (xmlnode->ns && (LASSO_NODE_GET_CLASS(node)->node_data == NULL || LASSO_NODE_GET_CLASS(node)->node_data->ns == NULL || lasso_xmlstrisnotequal(xmlnode->ns->href, LASSO_NODE_GET_CLASS(node)->node_data->ns->href))) { lasso_node_set_custom_namespace(node, (char*)xmlnode->ns->prefix, (char*)xmlnode->ns->href); } } cleanup: lasso_release(typename); return node; } /** * lasso_node_new_from_xmlNode: * @node: an xmlNode * * Builds a new #LassoNode from an xmlNode. * * Return value: a new node **/ LassoNode* lasso_node_new_from_xmlNode(xmlNode *xmlnode) { if (xmlnode == NULL || xmlnode->ns == NULL) { message(G_LOG_LEVEL_CRITICAL, "Unable to build a LassoNode from a xmlNode"); return NULL; } return _lasso_node_new_from_xmlNode(xmlnode); } static LassoNode* lasso_node_new_from_xmlNode_with_type(xmlNode *xmlnode, char *typename) { GType gtype; LassoNode *node; int rc = 0; message(LOG_LEVEL_XML_DEBUG, "Processing node '%s' with type '%s'", xmlnode->name, typename); if (typename == NULL) { return _lasso_node_new_from_xmlNode(xmlnode); /* will auto-detect */ } gtype = g_type_from_name(typename); if (gtype == 0) { message(G_LOG_LEVEL_CRITICAL, "Unable to get g_type from name '%s'", typename); return NULL; } node = g_object_new(gtype, NULL); if (lasso_flag_memory_debug == TRUE) { fprintf(stderr, "allocation of %s (for xmlNode %p) : %p\n", g_type_name(gtype), xmlnode, node); } rc = lasso_node_init_from_xml(node, xmlnode); if (rc) { message(G_LOG_LEVEL_CRITICAL, "Lasso node initialization failed for node '%s', type '%s': error %d", xmlnode->name, typename, rc); lasso_node_destroy(node); return NULL; } return node; } static gboolean is_base64(const char *message) { const char *c; c = message; while (*c != 0 && (isalnum((int)*c) || *c == '+' || *c == '/' || *c == '\n' || *c == '\r')) c++; while (*c == '=' || *c == '\n' || *c == '\r') c++; /* trailing = */ if (*c == 0) return TRUE; return FALSE; } /** * lasso_node_init_from_message_with_format: * @node: a #LassoNode (or derived class) * @message: a Liberty message * @constraint: LASSO_MESSAGE_FORMAT_UNKNOWN or the format the message must be in * @doc_out: a pointer to store the resulting #xmlDoc structure * @node_out: a pointer to store the resulting content #xmlNode * * Parses @message and initialiazes @node fields with data from it. Message type may be base64, * SOAP, XML or query string, correct type is found automatically if contraint is * LASSO_MESSAGE_FORMAT_UNKNOWN or is limited to the value given. * If the format is one of LASSO_MESSAGE_FORMAT_XML or LASSO_MESSAGE_FORMAT_XML or * LASSO_MESSAGE_FORMAT_BASE64 the resulting #xmlDoc and #xmlNode of the message can be retrieved. * * Return value: a #LassoMessageFormat value. **/ LassoMessageFormat lasso_node_init_from_message_with_format(LassoNode *node, const char *message, LassoMessageFormat constraint, xmlDoc **doc_out, xmlNode **root_out) { char *decoded_msg = NULL; int decoded_msg_len = 0; const char *msg = NULL; gboolean b64 = FALSE; LassoMessageFormat rc = LASSO_MESSAGE_FORMAT_ERROR; xmlDoc *doc = NULL; xmlNode *root = NULL; gboolean any = constraint == LASSO_MESSAGE_FORMAT_UNKNOWN; msg = (char*)message; /* BASE64 case */ if (any || constraint == LASSO_MESSAGE_FORMAT_BASE64) { if (message[0] != 0 && is_base64(message)) { if (lasso_base64_decode(message, &decoded_msg, &decoded_msg_len)) { b64 = TRUE; msg = decoded_msg; } else { msg = message; } } } /* XML case */ if (any || constraint == LASSO_MESSAGE_FORMAT_XML || constraint == LASSO_MESSAGE_FORMAT_BASE64 || constraint == LASSO_MESSAGE_FORMAT_SOAP) { if (strchr(msg, '<')) { doc = lasso_xml_parse_memory(msg, strlen(msg)); if (doc == NULL) { rc = LASSO_MESSAGE_FORMAT_UNKNOWN; goto cleanup; } root = xmlDocGetRootElement(doc); if (any || constraint == LASSO_MESSAGE_FORMAT_SOAP) { gboolean is_soap = FALSE; is_soap = lasso_xml_is_soap(root); if (is_soap) { root = lasso_xml_get_soap_content(root); } rc = lasso_node_init_from_xml(node, root); if (rc != 0) { rc = LASSO_MESSAGE_FORMAT_XSCHEMA_ERROR; goto cleanup; } if (is_soap) { rc = LASSO_MESSAGE_FORMAT_SOAP; goto cleanup; } if (b64) { rc = LASSO_MESSAGE_FORMAT_BASE64; goto cleanup; } rc = LASSO_MESSAGE_FORMAT_XML; goto cleanup; } } } /* HTTP query CASE */ if (any || constraint == LASSO_MESSAGE_FORMAT_QUERY) { if (strchr(msg, '&') || strchr(msg, '=')) { /* XXX: detect SAML artifact messages to return a different status code ? */ if (lasso_node_init_from_query(node, msg) == FALSE) { goto cleanup; } rc = LASSO_MESSAGE_FORMAT_QUERY; goto cleanup; } } cleanup: lasso_release_string(decoded_msg); if (doc_out) { *doc_out = doc; if (root_out) { *root_out = root; } } else { lasso_release_doc(doc); } return rc; } /** * lasso_node_init_from_message: * @node: a #LassoNode (or derived class) * @message: a Liberty message * * Parses @message and initialiazes @node fields with data from it. Message * type may be base64, SOAP, XML or query string, correct type is found * automatically. * * Return value: a #LassoMessageFormat value. **/ LassoMessageFormat lasso_node_init_from_message(LassoNode *node, const char *message) { return lasso_node_init_from_message_with_format(node, message, LASSO_MESSAGE_FORMAT_UNKNOWN, NULL, NULL); } /** * lasso_node_class_add_snippets: * @klass: object class * @snippets: array of XmlSnippet (NULL terminated) **/ void lasso_node_class_add_snippets(LassoNodeClass *klass, struct XmlSnippet *snippets) { klass->node_data->snippets = snippets; } /** * lasso_node_class_add_query_snippets: * @klass: object class * @snippets: array of QuerySnippet (NULL terminated) **/ void lasso_node_class_add_query_snippets(LassoNodeClass *klass, struct QuerySnippet *snippets) { klass->node_data->query_snippets = snippets; } /** * lasso_node_class_set_nodename: * @klass: object class * @name: name for element node **/ void lasso_node_class_set_nodename(LassoNodeClass *klass, char *name) { if (klass->node_data->node_name) lasso_release(klass->node_data->node_name); klass->node_data->node_name = g_strdup(name); } /** * lasso_node_class_set_ns: * @klass: object class * @href: namespace uri * @prefix: namespace prefix **/ void lasso_node_class_set_ns(LassoNodeClass *klass, char *href, char *prefix) { if (klass->node_data->ns) xmlFreeNs(klass->node_data->ns); klass->node_data->ns = xmlNewNs(NULL, (xmlChar*)href, (xmlChar*)prefix); } static void snippet_dump_any(gchar *key, gchar *value, xmlNode *xmlnode) { if (! key) return; if (! value) return; /* element tree syntax for setting namespaces */ if (key && key[0] == '{') { char *end = strchr(key, '}'); char *ns_uri; xmlNs *ns; if (! end) { message(G_LOG_LEVEL_WARNING, "Invalid attribute name: %s", key); return; } ns_uri = g_strndup(key+1, end-(key+1)); ns = get_or_define_ns(xmlnode, BAD_CAST ns_uri, NULL); xmlSetNsProp(xmlnode, ns, BAD_CAST &end[1], BAD_CAST value); } else { xmlSetProp(xmlnode, BAD_CAST key, BAD_CAST value); } } static void apply_snippet_ns(struct XmlSnippet *snippet, xmlNode *xmlnode) { xmlNs *ns; if (! xmlnode) return; if (snippet->ns_uri) { if (! xmlnode->ns || !lasso_strisequal((char*)xmlnode->ns->href, (char*)snippet->ns_uri)) { ns = get_or_define_ns(xmlnode, BAD_CAST snippet->ns_uri, BAD_CAST snippet->ns_name); xmlSetNs(xmlnode, ns); } /* If not a any snippet, apply given Name, what about xsi:type ? */ } if (! (snippet->type & SNIPPET_ANY) && ! lasso_strisempty(snippet->name) && lasso_strisnotequal((char*)xmlnode->name, (char*)snippet->name)) xmlNodeSetName(xmlnode, BAD_CAST snippet->name); } static void lasso_node_build_xmlNode_from_snippets(LassoNode *node, LassoNodeClass *class, xmlNode *xmlnode, struct XmlSnippet *snippets, gboolean lasso_dump) { struct XmlSnippet *snippet; GType g_type; xmlNode *t; GList *elem; struct XmlSnippet *snippet_any_attribute = NULL; g_type = G_TYPE_FROM_CLASS(class); snippet = snippets; while (snippet && snippet->name) { void *value = NULL; int int_value = 0; gboolean bool_value = FALSE; char *str = NULL; gboolean optional = snippet->type & SNIPPET_OPTIONAL; gboolean optional_neg = snippet->type & SNIPPET_OPTIONAL_NEG; gboolean multiple = is_snippet_multiple(snippet); if (! snippet->offset && ! (snippet->type & SNIPPET_PRIVATE)) { goto advance; } if (lasso_dump == FALSE && snippet->type & SNIPPET_LASSO_DUMP) { goto advance; } if ((snippet->type & 0xff) == SNIPPET_ATTRIBUTE && (snippet->type & SNIPPET_ANY)) { snippet_any_attribute = snippet; goto advance; } /* special treatment for 1-* list of nodes, without we would serialize them twice */ if (multiple && (snippet->type & SNIPPET_JUMP_ON_MATCH && SNIPPET_JUMP_OFFSET(snippet->type) > 0)) { snippet++; continue; } // convert input type to string if needed if (snippet->type & SNIPPET_INTEGER) { int_value = SNIPPET_STRUCT_MEMBER(int, node, g_type, snippet); if (int_value == 0 && optional) { goto advance; } if (int_value == -1 && optional_neg) { goto advance; } str = g_strdup_printf("%i", int_value); } else if (snippet->type & SNIPPET_BOOLEAN) { bool_value = SNIPPET_STRUCT_MEMBER(gboolean, node, g_type, snippet); if (bool_value == FALSE && optional) { goto advance; } str = bool_value ? "true" : "false"; } else { value = SNIPPET_STRUCT_MEMBER(void *, node, g_type, snippet); if (value == NULL) { goto advance; } str = value; } // output type switch (snippet->type & 0xff) { case SNIPPET_ATTRIBUTE: if (snippet->ns_name) { xmlNsPtr ns; ns = xmlNewNs(xmlnode, (xmlChar*)snippet->ns_uri, (xmlChar*)snippet->ns_name); xmlSetNsProp(xmlnode, ns, (xmlChar*)snippet->name, (xmlChar*)str); } else { xmlSetProp(xmlnode, (xmlChar*)snippet->name, (xmlChar*)str); } break; case SNIPPET_TEXT_CHILD: xmlAddChild(xmlnode, xmlNewText((xmlChar*)str)); break; case SNIPPET_NODE: { xmlNode *t2; t2 = lasso_node_get_xmlNode(LASSO_NODE(value), lasso_dump); apply_snippet_ns(snippet, t2); xmlAddChild(xmlnode, t2); } break; case SNIPPET_CONTENT: xmlNewTextChild(xmlnode, NULL, (xmlChar*)snippet->name, (xmlChar*)str); break; case SNIPPET_NODE_IN_CHILD: t = xmlNewTextChild(xmlnode, NULL, (xmlChar*)snippet->name, NULL); xmlAddChild(t, lasso_node_get_xmlNode( LASSO_NODE(value), lasso_dump)); break; case SNIPPET_LIST_NODES: elem = (GList *)value; while (elem) { xmlNode *subnode = lasso_node_get_xmlNode( LASSO_NODE(elem->data), lasso_dump); if (subnode) { apply_snippet_ns(snippet, subnode); xmlAddChild(xmlnode, subnode); } elem = g_list_next(elem); } break; case SNIPPET_LIST_CONTENT: /* sequence of simple elements (no children, * no attrs, just content) */ elem = (GList *)value; while (elem) { xmlNode *subnode; subnode = xmlNewTextChild(xmlnode, NULL, (xmlChar*)snippet->name, (xmlChar*)(elem->data)); apply_snippet_ns(snippet, subnode); elem = g_list_next(elem); } break; case SNIPPET_LIST_XMLNODES: case SNIPPET_EXTENSION: elem = (GList *)value; while (elem) { xmlAddChild(xmlnode, xmlCopyNode(elem->data, 1)); elem = g_list_next(elem); } break; case SNIPPET_XMLNODE: xmlAddChild(xmlnode, xmlCopyNode((xmlNode *)value, 1)); break; case SNIPPET_SIGNATURE: lasso_node_add_signature_template(node, xmlnode, snippet); break; case SNIPPET_COLLECT_NAMESPACES: break; case SNIPPET_UNUSED1: g_assert_not_reached(); } if (snippet->type & SNIPPET_INTEGER) { lasso_release(str); } advance: if ((snippet->type & SNIPPET_JUMP_ON_MATCH) && SNIPPET_JUMP_OFFSET(snippet->type) > 0 && value) { snippet += SNIPPET_JUMP_OFFSET(snippet->type); } else if (!value && (snippet->type & SNIPPET_JUMP_ON_MISS) && SNIPPET_JUMP_OFFSET(snippet->type) > 0 && value) { snippet += SNIPPET_JUMP_OFFSET(snippet->type); } else { snippet++; } } if (snippet_any_attribute) { GHashTable *value = SNIPPET_STRUCT_MEMBER(GHashTable *, node, g_type, snippet_any_attribute); if (value) { g_hash_table_foreach(value, (GHFunc)snippet_dump_any, xmlnode); } } } static void lasso_node_add_signature_template(LassoNode *node, xmlNode *xmlnode, struct XmlSnippet *snippet_signature) { LassoNodeClass *klass = NULL; LassoNodeClassData *node_data = NULL; LassoSignatureContext context; char *id = NULL; node_data = lasso_legacy_get_signature_node_data(node, &klass); if (! node_data) return; if (node_data->sign_type_offset == 0) return; context = lasso_node_get_signature(node); if (! lasso_validate_signature_context(context)) if (lasso_legacy_extract_and_copy_signature_parameters(node, node_data)) context = lasso_node_get_signature(node); if (snippet_signature->offset) { id = SNIPPET_STRUCT_MEMBER(char *, node, G_TYPE_FROM_CLASS(klass), snippet_signature); } lasso_xmlnode_add_saml2_signature_template(xmlnode, context, id); } static struct XmlSnippet* find_xml_snippet_by_name(LassoNode *node, char *name, LassoNodeClass **class_p) { LassoNodeClass *class; struct XmlSnippet *snippet; class = LASSO_NODE_GET_CLASS(node); while (class && LASSO_IS_NODE_CLASS(class) && class->node_data) { for (snippet = class->node_data->snippets; snippet && snippet->name && strcmp(snippet->name, name) != 0; snippet++) ; if (snippet && snippet->name) { *class_p = class; return snippet; } class = g_type_class_peek_parent(class); } *class_p = NULL; return NULL; } static gboolean find_path(LassoNode *node, char *path, LassoNode **value_node, LassoNodeClass **class_p, struct XmlSnippet **snippet) { char *s, *t; struct XmlSnippet *tsnippet = NULL; LassoNode *tnode = node; *class_p = NULL; s = path; while (s) { t = strchr(s, '/'); if (t) *t = 0; tsnippet = find_xml_snippet_by_name(tnode, s, class_p); if (t) { tnode = SNIPPET_STRUCT_MEMBER(LassoNode *, tnode, G_TYPE_FROM_CLASS(*class_p), tsnippet); if (tnode == NULL) return FALSE; s = t+1; } else { s = NULL; } } if (tsnippet == NULL) return FALSE; *snippet = tsnippet; *value_node = tnode; return TRUE; } static char* get_value_by_path(LassoNode *node, char *path, struct XmlSnippet *xml_snippet) { struct XmlSnippet *snippet; LassoNode *value_node; LassoNodeClass *class; GType g_type; if (find_path(node, path, &value_node, &class, &snippet) != TRUE) return NULL; g_type = G_TYPE_FROM_CLASS(class); *xml_snippet = *snippet; if (snippet->type & SNIPPET_BOOLEAN) { gboolean v = SNIPPET_STRUCT_MEMBER(gboolean, value_node, g_type, snippet); return v ? g_strdup("true") : g_strdup("false"); } else if (snippet->type & SNIPPET_INTEGER) { int v = SNIPPET_STRUCT_MEMBER(int, value_node, g_type, snippet); return g_strdup_printf("%d", v); } else if (snippet->type == SNIPPET_NODE) { LassoNode *value = SNIPPET_STRUCT_MEMBER(LassoNode *, value_node, g_type, snippet); return lasso_node_build_query(value); } else if (snippet->type == SNIPPET_EXTENSION) { /* convert all of the into a string, already * escaped for URI usage */ GList *value = SNIPPET_STRUCT_MEMBER(GList *, value_node, g_type, snippet); xmlChar *s, *s2; GString *result = g_string_new(""); while (value) { xmlNode *t = value->data; xmlNode *c; /* attributes */ #if 0 xmlAttr *a; for (a = t->properties; a; a = a->next) { if (result->len) g_string_append(result, "&"); s = xmlGetProp(t, a->name); g_string_append(result, a->name); g_string_append(result, "="); s2 = lasso_xmlURIEscapeStr(s, NULL); g_string_append(result, s2); xmlFree(s2); xmlFree(s); } #endif /* children (only simple ones and 1-level deep) */ for (c = t->children; c; c = c->next) { if (c->type != XML_ELEMENT_NODE) continue; if (c->children->type != XML_TEXT_NODE) continue; if (c->properties != NULL) continue; if (result->len) g_string_append(result, "&"); g_string_append(result, (char*)c->name); g_string_append(result, "="); s = xmlNodeGetContent(c); s2 = lasso_xmlURIEscapeStr(s, NULL); g_string_append(result, (char*)s2); xmlFree(s2); xmlFree(s); } value = g_list_next(value); } if (result->len == 0) { lasso_release_gstring(result, TRUE); return NULL; } return g_string_free(result, FALSE); } else if (snippet->type == SNIPPET_LIST_CONTENT) { /* not clear in spec; concat values with spaces */ GList *value = SNIPPET_STRUCT_MEMBER(GList *, value_node, g_type, snippet); GString *result = g_string_new(""); while (value) { result = g_string_append(result, (char*)value->data); if (value->next) result = g_string_append(result, " "); value = value->next; } if (result->len == 0) { lasso_release_gstring(result, TRUE); return NULL; } return g_string_free(result, FALSE); } else { char *value = SNIPPET_STRUCT_MEMBER(char *, value_node, g_type, snippet); if (value == NULL) return NULL; return g_strdup(value); } return NULL; } static gboolean set_value_at_path(LassoNode *node, char *path, char *query_value) { struct XmlSnippet *snippet; LassoNode *value_node; LassoNodeClass *class; GType g_type; void *value; if (find_path(node, path, &value_node, &class, &snippet) != TRUE) return FALSE; g_type = G_TYPE_FROM_CLASS(class); value = SNIPPET_STRUCT_MEMBER_P(value_node, g_type, snippet); if (snippet->type & SNIPPET_INTEGER) { int val = atoi(query_value); (*(int*)value) = val; } else if (snippet->type & SNIPPET_BOOLEAN) { int val = (strcmp(query_value, "true") == 0); (*(int*)value) = val; } else if (snippet->type == SNIPPET_NODE) { LassoNode *v = *(LassoNode**)value; if (v == NULL) { message(G_LOG_LEVEL_CRITICAL, "building node from query; unknown subnode"); g_assert_not_reached(); } LASSO_NODE_GET_CLASS(v)->init_from_query(v, &query_value); } else if (snippet->type == SNIPPET_LIST_CONTENT) { char **elems = g_strsplit(query_value, " ", 0); int i; GList *l = NULL; for (i = 0; elems[i]; i++) { l = g_list_append(l, g_strdup(elems[i])); } g_strfreev(elems); (*(GList**)value) = l; } else { (*(char**)value) = g_strdup(query_value); } return TRUE; } gchar* lasso_node_build_query_from_snippets(LassoNode *node) { int i; char path[100]; char *v; GString *s; xmlChar *t; LassoNodeClass *class = LASSO_NODE_GET_CLASS(node); struct QuerySnippet *query_snippets = NULL; struct XmlSnippet xml_snippet; while (class && LASSO_IS_NODE_CLASS(class) && class->node_data) { if (class->node_data && class->node_data->query_snippets) { query_snippets = class->node_data->query_snippets; break; } class = g_type_class_peek_parent(class); } if (query_snippets == NULL) return NULL; s = g_string_sized_new(2000); for (i=0; query_snippets[i].path; i++) { g_strlcpy(path, query_snippets[i].path, 100); v = get_value_by_path(node, path, &xml_snippet); if (v && xml_snippet.type == SNIPPET_EXTENSION) { if (s->len) g_string_append(s, "&"); g_string_append(s, v); lasso_release(v); continue; } if (v) { char *field_name = query_snippets[i].field_name; if (field_name == NULL) field_name = query_snippets[i].path; if (s->len) g_string_append(s, "&"); g_string_append(s, field_name); g_string_append(s, "="); t = lasso_xmlURIEscapeStr((xmlChar*)v, NULL); g_string_append(s, (char*)t); xmlFree(t); } if (v) lasso_release(v); } return g_string_free(s, FALSE); } gboolean lasso_node_init_from_query_fields(LassoNode *node, char **query_fields) { int i, j; char *field, *t; LassoNodeClass *class = LASSO_NODE_GET_CLASS(node); struct QuerySnippet *query_snippets = NULL; gboolean has_extension = FALSE; while (class && LASSO_IS_NODE_CLASS(class) && class->node_data) { if (class->node_data && class->node_data->query_snippets) { query_snippets = class->node_data->query_snippets; break; } class = g_type_class_peek_parent(class); } if (query_snippets == NULL) return FALSE; for (i = 0; (field = query_fields[i]); i++) { t = strchr(field, '='); if (t == NULL) continue; *t = 0; for (j=0; query_snippets[j].path; j++) { char *field_name = query_snippets[j].field_name; char path[100]; g_strlcpy(path, query_snippets[j].path, 100); if (field_name == NULL) field_name = query_snippets[j].path; if (strcmp(field_name, "Extension") == 0) { has_extension = TRUE; continue; } if (strcmp(field, field_name) != 0) continue; set_value_at_path(node, path, t+1); break; } if (query_snippets[j].path == NULL && has_extension && strcmp(field, "SigAlg") != 0 && strcmp(field, "Signature") != 0) { /* got to the end without finding anything; and has * Extension; build it */ struct XmlSnippet *extension_snippet; LassoNode *value_node; LassoNodeClass *class; GList **value; xmlNode *xmlnode, *xmlchild; if (find_path(node, "Extension", &value_node, &class, &extension_snippet) == TRUE) { GType g_type = G_TYPE_FROM_CLASS(class); value = SNIPPET_STRUCT_MEMBER_P(value_node, g_type, extension_snippet); if (*value) { xmlnode = (*value)->data; } else { xmlnode = xmlNewNode(xmlNewNs(NULL, (xmlChar*)LASSO_LIB_HREF, (xmlChar*)LASSO_LIB_PREFIX), (xmlChar*)"Extension"); } xmlchild = xmlNewNode(NULL, (xmlChar*)field); xmlAddChild(xmlchild, xmlNewText((xmlChar*)t+1)); xmlAddChild(xmlnode, xmlchild); if (! *value) *value = g_list_append(*value, xmlnode); } } *t = '='; } return TRUE; } gboolean lasso_node_init_from_saml2_query_fields(LassoNode *node, char **query_fields, G_GNUC_UNUSED char **relay_state) { int i; char *field, *t; char *req = NULL; char *enc = NULL; gboolean rc; for (i=0; (field=query_fields[i]); i++) { t = strchr(field, '='); if (t == NULL) continue; *t = 0; if (strcmp(field, LASSO_SAML2_FIELD_ENCODING) == 0) { enc = t+1; continue; } if (strcmp(field, LASSO_SAML2_FIELD_REQUEST) == 0 || strcmp(field, LASSO_SAML2_FIELD_RESPONSE) == 0) { req = t+1; continue; } } if (enc && strcmp(enc, LASSO_SAML2_DEFLATE_ENCODING) != 0) { /* unknown encoding */ message(G_LOG_LEVEL_CRITICAL, "Unknown URL encoding: %s", enc); return FALSE; } if (req == NULL) { return FALSE; } rc = lasso_node_init_from_deflated_query_part(node, req); if (rc == FALSE) { return rc; } return TRUE; } static void xmlDeclareNs(xmlNode *root_node, xmlNode *node) { xmlNs *ns; xmlNode *t; if (strcmp((char*)node->name, "Signature") == 0) return; for (ns = node->nsDef; ns; ns = ns->next) { if (ns->prefix && strcmp((char*)ns->prefix, "xsi") != 0) { xmlNewNs(root_node, ns->href, ns->prefix); } } for (t = node->children; t; t = t->next) { if (t->type == XML_ELEMENT_NODE) { xmlDeclareNs(root_node, t); } } } static inline int sameNs(xmlNs *ns1, xmlNs *ns2) { /* this checks ns->prefix instead of ns->href so it is possible to * merge down to an earlier version of liberty namespace */ return (ns1 == NULL && ns2 == NULL) || ( ns1 && ns2 && ns1->prefix && ns2->prefix && strcmp((char*)ns1->prefix, (char*)ns2->prefix) == 0 && strcmp((char*)ns1->href, (char*)ns2->href) == 0); } static void xmlPropUseNsDef(xmlNs *ns, xmlNode *node) { xmlAttr *attr; for (attr = node->properties; attr; attr = attr->next) { if (sameNs(ns, attr->ns)) { attr->ns = ns; } } } static void xmlUseNsDef(xmlNs *ns, xmlNode *node) { xmlNode *t; xmlNs *ns2; xmlNs *ns3 = NULL; xmlPropUseNsDef(ns, node); if (sameNs(ns, node->ns)) { node->ns = ns; } for (t = node->children; t; t = t->next) { if (t->type == XML_ELEMENT_NODE) xmlUseNsDef(ns, t); } if (sameNs(node->nsDef, ns)) { ns3 = node->nsDef; node->nsDef = node->nsDef->next; xmlFreeNs(ns3); } else if (node->nsDef) { for (ns2 = node->nsDef; ns2->next; ns2 = ns2->next) { if (sameNs(ns2->next, ns)) { ns3 = ns2->next; ns2->next = ns2->next->next; xmlFreeNs(ns3); if (ns2->next == NULL) break; } } } } /** * xmlCleanNs * @root_node: the root #xmlNode where to start the cleaning. * * xmlCleanNs removes duplicate xml namespace declarations and merge them on * the @root_node. **/ void xmlCleanNs(xmlNode *root_node) { xmlNs *ns; xmlNode *t; for (t = root_node->children; t; t = t->next) if (t->type == XML_ELEMENT_NODE) xmlDeclareNs(root_node, t); for (ns = root_node->nsDef; ns; ns = ns->next) { for (t = root_node->children; t; t = t->next) if (t->type == XML_ELEMENT_NODE) xmlUseNsDef(ns, t); } } void xml_insure_namespace(xmlNode *xmlnode, xmlNs *ns, gboolean force, gchar *ns_href, gchar *ns_prefix) { xmlNode *t = xmlnode->children; if (ns == NULL) { for (ns = xmlnode->nsDef; ns; ns = ns->next) { if (ns->href && lasso_strisequal((gchar *)ns->href,ns_href)) { break; } } if (ns == NULL) { ns = xmlNewNs(xmlnode, (xmlChar*)ns_href, (xmlChar*)ns_prefix); } } xmlSetNs(xmlnode, ns); while (t) { if (t->type == XML_ELEMENT_NODE && (force == TRUE || t->ns == NULL)) { xml_insure_namespace(t, ns, force, NULL, NULL); } t = t->next; } } /** * lasso_node_get_xmlnode_for_any_type: * @node: a #LassoNode. * @xmlnode: the #xmlNode returned. * * Return value: a xmlNode completed with the content of the produced by the get_xmlNode virtual * method of the parent class. */ xmlNode* lasso_node_get_xmlnode_for_any_type(LassoNode *node, xmlNode *cur) { xmlNode *original_xmlnode; original_xmlnode = lasso_node_get_original_xmlnode(node); if (cur) { if (original_xmlnode) { xmlNode *children = xmlCopyNodeList(original_xmlnode->children); xmlAttr *attrs = xmlCopyPropList(cur, original_xmlnode->properties); if (cur->properties == NULL) { cur->properties = attrs; } else { xmlAttr *it = cur->properties; while (it->next) { it = it->next; } it->next = attrs; } xmlAddChildList(cur, children); return cur; } else { return cur; } } else { if (original_xmlnode) { return xmlCopyNode(original_xmlnode, 1); } else { return cur; } } } /** * lasso_node_get_name: * @node: a #LassoNode * * Return the XML element name for this object, the one that would be used in the XML dump of this * object. * * Return value: the name of the object, the value must not be stored. */ const char* lasso_node_get_name(LassoNode *node) { struct _CustomElement *custom_element; LassoNodeClass *klass; g_return_val_if_fail(LASSO_IS_NODE(node), NULL); custom_element = _lasso_node_get_custom_element(node); if (custom_element && custom_element->nodename) { return custom_element->nodename; } klass = LASSO_NODE_GET_CLASS(node); return klass->node_data->node_name; } /** * lasso_node_get_name: * @node: a #LassoNode * * Return the XML element name for this object, the one that would be used in the XML dump of this * object. * * Return value: the name of the object, the value must not be stored. */ const char* lasso_node_get_namespace(LassoNode *node) { struct _CustomElement *custom_element; LassoNodeClass *klass; g_return_val_if_fail(LASSO_IS_NODE(node), NULL); custom_element = _lasso_node_get_custom_element(node); if (custom_element && custom_element->nodename) { return custom_element->href; } klass = LASSO_NODE_GET_CLASS(node); if (klass->node_data && klass->node_data->ns) return (const char*)klass->node_data->ns->href; return NULL; } /** * lasso_node_export_to_saml2_query: * @node: the #LassoNode object to pass as a query * @param_name: the key value for the query string parameter * @url:(allow-none): an optional URL to prepend to the query string * @key:(allow-none): a #LassoKey object * * Export a node as signed query string, the node must support serialization as a query. * * Return value: an HTTP URL or query string if successful, NULL otherwise. */ char* lasso_node_export_to_saml2_query(LassoNode *node, const char *param_name, const char *url, LassoKey *key) { char *value = NULL, *query = NULL, *signed_query = NULL, *result = NULL; xmlChar *encoded_param = NULL; value = lasso_node_build_deflated_query(node); if (! value) goto cleanup; encoded_param = lasso_xmlURIEscapeStr(BAD_CAST param_name, NULL); if (! encoded_param) goto cleanup; query = g_strdup_printf("%s=%s", encoded_param, value); if (! query) goto cleanup; if (LASSO_IS_KEY(key)) { signed_query = lasso_key_query_sign(key, query); } else { lasso_transfer_string(signed_query, query); } if (! signed_query) goto cleanup; if (url) { result = lasso_concat_url_query(url, signed_query); } else { lasso_transfer_string(result, signed_query); } cleanup: lasso_release_string(value); lasso_release_xml_string(encoded_param); lasso_release_string(query); lasso_release_string(signed_query); return result; } /** * lasso_node_new_from_saml2_query: * @url_or_qs: an URL containing a query string or a query string only * @param_name: the key value for the query string parameter to extract as a #LassoNode. * @key:(allow-none): a #LassoKey object * * Verify the signature on a SAML-2 encoded query string and return the encoded node. * * Return value: a newly build #LassoNode if successful, NULL otherwise. */ LassoNode* lasso_node_new_from_saml2_query(const char *url_or_qs, const char *param_name, LassoKey *key) { char *needle = NULL; LassoNode *result = NULL; if (! url_or_qs || ! param_name) return NULL; needle = strchr(url_or_qs, '?'); if (needle) { url_or_qs = (const char*)(needle+1); } if (key) { goto_cleanup_if_fail(lasso_key_query_verify(key, url_or_qs) == 0); } cleanup: return result; } LassoSignatureMethod lasso_get_default_signature_method() { return default_signature_method; } void lasso_set_default_signature_method(LassoSignatureMethod meth) { default_signature_method = meth; } LassoSignatureMethod lasso_get_min_signature_method() { return min_signature_method; } void lasso_set_min_signature_method(LassoSignatureMethod meth) { min_signature_method = meth; } LassoKeyEncryptionMethod lasso_parse_key_encryption_method(char *str) { if (lasso_strisequal(str, "rsa-pkcs1")) { return LASSO_KEY_ENCRYPTION_METHOD_PKCS1; } else if (lasso_strisequal(str, "rsa-oaep")) { return LASSO_KEY_ENCRYPTION_METHOD_OAEP; } return LASSO_KEY_ENCRYPTION_METHOD_INVALID; } LassoKeyEncryptionMethod lasso_get_default_key_encryption_method() { return default_encryption_key_encryption_method; } void lasso_set_default_key_encryption_method(LassoKeyEncryptionMethod method) { default_encryption_key_encryption_method = method; } lasso-2.8.2/lasso/xml/PaxHeaders/saml_authority_binding.c0000644000000000000000000000013214114336625020552 xustar0030 mtime=1630649749.874437517 30 atime=1678814206.925307417 30 ctime=1678814320.357949597 lasso-2.8.2/lasso/xml/saml_authority_binding.c0000644000175000017500000000670014114336625024025 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "private.h" #include "saml_authority_binding.h" /** * SECTION:saml_authority_binding * @short_description: <saml:AuthorityBinding> * *
Schema fragment for saml:AuthorityBinding * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "AuthorityKind", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSamlAuthorityBinding, AuthorityKind), NULL, NULL, NULL}, { "Location", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSamlAuthorityBinding, Location), NULL, NULL, NULL}, { "Binding", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSamlAuthorityBinding, Binding), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSamlAuthorityBindingClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "AuthorityBinding"); lasso_node_class_set_ns(nclass, LASSO_SAML_ASSERTION_HREF, LASSO_SAML_ASSERTION_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_saml_authority_binding_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSamlAuthorityBindingClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSamlAuthorityBinding), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoSamlAuthorityBinding", &this_info, 0); } return this_type; } /** * lasso_saml_authority_binding_new: * * Creates a new #LassoSamlAuthorityBinding object. * * Return value: a newly created #LassoSamlAuthorityBinding object **/ LassoNode* lasso_saml_authority_binding_new() { return g_object_new(LASSO_TYPE_SAML_AUTHORITY_BINDING, NULL); } lasso-2.8.2/lasso/xml/PaxHeaders/lib_authentication_statement.h0000644000000000000000000000013014114336625021750 xustar0030 mtime=1630649749.854437299 30 atime=1678814151.012993868 28 ctime=1678814320.2179488 lasso-2.8.2/lasso/xml/lib_authentication_statement.h0000644000175000017500000000626514114336625025233 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_LIB_AUTHENTICATION_STATEMENT_H__ #define __LASSO_LIB_AUTHENTICATION_STATEMENT_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "saml_authentication_statement.h" #include "lib_authn_context.h" #define LASSO_TYPE_LIB_AUTHENTICATION_STATEMENT (lasso_lib_authentication_statement_get_type()) #define LASSO_LIB_AUTHENTICATION_STATEMENT(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_LIB_AUTHENTICATION_STATEMENT, \ LassoLibAuthenticationStatement)) #define LASSO_LIB_AUTHENTICATION_STATEMENT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_LIB_AUTHENTICATION_STATEMENT, \ LassoLibAuthenticationStatementClass)) #define LASSO_IS_LIB_AUTHENTICATION_STATEMENT(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_LIB_AUTHENTICATION_STATEMENT)) #define LASSO_IS_LIB_AUTHENTICATION_STATEMENT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_LIB_AUTHENTICATION_STATEMENT)) #define LASSO_LIB_AUTHENTICATION_STATEMENT_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_LIB_AUTHENTICATION_STATEMENT, \ LassoLibAuthenticationStatementClass)) typedef struct _LassoLibAuthenticationStatement LassoLibAuthenticationStatement; typedef struct _LassoLibAuthenticationStatementClass LassoLibAuthenticationStatementClass; struct _LassoLibAuthenticationStatement { LassoSamlAuthenticationStatement parent; /*< public >*/ /* */ LassoLibAuthnContext *AuthnContext; /* */ char *ReauthenticateOnOrAfter; /* */ char *SessionIndex; }; struct _LassoLibAuthenticationStatementClass { LassoSamlAuthenticationStatementClass parent; }; LASSO_EXPORT GType lasso_lib_authentication_statement_get_type (void); LASSO_EXPORT LassoLibAuthenticationStatement* lasso_lib_authentication_statement_new(void); LASSO_EXPORT LassoLibAuthenticationStatement* lasso_lib_authentication_statement_new_full( const char *authenticationMethod, const char *authenticationInstant, const char *reauthenticateOnOrAfter, LassoSamlNameIdentifier *sp_identifier, LassoSamlNameIdentifier *idp_identifier); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_LIB_AUTHENTICATION_STATEMENT_H__ */ lasso-2.8.2/lasso/xml/PaxHeaders/lib_logout_request.c0000644000000000000000000000013214114336625017723 xustar0030 mtime=1630649749.858437342 30 atime=1678814195.177241358 30 ctime=1678814320.325949415 lasso-2.8.2/lasso/xml/lib_logout_request.c0000644000175000017500000002150614114336625023177 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "private.h" #include #include "lib_logout_request.h" #include "../utils.h" /** * SECTION:lib_logout_request * @short_description: <lib:LogoutRequest> * *
Schema fragment for lib:LogoutRequest * * * * * * * * * * * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ #define LASSO_LIB_LOGOUT_REQUEST_GET_PRIVATE(o) \ (G_TYPE_INSTANCE_GET_PRIVATE ((o), LASSO_TYPE_LIB_LOGOUT_REQUEST, \ struct _LassoLibLogoutRequestPrivate)) struct _LassoLibLogoutRequestPrivate { GList *SessionIndex; }; static struct XmlSnippet schema_snippets[] = { { "Extension", SNIPPET_EXTENSION, G_STRUCT_OFFSET(LassoLibLogoutRequest, Extension), NULL, NULL, NULL}, { "ProviderID", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoLibLogoutRequest, ProviderID), NULL, NULL, NULL}, { "NameIdentifier", SNIPPET_NODE, G_STRUCT_OFFSET(LassoLibLogoutRequest, NameIdentifier), NULL, LASSO_SAML_ASSERTION_PREFIX, LASSO_SAML_ASSERTION_HREF}, { "SessionIndex", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoLibLogoutRequest, SessionIndex), NULL, NULL, NULL}, { "SessionIndex", SNIPPET_LIST_CONTENT|SNIPPET_PRIVATE, G_STRUCT_OFFSET(struct _LassoLibLogoutRequestPrivate, SessionIndex), NULL, NULL, NULL}, { "RelayState", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoLibLogoutRequest, RelayState), NULL, NULL, NULL}, { "consent", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoLibLogoutRequest, consent), NULL, NULL, NULL}, { "NotOnOrAfter", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoLibLogoutRequest, NotOnOrAfter), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; static struct QuerySnippet query_snippets[] = { { "RequestID", NULL }, { "MajorVersion", NULL }, { "MinorVersion", NULL }, { "IssueInstant", NULL }, { "ProviderID", NULL }, { "NameIdentifier/NameQualifier", "NameQualifier" }, { "NameIdentifier/Format", "NameFormat" }, { "NameIdentifier/content", "NameIdentifier" }, { "SessionIndex", NULL }, { "RelayState", NULL }, { "consent", NULL }, { NULL, NULL } }; static LassoNodeClass *parent_class = NULL; static gboolean init_from_query(LassoNode *node, char **query_fields) { LassoLibLogoutRequest *request = LASSO_LIB_LOGOUT_REQUEST(node); gboolean rc; request->NameIdentifier = lasso_saml_name_identifier_new(); rc = parent_class->init_from_query(node, query_fields); if (! rc) goto cleanup; if (request->ProviderID == NULL || request->NameIdentifier == NULL || request->NameIdentifier->content == NULL) { lasso_release_gobject(request->NameIdentifier); return FALSE; } if (request->NameIdentifier->Format == NULL) { lasso_assign_string(request->NameIdentifier->Format, "LASSO_SAML2_NAME_IDENTIFIER_FORMAT_UNSPECIFIED"); } cleanup: return rc; } /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoLibLogoutRequestClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->init_from_query = init_from_query; nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "LogoutRequest"); lasso_node_class_set_ns(nclass, LASSO_LIB_HREF, LASSO_LIB_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); lasso_node_class_add_query_snippets(nclass, query_snippets); g_type_class_add_private(nclass, sizeof(struct _LassoLibLogoutRequestPrivate)); } GType lasso_lib_logout_request_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoLibLogoutRequestClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoLibLogoutRequest), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_SAMLP_REQUEST_ABSTRACT, "LassoLibLogoutRequest", &this_info, 0); } return this_type; } /** * lasso_lib_logout_request_new: * * Creates a new #LassoLibLogoutRequest object. * * Return value: a newly created #LassoLibLogoutRequest object **/ LassoNode* lasso_lib_logout_request_new() { return g_object_new(LASSO_TYPE_LIB_LOGOUT_REQUEST, NULL); } /** * lasso_lib_logout_request_new_full: * @providerID: the provider ID requesting the logout * @nameIdentifier: the name identifier to log out * @sign_type: a #LassoSignatureType value * @sign_method: a #LassoSignatureMethod value * * Creates a new #LassoLibLogoutRequest object and initializes it with the * parameters. * * Return value: a newly created #LassoLibLogoutRequest object **/ LassoNode* lasso_lib_logout_request_new_full(char *providerID, LassoSamlNameIdentifier *nameIdentifier, LassoSignatureType sign_type, LassoSignatureMethod sign_method) { LassoSamlpRequestAbstract *request; request = g_object_new(LASSO_TYPE_LIB_LOGOUT_REQUEST, NULL); request->RequestID = lasso_build_unique_id(32); request->MajorVersion = LASSO_LIB_MAJOR_VERSION_N; request->MinorVersion = LASSO_LIB_MINOR_VERSION_N; request->IssueInstant = lasso_get_current_time(); request->sign_type = sign_type; request->sign_method = sign_method; LASSO_LIB_LOGOUT_REQUEST(request)->ProviderID = g_strdup(providerID); LASSO_LIB_LOGOUT_REQUEST(request)->NameIdentifier = g_object_ref(nameIdentifier); return LASSO_NODE(request); } /** * lasso_lib_logout_request_set_session_indexes: * @lib_logout_request: a #LassoLibLogoutRequest object * @session_indexes:(element-type string): a list of session indexes * * Set the SessionIndex node for this idff:LogoutRequest. */ void lasso_lib_logout_request_set_session_indexes(LassoLibLogoutRequest *lib_logout_request, GList *session_indexes) { char *first = NULL; struct _LassoLibLogoutRequestPrivate *private_data; if (! LASSO_IS_LIB_LOGOUT_REQUEST(lib_logout_request)) return; private_data = LASSO_LIB_LOGOUT_REQUEST_GET_PRIVATE(lib_logout_request); if (session_indexes) { first = session_indexes->data; session_indexes = g_list_next(session_indexes); } lasso_assign_string(lib_logout_request->SessionIndex, first); lasso_assign_list_of_strings(private_data->SessionIndex, session_indexes); } /** * lasso_lib_logout_request_get_session_indexes: * @lib_logout_request: a #LassoLibLogoutRequest object * * Get the SessionIndex node for this idff:LogoutRequest. * * Return value:(transfer full)(element-type utf8): a list of strings */ GList* lasso_lib_logout_request_get_session_indexes(LassoLibLogoutRequest *lib_logout_request) { struct _LassoLibLogoutRequestPrivate *private_data; GList *ret = NULL; GList *i = NULL; if (! LASSO_IS_LIB_LOGOUT_REQUEST(lib_logout_request)) return NULL; private_data = LASSO_LIB_LOGOUT_REQUEST_GET_PRIVATE(lib_logout_request); if (lib_logout_request->SessionIndex) { lasso_list_add_string(ret, lib_logout_request->SessionIndex); } lasso_foreach(i, private_data->SessionIndex) { lasso_list_add_string(ret, i->data); } return ret; } lasso-2.8.2/lasso/xml/PaxHeaders/saml_attribute.c0000644000000000000000000000013214114336625017033 xustar0030 mtime=1630649749.874437517 30 atime=1678814202.569282913 30 ctime=1678814320.349949552 lasso-2.8.2/lasso/xml/saml_attribute.c0000644000175000017500000001040214114336625022300 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "private.h" #include "saml_attribute.h" /* * SECTION:saml_attribute * @short_description: Mapping of the SAML element containing an attribute * @stability: Stable * * The schema fragment (oasis-sstc-saml-schema-assertion-1.1.xsd): *
Schema fragment for saml:Attribute * * * * * * * * * * * * * * * * * Not the real urType, but as close an approximation as we can * get in the XML representation * * * * * * * * * * * * * ]]> *
* */ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "AttributeName", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSamlAttribute, attributeName), NULL, NULL, NULL}, { "AttributeNameSpace", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSamlAttribute, attributeNameSpace), NULL, NULL, NULL}, { "AttributeValue", SNIPPET_LIST_NODES, G_STRUCT_OFFSET(LassoSamlAttribute, AttributeValue), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSamlAttributeClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "Attribute"); lasso_node_class_set_ns(nclass, LASSO_SAML_ASSERTION_HREF, LASSO_SAML_ASSERTION_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_saml_attribute_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSamlAttributeClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSamlAttribute), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_SAML_ATTRIBUTE_DESIGNATOR, "LassoSamlAttribute", &this_info, 0); } return this_type; } /** * lasso_saml_attribute_new: * * Creates a new #LassoSamlAttribute object. * * Return value: a newly created #LassoSamlAttribute object **/ LassoSamlAttribute* lasso_saml_attribute_new() { return g_object_new(LASSO_TYPE_SAML_ATTRIBUTE, NULL); } lasso-2.8.2/lasso/xml/PaxHeaders/misc_text_node.c0000644000000000000000000000013214114336625017020 xustar0030 mtime=1630649749.858437342 30 atime=1678814200.001268471 30 ctime=1678814320.341949506 lasso-2.8.2/lasso/xml/misc_text_node.c0000644000175000017500000001575514114336625022305 0ustar00bdauvergnebdauvergne00000000000000/* $Id: misc_text_node.c,v 1.0 2005/10/14 15:17:55 fpeters Exp $ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include #include "../utils.h" #include "private.h" #include "misc_text_node.h" /*****************************************************************************/ /* private methods */ /*****************************************************************************/ typedef struct { xmlNode *xml_content; GHashTable *any_attributes; } LassoMiscTextNodePrivate; #define LASSO_MISC_TEXT_NODE_GET_PRIVATE(o) \ (G_TYPE_INSTANCE_GET_PRIVATE ((o), LASSO_TYPE_MISC_TEXT_NODE, LassoMiscTextNodePrivate)) static struct XmlSnippet schema_snippets[] = { { "content", SNIPPET_TEXT_CHILD, G_STRUCT_OFFSET(LassoMiscTextNode, content), NULL, NULL, NULL}, { "any_attributes", SNIPPET_ATTRIBUTE | SNIPPET_ANY | SNIPPET_PRIVATE, G_STRUCT_OFFSET(LassoMiscTextNodePrivate, any_attributes), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; static xmlNode* get_xmlNode(LassoNode *node, gboolean lasso_dump) { xmlNode *xmlnode; xmlNs *ns; LassoMiscTextNode *mtnode = (LassoMiscTextNode*)node; LassoMiscTextNodePrivate *private; private = LASSO_MISC_TEXT_NODE_GET_PRIVATE(node); if (private->xml_content) { return xmlCopyNode(private->xml_content, 1); } if (LASSO_MISC_TEXT_NODE(node)->text_child) { return xmlNewText((xmlChar*)(LASSO_MISC_TEXT_NODE(node)->content)); } xmlnode = parent_class->get_xmlNode(node, lasso_dump); xmlNodeSetName(xmlnode, BAD_CAST mtnode->name); if (! lasso_strisempty(mtnode->ns_href) && ! lasso_strisempty(mtnode->ns_href)) { ns = xmlNewNs(xmlnode, BAD_CAST mtnode->ns_href, BAD_CAST mtnode->ns_prefix); xmlSetNs(xmlnode, ns); } return xmlnode; } static int init_from_xml(LassoNode *node, xmlNode *xmlnode) { LassoMiscTextNode *n = LASSO_MISC_TEXT_NODE(node); int rc = 0; if (xmlnode->type == XML_TEXT_NODE) { n->text_child = TRUE; n->content = g_strdup((char*)(xmlnode->content)); return 0; } else if (xmlnode->type == XML_ELEMENT_NODE && xmlnode->properties == NULL && (xmlnode->children == NULL || (xmlnode->children != NULL && xmlnode->children->next == NULL && xmlnode->children->type == XML_TEXT_NODE))) { rc = parent_class->init_from_xml(node, xmlnode); if (rc) return rc; n->ns_href = g_strdup((char*)xmlnode->ns->href); n->ns_prefix = g_strdup((char*)xmlnode->ns->prefix); n->name = g_strdup((char*)xmlnode->name); } else { lasso_misc_text_node_set_xml_content(n, xmlnode); } return 0; } static void finalize(GObject *object) { LassoMiscTextNode *t = LASSO_MISC_TEXT_NODE(object); LassoMiscTextNodePrivate *private; private = LASSO_MISC_TEXT_NODE_GET_PRIVATE(object); lasso_release_xml_node(private->xml_content); lasso_release_string(t->name); lasso_release_string(t->ns_href); lasso_release_string(t->ns_prefix); G_OBJECT_CLASS(parent_class)->finalize(G_OBJECT(t)); } /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoMiscTextNodeClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->get_xmlNode = get_xmlNode; nclass->init_from_xml = init_from_xml; nclass->node_data = g_new0(LassoNodeClassData, 1); G_OBJECT_CLASS(nclass)->finalize = finalize; lasso_node_class_set_nodename(nclass, "XXX"); lasso_node_class_add_snippets(nclass, schema_snippets); g_type_class_add_private(klass, sizeof(LassoMiscTextNodePrivate)); } GType lasso_misc_text_node_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoMiscTextNodeClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoMiscTextNode), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoMiscTextNode", &this_info, 0); } return this_type; } /** * lasso_misc_text_node_get_xml_content: * @misc_text_node: a #LassoMiscTextNode * * Return the xml content in this node. * * Return value:(transfer none): an #xmlNode or NULL. */ xmlNode* lasso_misc_text_node_get_xml_content(LassoMiscTextNode *misc_text_node) { LassoMiscTextNodePrivate *private_data; private_data = LASSO_MISC_TEXT_NODE_GET_PRIVATE(misc_text_node); return private_data->xml_content; } /** * lasso_misc_text_node_set_xml_content: * @misc_text_node: a #LassoMiscTextNode * * Set the xml content of this #LassoMiscTextNode */ void lasso_misc_text_node_set_xml_content(LassoMiscTextNode *misc_text_node, xmlNode *node) { LassoMiscTextNodePrivate *private_data; private_data = LASSO_MISC_TEXT_NODE_GET_PRIVATE(misc_text_node); lasso_assign_xml_node(private_data->xml_content, node); } /** * lasso_misc_text_node_new: * * Creates a new #LassoMiscTextNode object. * * Return value: a newly created #LassoMiscTextNode object **/ LassoNode* lasso_misc_text_node_new() { return g_object_new(LASSO_TYPE_MISC_TEXT_NODE, NULL); } /** * lasso_misc_text_node_new_with_string: * @content: the content of newly created #LassoMiscTextNode * * Creates a new #LassoMiscTextNode object and initializes it with @content. Beware that no * nodename, so it would create a text child, not an element. * * Return value: a newly created #LassoMiscTextNode object **/ LassoMiscTextNode* lasso_misc_text_node_new_with_string(const char *content) { LassoMiscTextNode *object; object = g_object_new(LASSO_TYPE_MISC_TEXT_NODE, NULL); object->content = g_strdup(content); return (LassoMiscTextNode*)LASSO_NODE(object); } /** * lasso_misc_text_node_new_with_xml_node: * @xml_node: an #xmlNode * * Creates a new #LassoMiscTextNode object and initialize it with @xml_node. * * Return value: a newly created #LassoMiscTextNode object */ LassoMiscTextNode* lasso_misc_text_node_new_with_xml_node(xmlNode *xml_node) { LassoMiscTextNode *object; object = (LassoMiscTextNode*)g_object_new(LASSO_TYPE_MISC_TEXT_NODE, NULL); lasso_misc_text_node_set_xml_content(object, xml_node); return object; } lasso-2.8.2/lasso/xml/PaxHeaders/tools.c0000644000000000000000000000013214401344336015151 xustar0030 mtime=1678100702.761160572 30 atime=1678814008.608164943 30 ctime=1678814320.309949323 lasso-2.8.2/lasso/xml/tools.c0000644000175000017500000027012514401344336020430 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ /* * The effect of defining the _DEFAULT_SOURCE macro is equivalent to * the effect of explicitly defining three macros in earlier glibc * versions: -D_BSD_SOURCE -D_SVID_SOURCE -D_POSIX_C_SOURCE=200809C */ #define _DEFAULT_SOURCE /* permit importation of strptime for glibc2 */ #if !defined(__sun) #define _XOPEN_SOURCE #endif /* permit importation of timegm for glibc2, wait for people to complain it does not work on their * system. */ #define _BSD_SOURCE #include "private.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "xml.h" #include "xml_enc.h" #include "saml-2.0/saml2_assertion.h" #include #include "../debug.h" #include "../utils.h" #include #include #include "../lasso_config.h" #include "config.h" /** * SECTION:saml2_utils * @short_description: Misc functions used inside Lasso * @stability: Internal */ /* A query string can be 3 times larger than the byte string value, because of the octet encoding * %xx */ const int query_string_attribute_length_limit = 8192 * 3; static xmlSecKeyPtr lasso_get_public_key_from_private_key_file(const char *private_key_file); static gboolean is_base64(const char *message); static void xmlDetectSAX2(xmlParserCtxtPtr ctxt); /** * lasso_build_random_sequence: * @buffer: buffer to fill with random sequence * @size: the sequence size in byte (character) * * Builds a random sequence of [0-9A-F] characters of size @size. * * Return value: None **/ void lasso_build_random_sequence(char *buffer, unsigned int size) { char *t; unsigned int rnd, i; t = buffer; while (t-buffer < (int)size) { rnd = g_random_int(); for (i=0; i>i*4)&0xf); if (*(t-1) > '9') *(t-1) += 7; } } } /** * lasso_build_unique_id: * @size: the ID's length (between 32 and 40) * * Builds an ID which has an unicity probability of 2^(-size*4). * * Return value:(transfer full): a "unique" ID (begin always with _ character) **/ char* lasso_build_unique_id(unsigned int size) { /* * When generating one-time-use identifiers for Principals, in the * case that a pseudorandom technique is employed, the probability * of two randomly chosen identifiers being identical MUST be less * than or equal to 2-128 and SHOULD be less than or equal to 2-160. * These levels correspond, respectively, to use of strong 128-bit * and 160-bit hash functions, in conjunction with sufficient input * entropy. * -- 3.1.4 Name Identifier Construction * in « Liberty ID-FF Protocols and Schema Specification » */ char *result; g_assert(size >= 32); result = g_malloc(size+2); /* trailing \0 and leading _ */ result[0] = '_'; lasso_build_random_sequence(result+1, size); result[size+1] = 0; return result; } /** * lasso_time_to_iso_8601_gmt: * @now: a #time_t value * * Format the given time as an ISO 8601 date-time value in UTC. * * Return value:(transfer full): an ISO 9601 formatted string. */ char* lasso_time_to_iso_8601_gmt(time_t now) { struct tm *tm; char *ret; ret = g_malloc(21); tm = gmtime(&now); strftime(ret, 21, "%Y-%m-%dT%H:%M:%SZ", tm); return ret; } /** * lasso_get_current_time: * * Returns the current time, format is "yyyy-mm-ddThh:mm:ssZ". * * Return value: a string **/ char* lasso_get_current_time() { return lasso_time_to_iso_8601_gmt(time(NULL)); } static const char xsdtime_format1[] = "dddd-dd-ddTdd:dd:ddZ"; static const char xsdtime_format2[] = "dddd-dd-ddTdd:dd:dd.?Z"; static gboolean xsdtime_match_format(const char *xsdtime, const char *format) { while (*format && *xsdtime) { if (*format == 'd' && isdigit(*xsdtime)) { ++format; ++xsdtime; } else if (*format == '?') { while (isdigit(*xsdtime)) ++xsdtime; ++format; } else if (*format == *xsdtime) { ++format; ++xsdtime; } else { break; } } if (*format == '\0' && *xsdtime == '\0') { return TRUE; } else { return FALSE; } } /** * lasso_iso_8601_gmt_to_time_t: * @xsdtime: an xsd time value * * Return value: a corresponding time_t value if possible. */ time_t lasso_iso_8601_gmt_to_time_t(const char *xsdtime) { struct tm tm; char *strptime_ret; if (xsdtime == NULL) { return -1; } if (xsdtime_match_format(xsdtime, xsdtime_format1)) { strptime_ret = strptime (xsdtime, "%Y-%m-%dT%H:%M:%SZ", &tm); if (strptime_ret == NULL) { return -1; } } else if (xsdtime_match_format(xsdtime, xsdtime_format2)) { strptime_ret = strptime (xsdtime, "%Y-%m-%dT%H:%M:%S.", &tm); if (strptime_ret == NULL) { return -1; } } else { return -1; } return timegm(&tm); } /** * lasso_get_pem_file_type: * @pem_file: a pem file * * Gets the type of a pem file. * * Return value: the pem file type **/ LassoPemFileType lasso_get_pem_file_type(const char *pem_file) { BIO* bio; EVP_PKEY *pkey; X509 *cert; LassoPemFileType type = LASSO_PEM_FILE_TYPE_UNKNOWN; g_return_val_if_fail(pem_file != NULL, LASSO_PARAM_ERROR_INVALID_VALUE); bio = BIO_new_file(pem_file, "rb"); if (bio == NULL) { message(G_LOG_LEVEL_CRITICAL, "Failed to open %s pem file", pem_file); return LASSO_PEM_FILE_TYPE_UNKNOWN; } pkey = PEM_read_bio_PUBKEY(bio, NULL, NULL, NULL); if (pkey != NULL) { type = LASSO_PEM_FILE_TYPE_PUB_KEY; EVP_PKEY_free(pkey); } else { if (BIO_reset(bio) == 0) { pkey = PEM_read_bio_PrivateKey(bio, NULL, NULL, NULL); if (pkey != NULL) { type = LASSO_PEM_FILE_TYPE_PRIVATE_KEY; EVP_PKEY_free(pkey); } else { if (BIO_reset(bio) == 0) { cert = PEM_read_bio_X509(bio, NULL, NULL, NULL); if (cert != NULL) { type = LASSO_PEM_FILE_TYPE_CERT; X509_free(cert); } } } } } BIO_free(bio); return type; } /** * lasso_get_public_key_from_pem_file: * @file: the name of a file containing a public key * * Load a public key from a file in the PEM format. * * Returns: a #xmlSecKey if one is found, NULL otherwise. */ xmlSecKeyPtr lasso_get_public_key_from_pem_file(const char *file) { LassoPemFileType file_type; xmlSecKeyPtr pub_key = NULL; file_type = lasso_get_pem_file_type(file); switch (file_type) { case LASSO_PEM_FILE_TYPE_UNKNOWN: message(G_LOG_LEVEL_CRITICAL, "PEM file type unknown: %s", file); break; /* with a warning ? */ case LASSO_PEM_FILE_TYPE_CERT: pub_key = lasso_get_public_key_from_pem_cert_file(file); break; case LASSO_PEM_FILE_TYPE_PUB_KEY: pub_key = xmlSecCryptoAppKeyLoad(file, xmlSecKeyDataFormatPem, NULL, NULL, NULL); break; case LASSO_PEM_FILE_TYPE_PRIVATE_KEY: pub_key = lasso_get_public_key_from_private_key_file(file); break; /* with a warning ? */ } return pub_key; } /** * lasso_get_public_key_from_pem_cert_file: * @pem_cert_file: an X509 pem certificate file * * Gets the public key in an X509 pem certificate file. * * Return value: a public key or NULL if an error occurs. **/ xmlSecKeyPtr lasso_get_public_key_from_pem_cert_file(const char *pem_cert_file) { FILE *fd; X509 *pem_cert; xmlSecKeyDataPtr data; xmlSecKeyPtr key = NULL; g_return_val_if_fail(pem_cert_file != NULL, NULL); /* load pem certificate from file */ fd = fopen(pem_cert_file, "r"); if (fd == NULL) { message(G_LOG_LEVEL_CRITICAL, "Failed to open %s pem certificate file", pem_cert_file); return NULL; } /* read the pem X509 certificate */ pem_cert = PEM_read_X509(fd, NULL, NULL, NULL); fclose(fd); if (pem_cert == NULL) { message(G_LOG_LEVEL_CRITICAL, "Failed to read X509 certificate"); return NULL; } /* get public key value in certificate */ data = xmlSecOpenSSLX509CertGetKey(pem_cert); if (data != NULL) { /* create key and set key value */ key = xmlSecKeyCreate(); xmlSecKeySetValue(key, data); } else { message(G_LOG_LEVEL_CRITICAL, "Failed to get the public key in the X509 certificate"); } X509_free(pem_cert); return key; } /** * lasso_get_public_key_from_private_key_file: * @private_key_file: the name of a file containing a private key in PEM format * * Load a public key from a private key. * * Returns: a new $xmlSecKey containing the private key */ static xmlSecKeyPtr lasso_get_public_key_from_private_key_file(const char *private_key_file) { return xmlSecCryptoAppKeyLoad(private_key_file, xmlSecKeyDataFormatPem, NULL, NULL, NULL); } /** * lasso_load_certs_from_pem_certs_chain_file: * @pem_certs_chain_file: a CA certificate chain file * * Creates a keys manager and loads inside all the CA certificates of * @pem_certs_chain_file. Caller is responsible for freeing it with * xmlSecKeysMngrDestroy() function. * * Return value: a newly allocated keys manager or NULL if an error occurs. **/ xmlSecKeysMngrPtr lasso_load_certs_from_pem_certs_chain_file(const char* pem_certs_chain_file) { xmlSecKeysMngrPtr keys_mngr = NULL; GIOChannel *gioc = NULL; gchar *line = NULL; gsize len, pos; GString *cert = NULL; gint ret; gint certificates = 0; /* No file just return NULL */ goto_cleanup_if_fail (pem_certs_chain_file && strlen(pem_certs_chain_file) != 0); gioc = g_io_channel_new_file(pem_certs_chain_file, "r", NULL); if (! gioc) { message(G_LOG_LEVEL_CRITICAL, "Cannot open chain file %s", pem_certs_chain_file); goto cleanup; } keys_mngr = xmlSecKeysMngrCreate(); if (keys_mngr == NULL) { message(G_LOG_LEVEL_CRITICAL, lasso_strerror(LASSO_DS_ERROR_KEYS_MNGR_CREATION_FAILED)); goto cleanup; } /* initialize keys manager */ if (xmlSecCryptoAppDefaultKeysMngrInit(keys_mngr) < 0) { message(G_LOG_LEVEL_CRITICAL, lasso_strerror(LASSO_DS_ERROR_KEYS_MNGR_INIT_FAILED)); xmlSecKeysMngrDestroy(keys_mngr); goto cleanup; } while (g_io_channel_read_line(gioc, &line, &len, &pos, NULL) == G_IO_STATUS_NORMAL) { if (line != NULL && g_strstr_len(line, 64, "BEGIN CERTIFICATE") != NULL) { cert = g_string_new(line); } else if (cert != NULL && line != NULL && g_strstr_len(line, 64, "END CERTIFICATE") != NULL) { g_string_append(cert, line); /* load the new certificate found in the keys manager */ /* create keys manager */ ret = xmlSecCryptoAppKeysMngrCertLoadMemory(keys_mngr, (const xmlSecByte*) cert->str, (xmlSecSize) cert->len, xmlSecKeyDataFormatPem, xmlSecKeyDataTypeTrusted); if (ret < 0) { goto cleanup; } certificates++; lasso_release_gstring(cert, TRUE); cert = NULL; } else if (cert != NULL && line != NULL && line[0] != '\0') { g_string_append(cert, line); } /* free last line read */ lasso_release_string(line); } cleanup: if (gioc) { g_io_channel_shutdown(gioc, TRUE, NULL); g_io_channel_unref(gioc); } if (cert) lasso_release_gstring(cert, TRUE); if (certificates == 0) lasso_release_key_manager(keys_mngr); lasso_release_string(line); return keys_mngr; } /* * lasso_query_sign: * @query: a query (an url-encoded node) * @sign_method: the Signature transform method * @private_key_file: the private key * @private_key_file_password: the private key password * * Signs a query (url-encoded message). * * Return value: a newly allocated query signed or NULL if an error occurs. **/ char* lasso_query_sign(char *query, LassoSignatureContext context) { char *digest = NULL; /* 160 bit buffer */ unsigned char *sigret = NULL; size_t siglen = 0; xmlChar *b64_sigret = NULL, *e_b64_sigret = NULL; char *new_query = NULL, *s_new_query = NULL; int status = 0; const xmlChar *algo_href = NULL; unsigned char *hmac_key; size_t hmac_key_length; xmlSecKey *key; xmlSecKeyData *key_data; LassoSignatureMethod sign_method; lasso_error_t rc = 0; const EVP_MD *md = NULL; EVP_MD_CTX *evp_md_ctx = NULL; EVP_PKEY *pkey = NULL; EVP_PKEY *hmac_pkey = NULL; g_return_val_if_fail(query != NULL, NULL); g_return_val_if_fail(lasso_ok_signature_method(context.signature_method), NULL); key = context.signature_key; sign_method = context.signature_method; key_data = xmlSecKeyGetValue(key); /* add SigAlg */ switch (sign_method) { case LASSO_SIGNATURE_METHOD_RSA_SHA1: algo_href = xmlSecHrefRsaSha1; break; case LASSO_SIGNATURE_METHOD_DSA_SHA1: algo_href = xmlSecHrefDsaSha1; break; case LASSO_SIGNATURE_METHOD_HMAC_SHA1: algo_href = xmlSecHrefHmacSha1; break; case LASSO_SIGNATURE_METHOD_RSA_SHA256: algo_href = xmlSecHrefRsaSha256; break; case LASSO_SIGNATURE_METHOD_HMAC_SHA256: algo_href = xmlSecHrefHmacSha256; break; case LASSO_SIGNATURE_METHOD_RSA_SHA384: algo_href = xmlSecHrefRsaSha384; break; case LASSO_SIGNATURE_METHOD_HMAC_SHA384: algo_href = xmlSecHrefHmacSha384; break; case LASSO_SIGNATURE_METHOD_RSA_SHA512: algo_href = xmlSecHrefRsaSha512; break; case LASSO_SIGNATURE_METHOD_HMAC_SHA512: algo_href = xmlSecHrefHmacSha512; break; case LASSO_SIGNATURE_METHOD_NONE: case LASSO_SIGNATURE_METHOD_LAST: g_assert_not_reached(); } { const char *t = (char*)lasso_xmlURIEscapeStr(algo_href, NULL); new_query = g_strdup_printf("%s&SigAlg=%s", query, t); xmlFree(BAD_CAST t); } /* define the digest algorithm */ switch (sign_method) { case LASSO_SIGNATURE_METHOD_RSA_SHA1: case LASSO_SIGNATURE_METHOD_DSA_SHA1: case LASSO_SIGNATURE_METHOD_HMAC_SHA1: md = EVP_sha1(); break; case LASSO_SIGNATURE_METHOD_RSA_SHA256: case LASSO_SIGNATURE_METHOD_HMAC_SHA256: md = EVP_sha256(); break; case LASSO_SIGNATURE_METHOD_RSA_SHA384: case LASSO_SIGNATURE_METHOD_HMAC_SHA384: md = EVP_sha384(); break; case LASSO_SIGNATURE_METHOD_RSA_SHA512: case LASSO_SIGNATURE_METHOD_HMAC_SHA512: md = EVP_sha512(); break; case LASSO_SIGNATURE_METHOD_NONE: case LASSO_SIGNATURE_METHOD_LAST: g_assert_not_reached(); } /* Get the signture key */ switch (sign_method) { case LASSO_SIGNATURE_METHOD_RSA_SHA1: case LASSO_SIGNATURE_METHOD_RSA_SHA256: case LASSO_SIGNATURE_METHOD_RSA_SHA384: case LASSO_SIGNATURE_METHOD_RSA_SHA512: case LASSO_SIGNATURE_METHOD_DSA_SHA1: pkey = xmlSecOpenSSLEvpKeyDataGetEvp(key_data); if (! pkey) { message(G_LOG_LEVEL_CRITICAL, "Failed to get assymetric key"); goto done; } break; case LASSO_SIGNATURE_METHOD_HMAC_SHA1: case LASSO_SIGNATURE_METHOD_HMAC_SHA256: case LASSO_SIGNATURE_METHOD_HMAC_SHA384: case LASSO_SIGNATURE_METHOD_HMAC_SHA512: if ((rc = lasso_get_hmac_key(key, (void**)&hmac_key, &hmac_key_length))) { message(G_LOG_LEVEL_CRITICAL, "Failed to get hmac key (%s)", lasso_strerror(rc)); goto done; } g_assert(hmac_key); hmac_pkey = EVP_PKEY_new_mac_key(EVP_PKEY_HMAC, NULL, hmac_key, (int)hmac_key_length); if (! hmac_key) { message(G_LOG_LEVEL_CRITICAL, "EVP_PKEY_new_mac_key failed"); goto done; } pkey = hmac_pkey; break; case LASSO_SIGNATURE_METHOD_LAST: case LASSO_SIGNATURE_METHOD_NONE: g_assert_not_reached(); } switch (sign_method) { case LASSO_SIGNATURE_METHOD_RSA_SHA1: case LASSO_SIGNATURE_METHOD_RSA_SHA256: case LASSO_SIGNATURE_METHOD_RSA_SHA384: case LASSO_SIGNATURE_METHOD_RSA_SHA512: case LASSO_SIGNATURE_METHOD_DSA_SHA1: case LASSO_SIGNATURE_METHOD_HMAC_SHA1: case LASSO_SIGNATURE_METHOD_HMAC_SHA256: case LASSO_SIGNATURE_METHOD_HMAC_SHA384: case LASSO_SIGNATURE_METHOD_HMAC_SHA512: evp_md_ctx = EVP_MD_CTX_create(); if (EVP_DigestSignInit(evp_md_ctx, NULL, md, NULL, pkey) <= 0) { message(G_LOG_LEVEL_CRITICAL, "EVP_DigestSignInit failed"); goto done; } if (EVP_DigestSignUpdate( evp_md_ctx, new_query, strlen(new_query)) <= 0) { message(G_LOG_LEVEL_CRITICAL, "EVP_DigestSignUpdate failed"); goto done; } if (EVP_DigestSignFinal(evp_md_ctx, NULL, &siglen) <= 0) { message(G_LOG_LEVEL_CRITICAL, "EVP_DigestSignFinal failed"); goto done; } sigret = g_malloc(siglen); if (EVP_DigestSignFinal(evp_md_ctx, sigret, &siglen) <= 0) { message(G_LOG_LEVEL_CRITICAL, "EVP_DigestSignFinal failed"); goto done; } status = 1; break; case LASSO_SIGNATURE_METHOD_LAST: case LASSO_SIGNATURE_METHOD_NONE: g_assert_not_reached(); } if (status == 0) { goto done; } /* Base64 encode the signature value */ b64_sigret = xmlSecBase64Encode(sigret, siglen, 0); /* escape b64_sigret */ e_b64_sigret = lasso_xmlURIEscapeStr((xmlChar*)b64_sigret, NULL); /* add signature */ switch (sign_method) { case LASSO_SIGNATURE_METHOD_RSA_SHA1: case LASSO_SIGNATURE_METHOD_DSA_SHA1: case LASSO_SIGNATURE_METHOD_HMAC_SHA1: case LASSO_SIGNATURE_METHOD_RSA_SHA256: case LASSO_SIGNATURE_METHOD_HMAC_SHA256: case LASSO_SIGNATURE_METHOD_RSA_SHA384: case LASSO_SIGNATURE_METHOD_HMAC_SHA384: case LASSO_SIGNATURE_METHOD_RSA_SHA512: case LASSO_SIGNATURE_METHOD_HMAC_SHA512: s_new_query = g_strdup_printf("%s&Signature=%s", new_query, (char*) e_b64_sigret); break; case LASSO_SIGNATURE_METHOD_NONE: case LASSO_SIGNATURE_METHOD_LAST: g_assert_not_reached(); } done: lasso_release(new_query); lasso_release_string(digest); lasso_release(sigret); lasso_release_xml_string(b64_sigret); lasso_release_xml_string(e_b64_sigret); if (evp_md_ctx) { EVP_MD_CTX_destroy(evp_md_ctx); evp_md_ctx = NULL; } if (hmac_pkey) { EVP_PKEY_free(hmac_pkey); hmac_pkey = NULL; pkey = NULL; } return s_new_query; } LassoNode* lasso_assertion_encrypt(LassoSaml2Assertion *assertion, char *recipient) { xmlSecKey *encryption_public_key = NULL; LassoEncryptionSymKeyType encryption_sym_key_type; LassoKeyEncryptionMethod key_encryption_method; LassoNode *ret = NULL; lasso_node_get_encryption((LassoNode*)assertion, &encryption_public_key, &encryption_sym_key_type, &key_encryption_method); if (! encryption_public_key) { return NULL; } ret = LASSO_NODE(lasso_node_encrypt(LASSO_NODE(assertion), encryption_public_key, encryption_sym_key_type, key_encryption_method, recipient)); lasso_release_sec_key(encryption_public_key); return ret; } static lasso_error_t lasso_query_verify_helper(const char *signed_content, const char *b64_signature, const char *algorithm, xmlSecKey *key) { char *digest = NULL; char *signature = NULL; unsigned int signature_len = 0; unsigned char *hmac_key = NULL; size_t hmac_key_length = 0; const EVP_MD *md = NULL; lasso_error_t rc = 0; LassoSignatureMethod method = LASSO_SIGNATURE_METHOD_NONE; EVP_PKEY *hmac_pkey = NULL; unsigned char *new_signature = NULL; EVP_MD_CTX *evp_md_ctx = NULL; if (lasso_strisequal(algorithm, (char*)xmlSecHrefRsaSha1)) { goto_cleanup_if_fail_with_rc(key->value->id == xmlSecOpenSSLKeyDataRsaId, LASSO_DS_ERROR_INVALID_SIGALG) method = LASSO_SIGNATURE_METHOD_RSA_SHA1; } else if (lasso_strisequal(algorithm, (char*)xmlSecHrefDsaSha1)) { goto_cleanup_if_fail_with_rc(key->value->id == xmlSecOpenSSLKeyDataDsaId, LASSO_DS_ERROR_INVALID_SIGALG); method = LASSO_SIGNATURE_METHOD_DSA_SHA1; } else if (lasso_strisequal(algorithm, (char*)xmlSecHrefRsaSha256)) { goto_cleanup_if_fail_with_rc(key->value->id == xmlSecOpenSSLKeyDataRsaId, LASSO_DS_ERROR_INVALID_SIGALG) method = LASSO_SIGNATURE_METHOD_RSA_SHA256; } else if (lasso_strisequal(algorithm, (char*)xmlSecHrefRsaSha384)) { goto_cleanup_if_fail_with_rc(key->value->id == xmlSecOpenSSLKeyDataRsaId, LASSO_DS_ERROR_INVALID_SIGALG) method = LASSO_SIGNATURE_METHOD_RSA_SHA384; } else if (lasso_strisequal(algorithm, (char*)xmlSecHrefRsaSha512)) { goto_cleanup_if_fail_with_rc(key->value->id == xmlSecOpenSSLKeyDataRsaId, LASSO_DS_ERROR_INVALID_SIGALG) method = LASSO_SIGNATURE_METHOD_RSA_SHA512; } else if (lasso_strisequal(algorithm, (char*)xmlSecHrefHmacSha1)) { lasso_check_good_rc(lasso_get_hmac_key(key, (void**)&hmac_key, &hmac_key_length)); method = LASSO_SIGNATURE_METHOD_HMAC_SHA1; } else if (lasso_strisequal(algorithm, (char*)xmlSecHrefHmacSha256)) { lasso_check_good_rc(lasso_get_hmac_key(key, (void**)&hmac_key, &hmac_key_length)); method = LASSO_SIGNATURE_METHOD_HMAC_SHA256; } else if (lasso_strisequal(algorithm, (char*)xmlSecHrefHmacSha384)) { lasso_check_good_rc(lasso_get_hmac_key(key, (void**)&hmac_key, &hmac_key_length)); method = LASSO_SIGNATURE_METHOD_HMAC_SHA384; } else if (lasso_strisequal(algorithm, (char*)xmlSecHrefHmacSha512)) { lasso_check_good_rc(lasso_get_hmac_key(key, (void**)&hmac_key, &hmac_key_length)); method = LASSO_SIGNATURE_METHOD_HMAC_SHA512; } else { goto_cleanup_with_rc(LASSO_DS_ERROR_INVALID_SIGALG); } /* define the digest algorithm */ switch (method) { case LASSO_SIGNATURE_METHOD_RSA_SHA1: case LASSO_SIGNATURE_METHOD_DSA_SHA1: case LASSO_SIGNATURE_METHOD_HMAC_SHA1: md = EVP_sha1(); break; case LASSO_SIGNATURE_METHOD_RSA_SHA256: case LASSO_SIGNATURE_METHOD_HMAC_SHA256: md = EVP_sha256(); break; case LASSO_SIGNATURE_METHOD_RSA_SHA384: case LASSO_SIGNATURE_METHOD_HMAC_SHA384: md = EVP_sha384(); break; case LASSO_SIGNATURE_METHOD_RSA_SHA512: case LASSO_SIGNATURE_METHOD_HMAC_SHA512: md = EVP_sha512(); break; case LASSO_SIGNATURE_METHOD_NONE: case LASSO_SIGNATURE_METHOD_LAST: g_assert_not_reached(); } /* is the signature algo allowed */ goto_cleanup_if_fail_with_rc( lasso_allowed_signature_method(method), LASSO_DS_ERROR_INVALID_SIGALG); /* decode signature */ goto_cleanup_if_fail_with_rc( lasso_base64_decode(b64_signature, &signature, (int*)&signature_len), LASSO_DS_ERROR_INVALID_SIGNATURE); /* verify signature */ evp_md_ctx = EVP_MD_CTX_create(); switch (method) { case LASSO_SIGNATURE_METHOD_RSA_SHA1: case LASSO_SIGNATURE_METHOD_RSA_SHA256: case LASSO_SIGNATURE_METHOD_RSA_SHA384: case LASSO_SIGNATURE_METHOD_RSA_SHA512: case LASSO_SIGNATURE_METHOD_DSA_SHA1: { xmlSecKeyData *key_data = xmlSecKeyGetValue(key); if (! key_data) { message(G_LOG_LEVEL_CRITICAL, "Failed to get KeyData"); goto_cleanup_with_rc(LASSO_DS_ERROR_INVALID_SIGNATURE); } EVP_PKEY *pkey = xmlSecOpenSSLEvpKeyDataGetEvp(key_data); if (! pkey) { message(G_LOG_LEVEL_CRITICAL, "Failed to get assymetric key"); goto_cleanup_with_rc(LASSO_DS_ERROR_INVALID_SIGNATURE); } if (1 != EVP_DigestVerifyInit(evp_md_ctx, NULL, md, NULL, pkey)) { message(G_LOG_LEVEL_CRITICAL, "EVP_DigestVerifyInit failed"); goto_cleanup_with_rc(LASSO_DS_ERROR_INVALID_SIGNATURE); } if (1 != EVP_DigestVerifyUpdate(evp_md_ctx, signed_content, strlen(signed_content))) { message(G_LOG_LEVEL_CRITICAL, "EVP_DigestVerifyUpdate failed"); goto_cleanup_with_rc(LASSO_DS_ERROR_INVALID_SIGNATURE); } if(1 != EVP_DigestVerifyFinal(evp_md_ctx, (unsigned char*)signature, signature_len)) { goto_cleanup_with_rc(LASSO_DS_ERROR_INVALID_SIGNATURE); } } break; case LASSO_SIGNATURE_METHOD_HMAC_SHA1: case LASSO_SIGNATURE_METHOD_HMAC_SHA256: case LASSO_SIGNATURE_METHOD_HMAC_SHA384: case LASSO_SIGNATURE_METHOD_HMAC_SHA512: { unsigned char *hmac_key; size_t hmac_key_length; size_t new_signature_len; if ((rc = lasso_get_hmac_key(key, (void**)&hmac_key, &hmac_key_length))) { message(G_LOG_LEVEL_CRITICAL, "Failed to get hmac key (%s)", lasso_strerror(rc)); goto_cleanup_with_rc(LASSO_DS_ERROR_INVALID_SIGNATURE); } g_assert(hmac_key); hmac_pkey = EVP_PKEY_new_mac_key(EVP_PKEY_HMAC, NULL, hmac_key, (int)hmac_key_length); if (! hmac_key) { message(G_LOG_LEVEL_CRITICAL, "EVP_PKEY_new_mac_key failed"); goto_cleanup_with_rc(LASSO_DS_ERROR_INVALID_SIGNATURE); } if (EVP_DigestSignInit(evp_md_ctx, NULL, md, NULL, hmac_pkey) != 1) { message(G_LOG_LEVEL_CRITICAL, "EVP_DigestSignInit failed"); goto_cleanup_with_rc(LASSO_DS_ERROR_INVALID_SIGNATURE); } if (EVP_DigestSignUpdate(evp_md_ctx, signed_content, strlen(signed_content)) != 1) { message(G_LOG_LEVEL_CRITICAL, "EVP_DigestSignUpdate failed"); goto_cleanup_with_rc(LASSO_DS_ERROR_INVALID_SIGNATURE); } if (EVP_DigestSignFinal(evp_md_ctx, NULL, &new_signature_len) != 1) { message(G_LOG_LEVEL_CRITICAL, "EVP_DigestSignFinal failed"); goto_cleanup_with_rc(LASSO_DS_ERROR_INVALID_SIGNATURE); } if (new_signature_len != signature_len) { goto_cleanup_with_rc(LASSO_DS_ERROR_INVALID_SIGNATURE); } new_signature = g_malloc(new_signature_len); if (EVP_DigestSignFinal(evp_md_ctx, new_signature, &new_signature_len) != 1) { message(G_LOG_LEVEL_CRITICAL, "EVP_DigestSignFinal failed"); goto_cleanup_with_rc(LASSO_DS_ERROR_INVALID_SIGNATURE); } if (CRYPTO_memcmp(signature, new_signature, signature_len) != 0) { goto_cleanup_with_rc(LASSO_DS_ERROR_INVALID_SIGNATURE); } } break; case LASSO_SIGNATURE_METHOD_NONE: case LASSO_SIGNATURE_METHOD_LAST: g_assert_not_reached(); } cleanup: lasso_release_string(digest); lasso_release_string(new_signature); if (evp_md_ctx) { EVP_MD_CTX_destroy(evp_md_ctx); evp_md_ctx = NULL; } if (hmac_pkey) { EVP_PKEY_free(hmac_pkey); hmac_pkey = NULL; } return rc; } /** * lasso_query_verify_signature: * @query: a query (an url-encoded message) * @sender_public_key: the query sender public key * * Verifies the query signature. * * Return value: 0 if signature is valid * a positive value if signature was not found or is invalid * a negative value if an error occurs during verification **/ lasso_error_t lasso_query_verify_signature(const char *query, xmlSecKey *sender_public_key) { gchar **str_split = NULL; char *b64_signature = NULL; char *sig_alg = NULL; char *usig_alg = NULL; lasso_error_t rc = 0; g_return_val_if_fail(query != NULL, LASSO_PARAM_ERROR_INVALID_VALUE); if (lasso_flag_verify_signature == FALSE) { return 0; } g_return_val_if_fail(sender_public_key != NULL, LASSO_PARAM_ERROR_INVALID_VALUE); g_return_val_if_fail(sender_public_key->value != NULL, LASSO_PARAM_ERROR_INVALID_VALUE); /* split query, the signature MUST be the last param of the query * actually there could be more params in the URL; but they wouldn't be * covered by the signature */ str_split = g_strsplit(query, "&Signature=", 0); if (str_split[0] == NULL || str_split[1] == NULL) goto_cleanup_with_rc(LASSO_DS_ERROR_SIGNATURE_NOT_FOUND); sig_alg = strstr(str_split[0], "&SigAlg="); if (sig_alg == NULL) goto_cleanup_with_rc(LASSO_DS_ERROR_INVALID_SIGALG); sig_alg = strchr(sig_alg, '=')+1; usig_alg = xmlURIUnescapeString(sig_alg, 0, NULL); /* insure there is only the signature in str_split[1] */ if (strchr(str_split[1], '&')) { strchr(str_split[1], '&')[0] = 0; } /* get signature (unescape + base64 decode) */ b64_signature = (char*)xmlURIUnescapeString(str_split[1], 0, NULL); lasso_check_good_rc(lasso_query_verify_helper(str_split[0], b64_signature, usig_alg, sender_public_key)); cleanup: if (b64_signature) xmlFree(b64_signature); if (usig_alg) xmlFree(usig_alg); g_strfreev(str_split); return rc; } /** * lasso_saml2_query_verify_signature: * @query: a query string * @sender_public_key: the #xmlSecKey for the sender * * Verify a query signature following SAML 2.0 semantic. * * Return value: 0 if signature is validated, an error code otherwise. */ int lasso_saml2_query_verify_signature(const char *query, xmlSecKey *sender_public_key) { char *b64_signature = NULL; char *query_copy = NULL; char *signed_query = NULL; char *i = NULL; char **components = NULL, **j = NULL; int n = 0; char *saml_request_response = NULL; char *relaystate = NULL; char *sig_alg = NULL, *usig_alg = NULL; lasso_error_t rc = 0; lasso_return_val_if_fail(query != NULL, LASSO_PARAM_ERROR_INVALID_VALUE); lasso_return_val_if_fail(lasso_flag_verify_signature, 0); lasso_return_val_if_fail(sender_public_key != NULL, LASSO_PARAM_ERROR_INVALID_VALUE); lasso_return_val_if_fail(sender_public_key->value != NULL, LASSO_PARAM_ERROR_INVALID_VALUE); /* extract fields */ i = query_copy = g_strdup(query); n = 1; while (*i) { if (*i == '&' || *i == ';') n++; i++; } components = g_new0(char*, n+1); components[n] = NULL; n = 0; i = query_copy; components[n] = query_copy; n += 1; while (*i) { if (*i == '&' || *i == ';') { *i = '\0'; components[n] = i + 1; n++; } i++; } /* extract specific fields */ j = components; #define match_field(x) \ (strncmp(x "=", *j, sizeof(x)) == 0) #define value strchr(*j, '=') + 1 while (*j) { if (match_field(LASSO_SAML2_FIELD_RESPONSE) || match_field(LASSO_SAML2_FIELD_REQUEST)) { saml_request_response = *j; } else if (match_field(LASSO_SAML2_FIELD_RELAYSTATE)) { relaystate = *j; } else if (match_field(LASSO_SAML2_FIELD_SIGALG)) { sig_alg = *j; } else if (match_field(LASSO_SAML2_FIELD_SIGNATURE)) { b64_signature = value; b64_signature = xmlURIUnescapeString(b64_signature, 0, NULL); } ++j; } #undef match_field #undef value if (! saml_request_response) { message(G_LOG_LEVEL_CRITICAL, "SAMLRequest or SAMLResponse missing in query"); goto_cleanup_with_rc(LASSO_PROFILE_ERROR_INVALID_QUERY); } if (! sig_alg) { goto_cleanup_with_rc(LASSO_DS_ERROR_INVALID_SIGALG); } if (! b64_signature) { goto_cleanup_with_rc(LASSO_DS_ERROR_SIGNATURE_NOT_FOUND); } /* build the signed query */ if (relaystate) { signed_query = g_strconcat(saml_request_response, "&", relaystate, "&", sig_alg, NULL); } else { signed_query = g_strconcat(saml_request_response, "&", sig_alg, NULL); } sig_alg = strchr(sig_alg, '=')+1; if (! sig_alg) { goto_cleanup_with_rc(LASSO_DS_ERROR_INVALID_SIGALG); } usig_alg = xmlURIUnescapeString(sig_alg, 0, NULL); lasso_check_good_rc(lasso_query_verify_helper(signed_query, b64_signature, usig_alg, sender_public_key)); cleanup: if (b64_signature) xmlFree(b64_signature); if (usig_alg) xmlFree(usig_alg); lasso_release(components); lasso_release(query_copy); lasso_release(signed_query); return rc; } /** * lasso_sha1: * @str: a string * * Builds the SHA-1 message digest (cryptographic hash) of @str * * Return value: 20-bytes buffer allocated with g_malloc **/ char* lasso_sha1(const char *str) { xmlChar *md; if (str == NULL) return NULL; md = g_malloc(20); return (char*)SHA1((unsigned char*)str, strlen(str), md); } /** * lasso_sha256: * @str: a string * * Builds the SHA-256 message digest (cryptographic hash) of @str * * Return value: 32-bytes buffer allocated with g_malloc **/ char* lasso_sha256(const char *str) { xmlChar *md; if (str == NULL) return NULL; md = g_malloc(32); return (char*)SHA256((unsigned char*)str, strlen(str), md); } /** * lasso_sha384: * @str: a string * * Builds the SHA-384 message digest (cryptographic hash) of @str * * Return value: 48-bytes buffer allocated with g_malloc **/ char* lasso_sha384(const char *str) { xmlChar *md; if (str == NULL) return NULL; md = g_malloc(48); return (char*)SHA384((unsigned char*)str, strlen(str), md); } /** * lasso_sha512: * @str: a string * * Builds the SHA-512 message digest (cryptographic hash) of @str * * Return value: 64-bytes buffer allocated with g_malloc **/ char* lasso_sha512(const char *str) { xmlChar *md; if (str == NULL) return NULL; md = g_malloc(64); return (char*)SHA512((unsigned char*)str, strlen(str), md); } /** * lasso_urlencoded_to_strings: * @str: a query string * * Parse a query string and separate it into an char* array of its components. * * The returned array must be deallocated. */ xmlChar** lasso_urlencoded_to_strings(const char *str) { int i, n=1; char *st, *st2; xmlChar **result; g_assert(str); /* count components */ st = (char*)str; while (*st) { if (*st == '&' || *st == ';') n++; st++; } /* allocate result array */ result = g_new0(xmlChar*, n+1); result[n] = NULL; /* tokenize */ st = st2 = (char*)str; i = 0; while(1) { if (*st == '&' || *st == ';' || *st == '\0') { ptrdiff_t len = st - st2; g_assert(i < n+1); if (len) { result[i] = (xmlChar*)xmlURIUnescapeString(st2, len, NULL); } else { result[i] = g_malloc0(1); } i++; if (*st == '\0') break; st2 = st + 1; } st++; } return result; } void _lasso_xmlsec_password_callback() { } /** * lasso_sign_node: * @xmlnode: the xmlnode to sign * @id_attr_name: (allow-none): an ID attribute to reference the xmlnode in the signature * @id_value: (allow-none): value of the ID attribute * @private_key_file: the path to a key file, or the key itself PEM encoded. * @certificate_file: (allow-none): the path to a certificate file to place in the KeyInfo, or the certificate * itself PEM encoded. * * Sign an xmlnode, use the given attribute to reference or create an envelopped signature, * eventually place a certificate in the KeyInfo node. The signature template must already be * present on the xmlnode. * * Return value: 0 if successful, an error code otherwise. */ int lasso_sign_node(xmlNode *xmlnode, LassoSignatureContext context, const char *id_attr_name, const char *id_value) { xmlDoc *doc = NULL; xmlNode *sign_tmpl = NULL, *old_parent = NULL; xmlSecDSigCtx *dsig_ctx = NULL; xmlAttr *id_attr = NULL; lasso_error_t rc = 0; g_return_val_if_fail(context.signature_method, LASSO_DS_ERROR_INVALID_SIGALG); g_return_val_if_fail(context.signature_key, LASSO_DS_ERROR_PRIVATE_KEY_LOAD_FAILED); sign_tmpl = xmlSecFindNode(xmlnode, xmlSecNodeSignature, xmlSecDSigNs); goto_cleanup_if_fail_with_rc(sign_tmpl != NULL, LASSO_DS_ERROR_SIGNATURE_TEMPLATE_NOT_FOUND); doc = xmlNewDoc((xmlChar*)"1.0"); old_parent = xmlnode->parent; xmlnode->parent = NULL; xmlDocSetRootElement(doc, xmlnode); xmlSetTreeDoc(sign_tmpl, doc); if (id_attr_name && id_value) { id_attr = xmlHasProp(xmlnode, (xmlChar*)id_attr_name); xmlAddID(NULL, doc, (xmlChar*)id_value, id_attr); } dsig_ctx = xmlSecDSigCtxCreate(NULL); lasso_assign_sec_key(dsig_ctx->signKey, context.signature_key); if (xmlSecDSigCtxSign(dsig_ctx, sign_tmpl) < 0) { goto_cleanup_with_rc(LASSO_DS_ERROR_SIGNATURE_FAILED); } cleanup: if (doc) { xmlRemoveID(doc, id_attr); xmlUnlinkNode(xmlnode); lasso_release_doc(doc); xmlnode->parent = old_parent; xmlSetTreeDoc(xmlnode, NULL); } lasso_release_signature_context(dsig_ctx); return rc; } gchar* lasso_node_build_deflated_query(LassoNode *node) { /* actually deflated and b64'ed and url-escaped */ xmlNode *xmlnode; gchar *result; xmlnode = lasso_node_get_xmlNode(node, FALSE); result = lasso_xmlnode_build_deflated_query(xmlnode); xmlFreeNode(xmlnode); return result; } gchar* lasso_xmlnode_build_deflated_query(xmlNode *xmlnode) { xmlOutputBuffer *output_buffer; xmlBuffer *buffer; xmlCharEncodingHandlerPtr handler = NULL; xmlChar *ret, *b64_ret; char *rret; unsigned long in_len; int rc = 0; z_stream stream; handler = xmlFindCharEncodingHandler("utf-8"); buffer = xmlBufferCreate(); output_buffer = xmlOutputBufferCreateBuffer(buffer, handler); xmlNodeDumpOutput(output_buffer, NULL, xmlnode, 0, 0, NULL); xmlOutputBufferClose(output_buffer); xmlBufferAdd(buffer, BAD_CAST "", 1); in_len = strlen((char*)xmlBufferContent(buffer)); ret = g_malloc(in_len * 2); /* deflating should never increase the required size but we are * more conservative than that. Twice the size should be * enough. */ stream.next_in = (xmlChar*)xmlBufferContent(buffer); stream.avail_in = in_len; stream.next_out = ret; stream.avail_out = in_len * 2; stream.zalloc = NULL; stream.zfree = NULL; stream.opaque = NULL; /* -MAX_WBITS to disable zib headers */ rc = deflateInit2(&stream, Z_DEFAULT_COMPRESSION, Z_DEFLATED, -MAX_WBITS, 5, 0); if (rc == Z_OK) { rc = deflate(&stream, Z_FINISH); if (rc != Z_STREAM_END) { deflateEnd(&stream); if (rc == Z_OK) { rc = Z_BUF_ERROR; } } else { rc = deflateEnd(&stream); } } xmlBufferFree(buffer); if (rc != Z_OK) { lasso_release(ret); message(G_LOG_LEVEL_CRITICAL, "Failed to deflate"); return NULL; } b64_ret = xmlSecBase64Encode(ret, stream.total_out, 0); lasso_release(ret); ret = lasso_xmlURIEscapeStr(b64_ret, NULL); rret = g_strdup((char*)ret); xmlFree(b64_ret); xmlFree(ret); return rret; } void lasso_get_query_string_param_value(const char *qs, const char *param_key, const char **value, size_t *length) { size_t key_size = strlen(param_key); *value = NULL; *length = 0; while (qs) { if (strncmp(qs, param_key, key_size) == 0 && qs[key_size] == '=') { char *end; *value = &qs[key_size+1]; end = strchr(*value, '&'); if (! end) { end = strchr(*value, ';'); } if (end) { *length = (ptrdiff_t)(end - *value); } else { *length = strlen(*value); } return; } qs = strchr(qs, '&'); } } unsigned char* lasso_inflate(unsigned char *input, size_t len, size_t *outlen) { z_stream zstr; unsigned char *output; int z_err; *outlen = 0; zstr.zalloc = NULL; zstr.zfree = NULL; zstr.opaque = NULL; // add one to account for the zero byte output = g_malloc(len*20+1); zstr.avail_in = len; zstr.next_in = (unsigned char*)input; zstr.total_in = 0; zstr.avail_out = len*20; zstr.total_out = 0; zstr.next_out = output; z_err = inflateInit2(&zstr, -MAX_WBITS); if (z_err != Z_OK) { message(G_LOG_LEVEL_CRITICAL, "Failed to inflateInit"); lasso_release_string(output); return FALSE; } z_err = inflate(&zstr, Z_FINISH); if (z_err != Z_STREAM_END) { message(G_LOG_LEVEL_CRITICAL, "Failed to inflate"); inflateEnd(&zstr); lasso_release_string(output); return NULL; } output[zstr.total_out] = 0; inflateEnd(&zstr); *outlen = zstr.total_out; return output; } gboolean lasso_node_init_from_deflated_query_part(LassoNode *node, char *deflate_string) { xmlChar *buffer= NULL; char *decoded = NULL; int decoded_len = 0; xmlChar *re = NULL; size_t re_len = 0; xmlDoc *doc = NULL; xmlNode *root = NULL; gboolean rc = TRUE; buffer = (xmlChar*)xmlURIUnescapeString(deflate_string, 0, NULL); goto_cleanup_if_fail_with_rc(lasso_base64_decode((char*)buffer, &decoded, &decoded_len), FALSE); re = lasso_inflate((unsigned char*)decoded, decoded_len, &re_len); goto_cleanup_if_fail_with_rc_with_warning(re != NULL, FALSE); doc = lasso_xml_parse_memory((char*)re, strlen((char*)re)); goto_cleanup_if_fail_with_rc_with_warning(doc != NULL, FALSE); root = xmlDocGetRootElement(doc); lasso_node_init_from_xml(node, root); cleanup: lasso_release_xml_string(buffer); lasso_release_string(decoded); lasso_release_string(re); lasso_release_doc(doc); return rc; } char* lasso_concat_url_query(const char *url, const char *query) { if (strchr(url, '?')) { return g_strdup_printf("%s&%s", url, query); } else { return g_strdup_printf("%s?%s", url, query); } } static void structuredErrorFunc (void *userData, xmlErrorPtr error) { *(int*)userData = error->code; } /** * lasso_eval_xpath_expression: * @xpath_ctx: the XPath context object * @expression: a string containg the XPath expression to evaluate * @xpath_object_ptr: pointer to an output variable to store the resulting XPath object, can be * NULL. * @xpath_error_code: pointer to an output variable to store an eventual XPath error code, can be * NULL. * * Evaluates a given XPath expression in the given XPath context. Eventually return an XPath object * and/or an error code. * * Return value: TRUE if no error occurred during evaluation, FALSE otherwise. */ gboolean lasso_eval_xpath_expression(xmlXPathContextPtr xpath_ctx, const char *expression, xmlXPathObjectPtr *xpath_object_ptr, int *xpath_error_code) { xmlXPathObject *xpath_object = NULL; int errorCode = 0; xmlStructuredErrorFunc oldStructuredErrorFunc; gboolean rc = TRUE; g_return_val_if_fail(xpath_ctx != NULL && expression != NULL, FALSE); if (xpath_error_code) { /* reset */ *xpath_error_code = 0; } oldStructuredErrorFunc = xpath_ctx->error; xpath_ctx->error = structuredErrorFunc; xpath_ctx->userData = &errorCode; xpath_object = xmlXPathEvalExpression((xmlChar*)expression, xpath_ctx); xpath_ctx->error = oldStructuredErrorFunc; xpath_ctx->userData = NULL; if (xpath_object) { if (xpath_object_ptr) { lasso_transfer_xpath_object(*xpath_object_ptr, xpath_object); } } else { rc = FALSE; } if (xpath_error_code && errorCode) { *xpath_error_code = errorCode; } lasso_release_xpath_object(xpath_object); return rc; } static gboolean lasso_saml_constrain_dsigctxt(xmlSecDSigCtxPtr dsigCtx) { /* Limit allowed transforms for signature and reference processing */ if((xmlSecDSigCtxEnableSignatureTransform(dsigCtx, xmlSecTransformInclC14NId) < 0) || (xmlSecDSigCtxEnableSignatureTransform(dsigCtx, xmlSecTransformExclC14NId) < 0) || (xmlSecDSigCtxEnableSignatureTransform(dsigCtx, xmlSecTransformInclC14NWithCommentsId) < 0) || (xmlSecDSigCtxEnableSignatureTransform(dsigCtx, xmlSecTransformExclC14NWithCommentsId) < 0) || (xmlSecDSigCtxEnableSignatureTransform(dsigCtx, xmlSecTransformInclC14N11Id) < 0) || (xmlSecDSigCtxEnableSignatureTransform(dsigCtx, xmlSecTransformInclC14N11WithCommentsId) < 0) || (xmlSecDSigCtxEnableSignatureTransform(dsigCtx, xmlSecTransformSha512Id) < 0) || (xmlSecDSigCtxEnableSignatureTransform(dsigCtx, xmlSecTransformHmacSha512Id) < 0) || (xmlSecDSigCtxEnableSignatureTransform(dsigCtx, xmlSecTransformRsaSha512Id) < 0) ) { message(G_LOG_LEVEL_CRITICAL, "Error: failed to limit allowed signature transforms"); return FALSE; } if (lasso_get_min_signature_method() <= LASSO_SIGNATURE_METHOD_RSA_SHA384) { if ((xmlSecDSigCtxEnableSignatureTransform(dsigCtx, xmlSecTransformSha384Id) < 0) || (xmlSecDSigCtxEnableSignatureTransform(dsigCtx, xmlSecTransformHmacSha384Id) < 0) || (xmlSecDSigCtxEnableSignatureTransform(dsigCtx, xmlSecTransformRsaSha384Id) < 0)) { message(G_LOG_LEVEL_CRITICAL, "Error: failed to limit allowed sha384 signature transforms"); return FALSE; } if (xmlSecDSigCtxEnableReferenceTransform(dsigCtx, xmlSecTransformSha384Id) < 0) { message(G_LOG_LEVEL_CRITICAL, "Error: failed to limit allowed sha384 reference transforms"); return FALSE; } } if (lasso_get_min_signature_method() <= LASSO_SIGNATURE_METHOD_RSA_SHA256) { if ((xmlSecDSigCtxEnableSignatureTransform(dsigCtx, xmlSecTransformSha256Id) < 0) || (xmlSecDSigCtxEnableSignatureTransform(dsigCtx, xmlSecTransformHmacSha256Id) < 0) || (xmlSecDSigCtxEnableSignatureTransform(dsigCtx, xmlSecTransformRsaSha256Id) < 0)) { message(G_LOG_LEVEL_CRITICAL, "Error: failed to limit allowed sha256 signature transforms"); return FALSE; } if (xmlSecDSigCtxEnableReferenceTransform(dsigCtx, xmlSecTransformSha256Id) < 0) { message(G_LOG_LEVEL_CRITICAL, "Error: failed to limit allowed sha256 reference transforms"); return FALSE; } } if (lasso_get_min_signature_method() <= LASSO_SIGNATURE_METHOD_RSA_SHA1) { if ((xmlSecDSigCtxEnableSignatureTransform(dsigCtx, xmlSecTransformSha1Id) < 0) || (xmlSecDSigCtxEnableSignatureTransform(dsigCtx, xmlSecTransformHmacSha1Id) < 0) || (xmlSecDSigCtxEnableSignatureTransform(dsigCtx, xmlSecTransformDsaSha1Id) < 0) || (xmlSecDSigCtxEnableSignatureTransform(dsigCtx, xmlSecTransformRsaSha1Id) < 0)) { message(G_LOG_LEVEL_CRITICAL, "Error: failed to limit allowed sha1 signature transforms"); return FALSE; } if (xmlSecDSigCtxEnableReferenceTransform(dsigCtx, xmlSecTransformSha1Id) < 0) { message(G_LOG_LEVEL_CRITICAL, "Error: failed to limit allowed sha1 reference transforms"); return FALSE; } } if((xmlSecDSigCtxEnableReferenceTransform(dsigCtx, xmlSecTransformInclC14NId) < 0) || (xmlSecDSigCtxEnableReferenceTransform(dsigCtx, xmlSecTransformExclC14NId) < 0) || (xmlSecDSigCtxEnableSignatureTransform(dsigCtx, xmlSecTransformInclC14NWithCommentsId) < 0) || (xmlSecDSigCtxEnableSignatureTransform(dsigCtx, xmlSecTransformExclC14NWithCommentsId) < 0) || (xmlSecDSigCtxEnableSignatureTransform(dsigCtx, xmlSecTransformInclC14N11Id) < 0) || (xmlSecDSigCtxEnableSignatureTransform(dsigCtx, xmlSecTransformInclC14N11WithCommentsId) < 0) || (xmlSecDSigCtxEnableReferenceTransform(dsigCtx, xmlSecTransformSha512Id) < 0) || (xmlSecDSigCtxEnableReferenceTransform(dsigCtx, xmlSecTransformEnvelopedId) < 0)) { message(G_LOG_LEVEL_CRITICAL, "Error: failed to limit allowed reference transforms"); return FALSE; } /* Limit possible key info to X509, RSA and DSA */ if((xmlSecPtrListAdd(&(dsigCtx->keyInfoReadCtx.enabledKeyData), BAD_CAST xmlSecKeyDataX509Id) < 0) || (xmlSecPtrListAdd(&(dsigCtx->keyInfoReadCtx.enabledKeyData), BAD_CAST xmlSecKeyDataHmacId) < 0) || (xmlSecPtrListAdd(&(dsigCtx->keyInfoReadCtx.enabledKeyData), BAD_CAST xmlSecKeyDataRsaId) < 0) || (xmlSecPtrListAdd(&(dsigCtx->keyInfoReadCtx.enabledKeyData), BAD_CAST xmlSecKeyDataDsaId) < 0)) { message(G_LOG_LEVEL_CRITICAL, "Error: failed to limit allowed key data"); return FALSE; } return TRUE; } /** * lasso_verify_signature: * @signed_node: an #xmlNode containing an enveloped xmlDSig signature * @doc: (allow-none): the eventual #xmlDoc from which the node is extracted, if none is given then it will be * created * @id_attr_name: the id attribune name for this node * @keys_manager: (allow-none): an #xmlSecKeysMnr containing the CA cert chain, to validate the key in the * signature if there is one. * @public_key: (allow-none): a public key to validate the signature, if present the function ignore the key * contained in the signature. * @signature_verification_option: flag to specify option about signature validation, see * #SignatureVerificationOption. * @uri_references: if the signature references multiple nodes, return them as a list of node IDs. * * This function validate a signature on an xmlNode following the instructions given in the document * Assertions and Protocol or the OASIS Security Markup Language (SAML) V1.1. * * The only kind of references that are accepted in thoses signatures are node ID references, * looking like #xxx;. * * Beware that it does not validate every needed properties for a SAML assertion, request or * response to be acceptable. * * Return: 0 if signature was validated, and error code otherwise. */ int lasso_verify_signature(xmlNode *signed_node, xmlDoc *doc, const char *id_attr_name, xmlSecKeysMngr *keys_manager, xmlSecKey *public_key, SignatureVerificationOption signature_verification_option, GList **uri_references) { int rc = LASSO_DS_ERROR_SIGNATURE_VERIFICATION_FAILED; xmlNodePtr signature = NULL; xmlSecDSigCtx *dsigCtx = NULL; xmlChar *id = NULL; char *reference_uri = NULL; xmlSecDSigReferenceCtx *dsig_reference_ctx = NULL; gboolean free_the_doc = FALSE; g_return_val_if_fail(signed_node && (keys_manager || public_key), LASSO_PARAM_ERROR_INVALID_VALUE); if (lasso_flag_verify_signature == FALSE) { return 0; } /* Find signature as direct child. */ signature = xmlSecFindChild(signed_node, xmlSecNodeSignature, xmlSecDSigNs); goto_cleanup_if_fail_with_rc (signature, LASSO_DS_ERROR_SIGNATURE_NOT_FOUND); /* Create a temporary doc, if needed */ if (doc == NULL) { doc = xmlNewDoc((xmlChar*)XML_DEFAULT_VERSION); goto_cleanup_if_fail_with_rc(doc, LASSO_ERROR_OUT_OF_MEMORY); xmlDocSetRootElement(doc, signed_node); free_the_doc = TRUE; } /* Find ID */ if (id_attr_name) { id = xmlGetProp(signed_node, (xmlChar*)id_attr_name); if (id && (xmlGetID(doc, id) == NULL)) { xmlAddID(NULL, doc, id, xmlHasProp(signed_node, (xmlChar*)id_attr_name)); } } /* Create DSig context */ dsigCtx = xmlSecDSigCtxCreate(keys_manager); goto_cleanup_if_fail_with_rc(doc, LASSO_DS_ERROR_CONTEXT_CREATION_FAILED); /* XXX: Is xmlSecTransformUriTypeSameEmpty permitted ? * I would say yes only if signed_node == signature->parent. */ dsigCtx->enabledReferenceUris = 0; dsigCtx->enabledReferenceUris |= xmlSecTransformUriTypeSameDocument; if (signature_verification_option & EMPTY_URI) { dsigCtx->enabledReferenceUris |= xmlSecTransformUriTypeEmpty; } goto_cleanup_if_fail_with_rc(lasso_saml_constrain_dsigctxt(dsigCtx), LASSO_DS_ERROR_SIGNATURE_VERIFICATION_FAILED); /* Given a public key use it to validate the signature ! */ if (public_key) { dsigCtx->signKey = xmlSecKeyDuplicate(public_key); } /* Verify signature */ goto_cleanup_if_fail_with_rc(xmlSecDSigCtxVerify(dsigCtx, signature) >= 0, LASSO_DS_ERROR_SIGNATURE_VERIFICATION_FAILED); goto_cleanup_if_fail_with_rc(dsigCtx->status == xmlSecDSigStatusSucceeded, LASSO_DS_ERROR_SIGNATURE_VERIFICATION_FAILED); /* There should be only one reference */ goto_cleanup_if_fail_with_rc(((signature_verification_option & NO_SINGLE_REFERENCE) == 0) || xmlSecPtrListGetSize(&(dsigCtx->signedInfoReferences)) == 1, LASSO_DS_ERROR_TOO_MUCH_REFERENCES); /* The reference should be to the signed node */ { gboolean ok = FALSE; reference_uri = g_strdup_printf("#%s", id); dsig_reference_ctx = (xmlSecDSigReferenceCtx*) xmlSecPtrListGetItem(&(dsigCtx->signedInfoReferences), 0); ok |= dsig_reference_ctx != 0 && lasso_strisequal((char*)dsig_reference_ctx->uri, reference_uri); ok |= (signature_verification_option & EMPTY_URI) && xmlDocGetRootElement(doc) == signed_node && dsig_reference_ctx != NULL && lasso_strisequal((char*)dsig_reference_ctx->uri, ""); goto_cleanup_if_fail_with_rc(ok, LASSO_DS_ERROR_INVALID_REFERENCE_FOR_SAML); } /* Keep URI of all nodes signed if asked */ if (uri_references) { gint size = xmlSecPtrListGetSize(&(dsigCtx->signedInfoReferences)); int i; for (i = 0; i < size; ++i) { dsig_reference_ctx = (xmlSecDSigReferenceCtx*)xmlSecPtrListGetItem(&(dsigCtx->signedInfoReferences), i); if (dsig_reference_ctx == NULL || dsig_reference_ctx->uri == NULL) { message(G_LOG_LEVEL_CRITICAL, "dsig_reference_ctx->uri cannot be null"); continue; } lasso_list_add_xml_string(*uri_references, dsig_reference_ctx->uri); } } if (dsigCtx->status == xmlSecDSigStatusSucceeded) { rc = 0; } cleanup: lasso_release_string(reference_uri); lasso_release_signature_context(dsigCtx); if (free_the_doc) { xmlUnlinkNode(signed_node); xmlSetTreeDoc(signed_node, NULL); lasso_release_doc(doc); } lasso_release_string(id); return rc; } /** * lasso_xml_next_element_node: * @node: the pointer to an XML node. * * Seraches for the next element node. * * Returns: the pointer to next element node or NULL if it is not found. */ xmlNodePtr lasso_xml_next_element_node(xmlNodePtr node) { for (; node != NULL && node->type != XML_ELEMENT_NODE; node = node->next); return node; } /** * lasso_xml_get_node_ns_href: * @node: the pointer to node. * * Get's node's namespace href. * * Returns: node's namespace href. */ const xmlChar* lasso_xml_get_node_ns_href(const xmlNodePtr node) { xmlNsPtr ns; if (node == NULL) { return NULL; } /* do we have a namespace in the node? */ if (node->ns != NULL) { return node->ns->href; } /* search for default namespace */ ns = xmlSearchNs(node->doc, node, NULL); if (ns != NULL) { return ns->href; } return NULL; } /** * lasso_xml_is_element_node: * @node: the pointer to an XML node. * @name: the name, * @ns: the namespace href. * * Checks that the node has a given name and a given namespace href. * * Returns: true if the node matches false otherwise. */ gboolean lasso_xml_is_element_node(const xmlNodePtr node, const xmlChar *name, const xmlChar *ns) { if (node == NULL) { return FALSE; } return (node->type == XML_ELEMENT_NODE && xmlStrEqual(node->name, name) && xmlStrEqual(lasso_xml_get_node_ns_href(node), ns)); } gboolean lasso_xml_is_soap(xmlNode *root) { return lasso_xml_is_element_node(root, BAD_CAST "Envelope", BAD_CAST LASSO_SOAP_ENV_HREF); } /** * lasso_xml_soap11_get_header: * @envelope_node: the pointer to node. * * Gets pointer to the node. * * Returns: pointer to node or NULL if an error occurs. */ xmlNodePtr lasso_xml_soap11_get_header(xmlNodePtr envelope_node) { xmlNodePtr node; if (envelope_node == NULL) { return NULL; } /* optional Header node is first */ node = lasso_xml_next_element_node(envelope_node->children); if (lasso_xml_is_element_node(node, BAD_CAST "Header", BAD_CAST LASSO_SOAP_ENV_HREF)) { return node; } return NULL; } /** * lasso_xml_soap11_get_body: * @envelope_node: the pointer to node. * * Gets pointer to the node. * * Returns: pointer to node or NULL if an error occurs. */ xmlNodePtr lasso_xml_soap11_get_body(xmlNodePtr envelope_node) { xmlNodePtr node; if (envelope_node == NULL) { return NULL; } /* optional Header node first */ node = lasso_xml_next_element_node(envelope_node->children); if (lasso_xml_is_element_node(node, BAD_CAST "Header", BAD_CAST LASSO_SOAP_ENV_HREF)) { node = lasso_xml_next_element_node(node->next); } /* Body node is next */ if (!lasso_xml_is_element_node(node, BAD_CAST "Body", BAD_CAST LASSO_SOAP_ENV_HREF)) { return NULL; } return node; } xmlNode* lasso_xml_get_soap_content(xmlNode *root) { gboolean is_soap11 = FALSE; xmlNode *content = NULL; is_soap11 = lasso_xml_is_element_node(root, BAD_CAST "Envelope", BAD_CAST LASSO_SOAP_ENV_HREF); if (is_soap11) { xmlNode *body; if (is_soap11) { body = lasso_xml_soap11_get_body(root); } if (body) { content = xmlSecGetNextElementNode(body->children); } } return content; } LassoMessageFormat lasso_xml_parse_message(const char *message, LassoMessageFormat constraint, xmlDoc **doc_out, xmlNode **root_out) { const char *msg = NULL; int msg_len = 0; char *base64_decoded_message = NULL; LassoMessageFormat rc = LASSO_MESSAGE_FORMAT_UNKNOWN; xmlDoc *doc = NULL; xmlNode *root = NULL; gboolean any = constraint == LASSO_MESSAGE_FORMAT_UNKNOWN; /* BASE64 case */ if (any || constraint == LASSO_MESSAGE_FORMAT_BASE64) { if (message[0] != 0 && is_base64(message)) { if (lasso_base64_decode(message, &base64_decoded_message, &msg_len)) { rc = LASSO_MESSAGE_FORMAT_BASE64; msg = base64_decoded_message; } } } if (! msg) { msg = message; msg_len = strlen(message); } /* XML case */ if (any || constraint == LASSO_MESSAGE_FORMAT_BASE64 || constraint == LASSO_MESSAGE_FORMAT_XML || constraint == LASSO_MESSAGE_FORMAT_SOAP) { if (strchr(msg, '<')) { doc = lasso_xml_parse_memory(msg, msg_len); if (doc == NULL) { rc = LASSO_MESSAGE_FORMAT_UNKNOWN; goto cleanup; } root = xmlDocGetRootElement(doc); if (! root) { rc = LASSO_MESSAGE_FORMAT_ERROR; goto cleanup; } if (any || constraint == LASSO_MESSAGE_FORMAT_SOAP) { gboolean is_soap = FALSE; is_soap = lasso_xml_is_soap(root); if (is_soap) { root = lasso_xml_get_soap_content(root); } if (is_soap) { rc = LASSO_MESSAGE_FORMAT_SOAP; goto cleanup; } if (rc == LASSO_MESSAGE_FORMAT_BASE64) { goto cleanup; } rc = LASSO_MESSAGE_FORMAT_XML; } } } cleanup: lasso_release(base64_decoded_message); if (doc_out) { *doc_out = doc; if (root_out) { *root_out = root; } } else { lasso_release_doc(doc); } return rc; } static gboolean is_base64(const char *message) { const char *c; c = message; while (*c != 0 && (isalnum((int)*c) || *c == '+' || *c == '/' || *c == '\n' || *c == '\r')) c++; while (*c == '=' || *c == '\n' || *c == '\r') c++; /* trailing = */ if (*c == 0) return TRUE; return FALSE; } /** * lasso_node_decrypt_xmlnode * @encrypted_element: an EncrytpedData #xmlNode * @encrypted_keys: a #GList of EncrytpedKey #xmlNode * @encryption_private_key : a private key to decrypt the node * @output: a pointer a #LassoNode variable to store the decrypted element * * Try to decrypt an encrypted element. * * Return value: 0 if successful, * LASSO_DS_ERROR_DECRYPTION_FAILED if decrypted failed, * LASSO_XML_ERROR_OBJECT_CONSTRUCTION_FAILED if construction of a #LassoNode from the decrypted * content failed, * LASSO_DS_ERROR_CONTEXT_CREATION_FAILED if some context initialization failed. **/ int lasso_node_decrypt_xmlnode(xmlNode* encrypted_element, GList *encrypted_keys, xmlSecKey *encryption_private_key, LassoNode **output) { xmlDocPtr doc = NULL; xmlDocPtr doc2 = NULL; xmlSecEncCtxPtr encCtx = NULL; xmlSecKeyPtr sym_key = NULL; xmlSecBufferPtr key_buffer = NULL; LassoNode *decrypted_node = NULL; xmlNodePtr encrypted_data_node = NULL; xmlNodePtr encrypted_key_node = NULL; xmlNodePtr encryption_method_node = NULL; xmlChar *algorithm = NULL; xmlSecKeyDataId key_type; GList *i = NULL; int rc = LASSO_XMLENC_ERROR_INVALID_ENCRYPTED_DATA; if (encryption_private_key == NULL || !xmlSecKeyIsValid(encryption_private_key)) { message(G_LOG_LEVEL_WARNING, "Invalid decryption key"); rc = LASSO_PROFILE_ERROR_MISSING_ENCRYPTION_PRIVATE_KEY; goto cleanup; } /* Need to duplicate it because xmlSecEncCtxDestroy(encCtx); will destroy it */ encryption_private_key = xmlSecKeyDuplicate(encryption_private_key); encrypted_data_node = xmlCopyNode(encrypted_element, 1); /* Get the encryption algorithm for EncryptedData in its EncryptionMethod node */ encryption_method_node = xmlSecTmplEncDataGetEncMethodNode(encrypted_data_node); if (encryption_method_node == NULL) { message(G_LOG_LEVEL_WARNING, "No EncryptionMethod node in EncryptedData"); goto cleanup; } algorithm = xmlGetProp(encryption_method_node, (xmlChar *)"Algorithm"); if (algorithm == NULL) { message(G_LOG_LEVEL_WARNING, "No EncryptionMethod"); goto cleanup; } if (strstr((char*)algorithm , "#aes")) { key_type = xmlSecKeyDataAesId; } else if (strstr((char*)algorithm , "des")) { key_type = xmlSecKeyDataDesId; } else { message(G_LOG_LEVEL_WARNING, "Unknown EncryptionMethod"); goto cleanup; } /* Get the EncryptedKey */ if (encrypted_keys != NULL) { for (i = encrypted_keys; i; i = g_list_next(i)) { if (i->data == NULL) continue; if (strcmp((char*)((xmlNode*)i->data)->name, "EncryptedKey") == 0) { encrypted_key_node = xmlCopyNode((xmlNode*)(i->data), 1); break; } } } else { /* Look an EncryptedKey inside the EncryptedData */ xmlNodePtr key_info; do { key_info = xmlSecFindChild(encrypted_data_node, xmlSecNodeKeyInfo, xmlSecDSigNs); if (! key_info) break; encrypted_key_node = xmlSecFindChild(key_info, xmlSecNodeEncryptedKey, xmlSecEncNs); } while (0); } if (encrypted_key_node == NULL) { message(G_LOG_LEVEL_WARNING, "No EncryptedKey node"); goto cleanup; } /* Create a document to contain the node to decrypt */ doc = xmlNewDoc((xmlChar*)"1.0"); xmlDocSetRootElement(doc, encrypted_data_node); doc2 = xmlNewDoc((xmlChar*)"1.0"); xmlDocSetRootElement(doc2, encrypted_key_node); /* create encryption context to decrypt EncryptedKey */ encCtx = xmlSecEncCtxCreate(NULL); if (encCtx == NULL) { message(G_LOG_LEVEL_WARNING, "Failed to create encryption context"); rc = LASSO_DS_ERROR_CONTEXT_CREATION_FAILED; goto cleanup; } encCtx->encKey = encryption_private_key; encCtx->mode = xmlEncCtxModeEncryptedKey; /* decrypt the EncryptedKey */ key_buffer = xmlSecEncCtxDecryptToBuffer(encCtx, encrypted_key_node); if (key_buffer != NULL) { sym_key = xmlSecKeyReadBuffer(key_type, key_buffer); } rc = LASSO_DS_ERROR_ENCRYPTION_FAILED; if (sym_key == NULL) { goto cleanup; } /* create encryption context to decrypt EncryptedData */ xmlSecEncCtxDestroy(encCtx); encCtx = xmlSecEncCtxCreate(NULL); if (encCtx == NULL) { message(G_LOG_LEVEL_WARNING, "Failed to create encryption context"); rc = LASSO_DS_ERROR_CONTEXT_CREATION_FAILED; goto cleanup; } encCtx->encKey = sym_key; encCtx->mode = xmlEncCtxModeEncryptedData; /* decrypt the EncryptedData */ if ((xmlSecEncCtxDecrypt(encCtx, encrypted_data_node) < 0) || (encCtx->result == NULL)) { rc = LASSO_XMLENC_ERROR_INVALID_ENCRYPTED_DATA; message(G_LOG_LEVEL_WARNING, "EncryptedData decryption failed"); goto cleanup; } decrypted_node = lasso_node_new_from_xmlNode(doc->children); if (decrypted_node) { rc = 0; } else { rc = LASSO_XML_ERROR_OBJECT_CONSTRUCTION_FAILED; } if (output) { lasso_assign_gobject(*output, decrypted_node); } cleanup: if (doc == NULL && encrypted_data_node) { xmlFreeNode(encrypted_data_node); } if (doc2 == NULL && encrypted_key_node) { xmlFreeNode(encrypted_key_node); } if (encCtx) { xmlSecEncCtxDestroy(encCtx); } lasso_release_doc(doc); lasso_release_doc(doc2); lasso_release_gobject(decrypted_node); lasso_release_xml_string(algorithm); return rc; } static void xml_logv(int log_level, const char *msg, va_list arg_ptr) { char buffer[512], *escaped; vsnprintf(buffer, 512, msg, arg_ptr); escaped = g_strescape(buffer, NULL); g_log(LASSO_LOG_DOMAIN, log_level, "libxml2: %s", escaped); lasso_release_string(escaped); } static void __xmlWarningFunc(G_GNUC_UNUSED void *userData, const char *msg, ...) { va_list arg_ptr; va_start(arg_ptr, msg); xml_logv(G_LOG_LEVEL_WARNING, msg, arg_ptr); va_end(arg_ptr); } static void __xmlErrorFunc(G_GNUC_UNUSED void *userData, const char *msg, ...) { va_list arg_ptr; va_start(arg_ptr, msg); xml_logv(G_LOG_LEVEL_CRITICAL, msg, arg_ptr); va_end(arg_ptr); } /** * lasso_xml_parse_memory: * @buffer: an pointer to a char array * @size: the size of the array * * Parse an XML in-memory block and build a tree; exactly like xmlParseMemory * safe two exceptions: * * * it won't download anything from the network (XML_PARSE_NONET) * * * it will refuse documents with a DTD (for security reason) * * * * Return value: the resulting document tree **/ xmlDocPtr lasso_xml_parse_memory(const char *buffer, int size) { return lasso_xml_parse_memory_with_error(buffer, size, NULL); } xmlDocPtr lasso_xml_parse_memory_with_error(const char *buffer, int size, xmlError *error) { xmlDocPtr ret; xmlParserCtxtPtr ctxt; ctxt = xmlCreateMemoryParserCtxt(buffer, size); if (ctxt == NULL) { return NULL; } xmlDetectSAX2(ctxt); if (ctxt->errNo == XML_ERR_NO_MEMORY) { return NULL; } ctxt->recovery = 0; xmlCtxtUseOptions(ctxt, XML_PARSE_NONET); if (error) { ctxt->sax->warning = NULL; ctxt->sax->error = NULL; ctxt->sax->fatalError = NULL; } else { /* reroute errors through GLib logger */ ctxt->sax->warning = __xmlWarningFunc; ctxt->sax->error = __xmlErrorFunc; } xmlParseDocument(ctxt); if (error) { xmlCopyError(&ctxt->lastError, error); } if (ctxt->wellFormed && ctxt->myDoc->intSubset != NULL) { message(G_LOG_LEVEL_WARNING, "Denied message with DTD content"); ctxt->wellFormed = 0; } if (ctxt->wellFormed) { ret = ctxt->myDoc; } else { ret = NULL; lasso_release_doc(ctxt->myDoc); ctxt->myDoc = NULL; } xmlFreeParserCtxt(ctxt); return ret; } /** * lasso_xml_parse_file: * @filepath: the file path * * Parse an XML file, report errors through GLib logger with the Lasso domain * * Return value: a newly create #xmlDoc object if successful, NULL otherwise. */ xmlDocPtr lasso_xml_parse_file(const char *filepath) { char *file_content; size_t file_length; GError *error = NULL; if (g_file_get_contents(filepath, &file_content, &file_length, &error)) { xmlDocPtr ret; ret = lasso_xml_parse_memory(file_content, file_length); lasso_release(file_content); return ret; } else { message(G_LOG_LEVEL_CRITICAL, "Cannot read XML file %s: %s", filepath, error->message); g_error_free(error); return NULL; } } /* (almost) straight from libxml2 internal API */ static void xmlDetectSAX2(xmlParserCtxtPtr ctxt) { if (ctxt == NULL) return; #ifdef LIBXML_SAX1_ENABLED if ((ctxt->sax != NULL) && (ctxt->sax->initialized == XML_SAX2_MAGIC) && ((ctxt->sax->startElementNs != NULL) || (ctxt->sax->endElementNs != NULL))) ctxt->sax2 = 1; #else ctxt->sax2 = 1; #endif /* LIBXML_SAX1_ENABLED */ ctxt->str_xml = xmlDictLookup(ctxt->dict, BAD_CAST "xml", 3); ctxt->str_xmlns = xmlDictLookup(ctxt->dict, BAD_CAST "xmlns", 5); ctxt->str_xml_ns = xmlDictLookup(ctxt->dict, XML_XML_NAMESPACE, 36); if ((ctxt->str_xml==NULL) || (ctxt->str_xmlns==NULL) || (ctxt->str_xml_ns == NULL)) { ctxt->errNo = XML_ERR_NO_MEMORY; } } /** * lasso_get_relaystate_from_query: * @query: a C-string containing the query part of an URL * * Extracts the relaystate argument contained in an URL query string. * * Return value: NULL if not relaystate is present in the URL, the RelayState decoded value * otherwise. */ char * lasso_get_relaystate_from_query(const char *query) { const char *start = NULL, *end = NULL; char *result = NULL; if (query == NULL) return NULL; if (strncmp(query, LASSO_SAML2_FIELD_RELAYSTATE "=", sizeof(LASSO_SAML2_FIELD_RELAYSTATE "=") - 1) == 0) { start = query + sizeof(LASSO_SAML2_FIELD_RELAYSTATE); } if (! start) { if (! start) { start = strstr(query, "&RelayState="); } if (! start) { start = strstr(query, ";RelayState="); } if (start) { start += sizeof(LASSO_SAML2_FIELD_RELAYSTATE "="); } } if (start) { ptrdiff_t length; const char *end2; end = strchr(start, '&'); end2 = strchr(start, ';'); if ((end2 != NULL) && ((end == NULL) || (end2 < end))) { end = end2; } if (end) { length = end-start; } else { length = strlen(start); } if (length > query_string_attribute_length_limit) { message(G_LOG_LEVEL_WARNING, "Received a RelayState of size %ti > %u", length, query_string_attribute_length_limit); } if (length) { result = xmlURIUnescapeString(start, length, NULL); } else { result = g_malloc0(1); } } return result; } /** * lasso_url_add_parameters: * @url: the original URL * @free: whether to free the URL parameter * @...: pairs of strings, key, value, followed by NULL * * Iterate over all pairs of key,value, and concatenate them to @url encoded as "&key=value", where * key and value are url-encoded. * If free is true and at least one pair was given, url is freed. If url is NULL, the first * ampersand is omitted. * * Return value: a newly allocated string, or url. */ char* lasso_url_add_parameters(char *url, gboolean free, ...) { char *old_url = url, *new_url = NULL; xmlChar *encoded_key = NULL, *encoded_value; va_list ap; va_start(ap, free); while (1) { char *key; char *value; key = va_arg(ap, char*); if (! key) { break; } encoded_key = lasso_xmlURIEscapeStr((xmlChar*)key, NULL); goto_cleanup_if_fail(encoded_key); value = va_arg(ap, char*); if (! value) { message(G_LOG_LEVEL_CRITICAL, "lasso_url_add_parameter: key without a value !!"); break; } encoded_value = lasso_xmlURIEscapeStr((xmlChar*)value, NULL); goto_cleanup_if_fail(encoded_value); if (old_url) { new_url = g_strdup_printf("%s&%s=%s", old_url, (char*)encoded_key, (char*)encoded_value); } else { new_url = g_strdup_printf("%s=%s", (char*)encoded_key, (char*)encoded_value); } if (old_url != url) { lasso_release_string(old_url); } old_url = new_url; lasso_release_xml_string(encoded_key); lasso_release_xml_string(encoded_value); } cleanup: va_end(ap); if (free && new_url != url) { lasso_release(url); } lasso_release_xml_string(encoded_key); return new_url; } xmlSecKey* _lasso_xmlsec_load_key_from_buffer(const char *buffer, size_t length, const char *password, LassoSignatureMethod signature_method, const char *certificate) { int i = 0; xmlSecKeyDataFormat key_formats[] = { xmlSecKeyDataFormatPem, xmlSecKeyDataFormatCertPem, xmlSecKeyDataFormatDer, xmlSecKeyDataFormatBinary, xmlSecKeyDataFormatCertDer, xmlSecKeyDataFormatPkcs8Der, xmlSecKeyDataFormatPkcs8Pem, 0 }; xmlSecKeyDataFormat cert_formats[] = { xmlSecKeyDataFormatCertPem, xmlSecKeyDataFormatCertDer, 0 }; xmlSecKey *private_key = NULL; /* is the signature algo allowed */ goto_cleanup_if_fail(lasso_allowed_signature_method(signature_method)); xmlSecErrorsDefaultCallbackEnableOutput(FALSE); switch (signature_method) { case LASSO_SIGNATURE_METHOD_RSA_SHA1: case LASSO_SIGNATURE_METHOD_DSA_SHA1: case LASSO_SIGNATURE_METHOD_RSA_SHA256: case LASSO_SIGNATURE_METHOD_RSA_SHA384: case LASSO_SIGNATURE_METHOD_RSA_SHA512: for (i = 0; key_formats[i] && private_key == NULL; i++) { private_key = xmlSecCryptoAppKeyLoadMemory((xmlSecByte*)buffer, length, key_formats[i], password, NULL, NULL); } break; case LASSO_SIGNATURE_METHOD_HMAC_SHA1: case LASSO_SIGNATURE_METHOD_HMAC_SHA256: case LASSO_SIGNATURE_METHOD_HMAC_SHA384: case LASSO_SIGNATURE_METHOD_HMAC_SHA512: private_key = xmlSecKeyReadMemory(xmlSecKeyDataHmacId, (xmlSecByte*)buffer, length); if (private_key) { xmlSecKeySetName(private_key, BAD_CAST "shared"); } break; case LASSO_SIGNATURE_METHOD_LAST: case LASSO_SIGNATURE_METHOD_NONE: g_assert_not_reached(); } goto_cleanup_if_fail(private_key != NULL); if (certificate) { int done = 0; switch (signature_method) { case LASSO_SIGNATURE_METHOD_RSA_SHA1: case LASSO_SIGNATURE_METHOD_DSA_SHA1: case LASSO_SIGNATURE_METHOD_RSA_SHA256: case LASSO_SIGNATURE_METHOD_RSA_SHA384: case LASSO_SIGNATURE_METHOD_RSA_SHA512: for (i=0; cert_formats[i]; i++) { if (xmlSecCryptoAppKeyCertLoad(private_key, certificate, cert_formats[i]) == 0) { done = 1; break; } if (xmlSecCryptoAppKeyCertLoadMemory(private_key, BAD_CAST certificate, strlen(certificate), cert_formats[i]) == 0) { done = 1; break; } } if (done == 0) { warning("Unable to load certificate: %s", certificate); } break; default: warning("Attaching a certificate for signature only " "works with DSA and RSA algorithms."); } } cleanup: xmlSecErrorsDefaultCallbackEnableOutput(TRUE); return private_key; } /** * lasso_base64_decode: * @from: the source base64 encoded string * @buffer: an output argument to place the resulting buffer pointer * @buffer_len: an output argument to place the resulting buffer length * * Decode the given string as Base64 and allocate a buffer for the decoded content, place the * pointer to the buffer in @buffer and the length in @buffer_len * * Return value: TRUE if successful, FALSE otherwise. */ gboolean lasso_base64_decode(const char *from, char **buffer, int *buffer_len) { int fromlen = 0; xmlChar *out = NULL; xmlSecSize outlen = 0; xmlSecSize decodedlen = 0; int rc = TRUE; int ret = 0; if (! from) { return FALSE; } fromlen = strlen(from); /* base64 map 4 bytes to 3 */ outlen = fromlen / 4 + (fromlen % 4 ? 1 : 0); outlen *= 3; outlen += 1; /* zero byte */ out = g_malloc0(outlen); #if LASSO_XMLSEC_VERSION_NUMBER >= 0x010223 xmlSecErrorsDefaultCallbackEnableOutput(FALSE); ret = xmlSecBase64Decode_ex(BAD_CAST from, out, outlen, &decodedlen); xmlSecErrorsDefaultCallbackEnableOutput(TRUE); if (ret == 0) { out[outlen - 1] = 0; lasso_transfer_string(*buffer, *((char**)&out)); *buffer_len = decodedlen; } else { rc = FALSE; } #else xmlSecErrorsDefaultCallbackEnableOutput(FALSE); ret = xmlSecBase64Decode(BAD_CAST from, out, outlen); xmlSecErrorsDefaultCallbackEnableOutput(TRUE); if (ret >= 0) { out[outlen - 1] = 0; lasso_transfer_string(*buffer, *((char**)&out)); *buffer_len = ret; } else { rc = FALSE; } #endif if (out) { lasso_release_string(out); } return rc; } /** * lasso_xmlURIEscapeStr: * @from: the source URI string * @list: optional list of characters not to escape * * Drop-in replacement for libxml2 xmlURIEscapeStr(), but encoding * everything but [A-Za-z0-9._~-] which are the unreserved chartacters * for RFC3986 section 2.3 * * Return value: a buffer containing the URL-encoded string or NULL on error */ xmlChar * lasso_xmlURIEscapeStr(const xmlChar *from, const xmlChar *list) { size_t len = 0; const xmlChar *fp; xmlChar *result; int ri; if (list == NULL) list = (xmlChar*)""; for (fp = from; *fp; fp++) { if (isalnum(*fp) || strchr("._~-", *fp) || strchr((char*)list, *fp)) len++; else len += 3; } result = g_malloc0(len + 1); ri = 0; for (fp = from; *fp; fp++) { if (isalnum(*fp) || strchr("._~-", *fp) || strchr((char*)list, *fp)) { result[ri++] = *fp; } else { int msb = (*fp & 0xf0) >> 4; int lsb = *fp & 0x0f; result[ri++] = '%'; result[ri++] = (msb > 9) ? 'A' + msb - 10 : '0' + msb; result[ri++] = (lsb > 9) ? 'A' + lsb - 10 : '0' + lsb; } } result[ri++] = '\0'; return result; } /** * lasso_xmlsec_load_private_key_from_buffer: * @buffer: a buffer containing a key in any format * @length: length of the buffer * @password: eventually a password */ xmlSecKey* lasso_xmlsec_load_private_key_from_buffer(const char *buffer, size_t length, const char *password, LassoSignatureMethod signature_method, const char *certificate) { xmlSecKey *private_key = NULL; private_key = _lasso_xmlsec_load_key_from_buffer(buffer, length, password, signature_method, certificate); /* special lasso metadata hack */ if (! private_key) { char *out = NULL; int len; if (lasso_base64_decode(buffer, &out, &len)) { private_key = _lasso_xmlsec_load_key_from_buffer((char*)out, len, password, signature_method, certificate); } lasso_release_string(out); } return private_key; } xmlSecKey* lasso_xmlsec_load_private_key(const char *filename_or_buffer, const char *password, LassoSignatureMethod signature_method, const char *certificate) { char *buffer = NULL; size_t length; xmlSecKey *ret; if (! filename_or_buffer) return NULL; if (g_file_get_contents(filename_or_buffer, &buffer, &length, NULL)) { ret = lasso_xmlsec_load_private_key_from_buffer(buffer, length, password, signature_method, certificate); } else { ret = lasso_xmlsec_load_private_key_from_buffer(filename_or_buffer, strlen(filename_or_buffer), password, signature_method, certificate); } lasso_release_string(buffer); return ret; } gboolean lasso_get_base64_content(xmlNode *node, char **content, size_t *length) { xmlChar *base64 = NULL; xmlChar *stripped_base64 = NULL; char *decoded = NULL; int decoded_length = 0; int rc = TRUE; goto_cleanup_if_fail_with_rc(node && content && length, FALSE); base64 = xmlNodeGetContent(node); goto_cleanup_if_fail_with_rc(base64, FALSE); /* skip spaces */ stripped_base64 = base64; while (*stripped_base64 && isspace(*stripped_base64)) stripped_base64++; goto_cleanup_if_fail_with_rc(lasso_base64_decode((char*)stripped_base64, &decoded, &decoded_length), FALSE); lasso_transfer_string(*content, decoded); *length = decoded_length; cleanup: lasso_release_xml_string(base64); lasso_release_string(decoded); return rc; } xmlSecKeyPtr lasso_xmlsec_load_key_info(xmlNode *key_descriptor) { xmlSecKeyPtr key, result = NULL; xmlNodePtr key_info = NULL; xmlSecKeyInfoCtx ctx = {0}; xmlSecKeysMngr *keys_mngr = NULL; xmlNodePtr key_value = NULL; int rc = 0; xmlChar *content = NULL; X509 *cert = NULL; xmlSecKeyDataPtr cert_data = NULL; xmlSecKeyDataPtr cert_key = NULL; if (! key_descriptor) return NULL; key_info = xmlSecFindChild(key_descriptor, xmlSecNodeKeyInfo, xmlSecDSigNs); if (! key_info) return NULL; keys_mngr = xmlSecKeysMngrCreate(); rc = xmlSecCryptoAppDefaultKeysMngrInit(keys_mngr); if (rc < 0) { goto next; } rc = xmlSecKeyInfoCtxInitialize(&ctx, keys_mngr); if (rc < 0) { goto next; } ctx.flags = XMLSEC_KEYINFO_FLAGS_DONT_STOP_ON_KEY_FOUND | XMLSEC_KEYINFO_FLAGS_X509DATA_DONT_VERIFY_CERTS; ctx.mode = xmlSecKeyInfoModeRead; ctx.keyReq.keyId = xmlSecKeyDataIdUnknown; ctx.keyReq.keyType = xmlSecKeyDataTypePublic; ctx.keyReq.keyUsage = xmlSecKeyDataUsageAny; ctx.certsVerificationDepth = 0; key = xmlSecKeyCreate(); if (lasso_flag_pem_public_key) { xmlSecErrorsDefaultCallbackEnableOutput(FALSE); } rc = xmlSecKeyInfoNodeRead(key_info, key, &ctx); if (lasso_flag_pem_public_key) { xmlSecErrorsDefaultCallbackEnableOutput(TRUE); } xmlSecKeyInfoCtxFinalize(&ctx); if (rc != 0) { goto next; } /* reference, do not free */ cert_data = xmlSecKeyGetData(key, xmlSecOpenSSLKeyDataX509Id); if (! cert_data) { goto next; } /* reference, do not free */ cert = xmlSecOpenSSLKeyDataX509GetCert(cert_data, 0); if (! cert) { goto next; } /* new value, free */ cert_key = xmlSecOpenSSLX509CertGetKey(cert); rc = xmlSecKeySetValue(key, cert_key); if (rc < 0) { xmlSecKeyDataDestroy(cert_key); } next: /* We found a key, exit */ if (xmlSecKeyIsValid(key)) { result = key; key = NULL; goto cleanup; } xmlSecKeyDestroy(key); if (lasso_flag_pem_public_key) { if (! (key_value = xmlSecFindChild(key_info, xmlSecNodeKeyValue, xmlSecDSigNs)) && ! (key_value = xmlSecFindNode(key_info, xmlSecNodeX509Certificate, xmlSecDSigNs))) { goto cleanup; } content = xmlNodeGetContent(key_value); if (content) { result = lasso_xmlsec_load_private_key_from_buffer((char*)content, strlen((char*)content), NULL, lasso_get_default_signature_method(), NULL); xmlFree(content); } } cleanup: lasso_release_key_manager(keys_mngr); return result; } /** * lasso_xmlnode_to_string: * @xmlnode: an #xmlNode structure * @format: whether to allow formatting (it break XML signatures) * * Transform an XML node to a C string * * Return value: a newly allocated C string */ char* lasso_xmlnode_to_string(xmlNode *node, gboolean format, int level) { xmlOutputBufferPtr output_buffer; xmlBuffer *buffer; char *str; if (! node) return NULL; buffer = xmlBufferCreate(); output_buffer = xmlOutputBufferCreateBuffer(buffer, NULL); xmlNodeDumpOutput(output_buffer, NULL, node, level, format ? 1 : 0, NULL); xmlOutputBufferClose(output_buffer); xmlBufferAdd(buffer, BAD_CAST "", 1); /* do not mix XML and GLib strings, so we must copy */ str = g_strdup((char*)xmlBufferContent(buffer)); xmlBufferFree(buffer); return str; } /** * lasso_string_to_xsd_integer: * @saml2_assertion: a #LassoSaml2Assertion object * @integer: a long int variable to store the result * * Parse a string using the xsd:integer schema. * * Return value: TRUE if successful, FALSE otherwise. */ gboolean lasso_string_to_xsd_integer(const char *str, long int *integer) { const char *save = str; if (! str) return FALSE; while (isspace(*str)) str++; if (*str == '+' || *str == '-') str++; while (isdigit(*str)) str++; while (isspace(*str)) str++; if (*str) return FALSE; *integer = strtol(save, NULL, 10); if ((*integer == LONG_MAX || *integer == LONG_MIN) && errno == ERANGE) return FALSE; return TRUE; } void lasso_set_string_from_prop(char **str, xmlNode *node, xmlChar *name, xmlChar *ns) { xmlChar *value; g_assert(str); g_assert(node); value = xmlGetNsProp(node, name, ns); if (value) { lasso_assign_string(*str, (char*)value); } lasso_release_xml_string(value); } /** * lasso_log_set_handler: * @log_levels: the log levels to apply the log handler for. To handle fatal * and recursive messages as well, combine the log levels with the * #G_LOG_FLAG_FATAL and #G_LOG_FLAG_RECURSION bit flags. * @log_func: the log handler function. * @user_data: data passed to the log handler. * * Sets the log handler for a domain and a set of log levels. To handle fatal * and recursive messages the @log_levels parameter must be combined with the * #G_LOG_FLAG_FATAL and #G_LOG_FLAG_RECURSION bit flags. * * Note that since the #G_LOG_LEVEL_ERROR log level is always fatal, if you * want to set a handler for this log level you must combine it with * #G_LOG_FLAG_FATAL. * * Returns: the id of the new handler. **/ guint lasso_log_set_handler(GLogLevelFlags log_levels, GLogFunc log_func, gpointer user_data) { return g_log_set_handler(LASSO_LOG_DOMAIN, log_levels, log_func, user_data); } /** * lasso_log_remove_handler: * @handler_id: the id of the handler, which was returned in * lasso_log_set_handler(). * * Removes the log handler. **/ void lasso_log_remove_handler(guint handler_id) { g_log_remove_handler(LASSO_LOG_DOMAIN, handler_id); } /** * lasso_get_hmac_key: * @key: an #xmlSecKey object * @buffer: a byte buffer of size @size * @size: the size of @buffer as bytes * * Extract the symetric HMAC key from the #xmlSecKey structure and place a pointer to i into the * buffer variable. * * Return value: 0 if successful, an error code otherwise. */ lasso_error_t lasso_get_hmac_key(const xmlSecKey *key, void **buffer, size_t *size) { xmlSecKeyDataPtr key_data; xmlSecBufferPtr key_data_buffer; lasso_null_param(key); lasso_null_param(buffer); lasso_null_param(size); if (key->value->id != xmlSecKeyDataHmacId) { return LASSO_PARAM_ERROR_INVALID_VALUE; } key_data = xmlSecKeyGetValue((xmlSecKeyPtr)key); g_return_val_if_fail(key_data, LASSO_PARAM_ERROR_INVALID_VALUE); key_data_buffer = xmlSecKeyDataBinaryValueGetBuffer(key_data); g_return_val_if_fail(key_data_buffer, LASSO_PARAM_ERROR_INVALID_VALUE); *buffer = xmlSecBufferGetData(key_data_buffer); *size = xmlSecBufferGetSize(key_data_buffer); g_return_val_if_fail(*buffer && *size, LASSO_PARAM_ERROR_INVALID_VALUE); return 0; } /** * lasso_make_signature_context_from_buffer: * @buffer: a byte buffer of size @length * @length: the size of @buffer as bytes * @password: an eventual password to decoded the private key contained in @buffer * @signature_method: the signature method to associate to this key * @certificate: a certificate as a file path or PEM encoded in a NULL-terminated string, to * associate with the key, it will be used to fill the KeyInfo node in an eventual signature. * * Load a signature key and return an initialized #LassoSignatureContext structure. If the structure * contains a new #xmlSecKey it must be freed by the caller. If your must store it. use * lasso_assign_new_signature_context and not lasso_assign_signature_context which is gonna * duplicate the key and so make a leak. * * Return value: an initialized LassoSignatureContext containing a freshly created @xmlSecKey object * successful, LASSO_SIGNATURE_CONTEXT_NONE otherwise. The caller must free the #xmlSecKey. */ LassoSignatureContext lasso_make_signature_context_from_buffer(const void *buffer, size_t length, const char *password, LassoSignatureMethod signature_method, const char *certificate) { LassoSignatureContext context = LASSO_SIGNATURE_CONTEXT_NONE; context.signature_key = lasso_xmlsec_load_private_key_from_buffer(buffer, length, password, signature_method, certificate); if (context.signature_key) { context.signature_method = signature_method; } return context; } /** * lasso_make_signature_context_from_path_or_string: * @filename_or_buffer: a file path of a string containing the key PEM or Base64 encoded * @password: an eventual password to decoded the private key contained in @buffer * @signature_method: the signature method to associate to this key * @certificate: a certificate as a file path or PEM encoded in a NULL-terminated string, to * associate with the key, it will be used to fill the KeyInfo node in an eventual signature. * * Load a signature key and return an initialized #LassoSignatureContext structure. If the structure * contains a new #xmlSecKey it must be freed by the caller. If your must store it. use * lasso_assign_new_signature_context and not lasso_assign_signature_context which is gonna * duplicate the key and so make a leak. * * Return value: an initialized LassoSignatureContext containing a freshly created @xmlSecKey object * successful, LASSO_SIGNATURE_CONTEXT_NONE otherwise. */ LassoSignatureContext lasso_make_signature_context_from_path_or_string(char *filename_or_buffer, const char *password, LassoSignatureMethod signature_method, const char *certificate) { LassoSignatureContext context = LASSO_SIGNATURE_CONTEXT_NONE; context.signature_key = lasso_xmlsec_load_private_key(filename_or_buffer, password, signature_method, certificate); if (context.signature_key) { context.signature_method = signature_method; } return context; } xmlNs * get_or_define_ns(xmlNode *xmlnode, const xmlChar *ns_uri, const xmlChar *advised_prefix) { xmlNs *ns; char prefix[20]; int i = 1; ns = xmlSearchNsByHref(NULL, xmlnode, ns_uri); if (ns) return ns; /* Try with the advised prefix */ if (advised_prefix) { ns = xmlSearchNs(NULL, xmlnode, BAD_CAST advised_prefix); if (! ns) { /* If not taken, use it */ return xmlNewNs(xmlnode, ns_uri, BAD_CAST advised_prefix); } } /* Create a prefix from scratch */ do { sprintf(prefix, "ns%u", i); i++; ns = xmlSearchNs(NULL, xmlnode, BAD_CAST prefix); } while (ns); return xmlNewNs(xmlnode, ns_uri, BAD_CAST prefix); } void set_qname_attribute(xmlNode *node, const xmlChar *attribute_ns_prefix, const xmlChar *attribute_ns_href, const xmlChar *attribute_name, const xmlChar *prefix, const xmlChar *href, const xmlChar *name) { xmlNs *type_ns; xmlNs *xsi_ns; xmlChar *value; xsi_ns = get_or_define_ns(node, attribute_ns_href, attribute_ns_prefix); type_ns = get_or_define_ns(node, href, prefix); value = BAD_CAST g_strdup_printf("%s:%s", type_ns->prefix, name); xmlSetNsProp(node, xsi_ns, attribute_name, value); lasso_release_string(value); } void set_xsi_type(xmlNode *node, const xmlChar *type_ns_prefix, const xmlChar *type_ns_href, const xmlChar *type_name) { set_qname_attribute(node, BAD_CAST LASSO_XSI_PREFIX, BAD_CAST LASSO_XSI_HREF, BAD_CAST "type", type_ns_prefix, type_ns_href, type_name); } void lasso_xmlnode_add_saml2_signature_template(xmlNode *node, LassoSignatureContext context, const char *id) { xmlSecTransformId transform_id; xmlNode *existing_signature = NULL, *signature = NULL, *reference, *key_info; char *uri; g_assert(id); if (! lasso_validate_signature_context(context) || ! node) return; switch (context.signature_method) { case LASSO_SIGNATURE_METHOD_RSA_SHA1: transform_id = xmlSecTransformRsaSha1Id; break; case LASSO_SIGNATURE_METHOD_DSA_SHA1: transform_id = xmlSecTransformDsaSha1Id; break; case LASSO_SIGNATURE_METHOD_HMAC_SHA1: transform_id = xmlSecTransformHmacSha1Id; break; case LASSO_SIGNATURE_METHOD_RSA_SHA256: transform_id = xmlSecTransformRsaSha256Id; break; case LASSO_SIGNATURE_METHOD_HMAC_SHA256: transform_id = xmlSecTransformHmacSha256Id; break; case LASSO_SIGNATURE_METHOD_RSA_SHA384: transform_id = xmlSecTransformRsaSha384Id; break; case LASSO_SIGNATURE_METHOD_HMAC_SHA384: transform_id = xmlSecTransformHmacSha384Id; break; case LASSO_SIGNATURE_METHOD_RSA_SHA512: transform_id = xmlSecTransformRsaSha512Id; break; case LASSO_SIGNATURE_METHOD_HMAC_SHA512: transform_id = xmlSecTransformHmacSha512Id; break; default: g_assert_not_reached(); } existing_signature = xmlSecFindChild(node, xmlSecNodeSignature, xmlSecDSigNs); signature = xmlSecTmplSignatureCreate(NULL, xmlSecTransformExclC14NId, transform_id, NULL); if (existing_signature) { xmlSecReplaceNode(existing_signature, signature); } else { xmlAddChild(node, signature); } /* choose a digest for handling references based on the chosen signature algorithm */ { xmlSecTransformId digest_method_id; switch (context.signature_method) { case LASSO_SIGNATURE_METHOD_RSA_SHA1: case LASSO_SIGNATURE_METHOD_DSA_SHA1: case LASSO_SIGNATURE_METHOD_HMAC_SHA1: digest_method_id = xmlSecTransformSha1Id; break; case LASSO_SIGNATURE_METHOD_RSA_SHA256: case LASSO_SIGNATURE_METHOD_HMAC_SHA256: digest_method_id = xmlSecTransformSha256Id; break; case LASSO_SIGNATURE_METHOD_RSA_SHA384: case LASSO_SIGNATURE_METHOD_HMAC_SHA384: digest_method_id = xmlSecTransformSha384Id; break; case LASSO_SIGNATURE_METHOD_RSA_SHA512: case LASSO_SIGNATURE_METHOD_HMAC_SHA512: digest_method_id = xmlSecTransformSha384Id; break; default: g_assert_not_reached(); } /* Normally the signature is son of the signed node, which holds an Id attribute, but in * other cases, set snippet->offset to 0 and use xmlSecTmpSignatureAddReference from another * node get_xmlNode virtual method to add the needed reference. */ uri = g_strdup_printf("#%s", id); reference = xmlSecTmplSignatureAddReference(signature, digest_method_id, NULL, (xmlChar*)uri, NULL); lasso_release(uri); } /* add enveloped transform */ xmlSecTmplReferenceAddTransform(reference, xmlSecTransformEnvelopedId); /* add exclusive C14N transform */ xmlSecTmplReferenceAddTransform(reference, xmlSecTransformExclC14NId); /* if the key is the public part of an asymetric key, add its certificate or the key itself */ switch (context.signature_method) { case LASSO_SIGNATURE_METHOD_RSA_SHA1: case LASSO_SIGNATURE_METHOD_DSA_SHA1: case LASSO_SIGNATURE_METHOD_RSA_SHA256: case LASSO_SIGNATURE_METHOD_RSA_SHA384: case LASSO_SIGNATURE_METHOD_RSA_SHA512: /* asymetric cryptography methods */ key_info = xmlSecTmplSignatureEnsureKeyInfo(signature, NULL); if (xmlSecKeyGetData(context.signature_key, xmlSecOpenSSLKeyDataX509Id)) { /* add */ xmlSecTmplKeyInfoAddX509Data(key_info); } else { xmlSecTmplKeyInfoAddKeyValue(key_info); } break; case LASSO_SIGNATURE_METHOD_HMAC_SHA1: case LASSO_SIGNATURE_METHOD_HMAC_SHA256: case LASSO_SIGNATURE_METHOD_HMAC_SHA384: case LASSO_SIGNATURE_METHOD_HMAC_SHA512: if (context.signature_key->name) { key_info = xmlSecTmplSignatureEnsureKeyInfo(signature, NULL); xmlSecTmplKeyInfoAddKeyName(key_info, NULL); } break; default: g_assert_not_reached(); } } /** * lasso_get_saml_message: * @query_fields: a NULL terminated array of char* representing a parsed query string. * * Return the first SAMLRequest or SAMLResponse value in the query string array. */ static char* lasso_get_saml_message(xmlChar **query_fields) { int i = 0; char *enc = NULL; char *raw_message = NULL; char *gziped_message = NULL; int gziped_message_len = 0; char *saml_message = NULL; size_t saml_message_len = 0; xmlChar *field = NULL; char *t = NULL; for (i=0; (field=query_fields[i]); i++) { t = strchr((char*)field, '='); if (t == NULL) continue; *t = 0; if (strcmp((char*)field, LASSO_SAML2_FIELD_ENCODING) == 0) { enc = t+1; continue; } if (strcmp((char*)field, LASSO_SAML2_FIELD_REQUEST) == 0 || strcmp((char*)field, LASSO_SAML2_FIELD_RESPONSE) == 0) { raw_message = t+1; continue; } } if (raw_message == NULL) { return NULL; } if (enc && strcmp(enc, LASSO_SAML2_DEFLATE_ENCODING) != 0) { /* unknown encoding */ debug("Unknown URL encoding: %64s", enc); return NULL; } goto_cleanup_if_fail(lasso_base64_decode(raw_message, &gziped_message, &gziped_message_len)) saml_message = (char*)lasso_inflate((unsigned char*)gziped_message, gziped_message_len, &saml_message_len); cleanup: lasso_release_string(gziped_message); return saml_message; } /** * lasso_xmltextreader_from_message: * @message: the HTTP query, POST content or SOAP message * * Try to parse the passed message and create an xmlTextReader from it. */ xmlTextReader * lasso_xmltextreader_from_message(const char *message, char **to_free) { size_t len = strlen(message); char *needle; xmlChar **query_fields = NULL; char *decoded_message = NULL; int decoded_message_len = 0; xmlTextReader *reader = NULL; g_assert(to_free); /* Differentiate SOAP from others */ if (message[0] != '<') { needle = strchr(message, '='); /* Differentiate redirect binding from POST */ if (needle && message[len-1] != '=') { query_fields = lasso_urlencoded_to_strings(message); message = *to_free = lasso_get_saml_message(query_fields); if (! message) { goto cleanup; } len = strlen(message); } else { /* POST */ if (! is_base64(message)) { debug("POST message is not base64"); goto cleanup; } if (! lasso_base64_decode(message, &decoded_message, &decoded_message_len)) { debug("could not decode POST SAML message"); goto cleanup; } message = decoded_message; len = decoded_message_len; lasso_transfer_string(*to_free, decoded_message); } } if (message[0] == '<') // XML case reader = xmlReaderForMemory(message, len, "", NULL, XML_PARSE_NONET); cleanup: lasso_release_array_of_xml_strings(query_fields); lasso_release_string(decoded_message); return reader; } lasso-2.8.2/lasso/xml/PaxHeaders/lib_name_identifier_mapping_request.h0000644000000000000000000000013214114336625023254 xustar0030 mtime=1630649749.858437342 30 atime=1678814151.012993868 30 ctime=1678814320.245948959 lasso-2.8.2/lasso/xml/lib_name_identifier_mapping_request.h0000644000175000017500000000653214114336625026532 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_LIB_NAME_IDENTIFIER_MAPPING_REQUEST_H__ #define __LASSO_LIB_NAME_IDENTIFIER_MAPPING_REQUEST_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "samlp_request_abstract.h" #include "saml_name_identifier.h" #define LASSO_TYPE_LIB_NAME_IDENTIFIER_MAPPING_REQUEST \ (lasso_lib_name_identifier_mapping_request_get_type()) #define LASSO_LIB_NAME_IDENTIFIER_MAPPING_REQUEST(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_LIB_NAME_IDENTIFIER_MAPPING_REQUEST, \ LassoLibNameIdentifierMappingRequest)) #define LASSO_LIB_NAME_IDENTIFIER_MAPPING_REQUEST_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_LIB_NAME_IDENTIFIER_MAPPING_REQUEST, \ LassoLibNameIdentifierMappingRequestClass)) #define LASSO_IS_LIB_NAME_IDENTIFIER_MAPPING_REQUEST(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_LIB_NAME_IDENTIFIER_MAPPING_REQUEST)) #define LASSO_IS_LIB_NAME_IDENTIFIER_MAPPING_REQUEST_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_LIB_NAME_IDENTIFIER_MAPPING_REQUEST)) #define LASSO_LIB_NAME_IDENTIFIER_MAPPING_REQUEST_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_LIB_NAME_IDENTIFIER_MAPPING_REQUEST, \ LassoLibNameIdentifierMappingRequestClass)) typedef struct _LassoLibNameIdentifierMappingRequest LassoLibNameIdentifierMappingRequest; typedef struct _LassoLibNameIdentifierMappingRequestClass \ LassoLibNameIdentifierMappingRequestClass; struct _LassoLibNameIdentifierMappingRequest { LassoSamlpRequestAbstract parent; /*< public >*/ /* */ GList *Extension; /* of xmlNode* */ /* */ char *ProviderID; /* */ LassoSamlNameIdentifier *NameIdentifier; /* */ char *TargetNamespace; /* */ char *consent; }; struct _LassoLibNameIdentifierMappingRequestClass { LassoSamlpRequestAbstractClass parent; }; LASSO_EXPORT GType lasso_lib_name_identifier_mapping_request_get_type(void); LASSO_EXPORT LassoNode* lasso_lib_name_identifier_mapping_request_new(void); LASSO_EXPORT LassoNode* lasso_lib_name_identifier_mapping_request_new_full( char *providerID, LassoSamlNameIdentifier *nameIdentifier, const char *targetNamespace, LassoSignatureType sign_type, LassoSignatureMethod sign_method); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_LIB_NAME_IDENTIFIER_MAPPING_REQUEST_H__ */ lasso-2.8.2/lasso/xml/PaxHeaders/saml_attribute_statement.h0000644000000000000000000000013214114336625021124 xustar0030 mtime=1630649749.874437517 30 atime=1678814151.024993934 30 ctime=1678814320.269949096 lasso-2.8.2/lasso/xml/saml_attribute_statement.h0000644000175000017500000000501114114336625024371 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAML_ATTRIBUTE_STATEMENT_H__ #define __LASSO_SAML_ATTRIBUTE_STATEMENT_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "saml_attribute.h" #include "saml_subject_statement_abstract.h" #define LASSO_TYPE_SAML_ATTRIBUTE_STATEMENT (lasso_saml_attribute_statement_get_type()) #define LASSO_SAML_ATTRIBUTE_STATEMENT(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML_ATTRIBUTE_STATEMENT, \ LassoSamlAttributeStatement)) #define LASSO_SAML_ATTRIBUTE_STATEMENT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML_ATTRIBUTE_STATEMENT, \ LassoSamlAttributeStatementClass)) #define LASSO_IS_SAML_ATTRIBUTE_STATEMENT(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML_ATTRIBUTE_STATEMENT)) #define LASSO_IS_SAML_ATTRIBUTE_STATEMENT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML_ATTRIBUTE_STATEMENT)) #define LASSO_SAML_ATTRIBUTE_STATEMENT_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML_ATTRIBUTE_STATEMENT, \ LassoSamlAttributeStatementClass)) typedef struct _LassoSamlAttributeStatement LassoSamlAttributeStatement; typedef struct _LassoSamlAttributeStatementClass LassoSamlAttributeStatementClass; struct _LassoSamlAttributeStatement { LassoSamlSubjectStatementAbstract parent; /*< public >*/ GList *Attribute; /* of LassoNode */ }; struct _LassoSamlAttributeStatementClass { LassoSamlSubjectStatementAbstractClass parent; }; LASSO_EXPORT GType lasso_saml_attribute_statement_get_type(void); LASSO_EXPORT LassoSamlAttributeStatement* lasso_saml_attribute_statement_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAML_ATTRIBUTE_STATEMENT_H__ */ lasso-2.8.2/lasso/xml/PaxHeaders/lib_scoping.c0000644000000000000000000000013214364261206016303 xustar0030 mtime=1674666630.758769192 30 atime=1678814198.665260961 30 ctime=1678814320.337949483 lasso-2.8.2/lasso/xml/lib_scoping.c0000644000175000017500000000641014364261206021554 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "private.h" #include "lib_scoping.h" /** * SECTION:lib_scoping * @short_description: <lib:Scoping> * *
Schema fragment for lib:Scoping * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "ProxyCount", SNIPPET_CONTENT | SNIPPET_INTEGER | SNIPPET_OPTIONAL_NEG, G_STRUCT_OFFSET(LassoLibScoping, ProxyCount), NULL, NULL, NULL}, { "IDPList", SNIPPET_NODE, G_STRUCT_OFFSET(LassoLibScoping, IDPList), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void instance_init(LassoLibScoping *node, G_GNUC_UNUSED void *unused) { node->ProxyCount = -1; } static void class_init(LassoLibScopingClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "Scoping"); lasso_node_class_set_ns(nclass, LASSO_LIB_HREF, LASSO_LIB_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_lib_scoping_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoLibScopingClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoLibScoping), 0, (GInstanceInitFunc) instance_init, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoLibScoping", &this_info, 0); } return this_type; } /** * lasso_lib_scoping_new: * * Creates a new #LassoLibScoping object. * * Return value: a newly created #LassoLibScoping object **/ LassoLibScoping* lasso_lib_scoping_new() { return g_object_new(LASSO_TYPE_LIB_SCOPING, NULL); } lasso-2.8.2/lasso/xml/PaxHeaders/private.h0000644000000000000000000000013214364261206015472 xustar0030 mtime=1674666630.758769192 30 atime=1678814151.016993891 30 ctime=1678814320.377949711 lasso-2.8.2/lasso/xml/private.h0000644000175000017500000003256214364261206020752 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_XML_PRIVATE_H__ #define __LASSO_XML_PRIVATE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "xml.h" #include "xml_enc.h" #include #include #include "saml-2.0/saml2_encrypted_element.h" #include "../utils.h" typedef enum { SNIPPET_NODE, SNIPPET_CONTENT, SNIPPET_TEXT_CHILD, SNIPPET_UNUSED1, SNIPPET_ATTRIBUTE, SNIPPET_NODE_IN_CHILD, SNIPPET_LIST_NODES, SNIPPET_LIST_CONTENT, SNIPPET_EXTENSION, SNIPPET_SIGNATURE, SNIPPET_LIST_XMLNODES, SNIPPET_XMLNODE, SNIPPET_COLLECT_NAMESPACES, SNIPPET_JUMP_OFFSET_SIGN = 1 << 19, SNIPPET_JUMP_OFFSET_SHIFT = 15, SNIPPET_JUMP_OFFSET_MASK = 0x0f << SNIPPET_JUMP_OFFSET_SHIFT, SNIPPET_JUMP_1 = 1 << SNIPPET_JUMP_OFFSET_SHIFT, SNIPPET_JUMP_2 = 2 << SNIPPET_JUMP_OFFSET_SHIFT, SNIPPET_JUMP_3 = 3 << SNIPPET_JUMP_OFFSET_SHIFT, SNIPPET_JUMP_4 = 4 << SNIPPET_JUMP_OFFSET_SHIFT, SNIPPET_JUMP_5 = 5 << SNIPPET_JUMP_OFFSET_SHIFT, SNIPPET_JUMP_6 = 6 << SNIPPET_JUMP_OFFSET_SHIFT, SNIPPET_JUMP_7 = 7 << SNIPPET_JUMP_OFFSET_SHIFT, SNIPPET_BACK_1 = 1 << SNIPPET_JUMP_OFFSET_SHIFT | SNIPPET_JUMP_OFFSET_SIGN, SNIPPET_BACK_2 = 2 << SNIPPET_JUMP_OFFSET_SHIFT | SNIPPET_JUMP_OFFSET_SIGN, SNIPPET_BACK_3 = 3 << SNIPPET_JUMP_OFFSET_SHIFT | SNIPPET_JUMP_OFFSET_SIGN, SNIPPET_BACK_4 = 4 << SNIPPET_JUMP_OFFSET_SHIFT | SNIPPET_JUMP_OFFSET_SIGN, SNIPPET_BACK_5 = 5 << SNIPPET_JUMP_OFFSET_SHIFT | SNIPPET_JUMP_OFFSET_SIGN, SNIPPET_BACK_6 = 6 << SNIPPET_JUMP_OFFSET_SHIFT | SNIPPET_JUMP_OFFSET_SIGN, SNIPPET_BACK_7 = 7 << SNIPPET_JUMP_OFFSET_SHIFT | SNIPPET_JUMP_OFFSET_SIGN, /* transformers for content transformation */ SNIPPET_STRING = 1 << 0, /* default, can be omitted */ SNIPPET_BOOLEAN = 1 << 20, SNIPPET_INTEGER = 1 << 21, SNIPPET_LASSO_DUMP = 1 << 22, SNIPPET_OPTIONAL = 1 << 23, /* optional, ignored if 0 */ SNIPPET_OPTIONAL_NEG = 1 << 24, /* optional, ignored if -1 */ SNIPPET_ANY = 1 << 25, /* ##any node */ SNIPPET_ALLOW_TEXT = 1 << 26, /* allow text childs in list of nodes */ SNIPPET_KEEP_XMLNODE = 1 << 27, /* force keep xmlNode */ SNIPPET_PRIVATE = 1 << 28, /* means that the offset is relative to a private extension */ SNIPPET_MANDATORY = 1 << 29, /* means that the element cardinality is at least 1 */ SNIPPET_JUMP_ON_MATCH = 1 << 30, SNIPPET_JUMP_ON_MISS = 1 << 31, SNIPPET_JUMP = SNIPPET_JUMP_ON_MISS | SNIPPET_JUMP_ON_MATCH, } SnippetType; #define SNIPPET_JUMP_OFFSET(type) ((type & SNIPPET_JUMP_OFFSET_SIGN) ? \ (-(type & SNIPPET_JUMP_OFFSET_MASK) >> SNIPPET_JUMP_OFFSET_SHIFT) \ : ((type & SNIPPET_JUMP_OFFSET_MASK) >> SNIPPET_JUMP_OFFSET_SHIFT)) typedef enum { NO_OPTION = 0, NO_SINGLE_REFERENCE = 1 /* SAML signature should contain a single reference, * but WS-Security signatures can contain many */, EMPTY_URI = 2, } SignatureVerificationOption; struct XmlSnippet { char *name; /* name of the node or attribute to match */ SnippetType type; /* type of node to deserialize */ guint offset; /* offset of the storage field relative to the public or private object (if using SNIPPET_PRIVATE). If 0, means that no storage must be done, it will be handled by the init_from_xml virtual method. */ char *class_name; /* Force a certain LassoNode class for deserializing a node, usually useless. */ char *ns_name; /* if the namespace is different from the one of the parent node, specify it there */ char *ns_uri; }; /** * LassoSignatureContext: * @signature_method: the method for signing (RSA, DSA, HMAC) * @signature_key: a key for the signature * * Information needed to make a signature */ typedef struct _LassoSignatureContext { LassoSignatureMethod signature_method; xmlSecKey *signature_key; } LassoSignatureContext; #define LASSO_SIGNATURE_CONTEXT_NONE ((LassoSignatureContext){LASSO_SIGNATURE_METHOD_NONE, NULL}) #define lasso_assign_signature_context(to, from) \ do { \ LassoSignatureContext *__to = &(to); \ LassoSignatureContext __from = (from); \ __to->signature_method = __from.signature_method; \ lasso_assign_sec_key(__to->signature_key, __from.signature_key); \ } while(0) #define lasso_assign_new_signature_context(to, from) \ do { \ LassoSignatureContext *__to = &(to); \ LassoSignatureContext __from = (from); \ __to->signature_method = __from.signature_method; \ lasso_assign_new_sec_key(__to->signature_key, __from.signature_key); \ } while(0) static inline gboolean lasso_validate_signature_context(LassoSignatureContext context) { return lasso_validate_signature_method(context.signature_method) && context.signature_key != NULL; } /** * This inline method replace normal use of G_STRUCT_MEMBER_P/G_STRUCT_MEMBER, in order to add an * indirection through the private structure attached to a GObject instance if needed */ inline static void * snippet_struct_member(void *base, GType type, struct XmlSnippet *snippet) { if (snippet->type & SNIPPET_PRIVATE) { if (! G_IS_OBJECT(base)) return NULL; GObject *object = (GObject*)base; base = g_type_instance_get_private((GTypeInstance*)object, type); } return G_STRUCT_MEMBER_P(base, snippet->offset); } #define SNIPPET_STRUCT_MEMBER(type, base, gtype, snippet) \ (*(type*)snippet_struct_member(base, gtype, snippet)) #define SNIPPET_STRUCT_MEMBER_P(base, gtype, snippet) \ snippet_struct_member(base, gtype, snippet) struct QuerySnippet { char *path; char *field_name; }; struct _LassoNodeClassData { struct XmlSnippet *snippets; struct QuerySnippet *query_snippets; char *node_name; xmlNs *ns; char *id_attribute_name; int id_attribute_offset; int sign_type_offset; int sign_method_offset; int private_key_file_offset; int certificate_file_offset; gboolean keep_xmlnode; gboolean xsi_sub_type; }; void lasso_node_class_set_nodename(LassoNodeClass *klass, char *name); void lasso_node_class_set_ns(LassoNodeClass *klass, char *href, char *prefix); void lasso_node_class_add_snippets(LassoNodeClass *klass, struct XmlSnippet *snippets); void lasso_node_class_add_query_snippets(LassoNodeClass *klass, struct QuerySnippet *snippets); gchar* lasso_node_build_query_from_snippets(LassoNode *node); gboolean lasso_node_init_from_query_fields(LassoNode *node, char **query_fields); gboolean lasso_node_init_from_saml2_query_fields(LassoNode *node, char **query_fields, char **relay_state); LassoMessageFormat lasso_node_init_from_message_with_format(LassoNode *node, const char *message, LassoMessageFormat constraint, xmlDoc **doc_out, xmlNode **root_out); typedef enum { LASSO_PEM_FILE_TYPE_UNKNOWN, LASSO_PEM_FILE_TYPE_PUB_KEY, LASSO_PEM_FILE_TYPE_PRIVATE_KEY, LASSO_PEM_FILE_TYPE_CERT } LassoPemFileType; void lasso_build_random_sequence(char *buffer, unsigned int size); char* lasso_build_unique_id(unsigned int size); char* lasso_get_current_time(void); char* lasso_time_to_iso_8601_gmt(time_t now); time_t lasso_iso_8601_gmt_to_time_t(const char *xsdtime); LassoPemFileType lasso_get_pem_file_type(const char *file); xmlSecKeyPtr lasso_get_public_key_from_pem_file(const char *file); xmlSecKeyPtr lasso_get_public_key_from_pem_cert_file(const char *file); xmlSecKeysMngr* lasso_load_certs_from_pem_certs_chain_file (const char *file); char* lasso_query_sign(char *query, LassoSignatureContext signature_context); int lasso_query_verify_signature(const char *query, xmlSecKey *public_key); int lasso_saml2_query_verify_signature(const char *query, xmlSecKey *sender_public_key); char* lasso_sha1(const char *str); char* lasso_sha256(const char *str); char* lasso_sha384(const char *str); char* lasso_sha512(const char *str); xmlChar** lasso_urlencoded_to_strings(const char *str); int lasso_sign_node(xmlNode *xmlnode, LassoSignatureContext context, const char *id_attr_name, const char *id_value); int lasso_verify_signature(xmlNode *signed_node, xmlDoc *doc, const char *id_attr_name, xmlSecKeysMngr *keys_manager, xmlSecKey *public_key, SignatureVerificationOption signature_verification_option, GList **uri_references); void xmlCleanNs(xmlNode *root_node); void xml_insure_namespace(xmlNode *xmlnode, xmlNs *ns, gboolean force, gchar *ns_href, gchar *ns_prefix); gchar* lasso_node_build_deflated_query(LassoNode *node); gchar* lasso_node_build_query(LassoNode *node); gboolean lasso_node_init_from_deflated_query_part(LassoNode *node, char *deflate_string); xmlNode* lasso_node_get_xmlnode_for_any_type(LassoNode *node, xmlNode *cur); LassoSaml2EncryptedElement* lasso_node_encrypt(LassoNode *lasso_node, xmlSecKey *encryption_public_key, LassoEncryptionSymKeyType encryption_sym_key_type, LassoKeyEncryptionMethod key_encryption_method, const char *recipient); int lasso_node_decrypt_xmlnode(xmlNode* encrypted_element, GList *encrypted_key, xmlSecKey *encryption_private_key, LassoNode **output); void lasso_node_remove_signature(LassoNode *node); char* lasso_concat_url_query(const char *url, const char *query); xmlDocPtr lasso_xml_parse_memory(const char *buffer, int size); xmlNode* lasso_xml_get_soap_content(xmlNode *root); xmlNodePtr lasso_xml_next_element_node(xmlNodePtr node); const xmlChar* lasso_xml_get_node_ns_href(const xmlNodePtr node); gboolean lasso_xml_is_element_node(const xmlNodePtr node, const xmlChar *name, const xmlChar *ns); gboolean lasso_xml_is_soap(xmlNode *root); xmlNodePtr lasso_xml_soap11_get_header(xmlNodePtr envelope_node); xmlNodePtr lasso_xml_soap11_get_body(xmlNodePtr envelope_node); gboolean lasso_eval_xpath_expression(xmlXPathContextPtr xpath_ctx, const char *expression, xmlXPathObjectPtr *xpath_object_ptr, int *xpath_error_code); #define IF_SAML2(profile) \ if (lasso_provider_get_protocol_conformance(LASSO_PROVIDER(profile->server)) == \ LASSO_PROTOCOL_SAML_2_0) char * lasso_get_relaystate_from_query(const char *query); char * lasso_url_add_parameters(char *url, gboolean free, ...); xmlChar * lasso_xmlURIEscapeStr(const xmlChar *from, const xmlChar *list); xmlSecKey* lasso_xmlsec_load_private_key_from_buffer(const char *buffer, size_t length, const char *password, LassoSignatureMethod signature_method, const char *certificate); xmlSecKey* lasso_xmlsec_load_private_key(const char *filename_or_buffer, const char *password, LassoSignatureMethod signature_method, const char *certificate); xmlDocPtr lasso_xml_parse_file(const char *filepath); xmlDocPtr lasso_xml_parse_memory_with_error(const char *buffer, int size, xmlError *error); xmlSecKeyPtr lasso_xmlsec_load_key_info(xmlNode *key_descriptor); char* lasso_xmlnode_to_string(xmlNode *node, gboolean format, int level); gboolean lasso_string_to_xsd_integer(const char *str, long int *integer); void lasso_set_string_from_prop(char **str, xmlNode *node, xmlChar *name, xmlChar *ns); void lasso_node_add_custom_namespace(LassoNode *node, const char *prefix, const char *href); int lasso_node_set_signature(LassoNode *node, LassoSignatureContext context); LassoSignatureContext lasso_node_get_signature(LassoNode *node); void lasso_node_set_encryption(LassoNode *node, xmlSecKey *encryption_public_key, LassoEncryptionSymKeyType encryption_sym_key_type, LassoKeyEncryptionMethod key_encryption_method); void lasso_node_get_encryption(LassoNode *node, xmlSecKey **encryption_public_key, LassoEncryptionSymKeyType *encryption_sym_key_type, LassoKeyEncryptionMethod *key_encryption_method); gboolean lasso_base64_decode(const char *from, char **buffer, int *buffer_len); xmlSecKeyPtr lasso_create_hmac_key(const xmlSecByte * buf, xmlSecSize size); lasso_error_t lasso_get_hmac_key(const xmlSecKey *key, void **buffer, size_t *size); LassoSignatureContext lasso_make_signature_context_from_buffer(const void *buffer, size_t length, const char *password, LassoSignatureMethod signature_method, const char *certificate); LassoSignatureContext lasso_make_signature_context_from_path_or_string(char *filename_or_buffer, const char *password, LassoSignatureMethod signature_method, const char *certificate); xmlNs * get_or_define_ns(xmlNode *xmlnode, const xmlChar *ns_uri, const xmlChar *advised_prefix); void set_qname_attribute(xmlNode *node, const xmlChar *attribute_ns_prefix, const xmlChar *attribute_ns_href, const xmlChar *attribute_name, const xmlChar *prefix, const xmlChar *href, const xmlChar *name); void set_xsi_type(xmlNode *node, const xmlChar *type_ns_prefix, const xmlChar *type_ns_href, const xmlChar *type_name); void lasso_xmlnode_add_saml2_signature_template(xmlNode *node, LassoSignatureContext context, const char *id); gchar* lasso_xmlnode_build_deflated_query(xmlNode *xmlnode); xmlTextReader *lasso_xmltextreader_from_message(const char *message, char **to_free); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_XML_PRIVATE_H__ */ lasso-2.8.2/lasso/xml/PaxHeaders/saml_conditions.c0000644000000000000000000000013214114336625017201 xustar0030 mtime=1630649749.874437517 30 atime=1678814207.945313157 30 ctime=1678814320.357949597 lasso-2.8.2/lasso/xml/saml_conditions.c0000644000175000017500000000673214114336625022461 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "private.h" #include "saml_conditions.h" /** * SECTION:saml_conditions * @short_description: <saml:Conditions> * *
Schema fragment for saml:Conditions * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "AudienceRestrictionCondition", SNIPPET_LIST_NODES, G_STRUCT_OFFSET(LassoSamlConditions, AudienceRestrictionCondition), NULL, NULL, NULL}, { "NotBefore", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSamlConditions, NotBefore), NULL, NULL, NULL}, { "NotOnOrAfter", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSamlConditions, NotOnOrAfter), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSamlConditionsClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "Conditions"); lasso_node_class_set_ns(nclass, LASSO_SAML_ASSERTION_HREF, LASSO_SAML_ASSERTION_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_saml_conditions_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSamlConditionsClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSamlConditions), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoSamlConditions", &this_info, 0); } return this_type; } /** * lasso_saml_conditions_new: * * Creates a new #LassoSamlConditions object. * * Return value: a newly created #LassoSamlConditions object **/ LassoSamlConditions* lasso_saml_conditions_new() { return g_object_new(LASSO_TYPE_SAML_CONDITIONS, NULL); } lasso-2.8.2/lasso/xml/PaxHeaders/lib_idp_entry.h0000644000000000000000000000013214114336625016644 xustar0030 mtime=1630649749.858437342 30 atime=1678814151.012993868 30 ctime=1678814320.237948913 lasso-2.8.2/lasso/xml/lib_idp_entry.h0000644000175000017500000000440214114336625022114 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_LIB_IDP_ENTRY_H__ #define __LASSO_LIB_IDP_ENTRY_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "xml.h" #define LASSO_TYPE_LIB_IDP_ENTRY (lasso_lib_idp_entry_get_type()) #define LASSO_LIB_IDP_ENTRY(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_LIB_IDP_ENTRY, LassoLibIDPEntry)) #define LASSO_LIB_IDP_ENTRY_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_LIB_IDP_ENTRY, LassoLibIDPEntryClass)) #define LASSO_IS_LIB_IDP_ENTRY(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_LIB_IDP_ENTRY)) #define LASSO_IS_LIB_IDP_ENTRY_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_LIB_IDP_ENTRY)) #define LASSO_LIB_IDP_ENTRY_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_LIB_IDP_ENTRY, LassoLibIDPEntryClass)) typedef struct _LassoLibIDPEntry LassoLibIDPEntry; typedef struct _LassoLibIDPEntryClass LassoLibIDPEntryClass; struct _LassoLibIDPEntry{ LassoNode parent; /*< public >*/ /* */ char *ProviderID; /* */ char *ProviderName; /* */ char *Loc; }; struct _LassoLibIDPEntryClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_lib_idp_entry_get_type(void); LASSO_EXPORT LassoNode* lasso_lib_idp_entry_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_LIB_IDP_ENTRY_H__ */ lasso-2.8.2/lasso/xml/PaxHeaders/saml_audience_restriction_condition.h0000644000000000000000000000013214114336625023305 xustar0030 mtime=1630649749.874437517 30 atime=1678814151.024993934 30 ctime=1678814320.273949118 lasso-2.8.2/lasso/xml/saml_audience_restriction_condition.h0000644000175000017500000000566614114336625026572 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAML_AUDIENCE_RESTRICTION_CONDITION_H__ #define __LASSO_SAML_AUDIENCE_RESTRICTION_CONDITION_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "saml_condition_abstract.h" #define LASSO_TYPE_SAML_AUDIENCE_RESTRICTION_CONDITION \ (lasso_saml_audience_restriction_condition_get_type()) #define LASSO_SAML_AUDIENCE_RESTRICTION_CONDITION(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML_AUDIENCE_RESTRICTION_CONDITION,\ LassoSamlAudienceRestrictionCondition)) #define LASSO_SAML_AUDIENCE_RESTRICTION_CONDITION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML_AUDIENCE_RESTRICTION_CONDITION, \ LassoSamlAudienceRestrictionConditionClass)) #define LASSO_IS_SAML_AUDIENCE_RESTRICTION_CONDITION(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML_AUDIENCE_RESTRICTION_CONDITION)) #define LASSO_IS_SAML_AUDIENCE_RESTRICTION_CONDITION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML_AUDIENCE_RESTRICTION_CONDITION)) #define LASSO_SAML_AUDIENCE_RESTRICTION_CONDITION_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML_AUDIENCE_RESTRICTION_CONDITION, \ LassoSamlAudienceRestrictionConditionClass)) typedef struct _LassoSamlAudienceRestrictionCondition LassoSamlAudienceRestrictionCondition; typedef struct _LassoSamlAudienceRestrictionConditionClass \ LassoSamlAudienceRestrictionConditionClass; struct _LassoSamlAudienceRestrictionCondition { LassoSamlConditionAbstract parent; /*< public >*/ /* */ GList *Audience; /* of strings */ }; struct _LassoSamlAudienceRestrictionConditionClass { LassoSamlConditionAbstractClass parent; }; LASSO_EXPORT GType lasso_saml_audience_restriction_condition_get_type(void); LASSO_EXPORT LassoSamlAudienceRestrictionCondition* lasso_saml_audience_restriction_condition_new(void); LASSO_EXPORT LassoSamlAudienceRestrictionCondition* lasso_saml_audience_restriction_condition_new_full(const char *audience); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAML_AUDIENCE_RESTRICTION_CONDITION_H__ */ lasso-2.8.2/lasso/xml/PaxHeaders/lib_idp_entries.h0000644000000000000000000000013214114336625017154 xustar0030 mtime=1630649749.858437342 30 atime=1678814151.012993868 30 ctime=1678814320.237948913 lasso-2.8.2/lasso/xml/lib_idp_entries.h0000644000175000017500000000434414114336625022431 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_LIB_IDP_ENTRIES_H__ #define __LASSO_LIB_IDP_ENTRIES_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "xml.h" #include "lib_idp_entry.h" #define LASSO_TYPE_LIB_IDP_ENTRIES (lasso_lib_idp_entries_get_type()) #define LASSO_LIB_IDP_ENTRIES(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_LIB_IDP_ENTRIES, LassoLibIDPEntries)) #define LASSO_LIB_IDP_ENTRIES_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_LIB_IDP_ENTRIES, LassoLibIDPEntriesClass)) #define LASSO_IS_LIB_IDP_ENTRIES(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_LIB_IDP_ENTRIES)) #define LASSO_IS_LIB_IDP_ENTRIES_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_LIB_IDP_ENTRIES)) #define LASSO_LIB_IDP_ENTRIES_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_LIB_IDP_ENTRIES, LassoLibIDPEntriesClass)) typedef struct _LassoLibIDPEntries LassoLibIDPEntries; typedef struct _LassoLibIDPEntriesClass LassoLibIDPEntriesClass; struct _LassoLibIDPEntries{ LassoNode parent; /*< public >*/ /* */ GList *IDPEntry; /* of LassoLibIDPEntry */ }; struct _LassoLibIDPEntriesClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_lib_idp_entries_get_type(void); LASSO_EXPORT LassoNode* lasso_lib_idp_entries_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_LIB_IDP_ENTRIES_H__ */ lasso-2.8.2/lasso/xml/PaxHeaders/samlp_request.c0000644000000000000000000000013214114336625016700 xustar0030 mtime=1630649749.874437517 30 atime=1678814212.049336258 30 ctime=1678814320.369949666 lasso-2.8.2/lasso/xml/samlp_request.c0000644000175000017500000000664714114336625022165 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "private.h" #include "samlp_request.h" /** * SECTION:samlp_request * @short_description: <samlp:Request> * *
Schema fragment for samlp:Request * * * * * * * * * * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "AssertionArtifact", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoSamlpRequest, AssertionArtifact), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoSamlpRequestClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "Request"); lasso_node_class_set_ns(nclass, LASSO_SAML_PROTOCOL_HREF, LASSO_SAML_PROTOCOL_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_samlp_request_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSamlpRequestClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSamlpRequest), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_SAMLP_REQUEST_ABSTRACT, "LassoSamlpRequest", &this_info, 0); } return this_type; } /** * lasso_samlp_request_new: * * Creates a new #LassoSamlpRequest object. * * Return value: a newly created #LassoSamlpRequest object **/ LassoNode* lasso_samlp_request_new() { return g_object_new(LASSO_TYPE_SAMLP_REQUEST, NULL); } lasso-2.8.2/lasso/xml/PaxHeaders/xml.h0000644000000000000000000000012714335151315014621 xustar0029 mtime=1668600525.10467567 30 atime=1678814151.028993957 28 ctime=1678814320.2179488 lasso-2.8.2/lasso/xml/xml.h0000644000175000017500000002107514335151315020072 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_XML_H__ #define __LASSO_XML_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include #include #include #include #include #include #include "../export.h" #include "../errors.h" #include "strings.h" #include "xml_enc.h" #define LASSO_TYPE_NODE (lasso_node_get_type()) #define LASSO_NODE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_NODE, LassoNode)) #define LASSO_NODE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_NODE, LassoNodeClass)) #define LASSO_IS_NODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_NODE)) #define LASSO_IS_NODE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_NODE)) #define LASSO_NODE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_NODE, LassoNodeClass)) /** * LassoMessageFormat: * @LASSO_MESSAGE_FORMAT_ERROR: error while determining format * @LASSO_MESSAGE_FORMAT_UNKNOWN: unknown format * @LASSO_MESSAGE_FORMAT_XML: XML * @LASSO_MESSAGE_FORMAT_BASE64: base-64 encoded * @LASSO_MESSAGE_FORMAT_QUERY: query string * @LASSO_MESSAGE_FORMAT_SOAP: SOAP * * Return code for lasso_node_init_from_message; it describes the type of the * message that was passed to that function. **/ typedef enum { LASSO_MESSAGE_FORMAT_XSCHEMA_ERROR = -2, LASSO_MESSAGE_FORMAT_ERROR = -1, LASSO_MESSAGE_FORMAT_UNKNOWN, LASSO_MESSAGE_FORMAT_XML, LASSO_MESSAGE_FORMAT_BASE64, LASSO_MESSAGE_FORMAT_QUERY, LASSO_MESSAGE_FORMAT_SOAP } LassoMessageFormat; /** * LassoSignatureType: * @LASSO_SIGNATURE_TYPE_NONE: no signature * @LASSO_SIGNATURE_TYPE_SIMPLE: sign with the private key, copy the public part in the signature. * @LASSO_SIGNATURE_TYPE_WITHX509: sign with the private key, copy the associated certificat in the * signature. * * Signature type. **/ typedef enum { LASSO_SIGNATURE_TYPE_NONE = 0, LASSO_SIGNATURE_TYPE_SIMPLE, LASSO_SIGNATURE_TYPE_WITHX509, LASSO_SIGNATURE_TYPE_LAST } LassoSignatureType; /** * LassoSignatureMethod: * @LASSO_SIGNATURE_METHOD_RSA_SHA1: sign using a RSA private key * @LASSO_SIGNATURE_METHOD_DSA_SHA1: sign using a DSA private key * @LASSO_SIGNATURE_METHOD_HMAC_SHA1: sign using a HMAC-SHA1 secret key * @LASSO_SIGNATURE_METHOD_RSA_SHA256: sign using a RSA private key and use SHA256 digest * @LASSO_SIGNATURE_METHOD_HMAC_SHA256: sign using a HMAC-SHA256 secret key * @LASSO_SIGNATURE_METHOD_RSA_SHA384: sign using a RSA private key and use SHA384 digest * @LASSO_SIGNATURE_METHOD_HMAC_SHA384: sign using a HMAC-SHA384 secret key * @LASSO_SIGNATURE_METHOD_RSA_SHA512: sign using a RSA private key and use SHA521 digest * @LASSO_SIGNATURE_METHOD_HMAC_SHA512: sign using a HMAC-SHA512 secret key * * Signature method. **/ typedef enum { LASSO_SIGNATURE_METHOD_NONE = 0, LASSO_SIGNATURE_METHOD_RSA_SHA1, LASSO_SIGNATURE_METHOD_DSA_SHA1, LASSO_SIGNATURE_METHOD_HMAC_SHA1, LASSO_SIGNATURE_METHOD_RSA_SHA256, LASSO_SIGNATURE_METHOD_HMAC_SHA256, LASSO_SIGNATURE_METHOD_RSA_SHA384, LASSO_SIGNATURE_METHOD_HMAC_SHA384, LASSO_SIGNATURE_METHOD_RSA_SHA512, LASSO_SIGNATURE_METHOD_HMAC_SHA512, LASSO_SIGNATURE_METHOD_LAST } LassoSignatureMethod; /* signature method and hash strength */ LassoSignatureMethod lasso_get_default_signature_method(); void lasso_set_default_signature_method(LassoSignatureMethod meth); LassoSignatureMethod lasso_get_min_signature_method(); void lasso_set_min_signature_method(LassoSignatureMethod meth); static inline gboolean lasso_validate_signature_method(LassoSignatureMethod signature_method) { return signature_method > (LassoSignatureMethod)LASSO_SIGNATURE_TYPE_NONE \ && signature_method < (LassoSignatureMethod)LASSO_SIGNATURE_METHOD_LAST; } static inline gboolean lasso_allowed_signature_method(LassoSignatureMethod signature_method) { return signature_method >= lasso_get_min_signature_method(); } static inline gboolean lasso_ok_signature_method(LassoSignatureMethod signature_method) { return lasso_validate_signature_method(signature_method) \ && lasso_allowed_signature_method(signature_method); } typedef struct _LassoNode LassoNode; typedef struct _LassoNodeClass LassoNodeClass; typedef struct _LassoNodeClassData LassoNodeClassData; /** * LassoNode: * * Base type for all XML contents, or for object using serialization to XML. **/ struct _LassoNode { GObject parent; }; struct _LassoNodeClass { GObjectClass parent_class; LassoNodeClassData *node_data; void (* destroy) (LassoNode *node); char* (* build_query) (LassoNode *node); gboolean (* init_from_query) (LassoNode *node, char **query_fields); int (* init_from_xml) (LassoNode *node, xmlNode *xmlnode); xmlNode* (* get_xmlNode) (LassoNode *node, gboolean lasso_dump); }; #include "../xml/saml-2.0/samlp2_idp_list.h" LASSO_EXPORT GType lasso_node_get_type(void); LASSO_EXPORT LassoNode* lasso_node_new(void); LASSO_EXPORT LassoNode* lasso_node_new_from_dump(const char *dump); LASSO_EXPORT LassoNode* lasso_node_new_from_soap(const char *soap); LASSO_EXPORT LassoNode* lasso_node_new_from_xmlNode(xmlNode* node); LASSO_EXPORT void lasso_node_cleanup_original_xmlnodes(LassoNode *node); LASSO_EXPORT void lasso_node_destroy(LassoNode *node); LASSO_EXPORT char* lasso_node_dump(LassoNode *node); LASSO_EXPORT char* lasso_node_export_to_base64(LassoNode *node); LASSO_EXPORT char* lasso_node_export_to_query(LassoNode *node, LassoSignatureMethod sign_method, const char *private_key_file); LASSO_EXPORT char* lasso_node_export_to_query_with_password(LassoNode *node, LassoSignatureMethod sign_method, const char *private_key_file, const char *private_key_file_password); LASSO_EXPORT char* lasso_node_export_to_soap(LassoNode *node); LASSO_EXPORT char* lasso_node_export_to_soap_with_headers(LassoNode *node, GList *headers); LASSO_EXPORT gchar* lasso_node_export_to_xml(LassoNode *node); LASSO_EXPORT char* lasso_node_export_to_paos_request(LassoNode *node, const char *issuer, const char *responseConsumerURL, const char *relay_state); LASSO_EXPORT char* lasso_node_export_to_paos_request_full(LassoNode *node, const char *issuer, const char *responseConsumerURL, const char *message_id, const char *relay_state, gboolean is_passive, gchar *provider_name, LassoSamlp2IDPList *idp_list); LASSO_EXPORT char* lasso_node_export_to_ecp_soap_response(LassoNode *node, const char *assertionConsumerURL); LASSO_EXPORT xmlNode* lasso_node_get_xmlNode(LassoNode *node, gboolean lasso_dump); LASSO_EXPORT xmlNode* lasso_node_get_original_xmlnode(LassoNode *node); LASSO_EXPORT void lasso_node_set_original_xmlnode(LassoNode *node, xmlNode* xmlnode); LASSO_EXPORT void lasso_node_set_custom_namespace(LassoNode *node, const char *prefix, const char *href); LASSO_EXPORT void lasso_node_set_custom_nodename(LassoNode *node, const char *nodename); LASSO_EXPORT const char* lasso_node_get_name(LassoNode *node); LASSO_EXPORT const char* lasso_node_get_namespace(LassoNode *node); LASSO_EXPORT LassoMessageFormat lasso_node_init_from_message(LassoNode *node, const char *message); LASSO_EXPORT gboolean lasso_node_init_from_query(LassoNode *node, const char *query); LASSO_EXPORT lasso_error_t lasso_node_init_from_xml(LassoNode *node, xmlNode *xmlnode); LASSO_EXPORT char* lasso_node_debug(LassoNode *node, int level); struct _LassoKey; LASSO_EXPORT char* lasso_node_export_to_saml2_query(LassoNode *node, const char *param_name, const char *url, struct _LassoKey *key); LASSO_EXPORT LassoKeyEncryptionMethod lasso_parse_key_encryption_method(char *str); LASSO_EXPORT LassoKeyEncryptionMethod lasso_get_default_key_encryption_method(); LASSO_EXPORT void lasso_set_default_key_encryption_method(LassoKeyEncryptionMethod method); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_XML_H__ */ lasso-2.8.2/lasso/xml/PaxHeaders/lib_scoping.h0000644000000000000000000000013214114336625016311 xustar0030 mtime=1630649749.858437342 30 atime=1678814151.016993891 30 ctime=1678814320.253949005 lasso-2.8.2/lasso/xml/lib_scoping.h0000644000175000017500000000432414114336625021564 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_LIB_SCOPING_H__ #define __LASSO_LIB_SCOPING_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "xml.h" #include "lib_idp_list.h" #define LASSO_TYPE_LIB_SCOPING (lasso_lib_scoping_get_type()) #define LASSO_LIB_SCOPING(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_LIB_SCOPING, LassoLibScoping)) #define LASSO_LIB_SCOPING_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_LIB_SCOPING, LassoLibScopingClass)) #define LASSO_IS_LIB_SCOPING(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_LIB_SCOPING)) #define LASSO_IS_LIB_SCOPING_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_LIB_SCOPING)) #define LASSO_LIB_SCOPING_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_LIB_SCOPING, LassoLibScopingClass)) typedef struct _LassoLibScoping LassoLibScoping; typedef struct _LassoLibScopingClass LassoLibScopingClass; struct _LassoLibScoping { LassoNode parent; /*< public >*/ /* */ int ProxyCount; /* */ LassoLibIDPList *IDPList; }; struct _LassoLibScopingClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_lib_scoping_get_type(void); LASSO_EXPORT LassoLibScoping* lasso_lib_scoping_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_LIB_SCOPING_H__ */ lasso-2.8.2/lasso/xml/PaxHeaders/saml_subject_locality.h0000644000000000000000000000013114114336625020373 xustar0030 mtime=1630649749.874437517 30 atime=1678814151.024993934 29 ctime=1678814320.28994921 lasso-2.8.2/lasso/xml/saml_subject_locality.h0000644000175000017500000000470514114336625023652 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAML_SUBJECT_LOCALITY_H__ #define __LASSO_SAML_SUBJECT_LOCALITY_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "xml.h" #define LASSO_TYPE_SAML_SUBJECT_LOCALITY (lasso_saml_subject_locality_get_type()) #define LASSO_SAML_SUBJECT_LOCALITY(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML_SUBJECT_LOCALITY, \ LassoSamlSubjectLocality)) #define LASSO_SAML_SUBJECT_LOCALITY_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML_SUBJECT_LOCALITY, \ LassoSamlSubjectLocalityClass)) #define LASSO_IS_SAML_SUBJECT_LOCALITY(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML_SUBJECT_LOCALITY)) #define LASSO_IS_SAML_SUBJECT_LOCALITY_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML_SUBJECT_LOCALITY)) #define LASSO_SAML_SUBJECT_LOCALITY_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML_SUBJECT_LOCALITY, \ LassoSamlSubjectLocalityClass)) typedef struct _LassoSamlSubjectLocality LassoSamlSubjectLocality; typedef struct _LassoSamlSubjectLocalityClass LassoSamlSubjectLocalityClass; struct _LassoSamlSubjectLocality { LassoNode parent; /*< public >*/ /* */ char *IPAddress; /* */ char *DNSAddress; }; struct _LassoSamlSubjectLocalityClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_saml_subject_locality_get_type(void); LASSO_EXPORT LassoNode* lasso_saml_subject_locality_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAML_SUBJECT_LOCALITY_H__ */ lasso-2.8.2/lasso/xml/PaxHeaders/samlp_request_abstract.h0000644000000000000000000000013214114336625020570 xustar0030 mtime=1630649749.874437517 30 atime=1678814151.024993934 30 ctime=1678814320.293949233 lasso-2.8.2/lasso/xml/samlp_request_abstract.h0000644000175000017500000000557314114336625024052 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAMLP_REQUEST_ABSTRACT_H__ #define __LASSO_SAMLP_REQUEST_ABSTRACT_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "xml.h" #define LASSO_TYPE_SAMLP_REQUEST_ABSTRACT (lasso_samlp_request_abstract_get_type()) #define LASSO_SAMLP_REQUEST_ABSTRACT(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAMLP_REQUEST_ABSTRACT, \ LassoSamlpRequestAbstract)) #define LASSO_SAMLP_REQUEST_ABSTRACT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAMLP_REQUEST_ABSTRACT, \ LassoSamlpRequestAbstractClass)) #define LASSO_IS_SAMLP_REQUEST_ABSTRACT(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAMLP_REQUEST_ABSTRACT)) #define LASSO_IS_SAMLP_REQUEST_ABSTRACT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAMLP_REQUEST_ABSTRACT)) #define LASSO_SAMLP_REQUEST_ABSTRACT_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAMLP_REQUEST_ABSTRACT, \ LassoSamlpRequestAbstractClass)) typedef struct _LassoSamlpRequestAbstract LassoSamlpRequestAbstract; typedef struct _LassoSamlpRequestAbstractClass LassoSamlpRequestAbstractClass; struct _LassoSamlpRequestAbstract { LassoNode parent; /*< public >*/ /* */ GList *RespondWith; /* of strings */ /* */ char *RequestID; /* */ int MajorVersion; /* */ int MinorVersion; /* */ char *IssueInstant; /* ds:Signature stuffs */ LassoSignatureType sign_type; LassoSignatureMethod sign_method; char *private_key_file; char *certificate_file; }; struct _LassoSamlpRequestAbstractClass { LassoNodeClass parent; /*< vtable >*/ }; LASSO_EXPORT GType lasso_samlp_request_abstract_get_type (void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAMLP_REQUEST_ABSTRACT_H__ */ lasso-2.8.2/lasso/xml/PaxHeaders/lib_assertion.c0000644000000000000000000000013214114336625016651 xustar0030 mtime=1630649749.854437299 30 atime=1678814190.109212888 30 ctime=1678814320.309949323 lasso-2.8.2/lasso/xml/lib_assertion.c0000644000175000017500000001334114114336625022123 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "private.h" #include "lib_assertion.h" #include "../registry.h" /** * SECTION:lib_assertion * @short_description: <lib:Assertion> * *
* Authentication assertions provided in an AuthnResponse element MUST be of * type AssertionType, which is an extension of saml:AssertionType, so that the * RequestID attribute from the original AuthnRequest MAY be included in the * InResponseTo attribute in the Assertion element. This is done because it is * not required that the AuthnResponse element itself be signed. Instead, the * individual Assertion elements contained MUST each be signed. Note that it is * optional for the InResponseTo to be present. Its absence indicates that the * AuthnResponse has been unilaterally sent by the identity provider without a * corresponding AuthnRequest message from the service provider. If the * attribute is present, it MUST be set to the RequestID of the original * AuthnRequest. *
* *
Schema fragment for lib:Assertion * * * * * * * * * ]]> *
*/ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "InResponseTo", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoLibAssertion, InResponseTo), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoLibAssertionClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); nclass->node_data->xsi_sub_type = TRUE; lasso_node_class_set_nodename(nclass, "AssertionType"); lasso_node_class_set_ns(nclass, LASSO_LIB_HREF, LASSO_LIB_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_lib_assertion_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoLibAssertionClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoLibAssertion), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_SAML_ASSERTION, "LassoLibAssertion", &this_info, 0); lasso_registry_default_add_direct_mapping(LASSO_LIB_HREF, "AssertionType", LASSO_LASSO_HREF, "LassoLibAssertion"); } return this_type; } /** * lasso_lib_assertion_new: * * Creates a new #LassoLibAssertion object. * * Return value: a newly created #LassoLibAssertion object **/ LassoLibAssertion* lasso_lib_assertion_new() { return g_object_new(LASSO_TYPE_LIB_ASSERTION, NULL); } /** * lasso_lib_assertion_new_full: * @issuer: the issuer entityID string * @requestID:(allow-none): the identifier of the request which initiated the creation of this * assertion * @audience:(allow-none): the entityID of the receiver of this assertion * @notBefore: a timestamp formatted as iso-8601 * @notOnOrAfter: a timestamp formatted as iso-8601 * * Creates a new #LassoLibAssertion object and initializes its Issuer, InResponseTo, * AudienceRestrictionCondition, notBefore and notOnOrAfter fields or attributes. * * Return value: a newly created #LassoLibAssertion object **/ LassoLibAssertion* lasso_lib_assertion_new_full(const char *issuer, const char *requestID, const char *audience, const char *notBefore, const char *notOnOrAfter) { LassoSamlAssertion *assertion; g_return_val_if_fail(issuer != NULL, NULL); assertion = LASSO_SAML_ASSERTION(g_object_new(LASSO_TYPE_LIB_ASSERTION, NULL)); assertion->AssertionID = lasso_build_unique_id(32); assertion->MajorVersion = LASSO_LIB_MAJOR_VERSION_N; assertion->MinorVersion = LASSO_LIB_MINOR_VERSION_N; assertion->IssueInstant = lasso_get_current_time(); assertion->Issuer = g_strdup(issuer); if (requestID != NULL) LASSO_LIB_ASSERTION(assertion)->InResponseTo = g_strdup(requestID); assertion->Conditions = lasso_saml_conditions_new(); assertion->Conditions->NotBefore = g_strdup(notBefore); assertion->Conditions->NotOnOrAfter = g_strdup(notOnOrAfter); if (audience) { assertion->Conditions->AudienceRestrictionCondition = g_list_append(NULL, lasso_saml_audience_restriction_condition_new_full(audience)); } return LASSO_LIB_ASSERTION(assertion); } lasso-2.8.2/lasso/xml/PaxHeaders/samlp_response.h0000644000000000000000000000013214114336625017053 xustar0030 mtime=1630649749.874437517 30 atime=1678814151.024993934 30 ctime=1678814320.297949256 lasso-2.8.2/lasso/xml/samlp_response.h0000644000175000017500000000457214114336625022333 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAMLP_RESPONSE_H__ #define __LASSO_SAMLP_RESPONSE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "samlp_response_abstract.h" #include "samlp_status.h" #include "saml_assertion.h" #define LASSO_TYPE_SAMLP_RESPONSE (lasso_samlp_response_get_type()) #define LASSO_SAMLP_RESPONSE(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAMLP_RESPONSE, LassoSamlpResponse)) #define LASSO_SAMLP_RESPONSE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAMLP_RESPONSE, LassoSamlpResponseClass)) #define LASSO_IS_SAMLP_RESPONSE(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAMLP_RESPONSE)) #define LASSO_IS_SAMLP_RESPONSE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAMLP_RESPONSE)) #define LASSO_SAMLP_RESPONSE_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAMLP_RESPONSE, LassoSamlpResponseClass)) typedef struct _LassoSamlpResponse LassoSamlpResponse; typedef struct _LassoSamlpResponseClass LassoSamlpResponseClass; struct _LassoSamlpResponse { LassoSamlpResponseAbstract parent; /*< public >*/ /* */ LassoSamlpStatus *Status; /* */ GList *Assertion; /* of LassoSamlAssertion */ }; struct _LassoSamlpResponseClass { LassoSamlpResponseAbstractClass parent; }; LASSO_EXPORT GType lasso_samlp_response_get_type(void); LASSO_EXPORT LassoNode* lasso_samlp_response_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAMLP_RESPONSE_H__ */ lasso-2.8.2/lasso/xml/PaxHeaders/samlp_status.h0000644000000000000000000000013214114336625016540 xustar0030 mtime=1630649749.878437561 30 atime=1678814151.024993934 30 ctime=1678814320.301949278 lasso-2.8.2/lasso/xml/samlp_status.h0000644000175000017500000000435414114336625022016 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SAMLP_STATUS_H__ #define __LASSO_SAMLP_STATUS_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "xml.h" #include "samlp_status_code.h" #define LASSO_TYPE_SAMLP_STATUS (lasso_samlp_status_get_type()) #define LASSO_SAMLP_STATUS(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAMLP_STATUS, LassoSamlpStatus)) #define LASSO_SAMLP_STATUS_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAMLP_STATUS, LassoSamlpStatusClass)) #define LASSO_IS_SAMLP_STATUS(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAMLP_STATUS)) #define LASSO_IS_SAMLP_STATUS_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAMLP_STATUS)) #define LASSO_SAMLP_STATUS_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAMLP_STATUS, LassoSamlpStatusClass)) typedef struct _LassoSamlpStatus LassoSamlpStatus; typedef struct _LassoSamlpStatusClass LassoSamlpStatusClass; struct _LassoSamlpStatus { LassoNode parent; /*< public >*/ /* */ LassoSamlpStatusCode *StatusCode; /* */ char *StatusMessage; }; struct _LassoSamlpStatusClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_samlp_status_get_type(void); LASSO_EXPORT LassoSamlpStatus* lasso_samlp_status_new(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SAMLP_STATUS_H__ */ lasso-2.8.2/lasso/xml/PaxHeaders/saml_attribute_value.c0000644000000000000000000000013214114336625020227 xustar0030 mtime=1630649749.874437517 30 atime=1678814205.025296727 30 ctime=1678814320.353949574 lasso-2.8.2/lasso/xml/saml_attribute_value.c0000644000175000017500000000767114114336625023512 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: Nicolas Clapies * Valery Febvre * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "private.h" #include "saml_attribute_value.h" /** * SECTION:saml_attribute_value * @short_description: value of an attribute in SAML 1.0/1.1 assertion * @see_also: #LassoSamlAttribute, #LassoSamlAttributeStatement, #LassoSamlAssertion * @include: lasso/xml/saml_attribute_value.h * *
Schema fragment for samlp2:Extensions * * * ]]> *
* * This object support a special of specifying its content. If the any * field is %NULL, then you can attach an xmlNode using * lasso_node_set_original_xmlnode() and it will be used to generate the content of the serialized * xmlNode for this object. The content (attributes, childrent and namespaces) of the * xmlNode will be copied to the result node returned by calls to * lasso_node_get_xmlNode(). */ /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "", SNIPPET_LIST_NODES | SNIPPET_ALLOW_TEXT, G_STRUCT_OFFSET(LassoSamlAttributeValue, any), NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static xmlNode* get_xmlNode(LassoNode *node, gboolean lasso_dump) { LassoSamlAttributeValue *value = LASSO_SAML_ATTRIBUTE_VALUE(node); LassoNodeClass *parent_class = NULL; xmlNode *cur; parent_class = g_type_class_peek_parent(LASSO_NODE_GET_CLASS(node)); cur = parent_class->get_xmlNode(node, lasso_dump); if (value->any) { return cur; } else { return lasso_node_get_xmlnode_for_any_type(node, cur); } } static void class_init(LassoSamlAttributeValueClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); nclass->get_xmlNode = get_xmlNode; nclass->node_data->keep_xmlnode = TRUE; lasso_node_class_set_nodename(nclass, "AttributeValue"); lasso_node_class_set_ns(nclass, LASSO_SAML_ASSERTION_HREF, LASSO_SAML_ASSERTION_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_saml_attribute_value_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSamlAttributeValueClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSamlAttributeValue), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoSamlAttributeValue", &this_info, 0); } return this_type; } LassoSamlAttributeValue* lasso_saml_attribute_value_new() { return g_object_new(LASSO_TYPE_SAML_ATTRIBUTE_VALUE, NULL); } lasso-2.8.2/lasso/PaxHeaders/errors.c.in0000644000000000000000000000013113766621500015135 xustar0030 mtime=1608196928.766895334 29 atime=1678814151.06899418 30 ctime=1678814320.049947844 lasso-2.8.2/lasso/errors.c.in0000644000175000017500000000257213766621500020414 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include #include "errors.h" #include "xml/xml.h" /* WARNING!!!: This is a generated file do not modify it, add new error message * a comments inside errors.h */ /** * lasso_strerror: * @error_code: a gint error code returned by a lasso function * * Convert an error code from a lasso fuction to a human readable string. * * Returns: a static string. */ const char* lasso_strerror(int error_code) { switch (error_code) { @ERROR_CASES@ default: return "Unknown LASSO_ERROR, you should regenerate errors.c"; } } lasso-2.8.2/lasso/PaxHeaders/key.h0000644000000000000000000000013214114336625014011 xustar0030 mtime=1630649749.814436864 30 atime=1678814151.116994448 30 ctime=1678814320.017947661 lasso-2.8.2/lasso/key.h0000644000175000017500000000543614114336625017271 0ustar00bdauvergnebdauvergne00000000000000/* * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2011 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_KEY_H__ #define __LASSO_KEY_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "xml/xml.h" #define LASSO_TYPE_KEY (lasso_key_get_type()) #define LASSO_KEY(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_KEY, \ LassoKey)) #define LASSO_KEY_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_KEY, \ LassoKeyClass)) #define LASSO_IS_KEY(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_KEY)) #define LASSO_IS_KEY_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_KEY)) #define LASSO_KEY_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_KEY, \ LassoKeyClass)) typedef struct _LassoKey LassoKey; typedef struct _LassoKeyClass LassoKeyClass; typedef struct _LassoKeyPrivate LassoKeyPrivate; typedef enum _LassoKeyType { LASSO_KEY_TYPE_FOR_SIGNATURE, } LassoKeyType; struct _LassoKey { LassoNode parent; /*< private >*/ LassoKeyPrivate *private_data; }; struct _LassoKeyClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_key_get_type(); LASSO_EXPORT LassoKey* lasso_key_new_for_signature_from_memory(const void *buffer, size_t size, char *password, LassoSignatureMethod signature_method, char *certificate); LASSO_EXPORT LassoKey* lasso_key_new_for_signature_from_base64_string(char *base64_string, char *password, LassoSignatureMethod signature_method, char *certificate); LASSO_EXPORT LassoKey* lasso_key_new_for_signature_from_file(char *filename_or_buffer, char *password, LassoSignatureMethod signature_method, char *certificate); LASSO_EXPORT lasso_error_t lasso_key_query_verify(LassoKey* key, const char *query); LASSO_EXPORT char* lasso_key_query_sign(LassoKey *key, const char *query); LASSO_EXPORT lasso_error_t lasso_key_saml2_xml_verify(LassoKey *key, char *id, xmlNode *document); LASSO_EXPORT xmlNode *lasso_key_saml2_xml_sign(LassoKey *key, const char *id, xmlNode *document); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_KEY_H__ */ lasso-2.8.2/lasso/PaxHeaders/build_strerror.py0000644000000000000000000000013114050545511016455 xustar0030 mtime=1621281609.083309978 30 atime=1678814151.052994092 29 ctime=1678814320.04594782 lasso-2.8.2/lasso/build_strerror.py0000644000175000017500000000221614050545511021727 0ustar00bdauvergnebdauvergne00000000000000#! /usr/bin/env python import glob import re import sys import os from six import print_, StringIO srcdir = sys.argv[1] messages = dict() description = '' with open('%s/errors.h' % srcdir,'r') as f: for line in f: 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) if m: messages[m.group(1)] = m.group(1) 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="") lasso-2.8.2/lasso/PaxHeaders/debug.h0000644000000000000000000000013214114336625014307 xustar0030 mtime=1630649749.794436646 30 atime=1678814151.116994448 30 ctime=1678814320.033947753 lasso-2.8.2/lasso/debug.h0000644000175000017500000000271514114336625017564 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_DEBUG_H__ #define __LASSO_DEBUG_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include #include "export.h" LASSO_EXPORT extern gboolean lasso_flag_verify_signature; LASSO_EXPORT extern gboolean lasso_flag_memory_debug; LASSO_EXPORT extern gboolean lasso_flag_strict_checking; LASSO_EXPORT extern gboolean lasso_flag_add_signature; LASSO_EXPORT extern gboolean lasso_flag_sign_messages; LASSO_EXPORT extern gboolean lasso_flag_thin_sessions; LASSO_EXPORT extern gboolean lasso_flag_pem_public_key; #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_DEBUG_H__ */ lasso-2.8.2/lasso/PaxHeaders/lasso.c0000644000000000000000000000013214364261206014334 xustar0030 mtime=1674666630.746769119 30 atime=1678814241.305501247 30 ctime=1678814320.025947707 lasso-2.8.2/lasso/lasso.c0000644000175000017500000003166214364261206017614 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ /** * SECTION:lasso * @short_description: Initialization functions * * * Environment variables * * LASSO_FLAG is an environment variable containing white-space separated values * which allows to modify the behaviour of lasso. To negate the effect of one of * the value, just add no- in front of its name. The flag are also modifiable * using the lasso_set_flag() function. Those values are: * * * * * * no-verify-signature * Disable the validation of signatures on all message, usually for * debugging pupose * * * memory-debug * Enable the tracing of nodes allocation, deallocation and initialization. * * * strict-checking * Enable checking which were not done in previous version of Lasso, like matching ResponseTo attributes of response messages to the identifier of the request. * * * no-add-signature * Disable all signatures * * * no-sign-messages * Disable signatures on messages. * * * no-sign-messages * Disable signatures on messages. * * * pem-public-key * Allow PEM key in ds:KeyValue nodes, it's outside the XMLSig specification. * * * * * * **/ #include /* getenv */ #include /* strcmp */ #include #include #include #include #include #include "lasso.h" #include "lasso_config.h" #include "debug.h" #include "backward_comp.h" #include "registry-private.h" #include "xml/private.h" #include "utils.h" /* Set to true, it forces lasso_provider_verify_signature and lasso_query_verify_signature to always * return TRUE. */ gboolean lasso_flag_verify_signature = TRUE; /* Set to true, it activates debugging code for LassoNode freeing */ gboolean lasso_flag_memory_debug = FALSE; /* set to true, it activates more strict validation of messages */ gboolean lasso_flag_strict_checking = FALSE; /* set to false, it does not sign messages */ gboolean lasso_flag_add_signature = TRUE; static void lasso_flag_parse_environment_variable(); /* do not sign messages */ gboolean lasso_flag_sign_messages = TRUE; /* thin sessions */ gboolean lasso_flag_thin_sessions = FALSE; /* PEM public key */ gboolean lasso_flag_pem_public_key = FALSE; #ifndef LASSO_FLAG_ENV_VAR #define LASSO_FLAG_ENV_VAR "LASSO_FLAG" #endif #define LASSO_DEFAULT_KEY_ENCRYPTION_METHOD_ENV_VAR "LASSO_DEFAULT_KEY_ENCRYPTION_METHOD" #if defined _MSC_VER HINSTANCE g_hModule = NULL; /** * DllMain: * @hinstDLL: hnadle to the DLL module * @fdwReason: reason value of the DLL call * @lpvReserved: use is unknown. * * Called when the DLL is attached or detached by a program. * * Return value: %TRUE if everything is OK **/ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { if (fdwReason == DLL_PROCESS_ATTACH) { DisableThreadLibraryCalls(hinstDLL); g_hModule = hinstDLL; } return TRUE; } #endif #include "types.c" static void lasso_xml_structured_error_func(G_GNUC_UNUSED void *user_data, xmlErrorPtr error) { g_log("libxml2", G_LOG_LEVEL_DEBUG, "libxml2: %s", error->message); } void lasso_xmlsec_errors_callback(const char *file G_GNUC_UNUSED, int line G_GNUC_UNUSED, const char *func G_GNUC_UNUSED, const char *errorObject G_GNUC_UNUSED, const char *errorSubject G_GNUC_UNUSED, int reason G_GNUC_UNUSED, const char *msg) { g_log("libxmlsec", G_LOG_LEVEL_DEBUG, "libxmlsec: %s:%d:%s:%s:%s:%s:%s", file, line, func, errorObject, errorSubject, xmlSecErrorsGetMsg(reason), msg); } static int set_default_signature_method() { int rv = LASSO_ERROR_UNDEFINED; if (lasso_strisequal(DEFAULT_SIGNING_ALGO, "rsa-sha256")) { lasso_set_default_signature_method(LASSO_SIGNATURE_METHOD_RSA_SHA256); rv = 0; } else if (lasso_strisequal(DEFAULT_SIGNING_ALGO, "rsa-sha1")) { lasso_set_default_signature_method(LASSO_SIGNATURE_METHOD_RSA_SHA1); rv = 0; } return rv; } static int set_min_allowed_hash_algo() { int rv = LASSO_ERROR_UNDEFINED; if (lasso_strisequal(MIN_HASH_ALGO, "sha1")) { lasso_set_min_signature_method(LASSO_SIGNATURE_METHOD_RSA_SHA1); rv = 0; } else if (lasso_strisequal(MIN_HASH_ALGO, "sha256")) { lasso_set_min_signature_method(LASSO_SIGNATURE_METHOD_RSA_SHA256); rv = 0; } else if (lasso_strisequal(MIN_HASH_ALGO, "sha384")) { lasso_set_min_signature_method(LASSO_SIGNATURE_METHOD_RSA_SHA384); rv = 0; } else if (lasso_strisequal(MIN_HASH_ALGO, "sha512")) { lasso_set_min_signature_method(LASSO_SIGNATURE_METHOD_RSA_SHA512); rv = 0; } return rv; } static int set_default_key_encryption_method() { char *env_encryption_sym_key_encryption_algo = getenv(LASSO_DEFAULT_KEY_ENCRYPTION_METHOD_ENV_VAR); if (env_encryption_sym_key_encryption_algo) { LassoKeyEncryptionMethod method = lasso_parse_key_encryption_method( env_encryption_sym_key_encryption_algo); if (method == -1) { message(G_LOG_LEVEL_CRITICAL, "Unsupported key encryption " "method %s configured in environment variable " LASSO_DEFAULT_KEY_ENCRYPTION_METHOD_ENV_VAR, env_encryption_sym_key_encryption_algo); return LASSO_ERROR_UNDEFINED; } lasso_set_default_key_encryption_method(method); return 0; } LassoKeyEncryptionMethod method = lasso_parse_key_encryption_method(DEFAULT_KEY_ENCRYPTION_METHOD); if (method != -1) { lasso_set_default_key_encryption_method(method); return 0; } else { message(G_LOG_LEVEL_CRITICAL, "Unsupported key encryption " "method "DEFAULT_KEY_ENCRYPTION_METHOD" configured"); return LASSO_ERROR_UNDEFINED; } } /** * lasso_init: * * Initializes Lasso library. * * Return value: 0 on success; or a negative value otherwise. **/ int lasso_init() { int i; #ifndef GLIB_VERSION_2_36 g_type_init(); #endif /* Set the default hash algo */ if (set_default_signature_method() != 0) { message(G_LOG_LEVEL_CRITICAL, "Unsupported signature " "algorithm "DEFAULT_SIGNING_ALGO" configured"); return LASSO_ERROR_UNDEFINED; } if (set_min_allowed_hash_algo() != 0) { message(G_LOG_LEVEL_CRITICAL, "Unsupported hash algorithm " "algorithm "MIN_HASH_ALGO" configured"); return LASSO_ERROR_UNDEFINED; } if (set_default_key_encryption_method() != 0) { return LASSO_ERROR_UNDEFINED; } /* Init Lasso classes */ for (i=0; functions[i]; i++) functions[i](); /* Init libxml and libxslt libraries */ xmlInitParser(); /*LIBXML_TEST_VERSION*/ /* xmlLoadExtDtdDefaultValue = XML_DETECT_IDS | XML_COMPLETE_ATTRS; */ /* xmlSubstituteEntitiesDefault(1); */ /* Init xmlsec library */ if (xmlSecInit() < 0) { message(G_LOG_LEVEL_CRITICAL, "XMLSec initialization failed."); return LASSO_ERROR_UNDEFINED; } /* Load default crypto engine if we are supporting dynamic * loading for xmlsec-crypto libraries. Use the crypto library * name ("openssl", "nss", etc.) to load corresponding * xmlsec-crypto library. */ #ifdef XMLSEC_CRYPTO_DYNAMIC_LOADING if (xmlSecCryptoDLLoadLibrary(BAD_CAST XMLSEC_CRYPTO) < 0) { message(G_LOG_LEVEL_CRITICAL, "Unable to load default xmlsec-crypto library. Make sure" "that you have it installed and check shared libraries path" "(LD_LIBRARY_PATH) environment variable."); return LASSO_ERROR_UNDEFINED; } #endif /* XMLSEC_CRYPTO_DYNAMIC_LOADING */ /* Init crypto library */ if (xmlSecCryptoAppInit(NULL) < 0) { message(G_LOG_LEVEL_CRITICAL, "Crypto initialization failed."); return LASSO_ERROR_UNDEFINED; } /* Init xmlsec-crypto library */ if (xmlSecCryptoInit() < 0) { message(G_LOG_LEVEL_CRITICAL, "xmlsec-crypto initialization failed."); return LASSO_ERROR_UNDEFINED; } lasso_flag_parse_environment_variable(); xmlSetStructuredErrorFunc(NULL, lasso_xml_structured_error_func); xmlSecErrorsSetCallback(lasso_xmlsec_errors_callback); return 0; } /** * lasso_shutdown: * * Clean ups Lasso library. * * Return value: 0 on success; or a negative value otherwise. **/ int lasso_shutdown() { /* Shutdown xmlsec-crypto library */ xmlSecCryptoShutdown(); /* Shutdown crypto library */ xmlSecCryptoAppShutdown(); /* Shutdown xmlsec library */ xmlSecShutdown(); /* Shutdown libxslt/libxml */ #ifndef XMLSEC_NO_XSLT xsltCleanupGlobals(); #endif /* XMLSEC_NO_XSLT */ /* Cleanup function for the XML library */ xmlCleanupParser(); /* Disallocate default registry */ lasso_registry_default_shutdown(); if (lasso_flag_memory_debug == TRUE) { /* this is to debug memory for regression tests */ xmlMemoryDump(); } return 0; } /** * lasso_check_version: * @major: major version numbe * @minor: minor version number * @subminor: subminor version number * @mode: version check mode * * Checks if the loaded version of Lasso library could be used. * * Return value: 1 if the loaded lasso library version is OK to use * 0 if it is not; or a negative value if an error occurs. **/ int lasso_check_version(int major, int minor, int subminor, LassoCheckVersionMode mode) { if (mode == LASSO_CHECK_VERSION_NUMERIC) { if (LASSO_VERSION_MAJOR*10000 + LASSO_VERSION_MINOR*100 + LASSO_VERSION_SUBMINOR < major*10000 + minor*100 + subminor) return 0; return 1; } /* we always want to have a match for major version number */ if (major != LASSO_VERSION_MAJOR) { return 0; } if (mode == LASSO_CHECK_VERSION_EXACT) { if (minor != LASSO_VERSION_MINOR || subminor != LASSO_VERSION_SUBMINOR) { return 0; } } if (mode == LASSO_CHECK_VERSIONABI_COMPATIBLE) { if (minor < LASSO_VERSION_MINOR || (minor == LASSO_VERSION_MINOR && subminor < LASSO_VERSION_SUBMINOR)) { return 0; } } if (mode > LASSO_CHECK_VERSION_NUMERIC) return LASSO_ERROR_UNDEFINED; return 1; } /** * lasso_set_flag: * @flag: a string representing a flag name, prefix with 'no-' to disable it. * * Set a debugging flag. You can also use the environment variable LASSO_FLAG * to get the same effect. LASSO_FLAG must contain flag name separated by spaces, commas, * tabulations or colons. */ void lasso_set_flag(char *flag) { gboolean value = TRUE; g_return_if_fail(flag); /* Handle negative flags */ if (flag && strncmp(flag, "no-", 3) == 0) { value = FALSE; flag += 3; } do { if (lasso_strisequal(flag,"verify-signature")) { lasso_flag_verify_signature = value; continue; } if (lasso_strisequal(flag,"memory-debug")) { lasso_flag_memory_debug = value; continue; } if (lasso_strisequal(flag,"strict-checking")) { lasso_flag_strict_checking = value; continue; } if (lasso_strisequal(flag,"add-signature")) { lasso_flag_add_signature = value; continue; } if (lasso_strisequal(flag,"sign-messages")) { lasso_flag_sign_messages = value; continue; } if (lasso_strisequal(flag,"thin-sessions")) { lasso_flag_thin_sessions = value; } if (lasso_strisequal(flag,"pem-public-key")) { lasso_flag_pem_public_key = value; } } while (FALSE); } static void lasso_flag_parse_environment_variable() { char *lasso_flag = getenv(LASSO_FLAG_ENV_VAR); char *save_ptr; char *token; const char delim[] = ", \t:"; if (lasso_flag) { token = strtok_r(lasso_flag, delim, &save_ptr); do { lasso_set_flag(token); } while ((token = strtok_r(NULL, delim, &save_ptr)) != NULL); } } /* Deprecated functions, kept only to maintain the ABI and the SONAME */ void lasso_register_dst_service(G_GNUC_UNUSED const char *prefix, G_GNUC_UNUSED const char *href) { } char* lasso_get_prefix_for_dst_service_href(G_GNUC_UNUSED const char *href) { return NULL; } void lasso_register_idwsf2_dst_service(G_GNUC_UNUSED const gchar *prefix, G_GNUC_UNUSED const gchar *href) { } gchar* lasso_get_prefix_for_idwsf2_dst_service_href(G_GNUC_UNUSED const gchar *href) { return NULL; } lasso-2.8.2/lasso/PaxHeaders/id-ff0000644000000000000000000000013214404126161013752 xustar0030 mtime=1678814321.005953287 30 atime=1678814326.421984131 30 ctime=1678814321.005953287 lasso-2.8.2/lasso/id-ff/0000755000175000017500000000000014404126161017277 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/lasso/id-ff/PaxHeaders/server.h0000644000000000000000000000013214114500706015505 xustar0030 mtime=1630699974.070799833 30 atime=1678814151.008993845 30 ctime=1678814320.969953082 lasso-2.8.2/lasso/id-ff/server.h0000644000175000017500000001260114114500706020755 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SERVER_H__ #define __LASSO_SERVER_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "provider.h" #define LASSO_TYPE_SERVER (lasso_server_get_type()) #define LASSO_SERVER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SERVER, LassoServer)) #define LASSO_SERVER_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SERVER, LassoServerClass)) #define LASSO_IS_SERVER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SERVER)) #define LASSO_IS_SERVER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SERVER)) #define LASSO_SERVER_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SERVER, LassoServerClass)) typedef struct _LassoServer LassoServer; typedef struct _LassoServerClass LassoServerClass; typedef struct _LassoServerPrivate LassoServerPrivate; struct _LassoServer { LassoProvider parent; /*< public >*/ GHashTable *providers; /* of LassoProvider */ /* Can actually contain LassoDataService or LassoIdWsf2DataService or any subclass */ /*< private >*/ GHashTable *services; /* of LassoDataService */ /*< public >*/ gchar *private_key; gchar *private_key_password; gchar *certificate; LassoSignatureMethod signature_method; /*< private >*/ LassoServerPrivate *private_data; }; struct _LassoServerClass { LassoProviderClass parent; }; /** * LassoServerLoadMetadataFlag: * @LASSO_SERVER_LOAD_METADATA_FLAG_DEFAULT: the default policy is to check signature on entity and * entities descriptor, and to let signature be inherited by child nodes. * @LASSO_SERVER_LOAD_METADATA_FLAG_CHECK_ENTITIES_DESCRIPTOR_SIGNATURE: check signature on * EntitiesDesctiptor nodes, * @LASSO_SERVER_LOAD_METADATA_FLAG_CHECK_ENTITY_DESCRIPTOR_SIGNATURE: check signature on * EntityDescriptor nodes, * @LASSO_SERVER_LOAD_METADATA_FLAG_INHERIT_SIGNATURE: when an EntitiesDescriptor is signed, all its * children inherit the trust from this signature and their signature is not checked. */ typedef enum { LASSO_SERVER_LOAD_METADATA_FLAG_DEFAULT = 0, LASSO_SERVER_LOAD_METADATA_FLAG_CHECK_ENTITIES_DESCRIPTOR_SIGNATURE = 1, LASSO_SERVER_LOAD_METADATA_FLAG_CHECK_ENTITY_DESCRIPTOR_SIGNATURE = 2, LASSO_SERVER_LOAD_METADATA_FLAG_INHERIT_SIGNATURE = 4 } LassoServerLoadMetadataFlag; LASSO_EXPORT GType lasso_server_get_type(void); LASSO_EXPORT LassoServer* lasso_server_new(const gchar *metadata, const gchar *private_key, const gchar *private_key_password, const gchar *certificate); LASSO_EXPORT LassoServer* lasso_server_new_from_buffers(const gchar *metadata, const gchar *private_key_content, const gchar *private_key_password, const gchar *certificate_content); LASSO_EXPORT LassoServer* lasso_server_new_from_dump(const gchar *dump); LASSO_EXPORT lasso_error_t lasso_server_add_provider (LassoServer *server, LassoProviderRole role, const gchar *metadata, const gchar *public_key, const gchar *ca_cert_chain); LASSO_EXPORT lasso_error_t lasso_server_add_provider_from_buffer (LassoServer *server, LassoProviderRole role, const gchar *metadata, const gchar *public_key, const gchar *ca_cert_chain); LASSO_EXPORT void lasso_server_destroy(LassoServer *server); LASSO_EXPORT gchar* lasso_server_dump(LassoServer *server); LASSO_EXPORT LassoProvider* lasso_server_get_provider(const LassoServer *server, const gchar *providerID); LASSO_EXPORT lasso_error_t lasso_server_set_encryption_private_key(LassoServer *server, const gchar *filename_or_buffer); LASSO_EXPORT lasso_error_t lasso_server_load_affiliation(LassoServer *server, const gchar* filename); LASSO_EXPORT lasso_error_t lasso_server_set_encryption_private_key_with_password(LassoServer *server, const gchar *filename_or_buffer, const gchar *password); LASSO_EXPORT lasso_error_t lasso_server_load_metadata(LassoServer *server, LassoProviderRole role, const gchar *federation_file, const gchar *trusted_roots, GList *blacklisted_entity_ids, GList **loaded_entity_ids, LassoServerLoadMetadataFlag flags); LASSO_EXPORT lasso_error_t lasso_server_add_provider2(LassoServer *server, LassoProvider *provider); LASSO_EXPORT gchar *lasso_server_get_endpoint_url_by_id(const LassoServer *server, const gchar *provider_id, const gchar *endpoint_description); LASSO_EXPORT GList *lasso_server_get_filtered_provider_list(const LassoServer *server, LassoProviderRole role, LassoMdProtocolType protocol_type, LassoHttpMethod http_method); LASSO_EXPORT LassoSignatureMethod lasso_get_default_signature_method(); void lasso_set_default_signature_method(LassoSignatureMethod meth); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SERVER_H__ */ lasso-2.8.2/lasso/id-ff/PaxHeaders/federation.h0000644000000000000000000000013014114336625016324 xustar0029 mtime=1630649749.79843669 30 atime=1678814151.004993823 29 ctime=1678814320.95395299 lasso-2.8.2/lasso/id-ff/federation.h0000644000175000017500000000520714114336625021602 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_FEDERATION_H__ #define __LASSO_FEDERATION_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "../xml/xml.h" #include "../xml/saml_name_identifier.h" #define LASSO_TYPE_FEDERATION (lasso_federation_get_type()) #define LASSO_FEDERATION(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_FEDERATION, LassoFederation)) #define LASSO_FEDERATION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_FEDERATION, LassoFederationClass)) #define LASSO_IS_FEDERATION(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_FEDERATION)) #define LASSO_IS_FEDERATION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_FEDERATION)) #define LASSO_FEDERATION_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_FEDERATION, LassoFederationClass)) typedef struct _LassoFederation LassoFederation; typedef struct _LassoFederationClass LassoFederationClass; typedef struct _LassoFederationPrivate LassoFederationPrivate; struct _LassoFederation { LassoNode parent; /*< public >*/ gchar *remote_providerID; LassoNode *local_nameIdentifier; LassoNode *remote_nameIdentifier; /*< private >*/ LassoFederationPrivate *private_data; }; struct _LassoFederationClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_federation_get_type(void); LASSO_EXPORT LassoFederation* lasso_federation_new(const gchar *remote_providerID); LASSO_EXPORT void lasso_federation_build_local_name_identifier(LassoFederation *federation, const gchar *nameQualifier, const gchar *format, const gchar *content); LASSO_EXPORT void lasso_federation_destroy(LassoFederation *federation); LASSO_EXPORT gboolean lasso_federation_verify_name_identifier( LassoFederation *federation, LassoNode *name_identifier); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_FEDERATION_H__ */ lasso-2.8.2/lasso/id-ff/PaxHeaders/Makefile.am0000644000000000000000000000013213766621500016072 xustar0030 mtime=1608196928.774895399 30 atime=1678814114.784791916 30 ctime=1678814320.949952968 lasso-2.8.2/lasso/id-ff/Makefile.am0000644000175000017500000000153513766621500021346 0ustar00bdauvergnebdauvergne00000000000000MAINTAINERCLEANFILES = Makefile.in liblassoincludedir = $(includedir)/lasso/id-ff AM_CPPFLAGS = \ -I$(top_builddir) \ -I$(top_srcdir) \ $(LASSO_CORE_CFLAGS) \ -DG_LOG_DOMAIN=\"lasso\" noinst_LTLIBRARIES = liblasso-id-ff.la liblasso_id_ff_la_SOURCES = \ defederation.c \ federation.c \ identity.c \ lecp.c \ login.c \ logout.c \ name_identifier_mapping.c \ name_registration.c \ profile.c \ provider.c \ session.c \ server.c lasso_private_h_sources = \ identityprivate.h \ profileprivate.h \ providerprivate.h \ serverprivate.h \ sessionprivate.h \ logoutprivate.h \ loginprivate.h liblassoinclude_HEADERS = \ defederation.h \ federation.h \ identity.h \ lecp.h \ login.h \ logout.h \ name_identifier_mapping.h \ name_registration.h \ profile.h \ provider.h \ server.h \ session.h EXTRA_DIST = $(lasso_private_h_sources) lasso-2.8.2/lasso/id-ff/PaxHeaders/login.h0000644000000000000000000000013214115351423015310 xustar0030 mtime=1630917395.107573284 30 atime=1678814151.008993845 30 ctime=1678814320.961953036 lasso-2.8.2/lasso/id-ff/login.h0000644000175000017500000001435014115351423020563 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_LOGIN_H__ #define __LASSO_LOGIN_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "../xml/lib_authn_request.h" #include "../xml/lib_authn_response.h" #include "../xml/samlp_request.h" #include "../xml/samlp_response.h" #include "profile.h" #define LASSO_TYPE_LOGIN (lasso_login_get_type()) #define LASSO_LOGIN(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_LOGIN, LassoLogin)) #define LASSO_LOGIN_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_LOGIN, LassoLoginClass)) #define LASSO_IS_LOGIN(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_LOGIN)) #define LASSO_IS_LOGIN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_LOGIN)) #define LASSO_LOGIN_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_LOGIN, LassoLoginClass)) typedef struct _LassoLogin LassoLogin; typedef struct _LassoLoginClass LassoLoginClass; typedef struct _LassoLoginPrivate LassoLoginPrivate; /** * LassoLoginProtocolProfile: * @LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_ART: response is transmitted through a redirect request with * an artifact, followed by an artifact resolution request by the service provider. * @LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_POST: response is transmitted through a POST. * @LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_LECP: response is transmitted in a PAOS response (see * #LassoLecp). * @LASSO_LOGIN_PROTOCOL_PROFILE_REDIRECT: response is transmitted through a redirect. * * Identifies the four possible profiles for Single Sign-On and Federation. It defined how the * response to authentication request will transmitted to the service provider. */ typedef enum { LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_ART = 1, LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_POST, LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_LECP, LASSO_LOGIN_PROTOCOL_PROFILE_REDIRECT, } LassoLoginProtocolProfile; /** * LassoLogin: * @protocolProfile: the kind of binding used for this authentication request. * @assertionArtifact: a string representing the artifact received through an artifact resolution. * request * @assertion: after calling lasso_login_build_assertion(), lasso_login_process_response_msg() or * lasso_login_process_authn_response_msg(), the assertion is stored here. * @nameIDPolicy: after calling lasso_login_process_request_msg(), the name id policy is stored * here. * @http_method: after calling lasso_login_init_authn_request(), the chosen #LassoHttpMethod is kept * here and is used after by lasso_login_build_authn_request(). * * Single sign-on profile for the current transaction; possibly an * assertionArtifact to be used by the service provider in its * "assertionConsumerServiceURL" and the assertion created or received for the * principal. */ struct _LassoLogin { LassoProfile parent; /*< public >*/ LassoLoginProtocolProfile protocolProfile; gchar *assertionArtifact; /*< private >*/ LassoSamlAssertion *assertion; gchar *nameIDPolicy; LassoHttpMethod http_method; LassoLoginPrivate *private_data; }; struct _LassoLoginClass { LassoProfileClass parent; }; LASSO_EXPORT GType lasso_login_get_type(void); LASSO_EXPORT LassoLogin* lasso_login_new(LassoServer *server); LASSO_EXPORT LassoLogin* lasso_login_new_from_dump(LassoServer *server, const gchar *dump); LASSO_EXPORT lasso_error_t lasso_login_accept_sso(LassoLogin *login); LASSO_EXPORT lasso_error_t lasso_login_build_artifact_msg(LassoLogin *login, LassoHttpMethod http_method); LASSO_EXPORT lasso_error_t lasso_login_build_assertion(LassoLogin *login, const char *authenticationMethod, const char *authenticationInstant, const char *reauthenticateOnOrAfter, const char *notBefore, const char *notOnOrAfter); LASSO_EXPORT lasso_error_t lasso_login_build_authn_request_msg(LassoLogin *login); LASSO_EXPORT lasso_error_t lasso_login_build_authn_response_msg(LassoLogin *login); LASSO_EXPORT lasso_error_t lasso_login_build_request_msg(LassoLogin *login); LASSO_EXPORT lasso_error_t lasso_login_build_response_msg(LassoLogin *login, gchar *remote_providerID); LASSO_EXPORT void lasso_login_destroy(LassoLogin *login); LASSO_EXPORT gchar* lasso_login_dump(LassoLogin *login); LASSO_EXPORT lasso_error_t lasso_login_init_authn_request(LassoLogin *login, const gchar *remote_providerID, LassoHttpMethod http_method); LASSO_EXPORT lasso_error_t lasso_login_init_request(LassoLogin *login, gchar *response_msg, LassoHttpMethod response_http_method); LASSO_EXPORT lasso_error_t lasso_login_init_idp_initiated_authn_request(LassoLogin *login, const gchar *remote_providerID); LASSO_EXPORT gboolean lasso_login_must_ask_for_consent(LassoLogin *login); LASSO_EXPORT gboolean lasso_login_must_authenticate(LassoLogin *login); LASSO_EXPORT lasso_error_t lasso_login_process_authn_request_msg(LassoLogin *login, const char *authn_request_msg); LASSO_EXPORT lasso_error_t lasso_login_process_authn_response_msg(LassoLogin *login, gchar *authn_response_msg); LASSO_EXPORT lasso_error_t lasso_login_process_request_msg(LassoLogin *login, gchar *request_msg); LASSO_EXPORT lasso_error_t lasso_login_process_response_msg(LassoLogin *login, gchar *response_msg); LASSO_EXPORT lasso_error_t lasso_login_validate_request_msg(LassoLogin *login, gboolean authentication_result, gboolean is_consent_obtained); LASSO_EXPORT lasso_error_t lasso_login_process_paos_response_msg(LassoLogin *login, gchar *msg); LASSO_EXPORT LassoNode *lasso_login_get_assertion(LassoLogin *login); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_LOGIN_H__ */ lasso-2.8.2/lasso/id-ff/PaxHeaders/profileprivate.h0000644000000000000000000000013214115351423017233 xustar0030 mtime=1630917395.107573284 30 atime=1678814151.008993845 30 ctime=1678814320.997953241 lasso-2.8.2/lasso/id-ff/profileprivate.h0000644000175000017500000000313114115351423022501 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_PROFILE_PRIVATE_H__ #define __LASSO_PROFILE_PRIVATE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "profile.h" struct _LassoProfilePrivate { char *artifact; char *artifact_message; gboolean dispose_has_run; LassoProfileSignatureHint signature_hint; LassoProfileSignatureVerifyHint signature_verify_hint; gchar *message_id; LassoNode *idp_list; }; void lasso_profile_set_response_status(LassoProfile *profile, const gchar *statusCodeValue); void lasso_profile_clean_msg_info(LassoProfile *profile); #define LASSO_PROFILE_GET_PRIVATE(o) \ (G_TYPE_INSTANCE_GET_PRIVATE ((o), LASSO_TYPE_PROFILE, LassoProfilePrivate)) #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_PROFILE_PRIVATE_H__ */ lasso-2.8.2/lasso/id-ff/PaxHeaders/Makefile.in0000644000000000000000000000013114404125673016102 xustar0029 mtime=1678814139.64893041 30 atime=1678814149.864987452 30 ctime=1678814320.973953104 lasso-2.8.2/lasso/id-ff/Makefile.in0000644000175000017500000006504614404125673021366 0ustar00bdauvergnebdauvergne00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = lasso/id-ff ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ac_check_class.m4 \ $(top_srcdir)/m4/ac_check_classpath.m4 \ $(top_srcdir)/m4/ac_check_junit.m4 \ $(top_srcdir)/m4/ac_prog_jar.m4 \ $(top_srcdir)/m4/ac_prog_java.m4 \ $(top_srcdir)/m4/ac_prog_java_works.m4 \ $(top_srcdir)/m4/ac_prog_javac.m4 \ $(top_srcdir)/m4/ac_prog_javac_works.m4 \ $(top_srcdir)/m4/ac_prog_javah.m4 \ $(top_srcdir)/m4/ac_try_compile_java.m4 \ $(top_srcdir)/m4/as-compiler-flag.m4 \ $(top_srcdir)/m4/dps_java_check_class.m4 \ $(top_srcdir)/m4/dps_xtra_classpath.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(liblassoinclude_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h \ $(top_builddir)/lasso/lasso_config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) liblasso_id_ff_la_LIBADD = am_liblasso_id_ff_la_OBJECTS = defederation.lo federation.lo \ identity.lo lecp.lo login.lo logout.lo \ name_identifier_mapping.lo name_registration.lo profile.lo \ provider.lo session.lo server.lo liblasso_id_ff_la_OBJECTS = $(am_liblasso_id_ff_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -I$(top_builddir)/lasso depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/defederation.Plo \ ./$(DEPDIR)/federation.Plo ./$(DEPDIR)/identity.Plo \ ./$(DEPDIR)/lecp.Plo ./$(DEPDIR)/login.Plo \ ./$(DEPDIR)/logout.Plo ./$(DEPDIR)/name_identifier_mapping.Plo \ ./$(DEPDIR)/name_registration.Plo ./$(DEPDIR)/profile.Plo \ ./$(DEPDIR)/provider.Plo ./$(DEPDIR)/server.Plo \ ./$(DEPDIR)/session.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(liblasso_id_ff_la_SOURCES) DIST_SOURCES = $(liblasso_id_ff_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(liblassoincludedir)" HEADERS = $(liblassoinclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CHECK_CFLAGS = @CHECK_CFLAGS@ CHECK_LIBS = @CHECK_LIBS@ CLASSPATH_JUNIT = @CLASSPATH_JUNIT@ CLASSPATH_OPT = @CLASSPATH_OPT@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CSHARPCILINTERPRETER = @CSHARPCILINTERPRETER@ CSHARPCOMPILER = @CSHARPCOMPILER@ CSHARPCYGPATH_W = @CSHARPCYGPATH_W@ CSHARPDYNAMICLINKING = @CSHARPDYNAMICLINKING@ CSHARPLIBRARYPREFIX = @CSHARPLIBRARYPREFIX@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEBUGGING = @DEBUGGING@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLL_FILENAME = @DLL_FILENAME@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GACUTIL = @GACUTIL@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HTML_DIR = @HTML_DIR@ INKSCAPE = @INKSCAPE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVAC_FLAGS = @JAVAC_FLAGS@ JAVAH = @JAVAH@ JAVAH_FLAGS = @JAVAH_FLAGS@ JAVA_INCLUDE = @JAVA_INCLUDE@ JAVA_JUNIT = @JAVA_JUNIT@ JAVA_VERSION = @JAVA_VERSION@ JDK_INCLUDE = @JDK_INCLUDE@ JNI_EXTRA_LDFLAGS = @JNI_EXTRA_LDFLAGS@ JUNIT = @JUNIT@ LASSO_APP_DEFINES = @LASSO_APP_DEFINES@ LASSO_CFLAGS = @LASSO_CFLAGS@ LASSO_CORE_CFLAGS = @LASSO_CORE_CFLAGS@ LASSO_CORE_LIBS = @LASSO_CORE_LIBS@ LASSO_DEFINES = @LASSO_DEFINES@ LASSO_DOCDIR = @LASSO_DOCDIR@ LASSO_LIBS = @LASSO_LIBS@ LASSO_PUB_CFLAGS = @LASSO_PUB_CFLAGS@ LASSO_STATIC_BINARIES = @LASSO_STATIC_BINARIES@ LASSO_VERSION_INFO = @LASSO_VERSION_INFO@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PERLINSTALLSITEARCH = @PERLINSTALLSITEARCH@ PERLMAN3DIR = @PERLMAN3DIR@ PERL_CFLAGS = @PERL_CFLAGS@ PERL_VERSION = @PERL_VERSION@ PHP5 = @PHP5@ PHP5_CONFIG = @PHP5_CONFIG@ PHP5_CONFIG_DIR = @PHP5_CONFIG_DIR@ PHP5_EXTENSION_DIR = @PHP5_EXTENSION_DIR@ PHP5_INCLUDES = @PHP5_INCLUDES@ PHP5_INCLUDE_DIR = @PHP5_INCLUDE_DIR@ PHP5_LDFLAGS = @PHP5_LDFLAGS@ PHP5_LIBS = @PHP5_LIBS@ PHP5_PREFIX = @PHP5_PREFIX@ PHP5_UNPREFIXED_EXTENSION_DIR = @PHP5_UNPREFIXED_EXTENSION_DIR@ PHP5_VERSION = @PHP5_VERSION@ PHP7 = @PHP7@ PHP7_CONFIG = @PHP7_CONFIG@ PHP7_CONFIG_DIR = @PHP7_CONFIG_DIR@ PHP7_EXTENSION_DIR = @PHP7_EXTENSION_DIR@ PHP7_INCLUDES = @PHP7_INCLUDES@ PHP7_INCLUDE_DIR = @PHP7_INCLUDE_DIR@ PHP7_LDFLAGS = @PHP7_LDFLAGS@ PHP7_LIBS = @PHP7_LIBS@ PHP7_PREFIX = @PHP7_PREFIX@ PHP7_UNPREFIXED_EXTENSION_DIR = @PHP7_UNPREFIXED_EXTENSION_DIR@ PHP7_VERSION = @PHP7_VERSION@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PYTHON = @PYTHON@ PYTHON_VERSION = @PYTHON_VERSION@ PY_CFLAGS = @PY_CFLAGS@ PY_DYNLOAD = @PY_DYNLOAD@ PY_EXTRA_LIBS = @PY_EXTRA_LIBS@ PY_LIB_A = @PY_LIB_A@ PY_LIB_LOC = @PY_LIB_LOC@ PY_SITE_PACKAGES = @PY_SITE_PACKAGES@ RANLIB = @RANLIB@ RC = @RC@ REST2HTML = @REST2HTML@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_VERSION = @SWIG_VERSION@ TAR = @TAR@ TESTS_JUNIT = @TESTS_JUNIT@ UPCASED_DLL_FILENAME = @UPCASED_DLL_FILENAME@ VERSION = @VERSION@ VERSION_UNDERSCORED = @VERSION_UNDERSCORED@ WINDOWS_VERSION = @WINDOWS_VERSION@ XSLTPROC = @XSLTPROC@ Z_CFLAGS = @Z_CFLAGS@ Z_LIBS = @Z_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ uudecode = @uudecode@ MAINTAINERCLEANFILES = Makefile.in liblassoincludedir = $(includedir)/lasso/id-ff AM_CPPFLAGS = \ -I$(top_builddir) \ -I$(top_srcdir) \ $(LASSO_CORE_CFLAGS) \ -DG_LOG_DOMAIN=\"lasso\" noinst_LTLIBRARIES = liblasso-id-ff.la liblasso_id_ff_la_SOURCES = \ defederation.c \ federation.c \ identity.c \ lecp.c \ login.c \ logout.c \ name_identifier_mapping.c \ name_registration.c \ profile.c \ provider.c \ session.c \ server.c lasso_private_h_sources = \ identityprivate.h \ profileprivate.h \ providerprivate.h \ serverprivate.h \ sessionprivate.h \ logoutprivate.h \ loginprivate.h liblassoinclude_HEADERS = \ defederation.h \ federation.h \ identity.h \ lecp.h \ login.h \ logout.h \ name_identifier_mapping.h \ name_registration.h \ profile.h \ provider.h \ server.h \ session.h EXTRA_DIST = $(lasso_private_h_sources) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign lasso/id-ff/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign lasso/id-ff/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } liblasso-id-ff.la: $(liblasso_id_ff_la_OBJECTS) $(liblasso_id_ff_la_DEPENDENCIES) $(EXTRA_liblasso_id_ff_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(liblasso_id_ff_la_OBJECTS) $(liblasso_id_ff_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/defederation.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/federation.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/identity.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lecp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/login.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/logout.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/name_identifier_mapping.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/name_registration.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/profile.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/provider.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/server.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/session.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-liblassoincludeHEADERS: $(liblassoinclude_HEADERS) @$(NORMAL_INSTALL) @list='$(liblassoinclude_HEADERS)'; test -n "$(liblassoincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(liblassoincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(liblassoincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(liblassoincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(liblassoincludedir)" || exit $$?; \ done uninstall-liblassoincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(liblassoinclude_HEADERS)'; test -n "$(liblassoincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(liblassoincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(liblassoincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/defederation.Plo -rm -f ./$(DEPDIR)/federation.Plo -rm -f ./$(DEPDIR)/identity.Plo -rm -f ./$(DEPDIR)/lecp.Plo -rm -f ./$(DEPDIR)/login.Plo -rm -f ./$(DEPDIR)/logout.Plo -rm -f ./$(DEPDIR)/name_identifier_mapping.Plo -rm -f ./$(DEPDIR)/name_registration.Plo -rm -f ./$(DEPDIR)/profile.Plo -rm -f ./$(DEPDIR)/provider.Plo -rm -f ./$(DEPDIR)/server.Plo -rm -f ./$(DEPDIR)/session.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-liblassoincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/defederation.Plo -rm -f ./$(DEPDIR)/federation.Plo -rm -f ./$(DEPDIR)/identity.Plo -rm -f ./$(DEPDIR)/lecp.Plo -rm -f ./$(DEPDIR)/login.Plo -rm -f ./$(DEPDIR)/logout.Plo -rm -f ./$(DEPDIR)/name_identifier_mapping.Plo -rm -f ./$(DEPDIR)/name_registration.Plo -rm -f ./$(DEPDIR)/profile.Plo -rm -f ./$(DEPDIR)/provider.Plo -rm -f ./$(DEPDIR)/server.Plo -rm -f ./$(DEPDIR)/session.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-liblassoincludeHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libtool clean-noinstLTLIBRARIES \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-liblassoincludeHEADERS \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-liblassoincludeHEADERS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lasso-2.8.2/lasso/id-ff/PaxHeaders/serverprivate.h0000644000000000000000000000013214114336625017107 xustar0030 mtime=1630649749.806436776 30 atime=1678814151.008993845 30 ctime=1678814320.997953241 lasso-2.8.2/lasso/id-ff/serverprivate.h0000644000175000017500000000442514114336625022364 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SERVER_PRIVATE_H__ #define __LASSO_SERVER_PRIVATE_H__ #include "server.h" #include "../xml/private.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ struct _LassoServerPrivate { gboolean dispose_has_run; GList *encryption_private_keys; GList *svc_metadatas; }; gchar* lasso_server_get_first_providerID(LassoServer *server); gchar* lasso_server_get_first_providerID_by_role(const LassoServer *server, LassoProviderRole role); gchar* lasso_server_get_providerID_from_hash(LassoServer *server, gchar *b64_hash); xmlSecKey* lasso_server_get_private_key(LassoServer *server); GList* lasso_server_get_encryption_private_keys(LassoServer *server); lasso_error_t lasso_server_get_signature_context_for_provider(LassoServer *server, LassoProvider *provider, LassoSignatureContext *signature_context); lasso_error_t lasso_server_get_signature_context_for_provider_by_name(LassoServer *server, const char *provider_id, LassoSignatureContext *signature_context); lasso_error_t lasso_server_set_signature_for_provider_by_name(LassoServer *server, const char *provider_id, LassoNode *node); lasso_error_t lasso_server_export_to_query_for_provider_by_name(LassoServer *server, const char *provider_id, LassoNode *node, char **query); lasso_error_t lasso_server_get_signature_context(LassoServer *server, LassoSignatureContext *context); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SERVER_PRIVATE_H__ */ lasso-2.8.2/lasso/id-ff/PaxHeaders/profile.c0000644000000000000000000000013014364261206015636 xustar0029 mtime=1674666630.73876907 29 atime=1678814223.89740301 30 ctime=1678814320.989953195 lasso-2.8.2/lasso/id-ff/profile.c0000644000175000017500000007162114364261206021117 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ /** * SECTION:profile * @short_description: Base class for all identity profiles * **/ #include "../xml/private.h" #include #include #include "../xml/samlp_response.h" #include "../xml/samlp_request.h" #include "../xml/lib_authn_response.h" #include "../xml/lib_status_response.h" #include "profile.h" #include "profileprivate.h" #include "providerprivate.h" #include "sessionprivate.h" #include "../saml-2.0/profileprivate.h" #include "../xml/saml-2.0/saml2_name_id.h" #include "../xml/saml_name_identifier.h" #include "../xml/saml-2.0/saml2_assertion.h" #include "../xml/soap-1.1/soap_fault.h" #include "../utils.h" #include "../debug.h" #include "../lasso_config.h" #include /*****************************************************************************/ /* public functions */ /*****************************************************************************/ static LassoNode* _lasso_saml_assertion_get_name_id(LassoSamlAssertion *assertion) { LassoSamlAuthenticationStatement *authn_statement; LassoSamlSubject *subject; goto_cleanup_if_fail(LASSO_IS_SAML_ASSERTION(assertion)); authn_statement = assertion->AuthenticationStatement; goto_cleanup_if_fail(LASSO_IS_SAML_AUTHENTICATION_STATEMENT(authn_statement)); subject = authn_statement->parent.Subject; goto_cleanup_if_fail(LASSO_IS_SAML_SUBJECT(subject)); if (LASSO_IS_SAML_NAME_IDENTIFIER(subject->NameIdentifier)) return (LassoNode*)subject->NameIdentifier; cleanup: return NULL; } static LassoNode* _lasso_saml2_assertion_get_name_id(LassoSaml2Assertion *assertion) { LassoSaml2Subject *subject; goto_cleanup_if_fail(LASSO_SAML2_ASSERTION(assertion)); subject = assertion->Subject; goto_cleanup_if_fail(LASSO_SAML2_SUBJECT(subject)); if (LASSO_IS_SAML2_NAME_ID(subject->NameID)) return (LassoNode*)subject->NameID; cleanup: return NULL; } /** * lasso_profile_get_nameIdentifier: * @profile: a #LassoProfile * * Looks up appropriate federation in object and gets the service provider name * identifier (which is actually a #LassoSamlNameIdentifier in ID-FF 1.2 and * #LassoSaml2NameID in SAML 2.0). * * Return value:(transfer none): the name identifier or NULL if none was found. The #LassoNode * object is internally allocated and must not be freed by the caller. **/ LassoNode* lasso_profile_get_nameIdentifier(LassoProfile *profile) { LassoProvider *remote_provider; LassoFederation *federation; const char *name_id_sp_name_qualifier; if (!LASSO_IS_PROFILE(profile)) { return NULL; } if (profile->remote_providerID == NULL) return NULL; /* For transient federations, we must look at assertions no federation object exists */ if (LASSO_IS_SESSION(profile->session)) { LassoNode *assertion, *name_id; assertion = lasso_session_get_assertion(profile->session, profile->remote_providerID); name_id = _lasso_saml_assertion_get_name_id((LassoSamlAssertion*)assertion); if (name_id) return name_id; name_id = _lasso_saml2_assertion_get_name_id((LassoSaml2Assertion*)assertion); if (name_id) return name_id; } /* beware, it is not a real loop ! */ if (LASSO_IS_IDENTITY(profile->identity)) do { remote_provider = lasso_server_get_provider(profile->server, profile->remote_providerID); if (remote_provider == NULL) break; name_id_sp_name_qualifier = lasso_provider_get_sp_name_qualifier(remote_provider); if (name_id_sp_name_qualifier == NULL) break; federation = g_hash_table_lookup( profile->identity->federations, name_id_sp_name_qualifier); if (federation == NULL) break; if (federation->remote_nameIdentifier) return federation->remote_nameIdentifier; return federation->local_nameIdentifier; } while (FALSE); return NULL; } /** * lasso_profile_get_request_type_from_soap_msg: * @soap: the SOAP message * * Looks up and return the type of the request in a SOAP message. * * Return value: the type of request **/ LassoRequestType lasso_profile_get_request_type_from_soap_msg(const gchar *soap) { xmlDoc *doc; xmlXPathContext *xpathCtx; xmlXPathObject *xpathObj; LassoRequestType type = LASSO_REQUEST_TYPE_INVALID; const char *name = NULL; xmlNs *ns = NULL; xmlError error; memset(&error, 0, sizeof(xmlError)); if (soap == NULL) return LASSO_REQUEST_TYPE_INVALID; doc = lasso_xml_parse_memory_with_error(soap, strlen(soap), &error); if (! doc) { message(G_LOG_LEVEL_WARNING, "Invalid soap message: %s", error.message); type = LASSO_REQUEST_TYPE_INVALID; goto cleanup; } xpathCtx = xmlXPathNewContext(doc); xmlXPathRegisterNs(xpathCtx, (xmlChar*)"s", (xmlChar*)LASSO_SOAP_ENV_HREF); xpathObj = xmlXPathEvalExpression((xmlChar*)"//s:Body/*", xpathCtx); if (xpathObj && xpathObj->nodesetval && xpathObj->nodesetval->nodeNr) { name = (char*)xpathObj->nodesetval->nodeTab[0]->name; ns = xpathObj->nodesetval->nodeTab[0]->ns; } if (name == NULL || ns == NULL) { message(G_LOG_LEVEL_WARNING, "Invalid SOAP request"); } else if (strcmp(name, "Request") == 0) { type = LASSO_REQUEST_TYPE_LOGIN; } else if (strcmp(name, "LogoutRequest") == 0) { type = LASSO_REQUEST_TYPE_LOGOUT; } else if (strcmp(name, "FederationTerminationNotification") == 0) { type = LASSO_REQUEST_TYPE_DEFEDERATION; } else if (strcmp(name, "RegisterNameIdentifierRequest") == 0) { type = LASSO_REQUEST_TYPE_NAME_REGISTRATION; } else if (strcmp(name, "NameIdentifierMappingRequest") == 0) { type = LASSO_REQUEST_TYPE_NAME_IDENTIFIER_MAPPING; } else if (strcmp(name, "AuthnRequest") == 0) { type = LASSO_REQUEST_TYPE_LECP; } else if (strcmp(name, "ManageNameIDRequest") == 0) { type = LASSO_REQUEST_TYPE_NAME_ID_MANAGEMENT; } else { message(G_LOG_LEVEL_WARNING, "Unknown node name : %s", name); } xmlXPathFreeObject(xpathObj); xmlXPathFreeContext(xpathCtx); cleanup: lasso_release_doc(doc); xmlResetError(&error); return type; } /** * lasso_profile_is_liberty_query: * @query: HTTP query string * * Tests the query string to know if the URL is called as the result of a * Liberty redirect (action initiated elsewhere) or not. * * Return value: TRUE if Liberty query, FALSE otherwise **/ gboolean lasso_profile_is_liberty_query(const gchar *query) { /* logic is that a lasso query always has some parameters (RequestId, * MajorVersion, MinorVersion, IssueInstant, ProviderID, * NameIdentifier, NameQualifier, Format). If three of them are there; * it's a lasso query, possibly broken, but a lasso query nevertheless. */ gchar *parameters[] = { "RequestId=", "MajorVersion=", "MinorVersion=", "IssueInstant=", "ProviderID=", "NameIdentifier=", "NameQualifier=", "Format=", NULL }; gint i, n = 0; for (i=0; parameters[i] && n < 3; i++) { if (strstr(query, parameters[i])) n++; } return (n == 3); } /*****************************************************************************/ /* public methods */ /*****************************************************************************/ /** * lasso_profile_get_identity: * @profile: a #LassoProfile * * Gets the identity bound to @profile. * * Return value:(transfer none): the identity or NULL if it none was found. The #LassoIdentity * object is internally allocated and must not be freed by the caller. **/ LassoIdentity* lasso_profile_get_identity(LassoProfile *profile) { if (profile->identity && g_hash_table_size(profile->identity->federations)) return profile->identity; return NULL; } /** * lasso_profile_get_session: * @profile: a #LassoProfile * * Gets the session bound to @profile. * * Return value:(transfer none): the session or NULL if it none was found. The #LassoSession * object is internally allocated and must not be freed by the caller. **/ LassoSession* lasso_profile_get_session(LassoProfile *profile) { if (profile->session == NULL) return NULL; if (lasso_session_is_empty(profile->session)) return NULL; return profile->session; } /** * lasso_profile_is_identity_dirty: * @profile: a #LassoProfile * * Checks whether identity has been modified (and should therefore be saved). * * Return value: %TRUE if identity has changed **/ gboolean lasso_profile_is_identity_dirty(LassoProfile *profile) { return (profile->identity && profile->identity->is_dirty); } /** * lasso_profile_is_session_dirty: * @profile: a #LassoProfile * * Checks whether session has been modified (and should therefore be saved). * * Return value: %TRUE if session has changed **/ gboolean lasso_profile_is_session_dirty(LassoProfile *profile) { return LASSO_IS_SESSION(profile->session) && lasso_session_is_dirty(profile->session); } void lasso_profile_set_response_status(LassoProfile *profile, const char *statusCodeValue) { LassoSamlpStatus *status; /* protocols-schema 1.2 (errata 2.0), page 9 * * 3.1.9. Response Status Codes * * All Liberty response messages use elements to * indicate the status of a corresponding request. Responders MUST * comply with the rules governing elements * specified in [SAMLCore11] regarding the use of nested second-, or * lower-level response codes to provide specific information relating * to particular errors. A number of status codes are defined within * the Liberty namespace for use with this specification. */ status = lasso_samlp_status_new(); status->StatusCode = lasso_samlp_status_code_new(); if (strncmp(statusCodeValue, "samlp:", 6) == 0) { status->StatusCode->Value = g_strdup(statusCodeValue); } else { status->StatusCode->Value = g_strdup(LASSO_SAML_STATUS_CODE_RESPONDER); status->StatusCode->StatusCode = lasso_samlp_status_code_new(); status->StatusCode->StatusCode->Value = g_strdup(statusCodeValue); } if (LASSO_IS_SAMLP_RESPONSE(profile->response)) { LassoSamlpResponse *response = LASSO_SAMLP_RESPONSE(profile->response); lasso_assign_new_gobject(response->Status, status); return; } if (LASSO_IS_LIB_STATUS_RESPONSE(profile->response)) { LassoLibStatusResponse *response = LASSO_LIB_STATUS_RESPONSE(profile->response); lasso_assign_new_gobject(response->Status, status); return; } message(G_LOG_LEVEL_CRITICAL, "Failed to set status"); g_assert_not_reached(); } void lasso_profile_clean_msg_info(LassoProfile *profile) { lasso_release_string(profile->msg_url); lasso_release_string(profile->msg_body); } /** * lasso_profile_set_identity_from_dump: * @profile: a #LassoProfile * @dump: XML identity dump * * Builds a new #LassoIdentity object from XML dump and binds it to @profile. * * Return value: 0 on success; or a negative value otherwise. **/ gint lasso_profile_set_identity_from_dump(LassoProfile *profile, const gchar *dump) { g_return_val_if_fail(dump != NULL, LASSO_PARAM_ERROR_INVALID_VALUE); lasso_assign_new_gobject(profile->identity, lasso_identity_new_from_dump(dump)); if (profile->identity == NULL) { return critical_error(LASSO_PROFILE_ERROR_BAD_IDENTITY_DUMP); } return 0; } /** * lasso_profile_set_session_from_dump: * @profile: a #LassoProfile * @dump: XML session dump * * Builds a new #LassoSession object from XML dump and binds it to @profile. * * Return value: 0 on success; or a negative value otherwise. **/ gint lasso_profile_set_session_from_dump(LassoProfile *profile, const gchar *dump) { g_return_val_if_fail(dump != NULL, LASSO_PARAM_ERROR_INVALID_VALUE); lasso_assign_new_gobject(profile->session, lasso_session_new_from_dump(dump)); if (profile->session == NULL) return critical_error(LASSO_PROFILE_ERROR_BAD_SESSION_DUMP); IF_SAML2(profile) { lasso_saml20_profile_set_session_from_dump(profile); } return 0; } /** * lasso_profile_get_artifact: * @profile: a #LassoProfile object * * Return the artifact token * * Return value:(transfer full)(allow-none): a newly allocated string or NULL. */ char* lasso_profile_get_artifact(LassoProfile *profile) { return g_strdup(profile->private_data->artifact); } /** * lasso_profile_get_artifact_message: * @profile: a #LassoProfile object * * Return the artifact message. * * Return value:(transfer full)(allow-none): a newly allocated string or NULL */ char* lasso_profile_get_artifact_message(LassoProfile *profile) { return g_strdup(profile->private_data->artifact_message); } /** * lasso_profile_set_artifact_message: * @profile: a #LassoProfile object * @message: the artifact message content * * Set @message as the content for the ArtifactResolve response. * */ void lasso_profile_set_artifact_message(LassoProfile *profile, const char *message) { if (! LASSO_IS_PROFILE(profile)) { message(G_LOG_LEVEL_CRITICAL, "set_artifact_message called on something not a" \ "LassoProfile object: %p", profile); return; } lasso_assign_string(profile->private_data->artifact_message, message); } /** * lasso_profile_get_server: * @profile: a #LassoProfile object * * Return the #LassoServer linked to this profile object. A profile object should always contains * one. It allows to find metadatas of other providers and to know our own metadatas. * * Return value: (transfer none): a #LassoServer or NULL if profile is not a #LassoProfile or no * #LassoServer object was setup at the creation of this profile. */ LassoServer* lasso_profile_get_server(LassoProfile *profile) { g_return_val_if_fail(LASSO_IS_PROFILE(profile), NULL); if (profile->server) { if (LASSO_IS_SERVER(profile->server)) { return profile->server; } else { message(G_LOG_LEVEL_WARNING, "profile->server contains a non LassoServer object"); } } return NULL; } /** * lasso_profile_get_message_id: * @profile: a #LassoProfile object * * Return the messge ID. * * Return value:(transfer full)(allow-none): a newly allocated string or NULL */ char* lasso_profile_get_message_id(LassoProfile *profile) { return g_strdup(profile->private_data->message_id); } /** * lasso_profile_set_message_id: * @profile: a #LassoProfile object * @message_id: the message ID * * Set @message_id for the current conversation * */ void lasso_profile_set_message_id(LassoProfile *profile, const char *message_id) { if (! LASSO_IS_PROFILE(profile)) { message(G_LOG_LEVEL_CRITICAL, "set_message_id called on something not a" \ "LassoProfile object: %p", profile); return; } lasso_assign_string(profile->private_data->message_id, message_id); } /** * lasso_profile_get_idp_list: * @profile: a #LassoProfile object * * Return the messge ID. * * Return value: a #LassoNode, when using SAML 2.0 a #LassoSamlp2IDPList, * when using ID-FF a #LassoLibIDPList. */ LassoNode* lasso_profile_get_idp_list(LassoProfile *profile) { return profile->private_data->idp_list; } /** * lasso_profile_set_idp_list: * @profile: a #LassoProfile object * @idp_list: a #LassoNode, when using SAML 2.0 a #LassoSamlp2IDPList, * when using ID-FF a #LassoLibIDPList. * * Set @idp_list for the current conversation * */ void lasso_profile_set_idp_list(LassoProfile *profile, const LassoNode *idp_list) { if (! LASSO_IS_PROFILE(profile)) { message(G_LOG_LEVEL_CRITICAL, "set_idp_list called on something not a" \ "LassoProfile object: %p", profile); return; } lasso_assign_gobject(profile->private_data->idp_list, idp_list); } /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "Request", SNIPPET_NODE_IN_CHILD, G_STRUCT_OFFSET(LassoProfile, request), NULL, NULL, NULL}, { "Response", SNIPPET_NODE_IN_CHILD, G_STRUCT_OFFSET(LassoProfile, response), NULL, NULL, NULL}, { "NameIdentifier", SNIPPET_NODE_IN_CHILD, G_STRUCT_OFFSET(LassoProfile, nameIdentifier), NULL, NULL, NULL}, { "RemoteProviderID", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoProfile, remote_providerID), NULL, NULL, NULL}, { "MsgUrl", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoProfile, msg_url), NULL, NULL, NULL}, { "MsgBody", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoProfile, msg_body), NULL, NULL, NULL}, { "MsgRelayState", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoProfile, msg_relayState), NULL, NULL, NULL}, { "HttpRequestMethod", SNIPPET_CONTENT | SNIPPET_INTEGER, G_STRUCT_OFFSET(LassoProfile, http_request_method), NULL, NULL, NULL}, { "Artifact", SNIPPET_CONTENT | SNIPPET_PRIVATE, G_STRUCT_OFFSET(LassoProfilePrivate, artifact), NULL, NULL, NULL }, { "ArtifactMessage", SNIPPET_CONTENT | SNIPPET_PRIVATE, G_STRUCT_OFFSET(LassoProfilePrivate, artifact_message), NULL, NULL, NULL }, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; /** * lasso_profile_set_signature_hint: * @profile: a #LassoProfile object * @signature_hint: wheter next produced messages should be signed or not (or let Lasso choose from * implicit information). * * By default each profile will choose to sign or not its messages, this method allow to force or * forbid the signature of messages, on a per transaction basis. */ void lasso_profile_set_signature_hint(LassoProfile *profile, LassoProfileSignatureHint signature_hint) { if (! LASSO_IS_PROFILE(profile) || ! profile->private_data) return; profile->private_data->signature_hint = signature_hint; } /** * lasso_profile_get_signature_hint: * @profile: a #LassoProfile object * * Return the value of the signature hint attribute (see lasso_profile_set_signature_hint()). * * Return value: a value in the enum type #LassoProfileSignatureHint. */ LassoProfileSignatureHint lasso_profile_get_signature_hint(LassoProfile *profile) { LassoProfileSignatureVerifyHint signature_verify_hint; if (! LASSO_IS_PROFILE(profile) || ! profile->private_data) return LASSO_PROFILE_SIGNATURE_HINT_MAYBE; signature_verify_hint = profile->private_data->signature_verify_hint; if (signature_verify_hint >= LASSO_PROFILE_SIGNATURE_VERIFY_HINT_LAST) { message(G_LOG_LEVEL_WARNING, "%u is an invalid signature verify hint", signature_verify_hint); return LASSO_PROFILE_SIGNATURE_HINT_MAYBE; } return profile->private_data->signature_hint; } /** * lasso_profile_set_signature_verify_hint: * @profile: a #LassoProfile object * @signature_verify_hint: whether next received message signatures should be checked or not (or let * Lasso choose from implicit information). * * By default each profile will choose to verify or not its messages, this method allow to force or * forbid the signature of messages, on a per transaction basis. */ void lasso_profile_set_signature_verify_hint(LassoProfile *profile, LassoProfileSignatureVerifyHint signature_verify_hint) { if (! LASSO_IS_PROFILE(profile) || ! profile->private_data) return; if (signature_verify_hint >= LASSO_PROFILE_SIGNATURE_VERIFY_HINT_LAST) { message(G_LOG_LEVEL_WARNING, "%i is an invalid argument for " __FUNCTION__, signature_verify_hint); return; } profile->private_data->signature_verify_hint = signature_verify_hint; } /** * lasso_profile_get_signature_verify_hint: * @profile: a #LassoProfile object * * Return the value of the signature verify hint attribute (see * lasso_profile_set_signature_verify_hint()). * * Return value: a value in the enum type #LassoProfileSignatureVerifyHint. */ LassoProfileSignatureVerifyHint lasso_profile_get_signature_verify_hint(LassoProfile *profile) { if (! LASSO_IS_PROFILE(profile) || ! profile->private_data) return LASSO_PROFILE_SIGNATURE_VERIFY_HINT_MAYBE; return profile->private_data->signature_verify_hint; } /** * lasso_profile_set_soap_fault_response: * @profile: a #LassoProfile object * @faultcode: the code for the SOAP fault * @faultstring:(allow-none): the description for the SOAP fault * @details:(element-type LassoNode)(allow-none): a list of nodes to add as details * * Set the response to a SOAP fault, using @faultcode, @faultstring, and @details to initialize it. * * Return value: 0 if successful, an error code otherwise. */ gint lasso_profile_set_soap_fault_response(LassoProfile *profile, const char *faultcode, const char *faultstring, GList *details) { LassoSoapFault *fault; if (! LASSO_IS_SOAP_FAULT(profile->response)) { lasso_release_gobject(profile->response); profile->response = (LassoNode*)lasso_soap_fault_new(); } fault = (LassoSoapFault*)profile->response; lasso_assign_string(fault->faultcode, faultcode); lasso_assign_string(fault->faultstring, faultstring); if (details) { if (! fault->Detail) { fault->Detail = lasso_soap_detail_new(); } lasso_assign_list_of_gobjects(fault->Detail->any, details); } else { lasso_release_gobject(fault->Detail); } return 0; } /** * lasso_profile_sso_role_with: * @profile: a #LassoProfile object * @remote_provider_id: the identifier of a provider * * Returns whether the current provider is a service provider relatively to another provider. It * uses the #LassoProfile.identity to find if a federation qualifier by the given provider exists or * the reverse. * * Return value: #LASSO_PROVIDER_ROLE_NONE if nothing can be said, #LASSO_PROVIDER_ROLE_SP if a * federation qualifier by @remote_provider_id exists or #LASSO_PROVIDER_ROLE_IDP if a federation * qualifier by our own #LassoProvider.ProviderID exists. */ LassoProviderRole lasso_profile_sso_role_with(LassoProfile *profile, const char *remote_provider_id) { LassoFederation *federation = NULL; const char *name_qualifier = NULL; const char *provider_id = NULL; g_return_val_if_fail(LASSO_IS_PROFILE(profile) && remote_provider_id, LASSO_PROVIDER_ROLE_NONE); if (profile->server) { provider_id = profile->server->parent.ProviderID; } federation = lasso_identity_get_federation(profile->identity, remote_provider_id); if (! federation) return LASSO_PROVIDER_ROLE_NONE; /* coherency check */ g_return_val_if_fail(lasso_strisequal(federation->remote_providerID,remote_provider_id), LASSO_PROVIDER_ROLE_NONE); if (LASSO_IS_SAML2_NAME_ID(federation->local_nameIdentifier)) { LassoSaml2NameID *name_id = (LassoSaml2NameID*)federation->local_nameIdentifier; name_qualifier = name_id->NameQualifier; } else if (LASSO_IS_SAML_NAME_IDENTIFIER(federation->local_nameIdentifier)) { LassoSamlNameIdentifier *name_id; name_id = (LassoSamlNameIdentifier*)federation->local_nameIdentifier; name_qualifier = name_id->NameQualifier; } else { message(G_LOG_LEVEL_WARNING, "a federation without a NameID was found"); return LASSO_PROVIDER_ROLE_NONE; } if (lasso_strisequal(remote_provider_id,name_qualifier)) { return LASSO_PROVIDER_ROLE_SP; } else if (lasso_strisequal(provider_id,name_qualifier)) { return LASSO_PROVIDER_ROLE_IDP; } return LASSO_PROVIDER_ROLE_NONE; } /** * lasso_profile_get_signature_status: * @profile: a #LassoProfile object * * Returns the signature status from the last parsed message. * * Return value: 0 if no error from signature checking occurred, an error code otherwise. */ gint lasso_profile_get_signature_status(LassoProfile *profile) { lasso_bad_param(PROFILE, profile); return profile->signature_status; } static xmlChar * extract_issuer(xmlTextReader *reader) { const xmlChar *name; const xmlChar *ns_uri; xmlNode *node; name = xmlTextReaderConstLocalName(reader); ns_uri = xmlTextReaderConstNamespaceUri(reader); if (strcmp((const char*)name, "Issuer")) return NULL; if (strcmp((const char*)ns_uri, LASSO_SAML2_ASSERTION_HREF)) return NULL; node = xmlTextReaderExpand(reader); return xmlNodeGetContent(node); } /** * lasso_profile_get_issuer: * @message: the HTTP query, POST content or SOAP message * * Extract the issuer of a message. * * Return value:(transfer full): Returns the issuer of the given message. */ char* lasso_profile_get_issuer(const char *message) { xmlTextReader *reader; char *result = NULL; int count = 0, ret; xmlChar *xml_result = NULL; char *to_free = NULL; reader = lasso_xmltextreader_from_message(message, &to_free); if (! reader) goto cleanup; ret = xmlTextReaderRead(reader); while (ret == 1) { int node_type = xmlTextReaderNodeType(reader); if (node_type == 1) { count += 1; xml_result = extract_issuer(reader); if (xml_result) break; } if (count == 3) { break; } ret = xmlTextReaderRead(reader); } if (! xml_result) goto cleanup; result = g_strdup((char *)xml_result); cleanup: if (xml_result) lasso_release_xml_string(xml_result); if (reader) xmlFreeTextReader(reader); if (to_free) lasso_release(to_free); return result; } /** * lasso_profile_get_request_id: * @message: the HTTP query, POST content or SOAP message * * Extract the issuer of a message. * * Return value:(transfer full): Returns the issuer of the given message. */ char* lasso_profile_get_in_response_to(const char *message) { xmlTextReader *reader; char *result = NULL; int ret; int node_type = 0; xmlChar *xml_result = NULL; char *to_free = NULL; reader = lasso_xmltextreader_from_message(message, &to_free); if (! reader) goto cleanup; ret = xmlTextReaderRead(reader); while (ret == 1) { node_type = xmlTextReaderNodeType(reader); if (node_type == 1) { break; } ret = xmlTextReaderRead(reader); } if (node_type != 1) goto cleanup; xml_result = xmlTextReaderGetAttribute(reader, BAD_CAST "InResponseTo"); if (! xml_result) goto cleanup; result = g_strdup((char*)xml_result); cleanup: if (reader) xmlFreeTextReader(reader); if (xml_result) lasso_release_xml_string(xml_result); if (to_free) lasso_release(to_free); return result; } /*****************************************************************************/ /* overridden parent class methods */ /*****************************************************************************/ static void dispose(GObject *object) { LassoProfile *profile = LASSO_PROFILE(object); if (profile->private_data->dispose_has_run) { return; } profile->private_data->dispose_has_run = TRUE; lasso_mem_debug("LassoProfile", "Server", profile->server); lasso_release_gobject(profile->server); lasso_mem_debug("LassoProfile", "Identity", profile->identity); lasso_release_gobject(profile->identity); lasso_mem_debug("LassoProfile", "Session", profile->session); lasso_release_gobject(profile->session); lasso_release_string(profile->private_data->artifact); lasso_release_string(profile->private_data->artifact_message); G_OBJECT_CLASS(parent_class)->dispose(G_OBJECT(profile)); lasso_release_gobject(profile->private_data->idp_list); lasso_release_string(profile->private_data->message_id); } /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void instance_init(LassoProfile *profile, G_GNUC_UNUSED void *unused) { profile->private_data = LASSO_PROFILE_GET_PRIVATE(profile); profile->private_data->dispose_has_run = FALSE; profile->private_data->artifact = NULL; profile->private_data->artifact_message = NULL; profile->private_data->signature_hint = LASSO_PROFILE_SIGNATURE_HINT_MAYBE; profile->private_data->message_id = NULL; profile->private_data->idp_list = NULL; profile->server = NULL; profile->request = NULL; profile->response = NULL; profile->nameIdentifier = NULL; profile->remote_providerID = NULL; profile->msg_url = NULL; profile->msg_body = NULL; profile->msg_relayState = NULL; profile->identity = NULL; profile->session = NULL; profile->signature_status = 0; } static void class_init(LassoProfileClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "Profile"); lasso_node_class_set_ns(nclass, LASSO_LASSO_HREF, LASSO_LASSO_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); g_type_class_add_private(klass, sizeof(LassoProfilePrivate)); G_OBJECT_CLASS(klass)->dispose = dispose; } GType lasso_profile_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof(LassoProfileClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoProfile), 0, (GInstanceInitFunc) instance_init, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoProfile", &this_info, 0); } return this_type; } lasso-2.8.2/lasso/id-ff/PaxHeaders/profile.h0000644000000000000000000000013214117162531015642 xustar0030 mtime=1631380825.852638017 30 atime=1678814151.008993845 30 ctime=1678814320.965953058 lasso-2.8.2/lasso/id-ff/profile.h0000644000175000017500000002044614117162531021120 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_PROFILE_H__ #define __LASSO_PROFILE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "identity.h" #include "server.h" #include "session.h" #include "../xml/samlp_request_abstract.h" #include "../xml/samlp_response_abstract.h" #define LASSO_TYPE_PROFILE (lasso_profile_get_type()) #define LASSO_PROFILE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_PROFILE, LassoProfile)) #define LASSO_PROFILE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_PROFILE, LassoProfileClass)) #define LASSO_IS_PROFILE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_PROFILE)) #define LASSO_IS_PROFILE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_PROFILE)) #define LASSO_PROFILE_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_PROFILE, LassoProfileClass)) typedef struct _LassoProfile LassoProfile; typedef struct _LassoProfileClass LassoProfileClass; typedef struct _LassoProfilePrivate LassoProfilePrivate; /** * LassoRequestType: * @LASSO_REQUEST_TYPE_INVALID: invalid * @LASSO_REQUEST_TYPE_LOGIN: Single Sign On and Federation * @LASSO_REQUEST_TYPE_LOGOUT: Single Logout * @LASSO_REQUEST_TYPE_DEFEDERATION: Federation Termination * @LASSO_REQUEST_TYPE_NAME_REGISTRATION: Name Registration * @LASSO_REQUEST_TYPE_NAME_IDENTIFIER_MAPPING: Name Identifier Mapping * @LASSO_REQUEST_TYPE_LECP: Liberty-Enabled Client / Proxy * @LASSO_REQUEST_TYPE_NAME_ID_MANAGEMENT: SAML 2.0 NameID Management request * * Request types (known for SOAP endpoints) */ typedef enum { LASSO_REQUEST_TYPE_INVALID = 0, LASSO_REQUEST_TYPE_LOGIN = 1, LASSO_REQUEST_TYPE_LOGOUT = 2, LASSO_REQUEST_TYPE_DEFEDERATION = 3, LASSO_REQUEST_TYPE_NAME_REGISTRATION = 4, LASSO_REQUEST_TYPE_NAME_IDENTIFIER_MAPPING = 5, LASSO_REQUEST_TYPE_LECP = 6, LASSO_REQUEST_TYPE_NAME_ID_MANAGEMENT = 12, } LassoRequestType; /** * LassoProfileSignatureHint: * @LASSO_PROFILE_SIGNATURE_HINT_MAYBE: let Lasso decide what to do. * @LASSO_PROFILE_SIGNATURE_HINT_FORCE: generate and validate all signatures. * @LASSO_PROFILE_SIGNATURE_HINT_FORBID: do not generate or validate any signature. * * Advice a #LassoProfile object about the policy for generating request and response * signatures. */ typedef enum { LASSO_PROFILE_SIGNATURE_HINT_MAYBE = 0, LASSO_PROFILE_SIGNATURE_HINT_FORCE = 1, LASSO_PROFILE_SIGNATURE_HINT_FORBID = 2 } LassoProfileSignatureHint; /** * LassoProfileSignatureVerifyHint: * @LASSO_PROFILE_SIGNATURE_VERIFY_HINT_MAYBE: let Lasso decide what to do. * @LASSO_PROFILE_SIGNATURE_VERIFY_HINT_FORCE: always check signatures. * @LASSO_PROFILE_SIGNATURE_VERIFY_HINT_IGNORE: check signatures but do not stop protocol handling * on failures. The result of signature checking is still available in * #LassoProfile.signature_status * * Advice a #LassoProfile object about the policy checking request and response * signatures. */ typedef enum { LASSO_PROFILE_SIGNATURE_VERIFY_HINT_MAYBE = 0, LASSO_PROFILE_SIGNATURE_VERIFY_HINT_FORCE = 1, LASSO_PROFILE_SIGNATURE_VERIFY_HINT_IGNORE = 2, LASSO_PROFILE_SIGNATURE_VERIFY_HINT_LAST } LassoProfileSignatureVerifyHint; /** * LassoProfile: * @server: #LassoServer object representing the provider intiating this profile, * @request: the currently initialized request, or the last request parsed, * @response: the currently intialized request, or the last response parsed, * @nameIdentifier: for profiles which transmit a name identifier (that is, most of them), the * parsed name identifier, can be a #LassoSamlNameIdentifier or a #LassoSaml2NameID, * @remote_providerID: the provider ID of the issuer of the last parsed message, whatever it is (a * request or a response), * @msg_url: when generating a request or a response, it give the URL to contact * @msg_body: when generating a request or a response using HTTP POST binding (can be HTTP-SOAP or * HTTP-Post binding), the body of the POST will be in this field, * @msg_relayState: put there the relaystate to put in the genereated URL for HTTP-Redirect or * HTTP-Get binding. * @signature_status: result of the last signature validation. * @identity: the state of federation linking for the current user. * @session: the state of global SSO session for the current user. * * #LassoProfile, child class of #LassoNode is the basis object of profiles object like #LassoLogin, #LassoLogout, * #LassoDefederation, #LassoNameIdentifierMapping, #LassoNameRegistration, #LassoNameIdManagement * or #LassoAssertionQuery. It handles the minimal state used by all theses profiles. */ struct _LassoProfile { LassoNode parent; /*< public >*/ LassoServer *server; LassoNode *request; LassoNode *response; LassoNode *nameIdentifier; gchar *remote_providerID; gchar *msg_url; gchar *msg_body; gchar *msg_relayState; /*< private >*/ LassoIdentity *identity; LassoSession *session; LassoHttpMethod http_request_method; gint signature_status; LassoProfilePrivate *private_data; }; struct _LassoProfileClass { LassoNodeClass parent; }; /* public functions */ LASSO_EXPORT LassoRequestType lasso_profile_get_request_type_from_soap_msg(const gchar *soap); LASSO_EXPORT gboolean lasso_profile_is_liberty_query(const gchar *query); /* public methods */ LASSO_EXPORT GType lasso_profile_get_type(void); LASSO_EXPORT LassoIdentity* lasso_profile_get_identity(LassoProfile *profile); LASSO_EXPORT LassoSession* lasso_profile_get_session(LassoProfile *profile); LASSO_EXPORT gboolean lasso_profile_is_identity_dirty(LassoProfile *profile); LASSO_EXPORT gboolean lasso_profile_is_session_dirty(LassoProfile *profile); LASSO_EXPORT lasso_error_t lasso_profile_set_identity_from_dump(LassoProfile *profile, const gchar *dump); LASSO_EXPORT lasso_error_t lasso_profile_set_session_from_dump(LassoProfile *profile, const gchar *dump); LASSO_EXPORT LassoNode* lasso_profile_get_nameIdentifier(LassoProfile *profile); LASSO_EXPORT char* lasso_profile_get_artifact(LassoProfile *profile); LASSO_EXPORT char* lasso_profile_get_artifact_message(LassoProfile *profile); LASSO_EXPORT void lasso_profile_set_artifact_message(LassoProfile *profile, const char *message); LASSO_EXPORT LassoServer* lasso_profile_get_server(LassoProfile *profile); LASSO_EXPORT void lasso_profile_set_signature_hint(LassoProfile *profile, LassoProfileSignatureHint signature_hint); LASSO_EXPORT LassoProfileSignatureHint lasso_profile_get_signature_hint(LassoProfile *profile); LASSO_EXPORT lasso_error_t lasso_profile_set_soap_fault_response(LassoProfile *profile, const char *faultcode, const char *faultstring, GList *details); LASSO_EXPORT void lasso_profile_set_signature_verify_hint(LassoProfile *profile, LassoProfileSignatureVerifyHint signature_verify_hint); LASSO_EXPORT LassoProfileSignatureVerifyHint lasso_profile_get_signature_verify_hint(LassoProfile *profile); LASSO_EXPORT LassoProviderRole lasso_profile_sso_role_with(LassoProfile *profile, const char *remote_provider_id); LASSO_EXPORT lasso_error_t lasso_profile_get_signature_status(LassoProfile *profile); LASSO_EXPORT char* lasso_profile_get_issuer(const char *message); LASSO_EXPORT char* lasso_profile_get_in_response_to(const char *message); LASSO_EXPORT char* lasso_profile_get_message_id(LassoProfile *profile); LASSO_EXPORT void lasso_profile_set_message_id(LassoProfile *profile, const char *message_id); LASSO_EXPORT LassoNode* lasso_profile_get_idp_list(LassoProfile *profile); LASSO_EXPORT void lasso_profile_set_idp_list(LassoProfile *profile, const LassoNode *idp_list); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_PROFILE_H__ */ lasso-2.8.2/lasso/id-ff/PaxHeaders/name_registration.h0000644000000000000000000000013214114336625017720 xustar0030 mtime=1630649749.802436733 30 atime=1678814151.008993845 30 ctime=1678814320.965953058 lasso-2.8.2/lasso/id-ff/name_registration.h0000644000175000017500000000677414114336625023206 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_NAME_REGISTRATION_H__ #define __LASSO_NAME_REGISTRATION_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "profile.h" #include "../xml/lib_register_name_identifier_request.h" #include "../xml/lib_register_name_identifier_response.h" #define LASSO_TYPE_NAME_REGISTRATION (lasso_name_registration_get_type()) #define LASSO_NAME_REGISTRATION(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_NAME_REGISTRATION, LassoNameRegistration)) #define LASSO_NAME_REGISTRATION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_NAME_REGISTRATION, \ LassoNameRegistrationClass)) #define LASSO_IS_NAME_REGISTRATION(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_NAME_REGISTRATION)) #define LASSO_IS_NAME_REGISTRATION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_NAME_REGISTRATION)) #define LASSO_NAME_REGISTRATION_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_NAME_REGISTRATION, LassoNameRegistrationClass)) typedef struct _LassoNameRegistration LassoNameRegistration; typedef struct _LassoNameRegistrationClass LassoNameRegistrationClass; struct _LassoNameRegistration { LassoProfile parent; /*< public >*/ LassoSamlNameIdentifier *oldNameIdentifier; /*< private >*/ void *private_data; /* reserved for future use */ }; struct _LassoNameRegistrationClass { LassoProfileClass parent; }; LASSO_EXPORT GType lasso_name_registration_get_type (void); LASSO_EXPORT LassoNameRegistration* lasso_name_registration_new(LassoServer *server); LASSO_EXPORT LassoNameRegistration* lasso_name_registration_new_from_dump( LassoServer *server, const char *dump); LASSO_EXPORT lasso_error_t lasso_name_registration_build_request_msg( LassoNameRegistration *name_registration); LASSO_EXPORT lasso_error_t lasso_name_registration_build_response_msg( LassoNameRegistration *name_registration); LASSO_EXPORT void lasso_name_registration_destroy(LassoNameRegistration *name_registration); LASSO_EXPORT gchar* lasso_name_registration_dump(LassoNameRegistration *name_registration); LASSO_EXPORT lasso_error_t lasso_name_registration_init_request(LassoNameRegistration *name_registration, char *remote_providerID, LassoHttpMethod http_method); LASSO_EXPORT lasso_error_t lasso_name_registration_process_request_msg( LassoNameRegistration *name_registration, gchar *request_msg); LASSO_EXPORT lasso_error_t lasso_name_registration_process_response_msg( LassoNameRegistration *name_registration, gchar *response_msg); LASSO_EXPORT lasso_error_t lasso_name_registration_validate_request( LassoNameRegistration *name_registration); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_NAME_REGISTRATION_H__ */ lasso-2.8.2/lasso/id-ff/PaxHeaders/defederation.h0000644000000000000000000000013014114336625016635 xustar0029 mtime=1630649749.79843669 30 atime=1678814151.004993823 29 ctime=1678814320.95395299 lasso-2.8.2/lasso/id-ff/defederation.h0000644000175000017500000000537014114336625022114 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_DEFEDERATION_H__ #define __LASSO_DEFEDERATION_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "profile.h" #include "../xml/lib_federation_termination_notification.h" #define LASSO_TYPE_DEFEDERATION (lasso_defederation_get_type()) #define LASSO_DEFEDERATION(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_DEFEDERATION, LassoDefederation)) #define LASSO_DEFEDERATION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_DEFEDERATION, LassoDefederationClass)) #define LASSO_IS_DEFEDERATION(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_DEFEDERATION)) #define LASSO_IS_DEFEDERATION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_DEFEDERATION)) #define LASSO_DEFEDERATION_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_DEFEDERATION, LassoDefederationClass)) typedef struct _LassoDefederation LassoDefederation; typedef struct _LassoDefederationClass LassoDefederationClass; struct _LassoDefederation { LassoProfile parent; /*< private >*/ void *private_data; /* reserved for future use */ }; struct _LassoDefederationClass { LassoProfileClass parent; }; LASSO_EXPORT GType lasso_defederation_get_type(void); LASSO_EXPORT LassoDefederation *lasso_defederation_new(LassoServer *server); LASSO_EXPORT lasso_error_t lasso_defederation_build_notification_msg(LassoDefederation *defederation); LASSO_EXPORT void lasso_defederation_destroy(LassoDefederation *defederation); LASSO_EXPORT lasso_error_t lasso_defederation_init_notification(LassoDefederation *defederation, gchar *remote_providerID, LassoHttpMethod http_method); LASSO_EXPORT lasso_error_t lasso_defederation_process_notification_msg( LassoDefederation *defederation, gchar *notification_msg); LASSO_EXPORT lasso_error_t lasso_defederation_validate_notification(LassoDefederation *defederation); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_DEFEDERATION_H__ */ lasso-2.8.2/lasso/id-ff/PaxHeaders/logoutprivate.h0000644000000000000000000000013214114651464017113 xustar0030 mtime=1630753588.792915831 30 atime=1678814151.008993845 30 ctime=1678814321.001953263 lasso-2.8.2/lasso/id-ff/logoutprivate.h0000644000175000017500000000224514114651464022366 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_LOGOUT_PRIVATE_H__ #define __LASSO_LOGOUT_PRIVATE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ struct _LassoLogoutPrivate { gboolean dispose_has_run; gboolean all_soap; gboolean partial_logout; }; #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_LOGOUT_PRIVATE_H__ */ lasso-2.8.2/lasso/id-ff/PaxHeaders/logout.c0000644000000000000000000000013214364261206015511 xustar0030 mtime=1674666630.734769045 30 atime=1678814220.697384972 30 ctime=1678814320.985953173 lasso-2.8.2/lasso/id-ff/logout.c0000644000175000017500000013577414364261206021002 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ /** * SECTION:logout * @short_description: Single Logout Profile * * This profile Send logout notifications between providers. Any receiving provider must retransmit * the notification to any other providers with which it shares the current identity by any means * supported by the two, that is any provider federated with the current provider. There can be * partial failures if no binding can be found to notify a federating partner or if a partner fails * to respond. * * It is generally advised to apply the local logout transaction before sending a logout request to * a partner. In short: * * an identity provider receiving a logout request should kill the local * session before sending logout request to other service provider and proxyied identity * providers. * a service provider intitiating a logout request must first kill its local session, * then proceeds with the logout exchange with its identity provider * * * The following examples must not be used 'as-is' they lack most of the error checking code * that is needed for a secured and robust program, but they give an idea of how to use the * API * * * Service Provider Initiated Logout * * LassoLogout *logout; * char *session_dump; // must contain the session dump * // for the current user * int rc; // hold return codes * char *soap_response; * * LassoHttpMethod method; // method to use, LASSO_HTTP_METHOD_REDIRECT, * // LASSO_HTTP_METHOD_POST or LASSO_HTTP_METHOD_SOAP, * // other methods are rarely supported * * logout = lasso_logout_new(server); * lasso_profile_set_session_from_dump(&logout->parent, session_dump); * // the second argument can be NULL, lasso_logout_init_request() will automatically choose the * // identity provider from the first assertion int the session * rc = lasso_logout_init_request(logout, "http://identity-provider-id/", * method); * if (rc != 0) { * ... // handle errors, most of them are related to bad initialization * // or unsupported binding * } * rc = lasso_logout_build_request_msg(logout); * if (rc != 0) { * ... // handle errors, most of them are related to bad initialization * // or impossibility to build the query string (missing private keys for signing) * } * * // now send the request * switch (method) { * case LASSO_HTTP_METHOD_REDIRECT: * // LASSO_PROFILE(logout)->msg_url contains the URL where the * // User Agent must be redirected * ... * // save the session and logout object, and store them attached to the RequestID of the * // request, you will need them for handling the response * session_dump = lasso_node_dump((LassoNode*)logout->parent.session); * logout_dump = lasso_node_dump((LassoNode*)logout); * break; * case LASSO_HTTP_METHOD_POST: * // you must build a form with a field name SAMLRequest (SAML 2.0) or LAREQ (ID-FF 1.2) * // with the content of LASSO_PROFILE(logout)->msg_body * // posting to the address LASSO_PROFILE(logout)->msg_url * ... * // save the session and logout object, and store them attached to the RequestID of the * // request, you will need them for handling the response * session_dump = lasso_node_dump((LassoNode*)logout->parent.session); * logout_dump = lasso_node_dump((LassoNode*)logout); * break; * case LASSO_HTTP_SOAP: * // makes a SOAP call, soap_call is NOT a Lasso function * soap_response = soap_call(login->parent.msg_url, login->parent.msg_body); * rc = lasso_logout_process_response_msg(logout, soap_response); * if (rc != 0) { * // handle errors, important ones are LASSO_LOGOUT_ERROR_UNSUPPORTED_PROFILE meaning * // that one other service provider of the current session cannot be contacted by the * // identity provider with the current binding, for example it only accept REDIRECT * (asynchronous-binding) or * // POST an we are using SOAP (synchronous-binding). * ... * } * // everything is ok save the session * session_dump = lasso_node_dump(logout->parent.session); * // nothing to save because you killed the local session already * break; * default: * // other binding neither are frequent or largely supported * // so report an error * break; * } * * * * The next example show the endpoint for handling response to request with asynchronous * binding (POST and Redirect). * * * Service Provider Logout Request Endpoint * * LassoLogout *logout; * char *request_method = getenv("REQUEST_METHOD"); * * logout = lasso_logout_new(server); * * if (strcmp(request_method, "GET") == 0) { * char query_string = getenv("QUERY_STRING"); * rc = lasso_logout_process_response_msg(logout, query_string); * } elif (strcmp(request_method, "POST") == 0) { * char *message; * // message should contain the content of LARES or SAMLResponse fied, depending if this is an * // ID-FF 1.2 or SAML 2.0 service. * rc = lasso_logout_process_response_msg(logout, message); * } * if (rc != 0) { * // handle errors, as we are already unlogged, those must go to a log file or audit trail, * // because at this time the user do not care anymore. A report about a failure to logout to * // the IdP can be eventually shown. * ... * } * * * * The next snippet show how to implement a logout endpoint, to receive a logout request and * respond. * * * Service Provider Logout Request Endpoint * * LassoLogout *logout; * char *session_dump; * char *request_method = getenv("REQUEST_METHOD"); * int rc; * int method; * * logout = lasso_logout_new(server); * // server must be previously initialized, it can be kept around * // and used for many transaction, it is never modified by any profile * if (strcmp(request_method. "GET") == 0) { * method = LASSO_HTTP_METHOD_REDIRECT; * char query_string = getenv("QUERY_STRING"); * rc = lasso_logout_process_request_msg(logout, query_string); * if (rc != 0) { * // handle errors * ... * } * } else if (strcmp(request_method, "POST") == 0) { * char *message; * // read submitted content if this is a form, put LAREQ or SAMLRequest field into message and * set method to LASSO_HTTP_METHOD_POST * // if content type is application/xml then put the full body of the POST inside message and * // set method to LASSO_HTTP_METHOD_SOAP * rc = lasso_logout_process_request_msg(logout, message); * if (rc != 0) { * // handle errors * ... * } * } * protocolProfile = lasso_provider_get_protocol_conformance(LASSO_PROVIDER(server)); * if (protocolProfile == LASSO_LIBERTY_1_2) { * char *session_index; * LassoSamlNameIdentifier *name_id; * LibLogoutRequest *logout_request; * * logout_request = LIB_LOGOUT_REQUEST(LASSO_PROFILE(logout)->request); * session_index = logout_request->SessionIndex; * name_id = logout_request->NameIdentifier; * // lookup the session dump using session_index and name_id * } else if (protocolProfile == LASSO_SAML_2_0) { * char *session_index; * LassoSaml2NameID *name_id; * LassoSamlp2LogoutRequest *logout_request; * * logout_request = LASSO_SAMLP2_LOGOUT_REQUEST(LASSO_PROFILE(logout)->request); * session_index = logout_request->SessionIndex; * name_id = logout_request->NameID; * // lookup the session dump using session_index and name_id * } * lasso_profile_set_session_from_dump(LASSO_PROFILE(logout), session_dump); * // you can check other property of the request here if you want * // * if (request is accepted) { * rc = lasso_logout_validate_request(logout); * if (rc != 0) { * // handle errors.. * ... * } else { * .... // kill the local session * // if local server is an identity provider, then traverse the session using * // lasso_logout_get_next_providerID() and send logout request to all logged * // service providers. * } * } * // if lasso_logout_validate_request() was not called this will automatically create a Failure * // response. * rc = lasso_logout_build_response_msg(logout); * if (rc != 0) { * // handle errors.. * ... * } * // the response is produced with the same binding as the request * // see the previous request example for how to send the response * // the only change is for SOAP, you just need to print the msg_body as page content with a * // Content-type of application/xml. * * */ #include "../xml/private.h" #include "../xml/lib_authentication_statement.h" #include "logout.h" #include "logoutprivate.h" #include "profileprivate.h" #include "providerprivate.h" #include "sessionprivate.h" #include "../saml-2.0/logoutprivate.h" #include "../utils.h" static void check_soap_support(gchar *key, LassoProvider *provider, LassoProfile *profile); /*****************************************************************************/ /* public methods */ /*****************************************************************************/ /** * lasso_logout_build_request_msg: * @logout: a #LassoLogout * * Builds the logout request message. * * It gets the HTTP method retrieved to send the request and: * * * if it is a SOAP method, then it builds the logout request SOAP message, * sets the msg_body attribute, gets the single logout service url and sets * @msg_url in the logout object. * * * if it is a HTTP-Redirect method, then it builds the logout request QUERY * message, builds the logout request url, sets @msg_url in the logout * request url, sets @msg_body to NULL. * * * * If private key and certificate are set in server object it will also signs * the message (either with X509 if SOAP or with a simple signature for query * strings). * * Return value: 0 on success; or a negative value otherwise. **/ lasso_error_t lasso_logout_build_request_msg(LassoLogout *logout) { LassoProfile *profile = NULL; LassoProvider *remote_provider = NULL; char *url = NULL; char *query = NULL; lasso_error_t rc = 0; lasso_bad_param(LOGOUT, logout); profile = LASSO_PROFILE(logout); lasso_profile_clean_msg_info(profile); IF_SAML2(profile) { return lasso_saml20_logout_build_request_msg(logout); } if (profile->remote_providerID == NULL) { /* it means lasso_logout_init_request was not called before */ goto_cleanup_with_rc(LASSO_PROFILE_ERROR_MISSING_REMOTE_PROVIDERID); } /* get remote provider */ remote_provider = lasso_server_get_provider(profile->server, profile->remote_providerID); if (LASSO_IS_PROVIDER(remote_provider) == FALSE) { goto_cleanup_with_rc(LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND); } /* build the logout request message */ if (logout->initial_http_request_method == LASSO_HTTP_METHOD_SOAP) { /* build the logout request message */ lasso_assign_new_string(profile->msg_url, lasso_provider_get_metadata_one( remote_provider, "SoapEndpoint")); /* FIXME: private key file is not owned by the request ? That is potentially a * problem if the server life does not exceed the request */ lasso_check_good_rc(lasso_server_set_signature_for_provider_by_name(logout->parent.server, profile->remote_providerID, profile->request)); lasso_assign_new_string(profile->msg_body, lasso_node_export_to_soap(profile->request)); } else if (logout->initial_http_request_method == LASSO_HTTP_METHOD_REDIRECT) { /* build and optionally sign the logout request QUERY message */ url = lasso_provider_get_metadata_one(remote_provider, "SingleLogoutServiceURL"); if (url == NULL) goto_cleanup_with_rc(LASSO_PROFILE_ERROR_UNKNOWN_PROFILE_URL); lasso_check_good_rc(lasso_server_export_to_query_for_provider_by_name(profile->server, profile->remote_providerID, profile->request, &query)); if (query == NULL) goto_cleanup_with_rc(LASSO_PROFILE_ERROR_BUILDING_QUERY_FAILED); /* build the msg_url */ lasso_assign_new_string(profile->msg_url, lasso_concat_url_query(url, query)); lasso_release_string(profile->msg_body); } else { goto_cleanup_with_rc(LASSO_PROFILE_ERROR_INVALID_HTTP_METHOD); } cleanup: lasso_release(url); lasso_release(query); return rc; } /** * lasso_logout_build_response_msg: * @logout: a #LassoLogout * * Builds the logout response message. * * It gets the request message method and: * * * if it is a SOAP method, then it builds the logout response SOAP message, * sets the msg_body attribute, gets the single logout service return url * and sets @msg_url in the logout object. * * * if it is a HTTP-Redirect method, then it builds the logout response QUERY message, * builds the logout response url, sets @msg_url with the logout response url, * sets @msg_body to NULL * * * * If private key and certificate are set in server object it will also signs * the message (either with X509 if SOAP or with a simple signature for query * strings). * * Return value: 0 on success; or a negative value otherwise. **/ lasso_error_t lasso_logout_build_response_msg(LassoLogout *logout) { LassoProfile *profile = NULL; LassoProvider *provider = NULL; gchar *url = NULL; gchar *query = NULL; lasso_error_t rc = 0; lasso_bad_param(LOGOUT, logout); profile = &logout->parent; lasso_profile_clean_msg_info(profile); if (! profile->private_data || ! logout->private_data) { return LASSO_PARAM_ERROR_NON_INITIALIZED_OBJECT; } IF_SAML2(profile) { return lasso_saml20_logout_build_response_msg(logout); } if (profile->response == NULL) { if (profile->http_request_method == LASSO_HTTP_METHOD_SOAP) { lasso_assign_new_gobject(profile->response, lasso_lib_logout_response_new_full( LASSO_PROVIDER(profile->server)->ProviderID, LASSO_SAML_STATUS_CODE_REQUEST_DENIED, LASSO_LIB_LOGOUT_REQUEST(profile->request), profile->server->certificate ? LASSO_SIGNATURE_TYPE_WITHX509 : LASSO_SIGNATURE_TYPE_SIMPLE, lasso_get_default_signature_method())); } else if (profile->http_request_method == LASSO_HTTP_METHOD_REDIRECT) { lasso_assign_new_gobject(profile->response, lasso_lib_logout_response_new_full( LASSO_PROVIDER(profile->server)->ProviderID, LASSO_SAML_STATUS_CODE_REQUEST_DENIED, LASSO_LIB_LOGOUT_REQUEST(profile->request), LASSO_SIGNATURE_TYPE_NONE, 0)); } } if (profile->remote_providerID == NULL || profile->response == NULL) { /* no remote provider id set or no response set, this means * this function got called before validate_request, probably * because there were no active session */ goto_cleanup_with_rc(LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND); } /* Set the RelayState */ lasso_assign_string(LASSO_LIB_STATUS_RESPONSE(profile->response)->RelayState, profile->msg_relayState); /* build logout response message */ if (profile->http_request_method == LASSO_HTTP_METHOD_SOAP) { lasso_release_string(profile->msg_url); lasso_check_good_rc(lasso_server_set_signature_for_provider_by_name(logout->parent.server, profile->remote_providerID, profile->response)); lasso_assign_new_string(profile->msg_body, lasso_node_export_to_soap(profile->response)); } else if (profile->http_request_method == LASSO_HTTP_METHOD_REDIRECT) { lasso_release_string(profile->msg_body); provider = lasso_server_get_provider(profile->server, profile->remote_providerID); if (provider == NULL) goto_cleanup_with_rc(LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND); url = lasso_provider_get_metadata_one(provider, "SingleLogoutServiceReturnURL"); if (url == NULL) goto_cleanup_with_rc(LASSO_PROFILE_ERROR_UNKNOWN_PROFILE_URL); lasso_check_good_rc(lasso_server_export_to_query_for_provider_by_name(profile->server, profile->remote_providerID, profile->response, &query)); if (query == NULL) goto_cleanup_with_rc(LASSO_PROFILE_ERROR_BUILDING_QUERY_FAILED); lasso_assign_new_string(profile->msg_url, lasso_concat_url_query(url, query)); } else { goto_cleanup_with_rc(LASSO_PROFILE_ERROR_INVALID_HTTP_METHOD); } cleanup: lasso_release_string(url); lasso_release_string(query); return rc; } /** * lasso_logout_destroy: * @logout: a #LassoLogout * * Destroys a logout object. **/ void lasso_logout_destroy(LassoLogout *logout) { lasso_node_destroy(LASSO_NODE(logout)); } /** * lasso_logout_get_next_providerID: * @logout: a #LassoLogout * * Returns the provider id from providerID_index in list of providerIDs in * principal session with the exception of initial service provider ID. * * Return value:(transfer full): a newly allocated string or NULL **/ gchar* lasso_logout_get_next_providerID(LassoLogout *logout) { LassoProfile *profile; gchar *providerID; g_return_val_if_fail(LASSO_IS_LOGOUT(logout), NULL); profile = LASSO_PROFILE(logout); if (profile->session == NULL) { return NULL; } providerID = lasso_session_get_provider_index( profile->session, logout->providerID_index); logout->providerID_index++; /* if it is the provider id of the SP requester, then get the next */ if (logout->initial_remote_providerID && providerID && strcmp(providerID, logout->initial_remote_providerID) == 0) { providerID = lasso_session_get_provider_index( profile->session, logout->providerID_index); logout->providerID_index++; } return providerID; } /** * lasso_logout_init_request: * @logout: a #LassoLogout * @remote_providerID: the providerID of the identity provider. If NULL the * first identity provider is used. * @request_method: if set, then it get the protocol profile in metadata * corresponding of this HTTP request method. * * Initializes a new SLO request. * * Return value: 0 on success; or a negative value otherwise. **/ gint lasso_logout_init_request(LassoLogout *logout, char *remote_providerID, LassoHttpMethod http_method) { LassoProfile *profile; LassoProvider *remote_provider; LassoSamlNameIdentifier *nameIdentifier = NULL; gboolean is_http_redirect_get_method = FALSE; LassoSession *session; GList *name_ids = NULL; GList *session_indexes = NULL; LassoLibLogoutRequest *lib_logout_request = NULL; LassoSamlpRequestAbstract *request_abstract = NULL; int rc = 0; g_return_val_if_fail(LASSO_IS_LOGOUT(logout), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); profile = LASSO_PROFILE(logout); /* verify if session exists */ session = lasso_profile_get_session(profile); if (session == NULL) { return critical_error(LASSO_PROFILE_ERROR_SESSION_NOT_FOUND); } /* get the remote provider id If remote_providerID is NULL, then get the first remote provider id in session */ lasso_release(profile->remote_providerID); if (remote_providerID == NULL) { lasso_assign_new_string(profile->remote_providerID, lasso_session_get_provider_index(session, 0)); } else { lasso_assign_string(profile->remote_providerID, remote_providerID); } if (profile->remote_providerID == NULL) { goto_cleanup_with_rc(LASSO_PROFILE_ERROR_MISSING_REMOTE_PROVIDERID); } /* get the provider */ remote_provider = lasso_server_get_provider(profile->server, profile->remote_providerID); if (LASSO_IS_PROVIDER(remote_provider) == FALSE) { goto_cleanup_with_rc(LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND); } IF_SAML2(profile) { return lasso_saml20_logout_init_request(logout, remote_provider, http_method); } name_ids = lasso_session_get_name_ids(session, profile->remote_providerID); if (! name_ids) { goto_cleanup_with_rc(LASSO_PROFILE_ERROR_MISSING_NAME_IDENTIFIER); } nameIdentifier = name_ids->data; lasso_assign_gobject(profile->nameIdentifier, nameIdentifier); session_indexes = lasso_session_get_session_indexes(session, profile->remote_providerID, profile->nameIdentifier); /* get / verify http method */ if (http_method == LASSO_HTTP_METHOD_ANY) { http_method = lasso_provider_get_first_http_method( LASSO_PROVIDER(profile->server), remote_provider, LASSO_MD_PROTOCOL_TYPE_SINGLE_LOGOUT); /* XXX: check it found a valid http method */ } else { if (lasso_provider_accept_http_method(LASSO_PROVIDER(profile->server), remote_provider, LASSO_MD_PROTOCOL_TYPE_SINGLE_LOGOUT, http_method, TRUE) == FALSE) { if (http_method == LASSO_HTTP_METHOD_REDIRECT) { /* it was probably used as last resort, and * failed, since the remote provider doesn't * support any logout. remove assertion * unconditionnaly. */ lasso_session_remove_assertion(session, profile->remote_providerID); if (logout->initial_remote_providerID && logout->initial_request) { lasso_assign_string(profile->remote_providerID, logout->initial_remote_providerID); lasso_assign_new_gobject(profile->response, lasso_lib_logout_response_new_full( LASSO_PROVIDER(profile->server)->ProviderID, LASSO_SAML_STATUS_CODE_SUCCESS, LASSO_LIB_LOGOUT_REQUEST(logout->initial_request), LASSO_SIGNATURE_TYPE_NONE, 0)); } } goto_cleanup_with_rc(LASSO_PROFILE_ERROR_UNSUPPORTED_PROFILE); } } /* build a new request object from http method */ if (http_method == LASSO_HTTP_METHOD_SOAP) { lib_logout_request = (LassoLibLogoutRequest*)lasso_lib_logout_request_new_full( LASSO_PROVIDER(profile->server)->ProviderID, nameIdentifier, profile->server->certificate ? LASSO_SIGNATURE_TYPE_WITHX509 : LASSO_SIGNATURE_TYPE_SIMPLE, lasso_get_default_signature_method()); } else { /* http_method == LASSO_HTTP_METHOD_REDIRECT */ is_http_redirect_get_method = TRUE; lib_logout_request = (LassoLibLogoutRequest*)lasso_lib_logout_request_new_full( LASSO_PROVIDER(profile->server)->ProviderID, nameIdentifier, LASSO_SIGNATURE_TYPE_NONE, 0); } request_abstract = &lib_logout_request->parent; if (lasso_provider_get_protocol_conformance(remote_provider) < LASSO_PROTOCOL_LIBERTY_1_2) { request_abstract->MajorVersion = 1; request_abstract->MinorVersion = 1; } lasso_lib_logout_request_set_session_indexes(lib_logout_request, session_indexes); lasso_assign_string(lib_logout_request->RelayState, profile->msg_relayState); /* if logout request from a SP and if an HTTP Redirect/GET method, then remove assertion */ if (remote_provider->role == LASSO_PROVIDER_ROLE_IDP && is_http_redirect_get_method) { lasso_session_remove_assertion(session, profile->remote_providerID); } /* Save the http method */ logout->initial_http_request_method = http_method; lasso_assign_gobject(profile->request, lib_logout_request); cleanup: lasso_release_gobject(lib_logout_request); lasso_release_list_of_strings(session_indexes); lasso_release_list_of_gobjects(name_ids); return rc; } /** * lasso_logout_process_request_msg: * @logout: a #LassoLogout * @request_msg: the logout request message * * Processes a SLO LogoutRequest message. Rebuilds a request object from the * message and optionally verifies its signature. * * Return value: 0 on success; or a negative value otherwise. **/ gint lasso_logout_process_request_msg(LassoLogout *logout, char *request_msg) { LassoProfile *profile; LassoProvider *remote_provider; LassoMessageFormat format; LassoLibLogoutRequest *logout_request; g_return_val_if_fail(LASSO_IS_LOGOUT(logout), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); g_return_val_if_fail(request_msg != NULL, LASSO_PARAM_ERROR_INVALID_VALUE); profile = LASSO_PROFILE(logout); IF_SAML2(profile) { return lasso_saml20_logout_process_request_msg(logout, request_msg); } lasso_assign_new_gobject(profile->request, lasso_lib_logout_request_new()); format = lasso_node_init_from_message(LASSO_NODE(profile->request), request_msg); if (format == LASSO_MESSAGE_FORMAT_UNKNOWN || format == LASSO_MESSAGE_FORMAT_ERROR || ! LASSO_IS_LIB_LOGOUT_REQUEST(profile->request)) { return critical_error(LASSO_PROFILE_ERROR_INVALID_MSG); } logout_request = LASSO_LIB_LOGOUT_REQUEST(profile->request); /* Validate some schema constraints */ if (logout_request->ProviderID == NULL || LASSO_IS_SAML_NAME_IDENTIFIER(logout_request->NameIdentifier) == FALSE) { return critical_error(LASSO_PROFILE_ERROR_INVALID_MSG); } lasso_assign_string(profile->msg_relayState, logout_request->RelayState); lasso_assign_string(profile->remote_providerID, logout_request->ProviderID); remote_provider = lasso_server_get_provider(profile->server, profile->remote_providerID); if (LASSO_IS_PROVIDER(remote_provider) == FALSE) { return critical_error(LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND); } /* verify signatures */ profile->signature_status = lasso_provider_verify_signature( remote_provider, request_msg, "RequestID", format); switch (format) { case LASSO_MESSAGE_FORMAT_SOAP: profile->http_request_method = LASSO_HTTP_METHOD_SOAP; break; case LASSO_MESSAGE_FORMAT_QUERY: profile->http_request_method = LASSO_HTTP_METHOD_REDIRECT; break; default: return critical_error(LASSO_PROFILE_ERROR_INVALID_MSG); } lasso_assign_gobject(profile->nameIdentifier, LASSO_NODE(logout_request->NameIdentifier)); return profile->signature_status; } /** * lasso_logout_process_response_msg: * @logout: a #LassoLogout * @response_msg: the response message * * Parses the response message and builds the response object. * * Checks the status code value and if it is not success, then if the local * provider is a Service Provider and response method is SOAP, then builds a * new logout request message for HTTP Redirect / GET method and returns the * error code LASSO_LOGOUT_ERROR_UNSUPPORTED_PROFILE. * * If it is a SOAP method or, IDP type and http method is Redirect/GET, * then removes assertion. * * If local server is an Identity Provider and if there is no more assertion * (Identity Provider has logged out every Service Providers), then restores * the initial response. * * Return value: 0 on success; or a negative value otherwise. **/ lasso_error_t lasso_logout_process_response_msg(LassoLogout *logout, gchar *response_msg) { LassoProfile *profile = NULL; LassoProvider *remote_provider = NULL; char *statusCodeValue = NULL; LassoHttpMethod response_method; LassoMessageFormat format; LassoLibStatusResponse *response = NULL; lasso_error_t rc = 0; gchar *url = NULL; gchar *query = NULL; lasso_bad_param(LOGOUT, logout); lasso_null_param(response_msg); profile = &logout->parent; IF_SAML2(profile) { return lasso_saml20_logout_process_response_msg(logout, response_msg); } lasso_assign_new_gobject(profile->response, lasso_lib_logout_response_new()); format = lasso_node_init_from_message(LASSO_NODE(profile->response), response_msg); switch (format) { case LASSO_MESSAGE_FORMAT_SOAP: response_method = LASSO_HTTP_METHOD_SOAP; break; case LASSO_MESSAGE_FORMAT_QUERY: response_method = LASSO_HTTP_METHOD_REDIRECT; break; default: goto_cleanup_with_rc(LASSO_PROFILE_ERROR_INVALID_MSG); } /* get the RelayState */ lasso_assign_string(profile->msg_relayState, LASSO_LIB_STATUS_RESPONSE(profile->response)->RelayState); /* get provider */ lasso_assign_string(profile->remote_providerID, LASSO_LIB_STATUS_RESPONSE(profile->response)->ProviderID); if (profile->remote_providerID == NULL) goto_cleanup_with_rc(LASSO_PROFILE_ERROR_MISSING_REMOTE_PROVIDERID); remote_provider = lasso_server_get_provider(profile->server, profile->remote_providerID); if (LASSO_IS_PROVIDER(remote_provider) == FALSE) goto_cleanup_with_rc(LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND); /* verify signature */ rc = lasso_provider_verify_signature(remote_provider, response_msg, "ResponseID", format); if (rc == LASSO_DS_ERROR_SIGNATURE_NOT_FOUND) { /* This message SHOULD be signed. * -- draft-liberty-idff-protocols-schema-1.2-errata-v2.0.pdf - p38 */ debug("No signature on logout response"); rc = 0; } else { goto cleanup; } response = LASSO_LIB_STATUS_RESPONSE(profile->response); if (response->Status == NULL || response->Status->StatusCode == NULL || response->Status->StatusCode->Value == NULL) { goto_cleanup_with_rc(LASSO_PROFILE_ERROR_MISSING_STATUS_CODE); } statusCodeValue = response->Status->StatusCode->Value; if (strcmp(statusCodeValue, LASSO_SAML_STATUS_CODE_SUCCESS) != 0) { /* At SP, if the request method was a SOAP type, then rebuild the request * message with HTTP method */ /* takes lower-level StatusCode if available */ if (response->Status->StatusCode && response->Status->StatusCode->StatusCode) statusCodeValue = response->Status->StatusCode->StatusCode->Value; if (lasso_strisequal(statusCodeValue, LASSO_LIB_STATUS_CODE_UNSUPPORTED_PROFILE) && remote_provider->role == LASSO_PROVIDER_ROLE_IDP && logout->initial_http_request_method == LASSO_HTTP_METHOD_SOAP) { /* Build and optionally sign the logout request QUERY message */ lasso_release(profile->msg_body); url = lasso_provider_get_metadata_one(remote_provider, "SingleLogoutServiceURL"); if (url == NULL) goto_cleanup_with_rc(LASSO_PROFILE_ERROR_UNKNOWN_PROFILE_URL); lasso_check_good_rc(lasso_server_export_to_query_for_provider_by_name(profile->server, profile->remote_providerID, profile->request, &query)); if (query == NULL) goto_cleanup_with_rc(LASSO_PROFILE_ERROR_BUILDING_QUERY_FAILED); lasso_assign_new_string(profile->msg_url, lasso_concat_url_query(url, query)); /* send a HTTP Redirect / GET method, so first remove session */ lasso_session_remove_assertion( profile->session, profile->remote_providerID); goto_cleanup_with_rc(LASSO_LOGOUT_ERROR_UNSUPPORTED_PROFILE); } else if (lasso_strisequal(statusCodeValue, LASSO_SAML_STATUS_CODE_REQUEST_DENIED)) { /* assertion no longer on idp so removing it locally too */ lasso_session_remove_assertion( profile->session, profile->remote_providerID); goto_cleanup_with_rc(LASSO_LOGOUT_ERROR_REQUEST_DENIED); } else if (lasso_strisequal(statusCodeValue, LASSO_LIB_STATUS_CODE_FEDERATION_DOES_NOT_EXIST)) { /* how could this happen ? probably error in SP */ /* let's remove the assertion nevertheless */ lasso_session_remove_assertion( profile->session, profile->remote_providerID); goto_cleanup_with_rc(LASSO_LOGOUT_ERROR_FEDERATION_NOT_FOUND); } error("Status code is not success : %s", statusCodeValue); goto_cleanup_with_rc(LASSO_PROFILE_ERROR_STATUS_NOT_SUCCESS); } /* if SOAP method or, if IDP provider type and HTTP Redirect, then remove assertion */ if ( response_method == LASSO_HTTP_METHOD_SOAP || (remote_provider->role == LASSO_PROVIDER_ROLE_SP && response_method == LASSO_HTTP_METHOD_REDIRECT) ) { lasso_session_remove_assertion(profile->session, profile->remote_providerID); } /* If at IDP and if there is no more assertion, IDP has logged out * every SPs, return the initial response to initial SP. Caution: We * can't use the test (remote_provider->role == LASSO_PROVIDER_ROLE_SP) * to know whether the server is acting as an IDP or a SP, because it * can be a proxy. So we have to use the role of the initial remote * provider instead. */ if (logout->initial_remote_providerID && lasso_session_count_assertions(profile->session) <= 0) { remote_provider = lasso_server_get_provider(profile->server, profile->remote_providerID); if (remote_provider->role == LASSO_PROVIDER_ROLE_SP) { lasso_transfer_string(profile->remote_providerID, logout->initial_remote_providerID); lasso_transfer_gobject(profile->request, logout->initial_request); lasso_transfer_gobject(profile->response, logout->initial_response); } } cleanup: lasso_release_string(url); lasso_release_string(query); return rc; } /** * lasso_logout_reset_providerID_index: * @logout: a #LassoLogout * * Reset the providerID_index attribute (set to 0). * * Return value: 0 on success; or a negative value otherwise. **/ gint lasso_logout_reset_providerID_index(LassoLogout *logout) { g_return_val_if_fail(LASSO_IS_LOGOUT(logout), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); lasso_session_init_provider_ids(LASSO_PROFILE(logout)->session); logout->providerID_index = 0; return 0; } /** * lasso_logout_validate_request: * @logout: a #LassoLogout * * * * Sets the remote provider id * * * Sets a logout response with status code value to success. * * * Checks current signature status, if verification failed, stop processing * and set the status code value to failure. * * * Verifies federation and authentication. * * * If the request http method is a SOAP method, then verifies every other * Service Providers supports SOAP method : if not, then sets status code * value to UnsupportedProfile and returns a code error with * LASSO_LOGOUT_ERROR_UNSUPPORTED_PROFILE. * * * Every tests are ok, then removes assertion. * * * If local server is an Identity Provider and if there is more than one * Service Provider (except the initial Service Provider), then saves the * initial request, response and remote provider id. * * * * Return value: 0 on success; or * LASSO_PROFILE_ERROR_MISSING_REQUEST if no request has been found -- usually means that * lasso_logout_process_request_msg was not called, * LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND if the requesting provider is not known to the server object, * LASSO_PROFILE_ERROR_BUILDING_RESPONSE_FAILED if creation of the response object failed, * LASSO_PROFILE_ERROR_NAME_IDENTIFIER_NOT_FOUND if the request do not contain a NameID element, * LASSO_PROFILE_ERROR_SESSION_NOT_FOUND if the logout profile object do not contain a session * object, * LASSO_PROFILE_ERROR_MISSING_ASSERTION if no assertion from the requesting provider was found, * LASSO_PROFILE_ERROR_IDENTITY_NOT_FOUND if the logout profile object do not contain an identity * object, * LASSO_PROFILE_ERROR_FEDERATION_NOT_FOUND if no federation for the requesting provider was found, * LASSO_LOGOUT_ERROR_UNSUPPORTED_PROFILE if the requested HTTP method is not supported by all the * remote provider of the current session. * **/ gint lasso_logout_validate_request(LassoLogout *logout) { LassoProfile *profile; LassoFederation *federation = NULL; LassoProvider *remote_provider; LassoSamlNameIdentifier *nameIdentifier; LassoNode *assertion_n; LassoLibLogoutRequest *logout_request = NULL; g_return_val_if_fail(LASSO_IS_LOGOUT(logout), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); profile = LASSO_PROFILE(logout); IF_SAML2(profile) { return lasso_saml20_logout_validate_request(logout); } /* verify logout request */ if (LASSO_IS_LIB_LOGOUT_REQUEST(profile->request) == FALSE) { return LASSO_PROFILE_ERROR_MISSING_REQUEST; } logout_request = LASSO_LIB_LOGOUT_REQUEST(profile->request); lasso_assign_string(profile->remote_providerID, logout_request->ProviderID); /* get the provider */ remote_provider = lasso_server_get_provider(profile->server, profile->remote_providerID); if (LASSO_IS_PROVIDER(remote_provider) == FALSE) { return critical_error(LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND); } /* Set LogoutResponse */ lasso_release_gobject(profile->response); if (profile->http_request_method == LASSO_HTTP_METHOD_SOAP) { lasso_assign_new_gobject(profile->response, lasso_lib_logout_response_new_full( LASSO_PROVIDER(profile->server)->ProviderID, LASSO_SAML_STATUS_CODE_SUCCESS, logout_request, profile->server->certificate ? LASSO_SIGNATURE_TYPE_WITHX509 : LASSO_SIGNATURE_TYPE_SIMPLE, lasso_get_default_signature_method())); } if (profile->http_request_method == LASSO_HTTP_METHOD_REDIRECT) { lasso_assign_new_gobject(profile->response, lasso_lib_logout_response_new_full( LASSO_PROVIDER(profile->server)->ProviderID, LASSO_SAML_STATUS_CODE_SUCCESS, logout_request, LASSO_SIGNATURE_TYPE_NONE, 0)); } if (LASSO_IS_LIB_LOGOUT_RESPONSE(profile->response) == FALSE) { return critical_error(LASSO_PROFILE_ERROR_BUILDING_RESPONSE_FAILED); } /* copy the RelayState */ lasso_assign_string(LASSO_LIB_STATUS_RESPONSE(profile->response)->RelayState, profile->msg_relayState); /* Verify signature status, if signature is invalid, stop validation here */ if (profile->signature_status != 0) { lasso_profile_set_response_status(profile, LASSO_LIB_STATUS_CODE_INVALID_SIGNATURE); return profile->signature_status; } /* Get the name identifier */ nameIdentifier = logout_request->NameIdentifier; if (nameIdentifier == NULL) { message(G_LOG_LEVEL_CRITICAL, "Name identifier not found in logout request"); lasso_profile_set_response_status( profile, LASSO_LIB_STATUS_CODE_FEDERATION_DOES_NOT_EXIST); return LASSO_PROFILE_ERROR_NAME_IDENTIFIER_NOT_FOUND; } if (profile->session == NULL) { lasso_profile_set_response_status(profile, LASSO_SAML_STATUS_CODE_REQUEST_DENIED); return critical_error(LASSO_PROFILE_ERROR_SESSION_NOT_FOUND); } /* verify authentication */ assertion_n = lasso_session_get_assertion(profile->session, profile->remote_providerID); if (LASSO_IS_SAML_ASSERTION(assertion_n) == FALSE) { message(G_LOG_LEVEL_WARNING, "%s has no assertion", profile->remote_providerID); lasso_profile_set_response_status(profile, LASSO_SAML_STATUS_CODE_REQUEST_DENIED); return LASSO_PROFILE_ERROR_MISSING_ASSERTION; } /* If name identifier is federated, then verify federation */ if (strcmp(nameIdentifier->Format, LASSO_LIB_NAME_IDENTIFIER_FORMAT_FEDERATED) == 0) { if (LASSO_IS_IDENTITY(profile->identity) == FALSE) { lasso_profile_set_response_status(profile, LASSO_LIB_STATUS_CODE_FEDERATION_DOES_NOT_EXIST); return critical_error(LASSO_PROFILE_ERROR_IDENTITY_NOT_FOUND); } federation = g_hash_table_lookup(profile->identity->federations, profile->remote_providerID); if (LASSO_IS_FEDERATION(federation) == FALSE) { lasso_profile_set_response_status(profile, LASSO_LIB_STATUS_CODE_FEDERATION_DOES_NOT_EXIST); return critical_error(LASSO_PROFILE_ERROR_FEDERATION_NOT_FOUND); } if (lasso_federation_verify_name_identifier(federation, LASSO_NODE(nameIdentifier)) == FALSE) { message(G_LOG_LEVEL_WARNING, "No name identifier for %s", profile->remote_providerID); lasso_profile_set_response_status(profile, LASSO_LIB_STATUS_CODE_FEDERATION_DOES_NOT_EXIST); return LASSO_LOGOUT_ERROR_FEDERATION_NOT_FOUND; } } /* if SOAP request method at IDP then verify all the remote service providers support SOAP protocol profile. If one remote authenticated principal service provider doesn't support SOAP then return UnsupportedProfile to original service provider */ if (remote_provider->role == LASSO_PROVIDER_ROLE_SP && profile->http_request_method == LASSO_HTTP_METHOD_SOAP) { logout->private_data->all_soap = TRUE; g_hash_table_foreach(profile->server->providers, (GHFunc)check_soap_support, profile); if (logout->private_data->all_soap == FALSE) { lasso_profile_set_response_status(profile, LASSO_LIB_STATUS_CODE_UNSUPPORTED_PROFILE); return LASSO_LOGOUT_ERROR_UNSUPPORTED_PROFILE; } } /* authentication is ok, federation is ok, propagation support is ok, remove assertion */ lasso_session_remove_assertion(profile->session, profile->remote_providerID); /* if at IDP and nb sp logged >= 1, then backup remote provider id, * request and response */ if (remote_provider->role == LASSO_PROVIDER_ROLE_SP && lasso_session_count_assertions(profile->session) >= 1) { lasso_transfer_string(logout->initial_remote_providerID, profile->remote_providerID); lasso_transfer_gobject(logout->initial_request, profile->request); lasso_transfer_gobject(logout->initial_response, profile->response); } return 0; } /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "InitialRequest", SNIPPET_NODE_IN_CHILD, G_STRUCT_OFFSET(LassoLogout, initial_request), NULL, NULL, NULL}, { "InitialResponse", SNIPPET_NODE_IN_CHILD, G_STRUCT_OFFSET(LassoLogout, initial_response), NULL, NULL, NULL}, { "InitialRemoteProviderID", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoLogout, initial_remote_providerID), NULL, NULL, NULL}, { "InitialHttpRequestMethod", SNIPPET_CONTENT | SNIPPET_INTEGER, G_STRUCT_OFFSET(LassoLogout, initial_http_request_method), NULL, NULL, NULL}, { "LogoutDumpVersion", SNIPPET_ATTRIBUTE, 0, NULL, NULL, NULL }, /* "ProviderIdIndex" must not be dumped (since apps assume to get * it back to 0 after a restore from dump) (maybe this behaviour should * be fixed) */ {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; static void check_soap_support(G_GNUC_UNUSED gchar *key, LassoProvider *provider, LassoProfile *profile) { const GList *supported_profiles; LassoNode *assertion_n; if (strcmp(provider->ProviderID, profile->remote_providerID) == 0) return; /* original service provider (initiated logout) */ assertion_n = lasso_session_get_assertion(profile->session, provider->ProviderID); if (LASSO_IS_SAML_ASSERTION(assertion_n) == FALSE) { return; /* not authenticated with this provider */ } supported_profiles = lasso_provider_get_metadata_list(provider, "SingleLogoutProtocolProfile"); while (supported_profiles && strcmp(supported_profiles->data, LASSO_LIB_PROTOCOL_PROFILE_SLO_SP_SOAP) != 0) supported_profiles = g_list_next(supported_profiles); if (supported_profiles) return; /* provider support profile */ LASSO_LOGOUT(profile)->private_data->all_soap = FALSE; LASSO_LOGOUT(profile)->private_data->partial_logout = FALSE; } static xmlNode* get_xmlNode(LassoNode *node, gboolean lasso_dump) { xmlNode *xmlnode; LassoLogout *logout; if (! LASSO_IS_LOGOUT(node)) { return NULL; } logout = (LassoLogout*)node; xmlnode = parent_class->get_xmlNode(node, lasso_dump); xmlNodeSetName(xmlnode, (xmlChar*)"Logout"); xmlSetProp(xmlnode, (xmlChar*)"LogoutDumpVersion", (xmlChar*)"2"); if (logout->private_data->partial_logout) { xmlSetProp(xmlnode, (xmlChar*)"PartialLogout", (xmlChar*)"true"); } return xmlnode; } static int init_from_xml(LassoNode *node, xmlNode *xmlnode) { int rc = 0; rc = parent_class->init_from_xml(node, xmlnode); if (rc == 0) { xmlChar *tmp; tmp = xmlGetProp(xmlnode, (xmlChar*)"PartiaLogout"); if (tmp && strcmp((char*)tmp, "true") == 0) { ((LassoLogout*)node)->private_data->partial_logout = TRUE; } lasso_release_xml_string(tmp); } return rc; } /*****************************************************************************/ /* overridden parent class methods */ /*****************************************************************************/ static void dispose(GObject *object) { LassoLogout *logout = LASSO_LOGOUT(object); if (logout->private_data->dispose_has_run) { return; } logout->private_data->dispose_has_run = TRUE; G_OBJECT_CLASS(parent_class)->dispose(object); } static void finalize(GObject *object) { LassoLogout *logout = LASSO_LOGOUT(object); lasso_release(logout->private_data); G_OBJECT_CLASS(parent_class)->finalize(object); } /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void instance_init(LassoLogout *logout, G_GNUC_UNUSED void *unused) { logout->initial_http_request_method = LASSO_HTTP_METHOD_NONE; logout->private_data = g_new0(LassoLogoutPrivate, 1); logout->private_data->dispose_has_run = FALSE; } static void class_init(LassoLogoutClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->get_xmlNode = get_xmlNode; nclass->init_from_xml = init_from_xml; nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "Logout"); lasso_node_class_set_ns(nclass, LASSO_LASSO_HREF, LASSO_LASSO_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); G_OBJECT_CLASS(klass)->dispose = dispose; G_OBJECT_CLASS(klass)->finalize = finalize; } GType lasso_logout_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoLogoutClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoLogout), 0, (GInstanceInitFunc) instance_init, NULL }; this_type = g_type_register_static(LASSO_TYPE_PROFILE, "LassoLogout", &this_info, 0); } return this_type; } /** * lasso_logout_new: * @server: the #LassoServer * * Creates a new #LassoLogout. * * Return value: a newly created #LassoLogout object; or NULL if an error * occured **/ LassoLogout* lasso_logout_new(LassoServer *server) { LassoLogout *logout; g_return_val_if_fail(LASSO_IS_SERVER(server), NULL); logout = g_object_new(LASSO_TYPE_LOGOUT, NULL); lasso_assign_gobject(LASSO_PROFILE(logout)->server, server); return logout; } /** * lasso_logout_new_from_dump: * @server: the #LassoServer * @dump: XML logout dump * * Restores the @dump to a new #LassoLogout. * * Return value: a newly created #LassoLogout; or NULL if an error occured **/ LassoLogout* lasso_logout_new_from_dump(LassoServer *server, const char *dump) { LassoLogout *logout; logout = (LassoLogout*)lasso_node_new_from_dump(dump); if (! LASSO_IS_LOGOUT(logout)) { lasso_release_gobject(logout); } else { lasso_assign_gobject(logout->parent.server, server); } return logout; } /** * lasso_logout_dump: * @logout: a #LassoLogout * * Dumps @logout content to an XML string. * * Return value:(transfer full): the dump string. It must be freed by the caller. **/ gchar* lasso_logout_dump(LassoLogout *logout) { return lasso_node_dump(LASSO_NODE(logout)); } lasso-2.8.2/lasso/id-ff/PaxHeaders/provider.h0000644000000000000000000000013214117162531016034 xustar0030 mtime=1631380825.852638017 30 atime=1678814151.008993845 30 ctime=1678814320.969953082 lasso-2.8.2/lasso/id-ff/provider.h0000644000175000017500000002611314117162531021307 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_PROVIDER_H__ #define __LASSO_PROVIDER_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "../xml/xml.h" #include "../xml/xml_enc.h" #include "../key.h" #define LASSO_TYPE_PROVIDER (lasso_provider_get_type()) #define LASSO_PROVIDER(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_PROVIDER, LassoProvider)) #define LASSO_PROVIDER_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_PROVIDER, LassoProviderClass)) #define LASSO_IS_PROVIDER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_PROVIDER)) #define LASSO_IS_PROVIDER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_PROVIDER)) #define LASSO_PROVIDER_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_PROVIDER, LassoProviderClass)) typedef struct _LassoProvider LassoProvider; typedef struct _LassoProviderClass LassoProviderClass; typedef struct _LassoProviderPrivate LassoProviderPrivate; /** * LassoHttpMethod: * @LASSO_HTTP_METHOD_NONE: invalid value (internal use) * @LASSO_HTTP_METHOD_ANY: any method will do * @LASSO_HTTP_METHOD_IDP_INITIATED: not a method, for IdP initiated profile * @LASSO_HTTP_METHOD_GET: HTTP GET * @LASSO_HTTP_METHOD_POST: Browser POST * @LASSO_HTTP_METHOD_REDIRECT: HTTP-Redirect based * @LASSO_HTTP_METHOD_SOAP: SOAP/HTTP based * @LASSO_HTTP_METHOD_ARTIFACT_GET: Artifact by HTTP GET (SAML 2.0) * @LASSO_HTTP_METHOD_ARTIFACT_POST: Artifact by HTTP POST (SAML 2.0) * @LASSO_HTTP_METHOD_PAOS: PAOS/HTTP based (SAML 2.0) * * Method. **/ typedef enum { LASSO_HTTP_METHOD_NONE = -1, LASSO_HTTP_METHOD_ANY, LASSO_HTTP_METHOD_IDP_INITIATED, LASSO_HTTP_METHOD_GET, LASSO_HTTP_METHOD_POST, LASSO_HTTP_METHOD_REDIRECT, LASSO_HTTP_METHOD_SOAP, LASSO_HTTP_METHOD_ARTIFACT_GET, LASSO_HTTP_METHOD_ARTIFACT_POST, LASSO_HTTP_METHOD_PAOS, LASSO_HTTP_METHOD_LAST } LassoHttpMethod; /** * LassoMdProtocolType: * @LASSO_MD_PROTOCOL_TYPE_FEDERATION_TERMINATION: Federation Termination Notification * @LASSO_MD_PROTOCOL_TYPE_NAME_IDENTIFIER_MAPPING: Name Identifier Mapping * @LASSO_MD_PROTOCOL_TYPE_REGISTER_NAME_IDENTIFIER: Name Registration * @LASSO_MD_PROTOCOL_TYPE_SINGLE_LOGOUT: Single Logout * @LASSO_MD_PROTOCOL_TYPE_SINGLE_SIGN_ON: Single Sign-On and Federation * @LASSO_MD_PROTOCOL_TYPE_ARTIFACT_RESOLUTION: Artifact Resolution (SAML 2.0) * @LASSO_MD_PROTOCOL_TYPE_MANAGE_NAME_ID: Manage Name Identifier (SAML 2.0) * @LASSO_MD_PROTOCOL_TYPE_ASSERTION_ID_REQUEST: Assertion ID Request (SAML 2.0) * * Liberty Metadata Type. **/ typedef enum { LASSO_MD_PROTOCOL_TYPE_FEDERATION_TERMINATION, LASSO_MD_PROTOCOL_TYPE_NAME_IDENTIFIER_MAPPING, LASSO_MD_PROTOCOL_TYPE_REGISTER_NAME_IDENTIFIER, LASSO_MD_PROTOCOL_TYPE_SINGLE_LOGOUT, LASSO_MD_PROTOCOL_TYPE_SINGLE_SIGN_ON, LASSO_MD_PROTOCOL_TYPE_ARTIFACT_RESOLUTION, LASSO_MD_PROTOCOL_TYPE_MANAGE_NAME_ID, LASSO_MD_PROTOCOL_TYPE_ASSERTION_ID_REQUEST, LASSO_MD_PROTOCOL_TYPE_AUTHN_QUERY, LASSO_MD_PROTOCOL_TYPE_AUTHZ, LASSO_MD_PROTOCOL_TYPE_ATTRIBUTE, LASSO_MD_PROTOCOL_TYPE_LAST } LassoMdProtocolType; /** * LassoProviderRole: * @LASSO_PROVIDER_ROLE_NONE: unitialized value (internal use) * @LASSO_PROVIDER_ROLE_SP: service provider. * @LASSO_PROVIDER_ROLE_IDP: identity provider. * @LASSO_PROVIDER_ROLE_BOTH: service&identity provider. * @LASSO_PROVIDER_ROLE_AUTHN_AUTHORITY: an authentification authority, i.e. an endpoint able to * return previously returned assertion, * @LASSO_PROVIDER_ROLE_AUTHZ_AUTHORITY: an authorization authority, i.e. an endpoint able to return * assertion providing authorization about a principal acessing a resource, * @LASSO_PROVIDER_ROLE_ATTRIBUTE_AUTHORITY: an attribute authority, i.e. an endpoint able to return * attributes aboute a principal, * @LASSO_PROVIDER_ROLE_LAST: all values in the enumeration are guaranteed to be < to * @LASSO_PROVIDER_ROLE_LAST. * * #LassoProviderRole is an enumeration allowing to enumerate the roles handled by a provider, it * can be used in a bitmask as each value is a power of 2 (except #LASSO_PROVIDER_ROLE_ANY which is * the full bitmask and LASSO_PROVIDER_ROLE_NONE). **/ typedef enum { LASSO_PROVIDER_ROLE_ANY = -1, LASSO_PROVIDER_ROLE_NONE = 0, LASSO_PROVIDER_ROLE_SP = 1, LASSO_PROVIDER_ROLE_IDP = 2, LASSO_PROVIDER_ROLE_BOTH = 3, LASSO_PROVIDER_ROLE_AUTHN_AUTHORITY = 4, LASSO_PROVIDER_ROLE_AUTHZ_AUTHORITY = 8, LASSO_PROVIDER_ROLE_ATTRIBUTE_AUTHORITY = 16, LASSO_PROVIDER_ROLE_LAST = 17, LASSO_PROVIDER_ROLE_ALL = 31 } LassoProviderRole; /** * LassoProtocolConformance: * @LASSO_PROTOCOL_LIBERTY_1_0: Liberty ID-FF 1.0 * @LASSO_PROTOCOL_LIBERTY_1_1: Liberty ID-FF 1.1 * @LASSO_PROTOCOL_LIBERTY_1_2: Liberty ID-FF 1.2 * @LASSO_PROTOCOL_SAML_2_0: SAML 2.0 * * Provider protocol conformance. **/ typedef enum { LASSO_PROTOCOL_NONE = -1, LASSO_PROTOCOL_LIBERTY_1_0, LASSO_PROTOCOL_LIBERTY_1_1, LASSO_PROTOCOL_LIBERTY_1_2, LASSO_PROTOCOL_SAML_2_0 } LassoProtocolConformance; /** * LassoEncryptionMode: * @LASSO_ENCRYPTION_MODE_NONE: Encrypt nothing * @LASSO_ENCRYPTION_MODE_NAMEID: Encrypt NameIDs * @LASSO_ENCRYPTION_MODE_ASSERTION : Encrypt Assertions * * Encryption mode. **/ typedef enum { LASSO_ENCRYPTION_MODE_NONE, LASSO_ENCRYPTION_MODE_NAMEID, LASSO_ENCRYPTION_MODE_ASSERTION } LassoEncryptionMode; /** * LassoProvider: * @ProviderID: the identifier URI of this provider * @role: the role prescribed when this #LassoProvider was built * @metadata_filename: file path or content of the metadata description for this provider. * @public_key: file path or content of the public key file for this provider. * @ca_cert_chain: file path or content of the CA cert chain used to validate signature of this * provider (can be used instead of a public key to limit the need for metadata updates). * * Any kind of provider, identity provider, service provider, attribute authority, authorization * authority will be represented by a #LassoProvider object. This object will holds public keys, * certificate chains and metadata informations. The ID-FF 1.2 and SAML 2.0 metadata files are * flattened inside a key-value map that you can access using the functions * lasso_provider_get_metadata_one_for_role(), lasso_provider_get_metadata_list_for_role(), * lasso_provider_get_metadata_keys_for_role(). */ struct _LassoProvider { LassoNode parent; /*< public >*/ gchar *ProviderID; LassoProviderRole role; char *metadata_filename; gchar *public_key; gchar *ca_cert_chain; /*< private >*/ LassoProviderPrivate *private_data; }; struct _LassoProviderClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_provider_get_type(void); LASSO_EXPORT LassoProvider* lasso_provider_new(LassoProviderRole role, const char *metadata, const char *public_key, const char *ca_cert_chain); LASSO_EXPORT LassoProvider* lasso_provider_new_from_buffer(LassoProviderRole role, const char *metadata, const char *public_key, const char *ca_cert_chain); LASSO_EXPORT gchar* lasso_provider_get_assertion_consumer_service_url(LassoProvider *provider, const char *service_id); LASSO_EXPORT gchar* lasso_provider_get_metadata_one(LassoProvider *provider, const char *name); LASSO_EXPORT GList* lasso_provider_get_metadata_list(LassoProvider *provider, const char *name); LASSO_EXPORT LassoProvider* lasso_provider_new_from_dump(const gchar *dump); LASSO_EXPORT LassoHttpMethod lasso_provider_get_first_http_method(LassoProvider *provider, LassoProvider *remote_provider, LassoMdProtocolType protocol_type); LASSO_EXPORT gboolean lasso_provider_accept_http_method(LassoProvider *provider, LassoProvider *remote_provider, LassoMdProtocolType protocol_type, LassoHttpMethod http_method, gboolean initiate_profile); LASSO_EXPORT gboolean lasso_provider_has_protocol_profile(LassoProvider *provider, LassoMdProtocolType protocol_type, const char *protocol_profile); LASSO_EXPORT gchar* lasso_provider_get_base64_succinct_id(const LassoProvider *provider); LASSO_EXPORT xmlNode* lasso_provider_get_organization(const LassoProvider *provider); LASSO_EXPORT LassoProtocolConformance lasso_provider_get_protocol_conformance( const LassoProvider *provider); LASSO_EXPORT void lasso_provider_set_protocol_conformance(LassoProvider *provider, LassoProtocolConformance protocol_conformance); LASSO_EXPORT void lasso_provider_set_encryption_mode(LassoProvider *provider, LassoEncryptionMode encryption_mode); LASSO_EXPORT LassoEncryptionMode lasso_provider_get_encryption_mode(LassoProvider *provider); LASSO_EXPORT void lasso_provider_set_encryption_sym_key_type(LassoProvider *provider, LassoEncryptionSymKeyType encryption_sym_key_type); LASSO_EXPORT gchar* lasso_provider_get_default_name_id_format(LassoProvider *provider); LASSO_EXPORT const char* lasso_provider_get_sp_name_qualifier(LassoProvider *provider); LASSO_EXPORT lasso_error_t lasso_provider_verify_single_node_signature (LassoProvider *provider, LassoNode *node, const char *id_attr_name); LASSO_EXPORT GList* lasso_provider_get_idp_supported_attributes(LassoProvider *provider); LASSO_EXPORT char* lasso_provider_get_valid_until(LassoProvider *provider); LASSO_EXPORT char* lasso_provider_get_cache_duration(LassoProvider *provider); LASSO_EXPORT char* lasso_provider_get_metadata_one_for_role(LassoProvider *provider, LassoProviderRole role, const char *name); LASSO_EXPORT GList* lasso_provider_get_metadata_list_for_role(const LassoProvider *provider, LassoProviderRole role, const char *name); LASSO_EXPORT GList *lasso_provider_get_metadata_keys_for_role(LassoProvider *provider, LassoProviderRole role); LASSO_EXPORT LassoProviderRole lasso_provider_get_roles(LassoProvider *provider); LASSO_EXPORT gboolean lasso_provider_match_conformance(LassoProvider *provider, LassoProvider *another_provider); LASSO_EXPORT lasso_error_t lasso_provider_set_server_signing_key(LassoProvider *provider, LassoKey *key); LASSO_EXPORT lasso_error_t lasso_provider_add_key(LassoProvider *provider, LassoKey *key, gboolean after); LASSO_EXPORT int lasso_provider_verify_signature(LassoProvider *provider, const char *message, const char *id_attr_name, LassoMessageFormat format); LASSO_EXPORT void lasso_provider_set_key_encryption_method( LassoProvider *provider, LassoKeyEncryptionMethod method); LASSO_EXPORT LassoKeyEncryptionMethod lasso_provider_get_key_encryption_method(); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_PROVIDER_H__ */ lasso-2.8.2/lasso/id-ff/PaxHeaders/login.c0000644000000000000000000000013214364261206015310 xustar0030 mtime=1674666630.734769045 30 atime=1678814218.189370839 30 ctime=1678814320.981953149 lasso-2.8.2/lasso/id-ff/login.c0000644000175000017500000027635514364261206020602 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ /** * SECTION:login * @short_description: Single Sign-On and Federation Profile * * The Single Sign On process allows a user to log in once to an identity * provider (IdP), and to be then transparently loged in to the required * service providers (SP) belonging to the IP "circle of trust". Subordinating * different identities of the same user within a circle of trust to a unique * IP is called "Identity Federation". The liberty Alliance specifications * allows, thanks to this federation, strong and unique authentication coupled * with control by the user of his personal informations. The explicit user * agreement is necessary before proceeding to Identity Federation. * * * The service provider must implement the following process: * * creating an authentication request with * lasso_login_init_authn_request(); * sending it to the identity provider with * lasso_login_build_authn_request_msg(); * receiving and processing the answer: * * either an authentication response with * lasso_login_process_authn_response_msg() * or an artifact with lasso_login_init_request() then sending the * request to the IdP with lasso_login_build_request_msg() and processing the * new answer with lasso_login_process_response_msg(). * * * * * * Our first example shows how to initiate a request toward an ID-FF 1.2 or SAML 2.0 identity * provider. It supposes that we already initialized a #LassoServer object with the metadatas or our * provider (and its private key if we want to sign the request), and that we added the metadatas of * the targetted IdP with the method lasso_server_add_provider(). * * * Service Provider Login URL * * LassoLogin *login; * int rc; // hold return codes * * login = lasso_login_new(server); * rc = lasso_login_init_authn_request(login, "http://identity-provider-id/", * LASSO_HTTP_METHOD_REDIRECT); * if (rc != 0) { * ... // handle errors, most of them are related to bad initialization * } * * // customize AuthnRequest * // protocolProfile is the protocolProfile of the provider http://identity-provider-id/ * if (protocolProfile == LASSO_LIBERTY_1_2) { * LassoLibAuthnRequest *request = LASSO_LIB_AUTHN_REQUEST(LASSO_PROFILE(login)->request); * request->NameIDPolicy = strdup(LASSO_LIB_NAMEID_POLICY_TYPE_FEDERATED); * request->ForceAuthn = TRUE; * request->IsPassive = FALSE; * // tell the IdP how to return the response * request->ProtocolProfile = strdup(LASSO_LIB_PROTOCOL_PROFILE_BRWS_ART); * } else if (protocolProfile == LASSO_SAML_2_0) { * LassoSamlp2AuthnRequest *request = LASSO_SAMLP2_AUTHN_REQUEST(LASSO_PROFILE(login)->request); * if (request->NameIDPolicy->Format) { * g_free(request->NameIDPolicy->Format); * } * request->NameIDPolicy->Format = g_strdup(LASSO_NAME_IDENTIFIER_FORMAT_PERSISTENT); * // Allow creation of new federation * // * request->NameIDPolicy->AllowCreate = 1; * request->ForceAuthn = TRUE; * request->IsPassive = FALSE; * // tell the IdP how to return the response * if (request->ProtocolBinding) { * g_free(request->ProtocolBinding); * } * // here we expect an artifact response, it could be post, redirect or PAOS. * request->ProtocolBinding = g_strdup(LASSO_SAML2_METADATA_BINDING_ARTIFACT); } * // Lasso will choose whether to sign the request by looking at the IdP * // metadatas and at our metadatas, but you can always force him to sign or to * // not sign using the method lasso_profile_set_signature_hint() on the * // LassoLogin object. * * rc = lasso_login_build_authn_request_msg(login); * if (rc != 0) { .... // handle errors // could be that the requested binding (POST, Redirect, etc..) is not supported (LASSO_PROFILE_ERROR_UNSUPPORTED_PROFILE) // or that we could not sign the request (LASSO_PROFILE_ERROR_BUILDING_QUERY_FAILED). * } * * // redirect user to identity provider // we chose the Redirect binding, so we have to generate a redirect HTTP response to the URL returned by Lasso * printf("Location: %s\n\nRedirected to IdP\n", LASSO_PROFILE(login)->msg_url); * * * * Next example shows how to receive the response from the identity * provider for ID-FF 1.2. * * * Service Provider Assertion Consumer Service URL for ID-FF 1.2 * * LassoLogin *login; * char *request_method = getenv("REQUEST_METHOD"); * char *artifact_msg = NULL, *lares = NULL, *lareq = NULL; * char *name_identifier; * lassoHttpMethod method; * int rc = 0; * * login = lasso_login_new(server); * if (strcmp(request_method, "GET") == 0) { * artifact_msg = getenv("QUERY_STRING"); * method = LASSO_HTTP_METHOD_REDIRECT; * } else { * // read submitted form; if it has a LAREQ field, put it in lareq, * // if it has a LARES field, put it in lares * if (lareq) { * artifact_msg = lareq; * } else if (lares) { * response_msg = lares; * } else { * // bail out * } * method = LASSO_HTTP_METHOD_POST; * } * * if (artifact_msg) { * // we received an artifact response, * // it means we did not really receive the response, * // only a token to redeem the real response from the identity * // provider through a SOAP resolution call * rc = lasso_login_init_request(login, artifact_msg, method); * if (rc != 0) { * ... // handle errors * // there is usually no error at this step, only * // if the IdP response is malformed * } * rc = lasso_login_build_request_msg(login); * if (rc != 0) { * ... // handle errors * // as for AuthnRequest generation, it generally is caused * // by a bad initialization like an impossibility to load * // the private key. * } * // makes a SOAP call, soap_call is NOT a Lasso function * soap_answer_msg = soap_call(LASSO_PROFILE(login)->msg_url, * LASSO_PROFILE(login)->msg_body); * rc = lasso_login_process_response_msg(login, soap_answer_msg); * if (rc != 0) { * ... // handle errors * // here you can know if the IdP refused the request, * } * } else if (response_msg) { * lasso_login_process_authn_response_msg(login, response_msg); * } * * // looks up name_identifier in local file, database, whatever and gets back * // two things: identity_dump and session_dump * name_identifier = LASSO_PROFILE(login)->nameIdentifier * lasso_profile_set_identity_from_dump(LASSO_PROFILE(login), identity_dump); * lasso_profile_set_session_from_dump(LASSO_PROFILE(login), session_dump); * * lasso_login_accept_sso(login); * * if (lasso_profile_is_identity_dirty(LASSO_PROFILE(login))) { * LassoIdentity *identity; * char *identity_dump; * identity = lasso_profile_get_identity(LASSO_PROFILE(login)); * identity_dump = lasso_identity_dump(identity); * // record identity_dump in file, database... * } * * if (lasso_profile_is_session_dirty(LASSO_PROFILE(login))) { * LassoSession *session; * char *session_dump; * session = lasso_profile_get_session(LASSO_PROFILE(login)); * session_dump = lasso_session_dump(session); * // record session_dump in file, database... * } * * // redirect user anywhere * printf("Location: %s\n\nRedirected to site root\n", login->msg_url); * * * * The implement an IdP you must create a single sign-on service endpoint, the needed APIs for * this are lasso_login_process_authn_request_msg(), lasso_login_validate_request_msg(), * lasso_login_build_assertion(), lasso_login_build_authn_response_msg() and * lasso_login_build_artifact_msg(). You will have to chose between * lasso_login_build_authn_response_msg() and lasso_login_build_artifact_msg() depending on the * requested protocol for the response by the service provider * * * Identity provider single sign-on service * * LassoLogin *login; * char *request_method = getenv("REQUEST_METHOD"); * char *artifact_msg = NULL, *lares = NULL, *lareq = NULL; * char *name_identifier; * lassoHttpMethod method; * int rc = 0; * * login = lasso_login_new(server); * if (strcmp(request_method, 'GET')) { // AuthnRequest send with the HTTP-Redirect binding * // * lasso_profile_set_signature_verify_hint(LASSO_PROFILE(login), * LASSO_PROFILE_SIGNATURE_VERIFY_HINT_FORCE); * rc = lasso_process_authn_request_msg(login, getenv("QUERY_STRING")); * if (rc != 0) { * // handle errors * } * * * } else { * * * * */ #include #include #include "lasso_config.h" #include "../utils.h" #include "../debug.h" #include "login.h" #include "provider.h" #include "../xml/private.h" #include "../xml/lib_authentication_statement.h" #include "../xml/lib_subject.h" #include "../xml/saml_advice.h" #include "../xml/saml_attribute.h" #include "../xml/saml_attribute_value.h" #include "../xml/saml_audience_restriction_condition.h" #include "../xml/saml_conditions.h" #include "../xml/samlp_response.h" #include "../xml/saml-2.0/saml2_encrypted_element.h" #include "../xml/misc_text_node.h" #include "profileprivate.h" #include "providerprivate.h" #include "serverprivate.h" #include "sessionprivate.h" #include "identityprivate.h" #include "loginprivate.h" #include "../saml-2.0/loginprivate.h" #include "../lasso_config.h" #define LASSO_LOGIN_GET_PRIVATE(o) \ (G_TYPE_INSTANCE_GET_PRIVATE ((o), LASSO_TYPE_LOGIN, LassoLoginPrivate)) static void lasso_login_build_assertion_artifact(LassoLogin *login); /*****************************************************************************/ /* static methods/functions */ /*****************************************************************************/ /** * lasso_login_build_assertion: * @login: a #LassoLogin * @authenticationMethod: the authentication method * @authenticationInstant: the time at which the authentication took place * @notBefore: the earliest time instant at which the assertion is valid * @notOnOrAfter: the time instant at which the assertion has expired * * Builds an assertion and stores it in profile session. * @authenticationInstant, reauthenticateOnOrAfter, @notBefore and * @notOnOrAfter may be NULL. If @authenticationInstant is NULL, the current * time will be used. Time values must be encoded in UTC. * * Construct the authentication assertion for the response. It must be called after validating the * request using lasso_login_validate_request_msg(). The created assertion is accessed using * lasso_login_get_assertion(). * * Return value: 0 on success; or * * * #LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ if login is not a #LassoLogin object, * * * #LASSO_PROFILE_ERROR_IDENTITY_NOT_FOUND if no identity object was found in the login profile object. * * * #LASSO_PROFILE_ERROR_MISSING_RESPONSE if no response object is present ( it is normally initialized * by lasso_login_process_authn_request_msg() ) * * * #LASSO_PROFILE_ERROR_FEDERATION_NOT_FOUND if a #LASSO_SAML2_NAME_IDENTIFIER_FORMAT_PERSISTENT or #LASSO_SAML2_NAME_IDENTIFIER_FORMAT_ENCRYPTED NameID format is asked and no corresponding federation was found in the #LassoIdentity object, * * * #LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND if encryption is needed and the request issuing provider is unknown (it as not been registered in the #LassoServer object), * * * #LASSO_DS_ERROR_ENCRYPTION_FAILED if encryption is needed but it failed, * * * **/ int lasso_login_build_assertion(LassoLogin *login, const char *authenticationMethod, const char *authenticationInstant, const char *reauthenticateOnOrAfter, const char *notBefore, const char *notOnOrAfter) { LassoSamlAssertion *assertion; LassoLibAuthenticationStatement *as; LassoSamlNameIdentifier *nameIdentifier = NULL; LassoProfile *profile; LassoFederation *federation; LassoProvider *provider = NULL; LassoSaml2EncryptedElement *encrypted_element = NULL; LassoSamlSubjectStatementAbstract *ss; lasso_error_t rc = 0; g_return_val_if_fail(LASSO_IS_LOGIN(login), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); profile = LASSO_PROFILE(login); if (profile->identity == NULL) return LASSO_PROFILE_ERROR_IDENTITY_NOT_FOUND; IF_SAML2(profile) { return lasso_saml20_login_build_assertion(login, authenticationMethod, authenticationInstant, notBefore, notOnOrAfter); } federation = g_hash_table_lookup(profile->identity->federations, profile->remote_providerID); assertion = LASSO_SAML_ASSERTION(lasso_lib_assertion_new_full( LASSO_PROVIDER(profile->server)->ProviderID, LASSO_SAMLP_REQUEST_ABSTRACT(profile->request)->RequestID, profile->remote_providerID, notBefore, notOnOrAfter)); if (strcmp(login->nameIDPolicy, LASSO_LIB_NAMEID_POLICY_TYPE_ONE_TIME) == 0 || federation == NULL) { /* if NameIDPolicy is 'onetime', don't use a federation */ nameIdentifier = lasso_saml_name_identifier_new(); lasso_assign_new_string(nameIdentifier->content, lasso_build_unique_id(32)); lasso_assign_string(nameIdentifier->NameQualifier, LASSO_PROVIDER(profile->server)->ProviderID); lasso_assign_string(nameIdentifier->Format, LASSO_LIB_NAME_IDENTIFIER_FORMAT_ONE_TIME); as = lasso_lib_authentication_statement_new_full(authenticationMethod, authenticationInstant, reauthenticateOnOrAfter, NULL, nameIdentifier); lasso_assign_new_gobject(profile->nameIdentifier, LASSO_NODE(nameIdentifier)); } else { as = lasso_lib_authentication_statement_new_full(authenticationMethod, authenticationInstant, reauthenticateOnOrAfter, LASSO_SAML_NAME_IDENTIFIER(federation->remote_nameIdentifier), LASSO_SAML_NAME_IDENTIFIER(federation->local_nameIdentifier)); } /* Encrypt NameID */ provider = lasso_server_get_provider(profile->server, profile->remote_providerID); ss = LASSO_SAML_SUBJECT_STATEMENT_ABSTRACT(as); if (provider && (lasso_provider_get_encryption_mode(provider) & LASSO_ENCRYPTION_MODE_NAMEID)) { encrypted_element = LASSO_SAML2_ENCRYPTED_ELEMENT(lasso_node_encrypt( LASSO_NODE(ss->Subject->NameIdentifier), lasso_provider_get_encryption_public_key(provider), lasso_provider_get_encryption_sym_key_type(provider), lasso_provider_get_key_encryption_method(provider), provider->ProviderID)); if (encrypted_element != NULL) { lasso_assign_new_gobject(ss->Subject->EncryptedNameIdentifier, encrypted_element); lasso_release_gobject(ss->Subject->NameIdentifier); } } /* add session index */ if (lasso_provider_get_first_http_method(&login->parent.server->parent, provider, LASSO_MD_PROTOCOL_TYPE_SINGLE_LOGOUT) != LASSO_HTTP_METHOD_NONE) { lasso_assign_string(as->SessionIndex, assertion->AssertionID); } assertion->AuthenticationStatement = LASSO_SAML_AUTHENTICATION_STATEMENT(as); /* Save signing material in assertion private datas to be able to sign later */ lasso_check_good_rc(lasso_server_set_signature_for_provider_by_name(login->parent.server, profile->remote_providerID, (LassoNode*)assertion)); lasso_list_add_gobject(LASSO_SAMLP_RESPONSE(profile->response)->Assertion, assertion); /* store assertion in session object */ if (profile->session == NULL) { profile->session = lasso_session_new(); } lasso_assign_gobject(login->assertion, LASSO_SAML_ASSERTION(assertion)); lasso_check_good_rc(lasso_session_add_assertion(profile->session, profile->remote_providerID, LASSO_NODE(assertion))); if (LASSO_SAMLP_REQUEST_ABSTRACT(profile->request)->MajorVersion == 1 && LASSO_SAMLP_REQUEST_ABSTRACT(profile->request)->MinorVersion < 2) { /* pre-id-ff 1.2, saml 1.0 */ /* needs assertion artifact */ lasso_login_build_assertion_artifact(login); assertion->MinorVersion = 0; ss = LASSO_SAML_SUBJECT_STATEMENT_ABSTRACT(assertion->AuthenticationStatement); ss->Subject = LASSO_SAML_SUBJECT(lasso_saml_subject_new()); ss->Subject->NameIdentifier = LASSO_SAML_NAME_IDENTIFIER(g_object_ref(profile->nameIdentifier)); ss->Subject->SubjectConfirmation = lasso_saml_subject_confirmation_new(); /* liberty-architecture-bindings-profiles-v1.1.pdf, page 24, line 729 */ lasso_list_add_string(ss->Subject->SubjectConfirmation->ConfirmationMethod, LASSO_SAML_CONFIRMATION_METHOD_ARTIFACT01); lasso_assign_string(ss->Subject->SubjectConfirmation->SubjectConfirmationData, login->assertionArtifact); if (nameIdentifier) { /* draft-liberty-idff-protocols-schemas-1.2-errata-v2.0.pdf */ lasso_release_string(nameIdentifier->NameQualifier); lasso_release_string(nameIdentifier->Format); } } cleanup: lasso_release_gobject(assertion); return rc; } /** * lasso_login_must_ask_for_consent_private: * @login: a #LassoLogin * * Evaluates if it is necessary to ask the consent of the Principal. * This method doesn't take the isPassive value into account. * * Return value: TRUE if consent should be asked, FALSE otherwise. **/ static gboolean lasso_login_must_ask_for_consent_private(LassoLogin *login) { char *nameIDPolicy, *consent; LassoProfile *profile = LASSO_PROFILE(login); LassoFederation *federation = NULL; nameIDPolicy = LASSO_LIB_AUTHN_REQUEST(profile->request)->NameIDPolicy; if (nameIDPolicy == NULL || strcmp(nameIDPolicy, LASSO_LIB_NAMEID_POLICY_TYPE_NONE) == 0) return FALSE; if (strcmp(nameIDPolicy, LASSO_LIB_NAMEID_POLICY_TYPE_ONE_TIME) == 0) return FALSE; if (strcmp(nameIDPolicy, LASSO_LIB_NAMEID_POLICY_TYPE_FEDERATED) != 0 && strcmp(nameIDPolicy, LASSO_LIB_NAMEID_POLICY_TYPE_ANY) != 0) { message(G_LOG_LEVEL_CRITICAL, "Unknown NameIDPolicy: %s", nameIDPolicy); /* NameIDPolicy is considered empty (None value) if its value is unknown/invalid */ return TRUE; } if (profile->identity != NULL) { federation = g_hash_table_lookup(profile->identity->federations, profile->remote_providerID); if (federation) return FALSE; } consent = LASSO_LIB_AUTHN_REQUEST(profile->request)->consent; if (consent == NULL) return TRUE; if (strcmp(consent, LASSO_LIB_CONSENT_OBTAINED) == 0) return FALSE; if (strcmp(consent, LASSO_LIB_CONSENT_OBTAINED_PRIOR) == 0) return FALSE; if (strcmp(consent, LASSO_LIB_CONSENT_OBTAINED_CURRENT_IMPLICIT) == 0) return FALSE; if (strcmp(consent, LASSO_LIB_CONSENT_OBTAINED_CURRENT_EXPLICIT) == 0) return FALSE; if (strcmp(consent, LASSO_LIB_CONSENT_UNAVAILABLE) == 0) return TRUE; if (strcmp(consent, LASSO_LIB_CONSENT_INAPPLICABLE) == 0) return TRUE; message(G_LOG_LEVEL_CRITICAL, "Unknown consent value: %s", consent); /* we consider consent as empty if its value is unknown/invalid */ return TRUE; } /** * lasso_login_process_federation: * @login: a #LassoLogin * @is_consent_obtained: whether user consent has been obtained * * Return value: 0 on success; or a negative value otherwise. **/ static gint lasso_login_process_federation(LassoLogin *login, gboolean is_consent_obtained) { LassoFederation *federation = NULL; LassoProfile *profile; char *nameIDPolicy; gint ret = 0; g_return_val_if_fail(LASSO_IS_LOGIN(login), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); profile = LASSO_PROFILE(login); /* verify if identity already exists else create it */ if (profile->identity == NULL) { profile->identity = lasso_identity_new(); } /* get nameIDPolicy in lib:AuthnRequest */ nameIDPolicy = LASSO_LIB_AUTHN_REQUEST(profile->request)->NameIDPolicy; if (nameIDPolicy == NULL) nameIDPolicy = LASSO_LIB_NAMEID_POLICY_TYPE_NONE; lasso_assign_string(login->nameIDPolicy, nameIDPolicy); /* if nameIDPolicy is 'onetime' => nothing to do */ if (strcmp(nameIDPolicy, LASSO_LIB_NAMEID_POLICY_TYPE_ONE_TIME) == 0) { return 0; } /* search a federation in the identity */ federation = g_hash_table_lookup(profile->identity->federations, profile->remote_providerID); if (strcmp(nameIDPolicy, LASSO_LIB_NAMEID_POLICY_TYPE_NONE) == 0) { /* a federation MUST exist */ if (federation == NULL) { /* if protocolProfile is LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_POST * set StatusCode to FederationDoesNotExist in lib:AuthnResponse */ lasso_profile_set_response_status(LASSO_PROFILE(login), LASSO_LIB_STATUS_CODE_FEDERATION_DOES_NOT_EXIST); return LASSO_LOGIN_ERROR_FEDERATION_NOT_FOUND; } lasso_assign_gobject(LASSO_PROFILE(login)->nameIdentifier, LASSO_SAML_NAME_IDENTIFIER(federation->local_nameIdentifier)); return 0; } if (strcmp(nameIDPolicy, LASSO_LIB_NAMEID_POLICY_TYPE_FEDERATED) != 0 && strcmp(nameIDPolicy, LASSO_LIB_NAMEID_POLICY_TYPE_ANY) != 0) { return critical_error(LASSO_LOGIN_ERROR_INVALID_NAMEIDPOLICY); } /* consent is necessary, it should be obtained via consent attribute * in lib:AuthnRequest or IDP should ask the Principal */ if (lasso_login_must_ask_for_consent_private(login) && !is_consent_obtained) { if (strcmp(nameIDPolicy, LASSO_LIB_NAMEID_POLICY_TYPE_ANY) == 0) { /* if the NameIDPolicy element is 'any' and if the policy * for the Principal forbids federation, then evaluation * MAY proceed as if the value was 'onetime'. */ lasso_assign_string(login->nameIDPolicy, LASSO_LIB_NAMEID_POLICY_TYPE_ONE_TIME); return 0; } /* if protocolProfile is LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_POST * set StatusCode to FederationDoesNotExist in lib:AuthnResponse */ /* FIXME : is it the correct value for the StatusCode ? */ lasso_profile_set_response_status(LASSO_PROFILE(login), LASSO_LIB_STATUS_CODE_FEDERATION_DOES_NOT_EXIST); return LASSO_LOGIN_ERROR_CONSENT_NOT_OBTAINED; } if (federation == NULL) { federation = lasso_federation_new(LASSO_PROFILE(login)->remote_providerID); lasso_federation_build_local_name_identifier(federation, LASSO_PROVIDER(LASSO_PROFILE(login)->server)->ProviderID, LASSO_LIB_NAME_IDENTIFIER_FORMAT_FEDERATED, NULL); lasso_identity_add_federation(LASSO_PROFILE(login)->identity, federation); } lasso_assign_gobject(LASSO_PROFILE(login)->nameIdentifier, LASSO_SAML_NAME_IDENTIFIER(federation->local_nameIdentifier)); return ret; } static gint lasso_login_process_response_status_and_assertion(LassoLogin *login) { LassoProvider *idp; LassoSamlpResponse *response; char *status_value; LassoSamlSubjectStatementAbstract *sssa = NULL; LassoSamlSubjectStatementAbstract *sas = NULL; int rc = 0; g_return_val_if_fail(LASSO_IS_LOGIN(login), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); response = LASSO_SAMLP_RESPONSE(LASSO_PROFILE(login)->response); if (response->Status == NULL || ! LASSO_IS_SAMLP_STATUS(response->Status) || response->Status->StatusCode == NULL || response->Status->StatusCode->Value == NULL) { return LASSO_PROFILE_ERROR_MISSING_STATUS_CODE; } status_value = response->Status->StatusCode->Value; if (status_value && strcmp(status_value, LASSO_SAML_STATUS_CODE_SUCCESS) != 0) { if (strcmp(status_value, LASSO_SAML_STATUS_CODE_REQUEST_DENIED) == 0) return LASSO_LOGIN_ERROR_REQUEST_DENIED; if (strcmp(status_value, LASSO_SAML_STATUS_CODE_RESPONDER) == 0) { /* samlp:Responder */ if (response->Status->StatusCode->StatusCode && response->Status->StatusCode->StatusCode->Value) { status_value = response->Status->StatusCode->StatusCode->Value; if (strcmp(status_value, LASSO_LIB_STATUS_CODE_FEDERATION_DOES_NOT_EXIST) == 0) { return LASSO_LOGIN_ERROR_FEDERATION_NOT_FOUND; } if (strcmp(status_value, LASSO_LIB_STATUS_CODE_UNKNOWN_PRINCIPAL) == 0) { return LASSO_LOGIN_ERROR_UNKNOWN_PRINCIPAL; } } } return LASSO_LOGIN_ERROR_STATUS_NOT_SUCCESS; } if (response->Assertion) { LassoProfile *profile = LASSO_PROFILE(login); LassoSamlAssertion *assertion = response->Assertion->data; LassoLibAssertion *lib_assertion = NULL; if (LASSO_IS_LIB_ASSERTION(assertion)) { lib_assertion = LASSO_LIB_ASSERTION(assertion); } idp = lasso_server_get_provider(profile->server, profile->remote_providerID); if (idp == NULL) { return LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND; } /* Validate AuthnRequest RequestID and InResponseTo */ { char *previous_reqid = login->private_data->request_id; if (previous_reqid) { if (lib_assertion == NULL || lib_assertion->InResponseTo == NULL || strcmp(lib_assertion->InResponseTo, previous_reqid) != 0) { return critical_error(LASSO_LOGIN_ERROR_ASSERTION_DOES_NOT_MATCH_REQUEST_ID); } } } /* If the status of the signature verification process is not 0, we try to verify on * the assertion */ if (profile->signature_status != 0) { xmlNode *assertion_xmlnode; gchar *assertion_issuer; assertion_xmlnode = lasso_node_get_original_xmlnode(LASSO_NODE(assertion)); assertion_issuer = (gchar*)xmlGetProp(assertion_xmlnode, (xmlChar*)"Issuer"); goto_cleanup_if_fail_with_rc(assertion_issuer, LASSO_PROFILE_ERROR_MISSING_ISSUER); goto_cleanup_if_fail_with_rc(strcmp(assertion_issuer, profile->remote_providerID) == 0, LASSO_PROFILE_ERROR_INVALID_ISSUER); if (assertion_xmlnode) { profile->signature_status = lasso_provider_verify_saml_signature(idp, assertion_xmlnode, NULL); goto_cleanup_if_fail_with_rc(profile->signature_status == 0, profile->signature_status); } } lasso_release_gobject(profile->nameIdentifier); /* Retrieve the name identifier from one of the statements */ if (assertion->AuthenticationStatement) { sssa = LASSO_SAML_SUBJECT_STATEMENT_ABSTRACT( assertion->AuthenticationStatement); if (sssa->Subject && sssa->Subject->NameIdentifier) { lasso_assign_gobject(profile->nameIdentifier, LASSO_NODE(sssa->Subject->NameIdentifier)); } } if (profile->nameIdentifier == NULL && assertion->AttributeStatement) { sas = LASSO_SAML_SUBJECT_STATEMENT_ABSTRACT(assertion->AttributeStatement); if (sas->Subject && sas->Subject->NameIdentifier) { lasso_assign_gobject(profile->nameIdentifier, LASSO_NODE(sas->Subject->NameIdentifier)); } } if (profile->nameIdentifier == NULL) { return LASSO_PROFILE_ERROR_NAME_IDENTIFIER_NOT_FOUND; } } cleanup: return rc; } /*****************************************************************************/ /* public methods */ /*****************************************************************************/ /** * lasso_login_accept_sso: * @login: a #LassoLogin * * Gets the assertion of the response and adds it to the #LassoSession object. * Builds a federation with the 2 name identifiers of the assertion * and adds it into the identity. * If the session or the identity are NULL, they are created. * * Return value: 0 on success; or * * * #LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ if login is not a #LassoLogin object, * * * #LASSO_PROFILE_ERROR_MISSING_RESPONSE if no response is present in the login profile object; * usually because no call to lasso_login_process_authn_response_msg was done; * * * #LASSO_PROFILE_ERROR_MISSING_ASSERTION if the response does not contain an assertion, * * * #LASSO_PROFILE_ERROR_NAME_IDENTIFIER_NOT_FOUND if the assertion does not contain a NameID element, * * * #LASSO_PROFILE_ERROR_MISSING_NAME_IDENTIFIER same as * #LASSO_PROFILE_ERROR_NAME_IDENTIFIER_NOT_FOUND, * * * #LASSO_LOGIN_ERROR_ASSERTION_REPLAY if the assertion has already been used. * * **/ gint lasso_login_accept_sso(LassoLogin *login) { LassoProfile *profile; LassoSamlAssertion *assertion; LassoSamlNameIdentifier *ni, *idp_ni = NULL; LassoFederation *federation; LassoSamlSubjectStatementAbstract *authentication_statement; g_return_val_if_fail(LASSO_IS_LOGIN(login), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); profile = LASSO_PROFILE(login); if (profile->identity == NULL) profile->identity = lasso_identity_new(); if (profile->session == NULL) profile->session = lasso_session_new(); if (profile->response == NULL) return LASSO_PROFILE_ERROR_MISSING_RESPONSE; IF_SAML2(profile) { return lasso_saml20_login_accept_sso(login); } if (LASSO_SAMLP_RESPONSE(profile->response)->Assertion == NULL) return LASSO_PROFILE_ERROR_MISSING_ASSERTION; assertion = LASSO_SAMLP_RESPONSE(profile->response)->Assertion->data; if (assertion == NULL) return LASSO_PROFILE_ERROR_MISSING_ASSERTION; lasso_session_add_assertion(profile->session, profile->remote_providerID, LASSO_NODE(assertion)); authentication_statement = LASSO_SAML_SUBJECT_STATEMENT_ABSTRACT( assertion->AuthenticationStatement); if (authentication_statement->Subject == NULL) return LASSO_PROFILE_ERROR_NAME_IDENTIFIER_NOT_FOUND; ni = authentication_statement->Subject->NameIdentifier; if (ni == NULL) return LASSO_PROFILE_ERROR_NAME_IDENTIFIER_NOT_FOUND; if (LASSO_IS_LIB_SUBJECT(authentication_statement->Subject)) { idp_ni = LASSO_LIB_SUBJECT( authentication_statement->Subject)->IDPProvidedNameIdentifier; } /* create federation, only if nameidentifier format is Federated */ if (ni->Format && strcmp(ni->Format, LASSO_LIB_NAME_IDENTIFIER_FORMAT_FEDERATED) == 0) { federation = lasso_federation_new(LASSO_PROFILE(login)->remote_providerID); if (ni != NULL && idp_ni != NULL) { federation->local_nameIdentifier = LASSO_NODE(g_object_ref(ni)); federation->remote_nameIdentifier = LASSO_NODE(g_object_ref(idp_ni)); } else { federation->remote_nameIdentifier = LASSO_NODE(g_object_ref(ni)); } /* add federation in identity */ lasso_identity_add_federation(LASSO_PROFILE(login)->identity, federation); } return 0; } static void lasso_login_build_assertion_artifact(LassoLogin *login) { xmlSecByte samlArt[42], *b64_samlArt; char *identityProviderSuccinctID; identityProviderSuccinctID = lasso_sha1( LASSO_PROVIDER(LASSO_PROFILE(login)->server)->ProviderID); /* Artifact Format is described in "Binding Profiles", 3.2.2.2. */ memcpy(samlArt, "\000\003", 2); /* type code */ memcpy(samlArt+2, identityProviderSuccinctID, 20); lasso_build_random_sequence((char*)samlArt+22, 20); xmlFree(identityProviderSuccinctID); b64_samlArt = xmlSecBase64Encode(samlArt, 42, 0); lasso_assign_string(login->assertionArtifact, (char*)b64_samlArt); lasso_assign_string(login->parent.private_data->artifact, (char*)b64_samlArt); lasso_release_xml_string(b64_samlArt); } /** * lasso_login_build_artifact_msg: * @login: a #LassoLogin * @http_method: the HTTP method to send the artifact (REDIRECT or POST) * * Builds a SAML artifact. Depending of the HTTP method, the data for the sending of * the artifact are stored in @msg_url (REDIRECT) or @msg_url, @msg_body and * @msg_relayState (POST). * * Return value: 0 on success; or * * * LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ if login is not a #LassoLogin object, * * * LASSO_PROFILE_ERROR_MISSING_REMOTE_PROVIDERID if no remote provider ID was setup in the login * profile object, it's usually done by lasso_login_process_authn_request_msg, * * * LASSO_PROFILE_ERROR_INVALID_HTTP_METHOD if the HTTP method is neither LASSO_HTTP_METHOD_REDIRECT * or LASSO_HTTP_METHOD_POST (ID-FF 1.2 case) or neither LASSO_HTTP_METHOD_ARTIFACT_GET or * LASSO_HTTP_METHOD_ARTIFACT_POST (SAML 2.0 case) for SAML 2.0), * * * LASSO_PROFILE_ERROR_INVALID_PROTOCOLPROFILE if the current protocolProfile is not * * * LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_ART (only for ID-FF 1.2), * * * LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND if the remote provider is not known to our server object * which impeach us to find a service endpoint, * * * LASSO_PROFILE_ERROR_MISSING_RESPONSE if the response object is missing, * * * LASSO_PROFILE_ERROR_MISSING_STATUS_CODE if the response object is missing a status code, * * * **/ gint lasso_login_build_artifact_msg(LassoLogin *login, LassoHttpMethod http_method) { LassoProvider *remote_provider = NULL; LassoProfile *profile = NULL; gchar *url = NULL; xmlChar *b64_samlArt = NULL; xmlChar *relayState = NULL; gint rc = 0; g_return_val_if_fail(LASSO_IS_LOGIN(login), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); profile = LASSO_PROFILE(login); lasso_profile_clean_msg_info(profile); if (profile->remote_providerID == NULL) { /* this means lasso_login_init_request was not called before */ goto_cleanup_with_rc(LASSO_PROFILE_ERROR_MISSING_REMOTE_PROVIDERID); } IF_SAML2(profile) { return lasso_saml20_login_build_artifact_msg(login, http_method); } if (http_method != LASSO_HTTP_METHOD_REDIRECT && http_method != LASSO_HTTP_METHOD_POST) { goto_cleanup_with_rc(LASSO_PROFILE_ERROR_INVALID_HTTP_METHOD); } /* ProtocolProfile must be BrwsArt */ if (login->protocolProfile != LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_ART) { goto_cleanup_with_rc(LASSO_PROFILE_ERROR_INVALID_PROTOCOLPROFILE); } /* build artifact infos */ remote_provider = lasso_server_get_provider(profile->server, profile->remote_providerID); if (LASSO_IS_PROVIDER(remote_provider) == FALSE) goto_cleanup_with_rc(LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND); url = lasso_provider_get_assertion_consumer_service_url(remote_provider, LASSO_LIB_AUTHN_REQUEST(profile->request)->AssertionConsumerServiceID); if (url == NULL) { /* from draft-liberty-idff-protocols-schema-1.2-errata-v2.0.pdf * paragraph starting line 768, * * If the element is provided, * then the identity provider MUST search for the value among * the id attributes in the * elements in the provider's metadata to determine the URL * to use. If no match can be found, then the provider MUST * return an error with a second-level of * lib:InvalidAssertionConsumerServiceIndex to the default URL */ lasso_profile_set_response_status(profile, LASSO_LIB_STATUS_CODE_INVALID_ASSERTION_CONSUMER_SERVICE_INDEX); url = lasso_provider_get_assertion_consumer_service_url( remote_provider, NULL); } /* it may have been created in lasso_login_build_assertion */ if (login->assertionArtifact == NULL) lasso_login_build_assertion_artifact(login); if (login->assertion) { LassoSamlAssertion *assertion = login->assertion; LassoSamlSubjectStatementAbstract *ss; ss = LASSO_SAML_SUBJECT_STATEMENT_ABSTRACT(assertion->AuthenticationStatement); /* Subject and SubjectConfirmation should never be NULL * because they're built by Lasso */ if (ss->Subject != NULL && ss->Subject->SubjectConfirmation != NULL) { if (assertion->MajorVersion == 1 && assertion->MinorVersion == 0) { lasso_list_add_string(ss->Subject->SubjectConfirmation->ConfirmationMethod, LASSO_SAML_CONFIRMATION_METHOD_ARTIFACT01); } else { lasso_list_add_string(ss->Subject->SubjectConfirmation->ConfirmationMethod, LASSO_SAML_CONFIRMATION_METHOD_ARTIFACT); } } } b64_samlArt = xmlStrdup((xmlChar*)login->assertionArtifact); relayState = lasso_xmlURIEscapeStr( (xmlChar*)LASSO_LIB_AUTHN_REQUEST(profile->request)->RelayState, NULL); if (http_method == LASSO_HTTP_METHOD_REDIRECT) { xmlChar *escaped_artifact = lasso_xmlURIEscapeStr(b64_samlArt, NULL); gchar *query = NULL; if (relayState == NULL) { query = g_strdup_printf("SAMLart=%s", escaped_artifact); } else { query = g_strdup_printf("SAMLart=%s&RelayState=%s", escaped_artifact, relayState); } lasso_assign_new_string(profile->msg_url, lasso_concat_url_query(url, query)); lasso_release_string(query); lasso_release_xml_string(escaped_artifact); } if (http_method == LASSO_HTTP_METHOD_POST) { lasso_assign_string(profile->msg_url, url); lasso_assign_string(profile->msg_body, (char*)b64_samlArt); if (relayState != NULL) { lasso_assign_string(profile->msg_relayState, (char*)relayState); } } if (strcmp(LASSO_SAMLP_RESPONSE(profile->response)->Status->StatusCode->Value, LASSO_SAML_STATUS_CODE_SUCCESS) != 0) { if (profile->session == NULL) profile->session = lasso_session_new(); lasso_session_add_status(profile->session, profile->remote_providerID, LASSO_NODE(g_object_ref(LASSO_SAMLP_RESPONSE(profile->response)->Status))); } else { lasso_session_remove_status(profile->session, profile->remote_providerID); } /* store the response as the artifact message */ lasso_check_good_rc(lasso_server_set_signature_for_provider_by_name( profile->server, profile->remote_providerID, profile->response)); /* comply with the new way of storing artifacts */ lasso_assign_string(profile->private_data->artifact, login->assertionArtifact); /* Artifact profile for ID-FF 1.2 is special, this is not the full message which is relayed * but only its assertion content, the Response container is changed from a * lib:AuthnResponse to a samlp:Response. */ lasso_assign_new_string(profile->private_data->artifact_message, lasso_node_export_to_xml((LassoNode*)login->assertion)); cleanup: lasso_release_string(url); lasso_release_xml_string(b64_samlArt); lasso_release_xml_string(relayState); return rc; } /** * lasso_login_build_authn_request_msg: * @login: a #LassoLogin * * Converts profile authentication request (@request member) into a Liberty message, either an URL * in HTTP-Redirect profile or an URL and a field value in Browser-POST (form) profile. * * The URL is set into the @msg_url member and the eventual field value (LAREQ) is set into the * @msg_body member. * * Return value: 0 on success; or * * * #LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ if login is not a #LassoLogin object, * * * #LASSO_PROFILE_ERROR_MISSING_REMOTE_PROVIDERID if not remote provider ID was setup&160;- it usually * means that lasso_login_init_request() was not called before, * * * #LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND if the remote provider ID is not registered in the server * object, * * * #LASSO_PROFILE_ERROR_UNSUPPORTED_PROFILE if the SSO profile is not supported by the targeted * provider, * * * #LASSO_PROFILE_ERROR_BUILDING_QUERY_FAILED if the building of the query part of the redirect URL * or of the body of the POST content failed&160;- it only happens with the #LASSO_HTTP_METHOD_REDIRECT, * #LASSO_HTTP_METHOD_POST, #LASSO_HTTP_METHOD_ARTIFACT_GET and * #LASSO_HTTP_METHOD_ARTIFACT_POST bindings&160;-, * * * #LASSO_PROFILE_ERROR_UNKNOWN_PROFILE_URL if the metadata of the remote provider does not contain * an url for the SSO profile, * * * #LASSO_PROFILE_ERROR_INVALID_REQUEST if the request object is not of the needed type, is usually * means that lasso_login_init_request() was not called before, * * * #LASSO_PROFILE_MISSING_REQUEST if the request object is missing, * * * #LASSO_PROFILE_ERROR_INVALID_HTTP_METHOD if the current setted @http_method on the #LassoLogin * object is invalid. * * **/ lasso_error_t lasso_login_build_authn_request_msg(LassoLogin *login) { LassoProvider *provider, *remote_provider; LassoProfile *profile; char *md_authnRequestsSigned, *url, *query = NULL, *lareq, *protocolProfile; LassoProviderRole role, remote_role; gboolean must_sign; gint rc = 0; g_return_val_if_fail(LASSO_IS_LOGIN(login), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); profile = LASSO_PROFILE(login); lasso_profile_clean_msg_info(profile); /* With PAOS ECP there is no remote provider, don't check for it, go straight to saml2.0 */ if (login->http_method == LASSO_HTTP_METHOD_PAOS) { return lasso_saml20_login_build_authn_request_msg(login); } if (profile->remote_providerID == NULL) { /* this means lasso_login_init_request was not called before */ return critical_error(LASSO_PROFILE_ERROR_MISSING_REMOTE_PROVIDERID); } provider = LASSO_PROVIDER(profile->server); remote_provider = lasso_server_get_provider(profile->server, profile->remote_providerID); if (LASSO_IS_PROVIDER(remote_provider) == FALSE) { return critical_error(LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND); } IF_SAML2(profile) { return lasso_saml20_login_build_authn_request_msg(login); } protocolProfile = LASSO_LIB_AUTHN_REQUEST(profile->request)->ProtocolProfile; if (protocolProfile == NULL) protocolProfile = LASSO_LIB_PROTOCOL_PROFILE_BRWS_ART; role = provider->role; provider->role = LASSO_PROVIDER_ROLE_SP; /* we act as an SP for sure here */ remote_role = remote_provider->role; remote_provider->role = LASSO_PROVIDER_ROLE_IDP; /* and remote is IdP */ if (lasso_provider_has_protocol_profile(remote_provider, LASSO_MD_PROTOCOL_TYPE_SINGLE_SIGN_ON, protocolProfile) == FALSE) { provider->role = role; remote_provider->role = remote_role; return LASSO_PROFILE_ERROR_UNSUPPORTED_PROFILE; } /* check if authnRequest must be signed */ md_authnRequestsSigned = lasso_provider_get_metadata_one(provider, "AuthnRequestsSigned"); must_sign = (md_authnRequestsSigned && strcmp(md_authnRequestsSigned, "true") == 0); lasso_release_string(md_authnRequestsSigned); /* restore original roles */ provider->role = role; remote_provider->role = remote_role; if (login->http_method == LASSO_HTTP_METHOD_REDIRECT) { /* REDIRECT -> query */ if (must_sign) { lasso_check_good_rc(lasso_server_export_to_query_for_provider_by_name(profile->server, profile->remote_providerID, profile->request, &query)); } else { query = lasso_node_build_query(LASSO_NODE(profile->request)); } if (query == NULL) { return critical_error(LASSO_PROFILE_ERROR_BUILDING_QUERY_FAILED); } /* get SingleSignOnServiceURL metadata */ url = lasso_provider_get_metadata_one(remote_provider, "SingleSignOnServiceURL"); if (url == NULL) { return critical_error(LASSO_PROFILE_ERROR_UNKNOWN_PROFILE_URL); } lasso_assign_new_string(profile->msg_url, lasso_concat_url_query(url, query)); lasso_release_string(profile->msg_body); lasso_release_string(query); lasso_release_string(url); } if (login->http_method == LASSO_HTTP_METHOD_POST) { if (must_sign) { lasso_server_set_signature_for_provider_by_name(profile->server, profile->remote_providerID, profile->request); } lareq = lasso_node_export_to_base64(profile->request); if (lareq == NULL) { return critical_error(LASSO_PROFILE_ERROR_BUILDING_QUERY_FAILED); } lasso_assign_new_string(profile->msg_url, lasso_provider_get_metadata_one( remote_provider, "SingleSignOnServiceURL")); lasso_assign_new_string(profile->msg_body, lareq); } cleanup: return rc; } /** * lasso_login_build_authn_response_msg: * @login: a #LassoLogin * * Converts profile authentication response (@response member) into a Liberty * message. * * The URL is set into the @msg_url member and the field value (LARES) is set * into the @msg_body member. * * Return value: 0 on success; or * * * LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ if login is not a #LassoLogin object, * * * LASSO_PROFILE_ERROR_INVALID_PROTOCOLPROFILE if the current protocol profile is not * * * LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_POST or LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_LECP, * * * LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND if the remote provider ID is not registered in the server * object, * * * LASSO_PROFILE_ERROR_UNKNOWN_PROFILE_URL if the metadata of the remote provider does not contain * an URL for the assertion consuming service, * * * LASSO_PROFILE_ERROR_MISSING_SERVER the server object is needed to sign a message and it is * missing, * * * LASSO_DS_ERROR_PRIVATE_KEY_LOAD_FAILED the private key for signing could not be found, * * * LASSO_PROFILE_ERROR_MISSING_RESPONSE if the response object is missing, * * * LASSO_PROFILE_ERROR_UNSUPPORTED_PROFILE if the SSO profile is not supported by the targeted * provider, * * * LASSO_PROFILE_BUILDING_QUERY_FAILED if using #LASSO_HTTP_METHOD_REDIRECT building of the redirect * URL failed, * * * LASSO_PROFILE_BUILDING_MSG_FAILED if using #LASSO_HTTP_METHOD_POST, #LASSO_HTTP_METHOD_SOAP or * #LASSO_HTTP_METHOD_PAOS and building the @msg_body failed. * * * **/ gint lasso_login_build_authn_response_msg(LassoLogin *login) { LassoProvider *remote_provider = NULL; LassoProfile *profile = NULL; lasso_error_t rc = 0; g_return_val_if_fail(LASSO_IS_LOGIN(login), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); profile = LASSO_PROFILE(login); lasso_profile_clean_msg_info(profile); IF_SAML2(profile) { return lasso_saml20_login_build_authn_response_msg(login); } /* ProtocolProfile must be BrwsPost */ if (login->protocolProfile != LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_POST && login->protocolProfile != LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_LECP) { return critical_error(LASSO_PROFILE_ERROR_INVALID_PROTOCOLPROFILE); } if (login->assertion) { LassoSamlAssertion *assertion = login->assertion; LassoSamlSubjectStatementAbstract *ss; ss = LASSO_SAML_SUBJECT_STATEMENT_ABSTRACT(assertion->AuthenticationStatement); if (ss->Subject && ss->Subject->SubjectConfirmation) { lasso_list_add_string(ss->Subject->SubjectConfirmation->ConfirmationMethod, LASSO_SAML_CONFIRMATION_METHOD_BEARER); } } /* Countermeasure: The issuer should sign messages. * (binding and profiles (1.2errata2, page 65) */ lasso_check_good_rc(lasso_server_set_signature_for_provider_by_name( profile->server, profile->remote_providerID, profile->response)); /* build an lib:AuthnResponse base64 encoded */ lasso_assign_new_string(profile->msg_body, lasso_node_export_to_base64(LASSO_NODE(profile->response))); remote_provider = lasso_server_get_provider(profile->server, profile->remote_providerID); if (LASSO_IS_PROVIDER(remote_provider) == FALSE) return critical_error(LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND); lasso_assign_new_string(profile->msg_url, lasso_provider_get_assertion_consumer_service_url(remote_provider, LASSO_LIB_AUTHN_REQUEST(profile->request)->AssertionConsumerServiceID)); if (profile->msg_url == NULL) { return LASSO_PROFILE_ERROR_UNKNOWN_PROFILE_URL; } cleanup: return rc; } /** * lasso_login_build_request_msg: * @login: a #LassoLogin * * Produce a SOAP Artifact Resolve message. It must follows a call to * lasso_login_init_request() on the artifact message. * Converts artifact request into a Liberty SOAP message. * * The URL is set into the @msg_url member and the SOAP message is set into the * @msg_body member. You should POST the @msg_body to the @msg_url afterward. * * Return value: 0 on success; or * LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ if login is not a #LassoLogin object, * LASSO_PROFILE_ERROR_MISSING_REMOTE_PROVIDERID if not remote provider ID was setup -- it usually * means that lasso_login_init_request was not called before, * LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND if the remote provider ID is not registered in the server * object. * **/ gint lasso_login_build_request_msg(LassoLogin *login) { LassoProvider *remote_provider; LassoProfile *profile; lasso_error_t rc = 0; g_return_val_if_fail(LASSO_IS_LOGIN(login), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); profile = LASSO_PROFILE(login); lasso_profile_clean_msg_info(profile); IF_SAML2(profile) { return lasso_saml20_login_build_request_msg(login); } if (profile->remote_providerID == NULL) { /* this means lasso_login_init_request was not called before */ return critical_error(LASSO_PROFILE_ERROR_MISSING_REMOTE_PROVIDERID); } lasso_check_good_rc(lasso_server_set_signature_for_provider_by_name( profile->server, profile->remote_providerID, profile->request)); lasso_assign_new_string(profile->msg_body, lasso_node_export_to_soap(profile->request)); remote_provider = lasso_server_get_provider(profile->server, profile->remote_providerID); if (LASSO_IS_PROVIDER(remote_provider) == FALSE) { return critical_error(LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND); } lasso_assign_new_string(profile->msg_url, lasso_provider_get_metadata_one(remote_provider, "SoapEndpoint")); cleanup: return rc; } /** * lasso_login_build_response_msg: * @login: a #LassoLogin * @remote_providerID: service provider ID * * Converts profile assertion response (@response member) into a Liberty SOAP * messageresponse message. * * The URL is set into the @msg_url member and the SOAP message is set into the * @msg_body member. * * Return value: 0 on success; or a negative value otherwise. * LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ if login is not a #LassoLogin object, * LASSO_PROFILE_ERROR_SESSION_NOT_FOUND if no session object was found in the login profile object * -- it should be created by lasso_login_build_assertion() if you did not set it manually before * calling lasso_login_build_assertion(). * **/ gint lasso_login_build_response_msg(LassoLogin *login, gchar *remote_providerID) { LassoProvider *remote_provider = NULL; LassoProfile *profile = NULL; lasso_error_t rc = 0; g_return_val_if_fail(LASSO_IS_LOGIN(login), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); profile = LASSO_PROFILE(login); lasso_profile_clean_msg_info(profile); IF_SAML2(profile) { return lasso_saml20_login_build_response_msg(login); } lasso_assign_new_gobject(profile->response, lasso_samlp_response_new()); lasso_assign_string(LASSO_SAMLP_RESPONSE_ABSTRACT(profile->response)->InResponseTo, LASSO_SAMLP_REQUEST_ABSTRACT(profile->request)->RequestID); if (LASSO_SAMLP_REQUEST_ABSTRACT(profile->request)->MajorVersion == 1 && LASSO_SAMLP_REQUEST_ABSTRACT(profile->request)->MinorVersion == 0) { /* this is a SAML 1.0 request, must create SAML 1.0 response */ LASSO_SAMLP_RESPONSE_ABSTRACT(profile->response)->MinorVersion = 0; } if (remote_providerID != NULL) { lasso_assign_string(profile->remote_providerID, remote_providerID); remote_provider = lasso_server_get_provider(profile->server, profile->remote_providerID); rc = lasso_provider_verify_signature(remote_provider, login->private_data->soap_request_msg, "RequestID", LASSO_MESSAGE_FORMAT_SOAP); lasso_release_string(login->private_data->soap_request_msg); /* lasso_profile_set_session_from_dump has not been called */ if (profile->session == NULL) { rc = LASSO_PROFILE_ERROR_SESSION_NOT_FOUND; } /* change status code into RequestDenied if signature is * invalid or not found or if an error occurs during * verification */ if (rc != 0) { lasso_profile_set_response_status(profile, LASSO_SAML_STATUS_CODE_REQUEST_DENIED); } if (rc == 0) { /* get assertion in session and add it in response */ LassoSamlAssertion *assertion; LassoSamlpStatus *status; status = LASSO_SAMLP_STATUS(lasso_session_get_status( profile->session, remote_providerID)); assertion = LASSO_SAML_ASSERTION( lasso_session_get_assertion(profile->session, profile->remote_providerID)); if (status) { lasso_assign_gobject(LASSO_SAMLP_RESPONSE(profile->response)->Status, status); lasso_session_remove_status(profile->session, remote_providerID); } else if (assertion) { lasso_list_add_gobject(LASSO_SAMLP_RESPONSE(profile->response)->Assertion, assertion); lasso_profile_set_response_status(profile, LASSO_SAML_STATUS_CODE_SUCCESS); lasso_session_remove_status(profile->session, remote_providerID); } else if (profile->private_data->artifact_message) { xmlDoc *doc; char *artifact_message = profile->private_data->artifact_message; doc = lasso_xml_parse_memory(artifact_message, strlen(artifact_message)); lasso_profile_set_response_status(profile, LASSO_SAML_STATUS_CODE_SUCCESS); lasso_list_add_new_gobject(((LassoSamlpResponse*)profile->response)->Assertion, lasso_misc_text_node_new_with_xml_node(xmlDocGetRootElement(doc))); lasso_release_doc(doc); } } } else { lasso_profile_set_response_status(profile, LASSO_SAML_STATUS_CODE_REQUEST_DENIED); } lasso_check_good_rc(lasso_server_set_signature_for_provider_by_name( profile->server, profile->remote_providerID, profile->response)); lasso_assign_new_string(profile->msg_body, lasso_node_export_to_soap(profile->response)); cleanup: return rc; } /** * lasso_login_destroy: * @login: a #LassoLogin * * Destroys a #LassoLogin object. * * @Deprecated: Since #2.2.1, use g_object_unref() instead. **/ void lasso_login_destroy(LassoLogin *login) { lasso_release_gobject(login); } /** * lasso_login_init_authn_request: * @login: a #LassoLogin * @remote_providerID:(allow-none): the providerID of the identity provider (may be NULL) * @http_method:(default LASSO_HTTP_METHOD_REDIRECT): HTTP method to use for request transmission * * Initializes a new AuthnRequest from current service provider to remote * identity provider specified in @remote_providerID (if NULL the first known * identity provider is used). * * For ID-FF 1.2 the default NameIDPolicy in an AuthnRequest is None, which imply that a * federation must already exist on the IdP side. * * For SAML 2.0 the default NameIDPolicy is the first listed in the metadatas of the current * provider, or if none is specified, Transient, which ask the IdP to give a one-time * federation * * Return value: 0 on success; or * * LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ if login is not a #LassoLogin object, * LASSO_PROFILE_ERROR_MISSING_REMOTE_PROVIDERID if @remote_providerID is NULL and no default remote * provider could be found from the server object -- usually the first one in the order of adding to * the server object --, * LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND if the @remote_providerID is not known to our server object. * LASSO_PROFILE_ERROR_INVALID_HTTP_METHOD if the HTTP method is neither LASSO_HTTP_METHOD_REDIRECT * or LASSO_HTTP_METHOD_POST, * LASSO_PROFILE_ERROR_BUILDING_REQUEST_FAILED if creation of the request object failed. * * **/ gint lasso_login_init_authn_request(LassoLogin *login, const gchar *remote_providerID, LassoHttpMethod http_method) { LassoProfile *profile; LassoProvider *remote_provider = NULL; LassoServer *server = NULL; LassoSamlpRequestAbstract *request; lasso_error_t rc = 0; g_return_val_if_fail(LASSO_IS_LOGIN(login), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); profile = LASSO_PROFILE(login); lasso_extract_node_or_fail(server, profile->server, SERVER, LASSO_PROFILE_ERROR_MISSING_SERVER); /* clean state */ lasso_release_string (profile->remote_providerID); lasso_release_gobject (profile->request); server->parent.role = LASSO_PROVIDER_ROLE_SP; /* With PAOS ECP there is no remote provider, don't check for it, go straight to saml2.0 */ if (http_method == LASSO_HTTP_METHOD_PAOS) { return lasso_saml20_login_init_authn_request(login, http_method); } if (remote_providerID != NULL) { lasso_assign_string(profile->remote_providerID, remote_providerID); } else { lasso_assign_new_string(profile->remote_providerID, lasso_server_get_first_providerID_by_role(profile->server, LASSO_PROVIDER_ROLE_IDP)); if (profile->remote_providerID == NULL) { return critical_error(LASSO_PROFILE_ERROR_MISSING_REMOTE_PROVIDERID); } } remote_provider = lasso_server_get_provider(profile->server, profile->remote_providerID); if (LASSO_IS_PROVIDER(remote_provider) == FALSE) return critical_error(LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND); remote_provider->role = LASSO_PROVIDER_ROLE_IDP; IF_SAML2(profile) { return lasso_saml20_login_init_authn_request(login, http_method); } if (http_method != LASSO_HTTP_METHOD_REDIRECT && http_method != LASSO_HTTP_METHOD_POST) { return critical_error(LASSO_PROFILE_ERROR_INVALID_HTTP_METHOD); } login->http_method = http_method; lasso_assign_new_gobject(profile->request, LASSO_NODE(lasso_lib_authn_request_new())); if (profile->request == NULL) { return critical_error(LASSO_PROFILE_ERROR_BUILDING_REQUEST_FAILED); } request = LASSO_SAMLP_REQUEST_ABSTRACT(profile->request); request->RequestID = lasso_build_unique_id(32); lasso_assign_string(login->private_data->request_id, request->RequestID); request->MajorVersion = LASSO_LIB_MAJOR_VERSION_N; request->MinorVersion = LASSO_LIB_MINOR_VERSION_N; if (remote_provider && lasso_provider_get_protocol_conformance(remote_provider) < LASSO_PROTOCOL_LIBERTY_1_2) { request->MajorVersion = 1; request->MinorVersion = 0; } lasso_assign_new_string(request->IssueInstant, lasso_get_current_time()); lasso_assign_string(LASSO_LIB_AUTHN_REQUEST(profile->request)->ProviderID, LASSO_PROVIDER(profile->server)->ProviderID); lasso_assign_string(LASSO_LIB_AUTHN_REQUEST(profile->request)->RelayState, profile->msg_relayState); cleanup: return rc; } /** * lasso_login_init_request: * @login: a #LassoLogin * @response_msg: the authentication response received * @response_http_method: the method used to receive the authentication * response * * Initializes an artifact request. @response_msg is either the query string * (in redirect mode) or the form LAREQ field (in browser-post mode). * It should only be used if you received an artifact message, @response_msg must be content of the * artifact field for the POST artifact binding of the query string for the REDIRECT artifact * binding. You must set the @response_http_method argument according to the way you received the * artifact message. * * Return value: 0 on success; or * * * * LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ if login is not a #LassoLogin object, * * * * * LASSO_PARAM_ERROR_INVALID_VALUE if @response_msg is NULL, * * * * * LASSO_PROFILE_ERROR_INVALID_HTTP_METHOD if the HTTP method is neither LASSO_HTTP_METHOD_REDIRECT * or LASSO_HTTP_METHOD_POST (in the ID-FF 1.2 case) or neither LASSO_HTTP_METHOD_ARTIFACT_GET or * LASSO_HTTP_METHOD_ARTIFACT_POST (in the SAML 2.0 case), * * * * * LASSO_PROFILE_ERROR_MISSING_ARTIFACT if no artifact field was found in the query string (only * possible for the LASSO_HTTP_METHOD_REDIRECT case), * * * * * LASSO_PROFILE_ERROR_INVALID_ARTIFACT if decoding of the artifact failed -- whether because * the base64 encoding is invalid or because the type code is wrong --, * * * * * LASSO_PROFILE_ERROR_MISSING_REMOTE_PROVIDERID if no provider ID could be found corresponding to * the hash contained in the artifact. * * * * **/ gint lasso_login_init_request(LassoLogin *login, gchar *response_msg, LassoHttpMethod response_http_method) { xmlChar **query_fields; gint ret = 0; int i; char *artifact_b64 = NULL, *provider_succinct_id_b64; char provider_succinct_id[21]; char *artifact = NULL; int artifact_len = 0; LassoSamlpRequestAbstract *request; LassoProfile *profile; g_return_val_if_fail(LASSO_IS_LOGIN(login), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); g_return_val_if_fail(response_msg != NULL, LASSO_PARAM_ERROR_INVALID_VALUE); profile = LASSO_PROFILE(login); IF_SAML2(profile) { return lasso_saml20_login_init_request(login, response_msg, response_http_method); } if (response_http_method != LASSO_HTTP_METHOD_REDIRECT && response_http_method != LASSO_HTTP_METHOD_POST) { return critical_error(LASSO_PROFILE_ERROR_INVALID_HTTP_METHOD); } /* rebuild response (artifact) */ if (response_http_method == LASSO_HTTP_METHOD_REDIRECT) { query_fields = lasso_urlencoded_to_strings(response_msg); for (i=0; query_fields[i]; i++) { if (strncmp((char*)query_fields[i], "SAMLart=", 8) == 0) { lasso_assign_string(artifact_b64, (char*)query_fields[i]+8); } if (strncmp((char*)query_fields[i], "RelayState=", 11) == 0) { lasso_assign_string(profile->msg_relayState, (char*)query_fields[i]+11); } } lasso_release_array_of_xml_strings(query_fields); if (artifact_b64 == NULL) { return LASSO_PROFILE_ERROR_MISSING_ARTIFACT; } } if (response_http_method == LASSO_HTTP_METHOD_POST) { lasso_assign_string(artifact_b64, response_msg); } if (! lasso_base64_decode(artifact_b64, &artifact, &artifact_len)) { return LASSO_PROFILE_ERROR_INVALID_ARTIFACT; } if (artifact_len != 42) { lasso_release_string(artifact_b64); lasso_release_string(artifact); return LASSO_PROFILE_ERROR_INVALID_ARTIFACT; } if (artifact[0] != 0 || artifact[1] != 3) { /* wrong type code */ lasso_release_string(artifact_b64); lasso_release_string(artifact); return LASSO_PROFILE_ERROR_INVALID_ARTIFACT; } memcpy(provider_succinct_id, artifact+2, 20); lasso_release_string(artifact); provider_succinct_id[20] = 0; provider_succinct_id_b64 = (char*)xmlSecBase64Encode((xmlChar*)provider_succinct_id, 20, 0); lasso_assign_new_string(profile->remote_providerID, lasso_server_get_providerID_from_hash( profile->server, provider_succinct_id_b64)); xmlFree(provider_succinct_id_b64); if (profile->remote_providerID == NULL) { return critical_error(LASSO_PROFILE_ERROR_MISSING_REMOTE_PROVIDERID); } request = LASSO_SAMLP_REQUEST_ABSTRACT(lasso_samlp_request_new()); request->RequestID = lasso_build_unique_id(32); request->MajorVersion = LASSO_SAML_MAJOR_VERSION_N; request->MinorVersion = LASSO_SAML_MINOR_VERSION_N; lasso_assign_new_string(request->IssueInstant, lasso_get_current_time()); LASSO_SAMLP_REQUEST(request)->AssertionArtifact = artifact_b64; lasso_assign_new_gobject(profile->request, LASSO_NODE(request)); return ret; } /** * lasso_login_init_idp_initiated_authn_request: * @login: a #LassoLogin. * @remote_providerID: the providerID of the remote service provider (may be * NULL) * * Generates an authentication response without matching authentication * request. * * The choice of NameIDFormat is the same as for lasso_login_init_authn_request() but with the * target @remote_providerID as the current provider * * If @remote_providerID is NULL, the first known provider is used. * * Return value: 0 on success; or a negative value otherwise. Error codes are the same as * lasso_login_init_authn_request(). **/ gint lasso_login_init_idp_initiated_authn_request(LassoLogin *login, const gchar *remote_providerID) { int rc = 0; LassoProfile *profile; profile = LASSO_PROFILE(login); IF_SAML2(profile) { return lasso_saml20_login_init_idp_initiated_authn_request(login, remote_providerID); } rc = lasso_login_init_authn_request(login, remote_providerID, LASSO_HTTP_METHOD_POST); if (rc) return rc; /* no RequestID attribute or it would be used in response assertion */ lasso_release_string(LASSO_SAMLP_REQUEST_ABSTRACT(profile->request)->RequestID); lasso_assign_string(LASSO_LIB_AUTHN_REQUEST(profile->request)->NameIDPolicy, LASSO_LIB_NAMEID_POLICY_TYPE_ANY); return 0; } /** * lasso_login_must_ask_for_consent: * @login: a #LassoLogin * * Evaluates if consent must be asked to the Principal to federate him. * * Return value: %TRUE if consent must be asked **/ gboolean lasso_login_must_ask_for_consent(LassoLogin *login) { LassoProfile *profile = LASSO_PROFILE(login); IF_SAML2(profile) { return lasso_saml20_login_must_ask_for_consent(login); } if (LASSO_LIB_AUTHN_REQUEST(LASSO_PROFILE(login)->request)->IsPassive) { return FALSE; } return lasso_login_must_ask_for_consent_private(login); } /** * lasso_login_must_authenticate: * @login: a #LassoLogin * * Evaluates if user must be authenticated. * * Return value: %TRUE if user must be authenticated **/ gboolean lasso_login_must_authenticate(LassoLogin *login) { LassoLibAuthnRequest *request; LassoProfile *profile; gboolean matched = TRUE; GList *assertions = NULL; g_return_val_if_fail(LASSO_IS_LOGIN(login), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); profile = LASSO_PROFILE(login); IF_SAML2(profile) { return lasso_saml20_login_must_authenticate(login); } request = LASSO_LIB_AUTHN_REQUEST(LASSO_PROFILE(login)->request); if (request == NULL) { return critical_error(LASSO_PROFILE_ERROR_MISSING_REQUEST); } if (request->ForceAuthn == TRUE && request->IsPassive == FALSE) return TRUE; assertions = lasso_session_get_assertions(profile->session, NULL); if (request->RequestAuthnContext) { char *comparison = request->RequestAuthnContext->AuthnContextComparison; char *class_ref; GList *class_refs = request->RequestAuthnContext->AuthnContextClassRef; GList *t1, *t2; int compa = -1; if (comparison == NULL || strcmp(comparison, "exact") == 0) { compa = 0; } else if (strcmp(comparison, "minimum") == 0) { message(G_LOG_LEVEL_CRITICAL, "'minimum' comparison is not implemented"); compa = 1; } else if (strcmp(comparison, "better") == 0) { message(G_LOG_LEVEL_CRITICAL, "'better' comparison is not implemented"); compa = 2; } if (class_refs) { matched = FALSE; } for (t1 = class_refs; t1 && !matched; t1 = g_list_next(t1)) { class_ref = t1->data; for (t2 = assertions; t2 && !matched; t2 = g_list_next(t2)) { LassoSamlAssertion *assertion; LassoSamlAuthenticationStatement *as; char *method; if (LASSO_IS_SAML_ASSERTION(t2->data) == FALSE) { continue; } assertion = t2->data; as = LASSO_SAML_AUTHENTICATION_STATEMENT( assertion->AuthenticationStatement); method = as->AuthenticationMethod; if (strcmp(method, LASSO_SAML_AUTHENTICATION_METHOD_PASSWORD) == 0) { /* mapping between SAML authentication * methods and Liberty authentication * context is not possible (excepted on * that one) */ method = LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PASSWORD; } switch (compa) { case 1: /* minimum */ /* XXX: implement 'minimum' comparison */ case 2: /* better */ /* XXX: implement 'better' comparison */ case 0: /* exact */ if (strcmp(method, class_ref) == 0) { matched = TRUE; } break; default: /* inever reached */ break; } if (matched == TRUE) { break; } } } } else { /* if nothing specific was asked; don't look for any * particular assertions, one is enough */ matched = (profile->session != NULL && \ lasso_session_count_assertions(profile->session) > 0); } lasso_release_list(assertions); if (matched == FALSE && request->IsPassive == FALSE) return TRUE; if (LASSO_PROFILE(login)->identity == NULL && request->IsPassive && login->protocolProfile == LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_POST) { lasso_profile_set_response_status(LASSO_PROFILE(login), LASSO_LIB_STATUS_CODE_NO_PASSIVE); return FALSE; } return FALSE; } /** * lasso_login_process_authn_request_msg: * @login: a #LassoLogin * @authn_request_msg: the authentication request received * * Processes received authentication request, checks it is signed correctly, * checks if requested protocol profile is supported, etc. * * Return value: 0 on success; or * * * * #LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ if login is no a #LassoLogin object, * * * * * #LASSO_PROFILE_ERROR_MISSING_REQUEST if @authn_request_msg is #NULL and no request as actually * been processed or initialized — see lasso_login_init_idp_initiated_authn_request(), * * * * * * #LASSO_PROFILE_ERROR_INVALID_MSG if the content of @authn_request_msg cannot be parsed to as a * valid lib:AuthnRequest messages for any support binding (mainly HTTP-Redirect, HTTP-Post and * SOAP), * * * * * * #LASSO_PROFILE_ERROR_MISSING_ISSUER if the parsed samlp2:AuthnRequest does not have a proper Issuer element, * * * * * * #LASSO_PROFILE_ERROR_INVALID_REQUEST if the parsed message does not validate as a valid * samlp2:AuthnRequest (SAMLv2) i.e. if there is no Issuer, or mutually exclusive attributes are * used (ProtocolBinding and AssertionConsumerServiceIndex), * * * * * * #LASSO_PROFILE_ERROR_INVALID_PROTOCOLPROFILE if the protocolProfile (ID-FFv1.2) or the * protocolBinding (SAMLv2) is unsupported by Lasso, * * * * * * #LASSO_PROFILE_ERROR_UNSUPPORTED_PROFILE if the protocolProfile (ID-FFv1.2) or the protocolBinding * (SAMLv2) for the AssertionConsumer is unsupported by this provider implementation as indicated by * its metadata file, * * * * * * #LASSO_PROFILE_ERROR_UNKNOWN_PROVIDER, or * #LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND if the metadata for the issuer of the request are absent * from the #LassoServer object of this profile, * * * * * * #LASSO_DS_ERROR_SIGNATURE_NOT_FOUND if no signature could be found and signature validation is * forced — by the service provider metadata with the AuthnRequestsSigned attribute * (ID-FFv1.2&SAMLv2), the attribute WantAuthnRequestsSigned in the identity provider metadata file * (SAMLv2) or as advised by the lasso_profile_set_signature_verify_hint() method), * * * * * * #LASSO_DS_ERROR_SIGNATURE_VERIFICATION_FAILED if the signature validation failed on a present * signature, * * * * * #LASSO_DS_ERROR_INVALID_SIGNATURE if the signature was malformed and a signature was present, * * * * **/ gint lasso_login_process_authn_request_msg(LassoLogin *login, const char *authn_request_msg) { LassoProvider *remote_provider; gchar *protocolProfile; gchar *authnRequestSigned; gboolean must_verify_signature = FALSE; gint ret = 0; LassoLibAuthnRequest *request; LassoMessageFormat format; LassoProfile *profile; g_return_val_if_fail(LASSO_IS_LOGIN(login), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); profile = LASSO_PROFILE(login); IF_SAML2(profile) { return lasso_saml20_login_process_authn_request_msg(login, authn_request_msg); } if (authn_request_msg == NULL) { format = 0; if (profile->request == NULL) { return critical_error(LASSO_PROFILE_ERROR_MISSING_REQUEST); } /* LibAuthnRequest already set by lasso_login_init_idp_initiated_authn_request() */ request = LASSO_LIB_AUTHN_REQUEST(profile->request); } else { request = lasso_lib_authn_request_new(); format = lasso_node_init_from_message(LASSO_NODE(request), authn_request_msg); if (format == LASSO_MESSAGE_FORMAT_UNKNOWN || format == LASSO_MESSAGE_FORMAT_ERROR) { return critical_error(LASSO_PROFILE_ERROR_INVALID_MSG); } lasso_assign_new_gobject(profile->request, request); if (! LASSO_IS_LIB_AUTHN_REQUEST(profile->request)) { lasso_release_gobject(profile->request); return LASSO_PROFILE_ERROR_INVALID_MSG; } /* get remote ProviderID */ lasso_assign_string(profile->remote_providerID, LASSO_LIB_AUTHN_REQUEST(profile->request)->ProviderID); /* get RelayState */ lasso_assign_string(profile->msg_relayState, request->RelayState); } /* get ProtocolProfile in lib:AuthnRequest */ protocolProfile = LASSO_LIB_AUTHN_REQUEST(profile->request)->ProtocolProfile; if (protocolProfile == NULL || strcmp(protocolProfile, LASSO_LIB_PROTOCOL_PROFILE_BRWS_ART) == 0) { protocolProfile = LASSO_LIB_PROTOCOL_PROFILE_BRWS_ART; login->protocolProfile = LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_ART; } else if (strcmp(protocolProfile, LASSO_LIB_PROTOCOL_PROFILE_BRWS_POST) == 0) { protocolProfile = LASSO_LIB_PROTOCOL_PROFILE_BRWS_POST; login->protocolProfile = LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_POST; } else if (strcmp(protocolProfile, LASSO_LIB_PROTOCOL_PROFILE_BRWS_LECP) == 0) { protocolProfile = LASSO_LIB_PROTOCOL_PROFILE_BRWS_LECP; login->protocolProfile = LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_LECP; } else { return critical_error(LASSO_PROFILE_ERROR_INVALID_PROTOCOLPROFILE); } /* check if requested single sign on protocol profile is supported */ LASSO_PROVIDER(profile->server)->role = LASSO_PROVIDER_ROLE_IDP; if (lasso_provider_has_protocol_profile( LASSO_PROVIDER(profile->server), LASSO_MD_PROTOCOL_TYPE_SINGLE_SIGN_ON, protocolProfile) == FALSE) { return critical_error(LASSO_PROFILE_ERROR_UNSUPPORTED_PROFILE); } /* Check authnRequest signature. */ if (authn_request_msg != NULL) { LassoProfileSignatureVerifyHint sig_verify_hint; sig_verify_hint = lasso_profile_get_signature_verify_hint(profile); remote_provider = lasso_server_get_provider(profile->server, profile->remote_providerID); if (remote_provider == NULL) { return critical_error(LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND); } /* Is authnRequest signed ? */ must_verify_signature = TRUE; authnRequestSigned = lasso_provider_get_metadata_one( remote_provider, "AuthnRequestsSigned"); if (authnRequestSigned != NULL) { must_verify_signature = strcmp(authnRequestSigned, "true") == 0; lasso_release_string(authnRequestSigned); } if (sig_verify_hint == LASSO_PROFILE_SIGNATURE_VERIFY_HINT_FORCE) { must_verify_signature = TRUE; } if (sig_verify_hint == LASSO_PROFILE_SIGNATURE_VERIFY_HINT_IGNORE) { must_verify_signature = FALSE; } /* reset the signature_status, and if signature validation was not really needed * just choke on the presence of an invalid signature, if no signature just goes on * */ profile->signature_status = 0; if (must_verify_signature) { ret = lasso_provider_verify_signature(remote_provider, authn_request_msg, "RequestID", format); if (profile == LASSO_PROFILE_SIGNATURE_VERIFY_HINT_MAYBE && ret != LASSO_DS_ERROR_SIGNATURE_NOT_FOUND) { profile->signature_status = ret; } } } /* create LibAuthnResponse */ lasso_assign_new_gobject(profile->response, lasso_lib_authn_response_new( LASSO_PROVIDER(profile->server)->ProviderID, LASSO_LIB_AUTHN_REQUEST(profile->request))); if (LASSO_SAMLP_REQUEST_ABSTRACT(profile->request)->MajorVersion == 1 && LASSO_SAMLP_REQUEST_ABSTRACT(profile->request)->MinorVersion < 2) { /* pre-id-ff 1.2, move accordingly */ LASSO_SAMLP_RESPONSE_ABSTRACT(profile->response)->MajorVersion = 1; LASSO_SAMLP_RESPONSE_ABSTRACT(profile->response)->MinorVersion = 0; } return ret; } /** * lasso_login_process_authn_response_msg: * @login: a #LassoLogin * @authn_response_msg: the authentication response received * * Processes received authentication response. * * Return value: 0 on success; or * * #LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ if login is not a #LassoLogin * object, * #LASSO_PARAM_ERROR_INVALID_VALUE if authn_response_msg is NULL, * #LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND, if the issuing * provider of the assertion is not registered in the #LassoServer object, * #LASSO_PROFILE_ERROR_MISSING_ISSUER if the parsed samlp2:AuthnRequest does not * have a proper Issuer element, * #LASSO_PROFILE_ERROR_MISSING_STATUS_CODE if the reponse is missing a * StatusCode element, * #LASSO_PROFILE_STATUS_NOT_SUCCESS_ERROR if the identity provider returned a * failure response, * #LASSO_PROFILE_ERROR_REQUEST_DENIED if the identity provider returned the * specific status code RequestDenied, * #LASSO_PROFILE_ERROR_INVALID_MSG if the message is not a #LassoSamlpResponse * (ID-FF 1.2) or a #LassoSamlp2ResponseMsg (SAML 2.0), * #LASSO_PROFILE_ERROR_UNSUPPORTED_PROFILE, if the received message format does not * correspond to a binding supported by this function, the only supported binding by this function * is HTTP POST, * #LASSO_PROFILE_ERROR_MISSING_SERVER the server object is needed to sign a message * and it is missing, * #LASSO_PROFILE_ERROR_CANNOT_VERIFY_SIGNATURE if the validation of the signature * of the message failed, a specific error code is available in * login->parent.signature_status * #LASSO_LOGIN_ERROR_ASSERTION_DOES_NOT_MATCH_REQUEST_ID if the received response * does not match the saved AuthenticationRequest ID, * #LASSO_PROFILE_ERROR_INVALID_ISSUER if the assertion issuer does not match the * AuthenticationResponse issuer, * #LASSO_PROFILE_ERROR_NAME_IDENTIFIER_NOT_FOUND if not NameID could be found or * decoded, * **/ gint lasso_login_process_authn_response_msg(LassoLogin *login, gchar *authn_response_msg) { LassoMessageFormat format; LassoProvider *remote_provider; LassoProfile *profile; g_return_val_if_fail(LASSO_IS_LOGIN(login), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); g_return_val_if_fail(authn_response_msg != NULL, LASSO_PARAM_ERROR_INVALID_VALUE); profile = LASSO_PROFILE(login); IF_SAML2(profile) { return lasso_saml20_login_process_authn_response_msg(login, authn_response_msg); } /* clean state */ lasso_release_string (profile->remote_providerID); lasso_release_gobject(profile->response); lasso_assign_new_gobject(profile->response, lasso_lib_authn_response_new(NULL, NULL)); format = lasso_node_init_from_message( LASSO_NODE(profile->response), authn_response_msg); if (format == LASSO_MESSAGE_FORMAT_UNKNOWN || format == LASSO_MESSAGE_FORMAT_ERROR) { return critical_error(LASSO_PROFILE_ERROR_INVALID_MSG); } lasso_assign_string(profile->remote_providerID, LASSO_LIB_AUTHN_RESPONSE(profile->response)->ProviderID); if (profile->remote_providerID == NULL) { return critical_error(LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND); } remote_provider = lasso_server_get_provider(profile->server, profile->remote_providerID); if (LASSO_IS_PROVIDER(remote_provider) == FALSE) return critical_error(LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND); lasso_assign_string(profile->msg_relayState, LASSO_LIB_AUTHN_RESPONSE( profile->response)->RelayState); profile->signature_status = lasso_provider_verify_signature( remote_provider, authn_response_msg, "ResponseID", format); if (profile->signature_status) { return profile->signature_status; } return lasso_login_process_response_status_and_assertion(login); } /** * lasso_login_process_request_msg: * @login: a #LassoLogin * @request_msg: the artifact request received * * Processes received artifact request. * * Return value: 0 on success; or a negative value otherwise. **/ gint lasso_login_process_request_msg(LassoLogin *login, gchar *request_msg) { gint ret = 0; LassoProfile *profile = LASSO_PROFILE(login); g_return_val_if_fail(LASSO_IS_LOGIN(login), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); g_return_val_if_fail(request_msg != NULL, LASSO_PARAM_ERROR_INVALID_VALUE); IF_SAML2(profile) { return lasso_saml20_login_process_request_msg(login, request_msg); } /* rebuild samlp:Request with request_msg */ lasso_assign_new_gobject(profile->request, lasso_node_new_from_soap(request_msg)); if (profile->request == NULL) { return critical_error(LASSO_PROFILE_ERROR_INVALID_MSG); } /* get AssertionArtifact */ lasso_assign_string(login->assertionArtifact, LASSO_SAMLP_REQUEST(profile->request)->AssertionArtifact); lasso_assign_string(login->parent.private_data->artifact, login->assertionArtifact); /* Keep a copy of request msg so signature can be verified when we get * the providerId in lasso_login_build_response_msg() */ lasso_assign_string(login->private_data->soap_request_msg, request_msg); return ret; } /** * lasso_login_process_response_msg: * @login: a #LassoLogin * @response_msg: the assertion response received * * Processes received assertion response. * * Return value: 0 on success; or * * #LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ if login is not a #LassoLogin object, * #LASSO_PARAM_ERROR_INVALID_VALUE if response_msg is NULL, * #LASSO_PROFILE_ERROR_INVALID_MSG if the message is not a #LassoSamlpResponse (ID-FF 1.2) or a #LassoSamlp2ResponseMsg (SAML 2.0), * #LASSO_PROFILE_ERROR_RESPONSE_DOES_NOT_MATCH_REQUEST if the response does not refer to the request or if the response refer to an unknown request and strict-checking is activated , * #LASSO_LOGIN_ERROR_REQUEST_DENIED the identity provided * returned a failure status of "RequestDenied" * #LASSO_LOGIN_ERROR_FEDERATION_NOT_FOUND if creation of a new * federation was not allowed and none existed, * #LASSO_LOGIN_ERROR_UNKNOWN_PRINCIPAL if authentication failed * or/and if the user cancelled the authentication, * #LASSO_LOGIN_ERROR_STATUS_NOT_SUCCESS, if the response status * is a failure but we have no more precise error code to report it, you must * look at the second level status in the response, * #LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND, if the issuing * provider of the assertion is unknown, * #LASSO_PROFILE_ERROR_INVALID_ISSUER the issuer of the * assertion received, is not the expected one * #LASSO_PROFILE_ERROR_NAME_IDENTIFIER_NOT_FOUND no statement was fournd, or none statement contains a subject with a name identifier, * #LASSO_PROFILE_ERROR_MISSING_STATUS_CODE if the reponse is * missing a StatusCode element, * #LASSO_PROFILE_ERROR_MISSING_ASSERTION if the message does * not contain any assertion. * **/ gint lasso_login_process_response_msg(LassoLogin *login, gchar *response_msg) { LassoProfile *profile; g_return_val_if_fail(LASSO_IS_LOGIN(login), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); g_return_val_if_fail(response_msg != NULL, LASSO_PARAM_ERROR_INVALID_VALUE); profile = LASSO_PROFILE(login); IF_SAML2(profile) { return lasso_saml20_login_process_response_msg(login, response_msg); } /* rebuild samlp:Response with response_msg */ lasso_assign_new_gobject(profile->response, lasso_node_new_from_soap(response_msg)); if (! LASSO_IS_SAMLP_RESPONSE(profile->response) ) { lasso_release_gobject(profile->response); return critical_error(LASSO_PROFILE_ERROR_INVALID_MSG); } /* Validate RequestID and InResponseTo */ if (profile->request || lasso_flag_strict_checking) { char *request_id = NULL; char *response_to = NULL; if (LASSO_IS_SAMLP_REQUEST(profile->request)) { request_id = LASSO_SAMLP_REQUEST_ABSTRACT(profile->request)->RequestID; } response_to = LASSO_SAMLP_RESPONSE_ABSTRACT(profile->response)->InResponseTo; if ((! request_id && response_to) || /* response to an unknown request, only with strict checking */ (profile->request && ! response_to) || /* not a response to our request, because no ref */ /* not a response to our request because of mismatch */ (request_id && response_to && strcmp(request_id, response_to) != 0)) { return critical_error(LASSO_PROFILE_ERROR_RESPONSE_DOES_NOT_MATCH_REQUEST); } /* else no request and no inResponseTo, IDP initiated response, ok */ } /* In the artifact profile we cannot verify the signature on the message, we must wait the * verification on the assertion, so for the moment the signature verification failed. */ profile->signature_status = LASSO_DS_ERROR_SIGNATURE_VERIFICATION_FAILED; xmlNode *signed_response; signed_response = lasso_node_get_original_xmlnode(LASSO_NODE(profile->response)); if (signed_response && profile->remote_providerID) { LassoProvider *idp; idp = LASSO_PROVIDER(lasso_server_get_provider(profile->server, profile->remote_providerID)); profile->signature_status = lasso_provider_verify_saml_signature(idp, signed_response, NULL); } return lasso_login_process_response_status_and_assertion(login); } /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "AssertionArtifact", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoLogin, assertionArtifact), NULL, NULL, NULL}, { "NameIDPolicy", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoLogin, nameIDPolicy), NULL, NULL, NULL}, { "Assertion", SNIPPET_NODE_IN_CHILD, G_STRUCT_OFFSET(LassoLogin, assertion), NULL, NULL, NULL}, { "RequestID", SNIPPET_CONTENT | SNIPPET_PRIVATE, G_STRUCT_OFFSET(LassoLoginPrivate, request_id), NULL, NULL, NULL}, { "LoginDumpVersion", SNIPPET_ATTRIBUTE, 0, NULL, NULL, NULL}, { "ProtocolProfile", SNIPPET_CONTENT, 0, NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; static xmlNode* get_xmlNode(LassoNode *node, gboolean lasso_dump) { xmlNode *xmlnode; LassoLogin *login = LASSO_LOGIN(node); xmlnode = parent_class->get_xmlNode(node, lasso_dump); xmlSetProp(xmlnode, (xmlChar*)"LoginDumpVersion", (xmlChar*)"2"); if (login->protocolProfile == LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_ART) xmlNewTextChild(xmlnode, NULL, (xmlChar*)"ProtocolProfile", (xmlChar*)"Artifact"); else if (login->protocolProfile == LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_POST) xmlNewTextChild(xmlnode, NULL, (xmlChar*)"ProtocolProfile", (xmlChar*)"POST"); else if (login->protocolProfile == LASSO_LOGIN_PROTOCOL_PROFILE_REDIRECT) xmlNewTextChild(xmlnode, NULL, (xmlChar*)"ProtocolProfile", (xmlChar*)"Redirect"); return xmlnode; } static int init_from_xml(LassoNode *node, xmlNode *xmlnode) { LassoLogin *login = LASSO_LOGIN(node); xmlNode *t; int rc = 0; rc = parent_class->init_from_xml(node, xmlnode); if (rc) return rc; t = xmlnode->children; while (t) { if (t->type != XML_ELEMENT_NODE) { t = t->next; continue; } if (strcmp((char*)t->name, "ProtocolProfile") == 0) { char *s; s = (char*)xmlNodeGetContent(t); if (strcmp(s, "Artifact") == 0) login->protocolProfile = LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_ART; else if (strcmp(s, "POST") == 0) login->protocolProfile = LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_POST; else if (strcmp(s, "Redirect") == 0) login->protocolProfile = LASSO_LOGIN_PROTOCOL_PROFILE_REDIRECT; xmlFree(s); } t = t->next; } return 0; } /*****************************************************************************/ /* overridden parent class methods */ /*****************************************************************************/ static void dispose(GObject *object) { LassoLogin *login = LASSO_LOGIN(object); lasso_release_string(login->private_data->soap_request_msg); lasso_release_gobject(login->private_data->saml2_assertion); lasso_release_string(login->private_data->request_id); G_OBJECT_CLASS(parent_class)->dispose(object); } /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void instance_init(LassoLogin *login, G_GNUC_UNUSED void *unused) { login->private_data = LASSO_LOGIN_GET_PRIVATE(login); login->protocolProfile = 0; login->assertionArtifact = NULL; login->nameIDPolicy = NULL; login->http_method = 0; } static void class_init(LassoLoginClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->get_xmlNode = get_xmlNode; nclass->init_from_xml = init_from_xml; nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "Login"); lasso_node_class_set_ns(nclass, LASSO_LASSO_HREF, LASSO_LASSO_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); g_type_class_add_private(klass, sizeof(LassoLoginPrivate)); G_OBJECT_CLASS(klass)->dispose = dispose; } GType lasso_login_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof(LassoLoginClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoLogin), 0, (GInstanceInitFunc) instance_init, NULL }; this_type = g_type_register_static(LASSO_TYPE_PROFILE, "LassoLogin", &this_info, 0); } return this_type; } /** * lasso_login_new * @server: the #LassoServer * * Creates a new #LassoLogin. * * Return value: a newly created #LassoLogin object; or NULL if an error * occured **/ LassoLogin* lasso_login_new(LassoServer *server) { LassoLogin *login = NULL; g_return_val_if_fail(LASSO_IS_SERVER(server), NULL); login = g_object_new(LASSO_TYPE_LOGIN, NULL); lasso_assign_gobject(LASSO_PROFILE(login)->server, server); return login; } /** * lasso_login_new_from_dump: * @server: the #LassoServer * @dump: XML login dump * * Restores the @dump to a new #LassoLogin. * * Return value: a newly created #LassoLogin; or NULL if an error occured. **/ LassoLogin* lasso_login_new_from_dump(LassoServer *server, const gchar *dump) { LassoLogin *login; login = (LassoLogin*)lasso_node_new_from_dump(dump); if (! LASSO_IS_LOGIN(login)) { lasso_release_gobject(login); } else { lasso_assign_gobject(login->parent.server, server); } return login; } /** * lasso_login_dump: * @login: a #LassoLogin * * Dumps @login content to an XML string. * * Return value:(transfer full): the dump string. It must be freed by the caller. **/ gchar* lasso_login_dump(LassoLogin *login) { return lasso_node_dump(LASSO_NODE(login)); } /** * lasso_login_validate_request_msg: * @login: a #LassoLogin * @authentication_result: whether user has authenticated succesfully * @is_consent_obtained: whether user consent has been obtained * * Initializes a response to the authentication request received. * * Return value: 0 on success; or * * #LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ if login is not a #LassoLogin object, * #LASSO_LOGIN_ERROR_REQUEST_DENIED if @authentication_result if FALSE, * #LASSO_LOGIN_ERROR_INVALID_SIGNATURE if signature validation of the request * failed, * #LASSO_LOGIN_ERROR_UNSIGNED_AUTHN_REQUEST if no signature was present on the * request, * #LASSO_LOGIN_ERROR_FEDERATION_NOT_FOUND if federation policy is * #LASSO_LIB_NAMEID_POLICY_TYPE_NONE and no federation was found in the #LassoIdentity object * (ID-FF 1.2 case) * #LASSO_LOGIN_ERROR_INVALID_NAMEIDPOLICY if request policy is not one of * #LASSO_LIB_NAMEID_POLICY_TYPE_FEDERATED or #LASSO_LIB_NAMEID_POLICY_TYPE_ANY (ID-FF 1.2 case) or if no NameID policy was defined or the AllowCreate request flag is FALSE (SAML 2.0 case), * #LASSO_LOGIN_ERROR_CONSENT_NOT_OBTAINED if @is_consent_obtained is FALSE and * conssent was necessary (for example if the request does not communicate that consent was already * obtained from the user), * #LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND if the requesting provider is unknown, * **/ int lasso_login_validate_request_msg(LassoLogin *login, gboolean authentication_result, gboolean is_consent_obtained) { LassoProfile *profile; gint ret = 0; g_return_val_if_fail(LASSO_IS_LOGIN(login), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); profile = LASSO_PROFILE(login); IF_SAML2(profile) { return lasso_saml20_login_validate_request_msg(login, authentication_result, is_consent_obtained); } /* modify AuthnResponse StatusCode if user authentication is not OK */ if (authentication_result == FALSE) { lasso_profile_set_response_status(profile, LASSO_LIB_STATUS_CODE_UNKNOWN_PRINCIPAL); return LASSO_LOGIN_ERROR_REQUEST_DENIED; } /* if signature is not OK => modify AuthnResponse StatusCode */ if (profile->signature_status == LASSO_DS_ERROR_INVALID_SIGNATURE) { lasso_profile_set_response_status(profile, LASSO_LIB_STATUS_CODE_INVALID_SIGNATURE); return LASSO_LOGIN_ERROR_INVALID_SIGNATURE; } if (profile->signature_status == LASSO_DS_ERROR_SIGNATURE_NOT_FOUND) { /* Unsigned AuthnRequest */ lasso_profile_set_response_status(profile, LASSO_LIB_STATUS_CODE_UNSIGNED_AUTHN_REQUEST); return LASSO_LOGIN_ERROR_UNSIGNED_AUTHN_REQUEST; } if (profile->signature_status == 0 && authentication_result == TRUE) { /* process federation */ ret = lasso_login_process_federation(login, is_consent_obtained); if (ret != 0) return ret; } lasso_profile_set_response_status(profile, LASSO_SAML_STATUS_CODE_SUCCESS); return ret; } int lasso_login_process_paos_response_msg(LassoLogin *login, gchar *msg) { LassoProfile *profile; g_return_val_if_fail(LASSO_IS_LOGIN(login), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); g_return_val_if_fail(msg != NULL, LASSO_PARAM_ERROR_INVALID_VALUE); profile = LASSO_PROFILE(login); IF_SAML2(profile) { return lasso_saml20_login_process_paos_response_msg(login, msg); } return 0; } /** * lasso_login_get_assertion: * @login: a #LassoLogin object * * Return the last build assertion. * * Return value: a #LassoNode representing the build assertion (generally a #LassoSamlAssertion when * using ID-FF 1.2 or a #LassoSaml2Assertion when using SAML 2.0) */ LassoNode* lasso_login_get_assertion(LassoLogin *login) { g_return_val_if_fail (LASSO_IS_LOGIN (login), NULL); if (login->private_data && login->private_data->saml2_assertion) return (LassoNode*)g_object_ref(login->private_data->saml2_assertion); return (LassoNode*)g_object_ref(login->assertion); } lasso-2.8.2/lasso/id-ff/PaxHeaders/name_registration.c0000644000000000000000000000013114364261206017711 xustar0029 mtime=1674666630.73876907 30 atime=1678814222.809396876 30 ctime=1678814320.985953173 lasso-2.8.2/lasso/id-ff/name_registration.c0000644000175000017500000006474014364261206023175 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ /** * SECTION:name_registration * @short_description: Name Registration Profile (ID-FF) * **/ #include "../xml/private.h" #include "name_registration.h" #include "profileprivate.h" #include "providerprivate.h" #include "../utils.h" /*****************************************************************************/ /* public methods */ /*****************************************************************************/ /** * lasso_name_registration_build_request_msg: * @name_registration: a #LassoNameRegistration * * Builds a register name identifier request message. * * It gets the register name identifier protocol profile and: * * * if it is a SOAP method, then it builds the register name identifier * request SOAP message, optionally signs his node, sets @msg_body, * gets the SoapEndpoint url and sets @msg_url. * * * if it is a HTTP-Redirect method, then it builds the register name * identifier request QUERY message (optionally signs the request message), * builds the request url with register name identifier url with register * name identifier service url, sets @msg_url in the register name * identifier object, sets @msg_body to NULL. * * * * Return value: 0 on success; or a negative value otherwise. **/ gint lasso_name_registration_build_request_msg(LassoNameRegistration *name_registration) { LassoProfile *profile; LassoProvider *remote_provider; char *url, *query; g_return_val_if_fail(LASSO_IS_NAME_REGISTRATION(name_registration), LASSO_PARAM_ERROR_INVALID_VALUE); profile = LASSO_PROFILE(name_registration); lasso_profile_clean_msg_info(profile); if (profile->remote_providerID == NULL) { /* this means lasso_logout_init_request was not called before */ return critical_error(LASSO_PROFILE_ERROR_MISSING_REMOTE_PROVIDERID); } remote_provider = lasso_server_get_provider(profile->server, profile->remote_providerID); if (LASSO_IS_PROVIDER(remote_provider) == FALSE) { return critical_error(LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND); } if (profile->http_request_method == LASSO_HTTP_METHOD_SOAP) { profile->msg_url = lasso_provider_get_metadata_one( remote_provider, "SoapEndpoint"); LASSO_SAMLP_REQUEST_ABSTRACT(profile->request)->private_key_file = profile->server->private_key; LASSO_SAMLP_REQUEST_ABSTRACT(profile->request)->certificate_file = profile->server->certificate; profile->msg_body = lasso_node_export_to_soap(profile->request); return 0; } if (profile->http_request_method == LASSO_HTTP_METHOD_REDIRECT) { /* build and optionally sign the query message and build the * register name identifier request url */ url = lasso_provider_get_metadata_one(remote_provider, "RegisterNameIdentifierServiceURL"); if (url == NULL) { return critical_error(LASSO_PROFILE_ERROR_UNKNOWN_PROFILE_URL); } query = lasso_node_export_to_query_with_password(LASSO_NODE(profile->request), profile->server->signature_method, profile->server->private_key, profile->server->private_key_password); if (query == NULL) { lasso_release(url); return critical_error(LASSO_PROFILE_ERROR_BUILDING_QUERY_FAILED); } /* build the msg_url */ profile->msg_url = lasso_concat_url_query(url, query); profile->msg_body = NULL; lasso_release(url); lasso_release(query); return 0; } return critical_error(LASSO_PROFILE_ERROR_INVALID_HTTP_METHOD); } /** * lasso_name_registration_build_response_msg: * @name_registration: a #LassoNameRegistration * * Builds the register name idendifier response message. * * It gets the request message method and: * * * if it is a SOAP method, then it builds the response SOAP message, sets * the msg_body attribute, gets the register name identifier service return * url and sets @msg_url of the object. * * * if it is a HTTP-Redirect method, then it builds the response QUERY * message, builds the response url, sets @msg_url with the response url * and sets the msg_body with NULL * * * * If private key and certificate are set in server object it will also signs * the message (either with X509 if SOAP or with a simple signature for query * strings). * * Return value: 0 on success; or a negative value otherwise. **/ gint lasso_name_registration_build_response_msg(LassoNameRegistration *name_registration) { LassoProfile *profile; LassoProvider *remote_provider; char *url, *query; g_return_val_if_fail(LASSO_IS_NAME_REGISTRATION(name_registration), LASSO_PARAM_ERROR_INVALID_VALUE); profile = LASSO_PROFILE(name_registration); lasso_profile_clean_msg_info(profile); if (profile->remote_providerID == NULL) { /* this means lasso_logout_init_request was not called before */ return critical_error(LASSO_PROFILE_ERROR_MISSING_REMOTE_PROVIDERID); } remote_provider = lasso_server_get_provider(profile->server, profile->remote_providerID); if (LASSO_IS_PROVIDER(remote_provider) == FALSE) { return critical_error(LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND); } if (profile->http_request_method == LASSO_HTTP_METHOD_SOAP) { profile->msg_url = NULL; LASSO_SAMLP_RESPONSE_ABSTRACT(profile->response)->private_key_file = profile->server->private_key; LASSO_SAMLP_RESPONSE_ABSTRACT(profile->response)->certificate_file = profile->server->certificate; profile->msg_body = lasso_node_export_to_soap(profile->response); return 0; } if (profile->http_request_method == LASSO_HTTP_METHOD_REDIRECT) { url = lasso_provider_get_metadata_one(remote_provider, "RegisterNameIdentifierServiceReturnURL"); if (url == NULL) { return critical_error(LASSO_PROFILE_ERROR_UNKNOWN_PROFILE_URL); } query = lasso_node_export_to_query_with_password(LASSO_NODE(profile->response), profile->server->signature_method, profile->server->private_key, profile->server->private_key_password); if (query == NULL) { lasso_release(url); return critical_error(LASSO_PROFILE_ERROR_BUILDING_QUERY_FAILED); } /* build the msg_url */ profile->msg_url = lasso_concat_url_query(url, query); lasso_release(url); lasso_release(query); profile->msg_body = NULL; return 0; } return critical_error(LASSO_PROFILE_ERROR_INVALID_HTTP_METHOD); } /** * lasso_name_registration_destroy: * @name_registration: a #LassoNameRegistration * * Destroys a #LassoNameRegistration object. **/ void lasso_name_registration_destroy(LassoNameRegistration *name_registration) { lasso_node_destroy(LASSO_NODE(name_registration)); } /** * lasso_name_registration_init_request: * @name_registration: a #LassoNameRegistration * @remote_providerID: the providerID of the identity provider. * @http_method: if set, then it get the protocol profile in metadata * corresponding of this HTTP request method. * * Initializes a new lib:RegisterNameIdentifierRequest request; it sets * @name_registration->nameIdentifier to the new name identifier and * @name_registration->oldNameIdentifier to the old one. * * Return value: 0 on success; or a negative value otherwise. **/ gint lasso_name_registration_init_request(LassoNameRegistration *name_registration, char *remote_providerID, LassoHttpMethod http_method) { LassoProfile *profile; LassoProvider *remote_provider; LassoFederation *federation; LassoSamlNameIdentifier *spNameIdentifier, *idpNameIdentifier, *oldNameIdentifier = NULL; g_return_val_if_fail(LASSO_IS_NAME_REGISTRATION(name_registration), LASSO_PARAM_ERROR_INVALID_VALUE); g_return_val_if_fail(remote_providerID != NULL, LASSO_PARAM_ERROR_INVALID_VALUE); profile = LASSO_PROFILE(name_registration); /* verify if the identity and session exist */ if (LASSO_IS_IDENTITY(profile->identity) == FALSE) { return critical_error(LASSO_PROFILE_ERROR_IDENTITY_NOT_FOUND); } /* set the remote provider id */ profile->remote_providerID = g_strdup(remote_providerID); remote_provider = lasso_server_get_provider(profile->server, profile->remote_providerID); if (LASSO_IS_PROVIDER(remote_provider) == FALSE) { return critical_error(LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND); } /* Get federation */ federation = g_hash_table_lookup(profile->identity->federations, profile->remote_providerID); if (LASSO_IS_FEDERATION(federation) == FALSE) { return critical_error(LASSO_PROFILE_ERROR_FEDERATION_NOT_FOUND); } /* FIXME : depending on the requester provider type, verify the format * of the old name identifier is only federated type */ if (remote_provider->role == LASSO_PROVIDER_ROLE_IDP) { /* Initiating it, from a SP */ spNameIdentifier = lasso_saml_name_identifier_new(); spNameIdentifier->content = lasso_build_unique_id(32); spNameIdentifier->NameQualifier = g_strdup(profile->remote_providerID); spNameIdentifier->Format = g_strdup(LASSO_LIB_NAME_IDENTIFIER_FORMAT_FEDERATED); idpNameIdentifier = LASSO_SAML_NAME_IDENTIFIER(g_object_ref(federation->remote_nameIdentifier)); if (federation->local_nameIdentifier) { /* old name identifier is from SP, * name_registration->oldNameIdentifier must be from SP */ oldNameIdentifier = LASSO_SAML_NAME_IDENTIFIER(g_object_ref(federation->local_nameIdentifier)); } else { /* oldNameIdentifier is none, no local name identifier at SP, old is IDP */ oldNameIdentifier = LASSO_SAML_NAME_IDENTIFIER(g_object_ref(idpNameIdentifier)); } profile->nameIdentifier = LASSO_NODE(g_object_ref(spNameIdentifier)); name_registration->oldNameIdentifier = g_object_ref(oldNameIdentifier); } else { /* if (remote_provider->role == LASSO_PROVIDER_ROLE_SP) { */ /* Initiating it, from an IdP */ if (federation->local_nameIdentifier == NULL) { return LASSO_PROFILE_ERROR_NAME_IDENTIFIER_NOT_FOUND; } oldNameIdentifier = LASSO_SAML_NAME_IDENTIFIER(g_object_ref(federation->local_nameIdentifier)); spNameIdentifier = NULL; if (federation->remote_nameIdentifier) { spNameIdentifier = LASSO_SAML_NAME_IDENTIFIER(g_object_ref(federation->remote_nameIdentifier)); } idpNameIdentifier = lasso_saml_name_identifier_new(); idpNameIdentifier->content = lasso_build_unique_id(32); idpNameIdentifier->NameQualifier = g_strdup(profile->remote_providerID); idpNameIdentifier->Format = g_strdup(LASSO_LIB_NAME_IDENTIFIER_FORMAT_FEDERATED); profile->nameIdentifier = LASSO_NODE(g_object_ref(idpNameIdentifier)); name_registration->oldNameIdentifier = g_object_ref(oldNameIdentifier); } if (oldNameIdentifier == NULL) { message(G_LOG_LEVEL_CRITICAL, "Invalid provider type"); /* ??? */ return LASSO_PROFILE_ERROR_MISSING_NAME_IDENTIFIER; } if (http_method == LASSO_HTTP_METHOD_ANY) { http_method = lasso_provider_get_first_http_method( LASSO_PROVIDER(profile->server), remote_provider, LASSO_MD_PROTOCOL_TYPE_REGISTER_NAME_IDENTIFIER); } else { if (lasso_provider_accept_http_method(LASSO_PROVIDER(profile->server), remote_provider, LASSO_MD_PROTOCOL_TYPE_REGISTER_NAME_IDENTIFIER, http_method, TRUE) == FALSE) { return critical_error(LASSO_PROFILE_ERROR_UNSUPPORTED_PROFILE); } } profile->request = lasso_lib_register_name_identifier_request_new_full( LASSO_PROVIDER(profile->server)->ProviderID, idpNameIdentifier, spNameIdentifier, oldNameIdentifier, profile->server->certificate ? LASSO_SIGNATURE_TYPE_WITHX509 : LASSO_SIGNATURE_TYPE_SIMPLE, lasso_get_default_signature_method()); if (profile->request == NULL) { return critical_error(LASSO_PROFILE_ERROR_BUILDING_REQUEST_FAILED); } LASSO_LIB_REGISTER_NAME_IDENTIFIER_REQUEST(profile->request)->RelayState = g_strdup(profile->msg_relayState); if (lasso_provider_get_protocol_conformance(remote_provider) < LASSO_PROTOCOL_LIBERTY_1_2) { LASSO_SAMLP_REQUEST_ABSTRACT(profile->request)->MajorVersion = 1; LASSO_SAMLP_REQUEST_ABSTRACT(profile->request)->MinorVersion = 1; } profile->http_request_method = http_method; return 0; } /** * lasso_name_registration_process_request_msg: * @name_registration: a #LassoNameRegistration * @request_msg: the register name identifier request message * * Processes a lib:RegisterNameIdentifierRequest message. Rebuilds a request * object from the message and optionally verifies its signature. Sets * profile->nameIdentifier to local name identifier. If it changed (when this * is IdP-initiated and there was no previously defined local name identifier) * profile->nameIdentifier will be the new one and profile->oldNameIdentiifer * the old one. * * Return value: 0 on success; or a negative value otherwise. **/ gint lasso_name_registration_process_request_msg(LassoNameRegistration *name_registration, char *request_msg) { LassoProfile *profile; LassoProvider *remote_provider; LassoMessageFormat format; LassoLibRegisterNameIdentifierRequest *request; g_return_val_if_fail(LASSO_IS_NAME_REGISTRATION(name_registration), LASSO_PARAM_ERROR_INVALID_VALUE); g_return_val_if_fail(request_msg != NULL, LASSO_PARAM_ERROR_INVALID_VALUE); profile = LASSO_PROFILE(name_registration); profile->request = lasso_lib_register_name_identifier_request_new(); format = lasso_node_init_from_message(LASSO_NODE(profile->request), request_msg); if (format == LASSO_MESSAGE_FORMAT_UNKNOWN || format == LASSO_MESSAGE_FORMAT_ERROR) { return critical_error(LASSO_PROFILE_ERROR_INVALID_MSG); } remote_provider = lasso_server_get_provider(profile->server, LASSO_LIB_REGISTER_NAME_IDENTIFIER_REQUEST(profile->request)->ProviderID); if (LASSO_IS_PROVIDER(remote_provider) == FALSE) { return critical_error(LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND); } /* verify signatures */ profile->signature_status = lasso_provider_verify_signature( remote_provider, request_msg, "RequestID", format); if (format == LASSO_MESSAGE_FORMAT_SOAP) profile->http_request_method = LASSO_HTTP_METHOD_SOAP; if (format == LASSO_MESSAGE_FORMAT_QUERY) profile->http_request_method = LASSO_HTTP_METHOD_REDIRECT; request = LASSO_LIB_REGISTER_NAME_IDENTIFIER_REQUEST(profile->request); name_registration->oldNameIdentifier = NULL; if (remote_provider->role == LASSO_PROVIDER_ROLE_IDP) { /* IdP initiated */ if (request->SPProvidedNameIdentifier) { profile->nameIdentifier = LASSO_NODE(g_object_ref(request->SPProvidedNameIdentifier)); } else { profile->nameIdentifier = LASSO_NODE(g_object_ref(request->IDPProvidedNameIdentifier)); name_registration->oldNameIdentifier = g_object_ref( request->OldProvidedNameIdentifier); } } else if (remote_provider->role == LASSO_PROVIDER_ROLE_SP) { /* SP initiated, profile->name */ profile->nameIdentifier = LASSO_NODE(g_object_ref(request->IDPProvidedNameIdentifier)); } return profile->signature_status; } /** * lasso_name_registration_process_response_msg: * @name_registration: a #LassoNameRegistration * @response_msg: the register name identifier response message * * Processes a lib:RegisterNameIdentifierResponse message. Rebuilds a response * object from the message and optionally verifies its signature. * * If the response depicts Success it will also update Principal federation. * * Return value: 0 on success; or a negative value otherwise. **/ gint lasso_name_registration_process_response_msg(LassoNameRegistration *name_registration, char *response_msg) { LassoProfile *profile; LassoProvider *remote_provider; LassoFederation *federation; LassoSamlNameIdentifier *nameIdentifier = NULL; LassoLibStatusResponse *response; LassoMessageFormat format; int rc = 0; char *statusCodeValue; g_return_val_if_fail(LASSO_IS_NAME_REGISTRATION(name_registration), LASSO_PARAM_ERROR_INVALID_VALUE); g_return_val_if_fail(response_msg != NULL, LASSO_PARAM_ERROR_INVALID_VALUE); profile = LASSO_PROFILE(name_registration); /* build register name identifier response from message */ profile->response = lasso_lib_register_name_identifier_response_new(); format = lasso_node_init_from_message(LASSO_NODE(profile->response), response_msg); if (format == LASSO_MESSAGE_FORMAT_UNKNOWN || format == LASSO_MESSAGE_FORMAT_ERROR) { return critical_error(LASSO_PROFILE_ERROR_INVALID_MSG); } remote_provider = lasso_server_get_provider(profile->server, LASSO_LIB_STATUS_RESPONSE(profile->response)->ProviderID); if (LASSO_IS_PROVIDER(remote_provider) == FALSE) { return critical_error(LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND); } /* verify signature */ rc = lasso_provider_verify_signature(remote_provider, response_msg, "ResponseID", format); response = LASSO_LIB_STATUS_RESPONSE(profile->response); if (response->Status == NULL || response->Status->StatusCode == NULL || response->Status->StatusCode->Value == NULL) { return critical_error(LASSO_PROFILE_ERROR_MISSING_STATUS_CODE); } statusCodeValue = response->Status->StatusCode->Value; if (strcmp(statusCodeValue, LASSO_SAML_STATUS_CODE_SUCCESS) != 0) { message(G_LOG_LEVEL_CRITICAL, "Status code not success: %s", statusCodeValue); return LASSO_PROFILE_ERROR_STATUS_NOT_SUCCESS; } /* Update federation with the nameIdentifier attribute. NameQualifier * is local ProviderID and format is Federated type */ if (LASSO_IS_IDENTITY(profile->identity) == FALSE) { return critical_error(LASSO_PROFILE_ERROR_IDENTITY_NOT_FOUND); } federation = g_hash_table_lookup(profile->identity->federations, profile->remote_providerID); if (LASSO_IS_FEDERATION(federation) == FALSE) { return critical_error(LASSO_PROFILE_ERROR_FEDERATION_NOT_FOUND); } remote_provider = lasso_server_get_provider(profile->server, profile->remote_providerID); if (LASSO_IS_PROVIDER(remote_provider) == FALSE) { return critical_error(LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND); } if (remote_provider->role == LASSO_PROVIDER_ROLE_SP) { nameIdentifier = LASSO_LIB_REGISTER_NAME_IDENTIFIER_REQUEST( profile->request)->IDPProvidedNameIdentifier; } if (remote_provider->role == LASSO_PROVIDER_ROLE_IDP) { nameIdentifier = LASSO_LIB_REGISTER_NAME_IDENTIFIER_REQUEST( profile->request)->SPProvidedNameIdentifier; } if (nameIdentifier == NULL) { message(G_LOG_LEVEL_CRITICAL, "Invalid provider role"); /* ??? */ return LASSO_PROFILE_ERROR_MISSING_NAME_IDENTIFIER; } if (federation->local_nameIdentifier) lasso_node_destroy(LASSO_NODE(federation->local_nameIdentifier)); federation->local_nameIdentifier = LASSO_NODE(g_object_ref(nameIdentifier)); profile->identity->is_dirty = TRUE; /* set the relay state */ profile->msg_relayState = g_strdup( LASSO_LIB_STATUS_RESPONSE(profile->response)->RelayState); return rc; } /** * lasso_name_registration_validate_request: * @name_registration: a #LassoNameRegistration * * Checks profile request with regards to message status and principal * federations, update them accordingly and prepares a * lib:RegisterNameIdentifierResponse accordingly. * * Return value: 0 on success; or a negative value otherwise. **/ gint lasso_name_registration_validate_request(LassoNameRegistration *name_registration) { LassoProfile *profile; LassoProvider *remote_provider; LassoFederation *federation; LassoLibRegisterNameIdentifierRequest *request; LassoSamlNameIdentifier *providedNameIdentifier = NULL; g_return_val_if_fail(LASSO_IS_NAME_REGISTRATION(name_registration), LASSO_PARAM_ERROR_INVALID_VALUE); profile = LASSO_PROFILE(name_registration); /* verify the register name identifier request */ if (LASSO_IS_LIB_REGISTER_NAME_IDENTIFIER_REQUEST(profile->request) == FALSE) { message(G_LOG_LEVEL_CRITICAL, "Register Name Identifier request not found"); return LASSO_PROFILE_ERROR_MISSING_REQUEST; } request = LASSO_LIB_REGISTER_NAME_IDENTIFIER_REQUEST(profile->request); /* set the remote provider id from the request */ profile->remote_providerID = g_strdup(request->ProviderID); if (profile->remote_providerID == NULL) { return LASSO_PROFILE_ERROR_MISSING_REMOTE_PROVIDERID; } /* set register name identifier response */ profile->response = lasso_lib_register_name_identifier_response_new_full( LASSO_PROVIDER(profile->server)->ProviderID, LASSO_SAML_STATUS_CODE_SUCCESS, LASSO_LIB_REGISTER_NAME_IDENTIFIER_REQUEST(profile->request), profile->server->certificate ? LASSO_SIGNATURE_TYPE_WITHX509 : LASSO_SIGNATURE_TYPE_SIMPLE, lasso_get_default_signature_method()); if (LASSO_IS_LIB_REGISTER_NAME_IDENTIFIER_RESPONSE(profile->response) == FALSE) { return critical_error(LASSO_PROFILE_ERROR_BUILDING_RESPONSE_FAILED); } /* verify federation */ if (profile->identity == NULL) { return critical_error(LASSO_PROFILE_ERROR_IDENTITY_NOT_FOUND); } federation = g_hash_table_lookup(profile->identity->federations, profile->remote_providerID); if (LASSO_IS_FEDERATION(federation) == FALSE) { return critical_error(LASSO_PROFILE_ERROR_FEDERATION_NOT_FOUND); } if (request->OldProvidedNameIdentifier == NULL) { message(G_LOG_LEVEL_CRITICAL, "Old provided name identifier not found"); return LASSO_PROFILE_ERROR_MISSING_NAME_IDENTIFIER; } if (lasso_federation_verify_name_identifier(federation, LASSO_NODE( request->OldProvidedNameIdentifier)) == FALSE) { message(G_LOG_LEVEL_CRITICAL, "No name identifier"); return LASSO_PROFILE_ERROR_MISSING_NAME_IDENTIFIER; } remote_provider = lasso_server_get_provider(profile->server, profile->remote_providerID); if (LASSO_IS_PROVIDER(remote_provider) == FALSE) { return critical_error(LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND); } /* update name identifier in federation */ if (remote_provider->role == LASSO_PROVIDER_ROLE_SP) { providedNameIdentifier = request->SPProvidedNameIdentifier; } if (remote_provider->role == LASSO_PROVIDER_ROLE_IDP) { providedNameIdentifier = request->IDPProvidedNameIdentifier; } if (providedNameIdentifier == NULL) { message(G_LOG_LEVEL_CRITICAL, "Sp provided name identifier not found"); return LASSO_PROFILE_ERROR_MISSING_NAME_IDENTIFIER; } if (federation->remote_nameIdentifier) lasso_node_destroy(LASSO_NODE(federation->remote_nameIdentifier)); federation->remote_nameIdentifier = LASSO_NODE(g_object_ref(providedNameIdentifier)); profile->identity->is_dirty = TRUE; return 0; } /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "OldNameIdentifier", SNIPPET_NODE_IN_CHILD, G_STRUCT_OFFSET(LassoNameRegistration, oldNameIdentifier), NULL, NULL, NULL}, { "NameRegistrationDumpVersion", SNIPPET_ATTRIBUTE, 0, NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; static xmlNode* get_xmlNode(LassoNode *node, gboolean lasso_dump) { xmlNode *xmlnode; xmlnode = parent_class->get_xmlNode(node, lasso_dump); xmlSetProp(xmlnode, (xmlChar*)"NameRegistrationDumpVersion", (xmlChar*)"2"); return xmlnode; } static int init_from_xml(LassoNode *node, xmlNode *xmlnode) { return parent_class->init_from_xml(node, xmlnode); } /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void instance_init(LassoNameRegistration *name_registration, G_GNUC_UNUSED void *unused) { name_registration->oldNameIdentifier = NULL; } static void class_init(LassoNameRegistrationClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->get_xmlNode = get_xmlNode; nclass->init_from_xml = init_from_xml; nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "NameRegistration"); lasso_node_class_set_ns(nclass, LASSO_LASSO_HREF, LASSO_LASSO_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); } GType lasso_name_registration_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoNameRegistrationClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoNameRegistration), 0, (GInstanceInitFunc) instance_init, NULL }; this_type = g_type_register_static(LASSO_TYPE_PROFILE, "LassoNameRegistration", &this_info, 0); } return this_type; } /** * lasso_name_registration_new: * @server: the #LassoServer * * Creates a new #LassoNameRegistration. * * Return value: a newly created #LassoNameRegistration object; or NULL if * an error occured **/ LassoNameRegistration * lasso_name_registration_new(LassoServer *server) { LassoNameRegistration *name_registration; g_return_val_if_fail(LASSO_IS_SERVER(server), NULL); name_registration = g_object_new(LASSO_TYPE_NAME_REGISTRATION, NULL); LASSO_PROFILE(name_registration)->server = g_object_ref(server); return name_registration; } /** * lasso_name_registration_new_from_dump: * @server: the #LassoServer * @dump: XML logout dump * * Restores the @dump to a new #LassoNameRegistration. * * Return value: a newly created #LassoNameRegistration; or NULL if an error * occured **/ LassoNameRegistration* lasso_name_registration_new_from_dump(LassoServer *server, const char *dump) { LassoNameRegistration *name_registration; xmlDoc *doc; if (dump == NULL) return NULL; name_registration = lasso_name_registration_new(server); doc = xmlParseMemory(dump, strlen(dump)); init_from_xml(LASSO_NODE(name_registration), xmlDocGetRootElement(doc)); lasso_release_doc(doc); return name_registration; } /** * lasso_name_registration_dump: * @name_registration: a #LassoNameRegistration * * Dumps @name_registration content to an XML string. * * Return value:(transfer full): the dump string. It must be freed by the caller. **/ gchar * lasso_name_registration_dump(LassoNameRegistration *name_registration) { return lasso_node_dump(LASSO_NODE(name_registration)); } lasso-2.8.2/lasso/id-ff/PaxHeaders/session.h0000644000000000000000000000013214115351423015663 xustar0030 mtime=1630917395.111573704 30 atime=1678814151.008993845 30 ctime=1678814320.973953104 lasso-2.8.2/lasso/id-ff/session.h0000644000175000017500000000720114115351423021133 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SESSION_H__ #define __LASSO_SESSION_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "../xml/xml.h" #define LASSO_TYPE_SESSION (lasso_session_get_type()) #define LASSO_SESSION(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SESSION, LassoSession)) #define LASSO_SESSION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SESSION, LassoSessionClass)) #define LASSO_IS_SESSION(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SESSION)) #define LASSO_IS_SESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SESSION)) #define LASSO_SESSION_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SESSION, LassoSessionClass)) typedef struct _LassoSession LassoSession; typedef struct _LassoSessionClass LassoSessionClass; typedef struct _LassoSessionPrivate LassoSessionPrivate; /** * LassoSession: * @assertions:(element-type string LassoNode): a hashtable of #LassoSamlAssertion or #LassoSaml2Assertion, indexed by provider ids, * @is_dirty: whether this session object has been modified since its creation. * * #LassoSession stores the assertions received or emitted during the current session. It stores * state for using profiles like #LassoLogin or #LassoLogout. */ struct _LassoSession { LassoNode parent; /* Can actually contain LassoSamlAssertion or LassoSaml2Assertion */ GHashTable *assertions; /* of LassoNode */ gboolean is_dirty; /*< private >*/ LassoSessionPrivate *private_data; }; struct _LassoSessionClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_session_get_type(void); LASSO_EXPORT LassoSession* lasso_session_new(void); LASSO_EXPORT LassoSession* lasso_session_new_from_dump(const gchar *dump); LASSO_EXPORT gchar* lasso_session_dump(LassoSession *session); LASSO_EXPORT void lasso_session_destroy(LassoSession *session); LASSO_EXPORT GList* lasso_session_get_assertions( LassoSession *session, const char* provider_id); LASSO_EXPORT gchar* lasso_session_get_provider_index(LassoSession *session, gint index); LASSO_EXPORT gboolean lasso_session_is_empty(LassoSession *session); LASSO_EXPORT lasso_error_t lasso_session_remove_assertion(LassoSession *session, const gchar *providerID); LASSO_EXPORT LassoNode* lasso_session_get_assertion( LassoSession *session, const gchar *providerID); LASSO_EXPORT lasso_error_t lasso_session_add_assertion(LassoSession *session, const char *providerID, LassoNode *assertion); LASSO_EXPORT GList *lasso_session_get_name_ids(LassoSession *session, const gchar *providerID); LASSO_EXPORT GList *lasso_session_get_session_indexes(LassoSession *session, const gchar *providerID, LassoNode *name_id); LASSO_EXPORT GList* lasso_session_get_assertion_ids(LassoSession *session, const gchar *providerID); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SESSION_H__ */ lasso-2.8.2/lasso/id-ff/PaxHeaders/logout.h0000644000000000000000000000013214114336625015517 xustar0030 mtime=1630649749.802436733 30 atime=1678814151.008993845 30 ctime=1678814320.961953036 lasso-2.8.2/lasso/id-ff/logout.h0000644000175000017500000000672514114336625021001 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_LOGOUT_H__ #define __LASSO_LOGOUT_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "profile.h" #include "../xml/lib_logout_request.h" #include "../xml/lib_logout_response.h" #define LASSO_TYPE_LOGOUT (lasso_logout_get_type()) #define LASSO_LOGOUT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_LOGOUT, LassoLogout)) #define LASSO_LOGOUT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_LOGOUT, LassoLogoutClass)) #define LASSO_IS_LOGOUT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_LOGOUT)) #define LASSO_IS_LOGOUT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_LOGOUT)) #define LASSO_LOGOUT_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_LOGOUT, LassoLogoutClass)) typedef struct _LassoLogout LassoLogout; typedef struct _LassoLogoutClass LassoLogoutClass; typedef struct _LassoLogoutPrivate LassoLogoutPrivate; struct _LassoLogout { LassoProfile parent; /*< private >*/ LassoNode *initial_request; LassoNode *initial_response; gchar *initial_remote_providerID; gint providerID_index; LassoHttpMethod initial_http_request_method; LassoLogoutPrivate *private_data; }; struct _LassoLogoutClass { LassoProfileClass parent; }; LASSO_EXPORT GType lasso_logout_get_type(void); LASSO_EXPORT LassoLogout* lasso_logout_new (LassoServer *server); LASSO_EXPORT LassoLogout* lasso_logout_new_from_dump(LassoServer *server, const gchar *dump); LASSO_EXPORT lasso_error_t lasso_logout_build_request_msg (LassoLogout *logout); LASSO_EXPORT lasso_error_t lasso_logout_build_response_msg (LassoLogout *logout); LASSO_EXPORT void lasso_logout_destroy (LassoLogout *logout); LASSO_EXPORT gchar* lasso_logout_dump (LassoLogout *logout); LASSO_EXPORT gchar* lasso_logout_get_next_providerID (LassoLogout *logout); LASSO_EXPORT lasso_error_t lasso_logout_init_request (LassoLogout *logout, gchar *remote_providerID, LassoHttpMethod request_method); LASSO_EXPORT lasso_error_t lasso_logout_process_request_msg (LassoLogout *logout, gchar *request_msg); LASSO_EXPORT lasso_error_t lasso_logout_process_response_msg (LassoLogout *logout, gchar *response_msg); LASSO_EXPORT lasso_error_t lasso_logout_reset_providerID_index (LassoLogout *logout); LASSO_EXPORT lasso_error_t lasso_logout_validate_request (LassoLogout *logout); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_LOGOUT_H__ */ lasso-2.8.2/lasso/id-ff/PaxHeaders/lecp.c0000644000000000000000000000013214364261206015123 xustar0030 mtime=1674666630.730769021 30 atime=1678814217.357366152 30 ctime=1678814320.981953149 lasso-2.8.2/lasso/id-ff/lecp.c0000644000175000017500000003364114364261206020402 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ /** * SECTION:lecp * @short_description: Liberty Enabled Client and Proxy Profile (ID-FF) * **/ #include "../xml/private.h" #include #include #include "lecp.h" #include "profileprivate.h" #include "../utils.h" #include "../utils.h" /*****************************************************************************/ /* public methods */ /*****************************************************************************/ /** * lasso_lecp_build_authn_request_envelope_msg: * @lecp: a #LassoLecp * * Builds an enveloped authentication request message. Sets @msg_body to that * message. * * Return value: 0 on success; or a negative value otherwise. **/ gint lasso_lecp_build_authn_request_envelope_msg(LassoLecp *lecp) { LassoProfile *profile; gchar *assertionConsumerServiceURL; xmlNode *msg; g_return_val_if_fail(LASSO_IS_LECP(lecp), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); profile = LASSO_PROFILE(lecp); assertionConsumerServiceURL = lasso_provider_get_assertion_consumer_service_url( LASSO_PROVIDER(profile->server), NULL); if (assertionConsumerServiceURL == NULL) { return critical_error(LASSO_PROFILE_ERROR_UNKNOWN_PROFILE_URL); } if (profile->request == NULL) { return LASSO_PROFILE_ERROR_MISSING_REQUEST; } lasso_assign_new_gobject(lecp->authnRequestEnvelope, lasso_lib_authn_request_envelope_new_full( LASSO_LIB_AUTHN_REQUEST(profile->request), LASSO_PROVIDER(profile->server)->ProviderID, assertionConsumerServiceURL)); if (lecp->authnRequestEnvelope == NULL) { return critical_error(LASSO_PROFILE_ERROR_BUILDING_REQUEST_FAILED); } LASSO_SAMLP_REQUEST_ABSTRACT(lecp->authnRequestEnvelope->AuthnRequest)->private_key_file = LASSO_PROFILE(lecp)->server->private_key; LASSO_SAMLP_REQUEST_ABSTRACT(lecp->authnRequestEnvelope->AuthnRequest)->certificate_file = LASSO_PROFILE(lecp)->server->certificate; msg = lasso_node_get_xmlNode(LASSO_NODE(lecp->authnRequestEnvelope), FALSE); lasso_assign_new_string(profile->msg_body, lasso_xmlnode_to_string(msg, 0, 0)) if (profile->msg_body == NULL) { return LASSO_PROFILE_ERROR_BUILDING_REQUEST_FAILED; } return 0; } /** * lasso_lecp_build_authn_request_msg: * @lecp: a #LassoLecp * * Builds an authentication request. The data for the sending of the request are * stored in @msg_url and @msg_body (SOAP POST). * * Return value: 0 on success; or a negative value otherwise. **/ int lasso_lecp_build_authn_request_msg(LassoLecp *lecp) { LassoProfile *profile; LassoProvider *remote_provider; g_return_val_if_fail(LASSO_IS_LECP(lecp), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); profile = LASSO_PROFILE(lecp); if (profile->remote_providerID == NULL) { return critical_error(LASSO_PROFILE_ERROR_MISSING_REMOTE_PROVIDERID); } remote_provider = lasso_server_get_provider(profile->server, profile->remote_providerID); if (remote_provider == NULL) { return critical_error(LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND); } lasso_assign_new_string(profile->msg_url, lasso_provider_get_metadata_one( remote_provider, "SingleSignOnServiceURL")); /* msg_body has usally been set in * lasso_lecp_process_authn_request_envelope_msg() */ if (profile->msg_body == NULL) return critical_error(LASSO_PROFILE_ERROR_BUILDING_MESSAGE_FAILED); return 0; } /** * lasso_lecp_build_authn_response_msg: * @lecp: a #LassoLecp * * Builds the lecp authentication response message (base64). Sets @msg_body to * that message. * * Return value: 0 on success; or a negative value otherwise. **/ int lasso_lecp_build_authn_response_msg(LassoLecp *lecp) { LassoProfile *profile; g_return_val_if_fail(LASSO_IS_LECP(lecp), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); profile = LASSO_PROFILE(lecp); lasso_profile_clean_msg_info(profile); lasso_assign_string(profile->msg_url, lecp->assertionConsumerServiceURL); if (profile->msg_url == NULL) { return critical_error(LASSO_PROFILE_ERROR_UNKNOWN_PROFILE_URL); } lasso_assign_new_string(profile->msg_body, lasso_node_export_to_base64(LASSO_NODE(profile->response))); if (profile->msg_body == NULL) { return critical_error(LASSO_PROFILE_ERROR_BUILDING_MESSAGE_FAILED); } return 0; } /** * lasso_lecp_build_authn_response_envelope_msg: * @lecp: a #LassoLecp * * Builds the enveloped LECP authentication response message (SOAP message). * Sets @msg_body to that message. * * Return value: 0 on success; or a negative value otherwise. **/ gint lasso_lecp_build_authn_response_envelope_msg(LassoLecp *lecp) { LassoProfile *profile; LassoProvider *provider; gchar *assertionConsumerServiceURL; g_return_val_if_fail(LASSO_IS_LECP(lecp), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); profile = LASSO_PROFILE(lecp); if (LASSO_IS_LIB_AUTHN_RESPONSE(profile->response) == FALSE) { return LASSO_PROFILE_ERROR_MISSING_RESPONSE; } provider = lasso_server_get_provider(profile->server, profile->remote_providerID); if (provider == NULL) { return critical_error(LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND); } /* build lib:AuthnResponse */ lasso_login_build_authn_response_msg(LASSO_LOGIN(lecp)); assertionConsumerServiceURL = lasso_provider_get_assertion_consumer_service_url( provider, NULL); if (assertionConsumerServiceURL == NULL) { return critical_error(LASSO_PROFILE_ERROR_UNKNOWN_PROFILE_URL); } lasso_release (LASSO_PROFILE(lecp)->msg_body); lasso_release (LASSO_PROFILE(lecp)->msg_url); lasso_assign_new_gobject(lecp->authnResponseEnvelope, lasso_lib_authn_response_envelope_new( LASSO_LIB_AUTHN_RESPONSE(profile->response), assertionConsumerServiceURL)); LASSO_SAMLP_RESPONSE_ABSTRACT(lecp->authnResponseEnvelope->AuthnResponse )->private_key_file = profile->server->private_key; LASSO_SAMLP_RESPONSE_ABSTRACT(lecp->authnResponseEnvelope->AuthnResponse )->certificate_file = profile->server->certificate; profile->msg_body = lasso_node_export_to_soap(LASSO_NODE(lecp->authnResponseEnvelope)); if (profile->msg_body == NULL) { return critical_error(LASSO_PROFILE_ERROR_BUILDING_MESSAGE_FAILED); } return 0; } /** * lasso_lecp_init_authn_request: * @lecp: a #LassoLecp * @remote_providerID: the providerID of the identity provider. When NULL, the * first known identity provider is used. * * Initializes a new lib:AuthnRequest. * * Return value: 0 on success; or a negative value otherwise. **/ int lasso_lecp_init_authn_request(LassoLecp *lecp, const char *remote_providerID) { gint res; g_return_val_if_fail(LASSO_IS_LECP(lecp), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); /* FIXME : BAD usage of http_method using POST method so that the lib:AuthnRequest is initialize with a signature template */ res = lasso_login_init_authn_request(LASSO_LOGIN(lecp), remote_providerID, LASSO_HTTP_METHOD_POST); return res; } /** * lasso_lecp_process_authn_request_msg: * @lecp: a #LassoLecp * @authn_request_msg: the authentication request received * * Processes received authentication request, checks it is signed correctly, * checks if requested protocol profile is supported, etc. * * Return value: 0 on success; or a negative value otherwise. **/ int lasso_lecp_process_authn_request_msg(LassoLecp *lecp, const char *authn_request_msg) { g_return_val_if_fail(LASSO_IS_LECP(lecp), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); g_return_val_if_fail(authn_request_msg != NULL, LASSO_PARAM_ERROR_INVALID_VALUE); return lasso_login_process_authn_request_msg(LASSO_LOGIN(lecp), authn_request_msg); } /** * lasso_lecp_process_authn_request_envelope_msg: * @lecp: a #LassoLecp * @request_msg: the enveloped authentication request received * * Processes received enveloped authentication request, extracts the * authentication request out of it. * * Return value: 0 on success; or a negative value otherwise. **/ int lasso_lecp_process_authn_request_envelope_msg(LassoLecp *lecp, const char *request_msg) { xmlDoc *doc; xmlXPathContext *xpathCtx; xmlXPathObject *xpathObj; xmlNode *soap_envelope, *soap_body, *authn_request; g_return_val_if_fail(LASSO_IS_LECP(lecp), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); g_return_val_if_fail(request_msg != NULL, LASSO_PARAM_ERROR_INVALID_VALUE); doc = xmlParseMemory(request_msg, strlen(request_msg)); xpathCtx = xmlXPathNewContext(doc); xmlXPathRegisterNs(xpathCtx, (xmlChar*)"lib", (xmlChar*)LASSO_LIB_HREF); /* TODO: will need to use another href for id-ff 1.1 support */ xpathObj = xmlXPathEvalExpression((xmlChar*)"//lib:AuthnRequest", xpathCtx); if (xpathObj == NULL) { xmlXPathFreeContext(xpathCtx); return critical_error(LASSO_PROFILE_ERROR_INVALID_MSG); } if (xpathObj->nodesetval == NULL || xpathObj->nodesetval->nodeNr == 0) { xmlXPathFreeContext(xpathCtx); xmlXPathFreeObject(xpathObj); return critical_error(LASSO_PROFILE_ERROR_INVALID_MSG); } authn_request = xmlCopyNode(xpathObj->nodesetval->nodeTab[0], 1); xmlXPathFreeContext(xpathCtx); xmlXPathFreeObject(xpathObj); lasso_release_doc(doc); xpathCtx = NULL; xpathObj = NULL; doc = NULL; soap_envelope = xmlNewNode(NULL, (xmlChar*)"Envelope"); xmlSetNs(soap_envelope, xmlNewNs(soap_envelope, (xmlChar*)LASSO_SOAP_ENV_HREF, (xmlChar*)LASSO_SOAP_ENV_PREFIX)); soap_body = xmlNewTextChild(soap_envelope, NULL, (xmlChar*)"Body", NULL); xmlAddChild(soap_body, authn_request); lasso_assign_new_string(LASSO_PROFILE(lecp)->msg_body, lasso_xmlnode_to_string(soap_envelope, 0, 0)); xmlFreeNode(soap_envelope); return 0; } /** * lasso_lecp_process_authn_response_envelope_msg: * @lecp: a #LassoLecp * @response_msg: the enveloped authentication response received * * Processes received enveloped authentication response, extracts the * authentication response out of it and stores it in @response. * * Return value: 0 on success; or a negative value otherwise. **/ int lasso_lecp_process_authn_response_envelope_msg(LassoLecp *lecp, const char *response_msg) { LassoProfile *profile; LassoMessageFormat format; g_return_val_if_fail(LASSO_IS_LECP(lecp), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); g_return_val_if_fail(response_msg != NULL, LASSO_PARAM_ERROR_INVALID_VALUE); profile = LASSO_PROFILE(lecp); lecp->authnResponseEnvelope = lasso_lib_authn_response_envelope_new(NULL, NULL); format = lasso_node_init_from_message(LASSO_NODE(lecp->authnResponseEnvelope), response_msg); if (format == LASSO_MESSAGE_FORMAT_UNKNOWN || format == LASSO_MESSAGE_FORMAT_ERROR) { return critical_error(LASSO_PROFILE_ERROR_INVALID_MSG); } profile->response = LASSO_NODE(g_object_ref(lecp->authnResponseEnvelope->AuthnResponse)); if (profile->response == NULL) { return LASSO_PROFILE_ERROR_MISSING_RESPONSE; } lecp->assertionConsumerServiceURL = g_strdup( lecp->authnResponseEnvelope->AssertionConsumerServiceURL); if (lecp->assertionConsumerServiceURL == NULL){ return critical_error(LASSO_PROFILE_ERROR_UNKNOWN_PROFILE_URL); } return 0; } /** * lasso_lecp_destroy: * @lecp: a #LassoLecp * * Destroys a #LassoLecp object * **/ void lasso_lecp_destroy(LassoLecp *lecp) { lasso_node_destroy(LASSO_NODE(lecp)); } /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static LassoNodeClass *parent_class = NULL; /*****************************************************************************/ /* overridden parent class methods */ /*****************************************************************************/ static void finalize(GObject *object) { G_OBJECT_CLASS(parent_class)->finalize(object); } /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void instance_init(LassoLecp *lecp, G_GNUC_UNUSED void *unused) { lecp->authnRequestEnvelope = NULL; lecp->authnResponseEnvelope = NULL; lecp->assertionConsumerServiceURL = NULL; } static void class_init(LassoLecpClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); G_OBJECT_CLASS(klass)->finalize = finalize; nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "Lecp"); lasso_node_class_set_ns(nclass, LASSO_LASSO_HREF, LASSO_LASSO_PREFIX); } GType lasso_lecp_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoLecpClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoLecp), 0, (GInstanceInitFunc) instance_init, NULL }; this_type = g_type_register_static(LASSO_TYPE_LOGIN, "LassoLecp", &this_info, 0); } return this_type; } /** * lasso_lecp_new * @server: the #LassoServer * * Creates a new #LassoLecp. * * Return value: a newly created #LassoLecp object; or NULL if an error * occured **/ LassoLecp* lasso_lecp_new(LassoServer *server) { LassoLecp *lecp; lecp = g_object_new(LASSO_TYPE_LECP, NULL); LASSO_PROFILE(lecp)->server = g_object_ref(server); return lecp; } lasso-2.8.2/lasso/id-ff/PaxHeaders/identityprivate.h0000644000000000000000000000013214117162531017426 xustar0030 mtime=1631380825.848637964 30 atime=1678814151.004993823 30 ctime=1678814320.993953218 lasso-2.8.2/lasso/id-ff/identityprivate.h0000644000175000017500000000250614117162531022701 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_IDENTITY_PRIVATE_H__ #define __LASSO_IDENTITY_PRIVATE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "config.h" struct _LassoIdentityPrivate { gboolean dispose_has_run; }; gint lasso_identity_add_federation(LassoIdentity *identity, LassoFederation *federation); gint lasso_identity_remove_federation(LassoIdentity *identity, const char *providerID); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_IDENTITY_PRIVATE_H__ */ lasso-2.8.2/lasso/id-ff/PaxHeaders/session.c0000644000000000000000000000013214364261206015663 xustar0030 mtime=1674666630.746769119 30 atime=1678814227.093421031 30 ctime=1678814320.993953218 lasso-2.8.2/lasso/id-ff/session.c0000644000175000017500000007345714364261206021153 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ /** * SECTION:session * @short_description: Principal Session * **/ #include "../xml/private.h" #include "../lasso_config.h" #include "session.h" #include "sessionprivate.h" #include "../xml/lib_authentication_statement.h" #include "../xml/saml_assertion.h" #include "../xml/saml-2.0/saml2_authn_statement.h" #include "../xml/saml-2.0/saml2_assertion.h" #include "../utils.h" #include "../debug.h" #include #include #include #include static gboolean lasso_match_name_id(LassoNode *a, LassoNode *b); struct _NidAndSessionIndex { LassoNode *name_id; char *assertion_id; char *session_index; }; struct _NidAndSessionIndex * lasso_new_nid_and_session_index(LassoNode *name_id, const char *assertion_id, const char *session_index) { struct _NidAndSessionIndex *nid_and_session_index = g_new0(struct _NidAndSessionIndex, 1); lasso_assign_gobject(nid_and_session_index->name_id, name_id); lasso_assign_string(nid_and_session_index->assertion_id, assertion_id); lasso_assign_string(nid_and_session_index->session_index, session_index); return nid_and_session_index; } static void lasso_release_nid_and_session_index(struct _NidAndSessionIndex *nid_and_session_index, G_GNUC_UNUSED void *unused) { lasso_release_gobject(nid_and_session_index->name_id); lasso_release_string(nid_and_session_index->session_index); lasso_release_string(nid_and_session_index->assertion_id); lasso_release(nid_and_session_index); } void lasso_release_list_of_nid_an_session_index(GList *list) { g_list_foreach(list, (GFunc)lasso_release_nid_and_session_index, NULL); g_list_free(list); } /*****************************************************************************/ /* public methods */ /*****************************************************************************/ static void lasso_session_add_nid_and_session_index(LassoSession *session, const char *providerID, struct _NidAndSessionIndex *nid_and_session_index) { GList *l = g_hash_table_lookup(session->private_data->nid_and_session_indexes, providerID); GList *i; lasso_foreach(i, l) { struct _NidAndSessionIndex *other_nid_and_sid = i->data; /* do some sharing and limit doublons */ if (lasso_match_name_id(other_nid_and_sid->name_id, nid_and_session_index->name_id)) { if (lasso_strisequal(other_nid_and_sid->session_index, nid_and_session_index->session_index)) { lasso_release_nid_and_session_index(nid_and_session_index, NULL); return; } // lasso_assign_gobject(nid_and_session_index->name_id, other_nid_and_sid->name_id); } } if (l) { l = g_list_append(l, nid_and_session_index); } else { l = g_list_append(l, nid_and_session_index); g_hash_table_insert(session->private_data->nid_and_session_indexes, g_strdup(providerID), l); } } /** * lasso_session_add_assertion_nid_and_session_index: * * Extract NameID and SessionIndex and keep them around. * */ static gint lasso_session_add_assertion_nid_and_session_index(LassoSession *session, const gchar *providerID, LassoNode *assertion) { struct _NidAndSessionIndex *nid_and_session_index = NULL; lasso_bad_param(SESSION, session); lasso_null_param(assertion); if (LASSO_IS_SAML_ASSERTION(assertion)) { /* saml 1.1 */ LassoSamlAssertion *saml_assertion = (LassoSamlAssertion*) assertion; LassoLibAuthenticationStatement *auth_statement = NULL; LassoSamlSubjectStatementAbstract *ss = NULL; if (saml_assertion->SubjectStatement) ss = &saml_assertion->SubjectStatement->parent; else if (saml_assertion->AuthenticationStatement) ss = &saml_assertion->AuthenticationStatement->parent; else return LASSO_PARAM_ERROR_INVALID_VALUE; if (! ss->Subject) return LASSO_PARAM_ERROR_INVALID_VALUE; if (! ss->Subject->NameIdentifier) return LASSO_PARAM_ERROR_INVALID_VALUE; if (! LASSO_IS_LIB_AUTHENTICATION_STATEMENT(saml_assertion->AuthenticationStatement)) return LASSO_ERROR_UNIMPLEMENTED; auth_statement = (LassoLibAuthenticationStatement*) saml_assertion->AuthenticationStatement; if (! auth_statement->SessionIndex) return 0; nid_and_session_index = lasso_new_nid_and_session_index( (LassoNode*)ss->Subject->NameIdentifier, saml_assertion->AssertionID, auth_statement->SessionIndex); lasso_session_add_nid_and_session_index(session, providerID, nid_and_session_index); } else if (LASSO_IS_SAML2_ASSERTION(assertion)) { /* saml 2.0 */ LassoSaml2Assertion *saml2_assertion = (LassoSaml2Assertion*) assertion; GList *iter; if (! saml2_assertion->Subject) return LASSO_PARAM_ERROR_INVALID_VALUE; if (! saml2_assertion->Subject->NameID) return LASSO_PARAM_ERROR_INVALID_VALUE; if (! saml2_assertion->AuthnStatement) return 0; lasso_foreach(iter, saml2_assertion->AuthnStatement) { LassoSaml2AuthnStatement *authn_statement = iter->data; if (authn_statement->SessionIndex) { nid_and_session_index = lasso_new_nid_and_session_index( (LassoNode*)saml2_assertion->Subject->NameID, saml2_assertion->ID, authn_statement->SessionIndex); lasso_session_add_nid_and_session_index(session, providerID, nid_and_session_index); } } } else { return LASSO_ERROR_UNIMPLEMENTED; } return 0; } static gint lasso_session_add_assertion_simple(LassoSession *session, const char *providerID, LassoNode *assertion) { g_return_val_if_fail(LASSO_IS_SESSION(session), LASSO_PARAM_ERROR_INVALID_VALUE); g_return_val_if_fail(providerID != NULL, LASSO_PARAM_ERROR_INVALID_VALUE); g_return_val_if_fail(assertion != NULL, LASSO_PARAM_ERROR_INVALID_VALUE); if (lasso_flag_thin_sessions) { /* do not store the full assertion */ return 0; } g_hash_table_insert(session->assertions, g_strdup(providerID), g_object_ref(assertion)); return 0; } static gboolean lasso_match_name_id(LassoNode *a, LassoNode *b) { if (LASSO_IS_SAML_NAME_IDENTIFIER(a) && LASSO_IS_SAML_NAME_IDENTIFIER(b)) { return lasso_saml_name_identifier_equals((LassoSamlNameIdentifier*)a, (LassoSamlNameIdentifier*)b); } else if (LASSO_IS_SAML2_NAME_ID(a) && LASSO_IS_SAML2_NAME_ID(b)) { return lasso_saml2_name_id_equals((LassoSaml2NameID*)a, (LassoSaml2NameID*)b); } return FALSE; } /** * lasso_session_get_session_indexes: * @session: a #LassoSession object * @providerID: a provider id * @name_id: a #LassoSamlAssertion or #LassoSaml2Assertion object * * Gets all the registered session indexes for this session. * * Return value:(transfer full)(element-type utf8): a list of string containing the session index identifiers. */ GList* lasso_session_get_session_indexes(LassoSession *session, const gchar *providerID, LassoNode *node) { GList *l = NULL, *iter = NULL; GList *ret = NULL; if (! LASSO_IS_SESSION(session)) return NULL; if (! providerID) return NULL; l = g_hash_table_lookup(session->private_data->nid_and_session_indexes, providerID); lasso_foreach(iter, l) { struct _NidAndSessionIndex *nid_and_session_index = iter->data; if (! nid_and_session_index->session_index) continue; if (node && ! lasso_match_name_id(node, nid_and_session_index->name_id)) { continue; } lasso_list_add_string(ret, nid_and_session_index->session_index); } return ret; } /** * lasso_session_get_name_ids: * @session: a #LassoSession object * @providerID: a provider identifier * * List the known NameID coming from this provider during this session. * * Return value:(transfer full)(element-type LassoNode): a list of #LassoNode objects. */ GList* lasso_session_get_name_ids(LassoSession *session, const gchar *providerID) { GList *nid_and_session_indexes = NULL; GList *ret = NULL; GList *i, *j; if (! LASSO_IS_SESSION(session)) return NULL; if (! providerID) return NULL; nid_and_session_indexes = g_hash_table_lookup(session->private_data->nid_and_session_indexes, providerID); lasso_foreach(i, nid_and_session_indexes) { struct _NidAndSessionIndex *nid_and_session_index = i->data; int ok = 1; lasso_foreach(j, ret) { if (lasso_match_name_id(j->data, nid_and_session_index->name_id)) { ok = 0; break; } } if (ok) { lasso_list_add_gobject(ret, nid_and_session_index->name_id); } } return ret; } /** * lasso_session_get_assertion_ids: * @session: a #LassoSession object * @providerID: a provider identifier * * List the ids of assertions received during the current session. * * Return value:(transfer full)(element-type utf8): a list of strings */ GList* lasso_session_get_assertion_ids(LassoSession *session, const gchar *providerID) { GList *nid_and_session_indexes = NULL; GList *ret = NULL; GList *i; if (! LASSO_IS_SESSION(session)) return NULL; if (! providerID) return NULL; nid_and_session_indexes = g_hash_table_lookup(session->private_data->nid_and_session_indexes, providerID); lasso_foreach(i, nid_and_session_indexes) { struct _NidAndSessionIndex *nid_and_session_index = i->data; lasso_list_add_string(ret, nid_and_session_index->assertion_id); } return ret; } /** * lasso_session_add_assertion: * @session: a #LassoSession * @providerID: the provider ID * @assertion: the assertion * * Adds @assertion to the principal session. This function also * add the assertion to the index by assertionID. * * Return value: 0 on success; or a negative value otherwise. **/ gint lasso_session_add_assertion(LassoSession *session, const char *providerID, LassoNode *assertion) { gint ret = 0; ret = lasso_session_add_assertion_simple(session, providerID, assertion); if (ret != 0) { return ret; } ret = lasso_session_add_assertion_nid_and_session_index(session, providerID, assertion); if (ret != 0) { return ret; } session->is_dirty = TRUE; return ret; } /** * lasso_session_add_assertion_with_id: * @session: a #LassoSession * @assertionID: the provider ID * @assertion: the assertion * * Adds an assertion to the dictionnary of assertion indexed by their id, * do not store a reference by the Issuer like #lasso_session_add_assertion. * * Returns: 0 if the assertion was added to the dictionnary. */ gint lasso_session_add_assertion_with_id(LassoSession *session, const char *assertionID, xmlNode *assertion) { g_return_val_if_fail(LASSO_IS_SESSION(session), LASSO_PARAM_ERROR_INVALID_VALUE); g_return_val_if_fail(assertionID != NULL, LASSO_PARAM_ERROR_INVALID_VALUE); g_return_val_if_fail(assertion != NULL, LASSO_PARAM_ERROR_INVALID_VALUE); g_hash_table_insert(session->private_data->assertions_by_id, g_strdup(assertionID), xmlCopyNode(assertion, 1)); session->is_dirty = TRUE; return 0; } /** * lasso_session_add_status: * @session: a #LassoSession * @providerID: the provider ID * @status: the status * * Adds @status to the principal session. * * Return value: 0 on success; or a negative value otherwise. **/ gint lasso_session_add_status(LassoSession *session, const char *providerID, LassoNode *status) { g_return_val_if_fail(LASSO_IS_SESSION(session), LASSO_PARAM_ERROR_INVALID_VALUE); g_return_val_if_fail(providerID != NULL, LASSO_PARAM_ERROR_INVALID_VALUE); g_return_val_if_fail(status != NULL, LASSO_PARAM_ERROR_INVALID_VALUE); g_hash_table_insert(session->private_data->status, g_strdup(providerID), status); session->is_dirty = TRUE; return 0; } /** * lasso_session_get_assertion * @session: a #LassoSession * @providerID: the provider ID * * Gets the assertion for the given @providerID. * * Return value:(transfer none)(allow-none): the assertion or NULL if it didn't exist. This * #LassoSamlAssertion is internally allocated and must not be freed by * the caller. **/ LassoNode* lasso_session_get_assertion(LassoSession *session, const gchar *providerID) { g_return_val_if_fail(LASSO_IS_SESSION(session), NULL); return g_hash_table_lookup(session->assertions, providerID); } /** * lasso_session_get_assertion_by_id: * @session: a #LassoSession * @assertionID: the assertionID of the requested assertion * * Gets the assertion for the given @assertionID. * * Return value:(transfer none)(allow-none): the assertion or NULL if it didn't exist. This * #LassoSamlAssertion is internally allocated and must not be freed by * the caller. */ xmlNode* lasso_session_get_assertion_by_id(LassoSession *session, const gchar *assertionID) { g_return_val_if_fail(LASSO_IS_SESSION(session), NULL); return g_hash_table_lookup(session->private_data->assertions_by_id, assertionID); } static void add_assertion_to_list(G_GNUC_UNUSED gchar *key, LassoLibAssertion *value, GList **list) { *list = g_list_append(*list, value); } /** * lasso_session_get_assertions * @session: a #LassoSession * @provider_id: the provider ID * * Gets the assertions for the given @provider_id. * * Return value:(allow-none)(transfer container) (element-type LassoNode): a list of #LassoSamlAssertion. **/ GList* lasso_session_get_assertions(LassoSession *session, const char *provider_id) { GList *r = NULL; LassoSamlAssertion *assertion; if (session == NULL) { return NULL; } if (provider_id == NULL) { g_hash_table_foreach(session->assertions, (GHFunc)add_assertion_to_list, &r); } else { assertion = g_hash_table_lookup(session->assertions, provider_id); if (assertion) r = g_list_append(r, assertion); } return r; } /** * lasso_session_get_status * @session: a #LassoSession * @providerID: the provider ID * * Gets the status for the given @providerID. * * Return value:(transfer none)(allow-none): the status or NULL if it didn't exist. This #LassoSamlpStatus * is internally allocated and must not be freed by the caller. **/ LassoNode* lasso_session_get_status(LassoSession *session, const gchar *providerID) { if (session == NULL) { return NULL; } return g_hash_table_lookup(session->private_data->status, providerID); } static void add_providerID(gchar *key, G_GNUC_UNUSED struct _NidAndSessionIndex *ignored, LassoSession *session) { lasso_list_add_string(session->private_data->providerIDs, key); } /** * lasso_session_get_provider_index: * @session: a #LassoSession * @index: index of requested provider * * Looks up and returns the nth provider id. * * Return value:(transfer full)(allow-none): the provider id; or NULL if there were no nth provider. This * string must be freed by the caller. **/ gchar* lasso_session_get_provider_index(LassoSession *session, gint index) { GList *element; int length; g_return_val_if_fail(LASSO_IS_SESSION(session), NULL); g_return_val_if_fail(session->private_data, NULL); length = g_hash_table_size(session->private_data->nid_and_session_indexes); if (length == 0) return NULL; if (session->private_data->providerIDs == NULL) { lasso_session_init_provider_ids(session); } element = g_list_nth(session->private_data->providerIDs, index); if (element == NULL) return NULL; return g_strdup(element->data); } /** * lasso_session_init_provider_ids: * @session: a #LassoSession * * Initializes internal assertions providers list, used to iterate in logout * process. **/ void lasso_session_init_provider_ids(LassoSession *session) { g_return_if_fail(LASSO_IS_SESSION(session)); g_return_if_fail(session->private_data); lasso_release_list_of_strings(session->private_data->providerIDs); g_hash_table_foreach(session->private_data->nid_and_session_indexes, (GHFunc)add_providerID, session); } /** * lasso_session_is_empty: * @session: a #LassoSession * * Returns %TRUE if session is empty. * * Return value: %TRUE if empty **/ gboolean lasso_session_is_empty(LassoSession *session) { if (session == NULL) { return TRUE; } if (g_hash_table_size(session->assertions) + g_hash_table_size(session->private_data->status) + g_hash_table_size(session->private_data->assertions_by_id) + g_hash_table_size(session->private_data->nid_and_session_indexes)) { return FALSE; } return TRUE; } /** * lasso_session_count_assertions: * @session: a #LassoSession object * * Return the number of assertion currently recored in the session. * * Return value: a positive value or -1 if session is an invalid #LassoSession object. */ gint lasso_session_count_assertions(LassoSession *session) { GHashTable *hashtable; if (! LASSO_IS_SESSION(session)) return -1; if (lasso_flag_thin_sessions) hashtable = session->private_data->nid_and_session_indexes; else hashtable = session->assertions; return hashtable ? g_hash_table_size(hashtable) : 0; } gboolean lasso_session_is_dirty(LassoSession *session) { lasso_return_val_if_invalid_param(SESSION, session, TRUE); return session->is_dirty; } /** * lasso_session_remove_assertion: * @session: a #LassoSession * @providerID: the provider ID * * Removes assertion for @providerID from @session. * * Return value: 0 on success; or a negative value otherwise. **/ gint lasso_session_remove_assertion(LassoSession *session, const gchar *providerID) { int rc = 0; gboolean ok1, ok2; lasso_bad_param(SESSION, session); lasso_return_val_if_fail(! lasso_strisempty(providerID), LASSO_PARAM_ERROR_INVALID_VALUE); ok1 = g_hash_table_remove(session->assertions, providerID); ok2 = g_hash_table_remove(session->private_data->nid_and_session_indexes, providerID); if (ok1 || ok2) { session->is_dirty = TRUE; } else { rc = LASSO_PROFILE_ERROR_MISSING_ASSERTION; } return rc; } /** * lasso_session_remove_status: * @session: a #LassoSession * @providerID: the provider ID * * Removes status for @providerID from @session. * * Return value: 0 on success; or a negative value otherwise. **/ gint lasso_session_remove_status(LassoSession *session, const gchar *providerID) { g_return_val_if_fail(session != NULL, LASSO_PARAM_ERROR_INVALID_VALUE); g_return_val_if_fail(providerID != NULL, LASSO_PARAM_ERROR_INVALID_VALUE); if (g_hash_table_remove(session->private_data->status, providerID)) { session->is_dirty = TRUE; return 0; } return LASSO_PROFILE_ERROR_MISSING_STATUS_CODE; } /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static LassoNodeClass *parent_class = NULL; typedef struct _DumpContext { xmlNode *parent; } DumpContext; static void add_assertion_childnode(gchar *key, LassoLibAssertion *value, DumpContext *context) { xmlNode *t; xmlNode *xmlnode; xmlnode = context->parent; t = xmlNewTextChild(xmlnode, NULL, (xmlChar*)"Assertion", NULL); xmlSetProp(t, (xmlChar*)"RemoteProviderID", (xmlChar*)key); xmlAddChild(t, lasso_node_get_xmlNode(LASSO_NODE(value), TRUE)); } xmlChar * xmlNode_to_base64(xmlNode *node) { gchar *buffer = NULL; xmlChar *ret = NULL; buffer = lasso_xmlnode_to_string(node, 0, 0); ret = xmlSecBase64Encode(BAD_CAST buffer, strlen((char*)buffer), 0); lasso_release_string(buffer); return ret; } static void add_assertion_by_id(gchar *key, xmlNode *value, DumpContext *context) { xmlNode *t, *xmlnode; xmlChar *content; xmlnode = context->parent; t = xmlNewTextChild(xmlnode, NULL, (xmlChar*)"Assertion", NULL); xmlSetProp(t, (xmlChar*)"ID", (xmlChar*)key); content = xmlNode_to_base64(value); if (content) { // xmlAddChild(t, xmlCopyNode(value, 1)); xmlNodeSetContent(t, content); xmlFree(content); } } static void add_status_childnode(gchar *key, LassoSamlpStatus *value, DumpContext *context) { xmlNode *t; xmlNode *xmlnode; xmlnode = context->parent; t = xmlNewTextChild(xmlnode, NULL, (xmlChar*)"Status", NULL); xmlSetProp(t, (xmlChar*)"RemoteProviderID", (xmlChar*)key); xmlAddChild(t, lasso_node_get_xmlNode(LASSO_NODE(value), TRUE)); } #define NID_AND_SESSION_INDEX "NidAndSessionIndex" #define SESSION_INDEX "SessionIndex" #define PROVIDER_ID "ProviderID" #define ASSERTION_ID "AssertionID" static void xmlnode_add_assertion_nid_and_session_indexes(gchar *key, GList *nid_and_session_indexes, DumpContext *context) { GList *iter; if (! nid_and_session_indexes) { return; } lasso_foreach(iter, nid_and_session_indexes) { struct _NidAndSessionIndex *nid_and_session_index = iter->data; xmlNode *node = xmlSecAddChild(context->parent, BAD_CAST NID_AND_SESSION_INDEX, BAD_CAST LASSO_LASSO_HREF); xmlSetProp(node, BAD_CAST PROVIDER_ID, BAD_CAST key); xmlSetProp(node, BAD_CAST ASSERTION_ID, BAD_CAST nid_and_session_index->assertion_id); if (nid_and_session_index->session_index) { xmlSetProp(node, BAD_CAST SESSION_INDEX, BAD_CAST nid_and_session_index->session_index); } xmlSecAddChildNode(node, lasso_node_get_xmlNode(nid_and_session_index->name_id, FALSE)); } } static xmlNode* get_xmlNode(LassoNode *node, G_GNUC_UNUSED gboolean lasso_dump) { xmlNode *xmlnode; LassoSession *session = LASSO_SESSION(node); DumpContext context; xmlnode = xmlNewNode(NULL, (xmlChar*)"Session"); context.parent = xmlnode; xmlSetNs(xmlnode, xmlNewNs(xmlnode, (xmlChar*)LASSO_LASSO_HREF, NULL)); xmlSetProp(xmlnode, (xmlChar*)"Version", (xmlChar*)"2"); if (g_hash_table_size(session->assertions)) g_hash_table_foreach(session->assertions, (GHFunc)add_assertion_childnode, &context); if (g_hash_table_size(session->private_data->status)) g_hash_table_foreach(session->private_data->status, (GHFunc)add_status_childnode, &context); if (g_hash_table_size(session->private_data->assertions_by_id)) { g_hash_table_foreach(session->private_data->assertions_by_id, (GHFunc)add_assertion_by_id, &context); } if (g_hash_table_size(session->private_data->nid_and_session_indexes)) { g_hash_table_foreach(session->private_data->nid_and_session_indexes, (GHFunc)xmlnode_add_assertion_nid_and_session_indexes, &context); } return xmlnode; } xmlNode* base64_to_xmlNode(xmlChar *buffer) { char *decoded = NULL; int decoded_len = 0; xmlDoc *doc = NULL; xmlNode *ret = NULL; if (! lasso_base64_decode((char*)buffer, &decoded, &decoded_len)) goto cleanup; doc = xmlParseMemory(decoded, decoded_len); if (doc == NULL) goto cleanup; ret = xmlDocGetRootElement(doc); if (ret) { ret = xmlCopyNode(ret, 1); } cleanup: lasso_release_string(decoded); lasso_release_doc(doc); return ret; } static void init_from_xml_nid_and_session_index(LassoNode *node, xmlNode *nid_and_session_index_node) { xmlChar *session_index = NULL; xmlChar *provider_id = NULL; xmlChar *assertion_id = NULL; xmlNode *nid; LassoNode *name_id = NULL; struct _NidAndSessionIndex *nid_and_session_index; provider_id = xmlGetProp(nid_and_session_index_node, BAD_CAST PROVIDER_ID); if (! provider_id) goto cleanup; assertion_id = xmlGetProp(nid_and_session_index_node, BAD_CAST ASSERTION_ID); if (! assertion_id) goto cleanup; nid = xmlSecGetNextElementNode(nid_and_session_index_node->children); if (! nid) goto cleanup; name_id = lasso_node_new_from_xmlNode(nid); if (! name_id) goto cleanup; session_index = xmlGetProp(nid_and_session_index_node, BAD_CAST SESSION_INDEX); nid_and_session_index = lasso_new_nid_and_session_index(name_id, (char*)assertion_id, (char*)session_index); lasso_session_add_nid_and_session_index((LassoSession*)node, (char*)provider_id, nid_and_session_index); cleanup: lasso_release_xml_string(session_index); lasso_release_xml_string(provider_id); lasso_release_xml_string(assertion_id); lasso_release_gobject(name_id); } static int init_from_xml(LassoNode *node, xmlNode *xmlnode) { LassoSession *session = LASSO_SESSION(node); xmlNode *t; xmlNode *n; t = xmlnode->children; while (t) { if (t->type != XML_ELEMENT_NODE) { t = t->next; continue; } if (strcmp((char*)t->name, "Assertion") == 0) { xmlChar* value; n = t->children; while (n && n->type != XML_ELEMENT_NODE) n = n->next; if (n) { LassoNode *assertion; if ((value = xmlGetProp(t, (xmlChar*)"RemoteProviderID"))) { assertion = lasso_node_new_from_xmlNode(n); lasso_session_add_assertion_simple(session, (char*)value, assertion); /* automatic upgrade from old session serialization to the new */ lasso_session_add_assertion_nid_and_session_index(session, (char*)value, assertion); lasso_release_gobject(assertion); xmlFree(value); } } else if ((value = xmlGetProp(t, (xmlChar*)"ID"))) { xmlChar *content; xmlNode *assertion; content = xmlNodeGetContent(t); if (content) { assertion = base64_to_xmlNode(content); if (assertion) { lasso_session_add_assertion_with_id(session, (char*)value, assertion); xmlFreeNode(assertion); } xmlFree(content); } xmlFree(value); } } if (strcmp((char*)t->name, "Status") == 0) { n = t->children; while (n && n->type != XML_ELEMENT_NODE) n = n->next; if (n) { LassoNode *status; status = lasso_node_new_from_xmlNode(n); g_hash_table_insert(session->private_data->status, xmlGetProp(t, (xmlChar*)"RemoteProviderID"), status); } } if (xmlSecCheckNodeName(t, BAD_CAST NID_AND_SESSION_INDEX, BAD_CAST LASSO_LASSO_HREF)) { init_from_xml_nid_and_session_index(node, t); } t = t->next; } return 0; } /*****************************************************************************/ /* overridden parent class methods */ /*****************************************************************************/ static void dispose(GObject *object) { LassoSession *session = LASSO_SESSION(object); if (! session->private_data || session->private_data->dispose_has_run == TRUE) return; session->private_data->dispose_has_run = TRUE; lasso_release_ghashtable(session->assertions); lasso_release_ghashtable(session->private_data->status); lasso_release_list_of_strings(session->private_data->providerIDs); lasso_release_ghashtable(session->private_data->assertions_by_id); lasso_release_ghashtable(session->private_data->nid_and_session_indexes); G_OBJECT_CLASS(parent_class)->dispose(object); } /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void instance_init(LassoSession *session, G_GNUC_UNUSED void *unused) { session->private_data = LASSO_SESSION_GET_PRIVATE(session); session->private_data->dispose_has_run = FALSE; session->private_data->providerIDs = NULL; session->private_data->status = g_hash_table_new_full(g_str_hash, g_str_equal, (GDestroyNotify)g_free, (GDestroyNotify)lasso_node_destroy); session->private_data->assertions_by_id = g_hash_table_new_full(g_str_hash, g_str_equal, (GDestroyNotify)g_free, (GDestroyNotify)xmlFree); session->assertions = g_hash_table_new_full(g_str_hash, g_str_equal, (GDestroyNotify)g_free, (GDestroyNotify)lasso_node_destroy); session->is_dirty = FALSE; session->private_data->nid_and_session_indexes = g_hash_table_new_full(g_str_hash, g_str_equal, (GDestroyNotify)g_free, (GDestroyNotify)lasso_release_list_of_nid_an_session_index); } static void class_init(LassoSessionClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->get_xmlNode = get_xmlNode; nclass->init_from_xml = init_from_xml; nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "Session"); lasso_node_class_set_ns(nclass, LASSO_LASSO_HREF, LASSO_LASSO_PREFIX); g_type_class_add_private(nclass, sizeof(LassoSessionPrivate)); G_OBJECT_CLASS(klass)->dispose = dispose; } GType lasso_session_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoSessionClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoSession), 0, (GInstanceInitFunc) instance_init, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoSession", &this_info, 0); } return this_type; } /** * lasso_session_new: * * Creates a new #LassoSession. * * Return value: a newly created #LassoSession **/ LassoSession* lasso_session_new() { return g_object_new(LASSO_TYPE_SESSION, NULL); } /** * lasso_session_new_from_dump: * @dump: XML server dump * * Restores the @dump to a new #LassoSession. * * Return value: a newly created #LassoSession; or NULL if an error occured **/ LassoSession* lasso_session_new_from_dump(const gchar *dump) { LassoSession *session; session = (LassoSession*)lasso_node_new_from_dump(dump); if (! LASSO_IS_SESSION(session)) { lasso_release_gobject(session); } return session; } /** * lasso_session_dump: * @session: a #LassoSession * * Dumps @session content to an XML string. * * Return value:(transfer full): the dump string. It must be freed by the caller. **/ gchar* lasso_session_dump(LassoSession *session) { if (lasso_session_is_empty(session)) return g_strdup(""); return lasso_node_dump(LASSO_NODE(session)); } /** * lasso_session_destroy: * @session: a #LassoSession * * Destroys a session. **/ void lasso_session_destroy(LassoSession *session) { if (session == NULL) return; lasso_node_destroy(LASSO_NODE(session)); } gboolean lasso_session_has_slo_session(LassoSession *session, const gchar *provider_id) { if (! LASSO_IS_SESSION(session)) return FALSE; return g_hash_table_lookup(session->private_data->nid_and_session_indexes, provider_id) != NULL; } lasso-2.8.2/lasso/id-ff/PaxHeaders/name_identifier_mapping.h0000644000000000000000000000013214114336625021043 xustar0030 mtime=1630649749.802436733 30 atime=1678814151.008993845 30 ctime=1678814320.965953058 lasso-2.8.2/lasso/id-ff/name_identifier_mapping.h0000644000175000017500000000671414114336625024323 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_NAME_IDENTIFIER_MAPPING_H__ #define __LASSO_NAME_IDENTIFIER_MAPPING_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "profile.h" #include "../xml/lib_name_identifier_mapping_request.h" #include "../xml/lib_name_identifier_mapping_response.h" #define LASSO_TYPE_NAME_IDENTIFIER_MAPPING (lasso_name_identifier_mapping_get_type()) #define LASSO_NAME_IDENTIFIER_MAPPING(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_NAME_IDENTIFIER_MAPPING, \ LassoNameIdentifierMapping)) #define LASSO_NAME_IDENTIFIER_MAPPING_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_NAME_IDENTIFIER_MAPPING, \ LassoNameIdentifierMappingClass)) #define LASSO_IS_NAME_IDENTIFIER_MAPPING(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_NAME_IDENTIFIER_MAPPING)) #define LASSO_IS_NAME_IDENTIFIER_MAPPING_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_NAME_IDENTIFIER_MAPPING)) #define LASSO_NAME_IDENTIFIER_MAPPING_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_NAME_IDENTIFIER_MAPPING, \ LassoNameIdentifierMappingClass)) typedef struct _LassoNameIdentifierMapping LassoNameIdentifierMapping; typedef struct _LassoNameIdentifierMappingClass LassoNameIdentifierMappingClass; struct _LassoNameIdentifierMapping { LassoProfile parent; /*< public >*/ gchar *targetNameIdentifier; /*< private >*/ void *private_data; /* reserved for future use */ }; struct _LassoNameIdentifierMappingClass { LassoProfileClass parent; }; LASSO_EXPORT GType lasso_name_identifier_mapping_get_type(void); LASSO_EXPORT LassoNameIdentifierMapping* lasso_name_identifier_mapping_new(LassoServer *server); LASSO_EXPORT lasso_error_t lasso_name_identifier_mapping_build_request_msg( LassoNameIdentifierMapping *mapping); LASSO_EXPORT lasso_error_t lasso_name_identifier_mapping_build_response_msg( LassoNameIdentifierMapping *mapping); LASSO_EXPORT void lasso_name_identifier_mapping_destroy( LassoNameIdentifierMapping *mapping); LASSO_EXPORT lasso_error_t lasso_name_identifier_mapping_init_request( LassoNameIdentifierMapping *mapping, gchar *targetNamespace, gchar *remote_providerID); LASSO_EXPORT lasso_error_t lasso_name_identifier_mapping_process_request_msg( LassoNameIdentifierMapping *mapping, gchar *request_msg); LASSO_EXPORT lasso_error_t lasso_name_identifier_mapping_process_response_msg( LassoNameIdentifierMapping *mapping, gchar *response_msg); LASSO_EXPORT lasso_error_t lasso_name_identifier_mapping_validate_request( LassoNameIdentifierMapping *mapping); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_NAME_IDENTIFIER_MAPPING_H__ */ lasso-2.8.2/lasso/id-ff/PaxHeaders/federation.c0000644000000000000000000000013214364261206016320 xustar0030 mtime=1674666630.730769021 30 atime=1678814216.117359167 30 ctime=1678814320.977953127 lasso-2.8.2/lasso/id-ff/federation.c0000644000175000017500000002105514364261206021573 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ /** * SECTION:federation * @short_description: Principal federation between two providers * * A #LassoFederation represents the an identifier shared by two provider, usually an identity * provider and a service provider. Instance of this class are usually never accessed directly. **/ #include "../utils.h" #include "../xml/private.h" #include "federation.h" #include "provider.h" #include "../xml/saml-2.0/saml2_name_id.h" struct _LassoFederationPrivate { gboolean dispose_has_run; }; /*****************************************************************************/ /* static methods/functions */ /*****************************************************************************/ static LassoNode* lasso_federation_build_name_identifier(const gchar *nameQualifier, const gchar *format, const gchar *content) { LassoSamlNameIdentifier *nameIdentifier; nameIdentifier = LASSO_SAML_NAME_IDENTIFIER(lasso_saml_name_identifier_new()); if (content == NULL) { nameIdentifier->content = lasso_build_unique_id(32); } else { nameIdentifier->content = g_strdup(content); } nameIdentifier->NameQualifier = g_strdup(nameQualifier); nameIdentifier->Format = g_strdup(format); return LASSO_NODE(nameIdentifier); } /*****************************************************************************/ /* public methods */ /*****************************************************************************/ /** * lasso_federation_build_local_name_identifier: * @federation: a #LassoFederation * @nameQualifier: the name identifier qualifier * @format: the name identifier format * @content: the name identifier content * * Builds federation local name identifier. **/ void lasso_federation_build_local_name_identifier(LassoFederation *federation, const gchar *nameQualifier, const gchar *format, const gchar *content) { federation->local_nameIdentifier = lasso_federation_build_name_identifier( nameQualifier, format, content); } /** * lasso_federation_destroy: * @federation: a #LassoFederation * * Destroys a federation. **/ void lasso_federation_destroy(LassoFederation *federation) { lasso_node_destroy(LASSO_NODE(federation)); } /** * lasso_federation_verify_name_identifier: * @federation: a #LassoFederation * @name_identifier: the #LassoSamlNameIdentifier * * Checks whether federation is for @name_identifier. * * Return value: %TRUE if the federation is for @name_identifier. **/ gboolean lasso_federation_verify_name_identifier(LassoFederation *federation, LassoNode *name_identifier) { LassoProtocolConformance conformance; char *s, *content; g_return_val_if_fail(LASSO_IS_FEDERATION(federation), FALSE); g_return_val_if_fail(LASSO_IS_NODE(name_identifier), FALSE); if (LASSO_IS_SAML_NAME_IDENTIFIER(name_identifier)) { conformance = LASSO_PROTOCOL_LIBERTY_1_2; content = LASSO_SAML_NAME_IDENTIFIER(name_identifier)->content; } else if (LASSO_IS_SAML2_NAME_ID(name_identifier)) { conformance = LASSO_PROTOCOL_SAML_2_0; content = LASSO_SAML2_NAME_ID(name_identifier)->content; } else { return FALSE; } /* verify local name identifier */ if (federation->local_nameIdentifier != NULL) { if (conformance == LASSO_PROTOCOL_LIBERTY_1_2) { s = LASSO_SAML_NAME_IDENTIFIER(federation->local_nameIdentifier)->content; } else { s = LASSO_SAML2_NAME_ID(federation->local_nameIdentifier)->content; } if (strcmp(s, content) == 0) { return TRUE; } } /* verify remote name identifier */ if (federation->remote_nameIdentifier != NULL) { if (conformance == LASSO_PROTOCOL_LIBERTY_1_2) { s = LASSO_SAML_NAME_IDENTIFIER(federation->remote_nameIdentifier)->content; } else { s = LASSO_SAML2_NAME_ID(federation->remote_nameIdentifier)->content; } if (strcmp(s, content) == 0) { return TRUE; } } return FALSE; } /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "LocalNameIdentifier", SNIPPET_NODE_IN_CHILD, G_STRUCT_OFFSET(LassoFederation, local_nameIdentifier), NULL, NULL, NULL}, { "RemoteNameIdentifier", SNIPPET_NODE_IN_CHILD, G_STRUCT_OFFSET(LassoFederation, remote_nameIdentifier), NULL, NULL, NULL}, { "RemoteProviderID", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoFederation, remote_providerID), NULL, NULL, NULL}, { "FederationDumpVersion", SNIPPET_ATTRIBUTE, 0, NULL, NULL, NULL }, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; static xmlNode* get_xmlNode(LassoNode *node, gboolean lasso_dump) { xmlNode *xmlnode; xmlnode = parent_class->get_xmlNode(node, lasso_dump); xmlSetProp(xmlnode, (xmlChar*)"FederationDumpVersion", (xmlChar*)"2"); return xmlnode; } static int init_from_xml(LassoNode *node, xmlNode *xmlnode) { return parent_class->init_from_xml(node, xmlnode); } /*****************************************************************************/ /* overridden parent class methods */ /*****************************************************************************/ static void dispose(GObject *object) { LassoFederation *federation = LASSO_FEDERATION(object); if (federation->private_data->dispose_has_run) { return; } federation->private_data->dispose_has_run = TRUE; G_OBJECT_CLASS(parent_class)->dispose(object); } static void finalize(GObject *object) { LassoFederation *federation = LASSO_FEDERATION(object); lasso_release(federation->private_data); G_OBJECT_CLASS(parent_class)->finalize(object); } /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void instance_init(LassoFederation *federation, G_GNUC_UNUSED void *unused) { federation->private_data = g_new0(LassoFederationPrivate, 1); federation->private_data->dispose_has_run = FALSE; federation->remote_providerID = NULL; federation->local_nameIdentifier = NULL; federation->remote_nameIdentifier = NULL; } static void class_init(LassoFederationClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->get_xmlNode = get_xmlNode; nclass->init_from_xml = init_from_xml; nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "Federation"); lasso_node_class_set_ns(nclass, LASSO_LASSO_HREF, LASSO_LASSO_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); G_OBJECT_CLASS(klass)->dispose = dispose; G_OBJECT_CLASS(klass)->finalize = finalize; } GType lasso_federation_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoFederationClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoFederation), 0, (GInstanceInitFunc) instance_init, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoFederation", &this_info, 0); } return this_type; } /** * lasso_federation_new: * @remote_providerID: remote Provider ID * * Creates a new #LassoFederation with the remote provider. * * Return value: a newly created #LassoFederation **/ LassoFederation* lasso_federation_new(const gchar *remote_providerID) { LassoFederation *federation; g_return_val_if_fail(remote_providerID != NULL, NULL); federation = LASSO_FEDERATION(g_object_new(LASSO_TYPE_FEDERATION, NULL)); federation->remote_providerID = g_strdup(remote_providerID); return federation; } lasso-2.8.2/lasso/id-ff/PaxHeaders/server.c0000644000000000000000000000013214364261206015506 xustar0030 mtime=1674666630.742769094 30 atime=1678814228.461428747 30 ctime=1678814320.993953218 lasso-2.8.2/lasso/id-ff/server.c0000644000175000017500000010506214364261206020762 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ /** * SECTION:server * @short_description: Representation of the current server * * It holds the data about a provider, other providers it knows, which * certificates to use, etc. **/ #include "../xml/private.h" #include #include #include #include "server.h" #include "providerprivate.h" #include "serverprivate.h" #include "../saml-2.0/serverprivate.h" #include "../utils.h" #include "../debug.h" #include "../lasso_config.h" #define RSA_SHA1 "RSA_SHA1" #define DSA_SHA1 "DSA_SHA1" #define HMAC_SHA1 "HMAC_SHA1" #define RSA_SHA256 "RSA_SHA256" #define HMAC_SHA256 "HMAC_SHA256" #define RSA_SHA384 "RSA_SHA384" #define HMAC_SHA384 "HMAC_SHA384" #define RSA_SHA512 "RSA_SHA512" #define HMAC_SHA512 "HMAC_SHA512" /*****************************************************************************/ /* public methods */ /*****************************************************************************/ static lasso_error_t lasso_server_add_provider_helper(LassoServer *server, LassoProviderRole role, const gchar *metadata, const gchar *public_key, const gchar *ca_cert_chain, LassoProvider *(*provider_constructor)(LassoProviderRole role, const char *metadata, const char *public_key, const char *ca_cert_chain)) { LassoProvider *provider; lasso_error_t rc = 0; g_return_val_if_fail(LASSO_IS_SERVER(server), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); g_return_val_if_fail(metadata != NULL, LASSO_PARAM_ERROR_INVALID_VALUE); provider = provider_constructor(role, metadata, public_key, ca_cert_chain); goto_cleanup_if_fail_with_rc(provider != NULL, critical_error(LASSO_SERVER_ERROR_ADD_PROVIDER_FAILED)); provider->role = role; if (LASSO_PROVIDER(server)->private_data->conformance == LASSO_PROTOCOL_SAML_2_0 && provider->private_data->conformance != LASSO_PROTOCOL_SAML_2_0) { goto_cleanup_with_rc(LASSO_SERVER_ERROR_ADD_PROVIDER_PROTOCOL_MISMATCH); } if (LASSO_PROVIDER(server)->private_data->conformance == LASSO_PROTOCOL_LIBERTY_1_2 && provider->private_data->conformance > LASSO_PROTOCOL_LIBERTY_1_2) { goto_cleanup_with_rc(LASSO_SERVER_ERROR_ADD_PROVIDER_PROTOCOL_MISMATCH); } lasso_server_add_provider2(server, provider); cleanup: lasso_release_gobject(provider); return rc; } /** * lasso_server_add_provider: * @server: a #LassoServer * @role: provider role, identity provider or service provider * @metadata: path to the provider metadata file * @public_key:(allow-none): provider public key file (may be a certificate) or NULL * @ca_cert_chain:(allow-none): provider CA certificate chain file or NULL * * Creates a new #LassoProvider and makes it known to the @server * * Return value: 0 on success; a negative value if an error occured. **/ lasso_error_t lasso_server_add_provider(LassoServer *server, LassoProviderRole role, const gchar *metadata, const gchar *public_key, const gchar *ca_cert_chain) { return lasso_server_add_provider_helper(server, role, metadata, public_key, ca_cert_chain, lasso_provider_new); } /** * lasso_server_add_provider2: * @server: a #LassoServer object * @provider: a #LassoProvider object * * Add @provider to the list of known providers object of @server. * * Return 0 if successful, LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ otherwise. */ lasso_error_t lasso_server_add_provider2(LassoServer *server, LassoProvider *provider) { lasso_bad_param(SERVER, server); lasso_bad_param(PROVIDER, provider); g_return_val_if_fail(provider->ProviderID, LASSO_PARAM_ERROR_NON_INITIALIZED_OBJECT); g_return_val_if_fail(server->providers, LASSO_PARAM_ERROR_NON_INITIALIZED_OBJECT); g_hash_table_insert(server->providers, g_strdup(provider->ProviderID), g_object_ref(provider)); return 0; } /** * lasso_server_add_provider_from_buffer: * @server: a #LassoServer * @role: provider role, identity provider or service provider * @metadata: a string buffer containg the metadata file for a new provider * @public_key:(allow-none): provider public key file (may be a certificate) or NULL * @ca_cert_chain:(allow-none): provider CA certificate chain file or NULL * * Creates a new #LassoProvider and makes it known to the @server * * Return value: 0 on success; a negative value if an error occured. **/ gint lasso_server_add_provider_from_buffer(LassoServer *server, LassoProviderRole role, const gchar *metadata, const gchar *public_key, const gchar *ca_cert_chain) { return lasso_server_add_provider_helper(server, role, metadata, public_key, ca_cert_chain, lasso_provider_new_from_buffer); } /** * lasso_server_destroy: * @server: a #LassoServer * * Destroys a server. **/ void lasso_server_destroy(LassoServer *server) { lasso_node_destroy(LASSO_NODE(server)); } /** * lasso_server_set_encryption_private_key: * @server: a #LassoServer * @filename_or_buffer:(allow-none): file name of the encryption key to load or its content as a * NULL-terminated string. * * Load an encryption private key from a file and set it in the server object * * If @filename_or_buffer is NULL, it frees the currently setted key. * * Return value: 0 on success; another value if an error occured. * Deprecated: 2.3: Use lasso_server_set_encryption_private_key_with_password() instead. **/ int lasso_server_set_encryption_private_key(LassoServer *server, const gchar *filename_or_buffer) { return lasso_server_set_encryption_private_key_with_password(server, filename_or_buffer, NULL); } /** * lasso_server_set_encryption_private_key_with_password: * @server: a #LassoServer * @filename_or_buffer:(allow-none): file name of the encryption key to load or its content as a * NULL-terminated string. * @password:(allow-none): an optional password to decrypt the encryption key. * * Load an encryption private key from a file and set it in the server object. If @password is * non-NULL try to decrypt the key with it. * * If @filename_or_buffer is NULL, it frees the currently setted key. * * Return value: 0 on success; another value if an error occured. * Since: 2.3 **/ int lasso_server_set_encryption_private_key_with_password(LassoServer *server, const gchar *filename_or_buffer, const gchar *password) { if (filename_or_buffer) { xmlSecKey *key = lasso_xmlsec_load_private_key(filename_or_buffer, password, server->signature_method, NULL); if (! key || ! (xmlSecKeyGetType(key) & xmlSecKeyDataTypePrivate)) { return LASSO_SERVER_ERROR_SET_ENCRYPTION_PRIVATE_KEY_FAILED; } lasso_list_add_new_sec_key(server->private_data->encryption_private_keys, key); } return 0; } /** * lasso_server_load_affiliation: * @server: a #LassoServer * @filename: file name of the affiliation metadata to load * * Load an affiliation metadata file into @server; this must be called after * providers have been added to @server. * * Return value: 0 on success; another value if an error occured. **/ int lasso_server_load_affiliation(LassoServer *server, const gchar *filename) { LassoProvider *provider = LASSO_PROVIDER(server); xmlDoc *doc; xmlNode *node; int rc = 0; doc = lasso_xml_parse_file(filename); goto_cleanup_if_fail_with_rc (doc != NULL, LASSO_XML_ERROR_INVALID_FILE); node = xmlDocGetRootElement(doc); goto_cleanup_if_fail_with_rc (node != NULL && node->ns != NULL, LASSO_XML_ERROR_NODE_NOT_FOUND); if (provider->private_data->conformance == LASSO_PROTOCOL_SAML_2_0) { rc = lasso_saml20_server_load_affiliation(server, node); } else { /* affiliations are not supported in ID-FF 1.2 mode */ rc = LASSO_ERROR_UNIMPLEMENTED; } cleanup: lasso_release_doc(doc); return rc; } /** * lasso_server_get_endpoint_url_by_id: * @server: a #LassoServer * @provider_id: the EntityID whose endpoints will be examined. * @endpoint_description: string describing criteria used to select endpoint. * * Locate the provider in the server's list of providers, then select an * endpoint given the @endpoint_description and return than endpoint's URL. * If the provider cannot be found or if the provider does not have a * matching endpoint NULL will be returned. * * Returns: url (must be freed by caller) */ gchar * lasso_server_get_endpoint_url_by_id(const LassoServer *server, const gchar *provider_id, const gchar *endpoint_description) { LassoProvider *provider; gchar *url = NULL; provider = lasso_server_get_provider(server, provider_id); if (!provider) return NULL; url = lasso_provider_get_metadata_one(provider, endpoint_description); return url; } /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "PrivateKeyFilePath", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoServer, private_key), NULL, NULL, NULL}, { "PrivateKeyPassword", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoServer, private_key_password), NULL, NULL, NULL}, { "CertificateFilePath", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoServer, certificate), NULL, NULL, NULL}, { "SignatureMethod", SNIPPET_ATTRIBUTE, 0, NULL, NULL, NULL }, { "Providers", SNIPPET_LIST_NODES, 0, NULL, NULL, NULL }, { "ServerDumpVersion", SNIPPET_ATTRIBUTE, 0, NULL, NULL, NULL }, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; static void add_provider_childnode(G_GNUC_UNUSED gchar *key, LassoProvider *value, xmlNode *xmlnode) { xmlAddChild(xmlnode, lasso_node_get_xmlNode(LASSO_NODE(value), TRUE)); } static xmlNode* get_xmlNode(LassoNode *node, gboolean lasso_dump) { LassoServer *server = LASSO_SERVER(node); char *signature_methods[] = { NULL, RSA_SHA1, DSA_SHA1, HMAC_SHA1, RSA_SHA256, HMAC_SHA256, RSA_SHA384, HMAC_SHA384, RSA_SHA512, HMAC_SHA512, }; xmlNode *xmlnode = NULL, *ret_xmlnode = NULL; xmlnode = parent_class->get_xmlNode(node, lasso_dump); xmlSetProp(xmlnode, (xmlChar*)"ServerDumpVersion", (xmlChar*)"2"); if (server->signature_method >= G_N_ELEMENTS(signature_methods)) goto cleanup; xmlSetProp(xmlnode, (xmlChar*)"SignatureMethod", (xmlChar*)signature_methods[server->signature_method]); /* Providers */ if (g_hash_table_size(server->providers)) { xmlNode *t; t = xmlNewTextChild(xmlnode, NULL, (xmlChar*)"Providers", NULL); g_hash_table_foreach(server->providers, (GHFunc)add_provider_childnode, t); } xmlCleanNs(xmlnode); lasso_transfer_xml_node(ret_xmlnode, xmlnode); cleanup: lasso_release_xml_node(xmlnode); return ret_xmlnode; } static int init_from_xml(LassoNode *node, xmlNode *xmlnode) { LassoServer *server = LASSO_SERVER(node); xmlNode *t; xmlChar *s; int rc = 0; rc = parent_class->init_from_xml(node, xmlnode); if (server->private_key) { lasso_server_set_encryption_private_key_with_password(server, server->private_key, server->private_key_password); } if (rc) return rc; s = xmlGetProp(xmlnode, (xmlChar*)"SignatureMethod"); if (lasso_strisequal((char*) s, RSA_SHA1)) server->signature_method = LASSO_SIGNATURE_METHOD_RSA_SHA1; else if (lasso_strisequal((char*) s, DSA_SHA1)) server->signature_method = LASSO_SIGNATURE_METHOD_DSA_SHA1; else if (lasso_strisequal((char*) s, HMAC_SHA1)) server->signature_method = LASSO_SIGNATURE_METHOD_HMAC_SHA1; else if (lasso_strisequal((char*) s, RSA_SHA256)) server->signature_method = LASSO_SIGNATURE_METHOD_RSA_SHA256; else if (lasso_strisequal((char*) s, HMAC_SHA256)) server->signature_method = LASSO_SIGNATURE_METHOD_HMAC_SHA256; else if (lasso_strisequal((char*) s, RSA_SHA384)) server->signature_method = LASSO_SIGNATURE_METHOD_RSA_SHA384; else if (lasso_strisequal((char*) s, HMAC_SHA384)) server->signature_method = LASSO_SIGNATURE_METHOD_HMAC_SHA384; else if (lasso_strisequal((char*) s, RSA_SHA512)) server->signature_method = LASSO_SIGNATURE_METHOD_RSA_SHA512; else if (lasso_strisequal((char*) s, HMAC_SHA512)) server->signature_method = LASSO_SIGNATURE_METHOD_HMAC_SHA512; else { warning("Unable to rebuild a LassoServer object from XML, bad SignatureMethod: %s", s); goto_cleanup_with_rc(LASSO_XML_ERROR_OBJECT_CONSTRUCTION_FAILED); } t = xmlSecGetNextElementNode(xmlnode->children); while (t) { /* Providers */ if (strcmp((char*)t->name, "Providers") == 0) { xmlNode *t2 = xmlSecGetNextElementNode(t->children); while (t2) { LassoProvider *p; p = g_object_new(LASSO_TYPE_PROVIDER, NULL); lasso_check_good_rc(lasso_node_init_from_xml((LassoNode*)p, t2)) if (lasso_provider_load_public_key(p, LASSO_PUBLIC_KEY_SIGNING)) { g_hash_table_insert(server->providers, g_strdup(p->ProviderID), p); } else { critical("Failed to load signing public key for %s.", p->ProviderID); lasso_release_gobject(p); goto_cleanup_with_rc( LASSO_XML_ERROR_OBJECT_CONSTRUCTION_FAILED); } t2 = xmlSecGetNextElementNode(t2->next); } } t = xmlSecGetNextElementNode(t->next); } cleanup: lasso_release_xml_string(s); return 0; } static gboolean get_first_providerID(gchar *key, G_GNUC_UNUSED gpointer value, char **providerID) { *providerID = key; return TRUE; } static gboolean get_first_providerID_by_role(G_GNUC_UNUSED gchar *key, gpointer value, gpointer _role) { LassoProviderRole role = (LassoProviderRole)_role; LassoProvider *provider = (LassoProvider*)value; if (provider->role == role || role == LASSO_PROVIDER_ROLE_ANY) { return TRUE; } return FALSE; } /** * lasso_server_get_first_providerID_by_role * @server: a #LassoServer * @role: the #LassoProviderRole of the researched provider * * Looks up and returns the provider ID of known provider with the given role. * * Return value: the provider ID, NULL if there are no providers. This string * must be freed by the caller. */ gchar * lasso_server_get_first_providerID_by_role(const LassoServer *server, LassoProviderRole role) { LassoProvider *a_provider; a_provider = LASSO_PROVIDER(g_hash_table_find(server->providers, (GHRFunc) get_first_providerID_by_role, (gpointer)role)); if (a_provider) { return g_strdup(a_provider->ProviderID); } else { return NULL; } } /** * lasso_server_get_first_providerID: * @server: a #LassoServer * * Looks up and returns the provider ID of a known provider * * Return value:(transfer full)(allow-none): the provider ID, NULL if there are no providers. This * string must be freed by the caller. **/ gchar* lasso_server_get_first_providerID(LassoServer *server) { gchar *providerID = NULL; g_hash_table_find(server->providers, (GHRFunc)get_first_providerID, &providerID); return g_strdup(providerID); } /** * lasso_server_get_provider: * @server: a #LassoServer * @providerID: the provider ID * * Looks up for a #LassoProvider whose ID is @providerID and returns it. * * Return value: (transfer none): the #LassoProvider, NULL if it was not found. The * #LassoProvider is owned by Lasso and should not be freed. **/ LassoProvider* lasso_server_get_provider(const LassoServer *server, const gchar *providerID) { if (! LASSO_IS_SERVER(server) || providerID == NULL || strlen(providerID) == 0) { return NULL; } return g_hash_table_lookup(server->providers, providerID); } static gboolean get_providerID_with_hash(gchar *key, G_GNUC_UNUSED gpointer value, char **providerID) { char *hash = *providerID; xmlChar *hash_providerID; char *b64_hash_providerID; hash_providerID = (xmlChar*)lasso_sha1(key); b64_hash_providerID = (char*)xmlSecBase64Encode(hash_providerID, 20, 0); xmlFree(hash_providerID); if (strcmp(b64_hash_providerID, hash) == 0) { xmlFree(b64_hash_providerID); *providerID = key; return TRUE; } xmlFree(b64_hash_providerID); return FALSE; } /** * lasso_server_get_providerID_from_hash: * @server: a #LassoServer * @b64_hash: the base64-encoded provider ID hash * * Looks up a #LassoProvider whose ID hash is @b64_hash and returns its * provider ID. * * Return value:(transfer full)(allow-none): the provider ID, NULL if it was not found. **/ gchar* lasso_server_get_providerID_from_hash(LassoServer *server, gchar *b64_hash) { gchar *providerID = b64_hash; /* kludge */ if (g_hash_table_find(server->providers, (GHRFunc)get_providerID_with_hash, &providerID)) return g_strdup(providerID); return NULL; } typedef struct { GList *provider_list; LassoProvider *provider; LassoProviderRole role; LassoMdProtocolType protocol_type; LassoHttpMethod http_method; } FilteredProviderListContext; static void filter_provider_list(G_GNUC_UNUSED gpointer key, gpointer value, gpointer user_data) { LassoProvider *remote_provider = (LassoProvider*)value; FilteredProviderListContext *context = (FilteredProviderListContext*)user_data; if (remote_provider->role == context->role) { if (lasso_provider_accept_http_method(context->provider, remote_provider, context->protocol_type, context->http_method, FALSE)) { lasso_list_add_string(context->provider_list, remote_provider->ProviderID); } } } /** * lasso_server_get_filtered_provider_list * @server: a #LassoServer * @role: each returned provider will match this #LassoProviderRole * @protocol_type: provider must have endpoint matching #LassoMdProtocolType and @http_method * @http_method: provider must have endpoint matching #LassoHttpMethod and @protocol_type * * Iterate over the @server providers and build a list of provider EntityID's who * have the specified @role and at least one endpoint matching the * @protocol_type and @http_method. Return a #GList list of EntityID's at the * @provider_list pointer. The caller is responsible for freeing the @provider_list * by calling lasso_release_list_of_strings(). * * Return value:(transfer full)(element-type string): #GList of matching provider EntityID's returned here. */ GList * lasso_server_get_filtered_provider_list(const LassoServer *server, LassoProviderRole role, LassoMdProtocolType protocol_type, LassoHttpMethod http_method) { FilteredProviderListContext context; context.provider_list = NULL; context.provider = LASSO_PROVIDER(server); context.role = role; context.protocol_type = protocol_type; context.http_method = http_method; g_hash_table_foreach(server->providers, filter_provider_list, &context); return context.provider_list; } /*****************************************************************************/ /* overridden parent class methods */ /*****************************************************************************/ static void dispose(GObject *object) { LassoServer *server = LASSO_SERVER(object); if (! server->private_data || server->private_data->dispose_has_run == TRUE) { return; } server->private_data->dispose_has_run = TRUE; lasso_release_list_of_sec_key(server->private_data->encryption_private_keys); lasso_release_list_of_gobjects(server->private_data->svc_metadatas); lasso_release_ghashtable(server->services); /* free allocated memory for hash tables */ lasso_mem_debug("LassoServer", "Providers", server->providers); lasso_release_ghashtable(server->providers); G_OBJECT_CLASS(parent_class)->dispose(G_OBJECT(server)); } static void finalize(GObject *object) { LassoServer *server = LASSO_SERVER(object); int i = 0; lasso_release(server->private_key); if (server->private_key_password) { /* don't use memset() because it may be optimised away by * compiler (since the string is freed just after */ while (server->private_key_password[i]) server->private_key_password[i++] = 0; lasso_release(server->private_key_password); } lasso_release(server->certificate); lasso_release(server->private_data); G_OBJECT_CLASS(parent_class)->finalize(G_OBJECT(server)); } /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void instance_init(LassoServer *server, G_GNUC_UNUSED void *unused) { server->private_data = g_new0(LassoServerPrivate, 1); server->private_data->dispose_has_run = FALSE; server->private_data->encryption_private_keys = NULL; server->private_data->svc_metadatas = NULL; server->providers = g_hash_table_new_full( g_str_hash, g_str_equal, g_free, g_object_unref); server->private_key = NULL; server->private_key_password = NULL; server->certificate = NULL; server->signature_method = lasso_get_default_signature_method(); server->services = g_hash_table_new_full(g_str_hash, g_str_equal, (GDestroyNotify)g_free, g_object_unref); } static void class_init(LassoServerClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "Server"); lasso_node_class_set_ns(nclass, LASSO_LASSO_HREF, LASSO_LASSO_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); nclass->get_xmlNode = get_xmlNode; nclass->init_from_xml = init_from_xml; G_OBJECT_CLASS(klass)->dispose = dispose; G_OBJECT_CLASS(klass)->finalize = finalize; } GType lasso_server_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoServerClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoServer), 0, (GInstanceInitFunc) instance_init, NULL }; this_type = g_type_register_static(LASSO_TYPE_PROVIDER, "LassoServer", &this_info, 0); } return this_type; } /** * lasso_server_new: * @metadata: path to the provider metadata file or NULL, for a LECP server * @private_key:(allow-none): path to the the server private key file or NULL * @private_key_password:(allow-none): password to private key if it is encrypted, or NULL * @certificate:(allow-none): path to the server certificate file, or NULL * * Creates a new #LassoServer. * * Return value: a newly created #LassoServer object; or NULL if an error * occured **/ LassoServer* lasso_server_new(const gchar *metadata, const gchar *private_key, const gchar *private_key_password, const gchar *certificate) { LassoServer *server; server = g_object_new(LASSO_TYPE_SERVER, NULL); /* metadata can be NULL (if server is a LECP) */ if (metadata != NULL) { if (lasso_provider_load_metadata(LASSO_PROVIDER(server), metadata) == FALSE) { message(G_LOG_LEVEL_CRITICAL, "Failed to load metadata from %s.", metadata); lasso_release_gobject(server); return NULL; } } lasso_assign_string(server->certificate, certificate); if (private_key) { lasso_assign_string(server->private_key, private_key); lasso_assign_string(server->private_key_password, private_key_password); if (lasso_server_set_encryption_private_key_with_password(server, private_key, private_key_password) != 0) { message(G_LOG_LEVEL_WARNING, "Cannot load the private key"); lasso_release_gobject(server); return NULL; } } lasso_provider_load_public_key(&server->parent, LASSO_PUBLIC_KEY_SIGNING); lasso_provider_load_public_key(&server->parent, LASSO_PUBLIC_KEY_ENCRYPTION); return server; } /** * lasso_server_new_from_buffers: * @metadata: NULL terminated string containing the content of an ID-FF 1.2 metadata file * @private_key_content:(allow-none): NULL terminated string containing a PEM formatted private key * @private_key_password:(allow-none): a NULL terminated string which is the optional password of * the private key * @certificate_content:(allow-none): NULL terminated string containing a PEM formatted X509 * certificate * * Creates a new #LassoServer. * * Return value: a newly created #LassoServer object; or NULL if an error occured */ LassoServer* lasso_server_new_from_buffers(const char *metadata, const char *private_key_content, const char *private_key_password, const char *certificate_content) { LassoServer *server; server = g_object_new(LASSO_TYPE_SERVER, NULL); /* metadata can be NULL (if server is a LECP) */ if (metadata != NULL) { if (lasso_provider_load_metadata_from_buffer(LASSO_PROVIDER(server), metadata) == FALSE) { message(G_LOG_LEVEL_CRITICAL, "Failed to load metadata from preloaded buffer"); lasso_release_gobject(server); return NULL; } } lasso_assign_string(server->certificate, certificate_content); if (private_key_content) { lasso_assign_string(server->private_key, private_key_content); lasso_assign_string(server->private_key_password, private_key_password); if (lasso_server_set_encryption_private_key_with_password(server, private_key_content, private_key_password) != 0) { message(G_LOG_LEVEL_WARNING, "Cannot load the private key"); lasso_release_gobject(server); return NULL; } } lasso_provider_load_public_key(&server->parent, LASSO_PUBLIC_KEY_SIGNING); lasso_provider_load_public_key(&server->parent, LASSO_PUBLIC_KEY_ENCRYPTION); return server; } /** * lasso_server_new_from_dump: * @dump: XML server dump * * Restores the @dump to a new #LassoServer. * * Return value: a newly created #LassoServer; or NULL if an error occured **/ LassoServer* lasso_server_new_from_dump(const gchar *dump) { LassoServer *server; server = (LassoServer*)lasso_node_new_from_dump(dump); if (! LASSO_IS_SERVER(server)) { lasso_release_gobject(server); } return server; } /** * lasso_server_dump: * @server: a #LassoServer * * Dumps @server content to an XML string. * * Return value:(transfer full): the dump string. It must be freed by the caller. **/ gchar* lasso_server_dump(LassoServer *server) { return lasso_node_dump(LASSO_NODE(server)); } /** * lasso_server_get_private_key: * @server: a #LassoServer object * * Return value:(transfer full): a newly created #xmlSecKey object. */ xmlSecKey* lasso_server_get_private_key(LassoServer *server) { if (! LASSO_IS_SERVER(server)) return NULL; if (! server->private_key) return NULL; return lasso_xmlsec_load_private_key(server->private_key, server->private_key_password, server->signature_method, server->certificate); } /** * lasso_server_get_signature_context_for_provider: * @server: a #LassoServer object * @provider: a #LassoProvider object * * Find the key and signature method to sign messages adressed to @provider. If @provider has an * override over the private key of the @server object, use this override. * * The returned context content is now owned by the caller, if it must survives the @server or * @provider object life, the key should be copied. * * Return value: 0 if successful, an error code otherwise. * */ lasso_error_t lasso_server_get_signature_context_for_provider(LassoServer *server, LassoProvider *provider, LassoSignatureContext *signature_context) { lasso_error_t rc = 0; LassoSignatureContext *private_context = NULL; lasso_bad_param(SERVER, server); lasso_null_param(signature_context); if (provider) { lasso_bad_param(PROVIDER, provider); private_context = &provider->private_data->signature_context; } if (private_context && lasso_ok_signature_method(private_context->signature_method)) { lasso_assign_signature_context(*signature_context, *private_context); } else { rc = lasso_server_get_signature_context(server, signature_context); } return rc; } /** * lasso_server_get_signature_context: * @server: a #LassoServer object * @context: a pointer to an allocated and initialized #LassoSignatureContext structure * * Try to create a signature context for this server. Beware that you should better use * lasso_server_get_signature_context_for_provider() or * lasso_server_get_signature_context_for_provider_by_name() in mot of the case when you know the * target for your signature, because the provider could have special signature needs, like using a * shared secret signature. * * Return value: 0 if successful, an error code otherwise. */ lasso_error_t lasso_server_get_signature_context(LassoServer *server, LassoSignatureContext *context) { lasso_bad_param(SERVER, server); lasso_null_param(context); lasso_assign_new_signature_context(*context, lasso_make_signature_context_from_path_or_string( server->private_key, server->private_key_password, server->signature_method, server->certificate)); if (! lasso_validate_signature_context(*context)) { return LASSO_DS_ERROR_PRIVATE_KEY_LOAD_FAILED; } return 0; } /** * lasso_server_get_signature_context_for_provider_by_name: * @server: a #LassoServer object * @provider_id: the identifier of a known provider * * Find the key and signature method to sign messages adressed to @provider. If @provider has an * override over the private key of the @server object, use this override. * * The returned context content is now owned by the caller, if it must survives the @server or * provider object life, the key should be copied. * * Return value: 0 if successful, an error code otherwise. * */ lasso_error_t lasso_server_get_signature_context_for_provider_by_name(LassoServer *server, const char *provider_id, LassoSignatureContext *signature_context) { LassoProvider *provider; lasso_bad_param(SERVER, server); provider = lasso_server_get_provider(server, provider_id); return lasso_server_get_signature_context_for_provider(server, provider, signature_context); } /** * lasso_server_set_signature_for_provider_by_name: * @server: a #LassoServer object * @provider_id: the identifier of a known provider * @node: a #LassoNode object * * Return value: 0 if successful, an error code otherwise. */ lasso_error_t lasso_server_set_signature_for_provider_by_name(LassoServer *server, const char *provider_id, LassoNode *node) { LassoSignatureContext context = LASSO_SIGNATURE_CONTEXT_NONE; lasso_error_t rc = 0; lasso_check_good_rc(lasso_server_get_signature_context_for_provider_by_name(server, provider_id, &context)); lasso_node_set_signature(node, context); cleanup: return rc; } /** * lasso_server_export_to_query_for_provider_by_name: * @server: a #LassoServer object * @provider_id: the identifier of a known provider * @node: a #LassoNode object * * Return value: 0 if successful, an error code otherwise. */ lasso_error_t lasso_server_export_to_query_for_provider_by_name(LassoServer *server, const char *provider_id, LassoNode *node, char **out) { LassoSignatureContext context = LASSO_SIGNATURE_CONTEXT_NONE; lasso_error_t rc = 0; char *query = NULL; lasso_check_good_rc(lasso_server_get_signature_context_for_provider_by_name(server, provider_id, &context)); query = lasso_node_build_query(node); goto_cleanup_if_fail_with_rc(query, LASSO_PROFILE_ERROR_BUILDING_QUERY_FAILED); if (lasso_ok_signature_method(context.signature_method)) { lasso_assign_new_string(query, lasso_query_sign(query, context)); } goto_cleanup_if_fail_with_rc(query, LASSO_PROFILE_ERROR_BUILDING_QUERY_FAILED); lasso_assign_new_string(*out, query); cleanup: lasso_assign_new_signature_context(context, LASSO_SIGNATURE_CONTEXT_NONE); return rc; } /** * lasso_server_get_encryption_private_keys: * @server: a #LassoServer object * * Return:(transfer none)(element-type xmlSecKeyPtr): a GList of xmlSecKey object, it is owned by the #LassoServer object, so do not * free it. */ GList* lasso_server_get_encryption_private_keys(LassoServer *server) { if (! LASSO_IS_SERVER(server)) return NULL; if (! server->private_data) return NULL; return server->private_data->encryption_private_keys; } /** * lasso_server_load_metadata: * @server: a #LassoServer object * @role: a #LassoProviderRole value * @federation_file: path to a SAML 2.0 metadata file * @trusted_roots:(allow-none): a PEM encoded files containing the certificates to check signatures * on the metadata file (optional) * @blacklisted_entity_ids:(allow-none)(element-type string): a list of EntityID which should not be * loaded, can be NULL. * @loaded_entity_ids:(transfer full)(element-type string)(allow-none): an output parameter for the * list of the loaded EntityID, can be NULL. * @flags: flags modifying the behaviour for checking signatures on EntityDescriptor and * EntitiesDescriptors nodes. * * Load all the SAML 2.0 entities from @federation_file which contains a declaration for @role. If * @trusted_roots is non-NULL, use it to check a signature on the metadata file, otherwise ignore * signature validation. * * Return value: 0 on success, an error code otherwise, among: * * * LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ if server is not a #LassoServer object or @role is not a * valid role value, * * * LASSO_DS_ERROR_CA_CERT_CHAIN_LOAD_FAILED if the @trusted_root file cannot be loaded, * * */ lasso_error_t lasso_server_load_metadata(LassoServer *server, LassoProviderRole role, const gchar *federation_file, const gchar *trusted_roots, GList *blacklisted_entity_ids, GList **loaded_entity_ids, LassoServerLoadMetadataFlag flags) { xmlDoc *doc = NULL; xmlNode *root = NULL; xmlSecKeysMngr *keys_mngr = NULL; lasso_error_t rc = 0; lasso_bad_param(SERVER, server); g_return_val_if_fail(role == LASSO_PROVIDER_ROLE_SP || role == LASSO_PROVIDER_ROLE_IDP, LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); if (flags == LASSO_SERVER_LOAD_METADATA_FLAG_DEFAULT) { flags = LASSO_SERVER_LOAD_METADATA_FLAG_CHECK_ENTITIES_DESCRIPTOR_SIGNATURE | LASSO_SERVER_LOAD_METADATA_FLAG_CHECK_ENTITY_DESCRIPTOR_SIGNATURE | LASSO_SERVER_LOAD_METADATA_FLAG_INHERIT_SIGNATURE; } if (trusted_roots) { keys_mngr = lasso_load_certs_from_pem_certs_chain_file(trusted_roots); lasso_return_val_if_fail(keys_mngr != NULL, LASSO_DS_ERROR_CA_CERT_CHAIN_LOAD_FAILED); } doc = lasso_xml_parse_file(federation_file); goto_cleanup_if_fail_with_rc(doc, LASSO_SERVER_ERROR_INVALID_XML); root = xmlDocGetRootElement(doc); if (lasso_strisequal((char*)root->ns->href, LASSO_SAML2_METADATA_HREF)) { lasso_check_good_rc(lasso_saml20_server_load_metadata(server, role, doc, root, blacklisted_entity_ids, loaded_entity_ids, keys_mngr, flags)); } else { goto_cleanup_with_rc(LASSO_ERROR_UNIMPLEMENTED); } cleanup: lasso_release_key_manager(keys_mngr); lasso_release_doc(doc); return rc; } lasso-2.8.2/lasso/id-ff/PaxHeaders/providerprivate.h0000644000000000000000000000013214117162531017427 xustar0030 mtime=1631380825.852638017 30 atime=1678814151.008993845 30 ctime=1678814320.997953241 lasso-2.8.2/lasso/id-ff/providerprivate.h0000644000175000017500000000674614117162531022714 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_PROVIDER_PRIVATE_H__ #define __LASSO_PROVIDER_PRIVATE_H__ #include <./serverprivate.h> #include "../xml/private.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /** * LassoPublicKeyType: * @LASSO_PUBLIC_KEY_SIGNING: Signing public key * @LASSO_PUBLIC_KEY_ENCRYPTION: Encryption public key * * Public key type. */ typedef enum { LASSO_PUBLIC_KEY_SIGNING, LASSO_PUBLIC_KEY_ENCRYPTION } LassoPublicKeyType; /* This structure should allow to map ID-FFv1.2 and SAMLv2 endpoints */ struct EndpointType_s { LassoProviderRole role; char *kind; char *binding; char *url; char *return_url; int index; int is_default; }; typedef struct EndpointType_s EndpointType; struct _LassoProviderPrivate { gboolean dispose_has_run; LassoProviderRole roles; LassoProtocolConformance conformance; GHashTable *Descriptors; GList *attributes; /* of LassoSaml2Attribute */ char *default_assertion_consumer; xmlNode *organization; char *affiliation_owner_id; char *affiliation_id; GList *signing_public_keys; GList *signing_key_descriptors; xmlNode *encryption_key_descriptor; char *encryption_public_key_str; GList *encryption_public_keys; LassoEncryptionMode encryption_mode; LassoEncryptionSymKeyType encryption_sym_key_type; LassoKeyEncryptionMethod key_encryption_method; char *valid_until; char *cache_duration; GList *endpoints; /* of EndpointType_s */ LassoSignatureContext signature_context; }; gboolean lasso_provider_load_metadata(LassoProvider *provider, const gchar *metadata); gboolean lasso_provider_load_metadata_from_buffer(LassoProvider *provider, const gchar *metadata); gboolean lasso_provider_load_public_key(LassoProvider *provider, LassoPublicKeyType public_key_type); GList* lasso_provider_get_public_keys(const LassoProvider *provider); xmlSecKey* lasso_provider_get_encryption_public_key(const LassoProvider *provider); LassoEncryptionSymKeyType lasso_provider_get_encryption_sym_key_type(const LassoProvider* provider); LassoKeyEncryptionMethod lasso_provider_get_key_encryption_method(const LassoProvider* provider); int lasso_provider_verify_saml_signature(LassoProvider *provider, xmlNode *signed_node, xmlDoc *doc); int lasso_provider_verify_query_signature(LassoProvider *provider, const char *message); void _lasso_provider_load_key_descriptor(LassoProvider *provider, xmlNode *key_descriptor); void _lasso_provider_add_metadata_value_for_role(LassoProvider *provider, LassoProviderRole role, const char *name, const char *value); LassoProvider* lasso_provider_new_from_xmlnode(LassoProviderRole role, xmlNode *node); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_PROVIDER_PRIVATE_H__ */ lasso-2.8.2/lasso/id-ff/PaxHeaders/name_identifier_mapping.c0000644000000000000000000000013214114500706021027 xustar0030 mtime=1630699974.066799789 30 atime=1678814222.021392434 30 ctime=1678814320.985953173 lasso-2.8.2/lasso/id-ff/name_identifier_mapping.c0000644000175000017500000004753514114500706024315 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ /** * SECTION:name_identifier_mapping * @short_description: Liberty Enabled Client and Proxy Profile (ID-FF) * **/ #include "../utils.h" #include "../xml/private.h" #include "name_identifier_mapping.h" #include "profileprivate.h" #include "providerprivate.h" /*****************************************************************************/ /* public methods */ /*****************************************************************************/ /** * lasso_name_identifier_mapping_build_request_msg: * @mapping: a #LassoNameIdentifierMapping * * Builds a name identifier mapping request message. * * * * If it is a SOAP method, then it builds the request as a SOAP message, * optionally signs his node, sets @msg_body with that message and sets * @msg_url with the SOAP Endpoint URL * * * If it is a HTTP-Redirect method, then it builds the request as a query * string message, optionally signs it and sets @msg_url to that URL. * * * * Return value: 0 on success; or a negative value otherwise. **/ gint lasso_name_identifier_mapping_build_request_msg(LassoNameIdentifierMapping *mapping) { LassoProfile *profile; LassoProvider *remote_provider; g_return_val_if_fail(LASSO_IS_NAME_IDENTIFIER_MAPPING(mapping), LASSO_PARAM_ERROR_INVALID_VALUE); profile = LASSO_PROFILE(mapping); lasso_profile_clean_msg_info(profile); if (profile->remote_providerID == NULL) { /* this means lasso_name_identifer_mapping_init_request was not called before */ return critical_error(LASSO_PROFILE_ERROR_MISSING_REMOTE_PROVIDERID); } /* get provider object */ remote_provider = lasso_server_get_provider(profile->server, profile->remote_providerID); if (LASSO_IS_PROVIDER(remote_provider) == FALSE) { return critical_error(LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND); } if (remote_provider->role != LASSO_PROVIDER_ROLE_IDP) { message(G_LOG_LEVEL_CRITICAL, "Build request msg method is forbidden at IDP"); return LASSO_NAME_IDENTIFIER_MAPPING_ERROR_FORBIDDEN_CALL_ON_THIS_SIDE; } profile->msg_url = lasso_provider_get_metadata_one(remote_provider, "SoapEndpoint"); if (profile->msg_url == NULL) { return critical_error(LASSO_PROFILE_ERROR_UNKNOWN_PROFILE_URL); } LASSO_SAMLP_REQUEST_ABSTRACT(profile->request)->private_key_file = profile->server->private_key; LASSO_SAMLP_REQUEST_ABSTRACT(profile->request)->certificate_file = profile->server->certificate; profile->msg_body = lasso_node_export_to_soap(profile->request); if (profile->msg_body == NULL) { return critical_error(LASSO_PROFILE_ERROR_BUILDING_MESSAGE_FAILED); } return 0; } /** * lasso_name_identifier_mapping_build_response_msg: * @mapping: a #LassoNameIdentifierMapping * * Builds a name identifier mapping response message. * * * * If it is a SOAP method, then it builds the response as a SOAP message, * optionally signs his node, sets @msg_body with that message and sets * @msg_url with the register name identifier service return URL. * * * If it is a HTTP-Redirect method, then it builds the response as a query * string message, optionally signs it and sets @msg_url to that URL. * * * * If private key and certificate are set in server object it will also signs * the message (either with X509 if SOAP or with a simple signature for query * strings). * * Return value: 0 on success; or a negative value otherwise. **/ gint lasso_name_identifier_mapping_build_response_msg(LassoNameIdentifierMapping *mapping) { LassoProfile *profile; LassoProvider *remote_provider; g_return_val_if_fail(LASSO_IS_NAME_IDENTIFIER_MAPPING(mapping), LASSO_PARAM_ERROR_INVALID_VALUE); profile = LASSO_PROFILE(mapping); lasso_profile_clean_msg_info(profile); if (profile->remote_providerID == NULL) { /* this means lasso_name_identifer_mapping_init_request was not called before */ return critical_error(LASSO_PROFILE_ERROR_MISSING_REMOTE_PROVIDERID); } remote_provider = lasso_server_get_provider(profile->server, profile->remote_providerID); if (LASSO_IS_PROVIDER(remote_provider) == FALSE) { return critical_error(LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND); } if (remote_provider->role != LASSO_PROVIDER_ROLE_SP) { message(G_LOG_LEVEL_CRITICAL, "Build response msg method is forbidden at SP"); return LASSO_NAME_IDENTIFIER_MAPPING_ERROR_FORBIDDEN_CALL_ON_THIS_SIDE; } /* verify the provider type is a service provider type */ /* build name identifier mapping response msg */ if (profile->http_request_method != LASSO_HTTP_METHOD_SOAP) { return critical_error(LASSO_PROFILE_ERROR_INVALID_HTTP_METHOD); } profile->msg_url = NULL; LASSO_SAMLP_RESPONSE_ABSTRACT(profile->response)->private_key_file = profile->server->private_key; LASSO_SAMLP_RESPONSE_ABSTRACT(profile->response)->certificate_file = profile->server->certificate; profile->msg_body = lasso_node_export_to_soap(profile->response); return 0; } /** * lasso_name_identifier_mapping_destroy: * @mapping: a #LassoNameIdentifierMapping * * Destroys a #LassoNameIdentifierMapping object. **/ void lasso_name_identifier_mapping_destroy(LassoNameIdentifierMapping *mapping) { lasso_node_destroy(LASSO_NODE(mapping)); } /** * lasso_name_identifier_mapping_init_request: * @mapping: a #LassoNameIdentifierMapping * @targetNamespace: the request targetNamespace * @remote_providerID: the providerID of the identity provider. * * Initializes a new lib:NameIdentifierMappingRequest request. * * Return value: 0 on success; or a negative value otherwise. **/ gint lasso_name_identifier_mapping_init_request(LassoNameIdentifierMapping *mapping, char *targetNamespace, char *remote_providerID) { LassoProfile *profile; LassoProvider *remote_provider; LassoFederation *federation; LassoSamlNameIdentifier *nameIdentifier; g_return_val_if_fail(LASSO_IS_NAME_IDENTIFIER_MAPPING(mapping), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); g_return_val_if_fail(targetNamespace != NULL, LASSO_PARAM_ERROR_INVALID_VALUE); g_return_val_if_fail(remote_providerID != NULL, LASSO_PARAM_ERROR_INVALID_VALUE); profile = LASSO_PROFILE(mapping); /* verify if the identity exists */ if (profile->identity == NULL) { return critical_error(LASSO_PROFILE_ERROR_IDENTITY_NOT_FOUND); } /* set the remote provider id */ profile->remote_providerID = g_strdup(remote_providerID); /* verify the provider type is a service provider type */ remote_provider = lasso_server_get_provider(profile->server, profile->remote_providerID); if (LASSO_IS_PROVIDER(remote_provider) == FALSE) { return critical_error(LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND); } if (remote_provider->role != LASSO_PROVIDER_ROLE_IDP) { message(G_LOG_LEVEL_CRITICAL, "Init request method is forbidden for an IDP"); return LASSO_NAME_IDENTIFIER_MAPPING_ERROR_FORBIDDEN_CALL_ON_THIS_SIDE; } /* get federation */ federation = g_hash_table_lookup(profile->identity->federations, profile->remote_providerID); if (federation == NULL) { return critical_error(LASSO_PROFILE_ERROR_FEDERATION_NOT_FOUND); } /* name identifier */ nameIdentifier = LASSO_SAML_NAME_IDENTIFIER(federation->local_nameIdentifier); if (nameIdentifier == NULL) nameIdentifier = LASSO_SAML_NAME_IDENTIFIER(federation->remote_nameIdentifier); if (nameIdentifier == NULL) { return critical_error(LASSO_PROFILE_ERROR_NAME_IDENTIFIER_NOT_FOUND); } /* get / verify http method */ profile->http_request_method = LASSO_HTTP_METHOD_NONE; if (lasso_provider_accept_http_method(LASSO_PROVIDER(profile->server), remote_provider, LASSO_MD_PROTOCOL_TYPE_NAME_IDENTIFIER_MAPPING, LASSO_HTTP_METHOD_REDIRECT, TRUE) == FALSE) { return critical_error(LASSO_PROFILE_ERROR_UNSUPPORTED_PROFILE); } profile->request = lasso_lib_name_identifier_mapping_request_new_full( LASSO_PROVIDER(profile->server)->ProviderID, nameIdentifier, targetNamespace, profile->server->certificate ? LASSO_SIGNATURE_TYPE_WITHX509 : LASSO_SIGNATURE_TYPE_SIMPLE, lasso_get_default_signature_method()); if (LASSO_IS_LIB_NAME_IDENTIFIER_MAPPING_REQUEST(profile->request) == FALSE) { return critical_error(LASSO_PROFILE_ERROR_BUILDING_REQUEST_FAILED); } if (lasso_provider_get_protocol_conformance(remote_provider) < LASSO_PROTOCOL_LIBERTY_1_2) { LASSO_SAMLP_REQUEST_ABSTRACT(profile->request)->MajorVersion = 1; LASSO_SAMLP_REQUEST_ABSTRACT(profile->request)->MinorVersion = 1; } profile->http_request_method = LASSO_HTTP_METHOD_SOAP; return 0; } /** * lasso_name_identifier_mapping_process_request_msg: * @mapping: a #LassoNameIdentifierMapping * @request_msg: the name identifier mapping request message * * Processes a lib:NameIdentifierMappingRequest message. Rebuilds a request * object from the message and optionally verifies its signature. * * Return value: 0 on success; or a negative value otherwise. **/ gint lasso_name_identifier_mapping_process_request_msg(LassoNameIdentifierMapping *mapping, char *request_msg) { LassoProfile *profile; LassoProvider *remote_provider; LassoMessageFormat format; g_return_val_if_fail(LASSO_IS_NAME_IDENTIFIER_MAPPING(mapping), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); g_return_val_if_fail(request_msg != NULL, LASSO_PARAM_ERROR_INVALID_VALUE); profile = LASSO_PROFILE(mapping); /* build name identifier mapping from message */ profile->request = lasso_lib_name_identifier_mapping_request_new(); format = lasso_node_init_from_message(LASSO_NODE(profile->request), request_msg); if (format == LASSO_MESSAGE_FORMAT_UNKNOWN || format == LASSO_MESSAGE_FORMAT_ERROR) { return critical_error(LASSO_PROFILE_ERROR_INVALID_MSG); } remote_provider = lasso_server_get_provider(profile->server, profile->remote_providerID); if (LASSO_IS_PROVIDER(remote_provider) == FALSE) { return critical_error(LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND); } profile->remote_providerID = g_strdup(remote_provider->ProviderID); /* verify http method is supported */ if (lasso_provider_accept_http_method(LASSO_PROVIDER(profile->server), remote_provider, LASSO_MD_PROTOCOL_TYPE_NAME_IDENTIFIER_MAPPING, LASSO_HTTP_METHOD_REDIRECT, FALSE) == FALSE ) { return critical_error(LASSO_PROFILE_ERROR_UNSUPPORTED_PROFILE); } /* verify signature */ profile->signature_status = lasso_provider_verify_signature( remote_provider, request_msg, "RequestID", format); profile->http_request_method = LASSO_HTTP_METHOD_SOAP; profile->nameIdentifier = LASSO_NODE(g_object_ref(LASSO_LIB_NAME_IDENTIFIER_MAPPING_REQUEST( profile->request)->NameIdentifier)); return profile->signature_status; } /** * lasso_name_identifier_mapping_process_response_msg: * @mapping: a #LassoNameIdentifierMapping * @response_msg: the name identifier mapping response message * * Processes a lib:NameIdentifierMappingResponse message. Rebuilds a response * object from the message and optionally verifies its signature. * * If the response depicts Success it will also sets @targetNameIdentifier. * * Return value: 0 on success; or a negative value otherwise. **/ gint lasso_name_identifier_mapping_process_response_msg(LassoNameIdentifierMapping *mapping, char *response_msg) { LassoProfile *profile; LassoProvider *remote_provider; LassoMessageFormat format; LassoLibNameIdentifierMappingResponse *response; int rc = 0; char *statusCodeValue; g_return_val_if_fail(LASSO_IS_NAME_IDENTIFIER_MAPPING(mapping), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); g_return_val_if_fail(response_msg != NULL, LASSO_PARAM_ERROR_INVALID_VALUE); profile = LASSO_PROFILE(mapping); profile->response = lasso_lib_name_identifier_mapping_response_new(); format = lasso_node_init_from_message(LASSO_NODE(profile->response), response_msg); if (format == LASSO_MESSAGE_FORMAT_UNKNOWN || format == LASSO_MESSAGE_FORMAT_ERROR) { return critical_error(LASSO_PROFILE_ERROR_INVALID_MSG); } response = LASSO_LIB_NAME_IDENTIFIER_MAPPING_RESPONSE(profile->response); remote_provider = lasso_server_get_provider(profile->server, profile->remote_providerID); if (LASSO_IS_PROVIDER(remote_provider) == FALSE) { return critical_error(LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND); } /* verify signature */ rc = lasso_provider_verify_signature(remote_provider, response_msg, "ResponseID", format); if (response->Status == NULL || response->Status->StatusCode == NULL) { return LASSO_PROFILE_ERROR_MISSING_STATUS_CODE; } statusCodeValue = response->Status->StatusCode->Value; if (statusCodeValue == NULL || strcmp(statusCodeValue, LASSO_SAML_STATUS_CODE_SUCCESS) != 0) { return LASSO_PROFILE_ERROR_STATUS_NOT_SUCCESS; } /* Set the target name identifier */ if (LASSO_LIB_NAME_IDENTIFIER_MAPPING_REQUEST(profile->request)->NameIdentifier) { mapping->targetNameIdentifier = g_strdup(LASSO_LIB_NAME_IDENTIFIER_MAPPING_REQUEST( profile->request)->NameIdentifier->content); } else { mapping->targetNameIdentifier = NULL; return LASSO_NAME_IDENTIFIER_MAPPING_ERROR_MISSING_TARGET_IDENTIFIER; } return rc; } /** * lasso_name_identifier_mapping_validate_request: * @mapping: a #LassoNameIdentifierMapping * * Checks profile request with regards to message status and principal * federations, update them accordingly and prepares a * lib:NameIdentifierMappingResponse accordingly. * * Return value: 0 on success; or a negative value otherwise. **/ gint lasso_name_identifier_mapping_validate_request(LassoNameIdentifierMapping *mapping) { LassoProfile *profile; LassoProvider *remote_provider; LassoFederation *federation; LassoLibNameIdentifierMappingRequest *request; LassoSamlNameIdentifier *nameIdentifier, *targetNameIdentifier; g_return_val_if_fail(LASSO_IS_NAME_IDENTIFIER_MAPPING(mapping) == TRUE, LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); profile = LASSO_PROFILE(mapping); /* verify the provider type is a service provider type */ if (profile->remote_providerID == NULL) { return critical_error(LASSO_PROFILE_ERROR_MISSING_REMOTE_PROVIDERID); } remote_provider = lasso_server_get_provider(profile->server, profile->remote_providerID); if (remote_provider == NULL) { return critical_error(LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND); } if (remote_provider->role != LASSO_PROVIDER_ROLE_SP) { message(G_LOG_LEVEL_CRITICAL, "Build request msg method is forbidden at SP"); return LASSO_NAME_IDENTIFIER_MAPPING_ERROR_FORBIDDEN_CALL_ON_THIS_SIDE; } /* verify request attribute of mapping is a name identifier mapping request */ if (LASSO_IS_LIB_NAME_IDENTIFIER_MAPPING_REQUEST(profile->request) == FALSE) { message(G_LOG_LEVEL_CRITICAL, "Invalid NameIdentifierMappingRequest"); return LASSO_PROFILE_ERROR_MISSING_REQUEST; } if (profile->http_request_method != LASSO_HTTP_METHOD_SOAP) { return critical_error(LASSO_PROFILE_ERROR_INVALID_HTTP_METHOD); } request = LASSO_LIB_NAME_IDENTIFIER_MAPPING_REQUEST(profile->request); profile->response = lasso_lib_name_identifier_mapping_response_new_full( LASSO_PROVIDER(profile->server)->ProviderID, LASSO_SAML_STATUS_CODE_SUCCESS, request, profile->server->certificate ? LASSO_SIGNATURE_TYPE_WITHX509 : LASSO_SIGNATURE_TYPE_SIMPLE, lasso_get_default_signature_method()); if (LASSO_IS_LIB_NAME_IDENTIFIER_MAPPING_RESPONSE(profile->response) == FALSE) { return critical_error(LASSO_PROFILE_ERROR_BUILDING_RESPONSE_FAILED); } /* verify signature status */ if (profile->signature_status != 0) { lasso_profile_set_response_status(profile, LASSO_LIB_STATUS_CODE_INVALID_SIGNATURE); } /* Verify identity attribute of mapping object */ if (LASSO_IS_IDENTITY(profile->identity) == FALSE) { return critical_error(LASSO_PROFILE_ERROR_IDENTITY_NOT_FOUND); } /* verify federation of the SP request */ federation = g_hash_table_lookup( profile->identity->federations, profile->remote_providerID); if (LASSO_IS_FEDERATION(federation) == FALSE) { lasso_profile_set_response_status(profile, LASSO_LIB_STATUS_CODE_UNKNOWN_PRINCIPAL); return critical_error(LASSO_PROFILE_ERROR_FEDERATION_NOT_FOUND); } nameIdentifier = LASSO_SAML_NAME_IDENTIFIER(federation->remote_nameIdentifier); if (nameIdentifier == NULL) nameIdentifier = LASSO_SAML_NAME_IDENTIFIER(federation->local_nameIdentifier); if (nameIdentifier == NULL) { lasso_profile_set_response_status(profile, LASSO_LIB_STATUS_CODE_UNKNOWN_PRINCIPAL); return LASSO_PROFILE_ERROR_NAME_IDENTIFIER_NOT_FOUND; } /* get the federation of the target name space and his name identifier */ if (request->TargetNamespace == NULL) { return LASSO_NAME_IDENTIFIER_MAPPING_ERROR_MISSING_TARGET_NAMESPACE; } federation = g_hash_table_lookup(profile->identity->federations, request->TargetNamespace); if (LASSO_IS_FEDERATION(federation) == FALSE) { lasso_profile_set_response_status(profile, LASSO_LIB_STATUS_CODE_FEDERATION_DOES_NOT_EXIST); message(G_LOG_LEVEL_CRITICAL, "Target name space federation not found"); return LASSO_PROFILE_ERROR_FEDERATION_NOT_FOUND; } targetNameIdentifier = LASSO_SAML_NAME_IDENTIFIER(federation->remote_nameIdentifier); if (targetNameIdentifier == NULL) { targetNameIdentifier = LASSO_SAML_NAME_IDENTIFIER(federation->local_nameIdentifier); } if (targetNameIdentifier == NULL) { message(G_LOG_LEVEL_CRITICAL, "Name identifier for target name space federation not found"); lasso_profile_set_response_status(profile, LASSO_LIB_STATUS_CODE_FEDERATION_DOES_NOT_EXIST); return LASSO_PROFILE_ERROR_NAME_IDENTIFIER_NOT_FOUND; } LASSO_LIB_NAME_IDENTIFIER_MAPPING_RESPONSE(profile->response)->NameIdentifier = g_object_ref(targetNameIdentifier); return 0; } /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoNameIdentifierMappingClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "NameIdentifierMapping"); lasso_node_class_set_ns(nclass, LASSO_LASSO_HREF, LASSO_LASSO_PREFIX); } GType lasso_name_identifier_mapping_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoNameIdentifierMappingClass), NULL, NULL, (GClassInitFunc)class_init, NULL, NULL, sizeof(LassoNameIdentifierMapping), 0, NULL, NULL }; this_type = g_type_register_static(LASSO_TYPE_PROFILE, "LassoNameIdentifierMapping", &this_info, 0); } return this_type; } /** * lasso_name_identifier_mapping_new * @server: the #LassoServer * * Creates a new #LassoNameIdentifierMapping. * * Return value: a newly created #LassoNameIdentifierMapping object; or NULL * if an error occured **/ LassoNameIdentifierMapping * lasso_name_identifier_mapping_new(LassoServer *server) { LassoNameIdentifierMapping *mapping = NULL; g_return_val_if_fail(LASSO_IS_SERVER(server), NULL); mapping = g_object_new(LASSO_TYPE_NAME_IDENTIFIER_MAPPING, NULL); LASSO_PROFILE(mapping)->server = g_object_ref(server); return mapping; } lasso-2.8.2/lasso/id-ff/PaxHeaders/identity.c0000644000000000000000000000013214364261206016031 xustar0030 mtime=1674666630.730769021 30 atime=1678814216.721362569 30 ctime=1678814320.977953127 lasso-2.8.2/lasso/id-ff/identity.c0000644000175000017500000002063314364261206021305 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ /** * SECTION:identity * @short_description: Principal identity * * A #LassoIdentity object records the identifers that a principal use two federate pairs of * providers. * **/ #include "../xml/private.h" #include #include "../utils.h" #include "identity.h" #include "identityprivate.h" #include "../lasso_config.h" /*****************************************************************************/ /* public methods */ /*****************************************************************************/ /** * lasso_identity_add_federation: * @identity: a #LassoIdentity * @federation: the #LassoFederation * * Adds @federation as a known federation for @identity. @federation is * then owned by the identity; caller must not free it. * * Return value: 0 on success; or a negative value otherwise. **/ gint lasso_identity_add_federation(LassoIdentity *identity, LassoFederation *federation) { g_return_val_if_fail(LASSO_IS_IDENTITY(identity), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); g_return_val_if_fail(LASSO_IS_FEDERATION(federation), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); /* add the federation, replace if one already exists */ g_hash_table_insert(identity->federations, g_strdup(federation->remote_providerID), federation); identity->is_dirty = TRUE; return 0; } /** * lasso_identity_get_federation: * @identity: a #LassoIdentity * @providerID: the provider ID * * Looks up and returns the #LassoFederation for this provider ID. * * Return value:(transfer none): the #LassoFederation; or NULL if it didn't exist. The * #LassoFederation is internally allocated. It must not be freed, * modified or stored. **/ LassoFederation* lasso_identity_get_federation(LassoIdentity *identity, const char *providerID) { if (! LASSO_IS_IDENTITY(identity) || providerID == NULL || identity->federations == NULL) { return NULL; } return g_hash_table_lookup(identity->federations, providerID); } /** * lasso_identity_remove_federation: * @identity: a #LassoIdentity * @providerID: the provider ID * * Remove federation between identity and provider with @providerID * * Return value: 0 on success; or a negative value otherwise. **/ gint lasso_identity_remove_federation(LassoIdentity *identity, const char *providerID) { g_return_val_if_fail(LASSO_IS_IDENTITY(identity), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); g_return_val_if_fail(providerID != NULL, LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); if (g_hash_table_remove(identity->federations, providerID) == FALSE) { return LASSO_PROFILE_ERROR_FEDERATION_NOT_FOUND; } identity->is_dirty = TRUE; return 0; } /** * lasso_identity_destroy: * @identity: a #LassoIdentity * * Destroys an identity. **/ void lasso_identity_destroy(LassoIdentity *identity) { if (identity == NULL) return; lasso_node_destroy(LASSO_NODE(identity)); } /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static LassoNodeClass *parent_class = NULL; static void add_childnode_from_hashtable(G_GNUC_UNUSED gchar *key, LassoNode *value, xmlNode *xmlnode) { xmlAddChild(xmlnode, lasso_node_get_xmlNode(LASSO_NODE(value), TRUE)); } static xmlNode* get_xmlNode(LassoNode *node, G_GNUC_UNUSED gboolean lasso_dump) { xmlNode *xmlnode; LassoIdentity *identity = LASSO_IDENTITY(node); xmlnode = xmlNewNode(NULL, (xmlChar*)"Identity"); xmlSetNs(xmlnode, xmlNewNs(xmlnode, (xmlChar*)LASSO_LASSO_HREF, NULL)); xmlSetProp(xmlnode, (xmlChar*)"Version", (xmlChar*)"2"); /* Federations */ if (g_hash_table_size(identity->federations)) g_hash_table_foreach(identity->federations, (GHFunc)add_childnode_from_hashtable, xmlnode); return xmlnode; } static int init_from_xml(LassoNode *node, xmlNode *xmlnode) { LassoIdentity *identity = LASSO_IDENTITY(node); xmlNode *t; t = xmlnode->children; while (t) { if (t->type != XML_ELEMENT_NODE) { t = t->next; continue; } /* Federations */ if (strcmp((char*)t->name, "Federation") == 0) { LassoFederation *federation; federation = LASSO_FEDERATION(lasso_node_new_from_xmlNode(t)); g_hash_table_insert( identity->federations, g_strdup(federation->remote_providerID), federation); } t = t->next; } return 0; } /*****************************************************************************/ /* overridden parent class methods */ /*****************************************************************************/ static void dispose(GObject *object) { LassoIdentity *identity = LASSO_IDENTITY(object); if (identity->private_data->dispose_has_run == FALSE) { identity->private_data->dispose_has_run = TRUE; lasso_release_ghashtable(identity->federations); G_OBJECT_CLASS(parent_class)->dispose(object); } } static void finalize(GObject *object) { LassoIdentity *identity = LASSO_IDENTITY(object); lasso_release(identity->private_data); identity->private_data = NULL; G_OBJECT_CLASS(parent_class)->finalize(object); } /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void instance_init(LassoIdentity *identity, G_GNUC_UNUSED void *unused) { identity->private_data = g_new0(LassoIdentityPrivate, 1); identity->private_data->dispose_has_run = FALSE; identity->federations = g_hash_table_new_full(g_str_hash, g_str_equal, (GDestroyNotify)g_free, (GDestroyNotify)lasso_federation_destroy); identity->is_dirty = FALSE; } static void class_init(LassoIdentityClass *klass, void *unused G_GNUC_UNUSED) { parent_class = g_type_class_peek_parent(klass); LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); nclass->get_xmlNode = get_xmlNode; nclass->init_from_xml = init_from_xml; nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "Identity"); lasso_node_class_set_ns(nclass, LASSO_LASSO_HREF, LASSO_LASSO_PREFIX); G_OBJECT_CLASS(klass)->dispose = dispose; G_OBJECT_CLASS(klass)->finalize = finalize; } GType lasso_identity_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoIdentityClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoIdentity), 0, (GInstanceInitFunc) instance_init, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoIdentity", &this_info, 0); } return this_type; } /** * lasso_identity_new: * * Creates a new #LassoIdentity. * * Return value: a newly created #LassoIdentity **/ LassoIdentity* lasso_identity_new() { return g_object_new(LASSO_TYPE_IDENTITY, NULL); } /** * lasso_identity_new_from_dump: * @dump: XML server dump * * Restores the @dump to a new #LassoIdentity. * * Return value: a newly created #LassoIdentity; or NULL if an error occured **/ LassoIdentity* lasso_identity_new_from_dump(const gchar *dump) { LassoIdentity *identity; identity = (LassoIdentity*)lasso_node_new_from_dump(dump); if (! LASSO_IS_IDENTITY(identity)) { lasso_release_gobject(identity); } return identity; } /** * lasso_identity_dump: * @identity: a #LassoIdentity * * Dumps @identity content to an XML string. * * Return value:(transfer full): the dump string. It must be freed by the caller. **/ gchar* lasso_identity_dump(LassoIdentity *identity) { return lasso_node_dump(LASSO_NODE(identity)); } lasso-2.8.2/lasso/id-ff/PaxHeaders/defederation.c0000644000000000000000000000013214115351423016624 xustar0030 mtime=1630917395.099572441 30 atime=1678814215.325354706 30 ctime=1678814320.977953127 lasso-2.8.2/lasso/id-ff/defederation.c0000644000175000017500000004171214115351423022101 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ /** * SECTION:defederation * @short_description: Federation Termination Notification Profile (ID-FF) * * The Federation Termination Notification Profiles serves to suppress federations between identity * providers and services providers. It can be initiated by any of the partners using Redirect * or SOAP binding. * **/ #include "../xml/private.h" #include "defederation.h" #include "providerprivate.h" #include "sessionprivate.h" #include "identityprivate.h" #include "profileprivate.h" #include "serverprivate.h" #include "../xml/private.h" #include "../utils.h" /*****************************************************************************/ /* public methods */ /*****************************************************************************/ /** * lasso_defederation_build_notification_msg: * @defederation: a #LassoDefederation * * Builds the federation termination notification message. * * It gets the federation termination notification protocol profile and: * * * if it is a SOAP method, then it builds the federation termination * notification SOAP message, optionally signs the notification node, sets * @msg_body, gets the SoapEndpoint url and sets @msg_url of the federation * termination object. * * * if it is a HTTP-Redirect method, then it builds the federation termination * notification QUERY message (optionally signs the notification message), * builds the federation termination notification url with federation * termination service url, sets @msg_url in the federation termination * object, sets @msg_body to NULL. * * * * Return value: 0 on success; or a negative value otherwise. **/ gint lasso_defederation_build_notification_msg(LassoDefederation *defederation) { LassoProfile *profile; LassoProvider *remote_provider; gchar *url, *query; g_return_val_if_fail(LASSO_IS_DEFEDERATION(defederation), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); profile = LASSO_PROFILE(defederation); lasso_profile_clean_msg_info(profile); if (profile->remote_providerID == NULL) { /* this means lasso_defederation_init_notification was not called before */ return critical_error(LASSO_PROFILE_ERROR_MISSING_REMOTE_PROVIDERID); } /* get the remote provider object */ remote_provider = lasso_server_get_provider(profile->server, profile->remote_providerID); if (LASSO_IS_PROVIDER(remote_provider) == FALSE) { return critical_error(LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND); } /* build the federation termination notification message (SOAP or HTTP-Redirect) */ if (profile->http_request_method == LASSO_HTTP_METHOD_SOAP) { /* build the logout request message */ lasso_assign_new_string(profile->msg_url, lasso_provider_get_metadata_one( remote_provider, "SoapEndpoint")); lasso_assign_string(LASSO_SAMLP_REQUEST_ABSTRACT(profile->request)->private_key_file, profile->server->private_key); lasso_assign_string(LASSO_SAMLP_REQUEST_ABSTRACT(profile->request)->certificate_file, profile->server->certificate); lasso_assign_new_string(profile->msg_body, lasso_node_export_to_soap(LASSO_NODE(profile->request))); return 0; } if (profile->http_request_method == LASSO_HTTP_METHOD_REDIRECT) { /* build and optionally sign the query message and build the * federation termination notification url */ url = lasso_provider_get_metadata_one(remote_provider, "FederationTerminationServiceURL"); if (url == NULL) { return critical_error(LASSO_PROFILE_ERROR_UNKNOWN_PROFILE_URL); } query = lasso_node_export_to_query_with_password(LASSO_NODE(profile->request), profile->server->signature_method, profile->server->private_key, profile->server->private_key_password); if (query == NULL) { lasso_release(url); return critical_error(LASSO_PROFILE_ERROR_BUILDING_QUERY_FAILED); } lasso_assign_new_string(profile->msg_url, lasso_concat_url_query(url, query)); lasso_release(profile->msg_body); lasso_release(url); lasso_release(query); return 0; } return critical_error(LASSO_PROFILE_ERROR_INVALID_HTTP_METHOD); } /** * lasso_defederation_destroy: * @defederation: a #LassoDefederation * * Destroys a #LassoDefederation object. **/ void lasso_defederation_destroy(LassoDefederation *defederation) { lasso_node_destroy(LASSO_NODE(defederation)); } /** * lasso_defederation_init_notification: * @defederation: a #LassoDefederation * @remote_providerID: the provider id of the federation termination notified * provider. * @http_method: the HTTP method to send the message. * * Sets a new federation termination notification to the remote provider id * with the provider id of the requester (from the server object) and the name * identifier of the federated principal. * * Return value: 0 on success; or a negative value otherwise. **/ gint lasso_defederation_init_notification(LassoDefederation *defederation, gchar *remote_providerID, LassoHttpMethod http_method) { LassoProfile*profile; LassoProvider *remote_provider; LassoFederation *federation; LassoSamlNameIdentifier *nameIdentifier; LassoNode *nameIdentifier_n; gint rc = 0; g_return_val_if_fail(LASSO_IS_DEFEDERATION(defederation), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); profile = LASSO_PROFILE(defederation); lasso_release(profile->remote_providerID); lasso_release_gobject(profile->request); if (remote_providerID != NULL) { lasso_assign_string(profile->remote_providerID, remote_providerID); } else { LassoProvider *my_provider; LassoProviderRole role = LASSO_PROVIDER_ROLE_IDP; lasso_extract_node_or_fail(my_provider, profile->server, PROVIDER, LASSO_PROFILE_ERROR_MISSING_SERVER); if (my_provider->role == LASSO_PROVIDER_ROLE_IDP) { role = LASSO_PROVIDER_ROLE_SP; } lasso_assign_new_string(profile->remote_providerID, lasso_server_get_first_providerID_by_role(profile->server, role)); } if (profile->remote_providerID == NULL) { return critical_error(LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND); } remote_provider = lasso_server_get_provider(profile->server, profile->remote_providerID); if (LASSO_IS_PROVIDER(remote_provider) == FALSE) { return critical_error(LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND); } /* get federation */ if (profile->identity == NULL) { return critical_error(LASSO_PROFILE_ERROR_IDENTITY_NOT_FOUND); } federation = g_hash_table_lookup(profile->identity->federations, profile->remote_providerID); if (federation == NULL) { return critical_error(LASSO_PROFILE_ERROR_FEDERATION_NOT_FOUND); } /* get the nameIdentifier to send the federation termination notification */ nameIdentifier_n = lasso_profile_get_nameIdentifier(profile); if (nameIdentifier_n == NULL) { return critical_error(LASSO_PROFILE_ERROR_NAME_IDENTIFIER_NOT_FOUND); } nameIdentifier = LASSO_SAML_NAME_IDENTIFIER(nameIdentifier_n); if (federation->local_nameIdentifier) { lasso_assign_gobject(profile->nameIdentifier, federation->local_nameIdentifier); } else { lasso_assign_gobject(profile->nameIdentifier, LASSO_NODE(nameIdentifier)); } /* get / verify http method */ if (http_method == LASSO_HTTP_METHOD_ANY) { http_method = lasso_provider_get_first_http_method( LASSO_PROVIDER(profile->server), remote_provider, LASSO_MD_PROTOCOL_TYPE_FEDERATION_TERMINATION); } else { if (lasso_provider_accept_http_method(LASSO_PROVIDER(profile->server), remote_provider, LASSO_MD_PROTOCOL_TYPE_FEDERATION_TERMINATION, http_method, TRUE) == FALSE) { return critical_error(LASSO_PROFILE_ERROR_UNSUPPORTED_PROFILE); } } /* build the request */ if (http_method == LASSO_HTTP_METHOD_SOAP) { profile->request = lasso_lib_federation_termination_notification_new_full( LASSO_PROVIDER(profile->server)->ProviderID, nameIdentifier, profile->server->certificate ? LASSO_SIGNATURE_TYPE_WITHX509 : LASSO_SIGNATURE_TYPE_SIMPLE, lasso_get_default_signature_method()); if (profile->msg_relayState) { message(G_LOG_LEVEL_WARNING, "RelayState was defined but can't be used "\ "in SOAP Federation Termination Notification", NULL); } } else { /* LASSO_HTTP_METHOD_REDIRECT */ profile->request = lasso_lib_federation_termination_notification_new_full( LASSO_PROVIDER(profile->server)->ProviderID, nameIdentifier, LASSO_SIGNATURE_TYPE_NONE, 0); lasso_assign_string(LASSO_LIB_FEDERATION_TERMINATION_NOTIFICATION(profile->request)->RelayState, profile->msg_relayState); } if (lasso_provider_get_protocol_conformance(remote_provider) < LASSO_PROTOCOL_LIBERTY_1_2) { LASSO_SAMLP_REQUEST_ABSTRACT(profile->request)->MajorVersion = 1; LASSO_SAMLP_REQUEST_ABSTRACT(profile->request)->MinorVersion = 1; } /* remove federation with remote provider id */ if (profile->identity == NULL) { return critical_error(LASSO_PROFILE_ERROR_IDENTITY_NOT_FOUND); } lasso_identity_remove_federation(profile->identity, profile->remote_providerID); /* remove assertion from session */ if (profile->session) lasso_session_remove_assertion(profile->session, profile->remote_providerID); /* Save notification method */ profile->http_request_method = http_method; cleanup: return rc; } /** * lasso_defederation_process_notification_msg: * @defederation: the federation termination object * @notification_msg: the federation termination notification message * * Processes a lib:FederationTerminationNotification message. Rebuilds a * request object from the message and optionally verifies its signature. * * Set the msg_nameIdentifier attribute with the NameIdentifier content of the * notification object and optionally set the msg_relayState attribute with the * RelayState content of the notification object. * * Return value: 0 on success; or a negative value otherwise. **/ gint lasso_defederation_process_notification_msg(LassoDefederation *defederation, char *request_msg) { LassoProfile *profile; LassoProvider *remote_provider; LassoMessageFormat format; g_return_val_if_fail(LASSO_IS_DEFEDERATION(defederation), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); g_return_val_if_fail(request_msg != NULL, LASSO_PARAM_ERROR_INVALID_VALUE); profile = LASSO_PROFILE(defederation); lasso_assign_new_gobject(profile->request, lasso_lib_federation_termination_notification_new()); format = lasso_node_init_from_message(LASSO_NODE(profile->request), request_msg); if (format == LASSO_MESSAGE_FORMAT_UNKNOWN || format == LASSO_MESSAGE_FORMAT_ERROR) { return critical_error(LASSO_PROFILE_ERROR_INVALID_MSG); } if (format == LASSO_MESSAGE_FORMAT_QUERY) { lasso_assign_new_string(profile->msg_relayState, lasso_get_relaystate_from_query(request_msg)); } lasso_assign_string(profile->remote_providerID, LASSO_LIB_FEDERATION_TERMINATION_NOTIFICATION( profile->request)->ProviderID); remote_provider = lasso_server_get_provider(profile->server, profile->remote_providerID); if (LASSO_IS_PROVIDER(remote_provider) == FALSE) { return critical_error(LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND); } profile->signature_status = lasso_provider_verify_signature( remote_provider, request_msg, "RequestID", format); /* set the http request method */ if (format == LASSO_MESSAGE_FORMAT_SOAP) profile->http_request_method = LASSO_HTTP_METHOD_SOAP; if (format == LASSO_MESSAGE_FORMAT_QUERY) profile->http_request_method = LASSO_HTTP_METHOD_REDIRECT; lasso_assign_gobject(profile->nameIdentifier, LASSO_NODE(LASSO_LIB_FEDERATION_TERMINATION_NOTIFICATION( profile->request)->NameIdentifier)); /* get the RelayState (only available in redirect mode) */ if (LASSO_LIB_FEDERATION_TERMINATION_NOTIFICATION(profile->request)->RelayState) lasso_assign_string(profile->msg_relayState, LASSO_LIB_FEDERATION_TERMINATION_NOTIFICATION( profile->request)->RelayState); return profile->signature_status; } /** * lasso_defederation_validate_notification: * @defederation: a #LassoDefederation * * Checks notification with regards to message status and principal * federations; update them accordingly. * * Return value: 0 on success; or a negative value otherwise. **/ gint lasso_defederation_validate_notification(LassoDefederation *defederation) { LassoProfile *profile; LassoProvider *remote_provider; LassoFederation *federation = NULL; LassoSamlNameIdentifier *nameIdentifier; g_return_val_if_fail(LASSO_IS_DEFEDERATION(defederation), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); profile = LASSO_PROFILE(defederation); /* verify the federation termination notification */ if (LASSO_IS_LIB_FEDERATION_TERMINATION_NOTIFICATION(profile->request) == FALSE) return LASSO_PROFILE_ERROR_MISSING_REQUEST; /* If SOAP notification, then msg_url and msg_body are NULL */ /* if HTTP-Redirect notification, set msg_url with the federation * termination service return url, and set msg_body to NULL */ lasso_release(profile->msg_url) lasso_release(profile->msg_body) if (profile->http_request_method == LASSO_HTTP_METHOD_REDIRECT) { remote_provider = lasso_server_get_provider(profile->server, profile->remote_providerID); if (LASSO_IS_PROVIDER(remote_provider) == FALSE) { return critical_error(LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND); } /* build the QUERY and the url. Dont need to sign the query, * only the relay state is optinaly added and it is crypted * by the notifier */ profile->msg_url = lasso_provider_get_metadata_one(remote_provider, "FederationTerminationServiceReturnURL"); if (profile->msg_url == NULL) { return critical_error(LASSO_PROFILE_ERROR_UNKNOWN_PROFILE_URL); } /* if a relay state, then build the query part */ if (profile->msg_relayState) { gchar *url; gchar *query = g_strdup_printf("RelayState=%s", profile->msg_relayState); url = lasso_concat_url_query(profile->msg_url, query); lasso_release(query); lasso_assign_new_string(profile->msg_url, url); } } /* get the name identifier */ nameIdentifier = LASSO_LIB_FEDERATION_TERMINATION_NOTIFICATION( profile->request)->NameIdentifier; if (nameIdentifier == NULL) { return critical_error(LASSO_DEFEDERATION_ERROR_MISSING_NAME_IDENTIFIER); } /* Verify federation */ if (profile->identity == NULL) { return critical_error(LASSO_PROFILE_ERROR_IDENTITY_NOT_FOUND); } federation = g_hash_table_lookup(profile->identity->federations, profile->remote_providerID); if (federation == NULL) { return critical_error(LASSO_PROFILE_ERROR_FEDERATION_NOT_FOUND); } if (lasso_federation_verify_name_identifier(federation, LASSO_NODE(nameIdentifier)) == FALSE) { return critical_error(LASSO_PROFILE_ERROR_NAME_IDENTIFIER_NOT_FOUND); } /* remove federation of the remote provider */ lasso_identity_remove_federation(profile->identity, profile->remote_providerID); /* if defederation has a session and if there is an assertion for remote provider id, then remove assertion too */ if (profile->session != NULL) { lasso_session_remove_assertion(profile->session, profile->remote_providerID); } return 0; } /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void class_init(LassoDefederationClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); nclass->node_data = NULL; } GType lasso_defederation_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoDefederationClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoDefederation), 0, NULL, NULL, }; this_type = g_type_register_static(LASSO_TYPE_PROFILE, "LassoDefederation", &this_info, 0); } return this_type; } /** * lasso_defederation_new: * @server: the #LassoServer * * Creates a new #LassoDefederation. * * Return value: a newly created #LassoDefederation object; or NULL if an error * occured **/ LassoDefederation* lasso_defederation_new(LassoServer *server) { LassoDefederation *defederation; g_return_val_if_fail(LASSO_IS_SERVER(server), NULL); defederation = g_object_new(LASSO_TYPE_DEFEDERATION, NULL); LASSO_PROFILE(defederation)->server = g_object_ref(server); return defederation; } lasso-2.8.2/lasso/id-ff/PaxHeaders/identity.h0000644000000000000000000000013214115351423016031 xustar0030 mtime=1630917395.103572863 30 atime=1678814151.004993823 30 ctime=1678814320.957953014 lasso-2.8.2/lasso/id-ff/identity.h0000644000175000017500000000473114115351423021306 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_IDENTITY_H__ #define __LASSO_IDENTITY_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "../xml/xml.h" #include "federation.h" #define LASSO_TYPE_IDENTITY (lasso_identity_get_type()) #define LASSO_IDENTITY(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_IDENTITY, LassoIdentity)) #define LASSO_IDENTITY_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_IDENTITY, LassoIdentityClass)) #define LASSO_IS_IDENTITY(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_IDENTITY)) #define LASSO_IS_IDENTITY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_IDENTITY)) #define LASSO_IDENTITY_GET_CLASS(o) \ (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_IDENTITY, LassoIdentityClass)) typedef struct _LassoIdentity LassoIdentity; typedef struct _LassoIdentityClass LassoIdentityClass; typedef struct _LassoIdentityPrivate LassoIdentityPrivate; struct _LassoIdentity { LassoNode parent; /*< public >*/ GHashTable *federations; /* of LassoFederation */ gboolean is_dirty; /*< private >*/ LassoIdentityPrivate *private_data; }; struct _LassoIdentityClass { LassoNodeClass parent; }; LASSO_EXPORT GType lasso_identity_get_type(void); LASSO_EXPORT LassoIdentity* lasso_identity_new(void); LASSO_EXPORT LassoIdentity* lasso_identity_new_from_dump(const gchar *dump); LASSO_EXPORT LassoFederation* lasso_identity_get_federation( LassoIdentity *identity, const char *providerID); LASSO_EXPORT void lasso_identity_destroy(LassoIdentity *identity); LASSO_EXPORT gchar* lasso_identity_dump(LassoIdentity *identity); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_IDENTITY_H__ */ lasso-2.8.2/lasso/id-ff/PaxHeaders/loginprivate.h0000644000000000000000000000013214117162531016705 xustar0030 mtime=1631380825.852638017 30 atime=1678814151.008993845 30 ctime=1678814321.005953287 lasso-2.8.2/lasso/id-ff/loginprivate.h0000644000175000017500000000235514117162531022162 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_LOGIN_PRIVATE_H__ #define __LASSO_LOGIN_PRIVATE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "config.h" #include "../xml/saml-2.0/saml2_assertion.h" struct _LassoLoginPrivate { char *soap_request_msg; LassoSaml2Assertion *saml2_assertion; char *request_id; }; #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_LOGIN_PRIVATE_H__ */ lasso-2.8.2/lasso/id-ff/PaxHeaders/provider.c0000644000000000000000000000013214364261206016032 xustar0030 mtime=1674666630.742769094 30 atime=1678814225.109409843 30 ctime=1678814320.989953195 lasso-2.8.2/lasso/id-ff/provider.c0000644000175000017500000016557614364261206021326 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ /** * SECTION:provider * @short_description: Service or identity provider * * The #LassoProvider object holds metadata about a provider. Metadata are sorted into descriptors, * each descriptor being assigned a role. We refer you to Liberty Metadata Description * and Discovery Specification and Metadata for the OASIS Security Assertion Markup Language (SAML) V2.0. Roles are represented by the enumeration #LassoProviderRole, you can access descriptors content using lasso_provider_get_metadata_list_for_role() and lasso_provider_get_metadata_by_role(). Descriptors resources are flattened inside a simple hashtable. For example to get the URL(s) for the SAML 2.0 single logout response endpoint using binding HTTP-POST of the SP descriptor of a provider called x, you would call: GList *urls = lasso_provider_get_metadata_list_for_role(x, LASSO_PROVIDER_ROLE_SP, "SingleLogoutService HTTP-POST ResponseLocation"); A provider usually possess a default role stored in the #LassoProvider.role field, which is initialized by the lasso_server_add_provider() method when registering a new remote provider to our current provider. The methods lasso_provider_get_metadata() and lasso_provider_get_metadata_list() use this default role to access descriptors. **/ #include "../xml/private.h" #include #include #include #include #include #include #include #include "provider.h" #include "providerprivate.h" #include "../saml-2.0/providerprivate.h" #include #include "../utils.h" #include "../debug.h" #include "../keyprivate.h" static char *protocol_uris[LASSO_MD_PROTOCOL_TYPE_LAST] = { "http://projectliberty.org/profiles/fedterm", "http://projectliberty.org/profiles/nim", "http://projectliberty.org/profiles/rni", "http://projectliberty.org/profiles/slo", NULL /* none for single sign on */ }; static char *protocol_md_nodename[LASSO_MD_PROTOCOL_TYPE_LAST] = { "FederationTerminationNotificationProtocolProfile", "NameIdentifierMappingProtocolProfile", "RegisterNameIdentifierProtocolProfile", "SingleLogoutProtocolProfile", "SingleSignOnProtocolProfile" }; static char *protocol_roles[LASSO_PROVIDER_ROLE_LAST] = { NULL, "idp", "sp", "authn-authority", "pdp", "attribute-authority" }; char *protocol_methods[LASSO_HTTP_METHOD_LAST] = { "", "", "", "", "", "-http", "-soap" }; static gboolean _lasso_provider_load_metadata_from_xmlnode(LassoProvider *provider, xmlNode *node); static int _lasso_provider_get_role_index(LassoProviderRole role); void _lasso_provider_add_metadata_value_for_role(LassoProvider *provider, LassoProviderRole role, const char *name, const char *value); typedef int LassoProviderRoleIndex; static int lasso_provider_try_loading_public_keys(LassoProvider *provider, GList **public_keys, gboolean mandatory) { if (provider->public_key || provider->private_data->signing_key_descriptors) { *public_keys = lasso_provider_get_public_keys(provider); if (*public_keys == NULL) return LASSO_DS_ERROR_PUBLIC_KEY_LOAD_FAILED; } else { *public_keys = NULL; } if (*public_keys == NULL && mandatory) return LASSO_PROVIDER_ERROR_MISSING_PUBLIC_KEY; return 0; } static int lasso_provider_try_loading_ca_cert_chain(LassoProvider *provider, xmlSecKeysMngrPtr *keys_mngr) { if (provider->ca_cert_chain != NULL) { *keys_mngr = lasso_load_certs_from_pem_certs_chain_file( provider->ca_cert_chain); if (*keys_mngr == NULL) return LASSO_DS_ERROR_CA_CERT_CHAIN_LOAD_FAILED; } else { *keys_mngr = NULL; } return 0; } /*****************************************************************************/ /* public methods */ /*****************************************************************************/ /** * lasso_provider_get_assertion_consumer_service_url: * @provider: a #LassoProvider * @service_id:(allow-none): the AssertionConsumerServiceID, NULL for default * * Extracts the AssertionConsumerServiceURL from the provider metadata * descriptor. * * Return value:(allow-none)(transfer full): the element value, NULL if the element was not found. This * string must be freed by the caller. **/ gchar* lasso_provider_get_assertion_consumer_service_url(LassoProvider *provider, const char *service_id) { char *name = NULL; char *assertion_consumer_service_url = NULL; g_return_val_if_fail(LASSO_IS_PROVIDER(provider), NULL); if (provider->private_data->conformance == LASSO_PROTOCOL_SAML_2_0) { long sid = -1; if (service_id != NULL) { if (lasso_string_to_xsd_integer(service_id, &sid)) { if (sid < 0) { sid = -1; } } } return lasso_saml20_provider_get_assertion_consumer_service_url(provider, sid); } if (service_id == NULL) service_id = provider->private_data->default_assertion_consumer; name = g_strdup_printf("AssertionConsumerServiceURL %s", service_id); assertion_consumer_service_url = lasso_provider_get_metadata_one_for_role(provider, LASSO_PROVIDER_ROLE_SP, name); lasso_release(name); return assertion_consumer_service_url; } static LassoProviderRoleIndex _lasso_provider_get_role_index(LassoProviderRole role) { switch (role) { case LASSO_PROVIDER_ROLE_IDP: return 1; case LASSO_PROVIDER_ROLE_SP: return 2; case LASSO_PROVIDER_ROLE_AUTHN_AUTHORITY: return 3; case LASSO_PROVIDER_ROLE_AUTHZ_AUTHORITY: return 4; case LASSO_PROVIDER_ROLE_ATTRIBUTE_AUTHORITY: return 5; default: return 0; } } const char *role_to_prefix(LassoProviderRole role) { return protocol_roles[_lasso_provider_get_role_index(role)]; } void _lasso_provider_add_metadata_value_for_role(LassoProvider *provider, LassoProviderRole role, const char *name, const char *value) { GList *l; GHashTable *descriptor; char *symbol; const char *role_prefix; g_return_if_fail(LASSO_IS_PROVIDER(provider) && name && value); descriptor = provider->private_data->Descriptors; /* default to SP */ g_return_if_fail (descriptor); l = (GList*)lasso_provider_get_metadata_list_for_role(provider, role, name); lasso_list_add_string(l, value); if (! l->next) { /* first element added to this key */ role_prefix = role_to_prefix(role); g_return_if_fail(role_prefix); symbol = g_strdup_printf("%s %s", role_prefix, name); g_hash_table_insert(descriptor, symbol, l); } } /** * lasso_provider_get_metadata_list_for_role: * @provider: a #LassoProvider * @role: a #LassoProviderRole value * @name: the element name * * Extracts zero to many elements from the @provider descriptor for the given @role. * * Return value:(transfer none)(element-type string): a #GList with the elements. This GList is internally * allocated and points to internally allocated strings. It must * not be freed, modified or stored. **/ GList* lasso_provider_get_metadata_list_for_role(const LassoProvider *provider, LassoProviderRole role, const char *name) { GList *l = NULL; GHashTable *descriptor; char *symbol; const char *role_prefix; g_return_val_if_fail(LASSO_IS_PROVIDER(provider) && name, NULL); g_return_val_if_fail(_lasso_provider_get_role_index(role), NULL); descriptor = provider->private_data->Descriptors; /* default to SP */ if (descriptor == NULL) return NULL; role_prefix = role_to_prefix(role); g_return_val_if_fail(role_prefix, NULL); symbol = g_strdup_printf("%s %s", role_prefix, name); l = g_hash_table_lookup(descriptor, symbol); lasso_release(symbol); return l; } /** * lasso_provider_get_metadata_one_for_role: * @provider: a #LassoProvider object * @role: a #LassoProviderRole value * @name: a metadata information name * * Return the given information extracted from the metadata of the given #LassoProvider for the * given @role descriptor. * * Retun value: a newly allocated string or NULL. If non-NULL must be freed by the caller. */ char* lasso_provider_get_metadata_one_for_role(LassoProvider *provider, LassoProviderRole role, const char *name) { const GList *l; l = lasso_provider_get_metadata_list_for_role(provider, role, name); if (l) return g_strdup(l->data); return NULL; } /** * lasso_provider_get_metadata_one: * @provider: a #LassoProvider * @name: the element name * * Extracts the element @name from the provider metadata descriptor. * * Return value:(transfer full)(allow-none): the element value, NULL if the element was not found. * This string must be freed by the caller. **/ gchar* lasso_provider_get_metadata_one(LassoProvider *provider, const char *name) { return lasso_provider_get_metadata_one_for_role(provider, provider->role, name); } /** * lasso_provider_get_metadata_list: * @provider: a #LassoProvider * @name: the element name * * Extracts zero to many elements from the provider metadata descriptor. * * Return value:(transfer none)(element-type string): a #GList with the elements. This GList is internally * allocated and points to internally allocated strings. It must * not be freed, modified or stored. **/ GList* lasso_provider_get_metadata_list(LassoProvider *provider, const char *name) { return lasso_provider_get_metadata_list_for_role(provider, provider->role, name); } /** * lasso_provider_get_first_http_method: * @provider: (transfer none): a #LassoProvider * @remote_provider: a #LassoProvider depicting the remote provider * @protocol_type: a Liberty profile * * Looks up and returns a #LassoHttpMethod appropriate for performing the * @protocol_type between @provider and @remote_provider. * * Return value: the #LassoHttpMethod **/ LassoHttpMethod lasso_provider_get_first_http_method(LassoProvider *provider, LassoProvider *remote_provider, LassoMdProtocolType protocol_type) { char *protocol_profile_prefix; const GList *local_supported_profiles; const GList *remote_supported_profiles; const GList *t1, *t2 = NULL; gboolean found; const gchar *role_prefix; g_return_val_if_fail(LASSO_IS_PROVIDER(provider), LASSO_HTTP_METHOD_NONE); g_return_val_if_fail(remote_provider != NULL, LASSO_HTTP_METHOD_NONE); if (provider->private_data->conformance == LASSO_PROTOCOL_SAML_2_0) { return lasso_saml20_provider_get_first_http_method( provider, remote_provider, protocol_type); } if (remote_provider->role == LASSO_PROVIDER_ROLE_SP) provider->role = LASSO_PROVIDER_ROLE_IDP; if (remote_provider->role == LASSO_PROVIDER_ROLE_IDP) provider->role = LASSO_PROVIDER_ROLE_SP; role_prefix = role_to_prefix(provider->role); g_return_val_if_fail(role_prefix, LASSO_HTTP_METHOD_NONE); protocol_profile_prefix = g_strdup_printf("%s-%s", protocol_uris[protocol_type], role_prefix); local_supported_profiles = lasso_provider_get_metadata_list( provider, protocol_md_nodename[protocol_type]); remote_supported_profiles = lasso_provider_get_metadata_list( remote_provider, protocol_md_nodename[protocol_type]); found = FALSE; t1 = local_supported_profiles; while (t1 && !found) { if (g_str_has_prefix(t1->data, protocol_profile_prefix)) { t2 = remote_supported_profiles; while (t2 && !found) { if (strcmp(t1->data, t2->data) == 0) { found = TRUE; break; /* avoid the g_list_next */ } t2 = g_list_next(t2); } } t1 = g_list_next(t1); } lasso_release(protocol_profile_prefix); if (found) { if (g_str_has_suffix(t2->data, "http")) return LASSO_HTTP_METHOD_REDIRECT; if (g_str_has_suffix(t2->data, "soap")) return LASSO_HTTP_METHOD_SOAP; g_assert_not_reached(); } return LASSO_HTTP_METHOD_NONE; } /** * lasso_provider_accept_http_method: * @provider: a #LassoProvider * @remote_provider: a #LassoProvider depicting the remote provider * @protocol_type: a Liberty profile type * @http_method: an HTTP method * @initiate_profile: whether @provider initiates the profile * * Gets if @http_method is an appropriate method for the @protocol_type profile * between @provider and @remote_provider. * * Return value: %TRUE if it is appropriate **/ gboolean lasso_provider_accept_http_method(LassoProvider *provider, LassoProvider *remote_provider, LassoMdProtocolType protocol_type, LassoHttpMethod http_method, gboolean initiate_profile) { LassoProviderRole initiating_role; char *protocol_profile; const gchar *role_prefix; g_return_val_if_fail(LASSO_IS_PROVIDER(provider), FALSE); /* Be conservative */ if (provider->private_data->conformance == LASSO_PROTOCOL_SAML_2_0) { return lasso_saml20_provider_accept_http_method( provider, remote_provider, protocol_type, http_method, initiate_profile); } initiating_role = remote_provider->role; if (remote_provider->role == LASSO_PROVIDER_ROLE_SP) { provider->role = LASSO_PROVIDER_ROLE_IDP; } if (remote_provider->role == LASSO_PROVIDER_ROLE_IDP) { provider->role = LASSO_PROVIDER_ROLE_SP; } if (initiate_profile) initiating_role = provider->role; role_prefix = role_to_prefix(initiating_role); g_return_val_if_fail(role_prefix, FALSE); protocol_profile = g_strdup_printf("%s-%s%s", protocol_uris[protocol_type], role_prefix, protocol_methods[http_method+1]); if (lasso_provider_has_protocol_profile(provider, protocol_type, protocol_profile) == FALSE) { lasso_release(protocol_profile); return FALSE; } if (lasso_provider_has_protocol_profile(remote_provider, protocol_type, protocol_profile) == FALSE) { lasso_release(protocol_profile); return FALSE; } lasso_release(protocol_profile); return TRUE; } /** * lasso_provider_has_protocol_profile: * @provider: a #LassoProvider * @protocol_type: a Liberty profile type * @protocol_profile: a fully-qualified Liberty profile * * Gets if @provider supports @protocol_profile. * * Return value: %TRUE if it is supported **/ gboolean lasso_provider_has_protocol_profile(LassoProvider *provider, LassoMdProtocolType protocol_type, const char *protocol_profile) { const GList *supported; g_return_val_if_fail(LASSO_IS_PROVIDER(provider), FALSE); /* Be conservative */ supported = lasso_provider_get_metadata_list( provider, protocol_md_nodename[protocol_type]); if (g_list_find_custom((GList*)supported, protocol_profile, (GCompareFunc)strcmp) == NULL) return FALSE; return TRUE; } /** * lasso_provider_get_base64_succinct_id: * @provider: a #LassoProvider * * Computes and returns the base64-encoded provider succinct ID. * * Return value:(transfer full)(allow-none): the provider succinct ID. This string must be freed by the * caller. **/ char* lasso_provider_get_base64_succinct_id(const LassoProvider *provider) { char *succinct_id, *base64_succinct_id, *ret; g_return_val_if_fail(LASSO_IS_PROVIDER(provider), NULL); succinct_id = lasso_sha1(provider->ProviderID); base64_succinct_id = (char*)xmlSecBase64Encode((xmlChar*)succinct_id, 20, 0); xmlFree(succinct_id); ret = g_strdup(base64_succinct_id); xmlFree(base64_succinct_id); return ret; } /** * lasso_provider_get_organization * @provider: a #LassoProvider * * Returns the provider metadata <Organization> XML node. * * Return value:(transfer full)(allow-none): the <Organization/> node (libxml2 xmlNode*); or NULL if it is * not found. This xmlnode must be freed by the caller. **/ xmlNode* lasso_provider_get_organization(const LassoProvider *provider) { g_return_val_if_fail(LASSO_IS_PROVIDER(provider), NULL); if (provider->private_data->organization) { return xmlCopyNode(provider->private_data->organization, 1); } else { return NULL; } } /*****************************************************************************/ /* private methods */ /*****************************************************************************/ static struct XmlSnippet schema_snippets[] = { { "PublicKeyFilePath", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoProvider, public_key), NULL, NULL, NULL}, { "CaCertChainFilePath", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoProvider, ca_cert_chain), NULL, NULL, NULL}, { "MetadataFilePath", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoProvider, metadata_filename), NULL, NULL, NULL}, { "ProviderID", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoProvider, ProviderID), NULL, NULL, NULL}, { "ProviderRole", SNIPPET_ATTRIBUTE, 0, NULL, NULL, NULL}, { "EncryptionMode", SNIPPET_ATTRIBUTE, 0, NULL, NULL, NULL}, { "ProviderDumpVersion", SNIPPET_ATTRIBUTE, 0, NULL, NULL, NULL}, {NULL, 0, 0, NULL, NULL, NULL} }; static LassoNodeClass *parent_class = NULL; /** * lasso_provider_get_public_keys: * @provider: a #LassoProvider object * * Return the public keys associated with this provider. * * Return value: an #xmlSecKey object. */ GList* lasso_provider_get_public_keys(const LassoProvider *provider) { g_return_val_if_fail(LASSO_IS_PROVIDER(provider), NULL); return provider->private_data->signing_public_keys; } /** * lasso_provider_get_encryption_public_key: * @provider: a #LassoProvider object. * * Return the #xmlSecKey public key to use for encrypting content target at @provider. * * Return value:(transfer none)(allow-none): an #xmlSecKey object, or NULL if no key is known or @provider is not a * #LassoProvider. */ xmlSecKey* lasso_provider_get_encryption_public_key(const LassoProvider *provider) { g_return_val_if_fail(LASSO_IS_PROVIDER(provider), NULL); GList *keys; keys = provider->private_data->encryption_public_keys; /* encrypt using the first given key, multiple encryption key in the metadata is generally * useless. roll-over of the encryption key is done mainly at the receiving side, by trying * to decipher using the two private keys, the old and the new. */ if (keys && keys->data) { return (xmlSecKey*)keys->data; } return NULL; } static void _lasso_provider_load_endpoint_type(LassoProvider *provider, xmlNode *endpoint, LassoProviderRole role) { char *name = (char*)endpoint->name; xmlChar *value = NULL; if (strcmp(name, "AssertionConsumerServiceURL") == 0) { char *isDefault = (char*)xmlGetProp(endpoint, (xmlChar*)"isDefault"); char *id = (char*)xmlGetProp(endpoint, (xmlChar*)"id"); name = g_strdup_printf("%s %s", name, id); if (isDefault) { if (strcmp(isDefault, "true") == 0 || strcmp(isDefault, "1") == 0) lasso_assign_string(provider->private_data->default_assertion_consumer, id); xmlFree(isDefault); } xmlFree(id); } else { name = g_strdup_printf("%s", (char*)name); } value = xmlNodeGetContent(endpoint); _lasso_provider_add_metadata_value_for_role(provider, role, name, (char*)value); lasso_release_string(name); xmlFree(value); } static void _lasso_provider_load_descriptor(LassoProvider *provider, xmlNode *xmlnode, LassoProviderRole role) { xmlNode *t; t = xmlSecGetNextElementNode(xmlnode->children); while (t) { if (xmlSecCheckNodeName(t, BAD_CAST "KeyDescriptor", BAD_CAST LASSO_METADATA_HREF)) { _lasso_provider_load_key_descriptor(provider, t); } else { _lasso_provider_load_endpoint_type(provider, t, role); } t = xmlSecGetNextElementNode(t->next); } } static xmlNode* get_xmlNode(LassoNode *node, gboolean lasso_dump) { xmlNode *xmlnode; LassoProvider *provider = LASSO_PROVIDER(node); char *roles[LASSO_PROVIDER_ROLE_LAST] = { "None", "SP", "IdP", "AuthnAuthority", "PDP", "AttributeAuthority" }; char *encryption_mode[] = { "None", "NameId", "Assertion", "Both" }; xmlnode = parent_class->get_xmlNode(node, lasso_dump); /* Save provider role */ xmlSetProp(xmlnode, (xmlChar*)"ProviderDumpVersion", (xmlChar*)"2"); if (provider->role) { xmlSetProp(xmlnode, (xmlChar*)"ProviderRole", (xmlChar*)roles[provider->role]); } /* Save encryption mode */ xmlSetProp(xmlnode, (xmlChar*)"EncryptionMode", (xmlChar*)encryption_mode[provider->private_data->encryption_mode]); return xmlnode; } void _lasso_provider_load_key_descriptor(LassoProvider *provider, xmlNode *key_descriptor) { LassoProviderPrivate *private_data; xmlChar *use; g_return_if_fail(LASSO_IS_PROVIDER(provider)); g_return_if_fail(provider->private_data); private_data = provider->private_data; use = xmlGetProp(key_descriptor, (xmlChar*)"use"); if (use == NULL || lasso_strisequal((char *)use,"signing")) { lasso_list_add_xml_node(private_data->signing_key_descriptors, key_descriptor); } if (use == NULL || strcmp((char*)use, "encryption") == 0) { lasso_assign_xml_node(private_data->encryption_key_descriptor, key_descriptor); } lasso_release_xml_string(use); } static int init_from_xml(LassoNode *node, xmlNode *xmlnode) { LassoProvider *provider = LASSO_PROVIDER(node); static char * const roles[LASSO_PROVIDER_ROLE_LAST] = { "None", "SP", "IdP", "AuthnAuthority", "PDP", "AttributeAuthority" }; xmlChar *s; int i; int rc = 0; parent_class->init_from_xml(node, xmlnode); if (xmlnode == NULL) { return LASSO_XML_ERROR_OBJECT_CONSTRUCTION_FAILED; } /* Load provider role */ s = xmlGetProp(xmlnode, (xmlChar*)"ProviderRole"); provider->role = LASSO_PROVIDER_ROLE_NONE; if (s) { i = LASSO_PROVIDER_ROLE_NONE; while (i < LASSO_PROVIDER_ROLE_LAST) { if (strcmp((char*)s, roles[i]) == 0) { provider->role = i; break; } i++; } lasso_release_xml_string(s); } /* Load encryption mode */ s = xmlGetProp(xmlnode, (xmlChar*)"EncryptionMode"); if (s != NULL && strcmp((char*)s, "NameId") == 0) { provider->private_data->encryption_mode = LASSO_ENCRYPTION_MODE_NAMEID; } else if (s != NULL && strcmp((char*)s, "Assertion") == 0) { provider->private_data->encryption_mode = LASSO_ENCRYPTION_MODE_ASSERTION; } else if (s != NULL && strcmp((char*)s, "Both") == 0) { provider->private_data->encryption_mode = LASSO_ENCRYPTION_MODE_NAMEID | LASSO_ENCRYPTION_MODE_ASSERTION; } if (s != NULL) { xmlFree(s); } /* Load metadata */ if (provider->metadata_filename) { if (! lasso_provider_load_metadata(provider, provider->metadata_filename)) { if (! lasso_provider_load_metadata_from_buffer(provider, provider->metadata_filename)) { message(G_LOG_LEVEL_WARNING, "Metadata unrecoverable from dump"); return 1; } } } /* Load signing and encryption public keys */ if (!lasso_provider_load_public_key(provider, LASSO_PUBLIC_KEY_SIGNING)) { message(G_LOG_LEVEL_WARNING, "Could not load public signing key of %s", provider->ProviderID); rc = 1; } if (!lasso_provider_load_public_key(provider, LASSO_PUBLIC_KEY_ENCRYPTION)) { message(G_LOG_LEVEL_WARNING, "Could not load public encryption key of %s", provider->ProviderID); rc = 1; } return rc; } static void* _lasso_provider_get_pdata_thing(LassoProvider *provider, ptrdiff_t offset) { LassoProviderPrivate *pdata; lasso_return_val_if_fail(LASSO_IS_PROVIDER(provider), NULL); pdata = provider->private_data; if (pdata) return G_STRUCT_MEMBER_P(pdata, offset); return NULL; } /** * lasso_provider_get_idp_supported_attributes: * @provider: a #LassoProvider object * * If the provider supports the IDP SSO role, then return the list of Attribute definition that this * provider declared supporting. * * Return value:(transfer none)(element-type LassoNode): a list of #LassoSaml2Attribute or #LassoSamlAttribute */ GList* lasso_provider_get_idp_supported_attributes(LassoProvider *provider) { return _lasso_provider_get_pdata_thing(provider, G_STRUCT_OFFSET(LassoProviderPrivate, attributes)); } /** * lasso_provider_get_valid_until: * @provider: a #LassoProvider object * * Return the time after which the metadata for this provider will become invalid. This is an * ISO-8601 formatted string. * * Return value:(transfer none): an internally allocated string, you can copy it but not store it. */ char* lasso_provider_get_valid_until(LassoProvider *provider) { return _lasso_provider_get_pdata_thing(provider, G_STRUCT_OFFSET(LassoProviderPrivate, valid_until)); } /** * lasso_provider_get_cache_duration: * @provider: a #LassoProvider object * * Return the time during which the metadata for this provider can be kept. * * Return value:(transfer none): an internally allocated string, you can copy it but not store it. */ char* lasso_provider_get_cache_duration(LassoProvider *provider) { return _lasso_provider_get_pdata_thing(provider, G_STRUCT_OFFSET(LassoProviderPrivate, cache_duration)); } /*****************************************************************************/ /* overridden parent class methods */ /*****************************************************************************/ static void free_list_strings(GList *list) { lasso_release_list_of_strings(list); } static void lasso_endpoint_free(EndpointType *endpoint_type) { g_free(endpoint_type->binding); g_free(endpoint_type->url); g_free(endpoint_type->kind); g_free(endpoint_type->return_url); g_free(endpoint_type); } static void dispose(GObject *object) { LassoProvider *provider = LASSO_PROVIDER(object); if (provider->private_data->dispose_has_run) { return; } provider->private_data->dispose_has_run = TRUE; lasso_release_ghashtable(provider->private_data->Descriptors); if (provider->private_data->organization) { xmlFreeNode(provider->private_data->organization); provider->private_data->organization = NULL; } if (provider->private_data->default_assertion_consumer) { lasso_release(provider->private_data->default_assertion_consumer); provider->private_data->default_assertion_consumer = NULL; } if (provider->private_data->signing_public_keys) { lasso_release_list_of_sec_key(provider->private_data->signing_public_keys); } if (provider->private_data->signing_key_descriptors) { lasso_release_list_of_xml_node(provider->private_data->signing_key_descriptors); } if (provider->private_data->encryption_key_descriptor) { xmlFreeNode(provider->private_data->encryption_key_descriptor); provider->private_data->encryption_key_descriptor = NULL; } if (provider->private_data->encryption_public_key_str) { lasso_release(provider->private_data->encryption_public_key_str); provider->private_data->encryption_public_key_str = NULL; } lasso_release_list_of_sec_key(provider->private_data->encryption_public_keys); lasso_release(provider->private_data->affiliation_id); provider->private_data->affiliation_id = NULL; lasso_release(provider->private_data->affiliation_owner_id); provider->private_data->affiliation_owner_id = NULL; lasso_release_list_of_full(provider->private_data->endpoints, lasso_endpoint_free); lasso_assign_new_signature_context(provider->private_data->signature_context, LASSO_SIGNATURE_CONTEXT_NONE); G_OBJECT_CLASS(parent_class)->dispose(G_OBJECT(provider)); } /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ static void instance_init(LassoProvider *provider, G_GNUC_UNUSED void *unused) { provider->role = LASSO_PROVIDER_ROLE_NONE; provider->ProviderID = NULL; provider->metadata_filename = NULL; provider->public_key = NULL; provider->ca_cert_chain = NULL; provider->private_data = G_TYPE_INSTANCE_GET_PRIVATE(provider, LASSO_TYPE_PROVIDER, LassoProviderPrivate); provider->private_data->dispose_has_run = FALSE; provider->private_data->default_assertion_consumer = NULL; provider->private_data->affiliation_id = NULL; provider->private_data->affiliation_owner_id = NULL; provider->private_data->organization = NULL; provider->private_data->signing_public_keys = NULL; provider->private_data->signing_key_descriptors = NULL; provider->private_data->encryption_key_descriptor = NULL; provider->private_data->encryption_public_key_str = NULL; provider->private_data->encryption_public_keys = NULL; provider->private_data->encryption_mode = LASSO_ENCRYPTION_MODE_NONE; provider->private_data->encryption_sym_key_type = LASSO_ENCRYPTION_SYM_KEY_TYPE_AES_128; provider->private_data->key_encryption_method = LASSO_KEY_ENCRYPTION_METHOD_DEFAULT; provider->private_data->signature_context = LASSO_SIGNATURE_CONTEXT_NONE; /* no value_destroy_func since it shouldn't destroy the GList on insert */ provider->private_data->Descriptors = g_hash_table_new_full( g_str_hash, g_str_equal, g_free, (GFreeFunc)free_list_strings); provider->private_data->attributes = NULL; } static void class_init(LassoProviderClass *klass, void *unused G_GNUC_UNUSED) { LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); parent_class = g_type_class_peek_parent(klass); nclass->node_data = g_new0(LassoNodeClassData, 1); lasso_node_class_set_nodename(nclass, "Provider"); lasso_node_class_set_ns(nclass, LASSO_LASSO_HREF, LASSO_LASSO_PREFIX); lasso_node_class_add_snippets(nclass, schema_snippets); nclass->get_xmlNode = get_xmlNode; nclass->init_from_xml = init_from_xml; G_OBJECT_CLASS(klass)->dispose = dispose; g_type_class_add_private(G_OBJECT_CLASS(klass), sizeof(LassoProviderPrivate)); } GType lasso_provider_get_type() { static GType this_type = 0; if (!this_type) { static const GTypeInfo this_info = { sizeof (LassoProviderClass), NULL, NULL, (GClassInitFunc) class_init, NULL, NULL, sizeof(LassoProvider), 0, (GInstanceInitFunc) instance_init, NULL }; this_type = g_type_register_static(LASSO_TYPE_NODE, "LassoProvider", &this_info, 0); } return this_type; } /** * lasso_provider_get_protocol_conformance: * @provider: a #LassoProvider object * * Return the protocol conformance of the given provider, it should allow to switch behaviour of SP * and IdP code toward a specific protocol. See also #LassoProtocolConformance. * * Return value: a value in the #LassoProtocolConformance enumeration. */ LassoProtocolConformance lasso_provider_get_protocol_conformance(const LassoProvider *provider) { g_return_val_if_fail(LASSO_IS_PROVIDER(provider), LASSO_PROTOCOL_NONE); return provider->private_data->conformance; } /** * lasso_provider_set_protocol_conformance: * @provider: a #LassoProvider object * @protocol_conformance: #LassoProtocolConformance enumerated value. * * Normally the protocol conformance is set when the metadata for the * provider is loaded because the metadata defines the type of * server. However some #LassoServer variants do not have metadata * (e.g. ECP) therefore instead of loading the metadata it is * necessary to explicitly set the protocol conformance because parts * of the Lasso library dispatch based on the protocol conformance. * Without the protocol conformance being set it is likely the wrong * code will execute. * * **WARNING**, do not manually set the protocol conformance if * metadata has been loaded, metadata is the final arbiter of protocol * conformance. * * Return value: 0 on success; another value if an error occured. **/ void lasso_provider_set_protocol_conformance(LassoProvider *provider, LassoProtocolConformance protocol_conformance) { provider->private_data->conformance = protocol_conformance; } gboolean _lasso_provider_load_metadata_from_buffer(LassoProvider *provider, const gchar *metadata, int length) { xmlDoc *doc; xmlNode *node; gboolean rc = TRUE; lasso_return_val_if_fail(LASSO_IS_PROVIDER(provider), FALSE); if (length == -1) { length = strlen(metadata); } doc = lasso_xml_parse_memory(metadata, length); if (doc == NULL) { return FALSE; } node = xmlDocGetRootElement(doc); goto_cleanup_if_fail_with_rc (_lasso_provider_load_metadata_from_xmlnode(provider, node), FALSE); lasso_assign_string(provider->metadata_filename, metadata); cleanup: lasso_release_doc(doc); return rc; } /** * lasso_provider_load_metadata_from_buffer: * @provider: a #LassProvider object * @metadata: a char* string containing a metadata XML file. * * Load metadata into this provider object using the given string buffer. * * Return value: TRUE if successfull, FALSE otherwise. **/ gboolean lasso_provider_load_metadata_from_buffer(LassoProvider *provider, const gchar *metadata) { return _lasso_provider_load_metadata_from_buffer(provider, metadata, -1); } /** * lasso_provider_load_metadata: * @provider: a #LassProvider object * @path: the path to a SAML 2.0 of ID-FF 1.2 metadata file. * * Load metadata into this provider object by reading them from the given file. * * Return value: TRUE if successfull, FALSE otherwise. **/ gboolean lasso_provider_load_metadata(LassoProvider *provider, const gchar *path) { char *file_content; size_t file_length; if (g_file_get_contents(path, &file_content, &file_length, NULL)) { gboolean ret; ret = _lasso_provider_load_metadata_from_buffer(provider, file_content, file_length); lasso_release(file_content); return ret; } return FALSE; } static gboolean _lasso_provider_load_metadata_from_xmlnode(LassoProvider *provider, xmlNode *node) { xmlDoc *doc = NULL; xmlXPathContext *xpathCtx; xmlXPathObject *xpathObj; const char *xpath_idp = "/md:EntityDescriptor/md:IDPDescriptor"; const char *xpath_sp = "/md:EntityDescriptor/md:SPDescriptor"; const char *xpath_organization = "/md:EntityDescriptor/md:Organization"; xmlChar *providerID = NULL; g_return_val_if_fail(LASSO_IS_PROVIDER(provider), FALSE); g_return_val_if_fail(node != NULL && node->ns != NULL, FALSE); g_return_val_if_fail (node->doc != NULL, FALSE); /* In the future it could be necessary to handle node without a document, and to create one * to hold them. */ doc = node->doc; if (strcmp((char*)node->ns->href, LASSO_SAML2_METADATA_HREF) == 0) { gboolean result; provider->private_data->conformance = LASSO_PROTOCOL_SAML_2_0; result = lasso_saml20_provider_load_metadata(provider, node); return result; } provider->private_data->conformance = LASSO_PROTOCOL_LIBERTY_1_2; xpathCtx = xmlXPathNewContext(doc); xmlXPathRegisterNs(xpathCtx, (xmlChar*)"md", (xmlChar*)LASSO_METADATA_HREF); xpathObj = xmlXPathEvalExpression((xmlChar*)"/md:EntityDescriptor", xpathCtx); /* if empty: not a ID-FF 1.2 metadata file -> bails out */ if (xpathObj->nodesetval == NULL || xpathObj->nodesetval->nodeNr == 0) { xmlXPathFreeObject(xpathObj); xmlXPathRegisterNs(xpathCtx, (xmlChar*)"md11", (xmlChar*)"http://projectliberty.org/schemas/core/2002/12"); xpathObj = xmlXPathEvalExpression( (xmlChar*)"/md11:SPDescriptor|/md11:IDPDescriptor", xpathCtx); if (xpathObj->nodesetval == NULL || xpathObj->nodesetval->nodeNr == 0) { message (G_LOG_LEVEL_CRITICAL, "lasso_saml20_provider_load_metadata_from_xmlnode: no md12:EntityDescriptor or md11:SPDesriptor or md11:IDPDescriptor"); xmlXPathFreeObject(xpathObj); xmlXPathFreeContext(xpathCtx); return FALSE; } provider->private_data->conformance = LASSO_PROTOCOL_LIBERTY_1_1; xpath_idp = "/md11:IDPDescriptor"; xpath_sp = "/md11:SPDescriptor"; } node = xpathObj->nodesetval->nodeTab[0]; providerID = xmlGetProp(node, (xmlChar*)"providerID"); lasso_assign_string(provider->ProviderID, (char*)providerID); lasso_release_xml_string(providerID); xmlXPathFreeObject(xpathObj); xpathObj = xmlXPathEvalExpression((xmlChar*)xpath_idp, xpathCtx); if (xpathObj && xpathObj->nodesetval && xpathObj->nodesetval->nodeNr == 1) { _lasso_provider_load_descriptor(provider, xpathObj->nodesetval->nodeTab[0], LASSO_PROVIDER_ROLE_IDP); if (provider->private_data->conformance < LASSO_PROTOCOL_LIBERTY_1_2) { /* lookup ProviderID */ node = xpathObj->nodesetval->nodeTab[0]->children; while (node) { if (strcmp((char*)node->name, "ProviderID") == 0) { providerID = xmlNodeGetContent(node); lasso_assign_string(provider->ProviderID, (char*)providerID); lasso_release_xml_string(providerID); break; } node = node->next; } } } xmlXPathFreeObject(xpathObj); xpathObj = xmlXPathEvalExpression((xmlChar*)xpath_sp, xpathCtx); if (xpathObj && xpathObj->nodesetval && xpathObj->nodesetval->nodeNr == 1) { _lasso_provider_load_descriptor(provider, xpathObj->nodesetval->nodeTab[0], LASSO_PROVIDER_ROLE_SP); if (provider->private_data->conformance < LASSO_PROTOCOL_LIBERTY_1_2) { /* lookup ProviderID */ node = xpathObj->nodesetval->nodeTab[0]->children; while (node) { if (strcmp((char*)node->name, "ProviderID") == 0) { providerID = xmlNodeGetContent(node); lasso_assign_string(provider->ProviderID, (char*)providerID); lasso_release_xml_string(providerID); break; } node = node->next; } } } xmlXPathFreeObject(xpathObj); xpathObj = xmlXPathEvalExpression((xmlChar*)xpath_organization, xpathCtx); if (xpathObj && xpathObj->nodesetval && xpathObj->nodesetval->nodeNr == 1) { lasso_assign_xml_node(provider->private_data->organization, xpathObj->nodesetval->nodeTab[0]); } xmlXPathFreeObject(xpathObj); xmlXPathFreeContext(xpathCtx); return TRUE; } /** * lasso_provider_new_helper: * * Helper function for the two other constructors, lasso_provider_new and lasso_provider_new_from_buffer. * Help to factorize common code. */ static LassoProvider* _lasso_provider_new_helper(LassoProviderRole role, const char *metadata, const char *public_key, const char *ca_cert_chain, gboolean (*loader)( LassoProvider *provider, const gchar *metadata)) { LassoProvider *provider = NULL, *ret = NULL; provider = (LassoProvider*)g_object_new(LASSO_TYPE_PROVIDER, NULL); provider->role = role; if (loader(provider, metadata) == FALSE) { if (loader == lasso_provider_load_metadata) { message(G_LOG_LEVEL_WARNING, "Cannot load metadata from %s", metadata); } goto cleanup; } lasso_assign_string(provider->public_key, public_key); lasso_assign_string(provider->ca_cert_chain, ca_cert_chain); if (!lasso_provider_load_public_key(provider, LASSO_PUBLIC_KEY_SIGNING)) { message(G_LOG_LEVEL_WARNING, "Could not load public signing key of %s", provider->ProviderID); goto cleanup; } if (!lasso_provider_load_public_key(provider, LASSO_PUBLIC_KEY_ENCRYPTION)) { message(G_LOG_LEVEL_WARNING, "Could not load public encryption key of %s", provider->ProviderID); goto cleanup; } provider->private_data->encryption_mode = LASSO_ENCRYPTION_MODE_NONE; lasso_transfer_gobject(ret, provider); cleanup: lasso_release_gobject(provider); return ret; } /** * lasso_provider_new: * @role: provider role, identity provider or service provider * @metadata: path to the provider metadata file * @public_key:(allow-none): path to the provider public key file (may be a certificate) or NULL * @ca_cert_chain:(allow-none): path to the provider CA certificate chain file or NULL * * Creates a new #LassoProvider. * * Return value: a newly created #LassoProvider; or NULL if an error occured */ LassoProvider* lasso_provider_new(LassoProviderRole role, const char *metadata, const char *public_key, const char *ca_cert_chain) { return _lasso_provider_new_helper(role, metadata, public_key, ca_cert_chain, lasso_provider_load_metadata); } /** * lasso_provider_new_from_buffer: * @role: provider role, identity provider or service provider * @metadata: string buffer containing a metadata file * @public_key:(allow-none): path to the provider public key file (may be a certificate) or NULL * @ca_cert_chain:(allow-none): path to the provider CA certificate chain file or NULL * * Creates a new #LassoProvider. * * Return value: a newly created #LassoProvider; or NULL if an error occured */ LassoProvider* lasso_provider_new_from_buffer(LassoProviderRole role, const char *metadata, const char *public_key, const char *ca_cert_chain) { return _lasso_provider_new_helper(role, metadata, public_key, ca_cert_chain, lasso_provider_load_metadata_from_buffer); } /** * lasso_provider_load_public_key: * @provider: a #LassoProvider object * @public_key_type: the type of public key to load * * Load the public key from their transport format, a file or a KeyDescriptor #xmlNode. * * Return value: TRUE if loading was succesfull, FALSE otherwise. */ gboolean lasso_provider_load_public_key(LassoProvider *provider, LassoPublicKeyType public_key_type) { gchar *public_key = NULL; GList *keys_descriptors = NULL; xmlNode *key_descriptor = NULL; GList *keys = NULL; gboolean ret = FALSE; g_return_val_if_fail(LASSO_IS_PROVIDER(provider), FALSE); if (public_key_type == LASSO_PUBLIC_KEY_SIGNING) { public_key = provider->public_key; keys_descriptors = provider->private_data->signing_key_descriptors; } else { key_descriptor = provider->private_data->encryption_key_descriptor; } if (public_key == NULL && keys_descriptors == NULL && key_descriptor == NULL) { return TRUE; } if (public_key != NULL) { xmlSecKey *key = lasso_xmlsec_load_private_key(public_key, NULL, lasso_get_default_signature_method(), NULL); if (key) { lasso_list_add_new_sec_key(keys, key); } else { message(G_LOG_LEVEL_WARNING, "Could not read public key from file %s", public_key); } } if (key_descriptor) { xmlSecKey *key = lasso_xmlsec_load_key_info(key_descriptor); if (key) { lasso_list_add_new_sec_key(keys, key); } else { message(G_LOG_LEVEL_WARNING, "Could not read KeyInfo from %s KeyDescriptor", public_key_type == LASSO_PUBLIC_KEY_SIGNING ? "signing" : "encryption"); } } if (keys_descriptors) { lasso_foreach_full_begin(xmlNode*, key_descriptor, it, keys_descriptors); { xmlSecKey *key = lasso_xmlsec_load_key_info(key_descriptor); if (key) { lasso_list_add_new_sec_key(keys, key); } else { message(G_LOG_LEVEL_WARNING, "Could not read KeyInfo from %s " "KeyDescriptor", public_key_type == LASSO_PUBLIC_KEY_SIGNING ? "signing" : "encryption"); } } lasso_foreach_full_end(); } if (keys) { GList **dest = NULL; switch (public_key_type) { case LASSO_PUBLIC_KEY_SIGNING: dest = &provider->private_data->signing_public_keys; break; case LASSO_PUBLIC_KEY_ENCRYPTION: dest = &provider->private_data->encryption_public_keys; break; } if (dest) { lasso_transfer_full(*dest, keys, list_of_sec_key); ret = TRUE; } } lasso_release_list_of_sec_key(keys); return ret; } /** * lasso_provider_new_from_dump: * @dump: XML provider dump * * Restores the @dump to a new #LassoProvider. * * Return value: a newly created #LassoProvider; or NULL if an error occured. **/ LassoProvider* lasso_provider_new_from_dump(const gchar *dump) { LassoProvider *provider; provider = (LassoProvider*)lasso_node_new_from_dump(dump); if (! LASSO_IS_PROVIDER(provider)) { lasso_release_gobject(provider); } return provider; } int lasso_provider_verify_saml_signature(LassoProvider *provider, xmlNode *signed_node, xmlDoc *doc) { const char *id_attribute_name = NULL; const xmlChar *node_ns = NULL; GList *public_keys = NULL; xmlSecKeysMngr *keys_manager = NULL; int rc = 0; int signature_rc = 0; lasso_bad_param(PROVIDER, provider); lasso_null_param(signed_node); g_return_val_if_fail((signed_node->doc && doc) || ! signed_node->doc, LASSO_PARAM_ERROR_INVALID_VALUE); /* ID-FF 1.2 Signatures case */ node_ns = xmlSecGetNodeNsHref(signed_node); if ((strcmp((char*)node_ns, LASSO_SAML2_PROTOCOL_HREF) == 0) || (strcmp((char*)node_ns, LASSO_SAML2_ASSERTION_HREF) == 0)) { id_attribute_name = "ID"; } else if (xmlSecCheckNodeName(signed_node, (xmlChar*)"Request", (xmlChar*)LASSO_SAML_PROTOCOL_HREF)) { id_attribute_name = "RequestID"; } else if (xmlSecCheckNodeName(signed_node, (xmlChar*)"Response", (xmlChar*)LASSO_SAML_PROTOCOL_HREF)) { id_attribute_name = "ResponseID"; } else if (xmlSecCheckNodeName(signed_node, (xmlChar*)"Assertion", (xmlChar*)LASSO_SAML_ASSERTION_HREF)) { id_attribute_name = "AssertionID"; } goto_cleanup_if_fail_with_rc(id_attribute_name, LASSO_PARAM_ERROR_INVALID_VALUE); /* Get provider credentials */ lasso_check_good_rc(lasso_provider_try_loading_ca_cert_chain(provider, &keys_manager)); lasso_check_good_rc(lasso_provider_try_loading_public_keys(provider, &public_keys, keys_manager == NULL)); lasso_foreach_full_begin(xmlSecKey*, public_key, it, public_keys); { signature_rc = lasso_verify_signature(signed_node, doc, id_attribute_name, keys_manager, public_key, NO_OPTION, NULL); if (signature_rc == 0) { break; } } lasso_foreach_full_end(); rc = signature_rc; cleanup: lasso_release_key_manager(keys_manager); return rc; } int lasso_provider_verify_signature(LassoProvider *provider, const char *message, const char *id_attr_name, LassoMessageFormat format) { /* this duplicates some code from lasso_node_init_from_message; * reflection about code reuse is under way... */ xmlDoc *doc = NULL; xmlNode *xmlnode = NULL; xmlSecKeysMngr *keys_mngr = NULL; int rc = 0; int signature_rc = 0; xmlXPathContext *xpathCtx = NULL; xmlXPathObject *xpathObj = NULL; GList *public_keys = NULL; g_return_val_if_fail(LASSO_IS_PROVIDER(provider), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); if (lasso_flag_verify_signature == FALSE) return 0; if (message == NULL) return LASSO_PROFILE_ERROR_INVALID_MSG; if (format == LASSO_MESSAGE_FORMAT_ERROR) return LASSO_PROFILE_ERROR_INVALID_MSG; if (format == LASSO_MESSAGE_FORMAT_UNKNOWN) return LASSO_PROFILE_ERROR_INVALID_MSG; if (format == LASSO_MESSAGE_FORMAT_QUERY) { return lasso_provider_verify_query_signature(provider, message); } lasso_check_good_rc(lasso_provider_try_loading_ca_cert_chain(provider, &keys_mngr)); /* public key is mandatory if no keys manager is present */ lasso_check_good_rc(lasso_provider_try_loading_public_keys(provider, &public_keys, keys_mngr == NULL)); if (format == LASSO_MESSAGE_FORMAT_BASE64) { int len; char *msg = NULL; if (! lasso_base64_decode(message, &msg, &len)) { goto_cleanup_with_rc(LASSO_PROFILE_ERROR_INVALID_MSG); } doc = lasso_xml_parse_memory(msg, len); lasso_release_string(msg); } else { doc = lasso_xml_parse_memory(message, strlen(message)); } if (format == LASSO_MESSAGE_FORMAT_SOAP) { xpathCtx = xmlXPathNewContext(doc); xmlXPathRegisterNs(xpathCtx, (xmlChar*)"s", (xmlChar*)LASSO_SOAP_ENV_HREF); xpathObj = xmlXPathEvalExpression((xmlChar*)"//s:Body/*", xpathCtx); if (xpathObj->nodesetval && xpathObj->nodesetval->nodeNr ) { xmlnode = xpathObj->nodesetval->nodeTab[0]; } goto_cleanup_if_fail_with_rc (xmlnode != NULL, LASSO_PROFILE_ERROR_INVALID_MSG); } else { xmlnode = xmlDocGetRootElement(doc); } lasso_foreach_full_begin(xmlSecKeyPtr, public_key, it, public_keys); { signature_rc = lasso_verify_signature(xmlnode, doc, id_attr_name, keys_mngr, public_key, NO_OPTION, NULL); if (signature_rc == 0) { break; } } lasso_foreach_full_end(); rc = signature_rc; cleanup: lasso_release_key_manager(keys_mngr); lasso_release_xpath_job(xpathObj, xpathCtx, doc); return rc; } /** * lasso_provider_set_encryption_mode: * @provider: provider to set encryption for * @encryption_mode: TRUE to activate, FALSE to desactivate * * Activate or desactivate encryption **/ void lasso_provider_set_encryption_mode(LassoProvider *provider, LassoEncryptionMode encryption_mode) { g_return_if_fail(LASSO_IS_PROVIDER(provider)); provider->private_data->encryption_mode = encryption_mode; } /** * lasso_provider_get_encryption_mode: * @provider: a #LassoProvider object * * Return the current encryption mode. * * Return value: a value in the #LassoEncryptionMode enumeration. */ LassoEncryptionMode lasso_provider_get_encryption_mode(LassoProvider *provider) { if (! LASSO_IS_PROVIDER(provider) || ! provider->private_data) return LASSO_ENCRYPTION_MODE_NONE; return provider->private_data->encryption_mode; } /** * lasso_provider_set_encryption_sym_key_type: * @provider: provider to set encryption for * @encryption_sym_key_type: enum type for generated symetric key * * Set the type of the generated encryption symetric key **/ void lasso_provider_set_encryption_sym_key_type(LassoProvider *provider, LassoEncryptionSymKeyType encryption_sym_key_type) { g_return_if_fail(LASSO_IS_PROVIDER(provider)); provider->private_data->encryption_sym_key_type = encryption_sym_key_type; } /** * lasso_provider_get_encryption_sym_key_type: * @provider: a #LassoProvider object * * Return the encryption sym key type for this provider. * * Return value: a #LassoEncryptionSymKeyType value. */ LassoEncryptionSymKeyType lasso_provider_get_encryption_sym_key_type(const LassoProvider *provider) { if (LASSO_IS_PROVIDER(provider) && provider->private_data) return provider->private_data->encryption_sym_key_type; return LASSO_ENCRYPTION_SYM_KEY_TYPE_DEFAULT; } /** * lasso_provider_set_key_encryption_method: * @provider: provider to set encryption for * @key_encryption_method: enum type for encrypting generated symetric key * * Set the type of the encryption of the generated encryption symetric key **/ void lasso_provider_set_key_encryption_method(LassoProvider *provider, LassoKeyEncryptionMethod key_encryption_method) { g_return_if_fail(LASSO_IS_PROVIDER(provider)); if (key_encryption_method == LASSO_KEY_ENCRYPTION_METHOD_DEFAULT) { key_encryption_method = lasso_get_default_key_encryption_method(); } provider->private_data->key_encryption_method = key_encryption_method;; } /** * lasso_provider_get_key_encryption_method: * @provider: a #LassoProvider object * * Return the type of the encryption of the generated encryption symetric key * * Return value: a #LassoKeyEncryptionMethod value. */ LassoKeyEncryptionMethod lasso_provider_get_key_encryption_method(const LassoProvider *provider) { if (LASSO_IS_PROVIDER(provider) && provider->private_data) if (provider->private_data->key_encryption_method != LASSO_KEY_ENCRYPTION_METHOD_DEFAULT) return provider->private_data->key_encryption_method; return lasso_get_default_key_encryption_method(); } /** * lasso_provider_verify_query_signature: * @provider: the #LassoProvider for the the provider issuing the query * @message: the URL query string UTF-8 encoded * * Retrieve the public key of the given provider and verify the signature of the query string. * * Return value: 0 if succesfull, * * #LASSO_PROVIDER_ERROR_MISSING_PUBLIC_KEY if no public key is set for this provider, * #LASSO_DS_ERROR_INVALID_SIGNATURE if signature is invalid, * #LASSO_DS_ERROR_SIGNATURE_NOT_FOUND if no signature is found, * #LASSO_DS_ERROR_PUBLIC_KEY_LOAD_FAILED if the key cannot be loaded, * #LASSO_ERROR_UNIMPLEMENTED if the protocol profile of the provider is invalid or not supported. * */ int lasso_provider_verify_query_signature(LassoProvider *provider, const char *message) { int (*check)(const char *, xmlSecKey *) = NULL; int rc = 0; int signature_rc = 0; GList *public_keys = NULL; lasso_bad_param(PROVIDER, provider); lasso_null_param(message); lasso_check_good_rc(lasso_provider_try_loading_public_keys(provider, &public_keys, TRUE)); switch (lasso_provider_get_protocol_conformance(provider)) { case LASSO_PROTOCOL_LIBERTY_1_0: case LASSO_PROTOCOL_LIBERTY_1_1: case LASSO_PROTOCOL_LIBERTY_1_2: check = lasso_query_verify_signature; break; case LASSO_PROTOCOL_SAML_2_0: check = lasso_saml2_query_verify_signature; break; default: return LASSO_PROFILE_ERROR_CANNOT_VERIFY_SIGNATURE; } /* Check with all known signing keys... */ lasso_foreach_full_begin(xmlSecKeyPtr, public_key, it, public_keys); { signature_rc = check(message, public_key); if (signature_rc == 0) { break; } } lasso_foreach_full_end(); rc = signature_rc; cleanup: return rc; } /** * lasso_provider_get_default_name_id_format: * @provider: a #LassoProvider object * * If the provider has a list of supported name id formats in its metadatas, return the first one. * * Return value:(transfer full)(allow-none): a NameIDFormat URI or NULL, the returned value must be freed by the caller. */ gchar* lasso_provider_get_default_name_id_format(LassoProvider *provider) { return lasso_provider_get_metadata_one(provider, "NameIDFormat"); } /** * lasso_provider_get_sp_name_qualifier: * @provider: a #LassoPRovider object * * Return the entityID to use for qualifying NameIdentifier. * * Return value:(transfer none)(allow-none): a private string or NULL. Do not keep a reference on this string or * free it. */ const char* lasso_provider_get_sp_name_qualifier(LassoProvider *provider) { const char *sp_name_qualifier; g_return_val_if_fail(LASSO_IS_PROVIDER(provider), NULL); /* should not happen ! */ g_return_val_if_fail(provider->private_data != NULL, NULL); if (provider->private_data->affiliation_id) { sp_name_qualifier = provider->private_data->affiliation_id; } else { sp_name_qualifier = provider->ProviderID; } if (sp_name_qualifier) { return sp_name_qualifier; } else { return NULL; } } /** * lasso_provider_verify_single_node_signature: * @provider: a #LassoProvider object * @node: a #LassoNode object, still having its originalXmlnode content, and containing an XML * signature. * @id_attr_name: the name of the ID attribute to lookup. * * Return wheter the provider signed this node. * * Return value: 0 if the node is signed by this provider, an error code otherwise. */ int lasso_provider_verify_single_node_signature (LassoProvider *provider, LassoNode *node, const char *id_attr_name) { xmlNode *xmlnode = NULL; GList *public_keys = NULL; xmlSecKeysMngr *keys_mngr = NULL; int rc = 0; xmlnode = lasso_node_get_original_xmlnode (node); if (xmlnode == NULL) { return LASSO_DS_ERROR_SIGNATURE_VERIFICATION_FAILED; } lasso_check_good_rc(lasso_provider_try_loading_ca_cert_chain(provider, &keys_mngr)); lasso_check_good_rc(lasso_provider_try_loading_public_keys(provider, &public_keys, keys_mngr == NULL)); lasso_foreach_full_begin(xmlSecKey*, public_key, it, public_keys); { rc = lasso_verify_signature(xmlnode, NULL, id_attr_name, keys_mngr, public_key, NO_SINGLE_REFERENCE, NULL); if (rc == 0) break; } lasso_foreach_full_end(); cleanup: return rc; } struct AddForRoleHelper { GList *l; LassoProviderRole role; }; static void _add_for_role(gpointer key, G_GNUC_UNUSED gpointer data, struct AddForRoleHelper *helper) { char role_prefix[64]; int l; l = sprintf(role_prefix, "%s ", role_to_prefix(helper->role)); if (key && strncmp(key, role_prefix, l) == 0) { lasso_list_add_string(helper->l, ((char*)key) + l); } } /** * lasso_provider_get_metadata_keys_for_role: * @provider: a #LassoProvider object * @role: a #LassoProviderRole value * * Returns the list of metadata keys existing for the given provider. * * Return value:(element-type utf8)(transfer full): a newly allocated list of strings */ GList* lasso_provider_get_metadata_keys_for_role(LassoProvider *provider, LassoProviderRole role) { struct AddForRoleHelper helper = { NULL, role }; lasso_return_val_if_fail(LASSO_IS_PROVIDER(provider), NULL); lasso_return_val_if_fail(provider->private_data != NULL, NULL); lasso_return_val_if_fail(role > LASSO_PROVIDER_ROLE_NONE && role < LASSO_PROVIDER_ROLE_LAST, NULL); g_return_val_if_fail(role_to_prefix(role) != NULL, NULL); g_hash_table_foreach(provider->private_data->Descriptors, (GHFunc)_add_for_role, &helper); return helper.l; } /** * lasso_provider_get_roles: * @provider: a #LassoProvider object * * Return the bitmask of the supported roles. * * Return value: a #LassoProviderRole enumeration value. */ LassoProviderRole lasso_provider_get_roles(LassoProvider *provider) { lasso_return_val_if_fail(LASSO_IS_PROVIDER(provider) && provider->private_data, LASSO_PROVIDER_ROLE_NONE); return provider->private_data->roles; } /** * lasso_provider_match_conformance: * @provider: a #LassoProvider object * @another_provider: a #LassoProvider object * * Return whether the two provider support a same protocol. * See also #LassoProtocolConformance. * * Return value: TRUE or FALSE. */ gboolean lasso_provider_match_conformance(LassoProvider *provider, LassoProvider *another_provider) { lasso_return_val_if_fail(LASSO_IS_PROVIDER(provider) && LASSO_IS_PROVIDER(another_provider), FALSE); int conformance1 = lasso_provider_get_protocol_conformance(provider); int conformance2 = lasso_provider_get_protocol_conformance(another_provider); return (conformance1 & conformance2) != 0; } LassoProvider* lasso_provider_new_from_xmlnode(LassoProviderRole role, xmlNode *node) { LassoProvider *provider = NULL, *ret = NULL; provider = (LassoProvider*)g_object_new(LASSO_TYPE_PROVIDER, NULL); provider->role = role; goto_cleanup_if_fail(_lasso_provider_load_metadata_from_xmlnode(provider, node)); if (!lasso_provider_load_public_key(provider, LASSO_PUBLIC_KEY_SIGNING)) { message(G_LOG_LEVEL_WARNING, "Could not load public signing key of %s", provider->ProviderID); goto cleanup; } if (!lasso_provider_load_public_key(provider, LASSO_PUBLIC_KEY_ENCRYPTION)) { message(G_LOG_LEVEL_WARNING, "Could not load public encryption key of %s", provider->ProviderID); goto cleanup; } provider->private_data->encryption_mode = LASSO_ENCRYPTION_MODE_NONE; lasso_transfer_gobject(ret, provider); cleanup: lasso_release_gobject(provider); return ret; } /** * lasso_provider_add_key: * @provider: a #LassoProvider object * @key: a #LassoKey object * @after:(default FALSE): add the key at the end of the list, not on front. * * Add a new signature key for validating message received from @provider. If the key is used to * improve verification time add it first with @after as true, it the key is ther for continuity of * service (when doing a key rollover for example) at it last with @after as false. * * Return value: 0 if successful, an error code otherwise. */ lasso_error_t lasso_provider_add_key(LassoProvider *provider, LassoKey *key, gboolean after) { LassoSignatureContext context; lasso_error_t rc = 0; GList **list = NULL; xmlSecKey *xml_sec_key = NULL; lasso_bad_param(PROVIDER, provider); lasso_bad_param(KEY, key); switch (lasso_key_get_key_type(key)) { case LASSO_KEY_TYPE_FOR_SIGNATURE: context = lasso_key_get_signature_context(key); list = &provider->private_data->signing_public_keys; xml_sec_key = xmlSecKeyDuplicate(context.signature_key); break; } goto_cleanup_if_fail_with_rc(list && xml_sec_key, LASSO_PARAM_ERROR_INVALID_VALUE); if (after) { *list = g_list_append(*list, xml_sec_key); } else { *list = g_list_prepend(*list, xml_sec_key); } cleanup: return rc; } /** * lasso_provider_set_server_signing_key: * @provider: a #LassoProvider object * @key: a #LassoKey object * * Return value: 0 if successful, an error code otherwise. */ lasso_error_t lasso_provider_set_server_signing_key(LassoProvider *provider, LassoKey *key) { lasso_error_t rc = 0; LassoSignatureContext context; lasso_bad_param(PROVIDER, provider); lasso_bad_param(KEY, key); context = lasso_key_get_signature_context(key); goto_cleanup_if_fail_with_rc(lasso_validate_signature_context(context), LASSO_DS_ERROR_PRIVATE_KEY_LOAD_FAILED); lasso_assign_signature_context(provider->private_data->signature_context, context); cleanup: return rc; } lasso-2.8.2/lasso/id-ff/PaxHeaders/sessionprivate.h0000644000000000000000000000013214117162531017260 xustar0030 mtime=1631380825.852638017 30 atime=1678814151.008993845 30 ctime=1678814321.001953263 lasso-2.8.2/lasso/id-ff/sessionprivate.h0000644000175000017500000000442014117162531022530 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_SESSION_PRIVATE_H__ #define __LASSO_SESSION_PRIVATE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "../xml/lib_assertion.h" #include "../xml/samlp_status.h" #include "session.h" #include "../xml/xml.h" #include "lasso/lasso_config.h" struct _LassoSessionPrivate { gboolean dispose_has_run; GList *providerIDs; GHashTable *status; /* hold temporary response status for sso-art */ GHashTable *assertions_by_id; GHashTable *nid_and_session_indexes; }; #define LASSO_SESSION_GET_PRIVATE(o) \ (G_TYPE_INSTANCE_GET_PRIVATE ((o), LASSO_TYPE_SESSION, LassoSessionPrivate)) gint lasso_session_add_status(LassoSession *session, const char *providerID, LassoNode *status); gint lasso_session_add_assertion_with_id(LassoSession *session, const char *assertionID, xmlNode *assertion); xmlNode* lasso_session_get_assertion_by_id( LassoSession *session, const gchar *assertionID); LassoNode* lasso_session_get_status( LassoSession *session, const gchar *providerID); gint lasso_session_remove_status(LassoSession *session, const gchar *providerID); gint lasso_session_count_assertions(LassoSession *session); gboolean lasso_session_is_dirty(LassoSession *session); void lasso_session_init_provider_ids(LassoSession *session); gboolean lasso_session_has_slo_session(LassoSession *session, const gchar *provider_id); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_SESSION_PRIVATE_H__ */ lasso-2.8.2/lasso/id-ff/PaxHeaders/lecp.h0000644000000000000000000000013114114336625015130 xustar0029 mtime=1630649749.79843669 30 atime=1678814151.008993845 30 ctime=1678814320.957953014 lasso-2.8.2/lasso/id-ff/lecp.h0000644000175000017500000000602514114336625020404 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_LECP_H__ #define __LASSO_LECP_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "../xml/xml.h" #include "../xml/lib_authn_request_envelope.h" #include "../xml/lib_authn_response_envelope.h" #include "login.h" #define LASSO_TYPE_LECP (lasso_lecp_get_type()) #define LASSO_LECP(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_LECP, LassoLecp)) #define LASSO_LECP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_LECP, LassoLecpClass)) #define LASSO_IS_LECP(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_LECP)) #define LASSO_IS_LECP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_LECP)) #define LASSO_LECP_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_LECP, LassoLecpClass)) typedef struct _LassoLecp LassoLecp; typedef struct _LassoLecpClass LassoLecpClass; struct _LassoLecp { LassoLogin parent; /*< public >*/ LassoLibAuthnRequestEnvelope *authnRequestEnvelope; LassoLibAuthnResponseEnvelope *authnResponseEnvelope; char *assertionConsumerServiceURL; /*< private >*/ void *private_data; /* reserved for future use */ }; struct _LassoLecpClass { LassoLoginClass parent_class; }; LASSO_EXPORT GType lasso_lecp_get_type(void); LASSO_EXPORT LassoLecp* lasso_lecp_new(LassoServer *server); LASSO_EXPORT lasso_error_t lasso_lecp_build_authn_request_envelope_msg(LassoLecp *lecp); LASSO_EXPORT lasso_error_t lasso_lecp_build_authn_request_msg(LassoLecp *lecp); LASSO_EXPORT lasso_error_t lasso_lecp_build_authn_response_msg(LassoLecp *lecp); LASSO_EXPORT lasso_error_t lasso_lecp_build_authn_response_envelope_msg(LassoLecp *lecp); LASSO_EXPORT void lasso_lecp_destroy(LassoLecp *lecp); LASSO_EXPORT lasso_error_t lasso_lecp_init_authn_request(LassoLecp *lecp, const char *remote_providerID); LASSO_EXPORT lasso_error_t lasso_lecp_process_authn_request_msg(LassoLecp *lecp, const char *authn_request_msg); LASSO_EXPORT lasso_error_t lasso_lecp_process_authn_request_envelope_msg(LassoLecp *lecp, const char *request_msg); LASSO_EXPORT lasso_error_t lasso_lecp_process_authn_response_envelope_msg(LassoLecp *lecp, const char *response_msg); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_LECP_H__ */ lasso-2.8.2/lasso/PaxHeaders/errors.c0000644000000000000000000000013114404125707014526 xustar0029 mtime=1678814151.06899418 30 atime=1678814241.949504885 30 ctime=1678814320.025947707 lasso-2.8.2/lasso/errors.c0000644000175000017500000003565714404125707020017 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include #include "errors.h" #include "xml/xml.h" /* WARNING!!!: This is a generated file do not modify it, add new error message * a comments inside errors.h */ /** * lasso_strerror: * @error_code: a gint error code returned by a lasso function * * Convert an error code from a lasso fuction to a human readable string. * * Returns: a static string. */ const char* lasso_strerror(int error_code) { switch (error_code) { case LASSO_ASSERTION_QUERY_ERROR_ATTRIBUTE_REQUEST_ALREADY_EXIST: return "Tried to add the same attribute request a second time."; case LASSO_ASSERTION_QUERY_ERROR_NOT_AN_ATTRIBUTE_QUERY: return "The current assertion query does not contain an attribute query."; case LASSO_DEFEDERATION_ERROR_MISSING_NAME_IDENTIFIER: return "Name identifier not found in request"; case LASSO_DS_ERROR_CA_CERT_CHAIN_LOAD_FAILED: return "LASSO_DS_ERROR_CA_CERT_CHAIN_LOAD_FAILED"; case LASSO_DS_ERROR_CERTIFICATE_LOAD_FAILED: return "Failed to load certificate."; case LASSO_DS_ERROR_CONTEXT_CREATION_FAILED: return "Failed to create signature context."; case LASSO_DS_ERROR_DECRYPTION_FAILED: return "Decryption of an encrypted node failed"; case LASSO_DS_ERROR_DECRYPTION_FAILED_MISSING_PRIVATE_KEY: return "Could not decrypt because the private key is not present."; case LASSO_DS_ERROR_DIGEST_COMPUTE_FAILED: return "Computation of an SHA1 digest failed."; case LASSO_DS_ERROR_ENCRYPTION_FAILED: return "Creation of an encrypted node failed"; case LASSO_DS_ERROR_INVALID_REFERENCE_FOR_SAML: return "SAML signature reference must be to a Request, a Reponse or an Assertion ID attribute"; case LASSO_DS_ERROR_INVALID_SIGALG: return "Invalid signature algorithm."; case LASSO_DS_ERROR_INVALID_SIGNATURE: return "Invalid signature."; case LASSO_DS_ERROR_KEYS_MNGR_CREATION_FAILED: return "Failed to create keys manager."; case LASSO_DS_ERROR_KEYS_MNGR_INIT_FAILED: return "Failed to initialize keys manager."; case LASSO_DS_ERROR_PRIVATE_KEY_LOAD_FAILED: return "Failed to load private key."; case LASSO_DS_ERROR_PUBLIC_KEY_LOAD_FAILED: return "Failed to load public key."; case LASSO_DS_ERROR_SIGNATURE_FAILED: return "Failed to sign the node."; case LASSO_DS_ERROR_SIGNATURE_NOT_FOUND: return "Signature element not found."; case LASSO_DS_ERROR_SIGNATURE_TEMPLATE_NOT_FOUND: return "Signature template has not been found."; case LASSO_DS_ERROR_SIGNATURE_TMPL_CREATION_FAILED: return "LASSO_DS_ERROR_SIGNATURE_TMPL_CREATION_FAILED"; case LASSO_DS_ERROR_SIGNATURE_VERIFICATION_FAILED: return "Failed to verify signature."; case LASSO_DS_ERROR_TOO_MUCH_REFERENCES: return "SAML signature must contain only one reference"; case LASSO_ECP_ERROR_ASSERTION_CONSUMER_URL_MISMATCH: return "The ecp:Request responseConsumerURL and ecp:Response AssertionConsumerURL do not match"; case LASSO_ECP_ERROR_MISSING_AUTHN_REQUEST: return "Missing samlp:AuthnRequest in ECP request"; case LASSO_ECP_ERROR_MISSING_RELAYSTATE: return "Missing ECP RelayState"; case LASSO_ECP_ERROR_MISSING_REQUEST: return "Missing ECP Request"; case LASSO_ECP_ERROR_MISSING_RESPONSE: return "Missing ECP Response"; case LASSO_ECP_ERROR_MISSING_SAML_RESPONSE: return "Missing samlp:Response in IdP ECP response"; case LASSO_ERROR_CAST_FAILED: return "Expected GObject class was not found, cast failed"; case LASSO_ERROR_OUT_OF_MEMORY: return "Out of memory"; case LASSO_ERROR_UNDEFINED: return "Undefined error."; case LASSO_ERROR_UNIMPLEMENTED: return "Unimplemented part of Lasso."; case LASSO_LOGIN_ERROR_ASSERTION_DOES_NOT_MATCH_REQUEST_ID: return "If inResponseTo attribute is present, a matching request must be present too in the LassoLogin object"; case LASSO_LOGIN_ERROR_ASSERTION_REPLAY: return "Assertion replay"; case LASSO_LOGIN_ERROR_CONSENT_NOT_OBTAINED: return "Consent of the principal was not obtained."; case LASSO_LOGIN_ERROR_FEDERATION_NOT_FOUND: return "Federation not found on login"; case LASSO_LOGIN_ERROR_INVALID_ASSERTION_SIGNATURE: return "Signature on an assertion could not be verified."; case LASSO_LOGIN_ERROR_INVALID_NAMEIDPOLICY: return "Invalid NameIDPolicy in lib:AuthnRequest"; case LASSO_LOGIN_ERROR_INVALID_SIGNATURE: return "The signature of a message or of an assertion is invalid. That is badly computed or with an unknown key."; case LASSO_LOGIN_ERROR_NO_DEFAULT_ENDPOINT: return "No default endpoint"; case LASSO_LOGIN_ERROR_REQUEST_DENIED: return "Request denied."; case LASSO_LOGIN_ERROR_STATUS_NOT_SUCCESS: return "Status code is not success"; case LASSO_LOGIN_ERROR_UNKNOWN_PRINCIPAL: return "Unknown principal"; case LASSO_LOGIN_ERROR_UNSIGNED_AUTHN_REQUEST: return "An unsigned authn request was received but the metadata specify that they must be signed."; case LASSO_LOGOUT_ERROR_FEDERATION_NOT_FOUND: return "Federation not found on logout"; case LASSO_LOGOUT_ERROR_PARTIAL_LOGOUT: return "Logout could not be propagated to every service provider in the current session."; case LASSO_LOGOUT_ERROR_REQUEST_DENIED: return "Request denied by identity provider"; case LASSO_LOGOUT_ERROR_UNKNOWN_PRINCIPAL: return "Unknown principal on logout"; case LASSO_LOGOUT_ERROR_UNSUPPORTED_PROFILE: return "Unsupported protocol profile"; case LASSO_NAME_IDENTIFIER_MAPPING_ERROR_FORBIDDEN_CALL_ON_THIS_SIDE: return "LASSO_NAME_IDENTIFIER_MAPPING_ERROR_FORBIDDEN_CALL_ON_THIS_SIDE"; case LASSO_NAME_IDENTIFIER_MAPPING_ERROR_MISSING_TARGET_IDENTIFIER: return "LASSO_NAME_IDENTIFIER_MAPPING_ERROR_MISSING_TARGET_IDENTIFIER"; case LASSO_NAME_IDENTIFIER_MAPPING_ERROR_MISSING_TARGET_NAMESPACE: return "Target name space not found"; case LASSO_PAOS_ERROR_MISSING_REQUEST: return "Missing PAOS Request"; case LASSO_PAOS_ERROR_MISSING_RESPONSE: return "Missing PAOS Response"; case LASSO_PAOS_ERROR_MISSING_RESPONSE_CONSUMER_URL: return "Missing paos:Request responseConsumerURL"; case LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ: return "An object type provided as parameter is invalid or object is NULL."; case LASSO_PARAM_ERROR_CHECK_FAILED: return "The error return location should be either NULL or contains a NULL error."; case LASSO_PARAM_ERROR_INVALID_VALUE: return "A parameter value is invalid."; case LASSO_PARAM_ERROR_NON_INITIALIZED_OBJECT: return "The call failed because an argument is a partially-initialized object."; case LASSO_PROFILE_ERROR_BAD_IDENTITY_DUMP: return "Failed to create identity from dump"; case LASSO_PROFILE_ERROR_BAD_SESSION_DUMP: return "Failed to create session from dump"; case LASSO_PROFILE_ERROR_BUILDING_MESSAGE_FAILED: return "Error building request message"; case LASSO_PROFILE_ERROR_BUILDING_QUERY_FAILED: return "Error building request QUERY url"; case LASSO_PROFILE_ERROR_BUILDING_REQUEST_FAILED: return "Error building request object"; case LASSO_PROFILE_ERROR_BUILDING_RESPONSE_FAILED: return "Error building response object"; case LASSO_PROFILE_ERROR_CANNOT_FIND_A_PROVIDER: return "Profile was called without a specific provider and we cannot find one."; case LASSO_PROFILE_ERROR_CANNOT_VERIFY_SIGNATURE: return "The profile cannot verify a signature on the message"; case LASSO_PROFILE_ERROR_ENDPOINT_INDEX_NOT_FOUND: return "A received artifact contains an andpoint index which does not exist in the metadata of the corresponding provider."; case LASSO_PROFILE_ERROR_FEDERATION_NOT_FOUND: return "Federation not found"; case LASSO_PROFILE_ERROR_IDENTITY_NOT_FOUND: return "Identity not found"; case LASSO_PROFILE_ERROR_INVALID_ARTIFACT: return "Invalid artifact"; case LASSO_PROFILE_ERROR_INVALID_ASSERTION: return "The assertion is malformed, Issuer differs from NameQualifier of the subject, signature cannot be verified."; case LASSO_PROFILE_ERROR_INVALID_ASSERTION_CONDITIONS: return "An assertion conditions could not be validated."; case LASSO_PROFILE_ERROR_INVALID_HTTP_METHOD: return "Invalid HTTP method"; case LASSO_PROFILE_ERROR_INVALID_IDP_LIST: return "The IDP list is invalid"; case LASSO_PROFILE_ERROR_INVALID_ISSUER: return "Assertion issuer is not the same as the requested issuer"; case LASSO_PROFILE_ERROR_INVALID_MSG: return "Invalid message"; case LASSO_PROFILE_ERROR_INVALID_POST_MSG: return "Invalid POST message"; case LASSO_PROFILE_ERROR_INVALID_PROTOCOLPROFILE: return "Invalid protocol profile"; case LASSO_PROFILE_ERROR_INVALID_QUERY: return "Invalid URL query"; case LASSO_PROFILE_ERROR_INVALID_REQUEST: return "Received request is not of the expected type."; case LASSO_PROFILE_ERROR_INVALID_RESPONSE: return "Received request is not of the expected type."; case LASSO_PROFILE_ERROR_INVALID_SOAP_MSG: return "Invalid SOAP message"; case LASSO_PROFILE_ERROR_ISSUER_IS_NOT_AN_IDP: return "The issuer of an assertion is not considered as an IdP"; case LASSO_PROFILE_ERROR_MISSING_ARTIFACT: return "Missing SAML artifact"; case LASSO_PROFILE_ERROR_MISSING_ASSERTION: return "When looking for an assertion we did not found it."; case LASSO_PROFILE_ERROR_MISSING_ENCRYPTION_PRIVATE_KEY: return "Found an encrypted element but encryption private key is not set"; case LASSO_PROFILE_ERROR_MISSING_ENDPOINT_REFERENCE: return "Missing endpoint reference"; case LASSO_PROFILE_ERROR_MISSING_ENDPOINT_REFERENCE_ADDRESS: return "Missing endpoint reference address"; case LASSO_PROFILE_ERROR_MISSING_ISSUER: return "Missing issuer"; case LASSO_PROFILE_ERROR_MISSING_NAME_IDENTIFIER: return "Missing name identifier"; case LASSO_PROFILE_ERROR_MISSING_REMOTE_PROVIDERID: return "ProviderID not found"; case LASSO_PROFILE_ERROR_MISSING_REQUEST: return "Missing request"; case LASSO_PROFILE_ERROR_MISSING_RESOURCE_OFFERING: return "Missing ressource offering"; case LASSO_PROFILE_ERROR_MISSING_RESPONSE: return "Missing response"; case LASSO_PROFILE_ERROR_MISSING_SERVER: return "No server object set in the profile"; case LASSO_PROFILE_ERROR_MISSING_SERVICE_DESCRIPTION: return "Missing service description"; case LASSO_PROFILE_ERROR_MISSING_SERVICE_INSTANCE: return "Missing service instance"; case LASSO_PROFILE_ERROR_MISSING_SERVICE_TYPE: return "Missing service type"; case LASSO_PROFILE_ERROR_MISSING_STATUS_CODE: return "Missing status code"; case LASSO_PROFILE_ERROR_MISSING_SUBJECT: return "Missing subject"; case LASSO_PROFILE_ERROR_NAME_IDENTIFIER_NOT_FOUND: return "Name identifier not found"; case LASSO_PROFILE_ERROR_REQUEST_DENIED: return "Generic error when an IdP or an SP return the RequestDenied status code in its response."; case LASSO_PROFILE_ERROR_RESPONSE_DOES_NOT_MATCH_REQUEST: return "Received response does not refer to the request sent"; case LASSO_PROFILE_ERROR_SESSION_NOT_FOUND: return "Session not found"; case LASSO_PROFILE_ERROR_STATUS_NOT_SUCCESS: return "Status code is not success"; case LASSO_PROFILE_ERROR_UNKNOWN_ISSUER: return "The issuer of an assertion is unkown to us."; case LASSO_PROFILE_ERROR_UNKNOWN_PROFILE_URL: return "Unable to find Profile URL in metadata"; case LASSO_PROFILE_ERROR_UNKNOWN_PROVIDER: return "@Deprecated: Since 2.2.3 The issuer of the message is unknown to us"; case LASSO_PROFILE_ERROR_UNSUPPORTED_BINDING: return "The responder reported that he does not support this binding"; case LASSO_PROFILE_ERROR_UNSUPPORTED_PROFILE: return "Unsupported protocol profile"; case LASSO_PROVIDER_ERROR_MISSING_PUBLIC_KEY: return "The provider has no known public key"; case LASSO_REGISTRY_ERROR_KEY_EXISTS: return "Key alreadys exists in the registry"; case LASSO_SERVER_ERROR_ADD_PROVIDER_FAILED: return "Failed to add new provider."; case LASSO_SERVER_ERROR_ADD_PROVIDER_PROTOCOL_MISMATCH: return "Failed to add new provider (protocol mismatch). It means that you tried to add a provider supporting a protocol imcompatible with the protocol declared for your #LassoServer, for example metadata for ID-FF 1.2 with metadata for SAML 2.0."; case LASSO_SERVER_ERROR_INVALID_XML: return "Parsed XML is invalid."; case LASSO_SERVER_ERROR_NO_PROVIDER_LOADED: return "When loading a metadata file it indicates that no provider could be loaded. It could be because the file is not well formed, or because there is no provider for the role sought."; case LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND: return "The identifier of a provider is unknown to #LassoServer. To register a provider in a #LassoServer object, you must use the methods lasso_server_add_provider() or lasso_server_add_provider_from_buffer()."; case LASSO_SERVER_ERROR_SET_ENCRYPTION_PRIVATE_KEY_FAILED: return "Failed to load encryption private key."; case LASSO_SOAP_ERROR_MISSING_BODY: return "Missing SOAP body"; case LASSO_SOAP_ERROR_MISSING_ENVELOPE: return "Missing SOAP envelope"; case LASSO_SOAP_ERROR_MISSING_HEADER: return "Missing SOAP header"; case LASSO_SOAP_ERROR_MISSING_SOAP_FAULT_DETAIL: return "Missing SOAP fault detail"; case LASSO_SOAP_ERROR_REDIRECT_REQUEST_FAULT: return "A SOAP Fault containing a Redirect Request was received"; case LASSO_XMLENC_ERROR_INVALID_ENCRYPTED_DATA: return "The EncryptedData node is invalid, look at the logs."; case LASSO_XML_ERROR_ATTR_NOT_FOUND: return "Unable to get attribute of element."; case LASSO_XML_ERROR_ATTR_VALUE_INVALID: return "Attribute value is invalid."; case LASSO_XML_ERROR_ATTR_VALUE_NOT_FOUND: return "Unable to get attribute value of element."; case LASSO_XML_ERROR_INVALID_FILE: return "Invalid XML file"; case LASSO_XML_ERROR_MISSING_NAMESPACE: return "A namespace is missing."; case LASSO_XML_ERROR_NODE_CONTENT_NOT_FOUND: return "Unable to get content of element."; case LASSO_XML_ERROR_NODE_NOT_FOUND: return "Unable to get child of element."; case LASSO_XML_ERROR_OBJECT_CONSTRUCTION_FAILED: return "Construction of an object from an XML document failed."; case LASSO_XML_ERROR_SCHEMA_INVALID_FRAGMENT: return "An XML tree does not respect at least an XML schema of its namespaces."; default: return "Unknown LASSO_ERROR, you should regenerate errors.c"; } } lasso-2.8.2/lasso/PaxHeaders/lasso.h0000644000000000000000000000013214117622274014343 xustar0030 mtime=1631528124.879040542 30 atime=1678814151.116994448 30 ctime=1678814320.009947615 lasso-2.8.2/lasso/lasso.h0000644000175000017500000000506414117622274017620 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_H__ #define __LASSO_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #if (defined _MSC_VER || defined MINGW32) # include #endif #include #include #include "export.h" #include "id-ff/defederation.h" #include "id-ff/lecp.h" #include "id-ff/login.h" #include "id-ff/logout.h" #include "id-ff/name_identifier_mapping.h" #include "id-ff/name_registration.h" #include "saml-2.0/name_id_management.h" #include "saml-2.0/ecp.h" #include "saml-2.0/assertion_query.h" #include "saml-2.0/saml2_helper.h" #include "saml-2.0/profile.h" LASSO_EXPORT lasso_error_t lasso_init(void); LASSO_EXPORT lasso_error_t lasso_shutdown(void); /** * LassoCheckVersionMode: * @LASSO_CHECK_VERSION_EXACT: version should match exactly * @LASSO_CHECK_VERSIONABI_COMPATIBLE: version should be ABI compatible * @LASSO_CHECK_VERSION_NUMERIC: version should be at least that number * * Lasso library version check mode. **/ typedef enum { LASSO_CHECK_VERSION_EXACT = 0, LASSO_CHECK_VERSIONABI_COMPATIBLE, LASSO_CHECK_VERSION_NUMERIC } LassoCheckVersionMode; LASSO_EXPORT int lasso_check_version( int major, int minor, int subminor, LassoCheckVersionMode mode); LASSO_EXPORT void lasso_set_flag(char *flag); /* Deprecated functions, kept only to maintain the ABI and the SONAME */ LASSO_EXPORT void lasso_register_dst_service(const char *prefix, const char *href); LASSO_EXPORT char* lasso_get_prefix_for_dst_service_href(const char *href); LASSO_EXPORT void lasso_register_idwsf2_dst_service(const gchar *prefix, const gchar *href); LASSO_EXPORT gchar* lasso_get_prefix_for_idwsf2_dst_service_href(const gchar *href); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LASSO_H__ */ lasso-2.8.2/lasso/PaxHeaders/registry.c0000644000000000000000000000013214114336625015064 xustar0030 mtime=1630649749.818436908 30 atime=1678814242.325507009 30 ctime=1678814320.025947707 lasso-2.8.2/lasso/registry.c0000644000175000017500000003242414114336625020341 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include #include "registry-private.h" #include "errors.h" #include "utils.h" /** * SECTION:registry * @short_description: Class to store a mapping of qualified names (QName) to other qualified names. * * A qualified name is a name or a string in the context of another name, or namespace. * This object implement a function of a tuple (namespace, name, namespace) to a name. For the * moment there is no need to enumerate all tuples (namespace, name) pair given a base pair, i.e. a * function from tuple (namespace, name) to a list of tuples (namespace,name). * * We support two kinds of mapping: * * you can give a direct mapping between two QName, * or you can give a function that will manage mapping between one namespace and * another one. * * * For internal use inside lasso we define the following namespaces: * * #LASSO_LASSO_HREF and, * #LASSO_PYTHON_HREF. * * * For functional mappings the mapping function must return constant strings created using * g_intern_string() or using g_type_name(). */ typedef struct _LassoRegistryDirectMappingRecord LassoRegistryDirectMappingRecord; struct _LassoRegistryDirectMappingRecord { GQuark from_namespace; GQuark from_name; GQuark to_namespace; GQuark to_name; }; typedef struct _LassoRegistryFunctionalMappingRecord LassoRegistryFunctionalMappingRecord; struct _LassoRegistryFunctionalMappingRecord { GQuark from_namespace; GQuark to_namespace; LassoRegistryTranslationFunction translation_function; }; static LassoRegistry *default_registry = NULL; static LassoRegistry *lasso_registry_get_default() { if (default_registry == NULL) { default_registry = lasso_registry_new(); } return default_registry; } void lasso_registry_default_shutdown() { if (default_registry) lasso_registry_destroy(default_registry); default_registry = NULL; } /** * lasso_registry_direct_mapping_equal: * @record1: left record * @record2: right record * * Tests if two #LassoRegistryDirectMappingRecord are equal. * * Return value: TRUE if all field of record1 are equal to record2. */ gboolean lasso_registry_direct_mapping_equal(LassoRegistryDirectMappingRecord *record1, LassoRegistryDirectMappingRecord *record2) { return record1->from_namespace == record2->from_namespace && record1->from_name == record2->from_name && record1->to_namespace == record2->to_namespace; } /** * lasso_registry_functional_mapping_equal: * @record1: left record * @record2: right record * * Tests if two #LassoRegistryFunctionalMappingRecord are equal, i.e. if they are functional * mapping between the same namespace. * * Return value: TRUE if record1 is equal to record2 */ gboolean lasso_registry_functional_mapping_equal(LassoRegistryFunctionalMappingRecord *record1, LassoRegistryFunctionalMappingRecord *record2) { return record1->from_namespace == record2->from_namespace && record1->to_namespace == record2->to_namespace; } /** * lasso_registry_direct_mapping_hash: * @record: a #LassoRegistryDirectMappingRecord structure * * Return a hash value obtained from the three first fields of a #LassoRecordRegistry structure. * * Return value: an integer hash for the record. */ guint lasso_registry_direct_mapping_hash(LassoRegistryDirectMappingRecord *record) { return g_direct_hash((gpointer)((ptrdiff_t)record->from_namespace ^ (ptrdiff_t)record->from_name ^ (ptrdiff_t)record->to_namespace)); } /** * lasso_registry_functional_mapping_hash: * @record: a #LassoRegistryFunctionalMappingRecord structure * * Return a hash value obtained from the source and destination namespace of the mapping. * * Return value: an integer hash for the record. */ guint lasso_registry_functional_mapping_hash(LassoRegistryFunctionalMappingRecord *record) { return g_direct_hash((gpointer)((ptrdiff_t)record->from_namespace ^ (ptrdiff_t)record->to_namespace)); } /** * lasso_registry_new: * * Allocate a new #LassoRegistry structure and initialize its fields. * * Return value: a newly allocated #LassoRegistry object. */ LassoRegistry *lasso_registry_new() { LassoRegistry *ret = g_new0(LassoRegistry, 1); ret->direct_mapping = g_hash_table_new_full( (GHashFunc) lasso_registry_direct_mapping_hash, (GEqualFunc) lasso_registry_direct_mapping_equal, NULL, g_free); ret->functional_mapping = g_hash_table_new_full( (GHashFunc) lasso_registry_functional_mapping_hash, (GEqualFunc) lasso_registry_functional_mapping_equal, NULL, g_free); return ret; } /** * lasso_registry_destroy: * @registry: the #LassoRegistry object * * Destroy a #LassoRegistry. */ void lasso_registry_destroy(LassoRegistry *registry) { g_return_if_fail(registry); lasso_release_ghashtable(registry->direct_mapping); lasso_release_ghashtable(registry->functional_mapping); lasso_release(registry); } static LassoRegistryTranslationFunction lasso_registry_get_translation_function(GHashTable *functional_mappings, GQuark from_ns_quark, GQuark to_ns_quark) { LassoRegistryFunctionalMappingRecord functional_mapping, *functional_mapping_found; functional_mapping.from_namespace = from_ns_quark; functional_mapping.to_namespace = to_ns_quark; functional_mapping_found = g_hash_table_lookup(functional_mappings, &functional_mapping); if (functional_mapping_found) { return functional_mapping_found->translation_function; } return NULL; } static const char *lasso_registry_get_functional_mapping(GHashTable *functional_mappings, GQuark from_ns_namespace, const char *from_name, GQuark to_ns_namespace) { LassoRegistryTranslationFunction translation_function; translation_function = lasso_registry_get_translation_function(functional_mappings, from_ns_namespace, to_ns_namespace); if (translation_function) { return translation_function(g_quark_to_string(from_ns_namespace), from_name, g_quark_to_string(to_ns_namespace)); } return NULL; } static const char *lasso_registry_get_direct_mapping(GHashTable *direct_mappings, GQuark from_ns_quark, const char *from_name, GQuark to_ns_quark) { GQuark from_name_quark = g_quark_try_string(from_name); LassoRegistryDirectMappingRecord record, *found; if (from_name_quark == 0) return NULL; record.from_namespace = from_ns_quark; record.from_name = from_name_quark; record.to_namespace = to_ns_quark; found = g_hash_table_lookup(direct_mappings, &record); if (found) { return g_quark_to_string(found->to_name); } return NULL; } /** * lasso_regsitry_get_mapping: * * Retrieve the mapping of a QName into another namespace, i.e. to another * QName. It first tries the functional mapping, then tries with the direct mapping. * * Return value: a constant string of NULL if no mapping exist. */ const char* lasso_registry_get_mapping(LassoRegistry *registry, const char *from_namespace, const char *from_name, const char *to_namespace) { GQuark from_ns_quark, to_ns_quark; const char *ret = NULL; from_ns_quark = g_quark_try_string(from_namespace); to_ns_quark = g_quark_try_string(to_namespace); if (from_ns_quark == 0 || to_ns_quark == 0) { return NULL; } ret = lasso_registry_get_functional_mapping(registry->functional_mapping, from_ns_quark, from_name, to_ns_quark); if (ret == NULL) { ret = lasso_registry_get_direct_mapping(registry->direct_mapping, from_ns_quark, from_name, to_ns_quark); } return ret; } /** * lasso_registry_add_direct_mapping: * * Add a new mapping from a QName to a QName. * * Return value: 0 if successfull, LASSO_REGISTRY_ERROR_KEY_EXISTS if it already exists, * LASSO_PARAM_ERROR_INVALID_VALUE if arguments * are invalid. */ gint lasso_registry_add_direct_mapping(LassoRegistry *registry, const char *from_namespace, const char *from_name, const char *to_namespace, const char *to_name) { LassoRegistryDirectMappingRecord *a_record; g_return_val_if_fail(registry && from_namespace && from_name && to_namespace && to_name, LASSO_PARAM_ERROR_INVALID_VALUE); if (lasso_registry_get_mapping(registry, from_namespace, from_name, to_namespace)) { return LASSO_REGISTRY_ERROR_KEY_EXISTS; } a_record = g_new0(LassoRegistryDirectMappingRecord, 1); a_record->from_namespace = g_quark_from_string(from_namespace); a_record->from_name = g_quark_from_string(from_name); a_record->to_namespace = g_quark_from_string(to_namespace); a_record->to_name = g_quark_from_string(to_name); g_hash_table_insert(registry->direct_mapping, a_record, a_record); return 0; } /** * lasso_registry_add_functional_mapping: * @registry: a #LassoRegistry * @from_namespace: URI of the source namespace * @to_namespace: URI of the destination namespace * @translation_function: a function mapping string to string from the first namespace to the second one * * Register a new mapping from from_namesapce to to_namespace using the * translation_function. This functions is not forced to return a value for * any string, it can return NULL. * * Return value: 0 if successfull, LASSO_REGISTRY_ERROR_KEY_EXISTS if this mapping is already registered, * LASSO_PARAM_ERROR_INVALID_VALUE if one the argument is invalid. */ gint lasso_registry_add_functional_mapping(LassoRegistry *registry, const char *from_namespace, const char *to_namespace, LassoRegistryTranslationFunction translation_function) { LassoRegistryFunctionalMappingRecord *a_record; GQuark to_ns_quark, from_ns_quark; g_return_val_if_fail(registry != NULL && from_namespace != NULL && to_namespace != NULL, LASSO_PARAM_ERROR_INVALID_VALUE); from_ns_quark = g_quark_from_string(from_namespace); to_ns_quark = g_quark_from_string(to_namespace); if (lasso_registry_get_translation_function(registry->functional_mapping, from_ns_quark, to_ns_quark)) { return LASSO_REGISTRY_ERROR_KEY_EXISTS; } a_record = g_new0(LassoRegistryFunctionalMappingRecord, 1); a_record->from_namespace = from_ns_quark; a_record->to_namespace = to_ns_quark; a_record->translation_function = translation_function; g_hash_table_insert(registry->functional_mapping, a_record, a_record); return 0; } /** * lasso_registry_default_add_direct_mapping: * @from_namespace: the namespace of the mapped QName * @from_name: the name of the mapped QName * @to_namespace: the namepsace of the mapped to QName * @to_name: the name of the mapped to QName * * Add a new mapping from a QName to a QName. * * Return value: 0 if successfull, LASSO_REGISTRY_ERROR_KEY_EXISTS if this mapping is already registered, * LASSO_PARAM_ERROR_INVALID_VALUE if one the argument is invalid. */ gint lasso_registry_default_add_direct_mapping(const char *from_namespace, const char *from_name, const char *to_namespace, const char *to_name) { LassoRegistry *default_registry = lasso_registry_get_default(); return lasso_registry_add_direct_mapping(default_registry, from_namespace, from_name, to_namespace, to_name); } /** * lasso_registry_default_add_functional_mapping: * * @from_namespace: URI of the source namespace * @to_namespace: URI of the destination namespace * @translation_function: a function mapping string to string from the first namespace to the second one * * Register a new mapping from from_namesapce to to_namespace using the translation_function into * the default mapping. This functions is not forced to return a value for any string, it can return * NULL. * * Return value: 0 if successfull, LASSO_REGISTRY_ERROR_KEY_EXISTS if this mapping is already registered, * LASSO_PARAM_ERROR_INVALID_VALUE if one the argument is invalid. */ gint lasso_registry_default_add_functional_mapping(const char *from_namespace, const char *to_namespace, LassoRegistryTranslationFunction translation_function) { LassoRegistry *default_registry = lasso_registry_get_default(); return lasso_registry_add_functional_mapping(default_registry, from_namespace, to_namespace, translation_function); } /** * lasso_registry_default_get_mapping: * @from_namespace: the namespace of the mapped QName * @from_name: the name of the mapped QName * @to_namespace: the namepsace of the mapped to QName * * Retrieve the name of the QName in the namespace to_namespace that maps the * QName from_namespace:from_name. * * Return value: the name string of the QName or NULL if no mapping exists. */ const char* lasso_registry_default_get_mapping(const char *from_namespace, const char *from_name, const char *to_namespace) { LassoRegistry *default_registry = lasso_registry_get_default(); return lasso_registry_get_mapping(default_registry, from_namespace, from_name, to_namespace); } lasso-2.8.2/lasso/PaxHeaders/extract_sections.py0000644000000000000000000000013114117162531016776 xustar0030 mtime=1631380825.848637964 29 atime=1678098070.10948998 30 ctime=1678814320.053947866 lasso-2.8.2/lasso/extract_sections.py0000644000175000017500000000406514117162531022254 0ustar00bdauvergnebdauvergne00000000000000#! /usr/bin/env python import io import re import sys import os import os.path from six import print_ if len(sys.argv) == 2: srcdir = sys.argv[1] else: srcdir = '.' for root, dirs, files in os.walk(srcdir): prefixes = list() for file in files: if file.endswith('.c'): prefixes.append(os.path.splitext(file)[0]) for prefix in prefixes: try: header = io.open(os.path.join(root, prefix + '.h'), encoding='utf-8').read() implementation = io.open(os.path.join(root, prefix + '.c'), encoding='utf-8').read() exported_functions = re.findall('LASSO_EXPORT.*(lasso_\w*)', header) normal_functions = sorted ([ x for x in exported_functions if not x.endswith('get_type') ]) get_type = [ x for x in exported_functions if x.endswith('get_type') ][0] file_name = re.findall('lasso_(.*)_get_type', get_type)[0] try: macro_type = re.findall('LASSO_(\w*)_CLASS\(', header)[0] except: macro_type = None try: type = re.findall(r'^struct _(Lasso\w*)', header, re.MULTILINE)[0] except: type = None types = re.findall('^} (Lasso\w*);', header) def convert(x): if '%s' in x: return x % macro_type else: return x if type and macro_type: standard_decl = [ convert(x) for x in [ 'LASSO_%s', 'LASSO_IS_%s', 'LASSO_TYPE_%s', get_type, 'LASSO_%s_CLASS', 'LASSO_IS_%s_CLASS', 'LASSO_%s_GET_CLASS' ] ] print_('') print_('
') print_('%s' % file_name) print_('%s' % type) print_(type) for x in types + normal_functions: print_(x) print_('') for x in standard_decl: print_(x) print_('
') except: continue lasso-2.8.2/lasso/PaxHeaders/logging.h0000644000000000000000000000013214114336625014647 xustar0030 mtime=1630649749.818436908 30 atime=1678814151.116994448 30 ctime=1678814320.037947775 lasso-2.8.2/lasso/logging.h0000644000175000017500000000735214114336625020126 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_LOGGING_H__ #define __LASSO_LOGGING_H__ 1 #include #include "errors.h" #ifndef lasso_log LASSO_EXPORT void lasso_log(GLogLevelFlags level, const char *filename, int line, const char *function, const char *format, ...); #endif int lasso_log_error_code(GLogLevelFlags level, int error, ...); #ifndef __FUNCTION__ # define __FUNCTION__ "" #endif #if defined(__GNUC__) # define message(level, format, args...) \ lasso_log(level, __FILE__, __LINE__, __FUNCTION__, format, ##args) #elif defined(HAVE_VARIADIC_MACROS) # define message(level, ...) \ lasso_log(level, __FILE__, __LINE__, __FUNCTION__, __VA_ARGS__) #else static inline void message(GLogLevelFlags level, const char *format, ...) { va_list ap; char s[1024]; va_start(ap, format); g_vsnprintf(s, 1024, format, ap); va_end(ap); lasso_log(level, __FILE__, __LINE__, __FUNCTION__, s); } #endif /* debug logging */ #if defined(LASSO_DEBUG) #if defined(__GNUC__) #define debug(format, args...) \ message(G_LOG_LEVEL_DEBUG, format, ##args) #elif defined(HAVE_VARIADIC_MACROS) #define debug(...) message(G_LOG_LEVEL_DEBUG, __VA_ARGS__) #else static inline void debug(const char *format, ...) { va_list ap; char s[1024]; va_start(ap, format); g_vsnprintf(s, 1024, format, ap); va_end(ap); message(G_LOG_LEVEL_DEBUG, "%s", s); } #endif #else #if defined(__GNUC__) # define debug(format, args...) ; #elif defined(HAVE_VARIADIC_MACROS) # define debug(...) ; #else static inline void debug(const char *format, ...) { va_list ap; va_start(ap, format); va_end(ap); } #endif #endif #if defined(__GNUC__) # define warning(format, args...) \ message(G_LOG_LEVEL_WARNING, format, ##args) #elif defined(HAVE_VARIADIC_MACROS) # define warning(...) message(G_LOG_LEVEL_WARNING, __VA_ARGS__) #else static inline void warning(const char *format, ...) { va_list ap; char s[1024]; va_start(ap, format); g_vsnprintf(s, 1024, format, ap); va_end(ap); message(G_LOG_LEVEL_WARNING, "%s", s); } #endif #if defined(__GNUC__) # define critical(format, args...) \ message(G_LOG_LEVEL_CRITICAL, format, ##args) #elif defined(HAVE_VARIADIC_MACROS) # define critical(...) message(G_LOG_LEVEL_CRITICAL, __VA_ARGS__) #else static inline void critical(const char *format, ...) { va_list ap; char s[1024]; va_start(ap, format); g_vsnprintf(s, 1024, format, ap); va_end(ap); message(G_LOG_LEVEL_CRITICAL, "%s", s); } #endif #if defined(__GNUC__) # define error(format, args...) \ message(G_LOG_LEVEL_ERROR, format, ##args) #elif defined(HAVE_VARIADIC_MACROS) # define error(...) message(G_LOG_LEVEL_ERROR, __VA_ARGS__) #else static inline void error(const char *format, ...) { va_list ap; char s[1024]; va_start(ap, format); g_vsnprintf(s, 1024, format, ap); va_end(ap); message(G_LOG_LEVEL_ERROR, "%s", s); } #endif #define critical_error(rc) (critical("%s", lasso_strerror(rc)), rc) #endif /* __LASSO_LOGGING_H_ */ lasso-2.8.2/lasso/PaxHeaders/logging.c0000644000000000000000000000013114114336625014641 xustar0030 mtime=1630649749.818436908 30 atime=1678814243.153511686 29 ctime=1678814320.02994773 lasso-2.8.2/lasso/logging.c0000644000175000017500000000343714114336625020121 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "logging.h" #include "lasso_config.h" #include #include void lasso_log(GLogLevelFlags level, const char *filename, int line, const char *function, const char *format, ...) { char debug_string[1024]; time_t ts; char date[20]; va_list args; va_start(args, format); g_vsnprintf(debug_string, 1024, format, args); va_end(args); time(&ts); strftime(date, 20, "%Y-%m-%d %H:%M:%S", localtime(&ts)); if (level == G_LOG_LEVEL_DEBUG || level == G_LOG_LEVEL_CRITICAL) { g_log(LASSO_LOG_DOMAIN, level, "%s (%s/%s:%d) %s", date, filename, function, line, debug_string); } else { g_log(LASSO_LOG_DOMAIN, level, "%s\t%s", date, debug_string); } } int lasso_log_error_code(G_GNUC_UNUSED GLogLevelFlags level, int error, ...) { const char *format; char message[1024]; va_list args; format = lasso_strerror(error); va_start(args, error); g_vsnprintf(message, 1024, format, args); va_end(args); return error; } lasso-2.8.2/lasso/PaxHeaders/utils.h0000644000000000000000000000013214115351423014353 xustar0030 mtime=1630917395.111573704 30 atime=1678814151.116994448 30 ctime=1678814320.033947753 lasso-2.8.2/lasso/utils.h0000644000175000017500000004755714115351423017645 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __LASSO_UTILS_H__ #define __LASSO_UTILS_H__ #include #include #include #include #include "debug.h" #include "backward_comp.h" #include "xml/tools.h" #include "logging.h" #ifdef LASSO_DEBUG #ifdef __GNUC__ #define lasso_check_type_equality(a,b) \ { \ enum { TYPE_MISMATCH = (1 / __builtin_types_compatible_p(typeof(a), typeof(b))) }; \ } #else #define lasso_check_type_equality(a,b) #endif #else #define lasso_check_type_equality(a,b) #endif #ifdef __GNUC__ #define lasso_check_type_equality2(a,b,c) \ { \ enum { TYPE_MISMATCH = (1 / (__builtin_types_compatible_p(typeof(a), typeof(b))+__builtin_types_compatible_p(typeof(a), typeof(c)))) }; \ } #else #define lasso_check_type_equality2(a,b,c) #endif #define lasso_private_data(object) ((object)->private_data) /** * lasso_ref: * @object: an object whose reference count must be incremented. * * Increment the reference count of an object, do not emit warning if it is NULL. * * Return value: the @object. */ #define lasso_ref(object) ((object) != NULL ? (g_object_ref(object), object) : NULL) /** * lasso_unref: * @object: an object whose reference count must be decremented. * * Decrement the reference count of an object, do not emit warnings if it is NULL. * * Return value: the @object. */ #define lasso_unref(object) ((object) != NULL ? (g_object_unref(object), object) : NULL) /* Freeing */ /* * lasso_release_xxx are macros which ensure you do not get 'double free' errors, they first check * that the variable is not NULL before calling the deallocation function, and after deallocation * they reset the variable to NULL, preventing 'double free'. */ #define lasso_release(dest) \ { \ if (dest) { \ g_free(dest); dest = NULL; \ } \ } #define lasso_release_full(dest, free_function) \ { \ if (dest) { \ free_function(dest); dest = NULL; \ } \ } #define lasso_release_full2(dest, free_function, type) \ { \ lasso_check_type_equality(dest, type); \ if (dest) { \ free_function(dest); dest = NULL; \ } \ } #define lasso_release_gobject(dest) \ { \ if (G_IS_OBJECT(dest) || dest == NULL) { \ lasso_release_full(dest, g_object_unref); \ } else { \ message(G_LOG_LEVEL_CRITICAL, "Trying to unref a non GObject pointer file=%s:%u pointerbybname=%s pointer=%p", __FILE__, __LINE__, #dest, dest); \ } \ } #define lasso_release_string(dest) \ lasso_release_full(dest, g_free) #define lasso_release_list(dest) \ lasso_release_full2(dest, g_list_free, GList*) #define lasso_release_slist(dest) \ lasso_release_full2(dest, g_slist_free, GSList*) #define lasso_release_list_of_full(dest, free_function) \ { \ GList **__tmp = &(dest); \ if (*__tmp) { \ g_list_foreach(*__tmp, (GFunc)(void*)free_function, NULL); \ lasso_release_list(*__tmp); \ } \ } #define lasso_release_list_of_strings(dest) \ lasso_release_list_of_full(dest, g_free) #define lasso_release_list_of_gobjects(dest) \ lasso_release_list_of_full(dest, g_object_unref) #define lasso_release_list_of_xml_node(dest) \ lasso_release_list_of_full(dest, xmlFreeNode) #define lasso_release_list_of_xml_node_list(dest) \ lasso_release_list_of_full(dest, xmlFreeNodeList) #define lasso_release_list_of_sec_key(dest) \ lasso_release_list_of_full(dest, xmlSecKeyDestroy) #define lasso_release_xml_node(node) \ lasso_release_full2(node, xmlFreeNode, xmlNodePtr) #define lasso_release_xml_node_list(node) \ lasso_release_full2(node, xmlFreeNodeList, xmlNodePtr) #define lasso_release_doc(doc) \ lasso_release_full2(doc, xmlFreeDoc, xmlDocPtr) #define lasso_release_xml_string(dest) \ lasso_release_full2(dest, xmlFree, xmlChar*) #define lasso_release_encrypt_context(dest) \ lasso_release_full2(dest, xmlSecEncCtxDestroy, xmlSecEncCtxPtr) #define lasso_release_signature_context(dest) \ lasso_release_full2(dest, xmlSecDSigCtxDestroy,xmlSecDSigCtxPtr) #define lasso_release_key_manager(dest) \ lasso_release_full2(dest, xmlSecKeysMngrDestroy, xmlSecKeysMngrPtr) #define lasso_release_output_buffer(dest) \ lasso_release_full2(dest, xmlOutputBufferClose, xmlOutputBufferPtr) #define lasso_release_xpath_object(dest) \ lasso_release_full2(dest, xmlXPathFreeObject, xmlXPathObjectPtr) #define lasso_release_xpath_context(dest) \ lasso_release_full2(dest, xmlXPathFreeContext, xmlXPathContextPtr) #define lasso_release_xpath_job(xpathObject, xpathContext, xmlDocument) \ lasso_release_xpath_object(xpathObject); \ lasso_release_xpath_context(xpathContext); \ lasso_release_doc(xmlDocument) #define lasso_release_sec_key(dest) \ lasso_release_full2(dest, xmlSecKeyDestroy, xmlSecKeyPtr) #define lasso_release_ghashtable(dest) \ lasso_release_full(dest, g_hash_table_destroy) #define lasso_release_gstring(dest, b) \ { \ GString **__tmp = &(dest); \ if (*__tmp) {\ g_string_free(*__tmp, (b)); \ *__tmp = NULL; \ } \ } #define lasso_release_array_of_xml_strings(dest) \ { \ xmlChar ***__tmp = &(dest);\ if (*__tmp) {\ int i = 0;\ for (i = 0; (*__tmp)[i]; i++) {\ lasso_release_xml_string((*__tmp)[i]);\ }\ lasso_release((*__tmp));\ }\ } /* Assignment and list appending */ /* * lasso_assign_xxx macros ensure that you dot leak previous value of assigned things, they use * lasso_release_xxx macros to deallocate, they also ensure proper reference counting on passed by * references values and proper copying on passed by value values. */ #define lasso_assign_string(dest,src) \ { \ char *__tmp = g_strdup(src);\ lasso_release_string(dest); \ dest = __tmp; \ } #define lasso_assign_xml_string(dest,src) \ { \ xmlChar *__tmp = xmlStrdup(src); \ lasso_release_xml_string(dest); \ dest = __tmp; \ } #define lasso_assign_new_string(dest,src) \ { \ char *__tmp = src; \ if (dest != __tmp) \ lasso_release_string(dest); \ dest = __tmp; \ } #define lasso_assign_gobject(dest,src) \ { \ GObject *__tmp = G_OBJECT(src); \ if (__tmp) \ g_object_ref(__tmp); \ lasso_release_gobject(dest); \ dest = (void*)(__tmp); \ } #define lasso_assign_new_gobject(dest,src) \ { \ GObject *__tmp = G_OBJECT(src); \ if (dest != (void*)__tmp) \ lasso_release_gobject(dest); \ dest = (void*)(__tmp); \ } #define lasso_assign_xml_node(dest,src) \ { \ xmlNode *__tmp = (src); \ lasso_check_type_equality(dest, src); \ if (dest) \ xmlFreeNode(dest); \ dest = xmlCopyNode(__tmp, 1); \ } #define lasso_assign_new_xml_node(dest,src) \ { \ xmlNode *__tmp = (src); \ lasso_check_type_equality(dest, src); \ if (dest) \ xmlFreeNode(dest); \ dest = __tmp; \ } #define lasso_assign_xml_node_list(dest,src) \ { \ xmlNode *__tmp = (src); \ lasso_check_type_equality(dest, src); \ if (dest) \ xmlFreeNode(dest); \ dest = xmlCopyNodeList(__tmp); \ } #define lasso_assign_new_xml_node_list(dest,src) \ lasso_assign_new_xml(dest, src) #define lasso_assign_list(dest, src) \ { \ GList **__tmp = &(dest); \ if (*__tmp) \ g_list_free(*__tmp); \ *__tmp = g_list_copy((src)); \ } #define lasso_assign_new_list_of_gobjects(dest, src) \ { \ GList *__tmp = (src); \ lasso_release_list_of_gobjects(dest); \ dest = (GList*)__tmp; \ } #define lasso_assign_new_list_of_strings(dest, src) \ { \ GList *__tmp = (src); \ lasso_release_list_of_strings(dest); \ dest = (GList*)__tmp; \ } #define lasso_assign_new_list_of_xml_node(dest, src) \ { \ GList *__tmp = (src); \ lasso_release_list_of_xml_node(dest); \ dest = (GList*)__tmp; \ } #define lasso_assign_list_of_gobjects(dest, src) \ { \ GList *__tmp = (src); \ lasso_release_list_of_gobjects(dest); \ dest = g_list_copy(__tmp); \ for (;__tmp != NULL; __tmp = g_list_next(__tmp)) { \ if (G_IS_OBJECT(__tmp->data)) { \ g_object_ref(__tmp->data); \ } \ } \ } #define lasso_assign_list_of_strings(dest, src) \ { \ GList *__tmp = src; \ GList *__iter_dest; \ lasso_release_list_of_strings(dest); \ dest = g_list_copy(__tmp); \ for (__iter_dest = dest ; __iter_dest != NULL ; __iter_dest = g_list_next(__iter_dest)) { \ __iter_dest->data = g_strdup(__iter_dest->data); \ } \ } #define lasso_assign_list_of_xml_node(dest, src) \ { \ GList *__tmp = src; \ GList *__iter_dest; \ lasso_release_list_of_xml_node(dest); \ dest = g_list_copy(__tmp); \ for (__iter_dest = dest ; __iter_dest != NULL ; __iter_dest = g_list_next(__iter_dest)) { \ __iter_dest->data = xmlCopyNode(__iter_dest->data, 1); \ } \ } #define lasso_assign_new_sec_key(dest, src) \ { \ xmlSecKey *__tmp = (src); \ if (dest) \ lasso_release_sec_key(dest); \ dest = __tmp; \ } #define lasso_assign_sec_key(dest, src) \ { \ xmlSecKey *__tmp = NULL; \ if (src) {\ __tmp = xmlSecKeyDuplicate(src); \ } \ if (dest) \ lasso_release_sec_key(dest); \ dest = __tmp; \ } G_GNUC_UNUSED static void _lasso_copy_helper_assign_table_of_attributes(gpointer key, gpointer val, gpointer dest){ g_hash_table_insert((GHashTable*) dest, g_strdup(key), g_strdup(val)); } #define lasso_assign_table_of_attributes(dest, src) \ {\ if (!dest) {\ (dest) = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);\ }\ g_hash_table_remove_all(dest);\ g_hash_table_foreach(src, _lasso_copy_helper_assign_table_of_attributes, dest);\ } /* List appending */ /* lasso_list_add_xxx macros, simplify code around list manipulation (g_list_append needs to be * used like this 'l = g_list_appen(l, value)' ) and ensure proper reference count or copying of * values. */ #define lasso_list_add(dest, src) \ { \ lasso_check_type_equality((src), void*); \ dest = g_list_append(dest, (src)); \ } #define lasso_list_add_non_null(dest, src) \ { \ void *__tmp_non_null_src = (src); \ if (__tmp_non_null_src != NULL) { \ dest = g_list_append(dest, __tmp_non_null_src); \ } else { \ message(G_LOG_LEVEL_CRITICAL, "Adding a NULL value to a non-NULL content list: dest=%s src=%s", #dest, #src); \ } \ } #define lasso_list_add_string(dest, src) \ { \ lasso_list_add_non_null(dest, g_strdup(src));\ } #define lasso_list_add_new_string(dest, src) \ { \ gchar *__tmp = src; \ lasso_list_add_non_null(dest, __tmp); \ } #define lasso_list_add_xml_string(dest, src) \ {\ xmlChar *__tmp_src = (src);\ lasso_list_add_non_null(dest, (void*)g_strdup((char*)__tmp_src));\ } #define lasso_list_add_gobject(dest, src) \ { \ void *__tmp_src = (src); \ if (G_IS_OBJECT(__tmp_src)) { \ dest = g_list_append(dest, g_object_ref(__tmp_src)); \ } else { \ message(G_LOG_LEVEL_CRITICAL, "Trying to add to a GList* a non GObject pointer dest=%s src=%s", #dest, #src); \ } \ } #define lasso_list_add_new_gobject(dest, src) \ { \ void *__tmp_src = (src); \ if (G_IS_OBJECT(__tmp_src)) { \ dest = g_list_append(dest, __tmp_src); \ } else { \ message(G_LOG_LEVEL_CRITICAL, "Trying to add to a GList* a non GObject pointer dest=%s src=%s", #dest, #src); \ } \ } #define lasso_list_add_xml_node(dest, src) \ { \ xmlNode *__tmp_src = xmlCopyNode(src, 1); \ lasso_list_add_non_null(dest, __tmp_src); \ } #define lasso_list_add_new_xml_node(dest, src) \ { \ xmlNode *__tmp_src = src; \ lasso_list_add_non_null(dest, __tmp_src); \ } #define lasso_list_add_xml_node_list(dest, src) \ { \ xmlNode *__tmp_src = xmlCopyNodeList(src); \ lasso_list_add_non_null(dest, __tmp_src); \ } #define lasso_list_add_new_xml_node_list(dest, src) \ lasso_list_add_new_xml_node(dest, src) #define lasso_list_add_gstrv(dest, src) \ { \ GList **__tmp_dest = &(dest); \ const char **__iter = (const char**)(src); \ while (__iter && *__iter) { \ lasso_list_add_string(*__tmp_dest, *__iter); \ } \ } #define lasso_list_add_new_sec_key(dest, src) \ { \ xmlSecKey *__tmp_src = (src); \ lasso_list_add_non_null(dest, __tmp_src); \ } /* List element removal */ #define lasso_list_remove_gobject(list, gobject) \ do { void *__tmp = gobject; GList **__tmp_list = &(list); \ *__tmp_list = g_list_remove(*__tmp_list, __tmp); \ lasso_unref(__tmp); } while(0) /* List element membership */ #define lasso_is_in_list_of_strings(list, item) \ g_list_find_custom(list, item, (GCompareFunc)g_strcmp0) == NULL ? FALSE : TRUE /* Pointer ownership transfer */ /* lasso_transfer_xxx macros are like lasso_assign_xxx but they do not increment reference count or * copy the source value, instead they steal the value (and set the source to NULL, preventing stale * references). */ #define lasso_transfer_full(dest, src, kind) \ {\ lasso_release_##kind((dest)); \ lasso_check_type_equality(dest, src); \ (dest) = (void*)(src); \ (src) = NULL; \ } #define lasso_transfer_xpath_object(dest, src) \ lasso_transfer_full(dest, src, xpath_object) #define lasso_transfer_string(dest, src) \ lasso_transfer_full(dest, src, string) #define lasso_transfer_gobject(dest, src) \ lasso_transfer_full(dest, src, gobject) #define lasso_transfer_xml_node(dest, src) \ lasso_transfer_full(dest, src, xml_node) /* Node extraction */ #define lasso_extract_node_or_fail(to, from, kind, error) \ {\ void *__tmp = (from); \ if (LASSO_IS_##kind(__tmp)) { \ to = LASSO_##kind(__tmp); \ } else { \ rc = error; \ goto cleanup; \ }\ } /* Bad param handling */ #define lasso_return_val_if_invalid_param(kind, name, val) \ g_return_val_if_fail(LASSO_IS_##kind(name), val) #define lasso_bad_param(kind, name) \ lasso_return_val_if_invalid_param(kind, name, \ LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); #define lasso_null_param(name) \ g_return_val_if_fail(name != NULL, LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); /** * lasso_check_non_empty_string: * @str: a char pointer * * Check that @str is non-NULL and not empty, otherwise jump to cleanup and return * LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ. */ #define lasso_check_non_empty_string(str) \ goto_cleanup_if_fail_with_rc(! lasso_strisempty(str), \ LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); /* * We extensively use goto operator but in a formalized way, i.e. only for error checking code * paths. * * The next macros goto_cleanup_xxxx encapsulate idioms used in lasso, like checking for a condition * or setting the return code which must be called 'rc' and be of an 'int' type. */ /* * The following macros are made to create some formalism for function's cleanup code. * * The exit label should be called 'cleanup'. And for functions returning an integer error code, the * error code should be named 'rc' and 'return rc;' should be the last statement of the function. */ /** * goto_cleanup_with_rc: * @rc_value: integer return value * * This macro jump to the 'cleanup' label and set the return value to @rc_value. * */ #define goto_cleanup_with_rc(rc_value) \ do {\ rc = (rc_value); \ goto cleanup; \ } while(0); /** * goto_cleanup_if_fail: * @condition: a boolean condition * * Jump to the 'cleanup' label if the @condition is FALSE. * */ #define goto_cleanup_if_fail(condition) \ {\ if (! (condition) ) {\ goto cleanup; \ } \ } /** * goto_cleanup_if_fail_with_rc: * @condition: a boolean condition * @rc_value: integer return value * * Jump to the 'cleanup' label if the @condition is FALSE and set the return value to * @rc_value. * */ #define goto_cleanup_if_fail_with_rc(condition, rc_value) \ {\ if (! (condition) ) {\ rc = (rc_value); \ goto cleanup; \ } \ } /** * goto_cleanup_if_fail_with_rc_with_warning: * @condition: a boolean condition * @rc_value: integer return value * * Jump to the 'cleanup' label if the @condition is FALSE and set the return value to * @rc_value. Also emit a warning, showing the condition and the return value. * */ #define goto_cleanup_if_fail_with_rc_with_warning(condition, rc_value) \ {\ if (! (condition) ) {\ message(G_LOG_LEVEL_WARNING, "%s failed, returning %s", #condition, #rc_value);\ rc = (rc_value); \ goto cleanup; \ } \ } /** * check_good_rc: * @what: a call to a function returning a lasso error code * * Check if return code is 0, if not store it in rc and jump to cleanup label. */ #define lasso_check_good_rc(what) \ { \ int __rc = (what);\ goto_cleanup_if_fail_with_rc(__rc == 0, __rc); \ } #define lasso_mem_debug(who, what, where) \ { \ if (lasso_flag_memory_debug) \ fprintf(stderr, " freeing %s/%s (at %p)\n", who, what, (void*)where); \ } /** * lasso_foreach: * @_iter: a #GList variable, which will server to traverse @_list * @_list: a #GList value, which we will traverse * * Traverse a #GList list using 'for' construct. It must be followed by a block or a statement. */ #define lasso_foreach(_iter, _list) \ for (_iter = (_list); _iter; _iter = g_list_next(_iter)) /** * lasso_foreach_full_begin: * @_type: the type of the variable @_data * @_data: the name of the variable to define to store data values * @_iter: the name of the variable to define to store the iterator * @_list: the GList* to iterate * * Traverse a GList* @_list, using @_iter as iteration variable extract data field to variable * @_data of type @_type. */ #define lasso_foreach_full_begin(_type, _data, _iter, _list) \ { \ _type _data = NULL; \ GList *_iter = NULL; \ for (_iter = (_list); _iter && ((_data = _iter->data), 1); _iter = g_list_next(_iter)) \ { #define lasso_foreach_full_end() \ } } /** * lasso_list_get_first_child: * @list:(allowed-none): a #GList node or NULL. * * Return the first child in a list, or NULL. */ #define lasso_list_get_first_child(list) \ ((list) ? (list)->data : NULL) /* Get a printable extract for error messages */ char* lasso_safe_prefix_string(const char *str, gsize length); int lasso_gobject_is_of_type(GObject *a, GType b); GObject *lasso_extract_gtype_from_list(GType type, GList *list); GObject * lasso_extract_gtype_from_list_or_new(GType type, GList **list, gboolean create); /* Get first node of this type in a list */ /* ex: lasso_extract_node (LassoNode, LASSO_TYPE_NODE, list) */ #define lasso_extract_gobject_from_list(type, gobjecttype, list) \ ((type*) lasso_extract_gtype_from_list(gobjecttype, list)) /* * Simplify simple accessors argument checking. * */ #define lasso_return_val_if_fail(assertion, value) \ if (!(assertion)) return (value); #define lasso_return_null_if_fail(assertion) \ lasso_return_val_if_fail(assertion, NULL) #define lasso_return_if_fail(assertion) \ if (!(assertion)) return; #define lasso_trace(args...) \ if (lasso_flag_memory_debug) { \ fprintf(stderr, ## args); \ } /* Lasso string data helpers */ inline static gboolean lasso_strisequal(const char *a, const char *b) { return (g_strcmp0(a,b) == 0); } inline static gboolean lasso_strisnotequal(const char *a, const char *b) { return ! lasso_strisequal(a,b); } inline static gboolean lasso_strisempty(const char *str) { return ((str) == NULL || (str)[0] == '\0'); } inline static gboolean lasso_xmlstrisnotequal(const xmlChar *a, const xmlChar *b) { return lasso_strisnotequal((char*)a, (char*)b); } /** * lasso_crypto_memequal: * @a: first buffer * @b: second buffer * @l: common length * * Compare two buffers, preventing timing attacks. */ static inline gboolean lasso_crypto_memequal(void *a, void *b, unsigned int l) { unsigned char *x = a, *y = b; gboolean result = TRUE; for (;l;l--, x++, y++) { result = result && (*x == *y); } return result; } #endif /* __LASSO_UTILS_H__ */ lasso-2.8.2/lasso/PaxHeaders/registry-private.h0000644000000000000000000000013214114336625016541 xustar0030 mtime=1630649749.818436908 30 atime=1678814151.116994448 30 ctime=1678814320.037947775 lasso-2.8.2/lasso/registry-private.h0000644000175000017500000000344614114336625022020 0ustar00bdauvergnebdauvergne00000000000000/* $Id$ * * Lasso - A free implementation of the Liberty Alliance specifications. * * Copyright (C) 2004-2007 Entr'ouvert * http://lasso.entrouvert.org * * Authors: See AUTHORS file in top-level directory. * * 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 Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __REGISTRY_PRIVATE_H__ #define __REGISTRY_PRIVATE_H__ #include "registry.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ typedef struct _LassoRegistry LassoRegistry; struct _LassoRegistry { GHashTable *functional_mapping; GHashTable *direct_mapping; }; LassoRegistry *lasso_registry_new(); void lasso_registry_destroy(); void lasso_registry_default_shutdown(); gint lasso_registry_add_direct_mapping(LassoRegistry *registry, const char *from_namespace, const char *from_name, const char *to_namespace, const char *to_name); gint lasso_registry_add_functional_mapping(LassoRegistry *registry, const char *from_namespace, const char *to_namespace, LassoRegistryTranslationFunction translation_function); const char* lasso_registry_get_mapping(LassoRegistry *registry, const char *from_namespace, const char *from_name, const char *to_namespace); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __REGISTRY_PRIVATE_H__ */ lasso-2.8.2/lasso/PaxHeaders/lasso_config.h.in0000644000000000000000000000013214117162531016270 xustar0030 mtime=1631380825.852638017 30 atime=1678814113.976787424 30 ctime=1678814320.021947684 lasso-2.8.2/lasso/lasso_config.h.in0000644000175000017500000000010114117162531021530 0ustar00bdauvergnebdauvergne00000000000000/* lasso/lasso_config.h.in. */ #define LASSO_LOG_DOMAIN "Lasso" lasso-2.8.2/PaxHeaders/gtk-doc.make0000644000000000000000000000007314001611012014077 xustar0030 atime=1678814114.728791606 29 ctime=1678814322.89796406 lasso-2.8.2/gtk-doc.make0000644000175000017500000002507214001611012017351 0ustar00bdauvergnebdauvergne00000000000000# -*- mode: makefile -*- # # gtk-doc.make - make rules for gtk-doc # Copyright (C) 2003 James Henstridge # 2004-2007 Damon Chaplin # 2007-2017 Stefan Sauer # # 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 Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . #################################### # Everything below here is generic # #################################### if GTK_DOC_USE_LIBTOOL GTKDOC_CC = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) GTKDOC_LD = $(LIBTOOL) --tag=CC --mode=link $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) GTKDOC_RUN = $(LIBTOOL) --mode=execute else GTKDOC_CC = $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) GTKDOC_LD = $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) GTKDOC_RUN = endif # We set GPATH here; this gives us semantics for GNU make # which are more like other make's VPATH, when it comes to # whether a source that is a target of one rule is then # searched for in VPATH/GPATH. # GPATH = $(srcdir) TARGET_DIR=$(HTML_DIR)/$(DOC_MODULE) SETUP_FILES = \ $(content_files) \ $(expand_content_files) \ $(DOC_MAIN_SGML_FILE) \ $(DOC_MODULE)-sections.txt \ $(DOC_MODULE)-overrides.txt EXTRA_DIST = \ $(HTML_IMAGES) \ $(SETUP_FILES) DOC_STAMPS=setup-build.stamp scan-build.stamp sgml-build.stamp \ html-build.stamp pdf-build.stamp \ sgml.stamp html.stamp pdf.stamp SCANOBJ_FILES = \ $(DOC_MODULE).actions \ $(DOC_MODULE).args \ $(DOC_MODULE).hierarchy \ $(DOC_MODULE).interfaces \ $(DOC_MODULE).prerequisites \ $(DOC_MODULE).signals REPORT_FILES = \ $(DOC_MODULE)-undocumented.txt \ $(DOC_MODULE)-undeclared.txt \ $(DOC_MODULE)-unused.txt gtkdoc-check.test: Makefile $(AM_V_GEN)echo "#!/bin/sh -e" > $@; \ echo "$(GTKDOC_CHECK_PATH) || exit 1" >> $@; \ chmod +x $@ CLEANFILES = $(SCANOBJ_FILES) $(REPORT_FILES) $(DOC_STAMPS) gtkdoc-check.test if GTK_DOC_BUILD_HTML HTML_BUILD_STAMP=html-build.stamp else HTML_BUILD_STAMP= endif if GTK_DOC_BUILD_PDF PDF_BUILD_STAMP=pdf-build.stamp else PDF_BUILD_STAMP= endif all-gtk-doc: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP) .PHONY: all-gtk-doc if ENABLE_GTK_DOC all-local: all-gtk-doc endif docs: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP) $(REPORT_FILES): sgml-build.stamp #### setup #### GTK_DOC_V_SETUP=$(GTK_DOC_V_SETUP_@AM_V@) GTK_DOC_V_SETUP_=$(GTK_DOC_V_SETUP_@AM_DEFAULT_V@) GTK_DOC_V_SETUP_0=@echo " DOC Preparing build"; setup-build.stamp: -$(GTK_DOC_V_SETUP)if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ files=`echo $(SETUP_FILES) $(DOC_MODULE).types`; \ if test "x$$files" != "x" ; then \ for file in $$files ; do \ destdir=`dirname $(abs_builddir)/$$file`; \ test -d "$$destdir" || mkdir -p "$$destdir"; \ test -f $(abs_srcdir)/$$file && \ cp -pf $(abs_srcdir)/$$file $(abs_builddir)/$$file || true; \ done; \ fi; \ fi $(AM_V_at)touch setup-build.stamp #### scan #### GTK_DOC_V_SCAN=$(GTK_DOC_V_SCAN_@AM_V@) GTK_DOC_V_SCAN_=$(GTK_DOC_V_SCAN_@AM_DEFAULT_V@) GTK_DOC_V_SCAN_0=@echo " DOC Scanning header files"; GTK_DOC_V_INTROSPECT=$(GTK_DOC_V_INTROSPECT_@AM_V@) GTK_DOC_V_INTROSPECT_=$(GTK_DOC_V_INTROSPECT_@AM_DEFAULT_V@) GTK_DOC_V_INTROSPECT_0=@echo " DOC Introspecting gobjects"; scan-build.stamp: setup-build.stamp $(HFILE_GLOB) $(CFILE_GLOB) $(GTK_DOC_V_SCAN)_source_dir='' ; \ for i in $(DOC_SOURCE_DIR) ; do \ _source_dir="$${_source_dir} --source-dir=$$i" ; \ done ; \ gtkdoc-scan --module=$(DOC_MODULE) --ignore-headers="$(IGNORE_HFILES)" $${_source_dir} $(SCAN_OPTIONS) $(EXTRA_HFILES) $(GTK_DOC_V_INTROSPECT)if grep -l '^..*$$' $(DOC_MODULE).types > /dev/null 2>&1 ; then \ scanobj_options=""; \ gtkdoc-scangobj 2>&1 --help | grep >/dev/null "\-\-verbose"; \ if test "$$?" = "0"; then \ if test "x$(V)" = "x1"; then \ scanobj_options="--verbose"; \ fi; \ fi; \ CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" RUN="$(GTKDOC_RUN)" CFLAGS="$(GTKDOC_CFLAGS) $(CFLAGS)" LDFLAGS="$(GTKDOC_LIBS) $(LDFLAGS)" \ gtkdoc-scangobj $(SCANGOBJ_OPTIONS) $$scanobj_options --module=$(DOC_MODULE); \ else \ for i in $(SCANOBJ_FILES) ; do \ test -f $$i || touch $$i ; \ done \ fi $(AM_V_at)touch scan-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt: scan-build.stamp @true #### xml #### GTK_DOC_V_XML=$(GTK_DOC_V_XML_@AM_V@) GTK_DOC_V_XML_=$(GTK_DOC_V_XML_@AM_DEFAULT_V@) GTK_DOC_V_XML_0=@echo " DOC Building XML"; sgml-build.stamp: setup-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(HFILE_GLOB) $(CFILE_GLOB) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt $(expand_content_files) xml/gtkdocentities.ent $(GTK_DOC_V_XML)_source_dir='' ; \ for i in $(DOC_SOURCE_DIR) ; do \ _source_dir="$${_source_dir} --source-dir=$$i" ; \ done ; \ gtkdoc-mkdb --module=$(DOC_MODULE) --output-format=xml --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) $${_source_dir} $(MKDB_OPTIONS) $(AM_V_at)touch sgml-build.stamp sgml.stamp: sgml-build.stamp @true $(DOC_MAIN_SGML_FILE): sgml-build.stamp @true xml/gtkdocentities.ent: Makefile $(GTK_DOC_V_XML)$(MKDIR_P) $(@D) && ( \ echo ""; \ echo ""; \ echo ""; \ echo ""; \ echo ""; \ echo ""; \ echo ""; \ ) > $@ #### html #### GTK_DOC_V_HTML=$(GTK_DOC_V_HTML_@AM_V@) GTK_DOC_V_HTML_=$(GTK_DOC_V_HTML_@AM_DEFAULT_V@) GTK_DOC_V_HTML_0=@echo " DOC Building HTML"; GTK_DOC_V_XREF=$(GTK_DOC_V_XREF_@AM_V@) GTK_DOC_V_XREF_=$(GTK_DOC_V_XREF_@AM_DEFAULT_V@) GTK_DOC_V_XREF_0=@echo " DOC Fixing cross-references"; html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) $(expand_content_files) $(GTK_DOC_V_HTML)rm -rf html && mkdir html && \ mkhtml_options=""; \ gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-verbose"; \ if test "$$?" = "0"; then \ if test "x$(V)" = "x1"; then \ mkhtml_options="$$mkhtml_options --verbose"; \ fi; \ fi; \ gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-path"; \ if test "$$?" = "0"; then \ mkhtml_options="$$mkhtml_options --path=\"$(abs_srcdir)\""; \ fi; \ cd html && gtkdoc-mkhtml $$mkhtml_options $(MKHTML_OPTIONS) $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE) -@test "x$(HTML_IMAGES)" = "x" || \ for file in $(HTML_IMAGES) ; do \ test -f $(abs_srcdir)/$$file && cp $(abs_srcdir)/$$file $(abs_builddir)/html; \ test -f $(abs_builddir)/$$file && cp $(abs_builddir)/$$file $(abs_builddir)/html; \ test -f $$file && cp $$file $(abs_builddir)/html; \ done; $(GTK_DOC_V_XREF)gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS) $(AM_V_at)touch html-build.stamp #### pdf #### GTK_DOC_V_PDF=$(GTK_DOC_V_PDF_@AM_V@) GTK_DOC_V_PDF_=$(GTK_DOC_V_PDF_@AM_DEFAULT_V@) GTK_DOC_V_PDF_0=@echo " DOC Building PDF"; pdf-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) $(expand_content_files) $(GTK_DOC_V_PDF)rm -f $(DOC_MODULE).pdf && \ mkpdf_options=""; \ gtkdoc-mkpdf 2>&1 --help | grep >/dev/null "\-\-verbose"; \ if test "$$?" = "0"; then \ if test "x$(V)" = "x1"; then \ mkpdf_options="$$mkpdf_options --verbose"; \ fi; \ fi; \ if test "x$(HTML_IMAGES)" != "x"; then \ for img in $(HTML_IMAGES); do \ part=`dirname $$img`; \ echo $$mkpdf_options | grep >/dev/null "\-\-imgdir=$$part "; \ if test $$? != 0; then \ mkpdf_options="$$mkpdf_options --imgdir=$$part"; \ fi; \ done; \ fi; \ gtkdoc-mkpdf --path="$(abs_srcdir)" $$mkpdf_options $(DOC_MODULE) $(DOC_MAIN_SGML_FILE) $(MKPDF_OPTIONS) $(AM_V_at)touch pdf-build.stamp ############## clean-local: @rm -f *~ *.bak @rm -rf .libs @if echo $(SCAN_OPTIONS) | grep -q "\-\-rebuild-types" ; then \ rm -f $(DOC_MODULE).types; \ fi @if echo $(SCAN_OPTIONS) | grep -q "\-\-rebuild-sections" ; then \ rm -f $(DOC_MODULE)-sections.txt; \ fi distclean-local: @rm -rf xml html $(REPORT_FILES) $(DOC_MODULE).pdf \ $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt @if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ rm -f $(SETUP_FILES) $(DOC_MODULE).types; \ fi maintainer-clean-local: @rm -rf xml html install-data-local: @installfiles=`echo $(builddir)/html/*`; \ if test "$$installfiles" = '$(builddir)/html/*'; \ then echo 1>&2 'Nothing to install' ; \ else \ if test -n "$(DOC_MODULE_VERSION)"; then \ installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \ else \ installdir="$(DESTDIR)$(TARGET_DIR)"; \ fi; \ $(mkinstalldirs) $${installdir} ; \ for i in $$installfiles; do \ echo ' $(INSTALL_DATA) '$$i ; \ $(INSTALL_DATA) $$i $${installdir}; \ done; \ if test -n "$(DOC_MODULE_VERSION)"; then \ mv -f $${installdir}/$(DOC_MODULE).devhelp2 \ $${installdir}/$(DOC_MODULE)-$(DOC_MODULE_VERSION).devhelp2; \ fi; \ $(GTKDOC_REBASE) --relative --dest-dir=$(DESTDIR) --html-dir=$${installdir}; \ fi uninstall-local: @if test -n "$(DOC_MODULE_VERSION)"; then \ installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \ else \ installdir="$(DESTDIR)$(TARGET_DIR)"; \ fi; \ rm -rf $${installdir} # # Require gtk-doc when making dist # if HAVE_GTK_DOC dist-check-gtkdoc: docs else dist-check-gtkdoc: @echo "*** gtk-doc is needed to run 'make dist'. ***" @echo "*** gtk-doc was not found when 'configure' ran. ***" @echo "*** please install gtk-doc and rerun 'configure'. ***" @false endif dist-hook: dist-check-gtkdoc all-gtk-doc dist-hook-local @mkdir $(distdir)/html @cp ./html/* $(distdir)/html @-cp ./$(DOC_MODULE).pdf $(distdir)/ @-cp ./$(DOC_MODULE).types $(distdir)/ @-cp ./$(DOC_MODULE)-sections.txt $(distdir)/ @cd $(distdir) && rm -f $(DISTCLEANFILES) @$(GTKDOC_REBASE) --online --relative --html-dir=$(distdir)/html .PHONY : dist-hook-local docs lasso-2.8.2/PaxHeaders/AUTHORS0000644000000000000000000000013114114500706012767 xustar0030 mtime=1630699974.062799746 30 atime=1678098069.957488787 29 ctime=1678814319.88594691 lasso-2.8.2/AUTHORS0000644000175000017500000000323614114500706016244 0ustar00bdauvergnebdauvergne00000000000000======= Authors ======= .. note:: Please do not send bug reports, help or feature requests directly to the authors; use the request tracker or the mailing list. (see README_ for details) Core ==== - Nicolas Clapiès - Valéry Febvre - Frédéric Péters - Damien Laniel - Benjamin Dauvergne - Houzéfa Abbasbhay , Python3 binding, contributed under MIT license by XCG consulting - Simo Sorce , code review using Coverity and related bugfixes, contributed under MIT license by Redhat Inc. - Emmanuel Dreyfus , bug fixes, contributed under MIT license. Unit Tests ========== - Emmanuel Raviart with help from the core developers Packaging ========= - Frédéric Péters Debian Packaging ================ - Frédéric Péters Windows Port ============ - Romain Chantereau Documentation ============= - Christophe Boutet - Romain Chantereau - Nicolas Clapiès - Pierre Cros - Cédric Musso - Frédéric Péters - Emmanuel Raviart Lasso Logo ========== - Florent Monnier Web Site Design =============== - Frédéric Péters with help from: - Cédric Musso (initial design) lasso-2.8.2/PaxHeaders/config.guess0000644000000000000000000000007414175772605014262 xustar0030 atime=1678814115.144793918 30 ctime=1678814319.909947046 lasso-2.8.2/config.guess0000755000175000017500000014051214175772605017533 0ustar00bdauvergnebdauvergne00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2022 Free Software Foundation, Inc. # shellcheck disable=SC2006,SC2268 # see below for rationale timestamp='2022-01-09' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # https://git.savannah.gnu.org/cgit/config.git/plain/config.guess # # Please send patches to . # The "shellcheck disable" line above the timestamp inhibits complaints # about features and limitations of the classic Bourne shell that were # superseded or lifted in POSIX. However, this script identifies a wide # variety of pre-POSIX systems that do not have POSIX shells at all, and # even some reasonably current systems (Solaris 10 as case-in-point) still # have a pre-POSIX /bin/sh. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2022 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi # Just in case it came from the environment. GUESS= # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. tmp= # shellcheck disable=SC2172 trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15 set_cc_for_build() { # prevent multiple calls if $tmp is already set test "$tmp" && return 0 : "${TMPDIR=/tmp}" # shellcheck disable=SC2039,SC3028 { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } dummy=$tmp/dummy case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in ,,) echo "int x;" > "$dummy.c" for driver in cc gcc c89 c99 ; do if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then CC_FOR_BUILD=$driver break fi done if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac } # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if test -f /.attbin/uname ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case $UNAME_SYSTEM in Linux|GNU|GNU/*) LIBC=unknown set_cc_for_build cat <<-EOF > "$dummy.c" #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #elif defined(__GLIBC__) LIBC=gnu #else #include /* First heuristic to detect musl libc. */ #ifdef __DEFINED_va_list LIBC=musl #endif #endif EOF cc_set_libc=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` eval "$cc_set_libc" # Second heuristic to detect musl libc. if [ "$LIBC" = unknown ] && command -v ldd >/dev/null && ldd --version 2>&1 | grep -q ^musl; then LIBC=musl fi # If the system lacks a compiler, then just pick glibc. # We could probably try harder. if [ "$LIBC" = unknown ]; then LIBC=gnu fi ;; esac # Note: order is significant - the case branches are not exclusive. case $UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ /sbin/sysctl -n hw.machine_arch 2>/dev/null || \ /usr/sbin/sysctl -n hw.machine_arch 2>/dev/null || \ echo unknown)` case $UNAME_MACHINE_ARCH in aarch64eb) machine=aarch64_be-unknown ;; armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; earmv*) arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'` endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'` machine=${arch}${endian}-unknown ;; *) machine=$UNAME_MACHINE_ARCH-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently (or will in the future) and ABI. case $UNAME_MACHINE_ARCH in earm*) os=netbsdelf ;; arm*|i386|m68k|ns32k|sh3*|sparc|vax) set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # Determine ABI tags. case $UNAME_MACHINE_ARCH in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"` ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case $UNAME_VERSION in Debian*) release='-gnu' ;; *) release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. GUESS=$machine-${os}${release}${abi-} ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-bitrig$UNAME_RELEASE ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-openbsd$UNAME_RELEASE ;; *:SecBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/SecBSD.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-secbsd$UNAME_RELEASE ;; *:LibertyBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-libertybsd$UNAME_RELEASE ;; *:MidnightBSD:*:*) GUESS=$UNAME_MACHINE-unknown-midnightbsd$UNAME_RELEASE ;; *:ekkoBSD:*:*) GUESS=$UNAME_MACHINE-unknown-ekkobsd$UNAME_RELEASE ;; *:SolidBSD:*:*) GUESS=$UNAME_MACHINE-unknown-solidbsd$UNAME_RELEASE ;; *:OS108:*:*) GUESS=$UNAME_MACHINE-unknown-os108_$UNAME_RELEASE ;; macppc:MirBSD:*:*) GUESS=powerpc-unknown-mirbsd$UNAME_RELEASE ;; *:MirBSD:*:*) GUESS=$UNAME_MACHINE-unknown-mirbsd$UNAME_RELEASE ;; *:Sortix:*:*) GUESS=$UNAME_MACHINE-unknown-sortix ;; *:Twizzler:*:*) GUESS=$UNAME_MACHINE-unknown-twizzler ;; *:Redox:*:*) GUESS=$UNAME_MACHINE-unknown-redox ;; mips:OSF1:*.*) GUESS=mips-dec-osf1 ;; alpha:OSF1:*:*) # Reset EXIT trap before exiting to avoid spurious non-zero exit code. trap '' 0 case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case $ALPHA_CPU_TYPE in "EV4 (21064)") UNAME_MACHINE=alpha ;; "EV4.5 (21064)") UNAME_MACHINE=alpha ;; "LCA4 (21066/21068)") UNAME_MACHINE=alpha ;; "EV5 (21164)") UNAME_MACHINE=alphaev5 ;; "EV5.6 (21164A)") UNAME_MACHINE=alphaev56 ;; "EV5.6 (21164PC)") UNAME_MACHINE=alphapca56 ;; "EV5.7 (21164PC)") UNAME_MACHINE=alphapca57 ;; "EV6 (21264)") UNAME_MACHINE=alphaev6 ;; "EV6.7 (21264A)") UNAME_MACHINE=alphaev67 ;; "EV6.8CB (21264C)") UNAME_MACHINE=alphaev68 ;; "EV6.8AL (21264B)") UNAME_MACHINE=alphaev68 ;; "EV6.8CX (21264D)") UNAME_MACHINE=alphaev68 ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE=alphaev69 ;; "EV7 (21364)") UNAME_MACHINE=alphaev7 ;; "EV7.9 (21364A)") UNAME_MACHINE=alphaev79 ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. OSF_REL=`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` GUESS=$UNAME_MACHINE-dec-osf$OSF_REL ;; Amiga*:UNIX_System_V:4.0:*) GUESS=m68k-unknown-sysv4 ;; *:[Aa]miga[Oo][Ss]:*:*) GUESS=$UNAME_MACHINE-unknown-amigaos ;; *:[Mm]orph[Oo][Ss]:*:*) GUESS=$UNAME_MACHINE-unknown-morphos ;; *:OS/390:*:*) GUESS=i370-ibm-openedition ;; *:z/VM:*:*) GUESS=s390-ibm-zvmoe ;; *:OS400:*:*) GUESS=powerpc-ibm-os400 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) GUESS=arm-acorn-riscix$UNAME_RELEASE ;; arm*:riscos:*:*|arm*:RISCOS:*:*) GUESS=arm-unknown-riscos ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) GUESS=hppa1.1-hitachi-hiuxmpp ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. case `(/bin/universe) 2>/dev/null` in att) GUESS=pyramid-pyramid-sysv3 ;; *) GUESS=pyramid-pyramid-bsd ;; esac ;; NILE*:*:*:dcosx) GUESS=pyramid-pyramid-svr4 ;; DRS?6000:unix:4.0:6*) GUESS=sparc-icl-nx6 ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) GUESS=sparc-icl-nx7 ;; esac ;; s390x:SunOS:*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=$UNAME_MACHINE-ibm-solaris2$SUN_REL ;; sun4H:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-hal-solaris2$SUN_REL ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-sun-solaris2$SUN_REL ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) GUESS=i386-pc-auroraux$UNAME_RELEASE ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) set_cc_for_build SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -m64 -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH=x86_64 fi fi SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=$SUN_ARCH-pc-solaris2$SUN_REL ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-sun-solaris3$SUN_REL ;; sun4*:SunOS:*:*) case `/usr/bin/arch -k` in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/'` GUESS=sparc-sun-sunos$SUN_REL ;; sun3*:SunOS:*:*) GUESS=m68k-sun-sunos$UNAME_RELEASE ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 case `/bin/arch` in sun3) GUESS=m68k-sun-sunos$UNAME_RELEASE ;; sun4) GUESS=sparc-sun-sunos$UNAME_RELEASE ;; esac ;; aushp:SunOS:*:*) GUESS=sparc-auspex-sunos$UNAME_RELEASE ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) GUESS=m68k-milan-mint$UNAME_RELEASE ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) GUESS=m68k-hades-mint$UNAME_RELEASE ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) GUESS=m68k-unknown-mint$UNAME_RELEASE ;; m68k:machten:*:*) GUESS=m68k-apple-machten$UNAME_RELEASE ;; powerpc:machten:*:*) GUESS=powerpc-apple-machten$UNAME_RELEASE ;; RISC*:Mach:*:*) GUESS=mips-dec-mach_bsd4.3 ;; RISC*:ULTRIX:*:*) GUESS=mips-dec-ultrix$UNAME_RELEASE ;; VAX*:ULTRIX*:*:*) GUESS=vax-dec-ultrix$UNAME_RELEASE ;; 2020:CLIX:*:* | 2430:CLIX:*:*) GUESS=clipper-intergraph-clix$UNAME_RELEASE ;; mips:*:*:UMIPS | mips:*:*:RISCos) set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`"$dummy" "$dummyarg"` && { echo "$SYSTEM_NAME"; exit; } GUESS=mips-mips-riscos$UNAME_RELEASE ;; Motorola:PowerMAX_OS:*:*) GUESS=powerpc-motorola-powermax ;; Motorola:*:4.3:PL8-*) GUESS=powerpc-harris-powermax ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) GUESS=powerpc-harris-powermax ;; Night_Hawk:Power_UNIX:*:*) GUESS=powerpc-harris-powerunix ;; m88k:CX/UX:7*:*) GUESS=m88k-harris-cxux7 ;; m88k:*:4*:R4*) GUESS=m88k-motorola-sysv4 ;; m88k:*:3*:R3*) GUESS=m88k-motorola-sysv3 ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110 then if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \ test "$TARGET_BINARY_INTERFACE"x = x then GUESS=m88k-dg-dgux$UNAME_RELEASE else GUESS=m88k-dg-dguxbcs$UNAME_RELEASE fi else GUESS=i586-dg-dgux$UNAME_RELEASE fi ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) GUESS=m88k-dolphin-sysv3 ;; M88*:*:R3*:*) # Delta 88k system running SVR3 GUESS=m88k-motorola-sysv3 ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) GUESS=m88k-tektronix-sysv3 ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) GUESS=m68k-tektronix-bsd ;; *:IRIX*:*:*) IRIX_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/g'` GUESS=mips-sgi-irix$IRIX_REL ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. GUESS=romp-ibm-aix # uname -m gives an 8 hex-code CPU id ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) GUESS=i386-ibm-aix ;; ia64:AIX:*:*) if test -x /usr/bin/oslevel ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=$UNAME_VERSION.$UNAME_RELEASE fi GUESS=$UNAME_MACHINE-ibm-aix$IBM_REV ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` then GUESS=$SYSTEM_NAME else GUESS=rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then GUESS=rs6000-ibm-aix3.2.4 else GUESS=rs6000-ibm-aix3.2 fi ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if test -x /usr/bin/lslpp ; then IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | \ awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV=$UNAME_VERSION.$UNAME_RELEASE fi GUESS=$IBM_ARCH-ibm-aix$IBM_REV ;; *:AIX:*:*) GUESS=rs6000-ibm-aix ;; ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) GUESS=romp-ibm-bsd4.4 ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and GUESS=romp-ibm-bsd$UNAME_RELEASE # 4.3 with uname added to ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) GUESS=rs6000-bull-bosx ;; DPX/2?00:B.O.S.:*:*) GUESS=m68k-bull-sysv3 ;; 9000/[34]??:4.3bsd:1.*:*) GUESS=m68k-hp-bsd ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) GUESS=m68k-hp-bsd4.4 ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` case $UNAME_MACHINE in 9000/31?) HP_ARCH=m68000 ;; 9000/[34]??) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if test -x /usr/bin/getconf; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case $sc_cpu_version in 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case $sc_kernel_bits in 32) HP_ARCH=hppa2.0n ;; 64) HP_ARCH=hppa2.0w ;; '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 esac ;; esac fi if test "$HP_ARCH" = ""; then set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if test "$HP_ARCH" = hppa2.0w then set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH=hppa2.0w else HP_ARCH=hppa64 fi fi GUESS=$HP_ARCH-hp-hpux$HPUX_REV ;; ia64:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` GUESS=ia64-hp-hpux$HPUX_REV ;; 3050*:HI-UX:*:*) set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } GUESS=unknown-hitachi-hiuxwe2 ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) GUESS=hppa1.1-hp-bsd ;; 9000/8??:4.3bsd:*:*) GUESS=hppa1.0-hp-bsd ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) GUESS=hppa1.0-hp-mpeix ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) GUESS=hppa1.1-hp-osf ;; hp8??:OSF1:*:*) GUESS=hppa1.0-hp-osf ;; i*86:OSF1:*:*) if test -x /usr/sbin/sysversion ; then GUESS=$UNAME_MACHINE-unknown-osf1mk else GUESS=$UNAME_MACHINE-unknown-osf1 fi ;; parisc*:Lites*:*:*) GUESS=hppa1.1-hp-lites ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) GUESS=c1-convex-bsd ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) GUESS=c34-convex-bsd ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) GUESS=c38-convex-bsd ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) GUESS=c4-convex-bsd ;; CRAY*Y-MP:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=ymp-cray-unicos$CRAY_REL ;; CRAY*[A-Z]90:*:*:*) echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=t90-cray-unicos$CRAY_REL ;; CRAY*T3E:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=alphaev5-cray-unicosmk$CRAY_REL ;; CRAY*SV1:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=sv1-cray-unicos$CRAY_REL ;; *:UNICOS/mp:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=craynv-cray-unicosmp$CRAY_REL ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'` GUESS=${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` GUESS=sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) GUESS=$UNAME_MACHINE-pc-bsdi$UNAME_RELEASE ;; sparc*:BSD/OS:*:*) GUESS=sparc-unknown-bsdi$UNAME_RELEASE ;; *:BSD/OS:*:*) GUESS=$UNAME_MACHINE-unknown-bsdi$UNAME_RELEASE ;; arm:FreeBSD:*:*) UNAME_PROCESSOR=`uname -p` set_cc_for_build if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabi else FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabihf fi ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case $UNAME_PROCESSOR in amd64) UNAME_PROCESSOR=x86_64 ;; i386) UNAME_PROCESSOR=i586 ;; esac FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL ;; i*:CYGWIN*:*) GUESS=$UNAME_MACHINE-pc-cygwin ;; *:MINGW64*:*) GUESS=$UNAME_MACHINE-pc-mingw64 ;; *:MINGW*:*) GUESS=$UNAME_MACHINE-pc-mingw32 ;; *:MSYS*:*) GUESS=$UNAME_MACHINE-pc-msys ;; i*:PW*:*) GUESS=$UNAME_MACHINE-pc-pw32 ;; *:SerenityOS:*:*) GUESS=$UNAME_MACHINE-pc-serenity ;; *:Interix*:*) case $UNAME_MACHINE in x86) GUESS=i586-pc-interix$UNAME_RELEASE ;; authenticamd | genuineintel | EM64T) GUESS=x86_64-unknown-interix$UNAME_RELEASE ;; IA64) GUESS=ia64-unknown-interix$UNAME_RELEASE ;; esac ;; i*:UWIN*:*) GUESS=$UNAME_MACHINE-pc-uwin ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) GUESS=x86_64-pc-cygwin ;; prep*:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=powerpcle-unknown-solaris2$SUN_REL ;; *:GNU:*:*) # the GNU system GNU_ARCH=`echo "$UNAME_MACHINE" | sed -e 's,[-/].*$,,'` GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's,/.*$,,'` GUESS=$GNU_ARCH-unknown-$LIBC$GNU_REL ;; *:GNU/*:*:*) # other systems with GNU libc and userland GNU_SYS=`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"` GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_MACHINE-unknown-$GNU_SYS$GNU_REL-$LIBC ;; *:Minix:*:*) GUESS=$UNAME_MACHINE-unknown-minix ;; aarch64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC=gnulibc1 ; fi GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; arc:Linux:*:* | arceb:Linux:*:* | arc32:Linux:*:* | arc64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; arm*:Linux:*:*) set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then GUESS=$UNAME_MACHINE-unknown-linux-$LIBC else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabi else GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabihf fi fi ;; avr32*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; cris:Linux:*:*) GUESS=$UNAME_MACHINE-axis-linux-$LIBC ;; crisv32:Linux:*:*) GUESS=$UNAME_MACHINE-axis-linux-$LIBC ;; e2k:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; frv:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; hexagon:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; i*86:Linux:*:*) GUESS=$UNAME_MACHINE-pc-linux-$LIBC ;; ia64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; k1om:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; loongarch32:Linux:*:* | loongarch64:Linux:*:* | loongarchx32:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; m32r*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; m68*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; mips:Linux:*:* | mips64:Linux:*:*) set_cc_for_build IS_GLIBC=0 test x"${LIBC}" = xgnu && IS_GLIBC=1 sed 's/^ //' << EOF > "$dummy.c" #undef CPU #undef mips #undef mipsel #undef mips64 #undef mips64el #if ${IS_GLIBC} && defined(_ABI64) LIBCABI=gnuabi64 #else #if ${IS_GLIBC} && defined(_ABIN32) LIBCABI=gnuabin32 #else LIBCABI=${LIBC} #endif #endif #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa64r6 #else #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa32r6 #else #if defined(__mips64) CPU=mips64 #else CPU=mips #endif #endif #endif #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) MIPS_ENDIAN=el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) MIPS_ENDIAN= #else MIPS_ENDIAN= #endif #endif EOF cc_set_vars=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'` eval "$cc_set_vars" test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; } ;; mips64el:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; openrisc*:Linux:*:*) GUESS=or1k-unknown-linux-$LIBC ;; or32:Linux:*:* | or1k*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; padre:Linux:*:*) GUESS=sparc-unknown-linux-$LIBC ;; parisc64:Linux:*:* | hppa64:Linux:*:*) GUESS=hppa64-unknown-linux-$LIBC ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) GUESS=hppa1.1-unknown-linux-$LIBC ;; PA8*) GUESS=hppa2.0-unknown-linux-$LIBC ;; *) GUESS=hppa-unknown-linux-$LIBC ;; esac ;; ppc64:Linux:*:*) GUESS=powerpc64-unknown-linux-$LIBC ;; ppc:Linux:*:*) GUESS=powerpc-unknown-linux-$LIBC ;; ppc64le:Linux:*:*) GUESS=powerpc64le-unknown-linux-$LIBC ;; ppcle:Linux:*:*) GUESS=powerpcle-unknown-linux-$LIBC ;; riscv32:Linux:*:* | riscv32be:Linux:*:* | riscv64:Linux:*:* | riscv64be:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; s390:Linux:*:* | s390x:Linux:*:*) GUESS=$UNAME_MACHINE-ibm-linux-$LIBC ;; sh64*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; sh*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; sparc:Linux:*:* | sparc64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; tile*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; vax:Linux:*:*) GUESS=$UNAME_MACHINE-dec-linux-$LIBC ;; x86_64:Linux:*:*) set_cc_for_build LIBCABI=$LIBC if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __ILP32__'; echo IS_X32; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_X32 >/dev/null then LIBCABI=${LIBC}x32 fi fi GUESS=$UNAME_MACHINE-pc-linux-$LIBCABI ;; xtensa*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. GUESS=i386-sequent-sysv4 ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. GUESS=$UNAME_MACHINE-pc-sysv4.2uw$UNAME_VERSION ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. GUESS=$UNAME_MACHINE-pc-os2-emx ;; i*86:XTS-300:*:STOP) GUESS=$UNAME_MACHINE-unknown-stop ;; i*86:atheos:*:*) GUESS=$UNAME_MACHINE-unknown-atheos ;; i*86:syllable:*:*) GUESS=$UNAME_MACHINE-pc-syllable ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) GUESS=i386-unknown-lynxos$UNAME_RELEASE ;; i*86:*DOS:*:*) GUESS=$UNAME_MACHINE-pc-msdosdjgpp ;; i*86:*:4.*:*) UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then GUESS=$UNAME_MACHINE-univel-sysv$UNAME_REL else GUESS=$UNAME_MACHINE-pc-sysv$UNAME_REL fi ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac GUESS=$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 GUESS=$UNAME_MACHINE-pc-sco$UNAME_REL else GUESS=$UNAME_MACHINE-pc-sysv32 fi ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configure will decide that # this is a cross-build. GUESS=i586-pc-msdosdjgpp ;; Intel:Mach:3*:*) GUESS=i386-pc-mach3 ;; paragon:*:*:*) GUESS=i860-intel-osf1 ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then GUESS=i860-stardent-sysv$UNAME_RELEASE # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. GUESS=i860-unknown-sysv$UNAME_RELEASE # Unknown i860-SVR4 fi ;; mini*:CTIX:SYS*5:*) # "miniframe" GUESS=m68010-convergent-sysv ;; mc68k:UNIX:SYSTEM5:3.51m) GUESS=m68k-convergent-sysv ;; M680?0:D-NIX:5.3:*) GUESS=m68k-diab-dnix ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) GUESS=m68k-unknown-lynxos$UNAME_RELEASE ;; mc68030:UNIX_System_V:4.*:*) GUESS=m68k-atari-sysv4 ;; TSUNAMI:LynxOS:2.*:*) GUESS=sparc-unknown-lynxos$UNAME_RELEASE ;; rs6000:LynxOS:2.*:*) GUESS=rs6000-unknown-lynxos$UNAME_RELEASE ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) GUESS=powerpc-unknown-lynxos$UNAME_RELEASE ;; SM[BE]S:UNIX_SV:*:*) GUESS=mips-dde-sysv$UNAME_RELEASE ;; RM*:ReliantUNIX-*:*:*) GUESS=mips-sni-sysv4 ;; RM*:SINIX-*:*:*) GUESS=mips-sni-sysv4 ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` GUESS=$UNAME_MACHINE-sni-sysv4 else GUESS=ns32k-sni-sysv fi ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says GUESS=i586-unisys-sysv4 ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm GUESS=hppa1.1-stratus-sysv4 ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. GUESS=i860-stratus-sysv4 ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. GUESS=$UNAME_MACHINE-stratus-vos ;; *:VOS:*:*) # From Paul.Green@stratus.com. GUESS=hppa1.1-stratus-vos ;; mc68*:A/UX:*:*) GUESS=m68k-apple-aux$UNAME_RELEASE ;; news*:NEWS-OS:6*:*) GUESS=mips-sony-newsos6 ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if test -d /usr/nec; then GUESS=mips-nec-sysv$UNAME_RELEASE else GUESS=mips-unknown-sysv$UNAME_RELEASE fi ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. GUESS=powerpc-be-beos ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. GUESS=powerpc-apple-beos ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. GUESS=i586-pc-beos ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. GUESS=i586-pc-haiku ;; x86_64:Haiku:*:*) GUESS=x86_64-unknown-haiku ;; SX-4:SUPER-UX:*:*) GUESS=sx4-nec-superux$UNAME_RELEASE ;; SX-5:SUPER-UX:*:*) GUESS=sx5-nec-superux$UNAME_RELEASE ;; SX-6:SUPER-UX:*:*) GUESS=sx6-nec-superux$UNAME_RELEASE ;; SX-7:SUPER-UX:*:*) GUESS=sx7-nec-superux$UNAME_RELEASE ;; SX-8:SUPER-UX:*:*) GUESS=sx8-nec-superux$UNAME_RELEASE ;; SX-8R:SUPER-UX:*:*) GUESS=sx8r-nec-superux$UNAME_RELEASE ;; SX-ACE:SUPER-UX:*:*) GUESS=sxace-nec-superux$UNAME_RELEASE ;; Power*:Rhapsody:*:*) GUESS=powerpc-apple-rhapsody$UNAME_RELEASE ;; *:Rhapsody:*:*) GUESS=$UNAME_MACHINE-apple-rhapsody$UNAME_RELEASE ;; arm64:Darwin:*:*) GUESS=aarch64-apple-darwin$UNAME_RELEASE ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac if command -v xcode-select > /dev/null 2> /dev/null && \ ! xcode-select --print-path > /dev/null 2> /dev/null ; then # Avoid executing cc if there is no toolchain installed as # cc will be a stub that puts up a graphical alert # prompting the user to install developer tools. CC_FOR_BUILD=no_compiler_found else set_cc_for_build fi if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_PPC >/dev/null then UNAME_PROCESSOR=powerpc fi elif test "$UNAME_PROCESSOR" = i386 ; then # uname -m returns i386 or x86_64 UNAME_PROCESSOR=$UNAME_MACHINE fi GUESS=$UNAME_PROCESSOR-apple-darwin$UNAME_RELEASE ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi GUESS=$UNAME_PROCESSOR-$UNAME_MACHINE-nto-qnx$UNAME_RELEASE ;; *:QNX:*:4*) GUESS=i386-pc-qnx ;; NEO-*:NONSTOP_KERNEL:*:*) GUESS=neo-tandem-nsk$UNAME_RELEASE ;; NSE-*:NONSTOP_KERNEL:*:*) GUESS=nse-tandem-nsk$UNAME_RELEASE ;; NSR-*:NONSTOP_KERNEL:*:*) GUESS=nsr-tandem-nsk$UNAME_RELEASE ;; NSV-*:NONSTOP_KERNEL:*:*) GUESS=nsv-tandem-nsk$UNAME_RELEASE ;; NSX-*:NONSTOP_KERNEL:*:*) GUESS=nsx-tandem-nsk$UNAME_RELEASE ;; *:NonStop-UX:*:*) GUESS=mips-compaq-nonstopux ;; BS2000:POSIX*:*:*) GUESS=bs2000-siemens-sysv ;; DS/*:UNIX_System_V:*:*) GUESS=$UNAME_MACHINE-$UNAME_SYSTEM-$UNAME_RELEASE ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "${cputype-}" = 386; then UNAME_MACHINE=i386 elif test "x${cputype-}" != x; then UNAME_MACHINE=$cputype fi GUESS=$UNAME_MACHINE-unknown-plan9 ;; *:TOPS-10:*:*) GUESS=pdp10-unknown-tops10 ;; *:TENEX:*:*) GUESS=pdp10-unknown-tenex ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) GUESS=pdp10-dec-tops20 ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) GUESS=pdp10-xkl-tops20 ;; *:TOPS-20:*:*) GUESS=pdp10-unknown-tops20 ;; *:ITS:*:*) GUESS=pdp10-unknown-its ;; SEI:*:*:SEIUX) GUESS=mips-sei-seiux$UNAME_RELEASE ;; *:DragonFly:*:*) DRAGONFLY_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_MACHINE-unknown-dragonfly$DRAGONFLY_REL ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case $UNAME_MACHINE in A*) GUESS=alpha-dec-vms ;; I*) GUESS=ia64-dec-vms ;; V*) GUESS=vax-dec-vms ;; esac ;; *:XENIX:*:SysV) GUESS=i386-pc-xenix ;; i*86:skyos:*:*) SKYOS_REL=`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'` GUESS=$UNAME_MACHINE-pc-skyos$SKYOS_REL ;; i*86:rdos:*:*) GUESS=$UNAME_MACHINE-pc-rdos ;; i*86:Fiwix:*:*) GUESS=$UNAME_MACHINE-pc-fiwix ;; *:AROS:*:*) GUESS=$UNAME_MACHINE-unknown-aros ;; x86_64:VMkernel:*:*) GUESS=$UNAME_MACHINE-unknown-esx ;; amd64:Isilon\ OneFS:*:*) GUESS=x86_64-unknown-onefs ;; *:Unleashed:*:*) GUESS=$UNAME_MACHINE-unknown-unleashed$UNAME_RELEASE ;; esac # Do we have a guess based on uname results? if test "x$GUESS" != x; then echo "$GUESS" exit fi # No uname command or uname output not recognized. set_cc_for_build cat > "$dummy.c" < #include #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #include #if defined(_SIZE_T_) || defined(SIGLOST) #include #endif #endif #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) #if !defined (ultrix) #include #if defined (BSD) #if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); #else #if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); #else printf ("vax-dec-bsd\n"); exit (0); #endif #endif #else printf ("vax-dec-bsd\n"); exit (0); #endif #else #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname un; uname (&un); printf ("vax-dec-ultrix%s\n", un.release); exit (0); #else printf ("vax-dec-ultrix\n"); exit (0); #endif #endif #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname *un; uname (&un); printf ("mips-dec-ultrix%s\n", un.release); exit (0); #else printf ("mips-dec-ultrix\n"); exit (0); #endif #endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; } echo "$0: unable to guess system type" >&2 case $UNAME_MACHINE:$UNAME_SYSTEM in mips:Linux | mips64:Linux) # If we got here on MIPS GNU/Linux, output extra information. cat >&2 <&2 <&2 </dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = "$UNAME_MACHINE" UNAME_RELEASE = "$UNAME_RELEASE" UNAME_SYSTEM = "$UNAME_SYSTEM" UNAME_VERSION = "$UNAME_VERSION" EOF fi exit 1 # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: lasso-2.8.2/PaxHeaders/config.h.in0000644000000000000000000000013214404125672013752 xustar0030 mtime=1678814138.856925991 30 atime=1678814150.184989241 30 ctime=1678814319.877946865 lasso-2.8.2/config.h.in0000644000175000017500000000513614404125672017227 0ustar00bdauvergnebdauvergne00000000000000/* config.h.in. Generated from configure.ac by autoheader. */ /* Define if check available with XML support */ #undef CHECK_IS_XML /* "The default key encryption method" */ #undef DEFAULT_KEY_ENCRYPTION_METHOD /* "The default signing algorithm" */ #undef DEFAULT_SIGNING_ALGO /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_JNI_H /* Have compression library */ #undef HAVE_LIBZ /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDIO_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Support for variadic macros */ #undef HAVE_VARIADIC_MACROS /* Define to 1 if you have the header file. */ #undef HAVE_ZLIB_H /* Major version number */ #undef LASSO_VERSION_MAJOR /* Minor version number */ #undef LASSO_VERSION_MINOR /* Release version number */ #undef LASSO_VERSION_SUBMINOR /* XMLSEC Version number */ #undef LASSO_XMLSEC_VERSION_NUMBER /* Define to the sub-directory where libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* "The minimal hash algorithm" */ #undef MIN_HASH_ALGO /* Define to 1 if your C compiler doesn't accept -c and -o together. */ #undef NO_MINUS_C_MINUS_O /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if all of the C90 standard headers exist (not just the ones required in a freestanding environment). This macro is provided for backward compatibility; new code need not use it. */ #undef STDC_HEADERS /* Version number of package */ #undef VERSION #include lasso-2.8.2/PaxHeaders/docs0000644000000000000000000000013214404126163012576 xustar0030 mtime=1678814323.061964994 30 atime=1678814326.421984131 30 ctime=1678814323.061964994 lasso-2.8.2/docs/0000755000175000017500000000000014404126163016123 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/docs/PaxHeaders/Makefile.am0000644000000000000000000000013213766621500014714 xustar0030 mtime=1608196928.758895268 30 atime=1678814114.640791116 30 ctime=1678814322.809963559 lasso-2.8.2/docs/Makefile.am0000644000175000017500000000021313766621500020160 0ustar00bdauvergnebdauvergne00000000000000MAINTAINERCLEANFILES = Makefile.in SUBDIRS = lasso-book DIST_SUBDIRS = reference lasso-book if ENABLE_GTK_DOC SUBDIRS += reference endif lasso-2.8.2/docs/PaxHeaders/Makefile.in0000644000000000000000000000013214404125673014725 xustar0030 mtime=1678814139.488929518 30 atime=1678814149.752986827 30 ctime=1678814322.813963582 lasso-2.8.2/docs/Makefile.in0000644000175000017500000005345214404125673020206 0ustar00bdauvergnebdauvergne00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ @ENABLE_GTK_DOC_TRUE@am__append_1 = reference subdir = docs ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ac_check_class.m4 \ $(top_srcdir)/m4/ac_check_classpath.m4 \ $(top_srcdir)/m4/ac_check_junit.m4 \ $(top_srcdir)/m4/ac_prog_jar.m4 \ $(top_srcdir)/m4/ac_prog_java.m4 \ $(top_srcdir)/m4/ac_prog_java_works.m4 \ $(top_srcdir)/m4/ac_prog_javac.m4 \ $(top_srcdir)/m4/ac_prog_javac_works.m4 \ $(top_srcdir)/m4/ac_prog_javah.m4 \ $(top_srcdir)/m4/ac_try_compile_java.m4 \ $(top_srcdir)/m4/as-compiler-flag.m4 \ $(top_srcdir)/m4/dps_java_check_class.m4 \ $(top_srcdir)/m4/dps_xtra_classpath.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h \ $(top_builddir)/lasso/lasso_config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CHECK_CFLAGS = @CHECK_CFLAGS@ CHECK_LIBS = @CHECK_LIBS@ CLASSPATH_JUNIT = @CLASSPATH_JUNIT@ CLASSPATH_OPT = @CLASSPATH_OPT@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CSHARPCILINTERPRETER = @CSHARPCILINTERPRETER@ CSHARPCOMPILER = @CSHARPCOMPILER@ CSHARPCYGPATH_W = @CSHARPCYGPATH_W@ CSHARPDYNAMICLINKING = @CSHARPDYNAMICLINKING@ CSHARPLIBRARYPREFIX = @CSHARPLIBRARYPREFIX@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEBUGGING = @DEBUGGING@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLL_FILENAME = @DLL_FILENAME@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GACUTIL = @GACUTIL@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HTML_DIR = @HTML_DIR@ INKSCAPE = @INKSCAPE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVAC_FLAGS = @JAVAC_FLAGS@ JAVAH = @JAVAH@ JAVAH_FLAGS = @JAVAH_FLAGS@ JAVA_INCLUDE = @JAVA_INCLUDE@ JAVA_JUNIT = @JAVA_JUNIT@ JAVA_VERSION = @JAVA_VERSION@ JDK_INCLUDE = @JDK_INCLUDE@ JNI_EXTRA_LDFLAGS = @JNI_EXTRA_LDFLAGS@ JUNIT = @JUNIT@ LASSO_APP_DEFINES = @LASSO_APP_DEFINES@ LASSO_CFLAGS = @LASSO_CFLAGS@ LASSO_CORE_CFLAGS = @LASSO_CORE_CFLAGS@ LASSO_CORE_LIBS = @LASSO_CORE_LIBS@ LASSO_DEFINES = @LASSO_DEFINES@ LASSO_DOCDIR = @LASSO_DOCDIR@ LASSO_LIBS = @LASSO_LIBS@ LASSO_PUB_CFLAGS = @LASSO_PUB_CFLAGS@ LASSO_STATIC_BINARIES = @LASSO_STATIC_BINARIES@ LASSO_VERSION_INFO = @LASSO_VERSION_INFO@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PERLINSTALLSITEARCH = @PERLINSTALLSITEARCH@ PERLMAN3DIR = @PERLMAN3DIR@ PERL_CFLAGS = @PERL_CFLAGS@ PERL_VERSION = @PERL_VERSION@ PHP5 = @PHP5@ PHP5_CONFIG = @PHP5_CONFIG@ PHP5_CONFIG_DIR = @PHP5_CONFIG_DIR@ PHP5_EXTENSION_DIR = @PHP5_EXTENSION_DIR@ PHP5_INCLUDES = @PHP5_INCLUDES@ PHP5_INCLUDE_DIR = @PHP5_INCLUDE_DIR@ PHP5_LDFLAGS = @PHP5_LDFLAGS@ PHP5_LIBS = @PHP5_LIBS@ PHP5_PREFIX = @PHP5_PREFIX@ PHP5_UNPREFIXED_EXTENSION_DIR = @PHP5_UNPREFIXED_EXTENSION_DIR@ PHP5_VERSION = @PHP5_VERSION@ PHP7 = @PHP7@ PHP7_CONFIG = @PHP7_CONFIG@ PHP7_CONFIG_DIR = @PHP7_CONFIG_DIR@ PHP7_EXTENSION_DIR = @PHP7_EXTENSION_DIR@ PHP7_INCLUDES = @PHP7_INCLUDES@ PHP7_INCLUDE_DIR = @PHP7_INCLUDE_DIR@ PHP7_LDFLAGS = @PHP7_LDFLAGS@ PHP7_LIBS = @PHP7_LIBS@ PHP7_PREFIX = @PHP7_PREFIX@ PHP7_UNPREFIXED_EXTENSION_DIR = @PHP7_UNPREFIXED_EXTENSION_DIR@ PHP7_VERSION = @PHP7_VERSION@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PYTHON = @PYTHON@ PYTHON_VERSION = @PYTHON_VERSION@ PY_CFLAGS = @PY_CFLAGS@ PY_DYNLOAD = @PY_DYNLOAD@ PY_EXTRA_LIBS = @PY_EXTRA_LIBS@ PY_LIB_A = @PY_LIB_A@ PY_LIB_LOC = @PY_LIB_LOC@ PY_SITE_PACKAGES = @PY_SITE_PACKAGES@ RANLIB = @RANLIB@ RC = @RC@ REST2HTML = @REST2HTML@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_VERSION = @SWIG_VERSION@ TAR = @TAR@ TESTS_JUNIT = @TESTS_JUNIT@ UPCASED_DLL_FILENAME = @UPCASED_DLL_FILENAME@ VERSION = @VERSION@ VERSION_UNDERSCORED = @VERSION_UNDERSCORED@ WINDOWS_VERSION = @WINDOWS_VERSION@ XSLTPROC = @XSLTPROC@ Z_CFLAGS = @Z_CFLAGS@ Z_LIBS = @Z_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ uudecode = @uudecode@ MAINTAINERCLEANFILES = Makefile.in SUBDIRS = lasso-book $(am__append_1) DIST_SUBDIRS = reference lasso-book all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign docs/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign docs/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lasso-2.8.2/docs/PaxHeaders/lasso-book0000644000000000000000000000013214404126163014647 xustar0030 mtime=1678814323.117965313 30 atime=1678814326.421984131 30 ctime=1678814323.117965313 lasso-2.8.2/docs/lasso-book/0000755000175000017500000000000014404126163020174 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/docs/lasso-book/PaxHeaders/default.css0000644000000000000000000000013113766621500017066 xustar0030 mtime=1608196928.758895268 30 atime=1678098073.489516506 29 ctime=1678814323.11396529 lasso-2.8.2/docs/lasso-book/default.css0000644000175000017500000000366413766621500022350 0ustar00bdauvergnebdauvergne00000000000000body { font-family: sans-serif; } h1 a, h2 a, h3 a, h4 a { text-decoration: inherit; color: inherit; } pre.literal-block { background: #eee; border: 1px inset black; padding: 2px; margin: auto 10px; overflow: auto; } h1.title { text-align: center; background: #eef; border: 1px solid #aaf; letter-spacing: 1px; } div.section { margin-bottom: 2em; } div.section h1 { padding: 0 15px; background: #eef; border: 1px solid #aaf; } div.section h2 { padding: 0 15px; background: #eef; border: 1px solid #aaf; } div.document { margin-top: 1em; border-top: 1px solid #aaf; border-bottom: 1px solid #aaf; } div.section p, div.section ul { text-align: justify; } div.contents { float: right; border: 1px solid black; margin: 1em; background: #eef; max-width: 33%; } div#building-liberty-services-with-lasso div#table-of-contents { max-width: inherit; float: none; background: white url(lasso.png) bottom right no-repeat; } div.contents ul { padding-left: 1em; list-style: none; } div.contents li { padding-bottom: 2px; } div.contents p { background: #ddf; text-align: center; border-bottom: 1px solid black; margin: 0; } th.docinfo-name { text-align: right; padding-right: 0.5em; } dd { margin-bottom: 1ex; } table.table { margin: 1ex 0; border-spacing: 0px; } table.table th { padding: 0px 1ex; background: #eef; font-weight: normal; } table.table td { padding: 0 0.5ex; } div.note, div.warning { padding: 0.3ex; padding-left: 60px; min-height: 50px; margin: 1ex 1em; } div.note { background: #ffa url(note.png) top left no-repeat; border: 1px solid #fd8; } div.warning { background: #ffd url(warning.png) top left no-repeat; } p.admonition-title { font-weight: bold; display: inline; display: none; padding-right: 1em; } div.figure { margin: 0 auto; width: 70%; min-width: 800px; text-align: center; } div.figure p.caption { font-style: italic; margin: 1ex 0 2em 0; text-align: center; } lasso-2.8.2/docs/lasso-book/PaxHeaders/figures0000644000000000000000000000013214404126163016313 xustar0030 mtime=1678814323.205965813 30 atime=1678814326.421984131 30 ctime=1678814323.205965813 lasso-2.8.2/docs/lasso-book/figures/0000755000175000017500000000000014404126163021640 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/docs/lasso-book/figures/PaxHeaders/sso-brws-art-1.svg0000644000000000000000000000013214404126112021604 xustar0030 mtime=1678814282.129732342 30 atime=1678814282.917736813 30 ctime=1678814323.181965678 lasso-2.8.2/docs/lasso-book/figures/sso-brws-art-1.svg0000644000175000017500000064764614404126112025103 0ustar00bdauvergnebdauvergne00000000000000 image/svg+xml ServiceProvider IdentityProvider 4 SOAP 1 HTTP 2 HTTP 3 HTTP HTTP 5 lasso-2.8.2/docs/lasso-book/figures/PaxHeaders/sso-brws-post-2.png0000644000000000000000000000013214404126121021771 xustar0030 mtime=1678814289.905776469 30 atime=1678814289.829776038 30 ctime=1678814323.165965586 lasso-2.8.2/docs/lasso-book/figures/sso-brws-post-2.png0000644000175000017500000010425714404126121025252 0ustar00bdauvergnebdauvergne00000000000000‰PNG  IHDR ¡™Ð< pHYsÊ&ó?tEXtSoftwarewww.inkscape.org›î< IDATxœìÝw˜Uõµÿñ÷:em ŠÑ‹¢"cÁ†FLâMl±$×M¹Ñ˜kMbÌ/¹771Åhc‰Wc‰‰ìFåÚ±Ò”"ED@)SN[¿?vñÌá Ì™‘ÏëyÎsföþž½¿gž‡Öù~×Zæîˆˆˆˆˆˆt†DWO@DDDDD¶ @DDDDD¤Ó(‘N£DDDDDD:é4 @DDDDD¤Ó(‘N£DDDDDD:é4 @DDDDD¤Ó(‘N£DDDDDD:é4 @DDDDD¤Ó(‘N£DDDDDD:é4 @DDDDD¤Ó(‘N£DDDDDD:é4 @DDDDD¤Ó(‘N£DDDDDD:é4 @DDDDD¤Ó(‘N£DDDDDD:é4 @DDDDD¤Ó(‘N£DDDDDD:é4 @DDDD:™™Õ˜ÙNfVßÕs0³ºp>=ºz.òÙ§DDDD¤Ììp3»ÁÌmãKöæçuܬZ2³nfÖ»•Ó‡†óùRÑø„™õ6³ºÎ˜Ÿl9€ˆˆˆˆ´ß^ÁÄž]=‘õ¸XnfUm¿-°ø¯›‘l‘R]=éZî>°®ž‡l€ˆˆˆˆt 3K‡;ïOµá5C€ý`ð¼»JÆôzó$p0˜ <ãîù¢±ƒ€ná·;šY6üz…»¯·Ym,s÷ÕfÖ=œ/@O3Û©èÖóÂûàî Z™ÿváÜßuwßÐû•-‹¶`‰ˆˆˆt3¼ <Ü< L†´2¾§™Ý Ìîþ L^3³K†ÿˆ oãp`:ð0ðGàIà93ëU4ö`løõÌðus€ Ãc‡Ò2äXà¹ðë-?èüx7 lJßC÷ðw(ør€ˆˆˆˆt3K#È ¹ ØØxøu™ñ àïÀx‚àb ?ðU‚Õˆ‰fVSæV·+CÃëß Þ3r 0)üzw‚hp]+Óø\øõíE㇫ßü?òœ2¯ý2Arc+×–-œ‘Ž1Øø£»_ãî‹Ý}p&Á G© ¶QýÜݯp÷Ùî¾ÔÝÿ|› ùb™×Ýáî—»ûŒðú_–c¢î>X~û®»Ï +ÊMÜÝ×ÑöªUEãç†[Áþ Ìη˜;ø¸s}?Ùr)éG„Ï.>nKúóºÃ9±ÜøÐýáóÁeεø¾»7lóZg{T¥„ïá‚Uc£ãf¶/AÐu»»¯måå²…S""""Ò1†Ïï–97·Ì±(ÑûE3[^üà““­Ë¼nQ™c«¶Au¤[€Zö2‰¾¾¡ƒï-›1UÁéQv[ËÛ&Â×\äZS®êT¡Ì±çî+ÍìàÌ0ý#à4àw³+æ$› """"caø¼ðAɹҊV¬”<çî¯wÀ|66 jËøë¯……«.ZýõÒ,‘Žñhø|vñA33à¬2ãÿ>_ÜAóY>÷nãø‚­ZàîS€—ÞãùÀJà®vÌQ¶Zéôß8Û̔ǭ~ .3þ½<¾–äý5AîG‚»_!¨¨õà&ÎgjøüK3û;¦¹ûôrƒÝ½ÙÌÞÆšÙ…ÀâðÔßÝ=[4ô÷=N¶~íî ›8?ÙBhDDDD¤„åjO^® H<Ÿ ü pÁzÆ_>O&غ5 ¸ØO‚€Mñg‚~!'„Ïw6ðšs º·ÿ2AUìN *ç«Þ²A¦•""""ívï|èî«JÎ%î@P±ê9 MPÂv¹»¯,s½­š ÖË9î>§dL_ '0ßÝó%çúÝܽ\µ-Ìlk‚|î¾ÂÌê€m€eî¾ºÌøªð| ˜KѹÀûÀî>º•‘HLˆˆˆˆˆl23ûàçÀÝ]ù²A @DDDDd£„‰ôç¬âüA¯á¥+1"å(‘n+Ëàeàkîþv×ÎJ6 @DDDD>£ÌlGà(à)wŸÕ†ñ»‡¹{¹î"í¦2¼""""› LäžTrx Áv¤§¿¸{kÍ;Ë>O6€#Ãñ§¼‘ŠS^‘M“Ft:_>ªJÛþxØÌÒ]7=–Ó¾ò½"¥‘öyÃÝŠ¾1³mÇ€#VþÔUs÷É[°D>5€ˆˆˆˆT»/6³Ÿ·!2³í€ã€çÀWaÀtw¿À̺_&Ø6•¦ÿëîË¢k›Ù(`/àôÞf6‚`Uf’»/\_ˆ™íIÐ]½AÇõ[×÷¾Ì¬ø°7$hªøw_Q2îX ¿»ßdf'½ÿV¢º€‘Ž=ÂçÝ r+þ› ¿bÁö¨!Àuf¶ð0X4çW™ÙÉîþTx­Âëô~\澿ö%èN­ä€˜ÙiÀÍÄ;᜾ü±Ü›1³C€{ ‚•…Õ¯Î.3³±îþjÑð‹€ÑaŽÌµÀ*À{ ¢‘pHø\Ú‰ü"à! —»oœdf)‚ÿÜo œåîýÜ}àh‚áî°ë9AÊÀa/Ž˜™í ÜWÚ½dÜ`àáu†¹ûÅ AHéøÀß ‰ýÝ}wß™ aàž°Sz±jàBàpw¯¯ÿlks’-‹‘ö©5³ÂÇþfv9Áäs« ÅÞ¾éîkÜ} p °p»»ÇãÝý1‚ã}¶lVÕú °3ð¹’kŸpËæ{P|ßÝg„×uàr‚m_¥.êsÜý•¢ù½ \ìŒ-yM¸ÔÝÿŽ-¸{ãæ%[ """"í3˜>^~| ü«»¿V2öw/”‹‰»Ë\û®ðù ¢c7‡ÏgDÂÕ¯lzbó>ÿ£ø`„ü½Ìø#`¡™ý‹™ˆ«"lõ*UZ¢XPˆˆˆˆH{½CÛAþÆ»À wo.3vQ™cýÂç÷Êœ[>÷¸û43{8ÕÌ. W?)à”ÚX­Â´r¿bÛ¬˜¼³žkÖ—|Ÿ>ÜÀ·¨xefƒ€/–­ªüÂÌ’¥'ͬÖÌjÛxomÁ‘¶ ›YíDÐLj0ÇÝËíWîfv50ÐÝÏî깈ˆl wŸof×—“ÍìF‚-W§ävüµ¨H±[V>®ù$a}Cþ< œ®žÜGPø?ÊïY2þNà‚&„/™Ù_€ùáköN>¼ÕÆûËNˆˆ¬—™íü™2{Íl6ðw³Ó'¶®C)¿u@D¤£äþþ¸ cñ¥¹¸ûåf¶¸ømxø#à‚£œ‡W Àv÷r×^Þwuѽ f6ž ‡äT‚UÕá÷¯”þ][4ÞÍì_€~Qtý¹PñR‹ ñEÊ2å‰Hk̬ž &|‚?L#øƒ8AðéÜ7ÜýÉ.›d(ì껵»ÿª«ç""ÒfÖŸ áw/—´^É{ÕôYâî™6¾¦ž Y}I+•¾DÖKˆˆ´ÊÌÎ#èŒ{»_Ôʘª¶þÑQºˆ¬ÏÀðù•Ö” >ÌìófvŸ™½gfKÌìY3ûr™qÿnfw™Y/3û¾™½ef™ÙÌìOfVv5ÃÌÒfv»™]Stìj3»©ÌØ:3»ÄÌ^ ç2ÏÌ1³ÓËŒž{ß̛٣fvtkï]DDD6žYŸhïÉfVÕ–˜Ù×§€ý[ –êÿ×Ì®*¾?0¸ ø60• L0‚Š0CËÜæXà4Šö4䀜X2—žÀ³ÀO êãßAlYM°Ïºxìµá¹ÁÕfî$HºØÌÎjË{‘ Ó,iUøø©+! ‰ÀsÀÓî>¿ÌøÝ7)ÀÑî¾:<ž&È s÷áñ[òH¦‡¹ûÒ¢k}ž JËÏÜý’’ûÜ r÷Eá±§Ãk÷)w#p.ðŸîþ“’kôw÷%á×G…sür´ª–Ã|š Vþ w_¾q?A)¥i•»¯îúçT;™gf¯•Ùžt¾áu²ÀU¿sN)s««‹ƒÐ³Àà+Åuçͬ/A óX|”Ö¤?˜ \[æ½-)úö+$ß,ÞRæîkÂ×vï)"""í¤2¼"²^î¾85\ 88€` Ô¾Û“&¸{Ô ë€ðùp3;¸äR5áóÎenój™ûº™ÝJP~ò(‚r“_&èà{KékJ #Øjõ‚ox©÷‚’“_5³ÒsÛ®gÞ"""²‘€ˆH›„«†+ÌìBàW5꣤(­åL´¨E_äÃVÆß \ œÁ'ÈÀJàï˜rðùƒ ŒèEÔœ×Êù¹5üEDD¤€ˆÈ&q÷ëÌìJ`3«u÷F`Aòø¾­4ÄÚØ{Ì s;N4³^¹(#€ܽi/ò5´áV+:w²é³é:a®ÝÉûy‹ Šá¬6¬‹t "²IÌ,E°Å©@Ð àyàóÀX‚*R•p3pA·Þ]‹ŽmÈ4`0ÚÌRîž[ÏØç ¶™t÷Û1W‘Ngf'TûÛ¥•!ËÍìEà¥ðñJ™¼;‘N£$ti•™}ÃÌ~lfÛ—¯þè<&™\OKñ 3Û§ä5ff‡˜ÙÆ®2ÜK°mëkÀ¿3Ýý… ½(œÓo ÊêþO0Ïg¯¢oä?•ÎÏÌ’fvœ™õADäSÄÌFšÙd‚ß“»$“I;ì0N>ùdöÙgjj¢Ô;¶"ø`èJà!`‰™-û5Ýbf7–ÉÛé0Z‘õéü'ð}3›Ì'È­ô%(ÍûïÑ`wŸof_"è·ñ²™=O?±5°A00† ºU›¸ûZ3»‡OòJ®Ûˆù_ ç8>üÐ ¶(ä€=Ã{¼hfß~L5³ç€÷Ї…Ï»mĽED:„™íü„`eØ=ôP®ºê*†ý¤uR6›eêÔ©L™2…W_}•W^y…yóæE§òI³Y€sÍìvà«Ú®%M}@D¤UáªÁAAÞ@‚&ó—?—Û-zÝ@àëÀ(‚&„"¬˜D}6N%¨¦uu˜CÒÚ<ö"Xýø•»/.3æ| ¿»ÿ°äxøp2AÔ@Pš÷¯îþDÉØ=ú†ìÔ$°¿CÐñYw/´6G‘Žff½ >úw‚-°ì¶Ûn\}õÕqÄ´åÿt+V¬àÍ7ßä7Þà7Þàõ×_gáÂ…ÅC¾çîÿÕó‰(ù ? º¸‚`;}ûöå’K.á+_ù ©T°¡eSÿOwóÍ7s饗’Ï禹û°ŠL\¤Ú‚%"""ò)ef‡l=Ý ººš¯ýë\tÑEôèÑcý/nƒ††–-[Æn»íÆôéÓvk÷EE6@ˆˆˆˆÈ§Œ™íü0!üžñãÇsÅW0`@[ª‹oØë¯¿ÎO0³nf¶ÜÌn4³“y _^`f§˜Ùl‚Žé3åfv™m[4æsáu®*wS3;=<ÿÕðûíÂïÿ_ɸ”™ýX¼ ,3³ûº¹—efç™Ù|‚—ÀGfö¿a³¯âq—…÷ef·tDŸIQx‘Mp"ÐÇ̸í¶Û8餓*|är9ž~úi¦M›ÆÇL¡P ™LRUUE&“!N“H$Èf³ÔÖÖ'¢+‘§i«­Ãç5á³äVBÐ¥üF‚•‰íÌì‹ÀÀbà›À{ÀX‚”½ÍlD¸Úðð1ð53ûa™nãg5]Ô¡õ_4êz"œKø7ʬքó»’`[Ùsáó2‚ý×;›ÙAîž ‡×„÷ü#ÐLP¡f9ð~ÙŸ”ˆHÛì°ï¾û²Ûn»Å á©TŠL&³É]¶lÓ§OçÝwßs=ª««Éårñ=¢Ut:­ét @DdƒÂ²?¿}ªäô®ÀxwÿGÑø4A%—&à wŸžú»™-'(/ù-àGî^0³[ :üD¤‚ в„®»“H$¨©©¡ªª*>—ËåH&“­nÑÊçó¼÷Þ{Lž<™>ø€T*¯pÔÔÔP(( ñ6¬ªª*ÌŒl6K:n1'‘ޤ)ÇëÐ “Wß—Iì~§ÌëwŸ§–žp÷åföÁÊItlŽ™= œdf=Ý}•eOo`¾Ñý¦—97­Ì±¨¼Ìfö½2çó”/E\ˆlªuâïÝ\.G>Ÿ'‘HÏçãíS©TŠD"A*•"ŸÏóÊ+¯0mÚ'¿îjjjÈd2¸;555ñk¢–âU‘¨HtûNyç²ES""å4¹û~m»ªÌ±ªð¹µÆ…k ªH»™`»ÕàOÀÁAÐOÝ=ÏúE÷k(s®Ü¢ü‘Ù9¥æï–9Þ® ^""%ˆ·[­\¹’ºººàDIP’Íf) ¬Y³&^­ˆz„üõ¯·\™UUU477“N§) d2jkkill$™L’J¥hnnŽ“D"¡éT @D¤#D=:–žW6”œº‡`»ÔH´kCÛ¯–„ÏXw•b9$Æ\ïî/¶áú""¡AÞÀ¤I“˜?>|0;í´Ý»w_g{@SSk×®%‘H°víZ>øàÜ=îíåxd2™8 ijjŠó>Ì,þ:WÔDˆt8倈HGxž`ëÖ)ab〞À³ÅÊX÷£ÍloààwŸÙ†ûMŸO.sî”2Ç¢D÷ÓÛpm‘ŽÒb ֱǢ1cxùå—ùÉO~ÂÝwßͬY³X½ú“ÅרªÀÚµkùè£03jkkã>ÅÁù#555ñ±d2I.—[§$oñœD:’V@D¤âÜ}iXÙêlà×föwo‹ß'¿,óÒ[‚‚Û ‚”›ÛxËG r=Î1³gÜý®p¥å ‚-]¥î%¨Žõu3[ ü·»7˜ÙÖÀiÀ w´÷Ù-V@ºwïΰaÃ6lMMMÌ›7^x?ü!C†0xð`z÷îMMM îN¡Pˆ“Ó£-Wù|>ÎñhjjŠƒ‹¨ãyCCC‹ ѸhhD:é(ßv ({Ž™}D÷ÑœWÒi=òO‚Š[ÃÂqmËÜ=öyø«™ý† HðŸÀ—BxýW™Ù" A¿A¥,‘Š3³>@=%H$ŸÏ“L&Iê^Ÿ&‚Ò¼ Êt÷Õfv4pA³Âž‰Ý÷¸{k¯)„Ä à£Vz|ÞwvÉk§™ÙžÀWªb}ÜEub/¿ø¼™JüÞø0œã#î^œ£r'ðFkïUD¤­ÌìÐáÇ?±Í6Û$žzê©•Q/X·¯»“Íf13ÈN;íDCCfFSSS‹íXÍÍÍTUUÅÕ¬¢Dô¨V>ŸsAÒé4¹\.îÒÔÔT\ÞWˆt8 "Ò‚»?ØÆq9àî Œq‚íQmÞÊäî//­ç|ck÷ K_WæT«ót÷¬¼¬oNS)SRXDdyÔQG%<ð@êëëëï¼óÎ8™1c½{÷¦W¯^q@P\’·±±wÆ‹ÒR»¹\ŽÚÚZ¨ªª"—˵8–JÿŒ‚”\.ÍOˆt8 """"ç7ÜpÃéÏ<óÌÀææ  xH,]º”ë®»ŽwÞ™8€wܱl%¬â-[ѹâÊWÉd’D"—ßwsA¢UâR¼!%¡K‡S""""ÒIÜ}>°ƒ™íüŸÿüç5jï¾û.Ó¦Mã‰'ž`РAì¹çžôéÓ‡nݺ_'~ŽŽ(Ÿ#Êñ(=¬³ +JDW#BéL @DDDD:™»Ï5³ç1Å[©‰ƒfРAuÔQ¼ÿþû¼ýöÛ¼ôÒKl³Í6ì°ÃlµÕVq“Á¨[zÔÛ#“ÉJ¥â-UQŽG´ +›ÍÆM S©fF6›·d¡D:‘®á@Ù$ôèØ6ÛlCÿþýÉår,[¶Œ PWW îNUUUˆDGqôâjX©TЦ¦&jjjhll$NÇAH(‡HS""""Ò5Ö)Ã[¼}­tôîÝ›­¶ÚŠd2Éš5kâ±ÅÍK» §R©V;£Gù!QéÞépê„."ŸJfVcfÛvõñ¸(‰š¯pDAˆ™ÅÏKsA¢À%›Í÷ép @D¤K™ÙÞÇÑá÷œx≜~úéÔÔÔ0{ölÞxã ¦L™Â´iÓ¢mýãÃG±3» ¸²µnë""Ÿ"-V@JW8† Âî»ïNSSsæÌaòäɸ;p[o½u<.ªl•Édâ€#ÚŽU(H§Óq_âÎèѪH$•Jíaf?w÷ïuÚOA¶8 @D¤K˜ÙvÀ€3 ·ƒî¿ÿþ\}õÕì·ß~ñ¸ýöÛ/}éK455ÅÁÈ믿Îo¼Á¼yóŠÿh×…×if¹ûŠN{C""o½IèQ÷óB¡À AƒØe—]hnn¦P(ÐÐÐM¥RqÀ‘ËåÈçóñjG:&›ÍR(ÊV¾*îЫW/jkkÿÃÌ¿þÏ‹##‘ P""Ê̺ߺì°Ã\qÅœp qÒd9555Œ9’‘#GÆÇ>þøcÞ|óM¦L™Â-·Ü¢E‹öïqi¿‘ö(›„뮆äóyÖ®]K>Ÿo DU²¢à¢ªªŠB¡oÃjhh •JÅM ‹;ŸG«"Q;}H.»ì2êëëOY¹rå)wÜqÇ*3{xø‡»Üy?׃¸$ IDATù¬Rºˆt |x¸èÖ«W/®¼òJžþyN<ñDÌl£¯Û«W/>ø`¾õ­oqá…RSS:ªr³é-ú€@ë‰æÅçŠwËïÖÖÖ’Íf1³8ਭ­¥P(P(âò»ÕÕÕ@°^º «P(0uêTÖ¬YÃÖ[oÍe—]ÖsòäÉî½÷Þ[Î=÷ܽzõzÞÌ.1³ÿã‘Ï*­€ˆH‡3³}ëÉS©§v—^z)}ûöm÷õÝ¿þõ¯¬]»–0{öl€Þí¾°ˆHÇ*›„¾¡ÕÒUâD"oÃ*®vétš|>O6›¥®®Ž†††xV.—k‘?ÒØØÈ7Þ¸*•JÍ:ðÀ÷1b„ 2„úúzN:é$ûêW¿z`¡P8ð7Þ`¿ýö[íÖIB‡ÖÖ”d2WÃ*.µ[œ÷‘Édâ’½MMMÔÕÕÑÔÔWË ½íî†×_ Ü ÜjfÉ™3gŽŽ«¯¯7jÔ¨½FŒÁàÁƒéÕ«'Ÿ|rêôÓO?¼±±ñð)S¦ür=öX4sæÌ{€gÜ=¾ˆ©3K£ ¶[ý @mm-ßüæ7¹ð ã}ÇíÕÔÔÄý÷ßÏš5kH$äóyR©î^¼¢DD>íÚœ„^î\t<—Ë‘L&[$•G£U‘T*¯ŠD+ Q#ÂL&¯€ÐJ#BwÏ“ÃÇ÷ÍlȤI“Æ%“Éqûî»ï‘£FJ 2„­·Þš¡C‡rà 7lŸH$.œ5kÖ…wÞyç3éîÓ+úÓ“Í–©ˆp»ÕƒÀѱ1cÆpíµ×2pàÀŠÝgæÌ™L™2…†††xÛAqU—¢Âú®#"ò)P¶ oñ×mÙ’U¾*N*O§Óär¹Õ°Òét‹äô¨$o"‘ˆz,A;¡»ûà×À¯Í¬îå—_>8v›m¶9ñ ƒÚvذaì¸ãŽÔ××óï|§û£>z D "RáÊÇ=„ÁÇž{îɵ×^˨Q£*v|>Ïã?ÎG}×Å7³øÓ½(É2*%‰V@D¤˜ÙVÿÊîî+Ûq¹v'¡G[¯¢|ŽâÞ©T 3‹ó>š››1³xVmmm¼ «èÛN¤s÷‚ ¾afÃî½÷ÞqétúøQ£F}nõêÕ9àé½®|v)‘J pÉ%—ðío»EgÝöZ²d /¿ü2K—.“.£$Ëèm´ç¹¨”¯éCg£oŠ~çä€ ÁïžÕÀ¸ûí¸ÖF%¡¯o$Ú~Z„$‰8Ç£ªªŠl6K.—‹oF¯-Ú¾ÚîJî>˜ üÌÌê´»/kïuå³C}@D¤Ž:t(\puuu›ÔÓ£œ·Þz‹^x¥K—ÁÝ(¡‚’¾ÑžçB¡ éPî>˜D°R,Ô…µÀ]m¸\«+ Å_¯ï\´õ*ÚJ•Ïç[¬ Gy!Qrz6›WE‰Dü;{àÀÛÝÿý{Oš4©"I{î¾RÁ‡”Ò ˆˆTÂŽŸûÜçèׯ_¼2‘H$¨©©!›Íntyݦ¦&f͚ŴiÓhllÄÝI¥R$“Éxÿr&“‰WC¢mXE€ˆHGù6Á'üåä€sܽ4@)gH¹²»­}%ŸG¿#ËmÃÊd2-òå¢mXŲêëë·J¥R_²'NœH$fæóù™Ç{ìŠ6¼‘6Q""í!N&“ôìÙ3NV%¢mSë FÌŒ?þ˜™3g2cÆŒxluu5¹\ŽB¡@mmmœPY(â$Ë(P ) ]D:ÊJ`6°{Éñfà^wÿg¯Ó®$ôèu­m¹*ÞžZܨ°xVôáMt­d2éáõÓÀ…Ba3câĉˉÄô\.7£±±qî„ âåf‘¥DD*¡å?±+ ¤R©x‹A´E‚@¥hËétš+Vðì³ÏòÑGÅãÓét\­%J¨¬©©‰ÿØ7×*úC®©(3ëü;ð g™!9‚Õ‘¶ÊCû;¡GÍ£jòù|‹cÑ*t´­ŠD=Bã-XfÖÚ‡7[ …щDbt÷îÝ3'NœL7³cÇŽ]µïYDˆˆT„q0ÑZÇÞææfòù<‰D‚T*?V¯^Mß¾}™1cO?ý4¹\.ÞVP(â­Q—âäÉl6—âÎÏID¤½ÂJ_~ l~˜ œÔÀ÷Âæ}mÕâÛMí­ 766¶(Éѱ(àhjjjQE0*Ó L&7¸zìîUÀÀîî'N\T(f§R©éÇsÌ|ôûW6@ˆˆTB‹DÊ—^z‰P__oË*þÙÍfijjbÕªUTUUѯ_?–,Y“O>‹ÊCïUŽJí7Ò*®àR]]]¼¢¢-X"Ònfv$ð `¯ðÐ|à à6 ;pPÌnØÈËÇȦ$¡GåÈKs<Òét\ £tµ¸¹¹9Þ¢U(¨®®æˆû€ >|þF¾$‰…BáЉ'®u÷·óùüôž={¾s衇6mäõd  DD*¡Å>æ¥K—rÝu×±×^{1räH† B=Êþ!mlldõêÕ,^¼¶eE‰æÅGéÖhËUCCUUU˜ÙlV+ "Rfvð3àðÐGÀÏ_º{sxlµ™]ü 8ÓÝ7öƒõ&¡·5(‰š°FG&“Ygµ8Ê¡‹‚(qýöÛoç¹çž`çwžuÒI'ÍÞÈ÷Pª›™í›J¥ö]»vmᡇZàîÓ …ÂŒN8aI;¯-Ÿ @D¤âOñÌŒãŽ;Ž1cư`Á^zé%&NœÈÎ;ḭ̈aÃèß¿?ݺu‹_mÍZ½zu\J·8¡2™LÆÛ°¢?œQu­âFZÑJ‰ÊðŠH{˜Ù®À ¶VÐ@ÐñûZwÿ¸ÌKnRî>enç°núƬ†D…>ŠŽ(ï£øwiñ:ÕÕÕ,^¼˜ßÿþ÷,Z´€¡C‡N¿âŠ+Ý„÷°Î{J$Oær¹eÀÉdrWwœH$ÆMœ8q™™]7vìØæ ^E>Ó€ˆH%¬ó)ž™1`À¶ß~{Ž?þx.\ÈÔ©Syî¹ç8p ƒf«­¶¢ªª*þ#Õ¨Ò’‘å*¸”þ±-êæ«DDÚÌÌúß¾Tü^»‡ ¯£ÕmIa¹Ý_nâm[l_]_àQrÏO.úˆ:¢G¿7£Æ¬¥ÇR©¯¿þ:7Ýt $“Éü˜1cž¾à‚ 6%€*WS"‘¸ó˜cŽ™zHLš4iGwß#‘Hô9æ˜c|ˆÙ4fÖøACÓ¾P¾›oô‡u»í¶cÀ€d³Y/^Ì;ï¼CÏž=ãÞî¯`o¹jmV´Rå‚DM¸Šºù*DD6ÈÌê€o—½ÂÃßu÷7;øöëä€lJz.—‹ƒ‹ÒmX©T*þ &“ÉðÈ#pß}÷áîôèÑcÕ\pÿÁ¼¸½oÄÌ–¦R©[>úèÒ$üÂØ±cçäȈ @DdÓýàòË/¿°oß¾üÏÿüóæÍkQí*úD.}:—ÏçéÛ·/Ûl³ îΚ5kâqѾ䨾¶¶vÀ¢’to¾ù&¿ùÍoèß¿?ÇgÇw¤gÏ oWkŸîe³ÙuÊê!@œ÷Q¼ «xk–V@D¤5f¶?Ae«CÃCËÃï‹+[u¦Ñ‹-bàÀ›”„­voÊú$=ÿüóÜzë­d2êêêÖžþùyä‘ +0÷µ©Têö1cÆ´·j–l€ˆÈ&q÷‚J1?6³¿§FùƒfàÀŒ3†E‹1wî\î»ï>êëëÙe—]Øzë­ã²¼áµâmÑ^å(¸(îâîë$§G¥$£cê„."¥Ìlð#‚-WÅ•­~êî+»pjÓeÀÖßüæ7ùÙÏ~Æ!C€¶mÃ2³¸é`pDE;¹ûî»yì±Ç0`ÀÂË.»ì®­À¼ßËd2·Ž?¾+v²S""•Ðë&¡›Ûn»-ýû÷gäÈ‘|ðÁ,X°€ÿû¿ÿ£wïÞì¹çžTWWÇ ?¡‹“Ê“ÉdÜt°¸‚Kq’e>Ÿƒ”šš5"‘Øz*[]ìîóºpj¸»›ÙåÀõ/¼ð‚rÈ!Œ=š³Ï>›C=´M«!…B!Þžå‚,[¶Œßüæ7Ì;€ƒ:è…K.¹dr2™¬Ä3/®]»öï&LÈox¨Hy @D¤Z”’Œ¯p úôéCŸ>}>|8+V¬ ®®.N’ŒV@š››[QçÞ(ïÃÝ×é’Ïçã×5"ÌvöAD>ÖSÙê?Üý.›Xî~ƒ™Í®v÷QÏ>û,Ï>û,{íµçœsGuTéøu¾ f³YfΜÉõ×_ϪU«¨®®n:ãŒ3:ñÄçV`ª¹D"qß1Çór®%[8 "R mîæUj©««[§ùVôG4Ú†•Ëåâ¨ãyTM«ºº:^)âÀ¥( =þBD¶ ae«/äu O!Xñx²«æµ!îþð˜™}¸÷Ö[oÙE]ÄÖ[oÍ©§žÊ¿øEzõ꟣ܻL&äI“¸÷Þ{) ôë×ïƒK/½ôþ]wݵ\óÄbf+“ÉämG}t%rGD€ˆHE´@ øÃøÏþ“ÆÆFFÕb«UiîGqRÜ`°ªª ø$¸(®kŸÉdâUø$9½( ]ˆÈ$¬lõ_À¿„‡×t÷ÍbK¦»?çØ±cÚ{-‘ˆ©„²[° ÄÃ?Ì}÷ÝÇÞ{ïÍÈ‘#2dfV¶ñV"‘ˆ;÷ÖÕÕÅEq]û(‰¶fWͪ©©Ñ ˆÈÆÌö#Xñ8,<U¶ú•»W¢ÇE§s÷·€ÓÍìûÀ×ó2™Lÿx€x€m·Ý–1cÆ0`ÀæÏŸÏ£>Ê’%KH§Ó™SO=õÑÓN;mF%¦afOŒ;ö1TÔC*LˆˆTÂ:[°¢jXÿöoÿF>ŸgáÂ…<óÌ3<òÈ#ì´ÓNìµ×^ôíÛ·EÀm%ˆ*¸DÛ°ŠWEÒéô:Ç¢ò»Q^Hhˆ™uw÷5ýÑŽgf;ÿ œ$€ ð{àÊ.®lU1îþ>p…™]œ | 8xñâʼn›o¾¹ÅØ^½z­¸øâ‹ï>|øGí½¯™5 …;ÇW‰@Fd @D¤‚üŽÖºŸ÷ë×/}éKäóy-ZÄ«¯¾Ê^{íEÏž=ã×$“Éø5Å £’¼ÅAH"‘(» +ZéÝ»÷kÖ¬yÝÌöì¢úþ"ÒÌl+‚<‰‹€‚@î&è`þnWέ£„¿ÃnnëÛ·ïöÛm·Ýw—-[vh¡P¨7³ªƒ:hê¾ð…™õõõ•èD¾¸ªªêÖ#Ž8¢ÝŒHk€ˆH%€u¶TE_—v?ïÓ§Ç{,…B?þ8—ËåH¥Rñ*GTj7• ~UwAjÝwAjàôìÙ“Ñ£G™7oÞGfö7ààw_Õ‰?©3«¾\Ô‡‡¾çî¯wÕ¼:Û‡~¸øNÑ!{ä‘Gzçr¹þfÖ¯P(ôs÷þfÖÏÌj6òò¯õïßÿž#F¨Š t( "R  ¸Çzë×çóyÖ¬YoÙŠž‹W0ŠËï677cf-V@òùü:]ÐÍ,~½™qæ™gÒ³gÏnµµµ_]¼xñW~øá|÷îÝŸY»ví#Àýî®í"Ÿr­T¶šF°âñPWÍëSÄÇŒ³œ ÷¥Åﴻᄏ¶Gý …BÿD"ÑßÝû»{ g‹ ¸ÜýáãŽ;îŸ7mÙ’)‘Jh‘„¾¡ÆY¥ç¢R’Ùl6.òù|¼ÚQ.à(í‹ú€477síµ×rØa‡±Ë.»Ð³gO¾ð…/$Ï:ë¬Ã{íµ×~º÷Þ{¿ÿÖ[o=<<ª­Z"Ÿ.ae«ŸÃÃC rw5ÂÛ€ &4óÂGìÑGíÖÐаM*•êcfÝòùüÛ'œpÂû]1GÙ2)‘J([†·Ü×ë;Ź Ñ6«¨ßG´ +Ê-‰‚¨Lo4‡eË–/^üƒW^ye1pÜn»ívÜ!‡R»Ûn»Ñ¯_?vß}w~õ«_mWUUuÞûï¿ÞC=”M§ÓÏär¹€{Ýý½Šÿ”D¤MÌlðSàØðÐ àÿ±W¶ú49úè£×s‡H§S""•°ÞNèÑ×­‹^­€D9ét:^õÈd‚ÜÊššš¸a.—‹» GÇ¢$—ËÝìîÿ/¼Å­fVóöÛoެ¯¯?eôèÑCöÝw_ D¯^½8í´ÓÒçwÞG¼ð ¿2dÈœ¹sçÞC°Çüiwמh‘ffËhYÙêfà2w_Ö…S‘ R""•ÐæNè­sw’Éd¼êmꪪŠ{€äóyš››ã ¤¸ün„D[°€M³ÂOMß7³Ý|ðÁcÍì¸#F|~äÈ‘ÉÝvÛ¾}û2|øpn¾ùæ!©Tê’Y³f]òàƒ®5³¿s÷¿Uü§'²…+SÙÊ *[}ßÝçvåÜD¤ò€ˆH%”Ý‚ÕÖÕh¤P(ÄG*•Š’âT*ESSS\~7êÒÔÔDMMMñÖÛˆÐÝßÞ~af=^yå•£€±È!‡ô:t(Ûo¿=={öäüóÏïöï|ç_Ÿyæ™5³‘îþR»b"‚™Õß¾ô?\¼%U¶ÙÒ(‘JhWz$‘HÄG6›;žGyÍÍÍ$ jjjâ.èÙl6~Mcc#‰D"ªÆÕæNèî¾øð73;ï/ùËp`\:>þàƒ>`ÿý÷·]wÝ•+V¤7áç#"EÂÊV§?†‡_'¨lõh—MLD:…©„ &¡¯/() -º GÁEñ6¬â¦„¹\®Õ­YE¥€Û€ó`r¯…k̬ϓO>9,žß”ëŠH@•­DDˆˆTB«Ièë ˜ñòË//¼òÊ++²B""å™Yà{À·€j‚ß÷äy¼Û•s‘®¥DD*!Ÿ›’„îîqo\.—Õ‚â-W©T 3‹ó>¢mXQpJ¥Zî¾°pøþûïßðÐCÍ6³Y¹\nú 'œ°ºC~*"[ 3«#¨lu)Ð+<ü8ð=U¶P""•Ñî$tºœ§ÓiܽEå«(àÈd2-Žâ•’¨3zs@êÌlo`ït:}Òĉßf455Í8ùä“n)‘¶3³p6p°mxøe‚§ºj^"òé£DD*¡å¶æ …¸ãy"‘hÑ$“É`fñ–«â YÅAÊ|¯€ôìÙ³±-w÷0PSSsÔC=´x'ŸÏOO§Óo;¶¹½?‘Ϻ°²Õ/€½ÂCó+€Û¼4)LD¶x @Ddf6 XV€j‹u:¡oÌ6¬¨{y´’ËåÊæ‚D‰æÅÛ°r¹ÕÕÕÌ;—›nº €=z¬?~ü;›øÞ»û¦R©}Ý=7iÒ¤wóùü¬l6;ý¤“NZº)×ù¬2³ *[}><ôA‰Ý_º»‚w)Kˆˆ”³;pŠ™­ft Ÿ¿žý­–á-÷ué÷ÑëŠW3 …B¼ÒÜÜwA/Þ†{þùç¹ýöÛÉf³¤ÓéÌ9çœ3±¾¾>ÓÞ‚»7¹ûÀD"±Kuuõ¸‡zhi*•šÑØØ8süøñsÑV-ÙB™ÙîMO!¨lÕü¸ÖÝ?îʹ‰È§Ÿ)ç]`7 '°?0ÀÌæÓYa÷ðˆCËøÄFtB/Îûˆ‚‹âÎèQ¢zsss¼ëÎ;ïdòäÉÔ××/ÿîw¿û}÷Ý÷à ü ææóùÛ_{íµµ#GŽÜ!—Ë M&“{äóùCÒéô0‚O}E¶(f¶p%A®GŠ áçMÀU+ç&"› "RÎ ~C€AÀñf6ÙÝŸ·@`ã’УGÔÛ# 8Òé4Ùl–T*Õ"ïcÙ²eüþ÷¿gÞ¼y :túW\ñh=²í|ïžL&Ÿ3fÌ$ p 'Ì 'Mš´µ™õlç=D6+áÖÄ €ÿz„‡¾íîS»lb"²YR""-˜Yš`å£À'G|:|ÌþYt|“:¡'¡GâèšUUUd2’É$fÆôéÓ¹ñÆ£Îçù1cÆ<}ÁLiï{w÷L>Ÿ¿kܸqo¶6fìØ±Ë€eí½—Èæ ü}pÁv«þáá*[=Óe‘Íš‰>ÝÜØ•`…£µß Y‚àãž’|ë 'œP‰k‰lÖ,¨ q p-ÁÊ'ÀL‚ÊV÷¨²•ˆ´‡‘-TX³°7AÒy²èô ` A-ÿè÷D˜ü£Ì>š8O#ÒÖÕâ•“ÒÞfF:fõêÕÜtÓM¼úê« 2dö•W^9±OŸ>•¨´3}íÚµ0aB›J÷Š|–™Ù9N#ÂCïW7¹{®Ë&&"Ÿ @D¶0f6ø`P[tj!A€1ÛÝ?4³m€sÃs9àMàV>ùœ°dÉ^ýuöÚk¯øÄÆnÊJí—ß7o¿ýíoYºt)‰D¢pðÁ¿ðÝï~÷¹d2Ù®OaͬàîOŒ7îqTÑJ¶pf6” ‰à„ðÐà·À5%E'DDÚEˆÈÀÌ’«Ÿ¶/:µŠ °x­LÏ%[« xÑÝ[Ï-ÞÛž|òÉœy晜uÖYôíÛ7°¡’¼…BT*ø•”Édâ矞›o¾™L&C]]Ýšo|ã~øáïmÔ ¼wÿßqãÆmR¿‘Ï 3\|`%4 ü¸Âݵ%QD*δSä³ËÌj ¶QŒä“Ê5‚Þoï®o/·™}XèîO·á^ÿüƒ ‡„t:ÍÑG͹çžË°aÃâ V…B!þºøû·ß~›B¡@:ÆÝÉårÜ{ï½Lœ8€,¸ì²Ë8pàÚvüH"‹Ö®]{Û„ –WàZ"›%3ë \\Ô¬Þ\êîsºrn"òÙ¦Dä3(üÅÀ>@Uxx5ð"0ÅÝÛ”ë`f½6¦©˜™Ugßv1zôhN?ýtF…»·< …™L†Ù³gÇ¥v—/_Îï~÷;fÏž™ùAôâÅ_<¹½[®ÜýÕE‹Ý{Þyçµ·\¯ÈfÉ̪€oôóè~‚ ²U»«É‰ˆlˆ‘ϰ?Å!GTBw ððFg%šY8™àÓÕý¢ãä”SNaüøñtïÞB¡@¡P ¹¹™9s‚\ß~ûm®¿þz>þøcª««Ï:묇Ž?þøw+0­\"‘˜xÌ1ÇL®ÀµD6;á¿Ë/$˜ïžNÐDðî.›˜ˆlq€ˆ|˜Y7`4A×ò(·k6ðœ»Ïí²‰fv8ðm`aPTWWÇá‡Θ1cØo¿ýXµjóçÏçñÇçž{î¡P(пÿÅ—^zéý»ì²ËªöÎÁÝ?®®®¾íÈ#\ÚÎ¿Ë IDATÐÞk‰lŽÌìHàçÀððÐBàÇÀŸJJj‹ˆt8 "›±p+ÅÁGMxx!ð„»Ï«à}¶w÷Eí¼Æ‚NÊg½¢ã}ûöeçwæ½÷Þã½÷‚ÜòýöÛïÕüàÿ¬®®n÷Œ‰ÄìD"qûÑG]‰Ü‘ÍŠ™~ Züø­»7uÕ¼Dd˦Dd3n¥ØŸ`»U]xø}‚À£¢É£fv p)p”»¿\ëuÆwëÖ팦¦¦Cóù|\¯{÷î«ÇŽ;ùÌ3ÏœÚÞû^(žž2eÊÃW^ye¡×Ùl˜ÙîÝËO!¨d—~\éî+»rn"" @D63f6ˆ`;SÿðЇÀSÀôJw'6³k€„ß~ÓÝSÉëŸxâ‰ýgÏž}l÷îÝ·éÓ§O·óÎ;o~UUU žà?M›ª¸kܸqoUf¦"›3Û ¹ü ‚’ºyà‚<…]97‘ˆ‘ÍD˜`~AA*×¼æîÿ„ßÌ~ ü'AiÎï¸û/+}ÖLŸ>½jæÌ™ýªªªú¹{ÿD"Ñ/‘Hô¶r÷Äú^kfK“Éä­G}ôÒNš®H—3³­€‹ ù¤ÁèãÀÿgïÎã«*Ͻÿ®=$!„ a’QEÄ0YD¡ E«V­³u¢h©õ´öépÚß©í¯ç9l{NOÛÓöØRDœëÐ:[§:UQ« $@d 3 dΞÖýü±vBB¦dïàû~½vcÖ^k¯{èksß×}ý«snYÆ&"Ò ‘N.ÙDð `:–¯8ç:¼®ÁÌ ø5ðÍä½¾áœû}GßçH¼ù曡H$Ò8Áó¼üx<žN0³>ø¿í-2³'/¼ðÂH†‡*’É (n¾‡?sð~/·360‘PéÄ’Š/ú%m^pÎmOÑý øüߢ:üeWw¥â^ÌæÍ›Ro9^˜Y¸ø  y¸ø±¶Ô‘ÎND¤J~¸˜ßLÐ𛾠,ëè:&÷4àwø¿Mõ€9ι{Sq/92Mzyü‘<\šü~~*–cŠˆt´ÐÁO‘tJ‘^ ôMZ<¨ÝËðžü/ðUü¢Õ/9çîOÕýDäð%{yü~£Q€]À¯€ß8碘ˆÈaRé$’³çg³oÖãyçÜêß7Ìf㇛s¦òž"rèÌìLü^ç$íÁïfþ»TþbBD$U@D:äÖº—ã‘:`1ðwç\J‹©“ác0 ?||Ñ9÷p*ï)"‡ÆÌNůñ¸:y¨ø=ðŸÎ¹=™—ˆH{)€ˆdPr=÷§“°xÖ9·> ÷×à7)û‚sî©TßWDÌÌF?®Ãÿÿ…p~ù¶LŽMD¤#(€ˆdˆ™õÄ/&œ<´x1k¹“˽®ÀoÚwµsî¹TßWDÚffƒ€âïnÆŸ }ø¡snm&Ç&"Ò‘@D2 ¹´âü†aüZ´tíN†Çð—|ÕW8ç^LǽE¤%3;¸¸ ÈIþ~ðXš±‰ˆ¤ˆˆH™Yp0.yhð¤snošîß4|Ô—9ç^IǽE¤¹ä,èw€oyÉÃo?pν›©q‰ˆ¤šˆHš$»u_ œ€ßgã]à ç\"M÷à‡†eW "iÖ¤{ù¿½’‡?~ª¥"ržO×ýEŽwÉ¥×áaÉÃ¥øÝËïI×,¨ˆHg¡"’"ÉeWÃñw³yxÙ9ç¥q áã:üðq¥Â‡Hz$q%p'0*yx3ðS`s.ž©±‰ˆd’ˆH ˜ÙüæaÝðwšzÚ9÷QšÇÐPóÑ>4ó!’&f6ø%û6œØ ü7ð[ç\}Æ&"Ò (€ˆt03 |ÿß×nà1çÜ®4¡i“ÁþV»/¤s "Ç#3»ø1pFòP9~ù½s®&céD@D:ˆ™0¿Þ`ðL: î7Ž pû:œ_­ð!’Zf6ø pnòP ð¿À/ҵͶˆÈÑBD¤$w·¹8¿Þãàµtïj“œùx»ß~͇v»I3û ð#öýâ¡ø#ðŸéžù9Z(€ˆ´“™uǯ³(âÀ³Î¹eGCÍǵì«ùPøI3›Ž<¦%ÕsñƒÇŽŒ LDä( "ÒÉbók®@%ð¨snkÆ ‚s‘”2³sðƒÇ9ÉCõÀŸðƒÇ¶Œ LDä(¢"r„Ìl4þ›!`;ðˆs®"ã0à.`nR7e‘Žefgw'Eñk­~ìœÛ’©q‰ˆ@DŽ€™MÎÇo.¸xÊ9ËÀ8 ø=pûÂÇãé‡È±*ùoýû´ ?qÎ}’©q‰ˆÍ@DC+;]½¼”îbó&~| ð€ÙιG24‘cŠ™ ü€}Á#< ü‡sn}Æ&"r P9Dɦ.NÃßéêι738ž;ÿ/9–¯:çÊÔXDŽf6øÿi<~äœ[—±‰ˆC@D™uÁ/6Š¿ÔéiçÜò Žç?ð—…8àkι?ej,"Ç3;ÆãÂä¡p?p§s®4Sã9)€ˆ„™unNÀßñæ1ç܆ ŽçÛÀÿM~ûoι?fj,"G»dÁ£åŒÇsk360‘c˜ˆÈ˜Y/üÝ¥záo³ûp&÷ø7³o¿J~û}çÜ/35‘£™™Í~ LIŠá—¯ÉØÀDDŽ–¹ÚY‘ÎÍÌúáÏ|tö:çÊ38ž9À<ü·þÝ9÷“LEäh”ÜDâbà‡ÀÉÃü¥VÚÕJD$M@DZaf€\`ð€s®*ƒã¹˜>~æœûA¦Æ"r´1³ ~ ×÷1ÉÃUÀ_«s¹ˆHz)€È1'ù[ÎIYYY#‰„—H$>VjŸ3ŠßQ<Ø‚¿ìª6Uã=„ñ\ <_9羓©±ˆMÌ,Œÿ‹„;€QÉÃ{ß¿Í䌦ˆÈñLDŽ)ffÁ`ðŠp8|ê¤I“‚ñxÜyñx¼.?z°%fv2p5~}Ô:ü‚óh:ÆÞÆxΞÃC÷·d°çˆÈQÁ̲€/à/µ™<¼¸ øçÜÞLMDD@ä’ —…ÃáÓn»í¶`~~>ñxœ^xÁ{ÿý÷ñ<ïIç\Iן \‰?Ó°ø‹s.ž¶7Ðr rLH†KÂápá­·Þ,((hqÎûï¿Ï³Ï>ë<Ï{Ê9·l¿ëO®@1ðŒsÎKËà[af“€×ð àŸ®<Ô%d"Ç3ë |-ùè—<¼ø/`s®>Sc‘–@䨗 Ÿ ƒão½õÖàÀÛ<÷Ã?äÉ'Ÿô<Ï{Ö9W”¼¾iøX <›ÉeNfvð¼\¤P"-%ëµ¾| ¦`ð[`®s.’™‘‰ˆÈ(€ÈQ->. ƒçÌ™ öè£âyÞF2>úÇë€ó>DÀÌø£ió@øðcçÜ¢LMDDŽŒf@䨇?œ}Ë-·† Öì¹x<Ά ˆF£Œ9’ììì6_gùòå<úè£Îó¼—œsï§xØ­2³nÀëÀ$`30Í9·1cé,Ì,¿¶ã[À‰ÉÃÕø 9ãœÛ”©±‰ˆHûhDŽ:ápxm„ŠŠ zè!>ùÄo÷Ñ»wofÍšEÖ¼û;v,€=ú裘Y¤¡0=]’ý žÄ;ó>äxff'_¾ ôNÞß<ðι=™›ˆˆt Í€ÈQÅÌÎ …BŸž={v`ĈÍžÛ³góæÍcäÈ‘\tÑEìÝ»—?ÿùϾñoÚ|ÝdazÂó¼ùιm©~и´äÏÀµ@0Ý9÷a:î-ÒÙ˜Ù)À7/9ÉÃk€ÿÐNp""ÇŽ¶?‘‰t2ápøÓ¡PèÓ³fÍj3|œrÊ)\~ùåtéÒ…‚‚.ºè"vîÜÉž=þ¥éĉ),,´p8|^*ßÃ~~…>¢ÀÕ r<2³©fö°ø ~øX‚DF;çæ)|ˆˆ[@䨇§zžwî¬Y³£Fjñ|yy9ÕÕÕTVV’ÜÙ ðëA²²²èÖ­ÛAï1mÚ´@,–즜RföüßözÀ,çÜË©¾§Hgaf]Íì_ÌlþÎox8Ç97Ñ9÷€s.‘ÑŠˆHJ(€H§‡ÏòêWsµ)z?S€Gñ?€ÍsÎý{*î#²?3kf?ËÎÎ^•••õ¡™]nfvð+ÛuÏ,3»ÚÌÞ7áÿݸ8Ù9÷Ÿ ""Çí‚%’™M—\sÍ5VXXØì¹ššæÍ›Gmm-ßýîw[]^µqãF,XÀ Aƒøâ¿xÀ%X7ndþüùðv,{££ß ø·€žÀSøEçZß.)cfÀëÂáðͱXlä Aƒ"ãÆË®ªªrï¼óNÂó¼_'‰KÁ}óñ‹ÉÿèŸ<\<üÖ9·¢£ï)""GétÌl| ¸´­ð1þ|rrrøä“O8餓¸îºë…Z®&ܸq#÷Ýw h3„4 ïÇb±”‚›Ù@àŸÀ àÀÚÕGR!ùáÿšp8<;‹ïׯ_d„ 9………ôêÕ«ñ¼ÒÒRî¾ûî„çy×9çþÒA÷>øð ¡ûç'À]ÀÝι²Ž¸ˆˆý@¤S1³q@àóW]u•?¾Ùs á£gÏžÜpà lذ‡zˆáÇsà 7´B6oÞÌ‚ ¸øâ‹™8qb³ç’³$žçyÄb±—Rô~ºáÏ|ŒVSµäD:’™õ> …®O$3»ví?ýôÓ³'NœÈ€Ú¼î•W^aáÂ…ëc±Ø(çœ×找wWàzü¦ÿÀÞ~ <霋Ék‹ˆÈ±KD: 3;-\yÙe—ÙgœÑ칺º:æÏŸO^^7ÝtScØX·n<ðC‡å†nhu–£ªªªÅ6¼›7ofþüù^"‘XÇ_LÑû ÏÛ€)êr.ÁÌr€‹B¡Ð=Ï»0;;Û7.rss¹é¦›Z„Œ†2dÈVŸßß¶mÛ˜;wn"‘H,NUø0³»€¯µÀ çÜû©º—ûÌ,œ ¿Ì 9cÆŒ±ÓO?=tÒI' û5~øáøªU«þǯ?„ûg—·ŸÁßÉ ünå÷÷8çvö DD丣"gf§«Z ‘H„ ¸ùæ›Û  õýû÷?àyÛ¶mcÞ¼y‰X,¶,‘H<ëRôÀÌî~$€+sϤâ>rä’è'€Àv`9ðÖ‘.IJ3Ì ƒsœs=FŽ™(,,Ì:í´Ó©¿Í¬\¹’‡~¸Îó¼¾míþff#9À-@¿äáð"þ2«×RõïHDDŽM ’Qf6:\}ñŦL™Ò칆ð±uëV¾ýío7+¢mMÓ¢ó›o¾¹EMH“ð±<‘H<“Âðq ðþ6×ÿÇ9÷ûTÜGŽ\²/ųøÁc‹€Ëœs[Ó;ª}ÌìTàš`08Ûó¼!ƒ ŠMš4)ëôÓO'''ç ×———³zõjvìØAÏž=™2e ÙÙÙ-ÎK$üä'?‰F"‘›œs7¹˜Žß»ãsì›íØ‚¿›Õ]ιÍí§""rúè#Î;ï¼fý?vìØÁܹsÓ>¦r€_9羓ŠûHû˜Ù…Àïßáoð1þ.ewWáÏ‚œ“æ1 ®ÈÊÊúb4ß§OŸègœ‘5a„5LmY´h‹/æ“O>áÄO¤G¬\¹’>}úpûí··Úç¯ý«W\\üR,ûœ™ Àï×ñU`Hòx¿[ùSιxG¼_9~)€HF˜ÙÈ@ pýùçŸoçœsN³ŠÙh4Êý÷ßO<ç–[n¡ººšyóæ‘““Ü9sùÃXƒ]»v1wîÜD$)I$O§0|ŒÄßn·ðpMgZÊ#û$woªÛÿÏÇÌÂÀJ`$04Õ›˜Yoàâp8üåX,vvïÞ½ëÆŸ;nÜ8úöí{ÐëëëëY±b«V­âºë®ãÉ'ŸdõêÕ|ó›ß$//€õë×s÷ÝwsÝu×qúé§·xuëÖqÏ=÷xιWñk;ŠI¶á×vÜíœÛÔAoYDD„–û–ФX2|\7sæÌáüÙ €[n¹…ììl²³³¹õÖ[™?>óçÏ?¬Ò$|¬NñÌGü%=}ðCÈM —s®¦ã13+ ý€ fÖ¸8 }ÉÌfæææÆ sÆŽËСCsv}<ç£>¢¨¨ˆÕ«WÓ£GÆG<§°°%K–PUUÕ@†NNNÛ¶mk5€ >œÜÜÜ@MMÍù€^þ<£-tED$@$­ÌlD2|¦OŸÞbæãå—_fæÌ™|ùË_nv]Ÿ>}˜3góçÏgÞ¼yÌ™3‡=zp eeeÌ›7/‰D>N$MU H®—ÿ30Ø \KŽ$µ’…é…@ XÛ¯› œ ¿® ‡ÃÑ£G'Nœ1bDð`ÛæzžÇÚµk)..fÅŠD£QrssùÊW¾Â AƒÏ9r$yyyQPPÀöíÛ‰D"ôëׯÕ×63ÆÇ|°9‹ÍpÎuØûiˆ´[²Ù^IK›¾Ílx ¸~ÆŒ-Âøý:–-[Fii)·ÜrK‹z>}ú´˜ i+„”••1wîÜD]]ÝšD"ñ—ÏFü¸¨Ãßñj{ ï%©õ=`ðëö6Œlºmn0¼ È=z4&L8¤msslÚ´‰ââb–/_N"‘`̘1ÜtÓMÔÔÔðÈ#Ð¥K—fׯŽ˲eË(,,¤¨¨ˆ>ø€±cÇ2nܸ6ïUXXÈ;ï¼3ÿï°ˆˆHJ©DŽˆ™cñwjX6òŠsîÝ6Îf{î¹ÁóÎ;¯Í_÷îÚµ«±çG[EçÌ›7€Ûn»­År¬ŠŠ þð‡?ÄkjjÖ%‰Çs‰#z“‡ÀÌnÀ_ºr½sîÑTÝKRË̦¯¥À¸¶–iÂ뜮7³€'t’7a„ðÉ'ŸL8>èõÛ·o§¸¸˜ââbª««=z4………œtÒI;»Åb1î¼óN¦M›Æg>ó™f×oܸ‘¹sç‡9ùä“™2e Ç?è}ñ‹_ÔWTT|×9÷¿Gò¾EDD•f@äH„¿KÎvüß'¶ubCø8묳>úõë×b©Õþ£GÜzë­¼ûî»-J2|$êêê6&g>R>&⯕ø©ÂÇÑËÌΞʀ‹$|˜Yßp8ü²™:thl„ YcÆŒ!''ç #‘ï¾û.ÅÅÅìÞ½›^½zQQQÁ÷¾÷½VëÂá0cÆŒaÙ²e-È!CèÙ³''Ÿ|2—]vÙ!ÿ”SNÉ^¼xñ¹€ˆˆˆ¤TË=EÍ‹À/œs €¢¶N2³@`ÖÔ©SƒŸûÜçš…x}NûÞ÷¾g_þò—³&NœxОEEE,\¸@ @ii)gžy&wÜq·Ür Î9Ö­[׿µ§Ÿ~:;wîdëÖæíJj:JJJH$=8ЂÁàÄC¾@DDä)€ÈqÎUJ]E8¾|Ò¤IÁ /¼°ÅÌÇSO=Åý÷ßß,„4lÁ pûí·F™7o^«!¤©ŠŠ æÎ¯««+F£¦xæ#?tËÐŽWG-3;ÙÀ…ι•íx­›§OŸžÕ½{÷C¾fçμñÆn¾ùfÎ<óLºvíJ¯^½7pà@fÏžÍöíÛ¹ï¾ûxøá‡©­­eΜ9»û4Ô{¼õÖ[-^£ªªŠ?ýéOñšššOR½ì ÀÌ®¾‚ßúFç\i*ï'©‘lù&~¯;gf÷{ô<œ× ±úúÖ7[¾|9¯¼òJ‹ãùùùôï߿ՠpúé§ãœ£¤¤¤Í{RQQAiii‹ç®½öZ.¹ä’ƒŽ»²²’7Þxƒ¢¢"‹Çã¿:è"""í¤")Ç—¼óÎ;qÏk}…ÒàÁƒ™3g;wîdíÚµÜxã-¶íÑ£·ÝvŸûÜçšo•••[c±ØC©nšff§w'¿ý‘sîåTÞORj*ßõûÀâVŸ>ÔsÎŃÁà²M›Zo^XXÈÎ;Ù¶m[³ãñxœ‚‚V®\Ù¢*//#FpãÄO¤gÏž­žSPPÐâßRƒÚÚZ-ZÄܹs#¿øÅ/Üo¼QꜻÁ9·ð`ïUDD¤½´ –¤Úeee“^zé¥ÀE]Ôjà8p sæÌaÁ‚<ôÐCÍf@ì¿PMM óæÍKTVVnOSøÈº¯w¦ò~’rïâÏdÈ¡¯_b±ØóË—/?mÆŒ-*ÏGŽI×®])**"??Ÿõë×STTÄŠ+‡ÃÄb1V­ZEaaa³ë yâ‰'¨¨¨hµç™qÕUWѳçÁ'kb±+W®déÒ¥±5kÖÀÏópÎ=F?<œ÷*""Òê"íffãÏÓFä6¼³Ï?ÿ|;çœsÚ܆wÛ¶m,X°€îÝ»·BÔÔÔð§?ý)¾wïÞ±Xì~ç\Ë­´:˜™= \‹ßé|‚s®õuerÜJ.ëZó­o}‹N8¡ÅóÏ<ó Ë–-# ‹Å3f ãÆcøðáÌ›7ÜÜ\fÍšÕìšúúzî¼óNÎ?ÿ|¦M›vØcò<õë׳dÉ’DII‰óÿùÏ·9ØÔŽ;X¾|¹[´hQ¤ªª*+ .ŒÇã÷O9ç¼µˆˆH)€HÚ$Cȃo½fs3 IDATõÖžçµÚürà 74;‰D¸ûî»eeeå±Xì^ç\Ëé‘–ì÷ñ <ãœûmªï)G½G*++ÿkË–- 8°ÙfFaa!‹/æ’K.iÖD3//‘#G²lÙ²$//¯Í›íÝ»—ââb-Z)//Ï …BKb±ØƒÀ#±Xlg‡¾3‘¢"GÄÌ&ûïñy¾™Ÿüïלsoïs®ÔÌ\¸páM@›!¤©†ð±sçδ…¤Ÿc¼`Y  …6 Ý?€€¿ ëÿøk׮夓NjöÜ%—\B×®]zƒÚÚZJJJX¼xqdóæÍÙÁ`p]"‘xx ®ï¨7"""’* r¤¶Ú²ó“¶žpÎmL†=Ï ï¿½nSÑh”{ï½7±sçÎ=ÉðÑzW¶ff3ÿ8àçÜŽtÜWŽ>f6 ¸¸8+‹Ù’%K¸ð ›Ír€_çÔÐ pÿÒ·oß6ïQ__ÏÊ•+)..Ž®Y³& wÆãñûûâñøGþ¦DDDRHDŽˆsn °¥×o4³eï¾ûîD ÕkÑh” $¶nÝZ‘æðѸ“†?8çþ–ŽûÊÑÁÌÀ$üÀÏãÏ’5HïÖÕÕ]ZZ>|x‹ë/»ì².«jÇY³f ÅÅÅÑ’’’€™Uzž÷gçÜcñxü§- EDä(¥mx%#Ìlp‰Ñ£GsõÕW³³ýÚÝ&á£2‹Ý㜫NãØ¶Ü]¿ånZ‚t^f– œ\œ|ôoòt xxxÚ9·+¿8~üøó¯¸âŠÃÚiÐó<6mÚÄ’%KEEEÎó¼(ðL"‘xm›+""ÇI;3ë_S‘‹ßqú½p8|]0ì5a„@÷îÝmùòå‰;wV%ÃGÚvð1³Kgð?Tžåœ[œ®{KçbfñÃÆ%À  éVT•ÀËÀsÀóι=û]{MVVÖCwÜqG8'§E_Âfœslܸ‘¢¢"¯¸¸8F1³ç‰ÄƒÀKéØíMDD$@$­Ì,Ü À_Âu¯s.ž<>:++«0dÇb±]‰Dâ5ç\MÇ– ”ÀŸ;羟®{Kç`fcØ:Κn’P ¼<ßt³Í``fÁp8¼nÚ´i'žwÞy­ž³mÛ6ŠŠŠXºti´ºº: ߌÇã÷áÏ¢¤mÆODD$Ý@$­ÌìóÀx ˜çœÛ›á!52³ÿ¾ lNMgø‘ÌHnµ<?p\ jò´,ÅÏK§îÂÌ.6³g®¹æšÀ¸qã(++£¸¸˜¥K—FvïÞ‡?ŒÅb €¿¨Á¥ˆˆ/@$mÌlþo—=àaçܺ ©‘™,ÂÀ¥Î¹ç2<$I3ë\ˆÿwñ [“§kñë9žžsÎmkç½¾þ·   žH$ÜöíÛ»„ÃáÕÉÐñ¨snS{^_DDäh¤"iafƒ€Ùø;¯½âœ{7³#ÚÇÌ x8xÂ9wU†‡$(¹¼ï,à³øc<-—V5Ìrü££k.Ìl(0 ˆà‡š•ùú"""GI93ëŠ_tÞøx¬3m!jfתð—^µÙÃDŽfv"ûÇgðÿî5ð€ØW@¾,ý#9~©ˆ¤T²gÂøwOu²ð~”üö G'3ë|?p\œ²ß);ñ È_ŸەÞŠˆˆHIµ™À Š?óÑÙ¶ ŒÂG¿ÏìPäp˜Ùpü¿_3iYË‘Š€Wñ—W½ëœóÒ>HiADRÆÌN¦x¦³ýÖÙ̲€†­vïLg¿9|É¥|Sðw¬ººß);ðg9ž^Ý¿7‡ˆˆˆt ’fÖ¸¿Ø÷çÜŠ ©5·â÷üø˜›á±È~’Ë÷Æá×r|¿<Üä”züÍ^^î¤ÇDDDd? ÒáÌ, \ d€×2;¢–’;_}=ùíÏœsõ™øÌlû–UÍúîwÊÇøÈ_ÞtÎÕ¦w„"""Ò^ ’ ù@5ðd']{ÿià$ x Ãc9n™Yoü Ñ:FìwJðûf9Ö§w„"""ÒÑ@¤C%úMÀ¯ûxª×U|)ùõu›üú\FGqŒ0³ü¥TÓ“‘ûR¼É¾À±2ã‘ÎEDÚÍÌÆñë>žìÄu ¦$¿¾žÑQ¥Ì¬ûǹÀèýN‰ÿdß,Çιx‡("""˜ˆ´Kr£K“ßvÚºf– O~»4“c9Z$ÿŒ?8fcðû»4h(#ùxË9WîqŠˆˆÈÑADŽX²î£¡ßG)»î£Á@üÏ{œså™LgdfÝÙ8¦ãïZhrŠ,Ã_Võ:~àPḈˆˆi ðë>ªéüu z%¿îÉè(:3ëœÍ¾%Uà~§­ÀŸÝx¦kw‡("""Ç9"f6˜Dçï÷±¿ºä×.E™Ù `*pVòëé´ «ñÃÆøÇw¤sŒ"""rìR‘Ö\¢ÓÐïãÎ^÷±ŸO’_óÍ,ïX¯U0³ 0?hL¦ƒ[9u~àxxÝ9·5MC‘㌈33à2ü>[ñC~ÔpΕ™Y)0¿ úÙŒ¨ƒ%‹ì'³o†c -ÿÅñ ðßï*pˆˆˆHº(€Èá: ©(þ–»‰ çHüø.ð-ŽòbfÀOÑ|9Õþÿ®+€÷Ø8>pÎÕ¤sœ"""" Ì9—é1ÈQ"Ùpn~½À3ι£rÛd ÄjüYœo8ç~—á!3€_wsFòë$ZvØHrf#ùµä(Ù @DDDŽš‘CbfYÀ•øácÕÑ>œsŸ˜Ù÷€ß¿1³à¿;ˇt3 #€qø3…ø;S håô(PŒ?Ãñ~MΖ4 UDDDä°iD‰™] L*?:çêrI§gfÿ ükòÛw€:çÒVÓ’¬§œœŒ_,^œtmå’8°Xœ|,–9ç¢i°ˆˆˆHP‘ƒJn¹{-þ–»8ç6dxHÆÌ¾ üŠ}…Ú«§ñÉ?s»Úùúyø!cpò1?p4<ÚÚ¸¿÷Fþ G°Ô9WÛžñˆˆˆˆdšˆPrËÝÁÿ ü¶sîµ ©Ã™Ù@à߀›¼ýžÞl¶Ûø3Må=›Jsû‘c–ˆ´ÉÌ&1`®s®,ÃCJ+3ë_—Ñ(ò~­œê€=øA£ák9~Ÿ”MÇz³C‘á]°¤UfÖ˜™üöåã-|8ç*𷱑ÒËKä“Üör Œ_ŸðafG$""""Ç iÍ9øÔõø µNODDDD:„ˆ4“ì¶=5ùíóιÊLŽGDDDDŽ- ÒÈÌÂÀøÝΗ;çJ2<$9Æ(€HS3¾øÝÎ_ÈðXDDDDä¤"˜ÙPàSø[Ê>㜫Ëè€DDDD䘤" K¯. Xâœ[—á!‰ˆˆˆÈ1JDÎzã7Ð{%Ãc‘c˜ÈqÎ̆gà/½zÞ9ÉðDDDDä¦rK.½º éՇιµ’ˆˆˆˆã@ŽoŸaßÒ«¿gx,""""rP9N™Ù `ròÛç´ôJDDDDÒAä8dfàbü¥WEÚõJDDDDÒEäø4 èÔ¢¥W""""’F¡LàXbfןº `=°X¬ì Íý̬/~xÁ9W“ÉñˆˆˆˆÈñE¤ƒ˜ÙíÀïpŠgfëü@Òðuµs.š†!6ÈÆ/:/wΕ¤ñ¾"""""˜s.Óc8ê™Y` ÐuðàÁÜ|óÍlݺ•Õ«W³zõjvîÜy ËcÀü@R¬–ëœs‰7d9çjSñú"""""mQéfvÉ⯾ú*Ó¦M£¢¢‚²²2jkk©¯¯§ººšmÛ¶QRR¢E‹X¾|9åååzÙz`ÍgKV¥Nh""""r”Ré ˯òòòصkÎ9<ÏköpÎQ[[Kee%µµµÔÕÕQYYIyy9‹-âí·ßfÕªUD"Ü·š}³$ _—:çv§ømŠˆˆˆˆ´›H0³ÿ¾1~üxÞ{ï=¶n)ãšKÊ ù=9mìP&O=…)gŸLVV¨E ñ< q–¤¾¾žšššÆ`RTTÄk¯½ÆêÕ«ÏmCøð½T-Ýi/¡wŒQ#GŽ`Íê-¬_»Þ}ºñÆëËxü‘·¨¬¨%Ò§ow†œØSÆ bÒ§F2ùì“ÈÊ  …èÞ½;yyyôîÝ»1lLž<™Ù³g‰D¨ªª¢²²’Ý»wSTTÄsÏ=ǶmÛÆ|'ùõiÿ ˆˆˆˆˆŽ1öË7Ò%7› .™ÜxB}}Œ];÷²{ç^ví¨àWKxôÁ·ˆEãde‡éÝ'¡#ò9uÌ &NÁØÂ!€?;‡ …BtéÒ…¾}û2bÄ&MšÄ­·ÞJ8féÒ¥üèG?bÆ ŸCDDDDD:)vJî(5 šRzöìJ$oz'ä÷â„ü^¸±û®¯©®cû¶=ìÞUAÙ®Jž~b÷Î{ ç ·k6ùù=:â 'œÈyŽ% H$pΑH$¨¯¯'‹1qâĆ¢5u""""Òi)€´ß‰@`Ô¨Qlܰ‹î½»Q‰µž…è?¸ý÷k|*K°§¼ŠòÝ”ï®bÍG»xû˜~Þ©ƒÖìe<ÏcûöíìÝ»·áзÖÉ$öÕð 3 »wWÓo`êêãm^t0y=óÈë™Çà‘P]QË›/-¦K—,jjj¨­­%;;›ÜÜ\âñ8fÖ´×ˆš ŠˆˆˆH§¥Ò~£z÷îMïÞ½¨©‰087›ÚúX‡Ü`Ëæ2 îøõ ½{÷¦¾¾3k|4 +:ä¦""""") Ò~#aßò«òòj ¡ìlêê[ß ×5þ`­žB<§|Ç^vlÞMMe-çÎ<€PÈßÊ7;;3#✣¬¬¬áRé´@Ú¯ÙX[6—‡!¦¶>~XážçQ[QCÅ®JªÊªhèч3våååäææ6‘Ý»w³gÏb±ÆÙ-Á‘NK¤ýšõÙ°a'YÙÙÄ?` ˆ.âqHu‘ª:ê«êû„ÂáfgÑ qùU$! RVVÖtùU°µÃÞ™ˆˆˆˆHSi‡ä¼'¾%XëVo'»k±DË®åž/#‰DIDb$¢ûBJ0$H°Åu3òûwoü>++ ð»§×××7+@wjm/""""˜Hû Åï<Þ8òÉ–=„C!uQðÀy^#þcĈ”•Õ ITEšÄ |d?îz““C8& """"rTQiŸQtëÖ €êê(á¬ð/:4û¶Ç:¼Ï¾£f„B!‚Á 5558çØµkWÃÓ*@‘NM¤}ší€‰Ä€Yá6–Uµ±åîAo2Ê UUU„B!œsèeeeÄãu$š‘NM¤}šõÙ¹£ÊŸýhOx+!¥` _€Þ0Ëâyñxœ½{÷6]~µÛ9·£åÕ"""""‡Hû4Û‚wÇŽ*ÂmÍ~¡@ÀèÑ#›DŸåpÎáœ#ãyÛ·oo8U³""""Òé)€¡ä¼Caß È¦M{Èêú}º÷ÈÆ "‘@€úúzrrrÆÐtDõ""""Òé)€¹¡@šÌ€l«n¥ý ?’NÈÏöm» ùd‰D3cÛ¶m §jDDDDD:=#7 0lØ0¢1ð!ôõ8ûuUUUäää`fƒA*++šî€¥"""""žÈ‘0dÈÆ%QßøÖ§Ù¼y/ÿ|w#­ÚIEe”ëHo9[2p€?’““ƒsŽh4J(¢¬¬Œ]»v5Ýke;Þ‹ˆˆˆˆHZ(€¹f[ð68°;—_9çN¥®.FqÑvŠ‹·³m{ ^âð·ÇêÓןQ ‡ÃxžG  ‘HP[[ÛtùÕvçÜîv½‘4P9r'žxb«O:çÈÎ2éŒ&LÌÇó<>ù¤Š%î`ãÆ*jkc½A0dääñ<¯ÙqÏó0³¦;`­j×;I#÷põÛo¿ÍŽ;ÈÏÏoq‚sÍg< èJÿþCñ<ººË–•±fueåõx^ËÙ‘¼Ü`‹×¿îd¿ôiföwàUàUç܇í~w""""") räžîøøã{>œÉ“'sÑE1}út Oj-@dg™8±/ãÇ÷Æó<6m¬fÅÊ=lßVO}}€ž½Â-^# ‹Å03¶nÝÚp8ÌL>0³uÀËÀKÀëιš}ç"""""GÈÚú€,gf#€ç€ÑM:”éÓ§óÙÏ~–sÎ9‡p8ŒsÏóøh8§¢"ŠdSPÝìù†¥W[¶lák_ûñxœ¯ýëlܸ‘×_êêêý‡–{¹À“Î9oÿ“DDDDDÒA¤Ì,˜\|Üôù.]ºð©O}ŠóÏ?Ÿ‹.ºˆþýûRië‘H$X·n6là‡?ü!=öÓ§O'‰ðþûïóüƒ·Þz‹eË–µ6ó7à2ç\|ÿ'DDDDDRM¤™ÙÉø³ ç¶uÎÉ'ŸÌÌ™39ûì³™ùäÞxã ^ýu^~ùå¦[öþØ9÷Sñ39`f½¾J²;zAA_ýêW13^}õU.\Ø4лwoÎ<óLf̘ÁôéÓÉËË;hY·nõõõ<ýôÓ<óÌ3deeqÝu×ñË_þò€c\¸p!³fÍjX¢µÎ97ò€ˆˆˆˆˆ¤€ŠÐÛÉÌn~ôÉÕW¿úUfÏžM,Ãó<.¸à~ÿûßóøã3mÚ4/^Lyy9ååå¼ð ¼ð ƒAÆǹçžËäÉ“=zt«÷«¯¯`Ë–-€_ ž““Cuu5]ºt! ¶¸&óÁ0eÊþþ÷¿ 73sJŸ""""’f í`fÿ üwò¿¹ä’KøÁ~@vv6‘H¤Ù¹“&MâþûïgÈ!Ìž=›M›6ñÏþ“ââbJKKI$|øá‡|ø¡¿ƒîàÁƒ™6mS§Ne„ „B!êëëñ<]»vQTT@,cìØ±”••~ÃÂÜÜ\òòò…Blذû￟þýû7Ý*8 L2³­øM iøq‰ˆˆˆˆh Ö‘2³iÀ›@`üøñüìg?cÒ¤Ilݺ•X¬õ&ƒßþö·yï½÷¸úê«9ûì³éÖ­¡Pˆ½{÷òᇲtéRV¬XÑ"¼4²wíÚ•@ À[o½Eee%S§Nå7¿ùMkããÍ7ߤ¼¼œÜÜ\b±%%%<ñÄeÀד§&€]Àü0RÞ?‘Ö(€!3{¸¼[·n¬ZµŠììlvîÜI]]]«×ÔÕÕñ£ýˆW_}•O<‘©S§RXXHNN¡Pˆ@ @"‘àã?féÒ¥”””P^Þv˜0a¿ýíoÉÉÉiv¼ººšÇ{Œ^½zѵkW‰YYYüãÿॗ^ØÜÑÆËV«sîÏDDDDDä`@Ž™íú|ÿûßç[ßúYYYêëëÙ»w/ÕÕÕ$­¯lZ¸p!wß}7+V¬  2xð` Dß¾}ÉËË#öF£Q6oÞ̆ رcÑh€~ýúñ¥/}‰+¯¼²Åk/Y²„õë× …ˆD"dggÓ½{w"‘ .ä•W^(~v€·÷‰sîívý€DDDDDZ¡#`fôÈËË£[·nÏÅãqúõëG~~>ÕÕÕÔÔÔPSSÓl¬©S§2uêT6lØÀ;ï¼ÓÞ{。% Ñ¿Î<óLÆÏÙgŸÍ°aÃZŒ)‘Hðì³Ï’——‡™‰D…B$ <Ï£K—.MgSÊðöÖáFDDDDä€@Ž€sΙÙ ïÖ­[{žG8Æó<‚Á ¹¹¹äæær 'P[[ÛHÂȰaÃ6l7Þx#à‡ˆššªªªpÎÑ­[7ºvíÚêÎVMmÚ´‰e˖ѵkWªªª¿n¤¾¾žp8L"‘`Ó¦M¬X±¢á’ZyXìœ[×¾ŸŽˆˆˆˆHÛ@ƒ™àÏìúnÚ´©Õs¶àuÎ …ÈÍÍ%''‡~ýúQWW×"ŒƒAºwïN÷îÝ[ë`Þª… ¨©©Á̃Äb1ºtéB4åÝwßåå—_n˜]yXºßËÔ s»ë"""""r˜@Q²Ëù?I.½êÖ®]ÛêùιÆf‚ Ûçdee‘M—.]ÃHUU555mÖŒ´¦¢¢‚’’²²²Ø¹sgc¡y,ÃÌÈÊÊ¢¦¦†_|‘•+W6\ö*ðàþ/¼îœ«?䛋ˆˆˆˆ!¡"3û;0³OŸ>Äãq***Ÿ›1c³fÍâÒK/m\‚ÕÚ£¡Ãó<]ºt!  ‰ÇãD£ÑÆ0ÒÖV¾+V¬ 77—ÒÒRjkkqÎ ‰D"deeÇÙµkO<ñ»víˆ €Ö Ëë€s‘VžéP ‡ÀÌn8í´ÓøÍo~C¿~ýØ´i÷ÜsÏ?ÿ|ãÌE=¸æšk¸á†(,,l5x´öƒäåå‘››K<'‹áœ£¢¢¢Ù2­X,ÆöíÛ‰F£¬Y³†D"A0Ä9G"‘ FY¾|9Ï?ÿ|CˆÙüØÜÆÛ‹8çžLýOQDDDDDä€Ìì2à[À üÔSO‘ŸŸO}}=‘H„œœºuëÆë¯¿Î]wÝÅÆ¯=õÔS¹þúë¹òÊ+éÕ«W‹ÐQSSÃúõëéß¿?]»vm\®•M·nÝèÞ½;@€½{÷FÙ²e fÆÒ¥K)//o¬-‰F£„B!œsÔÕÕñÒK/5vSjð6#À+ιêÔüEDDDDöQi…™õþ¸±áØ”)SøÎw¾C]]C† !++‹êêjêëë‰ÇãäççFyì±Ç¸ï¾û¨­õ?ógeeqÞyçqíµ×rÎ9ç4§žzŠåË—3aÂÆŽKïÞ½éÒ¥KcHéÚµ+Ý»wgÀ€ìÞ½›x ±KzCŸP(D<§¼¼œÇ{Œä®\ à1àoÀÁþ€Ë7œsÑŽý)Šˆˆˆˆ´¤²3›Ü èÛ·/×^{-ßüæ7éÙ³'ÕÕÕ,]º”mÛ¶1tèPN8áöìÙC]]]ãÎSùùù”””ð‡?ü>Ø·ãm~~>W^y%W]u'žx"¡Pˆúúz6mÚDQQ»wïfèС <˜=zsŽSO=•+V°páÂf³( 3 «W¯æ¯ýkCöJüðTro÷à=ç\ü gŠˆˆˆˆt&Ìì'À÷ÀôéÓùùÏÞ8ËP__O÷îÝ)((  ²~ýzŠ‹‹éÝ»7Äb1öìÙÓ¸ãÕ°aÇÃ<ùä“Üu×] áLš4‰+®¸‚ .¸€.]º••E4eëÖ­¬ZµŠ`0ÈäÉ“‰Åb 0€åË—³eËvïÞÝØÛ#óÖ[oñÊ+¯4lÛ»ø°çÞîÇÀ§¿""""’F Ifv1ðøý8n¿ývn»í¶ÆúM±XŒx<ÎÀéÛ·/555,]º”ÊÊJ Dnn.555¬[·ŽÏ|æ3tíÚ3cñâÅÌŸ?Ÿ¿ýío…å¹¹¹L›6¯|å+Œ9ç]ºt!‘H‹Å¨««£G,[¶Œªª**++‰F£TWWóØcññǃ¿ÌêEàüåWâðƒÇÇ)ûaŠˆˆˆˆ´á¸ fÖ¸¸°“N:‰_ÿúל|òÉ­¦H$Bnn.#FŒ ;;›ÒÒRV®\ɶmÛ¨¯¯çöÛo'77—ÚÚÚÆÝ²jjjxþùçùãÿÈêÕ«ÈËËã‰'žà„Nh¶Ì üz’’Àÿkïþ~«,ŽŸþ8S@;`'´=†YÚlE¤9… IDAT4Ñ#­Ê_À¶èn]Ʋ›eË®txÃÍ’q5—Ì@BÈ &&%2«„â‘R¥H¢@Éj¡›mRK¡N<»x鉙uÂS#ßOrÒœ“÷œ¼ïÛ«oÞ磣£œ?žÝ»w3:: Ù2ºå«w7ÿ²iàHŒñâ-½‰’$IÒ< !ì~°råJ^|ñEššš¨¯¯/À×EÈ_Ô××3==MŒ‘ÚÚÚòNå@y(×\Œœ;wŽçž{ŽS§N±yófžþyªªª˜™™)ï†~éÒ%.^ÌšáðáÃìÙ³‡R©ÙÒºþ=KýèŽ1Îgx–$I’t[T¾ð } &„PìªÚÛÛyùå—ijj¢¯¯ÙÞsËäÎÇ… èíí¥X,’ÏçË VTTB ¢¢‚\.Ç¢E‹!PYYIww7ýýýœ={–W^y…ÁÁAjjj( „ T*±k×.öíÛ7/ïÆæqZ£d»_þÆ7I’$Iº…ªúX0 °fÍN:EMM ---<ñÄ|ôÑGìß¿Ÿ|>σ>H±XäêÕ«7ý±ññqNœ8AUUccc ”‡h566²dÉr¹\yùµk×xï½÷¸ÿþûyã7¸rå tvvR(ذa1Fº»»ùôÓO!FµèºÉiDà0|ýïp!ÆøusC$I’¤ÛÎ!X!t›š››Ùºu+555@6¾ž††¦§§yÿý÷9}ú4­­­´´´Ë嘜œ,½æí·ß&—˱eËJ¥SSS”J¥ò«ªªŠ‡zˆÊÊJúûûyë­·˜eÛ¶msOKŽ?–~Åé^"{êqîKŸ_ [v÷*0ãž’$Iú®2@Bx˜l8Su>Ÿç±Ç£½½B¡P>¦P(ÐØØHmm-gΜáèÑ£,Y²„5kÖP[[ËÀÀ]]]Üu×]<ûì³Äo©©)&&&x÷Ýwyê©§X½z5ccctvv255EŒ‘;v0<< Y`|´Ë€œþÉ»š_NÆ“Ü,I’$é[ºã „ð3`°üú{Ö®]KGGÍÍÍÄYºt)Åb‘ºº:FFF8~ü8~ø!¥R‰åË—óÌ3Ï”ó‹211Á¡C‡hjj¢½½ÉÉI^ýu&&&ˆ1cdûöíŒü‘l?/ºLM$Ÿ¼þ‰1Îgþ‡$I’ôa€\BXD¶ÖoÍ}ÞØØHGG<ò•••Ä©®®¦X,ÒÐÐ@>Ÿgtt”+Vðæ›orß}÷QWWÇôôt9>öïßϪU«xòÉ'™˜˜àÀ7ÄÇÇÌÎ;! ‹_×ÈærœÎÆ/¥¿#’$IÒ­g€|I!À€6²áOÜsÏ=lܸ‘Çü†U±î½÷^ŠÅ"µµµôõõqøðafffX¿~=ù|ž£GRWWÇÓO?ÍgŸ}FWW×®]#ÆÈìì,###¼ôÒK\¾|²ÿN GbŒÿYˆ{ I’$Ý.ÈÿBø1ð;` Èår<úè£åy"sO1–-[ƪU«( rìØ1†††xàظq#CCC:tˆÙÙÙòw>ùävîÜ97ôªØ ïÄ?_¨ë–$I’ndB?~ ü’lR8!ZZZØ´i­­­å¨Èår¬]»–•+W’Ëå!púôiz{{ËÇÄ9~ü8¯¾úêÜÊWçí@p<Æ8»P×*I’$ÝNÈ7BÈ?'{*²zîó††ÚÛÛo˜'°nÝ:ÆÇÇ9yòd9<&''Ù»w/½½½s_?ü è1žL{E’$IRZÈÿ)„°ž,D6“mhÈÝwß͆ hkkcñâÅÔÔÔÏçavv–žž^{íµ¹!W3À^²ygcŒ= u-’$IR*È·Bh~üÈTWW³nÝ:ÚÚÚX±b===õ$IÒÆ¹®ï)ò ˜Æ\^W’$Iw2D’$IR2 }’$I’îˆ$I’¤d I’$IÉ ’$I’’1@$I’$%c€H’$IJÆ‘$I’”Œ"I’$)D’$IR2ˆ$I’¤d I’$IÉ ’$I’’1@$I’$%c€H’$IJÆ‘$I’”Œ"I’$)D’$IR2ˆ$I’¤d I’$IÉ ’$I’’1@$I’$%c€H’$IJÆ‘$I’”Œ"I’$)D’$IR2ˆ$I’¤d I’$IÉ ’$I’’1@$I’$%c€H’$IJÆ‘$I’”Œ"I’$)D’$IR2ˆ$I’¤d I’$IÉ ’$I’’1@$I’$%c€H’$IJÆ‘$I’”Œ"I’$)D’$IR2ˆ$I’¤d I’$IÉ ’$I’’1@$I’$%c€H’$IJÆ‘$I’”Œ"I’$)D’$IR2ˆ$I’¤d I’$IÉ ’$I’’1@$I’$%c€H’$IJÆ‘$I’”Œ"I’$)D’$IR2ÿà›¶ƒ¾x”¼IEND®B`‚lasso-2.8.2/docs/lasso-book/figures/PaxHeaders/slo-sp-soap-5.svg0000644000000000000000000000013214404126130021422 xustar0030 mtime=1678814296.113811722 30 atime=1678814296.561814268 30 ctime=1678814323.205965813 lasso-2.8.2/docs/lasso-book/figures/slo-sp-soap-5.svg0000644000175000017500000122452314404126130024703 0ustar00bdauvergnebdauvergne00000000000000 image/svg+xml ServiceProvider 1 IdentityProvider 3 SOAP 1 HTTP 2 HTTP 5 HTTP HTTP 6 ServiceProvider 2 ServiceProvider 3 4 SOAP lasso-2.8.2/docs/lasso-book/figures/PaxHeaders/sso-brws-post-3.png0000644000000000000000000000013214404126123021774 xustar0030 mtime=1678814291.005782714 30 atime=1678814290.961782465 30 ctime=1678814323.165965586 lasso-2.8.2/docs/lasso-book/figures/sso-brws-post-3.png0000644000175000017500000012077714404126123025262 0ustar00bdauvergnebdauvergne00000000000000‰PNG  IHDR ¡™Ð< pHYsÊ&ó?tEXtSoftwarewww.inkscape.org›î< IDATxœìÝw”Uõ¹ÿñ÷sÊ4Ú Í‚¢¢€EEìŠ`C#&ñFMŒ%‰‰¦ÜhÌÏs“˜›Ü’˜bbr£ñj,1±€Ý¨\;VšRDP:SN{~ì½{g†i*Ÿ×Z³ÎÌ>ûìýY‹žó}й;""""""!ÑÕ ‘í‡é4 @DDDDD¤Ó(‘N£DDDDDD:é4 @DDDDD¤Ó(‘N£DDDDDD:é4 @DDDDD¤Ó(‘N£DDDDDD:é4 @DDDDD¤Ó(‘N£DDDDDD:é4 @DDDDD¤Ó(‘N£DDDDDD:é4 @DDDDD¤Ó(‘N£DDDDDD:é4 @DDDDD¤Ó(‘N£DDDDDD:é4 @DDDDD¤Ó(‘N£DDDDDD:‘NffUf¶»™ÕvõZ̬&\O®^‹|ò)i#3;ÊÌ~gfG´ò%û :nUM™Y73ëÝÌÓG„ëùlìü„™õ6³šÎXŸl?€ˆˆˆˆ´Ý¾ÁĈ®^H nV™YE+Ïß XüG‡­H¶K©®^€ˆˆˆˆt-wŸXW¯C¶ @DDDD:™¥€Ã]wÇ[ñš¡ÀA@0xÆÝ %çôzoIàH` °xÒÝó±sÝÂ/w3³løùjw_¦Yí¬t÷õfÖ=\/@O3Û=vëÅá}p÷wšYÿÎáÚßrwßÒ÷+Û¥`‰ˆˆˆt3¼<üx˜ mæüžfv°¸ø0xÙÌö(9ýßê6Žæž6³^±sŸ&…ŸÏ _·¸8þ)~0LKúÓæ§sJ¹óC÷„Ê<×ä?úîÞHæµYzT{ ¿‡ßìêœ7³‚®[Ü}c3/—휑Ž1(||«Ìs‹Ê‹ ½Ÿ3³Uñ6í˜ô+óº¥eŽ­#HƒêHêh:Ë$úüw|oùS,‘Ž`·¶½m"|Í@®™sÊu*”9ÖáÜ}™Ý |!,Fÿ8xÖÝ_ëŠ5Éǃ‘ޱ$|Üx¿ä¹ÒŽV씌žv÷W:`=[µæüë/…Kv]´û!-R –ˆˆˆHÇx(|<7~ÐÌ øb™óÿ>^ÚAëY>önåù!;4w‚»Ïž'ø/Ö··a²ÐˆˆˆˆHÇx`þƹf¶” =n ð=`H™óÿA0ËãsaKÞ_Ô~ô!h±ûy‚ŽZ÷mãzf…?7³¿y`¶»Ï)w²»7šÙ›À$3»X>õwwÏÆNý-ÁŒ“]€_º{Ý6®O¶Úéa»ÚÓ€« ÏgŸ.jáüëÃÇ©[³;€al ¶ÅŸæ…œ>ÞLÝÂkÎ'˜ÞþóðüÛ ‚¨¸Û€¨¯fÈ™TŠˆˆˆ´M8u¼ð»¯+y.A0pW‚ŽUOi‚¶«Ü}M™ëí@0L°X,t÷…%çôzo»{¾ä¹@7w/×m 3ëGP¯±ÚÝW›Y °#°ÒÝ×—9¿"|>,ƒ¥è¹À{À«î>¾™‘H‘Ùffö¯Àπϸ»ê?d‹€ˆˆˆˆÈV éÏ'ØÅùW‚^£JwbDÊQ"""""[%L+ËààKîþF×®J>.€ˆˆˆˆ|B™ÙnÀ±Àãî>¿çï  <ìîå&¸‹´™ÚðŠˆˆˆlƒ°{zÉá éHOq÷æ&šw–ý ž l1Æ„çŸNð}ˆ´;µáÙ6i`4Á¤óÕáGAkÛ?˜Yºë–À àÚÖ¾W¤]iDDDD¤m^u÷c£/Ìl'àaàh‚‡ÿ骅¹û ‚,‘  """"íÈÝ—™ÙO€› ‚ÿ1³g€w€³€‘Àw¿À̺Ÿ#H›Js€ÿu÷•ѵÍl,°/ðw_^zo3M°+3ÝÝ—´Tbf#¦«÷!˜¸~SKß—™ÕŸö’Cÿâî«KÎ;àî4³C€SÞÀªP]@ˆˆˆˆHGˆ‚ƒáãÞµÿIP_1 =j(p™í< V ÀÀ÷Íì4w<¼Îáuú?,sߟL'‡fj@ÌìLàF‚@âÍpMßþPî›1³Ã»‚•%ݯή0³IîþRìôK€ña̵À:À; ¢‘pxøX:‰üà~ —»ï œjf)‚ÿÜï|ÑÝû»û®ÀqÂáÔs‚”÷sÂYEf¶0¸»t{ÉyC€ß‡×éîû¿#BJÏü 8ÈÝwu÷= Öî '¥ÇUG¹{mxý§š[“l_€ˆˆˆˆ´Mµ™í~dfWüG>G°Ë÷&ðuwßàî€ã}€[ܽx¾»?L0a¼AÊaW­¿{‡–\ûlÀ€?oa½ç5ÀwÝ}nx]®$Hû*u1P œçî/ÆÖ÷p°0©ä5 àrwÿgxnÁÝë·°.ÙN(i›1ÀÂðãyàÀZà_Üýå’st÷Bɱ(¸£ÌµoÇÅŽÝ>žwCÎ"Hzt ë>þ#~0 Bþ^æüc€:`‰™}ÊÌFG»"¤z•*mQ,¨DDDD¤­Þ$¨í€ ~ã-`®»7–9wi™cýÃÇwË<·$|p÷Ùfö"p†™]î, ~\&À)ÕXíÂ4s¿¸ vLÞlášµ%_g€¶°ÙN)i›÷Üý†Vž›/s¬!|ìQæ¹%çDn~Ln%Ø q¶œ~Ðt3³D™`¥g™ó3Õ!-\smÉ×ùpGEd3JÁéZÑÎÂ~ež>–vº 8'lß{:ðŒ»·´K¿_°W™çF–96›`×$ïùø°÷€ˆˆˆˆtµìŒ\lfÝ£ƒaw¬ËÂ/ üÿ½õÝÙ¼à½9w‡M:^™Ù`à3eÎvUþËÌ’¥OšYµ™U·òÞ"JÁ‘Ö ‡YíN0Lj%°ÐÝËå+w 3»äîçvõZDD¶†»¿mf×W3Ìì‚”«³ j;þ›÷g‚k€z6¬oÉ߀'€sÃÝ“» Zÿ+AÛà%çßœL0„ðy3û ðvøšý€3€Ã€×[yÙÎ)‘™ÙÞÀŸ(“ûkf €O»ûk¾°ÍAùÔ‘Ž’#øû²Vœ[ž[Z+€»_if+€K_‡‡?~D`”óðAøî^îÚÃû®Ý«`fSjHÎ ØõX~ý"Aëß±óÝÌþxøð_±ë/"„âoH-#(Ä)ËT$"Í1³Z‚žðþ0ýàâ@`4Á»s_q÷Ǻl‘¡pªo?wÿEW¯ED¤-ÌlÁÂåî^®h½=ïUC0gd¹»gZùšZ‚bõåÍtúi‘i–™]@0÷:w¿¤™s*ZûGKDDDDEè"Ò’Aáã‹ÍP.ø0³ÃÌìn3{×Ì–›ÙSfö¹2ç}ÍÌn7³^fö]3{ÝÌ>4³O›Ùÿ˜YÙÝ 3K›Ù-fö£Ø±kÌìeέ1³ËÌì¹p-‹ÍìA3;»Ì¹SÂçÞ3³efö™×Ü÷."""[Oˆˆ´$Êá=ÍÌ*Zó3û2ð8pppÁVýÿšÙ÷KN?˜ Ü |˜EÐ &AG˜áensp&±œf‚SJÖÒx ø Aü[ Š-+ ò¬ãç^>7„ ÛÌmE÷˜Ù[󽋈ˆÈ–)KDšþ~ÁNÈ`ð4ð„»¿]æü½×€™Àqî¾><ž&¨™ Œt÷¹áñ?Ô‘ÌŽt÷±kFÐ¥å§î~YÉ}îN»ûÒðØáµûÄλ8øîþã’k p÷åáçLJkü\´«¶Ã|‚ Wþ`w_µu?A)¥i–»¯Æwý º,6³—ˤ'¤oGÁGx,ð}‚ß9§—¹Õ5ñà#ô°ø|¼ï¼™õ%dŽ‚ržôgó€kË|oËc_~…`‡äëñ”2wß¾¶{xOi#µá‘¹ûàŒp7àà`‚¨Ò“¦º{4 ëàðñ(3›Pr©ªðq2·y©Ì}ÝÌn"h?y,A»I€ÏLðýsékJŒ$HµzÖ·¼Õ{0AËɳ̬ô¹ZX·ˆˆˆl% "Ò*ánÀ}áÇUfv1ð ‚õQR €æj&šô¢ù ™óo®ÎaSr°øû–Ü#|| çô"j.hæùE=üEDD¤€ˆÈ6q÷ëÌìj`O3«v÷z`5AñøÍ ÄÚÚ{,k;N1³^µ(£ß¹{Ã^Õk lÅ­Ö5î>tÛW+"ÒuÂZ»s&“÷'h"ò:AÃù­Ø é4 @Dd›˜YŠ Å©@0 àà0`A©öp#p$Á´Þ½bǶd6°of)wϵpî3ifcÜý¹6¬UD¤Ó™ÙiÝþölæ”Uföð|øñb™º;‘N£"ti–™}ÅÌ~hf»”¯þè<™\OPKñ_f¶ÉkÌÌ7³­Ýe¸‹ mëKÀ¿óÜýÙ-½(\Ó¯ Úêþw0Å׳oìËÿòÀÿ”®ÏÌ’fv¢™õADä#ÄÌÆ˜Ù ‚ß“{&“IŽ<òHN;í4öߪª¢Ò;v xcèjà~`¹™½Îkú³™ÝP¦nO¤ÃhDDZÒøÀwÍl6ð6AmÅH /AkÞ¯E'»ûÛföY‚y/˜Ù3õý€}‚‰Ý­ZÅÝ7šÙlª+¹n+Ö 0*\ã”ð@'HQÈ#Â{ œFÕ´æý«»?Zrî>sCj Øß$Žø”»š[£ˆHG3³Þo } –aÆqÍ5×pôÑGÓšÿÓ­^½š×^{W_}•W_}•W^y…%K–ÄOùŽ»ÿGG¬_$¢DDDDä#,|3è"à*‚t*úöíËe—]Æç?ÿyR© ¡e[ÿOwã7rùå—“Ïçf»ûÈvY¸H3”‚%"""òefG¤žŽ¨¬¬äË_þ2—\r =zôhùÅ­PWWÇÊ•+6lsæÌÖæ‹Šl‘3Ûø`jø5S¦L᪫®bàÀÖtß²W^y…G}”=zPYYN¶ËÅEZ DDDDä#"ì2øà»µhìµ×^üð‡?äÈ#l—{ n¿ývV­ZE·nÝÈåšt)Wn¾t8 "Ò„™TÇe€w€7Ý}c׬j3Û˜üÞÝ/kÅùC æáî×tôúDD¶•™BÐ|w€ÚÚZ.½ôRÎ=÷\’É–7&Z[ÿñÞ{ïñàƒ’ÉdH&“d³Y*++ã¯W"Nˆˆ”ºžòÓÃ7˜ÙÜý'½   7Mƒ¤–$·ò|‘NefÇt·: ‘H0uêT®¹æúôi¿DO=õ .$›Íâî¸;ÕÕÕÔÕÕÅOS"Nˆˆ”ÓŒ?O£ïךÙûî~c­ `A›\Mñ‘=3;¸°öbìØ±\{íµŒ1¢Ýî±aÃyäÖ¬YC6›%ŸÏ“N§qw©©©‰:`¨Ý¸t8 "RNÁÝgƾ~ÖÌÞþ\ÜXú‚pÞÆ@ ÂÝ”<7`jú{忆lp†ÈÌæž7³ƒ?p÷U­¹f8·¤°´5ë3³žá=Þw÷µ­Z¸ˆH 3«þ$wÜqG~ðƒ0eÊ̬Ýî1kÖ,Þxã Ö¬YC¡P(îz466âîTVVÒÐÐ@"‘ˆ^¢ép‰-Ÿ""ÀãáãP3ëff«Ìì3; XL0 ð•èfvº™- ˜˜>XefwšÙN±s ¯óýr75³³ÃçÏ ¿Þ9üúßKÎK™ÙÏ•ÀÀJ3»›`š{Yfv™½MPã2øÐÌþ7ö?ïŠðžcÍìf‚‰èóˆMÙ§}ÌŒ›o¾™SO=µÝ‚\.ÇO<ÁìÙ³Y»v-…Bd2IEE™L†t:M"‘ ›ÍR]]/DW"N; "ÒZýÂÇ á£ÔVN0¥ü‚‰Ìì3À­À2àëÀ»À$‚”ýÌlt¸Ûð,°ø’™ý Ì´ñs*‚)êÐ| ÈÏ u=®% |•2»5áú®&H+{:|\I} °‡™s÷lxzUxÏ?jVï•ýI‰ˆ´ÎpÆ +„§R)2™Ì6_tåʕ̙3‡·Þz«XëQYYI.—+Þ#ÚõH§ÓÚ‘N§DD¶(l ùÃðËÇKžÞ ˜âîÿˆŸ&èäÒŒs÷ÅáS7³Uí%¿ü›»Ìì&‚ ¿GÇ®³pp›»¯ia}{Ï“¢ÀÁÌþ¼XæüaáýŽ‹=÷™Ù;À/€Ï7•¼4Œu÷ÆæÖ""²ªvØaú÷ï-r£: €ªª*r¹\«»\-]º”Y³f±lٲⱪª*êëëI¥R˜™L†ÊÊJ) TVV’ÍFï·(‘ާ,)§ÒÌn? H¯:ƒ •êû%ç¾>Bì„Ü >"?r©‘›þèSrîÙ;-ÞÂzOÏ».¶kA(ü²ÌùŸ#øý÷Ó2;. (Â<¾Ìë~¡àCDÚQš¶Ðuw‰UUUTTTŸËår$“ÉfS´òù<ï¾û.3fÌàý÷ß •Jw8ªªª(  …bVEEfF6›%N7Y“HGÒˆˆ”c„}è ‚…ÀKÀoËv¿Yæõ{„³JŸp÷Ufö.ÁÎItl¡™=œjf=Ý}eÏ–la½Ñýæ”ynv™cQ{™«Ìì;ežÏS¾q¹ïUDd[m€Ä¿vwr¹ù|žD"A>Ÿ/¦O¥R)‰©TŠ|>Ï‹/¾ÈìÙ›~ÝUUU‘ÉdpwªªªŠ¯‰vXâ»"Ñ<èöòËvMˆˆ”Óàî¶òÜueŽU„Í .ÜHÐE*îF‚t«©Àÿ‚ Ÿ¸{ž–E÷«+ó\¹5Dõ# j:J-Þ*s¼M¼DDJ8PL·Z³f 555Á%AI6›¥P(°aÆânE4#ä¯ýk1åĘ̂¨¨ ±±‘t:M¡P “ÉP]]M}}=Éd’T*Eccc10I$ª‘N¥DD:B4£cPéáÎÆ àý’§î$H—:‡ ‰Ò±¶”~°<|Èæ»›­ 0àzw®×éê>¦OŸÎÛo¿Í„ Ø}÷ÝéÞ½ûféY lܸ‘D"ÁÆyÿý÷q÷âl¨Æ#“É’†††b݇™?΋ÍQ"N5 "Òž!HÝ:=œ7è <?vĺ ofû§Ϻû¼VÜoFøxZ™çN/s,*t?»×é(MR°N8á&NœÈ /¼Àücî¸ãæÏŸÏúõ›6_£®V7näÃ?Ą̈®®.ÎùˆÔTUU%“Ir¹Üf-yãkéHÚ‘vçî+ÂÎVç¿4³o¹{cXüŠ 8ùy™—þ™ (¸… H¹±•·|ˆ Öã<3{ÒÝowZÎ!Hé*uAw¬/›Ù2à?ݽÀÌúgsÝý¡VÞ_Dd[4ÙéÞ½;#GŽdäÈ‘444°xñbž}öY>øà†Ê!CèÝ»7UUU¸;…B¡Xœ¥\åóùbGCCC1¸ˆ&ž×ÕÕ5™­í€H'P""åÀ®íqÏ3³ ê>€ J&­GþIÐqkdxÞ_[s#wχsGþjf¿"˜Rü?à?Ëœrxý¾ofKó> ²DDÚ™õj) @"ù|žd2É!CØ}÷Ý©¯¯çwÞaÖ¬Yär9ößz÷î] B€âG"‘ ™L’ÉdŠÁE2™,îŠÄÏK§ÓÅ] Ò™€ˆH©¯°©¨»% ­yß)÷¤»¯7³ã€c †ö$(ì¾ÓÝ›{M! $63ûãÃð¾ J^;ÛÌFŸ'èŠõ>p;A}H4‰=~þ2à03;‚ ø½?ðA¸ÆÝ=^£rðjsß«ˆHk™Ù£FztÇwL<þøãk¢Y°y;^w'›Íbf 4ˆÝwߺº:ÌŒ†††&éXTTT»YE…èQ7¬|>_¬I§Óär¹â †††x{_ ÒဈHî~_+ÏËwlá'Hju*“»?<ßÂóõÍÝ7l|]™§š]§»ÿ“`祥5Í¢LKa‘mp̱Ç›8äC¨­­­½í¶ÛŠÈܹséÝ»7½zõ*ñ–¼õõõ¸{±`<€”¶ÚÍårTWWSWWGEE¹\®É±T*ø/`¤är¹h} @¤Ã)é<¿ÿÝï~wö“O>9¨±1è+V¬àºë®c=öààƒf·Ýv+Û +ž²=ï|•L&I$Åö»Q`âîÅZh×#ÞŠ7¤"tép @DDDD:‰»¿ ìjf»¿&FÅa‡ÆØ±cyë­·˜={6>ú(ƒfĈôéÓ‡nݺůS|Œލž#ªñ(=l–†¢k¡t& """"ÌÝ™Ù3ÀÄx*U"‘`È! <˜c=–÷Þ{7ÞxƒçŸžwÜ‘]wÝ•vØ¡8d0š–ÍöÈd2¤R©bJUTã¥ae³ÙâPÂT*…™‘Íf‹)Y(‘N DDDD¤k8P¶=:¶ãŽ;2`Àr¹+W®äwÞ¡¦¦¦0¸;Å@$ 8âSÐãݰR© TUUQ__O:.!¡"LˆˆˆˆHר¬ o|7$ú:ÚéèÝ»7;ì°Éd’ 6Ï,‚žJ¥šŒÕ‡D­{C @¤Ãiºˆ|$™Y•™íÔÕëé@Å$x¬X±‚ºººâIñçr¹\“ç¢Vºù|¾\D‰™'£g³Y**‚ëÙl¶ÉNIt,¤D:œùÈ0³¤™}ÉÌõÀ{f¶ÆÌf˜Ù™ÙgÍlpW¯SD¤”Ý™?>^x!×_=sçÎ-Ös”›4 .r¹\qöG´³$“I’Éd1]+›ÍjD:R°Dä#ÁÌ&?ö-yª0.üˆÎ]N0+dfì`ƒ»¯ïøÕŠˆ´‹&; ‘C=”C9„7ß|“‡~˜»îº‹#F°ÿþûÓ§OŸâyQ ŒïpDAˆ™'ž—Ö‚DK6›Ïép @D¤K™Ù~ÇqáלrÊ)œ}öÙTUU±`Á^}õUfΜÉìÙ³£4ÀIáG\™Ý\ÝÜ´u‘&; ¥;C‡eï½÷¦¡¡… 2cÆ Üƒ>˜~ýúÏ‹:[e2€bÀ¥c Òétq.H|2z´+I¥Rû˜ÙÏÜý;öSíŽéf¶3ðoÀÓA:è ®¹æ<ðÀâyx Ÿýìghhh(#¯¼ò ¯¾ú*‹/ŽÿÑ® ¯7ÆÌƹûêNû†DD¶^‹EèÑôóB¡ÀàÁƒÙsÏ=ill¤P(PWWW<7•JŽ\.G>Ÿ/îv¤Ói²Ù,…B¡lç«øŒ€^½zQ]]ý¯f6øðŒDÚéTfÖ¸øÐ `×]w媫®âä“O.M–SUUŘ1c3fLñØÚµkyíµ×˜9s&þóŸYºt)À>á=.ïàoGD¤-Ê¡Ãæ»!ù|ž7’Ïç›(Q—¬(¸¨¨¨ P(Ó°êêêH¥RÅ¡„ñÉçÑ®HTÄÁ’+®¸‚ÚÚÚÓ׬Ysú­·ÞºÎÌîþáîk;ï¸ñ¨÷ IDATÇ#ŸT*B‘NaÏoWÝzõêÅÕW_Í3Ï<Ã)§œ‚™mõu{õêÅ„ øÆ7¾ÁÅ_LUUUôÔ±í·z‘Ñd4_h.°¸{±ýnuu5Ùl3+ÕÕÕ  …B±ýnee%¬—¦a f͚ņ èׯW\qEÏ3fL½ë®»þ|þùç¯îÕ«×3fv™™îø|RiDD:œ™\GXHžJ¥8óÌ3¹üòËéÛ·o›¯ïîüõ¯eãÆ 8 ônó…ED:VÙ"ô-톔î'‰bV¼ÛU\¤Óiòù<Ùl–ššêêêŠiX¹\®IýH}}=7ÜpúT*5ÿC9`ôèÑ6tèPjkk9õÔSí¬³Î:¤P(òꫯrà.›9sæ½À#ÀtwßÐ?+ùQ""ÆÌú?Î'Üq0a?úÑØgŸ}ʾfkS?øàn½õVÒé4©TJ\Däãd³"ô–¸xúUôäóùbKÞúúzR©étº8€0~¬±±±8Y½®®n0¦±±ñ3ëÿØcœ¸÷Þ{ŸpÈ!‡Ô >œwÞ™Áƒó³Ÿýl§ªªª Þ}÷Ý }ôÑ\uuõ“ ÷w«ˆ´Dˆˆ´;3K™ï°Ë.»ð½ï}3Î8£Ýîóä“O2{ölÒétñx"QÌ,UѤˆ|ÔmV„ÍÍ(Éd²Ø +Þj7^÷‘ÉdŠ-{¨©©¡¡¡ Ø-+ô†»^pp“™%çÍ›78±¶¶vòرc÷=z4C† ¡W¯^œvÚi©³Ï>û¨úúú£fΜùó}öÙgé¼yóîîžt÷â D€ˆH»1³0ž ÝêSÕÕÕ|ýë_çâ‹/.æ·UCC÷Üs6l ‘HÏçI¥R¸{|Dˆˆ|Ôµº½ÜsÑñ\.G2™lRT "ŒvER©TqW$Ú‰f2™âÍ "t÷<0#üø®™ >}úäd29ù€8fìØ±©¡C‡Ò¯_?†Îï~÷»]‰ÄÅóçÏ¿ø¶ÛnÛ`fcÜ}N»þôäcKˆˆ´‹0Ýê>àèØÄ‰¹öÚk4hP»ÝgÞ¼yÌœ9“ºººbÚA¼«Kl¤ÐÒuDD>ʶáÞš”¬¨óU¼¨¹€ˆH{˜pÙe—ñÍo~³ÉdݶZ¾|9/¼ð+V¬(]FE–ÑÛ(ç9ÖÊWˆˆt„~À¹Ñ±ß9 Oð»'<äî¯máZ[U„ÞÒH”~Z„$‰bGEEÙl–\.Wü½½6–¾ÚæNî> ˜üÔÌj´»¯lëuå“Cs@D¤=œ0|øp.ºè"jjj¶i¦G9¯¿þ:Ï>û,+V¬‚?ºQA%-}£œçB¡ éPaw§ùÁF\H‡`v+.×ìHüó–ž‹R¯¢Tª|>ß$à€`9ª ‰ŠÓ³ÙlqW$‘Hg4hç{î¹g¿éÓ§·KÑž»¯Qð!¥´""ía7€C=”þýûw&‰UUUd³Ù­n¯ÛÐÐÀüùó™={6õõõ¸;©TŠd2YÌ_Îd2ÅÝ( +Fˆˆt”¯6ó\¸',ÚÞ’Ív@"åÚî6÷yT|ýŽ,—†•ÉdšÔËEiXñYµµµ;¤R©ÏÙiÓ¦-H$óòùü¼N8au+¾‘VQ""í&Ê!N&“ôìÙ³X$íJDiS-#fÆÚµk™7osçÎ-ž[YYI.—£P(P]]],¨, Å"Ë(P ©]D:J° (¤šæºûâV^§MEèÑëšK¹Š§§ÆÆÓ°¢7o¢k%“I¯Ÿö) û˜Ó¦M[•H$æär¹¹õõõ‹¦NÚšK¤, "Ò Pþ»B¡@*•*¦D)*±”)Òé4«W¯æ©§žâÃ?,žŸN§‹ÝZ¢‚ʪªªâÛøp­Ør퀈H»2³ à``P.E©<°—ÌCÛ'¡Gã7jòù|“cÑ.t´íŠD3Bêëë‹)XfÖÜ›7; …ñ‰Db|÷îÝ3Ó¦M[Ì1³¹“&MZ·ß³ˆiƒ‰æ&ö666’ÏçI$¤R©âÇúõëéÛ·/sçÎå‰'ž —ËÓ …B1u êà/žÌf³ÅV¼Ñóñ5‰ˆ´•¿XöŽz„‡—à ê>²ÀÃî¾q+.ÝäÍ›mí ×××7iÉѱ(àhhhhÒE0jÓ L&·¸{ìîÀ>À>îîÓ¦M[Z(¤R©9ÇüÛè÷¯liM )ŸþyHmmm1-+þ‡3›ÍÒÐÐÀºu먨¨ ÿþ,_¾œÇ{¬x^Ô2ž«µÚÒŠwp©¬¬Œï¨(KDÚÌÌv'èô7 <´xx ¨†üj5ðâV^¾€lKzÔŽ¼´Æ#Nt”î766S´ …•••Ü{ï½Å9 £Fz{+¿&‰…BáˆiÓ¦mt÷7òùüœž={¾yÄG´¥M±|B)‘öÐ$yÅŠ\wÝuì»ï¾Œ3†¡C‡Ò£G²HëëëY¿~=Ë–-‚´¬¨Ð<p”¦D)WuuuTTT`fd³Y퀈H»0³]€c!á¡:àiàYwZÕ6šÙcÀ$àï¾µÝ6¶P„ÞÚ $™Lf³Ý⨆. >¢Âõ[n¹…§Ÿ~€=öØcþ©§žº`+¿‡RÝÌì€T*uÀÆ ÷ßÿ;î>§P(Ì=ùä“—·ñÚò ¡DDÚCñ]<3ãÄOdâĉ¼óÎ;<ÿüóL›6=ö؃‘#G2`ÀºuëV|a”šµ~ýúb+ÝxAe2™,¦aE8£îZñAZÑN‰ÚðŠH[˜Yà(‚Ô*#H­z˜ÑÌÐÁ™@ÂÝßÛ†Û9l^„¾5»!Q£xÀÕ}Ä—ÆßЩ¬¬dÙ²eüö·¿eéÒ¥ >|ÎUW]õÐ6|›}O‰Dâ±\.·Ø'™LîåîC‰ÄäiÓ¦­4³ë&MšÔØ÷‘1 "Ò6{ÏÌ8p »ì² 'tK–,aÖ¬Y<ýôÓ 4ˆ!C†°Ã;PQQQü#õ¨Ò–‘å:¸”þ±MóU""­ff5À¡À!ÿ?r‚Y»ûšæ^¶Û}voÛ$}µ¥À£äž›.6úˆ&¢G¿7£Á¬¥ÇR©¯¼ò üã©««#™Læ'NœøÄE]4s¿‡øº‰ÄmÇüœðÐK@búô黹û>‰D¢ÏñǯàC€ˆÈ¶1³À·†oõ…òÓ|£?¬;ï¼3$›Í²lÙ2Þ|óMzöìYœÝáîÅŒxÊUsiXÑNIT  áŠMóU ˆˆl‘™¥1Àx *<¼xÐÝ;:eh³m)BÏårÅà¢4 +•JߨÉd2<øàƒÜ}÷ݸ;=zôXwÑEÝ3a„emýFÌlE*•ºé¸ãŽ[Qú=Nš4i!°°­÷O "²­¾wå•W^Ü·o_þû¿ÿ›Å‹7év½#‰ÞËçóôíÛ—wÜwgÆ Åó¢¼ä¨=d< +*²Œ÷ºÚïÆ‹,µ""­ÑBg«GÜý­NZFñ’( Z_ }½y•G)Wñö»«W¯æø³gÚwß}÷…W^yå´þýû·G‘ø+6l¸sêÔ©™v¸–l€ˆÈ¶jœ?> `—]vi€ÜqÇôêÕ‹Q£FmÖ +úhhhh2$úÃÕxDDãG2™,!Q—hW$Þ +¤DDÊ*ÓÙj-ððÚ6’·E1) ñ7PZU ¥¯f³Y’É$‰Db³)è…BE‹ñ›ßü†>ø€D"Q8úè£g|ãßx®­‹w÷‚»?pâ‰'þ³­×’í‹ÙVß¿í¶ÛÖÝqÇ'UWWXÔrܸq¼öÚküêW¿bÀ€Œ5ŠÝvÛž={Í¿»—Íf7k«B€bÝG< +žš¥iN™ÎVõÀÿÑ´³Ugz'údéÒ¥ 4h›ŠÐ£ÝŽxV4'é™gžá¦›n"“ÉPSS³ñ /¼÷˜cŽYÒkߘJ¥n™8qb[»fÉvHˆˆlw¯~üÐÌþ œÕ{ 2„Aƒ1qâD–.]Ê¢E‹¸û­­eÏ=÷¤_¿~Ŷ¼áµŠiQ®r\Äg€¸ûfÅéQ+Éè˜&¡‹H)3«Ž$H¹jMg«Î2X ôûú׿ÎOúS† ´. ËÌŠC£€#jÚQ__ÏwÜÁÃ? ÀÀ—\qÅ÷4hk%6çÝL&sÓ”)Sš-Îi‰iõ°yº™±ÓN;1`ÀÆŒÃûï¿Ï;ï¼ÃÿýßÿÑ»woFŒAeeeñ"á;tÅ¢òd2Y:ïà/²ÌçóÅ ¥ªªJƒE¤h[;[uww3»¸þÙgŸµÃ?œñãÇsî¹çrÄG´j7¤P(ÓS£Z•+Wò«_ýŠE‹0nܸg/»ì²Éd²=Þ˜ynãÆŸ:uj~Ë§Š”§DDÚC“V’‘øG¡P OŸ>ôéÓ‡Q£F±zõjjjjŠE’ÑHccc“€#šÜÕ}¸ûf3Bòù|ñ5±A„ÙÎþ!ˆÈGC ­r÷÷»lae¸ûïÌlp»}ê©§xê©§Øwß}9ï¼ó8öØcKÏßìëhÀ`6›eÞ¼y\ýõ¬[·ŽÊÊʆsÎ9çþSN9eQ;,5—H$î>þøã_h‡kÉvNˆˆ´‡VOó:µÔÔÔl6|+ú#¥aår¹bG4ñ<ê¦UYYYÜ)ŠK¬½+ò¹E¤ …­†ÔyÔ†‡ß#Øñè¬ÎV[ÍÝ6³Ã€Kɯ¿þº]rÉ%ôë×3Î8ƒÏ|æ3ôêÕ+:¿øÕÞe2¦OŸÎ]wÝE¡P ÿþï_~ùå÷ìµ×^kÛº>3[“L&o>î¸ãÚ£vDDˆˆ´‹&ÿùÏR__ÏØ±c›¤Z•Ö~ă”ø€ÁŠŠ `SpïkŸÉdŠ»°©8=V„®Dd;v¶:Ø1<´xx©3;[…ëøðpHa«¹û“À“f¶/ðà³+W®Lÿú׿æ÷¿ÿ='Nä”SNa¿ýö‹îE¡P ®®Žßÿþ÷¼üòËŒ=úåË/¿üñêêê6§I™Ù¼|>Û¤I“êÚz-‘ˆieS°Ì<ÀÝwßÍ~ûíǘ1c:t(fVvðV"‘(Nî­©©)ñ¾öQ¥fÅ»fUUUiDd;cf;ìxìê’ÎVfV \~T €ßl˵Üýuàl3û.ðeà‚L&3àÞ{ïåÞ{ïe§vbâĉ 8·ß~›‡zˆåË—“N§3gœqÆCgžyæÜvø–ÜÌ4iÒ詇´3 "Ò6KÁŠºa}õ«_%ŸÏ³dÉž|òI|ðAvß}wöÝw_úöíÛ$`‰R ¢.QV|W$Nov,j¿Õ…„†šYwwßÐÙ? éxfÖ 8 8€ ³Uxx¼³;[™ÙIÀ/Ø=<ÑÖëºû{ÀUfö#à àKÀ„eË–%n¼ñÆ&çöêÕkõ¥—^z÷¨Q£>lë}ͬ¾P(Ü6yòäödD6£DDÚƒCPßÑÜôóþýûóÙÏ~–|>ÏÒ¥Ky饗Øwß}éÙ³gñ5Éd²øšø€Á¨%o<I$eÓ°¢Þ½{ï³aÆWÌl„»7vöDD:F¸Ó0ŽÍ;[=âî«;y-{?&‡‡ÞþŸ»ßÔž÷ ‡Ý ÜÜ·oß]vÞyço¯\¹òˆB¡PkfãÆ›õéOz^mmm{L"_VQQqÓÑGÝæ@F¤9 @D¤=€ÍRª¢ÏK§Ÿ÷éÓ‡N8B¡ÀÚµk‹çår9R©Tq—#jµ›J¿ªâSУ^÷ñ)èQ|€ž={2~üø¡‹/þÐÌþÜ <èîë:ñç""íÄÌ’ÀAÀtqg«°½ï¥ÀwJ ü– øèÐ]×>ø`)ð­ør|ðÁÞ¹\n€™õ/ ýÝ}€™õ7³ªæ®ÓŒ— pçèÑ£ÕEP:”i >ƒ£Åþõù|ž 6S¶¢ÇøF¼ýncc#fÖd$ŸÏo6ÝÌŠ¯73¾ð…/гgÏnÕÕÕg-[¶ì¬x ß½{÷'7nÜø p»+½@ä#®™ÎV+v<Þì‚õœü Ø5ýéO'¿øÅ/YWWwäË/¿ü“ýöÛï½×_ý>‚ÿ@<¤T-‘–:[½ìî:lÔ̆×…ëX|ÃÝïëÌul©S§Ö‹Ã¢‡z¨[]]ÝŽ©Tª™uËçóoœ|òÉïuÅeû¤DDÚCÙ6¼å>oé¹(àˆ×‚DiVѼ( +ª-‰‚¨Mo´†•+W–-[ö½_|qpâ°aÃN<üðë‡ FÿþýÙ{ï½ùÅ/~±sEEÅï½÷Þ÷ß6N?™Ëåîîr÷wÛý§$"­bfýc€½ÂC]ÒÙ*\K-AªÕ7  øð“Î.vo/ÇwÜF‚jaW¯E¶O @D¤=´8 =ú¼¹ç¢×E; QG:.îzd2AmeUUUqa.—+NAŽEH.—»ÑÝÿ=¼ÅMfVõÆoŒŽ©­­=}üøñC8àL¯^½8óÌ3Ó\pÁÑõõõG?ûì³?:tèÂE‹Ý <<áîʉé`Ít¶zxÌÝ7vòZ 8 ø)0 <|ðuw_Ü™kù¤Q""í¡Õ“Л{ÎÝI&“Å]( «¢¢¢8$ŸÏÓØØX Bâíw£ $JÁ"x—2~¯‚`âà»f6ì¾ûî;ÁÌN=zôacÆŒI6Œ¾}û2jÔ(n¼ñÆ¡©Tê²ùóç_vß}÷m4³¿s÷¿µûOOd;÷Qêl®g‚:CÃCoÔy<ÐÙkù$R""í¡l VkwC¢B¡P 8R©T1 ‰×x¤R)Šíw£¹! TUUÅ×Ðbš†»¿¼ü—™õxñÅ& 4hÊá‡Þwøðáì²Ë.ôìÙ“ /¼°Û·¾õ­yòÉ'ÿÅÌÆ¸ûómþ‰‰f–ÆÕáá…ÀÃÝÙ*\OoàûÀE@Øüðcwo·"‚im*B$‰bÀ‘Íf‹Ï£ºÆÆF‰UUUÅ)èÙl¶øšúúz‰DÔ«Õyâî¾øð73»à/ùË(`r:>i„ tÐA¶×^{±zõj€ô6ü|D$&Loúp$Ð+<ü>AàÑéu f–>Olô ß|ÕÝ—tözD>逈H{ØbzKAI¡Ph2= .âiXñ¡„¹\®ÙÔ¬X+àm*Tõ`q/‡?2³>=öØD‚AcË€g¶åº"ø(u¶ ×s AºÕ˜ðЫÀ×Ü}Fg¯Ed{¡DDÚC³Eè-¥Ÿ»{±ýniVMM uuu¤Ói’ÉdqPaCCCqWdýúõ$“Iòù<‰D¢]þ#ãîÿ~ˆÈ62³]:[íê²ÎVázúW_À‚ô«_wÅzD¶' @D¤=8”Ÿ„^úuKEèÑó(¥*>ñ<*4ê>’É$™L¦ÉôøÈøñã'LŸ>ý|3›ÛÐÐ0kÊ”)k:ðû‘f„mlöcSg«Ç»¢­™¥j<®!Hÿràfà_Ý}Eg¯Gd{¤DDÚÃVMB/W„=–¦aE­vãó@òù<…B¡XœuÃÚ°aCq$™Lš»ïéî{VTTœ<}úô÷Ü}0÷…^XrõÕWwzª‡ÈöÄÌjºH}$:[…k:ø%°oxè%‚t+¥VŠt" "Òò°)°Ø–"tw/ÎöÈårŶºQO¹J¥R˜Y±î#JÊ‚€T*Õ$Àp÷£:è ºûï¿™ÍÏårsN>ùäõòSÙ…­Æt¶ª /êŠÎVášv~BPhnÀ*àÀ¯Ü=ßÒkE¤ý)‘öÐæ"t¦œ§ÓiܽIç«(àÈd2MŽøNI4½•5 5f¶°_:>uÚ´iïsæžvÚiK SÊD¤õÂNRûG=ÂÃK v<Þê¢5¥¯ÿ®©üø–»Ðk "Ò> P>ÐhmýG¡P(N¢à">=*Toll,¦cÝvÛm̘Ì «­­]õíoûp@{äv/Êçó·¼üòËÇŒ³k.—žL&÷Éçó‡§Óé‘À¿·Ã=D>V̬AÇþ³3 ¤þYò;¡³×uð 6Íù'ðuwŸÕUk‘æ)‘rÞ’áç‰ð`(AªÅIf6ÃÝ 7 @`ëŠÐ£h¶Gp¤Ói²Ù,©TªIÝÇÊ•+ùíoËâÅ‹>|øœ«®ºê¡=zdÛø½{2™|râĉÓÂÉ'Ÿ °8ü˜6}úô~fÖ³÷ùX1³ à``P^<Е³3Ìl‚Àcrxh)ð=w¿©«Ö$"[¦DDš»Æô$xg3Qútø±€àÆÈ6MB¡Gñèšd2’É$fÆœ9s¸á†¢Éçù‰'>qÑEÍlë÷îî™|>ûäÉ“_kîœI“&­V¶õ^"f–F¤[u¿ <ìîowáºj€K j;* RÀ®®èÊi "^ö"ØáhîwC– ø¸³¤$Û^„=&‰âHi7¬h'äàî»ï¦P(гgÏ5—\rÉ=‡rÈò6ÿ`e>Ÿ¿éä“Onk‰|¬YÐb8p4°Cxø‚ÎVsº²˜;L·ú%› ß%H·šÛUk‘­£Dd;ef)‚”ªýŠÎ“±§W€Øô{"G0ÅøeþóÑë4"­Ý ‰ïœ”Îö03Òé4ëׯçü#/½ôC‡]põÕWOëÓ§O{´É³qãÆ¿N:µU­{E>É–ºÇ îXO°ãù²»·4_§£×5Œ Ýjbxh ÁŽ‡Ò­D>f€ˆlg•ŸFÕ±§– Üý3Û8?|.¼ÜÛÌ;Ÿ3–/_Î+¯¼Â¾ûî[|bkÓ°¢V»ñö»‹/æ×¿þ5+V¬ ‘H&L˜ðì·¿ýí§“Éd›Þ…5³‚»?:yòäGPG+ÙΙY?‚óá¡ ð<ð”»wÙ<3ë|¸¨êŸ?骎["Ò6 @D¶a÷ÞÀ¡À.±§Ö/—™ù±œ µÊ€çÜýánñ*A¯ýN;í4¾ð…/ðÅ/~‘¾}ûOØRKÞB¡@*üJÊd2Ågžy†o¼‘L&CMM͆¯|å+÷uÔQïnÕ ¼:wÿßÉ“'oÓ¼‘O 3ëƦÎVyààqwßÐ…ë2‚Yÿ쾸¸«&«‹Hû0Íäùä ûâÆ=ÂÂٯoµ”ËmfŸ–¸û­¸×§€æe§ÓiŽ;î8Î?ÿ|FŽYì`U(ŠŸÇ¿~ã7( ¤ÓiÜ\.Ç]wÝÅ´iÓ8pà;W\qÅ}ƒ ÚØ†IdéÆož:uêªv¸–ÈÇRøûapÁ’NÐfûQwïÒf¶?€!Q¾ IDATAǸðÐ|àwŸÞu«‘ö¢DäÈÌzü§b‚”ò¸Ÿfº{«j̬—»¯ÝŠûVç¤Kìcüøñœ}öÙŒ;wox 2™ ,(¶Ú]µj¿ùÍoX°`fæãÆ{îÒK/ÑÖ”+wiéÒ¥w]pÁmm×+ò±îˆΦ4ÌEÀ#îþ^—-Œâ€ÃçìÆlþ ø¹»·y¸¨ˆ|4(ù çSΦT R©ž^u÷\'­#œ\4h§Ÿ~:S¦L¡{÷î  …,\¸€7Þxƒë¯¿žµk×RYYYÿÅ/~ñþ“N:©=Ò-r‰DbÚñÇ?£®%ò±ëlu Ð;<¼’`ˆàì.[Åߟþˆr7ï.r÷wºla"Ò!€ˆ|„Ešã ÞÕŒj»O»û¢.[`fGß$–¨©©á¨£Žbâĉxà¬[·Ž·ß~›Gy„;3B¡À€–]~ùå÷ì¹çžëÚºw_[YYyó1Ç£ÿÈÈv)ìlu›j)ÖOÒÅ­Ìì0‚t«ýÂC¯Ôy<Õu«‘ޤDäc,6xñ<ïé &ÔGíˆ1 Šßõn<ÐÓ?t xX–ªÑšˆHà¸Áµÿþ1ð»*s†Œ1Œ Æ4@~ºB,‡»™x.ðØZÏÏ5à<©ª»ëáûµnkÞ¼ùKKKGG"‘ÓÝøZ´hq|âĉK&Ož¼î|ŸÐh4ºhåÊ•ýÑ~”ÖwxI5¿–b .åJp­Và:[¥µu­ˆ¿ÃÕv´¢ÀÓÀwTõ@:×fŒI @Œi`D¤.©£(iÓ‰Edp­ÿ媺¬–k{ã:n N¨ê¿éûßzë­?ùä“›Z´hÑ©}ûöͧM›¶#;;»=ÐwÓt®Ê€ço¼ñƵçñ=Œipü–º£q³~<ÜÍý\GJ$‹ˆŒ~ô÷-¾VÛïcLãcˆ1 „_`~n€ 'y$)‡Û¯Ý‰kÍù–ª~wî\qù\›Ì+qÝtNávd¾¢ª3Îõ¹7lؽiÓ¦‹³³³/VÕŽžç]ìy^G ªzµ=VDö9&LØ®ÏoLC×R÷j èþ÷³»/m ó‰Hà¿›ýCEÀ÷q;«v#bLcˆ1.®eæ o«j½×5ør®ÇµñU௪ú‘î\áêP\{Ì*nvb"@çd¤R,\¸0«¬¬¬pq4í‡;zžw±ˆ´@ˆ¼4qâÄ´Mm6&•j¨û —޹#m ó‰H3à{¸`#ÿüËùÖ•c. @ŒÉ`"Ò˜tð}†K…Ú›¤çàÜ»¨ ¼Y55BD.Ç¥M´ qšÔRUý|‚ãÉ$3fÌȲÙ¦©ðߘÈÇ¥[ņŒî¥»¥.œþ]rnŠyWÿðÀ·Tõã´-Ì“,1&ùEšcq»‚"ø.P˜¬tÿ†a"îÝT^UÕÕ5\û9ÜNHN•S'p7%cÆ4uq³<ÆíüÃGq­VeB:“ˆäãÚêŽð}|[U_KߪŒ1™Äc2Œ__1‰Ša\ë×ë:½üŸSp…íCqE«¯ªjA-×gã¢k«œŠ]TÕê/Œ©gþ,ë€Îþ¡ÀÀ™Ð¶VDÚÿ†k·ÀÕ©ý'ð‹twÞ2Æd–¬3_bŒI×c®4¶ëñºªnNòóz¸€'|¼¢ªkj¹¾ð".øˆÍˆý.ùÈ‚cêW ³<ÞÇý¼¥=í0nŠù¯¨H}×Ý*íu(ƘÌcˆ1Ào­{;®ý¬âúõ¿£ªI-¦öonŵìŒVÕÂZ®ï„ËãŒ+B¿W°þÝO$s½Æ4%"ÒWã1À?>ÞOæŽèÙ‘¡¸t««ýC›€o¨êÛé[•1&ÓY –1iä#ý—Ëýªª~š¢çþîæ&¼ ªk¹þRà- °¸QUWùé[/à™¤t¿2¦)‘v¸Àc CWã ̧qi§‰Hg\ylŠùQ\úÕïÓ=aÝ“ùlĘ4‘6¸ »h5®ëTy ž;€Û½èK£úSm©^"2ø p1n¶À ªº@UUDî¾kÁ‡1çΟõ3 —Àí*®æ«êát®-&nŠùO€V¸Ó§p?ÿ–~iŒ©Û1& Dä àÜð¾2\­GJ¦v'>ž‹5\?x w³±¸Én4Œ©?"ÒWS5„Š7?¨jQÚV…ÿ»à7¸.\à~|=~H©1ÆÔ…퀓B~÷¨qïp‚›ëñ’ªMÑóÇ!`®ªn­åú€Y¸aƒó€;lx˜1õÃì9×n;Û?¼7DpgºÖU•ˆô~ÜåÚ ü˜©ªÑ´-ÌÓ`YbLŠøÓºïÁ¥1E¥¸w8SÒ>Ó¯ù¸ÊiWµß~«Myx8:îÓÐÅM/ÿÚkpÁÇÞT­Õ˜ÆÀßA \â Ë÷UõDºÖ•ˆˆ´þø®#_xø±ªIçÚŒ1M‹ Æœ'iÜ tÆÝô¿ªª…iXÇÙt»º—ç›n~ƒªJÕZièD¤.ðˆµ© á~–ÞOe—»ºðwg~IEMÊ<\ºÕº´-ÌÓdYbÌyðÓ.Éâ{Ò°ÁÕÔ¥à|,ð ÐXÜ¢ªÇSµVc2é‰ Ö×uæ…?éø^ ØK»:™¬õÖa=¨>–ªê¼×´ÞÀuÁ)&©ê‚”.Ô˜ ã§#æáj<Úû‡Kqí³?Ìä!œþìO€©¸ÿW—¿þ_¦ÅcL]‰uè3‰ˆH ¸# ^1dÈ@8Ö‚‚‚h8>‡çªê®3<þrÜ;YÀV\ÁyÚÞe‘Þ¸`( 7ü앪m5ýàã-`.Ul¢ª~”굓)üÀ#´óŸ–á¤wˆòw$§ƒÁï†Ãá®@àp8üOªºò »ø&®À¼µøàUõÓä®ÚcRÃÓhøÁÇmÁ`0÷‘G tìèj4Ãá0o¼ñFô£>"¾¤ªëjxü¸Ú‰.¿úOªNÙ ¨¾žî¸”lÜ´õT5ZåšÖÀ_qÁÇQàºD-yi ü¨+á¸Ú-€Àr\ªUY ÖÐøj øÇœœœf£GÎîÚµ++V¬ˆ¬Y³&FoWÕ7<ÎÃýþù\»o€•À·Uuq²×mŒ1©dˆiüàã–`08hÚ´iÎ;W»æ£>âÕW_Õh4úrÕ¡}"’ Üx¸‚ÔWªÞì§’_ƒòE\Øfàùª“Ëýàã-àjà0Þ&›¦Èßmø0hî> ¼¬NÅ "Òøû@ ðf͚ǎ›3dȲ²*2çÏŸ¯óçÏ?‰D.SÕÝq½7Ïc€hnà\$hŒiŒ,1 ž|ÜO›6-еkׯ]¹r%/½ôR4¾»Y¯|¬^MçÿôE¤=ð0Ðw#òtÕ¨*ÁÇ`‚í|˜¦FDÚ׃q;…à~>V¤(ðè|×󼯶nÝÚ7n\N~~>@ ÚµªÊŒ3ÊwíÚõ×P(t«ˆ ~‰k æÿkƒ1™ ¦Aóƒ‰@઩S§ºwï~ÆÇøAˆF£Ñ7€ST«€×Ò|´¦àr¿wãºo•%¸&>ø¸îLyåÆ4&"Ò x Äýìì>Ö¦b÷RD.ñ<ï€iíÛ·×Ñ£Gçäççãy^­+**â·¿ý­ªê_€›pÍ%ÊéÀ¬ÀÜÓXb´`0xçyÃê|ĬY³†çŸ^£Ñ(¸€•Àëi>Zâ‚¶À~àñªÝ·,ø0MYÜÔò¾¸Ÿ[€Ï€÷UusŠÖÐËó¼ïÓ:tè7n\Nnn.®ù^ÝüñäÓO?%ê~½ˆ›`¾=IK6ƘŒcˆi°‚Áàx`ø”)S¼^½zõã×®]Ëܹs‰F£;p7ûé >šáÒ®:àÒ0fW;âoãrÝàj> «~/c“†*°7Üxã=z”gžyÏóøÆ7¾Qkq¨_˜‰F£3Uµ(Ù¯N§–|70­ xBU÷T¹Æ‚Ó$ˆÈE¸ÝŽ|*vçK5©šÉ#"#‚Á࿆Ãáñ—]vYd„ Y]ºt©õ1‹-âwÞ¡_¿~Œ5ŠîÝ»³uëVfϞͨQ£¸îºë>î÷¿ÿ}Ùž={fG"‘¯$ãµcL¦ª½]‡1$ ŽÌÊÊùÐCÕ|ôë×Ûo¿ /¼Î;sã7²ÿ~Ž9Rë÷¾êª«4hƒÁÄw Éq=.øˆà†& >b5û±àÃ4B"r‰ˆÜ|—b˜/¿WÕ•É>Ĺ% ®öLII ÅÅÅD£ÑÓ»áp˜ììlZ¶lyÆç¸öÚk½Õ«W÷‘æªz¢Þ_D‰{·W—Uõ“*çÛïàrà÷á‚õÉ\“1©â×w Â¥Z]äV`®¾cGŠÖá7ƒÁŸE"‘þƒ–qãÆy­[·®ñ1;wîdÁ‚|üñÇäååѬY3ºuëFçÎY°`?üðékC¡P5hýû÷§cÇŽ‘ýû÷øN=¾4cŒÉh€˜Œ ‡G£Ñ±=ôPµàãØ±c¼ñÆÜqÇ<ôÐC<õÔS<ýôÓÜÿýœ8q‚7Þxƒ±cÇ’]cÍèiíÛ·×Ú³9®#)DdƒÇÞRÕuUÎ7^ÅûqÝ®,ø0 žßjú*Ü®^3ÿp°x¬é±õ¼Ž ð@0üÐuذa‘#GJ‹-j|̶mÛX°`[¶l!77—o}ë[±ßŒ=šgŸ}–Ý»wÓ¾}{æÍ›Ç'Ÿ|—¾ô¥Z×2vìØœ¹sçþˆüXU‹ëé%cLF³Äd´`0xM4ÿÀx—_~y¥sÇgæÌ™téÒ…`0Hß¾}y衇˜3gO>ù$‡æÒK/åÚk¯­ÓsmÙ²Ïó¢Ñh´$¯@D.nÅ:‹TõÃ*ç/^>«ù£ª’µcRÁO1ºšÊƒã:Z­HÕÔoçåo‚ÁàONÇŽ9’fÍšÕø˜?þ˜ °{÷n†ÊÞ½{¹à‚ *¹¹¹tèÐçž{Žââb:uêÄ×¾ö5:uêTëš @NNŽwêÔ©IÀSçÿ*1&óYb2–ˆ|Îó¼ ÷ÝwŸTí· >:uêÄ=÷Üs:åªwïÞLž<™Çœììl&MštÆÉÄà‚¹sçF=Ï{7‰œ<ãÎíõtîÄÝ€­TÕUÎçÑ@10Ñ‚SD¤#›““Ó?†B¡Ðb`S2gßøÞúáR ãÛG}†ëhµ1Ëýµ´þ6ü ;;»å¨Q£²‡ Vcz”ª²aÃ,XÀÁƒ6l÷ß?-Z´ M›6¼õÖ[Œ7Ž6mÚœ~ŒçyŒ5Š^xÛn»«¯¾ºNkó<+®¸"«  àF,1Æ4€˜Œ$"Wzž7ñî»ï–T:wâÄ fΜÉÉ“'¹ë®»ª½zõbÊ”)Ìš5‹9sæðÅ/~±Ö¬;v0gΜ(ð^(Zš¤×Ó×n7lþRå¼ÌnN7Ù„ss>üÙ1¹Á`p0Ю{÷îáAƒe•””è’%Kî>ÀÕÕ÷ó¶À¥Y b9M! øHU÷×÷sÖ²––À”@ ð¯ÙÙÙ-F•=|øð„mqÁ›6mâÝwßåСC 6Œ)S¦TÚ!¹úê«Y´hï½÷·ÜrK¥Çççç3oÞ<¶oß^ç M›6žçy5÷ 7ƘFÆ“qDd°çy·Ü}÷Ý2hРJçbÁG³fÍ8|ø0Ï=÷÷Þ{/YY•ÿ)÷èу)S¦ðøãóÄOÔ„ìØ±ƒ™3gFB¡Ð‚jÔÏëi… >.¶/Æ¿óë·ã}øÜÚ]ªº$k1›ó?  æ:tè¹êª«²òòòhÛ¶mì‡Dúõë'3f̸FDöÔW}‘ˆtŹTü¿¥X¬RÕ¤ì,Ö°–À·À7Z´h7n\ΕW^I Hx}$aõêÕ,\¸C‡ѲeK~ðƒ$Ü!ÉÎÎføðá,\¸Ñ£GWjp9r$¯½öãǯ–¦U“âââH4=pN/Öc @LF‘|Ïó&Ýyç5mÚ´áþûïgÛ¶m•ŠÎk BfÍšÅÚµk¹êª«*ß±c³fÍŠËB¡Ð[Iz=9À}@+\AùÜ-Eü-®úF2Öb'¹¸<;;{ çy—6kÖ,š———5dÈ:wîœðw|==z´÷Þ{ï‘ 皊å×T ÄíxÄ·’ÝIEšUä\¾÷9®§«çyÿàyÞ#mÛ¶eܸq9ƒ ª5 3ÖÂ[U9r$mÛ¶eΜ9|öÙg$ê¸pÍ5×°xñb–,YÂĉ+2dóçÏgÑ¢EÜqÇg\ó–-[X½zu4‰üéì^­1Æ4\6ˆÐd Éõ<ï ·Ýv› :´Ò¹S§N1sæLZ´hÁƒ>x:ØØºu+sæÌ¡gÏžÜÿý w9Ž?^­ ïÎ;™9sf4‰,‡Ão&éõx¸à£pø£ª­rÍ?ÿŽkA:MUg&c-¦q‘, ovvv~8îsÁŸŸïåççK×®]ëT÷têÔ)~ö³ŸEÃá𳪺å,ŸÿbÜÌŽ<ÜÎ@X,SÕÝg÷ŠÎ_ ø‰ªþ cÇŽ‘qãÆå 0·¹˜ØªU«øì³Ï¸õÖ[),,$77÷ôÉ£>JVVÓ¦M«ñño½õ|ðßûÞ÷ª±¯^½š@ @^^^ÂǪ*›7ofÞ¼ye»wïΑÿŠF£ßOfMŽ1ÆdÛ1ADxžwǤI“j >š5kVm§£wïÞ•:_=øàƒÕ‚ªÁGQQ3gÎŒD"‘É >|qÁGx.Aðñu\ðð- >LmüT½î@ 7++kçyY z}ûö­¶x&^x!ýû÷gÆ yÀ?è¹·ÛÑ ×É Ü´òÕ¤8ͪÊÚnÏÊÊúþ}÷Ý—Õ¯_¿¬ÚUeÙ²e\sÍ5TÝm=z4O>ù$Û·o§gÏž ?bÄ–.]ÊÒ¥K?~|¥sƒ®ñ9ׯ_Ï»ï¾[¶ÿþ€ˆ<®ª¿ˆF£ÛëôB1¦‘°Ä¤ˆ\áyÞ&MšäU-Ü,++;ÝÑ*Qp.‰Õ{Ìž=›‡~¸Æ¢ó¢¢"f̘‰D"…‘Hä¯IyA€ˆ\‹Ë‡âj>vU9ÿ ð?þ—?RÕÿMÖZLbþ }7 3Ð(Á }Ü‘IïDû» ƒ²²²®ŒF£9}úôÑAƒ P§ù6µøàF]é\ëÖ­QÕ„ãäÝwßeáÂ…<ðÀ Ÿ·U«V´jÕªÚñP(IJeËX°`Ayiiii$ùàw™´cL:YbÒBDúxžwï„ ¤jðQ^^Μ9sˆF£L™2…’’f̘ÁŒ3˜:ujµšŽx=zô G•Ž8p |¬KrðÑ×J7 Ø@• "2 xÈÁ üRºSWš°¸Ý§ø?ÿC"ò"Ð è!"mªÖíÔ7q“ï/ ƒWÝÛ·o=RVV¶9ÉÁǸ”žfÀ.àåøç‘Ë€×p_‰k·›²ö¤¦2U-¯áxDDöíp—õ€øï/ËÎÎß67//=z$ž'³yóf Ø´imÚ´!??ŸH$B~~>«V­¢¸¸øtÒ«W/.¸àöìÙ“0éÕ«Íš5“’’’ÞTìv¬67 £¯”——?VS5jÔ(–/_ÎË/¿LQQÇŽcøðá§S5ÿã?þƒÅ‹',¸`ÁvìØQkròäIÞÿ}–,YŠF£Ãáð¿³Tµ¬¾_¨1Æ4€˜”‘Þ~ðá3¦RðQ^^Î[o½Åøñãùò—¿\éqíÛ·gêÔ©Ìœ9óôNHü»•‰:tˆ3fDÊÊÊ>ŽD"/$+uÄÏ—ÿÐ8†›õŠ;ßx¸wcwwM7À&½üÂôޏ™,‡ëñûf½@®çyý³³³¥_¿~Þ!C¤W¯^Þ™ÚæF£Q¶nÝJAA6l ¼¼œfÍšñÈ#еk×Ó×õîÝ›-ZPPP@çÎЗ——sñÅ'üޞ瑟ŸÏG}t, =¡ªõöºSEU‹Àÿ½óÎ;_ÍÍÍ Ví‚ ÒV®\Éøñã1bD¥zØ`Á1cÆÐ¢E‹ÓÇßüæ7kì0vâÄ >øà}ï½÷"Ñht_8þO`ºÆS; @Ìyó󯳀SªZZËu—zžwߨ±c«àæu²}ûv¦L™R­Þ£}ûöÕvBj B:ÄôéÓ#§NÚ‰Dþ”ä¼õq¸BÝ𼪖ÄNø“©ßôÏÜÞdœ@{àƒÚþ-×EÕ¶¹@°ÿþ <¸Nms£Ñ(;w°ÂÂB¢Ñ(W\q<ð'Ožä™gžá‚ .¨ôÏóÈËË£°°üü| X¶l¹¹¹ÕZÍÆËËËcÉ’%­p³<ÿ÷ÏÃÀm‡ nÞ¼™~ýúU»n̘1¬^½šV­ZU+È>|8ï½÷K–,á†n¨t.ÑßÓÑ£GY¼xqtÙ²eêyÞ§¡Pè§ÀÓ hÇÈcÒÊšs""ƒp»àRUÞVÕ¥5\‰çy=:pÝu×ÕØ¤ÿÀ§g~ÔTt~ìØ1f̘À#Ë®]»øÎw¾S­ áÂ…Õ Õã9r„%K–D>úè#<Ïû8 ýxÁj¹Œ1æì؈9W——{q7ß=jº0| >¼Öà C‡ÕR­ª­[·fÚ´i,]º´Z€â‘S§Níðw>’|tnö¿\\%ø`.ø(&Zð‘¹D¤®ÀIà™s >D¤Y0|Ðó¼N={öŒ<8››[§¶¹eee,]º”ÂÂBZáŠÎƒÀ&`a•K~LÆ¥´Ü­ª+’µs~D¤3ðîïê U=x.ß'Œjß¾ýÅS¦L‘º¶Í]³f %%% :”íÛ·3lØ0rss)//çW¿úŸ~úi©Syyy¬ZµŠ¢¢¢ÓõPQÓ±bÅ nºé¦:OHïÒ¥‹deeu©ÓÅ)&"9ÀÝÀ7qCÁ½ññn ç[±]ˆ¬¬¬gæÍ›wOïÞ½«m7uêÔ‰~ýú±páBòóó9ÓÄô¢¢"/^Z³fMV X­ª?…BóêóµcLST{å£15PÕ’ºÔUƒÁÛ‡ R-øxùå—yâ‰'(/¯x³¹¼¼œ'žx€¯}ík”——3cÆ Ž¯}&ܱcǘ>}zøÔ©SÛËËËç&9øÈ½[Þ79û¥*¯îbÃÿ^UßLÖZÌù‘ޏ´+€§TõÀy|¯ü±cÇêÚ¡ `ÿþýÌŸ?Ïóxøá‡¹úê«iÞ¼9mÛ¶¥[·nÔøØ¾}ûž.8¯*??Ÿ’’¶nÝz¶/#£jD¤‹ˆü°˜ƒ >Ê€'ùäN:•ð{zžGnnîéõx;v¤S§NÖù5lÛ¶-z>X}ODn‘WqÇpævâv»ªêCñ)ñTõÏóþ<þü„it]ºtaذaÕj@àtàQ6cÆ Ýºuë|U …nh(u1ÆÓPXb’Êó¼Òƒg´tíÚ•É“'³wï^üqž~úiNž<ÉÔ©S¹ð Šz€Å‹WûÇçøCøÄ‰»B¡Ð3É>Dd 0—þñRü :éü¸xøÇd®Åœ;häd\…yþ±.U>.¨í{Tåy^´´4qã¬ÂÂBÞ~ûíjÇcB¢]Œ¼¼<¢Ñ(ëÖ%¼Ï\rôèQ½Û÷ÝwsóÍ7'xTeÇgÁ‚¬Y³†òòò„M$RADZ‹È4`-.ÅóÜÿ£ÞÇ¥_]ªª?WÕCgú^‘Hä'[¶l îÞ½ûŒÏ«ªlܸ‘ßýîwe3f̈lݺõEUí‡'ªêªó{UÆc±“TápxÕûï¿?üª«®ÊJôŽc÷îÝ™:u*³fÍ¢´´”ï~÷»§ƒ˜Ö­[óÈ#T; >Š‹‹÷„B¡§âgo$ƒˆ\Œ»)X¨ªŸÄk…›õÑ7=únkÉ™Ñ.bnªášgÍuùfªÍÎÎÞ÷ÙgŸuITüXµ^#Ó¥KÖ­[Gyyy¥z¨æÍ›Ó§O :thÂçœVëtÿ^»víÅcÆŒ©ö{5~@`ÇŽÙ¶m¬[·ŽììlÂá07n¬Vpž——ÇK/½Ä±cÇμñ<;36mÚœq}ååålܸ‘Õ«WG¶lÙâyžw XF×F"‘=góZÏ—¿»t.ðø\Ü©UÀ£¸ÔÆ“çóápø«;vìØ¼hÑ"=zôé$‰PPPÀ»ï¾[V\\F£¿Ã¥KžÕß·1Ƙsgs@Ìyó»`ÝJ s@ü6¼“'L˜ £Fª±íLQQ³fÍ¢U«V ƒ˜'Nð‡?ü!|ôèÑ}þ俤O÷ Ësq“Îÿs$"ÿü3p i¯š&?­ëï¿ýíoÓ¡C‡jç_yå ÉÊÊ¢¼¼œÜÜ\òóóéÕ«=öÍš5ãÁ¬ô˜²²2~úÓŸ2a®½öÚ³^S4eÛ¶m¬\¹2º~ýz¢ÑhXU7E"‘õÀ–$è¬FDr/ãjoÚú‡Ë€çGUõÃz~¾Ižçý)???kèС^QQ ,(;yòdy$ù5ð›†8ùÝc:Û1I§ªŸ‰È3o¿ýö½ápØ7n\ ¤sçΧg€ÄÚïV BÊÊʘ9sfäèÑ£B¡ÐœWã‚®õp|ðq'ðOþ—Ó,øhºTõpvvöþ‹«Îæ—†õᇞ&âÛãæååñÆopêÔ©Jÿæsrrèׯüq¸ êZPP---ED¶E"‘ÕÀ¦T§ŠHs\ Ç—kâNmþüñ\[Ÿ‰ª¾*"# ¶jÕª1YYYÂáð¯qÁNí­õŒ1Æ$ &%Tõyvþüù÷†Ãaïúë¯O„tìØ‘©S§òî»ïT¥PVVÆôéÓ#‡:äeÉ^·ˆt®ó¿|'>GÞŸtý8 À¯Tõ©d¯Çd¶P(T°bÅŠ±ãÆ«ö»5V¯Q\\\m6G^^¯¿þ:ëÖ­«VïqÛm·Õi˜á¾}ûX·n.[¶,RRRŸ…B¡U¸ #é?+U‰ÈÀC¸À#Ö,,À é|)Áª~T1Ƥ &eü äÉÅ‹?F΄Üÿý•Ž•••ñØcE:t8 ÍVÕĽIë‘?ïãvÜÏɦøô?ÝæÏ@sàmàûÉ^iÖ_·{÷nºvíZéDü€À[n¹¥RØXÁyaaaµ¤yóæ5>Ù±cÇ(((`ùòåá#GŽ@Q(*ÖF"‘”×!Å èü2pUÜ©-ÀLÜ G«µ0Ƙ&ÎsNDä**:BÅL‘ þÏSÕ÷ªœGU·‹È“K–,y¨1‰ >öïߟ²àÃ7×Õê®ÃâZêÌzŸ÷ZÇ+ãóÀ±‚‚‚6Up; .dëÖ­ôíÛ·Ò¹I“&ѬY³3>A¬ƒÕòåËÃ;wîÌ ƒ‡ý cM$I<,'Éü4Å/ã ËcÝÅÊ€—€Çp]ã’Vpè7‰¸÷†À®þŽ0Æs,1çj/°¤–ó»j:¡ª;ü äh4¼é¦šº ºÎ=³gÏŽìß¿ÿˆ|œWgœº‘K«qó>^QÕ’¸Óßǵn=ÜiE¬M›ˆ´.®º‡B!Yµj'N¬6ì®sçΧç~T @Ú·o_ãs”••±aÃÖ¬Yë`u"åååI©Ÿ8i<LòâNmÄsê2³ã<×0ø_ÜnKNÜñ ÀUõùd>¿1Ƙscˆ9'ªº×rö\¿CD —.]zðf­¼¼œY³fEöìÙs,ÅÁÇ…Àm¸ÚŽåñsDdðÿ˯©êšT¬Éd¬ .踷K>+--½dÇŽRu6¸šŽ-ZT;^U8fË–-¬Y³&²~ýzÊTum4]Fw&sG¡&~Ë鱸ڎ;©˜ÛQ¼Š«í˜—µõÄuÓú#®=vÐß_ß\ ªêÓ)Z‹1Ƙ:²6¼&-D¤7p?àyžéß¿?wÝuW Vl|‡B¡?VÙHöÚb-wâZî†üãps :«êéZ“I/ ½Ëüø"‚ëè´W+t"''çüüüÞ·ß~ûS ãÅ:X­\¹2ºfÍ¢ÑhÄo›»Ž4´Í‘>ÀÃÀøÜ²•À,àU=š†uy‰þLDäZ`1°ZU¯LõºŒ1ÆÔΓr"Òø[ °ø  ÞÚ^yå•^«V­díÚµ‘ýû÷÷ƒ”µË‘ËqE´\{Ð=þqWl>X KÕŽŒI¿ :pô‚q§Ëpõ?W­9‘ÙÙÙwüð‡? œ©ƒU,è(((Ђ‚‚hyy9"²9‰Ÿ¨j¸>_W]ùísïÄ¥X]‹Û˜? ÌRÕÂt¬­.D¤(QÕ.é^‹1ƘÊ,ˤ”ßYê\ð±ø«ª†Edz(ê¿bÅŠAžçå„B¡‘Hd^*'Šûïrßà¹4|ø¾‹ >J€»,øhœDäb*‚ŽîTÜt¶â‚Ž­g 6ªêñÅ‹·¹îºë^PTTDAA‘’’ ÛC¡Pn%éómj""Ãq»÷-ýÃà-`6ðj:×W"2·ö…i^Š1ƘlĤ”ˆÜ N3Ò‘¶Q¹øùñ%¸ZŽþ@«¸Ó áïrEgSÛ "—yžwïÝwß-ƒ àСC²zõêðÁ`°( ­Ö§3¨õÓ ï¡zAùNà`ºªnOÃÒêDDzCq»T—àº×Ý ª[Ò·2cŒ1‰XbRÆïXs3®P÷iUÝšæ%æ¿óý·@xVU7ûÇ[àê>úÏ«ê=é[¥©~jQÜjâº'!\=Çf\jÕy¥ÿ‰ÈÏónìܹs4jQQQ0 ôƒŽuªzì|¾ÿy®-˜„+ؾŠñÀ ¸Âî%é(v?["ò0®%fð`¢VàÆcÒÏ“"Ò ˜Œ»Éy[U—¦wEü®FãÞ ßߺSDf_>eÒŽ©¿~§;.Øèt¢zjÕǸ cG}×\ˆH`.i³ª¨Ïïë¹t܃ë ³wÿ|*ë®êƒß¸'®+×À·qרêÌ4.ÍcL€˜¤óßqþ[\zË&à¹LzWÕÏÿ®°ø÷ªZ쟼»qcï¦6þMoÜMè¥TÞåP\ýQl—£ÑOæ‘îÀƒ¸Àãò¸S;'q3;6§cmÉà$kqÝʺ6´€Êc;+B7Iå¿û|.ø8¼œaÁ‡Œö¿\|´þàÿo >2›ß@ »U¹ä®€ü\yÊš¤‹ˆ\ÜBõ«Rà5\àñfººl%“ª‘ù¸Vßýei^’1Ƙ8€˜d{'º·óQ–æõT•´ÇÅÇߤü—¶ó1ð¯iX—9ù¥þGÕZŽ(°7œîc -ƒûRͨ‡ãv;‹Ux˜ƒ«qj ;üÏ™ö;Çcš< @LÒˆH?à\ÊË+éÎ}¯JD¸ù‹cÁ‘ˆ\« ‰_ª:ãÁ¤‡ˆdݨ˜@Þ¦Ê%%T´Éý´)ý½‰H_*R¬zÄÚBEŠÕŽt¬-™üz–UUߨ‘Ûqm³wëÒ±6cŒ15³Ä$…ˆ\ÜŽ+ö}_U×§yI‰\…+Â-Æ DŒ¥­ü·îߨê’ô-¯ió›tÂínôÆíHâ. ãºÅÒªö§|‘iä×¹Ü :†SQXx·Û±´‘ïüüÈ‘qÿ.âZò–SU5’ÆõcŒIÀSïü|ü»p)1Û€yé]QuþÍíÕþ—ïÅåÁÿw³» øçt¬­)«’VÕ 7°2Þ!\Àñ °]UC©]azù)VcqAÇ@sÿT÷sö$ðbS¨qñ=ŠK5\‡ PwâZÿ—ªnLãÚŒ1ÆÔÀ“ ޏ”˜—T5šæõ$ÒWûQ¬‘>À÷üóßTÕ’4­­É‘ qF,èhWå’2`;~СªGRºÀ !"ýqms'S9Åj#n·cvcL±:U}x1Ýë0Æsv,1õJDr+qu/gp±ë`ÿóÚØÄsà·À¸Î@vS“þ;ø¨8z^Ü%ñÅãŸâær4Éé€{wÿ‹¸Ÿ©˜ƒ¸éäsTue:ÖfŒ1Æœ @L½ñ{ïßâ¹(“&Çóë<®ð¿\훀kUZ|=MKk”ÎЭ àÇVU-Mí 3‡_h.è¸ú§Ê¿Oo4µÔ3cŒ1‹ ¦^ˆHp'îær;°8­ ªÝe¸»}ªºÛWþçþ¹ßejàÔPøÅÑ—Æ}T­ã8NEÀñiï’¥Œˆ Àu±z¸8îÔ\1ùì¦VdoŒ1¦ñ²ÄÔ—‰@gÜÀ·3´î#¦ÿùcÿóý¸—£T"¦ŽD¤%.•ª'®ž£¦:ŽXÀ‘Qí˜ÓEDºàš5LÆÍ£‰)þ„ : Ò°4cŒ1&©,1çÍ÷ö*\ÝÇK àínþçm~Ç®û_ÿBU¥iM †ˆ4§"àèIÅÀ·˜®‹Xl—cw†¤)#"­pí©ïÃÍ©ˆµ>ü·ÛñNS­{1ÆÓ4Xb΋ˆ´&ù_flÝGŒŸcßÖÿ²w#Ø Wøü›t­+“ùªzàþœzቻ$V8¾×vyG\a“çÿ››ˆû·v nV¸€} ®®ãOªz,=+4ÆcRËsÎüºØ¼ídvÝGL+ÜÍó)\jÐ÷ýã¿nJ“³k#"9T=q]«â¥zÀÑd Çñ늮ť÷ÝIEÐ ° ×Åê™LØ1Ƙd°Äœpu%d~ÝGÌþçRà @?à00=m+J3?àèNEÀљʭqöãŽí¸€'S·Â†CDòqAÇßP‘ê°xxZUW¥cmÆcL¦°Äœ0Ú2ÞGU±‰çYÀ×üÿþmZÿyóë.Á—à†FV 8R9à°¡Œ5‘^¸ôªû¨hï ®©Á‹¸ÝŽ… $@7Æc’ÎsÖüØØ¼÷XI±ÿ¹.E& <–¾å$—Ÿ t1•ŽÖ .=LEÀ±­)dç¯}º×:w)jeÀ;¸.V/ØN‘1ÆS 欈ˆ·áf;ì¤wEgGUOŠÈQ\ú˜¯ªêî4/«ÞøÏݨ8ºQ}ð_W€¿ø ØiÇ™ùÅø7×S1$0 ,ÅOY'5cŒ1¦v€˜³57\®×r·!¶ Ý ôÿ»Aï~øSÆ»R{:U)®-n,àØm]ªêÆ:nÀ5[¸•ÊC—ãÒ«žSÕ¢4,ÏcŒi,1u&"±þ—oªêÁt®ç<q7’'©HÉÊxþÀ¿.¸€£‹ÿQuÊ8¸ÚƒÏ¨8ö«ª¦j tŒÇ·-ãNïæâ†nNÃòŒ1ƘÏS'~jÏpƒÓ6ªêê4/é|\ïÞ \ç§•-Í”›t=ípío;ú]¨|#ÁµÄÝEE:Uƒ ª2E\]Óp;ÆÞŽ+&NU—§~uÆcLãbˆ©«€‹p;¯¦y-çk¢ÿù%ÜÏÀuÀå"²@U·¥j~ ÑhïÄ‚‹ì‰pµ7{p­]÷5Ð4¸´óÓ×nÅ×Q¹Væ\Ðñ‚ª®HÃòŒ1ƘFK2äM_“Áü–»÷àZîÎIåMz}‘ޏƒn—¡/0Š›Ïƒ¸Aq;]ªzâ<Ÿ/d´Æ AlCEÀÑžŠBæªB¸Ù{}þç"U Ïzšº¸îUwáþÞã½O×qÅäïgÊŽ˜1ÆÓØØˆ©•Ÿš2ÉÿrIC>|#üÏkýT¥•"²ø<0·Ë»9÷?J€¸ˆxY¸‡ñÍp)SR»®îAÿ#p¶¹õCD.nÄñÝ«6àŽ×TN)®Ô IDATue–gŒ1Æ49€˜ù)B·ân¢w Óº úë~u:—ßDÞ‘y¸Éè=p]¥:mýóQŠK];ê>„ 6G-Ш"Ò ¸—^5‚ÊÁVR‘^µ% Ë3Æcš4 @Lm>ôÆ¥5Ô–»Uõô?Zõ„ßš¶Ðÿ@D.ÀÕc´Àíf4÷?ª=d”§â>ŽYËÛÔ‘+p»u·WS1PqAÇ‹`ÏcŒiÐ,1 ùi+ãý/ßjDÃÕzøŸ·ŸéBU-Åu–2HD²pÓìoÁ½ãNG%¸ ã%UÝ™úcŒ1& @L5"â·ãrå·âRV‹ØÜ kUÛ‰Hk\G¶I¸nfñéq¥À|\—¶Wm8 1Æ“™,1‰ŒÂ »+^idÝ€âÓrL "—áŠÈoFR¹ˆü®sÕkÀÛçÛµÌcŒ1Égˆ©DDºPÑêõF8Ô®Ìÿ|¦îT&MüIä£qAÇD*§Vë\õn§ãC+â7Æc @Ìi"Äu àÚÔ®Kó’’a.Àê™æu˜8"ÒlLÄñbðð®]î')_ 1Æcê &Þx*¦¿‘æµ$K¬ûÕ€´®¢‰‘¸T¿ ¸ £o•Kvoúó,µÊcŒi<,1ˆHO\Û]ÅÕ}œJë‚’gð/ÀD‘FVß’±D$äã‚Üñ¸îU9q—Dp­r_ÞVÙß1ÆÓ8Ybb©W“pÚ+Uukš—”LKpÍ;ã š¥w9—_<>¸´®rÉ'¸`ãmà]U=žÚcŒ1&,1ànÛá&u¿æµ$•ª–‰Èàï€Àz#"—₺Ѹ€ã’*—µÉ}pØ@@cŒ1¦ ËrhÚDäàaÿ˧›B¯£¼€ß¦ª¯¤yI ’ˆôÅ£pAG÷*—”ïãv9biUÖ±ÊcŒiâ,iÂüÔ«¯àv?V¨êëi^RʈÈÏ€û€aªº=½+ÊlþpÊþ¸b±]Ž.U.+– q;KKq-‘1ÆcΑ M˜ˆÜ Ã¥^ýŸª–á!†ˆäƒ-ÀhUÝ“ÞUeiƒû·ÿQµ†£ X,¨êÉT®ÓcŒ1  M”ˆt¾„+<²‘ž'$"qó%z»;TuYzW•z~‡ª~¸ c¸ÿ¹àU¹´·Ã±·Ëñ‘ípcŒ1ælYÒùé4Ó€N@ªþ9ÍKJ¿ýðk@..…èWÀÿk¬ïäûiw¹¸Ÿ+ýσ€æ .ß‚kû!°7œ2’¢¥cŒ1¦‘²¤ ‘Q¸.E'ß7õ!oþP¼?wû‡vÿ<ÖÿlD¤®n#Š€c àò`.ÐøøPU¤h©ÆcŒiB,©G"r7p=Ð7XíS\·¥õÀ†LHW‘‹€Gp ^PÕui^RÆ‘[€ß=ýCG?Oã ª3òÝé\ 6àÒ§®:Öð#À*`µÿy°Å:TcŒ1&,©'"ò5à·µ\Å$ëpIìófU-Oþ é ÜVÕgRõ¼ …_œþ nFÈeq§Žóp×+ÂT”"ÒÅ>zÄ}ôÚÖòðÀâ‚ ›¿aŒ1Ƙt²¤ˆHk\sóîÝ»óðógÏ6oÞÌæÍ›Ù¿márí×ù€µÀÖd½ã."Y@vc­s¨~ÌHà\ÀÖ®Ê%a\@¹Õÿ؃Û19æÄþ;þÏX€6q_gíývqÿÝè\tKðÜUÅvÛ6ý À&U-©ãK6ÆcŒI @êˆ\‡?AüÝwßåÚk¯åرc:tˆ“'ORZZJII EEE¬[·ŽåË—³víZ>\Û·-ÅÝHÆï–¬¶«ý¥¥”ß%jnbü5¸ZŠN)^Æ!ÜnÆö¸ÏÛü-M©…²1Æc6 @êA,ýªE‹8àêvU•h4ZéCU9yò$ÅÅÅœˆ 0}ì¶“aŒ1ƘFÁz "ÿ|cðàÁ|ðÁìÙ}ˆ»'ý”‹;¶!w`O®Ñk>9ÙÙYÕ’hÔ݇ÆvIJKK9qâÄéÀ¤  €yóæ±yóæÓ×Ö W@ýýL-–6ÆcŒ1&+Ý h$úôéÓ€-›wóé'{i×¾% æòü³‹)>v’`0@û‹ZqIôÐ!ŸëÃÕŸ¿Œìì,²²²hÕª-Z´ ]»v§ƒ«¯¾šÉ“'SVVÆñãÇ)..æàÁƒðÚk¯QTT[C6ð]ÿó7Rþ'`Œ1ÆcLXR?þ{÷\e}ï{üý[×då ‹pKb¸ˆ-"H+(Q@Ê>vö.míÕãLgZÅٵǞ3m§§µi;ÓsêñôX»OëQëtv±E‹D"`E ‰  !ÉÊu%ëúü΋µH$ÜXp¶Ÿ×Ì£ð\Özž'ü‘Ïü~ßßw œ õûÉ øYvÏ¼Ì ‘HœÖS´ê¤µ¥‹×6Õñçç¶%ðù½ɧ¢*È Ÿ˜ÈÍóª˜9k2éY;^¯ÇCnn.%%%TUU1wî\¾ùÍoâõz©­­åÑGåðáÃÿ€ˆˆˆˆˆ\£@FèôŠR•00€aôè<¢ÑÄÀó,bl°;óÌõáÞ~Nžè ­µ‹öÖnþ¶úžþ?ÇZäù GQQ5–YsÊYò™™x<.’É$ÖZ’É$‘H„x<ÎÍ7ßœ šS'""""×,‘+¼S§N ñp+…Å„£ñs§ô‡q“J7©4s(OÒê!ÔÖE¨­‡ƒ´òúkP½äÜn3ècÇáäÉ“tvv¦wwi-‘«Id䦦ÿikë¥tÂú#‰s^t!ù£óÉϤ)ÐÛÕÇ–Wv’›ë#Ó×ׇßï'H$0Æ ì5¢Îæ""""rÍR¹©ÅÅŧúÅ…ÃQ&üôEâ—å Žmgâ¤1@ª¤¸¸˜H$‚1&³  õ—åKEDDDD®‘›g¦_…B½¸\n<~?ý‘¡Wõ™ÿê=„D&Î'¿ÐÇ㢯¯X,@nn.Žã`Œ¡¥¥%}ªê?DDDD䚦22SÒ¨ªª ½½·ËM²':èD7¼Ã{ÝãÇ““ƒ×ë%‘Hàr¹p¹\ """"òÿ‘™ PVVFAA½½1¼>ïy/º8g–Ǫ¸nÌ™½Æàñxp»Ý„Ãa¬µ´¶¶¦«]DDDD®i #3h¬h4¸ðyÏ1­êKî^ðK¦¦HOOkm¦½½½D"SG¢¹¦)€ŒÌ  §ZzR£#)"¤”MH §GYÇ!‘HÐÙÙ9púU›µ¶åì«EDDDD® #3h Þ––¼çý&—Ë0j”Ÿd25Êa­ÅZK"‘ÀqNž<™>U£""""rÍS¦ÓKðVÀ™¦¦|—¥þãŒÂQ~Œh4ŠËå"‰“““¾‡# ªÿ‘kžÈðU^0r¢wˆôa~œ66˜œYv×ãIýÈ’É$ÆNœ8‘>U# """"rÍS¾).—‹ÊÊJbqïEôõ¸&¥ê>zzzÈÉÉÁƒÛí¦»»`à X """"rÍS¾©“'OÎL‰úç‡oçèÑNÞz³‘Þ?EWwŒK«H?{´dÂøÔHNNÖZb±‡öövZ[[®€õÞžEDDDD$+@†oмi&òO+>µ7ÐßgÏ»'Ù³ç$'N†q’—¾<Ö˜’ÔˆŠ×ëÅq\.Éd’¾¾¾Ó¯NZkÛFô4"""""Y 2|eåååC´Öâ÷»™û©2æÜÄqŽëa÷®{èë‹_ð ÜCNŽÇqíwcÌÀ°ÞÑ“ˆˆˆˆˆd‰Èðí¾ðúë¯ÓÒÒB0<ëkxŒŸÇ¸q8ŽCœ½{Û9¸¿‹öPÇ9{t$?à>ë3 Uwò‘ô…ƘÀ&`“µv׈ŸNDDDDä P¾ï8p øºë®cÞ¼y,_¾œêêjfÍš•9i¨à÷»¹ùæfÏ.Æqš{©¯ƒ“'"D"IFyÏú ·ÛM<ÇCsssz·X|zÃÓ¼ ¼l¶Ö†/ë“‹ˆˆˆˆ “9×/ÈraƘ*à߀÷WTTP]]ÍÝwßÍwÜ×ëÅZ‹ã8çÝÒçtuE©¯ï¢¬ÌOY™ÐñôÔ«ãÇóío›D"ÁC=Dcc#›7o¦··÷£·öÀµÎGOÉ2Æäw÷ÿLx<77—[n¹…¥K—²|ùrÆwQ!ä\[2™¤¡¡Ã‡ó£ý€U«VQ]]M4åí·ßfëÖ­lÛ¶½{÷5³øGkmâ£DDDDD®4ËÈ3Ô(âs3}út/^Ìm·ÝƼyóp¹\—B:::hnnfÇŽ<ùä“cxä‘GøÞ÷¾wÖw;vŒ×^{Í›7óꫯ\²÷§ÖÚ_‰w """"r> —1¦øoÀƒœîŽ^VVƃ>ˆ1†M›6QSS30P\\Ìüùó¹óÎ;©®®&??ÿ‚!¤¡¡H$Âßþö7Ö¬YƒÏçãË_þ2¿úÕ¯Î{555Üwß}é)Z ÖÚ)ç½@DDDDä Púc¾ ü(†Ô”«|û￟x<Žã8,[¶Œßüæ7<ÿüó,\¸;w ……B¼üò˼üò˸Ýnnºé&-Zļyó˜1cÆß‰D8~ü8*PÏÉÉ¡··—ÜÜ\Ün÷Y×$ vìØÁ­·ÞÊÆ®3Æ«ô)""""Y¦2Ƙÿ ü÷Óæž{îá‡?ü!~¿Ÿh4:èܹsçòì³Ï2yòdî¿ÿ~šššx뭷سgGŽ!™L²k×.víJ­ ;iÒ$.\È‚ ˜3g‡H$‚ã8´¶¶òî»ïÇ™9s&ííí@ªaa  ??ÇÃáÇyöÙg7nÜÀ¥‚cÀ\cL3©&†É,¼.MÁ.cÌB` àš={6?ÿùÏ™;w.ÍÍÍÄãC7üîw¿ËöíÛù¾Àm·ÝFAA‡ÎÎNvíÚEmm-õõõg…—t!{^^.—‹mÛ¶ÑÝÝ À‚ xì±Ç†º?¶lÙB("Ç©««cõêÕíÀC§OM­@ ©0ºïGDDDDd( ÃdŒyø§‚‚Þÿ}ü~?§N¢¿¿ÈkúûûyôÑGÙ´iååå,X°€Y³f‘““ƒÇãÁår‘L&9p൵µÔÕÕ ;Ì™3‡ÇœœœœAû{{{YµjEEEäåå‘L&ñù|lݺ•W^y øþ9>¶Øo­=p©ïDDDDDäB@†ÉÓŒùÁ~ÀÃ?ŒÏçÃår‰Dèì줷·—drè™M555üþ÷¿§¾¾·ÛͤI“˜8q"%%%äççãõ¦Æb1Ž=ÊáÇiii!‹PZZÊ7¾ñ V¬XqÖgïÞ½›C‡áñxˆF£øý~ ‰F£ÔÔÔ°aÀ:àççy¼cÖÚ×Gô‚DDDDD† a0Æ`4@~~>™c‰D‚ÒÒR‚Á ½½½„ÃaÂáð °,XÀ‚ 8|ø0o¼ñF&4lß¾ý¬Ðâñx7nóçÏgöìÙÜvÛmTVVžuOÉd’—^z‰üü|Œ1D£Q<ÉdÇqÈÍÍ8šÒ~žÇûØ5ÌW#""""r^ Ã`­µÆ˜ ¤¹¹9³ßq¼^/Žãàv» ÆŽK___&¤ÃHee%•••|ík_R!"ÓÓÓƒµ–‚‚òòò†\Ùj ¦¦&öîÝK^^===@ªn$‰àõzI&“455Q__Ÿ¾dÇã;­µ #{;"""""ç¦r Œ1eÀ2R£m@ISSÓ禗àµÖâñxäääPZZJÿYaÀívSXXHaaáṖTSSƒËå cŒÁívÇÉÍÍ%‹ñæ›oòꫯ¦GWÞj?ò1ý@µ¶í’^ˆˆˆˆˆÈ%R¹H§»œ¿Åé©W@àÃ?ò|km¦™`zù\ŸÏ‡ßï'777Fzzz‡Ãç¬JWWuuuø|>N:•)4Çãcðù|„ÃaÖ¯_Ï{ï½—¾lðÜG? Øl­\ô—‹ˆˆˆˆ “ŠÐ/’1f#°x̘1$ ººº2Çî¼óNî»ï>>ûÙÏf¦` µ¥ë1ÇÁår‘››‹ÇãÁív“H$ˆÅb™0r®¥|êëë 9r„¾¾>¬µ¸Ýn¢Ñ(>ŸD"Akk+«W¯¦µµ ü_`¨Âò~`½µ6:Ä1‘ËJä"c¾üñ“Ÿü$=ö¥¥¥455ñÔSO±víÚÌÈŨQ£øâ¿ÈW¿úUfÍš5dðjs»ÝäççH$Äãq¬µtuu š¦Ç9yò$±XŒƒ’L&q»ÝXkI&“x½^b±ûöícíÚµésx 8zŽÇ‹Zk_¸òoQDDDDD伌1ÿ< Ü x_|ñE‚Á ‘H„h4JNNlÞ¼™'žx‚ÆÆÆÌµ7Üp_ùÊWX±bEEEg…Žp8Ì¡C‡7nyyy™éZ~¿Ÿ‚‚ q¹\tvv‹Å8~ü8Æjkk …B™Ú’X,†ÇãÁZK?¯¼òJ¦›:ðð/@ßy3 l°Öö^™·(""""r†ÈŒ1£€ÿ |-½ïÖ[oå‘G¡¿¿ŸÉ“'ãóùèíí%‰H$ƒÄb1V­ZÅ3Ï÷¹Ï±lÙ2rssñù|Äb1š››yÿý÷q»ÝÌ›7x<ÎøñãÙ·oǧ­­-ÓÛ#‘H°mÛ66lØ^¶w?𿀎‹xÜÀn«""""’E §cþðoêDZråJxàÌ/ú·x€cFÏ÷fÚ´iüú׿fúôéC[4%PUU…ßïçÈ‘#¼÷Þ{œ8q‚H$ÂÊ•+ ôõõeVË ‡Ã¬]»–'Ÿ|’ýû÷ŸŸÏêÕ«;vì iVª÷¨««Ãår …8tèÏ=÷¡PRËèþ Cw7ÿ¨ð¦µöøe}‰"""""IĘg€ÿPVVÆÏ~ö3¦M›Æ„ 2àB!dàV^^΄ H$Xk)**Êt*2S¹ÒaäÃ?ä`ß¾},_¾œÿøÇx<’Éd¦zWWǧ2ömÛøÓŸþD,ƒÔÒºÿ8qÚlµÖ^Ìô,‘+Âý“ŸüäjßÃUcŒñòòò˜1cÕÕÕ|ðÁ¬[·¿ßÏìÙ³©¨¨ ‰œóú»»Ùµk‡ÎÎN3S´ÊËË)((ÀçóeŠÈ£Ñ(;vì`êÔ©lذ€ÞÞ^Ö¬YÚ5kƒ,Z´k-[·n¥¥¥RÓ¨ž6žã6,М:ýÿ8pÌZ{¡Ú‘+NS°ŒÙ,¾þúëY¹r%yyy@ªîb„ Lœ8‘D"Amm-õõõÌœ9“3fàóùèëëËL½:u꯿þ:>Ÿ/}éKÄb1âñ8±X,³y<æÌ™ƒÛí ¡¡¿ÿýï8ŽÃOúÓôhÉ›À'Â!n·‹Ô¨Ç‡ÙŒÔ²» ©ž""""r­R1æS¤¦3yý~? ,`É’%ƒÁÌ9Á`òòrŠŠŠ8pàÛ·o§  €o¼‘¢¢"Ù¸q#¹¹¹Üwß}XkxÎÎNÖ¬YC<ÇZËã?ΩS§ 0ÞfŸÆØÔ0¸«y°ÇZ{4+/KDDDDd„>öÀóàq äô߹馛Xºt)×_=ÖZ ©¨¨`üøñ´¶¶òÎ;ïPWWG,£¤¤„¯ýë™Ï@Âá0[¶laÚ´i,Y²„¾¾>Ö®]K8ÆZ‹µ–_þò—twwZk»²ÿFDDDDD.?0Æ`)ð}àvRÓŸ=z4wÝuwÜqÇ U±&OžLEEEEEìÝ»—mÛ¶‘L&Y¸p!~¿ŸíÛ·3~üx>ó™ÏÐÑÑÁƉF£Xkq‡ÖÖV~÷»ßÑÓÓ©FˆÿJ*€¼i­=y5ÞˆˆˆˆÈ•¢rƘOÿøàðù||úÓŸÎÔ‰¤G1ÆŒCUUÁ`£GòöÛoÓÜÜ̬Y³¸ë®»hnnfË–-8Ž“¹¦©©‰§Ÿ~:=õªø)Ð ¼a­í¿ZÏ-""""r¥(€\cÌXà!à?‘* ÇÃŒ3X¼x13gÎÌ„ ŸÏÇM7ÝDYY>Ÿc õõõìÞ½;s޵–wÞy‡¿üå/镯¿öïXk«õ¬"""""W’È%0Æø¯’™žÞ?qâD–,Y2¨N`þüùtww³gÏžLðèëëãùçŸg÷îÝéËßþì¶ÖîÉˆˆˆd—È0c’ "ËI54dÔ¨Q,Z´ˆÛo¿üü|òòòðûý´¶¶â8;wîä…^HO¹JÏ“ªû8h­ÝyµžEDDDD$[@FÈs=ð_/~¯×Ëüùó¹ýöÛ)--eçÎlÞ¼™æææôeÇ'IM½:@jôC?ùwOä21Æ”+I-£[rŽÓÂÀKÀË@x×ZÛ|ŽsEDDDDþÝQ¹ÌŒ1>Ru"ÿ TùÀàm`3pŒT£ÁFzˆˆˆˆÈÇÈtº§H1ÄN-¯+""""g """""’5®«}"""""òñ¡""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""w,(PIDAT""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Yóÿ¹&&l•|ÎIEND®B`‚lasso-2.8.2/docs/lasso-book/figures/PaxHeaders/sso-brws-post.png0000644000000000000000000000013214404126117021637 xustar0030 mtime=1678814287.605763414 30 atime=1678814287.553763118 30 ctime=1678814323.161965564 lasso-2.8.2/docs/lasso-book/figures/sso-brws-post.png0000644000175000017500000013212214404126117025110 0ustar00bdauvergnebdauvergne00000000000000‰PNG  IHDR ¡™Ð< pHYsÊ&ó?tEXtSoftwarewww.inkscape.org›î< IDATxœìÝw”Uõ¹ÿñ÷sÊ4Ú MÁŠèEQ‘`o64bŒ‰%ƨ©liæ—ÜäZÞÄXb4¢1±€Ý¨\5*ÆB•"Šˆ‚SOy~ìâ™Ã˜¦òy­5ëÌì³ÏÞß™µ˜á9ß§˜»#"""""Ò½Ù|(‘£DDDDDD:Œé0 @DDDDD¤Ã(‘£DDDDDD:Œé0 @DDDDD¤Ã(‘£DDDDDD:Œé0 @DDDDD¤Ã(‘£DDDDDD:Œé0 @DDDDD¤Ã(‘£DDDDDD:Œé0 @DDDDD¤Ã(‘£DDDDDD:Œé0 @DDDDD¤Ã(‘£DDDDDD:Œé0 @DDDDD¤Ã(‘£DDDDDD:Œé0 @DDDDD¤Ã(é`fVafC̬º³×`fUázºuöZäóOˆˆˆˆH+™ÙÁfv£™ØÂ—ì,În¿U5ef]̬g3O®ç¤‚ófÖÓ̪:b}²ùP""""Òz»»töBÖã`…™•µðü­€À·ÛŠd³”ê숈ˆˆHçr÷)€uö:dó DDDD¤™Y 8Øxxª¯ ìTó€çÝ=_tNo ;ð6 gÜ=Wpî  Køå¶f– ?_éî+Ã4«-åî¾ÆÌº†ëènfC n½(¼îþN3ëï®ý-w÷ }¿²yQ –ˆˆˆH;1³À+ÀãÀÍÀ£À `h3çw7³ÉÀ|àNàÏÀ4à?f¶]Ñé?%¨Û8˜< üxxÎÌzœû0.ü|NøºÀá±iZr$ð\øùW Î_t~ ¼6ÅßC×ðw*øR€ˆˆˆˆ´3K'¨ ™ôvþ \Wâüð`Ap±=Ð8…`7bŠ™U”¸ÕíÁʰðú·{‡÷ŒìL ?߉  \ÛÌò¾~~GÁùC5Àþyf‰×~™ H¹©™kËfNˆˆˆˆHûì üÑÝîîKÝ}ð5‚ŽbǤQýÚÝ/s÷ùî¾ÌÝÿ|‡ ùR‰×Ýéî—ºûìðúß–c£Üým &üò-w_~¬,µpw_ DéU« Î_¦‚ý ˜ œ¦˜:ø¸k}?Ù|)i‡„.<¦%ýyÝÓ9¶Ôù¡ûÃÇýJ<×ä?úîÞ@æµNzT[ ¿‡ vuŽŒŽ›ÙA×î^ÓÌËe3§DDDD¤} ß*ñÜÂÇ¢Bï›ÙŠÂ>Ù1éSâuKJ[MÕžnji:Ë$úüÆv¾·|†© –ˆˆˆHûˆ °[ÚÞ6¾fmæœR]§ò%޵;w_efw_ ‹Ñ?N^p÷×;cMòÙ DDDD¤},‡ï=WÜÑ ‚’1Àsîþj;¬gc¢–œðõðc1Á®‹v?d½”‚%"""Ò> Ï(!˜¿q†™-!h[ü\âüÌòørØ’÷:‚Ú^-v¿JÐQëÁM\ÏŒðñj3ûfºû¬R'»{ƒ™½ Œ3³ €¥áSÿp÷LÁ© ˜q²5p»×nâúd3¡‘v¶«=x¸Œ ð|ð_Àyë9ÿ†ðqAêÖL`2°#Ÿ›âÏóBŽ ï&nà5gLo¿:<ÿn‚ ªÐ]@ÔÎW³?dƒL*EDDDZ'œ:Þ øÐÝW=— ¸ AǪç€4A ÛÄõ¶ &X ¬¸û‚¢szÝ·Ý=Wô\? ‹»—ê¶…™õ!¨×Xéî+ͬ ØXîîkJœ_>Ÿ…ÁRô\7à=à5wß·™‘HLˆˆˆˆˆl23û>ðkàKî®úÙ  """"²QÂBú³vq¾OÐÁkDñNŒH) @DDDDd£„ie9 x øº»ÏíÜUÉg…‘Ï)3Û8 xÊÝçµàü타ÇܽÔw‘VS^‘MrO-:¼– éià/îÞÜDó޲;Á`ÀS  À¨ðü¾‘6§6¼""""›& Œ$˜t¾2ü(#hmûgàa3KwÞòXpZ8‹#ffÛc€ûЧ±7øßð:ÃÝ}g‚ÀâF‚ ¤øüÀ?‰½Ü}wߎ `àžpRz¡ràà`w¯¯ÿlsk’Í‹‘Ö©4³!áÇ^fv)Áä³» …ÞÎw÷w_ ì ÜáîñùîþÁ„ñ^)[„]µþl|¡èÚ§ܺõž T?t÷Ùáu¸” í«Ø@5p¦»¿\°¾—€Ë€mqE¯I—¸û¿Âsóî^·uÉfBˆˆˆˆH댄/?>¾âîÿ):÷wÏ‹‰É%®}wø8¦àØ-áãiÑp7ä‚ô¨'6°ÞÑáã? †AÈ?Jœ(P ,6³ÿ2³‘ÑÁ®©^ÅŠ[‹ªi­7 j; ¨ßx ˜íî %Î]RâXßðñÝÏ-ûEÜ}¦™½ œhf†; ƒ_”pŠõVF»0ÍܯP‚“7×sÍꢯ7°ÙL)i÷Üý¦ž›+q¬>|ìVâ¹nEçDn~Lî$Ø q6œ~Ðt1³D‰`¥{‰ó «}ÖsÍ‹¾Î…;*"ëP –ˆˆˆHçŠvv+ñ܈ð±¸{Ô]ÄiaûÞ€çÝ}}»…÷+v(ñÜðÇfìšäÜ}a3µà¾"€‘ÎöO‚‘ ̬kt0ìŽuqøå½…/ÿÃÿA}Æ@WÖ-xoÎ}ác“ŽWf6øR‰ó£]•ßšY²øI3«4³ÊÞ[D)X"Ò2á0«!ä– ܽT¾r§0³+î~Fg¯EDdc¸ûÛfv0 ˜ff7¤\JPÛñ·‚9 …n%Øù¸¨ã“‚õ ù;ð4pF¸{rA àï´ Þ¥èü»€c†¾hfÞ_³p"°?ðF ï/›9 "²^f¶ðgJäþšÙ|à‹îþz‡/l]R:u@D¤½d þþ´çÖ…ç×Jàî—šÙ2à"à÷áဟ¥< ¼BPþ°»—ºvMxß5÷ʛق’ v=Ö„_¿LÐú·¦à|7³¯/ß~[pý…PáRK ñEJ2Õ‰Hs̬š '|?‚?L'øƒ8Iðîܹîþd§-2Nõíãî×töZDDZÃÌú üÀÝK­·å½ªæŒ|àî-|M5A±úÍtúY/ "Ò,3;›`2îµî~a3电ô–ˆˆˆˆŠÐEd}†/7wB©àÃÌö7³ûÌì]3ûÀÌž5³/—8ï[fv·™õ0³šÙfö‘™}ÑÌþdf%w3Ì,mfw˜ÙÏ Ž]if7—8·ÊÌ.6³‡kYdf˜Ù©%Î>÷ž™-5³GÍìðæ¾wÙx @Dd}¢Þãͬ¬%/0³oO{·lÕÿÕÌ®(:}/`"p;ð`A7˜FÀ: +q›#“)Èi&¨9¶h-Ýg_ôÇ¿“ Ø²œ ϺðÜ«Âçt›¹‹ èþa3;½%ß»ˆˆˆl˜R°D¤Yáàgì„,¦ÏO»ûÛ%Îß x˜îîkÂãi‚ú‘ñÀpwŸ¿• Ždp»/+¸Öþ]Z~åîÝç>àh`»/ =^»WÁy7g?v÷_]£Ÿ»~~(ðX¸Æ/G»:a;̧ zår÷÷‘bÚ‘f¹ûj` 0è œCÐíd‘™ý§DzÒ™@ø^|„×ÉWüÎ9¡Ä­®, >BÏ €¯ö7³ÞÌcQðQJØ“þT`pU‰ï탂/Ï%Ø!9¿0¥ÌÝ׆¯íÞSDDDZImxEd½Ü}1pb¸p °7A ÔéIÝ=µwøx°™íWt©Šðq»·y¥Ä}ÝÌn#h?yA»I€/Lð½µø5E†¤Z½àÞêÝ› åä)fVüÜVëY·ˆˆˆl$ "Ò"ánÀƒáÇefvp Aú(©ò@s5MzÑø°™óo.Nã“ä4`ð ,¹[øøþÎèAÔœÝÌó zø‹ˆˆH+)‘MâîךÙåÀöfVéîuÀJ‚âñ=šˆµ±÷XÖvkf=jQF7º{ý^Õk hÁ­VUî>tÓW+"ÒyÂZ»Ó&“÷%h"òAÃy-Ø é0 @Dd“˜YŠ Å)O0 ày``A©¶p pÁ´Þ ŽmÈL`5°¯™¥Ü=»žsŸ'H3åîÿnÅZED:œ™OÐíoûfNYafÿ^ ?^.Qw'ÒaT„."Í2³sÍìgf¶uÑñ à7@à‰°Èà‚ZŠßšÙîE¯13;ÀÌ6v—á^‚´­¯_æ¸û zQ¸¦ß´ÕýŸ0`*\Ï®_þÈ*^Ÿ™%Íì(3녈ȧˆ™2³i¿'·O&“tÐAüñì¾ûîTTD¥wlAðÆÐåÀCÀföN8¯éV3»©DÝžH»Ñˆˆ¬O/àÇÀÍl&ð6AmÅp 7AkÞoE'»ûÛfvÁ¼—Ììy‚ú‰>ÀÎÁÀX‚îV-âî5fvŸÔ•\»ë¿®qBø ¤(d]Â{üÛÌήf˜ÙsÀ»èÃÃÇ€6âÞ""íÂ̆¿ Ø6€<+®¸‚aÃ>”Éd˜1cÓ§Oç•W^áå—_fÑ¢EÑÓùdØ,ÀYfvpŠÒµ¤½iˆˆ4+Ü5C4ìô#ø6ððçÂv»¯|M0„ðC‚@ä‚“hÎÆ‰Ý´® kHš[Ç®»׸ûÒçœôs÷ŸO'Ç@µ­yÿæîO»3ÁÜ=*‚ö7 †#>ëîùæÖ("ÒÞ̬'Á›Bß"HeÇwäÊ+¯äC¡%ÿ§[¹r%¯¿þ:¯½ö¯½ö¯¾ú*‹/.<åîþßí±~‘ˆ‘O±ðÍ ó€ËÒ©èÝ»7_|1_ýêWI¥‚„–Mý?Ý-·ÜÂ%—\B.—˜éîÃÛdá"ÍP –ˆˆˆÈ§”™Lzº @yy9ßøÆ7¸ð éÖ­Ûú_ܵµµ,_¾œwÜ‘Y³fìØê‹Šl€‘O3Ûøo`bø5&Là²Ë.cÀ€–tß°W_}•'žx‚nݺQ^^N¶ÉÅEÖCˆˆˆˆÈ§DØeðÀ jÑØa‡øÙÏ~ÆAÔ&÷ÈçóÜ}÷ݬX±‚.]ºÍ6éR®Ü|iw @D¤ 3; ¨,8Ô¼¼éî5³ªO˜Y`ð¿î~q ÎJP0»_ÙÞëÙTfv,A[ð!ÕÕÕ\tÑEœqÆ$“ëߘhiýÇ{ï½Ç#½àëÌì=àïÀÙÀ-Å/çm ÊÜ}~Ñs¦¦¿WjnÈÆgˆLoîy3ëF08ðCw_Ñ’k†sKºKZ²>3ëÞã}wÿ¸E )bfUÀ_€ä–[nÉO~ò&L˜€™µÙ=f̘ÁܹsYµjù|>ÞõhhhÀÝ)//§¾¾žD"½D; Òî>ED€§ÂÇ¡fÖÅÌV˜ÙMfv<°ˆ`@á«Ñ Ìì3›O01}°ÂÌî1³­ ÎùBx+JÝÔÌN Ÿ?%üºøõÿ+:/efW˹Àr3»`š{Ifv¶™½MPã2øÈÌþû*áãÚðÑj+ ˜R~ÁÎD3ûp'°8xG°ƒ²›™ w^>¾nf?)1mü  ‚`Š:4_r5Á ®'µ$oRb·&\ßåieÏ…Ë ò¯/¶3³1îž O¯ïùG  CÍ à½’?)‘–Ù`=ö`ÇwŒ ÂS©›|ÑåË—3kÖ,Þzë­¸Ö£¼¼œl6ß#ÚõH§ÓÚ‘§DD6(l ù³ðË§ŠžÞ˜àîÿ,8?MÐÉ¥ãî‹Â§þaf+ÚK~ø©»çÍì6‚ ¿‡\g[`à.w_µžõmGlüföwàåçïÞï àð‚ çA3{¸ø2p[ÑKÑîÞÐÜZDD6B%À[lAß¾} EnT§PQQA6›mq—«%K–0cÆ –.]«¨¨ ®®ŽT*…™ÑØØHyy9 äóyÊËËÉd¢÷[€HûS –ˆ”Rnfw‡¤WHJuEѹo¡½ vBî,>"¿²©‘ÛþèVtî©;-·n`½Ç„ç][°kA(\Wâü/üþûU‰—?aQâu×(ø‘6”‡¦-tÝD"AEEeeeñsÙl–d2ÙlŠV.—ãÝwßeÚ´i¼ÿþû¤R©x‡£¢¢‚|>O>ŸÓ°ÊÊÊ032™ étºÉšDÚ“v@D¤#ìCO,L^þP¢°ûͯß.|œQü„»¯0³w vN¢c ÌìYà83ëîî«-ø+{*°x|ëî7«Äs3K‹ÚË\ff?(ñ|ŽÒ­ˆK}¯""›j¤ðkw'›Í’ËåH$är¹8}*•J‘H$H¥Rär9^~ùefÎüä×]EE¸;ñk¢–Â]‘hHtûùÎe³¦DDJ©w÷=[xîêÇÊÂÇæÖt‘*t AºÕDàOÀ~AÐ/Ý=ÇúE÷«-ñ\©5Dõ#ó j:Š-Þ*q¼U¼DDŠ8§[­ZµŠªªªà‰¢ $“ÉÏçY»vm¼[ÍùÛßþ§\™eee444N§Éçó466RYYI]]Éd’T*ECCC˜$ Õ€H‡R""í!šÑ1°ø‰pgc ð~ÑS÷¤KF€DéXJ¿ø |Àº»묠0àwÿw ®/"ÒòÔ}L:•·ß~›ýöÛ!C†Ðµk×uÒ³êëë©©©!‘HPSSÃûdz=¢ÆÆÆ8 ©¯¯ë>Ì,þ<:¯`ˆiwª‘öð§÷›>_â¹J‹ ÝOmÁµEDÚK“¬#<’±cÇòÒK/ñ‹_ü‚É“'3oÞ<Ö¬ùdó5êjPSSÃG}„™QYYÏù( . ¨©¨¨ˆ%“I²Ùì:-y ×$Òž´""mÎÝ—…­Î®3³ïº{CXüŽ 8¹ºÄKo% î Rniá-%¨õ8ÓÌžq÷»Ã–ÓRºŠÝKÐëf¶ø»×˜Yàd`¶»?ÚÂû‹ˆlŠ&; ]»veøðá >œúúz-ZÄ /¼À‡~ÈСC"¨û¨Î.š´ùAÇ­ááykÉÜ=Îyø›™ýŽ`Hðcà7%Î?&¼þO+Ìl Ð`ÞGž S–ˆH›3³^@5EH$—Ë‘L&ûP]]]}×]wÅÈìÙ³éÙ³'=zôˆ‚–¼uuu¸{\0^€·ÚÍf³TVVR[[KYYÙl¶É±T*ø/`¤d³Ùh} @¤Ý)é8ÿ{ã7žúÌ3Ï lhº€GIJe˸öÚkÙn»íØ{ï½ÙvÛmKvÂ*LÙŠž+ì|•L&I$qûÝ(0q÷¸$Úõ(lÅRº´; """"ÄÝß¶1³!ÀõÀØ( Øÿý=z4o½õ3gÎä‰'ž`РAì²Ë.ôêÕ‹.]º^'~Œލž#ªñ(>¬“†¢k¡t$ """"ÌÝšÙóÀØÂTªD"ÁàÁƒ4h‡vï½÷sçÎåÅ_dË-·d›m¶a‹-¶ˆ‡ FÓÒ£Ù¤R©8¥*ªñˆÒ°2™L<”0•Jafd2™8%  Ò€ˆˆˆˆtJ¡GǶÜrKúõëG6›eùòå¼óÎ;TUUŃ»SVV"QÀQ8½°V*•¢¾¾žŠŠ êêêH§ÓqÊ"Ò΀ˆˆˆˆtŽuÚðî†D_G;={öd‹-¶ ™L²víÚøÜÂa‚ÅSÐS©T³“Ñ£ú¨uoHˆ´;MB‘O%3«0³­:{""í(@ eË–Q[[ŸTø\6›mò\ÔJ7—ËÅÁE˜Y<=“ÉPVtXÏd2MvJ¢c! Òȧ†™%Íìëf¶¨Þ3³Uf6ÍÌ~kf'™Ù Î^§ˆH)¹2oÞ<Î9çn¸áfÏž×s”š4 .²Ùl<û#ÚÙˆކ†’É$Éd2N×Êd2Ú‘§,ùT0³±À¯]‹žêŒ ?¢s? ˜2½à`­»¯iÿÕŠˆ´‰&; ‘/|á ì³Ï>¼ùæ›<öØcÜ{ï½ì²Ë.ì¾ûîôêÕ+>/ B¢¡ƒ…;QbfñÄóâZ(pÉd2…s@DÚéTf¶Aàqxø5Ç{,§žz*ÌŸ?Ÿ×^{éÓ§3sæÌ(M ptøQ¨ÖÌî.onÚºˆÈ§H“⎡C‡²ÓN;Q__Ï‚ ˜6mîÎÞ{ïMŸ>}âó¢ÎVqÀ¥cåóyÒét<¤p2z´+I¥R;›Ù¯ÝýöSÍŽéfÖø)ð5ÂtнöÚ‹+¯¼’=÷Ü3>oÏ=÷䤓N ¾¾>F^}õU^{í5-ZTøG»*¼Þ(3ãî+;ìÙxë-B¦Ÿçóy ÄöÛoOCCù|žÚÚÚøÜT*Ùl–\.ïv¤Ói2™ ù|¾dç«Â!=zô ²²òûf6¸ø?/ŒŒDÚ€éPfÖ¸ø.Ð`›m¶á²Ë.ã˜cމ‹&K©¨¨`Ô¨QŒ5*>öñÇóúë¯3}útn½õV–,Y°sxKÚùÛi’Eè°înH.—£¦¦†\.×$@‰ºdEÁEYYù|>Nê­­%•JÅC 'ŸG»"Q;sH&MšDuuõ «V­:áÎ;ï\mfÿt÷;îÇ#ŸœÏ› IDATW*B‘a¯o—]zôèÁå—_ÎóÏ?ϱÇ‹™môu{ôèÁ~ûíÇ·¿ým.¸à***¢§k»Õ‹ˆ´‹&s@ ùBóÂç wÛïVVV’Éd0³8ਬ¬$ŸÏ“Ïçãö»ååå@P°^œ†•Ïç™1ck×®¥OŸ>Lš4©û´iÓ&Þ{ï½·žuÖY+{ôèñ¼™]lf#ÛÿÇ#ŸWÚ‘vgf{×’§R)N>ùd.¹äz÷îÝêë»;ûÛߨ©©aÀ€ÌŸ? g«/,"Ò¾J¡oh7¤x—8‘HÄiX…Ý®¢à"N“ËåÈd2TUUQ[[§ae³Ù&õ#uuuÜtÓM«S©Ô¼}öÙg‘#GÚСC©®®æ¸ã޳SN9eŸ|>¿Ïk¯½Æž{î¹túôéSÝ}m;þ¬äsDˆˆ´3ëü8‹pÇu¿ýöãç?ÿ9;ï¼sÉ×llªñ‡~ÈwÞI:&•J©“‹ˆ|–¬S„¾¾À£PaúUôeeeär¹¸%o]]©TŠt: ,<ÖÐÐOV¯­­]ŒjhhøÐÌú>ùä“GGí´ÓNGî³Ï>UÆ £ÿþ 4ˆ_ÿú×[UTTœýî»ïžýÄOd+++Ÿ©¯¯¿¸O@d}€ˆH›3³$pA‘ù[o½5?úÑ8ñÄÛì>Ï<ó 3gÎ$NÇÀ‰8³TE“"òi·N:4x4 $“ɸVa«ÝÂºÆÆÆ¸eo}}=UUUÔ××ÄݲBsÝýÃðúË€Û€ÛÌ,9gΜÑÀQÕÕÕãG½ëÈ‘# 6Œo¼qëD"qÁ¼yó.¸ë®»ÖšÙ(wŸÕ¦?=ùÌR""m"L·zØ':6vìX®ºê*Øf÷™3gÓ§O§¶¶6N;(ìêR°’_ßuDD>J¶á-ü¼%)YQç«Â¢òt:M6›mÒ +N7)NZò&‰hÆ´pº»/®®3³ª—^zé`àÈ-·ÜòØ1cÆl5|øp¶Ýv[ª««ùîw¿ÛõÑG=P"€iáÎÇ=„ÁÇ.»ìÂUW]ÅèÑ£Ûì¹\ŽÇœ>ú(î‹ofñ»{Q‘eÔJ퀈H;0³-þÿ”ÜÝWµâr­.BR¯¢zŽÂÙ©T 3‹ë>0³8 «²²2NÃ*xóf£ éܽ–à ¨sÍlø½÷Þ;>N=zôè/¬Y³& <½±×•Ï/ "ÒÆ\|ñÅ|ç;ßi2Y·µ>øà^zé%–-[]FE–ÑÛ(ç¹ •¯iÀg£/ ~çdF‚ß=k€ï»û¸ÖF¡¯o$J?-B‰D\ãQVVF&“!›ÍÆ¿7£×¤¯¶º“‡»Ïf¿2³j íîË[{]ùüÐi G 6ŒóÎ;ªªªMšéQÊo¼Á /¼À²eË€ànTP AKß(ç9ŸÏkDDÚ•»O¦ì€JUáG pw .×ìHáçë{.J½ŠR©r¹\“€‚ä¨.$*NÏd2ñ®H"‘ˆg8°ÿý÷ß¿ÛÔ©SÛ¤hÏÝW)øbÚ‘¶°-À¾ðúöíïL$ ***Èd2Ý^·¾¾žyóæ1sæLêêêpwR©Éd2Î_nllŒwC¢4¬ @D¤½|‡àþR²À™î^ ”²ÎH¤TÛÝæ>ŠÏ£ß‘¥Ò°›ÔËEiX…²ª««·H¥R_2S¦L™ŸH$æär¹9GyäÊ|?"-¢DDÚL”CœL&éÞ½{\$íJDiSë FÌŒ?þ˜9sæ0{öìøÜòòr²Ù,ù|žÊÊʸ 2ŸÏÇE–Q Rºˆ´—UÀ|`§¢ã À½îþ¯^§UEèÑëšK¹*LO-TX˜†½y]+™Lzxý4°s>ŸßÙ̘2eÊŠD"1+›Íή««[8qâÄx»Ydc)‘¶‡ÒïØåóyR©Tœb¥@¨¤L‘N§Y¹r%Ï>û,}ôQ|~:Ž»µD•ñÛÂáZȵ""mÊ̺ß~t/qJ–`w¤¥rÐúIèÑ0Áèš\.×äX´ í€D»"ÑŒººº8ËÌš{óf‹|>¿o"‘Ø·k×®S¦LYÌ2³ÙãÆ[½ß³ˆiÄÁDs{Èår$ R©Tü±fÍz÷îÍìÙ³yúé§Éf³qZA>ŸS¢.…Å“™L&nÅ=_¸&‘Ö ;ý}ø%°Uxø%`pP Ô?‡÷µT“7o6uH´3\WWפ%o\DÇ¢€£¾¾¾IÁ¨M/@2™Üàî±»—;;»»O™2eI>ŸŸŸJ¥fqÄo£ß¿² @D¤-4)¤|ñÅ0`ÕÕÕqZVáÎL&C}}=«W¯¦¬¬Œ¾}ûòÁðä“OÆçEí! s•£V»…ƒ´ ;¸”——î¨(KDZÍÌ~ ìz¸ ¸è T €7òòq²)EèQ;òât:7è(Þ-nhhˆS´òù<ååå<ðÀñ#F¼½‘߃‰Ä€|>à”)SjÜ}n.—›Õ½{÷7<ðÀú¼žl€ˆH[h’ǼlÙ2®½öZvÝuWFÅСCéÖ­[É?¤uuu¬Y³†¥K—AZVTh^p§D)Wµµµ”••afd2퀈H›0³½_„‡>~ \íî á±5f6 ¸øš»oìë-BoiP aŽÆÆÆuv‹£º(øˆ ×ï¸ãž{î9¶Ûn»yÇwÜüüŠu1³=R©Ô555ù‡zèwŸ•ÏçgsÌ1´òÚò9¡DDÚBü.ž™qÔQG1vìXÞyç^|ñE¦L™ÂvÛmÇðáÃéׯ]ºt‰_¥f­Y³&n¥[XP™L&ã4¬ègÔ]«pV´S¢6¼"Òf¶ð3‚Ô*j &~_åî—xÉ@ÊݧoÂíÖ-BߘݨÑGaÀÕ}þ.-|C§¼¼œ¥K—ò‡?ü%K–0lذY—]vÙ£›ð=¬ó=%‰'³Ùìr`çd2¹ƒ»N$ã§L™²ÜÌ®7n\ï"Ÿk @D¤-¬ó.ž™1`À¶ÞzkŽ>úh/^ÌŒ3xî¹ç8p ƒf‹-¶ ¬¬,þ#õ¨â–‘¥:¸ÿ±-˜æ«DDZÌÌz?¾ ”ü^»‡ ®£Ù´¤°ÝîÕ›xÛ&é«ë <ŠîùÉÂFÑDôè÷f4˜µøX*•âÕW_åæ›o¦¶¶–d2™;vìÓçwÞ¦PÅëªO$wqijÂC¯‰©S§nëî;'‰^Gq„‚Q""›ÆÌúß%hÚJOóþ°öïߟÉdXºt)o¾ù&Ý»wgw¸{¼ƒQ˜rÕ\V´SÕ‚DC¸ ¦ùªDD6È̪€óK€ááÇï¹ûëí|ûuj@6¥=›ÍÆÁEqV*•Šß¨illä‘Gá¾ûîÃÝéÖ­ÛêóÎ;ïþýöÛoik¿3[–J¥n;üðË‹ðóãÆ[@P##(‘M÷£K/½ô‚Þ½{ó?ÿó?,Z´¨I·«è¹Hôî\.—£wïÞl¹å–¸;k׮ϋò’£ö…iXQ‘ea¯û¨ýna‘¥v@D¤% :[]ô¿\ìîOuÐ2â7J¢4*hy-HôuôæMTT¥\¶ß]¹r%üã™9s&C† Yp饗NéÛ·o[‰¿ºvíÚ{&NœØØ×’Í€ÙT óæÍ£_¿~l½õÖMÉ“'Ó£GFŒ±N'¬è£¾¾¾É ègTãý- 8’Éd„D\¢]‘ÂnX! "RRØÙê7Àná¡w€KÛ}}“RÛ^€äóùÂ7PZT ¥¯f2’É$‰Db)èù|ž… rýõ×óᇒH$ò‡rÈ´oûÛÿníâÝ=ïîuÔQÿjíµdó¢DD6ÕwÝu×êÉ“']YY¹`QKÈ1cÆðúë¯ó»ßýŽ~ýú1bĶÝv[ºwæv5÷î^&“Y§­naÄu…iX…©YÚ‘æ˜Ù^­ ­¿.ìlÕ‘Þ‰>Y²d ܤ"ôh·£0 +š“ôüóÏsÛm·ÑØØHUUUÍ9çœóÀ¡‡º¸ Ö^“J¥î;vlk»fÉfHˆˆlw¯%èó33ûpbTï1xð`ÈØ±cY²d .ä¾ûºší·ßž>}úÄmyÃkÅiQ®r\Îq÷uŠÓ£V’Ñ1MB‘bf6ø)AÊUag«_ºûªN\Ú,`9ÐçüóÏçW¿úC‡Z–†efñÐÁ(àˆšvÔÕÕ1yòd{ì1 °xÒ¤I 8°¦ Öýnccãm&LèÌŸ|†)‘¶Pë¡›[mµýúõcÔ¨Q¼ÿþû¼óÎ;üßÿý={öd—]v¡¼¼<¾Hø]\TžL&㡃…\ ‹,s¹\¤TTTh¡ˆÄÖÓÙê"w_Ô‰KÀÝÝÌ.nxá…ì€`ß}÷åŒ3ÎàÀlÑnH>ŸÓS£ZåË—ó»ßýŽ… 0f̘.¾øâiÉd²-Þ˜ùwMMÍ?&Nœ˜Ûð©"¥)‘¶Ð¤•d¤p‡#ŸÏÓ«W/zõêň#X¹r%UUUq‘d´ÒÐÐÐ$àˆ&÷Fuî¾ÎŒ\.¿¦`a¦£"òé°žÎVßw÷×:ma%¸ûf¶¸ÒÝG?ûì³<ûì³ìºë®œyæ™vØaÅç¯óu4`0“É0gÎn¸áV¯^Myyyýi§öбÇ»° –šM$÷qÄ/µÁµd3§DDÚB‹§ùFZªªªÖ¾ýÒ°²Ùl\ãM<ºi•——Ç;%@¸¡ÇŸˆÈæ!ìlõE‚ºŽÁááé;OvÖº6ÄÝ3³ý‹€ño¼ñ†]xá…ôéÓ‡O<‘/}éKôèÑ#:?~Œjï™:u*÷Þ{/ù|ž¾}û¾É%—Ü¿Ã;”ž¸QÌlU2™¼ýðÃo‹Ú>EDdƒš üaü׿þÅ£>Jmmm³;#…@“ƒQç«(¸Èår¸{œ†Q­è5! "›‘°³Õ+ÀÝÁÇ;À9ÀÞ|˜Ù3û­™%7öµîþŒ»üp;Y¾|9¿ÿýï9ôÐC™4i¯¼òÊ:5 555\wÝuLž<™|>ÏÈ‘#ÿsýõ×ÿµ‚9¹\îjÒ–´""m¡d Ö Aƒxøá‡¹ï¾ûØm·Ý5jC‡ÅÌJÞJ$ñäÞªªª8 (ìk ׊R³ »fUTThDd3cf{ìxŠ:[]ãîm1㢥ë¨.?*€ùÀõ›r-w8ÕÌ~|8»±±±ß<À<ÀV[mÅØ±c0`o¿ý6>ú(|ðétºñÄO|ôä“OžÝß’›ÙãÆ{ 5õ6¦DDÚÂ:)XQ7¬o~ó›är9/^Ì3Ï<Ã#<Â!CØu×]éÝ»w“€%J%ˆ:¸DiX…»"étzcQûݨ.$4Ô̺ºûÚŽþaˆHû3³m€gdt4.ïèÎVfv4p °mxèIàéÖ^×Ýß.3³Ÿ'_ö[ºtiâ–[nirn=V^tÑE÷1â£ÖÞ×Ìêòùü]ãÇo‹@Fd @D¤-8§HÅ ¦Ÿ÷íÛ—“N:‰\.Ç’%Kxå•WØu×]éÞ½{üšd2¿¦pÀ`Ô’·0I$qV}}ð&g°ôìÙsçµk×¾jf»tRif¶AÄ…; y`2Áó·:x-ÛWãÃCï?v÷ÛÚò>áï°ÛÛ{÷î½uÿþý¿·|ùòóù|µ™•3fÆ¿øÅ9ÕÕÕm1‰|iYYÙm‡rH«‘æ(‘¶ÖI©Š>/ž~Þ«W/Ž<òHòù<üq|^6›%•JÅ»Q«ÝT*øUU8=êu_8=êн{wöÝwß¡‹-úÈÌþ<<âî«;ðç""mÄÌÊ€s+€êððãÀÜýÕ^KAôC‚ö¾ÑîËÛ{×õÃ?\|·p9<òHÏl6ÛÏÌúæóù¾îÞÏÌúšYÅF^þ?ýúõ»gäÈ‘ê"(íJˆˆ´…øàƒGšÙQ#GŽÜÔ¨QÉwܑ޽{3bÄn¹å–¡©Têâyóæ]üàƒÖ˜Ù?€¿»ûßÛü§'²™+ÑÙÊ :[ý°3j+Ìlw‚:/„‡Þ$¨óx¸£×"òy¤DDÚBɬ–î†D; ù|>8R©TÖx¤R)êëëãö»ÑÜúúz*** ×°ÞA„î>˜ üÖ̺½üòˇã8á€è=lØ0¶ÞzkºwïÎ9çœÓå»ßýîWžy景˜Ù(w±Õ?1‰†÷OâÔ3<üpQGw¶ ×Ó“ ËÖy@¨þø…»·E‹[Aˆˆ´V¡G‰Dpd2™xâyT÷ÑÐÐ@"‘ ¢¢"ž‚žÉdâ×ÔÕÕ‘H$¢n\-ž„îîk€¿7³³ÿò—¿ŒÆ§Óé£÷Ûo¿½÷Úk/Ûa‡X¹r%@z~>"R ìlu*ð``xøU‚ÎVvÒz¾Jlô ?|ÓÝwôzD>H[Ø`úú‚’|>ßd z\¦a%Ìf³Í¦f´nqRȃÅý'üø¹™õzòÉ'Ç [ <¿)בÀ§©³U¸ž= Ò­F…‡^¾åîÓ:z-"›  "Òš-B__àQü¹»Çíw‹Ó°ªªª¨­­%N“L&ãA…õõõñ®Èš5kH&“är9‰Ä'ÑP+¸ûGÀ_ÃÙDf¶A'«ƒÂC+ ¼;¼³U¸ž^ÀeÀ· ÞW¤_ýÞÝ7é i "ÒJOB/þz}EèÑó(¥ªpâyThÕ}$“I›LA/ÜÙwß}÷›:uêYf6»¾¾~Æ„ Vµã÷/"Í0³AÀO RœŒO¦†_îîþïÒÌR5W=~Ý|ßÝ—uôzD6G @D¤-lÔ$ôREèÑcqVÔj·pH.—#ŸÏÇÅéQ7¬µkׯ; ÉdÒÜ}{wß¾¬¬ì˜©S§¾çîs€Ù/½ôÒâË/¿¼MvHD¤´p‡áÀ·r‚ß÷Ôy¼ÕIk:¸Ø5<ô Aº•R+E:i 9ø$°Ø”"twg{d³Ù¸­n„¦\¥R)Ì,®ûˆÒ°¢à •J5 0ܽ?Ð8x¯½öª}衇æ›Ù¼l6;ë˜cŽYÓ.?‘Í™Ut¶º„`‡‚ö×?èŒÎVášú 6ŒvaVÀÿ®3êND6w @D¤-´º‚)çétwoÒù* 8›…;%ÑdôÖ€T™ÙnÀnétú¸)S¦¼Ì®¯¯Ÿ}üñÇ/!L)‘– S›Î ¨£Ø*<üÁŽÇS´¦4ðM‚°n¿«þ|×Ý?ìŒ5‰ˆiy(h´´þ#ŸÏÇωD“ ˜YœrUØ!«0Hyÿý÷ãîÝ»×µdáîž***{衇Öoær¹Yétzî¸qãZûÃù¼ ;[ý–OR›Þ&(ð¾Ý‹‹Â:nM¤[ ½Dn¥9>"Lˆˆ¬ÃÌN¦»û¼¾dI蓆M/v@²ÙlÉZ¨Ð¼0 +›ÍR^^ÎÂ… ¹ùæ›èÖ­Ûê &¼¹‰ß{W`T*µ‡»g§NúV.—›—ÉdfwÜq*P)`fût¶Ú?<ôA‹Ý«Ý½S‚w3ü8%<´”`Ða§C"Ò”)åXàN3[B0 ï~à™õLn¶ o©Ï‹¿Ž^W¸›‘Ïçㆆ†x zaVtìùçŸçŽ;î “ÉN§Ï<óÌ)ÕÕÕ­žZìîõî>0‘Hl_^^>þ¡‡Z–J¥f×ÕÕÍ™0aÂB”ª%›)3Û‰ †â‚šŠZ‚݆«ÜýãNZS%p0 èJ0 èzàRw_Ýk‘Ò€ˆH)O![çg˜ÙS]l¦¸ûÒ‚óšî€ÄOlÄ$ôº(¸(œŒª744ÄéXwÝuÓ¦󪫫W|ï{ßûç{ìÑ¹Ý s¹ÜÿùÏjFµM6›–L&wÎår¤ÓéáïúŠlVÂbîË j=RÿÉ¿¸¢èwBG¯ëhà`Ûðп€óÝ}Fg­IDš§DDJyH‡Ÿ§øäwÅXààÍì*wÿqx¼IW„}D³=¢€ N“ÉdH¥RMê>–/_Îþð-ZÀ°aÃf]vÙevëÖ-ÓÊïÝ“Éä3cÇŽ ä9æ€EáÇ”©S§ö1³î­¼‡ÈgJ˜šxðc‚bn:[}§3ÿ“ofÛãÃCK€¹ûmµ&Ù0 "ÒD˜Æ0€ µnñï ?&âÙ¤Iè…EèÑGáHtͲ²2I&“˜³fÍ⦛nŠ&ŸçÆŽûôyç7½µß»»7ær¹»ÇÿzsçŒ7n9°¼µ÷ù,»HNnÕ/<üAg«g:q]UÀEµå@¸˜äîj«-ò)§DD0³~À—€# ŠI+š9µŽ øø’»î4ä`ӋУÇD"ï€wÊvB~øaî»ï>òù<Ý»w_uá…Þ¿Ï>û|Ðê,Ïår·sÌ1mq-‘Ï4 :Cœ\ Ï!èluOgs‡éV׃ÂCO¤[Íî¬5‰ÈÆQ"²™2³ràp‚N1ø$å à-‚Î1# Þ]¨îÎp÷â @\§iénHáÎIñl3#N³fÍn¾ùf^yå†:ÿòË/ŸÒ«W¯¶è´3«¦¦æo'NlQë^‘Ï33;„ Æidxè=‚Ï›Ý=Û‰ëÚ‘ Ýjlxh1ÁŽ‡Ò­D>c€ˆlf¶™§'= žz˜ Lu÷¹f6ˆúå× ï:§Dð0àƒ>àÕW_e×]wŸØØ4¬¨ÕnaûÝE‹ñûßÿžeË–‘H$òûí·ß ßûÞ÷žK&“­zÖÌòîþÄøñãG­d3gfÆN ­~ü¼3Ӛ̬ ð‚Éêe;±¿~éîõµ.Ùt¦–Ø"ŸfVFÐÕêûÀÞO-!,nv÷7‹^“Vì€ü»_´žë' Þܪk×®|ík_ãôÓO§wïÞäóù¸x¼¹Ïs¹sçÎ%• ÞÉf³qÊÕóÏ?Ï-·ÜBcc#UUUkÏ=÷Ü>øàwÛàÇR üuüøñ›4/DäóÂÌ´®ý:$¨§ø3p™»wZJb˜v ÁnÌ–áá Üý­ÎZ—ˆ´ž‘Ï13ëIÐB÷ x¸†`¶Ç­ÀSÍìhD¯Ÿ <–š“ÂßÔ}9A›íKÜ}A'¯mw‚:1á¡yÀ…î>µóV%"mEˆÈç™ !øOŹ È㾸ÑÝW¶ð:Ý}ñFÜ·8 ]b»ðûî»/§žz*£GÆÝ›ù|žÆÆFæÏŸ·Ú]±b×_=óçÏÇÌ|̘1ÿ¾è¢‹¦µ6å ÀÝ_Y²dɽgŸ}vkÛõŠ|&…;¢çÌóˆÒ0Ÿ èlÕênr­af½Ÿg ‚4°ŸLVoõpQùtP"ò9bf€KùdHÀëyÜ·uT¾t˜¾u<Á»«{FÇÈ 'œÀ„ èÚµ+ù|ž|>OCC o¸Î;—n¸?þ˜òòòºÓO?ý¡£>º-Ò-²‰DbÊG1­ ®%ò™þ»ü"AJS4°oÁÁɶ0âµ}ø Ð;<ü pž»¿Ói ‘v¡DäsÀÌúhžË'-t~ãîwÚÂ3;øÁ °@UU|0cÇŽeÏ=÷dõêÕ¼ýöÛ<þøãÜsÏ=äóyúõë·ô’K.¹ûí·_ÝÚ5¸ûÇååå·zè¡úŒl–ÌìPà×ÀˆðÐbàgÀŸÜ=×i Ìl‚ÝÙÝÂC¯Ôy<Ûy«‘ö¤äÿ³wÞáUUY~×9÷&” ÒAŠˆ -RF@éEÁŠ‚  %€eÔQG,óÍèèŒ2Î8Ž PPAqP‘¢bjP¤HQBï-¹÷Üõý±O$å&HöûÕUõ—Ó¼ÇE[‡rÜV.¸àêÕ«ÇÏ?ÿÌÏ?›Üò–-[.}ì±ÇæÇÆÆžöÁÈqœuŽã¼Ù½{÷üȱXÎ(Där`4ÐÑÚ< ¼RÔ¤D¤ƶÛ0 N÷bÊý¾\Ô¢Èb±,V€X,g "àx wx1ðUý$Ÿ÷z#pº©ê¢|¸_лtéÒ·;v¬£çy¿–‹‹;Ø£G/¼òt÷4‰,X²dÉìÇ<ÇD{‹ålDD`º—ß„9ܧcÇUu_ÛîÂäv”"À›Àƒªº³(m³X,…ƒ ËF”p…ëN,"ó?½GU_ÎeíE˜Æe­€Ãªúĉîß«W¯ÊëÖ­»&..®J… J1bSLLL æÐtª¤ïôìÙó»Ó¸‡ÅrÆ!"b^LÜŽ)©ëa*Þ=q2% ?ìE ¡?´ø­ªþ/ç«,ËÙ† Ë‚ˆTÇÄpß‚9œïƈƒ‰á‘¿À”æ|@Uÿ•aîBLryKL™Ìæ@ILƒ°RÀª:þT÷^½zuÌ?üP)&&¦’ªVv§’ã8•óUÕ9Ý;\×ܽ{÷§º¿År¦!"ç£0%·KúÃs0^…Ef˜ˆÔž®õ‡R€G€)ùýâÄb±¬±XŠ9ÂžΣ€Ãüæ_ÿ~‡÷©êKþ\ àsŒ—ã¦Ia0Ë-< jAØ6þü@jjjE R$©‡+;ŽSID*`Þö.‘é=zôHÍï½-–âˆß%ü·˜Ã|9x!¦—G‘'q‹H)Œ0zóû"¼ üQUO»À„Åb93±Äb)ƈH`ÇÃb–Ð~ü óU1aW¯dYs &l"ŽèaR_©êQÆ ?~|Àöö°œ+ø/&†OUýá•À“E]R~ý]2Sò·º?üp¿ªþXd†Y,–b K1ÄkøL3A®ð0ðFA…+ø†1oS#@‚ªNÊaío0žØ,S‡1ŒÄ\ö‰&ÿ((!e±œ­dèåñ p‘?¼Ñÿ_Þ.Ë”TSÕó/DäYL§ô­@]UµáRKð¸Ÿ.ó‡vb÷=_º„‹HyŒGænLHäLÞÚè¢.ùk±XŠ/±X,…ïõøæpî`èwªê¼¯ $ƒ1bˆªNÉe}ðF|„ýáôß%ßž@|tô?½ËŠ‹åĈHkL¿ŒþÐ^LhÓ‹ªz´È óÉÐÅü@EøCL¸è¦"3Ìb±[¬±XŠ"Ò˜ ÔÆä^ŒFt’¦/>&ƒ0âãvU}3—õU0qÜ—a’Ðo®Âô$QL¹Ïœ®½x #®Æ¨êŒ|z ‹å¬DD.Åxnö‡Ž`B›þ¦ª{‹Ê®ŒˆH+ŒM—ûC?` Wäk?"‹ÅrvaC°,–"Äo(øþ‡‹‰å®ªs iï7¾˜&e·¨êrY_ø¨lzªêR?|ëß@/r¨~å¯y¸X ´RÕ#ùüHËYßSçÏ@Œ`aÂ2ŸTÕ”¢´-©Šñ¤w1߇K¯¨j8—K-‹Åz@,–¢BDjc@[hp¯ª*„½ƒÀ4àFLÓ¾›sK‘–À, °¸ZUרªŠÈà÷¹”Þ½#>RV|X,Ù‘À1Õ­‚¯â4LÉÚuEi[:9”óóo{ïX,–Q„öü#„¸+§Äwys(xÓ`ì´<"Òãyø£ª.<ûY,Źã=È*<þ¬ªë‹Ì°\ðó<þÉñJ\?cÄÓë•´X,Å›b±ä)ü“xš QÕ·ŠÐž'€Ç1âãnU}5Êš¬Þš'TõÏù°w à ð1г=@K¾ "W`í=ü¡¦ŸÎ_‹kGp©ƒù¿ãÝ<ˆÉûx¾8u[·X,–¬XˆÅrD¤ð Ð؇é*>¯íy#>ÎE|<©÷¯˜øïç²®;E^ƈ혰/+>,g,~%»‡ÉîñxRU×™a¹à÷ú=ÆîÏóuš½|,‹¥P°ÄbÉ©‹é^ÖÐSU¿+B{îãxÉÛÇTõïQÖ¸@0“˜~§ª&æÓþ}a˜Ïm9vD¤$Çt Uuk~ìo±ä"ÒÓý;½ˆ)#ýÏâ\žÖþOaò<ö`< Ï«jZ‘f±X,§ –³?LáŽ@ ÐMUÞç}¼“×>~§ã€ó€E@¢,1+"7s\|<§ªˆ²æ<à#LœCÀõùœ§ò Ð؆ ½ŠZÂ×÷ÀLÀäÌ|Çñx‹¥Ð‘ &déQàbx¦|ö ªº§¨l;"R"–€ù[Š©<÷WUÝW”¶Y,ËéâµK~""ŽëºSbccŸoݺuïV­Zõ)Q¢Äx×uòëúŸèúëÙññ)ЩˆÅG7` àbJ?eÍy˜jTW{®ù)>DäNàvLHWßx‚þÔÁô&±%ö,E‚ˆÄˆÈ Œ÷r"F|ìþ ÔQÕÇ Z|ˆH)¹7&&f³ã8^0œ-"-òp]IyX‹i0Àx/UÕ‡¬ø°X,g¶ ¯å¬Á“‚Á`ÿ‘#G«T©@8æ£>ò¾ùæUÕª:-‡ëoÂäO1~EYÊRDÚb< ¥÷|{¼,kÊbSkÌ›Ýnªºø$ö¸( ¾‰D.s]w8ž‰D^TÕMþ|+à “èúÏ\îÕ ã1zPU_‘ј*=½TÕæ€X ?T0#Ô«ûÃ;8ju l(Üíºîñ±±¥:vìS½zu/^ì%''{‘HäUý(Êu&wëY ¶?¼x@U?/h»-‹¥0±ÄrV "â8Nb08räȘªU«f[óÍ7ßðÁDTuª¾™åú~˜2–ŒÇaÈév ?ü”Ï0ž˜™@U eYSãù¸Øñ|ä¹ã±ˆÔs]÷«zõê•oÛ¶màÀ|ûí·©[·nõ"‘È­˜.ÊK0€Þ955‘¦7H¸BU=+@,……ˆ\€ñºÝ Tô‡7aó ãE‚ˆœÜëºîƒ¥J• vîÜ9¶eË–Ç#çΫsçÎ=êy^}Uý%õ×búy¤ç§ü„éI2Í6´X,g#6ÄrÆã‹1@`PBBB0šøhݺ5@À™>}úë"TÕ×üë3ЉÀð¢ìm!"õ1âc&ì)7ñ±¸ú$ÅG]×u¿¼ä’KÊ0 àº.-Z´ˆýâ‹/töìÙï©ê÷ñ±t‚ƒÐ#@ yQ 7˹…ˆÔîÇ”†.íÿ¼ŒUÕÔB°¡2ð{Çqî.[¶¬Ó¥K—ØøøxÒ¦2Ò©S'Y»vmàçŸôò=Œ:ùKÒÌ_°-ËÙŒ –3_|¼äºî°„„„`5r]ß²eKwúôéý^{1&yzD‹ 1¹'•ÿa¼Dz¬É*>º©ê’“ÙÃuÝÏëÖ­{~ÿþýJ"Bûöí¥|ùò2uêÔF¾ð髪ûs¹_ÌÛÚѪº*ïOk±œ~¸ßƒ@Žÿ[Ž)Sý–ª† Á† ÇyÈqœ*TÐŽ;ÆÆÇÇã89§VŠ×_}ÌK/½tˆÌ®Á—HÆÛ‹År.`ˆåŒÆqœÑ®ëŽ>|x°fÍšyº¦eË–ƒAyûí·_ñ_ê ÜQÄâ£Æãq!°Óôð`–5§+>jº®»°N:• Ì’‘&Mš "L:5ô–årÛ?ûÿÝ%"#2ŒÇûÿ½JDªÚ†„–Ó!C×òôƒ;ÀBàoª:³l¨ã8΃ŽãŒ¨X±b¤K—.17Æ´91U«V墋.’ 6\‰D"˜óQªº± í¶X,–â„ͱœ±¸®ûŒã8¿:th N:'}ýŠ+˜6m~‚gÇ¢ŒµöcØ—ëvªš’eMYLRúo€˜œ'±G ×u¿ª]»v•Áƒç(>2òÃ?0eÊxÂó¼¿äpß1ÂÑEUçæÕ^‹~Mξ†ÌÍ#˜²ÓOªê¢B²£‘뺈D"ýjÔ¨îÔ©SLÆ Oé^›7ofìØ±¨joU‘ϦZ,K±Ç ˉ뺑QC‡ Ô­[7Óœçylذ´´4êÕ«GlllŽ÷ùî»ï˜:ujDUïWÕ ÚîhøUsæ--ñ±)ËšòñÑ#>º¨êw'±Ge×uÖªU«æàÁƒc‚Á`ží[³f S¦LñTõIÏóžŒrï*@©(—ŽF#0 õ)yíÅb±ˆH&·ã~ –?|HÂ4áÛ\Hv4 ƒ„Ãá¾5jÔ_uÕU1]tQŽëÓÒÒØ°aÁ`:uêä’5nܸ´-[¶L ‡Ã·”í‹ÅR\±ÄrÆáºî_Çy8šçcß¾}¼ñÆüò‹)0S¾|yn¿ýv*W®œãý2ˆaé‰é……߸oÐS.´½ª®É²¦&ì*Ýóq²â£’ëº «W¯~á°aÃbbbbNÚÎü‘É“'{žçýEUŸÈã¾¶ –夑JÀ=À]ÀùþðvLóÀWUuo!ÙqE ø“çyÝêׯîÒ¥K®ažûöícÁ‚,Y²!--5j0bÄ¢ þõë×3aÂOUëÙð+‹År®aˆåŒBDw]÷ÿ† ÈúrÏž=Œ?žzõêqÍ5×°oß>Þ|óM\×åw¿û]®1ÚK–,aúôé¡H$ÒZU—ôsÀ¯¡%oý€ƒ˜¦‡K²¬9]ñQ1,¬Zµj­„„„lâ#%%…eË–áº.—_~9åÊ•Ëñ^k×®åõ×_÷Tõ9ÏóÎÃÞV€XòŒ_Ìàw˜¦—%üáµÀ?€É…UJD® ƒ ‡Ã]ëׯïuïÞ=P­Zµ\¯Y°`Ÿ~ú) 4 C‡Ô¬Y“õë×3iÒ$:tè@·nÝ¢^÷Ê+¯¤nݺu’çywijX,KqÅvB·œ1¸®û®ëþñöÛoÏ&>öîÝKbb" 4 OŸ>”,Y’ªU«rÍ5×°cÇvïν™y‹-hÚ´©þVÏ…ç0â# ¸9ñ‘žó±ƒSÕªU‹*>-ZĘ1cX¿~=ß|ó /¼ð[·æœ#~ñÅsûí·»"ò€ˆÜ‘þƒ ÁJΫ͖s¹Ò¯µóýRXŠ" Uu|A‹1\ —9޳ Q£Fï¿ÿ~IñQ!|^¥J•ZC‡Í&>¾þúkfÍšÅàÁƒ¹çž{xðÁ)S¦ ï½÷^®÷½øâ‹¹é¦›"ò²ˆ\–ÛZUýÖ?»wï¦L™2<úè£QÈcbbhÛ¶-óçϧcÇŽ”)Sæ×9×uiß¾=3gΤk×®Ù´râÀ^$ÙyJk±X,g 6ËR¬‘Á"’xóÍ7;ñññ™æÒÅG¹råHHH`àÀ™’γR«V-†JJJ ß}—½€Tññ²çyR…Æû!PXôŽRRt4æ± TÕNâþ¥Àì2eÊÄ><¶téÒ™æW¬XÁ;ï¼CÅŠ‰V=¬Zµj$$$pèÐ!’’’8räHŽ{©*ï¿ÿ~$99ù˜çy]N&<ÌRpˆHY g‹È/qqqoÕªUó{î¹Gxà;v¤|ùò™®©]»6:tpƒÁàhßûvª{—‘á"²ø¦tn,ð5FˆÔUÕÑ…%>D¤ºëºÿrgK… èÓ§O©Q£FŶjÕ*Gñ±wï^þñ0gÎÚ¶mË Aƒ8xð ›7çÜh½M›68ŽÃ—_fOвeKJ—.Í‚ òdóÚµkY¶lYÄó¼|‚‹År&`C°,Åé'"oÝpà N«V­2Í9r„¤¤$âââ4hЯuëÖ1yòdêÔ©Ãm·Ý5´âÀœw^æ3›7o&)))ìyÞÏóî+ ç 3« MÖ’´"ò˜ŠX ŒPÕ¤“¸É@ ðq™2e.¿óÎ;c2¾‰X¹r%o¿ý6íÛ·gáÂ…T«V-GOжmÛHJJ¢lÙ² 6,[\¼ª2cÆŒÈâÅ‹zž×QUçÕNKþ#"%€ž@àöH$Ò#66VãããƒñññR³fÍ<å=9r„§Ÿ~:ìyÞõªúߓܿ1pp^6ê&‡éUýßÉ=Ñéãºî“ªúhåÊ•½.]ºÄ6jÔ(ׯÃÒ¥KÙ¼y3½zõbÅŠ4nÜøW‘2fÌ#FŒÈñú?þ˜¯¿þšQ£FeûyIoîÙ´iôEUeÍš5|öÙg©¿üòK@Dž‹D"¨ýƒl±Xά± üdÕ©½zõr/¿üòLsG%))‰R¥J1hРl"cýúõLž<™ /¼0ê|V¶nÝʸqãBápx¬çy÷æûÃøˆÈ+À]˜œŽÎªúm–ù{€ýO§ª/œÄ½cÀ‡qqqíî¼óÎØ¬kõêÕL:•>}úÏæÍ›™4i•+WfÈ!QCK¶oßÎÔ©Séß¿?•+Wþu\U™9s¦÷í·ß¦F"‘Žªº(¯vZòßSÑÖuÝ[€AŽã”hÔ¨‘4mÚ4P¿~ýßðçÆ›o¾þþûïß ‡Ãò°,p=0è‚©ä¦[ù`BApȃm7· lРAžØ’%Kxï½÷¸ï¾û2}¿ƒùù™2e #GޤvíÚQ¯?|ø0Ï>û,íÚµ£k×®y²3=¹}Μ9©;vìpEdB$­ªót‹Åb9K°ÄRäˆÈM"2íúë¯w[·niîØ±cLœ8×u2dHŽÉä7näµ×^£jÕª¹®Ûºu+ãÇ…Ãá)žç%ÔGyxVÕGUgd™¼† ƒ|\UŸ<‰{Ǹ®;³T©Rïºë®˜råÊešÿá‡xóÍ7¹á†hÞ¼ù¯ã[¶laâĉTªT‰!C†µJ˜RÖÃÛG}Y¸pá±H$’MDÉøúË1ýVªÛ€ï€ÏU5÷f(…ˆˆ4¹®› ªeëÕ«ç5kÖ,¦qãÆ¹WÈ «W¯æÍ7ß<‰D.PÕ¨ñw"RH†r¼GŽüxø¬¨ßÜ·.»ì²¾}úô‰ªÂ<ÏË&ÐrKWU^|ñEÎ;ï<† ’ã¾~ø!K—.å‘GÉõß"‰œœÌgŸ}–ºwï^€1‘H䪺5ïOi±X,gV€XйQDÞ¹îºëÜ6mÚdšKMMeâĉüòË/<øàƒÙâØ³’.BªU«ÆÐ¡C³%¦§¤¤¤{>ÞôzöìU|Àñ¤óýû÷3a„\“Î?þøcýâ‹/B‘H䪳I|øT”†½¸ ( \üh……ŠˆÔ‘ûbcc—«*T¨ðh·nÝj=úè£r×]wÅüæ7¿9¡øX´h¯¾ú*Ï=÷ß}÷©©©Ì›7qãÆEípïº.7Û}ª‰ÈÃÀàSàZL~ÒLïŽÚªúHq‘HdÛþýû£z­j֬ɑ#Gøú믳͕-[Uš0Þ¤I.¸àæÏŸŸã¾çw^Tñ …X¸p!Ï<óLÚôéÓìÛ·ï)Ïóªxžw¯‹Åb= –"BD®‘™Ý»ww;vì˜)æ' ñÚk¯‡:t($11‘ØØX²%”Ÿˆ;wòꫯ¦¥¥¥½íyÞà‚ ¯ñCU¾*ï}3î%"­1¹Ò˜dÝLåxOpï ëºÓK–,ÙýÎ;ïŒ9ÿüó3ͯ_¿ž×_ØØXî¾ûn²†ee%%%… &P©R¥¨‰¶Ÿ|ò‰.X° ‰D®VÕyy±ñLBDJG³~/øÍ Wõ0‡íMÑ®ÏG;ή ƒÃC¡ÐçŸþÑË.»¬T||<\pÁ ¯?vì«V­âûï¿§ÿþLŸ>5kÖð»ßýޏ¸86lØ@bb"ýû÷š½~ýz&L˜QÕ9˜ÜŽtõž‚ÉíHTÕœKBDd`‰%’þøÇ?Ƥ7%ÍÈŒ3X¹r%£F"ðý÷ß3oÞTõpã!YŽ | "R¸6 ‘®¥J• 5kÖ¬D“&M¨]»vî1q@8æ‡~`ùòå¬Y³†²eËO8¦Y³f,]º”ƒþ*@êÖ­K‰%HII‰*@êÖ­K©R¥œÃ‡w縷c0CUCùúðÇŒ´´´ÄU«VѤI“l“:t`Ñ¢Eüç?ÿ!%%…ýû÷Ó¶m[† B àÙgŸåóÏ?ÏÖX0>>žyóæ±iÓ¦\È‘#GX¸p!_~ùe(‰ì ‡ÃOU55¿Ôb±XάÄR¨ˆH7ÇqfuéÒ%йsçlžÙ³gÓ¥K—¨¹ »wï&))‰@ @BBB¶·•YÙµkcÇŽM;vìØ,Ïóúªjöf!ù€/ÿÐØü&c˜…ßm!p1°褪¹Ç“e¸·ëºoÅÄÄô¾ãŽ;b*Uª”i~Ó¦MLœ8‘Î;Ó¡CöïßORR¡PˆáÇç¹Z:Ÿþ¹~üñÇ^$éu2ýHÎüÄô€Ú@%UÝ—O÷º»®{‹ªö ƒNÆ Ý-Z8]tÑ «6E"Ö­[Grr2«V­"--R¥J1xðàLù ‘H„gžy†æÍ›Ó£GÀ„¾øâ‹ÜtÓM™ŠdäÃ?äÿûß–P(ÔYU×åÇ36®ë>_¡B…»ï¿ÿþ`´¯ç¿ÿýo–,YB×®]¹òÊ+3åƒÌ;—ùóç3jÔ¨_…[:áp8[>Y:‡æë¯¿Ö/¾øÂ‹D"ÛÃáðß±VxX,KîØËiãÇ×õ½¹­ëê8·;wÎ&>öïßÏŠ+HJJâðáì/¨+T¨Àˆ#ð<ÄÄDöíËùl˜A||TâÃçŒø8Š©x•Q|Äa<뀞')>ÞÈI|¨*®ërÕUWÑ¡CÀÄ´>œ˜˜Ùµ+ïUQ¿øâ ={¶‰DzŸ‹âÃçÌ¿ÕK§+>DÄ‘+ÀË®ëîp]wzÆ ûÞvÛm±üãƒýúõsêÕ«—£øPU6mÚÄ|À3Ï<ôiÓp‡rË-·pøðaJ–,™éÇqhÒ¤ +V¬`ëÖ­|ôÑGŒ;–&Mšµ±gFš5kF(ªù>£‘2"ro$é½{÷îàš5k¢®ëÔ©ŽãpÞyçeKFoÛ¶-®ëFm,M|ìÛ·>ø òÌ3ÏxŸþùº´´´aáp¸–ª¾`ŇÅb±œë±œ~Ù@K =Xý!UýGë¯tçÓŽ;ÆvëÖ-Ç×½;vìøµçGBBB¶·‘`þø'&&¢ªÜyçdmÀ·oß>ÆŒ“zäÈ‘=Ï»© ÃHü¯ÃdLèÊU–a.ˆñŒ\ ì®PÕóx_ÇuÝÉÁ`°ïwÜÌþ±eËf̘ÁÀ£z‚¶ÿþ‡TõåSyîÂFDê#1}IÊûciU«Vuï¹çž¨åx§NÊÏ?ÿ̃>HÖ\‘ôdóŽ;æ¸çÞ½{ùòË/½o¿ýÇq~ …Bÿ.ê2Ä‹År¦aˆå”‘·1å9—cz´'""W8Ž3§mÛ¶1×\sÍ ½n;wî$))‰%JM`€ñ–,\¸«¯¾:ÓAbß¾}¼úê«iGŽY‡¯+È·‘~)×/€’ÀSªú§ sL‡0aWyê.Æõ1> 9rdL•*U²­Ù·oIIIxžÇˆ#¢æ{:tˆ &pèÐ!rŒa_¸p¡Îš5+â‹òbãÙ†_ àLÓȪý5zî÷¸  ~‡/«S§N¨yóæ15ÊSÙÜÔÔT¾úê+’““ÙµkåË—gÏž=<òÈ#Q¿ÿÞ}÷]~þùgî¿ÿþLãªÊ³Ï>Ë%—\BïÞ½ólÿû￯‹/ž‡oÊóEE€ˆ´ÇT/ëÅñ„ùï1=Iæ‹Èªaƹ]tQ¶kÓÃÑn¾ùf.»ì²<ï¹}ûvæÏŸNNNv\×]‡Ÿ:W…ºÅb±ä6ËrªÜ ”UÕ+1 õ¢""¿qgΕW^™M|xžG(”Ý9Q¶lYÊ•+ÇÎ;ILLäàÁƒQ×ôìÙ3›ø3fLÚ‘#Gæ†Ãák X|TÇ$•—ޞȲä1ŒøcªaåY|8Žóªëº·'$$DåÊ•#!!ÇqHLLÄon–‰¸¸8† F\\ܯUŲ²hÑ"|ñqë9,>šcÂäŽb:ÖŸ´øpç*ThüÈ#ÈðáÃcZ´hqBñ±|ùr¾üòKÇaãÆ´nÝšG}”¡C‡¢ª¬_¿>Çk›6mÊŽ;غ5s»!>>ž•+Wâyyªs@õêÕÅuÝy¾ ‘X("K€À˜¿_=€Fª:NU×8ŽóÖgŸ}–½ºP¥J4hÀüùóÉËË·””Þ~ûíÐ /¼ +W®\¦ªÝC¡Ðo¬ø°X,–Óà Ë)¡ªÛóRÅ) NnÑ¢EL=²}¯MŸ>I“&eªÄ”^‚WUùíoK(büøñ8{Ëýû÷3vìØÔ£G.‡Ã½U5ê$?‘ÑQXAöŠW7éÍïUÕÿæñ¾â8Θ@ 0tøðáÁêի纾\¹r¿–Ð?~|Ž"$!!›nº)[,»_ÈSÕÛTõí¼Øx¶!"M1ž€ªºú4î5¤S§N1'S&zÇŽÌ›7Çq2d­[·¦téÒ”/_žš5k’œœœãµ_|1qqqQ×4k֌dzn]ÞóÉýy±ªzåç—=)î0Óµ>˜4UÕ«UuvÆ(ÏóžÜ¸qc`Ó¦è̺víJ›6mr 7ndÒ¤Ii/½ô’®\¹r®ª¶ö…Çgùøx‹ÅrÎbˆ¥@ñ<¯V|||Ôï³6mÚ°mÛ6&NœHjj*¡Pˆ×_cÇŽ1xð`ªU«ÆÈ‘#‰D"Œ;6êL7â±cǦ>|xa8¾¾’@ÿ…É}ÙôʘTî‡òLæx#ÂWózSÇqFaÇfí¼¼}ûvŽÍž¼gÏ>L8fܸqìÞ½;ÛšÒ¥K“5%ƒø¸5cÞʹ„ˆ4À¼AÝTuéiÜ+ày^\ÖÉéüðìZµ*Ûx³fÍ8räk×®:·víÚ›E:ŽCãÆINNÎv˜®R¥ •+WÎUÀdeãÆáH$’ÝÈBÆOÞ¿ZD>ÀÇ1%‘·`<‹ÕUuª®Œv½ª®sçý¹sçF} Q­Z5Z·n-~©ãÇ×õë×ÏUÕ–¡PèjUý_¾= Åb±X¬±,Žãì‹v(¨Q£C† aûöíLš4‰)S¦pôèQ~-Ã[®\9†ŽˆDíV|ðàAÆŽ›zèСoý°«cù<"Ò“ønSÕæja<#%€‡Oâ¾åUõ÷·Þzk6ñ¡ª¼õÖ[$%%e:Œnܸ‘×^{®]»rï½÷æ¹òÕâÅ‹ÓÅÇíç°ç£0s°}Pi‘å#÷nŽYp'tìXôo¿ï¾ûŽO>ù$ÛxåÊ•©R¥JT¡Ð´iST••+£ž³#RöïßÏÆ³Íõë×/[_‹h8p€yóæ±|ùr ‡ÃÏð‚BDÊŠÈà;LHÜu˜¿Q 1]Øëªê3ªýJ<Ï{ríÚµÁ_~ùå„ûª*ßÿ=/¿ürêøñã½õë׿§ª ÃápÓ¥‹ÅbÉ+@,J8ž°páÂÔH$zÿ¿š5k2lØ0vìØÁúõë¹õÖ[³õ)W®#GŽäÚk¯Í4~ðàAÆ—zðàÁÅápøjU-Т"ÒHô?ý³ª~œaî<àC 2° “÷‘÷|(©ªNÕªU£íËm·Ýöke«Ã‡³yóf^{í5:vìH»ví(S¦ #FŒ dÉ’Œ7ŽíÛ·GÝdéÒ¥LŸ>=¢ªCUõÍ“°ïlãJÌ¿• ŒÁôgÉúÑ>¯7SÕ°ëº+6oŽÞ0¼Y³fìØ±ƒ”””Lãáp˜ªU«²zõêlM!ãââ¸è¢‹rõbÔªU‹råÊE]SµjÕlezÓ9rä‹-bìØ±©£GÖyóæmô½aÙëÐ0"ÒRD&b:¯.öÏ—¨ê•ªúîÉ”ÒVÕd×u?œ5kVZN¡V‘H„äädžþùÔ7Þx#-%%%IUë„Ãá[O5Èb±X,yÃVÁ²œ6"2Sñ)[,©ìºîª¶mÛ–ëÙ³gÔÒ˜`’='L˜@Ù²e6lXÔF„9tècÇŽMÛ¿ÿÒp8ÜõTK¦æ¿ŸÇÿ€†ÀgÀUéÃo^÷àzààrU=ñ«×Ì÷ugï€J6jÔ(êšôÅ%K–äÀ´oßžN:eZsèС_6nÜ8ÓÜòåËyçw"ªš ª“Nƾ³ ¿3}Ç,ûXUóÜ ]D¯R¥Ê#÷Ýw_¶ÌóH$ÂÓO?M‹-¸êª«Ø°aË—/gÕªUƒA:D¿~ýhÖ¬Y¦ë–,YÂ{ï½ÇÃ?œcãÍõë×S®\¹6 …B¬^½šeË–…Ö®]ë:޳7‰LŽD"oªê’¼>g~àçQõî~“aj)FNUÕè±gyߣ¦ã8kºuëV¢cÇŽ¿–þö<åË—3gΜÔD"‘È˘pÉèªÝb±X,ùŽ –Ó&7âÏ_!"ó»wïîf<d%¯"äðáÃŒ7.uïÞ½+Âápç¼6ö;DdæÀ´h®ª»2Ì=ü¦ŠRû¼V¼ÊŠëºcªT©2ì®»îŠqÝèZ-½2˜ªrß}÷E퓉D²Å·¯X±‚iÓ¦ETõUMÌv‘å´ñúÖÞÿýdm 0cÆ V¬X뺄B!5jD||ïw½ã8ïÆÇÇZµj夤¤0oÞ¼Ô#Gޤyž÷OàEUÝ“Ÿ{Z,‹åÄXb9mN$@ü5W;ŽóAçÎ]ºtÉQ„lÛ¶¤¤¤EȱcÇ?~|Ú®]»V…B¡Žªš{y¬|@Dî^ÄTꤪ 3ÌÝ„9< ¦Ö§±O%×u¿kÙ²e…Þ½{çè-ÚµkIIIÄÄÄÀ‰ª.­\¹’·Þz+¢ª¿=™¤xËÉó]ûöíwíÚ5ÛÜÆ7nݺu£}ûö™ª’}ýõ×Ìš5‹Ç{,Û÷ü›o¾ùknT^Hï ¾bÅ ]¾|y(55UDä3Ïó&3 ²B\4D¤4&‡c8Ð&ÃÔO˜« }ìy x:w ;Ãáð?1b'{}o‹Åb± 6ÄR(¨êìH$rÝܹsC³gÏÎQõV©R…áÇsþùçg+›.>vîܹ6 u)$ñÑ ø»ÿéCYÄGSLþq:â@Uwxžwí¢E‹B³fÍŠž4\pÁŒ9’p8Lbbb®%ŠW­ZÅÔ©S=U½ÏŠ‚' ½¶xñâ¨UØÒó5<˜í{»I“&9&œ÷êÕ‹!C†œpïíÛ·3gÎ=zô±ñãÇG-ZôÅÑ£G‡G"‘ ~Bõ»…)>DäR lƼ hƒiZ:#H.VÕ¿¤øPÕoýßN(ªìïiŇÅb±!Öb9mòâɰ¶ƒã8_yå•Áh½ArâØ±c$&&¦íرc]8nWa~œúÿ€&˜7ǽ3ÌIT®ƒé#Ñó$“ÎsÛ÷ Çq>mÙ²elïÞ½ÓT=;{öì!11‘@ À½÷ÞK0Ì4¿fÍ&OžìÿçyÞèü°Í’;~ߊ-wß}·­ËìÙ³Y¼x1=öX¶0¹I“&áy^ž=`šo&''³hÑ¢Ô={öÄ¥¡Ph &‡bÇé>ÏÉâcèñvdlj¸H^·¹‹Åb±ÄrJøå2Çå²äªút×¶wçã+®¸"¦gÏž'!©©©$&&¦mß¾}½/>NX†3?‘çß;0M϶ûã‚é‚~ °“tž¯‚HDZº®;¯E‹%{÷îíæ$BöîÝËO?ýDóæÍ3ÿøãLž<ÙSÕ?yžõßÁ’ÿˆÈ…Á`pÁå—_^ûšk®É6Ÿ’’‹/¾È!C¨_¿~¦¹]»vQºté+W¥säÈV®\ÉâÅ‹S·lÙëºîzÏóÞ&«ê†ü|ž¼""—cDG? =1)˜Ž©7_ ðˆÄ¥Ÿ º"žÅb±XNÀ‰—X,QYü-—ù¯sšPÕÏE¤ûÂ… ?VÕ’Ñj餥¥1iÒ¤´;vü‡Û¢øè Ü (04Ë[ÛG0âã(pSAxcTu±ˆt\²dÉç‘H¤Ô7ÞH4R¾|yÊ—/ŸilíÚµéâã +> ©ƒ©€v3Ð6 ÉÒ¥KéÑ£G6/GÕªUm˜U€\pÁ9îqìØ1V¯^MrrrÚÚµk®ëî‡Ã¯¯…Ãáòý¡ò€ˆTn†M3L}“ úçUDZ/`¼-±ÆWcJe¿Sû[,‹åÔ°ÄrJøO¹;°ª~!"o|õÕWÃU•k®¹&Û;-- &¤¥¤¤l…Bí :V<?¼j&GjŒªÎÊ0×xÒÿô·ªš÷VÓ'Ï1ÏóÂË–-CUµOŸ>’“'$uëÖñúë¯{ªú¤çyâet‰ IDAT)@ÛÎYü²Ë-1òzaBôÒñ€¯Ž=zÅÆºuëf»¾wïÞQ«—e%³víZ’““ÓV®\éˆÈH$ò–ª¾‡¤G!'ügï nÂ4Ýãíø|Vˆ¶ÕÆTÓšlðíhèÛ7MD‚çx¿‹Åb)–Ø,K‘ "Ý1ÝÂ]ÇqÒ6l(7ß|s06Ö¼Ä …BL˜0!mëÖ­?‡B¡¶…7ž¡äîLÉÝ#þxLŸ‚ªÀkªzâÌàS·¡ðPXêºn½øøøÒ}úôÉ1kãÆL˜0!‰Džö<ïñ‚²í\DDJÝ€ký*¦CÀ\à=à}UÝ ÿ{Ùe—u¿ñÆOªÐG$aóæÍ,]ºÔ[¾|¹F"‘4`†çyS)‚²¹éø%†‡·“[–`ò¿ÞRÕ}E`—£ªÙ 6ˆH;às`™ª6Ï~¥Åb±XŠ+@,…Žˆ\ˆ9¸\€É#ùg0üÀqœ:Í›7–-[VV¬X‘¶sçέ¾øHÉýŽùjÛõÀ Ì¡²mzOÿÍï'@à; õé6JËņ À˜7¹«€v@-×uç7mÚ´tŸ>}Yû„üôÓOLœ81‰DþîyÞca×¹†ˆTLjë0oý3&g>Æä}¨ª{³\Û7&&æG}4X¢D¶¾„™H/›»|ùòHrrr8-- ™éyÞ`¶ªF­ªUÐøåso„XµÃT{ؼ LTÕEa[^‘À!U­VÔ¶X,‹%3V€X ¿²Ô˜–ÿa÷¥ŠH,Ð' tç<ÏóV{ž÷˜ªî,DÛJ+1•­žQÕÇ2ÌÂä¼Zªêš²¡$Fè\‰éªÞVU7ûsM]×S­Zµ²}ûöIÏÈàùø§çy„]ç "҈㢣-ÇÝ1ÿ6Ÿä& DÄ ƒëÛµkW«[·nQפ¤¤°|ùr–-[–vèÐ!×uÝùápø5Œ¥À›k愈´Åx;úeüa#¸&v/‘“EDš+€™ªz}QÛc±X,–ÌXb)TDdæênÌA~cÑZtyxÓ·àRU=ì·À„CÅ`Ò'Ðþ.ð.p°#ÎVdYS)¼åy^çjÕª‹‹‹s×®]ëÿò<ï÷a×ÙŒ/ˆ¯Äަ#À2Œà˜ ,=™Ü¹VDfôíÛ׉`÷îÝ$''³lÙ²Ô]»vŃÁ%¡Ph"ðnaå8å`kŒàÈšP¾x [œ~V³""µV@¨Ü®VÕµEg™Åb±X¢aˆ¥Ð‘;€W1oS{ªê'ElÒ¯ˆHcL~G¸^UgúãqþøÅÀ;ªÚ¯€öLå a˜êZÝ26=Œ²¾)Ð(,PÕÙa×ÙˆˆTÄ|í®®æø[~€#˜|Ž™˜·ç§þ'"#Çy¹jÕªaÏótÛ¶m%ƒÁà_tLK÷n¾×ñzLÂöÕ/Jrø7&±ûË¢Hv?Y2ô"Jg0PU¿("“,‹Å’ V€X ¿OÀL©Ì6,,LüÃÿÀÀ{ªzS†¹$Œ(Ø 4+¨D[yx}Tõƒ‚Øç\DD˜pª«0íËÈZ•îåXß9þÛùA˜ M3Uuu~ÞÿìiãÛÓSA*¯0‡øwδNá~ÞTmLžÎ¥˜Ÿ¥zÀªšT„¦Y,‹% V€X ©„I:¯Ið¾¡8½U‘þ˜0“ƒ˜Ð«Ÿýñ˜J]Щ Þ¦ŠÈŸ€?czŽ WÕ ±Ï¹„ˆÔâ¸à蜗a:‚É?JO /¶‰Ôù…ˆÔb„Ç%¦¶S0=; $¯©(ðÉw˜¦ˆÕÏ4Ae±X,g;¶ˆ¥@ñóÞÀˆ5À b&>˜Ã?Àè â£,Ç;½?_€âãî ûÿÞŠSÃOÞoW ²,ÙI ŸI /´âE…ŸßrÙC¬ŽaÄ×а´oA¢ª»Ed.p+¦šÜ)÷,²X,Kþcˆ¥ éŸp¸QU±=YŒÉïØ¼”aüŸ˜?*ˆEd ð¢ÿéŸTõŸ±ÏÙŠˆÔºúYs9<`90^õU´~g~¹è¶oGŽM"ÀB`20õñTôÿ[$eŒ-‹Å’3V€X é <ˆ -úÿíÝy””Õÿñ÷­ª®êh–f§ ˆ A‰h·ÄlF³;f’“8Æœ,cf&ÉÉ$&3IfI“8&“ä§&“IШq_@$‚ì« ÈÒ,ÍÒ ½Uwí÷÷Ç}ª7š­»ºªÏëœÇjªžªºU žúÔ½÷ûÍõÚ÷®Œ1A ]j÷_ÓÊŒ1×ãʦ€ÏYk[ûà¹?ˆ[oï~n­ýA¦Ÿãlãõ¥¸÷­þpkþ;:Œ›åxXÔµ7ÇÙÌsíK¬Æu¸iíK¬*s1¶¾äígY×uߎ1æÃ¸¥wûq¥µED¤Q‘>aŒ™Œû¶Õÿn­},ÇCêÎp=?ö¿„¶e+àÆý3kíòL?©1æàO¸_Éôsœ ¼oó/Æíå¸÷Í~^‡S"¸â//Yk·f}9dŒ܆ {–Ôâþý½ÞŸ–<ö.2ƬÄU¾*¦âJòFÏ[k“9ŸˆˆtC›Ð%ã¼õøoà>,®ëo¼ÊWoãzÜe­}лþ^Ü’«ýÀ”L7„óª-ÂmŽ}¸íl\ƒßSƘñ´/«ºÒå”í¸†x/Kúª}å…²«q¡ã#@‘wS ÷oí÷¸JnáÜŒ0»Œ1·à–šÍ†~ÜÆúÅÀO¬µoåpx""r ’qƘ_ŸÇ-‰™ÞÛ^ }Ás°hFZkÃÆ˜‰¸Ê9ùÀG­µgø9§ãÂG°¸9Ó%_Ï4Ƙ2Üêtè˜Ðå”&àUÚg9vew„ýƒ1f ®lît^bõn¶ã¡³q‰•ˆˆœ´K2Êó1\øHáõ»ðáùœwùÇßÿ>^èƒð1>áú¡|è\ ^Õ±i´޹tþÿPÇÍã‹€eÖÚX–‡Ù/x ?ü 0£ÃM5¸²Ñ¿³Ö®ÍÅØDDDzC3 ’1ÞFØ5¸ž ß³ÖÞ{’»ä„Wb· (.µÖ®6Æ\‡[Ú.´ÖîÌàóM^ãš½ÝpŽT!NZ­ `íca_5{<x…Þ‡ 7Ѿç%<‡Û3ô¼µ6ž›Šˆˆôžf@$#¼ÍÛ pác nshu3.|lö‡ø‘wÛ/2>¦â>XVp„¯ów:p\ñû8ªh‹úñ,YÖc.ÄU±ú,0¬ÃMoâ6“?d­=’‹±‰ˆˆdšˆdÊýÀt\÷Oõ·Mç]\ï]>ã]~ ·Ä¥žö Òk^%°—qÀ×ï;Ç1fn)Õ<ï˜Øå”&\(MŽ~UŽ9WŒ1#[qû:.îpÓAà1\èØƒ¡‰ˆˆô)é5cÌm¸’¶)àÓÖÚªéd.÷.còèÜ ½6O`Œ9W‰g8°˜¶ô¥ðö&ÌÅ…¹¸NÓÅ•´Ïr¬R¥/ÇS |ø$nvÈïÝÔ ü7Û±°Ÿx‘^Ñé¯rÔZÜÒ«{­µßËíˆNÌSŒ«|epË¢nïÊDÓA/|¼ ŒÀ½7gtøð*U]‰ WÒÞsÚ7Ž¿êË2]¾øLæíë¸:nÆõª× ó¯¸}Ykr3B‘ìÒ ˆô˜·ïãQ\øX œ ݼGá><Å-¹ú'ïúŸf(|LÆm8l®?Ó‡÷-}:pÌÃU­òu8%lÂ-«ZŒ çìÆñîxûŠæà–÷}Wý,ím\«ÿËä~#‘3…ˆôÆ}¸}‡Oœ!ËFÒ·“:¼Nè½áU»Z ÅÍÌÏÔ’®¾dŒ)® }IÕ%´/ JÛŠ›ÝX,µÖÖdqˆg cÌŸÐñq`t‡›àŠ4üÁZ».cé/@¤GŒ1î¤ÿ÷ûè*=ËQÜíýüóÞn÷ú|¼Œ[Öµ7óÑ/Ç1f40x¯wyÇŽm¸°ñ*®ãøálŽñLâuoÿ¤w\Ðá¦zàqÜlÇkm*Ãéw´DN›1fnyÑ`ÜÆíoæxH§Ì3×È-…[Š•*¬µzñ˜ïÁuê.íé¿ÉZÛ˜áöš1ÆLÅËqË‚ÆtsêN\àX,> ä”·/æý¸Ò¹×о'&Š›{ ø³µ¶%7#é¿4"§Å[Ûþíßô7·#:=ÖÚZc̠»êé^†9¸q%À2àý¹,µëm²ŸEû ÇåÛø/«Ìõ:°x]ãäŒ1¸Ðq;®”sºI` ÷^>üoùé/@ät݃ûÆ7Œë÷Ëñxzâϸ×ðëž>ˆ1f.®—H1næàælWò–ÿ\JçåT]ÿ]7àš ¦Ç*km8›ã‡t¥«/[k·år<½°¦ÃÏ“q˧N‹1æƒÀŸ€|àYà£ÖÚhf†wÜç ÌÞã]ÎäØ.ã•x3Þåí?8u^è¸:>Dç¤JÜïý¡3øï¿ˆˆHN)€È)1Æ‚ÀÖÚ‡r<¤Þ˜ÝáçŸx}þóT?¤c> üîßÏãÀ'39ä-s›€ëŽ}® î%ÀÈnNáöã¬Àí?ùko–”«¼ÒÃ7ã*£Ý@{¯€=¸ßókíêìNDDäì¢MèrJŒ1¿>ì¦Ykër<¤3Ƽƒû€ÿ$®+5¸ïß±Ö¾z’û~W~ØàºV®§]¾1 LÎÇmŸ¼(êæ. àMÜ ÎÜ Mgè2¸œ3Æ Â-«º˜„:Üü.tüÙZ»¦›»‹ˆˆH)€ÈIy%wŸÀm¶o­]œã!õ˜1¦×õ<‰«Zõ1à'´/³ÙüHVZk«½ûàGÀ?zçý øª=É? oSøX\å©1¸Íï“:ǹk ®÷ÆÜ Ç`½ª*õN‡êU·×áfôÒvá–Ó=†›IÒÿEDDú€ˆœ×3b#îÃú­µßÎñzÅs núkítïºQ¸`ñY܆òŽvU¸Îæï,nÏÈÒçä;ƒpUÂFѹvwb¸¸ooáÞëÀ;gHcÇ~Ï3¸ ::V¯7£ôðŒµvm†'""rÎQ‘ãò¾õ ·d­]Ö·C“ÓaŒ à:»ßŒ :ܜ• ~Wµm_öG("""ÝQ‘cxìÁm^ü*·#ʨt#¹Æã`Œ™< Õ›¬µoõýÐädŒ1per?ÜHç=6`1îw÷´šŠˆˆôO Òïàºk×{–Uê¸,çØ]ůÿÅ•ÀûÔW#·Œ1“p›Èß\IçMäÕ¸ÊUÏ/«Ã»ˆˆHÿ§"c.¾éýñNkíþ\ާ¤»•SþÖëññS܆嗀[­µMY›ÐÖ‰|..tÜHç¥Uà*W=ƒ›éX©.ï"""gicŒ)ÄmÀÎþÏZ» ÇCê •¸ªHé+Œ1y¸¾wzW=|Eep³Ç36nÄ…Ž1 ¼†Û“óŒµö¬PDDD2FD:ú®#÷à¤«_]m="þŒ+½›þÁZû“íœá•<¾ × ðFà¼.§T/xÇ+ZZ%""röPÀsn¯n°Ö¾œã!õ cÌ5À"à n3ó_€ñ@®ÔðS9ÞYËã.®õŽ9@¨Ã)I\©Ügp¿ŸugÙÞ#ñ(€HzéÕF`"ð?ÖÚ/æxH}ÆjpÏÃ@®ù­µ[s9¶³·yüZ\/™yÀ€.§¼ƒ /‹´ßFDDäÜ %Xðo¸ðQ |#Çcék1Ü&æKqác!ðqkm]NGu0Ƽ W¥j..pŒírJ-n–m!.p¨! ˆˆÈ9HägŒ¹¸ W–ö‹ÖÚãöÇ8ÓcJ‡pá#í— =cŒ98®Â…Ž1]N‰ÅÍr¤—U©b•ˆˆÈ9NK°Îa]–^ýÊZ{çIîrÆ2ÆÌÀm6´â¾‰p¸ÌZ»'w£ëÿŒ1>` ®‚Xz–cd—ÓbÀj` °Xn­mÍÞ(EDDäL r3ÆüðÜÒ«‹ÎÖÙcÌíÀƒ¸æ‚•À­À&`0Ø̵ÖVålýŒ1f pY—£ëŽ(° xX¬°Ö¶dsœ"""ræQ9Gcf¯ãšî]6V½òfxîð®z ¸ÃZ[ïÝ>×_b®ôðG¬µ«r0Ôœò*TMÆ…Œ÷z—“q7:jÆÍp,ÃÍr¼¡9] ç cL÷Aòbàkí¹Qæc.þLÅ•xýàû]÷ c*p¥_ß[BôŸÀ¿ž­ßä{Mß›ù™á]NÃmÈïj®4îJ\XݬæŒ"""Ò[ ç cÌ?÷âÊÑ^`­­Îñ2ÆcpËÊ~Œë3qø´µvÉ îS ü¸Í»j?ðà×grEcƌ᳟ý,UUUlÛ¶mÛ¶qäÈ‘Ý=Ž[k¿Å;Þ6;ûêwïCvñ©Î ôgÞ{ÿïÀ¼«ÞÄÍìlêåãúpåf? |(ërJ(wzGnƤÁ;Ò?wÜKb€þ{GY‡ŸC!Àènž»«ôlÛ›À[Þñ&ð¶µ¶ù_²ˆˆˆHV(€d€1f>ð2À¢E‹˜3g ÔÖÖÒÒÒB$¡¹¹™ƒ²eËV¯^ÍæÍ›©«;aÿ»îƒdÇÙ’­À«_Ƙëßà>¤§€_ÿ`­føyüÀL`>p9n/ÅðL>Ç)¨ÅÍfìép¹Û;vdú5‹ˆˆˆô H/¿*..¦ºÚíÛµÖ’J¥:ÖZZZZhll¤¥¥…ÖÖV©««cõêÕ¼öÚk¼õÖ[D£'ü,ÙLû,Iúr½µ¶¦_f¿ám®þ೸Y…·ÏZkWfq #€óq%|'àf,à–C ô~N_¶à:ͧ5àSúç\ÀèîØ šÉ‘³‚H¤úMŸ>+VPu –Û>ð/ +È»§V0köd.¿â|‚ÁÀ1$•rŸCÓ³$‘H„p8ÜL6lØÀ+¯¼Â¶mÛÚÎ=Žnõ?õ×ÍÒ™`Œ¹7Ó1 ÷¡þ׸ýglµ*‘sI ×8Kœ0qâDvl;À®wQ6¸„WoâÑ?.£±¡…¼fŒ™Œëf>×»jp§µvEÎ%""""§M$3&B{Ùº¹’‚Â7Ü<«í„H$Nõ‘zjŽÔS}¸WmáO¿_F<– Ê£lp1ʹàÂÑ\2kS§%½j'//@ @AAC† a„ Ìœ9“/|á äåå±~ýzî½÷^vïÞ ®íY@¼Mæßƽ¦ Æõ0¹ÏZ›ÈåØDDDDäô)€ô’×U|󀛀ån~×Tpµ6’éñŠˆˆˆHÿ¥Ò;¸æxm3 û%/ ÙƒØTŠT"A2žÂÆ“tÌ~|ø½0q"Å¥!---Äb®TAA©T c ‡NŸš±ýƘBàܬÅÍ@ È|Þ){¬µÎ/.®næxç§þÜDÞñf?zÈç3 "™t³ÖZ¬µ$ R©‡JŸÚ' ­µÍƘù¸ ä×ÀÛ """"Ò =ä•à­€ö½{ÌÈþv¥BÑhŸÏG$!???=†Ž3 }Ö€ÐZ5ÆÜü¸ ·7DDDDDä´)€ô\f@6w³½‡?<ÃÊ‹ö²»€û•%“IŒ1ŸñãÇ‹§È;…¾§cԷ©‰üü|Œ1øý~] ްú4€¤YkdŒñüL‘c)€ôÜycÇŽm[õ•¯]ɾ}õ¬|½’·ß:BCcŒÓÛ‘~ìlɨ‘n$??k-±XŒ@ @mm-ÕÕÕ+`½Ù‹×rZ¼Ù‘Ó¦ÒsJð¦Uʇo¹k/ µ5ÎÆ ‡Ø¸ñ…I%O¿<Öà!nF%//T*…Ïç#™LÒÒÒÒqùÕ!kmM¯^ˆˆˆˆH(€ôÜ€qãÆu{£µ–PÈÏÌ÷Œ`Æ%å¤R)öïobÝÚÃTV6ÑÒrò"Rþ€!?ßO*ÕyÂ!•JaŒéXë­^½‘,Qé¹UÀ­¯½ö‡¦¼¼ü˜¬í<ã1rdÇWJ¥hm³iS-;¶5P[!•:vv¤¸ÐÌc€ÛwÒeúcÌB`°ÈZ»¶×¯NDDDD¤(€ôÜ“À7·oß^ö®w½‹YÊ £IDAT³fqÓM71oÞ<¦M›ÖvRw òsÉ%C˜>½ŒT*ÅÞÊf¶¾y”C#D"IÊ;æ1ü~?ñxc UUUé«ÀµÞ1f'ðð"°ØZÎè+é!s¼ÈrrƘ À3À”Ž×WTT0oÞ<®¿þz®ºê*òòò°Ö’J¥Nx¤Ïihˆ²uk#F„1"ÔéöôÒ«ð¥/}‰D"Á—¿üe*++Y¼x1ÍÍÍ]‡6õÀ/'´‰\DDDDrE¤—Œ1ùÀÕÀÍÀû€1o/((àÒK/åºë®ã¦›nbøðá§BŽw$“IvîÜÉîÝ»ùÎw¾À‚ ˜7oÑh”7Þxƒ¥K—²lÙ26mÚÔÝ ÌsÀ‡¬µ‰®7ˆˆˆˆˆô5 2Æœ›e˜{¼sÎ?ÿ|®½öZ®¸â fÍš…Ïç;­rôèQªªªXµj>ø Æî¹ç¾ñoó\û÷ïçÕW_eñâżôÒKKö~ßZûݾxDDDDDND$Œ1eÀ?wáuG1bwÝuÆ-ZÄòåË;ÊÊʸì²Ë¸úê«™7oÅÅÅ' !;wî$‰ð—¿ü…§žzŠ`0È'>ñ þã?þã„c\¾|9·ß~{z‰ÖNkíÄÞADDDD¤hz/c¾ü(·äê®»îâŽ;î “J¥¸á†øùÏΣ>Êœ9sX³f uuuÔÕÕñüóÏóüóÏã÷û¹øâ‹™;w.³fÍbÊ”)Ý>_$àÀ€Û žŸŸOss3øýþcî“H$Xµj—_~9 .x—1ÆX¥OÉ2^0Æü=ðŸÞÏÜ|óÍ|ûÛß& F;;sæLyäÆŽËwÜÁÞ½{Y¹r%7ndÏž=$“IÖ®]ËÚµ®‚î˜1c˜3g³gÏfÆŒ"‘©TŠêêj6lØ@<gêÔ©ÔÖÖ®aaaa!ÅÅÅvïÞÍ#<ÂðáÃ;– Ž31U¸&†É,¼]"""""Z‚ÕSƘ9ÀÀ7}út~øÃ2sæLªªªˆÇ»o2øõ¯+Vpë­·rÅWPRRB  ¾¾žµkײ~ýz¶nÝzLxIod/**Âçó±lÙ2˜={6÷Ýw_wãcÉ’%ÔÕÕQXXH<gË–-<þøãµÀ—½S“@5pFê2ñþˆˆˆˆˆtG¤‡Œ1O.))á­·Þ" päÈZ[[»½Okk+÷Þ{/‹-bܸqÌž=›iÓ¦‘ŸŸO Àçó‘L&Ù¾};ëׯgË–-ÔÕ?̘1ƒû￟üüüN×777³`Á DQQÉd’`0ÈÒ¥KyñÅ*oça›mÖÚí§ûžˆˆˆˆˆœŒHcj€ÁßúÖ·øÚ×¾F0Äçó‰D¨¯¯§¹¹™d²û•MË—/ç׿þ5[·nÅï÷3fÌFÍ!C(..&/Ï5 ŒÅbìÛ·Ý»wsøðab±C‡åsŸû·ÜrË1½nÝ:víÚE   …(--%²|ùr^~ùe€-ÀOðòö[k_ëÕ$""""Ò íécŒSRRÒv["‘`èС”——ÓÜÜL8&wª€5{ölfÏžÍîÝ»ùë_ÿÚV¬XqLh  >œË.»ŒéÓ§sÅW0~üøcÆ”L&yúé§)..ÆC4%L&I¥RtœM©=ÁË{XÛ÷FDDDDä„@zÀZk1G!UUUm×§R)òòòH¥Røý~ ),,dذa´´´´’t?~<ãÇçÓŸþ4àBD8¦©© k-%%%u[Ùª£½{÷²iÓ&ŠŠŠhjjܾ‘H$B^^Éd’½{÷²uëÖô]Vuó0)`µvgïÞ‘ãS9 ƘÀ ¸Y‚`ÈÞ½{»=7]‚×ZK  °°üü|†Jkkë1aÀï÷SZZJiiiwÌ»µ|ùr|>ápc ~¿Ÿxù$åååD"¢Ñ(ùùù”””°xñbxà*++Ûî{ÁðÉO~’[n¹…Aƒ:Âá0»víbøðáµ-× …B”””PZZŠÏ磾¾žX,Æ0ư~ýzêêêÚö–Äb1ÖZZ[[yñÅÛº©«_-'x™Qàekmsß¼‹"""""í@ºaŒüøtúºË/¿œ{ÖÖVÆŽK0¤¹¹™H$B"‘ ¼¼œX,Æ‚ xøá‡iiqŸùƒÁ óçÏçcûW]u@[yòÉ'Ù¼y33fÌ`êÔ©”••QPPÐRŠŠŠ(--eäÈ‘ÔÔÔð»ßý®­KzºÏG  ‘HPWWÇ‚ ðªr%ÀsÀÉ~ÁuÀ«ÖÚXfßE‘c)€taŒ™< Œ2dûØÇøêW¿ÊÀinnfýúõ€c7fÒ¤Iüô§?åüóÏè6€t<¢Ñ(………L˜0P(Äž={xóÍ79xð ‘H„»ï¾›ÂÂBZZZÚªe…Ãaž}öY|ðA¶mÛ@qq1?þ8Æ ë´Ì Ü~-[¶àóù¨««c×®]üþ÷¿§®®\Ý_Ñ}wó®ÀëÖÚ}EDDDDN‘ˆ10bÄ~ðƒ0iÒ$FÕNB:ãÆcÔ¨Q$ ¬µ 4¨­S9ж”+FÞyçî¼óN6oÞÌM7ÝÄw¿û]Éd²­zCC¸Ì°lÙ2þð‡?‹ÅÀ•Öý/àà)¼ÔV`©µöT–g‰ˆˆˆˆô ÿ÷¾÷½\!gŒ1à@`þüùüö·¿eÒ¤IlÚ´‰^xp½=ÒerOÅþýûY·n„B¡¶†‚>Ÿc >Ÿ`0H~~>Æü~?K—.eçÎìØ±ƒ?ýéOìÛ·¢¢"ÊËË1ÆPYYI,ãá‡æé§ŸN‡—¿?êOaXu¸nçM§ý&‰ˆˆˆˆdP ×È1¸è¢‹Ø¼y3EEEL™2…yóæñöÛoóÜsÏ …˜>}:D"‘ã>Xcc#k×®%P__OeeeÛ­qãÆQRRB0lÛDFYµjçw/¿ü2ÍÍÍ<õÔS<õÔS”——3wî\¬µ,]º”ǃ[Fõ{`áq†aàˆwö[kO¶7DDDDD¤Ïi –1 k'OžÌÝwßMQQàö]Œ5ŠÑ£G“H$X¿~=[·neêÔ©L™2…`0HKKKÛÒ«#GŽðÚk¯ ùøÇ?N,#‹ÅÚŽ@ ÀŒ3ðûýìܹ“W^y…T*Å÷¿ÿýôlÉëÀ»Òn†Û€›õx§Ëõûqew#@R==DDDD¤¿R1æ=¸åLy¡PˆÙ³g3þ|ÊËËÛÎ)//gܸq 4ˆíÛ·³bÅ JJJ¸è¢‹4h•••,\¸‚‚n¿ýv¬µ‚G<'³råJn¸áÎ?ÿ|êëëyê©§ˆÇãXk¹ÿþû9r一±˜ ¼ `-°œÎ]Í›€ÖÚ}Yy³DDDDDzéœ ƘO÷C¼?sñÅsÝu×1yòd¬µ”––RQQÁÈ‘#©®®fõêÕlÙ²…X,Æ!CøÌg>Óö˜H8fÉ’%Lš4‰ùóçÓÒÒ³Ï>K8ÆZ‹µ–ÿøÇ466Ü‹ëçÑQ3Æm$oñŽjkí©ìÿé7@<Ƙ|\5¬{€‰éëÇÇu×]Ç¥—^ŠßïÇZK^^Œ=šP(D]]C‡eÑ¢EŒ?ž‘#G’H$ÚÂÇsÏ=Ç„ ¸þúë ‡Ã¼ð ÂǶmÛx衇À‹/QÜ^Žw€ÖÚ†ì¿#"""""™§Ò…1Æ×ß®Ä-bàÀ\sÍ5\uÕUªb;–ŠŠ  ĦM›X¶lÉd’9sæ …X±b#GŽäÆoäèÑ£,\¸h4е–T*Euu5¿üå/ijj×ñ¸òºµöP.Þ‘¾¢rƘ >‚Á ï}ï{Ûö‰¤g1Ì„ (//gß¾}¼ñÆTUU1mÚ4®¹æªªªX²d ©Tªí>{÷î塇J/½Ú |¨þj­mÍÕëé+ §À3 ø2ðw¸Mác˜2e ×^{-S§Nm Á`‹/¾˜#F 1ưuëVÖ­[×v޵–Õ«WóØc¥+_í~ lV[kS¹z­"""""}Iä4cBÀ§p³"积=z4óçÏï´Oà²Ë.£±±‘7¶––}ôQÖ­[—¾ûëÀo€uÖÚÙ}E"""""Ù¥ÒCƘ9¸ r®¡! `îܹ\yå•STTD(¢ººšT*Åš5kxâ‰'ÒK®’À£¸};¬µkrõZDDDDD²E¤—Œ1“>„òòò¸ì²Ë¸òÊ+:t(kÖ¬añâÅTUU¥ïvx·ôj;nöC¿9ë)€dˆ1fp7®Œî㜞žê€ ÖÚªãœ+""""rÖQÉ0cL·Oä+@P ìÞûq+5ë!""""ç>äõ)Š€8P¯òº""""r.S‘¬ñåz"""""rîP‘¬Q‘¬Q‘¬Q‘¬Q‘¬Q‘¬Q‘¬Q‘¬Q‘¬Q‘¬Q‘¬Q‘¬Q‘¬Q‘¬Q‘¬Q‘¬Q‘¬Q‘¬Q‘¬Q‘¬Q‘¬Q‘¬Q‘¬Q‘¬Q‘¬Q‘¬Q‘¬Q‘¬Q‘¬Q‘¬Q‘¬Q‘¬Q‘¬Q‘¬Q‘¬Q‘¬Q‘¬Q‘¬Q‘¬Q‘¬Q‘¬Q‘¬Q‘¬Q‘¬Q‘¬Q‘¬Q‘¬Q‘¬Q‘¬Q‘¬Q‘¬Q‘¬Q‘¬Q‘¬Q‘¬Q‘¬ùÿ:¯‚a"IEND®B`‚lasso-2.8.2/docs/lasso-book/figures/PaxHeaders/slo-sp-soap-6.svg0000644000000000000000000000013214404126130021423 xustar0030 mtime=1678814296.861815972 30 atime=1678814297.389818971 30 ctime=1678814323.205965813 lasso-2.8.2/docs/lasso-book/figures/slo-sp-soap-6.svg0000644000175000017500000122452514404126130024706 0ustar00bdauvergnebdauvergne00000000000000 image/svg+xml ServiceProvider 1 IdentityProvider 3 SOAP 1 HTTP 2 HTTP 5 HTTP HTTP 6 ServiceProvider 2 ServiceProvider 3 4 SOAP lasso-2.8.2/docs/lasso-book/figures/PaxHeaders/Makefile.am0000644000000000000000000000013214050545511020423 xustar0030 mtime=1621281609.079310024 30 atime=1678814114.684791361 30 ctime=1678814323.141965449 lasso-2.8.2/docs/lasso-book/figures/Makefile.am0000644000175000017500000000353714050545511023703 0ustar00bdauvergnebdauvergne00000000000000MAINTAINERCLEANFILES = Makefile.in figuresdir = $(datadir)/doc/lasso/figures FIGURES_PNG_FILES = \ sso-brws-art.png sso-brws-art-1.png sso-brws-art-2.png \ sso-brws-art-3.png sso-brws-art-4.png sso-brws-art-5.png \ sso-brws-post.png sso-brws-post-1.png sso-brws-post-2.png \ sso-brws-post-3.png sso-brws-post-4.png \ slo-sp-soap.png slo-sp-soap-1.png slo-sp-soap-2.png \ slo-sp-soap-3.png slo-sp-soap-4.png slo-sp-soap-5.png \ slo-sp-soap-6.png GENERATED_FIGURES_SVG_FILES = \ sso-brws-art-1.svg sso-brws-art-2.svg sso-brws-art-3.svg \ sso-brws-art-4.svg sso-brws-art-5.svg \ sso-brws-post-1.svg sso-brws-post-2.svg sso-brws-post-3.svg \ sso-brws-post-4.svg \ slo-sp-soap-1.svg slo-sp-soap-2.svg slo-sp-soap-3.svg \ slo-sp-soap-4.svg slo-sp-soap-5.svg slo-sp-soap-6.svg figures_DATA = $(FIGURES_PNG_FILES) CLEANFILES = $(FIGURES_PNG_FILES) $(GENERATED_FIGURES_SVG_FILES) %.svg: $(XSLTPROC) --nonet --stringparam stepno `echo $@ | sed -e 's/[^0-9]//g'` \ $(srcdir)/step.xsl $< > $@ %.png: %.svg $(INKSCAPE) -d 150 --export-png=$@ $< sso-brws-art-1.svg: sso-brws-art.svg step.xsl sso-brws-art-2.svg: sso-brws-art.svg step.xsl sso-brws-art-3.svg: sso-brws-art.svg step.xsl sso-brws-art-4.svg: sso-brws-art.svg step.xsl sso-brws-art-5.svg: sso-brws-art.svg step.xsl sso-brws-post-1.svg: sso-brws-post.svg step.xsl sso-brws-post-2.svg: sso-brws-post.svg step.xsl sso-brws-post-3.svg: sso-brws-post.svg step.xsl sso-brws-post-4.svg: sso-brws-post.svg step.xsl slo-sp-soap-1.svg: slo-sp-soap.svg step.xsl slo-sp-soap-2.svg: slo-sp-soap.svg step.xsl slo-sp-soap-3.svg: slo-sp-soap.svg step.xsl slo-sp-soap-4.svg: slo-sp-soap.svg step.xsl slo-sp-soap-5.svg: slo-sp-soap.svg step.xsl slo-sp-soap-6.svg: slo-sp-soap.svg step.xsl EXTRA_DIST = step.xsl sso-brws-art.svg sso-brws-post.svg slo-sp-soap.svg \ $(FIGURES_PNG_FILES) $(GENERATED_FIGURES_SVG_FILES) lasso-2.8.2/docs/lasso-book/figures/PaxHeaders/Makefile.in0000644000000000000000000000013214404125673020442 xustar0030 mtime=1678814139.532929763 30 atime=1678814149.776986961 30 ctime=1678814323.145965473 lasso-2.8.2/docs/lasso-book/figures/Makefile.in0000644000175000017500000004712514404125673023723 0ustar00bdauvergnebdauvergne00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = docs/lasso-book/figures ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ac_check_class.m4 \ $(top_srcdir)/m4/ac_check_classpath.m4 \ $(top_srcdir)/m4/ac_check_junit.m4 \ $(top_srcdir)/m4/ac_prog_jar.m4 \ $(top_srcdir)/m4/ac_prog_java.m4 \ $(top_srcdir)/m4/ac_prog_java_works.m4 \ $(top_srcdir)/m4/ac_prog_javac.m4 \ $(top_srcdir)/m4/ac_prog_javac_works.m4 \ $(top_srcdir)/m4/ac_prog_javah.m4 \ $(top_srcdir)/m4/ac_try_compile_java.m4 \ $(top_srcdir)/m4/as-compiler-flag.m4 \ $(top_srcdir)/m4/dps_java_check_class.m4 \ $(top_srcdir)/m4/dps_xtra_classpath.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h \ $(top_builddir)/lasso/lasso_config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(figuresdir)" DATA = $(figures_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CHECK_CFLAGS = @CHECK_CFLAGS@ CHECK_LIBS = @CHECK_LIBS@ CLASSPATH_JUNIT = @CLASSPATH_JUNIT@ CLASSPATH_OPT = @CLASSPATH_OPT@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CSHARPCILINTERPRETER = @CSHARPCILINTERPRETER@ CSHARPCOMPILER = @CSHARPCOMPILER@ CSHARPCYGPATH_W = @CSHARPCYGPATH_W@ CSHARPDYNAMICLINKING = @CSHARPDYNAMICLINKING@ CSHARPLIBRARYPREFIX = @CSHARPLIBRARYPREFIX@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEBUGGING = @DEBUGGING@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLL_FILENAME = @DLL_FILENAME@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GACUTIL = @GACUTIL@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HTML_DIR = @HTML_DIR@ INKSCAPE = @INKSCAPE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVAC_FLAGS = @JAVAC_FLAGS@ JAVAH = @JAVAH@ JAVAH_FLAGS = @JAVAH_FLAGS@ JAVA_INCLUDE = @JAVA_INCLUDE@ JAVA_JUNIT = @JAVA_JUNIT@ JAVA_VERSION = @JAVA_VERSION@ JDK_INCLUDE = @JDK_INCLUDE@ JNI_EXTRA_LDFLAGS = @JNI_EXTRA_LDFLAGS@ JUNIT = @JUNIT@ LASSO_APP_DEFINES = @LASSO_APP_DEFINES@ LASSO_CFLAGS = @LASSO_CFLAGS@ LASSO_CORE_CFLAGS = @LASSO_CORE_CFLAGS@ LASSO_CORE_LIBS = @LASSO_CORE_LIBS@ LASSO_DEFINES = @LASSO_DEFINES@ LASSO_DOCDIR = @LASSO_DOCDIR@ LASSO_LIBS = @LASSO_LIBS@ LASSO_PUB_CFLAGS = @LASSO_PUB_CFLAGS@ LASSO_STATIC_BINARIES = @LASSO_STATIC_BINARIES@ LASSO_VERSION_INFO = @LASSO_VERSION_INFO@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PERLINSTALLSITEARCH = @PERLINSTALLSITEARCH@ PERLMAN3DIR = @PERLMAN3DIR@ PERL_CFLAGS = @PERL_CFLAGS@ PERL_VERSION = @PERL_VERSION@ PHP5 = @PHP5@ PHP5_CONFIG = @PHP5_CONFIG@ PHP5_CONFIG_DIR = @PHP5_CONFIG_DIR@ PHP5_EXTENSION_DIR = @PHP5_EXTENSION_DIR@ PHP5_INCLUDES = @PHP5_INCLUDES@ PHP5_INCLUDE_DIR = @PHP5_INCLUDE_DIR@ PHP5_LDFLAGS = @PHP5_LDFLAGS@ PHP5_LIBS = @PHP5_LIBS@ PHP5_PREFIX = @PHP5_PREFIX@ PHP5_UNPREFIXED_EXTENSION_DIR = @PHP5_UNPREFIXED_EXTENSION_DIR@ PHP5_VERSION = @PHP5_VERSION@ PHP7 = @PHP7@ PHP7_CONFIG = @PHP7_CONFIG@ PHP7_CONFIG_DIR = @PHP7_CONFIG_DIR@ PHP7_EXTENSION_DIR = @PHP7_EXTENSION_DIR@ PHP7_INCLUDES = @PHP7_INCLUDES@ PHP7_INCLUDE_DIR = @PHP7_INCLUDE_DIR@ PHP7_LDFLAGS = @PHP7_LDFLAGS@ PHP7_LIBS = @PHP7_LIBS@ PHP7_PREFIX = @PHP7_PREFIX@ PHP7_UNPREFIXED_EXTENSION_DIR = @PHP7_UNPREFIXED_EXTENSION_DIR@ PHP7_VERSION = @PHP7_VERSION@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PYTHON = @PYTHON@ PYTHON_VERSION = @PYTHON_VERSION@ PY_CFLAGS = @PY_CFLAGS@ PY_DYNLOAD = @PY_DYNLOAD@ PY_EXTRA_LIBS = @PY_EXTRA_LIBS@ PY_LIB_A = @PY_LIB_A@ PY_LIB_LOC = @PY_LIB_LOC@ PY_SITE_PACKAGES = @PY_SITE_PACKAGES@ RANLIB = @RANLIB@ RC = @RC@ REST2HTML = @REST2HTML@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_VERSION = @SWIG_VERSION@ TAR = @TAR@ TESTS_JUNIT = @TESTS_JUNIT@ UPCASED_DLL_FILENAME = @UPCASED_DLL_FILENAME@ VERSION = @VERSION@ VERSION_UNDERSCORED = @VERSION_UNDERSCORED@ WINDOWS_VERSION = @WINDOWS_VERSION@ XSLTPROC = @XSLTPROC@ Z_CFLAGS = @Z_CFLAGS@ Z_LIBS = @Z_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ uudecode = @uudecode@ MAINTAINERCLEANFILES = Makefile.in figuresdir = $(datadir)/doc/lasso/figures FIGURES_PNG_FILES = \ sso-brws-art.png sso-brws-art-1.png sso-brws-art-2.png \ sso-brws-art-3.png sso-brws-art-4.png sso-brws-art-5.png \ sso-brws-post.png sso-brws-post-1.png sso-brws-post-2.png \ sso-brws-post-3.png sso-brws-post-4.png \ slo-sp-soap.png slo-sp-soap-1.png slo-sp-soap-2.png \ slo-sp-soap-3.png slo-sp-soap-4.png slo-sp-soap-5.png \ slo-sp-soap-6.png GENERATED_FIGURES_SVG_FILES = \ sso-brws-art-1.svg sso-brws-art-2.svg sso-brws-art-3.svg \ sso-brws-art-4.svg sso-brws-art-5.svg \ sso-brws-post-1.svg sso-brws-post-2.svg sso-brws-post-3.svg \ sso-brws-post-4.svg \ slo-sp-soap-1.svg slo-sp-soap-2.svg slo-sp-soap-3.svg \ slo-sp-soap-4.svg slo-sp-soap-5.svg slo-sp-soap-6.svg figures_DATA = $(FIGURES_PNG_FILES) CLEANFILES = $(FIGURES_PNG_FILES) $(GENERATED_FIGURES_SVG_FILES) EXTRA_DIST = step.xsl sso-brws-art.svg sso-brws-post.svg slo-sp-soap.svg \ $(FIGURES_PNG_FILES) $(GENERATED_FIGURES_SVG_FILES) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign docs/lasso-book/figures/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign docs/lasso-book/figures/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-figuresDATA: $(figures_DATA) @$(NORMAL_INSTALL) @list='$(figures_DATA)'; test -n "$(figuresdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(figuresdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(figuresdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(figuresdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(figuresdir)" || exit $$?; \ done uninstall-figuresDATA: @$(NORMAL_UNINSTALL) @list='$(figures_DATA)'; test -n "$(figuresdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(figuresdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(figuresdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-figuresDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-figuresDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am \ install-figuresDATA install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am uninstall-figuresDATA .PRECIOUS: Makefile %.svg: $(XSLTPROC) --nonet --stringparam stepno `echo $@ | sed -e 's/[^0-9]//g'` \ $(srcdir)/step.xsl $< > $@ %.png: %.svg $(INKSCAPE) -d 150 --export-png=$@ $< sso-brws-art-1.svg: sso-brws-art.svg step.xsl sso-brws-art-2.svg: sso-brws-art.svg step.xsl sso-brws-art-3.svg: sso-brws-art.svg step.xsl sso-brws-art-4.svg: sso-brws-art.svg step.xsl sso-brws-art-5.svg: sso-brws-art.svg step.xsl sso-brws-post-1.svg: sso-brws-post.svg step.xsl sso-brws-post-2.svg: sso-brws-post.svg step.xsl sso-brws-post-3.svg: sso-brws-post.svg step.xsl sso-brws-post-4.svg: sso-brws-post.svg step.xsl slo-sp-soap-1.svg: slo-sp-soap.svg step.xsl slo-sp-soap-2.svg: slo-sp-soap.svg step.xsl slo-sp-soap-3.svg: slo-sp-soap.svg step.xsl slo-sp-soap-4.svg: slo-sp-soap.svg step.xsl slo-sp-soap-5.svg: slo-sp-soap.svg step.xsl slo-sp-soap-6.svg: slo-sp-soap.svg step.xsl # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lasso-2.8.2/docs/lasso-book/figures/PaxHeaders/slo-sp-soap-3.svg0000644000000000000000000000013214404126126021425 xustar0030 mtime=1678814294.309801476 30 atime=1678814294.865804634 30 ctime=1678814323.201965791 lasso-2.8.2/docs/lasso-book/figures/slo-sp-soap-3.svg0000644000175000017500000122451714404126126024711 0ustar00bdauvergnebdauvergne00000000000000 image/svg+xml ServiceProvider 1 IdentityProvider 3 SOAP 1 HTTP 2 HTTP 5 HTTP HTTP 6 ServiceProvider 2 ServiceProvider 3 4 SOAP lasso-2.8.2/docs/lasso-book/figures/PaxHeaders/slo-sp-soap.svg0000644000000000000000000000013213766621500021273 xustar0030 mtime=1608196928.762895301 30 atime=1678814292.393790596 30 ctime=1678814323.149965495 lasso-2.8.2/docs/lasso-book/figures/slo-sp-soap.svg0000644000175000017500000122435413766621500024556 0ustar00bdauvergnebdauvergne00000000000000 image/svg+xml ServiceProvider 1 IdentityProvider 3 SOAP 1 HTTP 2 HTTP 5 HTTP HTTP 6 ServiceProvider 2 ServiceProvider 3 4 SOAP lasso-2.8.2/docs/lasso-book/figures/PaxHeaders/slo-sp-soap-4.svg0000644000000000000000000000013214404126127021427 xustar0030 mtime=1678814295.145806224 30 atime=1678814295.777809814 30 ctime=1678814323.201965791 lasso-2.8.2/docs/lasso-book/figures/slo-sp-soap-4.svg0000644000175000017500000122452114404126127024706 0ustar00bdauvergnebdauvergne00000000000000 image/svg+xml ServiceProvider 1 IdentityProvider 3 SOAP 1 HTTP 2 HTTP 5 HTTP HTTP 6 ServiceProvider 2 ServiceProvider 3 4 SOAP lasso-2.8.2/docs/lasso-book/figures/PaxHeaders/sso-brws-art-3.png0000644000000000000000000000013014404126114021573 xustar0029 mtime=1678814284.93374825 30 atime=1678814284.885747978 29 ctime=1678814323.15796554 lasso-2.8.2/docs/lasso-book/figures/sso-brws-art-3.png0000644000175000017500000012077714404126114025063 0ustar00bdauvergnebdauvergne00000000000000‰PNG  IHDR ¡™Ð< pHYsÊ&ó?tEXtSoftwarewww.inkscape.org›î< IDATxœìÝw”Uõ¹ÿñ÷sÊ4Ú Í‚¢¢€EEìŠ`C#&ñFMŒ%‰‰¦ÜhÌÏs“˜›Ü’˜bbr£ñj,1±€Ý¨\;VšRDP:SN{~ì½{g†i*Ÿ×Z³ÎÌ>ûìýY‹žó}й;""""""!ÑÕ ‘í‡é4 @DDDDD¤Ó(‘N£DDDDDD:é4 @DDDDD¤Ó(‘N£DDDDDD:é4 @DDDDD¤Ó(‘N£DDDDDD:é4 @DDDDD¤Ó(‘N£DDDDDD:é4 @DDDDD¤Ó(‘N£DDDDDD:é4 @DDDDD¤Ó(‘N£DDDDDD:é4 @DDDDD¤Ó(‘N£DDDDDD:é4 @DDDDD¤Ó(‘N£DDDDDD:‘NffUf¶»™ÕvõZ̬&\O®^‹|ò)i#3;ÊÌ~gfG´ò%û :nUM™Y73ëÝÌÓG„ëùlìü„™õ6³šÎXŸl?€ˆˆˆˆ´Ý¾ÁĈ®^H nV™YE+Ïß XüG‡­H¶K©®^€ˆˆˆˆt-wŸXW¯C¶ @DDDD:™¥€Ã]wÇ[ñš¡ÀA@0xÆÝ %çôzoIàH` °xÒÝó±sÝÂ/w3³løùjw_¦Yí¬t÷õfÖ=\/@O3Û=vëÅá}p÷wšYÿÎáÚßrwßÒ÷+Û¥`‰ˆˆˆt3¼<üx˜ mæüžfv°¸ø0xÙÌö(9ýßê6Žæž6³^±sŸ&…ŸÏ _·¸8þ)~0LKúÓæ§sJ¹óC÷„Ê<×ä?úîÞHæµYzT{ ¿‡ßìêœ7³‚®[Ü}c3/—휑Ž1(||«Ìs‹Ê‹ ½Ÿ3³Uñ6í˜ô+óº¥eŽ­#HƒêHêh:Ë$úüw|oùS,‘Ž`·¶½m"|Í@®™sÊu*”9ÖáÜ}™Ý |!,Fÿ8xÖÝ_ëŠ5Éǃ‘ޱ$|Üx¿ä¹ÒŽV씌žv÷W:`=[µæüë/…Kv]´û!-R –ˆˆˆHÇx(|<7~ÐÌ øb™óÿ>^ÚAëY>önåù!;4w‚»Ïž'ø/Ö··a²ÐˆˆˆˆHÇx`þƹf¶” =n ð=`H™óÿA0ËãsaKÞ_Ô~ô!h±ûy‚ŽZ÷mãzf…?7³¿y`¶»Ï)w²»7šÙ›À$3»X>õwwÏÆNý-ÁŒ“]€_º{Ý6®O¶Úéa»ÚÓ€« ÏgŸ.jáüëÃÇ©[³;€al ¶ÅŸæ…œ>ÞLÝÂkÎ'˜ÞþóðüÛ ‚¨¸Û€¨¯fÈ™TŠˆˆˆ´M8u¼ð»¯+y.A0pW‚ŽUOi‚¶«Ü}M™ëí@0L°X,t÷…%çôzo»{¾ä¹@7w/×m 3ëGP¯±ÚÝW›Y °#°ÒÝ×—9¿"|>,ƒ¥è¹À{À«î>¾™‘H‘Ùffö¯Àπϸ»ê?d‹€ˆˆˆˆÈV éÏ'ØÅùW‚^£JwbDÊQ"""""[%L+ËààKîþF×®J>.€ˆˆˆˆ|B™ÙnÀ±Àãî>¿çï  <ìîå&¸‹´™ÚðŠˆˆˆlƒ°{zÉá éHOq÷æ&šw–ý ž l1Æ„çŸNð}ˆ´;µáÙ6i`4Á¤óÕáGAkÛ?˜Yºë–À àÚÖ¾W¤]iDDDD¤m^u÷c£/Ìl'àaàh‚‡ÿ骅¹û ‚,‘  """"íÈÝ—™ÙO€› ‚ÿ1³g€w€³€‘Àw¿À̺Ÿ#H›Js€ÿu÷•ѵÍl,°/ðw_^zo3M°+3ÝÝ—´Tbf#¦«÷!˜¸~SKß—™ÕŸö’Cÿâî«KÎ;àî4³C€SÞÀªP]@ˆˆˆˆHGˆ‚ƒáãÞµÿIP_1 =j(p™í< V ÀÀ÷Íì4w<¼Îáuú?,sߟL'‡fj@ÌìLàF‚@âÍpMßþPî›1³Ã»‚•%ݯή0³IîþRìôK€ña̵À:À; ¢‘pxøX:‰üà~ —»ï œjf)‚ÿÜï|ÑÝû»û®ÀqÂáÔs‚”÷sÂYEf¶0¸»t{ÉyC€ß‡×éîû¿#BJÏü 8ÈÝwu÷= Öî '¥ÇUG¹{mxý§š[“l_€ˆˆˆˆ´Mµ™í~dfWüG>G°Ë÷&ðuwßàî€ã}€[ܽx¾»?L0a¼AÊaW­¿{‡–\ûlÀ€?oa½ç5ÀwÝ}nx]®$Hû*u1P œçî/ÆÖ÷p°0©ä5 àrwÿgxnÁÝë·°.ÙN(i›1ÀÂðãyàÀZà_Üýå’st÷Bɱ(¸£ÌµoÇÅŽÝ>žwCÎ"Hzt ë>þ#~0 Bþ^æüc€:`‰™}ÊÌFG»"¤z•*mQ,¨DDDD¤­Þ$¨í€ ~ã-`®»7–9wi™cýÃÇwË<·$|p÷Ùfö"p†™]î, ~\&À)ÕXíÂ4s¿¸ vLÞlášµ%_g€¶°ÙN)i›÷Üý†Vž›/s¬!|ìQæ¹%çDn~Ln%Ø q¶œ~Ðt3³D™`¥g™ó3Õ!-\smÉ×ùpGEd3JÁéZÑÎÂ~ež>–vº 8'lß{:ðŒ»·´K¿_°W™çF–96›`×$ïùø°÷€ˆˆˆˆtµìŒ\lfÝ£ƒaw¬ËÂ/ üÿ½õÝÙ¼à½9w‡M:^™Ù`à3eÎvUþËÌ’¥OšYµ™U·òÞ"JÁ‘Ö ‡YíN0Lj%°ÐÝËå+w 3»äîçvõZDD¶†»¿mf×W3Ìì‚”«³ j;þ›÷g‚k€z6¬oÉ߀'€sÃÝ“» Zÿ+AÛà%çßœL0„ðy3û ðvøšý€3€Ã€×[yÙÎ)‘™ÙÞÀŸ(“ûkf €O»ûk¾°ÍAùÔ‘Ž’#øû²Vœ[ž[Z+€»_if+€K_‡‡?~D`”óðAøî^îÚÃû®Ý«`fSjHÎ ØõX~ý"Aëß±óÝÌþxøð_±ë/"„âoH-#(Ä)ËT$"Í1³Z‚žðþ0ýàâ@`4Á»s_q÷Ǻl‘¡pªo?wÿEW¯ED¤-ÌlÁÂåî^®h½=ïUC0gd¹»gZùšZ‚bõåÍtúi‘i–™]@0÷:w¿¤™s*ZûGKDDDDEè"Ò’Aáã‹ÍP.ø0³ÃÌìn3{×Ì–›ÙSfö¹2ç}ÍÌn7³^fö]3{ÝÌ>4³O›Ùÿ˜YÙÝ 3K›Ù-fö£Ø±kÌìeέ1³ËÌì¹p-‹ÍìA3;»Ì¹SÂçÞ3³efö™×Ü÷."""[Oˆˆ´$Êá=ÍÌ*Zó3û2ð8pppÁVýÿšÙ÷KN?˜ Ü |˜EÐ &AG˜áensp&±œf‚SJÖÒx ø Aü[ Š-+ ò¬ãç^>7„ ÛÌmE÷˜Ù[󽋈ˆÈ–)KDšþ~ÁNÈ`ð4ð„»¿]æü½×€™Àqî¾><ž&¨™ Œt÷¹áñ?Ô‘ÌŽt÷±kFÐ¥å§î~YÉ}îN»ûÒðØáµûÄλ8øîþã’k p÷åáçLJkü\´«¶Ã|‚ Wþ`w_µu?A)¥i–»¯Æwý º,6³—ˤ'¤oGÁGx,ð}‚ß9§—¹Õ5ñà#ô°ø|¼ï¼™õ%dŽ‚ržôgó€kË|oËc_~…`‡äëñ”2wß¾¶{xOi#µá‘¹ûàŒp7àà`‚¨Ò“¦º{4 ëàðñ(3›Pr©ªðq2·y©Ì}ÝÌn"h?y,A»I€ÏLðýsékJŒ$HµzÖ·¼Õ{0AËɳ̬ô¹ZX·ˆˆˆl% "Ò*ánÀ}áÇUfv1ð ‚õQR €æj&šô¢ù ™óo®ÎaSr°øû–Ü#|| çô"j.hæùE=üEDD¤€ˆÈ6q÷ëÌìj`O3«v÷z`5AñøÍ ÄÚÚ{,k;N1³^µ(£ß¹{Ã^Õk lÅ­Ö5î>tÛW+"ÒuÂZ»s&“÷'h"ò:AÃù­Ø é4 @Dd›˜YŠ Å©@0 àà0`A©öp#p$Á´Þ½bǶd6°of)wϵpî3ifcÜý¹6¬UD¤Ó™ÙiÝþölæ”Uföð|øñb™º;‘N£"ti–™}ÅÌ~hf»”¯þè<™\OPKñ_f¶ÉkÌÌ7³­Ýe¸‹ mëKÀ¿óÜýÙ-½(\Ó¯ Úêþw0Å׳oìËÿòÀÿ”®ÏÌ’fv¢™õADä#ÄÌÆ˜Ù ‚ß“{&“IŽ<òHN;í4öߪª¢Ò;v xcèjà~`¹™½Îkú³™ÝP¦nO¤ÃhDDZÒøÀwÍl6ð6AmÅH /AkÞ¯E'»ûÛföY‚y/˜Ù3õý€}‚‰Ý­ZÅÝ7šÙlª+¹n+Ö 0*\ã”ð@'HQÈ#Â{ œFÕ´æý«»?Zrî>sCj Øß$Žø”»š[£ˆHG3³Þo } –aÆqÍ5×pôÑGÓšÿÓ­^½š×^{W_}•W_}•W^y…%K–ÄOùŽ»ÿGG¬_$¢DDDDä#,|3è"à*‚t*úöíËe—]Æç?ÿyR© ¡e[ÿOwã7rùå—“Ïçf»ûÈvY¸H3”‚%"""òefG¤žŽ¨¬¬äË_þ2—\r =zôhùÅ­PWWÇÊ•+6lsæÌÖæ‹Šl‘3Ûø`jø5S¦L᪫®bàÀÖtß²W^y…G}”=zPYYN¶ËÅEZ DDDDä#"ì2øà»µhìµ×^üð‡?äÈ#l—{ n¿ývV­ZE·nÝÈåšt)Wn¾t8 "Ò„™TÇe€w€7Ý}c׬j3Û˜üÞÝ/kÅùC æáî×tôúDD¶•™BÐ|w€ÚÚZ.½ôRÎ=÷\’É–7&Z[ÿñÞ{ïñàƒ’ÉdH&“d³Y*++ã¯W"Nˆˆ”ºžòÓÃ7˜ÙÜý'½   7Mƒ¤–$·ò|‘NefÇt·: ‘H0uêT®¹æúôi¿DO=õ .$›Íâî¸;ÕÕÕÔÕÕÅOS"Nˆˆ”ÓŒ?O£ïךÙûî~c­ `A›\Mñ‘=3;¸°öbìØ±\{íµŒ1¢Ýî±aÃyäÖ¬YC6›%ŸÏ“N§qw©©©‰:`¨Ý¸t8 "RNÁÝgƾ~ÖÌÞþ\ÜXú‚pÞÆ@ ÂÝ”<7`jú{忆lp†ÈÌæž7³ƒ?p÷U­¹f8·¤°´5ë3³žá=Þw÷µ­Z¸ˆH 3«þ$wÜqG~ðƒ0eÊ̬Ýî1kÖ,Þxã Ö¬YC¡P(îz466âîTVVÒÐÐ@"‘ˆ^¢ép‰-Ÿ""ÀãáãP3ëff«Ìì3; XL0 ð•èfvº™- ˜˜>XefwšÙN±s ¯óýr75³³ÃçÏ ¿Þ9üúßKÎK™ÙÏ•ÀÀJ3»›`š{Yfv™½MPã2øÐÌþ7ö?ïŠðžcÍìf‚‰èóˆMÙ§}ÌŒ›o¾™SO=µÝ‚\.ÇO<ÁìÙ³Y»v-…Bd2IEE™L†t:M"‘ ›ÍR]]/DW"N; "ÒZýÂÇ á£ÔVN0¥ü‚‰Ìì3À­À2àëÀ»À$‚”ýÌlt¸Ûð,°ø’™ý Ì´ñs*‚)êÐ| ÈÏ u=®% |•2»5áú®&H+{:|\I} °‡™s÷lxzUxÏ?jVï•ýI‰ˆ´ÎpÆ +„§R)2™Ì6_tåʕ̙3‡·Þz«XëQYYI.—+Þ#ÚõH§ÓÚ‘N§DD¶(l ùÃðËÇKžÞ ˜âîÿˆŸ&èäÒŒs÷ÅáS7³Uí%¿ü›»Ìì&‚ ¿GÇ®³pp›»¯ia}{Ï“¢ÀÁÌþ¼XæüaáýŽ‹=÷™Ù;À/€Ï7•¼4Œu÷ÆæÖ""²ªvØaú÷ï-r£: €ªª*r¹\«»\-]º”Y³f±lٲⱪª*êëëI¥R˜™L†ÊÊJ) TVV’ÍFï·(‘ާ,)§ÒÌn? H¯:ƒ •êû%ç¾>Bì„Ü >"?r©‘›þèSrîÙ;-ÞÂzOÏ».¶kA(ü²ÌùŸ#øý÷Ó2;. (Â<¾Ìë~¡àCDÚQš¶Ðuw‰UUUTTTŸËår$“ÉfS´òù<ï¾û.3fÌàý÷ß •Jw8ªªª(  …bVEEfF6›%N7Y“HGÒˆˆ”c„}è ‚…ÀKÀoËv¿Yæõ{„³JŸp÷Ufö.ÁÎItl¡™=œjf=Ý}eÏ–la½Ñýæ”ynv™cQ{™«Ìì;ežÏS¾q¹ïUDd[m€Ä¿vwr¹ù|žD"A>Ÿ/¦O¥R)‰©TŠ|>Ï‹/¾ÈìÙ›~ÝUUU‘ÉdpwªªªŠ¯‰vXâ»"Ñ<èöòËvMˆˆ”Óàî¶òÜueŽU„Í .ÜHÐE*îF‚t«©Àÿ‚ Ÿ¸{ž–E÷«+ó\¹5Dõ# j:J-Þ*s¼M¼DDJ8PL·Z³f 555Á%AI6›¥P(°aÆânE4#ä¯ýk1åĘ̂¨¨ ±±‘t:M¡P “ÉP]]M}}=Éd’T*Eccc10I$ª‘N¥DD:B4£cPéáÎÆ àý’§î$H—:‡ ‰Ò±¶”~°<|Èæ»›­ 0àzw®×éê>¦OŸÎÛo¿Í„ Ø}÷ÝéÞ½ûféY lܸ‘D"ÁÆyÿý÷q÷âl¨Æ#“É’†††b݇™?΋ÍQ"N5 "Òž!HÝ:=œ7è <?vĺ ofû§Ϻû¼VÜoFøxZ™çN/s,*t?»×é(MR°N8á&NœÈ /¼Àücî¸ãæÏŸÏúõ›6_£®V7näÃ?Ą̈®®.ÎùˆÔTUU%“Ir¹Üf-yãkéHÚ‘vçî+ÂÎVç¿4³o¹{cXüŠ 8ùy™—þ™ (¸… H¹±•·|ˆ Öã<3{ÒÝowZÎ!Hé*uAw¬/›Ù2à?ݽÀÌúgsÝý¡VÞ_Dd[4ÙéÞ½;#GŽdäÈ‘444°xñbž}öY>øà†Ê!CèÝ»7UUU¸;…B¡Xœ¥\åóùbGCCC1¸ˆ&ž×ÕÕ5™­í€H'P""åÀ®íqÏ3³ ê>€ J&­GþIÐqkdxÞ_[s#wχsGþjf¿"˜Rü?à?Ëœrxý¾ofKó> ²DDÚ™õj) @"ù|žd2É!CØ}÷Ý©¯¯çwÞaÖ¬Yär9ößz÷î] B€âG"‘ ™L’ÉdŠÁE2™,îŠÄÏK§ÓÅ] Ò™€ˆH©¯°©¨»% ­yß)÷¤»¯7³ã€c †ö$(ì¾ÓÝ›{M! $63ûãÃð¾ J^;ÛÌFŸ'èŠõ>p;A}H4‰=~þ2à03;‚ ø½?ðA¸ÆÝ=^£rðjsß«ˆHk™Ù£FztÇwL<þøãk¢Y°y;^w'›Íbf 4ˆÝwߺº:ÌŒ†††&éXTTT»YE…èQ7¬|>_¬I§Óär¹â †††x{_ ÒဈHî~_+ÏËwlá'Hju*“»?<ßÂóõÍÝ7l|]™§š]§»ÿ“`祥5Í¢LKa‘mp̱Ç›8äC¨­­­½í¶ÛŠÈܹséÝ»7½zõ*ñ–¼õõõ¸{±`<€”¶ÚÍårTWWSWWGEE¹\®É±T*ø/`¤är¹h} @¤Ã)é<¿ÿÝï~wö“O>9¨±1è+V¬àºë®c=öààƒf·Ýv+Û +ž²=ï|•L&I$Åö»Q`âîÅZh×#ÞŠ7¤"tép @DDDD:‰»¿ ìjf»¿&FÅa‡ÆØ±cyë­·˜={6>ú(ƒfĈôéÓ‡nݺůS|Œލž#ªñ(=l–†¢k¡t& """"ÌÝ™Ù3ÀÄx*U"‘`È! <˜c=–÷Þ{7ÞxƒçŸžwÜ‘]wÝ•vØ¡8d0š–ÍöÈd2¤R©bJUTã¥ae³ÙâPÂT*…™‘Íf‹)Y(‘N DDDD¤k8P¶=:¶ãŽ;2`Àr¹+W®äwÞ¡¦¦¦0¸;Å@$ 8âSÐãݰR© TUUQ__O:.!¡"LˆˆˆˆHר¬ o|7$ú:ÚéèÝ»7;ì°Éd’ 6Ï,‚žJ¥šŒÕ‡D­{C @¤Ãiºˆ|$™Y•™íÔÕëé@Å$x¬X±‚ºººâIñçr¹\“ç¢Vºù|¾\D‰™'£g³Y**‚ëÙl¶ÉNIt,¤D:œùÈ0³¤™}ÉÌõÀ{f¶ÆÌf˜Ù™ÙgÍlpW¯SD¤”Ý™?>^x!×_=sçÎ-Ös”›4 .r¹\qöG´³$“I’Éd1]+›ÍjD:R°Dä#ÁÌ&?ö-yª0.üˆÎ]N0+dfì`ƒ»¯ïøÕŠˆ´‹&; ‘C=”C9„7ß|“‡~˜»îº‹#F°ÿþûÓ§OŸâyQ ŒïpDAˆ™'ž—Ö‚DK6›Ïép @D¤K™Ù~ÇqáלrÊ)œ}öÙTUU±`Á^}õUfΜÉìÙ³£4ÀIáG\™Ý\ÝÜ´u‘&; ¥;C‡eï½÷¦¡¡… 2cÆ Üƒ>˜~ýúÏ‹:[e2€bÀ¥c Òétq.H|2z´+I¥Rû˜ÙÏÜý;öSíŽéf¶3ðoÀÓA:è ®¹æ<ðÀâyx Ÿýìghhh(#¯¼ò ¯¾ú*‹/ŽÿÑ® ¯7ÆÌƹûêNû†DD¶^‹EèÑôóB¡ÀàÁƒÙsÏ=ill¤P(PWWW<7•JŽ\.G>Ÿ/îv¤Ói²Ù,…B¡lç«øŒ€^½zQ]]ý¯f6øðŒDÚéTfÖ¸øÐ `×]w媫®âä“O.M–SUUŘ1c3fLñØÚµkyíµ×˜9s&þóŸYºt)À>á=.ïàoGD¤-Ê¡Ãæ»!ù|ž7’Ïç›(Q—¬(¸¨¨¨ P(Ó°êêêH¥RÅ¡„ñÉçÑ®HTÄÁ’+®¸‚ÚÚÚÓ׬Ysú­·ÞºÎÌîþáîk;ï¸ñ¨÷ IDATÇ#ŸT*B‘NaÏoWÝzõêÅÕW_Í3Ï<Ã)§œ‚™mõu{õêÅ„ øÆ7¾ÁÅ_LUUUôÔ±í·z‘Ñd4_h.°¸{±ýnuu5Ùl3+ÕÕÕ  …B±ýnee%¬—¦a f͚ņ èׯW\qEÏ3fL½ë®»þ|þùç¯îÕ«×3fv™™îø|RiDD:œ™\GXHžJ¥8óÌ3¹üòËéÛ·o›¯ïîüõ¯eãÆ 8 ônó…ED:VÙ"ô-톔î'‰bV¼ÛU\¤Óiòù<Ùl–ššêêêŠiX¹\®IýH}}=7ÜpúT*5ÿC9`ôèÑ6tèPjkk9õÔSí¬³Î:¤P(òꫯrà.›9sæ½À#ÀtwßÐ?+ùQ""ÆÌú?Î'Üq0a?úÑØgŸ}ʾfkS?øàn½õVÒé4©TJ\Däãd³"ô–¸xúUôäóùbKÞúúzR©étº8€0~¬±±±8Y½®®n0¦±±ñ3ëÿØcœ¸÷Þ{ŸpÈ!‡Ô >œwÞ™Áƒó³Ÿýl§ªªª Þ}÷Ý }ôÑ\uuõ“ ÷w«ˆ´Dˆˆ´;3K™ï°Ë.»ð½ï}3Î8£Ýîóä“O2{ölÒétñx"QÌ,UѤˆ|ÔmV„ÍÍ(Éd²Ø +Þj7^÷‘ÉdŠ-{¨©©¡¡¡ Ø-+ô†»^pp“™%çÍ›78±¶¶vòرc÷=z4C† ¡W¯^œvÚi©³Ï>û¨úúú£fΜùó}öÙgé¼yóîîžt÷â D€ˆH»1³0ž ÝêSÕÕÕ|ýë_çâ‹/.æ·UCC÷Üs6l ‘HÏçI¥R¸{|Dˆˆ|Ôµº½ÜsÑñ\.G2™lRT "ŒvER©TqW$Ú‰f2™âÍ "t÷<0#üø®™ >}úäd29ù€8fìØ±©¡C‡Ò¯_?†Îï~÷»]‰ÄÅóçÏ¿ø¶ÛnÛ`fcÜ}N»þôäcKˆˆ´‹0Ýê>àèØÄ‰¹öÚk4hP»ÝgÞ¼yÌœ9“ºººbÚA¼«Kl¤ÐÒuDD>ʶáÞš”¬¨óU¼¨¹€ˆH{˜pÙe—ñÍo~³ÉdݶZ¾|9/¼ð+V¬(]FE–ÑÛ(ç9ÖÊWˆˆt„~À¹Ñ±ß9 Oð»'<äî¯máZ[U„ÞÒH”~Z„$‰bGEEÙl–\.Wü½½6–¾ÚæNî> ˜üÔÌj´»¯lëuå“Cs@D¤=œ0|øp.ºè"jjj¶i¦G9¯¿þ:Ï>û,+V¬‚?ºQA%-}£œçB¡ éPaw§ùÁF\H‡`v+.×ìHüó–ž‹R¯¢Tª|>ß$à€`9ª ‰ŠÓ³ÙlqW$‘Hg4hç{î¹g¿éÓ§·KÑž»¯Qð!¥´""ía7€C=”þýûw&‰UUUd³Ù­n¯ÛÐÐÀüùó™={6õõõ¸;©TŠd2YÌ_Îd2ÅÝ( +Fˆˆt”¯6ó\¸',ÚÞ’Ív@"åÚî6÷yT|ýŽ,—†•ÉdšÔËEiXñYµµµ;¤R©ÏÙiÓ¦-H$óòùü¼N8au+¾‘VQ""í&Ê!N&“ôìÙ³X$íJDiS-#fÆÚµk™7osçÎ-ž[YYI.—£P(P]]],¨, Å"Ë(P ©]D:J° (¤šæºûâV^§MEèÑëšK¹Š§§ÆÆÓ°¢7o¢k%“I¯Ÿö) û˜Ó¦M[•H$æär¹¹õõõ‹¦NÚšK¤, "Ò Pþ»B¡@*•*¦D)*±”)Òé4«W¯æ©§žâÃ?,žŸN§‹ÝZ¢‚ʪªªâÛøp­Ør퀈H»2³ à``P.E©<°—ÌCÛ'¡Gã7jòù|“cÑ.t´íŠD3Bêëë‹)XfÖÜ›7; …ñ‰Db|÷îÝ3Ó¦M[Ì1³¹“&MZ·ß³ˆiƒ‰æ&ö666’ÏçI$¤R©âÇúõëéÛ·/sçÎå‰'ž —ËÓ …B1u êà/žÌf³ÅV¼Ñóñ5‰ˆ´•¿XöŽz„‡—à ê>²ÀÃî¾q+.ÝäÍ›mí ×××7iÉѱ(àhhhhÒE0jÓ L&·¸{ìîÀ>À>îîÓ¦M[Z(¤R©9ÇüÛè÷¯liM )ŸþyHmmm1-+þ‡3›ÍÒÐÐÀºu먨¨ ÿþ,_¾œÇ{¬x^Ô2ž«µÚÒŠwp©¬¬Œï¨(KDÚÌÌv'èô7 <´xx ¨†üj5ðâV^¾€lKzÔŽ¼´Æ#Nt”î766S´ …•••Ü{ï½Å9 £Fz{+¿&‰…BáˆiÓ¦mt÷7òùüœž={¾yÄG´¥M±|B)‘öÐ$yÅŠ\wÝuì»ï¾Œ3†¡C‡Ò£G²HëëëY¿~=Ë–-‚´¬¨Ð<p”¦D)WuuuTTT`fd³Y퀈H»0³]€c!á¡:àiàYwZÕ6šÙcÀ$àï¾µÝ6¶P„ÞÚ $™Lf³Ý⨆. >¢Âõ[n¹…§Ÿ~€=öØcþ©§žº`+¿‡RÝÌì€T*uÀÆ ÷ßÿ;î>§P(Ì=ùä“—·ñÚò ¡DDÚCñ]<3ãÄOdâĉ¼óÎ;<ÿüóL›6=ö؃‘#G2`ÀºuëV|a”šµ~ýúb+ÝxAe2™,¦aE8£îZñAZÑN‰ÚðŠH[˜Yà(‚Ô*#H­z˜ÑÌÐÁ™@ÂÝßÛ†Û9l^„¾5»!Q£xÀÕ}Ä—ÆßЩ¬¬dÙ²eüö·¿eéÒ¥ >|ÎUW]õÐ6|›}O‰Dâ±\.·Ø'™LîåîC‰ÄäiÓ¦­4³ë&MšÔØ÷‘1 "Ò6{ÏÌ8p »ì² 'tK–,aÖ¬Y<ýôÓ 4ˆ!C†°Ã;PQQQü#õ¨Ò–‘å:¸”þ±MóU""­ff5À¡À!ÿ?r‚Y»ûšæ^¶Û}voÛ$}µ¥À£äž›.6úˆ&¢G¿7£Á¬¥ÇR©¯¼ò üã©««#™Læ'NœøÄE]4s¿‡øº‰ÄmÇüœðÐK@búô黹û>‰D¢ÏñǯàC€ˆÈ¶1³À·†oõ…òÓ|£?¬;ï¼3$›Í²lÙ2Þ|óMzöìYœÝáîÅŒxÊUsiXÑNIT  áŠMóU ˆˆl‘™¥1Àx *<¼xÐÝ;:eh³m)BÏårÅà¢4 +•JߨÉd2<øàƒÜ}÷ݸ;=zôXwÑEÝ3a„emýFÌlE*•ºé¸ãŽ[Qú=Nš4i!°°­÷O "²­¾wå•W^Ü·o_þû¿ÿ›Å‹7év½#‰ÞËçóôíÛ—wÜwgÆ Åó¢¼ä¨=d< +*²Œ÷ºÚïÆ‹,µ""­ÑBg«GÜý­NZFñ’( Z_ }½y•G)Wñö»«W¯æø³gÚwß}÷…W^yå´þýû·G‘ø+6l¸sêÔ©™v¸–l€ˆÈ¶jœ?> `—]vi€ÜqÇôêÕ‹Q£FmÖ +úhhhh2$úÃÕxDDãG2™,!Q—hW$Þ +¤DDÊ*ÓÙj-ððÚ6’·E1) ñ7PZU ¥¯f³Y’É$‰Db³)è…BE‹ñ›ßü†>ø€D"Q8úè£g|ãßx®­‹w÷‚»?pâ‰'þ³­×’í‹ÙVß¿í¶ÛÖÝqÇ'UWWXÔrܸq¼öÚküêW¿bÀ€Œ5ŠÝvÛž={Í¿»—Íf7k«B€bÝG< +žš¥iN™ÎVõÀÿÑ´³Ugz'údéÒ¥ 4h›ŠÐ£ÝŽxV4'é™gžá¦›n"“ÉPSS³ñ /¼÷˜cŽYÒkߘJ¥n™8qb[»fÉvHˆˆlw¯~üÐÌþ œÕ{ 2„Aƒ1qâD–.]Ê¢E‹¸û­­eÏ=÷¤_¿~Ŷ¼áµŠiQ®r\Äg€¸ûfÅéQ+Éè˜&¡‹H)3«Ž$H¹jMg«Î2X ôûú׿ÎOúS† ´. ËÌŠC£€#jÚQ__ÏwÜÁÃ? ÀÀ—\qÅ÷4hk%6çÝL&sÓ”)Sš-Îi‰iõ°yº™±ÓN;1`ÀÆŒÃûï¿Ï;ï¼ÃÿýßÿÑ»woFŒAeeeñ"á;tÅ¢òd2Y:ïà/²ÌçóÅ ¥ªªJƒE¤h[;[uww3»¸þÙgŸµÃ?œñãÇsî¹çrÄG´j7¤P(ÓS£Z•+Wò«_ýŠE‹0nܸg/»ì²Éd²=Þ˜ynãÆŸ:uj~Ë§Š”§DDÚC“V’‘øG¡P OŸ>ôéÓ‡Q£F±zõjjjjŠE’ÑHccc“€#šÜÕ}¸ûf3Bòù|ñ5±A„ÙÎþ!ˆÈGC ­r÷÷»lae¸ûïÌlp»}ê©§xê©§Øwß}9ï¼ó8öØcKÏßìëhÀ`6›eÞ¼y\ýõ¬[·ŽÊÊʆsÎ9çþSN9eQ;,5—H$î>þøã_h‡kÉvNˆˆ´‡VOó:µÔÔÔl6|+ú#¥aår¹bG4ñ<ê¦UYYYÜ)ŠK¬½+ò¹E¤ …­†ÔyÔ†‡ß#Øñè¬ÎV[ÍÝ6³Ã€Kɯ¿þº]rÉ%ôë×3Î8ƒÏ|æ3ôêÕ+:¿øÕÞe2¦OŸÎ]wÝE¡P ÿþï_~ùå÷ìµ×^kÛº>3[“L&o>î¸ãÚ£vDDˆˆ´‹&ÿùÏR__ÏØ±c›¤Z•Ö~ă”ø€ÁŠŠ `SpïkŸÉdŠ»°©8=V„®Dd;v¶:Ø1<´xx©3;[…ëøðpHa«¹û“À“f¶/ðà³+W®Lÿú׿æ÷¿ÿ='Nä”SNa¿ýö‹îE¡P ®®Žßÿþ÷¼üòËŒ=úåË/¿üñêêê6§I™Ù¼|>Û¤I“êÚz-‘ˆieS°Ì<ÀÝwßÍ~ûíǘ1c:t(fVvðV"‘(Nî­©©)ñ¾öQ¥fÅ»fUUUiDd;cf;ìxìê’ÎVfV \~T €ßl˵Üýuàl3û.ðeà‚L&3àÞ{ïåÞ{ïe§vbâĉ 8·ß~›‡zˆåË—“N§3gœqÆCgžyæÜvø–ÜÌ4iÒ詇´3 "Ò6KÁŠºa}õ«_%ŸÏ³dÉž|òI|ðAvß}wöÝw_úöíÛ$`‰R ¢.QV|W$Nov,j¿Õ…„†šYwwßÐÙ? éxfÖ 8 8€ ³Uxx¼³;[™ÙIÀ/Ø=<ÑÖëºû{ÀUfö#à àKÀ„eË–%n¼ñÆ&çöêÕkõ¥—^z÷¨Q£>lë}ͬ¾P(Ü6yòäödD6£DDÚƒCPßÑÜôóþýûóÙÏ~–|>ÏÒ¥Ky饗Øwß}éÙ³gñ5Éd²øšø€Á¨%o<I$eÓ°¢Þ½{ï³aÆWÌl„»7vöDD:F¸Ó0ŽÍ;[=âî«;y-{?&‡‡ÞþŸ»ßÔž÷ ‡Ý ÜÜ·oß]vÞyço¯\¹òˆB¡PkfãÆ›õéOz^mmm{L"_VQQqÓÑGÝæ@F¤9 @D¤=€ÍRª¢ÏK§Ÿ÷éÓ‡N8B¡ÀÚµk‹çår9R©Tq—#jµ›J¿ªâSУ^÷ñ)èQ|€ž={2~üø¡‹/þÐÌþÜ <èîë:ñç""íÄÌ’ÀAÀtqg«°½ï¥ÀwJ ü– øèÐ]×>ø`)ð­ør|ðÁÞ¹\n€™õ/ ýÝ}€™õ7³ªæ®ÓŒ— pçèÑ£ÕEP:”i >ƒ£Åþõù|ž 6S¶¢ÇøF¼ýncc#fÖd$ŸÏo6ÝÌŠ¯73¾ð…/гgÏnÕÕÕg-[¶ì¬x ß½{÷'7nÜø p»+½@ä#®™ÎV+v<Þì‚õœü Ø5ýéO'¿øÅ/YWWwäË/¿ü“ýöÛï½×_ý>‚ÿ@<¤T-‘–:[½ìî:lÔ̆×…ëX|ÃÝïëÌul©S§Ö‹Ã¢‡z¨[]]ÝŽ©Tª™uËçóoœ|òÉïuÅeû¤DDÚCÙ6¼å>oé¹(àˆ×‚DiVѼ( +ª-‰‚¨Mo´†•+W–-[ö½_|qpâ°aÃN<üðë‡ FÿþýÙ{ï½ùÅ/~±sEEÅï½÷Þ÷ß6N?™Ëåîîr÷wÛý§$"­bfýc€½ÂC]ÒÙ*\K-AªÕ7  øð“Î.vo/ÇwÜF‚jaW¯E¶O @D¤=´8 =ú¼¹ç¢×E; QG:.îzd2AmeUUUqa.—+NAŽEH.—»ÑÝÿ=¼ÅMfVõÆoŒŽ©­­=}üøñC8àL¯^½8óÌ3Ó\pÁÑõõõG?ûì³?:tèÂE‹Ý <<áîʉé`Ít¶zxÌÝ7vòZ 8 ø)0 <|ðuw_Ü™kù¤Q""í¡Õ“Л{ÎÝI&“Å]( «¢¢¢8$ŸÏÓØØX Bâíw£ $JÁ"x—2~¯‚`âà»f6ì¾ûî;ÁÌN=zôacÆŒI6Œ¾}û2jÔ(n¼ñÆ¡©Tê²ùóç_vß}÷m4³¿s÷¿µûOOd;÷Qêl®g‚:CÃCoÔy<ÐÙkù$R""í¡l VkwC¢B¡P 8R©T1 ‰×x¤R)Šíw£¹! TUUÅ×Ðbš†»¿¼ü—™õxñÅ& 4hÊá‡Þwøðáì²Ë.ôìÙ“ /¼°Û·¾õ­yòÉ'ÿÅÌÆ¸ûómþ‰‰f–ÆÕáá…ÀÃÝÙ*\OoàûÀE@Øüðcwo·"‚im*B$‰bÀ‘Íf‹Ï£ºÆÆF‰UUUÅ)èÙl¶øšúúz‰DÔ«Õyâî¾øð73»à/ùË(`r:>i„ tÐA¶×^{±zõj€ô6ü|D$&Loúp$Ð+<ü>AàÑéu f–>Olô ß|ÕÝ—tözD>逈H{ØbzKAI¡Ph2= .âiXñ¡„¹\®ÙÔ¬X+àm*Tõ`q/‡?2³>=öØD‚AcË€g¶åº"ø(u¶ ×s AºÕ˜ðЫÀ×Ü}Fg¯Ed{¡DDÚC³Eè-¥Ÿ»{±ýniVMM uuu¤Ói’ÉdqPaCCCqWdýúõ$“Iòù<‰D¢]þ#ãîÿ~ˆÈ62³]:[íê²ÎVázúW_À‚ô«_wÅzD¶' @D¤=8”Ÿ„^úuKEèÑó(¥*>ñ<*4ê>’É$™L¦ÉôøÈøñã'LŸ>ý|3›ÛÐÐ0kÊ”)k:ðû‘f„mlöcSg«Ç»¢­™¥j<®!Hÿràfà_Ý}Eg¯Gd{¤DDÚÃVMB/W„=–¦aE­vãó@òù<…B¡XœuÃÚ°aCq$™Lš»ïéî{VTTœ<}úô÷Ü}0÷…^XrõÕWwzª‡ÈöÄÌjºH}$:[…k:ø%°oxè%‚t+¥VŠt" "Òò°)°Ø–"tw/ÎöÈårŶºQO¹J¥R˜Y±î#JÊ‚€T*Õ$Àp÷£:è ºûï¿™ÍÏårsN>ùäõòSÙ…­Æt¶ª /êŠÎVášv~BPhnÀ*àÀ¯Ü=ßÒkE¤ý)‘öÐæ"t¦œ§ÓiܽIç«(àÈd2MŽøNI4½•5 5f¶°_:>uÚ´iïsæžvÚiK SÊD¤õÂNRûG=ÂÃK v<Þê¢5¥¯ÿ®©üø–»Ðk "Ò> P>ÐhmýG¡P(N¢à">=*Toll,¦cÝvÛm̘Ì «­­]õíoûp@{äv/Êçó·¼üòËÇŒ³k.—žL&÷Éçó‡§Óé‘À¿·Ã=D>V̬AÇþ³3 ¤þYò;¡³×uð 6Íù'ðuwŸÕUk‘æ)‘rÞ’áç‰ð`(AªÅIf6ÃÝ 7 @`ëŠÐ£h¶Gp¤Ói²Ù,©TªIÝÇÊ•+ùíoËâÅ‹>|øœ«®ºê¡=zdÛø½{2™|râĉÓÂÉ'Ÿ °8ü˜6}úô~fÖ³÷ùX1³ à``P^<Е³3Ìl‚Àcrxh)ð=w¿©«Ö$"[¦DDš»Æô$xg3Qútø±€àÆÈ6MB¡Gñèšd2’É$fÆœ9s¸á†¢Éçù‰'>qÑEÍlë÷îî™|>ûäÉ“_kîœI“&­V¶õ^"f–F¤[u¿ <ìîowáºj€K j;* RÀ®®èÊi "^ö"ØáhîwC– ø¸³¤$Û^„=&‰âHi7¬h'äàî»ï¦P(гgÏ5—\rÉ=‡rÈò6ÿ`e>Ÿ¿éä“Onk‰|¬YÐb8p4°Cxø‚ÎVsº²˜;L·ú%› ß%H·šÛUk‘­£Dd;ef)‚”ªýŠÎ“±§W€Øô{"G0ÅøeþóÑë4"­Ý ‰ïœ”Îö03Òé4ëׯçü#/½ôC‡]põÕWOëÓ§O{´É³qãÆ¿N:µU­{E>É–ºÇ îXO°ãù²»·4_§£×5Œ Ýjbxh ÁŽ‡Ò­D>f€ˆlg•ŸFÕ±§– Üý3Û8?|.¼ÜÛÌ;Ÿ3–/_Î+¯¼Â¾ûî[|bkÓ°¢V»ñö»‹/æ×¿þ5+V¬ ‘H&L˜ðì·¿ýí§“Éd›Þ…5³‚»?:yòäGPG+ÙΙY?‚óá¡ ð<ð”»wÙ<3ë|¸¨êŸ?骎["Ò6 @D¶a÷ÞÀ¡À.±§Ö/—™ù±œ µÊ€çÜýánñ*A¯ýN;í4¾ð…/ðÅ/~‘¾}ûOØRKÞB¡@*üJÊd2Ågžy†o¼‘L&CMM͆¯|å+÷uÔQïnÕ ¼:wÿßÉ“'oÓ¼‘O 3ëƦÎVyààqwßÐ…ë2‚Yÿ쾸¸«&«‹Hû0Íäùä ûâÆ=ÂÂٯoµ”ËmfŸ–¸û­¸×§€æe§ÓiŽ;î8Î?ÿ|FŽYì`U(ŠŸÇ¿~ã7( ¤ÓiÜ\.Ç]wÝÅ´iÓ8pà;W\qÅ}ƒ ÚØ†IdéÆož:uêªv¸–ÈÇRøûapÁ’NÐfûQwïÒf¶?€!Q¾ IDATAǸðÐ|àwŸÞu«‘ö¢DäÈÌzü§b‚”ò¸Ÿfº{«j̬—»¯ÝŠûVç¤Kìcüøñœ}öÙŒ;wox 2™ ,(¶Ú]µj¿ùÍoX°`fæãÆ{îÒK/ÑÖ”+wiéÒ¥w]pÁmm×+ò±îˆΦ4ÌEÀ#îþ^—-Œâ€ÃçìÆlþ ø¹»·y¸¨ˆ|4(ù çSΦT R©ž^u÷\'­#œ\4h§Ÿ~:S¦L¡{÷î  …,\¸€7Þxƒë¯¿žµk×RYYYÿÅ/~ñþ“N:©=Ò-r‰DbÚñÇ?£®%ò±ëlu Ð;<¼’`ˆàì.[Åߟþˆr7ï.r÷wºla"Ò!€ˆ|„Ešã ÞÕŒj»O»û¢.[`fGß$–¨©©á¨£Žbâĉxà¬[·Ž·ß~›Gy„;3B¡À€–]~ùå÷ì¹çžëÚºw_[YYyó1Ç£ÿÈÈv)ìlu›j)ÖOÒÅ­Ìì0‚t«ýÂC¯Ôy<Õu«‘ޤDäc,6xñ<ïé &ÔGíˆ1 Šßõn<ÐÓ?t xX–ªÑšˆHà¸Áµÿþ1ð»*s†Œ1Œ Æ4@~ºB,‡»™x.ðØZÏÏ5à<©ª»ëáûµnkÞ¼ùKKKGG"‘ÓÝøZ´hq|âĉK&Ož¼î|ŸÐh4ºhåÊ•ýÑ~”ÖwxI5¿–b .åJp­Và:[¥µu­ˆ¿ÃÕv´¢ÀÓÀwTõ@:×fŒI @Œi`D¤.©£(iÓ‰Edp­ÿ媺¬–k{ã:n N¨ê¿éûßzë­?ùä“›Z´hÑ©}ûöͧM›¶#;;»=ÐwÓt®Ê€ço¼ñƵçñ=Œipü–º£q³~<ÜÍý\GJ$‹ˆŒ~ô÷-¾VÛïcLãcˆ1 „_`~n€ 'y$)‡Û¯Ý‰kÍù–ª~wî\qù\›Ì+qÝtNávd¾¢ª3Îõ¹7lؽiÓ¦‹³³³/VÕŽžç]ìy^G ªzµ=VDö9&LØ®ÏoLC×R÷j èþ÷³»/m ó‰Hà¿›ýCEÀ÷q;«v#bLcˆ1.®eæ o«j½×5ør®ÇµñU௪ú‘î\áêP\{Ì*nvb"@çd¤R,\¸0«¬¬¬pq4í‡;zžw±ˆ´@ˆ¼4qâÄ´Mm6&•j¨û —޹#m ó‰H3à{¸`#ÿüËùÖ•c. @ŒÉ`"Ò˜tð}†K…Ú›¤çàÜ»¨ ¼Y55BD.Ç¥M´ qšÔRUý|‚ãÉ$3fÌȲÙ¦©ðߘÈÇ¥[ņŒî¥»¥.œþ]rnŠyWÿðÀ·Tõã´-Ì“,1&ùEšcq»‚"ø.P˜¬tÿ†a"îÝT^UÕÕ5\û9ÜNHN•S'p7%cÆ4uq³<ÆíüÃGq­VeB:“ˆäãÚêŽð}|[U_KߪŒ1™Äc2Œ__1‰Ša\ë×ë:½üŸSp…íCqE«¯ªjA-×gã¢k«œŠ]TÕê/Œ©gþ,ë€Îþ¡ÀÀ™Ð¶VDÚÿ†k·ÀÕ©ý'ð‹twÞ2Æd–¬3_bŒI×c®4¶ëñºªnNòóz¸€'|¼¢ªkj¹¾ð".øˆÍˆý.ùÈ‚cêW ³<ÞÇý¼¥=í0nŠù¯¨H}×Ý*íu(ƘÌcˆ1Ào­{;®ý¬âúõ¿£ªI-¦öonŵìŒVÕÂZ®ï„ËãŒ+B¿W°þÝO$s½Æ4%"ÒWã1À?>ÞOæŽèÙ‘¡¸t««ýC›€o¨êÛé[•1&ÓY –1iä#ý—Ëýªª~š¢çþîæ&¼ ªk¹þRà- °¸QUWùé[/à™¤t¿2¦)‘v¸Àc CWã ̧qi§‰Hg\ylŠùQ\úÕïÓ=aÝ“ùlĘ4‘6¸ »h5®ëTy ž;€Û½èK£úSm©^"2ø p1n¶À ªº@UUDî¾kÁ‡1çΟõ3 —Àí*®æ«êát®-&nŠùO€V¸Ó§p?ÿ–~iŒ©Û1& Dä àÜð¾2\­GJ¦v'>ž‹5\?x w³±¸Én4Œ©?"ÒWS5„Š7?¨jQÚV…ÿ»à7¸.\à~|=~H©1ÆÔ…퀓B~÷¨qïp‚›ëñ’ªMÑóÇ!`®ªn­åú€Y¸aƒó€;lx˜1õÃì9×n;Û?¼7DpgºÖU•ˆô~ÜåÚ ü˜©ªÑ´-ÌÓ`YbLŠøÓºïÁ¥1E¥¸w8SÒ>Ó¯ù¸ÊiWµß~«Myx8:îÓÐÅM/ÿÚkpÁÇÞT­Õ˜ÆÀßA \â Ë÷UõDºÖ•ˆˆ´þø®#_xø±ªIçÚŒ1M‹ Æœ'iÜ tÆÝô¿ªª…iXÇÙt»º—ç›n~ƒªJÕZièD¤.ðˆµ© á~–ÞOe—»ºðwg~IEMÊ<\ºÕº´-ÌÓdYbÌyðÓ.Éâ{Ò°ÁÕÔ¥à|,ð ÐXÜ¢ªÇSµVc2é‰ Ö×uæ…?éø^ ØK»:™¬õÖa=¨>–ªê¼×´ÞÀuÁ)&©ê‚”.Ô˜ ã§#æáj<Úû‡Kqí³?Ìä!œþìO€©¸ÿW—¿þ_¦ÅcL]‰uè3‰ˆH ¸# ^1dÈ@8Ö‚‚‚h8>‡çªê®3<þrÜ;YÀV\ÁyÚÞe‘Þ¸`( 7ü앪m5ýàã-`.Ul¢ª~”굓)üÀ#´óŸ–á¤wˆòw$§ƒÁï†Ãá®@àp8üOªºò »ø&®À¼µøàUõÓä®ÚcRÃÓhøÁÇmÁ`0÷‘G tìèj4Ãá0o¼ñFô£>"¾¤ªëjxü¸Ú‰.¿úOªNÙ ¨¾žî¸”lÜ´õT5ZåšÖÀ_qÁÇQàºD-yi ü¨+á¸Ú-€Àr\ªUY ÖÐøj øÇœœœf£GÎîÚµ++V¬ˆ¬Y³&FoWÕ7<ÎÃýþù\»o€•À·Uuq²×mŒ1©dˆiüàã–`08hÚ´iÎ;W»æ£>âÕW_Õh4úrÕ¡}"’ Üx¸‚ÔWªÞì§’_ƒòE\Øfàùª“Ëýàã-àjà0Þ&›¦Èßmø0hî> ¼¬NÅ "Òøû@ ðf͚ǎ›3dȲ²*2çÏŸ¯óçÏ?‰D.SÕÝq½7Ïc€hnà\$hŒiŒ,1 ž|ÜO›6-еkׯ]¹r%/½ôR4¾»Y¯|¬^MçÿôE¤=ð0Ðw#òtÕ¨*ÁÇ`‚í|˜¦FDÚ׃q;…à~>V¤(ðè|×󼯶nÝÚ7n\N~~>@ ÚµªÊŒ3ÊwíÚõ×P(t«ˆ ~‰k æÿkƒ1™ ¦Aóƒ‰@઩S§ºwï~ÆÇøAˆF£Ñ7€ST«€×Ò|´¦àr¿wãºo•%¸&>ø¸îLyåÆ4&"Ò x Äýìì>Ö¦b÷RD.ñ<ï€iíÛ·×Ñ£Gçäççãy^­+**â·¿ý­ªê_€›pÍ%ÊéÀ¬ÀÜÓXb´`0xçyÃê|ĬY³†çŸ^£Ñ(¸€•Àëi>Zâ‚¶À~àñªÝ·,ø0MYÜÔò¾¸Ÿ[€Ï€÷UusŠÖÐËó¼ïÓ:tè7n\Nnn.®ù^ÝüñäÓO?%ê~½ˆ›`¾=IK6ƘŒcˆi°‚Áàx`ø”)S¼^½zõã×®]Ëܹs‰F£;p7ûé >šáÒ®:àÒ0fW;âoãrÝàj> «~/c“†*°7Üxã=z”gžyÏóøÆ7¾Qkq¨_˜‰F£3Uµ(Ù¯N§–|70­ xBU÷T¹Æ‚Ó$ˆÈE¸ÝŽ|*vçK5©šÉ#"#‚Á࿆Ãáñ—]vYd„ Y]ºt©õ1‹-âwÞ¡_¿~Œ5ŠîÝ»³uëVfϞͨQ£¸îºë>î÷¿ÿ}Ùž={fG"‘¯$ãµcL¦ª½]‡1$ ŽÌÊÊùÐCÕ|ôë×Ûo¿ /¼Î;sã7²ÿ~Ž9Rë÷¾êª«4hƒÁÄw Éq=.øˆà†& >b5û±àÃ4B"r‰ˆÜ|—b˜/¿WÕ•É>Ĺ% ®öLII ÅÅÅD£ÑÓ»áp˜ììlZ¶lyÆç¸öÚk½Õ«W÷‘æªz¢Þ_D‰{·W—Uõ“*çÛïàrà÷á‚õÉ\“1©â×w Â¥Z]äV`®¾cGŠÖá7ƒÁŸE"‘þƒ–qãÆy­[·®ñ1;wîdÁ‚|üñÇäååѬY3ºuëFçÎY°`?üðékC¡P5hýû÷§cÇŽ‘ýû÷øN=¾4cŒÉh€˜Œ ‡G£Ñ±=ôPµàãØ±c¼ñÆÜqÇ<ôÐC<õÔS<ýôÓÜÿýœ8q‚7Þxƒ±cÇ’]cÍèiíÛ·×Ú³9®#)DdƒÇÞRÕuUÎ7^ÅûqÝ®,ø0 žßjú*Ü®^3ÿp°x¬é±õ¼Ž ð@0üÐuذa‘#GJ‹-j|̶mÛX°`[¶l!77—o}ë[±ßŒ=šgŸ}–Ý»wÓ¾}{æÍ›Ç'Ÿ|—¾ô¥Z×2vìØœ¹sçþˆüXU‹ëé%cLF³Äd´`0xM4ÿÀx—_~y¥sÇgæÌ™téÒ…`0Hß¾}y衇˜3gO>ù$‡æÒK/åÚk¯­ÓsmÙ²Ïó¢Ñh´$¯@D.nÅ:‹TõÃ*ç/^>«ù£ª’µcRÁO1ºšÊƒã:Z­HÕÔoçåo‚ÁàONÇŽ9’fÍšÕø˜?þ˜ °{÷n†ÊÞ½{¹à‚ *¹¹¹tèÐçž{Žââb:uêÄ×¾ö5:uêTëš @NNŽwêÔ©IÀSçÿ*1&óYb2–ˆ|Îó¼ ÷ÝwŸTí· >:uêÄ=÷Üs:åªwïÞLž<™Çœììl&MštÆÉÄà‚¹sçF=Ï{7‰œ<ãÎíõtîÄÝ€­TÕUÎçÑ@10Ñ‚SD¤#›““Ó?†B¡Ðb`S2gßøÞúáR ãÛG}†ëhµ1Ëýµ´þ6ü ;;»å¨Q£²‡ Vcz”ª²aÃ,XÀÁƒ6l÷ß?-Z´ M›6¼õÖ[Œ7Ž6mÚœ~ŒçyŒ5Š^xÛn»«¯¾ºNkó<+®¸"«  àF,1Æ4€˜Œ$"Wzž7ñî»ï–T:wâÄ fΜÉÉ“'¹ë®»ª½zõbÊ”)Ìš5‹9sæðÅ/~±Ö¬;v0gΜ(ð^(Zš¤×Ó×n7lþRå¼ÌnN7Ù„ss>üÙ1¹Á`p0Ю{÷îáAƒe•””è’%Kî>ÀÕÕ÷ó¶À¥Y b9M! øHU÷×÷sÖ²––À”@ ð¯ÙÙÙ-F•=|øð„mqÁ›6mâÝwßåСC 6Œ)S¦TÚ!¹úê«Y´hï½÷·ÜrK¥Çççç3oÞ<¶oß^ç M›6žçy5÷ 7ƘFÆ“qDd°çy·Ü}÷Ý2hРJçbÁG³fÍ8|ø0Ï=÷÷Þ{/YY•ÿ)÷èу)S¦ðøãóÄOÔ„ìØ±ƒ™3gFB¡Ð‚jÔÏëi… >.¶/Æ¿óë·ã}øÜÚ]ªº$k1›ó?  æ:tè¹êª«²òòòhÛ¶mì‡Dúõë'3f̸FDöÔW}‘ˆtŹTü¿¥X¬RÕ¤ì,Ö°–À·À7Z´h7n\ΕW^I Hx}$aõêÕ,\¸C‡ѲeK~ðƒ$Ü!ÉÎÎføðá,\¸Ñ£GWjp9r$¯½öãǯ–¦U“âââH4=pN/Öc @LF‘|Ïó&Ýyç5mÚ´áþûïgÛ¶m•ŠÎk BfÍšÅÚµk¹êª«*ß±c³fÍŠËB¡Ð[Iz=9À}@+\AùÜ-Eü-®úF2Öb'¹¸<;;{ çy—6kÖ,š———5dÈ:wîœðw|==z´÷Þ{ï‘ 皊å×T ÄíxÄ·’ÝIEšUä\¾÷9®§«çyÿàyÞ#mÛ¶eܸq9ƒ ª5 3ÖÂ[U9r$mÛ¶eΜ9|öÙg$ê¸pÍ5×°xñb–,YÂĉ+2dóçÏgÑ¢EÜqÇg\ó–-[X½zu4‰üéì^­1Æ4\6ˆÐd Éõ<ï ·Ýv› :´Ò¹S§N1sæLZ´hÁƒ>x:ØØºu+sæÌ¡gÏžÜÿý w9Ž?^­ ïÎ;™9sf4‰,‡Ão&éõx¸à£pø£ª­rÍ?ÿŽkA:MUg&c-¦q‘, ovvv~8îsÁŸŸïåççK×®]ëT÷têÔ)~ö³ŸEÃá𳪺å,ŸÿbÜÌŽ<ÜÎ@X,SÕÝg÷ŠÎ_ ø‰ªþ cÇŽ‘qãÆå 0·¹˜ØªU«øì³Ï¸õÖ[),,$77÷ôÉ£>JVVÓ¦M«ñño½õ|ðßûÞ÷ª±¯^½š@ @^^^ÂǪ*›7ofÞ¼ye»wïΑÿŠF£ßOfMŽ1ÆdÛ1ADxžwǤI“j >š5kVm§£wïÞ•:_=øàƒÕ‚ªÁGQQ3gÎŒD"‘É >|qÁGx.Aðñu\ðð- >LmüT½î@ 7++kçyY z}ûö­¶x&^x!ýû÷gÆ yÀ?è¹·ÛÑ ×É Ü´òÕ¤8ͪÊÚnÏÊÊúþ}÷Ý—Õ¯_¿¬ÚUeÙ²e\sÍ5TÝm=z4O>ù$Û·o§gÏž ?bÄ–.]ÊÒ¥K?~|¥sƒ®ñ9ׯ_Ï»ï¾[¶ÿþ€ˆ<®ª¿ˆF£ÛëôB1¦‘°Ä¤ˆ\áyÞ&MšäU-Ü,++;ÝÑ*Qp.‰Õ{Ìž=›‡~¸Æ¢ó¢¢"f̘‰D"…‘Hä¯IyA€ˆ\‹Ë‡âj>vU9ÿ ð?þ—?RÕÿMÖZLbþ }7 3Ð(Á }Ü‘IïDû» ƒ²²²®ŒF£9}úôÑAƒ P§ù6µøàF]é\ëÖ­QÕ„ãäÝwßeáÂ…<ðÀ Ÿ·U«V´jÕªÚñP(IJeËX°`Ayiiii$ùàw™´cL:YbÒBDúxžwï„ ¤jðQ^^Μ9sˆF£L™2…’’f̘ÁŒ3˜:ujµšŽx=zô G•Ž8p |¬KrðÑ×J7 Ø@• "2 xÈÁ üRºSWš°¸Ý§ø?ÿC"ò"Ð è!"mªÖíÔ7q“ï/ ƒWÝÛ·o=RVV¶9ÉÁǸ”žfÀ.àåøç‘Ë€×p_‰k·›²ö¤¦2U-¯áxDDöíp—õ€øï/ËÎÎß67//=z$ž'³yóf Ø´imÚ´!??ŸH$B~~>«V­¢¸¸øtÒ«W/.¸àöìÙ“0éÕ«Íš5“’’’ÞTìv¬67 £¯”——?VS5jÔ(–/_ÎË/¿LQQÇŽcøðá§S5ÿã?þƒÅ‹',¸`ÁvìØQkròäIÞÿ}–,YŠF£Ãáð¿³Tµ¬¾_¨1Æ4€˜”‘Þ~ðá3¦RðQ^^Î[o½Åøñãùò—¿\éqíÛ·gêÔ©Ìœ9óôNHü»•‰:tˆ3fDÊÊÊ>ŽD"/$+uÄÏ—ÿÐ8†›õŠ;ßx¸wcwwM7À&½üÂôޏ™,‡ëñûf½@®çyý³³³¥_¿~Þ!C¤W¯^Þ™ÚæF£Q¶nÝJAA6l ¼¼œfÍšñÈ#еk×Ó×õîÝ›-ZPPP@çÎЗ——sñÅ'üޞ瑟ŸÏG}t, =¡ªõöºSEU‹Àÿ½óÎ;_ÍÍÍ Ví‚ ÒV®\Éøñã1bD¥zØ`Á1cÆÐ¢E‹ÓÇßüæ7kì0vâÄ >øà}ï½÷"Ñht_8þO`ºÆS; @Ìyó󯳀SªZZËu—zžwߨ±c«àæu²}ûv¦L™R­Þ£}ûöÕvBj B:ÄôéÓ#§NÚ‰Dþ”ä¼õq¸BÝ𼪖ÄNø“©ßôÏÜÞdœ@{àƒÚþ-×EÕ¶¹@°ÿþ <¸Nms£Ñ(;w°ÂÂB¢Ñ(W\q<ð'Ožä™gžá‚ .¨ôÏóÈËË£°°üü| X¶l¹¹¹ÕZÍÆËËËcÉ’%­p³<ÿ÷ÏÃÀm‡ nÞ¼™~ýúU»n̘1¬^½šV­ZU+È>|8ï½÷K–,á†n¨t.ÑßÓÑ£GY¼xqtÙ²eêyÞ§¡Pè§ÀÓ hÇÈcÒÊšs""ƒp»àRUÞVÕ¥5\‰çy=:pÝu×ÕØ¤ÿÀ§g~ÔTt~ìØ1f̘À#Ë®]»øÎw¾S­ áÂ…Õ Õã9r„%K–D>úè#<Ïû8 ýxÁj¹Œ1æì؈9W——{q7ß=jº0| >¼Öà C‡ÕR­ª­[·fÚ´i,]º´Z€â‘S§Níðw>’|tnö¿\\%ø`.ø(&Zð‘¹D¤®ÀIà™s >D¤Y0|Ðó¼N={öŒ<8››[§¶¹eee,]º”ÂÂBZáŠÎƒÀ&`a•K~LÆ¥´Ü­ª+’µs~D¤3ðîïê U=x.ß'Œjß¾ýÅS¦L‘º¶Í]³f %%% :”íÛ·3lØ0rss)//çW¿úŸ~úi©Syyy¬ZµŠ¢¢¢ÓõPQÓ±bÅ nºé¦:OHïÒ¥‹deeu©ÓÅ)&"9ÀÝÀ7qCÁ½ññn ç[±]ˆ¬¬¬gæÍ›wOïÞ½«m7uêÔ‰~ýú±páBòóó9ÓÄô¢¢"/^Z³fMV X­ª?…BóêóµcLST{å£15PÕ’ºÔUƒÁÛ‡ R-øxùå—yâ‰'(/¯x³¹¼¼œ'žx€¯}ík”——3cÆ Ž¯}&ܱcǘ>}zøÔ©SÛËËËç&9øÈ½[Þ79û¥*¯îbÃÿ^UßLÖZÌù‘ޏ´+€§TõÀy|¯ü±cÇêÚ¡ `ÿþýÌŸ?Ïóxøá‡¹úê«iÞ¼9mÛ¶¥[·nÔøØ¾}ûž.8¯*??Ÿ’’¶nÝz¶/#£jD¤‹ˆü°˜ƒ >Ê€'ùäN:•ð{zžGnnîéõx;v¤S§NÖù5lÛ¶-z>X}ODn‘WqÇpævâv»ªêCñ)ñTõÏóþ<þü„it]ºtaذaÕj@àtàQ6cÆ Ýºuë|U …nh(u1ÆÓPXb’Êó¼Òƒg´tíÚ•É“'³wï^üqž~úiNž<ÉÔ©S¹ð Šz€Å‹WûÇçøCøÄ‰»B¡Ð3É>Dd 0—þñRü :éü¸xøÇd®Åœ;häd\…yþ±.U>.¨í{Tåy^´´4qã¬ÂÂBÞ~ûíjÇcB¢]Œ¼¼<¢Ñ(ëÖ%¼Ï\rôèQ½Û÷ÝwsóÍ7'xTeÇgÁ‚¬Y³†òòò„M$RADZ‹È4`-.ÅóÜÿ£ÞÇ¥_]ªª?WÕCgú^‘Hä'[¶l îÞ½ûŒÏ«ªlܸ‘ßýîwe3f̈lݺõEUí‡'ªêªó{UÆc±“TápxÕûï¿?üª«®ÊJôŽc÷îÝ™:u*³fÍ¢´´”ï~÷»§ƒ˜Ö­[óÈ#T; >Š‹‹÷„B¡§âgo$ƒˆ\Œ»)X¨ªŸÄk…›õÑ7=únkÉ™Ñ.bnªášgÍuùfªÍÎÎÞ÷ÙgŸuITüXµ^#Ó¥KÖ­[Gyyy¥z¨æÍ›Ó§O :thÂçœVëtÿ^»víÅcÆŒ©ö{5~@`ÇŽÙ¶m¬[·ŽììlÂá07n¬Vpž——ÇK/½Ä±cÇμñ<;36mÚœq}ååålܸ‘Õ«WG¶lÙâyžw XF×F"‘=góZÏ—¿»t.ðø\Ü©UÀ£¸ÔÆ“çóápø«;vìØ¼hÑ"=zôé$‰PPPÀ»ï¾[V\\F£¿Ã¥KžÕß·1Ƙsgs@Ìyó»`ÝJ s@ü6¼“'L˜ £Fª±íLQQ³fÍ¢U«V ƒ˜'Nð‡?ü!|ôèÑ}þ俤O÷ Ësq“Îÿs$"ÿü3p i¯š&?­ëï¿ýíoÓ¡C‡jç_yå ÉÊÊ¢¼¼œÜÜ\òóóéÕ«=öÍš5ãÁ¬ô˜²²2~úÓŸ2a®½öÚ³^S4eÛ¶m¬\¹2º~ýz¢ÑhXU7E"‘õÀ–$è¬FDr/ãjoÚú‡Ë€çGUõÃz~¾Ižçý)???kèС^QQ ,(;yòdy$ù5ð›†8ùÝc:Û1I§ªŸ‰È3o¿ýö½ápØ7n\ ¤sçΧg€ÄÚïV BÊÊʘ9sfäèÑ£B¡ÐœWã‚®õp|ðq'ðOþ—Ó,øhºTõpvvöþ‹«Îæ—†õᇞ&âÛãæååñÆopêÔ©Jÿæsrrèׯüq¸ êZPP---ED¶E"‘ÕÀ¦T§ŠHs\ Ç—kâNmþüñ\[Ÿ‰ª¾*"# ¶jÕª1YYYÂáð¯qÁNí­õŒ1Æ$ &%Tõyvþüù÷†Ãaïúë¯O„tìØ‘©S§òî»ïT¥PVVÆôéÓ#‡:äeÉ^·ˆt®ó¿|'>GÞŸtý8 À¯Tõ©d¯Çd¶P(T°bÅŠ±ãÆ«ö»5V¯Q\\\m6G^^¯¿þ:ëÖ­«VïqÛm·Õi˜á¾}ûX·n.[¶,RRRŸ…B¡U¸ #é?+U‰ÈÀC¸À#Ö,,À é|)Áª~T1Ƥ &eü äÉÅ‹?F΄Üÿý•Ž•••ñØcE:t8 ÍVÕĽIë‘?ïãvÜÏɦøô?ÝæÏ@sàmàûÉ^iÖ_·{÷nºvíZéDü€À[n¹¥RØXÁyaaaµ¤yóæ5>Ù±cÇ(((`ùòåá#GŽ@Q(*ÖF"‘”×!Å èü2pUÜ©-ÀLÜ G«µ0Ƙ&ÎsNDä**:BÅL‘ þÏSÕ÷ªœGU·‹È“K–,y¨1‰ >öïߟ²àÃ7×Õê®ÃâZêÌzŸ÷ZÇ+ãóÀ±‚‚‚6Up; .dëÖ­ôíÛ·Ò¹I“&ѬY³3>A¬ƒÕòåËÃ;wîÌ ƒ‡ý cM$I<,'Éü4Å/ã ËcÝÅÊ€—€Çp]ã’Vpè7‰¸÷†À®þŽ0Æs,1çj/°¤–ó»j:¡ª;ü äh4¼é¦šº ºÎ=³gÏŽìß¿ÿˆ|œWgœº‘K«qó>^QÕ’¸Óßǵn=ÜiE¬M›ˆ´.®º‡B!Yµj'N¬6ì®sçΧç~T @Ú·o_ãs”••±aÃÖ¬Yë`u"åååI©Ÿ8i<LòâNmÄsê2³ã<×0ø_ÜnKNÜñ ÀUõùd>¿1Ƙscˆ9'ªº×rö\¿CD —.]zðf­¼¼œY³fEöìÙs,ÅÁÇ…Àm¸ÚŽåñsDdðÿ˯©êšT¬Éd¬ .踷K>+--½dÇŽRu6¸šŽ-ZT;^U8fË–-¬Y³&²~ýzÊTum4]Fw&sG¡&~Ë鱸ڎ;©˜ÛQ¼Š«í˜—µõÄuÓú#®=vÐß_ß\ ªêÓ)Z‹1Ƙ:²6¼&-D¤7p?àyžéß¿?wÝuW Vl|‡B¡?VÙHöÚb-wâZî†üãps :«êéZ“I/ ½Ëüø"‚ëè´W+t"''çüüüÞ·ß~ûS ãÅ:X­\¹2ºfÍ¢ÑhÄo›»Ž4´Í‘>ÀÃÀøÜ²•À,àU=š†uy‰þLDäZ`1°ZU¯LõºŒ1ÆÔΓr"Òø[ °ø  ÞÚ^yå•^«V­díÚµ‘ýû÷÷ƒ”µË‘ËqE´\{Ð=þqWl>X KÕŽŒI¿ :pô‚q§Ëpõ?W­9‘ÙÙÙwüð‡? œ©ƒU,è(((Ђ‚‚hyy9"²9‰Ÿ¨j¸>_W]ùísïÄ¥X]‹Û˜? ÌRÕÂt¬­.D¤(QÕ.é^‹1ƘÊ,ˤ”ßYê\ð±ø«ª†Edz(ê¿bÅŠAžçå„B¡‘Hd^*'Šûïrßà¹4|ø¾‹ >J€»,øhœDäb*‚ŽîTÜt¶â‚Ž­g 6ªêñÅ‹·¹îºë^PTTDAA‘’’ ÛC¡Pn%éómj""Ãq»÷-ýÃà-`6ðj:×W"2·ö…i^Š1ƘlĤ”ˆÜ N3Ò‘¶Q¹øùñ%¸ZŽþ@«¸Ó áïrEgSÛ "—yžwïÝwß-ƒ àСC²zõêðÁ`°( ­Ö§3¨õÓ ï¡zAùNà`ºªnOÃÒêDDzCq»T—àº×Ý ª[Ò·2cŒ1‰XbRÆïXs3®P÷iUÝšæ%æ¿óý·@xVU7ûÇ[àê>úÏ«ê=é[¥©~jQÜjâº'!\=Çf\jÕy¥ÿ‰ÈÏónìܹs4jQQQ0 ôƒŽuªzì|¾ÿy®-˜„+ؾŠñÀ ¸Âî%é(v?["ò0®%fð`¢VàÆcÒÏ“"Ò ˜Œ»Éy[U—¦wEü®FãÞ ßߺSDf_>eÒŽ©¿~§;.Øèt¢zjÕǸ cG}×\ˆH`.i³ª¨Ïïë¹t܃ë ³wÿ|*ë®êƒß¸'®+×À·qרêÌ4.ÍcL€˜¤óßqþ[\zË&à¹LzWÕÏÿ®°ø÷ªZ쟼»qcï¦6þMoÜMè¥TÞåP\ýQl—£ÑOæ‘îÀƒ¸Àãò¸S;'q3;6§cmÉà$kqÝʺ6´€Êc;+B7Iå¿û|.ø8¼œaÁ‡Œö¿\|´þàÿo >2›ß@ »U¹ä®€ü\yÊš¤‹ˆ\ÜBõ«Rà5\àñfººl%“ª‘ù¸Vßýei^’1Ƙ8€˜d{'º·óQ–æõT•´ÇÅÇߤü—¶ó1ð¯iX—9ù¥þGÕZŽ(°7œîc -ƒûRͨ‡ãv;‹Ux˜ƒ«qj ;üÏ™ö;Çcš< @LÒˆH?à\ÊË+éÎ}¯JD¸ù‹cÁ‘ˆ\« ‰_ª:ãÁ¤‡ˆdݨ˜@Þ¦Ê%%T´Éý´)ý½‰H_*R¬zÄÚBEŠÕŽt¬-™üz–UUߨ‘Ûqm³wëÒ±6cŒ15³Ä$…ˆ\ÜŽ+ö}_U×§yI‰\…+Â-Æ DŒ¥­ü·îߨê’ô-¯ió›tÂínôÆíHâ. ãºÅÒªö§|‘iä×¹Ü :†SQXx·Û±´‘ïüüÈ‘qÿ.âZò–SU5’ÆõcŒIÀSïü|ü»p)1Û€yé]QuþÍíÕþ—ïÅåÁÿw³» øçt¬­)«’VÕ 7°2Þ!\Àñ °]UC©]azù)VcqAÇ@sÿT÷sö$ðbS¨qñ=ŠK5\‡ PwâZÿ—ªnLãÚŒ1ÆÔÀ“ ޏ”˜—T5šæõ$ÒWûQ¬‘>À÷üóßTÕ’4­­É‘ qF,èhWå’2`;~СªGRºÀ !"ýqms'S9Åj#n·cvcL±:U}x1Ýë0Æsv,1õJDr+qu/gp±ë`ÿóÚØÄsà·À¸Î@vS“þ;ø¨8z^Ü%ñÅãŸâær4Éé€{wÿ‹¸Ÿ©˜ƒ¸éäsTue:ÖfŒ1Æœ @L½ñ{ïßâ¹(“&Çóë<®ð¿\훀kUZ|=MKk”ÎЭ àÇVU-Mí 3‡_h.è¸ú§Ê¿Oo4µÔ3cŒ1‹ ¦^ˆHp'îær;°8­ ªÝe¸»}ªºÛWþçþ¹ßejàÔPøÅÑ—Æ}T­ã8NEÀñiï’¥Œˆ Àu±z¸8îÔ\1ùì¦VdoŒ1¦ñ²ÄÔ—‰@gÜÀ·3´î#¦ÿùcÿóý¸—£T"¦ŽD¤%.•ª'®ž£¦:ŽXÀ‘Qí˜ÓEDºàš5LÆÍ£‰)þ„ : Ò°4cŒ1&©,1çÍ÷ö*\ÝÇK àínþçm~Ç®û_ÿBU¥iM †ˆ4§"àèIÅÀ·˜®‹Xl—cw†¤)#"­pí©ïÃÍ©ˆµ>ü·ÛñNS­{1ÆÓ4Xb΋ˆ´&ù_flÝGŒŸcßÖÿ²w#Ø Wøü›t­+“ùªzàþœzቻ$V8¾×vyG\a“çÿ››ˆû·v nV¸€} ®®ãOªz,=+4ÆcRËsÎüºØ¼ídvÝGL+ÜÍó)\jÐ÷ýã¿nJ“³k#"9T=q]«â¥zÀÑd Çñ늮ť÷ÝIEÐ ° ×Åê™LØ1Ƙd°Äœpu%d~ÝGÌþçRà @?à00=m+J3?àèNEÀљʭqöãŽí¸€'S·Â†CDòqAÇßP‘ê°xxZUW¥cmÆcL¦°Äœ0Ú2ÞGU±‰çYÀ×üÿþmZÿyóë.Á—à†FV 8R9à°¡Œ5‘^¸ôªû¨hï ®©Á‹¸ÝŽ… $@7Æc’ÎsÖüØØ¼÷XI±ÿ¹.E& <–¾å$—Ÿ t1•ŽÖ .=LEÀ±­)dç¯}º×:w)jeÀ;¸.V/ØN‘1ÆS 欈ˆ·áf;ì¤wEgGUOŠÈQ\ú˜¯ªêî4/«ÞøÏݨ8ºQ}ð_W€¿ø ØiÇ™ùÅø7×S1$0 ,ÅOY'5cŒ1¦v€˜³57\®×r·!¶ Ý ôÿ»Aï~øSÆ»R{:U)®-n,àØm]ªêÆ:nÀ5[¸•ÊC—ãÒ«žSÕ¢4,ÏcŒi,1u&"±þ—oªêÁt®ç<q7’'©HÉÊxþÀ¿.¸€£‹ÿQuÊ8¸ÚƒÏ¨8ö«ª¦j tŒÇ·-ãNïæâ†nNÃòŒ1ƘÏS'~jÏpƒÓ6ªêê4/é|\ïÞ \ç§•-Í”›t=ípío;ú]¨|#ÁµÄÝEE:Uƒ ª2E\]Óp;ÆÞŽ+&NU—§~uÆcLãbˆ©«€‹p;¯¦y-çk¢ÿù%ÜÏÀuÀå"²@U·¥j~ ÑhïÄ‚‹ì‰pµ7{p­]÷5Ð4¸´óÓ×nÅ×Q¹Væ\Ðñ‚ª®HÃòŒ1ƘFK2äM_“Áü–»÷àZîÎIåMz}‘ޏƒn—¡/0Š›Ïƒ¸Aq;]ªzâ<Ÿ/d´Æ AlCEÀÑžŠBæªB¸Ù{}þç"U Ïzšº¸îUwáþÞã½O×qÅäïgÊŽ˜1ÆÓØØˆ©•Ÿš2ÉÿrIC>|#üÏkýT¥•"²ø<0·Ë»9÷?J€¸ˆxY¸‡ñÍp)SR»®îAÿ#p¶¹õCD.nÄñÝ«6àŽ×TN)®Ô IDATue–gŒ1Æ49€˜ù)B·ân¢w Óº úë~u:—ßDÞ‘y¸Éè=p]¥:mýóQŠK];ê>„ 6G-Ш"Ò ¸—^5‚ÊÁVR‘^µ% Ë3Æcš4 @Lm>ôÆ¥5Ô–»Uõô?Zõ„ßš¶Ðÿ@D.ÀÕc´Àíf4÷?ª=d”§â>ŽYËÛÔ‘+p»u·WS1PqAÇ‹`ÏcŒiÐ,1 ùi+ãý/ßjDÃÕzøŸ·ŸéBU-Åu–2HD²pÓìoÁ½ãNG%¸ ã%UÝ™úcŒ1& @L5"â·ãrå·âRV‹ØÜ kUÛ‰Hk\G¶I¸nfñéq¥À|\—¶Wm8 1Æ“™,1‰ŒÂ »+^idÝ€âÓrL "—áŠÈoFR¹ˆü®sÕkÀÛçÛµÌcŒ1Égˆ©DDºPÑêõF8Ô®Ìÿ|¦îT&MüIä£qAÇD*§Vë\õn§ãC+â7Æc @Ìi"Äu àÚÔ®Kó’’a.Àê™æu˜8"ÒlLÄñbðð®]î')_ 1Æcê &Þx*¦¿‘æµ$K¬ûÕ€´®¢‰‘¸T¿ ¸ £o•Kvoúó,µÊcŒi<,1ˆHO\Û]ÅÕ}œJë‚’gð/ÀD‘FVß’±D$äã‚Üñ¸îU9q—Dp­r_ÞVÙß1ÆÓ8Ybb©W“pÚ+Uukš—”LKpÍ;ã š¥w9—_<>¸´®rÉ'¸`ãmà]U=žÚcŒ1&,1ànÛá&u¿æµ$•ª–‰Èàï€Àz#"—₺Ѹ€ã’*—µÉ}pØ@@cŒ1¦ ËrhÚDäàaÿ˧›B¯£¼€ß¦ª¯¤yI ’ˆôÅ£pAG÷*—”ïãv9biUÖ±ÊcŒiâ,iÂüÔ«¯àv?V¨êëi^RʈÈÏ€û€aªº=½+ÊlþpÊþ¸b±]Ž.U.+– q;KKq-‘1ÆcΑ M˜ˆÜ Ã¥^ýŸª–á!†ˆäƒ-ÀhUÝ“ÞUeiƒû·ÿQµ†£ X,¨êÉT®ÓcŒ1  M”ˆt¾„+<²‘ž'$"qó%z»;TuYzW•z~‡ª~¸ c¸ÿ¹àU¹´·Ã±·Ëñ‘ípcŒ1ælYÒùé4Ó€N@ªþ9ÍKJ¿ýðk@..…èWÀÿk¬ïäûiw¹¸Ÿ+ýσ€æ .ß‚kû!°7œ2’¢¥cŒ1¦‘²¤ ‘Q¸.E'ß7õ!oþP¼?wû‡vÿ<ÖÿlD¤®n#Š€c àò`.ÐøøPU¤h©ÆcŒiB,©G"r7p=Ð7XíS\·¥õÀ†LHW‘‹€Gp ^PÕui^RÆ‘[€ß=ýCG?Oã ª3òÝé\ 6àÒ§®:Öð#À*`µÿy°Å:TcŒ1&,©'"ò5à·µ\Å$ëpIìófU-Oþ é ÜVÕgRõ¼ …_œþ nFÈeq§Žóp×+ÂT”"ÒÅ>zÄ}ôÚÖòðÀâ‚ ›¿aŒ1Ƙt²¤ˆHk\sóîÝ»óðógÏ6oÞÌæÍ›Ù¿márí×ù€µÀÖd½ã."Y@vc­s¨~ÌHà\ÀÖ®Ê%a\@¹Õÿ؃Û19æÄþ;þÏX€6q_gíývqÿÝè\tKðÜUÅvÛ6ý À&U-©ãK6ÆcŒI @êˆ\‡?AüÝwßåÚk¯åرc:tˆ“'ORZZJII EEE¬[·ŽåË—³víZ>\Û·-ÅÝHÆï–¬¶«ý¥¥”ß%jnbü5¸ZŠN)^Æ!ÜnÆö¸ÏÛü-M©…²1Æc6 @êA,ýªE‹8àêvU•h4ZéCU9yò$ÅÅÅœˆ 0}ì¶“aŒ1ƘFÁz "ÿ|cðàÁ|ðÁìÙ}ˆ»'ý”‹;¶!w`O®Ñk>9ÙÙYÕ’hÔ݇ÆvIJKK9qâÄéÀ¤  €yóæ±yóæÓ×Ö W@ýýL-–6ÆcŒ1&+Ý h$úôéÓ€-›wóé'{i×¾% æòü³‹)>v’`0@û‹ZqIôÐ!ŸëÃÕŸ¿Œìì,²²²hÕª-Z´ ]»v§ƒ«¯¾šÉ“'SVVÆñãÇ)..æàÁƒðÚk¯QTT[C6ð]ÿó7Rþ'`Œ1ÆcLXR?þ{÷\e}ï{üý[×då ‹pKb¸ˆ-"H+(Q@Ê>vö.míÕãLgZÅٵǞ3m§§µi;ÓsêñôX»OëQëtv±E‹D"`E ‰  !ÉÊu%ëúü΋µH$ÜXp¶Ÿ×Ì£ð\Özž'ü‘Ïü~ßßw œ õûÉ øYvÏ¼Ì ‘HœÖS´ê¤µ¥‹×6Õñçç¶%ðù½ɧ¢*È Ÿ˜ÈÍóª˜9k2éY;^¯ÇCnn.%%%TUU1wî\¾ùÍoâõz©­­åÑGåðáÃÿ€ˆˆˆˆˆ\£@FèôŠR•00€aôè<¢ÑÄÀó,bl°;óÌõáÞ~Nžè ­µ‹öÖnþ¶úžþ?ÇZäù GQQ5–YsÊYò™™x<.’É$ÖZ’É$‘H„x<ÎÍ7ßœ šS'""""×,‘+¼S§N ñp+…Å„£ñs§ô‡q“J7©4s(OÒê!ÔÖE¨­‡ƒ´òúkP½äÜn3ècÇáäÉ“tvv¦wwi-‘«Id䦦ÿikë¥tÂú#‰s^t!ù£óÉϤ)ÐÛÕÇ–Wv’›ë#Ó×ׇßï'H$0Æ ì5¢Îæ""""rÍR¹©ÅÅŧúÅ…ÃQ&üôEâ—å Žmgâ¤1@ª¤¸¸˜H$‚1&³  õ—åKEDDDD®‘›g¦_…B½¸\n<~?ý‘¡Wõ™ÿê=„D&Î'¿ÐÇ㢯¯X,@nn.Žã`Œ¡¥¥%}ªê?DDDD䚦22SÒ¨ªª ½½·ËM²':èD7¼Ã{ÝãÇ““ƒ×ë%‘Hàr¹p¹\ """"òÿ‘™ PVVFAA½½1¼>ïy/º8g–Ǫ¸nÌ™½Æàñxp»Ý„Ãa¬µ´¶¶¦«]DDDD®i #3h¬h4¸ðyÏ1­êKî^ðK¦¦HOOkm¦½½½D"SG¢¹¦)€ŒÌ  §ZzR£#)"¤”MH §GYÇ!‘HÐÙÙ9púU›µ¶åì«EDDDD® #3h Þ––¼çý&—Ë0j”Ÿd25Êa­ÅZK"‘ÀqNž<™>U£""""rÍS¦ÓKðVÀ™¦¦|—¥þãŒÂQ~Œh4ŠËå"‰“““¾‡# ªÿ‘kžÈðU^0r¢wˆôa~œ66˜œYv×ãIýÈ’É$ÆNœ8‘>U# """"rÍS¾).—‹ÊÊJbqïEôõ¸&¥ê>zzzÈÉÉÁƒÛí¦»»`à X """"rÍS¾©“'OÎL‰úç‡oçèÑNÞz³‘Þ?EWwŒK«H?{´dÂøÔHNNÖZb±‡öövZ[[®€õÞžEDDDD$+@†oмi&òO+>µ7ÐßgÏ»'Ù³ç$'N†q’—¾<Ö˜’ÔˆŠ×ëÅq\.Éd’¾¾¾Ó¯NZkÛFô4"""""Y 2|eåååC´Öâ÷»™û©2æÜÄqŽëa÷®{èë‹_ð ÜCNŽÇqíwcÌÀ°ÞÑ“ˆˆˆˆˆd‰Èðí¾ðúë¯ÓÒÒB0<ëkxŒŸÇ¸q8ŽCœ½{Û9¸¿‹öPÇ9{t$?à>ë3 Uwò‘ô…ƘÀ&`“µv׈ŸNDDDDä P¾ï8p øºë®cÞ¼y,_¾œêêjfÍš•9i¨à÷»¹ùæfÏ.Æqš{©¯ƒ“'"D"IFyÏú ·ÛM<ÇCsssz·X|zÃÓ¼ ¼l¶Ö†/ë“‹ˆˆˆˆ “9×/ÈraƘ*à߀÷WTTP]]ÍÝwßÍwÜ×ëÅZ‹ã8çÝÒçtuE©¯ï¢¬ÌOY™ÐñôÔ«ãÇóío›D"ÁC=Dcc#›7o¦··÷£·öÀµÎGOÉ2Æäw÷ÿLx<77—[n¹…¥K—²|ùrÆwQ!ä\[2™¤¡¡Ã‡ó£ý€U«VQ]]M4åí·ßfëÖ­lÛ¶½{÷5³øGkmâ£DDDDD®4ËÈ3Ô(âs3}út/^Ìm·ÝƼyóp¹\—B:::hnnfÇŽ<ùä“cxä‘GøÞ÷¾wÖw;vŒ×^{Í›7óꫯ\²÷§ÖÚ_‰w """"r> —1¦øoÀƒœîŽ^VVƃ>ˆ1†M›6QSS30P\\Ìüùó¹óÎ;©®®&??ÿ‚!¤¡¡H$Âßþö7Ö¬YƒÏçãË_þ2¿úÕ¯Î{555Üwß}é)Z ÖÚ)ç½@DDDDä Púc¾ ü(†Ô”«|û￟x<Žã8,[¶Œßüæ7<ÿüó,\¸;w ……B¼üò˼üò˸Ýnnºé&-Zļyó˜1cÆß‰D8~ü8*PÏÉÉ¡··—ÜÜ\Ün÷Y×$ vìØÁ­·ÞÊÆ®3Æ«ô)""""Y¦2Ƙÿ ü÷Óæž{îá‡?ü!~¿Ÿh4:èܹsçòì³Ï2yòdî¿ÿ~šššx뭷سgGŽ!™L²k×.víJ­ ;iÒ$.\È‚ ˜3g‡H$‚ã8´¶¶òî»ïÇ™9s&ííí@ªaa  ??ÇÃáÇyöÙg7nÜÀ¥‚cÀ\cL3©&†É,¼.MÁ.cÌB` àš={6?ÿùÏ™;w.ÍÍÍÄãC7üîw¿ËöíÛù¾Àm·ÝFAA‡ÎÎNvíÚEmm-õõõg…—t!{^^.—‹mÛ¶ÑÝÝ À‚ xì±Ç†º?¶lÙB("Ç©««cõêÕíÀC§OM­@ ©0ºïGDDDDd( ÃdŒyø§‚‚Þÿ}ü~?§N¢¿¿ÈkúûûyôÑGÙ´iååå,X°€Y³f‘““ƒÇãÁår‘L&9p൵µÔÕÕ ;Ì™3‡ÇœœœœAû{{{YµjEEEäåå‘L&ñù|lݺ•W^y øþ9>¶Øo­=p©ïDDDDDäB@†ÉÓŒùÁ~ÀÃ?ŒÏçÃår‰Dèì줷·—drè™M555üþ÷¿§¾¾·ÛͤI“˜8q"%%%äççãõ¦Æb1Ž=ÊáÇiii!‹PZZÊ7¾ñ V¬XqÖgïÞ½›C‡áñxˆF£øý~ ‰F£ÔÔÔ°aÀ:àççy¼cÖÚ×Gô‚DDDDD† a0Æ`4@~~>™c‰D‚ÒÒR‚Á ½½½„ÃaÂáð °,XÀ‚ 8|ø0o¼ñF&4lß¾ý¬Ðâñx7nóçÏgöìÙÜvÛmTVVžuOÉd’—^z‰üü|Œ1D£Q<ÉdÇqÈÍÍ8šÒ~žÇûØ5ÌW#""""r^ Ã`­µÆ˜ ¤¹¹9³ßq¼^/Žãàv» ÆŽK___&¤ÃHee%•••|ík_R!"ÓÓÓƒµ–‚‚òòò†\Ùj ¦¦&öîÝK^^===@ªn$‰àõzI&“455Q__Ÿ¾dÇã;­µ #{;"""""ç¦r Œ1eÀ2R£m@ISSÓ禗àµÖâñxäääPZZJÿYaÀívSXXHaaáṖTSSƒËå cŒÁívÇÉÍÍ%‹ñæ›oòꫯ¦GWÞj?ò1ý@µ¶í’^ˆˆˆˆˆÈ%R¹H§»œ¿Åé©W@àÃ?ò|km¦™`zù\ŸÏ‡ßï'777Fzzz‡Ãç¬JWWuuuø|>N:•)4Çãcðù|„ÃaÖ¯_Ï{ï½—¾lðÜG? Øl­\ô—‹ˆˆˆˆ “ŠÐ/’1f#°x̘1$ ººº2Çî¼óNî»ï>>ûÙÏf¦` µ¥ë1ÇÁår‘››‹ÇãÁív“H$ˆÅb™0r®¥|êëë 9r„¾¾>¬µ¸Ýn¢Ñ(>ŸD"Akk+«W¯¦µµ ü_`¨Âò~`½µ6:Ä1‘ËJä"c¾üñ“Ÿü$=ö¥¥¥455ñÔSO±víÚÌÈŨQ£øâ¿ÈW¿úUfÍš5dðjs»ÝäççH$Äãq¬µtuu š¦Ç9yò$±XŒƒ’L&q»ÝXkI&“x½^b±ûöícíÚµésx 8zŽÇ‹Zk_¸òoQDDDDD伌1ÿ< Ü x_|ñE‚Á ‘H„h4JNNlÞ¼™'žx‚ÆÆÆÌµ7Üp_ùÊWX±bEEEg…Žp8Ì¡C‡7nyyy™éZ~¿Ÿ‚‚ q¹\tvv‹Å8~ü8Æjkk …B™Ú’X,†ÇãÁZK?¯¼òJ¦›:ðð/@ßy3 l°Öö^™·(""""r†ÈŒ1£€ÿ |-½ïÖ[oå‘G¡¿¿ŸÉ“'ãóùèíí%‰H$ƒÄb1V­ZÅ3Ï÷¹Ï±lÙ2rssñù|Äb1š››yÿý÷q»ÝÌ›7x<ÎøñãÙ·oǧ­­-ÓÛ#‘H°mÛ66lØ^¶w?𿀎‹xÜÀn«""""’E §cþðoêDZråJxàÌ/ú·x€cFÏ÷fÚ´iüú׿fúôéC[4%PUU…ßïçÈ‘#¼÷Þ{œ8q‚H$ÂÊ•+ ôõõeVË ‡Ã¬]»–'Ÿ|’ýû÷ŸŸÏêÕ«;vì iVª÷¨««Ãår …8tèÏ=÷¡PRËèþ Cw7ÿ¨ð¦µöøe}‰"""""IĘg€ÿPVVÆÏ~ö3¦M›Æ„ 2àB!dàV^^΄ H$Xk)**Êt*2S¹ÒaäÃ?ä`ß¾},_¾œÿøÇx<’Éd¦zWWǧ2ömÛøÓŸþD,ƒÔÒºÿ8qÚlµÖ^Ìô,‘+Âý“ŸüäjßÃUcŒñòòò˜1cÕÕÕ|ðÁ¬[·¿ßÏìÙ³©¨¨ ‰œóú»»Ùµk‡ÎÎN3S´ÊËË)((ÀçóeŠÈ£Ñ(;vì`êÔ©lذ€ÞÞ^Ö¬YÚ5kƒ,Z´k-[·n¥¥¥RÓ¨ž6žã6,М:ýÿ8pÌZ{¡Ú‘+NS°ŒÙ,¾þúëY¹r%yyy@ªîb„ Lœ8‘D"Amm-õõõÌœ9“3fàóùèëëËL½:u꯿þ:>Ÿ/}éKÄb1âñ8±X,³y<æÌ™ƒÛí ¡¡¿ÿýï8ŽÃOúÓôhÉ›À'Â!n·‹Ô¨Ç‡ÙŒÔ²» ©ž""""r­R1æS¤¦3yý~? ,`É’%ƒÁÌ9Á`òòrŠŠŠ8pàÛ·o§  €o¼‘¢¢"Ù¸q#¹¹¹Üwß}XkxÎÎNÖ¬YC<ÇZËã?ΩS§ 0ÞfŸÆØÔ0¸«y°ÇZ{4+/KDDDDd„>öÀóàq äô߹馛Xºt)×_=ÖZ ©¨¨`üøñ´¶¶òÎ;ïPWWG,£¤¤„¯ýë™Ï@Âá0[¶laÚ´i,Y²„¾¾>Ö®]K8ÆZ‹µ–_þò—twwZk»²ÿFDDDDD.?0Æ`)ð}àvRÓŸ=z4wÝuwÜqÇ U±&OžLEEEEEìÝ»—mÛ¶‘L&Y¸p!~¿ŸíÛ·3~üx>ó™ÏÐÑÑÁƉF£Xkq‡ÖÖV~÷»ßÑÓÓ©FˆÿJ*€¼i­=y5ÞˆˆˆˆÈ•¢rƘOÿøàðù||úÓŸÎÔ‰¤G1ÆŒCUUÁ`£GòöÛoÓÜÜ̬Y³¸ë®»hnnfË–-8Ž“¹¦©©‰§Ÿ~:=õªø)Ð ¼a­í¿ZÏ-""""r¥(€\cÌXà!à?‘* ÇÃŒ3X¼x13gÎÌ„ ŸÏÇM7ÝDYY>Ÿc õõõìÞ½;s޵–wÞy‡¿üå/镯¿öïXk«õ¬"""""W’È%0Æø¯’™žÞ?qâD–,Y2¨N`þüùtww³gÏžLðèëëãùçŸg÷îÝéËßþì¶ÖîÉˆˆˆd—È0c’ "ËI54dÔ¨Q,Z´ˆÛo¿üü|òòòðûý´¶¶â8;wîä…^HO¹JÏ“ªû8h­ÝyµžEDDDD$[@FÈs=ð_/~¯×Ëüùó¹ýöÛ)--eçÎlÞ¼™æææôeÇ'IM½:@jôC?ùwOä21Æ”+I-£[rŽÓÂÀKÀË@x×ZÛ|ŽsEDDDDþÝQ¹ÌŒ1>Ru"ÿ TùÀàm`3pŒT£ÁFzˆˆˆˆÈÇÈtº§H1ÄN-¯+""""g """""’5®«}"""""òñ¡""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""w,(PIDAT""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Y£""""""Yóÿ¹&&l•|ÎIEND®B`‚lasso-2.8.2/docs/lasso-book/figures/PaxHeaders/slo-sp-soap-5.png0000644000000000000000000000013214404126130021407 xustar0030 mtime=1678814296.801815631 30 atime=1678814296.737815267 30 ctime=1678814323.177965654 lasso-2.8.2/docs/lasso-book/figures/slo-sp-soap-5.png0000644000175000017500000017154514404126130024674 0ustar00bdauvergnebdauvergne00000000000000‰PNG  IHDR ¡™Ð< pHYsÊ&ó?tEXtSoftwarewww.inkscape.org›î< IDATxœìÝy˜]U•÷ñïºCM™*dbH$@ $Æ 2ÂPQ@i[Z_éVéÖnµPeH˜ˆ€@3AH„H€’Ôt‡õþ±Ï¹œº¹U©¤¦@~Ÿç©ç¦ÎÙ÷œ}+ÏS·ÖÝ{­eˆˆˆˆHOHõöDDDDDdó¡DDDDDDzŒé1 @DDDDD¤Ç(‘£DDDDDDzŒé1 @DDDDD¤Ç(‘£DDDDDDzŒé1 @DDDDD¤Ç(‘£DDDDDDzŒé1 @DDDDD¤Ç(‘£DDDDDDzŒé1 @DDDDD¤Ç(‘£DDDDDDzŒé1 @DDDDD¤Ç(‘£DDDDDDzŒé1 @DDDDD¤Ç(‘£DDDDDDzŒé1 @DDDDD¤Ç(‘£DDDD¤‡™Y™2³úÞž €™ÕEóé×Ûs‘> """"df‡˜ÙÕfvPŸ²;°8»ûfÕš™õ1³mœ>(šÏ)‰ñ)3hfu=1?Ù|(é¼ñ„`b×ÞžH;®Þ5³ªŽß xøïn›‘l–2½=é]î>°Þž‡l€ˆˆˆˆt#3ËÛ¯và9£½`ð˜»ËÆ ú¯ià``8°xØÝ ‰±#>Ñ·Û›Y.ú÷Jw_m³ÚXáî«Í¬o4_€þf6*qëÅÑ}p÷×Ú˜ÿÖÑÜ_qw_ßë•Í‹¶`‰ˆˆˆt3< Ü\ÜÌF·1¾¿™Ý ¼ Üü˜ øpn;ã=Î$lÝšÜ Œáƒ `cüŽÐ/ä¸èñOÀIëyÎÝÛÿ!ˆJº ˆËùª÷‡¬—©A¥ˆˆˆHçD]Ço»ûûeçR„F€Û*V= d %lßu÷U®·¡™`=ð.°ÐÝ– ô^u÷BÙ¹a@w¯Tm 3BÈ×Xéî+ͬØXáî«+Œ¯ŠÎg€ÅQ°Ÿë¼<çî´ñ#)Q"""""ÍÌþ ø!ð)wWþ‡¬—Ù Q"ý«8ÿF¨à5¡|%F¤ """"²A¢me xøw±wg% @DDDD>¢Ìl{àpàAw_Ðñ;÷º{¥î"¦2¼""""!JäžQvx a;ÒCÀܽ­Žæ=ewBcÀÓõ ÀÄhü' ¯C¤Ë© ¯ˆˆˆÈÆÉ{:¯Œ¾ª¥mÜefÙÞ›Ëûè\ù^‘.¥‘ÎyÎÝ¿1³­€{C +ÿÛ[s÷™„-X"›  """"]ÈÝ—™Ù¿'!ÿkf[ǯ§〹î~%€™õ>MØ6•æÿçî+âk›Ù$`<ð7w«üÞf¶'aUf†»/i/ÄÌv%tWDè¸~}{¯ËÌêS€Ý€4¡©âÜ}eÙ¸£aî~™í œ þG‰ê @DDDDºCô‹w&äVü!¿b8a{ÔhàJ3Û¸¬š€³ï˜Ù‰îþ`t-¢ë ¾[á¾?ö t'‡6r@ÌìTàZB ñR4§o¿­ôbÌì@àB°²„Pýê ÀÅf6ÕÝŸN ?8 Ê‘¹xpàÏ€QˆˆˆˆH780z,ïD~>p'0ÀÝ·N0³ áû­€Ï»ûPwß8‚ Üu=‡¤¼ œõâ(1³€ý[Ë»±—ÛøMtqî¾ !°¸š„”ü•HìíîÛºû„„u€?GÒ“ªó€Cܽ>ºþ#mÍI6/ @DDDD:§ÖÌFE_{›Ù%„?äó„U†¤—€¯¸ûZw_ ìÜàî¥ñî~/¡Ãø –-¢ªZvö+»öé€×­g¾guÀ·Ü}^t].!lû*wPœåîO%æ÷$p)°=0µì9)à"wÿ{4¶èîë™—l&€ˆˆˆˆtÎD`aôõðïÀ{ÀgÜý™²±w»{±ìXHÜ\áÚŠ÷O»6z<#>­†œFØuÿzæ;)zü[ò`„üµÂøÃ€`‰™}ÌÌöŒ¿«"¶z•+/Q,(DDDD¤³^"äv@Èßx˜çîÍÆ.­plhôøz…sK¢ÇañwŸcfO'›ÙùÑÊÂÀvÀ÷+8å†+ãU˜6î—´5aÅä¥v®Y_ö} ðözæ!›) """"ó†»ÿºƒc Ž5Eý*œëW6&v-ðs`p#a5ÄYÿö+€f ™¥*+ý+Œo!Vû¶sÍ÷ʾ/D+*"ëÐ,‘Þ¯,ìVá܄豼zÔM„@⌨|ï'Çܽ½UŠäýª€*œWáØªIÁݵñõNî+(ém#¬Œœgf}ãƒQu¬ £ooI>!úƒÿvB~Æy@_ÖMxoË­Ñc«ŠWf6øT…ññªÊÌ,]~ÒÌjͬ¶ƒ÷Ñ,阨™Õ(B3©ÀBw¯´_¹W˜ÙåÀw?³·ç""²!ÜýU3»¸˜if¿&l¹:ÛñÇD¤ë+—|°¾>ÎŒVOn%”þ7BÙà]ËÆßGhBø„™ýx5zÎnÀÉÀÇ:xÙÌ)‘v™ÙÎÀ侮÷×Ì^>áîÏ÷øÄÖu•·ˆˆt—<áöeÛ-Ï•ÀÝ/1³åÀÀUÑáw€ïŒJîž&$€ßåî•®½6ºïêĽŠf6Cr2aÕcuôýS„Ò¿kãÝÌ><|øQâú‹Pò©e„D|‘ŠLùA"Ò3«'Ô„Fxcú á q8°'áÓ¹u÷zm’‘¨«ïwÿioÏED¤3Ìl¡á[î^)i½+ïUGè3ò–»·tð9õ„dõ·Ú¨ô%Ò. "Ò&3;›Ð÷Jw?¿1U}ÓQºˆ´gDôøT[*föq3»ÕÌ^7³·Ìì3ût…q_6³?™Ù3û–™½`fï˜Ù'Ììͬâj†™eÍì3û^âØåfvM…±ufv¡™ý3šËb3»ÛÌN¯0vZtî 3[ff÷˜Ùm½vÙp @D¤=ñÞͬª#O0³/{w×–êÿÏ̾S6|oà$à÷À×€Ù„j0-€*ÂŒ­p›£SIìi&ä€_6—þÀ#ÀêãßHH¶¬&ì³N޽":·¡ÚÌM„¤û»Ììóyí"""²~Ú‚%"mŠþ€ŸMX YLr÷W+Œßx˜áî«£ãYBþÈQÀ8wŸ¿ŽG28ØÝ—'®õqB•–¸û…e÷¹8éîK£cE×”÷kà Àÿs÷ï—]c˜»¿ýû0àÞhŽŸŽWu¢r˜jåt÷w7ì'("""å´""mr÷÷ý›¡À9„j'‹Íì™ Û“Î²À7âà#ºNøáwÎ'+ÜêòdðyX|6YwÞÌ™{ã࣒¨&ýéÀ|àŠ ¯í­Ä·ÿJX!ùJrK™»¯‰žÛ7º§ˆˆˆt’ÊðŠH»Ü} pr´p°a Ô„íI'¹{Ü kŸèñ3›\v©šèq‡ ·yºÂ}ÝÌ®'”Ÿ<œPnàÓ„¾×•?§Ì8ÂV«Ç}ýK½ûJNžffåç¶jgÞ"""²€ˆH‡D«wD_—šÙyÀO 5êã¤(måL´ªEŸðvã¯.Îàƒä `ð×õL¹_ôøæzÆ 5g·q~¡†¿ˆˆˆt’Ù(î~¥™]ìhfµîÞ¬$$ïÑFC¬ ½Çâ(·ãx3@ÈEÙ¸ÚÝ›Öóô8_cxnµ ¨s÷Ñ?[‘ÞåÚAèL>”PDäBÃX é1 @Dd£˜Y†°Å©Hè ððq`*¡ŠTW¸8˜Ð­w§Ä±õ™¼`fwÏ·3ö1Â6³‰îþÏNÌUD¤Ç™Ù‰„j;¶1ä]3û'ðDôõT…¼;‘£$ti“™ý«™}×̶);^üи?J2ø%!—âGf¶{ÙsÌÌ4³ ]e¸…°më_€ÏóÝýñõ=)šÓU„²º?ަä|Æ'¾ýPþ·|~f–6³cÌl""›3›hf3 ¿'wL§Ó|ðÁœxâ‰ì¾ûîÔÔÄ©wlAø`è2àNà-3{-ê×t™ýºBÞžH·Ñ ˆˆ´gðÿ€o™ÙàUBnÅ8`0¡4ï—ãÁîþª™Bè·ñ¤™=FÈŸìB¦ª[uˆ»¯5³?óA^É•0ÿË Ñ§EŸ:a‹BØ5ºÇ?Íì__³ÍìQàuBú¸èq'à ¸·ˆH·0³QÀ÷ +ÃpÐAñï|‡±c?h”Ëå˜={6³fÍâé§Ÿæ©§žbñâÅñé|Ðlà fvpš¶kIwSiS´j°?!hØFhø*ð$ð»d¹ÝÄóF_&š¾MDn'¬˜Ä}6N&TÓº<Ê!ikã «?u÷eÆœ s÷/;žNN$@ „Ò¼t÷ûËÆîBè²PGH`‰Ðñw/¶5G‘îff  }™°–1cÆpùå—s衇ґ¿éV®\ÉóÏ?ÏsÏ=ÇsÏ=dzÏ>Ë’%K’C¾éîÿÝó‰)Ù„E \JØNÅàÁƒ¹ð ùìg?K&6´lìßt×^{-]t…B`Ž»ë’‰‹´A[°DDDD6Qfvaëé®ÕÕÕ|ñ‹_äüóϧ_¿~í?¹X±bcÆŒaîܹc:}Q‘õP""""²‰1³mÿNоgÚ´i\zé¥ Þ‘êâë÷ì³Ïrÿý÷Ó¯_?ª««ãÃé.¹¸H;€ˆˆˆˆl"¢*ƒß¾EÈEc§vâ»ßý.|p—Ü£X,ò§?ý‰wß}—>}úÏ·ªR®½ùÒ퀈lFÌl !)<–#T²z©R2yO3³þÀbà&wÿRÆæ׸û¿uóôÚšÃ`B"ý`©»?Úó‘?3;žP|@}}=\pgžy&étû Íÿxã7¸ûî»iii!N“Ë娮®N>_ˆt; "›—c+o4³ÿ.ëåò‹ $úÔ¯R8¾ËD¿~ŒL¾•PmKD¤ÃÌì0Bu«ƒR©'t—_~9ƒu] ¢Gy„… ’ËåpwÜÚÚZ’ÀH·S"²yÚ‡ÐÁ<|ŒÐ/ãB¹Ü é³ÑÕÖJà~úml¼ Ü ¼A¨N#"²AÌìHà¢Ü‹I“&qÅW°ë®»vÙ=Ö¬YÃ}÷ÝǪU«Èår ²Ù,îNss3uuuq,ï "ÝJˆÈæéiwßmþif û€³©€˜™ÛuîþRÙ¹­ Í ßt÷÷:3©hN³Ú:of}¢y¼ëîowäšQ÷~À²ŽÌÏÌúF÷xËÝWµ3׫Ö1³P""ÈÌê€?é-·Ü’ÿ÷gÚ´i„_¹]cöìÙ¼øâ‹¬ZµŠb±XZõhnnÆÝ©®®¦©©‰T*?E+ ÒíRë""›‡ ŸzŽ˜Ù;föfv¡sùàŨ±fvŒ™Í–û½cf·›ÙÈÄ5v3³wÍì*ÝÔÌNˆÎ)ú¾ôý/ÊÆ¥Ìì `ð"°ÜÌf[¶õ‚Ìì³Q`õ:!Oäm3»%ÊIŽ;?ºçÁfö[ÂêË|B¨ˆHw:dfüþ÷¿ç„Nè²à#ŸÏóÐC1gÎÞ{ï=ŠÅ"étšªª*ZZZÈf³¤R)r¹µµµÉDt Òí´""[¥[ b½ o¿þIXÀÌŽþJØ‚ôUBâø!ÀW€™ÙîîþŽ»?ofoŸ3³o»{sÙ}Ï$¬NÜ}ßVÈw ÁLà@°ZsS¥cf_#ägÌÎ"t4ßø0ÆÌöNt^¯‰îùsÂï·åÑkéN{ì±ÇŒ3¦”žÉdhiiÙè‹®X±‚¹sçòÊ+¯”r=ª««Éçó¥{Ä«ÙlV+ Ò〈læÌ¬ ø~ôíe§wNw÷ß'Ƨ€ŸÞ¤t÷yÑ©¿™Ù›Ñµ..ˆŽ_ ü8¸%qaÀ‘ÀÝùmM(I98,bÌìVà‘ ãGÿ<Lv÷øc½;Ílp !ð¹ªì©`wwo@D¤gÔl±Å :%rã< €ššòù|‡«\-]º”Ù³g³lÙ¿Vkjjhll$“É`f´´´P]]Mss3Åb‘êêjr¹\<\ˆt;mÁÙ<Ýdf2³éÀ+„?Èß"TaIZ ÜPvlWB`ò×Dð»X LK»Èg”ý áþk×3×£¢q?O® ¸{øi…ñ'YàÁGìz ‰ø”û¹‚éaEh]B×ÝI¥RÔÔÔPUUU:—ÏçI§ÓmnÑ* ¼þúëÌœ9“7ß|€L&SZᨩ©¡X,R,KÛ°ªªª03r¹Ùl¶ÕœDº“V@D6O£Ÿr[«ž~åîËËÆ½ìîåoF;F³Ë/êîk£¼‹qf–v÷‚»/3³»#Ílhâg¶9ݾž¹î=έpnN…cqé˜o˜Ù9m\³Rá—*éNë ÉïÝ|>O¡P •JQ(JÛ§2™ ©TŠL&C¡Pà©§žbΜ~%ÖÔÔÐÒÒ‚»SSSSzN¼Â’\‰ûÄ·ï‘W.›5 "›§}U°Úó~…cñÇdkÛxÎZÂêj†à@Xå8š°êñc3ÛØ ¸ªB^H¹ªvîWéXmôø P©¹â"BÙÜr½ÞˆQD6;”¶[­ZµŠººW”är9ŠÅ"kÖ¬)­VÄ=BþøÇ?–¶\™UUU477“Íf)‹´´´P[[Kcc#étšL&Csss)0I¥RÊ‘¥DD6T¼‚1¢ó#•eÅí„ÕŽ3€óÁv¬ë6ð~O—Û¶Âø7£Çß¹û½¸¾ˆHo)BÈû˜1c¯¾ú*“'OfÔ¨QôíÛwíYMMM¬]»–T*ÅÚµkyóÍ7q÷Ro8Ç£¥¥¥455•ò>̬ôïx\¢ˆévÊ‘ õМ`fÙä 3› lMYrxŒÜH¨µ7ði`Ž»?ÙûÍŒ?Qá\¥cqÐqz®-"Ò›ZmÁ:ú裙2e O>ù$ßÿþ÷¹ùæ›Y°`«W°@WµX»v-ï¼ófFmmm©ÏG2¸€?RSSS:–N§Éçóë”äMÎI¤;iDD6ˆ»¯6³_ç¿1³/¹{ƒ™~KøôìGžzp.¡ ÕPBe¬Žøð$pŠ™ÝüÙÝÝÌ>ź‰íwúš|ÖÌ^®p÷5f6øðº»ßÖÁûWdfµÀØèÛx%¦ÞÌöŒþýž»¿Ü™{ˆÈG^«¾}û2nÜ8ÆGSS‹/æñÇçí·ßfôèÑl·Ýv 8ššÜb±XJN·\ …RŽGSSS)¸ˆ;ž744´ê‹ç€V@¤(‘q!‘ý àT3[Nè’Îw÷‡ÊŸàîOšÙ`¡*Vyu­Š¢`ãTà~àOÀ»fVê ¥~\aü‰„—oß2³¥„Þ"ƒo®gmøK^ÇhÂjPÒÁ‰cwÇvÁ}Dä#&ú0¤ž²$V(H§Ól·ÝvŒ5ŠÆÆF^{í5fÏžM>Ÿg÷ÝwgàÀ¥ (­p¤R)Òé4---¥à"N—VE’ã²ÙliUDˆô$ "›—¯ýéØû§¨œ¬MÔÄï83;8ˆÐÈðUà/î¾°kžF¨jõ~½?€“ “÷{ÙÌÆGÏCÈ ¹…h¾”Щ=9þà3Û8Fèpþ*p»¿žþ7Bbú‹íÌ»’%Ñ\ÛÒfoÙ|™ÙA&L¸Ë-·L=øàƒ«â^°n9^w'—ËafŒ1‚Q£FÑÐЀ™ÑÔÔÔj;Vss3UUU¥jVq"z\ «P(”rA²Ù,ù|¾Ô¤©©)YÞWˆt; "›w¿{ÆÞÜ1°nóÂöÆ?<ÓÎùPñ¾îþ>ë6¤­ñÑs]ÏœæóÛÓÆóÞkïÞ""m8ìðÃOí»ï¾Ô×××ßtÓM¥dÞ¼y 8”‚dIÞÆÆFܽ”0ž @ÊKíæóyjkkihh ªªŠ|>ßêX&þŒƒ”|¾Ô6Iˆt; """"=ç7W_}õé?üðˆææP,0$–/_ΕW^É;ìÀ>ûìÃöÛo_±VrËV|.Yù*N“J¥JåwãÀÄÝK¹ ñªG²oDIèÒ퀈ˆˆˆôwØÖÌF¿¦ÄÅÇ?þq&MšÄ+¯¼Âœ9s¸ÿþû9r$»îº+ƒ ¢OŸ>Éë”ã€#Îçˆs<ÊëlÊÑÕˆPz’‘æî‹Ìì1`Jr+U*•b»í¶cäÈ‘~øá¼ñƼøâ‹<ñÄl¹å–l»í¶l±Å¥&ƒq·ô¸·GKK ™L¦´¥*Îñˆ·aår¹RSÂL&ƒ™‘ËåJ[²P"=@ˆˆˆˆHïp bz|lË-·dذaäóyV¬XÁk¯½F]]])`pwªªªJHp$» '«ae2ššš¨©©¡±±‘l6[ B"yDº™‘Þ±NÞäjHü}¼Ò1pà@¶Øb Òé4kÖ¬)M6,ÉdÚìŒç‡Ä¥{# @¤Û©ºˆl’̬ÆÌ¶êíyˆˆt£R’ <–/_NCCCiPò\>Ÿou..¥[(JÁE˜Y©3z.—£ªª €\.×j¥$>Q"ÝNˆˆl2Ì,mfÿbf‹€Fà 3[ef3ÍìGfvŠ™ìíyŠˆt‘Š+ ,àœsÎá—¿ü%óæÍ+åsTê´ .òù|©÷G¼²ÍÍͤÓiÒéti»V.—Ó ˆô8mÁ‘M‚™M~Œ/;5Ø?úŠÇ¾<ÌJ|¬q÷ÕÝ?[‘.Ñj$¶ß~û±ï¾ûòÒK/qï½÷rË-·°ë®»²ûî»3hРҸ8‰›&W8â ÄÌJÏËsAâÀ%—Ë%û€ˆt; "Ò«Ìl7BàqDô=Ç<§Ÿ~:555¼üòË<÷ÜsÌš5‹9sæÄÛ†ÇF_I fö'à2w­'_‡ˆÈFhµR¾Â1zôhvÞygšššX¸p!3gÎÄÝÙgŸ}2dHi\\Ùª¥¥ pÄÛ±ŠÅ"Ùl¶Ô$Ù=^‰e2™]Ìì‡îþÍû)ÈfGˆˆô 3ÛøàsDÛA÷Þ{o.¿üröÚk¯Ò¸½öÚ‹SN9€¦¦¦R0òì³ÏòÜsϱxñâä›v]t½‰f¶¿»¯ì±$"²áÚMB»Ÿ‹EFŽÉŽ;îHss3Åb‘†††ÒØL&S 8òù<…B¡´Ú‘ÍfÉår‹ÅŠ•¯’=B @mmí¿™ÙvÀOx22é @D¤G™Y_ààë@€m·Ý–K/½”ãŽ;®”4YIMM 'Ndâĉ¥cï½÷Ï?ÿ<³fÍâºë®céÒ¥»kq“§ IDATD÷¸¨›_ŽˆHgTLB‡uWC …k×®¥P(´ Pâ*YqpQUUE±X,mÃjhh “É”š&;ŸÇ«"q;„>$_|1õõõŸ\µjÕ'o¼ñÆ÷Íìnààoîþ^Ïýxä£JIè"Ò#,ø,ðp ÐgÀ€\vÙe<öØcüñ˜Ù_wÀ€Lž<™¯~õ«œwÞyÔÔÔħïºÙ‹ˆt‹V}@ íDóä¹dÀâî¥ò»µµµär9̬pÔÖÖR,)‹¥ò»ÕÕÕ@HX/߆U,™={6kÖ¬aÈ!\|ñÅýgΜyÒ-·ÜrÝ¾ð…• xÌÌ.4³=»ÿÇ#UZ‘ngf{W%’g2N=õT.ºè"Üéë»;üãY»v-Ççå—_Øé ‹ˆt¯ŠIèë[ )_%N¥R¥mXÉjWqp‘Íf) är9êêêhhh(mÃÊçó­òGùõ¯ý~&“Y°ï¾ûî±çž{ÚèÑ£©¯¯ç„N°ÓN;mßb±¸ïsÏ=Ç^{íµlÖ¬Y·÷3Ü}M7þ¬ä#Dˆˆt3|øÑŠëäÉ“ùÞ÷¾Ç.»ìRñ9ºÕøí·ßæÆo$›Í’ÉdTÉED>LÖIBo/ðHJn¿Š¿â࣪ªŠB¡P*ÉÛØØH&“!›Í–&577—:«744,&677¿mfCxà#cvÞyç£÷Ýwߺ±cDzõÖ[3räH~øÃnUSSsö믿~öý÷ߟ¯­­}¸©©é6àV‘ö(‘.gfiàB’ùÛl³ ßþö·9ùä“»ì>?ü0sæÌ!›Í–ÞÀS©ÒÎR%MŠÈ¦n$th;ðh+@I§Ó¥jXÉR»É¼–––RÉÞ¦¦&êêêhjj(UËŠ¼èîoG×_\\oféùóçOŽ©¯¯?jÒ¤Iã÷ÜsO¶Ûn; À‰'ž˜9ýôÓillùä!ÀÑ[n¹åñûï¿ÿVãÆcûí·§¾¾ž¯ýë}ï¹çžC (‘.­|ü™(øØu×]¹âŠ+˜4iR—Ý£P(pß}÷ñÎ;ï”êâ›YéÓ½8É2.%‰V@D¤˜Y-!§­¸»7uârNB·^ÅùÉÞ™L3+å}477cf¥mXµµµ¥mX‰o68‘ÎÝ@Ýü«™»å–[ŽÊf³ÇNš4i¿Õ«Wç‡6ôºòÑ¥DDºÂà € /¼¯}ík­:ëvÖ[o½Å“O>ÉòåËKI—q’eüfïyN”òU""ÝapfüMâwN(~÷´÷¸ûóë¹Ö%¡··o?-BR©T)Ç£ªªŠ\.G>Ÿ/ýÞŒŸ›Ø¾ÚéJî>˜ üÀÌꬻ¯èìuå£C}@D¤+ 0vìXÎ=÷\êêê6ª§G%/¼ð?þ8Ë—/›nœP ¡¤o¼ç¹X,jDDºUTÝi!ØHJÙ諘Ó˵¹’üw{çâ­WñVªB¡Ð*à€°‚ç…ÄÉé¹\®´*’J¥J¿³GŒ±õm·Ý¶ÛŒ3º$iÏÝW)ørZ‘®°=À~ûíÇСCK+©TŠššr¹Ü—×mjjbÁ‚Ì™3‡ÆÆFÜL&C:.í_nii)­†ÄÛ°€ˆHw¹øRçŠÀmQÒöú¬³«Tv·­ÇÉçñïÈJÛ°ZZZZåËÅÛ°’²êëë·Èd2ŸrÓ§O9•JÍ/ ó>úè•x="¢DDºL¼‡8NÓ¿ÿR’x¼*o›j/13Þ{ï=æÏŸÏ¼yóJc«««Éçó‹EjkkK •Åb±”d*%¡‹HwiÞÊ;©æyƒ×éTzü¼¶¶\%·§&&·aÅÞÄ×J§Ó]? ìR,w13¦OŸþn*•š›Ïçç566.:餓:`‰T¤DDºB*bW,Éd2¥-ñJbËÙl–•+WòÈ#ðÎ;ï”Æg³ÙRµ–8¡²¦¦¦ôf›l®•x#× ˆˆt)3«ö&•¶(»6à’è|'ô¸™`üAM¡Phu,^…ŽW@âU‘¸GHccci –™µõáÍÅbñ€T*u@ß¾}[¦OŸ¾˜kfó¦Núþ¼f "Ò%(muìmnn¦P(J¥Èd2¥¯Õ«W3xð`æÍ›ÇC=D>Ÿ/m+(‹¥­q—dòd.—+•âÏ'ç$"ÒY~±ìô‹/ÞÆò>rÀ½î¾v.ÝêÛí¯ 766¶*Éñ±8àhjjjUE0.Ó N§×»zìîUÀ.À.îîÓ§O_Z,_Îd2s<òÈWÑï_Y "ÒZ%R>ñÄ >œúúúÒ¶¬äg.—£©©‰÷ߟªª*†Ê[o½Å}úZw±P(Ìíß¿ÿKtPgÊËG”é ­ö1/_¾œ+¯¼’ñãÇ3qâDFM¿~ý*¾‘666²zõj–-[„mYq¢y2à(ß:o¹jhh ªª 3#—ËiDDº„™mljw÷¸Tm³™=LþêZmc=Iè Jâ&¬qÀÑÒÒ²ÎjqœCqâú 7ÜÀ£> À;ì°à„Nxy_C¹>f¶G&“ÙcíÚµÅ;ï¼ó5wŸ[,çwÜqouòÚò¡DDºBéS<3ã˜cŽaÊ”)¼öÚk<ñÄLŸ>vØqãÆ1lØ0úôéSzb¼5kõêÕ¥RºÉ„Êt:]Ú†¿qÆÕµ’´â••á‘Î0³AÀ!„­UFØZõO`fMg)wc#nç°nú†¬†Ä…>’Gœ÷‘ü]šü@§ººšeË–ñ«_ýŠ¥K—0vìØ¹—^zé=ñÖyM©Tê|>¿Ø%NïäîÛ¥R©£¦OŸ¾ÂÌ®œ:ujsÜG>Ä€ˆHWXçS<3cøðál³Í6{ì±,Y²„Ù³góè£2bĶÛn;¶Øb ªªªJo¢qú8Ð(/Y©‚Kù›m¢›¯é03«öö%ü}ä„^÷ºûª¶ž•Û}|#oÛjûj{GÙ=?¸@Tè#îˆÿÞŒ³–Ëd2<ûì³\sÍ5444N§ S¦LyèÜsϵ‘¯!9¯¦T*uÓ‘G97:ô4š1cÆöî¾K*•tä‘G*ø "²qÌlðuBó­ÁP¹›oüƺõÖ[3|øpr¹Ë–-㥗^¢ÿþ¥Þî^ZÁHn¹jkV¼Rç‚ÄM¸Ý|•""ëefY`"pP^ÜíîݽehIBÏçó¥à¢|V&“)}PÓÒÒÂÝwßÍ­·Þлӝ_¿÷Ï=÷ÜÛ&Ož¼¬³/ÄÌ–g2™ë8âˆåå¯qêÔ© …½‡|t(‘õíK.¹ä¼Áƒóãÿ˜Å‹·ªv"‹?+ <˜-·ÜwgÍš5¥qñ¾ä¸|ø’‹/¾øö#FlH£Ä¶¼ÞÒÒrý´iÓÚLÎié °nº™±ÕV[1lØ0&NœÈ›o¾Ék¯½Æ?þñÈ®»îJuuué"Ñ't¥¤òt:]j:˜¬à’L², ¥ ¥¦¦FE¤dc+[õww3»øåã?nx pgžy&tP‡VCŠÅbi{jœ ²bÅ ~þóŸ³hÑ"ößÿÇ/¼ð™étº+>˜ùçÚµkÿzÒI'Ö?T¤2 "ÒZ•’Œ%W8ŠÅ"ƒ bРAL˜0•+WRWWWJ’ŒW@š››[qçÞ8ïÃÝ×éR(JÏI4"ÌõôAD6 íT¶ºÇÝß쵉UàîW›Ù"àrwŸôÈ#ðÈ#0~üxÎ:ë,?üðòñë|7ÌårÌŸ?Ÿ_þò—¼ÿþûTWW7qÆwüñ‹º`ªùT*uë‘Gùd\K6s @D¤+t¸›o\©¥®®næ[ñ›h¼ +ŸÏ—r<âŽçq5­êêêÒJ P \Iè½±Ÿ[DzQTÙj,!Ï£>:üaÅ£§*[m0w¿¸×Ì>\õ /ØùçŸÏ!C8ùä“ùÔ§>Å€âñ¥Ç8÷®¥¥…3fpË-·P,:tè›]tÑm;í´Ó{Ÿ™­J§Ó¿?âˆ#º"wDDˆˆt‰V„7Æ¿ÿýï4662iÒ¤V[­Ês?’AJ²Á`UUðAp‘¬kßÒÒRZõ€’ÓIè @D6#Qe«#€-£CïO÷de«h_¾5)ì0wxØÌÆßNY±bEöª«®â7¿ù S¦Láøãg·Ýv‹ïE±X¤¡¡ßüæ7<óÌ3ì¹çžÏ\tÑEÖÖÖvz›”™Í/ 7M:µ¡³×‰)‘®Pq ÖÈ‘#¹ë®»¸õÖ[Ùm·Ý˜8q"£GÆÌ*6ÞJ¥R¥Î½uuu¥€"Y×>Bâ­YɪY555ZÙ̘ÙÖ„í£C½RÙÊÌj £¯àeàs-w8Ý̾|8»¥¥eØí·ßÎí·ßÎV[mÅ”)S>|8¯¾ú*÷Üso½õÙl¶åä“O¾çÔSO×/ÉÍìþ©S§Þ‹ŠzHS""]a-Xq5¬/}éK –,YÂÃ?ÌÝwßͨQ£?~<ƒn°Ä[ â .ñ6¬äªH6›]çX\~7Î ‰Œ6³¾î¾¦§"ÒýÌlðq`Be«ðð`OW¶2³cŸòAôðPg¯ëîo—šÙ÷€“&/[¶,uíµ×¶;`À€•\pÁ­&Lx§³÷5³Æb±xÓQGÕŒÈ:€ˆHWpùmu?:t(§œr …B¥K—òôÓO3~üxú÷ï_zN:.='Ù`0.É› BR©TÅmXñ ÈÀwY³fͳf¶«»7÷ôDDºG´Ò°?ëV¶ºÏÝWöð\v~zøî~}WÞ'úö{à÷ƒÞfë­·þÆŠ+*‹õfVµÿþûÏþÄ'>1¿¾¾¾+:‘/«ªªºþÐCít #Ò "ÒŠÀ:[ªâ—w?4hG}4Åb‘÷Þ{¯4.ŸÏ“ÉdJ«q©ÝL&üªJvAkÝ'» Ç5ðú÷ïÏ0zñâÅï˜Ù_€Û»Ýýýü¹ˆH1³4°7p½\Ù**ï{ð- h~E>ºuÕõí·ß^ |=9»ï¾{`>ŸffC‹ÅâPwffCͬ¦­ëT2}úôUK–,ùíßþö·Õ];k‘Ö€ˆHW(ÉíÖ¯/ ¬Y³¦´e+~L®`$Ëï677cf­V@ …Â:]Ðͬô|3ãsŸûýû÷ïS[[{Ú²eËN»ë®» }ûö}xíÚµw·¹»¶ˆlâÚ¨lµœ°âñR/ÌçXàçÀ¶Ñ¡;€óݽ+JÝn Ÿ2eÊ»À»@«ßi7ß|sm¿~ý†‹Åa©Tj˜»s÷a@ÿVp/ºû]W]uÕî„Ü“kܽ±ç^‚ln€ˆHWh•„¾¾ÆYåçâR’¹\®\ …ÒjG¥€£¼GH|,îÒÜÜÌW\ÁÁÌŽ;îHÿþýùÄ'>‘þüç?pCCÃÁÏ<óÌî¶Ûno¼ð wþ€¸G[µD6-íT¶zÆÝ{´Ù¨™®Œæ°øª»ßÑ ÷ ¼áîêgtÒI'5‹£¯’{î¹§OCCÖ™Lf™õ) /üñk€ÉѳÌìÝ]•¯¤[(‘®P± o¥·w.8’¹ ñ6«¸ßG¼ +Î-‰ƒ¸Lo<‡+V—-[öí§žzjp̘1cŽ9ðÀkÇŒÃСCÙyçùéOºuUUÕÙo¼ñÆÙwÞyg.›Í>œÏçonq÷×»ü§$"bfCÀ¢C½RÙ*šK=a«Õ×€* ø!ðŸ]ì­öìüXÑ•×qÄk ÔÂÄáªV€³£ DÛ±¤Ë)‘®Ðn'ôøßm‹Ÿ¯€Ä9Ùl¶´êÑÒr+kjjJ óù|© z|,@òùüµîþ_Ñ-®7³š_|ñà°úúúOpÀ£÷ØcFŽÉ€8õÔS³gŸ}ö¡‡>þøã?=zôÂE‹ý¸x¨³ŸDŠÈúµQÙêYàw_ÛÃs1à4àÀ°èðÀWÜ}q7ܯ8 AxÝ馤 ;,ö#¬„üVAˆt5 "Ò:Ü ½­sîN:.­zÄÛ°ªªªJ=@ …ÍÍÍ¥ $Y~7Bâ-X„O)“÷j"÷ß2³1wÜqÇÑfvÌž{îùñ‰'¦ÇŒÃàÁƒ™0a×^{íèL&sá‚ .¼ãŽ;ÖšÙ_¿¸û_ºü§'²™Û”*[EóÙç±_tè%BžÇ]Ýt¿­€SZÂëÏñA¾KOEúbi /ð…(Qé2 @D¤+TÜ‚ÕÑÕx¤X,–ŽL&S H’9™L†¦¦¦RùݸoHSS555É9´»MÃÝ_^~dfýžzê©Ã©#FŒ˜và;v,Ûl³ ýû÷çœsÎéóõ¯ý3?üðgÌl¢»?Ñ韘ˆ`fY`àÂß¶ÝÛÓ•­¢ù ¾œKø|-ðßÀ÷ݽ+JÜVºçàhÂßdquÇýÚ˜Ã|°ú‘!Ÿ‚]…’. "Ò:•„K¥R¥€#—Ë•:žÇyÍÍͤR)jjjJ]Ðs¹\é9¤R©¸W‡÷‰GÛ þüÅÌÎþÃþ08*›Í;yòä}öÞ{oÛi§X¹r%@v#~>"’moúp0!ßàMBà±°Í'vß|RÀg ÁÆèðÀ—Ü}I7Ý3 ŒaÝß+–˜GOØžº{tÿ"ð*a%êeÒ•€ˆHWXoz{AI±XlÕ=.’Û°’M óù|›[³¥€7*QÕÃ䞉¾¾gfƒxà)„FcË€Ç6æº"lJ•­¢ùìEØn51:ôðewŸÙÍ·Dèg’"ü¾*ÿ›l‹n¾ÒÑýß–»ï¸ûu=8ÙŒ(‘®Ðfz{Gù¿Ý½T~·|V]] d³YÒét©QaSSSiUdõêÕ¤Ói …©TªKþq÷w€ÿ‹¾Dd#™Ù6„ÊVÛG‡z­²U4ŸAÀ¥À— AÀ*Âö««zb>ѳ?˜Y?`/Bò}2£owÏ!ap‡»¯V§v†˜Ùw¯ç!›  "Ò*wB/ÿ¾½$ô¸‹y¼¥*ÙñÒé4---­º 'W@8à€É3fÌø‚™Íkjjš=mÚ´UÝøúE¤ QÛƒÝø ²ÕSÀƒ]]ƶƒóÉr<.'lÿrà÷À¿¹ûòžž»¯6³5„ŸÍ²èð cf}zbë“»¿œø·›Ù+„ÿ¯ÑÀÓÝ}Ùü(‘®°AÐ+%¡ÇåÛ°âR»É~ …Bb±XJN«a­Y³¦´’N§ÍÝwt÷«ªªŽ›1cÆî>˜÷ä“O.¹ì²Ëz|«‡ÈæÄÌêU¤6‰ÊVÑœ~Œ=MØnÕÛ[+÷Šp÷f6 ØèCH„ïi/£Dº‘é ø °Ø˜$tw/õöÈç󥲺q’Ür•Éd0³RÞG¼ +N2™L«ÃÝ·¶Ù{ï½î¼óΗÍlA>ŸŸ{ÜqǩƽH‰’«'*[ÕD‡÷ôFe«hN[ÿIH47à]àߟ»{¡½çöÀܶ†+ øãîo’à{Ëà„ÿ7‘.§DDºB§“Ð!t9Ïf³¸{«ÊWqÀÑÒÒÒ*àH®”ÄÑ;˜Rgf»»e³Ù¦OŸþ0¯©©iÞ‰'ž¸”ªÁˆHE•¤v"4±XJXñx¥—放üG4§"ðàëîþvoÌ©œ»¿if¿úyùþÕ^âîÀ< ²iÄmyˆËöü–;Ù4)‘®P„ÊFGó?ŠÅb©ãy*•jÕ¤¥¥3+m¹JVÈJ)o¾ùfi¤ÿþ™¸»§€áÀðšššÃï¼óÎ5ÀK…Ban6›}qêÔ©Íýáˆ|ÔE•­¦ðAÇðUÀƒÀó½õGµ™BØn56:ô$a»Õ&ÓÇ'Ú¦Vëî+èÙ®çëefã©ÀÀß7ò)à_€­«NWvÕüäÃMˆˆ¬ÃÌÆË¢ P±N'ô Ù†w/W@òù|Å\8Ñ<¹ +ŸÏS]]Í¢E‹¸æškèׯßûÓ¦M{i#_{_`L&³‡»çg̘ñJ¡PXËåæžp =ž *²)3³áÀáÀÈèPð(½TÙ*1§ï§E‡–ß~¿©¬0$ìlf÷¹û?z{2eVu„<¿oä5&Ê oj?wée @D¤’OšÙûÀ~^r5£X,–V@š››K]Г۰âc=ö7Üp¹\Žl6ÛrÖYgM¯¯¯ït×bwor÷©TjÇêêê£î¼óÎå™Lf^ccãüiÓ¦-Boª²™2³Á„ÊVc 99àŸÀÌÞÚfcfµÀyÀÅ„¶yàÀ%îþ~oÌ©=ÑêÀ„ŸßâÞMEK€f`3«¶eu˜™ ! wGvÃüäCLˆˆTò ¡;oB%–=Ìl10Xu9´^)Ø€Nèɼ8¸HvFÕ›››KÛ±nºé&fÎ ýÂêëëßýÆ7¾ñ·=öØ£+öv/* 7<óÌ3k'Nœ¸m>Ÿ›N§w) f³ÙqÀuÁ=D>T¢žr=R„žþ^ö;¡§çu,ðS>è1òwà+î>»·æÔc€zÂjóÒÞžL9w/D¿óÇ~®s;úÜ(¸šFènÿ @¤Œ©ä5 ý;}AXŠ kf3Ýýþèx«6, =þŠ{{Ä@6›%—Ë‘ÉdZå}¬X±‚_ýêW,^¼€±cÇνôÒKïéׯßF'KÆSJ§ÓO™2eP<î¸ã |:¹˜>cÆŒ!fÖ¿“÷ùP1³*`Â'ÚÕÑáEÀ]½Ñ;#1¯ÇQÑ¡¥À·ÝýúÞšÓØ;zÜdrR*XH@v``!èꨯHwÌM>Ä€ˆH+QÕ˜þ„O6Så§£¯—i½'x£:¡'“Ðã¯ä H|ͪª*ZZZH§Ó˜sçÎå׿þuÜù¼0eÊ”‡Î=÷ÜY}íîÞR(þtÔQG=ßÖ˜©S§nrÉ¢"ÝÅÌÒÀÂv«¸3÷ëÀ½îþj/Ϋ¸€ÛQMØöKàâÞ\‰é(3Û‚°ªÐlÊ«4qƒÂ:ú„¨ÃüAÀ#Qr½È:€ˆHœx½+°a…£­ß 9ÂÒŸËòA °ñIèñc*•*­€”Wà ý«Ï IDATŠWBîºë.n½õVŠÅ"ýû÷_uþùçß¶ï¾û¾Õé¬( ×wÜq]q-‘5 Y%$¼M¨l5·7“¹£íV?ãƒÄ÷û Û­æõÖœ6Â>„sžI–¸~îƒ=‹ê ¿‹ß–öFw×ÌÞ¶0³!ë (¢ùG˜ó¦–T/› "›©¨6ûhB·Ûù`Ë„†Xk¥ãßyBã¿Uøã£(åiÄ:º’\9)ïíafd³YV¯^Í5×\ÃÓO‡¦¼£G~ù²Ë.›>hР®(“;wíÚµ<餓6(ÉRä£(*©{á`ÕþNøc¹½þ:Ý=¯1„íVS¢CK+†íV%Q~ÄxÂÖÕ§ÊNOŽoãy³¿öBu±€t¬èÆ>À¶Àïz« š|8(ÙÌD%*?Œj§–Œ—Ýýí¨;ï¢syàyàö6>ùœðÖ[oñì³Ï2~üøÒ‰ ݆—ÚM–ß]¼x1W]uË—/'•J'Ožüø7¾ñGÓét§>…5³¢»ßÔQG݇*ZÉf.ªZta5 …Ÿðˆ»÷Z?3ë|¸¨ÿùallçîE3û0ªB©ó•À=„œ³÷«Î[‚®q„^ôÜlÁÝìȸh[Ü¡„\‘Õf60yHEÇ ›bU2éY¶é•Ä‘®íãÞØØ&qê}B`ñLùa´”~჊ÇÜýÞõ\ °Uß¾}ùÜç>Çç?ÿyL±X,%·õïB¡À‹/¾H&>Éçó¥-W=ö×^{----ÔÕýöÎ<¬ªë^ÿŸµÏ"*ŽˆŠ ‚ bEƒ8¡’4Æ!‰™šÄcM§Û6íMÓ¦÷öÞöw;Þ7mSËõc&Ó&¦1‰1‰ó@âDEœQ@8œ³×ïµ2p„ð>ÏãcØÓY[rÎÙïZßïû•ýë_wÚ´iÅ·àŸ¥xí®»îº¡¼¦£ „èL抳•È6J)Ëý8.Êòø5ê!à=à_¤Ÿ’ÕoBˆþ×[N%„¾ ”J)ÿÚ2#köõG ú@>h*ݲfþÖ5\rÉ­Ÿ¦ý¡ˆFÓ±|ñÇ·ݬÍ.T¶Gp¸¹Zn!Ä<à˜”ró5¼Ö(଺l‡ÃÁwÜÁ“O>IBBB“ÂÃûóþýû1M‡Ã”·ÛÍ[o½Åš5k0`ÀÑŸüä'ïEFFVÜÄ?‰—ã/?ðÀçnÁµ4šv‰õù0HAM4HÔìõz)¥_ßBˆÑ¨> Ö¦Àw¤”øoT7µ½È—R®¼ŽóÀQïk©ñ5óú €Á¨0ǃMȕճ†ÌD­\m.K)¯ÇQKÓÑ%XMÄZæNAÍh:­Í—PAa;¯#Pê])eÙµ(¥Ì±j´þµ¦¦&æý÷ßgÍš5Lœ8‘ùóç3~üøF%Yêgw:x<Î;Ç /¼@aa!B9a„Ϟyæ™m7[res×ñãÇßZ¼xñÍÚõj4íkÅr,0…+e˜‡€uRÊ~µ³èÿ…zH7P½h?þ(¥¼épÑ6À8ëïkÎý°V‚& Ê˜ö¶Ä ®ƒ(cýw#¬r8Ÿn„Bˆ»€j)åM»j:zD£é@XùS¸RJPŠªãÎi­¦@«Ér.ðC Ù»=22’û￟{àà`LÓÄ4Mª««9xP}§íß¿Ÿ¿þõ¯”••pù‰'žxöìÙ·¢ÜÂmÆš;ï¼sÛ-¸–FÓî¨ãl•xëóO£Býõ` Ô~fÌ~ô±6¿|SJyÔo»…X=O£„Äš+oB E5¤}QIŸ[üá@&„¾œ–RþåÎÿ7 LJùü-œ¦]¢ˆFÓ°š4'¢f5½+›…@¦”òß!¦ßC…AAAL›6/ùË$''sñâEŠŠŠX·no¾ù&¦iZò£ýhõСCoºYQJYðrzzz‡xÑh®ËÙê®ôR”[ð³³€b2ªÜ*ÑÚ”êóØê¿QÝz„Qâï )å[W9v$*Ì/•ËT…JœßØÀ½U°ÄëÓ¨RÞ?\ëÊxóg¢J¯Zµ^ÓvÑD£iÇÔI'žZ›¡j¸ÜÂ×é~³®%Bˆhà›ÀB”¥#}úô!&&†ââbŠ‹Uoyrrò®ÿøÇ›nú‹Ö0ŒBÃ0^½ãŽ;nEïˆFÓ®°zÒQå3 êð·Yþ¶IB„¿B­|”ÔöÇCvKb=Àÿ jåiÙõ¬êX½:ÓQ«É»¥”ï´Ì(¯:޹(‘¸ZJ¹ËcÐt´ÑhÚ!V¹‚·†;ÈÚ|%<|ÖçÞÄkMD œ—¥”×\·ÜÌõ‚{ºvíúxUUUšÇã©íE ¾4cÆŒm ,¸ÉÀÒ4ÍÍ;wî\ûÓŸþÔ¯3¼MkcõRLE•\ ”³ÕÔ º_­k­†êo z;º&ð*ðýŽšœmõÇ=Ì :@Y曨Â_ûãw(„HD•Öî•Rþ£µ__Ó±ÐMèM;C1UÎjmj±tb!Ät`’õcÍ4NZ+cP¨BJù¾Ž³êž_^¹ûî»C g÷ïÝ»w×Å‹9ÎÞ¨`qC¯þ>kÖ¬/fÍšu—ÑhÚ–¥n*ëÇ@=Üg£ú<®«l¦%B¤ÏqÖ¦ÏoI)³ü7ªV!Éú»aðà5!¥”Bˆ³¨þoIVks唿‡×Öt0ô ˆFÓN°ÌoG…Q TŽÅzZ¨†ÛêݘŒúÂùPJùi}QåÉ(w–/¡Üt.£Vd¾.¥Ì¸Ñ×Þ·oŸ3??¿ŸÓéì'¥ 5 £Ÿa¡@/)¥ÑܹBˆS6›mÅwÜqêF__£ioÔ±Ô½ pX›¡Þ»¥~˜…"øà(žE­¬vø!Dª|)çFܼ„vàÛ¨£ß^‡“á-EŠjD׫ʚ›B ¦SÇ2s*ÊE¢Â?’RÞò¾k©ÿË(_ ¬•R~fí D5®ŽEÙcpåaÇ‹k‰RŠM›6Ù«««ûýLÓ u»Ý¡†aôBôl@¶bÕŒ3ü–ڬѴ&MôE•cùm`–óÓ3(±€Jöþ+ðo% Û*‡;{-BËZu>†Ê_ºl}‡¢z@†ÒÊŸ,1ÕMJyÆŸãдo´ÑhÚ0BˆH`ʆԃŚëMѽŽ×À¨YT‰J½ÍjpÌpTÙD0¾Ë¤2¥”|loIDFF†]g{h: ÖÄDªÜÊ2z ØìoK]¨ý,y•bam^|OJYà·µ2ÖÊÅÓ¨²Ð%RÊf'G„‹pëGjbÅfý\¼éÏËŽwP"¥\ê¯qhÚ?ºD£iƒXMšÓP«"¸Èm©rëaj6U¢œNv7äñxò€Â:=c­¿?¿–kZÿNyÖŸ6‡”Ò#„8 †`%³[“fƒ0›ÍÖðx<ž3¨Em®i„ MÁúŸ‚j$õ®z¼'¥Ü߯k OJ|¼#¥Ìiæø`à-”øðæx?K>“RêæoæÒD–ÇvÔûÍï+uRÌÿ›+å¢ï¡Ü­üÞ‡Ò!Rìvûí&L°…‡‡ãr¹Ø¿ÿ¨¼¼¼Q@…b;Ê=õYÞ¢Ÿã­ÌA”!„èêp8b Ãd†ˆˆˆ0ÃÂÂìn·[yΞ=›&„xCJyÀ߃ִ-tˆFÓ°¬uïEÙÏJ`'ðñ5.ÙßÌëÀÝ(ËNø§”2·™ãû£ê¸G£šÐïG5¬Ý÷woÆýJ£Ñ\AÑÕãomª>¶·•Ò!ÄXT¹ÕmÖ¦|à;RÊü7ª–Ea·Ûí?˜5kVàm·ÝVoßåË—Ù±c[¶lqWUU¦i¦i~*¥\ë§áÞ2¬~–A@‚Ýnív» q1Â+¢¢¢°Û¯Ìk›¦ÉÇ̶mÛ.ÖÔÔüÞo×´I´Ñhüˆ%&[ T-÷j)å¡VzíûP7Tsc“ËþVùLJ@ P Ü%¥Üe•o½‰2-â~¥Ñt&„½PÂc$WBw£Ì/ùqhµXÍÈ¿æJŠùTùÕ_ü°ÞÒ!ÆÞõ£ýÈæt:}cš&û÷ïgݺuœ8qBÚl¶ƒgËõ$ ·¬ï‰aN§3Ùív6 ÃˆŠŠ2ãââìÆ £wïÞÍžéÒ%~ñ‹_üµ-ØAkÚºK£ñBˆ”ˆ´6íF¹N]·Gü ¼¶ µz‡*£úGs¥^Bˆdà} *[àNï’ºõð->4šÇÊú™‚*‡´¡V÷¤”çü96/uR̆j’6QÁ¢?è å—Báp8&¤¦¦6)> à ..ޏ¸8ŠŠŠÄÖ­[‡äååE;Γ555[¼¶`ÐBˆP‡Ãñ°”²{RR’1b„ˆŠŠÂét6›ÅT—nݺѷo_÷éÓ§½W  ˆFã„#€Ù¨ð¾jT¯Ç­ôÚ ÅG³õ¹–/ý*ÔÃÆ`fà «Tì¿ZlÐMFÑÕS•Ì•ïå`£”²Äok€õYð<Ê… ÔçÁ·ë†”v¢=OHJJÊ5Ÿ0hÐ  dœ={–ÌÌÌþYYY÷ !N !Þi««Bˆ~†a<™˜˜hÌž=ÛhhxxíÄÇÇÛ·oß‹ê[Òh]‚¥Ñ´*VhØ]¨NP¹«¤”ZéõëŠ`¥”ò`3ÇÏ–¡Â×s;Kx˜FÓÒXÁž©(»mïtúTˆ`[°\@ üxÀÚtø)°´³%b;ÎÇÝÿýõV.]º„atíÚõª×¸téï¾û®¹wï^išËÚ’Èôât:Ž1"â+_ùŠíêG7OQQ¦iš¿éˆnhšC¯€h4­„•ÖýªŒÉ2Q3œ­bŸiÕòÞKý²«æÄÇw€ß£zS^žh Ž;M{§NzùÔ*(Àq`KK»Þ]uR̈²Øît)æuBôO˜0¡6€ÕårñÆo°oß> à &&†{ž={6ynݺñ•¯|Åøç?ÿÉîÝ»Bü±­ 9Ç1vìØ›‘‘‘Øívér¹†ûnÅ55íŸk®ãÓh47Ž"XŒeÀr)åºVsQ¡XnàïM¥ ů€?¢>#žækñ¡ÑÜB›b ðm”­nà4ðÔjB[³Q‹?E‰ Àh)åw:£ø°Ùl㣢¢Ì°°°Úmü1§Nâ‘GaÖ¬Yœ8q‚W^yÓl^O†ÁÌ™3 Ã0º¢ò4Ú‡ã‰'|î+**âý÷ßçí·ßæðáÃW½–a >\Øl¶¡·zœšö‹^ÑhZëÁW²=ޠܦÊ[y ÷¢Ä‡‡æÅ‡ø°Õû3)å´ÒP5š‰Uú˜€r¶òN{ÓËw·¥Ùo!D,ð?ÀÖ¦bà9)å ÿÊÿ!º†‘8eÊ”ÚUK—.ñé§Ÿòo|¯(éÓ§Ë–-£¢¢‚nݺ5{M‡Ãá]lÙÑ_?ÕÕÕyyyy)“&Mª÷œ¸yófÖ®]Kpp0N§“]»v1þ|†m^[ >ÜÈËË.„m½ù^Ó:h¢Ñ´Vcé}¨Ù-‰òïÿ°56ꈑ(ññF3âÃ0xªÔb¡”ò•Ö«FÓѰ,ªG &!¼~¥eÀÚžðè…²Ñý:êÙ øð[]·@rÏž=eÝíÌÌLbbb¨»"ŒÝnçZš¶÷ïßOUU•@9 ¶5 ‹ŠŠ&TWW×Þ‹ÛífÆ Lœ8‘3f`|ðëÖ­»ª6ln·;Eõi:9ºK£i„§P⣠õàÿŸÅGs+½P⣸[‹æÆ±rs¾†jÜîz _üIJ¹³­ˆ!„!„˜ ü6J|¼ÄK)®ÅGmð`ʤI“송›\.YYYœ9s†;wâv«è“={öCs½^6oÞìBdK)+[ônŒ£†aÔÖn¨©©Áår‘ššŠ÷ß!--ââbΞ= ¨ü“’’Ž?^ïbݺu#44Ô è2,  W@4š[Žb$*”ÏœA‰VÍÇh2جծõ ´õÅpe³ûykU£éH!b€©@„µé2Ê~4«52~®!D:ðTyÀÀw¥”ü7ª6ÉH»Ýî=ztí§Óɼyóضm«V­bíÚµ¤¤¤••Åý÷ßÕ –””PTTdÚ¤…±”Ò´Ûí‡óóó‡ÅÇÇ €.]ºÌ… j›ì»téÂàÁƒÙ´i\¼x‘#FðØcÕ»f||¼ýܹs±¨ÒCM'G æa•[¤£ú=öï´öC‡%>îáJÂù?šqÀǨ‡¥#¨€Á6Ó«Ñ´¬UÏiÀ`k“ ȶµµUK$ý‚+¶ºçPÁ‚>ÅüF°‚†«QQQDEEaå{°eË\.{öì!$$„ÐÐÐ&¯¹uëVÓápq¹\m6¼ÕãñìÏÏÏ6M³vågÈ!¾}ûÈÏÏçèÑ£:tˆ^½z‘Àˆ#4hP£ë 6ŒM›6… !ºH)/·öýhÚZ€h4·ËVs.‹ê÷ØŽòòoÕf»ët»JF­|ôrPâC׿j4×µ‚˜ ´6ÕŸÛ¥”þ—/„Ý€ŸßPc}øO)åyŽ­­"„ˆ6 £÷¸qãDSÇôîݛٳg“žžÎŽ;ÈÌÌd×®]ÄÄÄ––FTTT½ã/]ºDNNŽ0Ms[‹ßÀÍq ¼¼ÜvúôéZ15lØ0V­Zņ p:ÄÄÄ0kÖ,bccéÑ£G퉥¥¥¸\."##k·EFFât:ͪªª!¨ :M'F æ&BtÂPý«¥”¹~Çõ¸]MBÕy{ÓÍï”Ržm­±j4í!DJxx§zkPï¥í­érw-X«³¿ú[›×£Ê­öøm`í‡Ã1!!!AöèÑ£Iâ¥K—.Lš4‰ &°ÿ~6mÚDqqq#’™™‰Íf;gšæÕ=lýˆ”ò’Óé<›ŸŸß§®IMM%66–Aƒa·7~ŒÜ¹s'«W¯fòäÉõˆ×ŽwÏž=ÃФӣˆFsXe]‹¨dqßæé-;ê;¹–†óiÀ;@0°˜-¥¼ÔZcÕhÚ3BˆÁ(á1ØÚäæŠðhsï#!Ä8T¦ÏxkÓ”­î?ü7ªö¢aQ“&Mª<èñx¨mÄnˆaÄÅÅ×(Äårñé§Ÿzjjj¶µ;Úššš¼¼¼¼ñS¦L±ƒj&Ÿ9s¦Ïc].ï¿ÿ>;vì`òäÉL™2¥Ñ1Ç7öîÝ;LÛñj´Ñhn«â>Ôûè$𺔲ÌãÀL`*a}US}Bˆ9À¨`±÷t-®Fsu„‘À$`˜µÉd›Ûb0Ÿ"ø%0•ATüø¥”²ÚŸck/Øl¶ÔšaaaµÙï¼ó»víT#z```íßuÿÛét’˜˜Øhõc÷îݸÝîTÃ{àÀ±cÇ&ÖµãõEii)¯½ö§N"==éÓ§ûÞ–Rú\ÚB< ,G½ïW¢ÓÍ5š«Ò…GÊN÷'¨UNxøW)e©?ÇÖžBt1 #qÒ¤I¶ºÛ/\¸@pp0sçÎÅ0 ªªª¨ªªâÂ… lÚ´‰ÄÄD\..\ {÷îõ®iš&[·nuŸ¶£fÿbËŽ×ïóoÉÕ!Cˆ‰‰¡¸¸¸É‹uíÚ•ÐÐPOIII Z€tj´Ñh®NWŸký¸”œŒC5¾ÿSJésVMñmTº±þøº”ÒÓj£ÔhÚBˆÀdê =À¦¶Ø°m}6=Œ ôÞoFõydûm`헱ݻwgøðáõ6>þøã¼ôÒK¬]»–E‹Õ¦oݺ•þýûóÐC5YšuàÀΟ?o˜¦¹£ÅG‹°ìx óòòbãããëÝXÝ’«iÓ¦1uêTJJJÈÈÈÀår5™…o?sæL*SÓIÑA„Í5"„°£J®& ø7Yá‚~BˆéuÆò~SïBˆÏ£ÄÇ_€¯iñ¡ÑøF1@ñ°%><(—¸¿H)ßn£âc*[áU”ø(¦jñqý!lv»=%--ÍÞPL8Nüq‚ƒƒY²d çÏŸÇ4M>ýôS&OžÜ¤øØ¼y³G‘ÓÖL ®†Çã)ÈËË3ëö³œ>}š¿üå/:tˆo|ãLŸ>Ã0 ÃétRTTÔäõ† †Çãéo­Öi:)zD£¹„]PÍæƒQ$M®6´ÒxÒPe!X#¥l4£f͈þ xÆÚôRÊÿlµAj4íËPbW’š½Âc‹”ò‚ßÖ –ׯPy¸„êûøC[ËigŒ4 # nð`]œN'óçÏgùòå,]º”””Ün7#GŽlò‚¥¥¥>|Ø ^…•••¶ÒÒRÂÂÂ(..æÔ©SÄÄÄ••EPPPíŸ^½z‘Mpp0AAAtíÚµž[VDD„׎7šöÓ £¹Åh¢Ñ\Ë;ÿ1 P…J÷›}¢Õ’fý¸ÎWj¹%>þ€òû—¨úïßµÚ 5šv‚%<&Ò¸Ôj³”òœßÖ Bˆ`àÀQ†Þ>gt–ÏÍÓTð`]xâ‰'xñÅY³f Ó¦MóiIëÅ ,r¹\í®GJYát:Oççç÷ó ØØXîºë..^¼Hee%'Nœ ¼¼œòòr*++9zôhm³~JJ wß}wíõ,—0‘››; -@:-Z€h4Í „è Ìz¢lv_õg#§"ø²õãz)åvÇØ€¥ÀÔÃÔ×¥”ÿÛjƒÔhÚV€àT®ôKx…Ç–¶š‰ceýÌ~xc¶×ß—Ræøm`!ÄÃ0ú¤¤¤\5÷ÃétòÄOðÒK/‘••Ebb¢ÏôóŠŠ rrrp»Ým=x°I,;Þ^S§NµÃ•Ì“¦¨®®®$¾>|¸ñÅ_h;ÞNŒ M!ú¢V>ºç—ý9#*„øWÄÇF)åVÇ8×P½*nà«RÊ­7J¦íb­ C5—GX›Ý¨R«6éjåE‘޲ÑM´6íþMçyÜZÇ„#FÔ <}ú4}ô………¸\.zõêEBB©©©tëÖ­¶1=##ƒ§žzо}ûÖ»fff&Bˆ À¡Ö¾Ÿ[HáñãÇ'_¾|™.]º\õà€€èÝ»·Ïý–¯ŽßÚ¡jÚZ€h4>B„£fƒ€ÓÀ †Œ !F³QuÞ[¥”›}¼²®–R¾ÝªÕhÚ ÖÊA<ªÇ£Ÿµ¹ øI[n B ~Žêó8‡Zùƒ”Òå·u@„½!&L¨^W§––†a:tˆmÛ¶‘™™É=÷ÜÃèÑ£yüñÇyýõ× ®wM—ËEfff» l†ã†a¸ šêuq¹\äää°oß>Μ9ƒiš„‡‡“ššÚ(¥K—.„……yŽ?>-@:%Z€h:Ö,g²ÓéŒöx<¦Çã)ö^kæ…•tü0€ú`|UJYÙR㽆ñÄsE|dJ)×û8¦;°åŠUÌ‘RnlÕj4m «1ÕãክBÙgÚ–C8­ØŸ¡Ü¸ì(Áô'à¿ÚjS|{Çf³¥0ÀYûl´jÕ*ÆÇŒ3j›4ieee¬^½š7ß|§ÓI||<=öX#¬v<èËŽ÷@^^Þˆ‘#G6²ú***âµ×^ãâÅ‹ôïߟHqq1K—.eΜ9ÜvÛmõΉ·Ÿ:u*ØÔJ·¡iCh¢éP!„Íf›ëp8F$''ÛÜn·ÌÎÎîv»Ó…+¥”M'$Q;Ûøê½qÕpî·YF!D4p/Ê2;øØÇ1ÝT©Ø )åg­9N¦-a ` ÐËÚ\ d¡„G‹;DY+’‹ÇÜnw„ÍfûØív?'¥Üy•óºßE5˜÷°6¿ üPJÙžKxÚ4Vðà¨)S¦Ô>•””pêÔ)ž|òÉFÇ÷èуG}”W_}•÷Þ{¸¸¸FâÃ<èv»?í¡¯–oœišõîõìÙ³,[¶Œ~ýú1oÞ<"##ë·wï^V®\ɰaÃèÙ³gíöaÆñÑGõBt•RV´ÚhÚ:DÓa°ÄÇ=‡cÄSO=e›9s&wß}·xî¹çlcÇŽ 2 c¡"¡§ q IDAT™óG¢ÄÇ~àu?‹H”õ¯•¶¾ºá¾¢WÄÇà->4!„Ó2jøJ¸÷*P3¬ÿ#¥ÜÔÒâCÑMñ¬Íf;ôÛÛo¿=rÑ¢EÆÈ‘#Ó ÃÈBÜÕÄy†âÔ{ý(ñ±˜"¥|@‹'988¸^ðà‰'èÓ§O“z†a0gÎ.\¸ÀéÓ§í÷¢Jý:…UUUFIII½6l OŸ>,Z´¨‘øˆ'66¶ÖËKXXAAA º%­i›èM‡À³GÂâÅ‹muHìv;sæÌ1BCCY½zõ}B£ahŸ%Læ¢DyðŽ”ÒÄOÔéAq¢ÄÐ[ ÇSG|ÜœÒu蘦3b­6ŒÆ]­Í€íÀn)¥»ÆÐ ø›Íöý   Ç´iÓ’““k­Y‡ bëÓ§±aÆ!†I)×9w*Ï#ÞÚtxXÙÎûÚMrîܹfS½»uë†aÔ éó²uëVâ‹¶Üct=H)+Ngi~~~ÿˆˆˆÚíGŽáÎ;ï$  ÉsÈ‘#Gêm³ìxìììá€Ï ]MÇE¯€hÚ=–ø˜i³ÙF-Z´Èæõ)oÈm·ÝÆÜ¹s…a÷!’êœ_W|ìF… úS|ôAõ þÑ0¹¼ø8ܩҦ³!„BÌ@•,¥¡ÄÇy`-ðg)åç-->„¡Bˆß†QܳgÏgï½÷Þàþð‡)))r!¦N*"##ív»ýëܱBˆ À»(ñqx!¥|]‹V#Á0ŒÀ1cÆÔÛÀÛo¿íS`;v §ÓÙÈùª´´”ƒ§=6IMMM~^^^£÷T```³ç]¸pÁgJüðáà !DŒe¡éDèM»Æ3l6ÛèE‹ÙêÎÊøÂú‚1V­Zu·Â\æŠøØ¼ëÏ/}KXÌ‚Q ð+>@ù·_­®\£éH!úã‘\™H; ||ÑBˆ†aü«a‹{÷î-ÓÒÒ’’’|>dÕ9‡9sæ8ÿô§?ÍB¼ ÌD™K¸€%ÀOuƒyëãp8RSRR0kÖ,Þ|óM*++™3gN=[ÙË—/³zõjÆ×HlZÁƒG].WG †O(--e×®]ÜyçöÅÄÄxíx#€c-8nMC M»Æn·§†1fÑ¢E6_µ§¾3f v»]üýï¿ËšÕ¨Zë÷ü,>º¡Â{§Pî[Õ ŽÑâCÓi©“Z>õ¾8 l—Rîo¥1D†ñ}Ã0÷íÛל>}º3!!e¾wuÂÂÂˆŽŽ‡šeª 7Q æGZrÜß!†Ñ/55Õç/p̘1†ÁêÕ«ùýïOxx8ááá¸Ýn èÕ«Ó§O¯wNGl††aTŽ5 PIçË–-#&&¦žq¹\ìÞ½›µk×Ò«W/®0²ãˆˆð;v,-@:Z€hÚ-‡#¿`ÁãZŇ—Q£Fa†X¹r%¦iáñÄ•Äõs¨ÐÃÊÇô>BÕºŸFõ|èºYM‡¦‰ð@  Â[%C@o³ÙžB<áž:uª#..uûí·³dÉ€¹RÊwné@5×…Íf›P/x0''§Ó‰÷÷;zôhbccÙ±cÌäÉ“?~|£ÕO?ý!ÄE”“b‡BJ)ívûýû÷Ç5ÊˆŠŠ"--åË—Ó¯_?úôéCyy9'Ož¤ªªŠaÆñàƒ6úwòg?yòd ­ã;Z€hÚ%‡c:ºpáB£aÀ‘Ûíæðáø\.bbbšlŒó†)­\¹r išãPÙ­Ž"ÕpÞ(ÃGè¡¢'J|$£ÄÇt)e»ö•×hšCᾄrx ±6»P¥’ŸH)ËZi£dzBˆÃÃÃÝ_þò—èèhßɨYßC‡áp8ˆŠŠòY’5pà@ ä:vìØ\@ ?aõÛÅÔ <~ü8«V­bîܹõŽíÒ¥ “&MbÒ¤IÍ^Óív{ƒ·vÔËŽwD];ÞéÓ§CVVgΜÁét’œœLbb¢Og¬ºÄÆÆòÑGõBtóg௦uÑDÓîp8Ó€ ¾ÄGYY¯¼ò ÅÅ*î£W¯^ÌŸ?Ÿº®Xu±DˆX¹råBˆêÖnä¶ò ÂQv¡/7¬B„ šjµøÐtx„]Q%†c.ÖærÔÁŽÖ BL°Ûíÿ.„¸}È!îéÓ§‘‘‘M .°yófvî܉—ËÅ€X¼x1‡£ÑñéééÎÿû¿ÿ{TñS]~ål6[Jxxx½àÁÕ«W“ššŠ·¼T¯Gff&åååŒ1¢É^PÁƒ.—ËMÇvu*t¹\ÆñãÇ뉋Aƒ1hРF—””••ÅÅ‹‰‰‰aüøñõö‡††ì)//Få]i:Z€hÚBˆ4»Ý>qÁ‚ÄÇùóçÉÈÈ &&†… ráÂ^{í5^{í5¾óï4Ù:räH\.—XµjÕl!D©”²Äç·þ^*«`*åøU)å™Ç„ z>¼eWZ|h:$Bˆ>¨ÕŽ$®|72œÖ°ÒµÆ1Ñápü»"=::ÚsÇwˆðððÆ ¢›7oæã?&66–'Ÿ|’ÈÈH<È‹/¾È¦M›¸ýöÛMDD„ûĉ?¾ÞR÷£ñ<8ºnð`ii)'Ožä«_ýjíq—.]â…^ ¼¼œÀÀ@>ýôS&NœÈÌ™3}^wûöí&x°)¤”—NçÉ‚‚‚°«­n;vŒŒŒ ‚‚‚èÓ§kÖ¬Áív×[I2 ƒØØXÛîÝ»‡£H§AÛžiÚ ‡c²ÝnŸ<þ|#:º~n‘W|ÄÆÆrï½÷Ò¥K¸뮻8uêçÏŸoöÚcÆŒaÔ¨QÂáp4~Rh9¾ŒJkö ¬vOÔÝi‰oÏÇ)´øÐt@„…ßD­òÙàmà/RÊ­`¥+„³ÇnÃ06ÇÇÇOûÞ÷¾',X`÷yÎÉ“'Y¹r%ÇŽ£_¿~x<&NœX;#M\\yyyM¾î´iÓ¤”‹¬ÜMë2&88˜º}<ÅÅÅõ‚MÓäµ×^àé§Ÿæ¹çž#==ÌÌL._n¼wàÀNŸ>Ý‘‚›¤¦¦&oïÞ½õÞ—n·›Ô;.++‹àà`ž~úiž|òIæÍ›Çºu먮®ç¯Bll¬BDk;Þ΃þEkÚ‡c¢išióçÏ7|-Ÿ;wŽòòr.^¼XϯÝívãt:éÖ­ÛU_cÒ¤IFMMM”UÒ¢!&£f{%ð¶”²°Áþ^ÀzTJ)0M‹MGÁJ,+„ø°Õd¼(¥ü›”2§¥ít­ôñÙ‡#×0Œ·GøÌ3Ï=ô­a®ƒ—cÇŽ±bÅ þüç?cAAAÄÆÆÆÆõ{hkjjš g‹‹‹#44ÔcÆ÷oéišÅ ?yòäzÁƒAAAœ:uŠÒÒRLÓäý÷ß§¸¸˜yóæÑ³gOƇiš¸\®F×­<Øú”––Ú***j7Õ 6/ååå 8°ö}0|øpúôéþ}ûêgÙñ:€->rM›@—`iÚ<‡#Õ4Íi¾ÄGYYkÖ¬aîܹ̟?ŸW^y…W_}•G}”ŠŠ Ö¬YôiÓšL±­‹åï.PafÍ}ã!FS­?”Rîi°¿+°Õ€{ åvµ·¥Æ£Ñ´–ÕôÔª^µ¹؃j,?ÓÔ¹·x`žÃáø)‘’’b›|8 àùçŸ'88˜òòræÎKÝ|©3gÎÜhR«´´”ØPY4“†a\.((=z4€ÏïYÃ0p»ë/`†‡‡sâÄ ¼çÊ\‰ŒŒô EYkk:8Z€hÚ4‡c¼išéóæÍ3†^oߥK—Xºt)ááá8†ÊüùóY±b/¿ü2çÎcÈ!Wu-ñràÀ Ã0MÓ,o‰{B îF ÍRÊOìï¼L@õ|L•Rîkt!¦a•ÝFýàÀs(G«RʪV‡øŠÃáø@ÿÔÔTÇäÉ“ jòœ‚‚6nÜÈñãÇ;v,'Ož$00°žøHHH oß¾¼ñÆ\¼x‘þýûó­o}‹þýû7;¦øøxŒË—/Ï^¹ù»Ô\ ›Í“`4\2 ƒ¯~õ«ìÞ½›3gÎ0bĈFMÕ›6m"11±QOáöíÛM‡ÃQ܃}RÇŽwäèÑ£ €~ýúár¹(++£G€%••õå ¤ªªñ[>..Î~âĉ8Ô꿦ƒ£ˆ¦Í"„gÆ<òˆhè·ïýû÷硇ªý2ˆŽŽfÁ‚,_¾§ÓÉœ9sšM&öràÀV®\i†±ÎãñT^õ„»ŸHà~ÔØN)åÆûÀß4à"0C‹Í­@ $Ä™¦YSSS³ÈoI›PËá-UjX·Sõ(ÊÑ*¯5Ë­±_³Ùl?r:ݦL™âLIIi²}:!!!µç†Á”)SxóÍ7¹çž{¸í¶Û®il†a0bÄ{vvö]hÒ*x<ž²ÒÒR>žìv;cÇŽõyÞÖ­[)..æÁ¬·½¢¢‚Ý»wwÔàÁ&±ìx¼v¼ÄÄÄ™™ÉŒ3å×pe±ªªŠ~ýú5º^ll,k×®í-„è®W;>Z€hÚ$Bˆ/†1ãÁñññõöUTT°téR*++yà Œ¨¨(.\ȲeËX±b?þx³%XEEE¬X±Â¶ÖÔÔd¶Ðý„ x¿Á~XÌ*™:á\s3XÙ1 ‡c4Ð+22Ò=jÔ({yy¹Ü¶mÛ¨R‘[àuƒQeVcï“G Ê–ô3)å©[ýšÍŒ¥°Ðf³ý»Óé ž2eŠ355Õ§-.(ᑟŸÏºuë8{ö,))),\¸°Þ Ém·ÝÆæÍ›Ùºu+³gÏ®w~RRëׯçÈ‘#×,@BBB Ã0|{…kZ‚%%%·nÝ*'MštMö‡fݺuÌ›7®]ë· Ö <àûìËA·Ûm;v¬v¥hÚ´i,[¶Œ'Nàr¹8zô(óæÍ«wÒ}÷ÝçóbuìxÓ±mŒ5h¢iƒ!F†1ûÁu½ØáŠø âܹs¼ñÆ<üðÃV ÄÂ… Y¾|9/½ôR“"¤¨¨ˆ¥K—šÀg555-’Â*„èŽÀà­º3¿–ï ÀWPjH);ÕLšæÖ`=üÇ;Ž$ ß¾}=cÆŒ±'&&Ò³gOï›DÄÆÆŠŒŒŒñBˆ·ª¿H \ùn¹d»¤”-²²ØÄXúß³Ùlß ¶MŸ>=àK_ú6›Íçñ‡Ý»w³iÓ&Ξ=K·nÝøÑ~äs…Äét’ššÊ¦M›HKK«× `³Ù˜ù„gžy¦QûîÝ»±Ùl$&&ú|¸9iÒ$[à[_˜¦ÉóÏ?ï.--ýDJÙ)§­òâ¯ÿøÇ?¾&»{_”””°~ýz3//Ïcšæ mé5½¢i!â Ø;gΜ&ÅGPPP£•ŽèèèzÎW=öX#ÒðC±¤¤„¥K—z<ÏŽ–3Pâ£xÇøø6J||O‹MsX¥z‘6›-Án·2 Ã/FŽi :´Ñ àÕèÒ¥ qqqìÛ·/‘k¨]·DÏpÔjGÊÉ TZùnZ¹ÌªÁØîµÛíÏ>òÈ#öØØX{sÂË”’¬¬,ÆOÃÕÖ´´4^~ùeŽ9ÂàÁƒ}ž?qâD233ÉÌÌ$==½Þ¾ºö¢ _sïÞ½¬[·®úÔ©S6!Är)å¯LÓ>þšòmš#//W^y¥Æ4ÍßH)kšxý^¨LšÑ¨ŒPÿ_Ÿ‡ýýïe·Û_=zôƒ÷ÝwŸÏ&ÇÓ¨ÿÃãñð»ßýŽAƒñÐCÕÛ'¥äù矧{÷î<ñÄM¾î{ï½Ç®]»xöÙg›ý]˜¦INNëׯ¯>þ<À ¦iþ·”òĵߥ¦5°¬Ò*ìv»300PLœ8Ñ>nÜ8ºtéR{œiš,[¶ÌsäÈ‘}n·û-¿ ¸ `·ÛïŽMœ7ožï&+T%BAAùùù²  Àt»ÝÂf³¯©©ÉG•jžkÅ!kÚzDãW„q†aÜ?kÖ¬&Ålj'xúé§›ý‚4hP­ýîK/½ÄO<ÑhÖªŽøø¢…ÅG<0ÍúñCâã`J|üI‹ÖÇÊ¥x%<r\±ÒŸiÆVu¼ÃáH2 £GDD„9vìX[bbb³ÉÚ^Ο?O~~>§N"$$„¦,g‡ŠÓé4ªªª†¡Ê§¼¯oƒQºC¹²ÚqåNó¹”²ìfïóVaFÿ=zø|øÙ·oï¼óO?ýt½ƒæÆ…¤¥¥±råJŠ‹‹0Àw8óäÉ“iNz<rrrøøã«/]º$¥”ÿkšæ/¤”"+¢â]‚ßàv»÷”——^·n]êºuë‚£¢¢dTT” //Ï}üøqÓ4Í1/iOx<žì¼¼¼¤O>ù„1cÆàt:q¹\”””PPP@^^ž»¤¤Än·Û1M³Ì4Í€ƒ§Úßc×ø-@4~C1Ô0ŒfÍšeŒ?¾Þ¾êêj–/_@PP+V¬`Ñ¢Eìëâ!ùùùjàKKKëŠwZP| îE=°eJ)?k°:°õÞ{ øNKŒCsUº¢Jã>ŠPeDÝQ«V#Py-/¶æ€„=€¸€€€Q@XŸ>}<ÉÉɶ/}éKtë֭əź|þùçìØ±ƒââbL÷îÝÙ°a¹¹¹|ó›ßlô¾°Ûí$$$¹¹¹IÀ^˶vê!¬‡u˜;iÅìŽëÁ4Í“eee&WBk‰ŒŒ¤²²’O>ù„´´´zûzôè”ÒgÃøÈ‘#Y·n›6mjd#ê¥{÷îtïÞ½Ñöšš²²²Ø¸q£«ªªªÊãñüøs[mšÆX«}Ñ@ð…”Ò|*„È:thø±cǪªªŠPe‡çý7â¶”²HñΚ5kîX½zuÓéô¸\.›aÒf³°V9Ž»ÝîÇ€TQ›ûÑ´.Z€hü‚"Æ0Œ‡ï¸ãÑP|¸\.V¬Xiš,\¸òòr222ÈÈÈ`Ñ¢EÍ6ºùrß8}ú´W|ìiañÑ e¥kGÕÜ` ðêøïÀWý]ºÒ‰)B­>Õý÷?+„x è B„4ìÛ¹Õ•|?ÌápŒ"{÷îí=z´#))‰Þ½{_UtTWW³gÏòóóy衇8räçÎãÇ?þq­X?|ø0ìÝ»—‘#G6ºFRR’صkWŒUÅ•‡øK¨ÞŽmýÁÙãñ|°gÏžûî½÷^gC‘Õ­[7’““Ù¾};&LÀn·“——ÇÆ9}ú4QQQìÚµ‹éӧצ7ƒ LKKã­·Þ¢´´”ÐЫÇt¸\.>ÿüs6lØàr¹\—Ýn÷ßëPµvÃEàm ‹%>€Ú>‘CÖ¤”ÙBˆ=@—Ë ”›¦yÖãñÔ–v !N¢J^Ãb? UÓFÐDÓêxÅGzzº˜2eJ£nÑÒÒR.\H@@,^¼˜¥K—²téÒ«Šºœ>}š%K–xª««÷·°øD•ô¡>Xß®ûZBˆaÀ»¨™÷Pv»­fOª©O݇‹Û=Ö—d/Ôïò– +ñ~˜Óé]×6711‘AƒùNÈ«ƒÛífÿþýdgg“ŸŸOHHIIIx<’’’صk/^¬ QQQrâÄ Ÿ$**Š   Q^^͕ՎÀþvôÿè;.—ë›YS¦LáóÏ?çí·ß¦¤¤„²²2RSSkK5ó›ß°eËŸÁ‚7n¤¨¨¨YRYYÉöíÛÙ¶m[išgÜn÷ÏeRJ]bÒNBؤ”:ï±,æ›+/<ˆ 1hÒéÑDÓª!¢-ñaL:µžøp¹\|øá‡¤§§óä“OÖ;¯wïÞ,Z´ˆ¥K—Ö®„Ô­ôÅÙ³gÉÈÈðTWWx<ž7[jÉת—¿è ”¡²>êÎúôÞú ìlêXã_¬ÆôPT&Ë-kŠ´¤¢m6[‚aqN§SÄÆÆÉÉÉ"**ʸšm®išùä¹uëViš¥n·û·À-<Ú%#Û…뤔»ý=˜Ê~ 8êïhü š›Æª·—¥”UÍ7Ä0ŒG¦M›ÖH|€rÉÈÍÍåÈ‘#,\¸°Q¿GïÞ½­„4%BΞ=Ë’%K<—/_>àñxþÑÂõ¦ÓQº5(Ç«rï+™úk!pWÝýš6ÇD 7ðIsÿ/_ msG\\£G¾&Û\¯Uenn.¹¹¹˜¦Éˆ#˜7o•••¼öÚkÖ;Ç0 ÉÍÍ%))‰ììl²²²HHHhd5[—ÄÄD¶mÛÖ•åÑ®°>žî9{ö¬cÿþýÄÆÆ6:nêÔ©ìÞ½›îÝ»7jÈOMMeëÖ­lÛ¶;ï¼³Þ>_¿§ .°eË3++K†q¨¦¦æÿ¯¶£#McÆ¢V¨µxl!¤”ÇP!¥¶áÕÜBˆQ¨£pT© ÀGRÊÌ&ŽhÆü´´4Ûí·ßÞ¤IÿéÓ§k3?šj:/++###€§žzªQ9VYY/¼ð‚»¢¢â Çãù{K>Xÿ÷¢JWÞ’RϬîΤ”-5ÍÍ!„ˆC•]-¹ÑU*!Ä›Í6R‘ :TŽ3Æf9N]õüÒÒR²³³ÉÍÍ¥¼¼œØØX’’’¨+Z\.¿üå/™8q"Ó§O¯w~QQK–,Áét2lØ0RSS¹–Pµ_ÿú×î .|$¥Ìº‘ûnm¬ß××€Å@Ok›+,,ÌöíoÛgÿÌ믿Nqq1ßÿþ÷5äoÚ´  Q£z]Ο?϶mÛ<Ÿ}ö†aÔÔÔüxS÷rµo„a¨ÿ—.ÔB²åB ’€}×»'3 IDAT€ªéXèÍ2 ˆª÷”À ¦ôŠÔÔÔfÅ@ß¾}•Z5=zô`ñâÅdff6(–øð\¾|¹ÈZùhIñ̲~ÜÒ@| %>ÊZ|´]„P•Àk7">„A‡ã1Ã0ú<Ø=z´-!!ášls«««ÉÌÌ$77—3gÎÂ… xöÙg}ö;9NFŒAnnn#IHH±±±Ü}÷Ý×<þØØXÛçŸ>hÓD1åw7àyÀÿH)7•””ì=xð ÑÑÑÎ:u*Ï?ÿ<999›¥¥¥lÚ´É““cØl¶]ççn·ûÝ[tKÿ3Îú{‡-N(*SHr ¨šŽ‹ šåÔŒ¿)„MDaÆü‰'Úf̘QO|¸ÝnLÓl4+Ü£GBBB(..n²é¼G̘1£Þ6¯ø¨ªª:\SSóz ‹î¨¦sljpȨ’–¥”;Zj,š›Ãšýœ‡ú]½$¥§SSS9yò$/¾ø"ÕÕÕ¸\.^~ùeªªªX°`aaa<õÔS˜¦É’%K8ÞwÞÓ¥K—X²d‰§¢¢â˜µòÑÒ´w¢z_*×ë–ëXY+Pï­ßI)ÿÚÂcÑÜ Bˆ>(ña+¤”%7q-Ãív;{õêåsÿþýûÙ»wo£í‰‰‰TVVú IIIrùòeŸ×4 ƒ„„„Úõº„††Ò¿rs¯ÝQôðáÃæÍ°[…ÂBÜ)„X?E9ÌC­,FH)ç×-y¬‹”²Ð0ŒnذÁg]xx8)))z@ VxTgddȃnR&×ÔÔÜÙ^úb4ׇU*;ÆúñsŽ¥“áýÀ*„ „HB<)„èí×QiZ-@4-ŠaUgÎø®h‰ˆˆ`Á‚œÈ¬Y³|œUŸK—.±qãFrrrp¹\>M$Z!D!Äbà T‰çlÔwÔvTùÕ)å/¥”g¯v-Çó³8Ž?~ÕוR’——ÇŸÿüçꌌ ÏÁƒß’RƹÝîRÊ]7wWšvÀ(ñá{ÉLsK±Ê—½3&éÀ|`Ê}°ÝY€knÝ¢iQÜn÷®íÛ·§Ž3ÆîkÆ122’E‹±lÙ2ªªªøÁ~P+>¼ôèу§žzªÑv¯ø¸xñ≚ššWêfo´Bˆ~¨‡"€MRÊÂ:ûº£²>BQuÄêfÆ6Í@”=ÀÌ&Žyå[U¤”¦Óé,=zôh¸¯ægo@`Ã~ ·ÛMxx8{öìÁårÕë‡êÚµ+111dgg3vìXŸ¯ëm8ÏÍÍmätU÷urùòeöìÙÃÎ;ÝÇŽ³Ùl¶2Ó4×I)[ÝŸ_‘ |UÖè}“_^D¹‘]·yƒ”2Çáp¼÷þûïùÉ'Ÿtúêõ0M“/¾ø‚õë×WŸ={VK¥”¿v»ÝÚ&´ó`·>Ç ¯z¤æ¦B¤¢¬Ž»s¥ÔÓ¼zÚM®s¡ˆ¦¥É:{ölòÚµk»îºËçŠ[DDD­yå•Wê­€xiXW_QQAFF†çâÅ‹'[I|8P–‡€­uö¨šôà80[JYÑ’ãÑÜ4ÇPÉôÍQz=¬©©)øâ‹/úM:µÑçjÝ€ÀÐÐP>Lvv6{öìÁétâv»ÉËËkÔpž˜˜ÈªU«(++ó™yc÷ß?!!!WŸËå"//Ý»w{8`†qÈ1Mó Çsâzîõf±V—B quví^@•6VÞÌk¸Ýîoíß¼y³LKK«U ‡ììlÖ­[W}ñâEÓ4Í?£Ê%¯ë÷­iß!B€¯ !vI)?ô÷x:¨•ÁÑáÅeí×t"tˆæ¦±\°îæÿ³wæñQ•×ÿŸÌL†„}‘UÙTDEÜ÷ÚjµŠK[ý¶¶_m¿mÕ.Vmm«ßÚÕ¶?[ªVk¡úµ*îâ‚¢²†E0(û¶„=™åùýqž;¹™LH2IÈó~½Æ!÷Þ™û$ÎÜû|žsÎçÔÑÄÚð^öÙgËi§V§íL^^=öݺuK)BítþWÿäHD~ü(f8Ç«Ž‰MëºåþçèÛ·vmåþóV­ZE0¤ªªŠqãÆ1a† ÆÃ?Lvv6³gÏ®ñšÊÊJî½÷^Î>ûl¦OŸ~ÐcŠÇãlÚ´‰eË–Å?ùäâñxÔói,ûø¬…tÖBDÆ7¢µ7=íæJ`.ðcÌGÍ|¾‹322æM˜0!xâ‰'fäååñöÛoW–••UÅb±ßlßMGDÎD.1ÆÌoíñt¬èû:šúê_Œò§4;\ÄÑâc¶ŠÈÓ¯¿þúUÑh4cÖ¬Y)EÈ€=@<ûÝdRYYÉ#<+,,܉DžH“ø˜‚Šj=ì_~l¼É‰Ž‹1¦ 33sϪU«ŽHîÍš†õÑG%Ä„ß÷øãçå—_¦¼¼¼Æg>3jÔ(Ö¯_ßhâë nrrrâˆÈ¦X,¶ø4Ý©"ҭḘêÛµ ø+ðè¡Z7„1æ™±jÕª_._¾|f0ÜF‹Šú­õ‡-"@ݯÜ5;Mc Eäj‹ '>:N€8Ò‚1æsùç‚ ®ŠF£çœsNJÒ¯_?¾þõ¯óæ›oÔl¥PYYÉC=ËÏÏϷ⣲¥Ç-"ý³ìoøsäm§ë¿£!åŒ1ÿhéñ8Ú6‘H$géÒ¥gÌš5«ÖµÕ«×(**ªÕ›ãøã祗^bÍš5µê=.½ôÒF53ܽ{7kÖ¬1‹/Ž•””ÀÖH$²-þ]IFDÆ ¦7ž=X xmÒù\:Ä1æc ¶"ttdÆ-.õ.½Xò0*B:£÷σö w´œq¤ +Bž|ï½÷®‰Çã){ƒ€Š«¯¾ºÆ¶ÊÊJ~øáX~~~A$™cŒIíMÚŒØ~_@¿'ŸúÓClºÍóèôuàŽ–£]°º¨¨è¬;v0pàÀ;ü /ºè¢6°^ÁùªU«j Î;×y²““Ã’%K¢û÷ï¼H$² X‹ÅÒ^‡äkÐy#Õö¦ A=º Ÿ£µñ¾dÎz·…‘#s€£ÑÞY{€µÀ³Àe¨H«šˆÈ  ÈsZkŽ££áˆã‘ÉT;Byœ-"gÛ¿eŒY˜´cÌfyòý÷ߟ Ô)BüxâcÏž=i–3QW«RÔá HxÇ? C/œW9Ç+‡%#ÈÉÉé‘,@@#ï¼ó6l`Ĉ5ö]|ñÅdgg7xÏÁjÉ’%ÑmÛ¶C¡P+c±Xêf9-ŒMS¼-,÷ÜÅ*瀇Q×8WpèhulT{0P¬kåáÖˆÈ7ßa´Î£! V¼€ÓÑtÌÖ¤¶Ã‡£ÅqÄq¨ìÞ¯gÿöºvc¶XrM<]pA].¨êÜ3gΜ؞={ö[ñÑ$gœÆ""GSÐ~ÿ1Æ”øvßZ·–_rE¬é Œƃ#‘ˆ,_¾œóÎ;¯V³»$ú~$ Þ½ëîÁUYYÉÚµkY¹r¥ç`UFs€œªªª©ŸhÛ4ìà«Àñ¾]ëPÑñDczv4q GSÿñƘ:¯EމýXæŽZ™ üÈn@%c¶}*Ú‡©xØ“ºRú¸˜jk`GšpÄqHcv –³‡úú-"²jÑ¢E“”“µªª*{ì±ØÎ;¤Y|d—¢¹©Kü}Dä4àgöÇocV¦cL޶ƒ€‰ŠŽ‘h”Ì#l­¨¨8jË–-’Ü›´¦£K—.µ¶'Fùì³ÏX¹reì“O> Ò³:¯‰ÇãÛZ#¢`-§Ï@k;¾DuߎJà´¶ã­4Ž-€ºi­R9h¥åšáhW,E¯í®ÉdËr%úwþ1&Ñ…Õ›¿b)±éÏCÐï÷¦ÆØì‹H_´ÖlóÁÖ¼cêîöªïÝè ¦]u]ßD$lǵãH«Ë`{à G« "ÉñxœE‹ÅöïßÏå—_ðŠm}â£(‰<–æ¾ Í’ö¡õÞ˜û£Íé‚Àß1¥qLŽVDDBÀpàXûð+ˆšB°­* ‡Ã×äää 6lX­Ã!C†ÔyÏÁjÙ²eñ•+WÇcÖ6w ­`›ë!"Ç «˜×þܲeÀcÀÓ­ìbóº1æ­x~G;@D‚ƘµYubï±Ï£ëÿDEb¤Ü ô¦æ}· ÐxÕžë¿Ð9ÅgÀ;ÀWDäÛéÞÏuhÔôÿ|ÛjÕ€ØÎío¢×ú_ ³0Ú8u¬ï¸lÔÙo,^€Þ+n‘NƘêûÝ;*®¡#­ØÐêWÑ–ÀcLÔn™™9>###‰DöÆb±·Òù°«Ü7£§…Ƙ·|ûnîG O0Æä¦k\Žô!"GP-:S=é(Dí"×ê"’ …n™>}z³Î:+å1yyyäää““+))‘@ °9‰ä Q”ïoSöÆ{ZPîŒÆ€×€9À ­9>?v5s=škþêJ·ÕŸ6ép@¢^èZ xЙ"´,vb¾­‹9À‡èýõä…E¹µµ¿×sgÒ¾¡‹!#=A!" €™h¡¯'š½ðscÌO}Û3¨.xæE”Ed#pÀ3Ñþ,¨¨L5Ƭ¨ç÷¼¸ øš?+žëtAs 1¦¨¾¿WGÄ GZ‘KÐPeÀßÚRó!{Ñš†v;ÿ³7ɲŽ_‹€Là«Æ˜9­7JGsb…ïQh-Çh4õÎà”ëí#ï`&-"rlFFÆUW\q…Œ?€üü|V­ZÅŠ+¢{÷î „B¡¼H$²Mhµz›^øej”ož2Æln…¡Õ‹O€$ó)Z£õVŠ}Žˆˆ|ýŽ¿ê·Tw´¶žò{ÀåÔ¼®”wøÓ“Dä5´_Ooc̤÷™…F#¾mŒù³Ýæ ‘É vò¿]8îÞûÔ9)È`š¦õ•~Çõh¥òýAD¾Žr\hŒ™_ßûtD\ –#mØ|ʉèjȳmL|œl|Ù'>º áàL`®í›Zt å8 «{Dв\4µê»ecÖ‹Èü¹sçž¿páÂx<7yyy¡P(´ÏŠŽ5UUU|£Âæ[_Œ® ŸKõý ø7ð(ð~_)ö"3óÑ G74'|6ðŠˆœiŒy¯õ†çh ìôËhÒghºÎ±è÷Û‡¤ ›æv/p¯ˆôC%/A¯9ŠH¡¯ï84åê߀¨× iPÒö(°1Åyã"ò$ð#´~ã»ë:taéñ†>Ê>7TœF Ññ×SŒ»}®íÉîpÄ‘Dd:ÉxÓÓf:ŸÚpë…¨ãÆÚ¤ôªß£˜­hŽ©£a'#ƒQ±q êf’œZµ[š³æÂ³TD>ß±cÇxt²œ[UUµ·¹ÞÿP°ö˜×¢´ž¾]‹Ð‚ò¹M^éij‘êëŠÇS"ò6šÎq?jùéè@Ø è ôû^6¿ 9®ö£u° H_^‘7Ð…½ÿFk+AõÊI!(,«QA駬žëõãÀQÑñŽˆtE~¢.$oQª¡ë`'ßq©Æ½XŒŠ`GN€8Z»â|¶£8šÚ–‡¦áT¢mˆÈyÀ×Љã5m)bã¨ë5?€MÍ(‡AûÔxQŽíÌm?7ï¶ä9BD£QkÑt3mÀ“hώæ®Éó¸ˆü8ID:§ÙEÏÑ6(DWž;Cí¶¾"r´®ŽÖã94âß¶<ôZýíÆØî6„@|ID¾ßtF&b§}®í£^“b4b\iŒq ”‰ ŽÅ®>_Fµ­íÿµ¥”;¾Óíï{…bÖ©ë¯vûïLŠ®îŽ¶ƒ5Bu”£OÒ!¥hùçhùa?!‘NÀEÔN±ª^D…Ç+­å²•¶£‘¯îèÿGÇbÕ©/^Äsp•ˆ@#ñŸ¶ÊÈ:"’UO´éÔ±Ê ~¸]¬|ª™†ñwÔ™ê‹h$¤ ˜×ˆ×}ˆÎ\,"?¬«¯ˆ´½i›fŒù y†Ý1pÄÑÒœ‰®DWÿ:ØAi`jïW††J=~‹N^Ö?Mñ:G+c½×¶äZŽ8° ¯Z¥q_º±‚ú4ÚqÕ.VqÔ‘å ´°²]¤X*V|FÅV«tŠw´:{ÑèuÀ·-Ãn«Dª£åøˆ þ¼gŒ)‘šùg{ÌÓ¾ãƒ^·þ("1`ž×÷CDŽE;§?dŒÙzc˜ ü¸ uãzª1nTƘy¸xZD¾eŒÙeÇ28É3×þ3tçi¹xÃclj÷ÔØã{mÅ9°-ሣőQèÅÆ ¾ë­šûžŒ½zÍ‹ÞóÄ‘ˆœƒÚÆQk=—3Ü‘LtÓë@Þ#éªmr7v¤ÿoÖ ÊK±òw:üŒê«-­1¶–DDNVù6laèŸÐÏÇמc¹ˆ\fßû5 TDöÚq‡Ñ4­ï̸; Ά×Ñ"ˆHàFô ø1æVR-Dä$à| ø£íGÒ‰jÿï?c¾ÓšcìÈØ¤þhtc8‘òO&¢ÀªÓªö¤}­ˆ­s¹§PfRˆÞŸΑy˜Œ¦LlAEÇtT„m¦c¶µÞÛVt|x‹:‚æè/~oŒiõ:>ù_àÀˆTEÅvõýZô§º¹ìº´´c¯Qg F.ýhäia]éov¡éBô{Ý d¯E# %¾ãNzcžo` GÛ÷2èÿÿxŠcÎ"©æ)"rœÏ‘h™uÀK)ú˜tA¾Æ£Ÿ¹háü‚6˜ùÑ&pÄÑìØ|ü¯ýPKÓ'S}é[;¹ý6š~5ß³Än¿M¹ÚŒN¾È8Z–¤´ªa@vÒ!ù¨àøØÜÅŠí ;9<X]Fµ=emðõ$jqÝ!jDäz´SòñèÊdM»{ø_cL~ë®}""¿Gsñ·£)2[Ñ•à±è‚ÍÏ1¿ªûÒƒˆ\ƒÚHßâ¥Ç$íϾ~&ö£é7ÎHÄáh#8âhvDäb`šó×¶˜onó8¯GscŒ©‘cЋNÀ—Œ1϶Ú;¶QÕ0ªEG¯¤C*ÑþŸŸ×‘jqØ#"£QÛÜë©™bµvÌ9S¬éEDŽB6“S4„ëôm„i›@D~|‚.2®f G»ÄÕ€8š‡Šƒ:^µ9ña™hŸWûr›DÅÇ+N|´ v¿?Õ‚c(Zêá/߈öåè¹Ú"Ò-$¿ýNyìCW¦Ÿ0Æ$ûâ;MáxôûøZ²øÍ©jm·Qï+QGÁ®¨é3ÉÇEdÚ(r®=Ï×ÐëÀ+hŠÔà·©¾ó¶“ùPÔ•°ª¾›vs5šz3µc~™¤”D›6s Z«˜…ÖýÃóI½%‡ÃÑdœq4"Òµýx·-5ôcë<ÆØWØmg£N•hs$G3Ñ€[hz„'86c*Ò;¶ƒÍ¾ç£E .róÑBÇ—;Zê™#mxuTãDDS?dk-^ŽCÓµv "ãù©1æ^ßáSûPkä[Ð:®<Ô±jê:´Æ¾Ÿÿ]GQÃûíæóÐgÑkˆwì¡‹ITP ß¥¡5Åö¸±ö<ƒìqùö¸ï‹È׌1O4ô»;Ú>“’ý‰”[³Š@KÍkœq4 "¾„N.7ïµê€êçXtb·Û³Ã®Ê{9Íj«Â©½` ö=’ë8¼®±Q·ª¶%Kv24u_;·k-ZL>§£Ù;Z…•¨sÚ ´{ôÓháù§uï Í|Ù³&µ‘…§€Ÿ‰È»)ú(ý¸Ùó°=> Þ…ŠïW’Žÿh"g “ÿ‚6¼½Èk8hÏG…¼—úù­9ÃóŽÝ~„Ýþ7ùÀÝ ª‘?Rsñ¨MÕ[ìÕP¶2Ç¢)Ô?§qÖùãQašÖš&9éÇ}Ñ…ÏhÖÈÒ9–ÖÄ Gsq>/E‹`ÛTÑy^÷Õõöùj4Å¥4_ˆìêäPûFÝužàhSvÌ­…ˆ \ŽÖuLðíÊC›eÍ1Æä´ÂÐcL¥ˆ\ŠFÚfØÀ>y­—[é{Éé¨Û¾¾^…ÑhÈM¨ˆñóoO|Øã«€M"òp‰ˆôHZ•¾(G-ZëãvÔ îFãëvnSº^ôwº8ò-O|ØãöˆÈ·€¥è÷òÎÎב¸]LòR𲱂DDžf»:›Fósàd4ò–‡Fæ¾\'"7ÆÜКƒKN€8šŒ]½õÛܵõíAöy“Í]¾Çþ|ŸsÍiéLµàŠ®àø‰¡:^”cG¤iCDº_@o6³¨¶.žG£otÔºGëcŒYk-ÊO@£'¡Bd6ðe¹ÎóŒ=ütû¼ED&§x»]èJs2oÖqúÇ™¨áÂ_Dd˜=ÿ3©êR:éšWßäÊáH'¶öc‰}xùòßG›³ýYD^0Æ”¡QoК‹ºHµ*¾³ŽcŸE›H^‡ ¨ðn"×]•ßÜÀqP=îçê9¦[#Þ§Ãb•‹ÈwД¹/¿·éØG¡Í+÷Ù†Ä'ƘyÞë­åTôÿÙ´_XÄ·¿;j“¿'•¾]뇭ᨯÄŽétôþµ µ,¯ëŠ95¦ùx?yaÈö;ë†Ö>P‹ôAÀ;ƘÏêzocÌû)¶m‘ÑyÈdÀ ‡£.ì—úrÚG݇G7ôfVަÝa·ÿÖt ÎÙõa'žàŠºVù‡¡¶àè°…ã©°«ƒÓÑô¾/Q-zAóÓŸžnë‚ÝáMÍ~!" “Ʊ¨8ñ¾÷çØŸS‘*ú™2"jS·þ®‹Ö£\‹FT늚xTØ÷MN­ëXÐÚ•ºj«\:QãðÃúÙçþ¨ xÈ^o²Ûwó¬Pøê€æw@ü\D®ô9ûCh~Kêþª;ÿ IDATNâw¢‘„™À;ÔQ""ƒQã|¯Ý€ÔÂF©C•Ÿµ"òŤŠwßBþ m– Úc¬NR]ìs]ý°Â GS8]I*¡í×}xt²Ïèfê’òP«¨•±‚c0Õ‚c5o  7éÍÞî~:’‘ ¨è¸’êT?Лï¿ÐfhË[clG3àÕex 0WÙçãŒ1¯7Ó9þŽÖ_\ ¼ ~ÕPZ¢1&*"k"Ò»tÚUhwëqÎr½ÉxŽ’»“¶_:›]ŒŠO <ÜˆŠ‚;Ð{Ë¥èÊÿ«"rœm,¹Ä_-"·ûëK¬©À5èØ»u Ì÷*˜„:©e?ACòñÀÿ¡©|?C£n…ÀÙÀŸùv|É÷¿9h*Ú“@Q]ã©gœ]ì9nrÑHàa ŽCÂ6F;¶ßï#ï"DW)lGão2v…ç(Tt…Þ’Ç>j ×¾lŽúWìcŒoW!z#y É·îèÀØ>N€¹Éi”¶Öoê$å¢?‹N(("ÿNn†i£ä}1y1Œ÷ÐÚ±ÙÀ‘v[CéWs€ß ©bßL1–¸ý>ŽNö~%" R¤ìtº:ÃŒº±57“©®ûHNgë‚6³ÜlÞ("ýo ÿ¿àK¹ú›53y½/ÿÄcDäqôÿå¹ÀK¾÷ž…º¦ÝÓ€Uô¹è<åcŒß`æëöó|rÒñ¡iT÷cîòmÆÖ‹><šôº—Œ1ß­g)‘•hï¿ßë(ÙN€8;õú}´7«Boubš"®ûðö]Ñ9‚š‚£{ŠC ¨›:’ ;líÓ…è$iÕ)j•h!á<ÔéÇEŠí‰#ÑUÜ_[׫OÑÜöÑh*aðCoÂnŒÙ/"ףѽ5"ò(ºÚ Œ@ BÓb…x>¦·\ |hŒÉmäËD¿—ß°)\¯£×¶cщãh Ø³^D¾‹®ºçŠÈcèj{4*~p+ðÆŽ»ƒÐ_D ì¿;Q]ÏöojGúćÇi¨þœ½Œ~ÚÓþÄn{D\GMrºøÙP¯–Yöùï)öÍ¡¶¹Ä>§¼ž‹Ú©Ô ‡Ú3fšq0M%› ‰Èÿt#'@…]õ¸½ÁìÞnÝƘ2)DWFxÁ³£•‡Õlø ñ<Á1ˆÚÿâhþ6´xn› c‹ñ/D'EçPÝ$0ަ ÌC»(;'5G{e ðÔ4áÔz4Mæc´ORôcÌó"2 ÍÉÿ:šžEÓçþ¾{€e4œ¦òÕ‹\µRe,;ì{UúÆ‘ó€Ú±ŸawíB'°¾cÿ$"¹hÐwL4º³øÖ*vP^çʨîòQŠc·¤Øæ¥¥nLÞaŒ)‘=T×Q`ŒÙ*" €‹D¤—1¦À§xÏoµ\ ÇËûR½v˜}þPDꊬ$»>BêßµAŒ1 ×0› ý$Ú óào‡òží '@Ë)¨zj¹ÛUú:ª ÒÚuôC´Ëø@êO§ª@‹8=Á±Ã¹T5+:ÎEÍ.¡fSÅ%hzÕ¿2ÅÄáh“ØÈÆìÛIC&Ƙ¥ØÕc;A,Iuo°.Hó’·§8nš:Sß1‰q&m¯D£'w‹H6šv•rüƘ7€7ìÂZ °”žŽN¡1æ¿ylª¿¹÷·M¾GáÛžü¹y8­«û z-΢¦”IçKeÏ›j Þ¶;±M+S°-ŶÊÛ Ûƒç'èïwN€8ՈȪW”^1ÆìkÍñ4:‘,ã ÆZ ›#{$*8Ž´ä.ã µ[©{ÜMµñXÑq&z#¸í–ì±xM!hlZˆÃÑ.±“ùƒ}M›±“nl ¤½>îoð@GSÙjŸ‡'ï°‹i}€ähÊshøu¨¹mxüïƒ<_r¦C­1 Q‘ÀGVT§¯Ö2Ušôa‡ ŽFaS{¾ˆæ¯3Ƭhå!5…sìs.p–]ýZÔV&év<½P;Ã~öq$5'Â14½`;ÕéTíFTµ|uM_D#Y¾Ý›ÑbÛcê²u8Gý¼ƒF n‘_%Eâ¿F*^õ¿À¦MÏE Ç/¦O4Òåu´ÍWñµ °÷د¥8þ9ÔívtªÙ‘@=™#×Øçœ–8w[à Gc9](^hå±4•óìósèwà,`¤ˆ¼mCÿiÁ^½fK½©G ùÈÉĽhíÍNtEgw;MƒkuìŠÛ%¨è8‹šµ2Ÿ£¢ãß­´æp8‡¶1áïÑ þ+6åhZÓqZ›øç/}­/šCãšRz¼…Öò\+"Ÿ£f YhÐÐÇ¿„›IDžEM >CïÏ£Pð˜1æ?)^ÛXƉÈ?Ðzu¨ãdÔ®øtŽõÛ&¼»Á GƒXËÝIT[î¶[‹8釆^cèÅeê¿}pˆìC_¶Û1¥M<_&*2º£M{P-8zS]ÈœL½0ïBýÕwy)œCϽêrôÿ»_èmDo@óPw·6s8Û-:y1£MÕ9ˆÈïkc*"A»lßÑàÁ-€í=­Ø|Ö–þží€£sÏ[Qó•ÀWê0ñø]:H×ÙûÃ1&."_žGØ<7¶5¨Móܤãˆ\ÜFd.Kz˵ÔNå:XŠÐÔéûSìûøv}]Ô'Ä}oõaSS¾‰®,4ƼÕÊCjöbôo Ç3Ñn놆u'Rûf½(¶4÷4¹ŸCµ$ô?²Ñ”©,ê'†ÚDî³Op¸¾̓ˆôÎGE‡ß½ ô†2xÑ××á8,‘9hJ‰ŸJ`=ê.õpkOžEd€1ft#ßì5ÆÔ[¤Þ܈ÈíhWv} |ͳ¨ö«D¤:G¯·ÆÇZ¿w*ë«Á‘¾ÀIè=òs`e}ŸEŸ˜Ž¤J¿²M»É‹¤6ÛàD`* >BdW <•I5S8 ]4ÌGíé7%“FÎìýZD†¢‚ª'Z°¿*¹Îᎋ€8êÄ~i/A/;ÐüÍöŽç~•Èå·5¯ˆÈ[h˜uê*Õ½8ôlâ9+ÐUBûœŠ|t5Ò fFD¡«W_D}ÛýŽ'˨N¯ê+MŽÏÿ¢«õ™ÀHT”üÂþªî—¥…ß´òùËU¨xû1j“ZŽZ x]D&c>oÅñµ(ƘÂF§ý¶Éãüƒ8)ºX×þX]çµÂf±}xÔ;N+´Þh`Le¨™ÍAc{¤l>”×.8⨓ÐPs„ök¹›ÌPûœÊ‡¼ Xe^7Ü#ÐŽ®]QûÎ)ÞÓ "£½)yÏÅèʈ³¼M"2Í£½˜Bµõ¢AW¼žžMgÃÑFø…^DþŽöõø¡ˆü¦5¯QƘGZëÜÉ×€åI«ô¯‹H1*JnB»«;ŽFàˆ#%6måLûãk‡Qsµ!öysCÚ°ìÖ†Žs´"D»Ù_„ ¿­b->|Ï©¼Ûމ1f™ˆ¬E#ÂÇkEäè‚ËwÐNÔ£Æ#çcVXðï¡ÖÔPCŒWûý»h¤—PûÕá¨ÛÒù"2ÍW7p„C'{î÷Q!u¨†#^·íí‡øz‡£Câˆ#§¡ò 4t89$ßtm9]Õ¼må/"ßKµuâëMu-s8:"r0]ˆÙàÛÕí=Ö_è+"÷¡âã7Ƙïû¶ø5ð0Ûnþ;ú}ý ð»¤S_‡F3ê†þg4íõlcÌ›ö\?A¿ë“©íD4ÊœaŒñ÷{¸øð#ûðs!p™1æùÆR'6M÷.4MùÑC}‡£#∣"r$Z´ ðÒaØÔÎëìÛ;•£•°ÈOG'1çQ»cíZTp¼€v¬uEüGý\#"Óј£«Ñ¦²¿LQÿq[ —¡kQ·¾ä´ªß¡.‰WˆÈMÖ}è{ìuøˆµ¯=xª¾ûŠˆ AS+ç{âÀSnEÈ¢¤ãǠ׋Gýâþæ)¹ø2µÈM–ߣé[÷cV7ñ½Ž… Ž"BƒÀjcÌšVRK°XC[yvrrž}œNMX ,^Fír[§‡£…ø¦ïßeh´¿ ‘?Q´Ck—:x+9ÂhŒ‰‰È"´Úh´H»RDžn¶ÎP^Wçki\9Ï©ðÃûÛ1ú™bŸûX«Üd&"AcŒÿµMJ-‘»€ÿB{LÜÓ”÷r4"2]´êä¢õHÉŸGÀ ‡Ÿ3©îvþr+¥¥ðܯƶê(:86§ü4´àyh-hÑé+¤˜ø8Žƒâ\tòn°S-HávØÕ>ï­ã5{’Ž7£Q[Wx-jê± ±zï³/y‡<I›{Øç“©/ÉlBkGüѺ~Ÿ‘Û€»ÑZ“+Ý·õ±©º÷¢õ=~""² mf¸ 5@ø$ÝãsÔÆ (â; ­øO{îvÞïw版fõ-mÛ$j*rÏDS,¾Cb¨Uî‹À›Ô¶»t8‡N±1¦ÁÞ uà9Hõ«cÿûœ6ƘÅÖeë+v²~*ZØ~o#R&ë<Ÿu¾ë ø]í¼óþÂó`ïÝdDäV´‹õàRcLe/q´ 6Bw7jƒ´Û…BTUUÖ N¶ï5»±bXŽŠÞO1Kp¤ '@^êÕÅh¨z™1fC/iϼv4€4¿ÛºÃ9|±+Rgg3Ñî¸~>GÅÆëÀ›Æ˜âôŽÐáp4„1&ßvŸ,"Ý“,m3ÑÅ/­ËÏßш硩½††Ó¯rì±3R웎¦ûùÈ>Ÿ´¨‘o¡u- ‹ã…º6­üpÚAƒñ£ýˆË.»Œx<Ά X¹r%K—.eÙ²e¬[·Žh4 *nÏ·ÿ{æ×ºzžôàˆt‚Ø ]Iz½•ÇÒ¢Øüä'Ðô€àH³!"G£“†ÓQÁqTÒ!ùèªá¨àp ŽöÁ£ÀÏ€_‹È7}iZw¡6´¥(fÿðKôZ; ø 1õ[Ƙ"ò*¥þ¢1æYHXpÿ2ÅñëDd>pˆ|ø?Ê""PW¯7“_{0ˆÈM¨Àù¸À¥…¶6ïjàÀ`€®]»rË-·ðo|ƒpXëŒ9’‘#GrÅÚÞ¥¬¬Œ•+W’““êU«X¹r%7n$O|\&óEdгqoyÄe9tlDä(àûãS¡À×N”sQ~©1æ?­<¤v‰-ö›ÖrœŽ½ø¨@ónߤ:­Ê9V9iBDæ×ÓüÐë8öCàhcLªÔ§0Ú»ã44Ò±LD‹ÖOOU[b…·ÊüucL-«ZY`ŒíÛ6½vôÞv£×˜ÏÑ>%yƘ|Ç÷µã›ˆ^ÛW Q”aÀ ÀøàÖ­[çÕ8!™\¤#"ç¢÷Bàÿu¤b:»¢÷!ºböº‚·³uGÕv‘ègÃÿH®á¨DuÞF»$hŒ)Kç8‡Ãqxb=þ­óÈ=z4÷Üs3gάuü¡ÌgwîÜÉÓO?MçÎyðÁÙ·oÀ»Æ˜Ó›2vGøHEDQíŸþbGXÑ»-&,‘ËŒ1‹[yhiÇ:TBEÆ)öy‘th áxr|ì"‡ÃáhnDäà·hãLzôèÁm·ÝÆ 7Ü@0ØGS’ù -¸üí>¼:E‡Ãáp8š‰v˜?´˜üòË/çî»ï¦OŸ”‚MYYÏ<ó Ñh”N:QUUEff¦ÿ'@Ò€ “é@Ô:ñVK«bŒÙls‡®~\+"¿nÏN'"Ò ­Û8žjÁqÚ+™´°tVtc¹Q—Ãáp8ÅÖy| µÖ͘8q"¿úÕ¯˜ùä>þøc¢Ñ(Æb±ÙÙÙTVVúݰœYJp¤‘+€sЦ61´ëv.ð °¶-¤«ˆHT€¼Üž'ØÍ…1¦ø²ˆüø#0õz¿KDæO¡Õmrõ_Dú£E—£Ñï£ìÏu9¶ìG›/­°ÏËÏœC•Ãáp8Òˆœ¼dôïߟ;3Ë/¿i–sÄb1æÏŸÏþýû‰ÅbÄãqD„p8LEEápØ_Câ" iÀ fBD¾MýMâ"²Xƒ ï97…zKF‹Î Œ1kÒxÞ61æEy˜¾‹º¾Ü쑷ЂëeÀªt J銊"ï1Ä÷8èYÏË·kñ‰ ×Ãáp8m»€6È ‡Ã|ãßà»ßý.;§Ê >4òòòøðÃ)(( “™™I$!‰••Eyy¹ iƹ`5¶AÒ óàÁƒ¹á†عs'¹¹¹äææ²gÏžú^AsíרÇZÔpCK­¸‹HÈ<\ëš['3¸øÚ¨ÑOpm°¨°;`Þ¿ýczø~½í£—ïß½¾¨%æ çNÆ‹¶­E=ú×Ùj£;‡Ãáp´9Dä§À=¡Pˆçž{Ž“O>ùß+y>kŒaÉ’%lß¾ýû÷cŒ!‡)//' "TUU‡¹÷Þ{)--xÝsN“~1Gƒ¸Hóp¶ˆwΜ9LŸ>ŸŸOYY”””——Çš5kX²d «W¯öÔxM—ƒÖ xTØMþhÉ'ÀfÓDÕhŒ‰¢hGØt¤w€wDä¿ÐfVgSÑZŠþh„äØ4 )flö=o²Ï:š‹™Ãá8<°iÁ·£®ŒG[Ñ{ÞRÔi¯Cš¤t N¸òÊ+3f ¡Pc ÑhÓ¦(%%%¬X±‚­[·RYY‰1†@ @0¤²²’N:QY©·Íp8Lee¥?Ý˭̧'@š‡‘]ºtaÚ´iÄãqºtéBvv6ñx<ñ0Æ0kÖ,ŠŠŠ(++£¼¼œ¢¢" X²d .dݺuÞ—¢Z8<1é\%"âEI¼çƘ}iü};6õ±} "ÐÿïÃí£/Ú'£'åèî{.£æíÕEn€}¨ÀHõØŽŠNÉp8‡ ¶ÇÃ-¨ñ‡¿ÇÐHt±Ç;nzí]ŒŠ’eƘÆ4Vt´ú >œPZZJ4%33“ŒŒŒƒ#»wï&77—7& ËÃá0‘H„X,–¨ûðÒ°ªªªÈÊÊòÛðºzÈ4àHóp Àˆ#vîÈ犋ïåˆ~=wÜP¦œ:Š©ÓF’™$Ó»wozöì™L:•¯~õ«TTTPZZš&999¼õÖ[äææzÇvA#.'ù "UhõmµXúp“ä¡Q‡Ãáp4Ñe毿@ëØèÚµ+W_}5Gq[¶laÍš5¬^½ÚëJݸÀ>¼÷ØŽ.Ðàià1cL~šGóµÛõèÔ©S"‰DˆF£dee%~®‹={öðÑGQXX@0$##ƒŠŠ B¡ Áá¥ayû]$½8Ò<Œ8æ˜cø,w?ßE¯Þ]y{Á*æþó=Š” èݧG é˨±ƒ8á¤c˜2íX23ƒƒAºuëF—.]èÕ«WB˜L™2…믿žÊÊJŠ‹‹)**bß¾}äääðâ‹/’——ç!ø¾}¾5í‡Ãáp8êADN@SZ ƒÌž=›üàµzY½…¬ì0ç^4%q@EE„½{ Ù·§½»ðö›kxæÉ÷ˆTEÉ ‡èÕ» C‡÷cÌØALž2œãÆ…÷…BƒA²²²èÓ§Çç„Nছn" ±bÅ î¹ç6mÚºJäˆÃáp8Ú"2 ¸¸ØÛvÖYgq÷Ýwsì±ÇÖ*ÈÌÌdòäÉ5z@²jÕ*V®\ÉŠ+xûí·½¢á1¨ åì–þ]ÍNB€cj<<¼HH,£¼¼œÌÌLªªªèÙ³'‘H„ÌÌL^|ñEo¨ñdff&R®¢Ñ(±X,±Í;.ú£0.+ 8ÒD¬£Ô0ð ÍôèÑ™Êʨÿ8Žèד#úõÄWýúÒ’rvåígßÞäï-âùg—0çooa dwÓ¯_w†?‚ñ“†pÖyÇ f$T,£¢¢‚H$ÂäÉ“½/ŸSî‡ÃáhuD¤'ð3àØùÆØ±c¹çž{8í´ÓúýzôèÁŒ3˜1c‹/æÊ+¯¤¤¤àb Z“Gû!!@ªªªxá…>|8C† !+++q_””——‹Å())aРA¬^½šÍ›7$Rª’ ͽh‡—’‰DÈÎΦ¼¼œP(D,s4ãHÓ‚:Y1bĶlÚK·^])­ŒÔý)övƒôÜ—þƒû&vÅ"1öS°ïûŠùìÓ½,|ûSfž5†@ fSžx<ή]»ùŽ@A³ýf‡Ãáp$ÖÆükhG_ÐærwÜqW]uU|ÿCe×®]¼ýöÛŒ7Ž>ú ZÌîjAÚqP‘‘‘ÁСCyî¹ç(**⤓NbüøñôéÓ‡p8ŒwœG$¡¤¤„}ûÔƒ''"žàÈÌÌ$‹Õ¨ûƒ5" ^-ˆ'@Ò€ Mg„÷/²o_ }ö¦¼âÐbºôèB—]| ”(ãW—’••Iii)eee„Ãa²³³‰F£ˆˆ¿×ˆk.èp8ŽVAD¦¢éP“A'…7ß|3ßùÎwÈÎÎn–s¼öÚkäææÒ½{w‚ÁÓ˜æi›íH'  …˜œ=z B$‰$:™WUU‘‘‘Q£ÐÜ«ñHN¹òê>ü‘¯æ'@Ò‚ Mg@¯^½èÕKûÅ•–V28;LYEýn eǶ| î h=H¯^½_*ïá Ÿ4ËI‡Ãáh$¶£õ}ÀµX!pÎ9çð‹_ü‚!C†4Ë9ÊÊÊxê©§9ü‘H$9šâ&ŽíZEè±XŒ¬¬,ÆÇñÇOqq1›6mbáÂ…dff2hÐ FŒ‘ŸÆªªªŸ  –ÕnrT$‰D"$33Ó]q5 iÀ ¦“°à(((!##@0¦¼"µ®Iü‡:×k¢‘(» Ù½m¥Eeœ~æ(@]C¼Nž^Oc ùù‰¨³ ‡ÃáH "BûyüMƒbøðáÜ{|yæ™Ívžµk×&Ž Ú–5©G„ í™Õ¯_¿?ìÃöñŠÐ=üŽP(Ĉ#=z4`ûöí ×*¿ãUUUUbމDéUžV4MˆSBO„øÎï>GiÀ ¦SÃkǶ|B¡C”UDêSÇ);PʽEç'¾ ¡Pˆ±Ç©ã`AAÙÙÙ‰/Ù¾}ûØ¿¿ßÛ¥`9‡£Å‘€»°ý<²³³ùö·¿Í­·ÞJfff£Þ#•–ŸX,Æ«¯¾Ê¾}û,Ƙºr÷ÝÊu;@Dîüýï?6++‹[n¹…­[·&Baa!]»vj[òzõC‡MDJ¼ãüâÂ+4¯¬¬Lš{ÛªªªR§{5&'@Ò€ M§FM›ö‰A´Þý|G£q*KÊ©,.§¢¸"±º …j=l¸z¤{éWž½\~~¾?ýê°³Ù~3‡Ãáp8R "W’‘‘Á—¿üeî¼óNúöíÛÐKÍÎ;ùðÃ),,L¬t‡é›’á IDATB¡DúLvvvrc:7qlc>~øá‡O›8qbbâljÅb<öØc„B!N=õTLvvv­Èˆw¬ßËͨªªªQ÷ámó"%^SÂX,–èRVVVcˆiüstXœiÖ‚wT§`mÈÝE¸s'"±Ú 1qñª±Ê(ÑÊ*b•bUÕ"%  Pëu"ôëß-ñ³·²TQQAEEEtÓÐr’Ãáp8M@D²?2fÌ~ûÛßÖè×Ñ|üñÇlݺ•¢¢¢Äœ—ן‘‘A0L¤Òøp÷¿öÁ,Xðî‚ Î_Âñxœ`0È7¿ùM>ÿüs/^Ì¿þõ/ÆŽ›pÂêÔ©PÓ’×$ž¸ðê9<‘â¥Wù…«Wœî}޼BtW„ž^œiCÑÎã‰Èöû ƒÄÊ« &'‹Ä1‘X % ƒ@#ÂÔ]º… 3(++£ªª €¬¬,âñ8"ÂîÝ»½C]ý‡Ãáp8Zšs€^"œ9s1b„¿‡B“(..fñâÅäååQUU…71õ ½ %húŒwO´¸‰c;ÀöjyxYDÆ3ãñ8dee1fÌFMII [·n%77—÷Þ{!C†pÔQGÕpÂò"B4%;;;!L@Z`0˜¨õGEÂá0¥¥¥dddx"Ä}ŽÒ€ MãïÇ ?¿Œ@F€Xqe„íÏ}ä‘=½Øz*Þ³šsÄáp8ifèÂÛ¨Q£ˆD"‰¢poåùPضmëׯgëÖ­‰•m¾¾…;&V¶}¸ö‡ÚEèÞÿûáÇ3|øpJKKÙµk6l ¼¼œ©S§¯B¡Pâóá¥aƒÁZ‚# %ŠÛ#‘H ËqÍ,Ó€ McÀ€ES%%U„2Cõ¾¨qTÛc =ºwõVû… ”––bŒaïÞ½ÞnW€îp8Ž–&еkWÂápbòæ {«ÙÁ`0Ù¥*%ƶoßβeËMu@"_?ÙÙÈKŸ …B.Òþ©eÃëáE7âñ8¡Pˆ#<’Áƒ'"‰ý^FH²HÇã‰Ï‘·-Öªñ>SvN€¤'@šF ¬ÊÊAf¨Ž´ªCl‘tÌ ÅÅʼn°£W€žŸŸï¿À»ˆÃáp8ZšDó8?Þêr,###ƒX,F0¤¬¬ŒÎ;'Œ'œŠ6nÜÈâÅ‹‘/‡ßß½:Ù6Õ녕ԈРöG ú9ª¬¬¬ÑçÃÜ^4ÃÃ/R½ÏG(BDjWï=½m^SBïõ'@Ò€ M£F=»‹5úÑ”K` ‘2`  {Q¿]/ýjŸ1fwíW;‡ÃѬ$Òf|…Á ¼x<žH“ŠD"tîÜ™¢¢"B¡PÂÁê­·ÞbÛ¶m‰<~/}&##ƒp8Lyy9áp˜H$R£ÐØÛ–aq)Xí„ñ~žyæÊÊÊ8ýôÓÿ¶$\¤ýQ+ËÃE]ĺuëxòÉ' Lš4‰‰'Ò­[µ#¨¿='Ĩ¿ º7Wò÷ûðÌ üÍ ½m'@Ò€ ‡ˆµà Õ­[÷“Ù,õÕtëF„„j¯¨¨HXÑ% »ú‡Ãáp¤ƒ“Æ?þ˜ùóç3}útN8áŽ8∄]¼µ:sàÀDHAAA¢© ÍðV¤ýã²³³)++# & ½ eN€´?bÖ/^{ôèÁÔ©S9õÔS)..fݺu<ûì³dee1jÔ(Fމˆ$>_‘H$!8’S®¼ýž–?5Ë‹¨cü³Ed¨1fsëüI:N€:Cø" y%) бðÃrD¿.@µí®—¿‹Åòòò¼C]Äáp8é F È%—\´iÓX³f O>ù$Á`ñãÇ3zôhzõêEFFFÉeyyyÂ¥ÈëÉà9y9üÞþP(Dyy9YYY‰|}O„„ÃádÇ-—‚Õþ¨ñYòNb±X"oܸqL˜0ââb6lØPC|‰ÏŒçê¤ù뇒M ¼Ï[YYYBP2dÄÎ;‹ÈÉÆ˜éþƒtœ9tŽ-¢6lU‘8¡Fôõ8Öºââb:uꄈ(**ð;`9âp8ŽtP+m¦gÏžœrÊ)L›6ÂÂB>ûì3^zé%ºuëÆ°aÃ0`ݺuCDj¸ùÓbü.Fžå|,K¤\eff&jK¼HIFF†\.ÒþHY„žœÊ‹Å‘Š#F`Œ¡¬¬,q¬¿.H|>¼gÿgË‹¸Åb±Ä6¯Gˆ1†Î;ó½ï}¯oqqñ†Aƒ}¶cÇŽç€7wlG3àÈ¡3ਣŽJ¤DÝúÝlÛVÈG‹¶ðéº=(ªâஇµ£%ÔH§N…VÁ`üü|öîÝë/À[Û„ßÅáp8Žz‘©ÀQ@¤ž4z‚aܸqŒ?žüü|6mÚÄ’%K8î¸ãèׯ_Â:5##ƒÌÌÌDZL,K¤a%§ÊdeeQVV–¨ñRj’œµœiÔ(BOUCäýÛû¹ªª*ùò¶{õ~áꉿý®?5Ëûl…ÃáÄ¢.hzûرcéÞ½;—_~ù¹=77÷ö¹sç‹È«ÀKÀ‹Æ˜ýiøû¶8rèÔ°àõ8°_øâXŒCyy„•9»X¹ry»J‰ÇþÚØ»FTB¡Pâ‚‹Å(++ó§_í2ÆìkÒoãp8GˆÈ¬éÓ§¿9yòdžþy³yóæ:{7xÏ•••dee1vìXŽ?þx¢Ñ(eee‰ýžK–—†åïxî¥\ù‹Ó½.×Þj¶—ºå;· í”Tÿ®k_rÓÊ@ p íÔ©eeedff""5R³üé|ÞB2@aa!·ÞzklÖ¬YñãÇ3pà@z÷îÍm·ÝÖõž{î¹¼  àò ˜^½z­Ú¿ÿóÀ‹Àr÷ù;8œ9t 2$åNuep‰˜4¹ñxœíÛ‹Y¾l7[¶SVIù:? Ð©S ÆH„®}Xëšô›8‡ÃQ?# ĉ'žHqq±<ú裉{ÓâÅ‹ …B :4á„埋E£Ñε¿ =ÔJà ½Um Fo¡±/ ÀMþÚ')mxëŠ~¤Ú$ìwý]нZìììDú–ñGJ:uêDQQQ"kçΛŒ1Λ7OæÍ›wa(ºtêÔ©'M™2%cèСôîÝ›3Ïúh¦L™ÂùçŸÏÌ™3?~|â º"ráp€É“û0qb/âñ8[·”ðÉÚýìÊ« ¢Bs{ô Õz@ øbíܹÓÛδDdðð*°ÀSÚ¬¿¹Ãáp8:ƘJà ìÙ³çà;ބͳE=pà7näƒ>`ÿþýŒ5Š£>šž={&Ò«¼†ƒž«£¿·G²àðV«=£ŠŠŠÄq^£B_ ˆ í“F¡7´Ï"žp ƒ5GyyyÂÆ¹¢¢‚Î;'jм4¬úÚ4÷yÀ<ùjnnî4àü®]»^|òÉ':ñÄ9úè£éÞ½;—]vYàúë¯?£²²òŒåË—ß7iÒ¤-+V¬xÌó³æýÓµoœ9DŒ1Dä$àÅX,6zÑ¢E,Z´€¡C‡2sæLÎ9çN;í´TÍ’j1hp6eYŸôJ>ùä„ýçKü»°°x<Ξ={øïÿþo¶lÙ‚ ())ÜlU"²(ž3Æ8«B‡Ãáp4Ƙ˜ˆ|5'ñxœììlÆŒØ1c(..fÇŽ¬\¹’ŠŠ  ÄСCÉÎήÑP7$&€~G¢ŒŒŒ–¼~ç+ÿ6_ÄÝ×Ú']„îßçm÷ÒùüÝͽmþÏŒg|à³^¤¤±­Ö»öq»ˆõÆoœœ?qâÄsN9å”Ì#Fзo_Ž=öXþøÇ?Y¸pá="òŒ1f}süÑœiV„LÎ..oÞ¼™9sæ0gβ²²8餓8ûì³9ÿüóéß¿}ï@×®!N:©Wªп?RXXÈž={¹¯§žz*wÞy'•••|üñǼû÷Þ{¬Zµ cL&0Ù¾Å,`¾ˆ\ê¬ä‡Ãqˆ¨{Ò艅!C†0lØ0JJJسgOÂ2×{×½Ús1ò&ŠÞ½-95+¹™œçšeq÷´öIâ³”ØpiX uFþÞ^HÃJ¶ßõj"‘HBœÔ©÷0f+ºÀûˆtZ±bÅiÀ}úô¹tæÌ™ƒ§L™ÂsÏ= îOsxãH1ÆT//‹ÈHôCxº·¿¼¼œwß}—wß}—ÿøÇŒ9’3Ï<“iÓ¦1eÊ”dó:S¶<ŠŠŠˆD"‰ô+aéҥ̜9“p8ÌŒ3˜1cÛ·oçí·ßfÁ‚¼öÚkÞ—ñàNà®fú8‡£cÑ s‘÷s$! 2`À222(//OãM=!በ/ßëTío&WUUUËJÕâHû¤Î"ô† Ïý?{V»É½=<áÚ¹sçD–÷ÙòŽ|âšðY²sÂ×ìã9oÞ¼ó€έ´&N€4"Ò ø)šò0`7ß|3"›o¾Éûï¿O4%77—ÜÜ\þüç?Ó«W/N>ùdÎ8ã fΜI—.Úó£>RP Ú ¡P(‘Š•Ì Aƒ˜={6³gÏæý÷ßçÚk¯õR´®Æ ‡Ãáp)'[·n¥¤¤$Ñœ7¹ðÜ߳ÓèNí«{“BÏÅÈ«yô7“ó²¼”ß9œiŸÔY„žüs*â½ÎßLÐÿ™ñR®<«ÝòòòiÞç(‹%DHÿþý»¢Ùš\WdŒÉr›ú>‡#N€4¹ øÐ ++‹›o¾™ë¯¿>ѱõÜsÏåÁdîܹLŸ>¥K—RPP@AA/¿ü2/¿ü2@€ &púé§3eÊFò|ìØ±Ð/a§N())!++«†'ºG4eñâÅL:•7ÞxàhçYíp8ŽC Ö¤Ñëßñ‡?üÎ;sòÉ'3eʺwï^ã…þÜ}¯i¡7Qô&…^úLªº¯Q¡·rݫ֎V¥ÉEèÆ˜”Ÿ#¿¸ðL <ë5*ôšúÇ0}úô™óçωȧ"²®¤¤äóË/¿¼ªeÿ '@š€ˆ|xÀþ›‹.ºˆÿøÇ‰ ¦ŸN8Çœ£Ž:Šë¯¿ž­[·òÑG±råJ6oÞL,cÙ²e,[¦ºƒfúôéœzê©Lš4)ñå‰ÇãìÝ»—œœ@WŒŽ;î8òóóˆdggÓ¥K‚Á ›6mâñǧÿþ~«à*àÙ‰61Œ¥áÏåp8ŽÃƒZ“F€áÇóÈ#°oß>V­ZÅc=F·nÝ7n£FJ4{ó{ÅH$R# ËßÝ/8222j¤aùR°"tõíŽ&¡{ÿ®¨¨¨ÕñܳÞb°ç†å¯)ò¢#^ßÛð9."Ý)Ƙ)ÙÙÙñùóço5ƬÍÌÌ\{öÙg§N;qN€""2ø_€‰'òË_þ’N8;wÖ3{L:•3fðøãSVVÆ´iÓ¸ì²Ë¸âŠ+(,,dÙÿoïÞ££®ïü??ßÉdÈ I$„«„ÂrGTR¤‹@HñR)E«öçžn]iíÚ®¿ƒûûm•­ž=röwº®=eÕUÖKY±U#¨(?DnVä® @¸2¹Î|?¿?&ßï&Hµ¼çä“™of†I2¯ïçýy¿?ù„M›6Q\\LCC‡bÁ‚,X°ÀßȉDp‡U«VµÚ€>vìXÿë455QUUEuu5+W®¤¢¢‚^½zÑÔÔä×Þ5$&¹âƘrà8‰0¢MR""r>g}Óè½ ‡ÃäççsÝu×QQQÁîÝ»)**âꫯ¦OŸ>´¼mËÀá­¢´¬Í÷Ê´Z–aµ,©ñ~ƒÁ®ñxüccÌuÖÚÚ¯èy‘ ׿ýDçú\ËבWÎwæJ™µö¬eX^ijjò’’Ò*Yc Ï“‹Å —.]Zìm^Ù=sæLĽ ï—€“žžÎ›o¾I(”h™ë Â9›ù—á׿þ5 ,`Íš5Œ7Ž+®¸‚N:1fÌ®¾újâñ8{öìaÓ¦Mlß¾ŠŠ #û™FÍc=ö¹ËkjjX´hYYYD"Òg4ê©iqõУùã cL °[­âDDä\8}~Ëo£F⪫®Âu]¿¼7Ä›Óв|Æ !gŽ3Ïp×××ûeÇ¡Pˆo}ë[£vîܹÅó;àOÖÚƒÉ}Zä"\Ô&ô–¡{@¼×QËA•^™•·È»ž× Ë{½¥¤ü÷Ûá@ ðE-»Ò¼:Ò¹sçÆ¥K—îvD£Ñ]3gάjçóqÉP¹x 1ƒ# ‘ššŠã8tïÞS§NQSSC<Þ:§¥¥1oÞÏãê ä ""r6~iË›ÆÆÆFêêêZýNôˆw–Ú -‡ÉµìÕr˜\Ë2,1†Ÿÿüçôë×o µößׯ_ÿï<¼oß¾×€7UÖZÕñýœu?‘ç‹^_Þí¼ni-GË=^‡¬–¯#o´Ajj*[¶lñݯ_¿Sm½óÍ£†C#‘Ë–-;Çw¦¤¤ì(((8ˆdž“ÈE0‰¢Ó.;w&==Ýÿ\,#''‡ÜÜ\jjjˆF£D£Ñ–½Ê7nãÆcÿþý¬Y³Æ ëÖ­û\hIII¡Gäççså•WrÝu×ùFZŠÇã¼ñÆtîÜټ㵠ój½ZÀgçyxŸŸ\äS#""ùÚõ¦Ñ»mË’«3Û¦z¥2^VË Ä^ÛU¯¼Æ;îÒ¥K¹òÊ+éß¿?£Fb„ }RRRþ~ß¾}ÿ§?ý©Ñqœw­µoEÖÚ²/ýY’¶8ç ÈÙþ~¶Ïcp]·Õ,oOQË׉1Æ@X[[ë‡ÙwÞy‡¢¢"¼+??ÿøÅ>km®ã8¹®ëN\ºtiÔZ»ØY[[»cæÌ™u_x€KˆÈE°ÖZcL%íµÃ…Ä7P0ô§³†ÃaÂá0Ý»w§¶¶Ö$^éß¿?ýû÷çÎ;ï!"rúôi¬µ¤§§‰DÎÚÙª¥ÒÒR¶nÝJ$áôéÄâ†7áÓ;ƒTZZJqq±w“?Ÿå0.°¡ù›EDDä\Úô¦ñ‹ÞPž9½Ú+©òÊg¼Ž–ݰ¼z}oUÄkøÒÐÐ@QQÑÁ?þñK{ôèñ½ë®»®Çå—_NŸ>}ÈÌÌdöìÙ©sæÌ™^]]=}ÕªUö²Ë.+>tèÐ[@°ÖZ«Iê_s¶ámk…Ä Ø™¥yŽã|®µ³÷: ‡ÃTUUñ /°eËzõêuøÁ|¯ƒ×Nkmšã8#¬µ—G"‘øÒ¥K8޳µ  `]}o4 `Œé X%8 d—––žõºÞM¯×y8¦S§NäääPWW÷¹0‰Æddd|á@BÏêÕ«ýa†Ñh´Uïô´´4Y»v-ï¼óŽ·ºò°éŒÃÔ«5$GDDÚ MoÏõ9ïÍd,#%%ås³=ÇñGËŽEiiiD£QB¡®ëú«&MMMû¡ÖÚà§Æ˜o-Y²äÆ`0xóèÑ£¯;v¬3hÐ ºuëÆµ×^k F#öìÙóàâÅ‹OcÞ&FÞ°Ö¶¹GÚ­]›Ð!>Œ1­Už¹È+Ãò6§—””ðôÓOsòdâmÏUW]µñŸþéŸþ_jjj»‚¨µÖµÖ¾=}úô•EEEa×uaÀЦ¦¦Z@6kžr¾žæÒ+ àÓO?=ëõ½o×uýö¹¨S …B¤¥¥ùaäôéÓD£ÑÏ•_OUUÛ·o'55•'NøÓ?›ššüoºh4ʲeËØ±c‡w³÷€—Î<°Â&¦wŠˆˆ|‘vw.òJfâñx«éÕ-‡W†åmN¯««#‰P[[K0ôëþ›lÞ×)žž0Æd}ôÑGS€ïöíÛ÷ÆñãÇw1b½{÷¦[·nÌ™3'ýŸÿùŸgVVVÎ|ï½÷Ü®]»®­¬¬|D©Ö®/ã _‡lB÷.k¹RÖ²aWÎgŒaíÚµ¼üòËÞþÆÛo¿ýíY³fuİÀê@ ðrAAÁï‚éÓ§×[›?œ•+W†;àëüEPi»ß]ºuëF,£ªªªÀŽ;(,,äG?ú7Ýt“ßJðl¼«æ>Ó¤¥¥Ñ©S'"‘±XŒÆÆF?Œœ«“@qq1áp˜ÆÆFNJœ¨9³Kȉ'X²d ååå Àÿ><ËáRÑ&)i»v½iôþí­€x«ö-[òŸ&ç}Þ+1Zv/:çükm%°XdŒq,Xp5P‰Dn7nܨѣG›¼¼<²²²˜ÙÙÙ'æÌ™óÆðáÃ+Ûû ¬µÇy¹   ú|uâĉ5çùü%E¤ Œ1w7Œ1‚ÇœœœJKKyî¹ç(**bÅŠ¬X±‚ÌÌL~ðƒpÇwpÅWø·?ó›ðBŒ¿_¤sçÎD"B¡™™™Xk©ªªjU¦ÕÔÔıcÇèÔ©»wï&ûßt^w‡ÆÆF¶oßNQQ‘bއÎñðœ–gDDD¾@‡lB÷Êb€Víw½U oq("‹µzsélkq²®M›÷z|Ôü1דûÎ;ï…C† )ÌÏÏ>œž={’ŸŸ0Pùò´k?‘W9‹ÅÎÚÆÙqRRR8yò$O>ù$%%%\~ùå[zè¡÷ÃápG ®\S[[[¤y Fä<Œ1·˜÷ñm€G}”H$BEEÁ`_üâ<ôÐC¬X±‚ùóçsðàAžyæžyæ† ÆøCf̘AVVÖçŽ]WWGII =zô ‰øeZ¡Pˆôôt/È©S§hlläÈ‘#c8vì˜ßÍÊ;3äur¨««ãí·ßö§©OçÊdŒél­U*‘¶ðÛð^l–ëºÄb1¿ä*·:sí…‹p8ܪmª·Ä+ÃjѤå¢ÞHZkÏÏc‚»víº(ÌÌ̼%‰d¯^Ìq¥ÍªNÙ…®¨y—y €¼Ò>oM,c×®]<õÔSTWW“’’Òô½ï}ï½»ï¾{{Ü÷ðZaaá†8Ö%Gä,Œ1™$J®îô.ûö·¿ëº”””pÙe—‡©©©áرc 4ˆ… ÒØØÈ¢E‹øýïÏŽ;øÕ¯~Å#<ÂäÉ“™5k×_=ðßß8›7ofÛ¶mŒ=š‘#GÒµkWâñ85559r„H$BFF†ÿõ^|ñÅV‰¾eÉUEE‹-¢¹+WœÄró[|qyUPoti+ÿ÷JËV»üä@ U7¬–Ãä¼ÎFŽãø«"ÞJI‹¯ßî3ÙÖÚ&`eóÇœöOÚd-$ÊÙW®\ÉøñãÛ´ñÜãýÿ{Ã+íóBÈûï¿ÏÂ… q]—.]ºTüÃ?üÃcÆŒ)oï6Æœ^œ6mÚáöëReÚÚméRaŒùð{à2€ììlfÍšÅ/~ñ ºtéBMM ›6mâèÑ£äååѽ{w*++©««óÏÌäææ²}ûvþã?þƒ?ÿù¿;Þæææ2cÆ ¾ÿýïÓ¯_?¿·yii)›7oæäÉ“äååÑ·o_233 …BXk6lÅÅŬ^½ÚOø®ëúvïÞÍ«¯¾J]]$Î&ühKº? ¬³ÖvĤˆˆ\Œ1…$NpQ^^Žã8þ*†ëºgýû™ÿ>~ü8eee~É ÐêÄšw² ðWJ¼î¸Ð†AžIDAT’Þõ‚Á óæÍãðáÃôîÝ{×SO=õ€À}³c:‘x¿2àšk®á§?ý)'NôßëœïõÔÐÐÀ¾}ûüב×Ú9òÜsϱaCbqbðàÁ»~øá·»téÒî®ÖÚ]µµµÿ¥¹í£Ò‚1æQàÀw¾ó{ì1RRRˆÅbÔ×ד‘‘AÏž= ”””°e˺víJÏž=ijj¢²²ÒOäýû÷' òÚk¯1þ|oC8W]u·Þz+¤¥¥ùi½¬¬Œ;w;v,MMMôêÕ‹mÛ¶qäÈNž<Ùj:ìªU«x÷Ýw½³»ßmÙPµØhõ‘ `Œ)–;vŒ”””s¾Q}ú2pÛM¤™1f:ð&$º)Üwß}Ü{ï½þý–Þ¤Þ½{“M4eÓ¦MTWWÓ§OÂá0Ñh”}ûö1iÒ$"‘Æ6lØÀ³Ï>Ë[o½åo¼ ‡ÃŒ?ž¿û»¿càÀXkIKKóÛÖÕÕ‘™™ÉÖ­[9}ú4ÕÕÕ466RSSâE‹Ø³g$¾–ÿE¢üê|,‰à±çK{2EDä/–1f ðÀÑ£GýÑÖÕ×u9zô('Nœ øû>¼ar)))ÔÕÕ‘ššêŽP(ä·äõJ·B¡<òGeàÀ{Ÿxâ‰?徺®ë–Zkw466~zë­·ªdækÊ“<ÜDó‰àž={rûí·së­·’™™Ùê5äº.Ñh”ƒúõ£>âù矧¡¡ôôôêÙ³g¿yýõ×·{ê½1¦ÞqœES§N-þâkK[\òÄÓx¸0ƒ âßþíßú(ƒ ¢wïÞ~ø¢Òò£_¿~ôîÝ›X,†µ–¬¬,¿ŽðK¹¼0òé§Ÿrï½÷²mÛ6 ™;w.)))þ7$†9’È «V­âøƒW3{øwàhjðAs?t‘‹Ò¼Wr@ii)iiimÞ¿9Bee%ŽãxáüAº-WE¼ß¥^V ðxðÁ©©©aøðáÅÿú¯ÿºôGpÀ³³¾¾~û-·Ü¢ è_#Ƙ^ÀOŸÝ½ËÈ´iÓ¸á†(++ãøñã,X°€={ö`Œ±'N\óË_þr} h÷\Çq6æää,3f̹‡³ÉE¹¤ˆ1&8 tšûŒ{ï½—wß}H¬„Lš4‰‚‚F…ã8ìÞ½›úúz^|ñEV¯^íÝ| ‰šÉ¶Ìð¨VYkµaJDDÚÅs=‰NQ8p€H$rÁ›Ð9ÂgŸ}Öª¤êl+^{ÕX,æ—ay{A.\ȇ&æëÞsÏ=Kn¾ùæ’v>´ ÇqvÄb±uuu%šëðõ`Œ ·÷Wy—;ŽC—.]8uê®ëÒ©S§ÚŸüä'EÍMÚ+nŒ)š6mÚš8–œÅ¥@RIlØ?ðÀŒ1‚H$B¿~ýèÑ£»víbÆ „B!®¼òJòòò¨¯¯÷÷€œùQQQÁúõëIIIaÖ¬YTUUù%Zýúõ#==ÔÔT¿^6²bÅ >üðCæÏŸÿ¹û—››Ëĉ±ÖòÁpüøqH”Q½,?Çò@p¢ùÏ&à°µV?HED¤ÝŒ1ãUûöí#==ý‚öÄãq:D4õ/ó6Ÿ·œ÷á5gñʰ¼–¼•••<÷ÜsìÚµ €‘#GnŸ7oÞ²~˜µÖÚO1{c±ØŽ›nºét_.‚1fhNNÎ=·UUUõp'>|øðwß}÷º!C†tÄ*VuóTóp,9‡K:€c–7 2„ûî»H$$ö]ôîÝ›>}ú‹ÅØ´iÅÅÅŒ9’¡C‡’ššJmm­>Nœ8Á‡~Hjj*·Ýv455ÑØØè¤¤¤0zôhpÒ¾}ûxÿý÷q]—GyÄ›èºdœåîV¿>=ãòÃ$ÚØÕqk­jZEDäKaŒ¹X °wï^sp[˰\×¥´´”S§N‘’’GæuÃjllÄ㯀x{AŒ18ŽÃþýûyúé§ý¼ãÆ[?gΜÕPn^7Æ”Xk‡C­µý1Ž1Æmhh˜§­¯—¾}ûv6lX¯«¯¾:#???ÕÓÃÓÝZ›kŒ ^Ì1­µÇyyÚ´iÕ}¥5c®&QÎ …BŒ7ŽÉ“'“››ë_'77—~ýú‘••Åž={X·nééé\~ùådeeqðàA–/_NZZ?úѰֶ MMMD£QÖ¯_OAAƒæÔ©S¼þúë~›Á'žx‚'N@"`lFWÝ|Bâ~Ë©æ§-ÖÚCIy²DDä’gŒ¹–ÄïMvïÞMVVÖoB/--¥®®Îßé "ôöxx›Óëêêü2¬U«V±páB¯«îoþæo–Þxãí-»Âs*¼4eÊ”V¿K/^œ–‘‘1(÷-,,,jïב¤qŠŠŠºƒÁÜX,Ö=亮۽9œ¤žóF޳úôéÓo©ô.9.ù`Œù!ðÝüoFÅ”)S2d˜¾™‘‘A^^½zõ¢¼¼œ?þ˜íÛ·ÓØØHvv6wÝu—Ì–$²råJ ÄäÉ“©­­¥¨¨ˆh4êOüœ7oÕÕÕ¿&1Ï£¥ËëHZ ÜZ«³1""’TÍíR×ìܹ“®]»^ð&ôF Xk‰ÇãƒA¿  ©©‰`0Hmm- ,`ÍšD9~÷îÝÿã?þã냮ꀇS‡_ž8qbMK¾ÞÌâÅ‹³233»Çãq/”t®ë®ž>}ú–¯ú^J@š5Oãü$Z¿ ô.ïׯS¦Lášk®ñPƒAòòòèÓ§¡PˆŠŠ rrrxï½÷èß¿?½zõ"‹ùáã­·ÞbÀ€L:•h4ʲeËZ…Ý»wóüóÏC"XüŒÄÆrK¢Ôj¯µ¶#~ÈŠˆˆ´›1æà#€ââb²³³/hºëº”””øsµ¼²d¯ Ëk¿ë8'NœàÉ'ŸäÀŒ5jËÃ?ü~(jïYjëºîŸ|òÉÛsçÎuÛy,¹@ g0Æ` ð¿€ $ÊŸèÒ¥ “&Mâúë¯'‰ø-r/»ì2òòòÈÊÊbëÖ­¬ZµŠx<Îøñã …B¬[·Ž^½z1mÚ4*++Y¾|9 Xkq]—òòržzê)NŸ> ‰AˆÿE"€¬µÖû*ž‘s1ÆŒ6lÛ¶œœœ Ú„îº.ûöíóW;\×ÅZ‹ã8þªG,cóæÍ<ûì³ÔÖÖ o»í¶wn»í¶]ðb±Øâ›nºikKD.‚Èyc†sH´KHMMåÚk¯õ÷‰x«ݺucÀ€äæærèÐ!>úè#ÊÊʸâŠ+˜4ieee¬\¹ÒÿAk­¥´´”çŸÞ+½Ú<”kÔ2WDD¾ŽŒ1éÀg@ð•W^a„ ´ÿÃZËÞ½{ý[ÞÄs×u 455±lÙ2–,Y‚µ–.]ºT<ðÀ¯=údÜýòæ¡rÇ;àX"r‘@ÚÀÓø90›Ä¦pŒ1 :”n¸‘#Gú¡"55•Q£FѳgORSS1ÆP\\ÌÆýëXkùøãY¼x±×ùª˜l>¶Öj9XDD¾¶Œ1ë±ÙÙÙüêW¿âæ›o&´© ËZËž={üðÑÐÐàOA¯ªªâ?ÿó?Ù¶mÇ/~衇–§§§wÄ ¸ápxáĉë;àX"Ò  yÎ$VE{—÷éӇɓ'·Ú'ŸŸOuu5[¶lñƒGmm-¯¼ò 7nôn¾–Ä@ÁÖZm€‘¯=cÌ_KHtlô±Üu×]dddœ7„@¢{–·ùÜ@xàÀæÏŸOyy9@ >uêÔ~ö³Ÿ}Ò÷ÕÇãoOŸ>ýû+Eä+¦r‘š1Í  33“‰'2aÂ:wîL$! Q^^Žëºlذ×^{Í+¹Š¯Ø÷±×Z»á«z,"""Ê!ѹñ  3sæLî¼óNúôésÖ’,HtÏ2Æø%Wk×®å…^ ±±‘ŒŒŒS÷ßÿùùùQ& ƒ &Ož¼·Ž%"D¤Œ1C€Û@0$??Ÿ &““Æ X±beeeÞÍŽO’(½ÚCbõCÿ""òcŒÉ~ ü=ÐÀqÆŽËwÜÁ¸qãZuÀرcè|õÊ+¯°|ùr ðéܹs—vëÖ­¡îÚkí‹ßýîw+;àX"Ò@:ˆ1&¸DÝìs\- ¼,*€ÍÖÚ²s\WDDäÃ“Ü üø+ïò¼¼‘û< 3p€DÏôÀaƒjÕCDDþÒc`*‰‘©4·³w‡1cÆ0bÄÊËËY¹r%555„ÃášÙ³g¿ù×ýׇ;àËÇÇùcAAÁÇp,ù’(€|‰šgŠt"@pJíuEDäRaŒüØ3ËZÛïÌÏ÷ìÙóÈܹs_ïÛ·o´¾\e}}ýK·ÞzkGù)€ˆˆˆÈ—nüøñ7=zt†ëº½:uêÔiòäÉ%S§N=ÑÇv]wojjê‚)S¦tD‘/™ˆˆˆˆ|%Þxãt 7555ÇZ›ëºnwÇqr­µém<„Çã+7nÜøÎܹs5CKäBDDDD¾V/^œ–žžžëºn®1¦»µÖû³‹wcL½ã8‹¦NZüUÞW¹p """ò°lÙ²P<ÏNMMM©äJä›IDDDDDD’Æùªï€ˆˆˆˆˆ\:@DDDDD$i@DDDDD$i@DDDDD$i@DDDDD$i@DDDDD$i@DDDDD$i@DDDDD$i@DDDDD$i@DDDDD$i@DDDDD$i@DDDDD$i@DDDDD$i@DDDDD$i@DDDDD$i@DDDDD$i@DDDDD$i@DDDDD$i@DDDDD$i@DDDDD$i@DDDDD$i@DDDDD$i@DDDDD$i@DDDDD$i@DDDDD$i@DDDDD$i@DDDDD$i@DDDDD$i@DDDDD$i@DDDDD$i@DDDDD$i@DDDDD$i@DDDDD$i@DDDDD$i@DDDDD$i@DDDDD$i@DDDDD$i@DDDDD$i@DDDDD$i@DDDDD$i@DDDDD$i@DDDDD$i@DDDDD$i@DDDDD$i@DDDDD$i@DDDDD$i@DDDDD$i@DDDDD$i@DDDDD$i@DDDDD$i@DDDDD$i@DDDDD$i@DDDDD$iþ?-ëƒw lÞÕIEND®B`‚lasso-2.8.2/docs/lasso-book/figures/PaxHeaders/step.xsl0000644000000000000000000000013113766621500020077 xustar0030 mtime=1608196928.762895301 29 atime=1678814282.08173207 30 ctime=1678814323.145965473 lasso-2.8.2/docs/lasso-book/figures/step.xsl0000644000175000017500000000207213766621500023351 0ustar00bdauvergnebdauvergne00000000000000 opacity:0; opacity:0.5; lasso-2.8.2/docs/lasso-book/figures/PaxHeaders/sso-brws-post-1.png0000644000000000000000000000013214404126120021767 xustar0030 mtime=1678814288.469768318 30 atime=1678814288.417768023 30 ctime=1678814323.161965564 lasso-2.8.2/docs/lasso-book/figures/sso-brws-post-1.png0000644000175000017500000006702714404126120025253 0ustar00bdauvergnebdauvergne00000000000000‰PNG  IHDR ¡™Ð< pHYsÊ&ó?tEXtSoftwarewww.inkscape.org›î< IDATxœìÝw˜Uõµÿñ÷:em¦‚`½XÁAÐ1Æ$¶kI®7šr£ÑkÍMbnòKnbŠÑ$FÆ®‰앨Q±R¥ˆQP@Ê´SÖï]ÿ€ˆˆˆˆ´‘™nfך١­|É^À|àìö›UsfÖÅÌz¶púÐp>'ŒO˜YO3«éˆùÉ–CˆˆˆˆHÛíALìÞÙY‡€efVÑÊñÛË€ÿ×n3’-Rª³' """"ËÝ'ÖÙó-ƒ‘vdf)à`;à}àÉV¼f(°PÌžw÷|јÞ@wà  ϸ{®`ì  Køíöf– ¿^îîËÃmV[KÝ}•™u ç ÐÝ̆ÜzaxÜýÝæß?œûÛîîëûyeË¢-X""""íÄ̯×Ó¡-Œïnfwó€[¿SWÍl‡¢áÿC·q80xøððœ™õ(û0.üzvøºùÀyá±Cižr4ð\øõW ÆÏº?ޛ⟡kx[|H) @DDDDÚ™%{òB.ú;ÿ~Sb|ø;0‘ ¸Øè|`5b²™U•¸Õ_ ‚•ÝÂëßìÞ3r0%üz‚h(pu Ó80üú–‚ñCUÀþyf‰×~… H¹®…kËNˆˆˆˆHûì üÉÝìî‹Ý}.pÁ G± Û¨~îî—¹û+¼þ7€%ÀØh€»¿¬ ¿}ÛÝ„å¥&îî«h{ÕÊ‚ñ ­`O³€3Â-f…Î>n[×›#[. """"íãˆðù/…ÃmIY{8JÝ>Tâ\³ÿè»{#Á6¯µ¶G•Kø3\K°ªsttÜÌö&ºnq÷5-¼\¶p @DDDDÚÇÀðùíç”8%zÿËÌ–>ølŤO‰×-*ql%Á6¨öt#PGó^&Ñ××¶ó½e3¦*X""""í#JÀnmyÛDøšK€l cJUÊ—8ÖîÜ}…™Ý œ&£œ ¼àîotÆœdó DDDD¤}¼>>,:W\Ñ ‚•’QÀsîþZ;ÌgC¢ÖŒ¿ø÷ðñÁª‹V?d´KDDD¤}<>ŸQxÐÌ 8½Äø{Âç Úi>KÃçž­ÿ A²UKÜ}ð"ÁÏx°¸£ s”-€V@DDDDÚÇÃý7Î0³Eåqk€‹Á%Æÿƒ —ÇWÂ’¼¿!ÈýèEPb÷kµØÈùLŸefrÀ wŸYj°»7šÙ[À83;Xžú»»g †þ ÇɶÀoܽn#ç'[­€ˆˆˆˆ´ƒ°\íñÀËÀe‰çÓÎ]ÇøkÂç©[·fw;óY°1þBÐ/äØðù`Òz^sA÷ö_…ãï ¢ ÝDå|ÕûCÖËÔ RDDD¤m®㽀Ý}eѹA#Àí*V=¤ JØ.s÷%®·A3ÁZ`0ßÝçé tÞq÷\ѹ~@w/Um 3ëC¯±ÜÝ—›Y °5°ÔÝW•_žO Ã`):× øxÝÝG·ð‰Ä€ˆˆˆˆÈF3³ÿ~|ÙÝ•ÿ!ë¥DDDDD6H˜HÁ*ÎTð^¼#RŠÙ ᶲмü»»ÏéÜYÉæBˆˆˆˆÈç”™m <éîs[1~Gà0àQw/ÕÁ]¤ÍT†WDDDd#„‰ÜSН&ØŽô4p³»·ÔѼ£ìEÐð`½0"ÁÏ!Rv*Ã+"""²qÒÀ>Η‡ ‚Ò¶2³tçM€%Àc´­|¯HYiDDDD¤m^w÷#£oÌlàQà‚•‡?wÖÄÜ}*Á,‘M†‘2r÷ÅföSà¯Aȟͬ?p ð<ð.ðu`0Óݯ0³.ÀW¶M¥€™ÀßÜ}itm3 ìüÃÝ?*¾·™íC°*3ÅÝß[Wˆ™íNÐ]½AÇõ›Öõs™Y-p°'$hªx³»//w4ÐÏݯ7³€ã€žÀ/”¨. DDDD¤=DÁA·ðy‚ÜŠ_äW Ø5¸ÚÌvKàlà 3;ÞÝŸ ¯³Ux¾ÀJÜ÷WÀÞÝÉ¡…3;¸ x+œÓ÷?•úaÌìàn‚`å=‚êWg—˜Ù8w¥`øùÀè0Gæ*`%àÀ]€QˆˆˆˆH;8$|.îD~>ð ÐÃÝûÇ™YŠà?÷Û§»{_wßC Üv=‡ Hù85ìÅ3³€QÀ½ÅÝØ‹Æ þ^g˜»ïJX\K„ü ØÏÝ·s÷Öî ;¥ªÎw÷Úðú϶4'Ù²(i›j3>ö3³K þ#Ÿ%Xe(ôð-w_àî«£€][Ü=ïîtïE°e‹°ªÖÍÀÀE×>0àÆõÌ÷L ø»Ï ¯ëÀ¥Û¾ŠÔgºûËó{ ¸ ØWôšp‘»?ŽÍ»{ýzæ%[ """"m3˜>^~| |ÕÝ_-û°»ç‹ŽEÄ%®}Gø<ªàØ áó©Ñp5äëÛ£_Ï|G†Ïÿ(<!/1þ @ðž™ý›™í=VE ØêU¬¸D± ‘¶z‹ ·‚ü·YîÞXbì¢Çú†Ïï—8÷^øÜ/:àî3ÌìeàD3;?\Y8 ü¤D€S¬°2³gÍì+%Æý§™Ýaf=Ììfö¦™}bf_2³?›YÉÕ 3K›Ù-föã‚cWšÙõ%ÆÖ˜Ù…fö¯p. Íìa3;¥Ä؉á¹Ìl±™=bfcZúÙEDDdÃ)‘u‰öðof­y™}xØx¸‰`©þofvEÑðý€IÀ_ïÓ ªÁ4FPf··98™‚=Í9 ŠæÒxø)A}ü[ ’-+ öY޽*<7˜ ÚÌmI÷™Ùé­ùÙEDDdý´KDZþ~:ÁJÈ{Àdà9àiw§Äø]€7€iÀw_O䌆¹û¬ðøy$3ÃÜ}IÁµ&¨Òò3w¿°è>÷_¹û¢ðØÓáµ{Œ»8 øowÿIÑ5ú¹ûGá×_ çø•hU',‡ù4A­üAî¾lÃÞA)¦i‘»¯Fw}sª,4³WKlO:Hß‹‚ð:à ‚ß9'”¸Õ•…ÁGèY`>ðµÂºófÖ› y4 >J kÒŸÌ®*ñ³}Tðí7 VH¾U¸¥ÌÝW‡¯íÞSDDDÚHexEdÜý=àÄp5àP`‚-P{lOšäîQƒ¬ýÃçÃÍì ¢KU…Ï;”¸Í+%îëfvAùÉ# ÊM|… ƒïů)2Œ`«Õ ¾þ¥Þý JN~ÝÌŠÏm³Žy‹ˆˆÈR""­®<>.3³ó€_Ô¨Z ´”3Ѭ}[p9p*Ÿ §+€¿¯gÊÝÂç×3 APsv çÔð‘6R""Åݯ6³ËͬÚÝëåÉã{·ÐkCï±0Ìí˜`f=rQö®u÷†õ¼<Ê×Њ[­jÜ}èÆÏVD¤ó„¹v§t&ïKPDäM‚*†s[±,Òa€ˆÈF1³Á§iÓ¦ñÊ+¯ðòË/³páÂèô@>k6 p–™Ý|]Ûµ¤½©ˆˆ´(\5E4ìô#høðð—Âr»¯|IЄðc‚@ä~‚“¨ÏƉÕ´® sHZšÇ«¿v÷Å%Æœôs÷O'Ç@u¥yow÷Ç‹ÆîJÐ7d_ † ý-‚æˆÏº{¾¥9Šˆ´73ëIð¡ÐleçwæÊ+¯äˆ#Ž 5ÿ§[¾|9o¼ñ¯¿þ:¯¿þ:¯½öï½÷^áï»ûÿkù‹D€ˆˆˆˆlƒÎ.#ØNEïÞ½¹ð ùÚ×¾F*lhÙØÿÓÝpà \tÑEär9€î>¬,i¶`‰ˆˆˆl¢Ììp‚­§»TVVòo|ƒóÏ?Ÿnݺ­ûÅ­PWWÇÒ¥KÙyç™9s&ÀÎm¾¨Èz(ÙĘÙvÀÿ&…ß3qâD.»ì2 hMuñõ{íµ×xüñÇéÖ­•••ÑádY..² @DDDD6a•Áï? ÈEc§vâG?ú‡vXYî‘Ïç¹ãŽ;X¶l]ºt!›mV¥\{ó¥Ý)‘fÌì ºàPð.𖻯éœY}ÆÌúÓ?ºû…­?” aþ×î~e{ÏODdc™Ù‚²àCjkk¹à‚ 8ãŒ3H&×½0ÑÚü>ø€‡~˜¦¦&’É$™L†ÊÊÊÂ×+‘v§DDŠ]Céîá«ÍìÇîþÓŽžP‘ГæAÒº$7p¼ˆH‡2³/T·: ‘H0iÒ$®¼òJzõ*_ ¢gŸ}–ùóç“ÉdpwÜêêjêêê ‡)‘v§DDJiF‡_§}€+€«ÌìCw¿¡“æ°„ L®ºøŠÈfÏÌŽ ̽9r$W]u»ï¾{Ùî±zõj{ì1V¬XA&“!—Ë‘N§qw©©©‰*`¨Ü¸´; "RJÞݧ|ÿ‚™}Üœ ÜPü‚°ßÆ ÂÝç@Ð5ýƒR}C6DØCdZKçͬAãÀÝ}Yk®ö-é,jÍü̬{xÝýÓVM\D¤ˆ™Õ7É­·Þšþð‡Lœ83+Û=¦OŸÎœ9sX±bù|>^õhllÄÝ©¬¬¤¡¡D"½D+ Òîë""À“áóP3ëbfËÌì:3;XHРðµèfv‚™Í#è˜>Xffw™Ù6c ¯sE©›šÙ)áù¯‡ß÷¿ÿߢq)3û°˜,5³{ º¹—dfg›Ù;9.³€OÌìoa³¯Âq—„÷if%èˆ>›‚.ð""aÐËÌøë_ÿÊqÇW¶à#›ÍòôÓO3cÆ >ýôSòù<Éd’ŠŠ šššH§Ó$ 2™ ÕÕÕ…‰è @¤ÝiDDZ«Oø¼:|6‚ÜŠCº”_G°2ÑÀ̾ Ü ,¾¼Œ#XAÙÓÌö W^>þÝÌ~X¢Ûø@Auh9äWºç’þƒ«5áü.'ØVö\ø¼”`ÿõùÀf6ÊÝ3áðªðž *Ô,>(ùN‰ˆ´Î¾{ï½7;ï¼sœžJ¥hjjÚè‹.]º”™3gòöÛoǹ•••d³ÙøѪG:Ö ˆt8 "²^aYÈ…ß>Ytz'`¢»ÿ£`|š ’K0Ê݆§þnfËÊK~øwÏ›ÙM~-¸ÎöÀÁÀmî¾bóÛ Øø0. Ììàåãwï÷80¦ èyÀÌÞ~ |¸©è¥MÀHwoli."" `«­¶¢oß¾@P"7ÊÓ¨ªª"›Í¶ºÊÕ¢E‹˜>}:‹/ŽUUUQ__O*•ÂÌhjj¢²²’ÆÆFòù<•••d2Ñç- @¤ýi –ˆ”Rifw„‡¶WH°•ꊢ±o¡ý VBn->"?²["7üÑ;µhì)+-7®g¾Ç†ã®.Xµ ~SbüW~ÿý¬ÄŠËŸ’0*ñº_+ø‘2ÊCóºîN"‘ ªªŠŠŠŠø\6›%™L¶¸E+—Ëñþûï3uêT>üðCR©T¼ÂQUUE>Ÿ'ŸÏÇÛ°***032™ étºÙœDÚ“V@D¤#¬CO,L^þP"±û­¯ß!|ž^|ÂÝ—™Ùû+'ѱùfö,pœ™uw÷•ü•=X<¶žùF÷›Yâ܌Ǣò2—™Ù÷KœÏQºq©ŸUDdc­€~ïîd³Yr¹‰D‚\.oŸJ¥R$ R©¹\Ž—_~™3>ûuWUUESSîNUUUüšh…¥pU$êݾC~rÙ¢)‘RÜ}ßVŽ]YâXEøÜRãÂ5U¤ Ý@°Ýjðgà ‚ è§îžcÝ¢ûÕ•8WjQþÈ<‚œŽb €·KoS/‘"ÄÛ­V¬XAMMMp¢((Éd2äóyV¯^¯VD=Bn¿ýöxË•™QQQAcc#étš|>OSSÕÕÕÔ×דL&I¥R466ÆI"‘Pˆt( "Ò¢‹O„+‹NÝE°]êT‚$ÚŽµ¾íW…ÏX{•b­9$Æ\ãîÿjÅõEDÚC‚¼€)S¦ðÎ;ïpÐA1dȺvíºÖö,€††Ö¬YC"‘`Íš5|øá‡¸{ÜÛ#ÊñhjjŠ’†††8ïÃÌ⯣q}@€H»Sˆˆ´‡ç ¶nö)4è<[x0¬ˆu70ÚÌöN^p÷Ù­¸ßÔðùøçN(q,Jt?¥×i/Ͷ`}ôÑŒ;–—^z‰Ÿüä'ÜyçÌ;—U«>[|ªZ¬Y³†O>ù3£ºº:îóQ\@?RUUK&“d³ÙµJòÎI¤=iDDÊÎÝ—„•­Î~cfßu÷Æ0°ø-Apò«/½‘ (¸… H¹¡•·|„ ×ãL3{ÆÝïWZN%ØÒUìn‚êXß0³ÅÀ/ܽÀÌú'³Üý‘VÞ_Ddc4[éÚµ+Æ cذa444°páB^xá>þøc†ÊàÁƒéÙ³'UUU¸;ù|>NN¶\år¹8Ç£¡¡!.¢ŽçuuuÍz€Dã¢9 é @D¤½|ØŽ <î™fö AÞGpvQ§õÈS·†…ãnoÍÜ=öy ¸ÝÌ~KФøoà%Æ^ÿ€+ÌlРßGž R–ˆHÙ™Y/ –¢$’ËåH&“ <˜!C†P__Ï»ï¾ËôéÓÉf³ìµ×^ôìÙ3B€x…#‘HL&ijjŠƒ‹d2¯ŠŽK§ÓñªˆéH @D¤Ø7ù,©{]Jó¾[ꤻ¯2³1À‘Í »$vßåî-½&ƒ€OZèýñIxßyE¯af»_#¨Šõ!pA~HÔ‰½pübà`3;” ù½/ðq8LJݽ0Gå6àõ–~V‘Ö2³C‡þøÖ[oxòÉ'WD½8`ír¼îN&“ÁÌ8p C† ¡®®3£¡¡¡Ùv¬ÆÆF***âjVQ"zT +—ËŹ étšl6÷ihh(,ï«DÚiÆÝhå¸,pçzÆ8Áö¨Voer÷×q¾¾¥û†%‚¯.qªÅyºûS+/ëšÓtJ”Ù_8òÈ#pµµµµ·Ýv[€Ìš5‹ž={Ò£G8 (,É[__»Ç ã…Hq©Ýl6Kuu5uuuTTTÍf›K¥‚ÿFAJ6›æ§DÚ‘ŽóÇk¯½ö”gžyf`ccP< $–,YÂÕW_Í;ìÀþûïÏöÛo_²Vá–­è\aå«d2I"‘ˆËïF‰»Ç¹ ѪGa)Þ’Ð¥Ý)é îþ°™ ~ŒŠƒ>˜‘#GòöÛo3cÆ üq Äî»ïN¯^½èÒ¥Káuâç(àˆò9¢âcÀZÛ°¢Dt5"”ޤDDDD¤ƒ¹û3{[¸•*‘H0xð` Ä‘GÉ|Àœ9sxñÅÙzë­Ùn»íØj«­â&ƒQ·ô¨·GSS©T*ÞRåxDÛ°2™LÜ”0•Jafd2™xK @¤(é”LBŽm½õÖôë×l6ËÒ¥Ky÷Ýw©©©‰w§¢¢"D¢€£° za5¬T*ECCUUUÔ×דN§ã $”E¤)ék•á-\ ‰¾V:zöìÉV[mE2™dõêÕñØÂf‚Å]ÐS©T‹Ñ£ü¨toHˆ´;uB‘M’™U™Ù6=‘v …Ç’%K¨««‹žËf³ÍÎE¥ts¹\\D‰™ÅÑ3™ A…õL&Ól¥$:R"íNˆˆl2Ì,ifÿnf €zà3[afSÍì—fv’™ êìyŠˆ”IɹsçrÎ9çpÍ5×0kÖ¬8Ÿ£TŸ Yp‘ÍfãÞÑÊFp466’L&I&“ñv­L&£épÚ‚%"›3 üØ£èT`TøˆÆ~DÐ+dZÁ`µ»¯jÿÙŠˆ”E³ÈÈÀ[o½Å£>ÊÝwßÍî»ïÎ^{íE¯^½âqQ5,\ሂ3‹;žç‚DK&“)ì"ÒH§2³= 1á÷L˜0SN9…ªª*æÍ›Ç믿δiÓ˜1cF´M ðÅðQ¨ÎÌî.o©ÛºˆÈ&¤Ù Hñ ÇСCÙe—]hhh`þüùL:wgÿý÷§OŸ>ñ¸¨²USS@pDÛ±òù<ét:î RØ=Z‰¤R©]Íìçîþý{d‹£DD:…™õþ8p;è~ûíÇ•W^ɾûîÛwß}9餓hhhˆƒ‘×^{×_… þÑ® ¯7ÂÌF¹ûòûDD6Ü:“Уîçù|žAƒ±ãŽ;ÒØØH>Ÿ§®®.›J¥â€#›Í’ËåâÕŽt:M&“!ŸÏ—¬|UØ# GTWWÿ—™ ~ üÓ ##‘2P""Ê̺ߺl·Ýv\vÙe{ì±qÒd)UUUŒ1‚#FÄÇ>ýôSÞxã ¦M›Æ7ÞÈ¢E‹v ïqQ;ÿ8""mQ2 Ö^ Éår¬Y³†\.×,@‰ªdEÁEEEù|>Þ†UWWG*•Š›v>VE¢$vú\rÉ%ÔÖÖž°bÅŠn½õÖ•fö0ððwÿ´ãÞù¼‚T IDATRºˆt | x ¸èÒ£G.¿üržþy&L˜€™mðu{ôèÁAÄ·¿ýmÎ;ï<ªªª¢SG–oö""í¢Yh9Ѽð\aÀâîqùÝêêj2™ fÕÕÕäóyòù|\~·²²Ö‹·aåóy¦OŸÎêÕ«éÓ§—\rI÷©S§Nºûî»o<묳–÷èÑãy3»ÐÌöiÿ·G>¯´""íÎÌö®&L$O¥Rœ|òÉ\tÑEôîÝ»Í×wwn¿ývÖ¬YÀ˜7o@Ï6_XD¤}•LB_ßjHñ*q"‘ˆ·aV»Š‚‹t:M.—#“ÉPSSC]]]¼ +›Í6Ë©¯¯çºë®[™J¥æpÀ{ï³Ï>6tèPjkk9î¸ãìë_ÿúù|þ€×_}÷Ýwñ´iÓûêv|¯äsDˆˆ´3ëü8‹pÅõ ƒâÇ?þ1»îºkÉ×lèVã?þ˜[o½•t:M*•R%Ùœ¬•„¾®À£Páö«èär¹¸$o}}=©TŠt:7 ,<ÖØØwV¯««[ŒhllüØÌú>ñÄGÇì²Ë.GpÀ5»í¶ýû÷gРAüüç?ߦªªêì÷ßÿìÇ<[]]ýLCCÃ}À½*"ë¢DDÊÎÌ’À9Iæ[l»í¶\|ñÅœxâ‰e»Ï3Ï<ÃŒ3H§ÓñðD"ÞYª¤IÙÔ­•„--(Éd2®†UXj·0©).ÙÛÐÐ@MM qµ¬Ðwÿ8¼þà&à&3KΞ={$pLmmíø‘#Gî±Ï>û0xð`zôèÁñÇŸ:å”S¯¯¯?|Ú´i¿Úu×]Íž=ûnà~àwo ¢DDÊÆÌÀh‚íVÿP]]Í·¾õ-Î;ï¼xßq[544pß}÷±zõj‰¹\ŽT*…»®€(‘M]«“ÐK‹Žg³Y’Éd³¤ò¨a´*’J¥âU‘h$jDØÔÔ¯€ÐB#BwÏSÃÇÌlè”)SÆ'“Éñ{ï½÷FŽ™:t(}úôa·ÝvãÚk¯Ý6‘Hœ7wîÜón»í¶Õf6ÂÝg–õݓ͖)‹p»ÕÀѱ±cÇrÕUW1pàÀ²ÝgöìÙL›6ºººxÛAaU—‚üº®#"² (Y†·ðëÖlÉŠ*_&•§Ói²Ùl³jXétºYrzT’7‘HD=– •ÐÝ}>ðà7fVóÒK/½õÖ[O5jÔ6Æ cûí·§¶¶–ï~÷»]yä‘# (‘2W>î" >vß}w®ºê*FŽY¶{är9{ì1>ù䓸.¾™ÅŸîEI–Q)I´""›¾6'¡G[¯¢|ŽÂÞ©T 3‹ó>1³xVuuu¼ «àÛ N¤s÷:‚ ¾ifÃî¾ûîñétú‹#GŽ "R_Øm·Ý8÷Üs©©©Ù¨ž¥¼ù曼ð ,Y²þèF •”ôö<çóy­€ˆÈæ¤Å¯×u.Úzm¥ÊårÍV£¼(9=“ÉÄ«"‰D"þ=pàÀþ÷ÝwßžS¦L)KÒž»¯Pð!Å´""å°=ÀHß¾}㕉D"AUU™LfƒËë6440wî\f̘A}}=îN*•"™LÆû—›ššâÕhV "²©[k$RªìnK_GÉçÑïÈRÛ°ššššåËEÛ° +dÔÖÖn•J¥¾d&Ožúèåíö.ÈGˆˆ”M´‡8™LÒ½{÷8IýôSfϞͬY³â±•••d³Yòù<ÕÕÕqBe>Ÿ“,£@%¤$tÙÔµ) =z]K[® ·§6*,܆}x]+™Lzxý4°k>ŸßÕ̘?:‘HŒîÚµkÓäÉ“ç3ÍlÖ¸qãV–éý-„)â`¢¥Ž½är9‰©T*~¬ZµŠÞ½{3kÖ,ž~úi²Ùl¼­ ŸÏÇ[¢ .…É“™L&.Å/œ“ˆÈ&¬Ù‡7Û $Z®¯¯oV’7 .¢cQÀÑÐÐЬŠ`T¦ ™L®wõØÝ+€]]ÝÝ'Ož¼(ŸÏÏK¥R3:ê¨wÐï_Y "RÍ)_|ñE @mmm¼-«ðg&“¡¡¡•+WRQQAß¾}ùè£xâ‰'âqQyȽÊQ©ÝÂFZ…\*++ WT´KD6uq²1IèQ9òât:è(^-nllŒ·håóy*++¹ÿþûã> Çg$‰ù|þÐÉ“'¯q÷9¹\nf÷îÝß:ôÐC6â}‘Ï9 "RÍö1/Y²„«¯¾š=ö؃#F0tèPºuëVòi}}=«V­bñâÅ@°-+J4/ 8Š·D[®êêꨨ¨ÀÌÈd2Z‘ÍÉ:“Ð[”DMX£€£©©i­Õâ(‡. >¢Äõ[n¹…çž{€vØaîqÇ7¯?S3Û;•Jí½fÍšüƒ>ø®»ÏÌçó³Ž=öØÚxmùœP""åŠgfsÌ1Œ;–wß}—_|‘É“'³Ã;0lØ0úõëG—.]âF[³V­Z—Ò-L¨L&“ñ6¬ègT]«°‘V´R¢2¼"²qX; }CVC¢B…G”÷Qø»´ðÊÊJ/^Ìþð-ZÀn»í6ó²Ë.{¤?S"‘x"›Í.vM&“;¹ûàD"1~òäÉKÍìêqãÆ5–á>²S""å°Ö§xfÆ€ØvÛmùâ¿È{ï½ÇôéÓyî¹ç8p ƒf«­¶¢¢¢"þ#ը⒑¥*¸ÿ±-èæ«DD6uͶ¯®+ð(T¼ +•JÅѣߛQcÖâc©TŠ×^{믿žºº:’ÉdnìØ±OŸ{î¹ÓÚúø{C"‘¸í¨£ŽšzHL™2e{wß5‘Hô:ꨣ|ˆÙ8fÖø.ACÓÞPº›oô‡µÿþ 0€L&ÃâÅ‹yë­·èÞ½{Ü»ÃÝãŒÂ-W-mÊVJ¢\¨ WA7_倈Ȧn­IBÏf³qpQ¼ +•JÅÔ455ñðÃsï½÷âîtëÖmå¹çž{ßA´¸­?ˆ™-I¥R73fIñÏ8nܸùÀü¶ÞC>?€ˆÈƺøÒK/=¯wïÞüßÿý .lVí*úD.}:—ËåèÝ»7[o½5îÎêÕ«ãqѾä¨þøc‰Dþˆ#Ž˜úíoû_m¼»çÝý¡cŽ9æ©¶^K¶, @Ddc]qÛm·­¼óÎ;¿X]]½`QIÈQ£FñÆoðÛßþ–~ýú1|øp¶ß~{ºwï´üé^&“Y«¬naÄy…Û° ·fiDD6#ïF_,Z´ˆnTz´ÚQ¸ +ê“ôüóÏsÓM7ÑÔÔDMMÍšsÎ9çþ/|á ï•aîkR©Ô-cÇŽmkÕ,Ù)‘âîuÀ€™ÙíÀ‰Q¾ÇàÁƒ8p cÇŽeÑ¢E,X°€{ï½—ÚÚZvÜqGúôé—å ¯o#ˆö*GÁEaw_+9=*%S'tٌ̖}¾õ­oñ³ŸýŒ¡C‡­Û†efqÓÁ(àˆŠvÔ××sçwòè£0`À€÷.¹ä’û¸¦ ó~¿©©é¦‰'®(õd ¤DDÊ¡ÖNB73¶ÙfúõëLj#øðÃy÷Ýwùç?ÿIÏž=Ù}÷Ý©¬¬Œ/~B'•'“ɸé`a—Â$Ë\.)UUUjD("› ww3»¸æ…^°C9„Ñ£GsÆgp衇¶j5$ŸÏÇÛS£\¥K—òÛßþ– 0jÔ¨.¼ð©Éd²ÌükÍš5Ÿ4iRnýCEJS""åЬ”d¤p…#ŸÏÓ«W/zõêÅðáÃY¾|9555q’d´ÒØØØ,àˆ:÷Fyî¾V\.¿¦ a¦£ß‘ åîךÙàJwùì³Ïòì³Ï²Ç{pæ™grä‘G_ëû¨Á`&“aöìÙ\sÍ5¬\¹’ÊÊʆSO=õÁ &,(ÃT³‰DâÞ£Ž:ê¥2\K¶p @D¤ZÝÍ7ªÔRSS³Vó­èh´ +›ÍÆ9QÇó¨šVeee¼RÄKAzü…ˆÈ¦ÌÝ5³ƒ €ño¾ù¦þùôéÓ‡O<‘/ùËôèÑ#?G¹wMMML™2…»ï¾›|>Oß¾}?¼è¢‹îÛi§>mëüÌlE2™üë˜1cÊ‘;"¢DDÊ¢YÁƧžzŠúúzFŽÙl«UqîGaRØ`°¢¢ø,¸(¬kßÔÔ¯zÀgÉéIè @Dd³âîÏϘÙÀ÷“–.]šþÝï~ÇÿøGÆŽË„ ØsÏ=Ïr@êêêøãÿÈ«¯¾ À>ûìóêE]ôduuu›·I™Ùì\.wÛ¸qãêÚz-‘ˆ)‡’[° ÄC=Ľ÷ÞËž{îɈ#:t(fV²ñV"‘ˆ;÷ÖÔÔÄEa]û(‰¶fVͪªªÒ ˆˆlöÜýMà3ûð à즦¦~÷ß?÷ß?Ûl³ cÇŽeÀ€¼óÎ;<òÈ#|ôÑG¤Óé¦O<ñ‘“O>yV9¦af7îQTÔCÊLˆˆ”ÃZ[°¢jXÿñÿA.—ã½÷Þã™gžáá‡fÈ!ì±ÇôîÝ»YÀm%ˆ*¸DÛ° WEÒéôZÇ¢ò»Q^Hh¨™uu÷Õýfˆˆ”ƒ»\ff?Nþ8hñâʼnn¸¡ÙØ=z,¿à‚ î>|ø'm½¯™ÕçóùÛÆ_Ž@Fd- @D¤‚üŽ–ºŸ÷íÛ—“N:‰\.Ç¢E‹xå•WØc=èÞ½{üšd2¿¦°Á`T’·0I$%·aE+ ={öÜuõêÕ¯™ÙîîÞØÑoˆˆH¹„¿Ãþ üµwïÞÛöïßÿ{K—.=4ŸÏךYŨQ£¦éK_š][[[ŽNä‹+**n:âˆ#ÚȈ´Dˆˆ”CXkKUôuq÷ó^½zqôÑG“ÏçùôÓOãqÙl–T*¯rD¥vS©àWUaô¨Ö}aô¨>@÷îÝ=zôÐ… ~bf÷÷»ûÊ|_DDÊêã?^|·à=üðÃ=³Ùl?3ë›Ïçûº{?3ëkfUxùWûõëw×>ûì£*‚Ò®€ˆH9äÂë¬_ŸËåX½zu¼e+z.\Á(,¿ÛØØˆ™5[ÉårkuA7³øõfÆi§F÷îÝ»TWW}ñâÅ_衇r]»v}fÍš5÷¹»¶ˆÈæÎÇŽ» X4ûvçwVwëÖ­_>Ÿï—H$ú¹{?wïtov÷¼»?tÌ1Ç<ÕqÓ–-™)‡fIèëkœU|.*%™Édâà"—ËÅ«¥Žâ!ѱ¨Hcc#W]u‡v;î¸#Ý»wçK_úRòôÓO?¬®®î°W_}õ§{î¹ço¾ùæÀÀ#Úª%"Ÿ'“&Mª†Ø#<Ò¥®®nëT*ÕË̺är¹9Ç{ì1GÙ2)‘r(Y†·Ô×ë:…¹ Ñ6«¨ßG´ +Ê-‰‚¨Lo4‡¥K—æ/^|ñË/¿¼8fçw>æC©ÞyçéÛ·/»ì² ¿þõ¯ûWTTœýÁœýàƒfÒéô3Ùlö~ànw¿ìï’ˆÈ&`̘1k€ùáC¤Ã)‘rXg'ôèë–ÎE¯‹V@¢t:¯z45¹•UUUqÂl6wAŽEH6›½ÁÝÿ7¼ÅMfV5gΜÑÀjkkO=zôн÷Þ›AƒÑ£GN>ùäôÙgŸ}D}}ý/¼ð¯†:Á‚wO»»öD‹ˆˆ”)‡VwBo霻“L&ãUhVEEEÜ$—ËÑØØ!…åw£ $Ú‚4kšåî ÁÄcÀÌlçxàh3;fŸ}ö9xĈÉwÞ™Þ½{3|øpn¸á†¡©Tê¹sç^øÀ¬1³¿÷¸û=e÷DDD¶ @D¤JnÁjíjH´’Ïçã€#•JÅIaŽG*•¢¡¡!.¿õ ihh ªªªpëlDèîs€9À/ͬÛË/¿|$0nàÀ9äÞ»í¶Ûn»-Ý»wçœsÎéòÝï~÷«Ï<óÌWÍl„»¿ØæwLDDd ¥DDÊ¡MIè‘D"™L&îxå}466’H$¨ªªŠ» g2™ø5õõõ$‰¨W«;¡»û*àà3;ûæ›oŒO§Ó_<è ƒößo¿ýl§vbùòåéxDDD$¤DDÊa½Ièë Jòù|³.èQpQ¸ «°)a6›mqkVA)àV …<˜Ü«áãÇfÖë‰'ž ŒÏoÌuEDD$ DDÊ¡Å$ôuÅ_»{\~·xVMM uuu¤Ói’Édܨ°¡¡!^YµjÉd’\.G"‘ø,jwÿø[ø‘6R""åàPºzñ÷ëJBº˜G[ª ;žG‰æQÞG2™¤©©©YôÂÑ£G4eÊ”³ÌlVCCÃô‰'®hÇŸ_DDDZIˆˆ”ÃuB/•„=oÊJíöÉåräóù89=ª†µzõêx$™Lš»ïèî;VTT;eÊ”Ü}60륗^zïòË//Ë ‰ˆˆˆl "R9ø,°Ø˜$tw{{d³Ù¸¬n„n¹J¥R˜Yœ÷mÊ‚€T*Õ,Àp÷þ@àðýöÛ¯îÁœgfs³ÙìÌc=vU»¼+"""² "RmNB‡ Ëy:ÆÝ›U¾Šަ¦¦fGáJIÔ½•9 5f¶'°g:>nòäɳfüñ‹·”‰ˆˆHù)‘rÈCé@£µùù|>îxžH$šõijjÂÌâ-W…² ƒ”?ü0^éÞ½{}k&îî `0 ªªêÈ|p5ðV.—›™N§çŒ7®±­oŽˆˆˆ|Fˆˆ¬ÅÌN¦¹ûÜV¾d­Nè² +ê^­€d³Ù’¹ Q¢yá6¬l6Kee% ,àú믠[·n+'NœøÖFþì]½S©ÔÞîž2eÊÛ¹\nn&“™yÜqÇ-Ù˜kŠˆˆÈg€ˆH)€[ÍlAƒ¾û€gܽ©…ñ-–á-õuñ÷Ñë W3òù|¼ÒØØwA/܆{þùç¹å–[Èd2¤Óé¦3Ïøà’T*5«¾¾~öĉ ­Z"""Lˆˆ”ò$A²-ðMàl3{¸ ˜ìî‹ Æ;4_‰Ol@'ô¼(¸(ìŒ%ª766ÆÛ±n»í6¦N @mmí²ï}ï{ÿØ{ï½?.Ã{° —ËÝòꫯ®1bÄvÙlv·d2¹k.—;$Nþ· ÷Ùâ(‘RžÒá×)>û]18ø£™]åîÿo€À†%¡G¨·Gp¤Ói2™ ©TªYÞÇÒ¥KùÃþÀÂ… Øm·Ýf^vÙetëÖ-ÓÆŸÝ“Éä3cÇŽä=öX€…ácò”)Sú˜Y÷6ÞCDDd‹¥DDš1³j‚¤ìkÿްðñpeÁñê„^˜„= W@¢kVTTÐÔÔD2™Ä̘9s&×]w]Ôù<7vìØ§Ï=÷ÜimýÙݽ)—ËÝ1~üø7Z3nܸ¥ÀÒ¶ÞKDDdK¥DD0³~À—£ƒª†Ö_v÷•†l|zôœH$ââjXÑJÈC=Ľ÷ÞK>Ÿ§{÷î+Î?ÿüû8à€Úü&ÀÒ\.wÓ±Ç[Žk‰ˆˆH €ˆl¡Ì¬|˜Èg[®Þû•á±àà w/î±ÑÄy‘Ö®†®œ÷ö03Òé4«V­âúë¯ç•W^`èСó.¿üòɽzõ*G™Ü™kÖ¬¹}Ò¤I­*Ý+"""OˆÈÆÌNNzœz¸˜âîsÌl8ðbx®¸8§Dð0 à£>âµ×^c=öˆOlè6¬¨ÔnaùÝ… ò»ßýŽ%K–H$òtÐ ßûÞ÷žK&“mªBefyw|üøñ¡ŠV"""Š«ÐˆÈç™UTµú/`ÿ‚S‹‹ëÝý­¢×$€•+ ÿçî¬ãúIà=`›®]»rÚi§qúé§Ó»woòù|œ<ÞÒ×¹\Ž9sæJŸ‰d³ÙxËÕóÏ?Ï 7Ü@SS555«¿ùÍoÞøá‡¿_†·¥øÛøñã7ª_ˆˆˆˆl "ŸcfÖ“ „îy@ÿðð‚Þ7O¶°¢½~ ð¼»ÿ°÷ú7àÀ ªW3†³Î:‹aƵxDßÏ™3‡|>O:ÆÝÉf³Ü}÷ÝLž<€¼{É%—<0pàÀ5mxK"‹Ö¬Yó×I“&-+õDDDd(ù2³!ÀùÀ@×ððÀo€kÝ}y+¯3ÐÝßÛ€ûV§ßv1zôhN9åFމ»7 <òùGÌlp)Aàåx½ü¸ÉÝ:h àxàB`ßèøÀ9ᄘ8q"]»v%ŸÏ“ÏçilldþüùÌ™3‡k®¹†O?ý”ÊÊÊúÓO?ýÁ/~ñ‹o—aZÙD"1ù¨£ŽšZ†k‰ˆˆÈFR"ò9`f}€‹º–G%t~áîuÚÄ3;ø0HÔÔÔpøá‡3vìXöÝw_V®\É;ï¼Ãc=Æ]wÝE>Ÿ§_¿~‹/ºè¢ûvÜqÇ•mƒ»ZYYù×/|á ï¶õZ"""Ò6 @D6cfÖ8— øè~¸ØÝŸî´‰•`fC æzŸÍ•Þ½{³Ã;ðþûïóþûAnù¾ûîûÊÅ_üTeee®­÷M$ó‰Ä-cÆŒ)Gˆˆ´‘‘Í™¥V;.z…‡_þÛÝé´‰µB4Mìҥ˩ ‡ær¹¸x×®]W7nêi§6½ ·ò|>ÿô´iÓºüòË[L´‘Ž¥Dd3cf$“ïš \Üå›Ù?è &ô›7oÞÑ]»vݺW¯^]Î>ûìw***zµ€µáÒÀãdz<3‘rQ"²™0³mŸ44ààbàÏîÞæ­J›’™3gVÌž=»oEEE_wï—H$ú&‰~ÀVîžX×kÍlI2™¼i̘1K:hº"""²€ˆlâÌ, üðC ;n¾çîK;sní©§žJ566öúæóù~Ùl¶_"‘èkf½€$ðš™Ý3nܸÆNžªˆˆˆ´@ˆÈ&ÌÌFv ýøOw­ófµI²ë®».¥Þ"""›> "› 3«~DÐL0,&è©qóæ–ç!"""R(µþ!"Ò‘ÌlÁªÇÎá¡;o¸û²Î›•ˆˆˆHy¬3™SD:Ž™Õ˜ÙOg‚€ î~¢‚ù¼Ð ˆÈ&ÀÌn\ \àîmî."""²)Ñ ˆH'2³”™]DDDdK¢‘`f“z{tÞ¾âîÿìÜY‰ˆˆˆt<­€ˆ´£°ÊÕOÛ ‚§ý|ˆˆˆÈ–J+ "íÄÌú·Gôö¸øž»g;ub""""HˆH;0³QÀ@àSà4wÿ{çÎJDDD¤ó))33û p=PÌŽw÷Y;+‘Mƒr@DÊÄÌfö3àoÁÇÀ¾ >DDDD>£‘2û{Ü L È÷øp±»ç;ub""""› "mdf€û€½€à,w¿¹sg%"""²iR"Òf6¸è,&ºûË;+‘ò\aà IDATM—r@D6’™{ömýþØÌÈȀ̔×óñØÂìïe¯õíãÁû±Ög­‘”ÂÇAÀ›À´㪾m•$IÒ‡›«`I=!œ,¢>^&>$I’öœ# úÈ !$€¯¥R©i1Æ|¡P¸øÅ®.•B8 ¸< |6Ƹ¹÷Z,I’´ÿ1ƾnƒ´×„ÉdòöT*õåO}êSù|>¾øâ‹¹\.·¥P(üQŒñé÷¹þóÀJ >|1ÆØZ޶K’$í úÈØ>nN§Ó_¹öÚkÓ#GŽ ŸÏsÿý÷ž~úéc¼<Æxç®ÿ2ðï@šÒÈ%1ÆLÙ: I’´0€è#!„‰ÄÜt:}ùµ×^[1jÔ¨íÎyúé§¹çž{Š1Æé1Æ;Þsý%ÀÏ(MK¼Ò>…²4^’$i?bº>ô¶†Ÿ¦R©é³fÍê1|œ|òÉ|éK_J„n !ÌØæúmÃÇMÀ Ç$IRï°]j[ÃÇ“ÉäU³fÍJ3f§çŸxâ‰É»îºë¦B°…ÒˆG ˜\c,öv»%I’öWNÁÒ‡Z2™üÇd2ù­«¯¾:=vìØ]¾î¥—^bÁ‚që÷?s¯>$I’z—DZÉdòû‰Dâú+¯¼25a„|ýÒ¥K¹óÎ;‰1.NþÏ I’Ôë¬чR2™ü?!„ëgΜ¹]ø( ¼öÚk¬X±‚ŽŽŽÞãè£æ+_ù !„ÉÀ7z¹É’$IÂ}%“É¿O$ÿ³§‘††~ö³Ÿ±víZ†ÊW\AMMÍï·lÙ2~þóŸcŒWÅoéͶK’$íï úP !|'™Lþ¯™3g¦&NœØíX}}=sæÌáCáüóϧ¡¡;d2É7¿ùMB;¼ïóÏ?Ï]wÝ•+‹'Ç_èí~H’$í¯œ‚¥d2ù¿’Éäß\qÅÛ…-[¶0wî\Ž8â.¼ðBªªª5jçŸ>7ndóæÍ;½÷ 'œÀÑGH¥RÿØ›}$IÚß@ô¡L&ÿøÛéÓ§'=ôÐíŽoÞ¼™––ššš(ÞÝÂ#ŸÏ“N§Ÿ§±±‘û￟3Ï<“t:ý¾Ÿ3bÄ(-É;¢7ú!I’$ˆöqÉdò[À.»ì²äGÑíXSSsçÎ Ns衇rÅWðÆopÛm·1oÞ<&L˜Ài§¶KŸµråJB`Ã^î†$I’¶2€hŸB¸.ÆøÏ_ýêW“Gyd·cÍÍÍÌ›7Q£FqÉ%—H”¾Ê'NdÆŒ¬^½šööv¾ð…/ì´ø¼Ók¯½ÆwÞY!üeŒqS¯tH’$Ií›BW…~tÉ%—$>ñ‰Ot;ÖÒÒ¼yóhoo碋.ê >ö±1sæLr¹·ÝvÙlv§ŸõÖ[oqÛm·åcŒÿ§P(üó^ïŒ$I’º@´Ï !\B˜sñÅ'Ž9æ˜nÇZ[[™7oUUUd2î¼óNòùüv÷?~† ¬Y³¸üòË»¿×¸qã¸òÊ+Y·nË–-Ûîø6áãÿ …?ïµNI’$©‹jŸB¸$„ðï_üâŸúÔ§ºkkkcÞ¼y 0€éÓ§“J¥xýõ×¹í¶Û˜0a—]vY«]5551hРnï­Y³†yóæå …ÂO …Ÿö^¯$I’´-ˆö !„‹B?ÿ¾œ4iR·cíííÌ›7êêj¦OŸ¾]ÈXµj·Ýv|pÇß«¶¶–o¼1—Ïçg …ÿ¾×;#I’¤2€¨Ï…¾B¸óóŸÿ|òä“Oîv,“ÉpÓM7‘L&™9s&=Þã­·Þâ–[naÔ¨Q;=¯¶¶–9sæäòùüí…BaVôI’¤²²D}*„ð¥Â\pÁvᣣ£ƒ›o¾™ÚÚZ.¾øâ† (Ϙ1ƒuëÖqË-·ôX²nݺÎðq‡áC’$©o@ÔgBç%‰ŸûÜç’§œrJ·cá#ÆHuu5·Þz+---;½ßøñã™9s&ãÆ#™Lv;¶~ýúÎiWÿ^(®2|H’$õ §`©O„Î !üúì³ÏNž~úéÝv Ìår]£W^y%ÍÍÍÌ;—ÊÊJfÍšµ]Aùû©««ã†nÈf³Ù…BaFŒ±¸W;#I’¤]æˆÊ.„pN"‘¸gÚ´iÛ…(M•Š12sæL*++>|8W_}5Ùl–yóæÑÔÔ´ËŸUWWÇìÙ³³Ùlö×…Ba¦áC’$©o9¢² !LK$÷M:5uæ™gn7òñàƒ2uêTª««·»vóæÍÌ›7T*ŬY³Ÿÿ\Œ±c÷»'I’¤Þ`Ñn‰1nˆ1Þï¼t:}Û 'œPñÙÏ~v»ïÚ]wÝÅÍ7ßL6›íz¯s Þ#×]w¹\Ž9sæ¼ïÊWÌž=»£½½ýñ|>ÿG1ÆìN/$IRŸ0€¨W …qÇ{lß³SN9…õë×sÓM7ÑÑÑA.—ãÖ[o%“É0cÆ F͵×^K±XdöìÙlÙ²¥ÇÏhjjböìÙÙÖÖÖ'óùüçù$IÚw@Ô«‰DÃæÍ›{<6fÌfΜɆ ¸ù曹ýöÛioogÖ¬Y]Ëð2„«¯¾š?þøv÷hnnföìÙ---¿ß:í*Ó«’$IÒ1€¨WåóùùO>ùdG±Øóþcǎ媫®bãÆ¬ZµŠK/½t»=@† µ×^Ëç>÷¹nï777sã7v477?—ÏçÏ1¶÷ZG$I’´W@ÔÛ~¼iÓ¦–|p‡õ"cÆŒáꫯ¦ªªŠ;¶¶¶íÎ4h©Tªëç––n¼ñÆlccã’|>NŒqû‹$I’´Ï1€¨WÅ7 …/,^¼8>öØcqGç5Š«®ºŠÆÆFæÏŸßcéÔÚÚÊœ9s:_ÊçóÓbŒÛïZ(I’¤}’D½.ÆødŒñ‚Gy$ÿ›ßüf§!dÖ¬Y; !™L†ùóçg^ÎçógÅ·ß­P’$Iû,ˆÊ"Æø`±X¼`áÂ…¹|p‡!däÈ‘\}õÕ 6¬Û”+(…9sædëêê^ËårScŒ;_›W’$IûˆÊ&ÆøP±X<û‰'žÈ>ðÀ=W¥555\zé¥TTTt½—Éd˜;wn¶®®îõ|>ÿ™cÏkòJ’$iŸfÑn !\Bˆ!„Ü´õíê|/„ðíž®‹1>^,Ï^¼xqöþûïßaÙVGGóæÍËnܸqÕÖðQ¿·ú!I’¤ò 1îp6Œ´C!„“€/í䔇bŒ¿ÝÉõS‰ÄCŸþô§«Î?ÿüÞ$›ÍrÓM7ekkkßÌår“cŒ›ö Ù’$Iêcõ™œD"qõ)§œÂùçŸO¡Ûñl6Ëüùó³ëÖ­[“Ëå>c¬ë£¦J’$i/1€¨O„Îî’‰D"{ä‘G†‹.º(]YY @.—cþüùÙÚÚÚw¶† }Ú`I’$í•]á`ày`8p#ð/étúžD"1áøãO<8,]º4[WWW»5|¬ëÛK’$io1€¨¬Bý€'€g€ÏÄ;B•À…©TêòD"1¨P(¼\(¾í´+I’¤ˆÊ*„0¸Ø œc|«o[$I’¤rr^•Mák”ÂGøªáC’$iÿcQY„&ÿºõÇ¿Œ1>Ü—í‘$IRßp –z]á@JEçc€»/F¿x’$Iû%ˆzU! <LV'Å›ú¶U’$Iê+NÁRoû¥ðÑ|Éð!I’´3€¨×„þøs WÆ_îã&I’$©@Ô+BG·ø§ãôq“$I’´°D{]¡ ø=p°8;ÆXèÛVI’$i_àˆzÿQ €Ë ’$IêdÑ^B¸˜ËcŒëú¸I’$IÚ‡@´×„ælýñ{1ÆGú²=’$IÚ÷X¢½"„Ðøpðp–S¯$I’ô^Ž€hoù¥ð±¸Ôð!I’¤ž@´ÇB×Pªû¸,ÆXÛÇM’$IÒ>Ê¢=B8˜»õÇ¿³îC’$I;c ˆvÛ{ê>¦:õJ’$I;ãˆöÄ)… ÀW ’$Iz?í–¯á~’$Iú úÀBñnÝÇÿg݇$I’v•5 ú@B àa`*ð<ðéc¶o[%I’¤ G@ôA]O)|´RÚïÃð!I’¤]æˆvYáxà) ¸2Æxs7I’$I2í’Bà9àà®ã…}Ü$I’$}9K»êG”ÂÇ;ÀÕ}ÜI’$}H@ô¾¶.¹{¥%w¯ˆ1Ö÷q“$I’ô!eÑN…Æó¶þøƒã¾l$I’>ܬÑ…ð0 x˜cÌõm«$I’ôaæˆvæ”ÂG¥ÝÎ ’$IÚ#Ž€¨G!„#€€*à¿Åg÷q“$I’ô`ÑvB)àIà$ààœèE’$I{S°Ô“¿¡>(m8hø$IÒ^ሺ !œ@i·ó4ðÇ1Æ}Ü$I’$}„@Ô%„PM©îãpàßcŒ—öq“$I’ôã,mëû”ÂÇZàº>n‹$I’>‚!„Ó€…@Î1>ÜÇM’$IÒG# êœz5Ò÷a®áC’$I½Å"€VÑÇm‘$IÒG˜S°ös!„SE”¦^}6ÆøP7I’$IaŽ€ìǶN½º…Ò÷`ŽáC’$I½Í²ûÞzõ?ú¸-’$IÚ8k?B˜üŽR=ÇÂsI’$•ƒ# û¡B ˜Mé÷«áC’$IåbÙ?}8Ø„«^I’$©Œœ‚µ….Îà `%°x9ÆØÞ‡Í „p8ð"ÐøJŒñÎ>n’$I’ö#©¾nÀGEá:àÇ;9¥BxXN)tþ¹2Ƙ-C; ¢TtþºáC’$IåæÈ^B ¬ú;–™3gR[[ËÊ•+Y¹r%7nÜÙå9à5Jd9ð2° Xc,ôR{+1ÆÍ½qI’$iG {Aað0À£>Ê”)ShlldóæÍ´µµ‘Édhiiaݺu,_¾œgŸ}–eË–Q__¿³Ûf€Wè>Z²x+úK“$IÒ‡”d/èœ~5`Àêêêˆ1R,»½bŒ´µµÑÔÔD[[ííí455Q__ϳÏ>ËO<Á+¯¼BGGÇÎ>®…wGI:ÿ\cÜÔËÝ”$I’ö˜d/!ü+ð§ÇwO=õµk7sñçÿžk†ðÉ£Æ3iòœrêáTT¤¶ $Åb k”$“ÉÐÚÚÚL^|ñE~ó›ß°råÊ®sw üð—½5uK’$IÚS¡ï‡rÈ!¼¶r-o¼¾ža ä· —ò‹Ÿ/¢©±t:ÉÃqð¸ñ‰1œxÒ!L:õ0**R¤R) Ä€6lXWؘ4i3fÌ ££ƒææfšššØ´i/¾ø"¿þõ¯Y·n]g*€ë·þù§e’$IÒ.0€ì‡À»dŲÕTUWrNÈdrÔml`ÓÆê64òÛG—sçí‹ÈeóTT¦vÀÆO¬áãŸà “&rÔ1¥Ñ©t:M*•¢ªªŠáÇ3qâDN<ñD®¹æÒé4K–,á»ßý.o¾ù&Àù@$I’´2€ì¡­»ŠO€mÈ[ ÒŸŽŽü¶çq`ÍP¬J<êÝë[[ÚY¿n ›êÙ\×ÄýòYnžób„êþ•ÔÔ füÄ9æøqLûìQ¤R …1F …™L†\.Ç 'œÐ@œS'I’¤}–dÏÒ‡z(«ß¬cа´vävœ:¤RŒ;‚‘cGt*ä l©o¦~S#õ›šyíu<ñÛ?pÆ´“L†n·)‹¬_¿ž†††Î·vº´–$I’Ô— {îÐοtŽ€lÚÔˆƒ =“ßáEïgÀ 2€±‡@Kc=øUU´¶¶ÒÖÖFee%ÕÕÕäóyBÛî5²|O:#I’$õ&Èž;`ذa 6 €ÖÖÆVWÒ–Éí•XûöfÆŒ=(Õƒ 6ŒL&C¡ëµMY±W>T’$Iê=w¼;ýª¾¾…D"Iª²’öLÏ«áÆ®ÿ¡ÇSÈçòÔoh`ÃÛ›hmjãô³Ž •*-å[YYIl6KŒ‘Í›»657€H’$iŸeÙsÝVÀZûöfÒé4¤Ò´eò¨"¼X,ÒÖØJc]Í››éÜ£%N󉣯P__OuuuWÙ´i[¶l!—ëmq –$I’öY=×m7ßÜHEe%¹äwZR ù|‘Ž–v:šÛÉ4gºöÿH¥ÓÝΞ0q8@×ô«ŽŽ’É$›7oÞvúU#P»×z&I’$íe=°u Þqðî¬U+×SÙ¿¹Âö»–#³9 yòY 9 ÙwCJ2•$Ir»ë!P3rP×Ï@i÷ôL&Ó­=ºµ½$I’öa=3žÒÎã]# ï¬ÝB:•¢Ðž…"Äb‘b>O!W$æ l›’$Hn ;3`P%©T‚¶¶6²Ù,UUU‹EBlذ¡óTë?$I’´O3€ì™C:ÿ2qâD6on#™HRhîèvb’éÝ{Ü£G _¿~¤Óiòù<‰D‚D"a‘$IÒ‡ŠdÏ 0jÔ(@KK–tEz§íšw—Çÿ±Þ}7R©Éd’ÖÖVbŒÔÕÕu¶]’$Iû4Èžé¶VGGHP‘ÞÁ´ª,¹û¾rh)€477“J¥ˆ1v oÞ¼™|¾«ŽÄI’$íÓ {¦Û 74—F?ö¤ ¼‡2ê Rzç(K±X$ŸÏÓÐаíô«M1Æ Û_-I’$í; {¦Û¼64“ÞÑèÇnJ$ƒWR(”F9bŒÄÉçó‹EÖ¯_ßyª£’$IÚç@vÓÖ%xÇû# kÖl¡b¯Ô¼kÐàJB€ŽŽ‰™L†~ýúu¶aÛë?$I’´Ï3€ì¾ñ@¶Y×ÒCún~lu`ÍàÝewS©Ò¯¬P(B`ݺu§:"I’¤}žd÷H$˜0aÙ\‘ô.ìëñA4¶T÷ÑÜÜL¿~ý!L&ijjØv,ˆ$I’öyÝw(ÀÁÜ5%êO¿õÞ~»§·š?¼²‘Ʀ,¬"}ûÑ’ƒF—F@úõëGŒ‘l6K*•bóæÍÔÕÕm»ÖË{ÐI’$©, »¯Û¼:h_¼ðÄøqÚÛs¼ôâz^zi=ëÖ·R,|ðå±^QI§Ó‹E‰…B¶¶¶m§_­1nÚ£ÞH’$Ie`Ù}£Æ×ãÁ#••INüÔ(Ž?¡†b±È;ï4óÂóX½º™¶¶Üû~@2è×/I±Xìö~±X$„°í X¯ìQO$I’¤21€ì¾g€‹žxâ 6lØ@MMÍv'ÄØ}ÄcôèþŒ9žb±H{{Ž¥K7óÚÊF6×g(·PÜîPª;yOú”Â#À£À£1Æç÷¸w’$IR/0€ì¾_õꫯûØÇ>ƤI“8ï¼ó8ãŒ38æ˜cºNê)@TV&9á„áwÜ0ŠÅ"kV·°âå-¬_—!“)0dhz»{$“Ir¹!jkk;ßNgm}BX<<,Œ1¶îÕžK’$I»)ìèÈz!„‰À¯#·}üøñœqÆœsÎ9œvÚi¤ÓibŒ‹Å¾:Ïilì`ÅŠFFªdÔ¨ÊnÇ;§^­]»–?ù“?!ŸÏóo|ƒÕ«W³páBZZZÞÛÌ,° hfwÅ‹ï=I’$I*È !ôÎ.ÎÆn{¼ªªŠ“N:‰³Ï>›óÎ;‘#GîRÙÑ«P(°jÕ*Þ|óMþæoþ€ pÆgÐÑÑÁïÿ{üq-ZÄÒ¥K{¹ø£cþ½$I’¤ÞfÙ‹B‡Se8}Gç~øáœuÖYœzê©Lš4‰D"ñBÈ–-[¨­­å™gžá†n „Àõ×_Ï_üÅ_l÷Yï¼ó¿ýíoY¸p!=ôжKö~/ÆøÞx’$IÒÎ@ö‚Â0à_gëîè£Fâë_ÿ:!}ôQ/^¼m`ذaœ|òÉœy晜qÆ 0à}CȪU«Èd2ü×ýwß}7|å+_áŸþéŸvÚÆÅ‹3}úôÎ)Z«bŒ‡ìôI’$©X„¾‡B×߆AiÊÕ׿þuf̘A.—£X,rî¹çòãÿ˜_üâL™2…çž{Žúúzêëë¹ÿþû¹ÿþûI&“{챜~úéLš4‰#<²ÇÏËd2¬]»(¨÷ë×––ªªªH&“Û]“Ïçyæ™g8å”Sxä‘G>BÑô)I’¤23€ìŸÿ¼õï\pÁüõ_ÿ5•••tttt;÷ÄOäÖ[oåàƒfÆŒ¬Y³†§Ÿ~š—^z‰·Þz‹B¡ÀóÏ?ÏóÏ—VÐ;v,S¦LaòäÉüñ¤R)2™ Åb‘ºº:^|ñEr¹Gu›7oJVWW3`ÀR©o¾ù&·Þz+#GŽÜv©à,pb¡–Ò&†…2<.I’$É)X»+„0x HwÜqüÃ?ü'žx"µµµär=o2øgög<õÔS\tÑEœzê© 8T*ECCÏ?ÿ°ø«ܶXc|õƒ>I’$éý@vSapÀ·¿ým¾õ­oQQQA"‘ “ÉÐÐÐ@KK …BÏ3›/^ÌܹsY±bÉd’±cÇ2f̆΀H§Kf³YÞ~ûmÞ|óM6lØ@6›`Ĉ\uÕU\xá…ÛÝû…^à7Þ •JÑÑÑAee%ƒ ¢££ƒÅ‹óðÃ,þa'Ý{'ÆøÄ= I’$©Ö€ì†B† 0€vËçóŒ1‚ššZZZhmm¥µµµÛ X“'Ofòäɼùæ›<ùä“]¡á©§žÚ.´¤R)FŽÉÉ'ŸÌqÇÇ©§žÊ„ ¶kS¡Pàž{îaÀ€„èèè •JQ((‹TUUm;š²y'Ý{x~7$I’´SÝcŒ!„-ÀðÚÚÚ®÷‹Å"étšb±H2™¤ººšêêj<ð@ÚÚÚºIg™0a&Là²Ë.J!¢µµ•ææfbŒ 8þýû÷¸²Õ¶Ö¬YÃÒ¥Kéß¿?ÍÍÍ@©n$“ÉN§) ¬Y³†+Vt^òL·)ÏÅWíÙÓ‘$I’vÌò„FçR%Ø _³fMçv.Ác$•JQ]]M¿~ý1bíííÎ €IDATÛ…€d2É Aƒ4hPO;˜÷hñâÅ$ Z[[ !L&ÉårTUU‘ÍfùÝï~ÇC=Ô9ºò{`É{nÓ,Ž1nú@D’$Iú€ »hë.çO³uêxýõ×{O6›í #;ZÊ`ÅŠTWWóÖ[oÑÖÖFŒ‘d2IGGäóyêêêøå/I]]@pÐSay;ð@Œ±£‡c’$IÒ^eÙ!„ËÛ>ùÉOòÃþ#F°fÍæÏŸÏ½÷ÞÛ5r1xð`.¾øb.½ôRŽ9昃GO¯d2É€¨®®&ŸÏ“Ëåˆ1ÒØØØmšV.—cýúõd³Y^{í5 …Éd’#…Bt:M6›eÙ²eÜ{ï½!f=ðCàít¯#ÆxWï?EI’$ɲS!„?¾œ¤õ«_QSSC&“¡££ƒ~ýú1pà@.\ÈO~òV¯^ÝuíÇ?þq¾úÕ¯rá…2tèÐíBGkk+o¼ñ#Gޤÿþ]Óµ*++8p ƒ "‘HÐÐÐ@6›eíÚµ„X²d õõõ]µ%Ùl–T*EŒ‘ööv|ðÁ®ÝÔg¶t³x8ÆØÒ;OQ’$Iz—¤!„ÁÀÿ.ë|ï”SNáú믧½½ƒ>˜ŠŠ ZZZÈd2äóyjjjÈf³,X°€[n¹…¶¶Ò¿ù+**˜6m—\r §v@WùÕ¯~ŲeË8þøã9ꨣ6lUUU]!¥ÿþ 4ˆÑ£G³iÓ&n»í¶®]Ò;÷ùH¥RäóyêëëY°`[Wå* €û€÷û׿1f÷îS”$I’¶gyÂÀ-ÀÁÇç’K.á›ßü&C† ¡¥¥…%K–°nÝ:ÆÏÈ–-[hooïZyª¦¦†åË—óÓŸþ”gžywÅÛšš.¼ðB¾üå/3nÜ8R©™L†5kÖðâ‹/²iÓ&ÆÏرcœÖÖV–,YBSScÆŒ¡ººšÖÖVV­ZÅÔ©Séß¿?!ž{î9æÍ›Ç}÷Ý×UX^]]Í”)S¸öÚk9äCˆ1RUUE¡P —ËÑÞÞÎàÁƒYºt)ÍÍÍ455‘ÍfiiiaÁ‚¼úê«PšfõðsJÓ¯v&R ¯öÚÔ$I’v`¿ !„!À­À@8ì°Ãø—ù?üp€ȶ¯ŽŽª««™8q"•••¼õÖ[¼üòˬ[·ŽL&Ãu×]Guu5mmm]«eµ¶¶rï½÷rà 7°råJ À/ùK<ðÀnÓ¬ Tï±|ùr‰õõõ¼ñÆÜ~ûíÔ××CiÝéywó÷Ê¿‹1®Ý«Q’$IÚEn®5j÷wÇa‡ÆAÔÞ/„lû7ntù|ž#C‡íÚ©èšÊÕF^ýu¾öµ¯±lÙ2Î;ï<¾óïJ¥( ]»¡766²vm)3,Z´ˆ;l6 ¥¥uÿX· ]m1îÊô,I’$©W$ÿöoÿ¶¯ÛÐgB)à 5mÚ4æÏŸÏa‡ÆÒ¥Kyà€ÒÞËäîŠwÞy‡^xñãÇSYYÙµ¡`"‘ „@"‘ ¢¢‚~ýúB ™Lòøã³jÕ*^{í5î¼óNÞ~ûmú÷ïOMM !V¯^M6›å–[náž{îé /OÿhØ…fÕSÚí¼ù?$I’$i/JõuúX(}ôÑ,[¶Œþýûsä‘GrÆgð‡?üûî»ÊÊJŽ;î8ÆO&“ÙáÍšššxþùçI¥R444°zõê®)ZãÆcàÀTTTt‘wttðÌ3Ïp衇òðÃÐÒÒÂÝwßÍÝwßMMM §Ÿ~:1Füq6lØ¥iT·ì h6ný3¼c|¿ÚI’$©×9+„G€³Ž8â®»î:ú÷ï”ê.:è ÆŒC>ŸgÉ’%¬X±‚£Ž:Š#<’ŠŠ ÚÚÚº¦^mܸ‘'žx‚ŠŠ þøÿ˜l6K.—#›Ív½R©Ç<Éd€U«Vñ›ßü†b±È÷¾÷½ÎђߟõÐÜFJ£¯¿çýw(-»› îé!I’¤}•$„OQšÎ”®¬¬dòäÉL›6ššš®sjjj7nC‡åÕW_å©§žbàÀ}ôÑ :”Õ«WóÈ#PUUÅôéÓ‰1v ¹\ŽÖÖVž~úiÎ=÷\?üp¸ûî»ÉårÄùÑ~ÄÆ¡0^Ž>ày`1Ýw5o^Š1¾]–‡%I’$í¡ý>€„¾ ü¾õgŽ=öXÎ>ûlŽ8âbŒ 4ˆñãÇ3zôhêêêxöÙgY¾|9Ùl–áÇsùå—wÝsÛÒÚÚÊc=Æa‡Æ´iÓhkkãÞ{掠µ•#1F~ðƒÐÔÔð]Jûyl«h¥THÞ¶õUcÜ•úI’$iŸaÙ*„ÐÒjXׇt¾?nÜ8Î>ûlN:é$’É$1FÒé4ãÇg̘1TVVR__ψ#xôÑG™0a£G&ŸÏw…û'rÎ9çÐÚÚÊ<Ð-|¬\¹’›o¾JÁâO€Jµ¯¯ÅËÿD$I’¤½Ïò!„œ üðJÓŸ2dS§Nå´ÓNë¶*ÖÁÌøñã:t(K—.eÑ¢E ¦L™Bee%O=õ£G泟ý,[¶lá‘G¡££ƒ#Åb‘ºº:fÏžMss3”6Bü9¥ò»ãú¾x’$IRo1€ìDáÀÿþ¨¨¨¨àÓŸþtWHç(ÆÀĉ©©©áí·ßæ÷¿ÿ=µµµsÌ1L:•ÚÚZ{ì1ŠÅb×5kÖ¬áæ›oîœzµ øP <clï«~K’$I½Å² Bßþ¥¢pBy䑜uÖYuÔQ]¡¢¢¢‚c=–Q£FQQQA+Vð /tcäÙgŸå?þã?:W¾zø°x6ÆX쫾J’$I½Éò„*K)ŠÞùþ˜1c˜6mZ·:€“O>™¦¦&^z饮àÑÖÖÆ/~ñ ^xá…ÎËÌ^ˆ1¾TÞI’$IåeÙM!„)”‚Èy”64dðàÁœ~úé|æ3ŸaÀ€ôïߟÊÊJêêê(‹<÷ÜsÜu×]S® À/(Õ}¼c|®¯ú"I’$•‹d…Žþ'ð  NsòÉ'ó™Ï|†#FðÜsϱpáBjkk;/[ Ü@iêÕ«”F?üEH’$é#ϲ—„†×QZFwøNkîîêcŒµ;8W’$IúÈ1€ìe!„ Ju" Œo¿ïPÚhpµ£’$IÚß@zÑÖ=E†ýÐàòº’$IÚŸ@$I’$•M¢¯ I’$iÿa‘$I’T6I’$Iec‘$I’T6I’$Iec‘$I’T6I’$Iec‘$I’T6I’$Iec‘$I’T6I’$Iec‘$I’T6I’$Iec‘$I’T6I’$Iec‘$I’T6I’$Iec‘$I’T6I’$Iec‘$I’T6I’$Iec‘$I’T6I’$Iec‘$I’T6I’$Iec‘$I’T6I’$Iec‘$I’T6I’$Iec‘$I’T6I’$Iec‘$I’T6I’$Iec‘$I’T6I’$Iec‘$I’T6I’$Iec‘$I’T6I’$Iec‘$I’T6I’$Iec‘$I’T6I’$Iec‘$I’T6I’$Iec‘$I’T6I’$Iec‘$I’T6I’$Iec‘$I’T6I’$Iec‘$I’T6I’$Iec‘$I’T6I’$Iec‘$I’T6I’$Ieóÿ»>ó$I=´IEND®B`‚lasso-2.8.2/docs/lasso-book/figures/PaxHeaders/sso-brws-art-1.png0000644000000000000000000000013214404126113021572 xustar0030 mtime=1678814283.093737811 30 atime=1678814283.045737539 30 ctime=1678814323.153965518 lasso-2.8.2/docs/lasso-book/figures/sso-brws-art-1.png0000644000175000017500000006702714404126113025056 0ustar00bdauvergnebdauvergne00000000000000‰PNG  IHDR ¡™Ð< pHYsÊ&ó?tEXtSoftwarewww.inkscape.org›î< IDATxœìÝw˜Uõµÿñ÷:em¦‚`½XÁAÐ1Æ$¶kI®7šr£ÑkÍMbnòKnbŠÑ$FÆ®‰앨Q±R¥ˆQP@Ê´SÖï]ÿ€ˆˆˆˆ´‘™nfך١­|É^À|àìö›UsfÖÅÌz¶púÐp>'ŒO˜YO3«éˆùÉ–CˆˆˆˆHÛíALìÞÙY‡€efVÑÊñÛË€ÿ×n3’-Rª³' """"ËÝ'ÖÙó-ƒ‘vdf)à`;à}àÉV¼f(°PÌžw÷|јÞ@wà  ϸ{®`ì  Køíöf– ¿^îîËÃmV[KÝ}•™u ç ÐÝ̆ÜzaxÜýÝæß?œûÛîîëûyeË¢-X""""íÄ̯×Ó¡-Œïnfwó€[¿SWÍl‡¢áÿC·q80xøððœ™õ(û0.üzvøºùÀyá±Cižr4ð\øõW ÆÏº?ޛ⟡kx[|H) @DDDDÚ™%{òB.ú;ÿ~Sb|ø;0‘ ¸Øè|`5b²™U•¸Õ_ ‚•ÝÂëßìÞ3r0%üz‚h(pu Ó80üú–‚ñCUÀþyf‰×~… H¹®…kËNˆˆˆˆHûì üÉÝìî‹Ý}.pÁ G± Û¨~îî—¹û+¼þ7€%ÀØh€»¿¬ ¿}ÛÝ„å¥&îî«h{ÕÊ‚ñ ­`O³€3Â-f…Î>n[×›#[. """"íãˆðù/…ÃmIY{8JÝ>Tâ\³ÿè»{#Á6¯µ¶G•Kø3\K°ªsttÜÌö&ºnq÷5-¼\¶p @DDDDÚÇÀðùíç”8%zÿËÌ–>ølŤO‰×-*ql%Á6¨öt#PGó^&Ñ××¶ó½e3¦*X""""í#JÀnmyÛDøšK€l cJUÊ—8ÖîÜ}…™Ý œ&£œ ¼àîotÆœdó DDDD¤}¼>>,:W\Ñ ‚•’QÀsîþZ;ÌgC¢ÖŒ¿ø÷ðñÁª‹V?d´KDDD¤}<>ŸQxÐÌ 8½Äø{Âç Úi>KÃçž­ÿ A²UKÜ}ð"ÁÏx°¸£ s”-€V@DDDDÚÇÃý7Î0³Eåqk€‹Á%Æÿƒ —ÇWÂ’¼¿!ÈýèEPb÷kµØÈùLŸefrÀ wŸYj°»7šÙ[À83;Xžú»»g †þ ÇɶÀoܽn#ç'[­€ˆˆˆˆ´ƒ°\íñÀËÀe‰çÓÎ]ÇøkÂç©[·fw;óY°1þBÐ/äØðù`Òz^sA÷ö_…ãï ¢ ÝDå|ÕûCÖËÔ RDDD¤m®㽀Ý}eѹA#Àí*V=¤ JØ.s÷%®·A3ÁZ`0ßÝçé tÞq÷\ѹ~@w/Um 3ëC¯±ÜÝ—›Y °5°ÔÝW•_žO Ã`):× øxÝÝG·ð‰Ä€ˆˆˆˆÈF3³ÿ~|ÙÝ•ÿ!ë¥DDDDD6H˜HÁ*ÎTð^¼#RŠÙ ᶲмü»»ÏéÜYÉæBˆˆˆˆÈç”™m <éîs[1~Gà0àQw/ÕÁ]¤ÍT†WDDDd#„‰ÜSН&ØŽô4p³»·ÔѼ£ìEÐð`½0"ÁÏ!Rv*Ã+"""²qÒÀ>Η‡ ‚Ò¶2³tçM€%Àc´­|¯HYiDDDD¤m^w÷#£oÌlàQà‚•‡?wÖÄÜ}*Á,‘M†‘2r÷ÅföSà¯Aȟͬ?p ð<ð.ðu`0Óݯ0³.ÀW¶M¥€™ÀßÜ}itm3 ìüÃÝ?*¾·™íC°*3ÅÝß[Wˆ™íNÐ]½AÇõ›Öõs™Y-p°'$hªx³»//w4ÐÏݯ7³€ã€žÀ/”¨. DDDD¤=DÁA·ðy‚ÜŠ_äW Ø5¸ÚÌvKàlà 3;ÞÝŸ ¯³Ux¾ÀJÜ÷WÀÞÝÉ¡…3;¸ x+œÓ÷?•úaÌìàn‚`å=‚êWg—˜Ù8w¥`øùÀè0Gæ*`%àÀ]€QˆˆˆˆH;8$|.îD~>ð ÐÃÝûÇ™YŠà?÷Û§»{_wßC Üv=‡ Hù85ìÅ3³€QÀ½ÅÝØ‹Æ þ^g˜»ïJX\K„ü ØÏÝ·s÷Öî ;¥ªÎw÷Úðú϶4'Ù²(i›j3>ö3³K þ#Ÿ%Xe(ôð-w_àî«£€][Ü=ïîtïE°e‹°ªÖÍÀÀE×>0àÆõÌ÷L ø»Ï ¯ëÀ¥Û¾ŠÔgºûËó{ ¸ ØWôšp‘»?ŽÍ»{ýzæ%[ """"m3˜>^~| |ÕÝ_-û°»ç‹ŽEÄ%®}Gø<ªàØ áó©Ñp5äëÛ£_Ï|G†Ïÿ(<!/1þ @ðž™ý›™í=VE ØêU¬¸D± ‘¶z‹ ·‚ü·YîÞXbì¢Çú†Ïï—8÷^øÜ/:àî3ÌìeàD3;?\Y8 ü¤D€S¬°2³gÍì+%Æý§™Ýaf=Ììfö¦™}bf_2³?›YÉÕ 3K›Ù-föã‚cWšÙõ%ÆÖ˜Ù…fö¯p. Íìa3;¥Ä؉á¹Ìl±™=bfcZúÙEDDdÃ)‘u‰öðof­y™}xØx¸‰`©þofvEÑðý€IÀ_ïÓ ªÁ4FPf··98™‚=Í9 ŠæÒxø)A}ü[ ’-+ öY޽*<7˜ ÚÌmI÷™Ùé­ùÙEDDdý´KDZþ~:ÁJÈ{Àdà9àiw§Äø]€7€iÀw_O䌆¹û¬ðøy$3ÃÜ}IÁµ&¨Òò3w¿°è>÷_¹û¢ðØÓáµ{Œ»8 øowÿIÑ5ú¹ûGá×_ çø•hU',‡ù4A­üAî¾lÃÞA)¦i‘»¯Fw}sª,4³WKlO:Hß‹‚ð:à ‚ß9'”¸Õ•…ÁGèY`>ðµÂºófÖ› y4 >J kÒŸÌ®*ñ³}Tðí7 VH¾U¸¥ÌÝW‡¯íÞSDDDÚHexEdÜý=àÄp5àP`‚-P{lOšäîQƒ¬ýÃçÃÍì ¢KU…Ï;”¸Í+%îëfvAùÉ# ÊM|… ƒïů)2Œ`«Õ ¾þ¥Þý JN~ÝÌŠÏm³Žy‹ˆˆÈR""­®<>.3³ó€_Ô¨Z ´”3Ѭ}[p9p*Ÿ §+€¿¯gÊÝÂç×3 APsv çÔð‘6R""Åݯ6³ËͬÚÝëåÉã{·ÐkCï±0Ìí˜`f=rQö®u÷†õ¼<Ê×Њ[­jÜ}èÆÏVD¤ó„¹v§t&ïKPDäM‚*†s[±,Òa€ˆÈF1³Á§iÓ¦ñÊ+¯ðòË/³páÂèô@>k6 p–™Ý|]Ûµ¤½©ˆˆ´(\5E4ìô#høðð—Âr»¯|IЄðc‚@ä~‚“¨ÏƉÕ´® sHZšÇ«¿v÷Å%Æœôs÷O'Ç@u¥yow÷Ç‹ÆîJÐ7d_ † ý-‚æˆÏº{¾¥9Šˆ´73ëIð¡ÐleçwæÊ+¯äˆ#Ž 5ÿ§[¾|9o¼ñ¯¿þ:¯¿þ:¯½öï½÷^áï»ûÿkù‹D€ˆˆˆˆlƒÎ.#ØNEïÞ½¹ð ùÚ×¾F*lhÙØÿÓÝpà \tÑEär9€î>¬,i¶`‰ˆˆˆl¢Ììp‚­§»TVVòo|ƒóÏ?Ÿnݺ­ûÅ­PWWÇÒ¥KÙyç™9s&ÀÎm¾¨Èz(ÙĘÙvÀÿ&…ß3qâD.»ì2 hMuñõ{íµ×xüñÇéÖ­•••ÑádY..² @DDDD6a•Áï? ÈEc§vâG?ú‡vXYî‘Ïç¹ãŽ;X¶l]ºt!›mV¥\{ó¥Ý)‘fÌì ºàPð.𖻯éœY}ÆÌúÓ?ºû…­?” aþ×î~e{ÏODdc™Ù‚²àCjkk¹à‚ 8ãŒ3H&×½0ÑÚü>ø€‡~˜¦¦&’É$™L†ÊÊÊÂ×+‘v§DDŠ]Céîá«ÍìÇîþÓŽžP‘ГæAÒº$7p¼ˆH‡2³/T·: ‘H0iÒ$®¼òJzõ*_ ¢gŸ}–ùóç“ÉdpwÜêêjêêê ‡)‘v§DDJiF‡_§}€+€«ÌìCw¿¡“æ°„ L®ºøŠÈfÏÌŽ ̽9r$W]u»ï¾{Ùî±zõj{ì1V¬XA&“!—Ë‘N§qw©©©‰*`¨Ü¸´; "RJÞݧ|ÿ‚™}Üœ ÜPü‚°ßÆ ÂÝç@Ð5ýƒR}C6DØCdZKçͬAãÀÝ}Yk®ö-é,jÍü̬{xÝýÓVM\D¤ˆ™Õ7É­·Þšþð‡Lœ83+Û=¦OŸÎœ9sX±bù|>^õhllÄÝ©¬¬¤¡¡D"½D+ Òîë""À“áóP3ëbfËÌì:3;XHРðµèfv‚™Í#è˜>Xffw™Ù6c ¯sE©›šÙ)áù¯‡ß÷¿ÿߢq)3û°˜,5³{ º¹—dfg›Ù;9.³€OÌìoa³¯Âq—„÷if%èˆ>›‚.ð""aÐËÌøë_ÿÊqÇW¶à#›ÍòôÓO3cÆ >ýôSòù<Éd’ŠŠ šššH§Ó$ 2™ ÕÕÕ…‰è @¤ÝiDDZ«Oø¼:|6‚ÜŠCº”_G°2ÑÀ̾ Ü ,¾¼Œ#XAÙÓÌö W^>þÝÌ~X¢Ûø@Auh9äWºç’þƒ«5áü.'ØVö\ø¼”`ÿõùÀf6ÊÝ3áðªðž *Ô,>(ùN‰ˆ´Î¾{ï½7;ï¼sœžJ¥hjjÚè‹.]º”™3gòöÛoǹ•••d³ÙøѪG:Ö ˆt8 "²^aYÈ…ß>Ytz'`¢»ÿ£`|š ’K0Ê݆§þnfËÊK~øwÏ›ÙM~-¸ÎöÀÁÀmî¾bóÛ Øø0. Ììàåãwï÷80¦ èyÀÌÞ~ |¸©è¥MÀHwoli."" `«­¶¢oß¾@P"7ÊÓ¨ªª"›Í¶ºÊÕ¢E‹˜>}:‹/ŽUUUQ__O*•ÂÌhjj¢²²’ÆÆFòù<•••d2Ñç- @¤ýi –ˆ”Rifw„‡¶WH°•ꊢ±o¡ý VBn->"?²["7üÑ;µhì)+-7®g¾Ç†ã®.Xµ ~SbüW~ÿý¬ÄŠËŸ’0*ñº_+ø‘2ÊCóºîN"‘ ªªŠŠŠŠø\6›%™L¶¸E+—Ëñþûï3uêT>üðCR©T¼ÂQUUE>Ÿ'ŸÏÇÛ°***032™ étºÙœDÚ“V@D¤#¬CO,L^þP"±û­¯ß!|ž^|ÂÝ—™Ùû+'ѱùfö,pœ™uw÷•ü•=X<¶žùF÷›Yâ܌Ǣò2—™Ù÷KœÏQºq©ŸUDdc­€~ïîd³Yr¹‰D‚\.oŸJ¥R$ R©¹\Ž—_~™3>ûuWUUESSîNUUUüšh…¥pU$êݾC~rÙ¢)‘RÜ}ßVŽ]YâXEøÜRãÂ5U¤ Ý@°Ýjðgà ‚ è§îžcÝ¢ûÕ•8WjQþÈ<‚œŽb €·KoS/‘"ÄÛ­V¬XAMMMp¢((Éd2äóyV¯^¯VD=Bn¿ýöxË•™QQQAcc#étš|>OSSÕÕÕÔ×דL&I¥R466ÆI"‘Pˆt( "Ò¢‹O„+‹NÝE°]êT‚$ÚŽµ¾íW…ÏX{•b­9$Æ\ãîÿjÅõEDÚC‚¼€)S¦ðÎ;ïpÐA1dȺvíºÖö,€††Ö¬YC"‘`Íš5|øá‡¸{ÜÛ#ÊñhjjŠ’†††8ïÃÌ⯣q}@€H»Sˆˆ´‡ç ¶nö)4è<[x0¬ˆu70ÚÌöN^p÷Ù­¸ßÔðùøçN(q,Jt?¥×i/Ͷ`}ôÑŒ;–—^z‰Ÿüä'ÜyçÌ;—U«>[|ªZ¬Y³†O>ù3£ºº:îóQ\@?RUUK&“d³ÙµJòÎI¤=iDDÊÎÝ—„•­Î~cfßu÷Æ0°ø-Apò«/½‘ (¸… H¹¡•·|„ ×ãL3{ÆÝïWZN%ØÒUìn‚êXß0³ÅÀ/ܽÀÌú'³Üý‘VÞ_Ddc4[éÚµ+Æ cذa444°páB^xá>þøc†ÊàÁƒéÙ³'UUU¸;ù|>NN¶\år¹8Ç£¡¡!.¢ŽçuuuÍz€Dã¢9 é @D¤½|ØŽ <î™fö AÞGpvQ§õÈS·†…ãnoÍÜ=öy ¸ÝÌ~KФøoà%Æ^ÿ€+ÌlРßGž R–ˆHÙ™Y/ –¢$’ËåH&“ <˜!C†P__Ï»ï¾ËôéÓÉf³ìµ×^ôìÙ3B€x…#‘HL&ijjŠƒ‹d2¯ŠŽK§ÓñªˆéH @D¤Ø7ù,©{]Jó¾[ꤻ¯2³1À‘Í »$vßåî-½&ƒ€OZèýñIxßyE¯af»_#¨Šõ!pA~HÔ‰½pübà`3;” ù½/ðq8LJݽ0Gå6àõ–~V‘Ö2³C‡þøÖ[oxòÉ'WD½8`ír¼îN&“ÁÌ8p C† ¡®®3£¡¡¡Ùv¬ÆÆF***âjVQ"zT +—ËŹ étšl6÷ihh(,ï«DÚiÆÝhå¸,pçzÆ8Áö¨Voer÷×q¾¾¥û†%‚¯.qªÅyºûS+/ëšÓtJ”Ù_8òÈ#pµµµµ·Ýv[€Ìš5‹ž={Ò£G8 (,É[__»Ç ã…Hq©Ýl6Kuu5uuuTTTÍf›K¥‚ÿFAJ6›æ§DÚ‘ŽóÇk¯½ö”gžyf`ccP< $–,YÂÕW_Í;ìÀþûïÏöÛo_²Vá–­è\aå«d2I"‘ˆËïF‰»Ç¹ ѪGa)Þ’Ð¥Ý)é îþ°™ ~ŒŠƒ>˜‘#GòöÛo3cÆ üq Äî»ïN¯^½èÒ¥Káuâç(àˆò9¢âcÀZÛ°¢Dt5"”ޤDDDD¤ƒ¹û3{[¸•*‘H0xð` Ä‘GÉ|Àœ9sxñÅÙzë­Ùn»íØj«­â&ƒQ·ô¨·GSS©T*ÞRåxDÛ°2™LÜ”0•Jafd2™xK @¤(é”LBŽm½õÖôë×l6ËÒ¥Ky÷Ýw©©©‰w§¢¢"D¢€£° za5¬T*ECCUUUÔ×דN§ã $”E¤)ék•á-\ ‰¾V:zöìÉV[mE2™dõêÕñØÂf‚Å]ÐS©T‹Ñ£ü¨toHˆ´;uB‘M’™U™Ù6=‘v …Ç’%K¨««‹žËf³ÍÎE¥ts¹\\D‰™ÅÑ3™ A…õL&Ól¥$:R"íNˆˆl2Ì,ifÿnf €zà3[afSÍì—fv’™ êìyŠˆ”IɹsçrÎ9çpÍ5×0kÖ¬8Ÿ£TŸ Yp‘ÍfãÞÑÊFp466’L&I&“ñv­L&£épÚ‚%"›3 üØ£èT`TøˆÆ~DÐ+dZÁ`µ»¯jÿÙŠˆ”E³ÈÈÀ[o½Å£>ÊÝwßÍî»ïÎ^{íE¯^½âqQ5,\ሂ3‹;žç‚DK&“)ì"ÒH§2³= 1á÷L˜0SN9…ªª*æÍ›Ç믿δiÓ˜1cF´M ðÅðQ¨ÎÌî.o©ÛºˆÈ&¤Ù Hñ ÇСCÙe—]hhh`þüùL:wgÿý÷§OŸ>ñ¸¨²USS@pDÛ±òù<ét:î RØ=Z‰¤R©]Íìçîþý{d‹£DD:…™õþ8p;è~ûíÇ•W^ɾûîÛwß}9餓hhhˆƒ‘×^{×_… þÑ® ¯7ÂÌF¹ûòûDD6Ü:“Уîçù|žAƒ±ãŽ;ÒØØH>Ÿ§®®.›J¥â€#›Í’ËåâÕŽt:M&“!ŸÏ—¬|UØ# GTWWÿ—™ ~ üÓ ##‘2P""Ê̺ߺl·Ýv\vÙe{ì±qÒd)UUUŒ1‚#FÄÇ>ýôSÞxã ¦M›Æ7ÞÈ¢E‹v ïqQ;ÿ8""mQ2 Ö^ Éår¬Y³†\.×,@‰ªdEÁEEEù|>Þ†UWWG*•Š›v>VE¢$vú\rÉ%ÔÖÖž°bÅŠn½õÖ•fö0ððwÿ´ãÞù¼‚T IDATRºˆt | x ¸èÒ£G.¿üržþy&L˜€™mðu{ôèÁAÄ·¿ýmÎ;ï<ªªª¢SG–oö""í¢Yh9Ѽð\aÀâîqùÝêêj2™ fÕÕÕäóyòù|\~·²²Ö‹·aåóy¦OŸÎêÕ«éÓ§—\rI÷©S§Nºûî»o<묳–÷èÑãy3»ÐÌöiÿ·G>¯´""íÎÌö®&L$O¥Rœ|òÉ\tÑEôîÝ»Í×wwn¿ývÖ¬YÀ˜7o@Ï6_XD¤}•LB_ßjHñ*q"‘ˆ·aV»Š‚‹t:M.—#“ÉPSSC]]]¼ +›Í6Ë©¯¯çºë®[™J¥æpÀ{ï³Ï>6tèPjkk9î¸ãìë_ÿúù|þ€×_}÷Ýwñ´iÓûêv|¯äsDˆˆ´3ëü8‹pÅõ ƒâÇ?þ1»îºkÉ×lèVã?þ˜[o½•t:M*•R%Ùœ¬•„¾®À£Páö«èär¹¸$o}}=©TŠt:7 ,<ÖØØwV¯««[ŒhllüØÌú>ñÄGÇì²Ë.GpÀ5»í¶ýû÷gРAüüç?ߦªªêì÷ßÿìÇ<[]]ýLCCÃ}À½*"ë¢DDÊÎÌ’À9Iæ[l»í¶\|ñÅœxâ‰e»Ï3Ï<ÃŒ3H§ÓñðD"ÞYª¤IÙÔ­•„--(Éd2®†UXj·0©).ÙÛÐÐ@MM qµ¬Ðwÿ8¼þà&à&3KΞ={$pLmmíø‘#Gî±Ï>û0xð`zôèÁñÇŸ:å”S¯¯¯?|Ú´i¿Úu×]Íž=ûnà~àwo ¢DDÊÆÌÀh‚íVÿP]]Í·¾õ-Î;ï¼xßq[544pß}÷±zõj‰¹\ŽT*…»®€(‘M]«“ÐK‹Žg³Y’Éd³¤ò¨a´*’J¥âU‘h$jDØÔÔ¯€ÐB#BwÏSÃÇÌlè”)SÆ'“Éñ{ï½÷FŽ™:t(}úôa·ÝvãÚk¯Ý6‘Hœ7wîÜón»í¶Õf6ÂÝg–õݓ͖)‹p»ÕÀѱ±cÇrÕUW1pàÀ²ÝgöìÙL›6ºººxÛAaU—‚üº®#"² (Y†·ðëÖlÉŠ*_&•§Ói²Ùl³jXétºYrzT’7‘HD=– •ÐÝ}>ðà7fVóÒK/½õÖ[O5jÔ6Æ cûí·§¶¶–ï~÷»]yä‘# (‘2W>î" >vß}w®ºê*FŽY¶{är9{ì1>ù䓸.¾™ÅŸîEI–Q)I´""›¾6'¡G[¯¢|ŽÂÞ©T 3‹ó>1³xVuuu¼ «àÛ N¤s÷:‚ ¾ifÃî¾ûîñétú‹#GŽ "R_Øm·Ý8÷Üs©©©Ù¨ž¥¼ù曼ð ,Y²þèF •”ôö<çóy­€ˆÈæ¤Å¯×u.Úzm¥ÊårÍV£¼(9=“ÉÄ«"‰D"þ=pàÀþ÷ÝwßžS¦L)KÒž»¯Pð!Å´""å°=ÀHß¾}㕉D"AUU™LfƒËë6440wî\f̘A}}=îN*•"™LÆû—›ššâÕhV "²©[k$RªìnK_GÉçÑïÈRÛ°ššššåËEÛ° +dÔÖÖn•J¥¾d&Ožúèåíö.ÈGˆˆ”M´‡8™LÒ½{÷8IýôSfϞͬY³â±•••d³Yòù<ÕÕÕqBe>Ÿ“,£@%¤$tÙÔµ) =z]K[® ·§6*,܆}x]+™Lzxý4°k>ŸßÕ̘?:‘HŒîÚµkÓäÉ“ç3ÍlÖ¸qãV–éý-„)â`¢¥Ž½är9‰©T*~¬ZµŠÞ½{3kÖ,ž~úi²Ùl¼­ ŸÏÇ[¢ .…É“™L&.Å/œ“ˆÈ&¬Ù‡7Û $Z®¯¯oV’7 .¢cQÀÑÐÐЬŠ`T¦ ™L®wõØÝ+€]]ÝÝ'Ož¼(ŸÏÏK¥R3:ê¨wÐï_Y "RÍ)_|ñE @mmm¼-«ðg&“¡¡¡•+WRQQAß¾}ùè£xâ‰'âqQyȽÊQ©ÝÂFZ…\*++ WT´KD6uq²1IèQ9òât:è(^-nllŒ·håóy*++¹ÿþûã> Çg$‰ù|þÐÉ“'¯q÷9¹\nf÷îÝß:ôÐC6â}‘Ï9 "RÍö1/Y²„«¯¾š=ö؃#F0tèPºuëVòi}}=«V­bñâÅ@°-+J4/ 8Š·D[®êêꨨ¨ÀÌÈd2Z‘ÍÉ:“Ð[”DMX£€£©©i­Õâ(‡. >¢Äõ[n¹…çž{€vØaîqÇ7¯?S3Û;•Jí½fÍšüƒ>ø®»ÏÌçó³Ž=öØÚxmùœP""åŠgfsÌ1Œ;–wß}—_|‘É“'³Ã;0lØ0úõëG—.]âF[³V­Z—Ò-L¨L&“ñ6¬ègT]«°‘V´R¢2¼"²qX; }CVC¢B…G”÷Qø»´ðÊÊJ/^Ìþð-ZÀn»í6ó²Ë.{¤?S"‘x"›Í.vM&“;¹ûàD"1~òäÉKÍìêqãÆ5–á>²S""å°Ö§xfÆ€ØvÛmùâ¿È{ï½ÇôéÓyî¹ç8p ƒf«­¶¢¢¢"þ#ը⒑¥*¸ÿ±-èæ«DD6uͶ¯®+ð(T¼ +•JÅѣߛQcÖâc©TŠ×^{믿žºº:’ÉdnìØ±OŸ{î¹ÓÚúø{C"‘¸í¨£ŽšzHL™2e{wß5‘Hô:ꨣ|ˆÙ8fÖø.ACÓÞPº›oô‡µÿþ 0€L&ÃâÅ‹yë­·èÞ½{Ü»ÃÝãŒÂ-W-mÊVJ¢\¨ WA7_倈Ȧn­IBÏf³qpQ¼ +•JÅÔ455ñðÃsï½÷âîtëÖmå¹çž{ßA´¸­?ˆ™-I¥R73fIñÏ8nܸùÀü¶ÞC>?€ˆÈƺøÒK/=¯wïÞüßÿý .lVí*úD.}:—ËåèÝ»7[o½5îÎêÕ«ãqѾä¨þøc‰Dþˆ#Ž˜úíoû_m¼»çÝý¡cŽ9æ©¶^K¶, @Ddc]qÛm·­¼óÎ;¿X]]½`QIÈQ£FñÆoðÛßþ–~ýú1|øp¶ß~{ºwï´üé^&“Y«¬naÄy…Û° ·fiDD6#ïF_,Z´ˆnTz´ÚQ¸ +ê“ôüóÏsÓM7ÑÔÔDMMÍšsÎ9çþ/|á ï•aîkR©Ô-cÇŽmkÕ,Ù)‘âîuÀ€™ÙíÀ‰Q¾ÇàÁƒ8p cÇŽeÑ¢E,X°€{ï½—ÚÚZvÜqGúôé—å ¯o#ˆö*GÁEaw_+9=*%S'tٌ̖}¾õ­oñ³ŸýŒ¡C‡­Û†efqÓÁ(àˆŠvÔ××sçwòè£0`À€÷.¹ä’û¸¦ ó~¿©©é¦‰'®(õd ¤DDÊ¡ÖNB73¶ÙfúõëLj#øðÃy÷Ýwùç?ÿIÏž=Ù}÷Ý©¬¬Œ/~B'•'“ɸé`a—Â$Ë\.)UUUjD("› ww3»¸æ…^°C9„Ñ£GsÆgp衇¶j5$ŸÏÇÛS£\¥K—òÛßþ– 0jÔ¨.¼ð©Éd²ÌükÍš5Ÿ4iRnýCEJS""åЬ”d¤p…#ŸÏÓ«W/zõêÅðáÃY¾|9555q’d´ÒØØØ,àˆ:÷Fyî¾V\.¿¦ a¦£ß‘ åîךÙàJwùì³Ïòì³Ï²Ç{pæ™grä‘G_ëû¨Á`&“aöìÙ\sÍ5¬\¹’ÊÊʆSO=õÁ &,(ÃT³‰DâÞ£Ž:ê¥2\K¶p @D¤ZÝÍ7ªÔRSS³Vó­èh´ +›ÍÆ9QÇó¨šVeee¼RÄKAzü…ˆÈ¦ÌÝ5³ƒ €ño¾ù¦þùôéÓ‡O<‘/ùËôèÑ#?G¹wMMML™2…»ï¾›|>Oß¾}?¼è¢‹îÛi§>mëüÌlE2™üë˜1cÊ‘;"¢DDÊ¢YÁƧžzŠúúzFŽÙl«UqîGaRØ`°¢¢ø,¸(¬kßÔÔ¯zÀgÉéIè @Dd³âîÏϘÙÀ÷“–.]šþÝï~ÇÿøGÆŽË„ ØsÏ=Ïr@êêêøãÿÈ«¯¾ À>ûìóêE]ôduuu›·I™Ùì\.wÛ¸qãêÚz-‘ˆ)‡’[° ÄC=Ľ÷ÞËž{îɈ#:t(fV²ñV"‘ˆ;÷ÖÔÔÄEa]û(‰¶fVͪªªÒ ˆˆlöÜýMà3ûð à즦¦~÷ß?÷ß?Ûl³ cÇŽeÀ€¼óÎ;<òÈ#|ôÑG¤Óé¦O<ñ‘“O>yV9¦af7îQTÔCÊLˆˆ”ÃZ[°¢jXÿñÿA.—ã½÷Þã™gžáá‡fÈ!ì±ÇôîÝ»YÀm%ˆ*¸DÛ° WEÒéôZÇ¢ò»Q^Hh¨™uu÷Õýfˆˆ”ƒ»\ff?Nþ8hñâʼnn¸¡ÙØ=z,¿à‚ î>|ø'm½¯™ÕçóùÛÆ_Ž@Fd- @D¤‚üŽ–ºŸ÷íÛ—“N:‰\.Ç¢E‹xå•WØc=èÞ½{üšd2¿¦°Á`T’·0I$%·aE+ ={öÜuõêÕ¯™ÙîîÞØÑoˆˆH¹„¿Ãþ üµwïÞÛöïßÿ{K—.=4ŸÏךYŨQ£¦éK_š][[[ŽNä‹+**n:âˆ#ÚȈ´Dˆˆ”CXkKUôuq÷ó^½zqôÑG“ÏçùôÓOãqÙl–T*¯rD¥vS©àWUaô¨Ö}aô¨>@÷îÝ=zôÐ… ~bf÷÷»ûÊ|_DDÊêã?^|·à=üðÃ=³Ùl?3ë›Ïçûº{?3ëkfUxùWûõëw×>ûì£*‚Ò®€ˆH9äÂë¬_ŸËåX½zu¼e+z.\Á(,¿ÛØØˆ™5[ÉårkuA7³øõfÆi§F÷îÝ»TWW}ñâÅ_衇r]»v}fÍš5÷¹»¶ˆÈæÎÇŽ» X4ûvçwVwëÖ­_>Ÿï—H$ú¹{?wïtov÷¼»?tÌ1Ç<ÕqÓ–-™)‡fIèëkœU|.*%™Édâà"—ËÅ«¥Žâ!ѱ¨Hcc#W]u‡v;î¸#Ý»wçK_úRòôÓO?¬®®î°W_}õ§{î¹ço¾ùæÀÀ#Úª%"Ÿ'“&Mª†Ø#<Ò¥®®nëT*ÕË̺är¹9Ç{ì1GÙ2)‘r(Y†·Ô×ë:…¹ Ñ6«¨ßG´ +Ê-‰‚¨Lo4‡¥K—æ/^|ñË/¿¼8fçw>æC©ÞyçéÛ·/»ì² ¿þõ¯ûWTTœýÁœýàƒfÒéô3Ùlö~ànw¿ìï’ˆÈ&`̘1k€ùáC¤Ã)‘rXg'ôèë–ÎE¯‹V@¢t:¯z45¹•UUUqÂl6wAŽEH6›½ÁÝÿ7¼ÅMfV5gΜÑÀjkkO=zôн÷Þ›AƒÑ£GN>ùäôÙgŸ}D}}ý/¼ð¯†:Á‚wO»»öD‹ˆˆ”)‡VwBo霻“L&ãUhVEEEÜ$—ËÑØØ!…åw£ $Ú‚4kšåî ÁÄcÀÌlçxàh3;fŸ}ö9xĈÉwÞ™Þ½{3|øpn¸á†¡©Tê¹sç^øÀ¬1³¿÷¸û=e÷DDD¶ @D¤JnÁjíjH´’Ïçã€#•JÅIaŽG*•¢¡¡!.¿õ ihh ªªªpëlDèîs€9À/ͬÛË/¿|$0nàÀ9äÞ»í¶Ûn»-Ý»wçœsÎéòÝï~÷«Ï<óÌWÍl„»¿ØæwLDDd ¥DDÊ¡MIè‘D"™L&îxå}466’H$¨ªªŠ» g2™ø5õõõ$‰¨W«;¡»û*àà3;ûæ›oŒO§Ó_<è ƒößo¿ýl§vbùòåéxDDD$¤DDÊa½Ièë Jòù|³.èQpQ¸ «°)a6›mqkVA)àV …<˜Ü«áãÇfÖë‰'ž ŒÏoÌuEDD$ DDÊ¡Å$ôuÅ_»{\~·xVMM uuu¤Ói’Édܨ°¡¡!^YµjÉd’\.G"‘ø,jwÿø[ø‘6R""åàPºzñ÷ëJBº˜G[ª ;žG‰æQÞG2™¤©©©YôÂÑ£G4eÊ”³ÌlVCCÃô‰'®hÇŸ_DDDZIˆˆ”ÃuB/•„=oÊJíöÉåräóù89=ª†µzõêx$™Lš»ïèî;VTT;eÊ”Ü}60륗^zïòË//Ë ‰ˆˆˆl "R9ø,°Ø˜$tw{{d³Ù¸¬n„n¹J¥R˜Yœ÷mÊ‚€T*Õ,Àp÷þ@àðýöÛ¯îÁœgfs³ÙìÌc=vU»¼+"""² "RmNB‡ Ëy:ÆÝ›U¾Šަ¦¦fGáJIÔ½•9 5f¶'°g:>nòäɳfüñ‹·”‰ˆˆHù)‘rÈCé@£µùù|>îxžH$šõijjÂÌâ-W…² ƒ”?ü0^éÞ½{}k&îî `0 ªªêÈ|p5ðV.—›™N§çŒ7®±­oŽˆˆˆ|Fˆˆ¬ÅÌN¦¹ûÜV¾d­Nè² +ê^­€d³Ù’¹ Q¢yá6¬l6Kee% ,àú믠[·n+'NœøÖFþì]½S©ÔÞîž2eÊÛ¹\nn&“™yÜqÇ-Ù˜kŠˆˆÈg€ˆH)€[ÍlAƒ¾û€gܽ©…ñ-–á-õuñ÷Ñë W3òù|¼ÒØØwA/܆{þùç¹å–[Èd2¤Óé¦3Ïøà’T*5«¾¾~öĉ ­Z"""Lˆˆ”ò$A²-ðMàl3{¸ ˜ìî‹ Æ;4_‰Ol@'ô¼(¸(ìŒ%ª766ÆÛ±n»í6¦N @mmí²ï}ï{ÿØ{ï½?.Ã{° —ËÝòꫯ®1bÄvÙlv·d2¹k.—;$Nþ· ÷Ùâ(‘RžÒá×)>û]18ø£™]åîÿo€À†%¡G¨·Gp¤Ói2™ ©TªYÞÇÒ¥KùÃþÀÂ… Øm·Ýf^vÙetëÖ-ÓÆŸÝ“Éä3cÇŽä=öX€…ácò”)Sú˜Y÷6ÞCDDd‹¥DDš1³j‚¤ìkÿްðñpeÁñê„^˜„= W@¢kVTTÐÔÔD2™Ä̘9s&×]w]Ôù<7vìØ§Ï=÷ÜimýÙݽ)—ËÝ1~üø7Z3nܸ¥ÀÒ¶ÞKDDdK¥DD0³~À—£ƒª†Ö_v÷•†l|zôœH$ââjXÑJÈC=Ľ÷ÞK>Ÿ§{÷î+Î?ÿüû8à€Úü&ÀÒ\.wÓ±Ç[Žk‰ˆˆH €ˆl¡Ì¬|˜Èg[®Þû•á±àà w/î±ÑÄy‘Ö®†®œ÷ö03Òé4«V­âúë¯ç•W^`èСó.¿üòɽzõ*G™Ü™kÖ¬¹}Ò¤I­*Ý+"""OˆÈÆÌNNzœz¸˜âîsÌl8ðbx®¸8§Dð0 à£>âµ×^c=öˆOlè6¬¨ÔnaùÝ… ò»ßýŽ%K–H$òtÐ ßûÞ÷žK&“mªBefyw|üøñ¡ŠV"""Š«ÐˆÈç™UTµú/`ÿ‚S‹‹ëÝý­¢×$€•+ ÿçî¬ãúIà=`›®]»rÚi§qúé§Ó»woòù|œ<ÞÒ×¹\Ž9sæJŸ‰d³ÙxËÕóÏ?Ï 7Ü@SS555«¿ùÍoÞøá‡¿_†·¥øÛøñã7ª_ˆˆˆˆl "ŸcfÖ“ „îy@ÿðð‚Þ7O¶°¢½~ ð¼»ÿ°÷ú7àÀ ªW3†³Î:‹aƵxDßÏ™3‡|>O:ÆÝÉf³Ü}÷ÝLž<€¼{É%—<0pàÀ5mxK"‹Ö¬Yó×I“&-+õDDDd(ù2³!ÀùÀ@×ððÀo€kÝ}y+¯3ÐÝßÛ€ûV§ßv1zôhN9åFމ»7 <òùGÌlp)Aàåx½ü¸ÉÝ:h àxàB`ßèøÀ9ᄘ8q"]»v%ŸÏ“ÏçilldþüùÌ™3‡k®¹†O?ý”ÊÊÊúÓO?ýÁ/~ñ‹o—aZÙD"1ù¨£ŽšZ†k‰ˆˆÈFR"ò9`f}€‹º–G%t~áîuÚÄ3;ø0HÔÔÔpøá‡3vìXöÝw_V®\É;ï¼Ãc=Æ]wÝE>Ÿ§_¿~‹/ºè¢ûvÜqÇ•mƒ»ZYYù×/|á ï¶õZ"""Ò6 @D6cfÖ8— øè~¸ØÝŸî´‰•`fC æzŸÍ•Þ½{³Ã;ðþûïóþûAnù¾ûîûÊÅ_üTeee®­÷M$ó‰Ä-cÆŒ)Gˆˆ´‘‘Í™¥V;.z…‡_þÛÝé´‰µB4Mìҥ˩ ‡ær¹¸x×®]W7nêi§6½ ·ò|>ÿô´iÓºüòË[L´‘Ž¥Dd3cf$“ïš \Üå›Ù?è &ô›7oÞÑ]»vݺW¯^]Î>ûìw***zµ€µáÒÀãdz<3‘rQ"²™0³mŸ44ààbàÏîÞæ­J›’™3gVÌž=»oEEE_wï—H$ú&‰~ÀVîžX×kÍlI2™¼i̘1K:hº"""²€ˆlâÌ, üðC ;n¾çîK;sní©§žJ566öúæóù~Ùl¶_"‘èkf½€$ðš™Ý3nܸÆNžªˆˆˆ´@ˆÈ&ÌÌFv ýøOw­ófµI²ë®».¥Þ"""›> "› 3«~DÐL0,&è©qóæ–ç!"""R(µþ!"Ò‘ÌlÁªÇÎá¡;o¸û²Î›•ˆˆˆHy¬3™SD:Ž™Õ˜ÙOg‚€ î~¢‚ù¼Ð ˆÈ&ÀÌn\ \àîmî."""²)Ñ ˆH'2³”™]DDDdK¢‘`f“z{tÞ¾âîÿìÜY‰ˆˆˆt<­€ˆ´£°ÊÕOÛ ‚§ý|ˆˆˆÈ–J+ "íÄÌú·Gôö¸øž»g;ub""""HˆH;0³QÀ@àSà4wÿ{çÎJDDD¤ó))33û p=PÌŽw÷Y;+‘Mƒr@DÊÄÌfö3àoÁÇÀ¾ >DDDD>£‘2û{Ü L È÷øp±»ç;ub""""› "mdf€û€½€à,w¿¹sg%"""²iR"Òf6¸è,&ºûË;+‘ò\aà IDATM—r@D6’™{ömýþØÌÈȀ̔×óñØÂìïe¯õíãÁû±Ög­‘”ÂÇAÀ›À´㪾m•$IÒ‡›«`I=!œ,¢>^&>$I’öœ# úÈ !$€¯¥R©i1Æ|¡P¸øÅ®.•B8 ¸< |6Ƹ¹÷Z,I’´ÿ1ƾnƒ´×„ÉdòöT*õåO}êSù|>¾øâ‹¹\.·¥P(üQŒñé÷¹þóÀJ >|1ÆØZ޶K’$í úÈØ>nN§Ó_¹öÚkÓ#GŽ ŸÏsÿý÷ž~úéc¼<Æxç®ÿ2ðï@šÒÈ%1ÆLÙ: I’´0€è#!„‰ÄÜt:}ùµ×^[1jÔ¨íÎyúé§¹çž{Š1Æé1Æ;Þsý%ÀÏ(MK¼Ò>…²4^’$i?bº>ô¶†Ÿ¦R©é³fÍê1|œ|òÉ|éK_J„n !ÌØæúmÃÇMÀ Ç$IRï°]j[ÃÇ“ÉäU³fÍJ3f§çŸxâ‰É»îºë¦B°…ÒˆG ˜\c,öv»%I’öWNÁÒ‡Z2™üÇd2ù­«¯¾:=vìØ]¾î¥—^bÁ‚që÷?s¯>$I’z—DZÉdòû‰Dâú+¯¼25a„|ýÒ¥K¹óÎ;‰1.NþÏ I’Ôë¬чR2™ü?!„ëgΜ¹]ø( ¼öÚk¬X±‚ŽŽŽÞãè£æ+_ù !„ÉÀ7z¹É’$IÂ}%“É¿O$ÿ³§‘††~ö³Ÿ±víZ†ÊW\AMMÍï·lÙ2~þóŸcŒWÅoéͶK’$íï úP !|'™Lþ¯™3g¦&NœØíX}}=sæÌáCáüóϧ¡¡;d2É7¿ùMB;¼ïóÏ?Ï]wÝ•+‹'Ç_èí~H’$í¯œ‚¥d2ù¿’Éäß\qÅÛ…-[¶0wî\Ž8â.¼ðBªªª5jçŸ>7ndóæÍ;½÷ 'œÀÑGH¥RÿØ›}$IÚß@ô¡L&ÿøÛéÓ§'=ôÐíŽoÞ¼™––ššš(ÞÝÂ#ŸÏ“N§Ÿ§±±‘û￟3Ï<“t:ý¾Ÿ3bÄ(-É;¢7ú!I’$ˆöqÉdò[À.»ì²äGÑíXSSsçÎ Ns衇rÅWðÆopÛm·1oÞ<&L˜Ài§¶KŸµråJB`Ã^î†$I’¶2€hŸB¸.ÆøÏ_ýêW“Gyd·cÍÍÍÌ›7Q£FqÉ%—H”¾Ê'NdÆŒ¬^½šööv¾ð…/ì´ø¼Ók¯½ÆwÞY!üeŒqS¯tH’$Ií›BW…~tÉ%—$>ñ‰Ot;ÖÒÒ¼yóhoo碋.ê >ö±1sæLr¹·ÝvÙlv§ŸõÖ[oqÛm·åcŒÿ§P(üó^ïŒ$I’º@´Ï !\B˜sñÅ'Ž9æ˜nÇZ[[™7oUUUd2î¼óNòùüv÷?~† ¬Y³¸üòË»¿×¸qã¸òÊ+Y·nË–-Ûîø6áãÿ …?ïµNI’$©‹jŸB¸$„ðï_üâŸúÔ§ºkkkcÞ¼y 0€éÓ§“J¥xýõ×¹í¶Û˜0a—]vY«]5551hРnï­Y³†yóæå …ÂO …Ÿö^¯$I’´-ˆö !„‹B?ÿ¾œ4iR·cíííÌ›7êêj¦OŸ¾]ÈXµj·Ýv|pÇß«¶¶–o¼1—Ïçg …ÿ¾×;#I’¤2€¨Ï…¾B¸óóŸÿ|òä“Oîv,“ÉpÓM7‘L&™9s&=Þã­·Þâ–[naÔ¨Q;=¯¶¶–9sæäòùüí…BaVôI’¤²²D}*„ð¥Â\pÁvᣣ£ƒ›o¾™ÚÚZ.¾øâ† (Ϙ1ƒuëÖqË-·ôX²nݺÎðq‡áC’$©o@ÔgBç%‰ŸûÜç’§œrJ·cá#ÆHuu5·Þz+---;½ßøñã™9s&ãÆ#™Lv;¶~ýúÎiWÿ^(®2|H’$õ §`©O„Î !üúì³ÏNž~úéÝv Ìår]£W^y%ÍÍÍÌ;—ÊÊJfÍšµ]Aùû©««ã†nÈf³Ù…BaFŒ±¸W;#I’¤]æˆÊ.„pN"‘¸gÚ´iÛ…(M•Š12sæL*++>|8W_}5Ùl–yóæÑÔÔ´ËŸUWWÇìÙ³³Ùlö×…Ba¦áC’$©o9¢² !LK$÷M:5uæ™gn7òñàƒ2uêTª««·»vóæÍÌ›7T*ŬY³Ÿÿ\Œ±c÷»'I’¤Þ`Ñn‰1nˆ1Þï¼t:}Û 'œPñÙÏ~v»ïÚ]wÝÅÍ7ßL6›íz¯s Þ#×]w¹\Ž9sæ¼ïÊWÌž=»£½½ýñ|>ÿG1ÆìN/$IRŸ0€¨W …qÇ{lß³SN9…õë×sÓM7ÑÑÑA.—ãÖ[o%“É0cÆ F͵×^K±XdöìÙlÙ²¥ÇÏhjjböìÙÙÖÖÖ'óùüçù$IÚw@Ô«‰DÃæÍ›{<6fÌfΜɆ ¸ù曹ýöÛioogÖ¬Y]Ëð2„«¯¾š?þøv÷hnnföìÙ---¿ß:í*Ó«’$IÒ1€¨WåóùùO>ùdG±Øóþcǎ媫®bãÆ¬ZµŠK/½t»=@† µ×^Ëç>÷¹nï777sã7v477?—ÏçÏ1¶÷ZG$I’´W@ÔÛ~¼iÓ¦–|p‡õ"cÆŒáꫯ¦ªªŠ;¶¶¶íÎ4h©Tªëç––n¼ñÆlccã’|>NŒqû‹$I’´Ï1€¨WÅ7 …/,^¼8>öØcqGç5Š«®ºŠÆÆFæÏŸßcéÔÚÚÊœ9s:_ÊçóÓbŒÛïZ(I’¤}’D½.ÆødŒñ‚Gy$ÿ›ßüf§!dÖ¬Y; !™L†ùóçg^ÎçógÅ·ß­P’$Iû,ˆÊ"Æø`±X¼`áÂ…¹|p‡!däÈ‘\}õÕ 6¬Û”+(…9sædëêê^ËårScŒ;_›W’$IûˆÊ&ÆøP±X<û‰'žÈ>ðÀ=W¥555\zé¥TTTt½—Éd˜;wn¶®®îõ|>ÿ™cÏkòJ’$iŸfÑn !\Bˆ!„Ü´õíê|/„ðíž®‹1>^,Ï^¼xqöþûïßaÙVGGóæÍËnܸqÕÖðQ¿·ú!I’¤ò 1îp6Œ´C!„“€/í䔇bŒ¿ÝÉõS‰ÄCŸþô§«Î?ÿüÞ$›ÍrÓM7ekkkßÌår“cŒ›ö Ù’$Iêcõ™œD"qõ)§œÂùçŸO¡Ûñl6Ëüùó³ëÖ­[“Ëå>c¬ë£¦J’$i/1€¨O„Îî’‰D"{ä‘G†‹.º(]YY @.—cþüùÙÚÚÚw¶† }Ú`I’$í•]á`ày`8p#ð/étúžD"1áøãO<8,]º4[WWW»5|¬ëÛK’$io1€¨¬Bý€'€g€ÏÄ;B•À…©TêòD"1¨P(¼\(¾í´+I’¤ˆÊ*„0¸Ø œc|«o[$I’¤rr^•Mák”ÂGøªáC’$iÿcQY„&ÿºõÇ¿Œ1>Ü—í‘$IRßp –z]á@JEçc€»/F¿x’$Iû%ˆzU! <LV'Å›ú¶U’$Iê+NÁRoû¥ðÑ|Éð!I’´3€¨×„þøs WÆ_îã&I’$©@Ô+BG·ø§ãôq“$I’´°D{]¡ ø=p°8;ÆXèÛVI’$i_àˆzÿQ €Ë ’$IêdÑ^B¸˜ËcŒëú¸I’$IÚ‡@´×„ælýñ{1ÆGú²=’$IÚ÷X¢½"„Ðøpðp–S¯$I’ô^Ž€hoù¥ð±¸Ôð!I’¤ž@´ÇB×Pªû¸,ÆXÛÇM’$IÒ>Ê¢=B8˜»õÇ¿³îC’$I;c ˆvÛ{ê>¦:õJ’$I;ãˆöÄ)… ÀW ’$Iz?í–¯á~’$Iú úÀBñnÝÇÿg݇$I’v•5 ú@B àa`*ð<ðéc¶o[%I’¤ G@ôA]O)|´RÚïÃð!I’¤]æˆvYáxà) ¸2Æxs7I’$I2í’Bà9àà®ã…}Ü$I’$}9K»êG”ÂÇ;ÀÕ}ÜI’$}H@ô¾¶.¹{¥%w¯ˆ1Ö÷q“$I’ô!eÑN…Æó¶þøƒã¾l$I’>ܬÑ…ð0 x˜cÌõm«$I’ôaæˆvæ”ÂG¥ÝÎ ’$IÚ#Ž€¨G!„#€€*à¿Åg÷q“$I’ô`ÑvB)àIà$ààœèE’$I{S°Ô“¿¡>(m8hø$IÒ^ሺ !œ@i·ó4ðÇ1Æ}Ü$I’$}„@Ô%„PM©îãpàßcŒ—öq“$I’ôã,mëû”ÂÇZàº>n‹$I’>‚!„Ó€…@Î1>ÜÇM’$IÒG# êœz5Ò÷a®áC’$I½Å"€VÑÇm‘$IÒG˜S°ös!„SE”¦^}6ÆøP7I’$IaŽ€ìǶN½º…Ò÷`ŽáC’$I½Í²ûÞzõ?ú¸-’$IÚ8k?B˜üŽR=ÇÂsI’$•ƒ# û¡B ˜Mé÷«áC’$IåbÙ?}8Ø„«^I’$©Œœ‚µ….Îà `%°x9ÆØÞ‡Í „p8ð"ÐøJŒñÎ>n’$I’ö#©¾nÀGEá:àÇ;9¥BxXN)tþ¹2Ƙ-C; ¢TtþºáC’$IåæÈ^B ¬ú;–™3gR[[ËÊ•+Y¹r%7nÜÙå9à5Jd9ð2° Xc,ôR{+1ÆÍ½qI’$iG {Aað0À£>Ê”)ShlldóæÍ´µµ‘Édhiiaݺu,_¾œgŸ}–eË–Q__¿³Ûf€Wè>Z²x+úK“$IÒ‡”d/èœ~5`Àêêêˆ1R,»½bŒ´µµÑÔÔD[[ííí455Q__ϳÏ>ËO<Á+¯¼BGGÇÎ>®…wGI:ÿ\cÜÔËÝ”$I’ö˜d/!ü+ð§ÇwO=õµk7sñçÿžk†ðÉ£Æ3iòœrêáTT¤¶ $Åb k”$“ÉÐÚÚÚL^|ñE~ó›ß°råÊ®sw üð—½5uK’$IÚS¡ï‡rÈ!¼¶r-o¼¾ža ä· —ò‹Ÿ/¢©±t:ÉÃqð¸ñ‰1œxÒ!L:õ0**R¤R) Ä€6lXWؘ4i3fÌ ££ƒææfšššØ´i/¾ø"¿þõ¯Y·n]g*€ë·þù§e’$IÒ.0€ì‡À»dŲÕTUWrNÈdrÔml`ÓÆê64òÛG—sçí‹ÈeóTT¦vÀÆO¬áãŸà “&rÔ1¥Ñ©t:M*•¢ªªŠáÇ3qâDN<ñD®¹æÒé4K–,á»ßý.o¾ù&Àù@$I’´2€ì¡­»ŠO€mÈ[ ÒŸŽŽü¶çq`ÍP¬J<êÝë[[ÚY¿n ›êÙ\×ÄýòYnžób„êþ•ÔÔ füÄ9æøqLûìQ¤R …1F …™L†\.Ç 'œÐ@œS'I’¤}–dÏÒ‡z(«ß¬cа´vävœ:¤RŒ;‚‘cGt*ä l©o¦~S#õ›šyíu<ñÛ?pÆ´“L†n·)‹¬_¿ž†††Î·vº´–$I’Ô— {îÐοtŽ€lÚÔˆƒ =“ßáEïgÀ 2€±‡@Kc=øUU´¶¶ÒÖÖFee%ÕÕÕäóyBÛî5²|O:#I’$õ&Èž;`ذa 6 €ÖÖÆVWÒ–Éí•XûöfÆŒ=(Õƒ 6ŒL&C¡ëµMY±W>T’$Iê=w¼;ýª¾¾…D"Iª²’öLÏ«áÆ®ÿ¡ÇSÈçòÔoh`ÃÛ›hmjãô³Ž •*-å[YYIl6KŒ‘Í›»657€H’$iŸeÙsÝVÀZûöfÒé4¤Ò´eò¨"¼X,ÒÖØJc]Í››éÜ£%N󉣯P__OuuuWÙ´i[¶l!—ëmq –$I’öY=×m7ßÜHEe%¹äwZR ù|‘Ž–v:šÛÉ4gºöÿH¥ÓÝΞ0q8@×ô«ŽŽ’É$›7oÞvúU#P»×z&I’$íe=°u Þqðî¬U+×SÙ¿¹Âö»–#³9 yòY 9 ÙwCJ2•$Ir»ë!P3rP×Ï@i÷ôL&Ó­=ºµ½$I’öa=3žÒÎã]# ï¬ÝB:•¢Ðž…"Äb‘b>O!W$æ l›’$Hn ;3`P%©T‚¶¶6²Ù,UUU‹EBlذ¡óTë?$I’´O3€ì™C:ÿ2qâD6on#™HRhîèvb’éÝ{Ü£G _¿~¤Óiòù<‰D‚D"a‘$IÒ‡ŠdÏ 0jÔ(@KK–tEz§íšw—Çÿ±Þ}7R©Éd’ÖÖVbŒÔÕÕu¶]’$Iû4Èžé¶VGGHP‘ÞÁ´ª,¹û¾rh)€477“J¥ˆ1v oÞ¼™|¾«ŽÄI’$íÓ {¦Û 74—F?ö¤ ¼‡2ê Rzç(K±X$ŸÏÓÐаíô«M1Æ Û_-I’$í; {¦Û¼64“ÞÑèÇnJ$ƒWR(”F9bŒÄÉçó‹EÖ¯_ßyª£’$IÚç@vÓÖ%xÇû# kÖl¡b¯Ô¼kÐàJB€ŽŽ‰™L†~ýúu¶aÛë?$I’´Ï3€ì¾ñ@¶Y×ÒCún~lu`ÍàÝewS©Ò¯¬P(B`ݺu§:"I’¤}žd÷H$˜0aÙ\‘ô.ìëñA4¶T÷ÑÜÜL¿~ý!L&ijjØv,ˆ$I’öyÝw(ÀÁÜ5%êO¿õÞ~»§·š?¼²‘Ʀ,¬"}ûÑ’ƒF—F@úõëGŒ‘l6K*•bóæÍÔÕÕm»ÖË{ÐI’$©, »¯Û¼:h_¼ðÄøqÚÛs¼ôâz^zi=ëÖ·R,|ðå±^QI§Ó‹E‰…B¶¶¶m§_­1nÚ£ÞH’$Ie`Ù}£Æ×ãÁ#••INüÔ(Ž?¡†b±È;ï4óÂóX½º™¶¶Üû~@2è×/I±Xìö~±X$„°í X¯ìQO$I’¤21€ì¾g€‹žxâ 6lØ@MMÍv'ÄØ}ÄcôèþŒ9žb±H{{Ž¥K7óÚÊF6×g(·PÜîPª;yOú”Â#À£À£1Æç÷¸w’$IR/0€ì¾_õꫯûØÇ>ƤI“8ï¼ó8ãŒ38æ˜cºNê)@TV&9á„áwÜ0ŠÅ"kV·°âå-¬_—!“)0dhz»{$“Ir¹!jkk;ßNgm}BX<<,Œ1¶îÕžK’$I»)ìèÈz!„‰À¯#·}üøñœqÆœsÎ9œvÚi¤ÓibŒ‹Å¾:Ïilì`ÅŠFFªdÔ¨ÊnÇ;§^­]»–?ù“?!ŸÏóo|ƒÕ«W³páBZZZÞÛÌ,° hfwÅ‹ï=I’$I*È !ôÎ.ÎÆn{¼ªªŠ“N:‰³Ï>›óÎ;‘#GîRÙÑ«P(°jÕ*Þ|óMþæoþ€ pÆgÐÑÑÁïÿ{üq-ZÄÒ¥K{¹ø£cþ½$I’¤ÞfÙ‹B‡Se8}Gç~øáœuÖYœzê©Lš4‰D"ñBÈ–-[¨­­å™gžá†n „Àõ×_Ï_üÅ_l÷Yï¼ó¿ýíoY¸p!=ôжKö~/ÆøÞx’$IÒÎ@ö‚Â0à_gëîè£Fâë_ÿ:!}ôQ/^¼m`ذaœ|òÉœy晜qÆ 0à}CȪU«Èd2ü×ýwß}7|å+_áŸþéŸvÚÆÅ‹3}úôÎ)Z«bŒ‡ìôI’$©X„¾‡B×߆AiÊÕ׿þuf̘A.—£X,rî¹çòãÿ˜_üâL™2…çž{Žúúzêëë¹ÿþû¹ÿþûI&“{챜~úéLš4‰#<²ÇÏËd2¬]»(¨÷ë×––ªªªH&“Û]“Ïçyæ™g8å”Sxä‘G>BÑô)I’¤23€ìŸÿ¼õï\pÁüõ_ÿ5•••tttt;÷ÄOäÖ[oåàƒfÆŒ¬Y³†§Ÿ~š—^z‰·Þz‹B¡ÀóÏ?ÏóÏ—VÐ;v,S¦LaòäÉüñ¤R)2™ Åb‘ºº:^|ñEr¹Gu›7oJVWW3`ÀR©o¾ù&·Þz+#GŽÜv©à,pb¡–Ò&†…2<.I’$É)X»+„0x HwÜqüÃ?ü'žx"µµµär=o2øgög<õÔS\tÑEœzê© 8T*ECCÏ?ÿ°ø«ܶXc|õƒ>I’$éý@vSapÀ·¿ým¾õ­oQQQA"‘ “ÉÐÐÐ@KK …BÏ3›/^ÌܹsY±bÉd’±cÇ2f̆΀H§Kf³YÞ~ûmÞ|óM6lØ@6›`Ĉ\uÕU\xá…ÛÝû…^à7Þ •JÑÑÑAee%ƒ ¢££ƒÅ‹óðÃ,þa'Ý{'ÆøÄ= I’$©Ö€ì†B† 0€vËçóŒ1‚ššZZZhmm¥µµµÛ X“'Ofòäɼùæ›<ùä“]¡á©§žÚ.´¤R)FŽÉÉ'ŸÌqÇÇ©§žÊ„ ¶kS¡Pàž{îaÀ€„èèè •JQ((‹TUUm;š²y'Ý{x~7$I’´SÝcŒ!„-ÀðÚÚÚ®÷‹Å"étšb±H2™¤ººšêêj<ð@ÚÚÚºIg™0a&Là²Ë.J!¢µµ•ææfbŒ 8þýû÷¸²Õ¶Ö¬YÃÒ¥Kéß¿?ÍÍÍ@©n$“ÉN§) ¬Y³†+Vt^òL·)ÏÅWíÙÓ‘$I’vÌò„FçR%Ø _³fMçv.Ác$•JQ]]M¿~ý1bíííÎ €IDATÛ…€d2É Aƒ4hPO;˜÷hñâÅ$ Z[[ !L&ÉårTUU‘ÍfùÝï~ÇC=Ô9ºò{`É{nÓ,Ž1nú@D’$Iú€ »hë.çO³uêxýõ×{O6›í #;ZÊ`ÅŠTWWóÖ[oÑÖÖFŒ‘d2IGGäóyêêêøå/I]]@pÐSay;ð@Œ±£‡c’$IÒ^eÙ!„ËÛ>ùÉOòÃþ#F°fÍæÏŸÏ½÷ÞÛ5r1xð`.¾øb.½ôRŽ9昃GO¯d2É€¨®®&ŸÏ“Ëåˆ1ÒØØØmšV.—cýúõd³Y^{í5 …Éd’#…Bt:M6›eÙ²eÜ{ï½!f=ðCàít¯#ÆxWï?EI’$ɲS!„?¾œ¤õ«_QSSC&“¡££ƒ~ýú1pà@.\ÈO~òV¯^ÝuíÇ?þq¾úÕ¯rá…2tèÐíBGkk+o¼ñ#Gޤÿþ]Óµ*++8p ƒ "‘HÐÐÐ@6›eíÚµ„X²d õõõ]µ%Ùl–T*EŒ‘ööv|ðÁ®ÝÔg¶t³x8ÆØÒ;OQ’$Iz—¤!„ÁÀÿ.ë|ï”SNáú믧½½ƒ>˜ŠŠ ZZZÈd2äóyjjjÈf³,X°€[n¹…¶¶Ò¿ù+**˜6m—\r §v@WùÕ¯~ŲeË8þøã9ꨣ6lUUU]!¥ÿþ 4ˆÑ£G³iÓ&n»í¶®]Ò;÷ùH¥RäóyêëëY°`[Wå* €û€÷û׿1f÷îS”$I’¶gyÂÀ-ÀÁÇç’K.á›ßü&C† ¡¥¥…%K–°nÝ:ÆÏÈ–-[hooïZyª¦¦†åË—óÓŸþ”gžywÅÛšš.¼ðB¾üå/3nÜ8R©™L†5kÖðâ‹/²iÓ&ÆÏرcœÖÖV–,YBSScÆŒ¡ººšÖÖVV­ZÅÔ©Séß¿?!ž{î9æÍ›Ç}÷Ý×UX^]]Í”)S¸öÚk9äCˆ1RUUE¡P —ËÑÞÞÎàÁƒYºt)ÍÍÍ455‘ÍfiiiaÁ‚¼úê«PšfõðsJÓ¯v&R ¯öÚÔ$I’v`¿ !„!À­À@8ì°Ãø—ù?üp€ȶ¯ŽŽª««™8q"•••¼õÖ[¼üòˬ[·ŽL&Ãu×]Guu5mmm]«eµ¶¶rï½÷rà 7°råJ À/ùK<ðÀnÓ¬ Tï±|ùr‰õõõ¼ñÆÜ~ûíÔ××CiÝéywó÷Ê¿‹1®Ý«Q’$IÚEn®5j÷wÇa‡ÆAÔÞ/„lû7ntù|ž#C‡íÚ©èšÊÕF^ýu¾öµ¯±lÙ2Î;ï<¾óïJ¥( ]»¡766²vm)3,Z´ˆ;l6 ¥¥uÿX· ]m1îÊô,I’$©W$ÿöoÿ¶¯ÛÐgB)à 5mÚ4æÏŸÏa‡ÆÒ¥Kyà€ÒÞËäîŠwÞy‡^xñãÇSYYÙµ¡`"‘ „@"‘ ¢¢‚~ýúB ™Lòøã³jÕ*^{í5î¼óNÞ~ûmú÷ïOMM !V¯^M6›å–[náž{îé /OÿhØ…fÕSÚí¼ù?$I’$i/JõuúX(}ôÑ,[¶Œþýûsä‘GrÆgð‡?üûî»ÊÊJŽ;î8ÆO&“ÙáÍšššxþùçI¥R444°zõê®)ZãÆcàÀTTTt‘wttðÌ3Ïp衇òðÃÐÒÒÂÝwßÍÝwßMMM §Ÿ~:1Füq6lØ¥iT·ì h6ný3¼c|¿ÚI’$©×9+„G€³Ž8â®»î:ú÷ï”ê.:è ÆŒC>ŸgÉ’%¬X±‚£Ž:Š#<’ŠŠ ÚÚÚº¦^mܸ‘'žx‚ŠŠ þøÿ˜l6K.—#›Ív½R©Ç<Éd€U«Vñ›ßü†b±È÷¾÷½ÎђߟõÐÜFJ£¯¿çýw(-»› îé!I’¤}•$„OQšÎ”®¬¬dòäÉL›6ššš®sjjj7nC‡åÕW_å©§žbàÀ}ôÑ :”Õ«WóÈ#PUUÅôéÓ‰1v ¹\ŽÖÖVž~úiÎ=÷\?üp¸ûî»ÉårÄùÑ~ÄÆ¡0^Ž>ày`1Ýw5o^Š1¾]–‡%I’$í¡ý>€„¾ ü¾õgŽ=öXÎ>ûlŽ8âbŒ 4ˆñãÇ3zôhêêêxöÙgY¾|9Ùl–áÇsùå—wÝsÛÒÚÚÊc=Æa‡Æ´iÓhkkãÞ{掠µ•#1F~ðƒÐÔÔð]Jûyl«h¥THÞ¶õUcÜ•úI’$iŸaÙ*„ÐÒjXׇt¾?nÜ8Î>ûlN:é$’É$1FÒé4ãÇg̘1TVVR__ψ#xôÑG™0a£G&ŸÏw…û'rÎ9çÐÚÚÊ<Ð-|¬\¹’›o¾JÁâO€Jµ¯¯ÅËÿD$I’¤½Ïò!„œ üðJÓŸ2dS§Nå´ÓNë¶*ÖÁÌøñã:t(K—.eÑ¢E ¦L™Bee%O=õ£G泟ý,[¶lá‘G¡££ƒ#Åb‘ºº:fÏžMss3”6Bü9¥ò»ãú¾x’$IRo1€ìDáÀÿþ¨¨¨¨àÓŸþtWHç(ÆÀĉ©©©áí·ßæ÷¿ÿ=µµµsÌ1L:•ÚÚZ{ì1ŠÅb×5kÖ¬áæ›oîœzµ øP <clï«~K’$I½Å² Bßþ¥¢pBy䑜uÖYuÔQ]¡¢¢¢‚c=–Q£FQQQA+Vð /tcäÙgŸå?þã?:W¾zø°x6ÆX쫾J’$I½Éò„*K)ŠÞùþ˜1c˜6mZ·:€“O>™¦¦&^z饮àÑÖÖÆ/~ñ ^xá…ÎËÌ^ˆ1¾TÞI’$IåeÙM!„)”‚Èy”64dðàÁœ~úé|æ3ŸaÀ€ôïߟÊÊJêêê(‹<÷ÜsÜu×]S® À/(Õ}¼c|®¯ú"I’$•‹d…Žþ'ð  NsòÉ'ó™Ï|†#FðÜsϱpáBjkk;/[ Ü@iêÕ«”F?üEH’$é#ϲ—„†×QZFwøNkîîêcŒµ;8W’$IúÈ1€ìe!„ Ju" Œo¿ïPÚhpµ£’$IÚß@zÑÖ=E†ýÐàòº’$IÚŸ@$I’$•M¢¯ I’$iÿa‘$I’T6I’$Iec‘$I’T6I’$Iec‘$I’T6I’$Iec‘$I’T6I’$Iec‘$I’T6I’$Iec‘$I’T6I’$Iec‘$I’T6I’$Iec‘$I’T6I’$Iec‘$I’T6I’$Iec‘$I’T6I’$Iec‘$I’T6I’$Iec‘$I’T6I’$Iec‘$I’T6I’$Iec‘$I’T6I’$Iec‘$I’T6I’$Iec‘$I’T6I’$Iec‘$I’T6I’$Iec‘$I’T6I’$Iec‘$I’T6I’$Iec‘$I’T6I’$Iec‘$I’T6I’$Iec‘$I’T6I’$Iec‘$I’T6I’$Iec‘$I’T6I’$Iec‘$I’T6I’$Iec‘$I’T6I’$Iec‘$I’T6I’$Iec‘$I’T6I’$Ieóÿ»>ó$I=´IEND®B`‚lasso-2.8.2/docs/lasso-book/figures/PaxHeaders/sso-brws-art-2.svg0000644000000000000000000000013214404126113021606 xustar0030 mtime=1678814283.193738379 30 atime=1678814283.833742009 30 ctime=1678814323.181965678 lasso-2.8.2/docs/lasso-book/figures/sso-brws-art-2.svg0000644000175000017500000064765014404126113025100 0ustar00bdauvergnebdauvergne00000000000000 image/svg+xml ServiceProvider IdentityProvider 4 SOAP 1 HTTP 2 HTTP 3 HTTP HTTP 5 lasso-2.8.2/docs/lasso-book/figures/PaxHeaders/slo-sp-soap-6.png0000644000000000000000000000013214404126131021411 xustar0030 mtime=1678814297.601820176 30 atime=1678814297.545819858 30 ctime=1678814323.177965654 lasso-2.8.2/docs/lasso-book/figures/slo-sp-soap-6.png0000644000175000017500000020066114404126131024666 0ustar00bdauvergnebdauvergne00000000000000‰PNG  IHDR ¡™Ð< pHYsÊ&ó?tEXtSoftwarewww.inkscape.org›î< IDATxœìÝy˜\e™÷ñï]Kodé%!!!`XC€ÈN ›‚ˆ ʰ¨Œà茈/‹Ì«2ï8£##*ê   ("²%ìD@ ¬Ù $BI€ì½Õr¿<çTNWª;ôÈïs]}UúÔ©sžn.ºû®ç^ÌÝé ©Þ^€ˆˆˆˆˆl=€ˆˆˆˆˆHQ""""""=Fˆˆˆˆˆˆô """""Òc€ˆˆˆˆˆHQ""""""=Fˆˆˆˆˆˆô """""Òc€ˆˆˆˆˆHQ""""""=Fˆˆˆˆˆˆô """""Òc€ˆˆˆˆˆHQ""""""=Fˆˆˆˆˆˆô """""Òc€ˆˆˆˆˆHQ""""""=Fˆˆˆˆˆˆô """""Òc€ˆˆˆˆˆHQ""""""=Fˆˆˆˆˆˆô """""Òc€ˆˆˆˆˆHQ""""""=Fˆˆˆˆˆˆô """""Òc€ˆˆˆˆˆHQ""""""=Fˆˆˆˆˆˆô """""Òc€ˆˆˆˆô03«1³QfVßÛk0³ºh=}{{-òñ§DDDD¤“ÌìH3»ÞÌïàKöætߪZ3³mÌl@O­çÌÄù)3`fu=±>Ùz(é¼½ÁÄž½½vÜ|hfU<{àCà?ºmE²UÊôöDDDD¤w¹ûTÀz{²uP""""ÒÌ,ì¼<Ö׌j€yÀÓî^,;gÐx HGÀÀî^Hœ;Ø&útg3ËEÿ^áî+¢4«í€åî¾ÆÌúDëègf£·^Ýw»õï­ýMw÷}½²uQ –ˆˆˆH71³áÀ ÀÃÀ ÀƒÀL`tç÷3³Û7€[ßÓÍl—²Óÿ/¡nãH`6p?ðàQà)3ëŸ8÷`Jôï¹ÑëæGǧu È ÀSÑ¿?Ÿ8>ÐøðfØ” }¢{ܪàC*Q""""Ò Ì, ü™Pr9°°ðwà¿+œŸþœB.v†_$ìFL5³š ·ú!X]ÿFàÀèž±ƒ€iÑ¿w'@£kÛXþ}ÀÁÑ¿oIœ?Xü’ðwäy^û9Bò«6®-[9 """"Ýãx`à7îþw_âîó€/v8ÊLH£ú‘»_éîo¸û2wÿ=ðO„€ä³^w«»_áîs¢ëXLŽOp÷·€uѧoºû‚ècE¥…»ûZ N¯Z8A” öW`pn”b–t° ¸­½oŽl½€ˆˆˆˆt£¢Çß&FiI¿ÝðtN®t~äîèqR…çZý¡ïîÍ„4¯ Ò£ºJô5\OØÕ9!>nfû‚®[Ü}]/—­œ‘î1v]´û!íR –ˆˆˆH÷x0z<7yÐÌ ør…óÿ=~»›Ö³µäýoBíÇ@B‹Ý/:jÝ»™ë™=þ—™ý(³Ü}v¥“ݽÙÌ^¦˜ÙÅÀ’è©¿¸{.qê/ 3NvþÛÝ6s}²•ЈˆˆˆH7ˆÚÕž<\I(<Ÿ |¸¨ó=N'¤nÍnư>Ø¿%Ì 9)zü#púF^s>azûEçÿ‘D%ÝÄí|5ûC6Ê4 RDDD¤s¢©ã÷Ý}uÙs) À«ž²„¶ºûÊ ×Û–0L°ø˜ïîóËÎôÞr÷BÙsCmܽR·-Ìl0¡^c…»¯0³:`;`¹»¯©p~Uô|XKñs}w—ÝýÐ6¾E"% @DDDDd³™Ù??>ëîªÿR"""""›$*¤?Ÿ°‹óÏ„^ãËwbD*Q"""""›$J++-ÀsÀ?¸ûk½»*ù¨P""""ò1ef;ǹû¼œ¿+pð»Wšà.ÒijÃ+"""²¢Bîie‡×Ò‘~ïîmM4ï)ûž l4&Dç†ðuˆt9µáÙ‚%²ÅP""""Ò…Ü}‰™ýð;Bò?f¶p"ð4ð6ðE`0Ûݯ0³m€ÏÒ¦2ÀlàÝ}y|m3›ìÜåîKËïmfûve¦¹û¢öj@ÌlOÂtõ„‰ë7·÷u™Y=p&°7& Uü½»¯(;ï`¨»ß`f§€ÿT¡º€‘î}£ÇÝ µÿI¨¯FH \kf{Ãå@pð=3;ÍÝ‹®³mt!À÷+Ü÷¿€} ÓÉ¡3; ¸‘H¼­é_€ßTúbÌì0àB°²ˆÐýê|àr3›âî/$N¿84ª‘¹X 8ð'@ˆ¨DDDD¤=–O"¿¸èïî;§šY†ðÇýöÀ—Ý}ˆ»ïKn¦žCRÞΉfq”˜Ù.À!ÀåÓØËÎ ü:ºÎ8w߃X\OBÊÏü…Hàî;¹û.„‚u€?E“Ò“ª‹#ݽ>ºþ“m­I¶. @DDDD:§ÖÌFE˜Ù„?äó„]†¤×¯»û:w_ ìÜâî¥óÝý!„ñ„”-¢®Z¿v.»öÙ€7md½çuÀwÜ}Nt]® ¤}•»¨Îs÷çë{¸Ø˜Röšp™»ÿ5:·èîY—l%€ˆˆˆˆtÎ`~ôñ,ð¯À*àóîþbÙ¹¸{±ìXHÜ^áÚŒI»1z<'>í†|‘õÈFÖ;1z¼+y0 BþRáü£`‘™}ÂÌö‹?»"R½Ê•·(T""""ÒY¯j; Ôo¼ Ìq÷æ ç.®plHôøN…çECãî>ËÌžÎ0³K¢…À‘À+8å+â]˜6î—´aÇäõv®Y_öy ðþFÖ![) """"ó®»ÿªƒç*kŠûVx®oÙ9±Ÿ§·vCœ§_4Û˜YªB°Ò¯Âù-„Àê v®¹ªìóB´£"²¥`‰ˆˆˆô®xgaï ÏË»GÝF$ΉÚ÷~xÚÝÛÛ¥HÞ¯ Ø­Âsã*›EØ5)¸û‚6>>èÀ}E """"½í.ÂÎÈÅfÖ'>uǺ4úôŽä ¢?øï!Ôg\ ôaÂ÷¶Ü=¶êxef#€ÏV8?ÞUù±™¥ËŸ4³Z3«íà½E”‚%" ³E&µ˜ïî•ò•{…™] w÷s{{-""›ÂÝß2³k€Ëéfö+BÊÕÙ„ÚŽ?$æ€$ÝDØù¸hd}ÁúÆüx87Ú=¹“ÐøŸ mƒ÷,;ÿ6à$ÂÂgÍì÷À[ÑköÎ> ¼ÚÁûËVNˆˆ´ËÌv~K…Ü_3{ø´»¿Òã ÛÐáTNé.yÂìK:pnctny­î~…™-¾ \þø!À¨ä~àBøýî^éÚë¢û®IÜ«hf§jHÎ ìz¬‰>žÐúw]â|7³ÏÏÿü8qý„@(ù†ÔB!¾HE¦ú i‹™ÕzÂ%übú3áâ0`?»s_u÷G{m‘‘hªï`wÿio¯ED¤3Ìl(aáRw¯T´Þ•÷ª#ÌYêî-|M=¡X}i¾DÚ¥DDÚdf&ã^ëî—´qNUGi‰ˆˆˆ¨]DÚ30³O›Ùÿ˜YÅÝ 3ËšÙ-föƒÄ±«Íì† çÖ™Ù¥fö÷h- Íì3;»Â¹§DϽkfKÌìA3;¶­¯]DDD6iOœÃ{š™Uuäföà1àà^àfÂVýÿšÙ÷ÊN?8øðOÀLB7˜ÀaÆV¸Í ÀY$rš 5 '—­¥ð$ðo„þø·Š-« yÖÉs¯‰žIè6s¡èþ~3ûrG¾vÙ8¥`‰H›¢?àgvBS§€ÇÝý­ çï¼ÌŽu÷5Ññ,¡~äx`œ»Ï‰ŽßD¨#™ áîË×ú$¡KË¿»û¥e÷¹ø0ÂÝGÇ®=0qÞ¯€óÿãî?,»ÆPw_ýûhà¡hŸ‹wu¢v˜zåp÷7í;("""å´""mr÷ÕÀ!ÀíÀàBB·“…föb…ô¤ó€,ð­8øˆ®“¾Gø™ó™ ·º:|Džæ_Hö7³A„@æ¡8ø¨$êI60¸¦Â×¶4ñéW ;$_O¦”¹ûÚèµ}¢{ŠˆˆH'© ¯ˆ´ËÝgD»‡R ö%¤'îîñ€¬£Ç#ÍlRÙ¥j¢Ç]*Üæ… ÷u3»™Ð~òB»I€Ï&øÞTþš2ã©VÏøÆ·z$´œü¢™•?·};ë‘M¤DD:$Ú ¸7ú¸ÒÌ.~JèQ õ@h«f¢U/ú„÷Û8ÿfà*àÖ ç+¿ldÉ}£Ç÷6r@BPsAÏ/ ôð‘NR""›Åݯ5³«€]ͬÖÝ„âñ}Ûˆµ©÷XÕvœlfý µ(û×»{ÓF^×k ëÀ­Vuî>zóW+"Ò{¢Z»s“ɇšˆ¼Jèb8¯;Á"=Fˆˆl3ËRœŠ„iÀOŸ¦ºHu…#ÓzwKÛ˜YÀjàP3˸{¾sŸ&¤™Mp÷¿wb­""=ÎÌN#tûÛµS>4³¿ÏFÏW¨»é1*B‘6™ÙWÍìûf¶cÙñà?m€G¢"s€_j)~lfû”½ÆÌì03ÛÔ]†;i[ÿ|˜ëîÏlìEÑš®#´ÕýI0%׳WâÓàÊ×gfi3;ÑÌ""²1³ f6ðsr×t:ÍGÁi§Æ>ûìCMM\zǶ„7†®î–šÙÛѼ¦›ÌìWêöDºv@D¤=ÿ|ÇÌfoj+ƃ­yÿ1>ÙÝß2³3 ó6ž3³§ õƒ=ÁÀdBw«q÷ufö'Öו\» ë¿­ñ”è@'¤(ä=£{üÝ̾ ü˜ifOï ÐÇE»l½EDº…™~HØ6€Ã?œï}ï{Œ»~tR.—cæÌ™Ì˜1ƒ^x矞… ÆOgý°Y€óÍìà‹J×’î¦9 "Ò¦h×àBа'0”0$ð-à9à·Év»‰× ¾L$ !|ŸˆÜCØ1‰çlœAè¦uuTCÒÖ:ö"ì~üÔÝ—T8çB`¨»ÿkÙñp&p!j ´æýƒ»?Rv!ûu„ö× ÃŸt÷b[kénf6€ð¦Ð?R`3f W_}5Guù›nÅŠ¼òÊ+¼üò˼üò˼ôÒK,Z´(yÊ¿¸ûtÇúEb @DDDD¶`Ñ›AWÒ©4h—^z)_øÂÈdBBËæþMwã7rÙe—Q(f¹û¸.Y¸H”‚%"""²…2³# ©§{TWWó•¯|…K.¹„¾}û¶ÿâhhh`ùòåŒ3†Ù³gŒéôEE6BˆˆˆˆÈÆÌvþ8=úœSN9…+¯¼’aÃ:Ò]|ã^zé%yäúöíKuuu|8Ý%i‡‘-DÔeð_€ïjÑØm·Ýøþ÷¿ÏGÑ%÷(‹üñäÃ?d›m¶!ŸoÕ¥\¹ùÒ퀈lEÌl2¡(<–#t²z½R1yO3³~ÀBà6wÿZÎ Ìnp÷îæåµµ†A„BúþÀbwª7Ö!"}fv2¡-ø(€úúz¾ýíosî¹ç’N·¿1ÑÑúwß}—x€––Òé4¹\Žêêêäë€H·S"²uù10¶ÂñF3ûàª^n¿hÀ¢wý: µ‰çw™hð׉Ãwºm‰ˆt˜™Mènu8@*•âôÓOçꫯfàÀ®Aôä“O2þ|r¹S[[KCCCò4 Ò퀈l$L0ÏŸ Ì˸‚Ð.wSæltµµ„¸…yÛïºÓˆˆl3;¸—¨öbâĉ\sÍ5ì¹çž]vµk×òðóråJr¹…Bl6‹»ÓÜÜL]]]Ü Âï‘n¥Ddëô‚»Ç¿mþnfó‡ ¨€˜™;uîþzÙs;†¾çî«:³¨hM3ÚzÞ̶‰Öñ¡»¿ß‘kFSÜûK:²>3ëÝc©»¯lg­×&­cf»¡DD6‘™Õ¿ÒÛm·ÿú¯ÿÊ)§œBø‘Û5fΜÉk¯½ÆÊ•+)‹¥]ææfÜêêjšššH¥RñK´"Ý.µñSDd+ðá]¯Ññ3ûÀÌþ×ÌŽ'L._¼ öÃÌN4³9ÀbÂ`¿Ìì3‘¸ÆÞfö¡™ýg¥›šÙ©Ñó_‹>ï}þó²óRfv °x XffÓ€íÚú‚Ìì Q`õ¡Nä}3»#ªIžwItÏ#Ìì7„Ý—¹„P‘ît20ÐÌøÝï~Ç©§žÚeÁG>ŸçñÇgÖ¬Y¬ZµŠb±H:¦ªªŠ––²Ù,©TŠ\.Gmmm²]ˆt;퀈„ÁV)B Tlpáäo¿v0³€¿R¾A(?ø:ð 3ÛÇÝ?p÷WÌì]àKfö]wo.»ï¹„݉;£ÏÛªù>! ˜ü(vkn«ôŘÙ?ê3fç&š| cf$&¯×D÷üáïweÑ×&"ÒöØwß}3fL© <“ÉÐÒÒ²Ù]¾|9³gÏæÍ7ß,ÕzTWW“ÏçK÷ˆw=²Ù¬v@¤Ç)ÙÊ™YðÃèÓGËžÞ8ÛÝ—8?üá—Ôaî>'zê.3{/ºÖ¥À·£ã7?NîH\g(pð€»/ig};ZRÎŽŽƒ3»x²ÂùÃÿ<Lr÷øm½ûÌlp!ð¹®ì¥`wo@D¤gÔl»í¶ 2-rã: €ššòù|‡»\-^¼˜™3g²dÉú«555466’Éd03ZZZ¨®®¦¹¹™b±Huu5¹\.>]ˆt;¥`‰ln3³?šÙTàMÂäK ]X’·”Û“˜ü%|Į֧$ŽÝäsÊÎý<áþ7²Öã£ó~–ÜAq÷ðÓ çŸdÿL±›&BàSîg >D¤‡¡u ]w'•JQSSCUUUé¹|>O:n3E«P(ðÎ;ï0}útÞ{ï=2™Li‡£¦¦†b±H±X,¥aUUUafär9²Ùl«5‰t'퀈lFÞå*R«^~éîËÊÎ{ÃÝËí=Î,¿¨»¯‹ê.Æ™YÚÝ î¾ÄÌŽ3³!‰{œCHsºg#kÝ%zœ]á¹YŽÅ­c¾ef¶qÍJc„_¯pLD¤;m€$?wwòù<…BT*E¡P(¥Oe2R©™L†B¡ÀóÏ?ϬYë$ÖÔÔÐÒÒ‚»SSSSzM¼Ã’܉çķ\¶j @D¶N&º`µgu…cñÛdëÚxÍ:Âîj†à@Øå8°ëñ3ÛØ¸®B]H¹ªvîWéXmôø&Pi¸âBÛÜr½>ˆQD¶:”Ò­V®\I]](+Jr¹Åb‘µk×–v+â!øÃJ)WfFUUÍÍÍd³YŠÅ"---ÔÖÖÒØØH:&“ÉÐÜÜ\ LR©”j@¤G)‘Mï` oãùÀвÀâÂnÇ9ÀOXŸŽuÓ&Þï…²çvªpþ{ÑãoÝý¡\_D¤·!Ô}L›6·Þz‹I“&1jÔ(úôé³Az@SSëÖ­#•J±nÝ:Þ{ï=ܽ4Û#®ñhii)$MMM¥º3+ý;>/1Dˆt;Õ€ˆÈ¦zhN5³lò 3›ì@YqxŒÜJèuð9`–»?×ûM?]á¹JÇâ ãì\[D¤7µJÁ:ᄘø3£¶¶¶4ç#\@¨©©©)K§Óäóù Zò&×$Ò´""›ÄÝטٯ€K€_›Ù×ܽÁÌÆ¿!¼{öã /½ ¸ˆÐ…j¡3VGü x8ÓÌîþäînfŸeÃÂv€û sM¾`fo׸ûZ3|xÇÝïîàý+2³Z`lôi¼SofûEÿ^åîotæ"ò±×j¤OŸ>Œ7ŽqãÆÑÔÔÄÂ… yæ™gxÿý÷=z4#GŽdÀ€ÔÔÔàî‹ÅRqzœrU(J5MMM¥à"žxÞÐÐÐjH|^¼´"=@ˆˆlŽË…ìçg™Ù2ÂŒp‰»?^þwÎÌfã]±Ê»kUg>4³POhõû“ çŸFØqù.ð3[L˜-2ðËõ¼Mÿ’70š°”tDâØ½À§ºà>"ò1½ROY+ ¤ÓiFŽɨQ£hlläí·ßfæÌ™äóyöÙg P B€ÒG*•"NÓÒÒR .ÒétiW$y^6›-íŠ(‘ž¤DdëòM Ûbÿ,•‹µ‰†ødfG‡¾üÙÝç·sÍ/ºZ­ncöGpa°aò~o˜Ù^ÑëÇêBî š/&LjOžÿp¬™  %L8 xÐÝßIœ~¡0ýµvÖ]É¢h­mis¶‰ˆl½ÌìðñãÇ?²ÝvÛ¥{챕ñ,ذ¯»“Ëå03†ΨQ£hhhÀÌhjjj•ŽÕÜÜLUUU©›U\ˆwÃ* ¥Zl6K>Ÿ/ÍijjJ¶÷U"ÝNˆÈVÄÝØ„soïÀ9²áðÂöÎx±çs@Åûºûj6H[çG¯y xj#kš Ìmïœ6^·ª½{‹ˆ´áècŽ9&uÐAQ___Ûm·•9sæ0`Àú÷ï_ ’-yq÷RÁx2)oµ›Ïç©­­¥¡¡ªª*òù|«c™Lø0RòùÒØ$ Ò퀈ˆˆˆôœ__ýõg?ñÄÛ›C³À8X¶l×^{-»ì² x ;ï¼sÅNXÉ”­ø¹dç«t:M*•*µßw/Õ‚Ä»ÉV¼¡K·S""""ÒCÜý-`'3ü˜Ÿüä'™8q"o¾ù&³fÍâ‘GaĈì¹çž 8m¶Ù&yÒcpÄõqGù1`ƒ4¬¸]ƒ¥')éaî¾ÀÌž&'S©R©#GŽdĈsÌ1¼ûöÚk<ûì³l·Ývì´ÓNl»í¶¥!ƒñ´ôx¶GKK ™L¦”R×xÄiX¹\®4”0“É`fär¹RJ @¤(éT,Bm·Ýv :”|>ÏòåËyûí·©««+ îNUUU)‰Žäôd7¬L&CSS555466’ÍfKAH$H7S""""Ò;6hÃ›Ü ‰?w: À¶ÛnK:fíÚµ¥s“Ã˧ g2™6'£Çõ!qëÞˆévš„."[$3«1³í{{""ݨ€$eË–ÑÐÐP:)ù\>Ÿoõ\ÜJ·P(”‚‹8 1³Òdô\.GUU¹\®ÕNI|,¢DºÙb˜YÚÌþÁÌÀ»f¶Ò̦›ÙÍìL3ÑÛëé"w@æÍ›Ç…^È/~ñ æÌ™Sªç¨4'h\äóùÒìxg#8š››I§Ó¤ÓéRºV.—Óˆô8¥`‰ÈÁÌ&?ö*{ª?pHôŸ»x˜‘øXëîkºµ""]¢ÕHìàƒæ ƒâõ×_硇âŽ;î`Ï=÷dŸ}öaàÀ¥óâ $:˜Üሃ3+M}$5˜Ù«Üýížü:DD6C«òŽÑ£G³ûî»ÓÔÔÄüùó™>}:îÎÈàÁƒKçÅ­ZZZJGœŽU,Éf³¥¹ ÉÉèñ®H,“Éìaf?r÷é±ï‚lu€ˆH¯0³€ÿ |‰(ô€àꫯfÿý÷/·ÿþûsæ™gÐÔÔT F^zé%^~ùe.\˜ü¥]]o‚™âî+zì Ùtí¡ÇÓÏ‹Å"#FŒ`×]w¥¹¹™b±HCCCéÜL&S 8òù<…B¡´Û‘ÍfÉår‹ÅН’3Bú÷ïOmmí?›ÙHà§Àß<‰t "ң̬ðmà›À6;í´W^y%'tR©h²’šš&L˜À„ JÇV­ZÅ+¯¼ÂŒ3¸‡µÔ, IDAT馛X¼x1ÀÑ=.ëæ/GD¤3*¡Ã†»!…BuëÖQ(Z(q—¬8¸¨ªª¢X,–Ò°Èd2¥¡„ÉÉçñ®H\ÄaÉå—_N}}ýgV®\ù™[o½uµ™=Ü Üåî«zîÛ#W*B‘aÁ€×+€mú÷ïÏUW]ÅÓO?ÍÉ'ŸŒ™mòuû÷ïϤI“øÆ7¾ÁÅ_LMMMüÔ1]·z‘nÑj´]hž|.°¸{©ýnmm-¹\3+µµµ‹EŠÅb©ýnuu5 ÖËÓ°ŠÅ"3gÎdíÚµ <˜Ë/¿¼ßôéÓO¿ãŽ;n:ÿüóWôïßÿi3»ÔÌöëþo|\iDDº™í \KTHžÉd8묳¸ì²Ë4hP§¯ïîüá`ݺu 6Œ7Þx`@§/,"Ò½*¡ol7¤|—8•J•Ò°’Ý®âà"›ÍR(ÈårÔÕÕÑÐÐPJÃÊçó­êGùÕ¯~µ:“ÉÌ;è ƒöÝo¿ýlôèÑÔ××sê©§Ú¿øÅƒŠÅâA/¿ü2ûï¿ÿ’3fÜ< Ls÷µÝø½’ "ÒmÌl ðà|¢×I“&ñƒü€=öØ£âk65Õøý÷ßçÖ[o%›Í’ÉdÔÉED>J6(Bo/ðHJ¦_ÅqðQUUE¡P(µämll$“ÉÍfK“Çš››K“Õš››ß7³!>úèqÀ‰»ï¾û tPÝØ±cÙa‡1b?úѶ¯©©¹àwÞ¹à‘GÉ×ÖÖ>ÑÔÔt7p§H{€ˆH—3³4p!¡È|[€wÜ‘ï~÷»œqÆ]vŸ'žx‚Y³f‘ÍfK¿ÀS©Rf©Š&EdK·A:´x´ ¤ÓéR7¬d«ÝdÝGKKK©eoSSuuu455”ºeE^s÷÷£ë/nn6³ôܹs''Ö××?qâĽöÛo?FŽIÿþý9í´Ó2gŸ}ö‘GΘ1ã¿öØcÅsçν¸xÂÝK7Q""]ÆÌRÀ¡„t«OÔÖÖòõ¯‹/¾¸”wÜYMMMÜ}÷ݬ]»–T*E¡P “ÉàîÉ "²¥ëpz¥çâãù|žt:ݪ¨<DïŠd2™Ò®H¼"lii)í€ÐÆ Bw/Ó£ï˜ÙèiÓ¦ŸN§ßwß}ž8qbfôèÑ <˜±cÇrýõ×ï˜J¥.ž7oÞÅ·ÝvÛZ3›àî³»ô»'Y @D¤KDéV÷ÅÇ&OžÌ5×\Ãðáûì>sçÎeÆŒ444”Ò’]]; Åö®#"²¨Ø†7ùdů’EåÙl–|>ߪV6›mUœ·äM¥RñŒ%èà$twŸü7ðßfV÷ÜsÏ œ°ÝvÛ|È!‡l?nÜ8vÞygêëëùæ7¿ÙçÁ< P"€éÑÎÇŸˆ‚=÷Ü“k®¹†‰'vÙ= …?ü0|ðA©/¾™•ÞÝ‹‹,ãV’hDDº™ÕjÚŠ€»{S'.×é"ô8õ*®çHÎöÈd2˜Y©î£¹¹3+¥aÕÖÖ–Ò°oÞlr!»7Þ€ºøª™»ãŽ;ŽÏf³Ÿš8qâÁkÖ¬ÉoêuåãKˆˆt…ÉÀá—^z)ÿôOÿÔj²ng-]º”çž{ŽeË–•Š.ã"Ëø—mœóœhå«DDºÃ`àÜø“ÄÏœ"P üìit÷W6r­M*Boo$N?-BR©T©Æ£ªªŠ\.G>Ÿ/ýÜŒ_›H_ít'wŸ ÌþÝÌꬻ/ïìuåãCs@D¤+| `ìØ±\tÑEÔÕÕmÖLJ^}õUžyæ–-[„_ºqA%„–¾qÎs±XÔˆˆt«¨»Óù$|ðAéül6[êÖTÖÔÔ”~Ù&‡k%~‘kDDº”™U“€J)JEàþM¸d:? =&¿QS(Z‹w¡ãxW$žÒØØXJÁ2³¶Þ¼Ù¶X,šJ¥íÓ§OËÔ©Sç³ÍlΔ)SVoÂ×,¢DDº„¥`¢­‰½ÍÍÍ R©™L¦ô±fÍ Äœ9sxüñÇÉçó¥´‚b±XJˆ;¸$‹'s¹\©oü|rM""eáËÞÀÑ@ßèðbà}`,¡î#<äîë6áÒ­Þ¼ÙÜY ñÎpccc«–¼qp‹ަ¦¦V]ã6½étz£»Çî^ììáî>uêÔÅÅbñL&3û¸ãŽ{ ýü•P""]¡U!å³Ï>˰a误/¥e%qær9šššX½z5UUU 2„¥K—ò裖΋ÛC&s•ãV»ÉAZÉ.ÕÕÕÉ¥`‰H§™Ù(B§¿¡Ñ¡•ÀcÀ+@0†ð÷Ô àùM¼|)Ùœ"ô¸yyG6›-5è(ß-nnn.¥h‹Eª««¹çž{Js@ÆÿÖ&~  K¥RÊÅâáS§N]çî¯ …Ùýúõ{ýðÃïL›bù˜R""]¡Uó²e˸öÚkÙk¯½˜0a£G¦oß¾‘666²fÍ–,Y„´¬¸Ð<p”§Ä)W TUUafär9퀈H—0³c€‘Ñ¡à)àw[Õ6›Ù£Àà/¾©Ý66R„ÞÑ $Â---ìÇ5tqð®ßrË-<õÔSì²Ë.óN=õÔ76ñk(·™í›Édö]·n]ñ¾ûî{ÛÝg‹Å9'tÒÒN^[>&€ˆHW(½‹gfœxâ‰Lž<™·ß~›gŸ}–©S§²Ë.»0nÜ8†Ê6ÛlSzaœšµfÍšR+ÝdAe:.¥aÅ¿8ãîZÉAZñN‰ÚðŠHg˜Ù@àHBj•R«þLocèà åîïnÆí6,BߔݸÑG2àˆë>’?K“oèTWW³dÉ~ùË_²xñbÆŽ;ûÊ+¯|p3¾† ¾¦T*õh>Ÿ_ì‘N§ws÷‘©Têø©S§.7³k§L™ÒÜ÷‘0 "Ò6xÏÌ6l;î¸#ŸúÔ§X´h3gÎä©§žbøðáŒ9’m·Ý–ªªªÒ/ѸG}h”·Œ¬ÔÁ¥ü—mbš¯é03«"ü}ä„Y¹ûʶ^µÛ}f3oÛ*}µ½À£ìžë/5úˆ'¢Ç?7ãÁ¬åÇ2™ /½ô7Üp ¤ÓéÂäÉ“¿è¢‹flæ×\WS*•ºí¸ãŽ›zHM›6mgwß#•J <î¸ã|ˆÙ0¿³÷ "²¹¾{ÅW\’iXÉÔ,퀈H[*t¶jþFëÎV=éíø‹/føðá›U„ïv$Ó°â9IO?ý47ß|3---ÔÕÕ­»ð ï9úè£uÁÚ×e2™[&OžÜÙ®Y²R""›ÅÝ€ïß7³?gÄõ#GŽdøðáLž<™Å‹³`Áî¼óNêëëÙu×]¦Iè"RÎÌê#)WélÕSfËÁ_ÿú×ù÷ÿwF t, ËÌJCã€#nÚÑØØÈí·ßÎC=À°aÃ]~ùå÷ >|S%¶å–––›O9å”6‹óEÚ£DDºB#lX„nfl¿ýö :” &ðÞ{ïñöÛoó·¿ý°çž{R]]]ºHô]©¨ùä“<ùä“ìµ×^œwÞysÌ1åçoðy<`0—Ë1wî\~ñ‹_°zõjª««›Î9çœûN>ùä]°Ô|*•ºó¸ãŽ{® ®%[9 "Ò:<Í7îÔRWW·Áð­ø—hœ†•ÏçK5ñÄó¸›Vuuui§(.‰"ôÞÈç‘^u¶K¨ó¨¿KØñè©ÎV›ÌÝ2³OߎõÕWí’K.aðàÁœqÆ|ö³Ÿ¥ÿþñù¥Ç¸ö®¥¥…iÓ¦qÇwP,2dÈ{—]vÙÝ»í¶ÛªÎ®ÏÌV¦Óéß{ì±]Q;"¢DDºD«Â/Æ¿þõ¯4662qâÄV©VåµÉ %9`°ªª X\$ûÚ·´´”v=`}qz¢]ˆÈV$êlu,°]thððBOv¶2³À„ g“RAÝý à 3Û øàÌåË—g¯»î:~ýë_3yòdN>ùdöÞ{ïø^‹Eøõ¯Í‹/¾À~ûí÷âe—]öXmmm§Ó¤Ìln¡P¸mÊ”) ½–HLˆˆt…Š)X#FŒàþûïçÎ;ïdï½÷f„ Œ=3«8x+•J•&÷ÖÕÕ•Šd_û8‰S³’]³jjj´"²•1³;;G‡z¥³U”öu!í+|lVº’»¿ œmfß¾\ÐÒÒ2ôž{îáž{îaûí·gòäÉ 6Œ·Þz‹|¥K—’Íf[Î8ãŒÏ:ë¬9]ð%¹™=2eÊ”‡PSéb @D¤+l‚wÃúÚ×¾F¡P`Ñ¢E<ñÄ<ðÀŒ5нöÚ‹Aƒµ XâT‚¸ƒKœ†•ÜÉf³‹ÛïÆu!‘ÑfÖÇÝ×öô7CDºŸ™õ> ìKèlUžëéÎVf68zx«³×u÷w+ÍìÀÀ?“–,Y’ºñÆ[Û¿ÿßþö·ï?~ü½¯™5‹ÅÛŽ?þø®dD6 DDº‚C¨ïhkúù!C8óÌ3) ,^¼˜^x½öÚ‹~ýú•^“N§K¯IŒ[ò&ƒT*U1 +Þ0`Àk×®}ÉÌöt÷æžþ†ˆH÷0³ZÂNCyg«‡Ý}E¯e !ðØ5:´xÄÝ_îÊûD?Ã~ünРA;î°ÃßZ¾|ùáÅb±Þ̪9䙟þô§çÖ××wÅ$ò%UUU7uÔQdDÚ¢DDºBØ ¥*þwùôór 'P,YµjUé¼|>O&“)írÄ­v3™ð£*9=îuŸœ‚÷Àèׯ‡zèè… ~`fîp÷Õ=ø}‘.bfiààpz¹³U…t«x÷åwïŠ  Mï¿ÿþbà›Éå<ðÀòùüP3R,‡¸ûP3bf5m]§’©S§®\´hÑoîºë®5]»j‘Ö€ˆHW(Éíö¯/ ¬]»¶”²?&w0’íw›››1³V; …Baƒ)èfVz½™ñ¥/}‰~ýúmS[[ûÅ%K–|ñþûï/ôéÓç‰uëÖ=ÜíîJ/ÙµÑÙjaÇãõ^XÏàx tèu`ZOï¾$øäÉ“?$Ôœ´ú™vûí·×öíÛwh±XšJ¥†ºûPw ôku÷¢»ßÝu×íC¨=¹ÁÝ{îK­é ­ŠÐ768«ü¹¸•d.—+…B¡´ÛQ)à(Ÿ‹ç€477sÍ5×pÄG°ë®»Ò¯_?>ýéO§¿üå/ÑÐÐpÄ‹/¾øo{ï½÷»¯¾úê½À½„wQ•ª%²i§³Õ‹›Úaª Ö2˜ŒŽ}ÜßA™Þu÷NÍ3:ýôÓ…ÑGɃ>¸MCCÃv™Lf ™mS(^;ùä“ד¢SÎ3³ÿqwu¾’n¡DDºBÅ6¼•þÝÞsqÀ‘¬‰Ó¬âyqV\[!q›Þx Ë—//.Y²ä»Ï?ÿüàÄ1cÆœxØa‡ÕŽ3†!C†°ûî»óÓŸþt‡ªªª Þ}÷Ý î»ï¾\6›}"ŸÏßÜáîïtùwID:Ä̆G»E‡z¥³U´–BªÕD Mrú7`zW¯%Úí98ø°¼+¯;öØc×ó£Ø'Ý« »;DAˆÒ±¤Ë)‘®Ðî$ôøßm=¿.Þ‰k<²Ùli×£¥%¤U×ÔÔ”æóùÒôøX€äóùÝýÿE·¸ÙÌj^{íµC£ëëë?s衇ŽÞwß}1býû÷笳ÎÊ^pÁG566õÌ3Ïü×èÑ£ç/X°àOÀÃÀã}'RD6®ÎV/ºûº^‹{R¿úD‡_¦ºûÊn¸_ p:0œðu ›6ì TEÿÎ} ;!¿Q"]Mˆˆt…OBoë9w'N—v=â4¬ªªªÒ B¡@sss)I¶ßƒ8 h•:µå|8úøŽ™¹÷Þ{O0³÷Ûo¿ON˜0!=fÌ Äøñã¹ñÆGg2™KçÍ›wé½÷Þ»ÎÌþüÙÝÿÜåß=‘­Ü–ÔÙ*ZÏö„:áÑ¡uotãýÎj _Žõõ.=e!è‹¥ ×ùQ¢Òe€ˆHW¨˜‚ÕÑÝx¤X,–ŽL&S H’5™L†¦¦¦RûÝxnHSS555É5´›á?6³¾Ï?ÿü1À”áÇŸrØa‡ ;v,;î¸#ýúõã /Üæ›ßüæçŸxâ‰Ï›Ùw¶Óß1‰»IHHqªÏ'LïÑÎVÑzj ]¶R@ ðð¤»wzªx÷œ@ø›,2ÀÀî¸_kØ–õ»Iqòå(éÑ](ùøR""]¡SEè±T*U 8r¹\iây\÷ÑÜÜL*•¢¦¦¦4=—Ë•^ÓØØH*•Š»qu87;J/ø3ðg3»à÷¿ÿýxàøl6û©I“&xÀØn»íÆŠ+²›ñý‘„(½éÀ¬ï&õ!ð˜ßæ »w={ Þ·‰¿ÜçéžYàd` þ\1`pwÜ· ;³~Ú¹G÷/†)ÎÞPð!]Iˆˆt…¡·”‹ÅVSÐãà"™†•J˜ÏçÛLÍJ´Þ¬âP‹{1úø™ |ôÑG'Ò1–OoÎuE$Ø’:[EëÙðÿ÷°èÐ{„:·»ùÖ óLR„ŸWå“mÛÍ÷OÚ%ºÿûÀ"`àw¿©× [ "ÒÚ,Bo/ð(ÿ·»—Úï–§aÕÕÕÑÐÐ@6›%N—655•vEÖ¬YC:¦P(J¥ºäwÿøßèCD6“™íHèlµst¨×:[Eë©#¤€Ðüx¶'¡(Åì÷fÖØŸP|Ÿ¬ÁèSñ…Ýcp¯»¯‹vƒv›YÿîÚ’­›é •'¡—Þ^z<Å_±$.4O¦aåóyª««Y°`7Üp}ûö]}Ê)§¼¾™_{`ßL&³¯»ç§M›öf¡P˜—ËåfŸzê©Ë6çš"Wf6 8j îë•ÎVÑšúG挬¦ƒ¡vìaf»ûßz{1eÖu„:¿næ5&Ú oißwée @D¤’ÝϘÙj`abø[íLn³ o¥—¿.¹›Q,K; ÍÍÍ¥)èÉ4¬øØÓO?Í-·ÜB.—#›Í¶œwÞySëëë[:ûMp÷&wžJ¥v­®®>þ¾ûî[–Édæ466Î=å”S _ª²•2³A„´¦±„šŠðw`zo¥Ù$jO>I˜ê]ž#voq;™ÑîÀ¾„ïßÂÞ]ME‹€f`G3«Ò²:ÌÌ€ãºa}ò¦DD*y“0·!z?3[ÌæEÓÃc­w@JOlÂ$ôdÝG\$'£Ç…êÍÍÍ¥t¬Ûn»éÓ§P__ÿá·¾õ­»öÝwß÷»à{° P(Üòâ‹/®›0aÂNù|~l:Þ£P(–ÍfÇÿ¯ î!ò‘sN¨õHþÈøkÙÏ„ž^×¹¢C éV[ò®å ž°Û¼Å¤…ÅܽýÌC˜Ý2»£¯‚«SCŸGˆ”Q""•¼ ¤£§¢[ñ#€O™Ùtw$:Þ*M+B?âÙqÀÍfÉård2™VuË—/ç—¿ü% .`ìØ±³¯¼òÊûöí»ÙÅ’ñ’Òéô“'OžO:é$Ì,¦N›6mp”â!²Õ0³*ÂìŒI„bn’îïÍ?òÍl[B®ѡÕÀ#îþro­i=>Û««hß|B² ›€ õ@×GsEºcmò¦DDZ‰ÒúÞÙL•?}¼AëœàÍš„ž,B?’; ñ5«ªªhii!NcfÌž=›_ýêWñäóÂäÉ“¿è¢‹ftökw÷–B¡ðÇã?þ•¶Î™2eÊW,*Ò]¢.Rã éVñdîw€‡Üý­^\W8„Ðê7Ãúá†[dºU¹(pÚ™0}}f//§=ñ€Â]:ú3HØ%{2*®Ù€‰ ¯÷v#ìp´õ³!Gø…ô§²zl~zü˜J¥J; åݰâû￟;3b±H¿~ýV^rÉ%wtÐAK;ý(åÝ IDATM€å…Báæ“N:©+®%ò‘fá-뱄bîm£Ãï:[ÍîÍbî(Ýj !} ÂNÌ´Ø»ÞÌy1Ùâ6ú¾$Ì,ª'ü,^,î*îþ¡™}lkfƒ7ö=ŽÖaÍ[ZQ½lA€ˆl¥¢Þì£ ƒ¹vg}Ê„Xk ­ãŸyÂã»*üñÑ ”ê4bÝ IÏö03²Ù,kÖ¬á†nà…ÂPÞÑ£G¿qÕUWM8p`W¼Û9{ݺu8ýôÓ7©ÈRäã(j©{4á`ÝþJøc¹×†öE…ïDZþÝøU„BºUIT±!uõù²§Ç'·ñº™À_z¡»Ø«@:Ötã@`'à·½ÕM>€ˆle¢¶™ŸÆµ‰§Œ7Üýýh:ïùÑsyààž6Þùœ°téR^zé%öÚk¯Ò›š†·ÚM¶ß]¸p!×]wË–-#•J'MšôÌ·¾õ­§Òét§Þ…5³¢»?rüñÇ?Œ:ZÉV.êZt8a7 …PŸðdo¦5Eõ'êOÒ„Ø¿:n}äþÈu÷¢™ýU¡Õù àABÍÙ*Â׺aÆÊ8Â,G{nµàîuä¼h¦ÉQ„Z‘5f6 ù4ŠŽÜ}uׯT>JlËk‰-"]-ÊãÞðK|ÇÄS« ŋ忣­ôËoT<íîmäú‹€íûôé×¾ô%¾üå/3hÐ ŠÅb©x¼­ ^{í52™ðžH>Ÿ/¥\=ýôÓÜxã´´´PWW·ö«_ýê=Gyä;]ðmiþ÷øã߬y!"f֟к6îlU^s÷µ½¸.#ìÐÃúú“× éV+zk]efÛmj:•™Õß–ºû/ºgeíÞ,açiZ[SÑ£ªìÀåÞs÷_våúä£GˆÈǘ™ÕZèNúF‡[³=^Þl/—Û̾,r÷Ç;p¯Ow $Ëf³{챜þùŒ7®ÍÀ#þüµ×^£X,’Ífqwòùýéܹsï¶]¯FÓ"±#–ÃqÜLÃ< ¬•R6ÙÀ¨–Æã3èsëQÎêŒP[#ì¿ëíûaG‚F£~ûbPõàJ€ÄØÿ] Û€Òo7B!Ä£@¹”ò®»jZ:¢Ñ´"lŠqÜL¥(Fåqç4V¾´]dùðÀ0ßöž={òÌ3Ï0mÚ4BCC±, ˲(//çÈõN;xð øÃ())!((èÆ¬Y³V>þøãÇîÁ°<†a¬zä‘G6݃ki4-Ž*­&qÓ°ïÊD°©&¶@µt«‡{ó!`e}Aš;¶¸z%$~SWz›¢?ª =è‚ZHÚlhŠdvDê{À9)åïïàüÿ”H)ß¾çƒÓ´H´ÑhZBˆ¶¨~øÃ¹Ù̲¥”G›l`€bðwÀ£Ø¢($$„ &ððÃ3lØ0®\¹BAAk×®å“O>Á²,"##‹þéŸþiEÿþýïºXQJY´dÒ¤I'îöZMKÄîlõª T󚸳€¢7êû!ÒÞtUkÐd># b Jü}'¥üôÇB™ù… |™ÊPŽókŠH-ßD¥òþævE¡b *õªQ è5Í-@4šLwâ1@°½ù$*‡ûø=¼Oû»íZ"„è¼ÌFµt <<œ˜˜N:Å©Sª¶|ذa»Þzë­¬   »~ц‘oÆ=ôн¨ÑhZvÍÁ$Tú ¨<üÀ¶¦î %„h‡[**p•nµ­©EѽƞÀÿ¨ÈÓ)e½CìZ‰¨hòn)å 3Ê[Žã)Ô¿Õ )宦ƒ¦õ ˆFÓ±Sœ|9ܾt…B”ðð›Ÿ{÷ƒ8K¤”õÎ[®ãz¡À´¶mÛÎ,++K÷z½•µh¡¡¡W'Ož¼éÕW_½ÎÀÒ²¬õ;wî\ý/ÿò/­j2£ÑÜ »#ÑxTÊ•à¦Søßì\ý¦›¯e<*ÅH¢ºñ­‘R¶Ê…»>îEî°”-`Þ@™þ²)þ …I¨ÔÚýRÊ?7öý5­ ]„®Ñ´0ü¤+4˜;±b"ª÷>¨ö½ˆ¢ʸ°;à–Rfù;ÎÎ{~xÿ‰'žˆÌÏÏŸÚµsçÎmçÎ[àr¹:£€Å] ½øø±Çûî±Ç»‹Ëh4- »¥n:ÊëÇ,TKݬæPKa§‚MFÕ5€úNYu/7š9Éöß5ë…”R !.áÜLÉjlŽ¢Äb·&¸·¦•¡# M Á.0eF%P>ßÐ@9ÜvíFê…ó•”rK•}P.ÉQ¨6™>Çtàþr7ÝN8àÊËË‹p¹\RÊHÃ0" È:I)ºÎBœu8‹z衳wz¦¥Q¥¥îHÔgÔ„ñ+)eq“ ÌÆ^ x`oº ¬ö6EQuc#„B¥/åH)Ýwp¾ üUƒñëÛèdxOBD¢ ÑuTYsWh¢Ñ4s;]Áõ?Œjã+Q½÷·ÚûL`v”åJì¨q ø¿ 1¶¬¬,³¼¼¼ aYV¤Çã‰4 #BÑÙÇ!ÄòÉ“'7™k³FÓ˜¨;JÇlò"nÛ¿b4j|&7SÁÖ5¥»zcb§Ã]¨Ð²£Î'QþK7ìïãHT HšAú“-¦ÚI)Ï7å84--@4šfŒ¢'0•›é 'Pé ·å¢{÷¨UÊ‘(ññW)å¶Ç„sPm!ý¥I”R¾×ã«1þ|S{{hîì…‰dTº•Ïdô,°¾©[êBåwÉ T‘y{{óaÔ‚Æ…&X#c/Ú¼‰J }÷V¢K1Y†Ú‹<ùÀ'MYÃc·ãÍŠ¤”™M5MËG ¦b¯N@E!®`O&£VS%ªÓÉîÇvGEBjÖ‘¹Q)Ó¯ìÛÀ¿K)÷Ü‹±k4÷ U¼<&ìÍ—Q­v5‡t&!DWTšÏÅü"ê{á`ÓªiB$Ó€cRÊEõ8>ˆFµKnú..ŽJ)O6äXëƒ-|ŠJók²T0MËG¡k4Í !D/TÔ#ÜÞ´USÑ`_ôö¤æQTª—…u‰ƒ3¨âÑÞ5¶›@Þ-n÷¿—ñBˆ¾÷K†Fs·ØÜr³øð-ðmsp ·ëPÒQß#Pl65uË߆@1Øét3 # °<ÏQ¯×› äW©‘nÿ½½>×´£¹öŸf‡”Ò+„8Ä}±ÙíE³>@7‡ÃÑðz½Þó¨ÅVÙÙLswh¢Ñ4ì/ðq¨|i_Ôã/ ½jh·ôŠJç°€/¤”9uïžG‰ßKÖW~º®—bðûÇ×µøÐhnM/ÍÀV)e“§Vq1hko>„J½Üdk@„)¦i>8zôhGTTn·›ƒÎÍÍ \BlFµFïŽú.oMÑŸ#(’ „hët:ã Ãèm†èÞ½»Õ­[7ÓãñÈ‚‚ï… Ò…ˤ”‡›zКæ…NÁÒhšvkÝ'Qíg%°øº¡'è¶øxÕ²Ó>—Rî­ãøPTô¢*Ýêc j•ÏW°î7ýÊ®ÉAå7¿#¥|ã>ŠFÓêBtAEíMÀV`ssI}±Ó1'=ìMçQµc÷Ô¨9!„0MÓüûÇ{,xäÈ‘Õöݸqƒ;v°aÃOYY™aY–aYÖ)åê&î=îgé 4MsˆÇã!,,Ì“àˆ‹‹ÑÑјæÍum˲øúë¯Ù´iÓ•ŠŠŠÿh²kš%:¢Ñ4!¶H³ÿ¨\îRÊ£tï§Q“/ª¸1`Ø_Ñx•w^ | ¥,BA §X¤_Ù+¤ï¡ÄÇàîá£h4­ »em:ªˆÛg"¸U`~µ ‡V‰ó2 ‹Vèbî‡Á¦i:‡ RkG›6m;v,£G6<ÈÚµk),,išf¸×ëÝp;èÍû=1Àår 3 £aFtt´Ï€èܹsÀy¤a¤¦¦’••Õ^ÙÚAkšZ€h4M„" %zÚ›v£Vo»GüÜÛ<Ä£¼;þ\Wª—" ùh \Þ÷u²± ²>RëH¿z•æU¼$¥¼~ÏF£i%Ø^?ãPéTTqªeíŦ›mÁshÅ.æUB§Ó9:55Õár¹gñññÄÇÇSPP 6nÜØ777·ŸËå:SQQ±Èm êBét:_”R¶ONN "::—ËU§SUÚµkG—.]<ç΋´ÑT¢ˆFÓ!€Ç6¨Iù_¤”ß5Ò½kŠ:ósíÂ×çQ“BTä£ÚDÃ.0ÝàüDàWöÿPW}‰Fs?"„h Œ†qó½|ø›”²¨ÉV?.æ…¨:SM7ªF§Ÿ×ë KII©÷ ½{÷¦wïÞÆ… ÈÎÎîºmÛ¶g„g„_4ר€"Â0Œ9IIIÆã?nÝñµÍÍ›7Ç¡ê–4@×€h4Š]Àý(j…”¯ÇòÆ*Ô¬!>*€¥uåj !’P5"”«ò²Û©K± «¶¢jLV6÷U?¦±°[®¦¢Úmû–Ó£L›¼åª;%l"7kQJ¿ÑLÚþ6&.—kfRRRïgžy¦ZàêÕ«†AÛ¶mZíØ/¿üÒÚ¿¿×²¬ÍIdúp¹\³º¿ð 5fo›‚‚æÏŸoY–õ«¦ô0Ñ4/tD£i$l·îçTÁw6j…³QÚgÚ¹¼OR=íª.ñ‘‚rD(çõ/î`¬ÿŽgY÷ÛdE£ñG÷òѨ((¨¶Öš“W†v1¯Ž"è3zôèJV·ÛͲeË8pà†aôiÓèØ±cÀë´k׎^xÁøüóÏÙ½{÷‹Bˆÿ×Üêf¼^o÷áÇߵøèÙ³'¦iJ·ÛÝU¨Ñh¢Ñ4vÒTTS ðic#Úâã)` J||,¥<àXZícoÚŠênu[âA1Uû!Qâ£AÜÛ5š–B÷òs¨âíÍI  !bQéVaö¦c¨µ³M7ª¦ÅápŒêÕ«—Õ­[·Ê‰ù×_ÍÙ³gy饗(--eݺu¼ÿþû¼ñÆFàR Ã0˜2eŠ‘““Óå§‘ßPoœNçåÂÂÂÎýúõ«µ¯  €}ûöáv»INN&::ºÎk†All¬8pà@´ÑØh¢Ñ4 öÄ7½=Ž£ºM•6òžD‰/u‹U›2%ÖK)³îàžÀŸPÏüïRÊUw6z¦åc (áá[÷¹—ïnN«ßv»ìɨöÚWP)a÷uí–¢­aIãÆ«W¯^eË–-¼þúët림!ÃÃÃY°`×®]£]»v¯àt:}‘à†ýíS^^ž››››2vìØjóÄõë׳zõjBCCq¹\ìÚµ‹3fпÿ:¯käææÆ !DsÚš¦C ¦° KŸF­nIT$á«ÆœlTƒPâcYâÃg0ØÏ>ö‹ºÊPÿ¿6±ø¨+ò‚òøè‡2\z'âÃæïQ…ö×€—£­°FÓܰ;F}x%>®kßJ)w6ñ!ƒ#Qó‚CÀï¥”ëµø¨4L;v¬éK«r»ÝlÛ¶óçϳsçN<õkÚ·o111ÔÕ¢×Çúõë=Bˆ=Í´-ù Ã0*òóof†UTTàv»IMM­L/KOOçÔ©S\¸pPæƒEEEœ>}ºÚÅÚµkGdd¤¨[©hîtD£¹Ç!¡:G™(WàeRÊs<†ª&ƒu¶Úµ §£&I×€¥”§ý[ûþ·ý㤔~ 5šÖŠ"å‘ÑÝÞtÕ~t[sã¶HzÕ”OÃj)屦U³diš®ªÆƒ.—‹éÓ§³iÓ&–/_ÎêÕ«IIIaÛ¶m<óÌ3·¼`QQ`KŽûŽ‘RZ¦iËˢ˜(@™,†††rùòåÊ"û6mÚЧO²²²8tèW®\!!!W^y¥Ú5Í‹/Æ¡R5÷9Z€h4÷;ÝbªÞ`?*©Q'¶ø˜ÆM‡ó?×!>º "íQ9éïK)Ïßá};ËPíDÿ,¥|ïN®£Ñ´Dì¨ç ½É l65·Ö£~ÚêÞÖs¸˜ß6¶ñ Q3ªMtt4¶¿6lÀív³oß>ˆŒŒ xÍ7ZN§ó¸ÛínÔÅ©ÛÁëõÌËËëgYVeä§oß¾äççÆÈËËãĉ=z”N:1pà@èÝ»w­ë 0€¬¬¬(!D)åÆ~MóB æ`×O<Ä¡ê=6£ 7µØî6»]E¡"!¨œÜ÷ï²8þTÊÙQ`Î]\G£i1ØQ„t —½©ØŽªhVÎà¶/O*ÕÊ×Vw;ªÙ„žúAÑÏ0ŒÎ#FŒŽéܹ3?þ8“&MbÇŽdgg³k×.bbbHOO¯Õ%êêÕ«äää˲65øÜ‡KKKçΫS `ùòå¬[·—ËELL =öqqqtèСòÄââbÜn7={ö¬ÜÖ³gO\.—UVVÖµ@§¹ÑD£¹K„ín¨IÿŠ»¨Ÿ¸›qÜN·«ÞÀKÜt7ÿnò…ß·¯Wªû(¹Óki4-!D4Jxø–z+P›³Ë]}°£³IÀƒ@¨½ù(*Ýê¾m«[œNçèÊ: >Ú´iÃØ±c=z4$++‹S§NÕ ÙÙÙ8Ž‹–e5ëT7)åU—Ëu!///¼ªIMM%..ŽÞ½{cšµ§‘;wîdÅŠ¤¥¥U ¾v¼ûöí€ ÷=Z€h4wvñ<ÐÕ®r©”²° Æ!Pu'õ)8F &ª-ðGwc*f×¼ü_ûÇŸJ)›eN³Fs/BôA >ö&7…ÇÕ&T!º£ê<|3Á (#A=¼BˆpÃ0¢ÇŽ[ÍxÐëõÐçÃ0 âãã‰Ç²ªg´¹Ýn¶lÙâ­¨¨ØÔÚÑVTTäæææŽ7nœ ª˜|Ê”)~u»Ý¬\¹’;v––Ƹqãjkìß¿€nÇ«ÑD£¹C„ñ¨Bo•ÂôQS¬üÛâc ÊqÜ–rS¶ÍÅžEùªV£â.îÝøåæ¼øÏ;½–FÓœBôÆìM^`*}éJ“ ,vdv"*ò!P5)Ù¨š”û¾³U}p8©5¿øâ víÚ¨BôàààÊ¿«þ·Ëå"))©Vôc÷îÝx<ž à»F}˜;çðÉ“'ÇTmÇëââb>üðCΞ=ˤI“˜8q¢ßã €eYÁ¨ŒF_¬Ó4´Ñhî!Ä(à!Ô‹ýðÙÝLäïbe6 %>> ´²)„HB§À>ûXï]ᨺ—SÀL½¢¥im´@ááDÕx¤¡¢œÈ¾nn©aÍ!DÃ0’ÆŽ먺ýòåË„††òÔSOaeee”••qùòe²²²HJJÂívsùòeÚ·o_íš–e±qãF°¥‰ÀSv;^Wbb¢ß|)W}ûö%&&†S§N¼XÛ¶m‰ŒŒôÅ È} Ímà§ÓÕVTuSM¼'#P“ŒÏ¥”~WÕ„#QiØ ¬¼Ûn7BˆÙ¨Zà)å…»¹žFÓœBô@Mâ« }@–”òR“ ,öwÓ@Ôw‚¯ø8êûI¿Ý>ÃÛ·oOlllµ3gÎdÑ¢E¬^½šŒŒŒJ·ó7ÒµkWžþù€©Y‡æÒ¥K†eY;|ô÷»o~nnn\bbbµ«šr5aÂÆOQQóçÏÇívôBILL4ÏŸ?2äÔܧh#B¦ž!LTÊÕhÔ„?Ë6lñ!„˜Xe,+¾ !Æ ¢$Õô/÷@|$¿µüoRÊÍws=¦¹ „è!„x È@‰/*‚ð{)ågÍT|tf¡¾Ÿ: êÑ>iñqû!¦i¦¤§§›5Å„ËåbæÌ™„††òî»ïréÒ%,ËbË–-¤¥¥ëׯ÷ !rZZ$ÊëõÊÍ͵ªÖ³œ;wŽßÿþ÷=z”×_‰'bݺuÃårQPPðz Àëõvµ p5÷):¢ÑÔ!DT±yÔ„$`´¡‘Æ“ŽJ ‘À*)e­5?Ñš,)eÖ=¸w0ðª}ïWÀ¯îöšMSc7”ËM§fŸðØ ¥¼Üd«ÛDt€Z`(6ß¶ ŸæÈ Ã0‚ªVÅår1cÆ .\Hff&)))x< ð‚ÅÅÅ;vÌ ™Þ‚Ãׯ_wÓ­[7N:ÅÙ³g‰‰‰aÛ¶m„„„TþéÔ©{öì!44”Ú¶m[­[V÷îÝ}íxûÑrja4÷-@4š[ „h‡J5ŠÊP®âMÖ>Ñ®?I·\+¥Üîç< ¤ DÊ×RÊì{4„ß¡ Þ‹Wµq™¦%c 1ÔNµZ/¥¼Ød«Ûw(5n]çqO dú(W®\áúõëRZZJii)ׯ_çĉ•Åú)))<ñÄ•׳»„‰½{÷@ û-@4š:°WgQi H)›ì"„HA PF‡µRŸl?©@2ª0}¥”rç=ºÿsÀköu§×Lï°…Ï(Tî|{Tw°l`—*šæ„m 8ž›íi}ÂcCs­gªÃÏcNµº7!ú†ž’’rKß—ËŬY³X´hÛ¶m#))ɯûùµk×ÈÉÉÁãñ4wãÁ€Øíx;?Þ„›ž'(//¯$þˆ5¾ûî;ÝŽ÷>F &Bˆ.¨ÈG{à°¤)WD…pS|üMJ¹ÑÏ1TxJ$|!¥Ì¹G÷2íÿ—”rmý]€¥À?§Cjš{?%»Û›=¨èA³ìjåÃL¾îyÔ÷€öó¸‡8ÎÑ ÕŒÏ;Çš5kÈÏÏÇívÓ©S'Hjj*íÚµ«,LŸ?>óæÍ£K—.Õ®™â2J,¶TòOŸ>vãÆ Ú´is˃ƒ‚‚ ¢sçÎ~÷Ûíx]@púÞUÓÐD£ñƒ" ˜Žªs8,nJ“1!ÄàqTž÷F)åz?Ç8€~¨IÕ§RÊÜ{tÿ¶À'@;àoÀÿª±ß¬FE]þ°•¢Õ5iÒnËš&ÃŽ &¢j<"ìÍå(Áo›sÚ’"©ñõ@½lFûnÛhkª „è ô=zt¥øðuuêÑ£ééé†ÁÑ£GÙ´iÙÙÙL›6!C†0sæL>úè#BCC«]Óív“ÝbŒëà´aîüüü @µ.n·›œœ8Àùóç±,‹¨¨(RSSkù¡´iÓ†nݺyOŸ>Ý-@îK´Ñ´:ìUÎa.—«Ÿ×ëµ¼^ï!`}}:l§ã ÔãRÊë 5ÞzŒ'‘›â#[JùŸc‚€—^(ñîqÊïQ->Ï R¯jN|~<ü\Jù‹*ÛÛ4šFÇŽ&¡j%|K±e¨öÙ[¤”7šjl·ÂýãQŸ+µ¨° •"VÖ”ck­8ŽÔ=zx{öìY97Z¾|9#FŒ`òäÉ•Ç;–’’V¬XÁ'Ÿ|‚Ëå"11‘W^y¥V¬h<è»ïáÜÜÜ„AƒÕjõUPPÀ‡~È•+WèÚµ+½zõ"88˜S§N‘™™ÉÔ©S9rdµsͳgÏÆYôšf„ šV…B8ާœNg°aÃGîÙ³'ÖãñLB,•RvH¢–SøTÁ¹»1Æ`<ý€'Q=À×~Ž B¥Šõ@­Ž~p«ç¼Í1|˜‰š='¥ôg5U#ó›{u_æN±ÿbN@ IDAT…Ç@Tê_'{óuÔ~KcLàíˆäN§3Õëõ¶7MóˆÛí^àóSó¼T÷º`{óTy³kÜZ°7®r^TTTÄÙ³g™3gN­ã;tèÀË/¿Ì|À_þòâããk‰Ÿñ ÇãÙÒFµ÷»o¼eYÕžõÂ… ,X°€ˆˆ¦OŸNÏž=«·ÿ~–.]Ê€èØ±cåö°fÍš!D[)åµF{M³@ M«ÁÓœNg¼yóv1 ˜2eŠcÕªU![·n-„X.¥ÜàüTý„8ü¹)[YÚÌÏ£>§€5CøvKÜé(ñQ†ªS©·»¬¢ŸÓé\hYÖ‡ÃQâñx–Z–õ¶”²ÀÞ?œ›¢âÔôú¢j<Ú!~ ®¢Òµ–ëTMc`§>€ê峡¾lG¥,•7‚€á¦iŽq¹\ÎôôtG=ؾ}{ßœœœh{!¤VTÐŽÜ&  ÌÃìÍ…ÀW¾Ï£¦AZÍx°°°ððð€†z†a0uêTþíßþsçÎÕ*@÷¢RýZùeeeFQQÝ»w¯Ü¸nÝ:ÂÃÃÉÈÈ ((¨ÖI‰‰‰ÄÅűk×.&NœX¹½[·n„„„x¯_¿Þðëc¥i½h¢iØâãq§Ó9pîÜ¹Žª/Ó4™:uªÉŠ+žB5Mû„§P‘†Tñv“umªRƒâB‰¡Okާ†ø¸ŽªS©w'!DŒÃáÈîÛ·oÇÔÔTóÊ•+m·nÝúFaaá7nô !¾kÎ5F·ƒ”òºËå*ÎËËëZU€?~œGyįøðÑ«W/Ž?^m›ÝŽ×سgO,Z€Üwh¢iñØâcŠÃᜑ‘áðõ)¯ÉÈ‘#1MS,_¾|š-BöØçW»ñihLìBÈ—Pÿc¨HŒ·Æ1UÅÇ àýÛ}Ç¦ØØØŽ/½ô’ép8:thÐÆåêÕ«}ìÑ@>0£Žß‰¯êr°H–Rž·sØ¡¢JÿøûúŽO£©Bˆ0TÛç!(±jò¾ØÑHÂ#H5 cxÇŽÅøñãÍÁƒûõ„7nœ8|ø°qúôé)ÀG¶ƒù$Ôç n˜oÑF‚Ê@Ã0‚‡ZmcLL Ÿ}öÏ>û¬_—ó“'Oâr¹ju¾*..æÈ‘#-Õx0 y¹¹¹á'N¬ö?xppp S¸|ù²ßß_ll¬‘““c¿“u«öû-@4-[|Lv8C222UWeüa¿`ŒåË—?açZßà¦øØ|ÙÄâ£Êw$U¿´æDÄø¸Ý´«^‡cCß¾};½øâ‹•âÃÞGZZšèر£øè£í¼å礔%u\²jZË\)åyPæUBˆ¹À#À,!ÄOõ Fs/BtE A¨Ï.¨ ßß5ÆÿgBˆ‡c´aC;wî,}ÂÃß$ˇa<þøãŽßýîw„/¡\×ʃdª­®.0odœNgjJJJ-ãÁ   {ì1>ùä®_¿ÎÔ©S«µ•½qã+V¬`Ĉµ§mþøãGí°¹vibñÑxè€j[ûAÍœõ{ >z:ŽÍÑÑÑ3fÌprî4hB>úè#˜ŒŠ Â×b÷’”2¯ê)åE!D.0 è‚jÍ«ÑÜU\Ë}w€Àf)åÁFCG‡Ã1Ê0Œ¡ááárâĉŽÄÄÄ:…GUºuëFß¾}ÅÑ£GX–%ý¨óË :p_„} ÈHMMõk<8tèP Ã`ÅŠüÇüQQQDEEáñx8tè:uªV×­Ãx° Ã(ÏÏÏ¡¡¡¤¥¥1jÔ¨ZÑ-[¶ „¸‚ê¤ØªRJÓ4ÎÕw¼M•ŽV)Üì åF¥J~{‹´À{9Ž®.—kŒa‰QQQÖÃ?,úõëçt¼ÛíæØ±c˜¦Itt´ßÈHÏž=éÝ»·÷ĉñ€ M„]oSÕxðôéÓ,_¾œ§žzªÚ±mÚ´aìØ±Œ;¶Îkz<ŸñàÆÖÚ@ÀnÇ›Pµïĉ‰‰‰aÛ¶mœ?—ËŰaÃHJJªÕ–·&qqq¬Y³¦‹¢]Sþj-@4-§Ó9íO|”””ðþûïsꔲÁèÔ©3f̨Õч-BÄÒ¥KB”û Ó Û¯àyn ‹%5S1ª¤]Ý©øˆp8›ºwïÞsæÌ™.§Óy[cŒeÆŒŽÅ‹ÿw»Pðø9ìßP©ZB<%¥vìX£¢¢"ÚNiP„i¨Õ^ |&¥Ì¯±¿ 0%>JE·)>:›¦¹¡k×®½gÏž]K||ûí·¬\¹’W_}•þð‡üä'?¡]»v|úé§u^·ÿþ<óÌ3¦âwBˆ!5÷K)÷I)ÿ»”ò5)åO¤”ßÔwÌšû!„K1\ñ`6ªÈT=ÄŸ¤”ÿ%¥Ìièvº>áát:¿oÆóC† ‰üéO*ž{î9£¦¯ƒ“'O²dÉ~÷»ßa!!!ÄÆÆźuëªëûþ D||<‘‘‘–iš©÷ôÁ4ubŽJKK«f<ÂÙ³g)..Ʋ,V®\É©S§˜>}:;v`ĈX–…Ûí®uÝ*ƃ÷CÃáââbǵk×*7T 6¥¥¥ôêÕ«²366–ððp8Pí8»¯9×Üh¢iö8ÎT˲&ø%%%|ôÑGôèу3fŸŸÏ|€Ç㡤¤„U«V1a„:'>ìþî‚›NÊ ‚b00Þþñ+)å¾û]À‹@7nF>ÎRO„LÓ\‘‘áªY„¿}ûv¾üòK^zé%|‘¤ÐÐPRSS+_¼u‘œœLBB‚t8oÕwL ¨VÓBˆtàÇÀ •~¸íX*¥,h„q8„CœNç\.×ó£FêòÖ[oO>ù¤èСƒßsŽ;ÆŸþô'Þyç ÃàÇ?þ1Ï>û,;wÆ0 ÒÓÓ9tè§OŸ¦¼¼œ•+W’ŸŸÏC=TçXÆoZ–5ÜnF¡iâ Ã6lXµ±±±ôèу·ß~›_þò—lÙ²…iÓ¦QÕ_êüù󄆆ÖZÔ*..æðáï×ûm£>Œa–eY¥ ñ,BˆXà ”ÐY/¥ÜRc¿å‚Þ %>J)ëÝ=JfšfV—.]úÏ™3§–øðz½DDDàr¹ÈÊÊ¢OŸ>•/¢¢"zõêU/?ƒáÇ›¹¹¹×w\šû!Dª°¼ªqàETG«e¾g7}èt:'!BSSSiii´iÓ&à9‡fݺu2lØ0Μ9Cppp5C:€ÄÄD"""øøã¹rå ]»vå?øAÀUÏ ׯ_¥u.7GÌÀšß†aðÚk¯±{÷nΟ?OBBB­¢ê¬¬,’’’j}OnÞ¼Ùr:§Z¡ñ _ª´ã4dÈ ""·ÛMII >!ïr¹¸~½ZGy‚ƒƒ)+«ý‘7 ã9¿ÐDÓlBŒ0 ã¡—^zIÔì·ï]»våù矯|ôë×W_}•… âr¹˜:uj½&Ô‡féÒ¥–ak½^ïõ[žpgÏÓx5Û)¥ü[ýàY 7‹ÒoG|t0Móoááá±sæÌqWÛ¿sçN²³³yã7xíµ×X°` ,`Ö¬Yìß¿Ÿ={öðúë¯×ë^¡¡¡X–$„0«8Xsç!"AAAñ–eUTTTlò²3™ýÿs*Õ°j¥ê TG«ÜÆp,·Ç↙¦9Æår¥¥¥9RRR¶è¶,‹ÜÜ\²²²8þ<)))LŸ>¶mÛÆš5k˜4iU£%†a––Æ'Ÿ|´iÓ9rd½Æf ÆîÝ»û£H£àõzKŠ‹‹½ø™™¦ÉðáÃýž·qãFN:ÅsÏ=Wmûµkר½{wk5 ˆÝŽw ¯oPP111dgg3yòd._¾LhhhµóÊÊʈˆˆ¨u½¸¸8V¯^ÝYÑ^Jy¥QBÓdh¢i–!0 còsÏ='«í»ví™™™\¿~gŸ}¶–ÀˆŽŽföìÙ,X°€Å‹3sæÌ:S° X¼x±l¬¨¨Èn ç‰^Fu…ÊVÖØïëˆ5¨@‰Ûq8oošæ7:uJ˜3gŽ«æŠîîÝ»ùüóÏy饗0 ƒž={VŠßÿþ÷\¾|™éÓ§ßrµ@JÉúõë½N§ó€ÝnRÓ BtD­ö:õìÙÓ3xð`³´´TnÚ´éYà[àë¸o(0ÕF×7ó¨@M®·ÞN:á=K0Ä4Íq.—Ë•––æ5jTÀï˲8xð k×®åâÅ‹¤¤¤0{öìj’‘#G²aÃ6lØÀãW<˜uëÖqüøñz €°°0aFè­ÔÜ#vÙ¸q£;vl Õj;vŒµk×V ѪT1<ìÿìVËÇcœùäïJ½^ï õ£¦q°'ÿ‰N§3èÚ¥KïСCͤ¤$:vìèûˆ¸¸81þüQBˆÂªÆ‘wyïî(Ñ1›ï–+À6`—”²A"‹ÆÒH1M3%44TL˜0Á2dH@'fÇCNNNeÄ£}ûöüìg?ó!q¹\¤¦¦’••EzzzµZÓ4IKKcÅŠLš4©VšV JJJ,˲®ÝúHͽ@JyE±lõêÕ/ËÉ“'5EEM¢££ùùÏ^ë=RÅxpóýæu$¥,s¹\…‡êî ¾wovv6¡¡¡¤§§S3ƒ!UŒ õÜô>@ÜgŸM3G‘lÆÏ<óŒ2¤z“%Ÿø ãå—_æØ±c¼ÿþûôíÛ——_~ÙïäâäÉ“,X°€Ç{Œ¡C‡VÛWPPÀ‚ ,˲¶UTT¬n ç f]³À‚šùîBˆÑ€,¯Y”~‹ë‡˜¦¹¦]»vÿÿýï»jFîÝ»—eË–ɼyóüа¢¢"Þ{ï=˜={65Œ)%Ÿþ¹µsçÎ^¯wœ”rg}Ç©i8ìvͱ.—kÇãéb%%%™Ã† #P Y€¯¿þš7^ª¨¨xûN'NvjÓ TÄ#ªÊ®“ÜL³òÞɵïp<íMÓLµ,kXÇŽ™8q¢9xðà:Ó0}-¼ÒÒÒ cñâÅÌž=; áÜ7øÕ¯~ň#*SM|x<~ýë_W¶¿‡fñâÅ^Çó©”òÀ-OÐÜ3„ÝNçRÊð#FˆÔÔTQ_ÑècçÎ|þùçåçßïÇvãBˆ1‘‘‘é?þñïZ4|ýõ×lذ¡ÌãñügcŽjš-@4Í!Ä@Ã0žž6mš¨™ƒ{ãÆ 233 å•W^©GŽañâÅôéÓ‡—_~ÙïûêÕ«µ:–œ|˜o¾ùÆsúôiÃ0Œo=ÏÚûm½9`OÇ9Î1^¯·[ll¬5vìXGM£[X–ÅÛo¿í)..þö~m9n§ÿ­·ÞªW»{ñÍ7ßX¹¹¹^˲–ÕlK¯iè0—¦Y „H4 ã©©S§!!!µ"ýúõ«Öùê•W^©5Á®ù¥XTTDff¦×ëõîh(ña3%>*€e~ÄÇH”øÕŽ÷vÄGiš+BCCGÌ›7¯–ø8pàË–-ãé§Ÿ&99™ØØXþô§?U×L-éÚµ+sæÌá£>âêÕ«Õˆ”’/¿üÒ»}ûör˲ÆkñÑ4Ø©z=Ç@Ó4†a&&&ŠAƒýû÷˜^ˆ6mÚÏ’¨Gîº-zbQÑŽhT'7Pnå»iä4«c‹7MsŒÝ-Ϩ³,‹mÛ¶‘’’BÍTÏôôt/^LAAA­.H>ÆŒCvv6ÙÙÙLœ8±Ú¾šÑÛª÷ÌÍÍå믿öœ;wÎBì±,k“×ë½ì÷Mƒc§Ã!¢:”zðàÁááᤧ§3hР€Ÿ­#GŽøŒ·7昛gMÓ¼~èСšY°,‹“'O’——Çþýû=çÎs8Îc–e­¾Æ+š–Ž€hš!D‚aÏL:Õ¨Y¸Y^^΂ 0 ƒY³f,-((`áÂ…tíÚµÎãŠŠŠ˜?¾·¢¢b¯×ë]ÑP+ŽBˆ±ÀDTZÕÇRʼûÓP“¸¿I)×߯µ]‡ãËô×_ÝVm^^|ðO>ù$<ð@åv_:ZDD³fÍ¢f—,PbCÍso²jÕ*kóæÍe–eMRn­ï8›;ö„¾Êo¥Êð±(hN+Ñv´a°išX–Ô¿9xð`Gbbb½ümê"77—÷߿²¬_JBt†pÓ#Çò-À±¦þ}™¦ùô<øÔSOùU§Ö$Òãñð›ßü†^½zñüóÏWÛgY¿ýíoiß¾=³fÍ xß•+W²k×.þñÿ±Î ˲ÈÉÉá›o¾ñ\ºt Ã0¶{<žìûİ®Ea·J¸fš¦+88XŒ3Æ1bDµH—eY,X°À{üøñ§n×VŽišOÄÅÅ%MŸ>Ý蘫W¯rèÐ!òòòä¡C‡,Ç#ÇéŠŠŠŸø(,,äÍ7߬t¢ „O„DEE1kÖ¬ZŽ*âã;¯×ûEŠDT»]üµæ¤]<‡jÇ»UJYï(Œ->¾ ™ðýïßUówrøða–,Y”)Süvá),,¬¬÷ð—jU“Õ«WË7º-ËzHJ¹¡¾ãlîØ¾/¢„GMNK›rr(„è‚]Lîõz;tïÞÝ>|¸#)))`ëØª\ºt‰¼¼<Ξ=KXXZÎz<þÏÿù?Þ²²²åU‹Ñí´”>¨ºý¹í¸‚êN³]JYr×zp¹\3Ç]3Jd}þùç¼ù曵~[·neÅŠ¼ù曵 ÆsrrXºt)?øÁªÑUåêÕ«œ?ž@é:‡ï¾ûŽ5kÖxJKK‘Rîôz½¥” æ5¤¹;„ÓQ‘ë/}¨.j©@htt´ŒŽŽväææzNŸ>mY–õîý>yBô6 ãÕÇ{L :—Ë…Ûí¦¨¨ˆC‡‘››ë)**2MÓIJ¬Ë–e­ŽH)Ë›z욦C M“!„èoÆ‹ÄÇÂ… ±,‹Ë—/BFFF­ö‡5)(( //|°Zþwqq1ï¾ûncˆ^À Tzc¶”rMý}Qu!&°¨÷X„N[|L¬K|<ú裤¤¤¼Ž¯è}úо}{8@xx8o¼ñ†ßšˆO?ýTîÝ»7¿¼¼ü!D;`0ª›•ÏäBÇPnåæÝq;˜¦ùô!C>ýôÓµZª^½z•_ýêWLš4‰qãÆUÛgG€6lX­‚q˲øÍo~C×®]yùå—okuNÆz÷î]+gûܹs¾Ê•¢? IDATÈǾ€PŸ«ÔðXBô¨²?Pï0[|,oÓ¦ÍÄyóæÕGŽaÉ’%W絺uëÆk¯½Æ{ï½Çûï¿Ïܹsk³fÍŸøx¤µ‰›à·5~ÿ„Ÿ¢:–õB„Õ¬Û¹×!ÚœNçP gçÎ=C† q&''Ó¹sç€é >ÊËËÙ·oyyy<ÿüó?~œ‹/òÖ[oUŠõcÇŽ1þ|öïßï·(:99YìÚµ+Fñ ª¶Ã§R®¢j;v6§h‡?¼^oþ¾}ûž|òIGM‘Õ®];† ƦM›5j¦irðàAÖ­[ÇùóçéÓ§»víb„ µŒÓÓÓY¾|9ÅÅÅõòÈñ uëÖyÝnw…ÇãÙ|«Wz[ W€Ï€6>ñ•u"Gí??H)÷!öán·;(µ,ë‚×ë­LíBœA¥¼F§šh¨šf‚ šFÇ'>&Mš$ÆWkŲ¸¸€Ù³gDPPsçÎ%33“ÌÌÌ[Šªœ;wŽwß}×[^^~°ÅG0*¥'õÅúYÕ{ !:£".TÁïòú® !‡ãÃàààçÍ›çêÔ©SµýGeñâŤ¥¥±{÷næÏŸÏœ9sêLYëÖ­¸ÝîZû¾þúk¹~ýú ˲&×tko-T\ÔØîµ_’Pÿ–÷\€!œÀ—Ë5Ä0ŒÊ¶¹IIIôîÝÛy«ó=dÏž=äååFrr2^¯—äädvíÚÅ•+W*Htt4ÁÁÁú ÑÑÑ„„„ˆÒÒÒ~¨hÇQ`p°1[èÞ%yn·ûñ@"+==;vðÅ_PXXÈ•+WHMM%55‡ÃÁ¯ýë€Æ‚YYYœ8q¢NrãÆ 6mÚĦM›¼–e]÷x<€ÝRJmÔÙBB8¤”Úï±ÿ?SÇ!GP$-@î{´Ñ4*Bˆ~¶ø0Æ_M|¸Ýn¾úê+&MšT«ýeçÎÉÈÈ 33³2RuµÒ.\`þüùÞòòòC^¯÷“† ùÚáù§.@ ª~ êªO[”ø ?×wbç.—kêܹs]5óÔ X´h&L`ܸq >œÌÌLþë¿þ‹9sæÔi„Öµk×ZÛ6lØ ³²²¼–e=)¥\WŸ1¶&ìÂôH”!ä=Ëë¶;Hõs8 Èw¹\"..Î6l˜ˆŽŽ¾e×&˲8rä{öìáÀ¸ÝnBBB˜7o^µú„~ýúÊž={*=@Š‹‹q»ÝDDDø½¶a$''³uëÖ’ŠŠŠE-1Ÿ]JYît:w¬]»vxbbb­(H‡HNNfÇŽLš4‰1cÆT«ñ N˜0¡Zš§išüèG? ØéÚµklÙ²EnذAZ–Uêñx²Zx´H !ÖJ)w7õ`Z)P ÞF»šÖ‹ š»ÆÎ7uå8 !ú†ñÒ„ j‰P¹Ú{÷îåøñãÌž=»V½GçÎkEB‰ .ðî»ïzoܸqØëõþ¹óM'¢ u+P¯* Lm£¶—Ψ íVßkb‹÷].×´yóæ¹jN ¥”8~øaRSS5Ñš3g™™™üñ$##ƒðððz=ÄÆåêÕ«½RÊiRÊUõ:©õ1õoõíÝæë×l› 8ããã2dH½ÚæúZUîÝ»—½{÷bY LŸ>ëׯóá‡ÖêdfIIIìÝ»—äädöìÙömÛ8p`­V³UIJJbÓ¦MíQ^- Ûì3ˆ;þ¼ãðáÃÄÆÆÖ:.==]»vѾ}ûZÅè©©©lذM›6ñðÃWÛçïß©¤¤„ 6ÈmÛ¶I!Ä¥ŠŠŠ Àw:¯½E3ÕåM§Ë5RÊ“(“RF¡kî »ì T.§¯Šy”2;Àñ½ Ø‘žžîxðÁk‰çΫôüTt^RRRé\âÔ©Süä'?©U¿~½*uªY¨^•K—.±yófkëÖ­!.TTTdšº ±æîBt¾‡ª{ú-(õ°Å!„èZ08p»¨šÖ… š;Bñ,jÕÿ jòÝ›Ä'>RSSS¦L (>|øDHpppÀz’’²³³yøá‡«M$lñá½qãÆñŠŠŠ2Ânå: pë«ÖKØ«ßO ¾hÝÀB)ea=¯+Ç|§Ó9ã{ßûžË_ªÔåË—ÉÌÌÄëõ2wî\¿õ¥¥¥¼÷Þ{”––’‘‘0‡}óæÍråÊ•–->VÔgŒ­ »AÀ+¨(ÖB)åù;¸FˆÓé|ÅëõvŽŽ¶† â8p`½Úæ–——“ÍÞ½{9þ{öl£_¿~µÎ-..æí·ßæ™gž hèââbÖ¯_oåä仫Ï)åÁ»Ms@ñÊçæ¶<™4·bð(ªƒØ}ù¾Ñ(nm«Ñøç¯À¿I) ÚÉúEÑÝ0ŒcÆŒ©%><ß"è:ÆùóçÉÌÌäêÕÚv :t`òäÉ~ÅGYYÙ±ŠŠŠX|´GE7œ@Uã±(ña¡j>ê-> ÃøƒÃᘙ‘‘áW|„……‘‘‘aüñäÒ¥Ú CCCyíµ× eáÂ…x<µÛ·oÇ/߯/{õs:*ýhш‡Ã1®sçÎ?ûÙÏDFF†cèС·999lÞ¼!Ç'%%…ŸýìgÌž=P ‘””ÄÙ³g)**ª¶ÝWÓ±oß>¿ÿ戊ЦiFÕû„FDa ! !¾‡ýñ(o’|à}à)å)åy!Äwß|óßìÈÈHâââÈÊʲn-UTTÄÇì}ûí·å¾}ûŠ,ËZâv»ÿ¨ÅGëÁîD7õ]­k?ž|ûï˜&…¦ÉÑDsGH)Kë“ïìt:Ÿ6l˜còäɵ"Ÿ}ö‹-ª&BÜn7‹-à?øn·›ùóçû!U)))áÝwßõܸqã¸Ûí^ÚÀiW&ªn;”söò¯€ñö­o˜Ù9{Μ9Î@æg>ÂÂÂ*[èÎÿÿÙ;ïø8ª«?g¥•,¹`ã6¶±16Æ`!ôÞ ¡B†’RHý½I ! yÓIƒM!@B(!ô@h®rø7l¹ÉE²Ú¶óûãÜYV«b«K÷ù|–E3³;WòîÌýÞsÎ÷ܽ"dÊ”)\|ñÅurÙgΜÉßÿþ÷¤ª^©ªmÊ»"2‹|<¦ª[šñ^“N>ù䜦:´lÞ¼™7ÞxƒH$Âu×]ÇQGEÏž=éׯC‡¥¨¨^mϘ1cÒç™Lš4‰]»v±bÅŠÝý5:Tꉈô‘¯c©ŽC0¡8ø³ª>¦ªËÃß¿d2ùŸ5kÖDÖ¬Y“õ=O=õÔtÍT}¸¦¦É{î¹G-Z´*•J=à„‡·aíz†-$-VÕÒöLWÇ™\lú¸†«žnŠ žV%™Lö4iRÖ´«Ï|æ3lܸ‘éÓ§S]]M,ãÑG¥ªªŠk¯½–!C†pÓM7‘J¥¸÷Þ{³N°Áêî½÷ÞdyyùºÖN»rœ‰Õ¾T × ¸TžÏa«³ï©ê̦¾i$¹+77÷ún¸!:tèÐZû6mÚDeee×lÛ¶òòr‰÷Ýw%%uKLzöìIf:JH|\¡ªO6uŒ] €‰ðˆª7ò’†Þ+’H$êX$,Y²„E‹ÕÙ>qâD***² …I“&±|ùò¬ÿî`‘Ž &¤ Ôà 4ˆÁƒ3~ÓEW­Z•jŽk)Ä-"—ßNÄŠƒw¯c âþ®ª›³½^U·‰ÈÇo¾ùfV15dÈŽ:ꨬMðHÜÿýº|ùòU©TêþêêêÇTu}Ký~žŽƒK•ì~lòµÚÓl‚ Þ*"'ŠÈ ήÞÓMðÄÓªD"‘ª­[³g´ì·ß~\{íµlܸ‘‡zˆÇœŠŠ ¦L™BAA`©VÁ*ÿÛo¿]ç=ÊÊʸï¾ûåå埴vÚ€ˆÕ½<nT'"}±ÈHëõñÚn¼o?U½íŠ+®¨#>T•'žx‚x€ŠŠŠôöÕ«WóÐCqê©§rË-·——ÇÔ©S©ïï0kÖ¬@|\Ó#ýk1…×ݶ}3=zL"‘Hªª*»qÖüùóyå•Wêl„B¶(ÆÄ‰I¥R,\¸°Î¾€I“&±cDz­ö_z饜{»¬¬Œ7ß|“yóæ‹Å²šH´"ÒCD&7c)qc1!¿øð{U}GU+xÀ¢ Ë–-‹¬_߸nH¥R,^¼˜{î¹'qÿý÷§–/_¾8•Jý1‘H<ÖQêé4ü ÙCfžÅ¥/+&§Wc)ËS¤§›àmx=­J"‘˜óî»ï~fòäɹÙV‡ Æ”)S˜6mUUUÜvÛmiñ°×^{qÓM7ÕÙˆÒÒÒ ñxü±pïÖ@DA§²·Tuyh_>Öë£PŒÕ}ìŽ%gªF‚Þ çåÊ+¯dêÔ©<ðÀ\ýõ”””ðÐCqâ‰'rÜqÇpã7òàƒrß}÷Õ[t>gΞ}öÙ”ª~QUßñu5öÇþ­Î©ç˜¿`¾õ¢ª©¼¼¼Mk×®Ý7[ñsÐ °¸¸˜ð¿q"‘`ß}÷eáÂ…Äb±Z.Y={ödôèÑñ©O}*ëy‡ Fß¾}™?~§«lŸ¥€ÊÊJ.\ÈìÙ³ëÖ­ËÉÉÉÙ™J¥^SÕ6÷çwfŸÂòðƒFŒUX>þ¬¦:Ç…QÕùùùK_|ñÅÑS¦L©ÓLx,X°€×_=QRR""2'•J½ÛÑ»¾{Z”\w_Þ葞f!"ŸÁ¾ç}¨IõŒ`Íy–z7¹î… žÖfFIIÉ/¿üräì³ÏÎqÛo¿ýÒ"ä±Ç« ÈÌ«///çþûïO–––nl#ñ‘\‚],Wï„ö p!0(%#-«‰”D"‘ʵk׌?¾ÎÎ}öÙ§V#ÆÒÒRN8áN:é¤ô1AÑù´iÓØ²eKRTTÄÓO?RÕ)ªúÈnޝ«±hÌnxÓî¼a<_º`Á‚'tRëj¸Aà AƒXµjEEE,\¸¼¼<‰‹/®Ó«câĉ<ûì³ìܹ3«Ýr$áâ‹/¦oß¾Ž/‹±xñbæÎ›\¶lY$‰TóR©Ô‚d2Ù$“„–ÂÕQMÀ&$áb§bl5zAs¿Ó±Xì¥5kÖ|õwÞ‰œp é4ÐD"Á¼yóxíµ×¥¥¥šJ¥f`}_v5ðvž.†‹XYDæ¨ê¿Û{<Ý€¥X¤C¨1·ßÓð6¼žf#"‡a–³ Ùð^{úé§Kx"Iqq1Ó¦M£OŸ>YEH@yy9÷Ýw_bÇŽ›\çæ=ê×°;ˆÈÅØ„i'p_8 DDNŽÇ,\§7Õñ*“œœœ? <øú›o¾9/'''ë1[¶laêÔ©¨*·Þz+½zõªsL*•ª“ß>þ|ž|òÉ”ªÞ¤ªS÷d|ž†qi]·|ãßÈÚwå¹çžcþüùäææ‹Å˜0a“&MbäÈ‘L:•ÂÂB®ºêªZ¯©®®æÎ;ïäôÓOOGºv‡T*ŪU«˜={vjÑ¢E¤R©„ª~œL&ËÚºqž‹"N&âzw`Eå‹€™ªúI Ÿol$¹tÒ¤I‘#}ú4ø¾ .ä‰'žH©êWUõÏ{:>OãäååÝ| ' Ìl5 1v%{ÿý÷y饗øþ÷¿_ç3ÿøãSUUÅõ×_ߤ1„:¨kQQQªªª Y•L&ç·u“5= íÚÌÆú4Z×ÑŒóF£§Äãñ¹¹¹NxÌl‹k‡§câšÄ~37ø³ªîV´Ó³çÔ#Bv©ê¯ÚoTžöÀ§`yÚU]."yã7.O$‘3Î8#«4hS¦Láµ×^#3 %ñxü‘6ƒÓܯfˆAÀÔ8^í±øPÕÍ"rîÌ™3ߎF£rÎ9çdMY0`_úÒ—˜:u*S§Nå†n¨W„,Z´ˆ¿üå/IUýš­O</š5kÖɧœrJkkP¯QZZZÇyâĉ¼ð ,\¸°N½Ç\Фf†›6mbáÂ…:cÆŒä®]»rrrrÖÆãñ9˜èhóɶ³Ø<”P§r¬øt5&<·EÆEUníóx:ã1ñ±Æ‹¶EUwˆÈTL„ôÄíîéüxâi3œyôí·ß¾2•Jeí &B®¸âŠZÛª««™:uj²¤¤d[<ŸÞi.OýsØ÷äcUý ´¯s¼ÊÃ.žMv¼jU)"§¾÷Þ{¯Æb±ü .¸ b%&µéׯS¦LI‹[n¹…h4Zë˜%K–ðÄO$ÿUÕ{Zb|žFYPZZzÚúõëÉìã4œ5kçw^­4¹ à|þüùuHÏž=ë=ÙÎ;)**bæÌ™‰íÛ·çäääÇãñùÀ‚d2YÞ¢¿Ypf ‡`ÑŽpSÃ`0Ï×Zx:Á—Ì[ï¶2Îdâ à¬wÖfà#à¬v²íl "sRU=¡=ÇÑÝðijG8»Ìó26Ÿ."§»ÿ]UßÉØª®‘Gÿûßÿ^Ô+BÂâcóæÍm&>§ƒ€rà…`£+:ÿг |º%WrUõ]9~öìÙo\pAN6Ò¿n¼ñFV­ZUG|,]º”G}4 ü0™LÞÕRcó4J$''ggQQQßl$'NœÈ[o½ÅŠ+3fL­}çŸ>………ž p°š9sfbݺu¹Ñht›ó’Édöf9­Œës8V'˜&€Å˜ðXín<ÕìÂ>ŸžVBD¾ üÈÇ®•˜‹†NÂúü¬jñ…¨ëðáiu¼ñì)ÿ6°¿ÞbRU]ãDÈ•©T*zÎ9õ¹ šsÏôéÓ“›7oÞîÄG«åЇ‘€£°~Ïe¬Ú ˆ?Õ‚HUg‰È‰³gÏ~;•J^xá…Ô éׯ_­mË–-ã‘GIªêíÉdòg-=6OmD¤Ö³â``X<—9sæpÖYgÕ12dHºïG¦Ù{ïú{pUWWóÑG1oÞ¼ÀÁª<‘HE±X¬áÆ/­„ˆbÅä‡aB=` 5ÑŽVý¾º¿ý ògßÝÚ“Aý˜ÝÖõPÝ 9ø#ælw¶(™t5 Gc}˜J©ªš½RÛq>5ÖÀž6 Ïá:ïqw`'Bæ¿÷Þ{“¬“µX,Æ´iÓ’6lØÙÆâ£€šÚŽ™ªº4´oxß¾¤ª(UÉd21wî\TU/ºè"É&BÂ,_¾œ‡~8©ª?N&“w¶âغ-îa_LtŒ¥öä;¬­ªªÚÍš5’Ù›¬¦#›{Y&‰D‚eË–1oÞ¼ä¢E‹¨VÕ©Tja*•Z×÷»Äj;¦¦oGë™2XÕ†c‹`õ%›È¾èѪöÜžNÉ,ìÚ>§½ÒŹ û;KUÓ]XÓÕ¿Ü#+.ýy8ƒ]Oý»š³þX´u·jÞTµþn¯öÞ{ƒ1Á´±¾ë›KAŽ]W·µË`gà O» "£€ÃR©ï½÷^rûöí\rÉ%9A±mH|”ÆãñiªÚ–ùìç`Í’¶é §ˆô.Â&=Eª:·µàRZþôI&“sŠŠŠF=/ºè¢¬éX`Ñ~øá„ªþ,™Lþ¸µÆÖ‘(0 ‹|HMC°•³UX:ÇǪZžŸŸeQQѨ‘#GÖùÇ>|x½ç ¬fÏžš7o©T*élsÒ¶¹Îbø0Lx„6` ´ó*æŠð$ÇãɆˆäºîöÿlï±t‚kd“‹üÝþ'XT3H‹*‘ßw„#V"òOìztðÖcà<¹X¤ªgd9ÇàC¬_×Wܶ¬5 "rðKÌf?X!-‘_©ê]¡ãú¹ã.Çܽ¶ˆÈ}ýeýxâisÜjB0‘Ÿ•J¥Þ_ºtéåwÝuW¿Ã?<Ò§OY°`AróæÍeN|´YѪˆŒÅòØ“˜­nÜmš öÆ.¨­æ/"{cÂgÖáÔd29¼¨¨è­T*Õó¢‹.ÊÍt[µjÓ¦MK¤R©_&“ɵÖغ"Ò‡Á1’šÕ~€j¬pr)ÖÁ·V^,›[TT4òì³ÏÎiÌÁ*EEEZTT”ŠÅbˆÈ’d29X®ª‰–ü½šŠ³Ï=ûc«™À|`®wòtÜ5üFÙ†¥Õúþ/­KUø"ò±Ëš¨‰ÿÀ Öÿ‚‰ÄIù°7ð•ÐKzû/»s} ›S,Þ¾ "£]§û0×`õ›m«Sâ:·¿†]ëŠEÌò#1µà¸BàM·í~à ì^q#p·ˆôðÃÙñ}@|ðÁD*•úM2™üNkŒ«»àå¢c5“n€˜ãÙRlŽ^a "‘h4zËqÇ×÷´ÓNËzLqq1EEE%wíÚ%999«ãñxEiõæšõ!"Ã0Ñ1»á‚¥–­À¢K:Jî¼ëÿÌ`7þªZÒ®ót8\]ßÕ˜qÈÝÞ¡uqó™Ø"F (ÞÇ&è¯d.,ŠÈ5ÀCÀªúƒŒ}.Æ‚BDÞÀÒ¡TÕ)ÇŸ†ÝG¢ª? mPSð>2ˆ(‹ÈJìºq˜ûY0Q3 8º¡l¹øp½ªNË8׻؂æ~¾­.^€xÚù,6¹©À&ò¦ó©»hƒu;ÿc0 t6‚×cù¨ÏµVê•kŽõ7Ìak'p|fo˜››ûD2™Kh“§zÆÚ »Qf”ïÄ&ö³:Òw5 $@2ÙŠÕh­lã!y:("òyì;þrØRÝÓz¸µobÍz'†v•ß §'‰È¿S€½UugÆûœ‚E#¾ªªtÛ26\§éöE°~CI`THhïSKäd “°Å–¿¨êù—b”Á™÷™LÎUÕVËšè¬ø,O›áò)ÃVCžéH·òýi÷ãK!ñ‘‡¥‹å`“ÄÖ܇‰JàœLñÖ¬8UD&®_¿þ, /ðU}¹5ÆÕ‘žÀh,Ê1ššU~°¢åUXAõRU-ÛÓó¨êRyñ©§ž:ûwÞI¥R)-..ŽF£Ñ­Nt,ŒÅb;}£V‰¯±Xõhjrœc˜Oÿ\`m_)Na©p˰U>ÖoàPà yDU×´ãø<퀛€~3EX†¥ëÎ…óÚqhÝ —æv'p§XãÞ£€Ïb‘¨»Ed‡ª>柀¥\=¥Î1h†44c{¨³È ª)yø>V¿ñ–Ûu ¶°ÔXcÒƒÜscÅéùÀìÚóJ–qpÏu=Ù=^€xÚWT}¦ûñ5Uí0OÝäÿ\Ld|¤ªKB»ÏÄrOwÏ·â0~…EYÀeªúnC;qÒ¬ÎëÝ7†M²Gcn&™©UK1ѱ¦%k.œòòõë׊­Æ-‰Åb[Zêý÷—bu(–bUÚµ‹v×E¦½PÕíÀc›ç‹ÈjÌÉ.(Põt#Üt(ö}¯Âšßå`æ!¾ö£põbÿþ)"¯buÿCÍ÷·[|«/j¹”a*¸^? |o‰Ho¬ŽóÝ,u!™‹R-@õ—mÜ+±ôÐe¼O·Ä O«ãVœ/ÅuÇò@;°4œj¬  H»eŽ­²>ÛZ.?"òCàØÊÌMªêZš‰óš…M@ v”®©` IDATC1ËÖ ÊѪ…Ô.Ò÷ŸÖØçéê8áÔD9dRŽQ/Ç ÈÛÒÖ¹]h Å*èÙ1Ÿv´ömJ±Üì|,­ÌÓ½ØJMêKñ \.";±HüÇí2²n€ˆ4m ®Gáhð«À­Øbåã-4Œ‡0gª‹°HHVgÙﻀóEä{õE„]¤í5wÜ1e.xj㈧µ9[‰Ž퀩“°« ,Tp6y)Á,öZ¹ øƒûñ‡ªú›Ö8OWÅy¯à™µ)`#_ ´Kã¾¶Æ¥)V¨ù›(°Ë_Ø¿‡-Š_û`b«ÝŠû=íÊ,í1ìYqÛªÉÞ¸ÒÓrüVDöþ¼­ªåÎh%èðDèø_W‘$ð·ÀmODÄ:§ß¸B6‘§€ß߯܏oŠ•ªî‘_·OˆÈWÔ5kF|¤ª>åÿ1–ªý„ˆÜ¼ªªê®Å“0×Ïoú(l]¼ñ´"rv±QÌ=ª]sß3qàyÑÛÁ¤LDFcŽ`Ü-ÞMÙ¹MÃnˆw«êOZú] g0”šä}3ÙEMîÊî”ëíÜ ‚«ðߥ„š«cúÐR¸ Φp¸gcùÙ‹:ŠepgÄEˆûcMÚ:Ôʥ؉¹)nÏrÈL€†H³ƒ}Ù.ZõX]ã¹€ŠÈ¬V.voü<8XU׉ÈYÀ_±ú‡Dd=0«©Â¥šŒªî‘¿“UcÅçaî_.‘bÌæ{Ö$ø)wŽ9"r¡{ïå"²Å;KÓúæîŒ»»àmx=­‚ˆ nÀ¾€ïªê«í<¤:ˆÈ‘ØD¥øC¨ÉÍØM÷ƒÖp—rV€/`¤‡ëºÃêüîâVcÑQØÊ~x2‘ÖP“Vµ¹ÍÙŽ¸4Áñ˜è÷,©ÂXΣ‹G~DäJ¬§Ð:¬ž¥VÏÕ×ý<-ÓÒÓÓ0NtÜ„M¼òÜ®bààwªÚîu|"òÀ·€1ÙŠŠ8½»¥¨i.»¸MÚqµx'cNQûÛ±ÈÓ;õ¥¿¹…¦sÉXêöFÌ•ïÕpï9觪ÿhd ¸÷Rìß¿NÊ©ˆœ ijÍSDä7ž}±2‹´n“^˜ÃסØgn=V8ÿFW8ï)^€xZ—?ë'° x´£å™»ÉíW±ô«Uu¦Û~p&JîiéU?9 ó!ï…ub½´%]—:;iU#ÂŒCJ0Á±XÝÑ©ŽŒûÜŽÄnr㨙*ö]›,îh«Õ­…ó럀]k ±¿Ãv, ön{öV鬈Èï°\üO°™µØJðxlÁæ'ªúóúß¡mpâó|à– =&c!p&>¶cé7]. èñtV| –§58 ›좞‡ÀpL|Tã|áE¤?Öˆ,DßÒâã0à%L|¼ \ÞÝŇkT5’ÑÑ?ãj¬¡Ôr`y=©]Ù›N¢vŠÕ,ÚQÔ'WªZ„¥ÔxZÙ³F]LÎÒn/¬¶¦Ýqý#2-˜Ãû+D$}?^ìî×Z§£áˆ§E‘ ˜u­bŽW{ÜÈ­•9Ì=/ ³±ïÄ2Uý¨%O&"‡c‘~˜%ëÝ1,ëÒ;S#8FPãε‹ÇWb}9ºe®¶³¯ž€‰Ž!¡]XhžªnÈöZg™ˆ}ÿ-uÍm«³ÝE½/Ã{c6¦OjFÇqw< ËŸ`5`9õIìsþ›lßy±Næ#€ßªj¬¡—vs–zs0p¤ˆ¼¼NIti3WbµŠ˜ðzLU5øWòx<ÍÆ O‹á aÏs?þ§#5 ãrçv?ÎuÛ‚ž ìfØ’ç;xïçu§ÔFܪÀÒ#Á±¢µú­tœ1ÂXŠÕjj^’XZÑ×–ciO¼ñ´gaáórà™Z÷t_]êž'bc¯þÛR'q6į`¶}s€sºâdÛ­NŽp‘Ô_ÇŽeÇÜ^¸¿[P×18´« s}™›­¸Öãi-TµZD.ÀÜùŽw€­"ò/àת:/ô’Ï¿ õEú(Ü€ECnÄDL˜§ñᎫDä-à³"Ò7cUú ³hmˆï`np7h¨Û¹‹>:îrlqä+øpÇmk; ë;ñƒFÎ׸[L Rð q‚DDž®òu6Mæ'À§±È[1™ûpˆ<¤ª×µçàÚ /@<ÍÆ…²Ã6w}’=Ô=¯r+c'ºŸÿÛR©Q"2x›XÎNë*Ô®6aDè‘Y”šÄt‚(Çú.HÛ ö‡­|¤¦þ%Ž­ÚÎÃDšÿ{yÚUýÈY”E ŽÄ„ÈUÀçEäU}Ò~¢{^#"“³¼ÝFl¥9“×ê9ýÃÀIÀçûDd¤;ÿ“ Y*»hÌ XÝØ{õÿ†µÆ]œeÜ9XjX¶qww6ªê~®ç;x«ÿùø]{ LURcEÞÑùæVXl‘á˜9͵"ò˜ª¾Þn£k#¼ñ4 çu¾û±ÃÖ}¸P?÷c16ì‡9v}ØBç‹uO̦“‹—®0›0ÄGøBޝÆBòkº‹ lSp"w öY Òÿ ¦;yðQw®}ñt,\íÇL÷„ómXs¶?ŠÈ?ÝbM`Žpwo—mU¼>ó„g€{°ˆÇ}nÛUØõ¦±&r=±UùÕ5ã~¶cú4á}º-n‘d†ˆ| K™»øKÇÞk^¹Õe| ¨RÕ¿¯ë(~4öo¶³Íއöï…¥.oÎì¹áö÷ÄÜ6·©êކj@ܘNÄî_ë°ÅÁkH|Ö[h9¶@™Ì8fö9Y‹ דÝÞRÕeõ½·ªÖÉ´PÕ5"r7ðlA× §>Ü—ú:GÝG@ìfV‰¥\ë¶¿ß=%ÜÅöuì78£³‰7ÙÇ,ŠJ]Áá'Ï!ÜjìpLtŒ9ìlÅr•´d½‘ÇÓZ8ǾŸŠÈ9ؤq<&N‚ïýîçld‹æeð¹Ô­§±Uà±z”«±ˆj}Q“€*÷¾™) õ V»R_SŸNÔ4ǰAîy0&(îuQ’ÝöõÀßœP¸s@ ; .‘ËTu¶ûy–ý²wÿI8 x‹zj@Ddð"v-XÔADúÓ0Aæ#¹(£âíÀW°„÷` aÁzŒÕ+@ —{îî†^€xšÃ™ØD{¿î# ‡{®Â&†012«¹oìÜ®^Å"EX䣤áWµ?Np £Fp ¡öì&½:xt'¯ÝADc5E¨½‚ZŠÝ¨ç«jq{ŒÍãi‚ºŒÀ(a¾{>DU_i¡s<„Õ_\ üü¼1ç7UMˆÈGÀÙ»‘kï|¬»õU}¦EFÝ} %7el¿[l9»öåWÀ ˜(ø.vo¹[ùYDqµoïa“ø+Dä;áúU¾[ûO}sÇ=‹ æïcNj…Àÿb‚!óøÖ øàÇXÔmp:ðGàE7¾Ìûßt,íQìZ¿[8Ó†ÓoK°H`—Ç Ï!"ã°üÏŽÞï#“à"–‹å6|ØÜžÎßþ,d<‹|tHñáVxöÇDÇþØ!Spl¥¶à¨÷ÎføjMª°bòØß°QKS§=q}œ&Oe¦QºZ¿ã1'© ýlBù=yZU×d¼&Øg7E÷ÛXíØUÀ¾n[céWÓ_c©b_Î2–”[({›ìý\DÞÈ’²Óèí 3êÇEy'SS÷‘™ÎÖ kf¹Úý¼Ò-ÐÜ„ýû~.”up¿3åø=ø_UUyû·<x!ôÞ§`®iw4r]=›§< ªa§«)îóüéŒãÏÃÒ¨îRÕ…¶?)ÖëæÌÀàÁŒ×½ ª_o`Y‘yØ‚UÀCÀ7Uµrwß«3âˆg·qØ ßGg³* V'a^ô Ì¡j‘O/c¡ÿw³Uu·WAZ·¢3Ú‚c¯,‡n£Fp¬êD‚²]pu1A¿Ž‘Ô¤¨%°›ë"¬®£Ùi}O²/¶ŠûKçzõ1–Û>³Â-¾LØUu»ˆ\‹¹S-‘±Ï~!V÷ô9à^,-¦I¸‰ç#XzËÕXzì’&¾ün,²q“Káz»¶ˆMÇeªºTD¾Ž­º/‘iØj{_,-ëBàVè´ÞM,"AÚhjRKŸ¦nDáø8«›žåÚ8ø%fOû¿nÛ£X$âj k°ÅÏÆzµœâžʲo:uÈgÝs6Á¸¨K]²§=c¦cC°T²«€RùFwèõäˆg·p«`7˜ X±u§AU+DdfÅ»+,Ûc± "Ça¡äÞØÊݹí9yâ‚c(uÿ¥°üuXñÜ:/8Ç­€¢c5Mƒbò°+Ÿžæé¬Ì¾†ÙªŸƒY¯‚¥É|Ü“™²¤ªÿ‘c°œü)XzVËù÷5ØŒEˆ»æ>BÍ"WTÇz÷^é赪ÆEä,à{nì'»]± lUèØ{Dd –ôu ‹î¬Á&¾-fÉÞ…¨‚Bò jú€|åØ5Y¶”+3w¨j©ˆl¦¦ŽU]+"oç‰HUÝæŠÓ?¼¶Z®‡´ãe–}Ù^;Ò=¿/"õEV2]!ûïÚ(ªšv s©Ðb :÷ïÉ{v&¼ñì.ŸÁüÓc˜ångTéaö’½°Ø!"'b«"½°"¸óÚ:UÉ¥ÿìGÃéTUXg 8Ö{—ª¦áDÇh,Ïù j¬À&@ €E^Àyº.²ñ{÷&EҘɄªÎ­» â®l÷ç‚ô·ÌíYŽ[…¥Î4tLzœÛ«±èÉí"Rˆ¥]e¿ª¾ ¼êÖú;|ªdƒìPÕ/5ñØlóào›y"´=ósó0Ö(ø2¬Éä%Xäå¡&Œ!8_6{Þlc¶ý×´2 ë²lkV 7¤{ðü/öû]ˆ O "2„š¥©êÖöO3(ÆV¯{b«Ëw÷ Dä³À“XúàâæÖ‘4᜽±‰ýÜó¾Ôí2V4·–Á±ÙßT›ŽP#:¤ÀB ¨þ=ž&±'×´†zu´5MFºëc§r+줬uÏ£2w¸Å´@f4åY¬üL€\ƒ5<~z7Ï·>c_1`Q‘㜨nk‚ÌliÒ]/@r&)` V{³Áý›:i\»ã ÉÇb‘ލ}=܆‰ŽTµ[x²{<Okâþ›àÿË¥mÆj:îÀ²þ˜å¥cõEÓiZSÊ€×±Zž«Ed9f–P€ÕÈrü XZõÅ"ò fR° »?„ „iªú\–×6• "òVï±sœŒÙ_‰Í±~ÓŒ÷ï4xâig¹{85–»Ö"Îùm÷Ç&ócýNÇ„È5"²s~Y|¢ªåîuü»p‚]˜¾ÖXÔÄEŽör>XžñÞ¡G´ž—Ʊ óFÌ_}#Pì]•šGȽj<µ ÉÁR0–b€ë|Úš§³ãºEg.ft¨:ù-@SmLEäOX—íï¶êÀê?ÿhìÚÁÚ-ëHÏNÀÿÃæž·b½>æaÙÙìëßÅR¥GcNõöþ£ª)¹øæÄ¸±-ÄlšŸÊ8^EäRàXDæÂŒ·üˆº©\»K)–:ý‹,ûÞ¾ª tQïJˆÿÞxÂYî~[5xGU_oç!5 9k´QUïuÛú`aÝè{³ÞŽå›^†Yú)f+ùDè˜\¬$ü(ÄR¦Â°³‘ÄVÛ·ºG 8¶içhìØáq…¨cÈ.:¶`‚c©txº"2K) S í{€©í=y‘Ū:®‰Ç¯¶¨jƒEê-ˆ|ëê}@Æ®±Hø{u_Õu‘¾Ø½Á—Ò¼PÝP Žˆìƒõâ*ÀÄż†>‹!1Ï–~åšöª2IÝ⧀ᘀø½Êl&ÎLáHlѰ³§_•qL!V#¸swï×"2Tý°‚ýùšÑG§«ãˆ§^Ü—öJj ¸¦uötç\u"0[UŸÏØ—‡…Y‡cu"û`Š‹±TžÝÝüÌ*lÕc‡{.ÁÄF ¶é…F ãDå8,½jj» lÀBßÕ³Úæñt Bäÿ°Õú<ìZv-V÷ýŒmmŽˆLPÕšx|{ "ìï÷¶hQ‰Y»ÆORÕÝ64ñxº+>ËÓGbâ#NçµÜͤ¯{®ãxâ âæ»Gàúõwì†~FvÛ^Ån@UØM)x.ÃVF¼åmàVÔÆb"r?jD‡bEúa ÞíÆÓÝx.¼B/"a}=¾'"¿nÏkTS…Gàz`NÆ*ý+"R†¥݈uW÷xffu¾8k„[Ç!ÐåÓÿ‹|¾€Ù¯ŽÂLCΑcBuÝz¸sÿRå ÿ¹ê%è¶ýɾÞãé–xâÉÆ Ø…¼ Ýw›B!ù–ã[ˆ¹rœã{?´/"²761:›…‹È˱‚Ú¥À Ÿîæñ4Žˆ‰ÕH•b‹L{c Ç‡ }Eä.L|üZUo m¿ ø%ð+à*·ù!, ñ̲<Ì5X4£±nèÄ „OWÕ×ܹþ“©ëD4‹ÊœŽT‹ÈØõüûîæ\àBUýG#c©· ò#,E÷Á=}§;∧"²/p¬ûñ….ØÔ.¨c©óÙw=>~ƒ¹cü¸Ä¯¢·=®ùLtŒ¦vjXêÇ÷ø¤; dg¹RDŽÃ¢W`BþgYDû·³¸ ]¹õe¦UýsI¼TDntîCÿtÇ^CH€8ûÚÏ7t_‘áÀqÀ‹øPÕJ'BÞË8þ`ÌXäÁÌ4YU}\D¾ |žºäÕæˆÇï°ô­;UuA3ßËãéVxâIã&~b7¦ªº°‡ÔìÀ\‘‚Zà÷þæû ¶úvk)ºïˆHjÇj÷GI`M#—a©UÛÚ|€OçæË¡ÿ¯Àj£þ„EÂ$°Èogî0x=è‹ ªIysK‡iW‹È“ÀÍ"2IU×À«iZ¹CÜóûYöÍpc s”{à¬r3`¤ˆäf4mVj±ˆüøÖcâŽæ¼—§å‘1Xú]l‘jÙž6 ö´.^€xœJM·ó—Úy,­Eà€4Ò…‹Ocig)lõï×í4¶nƒ³<Ý(Fc©av`ÞðË0ÿuŸZåñì9gb“wUÕ† 8¶eYxéíž·ÔóšÍljŒ›±(H‘«+¼[Hx£‘±ï³5s‡<™ ÁbÒ§©/™¬ÂjGÂÑú~ŸF‘o·cµ&—ù nû#"wbõ=aâ"2kf83@XÔÖãóÔÅ .â;+H|®3w;o„ ÑÏh™ˆ­^Ä,s¯RÕçÚmd]7Œ¥€E¡ÂןVĹX‰u}÷©UOËPÖ ûéÀAjP=û‡¸ç´°QÕÎeë n²~,V¿ugúÕ{>ÉÅ+Ö…6çý©ªÞÝÈ{7—ªû LH] ªõšxZ¡»³AÎuÛˆF£Äb1°húd÷^³ 'F€9˜èýXUg¶éà»9^€x‚¤ó±PõlU]ÑÈK:3k±"Ëñ‹V/¬ó³~U¤eqÅã`QŽXH<Ì6Ll¬Vú¹ÇÓñPÕ×üo²ˆì•ai›‡Õki]a ž…¥ö*§_5zUàø,ûŽ£¶ XWk°Â÷V "ò¬®åàü.¼P×á‘Ì2ú»Xt†Ê÷¿ÿ}.¼ðBR©+V¬`Þ¼yÌš5‹Ù³g³xñb‰˜¸=Û=ÂïY\íëyÚ/@<§a…¾;°rW&‰å*_Ž ®W±º¯+h&"Ò[åE•öÊ8¤K…X‰ ßÐãé<üø¥ˆ|9”¦õ#̆öÞ,i’aÍ[oŽÞmJ§pUÝ "/g‰ÈEªú ¤{ˆü,Ëñ‹EäEàù&ðÛp”Å5”.hßDäFLà|€¹#î©m¯§¸húÀOa½{÷æ–[nᦛn"??€H$ÂØ±c;v,—^jí]***˜7oEEEÌŸ?Ÿyóæ±råJR©ôÇe𢈥ªÅmý»u7¼éæˆÈþÀ§°§ºò*´ˆôÁŠ./t›fßðâcÏpŽáÔˆŽLÁ¯Ä§Uy<™ÿNnŽ‘YÀà0¬hý{™/PÕby…šUæ‡vã|ÿƒåìÿUD^6aNWË YŽ¿s.üpƒˆÌÅîi##0Ûßf L€ p4P*"™ûßSÕcšyOˆÈ‰À¯± rss¹âŠ+øÎw¾Ã>ûì@C·˜ÂÂBŽ>úhŽ>úèô¶²²2>üðC~ñ‹_0oÞ<0Qs=VOâiE¼éƸԫ °‹ê¬¦¬NuVDäp¬Ø|$P ܃­ÈŸ)"Ÿ4R˜Ùí»ÛîƒÕn‚£wÆaIÌŸ5Vk³VUãm7JÇ“Á°”Ó̆€Ùx3!©ƒs¶: ŸÅR(¿ ü©hÀÿQÓ ¯¾ÞOe9ß ùÖaüÓ@Oà¬çÈ]Ço‘£±B÷s±&‰åØõè1¬Ö/`p?°»i6âR}ê¡+§.·+n¡ôW„ ÌO9ån¿ýv:è ôq{²¾Õ»woN9åÞ}÷]/^Ôx!Ùˆ_쾈șØÅ}ðç®ý‘«?cÍ×`±¹Ø*Ç xÈ÷ü¨Á5ØšñȬáHP[p¬ó‚Ããñx<-»} «ó(7nwÜq'tRã÷d>»aÞxâ zöìÉÝwßÍÖ­[þ£ª'6gìžÆñnŠˆ ¥Æ?ýù®(>D¤ëéq­Ûôpmí‘'°ÐýÞXØþ¯Ý±ë¹Ë©€‰Œaîy ÃÇLt¬÷‚Ããñx<-ˆ|k |@ß¾}ùö·¿Íu×]GnnËL]ßxã ,X@¯^½H¥R$“ij¿2ßxÒ qÎs± fQWt½‘ñÀ_0_ø$–Ïùãpq¢ª–‰È#À°¾ _tMµÞîªkÉÁ~×ÁXôgæ’—åð,}âÌörs,4=ÇãÙ#Dd,ÖaþL°bòK.¹„Ûo¿²fî6<ùä“$ zôèA,#/¯Ö-Ð 6À îÉqØ´sê2¸Z…[»€|lÅþJU}+ÛñªºCDÀòšÇc›CL†vó IDAT™Ó™à9›Â}0ŽAÔµ±‹nlÀ„Æ'À'ÞåÅãñxêžá®ó÷qîÇ—ºÒ$Ó5$šœã6ý˜¢ª% ½Î‰Œ¿¹n©gauÏN‘EX±âÚŽºú/"½0¡<¸ç^õ¼¤(6ºçb Ä;Ty<§­‘“€€Áƒóƒü€K.¹„,nc{D2™äÅ_dûöí$“IR©"B~~>UUUäçç‡kHü½° 𤅑¯Òp¤”ˆ¬b‚$x^ÒÆ«ìùXÑù6U]؆çmU\¾è}Ø %f¯{ïª.‘ÀDÌcoj:¨VŠÈ*¬E1°©­Ò´D$EÁc¯ÐsÜE»v[‰ ßÃãñx<Œ9¤äççsÓM7ñõ¯ž={¶Ø9Š‹‹yÿý÷Ù¶Í÷S©yyyÄãqâñ8TVVzÒÆxÒ¸Iw 6Œë®»Ž 6°dÉ–,YÂæÍ›"Àh÷¸ ôò¸ˆ,ÃÉBà#lÅ}E¨ÙS‹¡ªëEä^²çüw:Üßþÿ€ݦ€ËUuþž¼Ÿª&€9ÎG~8&FÆa“üƒÝLPnǬ(·e@•{T‡þ?,R„ÚNR÷¾…î9üÿ=Ýÿ÷¡a.ÞŽ ­îy °µ3§y<§Ës#Ð?òôÓOóéOºÅÞXU™9s&Ÿ|ò Û·Ûº[*•¢GTVV’““ƒˆPUUE=Â)X^€´^€´ GbF¦OŸÎqÇÇÎ;)))¡¢¢‚ªª*víÚEqq1 .dæÌ™,X° PãQj&¶—†Þ³JDS;Z²XÝÜT7ÉN4ç=:"ræ ?›„ß|»%½Üßx5°ZD^öÅÜ8†aµ½°ÉÞÍ=W©vbðc;Íêôÿž§ûáÒ‚¿ƒ¹2Äš—.fvE“O-N¸ì²Ë8øàƒ‰F£¨*‰Dóni»víbîܹ¬]»–êêjT•œœrss©®®¦GTWÛT!??Ÿêêêpº— m€ -ÃX€^½zqÌ1ÇJ¥èÕ«………¤R©ôCU9å”S(--¥¢¢‚ÊÊJJKKÙ¶m3gÎäwÞañâÅÁ—¢Öeö°Œsí‘ J<ÏUÕ­møû¶+"ÒkHuUø¸NU?hó¹ÚÀ *CoL|ôúa4‹VôpÿßÃ=âÔ¾ U‡~®ÂÄEe=Ï¥ÀÉðx<] ×ãáàûX:iÀXà´Ðq[˜(™­ªMi¬èé 5jûí·ååå$ òòòˆD"»-F6mÚÄ’%KX¹re:ª‘ŸŸO<'™L¦ë>‚4¬X,FAAA؆·CÖ{v5¼iFŒ3aÃú.=ÿNêË„CFpÔ±qô1cÉËË%??Ÿ½÷Þ›~ýú¡ªé/ÇÑGÍ¿øEªªª(//O “¢¢"^ýu–,YÛ ‹¸€ˆÄ€?ßmÔ­Ž‚ˆ\‚E:b“øû±z6-¦wM ˰(‰Çãñxš€s*üðS,͕޽{sÅW0pà@Ö¬YÃÂ… Y°`AЕzf,rNè=>ÁlÂx˜Ö˜Ùˆ§Ã’³Û èÑ£G:[s"‘    ýs}lÞ¼™>ø€;v››K$¡ªªŠh4J$I Ž +Øï# m‹ -ÀѣG°lÉzV.ßHÿ½{óæóyê/oSº³‚h4‡½ôaÿáûpÐø¡qähŽ:æ@òòrÉÍÍ¥OŸ>ôêÕ‹þýû§…ÉQGŵ×^Kuu5eee”––²uëVŠŠŠxþùç)..ÆÜæžomó¿@+#"aÝÌOt›æ7©êûí6(Çãñ49øpØä𪫮â[ßúV±XŒ 0kÖ,æÌ™Ãœ9sX³fM°{¨{L®‘c‚&³žNE HÏyÂæámÑh”X,F~~>eeeôìÙ“d2™Þ—J¥X²d ï¿ÿ~:ã$//T*•.4DF4M§aÛòóó}#Â6Æ –a4ÔE ÖPP˜Ï™ç•> ª*ΖÍ;غy[6íäÍ×òä£o%ÈËÒï^Œ5ˆƒÇeòQ£8äÐý ¾Ñh”ÜÜ\ 0`£Fâˆ#ŽàÆo$2wî\î¸ãV­Z¶JÔeˆ+2ÿØï””w¿õuÇÓñq H¿Î¶vÚiÜ~ûíxàd+kÌËËcòäɵz@ìØ±ƒùóç3oÞ<æÎË›o¾Iyy9X åÝÀU­ý»xZœ´QÕZ€ ’L&©¬¬$//X,F¿~ýˆÇãäååñüóÏs €tGNNyyy锫D"A2™Lo ŽK$á(ŒOÁj¼i&"’ Œ„°YMß¾=©®N„cà ~ Ô=¤æõå»*ÙX¼­[vR²¥”<3“é÷¿Ž*öÌgР½1j ‡>œÓÎ:„ÜÜHZõ'“IªªªˆÇãLž<9øòu åî:vO~Œ¥[<üª®©÷…ÇãéˆH?ì~n¾1~üxî¸ãN8á„Ý~¿¾}ûrüñÇsüñÇ0cÆ .»ì2víÚp¾ˆäú…©NGZ€Äb1þùÏ2jÔ(†NAAdX”TVV’L&ÙµkC‡eÁ‚¬^½ R•YhD;‚”¬xKii)Gy$‡z( ??Ÿà¸€x<ή]»ØºÕc‚ÿ " [·îbŸýö¦²jÏbzõíE¯¾½6ví¬à­—gQPGyy9äççSXXH"‘@D‚^#`ö…9¸–ƶa=>~ë] <§ã#"GcéP“Á&…7ß|3_ûÚ×(,,l‘süûßÿfÉ’%ìµ×^äæÖšÆ´LÛlO[’ Ñh”É“'søá‡SZZÊÒ¥KyþùçQUÆǨQ£èÛ·/¹¹¹i!ÇÓÌc±‘H¤V¡yPã‘™rÔ}„#%¾HÛâHóпú÷ï@yy5à ó©¨j™FÙëו0t˜µ›ˆF£ôïß?ý¥ !²¨ENÚ†ˆÈ©XljnS9ætõ ßµÛãñx:>®£õ]ÀÕ8!pÆgðÓŸþ”áÇ·È9***xüñÇÓ9üñx<3šâ'Ž:EèÉd’‚‚&L˜Àĉ)++cÕªU¼óÎ;äåå1tèPÆŒ“ŸªJ,K&€:V»™Q‘D"A<O‹¼¼¼ptÅ×€´^€4Ÿ´/À¶m»ˆDrÈÍϧ²*»®¦ÿC½ë5‰x‚m›v°iÝVÊK+8ñÔƒs I¥Räçç#"Äb1T•’’tÔ¹S¢?Aµ~ x¸]U‹ëy©Çãñx:"ÅúyüKƒbÔ¨QÜyçœzê©-vž>ú(íp5¶¬="¼éˆÈ)ƒ úý¶mÛ¶âú€EèáG4e̘1Œ7Ž;wòÉ'Ÿ¤]«ÂŽW±X,=GŠÇãéôªÀ +‘H¤EH¸)a BBç÷Ÿ£6À æSËkýº¢Ñ(äF©¨JìÖ§8•JQ±³œ[J)+)K¢Ñ(ã1ÇÁmÛ¶QXX˜þ’mݺ•íÛ·‡½±;t –ˆ ¾| á6—cÍ­ªëÚihÇãÙ Dä:àG¸~………|õ«_åÖ[o%//¯Iï‘Í+L2™äå—_fëÖ­iU­/w߯\wDä¿ûÝïÆpË-·°víÚ´@رc½{÷êZòõ#FŒHGJ‚ãÂâ"(4¯®®NšÛb±XÖâô ÆÄáHàHó©ÕdÕªÍäåçOB¢Áû|')ªwUR]VIUYUzu'7­uôÈQ摤_ör%%%áô«À†ûͲ "ÀÀ%ÀïUuF^“ œŽY$~ë°KµºÇ7‘òx<žÎƒˆ\<H$áóŸÿ;vìH¯tG£ÑtúLaaafc:?qì¨ê‡S§N=á°ÃKOüS©Éd’iÓ¦F9öØc6l………u"#Á±ag¬p4#‹Õªû¶‘’ )a2™L÷©¨¨¨5Ä6üst[¼inb=jR°V,ÙH~ÏÄ“ubR ©Xœdu‚DuŒduœd¬F¤ääæCN×ED4¸Oúç`e©ªªŠªªªZèÚØrÒ "=±t©Ë3Ýæ|à˼æ$àlàB`Ph÷‡XSÁ¿ªjUK×ãñx<­‡ˆb‹GrðÁó›ßü¦V¿Ž–àÃ?díÚµ”––¦悼þH$Bnnn:•&„Ÿ8vþßo¼ñŸ7Þxã윜œ)@~*•"77—/ùË,_¾œ3fð׿þ•ñãǧ°zôèÔ¶ä I .‚zŽ@¤éUaá§Ÿ£ Ý¡·-^€4Xs¼tä“õÛ‰ææ’¬ŒA 4•"•HŒ§Ðx²–’Ï!BNÂÔ½úä“›¡¢¢‚XÌÌ  H¥Rˆ›6m m±úwƒ9‹Zœ‡…¶{AÅßjU- _€5ƒ:8 8ΰxxXUç´Ô8=ÇÓæœô¦OŸÎ˜1cÂ=šEYY3fÌ ¸¸˜X,F01 ƒ %XúLpOtø‰c'Àõjy xIDNJ¥RD" 8øàƒ7n»víbíÚµ,Y²„·ß~›ádzÿþû×r "B"‘ °°0-LsrrjÕ‚äææ¦kgÃQ‘üü|ÊËˉD"ñŸ£6À æ1:øŸQ£FPRRAN$‡dYu­sˆîÙŸ{ß}ûv± T|`5×DD†³±¨…½T¾TD~ì‡õë uÂ7+/¯úQÇÓ%˜¶ðvÐAÇÓEáÁÊóž°nÝ:–.]ÊÚµkÓ+Ûá|ýð w"‘H¯l‡ð5 …ºEèÁ¿ý¨Q£5jååålܸ‘+VPYYÉÑGMNNNú5"B4M>‚4¬ÜÜÜ:‚#¦‹ÛãñxÚ +ñs•6À æ1`È!颩]»bDó¢ ¾¨iÔÌùG°wÍV÷…ÊÉÉ¡¼¼UeË–-Áî)@WÕb9øÖD*[˜f¢{„ÙŒ —ÿRÕ¥-1Çãñt(rz÷îM~~~zò «Ù¹¹¹™.UYQU>ùäfÏžnª›“““Î×Ït6 Òg¢Ñ¨€t~êØðÑT*E4eß}÷eذaéGUUUz’)RS©TúslK$ujA‚Ï”‡ m€ Í£–Vuuˆ­'­j[$c¤¬¬,v ÐKJJÂøKÁRÕ"rð0’ÚéT)àY`)&: TuS7òx<OW#Ý<.L°ºœL&‰D"$“Irss©¨¨ gÏž™ãi§¢•+W2cÆŒtä$Èáw¯Î´M zae4"ô¤óQK€€}Žª««kõùgÍ‹ÔàóF‘ZÂ5xÏ`[Д0x½Ã 6À æQ«ÈæMeýhÎ%0‹H²Ÿ Q–°]](ýjkK UÝ("Gb¹šŸ¢F„$/¨jËtZôx<Og"6“Þ* ›à¥R©tšT<§gÏž”––FÓV¯¿þ:ëÖ­Kçñé3‘H„üü|*++ÉÏÏ'×*4¶eDX| Vç#-@ŸŸ'Ÿ|’ŠŠ N<ñD† Vë™EèA}P4%'''rÇÓâ"Üñ<ˆÎ…kŠ‚Ôvi;¼iµ,x7m*#Z_ôc‰D„½öÊ'™´ïCðe B‹7n m•„ªºKDNà ÈÏ €½øðx<žnK HG,Š‹‹),,¤   k3¹ªª*’É$eeeRXXH4å©§ž¢¤¤$ÕÏÉÉ©e¥8UVVFÓ÷¾ð¶ |¤óQ'KU9ï¼óX¼x1>ú(999~øávØaôéSã.BÏÏÏO‹Ñpô`®î÷˜„›Û^€´^€ì!΂wÔD@Ö®ÝN^‹ÔÔÐg¯|DH«öªªª´]Fz«5 TÕj¹¸¸« ñx<O÷¤Ö¤ñÃ?äÅ_ä¸ãŽãˆ#Ž`àÀi»øðju*•bçÎé‘mÛ¶¥› ÑŒ`E:Ü8®°°ŠŠ rssÓ…ÆÁ„2/@:i1¯}ûöåè£æØc¥¬¬ŒÅ‹óÌ3ÏPPPÀAÄØ±c‘ôç+§GfÊU°?pà §f5U G@N‘ªºº}þ$Ý/@öœ@Bâ]Y Ð÷°ðÃ1pP/ Æv7È_L&“ˆÅÅÅÁ¡­ PÕðùXÝšçòx<O‡¦V Èg?ûYŽ9æ.\È£>Jnn.‡z(ãÆ£ÿþD"‘Z“ËÊÊÊ´KQГ!p4 røƒýÑh”ÊÊJ ÒùúÉÏÏÏtÜò)XZŸ¥ðç$™L¦Óñ&L˜À¤I“(++cÅŠµÄþÌ¡áHZ¸~(ÓÄ ø¼UTT¤õðáÃÇlذa†ˆ|ZUW¶õ¤»àÈž3¬ˆnäÈ‘Äâ)¢Mèë±;ì7Ìê>ÊÊÊèÑ£"BNN¥¥Ö‚#ä€Õª$@ÿ{÷u}ç{üõÉd’™\B @äŽ ‰räR´µÛêºgw]uíÚ®ç»Ç*[ûØ•³gw]»eµ«–b[*R­ÕZ”D¼!÷[@÷\H&×™ùž?&¿_'! EÞÏÇ#’¹üæÂo’ßç÷ý\¬}Òãùü[ŠˆÈ×ÔYi3Üpà Œ?žŠŠ öîÝKaa!iiiôíÛ—ììlÒÒÒ0Æ4ëZŸßÅÈi9‰DÜ”«ÄÄD·¶ÄY)ñxšý9Ò Èå§Õ"ô–©|‘HÄ]©¸ú꫱ÖRSSãÞ6¾.p÷çßø}ËYq‹D"îeÎŒk-Á`‡~8³ªªj_NNÎÞ#G޼ ¼¬Ö8ö£äÒ] лwo7%ê¡LâС >\Ý»NPy¦‹û}xöjIϱ¤¤$·Ð*!!Ó§OsòäÉø¼mx-¥i5DDD® ƘëÞÄj[=ht†aÆ1bÄNŸ>Íþýûùä“O>|8YYYnëTÇCbb¢›‰DÜ4¬–©2ÉÉÉÔÔÔ¸µ NJM‹ÎZ @.?ÍŠÐ[«!r¾w~nhhpW¾œËzŽøÀÕ >âÛïÆ§f9û–ßïwOêB,½}èС¤§§3wîÜ«1=òòË/WcÞ 7¬µåðþ|m)¹tÍZð:zöLã[· ÅÚ!ÔÖ6²eó1¶l9ÆÑc!¢‘‹ÿÝØ¥klEÅç󹿰#‘555ñéWǬµ§ÚôjDDDÎÁ3uâĉïŒ=š×^{Í8pàœ³œëëëINNfèС\sÍ5„ÃajjjÜë.YNVüÄs'å*¾8Ý™ríœÍvR·â[Èå§ÕÖ¾?×u-‡Vz½^·[hRR555$&&bŒi–šŸÎçœH¨¨¨à¡‡ŠL:Õ;bÄzöìI—.]˜7o^ê~ô£¹eeesW­Ze;wî¼µ¼¼ü5à `£ö¿‹£äÒeôéÓ§Õ+c]¼Œ›Í¨ÑYD£Q®bã§Ç9x°ŠššÏo"åM0$%y›}0wé:®Ö®6½‘ó»:''‡±cÇRUUe^xá÷oÓÇŒÏç#77×í„,‡Ý³Öñé^¯÷¬4,À0èœÕšÍvˆ/4ŽËÐÁßå©Õ6¼çZýhí:Àm¿?Ý© nú–³*¿R’””Ä™3gܬÒÒÒýÖÚÙË–-3Ë–-›íóùn½þúë¯7nœ'77—.]º0mÚ43gΜÖÚÛ¶m›¿xñârcL!±`ä-kmÕü¾]ö€\º¹ï½÷Ç'++무 †{ôÒ½{nÓ´ØF¶n=ÍÞ¢JN—Õžý»3%à=k«;iQ€>ѳ’XŽâ;ÖÚOÛüêDDDþhÑo~ó› ï¾ûî·RRRðǃÆÔÔTV¬XÁáÇ5j#GŽ$33Óí„Íÿ:÷sš©Ä×}8AJ|À‰Dš¥a9²œ³ÝÎCtä›!íæs'¡ÇÿÜò:gõbÃÝârcŒ›Î—˜˜èµ''' …Ü&Nà÷ž³Ö:ií;€ÿkŒéºvíÚ)ÀÍœsýõ×Lvv6={ödÁ‚@à®cǎݵ|ùòHJJÊšP(ôàuk­N·BÈ¥ûð{öìé|ÕUW1nÜ8 ˜2e #FŒpot®9¿ßËèÑ]¹öÚÎD£QJV³cg9ÇŽÖQWËmì”á;k^¯×ý`•––:'Óš¾0ÆìÞÞVYkCíúÊEDäŠb­­¾kŒñž8qâ_ï;lN[ÔÊÊJŠ‹‹yÿý÷)//gРA\uÕUddd¸éUÎÀA§«cül–‡s¶ÚébTWWçÞÎTW¢äòtAEèŸwˆ8kBBB³€£¶¶Ömã\WWG0tkŠœ4¬ó "lJs_,3Æü¯¢¢¢ñ@Ajjê-yyyƒÆŽËUW]Ezz:sæÌñÞsÏ=7Õ××ß´qãÆ£F:¸iÓ¦Ÿ[kŸhß·îò¦äYk÷5M #‰ ^¿~=ëׯ 77—)S¦0sæLn¼ñÆÖ†%%§W€ž9ÉM}ÒëÙ±£’ìlüã¹ßWTTF9qâßûÞ÷8xð «V­¢ºº ±y Ƙm@ð,ðªŠÈEDäRXk#Ƙ½Ðü 12dC† ¡ªªŠ#GްeËêêêÈÉÉ!77—@ Ðl ®×ëuã;y<žf-yã;_Å_·¢¿k—§‹.B¿Î¹ÜI狟nî\¿Ï8âƒYg¥äB6uÂZÓôõˆ1¦÷Ê•+ €‚k¯½væ 7ÜxõÕW“™™É€øÉO~Òç½÷Þû‘1æ%kížöxÓ¾€´AS2 ¸ ¸øÐëÀ,Z´ˆE‹‘œœÌu×]ÇŒ3((( {÷îçÛ©©>®»®³Ûª0þúp8LEE'Nœps_'L˜Àc=F}}=}ôkÖ¬aíÚµlݺkm"0ºiS71·ª•œˆˆ\" ç>ht‚…>}úзo_ª««9qâ„Û2×¹3½Úébä(:ÛZ¦fµ&çtÍj¢¿i—'w_r/¸È4,ˆÕÅÏöpj<7 «eû]§ö¨±±Ñ NεrÞ`m ±¼Ïc’6mÚt#ð®]»Þ:eÊ”^ãÆãÕW_ e÷Ö|½)i#km°XnŒHl'œì\_[[Ëš5kX³f >ú(dÚ´iŒ?žqãÆµìa~Δ-Ç™3ghlltÓ¯Œ1lذ)S¦à÷û™4i“&MàðáÃüÏÿü«V­âí·ßv>Œßæ·Ó[ ""W–Ïí\äüÜØØHBBÙÙÙx<jkkÝÛ8ŠN áN>¾3©:~˜\CCÃY­T›(¹<³ýó ÏãvZí¶œíá®Á`ÐMÃrö­øý(.ø€6ìKMÇ„o7}ý­1fà²eËf›Ô­´9 íÀÓxœXÊ“ ;;›xc ï¼óëÖ­#STTDQQ .¤sçÎäååqÓM71eÊRRb3?΄”•Åh'ñù|n*VK999Üu×]Üu×]¬[·Ž»ï¾ÛIÑú @DDäÒ´zÐXRRBuuµ;œ·eáyüÌk­;Ú)Vw .FNÍcü09§C–“R÷ @.Oç,BoùskŠs¿øa‚ñûŒ“rå´Ú­­­m–öçìG‘HÄ BºwïžJl0[›ëЬµE@Q[·óu¤¤Œ1÷O’““yà¸çž{܉­ùùùüçþ'/¿ü2'NdÆ ”••QVVÆòåËY¾|9^¯—‘#G2yòdÆÇàÁƒ[}¼ºº:Ž9Ä>„IIITWW“œœÜ¬'º#óñÇsýõ׳råJ€«Œ1F=«EDäœuÐèÌïxúé§ ƒäåå1nÜ8ÒÓÓ›Ý1>wßZè(:…NúLkuΠBçÌu{œµ–/U›‹Ð­µ­îGñÁ…ÓÄÀ pA…ÎðÂøç0qâÄ)o¾ù¦Ï³Û³«ººú³¹e¸æ] IDATsç6|±oÕGHcþµé{n¾ùf}ôQ÷f¼1cưxñbz÷îÍ=÷ÜCII ~ø![¶láÀD">ýôS>ý4ÖA·W¯^Lœ8‘ &0jÔ(÷ÃF9yò$›7obgŒ†ÎéÓ§ØŠH  %%…„„öïßÏâÅ‹éÞ½{|«à`Œ1¦”ØÃH¼]""òõpÖA#@¿~ýxþùç9uê[·nåç?ÿ9iii 6ŒAƒ¹ÃÞâ ‡ÅÆÆÆfiXñSÐãÇÓ, +.ËkŒIP}ãe§MEèÎ÷uuugM Ë9ágŒá{ßû}úôéo­ý?üð?ú÷ïxß¾}¯ok­µÊãÿêiµžÈñyû—s?§[Z|À_ãátȊߜщ‰‰lÙ²ÅÝvŸ>}*.ôÉ7: ƒ¬X±âx$Ù•°3??ÿ yN @.‰%vHII!55Õ½.“™™IVVÕÕÕ„B!B¡P|¯r&L˜À„ Ø¿?ï¿ÿ¾4|ðÁg- tïÞ¼¼<®½öZÆïv‰‰Dxýõ×IIIqï8-èœÜG§ƒpúw:k  Э[7jjjÜ€Ä FúöíKß¾}ùîw¿ Ä‚ˆP(DUUÖZRSS ƒ­v¶ŠWRRÂÖ­[ ƒTUÅ7œ ŸÎ¤’’vìØáÜåãV664}XDDDÎå‚?åôj'¥ÊIŸqV8â»a9ùúΪˆÓ𥾾žÂƒ¿ûÝï–wïÞý[ãÇï~Í5ד“Czz:÷ßâ¼yófŸ9sföÚµkmïÞ½w:tèM Xo­Õ$õ/Ç9Ûð^h ±°–©yç¬ÖÎÎ~¨¬¬dñâÅlÙ²€=z~ä‘GÞi§×µËZ›ìñx†Yk¯ ƒ‘åË—ðx<[óóó?h§Ç¸¬)¹Ƙl ŸØ*Á) kIII«·u~i:½ÎIIIdffR[[{V0±_Æiii¤¥¥}î@BǺuëÜa†¡P¨YïôäädX¿~=o¿ý¶³ºò°©Åfju’#""à‚Ïus0‡IHH8k¶‡ÇãqŽøŽEÉÉÉ„B!ü~?ÑhÔ]5hllÜ ¶ÖÖc®zå•Wnöù|ß5jÔãÆó 0€.]ºpà 7˜üüüaÀ°={ö<²lÙ²*cÌ[Ä‚‘×­µœ‚#mÖ¦"tˆƘfƒ*[Ö9iXNqzqq1?ûÙÏ8u*vØ3f̘>úèÿ$&&¶)µÖF­µoÍž={5@aaa ö÷z½C€Á5€€\°¦)çÒ”zÔ|öÙg­ÞÞùÐD£Q·}.Äòý~?ÉÉÉn0RUUE(:+ýê|*++Ù¾};‰‰‰œ8qÂþÙØØè~èB¡+V¬`çÎÎÝÞ~ÙrSÀ*›Þ)""òyÚܹÈI™‰D"ͦWÇN–Sœ^[[K0¤¦¦ŸÏçæý79Õ|8S < ¾%/pÖ09çz'ňï^tÎùÖÚr`)°ÔãY²dÉX   ÞG»¡;i1@³ö»Îª†S@ì÷û ‡ÃÍ.“mq'ë.haS­ÇGM_ó1Yo¿ývP0hР‚¼¼¼ÀСCÉÎÎ&//`( ä‹Ó¦z"'s$·ÚÆÙãñÀ©S§xæ™g(..àšk®ÙúØc½Úcpåû555…šrq€œ‡1æVbó>®øñL0¤¬¬ ŸÏÇ÷¿ÿ}{ì1V­ZÅÂ… 9xð Ï=÷Ï=÷C† áOÿôO¹í¶ÛÈÈÈ8kÛµµµÓ½{w‚Á ›¦å÷ûIMMukA***hhhàÈ‘#c8vì˜ÛÍÊ93ätr¨­­å­·Þr§©Ÿ?Î;”É“b­UT.""ÂmÃ{©iXÑh”p8ì¦\E"‘fg®à"4k›êÔ‚8iXqMZ.é@ÒZ{X,2ÆøvïÞ=(HOO¿5 ¦¿½”íÊ;¸sÊ.vE͹Ìiä¤ö93hÂá0»wïæÙgŸåÌ™3$$$4~ë[ßzçž{îÙÞÏ= ¼ZPP°¡¶uÅQÒ cL:±”«ï:—]ýõD£QŠ‹‹éÝ»7@€êêjŽ;Æ€x饗hhh`éÒ¥üâ¿`çÎüð‡?ä‰'ž`úôéÜqÇÜxãÀ?8›7ofÛ¶mŒ5ŠáÇӹsg"‘ÕÕÕ9r„`0HZZšûx/¾øb³ˆ>>媬¬Œ¥K—ÒÔ•+Bl¹ùM>?½*¨7ºˆˆ\(÷ïJ|—»ïõzÝBr¯×Û¬Vü09§³‘ÇãqWEœ•’¸Çoó™lkm#°ºék^[·'d=ÄÒÙW¯^Íĉ/¨ðÜáüÿ;‡“Úç!ï¾û./½ôÑh”N:•ýÝßýÝë£G>ÙÖ'mŒ©^œ5kÖá¶nëJe.´ÛÒ•Â3øÐ k×®ÜqÇ|ÿûß§S§NTWW³iÓ&Ž=Jnn.ݺu£¼¼œÚÚZ÷ÌLVVÛ·oç¿þë¿øøã?v¼ÍÊÊâ¶ÛnãOþäOèÓ§ÛÛ¼¤¤„Í›7sêÔ)rsséÕ«éééøý~¬µ 2„;v°nÝ:7ÂF£nLJ¢¢"~ûÛßR[[ ±³ ?.$º? |`­m%H¹c ˆàâäÉ“x<w#¶ú}ËŸ?Nii©›24;±æœlÜ•§»¤s;ŸÏÇ‚ 8|ø0={öÜýì³Ï>¬p—cL±ã•~×]w<ð“'Ovuη?Õ×׳oß>w?rZ;‡B!^xá6lˆ-N 8°èñÇ«S§Nm>áj­Ý]SSóÍõh qŒ1?þà˜2e O>ù$ „ÃaêêêHKK#;;¯×Kqq1[¶l¡sçÎdggÓØØHyy¹‘÷íÛŸÏÇ«¯¾ÊÂ… ‚pÆŒÜ9sÈÏÏ'99ÙÖKKKÙµk^¯—qãÆÑØØH=ضmGŽáÔ©Sͦî]»–?üáÎY"à'À…Tí6Zí""rŒ1ùÀ €cÇŽ‘pÎÅs!ÇŽãøñãÍÒ°œ¶õNpÑØØˆµŸÏ箊D£Q·`½¦¦†§žzŠC‡ѯ_¿}?ùÉO^°ÖVcv»ÀÞÉ“'«ËãW˜1¦ð<0͹lðàÁüå_þ%ÍÜø}Èé2Z\\ì§ ‡Ã”––òÓŸþ”ÒÒR<O¤  `õý÷ß¿±žªF£kfÏž½¸m¦¤‰1f6ðĺ)<øàƒÜwß}î~ü—3©gÏžtíÚ•P(ĦM›8sæ 999B¡ûöícêÔ©ƒAŒ1lذ矞7ß|Ó-¼ Lœ8‘¿þ뿦ÿþXkINNvÛÖÖÖ’žžÎÖ­[©ªªâÌ™3444P]]ÍÒ¥KÙ³gÄ>+€ßK¿:K,ðØó…½™""òµeŒ™¼ pôèQ7€¸ÐÕh4ÊÑ£G9qâ^¯×­ûp†É%$$P[[Kbb¢pøý~·%¯“ºå÷ûyâ‰'8zô(ýû÷ßûôÓO¿ÖÊsF£ÑkíΆ††ÏæÌ™£”™¯(cLðp M'‚³³³ùö·¿Íœ9sHOOo¶E£QB¡tÖ>úˆE‹Q__Ojjê™ûï¿ÿo¼±ÍSï1ugéÌ™3w|þ­åB\ñˆ1¦°¸0 àßÿýß8p @«HüW}}=@€~ýúá÷û9pà;wîäèÑ£ÔÕÕñàƒ¨©©q»5„B! yæ™g(*еžNIIá•W^¡[·nÍÒ¬ ¶,½}ûv<eeeóË_þÒ)F¯%VhÞÚtó–ÂÄ&¾i×7QDD®Ƙ©ÄæJqøða’’’.8ðp¾?zô('Ožt»aŧϴLÃr¦¥;g¸4¬ºº:þíßþÇ3`À€¢§žzêõÏ{î§,î ‡Ã{û÷ï¿{È!ªüŠ1Æ þ7p±Qøý~fÍšÅí·ßÎÀݳêêjJJJˆD",]º”•+W››»ÿñÇ3++«=Ò¤Žúýþ§Nzº¶%M€ó àÏ iÿøÇ?fÀ€ôìÙÓ >/‰ÿêÓ§={ö$c­%##ÃÍcÜT.'ùì³Ï¸ï¾ûضmÌŸ?Ÿ„„÷ñ¡ƒGŽÄb†µk×òë_ÿÚÉ™=üpô^j-°¦©ºˆˆÈ%iª•\PRRBrròÎÏGŽ¡¼¼Çã „s鯝Š8K4,¯×ënÏëõòÈ#P]]ÍСCwüË¿üËò‹|ÀcÌ®ºººí·Þz«& …czts.ïß¿?³fÍbÚ´i”––rüøq–,Yž={0ÆØÉ“'¿ÿƒüàC¯×Ûæ\dz133ó•Ñ£GŸ{8›\’+:1Æ$U@ÒôéÓyòÉ'IKKcýúõìØ±ƒÑ£G3hÐ ÒÓÓ©¯¯¿ ¤²²’ŠŠ òóó ƒx<ü~?>Ÿ¯Y ±!K§OŸæ¾ûîãø[ ™:u*ùùùŒ9ÇCQQuuu¼øâ‹¬[·Î¹ûûÄr&/d†G°ÖZ«‚)icÌÄ:EqàÀ‚ÁàE¡9r„Ó§O7K©jm…Ãi¯‡Ý4,§䥗^â½÷bóuï½÷ÞW¾ùÍo·ñ¥•y<žápxWmmm±æ:|5cüÀÀƒÀçrÇC§N¨¨¨ ’””TóWõW…MMÚ*bŒ)œ5kÖûí°-iÅ•€$+Ø<üðà 6Œ`0HŸ>}èÞ½;»wïfÆ øý~®½öZrss©««sk@Z~•••ñᇒÀwÜAee¥›¢Õ§ORSSILLtóeC¡«V­â½÷ÞcáÂ…g=¿¬¬,&OžŒµ–5kÖpüøqˆ¥QýXyŽ—eJàDÓ¿Àak­~‘ŠˆH›c&köíÛGjjêEÕD":D(r/sŠÏãç}8ÍYœ4,§%oyy9/¼ð»wï`øðáÛ,X°¢_fµö3cÌÞp8¼ó–[n©jçíË%0Æ ÎÌ̼·¡¡áÎÊÊÊî'2tèÐ]÷Üsσ jU¬3MSʹöä®èÀ³˜6hÐ |ðA‚Á «»èÙ³'999„Ãa6mÚÄŽ;>|8ƒ&11‘šš7ø8qâï½÷‰‰‰Üyç444ÐØØHCCƒû•À¨Q£ÜÁIûöíãÝwß%òÄO8]×À´Vžn%ðoÀg-.?L¬]±Ö*§UDD¾ƘñÀ:€½{÷ºÅÁš†F)))¡¢¢‚„„Ø82§VCCÆwÄ©1ÆàñxØ¿??ûÙÏܼ&LøpÞ¼yëÚ!Ý& üÞSl­ ¶Öö5ÆxŒ1ÑúúúJÑújéÕ«Wç!C†ô;vlZ^^^¢1¦»1¦›µ6Ëã»”mZkx<ž_Íš5ëL{?_iNˆ1c‰¥3ùü~?&L`úôédee¹·ÉÊÊ¢OŸ>ddd°gÏ>øàRSS¹æškÈÈÈààÁƒ¬\¹’äädî¾ûn¬µÍÆÆFB¡~ø!ùùù 8ŠŠ ~ÿûß»mŸ~úiNœ8±c30 t ð)±_øñSÍ«€-ÖÚCòf‰ˆÈÏs±¿›‘‘‘qÑEè%%%ÔÖÖºõÎ B§ÆÃ)N¯­­uÓ°Ö®]ËK/½ä¤cÕþùŸÿùò›o¾¹­iWc*¼^ï/g̘Ñìoé²eË’ÓÒÒD"‘^…m}é0žÂÂÂÎ>Ÿ/+wóz½YÑh´[Sp’xÎ;y<몪ªÞTê]ǸâcÌŸO]›~fäȑ̘1ƒAƒ±é›iiiäææÒ£GNž<É'Ÿ|ÂöíÛihh k×®Üu×]î6ãP(ÄêÕ«0`Ó§O§¦¦†ÂÂBB¡;ñsÁ‚œ9sàGÄæyÄ«&6±¼–XRœ´ÖêlŒˆˆt¨¦v©ìÚµ‹Î;_tú…Bx½^¬µD"|>Ÿ›†ÐØØˆÏ磦¦†%K–ðþû±tünݺÿû¿ÿûß8°²^Nq øÕäÉ“«Ûa[òÕf–-[–‘žžÞ-‰8AIÀF×Íž={Ë—ý¯$ @š4Mãü3b­ßú;—÷éÓ‡3fpÝu×¹¿(}>¹¹¹äääà÷û)++#33“wÞy‡¾}ûÒ£GÂá°|¼ùæ›ôë×™3g …X±bE³à£¨¨ˆE‹A,°øb…å–XªÕ^km{ü’i3cÌuÀG;vì k×®U„F)..vçj9iÉN–Ó~×ãñpâÄ žyæ8ÀÈ‘#·<þøãïúýþ¶ž¥¶ÑhtͧŸ~úÖüùó£mÜ–ˆ\$ -c 0ø`±ô':uêÄÔ©S¹ñÆ ƒn‹ÜÞ½{“››KFF[·neíÚµD"&Nœˆßïçƒ> GÌš5‹òòrV®\I}}=ÖZ¢Ñ('OžäÙgŸ¥ªª bƒC,Yo­=öe¼"""çbŒ lضm™™™U„FÙ·oŸ»ÚF±ÖâñxÜUp8ÌæÍ›yþùç©©©Áçó5Üyçoßyç»Ûá%Ô‡Ãáe·ÜrËÖvØ–ˆ\ çaŒ Ì#Öþ- 11‘n¸Á­qV1ºtéB¿~ýÈÊÊâСC|ôÑG”––2bĦNJii)«W¯vÑZk)))aÑ¢ENêÕ>à  x_-sEDä«È“ œ|/¿ü2“&Mº¨úk-{÷îugl9Ï£Ñ(^¯—ÆÆFV¬XÁ+¯¼‚µ–N:•=üðÿ5jÔ©vxú'›†Êo‡m‰È%RrŒ1Ý€ï÷+ ÇÃàÁƒ™6mÇwƒŠÄÄDFŽIvv6‰‰‰cرc7ntoc­å“O>aÙ²eNç«b`°øÄZ«å`ùÊ2Æ|ŒëÚµ+?üáùæ7¿‰×ë½ 4,k-{öìqƒúúzw zee%ÿýßÿͶmÛ:tèŽÇ{lejjj{ ‚Û^š}z³:€¼¼<Μ9Ö-[ÜÀ£¦¦†—_~™7:w_Ol àFk­  DDä+Ïs5𠱎n#–»îº‹´´´ó!ëžåŸ;8ÀÂ… 9yò$^¯72sæÌ5ó7ói;<×h$yköìÙkˆÕWŠÈ—LÈ%jÄ4(<éééLž<™I“&‘’’B0Äï÷sòäI¢Ñ(6làÕW_uR®"ÀËÄê>öZk7|Y¯EDDäbc‚Ä:7Þ ¤æÎËw¿û]rrrZMÉ‚X÷,cŒ›rµ~ýz/^LCCiii=ôÐëyyyí‘&òù|K¦OŸ¾·¶%"íDHcßü>Ÿ¼¼<&MšDff&6l`ÕªU”––:w;nçb­ÝxäÈ‘Wî½÷Þö¨‘v¦¤c‰Õ‰<ä)Àb=ÓW‡‰ <¨Uùº1Æx€™ÄVDfÒÔÎÞãñ0zôh† ÆÉ“'Y½z5ÕÕÕêûï¿ÿ›nºép;<|Øãñü.??ÿ“vØ–ˆ|A€|šfŠt‚@#P¡öº""r¥0Æ þÂs‡µ¶OËë³³³ÌŸ?ÿ÷½zõ µÃÕ×ÕÕýrΜ9íȈÈHˆˆˆˆ|á&NœxóÑ£Go‹F£=’’’’¦OŸ^û,1ÆcŒi$'"÷‰ÈØžr °¸ªùfU“ˆ´‘¶u<=Ö›ÏE¡ñi+"-1?sè°ÄcŒ1¦ñŽÆöDêq?ð±ˆä4püaÀÇÀ¯šmFæ;Ø0ÆcŒ1—ªNä`ÏÃ,1ÆcŒiF"N>^mÀ9}€ã€<`0KUÓc:…ÀZ œ tVÓU5ÛhåýØKDÞ÷;Tu‡·Íª3°UU÷ˆHko¾…"Ò;të5Þ}PÕuuÌ¿‹7÷Õªªûz½æÐb[°Œ1Æcš‰ˆtÞ¦^}ê_("ÿfï‰Hߌá?ÁåmŒ/^Þ‘¢ÐØÙÀ$ïû¥Þy+ë½cc©™r:ð¦÷ý—BãWm€»€Õ^`“ùZ{÷xØ‚“ ÆcŒ1Í@D¢Àpy!7]€#€·€?džÎÁý€àRÜjÄÉËr«‡pÁÊïú÷Ç{÷ôž÷¾?õî®cúÏ'xßÿ+4¾°ø3î}ä•Yν¤ü¥Žk›Cœ ÆcŒ1Íã4àXàoªú3Uݤª+€¯àV82ÛFu—ªÞªª¨êUý'ðm\@òÅ,ç=¬ª·¨êïú×[€ þU] ”y?®VÕUÞ׎lWÕRÀß^µ;4~•·ì5` p…·Å,ì*`0¹¾sè²ÄcŒ1¦yœâ=þ#|ÐÛ–ôÚÃ9;ÛxÏÓÞã˜,ÏÕx£¯ªU¸m^µ¶G5ï5܇[Õ9Ý?."CqA׿Tµ¬ŽÓÍ!ÎcŒ1ƘæÑÝ{\å¹UYŽù‰Þo‰ÈÇá/ö®˜tÌrÞ†,Çvã¶A5§€rjö2ñ¿¿¯™ïm>Ŭ –1ÆcLóð°ZÞ6âs3¬cL¶ªSé,Çšªî‘‡¯xÉèÛK€ÙªúþÁ˜“ùt°ÄcŒ1¦y¬÷{e<—YÑ ÜJÉ(àMU× óÙ߀¨!ãï¾æ}­Ç­ºØê‡©—mÁ2ÆcŒi/yW„Šˆ_Í2þ?Þã÷›i>[½Ç¶ ¿„´«k€ªÎÞÆ½Æ«À£˜£9Ø ˆ1ÆcLóx×ã Ù€+[üè™eüq½<.öJòþ—ûÑWb÷˸ŠZÏà|z¿‘§€°HUg¬ªU"²˜$"×›¼§žRÕDhèŸq=NºPÕòœŸ9DØ ˆ1ÆcL3ðÊÕžÌnÅ%ž/>\WÏø{½Ç™¸­[‹€Ç€þì Ä?pýBÎò.ØÇ9_Çuoÿ7þQ\6ðËùZï³Ob *1ÆcÇë:Þئª»3ž‹àŽ«Xõ&Ç•°ýXUwf¹^;\3Ábàc`¥ª®ÌÓ(Öªj*ã¹ •ªf«¶…ˆtÄåkìPÕ"Rt¶ªêž,ãs¼çcÀ/XòŸklæ«êè:þ‰Œ XbŒ1Æc˜ˆ|¸ ø¢ªZþ‡Ù' @Œ1ÆcÌ~ñ鿎[Åù.®‚×Ì•c²±ÄcŒ1Æìo[Y ¨Þ¾¦ªËî¬Ì§… ÆcŒ1ŸQ"Ò ¼ªª+0¾p2ð²ªfëànL£Y^cŒ1Ƙà%r?Ÿq¸·éuàŸªZWGó–r ®1àeÀ>`¸7þ|Üë0¦ÉY^cŒ1Ƙ†á:ïð¾rp¥mÿ¼ "ñƒ7=¶Si\ù^cš”­€cŒ1Æ4Î|Uïÿ "‡/§àVþï`MLUgâ¶`ó‰aˆ1ÆcLRÕM"ò à!\ò"Ò8˜¬.‹Uõni\ŒÛ6ÿVÕ­þµEd$p4ð_UÝœyo†[•y^U××—""qÝÕÛã:®?Xßë‘bà"`0Å5Uü§ªîÈw:P¢ª‘À¹@[à×–¨nÀcŒ1Ƙæàm¼Ç#q¹¿ÆåWtÃmêÜ-"G/Ý­@%pp›ˆœ§ª¯z×iç]§ðÓ,÷ý0×êÈ‘K€ûqÄroNßþ–íňÈIÀ¸`e=®úÕ×›Ed’ª¾~0ÚË‘¹Ø (ð8`ˆ±cŒ1Ƙfp’÷˜Ù‰üà9 HU»çŠH ÷æþ0૪ÚIUNÅy]ÏÁ)—{½8"Ò<™Ù=c\Oà¯Þu©êQ¸Àâ>\’9¾;ð.8NUWÕ¾¸„u€Ç½Néa¹ÀõÀ8U-ö®?£®9™C‹ ÆcŒ1“/"½½¯ãDäÜù$n•!l9ðMU-PÕR`"pð/U Æ«ê˸ãíq[¶ðªjýè œqíËØÇ|¯ €¨êïº Ü‚Ûö•éz ¸RUç„æ÷p+Ð ˜”qN¸IU_óƦUµbó2‡ @Œ1Æcg8°Òûzø1° ø’ª¾—1öEUMgó‰Ç²\ûQïqTèØýÞãåþo5äRÜö¨iû˜ïHïñ¿áƒ^òT–ñŸÊõ"ò9æáVEÀmõÊ”Y¢ØÀr@Œ1Æck9.·\þÆj`‰ªVe»!˱NÞã‡Yž[ï=–øTu‘ˆÌ.‘¼•…“€žÀϳ8™:;üU˜:îÖ·b²¼žkgü\ lÛÇ<Ì!ÊcŒ1ƘÆÙ¨ªiàØT–c•Þc›,ϵÉ㻸8x·¢ì{û@ÐJD"Y‚•Â,ã«qÕˆz®¹+ãç”·¢bL-¶ËcŒ1æàòWgynˆ÷˜Y=j2.¸Ü+ß{>0KUë[¥ß/8"Ësƒ²[„[5I©êª:¾¶7à¾Æ€cŒ1ÆlÿÅ­Œ\/"­ýƒ^u¬½ŸŸà½á—Ÿq=ÐšÚ ïuyÒ{¬QñJDz_Ì2Þ_UùˆD3Ÿ‘|Éoཱ-XƘ†ñšYõÆ5“Ú ¬TÕlû• ¹讪Wì¹cÌþPÕµ"rp30SDþ‚Ûru.·ã‘P°p+·ìMXß—ÿ¯Wx«'OâJW6x`ÆøÉÀY¸&„o‹È?µÞ9ƒ  ¼¿9ÄYbŒ©—ˆ üƒ,{Eäà ªú~‹O¬¶±dß:`Œ1Í%‰{þ©c+¼±™¹¨ê-"²ø>ðGïðvàg¸#›€wq à/¨j¶k—y÷ݺWZDÎÁå\ˆ[õØãý<Wú·,4^EäKÀlàÀoB×_… „ÂHmÂ%â“•X~1¦."RŒ« _‚ûÃôÜÄnÀ0ܧsתê+m’¯«oGUýýÁž‹1Æ4†ˆ”ànVÕlIëMy¯\Ÿ‘ͪZÝÀsŠqÉê›ë¨ôeL½,1ÆÔID®Âuƽ[Uo¨cLNCÿhcŒ1ÆXº1¦>ݽÇ9u È|ˆÈ‰"ò¤ˆ|("›Ed†ˆ\œeÜ7DäQ)‘ˆÈÙ."_‘ÿ‘¬«"‘‰ÈÏBÇn‘¿g[ "7ŠÈ[Þ\ֈȋ"rY–±çxÏm‘M"ò’ˆœZ×k7ÆcÌþ³ÄSïy"’ÓDäàUà8àYàAÜRý¿Eä¶ŒáÇßâªÁT‚«3 ËmN.!´§—rvÆ\ À/põñÆ%[æâöY‡ÇÞá=×Wmf2.éþùjC^»1ÆcöͶ`cêä½_ˆ[ YLÞ^WÕµYÆ ¼ÌNUÕ=Þñ8.ä4`ª.ñŽ?€Ë#Y œ¬ª[B×:W¥åNU½1ã>Og=TuƒwìuïÚíCãþ|øªúóŒk”¨êfïûÏ/{s¼Ø_ÕñÊa¾Ž«•ßCU?Þ¿AcŒ1Æd²cLTu70 x è\«v²FDÞ˲=éJ ü¯|x×I·á~真åV·‡ƒÏ `%ðåpÝyé€ d^öƒl¼šô—K;²¼¶Í¡¯Å­|3¼¥LUK½s[{÷4ÆcL#Y^cL½Tu=p¡·08·j(n{Òªê7È:Þ{'"c2.•ç=öÍr›w³ÜWEäA\ùÉñ¸r“ã:ø>yN†A¸­V³ußK½ÇãJN^*"™ÏVϼ1ƳŸ,1Æ4ˆ·ð¬÷u«ˆ\üW£Þ@Š4PWÎDZô!Ûêÿ ð#àrö —;§ö1å6ÞãGûP„ j®ªãùU¸þÆcŒi$ @Œ1DUï‘ýD$_U+€¸äñ¡u4ÄÚß{¬ñr;Α"\.Ê0à>U­ÜÇé~¾F·Üj'P ª}|¶Æsðx¹v—ã:“wÂY€«b¸¢+ÁÆ´ @Œ1DDb¸-Ni\7`€YÀ‰À$\©¦p?p2®[ï¡cû²Ø Œ‘˜ª&ë; ·Íl¸ª¾Õˆ¹cL‹‘ópÕþúÕ1äcy xÛûš“%ïΘcIèÆ˜:‰Èµ"òSéšq<ø5Ð ˜æ%™܋˥øˆ“qŽˆÈI"²¿« Oà¶m} ø°TUgïë$oNÄ•Õý­0…çstèÇß)àÿ2ç'"Q9CDÚcŒ1Ÿ "2\Dfâ~Oö‹F£œ|òÉœwÞysÌ1äåù©w´Ã}0ô#à9`³ˆ¬óú5= "É’·gL³±cL}Úÿøˆ,Öâr+p¥y¿áVÕµ"r®ßÆ;"2 —?Ñ8  LÀU·jU-‘ÇÙ›Wr÷~Ìÿv`ˆ7Çs¼O·E! ôîñ–ˆ\ ü X("oâÐyGÛ÷ãÞÆÓ,D¤7ðsÜʰŒ;–Ûn»ö¶NJ$,\¸¹sçòî»ï2gÎÖ¬Yã?ݽÍf¾."ÿ.µíZ¦¹YcL¼UƒQ¸ a P‚k¸xøG¸Ünè¼îÀ5ÀH\Âm¸@äÜŠ‰ßgãB\5­Û½’ºæq4nõà÷ªº)˘«UýqÆñpp.*Ç•æ}DU§eŒ= ×7äX —À¾×q†ª¦ëš£1Æ47i‹ûPè¸-°ôïߟÛo¿SN9…†¼§Û±cï¿ÿ>óçÏgþüùÌ›7õëׇ‡|OUÕó7Ægˆ1ÆcÌ'˜÷aÐuÀ­¸íTtèÐo¼‘/ùËÄbnC˾§»ÿþû¹é¦›H¥R‹TuP“Lܘ:Ø,cŒ1ƘO(‡Ûz: 77—k®¹†n¸6mÚÔr”——³uëVú÷ïÏâÅ‹ú7ú¢Æìƒ ÆcŒ1Ÿ0"r8ð+àïgÎ9çn½õVºukHuñ}›7oÓ¦M£M›6äææú‡£Mrqcêaˆ1ÆcÌ'„Weð{Àp¹hqÄüô§?åä“On’{¤Ói}ôQ>þøcZµjE2Y£J¹íÍ7ÍÎcL "r:T ¬–«jÙÁ™Õ^"ÒXüUUolÀø>¸„ùß«êíÍ=?cŒ9P"r6®,xo€ââb¾ÿýïsÅWÖ¿0ÑÐü7òâ‹/R]]M4%‘H››>ßÓì,1Ædº—ìÝÃKEägªú‹–žP†ЖšAR}¢û9ÞcZ”ˆ|WÝj,@$á‚ .àöÛo§}û¦kA4cÆ V®\I"‘@UQUòóó)//³Ä4; @Œ1ÙT£½ïãÀ0à6àùHUï?HóØ‚+“k]|1Ÿz"2x/÷bäÈ‘ÜqÇ 8°ÉîQZZÊÔ©SÙ¹s'‰D‚T*E<GU©ªª¢  À¯€`åÆM³³Ä“MZUç†~ž-"ÿW÷gžàõÛèä¨êÏuÃuMߘ­oÈþðzˆÌ­ëyiƒk¸MU?nÈ5½¾%­€ ™Ÿˆz÷øHUw5hâÆ“AD €ÑÎ;óãÿ˜sÎ9i²{,\¸eË–±sçNÒét°êQUU…ª’››Kee%‘HÄ?ÅV@L³‹ì{ˆ1Æðª÷Ø@DZ‰ÈÇ"ò9XƒkP8Ï?ADΑpÓ—‹Èã"rXhÌ ÞunËvS¹Ì{þRïç.ÞϿ̑ß[eÀVy×Í=+¹JDÖâr\–ÛEäß^³¯ð¸›½{Ž‘‡pÑ—êoŒ1àl ½ˆðÐCqî¹ç6Yð‘L&yýõ×Y´h»ví"NFÉÉÉ¡ººšx8GUÿÇUr©F©êï©§Däc\yÉo?QÕ´ˆ<ˆëð{ ðrè:½€ɪº³žùõÅo“üÀADþÌÉ2¾¿w¿iÀ©¡ çYYü¸x0ãÔj`¤ªVÕ5cŒÙùíÚµ£S§N€+‘ëçiäåå‘L&\åjÆ ,\¸M›6Çòòò¨¨¨ ‹!"TWW“››KUUétšÜÜ\ ÿó @Ló³-XƘlrEäQïëÜöª q[©nË»<|xŽÇ­„< >|wIÜÖ߃¸?z—gŒ½ ·ÒòÀ>æ{–7îîЪ^ ð‡,ã/Æýþ»3ËŠËßpI˜³œ÷{ >Œ1M( 5Kèª*‘H„¼¼æëßoq–çe9æ——¹UD¾—åùÙKg{­Æs j áŸU•d2I*•"‰J¥‚íS±XŒH$B,#•J1gÎ-Úûë.//êêjT•¼¼¼à…%¼*â÷ñoß"¯ÜÒ,1ÆdS©ªÇ6pìî,Çr¼Çº–áªH…ÝÛnuðÀ\ô UMQ?ÿ~åYžË6?ä\NG¦UÀê,ÇUÁËc2(l·Ú¹s' $‘HN§)-- V+ü!<òH°åJDÈÉÉ¡ªªŠxÂÁ¸ü‘¼¼¼àX4%™LÖ*Éž“1ÍÉV@Œ1MNU·x•­®þ "ßQÕ*/°¸œü.Ë©à‚‚á‚”ûxË—p¹WŠÈtU}Ô[i¹·¥+Ó¸êX׈È&àתZ "K€%ªúRïoŒ9yMI¿ Æ(n{Tƒ·2©êÛÀÛõ<_Q×}½ÁwgyªÎyªêk¸•—úæ´,%…1÷¡EÜ{ªÐ·êú+ù ðU]ÿùñãÇGFŒAqqqñäÉ“ƒdÉ’%´mÛ–¢¢¢ —ä­¨¨@Uƒ„ñp’Yj7™L’ŸŸOyy9999$“ÉÇb1÷ÐR’ɤ?? @L³³ÄcŒ1¦"Ãm)í…+Þ+ô}¶Rä­ð%Ü j8ùë}÷ÝwÙôéÓ»WU¹*à~ ±eËî¾ûnúöíËñÇO¯^½²V oÙòŸ W¾ŠF£D"‘ ü®˜¨j â¯z„Kñz, Ý4; @Œ1ÆsÈ‘NÔ 0¶¨êßDä"à!ê~Ïô®ŸPnèXn%÷üÌæ­ÞjÈá"Òø0Á(N<ñDFŽÉêÕ«Y´hÓ¦M£G 8öíÛÓªU«ðu‚G?àðó9üÌc@­mX~"º5"4-ÉcŒ1Ÿ*"ÒWõ¬¸OU¯9ÈS2Ÿ"R€ ,z¨êi«¸ç­2Nyø., ¬`o“Òðã `{*\•¿[UµÎÕU]%"³€ á­T‘H„ž={Ò£GÆÏÆY¶lo¿ý6;wæðç]»vA“A¿[ºßÛ£ººšX,l©òs<ümX‰D"hJ‹Å‰D°% @L °ÄçÍ_±¿_&ƒˆDˆª&DälàXjn—ê[ˆ[¥8ÈÃm;ZÏÞÀb5°À>]Uóë¹oWu/é]ó\U}µÓV kº¬sçΔ””L&Ùºu+ëÖ­£   T•œœœ ñŽpôp5¬X,Fee%yyyTTTǃ ēĘff¿À1Æ|jˆÈåÀàF\¥!s‘6@jçaôÂUÏû®èÄ×€33Nÿ˜½ÁE«P¥¾€µªZ힪šÊv:ã©"`”÷åÝŒ F憾JUuOóÏÖ´4¯Aåy¸„ÝÒPÓ´†œ{^<¿EDå»´³ IDATJšm‚M§:•JMM¥Rßþ´þ·,"Ÿàb•·:p+0Ò;Ö“šÕ¢Ò"r7® h ®¤íjj«eªú ðJ˼’QcÄw '0bÄ–/_ÎË/¿ÌO<ÁÀ9æ˜chß¾}0ÎBüUœ×CÖ¯låo¹ò;žgæ‚øK"‘÷1¦ÙYbŒ9¨Dd0.ð8Õû™³Ï>›Ë.»Œ¼¼<>øàæÏŸÏܹsY´h‘¿M ·¿;sw¹ˆ< ü¨®nëæÓGDÚ¿PÕ7µôÎ=;‰<:f̘hQQQóL° ©*3gÎüòÎ;‘q°¥§ÅˆÈàDj÷Æhç 9 x Œ÷Ž%€¨\DUµRD:dÛ&õWc$s…£OŸ>yä‘TVV²råJfΜ‰ªrüñÇÓ±cÇ`œ_ÙªºÚ¥±øGNNÕÕÕ¤ÓiâñxÐ$ܽªª*¼úA,;JDîRÕïµØ¿‚9äXbŒ9(¼Rª?Ám¹ŠwÜqÜ~ûí{ì±Á¸c=–‹.º€ÊÊÊ ™7oóçÏgÍš5á?ÚÞõ†‹È(UÝÑb/È4§?ઠí×"‰Äb±?ž|òÉÑqãÆ5ÏÌšÁ€rïºë®À9ÀãcÞÿ?{A­Dï^ÀUõz`Ù |„ ,ü¤îÛŸ{Ç>¬+©û >`Iè~÷ót:M=èׯUUU¤ÓiÊË˃±±X,8’É$©T*XíˆÇã$ Òét[³Â9%EEEäççWDzâÿ74Ó,1Æ´(¯öþ÷ïàÕÝ?üðùõÖ[9묳jísËËËcøðá ><8¶k×.Þÿ}æÎË<À† ŽòîqS3¿ÓÌDd©ºwïy÷Ýwèù"Ç ~ñ”ªn‘§qù²œV-"Wk¨ƒü¬ª[TõM\³>sàjôÚG¶ $°¨jP~×/«8òóókuA÷«f%“ÉZÛ°Òé4 .dÈ!tìØ‘›o¾¹ðg?ûÙ›7o¾à…^Т¢¢·vïÞý0UUçb̰ÄÓìDd(p7^"y,ã’K.ᦛn¢C‡lïƒöªòÈ#PVVF·nÝøàƒ`o9Nóé6 øA–ã½€«·€'qE 2VTTT+[}íڵ̟?Ÿ]»v‘——GII  ¨õßâÒ¥KY´hååå0pà@Ž<òȬ“ܺu+sçÎ¥_¿~ôéÓ§Æs»víbÖ¬YÁÏ­Zµ¢K—.µÆ…‘L&;Õ9‘NªºEDNÃ%éû+Ý©ù7~50×=¾°•앤PÕ2\àbš_Ö$ô}­†d®G"‘`–¿¥*[IÞD"AAAåååÁ6¬d2Y#¤¢¢‚¿üå/»c±ØŠ#F 6l˜ôéÓ‡ââbÎ=÷\¹ôÒKG¤ÓéóçÏçØcÝ4wîÜgpÿm=¯ª¥Íøoe>C,1Æ4/yøgÀ×ñò<ÆŒÃÏ~ö3Ž:ꨬçìïVãmÛ¶ñðÃljÅbVÉå3FUßÞÍ<."'áyªúË:NF"‘ÈìÙ³yæ™g2d½zõ¢¼¼œ%K–°{÷nÎ8ã À½œ lØ0î½÷^¦OŸÎرckœ;þ|N>ùd^}õU¶lÙB§Nµ/ÆÇa‡Àüù󙪫«ƒ’½•••øÛUƒjYžeªºÍ»þàAàA‰.]ºt$pFqqñi#GŽ.§- ¨ªV6ârNB÷·^ùùáÞ±X  ò>ªªª‘`–_5 jl_ÝïD:¯ôò³Þ×µ"2è‰'ž8-Ÿ9räÈöìÙ“^ßßëšÏ. @Œ1Ma0àÆoäÛßþvκµyófÞyç¶lÙ$]úI–þ[ϳ¿- @L¹¹¹œvÚiœvÚilß¾åË—3mÚ4|ðA¾ño«!~€‘©¬¬,¸À»ï¾KëÖ­éܹ3ˆ}úôaΜ9µ¿2Q›6m8ÿüó4hPø¿WóéѸÂÿ!ô¿aHá~÷T/©êûû¸Ö~%¡×·âo?Í B"‘Hã‘““”ßõoú熶¯6º’‡ª.Äõ’¹SDЏªnmìuÍg‡ Ƙ¦p&À€¸îºë(((kÁ‚¬ZµŠíÛ·î®_Õ%‹Åjìy¶ÓPíÛ·gäÈ‘äääðøã³{÷n:tè@<gýúõ 4¨Ö9ëׯ'Ó¡CT•¹sç²{÷n~ò“ŸÔF)--¥uëÖÁ±pºùôRÕu"²W‰,üIKÄûR XÔ€ËÕ¹þ¾¾çü­WáU`V¸3ºpø¹‰D‚üüü%yºwïÞåé§ŸÇ—Mš4io‹ôtˆv¸7û`ˆ1¦)ô8á„èÔ©S°2‰DÈËË#‘Hìw0RYYÉŠ+X´h¨*±XŒh4ì_®®®VCümX!€BD¤ 5KÔ¾  ª5þÎ%“Ép²-ÞD$(å|Ì1ÇðÖ[o1zôhÚ´iŒÛ³go½õC‡%‹±zõj¶oßÎ7¾ñ ÚµkŒK§Óüö·¿eÞ¼yŒ=ºÙ^³9¨^þ§ŽçÒÀÓ^Òö¾ÔZñe+»[×÷~ò¹ÿ;2Û6¬êêêùrþ6¬p…,€âââv±XìË@bÊ”)D"‘¥©Tjéé§Ÿ¾£¯Ç˜±ÄÓdü=ÄÑh” IÜ_•ð·MÕŒˆ»víbéÒ¥,Y²$›››K2™$N×øÔ.NI–~ â±$ôÏ)Ä1U+"'?doŒ¼ŒS²¾ù»óÎ;9öØcéÖ­­ZµbÓ¦ML:•¾}ûRPPÀĉY»v-÷ÝwãÆ£C‡lÛ¶W^y…âââ „ïœ9sèÚµ+]»v­uŸÁƒ3gÎ @>»*©ÝQ> ,QÕ5 ¼N£’ÐýóêÚrÞžnTÞ†åxã_+ªwý8pT:>JD˜2eÊÇ‘Hdq2™\RQQ±ê‚ .hH€eLV€cšB²b—N§‰ÅbÁ¿l.¸@%´eŠx<ÎŽ;˜1cÛ·oÆÇãñ Z‹ŸP™——ü± 7× ý!·O‰©jRDr€ËÙXøþ½™À 8Ý;–¤v™Ú©Àiét:Ah›Ì¸qãX¶l .¤²²’ââbFŨQ£‚¹äççsíµ×2}útf̘l¥úÜç>lj'žHnn.étšÊÊÊç… 6Œ­[·²sçNrsséÛ·ï~•¡N¥Rˆˆ½Áû„ñþû<÷ß`¶ÿAÓÀ ûqÉ4¾ºßLÐÿ &•JÕ8æ¯Bû+ þªˆß#ÄÏ_ò^c]Þ´K§Ó£#‘ÈèÖ­[WO™2e%°XD–Lš4i÷~¼fc,1Æ4 ‚`¢®Ž½UUU¤R)"‘±X,øÚ³g:t`É’%¼þúë$“É`[A:¶ø\ÂÉ“‰D"(Åë?ž“ùä‘@_jþ÷ݼdÕJà 'ãô­¸àbž÷ó;Àç½cëUµV⬈ Þ¹sgÿFŒÁˆ#2‡Ö’››Ëøñã?~|Öç#‘—^ziçwíÚ5¨ŒÔø¾!víÚE,ûhß#MK÷‹e0î¿9_Þ`0ˆ àeU-ÛK×øðæ@{ø+Ã5JòúÁ…Ì8*++kTôËôD£Ñ}®«jpp”ªê”)S6¤Óéb±Øâ‰'®Å~ÿš}°ÄÓj$R¾ýöÛtëÖâââ`[Vøg"‘ ²²’Ý»w“““C§Nؼy3¯¼òJ0Î/Þ«ì'Y†i…+¸äææ†WTl V ‘j¯\ôþ ªSûÙ»j‘©8LU?‘;€„V5Tµ4œ>}úЦM›¬H+**سg›6mܶ,?Ñ<pdnð·\•——“““ƒˆH$l¤‰HèÎÞc»ª>%"w³÷ Z¦é¸-Qï­Ù»M*Ø2¥ª›üÁªz[SÌWUgçää¬zíµ×úžy晟šz·Û¶mcþüù¤R©{ö\e"Òôô•o³C+nU"ò 0 xJ÷¿ô_½Iè Jü&¬~ÀQ]]]kµØÏ¡óƒ?qý_ÿúo¾ù&}ûö]qî¹ç~°Ÿ¯!S+‹Å†–••¥Ÿ{î¹uªº8N/9묳67òÚæ3ÂcLS>ÅÎ8ã &L˜Àºuëxûí·™2e }ûöeРA”””ЪU«àDkÖž={‚½õá„Êh4lÃòÿpúյ´ü•+ÃÛ8Þ6©nª:ÏÛõKö®fŽÛjâ{x ÷Ƭ—”.üã}U½¸½e^‰“H$®˜={ö´ŠŠŠXIIIÝ­É?!’É$³fͪþ ¼t°çs(‘öÀ8ÜÖ*Ám­z ˜YGÓÁ¹@DU7Àíj'¡ïÏjˆ_è#pøyáߥátrssÙ´iþóŸÙ°a X|ë­·6Ås‰D^I&“[£¢ÑèªÚ3‰œ6eÊ”­"rwS”÷5Ÿn€cšB­OñD„nݺѵkWÎ<óLÖ¯_ÏÂ… yóÍ7éÞ½;={ö¤]»väääD«««‰F£A ‘Y22[—Ì?¶¡n¾€ÔCDNQ{ËT!ò¶SUWâzTKÙ\øÛM¦ÅÞ¶¨OU)"ã,Xð¿‹/ît°ç³/ét:‘J¥¦¥Óé_À§é¦¼ÿæOFàÞ)®—ÇËõõ²ðÊíÎ>ÀÛÖØ¾Z_à‘qϽð }¨×Ýÿ½é7fÍ<‹Å˜7oÿûß)//'¦&L˜ðúu×]7÷_Cx^•‘Hdòĉ{‡Þ"Ï?ÿ|/U=*‰´Ÿ8q¢ÆcÌ‘à;¸7§ {7_ÿk—.]èÖ­‰D‚M›6±|ùr ƒÞª¬`„·\Õµ Ë_)ñsAâñ8‘H$ÜÍ÷Ì‘Еì‰Þ½€+UõyàVܧ¼aŠK¬] ªê6¹؈[ÉØ˜íM±÷©ð'vŸ·ª¾¼q°ça>™D$ F³·œó*àEUmî-Cµr@$ =™LÖhÌÞ†‹Å‚jª««yñÅyòÉ'QUÚ´i³ûºë®{z̘1ÁÈ%"[b±Øƒ§žzê–Ì×8iÒ¤•ÀÊÆÞÃ|vXbŒ9P?¼å–[®ïС¿ýíoY³fMjWþ'r>ÿÓ¹T*E‡èܹ3ªJiii0Îß—ì—‡ oÃò“,õîýò»á$Ë–\9ŸR‹H[jï«êŸïâ¶MÕ¥‡÷ø8ð5K×®VÕŸNªê#M;{c>ê©l5UUW·Ð4‚JümTÐð\ÿgÿÃ?©Üßr.¿»cÇþö·¿±h‘kÐÞ»wï•·ÜrË”N:5ŇóJKK¿à‚ ª›àZæ`ˆ1æ@U­X±‚’’ºvíZ#yì±Ç(**bÈ!µ*aù_•••5z€ø8ýÿh8àˆF£AâWpñWEÂÕ°<ÍxùŠÈ—UµIkà{½zâõ¿PÕ‰ÈáÀ“Þ±¶YN{ø3°XAí¾~€±@U-ÁÙ²²T¶Ú¼‚ ä[òC… I§ÓáP” âo_M$D£Q"‘H­.èétšU«Vñ§?ý‰mÛ¶‰DÒ§œrÊÌo}ë[o5vòªšVÕÎ8ãŒ×{-sh±Äs n›‡zÇ6Q;ÀX ªOáÃ1²T¶ªÀmÏ W¶jIëüo6lØ@÷îÝ( Ý_íoÃòû$Íš5‹|êêj Ê®¾úêg>ÿùϯo‚¹—Åb±M˜0¡±U³Ì!ÈcÌQÕrà§ÀOEäàB?ߣgÏžtïÞ &°aÃV­ZÅ“O>Iqq1ýúõ£cÇŽAY^ïZÁ6¯²\„{€¨j­ät¿”¤¬¹;¡‹ÈåÀŸ€|`õ "Ò4dæaôÂí5‡ë'p!.ùÕWJÍà"WU÷ˆÈ`ªV4ý+3æ³Ë[±<·åª!•­ZÊb\“ÍŽßüæ7¹óÎ;éÓ§аmX"4ô¿hGEE=ö/¿ü2ݺu[óÍ7?Ó½{÷ýi”X—«««<çœsêLÎ7¦>€cšBÔNB;ì0JJJ>|8}ôëÖ­ã7Þ mÛ¶ 8ÜÜÜà"Þ'tARy4 š†+¸„“,S©T¤äåå5[#BÉþ œx‡s‰"Ò‰šÆÓªúSà2àÇY.—ÄùÞÏ¿ô®éo“ÊLâ@U—4Í«1æÐp •­ZŠªªˆÜÜ;{öl9餓=z4W\qcÇŽmÐjH:¶§ú¹ [·nåž{îaÕªUŒ5jö7Þ836Å3o•••=uÁ¤ö=Ô˜ì,1Æ4…¥$}áŽt:Mûöíiß¾=C† aÇŽI’þ HUUU€ÃïÜëç}¨j­!©T*8'Ôˆ0ÑT/NDúÏá¶F„žÊ®ÎrÊïñm`2µï­o÷PÕ§›j®Æ˜z+[½¤ª´‰e¡ª÷‰È*àvU9cÆ f̘ÁÑGÍ•W^Éøñã3Ç×úÙo0˜H$Xºt)÷Þ{/»wï&77·òòË/îì³Ï^ÕSMF"‘''NœøN\Ëâ,1Æ4…wóõ+µÔj¾åÿõ·a%“É ÇÃïxîWÓÊÍÍ VJ€ p %¡7É~n9˜‚[­ÈÖÈîcàŸÔNøFU_^lŠycöÍ«l5—çQìÞˆ[ñh©ÊVûMU_^ö~ß|8mÁ‚rà 7бcG.¼ðB¾øÅ/RTTäýÜ»êêjžþyžxâ Òé4:uú覛nzúˆ#ŽhtÙF:õÔS›"wÄ @Œ1M¢Fîãk¯½FEE#Gެ±Õ*3÷#¤„ æää{ƒ‹p]ûêêê`Õö&§‡’Л*¡tp®çÉxïµæ…ž/WÕšè^ƘäU¶:èìÚLÞmÉÊV^™ìãqAÏ~mUÕéÀt9øpÑÖ­[ãüãùë_ÿÊ„ 8ûì³ù$ƒføðáôéÓÉÚx+‰{ ‚€"\×ÞBü­YáªYyyyM¾â½qyxÅ« s-ð?@×5¼ä`õ1ÆåÆãò¯à U¶ò¶}ÂmûŠáVGh»’ª..‘×WUWW—<óÌ3<óÌ3vØaL˜0nݺ±víZ^zé%6oÞL<¯¾ð _ºä’Kš"_LEdÚ¤I“^¦ú*™C‹ØßLcLc‰ÈŸ€k'L˜ÀOýôÓ­ð…i¶bŒi .¿£®îç:u⢋."•J±aÃÞ}÷]Ž>úh ƒs¢ÑhpN¸Á _’×ßfljD"Y·aù+ mÛ¶=ª´´tžˆ ÌìîÝ諚‘A4Ýv/cÌ>ˆH>n¥!³²ÕTUÝÑÂsi <úy‡vÓTu¿{ÕÇûöðP‡ºvéÒå·nÝ:6N‹HΨQ£~á _XZ\\ÜÈ7åää³ûyûöí9ýôÓI§ÓìÚµ+—L&‰ÅbÁ*‡_j7¼Âî–î'¬ûÛ°üø………Œ=ºÏš5k¶‹ÈpÂ_lê®åªº°)¯gŒÉND¢ÀqÀXre«,Û­üÕ—iªÚA@¶mÛ¶—“LçÅ_l›L&KD¤S:%"ÒÉ+¾?Þ+))y|ذaMVEИl,1Æ4…4îÁQoýúT*Eiii´î?†W0Âåw«ªª‘+ ©TªVt ξò•¯PXXØ*??ÿÒM›6]ú /¤Z·n=½¬¬ìE\¯Û^`Ì'\•­¶àV<–„ùôNмCËqÛ­Ztõ%D'L˜ð1.ç¤Æï´Ç{,¿M›6%étº$‰”¨j‰ª–àò×ö^@5­ª/œqƯµÜ´Í¡ÌcLS¨‘„¾¯ÆY™Ïù¥$‰D\¤R©`µ#[À‘Ù#Ä?æ÷©ªªâŽ;îàä“O¦_¿~ò…/|!úÕ¯~õäòòò“ß{ï½_ }ú¬\µjÕãÀTàu/ñÜÓŒê¨l5xEUËZx. Æmýjí^LQÕ-9c>k,1Æ4…wB¯ë9U%«þ6¬œœœ H*•¢ªª*Bb±‘H$X©¨¨¶`5šfye9§z_?‘þÏ>ûìé"rưaÃN>|x´ÿþtèÐ!C†pÿý÷÷‰Åb7®X±âÆgŸ}¶LDžþ£ªÿiò=cqŸ¤ÊVÞ|Ãåyt÷mÇåy|ÐÒs1æ³ÈcLSȺ«¡«!þ H:ŽX,$Ὲ_~WD‚mZyyyá9Ô»5BU—ˀ߈H›9sæŒ&uïÞýœ“N:©Ã€èÚµ+………\}õÕ­¾óï|iúôé_‘áªúv£ÿÅŒ1~5©ãq[œò½Ã+q]Ä[´²•7Ÿ|\•­ãp½6ª7ªÚè®âÆÇcLShTº/‰G"‘:žûyUUUD"òòò‚.è‰D"8§¢¢"h|È~ôæPÕ=À€ÿˆÈUÿüç?‡§Åãñ3ÇŒóÿÙ{Óè(¯3ß÷·ßbfž 0“€Á„Q`08&àØñq<XØÇ}’¾ÉIúævgõê|éÛ½zuŸ³Öí“N¡±'ì$vÛ‰Áv Œ13’˜gÄ<ƒ„R ï¾ö.©T* Tƒ¤ç·V-Qû}«ê©ï?ÃÿÑñãÇ«‡~˜7nøîãó! [Þ4˜Aõ4©‹á‘ô¾„¨r«Ù@;»|øTk]’ìx¡¥#D„¦à®Mèõ‰×uq]·*›ÑeXѦ„¡P¨ÎÒ¬¨QÀ÷ÕªMp{ìíÿUJuÙ°aÃL9Æà›ûy^A é4ÙÊÆÓóûÝ×.]ÄôyœNv,‚ÐZ"BSPgz}Â#öÏZëªñ»±eX™™™”——ãóùðxßÂ5kÖœVTT|úé§ÏaKÊAh8¶´i ¦´©ƒ]>‡ÉxœLQLÌHÝ@ÕåVŸk­Ëë{¬ ‰Cˆ M ñ…FCû?\×­r¢µ­]»öd8> ,\¸ðòý<§ ´T”R}Çþv©cÜ—’ÉV6¦ŽÀLŒÏÀ-`)C‚ ÔDˆ ñ<£”*bËëq®s o¼?ÇÞ<.:›áºnU¤²²²Ê=º +²öÍ7ßðÎ;ï ñù|¥K—®ÉÊÊ 4öCÐZWh­û9Ž3$##cÞ§Ÿ~zÙëõ¼sçΡ œ@Jµ„VŠRª+¦¬i¦§"l6§b²•)Ò{2ðc¾—v´Ö’É„4Bˆ ñ8 :bê§Ç(¥N€£Ö=<‚†šª÷à„Ý÷ÑÎè‘FõÊÊʪr¬Õ«W³yóf²²²®ÿìg?ûø‘G¹ÚŸÁ‰p8üΞ={nO˜0áÁP(4Âãñ ‡ÃÓ|>_6ð/Mð‚Ь°ÍÜÓ1½æ"7ó츆OíÒ)L¹•d-! "Bã£>Âu]:vìxóÇ?þñ''N¼Ô讄ÃáUóçÏoŠç„f2“!F`š¹°ËW1“­¤²™Û–[ͲìÒ `­ÖZ6¡™ DZ)J)/¦¤*Ótî‰:|(zQý=¸ç⣨êÓˆÐÐlHtæ$ÖÛC)…ÏçãÖ­[¬\¹’Ý»w0hРc¿üå/×téÒ¥)v;ܾ}ûýgŸ}¶A£{¡%cGêÎÂw‚™"•ìI¥iŸm|l—J0)·„f†Aheر™£l mÔ¡3qLk}U)ÕxÅ EÀŸêØùÜpéÒ% 5jTÕ{-ʌڿ{êÔ)þã?þƒË—/ã8Ž;eÊ”­?ûÙ϶x<žFíÂ*¥\­õúyóæ­C&Z ­¥T7LƒùH»¶_¥²¬ÉöŸLÂôŸx0™Ø¯1·R2êW„Æ!DZ¶Ž{æ?ñ>Q‡J1ÂbOÏK˜Ò*lÓZÿ¥ž—(.½ž~úi-ZÄâÅ‹éÚµkÕ wÉëº.^¯ùJ Uo¾ù†7Þxƒ@ @fffÙ_ýÕ_ý)//ïì=}ñ)×Z¿;oÞ¼ûò „–‚Rªftmd²U(¾ÔZ—¥0.…ÉÐ>NuÿÉL¹ÕTÅ%BãQâÉ#-¥T[ÌÝ @»Àx{'ë«åVJ½œÑZolÀk>Æ’ù|>fÏžÍ+¯¼BvvvÕ+×u«þ}ÿðáø®‹ÏçCkM(âü#kÖ¬ oß¾§ÿþïÿþÏýúõ»Ýˆ$¹۷o¿õì³Ï^o‚ç„f‰ý~ø0³!©1c¶×k­Sú»¡”ê…éóxÐ.]ÃLÜ:šº¨Ah*D€B D)ÕsQ1cȦŽ{°KkÝ ^¥T'­uÉ=¼nðàÿÆÖi+¥˜eJ©LLãû#˜ìk؈qV¯ËU„f†AhAXŠiT—R€)¥Ú&«^Z)åOÿ0.²Þ¯_?žyæ,X@ûöíq]×u©¬¬äøñã>|˜ßüæ7”””‘‘qgñâÅŸ>õÔS'› ¬ã8kžxâ‰ÍMð\‚Ð숚l5‹jþ+Áý) ŒåVs€L»|øô^6AAhˆ„€Rªfþxª{»Ž[´Ö'R ”Êþ'0+Š233ÉËËcΜ9Œ7ŽÒÒRŠ‹‹Y·nøÃp]—=z\ø»¿û»O† RÚØ´Ö%oÍš5ëtcŸKš#v²Õl §]*6‘âÉVJ©þ˜ï‡vé"¦Ï#e>#‚ $ ‚ÐŒ‰r'ž ´±Ëg05ܧšðu:j­%”Rƒ€K€N‘õ®]»2xð`Ξ=ËÙ³¦·|ܸq»ñ‹_ägdd4ºäÂqœcŽã¼3{öì¦è„f…z7 `—î_ÛS=AJ)Õ[¦Üê¦Üj{ªE‘ ‰Eˆ 4Cl‰S¤†;R®p#<Ž7ñkMÆœ·´ÖçšàùÚ Úµk÷ƒŠŠŠéáp¸j_ûöíoÍ;wó¢E‹ö5öuíºîÆ]»v}öË_þR.f„V…õ̘)¹RT;…©µ®Hql‘”@¦ù½øBk-‚Ð "ÍŒ8å s'VJÍÄÌÞX£µÞ^Ϲ`Œ û­uþÝžÿ;ßùNcÇŽ=Ù¾}ûž]ºti÷ꫯûýþ.‡cÕˆÐ+æÍ›··Ï!Í;Rw:ÆëÇ\ÌÄ»üt襰¥`snvé滥ћ‚ 4D€B3Á6˜?Ž1T@9°žÕpÛÞ©˜ÝÉϵÖ[£Žu¸$÷ƌɌ8¦‡ðg­õ®û}íø:ÔÝï÷w×Z÷p§»ã8=€´ÖN}UJ]öx<«fÏž}ù~__šQ#u'`~ÁL¶ú\k})eYìÅÀÃvé°(jêAÒ ‚æ$»\ÁN£™ƒã«1³÷·Ùc^`16Ëq%öÄ<… ü¯DÄ–ŸŸï­¬¬ìtw]·G(êá8Nw¥TGRêùsç¦ÌµY’I}`§1å˜)oâVJù0Âh2f“"R ¶!•îê‚ ¤ ‚Æ(¥úó©.W8)W¸˜ ×S˜]Ê ñ±6¶ìÊÖ–¿‚ñ‰W&uFkýŸ‰ˆ¯Ôòå˽âí!´ìÆD.¦Ü*b2zؘꑺPõ]2 ÓdÞÑ.Ålh\KY`‚ ¤"@! ±»†y˜,„" å ö‚a.f7UŸh­÷ÔqnL&Äs(€)ù¸ïò+Aê&ÊËc&ð€]¾‰™lµ;Ê™”R=1}jóë˜ï…é‹J„t"öâA„£”z“õèj—öcz*ä^~Ÿ¯©0 ã1%TŸh­ êyÈELóhÿ˜u/p(!A B+Ç6p?Žé¹¸ ||“.á¶e:æ{Ä‚À×ÀæTü!½"i‚ÍzLÃÔKG²Nô®¡é;SÎák­ ë9ß<‡‘æ÷Hcø9£)MK^_Û´Ö)/;Œr1Ÿ ´³ËG0å¢7S˜ i‹AHìhÝ…˜ñ³Ó¤ù—D7iZññÌÈNø/­uQ=ç·^ÀìÀ€€A˜O Ô—5áPJuÃdFÚ¥ ° ø:‘Ñ{Á–cÎúÚ¥«˜Þ±&õ#¡e!DRˆSíÍÁÔr¢µ>‘¤×þ.æâ& üAk}°žó;/aêÎË€w´Ö”RÇ1Âi(R~%ÆŽ¬Ži⎘îÁ4˜ßJahUÄq1¯òsA€4¡ BŠPJea@?»´³sHÂk{€g€áïŽß×W꥔êÉ|´noGO²±ãy'i­7%4pAhÁX¯Ÿi˜rH&«¸3²öz*c‹ .æ‚ 4"@!(¥FOm1®ÝÖZ'ŵ;Žøx_k}´žóÂô|dç1™¹Ð„&B)Õ˜Œ£º2áð¥ÖúBÊ‹!Ž‹ùyLŸÇÙÔE%BsDJ°!‰Øîy˜N0¾&«Q3F|ÕõÕj+¥r0="Œ«òûb&MƒRª 0 3nÛo—OaLϤ*®XlIØLª{QÊ€/I“±¿‚ 4?D€B’°nÝÏÝ1 ß[0;œIŸi{>R³ìª>ñ1㈮0%§Ã¨OAhîD¹— “3ÖzS:yeˆ‹¹ ‰Bˆ $¥ÔHÌ¨Û  ø£Öút_ßž²1âã­õ‘:ÎU˜ÝÎÉviƽXv:¡Ôá^~Ó¼} ~Ç”RC1åVYvé$¦Gírꢡ¥ Dˆ½ðÏ£ÚÛãfÚTY’cXˆaê¦7e ¦¹t£Ö:?I¡ B‹Ä lŒðèl—#îå{Òij”Rª+Fx ²K¥˜’°:½Aî ‚ lcéw‡0óۀϓy±%>FaÄÇûõˆˆÁà {îÇõy‚‚P?6›8³ ÑÅ.—›H?áÏÅ|3ÆsD\ÌAhRD€BPJ=<‹)³¨Àü%Õ##Žø¨/ó‘ < Àô‡Ô9K„ú±£f=íR9¦ïkk:]Ћ‹¹ ©@ˆ 41J©Q˜ÉQ^Œ+ðûZë+IŽ!Úd°ÞQ»Ö`ðEÌímà]­õ¹dÅ*- ¥Ô`ŒGF»tøcЗpŸ{ÁФ'0ƒ1.aú½N¦.*AZ"@¡‰°;‰³0ý` Ä>NöE‡ ¨v8¯3›¡”ê†q7I[k}5Y± BKÁf=ó€v)l6k­+RW<âŒÕ½lD\ÌAH"@¡ °ýOÃ0ý_c7“:Õæ§]õÆd>2‹ñ‘´æxAh Ø,ÂtàA»v`z'ÒʰS)•L&P=VwfØÄTÆ&BëBˆ 4¥TGLÿD/ÌEÿ'©hÞ¾ÇiWýïSínþ¶Öº•i7‚P7J©¾˜‹øhá±È×ZßHY`u`¿›²1ß ìò)Ì÷ÓÅTÅ%‚ ‚Ð@”R^L!sÁ¿QkŸÂxfb„ÆЏïJ©É˜‹0cAצP0 BZSðØ¨µ¾ž²ÀêÁöyÌ¡zW)°(’ßuAÒ ‚ДRm1Íæ0$uf’ÏtLYˆÆ8ïŒsNl¶&?•‚IÒ;Pb 0Ä.…1¥K›ÒÕÜšˆÎF`²›•Àfàéó!"wA)ÕcÖרÀ¸Š§Ì)ØöŸL·w×i­wÄ9GavD'bDÊ_´Ö[’¤ 4¬ð˜LóÊxøI˜¸½HŸ‡ Í  ‚Pv‡ñe 3¦¬á­õ¥Æ3#,À~ç˜äbÓ?ÕZïJ^”‚þXÁT§MZëk) ¬êñóøBú<AhNˆ„:PJuÃd>:7€·R¹#ª”z„jññ¥Öú«8çx0£G`ÄÇÇZëÂäE)鋽€ÓãÑÇ.‡0Ùƒ´œjÁ ¦9@»tó= ~‚ 4;D€B”R½Là °*•&cJ©1ÀS˜:ﯴÖãœãþ0sQõG­õÁ¤*iˆÍ ŽÄôxt·Ë•ÁoÒ¹lI)Õ“©i—î_câ–1Ú‚ 4KD€-»Ë9Îï÷ ‡Ãn8>ìo¨O‡u:~ÈÎaÊ®ÊoâIµøØ¢µ^çœ àÌœÆ1e}*‚ØŒ`¦W¢‹]®ÀŒÏÞªµ¾“ªØî†RªFx<‚ñî a¦ØmÒZW¤26A„Æ¢dBŸÐ’PJ)Çó´Ïç1nÜ8O(Òn(º …Vk­ÏÞåñÑNáÇ1 çdÄ^G<ƒ0bÈ‹1?û8v¬¦/}1»£ïÜí} BKÆ l`ð€].Ç\ÀoMƼÍH>âóù&…ÃáŽ^¯÷x Ø µ>߀ÇMÄL¯kc—`ÌÓÎDá~"´¬øXàóù²_{í5O¦T: ±fÍwÛ¶m¸®û¡Öz_éŸð‡ß§r”¥u`~ ãf|øC¬y Rª ¦T¬/fgwÕÝ.p¡¥b§C=‚™ÕÑ.ßv`J–*“C0ÞëõNöûý¾éÓ§{úöíËŽ;ÜÂÂBíºîj­õÑ8S˜Þ­Ç,»|ø\k]œè¸A’‰¡E`ÅÇS>Ÿoô«¯¾êéÕ«W­s¶mÛÆ'Ÿ|¢]×ý(Ö´O)• <)u(ÄdRæn{P~€); |[ï#>Ê1âC&á­¥T&ð(0hg—obz%ö$c#ÁzMðz½“233¼¼<ïØ±cñz«+¿üòK½aÆP(ú?Ñ ïJ©‡1~‘þ”À`Ÿ ‚Б¡ÙcÅÇ“gôÒ¥K㊀ &àõzÕ‡~¸@)åh­ ìã£ÅÇà“Tþ§¯”ê|#>Nb21õ‰;ÀÛ">„Ö†R* x ƒÉ‚¹xßìL’ðhLrg|çÎÕŒ3¼£G®!<"L›6M=zÔ9wîÜ“À{ÖÁ|0Оi0ß*F‚‚ ´d$"4k¬ø˜ëñxÆ.]ºÔÓ¯_¿»>f×®]|øá‡ÚuÝ5˜ÿð#âc7ð§‹NÀ ¦~UlÙHññ–”] ­ ¥TOŒð…ùݸ|ìMFöR)ÕÉãñ|Kk=¶K—.:"<Ç©÷q.\àW¿ú•v]÷(Æu]aøàƒy®ë‚¹Øü9Å⣰#>.cšÉE|‚%ʵß,`Ò’%KœÞõüXöîÝËêÕ«q]·x#Åâ#X t®¯ÇúŽXññÆ@í6&;’2WvAHu˜jà(Æ<ð\’âèîñx¦h­³ûôéãΘ1Ã3|øðûz®3gΰlÙ2lCú¡&U!í‘ ˆÐ,ñù|3©C|„B!Nž„V@ÔD«‰TO… `J%¿ÑZ—$)Žž~¿²ã8#{÷îíΙ3G 4ÈS×ù@€“'Oâõz8p`ÜÌH¿~ýèß¿øôéÓà ‚ ´:$"4;|>_09žø())áí·ßæìYcƒñÀðòË/É› Ñ®ë~iLOÖ¯àà!Œ°x]k}5æÉ|­kÀ73Ѫ­].£º±<)æJ©}>ß´p8üÐ!CÜ™3gÖ[æYRRB~~>»wïŒéÛ·/¯¼ò ~¿¿ÖùÇgåÊ•®ëºÿ.åW‚ ´6D€Í ¥Ôt¯×;uÑ¢EΠAƒj»qãË—/gðàÁÌ›7›7oòî»ïâ8?þñë­Ñ¶éa×uWh­/$ú}@UiÉw1†i•À›±ý">„Ö‚Rª+&Û‘Kuvþ°(LÖT¨há1xð`ýÄO8uMÖ‹°qãFÖ­[ǰaØ:u*ýúõãøñã¼ñÆL:•Ç<îã~ýë_‡ÎŸ?_ …þœˆ÷"‚®4¬kNÒŸÏ7ÕëõN}ùå—ëÆ cáÂ…´mÛ–^½z1oÞ<._¾Ìõ;–Ñ£G+ŸÏÿJ!1ÌÁˆ0fÔ®ˆ¡Õ¡”zP)õ}à‡À8Œø¸|ü‡ÖzW¢Å‡2 õûý¯9޳8;;{àO~òµxñâ:ÅÇ¥K—xÿý÷9sæ Ý»w' 1yòd"Y’Aƒ1lØ0ª»ÂjÆŒ^­õ#v… B«Az@„fÏç›ìºîôE‹é¨Dæ IDAT9C† ©uüúõ딕•QZZŠëºUÙŽP(„ßï§C‡»ÿÿ>eÊgÏž=•Rí´Ö·›üMD¡”šŠÙíÕÀGZëc1ÇÛ/½0å'«´Ö—“ $ Ûß1SjÕÕ.kL?Ä7ÉrþŽ4¸û|¾™áp¸ë˜1cT^^žêÔ©“ªë1gΜ!??Ÿ#GŽ““Cff&}úô¡wïÞlذŋWùþ©‹áÇӣG÷Ê•+“€Ï›ò½ ‚ ¤3"@„´ÇçóMr]7ïå—_®%>JJJX³f O?ý4/¿ü2o¿ý6ï¼ó/¼ð·oßfÍš5äååÕ{¡K—.`F{¶Ãd‚Rj40ÃÞý\k½/æ¸x#>"™B³ÇîôŸ–gÚåJ`Fx\­ë±M‡Èñù|Ó”R'Nœ¨¦NªÚµkWçcNžC† áå—_fÕªU¼õÖ[\¿~‡zˆ)S¦4赎=Šã8®ëºe‰x/J©¡Àw0Bg£ÖzkÌqÆýAŒøxCk}%QñB2PJõÆd;¢¯c&ZíL–ùžÙ>Ÿ/O)Õ~Ò¤Iž©S§Ò¶mÛ:sôèQ6lØÀùóç7n/^¤M›65ÄÀÈ‘#éÞ½;|𥥥ôìÙ“ýèGõÀˆ<®M›6ª¼¼|(PÔoS!í"¤-J©GÇ™ýýï_ÅÎÛˆž={òÜsÏU•\ 4ˆE‹ñÆoà÷û™?~ƒ ÂŽ=ÊêÕ«]ÇqÖ…Ãáò½Ÿ~À3˜ °]Zë/cŽ{€g˜]áwD|MRª‘‘1ÜuÝ`0ÜJ¤÷ý÷< Sj=>ê4f¢ÕÁd8–ÛXüÀ8¯×;Ùï÷gL:Õ3qâÄ:Gt»®ËÁƒÉÏÏçêÕ«Lœ8‘_|‘víÚ‘••Å_|Á¬Y³èÔ©SÕcÇaêÔ©üá`Á‚L˜0¡A±9ŽÃˆ#œ={ö Aˆ ­ BZ¢”zÄqœ¹ßûÞ÷ÔÈ‘#k»}û6+V¬ ¼¼œgŸ}¶–À8p K–,aåÊ•¬ZµŠüàõ–`³jÕ*ø* nIÐûé·ëŸÆWÀBŒáZ#>Äá\¸o”R1»ýc€úõë=z´·¬¬LoÞ¼ùYàà/ xÝö˜2«ñ@{»Ä\\oKf9¡õØãõz§ùý~ÿÔ©S==öXß®ërøðaÖ­[Çõë×™8q"K–,©‘!™0a›6mbÓ¦M<õÔS5?zôh6lØÀ©S§,@²²²”ã8íï~¦ BË@ˆv(¥Æ8ŽóÔ÷¾÷=5zôèÇ"â#33“ëׯóþûïóüóÏãõÖü§Ü¿–,YÂo¼Á›o¾Y§)..fÅŠ.°- ~Y넦y?1⣠p øcôίOR=ë­õéDÄ"´lìÅÿHŸÏ— ôìÖ­[xìØ±Þœœ:wîù%QÆ SË—/L)u^k½¿‰^»FtdSýK)°Ø­µNHf±ŽXÚ½^ïÄöíÛ«¼¼<ï˜1cj}OD…BVe<:vìÈßþíßÆÍøý~&MšD~~>Ó§O¯1àÂëõ2uêT>ùäfÍšU«L«.JJJ\×u:øB!"¤J©\Çqæ?óÌ3uЬ¬,^xáNžÐ¸ ¬Ž3Rtfü¨‹™ˆu4±-;®y¨ßïå8ÎC™™™nNNŽwܸqôêÕ+îw|ÿþý™>}ºóÕW_ÍRJ¸ßR,[Ú4 “ñèuè ÕeVáûyîûŒ§£×ëä8θÎ;3sæLïèÑ£ë-ÃŒŒð˜:u*YYY¬ZµŠÓ§OoâÀĉÙ´i›7ofîܹ5Ž;– 6°iÓ&.\xט=Êž={t8>poU¡Y#F„BÚ ”Êvç» ,PãǯqìÎ;¬X±‚öíÛóÒK/U‰ãdzjÕ* À /¼7ËqëÖ­ZcxÏœ9Ê+Üp8¼# ­MÐûq0âc0p øÏXÇc;Ž73‚ôOZë݉ˆEhY(¥¼À¿ßŸ …·iÓ†ÜÜ\'77WõéÓ§A}OwîÜáŸþéŸÜP(ôÞ½Š^¥TwŒhÎÁdöBÀ~`»Öúܽ½£Æãóùf¸®;¥GîÌ™3½Ã‡¯÷sسg§OŸæ©§žbïÞ½Œ9²ê{å7¿ù ^¯—W^y¥ÎÇþùçlݺ•Ÿÿü絚Ø÷ìÙƒ×ëeÔ¨Qqëº.Geýúõ¡sçÎ9Žã| …Ö%²'G! ˆ(¥F:Žóôüùóë™™™µ2ƒ ª1ù꥗^ª%BbÅÇ… X±bE8ïL”ø°Ìň ð~ñ1#>ÀŒãñ!Ô‰-Õëçñx²½^ïhÇq¼#GŽT£Fr† RgyQ]´mÛ–áÇsàÀà®ÄŠž¡˜lÇ@Ì$70nå{Hr™ULlý^ïd;-Ïiˆs]—íÛ·3qâDb³­Ó§OgÕªUÓ¿ÿ¸ŸÎÆ âºnÆàÁƒõèÑ£=#GŽl¿M}Œ3ÆÙ¿ÿ0¥”Ok¬ãõÆ` lN¦úóòx<#ÆŒSkZ^„P(TK EÆóóóyî¹çj:t(={ö¬e,M»víxôÑGÙ²e S¦L©÷ïÂu] Y¿~}èÆ8޳ÃuÝ-Zë[÷øVAZ"@„”¢”î8Î3ßþö·ãŠ•+Wrþüy~úÓŸÖû|ÿþý«Æï¾ùæ›,^¼¸ÖGD|ƒÁ½ápø“D]4)¥FR3³q(æø0ª½@¶i­7&"¡n¬/ÅóáË9¥ÔêT^*¥ºa›ÉÇéÔ§Owüøñžœœœ:GÇFsãÆ :ÄåË—ÉÊÊ¢®‘³C† Áï÷;cʧ"¯ï`ÆAO†Pí(ÅL³Ú¡µ.iìûl*Çiß©S§¸iƒò_ÿõ_üô§?­ñÔ×0î8Ó§OgõêÕœ;wŽ>}úÄ}Ý©S§2bĈ:¿›B¡{÷îå‹/¾•••¡µÞåºîWáp8a^C‚ Í BÊPJ qçÙoûÛÎc=VãX$ó™™ÉªU«Xºt)õ9GDÈ¡C‡jÕ~_ºt)Z||œ@ññ fœ®¶h­·Åˆj/ aY¡^ÚaJãÖŘ2¢ŽÀL`æïèõd¤”ê ÏÈÈ ôêÚµkxܸqžGy„:xò;vì`çΜ={–бcG6lØ@QQ?üáký^x½^²³³¢¢¢\`¿u*ÉÞEL.4pØE½;î×uËnÞ¼©©JUôíÛ—òòr¶nÝÊ´iÓjëØ±#@܆ñQ£F±nÝ:òóóyá…â¾n‡j•xvìØA~~~¸¢¢" …¾ÆôÆ$ÅpQ!Ý"¤¥Ô`ÇqžŸ={¶Š@€U«Váº.K–,¡¬¬ŒåË—³|ùr–.]÷?üýû÷¯U³}åÊ•ˆøØ—`ññðß0¿WˆñXPJõ:¾HXF¸+ÅÀÿ‰ùü¯)¥þôú+¥²bûvš¥T[àaŸÏ7è×¥K—И1c|¹¹¹téÒ客£²²’}ûöqèÐ!ž{î9N:Åõë×ùÅ/~Q%ÖOž<ÉòåËÙ¿ܦèÜÜ\µ{÷îÁJ©—0½•r ÓÛ±+²ñ‡ÃÇöíÛ7báÂ…žX‘Õ¡CÆÇæÍ›yì±Çðz½>|˜ 6põêU ÀîÝ»ÉËË«e,8}út>üðC.]ºtWGs¨6l`(Ú |£µ®lê÷,‚М"$ˆø˜5k–š6mZ­ËK—.°dÉ222ÈÈÈàÕW_eÅŠ¬X±â®"$š+W®°lÙ²peeåá‹6˜’žLà,fœ®Ž:Þ3Ë©ÿ0w’[ Zë@ëa¥ÔEàÌße“ ¥”xØï÷‰››““Cÿþý}w{|(âðáÃpèÐ!²²²ÈÍÍ%“››ËîÝ»)--­ ¤M›6œ?>®8p ™™™ª¬¬lÕÙŽÀádŽÐm$‡ÀSu‰¬éÓ§³sçN>þøcΟ?Oii)“&MbÒ¤Ix<þõ_ÿµNcÁüü|NŸ>]¯¹sç›7ofóæÍa×uËC¡Ð&`Oœ‘Û‚ "@„$£”dŇ3cÆŒâ#ðùçŸ3kÖ¬Zã/»téÂÒ¥KY±bEU&$z·2×®]cùòåáÊÊÊ#ápø‰ºà·õòߺ%¯`Ôñvñ‘ œ~ߌ.ìZ¶1½Æòz>¯äñx²Çî÷ûÕ°aÜqãÆ©Þuj“ëº?~œ‚‚8@  33“×^{­F Aƒhß¾=ôêÕ 0‚>н{÷¸Ïí8¹¹¹lÛ¶­$ ¾©µn²÷,´Ö•>ŸoçºuëÆ9²V¤S§Näææ²sçNfÍšÅäÉ“kôƒDŒóòòj”yz½^~üã×9aìöíÛlݺUoÚ´I»®[ …¶;Ex‚ Ô¡Ñغq/p§¾g¥ÔCŽã|?//¯–øã×QTTÄ©S§X²dI­~.]ºÔÊ„Ô%B®]»Æ²eËÂwîÜ9‡ŸàlÃLL£nãb^Õ`jÚ^º`.hß©k÷]H &cþ®¾il½~ìØ\À7|øpƌӠ±¹®ëræÌŠŠŠ(**Âu]FŒÁ‹/¾Hyy9ï¾û.mÚ´©ñÇqÈÉÉ¡¨¨ˆÜÜ\ ؾ};ÙÙÙµFÍF“““ÃæÍ›;b¼<šÖì3võêUÏÑ£G:th­ó¦OŸÎîÝ»éØ±c­†üI“&U Ι3§Æ±xO%%%lÚ´Ioß¾]+¥nƒÁMÀ^Éj ‚ 4 1"î ;FvÆý8Ó.¡µÞRÇù:ŽóòôéÓ=?þx-ñáÊ•+Užu5—””T9¿öÚkµÊ±JJJøõ¯º}ûöñp8üA"³ ösXˆ)]ù£Öz_Ô1¦,k0PŽ1"¼–¨X„Æ¡”¼„)»Zv¿BQ)Õ×ãñŒRJåC† ÑcÇŽõ؉Sw}ü¥K—((( ¨¨ˆ²²2† Fnn.Ñ¢%ðÏÿüÏLž<¹–Eqq1Ë–-Ãï÷óðÃ3iÒ$x××ý—ù—ÐÍ›7¿ÐZo¿Ÿ÷l”R1ž$c¶Žã„{öì©þú¯ÿ:nJé½÷ÞãìÙ³üìg?«Õ¿q£FÛ¨Í7øúë¯ÝmÛ¶¡”º óûv’Ah­HD¸_.b.¾ã»uQ->&MšT¯øèÖ­[­R«XÑ©S'^}õU¶lÙRK Xñ¾sçN±Í|$R|ô¾mïnŠ x #>ÀÛ">Ò—¨åÀ»÷#>”R™>Ÿï%Çqz0À3fŒ';;»Acs+++Ù²e EEE\½z•¬¬,nÞ¼Éßþí߯íwòûýŒ1‚¢¢¢Z¤_¿~dee1lØ0¾óï48þaÆyvìØ1Hk¢”ê<”ê†ù+À6×uO]¼xñ?~œAƒÕzl^^ÿþïÿNaaa-³Àú„Ç¥K—ظq£[XX¨<Ï…P(´Ik}¸©Þ“ BkCˆp¿¬Åìø»J©1Ô!@”R}ÇyyòäÉž¹sçÖ¡P×ukí wêÔ‰¬¬,Ξ=[gÓy§N˜;wnµˆø¨¨¨8 ßK°øèˆÉnø€C@~Ì)S0e!.¦çã|¢b‡Rªð"¦üèM­õÕûyÇ3­K—.Ý—,Y¢:6·°°²²2ÆÏ©S§˜8q"ÙÙÙþíßþ'NÔY:•““ÃîÝ»¹páBU¿T÷tìܹ“'Ÿ|²Áé½{÷V^¯·wƒNN2¶‡f$FxDÞ¬ŽaÌG²^¯wïúõë³ Tëï G 6Œüü|F]+ Ë… øê«¯Â………ŽÇã¹àºîúp8|¢)ß› Bk¤þo_A¨­uYCê}>ßÂqãÆÕ}ôo¾ù&@õfs àÍ7ßàG?ú@€åË—sëVýžp%%%,[¶,tçÎS@`u‚Ň³[ÞãœýaÌÄ«À {w­Öúh¢b‡Rª¦ì L–êJ#ž+7//ÏÓÐ m—/_fÆ 8ŽÃâÅ‹™0aíÚµ£sçÎôíÛ—‚‚‚:;dȪ†óXrss)++ãøñã÷ú6Òj8‚RªƒRj:ð?1¥Ž½0B±øÖúm­õ±èß¿p8¼±¸¸Ø)..Žûœ³fÍbÒ¤Iõ¾nqq1o¼ñFøW¿ú•Þ¿ÿI×uWßi­E|‚ 4"@„„‡³rssã–]Mš4‰‹/òúë¯SYYI à­·Þ¢¢¢‚E‹Ñ«W/^{í5\×eÙ²eܸq#îkܺu‹eË–…oß¾}Æf>ÝHû¦÷¥x/º\Ç–òDîHp,Â}¢”ꊰJk}¡Ïå„B!ÿ<÷øáÇٿ­õœœÊËËã …ÜÜ\Ž;Æ;wâ>§ã8dggW5¨GÓ£GzöìIQQQƒßÃÉ“'ÝÆ°¦B+¥ž~ LÇG–ëÿ­µþHk}9ÞãµÖוR‡¾üò˸bªW¯^L˜0!nöà ÐòåËõ±cÇNº®»¼²²òm­õ¹¦z‚ ‚!Á8ŽSqõjüŠ–>}ú°hÑ".^¼Èo¼Á;ï¼Cyy9K—.¥mÛ¶@u¿·âXnݺÅoûÛÐí۷σÁw->”R£€q˜ò£ê”RY˜Ìˆãõ±.‘±÷5\„ °Þ®õ޹µ©ï9bqÇ­¨ˆ?8«¨¨ˆ/¾ø¢ÖzD(ÄËbäääàº.ûöí«u,Bnn.7oÞ$Þnÿ÷¾÷=¾ýíoÇyTMnݺŗ_~Iaa!@ î‰d ”j£” üLIÜPŒ? üøÿ´Ö_i­Ëïö\ápxãÑ£Gsçî®\×åàÁƒüêW¿ -_¾Ü=vìØA×uÿ# ½ÝQ*‚ Ôô€ % íþúë¯';ÖoDZ_¿~,]º”•+WRQQÁßüÍßT‰:uâµ×^«µ¥¥¥çƒÁàÛÑÞ‰@)ÕÓX¯µ>u,ãõѸ€éû‘œé˃˜¿+€'ë8ç= AÆZk×ï÷_:}útïxÍσÀØ~P(DïÞ½Ù·o@ F?T»víîëFÎ‹ŠŠjMºŠ~Xîܹþ}ûصkWèÌ™3ÇSâºî:­õ醼ߦÄsdcÄ;@Æ…}çý oÐZ_ÌÈÈ8òé§Ÿ^ºti-_0ÂcïÞ½¬_¿>tíÚ5¥”Úíºî×éîú.‚Ð"$ší×®]÷ÙgŸ9óæÍ‹›qëÓ§O•yûí·kd@"ÄÖÕß¾}›åË—‡KKK/&I|øg1Næ'€¯¢Ž)ài ;PJLY––œþt—s.Ý˃Á#{÷îí>cÆŒZß«Ñ=zôàäÉ“°oß>ü~?¡PˆƒÖj8ÏÉÉáÃ?¤¤¤$®çã8<óÌ3deeÝ5¾@ ÀÁƒÙ³gOøèÑ£Žã8w€B×u÷†Ãá¤I°}TÙáÑ'êÐ`ÆS£Q¿Ó@`Mqqñ¾úê+gÚ´iUe ¡PˆÂÂBÖ­[*--Õ®ënÇø¾”Õót‚ B"> B£±S°¾C> v ï¢Ù³g«è X.\¸ÀÊ•+騱c\áöíÛüö·¿ ݼyó’unNøÅ¾RêÌS ðÛè2¥T0cDøºL¼jز®ÿë§?ý)ݺu«uüã?¦¨¨¯×K  ;;›ÜÜ\Èï~÷;233y饗j<¦²²’üÇdöìÙL™2åžcr]—“'O²k×.wÿþý¸®ÒZ ‡Ãû£ÉÎÒÙ,âX ëÝi*ßìÐZŸmâ×ê8Î÷rssG}T?žüüüPyyy8 }lÓZÇo²A†d@„„£µ>­”z÷‹/¾x> 93gÎŒ+BzõêUå¿+B*++Y±bEøæÍ›W‚Áàª$‰ ñÆŒŽ#0#wþ$â£õ¢µ¾î÷û/uõæS†µuëÖ*1=7''‡5kÖpçÎÿæ3226lGŽi°‰rP×nEEJ©“ápxp(‘ââa³‡#G€~Q‡n»€Ý é븴և•R¯ïÝ»wæîÝ»x½Þr+ 9sæÌ‰+BzôèÁÒ¥KY·nOÍ1þ•••,[¶,|íÚµkV|$üB)ÕxÜÞýKt¼Ẁê‰W 9$´H‚Á`ÁÎ;ófΜYë»5Ò¯QZZZË›#''‡?ÿùÏìÛ·¯V¿Ç‚ dfxéÒ%öíÛ§·oß.++óx<žÓÁ`p7Ft$ýb[)Õ M”S9ÆçFxLFÆfUÞLôë‚  Gˆ4¬ykÓ¦M/º®×Œyá…j¬UVVò»ßý.|íÚµëÁ`ðõd”MØ:õ…˜ß“CZë­QÇÚb&^ùãÈÄ+Á°·´´ôñsçÎѧOŸ¢ Ÿzê©c`# çEEEµH»víê|±’’ رcGèÆÇs! {Ãáðí&}g Àc…ÉvD›^v…Òk!‚ ˆî ;.ó©˜åÙJ©ÙöÏëµÖ_ÅGk}J)õÖæÍ›_ê!ÑDÄÇåË—“&>,³€ÀmàÏ‘EÛt¾è \þ ¯‹ãñxJ ²b˜LG~~>ÇgÈ!5ŽÍŸ?ŸÌÌÌ»¾@d‚ÕŽ;BgΜñú|¾ëVt†Ãáøf9 Æúß<‚)UŒŒò 1ÂãT´Y`^߃©ìJ=”BAh"@„ûå"°¹žãu6“j­‹­yÑu]ß“OÖ5ÕLîyýõ××/_¾aÅGBjÅcQJ=LÀø}|³k;xÓtþ4±¶n”R1ž#€~Á`PíÞ½›¹sçÖ2»ëÕ«W•ïG¬éÒ¥K¯QYYÉ(,,ŒL°º … €‚@ ßh'Á(¥21Íäc0B=ª³ ý}µ#|çbÒ½QëW0£²k»? ‚ )Gˆp_Xgàûv¶"¤hË–-c¸k@€•+W†ÏŸ?_’dñÑ–êÞŽZë#QÇ3ìÝ5Zë‹ÉˆIHl¬7Ft ¥æÅ· œ®¨¨x°¸¸XÅzs€ééhß¾}­õXB¡G¥°°0¼ÿ~Tj­÷º®»ÏuÝ3‰Ì(Ô…}ï1½#¨öía BÒQJuþ;¦f{'ðÏç{Þãñt~ä‘GœŽ;ª½{÷†/_¾|+ þ§ÖúVc <¹¨üÏÈX]»óûðÆ n…Ô™·l”R©©Þí¨ŽG€#±exJ©‘~¿ÿé_üâž»M°ŠˆŽ‚‚]PPà”R‡ÃáppLkjÊ÷ÕPìøÜáñ &#P޹¨ß£µ¾'³Æd¢”ú;  µþ_©ŽEA¨‰d@„¤b'K=‡ç€Ï´Ö!¥Ô²`08|çΣÇɃWÂáðúdf>ì.÷öî–OIñ~/â£ebò"¢£ÕÝ71ÏŽÇï" j­omÚ´)ëñÇ{Â… (((    \VV¦<Ï©`0X€É¢$Üߦ.”Rý0¢c$QO.Fpí'ÛKä^±#²30#A„4CˆlžÄÔÏ—c.äCöç^{KÓ1“­J€ª ^¶Ñ5ÏÞ]«µNIÓ¯ÐôXAü ¦—c85Ë‹4¦Ä舽]hhoƒÖÚUJ†Ù@ IDAT­ÉÏϾ{÷îjôèÑ\»v¢¢"öìÙºråŠÇçó]ƒ{€ýáp8)=Nñ°å…ÙÔn(/ÁüNîÔZßLEl A)•ôÁ”GvÆazB¾¨ïq‚ Bj,!i(¥ÆßÆì¦¾£µ>žâª°;ßÿðïi­Ûu¿]ïì×Zÿ>uQ MRª0“åLõ.?˜Éf'1 ÕG[þ§”ç8μ^½z¹®ëê .ø|>ßU+:öi­KóüŒÍ‹^£1ŸCd D8€ÉvœNE³û½¢”|'jé&ð‘Öº8E! ‚ õ DH Ö'`&ëö…ÖzKj#ªÆöw,Æì„ÐZul>Æß øMŠm…F ”r0åTƒí­'µK«Ž`DGqS÷\ØÝùј¾¢ÃZë+Mùü÷O?ÏHªÊÎ`DÇþT8§7;8 óýÒ Ó|þðg­õîTÆ&‚ ÔFJ°„„cwœ¿‡u¾ImDµÈƈJà³È¢RjF|¸À‡">šö¢Fp€ñ,Aš"@„&E)•]«1¯eä–@ÆØŸ{£„Æ<ÌïÄQ{a#41vêXOªǪ§3AÍæñ_ŽVÙDlÇWgcDG¯¨CåwòB­õùTÄ&‚ AˆÐdØFاìÝéät­aïî±kψ°6E¡µHî2­ àÕ‚ãxkö[±ƒÆ”X ¡ºç%Œi®/ÄäV)ÊA„–¡I°ÍÛÏ`..O›RPý<ŒiV½¤µ>gëêgÙcÛµÖ×SZóÇš>u‹íã¸Eµà8‘ÆY²¤¡”ꎙb5†êñ±`J¬ =­Á»DAhˆšŠ¹˜2‘ÛÀÓ´ï#Â`ûóˆý™ƒ‰½Øœ’ˆš1J©˜Rª˜~Žºú8"‚Cƒ©úÜ"}=£ÝÂô5ìÑZ_LEl‚ ‚HD€F)53ÒVcšÎÓ}G»¯ýyÒ–¼L·÷7k­ËSRóÁö& ˆºu‹9% œ¥:Ëq.ÍiÒPJe`¦WˆµHÿK8„ÉvœÏKAhɈ…5ßÞMÛ¾ÖÌ®³½{s!Ø3±k[ªâJg줪þ˜ æÁ¡¢N‰4ŽŸÂŒ].– bÕX‘;óo-RþÕîäÀÖÜû"‚ ´.D€÷íûˆø}œ"½û>"tÄ\<ßÁ”\M¶ëß´6O‰º°»ôÁ1S-84µ‡\¾N÷¾JíÏ@'Œ Ùºp‹5þëNMÁÑ)Ωש'›‘ L ¶/&â×1굦ñ~?¦¯CÊúA! Â=akÛ`¼Î_¦6¢{Ck]®”º‰Å{3ùªô.k6Ø&û¾T ޾Ô6þs1 øg0MÐgDpÜ¥”jÑ1ˆj“ÀH3ùL‰•”§ ‚ B=ˆî•Is¹fänstd>ÌÚ»RK£°å?}¨¿œª37"8ÎÉ”ª†aEÇ`L¿Ð0ª'XœÃ”Wí'‚  GˆÐ`”R½€<{w­Öúj*ãi0»×í05ûÇRNðÆu½1‚£·½ÅºŒÜÄf6ìÏËÒÐp¬èxˆjÑAº ì šñ¿AAH)"@„aK{¾‹¹p?¨µÞ“âC?L~{`¶í“Ø’.é¶ÌíÌøÛöÖèçô0f$îYªË©ZLIY²°“À†bLS3Óq“5Û¯µ>—‚ðA¡E!Dh(O`FÖ–Ÿ¤8–Æ2S>sS¶ô80T)õ¥Öúd²‚°B£ÐÅÞ"b£;àó¸‚é½9y—ši\ʱäC1™Ž‡¨ù}x#:h­Ï§ gÄ£ï"ò NåªÝ@½¦»‰ˆˆ\ø@¤cÌxŽWZy6µK¯cÑïþ*Õ‰¼ 'tL£ÿÔ*p*WÕ¥¶C È""".ú&©~ŸÆù óNkmÍŸÒpèÀ©Š4úL;JöcJ88ªèß%޳gÎÔª@ÖOPDDD†Œˆôu Ç»¿4Âç2\ÒÆžv/V©U8UÖ¦á4eì«Ø‹:ökj•ˆˆÈÅCD0ÆTá”ݵ8ë>>´ÝÎÏ !õ8Íc4}';R… Æ—¥¶ÉôÿÿO§Tîn`N×wýlDDD.B ’žzõ œ¾ [¬µõ#|Jéˆâôõ¨ŒèÙ\ÄR‹Ç/Ãå¨ÂéßW'lÔûRéEDDä"§"Ëpúv¯ð¹ +kmܳø(ð1@†Œ1¦'ÔUS€Q'ìÂ)“»'p¨! ˆˆÈ%HägŒ™ŒóaÜâT½ºþ ýp 0Ãs¹µöƒ‘>¡£ÔG%ÇClj#½x|šV%""") —°ÔÔ«OâL½Úl­Ý;§”ÖÚvcÌÛÀàŸ1G¬µgìŒ~)3Æ  gíF:pž°[hÂUj­µ±ì¥ˆˆˆ|(€\ÚnæøÔ«U#|.Ù¶§úRðcÌ“êœ}\ªãøÄ¶×pÄé8*pˆˆˆÈ™͈¸4c&_Ãýxú"_x> cL!ðUœÖ,·Ö6ìYe_ªBU)NȘ”z,ÅùÝè+Š8pBG“‡ˆˆˆœ+KPêç×qÊ¢n³Öþ}„OiÄcF_Äé ’ÀY²îbý`mŒqã\ë8œÑŸ  ð °{NiÜCÀAà˜µ6™¥S‘‹”È%Ès°§*Ñ£ÖÚàŸÒˆJ5ÅûÀ•©§ºp‚ÈÖsÔ¦ë²ùWvcÌàS@ÀZûÿ²õ}?,Œ1à*`0¦ÏK½8=,öã|`?š­iZÆ?N(Jo£ú<–¹§9¼h¡OØPÿ I CÀ3 gqnþ¤I“øêW¿Jss3uuuÔÕÕqìØ±Óöà’à}œ¿¸×[kÃt¾Àg­ Çû_ Reg+qÂÈ,NþŸÚqºy·Ý8#&a Òçë¾!Åп’”+õ¾y©Ç¾_ç§¾.à{Ÿ(}.-@kê±hý0O!‘‹“È0Æ,#ÕA|õêÕ,Y²„ÎÎNÚÚÚ…B„Ãazzz8|ø0555lÚ´‰;wN÷¶a`ýGKjš*“]©EûãËpªDUpêéMÃ%tâŒhôÝÚqF³âY>‘ó¢2ÒÓ¯ hiiÀZK2™ì·Yk …Btuu …èíí¥««‹@ À¦M›x뭷صk‘Èi›‘÷p|”$ýXm­mæË”>R%|ÇàL*ƱðãŒV䤾ÎIm1œNói‘>ÿã„‹ÞS‘H¼ï~Œ-/fly1vöñãƒ=½9ÜNkK'm-]üýÙM<ñ^ÇZÈË÷S^>Šª©c™3¯’eŸÇã"‘H`­%‘H‡‰Åb\sÍ5é¢9u""""rÁR¼JÀ 0}útö·PTRH0;uH¿àñ0nRã&•e^JÄ´º ´vhífÏ-¼õÆ,]vn·é÷6Éd’#GŽÐÑÑ‘~ê´¥µDDDDDF’ÈàMO‘imí¡lÂzÃç_µ`t£ ˜4 z:C¼ùÊfrs}ƒAB¡~¿Ÿ¼¼<âñ8Ƙ¾½FÔÙ\DDDD.X ƒ7 ¤¤„’’‚Á“òü„ÂCÓ(»é`'9M¹½^/%%%„ÃaŒ1™­O©’o*""""2 @oŸ~ôàr¹ñøýô†®†k3ÿÁé=€x,NàhG¶ì qã-—àñ8¥|ý~?Æ¢Ñ(ÖZÚÚÚÒ‡*€ˆˆˆˆÈKdðúUÀj:؆×ë—P8~N+“É$¡Î -]t·u“îÑâõz¹röDyyy™ ÒÚÚJ{{;±Xf´ES°DDDDä‚¥2xýz€ìß ŸßO,ñÓ®qÂE<ž$ÒÓK¤»—pw8ÓÿÃãõöÛ{ÊÔR€Ìô«H$‚Ûí¦­­­ïô«N yÈ®LDDDDdˆ)€ Bªo%Ÿ‚U_w~±ÄÉ]Ë“’щHœx$J"#=RÜ7nÜ'ç2†òqE™û|>À鞇û-@·jm/""""0Á©Âé<ž9ÔÔŽ×ã!Ñ…$Ød’d‡¾# Zÿ!""""<óWx¡ÏÈáž Ÿç”±åÀñ²»ó#K$c8|øpzW€ˆˆˆˆÈOäüMp¹\L™2€h,‰÷,úzœ‹ “œuÝÝÝäää`ŒÁívÓÕÕз–ˆˆˆˆˆ\ð@Îßt€É“'g¦D}û»×sð`ï¾ÓÀ»ŽÑÙåÜV¤ŸuוX{½½1¶o;ÂöíG8|$H2qî屯”:#*^¯—d2‰Ëå"‘H …úN¿:b­mÔÕˆˆˆˆˆdÈù«¨¬¬ðEk-~¿›ù­`Þ5å$“Iêfë–£44t ÅÎø ÜCNŽ›d2Ùïùd2‰1¦o¬]ƒº‘,Q9ϾõÖ[=z”òòò“v°¶ÿˆÇøñùŒWE2™¤·7ÆŽmì©ë¤-&™_UUÅÒ¥K¹í¶Û¸á†ðz½XkI&“§ÝÒûtvF¨­í¤¢ÂOE…¿ßëé©WMMM|ó›ß$ó­o}‹††Ö¬YCOOω§vÀï€ç¬µÉwÉA2Æä7wÿLêûznn.×^{-·Þz+wÜqãÆ;«rª-‘HP__Ïþýûùñ ÀòåËYºt)‘H„÷Þ{µkײnÝ:vìØ1ÐÌ‹À'­µñ_n CÈ3g”áÆSí3sæLn¹å-ZÄ‚ p¹\çBÚÛÛinnfãÆ<öØccxðÁùþ÷¿Ò÷:tèo¼ñkÖ¬áÕW_í[²÷§ÖÚŸ Ç=9!`Œ)þ;p?©îèÜÿýcX½z5ëׯï())aáÂ…ÜtÓM,]º”‚‚‚3†úúzÂá0ÿûßY±b>Ÿ/|á üêW¿:í9®_¿ž{î¹'=E«ÞZ;í´ˆˆˆˆˆ -B$cÌ×_%àL¹ºÿþû¹÷Þ{‰Åb$“In¿ýv~ó›ßðÌ3ϰdÉ6oÞL  ðÒK/ñÒK/áv»¹ú꫹ñÆY°`³fÍðû…ÃašššgzNN===äææâv»O:&³qãF®»î:V­Zp™1ÆX¥OÉ2A0ÆügাæÎ;ïäG?ú~¿ŸH$ÒoßùóçóÔSO1yòdî½÷^y÷ÝwÙ¾}; ‘H°e˶lq*èNš4‰%K–°xñbæÍ›‡Çã!“L&iiiaÛ¶mÄb1fÏžM[[à4,ÌËË£  ÇÃþýûyê©§7n\ßRÁQ`¾1¦§‰a" ·KDDDDDS°Î—1f ð&àš;w.?ÿùÏ™?>ÍÍÍÄb7üÞ÷¾Ç† øìg?Ë¢E‹(,,ÄãñÐÑÑÁ–-[¨®®¦¶¶ö¤ð’^ÈžŸŸËåbݺutuu°xñb~øáÎ7ß|“@ @^^±XŒššž}öY€6à[©]@ p'Œ†âþˆˆˆˆˆ Dä<cž>UXXÈ®]»ðûý;vŒÞÞÞéíí塇bõêÕTVV²xñbæÌ™CNN—ËE"‘`÷îÝTWWSSSC pê<0oÞ<yärrrú=ßÓÓÃòåË)..&??ŸD"ÏçcíÚµ¼òÊ+ ÀNñ¶=@µv÷¹Þ‘3Q9OƘV`ÌøC¾ûÝïâóùp¹\„Ãa:::èéé!‘xfÓúõëùýïOmm-n·›I“&1qâDJKK)((ÀëuF£Q<Èþýû9zô(Ñh€²²2¾öµ¯q×]wôÞ[·neß¾}x<"‘~¿Ÿ¢¢""‘ëׯçµ×^¨~~šË;d­}kP7HDDDDdZrŒ1 PPP@aaaæµxŸ¿ßOnnn&Œtww O¹fd ÔÔÔàóù8vìXf¡y,ÃÏç# òòË/óþûï§[ <}â[k¬µá³þæ"""""çI‹ÐÏ’1fp˘1cˆÇãtvvf^»é¦›¸çž{øÄ'>‘™‚5Ж^‘L&q¹\äææâñxp»ÝÄãq¢Ñh&Œœª”/@mm-yyy8p€P(„µ·ÛM$ÁçóÇiiiáÙgŸ¥¥¥ ü_` …å½ÀËÖÚȯ‰ˆˆˆˆ )³`Œù ðÇ|ä#<üðÔ••ÑØØÈã?ÎÊ•+3#£FâsŸû_úÒ—˜3g΀Ác ÍívSPP@^^ñxœX,†µ–ÎÎÎ~Ó´b±GŽ!²gωn·k-‰D¯×K4eçά\¹2bŽOqykísÃEDDDD@NËóIà»Àu€÷ù矧¼¼œp8L$!''‡ÂÂBÖ¬Yã>JCCCæØ+®¸‚/~ñ‹Üu×]Ÿ:‚Á ûöícܸqäççg¦kùý~ )**ÂårÑÑÑA4¥©© c ÕÕÕÌÚ’h4ŠÇãÁZKoo/¯¼òJ¦›:° øw tšËŒ¯Yk{†ç.Šˆˆˆˆ§2cÌ(à_N?wÝu×ñàƒÒÛÛËäÉ“ñù|ôôô‡‰Çã”——FY¾|9O>ù$¡ó™ßçó±lÙ2î¾ûnn¸á€LyþùçÙ¹s'¨¨é¿ àIDATóæÍcöìÙ”””››› )ùùù1~üxZ[[ùãÿ˜é’žîóáñxˆÇã–/_Nª*WX¼œéÞ°ÖF‡ö.ŠˆˆˆˆœLäƘ¥À“Àd€ÒÒRî¾ûn¾óï0zôhzzz¨®®æðáÃTUU1vìXÚÛÛéííÍTž*//§¦¦†ßþö·lÜx¼âmyy9wÝuŸùÌg¨¬¬Äãñ‡illdÛ¶m´¶¶RUUŤI“5j~¿k-W\qµµµ¬_¿¾ß(Jz¤®®Ž¿ýíoéì]8á©æ,.÷°ÁZ?ãž"""""C@¤cÌÏ€.€¥K—ò‹_ü"3ʇ)**¢¢¢·Û;}ûؾ};%%%TTT‹ÅhooÏT¼š2e ^¯—çž{ŽG}4½ €ùóçóéOšÛo¿ÜÜ\|>Ñh”ææfvíÚ…ÛífÁ‚Äb1ÆÏÎ;ijj¢µµ5ÓÛ#³nÝ:^{íµtÙÞ:à߀ö³¸ÜÝÀV«_É"cÌ?ÿ§Ç<À}÷Ý—ù ßw‹ÅbÄãq&L˜@ii)Á`êêjººº˜8q"yyyƒAêëë¹ùæ›ÉÏÏÇÃæÍ›ùÃþÀ‹/¾˜YXž——Ç’%KøÆ7¾Á´iÓ°Ö’››K"‘ ‹ÑÛÛ˨Q£Ø±cÝÝÝtuuFéééaùòåìÞ½œiV/Æ™~u:'xì¶›)""""r —|1ÆŒžîÌŒ3øõ¯ÍÌ™3 }·H$B^^S§NÅï÷sàÀÞÿ}>L8æ //P(”©– Y¹r%=öuuuðì³Ï2vìØ~Ó¬ÀYïQSSƒËå"°oß>ž~úi8etÿ»›Ÿ(¼c­mÒ›(""""r–@Œyøüìg?cÆŒL˜0!ÎBún•••L˜0x<޵–âââL§r 3•+FöîÝË}÷ÝÇÎ;¹ãŽ;øÉO~‚Çã!‘Hdº¡wvvÒÔäd†uëÖñ§?ý‰h4 NiÝŸÅ¥ök­µg3=KDDDDdX¸ÿå_þe¤ÏaÄc<ÀŸÏ²eËxüñÇ™1c;vìàå—_œÞé2¹gãСClݺ•ªª*ü~¦¡ ËåƒËåÂçó‘““ƒ1·ÛÍÚµk©¯¯gÏž=üå/áàÁƒäççS^^Ž1†††¢Ñ(O>ù$/¼ðB:¼¼ ü/ ã,N+€Óí¼ûœo’ˆˆˆˆÈòŒô Œ0¸êª«Ø¹s'ùùùÌš5‹¥K—òÁðâ‹/â÷û™;w.UUU„ÃáS¾YWW[¶lÁãñÐÑÑACCCfŠVee%………ø|¾Ì"òH$ÂÆ™>}:¯½ö===¬X±‚+VP^^Î7Þˆµ–µk×rôèQp¦Q= ¬:ÅiX 8–zŒ‡¬µgZ"""""2ì4˘UÀ-—_~9<ðùùù€³îb„ Lœ8‘xW_}5ø|>Œ1ÔÖÖ²uëÖÌ>ÖZ6mÚÄ_ÿú×tå«}À/À&kmr¤®UDDDDd8)€œcŒøΨÈÌôó'NdÙ²eýÖ‰,\¸®®.¶oßž ¡Pˆgžy†­[·¦ø°ÕZ»=»W$""""’] çɳ'ˆÜÓÐQ£Fqã7rýõ×SPP@~~>~¿Ÿ––’É$›7oæ¹çžKO¹JÏà¬ûØc­Ý image/svg+xml ServiceProvider 1 IdentityProvider 3 SOAP 1 HTTP 2 HTTP 5 HTTP HTTP 6 ServiceProvider 2 ServiceProvider 3 4 SOAP lasso-2.8.2/docs/lasso-book/figures/PaxHeaders/sso-brws-art-2.png0000644000000000000000000000013214404126114021574 xustar0030 mtime=1678814284.021743076 30 atime=1678814283.965742757 30 ctime=1678814323.153965518 lasso-2.8.2/docs/lasso-book/figures/sso-brws-art-2.png0000644000175000017500000010425714404126114025055 0ustar00bdauvergnebdauvergne00000000000000‰PNG  IHDR ¡™Ð< pHYsÊ&ó?tEXtSoftwarewww.inkscape.org›î< IDATxœìÝw˜Uõµÿñ÷:em ŠÑ‹¢"cÁ†FLâMl±$×M¹Ñ˜kMbÌ/¹771Åhc‰Wc‰‰ìFåÚ±Ò”"ED@)SN[¿?vñÌá Ì™‘ÏëyÎsföþž½¿gž‡Öù~×Zæîˆˆˆˆˆˆt†DWO@DDDDD¶ @DDDDD¤Ó(‘N£DDDDDD:é4 @DDDDD¤Ó(‘N£DDDDDD:é4 @DDDDD¤Ó(‘N£DDDDDD:é4 @DDDDD¤Ó(‘N£DDDDDD:é4 @DDDDD¤Ó(‘N£DDDDDD:é4 @DDDDD¤Ó(‘N£DDDDDD:é4 @DDDDD¤Ó(‘N£DDDDDD:é4 @DDDDD¤Ó(‘N£DDDDDD:é4 @DDDD:™™Õ˜ÙNfVßÕs0³ºp>=ºz.òÙ§DDDD¤Ììp3»ÁÌmãKöæçuܬZ2³nfÖ»•Ó‡†óùRÑø„™õ6³ºÎ˜Ÿl9€ˆˆˆˆ´ß^ÁÄž]=‘õ¸XnfUm¿-°ø¯›‘l‘R]=éZî>°®ž‡l€ˆˆˆˆt 3K‡;ïOµá5C€ý`ð¼»JÆôzó$p0˜ <ãîù¢±ƒ€ná·;šY6üz…»¯·Ym,s÷ÕfÖ=œ/@O3Û©èÖóÂûàî Z™ÿváÜßuwßÐû•-‹¶`‰ˆˆˆt3¼ <Ü< L†´2¾§™Ý Ìîþ L^3³K†ÿˆ oãp`:ð0ðGàIà93ëU4ö`løõÌðus€ Ãc‡Ò2äXà¹ðë-?èüx7 lJßC÷ðw(ør€ˆˆˆˆt3K#È ¹ ØØxøu™ñ àïÀx‚àb ?ðU‚Õˆ‰fVSæV·+CÃëß Þ3r 0)üzw‚hp]+Óø\øõíE㇫ßü?òœ2¯ý2Arc+×–-œ‘Ž1Øø£»_ãî‹Ý}p&Á G© ¶QýÜݯp÷Ùî¾ÔÝÿ|› ùb™×Ýáî—»ûŒðú_–c¢î>X~û®»Ï +ÊMÜÝ×ÑöªUEãç†[Áþ Ìη˜;ø¸s}?Ùr)éG„Ï.>nKúóºÃ9±ÜøÐýáóÁeεø¾»7lóZg{T¥„ïá‚Uc£ãf¶/AÐu»»¯måå²…S""""Ò1†Ïï–97·Ì±(ÑûE3[^üà““­Ë¼nQ™c«¶Au¤[€Zö2‰¾¾¡ƒï-›1UÁéQv[ËÛ&Â×\äZS®êT¡Ì±çî+ÍìàÌ0ý#à4àw³+æ$› """"caø¼ðAɹҊV¬”<çî¯wÀ|66 jËøë¯……«.ZýõÒ,‘Žñhø|vñA33à¬2ãÿ>_ÜAóY>÷nãø‚­ZàîS€—ÞãùÀJà®vÌQ¶Zéôß8Û̔ǭ~ .3þ½<¾–äý5AîG‚»_!¨¨õà&ÎgjøüK3û;¦¹ûôrƒÝ½ÙÌÞÆšÙ…ÀâðÔßÝ=[4ô÷=N¶~íî ›8?ÙBhDDDD¤„åjO^® H<Ÿ ü pÁzÆ_>O&غ5 ¸ØO‚€Mñg‚~!'„Ïw6ðšs º·ÿ2AUìN *ç«Þ²A¦•""""ívï|èî«JÎ%î@P±ê9 MPÂv¹»¯,s½­š ÖË9î>§dL_ '0ßÝó%çúÝܽ\µ-Ìlk‚|î¾ÂÌê€m€eî¾ºÌøªð| ˜KѹÀûÀî>º•‘HLˆˆˆˆˆl23ûàçÀÝ]ù²A @DDDDd£„‰ôç¬âüA¯á¥+1"å(‘n+Ëàeàkîþv×ÎJ6 @DDDD>£ÌlGà(à)wŸÕ†ñ»‡¹{¹î"í¦2¼""""› LäžTrx Áv¤§¿¸{kÍ;Ë>O6€#Ãñ§¼‘ŠS^‘M“Ft:_>ªJÛþxØÌÒ]7=–Ó¾ò½"¥‘öyÃÝŠ¾1³mÇ€#VþÔUs÷É[°D>5€ˆˆˆˆT»/6³Ÿ·!2³í€ã€çÀWaÀtw¿À̺_&Ø6•¦ÿëîË¢k›Ù(`/àôÞf6‚`Uf’»/\_ˆ™íIÐ]½AÇõ[×÷¾Ì¬ø°7$hªøw_Q2îX ¿»ßdf'½ÿV¢º€‘Ž=ÂçÝ r+þ› ¿bÁö¨!Àuf¶ð0X4çW™ÙÉîþTx­Âëô~\澿ö%èN­ä€˜ÙiÀÍÄ;᜾ü±Ü›1³C€{ ‚•…Õ¯Î.3³±îþjÑð‹€ÑaŽÌµÀ*À{ ¢‘pHø\Ú‰ü"à! —»oœdf)‚ÿÜo œåîýÜ}àh‚áî°ë9AÊÀa/Ž˜™í ÜWÚ½dÜ`àáu†¹ûÅ AHéøÀß ‰ýÝ}wß™ aàž°Sz±jàBàpw¯¯ÿlks’-‹‘ö©5³ÂÇþfv9Áäs« ÅÞ¾éîkÜ} p °p»»ÇãÝý1‚ã}¶lVÕú °3ð¹’kŸpËæ{P|ßÝg„×uàr‚m_¥.êsÜý•¢ù½ \ìŒ-yM¸ÔÝÿŽ-¸{ãæ%[ """"í3˜>^~| ü«»¿V2öw/”‹‰»Ë\û®ðù ¢c7‡ÏgDÂÕ¯lzbó>ÿ£ø`„ü½Ìø#`¡™ý‹™ˆ«"lõ*UZ¢XPˆˆˆˆH{½CÛAþÆ»À wo.3vQ™cýÂç÷Êœ[>÷¸û43{8ÕÌ. W?)à”ÚX­Â´r¿bÛ¬˜¼³žkÖ—|Ÿ>ÜÀ·¨xefƒ€/–­ªüÂÌ’¥'ͬÖÌjÛxomÁ‘¶ ›YíDÐLj0ÇÝËíWîfv50ÐÝÏî깈ˆl wŸof×—“ÍìF‚-W§ävüµ¨H±[V>®ù$a}Cþ< œ®žÜGPø?ÊïY2þNà‚&„/™Ù_€ùáköN>¼ÕÆûËNˆˆ¬—™íü™2{Íl6ðw³Ó'¶®C)¿u@D¤£äþþ¸ cñ¥¹¸ûåf¶¸ømxø#à‚£œ‡W Àv÷r×^Þwuѽ f6ž ‡äT‚UÕá÷¯”þ][4ÞÍì_€~Qtý¹PñR‹ ñEÊ2å‰Hk̬ž &|‚?L#øƒ8AðéÜ7ÜýÉ.›d(ì껵»ÿª«ç""ÒfÖŸ áw/—´^É{ÕôYâî™6¾¦ž Y}I+•¾DÖKˆˆ´ÊÌÎ#èŒ{»_Ôʘª¶þÑQºˆ¬ÏÀðù•Ö” >ÌìófvŸ™½gfKÌìY3ûr™qÿnfw™Y/3û¾™½ef™ÙÌìOfVv5ÃÌÒfv»™]Stìj3»©ÌØ:3»ÄÌ^ ç2ÏÌ1³ÓËŒž{ß̛٣fvtkï]DDD6žYŸhïÉfVÕ–˜Ù×§€ý[ –êÿ×Ì®*¾?0¸ ø60• L0‚Š0CËÜæXà4Šö4䀜X2—žÀ³ÀO êãßAlYM°Ïºxìµá¹ÁÕfî$HºØÌÎjË{‘ Ó,iUøø©+! ‰ÀsÀÓî>¿ÌøÝ7)ÀÑî¾:<ž&È s÷áñ[òH¦‡¹ûÒ¢k}ž JËÏÜý’’ûÜ r÷Eá±§Ãk÷)w#p.ðŸîþ“’kôw÷%á×G…sür´ª–Ã|š Vþ w_¾q?A)¥i•»¯îúçT;™gf¯•Ùžt¾áu²ÀU¿sN)s««‹ƒÐ³Àà+Åuçͬ/A óX|”Ö¤?˜ \[æ½-)úö+$ß,ÞRæîkÂ×vï)"""í¤2¼"²^î¾85\ 88€` Ô¾Û“&¸{Ô ë€ðùp3;¸äR5áóÎenój™ûº™ÝJP~ò(‚r“_&èà{KékJ #Øjõ‚ox©÷‚’“_5³ÒsÛ®gÞ"""²‘€ˆH›„«†+ÌìBàW5꣤(­åL´¨E_äÃVÆß \ œÁ'ÈÀJàï˜rðùƒ ŒèEÔœ×Êù¹5üEDD¤€ˆÈ&q÷ëÌìJ`3«u÷F`Aòø¾­4ÄÚØ{Ì s;N4³^¹(#€ܽi/ò5´áV+:w²é³é:a®ÝÉûy‹ Šá¬6¬‹t "²IÌ,E°Å©@Ð àyàóÀX‚*R•p3pA·Þ]‹ŽmÈ4`0ÚÌRîž[ÏØç ¶™t÷Û1W‘Ngf'TûÛ¥•!ËÍìEà¥ðñJ™¼;‘N£$ti•™}ÃÌ~lfÛ—¯þè<&™\OKñ 3Û§ä5ff‡˜ÙÆ®2ÜK°mëkÀ¿3Ýý… ½(œÓo ÊêþO0Ïg¯¢oä?•ÎÏÌ’fvœ™õADäSÄÌFšÙd‚ß“»$“I;ì0N>ùdöÙgjj¢Ô;¶"ø`èJà!`‰™-û5Ýbf7–ÉÛé0Z‘õéü'ð}3›Ì'È­ô%(ÍûïÑ`wŸof_"è·ñ²™=O?±5°A00† ºU›¸ûZ3»‡OòJ®Ûˆù_ ç8>üÐ ¶(ä€=Ã{¼hfß~L5³ç€÷Ї…Ï»mĽED:„™íü„`eØ=ôP®ºê*†ý¤uR6›eêÔ©L™2…W_}•W^y…yóæE§òI³Y€sÍìvà«Ú®%M}@D¤UáªÁAAÞ@‚&ó—?—Û-zÝ@àëÀ(‚&„"¬˜D}6N%¨¦uu˜CÒÚ<ö"Xýø•»/.3æ| ¿»ÿ°äxøp2AÔ@Pš÷¯îþDÉØ=ú†ìÔ$°¿CÐñYw/´6G‘Žff½ >úw‚-°ì¶Ûn\}õÕqÄ´åÿt+V¬àÍ7ßä7Þà7Þàõ×_gáÂ…ÅC¾çîÿÕó‰(ù ? º¸‚`;}ûöå’K.á+_ù ©T°¡eSÿOwóÍ7s饗’Ï禹û°ŠL\¤Ú‚%"""ò)ef‡l=Ý ººš¯ýë\tÑEôèÑcý/nƒ††–-[Æn»íÆôéÓvk÷EE6@ˆˆˆˆÈ§Œ™íü0!üžñãÇsÅW0`@[ª‹oØë¯¿ÎO0³nf¶ÜÌn4³“y _^`f§˜Ùl‚Žé3åfv™m[4æsáu®*wS3;=<ÿÕðûíÂïÿ_ɸ”™ýX¼ ,3³ûº¹—efç™Ù|‚—ÀGfö¿a³¯âq—…÷ef·tDŸIQx‘Mp"ÐÇ̸í¶Û8餓*|är9ž~úi¦M›ÆÇL¡P ™LRUUE&“!N“H$Èf³ÔÖÖ'¢+‘§i«­Ãç5á³äVBÐ¥üF‚•‰íÌì‹ÀÀbà›À{ÀX‚”½ÍlD¸Úðð1ð53ûa™nãg5]Ô¡õ_4êz"œKø7ʬքó»’`[Ùsáó2‚ý×;›ÙAîž ‡×„÷ü#ÐLP¡f9ð~ÙŸ”ˆHÛì°ï¾û²Ûn»Å á©TŠL&³É]¶lÓ§OçÝwßs=ª««Éårñ=¢Ut:­ét @DdƒÂ²?¿}ªäô®ÀxwÿGÑø4A%—&à wŸžú»™-'(/ù-àGî^0³[ :üD¤‚ в„®»“H$¨©©¡ªª*>—ËåH&“­nÑÊçó¼÷Þ{Lž<™>ø€T*¯pÔÔÔP(( ñ6¬ªª*ÌŒl6K:n1'‘ޤ)ÇëÐ “Wß—Iì~§ÌëwŸ§–žp÷åföÁÊItlŽ™= œdf=Ý}•eOo`¾Ñý¦—97­Ì±¨¼Ìfö½2çó”/E\ˆlªuâïÝ\.G>Ÿ'‘HÏçãíS©TŠD"A*•"ŸÏóÊ+¯0mÚ'¿îjjjÈd2¸;555ñk¢–âU‘¨HtûNyç²ES""å4¹û~m»ªÌ±ªð¹µÆ…k ªH»™`»ÕàOÀÁAÐOÝ=ÏúE÷k(s®Ü¢ü‘Ù9¥æï–9Þ® ^""%ˆ·[­\¹’ºººàDIP’Íf) ¬Y³&^­ˆz„üõ¯·\™UUU477“N§) d2jkkill$™L’J¥hnnŽ“D"¡éT @D¤#D=:–žW6”œº‡`»ÔH´kCÛ¯–„ÏXw•b9$Æ\ïî/¶áú""¡AÞÀ¤I“˜?>|0;í´Ý»w_g{@SSk×®%‘H°víZ>øàÜ=îíåxd2™8 ijjŠó>Ì,þ:WÔDˆt8倈HGxž`ëÖ)ab〞À³ÅÊX÷£ÍloààwŸÙ†ûMŸO.sî”2Ç¢D÷ÓÛpm‘ŽÒb ֱǢ1cxùå—ùÉO~ÂÝwßͬY³X½ú“ÅרªÀÚµkùè£03jkkã>ÅÁù#555ñ±d2I.—[§$oñœD:’V@D¤âÜ}iXÙêlà×föwo‹ß'¿,óÒ[‚‚Û ‚”›ÛxËG r=Î1³gÜý®p¥å ‚-]¥î%¨Žõu3[ ü·»7˜ÙÖÀiÀ w´÷Ù-V@ºwïΰaÃ6lMMMÌ›7^x?ü!C†0xð`z÷îMMM îN¡Pˆ“Ó£-Wù|>ÎñhjjŠƒ‹¨ãyCCC‹ ѸhhD:é(ßv ({Ž™}D÷ÑœWÒi=òO‚Š[ÃÂqmËÜ=öyø«™ý† HðŸÀ—BxýW™Ù" A¿A¥,‘Š3³>@=%H$ŸÏ“L&Iê^Ÿ&‚Ò¼ Êt÷Õfv4pA³Âž‰Ý÷¸{k¯)„Ä à£Vz|ÞwvÉk§™ÙžÀWªb}ÜEub/¿ø¼™JüÞø0œã#î^œ£r'ðFkïUD¤­ÌìÐáÇ?±Í6Û$žzê©•Q/X·¯»“Íf13ÈN;íDCCfFSSS‹íXÍÍÍTUUÅÕ¬¢Dô¨V>ŸsAÒé4¹\.îÒÔÔT\ÞWˆt8 "Ò‚»?ØÆq9àî Œq‚íQmÞÊäî//­ç|ck÷ K_WæT«ót÷¬¼¬oNS)SRXDdyÔQG%<ð@êëëëï¼óÎ8™1c½{÷¦W¯^q@P\’·±±wÆ‹ÒR»¹\ŽÚÚZ¨ªª"—˵8–JÿŒ‚”\.ÍOˆt8 """"ç7ÜpÃéÏ<óÌÀææ  xH,]º”ë®»ŽwÞ™8€wܱl%¬â-[ѹâÊWÉd’D"—ßwsA¢UâR¼!%¡K‡S""""ÒIÜ}>°ƒ™íüŸÿüç5jï¾û.Ó¦Mã‰'ž`РAì¹çžôéÓ‡nݺ_'~ŽŽ(Ÿ#Êñ(=¬³ +JDW#BéL @DDDD:™»Ï5³ç1Å[©‰ƒfРAuÔQ¼ÿþû¼ýöÛ¼ôÒKl³Í6ì°ÃlµÕVq“Á¨[zÔÛ#“ÉJ¥â-UQŽG´ +›ÍÆM S©fF6›·d¡D:‘®á@Ù$ôèØ6ÛlCÿþýÉår,[¶Œ PWW îNUUUˆDGqôâjX©TЦ¦&jjjhll$NÇAH(‡HS""""Ò5Ö)Ã[¼}­tôîÝ›­¶ÚŠd2Éš5kâ±ÅÍK» §R©V;£Gù!QéÞépê„."ŸJfVcfÛvõñ¸(‰š¯pDAˆ™ÅÏKsA¢À%›Í÷ép @D¤K™ÙÞÇÑá÷œx≜~úéÔÔÔ0{ölÞxã ¦L™Â´iÓ¢mýãÃG±3» ¸²µnë""Ÿ"-V@JW8† Âî»ïNSSsæÌaòäɸ;p[o½u<.ªl•Édâ€#ÚŽU(H§Óq_âÎèѪH$•Jíaf?w÷ïuÚOA¶8 @D¤K˜ÙvÀ€3 ·ƒî¿ÿþ\}õÕì·ß~ñ¸ýöÛ/}éK455ÅÁÈ믿Îo¼Á¼yóŠÿh×…×if¹ûŠN{C""o½IèQ÷óB¡À AƒØe—]hnn¦P(ÐÐÐM¥RqÀ‘ËåÈçóñjG:&›ÍR(ÊV¾*îЫW/jkkÿÃÌ¿þÏ‹##‘ P""Ê̺ߺì°Ã\qÅœp qÒd9555Œ9’‘#GÆÇ>þøcÞ|óM¦L™Â-·Ü¢E‹öïqi¿‘ö(›„뮆äóyÖ®]K>Ÿo DU²¢à¢ªªŠB¡oÃjhh •JÅM ‹;ŸG«"Q;}H.»ì2êëëOY¹rå)wÜqÇ*3{xø‡»Üy?׃¸$ IDATù¬Rºˆt |x¸èÖ«W/®¼òJžþyN<ñDÌl£¯Û«W/>ø`¾õ­oqá…RSS:ªr³é-ú€@ë‰æÅçŠwËïÖÖÖ’Íf1³8ਭ­¥P(P(âò»ÕÕÕ@°^º «P(0uêTÖ¬YÃÖ[oÍe—]ÖsòäÉî½÷Þ[Î=÷ܽzõzÞÌ.1³ÿã‘Ï*­€ˆH‡3³}ëÉS©§v—^z)}ûöm÷õÝ¿þõ¯¬]»–0{öl€Þí¾°ˆHÇ*›„¾¡ÕÒUâD"oÃ*®vétš|>O6›¥®®Ž†††xV.—k‘?ÒØØÈ7Þ¸*•JÍ:ðÀ÷1b„ 2„úúzN:é$ûêW¿z`¡P8ð7Þ`¿ýö[íÖIB‡ÖÖ”d2WÃ*.µ[œ÷‘Édâ’½MMMÔÕÕÑÔÔWË ½íî†×_ Ü ÜjfÉ™3gŽŽ«¯¯7jÔ¨½FŒÁàÁƒéÕ«'Ÿ|rêôÓO?¼±±ñð)S¦ür=öX4sæÌ{€gÜ=¾ˆ©3K£ ¶[ý @mm-ßüæ7¹ð ã}ÇíÕÔÔÄý÷ßÏš5kH$äóyR©î^¼¢DD>íÚœ„^î\t<—Ë‘L&[$•G£U‘T*¯ŠD+ Q#ÂL&¯€ÐJ#BwÏ“ÃÇ÷ÍlȤI“Æ%“Éqûî»ï‘£FJ 2„­·Þš¡C‡rà 7lŸH$.œ5kÖ…wÞyç3éîÓ+úÓ“Í–©ˆp»ÕƒÀѱ1cÆpíµ×2pàÀŠÝgæÌ™L™2…†††xÛAqU—¢Âú®#"ò)P¶ oñ×mÙ’U¾*N*O§Óär¹Õ°Òét‹äô¨$o"‘ˆz,A;¡»ûà×À¯Í¬îå—_>8v›m¶9ñ ƒÚvذaì¸ãŽÔ××óï|§û£>z D "RáÊÇ=„ÁÇž{îɵ×^˨Q£*v|>Ïã?ÎG}×Å7³øÓ½(É2*%‰V@D¤˜ÙVÿÊîî+Ûq¹v'¡G[¯¢|ŽâÞ©T 3‹ó>š››1³xVmmm¼ «èÛN¤s÷‚ ¾afÃî½÷ÞqétúøQ£F}nõêÕ9àé½®|v)‘J pÉ%—ðío»EgÝöZ²d /¿ü2K—.“.£$Ëèm´ç¹¨”¯éCg£oŠ~çä€ ÁïžÕÀ¸ûí¸ÖF%¡¯o$Ú~Z„$‰8Ç£ªªŠl6K.—‹oF¯-Ú¾ÚîJî>˜ üÌÌê´»/kïuå³C}@D¤Ž:t(\puuu›ÔÓ£œ·Þz‹^x¥K—ÁÝ(¡‚’¾ÑžçB¡ éPî>˜D°R,Ô…µÀ]m¸\«+ Å_¯ï\´õ*ÚJ•Ïç[¬ Gy!Qrz6›WE‰Dü;{àÀÛÝÿý{Oš4©"I{î¾RÁ‡”Ò ˆˆTÂŽŸûÜçèׯ_¼2‘H$¨©©!›Íntyݦ¦&f͚ŴiÓhllÄÝI¥R$“Éxÿr&“‰WC¢mXE€ˆHGù6Á'üåä€sܽ4@)gH¹²»­}%ŸG¿#ËmÃÊd2-òå¢mXŲêëë·J¥R_²'NœH$fæóù™Ç{ìŠ6¼‘6Q""í!N&“ôìÙ3NV%¢mSë FÌŒ?þ˜™3g2cÆŒxluu5¹\ŽB¡@mmmœPY(â$Ë(P ) ]D:ÊJ`6°{Éñfà^wÿg¯Ó®$ôèu­m¹*ÞžZܨ°xVôáMt­d2éáõÓÀ…Ba3câĉˉÄô\.7£±±qî„ âåf‘¥DD*¡å?±+ ¤R©x‹A´E‚@¥hËétš+Vðì³ÏòÑGÅãÓét\­%J¨¬©©‰ÿØ7×*úC®©(3ëü;ð g™!9‚Õ‘¶ÊCû;¡GÍ£jòù|‹cÑ*t´­ŠD=Bã-XfÖÚ‡7[ …щDbt÷îÝ3'NœL7³cÇŽ]µïYDˆˆT„q0ÑZÇÞææfòù<‰D‚T*?V¯^Mß¾}™1cO?ý4¹\.ÞVP(â­Q—âäÉl6—âÎÏID¤½ÂJ_~ l~˜ œÔÀ÷Âæ}mÕâÛMí­ 766¶(Éѱ(àhjjjQE0*Ó L&7¸zìîUÀÀîî'N\T(f§R©éÇsÌ|ôûW6@ˆˆTB‹DÊ—^z‰P__oË*þÙÍfijjbÕªUTUUѯ_?–,Y“O>‹ÊCïUŽJí7Ò*®àR]]]¼¢¢-X"Ònfv$ð `¯ðÐ|à à6 ;pPÌnØÈËÇȦ$¡GåÈKs<Òét\ £tµ¸¹¹9Þ¢U(¨®®æˆû€ >|þF¾$‰…BáЉ'®u÷·óùüôž={¾s衇6mäõd  DD*¡Å>æ¥K—rÝu×±×^{1räH† B=Êþ!mlldõêÕ,^¼¶eE‰æÅGéÖhËUCCUUU˜ÙlV+ "Rfvð3àðÐGÀÏ_º{sxlµ™]ü 8ÓÝ7öƒõ&¡·5(‰š°FG&“Ygµ8Ê¡‹‚(qýöÛoç¹çž`çwžuÒI'ÍÞÈ÷Pª›™í›J¥ö]»vmᡇZàîÓ …ÂŒN8aI;¯-Ÿ @D¤âOñÌŒãŽ;Ž1cư`Á^zé%&NœÈÎ;ḭ̈aÃèß¿?ݺu‹_mÍZ½zu\J·8¡2™LÆÛ°¢?œQu­âFZÑJ‰ÊðŠH{˜Ù®À ¶VÐ@ÐñûZwÿ¸ÌKnRî>enç°núƬ†D…>ŠŽ(ï£øwiñ:ÕÕÕ,^¼˜ßÿþ÷,Z´€¡C‡N¿âŠ+Ý„÷°Î{J$Oær¹eÀÉdrWwœH$ÆMœ8q™™]7vìØæ ^E>Ó€ˆH%¬ó)ž™1`À¶ß~{Ž?þx.\ÈÔ©Syî¹ç8p ƒf«­¶¢ªª*þ#Õ¨Ò’‘å*¸”þ±-êæ«DDÚÌÌúß¾Tü^»‡ ¯£ÕmIa¹Ý_nâm[l_]_àQrÏO.úˆ:¢G¿7£Æ¬¥ÇR©¯¿þ:7Ýt $“Éü˜1cž¾à‚ 6%€*WS"‘¸ó˜cŽ™zHLš4iGwß#‘Hô9æ˜c|ˆÙ4fÖøACÓ¾P¾›oô‡u»í¶cÀ€d³Y/^Ì;ï¼CÏž=ãÞî¯`o¹jmV´Rå‚DM¸Šºù*DD6ÈÌê€o—½ÂÃßu÷7;øöëä€lJz.—‹ƒ‹ÒmX©T*þ &“ÉðÈ#pß}÷áîôèÑcÕ\pÿÁ¼¸½oÄÌ–¦R©[>úèÒ$üÂØ±cçäȈ @DdÓýàòË/¿°oß¾üÏÿüóæÍkQí*úD.}:—ÏçéÛ·/Ûl³ îΚ5kâqѾ䨾¶¶vÀ¢’to¾ù&¿ùÍoèß¿?ÇgÇw¤gÏ oWkŸîe³ÙuÊê!@œ÷Q¼ «xk–V@D¤5f¶?Ae«CÃCËÃï‹+[u¦Ñ‹-bàÀ›”„­voÊú$=ÿüóÜzë­d2êêêÖžþùyä‘ +0÷µ©Têö1cÆ´·j–l€ˆÈ&q÷‚J1?6³¿§FùƒfàÀŒ3†E‹1wî\î»ï>êëëÙe—]Øzë­ã²¼áµâmÑ^å(¸(îâîë$§G¥$£cê„."¥Ìlð#‚-WÅ•­~êî+»pjÓeÀÖßüæ7ùÙÏ~Æ!C€¶mÃ2³¸é`pDE;¹ûî»yì±Ç0`ÀÂË.»ì®­À¼ßËd2·Ž?¾+v²S""•Ðë&¡›Ûn»-ýû÷gäÈ‘|ðÁ,X°€ÿû¿ÿ£wïÞì¹çžTWWÇ ?¡‹“Ê“ÉdÜt°¸‚Kq’e>Ÿƒ”šš5"‘Øz*[]ìîóºpj¸»›ÙåÀõ/¼ð‚rÈ!Œ=š³Ï>›C=´M«!…B!Þžå‚,[¶Œßüæ7Ì;€ƒ:è…K.¹dr2™¬Ä3/®]»öï&LÈox¨Hy @D¤Z”’Œ¯p úôéCŸ>}>|8+V¬ ®®.N’ŒV@š››[QçÞ(ïÃÝ×é’Ïçã×5"ÌvöAD>ÖSÙê?Üý.›Xî~ƒ™Í®v÷QÏ>û,Ï>û,{íµçœsGuTéøu¾ f³YfΜÉõ×_ϪU«¨®®n:ãŒ3:ñÄçV`ª¹D"qß1Çór®%[8 "R mîæUj©««[§ùVôG4Ú†•Ëåâ¨ãyTM«ºº:^)âÀ¥( =þBD¶ ae«/äu O!Xñx²«æµ!îþð˜™}¸÷Ö[oÙE]ÄÖ[oÍ©§žÊ¿øEzõ꟣ܻL&äI“¸÷Þ{) ôë×ïƒK/½ôþ]wݵ\óÄbf+“ÉämG}t%rGD€ˆHE´@ øÃøÏþ“ÆÆFFÕb«UiîGqRÜ`°ªª ø$¸(®kŸÉdâUø$9½( ]ˆÈ$¬lõ_À¿„‡×t÷ÍbK¦»?çØ±cÚ{-‘ˆ©„²[° ÄÃ?Ì}÷ÝÇÞ{ïÍÈ‘#2dfV¶ñV"‘ˆ;÷ÖÕÕÅEq]û(‰¶fWͪ©©Ñ ˆÈÆÌö#Xñ8,<U¶ú•»W¢ÇE§s÷·€ÓÍìûÀ×ó2™Lÿx€x€m·Ý–1cÆ0`ÀæÏŸÏ£>Ê’%KH§Ó™SO=õÑÓN;mF%¦afOŒ;ö1TÔC*LˆˆTÂ:[°¢jXÿöoÿF>ŸgáÂ…<óÌ3<òÈ#ì´ÓNìµ×^ôíÛ·EÀm%ˆ*¸DÛ°ŠWEÒéô:Ç¢ò»Q^Hhˆ™uw÷5ýÑŽgf;ÿ œ$€ ð{àÊ.®lU1îþ>p…™]œ | 8xñâʼn›o¾¹ÅØ^½z­¸øâ‹ï>|øGí½¯™5 …;ÇW‰@Fd @D¤‚üŽÖºŸ÷ë×/}éKäóy-ZÄ«¯¾Ê^{íEÏž=ã×$“Éø5Å £’¼ÅAH"‘(» +ZéÝ»÷kÖ¬yÝÌöì¢úþ"ÒÌl+‚<‰‹€‚@î&è`þnWέ£„¿ÃnnëÛ·ïöÛm·Ýw—-[vh¡P¨7³ªƒ:hê¾ð…™õõõ•èD¾¸ªªêÖ#Ž8¢ÝŒHk€ˆH%€u¶TE_—v?ïÓ§Ç{,…B?þ8—ËåH¥Rñ*GTj7• ~UwAjÝwAjàôìÙ“Ñ£G™7oÞGfö7ààw_Õ‰?©3«¾\Ô‡‡¾çî¯wÕ¼:Û‡~¸øNÑ!{ä‘Gzçr¹þfÖ¯P(ôs÷þfÖÏÌj6òò¯õïßÿž#F¨Š t( "R  ¸Çzë×çóyÖ¬YoÙŠž‹W0ŠËï677cf-V@òùü:]ÐÍ,~½™qæ™gÒ³gÏnµµµ_]¼xñW~øá|÷îÝŸY»ví#Àýî®í"Ÿr­T¶šF°âñPWÍëSÄÇŒ³œ ÷¥Åﴻᄏ¶Gý …BÿD"ÑßÝû»{ g‹ ¸ÜýáãŽ;îŸ7mÙ’)‘Jh‘„¾¡ÆY¥ç¢R’Ùl6.òù|¼ÚQ.à(í‹ú€477síµ×rØa‡±Ë.»Ð³gO¾ð…/$Ï:ë¬Ã{íµ×~º÷Þ{¿ÿÖ[o=<<ª­Z"Ÿ.ae«ŸÃÃC rw5ÂÛ€ &4óÂGìÑGíÖÐаM*•êcfÝòùüÛ'œpÂû]1GÙ2)‘J([†·Ü×ë;Ź Ñ6«¨ßG´ +Ê-‰‚¨Lo4‡eË–/^üƒW^ye1pÜn»ívÜ!‡R»Ûn»Ñ¯_?vß}w~õ«_mWUUuÞûï¿ÞC=”M§ÓÏär¹€{Ýý½Šÿ”D¤MÌlðSàØðÐ àÿ±W¶ú49úè£×s‡H§S""•°ÞNèÑ×­‹^­€D9ét:^õÈd‚ÜÊššš¸a.—‹» GÇ¢$—ËÝìîÿ/¼Å­fVóöÛoެ¯¯?eôèÑCöÝw_ D¯^½8í´ÓÒçwÞG¼ð ¿2dÈœ¹sçÞC°Çüiwמh‘ffËhYÙêfà2w_Ö…S‘ R""•ÐæNè­sw’Éd¼êmꪪŠ{€äóyš››ã ¤¸ün„D[°€M³ÂOMß7³Ý|ðÁcÍì¸#F|~äÈ‘ÉÝvÛ¾}û2|øpn¾ùæ!©Tê’Y³f]òàƒ®5³¿s÷¿Uü§'²…+SÙÊ *[}ßÝçvåÜD¤ò€ˆH%”Ý‚ÕÖÕh¤P(ÄG*•Š’âT*ESSS\~7êÒÔÔDMMMñÖÛˆÐÝßÞ~af=^yå•£€±È!‡ô:t(Ûo¿=={öäüóÏïöï|ç_Ÿyæ™5³‘îþR»b"‚™Õß¾ô?\¼%U¶ÙÒ(‘JhWz$‘HÄG6›;žGyÍÍÍ$ jjjâ.èÙl6~Mcc#‰D"ªÆÕæNèî¾øð73;ï/ùËp`\:>þàƒ>`ÿý÷·]wÝ•+V¤7áç#"EÂÊV§?†‡_'¨lõh—MLD:…©„ &¡¯/() -º GÁEñ6¬â¦„¹\®Õ­YE¥€Û€ó`r¯…k̬ϓO>9,žß”ëŠH@•­DDˆˆTB«Ièë ˜ñòË//¼òÊ++²B""å™Yà{À·€j‚ß÷äy¼Û•s‘®¥DD*!Ÿ›’„îîqo\.—Õ‚â-W©T 3‹ó>¢mXQpJ¥Zî¾°pøþûïßðÐCÍ6³Y¹\nú 'œ°ºC~*"[ 3«#¨lu)Ð+<ü8ð=U¶P""•Ñî$tºœ§ÓiܽEå«(àÈd2-Žâ•’¨3zs@êÌlo`ït:}Òĉßf455Í8ùä“n)‘¶3³p6p°mxøe‚§ºj^"òé£DD*¡å¶æ …¸ãy"‘hÑ$“É`fñ–«â YÅAÊ|¯€ôìÙ³±-w÷0PSSsÔC=´x'ŸÏOO§Óo;¶¹½?‘Ϻ°²Õ/€½ÂCó+€Û¼4)LD¶x @Ddf6 XV€j‹u:¡oÌ6¬¨{y´’ËåÊæ‚D‰æÅÛ°r¹ÕÕÕÌ;—›nº €=z¬?~ü;›øÞ»û¦R©}Ý=7iÒ¤wóùü¬l6;ý¤“NZº)×ù¬2³ *[}><ôA‰Ý_º»‚w)Kˆˆ”³;pŠ™­ft Ÿ¿žý­–á-÷ué÷ÑëŠW3 …B¼ÒÜÜwA/Þ†{þùç¹ýöÛÉf³¤ÓéÌ9çœ3±¾¾>ÓÞ‚»7¹ûÀD"±Kuuõ¸‡zhi*•šÑØØ8süøñsÑV-ÙB™ÙîMO!¨lÕü¸ÖÝ?îʹ‰È§Ÿ)ç]`7 '°?0ÀÌæÓYa÷ðˆCËøÄFtB/Îûˆ‚‹âÎèQ¢zsss¼ëÎ;ïdòäÉÔ××/ÿîw¿û}÷Ý÷à ü ææóùÛ_{íµµ#GŽÜ!—Ë M&“{äóùCÒéô0‚O}E¶(f¶p%A®GŠ áçMÀU+ç&"› "RÎ ~C€AÀñf6ÙÝŸ·@`ã’УGÔÛ# 8Òé4Ùl–T*Õ"ïcÙ²eüþ÷¿gÞ¼y :túW\ñh=²í|ïžL&Ÿ3fÌ$ p 'Ì 'Mš´µ™õlç=D6+áÖÄ €ÿz„‡¾íîS»lb"²YR""-˜Yš`å£À'G|:|ÌþYt|“:¡'¡GâèšUUUd2’É$fÆôéÓ¹ñÆ£Îçù1cÆ<}ÁLiï{w÷L>Ÿ¿kܸqo¶6fìØ±Ë€eí½—Èæ ü}pÁv«þáá*[=Óe‘Íš‰>ÝÜØ•`…£µß Y‚àãž’|ë 'œP‰k‰lÖ,¨ q p-ÁÊ'ÀL‚ÊV÷¨²•ˆ´‡‘-TX³°7AÒy²èô ` A-ÿè÷D˜ü£Ì>š8O#ÒÖÕâ•“ÒÞfF:fõêÕÜtÓM¼úê« 2dö•W^9±OŸ>•¨´3}íÚµ0aB›J÷Š|–™Ù9N#ÂCïW7¹{®Ë&&"Ÿ @D¶0f6ø`P[tj!A€1ÛÝ?4³m€sÃs9àMàV>ùœ°dÉ^ýuöÚk¯øÄÆnÊJí—ß7o¿ýíoYºt)‰D¢pðÁ¿ðÝï~÷¹d2Ù®OaͬàîOŒ7îqTÑJ¶pf6” ‰à„ðÐà·À5%E'DDÚEˆÈÀÌ’«Ÿ¶/:µŠ °x­LÏ%[« xÑÝ[Ï-ÞÛž|òÉœy晜uÖYôíÛ7°¡’¼…BT*ø•”Édâ矞›o¾™L&C]]Ýšo|ã~øáïmÔ ¼wÿßqãÆmR¿‘Ï 3\|`%4 ü¸Âݵ%QD*δSä³ËÌj ¶QŒä“Ê5‚Þoï®o/·™}XèîO·á^ÿüƒ ‡„t:ÍÑG͹çžË°aÃâ V…B!þºøû·ß~›B¡@:ÆÝÉårÜ{ï½Lœ8€,¸ì²Ë8pàÚvüH"‹Ö®]{Û„ –WàZ"›%3ë \\Ô¬Þ\êîsºrn"òÙ¦Dä3(üÅÀ>@Uxx5ð"0ÅÝÛ”ë`f½6¦©˜™Ugßv1zôhN?ýtF…»·< …™L†Ù³gÇ¥v—/_Îï~÷;fÏž™ùAôâÅ_<¹½[®ÜýÕE‹Ý{Þyçµ·\¯ÈfÉ̪€oôóè~‚ ²U»«É‰ˆlˆ‘ϰ?Å!GTBw ððFg%šY8™àÓÕý¢ãä”SNaüøñtïÞB¡@¡P ¹¹™9s‚\ß~ûm®¿þz>þøcª««Ï:묇Ž?þøw+0­\"‘˜xÌ1ÇL®ÀµD6;á¿Ë/$˜ïžNÐDðî.›˜ˆlq€ˆ|˜Y7`4A×ò(·k6ðœ»Ïí²‰fv8ðm`aPTWWÇá‡Θ1cØo¿ýXµjóçÏçñÇçž{î¡P(пÿÅ—^zéý»ì²ËªöÎÁÝ?®®®¾íÈ#\ÚÎ¿Ë IDATÐÞk‰lŽÌìHàçÀððÐBàÇÀŸJJj‹ˆt8 "›±p+ÅÁGMxx!ð„»Ï«à}¶w÷Eí¼Æ‚NÊg½¢ã}ûöeçwæ½÷Þã½÷‚ÜòýöÛïÕüàÿ¬®®n÷Œ‰ÄìD"qûÑG]‰Ü‘ÍŠ™~ Züø­»7uÕ¼Dd˦Dd3n¥ØŸ`»U]xø}‚À£¢É£fv p)p”»¿\ëuÆwëÖ팦¦¦Cóù|\¯{÷î«ÇŽ;ùÌ3ÏœÚÞû^(žž2eÊÃW^ye¡×Ùl˜ÙîÝËO!¨d—~\éî+»rn"" @D63f6ˆ`;SÿðЇÀSÀôJw'6³k€„ß~ÓÝSÉëŸxâ‰ýgÏž}l÷îÝ·éÓ§O·óÎ;o~UUU žà?M›ª¸kܸqoUf¦"›3Û ¹ü ‚’ºyà‚<…]97‘ˆ‘ÍD˜`~AA*×¼æîÿ„ßÌ~ ü'AiÎï¸û/+}ÖLŸ>½jæÌ™ýªªªú¹{ÿD"Ñ/‘Hô¶r÷Äú^kfK“Éä­G}ôÒNš®H—3³­€‹ ù¤ÁèãÀÿgïÎã«*Ͻÿ®=$!„ a’QEÄ0YD¡ E«V­³u¢h©õ´öépÚß©í¯ç9l{NOÛÓöØRDœëÐ:[§:UQ« $@d 3 dΞÖýü±vBB¦dïàû~½vcÖ^k¯{èksß×}ý«snYÆ&"Ò ‘N.ÙDð `:–¯8ç:¼®ÁÌ ø5ðÍä½¾áœû}GßçH¼ù曡H$Ò8Áó¼üx<žN0³>ø¿í-2³'/¼ðÂH†‡*’É (n¾‡?sð~/·360‘PéÄ’Š/ú%m^pÎmOÑý øüߢ:üeWw¥â^ÌæÍ›Ro9^˜Y¸ø  y¸ø±¶Ô‘ÎND¤J~¸˜ßLÐ𛾠,ëè:&÷4àwø¿Mõ€9ι{Sq/92Mzyü‘<\šü~~*–cŠˆt´ÐÁO‘tJ‘^ ôMZ<¨ÝËðžü/ðUü¢Õ/9çîOÕýDäð%{yü~£Q€]À¯€ß8碘ˆÈaRé$’³çg³oÖãyçÜêß7Ìf㇛s¦òž"rèÌìLü^ç$íÁïfþ»TþbBD$U@D:äÖº—ã‘:`1ðwç\J‹©“ác0 ?||Ñ9÷p*ï)"‡ÆÌNůñ¸:y¨ø=ðŸÎ¹=™—ˆH{)€ˆdPr=÷§“°xÖ9·> ÷×à7)û‚sî©TßWDÌÌF?®Ãÿÿ…p~ù¶LŽMD¤#(€ˆdˆ™õÄ/&œ<´x1k¹“˽®ÀoÚwµsî¹TßWDÚffƒ€âïnÆŸ }ø¡snm&Ç&"Ò‘@D2 ¹´âü†aüZ´tíN†Çð—|ÕW8ç^LǽE¤%3;¸¸ ÈIþ~ðXš±‰ˆ¤ˆˆH™Yp0.yhð¤snošîß4|Ô—9ç^IǽE¤¹ä,èw€oyÉÃo?pν›©q‰ˆ¤šˆHš$»u_ œ€ßgã]à ç\"M÷à‡†eW "iÖ¤{ù¿½’‡?~ª¥"ržO×ýEŽwÉ¥×áaÉÃ¥øÝËïI×,¨ˆHg¡"’"ÉeWÃñw³yxÙ9ç¥q áã:üðq¥Â‡Hz$q%p'0*yx3ðS`s.ž©±‰ˆd’ˆH ˜ÙüæaÝðwšzÚ9÷QšÇÐPóÑ>4ó!’&f6ø%û6œØ ü7ð[ç\}Æ&"Ò (€ˆt03 |ÿß×nà1çÜ®4¡i“ÁþV»/¤s "Ç#3»ø1pFòP9~ù½s®&céD@D:ˆ™0¿Þ`ðL: î7Ž pû:œ_­ð!’Zf6ø pnòP ð¿À/ҵͶˆÈÑBD¤$w·¹8¿Þãàµtïj“œùx»ß~͇v»I3û ð#öýâ¡ø#ðŸéžù9Z(€ˆ´“™uǯ³(âÀ³Î¹eGCÍǵì«ùPøI3›Ž<¦%ÕsñƒÇŽŒ LDä( "ÒÉbók®@%ð¨snkÆ ‚s‘”2³sðƒÇ9ÉCõÀŸðƒÇ¶Œ LDä(¢"r„Ìl4þ›!`;ðˆs®"ã0à.`nR7e‘Žefgw'Eñk­~ìœÛ’©q‰ˆ@DŽ€™MÎÇo.¸xÊ9ËÀ8 ø=pûÂÇãé‡È±*ùoýû´ ?qÎ}’©q‰ˆÍ@DC+;]½¼”îbó&~| ð€ÙιG24‘cŠ™ ü€}Á#< ü‡sn}Æ&"r P9Dɦ.NÃßéêι738ž;ÿ/9–¯:çÊÔXDŽf6øÿi<~äœ[—±‰ˆC@D™uÁ/6Š¿ÔéiçÜò Žç?ð—…8àkι?ej,"Ç3;ÆãÂä¡p?p§s®4Sã9)€ˆ„™unNÀßñæ1ç܆ ŽçÛÀÿM~ûoι?fj,"G»dÁ£åŒÇsk360‘c˜ˆÈ˜Y/üÝ¥záo³ûp&÷ø7³o¿J~û}çÜ/35‘£™™Í~ LIŠá—¯ÉØÀDDŽ–¹ÚY‘ÎÍÌúáÏ|tö:çÊ38ž9À<ü·þÝ9÷“LEäh”ÜDâbà‡ÀÉÃü¥VÚÕJD$M@DZaf€\`ð€s®*ƒã¹˜>~æœûA¦Æ"r´1³ ~ ×÷1ÉÃUÀ_«s¹ˆHz)€È1'ù[ÎIYYY#‰„—H$>VjŸ3ŠßQ<Ø‚¿ìª6Uã=„ñ\ <_9羓©±ˆMÌ,Œÿ‹„;€QÉÃ{ß¿Í䌦ˆÈñLDŽ)ffÁ`ðŠp8|ê¤I“‚ñxÜyñx¼.?z°%fv2p5~}Ô:ü‚óh:ÆÞÆxΞÃC÷·d°çˆÈQÁ̲€/à/µ™<¼¸ øçÜÞLMDD@ä’ —…ÃáÓn»í¶`~~>ñxœ^xÁ{ÿý÷ñ<ïIç\Iן \‰?Ó°ø‹s.ž¶7Ðr rLH†KÂápá­·Þ,((hqÎûï¿Ï³Ï>ë<Ï{Ê9·l¿ëO®@1ðŒsÎKËà[af“€×ð àŸ®<Ô%d"Ç3ë |-ùè—<¼ø/`s®>Sc‘–@䨗 Ÿ ƒão½õÖàÀÛ<÷Ã?äÉ'Ÿô<Ï{Ö9W”¼¾iøX <›ÉeNfvð¼\¤P"-%ëµ¾| ¦`ð[`®s.’™‘‰ˆÈ(€ÈQ->. ƒçÌ™ öè£âyÞF2>úÇë€ó>DÀÌø£ió@øðcçÜ¢LMDDŽŒf@䨇?œ}Ë-·† Öì¹x<Ά ˆF£Œ9’ììì6_gùòå<úè£Îó¼—œsï§xØ­2³nÀëÀ$`30Í9·1cé,Ì,¿¶ã[À‰ÉÃÕø 9ãœÛ”©±‰ˆHûhDŽ:ápxm„ŠŠ zè!>ùÄo÷Ñ»wofÍšEÖ¼û;v,€=ú裘Y¤¡0=]’ý žÄ;ó>äxff'_¾ ôNÞß<ðι=™›ˆˆt Í€ÈQÅÌÎ …BŸž={v`ĈÍžÛ³góæÍcäÈ‘\tÑEìÝ»—?ÿùϾñoÚ|ÝdazÂó¼ùιm©~и´äÏÀµ@0Ý9÷a:î-ÒÙ˜Ù)À7/9ÉÃk€ÿÐNp""ÇŽ¶?‘‰t2ápøÓ¡PèÓ³fÍj3|œrÊ)\~ùåtéÒ…‚‚.ºè"vîÜÉž=þ¥éĉ),,´p8|^*ßÃ~~…>¢ÀÕ r<2³©fö°ø ~øX‚DF;çæ)|ˆˆ[@䨇§zžwî¬Y³£Fjñ|yy9ÕÕÕTVV’ÜÙ ðëA²²²èÖ­ÛAï1mÚ´@,–즜RföüßözÀ,çÜË©¾§Hgaf]Íì_ÌlþÎox8Ç97Ñ9÷€s.‘ÑŠˆHJ(€H§‡ÏòêWsµ)z?S€Gñ?€ÍsÎý{*î#²?3kf?ËÎÎ^•••õ¡™]nfvð+ÛuÏ,3»ÚÌÞ7áÿݸ8Ù9÷Ÿ ""Çí‚%’™M—\sÍ5VXXØì¹ššæÍ›Gmm-ßýîw[]^µqãF,XÀ Aƒøâ¿xÀ%X7ndþüùðv,{££ß ø·€žÀSøEçZß.)cfÀëÂáðͱXlä Aƒ"ãÆË®ªªrï¼óNÂó¼_'‰KÁ}óñ‹ÉÿèŸ<\<üÖ9·¢£ï)""GétÌl| ¸´­ð1þ|rrrøä“O8餓¸îºë…Z®&ܸq#÷Ýw h3„4 ïÇb±”‚›Ù@àŸÀ àÀÚÕGR!ùáÿšp8<;‹ïׯ_d„ 9………ôêÕ«ñ¼ÒÒRî¾ûî„çy×9çþÒA÷>øð ¡ûç'À]ÀÝι²Ž¸ˆˆý@¤S1³q@àóW]u•?¾Ùs á£gÏžÜpà lذ‡zˆáÇsà 7´B6oÞÌ‚ ¸øâ‹™8qb³ç’³$žçyÄb±—Rô~ºáÏ|ŒVSµäD:’™õ> …®O$3»ví?ýôÓ³'NœÈ€Ú¼î•W^aáÂ…ëc±Ø(çœ×找wWàzü¦ÿÀÞ~ <霋Ék‹ˆÈ±KD: 3;-\yÙe—ÙgœÑ칺º:æÏŸO^^7ÝtScØX·n<ðC‡å†nhu–£ªªªÅ6¼›7ofþüù^"‘XÇ_LÑû ÏÛ€)êr.ÁÌr€‹B¡Ð=Ï»0;;Û7.rss¹é¦›Z„Œ†2dÈVŸßß¶mÛ˜;wn"‘H,NUø0³»€¯µÀ çÜû©º—ûÌ,œ ¿Ì 9cÆŒ±ÓO?=tÒI' û5~øáøªU«þǯ?„ûg—·ŸÁßÉ ünå÷÷8çvö DD丣"gf§«Z ‘H„ ¸ùæ›Û  õýû÷?àyÛ¶mcÞ¼y‰X,¶,‘H<ëRôÀÌî~$€+sϤâ>rä’è'€Àv`9ðÖ‘.IJ3Ì ƒsœs=FŽ™(,,Ì:í´Ó©¿Í¬\¹’‡~¸Îó¼¾míþff#9À-@¿äáð"þ2«×RõïHDDŽM ’Qf6:\}ñŦL™Ò칆ð±uëV¾ýío7+¢mMÓ¢ó›o¾¹EMH“ð±<‘H<“Âðq ðþ6×ÿÇ9÷ûTÜGŽ\²/ųøÁc‹€Ëœs[Ó;ª}ÌìTàš`08Ûó¼!ƒ ŠMš4)ëôÓO'''ç ×———³zõjvìØAÏž=™2e ÙÙÙ-ÎK$üä'?‰F"‘›œs7¹˜Žß»ãsì›íØ‚¿›Õ]ιÍí§""rúè#Î;ï¼fý?vìØÁܹsÓ>¦r€_9羓ŠûHû˜Ù…Àïßáoð1þ.ewWáÏ‚œ“æ1 ®ÈÊÊúb4ß§OŸègœ‘5a„5LmY´h‹/æ“O>áÄO¤G¬\¹’>}úpûí··Úç¯ý«W\\üR,ûœ™ Àï×ñU`Hòx¿[ùSιxG¼_9~)€HF˜ÙÈ@ pýùçŸoçœsN³ŠÙh4Êý÷ßO<ç–[n¡ººšyóæ‘““Ü9sùÃXƒ]»v1wîÜD$)I$O§0|ŒÄßn·ðpMgZÊ#û$woªÛÿÏÇÌÂÀJ`$04Õ›˜Yoàâp8üåX,vvïÞ½ëÆŸ;nÜ8úöí{ÐëëëëY±b«V­âºë®ãÉ'ŸdõêÕ|ó›ß$//€õë×s÷ÝwsÝu×qúé§·xuëÖqÏ=÷xιWñk;ŠI¶á×vÜíœÛÔAoYDD„–û–ФX2|\7sæÌáüÙ €[n¹…ììl²³³¹õÖ[™?>óçÏ?¬Ò$|¬NñÌGü%=}ðCÈM —s®¦ã13+ ý€ fÖ¸8 }ÉÌfæææÆ sÆŽËСCsv}<ç£>¢¨¨ˆÕ«WÓ£GÆG<§°°%K–PUUÕ@†NNNÛ¶mk5€ >œÜÜÜ@MMÍù€^þ<£-tED$@$­ÌlD2|¦OŸÞbæãå—_fæÌ™|ùË_nv]Ÿ>}˜3góçÏgÞ¼yÌ™3‡=zp eeeÌ›7/‰D>N$MU H®—ÿ30Ø \KŽ$µ’…é…@ XÛ¯› œ ¿® ‡ÃÑ£G'Nœ1bDð`ÛæzžÇÚµk)..fÅŠD£QrssùÊW¾Â AƒÏ9r$yyyQPPÀöíÛ‰D"ôëׯÕ×63ÆÇ|°9‹ÍpÎuØûiˆ´[²Ù^IK›¾Ílx ¸~ÆŒ-Âøý:–-[Fii)·ÜrK‹z>}ú´˜ i+„”••1wîÜD]]ÝšD"ñ—ÏFü¸¨Ãßñj{ ï%©õ=`ðëö6Œlºmn0¼ È=z4&L8¤msslÚ´‰ââb–/_N"‘`̘1ÜtÓMÔÔÔðÈ#Ð¥K—fׯŽ˲eË(,,¤¨¨ˆ>ø€±cÇ2nܸ6ïUXXÈ;ï¼3ÿï°ˆˆHJ©DŽˆ™cñwjX6òŠsîÝ6Îf{î¹ÁóÎ;¯Í_÷îÚµ«±çG[EçÌ›7€Ûn»­År¬ŠŠ þð‡?ÄkjjÖ%‰Çs‰#z“‡ÀÌnÀ_ºr½sîÑTÝKRË̦¯¥À¸¶–iÂ뜮7³€'t’7a„ðÉ'ŸL8>èõÛ·o§¸¸˜ââbª««=z4………œtÒI;»Åb1î¼óN¦M›Æg>ó™f×oܸ‘¹sç‡9ùä“™2e Ç?è}ñ‹_ÔWTT|×9÷¿Gò¾EDD•f@äH„¿KÎvüß'¶ubCø8묳>úõë×b©Õþ£GÜzë­¼ûî»-J2|$êêê6&g>R>&⯕ø©ÂÇÑËÌΞʀ‹$|˜Yßp8ü²™:thl„ YcÆŒ!''ç #‘ï¾û.ÅÅÅìÞ½›^½zQQQÁ÷¾÷½VëÂá0cÆŒaÙ²e-È!CèÙ³''Ÿ|2—]vÙ!ÿ”SNÉ^¼xñ¹€ˆˆˆ¤TË=EÍ‹À/œs €¢¶N2³@`ÖÔ©SƒŸûÜçš…x}NûÞ÷¾g_þò—³&NœxОEEE,\¸@ @ii)gžy&wÜq·Ür Î9Ö­[׿µ§Ÿ~:;wîdëÖæíJj:JJJH$=8ЂÁàÄC¾@DDä)€ÈqÎUJ]E8¾|Ò¤IÁ /¼°ÅÌÇSO=Åý÷ßß,„4lÁ pûí·F™7o^«!¤©ŠŠ æÎ¯««+F£¦xæ#?tËÐŽWG-3;ÙÀ…ι•íx­›§OŸžÕ½{÷C¾fçμñÆn¾ùfÎ<óLºvíJ¯^½7pà@fÏžÍöíÛ¹ï¾ûxøá‡©­­eΜ9»û4Ô{¼õÖ[-^£ªªŠ?ýéOñšššOR½ì ÀÌ®¾‚ßúFç\i*ï'©‘lù&~¯;gf÷{ô<œ× ±úúÖ7[¾|9¯¼òJ‹ãùùùôï߿ՠpúé§ãœ£¤¤¤Í{RQQAiii‹ç®½öZ.¹ä’ƒŽ»²²’7Þxƒ¢¢"‹Çã¿:è"""í¤")Ç—¼óÎ;qÏk}…ÒàÁƒ™3g;wîdíÚµÜxã-¶íÑ£·ÝvŸûÜçšo•••[c±ØC©nšff§w'¿ý‘sîåTÞORj*ßõûÀâVŸ>ÔsÎŃÁà²M›Zo^XXÈÎ;Ù¶m[³ãñxœ‚‚V®\Ù¢*//#FpãÄO¤gÏž­žSPPÐâßRƒÚÚZ-ZÄܹs#¿øÅ/Üo¼QꜻÁ9·ð`ïUDD¤½´ –¤Úeee“^zé¥ÀE]Ôjà8p sæÌaÁ‚<ôÐCÍf@ì¿PMM óæÍKTVVnOSøÈº¯w¦ò~’rïâÏdÈ¡¯_b±ØóË—/?mÆŒ-*ÏGŽI×®])**"??Ÿõë×STTÄŠ+‡ÃÄb1V­ZEaaa³ë yâ‰'¨¨¨hµç™qÕUWѳçÁ'kb±+W®déÒ¥±5kÖÀÏópÎ=F?<œ÷*""Òê"íffãÏÓFä6¼³Ï?ÿ|;çœsÚ܆wÛ¶m,X°€îÝ»·BÔÔÔð§?ý)¾wïÞ±Xì~ç\Ë­´:˜™= \‹ßé|‚s®õuerÜJ.ëZó­o}‹N8¡ÅóÏ<ó Ë–-# ‹Å3f ãÆcøðáÌ›7ÜÜ\fÍšÕìšúúzî¼óNÎ?ÿ|¦M›vØcò<õë׳dÉ’DII‰óÿùÏ·9ØÔŽ;X¾|¹[´hQ¤ªª*+ .ŒÇã÷O9ç¼µˆˆH)€HÚ$Cȃo½fs3 IDATõÖžçµÚürà 74;‰D¸ûî»eeeå±Xì^ç\Ëé‘–ì÷ñ <ãœûmªï)G½G*++ÿkË–- 8°ÙfFaa!‹/æ’K.iÖD3//‘#G²lÙ²$//¯Í›íÝ»—ââb-Z)//Ï …BKb±ØƒÀ#±Xlg‡¾3‘¢"GÄÌ&ûïñy¾™Ÿüïלsoïs®ÔÌ\¸páM@›!¤©†ð±sçδ…¤Ÿc¼`Y  …6 Ý?€€¿ ëÿøk׮夓NjöÜ%—\B×®]zƒÚÚZJJJX¼xqdóæÍÙÁ`p]"‘xx ®ï¨7"""’* r¤¶Ú²ó“¶žpÎmL†=Ï ï¿½nSÑh”{ï½7±sçÎ=ÉðÑzW¶ff3ÿ8àçÜŽtÜWŽ>f6 ¸¸8+‹Ù’%K¸ð ›Ír€_çÔÐ pÿÒ·oß6ïQ__ÏÊ•+)..Ž®Y³& wÆãñûûâñøGþ¦DDDRHDŽˆsn °¥×o4³eï¾ûîD ÕkÑh” $¶nÝZ‘æðѸ“†?8çþ–ŽûÊÑÁÌÀ$üÀÏãÏ’5HïÖÕÕ]ZZ>|x‹ë/»ì².«jÇY³f ÅÅÅÑ’’’€™Uzž÷gçÜcñxü§- EDä(¥mx%#Ìlp‰Ñ£GsõÕW³³ýÚÝ&á£2‹Ý㜫NãØ¶Ü]¿ånZ‚t^f– œ\œ|ôoòt xxxÚ9·+¿8~üøó¯¸âŠÃÚiÐó<6mÚÄ’%KEEEÎó¼(ðL"‘xm›+""ÇI;3ë_S‘‹ßqú½p8|]0ì5a„@÷îÝmùòå‰;wV%ÃGÚvð1³Kgð?Tžåœ[œ®{KçbfñÃÆ%À  éVT•ÀËÀsÀóι=û]{MVVÖCwÜqG8'§E_Âfœslܸ‘¢¢"¯¸¸8F1³ç‰ÄƒÀKéØíMDD$@$­Ì,Ü À_Âu¯s.ž<>:++«0dÇb±]‰Dâ5ç\MÇ– ”ÀŸ;羟®{Kç`fcØ:Κn’P ¼<ßt³Í``fÁp8¼nÚ´i'žwÞy­ž³mÛ6ŠŠŠXºti´ºº: ߌÇã÷áÏ¢¤mÆODD$Ý@$­ÌìóÀx ˜çœÛ›á!52³ÿ¾ lNMgø‘ÌHnµ<?p\ jò´,ÅÏK§îÂÌ.6³g®¹æšÀ¸qã(++£¸¸˜¥K—FvïÞ‡?ŒÅb €¿¨Á¥ˆˆ/@$mÌlþo—=àaçܺ ©‘™,ÂÀ¥Î¹ç2<$I3ë\ˆÿwñ [“§kñë9žžsÎmkç½¾þ·   žH$ÜöíÛ»„ÃáÕÉÐñ¨snS{^_DDäh¤"iafƒ€Ùø;¯½âœ{7³#ÚÇÌ x8xÂ9wU†‡$(¹¼ï,à³øc<-—V5Ìrü££k.Ìl(0 ˆà‡š•ùú"""GI93ëŠ_tÞøx¬3m!jfתð—^µÙÃDŽfv"ûÇgðÿî5ð€ØW@¾,ý#9~©ˆ¤T²gÂøwOu²ð~”üö G'3ë|?p\œ²ß);ñ È_ŸەÞŠˆˆHIµ™À Š?óÑÙ¶ ŒÂG¿ÏìPäp˜Ùpü¿_3iYË‘Š€Wñ—W½ëœóÒ>HiADRÆÌN¦x¦³ýÖÙ̲€†­vïLg¿9|É¥|Sðw¬ººß);ðg9ž^Ý¿7‡ˆˆˆt ’fÖ¸¿Ø÷çÜŠ ©5·â÷üø˜›á±È~’Ë÷Æá×r|¿<Üä”züÍ^^î¤ÇDDDd? ÒáÌ, \ d€×2;¢–’;_}=ùíÏœsõ™øÌlû–UÍúîwÊÇøÈ_ÞtÎÕ¦w„"""Ò^ ’ ù@5ðd']{ÿià$ x Ãc9n™Yoü Ñ:FìwJðûf9Ö§w„"""ÒÑ@¤C%úMÀ¯ûxª×U|)ùõu›üú\FGqŒ0³ü¥TÓ“‘ûR¼É¾À±2ã‘ÎEDÚÍÌÆñë>žìÄu ¦$¿¾žÑQ¥Ì¬ûǹÀèýN‰ÿdß,Çιx‡("""˜ˆ´Kr£K“ßvÚºf– O~»4“c9Z$ÿŒ?8fcðû»4h(#ùxË9WîqŠˆˆÈÑADŽX²î£¡ßG)»î£Á@üÏ{œså™LgdfÝÙ8¦ãïZhrŠ,Ã_Võ:~àPḈˆˆi ðë>ªéüu z%¿îÉè(:3ëœÍ¾%Uà~§­ÀŸÝx¦kw‡("""Ç9"f6˜Dçï÷±¿ºä×.E™Ù `*pVòëé´ «ñÃÆøÇw¤sŒ"""rìR‘Ö\¢ÓÐïãÎ^÷±ŸO’_óÍ,ïX¯U0³ 0?hL¦ƒ[9u~àxxÝ9·5MC‘㌈33à2ü>[ñC~ÔpΕ™Y)0¿ úÙŒ¨ƒ%‹ì'³o†c -ÿÅñ ðßï*pˆˆˆHº(€Èá: ©(þ–»‰ çHüø.ð-ŽòbfÀOÑ|9Õþÿ®+€÷Ø8>pÎÕ¤sœ"""" Ì9—é1ÈQ"Ùpn~½À3ι£rÛd ÄjüYœo8ç~—á!3€_wsFòë$ZvØHrf#ùµä(Ù @DDDŽš‘CbfYÀ•øácÕÑ>œsŸ˜Ù÷€ß¿1³à¿;ˇt3 #€qø3…ø;S håô(PŒ?Ãñ~MΖ4 UDDDä°iD‰™] L*?:çêrI§gfÿ ükòÛw€:çÒVÓ’¬§œœŒ_,^œtmå’8°Xœ|,–9ç¢i°ˆˆˆHP‘ƒJn¹{-þ–»8ç6dxHÆÌ¾ üŠ}…Ú«§ñÉ?s»Úùúyø!cpò1?p4<ÚÚ¸¿÷Fþ G°Ô9WÛžñˆˆˆˆdšˆPrËÝÁÿ ü¶sîµ ©Ã™Ù@à߀›¼ýžÞl¶Ûø3Må=›Jsû‘c–ˆ´ÉÌ&1`®s®,ÃCJ+3ë_—Ñ(ò~­œê€=øA£ák9~Ÿ”MÇz³C‘á]°¤UfÖ˜™üöåã-|8ç*𷱑ÒËKä“Üör Œ_ŸðafG$""""Ç iÍ9øÔõø µNODDDD:„ˆ4“ì¶=5ùíóιÊLŽGDDDDŽ- ÒÈÌÂÀøÝΗ;çJ2<$9Æ(€HS3¾øÝÎ_ÈðXDDDDä¤"˜ÙPàSø[Ê>㜫Ëè€DDDD䘤" K¯. Xâœ[—á!‰ˆˆˆÈ1JDÎzã7Ð{%Ãc‘c˜ÈqÎ̆gà/½zÞ9ÉðDDDDä¦rK.½º éՇιµ’ˆˆˆˆã@ŽoŸaßÒ«¿gx,""""rP9N™Ù `ròÛç´ôJDDDDÒAä8dfàbü¥WEÚõJDDDDÒEäø4 èÔ¢¥W""""’F¡LàXbfןº `=°X¬ì Íý̬/~xÁ9W“ÉñˆˆˆˆÈñE¤ƒ˜ÙíÀïpŠgfëü@Òðuµs.š†!6ÈÆ/:/wΕ¤ñ¾"""""˜s.Óc8ê™Y` ÐuðàÁÜ|óÍlݺ•Õ«W³zõjvîÜy ËcÀü@R¬–ëœs‰7d9çjSñú"""""mQéfvÉ⯾ú*Ó¦M£¢¢‚²²2jkk©¯¯§ººšmÛ¶QRR¢E‹X¾|9åååzÙz`ÍgKV¥Nh""""r”Ré ˯òòòصkÎ9<ÏköpÎQ[[Kee%µµµÔÕÕQYYIyy9‹-âí·ßfÕªUD"Ü·š}³$ _—:çv§ømŠˆˆˆˆ´›H0³ÿ¾1~üxÞ{ï=¶n)ãšKÊ ù=9mìP&O=…)gŸLVV¨E ñ< q–¤¾¾žšššÆ`RTTÄk¯½ÆêÕ«ÏmCøð½T-Ýi/¡wŒQ#GŽ`Íê-¬_»Þ}ºñÆëËxü‘·¨¬¨%Ò§ow†œØSÆ bÒ§F2ùì“ÈÊ  …èÞ½;yyyôîÝ»1lLž<™Ù³g‰D¨ªª¢²²’Ý»wSTTÄsÏ=ǶmÛÆ|'ùõiÿ ˆˆˆˆˆŽ1öË7Ò%7› .™ÜxB}}Œ];÷²{ç^ví¨àWKxôÁ·ˆEãde‡éÝ'¡#ò9uÌ &NÁØÂ!€?;‡ …BtéÒ…¾}û2bÄ&MšÄ­·ÞJ8féÒ¥üèG?bÆ ŸCDDDDD:)vJî(5 šRzöìJ$oz'ä÷â„ü^¸±û®¯©®cû¶=ìÞUAÙ®Jž~b÷Î{ ç ·k6ùù=:â 'œÈyŽ% H$pΑH$¨¯¯'‹1qâĆ¢5u""""Òi)€´ß‰@`Ô¨Qlܰ‹î½»Q‰µž…è?¸ý÷k|*K°§¼ŠòÝ”ï®bÍG»xû˜~Þ©ƒÖìe<ÏcûöíìÝ»·áзÖÉ$öÕð 3 »wWÓo`êêãm^t0y=óÈë™Çà‘P]QË›/-¦K—,jjj¨­­%;;›ÜÜ\âñ8fÖ´×ˆš ŠˆˆˆH§¥Ò~£z÷îMïÞ½¨©‰087›ÚúX‡Ü`Ëæ2 îøõ ½{÷¦¾¾3k|4 +:ä¦""""") Ò~#aßò«òòj ¡ìlêê[ß ×5þ`­žB<§|Ç^vlÞMMe-çÎ<€PÈßÊ7;;3#✣¬¬¬áRé´@Ú¯ÙX[6—‡!¦¶>~XážçQ[QCÅ®JªÊªhèч3våååäææ6‘Ý»w³gÏb±ÆÙ-Á‘NK¤ýšõÙ°a'YÙÙÄ?` ˆ.âqHu‘ª:ê«êû„ÂáfgÑ qùU$! RVVÖtùU°µÃÞ™ˆˆˆˆHSi‡ä¼'¾%XëVo'»k±DË®åž/#‰DIDb$¢ûBJ0$H°Åu3òûwoü>++ ð»§×××7+@wjm/""""˜Hû Åï<Þ8òÉ–=„C!uQðÀy^#þcĈ”•Õ ITEšÄ |d?îz““C8& """"rTQiŸQtëÖ €êê(á¬ð/:4û¶Ç:¼Ï¾£f„B!‚Á 5558çØµkWÃÓ*@‘NM¤}ší€‰Ä€Yá6–Uµ±åîAo2Ê UUU„B!œsèeeeÄãu$š‘NM¤}šõÙ¹£ÊŸýhOx+!¥` _€Þ0Ëâyñxœ½{÷6]~µÛ9·£åÕ"""""‡Hû4Û‚wÇŽ*ÂmÍ~¡@ÀèÑ#›DŸåpÎáœ#ãyÛ·oo8U³""""Òé)€¡ä¼Caß È¦M{Èêú}º÷ÈÆ "‘@€úúzrrrÆÐtDõ""""Òé)€¹¡@šÌ€l«n¥ý ?’NÈÏöm» ùd‰D3cÛ¶m §jDDDDD:=#7 0lØ0¢1ð!ôõ8ûuUUUäää`fƒA*++šî€¥"""""žÈ‘0dÈÆ%QßøÖ§Ù¼y/ÿ|w#­ÚIEe”ëHo9[2p€?’““ƒsŽh4J(¢¬¬Œ]»v5Ýke;Þ‹ˆˆˆˆHZ(€¹f[ð68°;—_9çN¥®.FqÑvŠ‹·³m{ ^âð·ÇêÓןQ ‡ÃxžG  ‘HP[[ÛtùÕvçÜîv½‘4P9r'žxb«O:çÈÎ2éŒ&LÌÇó<>ù¤Š%î`ãÆ*jkc½A0dääñ<¯ÙqÏó0³¦;`­j×;I#÷põÛo¿ÍŽ;ÈÏÏoq‚sÍg< èJÿþCñ<ººË–•±fueåõx^ËÙ‘¼Ü`‹×¿îd¿ôiföwàUàUç܇í~w""""") räžîøøã{>œÉ“'sÑE1}út Oj-@dg™8±/ãÇ÷Æó<6m¬fÅÊ=lßVO}}€ž½Â-^# ‹Å03¶nÝÚp8ÌL>0³uÀËÀKÀëιš}ç"""""GÈÚú€,gf#€ç€ÑM:”éÓ§óÙÏ~–sÎ9‡p8ŒsÏóøh8§¢"ŠdSPÝìù†¥W[¶lák_ûñxœ¯ýëlܸ‘×_êêêý‡–{¹À“Î9oÿ“DDDDDÒA¤Ì,˜\|Üôù.]ºð©O}ŠóÏ?Ÿ‹.ºˆþýûRië‘H$X·n6là‡?ü!=öÓ§O'‰ðþûïóüƒ·Þz‹eË–µ6ó7à2ç\|ÿ'DDDDDRM¤™ÙÉø³ ç¶uÎÉ'ŸÌÌ™39ûì³™ùäÞxã ^ýu^~ùå¦[öþØ9÷Sñ39`f½¾J²;zAA_ýêW13^}õU.\Ø4лwoÎ<óLf̘ÁôéÓÉËË;hY·nõõõ<ýôÓ<óÌ3deeqÝu×ñË_þò€c\¸p!³fÍjX¢µÎ97ò€ˆˆˆˆˆ¤€ŠÐÛÉÌn~ôÉÕW¿úUfÏžM,Ãó<.¸à~ÿûßóøã3mÚ4/^Lyy9ååå¼ð ¼ð ƒAÆǹçžËäÉ“=zt«÷«¯¯`Ë–-€_ ž““Cuu5]ºt! ¶¸&óÁ0eÊþþ÷¿ 73sJŸ""""’f í`fÿ üwò¿¹ä’KøÁ~@vv6‘H¤Ù¹“&MâþûïgÈ!Ìž=›M›6ñÏþ“ââbJKKI$|øá‡|ø¡¿ƒîàÁƒ™6mS§Ne„ „B!êëëñ<]»vQTT@,cìØ±”••~ÃÂÜÜ\òòò…Blذû￟þýû7Ý*8 L2³­øM iøq‰ˆˆˆˆh Ö‘2³iÀ›@`üøñüìg?cÒ¤Ilݺ•X¬õ&ƒßþö·yï½÷¸úê«9ûì³éÖ­¡Pˆ½{÷òᇲtéRV¬XÑ"¼4²wíÚ•@ À[o½Eee%S§Nå7¿ùMkããÍ7ߤ¼¼œÜÜ\b±%%%<ñÄeÀד§&€]Àü0RÞ?‘Ö(€!3{¸¼[·n¬ZµŠììlvîÜI]]]«×ÔÕÕñ£ýˆW_}•O<‘©S§RXXHNN¡Pˆ@ @"‘àã?féÒ¥”””P^Þv˜0a¿ýíoÉÉÉiv¼ººšÇ{Œ^½zѵkW‰YYYüãÿॗ^ØÜÑÆËV«sîÏDDDDDä`@Ž™íú|ÿûßç[ßúYYYêëëÙ»w/ÕÕÕ$­¯lZ¸p!wß}7+V¬  2xð` Dß¾}ÉËË#öF£Q6oÞ̆ رcÑh€~ýúñ¥/}‰+¯¼²Åk/Y²„õë× …ˆD"dggÓ½{w"‘ .ä•W^(~v€·÷‰sîívý€DDDDDZ¡#`fôÈËË£[·nÏÅãqúõëG~~>ÕÕÕÔÔÔPSSÓl¬©S§2uêT6lØÀ;ï¼ÓÞ{。% Ñ¿Î<óLÆÏÙgŸÍ°aÃZŒ)‘Hðì³Ï’——‡™‰D…B$ <Ï£K—.MgSÊðöÖáFDDDDä€@Ž€sΙÙ ïÖ­[{žG8Æó<‚Á ¹¹¹äæær 'P[[ÛHÂȰaÃ6l7Þx#à‡ˆššªªªpÎÑ­[7ºvíÚêÎVMmÚ´‰e˖ѵkWªªª¿n¤¾¾žp8L"‘`Ó¦M¬X±¢á’ZyXìœ[×¾ŸŽˆˆˆˆHÛ@ƒ™àÏìúnÚ´©Õs¶àuÎ …ÈÍÍ%''‡~ýúQWW×"ŒƒAºwïN÷îÝ[ë`Þª… ¨©©Á̃Äb1ºtéB4åÝwßåå—_n˜]yXºßËÔ s»ë"""""r˜@Q²Ëù?I.½êÖ®]ÛêùιÆf‚ Ûçdee‘M—.]ÃHUU555mÖŒ´¦¢¢‚’’²²²Ø¹sgc¡y,ÃÌÈÊÊ¢¦¦†_|‘•+W6\ö*ðàþ/¼îœ«?䛋ˆˆˆˆ!¡"3û;0³OŸ>Äãq***Ÿ›1c³fÍâÒK/m\‚ÕÚ£¡Ãó<]ºt!  ‰ÇãD£ÑÆ0ÒÖV¾+V¬ 77—ÒÒRjkkqÎ ‰D"deeÇÙµkO<ñ»víˆ €Ö Ëë€s‘VžéP ‡ÀÌn8í´ÓøÍo~C¿~ýØ´i÷ÜsÏ?ÿ|ãÌE=¸æšk¸á†(,,l5x´öƒäåå‘››K<'‹áœ£¢¢¢Ù2­X,ÆöíÛ‰F£¬Y³†D"A0Ä9G"‘ FY¾|9Ï?ÿ|CˆÙüØÜÆÛ‹8çžLýOQDDDDDä€Ìì2à[À üÔSO‘ŸŸO}}=‘H„œœºuëÆë¯¿Î]wÝÅÆ¯=õÔS¹þúë¹òÊ+éÕ«W‹ÐQSSÃúõëéß¿?]»vm\®•M·nÝèÞ½;@€½{÷FÙ²e fÆÒ¥K)//o¬-‰F£„B!œsÔÕÕñÒK/5vSjð6#À+ιêÔüEDDDDöQi…™õþ¸±áØ”)SøÎw¾C]]C† !++‹êêjêëë‰ÇãäççFyì±Ç¸ï¾û¨­õ?ógeeqÞyçqíµ×rÎ9ç4§žzŠåË—3aÂÆŽKïÞ½éÒ¥KcHéÚµ+Ý»wgÀ€ìÞ½›x ±KzCŸP(D<§¼¼œÇ{Œä®\ à1àoÀÁþ€Ë7œsÑŽý)Šˆˆˆˆ´¤²3›Ü èÛ·/×^{-ßüæ7éÙ³'ÕÕÕ,]º”mÛ¶1tèPN8áöìÙC]]]ãÎSùùù”””ð‡?ü>Ø·ãm~~>W^y%W]u'žx"¡Pˆúúz6mÚDQQ»wïfèС <˜=zsŽSO=•+V°páÂf³( 3 «W¯æ¯ýkCöJüðTro÷à=ç\ü gŠˆˆˆˆt&Ìì'À÷ÀôéÓùùÏÞ8ËP__O÷îÝ)((  ²~ýzŠ‹‹éÝ»7Äb1öìÙÓ¸ãÕ°aÇÃ<ùä“Üu×] áLš4‰+®¸‚ .¸€.]º••E4eëÖ­¬ZµŠ`0ÈäÉ“‰Åb 0€åË—³eËvïÞÝØÛ#óÖ[oñÊ+¯4lÛ»ø°çÞîÇÀ§¿""""’F Ifv1ðøý8n¿ývn»í¶ÆúM±XŒx<ÎÀéÛ·/555,]º”ÊÊJ Dnn.555¬[·ŽÏ|æ3tíÚ3cñâÅÌŸ?Ÿ¿ýío…å¹¹¹L›6¯|å+Œ9ç]ºt!‘H‹Å¨««£G,[¶Œªª**++‰F£TWWóØcññǃ¿ÌêEàüåWâðƒÇÇ)ûaŠˆˆˆˆ´á¸ fÖ¸¸°“N:‰_ÿúל|òÉ­¦H$Bnn.#FŒ ;;›ÒÒRV®\ɶmÛ¨¯¯çöÛo'77—ÚÚÚÆÝ²jjjxþùçùãÿÈêÕ«ÈËËã‰'žà„Nh¶Ì üz’’Àÿkïþ~«,ŽŸþ8S@;`'´=†YÚlE¤9… IDAT4Ñ#­Ê_À¶èn]Ʋ›eË®txÃÍ’q5—Ì@BÈ &&%2«„â‘R¥H¢@Éj¡›mRK¡N<»x鉙uÂS#ßOrÒœ“÷œ¼ïÛ«oÞ磣£œ?žÝ»w3:: Ù2ºå«w7ÿ²iàHŒñâ-½‰’$IÒ< !ì~°råJ^|ñEššš¨¯¯/À×EÈ_Ô××3==MŒ‘ÚÚÚòNå@y(×\Œœ;wŽçž{ŽS§N±yófžþyªªª˜™™)ï†~éÒ%.^ÌšáðáÃìÙ³‡R©ÙÒºþ=KýèŽ1Îgx–$I’t[T¾ð } &„PìªÚÛÛyùå—ijj¢¯¯ÙÞsËäÎÇ… èíí¥X,’ÏçË VTTB ¢¢‚\.Ç¢E‹!PYYIww7ýýýœ={–W^y…ÁÁAjjj( „ T*±k×.öíÛ7/ïÆæqZ£d»_þÆ7I’$Iº…ªúX0 °fÍN:EMM ---<ñÄ|ôÑGìß¿Ÿ|>σ>H±XäêÕ«7ý±ññqNœ8AUUccc ”‡h566²dÉr¹\yùµk×xï½÷¸ÿþûyã7¸rå tvvR(ذa1Fº»»ùôÓO!FµèºÉiDà0|ýïp!ÆøusC$I’¤ÛÎ!X!t›š››Ùºu+555@6¾ž††¦§§yÿý÷9}ú4­­­´´´Ë嘜œ,½æí·ß&—˱eËJ¥SSS”J¥ò«ªªŠ‡zˆÊÊJúûûyë­·˜eÛ¶msOKŽ?–~Åé^"{êqîKŸ_ [v÷*0ãž’$Iú®2@Bx˜l8Su>Ÿç±Ç£½½B¡P>¦P(ÐØØHmm-gΜáèÑ£,Y²„5kÖP[[ËÀÀ]]]Üu×]<ûì³Äo©©)&&&x÷Ýwyê©§X½z5ccctvv255EŒ‘;v0<< Y`|´Ë€œþÉ»š_NÆ“Ü,I’$é[ºã „ð3`°üú{Ö®]KGGÍÍÍÄYºt)Åb‘ºº:FFF8~ü8~ø!¥R‰åË—óÌ3Ï”ó‹211Á¡C‡hjj¢½½ÉÉI^ýu&&&ˆ1cdûöíŒü‘l?/ºLM$Ÿ¼þ‰1Îgþ‡$I’ôa€\BXD¶ÖoÍ}ÞØØHGG<ò•••Ä©®®¦X,ÒÐÐ@>Ÿgtt”+Vðæ›orß}÷QWWÇôôt9>öïßϪU«xòÉ'™˜˜àÀ7ÄÇÇÌÎ;! ‹_×ÈærœÎÆ/¥¿#’$IÒ­g€|I!À€6²áOÜsÏ=lܸ‘Çü†U±î½÷^ŠÅ"µµµôõõqøðafffX¿~=ù|ž£GRWWÇÓO?ÍgŸ}FWW×®]#ÆÈìì,###¼ôÒK\¾|²ÿN GbŒÿYˆ{ I’$Ý.ÈÿBø1ð;` Èår<úè£åy"sO1–-[ƪU«( rìØ1†††xàظq#CCC:tˆÙÙÙòw>ùävîÜ97ôªØ ïÄ?_¨ë–$I’ndB?~ ü’lR8!ZZZØ´i­­­å¨Èår¬]»–•+W’Ëå!púôiz{{ËÇÄ9~ü8¯¾úêÜÊWçí@p<Æ8»P×*I’$ÝNÈ7BÈ?'{*²zîó††ÚÛÛo˜'°nÝ:ÆÇÇ9yòd9<&''Ù»w/½½½s_?ü è1žL{E’$IRZÈÿ)„°ž,D6“mhÈÝwß͆ hkkcñâÅÔÔÔÏçavv–žž^{íµ¹!W3À^²ygcŒ= u-’$IR*È·Bh~üÈTWW³nÝ:ÚÚÚX±b===õ$IÒÆ¹®ï)ò ˜Æ\^W’$Iw2D’$IR2 }’$I’îˆ$I’¤d I’$IÉ ’$I’’1@$I’$%c€H’$IJÆ‘$I’”Œ"I’$)D’$IR2ˆ$I’¤d I’$IÉ ’$I’’1@$I’$%c€H’$IJÆ‘$I’”Œ"I’$)D’$IR2ˆ$I’¤d I’$IÉ ’$I’’1@$I’$%c€H’$IJÆ‘$I’”Œ"I’$)D’$IR2ˆ$I’¤d I’$IÉ ’$I’’1@$I’$%c€H’$IJÆ‘$I’”Œ"I’$)D’$IR2ˆ$I’¤d I’$IÉ ’$I’’1@$I’$%c€H’$IJÆ‘$I’”Œ"I’$)D’$IR2ˆ$I’¤d I’$IÉ ’$I’’1@$I’$%c€H’$IJÆ‘$I’”Œ"I’$)D’$IR2ˆ$I’¤d I’$IÉ ’$I’’1@$I’$%c€H’$IJÆ‘$I’”Œ"I’$)D’$IR2ÿà›¶ƒ¾x”¼IEND®B`‚lasso-2.8.2/docs/lasso-book/figures/PaxHeaders/sso-brws-post-3.svg0000644000000000000000000000013114404126122022005 xustar0030 mtime=1678814290.033777196 29 atime=1678814290.83778176 30 ctime=1678814323.193965745 lasso-2.8.2/docs/lasso-book/figures/sso-brws-post-3.svg0000644000175000017500000064370114404126122025271 0ustar00bdauvergnebdauvergne00000000000000 image/svg+xml ServiceProvider IdentityProvider 1 HTTP 2 HTTP 3 HTTP HTTP 4 lasso-2.8.2/docs/lasso-book/figures/PaxHeaders/slo-sp-soap-1.png0000644000000000000000000000013214404126125021407 xustar0030 mtime=1678814293.461796661 30 atime=1678814293.409796365 30 ctime=1678814323.169965609 lasso-2.8.2/docs/lasso-book/figures/slo-sp-soap-1.png0000644000175000017500000012304414404126125024663 0ustar00bdauvergnebdauvergne00000000000000‰PNG  IHDR ¡™Ð< pHYsÊ&ó?tEXtSoftwarewww.inkscape.org›î< IDATxœìÝy˜Tõ•ÿñ÷©¥7¶F6EtpE‚ÄÐcL¢Æ‰šÄ‰f™Ñè¸Äü’8“L’‰“Äh2FŽÆ%&.àž¨DŠ+«,‚ˆ¨ì½Õr~Ü{ËÛEuÓÐÕÝ(Ÿ×óÔSÝ·¾uï·êyèâÔ÷{Î1wGDDDDD¤3$ºz"""""²ãP""""""Fˆˆˆˆˆˆt """""Òi€ˆˆˆˆˆH§Q""""""Fˆˆˆˆˆˆt """""Òi€ˆˆˆˆˆH§Q""""""Fˆˆˆˆˆˆt """""Òi€ˆˆˆˆˆH§Q""""""Fˆˆˆˆˆˆt """""Òi€ˆˆˆˆˆH§Q""""""Fˆˆˆˆˆˆt """""Òi€ˆˆˆˆˆH§Q""""""Fˆˆˆˆˆˆt """""Òi€ˆˆˆˆˆH§Q""""""Fˆˆˆˆˆˆt """""Òi€ˆˆˆˆˆH§Q""""""Fˆˆˆˆˆˆt """""Òi€ˆˆˆˆˆH§Q""""ÒÉ̬Ê̆šYmWÏÀÌjÂùôèê¹È'Ÿ‘v2³cÌì3;ªO9Xœßq³jÎ̺™Yï>*œÏ±ñ 3ëmf51?Ùq(i¿ý ‚‰ýºz"­¸øÐÌ*Ú8~àCà¿:lF²CJuõDDDD¤k¹û4Àºz²cP""""ÒÌ, ì¼üµ Ï T €çÜ=_4¦/ÐX $£ÀbàiwÏÅÆº…¿îaf™ðç5î¾&Üfµ3°ÚÝ7˜Y÷p¾=ÍlhìÒKÂëàîo·0ÿ]ù¿åî¾¥×+;mÁé f6xx¸ x˜ ka|O3»XÜü˜¼bf{ ÿyÇs€‡ßOÏšY¯ØØç‰áÏóÂç-. Eógß¿¿èüx+ lŠ_C÷ðw(øR€ˆˆˆˆt3K"È ¹ØØøð?%Æ'€?S‚‹½€À—V#¦™YU‰Ký Xžÿfà°ðš‘ÃéáÏû@ÀëZ˜þCÀ§ÂŸol~Cðÿȯ”xîç ‚”[8·ìà€ˆˆˆˆtŒIÀ!ÀïÜý‡î¾ÂÝç¬p›L°ê'î~•»/t÷Uî~ð-‚€äs%žw‡»_éîsÃóXLˆ¸ûR`Søë[î¾8¼­)5qwßDÛ«ÖÇÆ/·‚ý ˜ œn1‹;XÜÙÚ›#;. """"ãØðþ÷ñƒá¶¤ßo>œÉ¥Æ‡îïÇ•x¬Ùôݽ‘`›×fÛ£Ê%| 7¬êœ7³ƒ‚®ÛÝ}S O—œ‘Ž1(¼«Äc‹K‹½ÿafÆo|´bÒ¯Äó–—8¶ž`TGº¨£y/“èç:øÚò1¦*X""""#JÀnkyÛDøœ+€l cJUÊ—8ÖáÜ}­™Ýœ&£œ <ïî¯wÅœäãAˆˆˆˆHÇXÞÞ+z¬¸¢+%cgÝýÕ˜ÏÖDm=ðÏámÁª‹V?¤UÚ‚%"""Ò1 ïÏ43¾\büŸÂûK:h>«ÃûÞmÿA²SKÜ}&ðÁk¼X ÜÕŽ9Ê@+ """"ã‚þçšÙr‚ò¸5ÀåÀãÿBÐËãóaIÞÿ!ÈýèCPb÷‹µÜÆùÌ ïÿÛÌþ ä€Ùî>§Ô`wo4³7‰fv°"|èÏ ý A“Ý€ÿq÷ºmœŸì ´""""ÒÂrµ§/W$žÏþ ¸°•ñׇ÷3¶nÍî†óQ°-~OÐ/ä”ðþ.`êžsA÷öÿÇßEDÅÝ Då|ÕûC¶ÈÔ RDDD¤}®ã}€÷Ý}}Ñc ‚F€»T¬zH”°ýÐÝ×–8ßNÍkEhL_ '°ÔÝsE º¹{©j[˜Y?‚|5î¾ÆÌj€Õî¾¡ÄøŠðñ°$ –¢Çzﯹû-¼E" @DDDDd›™Ù¿?>çîÊÿ-R"""""[%L¤?`ç_ *x*^‰)Eˆˆˆˆˆl•p[Yh^þÙÝçwí¬äãBˆˆˆˆÈ'”™íüÕÝ´aü^ÀÑÀcî^ªƒ»H»© ¯ˆˆˆÈ6¹§ÞH°é)à6wo©£yg9 1àYÀ`t8þ³¯C¤ìT†WDDDdÛ¤ƒ :¯ o¥m¹?%ȯH°=jp™í < V ÀùÀ÷Ìì4wÿkxžÂóô~Pâºÿ DÐZÈ1³3› ‰7Ã9ýð»R/ÆÌŽî%V–T¿:¸ÂÌ&ºû˱áG„92×ër@DDDD:À‘á}q'ò‹‡€^î¾+pª™¥þs¿ ðewïïî»ã „»Ã®ç)ïg‡½8 ÌlO`,p_q7ö¢qC€ß†çéîû7!Åã&$u÷ÝÝ}O‚„u€{ÂNéq•ÀEÀ1î^žÿ™–æ$; """"íSmfCÃÛ¡fv%Á䳫 qoßp÷Mî¾8ظÝÝ ãÝý1‚ã}¶lVÕº ØøTѹÏ ¸e óý P|×Ýç†çuàJ‚m_Å.j¯¸ûK±ù½\ìL,zN¸ÌÝÿŽÍ»{ýæ%; """"í3XÞ^¾¬¾àî¯}ÄÝóEÇ¢@âîç¾+¼;vsxvt \ ùÁö¨'¶0ß1áý_âà äÏ%ÆÔËÌìŸÌìàèF°*ÁV¯bÅ%ŠE倈ˆˆˆ´×›¹äo¼Ìu÷Æc——8Ö?¼§ÄcËÂûÑwŸmf/§›ÙÅáÊ‘ÀàG%œbý€5Ñ*L ׋ە`ÅäÍVÎY[ô{ðþæ!;( """"íó®»ßØÆ±¹ÇÂû%ëQ4&r3ðK` pÁjˆ³åíW@73K”Vz–ßDXÞÊ9×ýž WTD6£-X""""]+ZY8 Äc£ÂûâêQwg‡å{? <çî­­RįWì]ⱑ%ŽÍ&X5ɹûân´áº"€‘®ö‚•‘‹Ì¬{t0¬Žuiøë½ñ'„ÿဠ?ã" ;›'¼·ä¾ð¾YÅ+3 |®ÄøhUågf–,~Ð̪ͬº×Ñ,i›°™ÕP‚fR«Eî^j¿r—0³k€Aî~nWÏEDdk¸ûR3»¸˜af7l¹:‹ ·ã±> q·¬|\ÔóQÂú–ü x 87\=¹ ð¿” Þ¯hüÀ)M_0³Û€¥ásN> ¼ÑÆëËNˆˆ´ÊÌö~O‰½¿f¶øŒ»¿ÞéÛÜQ”Þ: "ÒQ²ÿa_ц±õáØâ\ ÜýJ3[\ü*<üðC‚£”‡— Àv÷RçÞ^wCìZy3›BCr:ÁªÇ†ð÷—JÿnŠw3ûð<ð/ÀÏbç_LÅ¿ZAˆ/R’)?HDZbfµ5á|0ý‰àq p0Á·s_s÷'»l’¡°«o?wÿEWÏED¤=ÌlA•î^*i½œ×ª!è3²ÒÝ›ÚøœZ‚dõ•-Túi•i‘™OÐ÷:w¿¸…1mýÐQºˆ´fPxÿRKJföi3»ÏÌÞ1³•föŒ™}¾Ä¸1³»Ì¬—™}×ÌÞ0³Ìì3fö¿fVr5ÃÌÒfv»™ý0vì3»©ÄØ3»ÔÌþÎe‰™=bfg•;%|ì]3[afšÙø–^»ˆˆˆl= "ÒšhïifVÑ–'˜ÙW¿‡·,ÕÿŸ™}¯hø¡ÀTàÀ·€YÕ`š#¨3¢ÄeNÎ$¶§™ drÑ\zÏÿAPÿ‚dËJ‚}Öñ±×† !¨6s'AÒýÃföå¶¼vÙ2mÁ‘…ÿŸE°² ˜< <åîKKŒßx˜ Œw÷ áñ4AþÈ$`¤»Ï ßBG28ÚÝWÅÎõi‚*-?v÷K‹®sp20ØÝ—‡Çž ÏÝ'6îFà<àßÝýGEçàî+ß çøùhU',‡ùA­üÁîþáÖ½ƒ"""RL+ "Ò"w_ŒîúT;Ybf¯”Øžô |' >Âód€ïüÍùl‰K]>BÏ‹€/ÆëΛY_‚@æ±(ø(%¬I0¸¶Äk[ûõk+$߈o)s÷ás»‡×‘vR^i•»/NWŽ#ØuÁö¤©î5È:,¼?ÆÌƪ*¼ß³Äe^.q]7³[ ÊOOPnàó|o)~N‘‘[­ž÷-/õFPròKfVüØ.­Ì[DDD¶’i“p5àÁðv•™]ü‚ F}€Ôy ¥œ‰fµècÞoaü­ÀÕÀÙ|€œ ¬þ¼…)÷ïßÛÂ8€^AÍù-<¾˜ †¿ˆˆˆ´“Ù&î~™] ìefÕî^¬!H?¨…†X[{%anÇd3ëE‹r0pƒ»7láéQ¾ÆÀ6\j-Pãîö}¶""]'̵;› 3y‚""oT1\І•`‘N£DD¶‰™¥¶8å º<|˜HPEªnŽ&èÖ»wìØ–ÌÖG˜YÊݳ­Œ}Ž`›ÙhwÿG;æ*"ÒéÌì4‚j{µ0äC3ûðBx{©DÞH§Qºˆ´È̾ff?0³ÝŠŽW?ºO„Iæ×äRüÌÌ,zŽ™Ù‘f¶µ« ÷lÛúgà Àj6 pž™Ý|IÛµ¤£©ˆˆ´(\5K4ì h¸xø}¼Ünìyƒ€¯cš¾Oˆ<@°bõÙ8 šÖ5aIKóØŸ`õàĘ €îþý¢ã à à4‚¨Ž 4ïÝý‰¢±ûô 9¨!H`“ 9â3îžoiŽ""ÍÌz|)ô/[`>|8×\s Ç{,mù?Ýš5kxýõ×yíµ×xíµ×xõÕWY¶lY|È¿¹ûuÄüE" @DDDD¶cá—AWl§¢oß¾\zé¥|ñ‹_$• 6´lëÿén¾ùf.»ì2r¹ÀlwY–‰‹´@[°DDDD¶Sfv ÁÖÓý*++ùêW¿ÊÅ_L=ZrÔÕÕ±zõj†Μ9s†·û¤"[ DDDDd;cf»ÿL gÊ”)\uÕU Ø–êâ[öꫯòÄOУG*++£Ãɲœ\¤ @DDDD¶a•Á¾K‹ÆÞ{ïÍ~ðŽ>úè²\#ŸÏs×]wñá‡Ò­[7²ÙfUʵ7_:œ‘ˆ™M H d*Y½Y*™¼³™YO` p§»½ ãs›Üý_;xz-Í¡/A"}/`¹»?Ûó‘?3›LP|(@mm-—\r çž{.Édë mÍÿx÷Ýwyä‘Ghjj"™L’Éd¨¬¬Œ?_ˆt8 ";–Ÿ#J¯7³ÿ®îâò‹ô&üÖ¯ [9¾lÂÆ_?ÇßGPmKD¤ÍÌì8‚êVG$ ¦NÊ5×\CŸ>åkAôÌ3ϰhÑ"2™ S]]M]]]|˜ép @DvL‡t0OÿDÐ/ãJ‚r¹[Óg£Ü6”Àý8ôÛØøx x— :ˆÈV1³€ s/ÆŒõ×^Ë~ûíW¶klܸ‘Çœµk×’ÉdÈår¤ÓiÜÆÆFjjj¢ X|6ˆt( ";¦—Ý=ú´ù‡™-ΧDbfìÔ¸û›EíJМð=w_מI…sšÙÒãfÖ-œÇ‡îþ~[Îvqï¬hËü̬{x•î¾¶•¹þŠ Ó:f¶7 @Dd+™Y pÜyçùþ÷¿Ï”)Sþä–ǬY³˜?>k×®%ŸÏV=qw*++ihh ‘HDOÑ ˆt¸Ä–‡ˆÈài‚o½†EÌì3û?3›Dй|0?l쇙dfsåý>0³Ìlpì˜Ù‡föÓR5³SÃÇ¿þÞ3üý×Eãfv-°˜¬2³éÀÎ-½ 3ûbX½C'ò¾™ÝæÄÇ]^óh3ûÁêË<‚P‘Ž4ècfüáàÔSO-[ð‘Ífyê©§˜={6ëÖ­#ŸÏ“L&©¨¨ ©©‰t:M"‘ “ÉP]]ODW"N+ "Ac«Á¨HoàP‚Èßÿ XÀÌNþL°é›‰ãÇßþÉÌt÷Üýu3{8ÇÌ.w÷Æ¢ëžK°:q_ø{K9 ? f¿r«5w–z1fö-‚üŒ™ÀW:š¾ 7³Cc׫Âkþ’àƒ÷r`UøÚDD:Ò!tÇ/$„§R)ššš¶ù¤«W¯fΜ9¼õÖ[…\ÊÊJ²ÙláѪG:Ö ˆt: ";83«~þúdÑÃ{g¹ûbãÀ|HéîsÇþbfï…纸$<~3ðà$àÞØy'¸ûŠVæ·+AIÊYÀqQcf÷Ï”?øOày`œ»G_ë=df €›Ÿ_=5èîuˆˆtŽj€vÚ‰þýûA‰Ü(O ªªŠl6Ûæ*WË—/gÖ¬Y¬XñÑŸÕªª*êëëI¥R˜MMMTVVÒØØH>Ÿ§²²’L& W"N[°DvLwšÙ]f6 x‹à?ä+ ª°Ä-n/:¶A`òçXð¹ØL‰»ÈgýÁúoÞÂ\'…ã~_Aq÷ ð‹ã§ià§±à#r+Ð@øû¥‚édyh^B×ÝI$TUUQQQQx,›Í’L&[Ü¢•Ëåxçw˜1cï½÷©Tª°ÂQUUE>Ÿ'ŸÏ¶aUTT`fd2Òét³9‰t$­€ˆì˜†|Ë•#ØZõ*ðw_U4n¡»íÞÏ*>©»o ó.FšYÒÝsî¾ÂÌN0³þ±kœM°Íé-ÌuÏð~N‰Çf—8•ŽùŽ™]ÐÂ9Kµ~³Ä1‘Ž´YÿÝÝÉf³är9‰¹\®°}*•J‘H$H¥Rär9^zé%fÏþèObUUMMM¸;UUU…çD+,ñU‘¨HtùNyå²CS"²c:,V«5ëK‹¾&ÛÔÂs6¬®¦V9N$Xõø¹™üªD^H±ŠV®WêXuxÿPª¹âb‚²¹Åº¼£ˆìp(l·Z»v-55A \qP’ÉdÈçólܸ±°ZõùãÿXØrefTTTÐØØH:&ŸÏÓÔÔDuu5õõõ$“IR©…À$‘H(D:•ÙZÑ Æ  ¬) , Xí8ø9mǺe+¯÷rÑc»—ÿ^xÿ{w¬ çé*yò>¦OŸÎÒ¥K7nC‡¥{÷î›mÏhhh`Ó¦M$ 6mÚÄ{g»z{D9MMM…€¤¡¡¡÷af…Ÿ£q±> @¤Ã)DD¶ÖK@=pª™¥ã˜Ù8`WŠ’ÃÃ`ä‚ Y‡Ÿf»û‹m¸ÞŒðþ3%+u, :ÎjùEDºR³-X'žx"&LàÅ_äG?úwß}7 ,`Æh£ªV›6mâƒ>Ą̀®®.ôùˆäTUUŽ%“I²Ùìf%yãséHZ‘­âîÌìFàbà·föuw¯3³áÀï¾=ûY‰§Þ\HP…ª?Ae¬¶ø;ð"p†™=ÜãînfŸcóÄv€‡ úš|ÑÌÞ®u÷fÖøðŽ»ß߯ë—dfÕÀˆð×h%¦ÖÌ^çî Ûs ùÄk¶Ò½{wFŽÉÈ‘#ihh`É’%<ÿüó¼ÿþû 6Œ!C†Ð»woªªªpwòù|!9=Úr•Ëå 9 …à"êx^WW׬H4.šZ‘N DD¶Åe‰ìggšÙ*‚!àbwªø îþ¢™ÍFTÅ*®®URlœ <Ü|hf9 – ÔïÏKŒ?`Åårà»f¶œ ·H‚ׯlýKÞÌ0‚Õ ¸£cÇN.ÃuDä&ü2¤–¢$’ËåH&“ 2„¡C‡R__ÏÛo¿Í¬Y³Èf³xàôîÝ»„…ŽD"A2™¤©©©\$“ɪH|\:.¬Š(‘ΤDdÇòm 'm[bÿ¥“µ ›øbfÇG42\ üÉݵrÎ/TµZßBï:àt‚Ɔñë-4³ýÃç'È ¹— Ñ|9A§öøø€ñfö)àX`A‡ó¥À£îþNlø_Óç·2ïR–…smI‹½MDdÇefG5ê‰wÞ9ñ׿þumÔ‹6/Çëîd2ÌŒAƒ1tèPêêê03šmÇjll¤¢¢¢PÍ*JDªaår¹B.H:&›Íz€444ÄËû*‘§DdâîlÅØ»Û0æI6o^ØÚøW€WZy<”¼®»¯góæ´4>|γÀ³[˜Ó<`^kcZxÞºÖ®-"Ò‚ãŽ?þøÄá‡NmmmíwÞY@æÎKïÞ½éÕ«W! ˆ—ä­¯¯ÇÝ ãñ¤¸Ôn6›¥ººšºº:***Èf³ÍŽ¥RÁ£ %›-´MR"NˆˆˆˆHçùí 7ÜpÖÓO?=¨±1(«V­âºë®cÏ=÷ä°Ãc=ö(Y +¾e+z,^ù*™L’H$ åw£ÀÄÝ ¹ ѪG¼oHIèÒဈˆˆˆtw_ ìnfC_¢€âÓŸþ4cƌ᭷ÞböìÙ<ñÄ <˜ýöÛ>}úЭ[·øy ÷QÀåsD9ÅǀͶaE‰èjD(IˆˆˆˆH's÷Åfö0!¾•*‘H0dÈÌñÇÏ»ï¾Ëüùóyá…ØyçÙ}÷ÝÙi§ M£néQo¦¦&R©TaKU”ãmÃÊd2…¦„©T 3#“ɶd¡D:‘®á@É$ôèØÎ;ïÌ€Èf³¬^½š·ß~›šššBÀàîTTT‘(àˆwAWÃJ¥R444PUUE}}=étº„„²ˆt0 """"]c³2¼ñÕè÷h¥£wïÞì´ÓN$“I6nÜXo&XÜ=•JµØ=ʉJ÷†€H‡S'tÙ.™Y•™íÒÕóé@…$x¬ZµŠºººÂ øcÙl¶ÙcQ)Ý\.W.¢€ÄÌ Ñ3™ d2™f+%ѱép @Dd»afI3ûg3[ ÔïšÙZ3›af?3³3ÌlpWÏSD¤LJ®€,X°€ .¸€ë¯¿ž¹sçò9Jõ šÙl¶Ðû#ZÙˆŽÆÆF’É$Éd²°]+“ÉhD:¶`‰ÈvÁÌ&?ö/z¨06¼EcW/3c7€î¾¡ãg+"RÍV@"ŸúÔ§8üðÃyóÍ7yì±Ç¸÷Þ{Ùo¿ý8ðÀéÓ§Oa\„DMã+Qbf…ŽçŹ Qà’Édâ}@D:œéRfvAà1>üÉ“'sÖYgQUUÅÂ… yíµ×˜9s&³gÏŽ¶ Noqufvpµ»¿Ý™¯CDd4[)^á6lûì³ ,Z´ˆ3fàîvØaôëׯ0.ªlÕÔÔP8¢íXù|žt:]è ŠDR©Ô¾föwÿ·N{d‡£DDº„™í ü?àÂí ‡z(×\s ‡rHaÜ!‡Âgœ@CCC!yõÕWyíµ×X²dIüC»&<ßh3ëîk:퉈l½V“Уîçù|žÁƒ³×^{ÑØØH>Ÿ§®®®06•JŽl6K.—+¬v¤Ói2™ ù|¾då«x€^½zQ]]ý¯f6øðwGF"e DD:•™u.¾ tØ}÷ݹꪫ8å”S I“¥TUU1zôhF]8¶nÝs IDAT:^ýufΜÉ-·ÜÂòåËö ¯qY¿‘ö(™„›¯†är96mÚD.—k DU²¢à¢¢¢‚|>_؆UWWG*•*4%Œw>VE¢$vú\qÅÔÖÖ~víÚµŸ½ãŽ;Ö›Ù#ÀƒÀ_Ü}]ç½=òI¥$téø"ð&p%ЭW¯^\}õÕ<÷ÜsLž<3ÛêóöêÕ‹qãÆñÍo~“‹.ºˆªªªè¡ãË7{‘Ѭ´œh,°¸{¡ünuu5™L3+ÕÕÕäóyòù|¡ünee%$¬oÃÊçóÌš5‹7Ò¯_?®¸âŠž3f̘zï½÷ÞrÞyç­éÕ«×sfv©™Üño|RiDD:œ™\G˜HžJ¥8óÌ3¹ì²ËèÛ·o»ÏïîüñdÓ¦M 8… ôn÷‰ED:VÉ$ô-­†¯'‰Â6¬xµ«(¸H§Óär92™ 555ÔÕÕ¶ae³Ùfù#õõõÜxãëS©Ô‚Ã?ü ƒ>؆ Fmm-§žzª}éK_:<ŸÏþÚk¯qÈ!‡¬˜9sæÀãÀtwߨï•|‚(‘cf}€ç®¸Ž7Žþð‡ì»ï¾%Ÿ³µ[ßÿ}î¸ãÒé4©TJ•\Däãd³$ôÖ¸øö«èär¹BIÞúúzR©étºÐ€0~¬±±±ÐY½®®n10º±±ñ}3ëÿä“Ožœ´Ï>ûœxøá‡×Œ1‚]wÝ•Áƒó“Ÿüd—ªªªóßyçóŸxâ‰luuõÓ ÷÷©ˆ´Fˆˆ”™% ’ÌwØm·Ý¸üòË9ýôÓËv§Ÿ~šÙ³g“N§ à‰Dag©’&Ed{·Y:´x´ $“ÉB5¬x©ÝxÞGSSS¡doCC555444ªe…æ»ûûáùW··šYrÞ¼yc€“jkk'3fÿƒ>˜!C†Ð«W/N;í´ÔYguL}}ý13gÎüï}÷Ýwù¼yóîžv÷ÂD€ˆHÙ˜Y8‚`»Õ?TWWóo|ƒ‹.º¨°ï¸½¸ÿþûÙ¸q#‰D‚\.G*•ÂÝã+ @Dd{׿$ôREdzÙ,Éd²YRyÔˆ0ZI¥R…U‘h$jDØÔÔTX¡…F„îžf„·ïšÙ°éÓ§OJ&““:è ãÆŒ“6lýúõcĈÜpà »%‰‹,XpÑwÞ¹ÑÌF»ûœ²¾{ò±¥DDÊ"Ünõ pxtl„ \{íµ 4¨l×™7o3gΤ®®®°í ^Õ%¶’oí<""Û’exã?·eKVTù*žTžN§Éf³Íªa¥ÓéfÉéQIÞD"õX‚6vBw÷EÀÿÿcf5/¾øâ1À‰;ï¼óä±cÇî2räHöØcjkkùö·¿ÝýÑG=P"€)ƒpåãÂàc¿ýöãÚk¯e̘1e»F.—ãñÇçƒ>(ÔÅ7³Â·{Q’eTJ­€ˆÈö¯ÝIèÑÖ«(Ÿ#ÞÛ#•Jaf…¼ÆÆF̬° «ººº° +öåÍV'Ò¹{ÁP_3³‘÷Þ{ï¤t:}ò˜1c>µaÆ,ðÔÖžW>¹€ˆH9LޏôÒKùÖ·¾Õ¬³n{­\¹’_|‘U«V’.£$ËèÃ6Úó+å«DD¶w[•„ÞÚ H´ý´8I$…ŠŠ 2™ Ùl¶ðw3znlûj»+y¸û,`ðc3«Ò½ç•Oõ‘r8`Ĉ\xá…ÔÔÔlSORÞxã žþyV­ZºQB%%}£=Ïù|^+ "òqÒâ HüçÖ‹¶^E[©r¹\³€‚ä(/$JNÏd2…U‘D"Qø›=hР]ï¿ÿþ¦OŸ^–¤=w_«àCŠiDDÊa€O}êSôïß¿°2‘H$¨ªª"“Éluy݆†,XÀìÙ³©¯¯ÇÝI¥R$“ÉÂþ妦¦ÂjH´ +Fˆˆlï6[‰”*»ÛÒÏQòyô7²Ô6¬¦¦¦fùrÑ6¬x…,€ÚÚÚR©ÔÌ´iÓ&‰y¹\nÞ‰'ž¸¦ÃÞÙá(‘²‰ö'“IzöìYHV%¢mS­#fƺuë˜7osçÎ-Œ­¬¬$›Í’Ïç©®®.$TæóùB’e¨„”„."Û»v%¡GÏkiËU|{j¼Qa|VôåMt®d2éáùÓÀ¾ù|~_3cÚ´i&‰9Ùlvn}}ýâ©S§–›E¶–)‡<”þÆ.ŸÏ“J¥ [ ¢-*±-S¤ÓiÖ¬YÃ3Ï<Ã|PŸN§ ÕZ¢„ʪªªÂ‡m¼¹Vìƒ\+ "²½ËAû;¡GÍ£/jr¹\³cÑ*t´­ŠD=Bêëë [°Ì¬¥/ovÊçóG$‰#ºwïÞ4mÚ´EÀ3›;qâÄõez?d¡DDÊÁB0ÑRÇÞÆÆFr¹‰D‚T*U¸mذ¾}û2wî\žzê)²Ùla[A>Ÿ/lˆ*¸Ä“'3™L¡oôx|N""Û±f_Þlk/he¸¾¾¾YIÞ(¸ˆŽEGCCC³*‚Q™^€d2¹ÅÕcw¯ööuwŸ6mÚò|>¿0•JÍ9á„–¢¿¿² @D¤š%R¾ð 8ÚÚÚ¶¬øg&“¡¡¡õë×SQQAÿþýY¹r%O>ùda\T2¾W9*µo¤¯àRYY_QÑ,ÙÞmIBÊ‘çx¤ÓéBŽâÕâÆÆÆÂ­|>Oee%<ð@¡ȨQ£–nåk0``"‘˜Ïçš6mÚ&wŸŸËåæôìÙóÍ£Ž:ªaÞù„S""åÐlóªU«¸îºëØÿý=z4Æ £G%?HëëëÙ°a+V¬‚mYQ¢y<à(Þ:m¹ª««£¢¢3#“ÉhDD>NZMBokP5aަ¦¦ÍV‹£º(øˆ×o¿ývž}öYöÜsϧžzêÂv¾¦nfvP*•:hÓ¦Mù‡zèmwŸ“ÏççžrÊ)+Ûynù„P""åPøÏÌ8餓˜0ao¿ý6/¼ðÓ¦McÏ=÷däÈ‘ 0€nݺžmÍÚ°aC¡”n<¡2™L¶aEœQu­x#­h¥DexEäcÄaó$ô­Y ‰ }ÄŽ(ï#þ·4þ…Nee%+V¬à7¿ù Ë—/`Ĉs®ºêªGËñš‰Ä“Ùlv5°o2™ÜÛ݇$‰IÓ¦M[mf×Mœ8±± ב1 "R›}‹gf 8ÝvÛ“O>™eË–1kÖ,ž}öY Ä!CØi§¨¨¨(|ˆF5ê£@£¸dd© .Ŷ±n¾ @Dd{×lûjkG\ñ6¬T*UèˆýÝŒ³K¥R¼úê«ÜtÓMÔÕÕ‘L&s&Lxê /œÙÞãî ‰DâÎN8aNxèe 1}úô=Ü}ßD"Ñç„NPð! @DdÛ˜ÙàÛ MûBén¾Ñë®»îÊÀÉd2¬X±‚7ß|“ž={zw¸{a#¾åª¥mXÑJI” 5áŠuóUˆˆlï6ËÙ–$ôl6[.Š·a¥R©Â5MMM<òÈ#Üwß}¸;=zôXá…Þ?nܸí}!f¶*•JÝ:~üøUůqâĉ‹€Eí½†|r(‘muù•W^yQß¾}ùùÏÎ’%KšU»Š¾‘‹DßÎår9úöíËÎ;³qãÆÂ¸h_rT2¾ +J²Œ×ºÊïÆ“,µ""#…/J¢mTÐö\è÷èË›(©<Úr/¿»fÍ~÷»ß1{öl†ºèÊ+¯œÖ¿ÿr$‰¿ºqãÆ{¦NÚT†sÉ@ˆˆl«Æ 0`ÀvÛm·fÈÝwßM¯^½5jÔf•°¢[CCC³ Ñg”ã}ˆÆŽd2YB¢ .ѪH¼VHˆˆlï H>ŸÒ¦\hûj&“!™L’H$6낞ÏçY¼x1¿þõ¯yÿý÷I$ùc=vÆ7¿ùÍ´wòîžw÷‡O:餿µ÷\²cQ""Ûê{wÞyçú»ï¾ûäêêêC‹JBŽ;–×__þò— 0€Q£F±Ç{гgO åo÷2™ÌfeuãAPÈûˆoÊoÍÒ ˆˆ|Œ¼ý°|ùr ´MIèÑjG|VÔ'é¹çžãÖ[o¥©©‰šššM\pÁÇwܲ2Ì}S*•º}„ í­š%;  "²Mܽøð3û#pz”ï1dÈ Ä„ X¾|9‹/æ¾û¶–½öÚ‹~ýúÊò†ç*l#ˆö*GÁE¼ˆ»o–œ•’ŒŽ©ºˆ|ŒÌVý¾ñoðãÿ˜aÆmÛ†ef…¦ƒQÀí¨¯¯çî»ïæ±Ç`àÀË®¸âŠ ´© ó~§©©éÖ)S¦¬-ùd¤DDÊ¡6OB73vÙe ÀèÑ£yï½÷xûí·ùûßÿNïÞ½Ùo¿ý¨¬¬,œ$ü†®TžL& Mã\âI–¹\®¤TUU©¡ˆ|l¸»›Ù•ÀõÏ?ÿ¼yä‘qÄœ{î¹uÔQmZ Éçó…í©Q.ÈêÕ«ùå/ÉâÅ‹;vìó—^zéŒd2YŽ/fþ±iÓ¦?O:5·å¡"¥)‘rhVJ2_áÈçóôéÓ‡>}ú0jÔ(Ö¬YCMMM!I2ZilllpD{£¼w߬GH.—+<'Öˆ0ÓÙo‚ˆÈÖr÷Ìl1p»yæ™gxæ™gØÿýùÊW¾ÂñÇ_<~³ß£ƒ™L†yóæqýõ׳~ýz*++Î>ûì‡&Ož¼¸ SÍ&‰ûN8á„Ëp.ÙÁ)‘rhs7ߨRKMMÍfÍ·¢ÑhV6›-äxDÏ£jZ•••…• ¸Ä’Ð ?ˆˆlÏÜý1à13û4p 0é7Þ°‹/¾˜~ýúqúé§ó¹Ï}Ž^½zEã ÷Qî]SSÓ§OçÞ{ï%ŸÏÓ¿ÿ÷.»ì²û÷Þ{ïuퟙ­M&“?~|9rGD€ˆHY4 @ ø`üÛßþF}}=cÆŒi¶Õª8÷#¤Ä VTTñºöMMM…Uø(9=–„®DD>VÜýiài3Ûø7àŒÕ«W§õ«_ñÛßþ– &0yòd8àࣺº:~ûÛßòÊ+¯pðÁ¿rÙe—ýµºººÝÛ¤Ìl^.—»sâĉuí=—HDˆˆ”CÉ-Xƒæá‡æ¾ûîã€`ôèÑ 6 3+Ùx+‘H:÷ÖÔÔŠx]û(‰¶fÅ«fUUUiDD>öÜý à,3û.ðUàü¦¦¦<ð<ð»ì² &L`àÀ,]º”G}”•+W’N§›N?ýôGÏ<ó̹嘆™=1qâÄÇPQ)3 "R›mÁŠªa}ýë_'—˱lÙ2ž~úiyä†ÊþûïOß¾}›,ÑV‚¨‚K´ +¾*’N§7;•ßòBBÃ̬»»oìì7CD¤Üý]à*3û!p:ðÏÀ¸+V$n¾ùæfc{õêµæ’K.¹oÔ¨Q´÷ºfVŸÏçïœ4iR9‘Í(‘rpò;Zê~Þ¿Î8ã r¹Ë—/çå—_fÿý÷§gÏž…ç$“ÉÂsâ £’¼ñ $‘H”܆­€ôîÝ{ß7¾jfû¹{cg¿!""åþ ûð‡¾}ûî¶ë®»~gõêÕGåóùZ3«;vì¬Ï|æ3ójkkËщ|EEEÅ­Ç{l»‘–(‘rÈ›m©Š~.î~Þ§ON<ñDòù<ëÖ­+ŒËf³¤R©Â*GTj7• þTÅ» Gµîã]Уø={öäˆ#޶dÉ’ÌìOÀÀ#ߑ²zÿý÷—ߎ²Gy¤w6›`fýóù|w`fýͬj+OÿÊ€î9øàƒUEP:”)‡<ïÁÑjýú\.ÇÆ [¶¢ûø F¼üncc#fÖl$—ËmÖÝÌ Ï73Î9çzöìÙ­ººúK+V¬øÒÃ?œëÞ½ûÓ›6mz¸ßݵ½@D>î|„ Íþ¦Ý}÷ÝÕ=zôÏç$‰î>ÀÝ=›À=ïîŸtÒIë¼iËŽLˆˆ”C³$ô-5Î*~,*%™Éd ÁE.—+¬v” 8Š{„DÇ¢> \{íµ}ôÑìµ×^ôìÙ“Ï|æ3É/ùËG×ÕÕýÊ+¯üÇðîo¼ñ ð ð¨¶j‰È'ÉÔ©Së%á­àÑGíVWW·s*•êcfÝr¹ÜüSN9åÝ®˜£ì˜€ˆH9”,Ã[êçÖ‹Žx.H´Í*ê÷mÊrK¢ $*ÓÍaõêÕù+V\þÒK/­N>|øIGydõðáÃéß¿?û쳿øÅ/v­¨¨8ÿÝwß=ÿ¡‡ʤÓé§³ÙìÀ½îþNÙß%‘íÀøñã7‹Â›H§S""åÐj'ôèç–‹ž­€D9étº°êÑÔäVVUUf³ÙBôèX€d³Ù›Ýý?ÃKÜjfUóçÏ?8®¶¶ö³Gq݃:ˆÁƒÓ«W/Î<óÌôùçŸl}}ý±Ï?ÿü6lÑâÅ‹ïžrwí‰) "Rmî„ÞÒcîN2™,¬zDÛ°*** =@r¹… $^~7 B¢-X@³¦YîÞ@L<|×̆?øàƒ'šÙI|ð§G>|8}ûöeÔ¨QÜ|óÍÃR©Ô¥ ,¸ôÁÜdfþäî*û»'""²Q""åPr V[WC¢|>_8R©T! ‰çx¤R) åw£¾! TUUÅçÐj#BwŸÌ~ff=^zé¥ã‰ƒ šrä‘Gö1b»í¶={öä‚ .èöíoû O?ýôÌl´»¿ÐîwLDDd¥DDÊ¡]Iè‘D"Q82™L¡ãy”÷ÑØØH"‘ ªªªÐ=“ÉžS__O"‘ˆªqµ¹º»oþüÉÌοí¶ÛF“ÒéôÉãÆ;ìÐCµ½÷Þ›5kÖ¤·áý‘)‡-&¡·”äóùf]Уà"¾ +Þ”0›Í¶¸5+V ¸ÍHœ“{%¼ýÐÌú<ùä“€IÀ à¹m9¯ˆˆˆ€ˆH9´˜„ÞZàQü³»Êïoê©©¡®®Žt:M2™,4*lhh(¬Šlذd2I.—#‘H| µƒ»ü_x‘vR""åàPºzñï­%¡G]Ì£-UñŽçQ¢y”÷‘L&ijjjÖ=¾rÄGŒ›>}úyf6·¡¡aÖ”)SÖvàë‘6R""å°UÐK%¡G÷ÅÛ°¢R»ñ~ ¹\Ž|>_HNªamܸ±°’L&ÍÝ÷r÷½***N™>}ú»î>˜ûâ‹/.»úê«Ë²B""""[Gˆˆ”C> ,¶% ÝÝ ½=²Ùl¡¬n„Ä·\¥R)̬÷mÊ‚€T*Õ,Àp÷]]c=ôк‡zh¡™-Èf³sN9å” ò®ˆˆˆÈf€ˆH9´; ‚.çétwoVù* 8ššššñ•’¨3zs@jÌìà€t:}ê´iÓÞæ644Ì=í´Ó–n)‘òS""å‡ÒF[ó?òù|¡ãy"‘hÖ¤©© 3+l¹ŠWÈŠ)ï½÷^a¤gÏžõm™¸»'€ÀÀªªªãzè¡À›¹\nN:ž?qâÄÆö¾9"""ò "²3;˜éî Úø”Í:¡oÍ6¬¨{y´’ÍfKæ‚D‰æñmXÙl–ÊÊJ/^ÌM7Ý@=ÖO™2åÍm|í݃R©ÔAîž>}ú[¹\nA&“™sê©§®Ú–sŠˆˆÈG€ˆH)“;Ìl9Aƒ¾û§Ý½©…ñ-–á-õsñïÑóâ«ù|¾°ÒØØXè‚߆{î¹ç¸ýöÛÉd2¤Ó馯|å+Ójkk[šk›¹{ƒ»J${UVVNz衇V¥R©¹õõõó¦L™²mÕÙj @D¤”¿!»_Î0³¿÷ÓÜ}El¼CóÂ[Ñ =ž÷ñÎèQ¢zccca;ÖwÞÉŒ3¨­­ýð;ßùÎ_:è ÷Ëð,Îår·¿òÊ+›F½{6›‘L&÷ÍårG¦Óé‘À–á"""; "RÊ3@:ü9ÅG+&G¿5³kÝýßÃãÍغ$ôèõöˆ€t:M&“!•J5ËûX½z5¿ùÍoX²d #FŒ˜sÕUW=Ú£GL;_»'“ɧ'L˜0ÈŸrÊ)KÂÛ´éÓ§÷3³ží¼†ˆˆÈKˆˆ4cfÕIÙ96ÿaáíaàšØñmê„OBnñèœ455‘L&13æÌ™Ã7Þu>ÏM˜0á© /¼pf{_»»7år¹»&MšôzKc&Nœ¸XÝÞk‰ˆˆì¨€ˆf6øp"ði ª…¡õÁÇçÜ=¾ÒƒmOBî‰Da¤¸V´òðÃsß}÷‘ÏçéÙ³çÚ‹/¾øþÃ?|e»ßXËån=å”SÊq.i‘”™Uã/SøhËÀ[À à` 2<ÖÜœëîÅ=6BžF¤­«!ñ•“âÞfF:fÆ ÜtÓM¼üòË 6láÕW_=­OŸ>å(“;gÓ¦Mœ:uj›J÷ŠˆˆÈ¶S"²ƒ1³Ã³€3€Þ±‡žî¦»û|3¼>ÖÜ\P"ø˜ °råJ^}õUößÿÂ[» +*µ/¿»dÉ~õ«_±jÕ*‰D~ܸqÏç;ßy6™L¶« •™åÝý‰I“&=Ž*Z‰ˆˆt +®B#"ŸŸ'Nãîd³Yî½÷^¦M›ÀÀß¾âŠ+4hЦv¼%‘å›6múÃÔ©S?,ùDDDd+(ù2³¡ÀÅÀ¹@÷ðð»Àÿ7¸ûš6žg»/ÛŠëVgÿìãˆ#Žà¬³Îb̘1¸{³À#ŸÏÓÔÔÄÂ… ¥v?üðC~ýë_³páBÌÌÇŽûK.¹dF{·\¸ûËË—/¿÷üóÏoo¹^Ù @D>AÌl p%Aàåx½ü ¸ÕÝ:i à4àRàèø Aƒøìg?Ë”)SèÞ½;ù|ž|>Occ#‹-`þüù\ýõ¬[·ŽÊÊÊú/ùË|òÉo•aZÙD"1í„N˜Q†s‰ˆˆÈ6R"ò `fý€Ëº–G%t~êîwÙÄ3;ø0 HÔÔÔpÌ1Ç0aÂ9äÖ¯_ÏÒ¥Kyüñǹçž{Èçó 0`Åe—]vÿ^{íµ¾½sp÷u•••8î¸ãÞnï¹DDD¤}€ˆ|Œ™YwàB‚à£WxøYàrwªË&V‚™ #˜ë¹|4WúöíËž{îÉ;ï¼Ã;ï¹å‡rÈË—_~ùß*++sí½n"‘X˜H$n?~|9rGDDD¤€ˆ| ™YŠ`µãj Oxø%àßÝýÑ.›X„AÓ”nݺÝÐÐpT.—+”ïÞ½û†‰'Î8çœsf•áRžÏ矚9sæÃW_}u‹‰ö"""Ò¹€ˆ|̘٧ ’ÉÍ®îñÙ?èÉ“'X¸pá‰Ý»wß¹OŸ>ÝÎ?ÿü¥}€ZÀÚqêFà®I“&½Qž™ŠˆˆH¹(ù˜0³Ý€Ÿ44ààràݽÝ[•¶'sæÌ©˜7o^ÿŠŠŠþî> ‘HôO$€Ü=ÑÚsÍlU2™¼uüøñ«:iº"""²€ˆlçÌ, |ø>ÐÈ·ßq÷Õ]9·Îö·¿ý-ÕØØØèŸÏçd³Ù‰D¢¿™õ’À«fö§‰'6vñTEDD¤ @D¶cf6ø_`ßðÐßq÷W»nVÛ%»ñÆSêí!""²ýS"²2³àÍÀ ‚ž·}Üòé´"҉̬;ðKàìðÐ à‹î¾´ëf%"""Òy´"ÒIÌloày‚à#ü'pŒ‚Ù‘hD¤˜ÙT‚Þ=€eÀçÝýï];+‘Χ‘V¹úàÁÇSÀ¡ >DDDdG¥‘bfý€;€c z{\|Çݳ]:1‘.¤D¤˜ÙXà.`W`pŽ»ÿ¹kg%"""Òõ€ˆ”™™}¸ ¨æ§¹r@sË IDATûÜ®•ˆˆˆÈöA9 "ebf 3û1ðÁÇ]À! >DDDD>¢‘2û{ÜL&È÷ø1p¹»ç»tb""""Û "ídfûàÝl-Šâ†ÚúôçV­Šû†¢,*Ê*¶„ìËlç÷Ç÷Þa2™,9ï×+sï¹ßI'äžûýžsLÛ`9 Æ4’ˆdã*]ýJUokÍ1cŒ1Æ´5€Ó"Òø?à$ ÌTÕÇZwTÆcŒ1m Æ4@Dþ ŠpÍ_kÝQcŒ1Æ´M€S9Wéê`#0YUW¶î¨Œ1ÆcÚ. @Œ©ƒˆ ÅkÓTuuëŽÊcŒ1¦m³*XÆd "Çoâ‚Ïñ|cŒ1Æ4Í€˜o W‡B¡ÓT5ÇŸžll©\9 xè|œ¥ª{oÄÆcŒ1ûQÕÖƒ1ÍFDÁ`ðáP(ôc=6+‹é²eË¢Ñhtg<ÿ–ª¾ßÀóÏžÀ5|8_UË[bìÆcŒ1û @Ì7†|,‡Ã߽ꪫ½{÷ ‹ñ /Äßÿ}UÕiªº¨Žçx ãf@.RÕª{ÆcŒ1û @Ì7‚ˆH ˜‡§]uÕUY}úô©uÌûï¿Ï3Ï<“PÕéªúhÚó/Á-K|×ç#Þ"ƒ7ÆcŒÙXºió¼àãÞP(4}Ö¬Yƒ€ã?ž .¸ "‰ÈŒ”ç§3,ø0ÆcŒÙ;, Ý´i^ðqO0¼bÖ¬Yá¾}ûÖ{ü1Ç|úé§‘`'nÆ#Ü\©ª‰½=ncŒ1Ƙý•-Á2mZ0üM0üñìÙ³Ãýúõkôó–/_ÎO<¡Þç_€yÀÕ|cŒ1Æì]€˜6+ Þ~zùå—‡¸ÛÏ_±b‹-BUßNVûe0ÆcŒÙë,Ä´IÁ`ðNùéÌ™3kñxœ/¿ü’Ï>ûŒêêê:_ãÈ#ä»ßý."2øá^²1ÆcŒÁf@L ï7fšù(**â‘GaÓ¦MtíÚ•Ë.»Œ^½zÕùz+W®äñÇO¨êªúàÞ»1ÆcÌþÎÓ¦ˆÈ­Á`ð—3gÎ 4¨Æ¾ÂÂBæÎË¡‡Ê”)S(**âÑG% ò£ý©óu—.]ÊÓO?M$Ç«êÇ{û}cŒ1Æì¯l –i3‚Áà/ƒÁà-—]vY­àcçÎÌ›7!C†ðío›œœúôéÔ)Sضmõ¾öèÑ£9òÈ#¡Pè7{ó=cŒ1Æìï,1mB0¼ ¸múôéÁÁƒ×Ú_PP@YY%%%Äã»ZxÄb1Âá0;wnð&LÆb±I"r@sŽÝcŒ1ÆìbˆÙçƒÁŸwL›6-xØa‡ÕØW\\Ìã?N¿~ý˜>}:_}õ<ò±XŒââb^xáN9åÂápƒçéÙ³'¸’¼=÷Æû0ÆcŒ1€˜}\0ü1ðëK/½48dÈûJJJ˜7oáp˜ÁƒsÙe—±fÍ.\Èüùó8p 'tR£Î•——‡ˆÄ­Íü6Œ1ÆcŒÇ³Ï‘kUõîï}ï{Á¡C‡ÖØWZZÊüùóéÓ§]t€û(4ˆ3f°~ýz*++9ï¼óêM>÷}ùå—,Z´(."7©ê޽ò†Œ1ÆcŒ fß$"WˆÈŸ.ºè¢ÀðáÃkì+++cþüùTVV2uêÔdðá;äC˜9s&Ñh”… ‰Dê=׺uëX¸paLUïŒÇãw7û›1ÆcŒ1I€˜}Žˆ\."s/¼ðÂÀÈ‘#kì+//gþüùäääPUUÅ¢E‹ˆÅbµ^cÀ€\~ùålÚ´‰|°Î dýúõÜÿý±D"ñçx<~ë^yCÆcŒ1&ɳO‘"2oêÔ©£Ž:ªÆ>?øèÒ¥ ³fÍbÚ´i5’ÎÓõïߟË/¿œüü|V®\YkJðñ—x<þ“½ö¦Œ1ÆcL’5"4û ¹HD;ÿüóÇ{l}ÌŸ?Ÿ:0}útB¡_}õ .dàÀ\z饫]•””ЩS§Û6lØÀüùócñxüÞx<~ýÞ{WÆcŒ1&• fŸ "SEäñóÎ;/8f̘û*++™?>¹¹¹LŸ>½V±zõj.\ÈÁœqºÍ›7sß}÷Ec±Øœx<~]³¿cŒ1ÆS' @L«‘ïˆÈ¢sÏ=7xüñÇרWUUÅ<@0dæÌ™deee|uëÖñàƒÒ§OŸzÛ¼y3sçÎÆb±‡ãñø,µ_cŒ1Ƙe9 ¦U‰È"²èœsΩ|TWW³`Á6oÞÌ…^XgP.é|ÆŒäççóàƒfÌ ÉÏÏ÷ƒG-ø0ÆcŒi€˜V#"“ÀgŸ}vpìØ±5öùÁ‡ª’››ËC=DYYY½¯7`ÀfΜIÿþý ƒ5ömÙ²Å_võX<¿Â‚cŒ1ƘÖaK°L«‘3EäÙÓO?=xòÉ'×èF“³—_~9¥¥¥Ì›7ììlfÍšU+¡¼!Û·oçoû[$‰<Çg¨j¢Yߌ1ÆcŒi4›1-NDÎÏœvÚiµ‚pK¥T•™3g’M=˜={6‘H„ùóçSRRÒèsmß¾9sæD"‘ȳñx|¦ÆcŒ1­Ëf@L‹‘ÓÀó“&M rÊ)µf>^|ñE&MšDnnn­ç0þ|B¡³fÍ¢sçÎõžkÇŽÌ™3'RUUõ|<¿PUk'†cŒ1Ƙe3 ¦ÉDä@9DDêDäÔ@ ðÜ)§œR+ø(..fÅŠÌŸ?ŸòòòZÏïÞ½;W^y%ñxœyóæQTTTç¹R‚,ø0ÆcŒÙwXböˆˆL‘‰Èv`°˜]ÏñãÀ³'Ÿ|rxÒ¤Iµ‚ ¹Ôª¬¬ŒyóæeL:ïÚµ+W^y%ªÊܹs)--­uLQQsçέ®ªªzÑ‚cŒ1Ƙ}‹ fO Lò€7ë;PDÆ—O8ᄬÓN;-cðá;à€˜={6•••Ì›7/c€Ñ¥K®¼òJFŒAûöíkì+**âoû[¤²²òM/øˆîö;3ÆcŒ1{ fO]tVÕñÀƒu$"ÇWÆŸ5eÊ”Ÿ·xèܹ3]ºtaûöíu!;wfòäÉ»^²¨¨ˆ{ï½7RQQ±8‹­ªÕ{þöŒ1ÆcÌÞ`ˆÙ#ªºUUã ‡Ž=:묳ΪõY{úé§Y°`‘H$¹Í/Á«ª\{íµD£QæÎÛ`å«ââbæÌ™S]YYùF,û–ªFê}‚1ÆcŒi€˜½*÷?ꨣ2~ÎÆŽË–-[xਮ®&òÐCQUUÅŒ38ðÀ¹êª«H$Ì™3‡;wf}úpÅWP\\Ìý÷ߟ1ñ•——3wîÜêâââå±Xì4U­ÝµÐcŒ1Æì“,1{ª¾£ªç¼üò˱W_}µÞ dÖ¬Yõ!UUUÜÿý‘¢¢¢Ïc±Ø©ªZ»[¡1ÆcŒÙgYbZ„ª¾˜H$ÎY¼xqôÅ_¬3éÝ»7³gϦ[·n5–\ >æÎÙ¾}û—Ñht’ªÖ_›×cŒ1ÆìsB bLóPÕ—Däô·Þzë%U gê ЫW/.¹ä’Ûªªª˜7o^dûöí_Åb±U5sM^cŒ1ÆìDä@à à #° øxSU [sl>ù(QÕ“Z{,ûQ­óf´1u‘+ûê9äfUýŸ:ž{b xiܸqY“'Onp®ººšyóæE¶nݺ:‹MPÕÌu}1ƳO‘ï²P‰ BÀ¡ªº¶•†—$"k€bU=ºµÇ²?±³§–¿©gÿ{uíPÕ7EäôwÞyç%UÍ™2eJ/‰DX°`AdÛ¶mk½™ >Œ1Ƙ}˜ˆŒþ ä3WU5."]€±À \²/8¨³R§Ù;lÄ´™f;–)S¦ "5öG"î¿ÿþH~~þ†h4z‚ªno¥¡cŒ1¦‘DäOÀuÀ%ªúØn>7ô‚ÀZU6â9=nÀ:U­Þƒ!×÷ÚÞ@ °Eë¸p‘lܸcÞ8ö•kŸdIè¦UˆÈéÀå‰D‚÷Þ{/òè£F««wý›Fyà"ùùù£Ñèx >Œ1Ƙ6£ƒ÷¸µ±O‘lù-°ø ÈvˆÈ¯D$˜vì3"²^D‘7q¹%ÿN‘"òRç,"…"ò×”mŸˆÈŽ=FD^ ½×Þ l‘›ÒŽë*"ó½ãò€ÕÀ¹¶±ï}dK°L‹‘ƒGqw7îK$¿ÿâ‹/ž¹ë®»Ž5*ܹsgY±bEdûö훽à£Ñÿ€cŒ1¦Õ}ê=Þ,"ÿQÕMõ,"àŸ¸„õÇgp3 ·Ý¤<¥ÐxÑ;×U¸›ê_¯ß‘CUõ«´S]tþ/e[ç ã9x¨î>Æå² O9.xÍÛ6X „+{D¤ªÞ]ß{ß_Ù,Ó¢D¤ðp °8QU«½©Ëo‡B¡i@ S<ÿ<ÿÂf>Œ1Ƙ¶Å»0ÿ†ËõX†Ë ] ü;½‡—ˆ\<Ü¡ª·¤í{øp¸PˆÈb`"p¿ªÎJ;þ4àßÀ«ê¥l~Òû@‰Tzº¸õàŸƒ€±ªúI=ïó6àVà U} í\ï#€ƒ¬m@m¶Ë´´¿â‚à"­¦ªV«êcÑhô¬êêêq±Xl¶ÆcLÛ£ª¸¿õ·à.æGáf0þAæåIßÃ%‚gš-˜‹»^=#þßfØö*ð50Í |ƒ… ägŒÄNO×|¤Œ{° u£÷ú÷ãfj&4ðû%[‚eZŒˆ\ \ŽûGæ{ªº®uGdŒ1Ƙ½AU+;€;D¤08˜Ž[žT¤ªx‡À-¹ú{zA ½÷Ø7m{ X“á¼ yøp"nI¸åW <ÔÀЇxŸÖw·rc0Pü;ø{x5p¾ý’ ¦EˆÈàÞ·7©ê¿[s<ÆcŒi^.ç3À3"ò2.Ï㇀€äàú„Ô (<+¥iÛ*T5VÇñ?ǯ‹HGàà y!é²½ÇÒŽk—r\¦q¯Á-5ÿ²×Ù/Ybö:9ø;î—úÿÿÛº#2ÆcL+y¯aʶ|\·ôkSv·!ªú…ˆ¼|Ç[îõmÜLʃxúfïq`Ç•å@µª^µ§cÝ_YˆÙ«¼Òyà¦Nó€éuÕÐ6ÆcLÛ'"9õì>wý™šçù2nFáÂfƃ¸ŒoãfB*€§ñ¼÷€2à\o™UF^žÇ+À ×äÑîg,1{Û¯Óp¿ÌX%cŒ1æï"ò¬ˆœ%"íÁÝ‘ñ¸åW© ÿ×GãÏ"rqj߯×Çÿx%üwÇ“¸e]7'á’ʼñ*tÝ«‚õ˜ˆôNËI ’~D¼ãN÷*h!ÎÑ"rˆdíæ¸÷ €˜½FD¾ü—ôu¹ª~ÞÊC2ÆÓH"‘û┈L‘E¤kkÅd´ 8x(‘B  W†ÿ\Õ¨»üƒUõkà,\·ñÇrY-"¸Õ?Æõk4U-Æõû 'Ÿ§º¸8È‘Í"²WÆwFÊ9>Æå–ä/yïu-.ðù7ób2°> f¯‘!¸ä«ŽÀoUõÆV’1ƘxeK¯¾øÁG>îâñªú^+ /Éë˜ý3`p#’ŠM+‘.À)¸JQ;À[ªúŸ:ž“œ Œ:[€Ï—S{‡ˆÈI@WUýgc8Ä{-ÅÍ€Ô*¿+"“¨ª¾œaßÞxÄÍЬžËÐǤ®Â×H\¾ë&\âüb¿Ý€©ÉÓì¼µŸàîr,NWÕxëŽÊcLCDäÀõ¸ ÅÇ€ À¸»È“qÍÝîªûZ†ˆ\ œ \§ª[Z{<ƘÝcˆiv"2˜lŽVÕüV’1Ƙxkì×z_£½%,©û;=mÆÁÓTV†×4+¹|$€i|cL›q$.7ô¥ôà’kêkm‘0p1p2nÙíf`‘ª¾ŸvÜ(\Q’'½ó\+½ú/\ƒÚ>Àï3͘{[PÕˆˆLŽæªêδc.Á5”S`=.áÝÔ*ŒÞ²™K±¸>«GTõ³ú~HƘ¦³$tÓlDd00×ûöW™ÖScŒÙgmóGøÕ|""áÄ-NÅ•\¿ xWD~™vøX\eÄÙÀràÜšùcp‡~ œžáûóT5âm>Ë{­îiÇ^ü¸ 8WòõûÀÛ¸’¬þqÃq¹÷'ãã-‘éyïfß!"Y"rHc‹ˆH¶w|—½=6“™Í€˜f!"í€'pIc¯ã*HcŒi;–ãº6Ÿˆëý.ñü?u$ï n6cp‘ª>émï< üJDÞPÕ·Òžú3àU矅KR¾¼ü+íøïЈ&r^bò½¸äU]ãmâòW"Þ÷9¸®ÜSTõuoûÞö¹"òŽª®®ï|ûù3»:„ƒk·X¢ª¶Î¨j8 —ôýßÀ5âø‘¸\Õ_R«%ˆÈ)¸™À#€ž@5®kúÿ©êÿkɱ´& @Lsùp4îÚ%–tnŒ1m‹ªV{åÓÂ!'z»vˆÈ¿€ÿUÕå)O97{p·|x¯S&"³q•€®Ä1©þîÞñ`­ˆ¼œ'"]Tµ(åøËpeMŸhà-܈+·:Û>¼×Ϧ÷]ÜÒ¯øÁ‡wÜ6ùð®Ôê- œo2WjÖ_‚—‹ˆÈ"Ü’ëX+­­ùoàxÜ’¿|ÜÛȃª:³5×R,1Mæ5å¹—÷q©ªnnå!cŒÙªú¹ˆ‡[5—gq"0 ¸HD.SÕEÞá'{ëEdt†—Û‚»Óœî•:Nÿ0¸¸@Dzç_”)/ÅçÍÆœ¬WÕwë~‡5ÆŸaÜA VǸ÷w[Tõ H–k>·ôîbÜlÂ[k`ªú).øl nV©j¿ADúãºÁÏ‘GTõÕV] ±Ä4‰ˆ øw²þÛò>Œ1¦móµ?ô¾‘l৸¥µ‘gTµ—4pO=/—é®x]7©þü7ãqŸ·mk"×wW~]ÇÁ®q?]Ï1ñ:û-oIÞùnÉÜ·?ŠH—OS¢ª;¼ž`ÇUªú”ÿ|€Ë ÊÅͼ£ªÑ”ýqù=ÛÒ{nxûÛ½€BU-ò–ñõvf(J¯qíêå]ÛŒÚ_o§¯ì‘¸ÏÉ\àzŠ7†×Uõ˺^[Ußΰm½ˆÜü×·Äcêâå}<‰û|7­hŒ1æÄk¤v§ˆLÁ]4Ç'UÞ!gxßgR+w¤ŽmþÒ­¿ãî†ËG™ŽëIR׬‰¯Ê{Ýn ç .we[ÇØr¢Æñ+†õò{ãŠ9Þ,É•ÞöMÀS^ ð\´ÔBH_‰ÈŪºÔû~®pÀïŸd8ï-¸™„‰¸¼ÓŒ9 "Òx—oá[+RP‹ˆtÀT©>‘o§5P¼ ø®á_€~ÞökqŸÝÝåIØ/V‘X,ÓÀå}l¾kyÆóæçe´÷WxG¨êÎ:¾ê\6U‡½ÇéÀx\u¬‡úûâå| ‘îõ›2îõŒ»t7ǽ¿æ=nMÛ~!nÖá\Üÿ‡S½íw㪠ý ô®Â]¼¿("½½ãÞÅ]Ä_âÍ`$yE.Å%Á¿Q×À¼ãžÆÌ¿ðÎ5°ü%Ãñàÿ€o¿òÆÝ—3Ôx^Dr3œjnön4®ëûKu©Žqv‘ €€<ïµ¾ñ,1{DDήÆú}cÌ7‚ˆŒ‘K½»Ôéû†ãr1"¸jYà.”ŠŸ{kØÓŸ‘>éÛð&®"Ð4\â34¼üÊ·×Ï£VFo,þ5ÏC¸Ž»2•m‘v"Òs7ǽ_çvå}¤/g뜡ªÏªêU}Ï .®Æýÿ{¾ª~ªªÛTu.p3Ð7{à/|4œ™öÚ“pUÓ¦öuÉàL\žÊªz—w®uª: X•áøsp˨~§ª·zã.ôrž~„+\ðÝ Ï{NU¬ª«êWmÔ)"ËEDqÅþü8AU+óü¶Î³Û¼ºï~ÞÇo-ïÃc¾Æ%•? "7ˆÈÏEd!n‰U{àV½÷8WÎöSù£ˆÌ‘ëEä/¸€³vgÞåB\Átà=UÍkäÓï^®‘WEäFo<¿Ã冴÷Îñðc\<ùµˆ\!"?‘y¸åBgìθ÷½E¤PD rÜgbðwjÏ(¼¥ªëÒ¶„©ùžy¸¦‘§¥l{w“ó²´c/óŽ]ØÀx'yfØ· öó¼ÇL¯_Em|†} £. p½oÆ-3œÜêÍÜ|ãYˆÙ-Þ¤‡pÓ’KquÛ1Æ´}âîôžLa× Ä6\•£¿¨jå!ªúO‡[“? w‘Ã]Ä?¤ö5؆û»QÒÀ8âîFC†¥2žMÞkU§Œ%*"g?÷Æ~Š·k ð»r?PÕ¿ˆHp.ÉÂÍî¬Ç]ÖJ6T~"y»ú€¼ŸáØõ¶õõפïPÕÙÆ®< Tuƒˆ,ΑnªZè%§Ÿ¼™Zj¹þùÖfØ—é¹½Ç÷¼™‰L2ÍŒez¯ RÕdÕ0¯ÐÃÃÀu¸¼š¹u=ï›Â³»~Š»«PŽë÷iàxcŒ1m€7£ñ'ïË¿(U­jàyáÝ=ö.Ë2ålxUžJߞḵ¸¥3õ“gÚöj\rðmÞzýD]ã÷fï_öJøvŠXÒ³¿+RÕ«yl¦Ÿ¹ÿ³­kõMHÿÜ<œŠ+õ{/.—$‡šR¦/SyÞLcð·Ý‚×´2ƒ¯3l«Î°m·x=x~‰{`ˆ1»ˆÈ(vUºúánL‹cŒic¼‹ùÝ}Îî&ï5^©àƧÀÎ4MµÁ{”¾ÃËÅé¤Ï¦< ü·ìê^ï±·ìkwη)m_­1àfENÞ÷‚ê–æ—îÜ çnq–bÅ«¹ý(nšúiUÍ´~ÒcŒ1&“×q³33:¸7SñbêF/ˆ|8NDÎÆÏÔ$ƒ{—§nôf¼®Èp¼ŸHc#^{4ßq©÷¸lo_bˆi¬?á’Í6âJècŒ1Æ4ŠªîÀUÍêüKDÆŠÈ ù)p;›íHç'…/ qM)}¯âry¦‹È/Ed°ˆ < Èpüs¸dóïˆÈ?Dä$9PDŽ‘©"òÿDä¼ ÏÛ#Dd¥Wàáïgp¾ˆ,îÄåGý¾‰çhl –iWr÷ ¼jªZØÊC2ÆÓoæ:ýNó>•ç "PÕ7òø{q]¶oÚ««ûü‡â–ïp í¾Ü—~žmÀ͸kÏëq½>|Ëï©jA†ç¼ƒëF~(®šY½?R©jBD¾+oûßìZBþ)ð}ÜÌJêñ*"¿ÁÍÈ\ö’ŸS{)×î*ÁuÿM†}ï×Ö×Eý›Dì÷ÆÔGDúâþaèüªÞÜÊC2ÆÓÞ]Õi›«/pÕ¥æµöųˆ¬PÕ¡<~=°]UëMRon"r#®«÷!i»þ\¡ªïÖ~Ö7‡ˆtÁ]£×›ããUÊì T×—ƒãõY9—Pþ°¼¾ÏbJ0Í´üÊ[ÚÔ ¨Jï£á-¹:7ó² —gÀ•®ÌT¤À+¦p®8A°Ö+ŽzL. «j¢®±×ñ~મ¸„ýªºGÕ´Ú* @L¼_Ú—pu¹—ã3Ôî6ƳJ @~‹»[ŸîmëüBUïj­ñˆÈ,UßÈã[+Y†ûù=‚+“Z‰+Uv\ IDATüÜäQm@gŒ±ÄÔCD®Ãå~TG{Í›Œ1Æ´)ȸÔ;ô"2××£èÑ–Ê©·b2ø8ý.½ˆÜ[Vô;U½¡%ÇdL[fIè&#üÚûö'|cÌ7ƒª.Å­gïˆ[‚ˆÜ)"óD¤½ˆÜ%"Ÿ‰ÈV9ÚÛßQDn‘eÞöOEänéá¿®ˆd‹Èc"r{¦óŠHgyÒ[ÎäoûƒŸ’vìù?Ù$"_ŠÈŸ½e@‰H¯£ù o|+½÷Ñ9í¸áÞ¦ˆÈyAD6ŠÈ“u½¶ÿ3«c‰Ð3ÞcúÒ,cL=, ÝÔ""!\•‰àeà¾Ö‘1Ƙfæ7gó/ªOã–hõÇU *"€7£¼í¯ÀŸç‹È ªºÕk¦Öø…ˆÜ«ª[ÓÎy!®ÑÚK)ÛÎô“Iè"r„wžlà¸Næg'P;©Þ_Oÿp®’Ñ¿q‰â7“Ed\JÞÀÞÚyç~Wúµ¼þWünÛ÷ðùÆì—,1™Ü‚K¾*.oí$EcŒ1ÍGDކâ*ò¬NÙÕ×zxj¢¯ˆü|ü¯ªþ4eûOßwӼ͓ïé3—á–}5Ô ý¯¸Ù™ÓUõï\¿Ä£©]‰hÐ8EUßLß%¸œ_x_©Î.PÕ60–:‰H;àV Ü¿§¯cÌþÈ–`™¼u®?÷¾½ZUí®Ž1Æ´m—ŠÈ"r“ˆÌÅÍ`q• Óó?nÈPeh:Pˆ»ØNõ\÷è E$ÇÛöŒwìe©zåkOÀ5²-©k "Ò˜¼à^e£_f8~p2°05øðžó(®äêENõrS‚Ï#ߨêÊ&¾–1û›1I^I¹GqÓî©ê­<$cŒ1M÷ý”ÿ®V÷âfRÅpeד¼r©}€WUµÆ2%U‹È»¸ÎCqIÚÕ"²¸FDŽRU¿«ót×Dîïñ½ û–xcL5Æ{쑚[’ú€"RÕÔç.m`õ‘[«p=&2漘–'"ƒqËïÚy¸>-音°Ä¤º ·þwpm+ÅcLó8wñ®ªZTÏq…ªOÛÖÑ{Ü^Çs¶¥.ȸ7 ²Ìë 1Ø,n`¬þëìHßá<épýÄôãÙ¼¤[‹ËI½­ëý4HDnnÃåš\l¸­ODîÀå÷¤ŠŠÈ \3Ã¥ÀRUý¬¥Çgj³Ä "'á‚Åå}ìlå!cŒi¥Mø7Ýo<׫Žý}¼Çd`£ªKDäsà{ÞÅúx\bûhØVçù¼)ݯS6ûç½SUïi൛LD®Çu±^ |KU«÷ö9MݼºÛpM"CÞ6Âá0‘HÜŠŽÑÞ—ÿœ­xÁð1.èýª~Ø¢ƒßÏYbü¥Wóq9AsUõß­<$cŒ1ûU-ðzoŒ‘Ω°E$ —¯á/ëJõ ®âYÀ¸›[ -¿Xæ{b†}p¹+©Þ÷'{5‘àò^ÞÎMï¸mZŽ—sô#à&\túöíË/~ñ .¸à‰«W¯fùòå|ôÑG,]º”U«V‹ÅÀ·“½¯Ô×\L·|ž–aˆw7çP`=ð³V‹1Ƙ}ËýÀ¯€ß‰È÷S–iÝŠ+C;'C2û#Àÿà–bÞiL§pUÝ,"/g‰È·Uõàzˆx¯—~ü*y˜""?þ:Ë""}pU½^Iîî‘+qÎûÀ”ô|Ó2¼å|—wý:vìÈu×]ÇÕW_Mvv6@€Ã?œÃ?œ /¼€ŠŠ –/_βeËX±bË—/gÍš5$ÉËQÀó"2FUó[ú½ío,ÙωÈ8Ü®ª¯:‰1ƘýÒoIÀl`¼ˆ|ŒŽÆ%­ÿ<ý ªš/"ÿf×]æwã|?Ä­ÙBD^¶â*]}lÎpüL\o‘»Ù"ò îoÚ@à\Ùß& ¸L€±@‰ˆ¤ïWUÇ5ñ¦"r2ð¿À(€P(Ä%—\Â7ÞHÏž=¨¯k@nn.cÇŽeìØ±Ém¥¥¥|ðÁüæ7¿aùòåà‚š+pù$f/²d?æ-½z·ôê>U}©þgcŒiCÞÀõõHo˜ÉÿzdÚáU¶:€œŒÄ•Ú½¸·žÙ€ß²«A_]½?ju WÕÕ"r,p3.¹¼=n™ðï€ÿÊÒŽß."cq‰îgãš$–ã ª<‚«TåÛ Ìvw™ÍÃxK}ê°ºž}¦ Dä`\p™L0Ÿ4i·ÝvC† I·'-Ë:vìȤI“xçwXµj•Ÿ7bd ë1·ÿ‘?×ã–^i³ÆcŒÙx†ËóÈ:t(·ß~;'N¬uüž\ÏnÞ¼™Ç{ŒöíÛsÏ=÷°cÇ€7Tõ䦌Ý4Ìf@öS"27Í p¥ÆcŒÙˆÈyÀïCºté 7ÜÀÌ™3 …šçÒuñâŬ\¹’:H$ˆÇ“¨íÎ| °d?ä•2œƒ[zõU½2ÆcLk‘ÃqæÏ—L>uêTn»í6zôȸBp·UTT°hÑ"b±íÚµ#‰•••zˆ -ÀýÓ/pÕv`U¯Œ1ÆÓм<àJëf}ôÑÜu×]Œ=ºÞçîŽÏ>ûŒ>ø€X,†ªÇÉÍÍ¥ºº:µVC½jL3°¤‰È…À¸¦6q` ||¾/Ô ÷î.øK~¨ª{Ü ÖcŒ1¦)Däà9  wïÞÜrË-L:• ÕÆöH<çùçŸgçÎÄãq‰"Bvv6UUUdgg§æØ H °¤™ˆÈµÔß)!"k€Oq‰ÿ˜—¡~úÞÔ —tþ•ª.jÁócŒ1Æ$‰Ho\…´œììl®¾új~üãÓ¾}ûf;G~~>ï½÷………$ ²²²ˆF£D£Qrrr¨¬¬´¤…YÒ ¼I¿èׯ3gÎdóæÍäåå‘——ǶmÛÀå[ê}}+åéQù| |Ž+¸:¥ÙS³QÕEd$С¹_ÛcŒ1f7\ t ‡Ãüýïçøão¶VU>üðC6nÜÈÎ;|´k׎ÊÊJ‚Á "BUUíÚµK]‚eH °¤y‡«S΂ ˜0aÅÅÅPQQAUUeeeäççóé§ŸòᇲråJ?ãj–.LyÍ*YEÍÙ’Ï€uÚÄÚɪZ T7å5Œ1Ƙ¦‘ÀÀà`îoÞGÀªjý5¾ÙN¸øâ‹6lápU%‹5éEËÊÊøä“OذaÕÕÕ¨*Á`P(Duu5íÚµ£ºÚ]eggS]]ºÜË`Hó8 C‡Œ7ŽD"A‡ÈÍÍ%‘H$¿T•I“&QRRBEE•••”””PXXȇ~È[o½ÅªU«ü_Šv¸.³G§«LDüYÿñUÝÑ‚ï×cŒÙc^‡ëpEQ:§ì:8-å¸ÀÀ\P²TUÓXÑ´ ½ ÄA@yy9±XŒ¬¬,Àn#[·n%//5kÖ$g5²³³‰F£ÄãñdÞ‡¿ +‰“““Z†×’Ð[€ ÍãP€Áƒ#"lÞTÀ…çÞÁ½º0∌?„±ã'++Dvv6Ý»w§k×®¨jò—cìØ±\~ùåTUUQ^^ž L–-[Æ«¯¾J^^žlÜŒËq©‘ðgঽ±tËcŒi*q·™¿Ü ô×ú’K.á€`ýúõ|ú駬\¹ÒïJݘâ}ù¯±(ÀÝ©~ x@U Zø­˜æ‘Wn××®]»äLH4 ‹‘“““ü¾.Û¶mãý÷ß§¨¨€P(D  ªªŠp8L Hþ2,¿Í€´, @šÇ`€C=€/ó6±æ«-tëޑׯàÉÇߤ¤¸‚p8H÷8¸O† ïË1Çʘq‡‘•" Ñ©S':tè@·nݒɘ1c˜1cÕÕÕ”––RRRÂŽ;X¶lÏ>û,ùùùþ²€Ÿz×·øOÀcŒ©‡ˆœÜ îâpÚ´iüìg?«Õã!‰°råJ>úè#>þøc>þøcÖ¯_ïïîë}+)?CDÆ©jQ˼ÓŒ@òš'u…yê¶p8L$!;;›ÒÒRÚ·oO<OîK$äååñÞ{ï%Wœdee‘H$’‰æ~‡“˰ümÙÙÙÖˆ°…YÒ<…]Èg+ד“›Í™çŒIPUeû¶"vl+bûÖb^{åS=ü&ÑHŒ¬ì0ݺw`À ^ Þ—ÑcqÄȃñÂá0¡PˆœœzôèÁ Aƒ8æ˜c¸òÊ+ ‡Ã|òÉ'Ü~ûí¬]»Ü]" @Œ1ÆìDdðà\Ûi§Æm·ÝÆa‡F¦´Æ¬¬,F]£DQQ+V¬`ùòå|òÉ'¼öÚk”——ƒË¡¼˜¶·ß‹ivÉDUk|ùü™xœÛo¿“N:i·_¯K—.œx≜xâ‰,Y²„‹/¾˜²²2€sE$¤ªMË^6--€D"žyæ DÿþýÉÉÉI””TVVÇ)++£oß¾¬\¹’uëÖ$—T¥'šû³þ’¬h4Jnn.•••„Ãaâñ¸Í€´0 @š®?®’ƒ`ýÚítêÖ‘òêhÝŸbG(Dï~=éݯgrW<gga)…;Š)ÜQÊ—ÿÙÎ[¯ý‡‰§ #¬Ù”'‘H°eË–äzG °ÙÞ™1Ƴ›D$\Ëóè ®¹ÜM7ÝÄw¿ûÝëý÷Ô–-[xíµ×1bï¿ÿ>¸Wq¹!¦íH€ 0 àé§Ÿ¦¤¤„ãŽ;Ž‘#GÒ£G²³³ñóE£QÊÊÊØ±ÃÕàÉÎÎNÎpøGVVñx¼FÞG(ª1â炤°¤XÒtƒýÿðg@vì(£çAÝ©¬Úó1ºt C—ô;ÊŠ+xýÅÈÉÉ¢¼¼œŠŠ ²³³ÉÍÍ%‹!"~¯på 1Ƙ'"cqË¡Fƒ»(¼æškøÑ~Dnnn³œã¥—^"//Î; Õ¸Œiž¶Ù¦%%p8ÌèÑ£5j%%%|ñÅ<û쳨*C‡eРAtéÒ…P(” D¢Ñh²“y$!ÔH4÷s<Ò—\ùy©3%Ö¤eYÒtƒºuëF·nÝ(/¯¦_n6UõWkh¬M_з_wÀåƒtëÖ-ùKå¥ Ÿ5ËI1ƘFò:Zÿ˜ŽœqÆÜyçôïß¿YÎQQQÁ£>š\ÃFÓgSìÂ±í©•„ÇÉÉÉaĈyä‘”––²víZÞzë-²²²èÛ·/ƒNŸªJ$I~&€Z¥vÓgEb±Ñh4„dee¥Î®XH °¤é’%x Ë‚„²³©¬Ê\ W“ÿC÷kbÑ…[‹ØúõÊK*8ùÔ!€«’H$ÈÎÎFDˆD"¨*ÉYg @Œ1Æ´ ãúyünƒ âŽ;îàÔSOm¶ó|þùçÉ G°«,kZ @Ú™Ô«W¯?îÀëâ'¡ûRg8Âá0ƒfèС³qãÆdÕªÔŠW‘H$yF“Ë«üjX±X,„¤6%ôƒ”óÛç¨XÒt5*`múº€p8 ¡0U±Ýú' *ŠË)Þ^BiAiò—!3üWq°°°ÜÜÜä/ÙŽ;عsgjml[‚eŒ1f¯‘™À­xýøà6lØ@IIIòÆœ¿®? …’KiRØß¿¶áæÅ‹¿±xñâÉÁ`pH$…B|ÿûß端¾bÉ’%<ñÄ >‡¤øË«RW?9Ýÿù‰è–„Þ²,iš¸ÎãÉ›v…ˆWF šHˆÅˆGh4^#’ ؈iê² …TTT‰DÈÉÉ!‘H "lݺÕ?Ôò?Œ1ÆìmgÝD„ 0xðàÔ MRZZÊ’%KÈÏÏ'‰à_˜ú‰Æþ%¸å3þßD]8¶^¯–€Dd01‘HÈÉÉaذa :”²²26lØ@^^o¾ù&ýû÷çàƒ®Q Ëÿb±¹¹¹ÉÀ4 ÖÈ …BÉÜÙÔY‘ììlÊËË ~bŸ£`HÓêÿÇ Aƒ((¨ /­®q`ðžý¸<°+àþ±õ£x¿Ôœ ÆcZØp7Þ† B4M&…ûwž÷Ä×_Í_|Á† ’w¶S×ë§ÞáŽÅbÉ;Û),¤íQ¨„îÿ?hÐ  Dyy9[¶laõêÕTVV2vìX‚Á`ò9"B8N~>üeX¡P¨VÀ‡“ÉíÑh4Y +eÄšY¶ @šf0@Ÿ>}’ISeeÂYázŸÔ8»Êc 8¤û®­Þ/T0¤¼¼UeûöíþnK@7Ƴ·…:vìHvvvòâÍOöïf‡B¡ô*U©*7ndéҥɦºÁ`0¹^?½²‘¿|&Û HÛW« ¯ÏŸÝH$„Ãa<ð@úõ뗜ᨪªJî÷W„¤©‰D"ù9ò·Åb±Z¹ þgʇ -À¦©Q«º: È ×±¬j[$:Ø ¥¥¥ÉiG?½   õx›1Ƴ·%›Ç¥òï.ÇãqñxœP(DEEíÛ·OOOV*Z³f K–,IΜøkøS»W§—Mõ{a¥5"´¤í©€€ûUWW×èóáóN6פúŸp8ŒˆÔ\ý×ô·ùM ýç{,i€4M Û¶–ºÙ¦ü˜!HésK@÷gYRËÕ¥,¿Ú¡ª[k?ÛcŒiVÉe3É )‰Áà.ð‰Dr™T4¥}ûö”””‡“¬^}õU¾þúëä:~ùL  ;;›ÊÊJ²³³‰F£5ými3,¶«íI ©ŸŸE‹QQQÁÉ'ŸL¿~ýjIAAArV? Ö(¥êW,ª¬¬$'ÿö¥nKc3 mO­%XªÊ9çœÃªU«xøá‡ ƒŒ5Š£>šNvUMMBÏÎÎN£©]Ðýk¥Ô~~qƒÔæ…þ6 -À=ä•à»f@6lØIV³äìÒ©s6"$£öªªªd)º´tËÿ0ÆÓj\4~ðÁ<ÿüóL˜0cŽ9†8 Y.>õnu"‘ ¸¸8™#RXX˜l*èÏføw¤SÇåææRQQA(J&û”i,i{’ÁljðÚ¥KÆŽËøñã)--eÕªUüãÿ ''‡!C†pøá‡#"ÉÏW4MéK®üý~5¬Ô¥YþŒšª¦Î€œ."Tu]ëüHö€ì¹@Rf@òË2$ ïaâ‡ç€^€]ewýõ‹ñx!??ß?Ôf@Œ1Æ´„9 çwãÆãÓO?åá‡& 1räH†J·nÝ5..+++“UŠüž ~E# ¿¿?SYYINNNr½¾„dgg§Wܲ%XmOÏRêç$'—ã1‚£Ž:ŠÒÒRV¯^]#ø’Ÿ¿BhêLZjþPzÿóVQQ‘ ¨û÷ï?xóæÍKDäxU]ÓÒ?ý… {îPpIt MnD_ÝqP?—÷QZZJ»ví‚Á %%%©°,1ÆÓj-›éÚµ+'œpãÆ£¨¨ˆ/¿ü’çž{ŽN:1pà@úôéC§N‘U‹R—ŤV1òKÎÇãñä’«¬¬¬dn‰?SRÇe3 mOÆ$ôô¥|ñx<9S1xð`T•ŠŠŠä±©yA@òóá?¦~¶ü·x<žÜæ÷QUÚ·oÏO~ò“ž¥¥¥«ûöíûå¦M›ž^^÷z˜˜f`Èž pðÁ'—D]ÿãùúë"Þw=ÿYµâ’»÷ïaíÙ’ƒt3 íÚµK&Z…B! ؾ}{jÞçMx/ÆcL½Dd,p0™/ý€aĈŒ9’‚‚Ö®]ˇ~ÈGA¯^½’¥SYYYÉe1ñx<¹ +}©LNNÉ\IMZe- @ÚžIè™rˆüÿö¿D"É™/»ŸÏ‘¸úÁGjùÝÔ¥Yþg+;;;ySÜòöáÇӹsg¦N:XDnÌËË»ñÉ'Ÿ,‘ç€gUug ü|¾±,Ùs5Jðú:¨ç{8ªÃ¨¬Œ²|Ù–/ßBþ–rñÝÿ·±{7£‡“ÿ`Çãq***R—_mQÕMz7ÆcLDdÒ„ ^=z4ÿüç?uݺuuönð«««ÉÉÉaøðáyä‘Äb1***’ûý*Yþ2¬ÔŽçþ’«Ôät¿Ëµ7Û_º•rn @ÚžŒ3 ™þ»®}éM+ƒÁ`²Zh»ví¨¨¨ ++ ©±4+u9Ÿ# ¨¨ˆë¯¿>>iÒ¤àÈ‘#9è ƒèÞ½;7ÜpCÇÛo¿}jaaáÔÅ‹k·nÝVìܹóŸÀ³ÀÇöùÛ=€ì¹>ýû÷ϸÓUeṟ}5º‰D‚KùxéVÖ¯/¥¢"šñy©‚!¡]»`_L 9uRkU“Þ‰1ÆS¿Á}ûöåØc¥´´Tî¿ÿþäߦ%K–‡0`@²VêµX,KÞµNMHƒµ–aɃþ]m Fo‡ÔDã”Uvñ×6e,Ã[×ìG¦}@²ünjt?$777¹|ËŸI)i×®%%%É%X›7o^«ªg?õÔSòÔSO‡¿5vìØãÆŒ0`Ý»wçÔSO• .¸`¤ªŽ\¹rå­=ôÐNyŒ¼¨ª¥{ùçÖæY²ç–Sßzë-¶nÝJ¯^½j x`{z÷àu‹²bE_æSPXE"QûßιÁZ¯.ï$-}‚ˆ¼Œ[£øŠª.mò»3ÆcvYðøãõÕWÏïСC.ìºhìØ±#ÿú׿ظq#£Fâ¨£Ž¢gÏžÉJXPóï¡ÿ<¿˜JjÞ‡¤¤ñx¼Æ2,¿B–·Û?EKþ0L³i°zê÷éûüÙpÍ£Ñh2¹\D’Ëù²²²’Ií999”——'‹øKÊ橪¿¬ý3à7"ÒãÍ7ßœœsøá‡_0vìØöC‡¥OŸ>tÐAüú׿›;mË–-Ó^xá…x‡Þ(//ÿ7ðŒªÚMâ ,Ùsÿüü‹/¾èvÈ!‡0fÌ&OžÌĉ9rdò ºfä²³ƒŒ݃£îF"‘`Ãú2>û|'[ò«¨ªrk»t ×z`0˜üÅÚ¼y³¿9œê}!"«—€ŪZÞ¬ïÜcÌ~EU«KE$¸mÛ¶»ùl~YÔââbÖ¬YÃ;ï¼ÃÎ;2d‡r]»vM.¯òúUS{{¤þÝj¿ŠQUUUò8¿QaJˆ mS£’ÐÚç"~à …j•••É2ÎUUU´oß>™Sä/ꯡ·Ìý)à)¹ùäUýUóþèÚ6 @öª®‘ã€gãñøÐwß}—wß}€0qâDÎ8ã N:é¤LÍ’jéÛ/—ƒúæxuÒ«ùì³búôÉN=_ò¿‹ŠŠH$lÛ¶ €þð‡¬_¿žÅ‹SVV0¸ÆûŠˆÈJ ˜<­ªVªÐcÌnSÕ¸ˆ| 5/‰¹¹¹ ìð3# IDAT6ŒaÆQZZʦM›X¾|9UUUôíÛ—››[£¡n0L^¦V$ 5Jò¦V¾JÝ–2b×Ú¦ÝNBOÝço÷—ó¥v7÷·¥~fü©Á¬?SÒØF„^%¬7¼¯Eäà—_~y20ùè£>ã„NÈ„'ûû+++yã7xã7¸ùæ›9üðÃ9õÔS7ncÆŒI¯a^ç’-_II Ñh4¹üJDøè£˜8q"ÙÙÙœx≜xâ‰lܸ‘×^{Å‹óÒK/ù¿ŒS€[€[›éG`Œ1fÿÒ`å"ÿûh4J(¢OŸ>*++“ÇøŠ~ áþz|¿Suj3¹H$R«”ªÇ¶©Î$ô†ÏS¿÷Kí¦÷öð×öíÛ'—aùŸ­ÔÏQJðMø,yׄ/y_׉ÈáO=õÔYÀ'V­´& @šˆtþ ·ä) ЧO®¹æD„W^y…·ß~›X,F^^yyyüõ¯¥[·nüñœrÊ)Lœ8‘\Ïú‚ÂB@ûH8N.ÅJ×·o_¦M›Æ´iÓxûí·™>}º¿Dë,1Ƴg2^4nذ²²²dsÞôÄóÔžªšìNí'«û…~#?ç1µ™œ_!Ë_R“r @Ú¦:“ÐÓ¿Ï øÏKm&˜ú™ñ—\ù¥v+++k,ûó?Gñx<„ôîÝ»#®1[“óŠT5Èkêë|YÒD"r%pÐ ''‡k®¹†3f$;¶žyæ™ÜsÏ=<ùä“L˜0>úˆÂÂB yá…xá…ƒuÔQœ|òÉŒ3†¡C‡f<_UU›6mÜ/a»ví(++#''§FMt_,cÉ’%Œ;–—_~à«YmŒ1fÔºhôûwüéO¢}ûöüñŒ3†Î;×xbêÚ}¿i¡¡è_úËg2å}ø ý;×Íq×Ú´ª&'¡«jÆÏQjpá1ð\¿Q¡ß¼0u &L˜øüóχEä?"²ª¬¬ì«©S§FöîaÿcHˆÈO€»½ÿæœsÎáæ›oNþƒ™ê˜cŽá¡‡âàƒfÆŒlذ÷ߟåË—³nÝ:âñ8K—.eéRWA·_¿~L˜0ñãÇ3jÔ¨ä/O"‘`ûöí,[¶ pwŒŽ8âÿ·wïÑQ×wþÇŸŸïd2d& á*¡°\%ÊEºŠ—bñRµëžn]míÚ®¿ƒûûm•­ž]9ý®kOYuÕZ/eAÄV ¢üµ"÷p•€Â%’Éuæûùý1ù~w‚ ÄQËëqNŽ0™|33NÂ÷õý¼?ï÷H>ýôS ±"‡ÉÌÌ$--½{÷òôÓOÓ³gÏäVÁÍÀXcL‰!†ñ¼\""ò—á3'ä‰'žàرclÞ¼™ßýîwdgg3bĆê{KÞ8ì(¶´´´)ÃJž‚ž8ÇiS†•T‚0Ƥiã7N‡6¡{nllüÌÄs/Ìzƒ½nXÉ{мÕonHëÀgדŒ³ÖŽ ‡Ã¾Zn­Ý–žž¾mÚ´i§.;‘3¢r–Œ1_\tÑEüÛ¿ýcÇŽ¥¢¢¢Í2³çÒK/eÒ¤I<ýôÓÔ××3~üxfÏžÍu×]Guu5}ô6l ´´”¦¦&öïßÏÂ… Y¸p¡¿‘=‰à8«W¯n³}ܸqþ÷iii¡¦¦†ÚÚZV­ZEUU½{÷¦¥¥Å¯½êHLrÄ1•ÀaD›¤DDäóœò¤Ñ; ‡Ã1~üxªªªØ¹s'%%%\|ñÅôíÛ—ä¯MÞ*Jrm¾W¦•\†•\Rãý[ »Åãñ1ã­µõ_Ñë"g®Ýû‰N÷¹ä÷‘WÎwòJ™µö”eX^iiiñ––Ö&Yc ÐS‹Åf.[¶¬ ØÝº:²sΜ9ºˆ{@ÎÞÏ'++‹W^y…P(Ñ2ׄs*ÿú¯ÿÊ/ùK.\È»ï¾Ë„ ¸ð éÒ¥ cÆŒáâ‹/&³k×.6lØÀÖ­[©ªªò7²ŸlôèÑ<øàƒŸ¹½®®ŽÅ‹“››K$ñ'}F£þ8º¤»€ž­cê€j'""§áÂç×ç'x5jcÇŽÅu]¿¼7Ä›Ó\>ã…“ÇÉW¸ý²ãP(Ä·¾õ­QÛ·oßdŒù-ð'kí'©}Yä,œÕ&ôäÐ ‰= Þû(yP¥WfåíòîçuÃòÞoiiÿs:¾¨¥s7ZWG233›—-[¶ØFwÌ™3§¦ƒ¯Ç9CäìM‚Ä ŽP(Dzz:ŽãУGª««©««#oŠ322˜?>kÖ¬áñÇçø‹-¢_¿~ôíÛ—¼¼<233 ƒ 8~ýú±ÿ~öîÝË‘#GhnN” æççóÃþk¯½ö3jýúõ”••ѽ{wšššhhh ;;›¦¦¦ä+ '>çye€ˆˆˆœŠ@ÚsÒØÜÜLCCC›½â]¥öÂEò0¹äYÉÃä’˰¼ ~Æ~úÓŸÒ¿ÿAÖÚÿxÿý÷ÿcРAöìÙó"ð °ÚZ«:þ¯ŸSî'ò|ÑûËû:¯[ZràHÞãáuÈJ~y£ ÒÓÓÙ´i“ìþýûW·÷Á·Ž: ‹D",_¾üH<ßž––¶­¸¸ø4 ó´@΂IvÈÌÌ$++Ëÿ\,#??Ÿ‚‚êêêˆF£D£Ñä^åL˜0 &°wï^Þ}÷]?4¼÷Þ{Ÿ -iiiôìÙ“¢¢".ºè"ÆïwIÇyùå—ÉÌÌôïx-è¼ÚG¯ƒðéç<½Îò¥‘¿|:iô¾6¹äêä¶©^©ŒW†•¼Øk»ê•×xÇ]¶l]t `Ô¨QLš4©oZZÚ?ìÙ³çþô§?5;Žó†µö ÄZ[ñ¥¿JÒ§]9ÕŸOõ9c ®ë¶™%ãí)J~Ÿcü„õõõ~˜}ýõ×)))`È!;ŠŠŠŽœí“±Ö8ŽSàºîäeË–E­µ{€íõõõÛæÌ™Óð…8‡(€œk­5Æò¼v¸ø ƒþtÖp8L8¦GÔ××ûÄ # `À€Ü|óÍ@"DD£QNœ8µ–¬¬,"‘È);[%+//góæÍD"NœH,nx>½+Hååå”––z_òçSÆÖµþ°ˆˆˆœN»N¿è„òäéÕ^I•W>ã­p$wÃòêõ½U¯áKSS%%%Ÿüñ\Ö³gÏïŽ?¾ç\@ß¾}ÉÉÉáŽ;îHŸ;wî¬ÚÚÚY«W¯¶çw^éþýû_J€µÖZMRÿjœ¶ o{ƒ,$VÀN.Ísç3­½÷Y8¦¦¦†§Ÿ~šM›6лwï÷ÜsÏ›ô¼¶[k3Ça­½ ‰Ä—-[¶ÏqœÍÅÅÅïuÒ÷øFS9Ƙ^@1‰U‚c@^yyù)ïëýÒôz‡ÃaºtéB~~> Ÿ #øeœMvvö$ô¬Y³ÆfFÛôNÏÈÈ ¹¹™µk×òúë¯{«+N:L°FCrDD¤ÚuÒxºÏy'“±XŒ´´´ÏÌöpÇÉ‹222ˆF£„B!\×õWMZZZöìµMÀ1ßZºté•Á`ðêÑ£G_>nÜ8gðàÁtïÞË.»ÌFìÚµëž%K–œ0ƼF"Œ¼l­mw ŽtX‡6¡C"|cÚ ª0¬¥¥¥PA¤ÝZ§œ¿OkéÐðñÇŸòþÞëº~û\HÔ)†B!222ü0râÄ ¢Ñègʯ>OMM [·n%==£GúÓ?[ZZüºh4ÊòåËÙ¶m›÷eoÏž|(`¥MLïù"î\ä•ÌÄãñ6Ó«“‡W†åmNohh ‰P__O0ôëþ[k Þ÷)6Æä~ðÁÓ€ïôë×ïʉ'v1b}úô¡{÷îÌ;7ë_þå_æ?~|Λo¾évëÖmíñãÇ_"QªµãËxÅ×)›Ð½Û’WÊ’xå|ÆÖ®]ËsÏ=çíi¾ñÆ_»þúë;cX`m x®¸¸xŸwìY³êÍ­ΪU«Âð}þ"(€´ßo®Ý»w'‹QSSÓ`Û¶mÌœ9“üà\uÕU~+ÁSñJ¬ZûL“‘‘A—.]ˆD"Äb1š››ý0rºNZ¥¥¥„Ãaš››©®N\¨9¹KÈÑ£GYºt)•••MÀï€wNq¸t´IJDDÚ¯C'Þß½oÕ>¹%/ð™arÞç½c ¹{ÑiçXk‹ÅÆgáÂ…3#‘È•&L5zôhSXXHnn.S§Nu®½öÚ MMMV­Zõ1ß³Ö.íàë%§×¡ýDÉå|ÖÚ6sc¼ó1ï}ÔØØÈ /¼À[o½@^^Þѹsç¾<|øðã}ÖÚ}Žã|˜.]º°sçNâñ¸ÿCçuwhnnfëÖ­”””x!æ0ð°ÿ4OÏI¾j$""ò:eºW´i¿ë­jxˆC¡±X¬ÍÉ¥w±-éb]»¶îõø õcž1¦àõ×_Ÿ Ì:tèÌ¢¢¢ððáÃéÕ«EEEÃ/O‡öy•#±Xì”mœÇ!--cÇŽñÈ#PVVÀ\°ùÞ{ï}+wÆàÊwëëëK4äÌ(€|cÌ5$æ}\ ðÀ‰D¨ªª" ò³ŸýŒ{ï½—•+W²`Á>ùäüqüqÎ?ÿ|¾ÿýïsíµ×’››û™c744PVVFÏž=‰D"~™V("++Ëß R]]Mss3ÄÃáÇýnVÞ•!¯“CCC¯½öš?Møx øÜ¡LƘLk­R¹ˆˆ´‡ß†÷l˰\×%‹ù%Wñx¼Í•k/\„Ãá6mS½½ ^VR“–³:‘´Öžž2ÆwìØ1˜™““sM$É^8›ãJ»Õþœ²3]Qónóy¥}Þ šX,ÆŽ;xôÑG©­­%--­å»ßýî›·ÞzëÖNxì1àÅ™3g®ë„cs@NÁ“C¢äêfï¶K/½×u)++ã¼óÎ#SWWÇáÇHZZ±XŒÆÆF²³³éÕ«@€²²26mÚD·nÝèÕ«---?~ÜOä  òâ‹/²`ÁoC8cÇŽeöìÙ“‘‘á§õŠŠ ¶oßN `ܸq´´´Ð»wo¶lÙÂÁƒ9vìX›é°«W¯æ7Þð® ì~´gCÕ.`½Õ@DD΀1¦XpøðaÒÒÒN{¢xºrøðaŽ9Ò¦ Ëk[ï…‹––¬µƒAUÄu]Ãz}}==ôû÷ïgàÀ{~ó›ß¼`­­3Æì¶‡ÃáÝ“'OV—ǯ1cLà à ï¶aÆñw÷wÌœ9³MÀM~y]FËÊÊüá”±XŒŠŠ ~ûÛßRQQã8ñ™3g®ºãŽ;ÖwÂCµ®ë¾=kÖ¬å(àv˜H+cÌ,àHtS¸óÎ;¹ýöÛýýäoRŸ>}ÈËË#²aÃjkkéÛ·/áp˜h4Êž={˜2e ‘Hc ëÖ­ã‰'žàÕW_õ7Þ…Ãa&NœÈßÿýß3hÐ ¬µdddømÈÉÉaóæÍœ8q‚ÚÚZš››©««cñâÅìÚµ ?Ëÿ&Q~õy,‰à±ëK{1EDä/–1fð:À¡C‡üÑÞÕ×u9tèG%øû>¼ariii444žžîŽP(ä·äõJ·B¡÷ß?‡bРA»~øá?ⱺ®ë–[k·577<{öl•Ì|McŠ€{€«h½Ü«W/n¼ñFfÏžMNNN›÷ëºD£Q>ùä?°~ðÁ<õÔS455‘••U{Çw¼rùå—wxê½1¦ÑqœÅÓ§O/ýâ{K{œóÄÓx¸0ƒæßÿýß2dÀ)HòGSSáp˜ …Ø·oÛ¶mãСC466rçw‡©¯¯÷»5D£QJJJxä‘Gع3Ñz:33“¥K—Ò£G6eVX–Þºu+ŽãPUUEYYÏ>û¬·½ÄFóSM7?YŒÄÄ׃ú"ŠˆÈ9Ã3…Ä\)8@—.]Ú<¼?:tˆÊÊJ¿VrùÌÉeXÞ´tï ·W†ÕØØÈ¯ýk8ÀàÁƒw>ôÐC/Ñcw§ÊuÝݱXl÷ AƒvœþùÚù5cŒ ü/ࣅB̘1ƒë®»Ž!C†ø+fuuu”——ÇY¼x1+V¬ °°pï}÷Ý÷jAAAg”I …BÏL™2åÓN8–´R1æ÷Àß@"i?ðÀ <˜>}úøà‹BHòGÿþýéÓ§±X k-¹¹¹~+à—ryaäã?æöÛogË–-Ìœ9“yóæ‘––æÿpAbèàÁƒ‰Ì°zõjþð‡?x5³ûÿµã©6o·öC9+­{%W”——“‘‘ÑîàáýýàÁƒ?~Çq¼pþ ÝäUïßR¯ +øÇ ÜsÏ=ÔÕÕ1|øðÒ_ýêWËÎðy´ûŒ1Û·^sÍ5š€þ5bŒé üøÐû}РA̘1ƒ+®¸‚ŠŠ Ž9ÂÂ… ÙµkÆ;yòäwþóŸ¿:|‚ë8Îúüüü¥cÆŒ9ýp69+çt1Ƥ'€.S§NåÁ$;;›µk×RZZʘ1c:t(999455µ+€ÔÔÔP]]Mqq1‘HÇq…BƒÁ6AC–>ýôSn¿ývÞxã ±2eÊŠ‹‹5jŽã°sçNyæ™gX³f÷åï’¨™lÏ *`µµV¦DD¤CŒ1—“èž}ûˆD"g¼ ýàÁƒ|úé§mJªNµÂáµWÅb~–·dÑ¢E¼óNb¾îm·Ý¶ôꫯ.ëàS«rg[,ÛÞÐÐP¦¹_Ƙpp'0Ö»ÝqºvíJuu5®ëÒ¥K—úýèG%­M:*nŒ)™1cÆ»p,9…s=€¤“ذ¾ûî»1b‘H„þýûÓ³gOvìØÁºuë…B\tÑEÒØØèï9ù£ªªŠ÷ߟ´´4®¿þzjjjü­þýû“••Ezzº_/FY¹r%ï¼ó ,øÌã+((`òäÉXkyûí·9rä$ʨžVœæiY 8Úúßà€µV¿HED¤ÃŒ1Õ{öì!++ëŒöÄãqöïßO4õoó6Ÿ'Ïûðš³xeX^KÞãÇóä“O²cÇF޹uþüùË;ùiÖ[k?6ÆìŽÅbÛ®ºêª||9 Ƙaùùù·577ßPSSÓÀqœøðá÷ßzë­ï :´3V±j[§šïë„cÉiœÓÀ³¸bèСÜyçD" ±ï¢OŸ>ôíÛ—X,Ɔ (--eäÈ‘ 6ŒôôtêëëýðqôèQÞyçÒÓÓ¹á†hnn¦¥¥…ææfÿ#--Ñ£Gûƒ“öìÙÃ[o½…ëºÜÿýÞD×µÀ û·ø5ðñI· ÑÆ®ˆ[kUÓ*""_ cÌx` ÀîÝ»ýÍÁí-Ãr]—òòrª««IKKŒ#óºa577cŒñW@¼½ ÆÇaïÞ½<öØcþ@Þ &¼?wîÜ5Pn^2Æ”Yk‡ìµŒ1Ž1Æmjj𝭝—~ýúu;ÿüó{_|ñÅÙEEEéÆ˜žÆ˜ÖÚcLðlŽi­Ýç8Îs3f̨íìÇ+m)€s1‰r¦`(b„ L:•‚‚ÿ>ôïߟÜÜ\víÚÅ{ï½GVV\p¹¹¹|òÉ'¬X±‚ŒŒ ~ðƒ`­mo¾ù&  wïÞÄb1?|¼úê« 8éÓ§FY¾|y›ð±sçNžzê)H‹ŸØXnI”Zí¶ÖvÆ/Y‘3Æ\|PZZJ^^ÞmBw]—²²2®–W–ì•ayíwÇáèÑ£<òÈ#ìÛ·€Q£Fmºï¾ûÞ …B½Jm]×}û£>zmÞ¼yn%"gHä$ÆLþ70‰Dù]»veÊ”)\~ùåD"¿EîyçGaa!¹¹¹lÞ¼™Õ«WÇ™8q"¡Pˆ÷Þ{Þ½{3cÆ Ž?Ί+hjjÂZ‹ëºTVVòè£râÄ H Büod­µöðWñˆˆˆœŽ1f °`Ë–-äççŸÑ&t×uÙ³g¿Úáº.ÖZÇñW=b±7nä‰'ž ¾¾ž`0Ø|à 7¼~à 7ì脧ЋŖ\uÕU›;áX"r@>‡1f80—Dû·t€ôôt.»ì2Ÿˆ·ŠÑ½{wHAAû÷ïçƒ> ¢¢‚ /¼)S¦PQQÁªU«ü_´ÖZÊËËyê©§¼Ò«=Àý@ð®Z抈Èב1& ø>ÿüóLš4éŒöXkÙ½{·?cË›xîº.@€–––/_ÎÒ¥K±ÖÒµkת»ï¾û¥Ñ£G넇_Ù:TîH'KDÎ’H;cz?î ±)c Æ ãŠ+®`äÈ‘~¨HOOgÔ¨QôêÕ‹ôôtŒ1”––²~ýzÿ>ÖZ>üðC–,Yâu¾*æ›­µZ‘¯-cÌûÀ¸¼¼<~ñ‹_põÕWÚU†e­e×®]~øhjjò§ ×ÔÔð_ÿõÚ8uIDAT_lÙ²€áÇ—Þ{ï½+²²²:cܶp8¼hòäÉp,é3Ð: ç&«"C¼ÛûöíËÔ©SÛì(**¢¶¶–M›6ùÁ£¾¾žçŸžõë×{_¾–Ä@ÁõÖZm€‘¯=cÌ_KItlô±ÜrË-dggnD÷,oó¹7€pß¾},X°€ÊÊJ@|úôéoÿä'?ù¨«Ç_›5kÖÛ$öWŠÈWLä,µbš Ì€œœ&OžÌ¤I“ÈÌÌ$‰ …¨¬¬Äu]Ö­[Ç‹/¾è•\ÅçIìûØm­]÷U=‘3eŒ‰èÜx‡™3g7ß|3}ûö=eI$ºgcü’«µk×òôÓOÓÜÜLvvvõ]wÝõrQQQg”IEƒÁà©S§îî„c‰H'Qé cÌPààF  )**bÒ¤Iäçç³nÝ:V®\IEE…÷eGH”^í"±ú¡ÿ""òcŒÉ~ üÐÀqÆÇM7ÝÄ„ ÚtÀضmè|õüóϳbÅ øñ¼yó–uïÞ½©ÚAkí3ßùÎwŽw±D¤)€tcLp'‰6ºy§¹[xXT­µ§¹¯ˆˆÈ7†1&¸ø9ðWÞí………\sÍ5L›6îÝ»°qãFNœ8Á‚ Ø»w/Žã¸W\qÅ;wÝuן;ã±Xk×}úÑÎ8¶ëº»ÓÓÓN›6­3‚Œˆ|É@DDDä+ñòË/géééùÖÚ×u{8ŽS`­Íjç!l<_µ~ýú×çÍ›§Z"ß """òµ²dÉ’Œ¬¬¬×u Œ1=¬µÞ»z÷1Æ4:޳xúôé¥_åc‘3§""""ßË—/Åãñ¼ôôô,`¿J®D¾™@DDDDD$eœ¯úˆˆˆˆˆÈ¹CDDDDDDRFDDDDDDRFDDDDDDRFDDDDDDRFDDDDDDRFDDDDDDRFDDDDDDRFDDDDDDRFDDDDDDRFDDDDDDRFDDDDDDRFDDDDDDRFDDDDDDRFDDDDDDRFDDDDDDRFDDDDDDRFDDDDDDRFDDDDDDRFDDDDDDRFDDDDDDRFDDDDDDRFDDDDDDRFDDDDDDRFDDDDDDRFDDDDDDRFDDDDDDRFDDDDDDRFDDDDDDRFDDDDDDRFDDDDDDRFDDDDDDRFDDDDDDRFDDDDDDRFDDDDDDRFDDDDDDRFDDDDDDRFDDDDDDRFDDDDDDRFDDDDDDRFDDDDDDRFDDDDDDRFDDDDDDRFDDDDDDRFDDDDDDRFDDDDDDRFDDDDDDRFDDDDDDRFDDDDDDRFDDDDDDRFDDDDDDRFDDDDDDRFDDDDDDRæÿÇFÙŽ‡€ÇIEND®B`‚lasso-2.8.2/docs/lasso-book/figures/PaxHeaders/sso-brws-art-4.svg0000644000000000000000000000012714404126114021615 xustar0029 mtime=1678814284.99374859 30 atime=1678814285.665752404 28 ctime=1678814323.1859657 lasso-2.8.2/docs/lasso-book/figures/sso-brws-art-4.svg0000644000175000017500000064765414404126114025107 0ustar00bdauvergnebdauvergne00000000000000 image/svg+xml ServiceProvider IdentityProvider 4 SOAP 1 HTTP 2 HTTP 3 HTTP HTTP 5 lasso-2.8.2/docs/lasso-book/figures/PaxHeaders/slo-sp-soap-3.png0000644000000000000000000000013114404126127021412 xustar0029 mtime=1678814295.08180586 30 atime=1678814295.029805566 30 ctime=1678814323.173965632 lasso-2.8.2/docs/lasso-book/figures/slo-sp-soap-3.png0000644000175000017500000014625614404126127024701 0ustar00bdauvergnebdauvergne00000000000000‰PNG  IHDR ¡™Ð< pHYsÊ&ó?tEXtSoftwarewww.inkscape.org›î< IDATxœìÝy˜Tõ•ÿñ÷©¥7YYUe1¸"qÁ M0Æ$—$N4ËDc~.q~Iœßd&‹“ĘdŒ1q4câîFeÜqeA•µ×ZÎï{oq»¨nzSúózžzªûÞoÝû­~º9õýžsÌÝé ‰®ž€ˆˆˆˆˆt @DDDDD¤Ó(‘N£DDDDDD:é4 @DDDDD¤Ó(‘N£DDDDDD:é4 @DDDDD¤Ó(‘N£DDDDDD:é4 @DDDDD¤Ó(‘N£DDDDDD:é4 @DDDDD¤Ó(‘N£DDDDDD:é4 @DDDDD¤Ó(‘N£DDDDDD:é4 @DDDDD¤Ó(‘N£DDDDDD:é4 @DDDDD¤Ó(‘N£DDDDDD:é4 @DDDD:™™U˜Ùp3«î깘YU8Ÿž]=Ùù)i#3;ÆÌn2³£Zù’%ÀE7«¦Ìl3ëÓÌé£ÂùœŸ0³>fVÕó“îCˆˆˆˆHÛ%&FwõDZp ð‘™•µrünÀGÀtØŒ¤[JuõDDDD¤k¹ûLÀºzÒ=(é@f–ŽöÞžhÅkF‡ÀbàYwÏéô–Iàh`0°xÊÝs±±C]Âo÷2³Løõ:w_n³¬u÷MfÖ#œ/@/3»õ²ð>¸û;ÍÌ÷pîo»»oëýJ÷¢-X""""Ä̆/7sÍŒïefwo·¿f¯˜ÙÞEÃÿ/AÞÆ1À|àAàwÀãÀ3fÖ;6ö9`jøõÂðuK€KÃcGÑ4ä$à™ðë/ÄÆ/z?Þ›â÷Ð#¼Çí >¤ """"ÀÌ’À_ òB®vöžþ«Äøð7`:Ap±0øÁjÄL3«(q«?+£ÂëßÞ3r80+üz?‚hpC3Ó8"üú¶ØøÀ&à×ÿ¼ Äk?O¤ü¦™kK7§DDDD¤cL~çî?t÷Uî¾ø2Á G±Ó¶QýØÝ¯q÷·Ü}»ÿ ø&A@ò¹¯»Ýݯv÷áõ¿¬¦DÜ}9P~û¶»/ ëJMÜÝ7Ñöª±ñKí`ÿç‡[Ìâ.6w´ôÑîKˆˆˆˆHÇ86|þ}ü`¸-é÷[ç´RãC÷†Ï“Kœkò}wo ØæµÕö¨ö¾‡›VuNŠŽ›ÙAA×mî^ÓÌË¥›S""""Ò1†„Ïo—8·´Ä±(Ñûy3û(þ`ËŠIÿ¯[YâØF‚mPé@-M{™D_ßÔÁ÷–O0UÁéQvkËÛ&Â×\d›SªêT¾Ä±çîëÍìvàËa2ú‡ÀÙÀsîþzWÌI>€ˆˆˆˆtŒáópàý¢sÅ­ X)™<ãî¯vÀ|¶7 jÍø +V]´ú!-Ò,‘Žñpø|~ü ™p^‰ñ Ÿ/ï ù¬ Ÿû´rü‡AÈ®Í p÷9À ïñb`=pgæ(Ý€V@DDDD:ÆCý7Î7³•åq«€ïÃJŒÿ;A/χ%yÿ‹ ÷£/A‰Ý/TÔºç37|þ™™ý ÈóÜ}~©ÁîÞ`foSÍìR`Uxêo ý5A“=€ÿr÷ÚœŸtZéa¹Ú3€—€kÏçŸ.iaüáól‚­[󀻀‘l vÄï ú…œ>ß ÌØÆk.$èÞþ³püATÜ@TÎW½?d›L *EDDDÚ&ì:ÞøÀÝ7K4Ü“ bÕ3@š „íGî¾¾Äõv%h&X |,q÷%Ecú½€åîž+:7ØÅÝKUÛÂÌúäk¬s÷ufV Öºû¦ãËÂó)`Y,Eçzﯹû¤f~D" @DDDDd‡™Ù¿?>çîÊÿmR"""""Û%L¤¿`ç_*x+^‰)Eˆˆˆˆˆl—p[Yh^þÉÝuí¬ä“BˆˆˆˆÈNÊÌöŽžp÷Å­¿p4ðˆ»—êà.Òf*Ã+"""²ÂDîYE‡7lGzø“»7×Ѽ³HÐð`›0>ÿY‚÷!ÒîT†WDDDdǤƒ :¯ e¥mïG[ñŸùƒ ¶Gn0³ý‡€!ÀZ ¸ø¾™áîO„×Ù5¼Îà%îû3à ‚îäÐLˆ™ ÜBH¼Îé;ÀïJ½3;¸› XYAPýêBà*3›êî/dž_L sd®6üP"ÊéG†ÏÅÈ/z»ûîÀéf–"øÏýnÀyî>ÀÝ÷N î »žC¤¼œöâ(0³½‰À=ÅÝØ‹Æ ~^gŒ»ïOXÜD„ü 8ÔÝ÷t÷½ ÖþvJ+.Žq÷êðúO77'é^€ˆˆˆˆ´M¥™ ‡šÙÕÿ‘Ϭ2Ľ |ÝÝkÜ}3p"°?p›»Æ»û#ÆûlÙ"¬ªõ'`oàˆ¢kŸð‡mÌ÷  ø®»/¯ëÀÕÛ¾Š] T¸ûK±ù½\ìL-zM¸ÒÝÿŽÍ»{Ý6æ%Ý„‘¶, /ÿ l¾àî¯}ÈÝóEÇ¢@â®×¾3|ž;vKø|nt \ ùÁö¨Ç¶1ß áóßãà äo%ÆÔ+ÌìSfvpô X`«W±âÅ"€r@DDDDÚêM‚Üò7Þ¸{C‰±+K>¿[âÜŠðy`tÀÝç™ÙKÀ™fvY¸²p$0 øQ‰§X`]´ ÓÌýâv'X1y³…kV}ß|°yH7¥DDDD¤mÞs÷ß´rl®Ä±úð¹g‰s=‹ÆDn~Ln'X q¶½ý  ØÅÌ%‚•^%Æ7V‡·pÍ Eßç‘­h –ˆˆˆH׊V(qn\ø\\=ê‚@âܰ|ïggݽ¥UŠøýÊ€}KœSâØ<‚U“œ»/mæña+î+(éj'X¹ÔÌzDÃêXW„ßÞAøþûò3.z°uÂ{sî Ÿ›T¼2³¡ÀçJŒVU~bfÉâ“fVif•­¼·ˆ¶`‰Hë„ͬ†4“Z ,q÷Rû•»„™] q÷ó»z.""ÛÃÝ—›ÙõÀUÀl3û Á–«sr;þë÷‚•ë€:¶$¬oË_'óÃÕ“{Jÿ AÙàÑEãïN%hBø‚™ý X¾æàLàÓÀ­¼¿ts @D¤Ef¶ð{Jìý5³·€Ï¸ûë>±­Eé­""%KðöU­[Ž-ΕÀݯ6³5ÀåÀ/ÃÃ?$0Jyx™ üAw/uíšð¾›b÷Ê›Ùt‚’3 V=6…ß¿DPú·&6ÞÍì ÀsÀ??‰])A ÿ@jA"¾HI¦ü iŽ™UÔ„Hð‡é¯|:÷Uw¼Ë& »úöw÷Ÿwõ\DDÚÂÌ4 \íÖÛó^U}FV»{c+_SM¬¾º™J_"-R""Í2³‹:ãÞàî—53¦¬µ´DDDD”„."->¿ÔÜ€RÁ‡™}ÚÌî1³wÍlµ™=mfŸ/1îŸÍìN3ëmfß5³7ÌìC3ûŒ™ý·™•\Í0³´™Ýff?Œ»ÎÌn.1¶ÊÌ®0³çù,3³‡Ììœc§‡çÞ3³Ufö°™ÐÜ{‘í§DDZíá=ÃÌÊZó3û ðp(p?p+ÁRýÿ˜Ù÷‹† Ìþ|˜KP ¦0‚Š0£JÜæ$àlb{š r@N+šK/àiàßêãßNlYN°Ï:>öúðÜ0‚j3w$Ý?hfçµæ½‹ˆˆÈ¶i –ˆ4+üü\‚•ÀLààIw_^bü~ÀëÀàwßOäLƸû‚ðøòHæG»ûšØµ>MP¥åßÝýŠ¢ûÜœ u÷•á±'Ãk÷û p!ðÜýGE×èî«Ã¯ çøùhU',‡ù$A­ü¡îþÑöýEDD¤˜V@D¤Yî¾˜Ü .&¨v²ÌÌ^)±=é |; >Âëd€ïüÎùl‰[]>BOK€/ÆëΛY?‚@æ‘(ø(%¬I°¸¾Ä{[ûö«+$_o)s÷Íák{„÷‘6R^i‘»¯Î WŽ#ØuÁö¤î5È:,|>ÆÌ&]ª"|Þ»Äm^.q_7³[ ÊOOPnàó|ÿPüš"c¶Z=çÛ^ê=Œ ää—̬øÜn-Ì[DDD¶“i•p5àþðq™] üœ F}€Ty ¹œ‰&µèc>hfü­ÀµÀ¹l @ÎÖÛÆ”{†Ïïoc@o‚ æ¢fÎ/%¨á/"""m¤DDvˆ»ß`f×û˜Y¥»×ë’Çj¦!ÖöÞcY˜Ûqš™õ&ÈE9¸ÉÝë·ñò(_cp+nµ¨r÷;>[‘®æÚKЙ|A‘7ª.nÅJ°H§Q"";ÄÌR[œòÝ€ž> L%¨"ÕnŽ&èÖ»oìØ¶Ì6“Ì,åîÙÆ>K°Íl¼»?߆¹Šˆt:3;ƒ Úß>Í ùÈÌž^/•È»é4JB‘f™ÙWÍìf¶GÑñ à?]€ÇÂ$s€ r)~bf½ÆÌìH3ÛÞU†» ¶mýð`¡»?·­…sú%AYÝŸ†S|>ccßþÈÿ]ÜŽ{‹ˆt3üˆ`eØŽ:ê(¾ÿýï3jÔ–ÖI™L†¹sç2gÎ^~ùe^zé%–-[–f³šÙmÀ—´]K:šú€ˆH³ÂUƒ‰AÃh` A“ÀåÀ‹Àïãåvc¯|˜@Єð‚@ä>‚“¨Ïƙմ® sHš›ÇX‚Õ€Ÿ»ûªc.ºû¿Ogg@µ¥yÿìîÝŸ oÈ!@Aû›ÍŸv÷|sséhfÖ‡àC¡&ØËÈ‘#¹îºë8öØciÍÿéÖ­[Ç믿Îk¯½Æk¯½Æ«¯¾ÊŠ+âC¾ãîÿÑó‰(ù ? º¸†`;ýúõãŠ+®à‹_ü"©T°¡eGÿOwË-·på•W’Ëåæ¹û˜v™¸H3´KDDDäcÊÌŽ!Øz: ¼¼œ¯|å+\vÙeôìÙ³å·Bmm-k×®eäȑ̟?`d›/*² @DDDD>fÌlOà?€á÷LŸ>k®¹†Áƒ[S]|Û^}õU{ì1zöìIyyyt8Ù.i‘‰°Êàw€ï䢱ï¾ûòƒü€£>º]î‘Ïç¹óÎ;ùè£Øe—]Èf›T)×Þ|ép @Dº3›BÉT²z³T2yg3³^À2àwÿZ+Æ7»û¿tðôš›C?‚DúÞÀJw¦+æ!"Ÿ|fvAYðáÕÕÕ\~ùåœþù$“-/L´6ÿã½÷Þ㡇¢±±‘d2I&“¡¼¼<þz Òဈt/?F•8^gfÿ\ÛÅå èCø©_+$¶s|» ý;|Aµ-‘V3³ãª[H$˜1c×]w}û¶_ ¢§Ÿ~š%K–ÉdpwÜÊÊJjkkãÀH‡S"Ò=FÐÁ<|Š _ÆÕår·§ÏF{ÛLP÷“Ðoc7à#àà=‚ê4""ÛÅÌNî'̽˜0a×_=£Gn·{lÞ¼™G}”õëדÉdÈår¤Ói܆†ªªª¢ XüméP @Dº§—Ý=úkó¼™-.¢DbfìT¹û›Eçv'hNø¾»ohˤÂ9Íiî¼™íÎã#wÿ 5× »¸÷Vµf~fÖ#¼Çjw_ßÂ\IÐi3Û "²Ì¬ ø4hÿú¯ÿÊôéÓ ~å¶¹sç²hÑ"Ö¯_O>Ÿ/¬z444àî”——S__O"‘ˆ^¢ép‰m‘nà)‚O½FDÌìC3û3›Fй|°(l쇙lf €•ý>4³ûÌlhì˜ÙGföŸ¥njf§‡ç¿~ß+üþWEãfv=°X¬1³YÀ æÞ™}1 ¬Þ%ÈùÀÌîóFâã. ïy´™ýŽ`õe!A¨ˆHG: èkfüñäôÓOo·à#›Íòä“O2oÞ<6lØ@>Ÿ'™LRVVFcc#étšD"A&“¡²²2žˆ®D:œV@D‚ÆV ‚-P‘>À¡ ÁêÄ=á÷Íå€ü€ ˜ ü ȬÖÜQê͘Ù7 ò3æt4Ÿ|if‡Æ:¯W„÷üÁÞïkÂ÷&"Ò‘8è ƒ9rd!!<•JÑØØ¸Ã]»v-óçÏçí·ß.äz”——“Íf ÷ˆV=Òé´V@¤Ó)éæÌ¬ øQøíãE§÷Îq÷?ÆÆ'€Ÿü‘:ÒÝ„§þnfï‡×º¸<<~ ðcàdàîØu'¹ûªæ·;AIʹÀqQcf÷O—?øÀsÀdw>Ö{ÀÌ7>¿,zi 8ÐÝké•»îº+ ‚¹Qž@EEÙl¶ÕU®V®\ÉܹsYµjË¯ÕŠŠ êêêH¥R˜”——ÓÐÐ@>Ÿ§¼¼œL& W"N[°Dº§;ÌìN3› ¼MðòÕUXâV·M˜ü-|Dnj€é±c·YàÜ¢±_ øOÿ-Û˜ë´pÜ/â+(îž~^bü üg,øˆÜ Ô>Å~¡àCD:Yš–Ðuw‰”••Îe³Y’Éd³[´r¹ï¾û.³gÏæý÷ß •JV8***ÈçóäóùÂ6¬²²2ÌŒL&C:n2'‘ޤ‘îi8Á§\9‚­U¯¿v÷5EãÞr÷â?Fû„Ïs‹/êî5aÞÅ3Kº{ÎÝW™ÙCÀ‰f6 vs ¶9Ý·¹î>Ï/qn^‰cQé˜o›ÙÅÍ\³Tá7KéH[ ñïÝl6K.—#‘HËå Û§R©‰D‚T*E.—㥗^bÞ¼-¿+**hllÄÝ©¨¨(¼&Za‰¯ŠDý@¢ÛwÊ;—nMˆH÷tX¬ VK6–8}LVÓÌkjVWS«'¬züÔÌ~Y"/¤XY ÷+u¬2|~(Õ\q)AÙÜb]ÞˆQDº Û­Ö¯_OUUW”d2òù<›7o.¬VD=Bþüç?¶\™eee444N§Éçó466RYYI]]Éd’T*ECCC!0I$Ê‘N¥DD¶W´‚1¤™óCuEÅ}«ç?eËv¬?lçý^.:·g‰ñï‡Ï¿w÷GZq}‘®’‡ ï`Ö¬Y,_¾œÉ“'3|øpzôè±Õö,€úúzjjjH$ÔÔÔðþûïãî…ÞQŽGccc! ©¯¯/ä}˜Yáëh\¬ˆépÊ‘íõPœnféø 3› ìNQrxŒÜNP!ëPàóÀ¦Ä¹RÇ¢ ãœV\[D¤+5Ù‚uÒI'1eÊ^|ñE~ô£q×]w±xñb6mÚ²@Uµ¨©©áÃ?Ą̈¬¬,ôùˆäTTTŽ%“I²ÙìV%yãséHZ‘íâî›Ìì7ÀeÀoÍìkî^kf#ß|zö“/ýp Aª•±Zã³Ìì>à/îîfö9¶Nlx ¯ÉÍìàzwß `f}Ïïºû½­¼IfV Œ ¿VbªÍìàðë îþV[î!";½&+ =zô`̘1Œ3†úúz–-[ÆsÏ=Ç|Àˆ#6l}úô¡¢¢w'ŸÏ’Ó£-W¹\®ãQ___.¢ŽçµµµMz€Dã¢9 é @DdG\IÈ~.p¶™­!è’.s÷'‹_àî/šÙ<` AU¬âêZ%…ÁÆÙÀcÀÀGf–ª Jýþ´Äø3V\¾|×ÌVôéKðÇõ‚íË[A°wtìØýÀ)ípÙÉ„†TS€Dr¹Éd’aÆ1|øpêêêxçw˜;w.Ùl–<>}ú‚ °Â‘H$H&“466‚‹d2YX‰K§Ó…U Ò™€ˆt/ßzѺ%öÏQ:Y›°‰ß©fv pA#ÃåÀ_Ý}I ×üAU«Íôþ¨Î$hl¿ß[f66|ýH‚¼» ÍWtjÿ8ÁÌŽŽt8_<ìîïÆ†ÿ 1}Q ó.eE8׿4ÛÛDDº/3;jܸq 4(ñÄO¬zqÀÖåxÝL&ƒ™1dȆNmm-fF}}}“íX ”••ªYE‰èQ5¬\.WÈI§Ód³ÙBúúúxy_ Òဈt#îþÐvŒ½«cgëæ…-x¥…ó ä}Ý}#[7¤¹ñákžžÙÆœ [ÓÌë6´to‘fwüñÇ'?üpª«««ï¸ãŽB²`ÁúôéCïÞ½ A¼$o]]î^H Å¥v³Ù,•••ÔÖÖRVVF6›mr,• þ )Ùl¡m’ép @DDDD:Ïooºé¦sžzê©! A±À(X³f 7Üp{ï½7‡v{íµWÉJXñ-[ѹxå«d2I"‘(”ßw/ä‚D«ñR¼!%¡K‡S""""ÒIÜ}9°§™ ~L‰ŠOúÓL˜0·ß~›yóæñØc1tèPFMß¾}Ùe—]â×)G©>!@“à"›ÍzD+QÀÑÐÐ@2™$™L¶ke2­€H§Ó,ùX0³)À±E§zÃG4v5ð0'öØìî›:~¶""í¢É Häˆ#ŽàðÃçÍ7ßä‘Gáî»ïfôèÑxàôíÛ·0. B¢¦ƒñŽ(1³BÇóâ\(pÉd2ñ> "Nˆˆt)3;€ ð8!üžÓN;sÎ9‡ŠŠ Þzë-^{í5æÌ™Ã¼yó¢mSÂG\­™Ý \ëîïtæûÙMV@ŠW8FŒÁ~ûíG}}=K–,aöìÙ¸;‡výû÷/Œ‹*[566Žh;V>Ÿ'Nú‚Ä;£G«"‘T*µ¿™ýØÝ¿Ói?év€ˆH—0³Ýÿ |™p;衇Êu×]Ç!‡RwÈ!‡pÖYgP___F^}õU^{í5–-[ÿ£]^o¼™Mt÷uö†DD¶_‹IèQ÷ó|>ÏСCÙgŸ}hhh ŸÏS[[[›J¥ G6›%—ËV;Òé4™L†|>_²òU¼G@ïÞ½©¬¬ü3üø_GF"í@ˆˆt*3ë\| Ø`Ï=÷äšk®áÔSO-$M–RQQÁøñã?~|áØ† xýõ×™3g Ì! IDATøÃX¹r%Àþá=®ìà·#"Ò%“ÐaëÕ\.GMM ¹\®I€UÉŠ‚‹²²2òù|aVmm-©TªÐ”0ÞùO>Ÿ/”ß-//‚„õâmXù|ž¹sç²yófú÷ïÏUW]ÕköìÙ3î¾ûî?\xá…ëz÷îý¬™]afwüGvVZ‘gf7&’§R)Î>ûl®¼òJúõë׿ë»;þóŸ©©©aðàÁ¼õÖ[}Ú|a‘ŽU2 }[«!ūĉD¢° +^í* .Òé4¹\ŽL&CUUµµµ…mXÙl¶IþH]]¿ùÍo6¦R©Å‡~øA|°1‚êêjN?ýtûÒ—¾tx>Ÿ?üµ×^ãCY5gΜû€GYî¾¹V²Q""ÆÌú?.$\qÊÊÊÈår…’¼uuu¤R)Òét¡aüXCCC¡³zmmíR`|CCÃf6àñÇ?8y¿ýö;éðï5j»ï¾;C‡åÇ?þñn½ûî»=öØcÙÊÊʧêëëïîQ!i‰iwf–.&H2ß`=öà{ßûgžyf»Ýç©§žbÞ¼y¤ÓéÂðD¢°³TI“"òq·U:4x4 $“ÉB5¬x©ÝxÞGccc¡do}}=UUUÔ×תe…¹ûáõ×··šYráÂ…€“«««§M˜0aìÁ̰aÃèÝ»7gœqFêœsÎ9¦®®î˜9sæülÿý÷_¹pá»û€§Ü½p "ÒnÌ,L"Ønõ)€ÊÊJ¾þõ¯s饗ö·U}}=÷Þ{/›7o&‘HËåH¥R¸{|Dˆˆ|ܵ: ½Ô¹èx6›%™L6I*F«"©Tª°*­€D + 4ÓˆÐÝsÀìðñ]31kÖ¬iÉdrÚAtÜ„ R#FŒ ÿþŒ5Š›nºiD"qéâÅ‹/½ãŽ;6›ÙxwŸß®?=ùÄR""í"Ünu?pxtlÊ”)\ýõ 2¤Ýî³páBæÌ™CmmmaÛA¼ªKl$ßÒuDD>J–áÝš-YQå«xRy:&›Í6©†•N§›$§G%y‰DÔc ZÙ ÝÝ—ÿü—™U½øâ‹Ç' 4è´‰'î6fÌöÚk/ª««ùÖ·¾Õãá‡>P"€iáÊÇ_ƒÑ£Gsýõ×3a„v»G.—ãÑGåÃ?,ÔÅ7³Â§{Q’eTJ­€ˆH0³J‚œ¶<àî^߆˵9 =ÚzåsÄ{{¤R)̬÷ÑÐЀ™¶aUVV¶aÅ>¼ÙîD:w¯%øê~à«f6æî»ïž–N§O™0a›6mÊOnïueç¥DDÚÃà(€+®¸‚o~ó›M:ë¶ÕêÕ«yñÅY³fM!é2J²ŒþØF{žc¥|€ˆHGèœ}û“r¿{‡Ýýõm\k»’Ð[Z‰¶Ÿ!‰D¢ãQVVF&“!›Í~oF¯m_ms%wŸ ÌþÝ̪´»¯mëueç¡> "ÒN5j—\r UUU;ÔÓ£”7Þxƒçž{Ž5kÖÁÝ(¡‚’¾Ñžç|>¯éPau§ÅÁF\H‡F`^+.×ì Hüë–ÎE[¯¢­T¹\®IÀÁ r”%§g2™ÂªH"‘(üÎ2dÈî÷Þ{ï³fÍj—¤=w_¯àCŠiDDÚÃ^Gq (¬L$ ***Èd2Û]^·¾¾žÅ‹3oÞ<êêêpwR©Éd²°¹±±±°mÊQ""å!àkÍœË÷†IÛÛ²Õ H¤TÙÝæ¾Ž’ϣߑ¥¶a5666É—‹¶aÅ+dTWWïšJ¥¾dfΜùV"‘X˜ËåžtÒIëZñ~DZEˆˆ´›hq2™¤W¯^…$ñhU"Ú6ÕR0bflذ… ²`Á‚ÂØòòr²Ù,ù|žÊÊÊBBe>Ÿ/$YFJHIè"ÒQê€âNªY`»/kåuÚ”„½®¹-Wñí©ñF…ñmXч7ѵ’ɤ‡×OûçóùýÍŒ™3g~”H$æg³ÙuuuKg̘њK¤$ "ÒòPú»|>O*•*l1ˆ¶@¨Ä¶L‘N§Y·nO?ý4~øaa|:.Tk‰*+** lã͵bȵ""íÊÌʀÀÉ@©-JyàÁí¸dÚÞ =j&}P“Ëåš‹V¡£hU$êRWWWØ‚efÍ}x³k>ŸŸ”H$&õèÑ£qæÌ™K€ùf¶`êÔ©·ã=‹(‘vá@!˜h®coCC¹\ŽD"A*•*<6mÚD¿~ýX°`O>ù$Ùl¶°­ ŸÏ¶D\âÉ“™L¦PŠ7:Ÿ“ˆH[Yð‹åà8 gxx%ð0Š ï#<âî5Ûqé&Þìh/he¸®®®IIÞ(¸ˆŽEG}}}“*‚Q™^€d2¹ÍÕcw/ööwwŸ9sæÊ|>ÿV*•šâ‰'.G¿e€ˆH{h’Hù /0xð`ª«« Û²â83™ õõõlܸ‘²²2 ÀêÕ«yüñÇ ã¢òñ½ÊQ©Ýx#­x—òòòøŠŠ¶`‰H›™Ùp‚JÃCë'€×2`$Áÿ§Ö/mçå ÈŽ$¡GåÈ‹s<Òét¡@GñjqCCCa‹V>Ÿ§¼¼œûÐdܸqË·ó=08‘H ÎçóGÍœ9³ÆÝår¹ù½zõz󨣎jK™bÙI)‘öÐdóš5k¸á†;v,ãÇgĈôìÙ³äÒºº:6mÚĪU«€`[V”h8Š·D[®jkk)++ÃÌÈd2Z‘vaf{ÇÃÂCµÀ3Àsm0³Ç©Àß|{«ml# ½µAIÔ„5 8·Z-Žrè¢à#J\¿í¶Ûxæ™gØ{⦅~úéomç{(¶‹™”J¥ª©©É?ðÀï¸ûü|>¿àÔSO]ÝÆkËNBˆˆ´‡Â§xfÆÉ'ŸÌ”)Sxçwxá…˜9s&{ï½7cÆŒaàÀì²Ë.…F[³6mÚT(¥O¨L&“…mXÑΨºV¼‘V´R¢2¼"ÒfÖ8†`k•l­z˜ÝLÓÁ9@ÂÝßÛÛ9l„¾=«!Q¡xÀå}Ä—Æ?Ð)//gÕªUüú׿fåÊ•Œ5jþ5×\ó𼇭ÞS"‘x<›Í®öO&“ûºû°D"1mæÌ™kÍ솩S§6´Ã}äLˆˆ´‡­>Å33Ì{ìÁ)§œÂŠ+˜;w.Ï<ó C† aذaìºë®”••þˆF5ê£@£¸dd© .ÅlcÝ|€ˆH«™Ypp8Áÿœ —Ç#î¾¾¹×…åvŸÛÁÛ6Ù¾ÚRàQtÏ- }DѣߛQcÖâc©TŠW_}•›o¾™ÚÚZ’ÉdnÊ”)O^rÉ%svð=ÄçUŸH$î8ñÄ燇^³fÍÚËÝ÷O$}O<ñD¢DDvŒ™ ¾EÐ|«”îæýaÝ}÷Ý*¿O²Ô ˆˆ´F •­u÷·;i…J¢mTÐú\èûèÛ(©<Úr/¿»nÝ:~÷»ß1o^Р}øðáK®¾úê™ h$ñW7oÞü—3f4¶Ãµ¤P"";ªañâÅ 8=öØ£Ir×]wÑ»woÆ·U%¬èQ__ߤHô‡3ÊñˆþˆÆŽd2YB¢ .ѪH¼VHˆˆ”T¢²ÕàqàõH$o‹B’Ïçã ´*$Ú¾šÉdH&“$‰­º çóy–.]ʯ~õ+>øà‰DþØcýo|ãù¶NÞÝóîþàÉ'Ÿü¶^Kº "²£¾Çwl¼ë®»N©¬¬<°¨$äĉyýõ×ùÅ/~ÁÀ7n{íµ½zõšÿt/“ÉlUV7„…¼ø6¬øÖ,­€ˆHsJT¶ªþ—¦•­:Ó;Ñ+W®dÈ!;”„­vÄ·aE}’ž}öYn½õV©ªªª¹øâ‹ï;î¸ãV´ÃÜkR©ÔmS¦LikÕ,醀ˆÈq÷ZàÀÌìÏÀ™Q¾Ç°aÃ2dS¦LaåÊ•,]º”{êêjöÙgú÷ï_(Ë^«° Ú«ñ î¾UrzTJ2:¦Nè"RÌ̪£ ¶\µ¦²Ug™¬úýë_çßÿýß1bкmXfVh:QÑŽºº:îºë.yä¼âª«®ºoÈ!ÛÓ(±9ï666Þ:}úôf“óEZ¢DDÚCl„nfì¶Ûn 8ñãÇóþûïóÎ;ïð¿ÿû¿ôéӇѣGS^^^¸Hø ]!©<™LšÆ+¸Ä“,s¹\!H©¨¨P#B)ØÑÊVÅÝÝÌ®n|î¹çìÈ#dÒ¤IœþùuÔQ­Z Éçó…í©Q.ÈÚµkùÅ/~ÁÒ¥K˜8qâsW\qÅìd2ÙÌ<_SSó·3fä¶=T¤4 "Òš”’ŒÄW8òù<}ûö¥oß¾Œ7ŽuëÖQUUUH’ŒV@šQçÞ(ïÃÝ·ê’Ëå ¯‰5"ÌtöAD>Z¨lõ°»¿ße+ÁÝo2³¥Àuî>áé§Ÿæé§ŸfìØ±\pÁüñÅã·ú>j0˜ÉdX¸p!7Þx#7n¤¼¼¼þÜsÏ}à´ÓN[ÚSÍ&‰{N<ñÄÛáZÒÍ)‘öÐên¾Q¥–ªªª­šoED£mXÙl¶ãu<ªi•——VJ€BàKBïŠýÜ"Ò…ÂÊV£ò<ªÃÃï¬xtVe«íæî˜Ù§Ëio¼ñ†]vÙeôïߟ3Ï<“Ï}îsôîÝ;_xŽrï™5kwß}7ù|ž¼å•WÞ»ï¾ûnhëüÌl}2™üã 'œÐ¹#" @D¤]4 @ øÃøüƒºº:&L˜Ðd«UqîGø•+¯¼ò‰ÊÊÊ6o“2³…¹\S§Ö¶õZ" "ÒJnÁ:t(>ø ÷ÜspãÇgĈ˜YÉÆ[‰D¢Ð¹·ªªªPÄëÚGAH´5+^5«¢¢B+ "ÝŒ™íN°â±Wx¨«+[µ™»¿œcfß¾\ÔØØ8ð¾ûîã¾ûîc·ÝvcÊ”) <˜åË—óðózõjÒétã™gžùðÙgŸ½ =¦afM:õTÔCÚ™i[mÁŠªa}ík_#—˱bÅ žzê)zè!†Îرcéׯ_“€%ÚJUp‰¶aÅWEÒéôVÇ¢ò»Q^Hh„™õp÷ÍýÑŽgf½OT¶Ê/Otqe«vãîïטÙ3&¯Zµ*qË-·4Û»wïu—_~ù=ãÆû°­÷5³º|>Ç´iÓÚ#ÙŠiA~GsÝÏ ÀYgE.—cåÊ•¼üòËŒ;–^½z^“L& ¯‰7ŒJòƃD"QrV´Ò§OŸý7oÞüª™v÷†ÎþˆHÇ0³J`"[W¶zÔÝ×uåÜ:Jø;ìÀûõë·Çî»ïþíµkוÏç«Í¬lâĉs?ó™Ï,¬®®nNä«ÊÊÊn=öØcÛȈ4Gˆˆ´‡<°Õ–ªèëâîç}ûö夓N"ŸÏ³aƸl6K*•*¬rD¥vS©àWU¼ zTë>Þ=ªЫW/&Mš4bÙ²ešÙ_û€‡Ü}c'þ\D¤˜Y88Šye«ŽôÁ¬¾;d=ôPŸl6;ÐÌäóùî>Ð̘YEs×iÆ+üËÁ¬*‚Ò¡€ˆH{Èñ-Ö¯ÏårlÞ¼¹°e+zޝ`ÄËï644`fMV@r¹ÜV]Ðͬðz3ãË_þ2½zõÚ¥²²òK«V­úÒƒ>˜ëÑ£ÇS555÷º»¶ˆ|Ì5SÙj ÁŠÇ›]6±Ÿ2eÊGÀG@“ßiwÝuWeÏž=æóù‰Db »t÷@¯&pÏ»ûƒ'Ÿ|ò?:oÚÒ)‘öÐ$ }[³ŠÏE¥$3™L!¸Èår…ÕŽRGqèXÔ¤¡¡ë¯¿ž£>š}öÙ‡^½zñ™Ï|&yÞyç][[{ô+¯¼òopÀ{o¼ñÆýÀýŸ¢j«–ÈÇH •­^q÷¶ÙhXŽ÷Ew¯kËuf̘Q, ?üð.µµµƒR©T_3Û%—Ë-:õÔSßk˽D¶‡i%Ëð–úº¥sQÀω¶YEý>¢mXQnI„Dez£9¬]»6¿jÕªï½ôÒK«€“GŽyò‘GY9räH À~ûíÇÏþóÝËÊÊ.zï½÷.zà2étú©l6{p·»¿Ûî?%i3ìúÄW¶jpµç àÀXŠV4ÚË 'œP, "Nˆˆ´‡;¡G_7w.z]´åx¤ÓéªGcc[YQQQh@˜Íf ]УcQ’Ífoq÷ÿÞâV3«X´hÑ$à¸êêêÏNš4iÄAÄСCéÝ»7gŸ}vú¢‹.:¶®®îØçž{îg#FŒX²téÒ¿Oº»öD‹t°f*[½ <îî5]9·ŽffÕÀŸ ì€átP"ÒÕ€ˆH{hu'ôæÎ¹;Éd²°êmÃ*+++ôÉår444‚xùÝ(‰¶`Mšf…e9 ß5³‘÷ßÿIfvòÁüéñãÇ'GŽI¿~ý7n·ÜrˈT*uÅâÅ‹¯¸ÿþûkÌìoÀ_Ýý¯íþÓéæºce«83;`+è® öµlék"²ÓQ""í¡ä¬Ö®†D+ ù|¾p¤R©B@ÏñH¥RÔ××ÊïF}Cêë멨¨ˆÏ¡Åmî¾XüÄÌz¾ôÒKÇS‡ 2ýÈ#ì7jÔ(öØczõêÅÅ_¼Ë·¾õ­/<õÔS_0³ñîþB›b"‚™¥Ã€I@exx ðHw©lefç7Ñ'(•À>]6)‘¦DDÚC›’Ð#‰D¢pd2™BÇó(¡D"AEEE¡ z&“)¼¦®®ŽD"Uãjõ>qwßüø«™]ô§?ýi0-NŸ2yòäÃ=ôPÛwß}Y·n@z~>"æ:| 8è~Ÿ ðèy fVÜ œÂ–à«pÝé“é$ @D¤=l3 ½¥ $ŸÏ7é‚ñmXñ¦„Ùl¶Ù­Y±RÀ;”¨êÁä^ ?4³¾?þø`° xvG®+"îZÙª„}Ê §€z¶ô6‰Œèô‰t "ÒšMBo)ð(þÚÝ åw‹·aUUUQ[[K:&™LÖ××VE6mÚD2™$—Ë‘H$Úå?2îþ!ð?áCDv™íAPÙ*Êmè•­šãî¯'šÙnÀW€«Ù² `·.™˜H'P""íÁ¡t'ôâï[JBº˜G[ªâÏ£Dó(ï#™LÒØØØ¤ z|dÒ¤I“gÍšu¡™-¨¯¯Ÿ;}úôõøþE¤au§£ØRÙê%à‰°8D·æî«Ìl5ÁÏæåðy ÂÌú»ûÚ. HP""ía»:¡—JBž‹·aE¥vãý@r¹ù|¾œUÃÚ¼ysa$™Lš»ïãîû”••:kÖ¬÷Ü}!°àÅ_\qíµ×v§­".Ìq8‚nZÙj;}%|¾ÚÝgšÙXà`  Dv: @D¤=ä`K`±#Ièî^èí‘Íf eu£ $¾å*•Jaf…¼hVœ¤R©&†»ïìs衇Ö>ðÀo™Ùâl6;ÿÔSOÝÔ!?‘n(¬l5ž ²U”×°x¸»T¶Úfö)` ð6ð €»¿Á– Dd§£DDÚC›“Ð!èržN§q÷&•¯¢€£±±±IÀ_)‰:£·2¤ÊÌH§Ó§Ïœ9ó=`A}}ý‚3Î8c%á–2i=3KG=ÃÃ+ V<Þîªy}ܹûkf6Ø£›%áK7¦DDÚCJ­ÍÿÈçó…Žç‰D¢IÆÆF̬°å*^!+¤¼ÿþû…^½zÕµfâ+**Žà6oær¹ùétzÑÔ©SÚúÃÙÙ…•­¦lX<¼îÅIaR`f}]Ý}êz.݈ÙŠ™V… Zc«NèÛ³ +ê^­€d³Ù’¹ Q¢y|V6›¥¼¼œ¥K—róÍ7гgÏÓ§Osß{à T*u»ggÍšõv.—[œÉdæŸ~úékväš";+3  ÕÏÐM+[퀯ÿjfW¸û»z2"Eˆˆ”²ðY3ÛHð©Ü"`¹»çšßlÞR_½.¾š‘Ïç + ….èñmXѱgŸ}–Ûn»L&C:n¼à‚ fVWW7¶õ‡àîõî>$‘HìS^^>íX“J¥ÔÕÕ-œ>}úR´UKº)3ëGPÙjAÕ¦ ð<0[•­ZÇÌ’À?¿'»x:"Jˆˆ”ò60è  `fË€ùÀâ°{xÄ¡é HáÄvtBç}DÁE¼3z”¨ÞÐÐPØŽuÇw0{ölª««?úö·¿ý÷ƒ:èƒvø,Íår·½òÊ+5ãÇß3›ÍŽJ&“ûçr¹#ÓéôàÿµÃ=D>Q̬'AŽÇ@‚àÇ—ýNm;•`åèw¡«'#Ò™€ˆH)ïÉðëDø€ 3ïPà3›íî…Ç› °}IèÑ#êíétšL&C*•j’÷±víZ~ýë_³lÙ2F5ÿšk®y¸gÏž™6¾wO&“OM™2e?õÔS–…™³fÍêof½Úx‘O3+&åáá¥Àƒî®­‰;ækáó/ºt"]@ˆˆ4–ÐìEðÉf¢øtøx øGìøuB'¡Gø HtͲ²2I&“˜óçÏç7¿ùMÔù<7eÊ”'/¹ä’9m}ïîÞ˜Ëåîœ6mÚëÍ™:uêZT—_º‰p›Ð8‚íV=ÂÃï¸ûò.›Ø'œ™í K¬GOG¤Ó)‘(ñz4°/Á Gs¿2ÁÇ_ŠòAr°ãIèÑs"‘(¬€WÊVB|ðAî¹çòù<½zõZÙe—Ý{øá‡¯nóÖær¹[O=õÔö¸–È'š•!Fü'y×ðð•­æ«²U›]BðaÎÍî^ î#C~W¬H¿èî¯vÅDE:‚‘nÊÌR[ª H:OÆN¯6»±å÷D– ‹ñßKüç£(äiDZ»_9)îíaf¤Ói6mÚÄÍ7ßÌË/¿ Àˆ#ÞºöÚkgöíÛ·=Êäί©©ùóŒ3ZUºWdg–Ô=Ž q'À&‚ÏWÔ§¢íÂß½gl]½©èôyÀ7óº?_V’¿ì €ˆt3aŲ̀óneìÔ ‚ã-wÿÀ̆ç²ÀëÀ}Í|ò9`õêÕ¼ú꫌;¶pb{·aE¥vãåw—-[Æ/ùKÖ¬YC"‘ÈOž<ù¹oûÛÏ$“É6} kfywlÚ´i¢ŠVÒÍ™Y‚óÑá¡FààiwW?œvâîY3;8Î݋˅/þ… à{¨#Ø÷ŸÀçV ¯ê¼ÙŠt Ó*ªÈÎ/Üǽp°GìÔF‚Àâ•âžáV€+ >¨xÖÝÙÆõW»õèу/ùËœwÞyôë×|>_Hoîë\.Ç¢E‹H¥‚ÏD²ÙlaËÕ³Ï>Ë-·ÜBcc#UUU›¿úÕ¯ÞwÌ1ǼÛ?–Zà¦M›¶CýBDvfÖø4[*[å€W'Ü}sWÎmgdfã¶w;•™ %(„ñ†»Ð!éD @DvbfVIPBw<Ð3<ÜHÐÛã5àí–ör›Ùî¾Íõfö)àï„ ÉÒé4'œp^x!cÆŒi6ðˆ¾_´hù|žt:»“Íf¹ûî»™9s&ƒ~窫®ºÈ!5mø‘DVÖÔÔüqÆŒµÃµD>‘Âßà >hp‚2Û¹»§S„å IDATþmt3;x–`+ëôíx]ÁV¸WÝýàŽšŸHgÑ,‘™õ!øOÅ@YxxA£°9îÞÚ\‡ûÜ}Ckºûkf68øN&“Ùû`æÌ™Lš4‰sÎ9‡ &lµ% — òÙËÊÊÈår|ôÑGüêW¿â­·ÞÂÌ|âĉÏ_~ùå³Ûºå*œçË+W®¼û¢‹.jk¹^‘O¤pÅòPàH¶lÃ\ <êîïuÙĺ‡KÂçV÷ý0³ð‚Õ©;;bR"M+ ";‘°?Å‘lÙJ°šàÝkîží¤y$€3€+ª¹0dÈ>ûÙÏ2}útzôèA>Ÿ'ŸÏÓÐÐÀ’%KX´h7Þx#6l ¼¼¼î¼óÎ{à”SNy»¦•M$3O<ñÄÙíp-‘OœXe«ã€>ááµMçuÙ剰{ü ‚ßÍ{º{³÷Ìlðe‚’èû”@þðC‘€™íL"øT3ZÙ| xÆÝ—vÙÄ3;ø&00(ªªªâ˜cŽaÊ”)rÈ!lܸ‘åË—óè£ò—¿ü…|>ÏÀW]yå•÷î³Ï>Û:wßP^^þÇãŽ;î¶^Kä“(¬lu0(<´x U¶ê4fö]àzàÜý ÛûyàÛ@_àÿ³wæqR•WÞÿž[]Ýì‹È.J³ ²5‹«»â‚ûŽˆ óf™d2NÞ™É,™$Nf2™LÆ‘ "*1cÜ5(› HÓ²/²44²74]ÛyÿxnÑÕÕÕt]UÝôù~>õ)ú¹Ï½Ï¹@WÝßs¶ópÿ^3€PUóÞ  †Ñ€IèN< W/ÜÛûªºµ×i¥ªg$D¤'.ü`2Ð:>~î¹çÒ«W/vìØÁŽ.·|øðáŸýð‡?œŸ——M}µÚãyÞ&Ïó^¸îºëê"wÄ0~Õ»k€îþP°ø4SQã„WxŒRÕE§pn[œpù:®oÈ×Òc¥ad †Ññ¿Ìâ1ÜÍüá]8á±¹Ž×…8Ï«êÎ:¸^ à¶æÍ›?|üøñ+¢Ñè‰\´-Z7nÜÂI“&­:ÓuÅb._¾ü­ýèG¶Ãk4*üpŸ+q!W‚«lµ WÙÊúHd¹x  [pç{¸2é}€vªz°ŽM4ŒŒbÄ0~9ÆŽþPÚº‹ÈÕÀhÿÇ7TµÖ‰“µáÖ[oí¸iÓ¦›Z´hÑ©]»vÍ{ì±m¹¹¹í€6¸‡¦Ó¥xùÆoü¼n,5Œ†_R÷ \¯ˆá*ÞͯmA £î‘yÀíÀTUMn>XÛkü Tպؤ1Œ¬aÄ0~‚ùµ¸‚‚ëcñ>iŠáös7ÆàJs¾­ª×õÕ±fÍšÜuëÖuÈÍÍí ª=Ïëày^GàUõNv®ˆ”Ù×]w]I†Ì5Œ¬“PR÷R èûÝ­6ÙÙÈ "Ò˜€ó$ŸroilÀu§o¯ªêØDÃÈ(&@ £ž“P2óJ 'Š€wTµÎóüJ9×ãÊø*ð–ª~R×ëœóçÏÏ)//otˆÅb#‘HGÏó:ˆH; ŠÈ¼qãÆY×f£QPMØ—¸pÌmY3Ì8ˆô6Ôf£HD~,Â9à‡^ ~‚ó|¿¬ª÷¦Õ`ÃÈ&@ £#"Ýp.÷öþЗ¸P¨ÝiZO€p»¨ ¼Y×aWiB¦OŸžc½=ŒÆ‚¿1Q€ ·Š7->´’ºõßs±8 ÔTÌCD–ášÇÅõqŠ{´ÞîµP:ãlÀˆaÔCD$\…óB®‰à{@Q]çy$¬)À8Ünª¯©êŠt¬eÆé‘ÐËãjàø ®²Õgéú|0N™< | ªW×b~œ·{®ün·ñôžª.I£©†‘QL€F=CDÎÇy=Îõ‡V¯ŸB÷òÓYSpîý‹qI«¯©jaºÖ3 ãÔñ{y\ tö‡ŽK€%ªzÆ%«SCD ƒSE$ˆD£Ñ÷¢Ñè<œç8êÏù÷¹z—ª¾’M{ £>aÄ0ê ¾×c,.‘4îõx]U×§y]'x pâ㪺2k†Q{ªéå±øÄšÒeùvNNÎÏGìÒ¥ ååå¬_¿>²nÝ:€’H$òs`)°(.°+èÀˆaÔüÒº·ãÊÏ*°xWUÓšLí‹[q%;cÀTµ(k†Q;D¤=.Ç£¿?>¥Ó#jœiŠo¹å–6—^zi¥ceee,]º”>ú¨üøñãX,–£ª¿TÕïfÉ\è—˜1Œ,â €1þËÃÅr¿¦ª_dhí;q7Qà÷ªº6Ýë†qrDäœðHEÁ¸ó#Y4ÍDäÑ&Mšüú‡?üan0L9'‹±~ýzÞ{ï=víÚ¥@àh4ú¯§ÒÝ0ÎfL€F–ð“ ïºùC+p±Ã¡ ¬îúàwéõ2 ãäø½~ÆâÂ!8oèj\óþlÚf8DD‚Áà†Q£FõºîºëjuÎÖ­[Y°`AdíÚµœœœápø§À+V0Àh̘1Œ, "·Mq]»_WÕŒtíN!>~«ª3±¶aU‘æÀh`8ãoþ¢ªÅY3̨‚ˆ\ïyÞŸŸxâ‰@Ë–-k>!}ûö±hÑ¢ØÒ¥Kc@a$™œ©Ï}èo˜1Œ â7 »·Ã ®¼â|˜@ @óæÍk¼ÆáÇyýõ×#«W¯Åb±ÑªúYÚ 6ŒzŠ ÃÈ~·î{¸„ïŸÎŒ”Ïôs>îà</«ê†L¬mF ÝËGâ¼ ;,²þ""ýÏ¿õ­oIçήr(bîܹ¬]»¡W¯^Ü~ûí´mÛö¤×RU^}õÕèŠ+vG"‘ ¬Œ²ÑØð²m€a4ü/®Çpâã0KUß3ña ˆÈ0àÿàÊê6ö¿f˜ø¨ßïåçç‡ãâàÝwßeïÞ½ÜÿýÜ|óÍ3gÎjÚÜnºé¦€ˆtÀõv1ŒFENÍS Ã8]üÿ«¨èí±Wmª4Ã6ÜŽQL|FFñCà*[Å·ÆãÝËW¨j,K¦µDDÚ{ž7a̘1'Ê^>|˜%K–ðøã%íÛ·gæÌ™”––RSŽHnn.Á`0‡[§×zè˜1Œ4á'–Þ ôÀU³ùx;“ âc N|üÖćadà"Ü&D;øð&<ßhݺuì /<1°dÉzõêE¢G¤E‹äää——Wã×­[ÇñãÇx?F}ƈa¤9¸h Ç5ø[—a’Ňy> #CˆHà: “?t —÷õ±ªF²f˜qʈH^ øöرc󜦄p8̧Ÿ~J³fÍX¶läää°jÕ*zöìInnn W…?ü°˜­ª_¥ù £ÞaÄ0êˆë.ž|…ó:ìͰ ‰M­Ô®adé\ tõ‡Ê€EÀ§™èñc¤…srrZ2äÄ@0d„ ,\¸yóæñöÛos饗òÉ'Ÿp÷Ýw×xÁ]»v±mÛ¶\à¿Òh·aÔ[L€Fá‡[\ƒË÷×@ì™~èðÅÇmTt8ÿ‰ÃH/¾×ó* »?>ªêñlÙeœ9Á`ðoFŒ‘“ìÕÈÏÏ'???Þ߃  …XµjmÚ´¡cÇŽÕ^sÁ‚‘œœœùápxmºí7Œúˆ•á5Œ:À/«yЗï±WË?£¿`VíÊ02‹jup¾?–‹Tõh¶ì2ê¹Îó¼7ðƒx­[ŸL¯^½¸òÊ+ÉÏϯ4ïðáÃ<ù䓱X,v½ª¾—Nû £¾bÃ8CD¤p?Ð÷ÐÿšªeÁ«veBDòqÂã( ,à ŒU¹3ÒKNNÎkݺum š6mʘ1c=z4ëÖ­cþüùlß¾½ŠY²d @`s,³äs£ÑbÄ0Î?ìâ^ 9p×Y|Wì\Þ‰%œF‘î8áÑÝŠP!<ŽdÅ(#-ˆÈ…"rÕ¨Q£$>‡‰D"4iÒ„xBzŠóèׯýúõ#«\è,³dÉ’P8þi¦=ä†QŸ0b§‰ˆôÃ%zç»—TõPìà&`0®Ãú yž7[U÷¤û £¾cè"Ò—lÞ÷@’Uoƒˆ\ Qà U]–-[ ãlÀ/(1èíÅ…ÇGªz0k†Ùà@ ÐjèС)æææ2qâDfÍšÅ3Ï<Ãå—_N$aРAÕ^p÷îÝlÙ²%üwšl6Œ…y@ £D¤%ðN|ædY|\Ž«Âðžª.Í–-†ÑБó}ÇdœøHôx¼fâ£ñ ªñ`"yyy<òÈ#´nÝš7ÞxƒáÇ““Sýžî‚ ¢9991Oµa8L€ÆI‘¶¸“¸2»Ïªê–,Úsp½ÿãûªº([¶FCFDzˆÈ×p¿ß‰¡VOù¡Vû³j ‘Däêh4záe—]V},•Onn.“'O¦G,]º”Ý»w§œWZZÊÊ•+‰D"OÖ¹Á†Ñ@±Nè†Q "ÒxhžÏæC‰ˆ nÁUÞú‹ª~˜-[ £!â‘èƒK.ïêGpÂêZƒÁ·û÷ïÕ}÷ÝwÂQRR»ï¾ËÆ …B´k׎þýû3räHZ¶lI(bÖ¬YìÙ³‡©S§Ò¾}ûJ×|çwX¸pá¦p8ÜÇz†Ãr@ #"Ò˜4ö³³ÙdLD†P!>˜ø0ŒÚ#"ЗãÑÁ.Ç5\bË é\;räÈÞââbž~úiºuëÆW\çylÙ²…E‹±dÉn½õV†ʤI“xñÅiÞ¼y¥k&4ü™‰èÀˆqÖáïrÏÍÍíFcÑht°º¶}:üNÇ÷yÀNàU=–.{kaO*ÄÇbU}?[¶FCBDÀ `ÐÎ>Ž+Ÿý±ª–eË6£þáyÞ÷Î;ï¼P·nÝòâcóæÍã’K.áÆo<1o̘1ûì3ÂápðbÆnÄ0&@Œ³ ‘@ pG0¼høðáH$¢………F"‘kDd®ªî¨áü »q¿›ßªj(¶WcOOàv\¾V!ðn¶l1Œ†‚/<csüácÀ§8áaMàŒJø;vì ñ±k×.JJJxôÑG«ÌoÓ¦ =ôÏ?ÿ<¯¿þ:ýû÷¯">T• ”G£Ñ_šØ5ŒÊ˜1Î|ñq[0¼hêÔ©Ž;ÈM7Ýxã7š}òÉ'“Edžª®ªæü‹p}>ÀzàwªÉÜT±§®ôo®ÛúkæÂ7Œê‘\`(0—»pXŠ µ*Ï–mF½gj‹-*5,..¦]»vTW KD?~ù$%%%øß9'ذaû÷ïÖxÐ0’0bœøâã–`08à±Ç $~äää0~üx¯cÇŽ¼öÚkwŠˆ—\ QDwà< +?ªj,£7QÙžxJ.N ½’M{ £>#"Í€K€‹xþA`°"› FýGD‚999ß;vlžçUmÒ¤ û÷ï' U+BZ·nçyÄbU?žýƃ/E"‘Ôå± £cÄhðøâã¦@ 0xÊ”)Î;§œw饗’““#óæÍ»Í!…þù‰âcYö4ˆH;à\Êœ'&š-{ £¾""m€Ë!8±®bÝ'À2F-¹Ïó¼6ǯ4سgOÀåÜ{ï½)»œùå—ƒÁ*•¯öìÙÃ_|þ+mVFƈѠñÅǸ@ 0dÊ”)®]»žtþ°aüyóæÝ*"A Œ ññð§,‹ÖÀD .~®=DFeD¤Nx ¤¢ŸÕn` ð¹y S! ~ÿ²Ë.«Òx°I“&Ü|óͼòÊ+;vŒñãÇsî¹çž8^VVÆk¯½ßܪtî‚ ¢Á`pa(Z™‘›0Œ† £A“““sçyæL™èÖ­[­Î6l999òòË/ßè»ÍX¼žeñј´JpÕ·,fÝ0|Dä|\E«Þ¸ß[€/Eªº>k† ¹BD\~ùå)>ÏóøÓŸþÄ/~ñ ºvíJçΉF£¬_¿žvíÚqÍ5×T:§´´”ÂÂB¢ÑèÏ2r†Ñ1b4X‚Áà5Àå“&Mòj+>â <ÏódîܹÄb±md_|4Ãy>ÚûqM³Vú×0ê Õ4T`®yàÎlÙf4|Àú÷ïkӦ͉äÂÂBrss¹è¢‹:t(}ûöeùòå¬_¿žÍ›7Ó¢E ÆŒÈ#ªx?>þøc<ÏÛFßÉìÝFÃÁˆÑ ƒW#&OžìåççW:‰Dزe ¡Pˆ^½z‘———ò`îܹçÇb±KpqãGDòp çíCd¹é¡aÔ*Z]´ñ‡C¸PÉ%ªz([¶g"Ò¸aÔ¨Q'¼;vì`Þ¼yÜyç•æ6k֌ѣG3zôè“^3‰°xñâP8þ‰…Fõ˜1Á`ð*`d*ñqèÐ!æÌ™ÃŽ®ÝÇ9çœÃĉ«”GŒã‹™;wî "ROLÏ~¿‚{.¸r¡Ï«êÁLÚ`õ i\Š«hÕÔ.¥"±Üú)u‚çyßíÚµk¥ÆƒúÓŸ9r$ƒ>1¯¬¬ŒÅ‹SZZJ¿~ýèÓ§Oµ×\±b¡P¨x!­ÆFLjѠ‘+rrrFMš4©Šø8pàÓ§O§W¯^Lž<™ƒòâ‹/òâ‹/òío›ÄòЉ 8P($óæÍ»EDö¨jq†îEpM{帜¯2±¶aÔ7Dä\œ·£€Šï¦}Àb`¥c0êiëyÞ#‰÷ìÙCqq1_ûÚ×NÌ;räO=õGŽ¡iÓ¦|üñÇŒ5Š›nº)åu.\o|¸RC¨H$Bnn.-[¶¬qÑ£G{áp8ßI+"2·Û«À«ªº)ÝkF}ADrEäbù&0—d°xVUŸVÕ•&>Œtà7ünrãÁfÍšQRRž={PU^ýuvìØÁƒ>HÛ¶m¸ä’KPUB¡P•ë.X° äyÞK™ò¢FCÆ< F½' ŽˆÅbW¥‡â7ÞàŽ;î`âĉ̙3‡^x|£GòÆopÕUWUÛÅ6ßC"¸NÊGÓq/"2¸ÒÿñmU]•®µ £>á—š†ëZß>.VáË-ÑÈwŠHÛäÆƒ^x!]»våW¿úÍ›7§´´”;3óÎ;ïÄœ½{÷Ò¢E Z·n]éÜ={ö°iÓ¦\à?3q†ÑÐ1bÔk‚Áàå±Xìš &x^xa¥cGŽaÆŒtéÒ…`0HïÞ½™8q"³gÏæùçŸgÿþýôèѣƪ%q6n܈çy±X,VšŽ{‘ [qBçCUý8]kF}ADºàËîÇU´Z¦ªÇ³e›Ñøð<+$zžÇ£>ÊgŸ}ÆÞ½{¹è¢‹èÞ½{¥9óçÏgРAUº¢/\¸0š““³$[ãAè&@Œz‹ˆ\âyÞu<ð@¥8]¨:uâÞ{ï=‘`Þ³gO&MšÄ¬Y³ÈÍÍeüøñÕ&Ÿ'²qãFæÎó<ï½h4š–äAéÜ…{[®ªIÇ:†‘Œˆtäååõ‹Åbáp8ü°.½oü o}q¡†‰z¾ÄU´Zk!VF6ˆÅbÛvïÞš$ \|ñÅ)Ï[°`;vìàÞ{ï­4~ôèQV¬XA4}2-ÆYˆå€õêyÞ¸{î¹Gú÷ï_éØÑ£G™1cÇŽãî»ï®"0òóó™Œ,òÌîÝ»½>ú¨Ö|Ë–-¼ûî»Üwß}4o^9M0Þxx£® 5Œ³ÉbógÃH‰ˆ ñ ‡Ão¥é~ò€G€N@ 0ÓâݺDDšæææŒD"=š5k4hPÎðáÃéܹsµç½ûî»,X°à@8þÕé†bùÝÊâË»$ÚNE˜Uôt®méFD. ƒ¿QÕ¾_|±7räHïdåÚS±|ùr^}õÕ#Ñh´“‰lè=&@Œzƒˆ ð<ïÎÛn»M’cpËÊʘ1c-Z´à¡‡:!66oÞÌìÙ³éÞ½;>ø`J/Ç‘#Gª”áݾ};3f̈E£Ñ¥‘HäÍ4Ý<ôŽ¿±.çF] "9@ïÜÜÜ‚H$Ò«I“&xÒµk×Zå=•••ñ“Ÿü$‰D^RÕ§¸~`80ˆŠ8ú°øTUwžÚFvðs•nÏÉÉùÛh4:ì / 3&7¹Ñm*T•_þò—å%%%¿PÕ¦ßZÃ8{0bÔ D¤¿çywŽ?Þ»ôÒK+‹‹fÍšñÐCUqrþùç§<žLqq1Ó¦M‹F£Ñeéà\ü¸”0ðœªîH×ZÆÙ¸²;ÝÀìy^NÿþýeàÀ^ïÞ½SzkâÅ_Œ­Y³fu$y¥ëçâ¼ùT4 ܬÀ¬ŒŽˆ ßÅb÷µoßž±cÇ2xð`@Êù7näÙgŸªjwû|7ŒSÈ‘uDä"ÏóîJ%>ÊËË™9s&žçñÈ#T+.âù:u:é¼ââb¦OŸ ‡ÃEÑhôµtU‘ÑÀÕ@ xYU×¥cãôñèÏ:-R`°-Õ¡NßÛ08''gh,ËëÝ»·<8пÿZõ·9k×®eΜ9áX,ö类fýs€¡À\pÿ¯7ẕo©O_†q&ˆÈ-ÀkÀÞ@ мI“&Ñ£Gç]rÉ%4mÚôÄ}:Mš4aÊ”)µ~‹³wï^¦M›-//_FÿFñq®Ün3` ð; M©ŸøÕ›ÂÉÿ>þƒÆãÀ9À/Ó]4@Dš}‚Áà°p8Ü­]»v‘!C† ¨M5žòòrV­Zźuë¸÷Þ{yõÕWÙ°aßùÎwNˆõ-[¶0}útxàXå›7ofæÌ™‹Å¾ÀåvÄUÊ\nÇróv¿já]À9ªú?Ù¶Ç0Îf¬º‘q|ñqÿ5×\SE|€óVLž<™¼¼<òòòxì±Ç˜1c3fÌ8%’ >Ö§ÙóÑÒÓ Ø¼jâ£þ¢ª)»SªjTDvãH3 Îˆˆ>¹¹¹C<Ï;Q6wРA\pÁÁšÎD"¬_¿žÂÂBÖ­[G›6m((( RPPÀgŸ}ÆáÇOüü|š4i®]»R üü|š5k&¥¥¥=qÞŽ/€eÀz+¡k4üM Tõ…lÛb FF‘ž¾øð®¼òÊ*ž·ß~›k®¹†G}´ÒyíÚµcÊ”)̘1ƒéÓ§3eÊZ·nÍÉØ·oÓ§O–——oˆF£¿OWèˆ/'Ð8„ËH™ÐkÔoüÄôŽ@Ø_‡×ÍzžçõËÍÍ•¾}ûzÇ—üü|¯¦²¹±XŒÍ›7SXXÈš5k…B4kÖŒ©S§Òµk×ózöìI‹-(,,<ÑdÏž=„B!:tèòÚžçQPPÀ'Ÿ|r(?§ªuv߆р¸ø¹ˆ<¡ª3³mŒaœí˜1Î?n<(;Y“=éáyÞW]uUñ®_GQQ[·neòäÉUò=ÚµkWÅRÙ·oÓ¦M‹–••mŒF£¿KsÜúÕ¸DÝ0®âUi×2ÒË( °äLF&–ÍÍÉÉ ûõëÇ!CjU67‹±}ûvŠŠŠ(**"‹qÑE1aÂŽ;Æ‹/¾H“&M*ãyƒ ¢¨¨ˆ‚‚ ùôÓO0`ƒ®v­Aƒ±páÂV¸^†ÑyœŠM$Ã0Ҍ倧…ˆ Æu@î‚ UxGUW3ÿ|Ïó&^qÅk¯½¶Šøˆ³wïÞ=?ªK:?tèÓ§O`êÔ©U±:ÄSO=9zôèæh4úr:ÃHü¿‡Ûq¡+¯¨êªt­e¤ÉÂ…]M«.L«×9/ ‘A@^ïÞ½uذaÞ½{תlîž={(,,¤¨¨ˆÒÒRúöíKAA‰¢% ñÓŸþ”Q£FqõÕWW:Û¶mL›6ÜÜ\úôéÈ#¨MSµ'Ÿ|2rðàÁwTõÓÓ¹oÃh¨ˆÈà3 ¸À<؆‘~Ìbœ.}€óݸ‡ï ª›#FŒ8©øhß¾}•P«dѺuk{ì1/^\E øâ#ZVV¶Í÷|¤S|tnöüÈÄGÃEDÎîŽ/žŽø‘fÁ`ð!Ïó:uïÞ=6dÈÀ€jU6·¼¼œÅ‹STTÄW_}E›6m8xð O<ñDÊ|§ÜÜ\.ºè"ŠŠŠªnݺѦMúöíË­·ÞZkûûöíXºtiwÀˆÑØø?þû4†‘NxlÕó&ð3?V¶°ºI"ÒÕ󼉣F ÜtÓM•ÄG$!ªúœ×ºukÚ´iÃW_}ÅŒ38r¤j;†Ö­[3nܸJeEãâãøñã[Âáð‹ªš¶pi…‹ë€ùéZËH/"Ò˜€ ?zNU¿:ë±íÚµëðÄOÈ”)SÆ «Q|¬\¹’E‹!"lݺ•Ë.»Œ'žx‚É“'ðÅÕWø4h%%%Wçt¬ZµŠH¤ö¿]ºt‘œœœ.µ>Á0ÎD¤-p/î÷ÿ7Y6Ç0 &@ŒÓBUKk“W o>|x`ܸqU<¯¾ú*Ï=÷\%/Á ðÍo~“P(ÄôéÓSŠD:Ä´iÓ"eee[C¡ÐÜ4{>rp»å-q³çYÅ«†‰ˆtÄ…]ÌQÕ½gp­‚«®º*p*e¢KJJøàƒðKyy9¡PˆçŸžãÇ3iÒ$:wîÌÔ©S‰ÅbL›6¤\ãÈ‘#L›6-zôèÑíápø¥tz>|nÀå¾^:Ý\#»ˆÈ¹8ñá³Uµ¸†SNv-/‰äžsÎ9)¯_¿žÕ«WW4hÇŽK) Ø´ieee)¯éy 8‘ žHÇŽéÔ©EEEµ¾‡-[¶ÄÎD€FCÃ//¹øT6m1ŒÆ† #­xžwü«¯RG´tíÚ•I“&±{÷nf͚Š/¼À±cǘ2e M›6*ò=>úè£*×8räO?ýtäèÑ£;Òv "Ḽ—yénTg¤¿iä$ÜÎçûþX—¤W““]#Ïóbǧ.œUTTÄ;ï¼Se<.Ry1 D,cÕªêS‹ 8xð Û¶m«rìž{îáæ›oNqVeŽ9Â_þòV®\I(JYDÂ0Îb¾…U¿` ÃH–„n¤•H$òÙ¢E‹F 6,'U¯ƒnݺ1eÊfΜÉñãÇùþ÷¿B|Äiݺ5S§N­2‡Þ‡ç¤;yPD:·ø?ÎWÕMé\ÏH+ç-ü?ßTÍœ—€õµ¹˜ªÆrss÷|ùå—]zöìYåx¼A`qqñ‰þàò ºtéªU«…B•ªd5oÞœ^½zQXXÈÅ_œrÝxÂyQQQ•JW‰ë$SVVƪU«X¾|ydûöí@ p(‹½§ª_Öæ~ ã,¡‰ª¾ ¼mC £±aÄH7ŸîÛ·oø[o½åÝxã)=n]»v=!BæÌ™SÉ'9®þèÑ£LŸ>=zøðáݹÀÝ@.®Sô‚t®g¤íÀŸj˜³çT.‡7|þù箼òÊ*Ÿ«‰ ;vìÈ–-[(,,dÕªUäææ‰DX»vm•^ƒ bÞ¼y:t(eÏÏó¸ë®»hÓ¦Mö…B!Ö®]ËŠ+¢7nô<Ï+VÆb±Ï£Ñè®S¹WÃhèˆÈ@‘ˆüFUÿ:ÛöFcÈ‘VTµTDæ.Z´hRóæÍuìØ±)óA:wîÌäÉ“™9sæ‰&ƒÉ"$ÎÑ£Gyúé§#‡Ú‡gg(c<MªÒÖUÝÈ ªºØWÇ—-*..¾bïÞ½´oß¾Òx¾Æ²eË(,,$ 1`À&L˜@~~>Ï<ó EEEUÈ€øÃþ@QQ£GN¹h*KœX,Æ–-[X¾|ylõêÕÄb±ˆª®‹Åb«c±ØFûl4b¦­€šëd†Qç˜1ÒŽª~)"/¾óÎ;÷G"ïꫯ®V„Ä{€T'BÊËË™1cFôàÁƒ{3%>DäR`®BÐ+ªz,Ýk UÝŸ››[RTTÔ!¹7¸0¬?þ˜ë®»ŽÑ£GWê„>hÐ Þxã ÊÊÊ*ýŸÏËË£oß¾lذ¡Z’LBu-,,Œ?~ÙFWëÒY!Î0¾G{²ÿã´lÚb FFPÕM"òÒ|p$ñ®¿þú”"¤cÇŽL™2…÷Þ{@ PéXyy9Ó¦M‹îÛ·oŸ/>ÊÓm·ˆt®õ|×b䓇 —-[vÕÕW_]å³5ž¯qøðáJâœyýõ×YµjU•|Ûn»­VÍ ÷ìÙêU«ôÓO?–––À—ápø3œèHûïŠa4 î:àÈ~žmc £1bÄȾyþ£>š‹ÅRö'B|ðÁJcååå<óÌ3Ñ}ûöí‡ÃϪjêÚ¤uˆßïãvÜïÉ:Uý8Ýk žÏ>|íÎ;éÚµk¥ñË–-ã–[n©ÔD3žp^TTTE€4oÞ¼ÚÅ:Daa!K—.8p ŠÃápðy4=Z§wfgßðß­ônš‘.Àõ@\ï¬` NüíϦmqDdpXUÇfÛ–Æ„ ã´‘aTT„Šsˆ\çÿù}U­’¨­ª[Eäù… >T+B‰‹’’’Œ‰Ÿk€ŽÀQàõ ­i4l¼@ p¨°°°M²çé˜?>›7o¦wïÞ•Ž?žfÍšÕ¸@¼‚ÕÒ¥K#Û·oÏ ƒû}ѱ2¦n–c"2ì^Ͳ9g5"ò à¿py6  'Bb"ÒKU·d˾ªVø0ÒŽ ãtÙ ,<ÉñÕPÕm¾™‹Å‚7ÝT]TW¹çÙgŸ–””ðÅGFò/D¤p)®ßÇUµ4ë i \\t ‡ÃòÙgŸ1nÜ8’KOwîÜùDßdÒ®]»j×(//gÍš5¬\¹2^Áêh$) C¡PêF;†a¤âqÿýk"›>DäràbàܦdTDÚ—ãú0Õ—"ãq9žF1bœªºØyço‘¢Å‹R>¬…B!fΜݵkס ‹¦Àm€KUuC&Ö5~÷ä.8Ñq!ÎK'|yüøñó·mÛ&ɽ9Àåt´hÑ¢Êx2‘H„7²råÊèêÕ«(WÕÏc±ØªX,¶]UµNnÈ0ÿׄù™lr–sî;ôoTõDV¿yï›þ+%~øó@ØR›2û"Ò8Øzª9oªZ}·WwíÖ@'à0°»ºÏ^ÉóíŽøvÔU/1bdé ‰Åb,^¼8zàÀî¾ûî@<Ù6A|‡Ã3U5“ñì7áÊ3~Tm_m4:D$ôúø¯D¶kq¹BGóòò&öÌÏϯbxÁT»N¼‚ÕòåËc+W®$‹EUu]4]XÙ\Ã8D$OUWS²mK# þYë~Jþü¿QuXDþøçÄ ~"ò0W$f/x‹ˆLV«êõ)Öè |¼¤ªûc)s@Dd8ðs` N´ì‘ÿPÕŸ%ÌkëÏ»ˆÇÑî‘QÕ_×öþ&@ŒŒãï&܉û…^‹Å–lذáþŸýìgm‡êµjÕJ>ÿüóhIIÉ_|d,üID.¤¢äî¼t784ê/"ÒŠ Á‘—›€ À†ä¼¤P(´¢°°0ÿÆo ÔTÁ*.: µ°°0 …‘õÑh´ؤª‘º¼/ÃhŒøžËå"²˜¬ª–/•^â^…ÿ+"ëü¨‰jø.aý%à5œ'á>à€vT„Ï8í·üµ¾Ž{¦ØÌðsL6%-õ0ЖÊù?Ur@Ddðî³þ߀Ïp¹,—ýæ5þâM>À}W<üˆ4QÕÿ8Ù½7VļøF&ñ]«“q!,;gU5â÷ËÍÍìy^^8ÞFßϤçÃßåþ+܇ÓU}?Skõé@…èè† !ˆsØŒ›O& DÄ ƒß=zt›k¯½6åœââb ),,Œ–––J ؇ q^‹M7Œ:DD®ÞÅmô±Æôâ?˜/ÅåÆÅ€B` îýäEy˜üXUÿ!éØo»€ ã‚BD>®~£ªS’æ_‹‹^øWUýÇ„qç­È{”Eä àªñœ¨é \î{ͪ»Ï~|MUg&­µ·¡ÙUUŸìï«1b#Ó܄ǀßÅâü÷ÏýW¶¸'>U*xg¾ð=—ËÑzG]ø^ ¸¶-ª‘7æÏŸ‡$Þá|ß¾}±bÅŠÈÞ½{Á`°8¯VG£Qkpié#^z÷M|¤U=æ‡0}¸ê¿ŽŠÈIáIà"Ry ¦ãz·\‰ü{ŠùïÛ‡DäŸBW¯Ä}Þÿ¸†pÖÁ8áôÒÉÄG‚Ý%À³‰ƒþwÀop¹F£?×pF‡ #cøFCp»!¯øÉhõçû2ÿÇ7lúìEDš½p^Ž^8·zœ0n‡l=.´êÈ鮣ªDäÏ/¿üò ,ˆÅb1-..ƒÁ¯|ѱ* :ƒ[1 #"À…Ørõ{瀨D¼ÒyIãà‹ëÆDäyà‡¸üùþ¡‡qKÏÕ`z_ÿ½¦äô< 7Î;þN »Ïõß«Öd7L€™ADÎnð|OU7gÓžD|wë͸ŠkTu}–M2êßÞ '6záF’C«6àDǶºÌ¹PÕe"²iç΃q»{ëC¡ÐÞºº¾aUñ˽^ŠÛ1?ˆ{ ³êK󻯆ªîÁåu¼&"ïâò<þ Mq}Bª ŸÏåIcÇNòyýðw8Ñ1_DZw‹Rä…$ß”ªiªI¼Tv|ŠËK1’0b¤ÇùüŽâ¸8ÐúÄœ[¶—Ðf4püZó=q‚£•½ŠëS÷rÔºJËéà{ú>Lç†aTaÐÁ]éõ‘kTõ½ì™eóp‘½ÆŠqŸÕ߬‹â/¾z p—ˆ|Wø¦9.Ϥ&vùïUë¨Wæ®Qq¹ª~ýtmm¬x5O1ŒÓÇß}¾ƒŠ²¶¯Ö§ø[ß¾+üZ¢XÃDD‚"ÒKDnð¿l¾ƒ ¹è‡G"Üߨê U]nñaFÖX—ðç¸Çórà"²NDnÍ‚M¿ŸVuôÂ=&zƒßÅyî©C3fáªe݉ó„~W‹ó–¥Àx?Ì*%~É{@OyÆÖ62L€éæÜNtøí©6ʸò~Çp®R£ "mEd˜ˆÜ |˜€Ëã9·»¶ XÌĉŽyªZ”áž2†ad‡5¸ïD81r× ÂHÿ%"‘q~"‘Q¸ð+€æÿ'°ø•ˆÜççñàŸ×GD~""矢 /ãº~ŒÅ•Ö¯q“ѯÐõ¸g—E¤S‚-ÝE$Q$ý îÿÙ‹"rÒ8†ˆÈÿˆHî)ÚÝ(°,#mˆH_ÜŽ“TÕzûîÀÅ›}TÅ‘‘€ÿ!~ÈÛ$M)¥¢Lîɽ9 Ã85|ñ9¸&mõª0‡ˆ\‰ëÉ0½šž[ã@âÃ_nWüÛÖã)í쾆˯T9´Ä=w*®jÔOã“Uu»ˆŒ~‹(³Dd'ЗrœSì^¯ª‡DäU\¥*¨9ù<‘ãÂ÷¾Ü!"Ÿ<¢sq… ^ö×øLDîð¯ý6®Â×^ßî<\˜Ö÷NÅîÆ‚õ1Ò‚ˆœ <Šû\¤ªïfÙ¤*ˆÈ%À¸Ý°_Y÷ú…¿“Ô ç®ï‰K$$L‰àâ¼7áúr”dÜHÃ8ËðEÇT܃W*à‹qåÉ©ªYÏã‘þè*©Øÿ|÷ÐÁíR?¤ªó2jh#ÆÏÅ» W)ª+p—·@U×UsN.N´ Ã…nïÆy³ÞMì""c¶ªú‡lèá_Kq*åwEäF œê9EDúötÁyhÖ¯§ècÒWák0î¹g'.qþÛÜL £ÎñúM:âJš>_CÍíŒã?Ü~~õgU]še“ \X.±.°YÒ”}8Á± Øj»˜†Q·ˆÈ/oã_¾Äí÷ÇmØü«ªþ´ú+d™Œ¾¥ª»S?'š"¸ï¡UukF4 £ZL€uŽˆŒÇ5*ž>“^ éBDº“p•¯þ³¾…4üDÅ|*DÇ9ISÊq¡›€MÕ„Z†Qø1ö[ü×0U=”t¼5оeLë"RŠ éù+Û…6Œú…å€uŠˆ À‰ÅU¼ªwâÃgˆÿþ¹‰Ìá‡wt¢Bpt§r1ŒÎåþ…ÿÚ¦ªÑ ›i•A¸ßÇ·“Ÿ˜z Ê¸ïõ¾WQ°%®Ä\Uý8iÞPàZ\ü¼‡Ëè‹©ââæ‘êw^DîÅ}^ü—ª†N–â‡Ý<ˆ«f”ü£ˆ¼,N¬Âè‡ÍLÀå*6ÅåÍQÕÕ'ý[2 ãŒ1bÔ"ÒWúàÃúÔl0i\äÿ¸"›¶4’ª’;ƒ‹ Ž ŽÍªz<³†áÏ£ "R›’é"Ò' âµvâDÆ·DäUõÇ Ó/~´¾… *Æ•cý ø'\ÓÀ7“Öh ü(RÕ'ýáq¸WpŸ!ñ¹_þ—/¶'ˆnÄuÅn…ß\NDúûëœçÏÛçÏû¾ˆ|MU­cz"¡HÉÚxÊýòº]ý~¯&#Ø1êÉîÂ=\n>ʪA'§®šÅUÝ™mcÎ6üÄà ¯ä<Žxר/pժ꫗Ì0+q]›ÇàºG¿ˆK<_WMò®à¼}{Uõe¼ðð/"ò¡ª.H:õopaQÏøósqƒ?Âõkx3iþ]Ô¢‰œŸ˜ü®È-ªú…?À‰‹ÿsS\Wî–ÀUª:ßïàO‘Eõu-ˆÈ¯¨¼ytª÷i=É¡ìƒKúþWàk10®óI¨Æ• Dä*œH´Ç…‹ùc&mÉ&&@ŒºbÎ}~x¥¾%'ᄎ!«Vœ%ø»“ÝýW>ÕçqÄG½*Çl†CUËEä6\IÑ1þ à+y—/·2á”+€¸>;/'\§TDÅyCɘD~þü°EDæ·ŠH›¤]é‡q%t[Ã-ü-®ÏÇ£qñá_? ü)aÞý¸Í‘ÇãâßW""Ëp9‚ÿPÃz‰Gp›Iñ¼fø‚DDæâ*ŒY%ÉÚñ¯¸žU›qÀV¸RÁ‹È,U}$›Æe  Æ㻲ËÜÕ÷íóü÷-Yµ¢â7•êžðjŸ4%Š« ÷rì¬ç‚Ô0 U]ã—°Žó\‚"÷ŠÈê:ן~…ÿ¾MD†¥¸ÜnÜNs2ïU³üsÀ•À½ÀÓ"’ï¯?7U^Jß3—7¶¸ú;¬dwq »¸Ð°Tv7vv«jW8‘Ï7˜Ëÿùøe¶ SÕUTt¼¯ïü-°VU÷ÅDä\7øI"2GUßÏšuˆqFˆÈ9¸RˆPó>âø®þ¶þÅÙ´¥¡à‡+\€ónäãGâ}ojj"×·+¿µ†yPa÷Éz‚´ªÅu-þ¦Ò§"ò\ÈÜÀ/ýpìóqÍ+¿ò_ WÕßÅÏ÷+Q^Žû7ÛŒëN8ÞW&¿$¹ç†¼9®Ôÿ~U=x²ߦ+pß_Ûjº?é\ 4ÁUa\˜\Á/õÜ —ûÀõ<9˜¯ª«»¶ª.L1¶MDþønC׈aT‡ÿK}7 #ï#N+Ü—Y™uÊNÿ°ÝqU«‡RUpXâ¸aœ¥ø%lÿMDnÂ=4ölj“øïýõþÏ©HåýLéõC·~ÛîƒËG™ˆó¨Vç5‰sÜ¿nrhusÁå®T×ÀÔ‰jG¼bXGÿ½NPLó½$ùã;ßùBá׸ h‰7‰È}ªºÜÿy°ø©;‰ÿΓp%0Ÿjr@D¤ðg\¾EœÍ¸‚U‘VÀLœ JdˆÜ™Ô@ñŸ€Çq k– ®ÇXµä$´ðß«èg&@Œ3áÜNR)õ?ï#Nÿݘ}|ÁÑ ÁÑ™Ê_ ྤ·Æ_þî§a‹x^Fsÿ½È¨ªïÔѳpù·žÀOk*Ç­ªYô‘v‰á-)(Âu· ª¯Ô‰Õ—xEÉ=Iã÷à*›Ç‰”¸@ùàQœ(x÷Ýrnçÿ-è7–\Œ{ˆPDþ61¿Ä/*0·öau†ùóæáóq•Ôš Éó=àU\(ß¿à¼në€ÿþìÛ—üý÷,.íyàpuöœÄÎþ?ÖãNtœûbH_QYpTq†qvá÷q*^N£ôsýÆà*IÅÑ_Á=Pþˆü^U·%“ƒk\x*á®árǺøc5…_ÅyøO\¨Ø7RØó7ÊžÃ=ìýTD>H²Óhi3ªÇϹFEÞGr8[ \3Ë­þÏ_ˆH'`*îß÷ö„«é~1“ÿÀyþ^UUDžÃý[Þ¼žpí«qUÓþ¹†RÑ7àžSf¨jb¥«)þÿçË’æß‚ £ú™ªþ(a|®ßëf6®€Áo’Î{]U¿{;R""+q½wâ̾×X¢3íC˜qúø°ñ÷.JU IDAT~ ­Ta|w¢…ˆäží¹ þŽN* ŽÖ)¦î§Bpli@‚Ò0Œº£ n÷ç~Õ«u¸Øö~¸R¸M¿‹?°«ê™„«NµJD~ƒÛínôn¦áÂbj…ÿà9Þ2X¢ªëkyúÿà<Sý®wpŸm}pŽý€#ªºAD¾‹Ûu_/"3q»ímpaYwßæÔÖîFB'Ùïÿ¹ îÿÀï©êQX >âŒÅ•À61ßÃçàç¸ò´ï=óD\ýíó‡Eä+\å—íÀU=z&køž£Öþ«.θ]Â+XÍ©aÜón\}õÝ@qŠÊ!†a)ñ»E'ofÔ«<ù/€Ú–1‘§p]¶ŸH«aÕ¯ß ¾ãáÚm¬OŸ €ÿ‹{öü6®×Gœ•ÀÕôoY„ëFÞ W©±ÚÞ‰¨jLDîþ€«Ä¯Æ¶ W¦ùå¤ù*"÷Oâ<2w$]r UC¹N•øÐé'S[|ód]ÔÏ&Ä~oŒ“á—Üýn×`ª¾Ÿe“êÿGC¨úe}8â¿Jq±§É sp% _Íp!SM99Q\™È¯üW\pìo  览ȳ¸’DÊ ¸êRÏdûáYDÖ¨j¿ZÎßìUÕ“&©×5"ò·¸®Þ=’­¾¦ª‹«žuö "mpÏè'ÍññK¿·ÊO–ƒ#"íq¹˜MqâbåÉþ/&ˆépªð+¿é`+àxò&©mp1pN@|Œ-²TE ü‰Kp›†ûpåé·$Íi†«2yèT¿¯E¤;NPµÅ%ì%÷Ñ9Û1bT‹ÿK;Š®™gs¸ï­è‹ûê†+·—ªzÆ©r·ëqÐ߇ûp»‘&4 èsÈ¿ãvës ý±À“´e™ ª3j9?[¤÷÷7WI± WªøqÜg|ªnʤM†Ñ1bT‹ˆ\ŠKÔÓªqžµøÝp;ྨ[âêÛ7O1Uq_@Çq_Jñ÷#¸+ykFÆI #wèEd®à1à܆ô•E2 ø,y—^D~Œ +ú¹ªþ “6FCÆr@Œ”ˆÈ¹¸ÚÛo76ñà»e¿¬q¢aFBU—‹È` . dˆünÃå;¸NÔãq…GnPÕ~ðïáÑvÆÄx øY¼$»ß7äY\^Ä’×õÃZž–«ê“þXÊ€‹Ù¿'”Þþ±º{ò¿³¾܈+æQ‚K*þYb؈ô~„Kd>ŒKH„«„xÏÉþΪ9ôN€$‡f†qL€Uðc8oÇ%HoÆu›5 Ã0Îâá¥ñý«€Þ¸­ pÕƒ‚€ŠH \Óü/ÀE8Ar»ˆŒPÕ=~3µÖÀEä)UÝ“´æ=¸ò¦o'ŒÝ࿟ "2Ð_'x—w=®ja• ~<ý‡¸I¯ÿöî<¾ªòNüøç¹kroKX‚ †}‘UY„"‹ÔmpP[«cgqÔ±µg´¿i]»èÌ´µ¶ujÇZjm-JuZÔªˆ¨Ⱦ$@€°g¿÷&w9ÏïsŸãIkâUÊ÷ýzÅ»œ»xnr¾çù.ØíWK±»-ÍRJwÕ tM?‡¬ôc¿HmÃ3m{ßYÞ_ˆó’ ¢5—aÿ"oþüY) !„h?J©K€Ø+;]Wuž=Ø]è«”z ;øø‘Öúß\—ÿðßÀ›Óÿ{âËÀã-úï°W3N5 ýIì´×éZë·ÒõìàbÇw"š‹½*ó­µ{ÞÃMØ5ÿ‘þr»˜­µþÓ)žË ¥ÓtÄNS~æl·#Äù¨µQôâ<¦”êLHÿ¸@†Ú !Ä9ï+J©û”RßRJý/ö †øA+õ÷¶Òeèìn}-ӪǞ}½RÊtü{%}Û¿sß0ݾöRàå“ý]QJE&øHw6úN+·LÆN·Ô}Öú÷Ø-Wohå¡ÞlKð‘öìô­ÿÔZolã¶„8¯È ˆp(¥üØ}¯½ÀF­õ¦Ïø) !„h»;\ÿŽb@ûì•·$ö<Gº]jwàí–s‘´Ö)¥Ô2ìn‰±‹´›”Ró€;•RõÖfªó-œÞ¹¡éï¶rÝÊôst“þÞ9Ý*·%ôVJù´Öîû¶)µX)õ ðÏØ3&n˶DûQJõÅN¿Ëʰë‘Zî3âs@áv9ŸL;_ô?!„íc&öÁ»ÖZלävU­´ZÏM?r‚ûnq;°ƒŒ;±WAÖ¥ë oÁnê±øÏÕlçhË+ÒOU‹‹;¤¿å“॥]ص#îѽžSRJÝ <„]kr£à~ö”Rý€ïa×÷¸%”R°‡®Æn€°9ÓÏOO8E|—`$þù¯eÚ¹BêµÖÕgy_ÓAªð×wOw­õÊt—­/§Ö'`¶ï4æðñ”R>ì:•½®‹Íã~_ký³Sl»Í”RwcO±^ \«µnú´SœXz…î!ì!‘¾ôeøý~âñ8ØF¥¿Ì}‘F€5ØAï6­õG}òç9 @„I½º{©zµÖzç)î"„â< µ>–ž½1J)•ߢ¥m»^äu¹ý{âØ©½šS§_¬KßvR+×MÄNv[žþ> øT¥Ô¿`×½¼\-'ê>;隣oßž€NQQÿñÿÁìÙ³±,‹;w²~ýzV­ZÅêÕ«Ùºu+ÉdìàvVú˽ÍuÀ-RÏ“€€i@ö™¤¿|ÆÏE!ÄçË3À#À+¥îp¥i=ˆÝ†ö©VŠÙü;k<ðÁéL ×ZW*¥^®PJ]§µ~ œ"?håö[•R /*¥îw¯²(¥ºcwõz«å}Ï„Rê6ìg9ðÅ–õ0"3Òé|7ßzäææòõ¯Ûo¿`0€Çã¡ÿþôïߟ믷ǻD£QÖ¯_ϺuëØ°aëׯ§¼¼Ërv—áÀB¥Ô­õL¿¶ó ç9¥ÔÀÅØgœÈr²Bˆþ ˜ ü0A)µ ŒÀ.Zÿ-ï µ> ”ú ŸœeþÍ<Þ×°sö_PJ½ Âîtõ1PÙÊí¿Š=[ä‡À?)¥ÖbÿMë ŒÆnûÛ¦;SÀ8 N)ÕòúeZëñm| qJ©ÉÀ€‘>Ÿ›nº‰ûî».]ºp²©¡PˆqãÆ1nÜ8ç²úúzV¬XÁþç²~ýz°ƒšÀ®'Ÿ" @ÎcéÔ«k±©®:³SB!ÎïbÏõh9°5ÆnBrœtg«éØÈ5À0ìV»÷ÿs’Õ€ÿâ“}'šýñb+·S)u1ö„ñ±@øöÌ‘€†·?¢”‡]è~%öÄö¼ßawª2*ÿÎ4Íæ9Ò©>' ©ËŸ’ô‰Òâ*0Ÿ:u*=ô pnw6#Ërss™:u*|ð[·n5u#Hf€’sç/¥ÔLì_î5À/dõC!„ŸéAÿŽ]ç8p ?ü0S¦L9îögs<[YYÉóÏ?O8æg?ûGxWk=¹-Ï]œš¬€œ§”RE|Ò?ýU >„Bñy ”ºø1p!@‡¸÷Þ{ùêW¿ŠÏ×>‡®‹/fãÆäää`Y©”ÓZÎÌg€ ç¡tוةWë¤ë•B!>kJ©þØæg‚]L>gÎzè!:wn5CðŒE£QæÍ›G2™$++‹x=ÕR±€EÒJP!„Ÿ¥Ô€@6@·nݸÿþû™3g­t;+©TŠ… R]]M*•²,”RƒA ƒîYÉ @Ú‰Rê.N>ÉRJ•›°󽬕þ韦 vÑy•ÖzSW!„¡”ê†Ý!-; rûí·óÍo~“p8ÜnqàÀ>üðCªªª°,‹@ @"‘ ‘HM,“$Ã$iéIôêÕ‹¯~õ«TVVRVVFYY‡ð}Ò_׺îžPJíÀH6[°Ûît {j7ZëýJ©§H/q !„B|Fn ü~?üã;vl»mXkÍG}ľ}û¨®®ìà#++‹X,†×ëE)Ecc#YYYî, @2@öq vŸræÎËĉ©­­åرcD£QihhàÀlÚ´‰>úˆ7šhÜݳ|p½k›J©­4_-Ù ìÖm쬵NɶlC!„h«tZð}Ø]»ØóV+¤IÊ_½É7Þx#ƒ Âï÷£µ&™lÛ!JCCk×®¥¢¢‚¦¦&´Öx½^|>MMMdeeÑÔd7ÿ ƒ455¹Ó½$É @ÚG€œœÆeYäää …°,ËùÒZ3uêTêêêˆF£Äb1êêꨪªâ£>â½÷ÞcëÖ­æC‘…=evD‹ÇjPJ™Uó}­Öúh_¯BqÖÒ3¾üﺪ?0Íu»£À `%vP²Zk}:ƒŹ¡@ii)={ö ‰L& x<ž3F:DYYåååΪF0$‘HJ¥œº“†ÇÉÎÎv·á•"ô ¤}ôèÛ·/J)*÷ãú«¿G× Z˜ 7¾?€`0H§NèØ±#ZkçÃ1nÜ8þþïÿžÆÆF"‘ˆ˜¬[·Ž·ß~›²²2sÛì—KÜO@)~ |ëÓHÝB!ÚJÙ§™¿ |({õM7ÝD×®]Ù³g›6mbãÆf*ugà‹é/³}À1ì3ÕÏ¿ÖZËðKíûݮ‘••嬄$ ’É$ÙÙÙÎÏ'røða–/_NMM >ŸÇCcc#~¿Çã& Ë\/+ ™%Hûè ЧOv”í§üãƒtÊåÅxñK©«â÷{éÔ9 Š»0`p£/éØñý|ø|>òòòÈÉÉ¡  À LÆŒí·ÞJSSõõõÔÕÕqôèQÖ­[Ç«¯¾ÊÌsÿ–þ~wÆß!„â$”R—?Fƒ}pxóÍ7óïÿþïÇÍxˆÇãlܸ‘U«V±fÍÖ¬YÞ={ÌÕEé/€áÀ­J©ñZëšÌ¼ÑŽ,À9æqg˜»/óûýÄãq‚Á õõõ„ÃaR©”seY”••ñá‡:'@˲œBsdøý~' Ë\ ea†IÒ>úÀ'Èæ{È™yÕç Ž®áèᎪå·61ï¹¥$âIA?r()-dÐà"F)eè° 0Ÿ¿ßÏç#;;›Î;SZZÊèÑ£¹í¶Ûðûý¬]»–‡~˜]»v}–H!„Ÿ J©ÀW›Ë¦M›ÆC=D¿~ýh­¬10jÔ¨f3 jjjذaëׯgíÚµ¼óÎ;D"°k(Üüi¿ÑîœDkÝìË0+!©TŠX,F  Ó±cG‰@€W_}Õ85^¯—@ à¤\%“IR©”s™¹]2™t¯ÂH VHÒFJ)ÐÜÈn:tÓÔ”tߎ®…éZØ=ô“ûGb”Dz,<èä;UíöÊ„Bˆ3¤”òÿ€]çÑìárßúÖ·øÒ—¾Ô,ßÿlTæË€ln—B!NSz¢õcÀ-¤3fðýïŸâââvyŒh4Êïÿ{'‡?‘H´\M‘ÇsÏqEè©TŠììl† ÂE]D}}=»víâ½÷Þ#PTTDß¾}àSkM<wö à¸V»-WE’É$‰D B€{uEj@2@¶sZðTU5àñxñƒÄ[ÿpÂó5ÉD’ªC5Ú{”H]”É—ì®!–e QJÇÑZs옳ê,ˆBˆŒPJù±çy<€Eii)ßûÞ÷¸üòËÛíq¶lÙât8‚OÚ²¶˜!È9@)5µ°°ð‰ªªª£¤ç€˜"týÂá÷ûéÛ·/¤¶¶–}ûö9]«Ü¯âñ¸sŒ”H$œô*Ó +™L:Aˆ{(¡ B\/ûQHÒvÍ:`íß{ ¿ß>?ÑÆäíÅ–e­P{¤Žúcõ·Áï÷3x¨Ýq°ªªŠP(ä|ÈŽ=Juuµ»7¶¤` !„øÔ)¥¾ î¸ã>þøcV®\É /¼ÀàÁƒNXYYY@ó–¼& 1Á…©ç0AŠI¯r®¦8ÝìG¦]ŠÐ3K¶)Áž<ìÛ_ßç#‹ƒÚ²°’IR H5‹ä½xðžÆ2uN^ŸÏC4%eY(¥8t蹩Ô!„ø´Í ”RÌ;—¾}ûºg(´I}}=+W®äÀÄãqÌ©)46”`§Ï˜¿‰iràxHÏjY,RJ ¦X–…Çã!;;›Aƒ1pà@¨¨¨ ¬¬Œ¥K—R\\Ì\Ь–ùRJ‘L& …BN`êõz›Õ‚ø|>§vÖ½* ‰D"x<„È~”€´MóÒÒRŽ‹âõxIÕ75»¡þ³{»{ôèØ¿lMoZÍI"„"Æ€}âmÀ€$ §(Üœy>{÷îeûöíTTT8g¶Ýùúî3ÜÉdÒ9³í"5 ç Ç¡›ÿ÷¥¥¥”––‰D8xð ;wî$‹1nÜ8¼^¯s¥~¿ßÙ?L–Ïç;.àðûýNq{"‘pºa¹V@d˜eHÒ6}ºwïîM54Äñü'½Óéù¤=VÉ…>¹4ýòz½D"´Ö9rÄ\-èB!>m>€ÜÜ\‚Á sðf …ÍÙlŸÏײKU«´ÖìÛ·Õ«W;Cu½^¯“¯ß²³‘IŸñûý²rî;® ¯aV7,ËÂï÷Ó£Gzõêå¬p466:×›Œ–AªeYÎ~d.K&“ÇÕ‚˜}*ý<$É @Ú¦Y¬¦¦à!à?AZÕYŽHêÓ×@êëëeGS€~ìØ1÷/xYBñis†Ç¹™³Ë©T ÇC*•ÂçóF ‡Ã- ÆNEååå¬\¹ÒY919üîéÕ-Û¦šYX-Jrîi€€½5555›óa˜€Ó¬fî Õì~¿¥T³ÀÕlÓ\f†šû§I’€´M³ ‡ÕÛ«mùØJÒ½§]€nVYÜíê\éWGµÖ‡Ž¿·BÑ®œ´çWa0Øx–e9iR‰D‚p8L]]~¿ßé`õöÛo³wï^'ߤÏx<‚Á ±XŒ`0H"‘hVhl.k±Â")Xç'qï?óæÍ#2yòdzõêÕì-‹ÐM}ßïÇëõ:)W‰D .ÜÏÍꜻ¦È¤¶Ë HæHÒ6ÍZð:TÿD«gÉãQäçI¥ìσù°™¥Åƒš›Êê‡BˆL°gÅâÀ„B!²³³[&רØH*•¢¾¾žP(D(Âï÷óâ‹/rìØ1gUßëõ6k¥j:Åb1ü~¿ó·Ï}Y ²rî9.KkÍUW]ÅÖ­[yî¹çðz½Œ9’#F—÷IGPwz0t‚Q÷ts¬äž÷aš¸‡šËÒ$É @ÎRºo |²RQQM ]ê?>‘—D)œ¨½±±ÑiE×¢]ê?„BdB³ƒÆ+V°páB&NœÈèÑ£éÚµ«Ó.Þ}¶Ú²,jkk‘ªª*g¨ YÍ0g¤ÝƒãB¡ÑhŸÏç›Ê$9÷8Á¬;xíСãÆc„ Ô×׳uëV^zé%²³³0`ýû÷G)åì_‰D 8Z¦\™ëM7,wj–YQÓZ»W@¦+¥J´Ö»?›·äü ÈÙ+üàZ9ÐÐJúY~¤u-Ì>i»kòS©J)8`n*+ B!2¡Y È5×\ÃøñãÙ´iÏ=÷œtýz IDAT>ŸaÆ1pà@ ðx<Í.c±˜Ó¥ÈÌd0L¿¹Þï÷‹ÅÈÎÎvòõM [vÜ’¬sO³}ɽŸ¤R)'oÈ! >œúúzvîÜÙ,øœ}Ætu¯¤¹ë‡Z610û[4uêââ⾕••+•RcµÖå™~C΀œ½>`ÑõîÝ€xÂÂs=ÎDÏ^vÝG}}=YYY(¥ðz½ÔÕÕ¸;`I"„"ŽK›éر#—^z)ãǧ¦¦†;v°`ÁòòòèÝ»7Ý»w'//¥T³®Eî´w#Ór>•J9)W@À©-1+%Çý¼däÜÓjzËT¾T*å¬TôíÛ­5ÑhÔ¹­».pöóݽo™·T*å\ff„h­ ‡ÃÜsÏ=]êëëwíØ¿ÿËÀ[À’ô Ñ$9{}.¸à'%êîoNbïÞ–/Ûö­‡©­‹sf¿_-éÙÃ^ÉÊÊr ­|>ÇŽãÈ‘#î¼-mx-B!ÄI)¥ÆÙÐúA£ † °aÃ8vì»víâ£>bèС:­S=@ÀI‹I¥RNVËT™ììl¢Ñ¨S bRjZtÖ’äÜÓ¬½µ"óoós<wV¾Ì妞øšàÃÝ~ךeö­`0èœÔ;½}ðàÁäçç3gΜ¾J©ûÊÊÊî{ñÅë•R¯ €WµÖÕxþjIröšµà5zöÌão®ŒÖƒˆÅ¬_wõërà`+uæ¿;u¶WTü~¿ó ;•JFÝéWµÖGÛôj„BˆPJM8qâ[£FâOú“Þ½{÷ g7˜ïMMMdgg3xð`.ºè"’É$ÑhÔ¹ÞtÉ2iXî‰ç&åÊ]œn¦\›³Ù&uËõØ€œ{Z]iíß'º®åÐJ¯×ët ÍÊÊ"PJ5KÍr§ó™É555Ü}÷Ý©©S§z‡ FÏž=éÔ©÷Þ{oîÃ?<§ªªjÎâÅ‹uAAÁ†êêê?¯kdÿ;3€œ½îÅÅÅ­^iweð2úâîŒUˆeYìÛWϚՇس§žh4Ñêýܼ>EV–·Ùp–®]°¶¶é•!„'×·¨¨ˆ‹/¾˜úúzõÌ3Ï8›V®\‰ß理¤Äé„å>K&“ÎYkwAº×ë=. p š³Ú@³ÙîBcW€ü›ZmÃ{¢ÕÖ®œö»î)è¦$ 9é[fUĽR’••E]]“‚UYY¹Kk}åüùóÕüùó¯ôûý׎7î’1cÆxJJJèÔ©—_~¹š={ö0­õ°7>øì³ÏV+¥`#¯k­ë?å÷íœ'ÈÙ[ Ìyï½÷8tè………ÇÝ e0Ü£G˜nÝJÒÓblØpŒeµ«jIJŽÿÝ™ò· °ëNZ OTJ½‰£ø–Özu›_Bñ‰¹øÃ&¼ýöÛ“““‚Osssyíµ×Ø·o#GŽdøðátéÒÅé„Íÿšû™f*¸ŽT*Õ, ËtÈ2g»ÍCdòÍíæ”“ÐÝ?·¼Î¬~€=Œ0‘H8ÅåJ)'/8EíÙÙÙD"§‰ \\Ïái­µIkß ü§RªóÒ¥K§Wõïßö¸qã¤{÷îôìÙ“Ç{¬c(ºùàÁƒ7/Z´(•““ón$ù ðŠÖZN·B³÷ÀÿÛ¾}{Á…^Ș1c˜5kS¦LaذaÎN´" z5ª3#F`Y{ؼ¥šƒil´s;tô· ¯×ë|°*++ÍÅ>àòôJ©ÀÀëÀb­u¤]_¹BˆóŠÖº øŠRÊ{øðáß0l¦-jmm-ååå|ðÁTWW3`À.¼ðB:vìè¤W™ƒ¦«£{¶GˀÜ­6]ŒÛ™A…® @ÎM§U„~ªëL bWŸÏ×,àˆÅbNçÆÆFÂá°SSdÒ°N6ˆ0æ>˜¯”úû²²²ñÀ¬ÜÜܫǎ;àâ‹/æÂ /$??ŸÙ³g{o½õÖ/455}aÍš59rÏÚµk­µ~¤}ߺs› gIk½S)u ðj*•¸lÙ2–-[@II S¦LaÆŒ\vÙe­ K:NQ¯=‹²Ó}қؼ¹–î݃îÇsþ]SSƒeY>|€¯}íkìÙ³‡Å‹ÓÐÐP Ü™þŠ+¥65ÀSÀËZkiU(„âŒi­SJ©Ðü Ñ²,B¡ƒ bРAÔ×׳ÿ~Ö¯_Occ#EEE””” …š Ôõz½Î »#‘ÇãiÖ’×ÝùÊ}™kDþ®›Î¸Ý}¹Ü¤ó¹§››ËÜûŒi|àfÍJÉé"LwÂz7ýuŸRê‚7ß|s0kĈ3.½ôÒ@ß¾}éÒ¥ ýúõã§?ýiñ{ï½÷°RjžÖz{{¼i $iƒt2øpðE ×îÝ»™;w.sçÎ%;;›K.¹„éÓ§3kÖ,ºuëv²í›ëç’K œV…îë“É$555>|ØÉ}0a÷ß?MMM¬X±‚wß}—¥K—²aôÖ`TzS…J©k¥•œBˆ³¤áÄ&X(..¦wïÞ444pøða§e®¹™^mº™Eó·­ejVËar¦kVšüM;79û’sÁ¦a]gäžíaj<' «eû]S{”H$œàäD+ '}ZW`Ÿà}J)•µvíÚË€/vîÜùÚ)S¦ô3f /¿ür¨:³·æ¯› m¤µn‹”Rý±wÂÉæúX,Æ»ï¾Ë»ï¾Ë·¿ýmú÷ïÏå—_Îøñã3fLËæ'LÙ2êêêH$Nú•RŠU«V1eÊ‚Á “&MbÒ¤IìÛ·wÞy‡Å‹óÆo˜ãûÛé-Bq~9eç"ós"‘Àçóѽ{w<±X̹9P4„ .L>¾™Tí&Çk¥š&ȹé„Eè§*&|#ýõu¥Tÿùóç_¬•n¥ÍIÒ”RÀØ)O~€îÝ»sçw¢”â­·Þâý÷ß'™LRVVFYYO>ù$Œ;–/|á L™2…œ{æÇÉ‚ª*;€6ˆßïwR±Z***âæ›oææ›oæý÷ßç–[n1)Z7!ˆBˆ³ÓêAcEE ÎpÞ–…çî™Zkg:µ)V7…¦‹‘©yt“3²LJë1$97°½åÏ­(æ~îa‚î}Ƥ\™V»±X¬YÚŸÙR©”„tëÖ-{0[›ëŠ´Öe@Y[·ó×H6RJÝ< dggsçwrë­·:[gΜÉÏ~ö3^|ñE&NœÈªU«¨ªª¢ªªŠE‹±hÑ"¼^/ÇgòäÉŒ3†¶úxìß¿°?„YYY444ݬ'º‘L&Y¹r%ãÆãÍ7߸P)¥¤gµBˆ³pÜA£™ßñÄO‡;v,cÆŒ!??¿Ùݹûfh¡9P4…&}¦µº3¨Ðœ¹n³Öâ3Õæ"t­u«û‘;¸0M L€kšá…îç0qâÄ) .ô+¥¶)¥¶644|@J)u8„ŒH‘”Bˆ“iõ Ñ†B!ÆŽËøñ㩪ª¢¬¬Œ pñÅSTT„û¾î€Ã¬¢¸sóMš–; ËRcþúýþ‚T*õ‘Rj¼Ö:ú½/âÌv=щ®sïG&¯åJ™ÖºÕ4,„$ gÛ>Ÿ¯Yd­”ò%J©’d29kÑ¢EUÀŽôêHÙœ9sä$îYäì}ðäææòꫯ Ú-sÍ œÖ|ÿûßçá‡æùçŸçƒ>`„ 6Œ¬¬,FÅÅ_L*•bûöí¬]»–M›6QUUå²·4räH}ôÑã.ohhà…^ cÇŽ„ÃagÒg$âŒipÝÜ tK SJ5eÒ*N!Ä Xpòü|÷€·áÇ3zôh,ËrÚÈ›y fNƒ;}Æ!-Ž–g¸´ã`0È…^8|ëÖ­ë•R?þ¤µÞ“Ù·Eœ…³*Bw½`×€˜ýÈ=¨Ò¤Y™ú!s;Ó Ëìo>ß'‡Ã^¯÷T- H¯ŽäääÄ-Z´Ø‰D¶Í™3§¶ïÇyC³7 ìÁ`@ €Çã¡k×®ÔÔÔÐÐÐ@*Õ<(ÎÎÎæ±Çãý÷ßçé§Ÿæ÷¿ÿ=óæÍ£W¯^ѹsgrrrðûý”––Ò«W/öîÝË®]»8tèñ¸‚Ø¥Kþáþë®»î¸'µfÍÊËËéÔ©MMMÄb1òòòhjjrŸa¨?ÉëÊ  @„B´Æ @Nç 1‹ÅšýM4ˆ9Km‚ ÷09w‡,÷09w–9á§”âk_ûÅÅÅ}´Ö?Y¾|ùOúôé³oçÎ/¯KµÖ’ÇÿùÓj=‘qªýËÜÏtKsîÓ!˽™Ñ@€õë×;Û...®9Ý'Ÿu0‡yíµ×¥R©­>ŸoËÌ™3÷ 2OH³ ì¤Ó999äææ:×%“IºtéBaa! D""‘ˆ»W9&L`„ ìÚµ‹>øÀ >üðÃゟÏG·nÝ;v,#FŒ`üøñN‡·T*Å+¯¼BNNŽ3xÇ´ 3¹¦ƒpì$/ïc`õY¾5B!þúµé ÑÜ×rÕ²mªI•1iXîbÓvդטí.Z´ˆ#Fлwo†ΤI“Š|>ß×wîÜùõ?ýéOqÇó­õ«À­uå§þ.‰ÓqÂÖþÝÚuJ),Ëj6KÆÔ¹÷¥”3€0:Áìo¼Á‚ èß¿ÿ¶±cÇ:Û£µ.ôx<…–eM^´hQDk½ØF·Ì™3'vÊ œG$9 Zk­”ª:›v¸`€ü~¿35  …èÚµ+ÑhÔ HL0Ò»woz÷îÍW¾òÀ""‘õõõh­ÉÍÍ%·ÚÙÊ­¢¢‚ 6‡©¯·7Ì„Os©¢¢‚Í›7›»¬le3°*ýaB!Nä´Ou@ÙrzµI©2é3f…ÃÝ Ëäë›UÓ𥩩‰ ìù¿ÿû¿Eݺuû›ñãÇw»è¢‹(**"??Ÿ;î¸#pï½÷^YWWwåÒ¥Kõ\°yïÞ½ À2­µLRÿlœ° ïé²`¯€µLÍóx<ǵv6ûY(¢¶¶–gŸ}–õë×УG}÷Ýwß[íôº¶j­³=Ï­õEáp8µhÑ¢ÝgÃÌ™3?l§Ç8§Ir”RݙثGέÞÖüÒ4½ÎC¡YYYtéÒ…X,v\0ö/ã¼¼<òòòN9Ðxÿý÷a†‘H¤Yïôììlâñ8Ë–-ã7Þ0«++€µ-6Þ—!9B!NÃi4žè:s0™L&ñù|ÇÍöðxþøãVoo>4–e9ísÁÎS ƒdgg;ÁH}}=‘Hä¸ô«“©­­eÓ¦M>ìLÿL$·.‰ðÚk¯±eËs··€çZn X¬íéB!Ä©´¹s‘I™I¥RͦW»“†eŠÓc±áp˜h4ŠßïwòþÓŽ¦ƒó8åÀÀJ©Ž+V¬˜|±W¯^WMœ8±Ã!CèÙ³':uâÞ{ïÍ}衇æTWWÏyë­·¬‚‚‚eÕÕÕÆNÕÚöi¼ÂÑ.Eèæ2÷J™»aIçSJ±lÙ2~÷»ß™úø—¾ô¥×o¸á†öXçõz7sæÌÝæ‚+¯¼2 lHy–,Yj‡Çù« Èéû9СS§N$“Ijkk³¶lÙ¬Y³¸å–[¸úê«V‚­1)Vé>Ódgg“••E8&™LÇ`äD´6oÞL("SScŸ¨iÙ%äðáüôÒK9r  ø5ð^+› ERB!N_›ÍÏfĬڻ[òÇ “3×›cÀݽè„ó?´ÖÕÀ À J)ÏóÏ?10+_5a„á#GŽT%%%tìØ‘iÓ¦y®»îº MMM–,YòßJ©¿ÕZ¿ÔÆ÷KœX›ê‰Üé|ZëfscÌñ˜ÙùãÿÈÛo¿ @çÎß{ッ <¸º­/Bk½ÛãñünæÌ™u'{­“'On8Éõç @NƒRêfàò!C†ðøãÓ¥K***xæ™gX°`‹/fñâÅäççsýõ×sÓM71lØ0çþ-?4€ bœz‘œœÂá0Á`üü|´ÖÔÖÖ6KÓJ$k$„BœB»¡›´ Yû]³ªa ˆƒÁ Éd²ÙÁ¥9Ùæ:YwZÓµ+Ò_*¥ ßxãYÀ¬Ì;vlhðàÁtïÞ±cÇ $ùô´©žÈdŽ$“ÉVÛ8{<|>Gå¿øååå\tÑEî¿ÿþ·C¡P{ ®ü .y gF“PJ]‹=ïcÀw¿û]Âá0UUUøý~¾ñopÿý÷³xñbž|òIöìÙÃÓO?ÍÓO?Í Aƒøò—¿Ìu×]GÇŽÛv,£¼¼œnݺ‡4­`0Hnn®S RSSC<gÿþý(¥8xð ÓÍÊœ2b±¯¿þº3Møø%pÒ¡LJ©­µDåB!N‡Ó†÷lÓ°,Ë"™L:)W©TªÙ™k\„B¡fmSM-ˆIÃr5i9«I­õ!`.0W)åß¶mÛx`V~~þµáp8øãÙlWœ¶:À™Sv¦+jæ2ÓȤö™4Éd’mÛ¶ñÔSOQWW‡ÏçKüÍßüÍ[·Þzë¦vxîIàåY³f­j‡mw$i…R*;åê+æ²qãÆaYååå\pÁ„B!8xð ýúõcÞ¼yÄãq^xá~ó›ß°e˾óïðÈ#0mÚ4n¸á.»ì2à“κuëØ¸q##GŽdèСJ¥hhh`ÿþý„ÃaòòòœÇûíoÛ,¢w§\UUUñ /îÊ•Â^n^ȩӫ"€ôFBqºœ¿+îÎ,wßëõ:…ä^¯·Y7,÷09ÓÙÈãñ8«"f¥Äõøm>“­µNKÒ_÷¶u{â´,;}É’%Lœ8ñ´ Ï óÿß&µÏ!o¿ý6óæÍò,:tèPõ¯ÿú¯¯Œ5êH[Ÿ´RªøíW\±¯­Û:_©Óí¶t¾PJM~\йsgn¸á¾ñoСCX»v- ¤¤„®]»R]]M,sÎ̲iÓ&þçþ‡•+?éx[XXÈu×]ÇßþíßR\\ìô6¯¨¨`ݺu=z”’’zõêE~~>Á`­5ƒ bóæÍ¼ÿþûN„oY–Óñ¡¬¬Œ?þñÄb1°Ï&ü8è~ð¡Öº=– …Bœ”R³°OpqäÈ<³ŠaYV«ÿnùó¡C‡¨¬¬tRf€f'ÖÌÉ6ÀY)1Ý%Ííü~?=öûöí£gÏžÛžzê©{dܹE)•…}¼R pÉ%—pçw2yòdçXçdûSSS;wîtö#ÓÚ9‰ðÌ3ϰj•½8Ñ¿ÿ²xàõ:´ù„«Öz[4ýƒÌõh @\”RßþðL™2…G}ŸÏG2™¤±±‘¼¼<ºwïŽ×를¼œõë×SPP@÷îÝI$TWW;yïÞ½ñûý¼üòË<ù䓦 €Ñ£G3{ölfΜIvv¶­WVV²uëV¼^/cÆŒ!‘HУG6nÜÈþýû9zôh³é°K—.å/ù‹9+Pü8‚ªíÀ-;€Bˆ3 ”š ¼pðàA|>ß O„dºŒ–——;Ã)“É$•••üüç?§²²Ç“š5kÖ’;î¸cM;}úìxâ‰'þÔÊsµ,˪ÐZo‰ÇãÏž=[Rf>§”Rcû€«IŸîÞ½;_úÒ—˜={6ùùùÍö!˲ˆD"ìÙ³Ç XW¬XÁܹsijj"77·îŽ;îxõ²Ë.kóÔ{¥T£ÇãyaÆŒ›O}kq:ÎûD)Õx¸ PýúõãÇ?þ1ýû÷h5q555 …(--% ²{÷n¶lÙÂhllä®»î" Fn ‘H„ ð‹_ü‚²2»õtNN/½ô]»vm–fö²ô¦M›ðxÛ $5Ÿ3J©À¿7c  rÅWpýõ×Ó¿gŬ¡¡ŠŠ R©/¼ðo¾ù&%%%»xà…………í‘&u  þvêÔ©ÇÚa["M¥~üØ‘öw¿û]úõëGÏž=àTAˆû«¸¸˜ž={’L&ÑZÓ±cG'pR¹L0òñÇsûí·³qãFf͚Ń>ˆÏçs>\`ܿߎ–.]Êïÿ{“3»ø pà4^j x7Ý]!„8+éZÉÅdggŸvàa~Þ¿?ÕÕÕx<3Τë^1KM–×ëu¶çõz¹ï¾ûhhh`ðàÁ›ÿë¿þkÑ¾Ž°[)µµ±±qÓµ×^+Ð?G”R=€;ºšËûôéÃW\Áå—_Nee%‡âùçŸgûöí(¥ôäÉ“?øæ7¿¹Üëõ¶ù×ãñ¬éÒ¥ËK£F:ñp6qVÎëD)åê¬iÓ¦ñ裒——DzeËØ¼y3£FbÀ€äççÓÔÔtZHmm-555Ìœ9“p8ŒÇã! â÷û›"`Y:vì·ß~;ùË_{%dêÔ©Ìœ9“áÇãñx(++£±±‘ßþö·¼ÿþûæî`çLžÎ *`©ÖZ ¦„B´‰Rê2ìNQìÞ½›p8|ÆEèû÷ïçØ±cÍRªZ[á0íU“ɤ“†ejAæÍ›Ç{ïÙóuo»í¶—®¹æšò6¾´*dz%™LnÅbå2×áóA)nîF›Ë=:t ¦¦˲ÈÊÊŠþÓ?ýÓ‚t‚¶J)¥\qŴöD+Î÷$€]°ºçž{2dáp˜ââbºuëÆ¶mÛXµjÁ`#FPRRBcc£SÒò«ªªŠåË—ãóù¸á†¨­­uR´Š‹‹ÉÍÍ%8ù²‘H„Å‹óÞ{ïñä“O÷ü ™Ÿ‘#G:ƒ“vîÜÉÛo¿eY<òÈ#f¢ë2`×ÊÓ­~|Üâò}Ømì”ÖZrZ…B|*”Rã÷vìØáŸn–eYTTTPSSƒÏg#3ݰâñ8J)gÄÔ‚(¥ðx<ìÚµ‹_þò—Î@Þ &,¿÷Þ{ßo‡t›$ðg¥T¹Öz 0PkÝ[)åQJYMMMIŠÖçK¯^½  Ôãâ‹/Î;vl@)ÕM)ÕUk]¨”òŸÍ6µÖ»=Ï﮸⊺ö~¾¢9 @”º;É ™0aÓ¦M£°°Ð¹Maa!ÅÅÅtìØ‘íÛ·óᇒ››ËE]DÇŽÙ³go¾ù&ÙÙÙÜrË-h­›‰D‚H$ÂòåË™9s&ýû÷§¦¦†?ÿùÏN›Á'žx‚ǃ`¬†¬Æþ…ïžj^¬×ZïÍÈ›%„â¼§”ºûï&eeetìØñŒ‹Ð+**ˆÅbN=¤Dhj|8Ó§OgÀ€€=}3//’’zôèÁ‘#Gøè£Ø´iñxœÎ;sóÍ7;Ût ‘H„%K–Я_?¦M›F4eÁ‚D"gâçc=F]]ÀÃØó<ܰ'–ǰ(pDk-gc„BdTº]ê‡[·n¥  àŒ‹ÐwïÞM$Áëõ¢µ&•Já÷û4,€D"ßï'òüóÏóÁv:~×®]}ë[ßúsÿþýkÛá唇B¡ßMž<¹¡¶%>ßÔüùó;æççwM¥R&(éx-ËzÿÊ+¯\ÿY?Áó‰ iéiœ‡Ýú­¹¼¸¸˜éÓ§sÉ%—8¿(ý~?%%% ©ªª¢K—.¼õÖ[ôîÝ›=zL&àcáÂ…”––2cÆ "‘¯½öZ³à£¬¬Œ¹sç‚Xü va¹ÆNµÚ¡µn_²B!D›)¥.VlÞ¼™Î;ŸQºeY”——;sµLZ²IÃ2íw=‡æ¿ø»wï`øðáëxà·ƒÁ`[ÏRk˲Þ]½zõë>ø ÕÆm !Î -(¥0øÀ$ìô':tèÀÔ©S¹ì²Ë‡ÃN‹Ü .¸€’’:vìȆ Xºt)©TЉ' ùðÃéÑ£W\qÕÕÕ¼ùæ›455¡µÆ²,Ž9ÂSO=E}}=؃ÿ€€,ÓZü,Þ!„âD”R£€U7n¤K—.gT„nY;wîtV;,ËBkÇãqV=’É$ëÖ­ãW¿úÑh¿ß¿ñÆ߸ñÆ·µÃKhJ&“ó¯¾úê í°-!ÄYä$”Rƒ{±Û¿—^z©S'bV1:uêDii)………ìÝ»—+VPYYɰaØ:u*•••,Y²ÄùE«µ¦¢¢‚¹sçšÔ«À#@%ð´ÌBñy¤”ÊŽþ_|‘I“&Qý‡Öš;v83¶ÌÄs˲ðz½$ ^{í5^zé%´ÖtèСêž{îùóÈ‘#¶ÃÓ?’*w¨¶%„8K€œ¥TWàkÀØEá(¥8p —_~9C‡u‚Š@ ÀðáÃéÞ½;@¥›7ofÍš5Îm´Ö|ôÑGÌŸ?ßt¾*6i­e9X!Äç–Rj90¦sçÎ|ç;ßášk®ÁëõžV–ÖšíÛ·;ÁGSS“3½¶¶–ÿýßÿeãÆ c€œ¥ô ¦{Y€ ??ŸÉ“'3iÒ$rrr‡ÃƒAŽ9‚eY¬ZµŠ—_~Ù¤\¥€±ë>vh­W}V¯E!„8SJ©0vçÆÛ€\€P(Äœ9søÊW¾BQQQ«)Y`wÏRJ9)WË–-ãÙgŸ%“——Ws÷Ýw¿2vìØöH“Šøýþç§M›¶£¶%„h'€´‘Rjpð% à÷û;v,“&M¢K—.¬ZµŠÅ‹SYYiî¶øvêÕvìÕù!„✣”êÜ |è àñx3f 7Ýt&LhÖ `Ë–-€ÝùêÅ_äÍ7ß ´´ôã|pQ§NšÚá©í×Zÿö‹_übu;lKÑŽ$i'J©ÎÀ]Ømt;Ÿàfà`P¬ÓZWžà¶B!Ä9C)• Ü |èk./))áÚk¯eúôétêÔ €uëÖQ__Ï“O>É®]»ðx<Öå—_þÞÝwß½²=ž‹ÖzÍþýû_ºí¶ÛÚ£vDÑÎ$igJ©vÈÝ@ ìÆî™¾؇=hp¬z!„øk£”ò3°WDfngïñx5jC† áÈ‘#,Y²„††B¡PÃwÜñê¾ð…}íððIÇó3gÎü¨¶%„ø”Hò)JÏ)Â@¨‘öºB!ÎJ©~À?(¥nÐZ·¼¾{÷îû|ðÁ?÷êÕ+ÒWÝØØøÜìÙ³Û#B|Š$B!ħnâĉW8pà:˲zdeeeM›6­|ÆŒ‡ÛcÛ–eíÏOŸ>½=!ħL!„B|&^yå•\ 0tÑZZ–ÕÕãñj­sOs:•J-Y³fÍ>ø ÌÐâ!ˆB!>WæÏŸŸ››[hYV¡Rª«ÖÚ|ï`n£”jôxë' „B!„8H"„B!„È @„B!„#ˆB!„"c$B!„BdŒ B!„BˆŒ‘D!„B‘1€!„B!2F!„B!DÆH"„B!„È @„B!„#ˆB!„"c$B!„BdŒ B!„BˆŒ‘D!„B‘1€!„B!2F!„B!DÆH"„B!„È @„B!„#ˆB!„"c$B!„BdŒ B!„BˆŒ‘D!„B‘1€!„B!2F!„B!DÆH"„B!„È @„B!„#ˆB!„"c$B!„BdŒ B!„BˆŒ‘D!„B‘1€!„B!2F!„B!DÆH"„B!„È @„B!„#ˆB!„"c$B!„BdŒ B!„BˆŒ‘D!„B‘1€!„B!2F!„B!DÆH"„B!„È @„B!„#ˆB!„"c$B!„BdŒ B!„BˆŒ‘D!„B‘1€!„B!2F!„B!DÆH"þûu,0Èßz»Ê"ذ`# À&Rã6Lã´ìIEND®B`‚lasso-2.8.2/docs/lasso-book/figures/PaxHeaders/slo-sp-soap-2.png0000644000000000000000000000013214404126126021411 xustar0030 mtime=1678814294.253801158 30 atime=1678814294.193800818 30 ctime=1678814323.169965609 lasso-2.8.2/docs/lasso-book/figures/slo-sp-soap-2.png0000644000175000017500000014001014404126126024655 0ustar00bdauvergnebdauvergne00000000000000‰PNG  IHDR ¡™Ð< pHYsÊ&ó?tEXtSoftwarewww.inkscape.org›î< IDATxœìÝw¸”õ™ÿñ÷=å4ÚA, *VDƒ‰»64bŒIlkIÖ¦jt-q7‰ùmvSÜc’5Fãj,1±€=QY;¶Ð”"ˆˆ€ RN™vÿþxŠÏ朦žÏëºæš3Ï|çy¾s®‹3ÜóýÞ÷mˆˆˆˆHwHõôDDDDD¤÷P""""""ÝFˆˆˆˆˆˆt """""Òm€ˆˆˆˆˆH·Q""""""ÝFˆˆˆˆˆˆt """""Òm€ˆˆˆˆˆH·Q""""""ÝFˆˆˆˆˆˆt """""Òm€ˆˆˆˆˆH·Q""""""ÝFˆˆˆˆˆˆt """""Òm€ˆˆˆˆˆH·Q""""""ÝFˆˆˆˆˆˆt """""Òm€ˆˆˆˆˆH·Q""""""ÝFˆˆˆˆˆˆt """""Òm€ˆˆˆˆˆH·Q""""""ÝFˆˆˆˆˆˆt """""Òm€ˆˆˆˆˆH·Q""""""ÝFˆˆˆˆˆˆt """""Òm€ˆˆˆˆˆH·Q""""ÒÍ̬ÆÌ¶7³úžž €™Õ…óé×Ós‘O? """"df‡™Ù fvH;_²'08¯ëfÕ’™õ1³­<}H8ŸSãSf6ÐÌêºc~Ò{(é¸Ý ‚‰Ýzz"m¸ øÀ̪Ú9~Kàà?»lFÒ+ezz""""Ò³Ü} `==逈ˆˆˆt!3ËÛokÇkFû5À\àw/• ôiàP`°xÒÝ‹‰±#€>áÃíÌ,þ¼ÒÝW†Û¬¶V¸û3ëΠ¿™mŸ¸ôÂð:¸û[­Ì«pîoº»oèýJï¢-X""""]Ä̆/73€‘­Œïofwó€Û€ßÓ€—Íl‡²áÿN·q0 xøð8ð´™ HŒ}˜þ<'|Ý|àÂðØ!´Ì9x:üùK‰ñó~ÀO€7ÃÀ¦ü=ô ¯q›‚©DˆˆˆˆH0³4ðg‚¼Ë­€€ç€ÿ®0>ü˜D\ì ¾B°1ÅÌj*\ê‚`eTxþ›€ýÂkFö¦†?ïB®meúŸ ¾51~$°ø5Áÿ#Ï©ðÚ/)¿iåÜÒË)é}€ß¹ûÝ}©»ÏÎ$Xá(wÁ6ªŸ¸û•î>ÏÝ—»ûo$_¨ðºÛÜý wŸžÿ«Àr`|4ÀÝë‡oºû‚ð¶²ÒÄÝ}-m¯Z¿ Ü öw`6pv¸Å,é<àCàö¶~9Ò{)采÷¿O ·%ý~ýáœPi|èÞðþ  ϵø¾»7lóZo{Tg ßà «:ÇDÇÍl/‚ ëVw_×ÊË¥—S""""Ò5†‡÷oVxnA…cQ¢÷sföAòÆG+&›WxÝ’ ÇVlƒêJhÙË$úù†.¾¶|‚© –ˆˆˆH׈°Û[Þ6¾ær ÐʘJU§JŽu9w_ef·g†Éèï§Ϻûk=1'ùdP""""Ò5‡÷Ûï–=W^Ñ ‚•’€§Ýý•.˜ÏÆDí=ðOám1Áª‹V?¤MÚ‚%"""Ò5ïÏN43Ϊ0þÏáýÅ]4ŸáýÀvŽŸ Ù¬µî>xžà=ž¬îèÀ¥Ð ˆˆˆˆH×xˆ ÿÆÙf¶„  6Åï ú…ÞßLÞÀkÎ%èÞþópüATÒí@TÎW½?dƒL *EDDD:&ì:>xÏÝW—=—"h¸ AŪ§,A ÛÜ}U…ómFÐL°ø˜ïîóËÆ ú‹Ü½XöÜP »Wª¶…™mN¯±ÒÝWšY°°ÂÝ×T_>Ÿ†ÁRô\?ààUw?°•_‘HLˆˆˆˆˆl23ûðà î®üÙ  """"²QÂDús Vq¾CPÁkLùJŒH% @DDDDd£„ÛÊŠ@xø'w½gg%Ÿ @DDDD>¥Ìl;àHàoî>·ãwq÷JÜE:LexEDDD6A˜È=µìðZ‚íHOt÷Ö:šw—= žl0ƆãO&x"NexEDDD6MØ› ÓùÊðVEPÚö÷Àƒf–í¹é°x”Ž•ïéTZé˜WÝýÈè™m <N°òð?=51wŸF°KäcCˆˆˆˆH'r÷¥föcà‚ äÌl+àXàà-à+Àh`–»_ `f}€/l›Ê³€ÿu÷ѹÍl°;ðWw_V~m3Û›`Ufª»/n+ÄÌv#è®>ˆ ãúÍm½/3«NöÒMÿèî+ËÆ u÷ÍlàD` ð_JTP""""Ò¢à _x¿ AnÅäW #Ø5¸ÖÌv†+€&à<àûfv’»ÿ-<Ïfáy†?¨pÝŸ{t'‡Vr@Ìì4à&‚@âpNß~Wé͘ÙÁÀÝÁÊb‚êWç—›Ùw)1ü"àÀ0Gæ`5àÀ]€QˆˆˆˆH88¼/ïD~ð0ÀÝ·N4³ Áî·Îr÷!î¾ pA€pgØõ‚ å]àŒ°GÌÌvî)ïÆ^6n[à·áyF»û®Å AHùøáÀ_‰}Ý}wß aà®°SzR5p!p˜»×‡çªµ9Iï¢DDDD¤cjÍlû𶯙]AðùÁ*CÒÀ×Ý}€»¯Žvnu÷x¼»?BÐa|Á–-ªZv>[vîÓþ°ùžÔßs÷Ùáy¸‚`ÛW¹ zàw11¿€+í€ e¯I—ºûßñ%woÜÀ¼¤—P""""Ò1cùáíyà߀/¹ûËecr÷RÙ±(¸³Â¹ïïH»)¼?#:®†|…`{Ôc˜ï¸ðþ¯Éƒaò— ã€Åfö3Û;º¬Š@°Õ«\y‰b@9 """"õAnùo³Ý½¹ÂØ%Ž ïß®ðÜâð~htÀÝgšÙ‹À)fvQ¸²p0°-ð£ N¹Í•Ñ*L+×KÚŠ`Åä6ÎY_ö8¼·yH/¥DDDD¤cÞq÷ß´sl±Â±¦ð¾_…çú•‰Üü˜ÜF°âlxû@3ÐÇÌR‚•þÆç«ýÛ8ç‡e‹áŠŠÈz´KDDD¤gE+ {TxnLx_^=êv‚@⌰|ïÉÀ3îÞÖ*EòzUÀNž]áØL‚U“¢»/håö~;®+(éi%X¹ÐÌúFÃêX—„ïN¾ üÿ}ù}Y?á½5÷„÷-*^™Ùà ÆG«*?5³tù“fVkfµí¼¶ˆ¶`‰Hû„ͬ¶'h&µ˜ïî•ö+÷3»îîg÷ô\DD6†»/2³k€Ëifö‚-W§ävü)Ñ$é+W|”°¾!žÎWOî!(ü‚²Á»•¿8ž  áóföG`Qøš=€S€Ïÿhçõ¥—S""m2³]€ßSaﯙÍ>ïî¯uûÄÖw•·ˆˆt•ÁØ—¶clc8¶~‘ ôïºÄx7³/Ïÿü4qþPò ©¥‰ø"™òƒD¤5fVOP~(ÁÓŸ >‡{|;÷5w¼Ç& »únîî¿è鹈ˆt„™ %h@¸ÌÝ+%­wæµêúŒ,s÷\;_SO¬¾¬•J_"mR""­2³ó:ã^ëîµ2¦ª½Z""""JB‘¶ ï_lm@¥àÃÌ>gf÷˜ÙÛf¶ÌÌž2³/V÷/fv‡™ 0³ï™Ù?Ìì}3û¼™ý™U\Í0³¬™Ýjf?L»ÚÌn¬0¶ÎÌ.1³ç¹,4³‡Ììô c'…ϽcfKÍìa3;ªµ÷."""Oˆˆ´%ÚÃ{’™UµçföUàoÀ¾ÀýÀÍKõÿkfß/¾/0¸ø&0ƒ L0‚Š0£*\æà4{š r@N(›Kà)àÇõño#H¶¬&Øg{MøÜ¶Õfn'HºÐÌÎjÏ{‘ Ó,iUøø+!‹)ÀÓÀî¾¨Âø]€×€éÀQî¾&<ž%È™Œv÷Ùáñ?ä‘Ìu÷å‰s}Ž J˸û%e×¹8áîKÂcO„ç”÷à\à_ÝýGeçêîËŸ çøÅhU',‡ùA­üîþÁÆýEDD¤œV@D¤Uî¾8¸œOPíd¡™½\a{Ò9@øv|„çÉß'ø›sr…K] >BOó/'ëΛÙ`‚@æ‘(ø¨$¬I:0¸¦Â{[–xø5‚’¯'·”¹ûÚðµ}ÃkŠˆˆH© ¯ˆ´Éݧ„«‡ûlÚ‹`{ÒdwdíÞff•ª&¼ß¡Âe^ªp]7³› ÊOIPnà‹|ÿPþš2£ ¶Z=ë^êÝ ääW̬ü¹-Û˜·ˆˆˆl$ "Ò.ájÀýáíJ3»øAú(©J@k9-jÑ'¼×Êø›«€3ø(9XüeSîÞ¿»q‚šóZy~A é  "²IÜýZ3» ØÑÌjݽXI<¾W+ ±6ö ÃÜŽÌlA.ÊÞÀ îÞ´—GùÃÚq©U@»ÜôÙŠˆôœ0×î ‚ÎäCŠˆüƒ ŠáÜv¬‹t "²IÌ,C°Å©DÐ ààsÀ‚*Rá&àP‚n½;%ŽmÈL`5p ™eÜ½ÐÆØg¶™u÷ç:0W‘ngf'TûÛ±•!˜ÙsÀóáíÅ yw"ÝFIè"Ò*3ûš™ýÀ̶.;^üÐx,L2¸ž —â§f¶gÙkÌÌ6³]e¸›`ÛÖ?_æ¸û³zQ8§ëÊêþ, ˜’óÙ=ñð§@øŸòù™YÚÌŽ5³Aˆˆ|Œ˜ÙX3›FðwrÇt:Í¡‡ÊI'Äž{îIMM”zÇf_ ]<,3³·Â~M0³ßTÈÛé2Z‘¶ þøž™ÍäVŒ”æý—h°»/2³S úm¼`fÏäOlìJ Œ'¨nÕ.î¾ÎÌî⣼’k7bþWcÂ9N ¿t‚- `·ðÏ™Ù×€_3Ììiàm‚ôÑáýNÀûqm‘.afÛ?"X6€C9„ïÿûŒõQë¤|>ÏŒ3˜>}:/½ô/¾ø" .ŒžÎGÍfÎ5³[¯h»–t5õ‘V…« »C š.^~Ÿ,·›xÝpà«À8‚&„ï"÷¬˜D}6N!¨¦uu˜CÒÚfÒ¤I\yå• ÖžêâöÊ+¯ðØcѯ_?ª««£ÃéN9¹H€ˆˆˆˆ|L„U¿ | vÚ‰üàzè¡rR©ÄwÜÁ|@Ÿ>}(ZT)×Þ|ér @Dz3OÉT²z£R2yw3³þÀBàvwÿçvŒ Ìnt÷ïtñôZ›Ã`‚DúÀwº'æ!"Ÿ|fvAYðíêëë¹øâ‹9ûì³I§Û^˜hoþÇ;ï¼ÃC=D.—#N“Ïç©®®N¾^ˆt9 "½ËOQŽ7šÙWõpùE~ëשßiÂÆ_?F$ßCPmKD¤ÝÌì‚êV‡¤R)&OžÌÕW_Í Aׂ詧žbþüùäóyÜw§¶¶–†††ä0 Ò倈ôNût0ÏŸ!è—qA¹Üé³ÑÙÖ”Àý$ôÛØøxx‡ :ˆÈF1³£û s/ÆÇ5×\Ãn»íÖi×X»v->ú(«V­"ŸÏS,Éf³¸;ÍÍÍÔÕÕE° øléR @Dz§—Ü=ú´yÎÌæçQ!13¶êÜý²ç¶"hNø®»Ø‘I…sšÞÚófÖ'œÇîþ^{Îvqï,mÏü̬oxe¹^GÐi3Û  "²‘̬ø#Þb‹-ø·û7&MšDð'·s̘1ƒ×_U«VQ*•âUææfÜêêjšššH¥RÑK´"].µá!"Ò 3‘8Çfö™ýW¥‹šÙ‰áóÿ>î>þUÙ¸”™]¬^–›ÙT`‹ÖÞ™}9 ¬Þ&ÈyÏÌîóF’ã. ¯y¨™ýŽ`õeA¨ˆHW:dfÜrË-œxâ‰| žxâ fΜɇ~H©T"NSUUE.—#›Í’J¥ÈçóÔÖÖ&Ñ€H—Ó ˆˆ@ÐØ*E°*2Ø—àò÷Às+˜Ù1À_¶ }ƒ qü0àëÀgÌlOwßÝ_3³w€3Íì2wo.»îÙ«÷„[ËùA@0 øP$X­¹½Ò›1³oägLÎ!èh~ðm`g3Û7Ñy½&¼æ/ >x/–‡ïMD¤+í°×^{±óÎ;Ç á™L†\.·É']±b³fÍâÍ7ߌs=ª««) ñ5¢Ul6«év @Dz93«~>|¼ìé€ÓÝý–Äøðs‚©ƒÝ}vøÔ_ÍìÝð\—‡Ço~ Ü8ÏPàhà!w_ÚÆü¶"(I98" bÌìà© ã‡ÿx8ÈÝ£¯õ0³¹ÀÏue/Í{º{""Ý£`³Í6cÈ!@P"7ÊÓ¨©©¡P(´»ÊÕ’%K˜1cK—~ôgµ¦¦†ÆÆF2™ fF.—£ººšææfJ¥ÕÕÕäóùh¸érÚ‚%Ò;Ýnfw˜ÙàM‚ÿ/#¨Â’´¸µìØnÉ_ÁGäZ`0)qìV œQ6öKÿé¿isŽûerÅÝóÀ/*ŒŸ dÿJ‘›&‚À§Ü/|ˆH7+A˺îN*•¢¦¦†ªªªø¹B¡@:nu‹V±Xäí·ßfÚ´i¼ûî»d2™x…£¦¦†R©D©TŠ·aUUUafäóy²Ùl‹9‰t%­€ˆôNÛ|ËU$ØZõ ðkw_^6nž»—íÞÏ(?©»¯ ó.F›YÚÝ‹î¾ÔÌŽ6³!‰kœA°Íé¾ Ìu‡ð~V…çfV8•Žù¶™ßÊ9+µ~£Â1‘®´^’|ìî ŠÅ"©TŠb±oŸÊd2¤R)2™ Åb‘_|‘™3?ú“XSSC.—ÃÝ©©©‰_­°$WE¢~ Ñå»åK¯¦D¤wÚ/Q«-«+‹¾&[×ÊkÖ¬®fV9Ž!Xõø™™í ì\W!/¤\U׫t¬6¼¨Ô\qAÙÜr=ÞˆQDzâíV«V­¢®.H+Jòù<¥R‰µkׯ«Q?ýéOñ–+3£ªªŠææf²Ù,¥R‰\.Gmm-¤Ói2™ ÍÍÍq`’J¥”"ÝJˆˆl¬hcx+ÏV–÷¬vœüŒ¶cýa#¯÷RÙsÛTÿnxÿ{w¤çé)%ò>¦NÊ¢E‹8è ƒØ~ûíéÛ·ïzÛ³šššX·n©TŠuëÖñî»ïâîqo(Ç#—ËÅISSSœ÷afñÏѸD Òå”""ëE 8Ñ̲É'Ìì `+Ê’ÃÃ`ä6‚ Yû_fºû í¸Þ´ðþóž«t, :NoǹEDzR‹-XÇs ãÇç…^àG?úwÞy'sçÎeÍšh£ªVëÖ­ãý÷ßÇ̨­­û|$ƒ òGjjjâcétšB¡°^IÞäœDº’V@Dd£¸û3û pð[3ûgwo0³ß|{öÓ /ýpAª!•±Úãÿ€€SÍì>à.ww3ûë'¶G”ãQ~ XoV”ˆ®F„Ò€ˆˆˆˆt3w_`fÏã“[©R©Ûn»-#FŒàÈ#äwÞáõ×_çùçŸg‹-¶`›m¶a³Í6‹› FÝÒ£Þ¹\ŽL&o©Šr<¢mXù|>nJ˜Éd03òù|¼%  Ò €ˆˆˆˆô *&¡GǶØb †J¡P`ÅŠ¼õÖ[ÔÕÕŃ»SUU"QÀ‘삞¬†•Édhjj¢¦¦†ÆÆF²Ùl„„ ˆt1 """"=c½2¼ÉÕèq´Ò1pà@6Ûl3Òé4k×®Ç&› –wAÏd2­vFòC¢Ò½! ÒåÔ ]D>–̬ÆÌ¶ìéyˆˆt¡8IË—/§¡¡!”|®P(´x.*¥[,ãà" HÌ,Ï穪ª ŸÏ·X)‰Ž…€H—S""f–6³2³@#ðŽ™­2³iföS3;ÕÌFôô¯évÚ‚%" f6ø °{ÙS€Â[4vð<0=qXëîkº~¶""¢Å H䳟ý,ûï¿?o¼ñ<òwß}7»í¶{î¹'ƒ ŠÇEAHÔt0¹Â!fwŸì"Ò倈H2³=£ÂÇœp œ~úéÔÔÔ0oÞ<^}õU¦OŸÎÌ™3£mCãÂ[Rƒ™Ý\åîouçûÙ-V@ÊW8FŽÉ.»ìBSSóçÏgÚ´i¸;ûí·›o¾y<.ªl•Ëåâ€#ÚŽU*•Èf³q_dgôhU$’Édv5³Ÿ¸ûw»í· ½Žéf¶ðïÀ™„ÛA÷Ýw_®¾újöÙgŸxÜ>ûìé§ž @SSSŒ¼òÊ+¼úê«,\¸0ù¡]žo¬™àî+»í ‰ˆl¼6“Уîç¥R‰#F°ãŽ;ÒÜÜL©T¢¡¡!›Éd‣P(P,ãÕŽl6K>Ÿ§T*U¬|•ì0`Àjkk¿cfÛ¿þÏ“‘‘H'P""ÝÊÌúßúl³Í6\yå•üñqÒd%555Œ;–±cÇÆÇ>üðC^{í5¦OxžŸf IDATŸÎþð–,Y°kxK»øíˆˆtDÅ$tX5¤X,²nÝ:ŠÅb‹%ª’UUU”J¥xVCC™L&nJ˜ì|­ŠDIìô!¹üòË©¯¯?yÕªU'ßvÛm«Íì!à~à¯îþa÷ýzäÓJIè"Ò-,ðeà à  Ï€¸êª«xæ™g8á„0³>ï€8è ƒøÆ7¾Á…^HMMMôÔ‘7{‘.Ñ¢´žhž|.°¸{\~·¶¶–|>™ÅGmm-¥R‰R©—ß­®®‚„õòmX¥R‰3f°víZ6ß|s.¿üòþÓ¦M›|÷ÝwÿáÜsÏ]9`À€gÌì3Û»ë=òi¥érf¶p-a"y&“á´ÓNãÒK/eðàÁ>¿»ó§?ý‰uëÖ1lØ0æÍ›0°Ã'éZ“Ð7´R¾JœJ¥âmXÉjWQp‘Íf)‹äóyêêêhhhˆ·a …ù#üæ7¿YÉdæî¿ÿþ{í½÷Þ6räHêëë9ñÄí+_ùÊþ¥RiÿW_}•}öÙgéôéÓ了ûÚ.ü]ɧˆé2f6ø!p.áŠëAÄøCvÝu׊¯ÙØ­Æï½÷·ÝvÙl–L&£J."òI²^z[GRrûUt‹‚ªª*ŠÅb\’·±±‘L&C6›&577ÇÕc›››ß3³!?þøÑÀ±»ì²Ë1ûï¿ݨQ£Øj«­1b?ùÉO¶¬©©9ïí·ß>ï±Ç+ÔÖÖ>ÙÔÔt/p H[€ˆH§3³4p>A’ùf[o½5—]v§œrJ§]çÉ'ŸdæÌ™d³Ùø<•Šw–*iRD>îÖKB‡ÖÖ”t:WÃJ–ÚMæ}är¹¸doSSuuu455ÄÕ²B¯»û{áù—77›YzΜ9ã€cëëë'Ž7n÷½÷Þ›m·Ý–pÒI'eN?ýôÛ>}úÏwÝu×%sæÌ¹¸xÒÝã ˆ(‘Ncf)à@‚íVŸ¨­­åë_ÿ:^xa¼ï¸£ššš¸÷Þ{Y»v-©TŠb±H&“ÁÝ“+ @Däã®ÝI蕞‹Ž Òét‹¤ò¨a´*’ÉdâU‘h$jD˜ËåâZiDèîE`Zxûž™œ:uêÄt:=q¯½ö:bܸq™‘#G²ùæ›3jÔ(n¸á†­S©Ô…sçνðöÛo_kfcÝ}V§þöäKˆˆtŠp»ÕýÀþѱñãÇsÍ5×0|øðN»Îœ9s˜>}: ñ¶ƒdU—Ä H©­óˆˆ| T,Ûü¹=[²¢ÊWɤòl6K¡PhQ +›Í¶HNJò¦R©¨Ç´³º»Ïþøo3«{á…ŽÙb‹-N8à€¶=z4Ûm·õõõ|ë[ßêûðÃ(@ˆˆt‚påã.Âàc·Ývãšk®aܸqvb±È£>Êûï¿×Å7³øÛ½(É2*%‰V@D¤ ˜ÙfÿÊîî«:pº'¡G[¯¢|ŽdoL&ƒ™ÅyÍÍ͘Y¼ «¶¶6Þ†•øòf£éÜ½à ¨û¯™Ùè»ï¾{b6›=nܸqŸ]³fMxbcÏ+Ÿ^ @D¤3Œ¸ä’Køæ7¿Ù¢³nG-[¶Œ^xåË—ÇI—Q’eôaíyN”òU""]aðTô ñ7§äþö¬¾ãî·nà\•„ÞÖ H´ý´<I¥RqŽGUUù|žB¡ÿÝŒ^›Ø¾ÚáJî>˜ü‡™ÕYw_ÑÑóʧ‡ú€ˆHg8`Ô¨Q\pÁÔÕÕmROJþñðì³Ï²|ùr øÐ*!(éíy.•JZ‘.åîÓ€©+ I .¼­îhÇéZ]IþÜÖsÑÖ«h+U±Xlp@°‚å…DÉéù|>^I¥RñßìáÇouï½÷î1uêÔNIÚs÷U >¤œV@D¤3lðÙÏ~–!C†Ä+©TŠššòùüF—×mjjbîܹ̜9“ÆÆFÜL&C:Ž÷/çr¹x5$Ú†• DDºÊ7 ¾á¯¤œãîåJ%ë­€D*•Ýmíç(ù<úYiV.—k‘/mÃJVȨ¯¯ß,“É|ÈO™2e^*•šS,çsÌ1+Ûñ~DÚEˆˆtšhq:¦ÿþq’x´*m›j+13>üðCæÌ™ÃìÙ³ã±ÕÕÕ J¥µµµqBe©TŠ“,£@%¤$té*«€yÀ.eÇ›»Ýýïí¯éf¶ðÀÁá¡÷Ÿ?w÷æðØ3»øp¦»oìm&¡·7(‰š°FG.—[oµ8Ê¡‹‚(qýÖ[oåé§Ÿ`‡v˜{â‰'ÎÛÈ÷P®™í•ÉdöZ·n]éxËÝg•J¥ÙÇü²ž[>%€ˆHgˆ¿Å33Ž=öXÆÏ[o½ÅóÏ?Ï”)SØa‡=z4C‡¥OŸ>ñ £­YkÖ¬‰Ké&*Óét¼ +úàŒªk%iE+%*Ã+"af;? ØZe@AÇïkÜýà /¹ȸûôM¸œÃúIè³úHQÞGòoiò êêj–.]ʯýk–,YÀ¨Q£f]yå•oÂ{Xï=¥R©Ç … `×t:½“»o›J¥&N™2e…™];aÂ„æ žE>Õ€ˆHgXï[<3cذal½õÖwÜq,^¼˜3fðôÓO3|øp¶Ýv[6Ûl3ªªªâѨF}h”—Œ¬TÁ¥üÃ6ÑÍWˆˆ´›™ ¾ |¨&ø»vA^G«Û’Âr»?ßÄ˶ؾÚVàQvÍNúˆ:¢G7£Æ¬åÇ2™ ¯¼ò 7Þx# ¤ÓéâøñãŸ¸à‚ 6%€*ŸWS*•ºý裞z HM:u;wß5•J :úè£|ˆÙ4f6øACÓÁP¹›oôÁºÕV[1lØ0òù*¿›L²Ô ˆˆ´G¢²Õ5ÀVáá€KÜýoÝ4ø‹’h´?$z}y%•G[®’åwW®\Éï~÷;fΜ ÀöÛo?ÿŠ+®˜2dÈÎHeíÚµwMž<9× ç’^@ˆˆlªæ¹sç2tèP¶ÞzëÈwÞÉ€3fÌz•°¢[SSS‹ Ñg”ã}ˆ&Žt:!Q—hU$Y +¤DD* +[ý°Gxè-à ào«Sjç‹R©”ü¥]¹ ÑöÕ|>O:&•J­×½T*±`Á~õ«_ñÞ{ï‘J¥J‡~ø´o|ãÏutòî^r÷=öØ¿wô\Ò»(‘MõýÛo¿}õwÞy\mmí¾€E%!8à^{í5~ùË_2tèPÆŒÃvÛmGÿþA߮־ÝËçóë•ÕM!@œ÷‘܆•Üš¥i™íKPÙêðÐáãde«îôVôÃ’%K>|ø&%¡G«ÉmXQŸ¤gžy†›o¾™\.G]]ݺóÏ?ÿ¾#Ž8bq'Ì}]&“¹uüøñ­š%½Ù$îÞ@P)æfö'à”(ßcÛm·eøðáŒ?ž%K–°`Áî¹çêëëÙqÇÙ|óÍã²¼á¹âmÑ^å(¸Höq÷õ’Ó£R’Ñ1uB‘rf6øw‚-WÉÊV?v÷U=8µYÀ `ó¯ýëüÇü#GŽÚ· ËÌ⦃QÀíhlläÎ;ïä‘G`ذa‹/¿üòû†¾®æýv.—»yÒ¤I=ù»“O0 "Òaý$t3cË-·dèСŒ;–wß}—·Þz‹ÿû¿ÿcàÀì¶ÛnTWWÇ' ¿¡‹“ÊÓétÜt0YÁ%™dY,ã ¥¦¦FE$ÖFe«‹Ý}aN ww3»¸þÙgŸµƒ>˜<³Ï>›C9¤]«!¥R)Þž催X±‚_þò—,X°€8àÙK.¹dZ:îŒ/fž[·nÝ_&Ož\ÜðP‘Ê€ˆHghQJ2’\á(•J 4ˆAƒ1fÌV®\I]]]œ$­€477·8¢Î½QÞ‡»¯×#¤X,ƯI4"Ìw÷/AD>Ú¨lõwµÇ&V»ß`f €«Ý}ÜSO=ÅSO=Åî»ïÎ9çœÃ‘GY>~½ÇQƒÁ|>Ïœ9s¸þúëY½z5ÕÕÕMgœqÆ'œp‚N˜j!•JÝsôÑG¿Ð ç’^Nˆˆt†vwó*µÔÕÕ­×|+ú¶a …8Ç#êxUÓª®®ŽWJ€8pI$¡Ç?ˆHïV¶úJNO$¡+éEÂÊVÿ |&<ôðCàwîþ‰Ø’éîOOšÙî[ÇN]±bEöºë®ã·¿ý-ãÇç„N`=‚â]QHCC¿ýíoyùå—Ø{ï½_¾ôÒKÿV[[ÛámRf6§X,Þ>a„†ŽžK$¢DD:CÅ-X#FŒàÁäž{îa=ö`ìØ±Œ93«Øx+•JÅ{ëêêâ€"Y×> B¢­YɪY555ZéeÌl‚CÃCQe«_¸{gô¸èvîþàt3ûðUà¼\.7ô¾ûîã¾ûîcË-·düøñ 6ŒE‹ñðólÙ2²Ùlî”SNyø´ÓN›ÝÓ0³Ç&L˜ð*ê!Lˆˆt†õ¶`EÕ°þùŸÿ™b±ÈâÅ‹yòÉ'y衇Ø~ûíÙ}÷ÝqâÄÎdDÖ£DD:ƒCßÑZ÷ó!C†pê©§R,Y²d /½ô»ï¾;ýû÷_“N§ã×$ F%y“AH*•ª¸ +Z8pà®k×®}ÅÌvë¡úþ"ÒÌl3‚<‰‹€‚/@î$è`þfOέ«„ÃnnüðÃx\¡P “ÉÄ«Q©ÝL&øS•ì‚ÕºOvAjàôïߟF|üøñä¾´ø›vçwÖöë×oh©TšJ¥†ºûPw ôoq÷’»?xì±Çþ½û¦-½™é -’Ð7Ô8«ü¹¨”d>Ÿƒ‹b±¯vT 8Ê{„DÇ¢> ÍÍÍ\sÍ5zè¡ì¸ãŽôïߟÏþóé³Î:ëІ††C_~ùåï±Çïüãÿ¸¸xX[µD>^ÂÊV?Æ„‡?þÇÝÕo&OžÜ, o±‡~¸OCCÙLf™õ)‹¯üñïôÄ¥wR""¡bÞJ?·õ\p$sA¢mVQ¿hV”[!Q™Þh+V¬(-]ºô²_|q)pìÎ;ï|ìÁ\»óÎ;3dÈvÙe~ñ‹_lUUUuÞ;ï¼sÞ<Ïf³O …û€»ÝýíNÿ-‰H»˜ÙhàÇÀ1á¡•Àÿã\Ùêã䨣ŽZÌo"ÝNˆˆt†6;¡G?·ö\ôºh$ÊñÈf³ñªG.äVÖÔÔÄ  …BÜ=: …Bá&wÿá%n6³š×_ý@àˆúúú“<ðÀ‘{íµ#FŒ`À€œvÚiÙóÎ;ïðÆÆÆÃŸ}öÙŸ9rþ‚ î"Øcþ„»kO´H3³áÀå´¬lup¹»¯èÁ©‰H'R""¡ÝÐ[{ÎÝI§ÓñªG´ «ªª*îR,innŽƒdùÝ(‰¶`-šf…ßš>Þ¾gf;ßÿýǘٱ{ï½÷çÆŽ›Þyç|ø¤ƒ>xð¨Q£Øzë­éß¿?çŸ~Ÿo}ë[_zòÉ'¿dfcÝýùÿÆD3«¾|~¸¸7U¶ém€ˆHgèPz$•JÅG>Ÿ;žGyÍÍͤR)jjjâ.èù|>~Mcc#©T*ªÆÕîNèî¾ø3ðg3;ïüã`b6›=î ƒÚoß}÷µvÚ‰•+Wd7á÷#" ae«Ó†‡‡_!¨lõpMLDº…é LBo+()•J-º GÁErV²)a¡PhukV¢p»$&÷rxû¡™ züñÇÇ¥À3›r^ ¨²•ˆ(‘ÎÐjz[GùÏî—ß-߆UWWGCCÙl–t:7*ljjŠWEÖ¬YC:¦X,’J¥>І:ÀÝßþ7¼‰È&2³} *Yú€ ·‡*[‰ô2 @D¤38Tî„^þ¸­$ô¨‹y´¥*ÙñÒé4¹\®Eôä ÈxÐÔ©SÏ5³ÙMMM3&Mš´ª ß¿ˆ´ÂÌFÿ|0‚ÊV¿®rwý»é…€ˆHgبN蕒УûòmXQ©Ýd?b±H©TГӣjXk×®W@Òé´¹ûŽî¾cUUÕñS§N}ÇÝç³_xá…ÅW]uU§¬ˆHef6ø.ð  šàïÄ]yoöäÜD¤g)‘ÎP„‹MIBw÷¸·G¡PˆËêFAHrËU&“ÁÌâ¼hVœd2™†»ol¶ï¾û6<ðÀóÌln¡P˜uüñǯé’ߊH/dfu•­.„‡¾«ÊV" @D¤st8 ‚.çÙlwoQù* 8r¹\‹€#¹RuFogH™íì‘ÍfOœ2eÊ;À즦¦Ù'tÒÂ-e"Ò~f–ξl~`Åão=5/ùøQ""¡•öæ”J¥¸ãy*•jÑ$—Ëafñ–«d…¬dòî»ïÆ+ ýû÷olÏÄÝ= †ÕÔÔùÀ¬Þ(‹³²Ùìë&Lhîè/GäÓ.¬lõS`÷ðÐ"àJà/O ‘^Oˆˆ¬ÇÌFKà Pí±^'ôÙ†u/V@ …BÅ\(Ñ<¹ «P(P]]Í‚ ¸ñÆèׯßêI“&½±‰ï½/°W&“ÙËÝ S§N}³X,ÎÍçó³N<ñÄå›rN‘O+3ÛŸ ²ÕçÂCï”Øý¹»+x‘Š€ˆH%»'›Ùj`6AÇðEmÔèoµ o¥ŸËG¯K®f”J¥x¤¹¹9܆{æ™g¸õÖ[Éçód³ÙÜ9çœ3¥¾¾>×Ñ_‚»7¹ûðT*µcuuõÄx`y&“™ÝØØ8gÒ¤I ÐV-é¥Ìl‚&‚'T¶jþ¸ÆÝ?ìɹ‰ÈÇŸ©äM`g ?°/°7€™-fsÃîᇖ+ ñÑ =™÷ÉÎèQ¢zsss¼ëöÛogÚ´iÔ××ðíoû¯{íµ×{ð;XP,o}ùå—×;v›B¡0*NïZ,Îf³£ ¾õéUÌl+à*‚\ AÃÏï»ûÒžœ›ˆ|r(‘JÞÒáÏ©ð0gfÓÜý±ðx‹6. =ºE½=¢€ ›Í’ÏçÉd2-ò>V¬XÁ¯ýk.\À¨Q£f]yå•÷ë×/ßÁ÷îétúÉñãÇOJÇ<ÀÂð6eêÔ©››Yÿ^Cä%Üšxð¯@¿ðð£À7Ý}FMLD>‘€ˆH f–%Xù(ñQà?ÞæOߤNèÉ$ôè–\‰ÎYUUE.—#NcfÌš5‹ßüæ7QçóâøñãŸ¸à‚ ¦wô½»{®X,Þ1qâÄ×Z3a„ÀŠŽ^Kä“ ü{pÁv«¡áág *[=Ùc‘O4 "}»¹°Á GkòÁÇ]eù EØô$ôè>•JÅ+ åÕ°¢•|{R©DÿþýW]tÑE÷î¿ÿþË:üK€Åbñæã?¾3Î%ò‰fAeˆ“kV>æT¶ºK•­D¤#€ˆôRaÍþ‘ÀIçéÄÓ+µµü£¿`&ð× ÿùhâ̬p A×ò(·kð´»/豉fvðM`"aPTWWÇa‡ÆøñãÙgŸ}X½z5‹-âÑGå®»î¢T*1tèÐ¥—^zé½;î¸ãêŽÎÁÝ?¬®®¾åˆ#Žx«£çù$2³#€ŸcÂC‹ÿSVR[D¤Ë)ù ·RìG|Ô„‡¹ûÂN¼ÎÖƒçIÐIùl`@t|ðàÁì°Ã¼ýöÛ¼ýv[¾Ï>û¼tÙe—ý½ºººÃÿ1J¥RóR©Ô­GuTg䎈|¢˜ÙXàÇÀ!á¡€×¹{SOÍKDz7 "Ÿ@áVŠ} ¶[Õ…‡ß!<:5yÔÌ..Žt÷:á|}I}úô9£©©éb±WãëÛ·ïš &L;óÌ3gtô:€—J¥'¦OŸþàUW]Uê„ó‰|b˜Ù.ÝËO&¨d—~ \åî«zrn"" @D>aÌlÁv¦¡á¡÷€¿³:»;±™ý¸,|øuwÿegžÿ„N:oÞ¼cúöí»Å AƒúœwÞy‹ªªªõÿŸ½û“ª¼8þ=³;»KQ@@@°QEÊ"Ø@±€¢bo(* Iü%1Í’˜KÔ4“ "**±÷ÞŒ‚°KGŠ€J“^–Ýr~¼ï°ÃìlvfvÙóyž}&{çÞ¹ïvæžû¾çÜEÓž*žhé7­^WÕÕ):ŸÿÀÝEUܲ«Rq®&cǎͶÞ¦¾‘ 0¸ hã7Ïn·’ºÆ˜ÚÎcj!q1×LPpMßfÕtžGÜ9øînj¥ªRq.cÌž‰ëåq7ÐÁo^æ—Šå˜ÆSÓ²«ÞÅ“N>‰ô< …ß4xµºÝË÷ðœüø1.iõªúhªÎgŒÙ}¾—ÇŸqF¾þܧª¥˜1Æì& @Œ©%ü¬ÇÉÀ ”Íz¼ªª S|Þ,`0|ŒTÕÇSyNcLõ‰Èñ¸^'ûMqÝÌÿ•ÊÆ“*€S øÒºâ’H˜¼£ª)M¦öÁÇx`8.ø¸ZUŸHå91Õ#"Gâr<.õ›Š€û{Uuc¦ÆeŒ1{Ëc2ȯç>Éÿ€MÀ˪º4 çΞ†àš”]®ª/¤ú¼Æ˜Ê‰HàÀPÜçBx—`¾*“c3Ƙš`ˆ1""MqɤûM37Ò±–Û/÷š \„kÚw©ª¾’êóc*&"í€[qÕ­‚¸ÙÐÉÀ­ªº8“c3Ƙšdˆ1à—Vœ‹kV‚ËõHK×n|ü·ä«¸HUßHǹ1å‰ÈÀÍÀh Ïo~ xÌÌØÀŒ1&E,1&D$ ôò›VÏ«ê¦4?>øØ\ ªo§ãÜÆ˜]ùYÐ_?ûÍ¿UÕ©™—1Ƥš Ƥ‰ïÖ}p ®ÏÆTàU¤éüYÀc¸à#¶ìÊ‚cÒ,®{ù@3¿ù àN[ iŒ©,1& D¤®·G.°xNUW¤ñüYÀ$àr\ðq‰ª¾–®ócv΀Ž`×îåóüïϦªÉ¨1ÆÔ6€“B¾ÊÕÊz{,Ã]hlKã²€ÇqÁG).øx5]ç7¦¾óK‡âÃýæe¸îå¤kÔcj @ŒI¿Ìâb =®šÍçÀ[ªMãbÁÇP\ðq±Ƥ‡¿q1pÐÉoþ¸¯ªáLÍc2ÉcR@DÁ5ÛWiêEU]æ1Är>bÁ‡Í|“&"rðÊ N¬þ üSU‹360cŒ©,1¦†‰Hà|Üß×:࿪ú}šÇßd°Wj÷õtŽÁ˜úHDÎnŽñ›6à‘ûUu{ÆfŒ1µˆ ÆÔà4\¾À\à¥t4LG0‘²ç—ZðaLj‰È‰ÀÀ)~ÓvàßÀ=é*³mŒ1u… ÆÔ_Ýæ"à\¾Çà½tWµñ3“på~Kp9Víʘ‘À)»ñPü¸7Ý3ŸÆSWXbÌ^‘ýqym€0ð²ªÎÊÀ8b9—Q–óaÁ‡1) "§âþ~Ó` .ðX“±cL`ˆ1{Á'›_4¶“UueÆÆc çÆ¤”ˆœŒ ³ÄìSDD²²². ƒG}ôÑYápX ¢ápxG8ž\Õ é\ŠËZ‚K8/MÇØ+ÏéÀ+¸`h"pM{ŽS'ˆHp9n©UG¿yððUÝ”©±cŒ±ÄìC|ðqA0ì>zôè¬V­Z‡yýõ×£Ÿþ9ÑhôyUSÁñGãfϨj8mo üxúo€ç€ËT5’©ñSÛ‰H#`ðk ­ß¼–²¥V[256cŒ1e,1û|œ ó¯»îº¬6mÚ”ÛçóÏ?çå—_Öh4ú‚ªÎJ8¾;p —T5š–Á'!"Gïáà_.®î2cêiüÄÿ´ô›—Æ«jq¦ÆfŒ1¦< @L烳³²²Žºîºë²Ú¶m[á¾_~ù%Ï?ÿ|4¾¬ªþøøàc&ðr&—9‰Hgàc ð0Ø. Œ)ÏçkÝü7Sð5ðO`Œª–dfdÆc*cˆ©Ó|ðqVVVVŸQ£Fe|ðÁUãƒF£¯;( >f¯d8ø8ø8ø8-“Õ·Œ©D$ø%®XD¬ŸUpðd&—NcŒ©š ¦N ƒ§ã«|ÄòôÓOk4WÚöKàÕ á‚öÀàU]Ÿ©ñSÛÄu-?÷w 0¸WU_ÉØÀŒ1Æìë„nê¬`0xÐwĈÝ >òóó 2yòd¢Ñèr2|´ÞÁK€A|"ÀñÍ£ÀkÀíª:-Sc3ƳglÄÔIÁ`p pÂ5×\8üðÃwy.óõ×_SZZJÇŽÉÍÍ­ðufÏžÍäÉ“5¾©ªŸ§xØI‰È~ÀûÀÑÀ7@U]ž‰±S[ˆHc\nÇ À¡~ó6\CÎûTuE¦ÆfŒ1fïØ ˆ©s‚Áà*>6oÞ̤I“øö[×îã€`øðáÄJò&êÑ£€Lž<ùL)‰%¦§‹ïWð<.øX œnÁ‡©ÏDä@àÿ€øÍkpÍÿ£ª356cŒ15Ãf@L""§dggŸ4bĈ@‡vynãÆŒ;–Ž;2xð`6mÚÄ“O>I àg?û@ Â×õ‰é‘h4:NUW¥ú}ÀÎ¥%O—[SUõËtœÛ˜ÚFDŽ~\ äùÍ‹€¿Y%8cŒÙwT|EfL- OÊÎÎ>iøðáGq^x! 4 M›6 <˜µkײqcå7MûôéC~~¾ƒÁÓSùü |”—Zðaê#9QD^æ?Ä3pHWUkÁ‡1Æì[,1uB0<1ž2|øð@§NÊ=¿aömÛÆ–-[ð•­—’““Ã~ûíWå9ú÷ï…B‡ûnÊ)%"¿ÅÝíÃUõ­TŸÓ˜ÚBD‰ÈDd>®òÛ9€/'«jU}LU#¨1Ƙ”°ÄÔzÁ`°_4,øØ¼y3O=õíÚµcøðá,^¼˜'žx‚p8ÌæÍ›yýõ×0`999Už§yóæàJ{¦4‘áÀþ×_ªêSy>cj 9HDnÃu)8·üp,ÐMU/TÕ38DcŒ1i`Iè¦V ƒ}£ÑèiW]uU K—.»<·uëVÆÇAD0¤S§N >œÇ{ŒÇœ 6о}{ú÷ï_­s-Z´ˆ@ F£ÛRñ^Dä\à\ s‡ªþ#Uç2¦¶‘>ÀÏØµqààaà!UÝ”©±cŒI?›1µ–ˆF]qÅ®]»îò\,øhݺ5—]vÙÎó:0bÄ–-[Fqq1çw^¥Éç1‹-bòäÉÑ@ 𮪥èýô&ã.ÀƪêïSqc‰HùSnnîüœœœ/EäB‘ªÜ«sæˆÈ¥"2˜ ÃýÛŸ º¨ê½|cLýcU°L­$"½À¹C† ‘üüü]žÛ¾};cÇŽ¥¨¨ˆ_ÿú×I—W-_¾œñãÇÓ®];®¾úêJ—`-_¾œqãÆEOB¡Ð5ý^À]MpI綾ݤŒˆ ƒ#C¡PÇvíÚ•ôêÕ+wëÖ­:eÊ”H4ý{$¹1çm…K&ÿÐÚoÞLþ©ªskúœÆcê @L­#"Gó* >ÆG^^ß~û-;wfèСdg—_M¸|ùr&NœÈATa|| …R’."mÿ퀀3­ªIñ?$ Ž…BGµlÙ²¤wïÞyùùù4kÖlç~Ë–-ãᇎD£Ñ¡ªúL ûà'Àå@¬ûç·ÀÀ꺾&ÎcŒ1¦î³ÄÔ*"Ò+œÉ%—ÈQGµËs±à£iÓ¦\yå•|ýõ×Lš4‰öíÛså•W& B¾ùæÆÏ9çœCŸ>}vyÎÏ’D£Ñè¡PèͽŸýp3½€¹À‰¶äÄÔ$iœŸ}E$9­Q£Fáž={æöéÓ‡ƒ:¨ÂãÞ~ûm>ýôÓ¥¡P¨“ªF+ܱòs7®ÀÍxÄÿ}üx^UC{òÚÆcö]€˜ZCDº‹/¸à9æ˜cvynÇŽŒ7ŽÆ3lذÁÆ’%Kxì±Ç8ì°Ã¸òÊ+“Îrlݺµ\Þo¾ù†qãÆE#‘È´p8üFŠÞO6ð p&° èk]ÎMM‘<`pvvöÕÑhô¬ÜÜ\íÕ«W°W¯^rðÁSôŽ¢¢"þô§?…#‘Èyªº["Ò \4ñ›‹§Tõ‹Ý{GÆcê @L­ "ÝÀÅçw^à¸ãŽÛå¹XðѰaC† V.Ȉ!‡rHÒç­ZµŠ1cÆD"‘ÈôT"òðc  ªŸ§ê\fß'" _VVÖåÀð@ ×­[7éÙ³gvçÎÉÊÊÚí×|â‰'ÂóçÏ&_Qóçç×q•ÜÀu+xDU×íö Œ1ÆÔ;€˜Œ‘#À%É‚’’ÆO `äÈ‘±|Ö­[WºßªU«;vl$ ÍŠD"/kŠþDäfàO@¸XU_JÅyÌžóôǽƒ€ÕÀlàã=]’” "Ò ž••5JU›tìØ1’ŸŸŸÓ½{÷jõ·©Ì¼yóxâ‰'vD£ÑU‘ŽÀ(à ¥ßÞÀ-³z/UGÆcöM€˜Œ‘®@àÒsÎ9'зoß]ž‹+W®ä¿øÅ.I´ÉÄ'9²\NH\ð1;‰¼”Âàcð®ÌõOUõþTœÇì9ß—âe\à‘hpª®Lï¨ÊˆÈ‘À¬¬¬ÑhôvíÚ…Ž>ú蜞={’——Wåñ6l`áÂ…¬Y³†¦M›Ò·o_rssËí‰D¸ãŽ;JKJJ†©êÓqçÏNÅõî8›²ÙŽïpÕ¬PÕoöþcŒ©,1#"ÀЊ‚‰'FÙ´i 6dÔ¨Q4jTy“òåË—³`ÁN?ýô]ú¬Y³†1cƤ#ø8xÈþ¦ª¿JÅyÌÞ‘³€ûáŠ|…«Rvp nää4é`࢜œœ«KKKjÞ¼yé1Ǔӻwïr9L™6mÓ§OçÛo¿åÐC¥I“&Ì›7æÍ›sýõ×'í‰óì³ÏF ß …Bg‹ÈA¸~?ñ»D÷qÝÊ_PÕpM¼_cŒ1õ— &#D¤c ¸bРAròÉ'ï’1[ZZÊ£>J8æšk®aÛ¶mŒ;–¼¼Pà]à!à%+¡kŒ1&,1i%"|ð8õÔSËÍ|¼õÖ[œvÚi\{íµ»×¼ysFŸqã;v,£F¢I“&TfýúõŒ;6RRRòU$y6U_/ÿ$Ðø¸PUw¤â\&µ|bz>×àëæƒ²²².ƒÁ@×®]³úôéèСCVUes£Ñ(‹/¦°°¹sçRZZJÆ ùáH»vívî×±cG7nLAAmÚ´`õêÕ”””вeˤ¯-"ôêÕ‹/¾øâ›P(4@Ukì}cŒ1ÉXböšo¶—[ÒRa‡oi®0`@¹à\¿ŽY³f±lÙ2®¹æšrùÍ›7/7RQ²~ýzƌٱcÇ¢H$òLŠg#î;p¯V§ð\&µn:ßÛ†‘ñes³²²† »víJïÞ½«U6WUY±b………Ìž=›H$B·nÝ6lÛ·oç©§ž¢Aƒ»èÑ£³fÍ"??Ÿ‚‚¾øâ zôèA¯^½*S¦Li‡û7lŒ1Ƥ”倘=""ù@\¡Ø²‘·Uujû†ŸrÊ)Y§Ÿ~z…·{¿ÿþû=?*J:ß¼y3cÇŽ`ôèÑå–cmÞ¼™|0¼}ûö%‘HäiUìÑ›¬<†[ºr…ªNNÕ¹Lj‰È©ÀÛÀ2 WEË´ªñ:Ç+DäJ IçΣ½{÷véÒ…`0Xåñ«W¯¦°°ÂÂB¶mÛF×®]ÉÏϧsçÎ;+»…B!îºë.ú÷ïÏÀw9~ùòåŒ3†`0H—.]èÛ·/íÛ·¯ò¼÷ÜsOñæÍ›­ªÿÞ“÷mŒ1ÆT—Í€˜=ÕW%g5îâûЊvŒýúõ«4øhÙ²e¹¥V‰F“&M¸îºë˜:uj¹Å‘;v,÷3© >úàÖÊÜiÁGÝ%"Ç/ësö$ø‘Á`ð-9ê°Ã õîÝ;§[·näååUÙ!°¤¤„©S§RXXȺuëhÖ¬›7o榛nJšï éÖ­³fÍ*€rÈ!4mÚ”.]ºpÁT{üGqDîôéÓO,1Æ“Råk2S=o÷¨êx  ¢D¤m ~â‰'f}öÙ»áp˜ÒÒÒrÇ4iÒ„¦M›²nÝ:ÆÇÖ­[“îsÖYgíRV4| …žLe¹Pi ¼4^nKÕ¹Lj‰Hoܿ縎õ ÷äuÀ­Í›7ï~ÓM7ɵ×^›Ó§OŸ*{vðé§ŸX¶lÇ<7ß|3×\s ªÊ’%K*<¶gÏž¬]»–•+wmWËé˜3g‘Hõãï¶mÛJVVVŸj`Œ1Æì! @ÌQÕmÕÉ«ƒ}ôÑYguV¹™^xG}t— $V‚àú믧´´”±cÇ& BâmÞ¼™1cÆ„wìØ±¬´´trŠg>òpAG`VñªÎ‘ž¸eWg©ê¼½x­‘§žzjÎþûï_ícÖ®]Ë|@ `äÈ‘üñ4jÔˆfÍšqðÁSXXXá±:u¢qãÆI÷ÉÏÏgûöí,^\ý|r¿ת^cŒI9 @LJE"‘¦½zõJºìª_¿~¬^½š &PRRBii)?þ8ÅÅÅŒ1‚6mÚ0zôh¢Ñ(cÆŒaãÆIϱuëVƌپ}û7¡Pè©44Jûp4°8_U·¥ø|&Däà-ÜRÔÓUuÆ^¼Vv$i|À$}~Á‚Ì;·Üöüü|ŠŠŠX´hQÒç-ZDQQQÒ× tïÞÂÂBsùZ·nM«V­* `-[¶,FËÒcŒ©a€˜” ÅëÖ­Kú\Û¶m1b«W¯fâĉ<ñÄ1jÔ¨Õ}bùüq¹×غu+=ôPxûöíߦzÙ€ˆ ~ˆë}•ª.KåùLjø¦‘âz}Ü ¨ˆôIøiº;¯BÅÅÉ‹ÀÍž=›·ß~»ÜöV­ZѺuë¤BÏž=QUæÌ™Sá9óóóÙ¼y3Ë–-+÷Üe—]ƹçž[帷lÙÂ|@AA„Ãá¿Uy€1Ƴ—,1)‡gL™2%&_¡tðÁ3jÔ(Ö®]ËâÅ‹¹êª«Ê•mÒ¤ £Gæì³ÏÞe{,øØ²eËÊP(4)ÕMÓD¤;ð°ÿõªúV*ÏgRêD ®ë÷ƒÀô$?'U÷ÅT5œ••5kÅŠä ÃóóóY»v-«V­Úe{8¦M›6Ì›7¯\>TãÆéСC¥³‡z(M›6MºO›6mÊý-Å1mÚ4ÆŒSrÏ=÷è|°LU¯TÕO«z¯ÆcÌÞ²*X&Õ¾X¿~ýÑo¾ùf`ðàÁIÞ¶mÛ2jÔ(ÆϤI“v™‰I¬´}ûvÆŽÙ²eËê4§FÀ{À]©<ŸI¹©¸™¬ÊTý …^={v÷”Ë<ïØ±#5¢  €V­Z±téR ˜;w.Á`P(ÄüùóÉÏÏßå¸üü|ž{î96oÞœ´çˆpÉ%—дiÕ“5¡Pˆyóæ1sæÌТE‹²ÀÆh4ú˜ª>QZZúåî¼WcŒ1foX³×Dä(à|*èâËðŽ4hœ|òÉ–á]µjãÇgÿý÷O„Älß¾‡z(¼iÓ¦5¡PèQU-_J«†‰Èdà2\§óÞªš|]™©·ü²®E7Üpx`¹ç_zé%fÍšEVV¡PˆnݺѫW/Ú·oÏØ±ciذ!Çßå˜ââbîºë. Dÿþýw{LÑh”¥K—2cƌȜ9s4–¨ê‹Ñhô¿ÀiÈ—2Æcʱ%X&åTuE4}òí·ß޾÷Þ{F¼mÚ´aÔ¨QlÙ²…qãÆ±cGù¦Ì%%%Œ7.²iÓ¦ïC¡Ðci >þ|„€¡|˜dTuq0œ3kÖ¬¤ÏÇÎ?þx~ûÛßrÉ%—бcGùùù|õÕWåÎóòò8âˆ#X¸°ú•U•eË–ñòË/ëwÞY:a„ЬY³Þ …BWD"‘"‘ÈUªúŠÆc2Å–`™´PÕÅ"òÔûï¿?4Î8㌤3!­ZµbÔ¨Q¼ûî»deíÚ¿­¤¤„1cÆDÖ¯_¿Þ%©·ïøþÿë(pà IDAT¯UuJªÏiê®P(4qúôéwvÚi¹‰ÏÅò5¶nݺ³£yL=xõÕW™3gÇ{ì.ÏþùÎÆ[³f ³gÏÖiÓ¦•lݺ5'++ëÓp8üð‚ªV^ÇÚcŒI# @LÚø äñ?þøªh4š´7¸ äÊ+¯Üe[II ?üpdýúõB¡ÐU-?=RÃ|¿Ç\à%UýgªÏiê¼§¶lÙòçï¾û޶mÛîò„ˆŸŸÏôéÓ9÷Üswi¢Ù¸qc:vìȬY³Ê 7®ðd›6m¢°°iÓ¦•lذ!';;{F(zx* ­­ÑwfŒ1»IDÎÚûkyÀǪº!“c‹‘™ÀU=9Óc©O,1{DDú‰5>‰È ÿ¿ßSÕOSÕe"òø§Ÿ~: ¨0‰ >Ö®]›¶àûèûÀ¬*aÙ€ìììì‡% à–a}ôÑG,^¼˜Î;ïòܹçžK£FªÜM¼0°„DE¤£ª~©ñÅ)_áäœ fO­*+ÙùmEO¨êr„\Fƒ‰åuã•––2a„ÈÚµk7úà#yW¶&"§?¸FUפ㼦î‘Ãó€K~¡PHf̘ÁYgµË,¸<§XƒÀĤE‹ž£¸¸˜yóæQXXXºhѢ쬬¬µápøQ`b8^PãoÊcö‚ˆôV#q7%#¾¿R_`®ŸVmpÉô ê«‚e2FDÎ }úõë—ôb­´´”ñãÇGV®\¹9 =¢ªÛÓ4®p%XÛªêOÒq^S7ˆH87x>n–,&L‘Fhß¾}¹ã—-[FãÆ+ 8ÀõY´h………¥sæÌ ˆÈ–h4ú¤¯`5EíÃÛSK‰È?q7ñ®TÕ'wóØlàP\Ÿ¦¯«Sf_DZËj:?TDš­-ÀêŠ>{E$7î°Gm °j%›1!"€£¢Ñ(S§Nlܸ‘K/½4+7×åîÆ[B¡ÐøtÞƒ¸àc!ðë4ž×ÔR"Ò88Çÿ´Ž{:¼<¼¨ªßƒÁ7 µoß¾\¥ÁÃ;¬ÂóD£QV¬XÁŒ3"FK—"‘ÈSXÙ\cLÝK^«öêpeË¢¶ø`檉Û÷e ÷¹<ˆÕ)?WDÆsUõŒ$çè|<»¹XQˆˆ+BseUc׋È_Uõž¸ýšùý† ýæïEävUýwuß}cˆI;7ábÜôôh4úÙW_}5ôž{îiÖ»wïÀþûï/³gÏŽ¬]»v«>¶¥qlçQVr÷ªt-ù2µˆ´Åç€øRT[€·€W€WUucü±ápxBaaáÀÁƒòòÊõ%Ü…ª²|ùr ¢………áÒÒRDä•H$ò8ðf:ª½cL ›ã+" Tõ»Êvö3Ë/âÖŸ^ÆÍ$\Ü 4âW#4ZoúsýwM±ø¸Âç˜,N8ÕÕ@3à…¸mår@D¤ð.P‚k<<—Ër,Ð-n¿†À~ÛXÜͨ .ˆº_DòTõ¯•½÷úÊ–`™´òS«×ßT5ì·wÍÉÉɹ¡PèûH$ò^:g>üÉàpànU½%]ç6µƒˆt£,èèÄIX¼ ¼ŠkºYa` "YÁ`pIÿþý=ýôÓ“î³jÕ* ˜9sfé¶mÛ²²²²> ‡Ãq³(i º1¦¦ùïÓiÀ‘¸\à3ÜúÛ‰Ÿq"r50¸SUoMxî¿À%@—X@!"裡ꨄýOÇ}Vß¡ª¿ÛbIï‡Ç–H‰ÈR`³ªåܵ@ ¯ªÎ¬ä}ÞüøªŽO8× ;ÐVU·Töß«>²Ä¤•ˆœcUuS†‡´“ˆü·äjpdš—}™ ð¥–OÄá–ÞÅD™¸€ã`Æîä]ˆÈ9"òÒ!C½zõ`ýúõ2sæÌ’uëÖåƒÁ/C¡ÐxàkpiŒÙ—ˆHà—¸=ãžÚÜ¿²%X&müzÊ£pvÏÕ²à£;ðsÿëõ|ì»|²âY¸™Ž3)+ .0~p¼¢ª«öô<ªúªˆüø™gžù÷§Ÿ~ŽD"ºzõêÁ`p¡:&—––®Ø‹·bŒ1µ–/™'p§ˆ´ŽÃîŽ[ž´IU'ùÝ»ã–\=ë& v«OÞ.a{(Wz\U£"ò8p .ãCÿÔոʖV1ô#üãœÊvò9+€MÀÛIÆ«4R¾&»±Ä¤‡ˆ´Ã]켫ªK29žx~ºu nÝæsªúJ†‡dj_Þ×·¶øL\œ¸´*6ËñQMæ\¨êC"òÖwß}7·–ø•ÒÒÒy5õúÆSøRö//‹È;¸<ÿbH\ŸŠz;LØVTIaŽG›qALJ"²n–{J’¼D¹þqkûÅü¶’|ÜK/py)& &åD¤0÷ïmnhmr9pîCäçUìkê9”²€c °ÜÓQ\”Xù¬TŽEU—·§òÆS‡<ûî·m®[úõÕ)»[UýJD>.‘ëq…oáòLª²Ò?^Å~[qËÉJTÕšï¦r%"©I~-æE¸ ÀuÀ µ©¿;þGÿë=ªZaES{‰H9CDî‘ù¸Y‡€ qÿöÖâî´]…[«ÛWUÿ”êàÃcê#ŸÿQ‘ޏëÏïã¶½ƒ›QRƒÃ˜ˆ«–u1n&¤x¦Ç}lÎóˬ’ò¹%ïD䄽m=cˆIµÓp•$JÿÖÂ’¢#pk8×÷gv(fwˆH{¹NDžÆÕš7ƒu.ùðKà^\}ø6ª:LUŸPÕï+|QcŒ15á>yEDÎò« ‘,9·ü ¾Aá߀ À¿DärÉŠ=!"EäO"rÈnŽáiܲ®ß'ÏW§•¯ÐõWܵ˓"²³ï“ˆ&"ñAÒí¸ë›'Ed_Ò8G‰Èý"’³›ã®¬ –I9×SàYU›Éñ$ò pÓ¬7¨ê?2<$S ÿ%ÖW±ê<à°„]ÖàJ/¾‚Ë3Úˆ1fùìpMÚJ3=žx"r*®'ÃXû[¯}DäVà÷¸¥×ŠKÔÞ/î÷‰Àã—[‰È±ÀqŸí%¸Rýmpù!Ÿê”_û}ßú¨j¹ ãxˆU²:]UßM²Ï.U°ü¶,à_Àp9ƒ«py¢-pMaÇí;—sÒ·$ë{?î\Ü2­µíï§6°Ä¤„ˆ´®ÅýNQÕw2<¤rüºÐûoNªZœá!™8þâ§.—ã \"y0n—bàÜÌÇ[µ-À5¦.òw£q^ØÝÛU¸¿·¨jÆóøâʦwªFR±ÉiŠkâÚ W j#îûöU]PÁ19¸ …}pËgWó€wâ{‡ˆÈÉ@3U}±Š1´÷¯¥¸h’}¡d×)"ÒÃç Ü Í|\î`b“Ƹ _ù¸ëžïp‰óïוµ‚ ¦Æ‰H´Â5ýy<Ù}&ùiÒ¸/Ø«ê2<$ˆÈá¸e{§á¾¸Z$ìò®ù›À‡Ö©Þ˜š%"ÿ~†»P|×é@\§çÁ¸ænwgn„Žˆ\…› ý©ª®ÎôxŒ1»ÇSãDä< 7.‰ë!U­ª”]Úù»'[€ƒ¬ïGfˆÈ¸@#ttHØe+ðe³•h4Æì%¿ÆþkÿÓ'IC¸&@K›q0Æì-+Ãkj”oè×7ÝùBm >¼øÇ§,øH_u,Ÿ²€ãvýЏÊ"ïÛÚYcÒ¦'®8Í[‰Á€ßVn»Ÿõ¾÷÷¼®ŒédUý_Â~½ÓqÉÁÜçp{à Üß~àïªIrŽËp¹÷©jie9 ~ÙÍ•¸‚ ,^¦ÆWaôËf®Âå–5–“l9§1©g3 ¦ÆˆHsà:ÜúÇUõÃÌŽ(9o%Ð8VU§exHû41 8;ƒkÖ 8ÞQÕMé¡1v&| œR’é"Ò@ôÀ-×úè 4~¯ªwÆíûàßÀÝÀOq¬Wáþö×·ƒUõ„sìç÷›¥ªýü¶¤9 "òC\n_. Ø€[jÛ Ø?vSLDºùq·óû­ÇuãÎ~ ªUç¿™©|îH;`cuŠøòºm ö“6bj„¿³} îÃ{î ¬¶:|Ì¶à£æ‰Èa”)ŸÇ±’²€ã]U]•Îñc*TˆëÚ|®{ô“¸Äó$ï n6ãà2U}Úoo <Ü."©ê' ‡þ—{÷°ß?w1ø\¿†7ö¿„j4‘óKkÄå÷[²é+ Æ•Kõ¨xw3d@ìf™ˆè·‘)ªº¤²óÕ'"ò/Ê:„ƒ[û5ðE-ùíŒKú¾W}«*ù¸`û\@œ6"27Øh‰«øµ·jä¥tŽ%“,15å,Üôùvà¹Ú–tžà ÿøJFG±‘6¸¥§úŸŽ »lÅåÛÄŽyéŸ1¦zTµDD.À•=Éÿ¬‘7€¿©jaÜ!§àªÓý5|ø×Ù&"×âfC®Ã1ñž~ÿRàkù8_Dš&Ü•¾×Ïá¿U¼…q%S¯ÏóKºâ?ï‡â–~ý$~¦^U×úYšé¸Q·Vq¾úd$îÆ]l ^C|@""“aªÎÐØêš;€ãq3o«pÕ¾®®‘‰ª:2“ƒK @Ì^óSÙñeîjkÞGL_ÿø~FGQG‰HKÊŽSpË-â…€ÿQ6Ëñ…}1S7¨ê<¿ëhܬÁ±¸@dp™ˆ\­ª“ýî§øÇå"Ò'ÉË­ÆÝiNT®ƒ÷(îså2à!ØYï$\NI¹ü“?s2°\U§Vüw÷ª$ãÎÂ- K6îúnµª¶…åšÃåÿ|d¬—–ªÎÁŸuÁÀ|U]Û "‡âºÁ‘Iªú^ÆF—&€˜½â«çý¨¶OYû¥íý¯339–ºÂÿ|îÂ`®gü},qüÿóqbtcLÝás?¦ùŸØzù_wˆÈ˾vÈý•¼\²›++Ø÷9\ŽÈÕøø.8©L#Ü]ùeUìeã~¾’}ö¯ÆëÔ[~•Ã"òsÜ’¹‹øå؇àšW®ó ‰ŠUõ™Øñ~©n_ÜÿgKpýÂâ›6šk“}ŸøÆ´­ð9•倸1‚k:ü Õ¸ù("ã€<`1ðibqßïl\îSîû±.vQE¯­ªŸ&Ù¶\DîÇ5?ìXbLEüõ¥Ô¼˜¶¸/³ªº!Óƒ©DdÊŽSqwq»DY¸eUïãKâ3få©Ý%"gã.»á‚“XóÖ3üïÉ$[Ž›t‰®_ºõ,î.pg\>Êp\O’ŠfMbŠýëPÅ~±}Á宬­`›µ­žXŰVþ±5. ãgI®óÛ¿žñ¿qÐâ¿W‹Èåªú¥ÿ½;ð)ðwà—IÎ{+n&áTÜwQÒ9x —o³Wð ÿý7PÅ›'"'4P¼ ø ®ῃýöëqÿvwWcÿXQ€¾O±Äì3qw’¶Qûó>bšùÇ*«dÔ¾ÂÌ ”-©êƒ»›o.nvãCÜL׺4ÑS;Än44ò³ücU}»†Î1—1×t´pw²Ò¼ñT5,"ó€N"Ò<~yK³pÝ­»«ês52êúëHÿ¸&aû\e³ópß±å¯Àµ¸ à&\xîÎÿ›"ÒÃ7–œŠ»ˆ¿RDnŒ_Æë‹ \…K‚ÿ¨¢ùýžÇÌ·àf\~‡ ÷/à–òÝŽ›uÛ ^óãKl€;·íq\o±ÝâWf ~,ÄÍîóUïbLy"Ò·þ³¶÷ûH´Ã?6Èè(2HDÚ‰Èå"ò/™ ÆÞÀ}ø‹ >â–@\´VÕîªúªúœÆì›D¤»ˆ\åïR'>× 73ZŠ«–îBi3p³_ÞxL¶/R±;>ÆU†K|†ª—_ÅLÀ}¶ß™ø„KìšçQÜ ÇÝ"Ò,ɾy>×ÍT@œ£)ËûH\ÎÖ8CU_QÕ¥ªú™ˆ´Fãþÿ½PUç¨êZU üW1ñzع ðQ\àrfÂkÄ­fx¬ŠRÑgâ®SÆ«êÝþ\ËTu0?Éþçâ–QýEUÿàǽÁç<ý·|{h’ã^UÕTu†ª.®n£N)Åjyx觪;*?rß`3 f·ù)Êsý¯u­Tá·þ±•ˆ4Þ×sü À‰¸¥ý)›&Ž·7»ñ!ð¾ªÖ‹)`cÌ.ÂÝÅý‹¯zµwC¢+®nàæØ{UÝ("#pÕ©æˆÈ#¸»Ý NÀ…Àܲ˜jQU‘ÇpË[†Ÿ©êÂj~?nfc´_Âõ6e}@†ú÷±UU¿‘pwÝŠÈxÜÝö¦¸eY?&UwÜõDk‰-]ΣìFÞ³”ŸQøDU—%l;âó=¼‡¿àÊÓþÎo{7q5ðjܾWãn~VÕ«e œ˜ä¹ ¸JTñÎ÷ÉÞXµq3)ñö´gÌÜ*’6¸À-"ò‹ªfüö€˜Ýâ+\€û‚Y‰[–Sg¨êzY†ë¨;Wó}Ÿá§rÃ}HöÉÿ¸ü©¸5¶S-à0Æàò8~Ž+«~6e3kqUŽþ¸dIU_‘pkòGá–g…qkþ_âû¬¾¤êe*Qv“«ÜRï;ÿZ%qc ‰ÈYÀÍ~ìüS«q°Åqûþ[Dâ–Ýäàfw–ã.|Ë% ŠX"ye}@þ—dßåI¶µóKŸPÕ-"²–¸dªºBDÞΑTuƒON¿—{Xîu*8ß×IžKvìáþñ3?3‘L²™±dïµJªº³j˜/ôð8®Aç\`ìž¼f]bˆÙ]ýpÓ¥¸’»u1J×ëêxâKT‹ûÿåD 'åÿ®7ŸQp|¡ªÛÓ9NcLíçg6þébE¢ªÅU7÷Ø_ nKöÝà« =“¸=É~_ã–ÎT¶ÏÎq&l/ÁÍžÜ&" hEãWÕw€wüµ¦À¦*–ôÔw›Tõ‡ÕÜ7ÙóØÛŠ–ÿpUã=Škj{9®É䥸™—‰ÕCì|ÉÊó&ClÛ­ø¦•I|“d[I’m»Å÷àùîý]„ Æ”ñkycw”ިùÿÂU®8ED~ªªÿÊô€ªCDÂ})ã¦|—qpwc>¥,à˜SG cj1¿»ÇTØ«#Ý’$ W´Ÿb…IÒa…ìø„ÏÅië!ïy\øÕ¸äj\Ããgwó|ß%÷&yî3àúʺ¨ïKÄþnLe|ÉÝá.”?QÕ÷2<¤'"mqwdFRÖ‰4ækÜÎ*\%•5”K`Œý4ÃÝ1iKYãÊ”â¾Äàî†úŸÅu4ÁßSKˆÈÜ’’x%ÀW¸êRgúâYDæ¨j×jî¿ø^U+MR¯i"r#®«wû„§?PÕ©åÚwˆHSÜ5z¥9>~ q ¤²f¾Ïʱ¸k‹Å@aeÿã‚éP²åW¾äüþ@qâMR¿ÚààPÜ÷ùÿpä~ÀŽdE |1…cqßéë¯}q„ø}¹ÀæÝ]Â-"‡áªf¸„ýYªºGÕ´ê* @L…üíU”%pß—/ŠýlÅù¸Zåýp5ãk¢Yç&\ÿ‘å¸ ‹p_Z_Ë4®Ã«1ÆÔ”¸äϸ9¸åž#p7[nQÕ»35> ªãª¹¦Ü¿I¸Ùé¸RÅ?Á]@öªn:cŒ ¦"r®|SÁÔè>Ëßé[ŸÙב5Y ðX•Mqp}RVìëÍ1µS\rBüzéƒëëQ´¨Kyd @ú3ïҋȸeEQÕߤsLÆÔe–b’‘¸ÚÛoÕ·àv–“´fTƘ}Šª~)"óp7X:óDä.à@\#Âßá’b[gªêLÙW´ãÜ ™ïq‹î‰•d÷}C&àò"þx^SçaàKU½×oKš""ÝqköÅJo¿¯è=ùï¬_ƒq7‹Öâ’Šï‰_6$"Ý€?à™·à’{ⲩì¿YO½Œ @—fc*aˆ)ǯá¼â¦í+úà5ÆS7Åš³Åîè:á–hŠ»ùÔ/OýWüSààH\@r¡ˆôSÕ5¾™ZàyPU×$œs®¼é[qÛÎô;éáÏ“ <‡Ë¿;·461©>¶žþ#\ÞÝ«¸ò«p¹}ƒE䄸™èýòü¹?ÅR{Úœ5ÖmûÛ=<Þ˜zÉ“Ìɸòbà¥L')cŒ©9"r,.Çm î&SLs\aŒnñKGEä\ðñ7UýUÜö_þ ó›'âf!®îK8õÕ¸ÙŒªº¡?€K¤ªïúsý\ô¡|%¢ ¸Y™ªßïáJ\ÎÆ-þ'Þ9ÀEªúbc©ï!õÜ2åGöôuŒ©j"ÁÖìC|·íý¯¯ªê–LŽÇcÌ^»JDn‘›Dd,n# øS’üß$É[ŽËkK\Vu®{ô‰•Ùï{uü޾|m?àùʾW|¦þÀë±àÀW6ú]’ýNÁ5§û8þ9U}Wrõ²$§zgo‚ï¸å[÷ªêì½|-cê›1;‰HW÷: ˜­ªs2<$cŒ1{ïGqÿ»WòûAÜÌA¼0® øN¾\jà=UÝe™’ªFDd*®ZbW\’v‰ˆL~,"½T5ÖÕy8Õk"×Ã?~–ä¹/(_ý8ÿØÂ—ÊM$Àá"’Pqp¯–‹È€âzLüqo^ËÔé„[~—,Äå#Y¥ÉZÈï4ʺ¿žá±cŒ©gâ.ÞUU7U²ß†$¥Ö÷ó5e]›°¸ ãǸYŸW8X¼_ÅXc¯³.ñ ðlHØÜÔ?OYð’èk\îHü…è7™‘ß·árM.· ÜÌ‘ÎÀ¸üžx!™…kfø%®ÂÜtÏ”gˆv&ñ‹KH|i_évnŒ1†­ªºqUjUÁómüãÎÀFU¿ðU¶®ðë'âÛï¬Fö Ï'"Ù¸<•oâ6ÇÎ{—ªÞ_Åkï5ù®‹õûÀªZ’êsšŠùºÛpM"³ý6‚Á ¥¥¥à )ôñ?±cÖàƒ`.è] ªÓÒ:øzÎ[zunªúKU]RÅ!ÆcêU]ï{oô‘& %mspù±e]ñ&â ž…[Ú«T½ü  Àï{R’çúã–ÇûŸ ¤4‘Ÿàò^>γu™ãsŽ~Ü„ë€N»ví¸å–[¸è¢‹ˆF£,Y²„ÂÂB¦OŸÎ—_~Éüùó ‡Ãà‚ÛÁþ'þ5 €á–Ï“€€Ópw’ÞÎðXŒ1ÆÔ.·‘Å-Óú® í˜$Éì“€?á–bL©N§pU])"og‰ÈŪúìì!ò§$ûϑ׀³Eä—À}ñ³,"ÒWÕëÝÄcw‡ˆ\‡ pþœ˜cÒÃ/绸 8`¿ýöã§?ý)£G&77€@ @—.]èÒ¥ C†¸ö.EEERPPÀ¬Y³(,,déÒ¥D£;ÿ¹ô^‘ãTuUºß[}cH='"‡Çàî8½jÓÉÆcü\ œ("ÓîÀQ¸¤õ›PÕU"ò6ew™'îÆùþ·fÿ¿"ò°Wéj1°2Éþ#q½ 3xX IDATEþ \+"3qßi‡GãÊþîU‚ Àè l‘Ä秪ê {yS 9øÐ ;;›+¯¼’o¼‘–-[PY×€† Ò·o_úöí»sÛÖ­[ùüóϹ÷Þ{),,Ôü—ObRÈzÌ/½º÷¡:½:w§Œ1ÆÔáúz$6Læ%\’r|e«A¸ä| Wj÷7Àƒ•Ìü™²}õþx:Éù–ˆÈ1¸ãÇ€q¸ž#¿¶%ìÿ½ˆôÅ%ºŸƒk’¸×/d®RUÌJ`,°»ËlÇ/õ©€-]N£ô¯Ä%˜8Ûn»#Ž8bç~{Ò²l¿ýöcàÀL™2…ùóçÇòF,L±sõ—ˆœ‰ûpßüÇf?Œ1ÆSøF¿Æåy4èÚµ+üã9õÔSËí¿'׳+W®äÉ'Ÿ¤Q£FÜÿý¬[·à#U=eoÆnªf3 õ”ˆ´£¬~ú+|cŒ1¦6‘ó¿íš6mÊo~óFŽIvvÍ\º¾ÿþûÌž=›ÆF‰DvV ¶;ói`H=䓸ÎÁ-½*°ªWÆcŒÉ4é‚ë0&¸dòK/½”Ûn»-’®ÜmEEELž<™p8L^^¥¥¥äääÄïbHXR?õZãJ'¾“á±cŒ1¦óy?Á•ÖÍ8ꨣ¸ûî»éÓ§O¥Çsçòù矇QU"‘ 6¤¤¤$¾VU½jL °¤‰Èà \S›°XÌæÕ†šá"Ò€¼n¥1Æ“)"2xhкukn½õV.½ôR’TÛ#‘H„×^{7‰DˆF£ˆ¹¹¹“››ŸCb3 i`H ‘멼 RTD–spIìqa’úé©”‹K:ß ªsÒx^cŒ1ƘD¤5®BZƒÜÜ\FÍ 7Ü@£Fjì«V­â³Ï>cÆ D£Qrrr…B„B!4hÀŽ;,I3 @j€otÀÁÌÈ‘#Y¹r% .dáÂ…¬]» tô?Ä‘E¸€d0WpI\³§£ªß‰Èü§1ÆcL†\ yöÙg9þøãkì…U•iÓ¦ñí·ß²qãFÀyyyìØ±ƒ¬¬,D„ââbòòòâ—`Y’€ÔŒcquÊ™0aýû÷góæÍ¬_¿ž¢¢"Š‹‹Ù¶m«V­bΜ9L›6Ù³gÇ¢ñ ®fù‘À¸×,‘ùì:[2X¦{Y;YUÃ@xo^ÃcŒÙ[~Y𸪌+pßyÓÏ­HÊ>ï€Ë/¿œ#<’`0ˆªïÝ%ʶmÛ˜9s&+V¬ ¤¤U%++‹ììlJJJÈËË£¤ÄÿÌÍÍ¥¤¤$~¹— i`HÍèиqcN8á¢Ñ(7¦aÆD£Ñ?ªÊÀÙ²e EEEìØ±ƒ-[¶°aæM›Æ'Ÿ|Âüùócy¸.³G%œk›ˆÄfIb3Uu]߯1ƳÇ|‡Ÿ·Mâžêœ·ß:àsà \Pò¥ªV§±¢©ZtèжmÛ°}ûvÂá0999ÝFÖ¬YÃÂ… YºtéÎYÜÜ\B¡‘HdgÞGlVii) 4ˆ/ÃkIèi`HÍèЩS'D„•ß­gÈywr`«¦tïqÇx}OèBNN6¹¹¹4oÞœfÍš¡ª;ÿ8þ¿½;¯ª¾ÿÿúœ»åÞ›…BX †}‘UY„²JÕZªÖÚ¯3qªck;~GûýµjµÓ©ßùÍ´µS§v¬e¬-)N«Z‘} H€a d¿÷&w9Ÿï7ŸãMH¼Jy?Hr—sÏMÎû|ÞËĉù›¿ù …BN`²mÛ6Þ|óMJKKÍm3I®¸\›ú”RQàgÀw>‰Ô-!„¢£Tò4ó—EœF}çwÒ½{wŽ9®]»Ø¹s§™JÝ ø|ó—ÙÆ1à,É3Õ‹€_k­Ï¦ù¥ˆÎaC²Ý®‘‘‘ᬄÄb1âñ8~¿ßùù|NŸ>͆ ¨©©ÀívcYx<,Ër“†e®—ô’¤s èß¿?JSöáIòºfñÖê¼øûµÔÕ†ñx\tí–Mߢ|+dܵý?i ^¯·ÛMvv6™™™äåå9Éøñã¹ûî»ijj¢¾¾žºº:Μ9ömÛxå•W8qâ„y^à7ÿû@Úß!„â”R×ÿŒƒäÁá]wÝÅ?ýÓ?3ã!²sçN6oÞÌ–-[زe GŽ1W6ŒîVJMÒZפ畈NdÎ1Oj†yêe‡h4ŠÏ磾¾ž`0H"‘p®³m›ÒÒRÞ{ï='ãÄëõbÛ¶Shn‚ Çã¤a™Ë|>Ÿ "L3 @:Gø(Ù½óþ€¹7wnÐØ£òt gN×Pyª–·ÞØÅâÖ‹Æñú<äuͤ¸¤€¡Ã ;¾„#ûb>·Ûßï§[·n”””0nÜ8î¹ç<[·nåñÇçСCé×":€h­[|f%$‘H‰Dðz½D£Qrss‰Åbx½^^yås àÔx¸\.¼^¯“rÇI$Îeævñx=úä;W%b ª«ê©:SKÕ™zì«ä·ö1}ÖP\®–CylÛæäÉ“N¾#PÕi¯L!„¸HJ) øÉ:|H—ûÎw¾ÃwÜÑ"ßÿRŸ@ @<G)ef@²}¡B‘vJ©‰$Ó¡ÆBò ð¾ûîã[ßú@ Sãõ×_§´´”œœÜî‡136[¤“€x<ÆŽ˘1c¨««cÿþý¼òÊ+h­2d%%%téÒ·Ûí"±XÌ™dF±,«E¡¹©ñhreê>RWJdHzIÒqòòòÈËË j¢OÀG¸ñÂÝÚëøÑ³öé $ëAòòòœ•ùJ @vwʃ !„íÔ<ÑúIà«4sæÌá‡?ü!EEEòáp˜ßýîwN,k½š"Ž—ŸsŠÐ‰~¿ŸáÇsõÕWS__Ï¡C‡xçwðz½2`À'øÔZF}8§ÕnëU‘xJ)¢Ñ(ZkΞuV%B‘J)Éy’Lƒ¢¤¤„þçfæÌ™ö8{öìq:ÁGmY[͈ä2 ”šQPPðTUU՚瀘"t#u…Ããñ0`À† Bmm-ÇŽsºV¥v¼ŠF£Î1R,sÒ«L7¬x<î!©C M’òø²¥ ×¢Öñ£gñx<àönŒ_Ô^lÛ6áÚµ•uÔŸ­w> ‡a#’«ªª·ìÌ™3TWW§öÆ–,!„Ÿ8¥Ô_Ñ<Ï#pÿý÷óÀàõzÛµ¶:`¥J$¼öÚkœ9sÆiÀ¢µ>_¹¾ (¥ùéO:Ìï÷óÍo~“òòr'@¨©©!++ 8·%¯©ß(..vVJÌíRƒ ShÞÔÔ䚛ˢÑh›Å馯¤™ i Hǵ˜rèÐi¼>±Ä/X’Ü¿ãq›¦†Mõë³;n§Å­û•${¤›ô+Ó^îìÙ³©éWµ@E§½2!„¢ J©;€çeY·Ýv<òùùùw×v«¨¨à½÷Þ£¦¦Æ9Óíñxœô™@ Ðz08^´ÖŸ}öÙëGíøÛ¶M"‘à׿þ5‡É“'Ó§OÀ9+#æ¶©±RW3¢Ñh‹ºs™Y)1C ‰„3#$·xŠi|;®X€t@s Þ"ø(ë`éI|Á b‰sOÄØìhŒDSœxS”DSŒDô£ ÅåváÂuÎý,¥(è‘íülÎ,566ÒØØØ¢]Üé$!„¢”Ràç€:t(?þñ[Ìëè 7n¤¼¼œºº:çÄœÉë·, ·Ûí¤Ò¤¿—‡ï®^½úíÕ«WÏs¹\ ølÛÆívsï½÷òᇲiÓ&–,Y°aÜNX@Ë–¼& 1Á…©ç0AŠI¯J \MqºÙL!º¡§— SLrò¸³rìx5·›D$ 6hÛÆŽÇIÄlt,Ñ"’waájÇ2uf¶·Û"FðûýضRŠS§N™›Jý‡BˆOÚ O)ÅÂ… 0`@ê …©¯¯gÓ¦Mœ8q‚h4Š905…Ææ€’é3æob39p¼ 4ÏjY¬PJ ¦Û¶eYøý~†Ê!Chhh ¼¼œÒÒRÖ®]KQQ}ûömÑ Ë|)¥ˆÇã'0u¹\-jAÜn·S;›º*âóù…BX–e‚ÙÒ@Žéo¾)))àìÙ0.ËE¢¾©Å ](ð\ÚÛÝ«W.üek¢xÓjN!„i6’'ÞL,sŠÂÍ™çKqôèQöïßOyy¹sf;5_?õ w<wÎl§ˆs‹ÐÍÿû’’JJJ…BœcY>ŸH$‚Ïç#‹µ(46—µZa‘¬Ë€¤î?‹/&3mÚ4úôéÓâ­‹ÐM}ÇãÁår9)W±XÌ .R'ž›Õ¹Ôš"“Ú.+ é#HÇ´hÁ{êT=žó­~\"ËRääøH$’Ÿóa3K‹'Ož47•Õ!„é`Ίʼn'øýþ6‡É566’H$¨¯¯'ðx<¼øâ‹œ={ÖYÕw¹\-Z©šŽE‘HÇãüíK½¬Y¹üœ“‚¥µæ¦›nbïÞ½¼ð ¸\.ÆŒÃèÑ£ÉÎþ¨#hjºÏçs‚ÑÔ)èæX)uÞ‡in:¼Ð\ÖL4ä5·à-†V@ÊË«ñvJýÇG²s|(…µ766:­èZ Ký‡BˆthqиqãF^}õU¦L™Â¸qãèÞ½»Ó.>õlµmÛÔÖÖ:5"UUUÎPA³šaÎH§Ž „ÃaÜn·Shl([‘äò㳩Ák—.]˜8q"“'O¦¾¾ž½{÷²lÙ2ü~?ƒfРA(¥œý+‹9Gë”+s½é†•ššeVÔ´Ö©+ ³•RÅZëßÎ[reäÒHY9ÑÐFú%~4ë^ |Ôv×ä/& ”Rœ8qÂÜTV@„B¤C‹/|á Lš4‰]»vñ /àv»9r$C† !//˲Z\F"§K‘™É`:™~s½Çã!‰à÷û|}„ø|¾Ö·$ëòÓb_JÝO‰„“Ž7|øpFE}}=l|Î>c:„¦®¤¥Öµnb`ö·p8ìÔEEE***6)¥&h­ËÒý†\)$¹tý!YDׯ_?¢1O;æz\ŒÞ}’uõõõddd ”ÂårQWWÚK!„épNÚLnn.×]w“&M¢¦¦†°|ùr²³³éׯ={ö$;;¥T‹®E©i1©]ŒLËùD"á¤\y½^§¶Ä¬”X–•ú¼däòÓfzëT¾D"á¬T 0­5ápعmj]àìæßÔ}ˬ¸% ç23#DkM0äÁ̯¯¯?XXXxàøñã/okšg˜ˆN È¥зo_'%êoOåèÑ6¬?¾½§©­‹rq¿Ï]-éÝ+¹’‘‘áZ¹ÝnΞ=KeeejÞž¼!„â‚”R¾€Ú>h4ÃðáÃ9r$gÏžåСC¼ÿþûŒ1‚‚‚§uªeYx½^'-&‘H8iX­Seü~?ápØ©1)5­:kIrùiQ„ÞV ‘ùÞüF•/s¹©çH \Mð‘Ú~755Ëì[>ŸÏ9© ÉôöaÆ‘““ (¥.--}øÅ_¬WJ½,^ÑZW§áýù‹%È¥kÑ‚×èÝ;›/Þ: ­‡‰Äؾí$Û·ŸäÄÉvââ7ví–\Qñx<Î/ìD"A8NM¿:©µ>Ó¡W#„Bœ‡RjÆ”)SÞ;v,üãõáÇÏ;»ÁüÛÔÔ„ßïgذa\}õÕÄãqÂá°s½é’eÒ°R'ž›”«Ôât3åÚœÍ6©[)-Èå§Í¶¾?ßu­‡Vº\.§[hFFáp¯×‹RªEjVj:Ÿ9‘ PSSÃ<˜1c†käÈ‘ôîÝ›®]»òÐCe=þøã ªªª¬^½Zçååí¨®®þ#ð °Eö¿‹#È¥ë PTTÔæ•É® .Æ]Ó“1c °m›cÇêÙòÁ)Ž©'޵y¿T.·"#ÃÕ⃠8K×)°övè•!„6 °°k®¹†úúzõÜsÏ9›6mÚ„Ç㡸¸Øé„•z,dz֩é.—ëœ4,À0hÎj-f;¤§dÈÁßå©Í6¼ç[ýhë:Ài¿›:ÝÔ‚'}Ë¬Š¤®”dddPWWç¤`UTTÒZ߸téRµtéÒ=Ï-'N¼vüøñVqq1]»veæÌ™jþüù#µÖ#wîÜùØóÏ?_­”ZN2yMk]ÿ ¿o—= @.Ý&`Á;ï¼Ã©S§(((8ç­ƒá^½‚ôèQÜ<-6ÆŽg9PZËÙªFlûÜß™×9Û€dÝI«ô)J©U$sßÐZÐáW'„B|dáïÿûÉo¾ùæ333ðÑAcVV+W®äرcŒ3†Q£F‘ŸŸït‚–ÍýL3•Ôº¤¤‰D¢E–éeÎv›‡Hç›!:ÍÇNBOý¹õufõ’Ãc±˜S\®”rÒù¼^¯SÔî÷û …BN¸¤<‡gµÖ&­}7ð•RÝÖ®];¸iРAó'Nœ2d={ö¤wïÞ<ù䓹@ஓ'OÞµbÅŠDffæÛ¡PèÏÀËZk9IÜ @.ÝÿÿgÿþýyW]uãÇgÞ¼yLŸ>‘#G:7:ߊœÏçbìØnŒ‡mÛ”i`÷žjNžh¤±1™ÛØ%×sÎ6\.—óÁª¨¨0»™Í_(¥¯¯«µÖ¡N}åB!®(Zë&à+J)×éÓ§ÿ ø–9`3mQkkk)++ãÝwߥººšÁƒsÕUW‘››ë¤W™ƒ¦«cêlÖ‡9[mº566:·3ƒ Sj@$¹<µ«ýã®3ˆ \Ýnw‹€#‰8mœ ƒNM‘IÃºÐ Âæ4÷¥ÀR¥Ôß”––NæeeeÝ}:sæÌáúë¯okXÒ9 ûè]èoî“ÞÄîݵôìéK}<çûššlÛæôéÓ|ãßàÈ‘#¬^½š††€à¾æ¯¨Rj'P<¼¤µ–V…B!.šÖ:¡”:-mÛ&0tèP†J}}=Çgûöí466RXXHqq1@ Å@]—Ëå¦v$²,«EKÞÔÎW©—¥¬€ÈßµËÓE¡§^g.7é|©ÓÍÍe©ûŒi|Ìš•’ö"lî„õvó×ÃJ©¾«V­šÌ=zôœë®»Î;`Àòóó8p ?ûÙÏŠÞyçÇ•R‹µÖû;ãMûK H4!c€Ï7Ÿú>|˜… ²páBü~?×^{-³gÏfÞ¼yôèÑãBÛ +ËÃµ×æ9­ S¯ÇãÔÔÔpúôi'÷uòäÉ<òÈ#455±qãFÞ~ûmÖ®]ËŽ;ÐZ{±Í›˜¼ª”ºEZÉ !„¸DÎÐh‚…¢¢"úõëGCC§OŸvZæšû˜éÕ¦‹‘9P4ÛZ§fµ&gºf5“¿i—'g_r.¸È4,HÖ¥Îö05€“†Õºý®©=ŠÅbNpr¾ ¾­ËIžà}F)•±uëÖëÏwëÖí–éÓ§÷?~ŸÏÇÔ©S™:u*ÇŽã­·ÞbõêÕ¼þúëæÃøyàà±Nz „B\Y>¶s‘ù9‹áv»éÙ³'–e‰DœÛ˜EH˜àÂäã›IÕ©Ãä¢Ñè9­T›Iry:oúÇž§þlZí¶žía×`0è¤a™}+u?J > ûRó1áëÍ_ßTJ Zºté ÀVéVÚ’ @)•”R¼ñƬ[·Žx÷¹Ï1}út23“3?.„TU%h€x<'«µÂÂBîºë.îºë.Ö­[ÇW¿úU“¢u'€!„¸4m4–——ÓÐÐà çm]xž:³CkíL§6Åêæ Ðt125©ÃäL‡,“R“ò€\žÎ[„Þúç¶s¿Ôa‚©ûŒI¹2­v#‘H‹´?³% 'éÑ£GÉÁl®+ÒZ—¥ÝÎ_" @:H)uð# Àï÷sß}÷q÷Ýw;[çÎËüÇðâ‹/2eÊ6oÞLUUUUU¬X±‚+Vàr¹5jÓ¦Mcüøñ 2¤ÍÇkllàøñã@òC˜‘‘ACC~¿¿EOt#³iÓ&&NœÈªU«®RJ)éY-„âœsÐhæw<õÔSƒA&L˜ÀøñãÉÉÉiqÇÔÜ}3´Ð(šƒB“>ÓV݇ThÎ\wÆYkñ©êpºÖºÍý(5¸0M L€kšá…©ÏaÊ”)Ó_}õURjŸRjoCCÇ ,ˆ~²oÕGPJ=ü[ó÷ÜtÓM|÷»ßu~a¦7nÏ?ÿ<}ûöåî»ï¦¼¼œ 6°}ûv>L"‘àƒ>àƒ’tûôéÔ)S˜<¶mSYYɶmÛ€ä£#FpöìY ¹"ÈÌÌÄívsèÐ!žþyzôè‘Ú*8 ŒSJUb˜HÃÛ%„â/Ã9%%%üêW¿âÌ™3ìØ±ƒ_ÿú×dgg3|øpì {K-6бX¬EVêôԀò¬iX))X.¥”[ê/;*B7ß766ž3ñܳæd°é†•ZSdVGÌÜæÏ¶R*¯µìW_}µ\k½Çëõî™={vÛi'â¢Hr‰”RS€=z4ÿò/ÿ¸q㨨¨h±ÌlLœ8‘©S§òüóχ™4ióçÏçK_ú555|ðÁlݺ•Ý»wÓÔÔÄÑ£GY´h‹-r ÙƒÁ –e±víÚèãÇw'‹Q[[K]]kÖ¬¡ªªŠ^½z‹ÅœÜ[ ä$÷ÐéÈŽYIDATþ@B)U œ"ŒH‘”Bˆ ió Ñ&L˜À¤I“¨ªª¢´´”åË—sÍ5×PXXHê}S³Š’š›oÒ´RÓ°RSjÌßBÇ“—H$ÞWJMÒZ‡?¥÷E\¼v×ïºÔýȤóµ^)ÓZ·™†e‚X,ælÛív·ˆ¬•RP¬”*ŽÇãóV¬XQh^)]°`œÄ½€\ºoVVV¯¼ò >_²e®„Ó–þð‡<þøã,Z´ˆwß}—É“'3räH222;v,×\s ‰D‚ýû÷³uëVvíÚEUU•SÈÞÚ˜1cøÑ~tÎå ,Y²„ÜÜ\‚Á 3é3rÆ4¤ÜÜôhþ©”jJ¥UœBˆó°áÂùù©ÞFŸqã°mÛi#oæ˜9 ©é3&ip´>ÃÝØØè¤û|>®ºêªQ{÷îÝ®”ú9ðG­õ‘ô¾-â\RzjРɳ¥ª4iV¦~ÈÜÎtÃ2û›ÛýÑá°Ëåú¸–Îy4¯ŽdffFW¬XqØ …ö-X° ¶ƒïÇCK7’38|>^¯˲èÞ½;555444H´ Šý~?O>ù$ëÖ­ãÙgŸåw¿û‹/¦OŸ>Ò­[7233ñx<”””ЧOŽ=Ê¡C‡8uêÑh21??Ÿ¯}íkÜzë­ç<©-[¶PVVF×®]ijj"‰MSSSê†ú ¼®L D!D[œ¤=Ñh”H$Òâo¢ @ÌYj\¤“Kí•:L.5 ËœðSJño|ƒ¢¢¢þZëŸnذá§ýû÷?vðàÁ—€W€µZkÉãÿìi³žÈø¸ýËÜÏtKK 8RküðÃ6oo>4¶m;ís!™§èóùðûýN0R__O(:'ýêBjkkÙµk^¯—Ó§O;Ó?c±˜ó¡ …B¬\¹’={ö˜»½¼ÐzSÀjœÞ)„B|œw.2)3‰D¢ÅôêԀäa™âôH$B0$ãñxœ¼ÿfgšƒó8eÀSÀSJ©Ü7Î>ß§OŸ›¦L™ÒeøðáôîÝ›®]»òÐCe}ÿûß_P]]½à7Þ°óòòÖWWWÿ‰dªÖ¾Oâ ŽN)B7—¥®”¥6,0é|J)Ö¯_Ïoû[S½ãŽ;^»í¶Û:cX`Ëåúíܹs› n¼ñÆ0°£ùËZ³fM ç/‚ í÷s K×®]‰ÇãÔÖÖfìÙ³‡yóæñÕ¯~•›o¾Ùi%Ø“bÕÜg¿ßOFFÁ`x²²²œZšš¢Ñ(ÇG)ÅÉ“'nVæÌéä‰Dxíµ×œiêÀûÀ/ eRJej­%*BÑNÞKMòm›x<î¤\%‰g®MpZ´M5µ & +¥IË%Hj­O …J)Ͼ}û&órrrn ƒÙÀ.e»¢ÝêgNÙÅ®¨™ËL “ÚgfÐÄãqöíÛÇ3ÏäääàóùÐZ3tèPvïÞͺuëœß¶m§ãCii)øÃˆD"<›ðs =Ñý1à=­ug,A !„¸(¥æ‘<ÁEee%–e9«¶m·ù}ëŸO:EEE…“2´8±fN¶ÎJ‰é.inçñxxòÉ'9vì½{÷Þ÷Ì3Ï<(à./J© ’Ç+%×^{-÷ÝwÓ¦MsŽu.´?555qðàAg?2­C¡Ï=÷›7'' Tú裾֥K—ŸpÕZï ‡Ã¿—¹#H ¥Ô€ÿ°¦OŸÎ~ô#Ün7ñxœÆÆF²³³éÙ³'.—‹²²2¶oßN^^={ö$‹Q]]íDäýúõÃãñðÒK/ñôÓO›‚pÆÇüùó™;w.~¿ß‰Ö+**Ø»w/.—‹ñãÇ‹ÅèÕ«;wîäøñãœ9s¦Åtصk×òç?ÿÙœ(~´§ j?°EË „â"(¥æ+Nž<‰Ûí>ïâù‚“'OrêÔ©iX¦m½ .b±Zk<³*bÛ¶S°‡ùÉO~ÂÑ£G)))9ø³Ÿýì%­uƒRj°7˜6mštyü SJ¿fšË† Âßþíß2oÞ¼nê>dºŒ–••9Ã)ãñ8üüç?§¢¢˲óæÍ[sï½÷né„§ªmÛ~ûÆo\‰¸&H3¥ÔÀ+ì¦pÿý÷óõ¯Ý9ÐOý2Cz÷îM·nÝ…Blݺ•ºº: „B!<ÈŒ3ƒ(¥Ø¼y3¿úÕ¯xõÕW»@ À”)Søû¿ÿ{ú÷ïÖ¿ßï´!ŒD"äää°cÇêëë©««#ÒÐÐÀ’%KØ¿?$?+ß“L¿ºM2ðØÿ‰½™B!þb)¥f¯œ8q ڻúaÛ6'NœàôéÓ¸\.§îà “s»ÝD"¼^¯pø|>§%¯IÝòù|<ñÄœ8q‚þýûxê©§þØÆsµmÛ.×Zï‰F£Ο?_Rf>£”R€‡›i>ܳgOî¸ãæÏŸONNN‹}ȶmB¡GŽqÖ7²páBšššÈÊʪ»÷Þ{_¹þúë;<õ^)ÕhYÖ’9sæìþø[‹ö¸â¥Tàyà&@ 8ÿøÇ 4 Í$õ«©©‰@ @II >ŸÃ‡³gÏNœ8Acc#÷ß?@€p8ìtk…B,_¾œ_üâ”–&[Ogff²lÙ2ºwïÞ"Í ’ËÒ»ví²,ªªª(++ã…^0Åè’…æmM7o-NrâëñN}…B\1”R3HÎ•âØ±cddd´;ð0ߟ8q‚ÊÊJ§VjúLë4,3-Ýœá6iXüû¿ÿ;ÇŽcàÀ¥?ùÉO^þ¸çnYV•mÛâñøþýûï:t¨Ô@~Æ(¥ÿ¸‹ä¨|>7Üp_úÒ—4h³bÖÐÐ@yy9‰D‚%K–°jÕ*Š‹‹=ú裯tFšÔ ŸÏ÷›3fœí„m‰f€(õßÀÿ‚d¤ýƒü€Ò»wo'ø¸ $õ«¨¨ˆÞ½{ÇÑZ“››ëä±N*— F>üðC¾þõ¯³sçNæÍ›Çc=†Ûív>\:xüx2fX»v-¿ûÝïLÎìQà§À‰v¼Ôðvs?t!„â’4×J®(//Çï÷·;ð0??~œêêj,Ë2áœAº©«"æo©IÃr¹\Îö\.?ü0 6l÷¿þë¿®¸È×+¥ö666îºå–[dúgˆRªpðw@wsyÿþý¹á†˜9s&œ:uŠE‹±ÿ~”RzÚ´iï~ûÛßÞàr¹:|€kYÖ–üüüecÇŽ=ÿp6qI®èD)åêŒY³fñ£ýˆììlÖ¯_ÏîÝ»;v,ƒ&''‡¦¦¦v µµµÔÔÔ0wî\‚Á –eáóùðx<-HY:{ö,_ÿú×ùóŸÿ $WBf̘Áܹs5j–eQZZJcc#¿ùÍoX·n¹û»$s&Û3ã X«µ–‚)!„¢”ºžd§(>L0¼è"ôãÇsöìÙ)Um­p˜öªñxÜIÃ2µ ‹/æw’óuï¹çže_øÂÊ:øÒª,ËÚÇ÷F"‘2™ëðÙ ”ò·÷ãÌå–eÑ¥Kjjj°m›ŒŒŒðßýÝß-onBÐQ ¥Ôòn¸áÝNØ–hÕ€xIl|ðA†N0¤¨¨ˆ=z°oß>6oÞŒÏçcôèÑÓØØèÔ€´þªªªbÆ ¸Ýnn»í6jkk­¢¢"²²²ðz½N¾l(bõêÕ¼óÎ;<ýôÓç<¿‚‚¦M›†Öš·ß~›S§NA2ê`Õy^–jÓÍÿÆ€cZkùE*„¢Ã”RS€µ$++ë¢ê?‰G% 9—™âóÔy¦9‹IÃ2-y«««yî¹çØ·o#FŒØõä“O®ìä—ÖZ¨”:Ç÷Ü|óÍõ¼}q ”RCòóóï‰F£·×ÖÖö°,+1lذ½wß}÷{ƒîŒU¬ºæ©æ‡;a[â<®è@)µ ˜9xð`î¿ÿ~‚Á ¬»èÝ»7………Äãq¶nÝÊîÝ»1bC† Áëõ‡àãôéÓ¼óÎ;x½^n¿ýv¢Ñ(±XŒh4ê|¹ÝnÆŒã N:xð o¾ù&¶móÄO˜‰®ëá@vO·øwàÃV—#ÙÆ®Hh­%§U!Ä'B)5 XpàÀ§8¸½iX¶mS^^NMM nwr™é†FQJ9+ ¦D)…eY:tˆ_þò—Î@ÞÉ“'ox衇ÖuBºMø“RªLk=¢µî§”²”RvSSÓ“’¢õÙÒ§OŸ¼¡C‡öºæšk²'L˜àUJõPJu×Z(¥<—²M­õa˲~{à 7Ôuöó-I¢Ô5$Ó™<>ŸÉ“'3kÖ, œÛPTTDnn.û÷ïç½÷Þ#++‹«¯¾šÜÜ\Ž9ªU«ðûý|õ«_EkÝ"ðˆÅb„B!6lØÀܹs4h555üéOrÚ >õÔSœ>}’Æ6`p ÐPÀ$á§N5¯¶k­¦åÍBqÅSJ]Gòï&¥¥¥äææ^tzyy9‘HÄ©‡4ƒM‡)ND"NÖÚµkY¼x±IÇŠüõ_ÿõŠ›nº©£iW(¥j\.× ³gÏnñ·téÒ¥þììì‰D¢Ï¼yó–wôqDÚXË—/Ïóx<ñx¼»Ëå*°m»{spâ=ï,k]}}ý«’z—W| ”ú2ðЭùgFÅìÙ³|˜P(„ËåBkM"‘Àãñ8iX±X ÇC8fÑ¢E¼ûn2¿{÷î§¾óïüiРAµðrÊÀo§M›ÖÐ ÛŸmjéÒ¥¹999݉„ Jº.Û¶×ÝxãÛ?í'x%‘¤Yó4ÎÿE²õ[syQQ³gÏæÚk¯u~Qz<Š‹‹),,ÄçóQUUE~~>o¼ñýúõ£W¯^Äãq'øxõÕW)))aΜ9„B!V®\Ù"ø(--eáÂ… ,þda¹&™ju@kÝ¿d…BˆSJ] lؽ{7ݺu»¨"tÛ¶)++sæj™´d“†eÚïZ–ÅéÓ§ùÅ/~ÁáÇ5jÔöG}ôMŸÏ×ѳÔÚ¶í·?øàƒ×{ì1»ƒÛB\$ @ZQJ)`6ð€©$ÓŸèÒ¥ 3fÌàúë¯' :-rûöíKqq1¹¹¹ìرƒµk×’H$˜2e >Ÿ÷Þ{^½zqà 7P]]ͪU«hjjBkmÛTVVòÌ3ÏP__ÉAˆ¿'€¬×ZŸü4Þ!„â|”RcÍ;wî$??ÿ¢ŠÐmÛæàÁƒÎj‡mÛh­±,ËYõˆÇãlÛ¶_ýêW„Ãa<OôöÛoýöÛoß× /¡)/½ùæ›wt¶„—@ PJ "ÙþÍ àõz¹îºëœ:³ŠÑµkWJJJ(((àèÑ£lܸ‘ŠŠ FŽÉŒ3¨¨¨`Íš5Î/Z­5ååå,\¸Ð¤^ž*€w¥e®BˆÏ"¥Tpð¼øâ‹L:õ¢ê?´Ö8pÀ™±e&žÛ¶Ëå"‹±råJ–-[†Öš.]ºT=øàƒ3fÌ™Nxú•ÍCåNu¶„—HvPJu¾ÜK²(¥C† aæÌ™Œ1 *¼^/£F¢gÏžx½^”RìÞ½›-[¶8·ÑZóþûï³téRÓùª xؼ¯µ–å`!„ŸYJ© Àønݺñ½ï}/|á ¸\®v¥ai­Ù¿¿|4559SÐkkkù¯ÿú/vîÜ À°aÃv?òÈ#«²²²:cÜž@ °xÚ´i°-!DHrš‡áÜIrUd¹¼°°Y³fµ¨˜0auuulß¾Ý <Âá0/¾ø"[¶l1w_Or à­µ@ !„øÌSJ –‘ìØè4b¹ë®»ÈÎξ`ÉîY¦øÜ <|ø0O?ý4•••¸\®Äœ9sÞþ‡ø‡:á¹Ú‰Dâµo¼ñm’õ•BˆO™ —¨yÓCÀ<ÀÈÉÉaÚ´iL:•ÌÌL‚Á >ŸÊÊJlÛfóæÍ¼ôÒK&å*¼H²îã€Özó§õZ„Bˆ‹¥” ’ìÜxX°`_ùÊW(,,l3% ’ݳ”RNÊÕúõëyþùç‰F£dgg×<ðÀ/O˜0¡3Ò¤BgѬY³t¶„DRJ î|‡ &0uêTòóóÙ¼y3«W¯¦¢¢ÂÜí8ð ’©WûI®~Èÿ!„—¥T.pðM ;€eYŒ?ž;3ɓ'·è€°gÏ ÙùêÅ_dÕªU”””|øØc­èÚµkS'<µãZëß|þóŸ¯î„m !:‘ D)Õ ¸ŸdÝnç¹YxXTÛ´Öç¹­BqÙPJù»oÌåÅÅÅÜrË-Ìž=›®]»°mÛ6êëëyúé§9tè–eÙ3gÎ|çØÔÏEk½åøñãËî¹çžÎ¨Bt2 @:™RÊK²Nä È“왾8FrÐàYõBñ—F)esH®ˆÌ¡¹½eYŒ;–áÇSYYÉš5khhh 4Ü{ッ|îsŸ;Ö ·,ëæÎû~'lKñ ‘äÔàõzÍž=»3!Ä'L!„B|*^~ùå, Àëõæk­ lÛînYVÖ:«›Ð‰DbÍ–-[^ì±Çd†–— @„Bñ™²téRVVVmÛJ©îZkóos¥T£eYKæÌ™³ûÓ|®Bˆ‹'ˆB!. +W®ô%‰n^¯7 8*)WB\ž$B!„B¤õi?!„B!Ä•C!„B!DÚH"„B!„H @„B!„i#ˆB!„"m$B!„B¤ B!„Bˆ´‘D!„B‘6€!„B!ÒF!„B!DÚH"„B!„H @„B!„i#ˆB!„"m$B!„B¤ B!„Bˆ´‘D!„B‘6€!„B!ÒF!„B!DÚH"„B!„H @„B!„i#ˆB!„"m$B!„B¤ B!„Bˆ´‘D!„B‘6€!„B!ÒF!„B!DÚH"„B!„H @„B!„i#ˆB!„"m$B!„B¤ B!„Bˆ´‘D!„B‘6€!„B!ÒF!„B!DÚH"„B!„H @„B!„i#ˆB!„"m$B!„B¤ B!„Bˆ´‘D!„B‘6€!„B!ÒF!„B!DÚH"„B!„H @„B!„i#ˆB!„"m$B!„B¤ B!„Bˆ´‘D!„B‘6€!„B!ÒF!„B!DÚH"„B!„H @„B!„i#ˆB!„"mþ(ˆ\€Ò¶IEND®B`‚lasso-2.8.2/docs/lasso-book/figures/PaxHeaders/slo-sp-soap-2.svg0000644000000000000000000000013214404126125021423 xustar0030 mtime=1678814293.509796933 30 atime=1678814293.997799704 30 ctime=1678814323.197965769 lasso-2.8.2/docs/lasso-book/figures/slo-sp-soap-2.svg0000644000175000017500000122451514404126125024705 0ustar00bdauvergnebdauvergne00000000000000 image/svg+xml ServiceProvider 1 IdentityProvider 3 SOAP 1 HTTP 2 HTTP 5 HTTP HTTP 6 ServiceProvider 2 ServiceProvider 3 4 SOAP lasso-2.8.2/docs/lasso-book/figures/PaxHeaders/sso-brws-post-4.svg0000644000000000000000000000013214404126123022010 xustar0030 mtime=1678814291.085783168 30 atime=1678814291.705786688 30 ctime=1678814323.193965745 lasso-2.8.2/docs/lasso-book/figures/sso-brws-post-4.svg0000644000175000017500000064370314404126123025275 0ustar00bdauvergnebdauvergne00000000000000 image/svg+xml ServiceProvider IdentityProvider 1 HTTP 2 HTTP 3 HTTP HTTP 4 lasso-2.8.2/docs/lasso-book/figures/PaxHeaders/sso-brws-art.svg0000644000000000000000000000013213766621500021461 xustar0030 mtime=1608196928.762895301 30 atime=1678814281.741730141 30 ctime=1678814323.145965473 lasso-2.8.2/docs/lasso-book/figures/sso-brws-art.svg0000644000175000017500000075732513766621500024754 0ustar00bdauvergnebdauvergne00000000000000 image/svg+xml ServiceProvider IdentityProvider 4 SOAP 1 HTTP 2 HTTP 3 HTTP HTTP 5 lasso-2.8.2/docs/lasso-book/figures/PaxHeaders/sso-brws-art.png0000644000000000000000000000013214404126112021433 xustar0030 mtime=1678814282.025731752 30 atime=1678814281.957731366 30 ctime=1678814323.153965518 lasso-2.8.2/docs/lasso-book/figures/sso-brws-art.png0000644000175000017500000014007414404126112024711 0ustar00bdauvergnebdauvergne00000000000000‰PNG  IHDR ¡™Ð< pHYsÊ&ó?tEXtSoftwarewww.inkscape.org›î< IDATxœìÝwœTåõøñÏ™²²K]¤H$F@@EÀ®Q£&jbŒågKòM4&j4јhŠcIb‰E£±`Å(¨  ½7aAÚö)ç÷ÇsïpwvvY`vQ9ï×k_³{ç¹÷>CÌîœyžsލ*ÆcŒ1ÆÓBûzÆcŒ1Ƙý‡ ÆcŒ1Ƙ&cˆ1ÆcŒ1¦ÉXbŒ1ÆcŒi2€cŒ1ÆcšŒ ÆcŒ1Ƙ&cˆ1ÆcŒ1¦ÉXbŒ1ÆcŒi2€cŒ1ÆcšŒ ÆcŒ1Ƙ&cˆ1ÆcŒ1¦ÉXbŒ1ÆcŒi2€cŒ1ÆcšŒ ÆcŒ1Ƙ&cˆ1ÆcŒ1¦ÉXbŒ1ÆcŒi2€cŒ1ÆcšŒ ÆcŒ1Ƙ&cˆ1ÆcŒ1¦ÉXbŒ1ÆcŒi2€cŒ1ÆcšŒ ÆcŒ1Ƙ&cˆ1ÆcŒ1¦ÉXbŒ1ÆcŒi2€cŒ1ÆcšŒ ÆcŒ1Ƙ&cˆ1ÆcŒ1¦ÉXbŒ1ÆcŒi2€cŒ1ÆcšŒ ÆcŒ1Ƙ&cˆ1ÆcŒ1¦ÉXbŒ1ÆcŒi2€cŒ1ÆcšŒ ÆcŒ1MLDòD¤‡ˆí빈H7Ÿûz.æëÏcŒ1Ƙ½$"£Eä~ÕÀS–—4Þ¬j‘f"ÒªŽ§Gyó9'0>$"­D¤ )ægö€cŒ1Æì½CqÁD¿}=‘z< |!"9 ðð‡F›‘Ù/EöõŒ1Æc̾¥ª“Ù×ó0û @Œ1Æc‘ˆD€£O·pNOà›@°˜®ªÉ´1m–Àj tVST5ÛhæýØ]DbÞ÷[Tu‹·ÍªP¢ª;D¤¹7_€–"Ò#pëUÞ}PÕ5uÌ¿£7÷•ªª»z½fÿb[°Œ1Æc‰ˆt>Þþ ¼ÌzÖ1¾¥ˆL–Oÿ¦‹H¯´á¿ÁåmŒ¯oï‰Ha`ì `¼÷ý"ï¼åÀÕÞ±QÔÌ9xÏûþ;ñËÀÀJ/°I ͽ{n5b’ˆäe¸Õc¸`¥¯wý‡#¼{ú†/{ߌ €z÷Ô1ý—€#½ïŒï ìþŽ{yq†sÏÅ)Ôqm³Ÿ³ÄcŒ1¦qœ<¤ª·©êzU] |·Â‘îTÜ6ª;Uõ&U]¦ªUõßÀqÉ·3œ÷„ªÞ¨ª ½ë_lÆúTu5Pæý¸RUWx_[2M\UK{ÕöÀøÞV°·…ÀEÞ³ K€mÀ„úþqÌþËcŒ1ƘÆq¬÷ø¯àAo[Ò¿jçÔLã=Ï{#3ó¼Ç»Dä9 ÌWÕ™«j•ˆ,Æ‹ÈÕÀzï©çT5úw\“NÀ_Tµ|çgö¶bŒ1ÆÓ¼rµg3›p‰çó€oWÔ3þ>ïqnëÖ|`"ЇAÀžø®_È)ÞãSÀY»8燸îíwyãŸÂQA¿œ¯õþ0»$Ö ÒcŒ1fïx]ÇÛ›Tu{Ús!\#Àq«Þ¢¸¶_¨êÖ ×kk&X|,WÕåicÚ-ÕªšH{®h¦ª™ªm!"ípù[Tu‹ˆ€UÝ‘a|Ž÷|XåKþs-€Ï€9ª:¢Ž"cR,1ÆcŒ1{LD~ Ü |[U-ÿÃì’ ÆcŒ1f·x‰ô?Ä­âüWÁk`úJŒ1™XbŒ1Æcv‹·­,T?PÕÅûvVæ«ÂcŒ1Ƙ¯)éŒÞRÕ¥ ß8x]U3up7f¯Y^cŒ1Ƙ=à%r¿œv¸·éàߪZWGó¦r®1àÀ.`ˆ7þLÜë0&ë¬ ¯1ÆcÌž‰ƒqηx_9¸Ò¶ÿ^‘è¾›7Ø»ò½Æd•­€cŒ1Æì9ª:ÆÿAD^ŽÅ­<üc_MLU§á¶`ó¥aˆ1ÆcL©êzùð.ù‡ˆtN¦k€óþÀU½@Dšçâ¶ME€ÀTµÄ¿¶ˆ þ§ªÒï-"ƒq«2/«êÚúr@D¤®»z\ÇõGë{]"Rœ ¸¦ŠÿVÕ-iãNŠUõŸ"28hüÑÕ XbŒ1ÆÓüà …÷x0.·â¸üŠÎ¸íQ={DäàU  PT—7‹Èªú–wÖÞuÚ·f¸ï]À \wr¨#DDÎÆK¼9ý x(Ó‹‘£gpÁÊZ\õ«7ˆÈxUý(0ü`„—#s;°PàiÀc9 ÆcŒ1àhï1½ù5ÀK@¡ªvN‘îÍýÀ÷Uµ½ª &z]ÏÁ)Ÿz½8RD¤0x6½{Ú¸nÀƒÞuú«ê!¸Àâ~\’>¾ ð.ø¦ª¨ª½p ëO{Òƒr«ÑªZä]j]s2û @Œ1ÆcöN¾ˆôð¾¾)"7âÞÈÇq« AK€«Tµ @UKqÀ!À㪚¯ª¯ã:Œ·ÁmÙ«ªõo pdÚµ/xdó½(~®ª ½ë*p#nÛWº«"àbU˜ß‡ÀM@w`|Ú9!àzU}Û›TÕŠ]ÌËì',1ÆcŒÙ;C€åÞ×À¯mÀwTõã´±¯ªj2í˜HLÌpí§¼Çác{ú¼ÕóqÛ£&ïb¾Ã¼ÇÿzAÈsÆ”kEä"2ØÿÂ­Š€Ûê•.½D±1€å€cŒ1Æì­%¸Üpù+…ªZ•aìº ÇÚ{Ÿfxn­÷XìPÕù"28[D®ñVŽº¿Íà¤klñWaê¸_PGÜŠÉ’z®Y”ös5°ió0û) @Œ1ÆcöÎgªú@Ç&2«ô[dx®EÚßÃÀ½ÀiÀ¸Õe×Û¯ª€f"ʬ´Ì0¾X ­çšÛÒ~Nx+*ÆÔb[°Œ1Æcö-ea@†çzéÕ£&à‰ ½ò½gÓUµ¾UŠàýr€ƒ2<×?ñù¸U“„ª®¨ãksîk `ˆ1Æc̾ö?ÜÊÈÕ"ÒÜ?èUǺÎûñ™à ÞþpùWÍ©ð^—g½Ç¯D¤+ðí ãýU•?‰H8ýIÉ‘üÞÛÛ‚eŒi¯™U\3©`¹ªfÚ¯¼OˆÈ-@U½h_ÏÅcv‡ª®‘Û€i"ònËո܎'}@‚Á­|ÜT°3a}Wþ ¼\ä­ž<‹+üS\Ùà~iã'§àš~ "ÿV{ç ÎŽæ6ðþf?gˆ1¦^"r0ð/2ìý‘eÀ·Tõ“&ŸXm£È¼uÀcK÷†}}ÆVxcÓs%PÕEd#p-ðWïðfà6\€‘É+ÀG¸ðWT5ӵ˼ûîÜ+)"§árHÎÆ­zìð~ž‰+ý[¯"ò`p%ð§ÀõWà¡àRëq‰øÆd$–dŒ©‹ˆájÂãþ0ý÷±30÷éÜåªúæ>›¤ÇëêÛNUïÞ×s1Ƙ½!"Ÿ„T5SÒz6ïU€ë3²AU«xN.Y}C•¾Œ©— Ƙ:‰È%¸Î¸÷¨ê5uŒÉiè-cŒ1ÆKB7ÆÔ§‹÷8³®™‚9JDž‘OEdƒˆL‘s3Œ»RDž‘Bù¹ˆÌ‘Í"ò-ù‡ˆd\Í‘¨ˆ<."·ŽÝ""ÿÌ0¶@D®‘÷½¹¬‘WEä‚ cOóžûLDÖ‹Èk"r|]¯ÝcŒ1»ÏcL}ü=¼gˆHNCN‘Ë€·€o/â–êÿ#"7§ ÿ&pððc`®L5 ¸Š0}3ÜæDà<{šq9 §¦Í¥%0ø®>þ¸dË\Ü>ëàØÛ½çºáªÍLÀ%Ý¿""ßoÈk7ÆcÌ®Ù,cL¼7ðóp+!kIÀ{À;ªº:ÃøƒO€YÀñªºÃ;ÅåœôWÕ…ÞñGpy$ €cTucàZG᪴ܡª×¥ÝçYàd «ª®ó޽ã]»M`ÜÀ_ªêoÓ®Q¬ª¼ï^÷æx®¿ªã•Ã|W+¿«ª~±{ÿ‚ÆcŒIg+ Ƙ:©êv`80h\Š«v²JD>ΰ=éb üŸ|x׉7ã~眙áV·ƒÏT`9ðÝ`Ýyi‹ d^÷ƒL¼šô‹€Û3¼¶ /Ç­\ÜR¦ª¥Þ¹Í½{cŒ1f/Y^cL½Tu-p¶·0 8·jn{ÒYªê7È:Â{-"#Ó.•ç=öÊp›2ÜWEäQ\ùÉ1¸r“çâ:ø>’~Nšþ¸­V3t×K½GàJNž/"éÏPϼ1Ƴ›,1Æ4ˆ·ð¢÷u“ˆ\ Ü«Qï E@¨+g¢F-ú€MuŒøp!; ­Às»˜r ïñó]Œ(Ä5—Ôñü \ cŒ1Æì% @Œ1{DUï‘_½E$_U+€-¸äñAu4ÄÚÝ{¬òr;N‘B\.Ê`à~U­ÜÅé~¾FçÜj+P ª=÷|¶Æ³ïx¹vâ:“·Ç™‹«b¸´+ÁÆ4 @Œ1{DD"¸-NI\7`€éÀQÀx\©lx8×­÷ À±]™lFˆHDUãõŒŽÛf6DUßß‹¹cL“‘3pÕþz×1ä yøÀûš™!ïΘ&cIèÆ˜:‰Èå"r«ˆtJ;žühLö’ÌîÃåRüIDK;GDähÙÝU†gpÛ¶~|X¤ª3vu’7§¿âÊêþÙ ˜‚ó94ð㟀ðôù‰HXDN‘6cÌ—ˆˆ ‘i¸ß“½Ãá0Çs gœq‡vyy~ê­q ý x Ø "k¼~MˆÈòöŒi4¶bŒ©Oà—ÀÏEd>°—[Ñh‹+Í{¥?XUW‹È9¸~ŠÈt\þD;à\00WݪATµLDžfg^É=»1ÿ[€ÞOó>TÜ…8ÐÏ»Çû"r9ð7`žˆ¼|ŠK@ïï=lÞ{cL£‘Àoq+Ã0jÔ(n¾ùfúöÝÙ:)‹1oÞ Æ˜:y«ÃqAC? ×$p5ð!ð¯`¹ÝÀy]€Ë€a¸&„›pÈ ¸¿ÏÆÙ¸jZ·x9$uÍãPÜêÀݪº>ØKbUýuÚñpp.*Ç•æ}RU'§=×7äp —À¾×qªª&뚣1Æ46i…ûPèJÜXúôéÃ-·Ü±ÇKCÞÓmÙ²…O>ù„9sæ0gÎfÏžÍÚµkƒC~¦ªhŒùã³ÄcŒ1æKÌû0è à&Üv*Ú¶mËu×]Çw¿û]"·¡eOßÓ=üðÃ\ýõ$ €ùªÚ?+7¦¶ËcŒ1æKJDFã¶žöÈÍÍå²Ë.ãšk®¡E‹õŸÜååå”””ЧO,XÐg¯/jÌ.XbŒ1Æó%#"Îò~æ´ÓN㦛n¢sç†TßµÙ³g3yòdZ´hAnn®8œ•‹S @Œ1Æc¾$¼*ƒ?~ŽËEã ƒâÖ[oå˜cŽÉÊ=’É$O=õ_|ñÍš5#¯Q¥Üöæ›Fgˆ1¦9 ȪÖKTµlßÌj'éÌTÕë0¾'.aþnU½¥±çgŒ1{JDNÅ•ïPTTĵ×^ËE]D8\ÿÂDCó?>ûì3^}õUª«« ‡ÃÄb1rssƒç[b Ƙt÷‘¹{x©ˆÜ¦ª¿kê ¥ ­¨$Õ'¼›ã1¦I‰Èq¸êV£B¡gu·Ür mÚd¯ÑÔ©SY¾|9±X UEUÉÏϧ¼¼<8ÌÓè,1ÆdR Œð¾ƒ›ÛEäsU}xÍ `#®L®uñ5Æ|å‰È8àE¼Ü‹aÆqûí·Ó¯_¿¬Ý£´´”7Þxƒ­[·‹ÅH$D£QT•ªª* ü XVnÜ4: @Œ1™$UuVàç"òð_ààáô¼~U]–ö\g\×ôÏ2õ Ù^‘Yu=/"-p7©ê ¹¦×·¤°®!ó‘–Þ=>WÕm š¸1Ƥ‘àß@¸C‡üú׿æ´ÓNCD²vyóæ±xñb¶nÝJ2™L­zTUU¡ªäææRYYI(òO±ÓèB»bŒ1¼å=ö‘f"ò…ˆ< "g«p gû'ˆÈ™"² ×1}ð…ˆ<-"Æé]çæL7‘ ¼çÏ÷~îèýüû´q¹ (%"ò,®›{F"r‰ˆ¬Æå¸,6‹È¼f_Áq7x÷&"á:¢/"ÐÞcöÀ©@á±ÇãôÓOÏZðÇyçw˜?>Û¶m#™L‡ÉÉÉ¡ººšh4J("‹‘ŸŸLD·Ä4:[1Æ4T;ï±Ô{\nÅѸ.åàV&:ˆÈ·'€õÀUÀ§ÀxÜ Êì­6̶?‘_gè6~‡ë¢uç€Ü…kÔ5Ù›KødX­ñæ÷+ܶ²÷¼ÇÜþëk€^"2\UcÞð<ïžU¸ 5_Ÿeü—2Ƙ†9`РAôéÓ'•‰D¨®®Þã‹–””°`ÁV®\™ÊõÈÍÍ%§îá¯zD£Q[1MÎcÌ.ye!oõ~|+í郀ÓTõñQ\%—J`¸ª®òžzND¾À•—üðUMŠÈ£¸¿Ç¯®Ó8 ˜ ª[ë™_/\°ñ>0ÞDä¿ÀÌ ãûx÷› z^‘5ÀÝÀ¹À£i§VÃTµª®¹cÌnÈhݺ5íÛ·\‰\?O //x<Þà*WëÖ­cÞ¼y¬_¿>u,//ŠŠ "‘"Buu5¹¹¹TUU‘L&ÉÍÍ%ó?o±Ä4>Û‚eŒÉ$WDžò¾^Ám¯:·•êæ´±K‚Á‡çÜJÈàÃw'Çm=ð=Šû£waÚØ p+-ìb¾§xãî ¬Zà É0þ\Üï¿;2¬¸<„K—Ἳ-ø0ÆdQj–ÐUUB¡yyyää䤞‹Çã„Ãá:·h% >ýôS¦M›ÆçŸ@$I­päåå‘L&I&“©mX999ˆ±XŒh4ZcNÆ4&[1Æd"xuèqÁÂ4à#àï»—d8¿—÷8/ý UýBD>Å­œøÇ–‹ÈTàti©ªÛÅý•½X¼±‹ùú÷[á¹ùŽùåen‘Ÿex>AæRÄ™^«1Æì©ZHðgU%“H$…B$‰Ôö©H$B("‰H$˜9s&óçïüu———Guu5ªJ^^^ê…%¸*â÷ñoß$¯Üì×,1ÆdR©ª‡7pìö Çr¼Çº–áªH=ŒÛnuð`$.úª&¨Ÿ¿ò ÏešƒŸ?² —Ó‘n°2Ãñ½ªàeŒ1iHm·Úºu+ $‹‘L&)--M­Vø=Bž|òÉÔ–+!''‡ªª*¢Ñ(Éd’êêjòó󩨨 ‰D¨ªªJ&¡PÈr@L“²ÄÓü]ÒŸðV6ºŸ§=õ4n»Ô…¸Äߎµ«íW¼ÇÎÔ^¥¨5\b<À}ªú~®oŒ1! .ïàå—_fõêÕŒ9’=zмyóZÛ³*++)++# QVVÆçŸŽª¦z{ø9ÕÕÕ©€¤²²2•÷!"©ïýq> €˜Fg9 ƘÆ0·uëL¯?HÐ @K`jð Wë`„ˆ Îf¨ê¢Üoš÷xF†çÎÌpÌOt¿ ×6ƘÆRc Ö‰'žÈرcùðÃùíoËĉYºt);vì\|õ«Z”••±yófD„üüüTŸ`p.$///u,Çk•ä ÎɘÆd+ Ƙ¬SÕ^e«‹€¿ˆÈOTµÊ ,îÅ'we8õ\Pð8.Hy¸·| —ëq±ˆLQÕ§¼•– q[ºÒ=ƒ«Žu™ˆ¬þ¨ª"Ò8X¨ª¯5ðþƘý×”ôûÀ#õUê«GæÍ›Ó¿ú÷ïOee%«V­bÆŒlÚ´‰ž={Ò­[7ZµjE^^ªJ2™L%§û[®‰D*Ç£²²2\øÏËËËkôñÇùsÀV@L°ÄÓX~ˆ+{±ˆlÆå}T—¤uZ÷½«¸Õß÷dCn¤ª ¯ïÈÀ“"r/®HðKàÆŸâ]ÿ7ÀÍ"²hë÷‘ÄUÊ2Ƙú”â*ûÝ!"ORÕÙ»8i‘€ø‰áp˜nݺѣG***X³f óæÍ#sØa‡ÑªU«T¤V8B¡áp˜êêêTp‡S«"ÁqÑh4µ*bˆiJ€cÒ]ÎΤîúTâJó®Éô¤ªî‘ã1¸f…-q‰ÝO«j]ç$½@¢+°¹ŽO7{÷]–vî|é|Wësà)\~ˆß‰=8~=p”ˆŒÂ%¿·6ys|UUƒ9*€9u½VcÌþÉûU‚+;~.nÛé§À€Çü•Õ 5pàÀÉ:t½õÖ[[ý^Þõ‚×FU‰Åbˆ]ºt¡G”——#"TVVÖØŽUUUENNNªš•ŸˆîWÃJ$©\h4J<Oõ©¬¬ –÷µÄ4: @Œ15¨ê‹ &îbŒâ¶G5x+“ª~|PÏóuÝ×+|O†§êœ§ª¾[y©oNóÈPRØcpZtĽ§Š½q«®‘€¿¨êêÀøãÆŒ:t(EEEE&LH .¤U«V¦‚`IÞŠŠ T5•0 @ÒKíÆãqòóó)//'''‡x<^ãX$âÞúAJ<÷çgˆit€cŒ1ÆÔCD"¸-¥ÝqåÁ»¾ÏTм9¾ƒ[A  ÞÿýL™2¥KU•«î7näž{î¡W¯^qÄtïÞ=c%¬à–-ÿ¹`å«p8L(J•ßõUM傸«ÁR¼KB7ÎcŒ1Æì÷D¤=5Œªúˆœ Æ4: @Œ1û”ˆ ÀÇ{?sê©§rÁ——Dze˘3g³fÍbþüùþ6bÜþîô=Þå"ò𫺺­›¯iÜ <¢ª njé{j(zjäÈ‘áÂÂÂÆ™`©*Ó¦MûîÖ­[‘Ñ{°¥§ÉˆH_à(j÷Æhí 9xŒñŽÅ€eÔ .ªZ)"m3m“ú𫱒¾ÂѳgO>ø`*++Y¾|9Ó¦MCU9âˆ#h×®]jœ_ÙªºÚ¥±øGNNÕÕÕ$“I¢Ñhª/H°3zUUUpõƒH$rˆˆÜ©ª?k²³ß±Ä³Ox¥TƒÛrøæ7¿É-·ÜÂᇞwøá‡sÎ9çPYY™ FfϞ͜9sXµjUðvw½!"2\U·4Ù 2é/¸*C»õ†HDB‘Hä¯ÇsLxôèÑ3³FзoßÜ;ï¼s(pðô¾˜ƒ÷ÿÏîP+Ñ»;ð?U½OæBŸã ?©ûà·Þ±OëJêÞƒØEºßý<™LÒµkWz÷îMUUÉd’òòòÔØH$’ 8âñ8‰D"µÚF‰Åb$“É:·fsJ ÉÏÏÿ©ˆtÃþïj022& ,1Æ4)¯öþµÀOðêîxàÜtÓMœrÊ)µö9ååå1dȆ ’:¶mÛ6>ùäfÍšÅ#<ºuëñîq}#¿ÓÈDd p.p?ɸ…÷˜ë«TÕŠ´ÓRÕGydÍ6;Z´hÁàÁƒÃ3gÎü!€xÕ¤Ò½ Tõ"Ò—wU—.ÞãtÜÔ½1Tµ<8XUßÍòô¿N2&¡CíÕD"AYY‰D¢F€âWÉòƒ‹œœ’ÉdjVyy9‘H$Õ”0ØùÜ_ÉÍÍ%‘pqa(â†n ¨¨èÌ­[·žùÄOl‘WqÁ綦ûç1_W€cš„¸MûßîÀ%šRXXÈ~ô#.¹ä’ÔÞåÝUXXÈÈ‘#9r$………üêW¿¢²²Ü– @¾úòÿê}¥ûž÷õj¯ܪU«ê¼¼¼:{8|YuéÒ%ôÑGõÝÓóE$Š ü ã9U-‘çqùm3œV-"—«¨ƒ‘úYU7¨ê{¸f}fÏÕèµLAI0`QÕTù]¿¬n0àÈÏϯÕݯšÇkmÃJ&“Ì›7Ò®];n¸á†–·ÝvÛY6l8ë•W^ÑÂÂÂ÷·oßþð†ªÎ˜=`ˆ1¦Ñ‰È à¼DòH$ÂyçÇõ×_OÛ¶™ÞíUåÉ'Ÿ¤¬¬ŒÎ;³lÙ2ØYŽÓ|µM~žáxwàRà}àY\Q‚tÖÊV_½z5sæÌaÛ¶mäååQ\\Lß¾}ký·¸hÑ"æÏŸOyy9ôë׃>8ã$KJJ˜5k½{÷¦gÏž5žÛ¶mÓ§OOýܬY3:vìXk\Paa!ñx¼}i ªEä\’¾¿¢Ñ…šãWoàºÇ·JÈ\I U-Ã.¦ñeLBßÕjHú*q(JmÃò·Te*É‹Å((( ¼¼<µ +×È©¨¨à؉D–:tÐàÁƒ¥gÏžqúé§ËùçŸ?4™L3g‡~øúY³f½€ûoëeU-mÄ+ó5bˆ1¦ÑxÉ÷?ÄËó9r$·Ýv‡rHÆsvw«ñ¦M›xâ‰'ˆF£D"«äò5£ª¥‘£qÈlUý}§‡C¡PdÆŒ¼ð 8îÝ»S^^ÎÂ… Ù¾};'tàÞ N˜0E‹1xð`zôèÁ¦M›øÏþÃÁÌ9çœC(ªq£éÓ§3cÆ V®\Éå—_^ã¹;vðÎ;ïп ذa¯¼ò ýû÷çÜsÏÍ8qo+bHD q‰ÞÁíRþ–©fÀŸ‡ášïù*%ì ,>÷ŽŸlûªVØúª•„^_àÜ~åû}¤—äD"D£ÑTÂà1¿/@yyù `HUUÕ&iÿæ›oŽN:øàƒO:thAß¾}騱#]»våÎ;ï< //ï’O?ýô’É“'Çóóó§TVV>;k÷™2e óçÏ'¦þ€ÞZÒ¤©å­·ÞbäÈ‘Œ7®Æñ`àúÎ;ï0þ|.»ì2ºté’:>xð`î»ï>¦L™Â¨Q£jœ;gÎŽ9æÞzë-6nÜHûöµ/FÍÀœ9s˜0aGy$]»v­oʽç3Ok?ßây`5;·Iel੪ŸÖw3Óäj%¡CÝG]J8NUà –Ú æ}TWW§JöVVVRPPàoWMUËò,VÕMÞõ7ŠHxÑ¢EÀ“ŠŠŠN6lØ¡ƒ¦[·nrÆgD.¸à‚Ñ£gÍšu×!‡²nÑ¢EÏà*¡M©«Ó¼Ù?YbŒÉ¯ÉØÜv«oäççsÕUWqõÕW§ºúî­ÊÊJžþyJKK …B$ "‘ª|#iÈ×[ 0‘ «#uQUÊËËiÖ¬Y­çüOU•÷Þ{Ö>:wîÌa‡Æ»ï¾ËÑGß‹dÁ‚$ FÅÒ¥K™9s&'œpB½sñ·_mÞ¼yWÈrïu¦çd¬¾¡SÕ¹ÀÜzoj¾Œœ„žé9ÿx<'×H*¯®®& Õh6诊ø+ ~.HuuuêÿÔшЫ^6Íûú¹ˆô|ùå—O‡Ã' 4è¸aÆEzöìI»víèÛ·/÷ß§P(tõÒ¥K¯ž0aB©ˆ QÕYý×3_Y€c²ÂÛnõ"0Ô?6vìXn¿ýöZoäöÆ¢E‹˜5kååå©mÁª.d}×1_mÞ™ÝZN:è &OžLii)½zõâÀ¬oÚ´‰ÒÒRz÷îñ½zõbÖ¬YlÚ´)Õ‡aÖ¬Yôïߟh4Ê AƒxóÍ77n\­mZAk×® U«úS•¼RÒÙ[64_6Ëð¿oÈ–,¿òU0©<ÇkTÊF£5’Óý’¼¡PÈï± ì„®ªËq%²ÿ""~øáhàÄ:œ:|øðú÷ïO÷îÝ)**â'?ùIó×^{íXÀXbŒÉoåãi¼à£_¿~Ü~ûí 6,k÷H$¼ñÆlÞ¼9U_DRŸîùI–~)IlÄdpöÙg3yòdæÌ™Ã”)S‡ÃôéÓ‡SN9…ÂÂBÊËÝŽ¦–-[f<ßofèÛ¶mË–-ã?pé ॗ^bñâŵòœÞ}÷]š7oÎŽ;˜;w.½zõ¢[·nôJMc‘Ö¸÷O1@÷²É^'¡û[¯ü|Ž`oH$‚ˆ¤ò>ªªª‘Ô6,¿jÔØ¾ºÛ‰t^é彯ËE¤ÿ3ÏúˆæÍ›Ó¡C***zöìÉÌ™3k ~e¢-Zpæ™gÒ¿ÿà¯æ«£/0Õÿ!ð¿a×|QÀOUõñ]\k·’Ðë[ñ·Ÿ¦!¡P(•ã‘“““*¿ëÿÞôÏ l_ÝëJª:×Kæ)¢ªZ²·×5_€c²ád€¾}ûrÅWPPPJxÜ[sçÎeÅŠlÞ¼ptýª.áp˜H$Rcϳ­€˜†jÓ¦ Æ #''‡§Ÿ~šíÛ·Ó¶m[¢Ñ(k×®¥ÿþµÎY»v-Ñh”¶mÛ¢ªÌš5‹íÛ·ó›ßü¦Æ¸p8Lii)Í›7O &¡›¯.U&"/ÇÑÀSïKqUÇžjÀåê\ ~_ßsþÖ«à*°¿ +ØÝ8ü\X,F~~~’¼]ºtéøüóψF£‹Ç¿³EúÚO;Ü›]°Ä“ ÝŽ<òHÚ·oŸZ™…Bäåå‹Åv;©¬¬déҥ̟?ŸŠŠ T•H$B8Ní_®®®N­†øÛ°,ÙˆHGj–¨}@Ukü‹ÇãÁd[¼1ˆHª”óa‡Æûï¿Ïˆ#hÑ¢EjÜŽ;xÿý÷4h‘H„•+W²yóf®¼òJZ·n—L&ùóŸÿÌìÙ³1bD£½f³Oý˜º»ÅÇ‹U5VÇóAµV@|™ÊîÖõ½Ÿ|îÿŽÌ´ «ºººF¾œ¿ +X!  ¨¨¨u$ù.›4iÒ²P(´(‘H,:ñÄ·4àõÓ €c²ÆßC‡iÙ²e*IÜ_•ð·MÕŒˆÛ¶mcÑ¢E,\¸05677—x—_~9S¦LaêÔ©©­TßøÆ78ꨣÈÍÍ%™LRYYYã¼ ÁƒSRRÂÖ­[ÉÍÍ¥W¯^»U†:‘H "öïKFDšWâ‚ßL• â¸Õ‘†JÀÞwB÷› úÔ$‰ÇüUhÄ_ñ{„øùKÞk¬ëÛÖÉdrD(ѼyóêI“&-ˆÈÂñãÇoß×lŒ Ƙ¬P LÔÕ±·ªªŠD"A("‰¤¾vìØAÛ¶mY¸p!ï¼óñx<µ­ ™L¦¶ø\‚É“±X,UŠ×>8'óå!"m^Ô ,üï;{ɪ•À½@NÚé%¸àb¶÷ó‡¸=ø+€µªZ+qVDlݺµÆC‡eèСéCkÉÍÍe̘1Œ3&ãó¡PˆóÏ?¿Îó;uꔪŒÔø¾!¶mÛF$ù|×#MSð*ý}øà'ò|,Îò àg^󾆪ñáÍžöñW†+**j”äõƒ ÿ˜pTVVÖ¨"è—é‡Ã»\=VÕààUÕI“&­K&“Ë"‘È‚qãÆ­Æ~ÿš]°Ä“ 5)?øà:wîLQQQj[Vðg,£²²’íÛ·“““CûöíÙ°ao¾ùfjœ_2¸WÙO² 6Ò VpÉÍÍ ®¨Ø¬&&"Ô^¹èüEUßfçªEº àU]&"·ã¶¸¤V5Tµ48XU·“w1¥y[·nÍÙ±cG\ޝ‚•+W&’Éäì]4MDŽþêZ Ü<4NÁm\Ü¿›—O {’„î—#OÏñðó™‚Þø«Å~rºŸC—››Ë /¼ê2pàÀÕ»ùè …:'“ÉQ“&M*SÕʼnDbAË–-—Œ5ªr7¯gö€c²¡Æ>æ7rÏ=÷p衇2dÈzöìI‹-2þ!­¨¨`ÇŽ¬_¿pÛ²üDó`À‘¾uÀßrU^^NNN"B,³F$"a  ;ŒÍªúœˆœ Ü×qêÜ–¨qoØümR©-SªºÞ¬ª7gc¾ª:#''gÅÛo¿Ýëä“OþÊԻݴisæÌ!‘HÜ·¯ç²?‘#€;€£½C›;»TÕ¯µCDnî¾§ª»ûÁG½Iè Jü&¬~ÀQ]]]kµØÏ¡óƒ?qýñÇç½÷Þ W¯^KO?ýôe»ùÒ5‘A‘HdPYYYò¥—^Z£ª ’ÉäÂSN9eÃ^^Û|MXbŒÉ†Ô§x"ÂI'ÄØ±cY³f |ð“&M¢W¯^ôïߟââbš5k–:ÑßšµcÇŽÔÞú`Be8NmÃòÿpúÕµ‚´ü•+ûw¼mRUu¶·%ê÷ì\Í8šeG_žÊqÁÇÔ .üãU½¸¥i^‰‹Å.š1cÆäŠŠŠHqqqÝ­É¿$âñ8Ó§O¯þ¼¶¯ç³?‘ƒ€[q[«÷ß÷_€Û½•·t÷ãG؃Û)ÔNBßÕ¿ÐG0àðó>‚¿Kƒèäææ²~ýzþþ÷¿³nÝ:úöí»à¦›nÊÆs …ÞŒÇã%À!ápø Uí …N˜4iR‰ˆÜ“ò¾æ«ÍcL6ÔúODèܹ3:uâä“Ofíڵ̛7÷Þ{.]ºÐ­[7Z·nMNNNêhuu5áp8h¤—ŒÌTÁ%ým ›¯ õ‘£þÔÞ2ÕHxÛ©*€‹ÿµ ·çÝ.fzÇߊêxs¶Oy=FÏ;÷ÿ,XÐ~_ÏgW’Éd,‘HLN&“¿×l4Ò1 &"m€Ÿ?rq¿×žÆåuÔ¹-É+·{×Þ¶ÆöÕú´{î¼€WèC½ŽèþïM¿1kú±H$ÂìÙ³ùç?ÿIyy9áp81vìØw®¸âŠ=  ÒçU …&Œ7nwè# ôòË/wWÕCB¡P›qãÆYða,1Æì)~‚{sÚ2wóõÿ°vìØ‘Î;‹ÅX¿~=K–,¡eË–©ÞªšZÁn¹ªk–¿Râç‚D£QB¡P°›ï~™â%Ëv"s¢ww\‚—q{ØG§®À:\pÑRU7‰ÈyÀg¸•ŒÏ2½)VÕJ\òø—’ª¾ ¼»¯ça¾œ¼`û*àz Ð;üðªúI#ß¾VÈž$¡ÇãñYƒÛ°"‘Hꃚêêj^}õUž}öYT•-Zl¿âŠ+ž9rdj äž‘‘HäÑã?>= ?9~üøå¸c @Œ1{î7ÞxãÕmÛ¶åÏþ3«V­ªQíÊÿDÎç:—H$hÛ¶-:t@U)--Mó÷%ûå!ƒÛ°ü$Ë`­{¿ün0ɲ)W@DDöŧÔ"ÒŠÚÆ'ªúw৸mSuéê=> |LÍÒµ+{ÛPÕ'³;{c¾•­n:z‡?®SÕ·šh©JümTÐð\ÿgÿÃ?©Üßr,¿»eËzè!æÏŸ@=–ßxã“Ú·oŸf—––>}ÖYgUgáZf?`ˆ1fOU-]º”ââb:uêT#™8q"……… 8°V%,ÿ«²²²Fÿ§Ÿãáÿ áp8„ø\üU‘`5,O£^~Ä£"ò]UÍj |¯F7¼þªú¸ˆ<ëk•á´€¿K€¥Ôî‹á›TÕœÍ~Ë«lõG`€wh p#ðX¨ @’Édð”傸ÛWc±áp˜P(T« z2™dÅŠüíocÓ¦M„B¡ä±Ç;íG?úÑû{;yUMªê+'tÒÛ{{-³±Ä³§nž0aÂö‰'žœŸŸÿM@ü’Çç“O>áÞ{兩¸˜Ò½{wZ¶t}»êút/‹Õ*« B€TÞGpVpkVS¬€ˆÈ àE\âuw`Î\£#°EU+Dä` ;W4:È»‘'€-À ïØzjsTõ9\b¸1&ˆ|WÙj”wè ïç`e«¦´ÆÿfݺutéÒe’ÐýÕŽà6,¿OÒôéÓyôÑG©®®¦   ìÒK/}á¸ãŽ[›…¹—E"‘ÇÇŽ»·U³Ì~ÈcÌQÕr\¥˜[EäIàl?ߣ[·ntéÒ…±cDznÝ:V¬XÁ³Ï>KQQ½{÷¦]»v©²¼ÞµRÛü½Ê~p좪µ’ÓýR’þ±Æî„."Ã5ÛA=ˆˆtÅ éyÝq}FogGN-¥fp‘«ª;D¤/°JU+²ÿÊŒùúòþ¿øÜ–«`e«ß©êÖ}8µ¸&›í®ºê*î¸ãzöì 4l–ˆ¤šú‡_´£¢¢‚‰'òúë¯йsçµ7Üpà ]ºt)˼?­®®~ô´ÓNÛ—ÿvæ+ÌcL6T@í$tဠ¸¸˜!C†ðù石fÍÞ}÷]ZµjE¿~ýÈÍÍM]Äû„.•T‡SMƒ\‚I–‰D"¤äåå5Z#BÉÎ ¼Ã¹À8iOÍãyU½¸øu†ËÅqE¾÷óï½kúÛ¤2vRVÕ…Ùy5Æìê©lu­ª®Ú‡S@UUDnî›1c†}ôÑŒ1‚‹.ºˆQ£F5h5$™L¦¶§ú¹ %%%Ü{ャX±€áÇϸîºë¦…Ãál|0ó~YYÙsguVb×CÉÌcL6Ô(%é ®p$“IÚ´iC›6m8p [¶l¡   •$鯀TUUÕ8üν~Þ‡ªÖê’H$RçƲõâD¤7ðnkTAà©\àÒ §¬ò?&P»ñÞZUÝ™¬¢ú|¶æjŒ©·²ÕOUu··L6&U½_DV·¨ê°©S§2uêT=ôP.¾øbÆŒ“>¾ÖÏ~ƒÁX,Æ¢E‹¸ï¾ûؾ};¹¹¹•^xáK§žzêŠ,L5 …ž7n܇Y¸–ÙÏYbŒÉ†wóõ+µÔj¾åÿõ·aÅãñTއßñܯ¦•›››Z)RK =õÍÞ‘£€I¸ÕŠLì¾þMí„oTõUàÕlÌók^e«oáò:ºy‡gáV<ÞÜWóÚU}xÝû}s-pÂܹsåšk®¡]»vœ}öÙ|ûÛߦ°°ÐŸzôs磌«yùå—yæ™gH&“´oßþó믿þùƒ:h¯ûóˆÈÖp8üØñÇŸÜc,1ÆdEÜÆ·ß~›ŠŠ † Vc«UzîG0H 6ÌÉÉvÁºöÕÕÕ©UØ™œHBÏJLNÁõ<ã½Ö¼ÀóåªzM–îeŒÙC^e«?ßð­nRÕ&ë $"=€+q wk›’ªN¦ˆÈ¡¸­cç”””Dÿú׿òàƒ2vìXN=õT àß‹d2Iyy9>ø ü1ƒþøúë¯+??¯·I‰È¢D"1aüøñå{{-c|€c²!㬮]»òÊ+¯ðì³Ï2`À† BÏž=‘Œ·B¡PªsoAAA* Öµ÷ƒkV°jV^^^ÖW@¼’œooŠH'àràÿa\×ðâ}ÕÄ"r8nÅãï_ÙênuM2›jùÀuÞW° W°b·©ê\àù9ppIuuuñ /¼À /¼ÀÀرcéܹ3«W¯æµ×^cÆ D£Ñê³Ï>ûµóÎ;/ùb*"“Çÿ:MÐWÉì_Äþfcö–ˆü ¸|ìØ±<óÌ3$‰ÔV«P(D"‘`íÚµL™2…Õ«WÓ£G=ôPÚ¶m‹ªRPPÀ‚ X³f "B8®± KUSÝ|£Ñ(ñxúˆC=”–-[¦Î ‡Ã©s‚ ý’¼þ6«h4J(ʸ Ë_iÕªÕ!¥¥¥³E¤_¶ëû«j x xJDú“½í^Ƙ]‘Ö¸àÿÜJC˜ˆë`¾²‰çÒ¸ 8Á;ô)ðKU}4›÷ñ~‡=<Ö¶mÛN;vü¿’’’QÉd²HDr†>ï[ßúÖ¢¢¢¢lt"_Ÿ““óè±Ç»×Œ1u±Ä“ I Ö–*ÿûôîçmÚ´áÄO$™L²mÛ¶Ô¸xÀ=ÀñÞ¡åÀTõŦœÇî8묳*p}‰V¿öÚkÍÊËË;D"‘6"Ò,‘H,>å”S,Í4 @Œ1Ù± o¦ïë{Î8‚¹ þ6+¿ß‡¿ ËÏ-ñƒ¿L¯?‡’’’äúõë1sæÌõÀI}úô9éè£ÎïÓ§íÛ·çàƒæî»ï“sÉgŸ}vÉK/½‹F£Sâñø À3ªúiÖÿ•Œ1 âåVý8Ñ;´ø=M\ÙÊ›Kn«Õ ý®©ç’-Ç|.€Z¾¯çböO€c²¡ÞNèþ÷u=çŸç¯€ø9Ñh4µêQ]ír+óòòR ãñxª ºÌ@âñøÃªú{ïŠHÞâÅ‹GÇ9bĈžƒ ¢k×®rÞyçE/¹ä’c+**Ž1cÆ]={ö\¾bÅŠ§q{ÌßñÏ1HDº7P³²ÕÃÀ ªZÒÄsà|ÜÖ¯bïð‹ÀUªºª)çbÌ× Ƙlhp'ôºžSUÂápjÕÃ߆•“““ê’H$¨ªªJ!‘H„P(”Z©¨¨HmÁÂ}J¼W%.˜xø¹ˆôyñÅO‘“|Ô!CÂ}úô¡mÛ¶ 8‡~¸g$¹néÒ¥×½øâ‹e"òð_UýoÖÿõŒÙÏe¨l¥¸ÊV?ß¹"r.ÏãHïÐ\žÇ+M=c¾Ž,1ÆdCÆ-X ] ñW@’Éd*àˆD"©€$˜ãá÷ñËïŠHj›V^^^põ–ÆUÕÅÀbàO"ÒbæÌ™c€ñ]ºt9íè£nÛ·o_:uêDË–-¹ôÒK›ýä'?ùÿìwxUúÇ?gæÞB€ ÒAªÒ"‚ÒDÁ†Š¢H'±® e]ËêZÖŸ®kC D°±¢‚¨ˆbY:R¥,ˆté$¤Ü™÷÷Ç™RnBBÊ p>Ï“GræÌœwb¸œïyÛí .¼])u©ˆü·Ð?1ƒÁlÞw:Ä©’7ü 0º¤+[yöTBWÙº Ýl4 Ý]ý9)Š·ƒ#@ CÑP¨$ô –eeŽôôôŒŽçÁ¼ÔÔT,Ë¢L™2]ÐÓÓÓ3î9~üxFãC ЛCDŽ3€J©ï½÷^,ÐÛï÷_Û©S§KÚ¶m«7nÌÁƒü§ðó1 ™ð*[ žêxÃ+Е­¾“=Ðb£Š7üp§ˆl/i{ †3#@ CQpÒ$ô¼D‰ëº¸®›áÍŠ‹ÌaX™›\C³2•>¥æ€¢[î}=«”ªFçyü/L6u^ZxCËÐáV&´Ò`(AŒ1 E'„Å©$¡‹HFo@ QV7(B2‡\ù|>”RyÁ0¬ 8ðù|Y†ˆÔjÝÚ¶m›¿â»G­}>_k |ùå—ÿsgczzúÚn¸Á$¨ ™PJµCW¶êì íG—Øý·ˆ„E¼+¥jϽ¡]èF‡aCƒ!+F€ †P\LSJí@7èû X˜G'à\Ëð†úsöïƒ÷eöf¸®›áIMMÍ肞9 +8öÓO?1uêTÒÓÓñûýiqqq³cbb ݵXDRD¤ŽeYçGFFöž5kÖ^ŸÏ·îøñãëûô鳪e8KQJ5AçPôEçT$£½ Ï‹Èá0ÙT¸øî4x\DŽ„Ã&ƒÁ#@ C(æ£EH-`0@)5]Åf¶ˆìÊ4_ «$ãB:¡gÎûŠ‹Ìу‰ê©©©áXÓ§Oç‡t¿°˜˜˜>øàÌÖ­[El÷Çq¦._¾<éÒK/=/\hÛvSÇqºøýþæèS_ƒá¬ÂKæ~ëáCoò'OeûL(i»®^ê{C €{Ddu¸l2 ¹cˆÁ`Å÷€ßû³ŸW]€ñJ©çEä1o<‹‚%¡¿‚½=‚‚Àï÷“žžŽÏçË’÷±oß>ÆÇÖ­[¸ð ×>ñÄ_—/_>½ï.¶m/¼òÊ+¿Üë®»`«÷5ûË/¿¬¢”ªPÈ5 †Ó /4ñ.à1t27èÊV÷‡s“¯”j„½½¡À_Edr¸l2 'ǃÁ/Œ¡6º´nöÏå}ÍA7ñ rJÐ3'¡¿2{@‚ÏŒˆˆ -- Û¶QJ±víZ‚Ï+¯¼ò»»îºkiaß]DÒÇù°wïÞ«r›Ó«W¯}À¾Â®e0œxU¤†¢Ã­ªyÃ?£+[- £]QÀhtnG$¼üMDLYmƒ¡”cˆÁ`@)U è\N&-“ËÔãhñÑOD2{8õ$ôà-ËÊð€d¯†ô„Ì™3‡ÿüç?¸®K… Ýwß}Ÿµk×nO¡°ÏqœÉ×]w]Q<Ë`8­Qº2D_ày ¡7¼]Ùêãp&s{áV¯u½¡oÑáVëÂe“Á`(F€ g)J©H 'ºRLN„\ü]9æbôé"@ ð!0LD²÷ØH2ò4‚ä×’Ùs’½·‡R ¿ßÏÑ£G™8q"Ë–- aÆ›ž|òÉÙ•+W.ŠJ;k“’’>¸ùæ›óUº×`8“QJuGç8]ì íD{<'ŠH Œv]€·ºÒÚŽöx˜p+ƒá4Ãá,Ã+›9¸¨”éÒÀGÀ—"²A) ëå§ ›w !>–ìÙ³‡+VТE‹Œ  à –ÚÍ\~wëÖ­¼ùæ›ìÝ»˲ÜN:ýüàƒþhÛv¡Na•R®ˆ|Û»w﹘ŠV†³¥Ô…è&‚7{CÇ€7gÃÖ¤”*<Œî¬öľ¼ ")á²Ë`0œ:Ê”Ä6Î|”RèªV—dº´-,&ŠÈoÙî±€#hÈ+"2:çÛèÓÈÑÑÑ 2„¡C‡rî¹çâºnFòxnv‡ 6àóé3‘@ rõÓO?ñÎ;ï––FTTÔ±Q£F}Þ­[·?ŠàÇ’ ¼ß»wïSêb0œ)(¥ê K×lt>Å$à  [H¢6í©î Ü+"ÿ —]ƒ¡ðb0œÁ(¥*¡KèÞ Ôô†“н=ÞæçâÑÞÿ%ð“ˆ<µZ3ñâ²ý~?={ö$>>žæÍ›ç*<‚ßoذ×uñûýˆ@€O>ù„Ù³gP»víßÿö·¿}Q§N¤BüH‚ìHJJšróÍ7(‚g §%ÞçÃ#À}è¼/A—Ù#"›ÃlÛEè<˼¡À}"òeø¬2 E… ÈRªzS1 Ý t÷ëÀÛ"r0ŸÏ©#"Û °n$0.ÑÈ£cÇŽ 4ˆöíÛ#"Y„‡ëº¤¥¥±iÓ¦ŒR»`ìØ±lÚ´ ¥”\vÙe¿Œ=ú‡Â†\ˆÈ²;v|2bĈ–ë5NK<è(t?`æ·èÊV…®&W”RçÏq€…{ÝY½ÐÍE CéÀƒá B)UxœMÂV¡ã¸'—T¼´¾u#útµMp¼N:ôíÛ—>}ú뺸®Kjj*›7ë× 6ðÖ[oqøða"##:tÖµ×^[á˲f_uÕU?Á³ †ÓïïåMè¦`þµè&‚…Í02l¼ œë Ü%"¿‡Í0ƒÁP,b0œ(¥ª 4Gq¢„îàe™6Ã¥T7à~t£0 **Šnݺqå•WÒ¦MŽ9¶mÛ˜;w.ü1®ëR­Zµ]cÆŒùìüóÏ?RXDäpddä”=z˜Œá¬D)Õø? ÖÚü˜ "NØ ”RÑÞÙ–ÞÐ tžÇ÷á³Ê`0'F€ §1™º*zÃ?¢;W„ëÔ‘…|FC´­Ã8a+çž{.5â?þà?tny›6m–ýõ¯]Yè‘eY›,ËšÚ³gÏ¢È1N+”R—/]½¡ÀsÀ›á® ¥”ª‰¶mºÁéAt¹ß7Â-Š CñbˆÁp¢”òq"†»²7¼xLD¾.âµA œ+Ddqî‘×½ke€…h/Ç1t“B¶G8@â°mÁ‚¾ÔÔÔ*@U×u«j–eUUJUFŸö®PJÍèÕ«WjQ¯m0”F¼.áw£7ó1Þð"t/°'q+¥¢ÐÂèQôçE:ð𸈺À„Á`8=1Ä`(Å(¥Ú8®°®°¢˜ÖSÀ¿Ñ§¨‚»z3Ûœ ÐaÑ„“úQD. 1^œ¨„„Ÿéía8[ð&†O5¼áÕÀÓá.© Ÿ%ýÑ%kyóûEä·°f0JF€ ¥ïÔðèf‚:\áà½â Wð6 ¯¡OS] ND&å2÷´'$2Û¥$ôc|ëD—ŠKH g*™zy<4ô†·zß'ŠHØ .(¥bÑyj½¡Mè0ÎÏÃg•Á`(Mb0”2”R—¡½xCwˆÈb\So C½`¸ˆ¼›Çüt|y§l— ¦ˆäš¡”zÝ)}'Ð@DL¸”Á¼î‹¼¡}èÆ}¯”†.áJ©JhÌ]èÈdtÞÚ á.ùk0J¾“O1 %çõx½9·ÐôQ"òY1¯k‰À´€*"Sò˜ |‚o8øYòËIÄGàAïÛ;ø0NŽRªº_Foè :´é596Ã<2u1 ¨â Ý6à C©Åƒ¡ ”êLê¡s/ÞFw’¦'>&ƒÐâc°ˆLÍc~ut÷Eè$ô¾À•èž$‚.÷™Û½çï£ÅÕX™YD¯a0œ‘(¥.D{nö†’Ñ¡Mÿ‘ƒá²+3J©¶h›.õ†Ö£ Wi?"ƒÁpfaB° †0â5ü›÷e£c¹ãEdn ­=¸ݤìVùOó_€=@oYæ…o} \O.Õ¯¼9Ÿ×k¶"’\įd0œx=uþ܆ìéè°Ì§EdW8m ¢”ªö»˜B‹¥7E$Ç­ƒÁ`< C¸PJÕC €ÞÐ$à^9VkûéÀè¦}7ç• ª”j̪[€«Dd#€ˆˆRª?ðP¥wïB‹T ¿CN”RµÇÑÕ­üh¯âttÉÚMá´-H.eÁßCÿý7½w C¾0ƒ! (¥ú @%à:×ãýZÛ|ܤ7ŠÈ—yÌïÌ@o6–Wd£¡”j†.Û[-°^/„ùÇRª*0¸(ã ÏB åa3,ÞgÁkÀ…ÞÐt©îŸÃg•Á`81Ä`(A¼î7€ÁÞÐÀ€’JÔÌ&>Ž}òŠÕVJ @çˆøoÑb%ßy)J©Hà 0¶e>t @)<„.·í /‘ÃeWv¼°ç9‘‹²x’RRö×`0œ~˜,ƒ¡„PJ5F{š¡¾_BŸp–HóœLF7?ü?ÓÅÜ`05Æb0J©Ë€šÀa`ˆˆ|ZÂ6s>‚â#/ÏGeàs =„Îɵ2ÖIx->’€Ûø0œ(¥zÿÄzC¢s¢^-Mú<º˜ß#"[Ãe—Á`8³1ƒ¡ˆQJ݆®UÝøFYWÂ6dn2˜êÙ2 Êk08}B»]fwñ)®ÛXDq"2áTžc0œ®(¥®B÷Èhë @ ‘×E$)l†…ÀI¯Í½¡_¿ˆÈ¼ðYe0ÎŒ1Šï$ñàaoèCtS‰n:<ÏÇ»Àíœð|„¬¬£”j |ÔBǤ_%"NqÝŠè«ÀG"rË©<Ç`8QJužºzCIè’Û/ˆÈ¡pÙ ¥T#à9N”Õ=€M¦‹¹Á`(L–ÁPxùï×£ó=^þZÒ5ò=ÏÇ{@?´çã&™•ËÜ6hÏGe`%Z|ì.ÄòcÑâc _ˆç § ^s¾¿—yCÉèRµÿ‘}a3,J©òÀßÐ}G"ѹ^c¿‹ÈÁpÚf0Î.Œ1 ‰Rª6ðpº³xü©$oÁœ~œð|ä&>:¡ã¼ƒÝͯ‘ý…X{н¡¹]DŸê³ †Ó¥ÔåháÑÉ:ŒC «r—¼ÂÕ½áoÑáV«Ãf˜Á`8k1Ä`(^ØÅ tòætgñ%a°ÃBçä'á¼0Ýyù;àZ9Zˆµ[/{ߎ‘ŸOõYCiG)Õ-<ºxC)èÒÕÿ‘]a3,”R—ÿF˜Øˆ.«ûQø¬2 g;&Ä`8E”R7¢½Ë+€ëEä÷0Ø¡Ðaw ;¬÷‘s™{ðÚæYèjWÇ ±v9´¥‰÷¼kKS35ƒ¡¨PJuÆ×xCiÀ;è^9;ÂeWn(¥j¡ûŒ @÷ã9†>(x^DRÃi›Á`0ˆÁp (¥îG—­´€A…ÙÈÂ…î/ó·£7L>`:ÚæôBšðZ|ü 6âÃp¦¡”jü•œÂãù#\vå†R* ¸ë ¸è¼°‡K[h˜Á`8{1Ä`(Þ†ÿtgs€×€ûK:Ù</w¡7CDdZ¨IJ©{ÐÝ0UØîËJ©aè¸òpkarH †Ò†Rªð'„G:Z¸?%"[ÂfX.xŸM·¡?êxÃß¡óQJE¢O>oEWºzZDž £=Ï¢…wæ–ø®”z½)xÝ`¬Pž ¥T3´çàqYT˜ç ¥¥Ô¥hïAváñwÙ6ÃòÀËóø'*qýOSŒWÒ`0”FLˆÁ”R•€ÿ OÓ€¡"ò~íy x->î‘·BÌÉî­yJDþ^k—~Z_½Ãè2Š¥ÔeèM{/o(ÝOçÙÒÚ\)Uýwüf´wó(:ïã•ÒÔmÝ`0²c< ÃIPJÕ¾š‡Ð]Åç‡ÑžÐâà‘<ÄÇ+èzÿ‚Žÿ~9û¼Sä ´øØƒû2âÃpÚâU²{„œ§EdSØ Ë¯ïÐCh»Ëp"Ïct!{ù C‰`ˆÁJ©èNá Ða ½Eä×0Ús'JÞþUDþ/ÄH† ÓG‰Èø"Zÿ`8zÃ3 ¸ÙQJ]Œþ…b»)Ík(m(¥z »ËÓ¦¡+Ä=#"ÃfXxå¶ V󆿑•a3Ì`0 ˆ C.(¥š¢ÅG-àÀáŒWJÅ¡½OˆÈó!æDï7¡“Ç‹Èä"Zÿ´°½I››ér<02—[?D7G4Šç¼xhë §¢C­JeU« ž`zhé m@ç_™~ƒá´Ãƒ!J©6À—À¹ÀZ´øØF{† è8ïçDä™s¢Ðy*=Ñ›ªÛDä?E´~9t¹áòÀ| Çúý€ÙÆLéOCXñ¼‚ýÐåt›yÃGÑe¤ÿUšËÓzÂÿtžè¿_/¢ó<ÒÂf˜Á`0#@ g^˜Â>Ÿï  8Žóða~ûtxŽ?*‹^á,1«”º™âãey,Äœ ÀltœcÀuEœ§ò&ÐØ½Ê­„ïBƒn(-(¥üè¥1ÀùÞð!tùìWE$»X.5(¥ª CÄâÐÿV§¢+Ï=+"‡Âi›Á`0+Ü E‰Rʲm{Jddä+íÚµëÓ¶mۛʔ)“`Ûöÿ¼ºþ'»ÿ:`Z||\fñq0°Ñ%€1§ºÕeÀA GQŠ¥Ô(`0:¤ë–pz‚ †ü ”ŠPJ B{/'¢ÅÇŸÀßú"òdq‹¥T”RêÞˆˆˆß-Ërü~ÿ/Wêd÷•UJ6¢ŒúÐÞÇ Eäa#> Ù€)Ãk8cðÄÇ$¿ßÛÈ‘#ýÕ«W 0{ölççŸ("Ós¹¿/:Âö€ô g)K¥Ttõ­rÀ'ž=N¶9Ñ‚©úd÷ YR€5úýþw\׽ȶíÃ@`ºëº¯‰È6ïz[à{ èú¯\ž3ò2PH–Ó̆ÉPRx¡‚qh¡^ËÞˉP«#%`Cyà.Û¶‰ŒŒŒêÚµkD­ZµX²d‰³råJÇuÝDdvˆû,tîÖ‹@=ox)ð€ˆ,,n» ƒ¡$1ÄpF ”R–e÷ûýGŽQ£Fs~þùg>ûì3WD‰ÈÔl÷÷C—±ô¡=C Û)¼0x9(ߢ=1Ÿ7‰Hz¶9ÑžKýhÏG¾;+¥Ù¶ýc£F*uèÐÁwäÈ~ùå—Ô;w:®ëގ¨d}rkj–I€¤£cëÏñ.íúŠÈ‚üÚe0¥Ô¹À]ÞWoxz3?±$”Rç÷Ú¶ý`TT”¿[·n‘mÚ´Áç;é>Þ_»ví\ç.Y²„3f8"'"ïx÷gøpö¶PJ5¢ËlÎG—þMÉ6'³ø8ô, ç£mÛ?^pÁ•û÷ïï³máûï¿—9s戈¬Coˆ6mDäpÏ» }Ò¼BD\Ͼû'€ÃÀ"²7¿ö ùA)Uý{6í)½y'"©%`C5à!˲îªX±¢Õ½{÷ÈØØX‚§2#"$$$¤ýñÇsÒÓÓ¯÷<Œÿ.÷¦Ì_5 ÙŒëW@G IDAT †ÓO|¼nÛöˆøøx:uNz'BDDîBoÞ§ ÅÇ`D˜ÅÇyè§ó€ÿ¢½G³ÍÉ.>®‘¥Yöí4hPuРAþÌ'´A~ýõW¦M›†çu¹TD–Ÿâû¼>•~XD^:•g ÙQJµnãD1•è2Õï‹H l8ϲ¬‡•+W–®]»FÆÆÆbYy§VîÚµ‹×_]Ddp5º¸D0xÒ„, †³SËpZcYÖ mÚ´Áï÷«>øàMO€+`”R­"""¦)¥VÕ¬Yó¦áÇ[wÞyg®â#--õë׳yóf´ƒ#'çwuëÖM³mûÆâ´Ý`0J+Æb8í°mû–e=ÊóqèÐ!Þ{ï=vìÐf*UªÄàÁƒ©V­Z®Ïóò\LL/)”RÀ, :‰»³ˆlÈ6'v•Y|üZ€5ªÚ¶½¨V­Zç ><"""¢ÀvþöÛoLž<Ùqç"òT¶ç7@WÀšü&"iJ©ªÀ_€GÑå/‘}^ØpÖáýîÜÜɉjj{ÐÍß‘ƒ%dÇe>Ÿï Çq®hܸq {÷îy†y:tˆï¾ûŽ¥K—¢”"--Úµk3bÄü~Žù›7of„ Žˆ42áWƒálÃÃi…RêIÛ¶ÿ6tèP_Æ ³\;pà 4jÔˆ«¯¾šC‡1uêTlÛæ/ùKž1ÚK—.eÆŒé®ë¶‘eÅýZò>Ð]ºöòìùE >ªø|¾E5jÔ¨—C|ìÚµ‹åË—cÛ6—^z)111¹>kãÆ¼ûˆ¼ì8Î#™Öh½1‚>¥.\ݼð‡üÚl8;QJ5A‹ÖÁ@ox#ð0¹¤ªB)¥:úýþ'@Æ;={öôÕ¬Y3Ï{¾ûî;¾ùæš4iB—.]¨S§›7ofÒ¤ItéÒ…+®¸"ä}o¾ùfêÎ;'9Ž3ª8ÞÅ`0J+&ËpÚ`ÛößlÛ~|ðàÁ9ÄÇÁƒ?~örŠâ£fÍš!ÅÇâÅ‹;v,›7oæçŸæÕW_eçÎÜ›œŸþù <ØVJ= ”º#Ó¥µ@à!àutRí«À ‘†¼PJuTJ}Žþ=‰ËÐB¤©ˆ$·øPšký~ÿr˲¾kÖ¬Y·ûï¿_ 2$Wñ±{÷n¦OŸÎöíÛ©Zµ*ŽãбcG‚^’† Ò´iSÖ­[—ëºÝºu‹‘8¯…Á`0œ5˜*X†ÓÛ¶ž4h}þùç績ÿ~Ž;Æ‘#Gp'£ùW Àï÷S±bÅ“®Ñ©S'{ÅŠÝ•RU‹»g…Rê1ôi¯ ‘¯²]?øh?é."k ðüÊ>ŸoaõêÕë6,‡øøé§Ÿøê«¯2d 6䨱c$$$ðÉ'ŸpÏ=¹§ÃœþùôíÛ×÷ᇾ¡”úED–{ ò¾ †“âu,Ü 4ñ†]`&ðJIuþ&¸ûýþçÇizÑE©îÝ»[y}^lß¾ùóçóÛo¿Ñ²eK¢¢¢¨]»65jÔ`þüù z¢ÖBzz:‘‘‘¹>«iÓ¦T«VÍÙ»wïƒè²ÂƒÁpV`< †RmÛÿ8p Ý¸qã,×>Ì´iÓ¨S§ƒ bÓ¦M¼÷Þ{>ÌìÙ³éÖ­[ÈììT©RtiÏ*'™Z(”Rƒ€g¼o‘²]/‡Nºmö|ô( ø8Ççó}WµjÕúqqqÙ7@‹/æóÏ?§ÿþ=IÑÑÑtèÐ={öäš8$66– /¼PlÛþk~m2@—šVJ=…îR>->Ž @3¹¡$ćRʯ”ê÷û·øýþíÚµk6fÌûÆoÌU|üïÿcâĉŒ;Û¶¹ÿþû¹å–[¨\¹2J)ºvíÊo¿ýÆŽ;HIIaÖ¬YlÚ´‰ž={æiK·nÝ";•RŠáU ƒ¡Tb< †RmÛ÷/ 0ÀnÒ¤I–kGŽaüøñÔªU ¿ß âÝwßeòäÉß‚*UªœŸC|8ŽCÕªU‰ˆˆ`Á‚Ô«W wd×®]œwÞy'm¤жm[ߺuë®Í¯]†³¥ÔÅÀ}dm¸Ýçí’j¾ç}¸Õï÷ÿ¨Þ¡CçÎ‰ŠŠÊõžß~ûùóç³cÇÚ¶mËîÝ»)S¦ •+WÎ2¯yóæT©R…>ø€#GŽP½zuî¾ûnªW¯ž§MÍš5#22Ò:~üøuÀ{…KƒÁ`(ýˆ¡Ô¢”º[D^êß¿¿½äåÑ£GILL¤Fôë×/cÓܰaC† ¶mÛ8~ü8×_}¾„mܸ‘éÓ§;J©GEäÏbzŸöÀtô,ADžÈvÝ|t޽ (>*ú|¾ùçž{îñññeÊ”Ér}éÒ¥Œ;–:uê0|øpvíÚÅĉIMMeÙ²e¬X±‚믿>_kEGGãºn¤RÊbœ(¥Z(¥ž‹ŒŒ\±T)uƒÊoç¼S_3B)u³RêG` 0ý»¿¸]íŸ%!>¼’¾Ú¶½³lÙ²ã»wï^ç±Çó_uÕU!Ňˆ°fÍÞxã Þÿ}êÖ­ËèÑ£¹öÚkéÔ©Ë—/çС¬f[–E—.]Ø·o½zõâŽ;î8©øÞwá…úlÛî]d/l0 ¥SËP*QJ WJ%ôë×ÏjÕªU–kÇŽcüøñ$''óðê¬ìÖ­[™4iµk×fðàÁ!çdž;a„€ëºÏ9Žód‘¿ •¢1ÀÐIçN¦ë0¸H®,Hò¶Rª‚Ïç›wÎ9ç´9rdDöMÕòåË™1cýû÷'(æþøã&NœHtt4‡bÀ€dq …ˆ0mÚ4gýúõkÓÒÒZæ×FCÉ¢”ªÜæ÷û‡¦§§7ª]»vjllläÑ£GeÑ¢EŽëºÿÊ\ͬ×­†N&wàÇѧû¯$œ°l) ³mû‰ˆˆˆè.]ºDtèÐ!×LaýúõÌ;—ýû÷Ó®];²{HÒÒÒxñÅiÕª×^›Õ è8/¿ü2uëÖ¥_¿~ù¶sîܹ,\¸p^ZZZ÷SzQƒÁ`8Í0§—†R‡Rj˜R*á–[nÉ!>’’’HLL¤lÙ²8p€éÓ§Ó¿²7Ö«W¯Æ cÒ¤I¼óÎ; 2$¤Ù¶m[P|¼VŒâ£ºks ºÛyÿlâC¡ãáoÒÑ⤠â#Úçó}S©R¥æ#FŒÈ!>V®\ÉŒ3¸õÖ[ÉìIª]»6qqqL˜0sÎ9‡óÎ;ï¤k‰ü±³víÚcŽãÜš_ %ƒ·ù¿Åï÷.ªR¥JjëÖ­Ë´jÕŠJ•*ãñT“&M|ãÇP)µDD>*¢µÛw¡ƒký¼ Œ‘¼KÑ!J©*Àý¶mßmwïÞ=²uëÖØ¶r¾ã8,_¾œ °ÿ~Ê—/Ϙ1cB&GDDСC,X@×®])_¾|Æ5Û¶éܹ3Ÿþ9=zôȦ•GŽq\×5}r ÃYƒ Á2”*”RC”Rão¾ùf+666˵ øˆ‰‰!..ŽfI:ÏNݺu6l»víâ×_sV¯Í$>Þp§X*Ðx'°_µ5@Ÿ%E_@Ÿ;À@™]€çGù|¾9åË—,W®\–ë«V­âÃ?¤J•*„ªV³fMâââ8v쉉‰$''纖ˆðé§Ÿº+W®Lq§{AÂà ŇRª¢Rjß”ÚýmÛ¶m}Ï=÷¨x L×®]©T©R–{êÕ«G—.]l¿ßÿ‚ç};ÕµË)¥â•RK€ÿ¢KçF¢+¢Ý 4‘JJ|(¥jÙ¶ýo˲¶W®\ù›nº)jôèÑ‘mÛ¶ÍU|®B7äk/"Û²Íùº"–#D$±Ï/ëóù¾*_¾ü¥£FŠÈ| °zõj>øà:wîÌ¢E‹¨Y³f®ž Ý»w“˜˜HÅŠ>|xޏxaæÌ™î’%KŽ;ŽÓUD–ä×NCÑ£”*ôöù|ƒ]×í)±±±þØØXU§N|å=%''óÜsÏǹND¾,àúÍ;н^‚e£RÐ9LoŠÈ öF…Ƕí§EdLµjÕœîÝ»G6kÖ,ϟòeËøý÷ß¹þúëYµjÍ›7Ï)cÇŽÅçó1bĈ\ïÿꫯøé§Ÿ=ztŽ¿/Áæž-[†ŽP6lØÀ·ß~›ºcÇŸRêe×uó²Á`8K0ÄP*ð’U§]ýõö¥—^šåÚñãÇILL$**ŠAƒå›7ofòäÉœwÞy!¯ggçμýöÛé@`œã8÷ùËx(¥ÞîDçtt‘_²]¿xÍûö/"òjžéóù¾ˆŽŽî4jÔ¨ÈìkíÚµL›6›nº‰ØØX~ÿýw&MšDµjÕ:thÈÐ’={ö0mÚ4n»í6ªU«–1."|þùçÎ/¿ü’êºnWYœ_; E‡ç©è`Ûö­À ˲Ê4kÖLµlÙÒ׸qã\OøóbêÔ©uëÖ}úçcýHà:`Ð]É t·ò À„â*àÛnðù|ôïßßߤI“| °¥K—òÉ'Ÿpß}÷eù}ý÷gÊ”)Œ9’zõê…¼?))‰_|‘N:Ñ£G|ÙLnŸ;wnêÞ½{m¥Ô×u_‘­ùz€Á`0œ!b;J©¾J©é×]wÝ®]»,×RRR˜8q"¶m3tèÐ\“É·nÝÊ;ï¼C5òœ·sçNÒÀÇqâŠëÄQ)5xVu“ˆÌÌv} ð: òIyºÏްmû󨨨®wÞygDLLL–ëëׯgêÔ©Üpà ´nÝ:c|ûöíLœ8‘ªU«2tèP²WɽAʾy›={¶»hÑ¢×usˆ¨ÓoC)ºßJM`7ð+°PDòn†R‚(¥šƒlÛŽ‘Š5rZµjѼyó<‹+䇵k×2uêÔã®ëž+"!ãï”R€8`'zä8À—èŽ÷߆ûäÞçó½ÑEÝrÓM7…TaŽãähy%Œ‹¯½ö*TÈÒX0;_|ñË–-ãÑGÍóÿ…뺬\¹’o¿ý6õàÁƒc]×}IDvæÿ- ƒáÌÁCXQJݨ”úðÚk¯µÛ·oŸåZjj*'NdÇŽ<øàƒ9âØ³!5kÖdذa9ÓwíÚô|LugX1Š[€ihqq¯ˆ¼žízà#tˆ×E$ß^O|ÌŒŠŠê6jÔ¨ˆì?“72eÊ®¾új²{’@ ° &2Ô*;sæÌ‘ï¿ÿ>ÍuÝž%Õº$ðúR|†ÙYŒÎÕ ÛæP)u!p‹mÛC\×=¯víÚémÚ´‰hÙ²eHᘰaÃöìÙCLL íÛ·éõr‡gžy&-55u ˆ|˜i}¸Ý»ãjNx;v «Y½)"Û ÿ¦ECDDļÎ;_ʱvíZfΜÉ<ãgðóÏ?óùçŸóÀäH_¹r%Ó§Oç®»î¢víÚ!×=räû÷ï§~ýú!¯;ŽÃÊ•+ùæ›oR=*"2ÞuÝçDd÷)¾ªÁ`0œ˜$tCØPJõ¶,ëƒk®¹&¤ø˜4i"BTTï¾û.ÇŽËóyõêÕcèСԭ[7ÇiçîÝ»ƒâã}Çq†£øè¼‹þ»õrñѽ@ÞEoðòûl¿mÛŸžL|ôîÝ;¤ø€Iç‡f„ y&õÕWòý÷ß§»®{å™$><ª¢KÃÞ\”.>Ú¢d‰¢”ª£”º/22r°¦råÊc®¸âŠºcÆŒQwÞygÄ%—\rRñ±xñbÞzë-^~ùe~ýõWRSS™?>o¿ývÈ÷¶mÓ¼ysŸÏçìÙPS)õ°ø¸Ÿ4Ý»£žˆÒkU§N’““ùé§Ÿr\«X±""2a¼E‹œ{î¹,X° ×u+T¨R|¤§§³hÑ"žþù´3f9tèÐ3ŽãTwç^#> ƒÁx@ aB)u•Rêóž={Ú]»vÍó“žžÎ;ï¼C `ذa=z”ñãÇI\\\Ž„ò“±oß>Þzë­´´´´ÇR\á5^¨ÊÏ@eàà–Ìk)¥Ú¡7råÐɺYÊñžäÙ~Û¶g”-[¶ç¨Q£"Î9çœ,×7oÞÌ»ï¾Kdd$wÝuÙò²³k×.&L˜@ÕªUC&Ú~ýõ×òÝwߥ»®{•ˆÌϧJ©rÀñì¿ ^3ȵ@#ôf{[¨û‹ÐŽs€kü~|zzúeçœsÎñ‹.º(*66–sÏ=÷¤÷§¤¤°fÍÖ­[Çm·ÝÆŒ3ذaùË_ˆŽŽ`Ë–-Œ?žÛn»-dRôæÍ›™0a‚+"sѹAõ¾ Û1^Dr/ U PJ ,S¦Lâã?lJš™™3g²zõjFÏçcݺuÌŸ?Ÿ}ûöQ«V-¶mÛÆÃ?LÅŠ³Ü—WžH(ÒÒÒX¼x1óæÍKKKK;þ üKDŽÕ» Ù€éb(q”RWZ–õY=rˆЛcÉH–ŽŒŒ$>>žÄÄD $BöíÛǸqãÒÒÒÒ>wgh1ŠŠèžÊh20›øhŒ®ˆU;?°âömûý2eÊ\qÇwä[¶laòäÉtîÜ™åË—“@|||ž!k5jÔ ..Ž´´´×¾ùæ› øèu&ŠIÊe<])µ-@ªE.@”Rek|>ßp¥T¨¨¨ôV­Z•iÑ¢õêÕË;&¬_¿ž+V°aÃ*V¬Hll,@€V­Z±lÙ2Ž=š!@4h@™2eصkWHÒ A¢¢¢¬¤¤¤žœðv¼ Ì‘ô"}ùâcfZZÚø5kÖТE‹»téÂâÅ‹ùÏþî]»8|ø0:t`èСø|>^|ñE.\˜£±`ll,óçÏgÛ¶my ääd-ZÄ?üîºîŸ@à`¢ˆ¤õ‹ Ù€ñ€J¥Ô–eÍêÞ½»¯[·n9<sæÌ¡{÷î!söïßObb">Ÿ¸¸¸§•ÙùóÏ?7n\ZJJÊ,Çqn‘œÍBŠ/^þ3 7°¸$s˜…×mp>°¸\DòŽ'Ëôl۶߈ˆèsÇwDT­Z5ËõmÛ¶1qâDºuëF—.]8|ø0‰‰‰¤§§ŸïFhA.\(_}õ•ãºîõéGr¦à%¦¯êUEäP=7èiÛö­"r“ßï·š6mj_|ñÅVÆ OZµÉu]6mÚÄÊ•+Y³f iiiDEE1dÈ,ù ®ëòüóÏÓºukzõêèðÃ×^{¾}ûf)J™/¾ø‚ÿþ÷¿ÛÓÓÓ»‰È¦¢xç’Æ¶íW*W®|×ý÷ßïõóüøãYºt)=zô cÇŽYòAæÍ›Ç‚ =zt†p rä“IJJâ§Ÿ~’ï¿ÿÞq]wO ø?`œƒÁ7&ÄPh¼¸ñž ¯y=,Ëú¢[·n9ÄÀáÇYµj‰‰‰$%å< ®\¹2#FŒÀqÆÏ¡C¹ï 3‰ÙÅ)><žG‹ãèŠW™ÅG4Úãq>° è]@ññ^nâCD°m›+¯¼’.]º:¦=>>žˆˆÆÏŸæ¿*ê÷ß/sæÌq\×ís6ŠGÑÿ¯^/¬øPJYJ©Ž>Ÿï Û¶÷Ú¶=£iÓ¦· 0 òñÇ÷÷ë×ÏjÔ¨Q®âCDضmŸ}öÏ?ÿ<Ó§ODz,È­·ÞJRReË–ÍreY´hÑ‚U«V±sçNfϞ͸qãhÑ¢Ù{f¦U«V¤§§×FÿŸV(¥Ê+¥îu]·Ïþýûý6l9ïòË/Dz,*T¨#½C‡ض²±`(ñqèÐ!>ûì3÷ùçŸw.\¸)--mx ¨+"¯ña0 'Çx@ §„WF¶?Ы?,"/å2¿£eYßtíÚ5òŠ+®Èõ¸wïÞ½=?ââârœF‚þÇüøñˆ£F"{¾C‡1vìØÔäää¯Çé[œa$ÞÏa2:t¥¿ˆLÏtÍöŒ\ü \&"¿åó¹–mÛ“ý~ÿ-wÜq‡?{øÇöíÛ™9s& é :zô(‰‰‰¤¤¤G•*UrÌÉÌ?ü ³gÏvDäFùK§NèÞ½{–û·mÛÆ¸qãðûý\pÁ´oßž œtÝ^x!åðáËȧòÞ%Rª>0Ý—¤’7–V£F ûž{î YŽwÚ´iüñÇ<øàƒdÏ &›wíÚ5×5<È?üàüòË/X–õ[zzú“ÀÇá.Cl0 §F€N ¥Ôèòœ+Ð=:“‹QJ]fYÖÜ:D\}õÕ'õºíÛ·ÄÄDÊ”)C\\\Ú[²hÑ"®ºêª,‰C‡ñÖ[o¥%''®-ÎÓH¯”ë÷@Yày"Ó5L†ÇÐaWùê®´ë#Áï÷9rdDõêÕsÌ9t艉‰8ŽÃˆ#Bæ{;vŒ &pìØ1âââra_´h‘Ìš5ËõÄÇgù±ñLÃ+ð5ºid }Œž÷3Îõûý_‹êׯŸÞºuëˆfÍšå«lnjj*?þø#+W®äÏ?ÿ¤R¥J8p€G}4äï?ÀG}ÄüÁý÷ߟe\DxñÅ¹à‚ èÓ§O¾íÿôÓOeÉ’%3@ß|ß”RÑÕË®çDÂü:tO’J©5Ç·6l˜ãÞ`8ÚÍ7ßÌE]”ï5÷ìÙ +W®´lÛ^ž9[…ºÁ`0&ËpªÜ T‘Žè†z!QJ]bYÖÜŽ;æŽãžžÓ9Q±bEbbbØ·oãÇçèÑ£!çôîÝ;‡ø;vlZrrò¼@ pM1‹Zè¤ò²À§ÀSÙ¦ü->èjXù–e½eÛöุ¸â &&†¸¸8,ËbüøñxÍͲÍðáÃ‰ŽŽÎ¨*–Å‹ã‰ÛÏbñÑ&wݱ¾ÀâÀ²¬Ç+W®ÜüÑGUñññ_|ñIÅÇŠ+øá‡°,‹­[·Ò®];ÆŒðaÃ6oÞœë½-[¶dïÞ½ìÜ™µ]‰RŠØØXV¯^ãä«ÎµjÕR¶m_œïJ¥T¤Rj Rj)ðp#ú߯¯€^@3y[D6X–õþ·ß~›³ºP½zuš4i‚ ÈÏáÛ®]»øàƒÒ_}õUY½zõr陞ž~‰ƒÁP8Œ1œ"²'?Uœü~ÿä‹/¾8¢W¯^9~×f̘Á¤I“²Tb –àî¾ûnÒÓÓIHHàÈ‘¼«X>|˜qãÆ¥?~ü»@ ÐGDBn@Š¥T´è¨¬"gÅ«¾@°³ù½"òe>Ÿ«,Ëëóù†ÅÇÇûkÕª•çü˜˜˜Œº ¹Š¸¸8úöí›#–Ý« äˆÈù ?6ži(¥Z¢=½Ddm!ž5ôòË/(H™è½{÷2þ|,ËbèС´k׎råÊQ©R%êÔ©ÃÊ•+s½÷üóÏ':::äœV­Z‘””ĦMùÏ'÷6䥪ꕗ_öº¸Ãdt×úT` ÐRD®‘9™C Ãø_X IDATÇyzëÖ­¾mÛB0ëÑ£íÛ·ÏS€lݺ•I“&¥½þúë²zõêy"ÒÎßáë ÃY‹ †bÅqœº±±±!ÏÚ·oÏîÝ»™8q"©©©¤§§óî»ï’’’Â!C¨Y³&#GŽÄu]Ærƒ ºñ¸qãÒ’’’ëJ ôßèÜ—?ë3'•{¡<“9шð­ü>Ô²¬|>ßðøøxöÎË{öìáøñœùÁ ))‰@ ÀÛo¿ÍþýûsÌ)W®ÙÃQ2‰Û3ç­œM(¥š OÐ}À"²¬Ïò9޽Drõë׳fÍšã­Zµ"99™7†¼¶qãÆ\›EZ–EóæÍY¹reŽÍtõêÕ©V­Zž&;[·n ¸®›ÓÈÆKÞ¿J)õZx<‰.‰¼íY¬%"ƒDdu¨ûEd“eYŸÎ›7/ä!DÍš5i×®]ŽÈ© ²yóæy"Ò&==ý*ùo‘½ Á`0Œ1/–e µ)¨]»6C‡eÏž=Lš4‰)S¦püøqâââ2ÊðÆÄÄR*d·â£G2nܸÔcÇŽýâ…]¥çû(¥nC'¾ºÀÙšéZ]´g¤,0x¤Ï­$"Ý~ûí9ćˆðþû˜˜e3ºuëVÞyçzôèÁ½÷Þ›ïÊWK–, ŠÁg±ç£°½±ˆRêâl_yws̆eYé))¡ý~ýõW¾þúëãÕªU£zõê!…BË–-V¯¹Ï´H9|ø0[·nÍq­_¿~9úZ„âÈ‘#ÌŸ?Ÿ+V¨@ ðòIo(&”R•R#€_Ñ!q×¢ÿZ„îÂÞ@Dž‘Ð(™pçé7úwìØqÒuE„uëÖñÆo¤&$$8›7oþDDš^…¥ƒÁ`È#@ ÅJ ˜°hÑ¢T× Ýÿ¯N: >œ½{÷²yófn¿ýö=@bbb9r$×\sM–ñ£GòöÛo§=ztI ¸JDе„¨Rª90Þûöï"òU¦k€/€jÀrtÞGþ𡬈X5jÔµ. Ȩl•””Äï¿ÿÎ;ï¼C×®]éÔ©åË—gĈ”-[–·ß~›={ö„\dÙ²e̘1Ña"2µöitDÿ¿²±èþ,Ù¿:ç÷a"°m{ÕᅦnÞªU+öîÝË®]»²ŒjÔ¨ÁÚµks4…ŒŽŽ¦aÆyz1êÖ­KLLLÈ95jÔÈQ¦7Hrr2‹/fܸq©/¼ð‚ÌŸ?«ç ËY‡¶˜QJµQJMDw^¸8¼\ "E䣂”Ò‘•¶m1kÖ¬´ÜB­\×eåÊ•¼òÊ+©ï½÷^Ú®]»E¤~ ¸ýTó€ ƒÁ?L,C¡QJ EW|ÊQK)UͶí5:tˆéÝ»wÈÒ˜ “='L˜@ÅŠ>|xÈF„™9vìãÆK;|øð²@ ÐãTK¦æ¯ŸÇ¦À·À•Aá5¯ûp°¸TDN~ôšõù‘–eìß¿ÙfÍš…œ,Q\¶lYŽ9Bçιüò˳Ì9vìXFcÂæÍ›g¹¶bÅ >üðCWDâDdRAì;Óð:Ów=É´¯D$ßЕROV¯^ýÑûî»/Gæ¹ëº<÷Üs\|ñÅ\yå•lÙ²…+V°fÍü~?ÇŽ£_¿~´jÕ*Ë}K—.å“O>á‘GɵñææÍ›‰‰‰9iÓÉôôtÖ®]ËòåËÓ7nÜh[–uÐuÝÉ®ëN‘¥ù}Ï¢ÀË£êÜ \’éÒ2´ œ&"¡cÏò¿F˲6\qÅeºvíšQúÛqV¬XÁܹsS9⺮û:\2´j7 C‘cˆ¡Ðä%@¼ë—)¥ôìÙÓμÈN~EHRRo¿ývêÁƒWnùmìW”RÓѦí@kù3Óµg€¿¡«(uÎoÅ«ìØ¶=¶zõêÃï¼óÎÛ­Õ‚•ÁD„ûî»/dŸ×usÄ·¯ZµŠéÓ§»"r‡ˆŒÏq“¡Ðxa]ï¿ÿ~²7˜9s&«V­Â¶mÒÓÓiÖ¬±±±4hЀ„„¢¢¢4hP–{RRRxöÙgéÙ³':u*°M®ë²eË–-[æ¬^½Z\×M‘O]×ýø²˜tæÀó"Æñzw “Ê?ÆŠÈÏE¼Þu–e}ëkÛ¶­µk×.æÏŸŸšœœœæ8ο€×Dä@Q®i0 †“cˆ¡ÐœL€xs®²,ë³nݺùºwٽ{7‰‰‰¹Š””ÒþüóÏ5ééé]E$ïòXE€Rêà5t… ËEdQ¦k}Ñ›'…®†õ^!Ö©jÛö¯mÚ´©Ü§OŸ\½Eþù'‰‰‰DDDÇɪ.­^½š÷ßß‘» ’ÿÿíÝyœ”Õ™÷ÿÏUK7½²6«4‚ Dˆ ¨¨¸Fc$jÌâèd’ø$f2“13OÌo’˜™'q&“8I&“Å\b4š¸ED@eß}§¡Þ»¶óûãÜÕ]½±uwË÷ýzUª»î»ºNUÓ¦¾uÎu.9zyyy+.¿üò\sÍ5-ŽmÚ´‰_ýêWLš4‰Ë/¿¼É®dóæÍã•W^áÁlñoþé§Ÿn¨:éêË—/wK—.×××›™½‘L& ¼Ð™;ĵÆÌŠð5_.É8´¿äê±Ì@ß ?.‰|?‘HLŒD"e‰DâÇø°ÓroÉ Õ€HV8禥R©›gΜŸ6mZ›©·_¿~|á _ gÏž-¶M‡²²²uñxüê,…QÀƒo¿Ñ,|œïbÀµ'|8çö$“É-X° þÊ+¯´^4ôîÝ›/}éK$ }ôÑCnQ¼jÕ*þð‡?$s_Søè|ñxüñ… ¶º [º^£²²²Å¿í‘#G¶Ypþñœ{ï½÷°½{÷nf̘á~øáº_ÿúש ¼U[[û…T*Õ+(¨~6›áÃÌÎ5³‡-ø(.Á7-$g:çþ£3Àsî½à¿¡x<^<¦Â‡ˆHiDÚíHf@2ν" ½6~üøhk½AÚRWWÇ£>Û³gχ‰DbB6–MëÔç#ñŸßšq¬'¾Py(¾ÄGYt~¨Ç½, M;vlþ­·ÞòMÕ[*//çÑG%‰ð÷ÿ÷D£Ñ&Ç׬YÓO>™þ¿d2ùpGŒM-è[±õ+_ùJ¨µ>.Ó¦McáÂ…<øàƒ-–ÉM™2…d2yÄ3à›o.[¶Œ Ô———çE"‘Åñxü)| Åžö>Ÿ£lÆp~¶#³©á:à7Àªµ9&Áv™¿:Ä)ßrÎ}¿û^ …^»ì²Ëòn¼ñÆÃ†úúz}ôÑØîÝ»×áã°Ûpv3{ø`¾éÙîàvÃwA¿ ø_tÞ¡ÈÌÆ†Ãá7/¼ð‚[o½5ÜVÙ¿?7nd̘1Mn_»v-O>ùdÒ9÷íd2ÙêïA:ž™Fg7®ô¦›njq|çÎüô§?åÞ{ï嬳ÎjrlïÞ½µ¹sUZMM +W®dáÂ…õ[·n͇Ãë“Éäï€'s:òù)3‡wé¤zàyüÎq³\'þŸ™å½"`[gïˆ'""í9ü)"­Z üÇ!ŽÏkë€snŽ™]ûöÛo¿æœ+híZZ,cÊ”)±={ölL$—g1|\ü=à€¿mö©íÿŇZà“1ãœ[hfW.Z´hN*•*¼í¶Ûh-„ôèу=z4¹mݺuéðñ]…ÎgfCñ; Ý\ÇmñâÅÜpà -f9ú÷ïßÐ °yéÝ»w›QWWÇêÕ«Y¶lYlݺu‘p8¼'‘H<<žH$>èð'u̬ðYàoó3½Ovöß«™~‚ŸmÉϸ}5~«ìg:óñEDäØ(€È1 :sw`çÜ[fö»wÞyç Î9nºé¦o°c±=öXlçÎ[âñø„Î^+ž,¯š‚¯‘ú_çÜ+Ç®¾|{¿sîÈ[M½ºd2™X²d Î97yòdkk&$íÃ?ä‰'žH:ç¾—L&ÿ½ÇvÊ ¶]‹o”÷qü½´$ðNmmíe›6m qÆ-îë­·¶º{Ys‰D‚uëÖ±lÙ²ØÊ•+CfV‘J¥~šH$ÞîÌ…¶Ïý*ànà“ø¦›àg;^~ ¼‘ű•âwÓz ØŒcD0¾?šYôïw#"r\Ò,É 3»ß-< …b#FŒ°Ûo¿=šŸï?ÄŒÇã<öØc±;vl‹Çã—fsÝxÆ–»kð[îÖ·÷Ã÷)è<îœ;|eð±að0X‡‡_pÁE“'Ons9Ö¦M›xì±Ç©TêûÉdò;5¶S‘™“€—~‡ãÀLà9à/ι²h4úêèÑ£¯½í¶ÛŽj£T*Å–-[X¼xqréÒ¥.•JÅ€’ÉäÈÁ¶¹iÁÃ÷d·,Â×ýÞ9w ã 9çZlØ`f€9Àçܘ–÷‘\R‘¬3³Óño\zãëH~F_ …BCÇŒíÞ½»-_¾!7nä·¿ým"•Jý0™L>Øã:Õ˜Ù@|ظÿ©fqFð¾èeçÜþf÷½#//ïwßüæ7£]º´èKØDzÛÜ¥K—¦–-[–ˆÅb˜ÙKÉdò)`šs®Õ]µ:[°}î'ñK¬&àw{Ø < üÖ9·<c;fVT9çäz,""Ò”ˆdU°³Ô[ø%,óñûêÍ,˜‰D> …º%“ÉÕÉdòAç\YÇV¬Äïlõç܃Çþ_óRŒuέé¤1àƒÎx|WõKs[‚cç‡Ãá è~Çwä¥k2f>~œL&ÿ¥3Æuª0³óh —Òø¦`þwó2ðú¡‚™…£Ñèú & ™4iR«çìܹ“¥K—²dÉ’XUUU8ÏJ$ãgQ:½¹f[ÌìRülÇ@×àæ$>pM^Ìv/‘£ef#åÀKι[r=iJD²ÊÌâºÿF~SnGÔÈÌþø¾oÁ¹Î¹êàö ñË¡òðéS:éñÃÀ³À'€ƒøp¶¼Ù9}#‘Èï“ÉäU ¨+..¯[·. üw2™| 3Æu2 ñx|ภ”q8,ÁŽ—€ÅGSÛ`f3³î¸ãŽÐ\À¾}ûX¶lK–,©ß»wo^4]Ç <›­§6ÆÚ8š”o~üòxú[mÎÌJQà,à> ¸Þ9·.w#‘Ö(€HÖ˜Ù}À/ðŸ¦Þèœ{=ÇCj`fÁ×wD[œs/··Ÿ <㜻³“ßð;}¿»Ö¤Ì¦‡­œ>pp0Û97­3Æu22³>ø×îcÀõ4~ÊPƒ¯çx ÿéy»–ÿ™Ù—B¡Ðÿôïß?‘L&Ý®]» ¢Ñèš tü1=»• Á¬ã-ø‚íëiÜ”¤ø¾°{n.ŠÝVF/¢´ÍÀçœsoåhH""r ’AŸ€Ùø­2Û°0›‚7ÿo—Ï9ç>™qì7øP°ÕY…¶fö#àë@˜ìœ{±3çTdfürªëðo´GÓriUz–cvG×\ŸÎßß¡é%çÜêŽüùÇ0žK‚ñ܉ßA*íü›øgN´NáAÝT)¾Nç\üßÒpà>çÜor84i…ˆt:3ë‹/:„/ðþÄñô©ª™Ý…_fR‰_zµ-¸ýüN]I`bg}šjfßÂ÷ù‚sî±ÎxœS‰™ ¡1p\ tË8œÂ×¥ ÈÛBêŽbfƒÏáƒÇÙ‡¶Oá{vtJ]S.d¾)âÀ-P‰ˆœìÔD:UP×ð;|øXÜ}œ…þÍ?ÀÃá£;ÞéÄðñ•ŒÇ@áãØÅû—ãÇõÀ9ÍNÙƒ/ Ÿ†/ ÏÚæ¹Ô·ÜLË%Vuøðõ9ÜÚ·39çö™ÙLà3øÝ䎹g‘ˆˆt<élãû'T·9ç*r<žæîÁ×wì~–qûñ=8ÖßîŒ6³Ï? ¾ý¶sîÇñ8'+3;¸&¸4¯åHKøåUï´Ö/âdl})~¶ã._“ð6ð$ð‡SdF Op“mŒED¤m ÒiÌìVàŸðK‹þ6×kß›3³< ½ÕîÿK¿)3³ëðÛ¦€Ï;çj;á±?Ž_o~æœû·Ž~Œ“MЗâü§ú·à×ügÚŸåx ˜Ñ¼7ÇÉÌÌΤq‰ÕŒCëh\bµ9cëLA=Ëâæu;fö üÒ»mø­µEDä8¢"ÂÌÎÁÚjÀ:çžÍñZóE|ÏmÀ/¡aÙÊÏñãþ©snnG?¨™] üÿ÷÷ðµŽ~Œ“AðiþøZŽëðŸìG3N©Ão0 xÍ9·*ëƒÌ!3; ¸:2{–žÁÿý½s<-yìÿœofïâw¾*Fâ·ä­þÎ9—ÌáøDD¤*B—¬ÇÿF`&píñö& Øùê|Ï€/;ç~Üþ~ÉÕ6`DG7„ v›/Žý3pÇɸÿX™ÙP—U]ônvÊZ|C¼iÀ¬ÎêF¼ BÙUøÐqPJáÿÖžÂïäV›f—™MÆ/5 ôÂøÂú™Àœsïçpx""Òépfö(ðwø%1£ÛÛK¡3˜ÙÀ, àœ«6³áøsºŸtÎ=×Á9>zÓ›;zË×™õÄ¿¡N‡ŽaÍN©Þ¤q–cCvGx|0³ømsï¡é«÷ñ³SNÆ%V""rrÒ,éPfv'>|¤ðÀŽ»ðø|pý‡ŒO‹†¯vBøƒ=ðýPn=ÃG°ëØ(Ç•4ýïPfñø `Žs.–åa‚†‰wŒÉ8´¿mô“ιE¹›ˆˆH{hD:LP»ßsá»Î¹‡s—œ¶ØÝ9ç˜Ùµø¥=õÀyιõøx£€7€^øfoן"»‡Ý­ `czg5{<#Ü„7ÒXó^Á× ýÕ9ÏÍEDDÚO3 Ò!‚âí©øð1 _z¼º>Vá#ü 8ö?>FâßX÷æq „ ów:p\MË:Ž4ŽÇñ,YÖ˜Ùyø]¬îúfZ/&ŸâœÛ“‹±‰ˆˆt4é(?Fã¾}æx+:oæºàú¥àú3ø%.h "íìö:þ øbও1|˜YüRª‰Áex³S*ñ¡48Ž«í˜sÅÌ·ãë:.È8´x:–æ`h"""JDÚÍÌîÀoi›>ëœÛ‘ã!Î%ÁõL3‹Ò´ú¾Žx3;¿O?` 0édéKÔ&\‰Wâ;MgŠïÒ8Ë1_;}yfÖ øðiüìP88T ü?Û1ý8ð"""í¢i—`ç¨Eø¥W9ç¾›Ûš™ãw¾2ü²¨›Ç]ÀÑt0oýñ¯Í >‚ª.ÇŽ«€óhì9…ão—9½}ñ‰,¨ë¸:nÆ÷ªß óm|]dzιƒ¹¡ˆˆHviDŽYP÷ñ >|ÌN„nÞñož÷ã—\ýßàöwPø8_pÞX\w¢…àSútà˜ˆßµ*”qJ XŽ_V58NÙÂñÖuEðËû>‰ßý,íü.V¿ïÈz#‘…ˆ´Ç#øºÝÀ]'Ȳ‘ôÁýÀdà œ z{»]Múàg&uÔ’®Îdf]Ëh\Ru!KƒÒVág7f³s{³8Ć™]€ŸeڎߤáiçÜâ\ŒMDDäx¡"ÇÄÌ>ÜÇñßô,GpðõÏÚ[ôùx¿¬k~æã¸ f6\\ŸOËÀ±6ÞÄwßÍ1žH‚îíŸ.çf:<‡Ÿí˜åœKå`x"""ÇÕ€ÈQ3³øåE½ð…ÛßÌñŽ˜™õÂ7rKá—b%RçÜövüÌâ;u÷įé¿Ñ9WÑÃm73 #ñAãü² Á­œº8f3O€r*¨‹ù~ëÜ«i¬‰©ÇÏ‚= üÉ9W“›Šˆˆ¿4"G%XÛþŸô'·#::ι}f¶ ( nz±ác¾A\W`ð±\nµÙ£q†ãZ6þKàwæz˜ ¼£ÀqxfV€wã·rN7 Lá_Ëg߯3_"""Ç 9Zà?ñ­Æ÷ûˆåx<ÇâOøçðè±þ3»ßK¤?sps¶w –ÿ\DÓåTÍÿ®â› ¦Ç|ç\u6Çy¢ BÇõø~Ç7°L[€_^5õZ‚(""’s rÄ‚:‡ôNW_uέÉåxÚaaÆ×çà—O3û8ðG  ð2ðIç\}Ç ¯ÍÇŒ>\¥e—q€Í3ÁõJÕ¹ t\ƒ·Òti3þ÷>åþ÷/""’S rD̬xÈžwÎMÉñÚc|Æ×? ú4üב¾I7³{_ãÿ~ž>Ý‘3AÁ2·aøîØçã·Á½ÐÊé1|=Î<|ýÉÛíYRvª ¶¾¿3Úõ4öêØ„ÿ=OuÎ-ÈþèDDDN.*B—#bf¿>lF9çÊs<¤cffâßàÿß•ü›÷uνy˜û~ ¿ý°á»VþX»|›™§ggã‹ÅGŠZ¹KXŸÁYˆ_´ü]—sfÖ¿¬j20 ÈÏ8ü!>tüÉ9·°•»‹ˆˆÈ1R‘à ¶Ü}_l;É973ÇC:ffV‚ïzžÄïZu'ð#—Ù¬þ‚$ï:çÊ‚ûðà_‚ó~ üƒ;ÌPP~:~ç©Áøâ÷³2.mܵß{c)~†c)°D»*µOÆîU·×âgôÒ6à—Ó=‹ŸIÒEDD:ˆRÐ3bþÍú÷sßÊñÚÅÌ&ã‹Ð—:çF· Ä‹{ñå™6;ðÍϾfdvÆ9]€Ó2.=𻄠¤iìÖÄð[à~¼­—ž {fÖ¸:2w¯?£ô,ð’snQ†'""rÊQ‘6Ÿú¿†_ž2çvTícfßÅoü¨sî‹ÍŽã—ä\ßUjꀇ=€_º¶Ø ¬Ã޵À¦c]Â%m ‚ómøåUãiú{\Dãòªu9žˆˆÈ)MEèr(_Ň|·ó:|Jƒë Í[è>\0³Rür¬Qøú‹€Öz<8`?>h¤¯Ëñ3'[²½5ï©ÊÌÎnÁ‡Èq46tÀ»øÐñœsncnF(""" "m0³s€‡ƒoÿÉ9·6—ãé@C‚ëM‡:É̆Å×iìnuÎÍéÜ¡ÉÑ0³¾³ûÍøà1,ãp ¿ñsø]Û¶f„"""Òi!xc÷¾@z:ð«ÜލC¥ÉU´u‚™^úâƒÊι÷;hr8fÖ¿Mî-À 4­±©fâw/ª9 ˆˆÈñIDZó¯øîÚ€¿=ÉvÊ\–Óò ßñëwø ² ¸I}5rËÌΑ ¸œ¦Eäeø«^^W‡w‘㟈4afß ¾½Ï9·-—ãéénå-¶¿ z|ü_°üp»s®2‹c:‘_‰7Ðtiø«^ÂÏt¼«.ï"""'i`f…øì(ð{çÜÔ©3lÆïŠTš¾ÁÌ¢ø¾÷7ýøš¶ÁÍ3Ž7àÃGf@¬ÞÂ×ä¼äœû0ë‘£"™~€ïȽ¸?Çcé,éݯ΃†Âo½›þÙ9÷£í”ly|¾à À™ÍNÙ ¼\ÞÐÒ*‘“‡ú€fv¾€×€ës¯çxHÂÌ®f;ñÅ̆•ø­†_ÈáðNZf.® .€üŒS’ø­r_Âÿ~ŸdµG"""P‘ôÒ«eÀpà×ι/åxHÆÌò½øŽçÕ@¾ùÇs«r9¶“MP<~ ¾—ÌD {³S>ćת·95h –ü>|l¾‘ã±t¶¾ˆù"|ø˜|Ê9WžÓQÌì ü.UWâÇéÍNÙ‡Ÿe›Žj(""r R9Å™ÙeÀ—ñÛÒ~É9×fŒ™u¦àÃGÚ/>Ž™‰WàCÇàf§Ôoãg9Ò˪´c•ˆˆÈ)NK°NaÍ–^ýÊ9wßaîrÂ2³1øbó¡@-þ“ø›€ÝÀÅιM¹ÝñÏÌBÀübéYŽÍN‹ €YÀl`®s®6{£‘È)ÌÌþø~éÕù'ëì‡™Ý üß\p3p;°˜ŒÖW:çvälÇ3; ¸¸Ù¥y G=0x˜ÌsÎÕdsœ"""râQ9E™Ù8à|Ó½ëNÆ]¯‚žŸ÷7½Üãœ;ïï/1 ¿õðmιù9jN;Tƒ—×çàÿmdªÂÏpÌÁÏr¼§9Z § 3‹àßH^<᜻'·#êxfvð`$~‹×¾×¼ÁÌJñ[¿~¿„è¿€ÿw²~’4]ü~ægLp= _ßÜévçdIDAT:üÖ¸ïâÃê 5g‘öR9™Ù·‡ðÛÑžëœ+Ëñ:Œ™~YÙÃø>ÛÏ:çfâ>ÅÀcÀÁMÛ€žÈ ð̬'¾nã|ÇH ¯•Ó«€…ø ñ.ðîÉôïBDDDŽ ÈÌâ?u߬V«‡å*fv6°èÜåœûcއÔa̬~—«›‚›þüsnßÞÿfà§@ipÓàYài|Aõqùé¿™õÎŇóð˧ÎJÚ¸Ë~`1°$¸^ ¬ÓU"""’ ÄÌî~vˆSRø@²HÒ×kœs±Î¡gfž>tÎ},[ÛÙÌìãÀ¯ðoºk¯;ç~y ?'ø¾ÊY‡öoà ®˳(ͬ+>¥/C2.Ǹûf|ß“†°¡þ"""’K À̺ã—ú <˜{ï½—;v°fÍÖ¬YÞ={u÷8~­ýÊà²X¬ï¬O܃7ÙÅG:3p< ^ûÿ¾Ü´?³³¼?7„ßnö³À'€žÍNIàåúà²?cr0¸¤¿Î¬%1à´Œï#@¯àÒ3ãë^@ 70¨•Çn.=Û¶x?¸¬>pÎUáSÉ `f“€×f̘Á„ 8xð ûöí£¦¦†ºº:ªªªØ¹s'+W®dÁ‚¬X±‚òòCö¿«Ã¿‘Ìœ-Ylrú¥`f׿Á¿IOÿü³s®¾ƒ' Œ&—àk)úuäc}øÙŒM׃˺Ž~Î""""E¤¤—_SVæëvs¤R©&ç555TTTPSSCmm-”——³`ÁÞzë-Þÿ}êëù^²ŠÆY’ôõçÜÞN~šÇ ¸ú‡À½øY…€{sïfq ý³ñ[øÃÏXtÇ/‡:-ø:}]ƒï4Ÿv˜Ò_ïÅŒÖ.Ûð¡S3"""rRPéé†~£GfÞ¼yìØ¾;nùwú–œÆGF–2nü9\rÙÙäåEZ’TÊ¿MÏ’ÔÕÕQ]]ÝL–.]Êo¼Áš5kÎmC _@ý×béŽ`f·ãg:úâßÔ?Н÷8aw«9•Dr=€“ęÇ`Ýšíløp={uåÍ™Ëyæs¨8XC4¦Wïnœ>¤çœ7ˆ± gÜeg‘—!‰Ð­[7Š‹‹éÙ³gCØ7n÷ÜsõõõTVVRQQÁÞ½{Yºt)/½ô;wîL!x ¸þZÖ_Nffçà»™_Ü´¸Ï97/gƒ‘£¦Ò1†CcYµb3…ù\ó¸†êêâ”í9ÀÞ=(Û}7g¬äOÍ!K—¥g¯bJ‡•pîyƒ¸pÜ0FŽ:ôªh4J$¡  €Þ½{3lØ0ÆŽË¿øE¢Ñ(K–,ᡇbãÆà· =iHPdþ-üsʪñ=LqÎ%r969z ít ™d§VD}}"ó<ú–ô oIÜÈÆûWWÕ²kç~ö–d_YynS~ýÎAaQ>%%Ý)Ö—Qc†0醑D"!’É$Î9’É$uuuÄãq.¼ðÂt9)ÖÔ…ß|¿Ü |Çò¯:ç6çl`""""Ò. í7ˆœyæ™lÞXF·ž]©®·Ò"ú îC¿Á}%ãIö—WR¾÷ å{+Y÷Ao½ù'K8lM~L*•b×®]8p }Ó!·Ö:˜ÙÇ€ïã»vƒß ìëιi¹•ˆˆˆˆtö;3ýEzdïÞ*ú ìEmݱ¯*>­˜âÓŠ<ªÖ0kÚB ò¨®®¦¦¦†üü| I$˜Yf¯‘•íy2¹dfã®n*Ç÷øx$›ÍEDDD¤ó(€´ß™={ö¤gOß/®ººžÁ…ùÔÔÅ;ä¶oÝÇ Á½_Ò³gOêêê0³†KFYÕ!šEfv ¾ÎãÊà¦jüNWÿáœÛŸ«q‰ˆˆˆHÇSi¿áиüª¼¼ŠP(L$?ŸÚºÖwÃu ÿƒïbÑŠDfF,Ã9Ǿ} MÍOˆt¿ <ÒÕú1àqà»Î¹mÜUDDDDN` í×d¬í[÷F!¥¦.qTá©TŠšƒÕ,« r_%é-Ñh”óF ¼¼œÂ† ²wï^öïßO<Þ0Ûr\/Á2³¾Àß_Jƒ›«ñÍäœÛ𣡉ˆˆˆH(€´_“ 7î!/?Ÿx‡¬ñá"‘HQ_UK}e-u•u ý?"Ñh“³‡ë аüª¾¾žp8̾}û2—_vtØ3k…™×·?qÎÍ?‚ûD€kÏŸòƒC{ñK­þÇ9·¯»‹ˆˆˆÈID¤‚7ÖC q Öú5»È/êB<Ù²kyÊA*'YŸ Q#Y'k )áH˜0á÷ ™QÒ¯[Ã÷yyy€ïž^WWפÝuBk{3+Â/—º ¸>¸9ø?‡¹ÏDàFà6 $ãð{ø¦‚Ssu=^9~)€´O)¾9^à ȶíû‰F"$kc—J‘J$HÆS¸x’Ì|&D8‡RÜ-ŸH$DMM ±˜ß ª  €T*…™±{÷îô©Vÿaf…ÀÕøY‹›Ð§lrÎUdœ_œ \ÜLÎOÛüxÂ9·¸£Æ)""""'öžþbذaìÛWC8&YYßäÄ0Ñc{¹ è@—.]ˆF£$ B¡¡P¨Sˆ™õág-ŒÖKå+Ìì¿ø~áÅôÍàUà`º:—‹ˆˆˆˆHûœ пºví @UUŒh^ôw:2ïùKÏèÕx«‘H„p8Luu5Î9ÊÊÊÒ‡;¤Ý9·ÓÌ&³>³<Íœ\2íÁ—×€Wsk;b<""""ròPiŸ&;`Õ×ÇyÑ6–Uµ±åîaäL@*++‰D"8ç Ð÷íÛG"Ñ0±ÐaK°œsëÍl,0JÓåT)ày`->t¬V8çv·øA"""""@Ú§I=»+ýìG{ÊÀ[ )ýúôô,K*•"‘HpàÀÌåW{;:8çv™ÙEÀ_ÒB’À§sÓiQDDDDN íÓd ÞÝ»+‰¶5ûqŒB!£{÷|’I?ËáœÃ9G"‘ •J±k×®ô©Ò€Ð9Wef“ðä×À """"r,@ŽQ°o)4΀lÙ²Ÿ¼©ÿhÔ­{>fP__O(¢®®Ž.]º¤Ç9Òi sõf6øðe|mˆˆˆˆˆÈQS9v¥@2f@vVµR€~Œ…¾%Å@ã¶»‘ˆÿ•%“IÌŒ;w¦Oí”4ç\ øŠ™m6uæc‰ˆˆˆÈÉKäØ …B :€Xpû[o½ÅîÝ»)))iq‚sMg< (¢_¿RR©µµq–/ßǺ5ÙW^G*Õrv¤¸0Üâg€¯;iV€>Á̦3€ιEí~v"""""@äØýøæÚµk{žqÆŒ7Žo¼‘‰'2jÔ¨†“Z ùùa.¼°7£G÷$•J±es«Vïg×Î:êê’œÖ#Úâg„Ãaâñ8fÆŽ;Ò7G€k‚ f¶x ˜ÌtÎUwè39FÖÖd9<3¼ŒÈ¼½´´”‰'rÝu×qÅWFqΑJ¥yIŸsð`=«V¤ÿ|ú÷Ïor<½ôjûöí|å+_!‘HðÕ¯~•Í›73sæLªªªš3¬¿žW¹ˆˆˆˆäŠH;™Yà*àfà&`pæñ‚‚.ºè"®½öZn¼ñFúõëwD!¤­K2™dýúõlܸ‘ý×`êÔ©Lœ8‘úúzÞ{ï=fϞ͜9sX¾|yk30¯·:ç͈ˆˆˆˆt6dfgãg®l뜳Ï>›k®¹†Ë.»ŒqãÆ …Ž*„ìß¿Ÿ;v0þ|~ñ‹_`f<ðÀ|ãßhñXÛ¶mãÍ7ßdæÌ™¼öÚk™[ö~Ï9÷Îx DDDDDE¤˜YOàÛÀ— º£÷ïߟ/ù˘3fÌ`îܹ™€ž={rñÅsÕUW1qâDŠ‹‹BÖ¯_O]]ùË_xá…ÈËËã®»îâ‡?üá!Ç8wî\î¾ûîô­õιᇼƒˆˆˆˆH'Pz;™Ù=Á/¹úò—¿Ì=÷ÜC<'•Jqýõ×ó³ŸýŒgžy† &°páBÊËË)//ç¯ý+ýë_ ‡Ã\pÁ\y啌7Ž#F´úxuuulß¾ðê]ºt¡ªªŠ‚‚Âáp‹û$ æÏŸÏ%—\ÂôéÓÎ03sJŸ""""’e í`fÿüWð57ß|3ßúÖ·ÈÏϧ¾¾¾É¹cÇŽå‰'žàôÓOçž{îaË–-¼ûî»,[¶ŒM›6‘L&Y´h‹ùtÌ„ ?~fÍšEyy9………ÄãqV®\ÉsÏ=°øjpj(vãÃHyG¼>"""""­Q9Ffö<ð‰®]»òþûŸÀž={¨­­mõ>µµµ<ôÐC̘1ƒ!C†0~üxFE—.]ˆD"„B!’É$k×®eÉ’%¬\¹’òò¶óÀ˜1cøÉO~B—.]šÜ^UUÅÔ©SéÑ£EEE$“Iòòò˜={6Ó¦MØ |³[¬qέ=Ú×DDDDDäp@Ž‘™íz=øàƒüã?þ#yyy„B!êêê8pàUUU$“­¯lš;w.>ú(«V­"3xð` DïÞ½)..&õ c±[·neãÆìÞ½›X,@Ÿ>}øüç?ÏäÉ“[üìÅ‹³aÃ"‘õõõäççÓ­[7êëë™;w.¯¿þ:ÀJàû‡xzÛœsoµëi…j@Ž™p@qq1]»vm8–H$èÓ§%%%TUUQ]]Muuu“°ÆÏøñãÙ¸q#o¿ývCh˜7o^‹Ð‰Dèׯ_|1£Gæ²Ë.cèС-Æ”L&yñÅ)..ÆÌ¨¯¯'‰L&I¥RdΦì;ÄÓûXtŒ/ˆˆˆˆÈ!)€çœ3³ý@ï;v4ÜžJ¥ˆF£¤R)Âá0………Ò·o_jjjI:Œ :”¡C‡òÙÏ~ð!¢ººšÊÊJœstíÚ•¢¢¢Vw¶Ê´eË–/_NQQ•••€¯©««#’L&Ù²e «V­Jße~+?&,tέoß«#""""Ò6£`fýëñ³{Þ[¶liõÜô¼Î9"‘………téÒ…>}úP[[Û"Œ„ÃaºuëF·nÝZë`Þª¹sç …¨®®ÆÌ‡ÃÄãq ˆÅb¼óÎ;¼öÚkéÙ•÷€%Í~L-0×9·÷¨^‘£¤r„‚.çï,½ê>üðÃVÏwÎ54LoŸ ——G~~> a¤²²’êêê6kFZsðàAV®\I^^{öìi(4Çã˜yyyTWWóꫯ²zõêôÝfO5ÿQÀLç\Ý?¸ˆˆˆˆÈ1Rú2³éÀ5½zõ"‘HpðàÁ†cW]uwß}7·ÜrKìÖ.ézŒT*E(¢  €H$B8&‘H‹ÅÂH[[ù¬ZµŠÂÂB6mÚDMM Î9Âá0õõõäåå‘H$(++ã¹çž£¬¬  ø-ÐZay-ðªs®¾•c"""""Jä˜Ùç€'?ò‘ðÈ#ЧO¶lÙÂc=ÆË/¿Ü0sѽ{wî¸ã>ó™Ï0jÔ¨VƒGk—p8Lqq1………$ âñ8Î9<Ød™V<g×®]Äb1Ö­[G2™$ãœ#™LF‰Åb¬X±‚—_~9bv[Ûxzõιç;ÿUQ9$3»øGà úç?ÿ™’’êêꨯ¯§K—.tíÚ•™3gòóŸÿœÍ›77Ü÷ÜsÏåÓŸþ4“'O¦G-BGuu56l _¿~5,×ÊÏϧk×®tëÖP(ĈÅblß¾3cÉ’%”——7Ô–Äb1"‘Î9jkk™6mZC7u`ð+ æO³xÝ9WÕ9¯¢ˆˆˆˆH#V˜Ywà€Ï¦o»ä’Kxਭ­åôÓO'//ªª*êêêH$”””‹Å˜:u*?þ855þ=^^“&MâÎ;ïäŠ+®h þóŸY±bcÆŒaäÈ‘ôìÙ“‚‚‚†RTTD·nÝ0`{÷îåÉ'Ÿlè’žîó‰DH$”——3uêT‚]¹’ÀTààp¿àràMç\¬c_E‘–@š1³‰ÀãÀé½{÷æÎ;ïäþá8í´Ó¨ªªbÉ’%ìܹ“ÒÒRúöíËþýû©­­mØyª¤¤„•+Wò¿ÿû¿ÌŸß¸ãmII “'O擟ü$C† !‰PWWÇ–-[Xºt){÷´”ÁƒÓ½{wòóóqÎqî¹ç²jÕ*æÎÛd%=²fÍþô§?¥;°WàÃÓÊ#xºÛ€yιÄaÏé Ìì߀ÀĉùÁ~Ð0ËPWWG·nÝèß¿?áp˜ 6°lÙ2zöìIÿþý‰Çãìß¿¿aÇ«¡C‡FyþùçùùÏž.`ìØ±ÜvÛm\ýõ——G,cÇŽ¼ÿþû„ÃaÆG<gÀ€¬X±‚íÛ·³wïÞ†Þ‰D‚9sæðú믧·í]üØOw-°Øé€ˆˆˆˆd‘HÀÌ>¼¾Çý÷ßÏ}÷Ý×ðF?óÇI$ 8Þ½{S]]Í’%K¨¨¨`РAR]]Íúõë¹úê«)**ÂÌX¸p!¿ùÍoxå•W Ë ™0a_úÒ—>|8Î9 H&“ÄãqjkkéÞ½;Ë—/§²²’ŠŠ b±UUUL:•µkׂ_fõ*ðüò«Cqøà±¶Ó^L‘6œòÄÌNžn쬳ÎâÇ?þ1gŸ}6@«$óR__Oaa!Æ #??ŸM›6±zõjvîÜI]]÷ß?………ÔÔÔ4ì–U]]ÍË/¿Ì/~ñ Ö¬Y@qq1Ï=÷}ûöm²Ì |½ÇÊ•+ …B”——³aÞzê)ÊËËÁo£û+ZïnÞ\xÇ9·½C_D‘#¤bö8ð7ýû÷çßþíß8묳8p`C8\ɼ 2„’H$pÎÑ£G†Nå@ÃR®tùðùï¾ûX±b7Þx#ßùÎwˆD"$“ɆnèdûvŸæÌ™ÃÓO?M,¿µî;à©Ö³sG²gžy&¯¿þ:UUU¼ð ¼ð ”””på•WâœcöìÙìÞ½ü2ª§€ém Ã=ÁuØæœ;\mˆˆˆˆˆH§Ó,³éÀ5çœs÷ß?EEE€¯»8p ƒ "‘H°dÉV­ZÅÈ‘#1byyyÔÔÔ4,½Ú³go½õyyy|êSŸ"‹ljÅb —H$˜1c‡Ã¬_¿ž7ÞxƒT*Å÷¾÷½ôlÉ;ÀG€n­ ÷ ~ÖãÃf·oÃo»[$ÕÓCDDDDŽW fÅ/gŠæçç3~üx&MšDIIIÃ9%%% 2„=z°víZæÍ›G×®]9ÿüóéÑ£›7ofúôép÷Ýwãœk<âñ8ÕÕÕ¼ûî»\ýõœ}öÙ8p€^xx<ŽsŽŸüä'ìÙ³|ÀX Œ> ô XÌ¥iWóJ`™snkV^,‘v:候}ø Ð;øž .¸€k¯½–sÎ9çݺu£´´”PVVÆ‚ X¹r%±XŒÞ½{ó¹Ï}®ágfêêjfÍšÅYgŤI“¨©©áå—_¦ººçÎ9~øa***Â÷óÈTTã Ék‚K™sîHê?DDDDDŽ 3ë‚ß ë`xúö!C†píµ×rÑE‡qÎF)--eРAäççS^^NŸ>}˜1cC‡eÀ€$‰†ðñÊ+¯0lØ0®»î:ª««yõÕW›„5kÖ0eÊðÁâ+@=¾–ãC`sî`ö_‘Ž§ÒŒ™p-ðMàrüò'N;í4®¾új®¸âŠ&»b~úé”––Ò£G–/_Μ9sH&“L˜0üü|æÍ›Ç€¸á†Ø¿?Ó§O§¾¾ç©Tв²2~ùË_RYY ¾âðäçÜ®\¼"""""EäÌì<àŸOyyyy\zé¥ u"éYŒ^½z1lØ0JJJغu+ï½÷;vì`Ô¨Q\}õÕìØ±ƒY³f‘J¥î³e˦L™’^zµø°xÛ9W›«ç-""""ÒY@Ž€™õ¾ ü|Q8fƈ#¸æšk9rdC¨ÈËËã‚ . ÿþäååaf¬ZµŠÅ‹7œãœcÁ‚<ûì³é¯6ËιT®ž«ˆˆˆˆHgR9 f–|?+rvúöAƒ1iÒ¤&u"_|1,[¶¬!xÔÔÔðÌ3ϰxñâôÝß~,vÎ-Ëî3É.cdfðAäF|CCºwïΕW^Éå—_Nqq1EEEäççSVVF*•báÂ…<ÿüóé%WIà|ÝÇ:çÜÂ\=‘lQi'3;øà.  rñÅsùå—Ó§O.\ÈÌ™3Ù±cGúnÛ_à—^­ÅÏ~è!""""'=bf½ûñÛèönã´jàEà¯@9°Ô9·£sEDDDDN: ÌÌòðu"_Jb`ð0؆o4¸Y³""""rªQéDAO‘ž@h{]9•)€ˆˆˆˆˆHÖ„r=9u(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖüÿÚÝ;6Èb‚IEND®B`‚lasso-2.8.2/docs/lasso-book/figures/PaxHeaders/sso-brws-post-2.svg0000644000000000000000000000013214404126120022003 xustar0030 mtime=1678814288.553768795 30 atime=1678814289.461773949 30 ctime=1678814323.189965723 lasso-2.8.2/docs/lasso-book/figures/sso-brws-post-2.svg0000644000175000017500000064367714404126120025302 0ustar00bdauvergnebdauvergne00000000000000 image/svg+xml ServiceProvider IdentityProvider 1 HTTP 2 HTTP 3 HTTP HTTP 4 lasso-2.8.2/docs/lasso-book/figures/PaxHeaders/sso-brws-post-4.png0000644000000000000000000000013214404126123021775 xustar0030 mtime=1678814291.865787597 30 atime=1678814291.821787347 30 ctime=1678814323.165965586 lasso-2.8.2/docs/lasso-book/figures/sso-brws-post-4.png0000644000175000017500000013011314404126123025244 0ustar00bdauvergnebdauvergne00000000000000‰PNG  IHDR ¡™Ð< pHYsÊ&ó?tEXtSoftwarewww.inkscape.org›î< IDATxœìÝwœUõÿñ×ç–iÀ0H³€ ¨( ‹°+‚ ˜ÄM4q£&ëF³ÉFc~Fãn²în¶$¦˜˜lb4®Æ Ø+±c¥IT@@éL¹íóûãœs9s¹3 LSy?yÜ™sÏ=ç;óx0Ãç~?ÅÜ‘®èˆˆˆÈÎCˆˆˆˆˆˆt """""Òe€ˆˆˆˆˆH—Q""""""]Fˆˆˆˆˆˆt """""Òe€ˆˆˆˆˆH—Q""""""]Fˆˆˆˆˆˆt """""Òe€ˆˆˆˆˆH—Q""""""]Fˆˆˆˆˆˆt """""Òe€ˆˆˆˆˆH—Q""""""]Fˆˆˆˆˆˆt """""Òe€ˆˆˆˆˆH—Q""""""]Fˆˆˆˆˆˆt """""Òe€ˆˆˆˆˆH—Q""""""]Fˆˆˆˆˆˆt """""Òe€ˆˆˆˆˆH—Q""""""]Fˆˆˆˆˆˆt """""Òe€ˆˆˆˆˆH—Q""""""]FˆˆˆˆH3³*3ÛÛÌêº{-fV®§Ww¯E>ý€ˆˆˆˆ´“™of¿2³cÛø’ƒEÀÅ·ªæÌ¬‡™õiáécÃõ|.v~ÂÌú˜YMW¬Ov @DDDDÚï@‚`bdw/¤7k̬¢çï¬þ³ÓV$;¥Tw/@DDDDº—»O¬»×!; """"ÈÌRÀ1ÀžÀûÀ“mxÍ0àp  X<ïî…’súµÀR  ϸ{>vî Gøå^f– ?_ëîkÃ4«]Õî¾ÑÌz†ë¨5³½c·^Þw·…õï®ýw÷m}¿²sQ –ˆˆˆH'1³ÁÀ«ÀcÀoG€YÀ°ί5³»€…ÀíÀï€Àkf¶OÉéÿBP·q<0xø ððœ™õŽû0)ü|^øºEÀeá±ci^r*ð\øù߯Î_ô~¼6¥ßCÏð·+ør€ˆˆˆˆt3K"¨ ¹ØØxøi™óÀŸ)ÁžÀ@à‹»Ó̬ªÌ­n%VF„׿8"¼gäH`zøùþÐ0à†–ÿ pTøùm±ó‡_ü?ò+e^ûy‚ 妮-;9 """"c2pðwÿ¡»¯p÷À—v8JIFõ#w¿ÆÝºû*wÿðÉg˼îvwÿž»Ï ¯ÿU`01:ÁÝ—›Ã/ßq÷ÅáÇÚr w÷M@”^µ!vþâ0ì)`.pa˜bw1°¸£µŽì¼€ˆˆˆˆtŽÂÇßņiI¿ÛútÎ,w~è¾ðqB™çšýGßݛҼ¶Jê(á÷ð+‚]S£ãfvAÐu›»oná岓S""""Ò9‡ï”ynq™cQ¡÷‹f¶&þÁ–“þe^·¬Ì± iPé÷@=Íg™DŸÿª“ï-Ÿ`ê‚%"""Ò9¢ì¶¶·M„¯¹ȵpN¹®S…2Ç:»¯3³Û/…Åèç/¸û›Ý±&ùdP""""Ò9Þ ÷>(y®´£;%ã€çÜýõNXÏöDm9ÿFàïÂ÷v]´û!­R –ˆˆˆHçx$|¼0~ÐÌ ør™óÿ>^ÑIëY>öiãù!»´t‚»Ï^"ø/Öw¶c²ÐˆˆˆˆHçx˜`þÆ…f¶Œ =n ð]`h™óÿB0ËãóaKÞŸÔ~ô%h±û‚ŽZìàzf…?6³?y`¶»Ï)w²»7™Ù|`’™]¬Ÿú³»gc§þ’`ÆÉÀOݽ~×'; 퀈ˆˆˆt‚°]íÙÀ+À5…ç³€¿.måüÃÇ©[³»€ál vÄïæ…œ>Þ LÝÆk."˜Þþãðü; ‚¨¸;€¨¯fÈ6™TŠˆˆˆ´O8u¼/ð¡»o(y.A0pO‚ŽUÏi‚¶kÜ}]™ëíB0L°X,r÷E%çôj¥îž/yn ÐÃÝËuÛÂÌúÔk¬u÷µfVì ¬v÷eίŸOKÂ`)z®°xÃÝÇ·ð#)R""""";ÌÌþ øðYwWý‡l“Ù.a!ýE»8ÿDÐÁktéNŒH9 @DDDDd»„iey ¼ ü»¿Ý½«’O  """"ŸRf¶pð¤»/hÃùûǺ{¹ î"í¦6¼""""; ,äž^rxA:ÒÓÀܽ¥‰æ]å`‚Á€çÛ @€1áùç|"NmxEDDDvL8”`ÒùÚ𣂠µíÌ,Ý}Ë`ðíkß+Ò¡´""""Ò>o¸ûIÑf¶ð(pÁÎÃÿv×ÂÜ}A –Èdž‘äî+Ìì߀[ ‚ÿ5³ÝÓ€çw/£€9î~€™õ>O6•æÿçî«£k›ÙXà@à/î¾²ôÞfv(Á®Ìtw¯µ3I0]½/ÁÄõ[Zû¾Ì¬øp$ªøw_[rÞ©À@wÿ­™ œôþK…ê @DDDD:Cô ÷'¨­ø/‚úŠAéQÀÌìàa`0°h.¾ofg»û“áuv ¯3øA™ûþ8„`:9´Pbfç7óÃ5}øM¹oÆÌŽî!VÞ#è~upµ™Mr÷Wc§_Œkd®6Ü (Õ€ˆˆˆˆt‚cÂÇÒIä—½Ý}wà,3Küç~7àËî>ÀÝ÷N&î §žC¤|\Îâ(2³}€qÀ½¥ÓØKÎ ü:¼Î(w?€ °øARzþ`àÏÄáî¾§»ïCP°pw8)=®¸ 8ÞÝëÂë?ÛÒšdç¢DDDD¤}ªÍlïðãp3ûÁäs» qó¯»ûfwßœÜæîÅóÝýQ‚ ã} R¶»jýØ8ªäÚçü~ëý P|ÇÝç†×uà{i_¥.ꀯ¸û+±õ½ \ìL*yM¸ÊÝŸ Ï-¸{Ã6Ö%;  """"í3X~¼ü3°ø[w­ä܇ݽPr, $î*sí;ÃÇq±c7‡DÂÝ/¤G=¾õŽ ÿ?!.sþ‰@=ðž™ý™}ìŠ@êUª´E± ‘öšOPÛAýÆ;À\wo*sî²2Ç„ï—yî½ðq`tÀÝg›Ù+À¹fvy¸³p 0ø×2N©þÀÚh¦…ûÅíN°c2¿•kÖ•|>ÜÆ:d'¥DDDD¤}–»ûMm<7_æXcøØ«Ìs½JÎ‰Ü ü ˜ÜN°âl;ý   èaf‰2ÁJm™ó3Õ‘­\s}É×ùpGEd+JÁé^ÑÎÂAež>–vºƒ ¸ lß{ð¼»·¶K¿_°_™çF•96›`×$ïî‹[øø¨ ÷€ˆˆˆˆt·¿ìŒ\ff=£ƒaw¬+Ã/ üÿýõ—=Ùºà½%÷†Í:^™Ùà³eÎvUþÛÌ’¥OšYµ™U·ñÞ"JÁ‘¶ ‡YíM0Lj5°ÈÝËå+w 3»ìîv÷ZDD¶‡»/5³ë«fvAÊÕùµŒÍ‰û=ÁÎÇu@[ Ö·åOÀÓÀ…áîɽ-€ÿ‰ mðÈ’óïÎ Bø’™ýX¾æ à\àhà­6Þ_vr @D¤Uf¶?ð;ÊäþšÙBà3îþf—/lkÇR>u@D¤³äþþ¢ ç6„ç–ÖJàîß3³UÀÀÏÃÃ?$0Êyx• ü!w/wíÍá}7ÆîU0³)5$çìzl ¿~… õïæØùnf ¼üðß±ë/&„âoH­ (Ä)ËT$"-1³:‚žð þ0ý‰àâ àP‚wç¾æîOtÛ"CáTßþîþ“î^‹ˆH{˜Ù@‚„+ݽ\ÑzGÞ«†`ÎÈJwÏ´ñ5uÅê+[èô%Ò* "Ò"3»˜`2î î~y çT´õ–ˆˆˆˆŠÐE¤5ƒÃÇWZ:¡\ðafG›Ù½fö¾™­4³gÍìóeÎû3»ÓÌz›ÙwÌì-3ûÈÌ>cfÿkfew3Ì,mf·™ÙcÇ®3³ß–9·ÆÌ®4³õ,1³‡Íìü2çN Ÿ[nf+Ìì3;¹¥ï]DDD¶ŸiM”Ã{¶™U´åföUàIàpàà‚­úÿ3³ï—œ~80¸øG`A7˜ `aF”¹Í©ÀyÄrš j@Î,YK-ð,ðoýño'(¶¬$È³ŽŸ{}øÜP‚n3wÝ?df_nË÷."""Û¦,iQøøY;!ïӀ瀧Ý}i™ó÷Þf'»ûÆðxš ~d20ÊÝç†ÇOPG28ÎÝWÅ®u4A—–ÿp÷+Kîs/p:0ÄÝ—…Çž¯Ý7vÞMÀEÀÿs÷-¹Æ@w_~~"ðh¸ÆÏG»:a;̧ zåq÷5Û÷‘RÚ‘¹û`p0¸„ ÛÉ3{­LzÒW€4ð­(ø¯“¾Oð;çœ2·º.|„ž_ˆ÷7³~Ì£QðQNØ“þ|`p}™ïmeì˯ì|=žRæî›Â×ö ï)"""í¤6¼"Ò*w87Ü 88‚ ê‚ô¤©î È:"|<ÞÌ&”\ª*|ܧÌm^-s_7³[ÚOžDÐnàó|_úš£R­^ðmoõAÐrò‹fVúÜn­¬[DDD¶“i“p7àðã3» ø Aú(© @K5ÍzÑÇ|ØÂù·×°%¹XüyKî>~°óz5·ðüb‚þ"""ÒN @Dd‡¸û fv-°¯™U»{°– xübmï=–„µgšYo‚Z”C_¹{ã6^Õk jíÖ5î>lÇW+"Ò}ÂZ» &“ h"òAÃmØ é2 @Dd‡˜YŠ Å©@0 àyàh`A©Žp3pÁ´ÞýbǶe6°of)wϵrîóifcÜýÅv¬UD¤Ë™ÙÙÝþömá”5fö"ðRøñJ™º;‘.£"ti‘™}ÍÌ~`f{”¯þ è<™ÜHPKñßfvpÉkÌÌŽ1³íÝe¸‡ mëæ¹û ÛzQ¸¦Ÿ´ÕýŸ0`НçÀØ—ÿ äÿ-]Ÿ™%Íì43니ÈLj™1³¿'÷M&“wÜqœ}öÙ|ðÁTUE¥wìBðÆÐµÀƒÀJ3{7œ×ô{3»©LÝžH§Ñˆˆ´¦/ðÿ€ï˜Ùl`)AmÅ( AkÞˆNv÷¥fö9‚y/›Ùóõý‚‰Ý­ÚÄÝ7›ÙÝl©+¹a;Ö0:\ã”ð@'HQÈ#Ã{¼hf_~Ì2³ç€÷ ÐG…ûmǽED:…™í ü+Áΰ{ì±|ÿûßgĈ-£“²Ù,³fÍbæÌ™¼ú꫼òÊ+,Y²$zz0[†Í\df·_Tº–t6Í‘…»ã‚†‘À@‚!K—ßÅÛíÆ^7ø*0–`á‡Èý;&Ñœs ºi]Ö´´Ž v?~âî+Êœs 0ÐÝÿ¹äxøp6ATOК÷îþxɹÌ 9 ¨!(`ŸO0ñYw/´´F‘Îff}Þú‚X†Îu×]Ç 'œ@[þO·víZÞ|óMÞxã Þxã ^ýuÞ{ï½ø)ßv÷ÿìŒõ‹D€ˆˆˆˆ|Œ…o] \CNE¿~ý¸òÊ+ù¾@*$´ìèÿén¾ùf®ºê*òù<ÀlwÕ! iR°DDDD>¦Ììx‚ÔÓ‘•••|õ«_åòË/§W¯^­¿¸ êëëY½z5ÇgΜ9ÃÛ}Q‘mP""""ò1cf{ÿ L ¿fÊ”)\sÍ5 Ô–îâÛöúë¯óøãÓ«W/*++£Ãɹ¸H+€ˆˆˆˆ|L„]¿ |‡ ýöÛüàwÜqrB¡ÀwÞÉš5kèÑ£¹\³.åÊÍ—N§DDš1³Ó€êØ¡ ð.0ßÝ7wϪ¶0³ÝYÀ¯ÝýÊ6œ?Œ `þ'î~]g¯ODdG™Ù™mÁ÷¨««ãŠ+®à /$™l}c¢­õË—/çá‡&“ÉL&Éf³TVVÆ_¯D:)u#姇o2³ºû¿uõ‚J$€>4’Z“ÜÎóEDº”™HÐÝêX€D"ÁÔ©S¹îºëèÛ·ãF=ûì³,Z´ˆl6‹»ãîTWWS__?Mˆt: "RN#0>ü<  |¸ÞÌ>p÷›»i]«ÚäjНˆ|â™Ù)À„µcÇŽåúë¯gäÈ‘vM›6ñØc±nÝ:²Ù,ù|žt:»ÓÔÔDMMMÔ @íÆ¥Ó)‘r î>3öõ f¶øp1psé Âyƒ€ w_XòÜ ‚©éËËÍ Ùá ‘™-=of½~èîkÚrÍpnI`Y[Ögfµá=>p÷õmZ¸ˆH 3«þ$wÝuWþùŸÿ™)S¦`fvY³fñöÛo³nÝ: …Bq×£©© w§²²’ÆÆF‰Dôí€H§Klûž ‡˜Y3[cf7™ÙÙÀ‚…¯G/0³sÌl!ÁÄôyÀ3»ÛÌv‹sTxï—»©™>ÿÅðëÝïÿ½ä¼”™ýX ¼ ¬6³{ ¦¹—ef›ÙR‚—¹ÀGföá°¯øyW‡÷kf·LDŸGl ¼ˆÈ8èkfÜzë­œuÖY|är9ž~úifÏžÍúõë) $“I***Èd2¤Ói‰Ùl–êêêx!ºétÚ‘¶ê>n  ¶â‚)å7ìLì`fŸnV_Þ&ì df‡†» /ë¿3³.3müB Š`Š:´\òc‚A]‡kIO™Ýšp}פ•=>®&È¿¾ØÇÌÆ¹{6<½*¼ço€&‚5k€åeR""msÀ!‡ÂðáËá©TŠL&³Ã]½z5sæÌáwÞ)ÖzTVV’ËåŠ÷ˆv=Òé´v@¤Ë)‘m ÛBþ üòÉ’§÷¦¸û_bç§ :¹4ãÜ}IøÔŸÍl A{Éoÿâî3»…`Âï À£±ëì ÜáîëZYß>ÁÆ‹À¤(p0³?¯”9xx¿Ç“cAÏfö.ðàóÀ-%/Ícݽ©¥µˆˆl‡j€]vÙ…A‹Ü¨N ªªŠ\.׿.WË–-cÖ¬Y¬X±¢x¬ªªŠ††R©fF&“¡²²’¦¦& …•••d³Ñû- @¤ó)KDÊ©4³;ÇÒ«Î%H¥ú~ɹóãÁGè‚ÛcÁGäG@Ž õ r Á½ JÎ=Ÿ`§å÷ÛXïáy7Äv-…Ÿ–9ÿó¿ÿþ£ÌŽËoŠ0O)óºŸ(ø‘T€æ-tÝD"AUUÅçr¹Éd²Å­|>Ïûï¿ÏŒ3øàƒH¥RÅŽªª* ……B¡˜†UQQ™‘ÍfI§ÓÍÖ$Ò™´""åaz‚`að*ðË2…Ýó˼~ŸðqVéî¾ÆÌÞ'Ø9‰Ž-2³g³Ì¬ÖÝ7XðWö|`ðØ6ÖÝoN™çf—9µ—¹ÆÌ¾]æù<å[—û^EDvÔVHükw'—Ë‘ÏçI$äóùbúT*•"‘HJ¥Èçó¼òÊ+Ìž½å×]UU™Lw§ªªªøšh‡%¾+͉nß%ß¹ìÔ€ˆH9î~XÏÝPæXEøØÒàÂÍ]¤ân&H·š ü/0 ú7wÏÓºè~õež+·†¨~d!AMG©ÅÀ;eŽ·«ƒ—ˆH ŠéVëÖ­£¦¦&x¢$(Éf³ 6mÚTÜ­ˆf„üñ,¦\™455‘N§) d2ª««ihh ™L’J¥hjj*&‰DB5 Ò¥€ˆHgˆft .}"ÜÙ |PòÔÝéR Q:Ö¶Ò¯V†ƒØz—b«5ÆÜèî/¶áú""¡AÝÀôéÓYºt)&L`ï½÷¦gÏž[¥g466²yóf‰›7oæƒ>ÀÝ‹³=¢L&S H‹ufVü<:/6Dˆt:Õ€ˆHgxž uëœp>HÜd x6~0ìˆu0ÞÌÎ^p÷ym¸ßŒðñì2ÏSæXTè~~®-"ÒYš¥`zê©Lœ8‘—_~™ý×å®»îbÁ‚lܸeó5êj°yóf>úè#ÌŒêêêâœxpAýHUUUñX2™$—ËmÕ’7¾&‘Τépî¾*ìlu!ðS3û¦»7…ÅÏ‚“—yéï ‚‚Û‚”›ÛxËGj=¾bfϸûáNË)]¥î!èŽõU3[ü—»7˜Yà<`®»?ÒÆû‹ˆìˆf; ={ödÔ¨QŒ5ŠÆÆF–,Y /¼À‡~ȰaÃ:t(}úô¡ªª w§P(‹Ó£”«|>_¬ñhll,ÑÄóúúúf3@¢ó¢5 é @D¤³|Ø“ =îWÌì#‚ºFàâ’Ië‘§:n Ïûc[näîùpîÈcÀÍìgs@j€ÿüW™óϯÿ/À÷ÍlЋ`ÞG S–ˆH‡3³¾@%H$ŸÏ“L&:t({ï½7 ¼ûî»Ìš5‹\.ÇÁLŸ>}ŠAPÜáH$$“I2™L1¸H&“Å]‘øyétº¸+¢Dº’)õ5¶u·¦‘ 5ï»åžt÷fv2pÁ°ÂZ‚Âî»Ý½¥×Â@bðQ ³?> ï»°äµ³Íl$ð‚®XwÔ‡D“Øã篎6³c Šß†k|ØÝã5*wo´ô½Šˆ´•™;zôèÇwÝu×Ä“O>¹.šÅ[·ãuw²Ù,fÆàÁƒÙ{ゥ¯¯ÇÌhlll–ŽÕÔÔDEEE±›UTˆuÃÊçóÅZt:M.—+ÎillŒ·÷U"Nˆˆ4ãî´ñ¼p×6Îq‚ô¨6§2¹ûKÀK­<ßÐÒ}ÃÁ7”yªÅuºûS;/­­ieZ ‹ˆì€O:é¤Ä‘GI]]]ÝwÜQ @æÎKŸ>}èÝ»w1 ˆ·ämhhÀÝ‹ãñ¤´Õn.—£ººšúúz***ÈårÍŽ¥RÁ£ %—ËEëS"NˆˆˆˆH×ùõ¯~õ«óŸyæ™ÁMMAð(Xµj7Üpûì³Gq{íµWÙNXñ”­è¹xç«d2I"‘(¶ßw/Ö‚D»ñV¼!¡K§S""""ÒEÜ})°§™í ü˜G}4cÇŽåwÞaöìÙ<þøã 2„‘#GÒ·o_zôè¿Nñ1 8¢zŽ¨Æ£ô°UVTˆ®A„Ò•€ˆˆˆˆt1w_lfÏã©T‰D‚¡C‡2dÈN:é$–/_ÎÛo¿ÍK/½Ä®»îÊž{îÉ.»ìR2MKf{d2R©T1¥*ªñˆÒ°²Ùlq(a*•ÂÌÈf³Å”,€HP""""Ò=([„Ûu×]8p ¹\ŽÕ«Wóî»ïRSSS ÜŠŠŠb ñ)èñnX©TŠÆÆFªªªhhh NƒP‘N¦DDDD¤{lÕ†7¾}ítôéÓ‡]vÙ…d2ɦM›ŠçƇ –NAO¥R-NFêC¢Ö½! Òé4 ]D>–̬ÊÌvëîuˆˆt¢b_ .¢€ÄÌŠ“ѳÙ,A‡õl6Ûl§$:R"Nˆˆ|l˜YÒÌþÎÌ Àr3[gf3Ìì¿Íìsf6¤»×)"ÒAÊî€,X°€K.¹„o¼‘¹sçë9ÊÍ š¹\®8û#ÚÙˆަ¦&’É$Éd²˜®•Ífµ"]N)X"ò±`f–<Õ~Dç®$˜23ö°ÉÝ7vþjED:D³ÈQGÅ‘GÉüùóyôÑG¹çž{9r$|0}ûö-ž!ÑÐÁøG„˜Yqâyi-H¸d³Ùø‘N§DDº•™Dxœ~Í™gžÉùçŸOUU .ä7Þ`æÌ™Ìž=;Jœ~ÄÕ›ÙÀµ-M[ùi¶RºÃ1lØ0ößY´h3fÌÀÝ9âˆ#èß¿ñ¼¨³U&“(Q:V¡P Nç‚Ä'£G»"‘T*u€™ýÈÝ¿Ýe?Ùé(‘naf»ÿ|‰0ôðÃçºë®ã°Ã+žwØa‡ñ¹Ï}€ÆÆÆb0òúë¯óÆo°dÉ’øíšðzcÌlœ»¯í²oHDdûµZ„M?/ 2„}÷Ý—¦¦& …õõõÅsS©T1àÈåräóùânG:&›ÍR(Êv¾ŠÏèÝ»7ÕÕÕÿdfCŸõxd$Ò€ˆH—2³žÀÀ7{î¹'×\s gœqF±h²œªª*ÆŒØ1cŠÇÖ¯_Ï›o¾ÉÌ™3ùýïϲeËïqU';""íQ¶¶Þ ÉçólÞ¼™|>ß,@‰ºdEÁEEE…B¡˜†U__O*•*%ŒO>vE¢"væ\}õÕÔÕÕ³nݺsn¿ýö fö0ððwæ . IDAT_ßu?ù´Rºˆt |˜|èÑ»wo®½öZžþyÎ<óLÌl»¯Û»wo&L˜À7¾ñ .»ì2ªªª¢§Nê¸Õ‹ˆtŠfs@ åBóøsñ€ÅÝ‹íw«««Éf³˜Y1ਮ®¦P(P(Šíw+++ `½4 «P(0kÖ,6mÚDÿþý¹úê«kg̘1õž{îùýE]´¶wïÞϛٕfvhçÿxäÓJ; "ÒéÌìàÂBòT*ÅyçÇUW]E¿~ýÚ}}wçü#›7ofРA,\¸ O»/,"ҹʡok7¤t—8‘HÓ°âÝ®¢à"N“ÏçÉf³ÔÔÔP___LÃÊårÍêG¸é¦›6¤R©Gyä!‡z¨ 6Œºº:Î:ë,ûâ¿xd¡P8ò7Þà°Ã[1sæÌûÇ€éVò)¢DD:™õ~\D¸ã:aÂ~øÃrÀ”}Íö¦øá‡Ü~ûí¤ÓiR©”:¹ˆÈ'ÉVEè­qñô«è# >***ÈçóÅ–¼ ¤R)ÒétqaüXSSSq²z}}ýb`LSSÓ‡f6à‰'ž88mÿý÷?õÈ#¬1b»ï¾;C† áG?úÑnUUU¿ÿþû?þøã¹êêêgïîU#iépf–.!(2ß`=öà»ßý.çž{n‡Ýç™gžaöìÙ¤ÓéâðD¢˜Yª¢Iù¸ÛªZà€–Í›7ïà~àw/Þ@Dˆˆt3Kã Ò­þ ººš¯ýë\vÙeżãöjllä¾ûîcÓ¦M$ òù<©T wï€(‘»6¡—{.:žËåH&“ÍŠÊ£A„Ñ®H*•*îŠD; Ñ ÂL&SÜ¡…A„îžf„ß1³aÓ§OŸœL&'rÈ!'Ž;65lØ0ú÷ïψ#øÕ¯~µG"‘¸lÁ‚—ÝqÇ›ÌlŒ»ÏéПž|b)‘¦[=›8q"×_=ƒî°ûÌ›7™3gR___L;ˆwu‰í€Z»ŽˆÈÇ@Ù6¼ñÏÛ’’u¾Š•§Óir¹\³nXétºYqzÔ’7‘HD3– “ÐÝ}ðSà§fVóòË/œºë®»ž9nܸÝFÅ^{íE]]ßüæ7{>òÈ#' @P"" Üù¸›0ø9r$×_=cÇŽí°{äóy{ì1>úè£b_|3+¾»YF­$шˆt3«&¨i+îîí¸\»‹Ð£Ô«¨ž#>Û#•Jafꦦ&̬˜†U]]]Lʽy³Ý…tî^OðÔÀ×ÌlÔ=÷Ü39NŸ>vìØ£6nܘžÞÞëʧ—éc®¼òJþñÿ±ÙdÝöZ¹r%/¿ü2«V­*]FE–ÑÛ(ç9ÖÊWˆˆt†þÀ…ѱß9 Oð»'<âîonãZÛU„ÞÚH”~Z„$‰bGEEÙl–\.Wü½½6–¾ÚîNî> ˜ü‡™Õiw_ÝÞëʧ‡æ€ˆHG8`Ĉ\zé¥ÔÔÔìÐLrÞzë-^xáV­Zt£‚JZúF9Ï…BA; "Ò©ÂîN ‚¸?2Àì6\®Åøç­=¥^E©Tù|¾YÀÁrT§g³Ùâ®H"‘(þΟŸS[[;ÿØcmO›bù”R""¡YóªU«¸á†8ðÀ3f Æ £W¯^eÿ644°qãFV¬XiYQ¡y<à(MˆR®êë멨¨ÀÌÈf³Ú‘af{'CÃCõÀsÀ m2³'€IÀŸ}{»ml£½­AI4„5 82™ÌV»ÅQ ]|D…ë·ÝvÏ=÷ûì³Ï‚³Î:káv~¥z˜Ù!©TêÍ›7|ðÁwÝ}N¡P˜{Æg¬lçµåSBˆˆt„â»xfÆi§ÆÄ‰y÷Ýwy饗˜6mûì³£FbàÀôèÑ£øÂ(5kãÆÅVºñ‚Êd2YLÊþpFݵ⃴¢µá‘ö0³¾Àñ©UFZõ"0£…¡ƒ3„»/ßÛ9l]„¾=»!Q£xÀÕ}Ä—ÆßЩ¬¬dÅŠüò—¿dÙ²eŒ1bÎ5×\óÈ|[}O‰Dâ‰\.·8 ™LîçîC‰ÄäiÓ¦­6³&MšÔÔ÷‘O0 "Ò¶zÏÌ4h{ì±§Ÿ~:ï½÷³fÍâ¹çžcðàÁ :”]vÙ…ŠŠŠâѨG}h”¶Œ,×Á¥ômlš¯i33«ŽŽ$øÿ‘ÌòxÔÝ×µôº°Ýî ;xÛfé«­%÷Ür°ÑG4=ú½ f-=–J¥xýõ×ùíoK}}=Éd2?qâħ/½ôÒ™;ø=Ä×Õ˜H$î8å”S愇^Ó§OßËÝH$}O9å¢DDvŒ™ ¾I0|«”ŸæýaÝ}÷Ý4hÙl–+V0þ|jkk‹³;ܽ¸ƒO¹j) +Ú)‰jA¢!\±i¾ª‘m2³40T…‡»{g§ mU²#Eè¹\®\”¦a¥R©â5™L†‡~˜{ï½w§W¯^.½ôÒû&L˜°¢½ßˆ™­J¥R·œ|òÉ«J¿ÇI“&-µ÷òé¡DDvÔw¿÷½ï]Ö¯_?þçþ‡%K–4ëv½#‰ÞËçóôë×]wÝwgÓ¦MÅó¢¼ä¨=d< +*²Œ÷ºÚïÆ‹,µ""mÑJg«ÇÜý.ZFñ’( Ú^ }½y•G)Wñö»k×®å7¿ù ³gÚ÷Þ{ïEßûÞ÷¦ 0 #ŠÄ_ß´iÓÝS§NÍtÀµd' DDvTÓ‚ 8p {ì±G³ä®»î¢wïÞŒ=z«NXÑGccc³ ÑΨÆ#ú#8’Éd1‰:¸D»"ñnX! "RV™ÎVë'€7w ¼=ŠH¡Pˆ¿Ò¦Z(}5›Í’L&I$[MA/ ,^¼˜_üâ|øá‡$‰Â 'œ0ãßøÆ‹í]¼»Üý¡ÓN;í©ö^Kv. @DdG}ÿŽ;îØp×]w^]]}8`QKÈqãÆñæ›oò³ŸýŒ2zôhöÚk/jkk–ßÝËf³[µÕ!@±î#ž†OÍÒˆˆ´¤Lg«à¯4ïlÕ•Þ>Y¶lƒÞ¡"ôh·#ž†ÍIzþùç¹å–[Èd2ÔÔÔl¾ä’Kî?ñÄß뀵oN¥R·Mœ8±½]³d'¤DDvˆ»×?~`fÎê=†ÊàÁƒ™8q"Ë–-cñâÅÜ{ï½ÔÕÕ±ï¾ûÒ¿ÿb[ÞðZÅ4‚(W9 .â3@Ü}«âô¨•dtL“ÐE¤”™ÕǤ\µ¥³UW™¬úýë_ç?þã?6lж4,3+ŒލiGCCwÝu>ú(ƒ zïꫯ¾ðàÁÛ3(±%ïg2™[¦L™Òbq¾Hk€ˆHGh€­‹ÐÍŒÝvÛ2fÌ>øàÞ}÷]þú׿ҧOFŽIeeeñ"á;tÅ¢òd2Y:ïà/²ÌçóÅ ¥ªªJƒE¤hG;[uww3ûpã /¼`Çs ãÇç /äØcmÓnH¡P(¦§Fµ «W¯æg?û‹/`ܸq/\yå•3’ÉdG¼1óâæÍ›ÿ`À>÷¹Ï‘ÏçY¶l¯¾ú*x µµµÅ×$“Éâk⣖¼ñ $‘H”MÊv@úôésÀ¦M›^7³‘îÞÔÕ?éfVM°ÓPÚÙê1w_ÛÅkéKxìÚ<îîotä}Âßa··öë×oÝwßý[«W¯>¶P(Ô™YŸqãf}æ3Ÿ™WWWדÈWTTTÜr '´;i‰é`«”ªèóÒéç}ûöåÔSO¥P(°~ýúây¹\ŽT*UÜåˆZí¦RÁ¯ªøô¨×}| zÔ ¶¶–ñãÇ[²dÉGfö'à~àawßÐ…?é f–Ž¥›;[•I·Šv_w÷ŽZôá‡.¾_ÎÃ?Ü'—Ë 4³…Ba€»4³fVÕÒuZðÚÀï>ôÐCÕEP:•é >ƒ£Õþõù|žM›6S¶¢ÇøF¼ýnSSfÖl$ŸÏo5ÝÌŠ¯73¾ô¥/Q[[Û£ººú‹+V¬øâC=”ïÙ³ç3›7o~¸ÏÝ•^ ò1×Bg«U;ó»a=ÃÉ@ïðÐ|`zWï¾ÄøÄ‰×Ôœ4ûv×]wU÷êÕk`¡P˜H$ºû@wÔ6»€{ÁÝ:í´ÓžêºeËÎLˆˆt„fEèÛœUú\ÔJ2›Íƒ‹|>_Üí(p”ΉŽEs@ššš¸þúë9î¸ãØwß}©­­å3ŸùLòË_þòqõõõǽöÚkÿvÐA-ë­· xU©Z"#­t¶zm{;LuÀZú“€aá¡5ÀCݵÕÔ©S€%áGÑ#<Ò£¾¾~×T*Õ×Ìzäóù·Ï8ãŒåݱFÙ9)‘ŽP¶ o¹Ï[{. 8âµ QšU4ï#JÊjK¢ $jÓ­aõêÕ…+V|÷•W^Yœ6|øðÓŽ9æ˜êáÇ3`Àöß~ò“Ÿì^QQqñòåË/~ðÁ³étú™\.w?p»¿ßá?%i3œìê–ÎVáZªR­ÆI‚!§ftõZ:ÊÉ'Ÿ¼X~ˆt9 "ÒZ„}ÞÒsÑ뢨Æ#Nw=2™ ­ºªªª8€0—˧ GÇ¢$—ËÝìîÿÞâ3«zûí·Ç'ÖÕÕ3~üøa‡rC† ¡wïÞœwÞyé‹/¾ø„†††^xá…6lÑâÅ‹ïžvwåD‹t²:[½<áî›»x-DúÕ3<<˜æîëºr-"Ÿ6 @D¤#´yzKϹ;Éd²¸ë¥aUTTg€äóyšššŠAH¼ýn„D)X@³¡Ya[ÎÇÂï˜ÙðxàT3;íÐC=z̘1ÉáÇӯ_?FÍÍ7ß<,•J]¹`Á‚+xàÍfögàOîþ§ÿé‰ìä>N­ÂõìFPç18<ôAÇ®^‹È§‘éeS°Úºí€ …bÀ‘J¥ŠI¼Æ#•JÑØØXl¿Í ill¤ªª*¾†VS#Üýmàmà¿Í¬×+¯¼r0iðàÁSŽ9æ˜~#FŒ`=ö ¶¶–K.¹¤Ç7¿ùÍ¿}æ™gþÖÌÆ¸ûKíþ‰‰HÔMê‚§êðð"‚)â]ÚÙ*\O5A—­Ãžžu÷vO‘€éí*B$‰bÀ‘Íf‹Ï£º¦¦&‰UUUÅ)èÙl¶øš††‰Dԫ͹Ùî¾øð'3»øøÃh`r:>}„ G~øá¶ß~û±víZ€ôü|D$&Loúà8¶t“ú€ ðèòº„XºÕÉ@ðð|àAw_ßÕëù´S""a›Eè­%…B¡Ùô(¸ˆ§aŇær¹S³b­€w¨8ԃŽ~üÐÌú>ñÄ Ò1VÏïÈuE$ðqêl®gw‚߃ÂCÔy¼ÛÕkÙY(‘ŽÐbzkGéçî^l¿[š†USSC}}=étšd2YTØØØXÜÙ¸q#Éd’|>O"‘èÿȸûGÀÿ…"²ƒÌl‚ÎV{…‡º­³U¸žà‚0§€—º#Ù™(‘ŽàP~zé×­¡GSÌ£”ªøÄó¨Ð<ªûH&“d2™fSÐã; ãÇŸ0}úô‹Ìlnccã¬)S¦¨kH70³:‚T«ƒØÒÙêàɰ9DW¯'AtK0QÝ7fui§-‘•éÛ5 ½\zôXš†µÚÏÉçó …bqzÔ kÓ¦MÅd2i»ï[QQqÆôéÓ—»û<`îË/¿üÞµ×^«w8E:Q¸Ãp“ÎVᚆ ZAnõ^w¬Gdg¥DD:B¶;R„îîÅÙ¹\®ØV7 Bâ)W©T 3+Ö}DiXQpJ¥šî¾;°;püá‡^ÿàƒ.4³¹\nÎgœ±±S~*";¡°³Õ‚ÎVUááÅ; ]ÞÙ*\S/‚ô¯h¦x¥[‰t  "ÒÚ]„Á”ót:»7ë|™L¦YÀß)‰&£·±¤ÆÌJ§ÓgM›6m90·±±qîÙgŸ½Œ0¥LDÚ.Lm:˜ µ©WxxÁŽÇ;Ý´¦$AKÝã€J¶¤[=ìîõ­½VD:é(h´µþ£P('ž'‰f3@2™ fVL¹ŠwÈŠ)|ðAq¤¶¶¶¡- w÷A÷›AUUU'=øàƒ›€ùù|~N:~{Ò¤IMíýáˆ|Ú…­&²%µið$𦗅uÝšö"ènÕ?<´Œ ÝjYw¬GD¶P""[1³QÀаT[l5 }{Ò°¢éåÑH.—+[ šÇÓ°r¹•••,^¼˜ßþö·ôêÕkÔ)Sæïà÷Þ8$•Jâî¹éÓ§¿“Ïçd³Ù9guÖª¹¦È§•™ N†„‡ê ÷uKg«pMµÀ sF6ÑÁˆ4§DDÊÙ8ÇÌ6s &†/mep‹mxË}^úuôºønF¡P(î€455§ ÇÓ°¢cÏ?ÿ<·ÝvÙl–t:ùÊW¾2­®®.ÓÞ‚»7ºûàD"±oeeåä|pU*•šÛÐÐ0oÊ”)‹Qª–ì¤Ì¬AZÓ‚šŠ,ð"0£;:[…kŠjOŽ*~/½ <áîÚÉùQ""å¼ j ò§0³%À`A8=<âÐ|¤øÄvLB×}DÁE|2zT¨ÞÔÔTLǺãŽ;˜1cuuuk¾õ­oýåCù°~‹óùüm¯½öÚæ1cÆì™ËåF$“Éòùü1étzðïp‘O”°˜ûX‚ZÁò_ž*ùÐÕëœô -!H·Ò®¥ÈÇ)ç] ~ž?†¤Zœnf3Üýñðx³¶¯=úˆf{D@:&›Í’J¥šÕ}¬^½š_þò—,Y²€#F̹æškéÕ«W¶ß»'“Ég&Nœ8(œqÆügf 0múôéýц™UÌΘ@PÌ Ag«‡ºó?ùf¶ A[Ý}ÃC€ÇÝýîZ“ˆl›i&Lc¨%xg3Qútø±`bpd‡&¡Ç‹Ð£øHtÍŠŠ 2™ Éd3cΜ9ÜtÓMÑäóüĉŸ¾ôÒKg¶÷{w÷L>Ÿ¿sòäÉo¶tΤI“V«Û{/‘O‚°‹Ôh‚t«žáá÷GÝ}i7®+ Œ#hõ›bËpC¥[‰|(‘¨ðz$°ÁGK¿²ÁÇÝ%õ yØñ"ôè1‘Hw@J»aE;!=ô÷Þ{/…BÚÚÚu—_~ù}GyäÊvÿ`u>Ÿ¿åŒ3Îèˆk‰|¢YÐbA1÷.áá :[ÍéÎbî0ÝjPZ Lww½1 ò ¡Dd'ef)‚”ªƒŠÎ“±§×›€ÝØò{"G0Åø/eþóÑë4"mÝ ‰ïœ”Îö03Òé47nä·¿ý-¯¾ú*Æ [xíµ×NëÛ·oG¼Û9góæÍœ:uj›Z÷Š|š…-uO$Ü A©§€×ºsh_Xø~ °Oxh=ÁŽ‡Ò­D>a€ˆìd¶™ŒªcO½G`,t÷ÍlWà¢ð¹ð&p ï|ÎX¹r%¯¿þ:x`ñ‰íMÊZíÆÛï.Y²„Ÿÿüç¬ZµŠD"Q˜0a ßúÖ·žK&“ízÖÌ îþøäÉ“C­d'gfý ÌG†‡2ÀKÀ³Ý™ÖÖŸEP’$؉ý+AÇ­niõ+"í£Dd'æqïOðG|ØS‹×ÊÌüXIZeÀ‹îþh+·xXìvöÙgó¥/}‰/ùËôëׯx¶Zò R©àWR&“)î€<ÿüóÜ|óÍd2jjj6}ík_»ÿøã»~åÕ»ûÿMž‘Âßã€# Þt‚6Û»{·þÛ0³Ýê<ö }DÐqkA÷­JD:Š‘O!3ëCðʱ¼Å IDATŸŠƒ rAÇý"0ÓÝÛTë`f½Ý}ývÜ·¸ø6až¶™1~üxÎ?ÿ|ÆŽ‹»7 < …™L†… [í®Y³†_üâ,\¸3óqãÆ½xÅWÌhoÊ€»¿ºlÙ²{.¾øâö¶ëùD wDŽaKæbà1w_Þm ̬† ðý‚Ý× ð4Ádõ–¡ŠÈ'Œ‘O‘p>Å1lI¥€ •ê%à®Ê—6³p6p%pXt|ðàÁœsÎ9L™2…ž={R(( 455±hÑ"Þ~ûmn¼ñFÖ¯_Oeee׿üåO?ýôw:`Y¹D"1í”SN™Ñ×ùĉu¶:‘-ûV œÝm £YºÕD &<<xp{Þ‘O "ŸfÖƒ þál©íZ<çî‹»ma€™ü#0™0(ª©©áøãgâĉvØalذ¥K—òØcq÷ÝwS(8pàŠ«®ºê¾}÷ÝwC{×àîë+++o=ñÄßmïµD>‰ÂÎV'»†‡ÖÏÐÍ­ÌlÁï‡á¡ê<ºmΈˆt. "Ÿ`±éÄãªðð{9ÜK:ð>µîÞ®@À̆—½£ãýúõcŸ}öáý÷ßçý÷ƒÚòÃ;ìÕï~÷»OUVV¶;å"‘H,L$·|òÉQ;"ò‰v½;jž^êîRfÖ‹`m¤[5¤[½ÔÝA‘ˆt. "Ÿ@aŠS”Ã¥+,'<uð½Æ8·ºû²¸^O`J=.hll<6ŸÏ»ñõìÙsã¤I“f|éK_šÕÞû^(žž9sæC×^{­þ3#;•pfÆq)WÆ–IáOº{c7¯-ªA9¨$(~xÄÝõFÈN@ˆÈ'L™t…N›Nlf'ôÞ˜æî/µrî.ƒ ÿ?{oU•çÿ¿Î­Â"ûÙCØMcX…\po•%Ðh÷h=Óíøû}ç™ïLOwO;k·ccˆÈ¦(Ýbk«í‚dKÂN@ö%ì°$U÷žïçI*U!TÂçõà#­õƽ÷öíÛý;wîlé÷û[j­[Y–ÕÒ²¬V@3­µUÞ¹J©gÁرcOÜèýáf£DKÝ¡˜Ï ˜ÎVŸi­ójl`.îÅ€ÛÝM€e@NU/œ‚Pû"µœêNWp»ÑŒÃ´ñÕ˜ÞûëÜ}^`*n”ãJì »„üG,Æ–™™é-,,¼ hé8N«`0ØÊ²¬–J©æî8²”RKÇ_c®Í‚PD©;ˆIǬñ"n¥”#Œ†a)B©`ËkÒ]]„šEˆ Ôb”R€û(NW8ˆIW8£û)Ì*åPŒøøkxÚ•›[>ã/)MêÖúXŒ¯TzzºW¼=„[wa"“n2=¬¨é–ºpõ»¤¦È¼±»9³ qºÆ&B­@ˆ ÔBÜUÃQ˜(„¢ÒÜ ÃxÌjª>ÔZoŽrl;L$Ķ«“ò5ýÊ]± ü»Ö:«*Æ.· %¼ÐZg—s¼x #>BÅï¡Âð#åÕ~(¥†?s_>'âC®M/ÕÀ:­u§–p1 4t7ïÆ¤‹ž«± ‚Pk"µ·µî˜ö³S¤ùE¬'è®ø¸Ó²Óþ¬µÎ)çøxLô¢ &Ýj г⩨Q·vämŒXyMkýA=† ÔI”R·a" }ÜM`°:–ÑëÁMÇ´w7ÂÔŽU©‘ u  ‚Pƒ¸ Õý±0¹Üj­¿«¦{?„™ÜØÀŸ´Ö;Ê9¾)ð&ï¼xKk}L)µ#œz%ýÊ]!}Ó¶w;ð÷Uø(‚P§p[ÖŽÀq‡L7c Ì/ÔàЮÁÅü ‰¸˜ ‚PD€B ¡”JÀ€î¦Í˜•âj¸·xè…ñîøcy©^J©¶˜ÈGCà,°(ÔÉFk­•Rï)å¤_ý“æU<¡µ¾Te#u×ëg8&Òƒ‰*nÅ´¬=S“c ¥-x6âb.Âu ]°¡PJõî`&åi­«Åµ;‚øxWk[Îñ]05õ€£˜ÈG…'J©>Àz̳>¯µþ}%†/u¥TCà.`0Å ƒ»¯´ÖÇjl`aDp1?Š©ó8\s£áfDˆ T#n÷Ì '_¥ÕU¨&>À;ååj+¥’05"Œ«ò»×S—¢”ª‡ÉYï| L¨ mB¡6 ”ª¤`ÚmûÝÍû1&‚‡jj\á¸)a£)®E)¾¢–´ýáæCR°¡špݺZb ¾×`V8«¥}¦[óñ¥Ó®Êw`ÑÆyýƒë¿cÄÇ `ªLV¡”{ù÷1‘A0m­WÖ&¯ q1!VHDª7 é>LS>ðžÖú`5ÞßúbÄÇ­õî(Ç*Ìjç0wÓ:Œ{ñu}Y(¥Æ»/ïÑZr#c„ºB÷ò“˜âííµI +¥z`Ò­ÜMû05j'jnT‚ Ô$"1Äø¢ØÛc?¦ÛTA5áŒø°)_|X˜Ú”˜âÒZë̸gKàMÌ3ÿ»ˆáVÆ}1£©»9ä^¾¹6urÛeÇ´×8I ‹ê $‚p½HDb„[XúÐ3™ÿø¬:'%ÄG?Œøx·ñ2ìêûAyž åÜSaj]6wVGg/A¨m¸Ÿ…Þ˜Eˆæîæ|`%µOxDr1_…ñsAª‰€B PJuÁ¤Y\ÁüEôȈáÂÅGy‘8àqLKà"L}HÔÎX×àï0âã"ð¤ˆáVÄí5hínº„©ûZ[›&ôâb.BM A¨b”Rý0£¼WàwµÖ'«y %MËmµë NƬÐ^ÞÖZ¹ÁûVc:ú¤i­ß¸‘ëÂÍŠRªÆ#£»é2æ3ñmmã®Hú¦1@¦Þk_ÍJ„[ ‚PE¸+‰c0õÛ0iLÕ:épÅÇ$̪f(ò±³ŽRê6Œ»ycLNú"­õ©¼oLÊULåÑ¹Ž ÜŒ¸QÏQ@gwS&ír•ÖúJM+Úê^V .æ‚ T’‚%U€[?ñ ÐSï±S¸Y­ ÿ:»]µÅD>â€ãñQ™âø×0âã;`F%®#7 naÐÑÝÀo®®mÎà®/O*0”ⶺë1Í&.×äØA¸µ"•D)ÕS?Ñ3éÿðFŠ·«`×ÓíªðÅîæ‹´Ö—*qïgÝë0uù7z-A¸PJ%b„G'wS㑱º:»ÜU„uwñîæï0éVÒVW„jGˆ T7íâ1LñæyŒ³øÑ‡ÂÔT¤à<#˜ü˜¶À‹+c*æÖ¼ü‡ûòçZëµ7z-A¨í(¥:c„GgwSbáq¡FUJ©v˜:î¦Ó#Ám57*Anu¤Dn¥T/L¡·“´¸&Vþ]ñ1ŒqX/ÚäÂ5{3æÝ˜Z@%îÝ3ùê‰1¼·6™© BU¡”êÜÜîn²,LúÒùXÜÈìhLäCajRÖ`jRjM.AnM$"7€RêNLÛJlÞ¯ÌD¾ãPÓ°øx¿ñ‘„)N·€­î±v%‡ðŒø8 <#âC¨kÜ„ÂÇ©ñHÅD95 |QÛRÃA¸u"×A„NWë0yÔ55ñ|3Éø³ÖzK¤ƒ”RC1i Ø|\Ùn7J©i˜ZAà‡ZëÓ•¹ž Ô&”Rí1“ø’Âc+©µ>[c‹‚ûÝÔóÐÄݼóýt¼¦Æ%‚  ‚PA”R^L¡/f¿BkYƒãB#("¾+¥†a&%`Ú‚þµ²‚I)Õø½ûòÿh­WWæz‚P[(Gx¬ÐZŸ©±•ƒ[ç1ŽâN\ç/‰J ‚P‘A¨J©˜bóΘ IÔhC5g¦Vc‹×G8&&ˆw€p³ã6”¸ èîn²1©K+k«#¸k":è‰n«€o¤ÎC„ÚŒD@á(¥aRZW0®â5æìÖŸŒp_.+G|ŒîÀˆ”/´Ökªh¯bÄG0Ećp3ã aÜ\?‚·©óá&Cˆ ”ƒ»Âø4ГÖð–Ö:¯ÇsFX€1:,“úäúÜ$c Ó?ÖZo¬¢û? Lw¯;9Zn¹1ºÇ}¹º&Z By¸‚#)nO+kk=S9~ŸK‡ 7"@! J©Û0‘ÆÀY`aM®ˆ*¥R,>¾ÒZá¦5poŒHø@k]E÷ïd¸/ÿEk½¬œÃÿø™ûß÷VÅ¡2¸øÛ15íÜÍALô Vvµ á ¦q@+wÓ)Ì÷€øy‚pÓ!D" ”j L–À‚š4SJ îÅäy­µ^áðC +fRõžÖzGÝ¿!ð' ðF`D;ö{ÀO]@ª¸¿ T7*ØSãÑÒÝ\ˆñ°ù¦6§-)¥Z`"5}ÜM—Õ˜qW¶¶ B D¨s¸«œƒý~WÛ¶Û¶wÛ*êÓá:?ÔŽ`Ò®.Åj¼OŠÅÇ­õ—Ž©<‰é‚S„1E¬Ê:•ÿÅtÿ:ŽI½Š8ñqsÓß>¶?¯Â1ÂuáF“0µÍÝÍW0í³×j­/×ÔØ®…+úG1Þ=AL»•Zë+596A„Ê"D¨S(¥”ÇãyÐçóõŸ¯÷¬Y³<­ZµP'Nô|òÉ'qëÖ­›¦”ZªµÞåüÞ˜ú &}è5ÙÊÒu`~ ó9Ý|ÞÓßm‰;#>®`êT*\ð­”êêóùæ9Ž3ÀãñäƒÁwÇùÖú€»ð_îῈTwRâZý_?ÓZï3(A¨>ÜÜ@L‡¨Æîæ‹ÀzLÊRa5Œ¡0Äëõóûý¾#FxÚ·oÏúõë»dgg'º !¹ÎS˜Ú­»wóQà³ÐçQ¡® > BÀ÷ú|¾þ3gÎô´iÓ¦Ì1ëÖ­ãÃ?ÔŽã¼nÚ§”ê <ˆ‰4dcŠ·k¬½¬[ƒò & l°$<í)L|\ÂÔ©T¸ŽRª›ÇãYÓ­[·¦)))Þóçϳnݺ£GÚŽã< ¬À¸¦'bŠÈ'E35sM×b¢$ß×ZÛJ©ß`ÉýZk)Bb†R*ø0hèn>‡©•Ø\ nç·¡^¯7%..Î5j”wРAx½Åë|_}õ•^¾|y0 þ¾dÁ»RêvŒŸG¨>å,°Ø*F‚‚ ÔE$"Üô¸âc¢Çã韖–Q| :¯×«–.]:I)ei­³ÜóKŠÍDˆ4T'J©æÀñ±‰)O|\]§øèâñxVõèÑ£éO<áõx< 4¨Þ×_­?ýôÓP{"°xúïÉK@?` Æ Õ…R*¸øÝÍg15ªIxÄ)–e iÚ´©9r¤·ÿþ¥„GˆáÇ«ÜÜ\ëÈ‘#Å®ƒùÌç Š Ì׊‘  u ÂM+>Æ{<žiiižvíÚ•{ü Aƒ¬¥K—ÞïæZ_¦X|lþRÃ⣠Æw$SÿNøD$‚ø¸Þ´«Žge—.]š=þøãWŇ»ÔÔTÕ´iSµxñâ>náþ£Zëür®×øÿ€ßHKP¡:PJµÆ~˜Ï.˜ ß[ª#z©”jâñx¾oYÖ æÍ›ëð°,+ê9–eqï½÷z^}õÕÛ•RO`\×ƃd¦­®˜ ‚Pç"ÜÔx½Þ1–e JKKótèÐáÚ'`Dˆ×ëUK–,™à8˜ ÀFࣀ)@ঘ¼0ì˜ÊŠgubbb˧Ÿ~Úi• _¿~(¥X¼x±‰ Eãÿº¿O)¥f–ØžìþçN?CB¡2”p-MÜbÌ.wUÓšz<ž;-ËÔ¢E =zôhOŸ>}Ê%iÓ¦ ]ºtQß}÷ÝíŽãh`¦Àü\L.‚P‹á¦ÅçóR¦M›f%&&^óøp¶lÙÂ;#ã8€y5,>
ÀmÀàÍpßW|<…1P»ˆ©ù¨°+»Rª½ÇãYÓ¹sçÖS¦L‰*>J²sçN.\hÿdÛö/£\÷#`b†0Zk½¼¢ãˆj¨\Œyà‘jGKÇs—Öºo»v휑#GzzõêuC×:tè³gÏÆqœw´Ö;«x¨‚ µ ÂM‰Ïç |?’øƒìÛ·¢¢"ºuëF½zõ¢^Ç!ÚqœOµÖëb<숸]sžÚùñq.ì˜ñÑ–­<ÏêN:u˜2eŠßçóUx|»víbáÂ…¶ÖúŸmÛþç×n1l çç˜V¼3/cµÙwA¨]”èhuÅ]¡Š0©’ß”—XÅãhí÷û‡ƒÁ>íÚµsÆçéÚµkÔã‹ŠŠØ·o^¯—ÄÄĨ‘‘ôôtûàÁƒ[ƒÁàû±» BmEˆpÓáóùFÃ"‰üü|-ZÄáÃÆ£Y³f<ýôÓ¸-y#RB„|*L¯.\¿‚'.añ¦ÖúTØ1•|´ôx<«Ûµk×qúôé~¿ßí“ÂØ½{7 ,°mÛþ¥ÖúŸ*x_é‚%\7®ßPLG«îæŠ Ë«EÄ*¥:ú|¾á¶mwéÞ½»3zôèrÓ<óóóÉÌÌdÓ¦M€"íÛ·gÆŒDúÌíÝ»—¹sç:nÛkI¿á–BˆpS¡”áõzS§L™b…¯Bž={–ôôtºuëÆ„ 8wîo¿ý6–eñ /”›£½qãF–.]j;Ž“¡µ>ë瀫©%a Ó ùá5U >nóz½«Û´iÓ)--­Œø8vì›7oÆãñ0tèP¢\ rss™?¾­µþÛ¶Q{‹*ŒRª&Ú‘Lq}âi` ]]]¡J nݺéüàV´Îz!V¬XÁ²eËèÙ³'©©©tèн{÷2oÞß ~¿ÿ±;ï¼ó¶—_~ÙzàT“&M"ž³oß>Þ|óM^{í5,Ëâ§?ý)<òÍ›7Dz,FŒÁîÝ»9rä………|üñÇìÙ³‡±cÇ–;–‘#GzÇâ6£A¸%ˆP«ñù|w:Ž3fòäÉV=Jí»pá´mÛŸÏG÷îÝyúé§Y°` .äÌ™3téÒ…»îº«B÷ÊÍÍŲ,Çqœ‚X< €Rªp?Fè¬ÐZ¯ Ûïø wĈyZë“×qý¯×›yÛm·uŸ1cFñaÛ6-[¶Äï÷“™™IçÎ¯Š³cǎѱcÇ ù 2Ä»cÇŽ{+:.áÖF)Õí(ixÓÑjCu™ï¹Múú|¾QJ©ø””Ojj* 4ˆzNnn.Ë—/çèÑ£ <˜ãÇS¿~ýЂÅUúôéCË–-Y²d çÏŸ§uëÖüä'?)·Fè¼úõë«K—.õrªà1Aj="@„Z‹Rê{–e}â‰'Tx¿ýøhݺ5=öØÕIs×®]™2e óæÍÃï÷sß}÷UhB››Ë;ï¼ãX–µÌ¶íK1zžÀØ ØF­õWaû=À#@g̪ð[×)>šx½Þ¯Z´hÑcÆŒþúõë—Ú¿qãFÖ¬YÃüc¦OŸÎܹs™;w.S§NeÛ¶mdeeñÜsÏUè^ñññ8ŽSO)å­®â`áÆQJµúÖ«W¯—ã8@ °ØKï÷ßsOLªaÉöQ1©y;ªÃ±Ü‹ìõz‡ùýþz©©©ž;î¸#j‹nÇqرc™™™œ:uŠ;ɓ'Ó°aCøüóÏ3f %£%–e‘ššÊŸþô'&MšÄСC+46˲èÝ»·µyóæîˆáAº` µ¥Ô@˲î}ôÑGUÿþýKí»xñ"ééé\ºt‰¿ÿû¿˜^uàÀæÎKûöíyæ™gÊMÁ:pàðu ø*ê•ÀNê;0EçN‰ý%;b0ç¯ãú½^ïòfÍšõûÑ~ä‹+m˱yóf–.]ÊO|˜¹sçϹsç˜&RÜkÉuŠx¯×ûEÓ¦MûΜ9³ŒøÈÎÎféÒ¥üð‡?¤d$©}ûö¤¥¥ñÆoЬY3:vìxÍ{i­ùÓŸþdoß¾½À¶íVtŒBõàNþûø|¾d õm·Ýf4È›””DÓ¦MCÕ³gO•žž~§Rê¨Öz[Ý»Ftô¥øÿ-çoMZë˜D£Œ¥!p‡×ë½#>>^5Ê;`À€2ß!‚Á ÙÙÙW#7楗^Š!ñûý¤¤¤™™Éˆ#J5¸ðz½¤¦¦òá‡2f̘2iZÑÈÏÏwljiã A„Ú„D@„Z…R*Ù²¬û~øa5`À€RûBâ#!!'Ÿ|’}ûö±hÑ"ºté“O>qrqèÐ!æÎË=÷ÜàAƒJís£$Žã8ßOcô<õ0‘ÖÀ `nx¾»Rênàû€, /J¿Æõã¼^ïç5òì³Ïúû}åääðî»ïÒªU+fÍšQ„;vŒ7Þxƒ„„¦M›F¸€ ¡µæÏþ³³qãÆË¶m×Zo¬è8…Øá¶kîá÷ûûƒÁ.qqqNRR’wðàÁ”ç_ñÅ_ðõ×_Ÿ ¿»ÑT,7µ©&âѶĮC§YÙ7ríOc¯×›â8Îà¦M›2zôhoÿþýéõݤ IDATËMà µðHMM%!! 0mÚ4"uܸ|ù2¿ýíoùÞ÷¾ÇøñãKí ƒ¼òÊ+W[‚_‹ÜÜ\,X`ƒÁ÷´ÖÛ¯ãqAnZD€µ¥T_˲š4i’2dH©}—/_&##ƒøøxžzê©«bcïÞ½,X°€Î;óä“OFœ`_¸p¡LÞC‡‘‘‘áØ¶½> þ5FÏca Ê»€7ÂÝv¼£0-Hÿ¢µÞt×oàõz?kÔ¨ÑÐHâcëÖ­¼û¦¦²zõjÚ¶mË”)S"¾GÇ'##ƒ&Mš0}úô2"DkÍ|àlذá²mÛ#´Ö*:N¡êQJyî~¿?9 v«_¿>ÉÉÉVrr²j×®]…êž._¾Ì¯~õ+' .ÖZç^çý[b<;’0‘=€ ° øVk}äúž¨òø|¾‘ŽãÜÕªU+gôèÑÞ^½z•û>lÞ¼™ƒrï½÷²eËúôésõ{åø^¯—3fD=ÿ³Ï>cíÚµüüç?/Sľyóf¼^/ýúõ‹x®ã8äææòå—_9bY–õM0\ËšA„Ú„¡V ”êcYÖC÷ÝwŸ^¼qqq<õÔSe&Ð!Ò±cLjûÃ9vì³g϶mÛÞ+ñ ”šˆII `\Î‡í „–O? ïˆuk×óz½ÅÇÇßõì³ÏÖkܸq©ýÛ·ogñâÅ<ôÐC$''sðàAÞ|óMZµjÅÔ©S#¦–äåå±xñbüñR{´Öüå/±×­[Wè8έõúŠŽS¨:ÜT½§¯Rª¿eYÞ>}ú¨~ýúYÝ»wš^To¿ý¶³}ûömÁ`ð½ Üß ôÀD;1ÜÀ¸•o¦šÓ¬ÂÆÖËëõ>üÄOxzôèQ!¶qãF–.]ÊóÏ?_¦SÕŽ;X°`³fÍ¢S§NÏ¿xñ"¿ýíoIMMeôèÑg¨¸ý‹/¾žùÄY½zõÇqF¹æ‚uwBßã·Òcø˜¨M+Ñn´¡¿×ëè8N½îÝ»ëþýû{úôéS!›òرc‹- 8Žó[­u Êý›{ä8À`-°¯¦ß/¯×ûÐÀû<øàƒ•G0,#ÐÊ+w‡ßÿþ÷4nܸ”±`8ü1›6mâ¿øE¹ ÇqÈÎÎæË/¿ ž={˲ÖƒÁ5Zë ×óœ‚ u B¢”êeYÖ#÷Üsuçw–ÚGåÅ_¤iÓ¦å^+$BÚ¶mËÔ©SËL8Jˆ-¶mCñÑÓnW Ÿ´+¥zbÚñ®ÓZW8 ãŠâââF=ûì³þð÷$77—… 2qâĈm@=zµÞ#RªU8Ÿ~ú©þú믋Ç«µ^YÑqÖv\_ŠÇ1Â#œ#À;599TJ݆[LnÛv“víÚ9C† ñ$%%Em[’³gϲsçNNœ8ABBÑZ΃Aþõ_ÿÕ¾råÊÒ’Åènú`gL ÝîG;ÎcºY­×ZçWúA«¿ßÿÌðáÃ#E"vìØÁŸÿüg^|ñÅ2ïÁºuëøðÃyñÅËŒgggóÎ;ïð“Ÿü„víÚE¼ï… 8uꉉ‰÷ƒA¶lÙÂçŸ,((@k½Ñ¶í¯µÖ1óA¸.XB¡”ê^žø˜7oqqq,X°€´´46ŒnRÞ©S'¦L™ÂÎ;ˤ`äååU—øè<€™°­‰ >ºPì’T¸ø])åóx<¾–ø˜0aBT‚¶mÛ^í|õÆo”+B>ûì3ýõ×_ÇW—ćKCLjÜ_˜4¢Æ˜¨UoÌßèÍêRª Ы^½zý6-Z´°ì8p 5òTäëׯgÆ >|˜Î;Ó¸qc–/_NNN?þñË|.¼^/}ûöµrrr’mJ©F@Lê`ÈäBßaÜʫͻãzp§àܹsšb¡t•öíÛséÒ%Ö®]ËðáÃKí ¥.®\¹²LÁx¿~ýX¶l™™™<ùä“ïÛ¨Q£2õe`Zõ®_¿žÌÌLûÊ•+Á`0¸SS-†‹‚ µ B ”êfYÖãcÇŽUá⣨¨ˆ à8Ó¦M£  €ôôtÒÓÓIKK‹ø?ü:u*“³}òäÉøØcñÑ ø!æsµø"lûû·NsÅÇÒ Œž5kVñ±wï^.\H½zõèÙ³g¹×jÓ¦ Ó§Oç7Þ`Ñ¢EÌœ9³Ì1Ÿþ¹^¹reÀqœ\OzØMÄà÷aïÿi¥Ô{˜Že”R ±ÎÍWJ5n÷ù|ƒ€Í›70À—œœLóæÍ¯): Ùºu+;wîä±Çcÿþýœ9s†—_~ùªXß·oééélÛ¶-bQtrr²Ú´iS7¥ÔS˜ÚŽJ¹€©íØX›¢‘°m{ÏÖ­[{?ðÀžp‘Õ¨Q#̪U«¸óÎ;ñz½ìÚµ‹åË—sêÔ):wî̦M›5jTcÁ#F°téRòòò®éhÅÂcùòåvQQQ  ®¾ÑZVõ3 ‚ Ü̈ªø3fŒ>|x™˼¼<¦M›F½zõ¨W¯3gÎ$##ƒŒŒŒkŠ’œêcRzâ€ÃÀû%凜jŽéˆår1ív+´’¬”òx<ž·ëׯ÷¬Y³üÍš5+µÿ»ï¾cÁ‚¤¦¦²yófÒÓÓ™1cF¹)kmÚ´!--¢¢¢2û¾øâ ½bÅŠ€ã8ãÃÝÚë Zë²n¶ÛJ©ã@3Ì߲ʈRÊÜî÷ûX–uµmnRR:uò]ëü`0È®]»ÈÊÊbçÎ$$$œœŒmÛ$''³iÓ&Ο?U€$&&R¿~}Ž=Q€$&&§ ºRíØìªÎº•dgQQѽÑDÖˆ#ذa|ðGåüù󤤤’’‚Çãá•W^aåÊ•eŒû÷ïOff&,W€\¾|™U«V±jÕ*ÛqœKÁ`p%°Yk¬êA¨ ˆª¥TWW|X#GŽ,%>ŠŠŠøì³Ï3fL™ö—Í›7'--ŒŒŒ«‘’«•‘8}ú4ééévaaánÛ¶ÿ«Ô7_þ!à6 S?(±¿!F|ÄG1.èšØ…ćßï¿oæÌ™þð<õ0þ|FÅðáÃ2d¼þúë̘1£\#´Ö­[—Ù¶råJ™™i;Žó€ÖzyEÆX—p Ó[a !ÏTáu½@WÇÓײ¬^~¿_õìÙÓ¡k×®ÄÇÇ“••uÕ$//¢¢"Z¶lñÚ–e‘œœÌºuëòÀ|­u•=wu¡µ.ôù|–-[6¤OŸ>e¢ Mš4!99™ 60f̆ Vª$d,8jÔ¨Riž^¯—^x!j‡±‹/²víZ½råJí8NA0\lá!‚P>"@„Jãæ{Ëåå8+¥ºX–õĨQ£Êˆ0999ìß¿ŸiÓ¦•©÷hÞ¼y™HH4rúôifÏžm_¾|9×¶í?Æ8o}4¦P7€éxuµÀÔ5j{hŽ™Ð¾mõ=W|,òûý“fÍšåŸ@j­ñx<Œ7Ž””ÀL´f̘AFFsæÌ!---ZTè!¾þúkýé§ŸÚZëIZëO*tRÝcæoõMeóõK¶Íõz½ý_¯^½0`@…Úæ:ŽÃ¡C‡ÈÉÉ!''ÇqèÝ»7“'OæÒ¥K¼ýöÛe:™Y–ERR999$''“••Å·ß~Kß¾}éß¿Ô{%%%±jÕªÆ/› ×ì3èyêÔ)Onn.=zô(s܈#Ø´i7.SŒž’’ÂÊ•+YµjãÆ+µ/Òß)??Ÿ•+Wêo¿ýV+¥Î•À–ÚX#‚P‘.X ᶑí‡q?U1®µ^åøŽ–e==bÄÏÝwß]F|„8yòäUÏhEçùùùW‹gÍšU&+??Ÿ×^{-xñ⎶m/‰e‰û><€I]y¯¤‹¹RʃIËê\ž®àu-dzÀçó=:kÖ,_xúÇ¡C‡øàƒxê©§"а .‘‘Á•+WHKKã¶Ûn+÷~«V­ÒŸ|ò‰­µ~Pký—ŠŒ±®¡”JžÂ¤]Í®¨PŒpö§ŸR* ¨×½{w=hÐ O÷îÝ+Ô67//¬¬,rrr((( gÏž$''SR´ñë_ÿšaÆ•ñ 8pà³gÏÆï÷sûí·“’’µKSIþíßþ-xîܹϵÖßÞÈsW7J©¦O’A@˲ìÖ­[«¿ù›¿‰RZ¼x1‡æg?ûY™‚ü+L©Sx¡zIΞ=ËêÕ«uëÖ¡”:2í5݆XáfCˆpC(¥Á¬úÇL¾;E€„ÄGJJŠgâĉQÅGˆ©_¿~Ôzüü|Ö¬YøqãJM$\ña_¾|y XËT·•ëTÀ¬(Y/á®~ßY™-æi­VðºÊãñ¤û|¾§ô£ù#¥J;wŽŒŒ lÛfæÌ™ë= xã7((( ---jûêÕ«õÇì¸âãÊŒ±®á6x Åš§µ>u׈óù|OÙ¶Ý:11Ñ0`€§oß¾j›[XXÈš5kÈÉÉáÔ©S$$$pæÌ^z饨õNüã9|ø0û·[j»ã8¼òÊ+ôìÙ“ûï¿¿ÂãÿàƒôúõëwƒÁ%>©PJu´îAqÁüI`°ß²¬ç¦M›fuíڵ̹yyyüîw¿ãá‡fÀ€¾g^^+V¬p²³³•Çã9Vj­wUþiAnM®m+‘ù+ð­õ\L;Ùˆ(¥ÚY–õô°aÃʈ`0±ºI“&$$$pêÔ)222¸p¡¬C“&M?~|DñqåÊ•}@àí‹Æ˜è†Ø d†rF|8˜š ‹˲þàñxžIKK‹(>HKKò,æÌ™ÃÙ³gËÏôéÓ‰gÞ¼yƒeߎõë×ãŠ'oañјŒI?š#âÀãñ oÞ¼yË—^zI¥¥¥y tMñ‘ÍêÕ«QJ±ÿ~î¸ã^zé%¦M›˜ÑHJJâĉ;v¬ÔöPMÇÖ­[#þͣѶm[åõzÛVø„jD)åUJõWJý#ú{aZîî¯i­7h­O)¥¶|ùå—£ž­Zµ¢gÏždffâ8×Ζ:vìK–,±÷»ßé­[·sgaQQÑ‚ •CˆpCh­ *’ïìóùóçÏ/%BŠŠŠ˜?>?ùÉO(**"===¢)I~~>³gÏ^¾|yQQÑ;1N»òbÚé6Â8g/ ëxÕé¾ü«Ö:·‚×U–e½æõz§Í˜1ÃÍü,DBBÂÕºéééQEHZZ?üp™\öõë×óþûïÛZëÉZëw+2ƺ†Rª&ò°Hk}²×J5j”§¢ÚNœ8Áòå˱,‹©S§2tèP6lHÓ¦Miß¾=YYQµ=Ý»w¿ZpNrr2ìÝ»÷z£Vu½RJ5RJþ“êØ#³?h­i­÷”üüÙ¶½âÀÖ"^s̘1Wk¦¢áššÚ¯¾úªÞ¶mÛ>Çq2\á] ‚ FˆSlÛNHNNŽ˜v•’’ÂñãÇyóÍ7),,¤¨¨ˆ… råʦL™B›6m˜5kŽã0{öìˆl0õ³g϶/^¼x(ÖiW.?ÀÔ¾\—¬pSyJ®¯èE-Ëú×ë>cÆ _ûöíKíËËËãòåËeÎ9sæ /^$ òúë¯sútÙ“† žŽRB|<©µ~§¢c¬K(¥Z`ć,ÐZ»Æ)å]Ë ƒeZ$‡ØµkÛ¶m+³=))‰K—.E ÉÉÉìÙ³'âßL¤£oß¾W ÔKÒªU+Z·nMNNN…Ÿaß¾}NeXU¡ Ý”R/#0Æ‘ùÀ—Àj­ß×ZŸˆt¾ÖúŒRjçW_}QLµiÓ†¡C‡–©«Â#˜žž®÷ìÙ³ÏqœôÂÂÂEZë#Uõ|‚ ‚!ÆX–uåÔ©È-íÚµcÊ”)?~œyóæñÖ[oqéÒ%ÒÒÒhР`R­B«ü+W–5ã¾p᯿þzðâÅ‹‡cv ”ê ÆÔ½,-iT§”JÀDF|¯e×qݦZë¿{òÉ'ˈ­5o¿ý6\ºtéêöýû÷3oÞ<ÆŒÃóÏ?ßïgΜ9D{¿Clذ!$>ž¹…#Í€)˜ _ºÛÚ†ýÔ/ïáX–å\¹¹qVNNŸþy™í!¡)Š‘””„ã8lݺµÌ¾ÉÉÉœ;wŽH«ý>ú(÷ÜsÏ5Ç}á¾úê+²³³)**ŠØD¢:PJÕWJ žÃ¤ÄõÀùƒÀÿÑZ­µ¾TÎeÉÍ͵޹¶np‡;vðꫯÓÓÓ={öìpçƒÁà¢ÊˆRA!:"@„˜ 7­^½:-ߺC‡¤¥¥qâÄ öìÙÃäÉ“¯ŠMš4aÖ¬YLœ8±Ôöø8þüÑ@ °¨¤÷F,PJµBNe™Zë=%öÕÃx}ÄÇ0u×Ó’³ÖÚ y7„Ý—É“'_íluñâE<ȼyó1bwÝu5bæÌ™4hЀ×_ýª™c8›6mbéÒ¥ŽÖzšÖú­ë_]£#æoe™~:UôbZkÇãñäK!._¾Ìúõë™={vð7¿ùþꫯÎ9޳Tkùbˆ+öî~†ù|Ý\¾Á¸ÕÏÕZo»žÏ“Öú¸×ëÝýñÇÛѾ{Ç!;;›ÿþïÿ.Z´È>~üø&Çqþ' ¾w£u@‚ BÅ.XB¥QJ Àt|*ÓK)ïõzŸ»óÎ;ëO˜0!ªà=vìsçÎ¥qãÆ¥" Ѹxñ"³g϶óóó7Ú2µ¢¸~30“£ï0õŽ»Oa"=€ó@†Öúüu^¿žeYgŸxâ‰}úô‰x̉'ÈÈÈ Aƒœ?žÔÔTFŽYꘂ‚æÎ˨Q£èÛ·o©}YYY,Y²ÄÑZ§i­ß¼žñÕ5\gúÎ×8loÉW®9¢M›6Þþù2ÆŽãðë_ÿš2nÜ8öíÛGVV[·nÅï÷SPPÀ£>ZÆ«cãÆ,]º”ŸÿüçQ=oöîÝKBBB¹¦“`ê«vìØÁæÍ›íÜÜ\˲¬Ë@v0ÜRÑ& U…[GÕ”,v:¬ÇxjTjAA)ÕIJ¬ŸŒ;Ö;|øð«i Á`ììl–-[<þ¼vç[ŒïKA9—Aª B¥)O€¸û;Z–5eìØ±ªäD œŠŠ‹/òúë¯Ï;—ç:7ÇT|(¥ÆL˜ò×K¦(¥F©˜®oÞèdÎãñ¼ÖºuëéÏ=÷œßãñD<æäɓ̙3­5/¼ðñññeŽq§L~{NNï¼óŽ£µž¥µžs#ãÊÇMëzþÅ_Œè»òÁ““ƒ×륨¨ˆ¾}û’œœLbb"sæÌ!..ާžzªÔ9………üò—¿dìØ±Üu×]×=&ÇqØ·o7nt¶mÛ†ã8A­õNÛ¶·¹ÕmœçFI¸Þ˜¢òmÀz­õá*¾_˲MNN¶¾÷½ï©£G’™™¼té’ ¿Öi­#Ù‚ 1CˆPi®%@ÜcºY–õø¨Q£¬Ñ£GG!yyydddD!………Ìž=Û>}úô‰@ 0Ok]X¥yìCñ˜AóK¦©¸¯Áäª/ÕZW¼ê·ì}Zz<ž-ƒn>iÒ¤È ®¶'öûý¤¥¥Ñ¸qãr¯»uëVÞ~ûmGký­õnt|µñûýÏ >¼e¸9 †ÄDÉ®dß|ó Ÿ|ò /¿ür™óo½õW®\aúôéC u••å\¹r¥Ô>Û¶7;cÙ!.nô°0èPb×Y`#°©"u•¸{ŸÏ7:töz½—\á±¾:¾;A„Ȉ*MEˆ{\7˲OMMµÆW®Y¶l<òH)çèâãt x³:V.•R­4À |ªµ^[b_+`:àÇt¼*[e|ý÷bYÖÊ””ÿĉ£¦¬={–9sæàñx˜1cFT²mÛ6Þ~ûmÛqœŸj­_­ìø„òQJ¥$$$ŒúÅ/~1 +šAàÅ‹ùÕ¯~ŤI“2dH™}õêÕ+ÓF9œ¼¼<¶nݪ¿ýö[»  ÀãñxMÑQí“m¥Ôm@J8•c|qöc„ÇŽêŽÀ‚ µ B¥©¨qílYÖäaÆEô‰Faa!sæÌ±Oœ8q&Ì­&ñáÅÔ}´ÂLâÞ)±¯¦P¹)°x«ª&SJ©ï[–õÅàÁƒëMš4É2%&e9sæ sæÌÁëõòüóÏãóùJíßµk ,°ÿß¶íßTÅØ„òQJ5²,ëÅçž{NEòqùì³ÏذaÿðÿP&MîÍ7ßÄqœ G:Àøßdee±~ýúàÙ³g=çX ÈÁÔP\¬ìó\/n3†~˜hGISÃÓÀ& [j-A„ò—Ô! n»Ì{Ã6UJuÿûK­õ×áçi­÷+¥®Zµê) B"$L|TKäÃe F|\> mt‹ÎÀˆ3ÀŸªr%Wk½Z)•ºqãÆ¯€“&MòD!Íš5cæÌ™ìÛ·¯ŒøØ½{7 .´ñQ­X'?+++!’IJJ"33“½{÷Ò½{÷Rûî»ï>âââ®yƒË—/³uëVÖ¯_LºÑN­õÅzõêMÎÊÊꚘ˜XæÕ©StÃP«7:ÙÙÙ8Žc»ms·RmsC¸-†`&ö%;ÅLþ·h­#ÛÀÇ–Zëíá•R[©À€A„Z†¡ ÕŽRª ð#LÎöàŸÏ÷¸Çãi:pà@«qãÆjË–-ö‰'.7´Öªql=€Ç1“Ê7BžîÊïS@ c6“êoÑ¢`"®øøO•Ã5Ê ‰ŽOºÎa:žíƸ¤—' vh­/¬\¹2áî»ïŽxÀ±cÇÈÊÊ"++Ë.((Pg ÈÂDQbn® ¥TŒèè„Ô“ƒ\›]Õí%r½¸-²ëaZþ ‚ µ ‰€ÕŠRê~Ìäæ®µ>WÃMÇòo IDATCºŠRênàû·óÿ MÝB×é€S“Ô+·“Ï1¶òÔðüu¥TK¯×û¶mÛ£Ú¶m{%>>Þ“››ëþÛ¶í¿‹Å¸ê2® åèEéô" ÃrÇ®§¶A)u»eY?ú裪ÿþœ>}šœœ6oÞŸï”+:¶j­ó+sýJŽÍ‹^ý1ïC¨ D°í8XÅî×K /¢ç€÷µÖjhH‚ B9ˆª·¨z &í…Õ‰;ùŸŠY ß®µ^Rbß}ƒ|à±*´UJýð"¦‹ÏCZëcqŸ[¥”…I§êæþ´¦ljÕnŒè8PÕ5îê|L]Ñ.­õɪ¼þ Œ§ƒ;ž>;”ˆŽm5áœ^Ü–À ˜ï—Û0ÅçÍ€´Ö›jrl‚ BY¤Dˆ9îŠó£˜o;ojvDeè‹…ÀÕH‚Rª;F|8ÀÒŠĈ ÌñQyÜIWŒàèBé(‡ÆøÔ„¢1-¤vS—VÄò×Âmü„-JìÊÇ”gk­kÄO¤*pÓ×B)l•R;€gqJ©›NP ‚ ÔuD€1Å]}~â¶¶ïצ”w|#Ü—«´ÖçÝíõ1ébkc•Ê¡”ú1ðÝ—§µ~#÷©ë¸ :QåhvÈELùLyu¶u®ÊI± yväPƒ­}c‰Öú’RjFtµ žE‚ BÕ#Dˆ5c0+ÑEÀ»µp%2Sßq ø¶Äöq@à4ðU,n¬”z øûòµÖÿ‹ûÔU\ò.îOx-‡¾Ã¤WÕˆq_u㦆R¬úRüžhà ©=©mŸÃXÐÐý]«;v ‚ ÜŠˆb†Rª'&[cºGÕhî{8nש»Ü—+C“2¥T7Œ0 »Ê[îºÝÀæbV¥¯µþ—ª¾G]ÃmОbò„°C (n“û]¸7G]ÆõŽ ¥X•|_NSœbUk»XÝ(n=˱ðº¥T/ŒwËyàDMŒMAˆŽ!&(¥Z`ÚÉ*`µÖz[ )ƒ€¦˜Iʸš¶23îµZëƒU}S¥ÔhàÌço>ðBUߣ.à®æ·ÆD7ºbVöK:0§UÝRM7M°Ft”ô,¹‚1°Ì¦îG~F­”R‡1Í|@KLKÞ ða]L1A¸Ù"T9n>þ#˜ô}À—5;¢²¸“Û¡î˯K¬ Þ…éžsXƒûÅ ÖÞÒêøñºK«JÄV–ä4FpìöÇʲ¶âþ»MĈŽ^€ßÝ¥1éfÙÄ32¬fÖcRÍÚbþÍX˜ÂúMÀ7µ-ê*‚ D€±`<ÆÌ¬Ó=ª6®@vÂÔ~b&m(¥šaŒÁ8´Wé$Îõ*øˆ¾¯ê–¯7®ó{"Å¢£YØ!…7ë=À×þ–C)u&Ú‘Lé«“˜hGV]L±ºZëíÏAá&BˆP¥(¥úbZ×jLÇ«J¹Åîï-%„ÆÌg"רTJ©À2LÊ× `Ò-R\ ·ëXkŠGgŠ»3Aéâñï0¾·d±Û¾º/Ft´)±ëÆ<[k}´&Æ&‚ •AˆPe¸…°÷º/WÔ&§ó’¸¹ó½Ý—›Ým!ψ ð×*¾_àsŒøXÜëúÜ\£[ÀYŠÇÞXù­Ü ¸nǤXu§¸æÅÆ×gcò-)ÊA„º¡Jp‹·ÆL.÷+kt@ås;¦X5Ok}ÄÍ«ãîûVk}¦ªn¤”ꇉ|4Ç0þ G…ª×°K‰Ÿð:Ž  ŽïêúûQ”R-1]¬PÜ>LŠU6°ùVð.An D€UÅxLšÈEà½ZZ÷¢›û{·û; 3ö+Àªªº‰Û†øsŒÚ&`b]œl+¥aR©:cê9¢Õq„‡sõ} Õu´.±ë¦®a³ÖúxMŒMAb‰¡Ò(¥ú`ZÚjLÑymŸd·wïsS^F¸¯WUUj”Rª¦‹VkLš×Ýu¥€Ú­Mè\âç¶°Clà0ÅQŽ#µ\VJ©z˜îUý0b-Tÿvb¢ßÉû%‚ ÔeD€•ÂíuŸû²ÖÖ}„pÍ욺/a&‚M1»ÖUÑ=z`ÜÓÛ¹ÉŇ۩ªfœˆªÄ!¡Âñý˜¶Ën¡6°×ĹÝ1ÿÖBéPìNžl¿•k_A„[   ãÖ}„ü>öS»ë>B4ÆLž/cR®†¹Û¿© O 7íêKŒøÈÆÝlâÃ]¥ ŽÎ˜(NIÁ¡)+8dò\·®¨Ftô”Ø} ÓÅjKUÖ ‚ ÂÍ‚¡2ü3Ñ. ö×}„¨ïþ¾‚™¶Àˆ‘ •½°Ûíê L„ ù8]ÙëÆWpt Xp´¡tk\€Á±cxËtñº”R­15E}1b7ÄyŒ_GŽÖúXMŒMAj "@„B)Õ Lí÷û'düç¾çþ÷ºÊzr¸>Ÿcº]mÄD>j¥øPJ5:bDGGŒid¸à8EiÁQPC¼©pÛ ÷sJÖÃ\Á“oÁ¼‡âx/‚ ˆnwòûX]Ûë>Â8ïþn4Á’M•¹ Rjð)¦ûÓj`‚Öú|ùgU®ñ_KJ Ž&=C±àØw ÊÁ­‹ ùu$Rœ¢ÄÞoÃÔuT:­OAê"@„ëÂÍmŸ„ñv8Š)¶¾iÐZ_RJôâ=‹é|uÃbA)uð1ÐSsOMNÞÝ"ûö Žö”5þs0ø‡0EЇDp\¥”bÑÑ•b“ÀP1ùvLŠ•¤§ ‚ B9ˆ®—Œ¹\¦åîÍèȼ˜ÄcÒ¥n¥Ôà/îu21çÕšªä¦ÿ´£ütª+˜¶¸!ÁqDºTU WttÃÔ õ¤¸ƒÀLzÕ6p‚ ‚PqD€F)Õå¾ü«ÖúTMާì^7Ääìï¹Þ (¥îÞÁµ<\Ù:’ ܳÐ#8Úº?á.ãçp#îïRPq\ÑÑ…bÑQ2‚tØ dÝÄÿþA¡F"T7µç!ÌÄ}‡Özs ©2tÀäéÇcÝ:‰5¤+¥¦é˜ÏÏ{ÀUQpÓÜšaÚß¶rÚbҼ±1-qSœNU+êOn&ÜN`=0&Ý(é8‡‰šmÓZ©á ‚ BBˆPQ~€iY{ø°†ÇRYºaÒgbÒ–îz(¥¾ÒZï+ïD¥Ô ÀaŠŽÓµÖÁòÎ)çZ SÞÜý ‰–€?Â)pS{sÔ}†¼›4 ®Æq É{`"](ý}x#:¶k­ÖÀðA¡Î"D¸&nËݷܽ\ÃCºa”Rñ˜è‚¼…ñkûÿÚ»óè8«;Íãß[«vÛ²dYÞ$cccˆ16†¶ 0Òd£IBh2é“Єœ,CwO'§'ä$™Éth’Ò“d€0™Ä$,&6ƒ÷EÂÈÆ‹¼È‹ö¥¤Úïüq«Ê’-¯’J^žÏ9oJT½oé}_ùäÔS÷þîDþÞÓ¼›¾´ÏZJg€ÿ’z«Ÿß8Ù¨IjähHj+†r$p §ç7íÝÅp½7‡R´ªRßt[½ê2z’ƒ[”`n«½š¶&""20@ä„RKî~,õŸ+O6Bp—z<œªÙXgŒÙ̦ãFyÒÝÑ1Æ4!à³À¸ö+àOÀl—KðájAºoy¸)SÝ;`÷&û¶½!µ¥GÓ9ÒØñ¬gŒÉ.¦÷ÐQ Û4Ò!""’ r\©oý?Žû½·ÒÓ¹nDê13—?U3±Øó:®è¸W'RšÚþ7U'‰[õê0pÓiüÎ0nêZKê±6þ— ÎSpÓ«Æq¤O¸ék[qÓ«ÎÊf‘"""ç39‘«pßÇ8w—Ü=ÚÐÔcóÑ/¤ É7§¶ôª_ÏãÂG ø!½/Ûkq!# tu{lZµämvcJq«Kp+…¥C‡Å鿇[@ᘿ½ˆˆˆdˆôÊS‘où_=¾)N–ídŒ™¼Œ«h>a­]1Àç&§!µzYîo4WÛ“fZÜHÇVkmköÏPDDDz£"ÇH}°û$®@z}hÖwJ}·g‡1fn¥¯Ànà6kíÖ?59cLn³É©Çî56q`PÔ¨9 ˆˆÈÙIDzsn KXx!­dŒù$ðqE䛀ª÷Ãà2Æ Ç‘OÂxt/"áV®ÚìÐt7‘³Ÿˆô`ŒÅ‘U ‡MíÒu,ÇüÛOõøø)à^îÔ·èÙ—êD^‰ é9µ ÜÊU5©mß…EDDÎ ’‘úà÷)Ü7Ì[¬µUƒ|J¡·*Rº$}Ý?îK=õðõó¤èþœ`Œ)æHਤg”8®iävÜÔª¦¬Ÿ ˆˆˆôéî&Žt;yÏe ¤W@™bû?ã¦%¶Öþû Û#Õ ±·ÊÚD\SÆîZ€p¡c—¦V‰ˆˆœ?@cL%nÙ]‹«û8g»ŸDmêq¢1ærà` mŒ)žÀÚƒëoò-…3“á¨àHè8:p¤‹Çw¢iU"""’¢rKM½ún$`­µöƒA>¥cŒ™+6t¿À}#«1fŸµö„Ñ/tÆ”âj7Ò£ð¨ÝÀ~\óÆZ`µ6–½³‘sÈ…íFŽL½Z2Èç2`Œ1÷ãš Öw€/åÀÝÆ˜'ÕóãˆTÇñ1GmG×pÄé8ö*pˆˆˆÈÉ͈¸0cÆà>€àéó±ðÜ“‡ëéqoê©…À½éÑcL!ðE\k\ˆ]ÏS+T•àBÆØÔc îßFwQ\à¨Å…Žý """rº@.@©œ_Æ-‹ºÑZû ŸR¿3Æ\ü˜Š›ôàakmò¨ý†ŸÃõIo+Î×ÖÆ/îZGâFÊ2 ÐËq÷{ÃGß?‘Ó¥r2Æ\ÌÃÕ@\ýÏŸ­µUƒ|JýÆSŠ[å꣩§^þÁZÛxŠÇO> M=Æýí¶à ªÏÊoÿ1¸ ‘ÞJRÇ9¤ 8L=µB•ˆˆˆdƒH?1Æ<üü»$q¤ ÷¡6ýX“ÍoÙ1£OMÖÚÿ—­ß;ÐŒ1þ÷ nyÝ_Áûø€ËÙÀðn/uázXìÂ}`?”­iZƘ .¥·!Ý‹ÜÞÔÓ-l¨ÿ†ˆˆˆ &~`Œ‚›ê“?vìX¾øÅ/RWWGMM 555>|øD‡Ç€í¸@R¼‡ûÆ}‡µ61@çëÖÚÎxÿlJÝûÿ‰«iwÿî²ÖnîãûÜr³—ãý!? 4ãºy7í¸“0éös÷bè¹’”'õ¾y©Çî?ç§~.êåw-}.õ@Cê±h8—§‰ˆˆÈùI¤cæ“ê ¾téRæÎKkk+tvv‡éèèàÀTUU±fͶlÙBSÓ ûß…­ô-©vkªŒcŒ¹ø nÕ¦$®·Ç?÷w3ÅTÑþ(à"Ü*QåzÓ@éZq#Ý·fÜhV<Ëç#"""rF@úAzúUAAõõõXkI&“=6k-´µµÑÙÙIWWmmm455±fÍÞzë-¶nÝJ$rÂÏÏ%I?n°Ö6 ðež5Œ1ÅÀOpKèà}à‹ÖÚw²x…¸)ZÅÀ0܈E7Z‘“ú9'µÅpæÓ"Ýþ;Œ ]ÇylZ4’!"""ç ~`ŒùàëÓ§OgÕªUÔíoäÓû#ʆò¡©•Ìšs ×ÌžL à;&$“®®9=J‡ …B™`²qãF^ýujjj2ûGøðßjêÖÙÀs'n¤cîCü¯qõZ±IDDDä Nèýãb€‰'°½f?;?8HñðBÞX¶™gþ°‚¶ÖNü~/ÃKŠWQÊ%—aæU™5{€ŸÏGQQgÂÆ¬Y³¸÷Þ{‰D"´··ÓÖÖFCC7nä/ù HŸCx0õøõ¬ßfŒ¹×ÍüúÔS›û¬µ«í¤DDDDä´)€ô‰p$€To©%7/È­·ÏÊìǨ?ÜBÃáêµòÆÒ*þøô bÑ8 ŸâáTN(ãÒËÆpå¬ L6Žô,¿ßÏç#77—’’&L˜ÀÌ™3ùò—¿ŒßïgÆ <ôÐCìÚµ Ü´çMI™wM <<¢º‘sH¥V”ÝÈn†Í'‰wßeÃQ6 ;õÈñ¡Ž.h¦¡¾•Æú6^xv Oüï×±òòƒ”• ¡r¦ͨ`þG¦âóyH$XkI$„Ãab±W^ye:€œsêR»ÿx7Ý à/À׬µµƒvb""""Ò' }Wø.¾øbjwÕST\H(;~H¿àó1rl)#Ç–f^JÄ47µÓÔÐJSC;Û߯ç­7ÞgÞüKñzM·I&“C¨`hC ;:Z;yó•µäæ…Btvv ÉËË#cŒéÞkäœílnŒ™ü¸.õT®ÇÇ#ZJDDDäü ÒwS\\ @(al^Îpÿ4ÊÞ¿·‘1c]Sn¿ßOqq1ápcLfë@ªûå—f‘1æ&\Çõ©§B¸•®þ‡ºv‹ˆˆˆœ_@ún"™~ÕÔÔÇãÅ Òî}5\›ù\‹^Äcqšµpho¡¶N®¿é|>·”o0ÄC4ÅZKcccúÐs"€¤šû}<ÒÕúQàIà{ÖÚÇ9TDDDDÎa }×c¬ý{ñûýàóÓŽŸVEx2™¤³5Dk}íí¤{´øý~.›:€¦¦&òòò2A¤¡¡ææfb±ÌhËY=Ë3ø/ÀW€ÊÔÓ!\Gó·Öî¤S‘,Pé»=@ví:L $–€ø k@\¸ˆÇ“D:ºˆ´wngúøüþ{ŸP™~‰Dðz½466vŸ~Õ ÔõÛ•õ“ ÜÜ nºÔ]À­©§ƒÀ?žä˜yÀmÀ§€²n/¿‹k*¸ÀZîïó‘³—HßTâšãeF@öíoÆïó‘èŠBl2I2'Kbc ºç/¼©0q"EA|>D£n1¨ÜÜ\’É$Æ:”Þµßê?Œ1yÀ¸Q‹Û$xR»ì¶Ö¶uÛ?¸¸ø07µÚaàÀSÖÚõýuž""""rnQ雉é&L˜@cc'^—D{¤ÇŽ^ øÏìv5 €œœü~?ñxǃÇãbŒ)ÖáF- ½—Ê·cþë×1Ž¾Ù ,^–¨s¹ˆˆˆˆ(€ôÍÅåååÐÑÅðŸð Ssä3åE߯×K(ÂZK}}}úå~)@·Ö0ÆÌ–¥¤FyŽryjëî0.¸¼ ,¶Önëó‘ó‡HßôX+‰þãL«:Î’»'ý%»ÒÞÞŽÏçÃZ›)@oll$Ï ,ôÛ,kícÌL`0žžÓ©’ÀsÀ6\訶XkóF"""""Ý(€ôM ‡µ»Ñ¾”÷RÊG»ôô(K2™$ÓÒÒÒ}úUCkíAcÌUÀËÀ‡9BÀ笵ýÓiQDDDD. }Óc ÞC‡Úñoôã y<†!C‚$n”ÃZ‹µ–x©¯¯ï¾Ö{}¸–Ó’ 9m g®Ç¼i£GñÉ;.ÃÚKéꊱiãA6m:ȃ!’‰Ó_kx‰Qñûý$“I<‰D‚ÎÎÎîÓ¯Zkút5"""""Y ræÊ***z}ÑZK0èeæ‡Ë™qeÉd’}ûÚY¿îµµítvž|)¯Ï“ã%™ì9àL&1Æt_kkŸ®DDDDD$K@ÎÜjàηÞz‹C‡QVVvÌÖöñ5*Ÿ‘#+I&“tuÅØ¼¹‘í5­46…I&)ÈóóàêNŽ*@ŸkŒY,–Zk×õùêDDDDD€È™{ø×mÛ¶_tÑEÌš5‹Ûn»yóæ1mÚ´ÌN½€`ÐË•W–0}z1Éd’=µT¿×ÌÁaÂáC‡ùy¯×K,ÃC]]]úipSjóxxXf­ õë•‹ˆˆˆˆœ!s¼ÈrrƘ À_€)ÝŸ¯¬¬dÞ¼yÜrË-\wÝuøý~¬µ$“Éné}Z[#TW·R^¤¼<ØãõôÔ«ýû÷óÕ¯~•x<Î×¾ö5jkkY¶lGŸfØ´¿žS¹ˆˆˆˆ >2Æä7·Æv=77—«®ºŠ›o¾™Ûn»‘#GžR9Þ–H$رc»víâßþíßX°`óæÍ#‰ðî»ï²|ùrV¬XÁæÍ›{y ø„µ6~ô """""M¤c&ãF®?Þ>“'O榛nböìÙÌš5 ÇsZ!¤¹¹™ºº:V¯^Íã?Ž1†|ú§:æwíÛ·7ÞxƒeË–ñꫯv_²÷akíw∈ˆˆˆœˆH?0Æÿ¸ŸTwôòòrî¿ÿ~Œ1,]º”•+WvsõÕWsà 70oÞ< NBvìØA8æ…^`áÂ…îºë.~ò“ŸœðW®\É=÷Ü“ž¢µÃZ;ñ„ˆˆˆˆˆ ¡÷‘1æËÀ€bpS®î¿ÿ~î½÷^b±Éd’[o½•Ÿÿüç<óÌ3Ì;—µk×ÒÔÔDSS/¿ü2/¿ü2^¯—+®¸‚믿žY³f1eÊ”^_8`ÿþý€+PÏÉÉ¡££ƒÜÜ\¼^ï1ÇÄãqV¯^Í5×\Ã’%K.2Æ«ô)""""Y¦ÒƘÿ ü¯ÔÏÜ~ûí|ç;ß! ‰Dzì;sæLžzê)Æǽ÷ÞËž={xçwØ´i»wï&‘H°nÝ:Ö­s+èŽ;–¹sç2gÎf̘Ïç#“L&©¯¯gãÆÄb1¦NJcc#àæååQPP€Ïçc×®]<õÔSŒ9²ûRÁQ`¦1¦×Ä0‘…Û%""""¢)XgÊ3xðLŸ>þð‡Ìœ9“ºº:b±Þ› ~ë[ßbÕªUÜyçÌž=›ÂÂB|>---¬[·Ž 6P]]}LxI²çççãñxX±bmmmÌ™3‡Gy¤·óãÍ7ߤ©©‰¼¼‡D"Á¶mÛØ°aUUU45?<(­9œIDAT̘1ƒG}”œœœÏwtt°`Á† F~~>‰D‚@ ÀòåËyå•Wj=ÎÛv5ÖÚm§{ODDDDDNFä c€áßþö·ùæ7¿I Àãñ‡iii¡££ƒD¢÷™M+W®ä׿þ5ÕÕÕx½^ÆŽ˘1c())¡  ¿ß5 ŒF£ìÝ»—]»vqèÐ!¢Ñ(¥¥¥|éK_âŽ;î8æ½×¯_ÏÎ;ñù|D"‚Á EEED"V®\Ék¯½Püð—·ÏZûVŸnˆˆˆˆH/TrŒ1 PPP@aaaæµx#GŽäꫯfúôéÌž=›ñãÇsN‰D‚_|‘‚‚Œ1D"|>‰D‚d2Innn÷Ñ”Æ\ÞÀº3¼5"""""'¤r¬µÖÓ ”ÔÕÕežO&“øý~’É$^¯—¼¼<òòò1b™@’#ãÇgüøñ|á _\ˆ…B´··c­¥°°üüü^W¶ênÏž=lÞ¼™üü|ÚÛÛW7‡ñûý$ öìÙCuuuúÕ½¼MXk­ÝÑ·»#""""r| §ÁSÜŠ%hJöìÙÓë¾é%x­µø|>òòòÈÉÉ¡´´”®®®c€×륨¨ˆ¢¢¢Þ:˜÷jåÊ•x<B¡Æ¼^/±XŒÜÜ\¢Ñ(o¿ý6¯¾újztå]`ÃQoÓ¬´Ö6œÖ 9M §(ÕåüRS¯€0À|ÐëþÖÚL3Áôò¹@€`0Hnnn&Œ´·· …Ž[3Ò›ÖÖVªªª>|8Sh‹Å0Æ…B,^¼˜÷Þ{/}ØRàé£ß Xf­ Ÿò/9C*B?EƘ%ÀMÇ'ÓÚÚšyí†nàž{îácûXf Vo[º#™LâñxÈÍÍÅçóáõz‰ÇãD£ÑL9ÞR¾ÕÕÕäåå±{÷n:;;±Öâõz‰D"âñ8õõõ<ûì³Ô××D€ÿôVXÞ,¶ÖFzyMDDDD¤_)€œcÌÝÀï>ô¡ñÈ#PZZÊž={øíoË¢E‹2#C† áÓŸþ4Ÿÿüç™6mZ¯Á£·ÍëõRPP@^^ñxœX,†µ–ÖÖÖÓ´b±$²}ûv‰^¯k-‰D¿ßO4eË–-,Z´(b{sykísEDDDD@NÈó à›À5€ÿù矧¬¬Œp8L$!''‡ÂÂB–-[Æc=FmmmæØK/½”Ï}îsÜqÇ 6ì˜Ð …عs'#GŽ$???3]+ RXXHQQ‡––¢Ñ(û÷ïÇÆ hjjÊÔ–D£Q|>ÖZºººxå•W2ÝÔ5À'¸Ìðšµ¶c`ˆˆˆÈ ½0Æ ~|!ýÜ5×\Ã>HWWãÆ#ÐÑÑA8&SVVF4eÁ‚<ùä“tvºÏü@€ùóçó™Ï|†ë®» @žþy¶lÙÂŒ3˜:u*ÅÅÅäææfBJ~~>EEEŒ5І†~÷»ßeº¤§û|ø|>âñ8MMM,X°€Ôª\ `ðp²?pð†µ6Ú¿wQDDDDäX G1ÆÌžÆ”””ð™Ï|†o|ã :”ŽŽ6lØÀ¨¬¬dĈ477ÓÕÕ•Yyª¬¬Œªª*~ùË_²zõ‘oËÊʸãŽ;ø»¿û;***ðù|„ÃaöìÙÃÆihh ²²’±cÇ2dÈ‚Á ÖZ.½ôRª««Y¹reQ”ôHMM þóŸÓØÛpá©ê.w°ÊZ?éž"""""ý@¤cÌ÷o€yóæñ£ý(3ʇ)**¢¼¼¯×ËÎ;Ù´iÅÅÅ”——‹Åhnnάx5~üxü~?Ï=÷=öXº €™3gò©O}Š[o½•ÜÜ\Ñh”ºº:¶nÝŠ×ëeÖ¬YÄb1FÅ–-[Ø¿? ™Þñxœ+VðÚk¯¥—í­~4ŸÂånÖ[ý‘,RI1Æü-ðpý8xàî»ï¾Ìýî[,#3zôhJJJ…Blذ¶¶6ÆŒC^^¡Pˆ;vpã7’ŸŸ1†µk×ò›ßü†—^z)SXž——ÇܹsùÊW¾Âĉ±Ö’››K"‘ ‹ÑÕÕÅ!Cؼy3ííí´µµFéèè`Á‚lÛ¶ Ü4«ÅÀpÓ¯NÄâ‚Ƕ»™"""""ÇqÁcÌPà)àvÀLš4‰Ÿþô§Lž< ×Ò}‹D"äåå1a‚Á »wïæ½÷ÞãÀ„Ãaxàòòòèìì̬– …X´h?þ8555ðì³Ï2bĈÓ¬ÀÕ{TUUáñxhjjbçÎ<ýôÓ455[F÷?é½»ùÑâÀÛÖÚýýzEDDDDN‘ˆ1OP^^Î÷¿ÿ}&MšÄèÑ£3àd!¤ûVQQÁèÑ£‰ÇãXk6lX¦S9™Ê•#|ð÷Ýw[¶lá¶Ûnã»ßý.>ŸD"‘é†ÞÚÚÊþý.3¬X±‚ßÿþ÷D£QpKëþpà.µ Xn­=•éY"""""Âû½ï}o°ÏaÐc|ÀïßüùóùíoˤI“ؼy3‹/\oô2¹§bß¾}¬_¿žÊÊJ‚Á`¦¡ ÇãÁƒÇã!““ƒ1¯×ËòåËÙ±cÛ·oçü#{÷î%??Ÿ²²2Œ1ÔÖÖFyòÉ'yñÅÓáå¯À¿-§pZM¸nçí§}“DDDDDú‘o°O`y€$Àå—_Ζ-[ÈÏÏgÊ”)Ì›7÷ߟ—^z‰`0ÈôéÓ©¬¬$÷ÍÚÚÚX·n>Ÿ––jkk3S´***(,,$dŠÈ#‘«W¯æâ‹/æµ×^ ££ƒ… ²páBÊÊʸþúë±Ö²|ùr:nÕÓÀ’㜆ZéǰÏZ{²Ú‘§)XÆ,nºä’KxàÈÏÏ\ÝÅèÑ£3f ñxœ 6P]]ÍÔ©S™2e @€ÎÎÎÌԫÇóÖ[oøìg?K4%‹F3›ÏçcÆŒx½^vìØÁ믿N2™äá‡N–¼ |(êåt[q£õü>ܲ»a ¡ž""""r¶R1æÃ¸éLþ`0Èœ9s˜?>eee™}ÊÊʨ¨¨`ذalÛ¶U«VQXXÈå—_ΰaè­­eÉ’%äæærÏ=÷`­í,Z´ˆP(„µk-?þñikkx×Ï£» „+$ïLmõÖÚS©ÿ9k(€¤crp«a=LL?_QQÁÍ7ßÌUW]…×ëÅZ‹ßï§²²’1cÆ ijj¢´´”¥K—2~üxFE<Ï„—^z‰ &pË-· …X¼xqðQSSÃO<.X|ˆàj9>¶[k[³GDDDDDúŸÈQŒ1¸øWàZÜô'†Ê7ÞÈu×]×cU¬qãÆQYYɰaÃØ¼y3+V¬ ‘H0wî\‚Á «V­bÔ¨Q|ä#¡¹¹™%K–‰D°Ö’L&©¯¯çW¿úíííà!þ@Þ¶ÖŒ{ """"2P@NÀsðÏÀg@ àoþæo2u"éQŒáÇ3aÂÊÊÊØ»w/ï¾û.uuuL›6o¼‘ºº:Þ|óM’Édæ˜={öðÄO¤§^íꀿZk»ëºEDDDDŠÈ)0ÆŒ¾ü#®(c S¦LᦛnbêÔ©™P¸âŠ+(//'`Œ¡ººšõë×gö±Ö²fÍþô§?¥W¾Ú üØ ¬±Ö&ëZEDDDD’Èi0ÆÏãFE&§Ÿ3f óçÏïQ'põÕWÓÖÖÆ¦M›2Á£³³“gžy†õë×§ø °ÞZ»)»W$""""’] gÈ3DnÃ54dÈ!\ýõ\{íµŸŸO0¤¾¾žd2ÉÚµkyî¹çÒS®À3¸ºíÖÚµƒu-"""""Ù¢ÒGƘK€î‚~¿Ÿ«¯¾šk¯½–ÒÒRÖ®]˲e˨««K¶x7õjnôC9ï)€ôcL ðnÝ’ãì^^š€ÖÚºãì+""""rÞQégƘ®Näë@%PìÞ–ûpk5ê!""""”ê)R ä1 EË늈ˆˆÈ…LDDDDDD²Æ3Ø' """""ÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉšÿµ¶?¨óŠIEND®B`‚lasso-2.8.2/docs/lasso-book/figures/PaxHeaders/slo-sp-soap-4.png0000644000000000000000000000013214404126130021406 xustar0030 mtime=1678814296.057811404 30 atime=1678814295.985810996 30 ctime=1678814323.173965632 lasso-2.8.2/docs/lasso-book/figures/slo-sp-soap-4.png0000644000175000017500000015440614404126130024670 0ustar00bdauvergnebdauvergne00000000000000‰PNG  IHDR ¡™Ð< pHYsÊ&ó?tEXtSoftwarewww.inkscape.org›î< IDATxœìÝy˜Tõ•ÿñ÷©¥7¶FVAE â‚(Ä]¢ ƘDÇ%‰Í2c~.q~Iœ_2“ŬšŒQGCL\@\£w\YEEDeï­–óûãÞ[Þ.ª›nzSúózžzоõ­{¿Õtwx?¹ÄcþÐw÷z‚m^Ûmj/ák¸`Uç”踙'ºns÷mM<]º9 """"chxÿF‰Ç–—8%z?cfïÇo|°b2 ÄóV•8¶™`TGº¨¡q/“èß7tðµå#LU°DDDD:F”€ÝÒò¶‰ð9WÙ&Æ”ª:•/q¬Ã¹ûF3»øB˜Œþpð´»¿Òs’ """"cex?x·è±âŠV¬”<éî/uÀ|Zµdü¯ o+ V]´ú!ÍÒ,‘Žñ@x~ü ™ðÅãÿÞ«ƒæ³.¼ïÛÂñï!»55ÀÝçϼƋÀŸÛ0Gé´""""Ò1æôß8ßÌV”Ç­¾ /1þï½<>–äý9AîG?‚»Ÿ#¨¨uïNÎg~xÿS3û¸ûÂRƒÝ½ÞÌ^¦šÙ¥Àêð¡¿¹{&6ô7=Nö~îî5;9?é&´""""ÒÂrµgÏW$žÏ>\ÒÌø_‡÷s ¶n-îFñA°3~OÐ/ä´ðþÏÀŒ<çB‚îí? Çÿ™ ˆŠ»ˆÊùª÷‡ì©A¥ˆˆˆHÛ„]ÇûëÝ}sÑc ‚F€{T¬zH”°}ßÝ7–8ßnÍ«÷ehL 7ð¦»çŠôp÷RÕ¶0³ùÜ}ƒ™Uƒuî¾¥Äø²ðñ°" –¢Çzï/»û¤&~E" @DDDDd§™Ù¿?>íîÊÿR"""""­&Ò_H°Šóo¼Æ¯Äˆ”¢DDDDDZ%ÜV–€ç€q÷%];+ù¨P""""²‹2³½GÝ}i Æï  <èî¥:¸‹´™ÊðŠˆˆˆì„0‘{vÑá­Û‘þèîMu4ï,4<ØaLÇŠàuˆ´;•áÙ9ià‚NçÂ[AiÛß÷›Yºë¦ÀZà!ÚV¾W¤]iDDDD¤m^v÷£ÌlwàAàx‚•‡ÿ骉¹û\‚-X" @DDDDÚ‘»¯6³ÿþ@„ü™íœ <¼| ,t÷ë̬ð‚mS)`!ð¿î¾.:·™MþîîkНmf‡¬ÊÌv÷•Í倘Ù‚îêý:®ßÚÜë2³jàlà IÐTñhÜ)À w¿ÉÌŽÎúÿ­Du """"! z…÷ûäVü7A~Å‚íQ#ëÍì`0XÔß5³3ÝýÑð<»…ç|¯Äu Œ'èNM䀘Ù9ÀÍÄkáœþø]©cfG3 ‚••Õ¯.®4³©îþBløeÀ¤0Gæ:`3àÀ_ ¢‘ptx_܉ü2à> »ïœaf)‚?îw¾èîÝ}/à$‚áΰë9AÊ»Àya/Ž3Û8 ¸«¸{ѸáÀoÃóŒu÷‹‚âñC¿‡¹û^î¾AÂ:À_ÂNéqåÀ¥Àqî^žÿ‰¦æ$Ý‹‘¶©4³áí03»Šàù,Á*CÜkÀWÝ}€»oNns÷Âxw Ãx?‚-[„UµþìYtîsnÙÁ|/ª€o»û¢ð¼\E°í«Ø¥@5p»?›ßsÀÕÀÞÀÔ¢ç$€+ÜýáØ¼»×î`^ÒM(i› À²ðö,ðÀ&à³îþbÑØ9îž/:w–8÷ŸÃû£bÇnïÏ‹„«!Ÿ'Øõðæ;1¼ÿ{ü`„ü­Äø€`¥™}Ì̉n«"lõ*V\¢XPˆˆˆˆH[½FÛAþÆÀ"w¯/1vU‰cÃû·K<¶2¼p÷fö q·¬|\ ÔòAÂúŽüx 8?\=¹‹ ð¿” S4þà4‚&„ÏšÙ7Ãçœ|xµ…×—nNˆˆ4ËÌö~O‰½¿fö:ðIw¥Ó'¶½c(½u@D¤£d þ`_Ý‚±µáØâ\ Üý*3[ | øexø=àûF)÷/$€ßïî¥Î½-¼î–صòf6 ‡ä,‚U-áÏÏ”þÝïföYàià_Çοœ Š!µš _¤$S~ˆ4Å̪ jÂ"ø`ú+Áâà‚oç¾ìîtÙ$CaWßîþ³®ž‹ˆH[˜Ù ‚„kܽTÒz{^«Š ÏÈwohásª ’Õ×4QéK¤Y @D¤IfvAgÜëÝý²&Æ”µôCKDDDDIè"Òœ¡áýóM (|˜ÙÇÍì.3{ÛÌÖ˜Ùfö™ãþÕÌþlf}ÌìÛföª™½gfŸ4³ÿ1³’«f–6³ÛÌìû±cךÙM%ÆV™ÙåföL8—f6ÇÌÎ-1vzøØ;f¶ÚÌ0³“šzí"""Òz @D¤9ÑÞ3ͬ¬%O0³/‡÷·,Õÿ¯™}·høaÀ àÀ×ùÕ`#¨3ºÄeNÎ!¶§™ äô¢¹ôžþ“ >þíÉ–åû¬ãc¯ NPm悤ûûÍì‹-yí"""²cÚ‚%"M ÿ€ŸO°²˜< <æîo–¿?ð 08ÉÝ·„ÇÓù#Ó€±î¾(<~ AÉBàXw_;×Ç ª´üÐÝ//ºÎ]À'€aî¾*<öXxî~±q7ÿÇÝPtŽAî¾&ü÷ Àƒá?­ê„å0#¨•?ÌÝßoÝoPDDDŠiDDšä€;ÀÅÕNV˜Ù‹%¶']¤oFÁGxž ð]‚÷œO•¸Ôµñà#ô° ø\¼î¼™õ'dŒ‚Ršôç‹ëJ¼¶5±¿L°BòÕø–2wß>·gxMi#•á‘f¹ûJà¬p5ààp‚-Pã ¶'Íp÷¨AÖááýqf6¹èTáý>%.óB‰ëº™ÝJP~òD‚r“Ÿ!èà{KñsŠŒ%Øjõ´ïx©÷p‚’“Ÿ7³âÇvofÞ"""ÒJ @D¤EÂÕ€{ÃÛÕfv)ð3‚õQR ä¦r&Õ¢YßÄø[k€óø 9ØümSîÞ¿»ƒq}‚š‹šx|9A i# "²SÜýz3»Ø×Ì*ݽØ@<>¾‰†X­½ÆŠ0·ãt3ëC‹rpƒ»×íàéQ¾Æ\j#Påî#w~¶""]'̵; 3ù@‚""¯T1\Ú‚•`‘N£DDvŠ™¥¶8å º<|˜JPEª=Ü KЭw¿Ø±Yl&™YÊݳ͌}Š`›Ùw¦ sétfv&Aµ¿}›ò¾™=<Þž/‘w'Òi”„."M2³/›Ù÷ÌlÏ¢ãÀ=€‡Ã$s€_äRüØÌ.zŽ™ÙÑfÖÚU†™Û¶þø,°ØÝŸÞÑ“Â9ý’ ¬îO€)>Ÿc?þÈÿS^n7ö¼¡À—€‰M×"÷¬˜D}6Î"¨¦um˜CÒÔ<$Xýø™»¯.1æb`»ÿGÑñp6p&ATCPš÷OîþpÑØú† T$°¿FÐñ wÏ75G‘Žff} ¾úW‚-°Œ5Šk¯½–ã?ž–üM·aÃ^yå^~ùe^~ùe^zé%V®\òïîþ_1‘ˆ‘±ðË K€« ¶SÑ¿.¿ür>÷¹Ï‘JZvöoº›o¾™+®¸‚\.°ÀÝǶËÄEš -X""""RfvÁÖÓ1ååå|éK_â²Ë.£W¯^Í?¹jjjX·n£FbáÂ…£Ú|R‘P""""ò!cf{ÿÌfúôé\}õÕ Ò’êâ;öÒK/ñðÃÓ«W/ÊËË£ÃÉv9¹H3€ˆˆˆˆ|H„Uÿø6A.ûí·ßûÞ÷8öØcÛåù|ž?ÿùϼÿþûôèуl¶Q•ríÍ—§D¤1³)Iá‘ A%«×J%“w63ë ¬îp÷¯´`ü `p“»ÿ[O¯©9ô'H¤ï¬r÷'»b"òÑgf§”P]]Í·¾õ-Î?ÿ|’Éæ&ZšÿñÎ;ï0gÎH&“d2ÊËËãÏW"NˆH÷òc`t‰ãµfö_À5]\~Ñ€¾„ßúµ@¢•ãÛMØøëÇÀ°Øá»ªm‰ˆ´˜™@PÝê€D"ÁŒ3¸öÚkéׯýZ=ñÄ,[¶ŒL&ƒ»ãîTVVRSS¦D:œ‘îép‚æ)àcý2®"(—Ûš>ím+A ÜB¿Ý÷wªÓˆˆ´Š™ ÜK˜{1qâD®»î:ÆŒÓnרºu+=ô7n$“ÉËåH§Ó¸;õõõTUUE° øléP @Dº§Ü=ú´yÆÌ–Q"13öªÜýµ¢Çö hNø®»ojˤÂ9Íkêq3ëÎã}w_ß’s†]Ü{«[2?3ë^c»olf®¿$è´Ž™í‡i%3«þ$ÌüÇ0}út‚·Üö1þ|–,YÂÆÉçó…UúúzÜòòrêêêH$ÑS´".±ã!"Ò î²ðšÇšÙïV_$€Šˆt¤Ó~fÆþðÎ8ãŒv >²Ù,=ö ,`Ó¦Mäóy’É$eee444N§I$d2*++ã‰è @¤ÃiDD hl• Øé Fðù{à‚•Ììào[¾F8~ðUàcfv°»¿çÙ;ÀÌì;î^_tÝó V'î n*ä{Á\àW@Ž`µæŽR/ÆÌ¾NŸ1¸€ £ùQÀ7QfvX¬ózExÍ_|ð~X¾6‘Žt(Àøñã5jT!!<•JÑÐаÓ']·n .ä7Þ(äz”——“Íf ׈V=Òé´V@¤Ó)éæÌ¬ øAøã#EïœëîˆO?%ø:ÚÝ…ýÝÌÞ Ïu9ð­ðøÍÀ€S™±ó Næ¸ûêfæ·AIÊùÀ QcfwO”?øÀÓÀdw¾Ö»ÏÌ–7>¿,zj 8ØÝké•»í¶‚¹Qž@EEÙl¶ÅU®V­ZÅüùóY½úƒ·ÕŠŠ jkkI¥R˜ ”——S__O>Ÿ§¼¼œL& W"N[°Dº§;ÌìÏf6 xƒàò5UXâV·C˜ü-|D®¶ÓcÇn²ÀyEc?KðGÿÍ;˜ë´pÜ/â+(îž~Vbü üw,øˆÜ Ô>Å~¡àCD:Y—Ðuw‰”••Ëf³$“É&·hår9Þ~ûmæÎË»ï¾ @*•*¬pTTTÏçÉçó…mXeee˜™L†t:ÝhN"I+ "ÝÓ‚o¹r[«^~ãîk‹Æ½îîÅFû†÷ó‹OêîÛ¼‹±f–t÷œ»¯6³9ÀÉf60vó¶9ݳƒ¹îÞ/,ñ؂ǢÒ1ß4³‹›8g©6¯•8&"Ò‘¶ @â?»;Ùl–\.G"‘ —˶O¥R)‰©TŠ\.ÇóÏ?Ï‚¼%VTTÐÐЀ»SQQQxN´Â_‰úD—ï”W.Ýš‘îéðX¬æl.q,úšl[ÏÙF°ºš"p Xå8…`Õã'fv0pðËy!ÅÊš¹^©c•áý@©æŠË ÊæëòFŒ"Òí8PØnµqãFªª‚¸â $“ÉÏçÙºukaµ"êò§?ý©°åÊÌ(++£¾¾žt:M>Ÿ§¡¡ÊÊJjkkI&“¤R)êëë I"‘Pˆt* "ÒZÑ ÆÐ&l( ,î!Xí8ø lǺ¥•×{¡è±½JŒ7¼ÿ½»?Ø‚ó‹ˆt•<y³gÏæÍ7ßdòäÉŒ1‚ž={n·=  ®®ŽmÛ¶‘H$ضmï¾û.î^èíåx444’ºººBÞ‡™þ‹õQ"N9 "ÒZϵÀf–Ž?`f“=(Jƒ‘Û *d|XàîϵàzsÃûO–x¬Ô±(è8·çéJ¶`rÊ)L™2…çž{ŽüàÜyç,]º”-[>X ªZlÛ¶÷Þ{3£²²²Ðç#\@?RQQQ8–L&Éf³Û•äÏI¤#iDDZÅÝ·˜ÙÀeÀoÍì+î^cf£€ß|{öãO½¸„  Õ@‚ÊX-ñOà9àl3»ø‹»»™}šíÛî'èkò93{ ¸ÎÝ·˜Y?àÓÀÛî~w ¯_’™U£Ã£•˜j3;$ü÷&w½-ב]^£ž={2vìXÆŽK]]+V¬àé§ŸfýúõŒ9’áÇӷo_***pwòù|!9=Úr•Ëå 9uuu…à"êx^SSÓ¨H4.šZ‘N DDvƉìçç˜ÙZ‚!à2w¬ø îþœ™-ÆTÅ*®®URlœ< üxßÌr@5A©ßŸ”&ÁŠËw€o›Ù*‚Þ"ý>\/hýKÞÎH‚Õ ¸ccÇî>Ñב]LøeH5EH$—Ë‘L&>|8#FŒ ¶¶–·Þz‹ùóç“Íf9øàƒéÛ·o! +‰D‚d2ICCC!¸H&“…U‘ø¸t:]XQ"IˆH÷ò  7-[bÿ4¥“µ ›øffÇÇ42|ø«»/k期'¨jµ¹‰Þ5ÀY ã×{ÝÌ Ÿ?Š /d&A¢ù*‚Níññï'™Ù‘ÀñÀ ‚ço¸ûÛ±á'HL_Ò̼KYε)Mö6‘îËÌŽ7nÜÃN<ú裣^°}9^w'“É`f :”#FPSSƒ™QWW×h;V}}=eee…jVQ"zT +—ËrAÒé4Ùl¶Ð¤®®.^ÞWˆt8 "݈»ÏiÅØ;[0æ¶o^ØÜø›y<”¼®»ofûæ45>|ΓÀ“;˜Ób`qscšxÞ¦æ®-"Ò„N<ñÄÄGAuuuõwÜQ@-ZDß¾}éÓ§O! ˆ—ä­­­ÅÝ ãñ¤¸Ôn6›¥²²’ššÊÊÊÈf³Ž¥RÁŸ€Q’ÍÚ&)‘§DDDD¤óüö†n8÷ñÇZ_ Œ‰µk×rýõ׳Ï>ûpøá‡³÷Þ{—¬„ß²=¯|•L&I$…ò»Q`âî…\hÕ#^Š7¤$tép @DDDD:‰»¿ ìef#€_S¢€âãÿ8'Nä7Þ`Á‚<üðà 6Œ1cÆÐ¯_?zôè?Oá> 8¢|Ž(Ç£ø°Ý6¬(]¥3)édî¾ÜÌž¦Ä·R% †ΰaÃ8ñÄyçwX²d Ï>û,ƒf¯½öb·Ýv+4Œº¥G½=H¥R…-UQŽG´ +“Éš¦R)ÌŒL&SØ’…é @DDDDº†%“УcƒfРAd³YÖ­[Ç[o½EUUU!`pwÊÊÊ HpÄ» Ç«a¥R)êêꨨ¨ ¶¶–t:]BBYD:˜‘®±]ÞøjHôs´ÒÑ·o_vÛm7’É$[·n-Œ7,J¥šìŒå‡D¥{C @¤Ã©ºˆ|(™Y…™íÞÕóé@…$x¬]»–šššÂ øcÙl¶ÑcQ)Ý\.W.¢€ÄÌ Ñ3™ eeed2™F+%ѱép @DäCÃÌ’fö/f¶¨Þ1³f6×Ì~lfg›Ù°®ž§ˆH;)¹²téR.¾øb~ýë_³hÑ¢B>G©>!@£à"›ÍzD+QÀQ__O2™$™L¶ke2­€H§Ó,ùP0³)À€‹êÞ¢±k€gy±ÀVwßÒñ³iV@"Gy$Gq¯½ö>ø 3gÎd̘1|ðÁôëׯ0. B¢¦ƒñŽ(1³BÇóâ\(pÉd2ñ> "Nˆˆt)3;ˆ ð8)ü™ÓO?sÏ=—ŠŠ ^ýu^~ùeæÍ›Ç‚ ¢mƒ€O„·¸3û3p»¿Õ™¯CDd'4Z)^á9r$ûï¿?uuu,[¶Œ¹sçâî~øá 0 0.ªlÕÐÐP8¢íXù|žt:]è ŠDR©Ôfö#wÿ÷Nû-H·£DDº„™íü_à „ÛA;ì0®½öZ=ôиC=”³Ï>€ºººB0òÒK/ñòË/³bÅŠø‡vUx¾ fv”»oè´$"ÒzÍ&¡GÝÏóù<Æ cß}÷¥¾¾ž|>OMMMal*•*Ùl–\.WXíH§Ód2òù|ÉÊWñ!}úô¡²²òßÌl8ð3àŸŒDÚéTfÖøð  À^{íÅÕW_Íi§VHš,¥¢¢‚ &0a„±M›6ñÊ+¯0#pÜÕ IDAToÞ}úpÍ5×ðÔSOqúé§cf­>oŸ>}˜O>Ÿ/”ß-//‚„õâmXù|žùóç³uëV À•W^Ù{îܹ3fΜyË…^¸¡OŸ>O™ÙåfvHÇÿzdW¥épf6¸ž0‘<•JqÎ9çpÅWпÿ6ŸßÝùÓŸþĶmÛ2d¯¿þ:@ß6ŸXD¤c•LBßÑjHñ*q"‘(lÊW»Š‚‹t:M.—#“ÉPUUEMMMaV6›m”?R[[Ë7Þ¸9•J-=âˆ#ÆrÈ!6räHª««9ãŒ3ìóŸÿüù|þˆ—_~™C=tõ¼yóîf»ûÖü]É.Dˆˆt3ë|¸pÅuòäÉ|ÿûßç€(ùœÖn5^¿~=·ß~;étšT*¥J."òQ²]zsG\|ûUt‹‚²²2r¹\¡$omm-©TŠt:]h@?V___è¬^SS³˜P__¿ÞÌ>òÈ#'§î¿ÿþ§qÄU£Gf=ö`ذaüèG?Ú½¢¢â¢·ß~û¢‡~8[YYùx]]ÝÝÀ]*"ÍQ""íÎÌ’ÀÅIæ»ì¹çž|ç;ßᬳÎj·ë<þøã,X°€t:]øO$ ;K•4)"vÛ%¡CÓGSJ2™,TÊ—Úç}444JöÖÕÕQUUE]]@¡ZVh‰»¯Ï¿¸¸ÕÌ’‹/žœZ]]=mâĉrÈ! >œ>}úpæ™g¦Î=÷Üãjkk›7oÞO8à€U‹/ž Ü<îî… ˆ(‘vcf `Áv«TVVòÕ¯~•K/½´°ï¸­êêê¸ûî»Ùºu+‰D‚\.G*•ÂÝã+ @DäîÅI襋Žg³Y’Éd£¤ò¨a´*’J¥ «"Ñ HÔˆ°¡¡¡°BÝ=Ì oß6³‘³gÏž–L&§?þ„‰'¦FŽÉ€=z47ÜpÞ‰DâÒ¥K—^zÇwl5³ î¾°]{ò‘¥DDÚE¸Ýê^àˆèØ”)S¸îºë:th»]gñâÅÌ›7šššÂ¶ƒxU—Ø H¾¹óˆˆ|”,ÃÿwK¶dE•¯âIåétšl6Û¨V:n”œ•äM$Q%ha'tw_üø¹™U=÷Üsǧ <øô£Ž:j÷±cDz÷Þ{S]]Í7¾ñž<ðÀñ€€ˆH;W>þB|Œ3†ë®»Ž‰'¶Û5r¹=ôï½÷^¡.¾™¾Ý‹’,£R’hDD:€™Uä´åw÷º6œ®ÍIèÑÖ«(Ÿ#ÞÛ#•Jaf…¼úúz̬° «²²²° +öåM«éܽ†à ¨{/›ÙØ™3gNK§ÓŸ˜8qâ‘[¶lɵö¼²ëR""ía p Àå—_Î׿þõFuÛjÍš5<÷Üs¬]»¶t%YF¶ÑžçX)_ "ÒçG?ÄÞsò@Žà½§xÀÝ_ÙÁ¹Z•„ÞÜ H´ý´8I$…²²22™ Ùl¶ð¾=7¶}µÍ•<Ü}>0ø¡™Uiw_×ÖóÊ®C}@D¤=|`ôèÑ\rÉ%TUUíTOR^}õUž~úiÖ®] ºQB%%}£=Ïù|^+ "Ò¡ÂêNK ‚¸o À‚œ®Éø¿›{,Úzm¥ÊårV£¼(9=“ÉVE‰Dá={èС{Ü}÷ÝÍž=»]’öÜ}£‚)¦i{yä‘ 8°°2‘H$¨¨¨ “É´º¼n]]K—.eÁ‚ÔÖÖâî¤R)’ÉdaÿrCCCa5$Ú†£DD:Êà+M<–î“¶wd»H©²»Mý;J>Þ#KmÃjhhh”/mÊWȨ®®Þ-•J}ÈÌš5ëõD"±8—Ë->å”S6´àõˆ´ˆi7Ñâd2IïÞ½ IâѪD´mª¹`ÄÌØ´i‹/fÑ¢E…±åååd³Yòù<•••…„Ê|>_H²Œ•’ÐE¤£ÔïÅT³À"w_ÑÂó´) =z^S[®âÛSã ãÛ°¢/o¢s%“IÏŸÈçó˜³fÍz?‘H,Ìf³‹jkk—Ϙ1£%–HI @D¤=ä¡ô7vù|žT*UØbm€ P‰m™"N³aÞxâ Þ{ï½Âøt:]¨Ö%TVTT>lã͵bäZ‘vefeÀáÀd Ô¥2Àƒî¾­§nôåÍÎö‰V†kkk•ä‚‹èXpÔÕÕ5ª"•éH&“;\=v÷2ààw÷Y³f­Êçó¯§R©…'Ÿ|ò›èýWv@ˆˆ´‡F‰”Ï>û,C† ¡ººº°-+þÁ™Éd¨««cóæÍ”••1pà@Ö¬YÃ#Oyy9÷ÜsO¡ȸqãÞlåk0`H"‘’Ïç™5kÖ6w_’ËåöîÝûµcŽ9¦-eŠe¥DDÚC£}Ìk×®åúë¯çÀd„ Œ9’^½z•ü ­­­eË–-¬^½¶eE‰æñ€£xë@´åª¦¦†²²2ÌŒL&£if¶'p"0< À>ûì³ôŒ3Îx½•¯¡X3ŸJ¥ÆoÛ¶-ß}÷½åî óùü¢ÓN;mMÏ-» "Ò ßâ™§žz*S¦Lá­·ÞâÙgŸeÖ¬Yì³Ï>Œ;–AƒÑ£G£­Y[¶l)”Ò'T&“ÉÂ6¬èƒ3ª®o¤­”¨ ¯ˆ´…™õŽ#ØZe[«žæ6Ñtpp÷wvârÛ'¡·f5$*ô8¢¼ø{iü òòrV¯^Ío~óV­ZÀèÑ£^}õÕìÄkØî5%‰G²Ùì:à€d2¹Ÿ»O$ÓfÍšµÎÌ®Ÿ:uj};\G>€ˆH{Øî[<3cÈ!ì¹çž|âŸ`åʕ̟?Ÿ'Ÿ|’¡C‡2|øpvÛm7ÊÊÊ ¢Qú(Ð(.Yª‚Kñ‡m¬›¯i13«ŽŽ øûÈ zy<èî›z^Xn÷é¼l£í«ÍE×üàa¡¨#zô¾5f->–J¥x饗¸é¦›¨©©!™Læ¦L™òØ%—\2o'_C|^u‰D⎓O>yaxè 1{öì½Ýý€D"Ñïä“OVð! @Ddç˜Ù àÍ·úCén¾Ñë{ìÁ!CÈd2¬^½š×^{Þ½{zw¸{a#¾åª©mXÑJI” 5áŠuóUˆˆì™¥ À$ "<¼˜ãî½eh»IBÏf³…à¢xV*•*|QÓÐÐÀœ9s¸ë®»pwzõêµù’K.¹{òäÉ«ÛúBÌlm*•ºõ¤“NZ[ü§Nº XÖÖkÈ®Cˆˆì¬ï\uÕU—öïߟŸüä'¬X±¢Qµ«è¹Hôí\.—£ÿþ <wgëÖ­…qѾä¨bĈeW]uÕ¬¶G’øK[·nýËŒ3Úá\Ò (‘U¿téR Äž{îÙ(¹óÎ;éÓ§ãÆÛ®Vt«««kÔ$úàŒr<¢ÑxÀ‘L& AHTÁ%Z‰Wà )‘’JT¶Ú<¼²‰ämQ@òù|ü ”å‚DÛW3™ Éd’D"±]ô|>ÏòåËùÕ¯~ÅúõëI$ùã?~î×¾öµgÚ:ywÏ»ûý§žzê?Úz.é^€ˆÈÎúîwܱùÎ;ïüDeeåa€E%!:ê(^yå~ñ‹_0hÐ ÆÇÞ{ïMïÞ½¦¿ÝËd2Û•Õ!@!ï#¾ +¾5K+ "Ò”•­jÒ¸²Ugz+úǪU«:tèN%¡G«ñmXQŸ¤§žzŠ[o½•††ªªª¶]|ñÅ÷œp +ÛaîÛR©ÔmS¦LikÕ,醀ˆÈNq÷à{À÷ÌìOÀYQ¾ÇðáÃ:t(S¦LaÕªU,_¾œ»îº‹êêjöÝw_ P(Ëž«° Ú«ñ î¾]rzTJ2:¦Nè"RÌ̪c ¶\µ¤²UgY¬|õ«_å‡?ü!#GŽZ¶ ËÌ M£€#*ÚQ[[ËwÞɃ>À!CV^yå•÷ :´5›òvCCíӧOo29_¤9 @D¤=ÔÂöIèfÆî»ïΠAƒ˜0aï¾û.o½õÿüç?éÛ·/cÆŒ¡¼¼¼p’ðºBRy2™,4ŒWp‰'Yær¹BRQQ¡F„"R°³•­:‹»»™]üúé§Ÿ¶£>šI“&qþùçsÌ1Ç´h5$ŸÏ¶§F¹ ëÖ­ã¿øË—/ਣŽzúòË/Ÿ›L&Ûã‹™g¶mÛö·3fävš©lõ€»¿Ûe+ÁÝo0³åÀµî>ñ‰'žà‰'žàÀä‚ .àÄO,¿ÝÏQƒÁL&ÃâÅ‹ùõ¯ÍæÍ›)//¯;ï¼óî;ýôÓ—·ÃT³‰D⮓O>ù¹v8—ts @D¤=´¸›oT©¥ªªj»æ[чh´ +›Ír<¢ŽçQ5­òòòÂJ P\bIè]±Ÿ[DºPXÙj4AžGuxø‚ΪlÕjîþ ð ™}ø0íÕW_µË.»ŒpÖYgñéOš>}úDã ÷Qî]CC³gÏfæÌ™äóyøîW\q÷~ûí·©­ó3³Édò'tR{䎈(‘vÑ(àƒñÿøµµµLœ8±ÑV«âÜxo0XVV|\ÄëÚ744V=àƒäôXº‘n$¬lu08<´ xx¡“+[í4wxÜÌþ8{ݺué_þò—üö·¿eÊ”)œ~úétÐAÀ9 555üö·¿åÅ_àCyñŠ+®x´²²²ÍÛ¤Ìlq.—»cêÔ©5m=—HDˆˆ´‡’[°† Æý÷ßÏ]wÝÅAÄ„ 9r$fV²ñV"‘(tî­ªª*ñºöQmÍŠWͪ¨¨Ð ˆH7cf{¬xìêêÊVmæî¯çšÙ·/544 ºçž{¸çž{Ø}÷Ý™2e C† áÍ7ßä`Íš5¤Ó醳Î:ësÎ9gQ{LÃÌž:uꃨ¨‡´3 "Ò¶Û‚UÃúÊW¾B.—cåÊ•<þøãÌ™3‡#FpàÒ¿ÿFK´• ªàmÊ¯Š¤ÓéíŽEåw£¼ÐH3ëéî[;û—!"ÏÌúÆT¶ÊÏvqe«vãîïW›Ù÷³€&¯^½:qóÍ77Û§OŸ ßúÖ·î7nÜ{m½®™Õæóù;¦M›ÖŒÈv€ˆH{pò;šê~>pà@Î>ûlr¹«V­â…^àÀ¤wïÞ…ç$“ÉÂsâ £’¼ñ $‘H”܆­€ôíÛ÷€­[·¾dfcܽ¾³!"Ò1̬8Ší+[=äîºrn%|ûð‡þýûï¹Ç{|sݺuÇäóùj3+;ꨣæò“Ÿ\\]]ÝÈW—••ÝzüñÇ·9iŠiy`»-UÑ¿‹»Ÿ÷ë×SN9…|>ϦM› ã²Ù,©Tª°Ê•ÚM¥‚·ªxô¨Ö}¼ zT wïÞLš4iäŠ+Þ3³¿÷sÜ}s'þ^D¤˜Y8 8†ye«Ž´~ýúUÀ7b‡lΜ9}³Ùì 3˜Ïçºû 3hfM§”þð‡Õ›7oþÑ /¼ àC:”iy Þƒ£Ùúõ¹\Ž­[·¶lE÷ñŒxùÝúúzÌ¬Ñ H.—Û® º™žof|á _ wïÞ=*++?¿zõêÏßÿý¹ž={>¾mÛ¶9ÀÝî®í"rMT¶ZK°âñZ—MìÃçL™ò>ð>Ðè=íÎ;ï¬ìÕ«× |>?(‘H r÷Aî>èÝèîyw¿ÿ±Ç»˜df“ÜýýÎ{ ÒÝ(‘öÐ( }G³Š‹JIf2™Bp‘Ëå «¥Žâ!ѱ¨H}}=×]wÇ{,ûî»/½{÷擟üdò‹_üâ±555Ǿøâ‹ÿyÐA½óê«¯Þ ÜKð-ª¶j‰|ˆ4SÙêEwße›šÙ0àwoS?£3fÔ+Â[Á<У¦¦fp*•êgf=r¹Ü’ÓO?Ý€Aáíi3;ÒÝ×·åú"MQ""í¡dÞRÿnî±(àˆç‚DÛ¬¢~Ñ6¬(·$ B¢2½ÑÖ­[—_½zõwžþùÕÀ©£F:õ裮5jdÿý÷çg?ûÙeee½óÎ;Ýwß}™t:ýx6›½˜éîo·ûoIDZÄÌ'û…‡>ò•­Z"\í9 8ø5°®#®sÒI'm–…·È¹@=Ð Ø x. BVwĤ{S""í¡ÙNèÑ¿›z,z^´åx¤ÓéªGCC[YQQQh@˜Íf ]УcQ’Ífov÷ÿ^âV3«X²dÉ$à„êêêOMš4iäøñã6l}úôáœsÎI_tÑEÇ×ÖÖÿôÓOÿtäȑ˖/_þà!à±¶~)";ÖDe«—€GÜ}[Wέ£…ù3€¡¯»/€4a*Ð3üw9°'ÁJÈİ—H»Q""í¡ÅЛzÌÝI&“…UhVYYY¡H.—£¾¾¾„ÄËïFAH´ hÔ4+,ËùPxû¶™º÷Þ{O1³S9äO˜0!9jÔ(ú÷ïϸqã¸ùæ›G¦R©Ë—.]zù½÷Þ»ÍÌþüÕÝÿÚî¿=‘n®;V¶Š3³Ýs€J‚ןáƒ|—ÎrAÐI»ϘÙ“ç#»0 "ÒJnÁjéjH´’Ïç G*•*$ñT*E]]]¡ünÔ7¤®®ŽŠŠŠøšÝ¦áîK€%Àͬ×óÏ?"0uèСÓ>úèþ£GfÏ=÷¤wïÞ\|ñÅ=¾ño|öñÇÿ¬™Mp÷gÛüÌ, L"øã‚mAv—ÊVf68…ào²(Hý:qûðÁêG\š ÿæñ0éÌÙ…)‘öЦ$ôH"‘(™L¦Ðñ<Êû¨¯¯'‘HPQQQ肞Éd Ï©­­%‘HDÕ¸Z¼OÜÝ·þjfýñLK§ÓŸ˜}úÆ|ý"Ò3«&ØjuT¶zx4,Ñ­¹û3ÛJð»‰JÞRfÖ£3ª¹ûœØ¿ÝÌ>GÐüñ:úúÒý(‘öЪN襒УûâmXQ©Ýx?\.G>Ÿ/$§GÕ°¶nÝZXI&“æîûºû¾eee§Íž=ûw_ ,zî¹çV^sÍ5Ýi«‡H§3³*àHºie«V:4¼ÄÝ—šÙ à0 Ðå‡ç SP"@ˆˆ´‡|XìLº»z{d³ÙBYÝ(‰o¹J¥R˜Y!ï#Ú†'©TªQ€áî{{ÇvØa5÷Ýwßëf¶4›Í.<í´Ó¶tÈoE¤ “«'T¶ª/è.•­ZÃÌ Àë· §5 8x¸ ç »0 "ÒÚœ„A—ót:»7ª| ŽøJIÔ½…9 UfvpP:>cÖ¬Yï‹êêêy晫·”‰HË™Y88† ›6À*‚7ºj^vîþ®™ý èåÅûW»ˆ»¿Üef 3«r÷š>© aƒÅJ ïî›Úm’ò‘¦DDÚCJ-ÍÿÈçó…Žç‰D¢Q††̬°å*^!+¤¼ûî»…Þ½{×¶dâC***N¼ï¾û¶¯år¹…étzÉÔ©SëÛúËÙÕ…•­¦ƒÂCGW>,T…ÛÔ*÷ª2·föàçáíÚ4‘Hì[^^>í¾ûî[›J¥ÕÖÖ.ž>}úr´UKº)3ëOPÙj4Aõ¦ ð 0W•­Z&ܲ6žà÷·¢kgSÒ“Ààp3Û-Ü–ÕbfvðàÀÏ:`~ò¦DDJyƒ ;oo‚J,‡˜Ù `!°4ìqh¼Rx ÐãyQpïŒ%ª×××¶cÝqÇÌ;€êêê÷¿ùÍoþ}üøñëÛáw°<—ËÝöâ‹/n›0aÂ^Ùlvt2™< —ËN§Çÿ¯®!ò‘ö¬8† ×#Aðåà À?ŠÞdÇFÕ«Í«ºz2ÅܽÁÌþ|‚ Sú_Zú\3K·/7 DŠ(‘RÞ’á¿á `$ÁV‹O˜Ù\w*¤4 @ uIèÑ-êíétšL&C*•j”÷±nÝ:~ó›ß°bÅ F½ðꫯ~ W¯^™6¾vO&“O™2e6?í´Ó øvr0köìÙ̬w¯!ò‘bfeÀáÀd <<¼¸ßݵ5qçÞ?Û¥³hÞ‚d ­@€oô}ïîùh›­HDˆˆ4–ÐìMðÍf¢øáðö:ðØñê„OBnñèœeee444L&13.\È7Þu>ÏM™2å±K.¹d^[_»»7är¹?O›6핦ÆL:õC—,*ÒQÂo²Çl·Š:s¿ <èîovÙÄ>âÌl7‚ŽðuÀü.žNs¢…'·ô f¶ð]àûî¾°#&%} @D$J¼ìG°ÂÑÔ{C† øøKQ>Hv> =ºO$…âjXÑJÈý÷ßÏ]wÝE>Ÿ§wïÞ/»ì²»8âˆ5mþ%Àº\.wëi§ÖçùH³à+ëÑÀñÀnááõ•­ª²U›Nðe΋î^Xµ ïýzU¼oVuEwÝÌ–#ÍlôŽŠ0¯åwÀ›À;cŽòѤD¤› Ë#Ž$X&ߟ¶\AÐk+°;¼Od ºÿ½Äõ@!O#ÒÒÕøÊIqo3#N³eËnºé&^xáFŽùú5×\3«_¿~íQ&wá¶mÛþ4cÆŒ•îÙ•…%uO ø#‚Däü±¬jFmþ‘~ ÁÖÕ狜ÞÄóæë‚êb·|1Õ’ÿûŽ>îî*a.MR"ÒÍ„e3?Œ%hYI`¼îîëÃeW€{šøæsÀš5kx饗8ðÀ ´vVTj7^~wÅŠüò—¿díÚµ$‰üäÉ“Ÿþæ7¿ùd2¢YK” IDAT™lÓ·°f–w÷‡§M›öªh%Ýœ™ H0j ÈOxBL¶Ÿ0'â7Àˆ¥Î7äœm"XuLƒ1xx¤óf î~MKÆ…•ѾÌV‡láa kp÷·Û¦òQbZEÙõ…û¸÷ŽöŒ=´™ °x±øƒ0Ü pÁO¹ûƒ;8ÿJ`÷ž={ò…/|/~ñ‹ôïߟ|>_Hoêß¹\Ž%K–J߉d³Ù–«§žzŠ›o¾™††ªªª¶~ùË_¾ç¸ãŽk¯à§M›¶SýBDvfÖø8T¶ÊT/zÔÝ·våÜvEf6¸µÛ©Ì¬ø°ÆÝÝ13köúŸ¦_u÷’+Åf6 X܂ӽäî·çüä£GˆÈ.ÌÌ* JèNz…‡z{¼ ¼ÑÜ^n3û°ÒÝkÁµ>ü°!Y:椓Nâ /dìØ±MÑÏK–,!ŸÏ“N§qw²Ù,3gÎdÖ¬Y 2ä­+¯¼òÞ¡C‡nkï$²jÛ¶m˜1cF«êÚ‹ìJÂ÷‡£€#¾hp‚2Û·¶çƒ´L¸}°ØÝïhÅóÒ=5Þu÷:j~Í\ÿÀÑÀw ‰1ÕÀYMœâWÀ{ÀUÀ{î>³#æ) @DvAfÖ—àŠƒ²ðð‚Faóšú«Äyú¸û¦V\·8øw‚î·˜“&MâÜsÏeâĉüöÞ;¼ªëÌÛ¾Ÿ}Š„½‹*P„¦ƒécL°Û¸†Ï$“É›dæs’o’ùf2ãdÞ|™¼N&! Á ×ÄÆÆÝ`SdL1B4‰.@‰*„@:e¯÷µP9::*ë¾.]B»>8Gû·žòSJÕ¶mãóùؿըÝ3gÎð‡?üýû÷#"jâĉ_þó?ÿóú-¹PJ}UXXøÆâÅ‹ot\¯ÁÐ"q2–cÑ”¡2̃Àj¥Ôñ¨Ö‘ùè¾»O”RëxŽ ÿ­¦¢ÿÖG.Âzcø1ðŸÀo”R?¼Žó}h3ÛäFÎÐ"1Ä`hE8þS¸\JPŒ®ãÞÞTÍ‹N“å|àÿÆ„¶÷ïߟ 0oÞ<âãã±mÛ¶©¬¬äÀäççóÇ?þ‘ÒÒRbbb.=þøãïÝu×]‡!¬€eYïík_kò_ÞCs Úd«™@góI´‰à®¨ÖF‘8´+¸ÿ}¥ò6IF7¤Ç=Ð IµÑ˜@&"7¡{ýv+¥†_íø0çb¨ C+@DÚ·¢W5CÃ%öÙJ©ƒQ ‘éÀÿîÀEqqqLŸ>Ûo¿1cÆpþüy X½z5ûÛß°m›^½zýøÇ?^™œœ|þFcPJ•ÆÄļ8sæÌ#7z-ƒ¡%â4ÿÎB74ƒnp^‹™lÕdˆÈ­hñ·ãj%H"2¸ˆCû2U ç?«5½IpÄk!z2â@¥Ô5}–ŠÈÐ¥Wÿ‰ø -#@ †L5wâ[XgóQtzÿp#Þ§£Rꆄ€ˆ ¾<t mïÞ½;III;vŒcÇtoù˜1c¾úÉO~²&&&æ†ÑZ–µß²¬—fÍšÕ½#C‹Âé9˜ r6]Ö›¢0εÍâ<ÀyZv-ðN¯Î t6y›RêíÈDyÕ8^‹”R‰F †Öƒ C Ä)q ÕpÇ9›£…ÇF¾×­hó¢Rª°®Ìkß¾ý£SƒÁ`Õ8ðøøø²Ù³g¯ì±ÇÃXÙ¶ýùÖ­[?üùÏnVx m g$ê4tÉ• '[mA¯ WD3¶¶ˆ3!êtù’ë8_Ð 8Ý€_EãßÐJò"ðW¥T}ÍæCƒ0> C CD¢Ë™z9›"æN,"3€IÎ}Ñ)ø©{^,¿ûî»{íß¿ÿÎøøøÞݺuk¿xñâ¯×Û í,7p›Jàõ9sæì˜3gΆl0´œ‘ºSÑ^?Ú<.ÝçÑà†F'Óù^Ûx°A(¥”ˆœºs¹$«©Y…ž”vSîmhe˜ ˆÁÐBpÌoC›Q ÚÇâ"TÃíônLFÿÂùH)µ±±ïQ»wïöæååõôz½=•R½,ËêiYV/ «Rʺҹ"Râr¹^˜5kVI…k0Dj#uo<Îæƒè÷nqÔ3U3ÐÃ@|×q¾øô8õÿÝÐI†ˆd»¢Ñ‡bh]b04sªÌœ†žˆ¢Ðæ+¥½¯ÁIõߎã«€•R_6ö}®‡5kÖ¸+++{=mÛîzY–ÕSDº. GDÞœ={¶qm6´ êé;‚.Ç,ˆZ`†*œr¸Ó ÉP;Yç£hÿ¥KÎçq/tH2úáÿ¯ øê1v”RùÑŒÃв1Ä`hƈH`.z #è‹÷¯ÕE÷î'À×Ы¨ ø@)µ)÷jd$++Ëm¼= mga"]n2->7#u›Næâè²Ð%J©+.ŽˆÈb Áùч^Xq9?ïþÍÅe?©[¢‡¡åcˆÁÐ q\o§£³‚6\ äFj¼#>f£WS°R)µ-÷2 ×G5/@Wgó9ôd«¯¢áa¨É懔RÏ7àøX =.¹#ú³¸8¨”:ÉX‚ó»éÐè©”:å -Ó„n043Dd:ëÑÝÙ´ x7’5¿ÎCÍèR/->r"u?ƒÁpí8^·¡½Ê/€/LM~Ó#"#=Ï˲:v 8 ÷û«õåu¾onÈ5ìÆç«Ù¡”ò‹ÈçÀ]hüW¨êAš Œ¶,kà³m;ø‹Rêd´â54_Œ1š ÎÊÒt#i(ëñn¤ël‘¾sÑå6ð¶Rj{$ïi0N=^€/•R¦ì0 ˆÈx·Û}Ûĉ] ø|>òóóGîÙ³g$P."УÑû¢?Ë[S¿ÄGhr¯ˆôr»Ýó,ËšdY–Õ·oß@Ÿ>}b€*((¨<}úôÏEd¾Rêƒhmh^˜,ƒ¡àŒÖ½=~V[UW«n„ûZÀÝè‘6ð–R*7’÷4 CDz W•‡;›üèúû Ñš‚dÐ}n·ûGsæÌ‰½ùæ›kì»té[¶laíÚµŠŠ ˶m˶íJ©£n£á”‡M¾áv»téÒ¥bèС1iii’˜˜ˆÛ}y][)ÅG}Ć ŽùýþþQ ÜÐ,1Ä`ˆ"Ž˜ì|YèZî•J©ƒMtﯣn‚èæÆf™ö7Ú"Ò-0@DFx<žw”R}Ge >ÜüÀ«J©MqoƒÁP§¦~zÜvh9ý0ÚD0ê#W uñz½fdd \°`U}{YY–eѾ}û«^£¬¬ŒwÞyÇÞµkWжíeÍQdz½ÞuC‡½ùðÜèµ>LVVVP)ÕM)UÚñZ>&b04Ž[÷ý@OtÃw6z…³IÆg:=÷P³ìʈƒ¡‰©æ^>(ÖšRÈæ‹ˆôMœ8QBÛ|>¯½ö»wïÆ²,’’’˜7o]ºt©÷::tàßø†õÖ[o±mÛ¶Dä·ÕÆö6 ‚Áà¸qãÆÝ°ø0`Çöù|37㚆–uõC Ã""ÃÅhñQ <§”ZÝÄâc>ޝ+¥ö6Ž ƒFD\"2øôXÝvÀI´—ÂR#>š7.—ë–ÄÄD»OŸ>UÛV­ZEII >ø sæÌáøñã,_¾Û¾²ž°,‹;ï¼Ó²,«=08¡_3n·ûðñãÇÃî+((à½÷ÞcÅŠ:tèª×²,‹””±,ëÎÆŽÓÐr1ƒ!‚8þÓ¹ìíq=mêBÇpZ|1âÃ`hRœÒÇtôd«ÐÒxȽ|[s[ý6ÔEDÚ[–•1eÊWh[YY7näïÿþï ‰’îÝ»³lÙ2ÊËËéСïéñxp»ÝÊçóÅF6úkÇç󭨽{÷÷'MšT£ùcÍš5|ôÑG´o߯×ËÖ­[yôÑGINN¾âõÒÒÒÜ{öì™+"ÒÜ›ï Mƒ C„pK¿Ž^ÝRèùý5åÃF5ñ1->^3âÃ`hDD€aèEˆÐ¼ÒR`-Fx´4ÆtéÒEUÐÎÎÎ&))‰ê‘øøxÜn7 iÚÎÏϧ¢¢B€ˆ]¿>8räÈ?UTT«õQ0äÓO?eâĉÜqÇX–Åûï¿ÏªU«®*@RRRƒÝ€ ÀÝL –Á Ddð$Z|T ü?ˆ²ø0™ƒ¡‰‘ÁÀ·{Ñâã"°øRj«-Çxpü¤I“Ü–¥›|>›6mâÔ©Slݺ•@ ÀÎ;IJJâJ#zC|þùçÉQJ]Œè ¸>6ˆÈ¥.· VVVâ÷û™0a¡¿‡©S§RXXÈ©S§m>xüøqŽ;Vãb:t W¯^è!,ƒÉ€ ˆŒ@»‹»Shñq²‰c¨n2hFí M„ˆ$Ó€¾Î¦KÀ`SSxü"·Ûí5jTÕ¯×ËÂ… Y¿~=o¾ù&~ø!ãÇgÓ¦M,X°àª,**¢  ÀlŒ`Ü×R*àv»?ÉËË›3|øp ..ŽöíÛSZZJ×®] m8p kÖ¬ADÈÏϧ¬¬ŒaÆñðÃ׸æðáÃcÏœ9sðt“¿ C³Ãƒ¡‘pÊ-f¢û=vo7õC‡#>æqÙáü¯F| ‘ÅÉzN9›|À&`½Rª"ZqnÇxЪÕHLL$11Ç߃µk×âóùعs';w¦W¯^õ^sݺu¶Çã9ìóùštqêZƒ+÷ìÙs»R*FÿzƒÁƒ³oß>:uêÄž={ÈËËãÈ‘#:tˆ®]»2bĆJbbb륤¤ðÙgŸ‘®ÆXÓ`ˆÁÐ8c5çiè~ èYþMÚlg¦] M‹Sj5àlò› J©òhÅehDdˆeYÝÆ'õÓ­[7îºë.fΜɖ-[ÈÎÎæ«¯¾"))‰©S§Öy/++cûöíbÛöúˆ¿€ãýòòroqq1½{÷ 55•7ÞxƒÏ>û ¯×KRRwÝu©©©tîܹêÄââb|>ýû÷¯ÚÖ¿¼^o ²²r&ðzS¿CóƒᑎÀ@ôCÿJ¥Tnâ0Ó® †&BDÑÂc ³ÉlA &›rgˆ,gbzzºêÔ©S½$D»ví˜4i'N$??Ÿ5kÖpìØ±:$;;—Ëuƶí«Ï°"J©"¯×›ŸŸŸŸ )))Lœ8‘ÔÔT „Û]÷1rË–-¬\¹’É“'× –e‘ššjíÚµkF€´yŒ1n§ìâ~ =pí,~xzdãt߉i87"ˆˆ B AΦ—…GYT‚2DénYVâ¤I“jƒAbbbª±kcYC‡eèСuü@|>7n úýþõ-a­ßïs÷îÝ?˜2eJ,èfò;ï oçá÷ûyçwغu+“&MbÚ´iuŽIKKsïÚµkŽÇk0Ä`¸NDd(ºÑÛ œ^QJ•F!îF¢Öß4†fCã""ýI@г)äŸ+¥ÎG-0CÄp¹\ `÷éÓ§Êûãí·ß櫯¾t#zlllÕ÷êöz½dddÔÉ~lÛ¶@ àv4鋹~>8zôèSÕÇñ†£¸¸˜—_~™’’f̘ÁÌ™3×’’‚mÛ›€­‘ ÙÐ0Ä`¸Dä`Ú\p7°B)åBÌÆ ÅÇ ¥Ô®¦ŽÃ`h­áÑ6‘v–eeLš4ÉU}û¹sçˆgþüùX–EEEœ;wŽ5kÖ‘‘ÏçãܹstìØ±Æ5mÛfݺu`£R*Д¯çøÂ²¬‹û÷ïOOO{ÀÖ­[yûí·2dIIIÖ{±öíÛÓ»wïÊ¢¢¢ÙÒ¦1Ä`¸ÂLºúø0Š©ä™À8tãû[J©–²ªf04kD¤0™šÂc'°F)u6jšŠ±;v$55µÆÆG}”矞?üE‹U¹¯[·ŽÞ½{sÿý÷×[šµoß>Ξ=kÙ¶½%âÑ7J© Ûíþ(//o^zzz 1V½äjÚ´i̘1ƒÂÂB²²²ðûýx<ž°×6lXì©S§î~ѯÁÐ<1F„C7ºäj"úc.ñ!"3ªÅò^4ß †Ö†ˆô‘EhñD;7ÿRj…­q¹ÝîñS§Nu×^¯—G}”øøx–,YÂÙ³g±m›72yòäzÅÀ矑í-mHA0|gÏž=ê¿êNž<Éïÿ{<ÈßýÝß1sæLD„¾}ûáCõ÷×§¦¦2E¤[SÄohž˜ ˆÁÐD¤ºÙ|ú$ªÙ™Š. QÀûJ©³¢f04Gœ“€dgSHx¬UJ‹Z`†h0²¬˜êƃÕñz½<òÈ#<÷Üs,]º”ñãÇ1bD½,..æÐ¡CÍÔxð*|pñâEoQQ ;vŒ’’’’’Ø´i»ví"..ŽvíÚÑ¥K¶oßN‡h×®ñññ5¦eõëט˜˜@EEÅ,à•(½&C”1Ä`¸ "Òxè T ]Å£6>Ñé?™êü¸Z)µ9Z± -GxÜJÝR«ÏYZÛ¤>ãÁêÄÄÄðøãóì³Ïòþûï3}úô°#iC8ƃ>Ÿ¯81G¥T‰×ëÝ•ŸŸŸ iiiÌž=›²²2ÊËË9~ü8.\àÂ… \¼x‘£GV5ëß|óÍÌ›7¯êz"BZZškÇŽwaH›Åƒá ˆHà  zÌîKJ©¨ý‘ñÀíΟ(¥6D+ƒ¡%ãNBF!á±V)u:j¢Šˆ ¶,«ûøñã¯êûáõzyüñÇyþùçÙ´iaÝÏËËËÙ¾};@ ¹Ö‹ßï_±gÏž¤iӦłö<™Ÿ®]»’žžÎ„ èСCUczVVO>ù$=zô¨qÍììlDäp°©_O#òÁ±cÇþß‹/wÕƒcbbˆ‰‰¡{÷îa÷;ãx; '8njÜP -#@ †0ˆH°ˆN/DÓdLDFw¡Çþ®SJ}­X †–†ˆXÀptGOgs%Ú@ð‹–Ölˆ NSôà‰'V‰¢¢"²²²èׯS§NŲ,<ÈúõëÉÎÎfÞ¼yŒ5ŠG}”W^y…øøø×ôù|dgg·ãÁ+°É²¬ û÷ïï‘‘ö¿ßONN»wïæäɓضMBB'N¬ã‡GBB‚¯°°ðŒi“bhu8«œc¼^ï`0hƒÁ½À®†út8NÇ1@!ºìêb¤âm@<ù,>²•RŸD+ƒ¡%!". Ý㚸SŸ½Q)u)Z±š.—kB¿~ý‚ýû÷¯z6zóÍ77n³gÏ®:nÒ¤I”––²råJþö·¿áõz>|8?üp)X-Ðx0,Î8Þ÷óòòddd¸jï?|ø0¯¼ò çÏŸ§W¯^ 0€ØØX ùóŸÿÌܹs?~|s† SRRrð¯Mô2 Í#@ ­ —Ë5ßãñ 3fŒ+¨œœœÔ@ 0SD^UJ»Êù©À½è÷Ætù¯)b¯'ž!À=è‘Ù9ÀªhÅb0´á‘Lº:›/¢WZ7*¥*¢›¡y⎜2eJÕsQQQ%%%|ë[ߪs|§Nx衇x饗x÷Ýw:thñ2 £aTÛØƒÁw÷ìÙsRÊ¥×ù4§NâÙgŸ¥gÏž<ôÐC 0 Æy;wîäµ×^#%%…®]»VmOIIaÕªU#D¤§Rª¤É^ˆ¡Y`|@ ­G|Ìóx<Þ|òI×wÞÉÝwß-?ýéO]cÇŽ³,ë  oåªÏ܇ùÀ+QýÑ£Ýh·õ•-<…o0Dñ:ƒþ-Ü»åÀàÿ(¥Öña¨‡1ñññ5Œ?N÷îÝ©o–eYÌ;—sçÎqòäÉ:ûCƃèR¿ÖÀ‡žÚNçŸ~ú)Ý»wgÑ¢EuÄ@zz:©©©US±BôíÛ—¸¸80+’Aš'F€ZŽø¸Ëãñ¤/^¼ØU}‰ÛífîܹÖܹs-˲¾."u Xa²p¡R_SJšìÔ'ÔƒâE‹¡7̤ƒ!<"çxãü#ð5ôàˆsÀ{À;£2Š!š1õÆÆÆræÌ|¾úס:tè€eYØvÝçuëÖE$·µô)¥Ny<žÜüüüÛ>Ì”)Sˆ‰‰©÷ÜPTTTc›3Ž×ír¹îŠHÀ†f †#>ît¹\#-ZäêÓ§OØãn¾ùfæÏŸ/–eÍ‘Ìjç§óÑï‡mh“Á¨=ì;¢{PUJ£ÁÐ\‘Î"2ø>Ú§=zb݇Àï•R›£¹`h1¤[–;zôè“’’X±bEXpôèQ¼^oÉWÅÅÅ8pÀ ƒ-Ñx°^ü~ÿŠÝ»w×É"ÆÆÆ^ñ¼ÒÒÒ°.ñ©©©.`¶S6ihCbhÑ8âc¶ËåµhÑ"Wß¾}¯xüèÑ£™?¾eYÖÝ"2¶–øøŠ(—9‰H'´ïH<ºþUóe0ÔDDz‹È=À÷€›Ñ™ÂÀ àwJ©æ}ch(gÂøñãëÆÄÄ0gÎrrrxþùç9}º¦=Ì¥K—X¹r%ãÆ«cB2TJˆø hZ>(**йpárR§ÿþ8p ÞNœ8ÁÖ­[«]u’““±m»=0.Áš/¦ ÝТq»Ý3-˽hÑ"Wÿþý¯~Z„¸Ýnyýõ×ïpVµØ ¼eñÑx è” §o™²ƒÁ¡šky2ú} pØ ”ʯ÷Dƒ¡DdeY='L˜ÖxpôèÑX–ÅÊ•+ùÍo~CBB öîÝK×®]™1cFsZƒñàØâr¹J÷ïßß93SŒ?žeË–1dÈRRRªôù|lÛ¶?ü®]»R;ÃÚа_¿~þ£Gξhªaˆ>F€Z,g&pËc=f5T|„9r$–eÉ«¯¾ŠmÛD_|ÄqÙqý Úô0j£ †æB=æ Ø‹6,¬ï\ƒáj¸\®‰ééé5Œ·oߎ×ëeèСŒ5Š´´4¶lÙÂÞ½{Ù¿?ñññLž<™[n¹¥NöcãÆˆÈyô$ÅV…RÊv¹\ïçççß—™™éHLLdêÔ©<÷ÜsôìÙ“=zPVVƉ'¨¬¬$%%…ûÎßSˆ¡C‡Æœ8qb>ð³¦|-†èbˆ¡Eâñxfžxâ «¶ÁQ àСCø|>’’’êmŒ1b¯¾úêÛ¶Ç¡½š‰A7œ÷J‰²é¡ÁÐ/p0èìlö¡K%¿PJ•F+6CëÀé·Kªn_ÈhðÑåÃÊÊJwaa!Õ« Ä Aƒê|üøq6mÚÄùóçINNæ–[n©±¿wïÞ´oßÞW^^~;ð\dC74Lº¡EáŒÚ¼õ±Ç«#>Ξ=Ë’%KèÝ»7?ûÙÏøÞ÷¾‡eY¼üòËõN0-BœéXw‰HøZ}Ç{ IDATÀ)-¹ T¢{>N5Õý †æ„ˆt‘9ÀÿB—[µNï¿UJ­3âÃÐXˆH;¥Ô¨êƃÅÅÅœ8q‚iÓ¦UWVVÆ3Ï<Ú5kعs'Ë–-ã½÷Þ«÷º6lh5ƃõ¡”:ëv»sjã ÇÑ£GùãÿÈîÝ»©¨¨à½÷ÞcíÚµ5ŽqÆñzÌ8Þ¶… †ƒÇã™ìv»'?òÈ#Ö!Cjì;{ö,YYY¤¥¥qÏ=÷Ю];úôéÃwÜAII gÏž½âµGÍÈ‘#ÅãñÜÉ×P‹ÛÑnÍAô¨ÝãMxoƒ¡Y "DäAà;Àtf¾=Ñê”R[ÍD+C_ÕçpìØ±ƃ¶móòË/ðƒü€Ÿþô§Ìœ9“ììl.]ª«…÷íÛÇÉ“'[“ñ`½„ÇØ·o_ã6mÚDûöíùáÈâÅ‹Y¸p!Ÿ|ò ••5竤¥¥YÀ,1•9m#@ -Çs«mÛSyä+\úûÌ™3\¸póçÏ×Èv¼^/:t¸ê=&MšdùýþD§$¢ˆÈdtm»V(¥öGúžCsÁq,+"ßž@7™äÏ*¥þ¤”ÚnÌ7 ‘À1¼eòäÉ5Œãââ())¡¸¸Û¶yï½÷8vì .¤K—.Œ7۶Ú:ƃ;ÚHßû'Nœ¨1Ž÷ðáÃU‚-DYY¬êÅLKK£{÷îìÚµ«ÆqÉÉÉ(¥âп m#@ ÍÇ3Á¶íéáÄGii)¯¼ò ýúõã‘Gaÿþý¼ôÒKJKKyÿý÷™>}:µç»‡£[·n G{FT€ˆÈH ”ãÿH)µ3’÷3š "ÒÁ)£ü>p'Ð]~¸íxU)UÅ mƒ¡–eÅŽ3¦ÆÆÔÔTúõëÇ3Ï<ï~õ+6nÜȼyó¨î/uêÔ)âããë,j³oß>W0l+£d·¹\®3{÷î­Úî÷¬eY5˜}úô©ãŠCÿþýýÀìˆDkhv˜T—¡Yãñxn±m{æÂ… ­ÔÔÔûÊÊÊXºt) x<’““yä‘Gxá…xñÅ9sæ ƒ¾êÔ’ûöíò,Û¶í W?úú‘Tàn´Ðù\)Õª\r †pˆHº±|—¾Î 'ZmQJÕqV6"…ËåJJOO·jOH´,‹o~ó›lÛ¶S§N1lØ0Xã˜5kÖ‘‘QÇÕ{Æ ¶Çã9æóùZ›ñ`X”RÊív¿—ŸŸÿàM7ÝäèÕ«•••”––Ò©S'@ ‹òòòçÆÆÆ†-a:thÌñãÇç?ü+0D“14[DdœmÛ³|ðA«z.\½{÷æþûï¯úe0dÈ{ì1>LEEsçέó‹"ûöíãÕW_µ-ËZ)ÿ é,@¿ï¶*¥>‹Ä} †ÚˆH/™û]¯×ûmê Aˆä=]"2\D¾ ,F¢ÿïþ ü^)µÞˆCS K‹‹‹ƒáö¹ÝnÆŽËìÙ³ëˆuëÖqìØ1¦OŸ^c{yy9Û¶mÃï÷·FãÁz ƒïæåå©PÙsLL IIIlذ¡ê˜³gÏÖ…_QQv2ejj*~¿?UDúÖÙihu˜ ˆ¡Y""7Y–5û¾ûî“áÃ‡×ØW^^ÎÒ¥K¹xñ"÷Þ{o‘˜˜ÈO<Á²eËxá…xôÑG¯X‚UPPÀ /¼`ëü~v„^O/à!Àìê£b04"ÒH÷x<£€®ýû÷Œ9Ò}áµ~ýú{Ѯë"pßx`4zŒn¼³ÙKú¥Rª¤±ïi0\#[‹ŠŠn]·nš4iRƒ„ø¡C‡X½z5 .¤}ûšUºÕŒ÷…?»Õ²Êï÷»Ž=Z%Öf̘Á_þòŠŠŠðù|9r„‡z¨ÆI ,{±jãx§Ë#¼!ºH+õÉ1´`Dd”eYsï»ï>©>‹.‹ØØXŽ;FJJ <ð@X‡Õ‚‚ž{î9ê!,]ºÔ¾ôûýEèõtÃÀr3ÕÇ œ‡ÿá'Óï÷÷îÑ£GpôèÑŒª&ZÐÿï³²²lÛ¶ßPJíªÿŠ×tï¾hÑ‘ÎåÅ­óÀ&à«He †ëADR,ËúƨQ£˜={¶U[T„ÃçóÕù=xú駃/^üP)µ9Rñ6W¼^ï—·Þzë¸Y³fUm+(( ;;aäȑԮ`¨Û¶ùå/YQVVö]¥Ô_"³¡y`ˆ¡Y!"™–eݽ`Á5jT}!ñѹsgzè!:ÄòåËÿüósÁ`p°Rêʳó -#@ ÍI·,ëëóæÍ“±cÇÖØwéÒ%–.]J||<?üp•Ø8pà/¼ðƒ ⡇ ›å(++«3±äèÑ£,]ºÔƒ›Àz=ð ”1.ç†ÆÀ™•Ÿìõz3@Rll,™™™Vff¦ôíÛ·A}O—.]â?ÿó?í@ ðŠRêšJGD¤'Ú³#=x€]À&¥Táµ½"ƒ!:8ŸÓiçÖ`0Ø'55Õž4i’«¶Ñm8lÛæ™gž ¡”ú$òÑ6?D$Øþ“Ÿü¤AãîÃQTTÄêÕ«yyy~Û¶ç+¥"² hh^bhˆÈp˲¾>wî\ëæ›o®±/$>âââxøá‡ëˆŒ0`@Øýµ)**bÉ’%Á`0¸%Râ@DîD—¤øç•RÇ"u/CëÇiïïr¹ÒEd¤eYîáÇˈ#¬äää°À«ñòË/Û»wïÞÞhÀýÝ@*:Û‘ˆžäÚ­|¦ÌÊБ—Ë5A)•Þ½{w¦Nʈ#ê}oíÛ·çž{ζmû·J©óMn³@DÄív—Ì›7¯{í*ƒú°m›#GŽŸŸÏ®]»*Nž<ãv»Wï+¥vG8dC3ÁCÔ‘a–e-'>*++Y¶l–eñøã×+.Bý½{÷¾âqEEEdeeý~n0\y½¥'WCD&3x])•‰û®ç¾Ðè\Š‚Hý¿¸œlÃH·Û}“mÛ1ÉÉÉjäÈ‘®áÇ7ÈßæJìÙ³‡åË—ûmÛþ¯úÊGD¤+p0ŠË96°ØjN_ÃàŒJ(w»ÝÞØØX¹õÖ[ÝãÆ£]»vUÇٶͲeË‚‡ÞÝßšq¹\:tèà .ôÔwLYY{÷î%//ÏÞ»woÐï÷[n·{“ßï xC)u  C64Œ1DjYÖ½sæÌ±n¹å–ûBâãøñãüà?¨ÑDŽêMç?þxU«jâcG0|;‚âc8zÜ®(¥¾ŒÄ} ×ãKñZxÔ¦x5šnÆ"Ò§™< vêÛ·¯=vìXWFFF‘–á8{ö,yyy”””йsgÆö¼@ ÀüÇ+**ެތ B»'s9Ûq=Íj³Rªô†_¨ÁÐÌ‘…è²Ùw€À(·Û=ˆOLLT‰‰‰.€={ö mÛ¶—(¥ÎD1ä¨#"“Eä³9sæXcÆŒÁëõâóù(**bïÞ½ìÞ½»âĉ±n·›`0xX)õ#`U[Í4F€¢†ˆ$[–õ@}âã¹çžÃ¶mÎ;G\\‹-ª3þ°6äååqÛm·Õ¨ƒ/..fÉ’%M!> §e+¥>ŽÄ} 7†ˆ$£w¿ ÐeDÑY«aè,ȳMS'`hLLÌÈÊÊÊ>Ý»wŽ3ÆuÓM75¸¶zóæÍlÙ²…cÇŽ1hÐ :vìÈîÝ»éÞ½;ßùÎwÂö†¼ñÆ*77weeåK"Òí×1è䢀Ch·ò=J)»1^¯ÁÐÜp²}ÿT¿QJùœí0Èår¥z<ž>è²CÓ, ˆÈ£n·û×@ »Çãñûý~ˆØn·{«ßï_ž†· 8ô0Ã) F€¢‚ˆ$Y–õà¬Y³dÊ”)5æ°û|>žþyO<ñ.\ ++‹ØØX-ZtÍn'OždÉ’%ÁÊÊÊÁ`ð­Š®èq»qÀn௦4¥yâLoò×þ÷ð +ðÛH ‘v@ŠÇãí÷ûûwëÖ-0jÔ(Off& ™ÆSYYÉÎ;ÉËËãþûïgÅŠìÝ»—ïÿûUbýСCdeeñàƒ2bĈ:×8pàË–-S¶mD÷v„TJº·c«ÉvÚNŸÓ0 É\_;¡‰|è²Ö@¾RêRµý_¡K9oQJmŒN”†æ‚1"449Žøx`æÌ™uÄèlÀOâââxòÉ'éÛ·oÕqC† !>>žœœœ*ââb|>={ö {m˲ÈÌÌäË/¿,õûýÏ·õzvC›ep›ˆ¬VJm‹v0­”•èìȆhbˆ>F€n§nÜ \º’Éžˆ ¶,ëÁéÓ§× §däæærøðažxâ‰:ýݺu«“ ©O„œ>}š%K–/]º´/ þ5Âuë3к~ôÄ« ¼—!²Ü t¾¸QÃÈêcsÝn÷HÀ3tèPFÕ ±¹¶msôèQrssÉÍÍŶm† ÆÂ… ¹xñ"/¿ü2±±5½¿,Ë"##ƒÜÜ\233ÉÉÉaÓ¦M¤§§3räÈzï•‘‘Áúõë;¢½< †¶ÈXô”·ÊhÒZQJ}|í8 ÍÓb¸.Dd$zÅ(]ªð±R*»žãX–õÈÔ©S]·Ýv[ñâäÉ“Užõ5—––’••À“O>Y§«´´”?üáòòòÁ`ðõH–‘8÷ KWÞPJíŒÔ½ ‘ED‡ÑeWKê+ÓjÀuú¹\®ŽAWLrr²=z´+99¹Acs‹‹‹ÉÉÉ!77— .––Fff&ÕE‹Ïçãé§ŸæÖ[oeÆŒ5Î/((`É’%x½^RRR˜0a 1UûÕ¯~8wîÜÇJ©M×óº †–Šˆô¾î{ú­)=ŒΈúÇÑ=’óá24LÄp½¤Ðf Xß!ñ1a„+Š€=zÔ)µª-0:uêÄâÅ‹ÉÎή#Pñ¼téR“ùˆ¤øHæ8?®5â£å""ý€o—¯G|ˆHœÇãyز¬Þƒ ²GåJOOoÐØÜÊÊJ²³³ÉÍÍåÔ©StîÜ™sçÎñÔSO…íwòz½ 6ŒÜÜÜ:¤ÿþtîÜ™´´4î¾ûîÇŸ––æÚ¼yó ô´ƒ¡-1Îù¾Åˆˆ“ AÀ6Ì• †úùø¥RjSßA"Òײ¬Gn½õV×wÞYC||¾ºÏy:u¢sçΜ:uŠ¥K—RVV׎¡S§NÌž=»ÆXÑø¨¨¨8ä÷û_VJE¬œDD:¢›Î=@°&R÷2Dgõs!ºüèy¥Ô©ë¹ŽËåšÒ­[·žO=õ”,Z´È5zô諊íÛ·³aÃD„Ç3~üxžzê)žxâ }úðä“ObÛ6K–,áìÙð~Oeee,Y²$X^^~Ôï÷¿É̇Ã×н/W®·WÀ]D¤;Z|XÀ J©¢«œr¥kY@ÀÛµk×°ûóóóÙµkWí\¼x1¬PÈÌÌdÿþý\ºt©Î>ЙŽôôôªõêôêÕ‹Þ½{“›Ûð‰¢‡²oD€ - gPÄhçÇÍÑŒ¥Ê‚Ì‘›Eä_Ed“ˆ¤D5*C“bˆ!¢X–UqêTøŠ–¾}ûòØcqâÄ ž{î9^zé%.^¼È¢E‹h×®p¹ß`íÚµu®QVVÆŸþô§@yyù±H—]ˆÈ` ºïåÍHÕ"ƒcùz€Â'ζ„Z_±WºFm,˲+*ÂÎÊÍÍåã?®³=$Âe1222°m›;ëo-ÊÌÌäܹsÔÙwß}÷1gΜ0gÕ¤¬¬ŒÏ>ûŒíÛ·ãóù‘0Z1 ÅGÝ7‘¡Ñ‘¾\δþ ýùûô$É}ÑŠËÐô˜&tCD _mذaÂèÑ£Ýá¼ú÷ïÏ¢E‹X¶lüèG?ª!:uêÄ“O>Yg{H|œ?þ¸ßï_iï é Üåü¸ÆI%Z&€xçÏwÖsÌ+@~C.¦”²½^oñ‘#G† RgÈ °¨¨¨ÊŸtTBB;wîÄçóÕ˜’Õ¾}{’’’ÈÉÉaìØ±aïj8ÏÍÍ­3éªú}jséÒ%vîÜÉÖ­[Gu¹\®RÛ¶W+¥Ž4äõ ­·ó9n>Ë#ŒˆüøÐË£Ž]èÑÇŸ™Ræ¶… †H³éôéÓc>üðCëŽ;î›qëÛ·o•Y¾|y HˆÚuõååådeeÏŸ?¢‰Ä‡¸ð¢¢×Eò~†ˆsxç*Ç_Ëý~ÿÞ;vôœ6mZÏÕê½zõâСCäää°sçN¼^/@€={öÔñêÈÈÈàÍ7ߤ´´4¬çeY,X°€Î;_5>ŸÏÇž={ضm[pß¾}–eY—€í¶mïƒÇ¯åµ -é üˆ|¥”úèª'n”wÑ™áòâOˆ Î~CÂø€nÜM=> ÎÞÇfÍš%S¦L©w oQQË–-£cÇŽaEHˆòòrþô§?Î;Wì87G¼CD '¥”RJ]Œô= - §¬ë{?øÁèÑ£Gýo¿ý6¹¹¹¸Ýn|>ééédff’˜˜ÈŸÿügâââxøá‡kœSYYÉ/~ñ f͚ŤI“®9&Û¶9tè[·nµwíÚ…mÛ¥T^0Üì‹°A§ÁÐl‘™hãÑÍJ©÷¢O[@DÑf¯Õj*4¥Ôá¦Ê-LÄq”RGDäå?þø@ `͘1#¬éÓ§O•HÈé¼¶©¬¬déÒ¥ÁsçÎôûý/4‘ø¸->‚h³A#> uPJñz½%¹¹¹=k{s€.ÃÚ¸qc•˜¨î„ž‘‘Áûï¿Ï¥K—jüŸ‰‰!--½{÷6X€TsPW999vEE"r( nòŒÏ¡­#".ôô+€-ÑŒ¥-¡”:ìü>Ýtçò3è9#>ÚF€š¥Ô~yåÓO?} X·ß~{XÒ«W/-ZÄêÕ«q¹\5öUVV²dÉ’àéÓ§O;â£2Ü5é Üæü¸ÊÔÈ®„ßïÏÙ²eËô3fÔùl õkœ?¾†ø-@Þ}÷]vîÜY§ßcÞ¼y 23,..fçÎjÓ¦MÁ .¸\.׿ßÿZtDü½b0´ †£{ ”R×Tji¸1”RÕDHtHÝ †V †&Ã!/®]»v¡mÛa½A@‹‡z¨Æ¶ÊÊJþüç?OŸ>}Æï÷?«” ?›´qü>îA¿Oò”R#}OC‹gÇùóço+,,¤oß¾5v„ ·lÙÂ]wÝUÃD3Ôpž››[G€´oßžú(--%''‡Í›7Ξ=ër¹\E~¿?Ø Ëõ• ­‡Ð›ÌŒÞ0"’Ü F{g•»m½ˆ²#ºˆlÎ+¥¦D3޶† †ëBDFsy"TˆY"2Ëùó'J©:ÚN öÅõë×? Ô+Bª%%%M&>f¢?Ë1 r††a¹\®ÒœœœÎµèLÇš5k8pàÉÉÉ5öÍ;—¸¸¸«Þ 4ÁjóæÍ£Gº=ÏGtlƒáÍr P•Õîn|ÞåpZ5"òwÀ1@¸„! çož>‹J€—©;áÃqŒ1\/'€õWج¾N öÅõë×/´mÛsçõMAÕ“{ž}öÙ`IIÉYG|4Iÿ…ˆ nFû}¼­”ºÐ÷5´Ÿ/¼ÑŽÁ`G(û±ÕôCE¹ø x½(t¦Ý‚öa:Œk~Zs¹ìMbh"Œ1\J©B ðÎ/‘ÜìììÑ@؇5ŸÏDzeË‚Ç/mbñј‡¸Y)µ·)îkh8îÉ hÑ‘ŠÎ’…°# ¤¶7螎øøÚS(ëØ·oÛ·oîÚµK€J¥ÔÛ¶wÚ¶}ÔÌÌ7®‹-èÏö¯¢H+çè¿çRJUõx8bã®Pvå”?D÷‡jȘ}ét_kÏ›Rª~·W}íN@oàÎûýþeJ©¦¬g¿èœÂ4ÇñC€竺‚‡ÐåyJ©ò˜˜˜…999Cë”8°Þû„&XmݺÕÞ¾};¶m±¹;1cs †BDÜJ©"`e´ci„>#Üäï<Àÿ;°˜ËeQçEäÿÿ_õŒ•ˆ¬F¢‡Ä,Bcï‘%À.¥Ôíaî‘ | ¼¢”ú޳-lˆˆŒþ70­ž‘_+¥~Yí¸.Îq¡:Ú“"òoJ©ß7ôõ·5Œ149ÎjÂ×Ñoè-¶m±wïÞ~ùË_v¹é¦›¬Ž;ÊŽ;‚%%%eŽøh²ò'IåòÈÝ7#mphh¾ˆHG. ŽDÀSmw%Ú=y/°·v_’ÏçÛ–“““xÇw¸®6Á*$:rrrTNNŽíóù‘ü`0˜ ìWJóu m's¹XDΠËj›ª—°­Ê*üTDòœª‰z x Ýœþ Z$Й”A{‡|§Ú)ñè)Z:÷ú6ú™b°xPD’§ûê< tVTÛV§DD&«ÑŸõÿΘÅãÐSÔBÇÅ¡{X†YÀ§èߋ߉H¬Rê×WzímcDhhRœÔêè–BàY¥TÀÙ>ÔëõŽ´,+Æï÷Ÿ ƒŸ4eæÃYåþ{ô‡Ó:¥Ô'MuoCó@DzrYtôG—„8@‹ŽW"by<žïMš4©óm·Ýö˜¢¢"rrrÈÉÉ ^¸pA\.×a¿ßŸƒÎ¢DÜ߯`hK8}}g€ß™ÆÈâ<˜oF÷ÆÙ@ðúýãÚ ‹"ò(ðð ¥Ô¿ÔÚ÷°H ù˜üE)µ¨Öñ·¡«þ])õ³jÛ-t¶ 1”Q‘ƒ@©Rj”ó³ EÍà¥Ô¶+¼Î~|S)µ¬Ö½6 4û*¥Î_éï«-b2 †¦æN´ø¸ü5ôç|ßá|E‹©hñQ Ô™àeh}8Âwº—c(ºô.„B7Iîu¾ŠúТ”²Eäý5kÖ<гgO9r$§OŸ&77—mÛ¶Nž<éòxlB‹`C-Œ1DgÅù>Gqths"–­D7´Z8άù!èÁÔÌr(´OM(ËÑà)-׃“éû<’÷0 u8‡^yn r¶õ‘ÁJ©úr MÛèJˆ¤jۊПÕßmŒá/Nú `ˆ|=ø¦=ºÏäjw¾×£^“2´Qq¥RêÛ×k[ÅCDqVŸçsy¬íŠæTëÄ7Õùq½ik™8r9ËѽÖ!åèòýèò¦ël0šžS\.} e<ûˆH):Ÿ•ÈÚ"Òî Ù¦$ôĪêÙàUÀ?¢+_j¤0žC÷| ¹üµç}\æŠÈëóq2m«ã&*¥64NØmëê‡ 7ÄLôJ´xíZ ‚š€Lôx¿‹èT©¡… "]Dd´ˆÜ üXˆîãéŽ^];¬–¿VJ½©”Ê5âÃ`hœ¤®»uè™§5DŽÿ‘wDd¶Sˆ¸DäVtùÀËÕŽÿÿÑÊž‘oˆˆ+´CDRDä?EdÀ5Æð:º¬ëŸ)èÑúW]dt&týýìò²ˆô®Ë ¹¯Úáÿ†~¾yYDf9%݈f”ˆüND¼×w›Àd@ CDÒ€[Ð%/o+¥šUí»ó2/ZÛ Å‘¡·x?.;w®uÈ.É=hj½ †ÃÉwE›´5«Á"2 íÉ¥”:æsè&eWµm~ô8Ø«›Ú"B!ðMt¥‘s@ôs§BOz:t°RꨈÌ^C ”çD¤èƒî©@O”j0J©RYžTWo>¯Î/€žÀßóE¤íïÑíâþºs¯Dd¾síоN:qÇ Ë´~x-q·Œˆ!"ˆHwà[è7à¥Ôª(‡TÜœž1†oÍ g%©7:]?ÝH^ýa"p¹¬ª¤Éƒ4ZŽèxýà•„Vo‹ÐãÉ«”ŠzŸˆüðO@r¸¦b鋞¶ƒÎˆ†Ìe÷4i m§o:zRT_à,:ó´®¾ò7g¡i0]º}Ø ¬ªî""S€.J©·®Ã`çZ ýï_gü®ˆÜøÃ=§ˆÈ'žt†fðn“xô„¯‘èÿs…èÆùOÍâfxŒ14:N=þ" z¤é‹W™¹Ýä8·ßE—_½§”Úå è²*t#â`t`\­CN£Ç~à°qª7ù-ºÿºDæz%x8zÁæß•RO×…¦ADsï)¥N„Ù‡.ʹѾ/5§ÑïC[Ç”`"Ál´ø¸@=+Í€hñQ‰™ 5D¤Zh„DG×Z‡T‡qDG=¥ƒ¡pjìÿ]Ê8Z)UZk' G4b«ã±ü û/ŠHØ…^d2nƒ¡aˆ¡Q‘t´Û©BO¼ºn#·3Êù¾£¹Õ6·fœòŽÞ\ƒ¨9 ÃF§Ü:_¦VÛ`h22ÐïÇj‹Ð5õ@íNÖû艂Ð ^UJm¬uÜMÀmèúy Ý#0]SD×Íÿ&Ü{^DîG^ü·RÊw¥§ìæ!téÍ0`œˆ¼dWŸÂè”Í,D÷*¶C ¯åJ©]Wü[2 7Œ †FCDºw9?~ޜ̫#"±è_JÛ¢K[ VYUmçqÐå!Áq@)UÑ´ ‡PUºˆHCF¦;½#ÐåZ…h‘ñ=ù™RêÕ¿ø%Ð øº«=±êð¯h÷éjÝ£ð W)õ+góltÈèÏбß~‡î;€®Û¿íŠÝÇ\ND†;÷éçwÚ9îG"òM¥Ô W{í†æCµ!%g’)w\ÌûgLi^t0ÄÐ(ˆˆX€~¸< ¬j@W&=Í¢X)Uí`ZNãáàj_µû8B®±ÑÓªšk–Ì`hklG»6OF»G¿Œn<Ï«§yWÐÙŒ4à~¥ÔëÎöx´—ÿ‰ÈçJ©uµNý'àï•RvŽ÷¢Žökø Öñ h€‰œÓ˜ü´áí]!ÃAgâáèq©¡ÒÏ•èlÍt¥Ôg{Og{–ˆlh®‹hÑ@Dž¡æâQºÇsS3é¡LA7}ÿ;ð³?ø-L›´§ID¦£EútIc%ú÷á ¥ÔÛMK41ÄÐXÌF§ÏË7šißGˆûêÞÿËÞ™ÇG]ûÿýÌ’I& û¾$Ⱦɪ€€BÑŠT­Å‹ÚZ­½]®zmkoïO{ÛZ—¶WÛÛÖn¶öZ¥jkq½VWPe_‚²…BÈ:If;¿?Î÷|ùf2Ä@à¼_¯qÈwŸñ;3çsžçù<§ô*ΜÙÉçцë8Œà8­ì˜-‹F)U+"W¡-E/tÅ"ò*ð+¥”·fnpºÏÎ3žãTŠÈ7ÐÑo¢EŒ—çŒøp¶;Däàó"Ò>eVú+è~OŸà%܉n:ø o·s'¥ëeÏv_DOŽü»Îv‡DäßUÀMÀ]'8ßÙÄWÑ“I&/Œ#HDdpƒ­³i4?A÷¬Ú†Žæ¡­‚¿""UJ}õT^\kaˆ¥Ù8¡l¯ÍÝé>£ÝÛyÞqJ¯¢â4•*ðp&_þ?ÑÍÙ‘—”RtÔtÍEC¤›ß×À¶Ï@G<þì,»ý}s¢&rÙèYù'ØŽ]÷ ÇÙ&¯Ç9kq&•VŠÈí蔹«ß8éØ}ÑÍ+‹†Äç5J©gÍþ"R€® £#ïymÕǵNÀ¡ÔžÎúl´Ûf‰Rªôx5 Î5MCÿ~íèõ‰È`‰va\šjŽàô;ËC×>ùÑ=Ozï(¥>nèØJ©¥i–í‘ß¿COèZb±4„ó¡žCÛ¨û0ä¡̪m§ìô8ƒ #8 ЮU^Á¡¨/8lá¸År†â4Rû™ˆ|=hŽ'æs©ów:ÒE?ÓFDÔ­çгÀƒÐõ(7¢#ª EM 5ÎqSS@ÚtíJC Lm:Qã0ŽaÝœçîhAñ°%ù¦³|/ð¬#þ€v@ó: ~""×)¥>tþ,~MúNâw¡# Ówh DDú¯ ë- ÛІõ‘<à1´ ò²ID®Ni xðïè„@7ËÝc¬Arrœç†ú… –æ0=“TÉé_÷aÈtží€ÙÁ}8&8zP÷‡ôôNópf?-ËÙ…©ËÈvž×9Ï#•Ro´Ð9þŠ®¿¸xèÜ";n¥T\D6E¤“7½% ëÐÝ­G(¥žo‘«>{1Ž’S–_ƒv6»-RŒ@ù%ð ´(ø>ú·å*ôÌÿk"2Òi,¹ =ˆ¿^DîôÖ—8¦_FO€½ÛÐ…9Û½€Ì?@;©…¡Cêö>àÿЩ|÷¡£n¥Àg‡€WœëKýý›‹NE{(oèzŽs9Î9î Ñ‘À3+@,MBD†¢ó?O÷~©˜/±³öÞwfxú¢EG_ôCªà(¦®à¨·X,gN§ÑÀ3©i”N­ß…h')Sˆþ ‹RêdÒ]£kÇnz:ËN”~e˜ ü *vKškI:e£{÷‹È¢4);™@®5Ìh§æfÇê>RÓÙrÐÍ,w:o‘îÀÍèÿ¿_ð¤\ý¯cfòKtôàGJ)%"£ÿ_Îæ{Ž=íšvï ¬¢g¢Ç)QJy®¾îÜÏS¶¿Fõ€RênÏòyN¯›'Цì7_)õÝã\GZDd-º÷Žá¯À÷Ζ쌳vfi:ÎÖôûhkV…fv"GD2ÎôZgF§+uG»4›–pLpìhC‚Òb±´=ѳ¸ÿã¸^mAç¶E[áfÿeìJ©£"rÚjƒˆ<Šží/£Ób…3ð|Þr#ð¾Rª°‘»ÿÙ¸ÙIázýÝ6=p T(¥¶ŠÈwѳî…"òz¶½=:-k6ðŽÓiý,¥»ˆ”8ÿÎDßÏQ?¢°Ä#> ¡-ðçzë=þmOû#gÙ“èHÄW¨+@¾‚žüµWtr(¥""RŠþ¡é‡wž1x ñŒàèMýÆItþntñÜn+8, ºŽãv´­úçÐÖ« ÓdVHMYRJ½("“Ñ9ù_G§gÅÑ9ÿ¯Þ¾‡€9qšÊ›äª—*ã°×9V­çZb"rð_εÆYu=€­ñlû)D§}È@Gwv¡¾õ …-Ô¦<±> ËÓl»+Í2ã@¹=u…Rª\Dq¬Ž¥T‘ˆ,®‘ŽJ©§8ý Àb¯ÕrÏñ2ݾýœç÷E¤¡ÈJªë#¤­'D)庆9©ÐO¢tnþ·)ÇlKXb9Y.@û§GÑ–»mQ¥o&£‹)Û´qºŒ÷âøéT5è"N#8öžé‘‹Årò8‘ß:3(’™L(¥VáÌ;ÄÊt¿ Ž Ò³©ËÓl·:s¼mÜëLY^‹ŽžÜ#"atÚUÚëWJ½ ¼éL¬µJOÒs¶Sª”ú·Fn›î=7ïmêožå©÷ÍãÀÅh«ß?¢o²8ASÊ”ó¥³çMw fÙ]8M+Ó°;ͲÚ4ËN §ÏЯo6V€X,Ç‘›QzU)U|*¯§¬@{ۈȥԊS}AÁÉ‘í‰=Gj—qÐEsE‡ìªÅb9YœÁüÉîÓ`¯ŽÖ¦±fÎ÷ãÑnhi.EÎsÿÔÎdZg 5šòºü+hòtÃãçNò|{SÖÕ»tTäB`¹#ª[Sk™.MúŒÃ K£pR{®FçoVJ­>Å—ÔdœPï[è4ƒ™Nqâ²ÓeîÌÆuDÛvs=Ü4›'Ðé{8–NuÒ.‹Åb±|ʼƒŽ|UDîO‰ÄߌŽT¼æÝÁI›~]8~:{á‰F£¼î_ó¯xÚ8¿±_K³ý h¶;Ñ‘ˆGDüÇÉù²ó¼æÓ8÷é† –Æ2=;Q¼tН¥Ù(¥V8© ‹Þ‹ÈÛNè¿Up¾M³¥N]ÑùÈ©$ÃèÚ›}èƒm4 Îb±X,gNcÂß ø¯:)G‡Ð5÷¢kJ³ëãèú¢¹4®)¥a!º–çFùm–…®*H³ý|t±ù¿ˆÈóh“‚Ñ¿ÏCÐá1¥Ô?ÓìÛXFˆÈßÐõ›ÑŽ“ÝÑvÅ_F±~݌㷬±œÇrw,Ç,wÏ‹8¥Ô"rí¿ÝøŠˆ£_v{”RUÍ9‡9jç<òÐyÆ<`»ÆÐ_ÌÐþê€ýiœC,‹%-N·èÔɌӪÎADh¬©ˆüÝeûûŸê…5|þèôº¡ÝǧÓûÙø!zìùt¯ÃZàK ôoyÝ|Ú©±ÁÞ^”RI¹xíÄfÜØ6 mšŸIÙ^‰È5ÀÏÑ™Ù)‡ÜDýT®“¥:ýó4ëÞn;^õ3 ±ŸËñp,woAÏ,QJ-<Å—Ôâ8¯q20†ú?ÖG çQ‰Î=Mm¸@[zatÊTÇ'¶‰,vFp”´‘ÆŽ‹å4EDæ¢SJ¼Ô[ÑîRœêÁ³ˆlPJ mäö»€ÃJ©ã©·4"r'º«÷9)«¶_SJ-«¿×™ƒˆ´GÑ[ããX¿·jWƒ#"]е˜Yhq±öx÷¢GLÇÒ¥_9Mó€šÔIR'Ûà< - –£d.PΤÀÉ8=ixmO¿#e›0Úe²ìd¯E¤-¨:  ö×¥öÑ9Ó±ÄÒ Î‡öË+àzìLN÷q¢CÐ_R}Ðv{éÜ3N–ô¬G©ó|-6Ž g#­Ð°X,-ŽG€ü=[Ÿ v–å?HiÐÖêˆÈ×”Riäö§J€¬A¿C;)V£­Šÿý?Z)õIk^“ÅÒ–±ÄÒ "2]¨n 4zÆâtÃíŠþ¡ÎEûÛg§ÙT¡€jÐ?Jæ¹=3b-o-K«ã “½3ô"2í:·¥ï¨S(@Æ¥ÎÒ‹ÈOÑiEÿ£”º£5¯ÉbiËØKZD¤3Ú{àõ³M|8aÙ¢nh±X,m¥Ô‡"² ‰NÙ$"?CO¸ÜŽîD}%Úxd¦Rjµcþ=t#ÚhCŒ×€Œ%»Ó7d.º.âîÔó:i-*¥~î,K[""#Ð9û磅ҫÀzMÎoÖ³Ðf‡ÐEÅxÓ†Dd8p7º¹]|.Ú ñšã½g ¬z -@RS³,Ëq°ÄR'‡ó èémèn³‹Åb9s0é¥fFÿ3À@tŠV>Ú=((ÉAÛ˜Žv–¿ C ’/ˆÈJ©ƒN3µvÀDäJ©ƒ)ç¼moúºgÙLçÙ "2Ò9Ox]w)Úµ°žC “Oÿ.ºGÒ|´ýj´ÛÒ,™ì©èê\C¦sî¥h!ÕTÃÓm{O÷·XÎJ¬±¤ã"ôy ðÏS]¤h±X,––CDΆ¢#Û<«:¡;@÷úŠÈhññ+¥Ôz–ÿ'ð?À/œÅEG!¾<˜rꯠ£'ê†þ:íõ³J©·œsý-.ÆQ߉h.:*ó¥”·ßÃõèš8/—³•R/žàZÄIÓ½¦ühSc±œ¤kEo9‹‘žÀçÏù¶©Åb±´y¾,"wŠÈ÷EäÑ ?ðßiê?îHã2t#Ú­/5­êAt÷èkDÄ8þ½älû}íÀ Çû]‘|`*°ÀˆÇÙèGi¶LC7§[ì]§”ú;ÚrõÚ4§z³9âÃá7èô­Ÿ+¥Ö7óXËY…€X\D$ˆö½öë•RNñ%Y,‹¥ùÜâùwÝíèÈ—8ºƒ‹c—ÚX˜ÚI)•‘eh·Ä¡è"íZ™Ü*"£•R¦«ó4®‰ÜHçùý4ëV:×èe‚óÜÙ±ÊME€~"PJy÷mVj±ˆÜ üºÇĽÍ9–¥å‘èô»L ]”zÏXN¬±x¹˜cÝΜâk±X,KË0=xWJ©ÒãlW’Æj=×y>ÜÀ>‡R¶-2nEGAÖ8u…7¢M=àZÍqŠSW8‚§$eq{çy"ÇÄK*;е#ÞhC¯ç„ˆÈÀ=èZ“ëì÷Ô#"ƒ€Ÿ¢ë{¼ÄDdº™á‡h„­}}–úXbÜ"¾óщÿqÄðZônQJ}Ъ–cˆÅ¤^]‰U¨”Úv‚],‹År ”:âôÞ'"íR,m3Ðõ&­ËË_Ñ /C§ö*Nœ~°ÆÙöÂ4릢S„½,wžgŸª‘G×½,®´u§§æèvàûèèôîÝ›üàÌž=›d2ɶmÛX»v-«V­âÃ?dóæÍÄãqÐâv–óðs p£­çi¬±\tDÏ$½qНÅb±X,§÷ÿ#"·xÒ´îFÛÐ>œ¦˜ýoÀ£S±&ï5¦S¸RjŸˆ¼\&"W+¥ž·‡È§Ù~³ˆ¼|ND¾<貈H´«×[©ûž "òM´ÀY|.µÆÒ:8é|×?úäææòío››o¾™P(€ÏçcðàÁ <˜k®Ñí]"‘k×®eÍš5¬[·Žµkײ}ûv’I÷v ¼""”Rû[ûµmXr–#"}óÐ3Nóm8Ùb±X,)ü˜|˜""«€ÀtÑú¥î ”Ú/"opl–ù¯'q¾o¡söŸ‘…ÀA´ÓÕ'À¾4ÛÝ[ä—À7Dd5ú7­0mûÛ,‚`LÊE$uý2¥ÔäfžÃrDdð+`,@ àúë¯çÎ;ï¤K—.¯k@8fÒ¤ILš4É]VQQÁŠ+øùÏÎÚµkA‹š¯¡ëI,Ÿ"V€œÅ8©WW¡¿TW5fvÊb±X,m†wÑ}=R¦ãŸh’z8ÎVŸE Ï£ÐV»wÈþ‚î9òc 2eûÃ"2 ]è~9ºIbº_ÈßÐNU†}Àÿ'›fó$NªOØÔåO g¢ô—x Ìg̘Á=÷ÜÃ!CÜíšÒ²,77—3fðÞ{ï±yófS7b…d+ ¶ÇÜÙ‹ˆÌD¹—²Ñ‹Åb±X,§N£Çÿ‡®ó :”{ï½—éÓ§×Û¾)ãÙ}ûöñÔSO‘Íïÿ{Š‹‹ÞUJMkε[NŒ€œ¥ˆHoŽù§¿lŇÅb±X,–Óù<ðkà€öíÛsÇwðÕ¯~•@ e†®‹-býúõäääL&I$\j;3ß Xrâq]ŽN½Zc]¯,‹Åb±œjDd0ºÃüLÐÅäsæÌáž{î¡sç´‚'M$aÞ¼yÄãq233‰F£dddx7±¤°äìd*Ðmøæ)¾‹Åb±X,g1NÇ¿£­u3ÆŒÃý÷ßϸq㎻ïɰqãFV¬XA<G)E"‘ S[[ëuÃ:Q¯K `H ""×—¢›Ú$€í@!°Øt:x†‹Hg´X`­-‹Åb±œ*Dä3À|  {÷îÜu×]Ì™3‡4ncM"‘HðÊ+¯pôèQ‰Éd! QSSC(òÖØH+`H !"·qü&HIÙl@ ó\˜Æ?ýÓ$„.:/QJmhÅóZ,‹Åb±¸ˆHw´CZV(âæ›oæ»ßý.ÙÙÙ-vŽýû÷óþûïSRR@2™$##ƒX,F,#++‹êêj+@Z+@Z§AÒ}úôá«_ý*ûöí£°°ÂÂB:à8«<»ÇDäc´ ÙlBÛnó4{j1”R{Eäaœ§Åb±X,Ë)â›@Ç`0ÈsÏ=Çĉ[ìÀJ)>øàöìÙÃÑ£G->233©®®Æï÷#"ÔÔÔ™™éMÁ²¤°¤e8íSÎܹs™:u*eee9r„H$BMM •••ìß¿Ÿ 6ðÁ°~ýz£ÆƒhÏòaÀ5žcÖˆÈfêFK6;U3½“•Rq ÞœcX,‹ÅÒ\œ´à;Ñ®Œ]"ôoÞ*`…5I9ã™pÝu×1lØ0‚Á J)âñæ Q*++Y½z5EEEÔÖÖ¢”Âï÷¨­­%33“ÚZmþ …¨­­õ¦{YÒ XÒ2 ÈÉÉaòäÉ$“Irrr‡Ã$“I÷¡”bÆŒ”——‰D¨®®¦¼¼œ’’>øà–,YÂæÍ›Í‡"ÝevLʹ*EÄDIÌój¥Tq+¾^‹Åb±XšŒÓãáÛÀ€vžUƒK<Û+€•hQò¡Rª1-mƒîýû÷§W¯^TUUÇÉÈÈÀçó´9xð ………lß¾Ýj„B!b±‰D­û0iXÑh”¬¬,¯ ¯-Bo¬i 8aßÞ#\såOéÚ­=#F0aÊ&MLFF€P(D§NèСJ)÷Ã1iÒ$þõ_ÿ•ššªªª\a²fÍ.\Haa¡Ù6q9ß{"~|ÿÓHݲX,‹¥¹ˆžfþð3 t7ê믿ž®]»²k×.6lØÀúõëMWêÎÀ眇9Æàz¦ú)à1¥Ô‘V~)––! Ún×™™éFBb±ñxœ¬¬,÷ï†8tèË—/§´´€@ €Ï磦¦†`0ˆÏçs‡IÃ2ëm¤u±¤e0`À>.ÜËöOбS.o/ZÇ3ÿXLyY„`ÐO§ÎyôÍïÂá½þ&LDFF€@ @^^999tìØÑ&&Lছn¢¶¶–ŠŠ ÊËË)..fÍš5¼üòËìß¿ß\CðŸÎówZý°X,‹å8ˆÈEÀ/ñ ‡7Üpÿïÿý¿z=¢ÑIôní IDAT(ëׯgÕªU|ôÑG|ôÑGìڵˬîí<F7‰Èd¥Tië¼K ’Ü17ÃÜ», F …BTTTM"‘p×%“I yÿý÷ÝŒ“ŒŒ ’ɤ[hnDF0tӰ̲P(d¶2V€´ à˜Ù¸~Yá3¯˜ànPSãð¡RŠ•rø`o¿µyO.&“ Ò±Sý»1lxoÆMèÏÈQ}1Ÿ`0H  ++‹Î;Ó¿ÆÏ7¿ùM‚Á «W¯æÞ{ïeÇŽ g‰¬±X,Ëiˆ ~\i–]rÉ%ÜsÏ= 4ˆteŒ7®NˆÒÒRÖ­[ÇÚµkY½z5o¿ý6UUU k(Üði¿K‹ã ¥T‡ÁDB‰ÕÕÕdddFéС±XŒŒŒ ^~ùe3pk<ü~?nÊU<'‘H¸ËÌvñxÜ…±)X­€ ÍDD@?ð ´oŸMmmÜ»]»u k·¨‘Çö¯ª¬æÀþ£.ãÈár^|þæþïB”‚pvˆnÝÚQп+£ÆæsÉe# |®êO$ÔÔÔ‹Å7nœùðYån±X,–SŽˆtînÆo >œ{ï½—‹.ºè¤×¾}{.¼ðB.¼ðBV®\Éu×]Gee%À•"pLV,mW€D£Q^zé%ú÷ïO~~>YYYîF^QR]]M"‘ ²²’Þ½{³~ýzvîÜ à¦T¥š›h‡IÉŠÅb„Ãaª«« ƒ$ ie¬i>ùh'+À®‡Éë˜KUm¬á»Ø¬èÞ§ ÝûtqW%b Ž–TPR\FIqo9Ì’··0ý’aøýu›ò$“I8àæ;%-öÊ,‹Åb9IDÄ| ]çÑts¹ïÿû|ñ‹_¬“ïßT8ÀÛo¿Íˆ#X¾|9@º˜ÝÖ‚´-’ †Ï磠 €^xòòrÎ?ÿ|FEçÎ …B˜í ±XŒÊÊJŠ‹µO(r#FpdddH$êÔ}:S âÁ VÀ æ3ÐüÃD@Š‹+éÒ«Õ5MŸˆÉiŸCNûú €Ê²ï¼¶Š¬¬ ªªªˆD"„B!Âá0ñx1½F@ÛZ,‹ÅÒêˆÈ$t:Ô8ЃÂ[o½•Ûo¿p8Ü"çxýõ×),,¤]»vu†1-Ó6ÛÒš¸$ 2nÜ8ÆŽKyy9[·nåå—_F)ÅСCéß¿?íÛ·'¸B$‹¹Ì£Ñ(>Ÿ¯N¡¹©ñHM¹2uÞH‰íÒºXÒ|tìØ‘Ž;PUUKŸpˆHÍñÝËÞÝGèݧ ëA:vìè~¨ÌÃ#@6¶ÈI-‹Åbi$NGë€q„À¥—^ÊÏ~ö3òóó[ä‘H„¿ÿýïn,K¦ØcÛ£^z"‘ ++‹#Fpî¹çRQQÁŽ;X²d ôîÝ›ºâS)E4uï  žÕnjT$‹Å\’‘‘á®ØVÀ æãZð””Tâóù „BTפwÃUîhp¾&‹Sr°”ƒ»‹©*0íâ!€v I&“„B!D„h4ŠRŠ#Gܨ³ ‹ÅbiD$ˆîçñctýû÷ç§?ý)_|q‹gÓ¦M®Ã³eMéaH@DftëÖí·%%%Å8}@LºÁრ8¡C‡RVVÆž={\×*¯ãU4uÇH±XÌM¯2nXñxÜ!Þ¦„F„xÎoï£VÀ æSÇkïî#ƒA‰ÔÄOê.N&“Dʪ(;\NÅ‘ ÷à >R;–””‡ÝYqq1GõzcÛ,‹Åb±|êˆÈW»qúy„Ãan»í6¾óѨc¤sÀò’H$xíµ×(..v X”R åîÛ™ë6€ˆÜõ›ßüfxVVßþö·)**rBii)¹¹¹@}K^S¿QPPàFJÌv^qa ÍkkkÝBs³,¦-N75&V€´V€4Ÿ:=@vì8DF(D,ñãÖ€èû;OR[YMmE555îìN ¬³u¿þÚ#ݤ_{¹#GŽxӯʀ}-öÊ,‹ÅbIƒˆ|xŸÏǵ×^Ë]wÝE—.]N´k£Ù·oï¿ÿ>¥¥¥îLw0tÓgÂápjc:;pl(¥V<òÈ#3Æø'“I‰=öÁ`)S¦Ð§OÂáp½ÈˆÙÖëŒåfD£Ñ:uf™‰”˜¦„‰DÂí‰Dê\b+¾g-V€4Ç‚7Ž¥`m+<@(;“X¢þDLRA2#Q'^%Q#=&Rü?~üõöó‰Ð­{žû·™Yª©©¡¦¦¦Nº:Ñt’Åb±X,Í@DÂÀ6l¿þõ¯ëôëh V¬XAQQåååîÄœÉë÷ù|7•ƃýýküpÑ¢Eï.Z´h–ßïÿ:J&“n¹å>ùäV®\ÉÓO?ÍðáÃ]'¬ÌÌL ®%¯$F\˜z#RLz•W¸šâts™Bt[„ÞºXÒ< ÐÇÝÈž½G $ª£•L’ŒÇIÄ’¨X¢Ž’÷ãÃ߈0uN^ˆ@ÀG$!••E2™DD8xð ÙÔÖX,‹åÓæR £ˆ0wî\èí¡Ð,***X¹r%û÷ï'b¦¦ÐØ (A§Ï˜ßD;pl8½Z Dd0=™LâóùÈÊÊbذa :”ÊÊJŠŠŠ(,,dñâÅäççÓ·oß:NXæ!"ÄãqÂá°+Lý~Z@ àÖÎz£"¡Pˆªª*|>Ÿ!ö>j¬iÌ?ú÷ïÀ‘#ü>?‰ŠÚ:ú6ííîÙ³ ¿lŠ7VsV€X,‹¥•zâmÈ!Äb1·(ÜÌ<7…Ý»w³uëVŠŠŠÜ™mo¾¾w†;»3Ûl HÛCAý"tóÿ¾ÿþôïߟªª*8À¶mÛ¨®®fÒ¤Iøý~w! º÷‡Ià õG0t‹Ûc±˜ë†å‰€Øf–­€ Íc @=Ü¢©ÊÊ(ÁŒàqwjÇì± Îétl©óòûýTUU¡”âðáÃfµ-@·X,˧M 77—P(äÞL¡°™Í©.UiQJ±gÏ>üðC·©®ßïwóõSLúL0´¶O=^ƒ‰n$“I‚Á ={ö¤OŸ>n„£¦¦Æ]o2BREj2™tï#³,׫1÷”sV€´V€4:Xµµ1ÀGF°´ª&¶H0P ŠŠ 7ìh Ð9âý‚·‹Åb±|Ú¸Í㼘ÙåD"Ïç#‘HˆD"dgg§Œ»NEÛ·ogåÊ•näÄäð{»W§Ú¦š^X)­i{Ô  ï£ÚÚÚ:}> Fpšh†Á+RÍý ‘:ÂÕÓ,3M ÍþV€´V€4:=@¬ÐÑæ|¦)=zéteñÚÕyÒ¯Š•Rëïm±X,K‹â¦Í¸ <…Á xÉdÒM“ŠÅbdggS^^N0t¬.\ÈîÝ»Ý<~“>ãóù…BTWW …ˆÅbu Ͳ”‹MÁj{¸Ä{ÿÌ›7H$´iÓèÓ§OR‹ÐM}P0Äï÷»)W±XÌÞŽç&:ç­)2©í6ÒzXÒ<êXðl&´xàÀ³©~X,‹¥5HnÄbÿþý„Ãa²²²Ò6“«©©!‘HPQQA8& yæ™g8räˆÕ÷ûýu¬TcQuu5Á`Ðýíó.KÁF@ÚõR°”R\qÅlÞ¼™'Ÿ|¿ßÏØ±c3f yyÇA½Eè¡PÈ£Þ.èf¬äí÷aÌ ¼Í Í2+@Z+@šˆcÁ[Ç" EEGÉh‘úcäµ !‚«Úkjj\+º”t[ÿa±X,–֠ΠqÅŠ¼òÊ+L:•ñãÇÓµkW×.Þ;[L&)++skDJJJܦ‚&šaf¤½ãÂá0‘H„@ à›e V€´=\1ë¯íÛ·gÒ¤IL™2…ŠŠ 6oÞÌóÏ?OVVC† aðàÁˆˆ{Åb1Wp¤¦\™õÆ Ë›še"jJ)oä³"R ”ÚyjÞ’³+@šNOdešô&~8tí–³Ý5ù‹‰DaÿþýfS±X,KkP§äóŸÿ<“'OfÆ <ùä“FÅСC騱#>Ÿ¯Î಺ºÚu)2=Œ£‘Éá7ëƒÁ ÕÕÕdee¹ùúF„„B¡TÇ-›‚Õö¨s/yï“D"á¦ã1‚Ñ£GSQQÁ¶mÛêˆÀ½gŒC¨7’æ­J510÷[$qu~~þÀ}ûö­‘‰J©í­ý†œ-XÒt€.¢ëׯÑX’`#úzœ ½úèºŠŠ 233ü~?ååå^,+@,‹ÅÒÔK›éС\p“'O¦´´”?þ˜ùóç“——G¿~ýèÑ£yyyˆH×"oZŒ×ÅÈXÎ' 7å*##í-1‘ŸÏç½.i{¤-BOMåK$n¤bàÀ(¥ˆD"î¶Þº À½?̳÷Þ2·D"á.3=B”Rdggó½ï}¯KEEŶ޽{¼wïÞ€·€wœ&–À ¦3 oß¾nJÔw¾{!»w—²|Ù.¶l>DYy”“û>¬-éÕSG@233ÝB«@ À‘#G8|ø°·oS3^‹Åb±X,ÇED&},H?h4‚aĈŒ5Š#GްcÇ>øàFŽI·nÝ\ëTŸÏGFF†›“H$Ü4¬ÔT™¬¬,"‘ˆ[ bRjRœµ¬i{Ô)BOWCdþmþŽF£näË,7õ^ájć×~×›šeî­P(äNê‚No>|8íÚµcΜ9EäÎÂÂÂ;Ÿyæ™ y ˜¼¬”:Ú ïÏ‹ M§Ž¯¡W¯<¾põp”FuuŒµk°víö¨"™8ùïÆNuD% º_؉D‚H$âM¿: ”*nÖ«±X,‹¥DdÆÔ©Sß7n/¾ø¢Ú¹sgƒ½Ìsmm-YYY >œsÏ=—xêþ6­\¹’`0HAAë„å‹ÅãqwÖÚ[î÷ûë¥anƒA3« Ôéíà-4ödØÁ_Û$­ oCÑtë×~×ÛÝÔ‚„Ãa7}ËDE¼‘’ÌÌLÊËËݬ}ûöíPJ]þì³ÏʳÏ>{y0¼jÒ¤IçO˜0ÁWPP@§N¸øâ‹eöìÙ£”R£Ö¯_÷ã?~TDæ£ÅÈkJ©ŠOù}kóXÒtVs–,YÂÁƒéÖ­[½ RÅpÏžÙtï^àt‹±nÝ>.,ãHI ÉdýïΜ°¿Þ1@פ O‘7Ñ9Šo)¥>lö«³X,‹åsÿñLY¸párrrÂplИ››Ë«¯¾Êž={;v,£G¦K—.®Ôý=4û3o݇)^Á‘H$ê¤a‡,3ÛmNÑšo†¥Å8a'tïß©ëLôt3ÂX,æ—‹ˆ›Î—‘‘áµgeeQUUåšá⹆G”R&­}#ðsé¼xñâéÀƒž=iÒ¤ì¡C‡Ò£GzõêÅ<Ð!ßpàÀ,XÈÉÉy·ªªê à%¥”$Nƒ Mçÿ€ÿÚºukÇsÎ9‡ &0kÖ,¦OŸÎ¨Q£ÜŠÈ…B~Æë̘1I&“íªd㦣Ø_CMÎmlß!Xï~¿ßý`íÛ·Ï,;Ddð:ð°H)UÕ¢¯Üb±X,gJ©ZàË"â?tèÐ/ÛÍ€ÍØ¢–••±}ûvÞ{ï=Ž=Ê!C8çœsèСƒ›^eWGooTÁaf«‹QMM»iT話¤mÒ¨"ô­3BÄ×@ PGpTWW»6Î555dgg»5E& ëx4÷ggEä_ '³rss¯œ8qâóÎ;sÎ9‡víÚ1{ölÿM7Ýô™ÚÚÚÏ|ôÑGŒ;v×êÕ«SJÝײo]ÛÆ &¢”Ú&"ç/'‰¡Ë–-cÙ²e0}út.½ôR.ºè¢tÍ’êÑ»O˜^½³ŸôZ6n,£G÷|î¿KKKI&“:t€o}ë[ìÚµ‹E‹QYY иÕyDEd=P < ¼ ”²V…‹Åb9i”R ùê“É$áp˜aÆ1lØ0***Ø»w/k×®¥¦¦†Þ½{SPP@8®ÓP×ï÷»@¯#‘Ïç«cÉëu¾ò.óD@ìïZÛ䤋нëÌr“Îçínn–yïc|à³&RÒØF„ŽÖ»ÎãNéûæ›oÎf3æÒ .¸ càÀtéÒ…Aƒñ»ßý.É’%÷ŠÈ<¥ÔÖ–xÓάiŽ |¸øÐgçÎÌ;—¹sç’••ÅùçŸÏg?ûYfÍšE÷îÝw<rsƒœ~Gתл>SZZÊ¡C‡ÜÜ×)S¦p×]wQ[[ËŠ+x÷ÝwY¼x1ëÖ­C)•Œs1xED®²Vr‹Åbi" 4±ŸŸO¿~ý¨¬¬äСC®e®ÙÇt¯6.Ff h~ÛRS³R›É×,û›Ö6qï%wÁI¦a®3òöö05€›†•j¿kjb±˜+NŠ€÷(U„žà}XD2W¯^}ð¹Î;_5}úô>&Là…^ˆ%'÷ÖœÙXÒL”R5À`ˆ Fß„ÓÌúêêjÞ}÷]Þ}÷]~øÃ2xð`.¾øb&OžÌ„ R=ÌLÙ2”——‹ÅÜô+aÕªULŸ>P(Ä…^È…^Àž={xûí·Y´h¯¿þºù0~¸ ¸»…Þ‹Åb±œ]œÐ¹Èü‹ÅôèÑŸÏGuuµ»(!aÄ…ÉÇ7ª½Íä¢Ñh=+U+@Ú& ¡Ÿ¨ðÜû·±ÚMíía„kvv¶›†eî-ï}äÐŒ{ɾî<¾-"ƒŸ}öÙË€ÕÖ­´.V€´"Òø1:å)УGn½õVD„·Þz‹¥K—Ç),,¤°°‡zˆŽ;2qâD>ó™Ï0}útrrtÏ㉒-  ƒn*V*½{÷æ†nà†n`éÒ¥Üxã&Eëz¬±X,KÓH;h,**¢²²ÒmΛZxîíÙ¡”r»S›bu3(4.F¦æÑÛLÎ8d™”Ï9¬i›4X„žúw:böó6ôÞ3&åÊXíVWW×Iû3÷Q"‘pEH÷îÝsÑÙš]W¤”* ›{œ3+@š‰ˆ|¸è••Å­·ÞÊM7Ýävl9s&¿ÿýïyæ™g˜:u*«V­¢¤¤„’’,XÀ‚ ðûýŒ=šiÓ¦1a†šö|555ìÝ»ÐÂÌÌL*++ÉÊʪã‰nˆÇã¬\¹’I“&ñæ›oœ#"b=«-‹ÅÒê MÿŽßþö·dgg3qâD&L˜@»víêìèÍÝ7M Í@Ñ MúLººÓ¨ÐÌ\·Ä¬µå”Òì"t¥TÚûÈ+.Œ‰¸¦Q¡i^轆©S§Nå•W‚"²ED6WVV~2gΜè§û6œ}XÒ Dä{À/sÅWðÃþÐýÂô2~üxüqúöíËM7ÝDQQË—/gíÚµìܹ“D"Á‡~ȇjÝ>}ú0uêT¦L™ÂرcÝO2™äðáìY³Ð3F#GŽäÈ‘#€Žˆ„ÃarrrìØ±ƒÇœîÝ»{­‚£ÀxÙ‡nb˜h…·Ëb±X,gõýû÷ç/ù ÅÅŬ[·ŽÇ{Œ¼¼]»v¥´´”ÊÊJ‰º¢8++‹x€¥K—òÈ#ð÷¿ÿyóæÑ§Oz÷îMçÎÉÉÉ! Ò¿úôéÃîݻٱc$Õ)ˆ]ºták_ûW_}u½‹úè£Ø¾};:u¢¶¶–êêjòòò¨­­õÎ0TçuåÝ+@,‹Å’W€4fÐF©®®®ó›hˆ™¥6âÂÛLÎëåm&çMÃ2~"·¾õ-òóó(¥~³|ùòß 0`϶mÛ^^+¥lÿéGÚz"Éî/³ŸqKó o‡qÈòÞG¦µAFFk×®uŸŸ_ÚØ‹wZ †fggóꫯL$›À¦™3gîÂ6Èl+@š€è¤Óö999äææºëâñ8]ºt¡[·nTVVRUUEUU•׫œ)S¦0eÊvìØÁ{ï½çІ÷ß¿žh tïÞ‰'2fÌ&Ožì:ŒxI$¼ôÒKäää¸wŒÉ}4ZÀ‘ã¼¼O€›øÖX,‹å̧YƒF³¯7å*Õ6դʘ4,o±±]5é5æ¸ ,`̘1ôë×Ñ£Gsá…ößÞ¶mÛ·_|ñŨÏç{C)õ20_)µïS—,¡ÁHº§['"$“É:½dLM‘÷>·a$qÅì믿ÎüùóŸÏ^Ç¢¬¬,ªªª…B$“I7j‹ÅvC•RµÀ­"rÎóÏ?E0üüرc/š0a‚oРAtêÔ‰ .¸@fΜ9±uëÖ;Ÿ}öÙ y -F^RJ5:ÇÒlšU„Z|ˆHF•©õC& ˧oß¾?ÿùÏëaÏøñã?úáøvFFF³„¨R*©”zíòË/`þüùád29Àï÷†Æb±`V€4§ËùrœÔ+ à“O>I»½ùÐ$“I×>tžb("++Ë#TUUÕK¿:eeelذŒŒ :ävÿŒÅbªªŠW_}•M›6™ÝÞžL=°Héî‹Åb±œˆf;™”™D"Q§{µWp˜4,Sœ^]]Mvv6‘H„`0èæý;;âÜg;ð[à·"ÒaÅŠŸ>dmÜÝKIDAT×§OŸ+¦NÚ~ĈôêÕ‹N:qÇwäÞsÏ=sŽ=:ç­·ÞJvìØqÙÑ£Gÿ‰NÕÚòi¼—)B7˼‘2¯aIç–-[Æßþö7Sýâ¿øÚµ×^ÛÍËý~ÿßfΜ¹Ó,¸üòË#À:çá{çwÂ-pž3+@Ï€ö:u"SVV– °iÓ&fÍšÅ7ÞÈ•W^éZ ¦Ã¤X9>Ódee‘™™Ivv6ñxœh4ꊑ†œ´6nÜH8&RZª'jR]B:ÄóÏ?ÏáÇjÇ€%i—-’²X,KãiÖ Ñüm" &jïµäê5“3ëMŠ1àu/j°ÿ‡Rê(ð4ð´ˆøžzê©ó€YÙÙÙWL™2eôرc¥  €:pÉ%—ø®¾úê)µµµSÞyçÿ‘QJ=ßÌ÷ËÒ0ͪ'ò¦ó)¥êô1ã1sÕÔÔðÜsϱpáB:wî|èŽ;îxiøðáG›û"”R;}>ßßfΜY~¼×:mÚ´Êã¬?«°¤ˆÈ ÀÅ#FŒàÁ¤K—.ñè£2þ|-ZÄ¢E‹h×®×\s ×_=£Fr÷OýÐFĸõ"999dgg …h×®J)ÊÊÊê¤iÅb18@ff&………$ ÷CgÜ¢Ñ(6l`þüùFÄv7ðò|ÞY#‹Åb±XN@‹¡›´ Žý®‰j˜âP(D<¯3¸4“mžÉºF5 tj=V8»E¤Û믿> ˜5dÈY'N >œ=z0qâD€á€ Ÿͪ'2™#ñx<­³Ïç#P\\ÌŸþô'¶oßÀ¹çž»î®»îZ‡[¢qå{‘Hd¾írrXrDä*t¿I?ùÉOÈÎΦ¤¤„`0Èí·ßÎ]wÝÅ¢E‹x衇صk<ò<òÆ ãK_úW_}5:t¨wìêêj¶oßN÷îÝÉÎÎvÓ´B¡¹¹¹n-Hii)Ñh”½{÷""8pÀu³23CÆÉ¡ººš×^{Íí¦|ü8nS&ÉQJYUn±X,–ÆàÚð65 +™LÇÝ”«D"QgæÚˆ‹p8\Ç6ÕÔ‚˜4,IK“’J©ƒÀ\`®ˆ·lÙ2˜Õ®]»«²³³ó€çšr\K£)Ü>e'Q3ËŒIí3=hâñ8[¶láᇦ¼¼œ@ û¾ðÖM7Ý´¡®=¼0kÖ¬U-p¬³+@Ò "íÐ)W_6Ë&MšD2™dûöíôíÛ—p8Lee%`РAÌ›7h4ÊÓO?Í_ÿúW6mÚÄ~ô#î»ï>.¹ä®½öZ.ºè"àØgÍš5¬_¿ž±cÇ2räH:vìH"‘ ²²’½{÷’M^^ž{¾'žx¢Ž¢÷¦\•””ðôÓOã¸r%ÐáæW8qzU`½Ñ-‹ÅÒXÜ߯“ËÝ÷ûýn!¹ßï¯ã†åm&gœ|>Ÿ1‘Ïù›=“­”Šï8;š{#B.\ȼyóH&“´oß¾ä?þã?^7nÜáæ^´ˆ”O\vÙe{š{¬³i¬ÛÒÙ‚ˆLþ ôèܹ3×^{-·ß~;íÛ·§²²’Õ«W³ÿ~ èÚµ+G¥ººÚ™éÖ­6làü#+Ws¼íÖ­W_}5ÿò/ÿB~~¾ëm^TTÄš5k(..¦  €>}úЮ];B¡J)† ÆÆYºt©«ð“ɤëøPXXÈsÏ=Guu5èÙ„?Q÷{€÷•R-‚´X,ËY€ˆÌBOpqøða|>ŸÅH&“iÿú÷ÁƒÙ·oŸ›2Ô™X3“m€)1î’f»`0È<Àž={èÕ«×–‡~ø{¶\ÛBD2Ñã•þçŸ>·Þz+Ó¦MsÇ:Ç»ŸjkkÙ¶m›{k窪*}ôQV­ÒÁ‰ÁƒþøÇ?~­}ûöÍžpUJm‰D"ÿ°}=š‡ Dä'ÀÀôéÓ¹ÿþû ÄãqjjjÈËË£Gøý~¶oßÎÚµk騱#=zô ‹qôèQW‘÷ë×`0È /¼ÀC=d Â?~<³gÏfæÌ™dee¹j}ß¾}lÞ¼¿ßÏ„ ˆÅbôìÙ“õë׳wï^Š‹‹ët‡]¼x1o¼ñ†™(~4¦ j+ð‘²7€Åb±XN™ ¼ pàÀ@ƒņDÈ8xð`4,c[oÄE,C)E0t£"ÉdÒ-XD"<øàƒìÞ½›þýûoûÝï~÷€RªRD¶›ÃáðÇÓ¦M³.§1"’ü¸Ø,:t(_ÿú×™5kV뽇ŒËèöíÛÝæ”ñxœ}ûöñ‡?ü}ûöáóù³fÍzç–[nù¨.U%“Éw/¿üòW±·ÙXâ "—/ƒvS¸í¶Û¸ùæ›Ý¾÷aš õêÕ‹Î;SUUÅêÕ«)//§wïÞ„ÃaªªªØ¶m3fÌ ;;aÕªUüå/á•W^q ïÂá0S§Nåßþíß0`J)²²²\ÂêêjÚµkǺu먨¨ ¼¼œh4Jee%O?ý4[·nýAxø:ýêx(´ðØú©½™‹Åb9c‘ϯìß¿ß~$“IöïßÏ¡C‡ðûýn݇i&¨®®&##áPȵä5©[¡Pˆûî»ýû÷3`À€ûÛß¾˜æZ“Éd²H)µ)~2{öl›2sš"";+q&‚{ôèÁ¿øEfÏžM»víêÜCÉd’ªª*víÚå Ö+V0wî\jkkÉÍÍ-¿å–[^¾è¢‹šÝõ^Dj|>ßÓ—^zéÆomi g½‘öÀãÀ€ 4ˆ_ÿú× < ­ñ>jkk ‡ÃôïߟP(ÄÎ;Ù´iû÷罹¦†Ûn»p8L$qݪªª˜?>úÓŸ(,ÔÖÓ999<ÿüótíÚµNšè°ô† ðù|”””°}ûvž|òISŒ^.4O×Ý<•8ºãëÞ}-‹ÅrÖ "3Ð}¥Ø³g™™™æßû÷ïçðáî–7}&5 ËtK73Ü& «¦¦†_ýêWìÙ³‡Aƒ>øàƒ/èÚ}>_I2™ü8<`À€-Æ ³5§"2øOàt«B¡—]v×\s ƒv#f•••‘H$xúé§yóÍ7(((Øñãÿø•nݺµDšÔþP(ôÄŒ3Ž´À±,V€ˆüø h¥ý“Ÿü„AƒÑ«W/WœH„xùùùôêÕ‹x<ŽRŠ:¸y¬€›ÊeÄÈ'Ÿ|ÂÍ7ßÌúõë™5kwß}7@Àýpn:¸w¯Ö ‹/æïÿ»É™Ý üØßˆ—Z ¼ëø¡[,‹ÅÒ$œZÉEEEEdee5Zx˜¿÷îÝËÑ£Gñù|¦!œÛH×1¿¥& Ëï÷»ÇóûýÜyçTVV2|øð¿øÅ/œäëˆ;EdsMM͆«®ºÊv@?‘žÀ­À7€®fù€¸ì²Ë¸øâ‹Ù·oä©§žbëÖ­ˆˆš6mÚ{ßýîw—ûýþfp}>ßG]ºty~ܸq 7g³4‰³Z€ˆH¨2/¹äî¿ÿ~òòòX¶l7ndܸq 2„víÚQ[[Û(RVVFii)3gÎ$;;ŸÏG(" Ö" ›,9r„›o¾™7ÞxБ3f0sæLFÏ磰°ššžxâ –.]jv3Ù˜%Àb¥”-˜²X,K³‘‹ÐNQìܹ“ììì“.Bß»w/GŽ©“R•.ÂaìUãñ¸›†ejAæÍ›Ç’%º¿î7¿ùÍç?ÿùÏooæK+ñù|›âñøæêêêí¶¯Ã鈄€ë€Û€ñf¹Ïç£}ûö”––’L&ÉÌÌŒ|ãߘï˜4—„ˆÌ¿ì²ËÞkcYÒp¶ tÁvø{ßû#FŒ ;;›üü|ºwïΖ-[Xµj¡Pˆ1cÆPPP@MM[’ú())aùò宽öZÊÊÊÜ­üü|rssÉÈÈpóe«ªªX´hK–,ᡇªw}ݺucÚ´i(¥x÷Ýw9xð è4ª'7xY (9Ï1`RÊ~‘Z,‹¥ÙˆÈT`1À¶mÛÈÍÍ=©úD"ÁîÝ»©ªªr—™âso¿cÎbÒ°Œ%ïÑ£GyôÑGÙ²e #GŽÜðÀ¼ÚÂ/3¢”úDD>ŽÇã›®¼òÊŠ>¾¥ ˆÈÐ.]º|3^WVVÖÀçó%†¾ù¦›nzÈ!-Å*wºšïlcYଠ"ò&pñ!C¸í¶ÛÈÎÎtÝE¯^½èÝ»7ñxœÕ«W³qãFFŽÉСCÉÈÈ ‰¸âãСC,Y²„ŒŒ ®»î:¢Ñ(±XŒh4ê>cÇŽu'mÛ¶… ’L&¹ï¾ûLG×eÀ /Íå–¿>IY¾mcW$”R6§Õb±X,Ÿ "2X ðñÇ»ÅÁMÃJ&“QZZJ  Û‘7¬h4Šˆ¸S ""ø|>vìØÁŸÿüg·!ï”)S–ßqÇK[ Ý&üSD¶+¥†C•RýDÄ'"ÉÚÚÚlŠÖéEŸ>}:6¬çyç—7qâÄ é."]•RÝD$Ø”c*¥vú|¾¿]vÙeå-}½–ºX"r:) …˜2e —\r ݺus·éÖ­ùùùtèЭ[·òþûï“››Ë¹çžK‡صko¾ù&YYYÜxã(¥êX,FUUË—/gæÌÿßÞýÇF]pÿ<ßËÝaKKK…¦HM'Å ±‘ "µz‡j\ÌØlf c[³˜8—¨ÍöÿòÁâ¶0ÖX±š:R™ÂXKSÀâ ;:{¿ÊµôÇ}Ÿýñí]Ä cåx ãýú‡p\Ÿû^I®y÷ûüX¥êêj]ºtI{öìÉl3¸uëV JA`ôHZ$éÛ’Š$IG|àñTó!IG­µçœ|³w=cÌ2?7uòäINyúÙ³g522’Y™>ˆ0½Æ#½8}dd$3 ëÀÚµkWz:ÖÈóÏ?ÿöÚµkovÚ•Œ1—B¡Ðoc±Øu?K[ZZîÉÏÏŸŸJ¥æ®^½ºõf_Îx­­­³ÃápÙÄÄDi(*ó}¿t2N"7ü"Ïû`hhhSïܸëD’Œ1ß—´URñäßUSS£X,¦ H NßÌÏÏWee¥ÊËË•H$ÔÙÙ©>úHccc*..Ö† 2c~1@’ɤ:::4þ|544hxxX­­­J&“™?·lÙ¢+W®HÒ¯œçñEWœX>¢ @†%%¬µü6àÔäv©‡$éã?ÖìÙ³§¼½¿¿_ÉdR¡PHÖZ¥R)…ÃáÌ4,IW8Öðð°vîÜ©? ¦ã—––~þÒK/í©®®¾œ…·s&''çwõõõW³0no¦¥¥¥pÖ¬Y¥©T*%E’B¾ï°fÍš£Ó}wdÒäiœ?P°õÛ·ÒÏ›7O±XLK–,É|P†ÃaUVVª¢¢BÑhT.\PII‰Þ{ï=Ýwß}*//×ÄÄD&>öíÛ§ªª*Åãq%“Iµµµ]'OžÔŽ;¤ ,6+XXnLµê³ÖfãC€›fŒY"é°$õööª¸¸xJ‹Ð}ß×™3g2çj¥§%§§a¥·ßõªÜÜÜ̹÷Þ{¯*++UXX¨cÇŽéÀJ¥RZ¾|¹¢Ñ¨:¤òòr=þøãºxñ¢ÚÛÛ5::*k­|ßW"‘Ðk¯½¦¡¡!)8ñ÷ ä µö_Óñ=àFŒ1‹%uIÒñãÇURR2¥Eè¾ïëôéÓ™»¾ïËZ+Ïó2w=&&&ÔÓÓ£7ÞxCÃÃà ‡ÃcëÖ­{wݺuÏÂ[˜˜hyòÉ'ea,ßòŒ1 %½¨`û·ˆ$E"-[¶,³N$}£¨¨HUUU*++Ó¹sçtøða 衇ÒŠ+400 ŽŽŽÌ­µVgÏžÕŽ;ÒS¯NKúµ¤I²e.àvdŒÉ“ôIáææfÕÕÕMiý‡µV}}}™3¶Ò'žû¾¯P(¤ññqµµµi÷îݲ֪  à /¼°çá‡þw.?1y¨ÜçY À7D€| ƘRI?•´IÁ¢pcôÀhåÊ•Z´hQ&*"‘ˆjjj4gÎE"cÔÛÛ«îîîÌs¬µêììTKKKzç«3’¶H:&©ÓZËí`ÀmËóWIK‹‹‹õòË/ë©§žR(úZÓ°¬µ:uêT&>FGG3§ _¾|Y¯¿þºŽ?.IZ¸paï+¯¼Òž———ƒàNäää쪯¯¿–…±Üd &ÃY¯à®HuúñŠŠ 544\·ND’jkkuåÊ=z4ÃÃÃjnnVwwwúË*8P°ÛZË(ÀmÏs¿¤Ý vlÌlIJaÃåççe„HÁîYéÅçéûûûµmÛ6% …B¡T<óæÍG²p­~*•zgÍš5ï+X_ `š ßÐäAL/JZ-É“¤Y³f©¾¾^uuuš9s¦rssF•H$äû¾ºººôÖ[o¥§\¥$5+X÷Ñg­íš®÷ÀTcrìܸQRž$åääèÙgŸÕsÏ=§ŠŠŠÿ9%K vÏ2Æd¦\‘çyþÊ•+ÿÒØØø·l\‹µ¶ûüùó»7nܘµ#²ŒÉ2cLDÁ:‘FI•’fJêW°gú~IŸ*8hðŸÜõü¿1Æx’â îˆÄ5¹½çyZ¼x±|ðA% uttèêÕ«ÊÉɹºiÓ¦?=öØcŸfáå'<ÏûãªU«:³0€[„¹…&Ï™-)WÒ¸¤Kl¯ ¸[cæKú‘1æ»ÖÚy_þ÷9sæœojjÚ3wîÜd^îâµk×~ûÌ3Ïd#dÜB¸å–/_¾ö³Ï>ûŽïûå3f̘ÑÐÐp&fclß÷û"‘ÈÎX,–p‹ `ZìÝ»7ORY$)±Ö–ù¾_êy^™µ6ïkaS©TGww÷»MMMœ¡Ü!p[iii¹'//¯Ì÷ý2cL©µ6ýgAú9Ƙkžçý!÷N絘:ÜÚÚÚ¢©Tª8‰äI:Ç”+àÎD€pÆ›î p÷ @8C€p†à À€3gÎ œ!@8C€p†à À€3gÎ œ!@8C€p†à À€3gÎ œ!@8C€p†à À€3gÎ œ!@8C€p†à À€3gÎ œ!@8C€p†à À€3gÎ œ!@8C€p†à À™ÿèà_YÿŒÌIEND®B`‚lasso-2.8.2/docs/lasso-book/figures/PaxHeaders/sso-brws-art-3.svg0000644000000000000000000000013214404126114021610 xustar0030 mtime=1678814284.101743529 30 atime=1678814284.749747207 30 ctime=1678814323.181965678 lasso-2.8.2/docs/lasso-book/figures/sso-brws-art-3.svg0000644000175000017500000064765214404126114025104 0ustar00bdauvergnebdauvergne00000000000000 image/svg+xml ServiceProvider IdentityProvider 4 SOAP 1 HTTP 2 HTTP 3 HTTP HTTP 5 lasso-2.8.2/docs/lasso-book/figures/PaxHeaders/sso-brws-art-5.svg0000644000000000000000000000013014404126116021612 xustar0030 mtime=1678814286.033754492 30 atime=1678814286.693758238 28 ctime=1678814323.1859657 lasso-2.8.2/docs/lasso-book/figures/sso-brws-art-5.svg0000644000175000017500000064765614404126116025114 0ustar00bdauvergnebdauvergne00000000000000 image/svg+xml ServiceProvider IdentityProvider 4 SOAP 1 HTTP 2 HTTP 3 HTTP HTTP 5 lasso-2.8.2/docs/lasso-book/figures/PaxHeaders/sso-brws-art-5.png0000644000000000000000000000013114404126116021600 xustar0030 mtime=1678814286.873759259 30 atime=1678814286.817758942 29 ctime=1678814323.15796554 lasso-2.8.2/docs/lasso-book/figures/sso-brws-art-5.png0000644000175000017500000013557414404126116025070 0ustar00bdauvergnebdauvergne00000000000000‰PNG  IHDR ¡™Ð< pHYsÊ&ó?tEXtSoftwarewww.inkscape.org›î< IDATxœìÝw˜Uõµðñï:m 03tD$*"X°kĨ‰šcÌ51¹yo4æU£¹1æ¹÷S5¹‰%‰] Љ"½ƒôSO[�{Μ)0”õyžyÎÌ>»bfÎ:¿UDU1ÆcŒ1ƘÖ:Ô7`Œ1ÆcŒ9rXbŒ1ÆcŒi5€cŒ1ÆcZ ÆcŒ1ƘVcˆ1ÆcŒ1¦ÕXbŒ1ÆcŒi5€cŒ1ÆcZ ÆcŒ1ƘVcˆ1ÆcŒ1¦ÕXbŒ1ÆcŒi5€cŒ1ÆcZ ÆcŒ1ƘVcˆ1ÆcŒ1¦ÕXbŒ1ÆcŒi5€cŒ1ÆcZ ÆcŒ1ƘVcˆ1ÆcŒ1¦ÕXbŒ1ÆcŒi5€cŒ1ÆcZ ÆcŒ1ƘVcˆ1ÆcŒ1¦ÕXbŒ1ÆcŒi5€cŒ1ÆcZ ÆcŒ1ƘVcˆ1ÆcŒ1¦ÕXbŒ1ÆcŒi5€cŒ1ÆcZ ÆcŒ1ƘVcˆ1ÆcŒ1¦ÕXbŒ1ÆcŒi5€cŒ1ÆcZ ÆcŒ1ƘVcˆ1ÆcŒ1¦ÕXbŒ1ÆÓÊD$_DúˆHÉ¡¾)ôî§Ý¡¾óùgˆ1ÆcL‰ÈY"òˆŒkä!'+[î®j‘6"Ò¾Ž§Çy÷se`ÿˆ´‘ÂÖ¸?sä°ÄcŒ1¦éNăõÔã`§ˆÄ¹ÿQÀNà—-vGæˆ9Ô7`Œ1Æc-UÈ¡¾sd°ÄcŒ1¦‰H | ¼Ýˆcú§ùÀràUMgíÓ (ÖaàL ° ˜®ª©À¾½€6ÞÇŠHÂû~—ªîòÒ¬ºÛTuŸˆ´õî HDú.½Æ»ªº®ŽûïîÝûjUÕ†^¯9²X –1ÆcL ‘žÀ\àMàÏÀë@)зŽý‹Dä`ðð`ð±ˆôËÚý?qug‹€×€?Ó€÷E¤8°ïL`’÷ý︕À-Þ¶qÔ¬9xßûþËýWí€ûÕ^`“ýÚz×x‚“‹ ÆcŒ1-@DÂÀó¸º;€î@àCà×9öÿ.ÁÇ]kp«SD$?Ç¥Ç+½ó?œê]Ówðª÷ýñ¸¨/ð`·ÿ 0Êûþoýûû€?àÞGÞãØ«pAÊÃuœÛá,1ÆcŒiç'RÕ{Uu“ª.¾Š[áÈv1.ê~U½KUW¨êVUý+ð︀äK9Ž{BUïTÕÅÞùo¶üTu-Pîý¸ZUWy_»rݸª–~zÕÞÀþ«¼T°w€ÅÀõ^ŠYÐÀàÉúþqÌ‘ËcŒ1Ƙ–q¶÷ø—àF/-é/µwçâ\û{^ôÇäx®Æ}U­Æ¥yÕJj.Þkx·ªs¾¿]D†á‚®¿©jy‡›#œ ÆcŒ1-£§÷¸:Çs«rló ½?‘Á/ö¯˜tÎq܆ÛöâÒ ZÒ£@5g™øß?ÔÂ×6ŸaÖËcŒ1¦eøØmoò޹HÖ±O®®SéÛZœªî‘'€¯zÅè;€«™ªºàPÜ“ùl°ÄcŒ1¦e¬÷û›³žËîhn¥d4ð¾ªÎkû9Ѐ¨1ûÿøº÷µ·êb«¦^–‚eŒ1ÆÓ2^÷¯n¾–cÿç½Ç[[è~¶yí¹ÿ\Ò¡®Tu0 ÷¿ ìžnÂ=š#€­€cŒ1Æ´Œ©¸ù׋È\{ÜBàG@ïûÿ7Ëã*¯%ï¯qµq-v¿‚ë¨õòAÞO©÷ø€ˆüH UuQ®UµZD–“Dä`“÷Ô?T5Øõ¸'G¿VÕŠƒ¼?s„°cŒ1Ƙ൫½ ˜ Ü…+ Lnà˜oষ?àíÿ4.ˆ zðÛùÚìÓ ±•ÆcŒ1MãMïlWÕ½YÏ…pƒÁu¬zˆâZØîTÕÝ9Î×7L°Ø ¬TÕ•YûtŠ€µªšÊz®+ÐFUsuÛBD:ãê5v©ê.)ºÛTu_ŽýcÞó`,ùϵ6óUõô:þ‰ŒÉ°ÄcŒ1Æ4ùà~àKªjõ¦A€cŒ1ƘâÒ·Šó¸^C³WbŒÉÅcŒ1Æs@¼´²>¾®ªKí]™Ï @Œ1Æc>§DäX`<ð¶ª.oÄþÇgo¨j® îÆ4™µá5ÆcŒ9^!÷«Y›ËpéHïUÕº&š·–“pƒ¯ @€Þþ—ã^‡1ÍÎÚðcŒ1Æœ(07é|—÷õ¶ý ðšˆDÝí°x“¦µï5¦YÙ ˆ1ÆcLÓÌWÕñþ"rðp6nåáÕ©ê \ –1‡ @Œ1Æcš‘ªn‘Ÿã‚ÿ‘îÀÀÀ:à`0°HU‘6ÀU¸´©°ø»ªnóÏ-"#ªê–ìk‹Èpܪ̫ªº¾¾„›®Þ7qý±ú^—ˆ”WC€0n¨â_UuWÖ~ç]UõÏ"rp)Ðø/+T7`ˆ1ÆcLKðƒƒvÞãñ¸ÚŠÿÂÕWôÀ¥Gõ‘€©@O`PÜÜ-"—©êÛÞy:xçéü4Çu†á¦“C5 "r5ð.XæÝÓ€?åz1"2x¬¬Çu¿úp‡ˆLRչݿ œîÕÈÜìx°ÄX ˆ1ÆcL ë=fO"ÿ.ð P¬ªÝKE$‚{sð5Uí¢ªÇçâ„g¼©çà‚”ÍÀuÞ,Ž éŒ^Ȟƞµ_oàÞy«ê ¸Àâ!\’½Oà¸@âU=FUûá Öžõ&¥å·g©j‰wþ÷êº'sd±ÄcŒ1¦i D¤÷uŠˆÜ‰{#ŸÄ­2-¾£ªåªZLNþ¦ª™ýUõ Ü„ñޏ”-¼®Zú£²Î}- À£ Üï @!ðCU]ìW;qi_ÙnJ€Tuvàþ>îŽ&enWÕw¼}ÓªZÙÀ}™#„ ÆcŒ1M3Xé}Í~쾬ªgí;UUÓYÛü@â™ç~Ú{Øöˆ÷x¿Á[ ¹—õV÷;Ò{ügp£„ü#ÇþçÀzù‚ˆ ÷¿p«"àR½²e·(6°cŒ1Ƙ¦Z†«íW¿±X¬ªÕ9öÝc[ïñÓÏ­÷»úTu¡ˆÌ®‘ïz+ cÞÀÏr8Ù:»üU˜:®Ô·b²¬žs–dý¶7pæeˆ1ÆcLÓlTÕ‡¹o*Ƕ*ï±]ŽçÚeíã{ø p ðn5Di8ý  h#"¡ÁJQŽýã¸Àê´zι'ëç”·¢bL-–‚eŒ1Æshù+ Cr<7Ô{Ìîõ$.¸Îkß{9ðªÖ·J¼^ èŸã¹Á9¶-Ä­š¤TuU_;q]c @Œ1ÆcµâVFn‘¶þF¯;ÖmÞÏðÞ𿄫ϸhKí‚÷º¼à=Öèx%"½€/åØß_Uùo g?)""RÐÈkc)XƘÆñ†YõÁ “Ú¬TÕ\ùʇ„ˆÜôTÕëõ½cÌPÕµ"rp0CDÆ¥\]‹«íx*0$èQÜÊÇ=@%û Öò<ð.p½·zò®ðàÚÊÚÿIà"ÜÂY"òW`­wÌà à à“F^ßá,1ÆÔKDŽþBŽÜ_Y|QU´úÕ6ŽÜ©ÆÓR’¸7ì›±o¥·ov­ªz§ˆln~ëmÞÜ‹ 0ry ˜‹+MUs»Ü»î¾ÀµÒ"r ®†ä ܪÇ>ïçÙ¸Ö¿åýUD¾ ̾ üwàü«pPð©M¸B|cr«2ÆÔEDJp=á»âþ0=ûƒØŽûtî[ª:íݤǛêÛYUu¨ïÅcšBDºânQÕ\EëÍy­BÜœ‘-ªoä1%¸bõ-utú2¦^€cê$"7â&ã>¨ªß­cŸXcÿhcŒ1ÆXº1¦>=½ÇÙuí+ø‘3DäùTD¶ˆÈ{"rUŽý¾-"O‹H±ˆüPD>‘"òEù_ɹš!"Qù›ˆÜØvˆü9Ǿ…"r›ˆ|èÝË™*"׿Ø÷ï¹"²ID^‘sëzíÆcŒ9p€cêãçð^&"±Æ "7o§/á–êÿ."wgí~ 0xøw × &®#ÌÀ—9¸š@N3®äâ¬{)Þ~Žëÿ®Ø2—gÜ÷>ï¹Þ¸n3OâŠî_‘¯5æµcŒ1¦a–‚eŒ©“÷¾·²˜¼¼«ªksì<°˜œ«ªû¼íQ\ýÈyÀ`U]ìmWG²8SU·Îu®KË/Tõ¶¬ë¼\ôRÕ Þ¶w½sw ì÷0ð àÿªêϲÎÑUU·xߟ¼áÝãUþªŽ×ó]\¯ü^ªºóÀþ1Æ“ÍV@Œ1uRÕ½Àhà  ðM\·“5"òqŽô¤€(ðüàÃ;O¸÷;çò—º'|xÞV_ ö‘N¸@æ ?øÈÅëI-°¸/ÇkÛøñ[¸’ïSÊTµÌ;¶­wMcŒ1Æ4‘µá5ÆÔKU×Wx«ã€Sq)PÃpéI“UÕuª÷x–ˆŒÉ:U¾÷Ø/Çeææ¸®ŠÈc¸ö“ãqí&®ÂMð}4û˜,ƒq©V3µá¥ÞSq-'¯‘ì玪ç¾1Æs€,1Æ4Š·ð²÷u—ˆÜü ×£Þ@J€4PWÍD^ôÛëØÿ1àÇÀuì@®vÿhà–Ûy›Ø ÔÜXÇó«p=ü1ÆÓD€cŠª>("?Ž‘U­váŠÇ‡Õ1ë@¯±Æ«í¸XDŠqµ(ÇTµªÃýz¸Ôn PUûüÝcÌ¡ãÕÚ]‡›LÞ×Dä\ÃåX 6¦ÕXbŒ9("Á¥8¥qÓ€>Î&áºH5‡G€3qÓzû¶5d!°8]D"ªš¬gßpif#TõÃ&Ü«1Æ´:¹ ×íï¸:vÙ)"³¼¯Ù9êîŒi5V„nŒ©“ˆ|KD~*"GgmÏþ h¼å™üWKñß"rRÖ1""cEä@WžÃ¥m}ø2°DUg6twO¿ÅµÕý/` ÞωÿHÿ›}"‘ D¤#Æs‘"2÷{ò¸p8Ì™gžÉe—]ÆI'D~¾_zGÜC?^¶ˆÈ:o^Ó£"òpŽº=cZŒ­€cêÓø¿ÀEd!°W[1è„kÍûmgU]+"Wâæm|$"àê':'à‚ ¸îV¢ªå"ò,ûëJ<€û¿êÝã%Þ'€ŠKQHƒ¼k|("ß~”ŠÈûÀ§¸ôÁÞc`Ç\ÛcZ„ˆô~†[€qãÆq÷Ýw3pàþÑI‰D‚ÒÒRæÌ™Ãܹs™={6kÖ¬ñŸîÉþa³ß‘¿×Xº–ii6ÄS'oÕ`4.htÅ \ |ü%Øn7p\Oà&`$náv\ ònÅÄŸ³q®›Ö=^ I]÷q"nõàWªº)Ç>ߺªêO²¶‡€+ËpP®5ïSªúVÖ¾'àæ†œ â Ø—á†#¾§ªéºîÑcZšˆ´Ç}(ôm\ , àž{îáì³Ï¦1ïévíÚÅ‚ ˜?>óçÏgÞ¼y¬_¿>¸ËTõ—-qÿÆø,1ÆcŒ9ŒyÝ Ü…K§¢S§NÜvÛm|å+_!q -ûžî‘GáöÛo'•J,TÕÁÍrãÆÔÁR°Œ1ÆcS"r.õt@^^7Ýtßýîwi×®]ý7BEEÛ¶mcÀ€,Z´`@“OjL,1ÆcŒ9̈È1À/ÉÞÏ\rÉ%Üu×]ôèјîâ ›7oo½õíÚµ#//Ïßn–“S @Œ1Æc^—Á?Äբѿ~úÓŸræ™g6Ë5Òé4O?ý4;wî¤M›6$“5º”[n¾iq€cj‘ €‚À¦8°X¦ªå‡æ®ö‘î@)ðGU½­û÷ÅÌÿJUïiéû3Ƙƒ%"ãÚ‚÷())áÖ[oåúë¯'®a¢±õ7ndêÔ©ÄãqÂá0‰D‚¼¼¼àñ€˜gˆ1&ÛïÉ==¼LDîUÕŸ·ö e í©$Õ'|€ûcL«‘spÝ­Æ„B!&OžÌ=÷ÜCÇŽÍ7‚è½÷ÞcåÊ•$ TU¥  €ŠŠŠàn€˜gˆ1&—*àtïû(0¸¸OD6«ê#‡è¾¶âÚäÚ_cÌgžˆL^Æ«½9r$÷Ýwƒ j¶k”••ñæ›o²{÷n‰©TŠh4ŠªR]]Maa¡ß ÀÚ›gˆ1&—´ªÎ üé¶mÛX´h«W¯ÎÔzäåå‘L&3×ðW=¢Ñ¨­€˜Vgˆ1¦A^[ÈŸz?¾õtàUýg`ÿ(®“K0ZU×xOýCDvâÚK~øOUM‹Èc¸ ¿goÎs,pð¤ªî®çþúá‚I~à "ϳsì?À»Þ[À¹ çeYü ¸ x,ëÐ80RU«ëºcŒ9:t K—.€k‘ë×iäçç“L&ÝåjÆ ”––²iӦ̶üü|*++‰D"ˆñxœ¼¼<ª««I§Óäåå‘HøŸ·XbZž¥`crÉ‘§½¯×péUWàR©îÎÚwY0øðœŠ[ y"|øî’¸Ôßc¸?z×eí{-n¥åÑî÷"o¿«x¯sìî÷ß/r¬¸ü W„91Çq¿²àÃÓŒÒP³…®ª …ÈÏÏ'‹ežK&“„Ãá:S´R©Ÿ~ú)3fÌ`óæÍD"‘Ì G~~>étšt:IÊÅbˆ‰D‚h4Z㞌iI¶bŒÉEðúÐã‚…À\à9 »—å8¾Ÿ÷Xšý„ªî‘Oq+'þ¶•"òp©ˆ©ê^qe¯6o6p¿þõåxnaŽm~{™»Dä9žO‘»q®×jŒ1«VüYUI&“¤R)B¡©T*“>‰D…BD"R©³gÏfáÂý¿îòóó‰Çã¨*ùùù™cü–ઈ?Ä¿|«¼rsD³Ä“K•ªžÜÈ}÷æØóë\XŽë"ô.Ýj2ð¿À\ôsUMQ?ÿz9žËu~ýÈ \MG¶UÀêÛ›ÔÁËc²(I·Ú½{7……… $‘HN§)++ˬVø3Bžzê©LÊ•ˆ‹Å¨®®&’N§‰ÇãPYYI8&‰P]] LB¡Õ€˜Veˆ1¦%ø3:zf?á­lô6g=õ,.]ê:\â§c5”~°Å{ìAíUŠZ÷€+Œø½ª~؈ócLKHƒ«ûxõÕWY»v-cÆŒ¡OŸ>´mÛ¶Vz@UUååå„B!ÊËËÙ¼y3ªš™íá×xÄãñL@RUU•©û‘Ì÷þ~9 €˜g5 Ƙ–ð.uëro>HÐy@ð^p£×ë9àt\ÌTÕ%¸Þ ïñ²Ï]žc›_è~m#ÎmŒ1-¥F ÖùçŸÏ„ øè£øÙÏ~Æ3Ï<ÃòåËÙ·oÿâ«ßÕ  ¼¼œ;v "dæ|ƒ põ#ùùù™máp˜d2Y«%oðžŒiI¶bŒivªºÕëlu=ðkù¾ªV{ÅopÁÉ9}ü ¤<ÒÈK¾Ž«õ¸AD¦«êÓÞJËu¸”®lÏáºcÝ$"›€ÿRÕJé \ ,VÕ×y}cÌHDò€“€yªZu§¨±Ò¶m[ÌàÁƒ©ªªbÍš5Ìœ9“íÛ·Ó·o_z÷îMûöíÉÏÏGUI§Ó™ât?å*•Jej<ªªª2Á…?ñ¼¢¢¢Æ ?ÿ°Ó ,1Æ´”ïÇàÚãÞ ";puUÀY“Ö}ïà:n öö{ª1RÕ”7wäMà)ù nH!ðÿʱÿEÞùÿ¸[D6ípó>Ò¸NYÆSŸ80/"¥Àªš^Z‹ˆtJÈ @|©TŠp8LïÞ½éÓ§•••¬[·ŽÒÒR’É$'tíÛ·Ï!@f…# ‡‰Çã™à"gVE‚ûE£Ñ̪ˆ ¦5YbŒÉö-öu×§ ךw]®'UuŸˆœ‹ûã<·¢±xVUë:&í½€uÌþØá]wEÖ± Edð\W¬ÍÀÓ¸ú{pÿMÀ"2WüÞØîÝãÔ¬7Oóëz­Æ˜#“ªªˆTà>¼8("{qNÛ‚ûDdÜСCßêÖ­[èí·ßÞíÏâðÎ<7ªJ"‘@DèÙ³'}úô¡¢¢¡ªªªF:Vuu5±X,ÓÍÊ/D÷»a¥R©L-H4%™Lff€TUUÛûZbZœ ƘTõåFî—ži`Å¥G5:•IUg³êy¾²®ëz-‚ÌñT÷©ªïàV^ê»§Rr´6Æ`. y_ À¹"2˜•õaÊ9ãÇvÚi””””<ùä“™dñâÅ´oßžâââL@lÉ[YY‰ªf ƃHv«Ýd2IAAÄb1’Édm‘ˆ{ è)ÉdÒ¿? @L‹³ÄcŒ1¦^3b\Šf{\ú”ÿ}®VÞ1Ü<¡!¸/‚Èzè¡k§OŸÞ³ºÚê[·nåÁ¤_¿~œzê©{ì±9;aS¶ü炯Âá0¡P(Ó~×LT5S â¯z[ñz¬Ý´8 @Œ1ÆsÄ‘6Ô 0ÊUu®ˆ ÆuØ««sèJ\cà{ª8nˆêÓ~ƒ Ÿª®Ž‘>Àï€ ~@qÆg0räHV¯^ÍÂ… yë­·èÕ«ƒ ¢cÇŽ´iÓ&xžÌ£pøõ~Gö6 V–_ˆnƒMk²ÄcÌgŠˆ´nòÙM4G6‰â‚‹bU]."1à‹ì_ÍÈ®}[ÌÅ 3MãêÏváV3v¾ºàfùï©’ÀLàmÍž& ª«Dä`B0•* Ñ»wozõêÅøñãÙ¸q#K—.eÖ¬YtëÖcŽ9†:d† úÓÒýÙñxœH$’I©òk<ü4¬D"‘J‰D‰D&% @L+°ÄcÌgÍEØ+“ÅK“¯ËÝñ@wj¦Kµ ì{n•¢/î½{¨`øUתêOë¹®‚ RâÀSªºº‘·­@Î"t[·nÝèÚµ+Éd’mÛ¶±nÝ: 3ƒª‹Å2ˆp§ »aE"ªªªÈÏϧ²²’h4š B®ãÐ;¸ôóã¥+ù?ÛmTõ_^]ϸ4)Éqh>ð.° 7ǯ¿Öcìók.Tua ¿”TuúAšsdùòåüîw¿cĈŒ3†>}ú "9ç„$ b±©TŠd2™3½*///³ ȤkUWW‰DlÄ´* @Œ1‡™ÜæT Œö¾ü}·à‚‘9/€²L0Ÿ^'¢€ÇU5šÖ˜cOˆF£cC¡P›†÷>äRÉdrU*•4º—› IDATšªª¹Ú»öüÕK¼U ôÄ­f”P󽇊ȇ@Ð`úAE0¸ØàÕV4¶¾â³ Æ ˆoÔ¨QœvÚi,[¶Œ7Þxƒçž{ŽAƒqÒI'ѱcÇÌ~~â¯zÄb®ŽÞïlå§\ùϳkAüÀ%‘Hç€Óâ,1ÆR"2xœëýÌÅ_̵×^K~~>+V¬`þüùÌ™3‡… úi] ½¯  yøq]ÓÖÍgˆyªºò=> M3fL¨¤¤¤en°¥Óiþõ¯ Ù½{wGyô RzZˆtzQ;]ªÀÛå `)p ®nÜlŒÔ\ÁyAå/r¥I}ÎÕXÉ^áèÛ·/Çùd®¼òJªªª2Áȼyó˜?>kÖ¬ þÑ.ôÎ7BDF«ê®V{A¦%MÂý7òÆ$"‰DÎ;묳BgžyfËÜY 8p`ä—¿üeàx`Ñ¡¸/%*»ÈÛÿ~‰ª¾ GîFe¸àÂ/ê~xlì­+¨:ƒh ÝŸ~žN§éÕ«ÇwÕÕÕ¤Ói***2ûF"‘LÀ‘L&I¥R™ÕŽh4J"‘ N×™š¬))..¦  à?D¤7ð+à_õµ6æ`XbŒiU^!ñ­À÷q)sÌ1Üu×]\tÑEµòœƒòóó1b#FŒÈlÛ³g ,`Μ9<úè£lذ\ªÎ­Àí-ürL ‘¾¸´¼W€´ˆøŸ®û3"Þ¶¤ª&²ï´5jTëÜl3i×®Æ Í™3g8-€xݤ²Œ¨ªþSDºÿVÏáÅÞãz\C€éRÙÿ;Øjd½r¡CíÕT*Eyy9©TªF€âwÉòƒ‹X,F:ΤaUTT‰D2C ƒ“ÏýU‘¼¼ü„÷ó½¯lC½¯÷׳žëÔ¾}ûT^^ÞgnfÈ1Ç#üqçƒ=ÞkèPÄþàb‰ª–‹ÈU¸zŒÂ‡¥Dä%r×`ŒrU] BÌÁ«1j¹‚’`À¢ª™ö»~[Ý`ÀQPPPk ºß5+™LÖJÃJ§Ó”––2tèP:wîÌwÜQtï½÷NÞ²eËä×^{M‹‹‹?Ü»wï?€7UuÆ @Œ1-ND†â’G"®¾újn¿ýv:uêÔäó«*O=õåååôèу+V€{Óe>ûÖãf~d+N>–rìÓ®¨¨¨VµúÚµkY°`»wï&??Ÿnݺ1pàÀŽK—.¥´´”ŠŠ 'Ÿ|ò¦9s漄ûÿ諪ZÖ‚ÿVæsÄcL‹‘ŽÀ½À7ðÞ 3†{ï½—N8!ç1šj¼}ûvžxâ ¢Ñ(‘HÄ:¹|Îxs`jÍ‚ñòÓOÆÍ‡˜QÇá Õ\üøðÃyñÅ:t(}úô¡¢¢‚E‹±wï^Î?ß-°¤Óižzê)–,Y°aÃèÓ§Û·oçïÿ;Ç<_úÒ—È>ïÌ™3™9s&«V­â[ßúVçÊÊÊxçw‡pÁƒ6q~I“‹ÐýÔ+¿ž#8Û#‰ "™ºêêjD$“†åwÍ‚é«\H§ª¸ ^¾%"ƒŸ{î¹ó¢Ñè…#G޵oß¾$nŒ1€ Ƙæ1pÛm·ñïÿþï5&ë6Õ–-[øè£Øºuk¦èÒ/²ôÿØú9Ï®Û/`ˆÉ!//I“&1iÒ$vìØÁ²e˘6m=ö7ß|3ùùùÀþ#›¿Ýßoîܹ´mÛ–nݺQYY ì_%É@üUº¢¢".¿ür Tï*‰9lu®÷üÎIã†/*^WÕ œë€ŠÐë[ñÓO³ƒP(”©ñˆÅb™ö»þïMÿØ@új“;y¨j)P üBDJp3f¶5õ¼æóÃcLs¸`àÀÜ|óÍf ›ê“O>aÕªUìØ±ptý®.áp˜H$R#çÙV@LcuìØ‘‘#G‹ÅxöÙgÙ·o;v$‹±nÝ: Të˜uëÖ‹ÅèØ±#étš¹sç²wï^~ò“ŸÔØ/‰P^^N›6û;é‹ÐÍg—ª®‘å@ øIKÈûR\×±…8]+ Áïë{ÎO½ ®ûiXÁÉè~Àá×z$ j´äèÙ³g÷_|qH4]:iÒ¤&wKSÕÝM=‡ùü±ÄÓŽ5j]ºtɬL„B!òóóI$ŒTUU±|ùr.\Hee%ªJ$!gò—ãñxf5ÄOà °ä""í¨Ù¢v€ªÖXbH&“ÁbÛ ÿSâH$ÂСC™5k§Ÿ~:íÚµËì³oß>f͚ŰaÈD"¬^½šíÛ·óío›:döK§Ó<ðÀÌ›7Ñ£G·Èë5‡ÜTꞟ^ 6 ¨G­_®¶»u}ïŸû¿#s¥aÅãñõr~V°C@III‡H$ò 1eÊ”¡PhI*•ZrþùçïjÄë1¦Q,1Æ4?$STT”)÷W%ü´©ú‚aÏž=,Y²„Å‹göÍËË#™L’N§k|j—N§3E–~ â±"ôÏÉÃ!UÝ("=1ìŸôý÷,çd÷ß?'Ÿ|2=zôÈÌäxóÍ7éׯLœ8‘uëÖñðÃsÖYgÑ©S'¶oßδiÓ())aâĉ€+>ïÑ£G}t­ë 2„Ù³g[òùUì²'©&Ūº¦‘çiRº\])WÁôÔà Â`–ÿá®p8¬Þù£À étúaÊ”);C¡Ð¢d2¹¸²²rÕäÉ“`““ Ƙæ†ÜŸØ¥Ói"‘H&ÅÀo› .P ¤LFÙµkï½÷;vìÈìF3ÝZü‚ÊüüüÌÛàp­Àr[ù ‘ª¦½2C©¹šÑ7½`ðg ø­ªÒÔœæíOý>NUÓ&‚ŸuÖY,Y²„ÒÒRªªª())aÔ¨Q5…‚‚nºé&¦OŸÎôéÓ)++£mÛ¶ 2„3Î8ƒ¼¼<Òé4UUUŒ5*çë6l[·neÏž=Äb1úõë—©i /ß‚èÃŒˆÄ€SqÁo®¾âiàµ8e š> Ý&èP“J¥jlóW¡ýUÄŸRYY™IÁ‘ºþ»ëN§O…B§·mÛ6>eÊ”•À"YgU}§9îWU?Åb»Þyç^x¡4|ÄáaÇŽÌŸ?Ÿd2y ofM3‘£ñ@ooSð>0SUýVµÕ"2 ÷ßÿ?ôÀ[ÿÕ[„ÞØ ÄÂêñx¼Öj±_Cç~áúßþö7Þÿ}úõë·üÒK/]q€¯![‰D†•——§_yå•uªº(N/¾è¢‹¶4ñÜæsÂcLsÈ|Š'"\pÁL˜0uëÖ1kÖ,¦L™B¿~ýXP‡3iXþN¿»Vp–¿Rbmx›ÆK“*RÕÍ"’{æ¯fS35j%°oõ¨$T¾ßÍXˆD"ñÏ™3g^WUUêÒ¥Ëa„$“IfΜ™TÕ¥¸_ÓÊD¤#p.µJpÿ}̨cèà¼æq9…ÚEè²â7ú~ÝGðwið¼¼<6mÚÄþð6lØÀÀÝu×]¯Äk¨õšB¡Ð´d2¹ 8!÷WÕÞ¡Pè¼)S¦l‘›£½¯ùl³ÄÓj}Š'"™A^x!ëׯ§´´”÷ߟž={Ò»wo:tè@,ËüÇã„ÃáL ‘Ý22W—ì?¶Án€ÔCDz]¨]‹‘¤Eä^\=Æ0Ü›0¼Ÿ·³?Àðßp­~ÞĉÐ-›ÙðhiiéÈP(Ô¦á#­T*•VÕU©Tê_ñiºi/øœ†{¤¸YoÔ7ËÂk·;ó /[#}µ¾À#ëšûOà5úPo"ºÿ{ÓÌš½-‰0oÞ<þüç?SQQA8NM˜0áÝ›o¾yÎA¾†à}U…B¡''Nœ¸ÈÛ4½úê«Çªê ¡P¨ãĉ-ø0€cŽˆt¾ë0Ô rOóõÿ°vïÞ=zH$Ø´iË–-£¨¨(3»CU3+Á”«ºÒ°ü•¿$ …‚Ó|ȯX¶ˆšAEðûUu90o~K€{qÁEžªVˆÈsÀ>\б/×›b/¥ÉÓ“[Šª®ÃuÏ2¦¯vip:à·*[LUÕ–NªUr0EèÉd²Æ`Ö`V$É|PÇ™:u*/¼ðªJ»víöÞ|óÍ/Ž3fSS_ˆˆlD"{î¹[³_ã¤I“Vb+z&ÀcÌÁúÑwÞyK§NøŸÿùÖ¬YS£Û•ÿ‰œÏÿt.•JÑ©S'ºu놪RVV–ÙÏÏKöÛCÓ°ü"Ë`¯{¿ýn°È²5W@DDŧÔ"R@íc‹ªÎÆ}‚›»u“Sì=.6Q»£F ¡ª¥Í{÷Æêélõ¦ª®n¥ÛÈ|Pâ§QAãkAüŸýoü¢r?å*Ø~w×®]üéObáB7 ½OŸ>+ï¼óÎ)]ºtiŽ•ËyeeeÏNž<9Þð®ÆXbŒ9xÕË—/§k×®}ôÑ5gžy†ââb†Z«–ÿUUUUcˆÿ‡Ó¯ñðÿˆŽp8œ Bü.þªH°–§E¯>âRy^U›5¥À›…á…ªº@DŠ+½í9[ŠëÀ³ÃûªX°?À¨PÕšóžù,ÉÑÙj0 XÐÊ*dt:ü¥Qµ ~új"‘  …jMAO§Ó¬ZµŠßýîwlß¾P(”>ûì³g|ï{ßû°©7¯ªiU}í‚ .x§©ç2G @Œ1ëî'Ÿ|rï3Ï{ÿZ?û‰K–,á÷¿ÿ={÷î%//¯êºë®{åâ‹/^Õ ·š …B/Lœ8ÑêÇL“YbŒižæëwj),,¬5|Ëÿ#ê§a%“ÉL‡?ñÜ秊———Y)2K ½Yò¹E¤ðe\à‘k]%°€ÚAªº°ühcZ‰×Ùj ®Î£ÄÛ¼·âÑZ­˜ª¾¼!"g·ç}òÉ'òÝï~—Î;sÅWð¥/}‰ââbÿÌ£_{ÇyõÕWyî¹çH§ÓtéÒeóí·ßþbÿþý÷4õþDdw8~üÜsÏmŽÚc,1Æ4‹¸?Œï¼ó•••Œ9²FªUvíG0H ŒÅbÀþà"Ø×>gV=`qz ½¹ J×O#¾¸Žàï΄ª¾ÚL×2Æ$¯³Õ¹¸†à:[Mæ¶fg+iœŠ z(ÔKÝœ."'?®Ü¶m[ô·¿ý-üã™0a_|1C† ñ¯E:¦¢¢‚?þñ|üñÇ >üãÛo¿ýí‚‚‚&§I‰È’T*õä¤I“*šz.c|€cšCά^½zñÚk¯ñ /0dÈFŒAß¾}‘œƒ·B¡Pfroaaa& öµ÷ƒ?5+Ø5+??¿ÙW@¼7.«Õ"R„K¹:7€1hs¨æc@DºãV<üÁš‡¤³•—ö5—öv•®¤ªŸ×ŠÈ›€ãñx×—^z‰—^z‰£Ž:Š &УGÖ®]Ë믿Ζ-[ˆF£ñ+®¸âõ«¯¾zq3¼$‘·&Mšô­0WÉY,1Æ4‡Z)X~7¬û·#•J±~ýz¦OŸÎÔ©SéÓ§'žx":uª°ø©~? +¸*FkmóÛïúu!ž¾"ÒVUËšëEªê^`šˆ¼ {³Ñ׎w_s]ÇÓ0o6ÎÀ0\zd 7 çíÖîl%"€‰¸Fà>´XÛÔóªêFà.¹¸ø:0fÓ¦M¡Gy¤Æ¾ÅÅÅ»n½õÖ†º£©×‘Êt:ýäyç׌1µXbŒi ®¾£®éç]ºtáÊ+¯$•J±aÃæÎˉ'žHQQQæ˜p8œ9&8`ÐoÉ BB¡PÎ4,¤}ûö'”••Í‘AÍ=(PUS¸N: E¤ ÍÜqËS7)ÀÿÙ­ÞTÕ]­|/qÇqÞ¦½À[ª:¿9¯ãý{x¼S§NGwïÞýÿlÛ¶m\:.‘ØèÑ£K¿øÅ/.)))iŽIä›b±ØcgŸ}v“cêbˆ1¦9¤Z)Uþ÷ÙÓÏ;vìÈùçŸO:fÏž=™ý’É$‘H$³Êá·ÚDܯªàt¿×}p ºß ¨¨ˆÓO?½ïš5kvˆÈóÀKÀTo£Ù¨êÖæ<Ÿ1&7 ãÒÇqˆ;[åH·òW_ÞRÕæê´}ûö À÷ƒ·3uêÔöÉd²«ˆtI§Ó]Tµ«ˆt‘üºÎS‡»víúìðáÃmÖiQ€cšCÎ਷}*•¢¬¬,“²å?W0‚íw«««‘+ ©TªÖtÉ/"|õ«_¥¨¨¨MAAÁ5›6mºæµ×^KµmÛvzyyùTàEUµôcsut¶ÚŠ[ñXvîgpPìmZ¼ÚÚ«/:a„¸š“¿Óžy時víÚuM§Ó]C¡PWUíªª]q-Å÷Ÿ@5­ª¯]pÁï´Þm›#™ ƘæP£½¡ÁYÙÏù­$‰D&¸H¥R™ÕŽ\GöŒ›?¤ººšûî»3Ï<“ãŽ;Ž¢¢"¾øÅ/†¿öµ¯YQQqæÇüó!C†lüä“O^^Æ}ŠÚ¬©ZƘ¦©§³ÕÇÚaªî¥0 × Üþ×EÔX“'O®Öx_¯¿þz›ŠŠŠn‘H¤£ˆ´I¥RK/ºè¢‡âÍ‘ÉcLsÈÙ†7×÷õ=çÁZ?ÍÊŸ÷á§aùµ%~â·éõïaÛ¶méM›6ýhöìÙ›€  pÁرc  @—.]8þøãíð{t IDATùÕ¯~Õ=‹Ý¸qãÆ_yå•D4žL&_žSÕO›ý_ÉÓ(^mÕ9@oÓ!élåÝK>.Õj$Æ 9ý0£µï¥¹œ{î¹åÀJï˘Vgˆ1¦9Ô; Ýÿ¾®çüãü¿Æ#fV=âq—VŸŸŸ@˜L&3SÐým~’L&QÕÿç]â1É_ºtééÀ9%%%—Ÿ~úé}‡ F¯^½(..æê«¯ŽÞxãgWVVž=sæÌúöí»rÕªUÏo着åDÓÂêèl5˜¦ªå­|/ Á¥~µõ6/¦¨êîÖ¼c>o,1Æ4‡FOB¯ë9U%gV=ü4¬X,–™’J¥¨®®Î!Áö»~â§`5†fym9ßô¾~("^~ùåóEä‚áÇŸ1bĈð€èÔ©C‡å‘Gé‰Dn[¾|ùm/¿ür¹ˆüx^UŸoö=cŽp‡Sg+ï~ŽÂÕyôô6íÀÕy¬hí{1æóÈcLsÈ™‚ÕØÕ$NgŽH$’ H‚5‘H„ªªªLû]nHUUùùùÁ{¨75BU—Kÿ‘v³gÏLêÙ³ç%cÇŽí4pà@Ž>úhŠŠŠøæ7¿Ùæûßÿþ—§OŸþe¡ª³šü/fŒñ»IŠKq*ð6¯ÄMoÕÎVÞýàºlùÃFãÀûÀ{^ûmcL3°ÄÓšT„î …B™€#‘Hd&žûuÕÕÕ„B!òóó3SЉDæ˜ÊÊJB¡ß«Ñ¹Ùªºxx^Dnüë_ÿ:8/^8f̘SO9åéß¿?»víˆÄ¿1&ÀKoúp&û»ImÆ­^—H·:hãm^¼¢ª{Zû~Œù¼³ÄÓ,B¯/(I§Ó5¦ ûÁE0 +8”0™LÖ™šh|PÅ¡ênîcïë^é8mÚ´ ¸tŒMÀs^cŒs8u¶òî§;îÿß=¼M›quëZû^Œ9RXbŒiu¡×xd¯ª™ö»ÙiX………TTTF ‡Ã™A…UUU™U‘}ûö‡I¥R„B¡fy#£ª;€¿{_Ƙƒ$"Gã:[ëm:d­¼û)ÆâRÀ„ÿÏÞ›‡WUÝûÿ¯µ÷9'Bó<ƒ CS‘ÁJÁ±*"` ¨­Þê·­×çþnïs¿½mo½÷{¿ßÖZ ™AªX´ (B˜Á0$a& ó@ 䜳÷úý±öÉxNd†õzÉÚÓÚ‰9¬÷ú oÈ’okBi4÷Z€h4šÊ@Bp'ô’_—U„p1¤Tu<šê>LÓÄëõsA/6lØð/¾øb¦âP^^ÞþI“&é®5M „ˆB¥ZESØÙj°ÁiQÝó1P¢c$ÊQ]i(/ jí´¥Ñܯh¢Ñh*ƒ;rBV„øoÉ4¬@«Ý¢~ –eaÛvAqz VvvvAÄ4M!¥ì.¥ìîñx&~ñÅ祔‡C)))g~ó›ßèN¦ q" ±Ô’ÎVΜ:¡Ì[:CPéVgjb>ÍýŠ ¦2° PXÜMº”²ÀÛÃï÷´Õ ˆ¢)W.— !DAÝG + N\.W1!¥l´â|kõêÕÇ„~¿ÿàĉoVÉwE£¹q:[ Au¶ªç ‡Š0T{g+gN Qé_(L.°n¥ÑÔZ€h4šÊ ÂEè \ÎÝn7RÊb¯‚ÃëõE#%gôrÖ€„ !¢h·Û=yÍš5çCyyy‡üñs8)e¦ü8©MýQ©M ás¨ˆÇ‰š“‰j©; £0Ýj­”òVY×j4šªC FSØ\h”·þöíÇsÃ0Šy€x½^„)WE;d)/^,ˆ€DFFæ–gâRJÕý¦]½zõ^½zu6pÔ²¬ƒn·ûÈøñãó+úÍÑhîuœÎVã(LmºlÒeÉ¢°ê›SgTw«æÎÐ9TºÕ¹š˜F£)D FS !Dà‚Óª<”rB¿“4¬€{y â÷ûƒÖ‚ Í‹¦aùý~ÂÂÂøî»ï˜7o 6¼1iÒ¤£wùîÀ—Ë5@Jéÿâ‹/NX–•áóùNž<ùÒÝÜS£¹WB´::C·PÆ}5ÒÙÊ™S$0å3pXG Š!FS-@4M0zO !n‡PŽá§ÊpÙ†7ØßK~¸®h4öí‚H~~~ zÑ4¬ÀØöíÛY²d >Ÿ·ÛíMHHXå­è7AJ™'¥loF÷°°° «W¯¾är¹åææž4iÒwèT-Í}Š¢*­©ª¦Âì¶ÔDg+gNÚ“8Àƒú\JÖK)u$S£©Eh¢Ñh‚qèD¢ò§!N Ç=<€„â‚wà„^´î# .Š:£ Õóóó Ò±–/_Ζ-[ˆŠŠºúæ›o®0`À•Jø|gYÖ’½{÷æ 2¤ƒßïïešæƒ–ep»Ý}€ÿ¬„gh4u §˜{$ªÖÃ@-ò÷É%>ª{^=€G€ÆÎÐITº•ŽZj4µ-@4M0N¦ówÃùЕjñ˜b‹”òg¼˜;+Bü x{€ÛíÆçóár¹ŠÕ}\¾|™9sæpòäIzõêuð_ÿõ_¿jذ¡¯‚ï.MÓÜ4nܸ/{âĉ 3'5_|ñEs'ÅC£¹oBxPÞÃQÅÜ :[}Y“‹|!DT[ÝîÎÐ à)eZMÍI£ÑÜ-@4M1œ4†HÔΦQò°óçÊ18À]9¡-Bü) ÜÓãñàõz1M!$111à|n7n㫯¾º»¢ï.¥ôZ–µb„ é¡Î?~üeàrEŸ¥ÑÔœ.R1¨t«gø,ðµ”òT ÎË üÕê×E¡¹¡N·ÒhêZ€h4š@áuoàT„#Ôgƒ%>>.QbÁÝ¡þkFA¤d7¬@$äË/¿äÓO?Ŷm"##¯¿þúëŸ=ôÐC™þ&Àe˲Nœ8±2î¥ÑÔi„ê Ñ UÌÝľ‚êlu°&‹¹t«ñ@”3ôð…”Ro h4u-@4šû!„ •R*:7‹¾d­)üœð£\ŒWY|äuÊ )9)éí!„ÀívsóæMæÍ›Çž={èÚµë±ßüæ7kš6mZ»srr>zê©§ÊÕºW£¹—qZêŽAw‚ê"• ì­IÓ>§ðý ›3”…Šxèt+¦Ž¡ˆFsŸá´Íìôê9t%0ŽI)¯!Z3c~ ø<ÄÎçn€ÌÌLRSSéÛ·oÁ;Mà ´Ú-Ú~÷äÉ“üå/áÒ¥K†a>|Ç›o¾¹Í4Í í !l)å7&LX‡îh¥¹ÏB4G˜÷v†¼À·ÀæšLkrêObQõ'&*»Õq«FZýj4šŠ¡ˆFsàäq÷Dý#Þ¶È¡(a±7ˆçG&*µJ;¥”_—ñˆ4àÐúñÇgÚ´iLŸ>fÍšœp»–¼¶mãr©$¯×[Ù¾};óçÏÇëõžýòË/ö޾Á¹%¥\:a„»ò Ñhî„P­k­, Ø ¥Ì®Áy T„öa ëOŽ¢Ò­®ÕÔ¼4MÅÚ“G£¹wBÔGµÐ4t†½(o4àDY¹ÜBˆ)À)åÆr<«° ÇÌív3vìXfΜIŸ>} :XÙ¶]ð÷¢_9rÛ¶q»ÝH)ñûý|òÉ'¬Y³€víÚþ—ù—´oß>§ß’çrrr=õÔSW+á^MÄù|ø!ðjCR¢Úl#¥¬Ñß !DkTGgè{TÇ­Œš›•F£©,´ÑhîA„Q‹Šþ(C.PyÜ;ÝRÊrÕ:!I)³îà¹aÀ‹À/qò´… 6Œ©S§2tèP¤”Å„‡mÛx½^Ž;VÐj÷êÕ«¼÷Þ{;v !„üá¸óW¿úՖЦ\H)÷œ;wî“Y³fU´]¯FS'q"¢ƒ¦a~¬“Rž¯±‰BˆpTáûTôÕ lD9«‡2BÕh4u -@4š{ÇŸb…© R©¾Òª+_Za¿ÆÛ·oÏ“O>ɤI“ˆˆˆÀ¶mlÛ&??ŸãÇpäÈþú׿’••EXXXîôéÓW?öØc'*aZ~Ã0Ö<òÈ#[*á^M£Hg«1ö]F™¨±‰Q,Ýjî VßÉ&ˆF£©h¢ÑÜ! úᦰ¶ë°MJù]M BÄ¿&àˆ¢ððpâãã7nƒ âÆœ:uŠuëÖññÇcÛ6-[¶¼ðÏÿüÏŸuïÞýFEç ¥Ì [4f̘Ó½—FSq:[Z9CYÀ&j¸³€¢#êó¡¥3tUçQc>#¦jÑD£©Ãq'Ôs†Ï r¸OVâs"¥”Bˆ®À«À  Q`¼Y³ftëÖ³gÏrö¬ª-4hО·ß~;9,,¬Â)†a3 cÉØ±c+£vD£©S8]ïÆœ¡\`3ðmMwB4DÍ-•n•‹J·ú¶¦E‘F£©Z´Ñhê NŠS ‡;®p%<ŽWò³†¡Î")å¹J¸_0©Aƒ/æåå´,« _DDÄÍñãÇo™6mÚþŠ>¶moܽ{÷—¿ùÍoôbFs_áxfŒB¥\ Â7H)ójxn”Q@ªø=øJJ©7 4šû-@4š:Ft…*s'BŒFõÞX#¥ü¶Œs› Œ Û^)eòíîÿãÿ¸å±cLjˆhÕ´iÓ³fÍ:åñxš¢ŽE¦ž¬˜0a¾ ÜC£©s8-uG¢¼~ ÀFu¼K® µN*Øx ¹3tõÙRáÍ FSwÐD£©#8æ£ p ø†*Êávj7âP»“k¥”;Šk„rInƒj“pL÷nàRÊÝwûìƒz>ÜÂãñ´R¶4 £…a-&RJ£¬k…—LÓ\8vìØKwû|¦®Q¤¥îÔï ¨ÎVk¥”™561gƒâàgè&°H¯ìFSûÑD£©åTwº‚Ófª¯DõÞßésÓq¢(Wb³Ä-là¿«bnÉÉÉ®üüüæ@ Û¶[úýþ–†a´B4uæ‘*„X9~üøsmÖhª“u`§Qé˜5^Ä-„p£„Ñ0Ô&E l}Mº«k4ššE ¦#„hL¤0]á4*]áb=O v)‡ ÄÇ%Ó®œÜò™(‘`iRg¤”TÅüÊ@$&&º´·‡æ~ÁÙ˜ˆA¥[LF/kº¥.|–ôE™G:è ïklb¦V ˆFS qv ãQQA5¤+8 †ñ¨ÝT |&¥Üâܶ¨Hˆ«Ä!/*å#dú•³c;ø/)ejeÌ]£¹_(âå1hâ _Gu¶ÚSÒ™„­Pujó«¨Ï…#57+FS›(¹xÐh45Œ¢*êÑÌ:€ª©(—{ù]>S  ƒQ)TŸÝF\Dv,1îßæq¿žF !ºè4 ¦|8Ü£j®r€íÀöÚàîÔ¡ŒD}Ž€Ø l©é–¿¦v¡ˆFSKp¢#PùÒ¨Ç?ªz×Ðié;•Îa«¤”ieœïžA‰@ñ{ 0ü\YµBˆÀ›Î—¯hñ¡ÑÜž^[RÊO;,âb>hà E¥‹^¯±‰i4šZ‹ M-Ài­;Õ~V¢Š4¿®êº#>~ŒjÙi—R¦—q~*zÑ•nµèŠÚñ”@Ȩ‰S;²%VÞ“R®ª¤×ÐhîI„ÍQ…ÞÎØ l­Êˆèà¤cŽÚ9CWPµc•êG¤Ñhî-´ÑhjGÄ9 T.÷gRÊïªéÙO 7ð±”òPç7^@ågK¤”„ÇQ©!Ò¯œÒPm{¿¬ÄWÑhî)œ–µ#QEÜÁ½¨ó›58µ‚¸˜çÉhsFS´Ñhj!DJ´w†ö¢v½ÕðlxxåÝñ·²R½„mP‘À5`q “”R !>bËH¿z•æ•<'¥¼Ui/£ÑÜ#8^?#Pé&*ª¸Õ²öjMÎ-@ˆ¶àihsFsè.XM „è<ÔG-Êÿ!¥¬×î âã#)eFçwAÕ|„çQ‘r/4„½Ô»¾&¥üs¦¯ÑÜs!ÃAn 6H)/ÔØÄJÄÅü<ªÎãlÍÍJ£ÑÔE´Ñhª§€{j‡”¯ÇÊê*Ô,!>|Àò²rµ…ѨåªüÑÔ¥!ÂP9ëý€/ µ¡M¨FSBÔbQí¶=ÎðI”‰à™ššWIœ”°ÑÖ¢d¨%m5MÝC§`i4Õ„ãÖý ÐUð½ µÃY-í3šÉO»*K|<„rD(çõUw1×ÿB‰KÀt½XÑhй—ÿÕÖzSmòÊÐ.榪ЦpÒ&¢Ò˜²€O¤”§«ñùð8Ð%>VH)†8W v;‡9C;QîÅwôa!„¬v¾ü‘”rÍÝÌ]£¹Wá^~U¼}°6 t!DTºU”3tU£v©æf¥ÑhîtD£©Bœ…<…Þ'Qݦ²«y“Qââlña jSú£ŠK7J)“ïâ™-€Qïü_Z|hîgáÑ%<;Ã÷ò½µ©k”Ó.{<ª½6À TJXHo F£¹StD£©"œÂÒ'€.¨Åü·ÀÚê\l}Qâã£2ÄGÀ`°«sr€çµøÐÜ8£Æ­œ¡[¨º¯µiA¯]Ì5MM # M%#„è‹êåB¹$¥¼\Ís(j2Xf«]Ç`p j‡6X*¥ŠªÕðUàÙ P‹¯ž(ÓÁÇj“™šFSY!ÚÜ! HE¥/ݨ±‰…À‰ÌŽFE>ª&eª&¥ÖtáÒh4÷':¢ÑÜBˆ¡¨¶•8|Z‘…|æ!P¦aññiâ#Uœnûs­ Ná¯(ñqxQ‹ͽFnTG*Ê)4àëÚ–¦Ñhî_´Ñhî€ ®v¢ò¨kjá=øj‘ñw)å¾`' !† Ò0°X]Ñn7Bˆ¨Z~à'RÊï+r?¦6!„h‡ZÄûd)åµ›XœÏ¦>¨Ï„FÎðIÔçÓÅšš—F£ÑC ¦œ!\¨BÔ‚£”2¹ç3%„$JP-|B C-J@µý¢¢‚IÑø³óåÿ'¥ÜZ‘ûi4µ…2„ÇF)åÕ›X8uã(ìÄuøH×QIFSÑ5 M9BÔG›wB-HBFªi>#Q…°åXœ䜒њäÊLBˆzÀ °˜ ½4u§¡Äp »3d¡R—6ÕVGpÇDt Ð Ý̶Ûu‡F£©ÍèˆFs„ Q©F-€<”«x9;õ'#/ו!>Æ¡DÊ×RÊm•4…wQâ#˜¦Å‡¦.ãaÔ­ˆ‡ˆEÍÛ…®óÐh4u -@4š2pv§Qi K¤”™58Ÿ‡P”Ña©Ô'Çd"ƒ*L_-¥Ü]IÏxɹï”@n¹b Ê„0gtk^MmÃ1Ea{Ú€ðØT[ë™ÊðóøJ×yh4šº„ M„ÍQ‘Hà°¨&wD…(¤”›ƒœc¢Z÷B‰„URÊ´Jz~ ÉùòK)×9<øiˆKW Ò×4šÅYÀ?€ªñhë ûQуZÙÕ*€#˜Æ-¡+¨Ïíç¡ÑhêZ€h4AB´¦áÀe`aMšŒ !ú¡ò¼7K)79Ç üèŠZT}"¥&¹Ýî>³gÏ6[¶T©Ò~¿Ÿ5kÖØ;wîĶí•RÊý!®ï…ªŸ0#Àßj²•¥ãÀüÊÍø ðqÉŽSNKÜ)(ñ‘‡J+·@Btu»ÝómÛîošf–ßï_nÛöŸ¤”§œãƒÍ¨hЛRÊÿâ>sP5 ÿ ´B-öö¢"1µ²…©æÞÃé5Õ!*ÒÎRP)KùÕ0‡0`°ËåæñxÜ#GŽ4ÛµkGJJŠ––&mÛ^.¥Ìr@Õn= D9ÃçµßGF£¹WÐDsOàˆÇÜnw¿Y³f™­[·.uÎÎ;ùì³Ï¤mÛŸ–4íBôGEÒPÅÛ5Ö^Ö©Ayµð?¬(™öTB|ÜB‰r§? !º™¦¹­[·nccc]7nÜ`çÎùçÏŸ·lÛ~؈rMï |L ejVD€ø€›î:,é;âˆPj9¨èH¹=6„íLÓÜÖ©S§VÓ¦M )>Šrøða-ZdÿfYÖoËÿFÏ|‰úþN¿Óë5šæÈ@™ž«¦y´0Ms¸”²OÛ¶míQ£F™>øà]ÝëÌ™3Ì™3§ ýp%OU£Ñhj=:¢©“¸ÝîÑ„~¿Ÿ'NàõzéÖ­aaaAïÑ·o_–/.¤µb IDAT_ÞÁ¶í òÆ«§kΔøÈ"ˆé¡SàúІ»-MÓLîØ±cË_|±\â gÏžL:Õ\´hÑ¿™¦iX–õïå}¦Ãdç¿A;i4¡(ÒÑê! »ByQ©’Û˪Iªäy´òx<à ÃèݦM{ܸq¢k×®f¨ó½^/'NœÀårѹsç ‘‘öíÛÓ±cGëôéÓZ€h4šûÑÔ9Ünw<0,˜øÈÊÊbñâÅœ=«l0š4iÂÔ©S ´ä † ‘¶m¯ ¦WŽ_Áó@”°øPJy¥Ä9|´0MskÛ¶m;¼ôÒKÇsû‹JpôèQ.\hY–õ[)å¿•¸T¬EÀQ)¥WÑø'à-T7¢RÊËwü`Í}‡cÀ7ÕѪ¾3œMaayµ˜ !:¸Ýî–euéÞ½»=zôè2Ó<³²²HNNfÏž=€"íÚµcæÌ™û;~ü8óæÍ³¶×:ýJ£ÑÜWh¢©S!Fº\®¸iÓ¦]»v-vìÚµk$&&Ò­[7&L˜Àõë×Yºt)†aðú믗™£í¦[¶m'I)/Tõ{@Ajɨúˆ|`AÉzŽJÍ].×ÖÖ­[wLHH(%>.\¸ÀÞ½{1M“!C†âN‘‘Á‚ ,)å[–õë"Ïè ÚKÔb±aà(óÂ-峿þDÑ 툡0:ÿ=° H«®®PE…G·nÝä#|¸±wïÞÎBˆRÊœJ‰"!âP»½µH?Vâx}`*ÐQXx'>Bˆ¦.—kS«V­:Θ1£”øØ¾};k×®eÚ´itíÚ•ììlùä“OøùÏò¾Ý»wçÉ'Ÿt­X±â]!ÄN)å^Ç q»óG£¹-N}G?TªU3gX¢ê!¶W—ówá1Ú²¬fýû÷ñññ¢Q£F!…Ç™3gHNNæèÑ£DGGNÛ¶miÓ¦ ëׯgúôÂ^ ÏŸP<øàƒ´lÙÒ¾|ùr,°¶2ßM£Ñhj3åë¨ÑÔ n·;Ö¶íø©S§–YYY,[¶ŒvíÚ1uêTŽ;Æ’%Kðûýdee±fÍâããË\p"$‚B'å*AÑå|¹VJ¹¿Äqð,J|"w">š¸\®-Z´èœà)Y„Ÿ’’ÂçŸÎsÏ=G ’All,™™™8­‰CC¯^½¤išo—wN ¨VÓBˆ‘¨ú GQâ#Õû/RÊåÕ!>„¦¢¿Ûí~Ýãñ<3tèÐæo¿ý¶1yòdѨQ£ ×œ8q‚?ü÷Þ{Ã0ø§ú'žzê)š6mŠaŒ9’£GrîÜ9òóóY½z5ÇŽcìØ±eÎeÔ¨Q.Û¶;Í(4æ¾@G@4µ·Û=Ô¶í1S¦L1zôèQìØÍ›7IJJ¢M›6¸ÝnºwïÎÔ©SY¸p!‹-âêÕ«téÒ…áÇ—ëY†aÛ¶]ï „èü%t6J)w”8îžC¥2å Ú×–»x[år¹’›7oÞ}æÌ™¥Ä‡eY´hÑÇCrr2:u*g.\ C‡åò3ß&àpUzß8ÿ?÷D¥muÕÑêPuÔw8sñƒ\.×0Çg>ôÐC![tÛ¶Í¡C‡HNNæÊ•+<ôÐCL™2… ÅW_}Ř1c(-1 ƒ¸¸8>þøc&MšÄ!CÊ57Ã0èÕ«—±wïÞîh¢Ñhît,M­D1À0ŒÇž~úiѯ_¿bÇrrrHLLäÖ­[üò—¿ š^uêÔ)æÍ›G»víxñÅËLÁ:uêIII6°Ùçómybp€ÓzÀ!Tѹ]äxÑŽX>”Ãùé;¸¤ËåZߤI“¾?ýéO=áááÅŽïÝ»—•+WòÜsÏsgÏžeÞ¼yDDDpýúu¦L™ÂŸ¯IûöíýýúõseggË-[¶H`»Ïçûº ž DµÑp†}¨ÅõÎ;I'¬„¹„ý].×Ç㉋‹3‡òóÀ¶mŽ9ºuë¸zõ*=ô%#$^¯—wÞy‡èèh{¬xÐï÷ó?ÿó?tèÐgžy¦Üóüæ›oظq㠯׻à®^T£Ñhê:¢©u!ú—%>’’’çêÕ«|ôÑG<ûì³”4ÖëØ±#3fÌ`þüù,X° ¤)">vV¡øˆDy}ÔNŸRØkÅŠ—ËõuãÆûÌš5«”øHKKcåÊ•üä'?¡h$©]»v$$$ðÁФI:tèpÛgI)ùøã­ƒf[–õ“òÎQS=8‹ÿÞn·;hÕ¼yskàÀ®èèh7nø%={ö‰‰‰C…祔*éÙmQ¢£…ÿ¶Ü¾öTg74ÇKä!—ËõPDD„ˆwõïß¿ÔçD¿ßOZZZAÄ#22’·Þz+h„ÄãñKrr2#GŽ,ÖàÂårÇgŸ}Ƙ1cÊì¼W”¬¬,Û¶í*m|¡Ñh4µ ÑÔ*„1†aüøÉ'Ÿýû÷/v, >¢¢¢xþùç9qâ‹/¦K—.<ÿüóAgΜaÞ¼yüèG?bàÀÅŽ9QÛ¶ío}>ß—Uô>a¨ÈG+à0¯d¾»âaà‡€ ¬,Y”~›û‡»\®¯6l8øå—_ö”ìö•žžÎG}DË–-™={vPváÂ>øà¢¢¢˜1c%L)%ÿûßíÝ»wçZ–5BJ¹»¼óÔTN»æ§¯ßïïnGGG» DYþ_ý5›7o¾æóùþt·©XNjS_TÄ£hÿæ3¦YYwsﻜO¤Ë劵m{PãÆ=z´«_¿~e¦aZxÄÅÅÅÂ… ™1cÁ:îäææòÇ?þ‘üàŒ?¾Ø1¿ßÏ;ï¼CÏž=™"..Ž­[·Ò¦M¦M›ô{tñâE’’’hÔ¨/½ôR)"¥dÕªUö®]»r-Ë)¥ÜUÞyj*!„ èîñxbü~·zõêcÄÄĈ¶mÛ–«î)77—ßýîw¶ßï_&¥Ì¸Ãç·ѨÈ€8|+¥Íc=ƾ}ûèÝ»wÁçÊ_ÿúW\.3gÎ yýÚµkÙ±c¿úÕ¯J±ïÝ»—ËEß¾}ƒ^kÛ6|óÍ7þsçΆal÷ûý몲&G£ÑhjZ€hjBˆÞ†a<1qâD£dñf@|„‡‡ó /”Z@DH‡‚/É… ˜3gŽeYÖ®ªBˆGQ))>”ËùÙLJíÓ/KvĺͽÃ\.×?"""†¿üòËa‘‘‘ÅŽò•W^ñDEE;~øða–,YÂäÉ“0`@Áx ­E‹LŸ>’]²@‰ µÎ-dÍš5öÖ­[ólÛŽ—Rî,ïöY–µª ÅGoT»]|QrÑ.„è V…‡‡Ç¿üòËž’ß“ŒŒ -ZÄ£>´ èùóç ê=‚¥Z•äË/¿”›7oöÚ¶=VJ¹©¼ó¬í8¾Ï¢„GIÎËkrq(„hŽSLnYV£¶mÛÚƒ6£££C¶Ž-ʵk×8|ø0—.]"**ŠP-gý~?ÿñÿaååå­,ZŒî¤vBµÐíNa´ãª›UŠ”2«Â/ZIx<žGŒÑ9X$âСCüýïç7Þ(õ=عs'Ÿ}öo¼ñF©‚ñ´´4–/_ÎÏ~ö3Ú¶mô¹7oÞäÊ•+tîÜ9èq¿ßϾ}ûøê«¯üÙÙÙH)w[–µYJYe^CFSÐ]°45†¢{Yâcþüù„‡‡³páBhÐ ´IyÇŽ™6m‡.•‚‘™™Y]â£0µ`ÛD|t¡Ð $(wñ»Âmšæßo'>&L˜Òƒ M›6¯>øàƒ2EÈÚµkåæÍ›}¶m»—ćCTjÜÀ)TQ$*jÕ õ3ú°:'$„h<ÖhݬY3kРAæ€hذ¡Yž{¤¤¤°k×.Ξ=K§NˆŒŒdýúõ¤§§óꫯ–ú½p¹\ôéÓÇHOO!ýP©ƒ“ |‡r+¯6ïŽ;Á¶íìëׯK …RíÚµãÖ­[ìØ±ƒ#F;H]Ü´iS©‚ñ¾}û²nÝ:’““yþùçƒ>·aÆ¥êË@µêMII!99ÙÊËËóûýþ­¨Ú˜j1\Ôh4šÚŽ šAÑÍ0ŒgÇŽ+JН×ËÂ… ±m›3fMbb"‰‰‰$$$ý?@ÇŽKål_¾|9 >öW±øhüõ{uøºÄñvEŽÊ戕õë×={öìRâãøñã,Z´ˆ°°0zöìYæ½Z·nÍK/½Ä|ÀâÅ‹™5kV©s¾úê+¹iÓ&ŸmÛÜIzXâðçßÿï…Ÿ :–uBDUun¾¢>ð€Ûí´oÚ´©¿ÿþš6mz[Ñ‘ŸŸÏþýû9|ø0Ï<ó 'OžäêÕ«¼ýöÛbýĉ$&&ràÀ EÑ111bÏž=Ý„/ j;*å&ª¶cwmŠvò¬cû÷ïï5yòd³¤Èjذ!ƒ bË–- :—ËÅ‘#GX¿~=W®\¡S§NìÙ³‡øøøRÆ‚#GŽdåÊ•dffÞÖÑ …Çúõë-¯×ëóûý;€íRÊüÊ~gF£©Ëh¢©vâc̘1bĈ¥v,333˜1caaa„……1kÖ,’’’HJJº­)ÊåË—™3gŽ•ŸŸ¤ŠÅG=TJO8pø´è³„MQ±<@ªÝn¹v’…¦išKëÕ«÷ðìÙ³=Mš4)vü»ï¾cáÂ…ÄÅűwï^™9sf™)k­[·&!!¯×[êØ×_-7nÜè³m{|I·ö{)eéWã–â"Ðõ³¬t"„px<žþ†a´ÍŽŽ¦cÇŽîÛ]ï÷û9rä©©©>|˜¨¨(bbb°,‹˜˜öìÙÃ7 HçΩW¯çÏŸ*@:wîLxx¸ÈÎÎîJa´cp¤:[èVÃ^¯÷±P"käÈ‘ìÚµ‹U«VqþüynܸAll,±±±˜¦É;ï¼Ã¦M›J öë×äädNŸ>]¦ÉÍÍeË–-lٲŲmû–ßïßì•Rú+ûE5æ^@ Mµ"„èêˆcÔ¨QÅć×ëeíÚµŒ3¦Tû˦M›’@RRRA$¤ène0¾ÿþ{­üüü£–e}\U©#N¾ü@s U?à+r¼J|„çQ.èåZØćÇã™8kÖ,OÉ<õS§N±`Áâãã1bƒ&))‰÷ߟ™3g–i„ÖªU«Rc›6m’ÉÉÉ–mÛ“¥”ëË3Ç{ §0½%Êòj%Þ×t5M³az<ѳgOcРA¢sçÎÆíº6Ù¶ÍñãÇIMMåàÁƒx½^ÂÃÙ={v±ú„®]»AjjjHff&^¯—-Z½·aÄÄİsçÎ,ŸÏ·@JYiï]]H)óÝn÷®uëÖ îÝ»w©(H£Fˆ‰‰a×®]Œ3†aÆ«  ÆÇÇKót¹\¼þúë!;Œåää°cǹiÓ&iÛv¶ßïßìÒÂC£ÑhÊF M…qòÆ]@nY9ÎBˆ.†a<_J|€*èLOOçäɓ̘1£T½GÓ¦MKEBB‰ï¿ÿž9sæX¹¹¹–eý­ŠóÖG£ u}¨ŽW¦ŽQÛó@SÔ‚vI¨Ý÷’8âc±Çã™4{ölOɤ”Ó47n±±±€ZhÍœ9“¤¤$æÎKBBÍš5+×KlÞ¼Y~ùå—–”r’”rM¹.º÷†úYm¯h¾~Ѷ¹.—«à~ðÁéß¿¹ÚæÚ¶Í™3gHOO'==Û¶éÕ«S¦LáÖ­[,]º´T'3Ã0ˆŽŽ&==˜˜RSSùöÛoéÓ§ýúõ ù¬èèh¶lÙ‰òò¨S8fŸ1@Ï+W®˜ôèÑ£Ôy#GŽdÏž=DFF–*FeÓ¦MlÙ²…qãÆ;ì甕•ŦM›ä·ß~+…×|>ß&`_m¬Ñh4šÚˆî‚¥¹+œ6²}QîÇ*毤”ÛBœßÁ0Œ©#GŽ4~øáRâ#ÀåË— LF¥®|RÔÅ\a¢Ò²º·PF„ß—ó¾†iš Ýn÷Ó³gÏv—Lÿ8sæ «V­â…^*ÂnÞ¼IRRyyy$$$мyó2Ÿ·e˹fÍKJù¸”òóòÌñ^CÑx•v5§¼B1È}Ú™¦ÙW „uïÞ]8ÐìÞ½{¹Úæfff’ššJzz:ÙÙÙôìÙ“˜˜ŠŠ¯×Ëïÿ{† VʃâÔ©SÌ™3ÇÃ<@lllÈ.MEùÏÿüOÿõë׿’R~{7ï]Ý!£bccÍG}4¤ø!õêÕ Yï‘••ŶmÛ7n\±…„#>¬ÜÜÜ“>ŸoYU¦B8­\§n`cÑz g÷ûǨY/0_Jy¾œ÷¦i&ºÝî©?ýéO=ÁR¥®_¿NRR–e1kÖ¬ õÙÙÙ|ðÁdgg“2‡}ëÖ­rõêÕ¶#>>+Ïï5œ/ ¢Xó¥”Wîâán·û˲ZuîÜÙîß¿¿Ù§OŸrµÍÍÏÏgÛ¶m¤§§såÊ¢¢¢¸zõ*o½õVÈz§¿ýíoœ={–_üâÅÆmÛæwÞ¡gÏžüøÇ?.÷üW­Z%SRRùýþ徨BtDµîAaÁüe`'pÒ0ŒWf̘atíÚµÔµ™™™üéOâÉ'Ÿ¤ÿþå~fff&7n´ÓÒÒ„išç}>ß&)告¿F£ÑÜŸÜÞ.V£ ÎÀ¤”óPídƒ"„hkÆÔaÆ•~¿?ht£FˆŠŠâÊ•+$%%qófi;†F1~üø â#//ï„Ïç[ZÅâ#Ýp‡ä§ G‰UóQnñaÆ_MÓ|1!!!¨øˆŠŠ"!!Ã0˜;w.×®]+uNDD/½ôÌŸ?¿¿ô·#%%G|<‹ÖÀTúÑ‚»¦iŽhÚ´i‹·ÞzK$$$˜¼­øHKKcëÖ­!8yò$=ôo½õ3fÌTƒPDGGséÒ%.\¸Pl>ýôS,XPL„x½^,XÀÏ~ö3¼^/‰‰‰AEHQ²²²˜3gŽ?77÷¤×ë]^ÅiW.T;݆(çì•%:^õF9_~!¥Ì(ç}…aï¹\®3gÎt‡2? UÐB7111¤IHHàÉ'Ÿ,•Ëž’’§Ÿ~jI)§H)?*Ïï5„-Q‘€ÅRÊ˸WL||¼YÞm—.]býúõ†ÁôéÓ2d 4 qãÆ´k׎ÔÔÚžîÝ»œ—$&&†ììlŽ?~§¯Q«º^ ! !F¿@¥:¶F Å4à¯RÊÅRÊcEÿ,ËÚxêÔ)ãÔ©SAï9f̘‚š©P8¦¦Ö»ï¾+8p¶í$Gx„V„F£)7Z€hª˲¢bbb‚¦]ÅÆÆrñâE>üðCòóóñz½,Z´ˆ¼¼<¦M›FëÖ­™={6¶m3gΜ  lPõsæÌ±rrrÎTuÚ•Ã#¨Ú—[À²¢µN*OQ#”òÞÔ0Œ?¸\®—fΜén×®]±c™™™äææ–ºæêÕ«äääà÷ûyÿý÷ùþûÒ%& 4 d:Jññ¼”ryyçx/!„h†°PJyá6—”u/Ãï÷—j‘àÈ‘#8p Ôxtt4·nÝ *bbb8vìXП;¨HGŸ>} Ô‹Ò²eKZµjEzzz¹ßáĉvEXe!Ý„Ïo#QÆ‘YÀ7Àÿ‘R~*¥¼ìz)åU!Äá 6S­[·fÈ!¥j@ @xøå±cÇNض˜ŸŸ¿XJy®²ÞO£Ñh4Z€hªÃ0ò®\ žÑÒ¶m[¦M›ÆÅ‹™?>K–,áÖ­[$$$P¿~}@¥Zvù7m*mÆ}óæMÞÿ}NNÎÙªN»Bô¡ê^V5ªBD¡"#n”×Ǻ;¸oc)åÿzþùçK‰)%K—.%))‰[·nŒŸúh±ñ€ø¸qãÆyŸÏ·¸¨÷FU „hœÊ’¥”ÇŠ Cy}DPuwÒ’³¾”Òx7”x.S¦L)øœ“ IDATèl•““ÃéÓ§™?>#GŽdøðá4lØY³fQ¿~}Þÿý3Ç’ìÙ³‡•+WÚRÊRÊ%w0¿{¨Ÿ•< Ì ò§cyo&¥´MÓÌ<}útÐã111Aë5ü~?mÚ´)ðö(Jƒ èÖ­[™iXíÛ·'***h¤£uëÖ¥~—äææ’’’œ9süøÃä† ®Û¶½RJüªGìýxõûÕȶ£ÜêçI)ÜÉï“”ò¢Ëå:ºzõj+ÔgmÛ¤¥¥ñÿïÿõ/^¼ØºxñâÛ¶ÿŸßïÿänë€4FS>t,M…BôGu|*ÕKár¹^:th½ &„¼.\`Þ¼yDFF‹€„"''‡9sæXYYY|>ß»m™Z^?™¨ÅÑw¨zÛ9&P‘À IJyãïfƵçž{®~ïÞ½ƒžséÒ%’’’¨_¿>7nÜ ..ŽQ£F;';;›yóæOŸ>}ŠKMMeÅŠ¶”2AJùáÌï^Ãq¦ït›ÓŽp•ãž#[·n=ìµ×^+eaÛ6¿ÿýï0`ãÆãĉ¤¦¦²ÿ~<ÙÙÙ<ýôÓ¥¼:vïÞÍÊ•+ùÕ¯~ÒóæøñãDEE•i: ª¾êСCìÝ»×ÊÈÈ0 ÃÈÒü~ÿ¾ò6I¨,œ:ª>À` h±Ó å©Q¡ !D#Ã0~6vìX׈# Ò@ý~?iii¬[·ÎãÆ iÛö·(ß—ì2n§Ñh4šJD M…)K€8Ç;†1mìØ±¢èB $å!999¼ÿþûþëׯg:ÎÍU*>„O¢LYÀûEÓ@„ñ@ª…ë‡w»˜3Mó½V­Z½ôÊ+¯xLÓ zÎåË—™;w.RJ^ýu"""JcÛv©üöôôt–/_nK)gK)çÞÍü4eã¤u½öÆoõ]Yµjééé¸\.¼^/}úô!&&†Î;3wî\ÂÃÃyá…Š]“ŸŸÏoû[ÆŽËðáÃïxN¶msâÄ vïÞm8pÛ¶ýRÊÖe2ªÛ8ω"¢q¼;PEå€)åÙJ~^Ã0žŽ‰‰1~ðƒˆóçÏ“œœì¿uë–å÷û·;¥”Á‹l4FSeh¢©0· Î9Ý Ãx6>>Þ=ztH’™™IRRRH’ŸŸÏœ9s¬ï¿ÿþ’Ïç›/¥Ì¯Ô— >÷!ÀxT‡ EÓTœŽWO¡rÕWJ)Ë_õ[ú9-LÓÜ7hР¦“&M ®@  =±Çã!!!ÈÈÈ2ï»ÿ~–.]jK)&¥üëÝÎOs{<Ï+#FŒhQÒ b¢hW²íÛ·³fÍÞ~ûíRÿÏ/Y²„¼¼<^zé¥rÍ¡ˆƒºLMMµóòòBœ°,k/p¸*;ÄÉö틺ìö”§®£Ïoçv»Gû|¾N.—ë–#sçε.]ºtÕçóÍ«&ñáBÕ}´D-â–9VU¨Ü8,©¬Å”⇆a|=hР°I“&ªÄ¤4W¯^eîܹ¸\.^{í5Ünw±ãGŽaáÂ…ð/–eý¡2æ¦)!DCÃ0Þxå•WD0—µkײk×.þùŸÿ¹TšÜ‡~ˆmÛåŽt€ò¿IMM%%%ÅíÚ5Ó4Í >Ÿ/UC‘SÑ÷¹Sœf }QÑŽ¢¦†ß{€4]k¡Ñh4š²·Ô4š8í2+1±gÏÆ_*ÊѺuëß’¤¬.Vùùù«5Eþ=B\FµÊ.íþ¨Ñh4šG Í]á8ßµ;°#BÒ·mÛ6ºXóz½Ì›7Ï:þ|V5‹úÀ$TayŠ”òh‘c€@ïÛ5RÊ‹U8•<˲ü{÷îEJ)Ÿxâ *+À±cÇX°`%¥üw˲~[…s»oq~mP¢£Åß6p://¯Ã©S§DçÎK]?iÒ¤ ÝËJâ÷ûÉÈÈ --Í:pà€ò¥”ûlÛÞoÛö™ªŒ(„Ây÷Ψڎ^(ÓMPÑŽ#¨ÚŽÕ8·( °UÔîGµÊî<)„0+ÒB£Ñh4Uƒ šAÑèoÛ6Û¶m³®]»ÆSO=e†……ÅÄÇ §æ£:óÙ"+@Aa¹"xe^—*¥Ü[UpRZ¾"-ËÚ“ššÚ hðÄOMÇ匾`Á¿”òw–eý{UÍí~DẢ"_ L XÀ TºÑa)eNXXØ”ÔÔÔ®;w.õÃêØ1´¿a ƒÕîÝ»í´´4lÛ¶œ¶¹û©¶¹œÃýQ û¢Σÿû¤”Ámà«–CRʃ%…ûéÀP@ F£©eè"tMµ#„hü•³½ Øîv»Ÿ5M³ñ€ŒÈÈH±oß>ëÒ¥K7}>ßRÊ›Õ8·À³¨EåOgç÷  ‰2¬’¤Þ7ß_Â…ŒßXkwz·‡¼ÛGãN7@¯o€Ÿâ‚N°ÄZûF/÷¿ ×ýg$°ÚZûâ@×pdŒÉ¦ãV9¦Óù-?¸“Öý¸‚ê]}ÝþgŒ™ïóù–•••¥R©”­®®ƒÁZ/tl³Ö6öåùûxl\ðšƒûÒ] bÀvÜjÇ¡Á(v?W³ˆÒ€§¬µéDD¤ ’^Qõ½¸mgX˜MÞÉÿçqß„o·Ö>žñ»àæ4 T¡­1æûÀ7p]|î°Ö>3¯s12ÆøpÛ©¦{—qœºµj.tìïš ïÛù9¸º¢ÖÚšþ|þó8žIÞñ\Aç„r€Ã¸ÐQ9“ÓûÂk <÷ÿ/cpÅçÅÀ³ÖÚƒyl""r*ՀȀó¾q¾ ÷ïí=`ÝàÑ)®Ä…v c%Ás).|¤€'0|ü.|Xà>…¾óNú§áÇ%t]å°¸95éUŽ-¤ö¶.­È×8¯ñÃU¸àQ’ñ«F\Aùfkí ÌéÞöµô¶CƘÀ_·c.¸@%"2Ü)€È€ò¾}þmmŸJ[:¼ã»Ñûq­µ¶É»=·] à­ÚÊaŒù ð ÷ãÖÚŸÄë w^)t®r”t»KW@¾W@žÍ¶Îƒ¢—-Vé™[ÄÖ¾ÉZÛjŒÙ ]%ôaf‘ˆˆô?h·à¾‰Žˇà7‘Wãê;Zw2n¿ Ô¯Ä c>üÈûñ¬µ?ˆ×®¼ ä—x—îµ)à°·½jP÷e›·0½ÅêJ:? 6ãjO†Ú‡!߻һDD.F 2`Œ1—áöb[\÷¨AÝûÞ×uj‘÷ãšôI™1f:.˜¤»ß[îzÝÀþ÷­ô­µßîï×n¼†éœ@>²Û]Zèl“»¯ûlŽáÌ›“Þb•ù¹ÔѹÅjÈv±:_^=Ku÷ºcÌ,Üì–&àÄ`›ˆˆœžˆ cL ®¬Þ°ÖVò!õä}À(ÜIÊzèØ¶² wÜoYkõ÷‹cn~‹ûïï1àkýýÃ÷mþ8ÜêÆ4Ü7û™ÀA:·U]T'šÞ6Á+p¡#sfI7Àr3Ãåç& Ôs×L ŒÅµäMÏ Ç-f"":éwÞ~ü;qÛ?ö¯ îÊ;¹]àýøzÆ7¨‹pÝsš€Uðº pƒs€§€?æ'ˆç¤Û¶ª©¸•™êpcp` BUÞ¿Û©¸Ð1 y¿²¸íf›qCma–½‹Ûj6÷oƇ+¬ß¬j«®""â(€È@øn˜Y ®{ÔPür ®ö£wÒ†1¦7ˆÜ„ö~=‰óf<+€»û»åë…Æ›ü>•ÎÐQÜí.í¸iÖ{€=ÞTø‹Ž1f nµãjºn±ªÁ­vlŽ[¬ÎÄZ»7³DDD. Ò¯Œ1WâZ×Z\Ç«> r@s½ë­AcÝÞ‰M¿1ÆÌVâ¶|­>v‘wáuGgà(§³;t-߇›ËqQ{í«¯Ä…Ž²Œ_µâ¦“o¶ÖV Ʊ‰ˆˆô…ˆô¯övïÇÕCiÒy&oïüåÞÞmé™ à…~~½9À˸ðñ&p»7·à¢p†nU'é {jÞÊ…ÀkŒ0·ÅêR:k^’¸âú͸€|Q†2@¤_xÅÛŸÄ\Ö êõn®Xõ¸µö¨·¯þïwïXkëûë…Œ1³q+£q—áU¡~á ¼$ãÒ½Ž£™ÎÀ±o¸gÃ3×Åj.ícÁm±Ú T\ ³KDDäâ "ýåC¸m"à‰!Z÷‘6Ý»Þå]_…;ö(°¶¿^ÄkCü2nÚFàÃÃñdÛSˆÛJUŽ«ç8]G:p¨0˜ŽÏ-]×1.ãW͸º† kí±Á86‘¤"}fŒ¹×ÒÖâŠÎ‡úIöDïz¿·ååFïçµýµ5Ê3×Ekn›×’áR@íÕ&”g\Æt»K8Bç*ÇÑ!H³ÆÆu¯š kéú—8ðnµcŸ>/Î@¤O¼ÎQñ~²uiÞ0»QÞÕ¸ÁQ¸Ž]o÷ÓkÌÄMO/6p‡¯SÕÜ óT\à0wIŽÀµ]>xµ=#/ä^Šû·–ÞþÓÉ7Û/æÚ¹¸(€Èyóê>Òó>0´ë>ÒŠp'Ïm¸-W ½Û×õÇL oÛÕ+¸ð±¸íB Þ·ôéÀQŽ[ÅÉ –S‡Nž3xuESp¡ãr 7ã×µ¸.V[û³ÞHDDäB¡"}±w¢ÝÂЯûHËñ®£¸Ã\Yß×'öº]­À­l­|Ôõõyš8&Ñ8ÊèÚà.pÀ ¼hºx cÌ8\MÑ•¸°›Ö„›×±ÅZ[=Ç&""2T(€Èy1ÆÌæ3ôç}t—ü®ñþüv_grxs>^Æu»Ú€[ù’áÃSLÆ…ŽÉ¸¡‘ÝG-]GKñ‚ⵞí]2ëa¢¸bò­¸ÏPïEDDP‘óàÀ¦ç}¼1Ôë>ºiò®K¸@²±/OhŒy?ð"®ûÓÀ2kmSïÊoðßXºŽ=ܵžÎÀ±ÿ ”ƒÂ«‹IÏë˜Jçµ®ð¾W×Ñçm}"""ÈœooûÇp³ªpÅÖ km«1¦׊÷$®óÕy‡cÌ"à9 Wó'ƒyòîÙO¤3pLäÔÁ)\þa\ôaŽ33Æé Óè˜.&ߎÛb¥íi"""½P‘sõAÜp¹®åî…8‘y;° (Àm—:/Ƙ?zÏónÂyV·*yÛ&Ðûvª(®-n:pU—ª³ã…Žé¸z¡Ëèì`p·½ªRNDDäì)€ÈY3Æ”7y?¾`­­ÌãéƒjÜ·×ù¸=û{Îõ Œ1~‹+jød_ëHÎâ5 ñ¸À1Þ»tŸ2Ѐ·²á]ŸPýÁÙóBÇ%t†ŽÌ¤`°éþ÷/""2¨@ä¬x[{îÀ¸ï°ÖV ò!õÅ$Ü>ýàV¯Nâͳ=I7Æ|øÜ?OŸéÏo›[1®ým©wÛæÕ]×÷Û©†DýÉ…Äë67$p:]W:p«f•ÖÚ£ƒpx"""ʈœ­¥¸–µMÀ3ƒ|,}5·}ænÛÒ`¦1æUkíþÞhŒùð®èø—À¬µ‰ÞÓËs\Aøhï’cPI5¸Ú›*ï=¿@·Á :¯|&n¥ãºþÿa=.tl·ÖV Âቈˆ [ rF^ËÝyt¶ÜmäC:oƘÜêB ø5n^í¸ ògƘZà=Üö¥#ÖÚˆ÷8|ø_ÞSýøË3­šx+G#¼K0’ÎÀ1š®ß´gŠãfoŽ{×ÕêªÔ7Ý«® k!9¸¦»p¬kÛšˆˆÈÀP‘^y-w?âý¸öL+€ÉÞõ ¯fcƒ1f7p0·Ê“žŽŽ1æ$> ÜŒ a?~\çr \-Hæ%·e*svO’¸oÛk½K:pÔ_ ƒ‡@cL9®í®ÅÕ}\°ÓÎÏà w=Ýsð`*®eî笵OÚ‘ c^cƒqÀ%Þe2]ÿÿ'…k•» ؇›ú®­U"""Ȥ· }77aƒµvï Ò@:Ä€yÀ7\§¯Zk+ñ¸†¯xüÜ*G9nB|¦z\ØØ ìó&Ó‹ˆˆÈ0§"Kp…¾ À˃|,-‰›}7.p­>­º‚¾3ÆŒÂu©*Ç­*èv—V\›Ü}¸À¡€"""!‹œ1f2ð~ÜÖ«g‡ó·ÐƘ"à¸B{póM¾¡ðq~¼Ž)t†Žî#]<¾m«ÈEÌÛzõ1ÜJÀzkížA>¤cŒ™‡+6Ÿ ´ÿŠûF~©1戵¶×Éè;cŒÆàj7Ò£°ÛÝ’ÀQÜðƃÀ!km<{G)"""‹ÛÍtn½Z1ÈÇ2`Œ1÷à† î*€/eÀçŒ1jæG'oâøÄn—î5 ºŽÃ """r&F;".NƘ‰¸püj8žcòp3=îõnz¸7½ÚaŒ)> aMÀò‹qê¹×¡ª2&y×%¸™b¸Àq:Ž*pˆˆˆÈ¹R¹y'œ_ĵEÝd­ýà R¿3Æ\ü˜ÛôOÀ·¬µ©n÷ |7$ ¼ ¬®'ÖÆ?íþ”¥@¨‡»×áZã'º~""""çJä"dŒ¹XŒ«xØZäCê7^­Â×€ïaÜ7öŸµÖ¾ÖËcBÀG+¼›špAdã…<Ï“‹«Û(¥3p”â&ÝwªpAãpd8ý»‘¡C¤cînÃç&qv•Àö¡0ÜÏ›ü}®þç÷ÖÚmƒ|HýÆ3×åêÃÞMþÜZ[w–Ÿ |éÝÅýÝmÅTÉoÿ1¸ ‘¾”x×§yHP ó®«:u¨‘lPé'Ƙû÷r—.lÃÔ¦¯wfó[vcÌàã@½µö¿³õºÍóQàßqßð·áÚëþä<ž'\\ŒÎøUn†Å~Ü ûñlmÓ2Æ„q¡(}‘q] äöò𠆌°¡ù"""2˜@ú1fn«Oþ¤I“øüç?OUU;wîdçΜ8q¢·‡Çݸ@² ØŽûÆ}¯µ69@ÇBÖÚÖxþlò>ûÿ‹«i÷ùÝm­ÝÒÇç5¸v³Wáv?ÉO'qÓ¼O͸“(ОñçÌbèÚIÊç=ožwùç|ïÏE=¼vwéc©j½ë öBÞB&"""ÓH?0Æ,Á› ¾råJ-ZDcc#uuu´¶¶Fiii¡ººšmÛ¶ñî»ï²uëVêë{vÐuµ¤8 ­2Ž1æ6àg¸®M)Ül¿îïaŠ^Ñþxà\—¨2N¿½i ´¸ÌËIÜjV"ËÇ#"""r^@úAzûUAA555XkI¥R].ÖZZ[[ijj¢µµ•¶¶6ššš¨¯¯çÝwßåõ×_gÇŽ´·÷zþÜBç*IúºÂZ[;ÀosÈ0ÆÿŒk¡k€÷€Ï[kßÊâ1â¶h£p+aÜjEŽ÷çïÇMšOkÏø9Š m§¹n´’!"""Ã…H?0Æü ðµ¹sç²nÝ:ªŽÖq×Gþ‰±¥#¹rv9 ^Æ®›I(8%¤R®®9½JF‰D"ÁdÓ¦M¼òÊ+ìܹ³ã¾§~üïÚº5cîÄ­tŒÅÄÿWM""""MBï—LŸ>€Ý;²oÏ1ŠGòêª-<þ›545¶ ú]RÄä)c¸ìŠ‰Ì¿f: ®›A( PTTDAAÅÅÅacÁ‚Ü{ï½´··ÓÜÜLSSµµµlÚ´‰?þñTWW§!<à]-ëŸÀ3Æ\†›f~£wÓà>kíºA;(9g ýc:tÊ­ÉÍ ³ôöwˆFãÔœh öD5Çyuå6~û«5Äc Bá Å£ (ŸVÊåWLä} ¦1{ÎdÒ»t‚Á @€ÜÜ\JJJ˜6móçÏç‹_ü"Á`ŠŠ |ðAöïß®í° ^‘ùßáÞSˆ©îADDDä£ÒG^G©©@0rd>íí‰Ìû1¶tcKGagw>>ÒÒÆ±ê“ÔÖ4†ˆ¡ÿÍIDATRWÓÄžx—_üÇ+X yùaJKGP>m,sæMaɇføH&“XkI&“D£Qâñ8ï{ßûÒdXì©ó&vÿ9ð-Üv+€?_µÖ´‘>Qé»)@àÒK/ààþŠŠ ‰´ÇOŸÒ¿7i ã&éøU2žäd}3õµÔ×6³û½^õ=/¹¿ßtyšT*űcÇhhhHßÔkk­ 1æO€ï騶Wçñâà•ˆˆˆˆô¾»4ý‡ô Hmm c&Œ¦-zþ;„ FP0²€IÓ¡¥±•×^\OnnˆH$Bkk+áp˜¼¼<‰ƘÌY#ìdscÌBàŸ€¼›êq3>R(‘áA¤ï.(..¦¸¸€H¤IyaZ£ý3(ûèá:&NrC¹ƒÁ ÅÅÅD£QŒ1—ŒRÙ//šEƘ[pu7z7Ep®þ¦v‹ˆˆˆ / }7:·_Õ×·àóù „ôE{î†k;þ7Å¢‰x‚úã ?\K¤©•o¹ €@Àµò ‡ÃcˆÅbXk©««K?ô‚ Þp¿ã‚GºZ?< |ÓZ[}š‡ŠˆˆˆÈL¤ïºtÀ:z¸Ž`0 ­ÑÄ9U„§R)Z#4Ö4Ñ\×LzFK0äŠÙ¨¯¯'//¯#ˆÔÖÖròäIâñŽÕ–!½Ë3øÀ—€rïæn¢ù÷­µ‡éÐDDDD$ @ú®Ë ýûO ‡‰'!Ñk ˆ ‰DŠö–6Ú›Ûˆ6G;æ‚Á.÷ž:­ cûU{{;~¿ŸºººÌíW@U¿½³crÛ€;Zkß9‹Ç€[ÏÇM ¨ÅmµúWkmÝi.""""ÈHx'ÖS s ÖÞÇççOž:µ|>߀cL°·jaè¹T¾Éó/ÀܼŽépÊòÍ>àà9`…&—‹ˆˆˆˆHß\ PVVFaa!--1‚¡`¯:;çüå—Œî¼Õ~¿ŸH$‚µ–šššô¯û¥ÝZ[mŒY¬Æà­òts•wÉt\^^°Öîêã‘áC¤oºtÀjo>BÁÓl«:MËÝ3¾È¥.€477°Öv ×ÕÕ‘Ht,,ôÛ,kí^cÌ|`0•®Û©RÀ“À.\訶ZkŸòD"""""@ú¦Ë Ç›ÝêG_ÊÀ{)e\zz•%•J‘H$hhhÈÜ~UÛßÀZ{Ìs ð<ð~:CHøŒµ¶&-ŠˆˆˆÈEC¤oº´à=~¼™àéV?ΓÏg1"L2éV9¬µXkI$¤R)Ž;–¾ë€ ´Ö¶c–à Èor÷>DDDDä|(€œ'¯o9t®€:t’P¿Ôt*ÆhooÇçóFÉÉÉICæ È€ ´Ö¶cî~ |W"""""rÎ@Î_9„Œê– ÐϳðÃ3¶´èl»¸¿²d2‰1†êêêô]d$ÍZ›¾bŒ9ÈבáKäüMðù|L:€X’É$­­­™Û¯ŽYkkûônDDDDD²@äü•L™2¥Ç_Zk ‡ýÌóÞWJ*•âÈ‘f6n8ÎÁƒÍ´¶ž¹‰”?`ÈÉñ“Ju]pH¥Rc2;`íèÓ;Éó÷pç믿ÎñãÇ)--=åÖv]ñ?>ŸqãÊI¥R´µÅÙ²¥ŽÝ;©«’Jº:Rç?å9ÀÕt+@_dŒY¬VZk7ôù݉ˆˆˆˆ ó÷ð7»ví*¾ä’KX°`Ë–-cñâÅÌ™3§ãN=€pØÏûÞWÂܹŤR)l¡rûIŽUG‰F“Œ<å9ü~?ñxc UUUé›À-ÞcÌ^à%àE`•µ6Ò¯ï\DDDDä<™Ó Ë™c¦feÞ^^^ÎâÅ‹¹í¶Û¸á†ƒXkI¥R½^Ò÷ill§²²‘²²0eeá.¿Oo½:zô(_ùÊWH$|õ«_åàÁƒ¬ZµŠ––– ÀO€'UD.""""ƒE¤Œ19ÀMÀíÀ‡I™¿ÏÍÍåšk®áÖ[oeÙ²eŒ7î¬BÈé.Éd’½{÷²ÿ~þþïÿ€åË—³xñbÚÛÛyûí·Y½z5kÖ¬aË–-=­À<|ÌZ›èþ ‘¦ÒŒ13q« 7žî>3gÎä–[náºë®cÁ‚ø|¾s !'Ož¤ªªŠwÞy‡Gyc <ðõWuÊk9r„W_}•U«VñÒK/e¶ìý–µöâ3éH?0Æÿ|o:zYY_þò—1ưråJÖ®]›(..æÚk¯å¦›nbñâÅœ1„ìÝ»—h4Êþðž~úiB¡wß}7ÿüÏÿÜë1®]»–{î¹'½Ek¯µvz¯*Bï#cÌïÅà¶\}ùË_æÞ{ï%“J¥Xºt)?þñyüñÇY´hëׯ§¾¾žúúzžþyžþyü~?W_}57Þx# ,`Ö¬Y=¾^4àèÑ£€+PÏÉÉ¡¥¥…ÜÜ\ü~ÿ)I$¼óÎ;|à`ÅŠ—cŒUú‘,SécÌÿþŸ÷gn¿ývþîïþŽp8L{{{—ûΟ?ŸÇ{ŒÉ“'sï½÷rèÐ!Þzë-6oÞÌH&“lذ \ÝI“&±hÑ".\ȼyóD£QR©555lÚ´ €x<ÎìÙ³©««ÜÀ¼¼< ìß¿ŸÇ{ŒqãÆe¶ Žó1U¸!†É,|\"""""Ú‚u¾Œ1‹€×ßܹsùÎw¾Ãüù󩪪"ïyÈà7¾ñ Ö­[ÇwÞÉu×]Gaa!@€††6lØ@EE•••§„—t!{~~>>Ÿ5kÖÐÔÔÀÂ… y衇z:>^{í5êëëÉËË#³mÛ6žxâ €:à«Þ]“@ pFêûãóé‰Èy2Æ< |¼°°;v‡8qâmmm=>¦­­|•+W2eÊ.\Èœ9sÈÉÉ!àóùH&“ìÚµ‹ŠŠ ¶mÛF}ýéóÀ¼yóøáHNNN—Û[ZZX¾|9£F"??Ÿd2I(bõêÕ¼øâ‹¿9ÍÓ¶;­µ»Îõ39ódŒ©Fÿíßþ-_ÿú× …Bø|>¢Ñ( ´´´Lö¼³iíÚµüô§?¥²²¿ßϤI“˜8q"%%% º„±XŒÃ‡³ÿ~Ž?N,`̘1|á _àŽ;î8å¹7nÜȾ}û´··‡)**¢½½µk×òòË/l¾ÓËÛ;b­}½OˆˆˆˆHTrŒ1 PPP@aaaÇï‰cÆŒ¡´´”––"‘‘H¤K¬… ²páBöïßÏo¼ÑÖ­[wJh Œ7Žk¯½–¹sçrÝu×1uêÔSŽ)™LòÌ3ÏPPP€1†öövÉd’T*EnnnæjJ]/oo°áÍÍÍ€«‰F£ƒA’É$‡¢²²2ýwzxš°ÞZ»·oŸŽˆˆˆˆÈé)€œcL°·JP ”:t¨Çû¦[ðZk äåå‘““Ø1chkk;%Œøý~ŠŠŠ(**êi‚yÖ®]‹Ïç ‰`ŒÁï÷ÇÉÍÍ%‹ñæ›oòÒK/¥WWÞ*º=M°ÖZ[{NˆˆˆˆˆÈ9R9KÞ”ó·ð¶^Q€={öôxkmÇ0Átû\€P(D8&77·#Œ477‰DN[3Ò“ÆÆF¶mÛF(âĉ…æñxc ¡PˆH$ /¼ÀöíÛÓ[ üªûS«¬µÑ³~q‘ó¤"ô³dŒYÜ2zôh‰¿»é¦›¸çž{øÈG>Ò±«§Kº#•JáóùÈÍÍ%à÷ûI$Äb±Ž0rºV¾•••äååqàÀZ[[±Öâ÷ûioo' ‘H$¨©©á‰'ž ¦¦ øO §Âò6àkm{¿éW gÁó9à—W^y%=ôcÆŒáСCüüç?çÙgŸíX¹1bwÝuú§Êœ9sz =]ü~?äåå‘H$ˆÇãXkillì²M+sìØ1b±»wï&™Lâ÷û±Ö’L& ƒÄb1¶nÝʳÏ>›1Ç€‡€Ã§y{íÖÚ'þSQé•1æcÀ×Á§žzŠÒÒR¢Ñ(íííäääPXXȪU«xøá‡9xð`Çc/¿ür>ó™ÏpÇw0jÔ¨SBG$aß¾}Œ7ŽüüüŽíZáp˜ÂÂBŠŠŠðù|444‹Å8zô(Æ***¨¯¯ï¨-‰Åb¬µ´µµñâ‹/vLSÞþhíåm¶/[k[æSé¤ÒcÌà_ϦoûÀ>À<@[[“'O& ÑÒÒB4%‘HPZZJ,cùòå<ú裴¶ºsþP(Ä’%KøÔ§>Å 7ÜÐ@žzê)¶nÝʼyó˜={6ÅÅÅäææv„”üü|ŠŠŠ?~<µµµüò—¿ì˜’žžóH$Ô×׳|ùr¼®\I`9ðp¦¿àzàUkm¬?E‘S)€tcŒY < L())áSŸúù—ÉÈ‘#iii¡¢¢‚êêjÊËË;v,'Ož¤­­­£óTii)Û¶mãßþíßxçÎŽ·¥¥¥ÜqÇ|ò“ŸdÊ”)¢Ñ(‡bÓ¦MÔÖÖR^^ΤI“1bápk-—_~9•••¬]»¶Ë*JzdçÎüþ÷¿OO`oÂ…§mgñv묵‰3ÞSDDDD¤(€d0Æ|ø[À°xñb¾ûÝïv¬2D£QŠŠŠ(++Ãï÷³oß>6oÞLqq1eeeÄãqNž<ÙÑñjêÔ©ƒAž|òI~øátA8óçÏçŸøK—.%77—P(D,£ªªŠ;và÷ûY°`ñxœñãdzuëVŽ=JmmmÇlD"Áš5kxùå—Óm{w?NžÅÛÝl´ú """"Y¤â1Æü ðGpó8î¿ÿ~î»ï¾ŽýÌK<'‘H0aÂJJJˆD"TTTÐÔÔÄĉÉËË#‰°wï^n¾ùfòóó1ư~ýz~ö³ŸñÜsÏu–çåå±hÑ"¾ô¥/1}út¬µäææ’L&‰Çã´µµ1bĶlÙBss3MMMÄb1ZZZX¾|9»ví·Íêà7¸íW½±¸à±kÀ>L‘Ó¸èˆ1f$ðp;`f̘Á~ðfΜ Ðcɼ´··“——Ç´iÓ‡Ã8p€íÛ·S]]M4åþûï'//ÖÖÖŽnY‘H„gŸ}–Gy„;wPPPÀO<Áرc»l³Wï±mÛ6|>õõõìÛ·_ýêWÔ×׃k£ûïô<ݼ»ð¦µöh¿~ˆ"""""gIĘG?(++ãÛßþ63fÌ`„ àL!$ó2eÊ&L˜@"‘ÀZ˨Q£:&•[¹ÒadÏž=Üwß}lݺ•eË–ñÿø’ÉdÇ4ôÆÆFŽu™aÍš5üú׿&‹k­û/@õY¼Õ6`µµöl¶g‰ˆˆˆˆ ÿ7¿ùÍÁ>†AcŒ ¿K–,áç?ÿ93fÌ`Ë–-¼ð €›í‘n“{6Ž9ÂÆ)//'w ôù|cðù|„B!rrr0Æà÷ûY½z5{÷îe÷îÝüö·¿åðáÃäççSZZŠ1†ƒ‹ÅxôÑGyæ™gÒáå àû@ÃYV=nÚyó9H"""""ý(0Ø0È|@ ફ®bëÖ­äçç3kÖ,/^Ì{ï½ÇsÏ=G8fîܹ”——FOûdMMMlذ@ @CCìØ¢5eÊ …BEäííí¼óÎ;\z饼üòË´´´ðôÓOóôÓOSZZÊ7Þˆµ–Õ«WsüøqpÛ¨~¬8ÍaX 8á]Ç#ÖÚ3Õ†ˆˆˆˆˆ 8mÁ2fpËe—]Æý÷ßO~~>àê.&L˜ÀĉI$TTTPYYÉìÙ³™5k¡PˆÖÖÖŽ­W'Nœàõ×_' ñéOšX,F<'‹u\óæÍÃï÷°wï^^yåR©ßúÖ·Ò«%oWE=n#nÕcO·ÛàÚîF¤fzˆˆˆˆÈP¥bÌûqÛ™‚áp˜… ²dÉJKK;îSZZÊ”)S5j»víbݺurÕUW1jÔ(<ÈŠ+ÈÍÍåž{îÁZÛ%xÄãq"‘o½õK—.eæÌ™444ðôÓODZÖòÃþ'N€ ›€ÙÀûÑ€6ké:Õ¼Øl­=œ•KDDDD¤.ú`Œù ðC Äû™«¯¾š[o½•Ë.» k-EEE”——3~üxjjjx÷ÝwÙ¶m±XŒ’’>÷¹ÏuK$ÁZ‹µ–ï}ï{455<ˆ›ç‘©ˆà É[½Kµölê?DDDDD† 1&× ë`zúö)S¦pë­·rÍ5×à÷û±Ö )//gâĉ„Ãaêëë3f +W®dêÔ©Œ?žD"Ñ>ž{î9¦M›Æm·ÝF$á…^è>vîÜÉ/~ñ pÁâ+@;®–c°ÛZÛ˜ýODDDDD¤ÿ)€tcŒ1À­Àß×ã¶?1räHn¾ùfn¸á†.]±&OžLyy9£FbË–-¬Y³†d2É¢E‹‡Ã¬[·ŽñãÇó¡}ˆ“'O²bÅ ÚÛÛ±Ö’J¥¨©©á'?ù ÍÍÍà!þ@Þ´ÖŒÏ@DDDDd (€ôÂsð×À§@(âƒü`GHzcôèÑL›6ÒÒR>ÌÛo¿MUUsæÌáæ›o¦ªªŠ×^{T*Õñ˜C‡ñ‹_ü"½õj/ð-  xÃZÛ6Xï[DDDDd (€œcÌXà«À_àŠÂ1Æ0kÖ,n¹åfÏžÝ*B¡W_}5eee„B!Œ1TVV²qãÆŽûXky÷ÝwùÝï~—î|µø°x×Z›¬÷*""""2@Î1& ü)nUdfúö‰'²dÉ’.u"×^{-MMMlÞ¼¹#x´¶¶òøã³qãÆôÃß~l´ÖnÎî;É.ódŒY„ "Ëp 1b7Þx#×_=äç燩©©!•J±~ýzž|òÉô–«$ð8®îc·µvý`½‘lQé#cÌeÀÿîÂÁ`k¯½–믿ž1cư~ýzV­ZEUUUúaGGp[¯váV?ô!""""ÞH?1Æ”÷ãÚè–œænàày Ød­­:Í}EDDDD†~fŒ áêD¾”Ààm`p7hð V=DDDDäb£2€¼™"Å@>Ô^WDDDD.f """""’5¾Á>¹x(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖ(€ˆˆˆˆˆHÖü¡.5«=¦<IEND®B`‚lasso-2.8.2/docs/lasso-book/figures/PaxHeaders/sso-brws-post.svg0000644000000000000000000000013213766621500021660 xustar0030 mtime=1608196928.762895301 30 atime=1678814287.445762505 30 ctime=1678814323.149965495 lasso-2.8.2/docs/lasso-book/figures/sso-brws-post.svg0000644000175000017500000075266613766621500025156 0ustar00bdauvergnebdauvergne00000000000000 image/svg+xml ServiceProvider IdentityProvider 1 HTTP 2 HTTP 3 HTTP HTTP 4 lasso-2.8.2/docs/lasso-book/figures/PaxHeaders/slo-sp-soap.png0000644000000000000000000000013214404126124021250 xustar0030 mtime=1678814292.621791889 30 atime=1678814292.565791572 30 ctime=1678814323.169965609 lasso-2.8.2/docs/lasso-book/figures/slo-sp-soap.png0000644000175000017500000020344114404126124024524 0ustar00bdauvergnebdauvergne00000000000000‰PNG  IHDR ¡™Ð< pHYsÊ&ó?tEXtSoftwarewww.inkscape.org›î< IDATxœìÝy˜\Uµ÷ñ瑱'2tHH $ Ù0P‘AAE@½ ¢ r¯ŠWïUADáUd ‚eH“2H2d‚@„H€„$=Ö°Þ?ö9ÅéJu§“ž€ü>ÏSOuÚuήæ¡+«ö^k™»#"""""ÒR}=Y(‘^£DDDDDDzé5 @DDDDD¤×(‘^£DDDDDDzé5 @DDDDD¤×(‘^£DDDDDDzé5 @DDDDD¤×(‘^£DDDDDDzé5 @DDDDD¤×(‘^£DDDDDDzé5 @DDDDD¤×(‘^£DDDDDDzé5 @DDDDD¤×(‘^£DDDDDDzé5 @DDDDD¤×(‘^£DDDDDDzé5 @DDDDD¤×(éefVcf£Í¬¾¯ç`fuÑ|ú÷õ\äãOˆˆˆˆH™Ùfv™í×ɗ켜Ùs³jËÌ60³Aí<½_4ŸãSf6ÈÌêzc~²þP""""Òu;‚‰íúz"¸xÏ̪:9~à=àzlF²^ÊôõDDDD¤o¹ûÀúz²~P""""ÒƒÌ,ì l¼ü½¯ìÔó€'ܽX6f0x Hû#€ùÀ#î^HŒl=ÜÂÌrÑÏËÜ}Y´Íjc`©»¯4³~Ñ|˜ÙèÄ¥D×ÁÝ_ogþ㹿ê÷+ëmÁé!f6xx¸¸˜ Œigü3»x¸øððo3Û²løò6f÷¿7³‰±O‡E?Ï^÷ pntl?Úæ€<ýüùÄøW€þÀÏ€W£À¦ü=ô‹®q‹‚©DˆˆˆˆH0³4ðB^ÈEÀp`kà_À¯*ŒO&‚‹­€aÀ)„Õˆ)fVSáR7‚•qÑù¯v®Û˜ý¼ !\ÙÎôï>ý|sbü`%ð[¿#ϨðÚÏ‚”kÛ9·¬ç€ˆˆˆˆôŒÃ]ß¹ûÜ}±»Ï¾@Xá(w aÕÏÜýwÙÝ—¸ûo’ÏVxÝ-î~±»Ï‰Îÿ` 01àî¯ ÑÃWÝ}~t[Viâî¾ ˆ·W­HŒŸmû08=Úb–t&ð>pkG¿Y)éF÷HŒ¶%ýaõáSi|äÎè~Ÿ ϵù‡¾»·¶y­¶=ª»DïáªÎñq3Û™tÝìî í¼\Ös @DDDDzÆÈèþÕ Ïͯp,Nôþ—™½—¼ñÁŠÉF^·¨Â±„mP=é ‘¶½L⟯éákËG˜ª`‰ˆˆˆôŒ8»³åmSÑk.ò팩TuªXáXs÷åfv ð…(ý]à$àIw¾/æ$ @DDDDzÆÂè~4ðVÙså­ ¬”ì<îîÏöÀ|Ö6 êÌøß_Šn «.Zýi –ˆˆˆHϸ/º?=yÐÌ øb…ñ‰îÏï¡ù,îurü»„ dÃö¸û à)Â{< XÜÖ…9Êz@+ """"=c¡ÿÆéf¶ˆP·ø°y…ñ#ôòø\T’÷W„ÜÁ„»'*jݽŽó™ÝÿÒÌþ €Yî>»Ò`wo1³—€ÃÌì\`qôÔ_Ý=—ú[B“M_¹{ã:ÎOÖZéQ¹Ú〧K‰ç3Ogw0þ7Ñýc„­[³€Û±|¬‹?ú…Ýß¿†×|™Ð½ý—ÑøÛATÒ­@\ÎW½?dL *EDDDº&ê:>xÇÝW”=—"4ÜŒP±êq K(aûž»/¯p¾ Íë÷€WÜý•²1C€Àkî^({n°»Wª¶…™mDÈ×XæîË̬ØXêî++Œ¯ŠžÏ ¢`)~®?ð&ðœ»ïÝίH¤Dˆˆˆˆˆ¬33û6ð3à³î®üY# """"²V¢Dú/Vq¾M¨à5¾|%F¤ """"²V¢me ˜|ÉÝ_ìÛYÉG…‘)3Û8ø»»ÏëÄø­€ýûݽRw‘.S^‘u%rO-;¼Š°éaàîÞ^GóÞ²¡1à©À`B4þ3„÷!ÒíT†WDDDdÝd]ΗE·*BiÛ?÷šY¶ï¦ÀàºV¾W¤[iDDDD¤kžs÷ƒãf¶ p?p aåá÷}51wŒ°KäCCˆˆˆˆH7r÷Åföà&Bò{3 <¼œlÌv÷+Ìlàs„mS`6ðî¾4>·™í ìüÍÝß.¿¶™íBX•™êî ;Ê1³íÝÕ:®ßØÑû2³zàD`G MhªøGw_V6î`˜»_gf{ǃ€ÿU¢º€‘žý£ûm¹ÿKȯAØ5¸Ò̶¦#¥@3p&ð3;ÎÝÿgÃèÔÝ7!·G]Ï!)o§E½8JÌlK`/`ry7ö²q›ÿ/:Ïöî¾-!°¸†„” ü•Hìæî›¹û–„„u€?GÒ“ªsܽ>:ÿ£íÍIÖ/ @DDDDº¦ÖÌFG·ÝÌìbÂ?äó„U†¤—€sܽÀÝW‡Û7»{i¼»ßOè0>˜°e‹¨ªÖ-O–ûTÀ€Ö0ß3€:à»î>':¯¶}•;¨Îp÷§ó›\lVöšp¡»ÿ#[t÷¦5ÌKÖ @DDDDºfðJt{ øOà}àóîþï²±ÓܽXv,$n¯pîÛ¢û½Ç®îO‹D«!§¶G=¸†ùîÝÿ-y0 BþZaüA@#°ÐÌ>af»Ä7ª„­^åÊK‹Ê骗¹ò7^æ¸{K…±‹*Ý¿Qá¹…Ñý°ø€»Ï2³§Ìì¼hea_`sàÇœrËâU˜v®—4œ°bòRç¬/{Ü ¼³†yÈzJˆˆˆˆH×¼éî×vrl¡Â±æè¾…çú—‰]\Ln!¬†8kÞ~Ðl`f© ÁÊ€ ã[ Õœóý²Ç…hEEd5Ú‚%"""Ò·â•…+<7>º/¯u+!8-*ßûà wïh•"y½*`ë Ïm_áØ,ªIÁÝç·s{·×€ˆˆˆˆôµ¿VFÎ5³~ñÁ¨:ÖÑÃ;’/ˆþÁ!?ã\ «'¼·grtߦ╙>[a|¼ªòs3K—?ifµfVÛÉk‹h –ˆtNÔÌj4¡™ÔRàw¯´_¹O˜ÙeÀHw?½¯ç""²6Üý53»¸xÌÌ®%l¹:•Ûñ§D¤+—M|°¾&NVO&J›P6x»²ñ·Gš>ef^‹^³#pð)à…N^_Ös @D¤Cf¶ ð*ìý5³—O»ûó½>±ÕíGå­""=%OøûâNŒmŠÆ–çJàî›Ùà|à×ÑáwŒJîž!$€ßëî•ÎÝ]weâZE3›DÈ!9°ê±2zü4¡ôoCb¼›Ùç'¯?Oœ>!J~!µ˜ˆ/R‘)?HDÚcfõ„šðÃL!| Žv!|;÷Uw¨Ï&‰ºúnäîWôõ\DDºÂ̆¾íî•’Ö»óZu„>#o»{k'_SOHV»J_"R""í2³3 q¯t÷óÚSÕÙ-%¡‹HGFF÷O·7 RðafŸ2³Éfö†™½mfšÙç*Œûº™ÝffÍì»fö‚™½kfŸ6³ß›YÅÕ 3ËšÙÍfö£Ä±ËÌìº cëÌì3ûW4—f6ÍÌN­0vRôÜ›f¶ØÌî3³CÚ{ï"""²ö€ˆHGâ=¼Ç™YUg^`f_þìÜ ÜHXªÿ?3ûAÙð݀㛀o3 Õ`Z#T„Wá2G'‘ØÓLÈ9¦l.€GŸêãßBH¶¬&ì³N޽¸?šãçâU¨æÃ„Zù£Üý½µû ŠˆˆH9­€ˆH»Ü}°p;08‹Píd™ý»Âö¤3€,ðqð'ü€ð7ç3.uY2øˆ< ¼œœ¬;ofCÌýqðQIT“þT`.py…÷övâáW +$ç$·”¹ûªèµý¢kŠˆˆH© ¯ˆtÈÝ'D«û»¶@íLØžt¼»Ç ²vî0³}ÊNUÝoYá2ÏT¸®›Ù„ò“ÊM|ŽÐÁ÷†ò×”Ùž°ÕêI_óRïî„’“§˜Yùs›t0oYK @D¤S¢Õ€»£Û%fv.p¡F}€ÔE ½œ‰6µèÞigüÀ¥Ài|€œ,þº†)÷îßZÃ8€„ æÌvžŸO¨á/"""]¤DDÖ‰»_if—[™Y­»7ËÉã;·Ókm¯± Êí8ÆÌrQv®q÷æ5¼<Î×щK-êÜ}̺ÏVD¤ïD¹v§:“%yPÅp^'V‚EzY'f–!lq*º<| 8ŒPEª;\ìOèÖ»uâØšÌV{›YÆÝóŒ}‚°Íl‚»ÿ« séufv¡ÚßVí yÏÌþ<Ýž®w'Òk”„."í2³¯šÙÍlÓ²ã5ÀÿFIæ¿!äRüÜÌv*{™Ù¾f¶¶« w¶m} ø<0×ÝŸ\Ó‹¢9ýšPV÷QÀ”œÏ‰‡? ÀïËçgfi3;ÒÌ#"ò!bfÌì1ÂßÉ­Òé4ûï¿?Çw;í´55q꾺¸xÛÌ^ú5Ý`f×VÈÛé1Z‘Ž ¾|×Ìf¯r+¶†Jó~=ìى„~ÓÍì BþÄFÀ¶„``"¡ºU§¸{ƒ™ý™òJ®\‹ù_Œæ8)úÐ [òÀvÑ5þef_®fšÙãÀ„ôí£û­w×âÚ""=ÂÌF?&¬ À~ûíÇ~ðÆû uR.—cæÌ™Ì˜1ƒgžy†§Ÿ~š ÄOäƒf³_6³›S´]Kzšú€ˆH»¢Uƒ½AÃvÀ0B“À×€éÀ’åv¯ |ؓЄðB raÅ$î³q¡šÖeQI{óذúp…»/®0æ,`˜»ÿgÙñp"p!j$”æý“»?X6v[Bß]:BûK„戺{±½9Šˆô43DøRèë„-°Œ;–Ë.»Œ<Îü›nÙ²e<ÿüó<÷Üs<÷Üs<ûì³,\¸09ä;îþ?=1‘˜‘±èË ³KÛ©2d\p'Ÿ|2™LØÐ²®ÿ¦»þúë¹ð ) ³Ü}ûn™¸H;´KDDDäCÊÌ l=Ý ººš¯|å+œwÞyôïß¿ãwBcc#K—.eìØ±Ìž=`l—O*² @DDDD>dÌl3à€ã£ÇLš4‰K.¹„#:S]|Íž}öY|ðAú÷ïOuuu|8Ý-'逑‰¨Êàw€ïrÑØzë­ùáÈþûïß-×(‹ÜvÛm¼÷Þ{l°Áäómª”ko¾ô8 "ë3›HH 啬^ª”LÞÛÌl°¸Õݿ։ñÀ9Àuîþíž^{sBH¤,r÷Çûb"òÑgfÇÊ‚¨¯¯çüóÏçôÓO'îxa¢³ùo¾ù&Ó¦M£µµ•t:M.—£ºº:ùz Ò〈¬_~Œ«p¼ÉÌþ¸´Ë/0ˆè[¿NH­åøn5þú90*qx2¡Ú–ˆH§™ÙA„êVû¤R)Ž?þx.»ì2î¾D>ú(¯¼ò ¹\wÇÝ©­­¥±±19Lˆô8 "ë§Ý Ì3À'ý2.&”Ë]›>Ým¡îG¡ßÆ&À{ÀýÀ›„ê4""kÅÌî&ʽØsÏ=¹üòËÙn»íºí«V­â`ùòåär9 …Ùlw§¥¥…ººº¸„Ï‘¥DdýôŒ»ÇŸ6ÿ2³W€€3©€˜™›uîþRÙsÃ Í ßr÷÷»2©hN3Ú{ÞÌ6ˆæñž»¿Ó™sF]Üû‹;3?3ë]ãmw_ÞÁ\Mè´Ž™mYKfVüHo¼ñÆüçþ'“&M"üÉí3gÎäÅ_dùòå‹ÅÒªGKK îNuu5ÍÍͤR©ø%Z‘—ZóYvwòù<…BT*E¡P(mŸÊd2¤R)2™ …B§Ÿ~šY³>ø“XSSCkk+îNMMMé5ñ KrU$î_¾WÞ¹¬×€ˆ¬ŸvOTÁêÈŠ Çâ¯ÉÚyMau5Cp ¬rAXõø…™íìüºB^H¹ª®WéXmtÿ*P©¹â|BÙÜr}ÞˆQDÖ;”¶[-_¾œººW”är9ŠÅ"«V­*­VÄ=Bþô§?•¶\™UUU´´´Íf)‹´¶¶R[[KSSétšL&CKKK)0I¥RÊ‘^¥DDÖV¼‚1²çGËÊ‹»«§¿àƒíX7¬åõž){n³ ãߊîÿàî÷wâü""}¥!ï`êÔ©¼öÚkì³Ï>Œ=š~ýú­¶=  ¹¹™††R© ¼õÖ[¸{©·GœãÑÚÚZ Hš››KyfVú9—è¢Dzœr@Ddm= 4ÇšY6ù„™í §,9< Fn!TÈÚ ø0ËݧwâzE÷Ÿ®ð\¥cqÐqj'Î-"Ò—ÚlÁ:âˆ#˜8q"Ó§OçÇ?þ1·ß~;óæÍcåÊhãªV ¼ûµµµ¥>ÉàBþHMMMéX:&ŸÏ¯V’79'‘ž¤Y+î¾ÒÌ®ÎþŸ™}ÍÝÍl,ð;·g?¯ðÒ€³ U¨†*cuÆ?éÀ‰fvðgww3û,«'¶ÜKèkr²™½\îî«Ìl0ðYà w¿³“ׯÈÌjqÑÃx%¦ÞÌv‰~~ßÝ_îÊ5Däc¯Í H¿~ýØ~ûíÙ~ûíinnfÁ‚<ù䓼óÎ;Œ3†Í7ßœAƒQSSƒ»S,KÉéñ–«B¡PÊñhnn.qÇóÆÆÆ6=@âqñÐ ˆô "²..$$²ŸœdfK=BrÀyîþpù Ü}º™Í¶'TÅ*¯®UQlœ<ܼgf žPê÷ÆGXqùð]3[Dè-2˜ðázÆÚ¿åÕŒ!¬%íŸ8v7pT7\GD>f¢/Cê) @b…Bt:Íæ›oÎèÑ£ijjâõ×_gæÌ™äóyvÚi' T B€Ò G*•"NÓÚÚZ .ÒétiU$9.›Í–VE€HoR"²~ù0€Î-±–ÊÉÚDMüŽ6³€ý _þâî¯tpÎSU­V´Óû£8ÐØ0y½—Íl‡èõc y!wÍ:µ'Ç¿ bfŸ†:œ¿Üçîo$†ÿ˜þbó®da4×ö´ÛÛDDÖ_f¶ßøñãÜxãSÿûߗǽ8`õr¼îN.—ÃÌ9r$£G¦±±3£¹¹¹Ív¬––ªªªJÕ¬âDô¸V¡P(å‚d³Yòù|©Hsss²¼¯éq @DÖ#î>m-ÆÞÞ‰1±zóÂŽÆÿøwÏ瀊×u÷¬Þ<öÆG¯yx| sš ÌíhL;¯{¿£k‹ˆ´ã ƒ>8µÇ{P___ë­·–9sæ0hÐ X ’%y›ššp÷RÂx2)/µ›Ïç©­­¥±±‘ªª*òù|›c™Lø'`¤äó¥¶I @¤Ç)é=ÿïšk®9õ‘GÙÒŠÆÄ’%K¸òÊ+ÙrË-Ù}÷ÝÙb‹-*VÂJnÙŠŸKV¾J§Ó¤R©RùÝ80q÷R.H¼ê‘,ÅQºô8 """"½ÄÝ_63³ÑÀÕÀÄ8 øÔ§>Åž{îÉ«¯¾Ê¬Y³xðÁ5jÛm·ƒfƒ 6Hž§tq>GœãQ~ XmVœˆ®F„Ò›€ˆˆˆˆô2wŸofO“[©R©›o¾9£FâàƒæÍ7ßäÅ_ä©§žbã7f³Í6cà 7,5Œ»¥Ç½=Z[[Éd2¥-UqŽG¼ +—Ë•šf2ÌŒ\.WÚ’…é @DDDDú†“Ðãco¼1Æ #ŸÏ³téR^ýuêêêJƒ»SUUU Dâ€#Ù=Y +“ÉÐÜÜLMM MMMd³ÙRÉ#ÒÀˆˆˆˆôÕÊð&WCâÇñJÇ AƒØpà I§Ó¬Zµª46ÙL°¼ z&“i·3zœ—î(‘§Nè"ò¡df5f¶I_ÏCD¤•dà±dÉKƒ’Ïåóù6ÏÅ¥t …B)¸ˆ3+uFÏårTUUËåÚ¬”ÄÇ" @¤Ç)‘ 3K›Ù—Ìl>мifËÍì13û¹™hf£úzž""ݤâ ȼyó8묳øÍo~Ü9sJù•ú„m‚‹|>_êý¯lÄGKK étšt:]Ú®•Ëå´"½N[°DäCÁÌ&?v({j °Wt‹Ç¾ <ÌHÜV¹ûÊžŸ­ˆH·h³ûä'?É{ìÁK/½Äý÷ßÏwÜÁvÛmÇN;íÄàÁƒKãâ $n:˜\ሃ3+uïÀÙgŸ}øÆ7¾Á¹çžKMMMüÔÁÝ7{‘Ѧ´Ÿhž|.°¸{©ünmm-¹\3+µµµ‹EŠÅb©ünuu5ÖË·a‹EfΜɪU«Øh£¸è¢‹<öØcÇßqÇ7|ùË_^6pàÀ'Ìì3Û¥ç=òq¥éqf¶3p%Q"y&“ᤓNâ /dÈ!]>¿»ó§?ý‰††FŒÁË/¿ 0¨Ë'éY“Ð×´R¾JœJ¥JÛ°’Õ®âà"›ÍR(ÈårÔÕÕÑØØXÚ†•ÏçÛä455qíµ×®Èd2óöØcwÙe3f õõõ{ì±vÊ)§ìQ,÷xî¹çØu×]Ϙ1ã.à`ª»¯êÁß•|Œ(‘cfƒ_&ZqÝgŸ}øÑ~ĶÛn[ñ5k»ÕøwÞá–[n!›Í’ÉdTÉED>JVKBï(ðHJn¿ŠoqðQUUE¡P(•ämjj"“ÉÍfK “ÇZZZJÕçZZZÞ1³¡=ôСÀ‘Ûl³Í{ì±Gݸqã>|8£Fâg?ûÙ&555g¾ñÆg>øàƒùÚÚÚGš››ï&«ˆtDˆˆt;3Kg’Ì7ØtÓMùÞ÷¾Ç 'œÐm×yä‘G˜5kÙl¶ôžJ•v–*iRD>ìVKB‡öö”t:]ª†•,µ›Ìûhmm-•ìmnn¦®®Žææf€Rµ¬È‹îþNtþ%ÀÀf–ž;wîžÀ‘õõõ‡ï¹çž;ì²Ë.l¾ùæ 8ãŽ;.sê©§ÐÔÔtÀŒ3~¹í¶Û.š;wîÀ]À#î^º€ˆé6f–ö&l·ú@mm-çœsçž{nißqW577sçw²jÕ*R©…BL&ƒ»'W@€ˆÈ‡]§“Ð+=Ïçó¤Óé6Iåq#ÂxU$“É”VEâ¸akkki„vº{x,º}×ÌÆL:õðt:}øÎ;ï|О{î™3f m´ãÆãšk®Ù4•J;oÞ¼so½õÖUf6ÁÝgwëoO>²€ˆH·ˆ¶[Ý ì›8q"—_~9#GŽì¶ëÌ;—3fÐØØXÚv¬ê’X)vt‘Šex“?wfKV\ù*™TžÍfÉçómªae³Ù6ÉéqIÞT*÷X‚NvBw÷W€_¿2³ºéÓ§±ñƳ×^{m²ýöÛ³Å[P__Ï·¾õ­~÷Ýw߀€ˆH7ˆV>þL|l·Ýv\~ùåì¹çžÝvB¡À<À»ï¾[ª‹of¥o÷â$˸”$Z‘`fþý”ÜÝ—wát]NB·^ÅùÉÞ™L3+å}´´´`f¥mXµµµ¥mX‰/oÖ:‘ÎÝ _@Ý |Õ̶¿ãŽ;Ïf³Gí¹çžŸ\¹rexxmÏ+_ @D¤;Lö¸à‚ øæ7¿Ù¦³nW½ýöÛLŸ>%K–”’.ã$ËøÃ6Þóœ(å«DDzÂ8àÑøAâoNh%üíY |ÛÝo^ùÖ* ½£xûiy’J¥J9UUUär9òù|éïfüÚÄöÕ.Wòp÷™ÀLà§fVdÝ}iWÏ+ê""Ýá(€qãÆqöÙgSWW·N==*yá…xòÉ'Y²d >tã„J%}ã=ÏÅbQ+ "Ò£Üý1`*a$)ÔE·à¶Nœ®ÝäÏ=o½Š·R …6„ä8/$NNÏår¥U‘T*Uú›=räÈáwÞyçŽS§Ní–¤=w_®àCÊiDDºÃŸüä':thie"•JQSSC.—[ëòºÍÍÍÌ›7Y³fÑÔÔ„»“ÉdH§Ó¥ýË­­­¥ÕxV‚é)ß$|Ã_I8ÃÝË”JV[‰U*»ÛÞÏqòyü7²Ò6¬ÖÖÖ6ùrñ6¬d…,€úúú 3™ÌÉ@nÊ”)/§R©¹…BaîG±¬ïG¤S€ˆH·‰÷§Ói PJW%âmS#fÆûï¿Ïܹs™3gNiluu5ù|žb±Hmmm)¡²X,–’,ã@%¢$té)Ë—mÊŽ·w¸û?:yž.%¡Ç¯koËUr{j²QarVüåM|®t:íÑù³À¶Åbq[3cÊ”)ï¥R©Ùù|~NSSÓüã?¾´Ü,²¶€ˆHw(BåoìŠÅ"™L¦´Å Þ"!PIl™"›Í²lÙ2}ôQÞ}÷ÝÒøl6[ªÖ'TÖÔÔ”>l“͵äZ‘nef_¾ ¨0$OXé¬t½zÜL0þ¢¦P(´9¯BÇ+ ñªHÜ#¤©©©´ËÌÚûòfÃb±¸w*•Ú»_¿~­S¦Ly˜mfs;ì°kñžE€ˆH·p L´×±·¥¥…B¡@*•"“É”n+W®dÈ!Ì™3‡‡~˜|>_ÚVP,K[â .ÉäÉ\.W*Å?Ÿœ“ˆHWE•þN~lžÌ>ÔMÀw¢æ}ÕæË›uí¯ 755µ)Éñ±8àhnnnSE0.Ó N§×¸zìîUÀ¶À¶îîS¦LYT,_Îd2³=ôÐ×Ðß_Y "ÒÚ$R>õÔSŒ1‚úúúÒ¶¬äg.—£¹¹™+VPUUÅСCyûí·y衇JãâòɽÊq©Ýd#­d—êêê䊊¶`‰H—™ÙAÀÏ¢C¯—7ý€£ààšµ<})Y—$ô¸yyŽG6›-è(_-nii)mÑ*‹TWWs×]w•ú€Œ?þµµ|ŒH¥R#ŠÅâ~S¦Lip÷ …Âì¼´ß~û5¯åùd= DDºC›}ÌK–,áÊ+¯d‡v`„ Œ3†þýûWü mjjbåÊ•,^¼Û²âDódÀQ¾u ÞrÕØØHUUfF.—Ó ˆˆt 3Ûø)°otè]àgÀ/ݽ%:¶ÒÌ.®¾àîkûÅG‡Iè Jâ&¬qÀÑÚÚºÚjqœCqâúÍ7ßÌã?À–[n9ïØc}y-ßC¹ ÌlçL&³sCCCñž{îyÝÝg‹Å9G}ôÛ]<·|L(‘îPúÏÌ8òÈ#™8q"¯¿þ:O=õS¦LaË-·dûí·gذal°Á¥Æ[³V®\Y*¥›L¨L§Ó¥mXñg\]+ÙH+^)Q^é 3Ûø!ak•„Žß—»ûû^r q÷ëp9‡Õ“Ð×f5$.ô‘ 8â¼äßÒä:ÕÕÕ,^¼˜ßþö·,Z´€qãÆÍ¾ä’Kî[‡÷°Ú{J¥Råóù¥À¶étzkwß<•J>eÊ”¥fvåa‡ֲƳÈÇšé«}‹gfŒ1‚M7Ý”£Ž:Š… 2sæLüqFŽÉæ›oΆnHUUUéC4®Qå%#+Up)ÿ°MtóU""ffƒïߪ ×þLÈëhw[RTn÷—ëxÙ6ÛW; <Ê®ùÁ ¢BqGôøïfܘµüX&“áÙgŸåºë®£±±‘t:]˜8qâÃgŸ}öºPåójN¥R·z衳£CÏ©©S§náîÛ¦R©Á‡z¨‚Q""ëÆÌ†ß"44•»ùƬÇgĈär9/^ÌK/½Ä€J½;ܽ´‚‘ÜrÕÞ6¬x¥$Ή›p%ºù*DDÖÈÌê€s€ Ñá€ÿp÷ç{øò«å€¬Kz>Ÿ/åÛ°2™L鋚ÖÖV¦M›ÆäÉ“qwú÷ï¿âì³Ï¾sŸ}öYÜÕ7bfK2™Ì‡rHy~ñ°Ã{…##(‘u÷½‹/¾øÜ!C†ð‹_ü‚ ´©v#‹¿+ 2„7ÞwgÕªU¥qñ¾ä¸œÚl`)°Ñ9çœÃOúSÆŒtn–™•šÆG\´£©©‰Ûo¿ûï¿€#F,¼è¢‹î9rdC7ÌûÖÖÖ'MšÔ—¿;ùS""Ý¡ VOB736Ùd† Æ„ xë­·xýõ×ùç?ÿÉ AƒØn»í¨®®.$ú†®”TžN§KM“\’I–…B¡¤ÔÔÔ¨¡ˆ”tPÙê|w_ЇSÀÝÝÌ.~óä“OÚ¾ûîËÞ{ïÍé§ŸÎ~ûíשÕb±XÚžç‚,]º”«®ºŠùóç°×^{=yÁ<–N§»ã‹™544üõøã/¬y¨He @D¤;´)%K®p‹EÌàÁƒ?~<Ë–-£®®®”$¯€´´´´ 8âνqÞ‡»¯Ö#¤P(”^“hD˜ëí_‚ˆ|8tPÙêÛîþ\ŸM¬w¿ÆÌæ—¹ûž>ú(>ú(;ì°gœq|pùøÕÇ s¹sçÎå7¿ù +V¬ ºººù´ÓN»ç˜cŽ™ß SͧR©É‡zèôn8—¬ç€ˆHwèt7߸RK]]ÝjÍ·âÑxV>Ÿ/åxÄÏãjZÕÕÕ¥• ¸$’ÐK?ˆÈú!ªlõiB^ÇæÑᄇúj^kâî÷÷›Ù§€óÃ_xá;ï¼óØh£8á„øìg?ËÀãñ¥û8÷®µµ•©S§rÇwP,:tè[^xá[o½u¥æ‰kÅÌ–§Óé›9äîÈ!µæ!""kÔ&ðÁøüƒûî»ÆÆÆvWF’7 MƒÁ¸òU\ ܽ´ +8â Zñk" @DÖ#Qe«g€ÛÁÇëÀYÀî½|˜Ùh3û¹™¥×öµîþˆ» |¸ È-]º”_ÿú×tÐA\tÑE<óÌ3«å€444ð«_ýŠÛo¿b±È.»ìò﫯¾úÿº)ø˜[(~©àCº“V@D¤;TÜ‚5jÔ(î½÷^&OžÌŽ;îÈ„ 3f fV±ñV*•*uî­««+ɺöqs­xkV²jVMMV@DÖ3f¶+aÅcÿèP\Ùê wïŽG-pAt«^®^—s¹û À©fö]à+À™­­­Ãîºë.îºë.6Ùd&NœÈˆ#xíµ×¸ï¾ûxûí·Éf³­'œpÂ}'tÒœnxKnfvØa÷£¢ÒÍ€ˆHwXm V\ ëk_û…B… òÈ#0mÚ4FÍ;ìÀ!CÚ,ñV‚¸‚K¼ +¹*’ÍfW;—ßóB"c̬Ÿ»¯êí_†ˆô<3Û ø>paGG+ð[àÒÞ®lefGW[D‡îêyÝýMà3ûpð%`ŸÅ‹§®¿þú6c¸ìüóÏŸ<~üøw»z]3k*‹·~øáÝȈ¬FˆˆtJ[¤JÝχʉ'žH¡P`Ñ¢E<óÌ3ì°Ã 0 ôšt:]zM²Á`\’7„¤R©Ò6¬ææð%g° 4hÛU«V=kfÛõQ}éf¶!!Oâ<ÂJC¸ÐÁüÕ^žËVÀ/ãCoßw÷»ó:Ñß°›€›† ²éðáÃÿcéÒ¥û‹Åz3«Úk¯½f~úÓŸž[__ßÈWUUÝxàv9iéE`µ-UñÏåÝÏÌGA±Xäý÷ß/Ëçód2™Ò*G\j7“ ª’]ÐãZ÷É.èq |€°÷Þ{Y°`Á»föà.`š»¯èÅß‹ˆt3«¾ ü¨?|ÇÝŸíå¹Ô‚ ïÊûÆ«/ßïéU×wÞygð­ät¦M›6(ŸÏ3³¡Åbq¨»3³¡fV³6çþéOZ¿bÅŠŸ=óÌ3 >¤G)‘îP’=8:¬__(XµjUiËV|Ÿ\ÁH–ßmiiÁÌÚ¬€ …Õº ›Yéõfƾð °Ammí)‹/>åÞ{ï-ôë×††iÀî®í"ríT¶šEXñ¸§æsp°Ytènà÷iiiáòË/gÿý÷g«­¶bÀ€|úÓŸNñ‹_Ü¿±±qÿÿûß?ÙqÇß|á…î&üâ>mÕùp‰*[ý Züø½»÷j#<3 \ zø†»ßÝ×ú0ÝÝ›ºržã?¾ XÝJî»ï¾ 7Îd2ƒÍlƒB¡ðâ1ÇcÀ°èö¤™}ÒÝßéÊõEÚ£DDºCÅ2¼•~îè¹8àHæ‚ÄÛ¬â~ñ6¬8·$Bjkkimm-ÍaéÒ¥ÅÅ‹ïé§Ÿ^ 9vìØ#÷ÝwßÚ±cÇ2tèP¶Ùf®¸âŠáUUUg¾ùæ›gÞsÏ=¹l6ûH>Ÿ¿ ¸ÃÝßèöß’ˆtŠ™mü8":´ øoz¹²U4—zÂV«oU@#!(úIwÏÅÂ7(‚¬([Ñè.‡rH!€z%qøT èOXÝ™!‹{b²~S""Ý¡ÃNèñÏí=¿.^‰s<²ÙliÕ£µ5äVÖÔÔ”æóùRôøX€äóùëÝý¿£KÜhf5/¾øâÞÀAõõõŸÙ{ï½Çì¼óÎŒ5ŠrÒI'eÏ<óÌ›šš|òÉ'9f̘WæÏŸÿgÂó‡Ý]ÕEz˜™.¢me«ë‹Ü}i/ÏÅ€S[¿†E‡ïÎq÷=p½zàOÀ^„@`4=€´ã0 _ôs5°)a%dϨ—H·Q""Ý¡ÓÐÛ{ÎÝI§Ó¥UxVUUU©H¡P ¥¥¥„$ËïÆAH¼‹ð-eòZÍ„`âà»f6öî»ï>ÂÌŽÜe—]>5a„ôرc2dãÇçú믓Éd.˜7oÞwß}wƒ™ýø‹»ÿ¥Û{"ë¹ •­œPÙê»}‘[af;ò<>z‰çqo^ïn`CÂûo䃒¾½å À³À&À¿Ìlw_ÔËó‘1 "Ò*nÁêìjH¼R,KG&“)$ÉL&Csss©ünÜ7¤¹¹™šššä:lDèî//?7³þO?ýôÁÀa#GŽœ´ï¾û7n›nº) ଳÎÚà[ßúÖçyä‘Ï›ÙwªË¿1‰›÷CØâ4(:|?p~oW¶Šæ3ˆPeël 4ÿüØÝ»£Äm¥kžü†xÄ@-°UO\¯9lÉ«IY`cà‘(éÕU(ùøR""Ý¡KIè±T*U 8r¹\©ãyœ÷ÑÒÒB*•¢¦¦¦Ô=—Ë•^ÓÔÔD*•Š«quºº»¯þüÅÌÎüãÿ88<›ÍµÏ>ûì¾Ûn»ÙÖ[oͲeË | ‹HD•­Nþ~–PÙê¾>šÏÉ„`c£èðÝÀ×Ü}a]³¸8Šp´yØ®'®ÛŽˆþŽG÷) ßîÖ¬D)àN I&÷ïèö#3üÐCM$4[ <±.ç‘àÃTÙ*šÏ®„íV¢CÏ_w÷ÇzøÒ[ú™d€f HÒ˜¾~ÒDBô"ð8ðEà%w? ç ë‘T_O@D>ÚMBï(ð(ÿÙÝÛ”ß5³Ò6¬ººº6ÇâF…¹\È ¯©©¡¡¡t: @*•ú êw×ÝÿÏÝOv÷ï¸{·œWd}cf»™ÙC„-Vã }+¾ líî×öAYÝÁfvð/Bð±ø°k/¸ûsî~(¡·ÉO y/I›ôô®†¹û6À—_¶lkf›uü2‘u£é•;¡—?î( =îbo©Jv<Íã¼t:Mkkk›.èɽ÷Þ{Ÿ©S§~ÙÌæ477Ïœ4iÒò|ÿ"Ò3üa‹“ñA×ðKݽ×ÿ¿4³ !Çã2` áï×MÀ·Ý}IoÏÇÝ›ÙÛ„ßÍ3Ñý¶@™mÔ[ŸÜ}Zâg7³ ÿ½~ßÓ×—õékÕ ½Rz|_¾ +.µ›ìR((‹¥äô¸ÖªU«H§Ó Òé´¹ûVî¾UUUÕÑS§N}ÓÝçs¦OŸ¾ðÒK/ÕJ†H2³ÁÀw« Õ„¿&äy¼ÚGsÚø¡Ç„ðÝÝûzkåW¢û‹Ý}Š™í@’†}‘{1€LDˆô "Ò ðA`±.Ièî^êí‘ÏçKeuã $ÞrfVÊûhnn.õ ‰ƒ L&Ó&Àp÷áÀpà€ÝvÛ­ñž{îyÙÌæåóùÙG}ôÊù­ˆ¬‡¢äês€ + Ê_§/*[EsNhl¯Â¼GH€¿ª/òNÊæö `{àUà^w‚’¾08x°ç c @D¤;t9 B—ól6‹»·©|­­­mŽäJIÜ=^YCH™íì˜Íf2eÊ›Àœæææ9ÇwÜ"Vß‹-"kmm:PÆ6Î_˜NXñø{Í) |°¬?áoÕo¹û;}1§rîþœ™mlúaÉ1s÷÷€Éf–2³:wo\ã‹Úaf5„÷¢»¿ßm“”4 "ÒŠP9ÐèlþG±X,uî¢ÊV?热M¯—7yyRXïÍéÂv«qÑ¡é„íVš>>Ñ6µ Ý}½Ûõ|Ììs„ß߯ù2ërŽ ðO`gàez±·‰|¸© –ˆ¬ÆÌN4³µù X­úºlÃJ®€TUU•Íͬ”hžËåJAJ>Ÿ§ººš×^{ë®»€þýû¯˜4iÒKkÿÎÁÌú™ÙΙLædw¿têÔ©_¾ûî»÷›ŒMD¿ ¼hfßéë‰T°LÈYW[òA@+ "RÙ1À-f¶ˆÐ ïNà‘:·[†·ÒÏåã×%W3ŠÅbi¤¥¥¥Ô=¹ +>öÄOpóÍ7“ËåÈf³­gœqÆ”úúú.w-v÷fw™J¥¶ª®®>üž{îY’Édæ455Í4iÒ|´UKÖSf¶ !‡â3„œŠFÂ7å—÷Õ6›¨«ú¹ÀE„®ÞyàjBb÷о˜SGÌ, œAøý=ÜÇÓ©äq`%°»™mmËê43Ûøð-àŠ˜Ÿ|„iDD*ù;ÐlJø†în`…™M5³/™Yy}z‡¶+ ¥'Ö¢zœ÷‘Ïç132™L)‰·ie³YZZZJãnºé&®¿þzr¹õõõï]rÉ%7tÐAÝѹx~¡PøÅÓO?ýƒT*uu±XüG*•òB¡°o6›ý >d=dfÃÍìààxBŠk-Ýý»}|Ì"$š÷þìäîç}ƒÈÑÀ(àß•¢/œþ¤ Ò;- ®n t·¿¦Û''yZ‘J²ÑÏ>ø[1Øøfv¹»?:Þ&µKBoqoêêêRƒÁl6K.—#“É´ÉûXºt)¿ýíoY°`ãÆ›}É%—Ü׿ÿ\ß»§ÓéG&Nœ8(}ôÑ ¢Û”©S§ndfºx ‘3ëG( û}B27„ÊVßt÷™}8¯- ß®Z|ÏÝoì«9­…¯E÷Wõé,:6 8Šð·ÿÏkñºÿvvv÷¢™õÄÜä#Lˆˆ´mcAøf³üo„E·{i›”¸NГIèñ-¹å*>gœ ’N§13fϞ͵×^ËÊ•+I§Ó…‰'>|öÙg°\ IDATÏèê{w÷ÖB¡pÛá‡þ|{c;ì°¥ôM]~‘^U‘ú"a»Õ°èð“„ÊVôá¼ê€ó ù&Õ@ø p‘»èËjGÓ„îë·öñt:7(<´³/0³­ •Ð~äî³{bRòѧDD0³aÀg#€O5í m"Ÿu÷äJCº–„wBW@Ê«aÅ+!÷Þ{/“'O¦X,2`À€åçwÞ{ì±ÇÛ]þ%ÀÒB¡pãÑGÝçùH³ð•õg€Ë1ÑṄÊVî«ÊVÑÜŽ"䛌Š=œU’ú¨8›ðeÎuÉ·Ñï},°+áýÕ¯Óû¢‡Š»¿lf¯cÌlÜš 3K¿#TAûioÌQ>š€ˆ¬§Ì¬88˜Ä[® 4ÄZ ìBøv ¸ 8½B­ú€\.·NùÉ•“òÞfF6›eåÊ•\wÝu<óÌ3Œ3æåK/½tÊàÁƒ»£Lî솆†?üñ*Ý+òqffÿMøÿàMŠçuîžïÃy%l·Š«2-$¬x|¶[•D¥iO"l]-Ïø"ít7³?_p÷æžájn&C©dõu`/àSî®æÒ. "ë3Û88”xêqøÿìwxeöÇ?gæÞ›‚ôÞk¡ Ò¤#JWDš€°º«.Šm]Ýu×¶ëow]EWš ÖU± X@i"*Ò,Ф‡¢ô–Ür~¼“NInóyÍ;3ïœ $÷ýÎ{Îùòð±ª&ˆHK ¥0ò,Ƽë¶lŒ²Ö8p€õë×Ó¬Y³ÔyMÃJiµ›"B;vìàùçŸçàÁƒX–êܹó×S§Nýʶí‹z +"!Uý¼oß¾‹q‹Ê].sD¤ &uf¨3tx“J¶´&) Ü‹iéêÃìÄ> <†ÅøE£ªiôRÕŒí·÷`Š¿wažµ%ð f—z+¦ËW¡¡ªäæ<©üxH‘zi^g,YU÷ä¤.Å ã.ª‹‹K!!">LkÝ{€«ÒÚ‹³3~:[éÇ1; ÿPÕi9ÌocÞFVŽŽfìØ±Œ7Ž * …R‹Ç³ûÿ`0HBBy'RS®V­ZÅË/¿Lrr2QQQ'§L™² Gùñáux­oß¾äââr© "51‹Ú[1üÀશ”D'éÌnLgøCàwªús¸âºXD¤e^Ó©D¤6¦ÆªÚ¼@ËùþC€>˜T·,wŠªø\L·^U[åg|.ÅW€¸¸\ˆHY`¦7~5gøÆÛã¿À’lv4R®ÿX¥ªÎŽZïãäe{½^z÷îÍĉiÚ´i¶Â#åë„„„Ô6»ªJ àwÞaáÂ…Ô¨Qc×þð‡kÖ¬yê"¾%)ì=uêÔ¼¡C‡æ©¯½‹Ë¥„óûá>àNL­b:= ªÛÂ[+LG'gh p§ª~¾¨.gzð¾ª^Ÿ‡ë¢0žëUõÊóŸßˆÈRLÄkUõ³lÎ) ËfŠé“ʇ_Uõ‚ˆÓ¥øà¦`¹¸\‚8ÛÜwã1=ñÁäqÿøªÉåT“T5WžªºÁy6¸×ï÷7øè£X¸p!W_}5£G¦C‡™R²‚Á `ê?‚Á ‡fúôélݺÑN:}3mÚ´//6åʉsíÞ½{ß™4iÒŶëuq)–8;¢S€G8—†ù9¦³ÕEw“»Ò¤ñLÀx•þ™ƒjqâv翹öýpv£ïÅ|?þWAå‚Oq¥QÕ£O˜LˆÈsÀqUÍò¸Ë击ââr !"50o˜ÆsîÃ÷˜<î¹…•/í|`Ƽ]m“2^³fMn¼ñF®¿þz¢££ …B„B!’’’ضͼpMHHà…^àØ±cDDDœ7nÜG Èt‹€eY ¯»îº/óa.—b‡ós9“ÒT×Þ<ªªo…-0Rc…©u¨à Ü®ª»ÂX>∫Ý!Q+§ô6é Œ®c^$ýS“›bð|EDZcjý6ªjÜ\Ÿ ìTÕ†ùœK±Ä ..—"RS 9…s-t?žQÕÅa ‘ÀÝ£0 **Š=zpíµ×Ò¦MŽ?ÎÎ;Y¼x1o¿ý6¡PˆÊ•+'>ðÀ4lØð¢]ŒUõXDDļ^½z] —¼""½€¿a šÁ,„ÿÌRÕ`ØD¤ fw6¥¶a=¦ÎcEø¢ÊDä~L[ã×Tõæóœ;cæWãËt ÓÞöá -Ð §g/P¨WQ("Ó1©WD|.ÅW€¸¸cÒ¸?”v†¿Â8/ËÇûTWÕ½9G}L¬ã9+*T AƒìÙ³‡={Lmy›6mÖ>øàƒK#"".zadYÖV˲^íÝ»w~ÔŽ¸¸+D¤ð$ÐÍ: <<îR"R Û(L—¤#˜v¿Ï…[å7ÎÏVÌÎÓÕªº2×–Å—Û0 Cn-˜(ÏÇ<ÌßÕUͲU°‹Knqˆ‹K1Äé#Ÿ’Ã]Þþx(»Á‹¸×}sª®Î‡ù¢ëK–,9æìٳ݂Á`j-Zttô‰>}ú|9vìØ/ö>€†B¡ekÖ¬ùä‘G)ô”—p""±÷ò1‹ûdàEà'W?œ±yß`j;Jaü%^¦ªê¡pÆVP8æ‰TµåùÎÏâz ø h”Çß¡ˆŒæo©jvÅæ..¹Â ..ÅŒ,Ò ÌXDþ <è|ù[U}.‡sëcŒËÚ§TõÑóÍ?hРÊ[·ní]¥|ùò%'Mš´Óçó•Ê`MJð¿¾}ûþps¸¸;D¤æÅÄLKÝ ¦ãÝ£¹m(Q8©`ÏbêVw¨j®‹²‹#"2¸˜¬ªÍs;ÇûÀ@ ™ªæÇKš¼Þ¿2Æ v»ª6(ìû»\Z¸ÄÅ¥˜ "Õ19Ü7aç¿bÄAäp‹È_€‡0­9¯ªÿLs¬¦¸¼ ¦Mfk Æ4+ ˜r1ÝN6nÜ苯äóù*©je˲*Y–U(§ªÖyâ>hÛöÜÞ½{¼Ðû»¸7D¤0 Ór»„3¼³«ð}Øs‘À?€þÎP"p?0/¿_œED¤&}ižªž¼€ë#͘vêóÐÉ0_‘æÀO—ZŠœKáã —"Nšt…?c:¢hº‚SløÀ]ñq§ªþÛ9 ,ÇìrœÄ˜z3LªDlK—.õ$%%U*…B¡Ê@ ²eY•D¤<æmïz™ß§OŸ¤ü¾·‹KQÄq ¿³˜/ã ¯Äxy„½ˆÛñ¯˜†‰/crø¦˜ú¢Lœt¸Í¹é^%"cþþ¾RÕ#NêU3LÝN_àª:¼@>Œ¥€jªšÎ8\Š7®qq)ˆH`çÒVbÒò䢛‡û ¦Õãï0âã·ªú|†sb0iÑd&õ•ªvÊb¼ ‘—^zÉãz{¸\.8/&Æb:üü9Ü-u!õwÉHLËßêÎðBànUݶÀ ç¥Íà8Ðò|¢KD¾Ã¤²‚1õqî%ϧÀpU=V@ážÇ ò`ªvW.ÅW€¸¸Aœ·†Á˜ Z˜t…û€W *]ÁY0<‹y›Ât:™“͹WavB"2:…Y`ÌÈá>>`6ð÷‚R..—*i¼<žê;Ã;œ¯g†Ã#"#"ÒS§vµ3´“ƹ |Q… ̾PÕž¹8¿ Ðh…i¿v‹UuU†š+áû P¨¤ª‡Ã’K1Å ..E é„Ùõˆq†ÞÂ.Ø/zG|<‡Iõ ·ªês8߇É/ïœáP³5Ÿmý…ˆN©‘‘o1)«7ªê;áŒ7¿‘€À°”Ý6)iõ|¥eYM€äP(©Q¼$;›¹\®qq)"8»Ä,Î-Ì}Šª~PÀ÷µ1Wc1bœªÎËáühà 7p†SZéæ˜~%"]/0Ïw½ª¾Ñàâr‰#"í1~]¡#˜Ô¦gUõLØsHãbþw ¢3ü!&]tgØ+@DäNÇ󷫯¾Ú[­Z5’’’HHHÄÇÇ äª~‰ÙÁ®Á‚@DnǼ°z Xîñx®…B-˲ªW¯¨Zµjd Ð;w&ýú믄B¡Áªúq˜Ãv)b¸ÄÅ¥ "¹@LíÅKÀ´‚.ÒtÄÇl`4F|ŒQÕWs8¿ &»¦ýFàZŒ'‰we×ýJD*0]\¦«êíùø(..—"Ò³£0Ô:Imz*\]2""m11µs†â1+òÕ¨(!"‘¶m'0 L»víÒ;sæ «W¯fùòåIgÏžµC¡GUÿ©ªw‡)Ü|égéÜäñxÆÊ–-{¶qãÆ±±±R·n]<žT['T•O?ý”•+Wîñûý5øK‘Ä ..aÄ1üƒóÇÆärOTÕÅ…tïWa“²›TõÝί‡)‚lúªêZ'}ëm`Ùt¿rÎyÓÃ~#ÐVUOçó#¹¸\8ž:F`v ý˜´Ì?«jb8cKADªbvaR\ÌbÄÒóªÈáÒbˆLŒŒŒ|îÁôy½›B¡ ,^¼˜}ûö©mÛŸƒÁÇòâ€^p^R ðx<·…B¡î"b×­[7ؤI“ˆFQ¾|ù¯?~ü8O<ñ@sUu}™\Rñœÿ—‚@Dê`@Gghð» é÷öoƒ1¦}Cs*‘6ÀG@%`;pªnPU‘‘À=9äúÞŽIÀHW|¸¸dFDjcº[y1»Šo`ZÖn gl)dÓüÌÏÿ%ï½#"âõz§uèÐ![ñ`Y7¦qãÆìرCV¬XÑsÓ¦M½}>ß:¿ßÿðNQ÷?‘f^¯wªVoÕª•gÕ«W¯×›ëµãW\AÅŠÏ:t¨à —TÜ—0 "7bÒ¬ÊbÚ3NQÕ× éÞ^àMŒ+ïY Çü\é ÌÇ,6¾úåe¡!"q˜\èõï‹ßÅå’CD*“Hgø#ŒðX¶À2àü.xhâ }‡iÕýuø¢*\DäZ˲>ºÿþûíR¥JåéÚ_ý••+W†V¯^ÖñEuW@Dâ,Ëú®eË–ÞÚæ' kUrrrÇóŸír¹££°‹‹Kþ""Ñ"ò2¦x¯,¦@±y˜ÄÇ`ÐyÄÇ(àcŒøøè™GñÙå)|‚)\tqqÁ´\‘¿Û0ÆŸ‘ÀR “ªö/*âCDê‹Èÿ0ïšûÛ€v—“øðx<÷µlÙ’Œâãøñãœ:u*ÇkË—/ÏÀ­{ï½×Ó¸qã––e}-"­ 2Þ Åëõ¾Ø´iS{èС%>bbbW‰Hé| ÏåÀMÁrq)$D¤f'!SðýwÌÎBéŒâäòÎň”´«l EEäNŒ#º…ã. Ö¿-€ƒÎõî–«ËeO÷òû0/"¾þR”¼2Ò¸˜ß‡G—‹yZœÝÜnW_}uªkrr2o¼ñ›6mBDhР7ÜpeË–Ívž+®¸‚#FxÞ}÷]Y·nÝ"R;¥moQ! ^uÕUWeŸc–jÕª…×ë %''÷ÂtPtqqw@\\ ŠIWˆv]UõþB¯7aÄǪúQ6犈<‰qD·0)£ó«ˆôÁÔ~(F|쿈Gpq)öˆˆOD&[0muËbš2 Ú1ñ1Û#ññÐJUï¼Å€mÛSëÖ­ë¯ZµjêØ¢E‹8tè#FŒ ÿþ$&&òÊ+¯p¾w-"B¿~ýl'ýîš=Ïx<žûöíËòØÎ;ùè£x÷ÝwùùçŸÏ;—eY4jÔH,Ëê—ßqº_\ââR€ˆˆÇYÌ¿ ”–a:@Z'G|ÌÈdŒøø0»x1ž ÷a„ßœGžÜ•Õ9˜î8Ϩê‹x—bˆxEd4¦E퀪˜Žw·aR0ß**»ƒ"+"Ÿµ=˜öÜ=Uõ§ðF>D¤¢ªŽêÒ¥‹/eìøñã¬ZµŠ‘#GÒ¼ys:vìȰaÃØ·o'Ož¿—ˆÏçÃëõ†€"—š”œœüîÆ3™Ä.]º”_|‘uëÖ±eËf͚Ŗ-[Î;_ll¬GD:]\Ü,—‚BD*¯=1‹ùg©…Ù¢2øCri ýÀxU}åî)ñQX Þµk×½gÏž%2ÒôEƒ|ñÅtêÔ‰¾}ûbY .dÑ¢E4lØ0ÇÉ5jD0,4ÇøA¹\æ¸; ..€ˆtÖcÄÇ1L§©;à >ærN|ä´óQø #>NaŠÓó,>îú:óܬªÉ8‹K±EDzk€ÿaÄÇ/Àý@#U}©¨ˆ±ÒìÎü#>>âTõ1W|˜f¶mßÙµk׈”ø~¿Ÿo¿ý–_ý•ï¾ûŽ@ÀüuþøãÔ¯_ŸÏ—Ó”,[¶, ø¯ªþRñ_ +Eä̶mÛR’’’ðûýtìØË2ËÇnݺ±wï^~ùÅ<‚ª²oß>öìÙ“n²R¥JQ¹r峘ÏwÄÅ%¿‘wñḢú`UÝTÈ1¤5LrbÈ2 Ê1ü³H:„i³»úïÛóvŒrü…ÌãâR\‘ë0m¡ÃÀ߀«jÎm’ G$ýhê ýÜ¥ª_„/ª"ÉͧT«V­R¼^/£FâË/¿dþüù|úé§´k׎o¾ù†¡C‡æ0•aß¾}ìܹӇùþ9T5àñx>ïgDEEQ²dIŽ;F¹råH«]»6K—.EDHHHàĉ4iÒ„[n¹%Ýœqqq‘‡¾x¢ÐÈ¥Èá —|ÂI·x¸×ú&©PÎÎÇËœs8šƒøh ,ªcrÒ¯SÕ„ ¼oiL­‹xKUg]È<..Źx èæ Â´~RU†+®¬‘Àã@ÊJù0F4]ò.æ‚×ë½·cÇŽžŒ»uëÖ¥nݺ)þ¬X±‚ääd~üñGÊ”)CåÊ•³sÅŠdzÔï÷êË©¼ ?Ø´iÓµªšºóS¯^=¶lÙBéÒ¥Ù´iñññìÚµ‹Ÿþ™råÊѬY37nLݺu3ÍרQ#–,Yr¥ˆ”SÕÃ…ý<.E W€¸¸äNýÄ+À L½ÇÓÀƒy-Þ·8Ÿ 0`Àbbb(S¦Lê… 99™š5k¦ŽÕ¬YŸÏHJJê…yAçrã —‹DDj`:Æ´Â8‹O¼ˆú‰‹‰#¥æc8çj>²1yÞ)îæ×©ê¯qï)ÀHÌ‚æfU=v¡s¹¸D¤;Fxtv†Î/b„ǰ–Ncˆ[€§€*Îðç˜t«ÃX1ÀãñLkÖ¬Y¨téÒç­™-Q¢]ºt¡sçÎÄÇdztéRvïÞI€¬Zµ Û¶·…B¡¢X|žŠª&ú|¾„„„„ØÒ¨Q#:uêDLL uêÔÁãɼŒüî»ïøàƒèÒ¥K:bY111ÖO?ýÔW€\ö¸ÄÅå"pÒ.æ½Àõªú]â°0u'¹)8ï¼DcÚPÕqïfÀ3ΗÓ.7gd—Ë éŠ]¡³˜ÖºO©jbØË¹ ãéÓÁÚ<¤ªo…/ªâˆÄˆH´Æƒ~¿Ÿ@ @dd$Ùu”7nLãÆ …Òo‚ûý~V­Z•ì÷ûŸ(*­—sÂï÷Ï߸qãï»ví ¦˜¼_¿¬í<ü~? ,`Íš5tîÜ™îÝ»g:'66ÖóÓO?õ)ÏïRp¸ÄÅå‘Á˜BïHLÇ«Aªº+ qð<0ã°~Kv†f"2S§ |„©9s÷.‰y“U™ï_:—‹KQFD:ý¡dL­ÕŸUuo¸âÊ©Ž)ö…ñã9‰yQð„ªfòwpÉŒeY÷ÔªUË_­ZµÔâwß}—uëÖÆÇ#"""õOdddº¯›5kF½zõÒ͹fÍÀiL‹öâÀÇ»wï¾?m;Þ¬8p௽ö¤gÏžôêÕ+Ëó5jD(*´Æt‰s¹Lqˆ‹Ë "wÇ´²~ã~Á ù‹ˆC€“9'>²ÜÚ‘›1 &ðànž/±œ3+sßh¹\RˆHàA2 ÇTuOv×… ‰Â´Óýf—3„© »·¨¥†eD¤œeY·¤58zô(%K–dðàÁضÍÙ³g9sæ ÇŽcéÒ¥4oÞœäädŽ=J§NÒÍ©ª|ùå—IªúÏbÔÞx•eY§·nÝÝ´iÓ,OX³f ï¿ÿ>õë×§AƒìÝ›½/Y²$UªTIJLLìƒ+@.k\—< †§€ÿÃüü< ‡øpx¸³È«ªY¾U‘ßb =À `ÔÅŠÉ+7]L ‰‹KQCDÚ‹Èà+Œøðc~†«êmEM|8¿›FbZ?ɹË+Uu´+>òÌo®¸â bccÓ Ž;–J•*ñÉ'ŸPµjUZ´hAûöí‰ŠŠ¢J•*ÜtÓMŒ5ŠI“&Q¡B…t×&$$pøða; ½X˜r1¨jø4>>>˜ñ˜ßïgþüùÌŸ?Ÿ.]º0zôhZµjŶmÛðû³ÿxiÒ¤I¤×뽡 ãv)ú¸ÄÅ%—ˆHð0 ÓéêO޹`¡vºJÏ_ÓÄò›ì ßEä>ŒPJIÕºÍùP¹˜{Çav^VÕ•3Ÿ‹KQADÚ9Âc™…ÇhUÝÖ³À©óXI ­‰³# tWÕõጭ8"">Û¶ïJk<˜‚ÏçcìØ±”*UŠ_|‘#GŽ …Xµj;wζ.`ùòåÉ–eÍ-nb0 .Ø´iS í÷¡C‡xî¹çؾ};S¦L¡W¯^ˆÕ«W'""‚Ÿþ9Ûùbbb-\—ËW€¸¸ä) | Ü„IÁ¥ª†1žG1i! Ü®ªÿÉ✔ݚ'¡GUõŽ‹M“‘HÌB' ó=yúbæsq) ˆH'Y|Í9á1ã\>ZU·å8A‘º"ò&&æNÀ Ìï…†ª:×M‰¼`FÚ¶}EëÖ­³<èóù=z4¥K—fÆŒ¬\¹’@ @óæÍ³pÿþýüüóÏÞ`0Xëä>>}ú´/1ñ\…={öpðàAÊ–-Ë·ß~˧Ÿ~ÊŠ+X³f eË–eÆ $&&rôèÑT—øjÔ¨ADDDè]ÈÏáR„pk@\\΃ˆT>‣Wñ%aŒç÷À#Η÷©ê Yœ#‡Ý;1"å^U}&ãyÈs@ à&í+,;@..ùÓÉî>ÎÕxø15RVÕ­a ,ß¡{0qGr®ÎcÚEzù¸^¯wZVƃi‰ˆˆ`ܸqÌ™3‡… Ò½{÷,[Ò¦°bÅŠ ÇãYæ÷û¿/ˆ˜ U=èóù~JHHhZ­Z5bccéÓ§'NœàÔ©SìÛ·“'OròäINŸ>ÍîÝ»Y»v-íÚµãúë¯OODˆµøá‡Ÿb|—|Æ ..9 "õ0Náõ0i }Uõ‡0Æs'çZÞ>¨ªËâóæv,¦0}ŠªÎȧûnÅ,xFe\ì8§Ðã1²“C¿Ö*.E é…qÿNiO›Œé÷˜ªn [`9à´Û…ÙuL±Ùþ˜ªªÂØ%„ˆô´,+¦}ûöÙçR9ø|>ÆÏË/¿ÌêÕ«iÞ¼yªa_ZNž<Ɇ ƒEÝx0[ü~ÿ»›6mjн{÷H8çy’III©â$«¸˜˜û‡~è'"–ûÙpyâ —l‘ÆñQø¸&œi"2³«ðGU}"‹s|˜:•!˜âð[Uun>Ý?#lÀ,Òg8^óæ¸G—w–çG..Š#ûmá$à¿Ñ®V)8‚é %Ï'Såúyä#gZ\\\:ãÁƒ²hÑ"¶lÙBrr2åË—'..ŽN:QªT)ÆŒÃË/¿ÌŒ3˜–Å9QÀ»˜¼Ú$`„ª¾›O÷/‰i7\ X<–S/‹ IDATá¸øhé›IѪ\ Ì8\\.gWp8¦>"Î>i#ýE¹(ØþC¡Ã˜¨jrØ»‘FÀ5:uJÝýHLLä?ÿù5kÖ¤[·nX–ÅÏ?ÿÌÊ•+Yµjƒ ¢uëÖŒ;–×^{’%K¦›3ñà“ż&ç[˲NnݺµTvµ.~¿Ÿõë׳qãF:D(¢ZµjtêÔ)“|TTÕªUKÞ»wo_\rYâ —K'Ma²Çã¹FUÁ`ðCà¹m•ë8€I!Z ô g‹YÊ9ññŒª>”Å9W 1…¨'ù\§ò<ГR5*‹.ZwbŒ¥RÕÇÓŒoqþ¸¸:"âŤ,=4t†bºÂýKU‡+¶óáì(þ˜€ù¬NÂtžû«ª gl—*–eM­Q£FrÍš5#RÆæÏŸÏUW]Eß¾}SÏëÒ¥ Gåƒ>àí·ßÆçóÑ´iSÆŒ“© ÖÚµkñûýg0;ÓÅU z<ž…ñññ76oÞÜÎx|ÇŽ¼þúë?~œÊ•+S«V-"##Ù»w/3fÌ`àÀ´oß>Ý5Mš4‰8xðà À£…ô.EW€¸\RˆˆeÛö<ÇscÛ¶m}@@ׯ_?Ðï÷?%"׫ê×ç¹>­Sø"àU=U±gÏ5˜ 6ÆüìÞ,ιÓª=p#˜¾ÉǦ`Zz€aÙìMŽs.EÌÅ%l8;r7aR­8ÿ`„ô? cïìHNðz½÷ê¶m/ ©jŽæk"R¸ S`^Ú~Óp¢Èµ¾TpŒÇtíÚ5U|ìÛ·ƒ2qâÄLç—)S†[n¹…yóæñᇗI|¨*+V¬H ƒÿ £WT¾ ?Ü´iÓ ªj§}Ö_~ù…9sæP©R%n¾ùfjÕª•îºü‘7ß|“FQ®\¹ÔñF±hÑ¢f"RIUÝ]òË · ¯Ë%ƒ#>æx½Þ¡“'Oöõë×AƒÉC=ä»êª«*ˆÈ ¹)‡ëoÄ|ÐGbv@†Y|tĤTEï2ná‹HiΉ£@(©ïóùVx<ž“{mÛ~FDj§9Þ–s¢â>U]‘Å51Eúë"2MDæ‰Ètꤿ¸¸8"RÒiÔ°S×Ñ“þ÷' ¾ª>ZÐâCDJ‰Èý¶múÛ5×\Ss„ V³fÍzY–õ•ˆôÍæ:ËÙíÜ<Žk€®ª:ÔÎäèèètƃ‰‰‰”/_žìºa‰䨱c<˜yý¼yóf>lÅÆxð<|röìYoF§ó/¾ø‚ *0a„Lâ iÓ¦ÄÄĤvÅJ¡zõêDEE%ã¶ã½,qw@\. DD,ËzÉãñÜ4iÒ$oÚN$‡Ú•*Uâƒ>xUDlU}5ÃõÃ1m,=˜‡qkÖw1¤©A) ,ÀÔs3œ“">Ú¿½òb:&" lÛþª^½ze;vìè9~üxÉo¾ùæö}ûöM‘›1.ÊobÐd¿»Qßùoø¨„YÖ¦ËD¤¯ªžÎml..yAD*·;R*€wbj%f«êÙBˆ¡ð;Û¶§FEEy{ôèѦM›ÔÖ¬õêÕ³+T¨`}ñÅo‰H#UÝ›æÚþ¿ž”ú”Ÿ‡€7ŠyÝ@±@D¼ç®®]»FXÖ¹÷²‘‘‘>|˜ääälEHéÒ¥±,‹P(s#'Çxðõ@ pI´FVÕ_|>ß÷ -jÔ¨‘:¾cÇ®»î:"""²½¶V­Zìܹ3ݘӎ׳aƘÏ_—ËwÄ¥Øãˆégô„ |U«VÍò¼öíÛ3xð`KDþ+"cÓ\ŸV|ÌÆx[„S|4>ÄÔ ,Á¤=ù3œ“V|®Ë£ø¨gÛö—111eo¹åO£FhÓ¦ ¿ùÍo"®½öÚ"òÆY¹.°ÃB(ÚùoŒð¨¦ª±˜…à;˜XÎml..¹EDêˆÈ¿€˜<òŠ˜Åû]@ŒªN/hñ!"•Eäo–eí)[¶ìý7ÜpCô}÷ÝѾ}ûL¾Ý»w—š5kz<ÏtçÚ¶"òæ%C¦Àü~ ‰ª¾îŠBã&˲ʴiÓ&Ý`ýúæÝÊüùó³l% °k×.¼^o¦ÎW`ûöíÞ`0xI¥¥úýþw7nܘég*222ÇëŽ;FZq—BLLŒ ôqwÊ/?\âR¬qÄÇ¿mÛ¾u„ Þ´oe²¢M›6 <Ø‘Ù"2ÅIÉJ³€‰áìI."µ0µ'•1Ae\@e!>®QÕïòrÛ¶—׫W¯Üˆ#<¶m§=F—.]dĈ–ˆÄaLÙ†©ê±¦LJóÿ“Tõ'}mp ç4pq¹hD¤…ˆÌÅ48øf§p=¦V©‘ªþKU“rš#b¨eÛö¿-ËÚU±bÅß2¤Ä=÷Üqå•W’ög*Ã5 8Ð ˆÈà ;ƃäYLšØS…±cãr¯×{Oûöí3FFFÒ¿6lØÀœ9søå—_Ò?sæ |ðíÚµË$6W¬Xôz½Ë/A–#Nž<™:P³fM¶m˾CýþýûY³f 4Èt¬aÆ„B¡’ÀU¬KÑÅMÁr)ÖX–õ¤mÛ“&Nœè­Y³f®®iÓ¦ ^¯WÞ|óÍç·ZÌ&‡Y|TÃìxÔ~ĘžÈpNVâ#Ç¢Ö ××´m{eݺu+=Ú›so³fÍ^ýuÐX—ô)ÉÏGT5>íU=,"›0½Þ+bZóº¸\i\Ëûa~nVO©ê‚BŠ¡®eYS-ËšT±bÅPÏž=}M›6ÍT€œU«V¥~ýú²}ûöþ!“·ó6ÆÁ|GAÆí’5"ÒMDšvèÐ!Ë¿À6mÚ`Y ,àÿþïÿ¨^½:U«V% ’@ùòåéÕ«WºkNž<Éúõë ƒOÊC.ßÙ¶}lëÖ­eZ¶l ˜ì‚Ù³gS¿~}5j”zbrr2ëÖ­ã“O>¡\¹r\yå•™&+Q¢5jÔðïÞ½»°ª°Â%üˆ»ÃëR\±mû ˲î?~¼'cñÜðý÷ßóÆo ªËnáLwprØ—M€m@gUMÌpNià3Ì›¢C˜šïóp¶mU§N*cÇŽÍV|¤%>>žyóæGƒÁà_²™78œVÕ²Y_ƒiÑ[Ùítâ’Wœ³~¤7 aÚNÿYUWRq¶m? …†×¨Q#н{w_ãÆ/h®]»vñâ‹/¢ª×«êûùªKðx< ãââ®1bDê/Äõë×ãóùhÒ¤Iêy§OŸfÍš5$$$päÈ¢££‰‹‹£cÇŽ™v?/^ÌòåËwøýþú—¢Ë·mÛ¯6oÞ|ØðáÃSüóÏ?çóÏ?§R¥JT¬X‘'N°ÿ~’’’hאַ Ëä‘’Â’%KX²dÉOÉÉÉM í!\ÂŽ»âR,±mû¯"rϸqã2‰`0ÈöíÛINN¦AƒÙÆ5oÞ<å-ÿÕªú[L D¡#"¥0çM€Ý@Ï,ÄGYŒøhƒ=Uõ‡<Ü£²mÛKk×®]y̘1¹±±±Œ=Úž7oÞ£¶m[Á`0S-‡ªž‘Å@_‰SÕŸÒÜ·‹Ùù8”Ûx]\D$¸¸HéÌv˜‰1áÛUHq´ðz½÷‹È°jÕª®½öZ«~ýúYW$cÞúnß¾¯×Kݺu³Ì{¯U«µk×NÞ½{÷`À aBD×]}õÕ©»{öìaþüù 2$ݹQQQtîÜ™Î;ç8g ૯¾Jöûý_Šâ  }c(Jý÷ݳgOêׯÏêÕ«ùå—_ðù|´mÛ–fÍšeÙ+-±±±|öÙgMD¤jÆÏ>—KW€¸;lÛþ‹eYÓ²Úù8zô(¯¼ò )mË–-˘1c¨\¹r–s5kÖ Àzýõ×ÿ!"ÇUõå‚>=Ž_Á|Œ°8ˆI©Ú™áœ2—ñ •lÛþ²zõê5ÇŒãóz½yŠ1&&†Ñ£GÛsçÎý£ˆXªúh§=‰IÕš!"ƒUu¿#¬fQÀÓnA­Kn‘JÀoß)¦0/^PÕ#…G'ÇóG¹¦^½zž={Z5kÖÌVx=z”eË–±fÍD„äädjÔ¨Á¤I“Èêg®W¯^¾Y³fÝ,"¸éWáÁ²¬»«W¯žÎxpÁ‚têÔ‰-Z¤žwæÌ¾úê+NžuêÔµ¿+—Ë·(Ô¥X!"ˆÈ}cÇŽÍ$>>Ì‹/¾H•*UøãÿÈï~÷;,Ëâµ×^˶ƒ 2dÈ˲¬—D¤uA?C NjÉ\ pSó‘áœ2˜š”´«¼ŠŠçËjÕªÕºõÖ[}‹,Y¸p!Ÿ~ú)GfoШQ#ÆŒcÛ¶ýÛ¶ŸÊxÜñ™êĹGD¶cZÂtÂz<ã5..i‘XyÓ>÷ñ±¸ ¨£ª†ø‘«}>ßg"²¢~ýú=î¸ã;vlŽ5fË–-ãïÿ;'Nœ`âĉüéOb„ $&&²téÒ,¯©_¿>Õ«WX–u_=ŠK8»ÊãÒ8p€ÄÄDºwïžzÞ‰'xöÙgY²d ?þø#sæÌá£>ÊvÞ/¿ü2Åxð’m;®ªG<Ïú„„„óž»{÷n^xá6nÜÈÙ³gùè£X¾|yºsœv¼^Û¶TÌ.EW€¸œÅïÃcÆŒñ¤´GLáÈ‘#̘1ƒØØX† B‰%¨Zµ*ýúõãàÁƒüúë¯9Î}å•WÒ¼ysËãñdZ\ ÏÃ1p†f,&wÄGJÍÇA.L|¬¬V­Zí &d«W¯fúôélÛ¶¯¿þšýë_ìÛ—•ɹ¡aÆŒ3ƑߋÈäŒÇUõ@KŒØXüS§rcÆ6Â..)ˆÈÕNG¨± ¬Åt´j¬ª/B+]‘^¯weYËâââzÜ}÷Ý2vìXOµjÕ²¼fÿþý¼ñÆìÞ½›J•* ¹úê«Sßׯ_ŸÆ³iÓ¦lïÛ£GUà4 p)\n+Y²¤¤­ãÙ³g+VLõü…B¼úªÙȘ:u*=ô½zõbåÊ•œ>Y_lÞ¼™C‡ÙÀ …òa$«v¼@€-[¶¤;ïÛo¿¥dÉ’L:•I“&1jÔ(>ÿüs’’Ò7©‹µ€Þ"âfæ\&¸Ä¥X`ÛöýÀ££G¶6l˜éø¯¿þÊÉ“'9~ü8Áà9 @ €×ë¥téÒç½GçÎí@ ÐÓI)PDä!ŒWAã±ñi†ãå€Ï1E·€yå=Ïò*UªÔ?~|&ñ±jÕ*>úè#ÆŽËoû[¦NJ©R¥xçwrœ·aÆÜxãyNDZe<®ª?ªêUõVUªªŸç6f—Ë1ŽåSœi+€þ€ïaœ¿¯TÕ¹íÇ#Æ}|€×ëýÞ²¬w[µjÕ|Ú´iÖðáÃ팾)ìÞ½›¹sçòÜsÏaYQQQÄÆÆRµjU–,Y’î\¿ßŸ£9[ãÆ©\¹r⬩ùú`.9âÞÑx0**ŠƒràÀT•?ü={öpóÍ7S¶¬é¯qÕUW¡ª$''gšwÅŠÉ–e½~™Ô1,Ü¿ºv¼;vìàµ×^KwÒ‰'¨]»vêÏAll,*Tà§Ÿ~Jw^Æ QÕ( }GîR$pˆK‘Ƕí{€¿ÜrË-vÆÜÛcÇŽñúë¯S³fMFÍÖ­[yå•W;vŒ… Ò£G,s°3â,8„sNÊ‚ˆŒs¾œªªof8^ã<Þ³óÑ+maw.æ/çñx–UªT©î„ |@«W¯fÁ‚Œ92Õh+::šŽ;ràÀ,}ÓÒ²eKš4i¢¶m?˜Û˜\\À´š‘G1iVÓ1 N/qªzƒÓ•® ãðŠÈ8¯×»ÝëõÎoß¾}Ü<`<ØÊîeÅÏ?ÿÌìÙ³™>}:¶ms÷Ýw3lØ0Ê—/ˆÐ­[76oÞÌÞ½{SSM¶nÝJïÞ½sŒ¥GÀoDäŠxT—¬""e3ÆÄÄP½zuž}öYžxâ ¾þúkn¸áÒúK:tˆèèèL/µ8ÀÖ­[}Á`ð™By‚ð³Î¶íÛ7oNÈÊ-Þ²,@º±ªU«’˜˜^£EDDP³fM?¦–Ðå2ÀÝêr)ÒØ¶}7ðä¨Q£ìØØØtÇŽ?ÎŒ3¨^½:^¯7%Eˆÿþ÷¿Ì;—#GŽP·n]ºvíš«{%$$ "AU-0¯ €1<à1Uýg†ã%0.è05ÝUucæ/ãñx–V¬X±áĉ3‰`0H¥J•ðù|,]º”:uê¤~h$&&R«V­,»öd¤mÛ¶žM›6¹ùº.¹BD®îFpîsgÆç?ªš}RþÆánòz½ªtìØÑÛ¥K¢¢¢²½fóæÍ,Y²„½{÷Ò¶m[öïßOdd$åË—Ow^Ó¦M©X±"o¾ù&ǧJ•*ÜqÇT©R%ǘââ∈ˆ°Îœ93cŠêRÀX–u]³fÍ쌿-Ëbâĉ¬]»–C‡ѤI“LEÕK—.Mí ˜–/¿ü2èñxVùýþKÍx0KTU=ÏG #[·ní¨\¹2III;v,U EDDpêÔ©t×FFFræÌ™Ls6nÜ8bß¾}ƒ‡ þ \»âRd‘;Tõï#GŽ´3öÛ?qâ3gΤjÕª >*"_ß·`þí¯†1Žëw‹‰‘©¶mï+Q¢ÄŒž={Ö|衇¼×]w]–âCUùé§Ÿxî¹çxíµ×¨]»6Ó¦McÀ€tîÜ™uëÖejÚ`Y]»våСCôéӇɓ'ŸW|¤\פImÛ}óí]r$ íÜ¿æ*À¶mÚ¶mKß¾}3‰+V°gÏzôè‘nüÔ©S¬[·Ž@ P˜5„a' ~¯)»æ4hЀ•+W¦žsäÈ‘LiˆgϞͲ3eLL ~¿?FDªlä.EW€¸IDäVù×ðáí¸¸¸tÇNž<ÉÌ™39sæ C‡Íôƾ^½zŒ7¿ßÏܹs³ÌÕMËŽ;˜;wn@Uÿ ÿžïƒYbŒÓ¢€w1-FÓOéˆÕ8 ôË£ÃùçóråÊ5™8q¢¯D‰鎯[·Ž÷Þ{^½zaYVª9xð Ï?ÿ<ï½÷7ß|s¶íŠÓ¢ª,[¶,èõzPÕÀy/p "RWDôù|[€ïkÔ¨ñûÞ½{ÇvìØ±•ÇãùŸeYâÒ,"•Eä˜4«ÿ€3˜Ýަªzµª¾UÐõN,¥DäNÛ¶w–(Qâñk®¹¦ü<àëÚµk–µªÊ¦M›xî¹çxë­·hРÓ¦Mãºë®#::€víÚÉŠ+2]ß²eKÊ–-ËŽ;òg™2e,˲ÎÿÃç’_ÌØ¿¿µ|ùò\·ÿùçŸY´h7ÝtS&C½¯¿þ˲vc~Ç_N,òûýöîÝ»SzöìÉ×_ͬY³xá…عsgº–Æ7Þxc–~*)íx\r¸o/]Š"2^D^6l˜•ñשS§˜9s&%J”àðáüñÆŒ92“m:u?~Ý»-p;æßqʽöÏ3T5çVtùˆˆTî¶mûÎèèh»gÏž­[·Æ¶í,σ¬[·Ž¥K—ò믿RªT)xà,EŠÏç£cÇŽ,]º”nݺQªT©Ôc¶mÓ¥K,X@¯^½2¥ieÇñãǃ¡PÈ5ê,$Tuˆ þä“OÞ;xð ôéÓÇÎÎ¥;…ºuëòðÃgª' ¬\¹2Ùï÷?}©f‡ªõù|ß%$$\U»¶ñ ­]»6·Þz+_}õ%K–¤[·ndÌ`ÈÇØP9÷ûÃåF\o0—¢„ˆŒ‘YC‡µZµJßd)E|”.]šQ£F±}ûv^yåêիǨQ£2‰€]»v1gÎú÷ïÏ•W^™îXŠøƒÏƒÁ» èyJË1íi®Î˜r""OÓ€ psÆ¢ôóÌåñx>+UªTÛ)S¦øÒ.†¾ÿþ{Þ|óM*W®ÌäÉ“³a‰‰‰Ìš5‹2eÊ0~üølóáU•÷Þ{/´fÍš3Á`°k^vh\ ) òx<#ƒÁ`¯’%Kš7oqå•W’] Y€Ï>ûŒ/¿ür»ßïox¡ '§aÂHLûÜ´?`«€ó ³³ˆT·,ë^`rÙ²eéÙ³gD‹-r¬k:rä/½ôªJ—.]([¶,sçÎeüøñdÕqŒ1ÝSO=E»víèÓ'}Íl àé§Ÿ&66–ÁƒŸ7æ-[¶0wî\ ¡ª9·¡sÉWDä*¯×;KUcÛ¶mkuêÔÉÊ­hLaÍš5¼ûî»'‚Á`•KÙû#;DäþÊ•+?r×]wEžÿìœY´hË–-; ë–á¨KøpˆK‘AD†‹Èk7ÜpƒÕ¶mÛtÇNŸ>ÍÌ™3‰ŽŽfôèÑ©bcëÖ­Ì;—ºuë2jÔ¨,»]?~œ+®Hß`f×®]Ìœ93 §ƒÁ; èy<Àà: è…Ëù0±˜¤ª3ó0 Çói©R¥Úe%>~üñGÞ|óMºtéÂÊ•+©V­Z¶;Aû÷ïOw·Þzk&¢ª¼ÿþû¡ï¾ûîL0즪ßå6N—üGD"¾gL(ê¡-[¶ô¶lÙRjÖ¬™«º§Ó§Oóøã‚Áà@Uý8÷o LF)í€ÎbR®žWÕoóöDmÛVÕ*W®ìÙ³gD\\\Žß‡µkײk×. Ä÷ßOÓ¦MSwH¦OŸŽÇãaÒ¤IÙ^ÿé§Ÿ²jÕ*¦M›–éçeݺuضMóæÍ³¼VUIHHàóÏ?OÚ»w¯GDž …B÷«û\興 Üàñxî ƒWÆÄÄø»téâËht›ªÊ?ÿùϤƒþŸª^–]E¤9°áÁ$ãgPnILLdñâÅøøx(¬ªŸäo”.EW€¸ œbÕ× d·k×.ݱ3gÎ0sæL¢¢¢=zt&‘±mÛ6æÎK­Zµ²<ž‘}ûöñŸÿüÇ^ ƒ¿Ë÷‡q‘ç1µ§1>ßd8þ[àYçË»Tõ_y˜;Âãñ|ÝyÊ”)ÖÆyýõ×2d-[¶LÝ ª\¹2ãÆË2µäÀ¼þúëŒ1"]-ˆª²`Á‚à7ß|“ …º©êêÜÆé’8uBmÛ¾ mYVd\\œ4oÞÜÓ¨Q£lÓ‹râÕW_ lÚ´é­@ 02÷“€ž˜Nn`ÜÊg³ ªC.b»Áãñ¼9räHolll®Øš5kxçw¸óÎ;3Õ>mܸ‘yóæqÛm·e*DNáÔ©S<ýôÓtîÜ™^½zå*ΔâöÅ‹'û,W\qãÆËö¾~ø!k×®åþûïÏñï" ±aÃ>ÿüó¤#GŽL…BWÕ}¹J—ÂÀi•þpȶ풑‘‘vçÎ#®ºê*Ò6÷PUfÍšåß±cÇÛ¹ð—2¶mÏjܸñ-£FÊöí߉'ؼy3ñññ¡Í›7ý~¿åñ¤ïú IDATx¾õûýïï¨ê¶B Ù¥à —°""ƒEä °;tèîXRR³gÏfïÞ½L:5Õ‰6;RDHµjÕ?~|¦šÄÄÄ”WƒÁàøÀ×1ââwªúï ǯÞÂ4ø·ªæzÆïGEEõ˜2eŠ/ã÷dË–-Ì›7~ýú‘q' ŒK©÷È*Õ*#Ÿ|ò‰®X±"9 õ. ƒ¸ÂÂñ¥ø#<2²¸>œ‹Ci ³m{l(ªU£F ›6m|Í›7ÏR8fäðáÃ$$$pàÀÊ”)C‡²Üõ ƒ<öØcÉIII·¨êÿÒÜ߯t¢¹èǹݎ½¯ŠçUuw¦ ÄÏçû¢K—.ݳډظq#ï¿ÿ>¿ÿýï3}¾þúk,XÀïÿûLã6là7ÞàöÛoOgD—–ãÇó믿’]ºN0dÆ ,Z´(éĉªª3B¡Ð㪺ÿÕ¥€‘1i³·a~÷x<÷ªj•zõêëÖ­ëØ´iSÒÞ½{¡P¨¥ªn gÌáFDºˆÈ’þýû[mÚ´Áç󑜜Lbb"›7ofãÆg÷ïßéñxƒ;Tõ`‘ªwì.áà .aCDúZ–õ~¿~ý<;vLw,))‰9sæ …8zô(QQQL˜0!µfvìܹ“øøxz÷îîMþþýûyñÅý@à5G|Èn¹XDÏ8¿hÓï |„éòñ_`\n…ˆxñÑ3'ñÑ·o_2î$¥%¥è<»z>ýôS]¾|¹ßËrcqADúÿƤÀ-65€¿7bvArç`™1Õû|¾1ÉÉÉ­Ê—/ŸÜ¶m[_ëÖ­s[½zõj¾ûî;öìÙCíÚµ)]º47n¤|ùòÜqÇYc¿ýöÛ¡ 6|â÷ûû‰H5Œ_Ço€”¶h!à Œ[ù»E±õ²³2|È!™ðĉ<ýôÓôìÙ“nݺ¥;¶iÓ&æÍ›G›6m2Œ‡B!þñP¹reF•§xü~?ß~û-K–,I>{öìÙ`0ø4ðœªËóù"Ró»àP]UO9ã6Ðݲ¬^¯÷J€¤¤¤e˜´Ãía ¸!"c<Ïß@¯×ë÷ûý^ y<ž5~¿ÿ]à[ÌgãQ ba´áv)Ú¸Ä%,ˆÈu"² wïÞv·nÝÒåüøý~^~ùeãÇçĉ̘1ƒˆˆ&L˜© ü|:tˆ^x!999ùÍ`08¶ÅGàk <ð0,í½D¤=°(‰)Ö™Û_ÂŽø˜_¢D‰ÞS¦Lñ•+W.ÝñmÛ¶ñßÿþ—ˆˆn¿ýv2¦ee$E„TªT)ËBÛÏ>ûL—-[æ…Bשê’ÜÄXœpº7ÉøoÁ1ƒÜ4êdlPq”ú{½Þ‰~¿¿S¹råδjÕ*ªeË–T¨Pá¼×Ÿ={–Ÿ~ú‰M›61bÄæÏŸOBBwÝuWªXß¾};3fÌ`ĈYEoÛ¶Y³f…Tu1¦¶#%W)SÛ1CUwåÓ#"rKddä̇~Ø—•Èzÿý÷ùñÇ™6m‡M›6±dÉ:DõêÕÙ¹s'÷Þ{oª{s 9Õ‰dErr2«W¯æ‹/¾HNNN>þ üŸû¦·xàÔ9Ý”˸sír~œæ1@ULJk‚ªžIs|-Ð ÓåëðDéRTp}@\ ¹Ö²¬zõê•I|€Y«jj±tDD'NdæÌ™Ìœ93O"äСC¼øâ‹ÉÉÉÉ ‚Áล1)=å1"ä– â£¦#VILîü-y¶mÛ¯EFF^3yòäLâcûöíÌ;—.]º°nÝ:^zé%&Nœ˜cÊZÕªU™0aB–&‹-J}.Eñòf3‹q¿ˆ¬ÇŠ3½|EDJý=Ï­"Ò+**ÊߢE‹ÈfÍšQ§Nœsâ0m^ãããY¿~= ”.]š–-[hÑ¢k×®åĉ©¤^½zDFF’˜˜˜¥©W¯QQQÖ©SÿÏÞy‡IU^üsfM±€bPAA0* HUÄFìQQ‘¢‰‰Æ_5¦©±Å˜˜¨1T±w5v@Qê.M‘ËÒë²ìî”óûã¼³;;;ÛØ2[ÞÏóÜgvï}ï½ïÌîÜ{OûžÝ§ajl“€×êRB·š¼VXX8eùòåôìÙ³ÔÆSO=•ùóçóßÿþ—œœvìØÁÉ'ŸÌ˜1cHMMå¾ûîãã?æì³Ï.±_ïÞ½™9s&k×®-×ÉËËcΜ9Ìž=;‰D6‡B¡¿ªjAM¿QOí "éªút²çÒPQÕ| Ë-‰x3@NÇ&Œ€xêÞ:thê!CJE>Þy熚0-hË–-L:•ÔÔTÆWÊ[ÏæÍ›™8qba~~þ[ápø¢ÚJqáùבÀ·À ±9Þ®)Ú +°¬ª¹•=vJJÊ3éé飮½öÚô<°Äöµk×òè£2dÈN=õTvìØÁÔ©S ƒŒ?¾ÒТ|üñÇúî»ï†#‘ȹªÚÔºúF Ó¿ŒïÙRãf§¥¤¤\¢ªç§¥¥Ž:ꨔ¾}ûºtéR¡jS$á믿&++‹åË—SXXH‹-¸êª«JÔ'D"î¹çúôéSÔŸbýúõ<øàƒ\pÁ%D byóÍ7™7oÞ·Á`pHCÍgOIIy ]»v×Ýxãi‰>Ï—^z‰… 2lØ0ú÷ï_¢dƌ̚5‹›nº©Tšg(JØcL kîܹúÉ'Ÿ„#‘ȆP(ô7`¢7<"r%ð7àU}4ÙóiŒˆH?¬¶æ)qõ4a|ÄSm\Þx3`Ky9Î"2,¼9dÈRÆÀŽ;X²d kÖ¬aìØ±Äw¦m×®&L`Ê”)L™2…qãÆ•™jc|ü¯6Ç=˜ñ±S¼Š5>Za®À×ÀÈ*O•e|¨*)))œ~úéDkhZ·n]-Š~F•Iåøä“OôwÞ «ê¨¦h|8nÁþVÿ¨®ñ+››’’2hqÔQGѧOŸJÉæª*ëÖ­#++‹¥K—‡éÑ££Gf÷îÝ<ûì³%Ty={ödÉ’%ôêÕ‹ÌÌLæÍ›GÏž=éÝ»w™çêÕ«sæÌéˆý7(\³Ï1À¨-[¶¤­\¹’îÝ»—7xð`/^̾ûî[ªýä“Oæ“O>aöìÙŒ1¢Ä¶DÆÇöíÛùøã#óæÍÓ@ ðM0¼xÚçµ7h®Ã¢ž¾N§–PÕ¹X“RÇG@<{‡“‘½8ˆ>áþVUï/c|ÿ@ ðþ Aƒ2†^¦»wãÆE=?Ê*:ß¾};S¦LAUùÙÏ~Vª@wûöí<òÈ#yyyï†Ãá j3Ä}O`©+—ªês1ÛÒ°ÈÈ`3pŠª~UÉãRRRžHKK»èÚk¯M‹OÿøöÛoyíµ×=ztÂHЮ]»˜:u*ùùùŒ7Ž8 Ô˜XfÏž­ÿûßÿªzžª¾Q™966Dd0ð ô.+M«Ç9)\*"—­<òÈHŸ>}ÒºuëVa°ˆEVVYYYäæærÔQGÑ«W/Ž<òÈ¢‡á`0È]wÝÅ€:th‰ý×®]ËĉIKK£[·nôë×Î;WxÞ{ï½7ÇŽ¿UÕ‡÷æ}×5"r8æM´uë ;tèòË_þ2¡u÷ì³ÏòÝwßñë_ÿºTAþ¬Y³JªÇ²mÛ6fÏžþüóÏ _ƒÁ?/%[†ØS=Dä8`V÷Ô©¥68Ddæ0x±ª P= o€xö y“çÌÄz ¤ DDN œ|òÉégžyfé Ñ86mÚÄÔ©SiÖ¬ãÆK¨´cÇæÌ™Ãˆ#JÎPÕÕ8Ö˜Áƒ§WE&zãÆÌœ9“@ À˜1c8餓hÙ²%mÛ¶åÐC%+«,1èÚµ+­ZµJ8¦W¯^ìÞ½›¯¿®|=¹{ ¯W©'"r°ˆÜ†‰;½ð¡‡ÒeË–ÍPÕ“œáña ¾=Oý`,ÐxEU¿Oöd;Näb5ÐÑ5\õ4Q¼â©UÂáp§Þ½{'ü?ëׯëׯçÑG¥  €`0Èã?N~~>W]u|0×\s ‘H„‰'&|ÀëFA¯c†ÇŸ±âào±Èâ!ªz…ª.K´¿ª~^1cFB'ÄÁÌI'”°)£3< &Ož¬«W¯ž¡ªÇƒÁª:¯ÆÞ §ÞàRe£i@$s.MŒhä 9QDn‘yN®ÞÓDðˆ§V Û=tìØ‘1cưaæOŸÎ“O>Éž={7n\‘ o›6m?~<"ÂG•nƽk×.&NœX››û¹K»Ê¯Í÷#"?Å _#À媚³­iü¸¹ Çm«ª¿¹ì²ËJªÊ3Ï<ÃÔ©SK<ŒfggóØc1lØ0®¿þzÒÓÓ™2e ›7o.÷\ ,ˆW6áÈÇÀ,ìÁöw€ŠH߸¥ünŽq`~~â¿¥K—òÞ{ï•ZÐAѾ}û„†Â±Ç‹ª²lYÂçlÀŒ”;v]jÛÅ_\ª¯E"vîÜÉÌ™3ÉÌÌ”P(ô÷ w¨%D¤µˆL–b)qgc÷¨9ÀE@gU½GU_Pb‡Ãw¬Zµ*íûï+vh«*_|ñ?üpÁäɓëW¯~YU …BgTÇ(õ4®ÇŒ“=‘¦€K_ŽfOüøs,tJ{b<o€xj•P(4mΜ9‘Hâþ‡z(cÇŽeãÆ¬^½šË.»¬T6mÚpÍ5×pÖYg•X¿k×.&MšT°k×®¡PhDlÇÕÚ@Dަ¸_oWÕwc¶í ¼ ,Æê>ª"ÉÙ\U:tHt^.¿üò"e«Ý»w³nÝ:{ì1 Ä€ØgŸ}˜0aÍ›7gÒ¤Ilذ!áI-ZÄ+¯¼QÕ«›xíþØß*{øX`XÙƒ©j(%%eɺu‰†÷êÕ‹7’““Sb}(¢C‡¬X±¢TSÈV­ZÑ¥K—r£:u¢M›6 ÇtèС”Lo”¼¼<æÏŸÏĉ î½÷^9sf¶‹†Í®è½Ö4"r¼+ÎÁ  lº©jU}±*RÚªš•’’òæ[o½UXVªU$!++‹x à©§ž*ÌÉÉ™ªª‡‡B¡Ëö¶ÈÓàh¦ªïªêu^ɬv‘_‹È7À¬àìúÛHfú¿AÓ«`yªˆŒÁŸJ©`‰ÈA)))ËO>ùä6#GŽ,³ñANNÓ¦M£uëÖŒ;6a#ÂXrss™8qbáŽ;…B¡a{+™ZY\?yÀQ˜Çæô¨áú=ü8ø8±ª¹Ä"’¶]zé¥Í{ôè‘pLT¢¸yóæìܹ“2xðàcrss‹sÌ1%¶effò /DTuœªN¯Êü.Ô?¨‚aïªj¥;¡‹ÈŸÛ·oË 7ÜPªò<‰p÷ÝwÓ·o_N?ýt¾ùæ233Y¾|9iiiäæærñÅÓ«W¯û-\¸—_~™›o¾¹ÌÆ›«W¯¦M›66 ƒ¬X±‚Å‹W­Z•¶E"‘'"‘ÈÓªº°²ï³&puT?NˆÙ´3ŸUÕĹg•?Ç¡@`åðáÛ 4¨Hú;“™™É|P°sçÎH$yK—Llµ{%.b½˜¦ªÿ—ìù4vD¤ð)°/¥{Ðå7¨oÙ¤ðˆ§Ú”g€¸í§ˆÈ¬ÓN;-%öA žÊ!»wïfÒ¤IÛ¶m[ …†h%ûUy{`ú裪›c¶ýø¦¢4°²ŠWñ¤¤¤<Ò¾}û±?ÿùÏÓËjRUSUn¸á†„}R"‘H©üö%K–ðÜsÏETõZURj'Oµqi]«n¼ñFâ›F¼öÚk,Y²„””‚Á =zô wïÞtîܙɓ'Ó¢E ®¸âŠûäççs×]wqÚi§1`À€*Ï)‰ðÍ7ß°hÑ¢ð²eË4‰¨ê«‘HäyàíªDjEŒÆõîÀŠÊ_QÕÏjø|ç{÷îúãÿ8““ÃÌ™3 òòò Ãáð?€UukMžÓÓ0‘{°Æ£¨êuÉžOS@D>ÚQÒ)ºÇ¦4{?ÞñT›Š 7fD x}È!©C‡-ÓY¿~=S§N-ÓÉÏÏgòäÉ…›7o^ ©jùòX5€ˆüxS¬ªsb¶]€=< ¦†õT5Îs`JJÊÒã?¾Ý¨Q£ÊŒmÞ¼™©S§’žžÎ¸qã¨HuiÙ²e<óÌ3UýEUŠâ=U'==}éÀ6lX©mÙÙÙLš4‰áÇ3pàÀªdsçÎå­·ÞâÖ[o-õ?ÿôÓOÕFUUeíÚµ,Y²D333ƒ""†ÃáG×jS!."Ò«áô‹Ù´K¹škÐ×ÂùOLMM½; NMMÝ …þ=t–Ö÷ö4 D$s&ˆ©©-Mò”š .òôÖÀ8zÜ ª‰5ç=_â©TõH$röŒ3‚ï¼óN™Voûöí?~<ûí·_)ÙØ¨ñ±iÓ¦UÁ`ph½€¿¹_g|‹õ@àþꪺ1Ÿ5þüà[o½•¸hØÿý¹æšk…BL™2¥\‰âåË—óì³Ï†Uõo|Ô>Á`ð± $Ta‹ÖkìÚµ«ÔÿvÏž=Ë,8?÷Üs3fL©õñlذ>ø@ï½÷ÞüÉ“'GæÏŸÿÉž={ÆG"‘v® úź4>Däh¹X‡9(úaŧ`IWUýkmªú¹»^‚ÁàAîœÞøhÚ\„{ã£nqi­'›°Þ+J±º§ á# žjS™HÌØSÀ»ýû÷OKÔ¤,òóó™2eJáÆ¿…Bê"mÂå©ÏzbžãQ1Ûöà •Ç.ž#«Xt^ÞyO ïüñ£F ˜Rdi¶nÝÊ”)SHMMåúë¯'--­Äö•+WòÄO„?„Ãá{kbnžòq}+¾½îºë‰ú¸¼óÎ;,X°€[o½µTšÜôéÓ ‡Ã•Žt€5ßÌÊÊbþüù[·nMOMM] ŸÄj(6V÷ýT'ÆðS,ÚÛÔp0xÜ×Zx’ˆÌN.iªJ€u…ˆ œtö6+°^ ocb W¨ê³Iœãb`§ªžš¬94E¼âÙ+œ\æ¤r†ü^Uï.cß@àÝSN9%}äÈ‘!L™2¥pÆ «ñQ¡ gM "¿Â.˜ÇFœœvüÀ™À×XÑyD"r|JJÊ̾}û65jTJYFȶmÛX³f }úô)±þ«¯¾â‰'ž«êŸÂáp¿ƒ§æ‘¥¥¥}tâ‰'væ™g–Úž““Ã>Ș1c8òÈ’’÷›7o¦eË–e*WEÉËËcÙ²e,X° àÛo¿ÍHIIY‡ŸžPÕojòýT93:.¢…IÀ+˜rÜ,¯p㩸¨v&°èT×)‰M ù¦f—E;ö`F˜”}àq¬vr}R& 8u®ªz\²æÐ‰W"ðx*K&¦á]sËÚ ª‹ÈisæÌyWU›'zP‹RXXÈôéÓ 7nܸ& ¬Cãc¦¯ÀÕq^Û[0ãcpAmDcTuˆ Z¸páÇ‘H¤ÅyçG"#¤mÛ¶´m۶ĺU«VEÛ¼ñQûˆÈá˜Ú…ÀÉÁ`P-ZÄgœQ*ÊÑ¡C‡¢ñÈþûï_æ9òóóY±bYYY…«V­JMIIÙ … …B_Öø›ª"Ò¸¸86fÓ˜ÑñDm_E¤3‰,‹cUõ»Úœƒ§Á-8ŸâÚCDúÿÆäµÇªjØõWê\üœ ªÛ“6QãŠ{“xêo€xö µÎÀ{ÝXU?‘§>ýôÓñªÊ™gžYê»°°iÓ¦æää¬ ƒj;W<ŠK¯šŽÕH=¢ªoÅl;¸Ãýú U­|«éª“‡C‹/FUõüóÏ—²"!Q¾þúküñ°ªÞ‡ï¬Å¹5YœìòñX£¼s±½(aàÓ={öœ’èܹs©ýG•P½,žP(ĪU«ÈÊÊ*\¶lY@DvF"‘gTõùP(4'÷Þ‡W`M7Á¢¯“±ºš[ ¦¦µ+l§ZR¾žFɰk»W¬].Áê#«ªE5ÎØxÛ- ‘T öý^£ªÁŠN&"ûÙªš°¯,Tµìn¯vìÖ@{`'°¾¬ë›ˆd¸y‡Ü<ʬåôxÄ“$Dä4àêH$Âܹs ·oß.^xaZFF`= }ôÑœœœï‚Á`UÝT‡Ó{è¬~3çöÀ³Ø÷æ±ÚÔ,‘ŽØzßp8¼(33ó åùçŸ_f:Vvv6?þxHUï‡Ãw$äÙ+D¤08Ë-±Š-A`ð2ðªªnJKK{;33ó´Î;—J1<ì°ÃÊ\Ù÷ßÔðˆ§Î‘OcÞI‘Hä_}õÕë÷ÜsÏá}úôIkݺµ,Y²¤pÓ¦M?8ã£ÎŠVEä,=\m†æ<¿O€¥‡ñkcí°ÂöCåÀ°p8Ü)33sV$iyþùç§Æ÷ Y³f >úh(‰ü-ÿ¹¶æÖ”‘C0cãlÌë[œ±x«zSU·Åî …¦gee 9rd Y³R} K•ÍÍÌÌŒdee… ‘7Âáð“À;UõæÕN>÷,ÅjæÍØŒ}UÕ%ɘ›ÇSU\øx¡ˆ¬ÂÒj·U´§ZD£ ¿‘/µ‚æ¼îû*V°þ,Q a‘”?b½Cbï»­€€wܹ®ÁŒ„UÀ,àR9BU¿Ž;Õ•XÔô¿1ëJuy‘“1žà.¬IjÖ8µG̸ÀL·n2æŒJÃŒ¨‡D¤YEâÎOMMö ‡Ã+Âáð­uùp’e˜²Õ=ªzk̶›°š—\àxU]YKshŽý±®ê'«ê:·íØ”””>øàÖ]tQz´f ;;›iÓ¦…"‘È?Âáð͵1¯¦‚ˆô Øè8™â‡n€lìoó&æq/Ó0‘”´´´Õ è4|øð„crrrÈÌÌdñâÅ…¹¹¹))))³B¡ÐcX¥Ö›k–…»ñŽÁ ñhÁh3¸¦¯×—ÜyçÍü Ë5h ¬SÕ¯’:1O½ÃÕõ½ ‡éEjw?œgbµ¡3°ëgnÜø+1Yû;Uõq۞ǜ!Ý¢…ˆÌc}„ÆÅŽ]«ÿ¢ªŠYÀúM‘Š/BwÆê2  ÐÏEÍÊzŸ·ÆÆfE¸sÍŽ©‹¶ o€xꙆyT·`òÙÉQ1"r–rµ8ZUw»õ}OtÌs6½–Ο¼üØgKâÆ˜ššúL8rðÁç·jÕ*eÕªU)À?Ãáðojc^g÷Ç Žó°Ô»(`1fp¼,ªÊC‹ˆœ%"¯]tÑEÞ½{°e˲²²X¼xqÁæÍ›ÓÓÒÒƒÁGëªÆ©Œ¹¶Ç Žø‚òog€‰õé»%ƉçK¬FëÃ:ž’§ž""/cßñUõŸÉžOSÀ9Ô~ tÄ^Wv·Ä¦'‰È»ÀP ªîˆ;ÎP,ñ Uý·[5@ºÅ;ÜÃ6æ8échDSÂÈI`€ôÆ®ýϪꥼǯ°JûøûƒˆŒÃjΊ­%õ>ËSgˆÈµØN¸´>=ЈÈ1˜ä.ØE.j|´ÂÂÁéÀ µh|&küL]ëÌDé-®·Ã09öûï¿?h|¤ªïÔÆ¼#®Xñ ,Ò1‚b/?XÑò ÌàxCUsöö<ªú¦ˆüüÅ_|xöìÙ¡p8¬ëׯož––¶ÒÏ®«Æ[©.êxVP>‚âûÁnà%`0»ž{Š£‘™·°Ž}±œðÑÀÛ"2LU?NÞô<ÉÀ9sþ‹]S߯j¶ÎƾßO$qjM UÝÜ Ü)"a ÏÅ®9‰Èv-nà{ –rõR‚:Ç–îµcÜúPJz\U#"ò$p+V¿1ËmºS¶|¼‚©ww¯§g]íÀ{ æ•6,ÝÊã OÝàúD½N·Äªb$÷ð?ËÛ|YU߈ÙüOì³Ë1­-îÆâr^5¦ãz"œqâóï+ST9Ë-GéÔªh”㣚¬¹PÕI"òî÷ß–KüFaaኚ:þÞàä1¯À"±Οbå/hé®Ö÷dDÜê§Ed&–ÎñWLòÓÓ„pr¯'bßùíØƒd&RëMl=¥qµœ¯¯‹Èû˜cï—Xm%XÝŽ¥˜èE,yås<ü3:f‰È>XlN‚ºx2ÜkE×Áhß.Ïû,Õ|UÇi’xÄSëˆÈ˜G5x ø{rgTŠK€S°‹H4 ‚ˆœa¬ ½VT~DäOÀÿaž™kUõõÚ8OSBD:Qlp Å<ãQ"˜ J´€¼V 9éKª*™ˆŠE®ºÅlúxëÙQ+uMÉ@U‘¿'ˆHËhDÓÓ¤X è–ÁnÝQ.*öAò¦åÁ”F€#bÖå`ÝÒQÙÝŠPÕ¯Dd.pˆü8‹¤bø»Ç•R¸ñ4 btF#žý€×DäK97 sj2¸ú²8ûnƊ̼E.ªÁi<†©eEBò°k_EÌÅgÎqiV qµ%]Dä”j϶‰á Oms/–“ œW• ®ÂR¬6Ŭÿ&ƒûð§Ò»U <è~ý“ªþ£6ÎÓX‘Î"2AD^À´æßÁ"Xݱ¨ÕB,gÐAUG«êÓuÜS¦N‘€ˆô‘I˜ÑõVëUd¹8PU/RÕ7’ÕW¤¶qâGaÆVÒŠû=Ie¯Ö–‚#;±(¨§öx@DÞ‘3œ¤7"’""ý±ô+0‹(¶ŠÈ%Îy‰ÛïH¹[L¿*¼€¥uÝœ ¼R™g§Ðu?¦‚õŒéˆÎå0‰5’îÀþÏž‘Ó\J7b'"‰HzçÝ4PU¿ø¥V`f&{> æ—Žy†øUÌúÓÝœÃ@ÿZ:÷¹X¯LögÑ,|> ø&¥¨qËz¬ÀôB m²ç[ÇŸMWìF˜÷™|…ièwJöké}ÿȈ[—5&S¬ž%éól¨ f¸î¤'{. æ6¸¹¬ï:–Z»#îû‡5šMKöüûâ®;Ñ{\3.b4þï€õ؈^ÛóÕîo¦˜!qxÌØ˜rUEóx:æï?¬Œ1ß‹ãÖ¥`òÞ·ïXÄFÿų-×½‡|÷ûÎúøý©‹—áõÔ "Ò+¾Ú¸OUë] —ú–ªÑUUóç4ªÿý/UýUyÇØËóÅŠž›a…rcÔKá¤{cáéX!yZÌ|¬§Ì;À»ªº¼Î'™DD¤ –®p%{–lÇ<OŸ6æÿ-yè‹¥L¬ÅTá°ú–STõÛäͰáá¾w×?ŽÄ5`9úŸÿTÕ¹Iš^1²é]5AQ±ˆœ€¥Ç색{£Uõ•:hÆ]£†`’C€mØýöUý²Œ}Ò±¨m_,}v=Íz_cz‡ˆÈ©˜ñùjsè쎥X$’`ÌH ¨ªï'ØÖÓÍç`̈ú«ŒïcÒ s,öœ ßc…ó34IÍdë;ÞñÔ8.÷ós 'æ¥8MUÃÉUI\˜ôKìûsUý[;–rõpTüE¦Î{"vSl…ÉD^¤4 fo‘ñ(Ç0ìÆµܯ0ÙÕw€Yê:Õ7ÜÃáÌè8byÊö]{SrkE×"ræé>û_‰`ÞÌ70ÇÇ–äÍ®a""ÿnÀ®Ï` €bžGbÍÝîIÞ ¹«cº^U×'ؾ?f4…0ôH­GÒïOSÇ žGD¦ã°¼üã´½j ç=™……GVÕÝ"ræ±h\ ª/×ð9ÃŒý°‚»³›ºgDDöè£FG—¸!»€™G9Ê’hlÔˆÈQ˜lîU˜w?ÊX´cºª®MÂÔ<—c¿Æ-}µtC¸ÖÀ‰"õɞǜLMúZëñÔ7¼ ¯§F‘‹1ã#‚…»ëñáë^Ÿñ?„oׂñÑ3>Ú£šâ Ñ©Žõ¢ØàDÉëPÈÄ>«€U5¾´Ià&þSoé³i3æ™~BUãuñ=žêp,V÷ñn¼ñàÖ•Z/"iX$j–òôðœª~7®&Jò‚;ÏXLzõmì»ßøG¢ˆ¹»·†©ŠÈ`¬f`²ªn‹Û¸ KÍËþ$"ÿ#.%Ñ¥Í\Ž©c5ÇjžjjéœO2ðO!"]XÞæmªz{»$çÅûhœ ªóEä4,µ§è¡ª«kð|½€vX³·Ú@½Õîa jpÄwK™‰ïk-õ[i¸üç31£c$Å5/…X·ïDZÈjëä{<ñ¸º‰ÏA•©‘C0¢'–®õ=¦@ÖS÷»3fìuÀÃÀ=ÀõXzTöÝß Ü†¥J½wŽ}ܸ%ªz²[—°DD®ÁœI)˜A±Kµm ì½öŠH7ïŽnܬw0VU}Çô„»vv¶Å¤eŒÏÀêR¶6å{N2ñOàŠ·ŸÇŒYÀåî\ÎÆŒ¥Îø`7D€‡kØøè‰Ý\ÛaÞ¸Fo|ˆÈaC)]ÇñÅÇõ8JVg¸‡¡ÑÀ,ß>Ê ¬˜|ºªnLÆÜ{ü3f|¿7þ*ÑDÎ¥Ö>‚Õ÷MÙt’®#q²¼®NñuÌ2DUg¹õºõ“EdNMÞ :"ò ÅÂÁÒc×óTu~rfU‚#±ê¿P9éü^˜±}+Å÷ÿ:AD†`‘ÀžÀ˜ãó࿪úZ]Î%™xÄSSü 8ë=pY}+:ãt÷ú†{½ KqÙN ^ˆœØ{Øø"àÌÆh|ˆH,õb°[Žˆ² 3J£ÇŠºœ_}EDÆ$ƒ¯ÂÔ¾¢ä`Ͳ¦«jf¦æi¢¨jˆŒÂ"mݰYDÞþ®ªY1» ÂØîî8¹"2‹†LÀŒ˜X^Šn|!°FDfçŠH›8¯ô•˜ ëó¼…›15¸ñ±õbî~ôF̸Ÿb©_×E7n£‹Ò,À¾—¬à|M‰1˜ã.š‚×gˆÈsXʵT©NÂ"o9˜ãöRàJyLUÇ$sru…7@<ÕÆ5噀Õ}\®ª?$yJÑϽÎp¹Ë±ÐkD5GDºaªDíÅÀðÊ„…®6afl ÂÒ-b ŸQå˜çoL†ˆì‹ug¿‹E›mí^Å¢ï×sÞÓˆQÕ.ëx,jpfˆŒ.‘+Uõ97|{]+"}n=æiŽçƒ2Nÿ8v]¹˜EÊx±š’Rõ'Q\4æT`­ª~Zö;,1ïœóNÁRÃÍ»©³^U"E¾ã±kÖ%X4áŸÉš˜ª.£Xм¾s3ðEìó†ˆtÂÄi®‘§TõäͮŽðˆ§Z8娨'ë/‰t´ë.5 ³ûu1ö x8v£|°¬ýªxŽn˜rS¬wƒ6>œRÕ@ìÁ`&Ç{¡ŽÏtËÇ5-_Üqé%g`ÿkgcÅ®`ºô³±‡®Ë{¸òxêWû1ß-Ñ|ùß`©µÿ‘×v·ËCå.‘ó¡,'ÕËXÈ•83|ûž”GKÌ+Ÿ]Á8(žwy=Aö­Äqš,.%ožˆü K™;ø§ù°SU7»L€ùªúbt—ªÛû›­æÄÖ¶¹ZÍvÀÆD÷±îêáj8Ê«qs„Ýë¿ÅœƒåâžmNÄ„i¾fÇ;†œÔó¾XíS vìˆIį*ëØª:;Áºµ"òöÒ«mÔxij׸º°/àGXX±¾sv3Û†¥\ÝâÖÿCU÷T÷àîbû!vƒËNohƇóÒG ŽÁ˜'03$,ÁÒªf`‡/â‹Áy`é}`°Q¾ÄT¬žñ9枆€Sì»KDÎÄ{`ÆI¾rºû=¥jGÊXMÝz ó‰Õ£\õ$)+j%ßw¿ ÆEǂծ”U[壶•#ªv{mÝup‚[ÿ=ð¢3ÆÐbï+_‹È%1Ê~Ç`š¿NpÞ?b‘„Áؽ(a ˆˆŠ xôŒÙw5&xP wÿ{3¨bY!"çkÉŠ·×a uëýïV•Vîµ¾g‘ÔÞñT‡°º ÀOHÚHôApv鎩¤L¬îÚÕûXQY&ù¨÷МÂÌ)§Tõ¥85(Êr,º1 øHU7×á "Ò3:.Á¦¦%×› G»× që/”ÍÎÁîQå~`äæ»|‰e%{ÎõyÁÂú¿Çn²±Ÿá6`*–${ž~ñKE æu¾HO°­‹)ö´uëÚbh›N öI:Äü~ûnœ^ÎóP¯Å<Ñ tK0î>·íˆ˜uÿçÖý§Œ¹ÜÏGbµj_EßKÜØfXÃŤÿMêË‚‰‰|÷w:k†ªÀn}G÷{pXÜ1ÚcJd«´¸m¿vûݳî÷nÝYqcO‹¿w»ÿ]îˆYw¦[7%Áû™ë¶ý.fݹnÝ= ÆvÛÆÆ¬{Ø­{|/?Ó¬¸{Æt`¿dÿ­ëjñO•qºïѺû´ž×}Äñ{=»†(~/{…ˆüëÔ½0Ó±¯²¤6p ž@,ubÅaâXVcÑYÀ ­ÿBIÅÕÅœ…Ý”†R\S€EÁ^Ä”~â=eO}æ`Ì‹û7§zõ% = K%lŽ=°mPÕm"rÝ[&"Ó0C¼ÐsTM¤ 鹪ª"ò–Þr0WUWVr÷‡°ïåµ.…ë=Šû€üÔ½]ªú•ˆÜˆ9aVŠÈ£˜·½ ?¸xª²ón"´‘­îçf׳½DéˆÂ'ªš·îT¬·Ñt-ÝËh ð7LžönÝ“X$âJà͘±Wbìõjê^K°m:¦D˹î5Q½QTE­?I‰eo{ÆLÇÒµ;`£"òÚ02Jª…7@K0vm‚uÑ´Ôoâ7¨êNÙHŒƒLU×‰È àlÙOU·ºâôŸ`µ‡¥ŽSÆùÖ$Ø–hßÃÝë\)« ç Ö%z¯¢ªEªaNèáI¬Açr`òÞ³!á OUù æUØõû(Lò|ö†—°÷Õˆ~ˆÈ Ì+Ò ‹œ­u¬þä$*OÀŒþÀ±”þ^ïÀÂÍQƒcžªî®Ëy6TœÑ1ë×q.æÙ2+&^}3EO#ÀE6þå–èC‘¨j~û-ÀyÝbn"®š Ò‹ñëŒ[ƒ¥÷”7¦hžqë °èÉm"Òˆ”5½ßIø¶¶«Ëñ$d»ª^Sɱ‰>óègH°-º>þÿæq¬©í%X“É ±ÈËc•˜Cô|‰äyÍ!ºî¸¦• ø6Áº‚몄Zž?`ïï<¼âñ#"}(¥ÿ² añúÆ‚˜Ÿ»céSUBDΞÃÂÐo¸_­á×Iï–ø.ã`Þ˜ÙË4AcObœÑ1 »Œ¢di-öwŸÞ€ÿÿ=žJ±7×4­GrÒ•MtFGƒR+l ¬s¯]â7ˆH[ì~My+¿3@®Ä /Uñ|ñ™¥æ€EEŸ9£º®‰:0['áÜuŽ7@<•Âin?…©_QÕéIžRuèóóß,àý•}H‘1˜w"S«¸´&#A.Í­ ÖûX¬p¾/–ŸO!VÈ6«?™S”²¦Š“^<SFAqn3X_—±HGYR£Çã)ŸYX´`ŒˆÜwß¼‹T”pªjžˆ¼Œ‘³1ÅÆ'*™mð–íp5–" 5­›`ü+˜Û͘ªÆ‘”rê;.w¯™µqîú†7@<•å_X´à;LB¯!s†{ý/–KúWàù£ªÎ,oG¹“,Oy¬îe—owüV Ù +ï…©y´L°KXEp`)@Kh\Òq·s1£c8³ùkÌèx)Iž0ÇãiT¨5&ü'ö€ÿ¶K9ڈ݇or°hG.…¸5PPžÃLDÀTšcÆEVyÿ‹1Æt0Qú•“œßÈWÕ=q۫섟aä>ÀžD"NLáìž¾XãÄbÇ´À"ç;ªZg)"‡aU[¬`‰ªî•šVCÅ ž2q_Úw±ô”y@ÿÚÝ ¹ “ž¢ªâ¶µÂRrNÅT¥Ž¢lµŽª°K][‹)h¬ÂnZ_Ù{›Âå)g8Ÿ‡¥Wõ§äßq!ÅéUMÂÓäišÄ ÷aŽŽt,Ýó*ÌÙr«ªÞ“¬ùˆÈ8UZÉñÉ2@2±Ïï),:½“*¾{€ì­ª_×åœ<ž†ŒOÁò”Ç/1ã#ÝÐÇaî5‘y.Vhÿ4y(^Åê2B˜ž}¢ðpTAe{ÌëV,r²®®¥y›*"r4–G{.Ö %*½¨˜Çëeàåx/–ÇÓx-ÖC/"a}=~'"OfYe zÀX`Qœ—þ=Ù…¥MnJÊÌ<žˆ7@< ‘îÀ½î×_«êWÉœO Òɽf—7HDºÿÃê4¶£TõãòöñÔ-"’Šuv?3­þ«»{“_í‚Õö‘Sb"Ѻ94sçžR{Ûœ5Úmû»½Üßãi’xÄ“ˆ?b^§íÀÕÉ.R¬aâoº%7šâ×S˜¡’œéûj$9ójž…5‰Š-"ßD±tâ{¾Ã»ÇS1"rVã¶« ‰ÒÆè›:*"÷bÆÇßUõ71ëü ¸íV?†}_/Å$Ëc¹‹fTÔ ýßXðiªú;×°ïz_J+MÇ¢2Cb#Õ"rv=¿Õ-±œœ§ª¯V0—2‘fX4%LÛÛãxÿÄÒ·îTÕ¥Õ<–ÇÓ¤ðˆ§')÷4æa~FUŸOò”jƒµ˜*ÒaÑ"’†õõ¸Ö­ú7pƒ—Á­;ÜÃÉnDI±ø«ÉyÃ+Íx¨ªaùk vV¤] "Ï?‘Þªíê|•k"×Ó½ÎM°mž›c,'º×ýTn<."©qŠƒÕ’Ý‘?×`B%·WçXžšCDºbN«fÀJ¬É+MÖC¼â‰å,ÿ÷{àIžKmU¿êE…‹/aÒ»Ìû÷÷$Í­ÉàrÊOÅšžåžÇ²+:}›>§JŒÀÞUU·—3nkÇË>îuSûlŒfdü‹‚dºÞWë°:­òˆgsügðÄ7Âmã^O¢Øx‰g V;û ZÖû©¹ ¸ «5¹Ä?à&—ª{'VßKPD–`Í bËëz~žÒxÄ€ˆœŠŠÕ}lKò”j‹°—3DäXÌ{u8° “~-™“k¬¸&Q½an€˜F cR¹oPZîÒãñì=»ªqM*×µKÈ IDATHTÆöîµÈ°QÕyNeëR÷°Þ+l¿³)“ežÏ ¤´Ãú)E‰ž÷.U}¨‚cW—ªûWÌ¥ªìâ©E\„î6L9Õ­#--ÂÂB°ŒŽ¾n‰î³gŒ‹0£÷KU_§“oâxÄM½šŠÕ>LVÕ÷’<¥Úd6‹Ý4?ZbE˜çz¯HÍâˆß·*ˆÈÌÀù SGôi¡IÀ¥ó]Ü °Ï>ûpýõ×síµ×’‘aõ@ @·nÝèÖ­]dí]òòòÈÊÊ"33“%K–••Å7ß|C$RôïÒxKDNô2îµ7@š8"r vƒPàšòÔI:"²/VtyBÌê‰ÞøØ;\±ß@¬–cîfC>–wûÅiU^±ÊãixÜ ÆýEdp pV´þ»øT5GDÞ£ØËüXÎ÷KìÚñ¼ˆ|lÀ®1_?$?S.¼/"‹±{ÚáÀñ˜ìoµ Ì °SDâ·ªª§Tóžr‘AÀß>©©©\vÙeÜ|óÍpÀ”—¹Û¢E úõëG¿~ýŠÖíÚµ‹Ï?ÿœ¿þõ¯deeÝÇÆbõ$žZÄ M—zõ–z5IUß-†‹ˆôÁŠÍö`žø3GDd‘ªf'qzõçu: ËåŽF9ŽVÌfaµ6³}Š‚Ç“T>¾—ñ ñÖù¼NÙê4Ì9è…IíÞŠô•Õûã…ç[-"?Æ:ŒŸ„E«§b=Gþ„¥ÑÆŽß$"ý°B÷³°&‰»1A•§°Z¿(?“ª¦Ù<‰Kõ)ƒÕålóTùf\˜:”Ûn»îݻۛ²Á}öÙ‡¡C‡2gξøâ‹h݈7$ëñužMù'p–zulc~ˆÈÀ°æ‚k±‹ØLæñ8`0HUyÖš$"Ò»ñÇ.ñ5˜²ÎL¬Kò\UÍ«Ëyz<§qâ=þ«óhpÔQGqûí·3xðàRã÷æyö‡~à™gž¡eË–<ôÐClÞ¼à#UT¹{*ÆG@š("r"æ˜Ðáù7p•[õpUT†RDÎÄŠ »óDäŒåsÞ[ƒàr”‡aүǟˆÈý˜œc£ô仦‹ÑÜí>îµ–âÏ*¬àò3L1l©oÎèñx<žÚBDºaæG€“_xá…ÜvÛmì¿ Á*“——ÇsÏ=G(¢Y³f’žž;Ä u€7@š&·bj›idªWb•7÷b}&¾.WÕY‰Æ«j¶Ëž\„}6WˆÈß) YéDDöÃê6Ž¥Øàè‰5äŠ'X€ŸŸ©ê^7êòx<§²¸:ë0iÝt€ãŽ;Ž{¾}û–»oUX¾|9Ÿþ9¡PU%Ó¢E bÕ°¼XJà DD.NÇšÚ„±®Û+åÀŠú®â¼ QÅ’_6¦‡L×h:V\Vx8NU·”·Ÿªæ‹ÈSÀƒÀa˜ÖûŸEäEài¬ º^zÿE¤=VtyÖá½»û½¬ÆaÛ°æK‹Ýë"`•W¨òx<O]#"C€7æíÛ·çü#^x! ÔÆöŠp8Ì[o½Å¶mÛ‡ÃD"D„ŒŒ òóóÉÈȈ­!ñ:À 5„ˆü‚ò› EDä`fD_W&ÐO¯MöÅ ±¿VÕçê𼵊Ë„=tïþOU'Våªú†“E†ŽÄT_ÆÛœäL¬{ê’º2(EdÌ(Š.b–#€¶åì¾ë{RdløþÇã©8Ú‹@óŒŒ ®½öZn¼ñFZ¶L”¼wäää0wî\¶n5ÅýH$Bzz:Á``0HóæÍÙ³g7@ꯂU¸Iß-=ôPÆŒÃ?üÀÊ•+Y¹r%7n,o÷ –k¿Ì-+0yÀÕµåq‘  UE‘†€ûìï&¸U+€Ÿªê’j7€ÉÍ^üØ/nH‹p­vËÀv`‡[¢?ÇÖ’Ð&æ÷T [ö‹ù¹p&‰Ù1Á¹ã‰FÛV`݈¿p?é¢;ÇãñÔ;DäOÀíiii¼òÊ+œtÒI{}¬øçYUeþüù|÷ÝwlÛ¶ U%‰‘‘Áž={HIIAD(,,$##ƒ;3ݻw¼§ª§Wëy*ÄG@j†hWm¦OŸÎ€رc[¶l!//üü|rssÉÉÉaÙ²eÌŸ?Ÿ¥K—F­ñ4,]æh¬!J¾ˆ|AÉhÉr [«i5ªj&¡Ú ‘Ó1møŽXÎæÃÀMîýU —Ž4 ˜%"×`ͬ†cM¨úí±É‘Õ=W%Ù‚E3²c^׸eUM¼gÇã©kDdàfàDà@`vÏ[€)íùþ›A—\r G}4iii¨*¡P¨ZÍÍÍeñâŬ[·Ž‚‚T•””RSS)(( Y³fØm3##ƒ‚‚‚Øt/¼R3thÕª§œr ‘H„V­ZÑ¢E "‘HÑ¢ª :”;w’——Çž={عs'[·neþüù|òÉ'|ñÅÑ/E3¬pø¸¸såŠH4J}]¬ª›ëðý&W\ý7¬û­_cTõ³Ú8Ÿ‹D}î–è:`÷.n9ë“Ñ‹r´ŽyÍ£ämÅEn;01€-e,ßaF§dx<žFƒëñp=&üÛc¨æì‰ŽÛŒ]{çaFÉBU­LcEOà=@—.]8äCؽ{7¡Pˆôôt@•‘ 6°råJ¾ù曢ÂòŒŒ ‚Á áp¸¨î#š†UXXHóæÍcex}=dà šá€®]»""üðý.:çN<¨ Çô<Œûw§ß)ÝHOO%##ƒvíÚѶmÛ¢p @¿~ý¸úê«ÉÏÏg÷îÝE†Iff&~ø!+W®ŒŽm…E\Nˆ€ˆbÔ·Ô×béš@D.Ä"bõ“±z:U«RÕ ‹’x<§8¥ÂK»°:6öÙg.»ì2<ð@Ö®]˲eËXºti´+õþ˜°È™1ÇøsÐ(ð ðhcH)n¢DÀäv£4kÖ¬( …B4oÞ¼è÷²Ø¸q#Ÿ}öÛ·o 55•@ @~~>iii"ƒ#š†Ýî# u‹7@j†®Gq«V~Ï7_¯g¿vû0sÆ^xöcvîÈ#--…vûïË:@÷9þ„#8ñ”#IOO%55•}÷Ý—V­Z±ß~û&'žx"W]uìÚµ‹;w²yóf233yã7ÈÉɉÎ!ø{½¡Î?ZFDºcÝ̹UK€kUunÒ&åñx<žJ#"§÷c)­¤¦¦2zôh~ûÛß–êñPXXÈÒ¥KY°`‹-bÑ¢E¬]»6º¹£[À$寑S¢Mf= ŠPôÌ›a».--­¨Vc×®]´lÙ’p8\´-‰°råJæÎ[”q’žžN$)*4iiiEiXÑu¾aã šá(6@–/]KóŒ8ûÄ¢ùùA6mÜÎæÛÙ´a3?XÆsO~L°0DzFûµkÅa]âèé{bzöúÑï@ZZ©©©4oÞœý÷ߟ.]ºpüñÇ3aÂÒÒÒX¼x1·ß~;kÖ¬ó5Ä™ÿ{OéÀnàvàU­^’¨Çãñxjç@ú+pNtÝðáùí¶Û8òÈ#K¤§§Ó·oß= ¶oßÎ’%KÈÊÊbñâÅÌœ93Z4|4¦B9º¶ß‹§Æ)2@TµÄ% ‡ÃìÙ³‡ôôt iÛ¶-Á`ôôtÞxãè3@QGJJ éééE)W¡Pˆp8\´.:. ÅFa| Và j⺊±H6mÚ´¤  ;Žj˵E{ï¿;wës¶±yÓ¶lÚÉ«/ÏgúäQ…-38è ÖÖå@zõéÄð3z’š(²úÃá0ùùùƒAúöíýò5 Ë]DR€qÀXºXÇò_ªêÚ2wôx<O½@DÚb×ðkqÏ=zôàöÛoçÔSO­òñÚ´iÃÀ8p óæÍã’K.!77àIõŽ©G‘RXXÈ믿N—.]èÔ©Í›7/k”ìÙ³‡p8Lnn.;vdéÒ¥dgg¥TÅšG£Ñ”¬`0H‹-سgiii„Ãa©c¼R}:aJVtíÚ€µk6±ï~û°» XöqtCj*í=€ö‡P´) ³më.¶nÞÁÖÍ»Xõå&>™ù%ƒ‡MJJɦ<‘H„õë×å;[kì% 9 ¸ûÿÛ»óøªê;ñÿ¯Ï¹[ro„$Ⱦ(»€,BY¥nÅ¡j[ý:ßÎtªc«¿í÷ÛªS;ýÎïÛZ;u´£–Z[ Rm«,R”" "ÈN@{ö{“Üå|~œ|Ž÷†!‰Qäý|<"É]Î]<79ïóy/8S»Ái+û/Zë7?»g%„¢%Û˜§Î#œárßÿþ÷¹ýöÛSòý[ëøñãüíocذa¼ÿþûàÌ¸ÊÆ© —œÃ²,ŠŠŠxíµ×¨®®æê«¯føðátíÚ•@ €¹‹Å¨­­åôi§O pW8LÀá÷ûI$)u^¯7eÄÔ‚$‘¤HÒvýÍ7fäôéZr{v¡®¾õ'b2:eÑ)ƒ^ý ¶*Âê77‘žî'‰DƒAâñ8J©äY#;Úòb>KJ©IÀ¿æÔX9ÎŒ';xX£BˆVPJMÀI‡ ÎAá=÷ÜÃý÷ßO0l—ÇX±bÅÅÅdggãõ¦Æ´ÏØlÑ‘ÜÄçó1zôhFEuu5{÷îå7Þ@kÍàÁƒéÛ·/:uÂëõºH,s'™G£Q,ËJ)475MS®LÝGòJ‰©9A!HÛõÈÉÉ!'Ç™7Ð+ Rþn -uôð zuœzœœ÷Ce¾’íò H)5§ÎcjãEaœNWÿWk]ñY=/!„-Ó8Ñú àNÙ³gó“Ÿü„ÂÂÂvyŒH$Âïÿ{7‡?‹5]M‘ÇKÏYEè‰D‚ôôt† ÆUW]EMM àwÞÁï÷SPP@ÿþýÝàSkM4u÷ à¬V»MWEâñ8±XÌ Bü~òêŠÔ€t @ÚÎmÁ P^^‹eyðÔÕ7ß W»ÿáœçkâ±8å'*9qø4áêSg œ®!f’§™à©µæÌwÕù’@—迌x˜jý(ðà_ÛÜ !„øSJùpæy<‚“Eß¾}ù·û7f̘Ñn³k×.·Ã|Ò–µÉŒ @.J©éyyyO•——Ÿ¦qˆ)B7’W8|>ýû÷gðàÁTUUqäÈ·kUrÇ«h4ê#Åb17½ÊtÊÇãn’<”Ð!I/ûQ¤íR:`=|ŸÏ^‘úøEíŶm© Suªšš35î‡Áçó1ôJ§ã`yy9Á`Ðý>}šŠŠŠäÞØŸë,¥T7àÿ5^Æ™hþS­õáÏè© !„¸J©¿¥qžG0äÞ{ïå¾ûîÃï÷·hÍuÀJ–H$xóÍ79}ú´Û€Ek}®Ü}9s} PJ=üóŸÿ|hzz:ßýîw)--u„ÊÊJ233³[òšú¢¢"w¥ÄÜ.9¸0…æ n¡¹¹,6[œnjLIÒ$i»” œÄK@ü¼5 ÎþÛ4ÔÖÑPSG}M½{vÇëó¥ÜºO_§GºI¿2íåΜ9“œ~U”µÛ+k†R*˜ ÌžÒZolÁ}¼À,œ‰_Ì'ý4NªÕ/eˆ”B\:”R·/ʲ,n½õV~øarss/t×+++ã½÷Þ£²²Ò=ÓíóùÜô™`0Øt08^´Öž{î¹kGŽéøÛ¶M"‘à׿þ5>ŸI“&Ñ«W/‚ÁàY+#æ¶É±’W3¢ÑhJ݇¹Ì¬”˜¡„‰D‰DRžb¾—- @Ú ñÀº>IÁÚ_|œ@(Xâì1¶;#Ñ'Þ%Ñ#ý$Hñx=xðœu?K)òºg¹?›3KõõõÔ××§ ë Nj¥T']êv`NãÅàî Üg0˜ä%]½g¨à"­u}{?_!„Ÿ¥Tçä‘2d?ûÙÏRæu´‡ 6PZZJuuµ{bÎäõ[–…×ëuSi’Èã¥á«V­Z³jÕª¹ç€€mÛx½^î¾ûn>þøc6nÜÈ¢E‹:t¨Û +-- HmÉk\˜z¤˜ôªäÀÕ§›ýÈ¢KzÇ’¤mŠp†ã¹+ GŽVàózIÔEÁmÛØñ8‰˜Ž%R"yž,Sgdðz-"‘Ñ¨Ó *==Û¶QJqâÄ sÓv«ÿhü3gÕ✥í4ÀTüÔZW'Ý>gÔà:`rãí“ÀBàE­õæözžB!:Ül G)Å‚ èß¿ò …6©©©aãÆ;vŒh4Š905…Ææ€œôó7±‘8^gµ,–)¥†ÓlÛÆ²,ÒÓÓ2dƒ¦¶¶–ÒÒRŠ‹‹Y»v-………ôîÝ;¥–ùRJÇ ƒn`êñxRjA¼^¯[;›¼*‡ÃX–e‚Ù:€ mÓÏ|Ó·o_Μ‰à±<$jRnèA¯uowç—­‰âM«¹O#QJåâ¬Z(š/•¯VJýè‰3¯£œµ|S,–+e@”B|! çÄÛ AƒˆÅbnQ¸9ó܇fïÞ½”––ºg¶“óõ“ÏpÇãq÷Ìv©¹ôh8»Ýü¿ïÛ·/}ûö%süøqöïßO]]&LÀãñ¸÷QJáóùÜýäay½Þ³ŸÏç·Çb1·VÒ ˆ«t @Ú¦?@~~¾[4U[Åç÷÷N-óÉ1Ñ]>¹´ñåñx‡Ãh­9uꔹº] еÖÇ”R“58C¤š[¦¹ªñ+ÙIœÀe°\k½·=žBˆÏ/@ff&@À=x3…Âæl¶×ëmÚ¥ªYZkŽ9‡~èÕõxJ©”ÀÕlÓ\f†šû7’¤HÒ6)3@Nž¨qV?Úò+°™ %¿§S€nVY’ÛÕ%¥_nï@k}\)u5N®æX> BÀ×´Öí3iQ!Ä¥ÄM›q/H* ç϶m7M*‹ …¨®®Æçó¹¬Þ~ûm>ìæñ›ô˲ÔÕÕˆÅb)…Ææ²&+,’‚uéqäýgáÂ…D"¦NJ¯^½RîдÝÔù|><›r‹ÅÜà"yâ¹YK®)2©í²Òq$i›”¼'NÔà;×êG+Y–";;@"á|̇Í,-?~ÜÜôS@¨µ®UJÍÄ) Ÿ ¤{$øBˆË– ¸+ÇŽ# ’žžÞì0¹úúz‰555ƒA‚Á >ŸW^y…3gθ«ú'¥•ªéXTWW‡Ïçsÿö%_Ö„¬€\zÎJÁÒZsà 7°{÷n^zé%<£FbäÈ‘de}Ò4¹=¸Áhòts¬”<ïÃ47H^h.k$H¤•[ðÁ'+ ¥¥øÛ¥þãYÙ”ÂÚëëëÝVtM Ð?µ„Zë¥Ô-À÷àÔ†!„¸<¥4nذ¥K—2yòdÆŒC·nÝÜvñÉg«mÛ¦ªªÊ­)//w‡ šÕ sF:yp\0$‰àõzÝBcs@Ù„ —7˜M^;uêÄ„ ˜4i555ìÞ½›W_}•ôôt ÄÀQJ¹ûW,sަ)WæzÓ +95ˬ¨i­“W@f)¥Š´Ö?›·äò Hë>HZ9VÛLz+ ?uËË>i»kò‰J)Ž;fnú©¬€Zkøg¥Ôàà§ùXB!>×Rj@nºé&&NœÈŽ;x饗ðz½ >œÁƒ“““ƒeY)—uuun—"3“Át429üæzŸÏG]]ééén¾¾ B@ÓŽ[’‚uéIÙ—’÷“D"á¦ã 6Œ#FPSSÃþýûS‚ÀÝgL‡Ðä•´äú¡¦M Ìþ‰DÜ€º°°°YYÙF¥Ôx­uIG¿!— @Z¯8Et}úô ³ñµ`®ÇÅèÙË©û¨©©!-- ¥‡êjgGR¬O51´Ö+¥¬ ßR!ÄÔYi3;wæšk®aâĉTVV²oß>–,YBVV}úô!??Ÿ¬¬,”R)]‹’Ób’»™–ó‰DÂM¹òûýnm‰Y)±¬”?G²réi¶½i*_"‘pW*ú÷ïÖšH$âÞ6¹.p÷óoò¾eV܉„{™™¢µ& ñÀäÖÔÔì/((ØwôèÑ×€·€Õ2N ýHÒzýz÷îí¦DÝ÷½)>\Éûë±g÷Iªª£\ÜïóWKzöpV@ÒÒÒÜB+¯×Ë™3g8uêTrÞ®6¼–‹Ò¸"„â2¢”šôÆ©lö Ñ Æ cøðáœ9s†ðÁpå•W’——ç¶Nµ, ¿ßï¦Å$ 7 «iªLzz:‘HÄ­1)5M:kIréI)Bo®†È|o~ŽF£îÊ—¹ÜÔs$®&øHn¿›œšeö­@ àžÔ'½}èСdgg3þüþJ©‡Š‹‹zå•Wj”RoK€7´Öðþ|aIÒz)-xž=³øÊ-CÑzuu1¶~tœ­[sìx;qñ¿»tuVT|>Ÿû ;‘H‰D’Ó¯Žk­O·éÕ!„ç ”š>yòä·FÍŸÿüg}ðàÁsÎn0ÿ644žžÎСC¹êª«ˆÇãD"÷zÓ%ˤa%O<7)WÉÅéfʵ9›mR·’[KO³+ Í}®ëš­ôx}ºgøðáôìÙ“.]ºðàƒfþèG?š_^^>ÕªU:''g[EEÅŸ7€Í²ÿ] @Z/ °°°Ù+® ÆŒÍgÔ蘀»tÔkw›^‰Bq~ý ;v,555ê…^pÿ6mܸŸÏGQQ‘Û +ùX,»g­“ Ò=ÏYiX€;`МÕRf;$'eÈÁߥ©Ù6¼çZýhî:Àm¿›<ÝÔ‚ƒA7}ˬŠ$¯”¤¥¥Q]]í¦`•••ÐZ_¿xñbµxñâë}>ßÍ&L¸zܸqVQQ]ºtaÆŒjÞ¼yõÖ÷oßþè‹/¾X¡”Z‚Œ¼©µ®ù”ß·Kž ­·˜ÿÎ;ïpâÄ òòòκAÓ`¸GÝ»5N‹±mÛöWq¦¼Û>ûwgFÐsÖ6À©;iR€>Y)µ'Gñ-­õ‡m~uB!Ä'üá˜ôöÛo%###Ÿ4fff²|ùrŽ9¨Q£1b¹¹¹n',Hý{hîgš©$×}˜ %9àH$)iX¦C–9Ûm¢#ß Ñn.8 =ùç¦×™Õp†Æb1·¸\)å¦óùý~·¨===p8ì610KÒsxNkmÒÚwÿW)ÕuíÚµÓ€8o„ ¡Áƒ“ŸŸOÏž=yâ‰':ƒÁ;Ž?~DzeËkÂáð_×µÖr’¸€´ÞŸ€ÿ½wïÞœ+®¸‚qãÆ1wî\¦M›ÆðáÃÝkE.ð0ztWFŽÌÁ¶mJÕ²sWÇÕS_ïä6vêì;kÇý`•••™‹½ÀŒÆ/”RûÀ›À*­u¸]_¹BˆËŠÖºø†RÊsòäÉÿÜoØLyã( IDAT[Ôªª*JJJx÷Ýw©¨¨`РA\qÅtîÜÙM¯2MWÇäÙMs¶Út1ª¯¯wog&Õ€HrijQú…®3ˆ \½^oJÀQWWç¶q®¯¯' ¹5E& ë|ƒÓÜ‹•Rÿ³¸¸x"0733óÆñãÇ;v,W\qÙÙÙÌ›7Ïs×]w}©¡¡áK›7o~bÔ¨Q‡¶lÙòk­õcíûÖ]Ú$i%­õþÆ)áo$‰Áëׯgýúõ1mÚ4fϞ͵×^Ûܰ¤³ô Ò³ ½±Oz;wV‘ŸH~<÷ûÊÊJlÛæäÉ“|ç;ßáСC¬ZµŠÚÚZ€¾8ó:î¢J©í@%ð,ðš‘ !„h ­uB)µRmÛ& 2dȆ BMM GeëÖ­Ô××SPP@QQÁ`0e ®Çãq“;Y–•Ò’7¹óUòeI+ òwíÒtÑEèÉ×™ËM:_òtssYò>c$³f¥¤¥ƒ;a­iüzH)Õ{åÊ•s¹#GŽœ}Í5×øû÷ïOnn. à¿øEá;ï¼ó#¥ÔB­õÞöxÓ¾$iƒÆ dð%ààË@¯ƒ²`Á,X@zz:W_}5³fÍbîܹtïÞý|Û 3ÓÇÕW縭 “¯ÇãTVVròäI7÷uÒ¤I<üðÃ444°aÃÖ¬YÃÚµkÙ¶mZk?0ºqÓ¥J©›¥•œBˆVÒpîƒF,Ò§Ojkk9yò¤Û2×ÜÇL¯6]ŒÌ¢ùÛÖ45«é09Ó5«‘üM»4¹û’{ÁE¦aSg”<ÛÃÔxnVÓö»¦ö(‹¹ÁɹV@Îû´.Å9Áû¬R*mË–-×_îÚµëÍÓ¦Më5nÜ8^{íµ8P~qoÍ› m¤µ®–Ë”Rqv©æúºº:Ö¬YÚ5køÁ~ÀÀ™1c'NdܸqM{˜Ÿ3e˨®®&‹¹éWJ)6mÚÄ´iÓL™2…)S¦päÈþö·¿±jÕ*V¬Xa>Œ_m§·@!Äåå‚‹ÌϱX ¯×K~~>–eQWWçÞÆ(š@Â&ßLªN&FÏj¥ÚHKÓ9‹Ð/Txžü³iµÛt¶‡ \C¡›†eö­äý()ø€6ìKÇ„+¿¾«”¸xñâë€-Ò­4• í@)•<‚“òäÈÏÏçž{îA)Å[o½ÅºuëˆÇãS\\ÌÓO?MNNãÇçK_úÓ¦M##Ùùq¾ ¤¼Ü  MâóùÜT¬¦ ¸ãŽ;¸ãŽ;X·nwÞy§IÑú:€!„hfKKK©­­u‡ó6-Ÿ/'‘H| ”š¨µŽ|Fx-®':×uÉû‘IçkºR¦µn6 Ë!±XÌݶ×ëM‰¬•RP¤”*ŠÇãs—-[Vìk\)ž?¾œÄm @Zï{€•™™Éo¼A à´Ì5ƒpšó“Ÿü„ýèG¼üò˼ûî»Lš4‰áÇ“––ÆèÑ£;v,‰D‚½{÷²eËvìØAyy¹[ÈÞÔ¨Q£xüñÇϺ¼¶¶–E‹ѹsgB¡;é3vÇÔ&ÝÜtoü®”ªŠ¥UœBˆs°áüùùÉÞFŒÁ˜1c°mÛm#oæ˜9 Éé3&ip4=Ã]__瑩¸âŠ»wïÞª”ú%ðg­õ¡Ž}[D+´ª=9è§ÄìGɃ*Mš•©2·3ݰÌþæõ~r8ìñx.ÔÒ9‡ÆÕ‘ŒŒŒè²eËö»ÂáðžùóçWµñý¸lHÒzSÀ™ÁðûýX–E·nݨ¬¬¤¶¶–D"5(NOOç‰'ž`ݺu<÷Üsüþ÷¿gáÂ…ôêÕ‹‚‚ºvíJFF>Ÿ¾}ûÒ«W/>Ì8qâѨ“‚˜››Ë7¿ùMn¹å–³žÔæÍ›)))¡K—.444PWWGVV ÉgjÎóº2€<@!„Íq–4F£QêêêRþ&šÄœ¥6ÁEò0¹äYÉÃä’Ó°Ì ?¥ßùÎw(,,ì§µþùûï¿ÿó~ýúÙ¿ÿkÀÀZ­µäñþ4[Od\hÿ2÷3ÝÒ’ŽäÓ!+y?2£ ü~?[·nu·]XXXÙÒ'ß8ê`008 ±|ùò‰Db·×ëÝ5gΜCÈ€Ìs’¤”“tÚ ##ƒÌÌL÷ºx>lå[#„⋯Mæ¾É)WMÛ¦šT“†•\@lÚ®šô³ÝeË–1räHúôéÈ#˜2eJ×ëýîþýû¿ûç?ÿ9jYÖ_µÖoK´ÖeŸú»$Zâœ+ Í}ßÜuJ)lÛN™%cjŠ’÷¥”;€0‰¸ÁìŠ+X²d Ü3~üø­}1Zë<˲òlÛžºlÙ²°Öz?°;‰ìš?~Ý7p‘¤´ÖZ)Ut5ípÁùù|>w:k0$ Ò­[7"‘ˆ˜`¤OŸ>ôéÓ‡o|ã€D„ÃajjjÐZ“™™I(j¶³U²ÒÒR¶mÛF(¢¦ÆYÜ0>ͤÒÒRvîÜiî²±™ÍØÀ¦Æ‹Bq.-:h¼ÐeÓéÕ&¥Ê¤Ï˜ŽänX&_ß¬Š˜†/ ,Y²äПþô§eÝ»wÿÊĉ»_uÕUÍÝwßíðÁ¯¯®®¾~íÚµºwïÞ;>¼X¬×ZË$õÏÆ9Ûð¶4g¬ijžeYgµv6ûY0¤ªªŠ_|‘­[·УG#=ôÐ[íôºvk­Ó-˦µ¾* %–-[vв¬msæÌy¯ã’&ÈEPJåspV N]KKK›½­ù¥izƒAÒÒÒÈÍÍ¥®®î¬`œ_ÆYYYdee]p ¡±nÝ:w˜a8NéžžžN4eýúõ¬X±Â¬®l¶4ÙL°N†ä!„h4žë:s0Çñz½gÍö°,Ë 8’;¥§§‡ Ø¶í®šÄb±À`­upRêŠW_}õŸÏwÓ¨Q£®7nœ5`ÀºtéÂ5×\£æÌ™3 ¶wïÞ‡/^\£”z'y]kÝâÑfm*B'øPJ¥ ªlZ?dÒ°LqzII ¿úÕ¯8}Ú9ì3fÌæüàóûým DµÖ¶ÖúÍ믿~5À’%K‚¶m÷óx+ýê|ªªªØ±c~¿Ÿ“'OºÓ?c±˜û¡ ‡Ã,_¾œ]»v™»½¼ÔtSÀ*íLïB!.¤Í‹LÊL"‘H™^p˜4,Sœ^WWG("‰àóùܼÿF§ƒó8%ÀSÀSJ©Î6l˜|¹W¯^7Lž<¹Ó°aÃèÙ³']ºtáÁÌü×ý×ùóßzë-;''g}EEÅ_pRµö|o pµKº¹,y¥,¹aIçSJ±~ýz~÷»ß™úèí·ßþæ­·ÞÚë=ÏïæÌ™sÐ\pýõ×G€m_ÖêÕ«ƒíð8_€´Ü/N]ºt!SUU•°k×.æÎËwÞÉ7Þè¶lŽI±jì3Mzz:iii„B!âñ8ÑhÔ FÎÕI `ç΃A¢Ñ(••Ήš¦]BNž<É«¯¾Ê©S§€_ï4³9?R$%„¢åÚtÐh~6+ fÕ>¹%/pÖ09s½I1’»sþ‡ÖºX,RJY/¿üòX`n(ºaÒ¤I#F¥ŠŠŠèܹ33gδn¹å–I “V¯^ýÿ)¥þNkýjß/qnmª'JNçÓZ§Ì1Çcf?ª¯¯çü#o¿ý6]»v=ùàƒ¾>tèЊ¶¾­õA˲~7gΜêó½Ö©S§ÖžçúËŠ - ”º˜1lØ0ž|òIrss)--å…^`É’%¬ZµŠU«V‘ÍW¿úU¾þõ¯3|øp÷þM?4€ bÜz‘ŒŒ B¡@€ììl´ÖTUU¥¤iÅb1Ž?NZZÅÅÅ$ ÷Cgº;D£QvìØÁ’%KLsx8|Ž—g%Ÿ5B!. ]ŠÐMZ Ò~׬j˜â@ @<O9¸4'Û’NÖµhac­Ç†Æ¯G•Ry+V¬˜ Ì4hÐÜñãLJJ~~>ãÇ HòéiS=‘ɉÇãͶq¶, ¯×ËéÓ§yæ™g())ફ®Úöðÿ Ûcp廑Hd‰Ì¹8€œ‡Rêfœy~üã …(//Ççóqÿý÷óðójÕ*ž~úi:ÄsÏ=ÇsÏ=Ç!CøÚ×¾Æ-·ÜBçÎÏÚv]]%%%tïÞP(ä¦i233ÝZÊÊJ¢Ñ(GE)ÅñãÇÝnVæÌéäPWWÇ›o¾éNS>~œw(“R*Ck-Q¹Bˆ–pÛð¶6 ˶mâñ¸›r•H$RÎ\›à" ¦´M5µ & +©IK«$µÖ'€À¥”oÏž=¹ÙÙÙ7‡B¡,à­Ù®h±jÀSv±+jæ2ÓȤö™4ñxœ={öðì³ÏR]]×ë}å+_yë®»îÚÑÏ=¼6wîÜMí°­ËŽ ÍPJeã¤\}Ã\6aÂlÛ¦¤¤„Þ½{ ©­­åøñã 0€… FY´h¿ùÍoصk?üáyì±Ç˜9s&·Þz+×^{-ðÉç£>bûöíŒ5Š+¯¼’œœ‰µµµ=z”P(DVV–ûx¿ýíoS"ú䔫òòr-ZDcW®ÎróR.œ^¤7ºBˆ–rÿ®$ pq¹ûÇ-$÷x<)ݰ’‡É™ÎF–e¹«"f¥$éñÛ|&[kV7~=ØÖí‰YN:ûêÕ«™ à.-J©4œã•¾W_}5÷ÜsS§Nuuη?544°ÿ~w?2­Ãá0/¼ð›69‹,~ä‘GÞìÔ©S›O¸j­÷D"‘?È\¶‘$‰RêÇÀÿ,€iÓ¦ñøããõz‰ÇãÔ×ד••E~~>‡’’¶nÝJNNùùùÄb1***܈¼OŸ>ø|>^{í5ž~úiSÀ˜1c˜7osæÌ!==ÝÖËÊÊØ½{7‡qãÆ‹ÅèÑ£Û·oçèÑ£œ>}:e:ìÚµkùë_ÿjÎ ¿ZRPµجeBq”Rs€åÇÇëõžó@ñ\AÈñãÇ9qâDJ–i[o‚‹X,†ÖŸÏ箊ضí¬G"ž|òI>Lß¾}÷ÿâ¿x @k]«”Úìƒû¦N*]?Ç”R…ÀóÀ sÙàÁƒù‡øæÎ›à&ïC¦ËhII‰;œ2SVVÆ/ùKÊÊʰ,+1wîÜÕwß}÷ævxªÚ¶í5×_ýr$Àm3 @)¥®Þ§›Â½÷ÞË·¿ým÷@?ùË AêÙ³']»v%³e˪««)((  ‡Ù¿?Ó§O' ¡”bÓ¦M<ÿüó,]ºÔ-¼ ƒLž<™ú§¢_¿~h­IOOwÛÖÕՑͶmÛ¨©©¡ººšh4Jmm-‹-bïÞ½à|–ÀI¿:xìýÔÞL!„_XJ©YÀ €cÇŽ¹DKW?l󾯱cœ§”R㇀i<œŸŸÏí·ßμyóÈÎÎNÙ‡lÛ&sèÐ!7`ݰa , ¡¡ÌÌÌê»ï¾ûk¯½¶ÍSï•Rõ–e-š={öÎ ßZ´Äe€(¥:/7jÀ€üìg?càÀÍ É_ ƒAúöíK ààÁƒìÚµ‹cÇŽQ__Ͻ÷ÞK0$‰¸ÝÂá0K–,á™gž¡¸Øi=‘‘Á«¯¾J·nÝRÒ¬ÀY–Þ±c–eQ^^NII /½ô’)F¯Ã)4onºySqœ‰¯GÛõMBqÙPJMÇ™+Å‘#GHKKkqàa¾?vì§Nr»a%§Ï4MÃ2ÓÒÍn“†U__ÏOúSŽ9€ŠŸ|òÉ×/ôÜ-Ë*·m{_<ßׯ_¿=C† ‘ÈÏ¥Ô àwàŒ pÝu×ñÕ¯~•º+fµµµ”––’H$X´h+W® ¨¨èÀ#<²4//¯=Ò¤ŽßNŸ>ýL;lK4’D©ßÿœHûÇ?þ1  gÏžnp¡ $ù«°°ž={ÇÑZÓ¹sg7pS¹L0òñÇóío›íÛ·3wî\}ôQ¼^¯ûágèàÑ£N̰víZ~ÿûß›œÙÃÀÏc-x©uÀšÆ~èB!D«4ÖJ®(--%==½Å‡ùùèÑ£TTT`Y–çÒM^1KM–Çãq·çñxx衇¨­­eèС;ÿã?þcÙE¾ŽpP)µ»¾¾~ÇÍ7ß,Ð?G”R=€{€º™ËûõëÇu×]ÇŒ3(++ãĉ¼üòËìÝ»¥”ž:uê»ßûÞ÷Þ÷xÀµ,ksnnî«£G>÷p6Ñ*—u¢”ò5@ÚÌ™3yüñÇÉÊÊbýúõìܹ“Ñ£G3hÐ ²³³ihhhQRUUEee%sæÌ! aY@ŸÏ—ˆ€3déÌ™3|ûÛßæ¯ý+଄LŸ>9sæ0bÄ,Ë¢¸¸˜úúz~ûÛß²nÝ:s÷wqr&[2ãX«µ–‚)!„m¢”º§S$ ]túÑ£G9sæLJJUs+¦½j<wÓ°L-ÈÂ… yçg¾î·¾õ­Woºé¦’6¾´r˲vÅãñÝuuu%2×áóA)nîƘË-Ë¢S§NTVVbÛ6iii‘üÇ\ÒØ„ ­J©%×]wÝ»í°-ÑŒË=ñãlxà† F(¢°°îÝ»³gÏ6mÚD `äÈ‘Q__ïÖ€4ý*//çý÷ßÇëõrë­·RUUå¦h’™™‰ßïwóeÃá0«V­âwÞáé§Ÿ>ëùååå1uêT´Ö¬Y³†'N€“Fõ°ò/KUÀÉÆcÀ­µü"BÑfJ©ÉÀZ€ýû÷“™™yQõ‰D‚LJÝËLñyò¼ӜŤa™–¼¼ð ìÙ³€+¯¼rÇO<±¼_fDký±Rj_<ßuã7Ö´óöE+(¥çææ~+ÞVUUÕÀ²¬ÄСCwßu×]ï 4¨=V±ª§šl‡m‰s¸¬¥ÔJ`Æ Aƒ¸÷Þ{ …B€SwѳgO ˆÇãlÙ²…;wrå•W2xð`ü~?‘HÄ >Nž<É;#ßïç¶Ûn#‹ÅˆF£î—×ëeÔ¨Qîà¤ýû÷óöÛocÛ6=ö˜™èºd5ót«€Ÿ7¹üN»z ¡µ–œV!„Ÿ ¥ÔD`À¾}ûÜâà–¦aÙ¶Mii)•••x½Î82Ó +¢”rW@L-ˆR ˲8pà¿úկܼ“&MzÿÁ\×é6qà/J©­õ``°ÖºRÊRJÙ OHŠÖçK¯^½r† ÒcìØ±YãÇ÷+¥º+¥ºi­ó”R¾ÖlSk}в¬ß]wÝuÕíý|E* @”‹“Îä Lš4‰™3g’——çÞ&//ÂÂB:wîÌÞ½{yï½÷ÈÌÌ䪫®¢sçÎ:tˆ•+W’žžÎwÞ‰Ö:%ðˆÅb„ÃaÞÿ}æÌ™ÃÀ©¬¬ä/ù‹Ûfð©§žâäÉ“àWc.€>Äù…Ÿ<Õ¼تµ>Ü!o–BˆËžRꜿ›Ó¹sç‹.B/--¥®®Î­‡4ƒM‡)N¯««sÓ°Ö®]ËÂ… M:VÝßÿýß/»á†Úšv…RªÒãñ¼4kÖ¬”¿¥‹/NÏÊÊH$zÍ;wI[GtkÉ’%9>Ÿ//wóxñÄTWWügžG²Zœ‰åu8H8¥µ–³1B!:Tc»Ô÷vïÞMNNÎE¡òÈ#o¶ž¥Ö¶m¯ùðÃß|ôÑGí6nKq‘$iB)¥€YÀÿ¦à¤?Ñ©S'¦OŸÎµ×^K(r[äöîÝ›¢¢":wî̶mÛX»v-‰D‚É“'xï½÷èÑ£×]w¬\¹’††´ÖضͩS§xöÙg©©©gâpõZëãŸÅ{ „Bœ‹Rj4° `ûöíäææ^TºmÛìß¿ß]í°m­5–e¹«ñxœ>úˆçŸžH$‚Ïç‹ÞvÛm+n»í¶=íðâñøâo¼q[;lKÑ €œ‡Rj(ð Nû7?€ßïçšk®qëDÌ*F—.]èÛ·/yyy>|˜ 6PVVÆðáÙ>}:eee¬^½ÚýE«µ¦´´” ˜Ô«ýÀc@ð®´ÌBñy¤”ÊξW^y…)S¦\Tý‡Öš}ûö¹3¶ÌÄsÛ¶ñx<Äb1–/_Ϋ¯¾ŠÖšN:•?ðÀ5jÔévxú§‡Êh‡m !ZIPJu¾ÜSÅ6NIDATŽRŠÁƒ3cÆ ®¼òJ7¨ðûýŒ1‚üü|ü~?J)vîÜÉæÍ›ÝÛh­ùàƒX¼x±é|U<l>ÐZËr°BˆÏ-¥ÔûÀ¸®]»òÃþ›nº ÇÓ¢4,­5{÷îuƒ††w zUUÿýßÿÍöíÛ:tè·~xefff{ ‚Û N:µ¾¶%„h @.Bã0œ¯ã¬Š 4—0sæÌ”:€ñãÇS]]ÍÖ­[ÝÀ#‰ðÊ+¯°yófs÷õ87k­¥J!ÄçžRª?ð*NÇF·ËwÜAVVÖyƒpºg™âs3€ðàÁƒ<ýôÓœ:u Ç“˜={öšþçþ°ž«H$Þ¼þúë×àÔW !>c€´Rã ¦¹€ÍÔ©S™2e „B!§N¶m6mÚÄk¯½fR®À+8uû´Ö›>«×"„B\,¥T§sã·€L€`0ÈüùóùÆ7¾AAAA³)YàtÏRJ¹)WëׯçÅ_$’••Uyß}÷½>~üøöH“ û|¾—gΜ¹¯¶%„h'€´‘Rjðp;ðù|Œ?ž)S¦››Ë¦M›XµjeeeænGgpR¯öâ¬~Èÿ!„—¥Tgàà»@7˲7n_ÿú×™4iRJ,€]»vNç«W^y…•+Wзoß}ôÑe]ºtih‡§vTkýÛ/ùËí°-!D;’¤(¥º÷â´ÑízŽ›…×e@9ð‘Öºì·B!.J©tà.à{@syQQ7ß|3³fÍ¢K—.|ôÑGÔÔÔðôÓOsàÀ,˲g̘ñÎ}÷Ý·±=ž‹ÖzóÑ£G_ýÖ·¾Õµ#Bˆv&H;SJùqêD à NÏôUÀœAƒ‡dÕC!ÄRÊf㬈̦±½eYŒ=šaÆqêÔ)V¯^Mmm-Á`°öî»ï~ãK_úÒ‘vxø¸eYš3gÎí°-!ħDOQãL‘ Ä€Ji¯+„âr¡”|S)u«Öº°éõùùùG}ôÑ¿ôêÕ+ÜWQ__ÿÒ¼yóÚ#B|Š$B!ħnòäÉ7;vìÛ¶{¤¥¥¥Íœ9³döìÙ'ÛcÛ¶mïóûý/Ïš5«=!ħL!„B|&^ýõL Ïï÷çj­ólÛîfYVžÖ:³…›Ð‰DbõæÍ›W<úè£2CKˆK„ B!„ø\Y¼xqzfffžmÛyJ©nZkóo's¥T½eY‹fÏž½ó³|®Bˆ‹'ˆB!. Ë—/$‰®~¿?8,)WB\š$B!„Btë³~B!„BˆË‡ B!„Bˆ#ˆB!„¢ÃH"„B!„è0€!„B!:Œ B!„Bˆ#ˆB!„¢ÃH"„B!„è0€!„B!:Œ B!„Bˆ#ˆB!„¢ÃH"„B!„è0€!„B!:Œ B!„Bˆ#ˆB!„¢ÃH"„B!„è0€!„B!:Œ B!„Bˆ#ˆB!„¢ÃH"„B!„è0€!„B!:Œ B!„Bˆ#ˆB!„¢ÃH"„B!„è0€!„B!:Œ B!„Bˆ#ˆB!„¢ÃH"„B!„è0€!„B!:Œ B!„Bˆ#ˆB!„¢ÃH"„B!„è0€!„B!:Œ B!„Bˆ#ˆB!„¢ÃH"„B!„è0€!„B!:Œ B!„Bˆ#ˆB!„¢ÃH"„B!„è0€!„B!:Œ B!„Bˆ#ˆB!„¢ÃH"„B!„è0€!„B!:Œ B!„Bˆ#ˆB!„¢ÃH"„B!„è0€!„B!:Œ B!„Bˆ#ˆB!„¢ÃH"„B!„è0€!„B!:Ìÿ“àXIøAIEND®B`‚lasso-2.8.2/docs/lasso-book/figures/PaxHeaders/sso-brws-post-1.svg0000644000000000000000000000012714404126117022014 xustar0028 mtime=1678814287.6737638 29 atime=1678814288.28176725 30 ctime=1678814323.189965723 lasso-2.8.2/docs/lasso-book/figures/sso-brws-post-1.svg0000644000175000017500000064367514404126117025305 0ustar00bdauvergnebdauvergne00000000000000 image/svg+xml ServiceProvider IdentityProvider 1 HTTP 2 HTTP 3 HTTP HTTP 4 lasso-2.8.2/docs/lasso-book/PaxHeaders/Makefile.am0000644000000000000000000000013213766621500016765 xustar0030 mtime=1608196928.758895268 30 atime=1678814114.660791227 30 ctime=1678814323.089965153 lasso-2.8.2/docs/lasso-book/Makefile.am0000644000175000017500000000163013766621500022235 0ustar00bdauvergnebdauvergne00000000000000MAINTAINERCLEANFILES = Makefile.in if HAVE_INKSCAPE if HAVE_XSLTPROC SUBDIRS = figures endif endif docdir = $(datadir)/doc/lasso LASSOBOOK_FILES = book.rst common-knowledge.rst getting-lasso.rst \ integration.rst language-bindings.rst lasso-architecture.rst \ liberty-architecture.rst other-profiles.rst preface.rst \ single-sign-on.rst SP_DOC_FILES = writing-a-c-sp.txt writing-a-php-sp.txt writing-a-java-sp.txt \ writing-a-saml2-php-sp.txt SP_DOC_HTML = writing-a-c-sp.html writing-a-php-sp.html writing-a-java-sp.html \ writing-a-saml2-php-sp.html if HAVE_REST2HTML doc_DATA = $(SP_DOC_HTML) book.html else doc_DATA = $(SP_DOC_FILES) $(LASSOBOOK_FILES) endif %.html: %.txt $(REST2HTML) --stylesheet=default.css --link-stylesheet $? > $@ %.html: %.rst $(REST2HTML) $? > $@ CLEANFILES = $(SP_DOC_HTML) book.html EXTRA_DIST = lasso-book.txt $(LASSOBOOK_FILES) $(SP_DOC_FILES) default.css lasso-2.8.2/docs/lasso-book/PaxHeaders/other-profiles.rst0000644000000000000000000000013213766621500020425 xustar0030 mtime=1608196928.762895301 30 atime=1678814299.917833334 30 ctime=1678814323.105965244 lasso-2.8.2/docs/lasso-book/other-profiles.rst0000644000175000017500000000020013766621500023665 0ustar00bdauvergnebdauvergne00000000000000============== Other Profiles ============== That would be like the single sign-on chapter but harder better faster stronger. lasso-2.8.2/docs/lasso-book/PaxHeaders/writing-a-java-sp.txt0000644000000000000000000000013213766621500020732 xustar0030 mtime=1608196928.762895301 30 atime=1678814298.965827925 30 ctime=1678814323.109965268 lasso-2.8.2/docs/lasso-book/writing-a-java-sp.txt0000644000175000017500000002766313766621500024220 0ustar00bdauvergnebdauvergne00000000000000========================================== Writing a Liberty Service Provider in Java ========================================== :author: Nicolas Clapiès :contact: nclapies@entrouvert.com :date: $Date$ :revision: $Revision$ :copyright: Copyright © 2004-2007 Entr'ouvert .. contents:: Table of Contents .. section-numbering:: Lasso Java Binding Settings =========================== Java binding of Lasso is implemented by the Java package lasso.jar. In order to compile Java sources importing this package, you need to set environment variable CLASSPATH:: export CLASSPATH=$CLASSPATH:/path/to/lasso/jar/lasso.jar Lasso Java package is linked to C Lasso library thanks to JNI interface library. Under UNIXes like Linux, the library is named linjlasso.so. Under Mac OS X, library is named libjlasso.dynlib. Windows systems need jlasso.dll. You need to add library directory path to system library loader. For UNIXes system with bash, command is like:: export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/lasso/jni/interface/ where /path/to/lasso/jni/interface/ is the Lasso JNI interface hosting directory. Liberty and Lasso profiles ========================== Lasso provides the necessary functions to implement Liberty Alliance profiles, as defined in the `Liberty ID-FF Bindings and Profiles Specification`_ : - Single Sign-On and Federation - Single Logout - Federation Termination Notification Lasso settings ============== Java applications first need to import Lasso package:: import com.entrouvert.lasso.*; Service Provider keys and metadata files ======================================== Liberty key files ----------------- Service Provider needs private and public keys to sign sent messages. Private and public keys are loaded from PEM files by Lasso. If you don't have PEM format keys, you need to create them. To create a couple public key/private key with OpenSSL, use the following commands: Create a private key in a file named name-of-the-private-key.pem:: openssl genrsa -out name-of-the-private-key.pem 2048 Extract the public key from the private key in a file named name-of-the-public-key.pem:: openssl rsa -in name-of-the-private-key.pem -pubout \ -out name-of-the-public-key.pem Your Service Provider also needs Identity Provider public key to verify received messages. You must get it from your Identity Provider. Liberty Metadata files ---------------------- Metadata are xml document describing provider configuration, that is its identifier, urls where to send him requests and supported Liberty Alliance profiles (that is methods describing how to send or process requests). Your Service Provider needs Identity Provider metadata to know where to send requests and how to process the requests he receives from the Identity Provider. You must get them from your Identity Provider. Then, you must create some metadata for your Service Provider and give them to your Identity Provider as well. Here is an example service provider metadata that you will have to adapt to your needs:: http://sp.example.com/liberty/soap-endpoint sp.example.com/liberty/single-logout http://sp.example.com/liberty/assertion-consumer-service http://projectliberty.org/profiles/fedterm-idp-soap http://projectliberty.org/profiles/fedterm-idp-http http://projectliberty.org/profiles/slo-idp-soap http://projectliberty.org/profiles/slo-idp-http http://projectliberty.org/profiles/slo-sp-soap true Example Organization Where sp.example.com is the domain name of Service Provider. ``http://sp.example.com/liberty/metadata`` is the Service Provider Liberty identifier. ``http://sp.example.com/liberty/soap-endpoint`` is the Service Provider SOAP endpoint where Identity Provider send SOAP single logout or defederation requests. ``http://sp.example.com/liberty/assertion-consumer-service`` is the Service Provider assertion consumer url where Identity Provider must return single sign on authentication response. ``http://sp.example.com/liberty/single-logout`` is the Service Provider single logout url. Service Provider can initiate single logout from this url or process HTTP single logout request from Identity Provider. ` More information about these metadatas can be found in Liberty Alliance specifications. Lasso Server and remote providers settings ========================================== LassoServer ----------- Every time needing to initiate a Liberty Profile or process a Liberty request, Lasso needs to set a Lasso Profile object with a Lasso Server to set Service Provider informations (private key and metadata) and identity Provider informations (public key, certificate and metadata). The Server object may be created as follows:: Server lassoServer = new Server("sp-metadata.xml", "sp-privatekey.pem", null, null); lassoServer.addProvider(lasso.PROVIDER_ROLE_IDP, "idp-metadata.xml", "idp-publickey.pem", null); - sp-metadata.xml is the Liberty metadata file of the service provider - idp-metadata.xml is the Liberty metadata file for the identity provider - sp-privatekey.pem is the service provider private key; used to sign documents - idp-publickey.pem is the identity provider public key; used to verify signature in documents sent by the identity provider Serialisation ------------- It can be useful to dumps Server object and save it for next use. LassoServer objects can be serialised into a XML formatted string:: String lassoServerDump = lassoServer->dump();` It is then really easy to get back properly constructed objects:: Server lassoServer = Server.newFromDump(lassoServerDump); Single Sign On ============== Initiating Single Sign On:: Login lassoLogin = new Login(lassoServer); lassoLogin.initAuthnRequest(lassoServer.getProviderIds().getItem(0), lasso.HTTP_METHOD_REDIRECT); LibAuthnRequest authnRequest = (LibAuthnRequest) login.getRequest(); authnRequest.setNameIdPolicy(lasso.LIB_NAMEID_POLICY_TYPE_FEDERATED); authnRequest.setProtocolProfile(lasso.LIB_PROTOCOL_PROFILE_BRWS_ARTIFACT); lassoLogin.buildAuthnRequestMsg(); String msgUrl = lassoLogin.getMsgUrl(); Processing Single Sign On Identity Provider Artifact response from AssertionConsumerServiceURL metadata URL:: lassoLogin.initRequest(queryString, lasso.HTTP_METHOD_REDIRECT); lassoLogin.buildRequestMsg(); String soapEndpoint = lassoLogin.getMsgUrl(); String soapRequestMsg = lassoLogin.getMsgBody(); // If a lassoSessionDump or a lassoIdentityDump was saved, restore them. lassoLogin.setSessionFromDump(lassoSessionDump); lassoLogin.setIdentityFromDump(lassoIdentityDump); try { lassoLogin.acceptSso(); } catch (RuntimeException e) { } String lassoSessionDump = lassoLogin.getSession().dump(); String lassoIdentityDump = lassoLogin.getIdentity().dump(); String nameIdentifier = ((SamlNameIdentifier)lassoLogin.getNameIdentifier()).getContent(); Single Logout ============= Initiate SOAP Single Logout from Service Provider ------------------------------------------------------- Initiating single logout from SingleLogoutServiceURL metadata url:: Logout lassoLogout = new Logout(sp.server); lassoLogout.setSessionFromDump(lassoSessionDump); lassoLogout.setIdentityFromDump(lassoIdentityDump); lassoLogout.initRequest(sp.server.getProviderIds().getItem(0), lasso.HTTP_METHOD_SOAP); lassoLogout.buildRequestMsg(); String soapEndpoint = lassoLogout.getMsgUrl(); String soapRequestMsg = lassoLogout.getMsgBody(); // Send SOAP request and get SOAP response ... try { lassoLogout.processResponseMsg(soapResponseMsg); } catch (RuntimeException e) { // an error occured return; } // Everything is ok, remove lasso session dump from application storage Process Single Logout HTTP request from Identity Provider ------------------------------------------------------------- Process single logout from SoapEndpoint metadata url:: Logout lassoLogout = new Logout(lassoServer); lassoLogout.processRequestMsg(logoutRequestMsg); lassoLogout.setIdentityFromDump(lassoIdentityDump); lassoLogout.setSessionFromDump(lassoSessionDump); try { lassoLogout.validateRequest(); } catch (RuntimeException e) { } lassoLogout.buildResponseMsg(); String soapResponseMsg = lassoLogout.getMsgBody(); Defederation ============ Processing SOAP defederation from SoapEndpoint metadata url:: if (lasso.getRequestTypeFromSoapMsg(soapRequestMsg) == lasso.REQUEST_TYPE_DEFEDERATION) { Defederation lassoDefederation = new Defederation(lassoServer); lassoDefederation.processNotificationMsg(soapRequestMsg); lassoDefederation.setIdentityFromDump(lassoIdentityDump); try { lassoDefederation.validateNotification(); } catch () { // an error occured } // return 204 HTTP status code } Database Considerations ======================= Lasso has been designed to let the service provider keep on using existing databases. Typically there is already a table describing users; just add an identity dump column to the existing table: ======= ======================================== ============== User Id existing data (name, address...) Identity dump ======= ======================================== ============== 1 ... ... 2 ... ... ======= ======================================== ============== Mapping between existing users and name identifiers sent by the identity provider can be done with a simple table. =============== ======= Name Identifier User Id =============== ======= AQWWRRS... 1 CGFASDE... 2 YYSSSDS... 1 =============== ======= .. note:: A separate table is needed because one user Id could map to several name identifiers; in case there are several identity providers. Sessions are also commonly stored in databases; just add a session dump column to the existing session table: ========== ================= ============= Session Id misc session data Session dump ========== ================= ============= 6744066 ... ... 3338824 ... ... ========== ================= ============= Likewise sessions should be mapped to name identifiers. =============== ========== Name Identifier Session Id =============== ========== AQWWRRS... 3338824 =============== ========== API Reference ============= - LassoLogin_ - LassoLogout_ - LassoIdentity_ - LassoServer_ - LassoSession_ .. _Liberty ID-FF Bindings and Profiles Specification: http://www.projectliberty.org/liberty/content/download/319/2369/file/draft-liberty-idff-bindings-profiles-1.2-errata-v2.0.pdf .. _LassoLogin: /documentation/api-reference/lassologin.html .. _LassoLogout: /documentation/api-reference/lassologout.html .. _LassoIdentity: /documentation/api-reference/lassoidentity.html .. _LassoServer: /documentation/api-reference/lassoserver.html .. _LassoSession: /documentation/api-reference/lassosession.html lasso-2.8.2/docs/lasso-book/PaxHeaders/lasso-book.txt0000644000000000000000000000013213766621500017543 xustar0030 mtime=1608196928.762895301 30 atime=1678098073.469516349 30 ctime=1678814323.093965176 lasso-2.8.2/docs/lasso-book/lasso-book.txt0000644000175000017500000000501713766621500023016 0ustar00bdauvergnebdauvergne00000000000000############## The Lasso Book ############## ================= Table of Contents ================= .. contents:: Lasso Book =================== General Information =================== About This Manual ================= This is the Lasso Book. Because this manual serves as a reference, it does not provide general instruction on Liberty Alliance or web concepts. It also will not teach you how to use your operating system or command-line interpreter. The Lasso Software is under constant development, and this manual is updated frequently as well. The most recent version of the manual is available online in at http://lasso.entrouvert.org/book. A copy of this book is distributed with each source code release of Lasso. For binary distributions, please check with your vendor. The primary document is the reStructuredText file. The HTML version is produced automatically using ``rest2html``. If you have any suggestions concerning additions or corrections to this manual, please send them to the Lasso development mailing-list. This manual is maintained by the Lasso Documentation Team (see AUTHORS_ for details). For the many other contributors, see section Credits_. The copyright to this manual is owned by the French company Entr'ouvert. See section `Book Copyright and Permissions Notice`_. Lasso and the Lasso logo are trademarks of Entr'ouvert. Other trademarks and registered trademarks referred to in this manual are the property of their respective owners, and are used for identification purposes only. .. _README: .. include:: ../../README .. _INSTALL: .. include:: ../../INSTALL .. _AUTHORS: .. include:: ../../AUTHORS ============================== Servers, Identities & Sessions ============================== FIXME ================= Profiles Overview ================= FIXME ===== Login ===== FIXME ====== Logout ====== FIXME .. _README.WIN32: .. include:: ../../README.WIN32 =================================== Tips For Writing Lasso Applications =================================== FIXME =============== Troubleshooting =============== FIXME ============ Contributing ============ FIXME .. _HACKING: .. include:: ../../HACKING ======= Credits ======= We would like to thank the following for their contributions to this text. - Frédéric Péters for its future constructive criticisms. And to all of you who commented on and helped refine this document. Thanks. ===================================== Book Copyright and Permissions Notice ===================================== FIXME lasso-2.8.2/docs/lasso-book/PaxHeaders/book.rst0000644000000000000000000000013213766621500016415 xustar0030 mtime=1608196928.758895268 30 atime=1678814299.833832858 30 ctime=1678814323.093965176 lasso-2.8.2/docs/lasso-book/book.rst0000644000175000017500000000170513766621500021670 0ustar00bdauvergnebdauvergne00000000000000~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Building Liberty Services with Lasso ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ :Author: Frederic Peters :Contact: fpeters@entrouvert.com :date: $Date$ :Copyright: Copyright © 2004-2007 Entr'ouvert .. contents:: Table of Contents .. section-numbering:: This work is licensed under the GNU General Public License. To view a copy of this license, visit http://www.gnu.org/copyleft/gpl.html. .. include:: preface.rst .. include:: liberty-architecture.rst .. include:: lasso-architecture.rst .. include:: getting-lasso.rst .. include:: common-knowledge.rst .. include:: single-sign-on.rst .. include:: integration.rst .. include:: other-profiles.rst .. include:: language-bindings.rst .. appendix with hints on openssl usage ? .. and where should the info about metadata files go ? .. a note about GLib; g_free() and other GLib objects exposed to the developer. .. quick overview of the HTTP protocol status codes (302, etc.) lasso-2.8.2/docs/lasso-book/PaxHeaders/common-knowledge.rst0000644000000000000000000000013213766621500020730 xustar0030 mtime=1608196928.758895268 30 atime=1678814299.897833222 30 ctime=1678814323.093965176 lasso-2.8.2/docs/lasso-book/common-knowledge.rst0000644000175000017500000001240013766621500024175 0ustar00bdauvergnebdauvergne00000000000000====================== Common Lasso Knowledge ====================== Starting with basics on using Lasso in a given program. Lasso Projects Basics ===================== Lasso functions are defined in several header files typically located in ``/usr/include/lasso/`` or ``/usr/local/include/lasso/``. It is possible to include individual files even if the main lasso.h is sufficient most often. The first thing to do is then to call ``lasso_init()``. Similarly the last thing will be to call ``lasso_shutdown()``. The smallest and useless Lasso project will therefore be:: #include int main(int argc, char *argv[]) { lasso_init(); printf("Hello world.\n"); lasso_shutdown(); return 0; } Lasso uses a tool called ``pkg-config`` to know the necessary flags for compilation and linking. :: $ pkg-config lasso --cflags -DXMLSEC_CRYPTO=\"openssl\" -DXMLSEC_LIBXML_260=1 -D__XMLSEC_FUNCTION__=__FUNCTION__ -DXMLSEC_NO_XKMS=1 -DXMLSEC_NO_CRYPTO_DYNAMIC_LOADING=1 -DXMLSEC_CRYPTO_OPENSSL=1 -I/usr/include/lasso -I/usr/include/libxml2 -I/usr/include/xmlsec1 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include $ pkg-config lasso --libs -llasso -lxmlsec1-openssl -lxmlsec1 -lssl -lcrypto -ldl -lgobject-2.0 -lxslt -lxml2 -lpthread -lz -lm -lglib-2.0 Creating an executable from the previous sample *will then be* a simple matter of calling gcc with the right flags Creating an executable from the previous sample would then a simple matter of calling ``gcc`` with the right flags. But there is currently in bug in XMLSec, the library used by Lasso to provide XML Signature and XML Encryption support. It is possible to workaround the bug:: $ gcc hello.c -o hello $(pkg-config lasso --cflags --libs) :4:16: missing terminating " character $ gcc hello.c -o hello $(pkg-config xmlsec1 --cflags --libs | tr -d '\\') $ ./hello Hello world. .. XXX talks about autoconf/automake; that really helps. But that could be in an appendix. Lasso Objects ============= The Lasso Architecture chapter described the different objects provided by Lasso. The profile objects will be detailed in the following chapters; common objects such as server, identity and session are explained here. LassoServer ----------- A ``LassoServer`` object may be created as follows: :: LassoServer *server; server = lasso_server_new("sp-metadata.xml", NULL, "sp-private-key.pem", "sp-crt.pem", lassoSignatureMethodRsaSha1); lasso_server_add_provider(server, "idp-metadata.xml", "idp-public-key.pem", "ca-crt.pem"); - ``sp-metadata.xml`` is the Liberty metadata file for the service provider - ``idp-metadata.xml`` is the Liberty metadata file for the identity provider - ``sp-private-key.pem`` is the service provider private key; used to sign documents - ``sp-crt.pem`` is the service provider certificate; sent within signed documents - ``idp-public-key.pem`` is the identity provider public key; used to verify signature in documents sent by the identity provider - ``ca-crt.pem`` is the certificate of the certification authority used by the identity provider. It is of course possible to have several calls to ``lasso_server_add_provider`` if there are more than one identity provider. LassoProfile ------------ This is the virtual base class for profiles. It notably provides access to the identity and session parts of a profile. See below for examples. LassoIdentity ------------- :: /* profile is a pointer to a LassoProfile object */ LassoIdentity *identity; if (lasso_profile_is_identity_dirty(profile)) { identity = lasso_profile_get_identity(profile); if (identity) { dump = lasso_identity_dump(identity); } } LassoSession ------------ :: /* profile is a pointer to a LassoProfile object */ LassoSession *session; if (lasso_profile_is_session_dirty(profile)) { session = lasso_profile_get_session(profile); if (session) { dump = lasso_session_dump(session); } } Serialization ------------- ``LassoServer``, ``LassoIdentity`` and ``LassoSession``objects can be serialized into XML files. Example with a ``LassoServer``:: gchar *dump; FILE *fd; dump = lasso_server_dump(server); /* write dump into a file, a database, whatever */ g_free(dump); .. note:: ``lasso_server_dump`` (and other Lasso dump functions) allocates memory through GLib. ``g_free`` is the function to use instead of ``free`` to release memory. It is then really easy to have properly constructed objects returned:: LassoServer *server; gchar *dump; /* restore dump from file, database, whatever */ server = lasso_server_new_from_dump(dump); .. warning:: The server dump only contains the filenames; not the actual file contents. Files should not be moved afterwards. The functions are: ================ ==================== ============================= Object Dump Restore ================ ==================== ============================= LassoServer lasso_server_dump lasso_server_new_from_dump LassoIdentity lasso_identity_dump lasso_identity_new_from_dump LassoSession lasso_session_dump lasso_session_new_from_dump ================ ==================== ============================= lasso-2.8.2/docs/lasso-book/PaxHeaders/Makefile.in0000644000000000000000000000013214404125673016776 xustar0030 mtime=1678814139.512929651 30 atime=1678814149.764986895 30 ctime=1678814323.089965153 lasso-2.8.2/docs/lasso-book/Makefile.in0000644000175000017500000006137114404125673022256 0ustar00bdauvergnebdauvergne00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = docs/lasso-book ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ac_check_class.m4 \ $(top_srcdir)/m4/ac_check_classpath.m4 \ $(top_srcdir)/m4/ac_check_junit.m4 \ $(top_srcdir)/m4/ac_prog_jar.m4 \ $(top_srcdir)/m4/ac_prog_java.m4 \ $(top_srcdir)/m4/ac_prog_java_works.m4 \ $(top_srcdir)/m4/ac_prog_javac.m4 \ $(top_srcdir)/m4/ac_prog_javac_works.m4 \ $(top_srcdir)/m4/ac_prog_javah.m4 \ $(top_srcdir)/m4/ac_try_compile_java.m4 \ $(top_srcdir)/m4/as-compiler-flag.m4 \ $(top_srcdir)/m4/dps_java_check_class.m4 \ $(top_srcdir)/m4/dps_xtra_classpath.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h \ $(top_builddir)/lasso/lasso_config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(docdir)" DATA = $(doc_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` DIST_SUBDIRS = figures am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CHECK_CFLAGS = @CHECK_CFLAGS@ CHECK_LIBS = @CHECK_LIBS@ CLASSPATH_JUNIT = @CLASSPATH_JUNIT@ CLASSPATH_OPT = @CLASSPATH_OPT@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CSHARPCILINTERPRETER = @CSHARPCILINTERPRETER@ CSHARPCOMPILER = @CSHARPCOMPILER@ CSHARPCYGPATH_W = @CSHARPCYGPATH_W@ CSHARPDYNAMICLINKING = @CSHARPDYNAMICLINKING@ CSHARPLIBRARYPREFIX = @CSHARPLIBRARYPREFIX@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEBUGGING = @DEBUGGING@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLL_FILENAME = @DLL_FILENAME@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GACUTIL = @GACUTIL@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HTML_DIR = @HTML_DIR@ INKSCAPE = @INKSCAPE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVAC_FLAGS = @JAVAC_FLAGS@ JAVAH = @JAVAH@ JAVAH_FLAGS = @JAVAH_FLAGS@ JAVA_INCLUDE = @JAVA_INCLUDE@ JAVA_JUNIT = @JAVA_JUNIT@ JAVA_VERSION = @JAVA_VERSION@ JDK_INCLUDE = @JDK_INCLUDE@ JNI_EXTRA_LDFLAGS = @JNI_EXTRA_LDFLAGS@ JUNIT = @JUNIT@ LASSO_APP_DEFINES = @LASSO_APP_DEFINES@ LASSO_CFLAGS = @LASSO_CFLAGS@ LASSO_CORE_CFLAGS = @LASSO_CORE_CFLAGS@ LASSO_CORE_LIBS = @LASSO_CORE_LIBS@ LASSO_DEFINES = @LASSO_DEFINES@ LASSO_DOCDIR = @LASSO_DOCDIR@ LASSO_LIBS = @LASSO_LIBS@ LASSO_PUB_CFLAGS = @LASSO_PUB_CFLAGS@ LASSO_STATIC_BINARIES = @LASSO_STATIC_BINARIES@ LASSO_VERSION_INFO = @LASSO_VERSION_INFO@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PERLINSTALLSITEARCH = @PERLINSTALLSITEARCH@ PERLMAN3DIR = @PERLMAN3DIR@ PERL_CFLAGS = @PERL_CFLAGS@ PERL_VERSION = @PERL_VERSION@ PHP5 = @PHP5@ PHP5_CONFIG = @PHP5_CONFIG@ PHP5_CONFIG_DIR = @PHP5_CONFIG_DIR@ PHP5_EXTENSION_DIR = @PHP5_EXTENSION_DIR@ PHP5_INCLUDES = @PHP5_INCLUDES@ PHP5_INCLUDE_DIR = @PHP5_INCLUDE_DIR@ PHP5_LDFLAGS = @PHP5_LDFLAGS@ PHP5_LIBS = @PHP5_LIBS@ PHP5_PREFIX = @PHP5_PREFIX@ PHP5_UNPREFIXED_EXTENSION_DIR = @PHP5_UNPREFIXED_EXTENSION_DIR@ PHP5_VERSION = @PHP5_VERSION@ PHP7 = @PHP7@ PHP7_CONFIG = @PHP7_CONFIG@ PHP7_CONFIG_DIR = @PHP7_CONFIG_DIR@ PHP7_EXTENSION_DIR = @PHP7_EXTENSION_DIR@ PHP7_INCLUDES = @PHP7_INCLUDES@ PHP7_INCLUDE_DIR = @PHP7_INCLUDE_DIR@ PHP7_LDFLAGS = @PHP7_LDFLAGS@ PHP7_LIBS = @PHP7_LIBS@ PHP7_PREFIX = @PHP7_PREFIX@ PHP7_UNPREFIXED_EXTENSION_DIR = @PHP7_UNPREFIXED_EXTENSION_DIR@ PHP7_VERSION = @PHP7_VERSION@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PYTHON = @PYTHON@ PYTHON_VERSION = @PYTHON_VERSION@ PY_CFLAGS = @PY_CFLAGS@ PY_DYNLOAD = @PY_DYNLOAD@ PY_EXTRA_LIBS = @PY_EXTRA_LIBS@ PY_LIB_A = @PY_LIB_A@ PY_LIB_LOC = @PY_LIB_LOC@ PY_SITE_PACKAGES = @PY_SITE_PACKAGES@ RANLIB = @RANLIB@ RC = @RC@ REST2HTML = @REST2HTML@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_VERSION = @SWIG_VERSION@ TAR = @TAR@ TESTS_JUNIT = @TESTS_JUNIT@ UPCASED_DLL_FILENAME = @UPCASED_DLL_FILENAME@ VERSION = @VERSION@ VERSION_UNDERSCORED = @VERSION_UNDERSCORED@ WINDOWS_VERSION = @WINDOWS_VERSION@ XSLTPROC = @XSLTPROC@ Z_CFLAGS = @Z_CFLAGS@ Z_LIBS = @Z_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = $(datadir)/doc/lasso dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ uudecode = @uudecode@ MAINTAINERCLEANFILES = Makefile.in @HAVE_INKSCAPE_TRUE@@HAVE_XSLTPROC_TRUE@SUBDIRS = figures LASSOBOOK_FILES = book.rst common-knowledge.rst getting-lasso.rst \ integration.rst language-bindings.rst lasso-architecture.rst \ liberty-architecture.rst other-profiles.rst preface.rst \ single-sign-on.rst SP_DOC_FILES = writing-a-c-sp.txt writing-a-php-sp.txt writing-a-java-sp.txt \ writing-a-saml2-php-sp.txt SP_DOC_HTML = writing-a-c-sp.html writing-a-php-sp.html writing-a-java-sp.html \ writing-a-saml2-php-sp.html @HAVE_REST2HTML_FALSE@doc_DATA = $(SP_DOC_FILES) $(LASSOBOOK_FILES) @HAVE_REST2HTML_TRUE@doc_DATA = $(SP_DOC_HTML) book.html CLEANFILES = $(SP_DOC_HTML) book.html EXTRA_DIST = lasso-book.txt $(LASSOBOOK_FILES) $(SP_DOC_FILES) default.css all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign docs/lasso-book/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign docs/lasso-book/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-docDATA: $(doc_DATA) @$(NORMAL_INSTALL) @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(docdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(docdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(docdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(docdir)" || exit $$?; \ done uninstall-docDATA: @$(NORMAL_UNINSTALL) @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(docdir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(DATA) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(docdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-docDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-docDATA .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-docDATA install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-docDATA .PRECIOUS: Makefile %.html: %.txt $(REST2HTML) --stylesheet=default.css --link-stylesheet $? > $@ %.html: %.rst $(REST2HTML) $? > $@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lasso-2.8.2/docs/lasso-book/PaxHeaders/preface.rst0000644000000000000000000000013213766621500017070 xustar0030 mtime=1608196928.762895301 30 atime=1678814299.873833084 30 ctime=1678814323.105965244 lasso-2.8.2/docs/lasso-book/preface.rst0000644000175000017500000000404213766621500022340 0ustar00bdauvergnebdauvergne00000000000000======= Preface ======= In a digitalised world where both businesses and consumers want security in their transactions the notion of identity has become more and more crucial. Today one's identity on the network is fragmented across various identity providers, employers, business services and other communities. This fragmentation leads to partial and often unsatisfying customers-to-business relationships. A Federated Network Identity allows new business opportunites and new economies of scale. In a world of federated commerce a user's identity, preferences, buying habits and history, are managed by the user himself and securely exchanged with the organisations of the user's choosing. The Liberty Alliance Project ============================ The Liberty Alliance Project was formed in September 2001 to develop open standards for federated network identity management and identity-based services. Its goals are to ensure interoperability, support privacy, and promote adoption of its specifications, guidelines and best practices. The Alliance is made up of more than 150 members, representing a worldwide cross-section of organizations ranging from educational institutions and government organizations, to service providers and financial institutions, to technology vendors and wireless providers. The Lasso Project ================= In July 2003 Entr'ouvert started to develop the "Carte de Vie Quotidienne" project for the commune of Vandoeuvre-les-Nancy. This project quickly drove us to take interest in cross-site authentication problems. We identified Liberty Alliance specifications as the only ones potentially able to satisfy our need for a strong authentication, coupled with private life respect. Lasso is a library written in C which means it can be easily integrated within any kind of web service whenever a strong authentication is required. Lasso has been the first implementation of Liberty Alliance released under the GNU GPL license. Acknowledgments =============== Figures use drawings from GNOME Gorilla theme by Jakub 'jimmac' Steiner. lasso-2.8.2/docs/lasso-book/PaxHeaders/writing-a-saml2-php-sp.txt0000644000000000000000000000013113766621500021613 xustar0030 mtime=1608196928.762895301 30 atime=1678814299.437830608 29 ctime=1678814323.11396529 lasso-2.8.2/docs/lasso-book/writing-a-saml2-php-sp.txt0000644000175000017500000003273713766621500025100 0ustar00bdauvergnebdauvergne00000000000000========================================= Writing a SAML2 service Provider in PHP ========================================= :author Nicolas Clapiès :contact: nclapies@entrouvert.com :date: $Date$ :revision: $Revision$ :copyright: Copyright © 2004-2007 Entr'ouvert .. contents:: Table of Contents .. section-numbering:: Lasso PHP Binding Basics ======================== Lasso functions are available from the Lasso PHP extension. There are two ways to load this extension. This first one is to add the line:: extension = lasso.so in your ``php.ini`` configuration file, which can be found in something like ``/etc/php4/apache2/php.ini`` (if you're using apache2 and php4 on Debian, otherwise you may need to adapt the path to your local configuration). The other way is to load it dynamically, like:: if (!extension_loaded('lasso')) { $prefix = (PHP_SHLIB_SUFFIX == 'dll') ? 'php_' : ''; dl($prefix . 'lasso.' . PHP_SHLIB_SUFFIX); } You can easily include this code every time you need lasso. The first thing to do is to call ``lasso_init()``. Similarly, the last thing should be to call ``lasso_shutdown()``. Once ``lasso_init()`` is called. The smallest and useless Lasso project will therefore be:: lasso_init(); print("Hello world.\n"); lasso_shutdown(); If your PHP code is used in HTML script environment, it could be difficult to call ``lasso_shutdown()``, this is not mandatory. SAML2 and Lasso profiles ======================== Lasso provides the necessary functions to implement SAML2 profiles, as defined in the `SAML2 Profiles Specification`_. They are: - Single Sign-On - Single Logout - Name Identifier Management Each profile maps to a Lasso object : Single Sign-on profile is implemented by ``LassoLogin`` object, Single Logout profile is implemented by ``LassoLogout`` object. Those are initialised with data known about identity and service providers, available in a ``LassoServer`` object. The ``LassoServer`` object may be created as follows:: lasso_init(); $server = new LassoServer("sp-saml2-metadata.xml", "sp-private-key.pem", NULL, "sp-crt.pem"); $server->addProvider(LASSO_PROVIDER_ROLE_IDP, "idp-saml2-metadata.xml", "idp-public-key.pem", "ca-crt.pem"); lasso_shutdown(); - ``sp-saml2-metadata.xml`` is the Liberty metadata file for the service provider - ``idp-saml2-metadata.xml`` is the Liberty metadata file for the identity provider - ``sp-private-key.pem`` is the service provider private key; used to sign documents - ``sp-crt.pem`` is the service provider certificate; sent inside signed documents - ``idp-public-key.pem`` is the identity provider public key; used to verify signature in documents sent by the identity provider - ``ca-crt.pem`` is the certificate of the certification authority used by the identity provider. It is of course possible to have several calls to the ``addProvider`` method of an instantiated ``LassoServer`` object if there are more than one identity provider. .. note:: Figures in the previously referred Binding and Profiles specification document are quite helpful in figuring out the message passing. Serialisation ------------- ``LassoServer`` objects can be serialised into a XML formatted string:: $dump = $server->dump(); It is then really easy to get back properly constructed objects:: $server = LassoServer::newFromDump($dump); .. warning:: The server dump only contains the file names, not the actual file contents. Files should not be moved afterwards. Liberty Metadata Files ====================== Providers are described by metadata containing an ``entityID`` and various normative URLs for supported profiles :: ``SingleLogoutService`` entry allows to define method and url supported where service provider wants to receive single logout requests. In previous metadata example, service provider receives SOAP single logout requests on the url ``https://sp.example.com/liberty/singleLogoutSoap``. ``ManageNameIDService`` entry allows to define method and url supported where service provider wants to receive name id management requests. In previous metadata example, service provider receives SOAP name id management requests on the url ``http://sp.example.com/liberty/nameIdManagmentSoap``. ``AssertionConsumerService`` entry allows to define method and url supported where service provider wants to receive assertion consumer responses. In previous metadata example, service provider consume assertions responses on the url ``https://sp.example.com/liberty/assertionConsumerServicePost``. Single Sign-On and Federation Profile ===================================== .. warning:: The source code presented in this section has for sole purpose to explain the different steps necessary to implement this profile; they notably lack proper error checking. See `Proper Error Checking`_ for details on error checking. As a first step the user points its browser to the service provider to the login URL; the service provider must then respond with an HTTP 302 Redirect response, pointing the user browser to the identity provider single sign on service. .. note:: the login URL is not normative; any name will do. ``$server`` is a instantiated ``LassoServer`` as seen earlier and ``$idpEntityId`` is a string with the idp entity Id (the string must match a entityID defined in the metadata file). :: $entityIdList = $server->providerIds; $idpEntityId = $entityIdList->getItem(0); $lassoLogin = new LassoLogin($server); $lassoLogin->initAuthnRequest($idpEntityId, LASSO_HTTP_METHOD_REDIRECT); $lassoRequest = $lassoLogin->request; $lassoRequest->ProtocolBinding = LASSO_SAML2_METADATA_BINDING_ARTIFACT; $lassoNameIdPolicy = $lassoRequest->NameIDPolicy; $lassoNameIdPolicy->Format = LASSO_SAML2_NAME_IDENTIFIER_FORMAT_PERSISTENT; $lassoNameIdPolicy->AllowCreate = TRUE; $lassoLogin->buildAuthnRequestMsg(); You can now redirect the user to the URL defined in ``$lassoLogin->msgUrl``; for example:: header("Location: ".$lassoLogin->msgUrl); The user then logs in on the identity provider which ultimately redirects back to the service provider; to the assertion consumer URL. A SAML artifact is passed in the query parameter. .. note:: the assertion consumer URL is defined by Liberty; it must be declared in the ``AssertionConsumerServiceURL`` element of the metadata file. :: $lassoLogin = new LassoLogin($server); $lassoLogin->initRequest($query_string, LASSO_HTTP_METHOD_ARTIFACT_GET); $lassoLogin->buildRequestMsg(); The service provider must check this artifact using a SOAP request to the identity provider. The URL is ``$lassoLogin->msgUrl`` while the request is ``$lassoLogin->msgBody``. The request must succeed with an HTTP 200 status code; let's consider its content is put in the ``$answer``, the next statement would be:: $lassoLogin->processResponseMsg($answer); The users are defined by a ``nameIdentifier`` (accessible through ``$lassoLogin->nameIdentifier``). Those typically map to users and sessions in some database on the service provider. If existing; the session should probably contains a ``session_dump`` element and the user a ``identity_dump`` element. See `Database Considerations`_ below for more information. It is now time to get them out of the database and apply them to the ``login`` object. :: if ($session_dump != NULL) { $lassoLogin->setSessionFromDump($session_dump); } if ($identity_dump != NULL) { $lassoLogin->setIdentityFromDump($identity_dump); } $lassoLogin->acceptSso(); After ``lassoLogin->acceptSso()`` the session and the identity are updated (or created) and should then be saved. If the identity has not recognised by the service provider an account will probably have to be created on the service provider; this is a good opportunity to ask the user for more information. You can get respective dumps like this:: if ($lassoLogin->isIdentityDirty) { $lassoIdentity = $lassoLogin->identity; $lassoIdentityDump = $lassoIdentity->dump(); } if ($lassoLogin->isSessionDirty) { $lassoSession = $lassoLogin->session; $lassoSessionDump = $lassoSession->dump(); } /* code to store $identity_dump and $session_dump */ A success web page can be displayed. Single Logout Profile ===================== There are different single logout profiles; some initiated on the identity provider, others initiated on the service provider, using either HTTP redirects or SOAP requests. This part is about a logout using SOAP and initiated on the service provider. :: $lassoLogout = new LassoLogout($server); Identity and session dumps should be restored to prepare the logout request. :: if ($session_dump != NULL) { $lassoLogout->setSessionFromDump($session_dump); } if ($identity_dump != NULL) { $lassoLogout->setIdentityFromDump($identity_dump); } $lassoLogout->initRequest($idpProviderId, LASSO_HTTP_METHOD_SOAP); $lassoLogout->buildRequestMsg(); The service provider must then make a SOAP request to the identity provider; ``$msgUrl`` and ``$msgBody``. You should then pass the answer to Lasso:: $lassoLogout->processResponseMsg($answer)); And save back session and user dump; the process is similar as the one at the end of the single sign on profile. Proper Error Checking ===================== Most Lasso functions raise PHP error (fatal) or warning (non-fatal). It is strongly advised to code an user error handler:: function userErrorHandler($errno, $errmsg, $filename, $linenum, $vars) { print("No: ".$errno." - ".$errmsg." at ".$filename.", line: ".$linenum."\n"); } and to set up the script to use it:: set_error_handler("userErrorHandler"); Most Lasso functions returns 0 on success and a negative number on failure. It is strongly advised to check this return code on each call. If the error raise a PHP warning, the code resume after the call to the error handler function. :: $lrv = $lassoLogin->processResponseMsg($responseMsg); if ($lrv > 0) { print("Lasso Error: ".$lrv."\n"); /* handling error; most probably bailing out */ } Database Considerations ======================= Lasso has been designed to let the service provider keep on using existing databases. Typically there is already a table describing users; just add an identity dump column to the existing table: ======= ======================================== ============== User Id existing data (name, address...) Identity dump ======= ======================================== ============== 1 ... ... 2 ... ... ======= ======================================== ============== Mapping between existing users and name identifiers sent by the identity provider can be done with a simple table. =============== ======= Name Identifier User Id =============== ======= AQWWRRS... 1 CGFASDE... 2 YYSSSDS... 1 =============== ======= .. note:: A separate table is needed because one user Id could map to several name identifiers; in case there are several identity providers. Sessions are also commonly stored in databases; just add a session dump column to the existing session table: ========== ================= ============= Session Id misc session data Session dump ========== ================= ============= 6744066 ... ... 3338824 ... ... ========== ================= ============= Likewise sessions should be mapped to name identifiers. =============== ========== Name Identifier Session Id =============== ========== AQWWRRS... 3338824 =============== ========== API Reference ============= - LassoLogin_ - LassoLogout_ - LassoIdentity_ - LassoServer_ - LassoSession_ .. _SAML2 Profiles Specification: http://docs.oasis-open.org/security/saml/v2.0/saml-profiles-2.0-os.pdf .. _LassoLogin: /documentation/api-reference/lassologin.html .. _LassoLogout: /documentation/api-reference/lassologout.html .. _LassoIdentity: /documentation/api-reference/lassoidentity.html .. _LassoServer: /documentation/api-reference/lassoserver.html .. _LassoSession: /documentation/api-reference/lassosession.html lasso-2.8.2/docs/lasso-book/PaxHeaders/single-sign-on.rst0000644000000000000000000000013213766621500020314 xustar0030 mtime=1608196928.762895301 30 atime=1678814299.905833266 30 ctime=1678814323.105965244 lasso-2.8.2/docs/lasso-book/single-sign-on.rst0000644000175000017500000001704313766621500023571 0ustar00bdauvergnebdauvergne00000000000000============================= Single Sign-On and Federation ============================= Profile Overview ================ The service provider has four things to do: - creating an authentication request - sending it to the identity provider - receiving an authentication response or an artifact - (eventually) checking it against the identity provider The first two steps are handled with an HTTP redirection or an HTML form; typically the user would click on a button, the service provider would then create the authentication request and send an HTTP Redirect to the browser. No URL is defined in the specifications for this first step. The last two steps are handled in the *AssertionConsumerServiceURL*; the user will arrive there through an HTTP Redirect or an HTTP POST carrying a piece of information from the identity provider. In case of a redirect, this information, called *artifact*, won't be large and will be exchanged with the identity provider for a *AuthnResponse*. An HTTP POST will be able to carry much more information and will therefore be able to provide either the *artifact* or directly the *AuthnResponse*. An appropriate metadata snippet would be:: https://service-provider.example.com/liberty-alliance/assertionConsumer The identity provider has more things to do: - receiving an authentication request - authenticating the user if necessary - sending a response to the service provider - (eventually) answering a SOAP request with an other response All but the last one is handled in the *SingleSignOnServiceURL*; the user has been redirected there from the service provider with an authentication request as URL parameter. This authentication request is used to decide several things (allowed authentication methods for example) and the authentication is done. This step is not part of the Liberty protocols, this can be as simple as straight HTTP authentication with a username and a password or as complex as a Java applet checking a certificate on the client. Anyway, once the user has been authenticated, an answer must be sent to the service provider. It is actually not a direct communication, the answer bounces on the user agent with an HTTP Redirect or by an HTML form pointing to the service provider. The answer may be an *artifact* (available in the query string in case of a redirect or in a ``LAREQ`` form field in case of a POST); the user is then simply redirected to this URL. The service provider will then make a SOAP request to the *SoapEndpoint* asking for the authentication response matching the artifact. The answer may also be an *authentication response*; since it will be a large piece of data it must be passed in an HTML page; an HTML form embedding the authentication response. The user will then submit this form to the service provider *AssertionConsumerURL*. Metadata would be:: https://identity-provider.example.com/soapEndpoint https://identity-provider.example.com/singleSignOn Implementing the service provider parts ======================================= .. warning:: The source code presented in the "implementing" section has for sole purpose to explain the different steps necessary to implement the profiles; they notably lack proper error checking. See XXX for details on error checking. Sending the user to the identity provider ----------------------------------------- ``server`` is a *LassoServer* object as seen earlier (`LassoServer`_) and ``idpProviderId`` is a string with the identity provider Id (the string must match a providerID defined in the metadata file). :: LassoLogin *login; /* create login object */ login = lasso_login_new(server); Select profile to use, HTTP Redirect:: lasso_login_init_authn_request(login, idpProviderId, LASSO_HTTP_METHOD_REDIRECT); or HTTP POST:: lasso_login_init_authn_request(login, idpProviderId, LASSO_HTTP_METHOD_POST); Parametrize request:: /* will force authentication on the identity provider */ LASSO_LIB_AUTHN_REQUEST(LASSO_PROFILE(login)->request)->ForceAuthn = TRUE; /* ask for identity federation */ LASSO_LIB_AUTHN_REQUEST(LASSO_PROFILE(login)->request)->NameIDPolicy = strdup(LASSO_LIB_NAME_ID_POLICY_TYPE_FEDERATED); /* the user consents with the idea of identity federation */ LASSO_LIB_AUTHN_REQUEST(LASSO_PROFILE(login)->request)->consent = strdup(LASSO_LIB_CONSENT_OBTAINED); (see API reference for other possible values) Create the authentication request:: lasso_login_build_authn_request_msg(login); An URL is then defined in ``LASSO_PROFILE(login)->msg_url``; the user must be redirected to it; for example, in a CGI:: printf("Location: %s\n", LASSO_PROFILE(login)->msg_url); Receiving an answer from the identity provider ---------------------------------------------- This part is handled on the *AssertionConsumerURL*. Receiving an assertion ...................... The user has been directed to this URL. If it was a redirect the query string (the part of the URL after the question mark) will hold the artifact and may be used to initialize the *LassoLogin* object. :: LassoLogin *login; login = lasso_login_new(server); lasso_login_init_request(login, query_string, LASSO_HTTP_METHOD_REDIRECT); lasso_login_build_request_msg(login); If it was a form post it will have a ``LAREQ`` field. :: LassoLogin *login; login = lasso_login_new(server); lasso_login_init_request(login, lareq_field, LASSO_HTTP_METHOD_POST); lasso_login_build_request_msg(login); The service provider must then check this artifact using a SOAP request to the identity provider. The URL is ``LASSO_PROFILE(login)->msg_url`` while the request is ``LASSO_PROFILE(login)->msg_body``. The request must succeed with an HTTP 200 status code. The SOAP answer body must then be passed to:: lasso_login_process_response_msg(login, answer); Receiving an authentication response .................................... A form with a ``LARES`` field has been posted; this element holds the authentication response. :: LassoLogin *login; login = lasso_login_new(server); lasso_login_process_authn_response_msg(lares_field); Federating identities ..................... There is then a ``nameIdentifier`` (accessible through ``LASSO_PROFILE(login)->nameIdentifier``) for the user identifying. If this name identifier is already known by the service provider the corresponding identity and session must be restored. :: if (session_dump != NULL) { lasso_profile_set_session_from_dump(LASSO_PROFILE(login), session_dump); } if (identity_dump != NULL) { lasso_profile_set_identity_from_dump(LASSO_PROFILE(login), identity_dump); } Process the authentication request, this will update (or create) the identity and session. :: lasso_login_accept_sso(login); Identity and session must then be saved and finally the ``login`` object can be destroyed:: lasso_login_destroy(login); And a success web page may then be displayed. Implementing the identity provider parts ======================================== XXX lasso-2.8.2/docs/lasso-book/PaxHeaders/writing-a-php-sp.txt0000644000000000000000000000013213766621500020600 xustar0030 mtime=1608196928.762895301 30 atime=1678814298.541825517 30 ctime=1678814323.109965268 lasso-2.8.2/docs/lasso-book/writing-a-php-sp.txt0000644000175000017500000003773113766621500024063 0ustar00bdauvergnebdauvergne00000000000000========================================= Writing a Liberty service Provider in PHP ========================================= :author: Romain Chantereau :author: Damien Laniel :contact: dlaniel@entrouvert.com :date: $Date$ :revision: $Revision$ :copyright: Copyright © 2004-2007 Entr'ouvert .. contents:: Table of Contents .. section-numbering:: Lasso PHP Binding Basics ======================== Lasso functions are available from the Lasso PHP extension. There are two ways to load this extension. This first one is to add the line:: extension = lasso.so in your ``php.ini`` configuration file, which can be found in something like ``/etc/php4/apache2/php.ini`` (if you're using apache2 and php4 on Debian, otherwise you may need to adapt the path to your local configuration). Then restart Apache 2. The other way is to load it dynamically, like:: if (!extension_loaded('lasso')) { $prefix = (PHP_SHLIB_SUFFIX == 'dll') ? 'php_' : ''; dl($prefix . 'lasso.' . PHP_SHLIB_SUFFIX); } You can easily include this code every time you need lasso. The first thing to do is to call ``lasso_init()``. Similarly, the last thing should be to call ``lasso_shutdown()``. Once ``lasso_init()`` is called. The smallest and useless Lasso project will therefore be:: lasso_init(); print("Hello world.\n"); lasso_shutdown(); If your PHP code is used in HTML script environment, it could be difficult to call ``lasso_shutdown()``, this is not mandatory. Service Provider keys and metadata files ======================================== Liberty key files ----------------- Service Provider needs private and public keys to sign sent messages. Private and public keys are loaded from PEM files by Lasso. If you don't have PEM format keys, you need to create them. To create a couple public key/private key with OpenSSL, use the following commands: Create a private key in a file named name-of-the-private-key.pem:: openssl genrsa -out name-of-the-private-key.pem 2048 Extract the public key from the private key in a file named name-of-the-public-key.pem:: openssl rsa -in name-of-the-private-key.pem -pubout \ -out name-of-the-public-key.pem Your Service Provider also needs Identity Provider public key to verify received messages. You must get it from your Identity Provider. Liberty Metadata files ---------------------- Metadata are xml document describing provider configuration, that is its identifier, urls where to send him requests and supported Liberty Alliance profiles (that is methods describing how to send or process requests). Your Service Provider needs Identity Provider metadata to know where to send requests and how to process the requests he receives from the Identity Provider. You must get them from your Identity Provider. Then, you must create some metadata for your Service Provider and give them to your Identity Provider as well. Here is an example service provider metadata that you will have to adapt to your needs:: http://sp.example.com/liberty/soap-endpoint sp.example.com/liberty/single-logout http://sp.example.com/liberty/assertion-consumer-service http://projectliberty.org/profiles/fedterm-idp-soap http://projectliberty.org/profiles/fedterm-idp-http http://projectliberty.org/profiles/slo-idp-soap http://projectliberty.org/profiles/slo-idp-http http://projectliberty.org/profiles/slo-sp-soap true Example Organization Where sp.example.com is the domain name of Service Provider. ``http://sp.example.com/liberty/metadata`` is the Service Provider Liberty identifier. ``http://sp.example.com/liberty/soap-endpoint`` is the Service Provider SOAP endpoint where Identity Provider send SOAP single logout or defederation requests. ``http://sp.example.com/liberty/assertion-consumer-service`` is the Service Provider assertion consumer url where Identity Provider must return single sign on authentication response. ``http://sp.example.com/liberty/single-logout`` is the Service Provider single logout url. Service Provider can initiate single logout from this url or process HTTP single logout request from Identity Provider. ` More information about these metadata can be found in Liberty Alliance specifications. Liberty and Lasso profiles ========================== Lasso provides the necessary functions to implement Liberty Alliance profiles, as defined in the `Liberty ID-FF Bindings and Profiles Specification`_. They are: - Single Sign-On and Federation - Name Registration - Federation Termination Notification - Single Logout - Identity Provider Introduction - Name Identifier Mapping - Name Identifier Encryption Each profile maps to a Lasso object such as ``LassoLogin``, ``LassoLogout``... Those are initialised with data known about identity and service providers, available in a ``LassoServer`` object. The ``LassoServer`` object may be created as follows:: lasso_init(); $server = new LassoServer("sp-metadata.xml", "sp-private-key.pem", NULL, "sp-crt.pem"); $server->addProvider(LASSO_PROVIDER_ROLE_IDP, "idp-metadata.xml", "idp-public-key.pem", "ca-crt.pem"); lasso_shutdown(); - ``sp-metadata.xml`` is the Liberty metadata file for the service provider - ``idp-metadata.xml`` is the Liberty metadata file for the identity provider - ``sp-private-key.pem`` is the service provider private key; used to sign documents - ``sp-crt.pem`` is the service provider certificate; sent inside signed documents - ``idp-public-key.pem`` is the identity provider public key; used to verify signature in documents sent by the identity provider - ``ca-crt.pem`` is the certificate of the certification authority used by the identity provider. It is of course possible to have several calls to the ``addProvider`` method of an instantiated ``LassoServer`` object if there are more than one identity provider. .. note:: Figures in the previously referred Binding and Profiles specification document are quite helpful in figuring out the message passing. Serialisation ------------- ``LassoServer`` objects can be serialised into a XML formatted string:: $dump = $server->dump(); It is then really easy to get back properly constructed objects:: $server = LassoServer::newFromDump($dump); .. warning:: The server dump only contains the file names, not the actual file contents. Files should not be moved afterwards. Liberty Metadata Files ====================== They are descriptions of a provider containing ``providerID`` and various normative URLs:: https://sp.example.com/singleLogout http://projectliberty.org/profiles/slo-idp-soap https://sp.example.com/soapEndpoint https://sp.example.com/assertionConsumer true Describe a service provider (with providerID ``https://sp.example.com``) whose single logout service URL is ``https://sp.example.com/singleLogout``. Refer to the Liberty Alliance specifications for details. Single Sign-On and Federation Profile ===================================== .. warning:: The source code presented in this section has for sole purpose to explain the different steps necessary to implement this profile; they notably lack proper error checking. See `Proper Error Checking`_ for details on error checking. As a first step the user points its browser to the service provider to the login URL; the service provider must then respond with an HTTP 302 Redirect response, pointing the user browser to the identity provider single sign on service. .. note:: the login URL is not normative; any name will do. ``$server`` is an instantiated ``LassoServer`` as seen earlier :: $lassoLogin = new LassoLogin($server); $providerIdList = $server->providerIds; $idpProviderId = $provider_id_list->getItem(0); $lassoLogin->initAuthnRequest($idpProviderId, LASSO_HTTP_METHOD_REDIRECT); $lassoRequest = $lassoLogin->request; $lassoRequest->NameIDPolicy = LASSO_LIB_NAMEID_POLICY_TYPE_FEDERATED; $lassoRequest->consent = LASSO_LIB_CONSENT_OBTAINED; $lassoRequest->ForceAuthn = 0; $lassoRequest->IsPassive = 0; $lassoRequest->relayState = "relay state"; $lassoLogin->buildAuthnRequestMsg(); You can now redirect the user to the URL defined in ``$lassoLogin->msgUrl``; for example:: header("Location: ".$lassoLogin->msgUrl); The user then logs in on the identity provider which ultimately redirects back to the service provider; to the assertion consumer URL. A SAML artifact is passed in the query parameter. .. note:: the assertion consumer URL is defined by Liberty; it must be declared in the ``AssertionConsumerServiceURL`` element of the metadata file. :: $lassoLogin = new LassoLogin($server); $lassoLogin->initRequest($query_string, LASSO_HTTP_METHOD_REDIRECT); $lassoLogin->buildRequestMsg(); The service provider must check this artifact using a SOAP request to the identity provider. The URL is ``$lassoLogin->msgUrl`` while the request is ``$lassoLogin->msgBody``. The request must succeed with an HTTP 200 status code; let's consider its content is put in the ``$answer``, the next statement would be:: $lassoLogin->processResponseMsg($answer); The users are defined by a ``nameIdentifier`` (accessible through ``$lassoLogin->nameIdentifier``). Those typically map to users and sessions in some database on the service provider. If existing; the session should probably contains a ``session_dump`` element and the user a ``identity_dump`` element. See `Database Considerations`_ below for more information. It is now time to get them out of the database and apply them to the ``login`` object. :: if ($session_dump != NULL) { $lassoLogin->setSessionFromDump($session_dump); } if ($identity_dump != NULL) { $lassoLogin->setIdentityFromDump($identity_dump); } $lassoLogin->acceptSso(); After ``lassoLogin->acceptSso()`` the session and the identity are updated (or created) and should then be saved. If the identity has not recognised by the service provider an account will probably have to be created on the service provider; this is a good opportunity to ask the user for more information. You can get respective dumps like this:: if ($lassoLogin->isIdentityDirty) { $lassoIdentity = $lassoLogin->identity; $lassoIdentityDump = $lassoIdentity->dump(); } if ($lassoLogin->isSessionDirty) { $lassoSession = $lassoLogin->session; $lassoSessionDump = $lassoSession->dump(); } /* code to store $identity_dump and $session_dump */ A success web page can be displayed. Single Logout Profile ===================== There are different single logout profiles; some initiated on the identity provider, others initiated on the service provider, using either HTTP redirects or SOAP requests. This part is about a logout using SOAP and initiated on the service provider. :: $lassoLogout = new LassoLogout($server); Identity and session dumps should be restored to prepare the logout request. :: if ($session_dump != NULL) { $lassoLogout->setSessionFromDump($session_dump); } if ($identity_dump != NULL) { $lassoLogout->setIdentityFromDump($identity_dump); } $lassoLogout->initRequest($idpProviderId, LASSO_HTTP_METHOD_SOAP); $lassoLogout->buildRequestMsg(); The service provider must then make a SOAP request to the identity provider as above with $lassoLogout->msgUrl and $lassoLogout->msgBody values. You should then pass the answer to Lasso:: $lassoLogout->processResponseMsg($answer)); And save back session and user dump; the process is similar as the one at the end of the single sign on profile. Proper Error Checking ===================== Most Lasso functions raise PHP error (fatal) or warning (non-fatal). It is strongly advised to code an user error handler:: function userErrorHandler($errno, $errmsg, $filename, $linenum, $vars) { print("No: ".$errno." - ".$errmsg." at ".$filename.", line: ".$linenum."\n"); } and to set up the script to use it:: set_error_handler("userErrorHandler"); Most Lasso functions return 0 on success and a negative number on failure. It is strongly advised to check this return code on each call. If the error raise a PHP warning, the code resume after the call to the error handler function. :: $lrv = $lassoLogin->processResponseMsg($answer); if ($lrv > 0) { print("Lasso Error: ".$lrv."\n"); /* handling error; most probably bailing out */ } Database Considerations ======================= Lasso has been designed to let the service provider keep on using existing databases. Typically there is already a table describing users; just add an identity dump column to the existing table: ======= ======================================== ============== User Id existing data (name, address...) Identity dump ======= ======================================== ============== 1 ... ... 2 ... ... ======= ======================================== ============== Mapping between existing users and name identifiers sent by the identity provider can be done with a simple table. =============== ======= Name Identifier User Id =============== ======= AQWWRRS... 1 CGFASDE... 2 YYSSSDS... 1 =============== ======= .. note:: A separate table is needed because one user Id could map to several name identifiers; in case there are several identity providers. Sessions are also commonly stored in databases; just add a session dump column to the existing session table: ========== ================= ============= Session Id misc session data Session dump ========== ================= ============= 6744066 ... ... 3338824 ... ... ========== ================= ============= Likewise sessions should be mapped to name identifiers. =============== ========== Name Identifier Session Id =============== ========== AQWWRRS... 3338824 =============== ========== API Reference ============= - LassoLogin_ - LassoLogout_ - LassoIdentity_ - LassoServer_ - LassoSession_ .. _Liberty ID-FF Bindings and Profiles Specification: http://www.projectliberty.org/liberty/content/download/319/2369/file/draft-liberty-idff-bindings-profiles-1.2-errata-v2.0.pdf .. _LassoLogin: /documentation/api-reference/lassologin.html .. _LassoLogout: /documentation/api-reference/lassologout.html .. _LassoIdentity: /documentation/api-reference/lassoidentity.html .. _LassoServer: /documentation/api-reference/lassoserver.html .. _LassoSession: /documentation/api-reference/lassosession.html lasso-2.8.2/docs/lasso-book/PaxHeaders/writing-a-c-sp.txt0000644000000000000000000000013213766621500020233 xustar0030 mtime=1608196928.762895301 30 atime=1678814297.993822402 30 ctime=1678814323.109965268 lasso-2.8.2/docs/lasso-book/writing-a-c-sp.txt0000644000175000017500000004230113766621500023503 0ustar00bdauvergnebdauvergne00000000000000======================================= Writing a Liberty service provider in C ======================================= :author: Frederic Peters :contact: fpeters@entrouvert.com :date: $Date$ :revision: $Revision$ :copyright: Copyright © 2004-2007 Entr'ouvert .. contents:: Table of Contents .. section-numbering:: Lasso Projects Basics ===================== Lasso functions are defined in several header files typically located in ``/usr/include/lasso/`` or ``/usr/local/include/lasso/``. It is possible to include individual files but in most case it is enough to include the main ``lasso.h``. The first thing to do is then to call ``lasso_init()``. Similarly the last thing will be to call ``lasso_shutdown()``. The smallest and useless Lasso project will therefore be:: #include int main(int argc, char *argv[]) { lasso_init(); printf("Hello world.\n"); lasso_shutdown(); return 0; } Lasso uses a tool called ``pkg-config`` to know the necessary flags for compilation and linking. :: $ pkg-config lasso --cflags -DXMLSEC_CRYPTO=\"openssl\" -DXMLSEC_LIBXML_260=1 -D__XMLSEC_FUNCTION__=__FUNCTION__ -DXMLSEC_NO_XKMS=1 -DXMLSEC_NO_CRYPTO_DYNAMIC_LOADING=1 -DXMLSEC_CRYPTO_OPENSSL=1 -I/usr/include/lasso -I/usr/include/libxml2 -I/usr/include/xmlsec1 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include $ pkg-config lasso --libs -llasso -lxmlsec1-openssl -lxmlsec1 -lssl -lcrypto -ldl -lgobject-2.0 -lxslt -lxml2 -lpthread -lz -lm -lglib-2.0 Creating an executable from the previous sample would then a simple matter of calling ``gcc`` with the right flags. But there is currently a bug in XMLSec, the library used by Lasso to provide XML Signature and XML Encryption support. It is possible to workaround the bug:: $ gcc hello.c -o hello $(pkg-config lasso --cflags --libs) :4:16: missing terminating " character $ gcc hello.c -o hello $(pkg-config lasso --cflags --libs | tr -d '\\') $ ./hello Hello world. Service Provider keys and metadata files ======================================== Liberty key files ----------------- Service Provider needs private and public keys to sign sent messages. Private and public keys are loaded from PEM files by Lasso. If you don't have PEM format keys, you need to create them. To create a couple public key/private key with OpenSSL, use the following commands: Create a private key in a file named name-of-the-private-key.pem:: openssl genrsa -out name-of-the-private-key.pem 2048 Extract the public key from the private key in a file named name-of-the-public-key.pem:: openssl rsa -in name-of-the-private-key.pem -pubout \ -out name-of-the-public-key.pem Your Service Provider also needs Identity Provider public key to verify received messages. You must get it from your Identity Provider. Liberty Metadata files ---------------------- Metadata are xml document describing provider configuration, that is its identifier, urls where to send him requests and supported Liberty Alliance profiles (that is methods describing how to send or process requests). Your Service Provider needs Identity Provider metadata to know where to send requests and how to process the requests he receives from the Identity Provider. You must get them from your Identity Provider. Then, you must create some metadata for your Service Provider and give them to your Identity Provider as well. Here is an example service provider metadata that you will have to adapt to your needs:: http://sp.example.com/liberty/soap-endpoint sp.example.com/liberty/single-logout http://sp.example.com/liberty/assertion-consumer-service http://projectliberty.org/profiles/fedterm-idp-soap http://projectliberty.org/profiles/fedterm-idp-http http://projectliberty.org/profiles/slo-idp-soap http://projectliberty.org/profiles/slo-idp-http http://projectliberty.org/profiles/slo-sp-soap true Example Organization Where sp.example.com is the domain name of Service Provider. ``http://sp.example.com/liberty/metadata`` is the Service Provider Liberty identifier. ``http://sp.example.com/liberty/soap-endpoint`` is the Service Provider SOAP endpoint where Identity Provider send SOAP single logout or defederation requests. ``http://sp.example.com/liberty/assertion-consumer-service`` is the Service Provider assertion consumer url where Identity Provider must return single sign on authentication response. ``http://sp.example.com/liberty/single-logout`` is the Service Provider single logout url. Service Provider can initiate single logout from this url or process HTTP single logout request from Identity Provider. ` More information about these metadatas can be found in Liberty Alliance specifications. Liberty and Lasso profiles ========================== Lasso provides the necessary functions to implement Liberty Alliance profiles, as defined in the `Liberty ID-FF Bindings and Profiles Specification`_. They are: - Single Sign-On and Federation - Name Registration - Federation Termination Notification - Single Logout - Identity Provider Introduction - Name Identifier Mapping - Name Identifier Encryption Each profile maps to a Lasso object such as ``LassoLogin``, ``LassoLogout``... Those are initialised with data known about identity and service providers, available in a ``LassoServer`` object. The ``LassoServer`` object may be created as follows: :: LassoServer *server; server = lasso_server_new("sp-metadata.xml", "sp-private-key.pem", NULL, "sp-crt.pem"); lasso_server_add_provider(server, LASSO_PROVIDER_ROLE_IDP, "idp-metadata.xml", "idp-public-key.pem", "ca-crt.pem"); - ``sp-metadata.xml`` is the Liberty metadata file for the service provider - ``idp-metadata.xml`` is the Liberty metadata file for the identity provider - ``sp-private-key.pem`` is the service provider private key; used to sign documents - ``sp-crt.pem`` is the service provider certificate; sent inside signed documents - ``idp-public-key.pem`` is the identity provider public key; used to verify signature in documents sent by the identity provider - ``ca-crt.pem`` is the certificate of the certification authority used by the identity provider - NULL, the third argument, would be used if the private key was protected by a password. It is of course possible to have several calls so ``lasso_server_add_provider`` if there are more than one identity provider. .. note:: Figures in the previously referred Binding and Profiles specification document are quite helpful in figuring out the message passing. Serialisation ------------- ``LassoServer`` objects can be serialised into XML files:: gchar *dump; FILE *fd; dump = lasso_server_dump(server); /* write dump into a file, a database, whatever */ g_free(dump); .. note:: ``lasso_server_dump`` (and other Lasso dump functions) allocates memory through GLib. ``g_free`` is then the function to use instead of ``free`` to release memory. It is then really easy to get back properly constructed objects:: LassoServer *server; gchar *dump; /* restore dump from file, database, whatever */ server = lasso_server_new_from_dump(dump); .. warning:: The server dump only contains the file names; not the actual file contents. Files should not be moved afterwards. Liberty Metadata Files ====================== They are descriptions of a provider containing ``providerID`` and various normative URLs:: https://sp.example.com/singleLogout http://projectliberty.org/profiles/slo-idp-soap https://sp.example.com/soapEndpoint https://sp.example.com/assertionConsumer true Describe a service provider (with providerID ``https://sp.example.com``) whose single logout service URL is ``https://sp.example.com/singleLogout``. Refer to the Liberty Alliance specifications for details. Single Sign-On and Federation Profile ===================================== .. warning:: The source code presented in this section has for sole purpose to explain the different steps necessary to implement this profile; they notably lack proper error checking. See `Proper Error Checking`_ for details on error checking. As a first step the user points its browser to the service provider to the login URL; the service provider must then respond with an HTTP 302 Redirect response, pointing the user browser to the identity provider single sign on service. .. note:: the login URL is not normative; any name will do. ``server`` is a ``LassoServer`` as seen earlier and ``idpProviderId`` is a string with the identity provider Id (the string must match a providerID defined in the metadata file). :: LassoLogin *login; login = lasso_login_new(server); lasso_login_init_authn_request(login, idpProviderId, LASSO_HTTP_METHOD_REDIRECT); LASSO_LIB_AUTHN_REQUEST(LASSO_PROFILE(login)->request)->ForceAuthn = TRUE; LASSO_LIB_AUTHN_REQUEST(LASSO_PROFILE(login)->request)->IsPassive = FALSE; LASSO_LIB_AUTHN_REQUEST(LASSO_PROFILE(login)->request)->NameIDPolicy = strdup(LASSO_LIB_NAMEID_POLICY_TYPE_FEDERATED); LASSO_LIB_AUTHN_REQUEST(LASSO_PROFILE(login)->request)->consent = strdup(LASSO_LIB_CONSENT_OBTAINED); lasso_login_build_authn_request_msg(login); You can now redirect the user to the URL defined in ``LASSO_PROFILE(login)->msg_url``; for example, in a CGI:: printf("Location: %s\n", LASSO_PROFILE(login)->msg_url); The user then logs in on the identity provider which ultimately redirects back to the service provider; to the assertion consumer URL. A SAML artifact is passed in the query parameter. .. note:: the assertion consumer URL is defined by Liberty; it must be declared in the ``AssertionConsumerServiceURL`` element of the metadata file. :: LassoLogin *login; login = lasso_login_new(server); lasso_login_init_request(login, query_string, LASSO_HTTP_METHOD_REDIRECT); lasso_login_build_request_msg(login); The service provider must check this artifact using a SOAP request to the identity provider. The URL is ``LASSO_PROFILE(login)->msg_url`` while the request is ``LASSO_PROFILE(login)->msg_body``. The request must succeed with an HTTP 200 status code; let's consider its content is put in the ``answer``, the next statement would be:: lasso_login_process_response_msg(login, answer); The users are defined by a ``nameIdentifier`` (accessible through ``LASSO_PROFILE(login)->nameIdentifier``). Those typically map to users and sessions in some database on the service provider. If existing; the session should probably contains a ``session_dump`` element and the user a ``identity_dump`` element. See `Database Considerations`_ below for more information. It is now time to get them out of the database and apply them to the ``login`` object. :: if (session_dump != NULL) { lasso_profile_set_session_from_dump(LASSO_PROFILE(login), session_dump); } if (identity_dump != NULL) { lasso_profile_set_identity_from_dump(LASSO_PROFILE(login), identity_dump); } lasso_login_accept_sso(login); After ``lasso_login_accept_sso`` the session and the identity are updated (or created) and should then be saved. If the identity has not recognised by the service provider an account will probably have to be created on the service provider; this is a good opportunity to ask the user for more information. You can get respective dumps like this:: LassoIdentity *identity; LassoSession *session; char *identity_dump = NULL, *session_dump = NULL; if (lasso_profile_is_identity_dirty(LASSO_PROFILE(login))) { identity = lasso_profile_get_identity(LASSO_PROFILE(login)); identity_dump = lasso_identity_dump(identity); lasso_identity_destroy(identity); } if (lasso_profile_is_session_dirty(LASSO_PROFILE(login))) { session = lasso_profile_get_session(LASSO_PROFILE(login)); session_dump = lasso_session_dump(session); lasso_session_destroy(session); } /* code to store identity_dump and session_dump */ Finally the ``login`` object can then be destroyed:: lasso_login_destroy(login); And a success web page displayed. Single Logout Profile ===================== There are different single logout profiles; some initiated on the identity provider, others initiated on the service provider, using either HTTP redirects or SOAP requests. This part is about a logout using SOAP and initiated on the service provider. :: LassoLogout *logout; logout = lasso_logout_new(lassoServer); Identity and session dumps should be restored to prepare the logout request. :: if (session_dump != NULL) { lasso_profile_set_session_from_dump(LASSO_PROFILE(logout), session_dump); } if (identity_dump != NULL) { lasso_profile_set_identity_from_dump(LASSO_PROFILE(logout), identity_dump); } lasso_logout_init_request(logout, idpProviderId, LASSO_HTTP_METHOD_SOAP); lasso_logout_build_request_msg(logout); The service provider must then make a SOAP request to the identity provider as above with LASSO_PROFILE(logout)->msg_url and LASSO_PROFILE(logout)->msg_body values. You should then pass the answer to Lasso:: lasso_logout_process_response_msg(logout, answer); And save back session and user dump; the process is similar as the one at the end of the single sign on profile. Proper Error Checking ===================== Most Lasso functions return 0 on success and a negative number on failure. It is strongly advised to check this return code on each call. :: int rc; rc = lasso_logout_process_response_msg(logout, answer) if (rc) { fprintf(stderr, "Lasso Error: %d\n", rc); /* handling error; most probably bailing out */ } Database Considerations ======================= Lasso has been designed to let the service provider keep on using existing databases. Typically there is already a table describing users; just add an identity dump column to the existing table: ======= ======================================== ============== User Id existing data (name, address...) Identity dump ======= ======================================== ============== 1 ... ... 2 ... ... ======= ======================================== ============== Mapping between existing users and name identifiers sent by the identity provider can be done with a simple table. =============== ======= Name Identifier User Id =============== ======= AQWWRRS... 1 CGFASDE... 2 YYSSSDS... 1 =============== ======= .. note:: A separate table is needed because one user Id could map to several name identifiers; in case there are several identity providers. Sessions are also commonly stored in databases; just add a session dump column to the existing session table: ========== ================= ============= Session Id misc session data Session dump ========== ================= ============= 6744066 ... ... 3338824 ... ... ========== ================= ============= Likewise sessions should be mapped to name identifiers. =============== ========== Name Identifier Session Id =============== ========== AQWWRRS... 3338824 =============== ========== API Reference ============= - LassoLogin_ - LassoLogout_ - LassoIdentity_ - LassoServer_ - LassoSession_ .. _Liberty ID-FF Bindings and Profiles Specification: http://www.projectliberty.org/liberty/content/download/319/2369/file/draft-liberty-idff-bindings-profiles-1.2-errata-v2.0.pdf .. _LassoLogin: /documentation/api-reference/lassologin.html .. _LassoLogout: /documentation/api-reference/lassologout.html .. _LassoIdentity: /documentation/api-reference/lassoidentity.html .. _LassoServer: /documentation/api-reference/lassoserver.html .. _LassoSession: /documentation/api-reference/lassosession.html lasso-2.8.2/docs/lasso-book/PaxHeaders/liberty-architecture.rst0000644000000000000000000000013213766621500021615 xustar0030 mtime=1608196928.762895301 30 atime=1678814299.877833108 30 ctime=1678814323.101965222 lasso-2.8.2/docs/lasso-book/liberty-architecture.rst0000644000175000017500000000445213766621500025072 0ustar00bdauvergnebdauvergne00000000000000======================== The Liberty Architecture ======================== Building on existing pieces, XML, SAML, SOAP, HTTP, SSL... Points to specs; quick glossary; user = principal... Maps use cases to profiles. This chapter provides a quick overview of the different profiles; they will be detailed and implemented in the next chapters. Single Sign-On and Federation ============================= The Single Sign On process allows a user to log in once to an identity provider (IdP), and to be then transparently loged in to the required service providers (SP) belonging to the IP "circle of trust". Subordinating different identities of the same user within a circle of trust to a unique IP is called "Identity Federation". The liberty Alliance specifications allows, thanks to this federation, strong and unique authentication coupled with control by the user of his personal informations. The explicit user agreement is necessary before proceeding to Identity Federation. The different SPs can't communicate directly together about users informations. They're only able to exchange informations about a user with the IP. This assure : - private life respect; - increased security (an unveiled identity for one of the SPs won't endanger the others). To insure the integrity and the non-revocability of the exchange, a trusted third part releases a security token which identify only the session and not the user. Artifact Profile ---------------- .. figure:: figures/sso-brws-art.png Single Sign-On and Federation interactions, Artifact profile TODO: describe steps Browser POST Profile -------------------- .. figure:: figures/sso-brws-post.png Single Sign-On and Federation interactions, Browser-POST profile Almost the Same thing. Single Log-out ============== A few words about the five different profiles. Initiated by the Service Provider, using SOAP requests ------------------------------------------------------ .. figure:: figures/slo-sp-soap.png Single Log-out interactions; initiated at service provider, using SOAP Initiated by the Service Provider, using HTTP Redirects ------------------------------------------------------- 3 more to go. Liberty URLs ============ How does the identity provider knows the "SOAP endpoint" of the service provider ? That is metadata for you. lasso-2.8.2/docs/lasso-book/PaxHeaders/language-bindings.rst0000644000000000000000000000013213766621500021041 xustar0030 mtime=1608196928.762895301 30 atime=1678814299.917833334 30 ctime=1678814323.097965199 lasso-2.8.2/docs/lasso-book/language-bindings.rst0000644000175000017500000000036313766621500024313 0ustar00bdauvergnebdauvergne00000000000000======================== Lasso in other Languages ======================== C is cool. But. Python. (CGI ?) PHP. (with code putting the session dump in the PHP $_SESSION["lasso"]) Java. (and JSP ?) C#. (and ASP.Net ?) Whatever we have. lasso-2.8.2/docs/lasso-book/PaxHeaders/integration.rst0000644000000000000000000000013213766621500020006 xustar0030 mtime=1608196928.762895301 30 atime=1678814299.913833312 30 ctime=1678814323.097965199 lasso-2.8.2/docs/lasso-book/integration.rst0000644000175000017500000000037613766621500023264 0ustar00bdauvergnebdauvergne00000000000000====================================== Integration with Existing Applications ====================================== That's the part where we talk about identity dumps to insert in existing user tables. And session dumps wherever sessions are stored. lasso-2.8.2/docs/lasso-book/PaxHeaders/getting-lasso.rst0000644000000000000000000000013213766621500020243 xustar0030 mtime=1608196928.762895301 30 atime=1678814299.889833176 30 ctime=1678814323.097965199 lasso-2.8.2/docs/lasso-book/getting-lasso.rst0000644000175000017500000000755213766621500023524 0ustar00bdauvergnebdauvergne00000000000000============= Getting Lasso ============= Lasso is licensed under the GNU General Public License. That means users are given several inalienable rights: the right to use the library, whatever the purpose is; the right to study how it works, getting access to source code; the right to distribute the library to others and the right to modify the library and publish those modifications. Talks about library and how Lasso will force the use of the GPL. Binary packages =============== Debian packages --------------- The latest Lasso release should be available straight from any Debian mirror worldwide in the ``etch`` or ``sid`` distribution. Additionaly packages are provided for the ``sarge`` release on a dedicated APT repository. The following line needs to be added to ``/etc/apt/sources.list``:: deb http://www.entrouvert.org ./debian/lasso/ It is then a matter of running:: apt-get install liblasso-dev RPM packages ------------ RPM Bad. A mess. Microsoft Windows packages -------------------------- Ah. Isn't that funky ? (need to ask Romain about cygwin, mingw32 and whatever is needed to get Lasso working on Windows) Sources ======= The source code of the latest release is available at the following URL: http://labs.libre-entreprise.org/project/showfiles.php?group_id=31 Lasso uses the GNU automake and autoconf to handle system dependency checking. It is developed and built locally on GNU/Linux (Debian) both on x86 and PowerPC processors. Compiling --------- :: ./configure The ``configure`` shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a ``Makefile`` in each directory of the package. It may also create one or more ``.h`` files containing system-dependent definitions. Finally, it creates a shell script ``config.status`` that can be run in the future to recreate the configuration, and a file ``config.log`` containing compiler output (useful mainly for debugging ``configure``). ``configure`` can take a lot of options, a complete list is available with the ``--help`` flag: ``./configure --help`` Installation Directories ........................ By default, Lasso will be installed in ``/usr/local/lib``. It is possible to specify an installation prefix other than ``/usr/local`` by giving the option ``--prefix=PATH``; for example ``--prefix=/usr``. Optional Features ................. There are optional features that you may want not to build, things like unit tests, bindings for different languages, etc. ===================== ============================ ``--disable-java`` Disable the Java binding ``--disable-python`` Disable the Python binding ``--disable-php`` Disable the PHP binding ``--disable-csharp`` Disable the C# binding ``--disable-tests`` Disable the unit tests ===================== ============================ On the other hand there are features you may want to activate. ====================== ==================================== ``--enable-debugging`` Enable debugging messages ``--enable-profiling`` Enable profiling compilation flags ====================== ==================================== Once ``./configure`` has been executed it is time to compile the whole thing. :: make It should take a few minutes. :: make install Will then copy the library and header files to their final directories. Bleeding Edge ------------- CVS (Concurrent Versions System) is the version control system used by Lasso developers to keep track of files, how and by whom they were modified. It is accessible anonymously for people to use the latest developments. :: export CVSROOT=:pserver:anonymous@cvs.labs.libre-entreprise.org:/cvsroot/lasso cvs login # press enter cvs -z3 checkout lasso .. note:: The CVS version requires more tools to build; notably automake, autoconf and libtool. lasso-2.8.2/docs/lasso-book/PaxHeaders/lasso-architecture.rst0000644000000000000000000000013213766621500021264 xustar0030 mtime=1608196928.762895301 30 atime=1678814299.885833152 30 ctime=1678814323.101965222 lasso-2.8.2/docs/lasso-book/lasso-architecture.rst0000644000175000017500000000317613766621500024543 0ustar00bdauvergnebdauvergne00000000000000====================== The Lasso Architecture ====================== Doesn't store, doesn't communicate. Modeled on liberty profiles; one profile = one class Objet oriented but in C. Talks about how this work (necessary to know for the lasso_profile functions) ------ Lasso provides the necessary functions to implement Liberty Alliance profiles, as defined in the `Liberty ID-FF Bindings and Profiles Specification`_ and explained in the previous chapter. Each profile maps to a Lasso class: ===================================== ============================= Single Sign-On and Federation LassoLogin Name Registration LassoRegisterNameIdentifier Federation Termination Notification LassoFederationTermination Single Logout LassoLogout Name Identifier Mapping LassoNameIdentifierMapping Identity Provider Introduction *not implemented* Name Identifier Encryption *not implemented* ===================================== ============================= There are also a few other classes to know about: - LassoServer holds the data about a provider, which other providers it knows, what certificates to use, etc. - LassoIdentity holds the data about a Liberty federated identity - LassoSession holds the data about an active Liberty session. - LassoProfile is the base class for profiles. Talk more about respective usage of Identity and Session. .. _Liberty ID-FF Bindings and Profiles Specification: http://www.projectliberty.org/liberty/content/download/319/2369/file/draft-liberty-idff-bindings-profiles-1.2-errata-v2.0.pdf lasso-2.8.2/docs/PaxHeaders/reference0000644000000000000000000000013214404126162014533 xustar0030 mtime=1678814322.845963764 30 atime=1678814326.421984131 30 ctime=1678814322.845963764 lasso-2.8.2/docs/reference/0000755000175000017500000000000014404126162020060 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/docs/reference/PaxHeaders/Makefile.am0000644000000000000000000000013213766621500016652 xustar0030 mtime=1608196928.762895301 30 atime=1678814114.704791472 30 ctime=1678814322.841963741 lasso-2.8.2/docs/reference/Makefile.am0000644000175000017500000000002013766621500022112 0ustar00bdauvergnebdauvergne00000000000000SUBDIRS = lasso lasso-2.8.2/docs/reference/PaxHeaders/Makefile.in0000644000000000000000000000013114404125673016662 xustar0030 mtime=1678814139.556929897 29 atime=1678814149.79298705 30 ctime=1678814322.841963741 lasso-2.8.2/docs/reference/Makefile.in0000644000175000017500000005322314404125673022140 0ustar00bdauvergnebdauvergne00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = docs/reference ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ac_check_class.m4 \ $(top_srcdir)/m4/ac_check_classpath.m4 \ $(top_srcdir)/m4/ac_check_junit.m4 \ $(top_srcdir)/m4/ac_prog_jar.m4 \ $(top_srcdir)/m4/ac_prog_java.m4 \ $(top_srcdir)/m4/ac_prog_java_works.m4 \ $(top_srcdir)/m4/ac_prog_javac.m4 \ $(top_srcdir)/m4/ac_prog_javac_works.m4 \ $(top_srcdir)/m4/ac_prog_javah.m4 \ $(top_srcdir)/m4/ac_try_compile_java.m4 \ $(top_srcdir)/m4/as-compiler-flag.m4 \ $(top_srcdir)/m4/dps_java_check_class.m4 \ $(top_srcdir)/m4/dps_xtra_classpath.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h \ $(top_builddir)/lasso/lasso_config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CHECK_CFLAGS = @CHECK_CFLAGS@ CHECK_LIBS = @CHECK_LIBS@ CLASSPATH_JUNIT = @CLASSPATH_JUNIT@ CLASSPATH_OPT = @CLASSPATH_OPT@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CSHARPCILINTERPRETER = @CSHARPCILINTERPRETER@ CSHARPCOMPILER = @CSHARPCOMPILER@ CSHARPCYGPATH_W = @CSHARPCYGPATH_W@ CSHARPDYNAMICLINKING = @CSHARPDYNAMICLINKING@ CSHARPLIBRARYPREFIX = @CSHARPLIBRARYPREFIX@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEBUGGING = @DEBUGGING@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLL_FILENAME = @DLL_FILENAME@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GACUTIL = @GACUTIL@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HTML_DIR = @HTML_DIR@ INKSCAPE = @INKSCAPE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVAC_FLAGS = @JAVAC_FLAGS@ JAVAH = @JAVAH@ JAVAH_FLAGS = @JAVAH_FLAGS@ JAVA_INCLUDE = @JAVA_INCLUDE@ JAVA_JUNIT = @JAVA_JUNIT@ JAVA_VERSION = @JAVA_VERSION@ JDK_INCLUDE = @JDK_INCLUDE@ JNI_EXTRA_LDFLAGS = @JNI_EXTRA_LDFLAGS@ JUNIT = @JUNIT@ LASSO_APP_DEFINES = @LASSO_APP_DEFINES@ LASSO_CFLAGS = @LASSO_CFLAGS@ LASSO_CORE_CFLAGS = @LASSO_CORE_CFLAGS@ LASSO_CORE_LIBS = @LASSO_CORE_LIBS@ LASSO_DEFINES = @LASSO_DEFINES@ LASSO_DOCDIR = @LASSO_DOCDIR@ LASSO_LIBS = @LASSO_LIBS@ LASSO_PUB_CFLAGS = @LASSO_PUB_CFLAGS@ LASSO_STATIC_BINARIES = @LASSO_STATIC_BINARIES@ LASSO_VERSION_INFO = @LASSO_VERSION_INFO@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PERLINSTALLSITEARCH = @PERLINSTALLSITEARCH@ PERLMAN3DIR = @PERLMAN3DIR@ PERL_CFLAGS = @PERL_CFLAGS@ PERL_VERSION = @PERL_VERSION@ PHP5 = @PHP5@ PHP5_CONFIG = @PHP5_CONFIG@ PHP5_CONFIG_DIR = @PHP5_CONFIG_DIR@ PHP5_EXTENSION_DIR = @PHP5_EXTENSION_DIR@ PHP5_INCLUDES = @PHP5_INCLUDES@ PHP5_INCLUDE_DIR = @PHP5_INCLUDE_DIR@ PHP5_LDFLAGS = @PHP5_LDFLAGS@ PHP5_LIBS = @PHP5_LIBS@ PHP5_PREFIX = @PHP5_PREFIX@ PHP5_UNPREFIXED_EXTENSION_DIR = @PHP5_UNPREFIXED_EXTENSION_DIR@ PHP5_VERSION = @PHP5_VERSION@ PHP7 = @PHP7@ PHP7_CONFIG = @PHP7_CONFIG@ PHP7_CONFIG_DIR = @PHP7_CONFIG_DIR@ PHP7_EXTENSION_DIR = @PHP7_EXTENSION_DIR@ PHP7_INCLUDES = @PHP7_INCLUDES@ PHP7_INCLUDE_DIR = @PHP7_INCLUDE_DIR@ PHP7_LDFLAGS = @PHP7_LDFLAGS@ PHP7_LIBS = @PHP7_LIBS@ PHP7_PREFIX = @PHP7_PREFIX@ PHP7_UNPREFIXED_EXTENSION_DIR = @PHP7_UNPREFIXED_EXTENSION_DIR@ PHP7_VERSION = @PHP7_VERSION@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PYTHON = @PYTHON@ PYTHON_VERSION = @PYTHON_VERSION@ PY_CFLAGS = @PY_CFLAGS@ PY_DYNLOAD = @PY_DYNLOAD@ PY_EXTRA_LIBS = @PY_EXTRA_LIBS@ PY_LIB_A = @PY_LIB_A@ PY_LIB_LOC = @PY_LIB_LOC@ PY_SITE_PACKAGES = @PY_SITE_PACKAGES@ RANLIB = @RANLIB@ RC = @RC@ REST2HTML = @REST2HTML@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_VERSION = @SWIG_VERSION@ TAR = @TAR@ TESTS_JUNIT = @TESTS_JUNIT@ UPCASED_DLL_FILENAME = @UPCASED_DLL_FILENAME@ VERSION = @VERSION@ VERSION_UNDERSCORED = @VERSION_UNDERSCORED@ WINDOWS_VERSION = @WINDOWS_VERSION@ XSLTPROC = @XSLTPROC@ Z_CFLAGS = @Z_CFLAGS@ Z_LIBS = @Z_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ uudecode = @uudecode@ SUBDIRS = lasso all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign docs/reference/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign docs/reference/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lasso-2.8.2/docs/reference/PaxHeaders/lasso0000644000000000000000000000013214404126162015654 xustar0030 mtime=1678814322.921964197 30 atime=1678814326.421984131 30 ctime=1678814322.921964197 lasso-2.8.2/docs/reference/lasso/0000755000175000017500000000000014404126162021201 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/docs/reference/lasso/PaxHeaders/lasso-docs.xml0000644000000000000000000000013114117162531020522 xustar0030 mtime=1631380825.848637964 30 atime=1678814303.033851044 29 ctime=1678814322.89796406 lasso-2.8.2/docs/reference/lasso/lasso-docs.xml0000644000175000017500000003537614117162531024011 0ustar00bdauvergnebdauvergne00000000000000 %gtkdocentities; ]> &package_name; Reference Manual for &package_string;. The latest version of this documentation can be found on-line at http://lasso.entrouvert.org/documentation/index.html. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. 2004, 2005, 2006, 2007, 2008, 2009, 2010 Entr'ouvert Lasso & Liberty Alliance Overview Lasso is a library which provides all the necessary functions for sites to implement Liberty Alliance specifications. It defines processes for federated identities, single sign-on and related protocols. Founded in 2001 by Sun in order to propose an alternative to the Microsoft Passport project, the consortium Liberty Alliance aims to promote an infrastructure of standards allowing the management of federated identities between several services or systems. A federated identity (or network identity) of an individual or a legal entity on Internet gather at the same time: Its identification (name, co-ordinates, preferences, history...); Its authentication (which guarantees the validity of an identity); Its authorisations (access rights to information, access rights to services). Liberty standards aims to give more coherence to a network identity which is scattered (numerous logins and passwords) today. This identity becomes frequently delicate to manage, both for customers and businesses. The Liberty Alliance specifications define three types of actors: The user, person or entity who can acquire an identity; The identity provider which creates and manages the identity of the users, and authenticates them to the service providers; The service provider who provides services to the users once that they have authenticated to an identity provider. One calls circle of trust a grouping of identity providers and service providers which agreed to share (to federate) the identity of their users. Contrary to most other implementations of Liberty Alliance, Lasso is not a full-fedged system but a simple C library, with complete bindings for Java, Perl, PHP and Python. The integration work should largely be facilitated. An existing site should be able to integrate it in a few days of development, without calling into question its architecture. Lasso is a library written in C Language. Lasso is built on top of libxml2, XMLSec and OpenSSL and is licensed under the GNU General Public License (with an OpenSSL exception). Application Programming Interface Lasso Architecture Lasso handle the concepts of providers sharing identities, that can enable the creation of sessions following an authentication. The current provider is represented by the LassoServer object, which inherit from the LassoProvider. All known providers to the current provider must be registered inside the LassoServer object. Some providers are identity providers, by sending authentication request you can establish federation, materialised by LassoFederation objects, between identity stored by the identity provider and another stored by the current provider. Those federation are stored in the LassoIdentity object. Each time an authentication is done, an assertion reprenting it is stored in the LassoSession object. They are stored in a map, keyed by the originating identity provider, see lasso_session_get_assertion(). Protocols from the ID-FF 1.2 or the SAML 2.0 family are represented by object whose class inherit from LassoProfile. The constructor of those profile objects needs a LassoServer, and eventually a LassoIdentity and a LassoSession. LassoNode is the base class for all Lasso classes, it gives XML serialization and deserialization support to all of them. The LassoMiscTextNode allows to represent miscellenaous nodes for whose no mapping to a specific GObjectClass exists. Identity Federation Framework - ID-FF 1.2 profiles Objects from ID-FF 1.2 schemas SAML 2.0 Single Sign On profiles The profile LassoLogin and LassoLogout are shared between SAML 2.0 and ID-FF 1.2, depending on the declared protocol support, Lasso will create request respecting the chosen standard. Beware that initialization of the LassoLogin object, after construction, differ between the two stacks of profiles. The LassoNameIdManagement profile replace the nearly equivalent LassoDefederation profile from ID-FF 1.2. Objects from SAML 2.0 schemas Object from the SOAP 1.1 schemas Object from the XML-DSIG schemas API Index Index of deprecated API Index of new API in 2.3 lasso-2.8.2/docs/reference/lasso/PaxHeaders/lasso-overrides.txt0000644000000000000000000000013213766621500021621 xustar0030 mtime=1608196928.762895301 30 atime=1678814303.077851294 30 ctime=1678814322.901964082 lasso-2.8.2/docs/reference/lasso/lasso-overrides.txt0000644000175000017500000000000013766621500025057 0ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/docs/reference/lasso/PaxHeaders/Makefile.am0000644000000000000000000000013214117162531017766 xustar0030 mtime=1631380825.848637964 30 atime=1678814114.728791606 30 ctime=1678814322.893964038 lasso-2.8.2/docs/reference/lasso/Makefile.am0000644000175000017500000001163714117162531023246 0ustar00bdauvergnebdauvergne00000000000000# -*- mode: makefile -*- # # Makefile.am - template makefile for gtk-doc module # Copyright (C) 2007-2017 Stefan Sauer # # 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 Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # # As a special exception, the above copyright owner gives unlimited # permission to copy, distribute and modify this Makefile.am template. # You need not follow the terms of the GNU General Public License when # using or distributing such Makefile.am files, even though portions of # the text of the Makefile.am appear in them. The GNU General Public # License (GPL) does govern all other use of the material that constitutes # the Makefile.am template. # This is a blank Makefile.am for using gtk-doc. # Copy this to your project's API docs directory and modify the variables to # suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples # of using the various options. # The name of the module, e.g. 'glib'. DOC_MODULE=lasso # Uncomment for versioned docs and specify the version of the module, e.g. '2'. #DOC_MODULE_VERSION=2 # The top-level XML file. DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.xml # The directory containing the source code. Relative to $(srcdir). # gtk-doc will search all .c & .h files beneath here for inline comments # documenting the functions and macros. # e.g. DOC_SOURCE_DIR=../../../gtk DOC_SOURCE_DIR=../../../lasso # Extra options to pass to gtkdoc-scangobj. Not normally needed. SCANGOBJ_OPTIONS= # Extra options to supply to gtkdoc-scan. # e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED" SCAN_OPTIONS=--ignore-decorators=LASSO_EXPORT # Extra options to supply to gtkdoc-mkdb # Extra options to supply to gtkdoc-mktmpl # e.g. MKTMPL_OPTIONS=--only-section-tmpl MKTMPL_OPTIONS= # e.g. MKDB_OPTIONS=--xml-mode --output-format=xml MKDB_OPTIONS=--xml-mode --output-format=xml # Extra options to supply to gtkdoc-mkhtml MKHTML_OPTIONS=--path=$(shell pwd) # Extra options to supply to gtkdoc-fixref. Not normally needed. # e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html FIXXREF_OPTIONS= # Used for dependencies. The docs will be rebuilt if any of these change. # e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h # e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c HFILE_GLOB= CFILE_GLOB= # Extra header to include when scanning, which are not under DOC_SOURCE_DIR # e.g. EXTRA_HFILES=$(top_srcdir}/contrib/extra.h EXTRA_HFILES= # Header files to ignore when scanning. Use base file name, no paths # e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h IGNORE_HFILES= sessionprivate.h logoutprivate.h loginprivate.h profileprivate.h \ identityprivate.h serverprivate.h providerprivate.h id_ff_extensions_private.h \ private.h saml_2_0_loginprivate.h \ saml_2_0_profileprivate.h saml_2_0_logoutprivate.h ecpprivate.h \ saml_2_0_serverprivate.h saml_2_0_providerprivate.h federationprivate.h \ registry-private.h \ saml2_login_private.h \ backward_comp.h lasso_config.h utils.h debug.h # Images to copy into HTML directory. # e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png HTML_IMAGES= # Extra SGML files that are included by $(DOC_MAIN_SGML_FILE). # e.g. content_files=running.sgml building.sgml changes-2.0.sgml content_files= # SGML files where gtk-doc abbrevations (#GtkWidget) are expanded # These files must be listed here *and* in content_files # e.g. expand_content_files=running.sgml expand_content_files= # CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library. # Only needed if you are using gtkdoc-scangobj to dynamically query widget # signals and properties. # e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS) # e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib) GTKDOC_CFLAGS=$(LASSO_CFLAGS) -I$(top_srcdir) -I$(top_builddir) GTKDOC_LIBS= \ $(top_builddir)/lasso/liblasso.la \ $(LASSO_LIBS) # This includes the standard gtk-doc make rules, copied by gtkdocize. include $(top_srcdir)/gtk-doc.make # Other files to distribute # e.g. EXTRA_DIST += version.xml.in EXTRA_DIST += lasso-sections.txt lasso-docs.xml version.xml.in lasso.types style.css # Files not to distribute # for --rebuild-types in $(SCAN_OPTIONS), e.g. $(DOC_MODULE).types # for --rebuild-sections in $(SCAN_OPTIONS) e.g. $(DOC_MODULE)-sections.txt # DISTCLEANFILES = # Comment this out if you want your docs-status tested during 'make check' if ENABLE_GTK_DOC TESTS_ENVIRONMENT = cd $(srcdir) #TESTS = $(GTKDOC_CHECK) endif -include $(top_srcdir)/git.mk lasso-2.8.2/docs/reference/lasso/PaxHeaders/Makefile.in0000644000000000000000000000013214404125673020004 xustar0030 mtime=1678814139.580930031 30 atime=1678814149.828987251 30 ctime=1678814322.893964038 lasso-2.8.2/docs/reference/lasso/Makefile.in0000644000175000017500000007744514404125673023275 0ustar00bdauvergnebdauvergne00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # -*- mode: makefile -*- # # Makefile.am - template makefile for gtk-doc module # Copyright (C) 2007-2017 Stefan Sauer # # 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 Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # # As a special exception, the above copyright owner gives unlimited # permission to copy, distribute and modify this Makefile.am template. # You need not follow the terms of the GNU General Public License when # using or distributing such Makefile.am files, even though portions of # the text of the Makefile.am appear in them. The GNU General Public # License (GPL) does govern all other use of the material that constitutes # the Makefile.am template. # This is a blank Makefile.am for using gtk-doc. # Copy this to your project's API docs directory and modify the variables to # suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples # of using the various options. # -*- mode: makefile -*- # # gtk-doc.make - make rules for gtk-doc # Copyright (C) 2003 James Henstridge # 2004-2007 Damon Chaplin # 2007-2017 Stefan Sauer # # 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 Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . #################################### # Everything below here is generic # #################################### VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = docs/reference/lasso ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ac_check_class.m4 \ $(top_srcdir)/m4/ac_check_classpath.m4 \ $(top_srcdir)/m4/ac_check_junit.m4 \ $(top_srcdir)/m4/ac_prog_jar.m4 \ $(top_srcdir)/m4/ac_prog_java.m4 \ $(top_srcdir)/m4/ac_prog_java_works.m4 \ $(top_srcdir)/m4/ac_prog_javac.m4 \ $(top_srcdir)/m4/ac_prog_javac_works.m4 \ $(top_srcdir)/m4/ac_prog_javah.m4 \ $(top_srcdir)/m4/ac_try_compile_java.m4 \ $(top_srcdir)/m4/as-compiler-flag.m4 \ $(top_srcdir)/m4/dps_java_check_class.m4 \ $(top_srcdir)/m4/dps_xtra_classpath.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h \ $(top_builddir)/lasso/lasso_config.h CONFIG_CLEAN_FILES = version.xml CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/version.xml.in \ $(top_srcdir)/gtk-doc.make DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CHECK_CFLAGS = @CHECK_CFLAGS@ CHECK_LIBS = @CHECK_LIBS@ CLASSPATH_JUNIT = @CLASSPATH_JUNIT@ CLASSPATH_OPT = @CLASSPATH_OPT@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CSHARPCILINTERPRETER = @CSHARPCILINTERPRETER@ CSHARPCOMPILER = @CSHARPCOMPILER@ CSHARPCYGPATH_W = @CSHARPCYGPATH_W@ CSHARPDYNAMICLINKING = @CSHARPDYNAMICLINKING@ CSHARPLIBRARYPREFIX = @CSHARPLIBRARYPREFIX@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEBUGGING = @DEBUGGING@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLL_FILENAME = @DLL_FILENAME@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GACUTIL = @GACUTIL@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@ GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HTML_DIR = @HTML_DIR@ INKSCAPE = @INKSCAPE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVAC_FLAGS = @JAVAC_FLAGS@ JAVAH = @JAVAH@ JAVAH_FLAGS = @JAVAH_FLAGS@ JAVA_INCLUDE = @JAVA_INCLUDE@ JAVA_JUNIT = @JAVA_JUNIT@ JAVA_VERSION = @JAVA_VERSION@ JDK_INCLUDE = @JDK_INCLUDE@ JNI_EXTRA_LDFLAGS = @JNI_EXTRA_LDFLAGS@ JUNIT = @JUNIT@ LASSO_APP_DEFINES = @LASSO_APP_DEFINES@ LASSO_CFLAGS = @LASSO_CFLAGS@ LASSO_CORE_CFLAGS = @LASSO_CORE_CFLAGS@ LASSO_CORE_LIBS = @LASSO_CORE_LIBS@ LASSO_DEFINES = @LASSO_DEFINES@ LASSO_DOCDIR = @LASSO_DOCDIR@ LASSO_LIBS = @LASSO_LIBS@ LASSO_PUB_CFLAGS = @LASSO_PUB_CFLAGS@ LASSO_STATIC_BINARIES = @LASSO_STATIC_BINARIES@ LASSO_VERSION_INFO = @LASSO_VERSION_INFO@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PERLINSTALLSITEARCH = @PERLINSTALLSITEARCH@ PERLMAN3DIR = @PERLMAN3DIR@ PERL_CFLAGS = @PERL_CFLAGS@ PERL_VERSION = @PERL_VERSION@ PHP5 = @PHP5@ PHP5_CONFIG = @PHP5_CONFIG@ PHP5_CONFIG_DIR = @PHP5_CONFIG_DIR@ PHP5_EXTENSION_DIR = @PHP5_EXTENSION_DIR@ PHP5_INCLUDES = @PHP5_INCLUDES@ PHP5_INCLUDE_DIR = @PHP5_INCLUDE_DIR@ PHP5_LDFLAGS = @PHP5_LDFLAGS@ PHP5_LIBS = @PHP5_LIBS@ PHP5_PREFIX = @PHP5_PREFIX@ PHP5_UNPREFIXED_EXTENSION_DIR = @PHP5_UNPREFIXED_EXTENSION_DIR@ PHP5_VERSION = @PHP5_VERSION@ PHP7 = @PHP7@ PHP7_CONFIG = @PHP7_CONFIG@ PHP7_CONFIG_DIR = @PHP7_CONFIG_DIR@ PHP7_EXTENSION_DIR = @PHP7_EXTENSION_DIR@ PHP7_INCLUDES = @PHP7_INCLUDES@ PHP7_INCLUDE_DIR = @PHP7_INCLUDE_DIR@ PHP7_LDFLAGS = @PHP7_LDFLAGS@ PHP7_LIBS = @PHP7_LIBS@ PHP7_PREFIX = @PHP7_PREFIX@ PHP7_UNPREFIXED_EXTENSION_DIR = @PHP7_UNPREFIXED_EXTENSION_DIR@ PHP7_VERSION = @PHP7_VERSION@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PYTHON = @PYTHON@ PYTHON_VERSION = @PYTHON_VERSION@ PY_CFLAGS = @PY_CFLAGS@ PY_DYNLOAD = @PY_DYNLOAD@ PY_EXTRA_LIBS = @PY_EXTRA_LIBS@ PY_LIB_A = @PY_LIB_A@ PY_LIB_LOC = @PY_LIB_LOC@ PY_SITE_PACKAGES = @PY_SITE_PACKAGES@ RANLIB = @RANLIB@ RC = @RC@ REST2HTML = @REST2HTML@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_VERSION = @SWIG_VERSION@ TAR = @TAR@ TESTS_JUNIT = @TESTS_JUNIT@ UPCASED_DLL_FILENAME = @UPCASED_DLL_FILENAME@ VERSION = @VERSION@ VERSION_UNDERSCORED = @VERSION_UNDERSCORED@ WINDOWS_VERSION = @WINDOWS_VERSION@ XSLTPROC = @XSLTPROC@ Z_CFLAGS = @Z_CFLAGS@ Z_LIBS = @Z_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ uudecode = @uudecode@ # The name of the module, e.g. 'glib'. DOC_MODULE = lasso # Uncomment for versioned docs and specify the version of the module, e.g. '2'. #DOC_MODULE_VERSION=2 # The top-level XML file. DOC_MAIN_SGML_FILE = $(DOC_MODULE)-docs.xml # The directory containing the source code. Relative to $(srcdir). # gtk-doc will search all .c & .h files beneath here for inline comments # documenting the functions and macros. # e.g. DOC_SOURCE_DIR=../../../gtk DOC_SOURCE_DIR = ../../../lasso # Extra options to pass to gtkdoc-scangobj. Not normally needed. SCANGOBJ_OPTIONS = # Extra options to supply to gtkdoc-scan. # e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED" SCAN_OPTIONS = --ignore-decorators=LASSO_EXPORT # Extra options to supply to gtkdoc-mkdb # Extra options to supply to gtkdoc-mktmpl # e.g. MKTMPL_OPTIONS=--only-section-tmpl MKTMPL_OPTIONS = # e.g. MKDB_OPTIONS=--xml-mode --output-format=xml MKDB_OPTIONS = --xml-mode --output-format=xml # Extra options to supply to gtkdoc-mkhtml MKHTML_OPTIONS = --path=$(shell pwd) # Extra options to supply to gtkdoc-fixref. Not normally needed. # e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html FIXXREF_OPTIONS = # Used for dependencies. The docs will be rebuilt if any of these change. # e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h # e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c HFILE_GLOB = CFILE_GLOB = # Extra header to include when scanning, which are not under DOC_SOURCE_DIR # e.g. EXTRA_HFILES=$(top_srcdir}/contrib/extra.h EXTRA_HFILES = # Header files to ignore when scanning. Use base file name, no paths # e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h IGNORE_HFILES = sessionprivate.h logoutprivate.h loginprivate.h profileprivate.h \ identityprivate.h serverprivate.h providerprivate.h id_ff_extensions_private.h \ private.h saml_2_0_loginprivate.h \ saml_2_0_profileprivate.h saml_2_0_logoutprivate.h ecpprivate.h \ saml_2_0_serverprivate.h saml_2_0_providerprivate.h federationprivate.h \ registry-private.h \ saml2_login_private.h \ backward_comp.h lasso_config.h utils.h debug.h # Images to copy into HTML directory. # e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png HTML_IMAGES = # Extra SGML files that are included by $(DOC_MAIN_SGML_FILE). # e.g. content_files=running.sgml building.sgml changes-2.0.sgml content_files = # SGML files where gtk-doc abbrevations (#GtkWidget) are expanded # These files must be listed here *and* in content_files # e.g. expand_content_files=running.sgml expand_content_files = # CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library. # Only needed if you are using gtkdoc-scangobj to dynamically query widget # signals and properties. # e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS) # e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib) GTKDOC_CFLAGS = $(LASSO_CFLAGS) -I$(top_srcdir) -I$(top_builddir) GTKDOC_LIBS = \ $(top_builddir)/lasso/liblasso.la \ $(LASSO_LIBS) @GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_CC = $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) @GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_CC = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) @GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_LD = $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) @GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_LD = $(LIBTOOL) --tag=CC --mode=link $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) @GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_RUN = @GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_RUN = $(LIBTOOL) --mode=execute # We set GPATH here; this gives us semantics for GNU make # which are more like other make's VPATH, when it comes to # whether a source that is a target of one rule is then # searched for in VPATH/GPATH. # GPATH = $(srcdir) TARGET_DIR = $(HTML_DIR)/$(DOC_MODULE) SETUP_FILES = \ $(content_files) \ $(expand_content_files) \ $(DOC_MAIN_SGML_FILE) \ $(DOC_MODULE)-sections.txt \ $(DOC_MODULE)-overrides.txt # This includes the standard gtk-doc make rules, copied by gtkdocize. # Other files to distribute # e.g. EXTRA_DIST += version.xml.in EXTRA_DIST = $(HTML_IMAGES) $(SETUP_FILES) lasso-sections.txt \ lasso-docs.xml version.xml.in lasso.types style.css DOC_STAMPS = setup-build.stamp scan-build.stamp sgml-build.stamp \ html-build.stamp pdf-build.stamp \ sgml.stamp html.stamp pdf.stamp SCANOBJ_FILES = \ $(DOC_MODULE).actions \ $(DOC_MODULE).args \ $(DOC_MODULE).hierarchy \ $(DOC_MODULE).interfaces \ $(DOC_MODULE).prerequisites \ $(DOC_MODULE).signals REPORT_FILES = \ $(DOC_MODULE)-undocumented.txt \ $(DOC_MODULE)-undeclared.txt \ $(DOC_MODULE)-unused.txt CLEANFILES = $(SCANOBJ_FILES) $(REPORT_FILES) $(DOC_STAMPS) gtkdoc-check.test @GTK_DOC_BUILD_HTML_FALSE@HTML_BUILD_STAMP = @GTK_DOC_BUILD_HTML_TRUE@HTML_BUILD_STAMP = html-build.stamp @GTK_DOC_BUILD_PDF_FALSE@PDF_BUILD_STAMP = @GTK_DOC_BUILD_PDF_TRUE@PDF_BUILD_STAMP = pdf-build.stamp #### setup #### GTK_DOC_V_SETUP = $(GTK_DOC_V_SETUP_@AM_V@) GTK_DOC_V_SETUP_ = $(GTK_DOC_V_SETUP_@AM_DEFAULT_V@) GTK_DOC_V_SETUP_0 = @echo " DOC Preparing build"; #### scan #### GTK_DOC_V_SCAN = $(GTK_DOC_V_SCAN_@AM_V@) GTK_DOC_V_SCAN_ = $(GTK_DOC_V_SCAN_@AM_DEFAULT_V@) GTK_DOC_V_SCAN_0 = @echo " DOC Scanning header files"; GTK_DOC_V_INTROSPECT = $(GTK_DOC_V_INTROSPECT_@AM_V@) GTK_DOC_V_INTROSPECT_ = $(GTK_DOC_V_INTROSPECT_@AM_DEFAULT_V@) GTK_DOC_V_INTROSPECT_0 = @echo " DOC Introspecting gobjects"; #### xml #### GTK_DOC_V_XML = $(GTK_DOC_V_XML_@AM_V@) GTK_DOC_V_XML_ = $(GTK_DOC_V_XML_@AM_DEFAULT_V@) GTK_DOC_V_XML_0 = @echo " DOC Building XML"; #### html #### GTK_DOC_V_HTML = $(GTK_DOC_V_HTML_@AM_V@) GTK_DOC_V_HTML_ = $(GTK_DOC_V_HTML_@AM_DEFAULT_V@) GTK_DOC_V_HTML_0 = @echo " DOC Building HTML"; GTK_DOC_V_XREF = $(GTK_DOC_V_XREF_@AM_V@) GTK_DOC_V_XREF_ = $(GTK_DOC_V_XREF_@AM_DEFAULT_V@) GTK_DOC_V_XREF_0 = @echo " DOC Fixing cross-references"; #### pdf #### GTK_DOC_V_PDF = $(GTK_DOC_V_PDF_@AM_V@) GTK_DOC_V_PDF_ = $(GTK_DOC_V_PDF_@AM_DEFAULT_V@) GTK_DOC_V_PDF_0 = @echo " DOC Building PDF"; # Files not to distribute # for --rebuild-types in $(SCAN_OPTIONS), e.g. $(DOC_MODULE).types # for --rebuild-sections in $(SCAN_OPTIONS) e.g. $(DOC_MODULE)-sections.txt # DISTCLEANFILES = # Comment this out if you want your docs-status tested during 'make check' @ENABLE_GTK_DOC_TRUE@TESTS_ENVIRONMENT = cd $(srcdir) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/gtk-doc.make $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign docs/reference/lasso/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign docs/reference/lasso/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_srcdir)/gtk-doc.make $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): version.xml: $(top_builddir)/config.status $(srcdir)/version.xml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook check-am: all-am check: check-am @ENABLE_GTK_DOC_FALSE@all-local: all-am: Makefile all-local installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-local mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-local dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-data-local install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic \ maintainer-clean-local mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-local .MAKE: install-am install-strip .PHONY: all all-am all-local check check-am clean clean-generic \ clean-libtool clean-local cscopelist-am ctags-am dist-hook \ distclean distclean-generic distclean-libtool distclean-local \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-data-local \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ maintainer-clean-local mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am uninstall-local .PRECIOUS: Makefile gtkdoc-check.test: Makefile $(AM_V_GEN)echo "#!/bin/sh -e" > $@; \ echo "$(GTKDOC_CHECK_PATH) || exit 1" >> $@; \ chmod +x $@ all-gtk-doc: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP) .PHONY: all-gtk-doc @ENABLE_GTK_DOC_TRUE@all-local: all-gtk-doc docs: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP) $(REPORT_FILES): sgml-build.stamp setup-build.stamp: -$(GTK_DOC_V_SETUP)if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ files=`echo $(SETUP_FILES) $(DOC_MODULE).types`; \ if test "x$$files" != "x" ; then \ for file in $$files ; do \ destdir=`dirname $(abs_builddir)/$$file`; \ test -d "$$destdir" || mkdir -p "$$destdir"; \ test -f $(abs_srcdir)/$$file && \ cp -pf $(abs_srcdir)/$$file $(abs_builddir)/$$file || true; \ done; \ fi; \ fi $(AM_V_at)touch setup-build.stamp scan-build.stamp: setup-build.stamp $(HFILE_GLOB) $(CFILE_GLOB) $(GTK_DOC_V_SCAN)_source_dir='' ; \ for i in $(DOC_SOURCE_DIR) ; do \ _source_dir="$${_source_dir} --source-dir=$$i" ; \ done ; \ gtkdoc-scan --module=$(DOC_MODULE) --ignore-headers="$(IGNORE_HFILES)" $${_source_dir} $(SCAN_OPTIONS) $(EXTRA_HFILES) $(GTK_DOC_V_INTROSPECT)if grep -l '^..*$$' $(DOC_MODULE).types > /dev/null 2>&1 ; then \ scanobj_options=""; \ gtkdoc-scangobj 2>&1 --help | grep >/dev/null "\-\-verbose"; \ if test "$$?" = "0"; then \ if test "x$(V)" = "x1"; then \ scanobj_options="--verbose"; \ fi; \ fi; \ CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" RUN="$(GTKDOC_RUN)" CFLAGS="$(GTKDOC_CFLAGS) $(CFLAGS)" LDFLAGS="$(GTKDOC_LIBS) $(LDFLAGS)" \ gtkdoc-scangobj $(SCANGOBJ_OPTIONS) $$scanobj_options --module=$(DOC_MODULE); \ else \ for i in $(SCANOBJ_FILES) ; do \ test -f $$i || touch $$i ; \ done \ fi $(AM_V_at)touch scan-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt: scan-build.stamp @true sgml-build.stamp: setup-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(HFILE_GLOB) $(CFILE_GLOB) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt $(expand_content_files) xml/gtkdocentities.ent $(GTK_DOC_V_XML)_source_dir='' ; \ for i in $(DOC_SOURCE_DIR) ; do \ _source_dir="$${_source_dir} --source-dir=$$i" ; \ done ; \ gtkdoc-mkdb --module=$(DOC_MODULE) --output-format=xml --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) $${_source_dir} $(MKDB_OPTIONS) $(AM_V_at)touch sgml-build.stamp sgml.stamp: sgml-build.stamp @true $(DOC_MAIN_SGML_FILE): sgml-build.stamp @true xml/gtkdocentities.ent: Makefile $(GTK_DOC_V_XML)$(MKDIR_P) $(@D) && ( \ echo ""; \ echo ""; \ echo ""; \ echo ""; \ echo ""; \ echo ""; \ echo ""; \ ) > $@ html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) $(expand_content_files) $(GTK_DOC_V_HTML)rm -rf html && mkdir html && \ mkhtml_options=""; \ gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-verbose"; \ if test "$$?" = "0"; then \ if test "x$(V)" = "x1"; then \ mkhtml_options="$$mkhtml_options --verbose"; \ fi; \ fi; \ gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-path"; \ if test "$$?" = "0"; then \ mkhtml_options="$$mkhtml_options --path=\"$(abs_srcdir)\""; \ fi; \ cd html && gtkdoc-mkhtml $$mkhtml_options $(MKHTML_OPTIONS) $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE) -@test "x$(HTML_IMAGES)" = "x" || \ for file in $(HTML_IMAGES) ; do \ test -f $(abs_srcdir)/$$file && cp $(abs_srcdir)/$$file $(abs_builddir)/html; \ test -f $(abs_builddir)/$$file && cp $(abs_builddir)/$$file $(abs_builddir)/html; \ test -f $$file && cp $$file $(abs_builddir)/html; \ done; $(GTK_DOC_V_XREF)gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS) $(AM_V_at)touch html-build.stamp pdf-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) $(expand_content_files) $(GTK_DOC_V_PDF)rm -f $(DOC_MODULE).pdf && \ mkpdf_options=""; \ gtkdoc-mkpdf 2>&1 --help | grep >/dev/null "\-\-verbose"; \ if test "$$?" = "0"; then \ if test "x$(V)" = "x1"; then \ mkpdf_options="$$mkpdf_options --verbose"; \ fi; \ fi; \ if test "x$(HTML_IMAGES)" != "x"; then \ for img in $(HTML_IMAGES); do \ part=`dirname $$img`; \ echo $$mkpdf_options | grep >/dev/null "\-\-imgdir=$$part "; \ if test $$? != 0; then \ mkpdf_options="$$mkpdf_options --imgdir=$$part"; \ fi; \ done; \ fi; \ gtkdoc-mkpdf --path="$(abs_srcdir)" $$mkpdf_options $(DOC_MODULE) $(DOC_MAIN_SGML_FILE) $(MKPDF_OPTIONS) $(AM_V_at)touch pdf-build.stamp ############## clean-local: @rm -f *~ *.bak @rm -rf .libs @if echo $(SCAN_OPTIONS) | grep -q "\-\-rebuild-types" ; then \ rm -f $(DOC_MODULE).types; \ fi @if echo $(SCAN_OPTIONS) | grep -q "\-\-rebuild-sections" ; then \ rm -f $(DOC_MODULE)-sections.txt; \ fi distclean-local: @rm -rf xml html $(REPORT_FILES) $(DOC_MODULE).pdf \ $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt @if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ rm -f $(SETUP_FILES) $(DOC_MODULE).types; \ fi maintainer-clean-local: @rm -rf xml html install-data-local: @installfiles=`echo $(builddir)/html/*`; \ if test "$$installfiles" = '$(builddir)/html/*'; \ then echo 1>&2 'Nothing to install' ; \ else \ if test -n "$(DOC_MODULE_VERSION)"; then \ installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \ else \ installdir="$(DESTDIR)$(TARGET_DIR)"; \ fi; \ $(mkinstalldirs) $${installdir} ; \ for i in $$installfiles; do \ echo ' $(INSTALL_DATA) '$$i ; \ $(INSTALL_DATA) $$i $${installdir}; \ done; \ if test -n "$(DOC_MODULE_VERSION)"; then \ mv -f $${installdir}/$(DOC_MODULE).devhelp2 \ $${installdir}/$(DOC_MODULE)-$(DOC_MODULE_VERSION).devhelp2; \ fi; \ $(GTKDOC_REBASE) --relative --dest-dir=$(DESTDIR) --html-dir=$${installdir}; \ fi uninstall-local: @if test -n "$(DOC_MODULE_VERSION)"; then \ installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \ else \ installdir="$(DESTDIR)$(TARGET_DIR)"; \ fi; \ rm -rf $${installdir} # # Require gtk-doc when making dist # @HAVE_GTK_DOC_TRUE@dist-check-gtkdoc: docs @HAVE_GTK_DOC_FALSE@dist-check-gtkdoc: @HAVE_GTK_DOC_FALSE@ @echo "*** gtk-doc is needed to run 'make dist'. ***" @HAVE_GTK_DOC_FALSE@ @echo "*** gtk-doc was not found when 'configure' ran. ***" @HAVE_GTK_DOC_FALSE@ @echo "*** please install gtk-doc and rerun 'configure'. ***" @HAVE_GTK_DOC_FALSE@ @false dist-hook: dist-check-gtkdoc all-gtk-doc dist-hook-local @mkdir $(distdir)/html @cp ./html/* $(distdir)/html @-cp ./$(DOC_MODULE).pdf $(distdir)/ @-cp ./$(DOC_MODULE).types $(distdir)/ @-cp ./$(DOC_MODULE)-sections.txt $(distdir)/ @cd $(distdir) && rm -f $(DISTCLEANFILES) @$(GTKDOC_REBASE) --online --relative --html-dir=$(distdir)/html .PHONY : dist-hook-local docs #TESTS = $(GTKDOC_CHECK) -include $(top_srcdir)/git.mk # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lasso-2.8.2/docs/reference/lasso/PaxHeaders/lasso.types0000644000000000000000000000013214404126162020140 xustar0030 mtime=1678814322.937964287 30 atime=1678814300.685837699 30 ctime=1678814322.937964287 lasso-2.8.2/docs/reference/lasso/lasso.types0000644000175000017500000001044314404126162023412 0ustar00bdauvergnebdauvergne00000000000000#include #include #include #include lasso_assertion_query_get_type lasso_defederation_get_type lasso_ds_key_info_get_type lasso_ds_key_value_get_type lasso_ds_rsa_key_value_get_type lasso_ecp_get_type lasso_federation_get_type lasso_identity_get_type lasso_lecp_get_type lasso_lib_assertion_get_type lasso_lib_authentication_statement_get_type lasso_lib_authn_context_get_type lasso_lib_authn_request_envelope_get_type lasso_lib_authn_request_get_type lasso_lib_authn_response_envelope_get_type lasso_lib_authn_response_get_type lasso_lib_federation_termination_notification_get_type lasso_lib_idp_entries_get_type lasso_lib_idp_entry_get_type lasso_lib_idp_list_get_type lasso_lib_logout_request_get_type lasso_lib_logout_response_get_type lasso_lib_name_identifier_mapping_request_get_type lasso_lib_name_identifier_mapping_response_get_type lasso_lib_register_name_identifier_request_get_type lasso_lib_register_name_identifier_response_get_type lasso_lib_request_authn_context_get_type lasso_lib_scoping_get_type lasso_lib_status_response_get_type lasso_lib_subject_get_type lasso_login_get_type lasso_logout_get_type lasso_misc_text_node_get_type lasso_name_identifier_mapping_get_type lasso_name_id_management_get_type lasso_name_registration_get_type lasso_node_get_type lasso_profile_get_type lasso_provider_get_type lasso_saml2_action_get_type lasso_saml2_advice_get_type lasso_saml2_assertion_get_type lasso_saml2_attribute_get_type lasso_saml2_attribute_statement_get_type lasso_saml2_attribute_value_get_type lasso_saml2_audience_restriction_get_type lasso_saml2_authn_context_get_type lasso_saml2_authn_statement_get_type lasso_saml2_authz_decision_statement_get_type lasso_saml2_base_idabstract_get_type lasso_saml2_condition_abstract_get_type lasso_saml2_conditions_get_type lasso_saml2_encrypted_element_get_type lasso_saml2_evidence_get_type lasso_saml2_key_info_confirmation_data_get_type lasso_saml2_name_id_get_type lasso_saml2_one_time_use_get_type lasso_saml2_proxy_restriction_get_type lasso_saml2_statement_abstract_get_type lasso_saml2_subject_confirmation_data_get_type lasso_saml2_subject_confirmation_get_type lasso_saml2_subject_get_type lasso_saml2_subject_locality_get_type lasso_saml_advice_get_type lasso_saml_assertion_get_type lasso_saml_attribute_designator_get_type lasso_saml_attribute_get_type lasso_saml_attribute_statement_get_type lasso_saml_attribute_value_get_type lasso_saml_audience_restriction_condition_get_type lasso_saml_authentication_statement_get_type lasso_saml_authority_binding_get_type lasso_saml_condition_abstract_get_type lasso_saml_conditions_get_type lasso_saml_name_identifier_get_type lasso_samlp2_artifact_resolve_get_type lasso_samlp2_artifact_response_get_type lasso_samlp2_assertion_id_request_get_type lasso_samlp2_attribute_query_get_type lasso_samlp2_authn_query_get_type lasso_samlp2_authn_request_get_type lasso_samlp2_authz_decision_query_get_type lasso_samlp2_extensions_get_type lasso_samlp2_idp_entry_get_type lasso_samlp2_idp_list_get_type lasso_samlp2_logout_request_get_type lasso_samlp2_logout_response_get_type lasso_samlp2_manage_name_id_request_get_type lasso_samlp2_manage_name_id_response_get_type lasso_samlp2_name_id_mapping_request_get_type lasso_samlp2_name_id_mapping_response_get_type lasso_samlp2_name_id_policy_get_type lasso_samlp2_request_abstract_get_type lasso_samlp2_requested_authn_context_get_type lasso_samlp2_response_get_type lasso_samlp2_scoping_get_type lasso_samlp2_status_code_get_type lasso_samlp2_status_detail_get_type lasso_samlp2_status_get_type lasso_samlp2_status_response_get_type lasso_samlp2_subject_query_abstract_get_type lasso_samlp2_terminate_get_type lasso_samlp_request_abstract_get_type lasso_samlp_request_get_type lasso_samlp_response_abstract_get_type lasso_samlp_response_get_type lasso_samlp_status_code_get_type lasso_samlp_status_get_type lasso_saml_statement_abstract_get_type lasso_saml_subject_confirmation_get_type lasso_saml_subject_get_type lasso_saml_subject_locality_get_type lasso_saml_subject_statement_abstract_get_type lasso_saml_subject_statement_get_type lasso_server_get_type lasso_session_get_type lasso_soap_body_get_type lasso_soap_detail_get_type lasso_soap_envelope_get_type lasso_soap_fault_get_type lasso_soap_header_get_type lasso-2.8.2/docs/reference/lasso/PaxHeaders/version.xml.in0000644000000000000000000000013113766621500020552 xustar0030 mtime=1608196928.766895334 29 atime=1678814149.80898714 30 ctime=1678814322.893964038 lasso-2.8.2/docs/reference/lasso/version.xml.in0000644000175000017500000000001213766621500024014 0ustar00bdauvergnebdauvergne00000000000000@VERSION@ lasso-2.8.2/docs/reference/lasso/PaxHeaders/html0000644000000000000000000000013214404126163016621 xustar0030 mtime=1678814323.049964926 30 atime=1678814326.421984131 30 ctime=1678814323.049964926 lasso-2.8.2/docs/reference/lasso/html/0000755000175000017500000000000014404126163022146 5ustar00bdauvergnebdauvergne00000000000000lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSamlSubjectStatement.html0000644000000000000000000000013214404126163024667 xustar0030 mtime=1678814323.021964766 30 atime=1678814323.021964766 30 ctime=1678814323.021964766 lasso-2.8.2/docs/reference/lasso/html/LassoSamlSubjectStatement.html0000644000175000017500000001300314404126163030134 0ustar00bdauvergnebdauvergne00000000000000 LassoSamlSubjectStatement: lasso Reference Manual

LassoSamlSubjectStatement

LassoSamlSubjectStatement

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlStatementAbstract
            ╰── LassoSamlSubjectStatementAbstract
                ╰── LassoSamlSubjectStatement

Description

Functions

lasso_saml_subject_statement_new ()

LassoNode *
lasso_saml_subject_statement_new (void);

Creates a new LassoSamlSubjectStatement object.

Returns

a newly created LassoSamlSubjectStatement object

Types and Values

struct LassoSamlSubjectStatement

struct LassoSamlSubjectStatement;
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSamlAuthorityBinding.html0000644000000000000000000000013214404126163024666 xustar0030 mtime=1678814323.021964766 30 atime=1678814323.021964766 30 ctime=1678814323.021964766 lasso-2.8.2/docs/reference/lasso/html/LassoSamlAuthorityBinding.html0000644000175000017500000001405214404126163030140 0ustar00bdauvergnebdauvergne00000000000000 LassoSamlAuthorityBinding: lasso Reference Manual

LassoSamlAuthorityBinding

LassoSamlAuthorityBinding — <saml:AuthorityBinding>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlAuthorityBinding

Description

Figure 29. Schema fragment for saml:AuthorityBinding


<element name="AuthorityBinding" type="saml:AuthorityBindingType"/>
<complexType name="AuthorityBindingType">
  <attribute name="AuthorityKind" type="QName" use="required"/>
  <attribute name="Location" type="anyURI" use="required"/>
  <attribute name="Binding" type="anyURI" use="required"/>
</complexType>

Functions

lasso_saml_authority_binding_new ()

LassoNode *
lasso_saml_authority_binding_new (void);

Creates a new LassoSamlAuthorityBinding object.

Returns

a newly created LassoSamlAuthorityBinding object

Types and Values

struct LassoSamlAuthorityBinding

struct LassoSamlAuthorityBinding {
	/* <attribute name="AuthorityKind" type="QName" use="required"/> */
	char *AuthorityKind;
	/* <attribute name="Location" type="anyURI" use="required"/> */
	char *Location;
	/* <attribute name="Binding" type="anyURI" use="required"/> */
	char *Binding;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSamlAudienceRestrictionCondition.html0000644000000000000000000000013214404126163027215 xustar0030 mtime=1678814323.021964766 30 atime=1678814323.021964766 30 ctime=1678814323.021964766 lasso-2.8.2/docs/reference/lasso/html/LassoSamlAudienceRestrictionCondition.html0000644000175000017500000002042514404126163032470 0ustar00bdauvergnebdauvergne00000000000000 LassoSamlAudienceRestrictionCondition: lasso Reference Manual

LassoSamlAudienceRestrictionCondition

LassoSamlAudienceRestrictionCondition

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlConditionAbstract
            ╰── LassoSamlAudienceRestrictionCondition

Description

Functions

lasso_saml_audience_restriction_condition_new ()

LassoSamlAudienceRestrictionCondition *
lasso_saml_audience_restriction_condition_new
                               (void);

Creates a new LassoSamlAudienceRestrictionCondition object.

Returns

a newly created LassoSamlAudienceRestrictionCondition


lasso_saml_audience_restriction_condition_new_full ()

LassoSamlAudienceRestrictionCondition *
lasso_saml_audience_restriction_condition_new_full
                               (const char *audience);

Creates a new LassoSamlAudienceRestrictionCondition object and initializes it with the parameters.

Parameters

audience

a string which specify to which audience the restriction condition applies

 

Returns

a newly created LassoSamlAudienceRestrictionCondition

Types and Values

struct LassoSamlAudienceRestrictionCondition

struct LassoSamlAudienceRestrictionCondition {
	/* <element ref="saml:Audience" maxOccurs="unbounded"/> */
	GList *Audience; /* of strings */
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSamlp2AuthzDecisionQuery.html0000644000000000000000000000013214404126163025444 xustar0030 mtime=1678814323.025964789 30 atime=1678814323.025964789 30 ctime=1678814323.025964789 lasso-2.8.2/docs/reference/lasso/html/LassoSamlp2AuthzDecisionQuery.html0000644000175000017500000001471514404126163030724 0ustar00bdauvergnebdauvergne00000000000000 LassoSamlp2AuthzDecisionQuery: lasso Reference Manual

LassoSamlp2AuthzDecisionQuery

LassoSamlp2AuthzDecisionQuery — <samlp2:AuthzDecisionQuery>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlp2RequestAbstract
            ╰── LassoSamlp2SubjectQueryAbstract
                ╰── LassoSamlp2AuthzDecisionQuery

Description

Figure 73. Schema fragment for samlp2:AuthzDecisionQuery


<complexType name="AuthzDecisionQueryType">
  <complexContent>
    <extension base="samlp:SubjectQueryAbstractType">
      <sequence>
        <element ref="saml:Action" maxOccurs="unbounded"/>
        <element ref="saml:Evidence" minOccurs="0"/>
      </sequence>
      <attribute name="Resource" type="anyURI" use="required"/>
    </extension>
  </complexContent>
</complexType>

Functions

lasso_samlp2_authz_decision_query_new ()

LassoNode *
lasso_samlp2_authz_decision_query_new (void);

Creates a new LassoSamlp2AuthzDecisionQuery object.

Returns

a newly created LassoSamlp2AuthzDecisionQuery object

Types and Values

struct LassoSamlp2AuthzDecisionQuery

struct LassoSamlp2AuthzDecisionQuery {
	/* elements */
	LassoSaml2Action *Action;
	LassoSaml2Evidence *Evidence;
	/* attributes */
	char *Resource;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSamlAdvice.html0000644000000000000000000000013214404126163022576 xustar0030 mtime=1678814323.017964743 30 atime=1678814323.017964743 30 ctime=1678814323.017964743 lasso-2.8.2/docs/reference/lasso/html/LassoSamlAdvice.html0000644000175000017500000001330614404126163026051 0ustar00bdauvergnebdauvergne00000000000000 LassoSamlAdvice: lasso Reference Manual

LassoSamlAdvice

LassoSamlAdvice — <saml:Advice>

Functions

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlAdvice

Description

Figure 23. Schema fragment for saml:Advice

<element name="Advice" type="saml:AdviceType"/>
<complexType name="AdviceType">
  <choice minOccurs="0" maxOccurs="unbounded">
    <element ref="saml:AssertionIDReference"/>
    <element ref="saml:Assertion"/>
    <any namespace="##other" processContents="lax"/>
  </choice>
</complexType>

<element name="AssertionIDReference" type="saml:IDReferenceType"/>
<simpleType name="IDReferenceType">
  <restriction base="string"/>
</simpleType>

Functions

lasso_saml_advice_new ()

LassoNode *
lasso_saml_advice_new (void);

Creates a new LassoSamlAdvice object.

Returns

a newly created LassoSamlAdvice

Types and Values

struct LassoSamlAdvice

struct LassoSamlAdvice {
	/* <element ref="saml:AssertionIDReference"/> */
	GList *AssertionIDReference; /* of LassoNode */
	/* <element ref="saml:Assertion"/> */
	struct _LassoSamlAssertion *Assertion;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoLibLogoutRequest.html0000644000000000000000000000013214404126163024037 xustar0030 mtime=1678814323.005964675 30 atime=1678814323.005964675 30 ctime=1678814323.005964675 lasso-2.8.2/docs/reference/lasso/html/LassoLibLogoutRequest.html0000644000175000017500000002337114404126163027315 0ustar00bdauvergnebdauvergne00000000000000 LassoLibLogoutRequest: lasso Reference Manual

LassoLibLogoutRequest

LassoLibLogoutRequest — <lib:LogoutRequest>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlpRequestAbstract
            ╰── LassoLibLogoutRequest

Description

Figure 11. Schema fragment for lib:LogoutRequest

<xs:element name="LogoutRequest" type="LogoutRequestType"/>
<xs:complexType name="LogoutRequestType">
  <xs:complexContent>
    <xs:extension base="samlp:RequestAbstractType">
      <xs:sequence>
        <xs:element ref="Extension" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="ProviderID"/>
        <xs:element ref="saml:NameIdentifier"/>
        <xs:element name="SessionIndex" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="RelayState" minOccurs="0"/>
      </xs:sequence>
      <xs:attribute ref="consent" use="optional"/>
      <xs:attribute name="NotOnOrAfter" type="xs:dateTime" use="optional"/>
    </xs:extension>
  </xs:complexContent>
</xs:complexType>

<xs:element name="ProviderID" type="md:entityIDType"/>
<xs:element name="RelayState" type="xs:string"/>

Functions

lasso_lib_logout_request_new ()

LassoNode *
lasso_lib_logout_request_new (void);

Creates a new LassoLibLogoutRequest object.

Returns

a newly created LassoLibLogoutRequest object


lasso_lib_logout_request_new_full ()

LassoNode *
lasso_lib_logout_request_new_full (char *providerID,
                                   LassoSamlNameIdentifier *nameIdentifier,
                                   LassoSignatureType sign_type,
                                   LassoSignatureMethod sign_method);

Creates a new LassoLibLogoutRequest object and initializes it with the parameters.

Parameters

providerID

the provider ID requesting the logout

 

nameIdentifier

the name identifier to log out

 

sign_type

a LassoSignatureType value

 

sign_method

a LassoSignatureMethod value

 

Returns

a newly created LassoLibLogoutRequest object

Types and Values

struct LassoLibLogoutRequest

struct LassoLibLogoutRequest {
	/* <xs:element ref="Extension" minOccurs="0" maxOccurs="unbounded"/> */
	GList *Extension; /* of xmlNode* */
	char *ProviderID;
	LassoSamlNameIdentifier *NameIdentifier;
	char *SessionIndex;
	char *RelayState;
	char *consent;
	char *NotOnOrAfter;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSamlp2ManageNameIDRequest.html0000644000000000000000000000013214404126163025424 xustar0030 mtime=1678814323.025964789 30 atime=1678814323.025964789 30 ctime=1678814323.025964789 lasso-2.8.2/docs/reference/lasso/html/LassoSamlp2ManageNameIDRequest.html0000644000175000017500000001511514404126163030677 0ustar00bdauvergnebdauvergne00000000000000 LassoSamlp2ManageNameIDRequest: lasso Reference Manual

LassoSamlp2ManageNameIDRequest

LassoSamlp2ManageNameIDRequest — <samlp2:ManageNameIDRequest>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlp2RequestAbstract
            ╰── LassoSamlp2ManageNameIDRequest

Description

Figure 79. Schema fragment for samlp2:ManageNameIDRequest


<complexType name="ManageNameIDRequestType">
  <complexContent>
    <extension base="samlp:RequestAbstractType">
      <sequence>
        <choice>
          <element ref="saml:NameID"/>
          <element ref="saml:EncryptedID"/>
        </choice>
        <choice>
          <element ref="samlp:NewID"/>
          <element ref="samlp:NewEncryptedID"/>
          <element ref="samlp:Terminate"/>
        </choice>
      </sequence>
    </extension>
  </complexContent>
</complexType>

Functions

lasso_samlp2_manage_name_id_request_new ()

LassoNode *
lasso_samlp2_manage_name_id_request_new
                               (void);

Creates a new LassoSamlp2ManageNameIDRequest object.

Returns

a newly created LassoSamlp2ManageNameIDRequest object

Types and Values

struct LassoSamlp2ManageNameIDRequest

struct LassoSamlp2ManageNameIDRequest {
	/* elements */
	LassoSaml2NameID *NameID;
	LassoSaml2EncryptedElement *EncryptedID;
	char *NewID;
	LassoSaml2EncryptedElement *NewEncryptedID;
	LassoSamlp2Terminate *Terminate;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSamlp2NameIDMappingRequest.html0000644000000000000000000000013214404126163025627 xustar0030 mtime=1678814323.025964789 30 atime=1678814323.025964789 30 ctime=1678814323.025964789 lasso-2.8.2/docs/reference/lasso/html/LassoSamlp2NameIDMappingRequest.html0000644000175000017500000001502214404126163031077 0ustar00bdauvergnebdauvergne00000000000000 LassoSamlp2NameIDMappingRequest: lasso Reference Manual

LassoSamlp2NameIDMappingRequest

LassoSamlp2NameIDMappingRequest — <samlp2:NameIDMappingRequest>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlp2RequestAbstract
            ╰── LassoSamlp2NameIDMappingRequest

Description

Figure 81. Schema fragment for samlp2:NameIDMappingRequest


<complexType name="NameIDMappingRequestType">
  <complexContent>
    <extension base="samlp:RequestAbstractType">
      <sequence>
        <choice>
          <element ref="saml:BaseID"/>
          <element ref="saml:NameID"/>
          <element ref="saml:EncryptedID"/>
        </choice>
        <element ref="samlp:NameIDPolicy"/>
      </sequence>
    </extension>
  </complexContent>
</complexType>

Functions

lasso_samlp2_name_id_mapping_request_new ()

LassoNode *
lasso_samlp2_name_id_mapping_request_new
                               (void);

Creates a new LassoSamlp2NameIDMappingRequest object.

Returns

a newly created LassoSamlp2NameIDMappingRequest object

Types and Values

struct LassoSamlp2NameIDMappingRequest

struct LassoSamlp2NameIDMappingRequest {
	/* elements */
	LassoSaml2BaseIDAbstract *BaseID;
	LassoSaml2NameID *NameID;
	LassoSaml2EncryptedElement *EncryptedID;
	LassoSamlp2NameIDPolicy *NameIDPolicy;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSamlp2LogoutRequest.html0000644000000000000000000000013214404126163024467 xustar0030 mtime=1678814323.025964789 30 atime=1678814323.025964789 30 ctime=1678814323.025964789 lasso-2.8.2/docs/reference/lasso/html/LassoSamlp2LogoutRequest.html0000644000175000017500000002527314404126163027750 0ustar00bdauvergnebdauvergne00000000000000 LassoSamlp2LogoutRequest: lasso Reference Manual

LassoSamlp2LogoutRequest

LassoSamlp2LogoutRequest — <samlp2:LogoutRequest>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlp2RequestAbstract
            ╰── LassoSamlp2LogoutRequest

Description

Figure 77. Schema fragment for samlp2:LogoutRequest


<complexType name="LogoutRequestType">
  <complexContent>
    <extension base="samlp:RequestAbstractType">
      <sequence>
        <choice>
          <element ref="saml:BaseID"/>
          <element ref="saml:NameID"/>
          <element ref="saml:EncryptedID"/>
        </choice>
        <element ref="samlp:SessionIndex" minOccurs="0" maxOccurs="unbounded"/>
      </sequence>
      <attribute name="Reason" type="string" use="optional"/>
      <attribute name="NotOnOrAfter" type="dateTime" use="optional"/>
    </extension>
  </complexContent>
</complexType>

Functions

lasso_samlp2_logout_request_new ()

LassoNode *
lasso_samlp2_logout_request_new (void);

Creates a new LassoSamlp2LogoutRequest object.

Returns

a newly created LassoSamlp2LogoutRequest object


lasso_samlp2_logout_request_get_session_indexes ()

GList *
lasso_samlp2_logout_request_get_session_indexes
                               (LassoSamlp2LogoutRequest *logout_request);

If the logout request contains more than one SessionIndex element, this method must be used to retrieve due to historical circonstances. It will a return a list of the content of the SessionIndex elements.

Parameters

logout_request

a LogoutRequest object

 

Returns

a GList of sessions index.

[element-type utf8][transfer full]


lasso_samlp2_logout_request_set_session_indexes ()

void
lasso_samlp2_logout_request_set_session_indexes
                               (LassoSamlp2LogoutRequest *logout_request,
                                GList *session_index);

If you want to set more than one SessionIndex on a LogoutRequest, use this method. Beware that the public field named SessionIndex corresponds to the last element in this list. This is an symptom of the way elements are parsed by Lasso.

Parameters

logout_request

a LogoutRequest object

 

session_index

a list of session index.

[element-type utf8]

Types and Values

struct LassoSamlp2LogoutRequest

struct LassoSamlp2LogoutRequest {
	/* elements */
	LassoSaml2BaseIDAbstract *BaseID;
	LassoSaml2NameID *NameID;
	LassoSaml2EncryptedElement *EncryptedID;
	char *SessionIndex;
	/* attributes */
	char *Reason;
	char *NotOnOrAfter;

	/* This field is deprecated do not use it,
	 * kept for ABI compatibility */
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSamlSubjectConfirmation.html0000644000000000000000000000013214404126163025353 xustar0030 mtime=1678814323.021964766 30 atime=1678814323.021964766 30 ctime=1678814323.021964766 lasso-2.8.2/docs/reference/lasso/html/LassoSamlSubjectConfirmation.html0000644000175000017500000001462114404126163030627 0ustar00bdauvergnebdauvergne00000000000000 LassoSamlSubjectConfirmation: lasso Reference Manual

LassoSamlSubjectConfirmation

LassoSamlSubjectConfirmation — <saml:SubjectConfirmation>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlSubjectConfirmation

Description

Figure 40. Schema fragment for saml:SubjectConfirmation


<element name="SubjectConfirmation" type="saml:SubjectConfirmationType"/>
<complexType name="SubjectConfirmationType">
  <sequence>
    <element ref="saml:ConfirmationMethod" maxOccurs="unbounded"/>
    <element ref="saml:SubjectConfirmationData" minOccurs="0"/>
    <element ref="ds:KeyInfo" minOccurs="0"/>
  </sequence>
</complexType>

<element name="SubjectConfirmationData" type="anyType"/>
<element name="ConfirmationMethod" type="anyURI"/>

Functions

lasso_saml_subject_confirmation_new ()

LassoSamlSubjectConfirmation *
lasso_saml_subject_confirmation_new (void);

Creates a new LassoSamlSubjectConfirmation object.

Returns

a newly created LassoSamlSubjectConfirmation object

Types and Values

struct LassoSamlSubjectConfirmation

struct LassoSamlSubjectConfirmation {
	/* <element ref="saml:ConfirmationMethod" maxOccurs="unbounded"/> */
	GList *ConfirmationMethod; /* of strings */
	/* <element ref="saml:SubjectConfirmationData" minOccurs="0"/> */
	char *SubjectConfirmationData;
	LassoDsKeyInfo *KeyInfo;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoLibAssertion.html0000644000000000000000000000013214404126163023164 xustar0030 mtime=1678814323.001964653 30 atime=1678814323.001964653 30 ctime=1678814323.001964653 lasso-2.8.2/docs/reference/lasso/html/LassoLibAssertion.html0000644000175000017500000002361014404126163026436 0ustar00bdauvergnebdauvergne00000000000000 LassoLibAssertion: lasso Reference Manual

LassoLibAssertion

LassoLibAssertion — <lib:Assertion>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlAssertion
            ╰── LassoLibAssertion

Description

Authentication assertions provided in an AuthnResponse element MUST be of type AssertionType, which is an extension of saml:AssertionType, so that the RequestID attribute from the original AuthnRequest MAY be included in the InResponseTo attribute in the Assertion element. This is done because it is not required that the AuthnResponse element itself be signed. Instead, the individual Assertion elements contained MUST each be signed. Note that it is optional for the InResponseTo to be present. Its absence indicates that the AuthnResponse has been unilaterally sent by the identity provider without a corresponding AuthnRequest message from the service provider. If the attribute is present, it MUST be set to the RequestID of the original AuthnRequest.

Figure 1. Schema fragment for lib:Assertion

<xs:element name="Assertion" type="AssertionType" substitutionGroup="saml:Assertion" />
<xs:complexType name="AssertionType">
  <xs:complexContent>
    <xs:extension base="saml:AssertionType">
      <xs:attribute name="InResponseTo" type="xs:NCName" use="optional"/>
    </xs:extension>
  </xs:complexContent>
</xs:complexType>

Functions

lasso_lib_assertion_new ()

LassoLibAssertion *
lasso_lib_assertion_new (void);

Creates a new LassoLibAssertion object.

Returns

a newly created LassoLibAssertion object


lasso_lib_assertion_new_full ()

LassoLibAssertion *
lasso_lib_assertion_new_full (const char *issuer,
                              const char *requestID,
                              const char *audience,
                              const char *notBefore,
                              const char *notOnOrAfter);

Creates a new LassoLibAssertion object and initializes its Issuer, InResponseTo, AudienceRestrictionCondition, notBefore and notOnOrAfter fields or attributes.

Parameters

issuer

the issuer entityID string

 

requestID

the identifier of the request which initiated the creation of this assertion.

[allow-none]

audience

the entityID of the receiver of this assertion.

[allow-none]

notBefore

a timestamp formatted as iso-8601

 

notOnOrAfter

a timestamp formatted as iso-8601

 

Returns

a newly created LassoLibAssertion object

Types and Values

struct LassoLibAssertion

struct LassoLibAssertion {
	char *InResponseTo;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/lasso.html0000644000000000000000000000013214404126163020705 xustar0030 mtime=1678814323.049964926 30 atime=1678814323.049964926 30 ctime=1678814323.049964926 lasso-2.8.2/docs/reference/lasso/html/lasso.html0000644000175000017500000001101014404126163024146 0ustar00bdauvergnebdauvergne00000000000000 Lasso & Liberty Alliance Overview: lasso Reference Manual

Lasso & Liberty Alliance Overview

Lasso is a library which provides all the necessary functions for sites to implement Liberty Alliance specifications. It defines processes for federated identities, single sign-on and related protocols.

Founded in 2001 by Sun in order to propose an alternative to the Microsoft Passport project, the consortium Liberty Alliance aims to promote an infrastructure of standards allowing the management of federated identities between several services or systems.

A federated identity (or network identity) of an individual or a legal entity on Internet gather at the same time:

  • Its identification (name, co-ordinates, preferences, history...);
  • Its authentication (which guarantees the validity of an identity);
  • Its authorisations (access rights to information, access rights to services).

Liberty standards aims to give more coherence to a network identity which is scattered (numerous logins and passwords) today. This identity becomes frequently delicate to manage, both for customers and businesses.

The Liberty Alliance specifications define three types of actors:

  • The user, person or entity who can acquire an identity;
  • The identity provider which creates and manages the identity of the users, and authenticates them to the service providers;
  • The service provider who provides services to the users once that they have authenticated to an identity provider.

One calls circle of trust a grouping of identity providers and service providers which agreed to share (to federate) the identity of their users.

Contrary to most other implementations of Liberty Alliance, Lasso is not a full-fedged system but a simple C library, with complete bindings for Java, Perl, PHP and Python. The integration work should largely be facilitated. An existing site should be able to integrate it in a few days of development, without calling into question its architecture. Lasso is a library written in C Language.

Lasso is built on top of libxml2, XMLSec and OpenSSL and is licensed under the GNU General Public License (with an OpenSSL exception).

lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSaml2NameID.html0000644000000000000000000000013214404126163022562 xustar0030 mtime=1678814323.017964743 30 atime=1678814323.017964743 30 ctime=1678814323.017964743 lasso-2.8.2/docs/reference/lasso/html/LassoSaml2NameID.html0000644000175000017500000003727314404126163026046 0ustar00bdauvergnebdauvergne00000000000000 LassoSaml2NameID: lasso Reference Manual

LassoSaml2NameID

LassoSaml2NameID — <saml2:NameID>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSaml2NameID

Description

Figure 60. Schema fragment for saml2:NameID


<complexType name="NameIDType">
  <simpleContent>
    <extension base="string">
      <attributeGroup ref="saml:IDNameQualifiers"/>
      <attribute name="Format" type="anyURI" use="optional"/>
      <attribute name="SPProvidedID" type="string" use="optional"/>
    </extension>
  </simpleContent>
</complexType>

Functions

lasso_saml2_name_id_new ()

LassoNode *
lasso_saml2_name_id_new (void);

Creates a new LassoSaml2NameID object.

Returns

a newly created LassoSaml2NameID object


lasso_saml2_name_id_new_with_string ()

LassoNode *
lasso_saml2_name_id_new_with_string (char *content);

Creates a new LassoSaml2NameID object and initializes it with content . Beware that no format is set.

Parameters

content

the Name Identifier.

 

Returns

a newly created LassoSaml2NameID object


lasso_saml2_name_id_build_persistent ()

LassoSaml2NameID *
lasso_saml2_name_id_build_persistent (const char *id,
                                      const char *idpID,
                                      const char *providerID);

lasso_saml2_name_id_build_persistent has been deprecated since version 2.3 and should not be used in newly-written code.

use lasso_saml2_name_id_new_with_persistent_format() instead.

Create a new LassoSaml2NameID object, which the LASSO_SAML2_NAME_IDENTIFIER_FORMAT_PERSISTENT format, id as content, idpID as NameQualifier and providerID as SPNameQualifier.

Parameters

id

the identifier for the princiapl

 

idpID

the entity ID of the IdP

 

providerID

the entity ID of the provider

 

Returns

a newly created LassoSaml2NameID


lasso_saml2_name_id_equals ()

gboolean
lasso_saml2_name_id_equals (LassoSaml2NameID *name_id,
                            LassoSaml2NameID *other_name_id);

Return TRUE if name_id equals other_name_id .

Parameters

name_id

a LassoSaml2NameID object

 

other_name_id

another LassoSaml2NameID object

 

Returns

TRUE if the two NameID are equal and are LassoSaml2NameID objects, FALSE otherwise.


lasso_saml2_name_id_new_with_persistent_format ()

LassoSaml2NameID *
lasso_saml2_name_id_new_with_persistent_format
                               (const char *id,
                                const char *idpID,
                                const char *providerID);

Create a new LassoSaml2NameID object, which the LASSO_SAML2_NAME_IDENTIFIER_FORMAT_PERSISTENT format, id as content, idpID as NameQualifier and providerID as SPNameQualifier.

Parameters

id

the identifier for the princiapl

 

idpID

the entity ID of the IdP

 

providerID

the entity ID of the provider

 

Returns

a newly created LassoSaml2NameID

Since: 2.3

Types and Values

struct LassoSaml2NameID

struct LassoSaml2NameID {
	/* elements */
	char *content;
	/* attributes */
	char *Format;
	char *SPProvidedID;
	char *NameQualifier;
	char *SPNameQualifier;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/lasso-Strings-for-ID-FF-1.2.html0000644000000000000000000000013214404126163024201 xustar0030 mtime=1678814323.045964902 30 atime=1678814323.045964902 30 ctime=1678814323.045964902 lasso-2.8.2/docs/reference/lasso/html/lasso-Strings-for-ID-FF-1.2.html0000644000175000017500000021520214404126163027453 0ustar00bdauvergnebdauvergne00000000000000 Strings for ID-FF 1.2: lasso Reference Manual

Strings for ID-FF 1.2

Strings for ID-FF 1.2

Types and Values

#define LASSO_LIB_HREF
#define LASSO_LIB_PREFIX
#define LASSO_METADATA_HREF
#define LASSO_METADATA_PREFIX
#define LASSO_SAML_ASSERTION_HREF
#define LASSO_SAML_ASSERTION_PREFIX
#define LASSO_SAML_PROTOCOL_HREF
#define LASSO_SAML_PROTOCOL_PREFIX
#define LASSO_PAOS_HREF
#define LASSO_PAOS_PREFIX
#define LASSO_ECP_HREF
#define LASSO_ECP_PREFIX
#define LASSO_LIB_MAJOR_VERSION_N
#define LASSO_LIB_MINOR_VERSION_N
#define LASSO_SAML_MAJOR_VERSION_N
#define LASSO_SAML_MINOR_VERSION_N
#define LASSO_LIB_NAMEID_POLICY_TYPE_NONE
#define LASSO_LIB_NAMEID_POLICY_TYPE_ONE_TIME
#define LASSO_LIB_NAMEID_POLICY_TYPE_FEDERATED
#define LASSO_LIB_NAMEID_POLICY_TYPE_ANY
#define LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_INTERNET_PROTOCOL
#define LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_INTERNET_PROTOCOL_PASSWORD
#define LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_ONE_FACTOR_UNREGISTERED
#define LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_TWO_FACTOR_UNREGISTERED
#define LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_ONE_FACTOR_CONTRACT
#define LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_TWO_FACTOR_CONTRACT
#define LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PASSWORD
#define LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PASSWORD_PROTECTED_TRANSPORT
#define LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PREVIOUS_SESSION
#define LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SMARTCARD
#define LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SMARTCARD_PKI
#define LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SOFTWARE_PKI
#define LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_TIME_SYNC_TOKEN
#define LASSO_LIB_AUTHN_CONTEXT_COMPARISON_EXACT
#define LASSO_LIB_AUTHN_CONTEXT_COMPARISON_MINIMUM
#define LASSO_LIB_AUTHN_CONTEXT_COMPARISON_MAXIMUM
#define LASSO_LIB_AUTHN_CONTEXT_COMPARISON_BETTER
#define LASSO_SAML_AUTHENTICATION_METHOD_PASSWORD
#define LASSO_SAML_AUTHENTICATION_METHOD_KERBEROS
#define LASSO_SAML_AUTHENTICATION_METHOD_SECURE_REMOTE_PASSWORD
#define LASSO_SAML_AUTHENTICATION_METHOD_HARDWARE_TOKEN
#define LASSO_SAML_AUTHENTICATION_METHOD_SMARTCARD_PKI
#define LASSO_SAML_AUTHENTICATION_METHOD_SOFTWARE_PKI
#define LASSO_SAML_AUTHENTICATION_METHOD_PGP
#define LASSO_SAML_AUTHENTICATION_METHODS_PKI
#define LASSO_SAML_AUTHENTICATION_METHOD_XKMS
#define LASSO_SAML_AUTHENTICATION_METHOD_XMLD_SIG
#define LASSO_SAML_AUTHENTICATION_METHOD_UNSPECIFIED
#define LASSO_SAML_AUTHENTICATION_METHOD_LIBERTY
#define LASSO_LIB_STATUS_CODE_FEDERATION_DOES_NOT_EXIST
#define LASSO_LIB_STATUS_CODE_INVALID_ASSERTION_CONSUMER_SERVICE_INDEX
#define LASSO_LIB_STATUS_CODE_INVALID_SIGNATURE
#define LASSO_LIB_STATUS_CODE_NO_AUTHN_CONTEXT
#define LASSO_LIB_STATUS_CODE_NO_AVAILABLEIDP
#define LASSO_LIB_STATUS_CODE_NO_PASSIVE
#define LASSO_LIB_STATUS_CODE_NO_SUPPORTEDIDP
#define LASSO_LIB_STATUS_CODE_PROXY_COUNT_EXCEEDED
#define LASSO_LIB_STATUS_CODE_UNKNOWN_PRINCIPAL
#define LASSO_LIB_STATUS_CODE_UNSIGNED_AUTHN_REQUEST
#define LASSO_LIB_STATUS_CODE_UNSUPPORTED_PROFILE
#define LASSO_SAML_STATUS_CODE_SUCCESS
#define LASSO_SAML_STATUS_CODE_VERSION_MISMATCH
#define LASSO_SAML_STATUS_CODE_REQUESTER
#define LASSO_SAML_STATUS_CODE_RESPONDER
#define LASSO_SAML_STATUS_CODE_REQUEST_VERSION_TOO_HIGH
#define LASSO_SAML_STATUS_CODE_REQUEST_VERSION_TOO_LOW
#define LASSO_SAML_STATUS_CODE_REQUEST_VERSION_DEPRECATED
#define LASSO_SAML_STATUS_CODE_TOO_MANY_RESPONSES
#define LASSO_SAML_STATUS_CODE_RESOURCE_NOT_RECOGNIZED
#define LASSO_SAML_STATUS_CODE_REQUEST_DENIED
#define LASSO_LIB_PROTOCOL_PROFILE_BRWS_ART
#define LASSO_LIB_PROTOCOL_PROFILE_BRWS_POST
#define LASSO_LIB_PROTOCOL_PROFILE_BRWS_LECP
#define LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_IDP_HTTP
#define LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_IDP_SOAP
#define LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_SP_HTTP
#define LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_SP_SOAP
#define LASSO_LIB_PROTOCOL_PROFILE_NIM_SP_HTTP
#define LASSO_LIB_PROTOCOL_PROFILE_RNI_IDP_HTTP
#define LASSO_LIB_PROTOCOL_PROFILE_RNI_IDP_SOAP
#define LASSO_LIB_PROTOCOL_PROFILE_RNI_SP_HTTP
#define LASSO_LIB_PROTOCOL_PROFILE_RNI_SP_SOAP
#define LASSO_LIB_PROTOCOL_PROFILE_SLO_SP_HTTP
#define LASSO_LIB_PROTOCOL_PROFILE_SLO_SP_SOAP
#define LASSO_LIB_PROTOCOL_PROFILE_SLO_IDP_HTTP
#define LASSO_LIB_PROTOCOL_PROFILE_SLO_IDP_SOAP
#define LASSO_LIB_NAME_IDENTIFIER_FORMAT_FEDERATED
#define LASSO_LIB_NAME_IDENTIFIER_FORMAT_ONE_TIME
#define LASSO_LIB_NAME_IDENTIFIER_FORMAT_ENCRYPTED
#define LASSO_LIB_NAME_IDENTIFIER_FORMAT_ENTITYID
#define LASSO_LIB_CONSENT_OBTAINED
#define LASSO_LIB_CONSENT_OBTAINED_PRIOR
#define LASSO_LIB_CONSENT_OBTAINED_CURRENT_IMPLICIT
#define LASSO_LIB_CONSENT_OBTAINED_CURRENT_EXPLICIT
#define LASSO_LIB_CONSENT_UNAVAILABLE
#define LASSO_LIB_CONSENT_INAPPLICABLE
#define LASSO_SAML_CONFIRMATION_METHOD_ARTIFACT
#define LASSO_SAML_CONFIRMATION_METHOD_ARTIFACT01
#define LASSO_SAML_CONFIRMATION_METHOD_BEARER
#define LASSO_SAML_CONFIRMATION_METHOD_HOLDER_OF_KEY
#define LASSO_SAML_CONFIRMATION_METHOD_SENDER_VOUCHES

Description

Functions

Types and Values

LASSO_LIB_HREF

#define LASSO_LIB_HREF	 "urn:liberty:iff:2003-08"

Namespace for the elements specific to ID-FF 1.2 (not part of SAML 1.0)


LASSO_LIB_PREFIX

#define LASSO_LIB_PREFIX	 "lib"

Preferred prefix for the ID-FF 1.2 namespace


LASSO_METADATA_HREF

#define LASSO_METADATA_HREF	 "urn:liberty:metadata:2003-08"

Namespace for ID-FF 1.2 metadatas.


LASSO_METADATA_PREFIX

#define LASSO_METADATA_PREFIX	 "md"

Preferred prefix for ID-FF 1.2 metadata namespace.


LASSO_SAML_ASSERTION_HREF

#define LASSO_SAML_ASSERTION_HREF "urn:oasis:names:tc:SAML:1.0:assertion"

Namespace for SAML 1.0 assertion elements.


LASSO_SAML_ASSERTION_PREFIX

#define LASSO_SAML_ASSERTION_PREFIX "saml"

Preferred prefix for assertion elements.


LASSO_SAML_PROTOCOL_HREF

#define LASSO_SAML_PROTOCOL_HREF "urn:oasis:names:tc:SAML:1.0:protocol"

Namespace for SAML 1.0 protocol elements.


LASSO_SAML_PROTOCOL_PREFIX

#define LASSO_SAML_PROTOCOL_PREFIX "samlp"

Preferred prefix for assertion elements.


LASSO_PAOS_HREF

#define LASSO_PAOS_HREF   "urn:liberty:paos:2003-08"

Namespace for FIXME


LASSO_PAOS_PREFIX

#define LASSO_PAOS_PREFIX "paos"

URN binding name for PAOS


LASSO_ECP_HREF

#define LASSO_ECP_HREF   "urn:oasis:names:tc:SAML:2.0:profiles:SSO:ecp"

Namespace for FIXME


LASSO_ECP_PREFIX

#define LASSO_ECP_PREFIX "ecp"

SAML 2 URN profile name for Enhanced Client & Proxy (ECP)


LASSO_LIB_MAJOR_VERSION_N

#define LASSO_LIB_MAJOR_VERSION_N	 1

Major version of the ID-FF protocol supported.


LASSO_LIB_MINOR_VERSION_N

#define LASSO_LIB_MINOR_VERSION_N	 2

Minor version of the ID-FF protocol supported.


LASSO_SAML_MAJOR_VERSION_N

#define LASSO_SAML_MAJOR_VERSION_N	 1

Major version number of the SAML specification used for ID-FF support in Lasso.


LASSO_SAML_MINOR_VERSION_N

#define LASSO_SAML_MINOR_VERSION_N	 1

Minor version number of the SAML specification used for ID-FF support in Lasso.


LASSO_LIB_NAMEID_POLICY_TYPE_NONE

#define LASSO_LIB_NAMEID_POLICY_TYPE_NONE	 "none"

None policy for use in LassoLibAuthnRequest. It means an existing federation must be used and an error should be produced if none existed beforehand.


LASSO_LIB_NAMEID_POLICY_TYPE_ONE_TIME

#define LASSO_LIB_NAMEID_POLICY_TYPE_ONE_TIME	 "onetime"

Onetime policy for use in LassoLibAuthnRequest. It means a federation must not be created between identity and service provider. A temporary name identifier should be used instead.


LASSO_LIB_NAMEID_POLICY_TYPE_FEDERATED

#define LASSO_LIB_NAMEID_POLICY_TYPE_FEDERATED	 "federated"

Federated policy for use in LassoLibAuthnRequest. It means a federation may be created between identity and service provider (if it didn't exist before).


LASSO_LIB_NAMEID_POLICY_TYPE_ANY

#define LASSO_LIB_NAMEID_POLICY_TYPE_ANY	 "any"

Any policy for use in LassoLibAuthnRequest. It means a federation may be created if the principal agrees and it can fall back to onetime if he does not.


LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_INTERNET_PROTOCOL

#define             LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_INTERNET_PROTOCOL

The Internet Protocol class is identified when a Principal is authenticated through the use of a provided IP address. Source: Liberty ID-FF Authentication Context Specification v1.3


LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_INTERNET_PROTOCOL_PASSWORD

#define             LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_INTERNET_PROTOCOL_PASSWORD

The Internet Protocol Password class is identified when a Principal is authenticated through the use of a provided IP address, in addition to username/password. Source: Liberty ID-FF Authentication Context Specification v1.3


LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_ONE_FACTOR_UNREGISTERED

#define             LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_ONE_FACTOR_UNREGISTERED

Reflects no mobile customer registration procedures and an authentication of the mobile device without requiring explicit end-user interaction. Again, this context authenticates only the device and never the user, it is useful when services other than the mobile operator want to add a secure device authentication to their authentication process.

Source: Liberty ID-FF Authentication Context Specification v1.3


LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_TWO_FACTOR_UNREGISTERED

#define             LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_TWO_FACTOR_UNREGISTERED

Reflects no mobile customer registration procedures and a two-factor based authentication, such as secure device and user PIN. This context class is useful when a service other than the mobile operator wants to link their customer ID to a mobile supplied two-factor authentication service by capturing mobile phone data at enrollment.

Source: Liberty ID-FF Authentication Context Specification v1.3


LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_ONE_FACTOR_CONTRACT

#define             LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_ONE_FACTOR_CONTRACT

Reflects mobile contract customer registration procedures and a single factor authentication. For example, a digital signing device with tamper resistant memory for key storage, such as the mobile MSISDN, but no required PIN or biometric for real-time user authentication.

Source: Liberty ID-FF Authentication Context Specification v1.3


LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_TWO_FACTOR_CONTRACT

#define             LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_TWO_FACTOR_CONTRACT

Reflects mobile contract customer registration procedures and a two-factor based authentication. For example, a digital signing device with tamper resistant memory for key storage, such as a GSM SIM, that requires explicit proof of user identity and intent, such as a PIN or biometric.

Source: Liberty ID-FF Authentication Context Specification v1.3


LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PASSWORD

#define             LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PASSWORD

The Password class is identified when a Principal authenticates to an identity provider through the presentation of a password over an unprotected HTTP session.

Source: Liberty ID-FF Authentication Context Specification v1.3


LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PASSWORD_PROTECTED_TRANSPORT

#define             LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PASSWORD_PROTECTED_TRANSPORT

The PasswordProtectedTransport class is identified when a Principal authenticates to an identity provider through the presentation of a password over a protected session.

Source: Liberty ID-FF Authentication Context Specification v1.3


LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PREVIOUS_SESSION

#define             LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PREVIOUS_SESSION

The PreviousSession class is identified when a Principal had authenticated to an identity provider at some point in the past using any authentication context supported by that identity provider. Consequently, a subsequent authentication event that the identity provider will assert to the service provider may be significantly separated in time from the Principals current resource access request. The context for the previously authenticated session is explicitly not included in this context class because the user has not authenticated during this session, and so the mechanism that the user employed to authenticate in a previous session should not be used as part of a decision on whether to now allow access to a resource.

Source: Liberty ID-FF Authentication Context Specification v1.3


LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SMARTCARD

#define             LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SMARTCARD

The Smartcard class is identified when a Principal authenticates to an identity provider using a smartcard.

Source: Liberty ID-FF Authentication Context Specification v1.3


LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SMARTCARD_PKI

#define             LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SMARTCARD_PKI

The SmartcardPKI class is identified when a Principal authenticates to an identity provider through a two-factor authentication mechanism using a smartcard with enclosed private key and a PIN.

Source: Liberty ID-FF Authentication Context Specification v1.3


LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SOFTWARE_PKI

#define             LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SOFTWARE_PKI

The Software-PKI class is identified when a Principal uses an X.509 certificate stored in software to authenticate to the identity provider.

Source: Liberty ID-FF Authentication Context Specification v1.3


LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_TIME_SYNC_TOKEN

#define             LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_TIME_SYNC_TOKEN

The TimeSyncToken class is identified when a Principal authenticates through a time synchronization token.

Source: Liberty ID-FF Authentication Context Specification v1.3


LASSO_LIB_AUTHN_CONTEXT_COMPARISON_EXACT

#define LASSO_LIB_AUTHN_CONTEXT_COMPARISON_EXACT	 "exact"

Ask for the exact authentication context.


LASSO_LIB_AUTHN_CONTEXT_COMPARISON_MINIMUM

#define LASSO_LIB_AUTHN_CONTEXT_COMPARISON_MINIMUM	 "minimum"

Ask for at least this authentication context.


LASSO_LIB_AUTHN_CONTEXT_COMPARISON_MAXIMUM

#define LASSO_LIB_AUTHN_CONTEXT_COMPARISON_MAXIMUM	 "maximum"

Ask for at most this authentication context.


LASSO_LIB_AUTHN_CONTEXT_COMPARISON_BETTER

#define LASSO_LIB_AUTHN_CONTEXT_COMPARISON_BETTER	 "better"

Ask for a better authentication context than that.


LASSO_SAML_AUTHENTICATION_METHOD_PASSWORD

#define LASSO_SAML_AUTHENTICATION_METHOD_PASSWORD	 "urn:oasis:names:tc:SAML:1.0:am:password"

The authentication was performed by means of a password.


LASSO_SAML_AUTHENTICATION_METHOD_KERBEROS

#define LASSO_SAML_AUTHENTICATION_METHOD_KERBEROS	 "urn:ietf:rfc:1510"

The authentication was performed by means of the Kerberos protocol [RFC 1510], an instantiation of the Needham-Schroeder symmetric key authentication mechanism [Needham78].


LASSO_SAML_AUTHENTICATION_METHOD_SECURE_REMOTE_PASSWORD

#define LASSO_SAML_AUTHENTICATION_METHOD_SECURE_REMOTE_PASSWORD	 "urn:ietf:rfc:2945"

The authentication was performed by means of Secure Remote Password protocol as specified in [RFC 2945].


LASSO_SAML_AUTHENTICATION_METHOD_HARDWARE_TOKEN

#define             LASSO_SAML_AUTHENTICATION_METHOD_HARDWARE_TOKEN

The authentication was performed using some (unspecified) hardware token.


LASSO_SAML_AUTHENTICATION_METHOD_SMARTCARD_PKI

#define LASSO_SAML_AUTHENTICATION_METHOD_SMARTCARD_PKI  "urn:ietf:rfc:2246"

The authentication was performed using either the SSL or TLS protocol with certificate-based client authentication. TLS is described in [RFC 2246].


LASSO_SAML_AUTHENTICATION_METHOD_SOFTWARE_PKI

#define LASSO_SAML_AUTHENTICATION_METHOD_SOFTWARE_PKI   "urn:oasis:names:tc:SAML:1.0:am:X509-PKI"

The authentication was performed by some (unspecified) mechanism on a key authenticated by means of an X.509 PKI X.500. It may have been one of the mechanisms for which a more specific identifier has been defined below.


LASSO_SAML_AUTHENTICATION_METHOD_PGP

#define LASSO_SAML_AUTHENTICATION_METHOD_PGP            "urn:oasis:names:tc:SAML:1.0:am:PGP"

The authentication was performed by some (unspecified) mechanism on a key authenticated by means of a PGP web of trust [PGP]. It may have been one of the mechanisms for which a more specific identifier has been defined below.


LASSO_SAML_AUTHENTICATION_METHODS_PKI

#define LASSO_SAML_AUTHENTICATION_METHODS_PKI           "urn:oasis:names:tc:SAML:1.0:am:SPKI"

The authentication was performed by some (unspecified) mechanism on a key authenticated by means of a PGP web of trust [PGP]. It may have been one of the mechanisms for which a more specific identifier has been defined below.


LASSO_SAML_AUTHENTICATION_METHOD_XKMS

#define LASSO_SAML_AUTHENTICATION_METHOD_XKMS           "urn:oasis:names:tc:SAML:1.0:am:XKMS"

The authentication was performed by some (unspecified) mechanism on a key authenticated by means of a PGP web of trust [PGP]. It may have been one of the mechanisms for which a more specific identifier has been defined below.


LASSO_SAML_AUTHENTICATION_METHOD_XMLD_SIG

#define LASSO_SAML_AUTHENTICATION_METHOD_XMLD_SIG       "urn:ietf:rfc:3075"

The authentication was performed by means of an XML digital signature [RFC 3075].


LASSO_SAML_AUTHENTICATION_METHOD_UNSPECIFIED

#define             LASSO_SAML_AUTHENTICATION_METHOD_UNSPECIFIED

The authentication was performed by an unspecified means.


LASSO_SAML_AUTHENTICATION_METHOD_LIBERTY

#define LASSO_SAML_AUTHENTICATION_METHOD_LIBERTY        "urn:liberty:ac:2003-08"

The authentication was performed by a liberty alliance protocol.


LASSO_LIB_STATUS_CODE_FEDERATION_DOES_NOT_EXIST

#define LASSO_LIB_STATUS_CODE_FEDERATION_DOES_NOT_EXIST    "lib:FederationDoesNotExist"

Second level status code.

Used by an identity provider to indicate that the Principal has not federated his or her identity with the service provider, and the service provider indicated a requirement for federation.

Source: Liberty ID-FF Protocols and Schema Specification 1.2


LASSO_LIB_STATUS_CODE_INVALID_ASSERTION_CONSUMER_SERVICE_INDEX

#define             LASSO_LIB_STATUS_CODE_INVALID_ASSERTION_CONSUMER_SERVICE_INDEX

Second level status code.

If the <AssertionConsumerServiceID> element is provided, then the identity provider MUST search for the value among the id attributes in the <AssertionConsumerServiceURL> elements in the provider’s meta- data to determine the URL to use. If no match can be found, then the provider MUST return an error with a second-level <samlp:StatusCode> of lib:InvalidAssertionConsumerServiceIndex to the default URL (the <AssertionConsumerServiceURL> with an isDefault attribute of "true").

Source: Liberty ID-FF Protocols and Schema Specification 1.2


LASSO_LIB_STATUS_CODE_INVALID_SIGNATURE

#define LASSO_LIB_STATUS_CODE_INVALID_SIGNATURE            "lib:InvalidSignature"

Second level status code.

Indicate a failure in the processing of the signature of the request. This code is not part of the ID-FF 1.2 specification.


LASSO_LIB_STATUS_CODE_NO_AUTHN_CONTEXT

#define LASSO_LIB_STATUS_CODE_NO_AUTHN_CONTEXT             "lib:NoAuthnContext"

Used by an identity provider to indicate that the specified authentication context information in the request prohibits authentication from taking place.

Source: Liberty ID-FF Protocols and Schema Specification 1.2


LASSO_LIB_STATUS_CODE_NO_AVAILABLEIDP

#define LASSO_LIB_STATUS_CODE_NO_AVAILABLEIDP              "lib:NoAvailableIDP"

Used by an intermediary to indicate that none of the supported identity provider URLs from the <IDPList> can be resolved or that none of the supported identity providers are available.

Source: Liberty ID-FF Protocols and Schema Specification 1.2


LASSO_LIB_STATUS_CODE_NO_PASSIVE

#define LASSO_LIB_STATUS_CODE_NO_PASSIVE                   "lib:NoPassive"

Used by an identity provider or an intermediary to indicate that authentication of the Principal requires interaction and cannot be performed passively.

Source: Liberty ID-FF Protocols and Schema Specification 1.2


LASSO_LIB_STATUS_CODE_NO_SUPPORTEDIDP

#define LASSO_LIB_STATUS_CODE_NO_SUPPORTEDIDP              "lib:NoSupportedIDP"

Used by an intermediary to indicate that none of the identity providers are supported by the intermediary.

Source: Liberty ID-FF Protocols and Schema Specification 1.2


LASSO_LIB_STATUS_CODE_PROXY_COUNT_EXCEEDED

#define LASSO_LIB_STATUS_CODE_PROXY_COUNT_EXCEEDED         "lib:ProxyCountExceeded"

Used by an identity provider to indicate that it cannot authenticate the principal itself, and was not permitted to relay the request further.

Source: Liberty ID-FF Protocols and Schema Specification 1.2


LASSO_LIB_STATUS_CODE_UNKNOWN_PRINCIPAL

#define LASSO_LIB_STATUS_CODE_UNKNOWN_PRINCIPAL            "lib:UnknownPrincipal"

Used by an identity provider to indicate that the Principal is not known to it.

Source: Liberty ID-FF Protocols and Schema Specification 1.2


LASSO_LIB_STATUS_CODE_UNSIGNED_AUTHN_REQUEST

#define LASSO_LIB_STATUS_CODE_UNSIGNED_AUTHN_REQUEST       "lib:UnsignedAuthnRequest"

If the requesting provider’s <AuthnRequestsSigned> metadata element is "true", then any request messages it generates MUST be signed. If an unsigned request is received, then the provider MUST return an error with a second- level <samlp:StatusCode> of lib:UnsignedAuthnRequest.

Source: Liberty ID-FF Protocols and Schema Specification 1.2


LASSO_LIB_STATUS_CODE_UNSUPPORTED_PROFILE

#define LASSO_LIB_STATUS_CODE_UNSUPPORTED_PROFILE          "lib:UnsupportedProfile"

If an error occurs during this further processing of the logout (for example, relying service providers may not all implement the Single Logout profile used by the requesting service provider), then the identity provider MUST respond to the original requester with a <LogoutResponse> message, indicating the status of the logout request. The value "lib:UnsupportedProfile" is provided for a second-level <samlp:StatusCode>, indicating that a service provider should retry the <LogoutRequest> using a different profile.

Source: Liberty ID-FF Protocols and Schema Specification 1.2


LASSO_SAML_STATUS_CODE_SUCCESS

#define LASSO_SAML_STATUS_CODE_SUCCESS	            "samlp:Success"

A protocol request succeeded.


LASSO_SAML_STATUS_CODE_VERSION_MISMATCH

#define LASSO_SAML_STATUS_CODE_VERSION_MISMATCH          "samlp:VersionMismatch"

Request failed, because the version is not supported by the provider. Look at second level status for more details.


LASSO_SAML_STATUS_CODE_REQUESTER

#define LASSO_SAML_STATUS_CODE_REQUESTER                "samlp:Requester"

Request failed because of the requester. Look at second level status for more details.


LASSO_SAML_STATUS_CODE_RESPONDER

#define LASSO_SAML_STATUS_CODE_RESPONDER                "samlp:Responder"

Request failed because of the responder. Look at second level status for more details.


LASSO_SAML_STATUS_CODE_REQUEST_VERSION_TOO_HIGH

#define LASSO_SAML_STATUS_CODE_REQUEST_VERSION_TOO_HIGH    "samlp:RequestVersionTooHigh"

Request failed because the version of protocol used is too high. Used with LASSO_SAML_STATUS_CODE_VERSION_MISMATCH.


LASSO_SAML_STATUS_CODE_REQUEST_VERSION_TOO_LOW

#define LASSO_SAML_STATUS_CODE_REQUEST_VERSION_TOO_LOW     "samlp:RequestVersionTooLow"

Request failed because the version of protocol used is too low. Used with LASSO_SAML_STATUS_CODE_VERSION_MISMATCH.


LASSO_SAML_STATUS_CODE_REQUEST_VERSION_DEPRECATED

#define LASSO_SAML_STATUS_CODE_REQUEST_VERSION_DEPRECATED "samlp:RequestVersionDeprecated"

Request failed because the version of protocol used is deprecated. Used with LASSO_SAML_STATUS_CODE_VERSION_MISMATCH.


LASSO_SAML_STATUS_CODE_TOO_MANY_RESPONSES

#define LASSO_SAML_STATUS_CODE_TOO_MANY_RESPONSES         "samlp:TooManyResponses"

Request failed because too many data should be returned. Used with LASSO_SAML_STATUS_CODE_RESPONDER.


LASSO_SAML_STATUS_CODE_RESOURCE_NOT_RECOGNIZED

#define LASSO_SAML_STATUS_CODE_RESOURCE_NOT_RECOGNIZED    "samlp:ResourceNotRecognized"

Request failed because the responder does not wish to support resource-specific attribute queries, or the resource value provided is invalid or unrecognized. Use with LASSO_SAML_STATUS_CODE_RESPONDER.


LASSO_SAML_STATUS_CODE_REQUEST_DENIED

#define LASSO_SAML_STATUS_CODE_REQUEST_DENIED            "samlp:RequestDenied"

The SAML responder or SAML authority is able to process the request but has chosen not to respond. This status code MAY be used when there is concern about the security context of the request message or the sequence of request messages received from a particular requester.

Source: Assertions and Protocol for the OASIS Security Assertion Markup Language (SAML) V1.1


LASSO_LIB_PROTOCOL_PROFILE_BRWS_ART

#define             LASSO_LIB_PROTOCOL_PROFILE_BRWS_ART

Identifies the Single Sign-On "Artifact" profile; where an artifact is passed from identity provider to service provider and back to get the LassoLibAssertion.


LASSO_LIB_PROTOCOL_PROFILE_BRWS_POST

#define             LASSO_LIB_PROTOCOL_PROFILE_BRWS_POST

Identifies the Single Sign-On "POST" profile; where the LassoLibAssertion is sent directly from the identity provider to the service provider in an HTML form submission message.


LASSO_LIB_PROTOCOL_PROFILE_BRWS_LECP

#define             LASSO_LIB_PROTOCOL_PROFILE_BRWS_LECP

Identifies the Single Sign-On "LECP" profile; where the LassoLibAssertion is sent directly from the identity provider to the service provider in a PAOS response. See LassoLecp.


LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_IDP_HTTP

#define             LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_IDP_HTTP

Identifies the Federation Termination "Redirect" profile; where the request for federation termination is sent from the identity provider to the service provider in a redirected GET request.


LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_IDP_SOAP

#define             LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_IDP_SOAP

LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_SP_HTTP

#define             LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_SP_HTTP

LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_SP_SOAP

#define             LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_SP_SOAP

LASSO_LIB_PROTOCOL_PROFILE_NIM_SP_HTTP

#define             LASSO_LIB_PROTOCOL_PROFILE_NIM_SP_HTTP

LASSO_LIB_PROTOCOL_PROFILE_RNI_IDP_HTTP

#define LASSO_LIB_PROTOCOL_PROFILE_RNI_IDP_HTTP "http://projectliberty.org/profiles/rni-idp-http"

LASSO_LIB_PROTOCOL_PROFILE_RNI_IDP_SOAP

#define LASSO_LIB_PROTOCOL_PROFILE_RNI_IDP_SOAP "http://projectliberty.org/profiles/rni-idp-soap"

LASSO_LIB_PROTOCOL_PROFILE_RNI_SP_HTTP

#define LASSO_LIB_PROTOCOL_PROFILE_RNI_SP_HTTP  "http://projectliberty.org/profiles/rni-sp-http"

LASSO_LIB_PROTOCOL_PROFILE_RNI_SP_SOAP

#define LASSO_LIB_PROTOCOL_PROFILE_RNI_SP_SOAP  "http://projectliberty.org/profiles/rni-sp-soap"

LASSO_LIB_PROTOCOL_PROFILE_SLO_SP_HTTP

#define LASSO_LIB_PROTOCOL_PROFILE_SLO_SP_HTTP  "http://projectliberty.org/profiles/slo-sp-http"

LASSO_LIB_PROTOCOL_PROFILE_SLO_SP_SOAP

#define LASSO_LIB_PROTOCOL_PROFILE_SLO_SP_SOAP  "http://projectliberty.org/profiles/slo-sp-soap"

LASSO_LIB_PROTOCOL_PROFILE_SLO_IDP_HTTP

#define LASSO_LIB_PROTOCOL_PROFILE_SLO_IDP_HTTP "http://projectliberty.org/profiles/slo-idp-http"

LASSO_LIB_PROTOCOL_PROFILE_SLO_IDP_SOAP

#define LASSO_LIB_PROTOCOL_PROFILE_SLO_IDP_SOAP "http://projectliberty.org/profiles/slo-idp-soap"

LASSO_LIB_NAME_IDENTIFIER_FORMAT_FEDERATED

#define LASSO_LIB_NAME_IDENTIFIER_FORMAT_FEDERATED "urn:liberty:iff:nameid:federated"

Federated name identifier constant, used in LassoSamlNameIdentifier. It implies the name identifier belongs to a federation established between SP and IdP.


LASSO_LIB_NAME_IDENTIFIER_FORMAT_ONE_TIME

#define LASSO_LIB_NAME_IDENTIFIER_FORMAT_ONE_TIME  "urn:liberty:iff:nameid:one-time"

"One-time" name identifier constant, used in LassoSamlNameIdentifier.


LASSO_LIB_NAME_IDENTIFIER_FORMAT_ENCRYPTED

#define LASSO_LIB_NAME_IDENTIFIER_FORMAT_ENCRYPTED "urn:liberty:iff:nameid:encrypted"

"Encrypted" name identifier constant, used in LassoSamlNameIdentifier.


LASSO_LIB_NAME_IDENTIFIER_FORMAT_ENTITYID

#define LASSO_LIB_NAME_IDENTIFIER_FORMAT_ENTITYID  "urn:liberty:iff:nameid:entityID"

LASSO_LIB_CONSENT_OBTAINED

#define LASSO_LIB_CONSENT_OBTAINED                  "urn:liberty:consent:obtained"

LASSO_LIB_CONSENT_OBTAINED_PRIOR

#define LASSO_LIB_CONSENT_OBTAINED_PRIOR            "urn:liberty:consent:obtained:prior"

LASSO_LIB_CONSENT_OBTAINED_CURRENT_IMPLICIT

#define LASSO_LIB_CONSENT_OBTAINED_CURRENT_IMPLICIT "urn:liberty:consent:obtained:current:implicit"

LASSO_LIB_CONSENT_OBTAINED_CURRENT_EXPLICIT

#define LASSO_LIB_CONSENT_OBTAINED_CURRENT_EXPLICIT "urn:liberty:consent:obtained:current:explicit"

LASSO_LIB_CONSENT_UNAVAILABLE

#define LASSO_LIB_CONSENT_UNAVAILABLE               "urn:liberty:consent:unavailable"

LASSO_LIB_CONSENT_INAPPLICABLE

#define LASSO_LIB_CONSENT_INAPPLICABLE              "urn:liberty:consent:inapplicable"

LASSO_SAML_CONFIRMATION_METHOD_ARTIFACT

#define LASSO_SAML_CONFIRMATION_METHOD_ARTIFACT "urn:oasis:names:tc:SAML:1.0:cm:artifact"

Confirmation method when the browser-artifact binding is used.


LASSO_SAML_CONFIRMATION_METHOD_ARTIFACT01

#define LASSO_SAML_CONFIRMATION_METHOD_ARTIFACT01 "urn:oasis:names:tc:SAML:1.0:cm:artifact-01"

Deprecated confirmation method when the browser-artifact binding is used.


LASSO_SAML_CONFIRMATION_METHOD_BEARER

#define LASSO_SAML_CONFIRMATION_METHOD_BEARER "urn:oasis:names:tc:SAML:1.0:cm:bearer"

Confirmation method when subject of the assertion is the one holding it.


LASSO_SAML_CONFIRMATION_METHOD_HOLDER_OF_KEY

#define             LASSO_SAML_CONFIRMATION_METHOD_HOLDER_OF_KEY

A ds:KeyInfo must be present in the SubjecConfirmation element. It MUST be used to confirm assertion subject identity.


LASSO_SAML_CONFIRMATION_METHOD_SENDER_VOUCHES

#define             LASSO_SAML_CONFIRMATION_METHOD_SENDER_VOUCHES

Indicates that no other information is available about the context of use of the assertion. The relying party SHOULD utilize other means to determine if it should process the assertion further.

lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSaml2StatementAbstract.html0000644000000000000000000000013214404126163025115 xustar0030 mtime=1678814323.017964743 30 atime=1678814323.017964743 30 ctime=1678814323.017964743 lasso-2.8.2/docs/reference/lasso/html/LassoSaml2StatementAbstract.html0000644000175000017500000001537414404126163030377 0ustar00bdauvergnebdauvergne00000000000000 LassoSaml2StatementAbstract: lasso Reference Manual

LassoSaml2StatementAbstract

LassoSaml2StatementAbstract — <saml2:StatementAbstract>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSaml2StatementAbstract
            ├── LassoSaml2AttributeStatement
            ├── LassoSaml2AuthnStatement
            ╰── LassoSaml2AuthzDecisionStatement

Description

Figure 63. Schema fragment for saml2:StatementAbstract


<complexType name="StatementAbstractType" abstract="true"/>
<element name="AuthnStatement" type="saml:AuthnStatementType"/>
<complexType name="AuthnStatementType">
  <complexContent>
    <extension base="saml:StatementAbstractType">
      <sequence>
        <element ref="saml:SubjectLocality" minOccurs="0"/>
        <element ref="saml:AuthnContext"/>
      </sequence>
      <attribute name="AuthnInstant" type="dateTime" use="required"/>
      <attribute name="SessionIndex" type="string" use="optional"/>
      <attribute name="SessionNotOnOrAfter" type="dateTime" use="optional"/>
    </extension>
  </complexContent>
</complexType>

Functions

lasso_saml2_statement_abstract_new ()

LassoNode *
lasso_saml2_statement_abstract_new (void);

Creates a new LassoSaml2StatementAbstract object.

Returns

a newly created LassoSaml2StatementAbstract object

Types and Values

struct LassoSaml2StatementAbstract

struct LassoSaml2StatementAbstract;
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSamlpStatus.html0000644000000000000000000000013214404126163023046 xustar0030 mtime=1678814323.029964812 30 atime=1678814323.029964812 30 ctime=1678814323.029964812 lasso-2.8.2/docs/reference/lasso/html/LassoSamlpStatus.html0000644000175000017500000001327214404126163026323 0ustar00bdauvergnebdauvergne00000000000000 LassoSamlpStatus: lasso Reference Manual

LassoSamlpStatus

LassoSamlpStatus — <samlp:Status>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlpStatus

Description

Figure 38. Schema fragment for samlp:Status


<element name="Status" type="samlp:StatusType"/>
<complexType name="StatusType">
  <sequence>
    <element ref="samlp:StatusCode"/>
    <element ref="samlp:StatusMessage" minOccurs="0" maxOccurs="1"/>
    <element ref="samlp:StatusDetail" minOccurs="0"/>
  </sequence>
</complexType>

<element name="StatusMessage" type="string"/>

Functions

lasso_samlp_status_new ()

LassoSamlpStatus *
lasso_samlp_status_new (void);

Creates a new LassoSamlpStatus object.

Returns

a newly created LassoSamlpStatus object

Types and Values

struct LassoSamlpStatus

struct LassoSamlpStatus {
	/* <element ref="samlp:StatusCode"/> */
	LassoSamlpStatusCode *StatusCode;
	/* <element ref="samlp:StatusMessage" minOccurs="0" maxOccurs="1"/> */
	char *StatusMessage;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoNameIdentifierMapping.html0000644000000000000000000000013214404126163024765 xustar0030 mtime=1678814323.009964697 30 atime=1678814323.009964697 30 ctime=1678814323.009964697 lasso-2.8.2/docs/reference/lasso/html/LassoNameIdentifierMapping.html0000644000175000017500000005256614404126163030253 0ustar00bdauvergnebdauvergne00000000000000 LassoNameIdentifierMapping: lasso Reference Manual

LassoNameIdentifierMapping

LassoNameIdentifierMapping — Liberty Enabled Client and Proxy Profile (ID-FF)

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoProfile
            ╰── LassoNameIdentifierMapping

Description

Functions

lasso_name_identifier_mapping_new ()

LassoNameIdentifierMapping *
lasso_name_identifier_mapping_new (LassoServer *server);

Creates a new LassoNameIdentifierMapping.

Parameters

server

the LassoServer

 

Returns

a newly created LassoNameIdentifierMapping object; or NULL if an error occured


lasso_name_identifier_mapping_build_request_msg ()

lasso_error_t
lasso_name_identifier_mapping_build_request_msg
                               (LassoNameIdentifierMapping *mapping);

Builds a name identifier mapping request message.

  • If it is a SOAP method, then it builds the request as a SOAP message, optionally signs his node, sets msg_body with that message and sets msg_url with the SOAP Endpoint URL

  • If it is a HTTP-Redirect method, then it builds the request as a query string message, optionally signs it and sets msg_url to that URL.

Parameters

Returns

0 on success; or a negative value otherwise.


lasso_name_identifier_mapping_build_response_msg ()

lasso_error_t
lasso_name_identifier_mapping_build_response_msg
                               (LassoNameIdentifierMapping *mapping);

Builds a name identifier mapping response message.

  • If it is a SOAP method, then it builds the response as a SOAP message, optionally signs his node, sets msg_body with that message and sets msg_url with the register name identifier service return URL.

  • If it is a HTTP-Redirect method, then it builds the response as a query string message, optionally signs it and sets msg_url to that URL.

If private key and certificate are set in server object it will also signs the message (either with X509 if SOAP or with a simple signature for query strings).

Parameters

Returns

0 on success; or a negative value otherwise.


lasso_name_identifier_mapping_destroy ()

void
lasso_name_identifier_mapping_destroy (LassoNameIdentifierMapping *mapping);

Destroys a LassoNameIdentifierMapping object.

Parameters


lasso_name_identifier_mapping_init_request ()

lasso_error_t
lasso_name_identifier_mapping_init_request
                               (LassoNameIdentifierMapping *mapping,
                                gchar *targetNamespace,
                                gchar *remote_providerID);

Initializes a new lib:NameIdentifierMappingRequest request.

Parameters

mapping

a LassoNameIdentifierMapping

 

targetNamespace

the request targetNamespace

 

remote_providerID

the providerID of the identity provider.

 

Returns

0 on success; or a negative value otherwise.


lasso_name_identifier_mapping_process_request_msg ()

lasso_error_t
lasso_name_identifier_mapping_process_request_msg
                               (LassoNameIdentifierMapping *mapping,
                                gchar *request_msg);

Processes a lib:NameIdentifierMappingRequest message. Rebuilds a request object from the message and optionally verifies its signature.

Parameters

mapping

a LassoNameIdentifierMapping

 

request_msg

the name identifier mapping request message

 

Returns

0 on success; or a negative value otherwise.


lasso_name_identifier_mapping_process_response_msg ()

lasso_error_t
lasso_name_identifier_mapping_process_response_msg
                               (LassoNameIdentifierMapping *mapping,
                                gchar *response_msg);

Processes a lib:NameIdentifierMappingResponse message. Rebuilds a response object from the message and optionally verifies its signature.

If the response depicts Success it will also sets targetNameIdentifier .

Parameters

mapping

a LassoNameIdentifierMapping

 

response_msg

the name identifier mapping response message

 

Returns

0 on success; or a negative value otherwise.


lasso_name_identifier_mapping_validate_request ()

lasso_error_t
lasso_name_identifier_mapping_validate_request
                               (LassoNameIdentifierMapping *mapping);

Checks profile request with regards to message status and principal federations, update them accordingly and prepares a lib:NameIdentifierMappingResponse accordingly.

Parameters

Returns

0 on success; or a negative value otherwise.

Types and Values

struct LassoNameIdentifierMapping

struct LassoNameIdentifierMapping {
	gchar *targetNameIdentifier;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSaml2ProxyRestriction.html0000644000000000000000000000013214404126163025034 xustar0030 mtime=1678814323.017964743 30 atime=1678814323.017964743 30 ctime=1678814323.017964743 lasso-2.8.2/docs/reference/lasso/html/LassoSaml2ProxyRestriction.html0000644000175000017500000001412014404126163030302 0ustar00bdauvergnebdauvergne00000000000000 LassoSaml2ProxyRestriction: lasso Reference Manual

LassoSaml2ProxyRestriction

LassoSaml2ProxyRestriction — <saml2:ProxyRestriction>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSaml2ConditionAbstract
            ╰── LassoSaml2ProxyRestriction

Description

Figure 62. Schema fragment for saml2:ProxyRestriction


<complexType name="ProxyRestrictionType">
  <complexContent>
    <extension base="saml:ConditionAbstractType">
      <sequence>
        <element ref="saml:Audience" minOccurs="0" maxOccurs="unbounded"/>
      </sequence>
      <attribute name="Count" type="nonNegativeInteger" use="optional"/>
    </extension>
  </complexContent>
</complexType>

Functions

lasso_saml2_proxy_restriction_new ()

LassoNode *
lasso_saml2_proxy_restriction_new (void);

Creates a new LassoSaml2ProxyRestriction object.

Returns

a newly created LassoSaml2ProxyRestriction object

Types and Values

struct LassoSaml2ProxyRestriction

struct LassoSaml2ProxyRestriction {
	/* elements */
	char *Audience;
	/* attributes */
	char *Count;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/up.png0000644000000000000000000000013214404126162020027 xustar0030 mtime=1678814322.933964265 30 atime=1678814322.933964265 30 ctime=1678814322.933964265 lasso-2.8.2/docs/reference/lasso/html/up.png0000644000175000017500000000040414404126162023275 0ustar00bdauvergnebdauvergne00000000000000‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEå $$ñا ‘IDAT8Ëí’1 ƒ@DŸ•¶{ƒxa™ƒØÄ;$]r =JR´È1,Ë øSd„-©}0°ÌŸÙÏÂÂÎàüo¹L:m-˜¤QÞOäÀ[› Éäåkå T¸zþMÞ Lè¬Ì,š:ךuÀ!tÁK;æ ðP¦õÌôÀp Ot@£l¼ÿò/̵*á§l}IEND®B`‚lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSaml2SubjectConfirmation.html0000644000000000000000000000013214404126163025435 xustar0030 mtime=1678814323.017964743 30 atime=1678814323.017964743 30 ctime=1678814323.017964743 lasso-2.8.2/docs/reference/lasso/html/LassoSaml2SubjectConfirmation.html0000644000175000017500000001433214404126163030710 0ustar00bdauvergnebdauvergne00000000000000 LassoSaml2SubjectConfirmation: lasso Reference Manual

LassoSaml2SubjectConfirmation

LassoSaml2SubjectConfirmation — <saml2:SubjectConfirmation>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSaml2SubjectConfirmation

Description

Figure 65. Schema fragment for saml2:SubjectConfirmation


<complexType name="SubjectConfirmationType">
  <sequence>
    <choice minOccurs="0">
      <element ref="saml:BaseID"/>
      <element ref="saml:NameID"/>
      <element ref="saml:EncryptedID"/>
    </choice>
    <element ref="saml:SubjectConfirmationData" minOccurs="0"/>
  </sequence>
  <attribute name="Method" type="anyURI" use="required"/>
</complexType>

Functions

lasso_saml2_subject_confirmation_new ()

LassoNode *
lasso_saml2_subject_confirmation_new (void);

Creates a new LassoSaml2SubjectConfirmation object.

Returns

a newly created LassoSaml2SubjectConfirmation object

Types and Values

struct LassoSaml2SubjectConfirmation

struct LassoSaml2SubjectConfirmation {
	/* elements */
	LassoSaml2BaseIDAbstract *BaseID;
	LassoSaml2NameID *NameID;
	LassoSaml2EncryptedElement *EncryptedID;
	LassoSaml2SubjectConfirmationData *SubjectConfirmationData;
	/* attributes */
	char *Method;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/architecture.html0000644000000000000000000000012714404126163022252 xustar0029 mtime=1678814323.04196488 29 atime=1678814323.04196488 29 ctime=1678814323.04196488 lasso-2.8.2/docs/reference/lasso/html/architecture.html0000644000175000017500000001141714404126163025522 0ustar00bdauvergnebdauvergne00000000000000 Lasso Architecture: lasso Reference Manual

Lasso Architecture

LassoServer — Representation of the current server
LassoProvider — Service or identity provider
LassoIdentity — Principal identity
LassoFederation — Principal federation between two providers
LassoSession — Principal Session
LassoProfile — Base class for all identity profiles
Error Codes — Error codes returned by lasso functions
LassoNode — Base class for all Lasso objects
Base Strings — General strings constants for Lasso
registry — Class to store a mapping of qualified names (QName) to other qualified names.
LassoMiscTextNode

Lasso handle the concepts of providers sharing identities, that can enable the creation of sessions following an authentication. The current provider is represented by the LassoServer object, which inherit from the LassoProvider. All known providers to the current provider must be registered inside the LassoServer object. Some providers are identity providers, by sending authentication request you can establish federation, materialised by LassoFederation objects, between identity stored by the identity provider and another stored by the current provider. Those federation are stored in the LassoIdentity object. Each time an authentication is done, an assertion reprenting it is stored in the LassoSession object. They are stored in a map, keyed by the originating identity provider, see lasso_session_get_assertion().

Protocols from the ID-FF 1.2 or the SAML 2.0 family are represented by object whose class inherit from LassoProfile. The constructor of those profile objects needs a LassoServer, and eventually a LassoIdentity and a LassoSession.

LassoNode is the base class for all Lasso classes, it gives XML serialization and deserialization support to all of them.

The LassoMiscTextNode allows to represent miscellenaous nodes for whose no mapping to a specific GObjectClass exists.

lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSamlpRequest.html0000644000000000000000000000013214404126163023213 xustar0030 mtime=1678814323.029964812 30 atime=1678814323.029964812 30 ctime=1678814323.029964812 lasso-2.8.2/docs/reference/lasso/html/LassoSamlpRequest.html0000644000175000017500000001404614404126163026470 0ustar00bdauvergnebdauvergne00000000000000 LassoSamlpRequest: lasso Reference Manual

LassoSamlpRequest

LassoSamlpRequest — <samlp:Request>

Functions

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlpRequestAbstract
            ╰── LassoSamlpRequest

Description

Figure 34. Schema fragment for samlp:Request

<element name="Request" type="samlp:RequestType"/>
<complexType name="RequestType">
   <complexContent>
     <extension base="samlp:RequestAbstractType">
	<choice>
	   <element ref="samlp:Query"/>
	   <element ref="samlp:SubjectQuery"/>
	   <element ref="samlp:AuthenticationQuery"/>
	   <element ref="samlp:AttributeQuery"/>
	   <element ref="samlp:AuthorizationDecisionQuery"/>
	   <element ref="saml:AssertionIDReference" maxOccurs="unbounded"/>
	   <element ref="samlp:AssertionArtifact" maxOccurs="unbounded"/>
	</choice>
     </extension>
   </complexContent>
</complexType>


Functions

lasso_samlp_request_new ()

LassoNode *
lasso_samlp_request_new (void);

Creates a new LassoSamlpRequest object.

Returns

a newly created LassoSamlpRequest object

Types and Values

struct LassoSamlpRequest

struct LassoSamlpRequest {
	/* <element name="AssertionArtifact" type="string"/> */
	char *AssertionArtifact;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/lasso-LassoEcpRelayState.html0000644000000000000000000000012714404126163024416 xustar0029 mtime=1678814323.04196488 29 atime=1678814323.04196488 29 ctime=1678814323.04196488 lasso-2.8.2/docs/reference/lasso/html/lasso-LassoEcpRelayState.html0000644000175000017500000001576014404126163027673 0ustar00bdauvergnebdauvergne00000000000000 LassoEcpRelayState: lasso Reference Manual

LassoEcpRelayState

LassoEcpRelayState — <ecp:RelayState>

Description

Figure 96. Schema fragment for ecp:RelayState


<element name="RelayState" type="ecp:RelayStateType"/>
<complexType name="RelayStateType">
    <simpleContent>
        <extension base="string">
            <attribute ref="S:mustUnderstand" use="required"/>
            <attribute ref="S:actor" use="required"/>
        </extension>
    </simpleContent>
</complexType>

Functions

lasso_ecp_relay_state_validate ()

int
lasso_ecp_relay_state_validate (LassoEcpRelayState *relaystate);

Validates the LassoEcpRelayState object conforms to required values.

  • RelayState must be non-NULL
  • mustUnderstand must be TRUE
  • actor must be equal to LASSO_SOAP_ENV_ACTOR

Parameters

relaystate

The LassoEcpRelayState

 

Returns

0 on success, error code otherwise


lasso_ecp_relay_state_new ()

LassoNode *
lasso_ecp_relay_state_new (const gchar *RelayState);

The LassoEcpRelayState object is initialized as follows:


  RelayState = RelayState (if non-NULL)
  mustUnderstand = TRUE
  actor = LASSO_SOAP_ENV_ACTOR

Parameters

RelayState

.

[allow-none]

Returns

a newly created and initialized LassoEcpRelayState object

lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSamlpStatusCode.html0000644000000000000000000000013214404126163023641 xustar0030 mtime=1678814323.029964812 30 atime=1678814323.029964812 30 ctime=1678814323.029964812 lasso-2.8.2/docs/reference/lasso/html/LassoSamlpStatusCode.html0000644000175000017500000001334014404126163027112 0ustar00bdauvergnebdauvergne00000000000000 LassoSamlpStatusCode: lasso Reference Manual

LassoSamlpStatusCode

LassoSamlpStatusCode — <samlp:StatusCode>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlpStatusCode

Description

Figure 37. Schema fragment for samlp:StatusCode


<element name="StatusCode" type="samlp:StatusCodeType"/>
<complexType name="StatusCodeType">
  <sequence>
    <element ref="samlp:StatusCode" minOccurs="0"/>
  </sequence>
  <attribute name="Value" type="QName" use="required"/>
</complexType>

Functions

lasso_samlp_status_code_new ()

LassoSamlpStatusCode *
lasso_samlp_status_code_new (void);

Creates a new LassoSamlpStatusCode object.

Returns

a newly created LassoSamlpStatusCode object

Types and Values

struct LassoSamlpStatusCode

struct LassoSamlpStatusCode {
	/* <element ref="samlp:StatusCode" minOccurs="0"/> */
	LassoSamlpStatusCode *StatusCode;
	/* <attribute name="Value" type="QName" use="required"/> */
	char *Value;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoLibLogoutResponse.html0000644000000000000000000000013214404126163024205 xustar0030 mtime=1678814323.005964675 30 atime=1678814323.005964675 30 ctime=1678814323.005964675 lasso-2.8.2/docs/reference/lasso/html/LassoLibLogoutResponse.html0000644000175000017500000002232214404126163027456 0ustar00bdauvergnebdauvergne00000000000000 LassoLibLogoutResponse: lasso Reference Manual

LassoLibLogoutResponse

LassoLibLogoutResponse — <lib:LogoutResponse>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlpResponseAbstract
            ╰── LassoLibStatusResponse
                ╰── LassoLibLogoutResponse

Description

Figure 12. Schema fragment for lib:LogoutResponse

<xs:element name="LogoutResponse" type="StatusResponseType"/>

Functions

lasso_lib_logout_response_new ()

LassoNode *
lasso_lib_logout_response_new (void);

Creates a new LassoLibLogoutResponse object.

Returns

a newly created LassoLibLogoutResponse object


lasso_lib_logout_response_new_full ()

LassoNode *
lasso_lib_logout_response_new_full (char *providerID,
                                    const char *statusCodeValue,
                                    LassoLibLogoutRequest *request,
                                    LassoSignatureType sign_type,
                                    LassoSignatureMethod sign_method);

Creates a new LassoLibLogoutResponse object and initializes it with the parameters.

Parameters

providerID

the providerID of the responded

 

statusCodeValue

a response status code

 

request

the request this is a response to

 

sign_type

a LassoSignatureType value

 

sign_method

a LassoSignatureMethod value

 

Returns

a newly created LassoLibLogoutResponse object

Types and Values

struct LassoLibLogoutResponse

struct LassoLibLogoutResponse;
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSamlp2IDPList.html0000644000000000000000000000013214404126163023115 xustar0030 mtime=1678814323.025964789 30 atime=1678814323.025964789 30 ctime=1678814323.025964789 lasso-2.8.2/docs/reference/lasso/html/LassoSamlp2IDPList.html0000644000175000017500000001270714404126163026374 0ustar00bdauvergnebdauvergne00000000000000 LassoSamlp2IDPList: lasso Reference Manual

LassoSamlp2IDPList

LassoSamlp2IDPList — <samlp2:IDPList>

Functions

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlp2IDPList

Description

Figure 76. Schema fragment for samlp2:IDPList


<complexType name="IDPListType">
  <sequence>
    <element ref="samlp:IDPEntry" maxOccurs="unbounded"/>
    <element ref="samlp:GetComplete" minOccurs="0"/>
  </sequence>
</complexType>

Functions

lasso_samlp2_idp_list_new ()

LassoNode *
lasso_samlp2_idp_list_new (void);

Creates a new LassoSamlp2IDPList object.

Returns

a newly created LassoSamlp2IDPList object

Types and Values

struct LassoSamlp2IDPList

struct LassoSamlp2IDPList {
	/* elements */
	GList *IDPEntry; /* of LassoSamlp2IDPEntry */
	char *GetComplete;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSaml2AttributeValue.html0000644000000000000000000000013214404126163024425 xustar0030 mtime=1678814323.013964721 30 atime=1678814323.013964721 30 ctime=1678814323.013964721 lasso-2.8.2/docs/reference/lasso/html/LassoSaml2AttributeValue.html0000644000175000017500000001472214404126163027703 0ustar00bdauvergnebdauvergne00000000000000 LassoSaml2AttributeValue: lasso Reference Manual

LassoSaml2AttributeValue

LassoSaml2AttributeValue — value of an attribute in a SAML 2.0 assertion

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSaml2AttributeValue

Description

Figure 48. Schema fragment from saml-schema-assertion-2.0.xsd)


<element name="AttributeValue" type="anyType" nillable="true"/>


This object support a special of specifying its content. If the any attribute is NULL, then you can attach an xmlNode using lasso_node_set_original_xmlnode() and it will be used to generate the content of the serialized

xmlNode for this object. The content (attributes, childrent and namespaces) of the

node will be copied to the result node created by a call to lasso_node_get_xmlNode().

Functions

lasso_saml2_attribute_value_new ()

LassoSaml2AttributeValue *
lasso_saml2_attribute_value_new (void);

Types and Values

struct LassoSaml2AttributeValue

struct LassoSaml2AttributeValue {
	GList *any; /* of LassoNode */
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoLibRegisterNameIdentifierResponse.html0000644000000000000000000000013214404126163027324 xustar0030 mtime=1678814323.005964675 30 atime=1678814323.005964675 30 ctime=1678814323.005964675 lasso-2.8.2/docs/reference/lasso/html/LassoLibRegisterNameIdentifierResponse.html0000644000175000017500000002430614404126163032601 0ustar00bdauvergnebdauvergne00000000000000 LassoLibRegisterNameIdentifierResponse: lasso Reference Manual

LassoLibRegisterNameIdentifierResponse

LassoLibRegisterNameIdentifierResponse — <lib:RegisterNameIdentifierResponse>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlpResponseAbstract
            ╰── LassoLibStatusResponse
                ╰── LassoLibRegisterNameIdentifierResponse

Description

Figure 16. Schema fragment for lib:RegisterNameIdentifierResponse

<xs:element name="RegisterNameIdentifierResponse" type="StatusResponseType"/>

Functions

lasso_lib_register_name_identifier_response_new ()

LassoNode *
lasso_lib_register_name_identifier_response_new
                               (void);

Creates a new LassoLibRegisterNameIdentifierResponse object.

Returns

a newly created LassoLibRegisterNameIdentifierResponse object


lasso_lib_register_name_identifier_response_new_full ()

LassoNode *
lasso_lib_register_name_identifier_response_new_full
                               (const char *providerID,
                                const char *statusCodeValue,
                                LassoLibRegisterNameIdentifierRequest *request,
                                LassoSignatureType sign_type,
                                LassoSignatureMethod sign_method);

Creates a new LassoLibRegisterNameIdentifierResponse object and initializes it with the parameters.

Parameters

providerID

the providerID of the responder

 

statusCodeValue

a response status code

 

request

the request which is answered by this response

 

sign_type

a LassoSignatureType value

 

sign_method

a LassoSignatureMethod value

 

Returns

a newly created LassoLibRegisterNameIdentifierResponse object

Types and Values

struct LassoLibRegisterNameIdentifierResponse

struct LassoLibRegisterNameIdentifierResponse;
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSaml2Conditions.html0000644000000000000000000000013214404126163023576 xustar0030 mtime=1678814323.017964743 30 atime=1678814323.017964743 30 ctime=1678814323.017964743 lasso-2.8.2/docs/reference/lasso/html/LassoSaml2Conditions.html0000644000175000017500000001377114404126163027057 0ustar00bdauvergnebdauvergne00000000000000 LassoSaml2Conditions: lasso Reference Manual

LassoSaml2Conditions

LassoSaml2Conditions — <saml2:Conditions>

Functions

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSaml2Conditions

Description

Figure 56. Schema fragment for saml2:Conditions


<complexType name="ConditionsType">
  <choice minOccurs="0" maxOccurs="unbounded">
    <element ref="saml:Condition"/>
    <element ref="saml:AudienceRestriction"/>
    <element ref="saml:OneTimeUse"/>
    <element ref="saml:ProxyRestriction"/>
  </choice>
  <attribute name="NotBefore" type="dateTime" use="optional"/>
  <attribute name="NotOnOrAfter" type="dateTime" use="optional"/>
</complexType>

Functions

lasso_saml2_conditions_new ()

LassoNode *
lasso_saml2_conditions_new (void);

Creates a new LassoSaml2Conditions object.

Returns

a newly created LassoSaml2Conditions object

Types and Values

struct LassoSaml2Conditions

struct LassoSaml2Conditions {
	/* elements */
	GList *Condition; /* of LassoSaml2ConditionAbstract */
	GList *AudienceRestriction; /* of LassoSaml2AudienceRestriction */
	GList *OneTimeUse; /* of LassoSaml2OneTimeUse */
	GList *ProxyRestriction; /* of LassoSaml2ProxyRestriction */
	/* attributes */
	char *NotBefore;
	char *NotOnOrAfter;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSaml2Action.html0000644000000000000000000000013214404126163022702 xustar0030 mtime=1678814323.013964721 30 atime=1678814323.013964721 30 ctime=1678814323.013964721 lasso-2.8.2/docs/reference/lasso/html/LassoSaml2Action.html0000644000175000017500000001613314404126163026156 0ustar00bdauvergnebdauvergne00000000000000 LassoSaml2Action: lasso Reference Manual

LassoSaml2Action

LassoSaml2Action — <saml2:Action>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSaml2Action

Description

Figure 44. Schema fragment for saml2:Action


<complexType name="ActionType">
  <simpleContent>
    <extension base="string">
      <attribute name="Namespace" type="anyURI" use="required"/>
    </extension>
  </simpleContent>
</complexType>

Functions

lasso_saml2_action_new ()

LassoNode *
lasso_saml2_action_new (void);

Creates a new LassoSaml2Action object.

Returns

a newly created LassoSaml2Action object


lasso_saml2_action_new_with_string ()

LassoNode *
lasso_saml2_action_new_with_string (char *content);

Creates a new LassoSaml2Action object and initializes it with content .

Parameters

content

content of the new element

 

Returns

a newly created LassoSaml2Action object

Types and Values

struct LassoSaml2Action

struct LassoSaml2Action {
	/* elements */
	char *content;
	/* attributes */
	char *Namespace;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoServer.html0000644000000000000000000000013214404126163022034 xustar0030 mtime=1678814323.029964812 30 atime=1678814323.029964812 30 ctime=1678814323.029964812 lasso-2.8.2/docs/reference/lasso/html/LassoServer.html0000644000175000017500000013662314404126163025317 0ustar00bdauvergnebdauvergne00000000000000 LassoServer: lasso Reference Manual

LassoServer

LassoServer — Representation of the current server

Types and Values

struct LassoServer

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoProvider
            ╰── LassoServer

Description

It holds the data about a provider, other providers it knows, which certificates to use, etc.

Functions

lasso_server_new ()

LassoServer *
lasso_server_new (const gchar *metadata,
                  const gchar *private_key,
                  const gchar *private_key_password,
                  const gchar *certificate);

Creates a new LassoServer.

Parameters

metadata

path to the provider metadata file or NULL, for a LECP server

 

private_key

path to the the server private key file or NULL.

[allow-none]

private_key_password

password to private key if it is encrypted, or NULL.

[allow-none]

certificate

path to the server certificate file, or NULL.

[allow-none]

Returns

a newly created LassoServer object; or NULL if an error occured


lasso_server_new_from_buffers ()

LassoServer *
lasso_server_new_from_buffers (const gchar *metadata,
                               const gchar *private_key_content,
                               const gchar *private_key_password,
                               const gchar *certificate_content);

Creates a new LassoServer.

Parameters

metadata

NULL terminated string containing the content of an ID-FF 1.2 metadata file

 

private_key_content

NULL terminated string containing a PEM formatted private key.

[allow-none]

private_key_password

a NULL terminated string which is the optional password of the private key.

[allow-none]

certificate_content

NULL terminated string containing a PEM formatted X509 certificate.

[allow-none]

Returns

a newly created LassoServer object; or NULL if an error occured


lasso_server_new_from_dump ()

LassoServer *
lasso_server_new_from_dump (const gchar *dump);

Restores the dump to a new LassoServer.

Parameters

dump

XML server dump

 

Returns

a newly created LassoServer; or NULL if an error occured


lasso_server_add_provider ()

lasso_error_t
lasso_server_add_provider (LassoServer *server,
                           LassoProviderRole role,
                           const gchar *metadata,
                           const gchar *public_key,
                           const gchar *ca_cert_chain);

Creates a new LassoProvider and makes it known to the server

Parameters

server

a LassoServer

 

role

provider role, identity provider or service provider

 

metadata

path to the provider metadata file

 

public_key

provider public key file (may be a certificate) or NULL.

[allow-none]

ca_cert_chain

provider CA certificate chain file or NULL.

[allow-none]

Returns

0 on success; a negative value if an error occured.


lasso_server_add_provider2 ()

lasso_error_t
lasso_server_add_provider2 (LassoServer *server,
                            LassoProvider *provider);

Add provider to the list of known providers object of server .

Return 0 if successful, LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ otherwise.

Parameters

server

a LassoServer object

 

provider

a LassoProvider object

 

lasso_server_add_provider_from_buffer ()

lasso_error_t
lasso_server_add_provider_from_buffer (LassoServer *server,
                                       LassoProviderRole role,
                                       const gchar *metadata,
                                       const gchar *public_key,
                                       const gchar *ca_cert_chain);

Creates a new LassoProvider and makes it known to the server

Parameters

server

a LassoServer

 

role

provider role, identity provider or service provider

 

metadata

a string buffer containg the metadata file for a new provider

 

public_key

provider public key file (may be a certificate) or NULL.

[allow-none]

ca_cert_chain

provider CA certificate chain file or NULL.

[allow-none]

Returns

0 on success; a negative value if an error occured.


lasso_server_load_metadata ()

lasso_error_t
lasso_server_load_metadata (LassoServer *server,
                            LassoProviderRole role,
                            const gchar *federation_file,
                            const gchar *trusted_roots,
                            GList *blacklisted_entity_ids,
                            GList **loaded_entity_ids,
                            LassoServerLoadMetadataFlag flags);

Load all the SAML 2.0 entities from federation_file which contains a declaration for role . If trusted_roots is non-NULL, use it to check a signature on the metadata file, otherwise ignore signature validation.

Parameters

server

a LassoServer object

 

role

a LassoProviderRole value

 

federation_file

path to a SAML 2.0 metadata file

 

trusted_roots

a PEM encoded files containing the certificates to check signatures on the metadata file (optional).

[allow-none]

blacklisted_entity_ids

a list of EntityID which should not be loaded, can be NULL.

[allow-none][element-type string]

loaded_entity_ids

an output parameter for the list of the loaded EntityID, can be NULL.

[transfer full][element-type string][allow-none]

flags

flags modifying the behaviour for checking signatures on EntityDescriptor and EntitiesDescriptors nodes.

 

Returns

0 on success, an error code otherwise, among:

  • LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ if server is not a LassoServer object or role is not a valid role value,

  • LASSO_DS_ERROR_CA_CERT_CHAIN_LOAD_FAILED if the trusted_root file cannot be loaded,


lasso_server_destroy ()

void
lasso_server_destroy (LassoServer *server);

Destroys a server.

Parameters

server

a LassoServer

 

lasso_server_dump ()

gchar *
lasso_server_dump (LassoServer *server);

Dumps server content to an XML string.

Parameters

server

a LassoServer

 

Returns

the dump string. It must be freed by the caller.

[transfer full]


lasso_server_get_provider ()

LassoProvider *
lasso_server_get_provider (const LassoServer *server,
                           const gchar *providerID);

Looks up for a LassoProvider whose ID is providerID and returns it.

Parameters

server

a LassoServer

 

providerID

the provider ID

 

Returns

the LassoProvider, NULL if it was not found. The LassoProvider is owned by Lasso and should not be freed.

[transfer none]


lasso_server_set_encryption_private_key ()

lasso_error_t
lasso_server_set_encryption_private_key
                               (LassoServer *server,
                                const gchar *filename_or_buffer);

lasso_server_set_encryption_private_key has been deprecated since version 2.3 and should not be used in newly-written code.

Use lasso_server_set_encryption_private_key_with_password() instead.

Load an encryption private key from a file and set it in the server object

If filename_or_buffer is NULL, it frees the currently setted key.

Parameters

server

a LassoServer

 

filename_or_buffer

file name of the encryption key to load or its content as a NULL-terminated string.

[allow-none]

Returns

0 on success; another value if an error occured.


lasso_server_set_encryption_private_key_with_password ()

lasso_error_t
lasso_server_set_encryption_private_key_with_password
                               (LassoServer *server,
                                const gchar *filename_or_buffer,
                                const gchar *password);

Load an encryption private key from a file and set it in the server object. If password is non-NULL try to decrypt the key with it.

If filename_or_buffer is NULL, it frees the currently setted key.

Parameters

server

a LassoServer

 

filename_or_buffer

file name of the encryption key to load or its content as a NULL-terminated string.

[allow-none]

password

an optional password to decrypt the encryption key.

[allow-none]

Returns

0 on success; another value if an error occured.

Since: 2.3


lasso_server_load_affiliation ()

lasso_error_t
lasso_server_load_affiliation (LassoServer *server,
                               const gchar *filename);

Load an affiliation metadata file into server ; this must be called after providers have been added to server .

Parameters

server

a LassoServer

 

filename

file name of the affiliation metadata to load

 

Returns

0 on success; another value if an error occured.


lasso_server_get_endpoint_url_by_id ()

gchar *
lasso_server_get_endpoint_url_by_id (const LassoServer *server,
                                     const gchar *provider_id,
                                     const gchar *endpoint_description);

Locate the provider in the server's list of providers, then select an endpoint given the endpoint_description and return than endpoint's URL. If the provider cannot be found or if the provider does not have a matching endpoint NULL will be returned.

Parameters

server

a LassoServer

 

provider_id

the EntityID whose endpoints will be examined.

 

endpoint_description

string describing criteria used to select endpoint.

 

Returns

url (must be freed by caller)


lasso_server_get_filtered_provider_list ()

GList *
lasso_server_get_filtered_provider_list
                               (const LassoServer *server,
                                LassoProviderRole role,
                                LassoMdProtocolType protocol_type,
                                LassoHttpMethod http_method);

Iterate over the server providers and build a list of provider EntityID's who have the specified role and at least one endpoint matching the protocol_type and http_method . Return a GList list of EntityID's at the provider_list pointer. The caller is responsible for freeing the provider_list by calling lasso_release_list_of_strings().

Parameters

server

a LassoServer

 

role

each returned provider will match this LassoProviderRole

 

protocol_type

provider must have endpoint matching LassoMdProtocolType and http_method

 

http_method

provider must have endpoint matching LassoHttpMethod and protocol_type

 

Returns

GList of matching provider EntityID's returned here.

[transfer full][element-type string]


lasso_server_saml2_assertion_setup_signature ()

lasso_error_t
lasso_server_saml2_assertion_setup_signature
                               (LassoServer *server,
                                LassoSaml2Assertion *saml2_assertion);

Configure signature on a saml2:Assertion element.

Parameters

server

a LassoServer object

 

saml2_assertion

a LassoSaml2Assertion object

 

Returns

0 if successfull, an error code otherwise.

Types and Values

struct LassoServer

struct LassoServer {
	GHashTable *providers; /* of LassoProvider */
	/* Can actually contain LassoDataService or LassoIdWsf2DataService or any subclass */

	gchar *private_key;
	gchar *private_key_password;
	gchar *certificate;
	LassoSignatureMethod signature_method;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSamlAttributeDesignator.html0000644000000000000000000000013214404126163025366 xustar0030 mtime=1678814323.021964766 30 atime=1678814323.021964766 30 ctime=1678814323.021964766 lasso-2.8.2/docs/reference/lasso/html/LassoSamlAttributeDesignator.html0000644000175000017500000001412314404126163030637 0ustar00bdauvergnebdauvergne00000000000000 LassoSamlAttributeDesignator: lasso Reference Manual

LassoSamlAttributeDesignator

LassoSamlAttributeDesignator — object mapping for a saml:AttributeDesignator

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlAttributeDesignator
            ╰── LassoSamlAttribute

Description

The schema fragment (oasis-sstc-saml-schema-assertion-1.1.xsd) is:

Figure 25. Schema fragment for saml:AttributeDesignator


<element name="AttributeDesignator" type="saml:AttributeDesignatorType"/>
<complexType name="AttributeDesignatorType">
  <attribute name="AttributeName" type="string" use="required"/>
  <attribute name="AttributeNamespace" type="anyURI" use="required"/>
</complexType>


Functions

lasso_saml_attribute_designator_new ()

LassoNode *
lasso_saml_attribute_designator_new (void);

Creates a new LassoSamlAttributeDesignator object.

Returns

a newly created LassoSamlAttributeDesignator object

Types and Values

struct LassoSamlAttributeDesignator

struct LassoSamlAttributeDesignator {
	char *AttributeName;
	char *AttributeNamespace;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSamlAttribute.html0000644000000000000000000000013214404126163023346 xustar0030 mtime=1678814323.021964766 30 atime=1678814323.021964766 30 ctime=1678814323.021964766 lasso-2.8.2/docs/reference/lasso/html/LassoSamlAttribute.html0000644000175000017500000001242014404126163026615 0ustar00bdauvergnebdauvergne00000000000000 LassoSamlAttribute: lasso Reference Manual

LassoSamlAttribute

LassoSamlAttribute

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlAttributeDesignator
            ╰── LassoSamlAttribute

Description

Functions

lasso_saml_attribute_new ()

LassoSamlAttribute *
lasso_saml_attribute_new (void);

Creates a new LassoSamlAttribute object.

Returns

a newly created LassoSamlAttribute object

Types and Values

struct LassoSamlAttribute

struct LassoSamlAttribute {
	gchar *attributeName;
	gchar *attributeNameSpace;
	GList *AttributeValue; /* of LassoNode */
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/xml-samlv2.html0000644000000000000000000000013214404126163021566 xustar0030 mtime=1678814323.049964926 30 atime=1678814323.049964926 30 ctime=1678814323.049964926 lasso-2.8.2/docs/reference/lasso/html/xml-samlv2.html0000644000175000017500000002662214404126163025046 0ustar00bdauvergnebdauvergne00000000000000 Objects from SAML 2.0 schemas: lasso Reference Manual

Objects from SAML 2.0 schemas

SAML 2.0 Strings — String constants from SAML 2.0 specifications
LassoSaml2Action — <saml2:Action>
LassoSaml2Advice — <saml2:Advice>
LassoSaml2Assertion — <saml2:Assertion>
LassoSaml2AttributeStatement — <saml2:AttributeStatement>
LassoSaml2AttributeValue — value of an attribute in a SAML 2.0 assertion
LassoSaml2Attribute — <saml2:Attribute>
LassoSaml2AudienceRestriction — <saml2:AudienceRestriction>
LassoSaml2AuthnContext — <saml2:AuthnContext>
LassoSaml2AuthnStatement — <saml2:AuthnStatement>
LassoSaml2AuthzDecisionStatement — <saml2:AuthzDecisionStatement>
LassoSaml2BaseIDAbstract — <saml2:BaseIDAbstract>
LassoSaml2ConditionAbstract — <saml2:ConditionAbstract>
LassoSaml2Conditions — <saml2:Conditions>
LassoSaml2EncryptedElement — <saml2:EncryptedElement>
LassoSaml2Evidence — <saml2:Evidence>
LassoSaml2KeyInfoConfirmationData — <saml2:KeyInfoConfirmationData>
LassoSaml2NameID — <saml2:NameID>
LassoSaml2OneTimeUse — <saml2:OneTimeUse>
LassoSaml2ProxyRestriction — <saml2:ProxyRestriction>
LassoSaml2StatementAbstract — <saml2:StatementAbstract>
LassoSaml2SubjectConfirmationData — <saml2:SubjectConfirmationData>
LassoSaml2SubjectConfirmation — <saml2:SubjectConfirmation>
LassoSaml2SubjectLocality — <saml2:SubjectLocality>
LassoSaml2Subject — <saml2:Subject>
LassoSamlp2ArtifactResolve — <samlp2:ArtifactResolve>
LassoSamlp2ArtifactResponse — <samlp2:ArtifactResponse>
LassoSamlp2AssertionIDRequest
LassoSamlp2AttributeQuery — <samlp2:AttributeQuery>
LassoSamlp2AuthnQuery — <samlp2:AuthnQuery>
LassoSamlp2AuthnRequest — <samlp2:AuthnRequest>
LassoSamlp2AuthzDecisionQuery — <samlp2:AuthzDecisionQuery>
LassoSamlp2Extensions — <samlp2:Extensions>
LassoSamlp2IDPEntry — <samlp2:IDPEntry>
LassoSamlp2IDPList — <samlp2:IDPList>
LassoSamlp2LogoutRequest — <samlp2:LogoutRequest>
LassoSamlp2LogoutResponse — <samlp2:LogoutResponse>
LassoSamlp2ManageNameIDRequest — <samlp2:ManageNameIDRequest>
LassoSamlp2ManageNameIDResponse — <samlp2:ManageNameIDResponse>
LassoSamlp2NameIDMappingRequest — <samlp2:NameIDMappingRequest>
LassoSamlp2NameIDMappingResponse — <samlp2:NameIDMappingResponse>
LassoSamlp2NameIDPolicy — <samlp2:NameIDPolicy>
LassoSamlp2RequestAbstract — <samlp2:RequestAbstract>
LassoSamlp2RequestedAuthnContext — <samlp2:RequestedAuthnContext>
LassoSamlp2Response — <samlp2:Response>
LassoSamlp2Scoping — <samlp2:Scoping>
LassoSamlp2StatusCode — <samlp2:StatusCode>
LassoSamlp2StatusDetail — <samlp2:StatusDetail>
LassoSamlp2StatusResponse — <samlp2:StatusResponse>
LassoSamlp2Status — <samlp2:Status>
LassoSamlp2SubjectQueryAbstract — <samlp2:SubjectQueryAbstract>
LassoSamlp2Terminate — <samlp2:Terminate>
LassoEcpRequest — <ecp:Request>
LassoEcpResponse — <ecp:Response>
LassoEcpRelayState — <ecp:RelayState>
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoLibAuthnRequestEnvelope.html0000644000000000000000000000013214404126163025343 xustar0030 mtime=1678814323.001964653 30 atime=1678814323.001964653 30 ctime=1678814323.001964653 lasso-2.8.2/docs/reference/lasso/html/LassoLibAuthnRequestEnvelope.html0000644000175000017500000002473414404126163030625 0ustar00bdauvergnebdauvergne00000000000000 LassoLibAuthnRequestEnvelope: lasso Reference Manual

LassoLibAuthnRequestEnvelope

LassoLibAuthnRequestEnvelope — <lib:AuthnRequestEnvelope>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoLibAuthnRequestEnvelope

Description

Figure 4. Schema fragment for lib:AuthnRequestEnvelope

<xs:element name="AuthnRequestEnvelope" type="AuthnRequestEnvelopeType"/>
<xs:complexType name="AuthnRequestEnvelopeType">
  <xs:complexContent>
    <xs:extension base="RequestEnvelopeType">
      <xs:sequence>
        <xs:element ref="AuthnRequest"/>
        <xs:element ref="ProviderID"/>
        <xs:element name="ProviderName" type="xs:string" minOccurs="0"/>
        <xs:element name="AssertionConsumerServiceURL" type="xs:anyURI"/>
        <xs:element ref="IDPList" minOccurs="0"/>
        <xs:element name="IsPassive" type="xs:boolean" minOccurs="0"/>
      </xs:sequence>
    </xs:extension>
  </xs:complexContent>
</xs:complexType>
<xs:complexType name="RequestEnvelopeType">
  <xs:sequence>
    <xs:element ref="Extension" minOccurs="0" maxOccurs="unbounded"/>
  </xs:sequence>
</xs:complexType>
<xs:element name="IDPList" type="IDPListType"/>
<xs:complexType name="IDPListType">
  <xs:sequence>
    <xs:element ref="IDPEntries"/>
    <xs:element ref="GetComplete" minOccurs="0"/>
  </xs:sequence>
</xs:complexType>
<xs:complexType name="ResponseEnvelopeType">
  <xs:sequence>
    <xs:element ref="Extension" minOccurs="0" maxOccurs="unbounded"/>
  </xs:sequence>
</xs:complexType>

Functions

lasso_lib_authn_request_envelope_new ()

LassoLibAuthnRequestEnvelope *
lasso_lib_authn_request_envelope_new (void);

Creates a new LassoLibAuthnRequestEnvelope object.

Returns

a newly created LassoLibAuthnRequestEnvelope object


lasso_lib_authn_request_envelope_new_full ()

LassoLibAuthnRequestEnvelope *
lasso_lib_authn_request_envelope_new_full
                               (LassoLibAuthnRequest *authnRequest,
                                char *providerID,
                                char *assertionConsumerServiceURL);

Creates a new LassoLibAuthnRequestEnvelope object and initializes it with the parameters.

Parameters

authnRequest

the LassoLibAuthnRequest to envelop

 

providerID

service provider ID

 

assertionConsumerServiceURL

assertion consumer service URL on the service provider

 

Returns

a newly created LassoLibAuthnRequestEnvelope object

Types and Values

struct LassoLibAuthnRequestEnvelope

struct LassoLibAuthnRequestEnvelope {
	/* <xs:element ref="Extension" minOccurs="0" maxOccurs="unbounded"/> */
	GList *Extension; /* of xmlNode* */
	/* <xs:element ref="AuthnRequest"/> */
	LassoLibAuthnRequest *AuthnRequest;
	/* <xs:element ref="ProviderID"/> */
	char *ProviderID;
	/* <xs:element name="ProviderName" type="xs:string" minOccurs="0"/> */
	char *ProviderName;
	/* <xs:element name="AssertionConsumerServiceURL" type="xs:anyURI"/> */
	char *AssertionConsumerServiceURL;
	/* <xs:element ref="IDPList" minOccurs="0"/> */
	LassoLibIDPList *IDPList;
	/* <xs:element name="IsPassive" type="xs:boolean" minOccurs="0"/> */
	gboolean IsPassive;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoLibAuthnRequest.html0000644000000000000000000000013214404126163023645 xustar0030 mtime=1678814323.001964653 30 atime=1678814323.001964653 30 ctime=1678814323.001964653 lasso-2.8.2/docs/reference/lasso/html/LassoLibAuthnRequest.html0000644000175000017500000002617014404126163027123 0ustar00bdauvergnebdauvergne00000000000000 LassoLibAuthnRequest: lasso Reference Manual

LassoLibAuthnRequest

LassoLibAuthnRequest — <lib:AuthnRequest>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlpRequestAbstract
            ╰── LassoLibAuthnRequest

Description

Authentication requests are sent from a service provider to an identity provider.

The lib:AuthnRequest is defined as an extension of samlp:RequestAbstractType. The RequestID attribute in samlp:RequestAbstractType has uniqueness requirements placed on it by [SAMLCore11], which require it to have the properties of a nonce.

Figure 5. Schema fragment for lib:AuthnRequest

<xs:element name="AuthnRequest" type="AuthnRequestType" />
<xs:complexType name="AuthnRequestType">
  <xs:complexContent>
    <xs:extension base="samlp:RequestAbstractType">
      <xs:sequence>
        <xs:element ref="Extension" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="ProviderID"/>
        <xs:element ref="AffiliationID" minOccurs="0"/>
        <xs:element ref="NameIDPolicy" minOccurs="0"/>
        <xs:element name="ForceAuthn" type="xs:boolean" minOccurs="0"/>
        <xs:element name="IsPassive" type="xs:boolean "minOccurs="0"/>
        <xs:element ref="ProtocolProfile" minOccurs="0"/>
        <xs:element name="AssertionConsumerServiceID" type="xs:string" minOccurs="0"/>
        <xs:element ref="RequestAuthnContext" minOccurs="0"/>
        <xs:element ref="RelayState" minOccurs="0"/>
        <xs:element ref="Scoping" minOccurs="0 "/>
      </xs:sequence>
      <xs:attribute ref="consent" use="optional"/>
    </xs:extension>
  </xs:complexContent>
</xs:complexType>

<xs:element name="ProviderID" type="md:entityIDType"/>
<xs:element name="AffiliationID" type="md:entityIDType"/>

<xs:element name="NameIDPolicy" type="NameIDPolicyType"/>
<xs:simpleType name="NameIDPolicyType">
  <xs:restriction base="xs:string">
    <xs:enumeration value="none"/>
    <xs:enumeration value="onetime"/>
    <xs:enumeration value="federated"/>
    <xs:enumeration value="any"/ >
  </xs:restriction>
</xs:simpleType>

<xs:element name="ProtocolProfile" type="xs:anyURI"/>
<xs:element name="RelayState" type="xs:string"/>

Functions

lasso_lib_authn_request_new ()

LassoLibAuthnRequest *
lasso_lib_authn_request_new (void);

Creates a new LassoLibAuthnRequest object.

Returns

a newly created LassoLibAuthnRequest object

Types and Values

struct LassoLibAuthnRequest

struct LassoLibAuthnRequest {
	/* <xs:element ref="Extension" minOccurs="0" maxOccurs="unbounded"/> */
	GList *Extension; /* of xmlNode* */
	/* <xs:element ref="ProviderID"/> */
	char *ProviderID;
	/* <xs:element ref="AffiliationID" minOccurs="0"/> */
	char *AffiliationID;
	/* <xs:element ref="NameIDPolicy" minOccurs="0"/> */
	char *NameIDPolicy;
	/* <xs:element name="ForceAuthn" type="xs:boolean" minOccurs="0"/> */
	gboolean ForceAuthn;
	/* <xs:element name="IsPassive" type="xs:boolean "minOccurs="0"/> */
	gboolean IsPassive;
	/* <xs:element ref="ProtocolProfile" minOccurs="0"/> */
	char *ProtocolProfile;
	/* <xs:element name="AssertionConsumerServiceID" type="xs:string" minOccurs="0"/> */
	char *AssertionConsumerServiceID;
	/* <xs:element ref="RequestAuthnContext" minOccurs="0"/> */
	LassoLibRequestAuthnContext *RequestAuthnContext;
	/* <xs:element ref="RelayState" minOccurs="0"/> */
	char *RelayState;
	/* <xs:element ref="Scoping" minOccurs="0 "/> */
	LassoLibScoping *Scoping;
	/* <xs:attribute ref="consent" use="optional"/> */
	char *consent;
};

ProviderID isthe service provider identifier, this field will often be filled with lasso_login_init_authn_request()

nameIDPolicy tells the identity provider about the policy to use for federation; it must be one of LASSO_LIB_NAMEID_POLICY_TYPE_NONE, LASSO_LIB_NAMEID_POLICY_TYPE_ONE_TIME, LASSO_LIB_NAMEID_POLICY_TYPE_FEDERATED or LASSO_LIB_NAMEID_POLICY_TYPE_ANY.

IsPassive ; if TRUE (default) it tells the identity provider not to interact with the user.

ForceAuthn ; only used if IsPassive is FALSE, it tells the identity provider to force authentication of the user even when already authenticated.

ProtocolProfile is the Single Sign-On and Federation profile to adopt; either LASSO_LIB_PROTOCOL_PROFILE_BRWS_ART (which is the default value) or LASSO_LIB_PROTOCOL_PROFILE_BRWS_POST.

See Also

LassoLogin

lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSaml2AuthzDecisionStatement.html0000644000000000000000000000013214404126163026123 xustar0030 mtime=1678814323.017964743 30 atime=1678814323.017964743 30 ctime=1678814323.017964743 lasso-2.8.2/docs/reference/lasso/html/LassoSaml2AuthzDecisionStatement.html0000644000175000017500000001501514404126163031375 0ustar00bdauvergnebdauvergne00000000000000 LassoSaml2AuthzDecisionStatement: lasso Reference Manual

LassoSaml2AuthzDecisionStatement

LassoSaml2AuthzDecisionStatement — <saml2:AuthzDecisionStatement>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSaml2StatementAbstract
            ╰── LassoSaml2AuthzDecisionStatement

Description

Figure 53. Schema fragment for saml2:AuthzDecisionStatement


<complexType name="AuthzDecisionStatementType">
  <complexContent>
    <extension base="saml:StatementAbstractType">
      <sequence>
        <element ref="saml:Action" maxOccurs="unbounded"/>
        <element ref="saml:Evidence" minOccurs="0"/>
      </sequence>
      <attribute name="Resource" type="anyURI" use="required"/>
      <attribute name="Decision" type="saml:DecisionType" use="required"/>
    </extension>
  </complexContent>
</complexType>

Functions

lasso_saml2_authz_decision_statement_new ()

LassoNode *
lasso_saml2_authz_decision_statement_new
                               (void);

Creates a new LassoSaml2AuthzDecisionStatement object.

Returns

a newly created LassoSaml2AuthzDecisionStatement object

Types and Values

struct LassoSaml2AuthzDecisionStatement

struct LassoSaml2AuthzDecisionStatement {
	/* elements */
	LassoSaml2Action *Action;
	LassoSaml2Evidence *Evidence;
	/* attributes */
	char *Resource;
	char *Decision;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/idff.html0000644000000000000000000000012714404126163020500 xustar0029 mtime=1678814323.04196488 29 atime=1678814323.04196488 29 ctime=1678814323.04196488 lasso-2.8.2/docs/reference/lasso/html/idff.html0000644000175000017500000000536014404126163023750 0ustar00bdauvergnebdauvergne00000000000000 Identity Federation Framework - ID-FF 1.2 profiles: lasso Reference Manual

Identity Federation Framework - ID-FF 1.2 profiles

LassoLogin — Single Sign-On and Federation Profile
LassoLogout — Single Logout Profile
LassoDefederation — Federation Termination Notification Profile (ID-FF)
LassoNameRegistration — Name Registration Profile (ID-FF)
LassoNameIdentifierMapping — Liberty Enabled Client and Proxy Profile (ID-FF)
LassoLecp — Liberty Enabled Client and Proxy Profile (ID-FF)
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSamlConditionAbstract.html0000644000000000000000000000013214404126163025015 xustar0030 mtime=1678814323.021964766 30 atime=1678814323.021964766 30 ctime=1678814323.021964766 lasso-2.8.2/docs/reference/lasso/html/LassoSamlConditionAbstract.html0000644000175000017500000001043314404126163030266 0ustar00bdauvergnebdauvergne00000000000000 LassoSamlConditionAbstract: lasso Reference Manual

LassoSamlConditionAbstract

LassoSamlConditionAbstract — <:saml:ConditionAbstract>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlConditionAbstract
            ╰── LassoSamlAudienceRestrictionCondition

Description

Figure 30. Schema fragment for saml:ConditionAbstract

<element name="Condition" type="saml:ConditionAbstractType"/>
<complexType name="ConditionAbstractType" abstract="true"/>

Functions

Types and Values

struct LassoSamlConditionAbstract

struct LassoSamlConditionAbstract;
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoLibFederationTerminationNotification.html0000644000000000000000000000013214404126163030056 xustar0030 mtime=1678814323.001964653 30 atime=1678814323.001964653 30 ctime=1678814323.001964653 lasso-2.8.2/docs/reference/lasso/html/LassoLibFederationTerminationNotification.html0000644000175000017500000002546014404126163033335 0ustar00bdauvergnebdauvergne00000000000000 LassoLibFederationTerminationNotification: lasso Reference Manual

LassoLibFederationTerminationNotification

LassoLibFederationTerminationNotification — <lib:FederationTerminationNotification>

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlpRequestAbstract
            ╰── LassoLibFederationTerminationNotification

Description

Figure 7. Schema fragment for lib:FederationTerminationNotification

<xs:element name="FederationTerminationNotification"
    type="FederationTerminationNotificationType"/>
  <xs:complexType name="FederationTerminationNotificationType">
    <xs:complexContent>
      <xs:extension base="samlp:RequestAbstractType">
        <xs:sequence>
          <xs:element ref="Extension" minOccurs="0" maxOccurs="unbounded"/>
          <xs:element ref="ProviderID"/>
          <xs:element ref="saml:NameIdentifier"/>
        </xs:sequence>
      <xs:attribute ref="consent" use="optional"/>
    </xs:extension>
  </xs:complexContent>
</xs:complexType>

<xs:element name="ProviderID" type="md:entityIDType"/>

Functions

lasso_lib_federation_termination_notification_new ()

LassoNode *
lasso_lib_federation_termination_notification_new
                               (void);

Creates a new LassoLibFederationTerminationNotification object.

Returns

a newly created LassoLibFederationTerminationNotification object


lasso_lib_federation_termination_notification_new_full ()

LassoNode *
lasso_lib_federation_termination_notification_new_full
                               (char *providerID,
                                LassoSamlNameIdentifier *nameIdentifier,
                                LassoSignatureType sign_type,
                                LassoSignatureMethod sign_method);

Creates a new LassoLibFederationTerminationNotification object and initializes it with the parameters.

Parameters

providerID

the provider ID doing the notification

 

nameIdentifier

the name identifier for the federation to terminate.

 

sign_type

a LassoSignatureType value

 

sign_method

a LassoSignatureMethod value

 

Returns

a newly created LassoLibFederationTerminationNotification object

Types and Values

struct LassoLibFederationTerminationNotification

struct LassoLibFederationTerminationNotification {
	/* <xs:element ref="Extension" minOccurs="0" maxOccurs="unbounded"/> */
	GList *Extension; /* of xmlNode* */
	/* <xs:element ref="ProviderID"/> */
	char *ProviderID;
	/* <xs:element ref="saml:NameIdentifier"/> */
	LassoSamlNameIdentifier *NameIdentifier;
	/* <xs:attribute ref="consent" use="optional"/> */
	char *consent;

	char *RelayState; /* not in schema but allowed in redirects */
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoLogin.html0000644000000000000000000000013214404126163021636 xustar0030 mtime=1678814323.009964697 30 atime=1678814323.009964697 30 ctime=1678814323.009964697 lasso-2.8.2/docs/reference/lasso/html/LassoLogin.html0000644000175000017500000035007614404126163025121 0ustar00bdauvergnebdauvergne00000000000000 LassoLogin: lasso Reference Manual

LassoLogin

LassoLogin — Single Sign-On and Federation Profile

Types and Values

struct LassoLogin

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoProfile
            ╰── LassoLogin
                ╰── LassoLecp

Description

The Single Sign On process allows a user to log in once to an identity provider (IdP), and to be then transparently loged in to the required service providers (SP) belonging to the IP "circle of trust". Subordinating different identities of the same user within a circle of trust to a unique IP is called "Identity Federation". The liberty Alliance specifications allows, thanks to this federation, strong and unique authentication coupled with control by the user of his personal informations. The explicit user agreement is necessary before proceeding to Identity Federation.

The service provider must implement the following process:

Our first example shows how to initiate a request toward an ID-FF 1.2 or SAML 2.0 identity provider. It supposes that we already initialized a LassoServer object with the metadatas or our provider (and its private key if we want to sign the request), and that we added the metadatas of the targetted IdP with the method lasso_server_add_provider().

Example 2. Service Provider Login URL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
LassoLogin *login;
int rc; // hold return codes

login = lasso_login_new(server);
rc = lasso_login_init_authn_request(login, "http://identity-provider-id/",
                LASSO_HTTP_METHOD_REDIRECT);
if (rc != 0) {
  ... // handle errors, most of them are related to bad initialization
}

// customize AuthnRequest
// protocolProfile is the protocolProfile of the provider http://identity-provider-id/
if (protocolProfile == LASSO_LIBERTY_1_2) {
        LassoLibAuthnRequest *request = LASSO_LIB_AUTHN_REQUEST(LASSO_PROFILE(login)->request);
        request->NameIDPolicy = strdup(LASSO_LIB_NAMEID_POLICY_TYPE_FEDERATED);
        request->ForceAuthn = TRUE;
        request->IsPassive = FALSE;
        // tell the IdP how to return the response
        request->ProtocolProfile = strdup(LASSO_LIB_PROTOCOL_PROFILE_BRWS_ART);
} else if (protocolProfile == LASSO_SAML_2_0) {
        LassoSamlp2AuthnRequest *request = LASSO_SAMLP2_AUTHN_REQUEST(LASSO_PROFILE(login)->request);
        if (request->NameIDPolicy->Format) {
                g_free(request->NameIDPolicy->Format);
        }
        request->NameIDPolicy->Format = g_strdup(LASSO_NAME_IDENTIFIER_FORMAT_PERSISTENT);
        // Allow creation of new federation
        // 
        request->NameIDPolicy->AllowCreate = 1;
        request->ForceAuthn = TRUE;
        request->IsPassive = FALSE;
        // tell the IdP how to return the response
        if (request->ProtocolBinding) {
                 g_free(request->ProtocolBinding);
        }
        // here we expect an artifact response, it could be post, redirect or PAOS.
        request->ProtocolBinding = g_strdup(LASSO_SAML2_METADATA_BINDING_ARTIFACT);
   }
// Lasso will choose whether to sign the request by looking at the IdP
// metadatas and at our metadatas, but you can always force him to sign or to
// not sign using the method lasso_profile_set_signature_hint() on the
// LassoLogin object.

rc = lasso_login_build_authn_request_msg(login);
if (rc != 0) {
      .... // handle errors
      // could be that the requested binding (POST, Redirect, etc..) is not supported (LASSO_PROFILE_ERROR_UNSUPPORTED_PROFILE)
      // or that we could not sign the request (LASSO_PROFILE_ERROR_BUILDING_QUERY_FAILED).
}

// redirect user to identity provider
   // we chose the Redirect binding, so we have to generate a redirect HTTP response to the URL returned by Lasso
printf("Location: %s\n\nRedirected to IdP\n", LASSO_PROFILE(login)->msg_url);

Next example shows how to receive the response from the identity provider for ID-FF 1.2.

Example 3. Service Provider Assertion Consumer Service URL for ID-FF 1.2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
LassoLogin *login;
char *request_method = getenv("REQUEST_METHOD");
char *artifact_msg = NULL, *lares = NULL, *lareq = NULL;
char *name_identifier;
lassoHttpMethod method;
int rc = 0;

login = lasso_login_new(server);
if (strcmp(request_method, "GET") == 0) {
        artifact_msg = getenv("QUERY_STRING");
        method = LASSO_HTTP_METHOD_REDIRECT;
} else {
        // read submitted form; if it has a LAREQ field, put it in lareq,
        // if it has a LARES field, put it in lares
        if (lareq) {
                artifact_msg = lareq;
        } else if (lares) {
                response_msg = lares;
        } else {
                // bail out
        }
        method = LASSO_HTTP_METHOD_POST;
}

if (artifact_msg) {
        // we received an artifact response,
        // it means we did not really receive the response,
        // only a token to redeem the real response from the identity
        // provider through a SOAP resolution call
        rc = lasso_login_init_request(login, artifact_msg, method);
        if (rc != 0) {
                  ... // handle errors
                  // there is usually no error at this step, only
                  // if the IdP response is malformed
        }
        rc = lasso_login_build_request_msg(login);
        if (rc != 0) {
                  ... // handle errors
                  // as for AuthnRequest generation, it generally is caused
                  // by a bad initialization like an impossibility to load
                  // the private key.
        }
        // makes a SOAP call, soap_call is NOT a Lasso function
        soap_answer_msg = soap_call(LASSO_PROFILE(login)->msg_url,
                        LASSO_PROFILE(login)->msg_body);
        rc = lasso_login_process_response_msg(login, soap_answer_msg);
        if (rc != 0) {
                  ... // handle errors
                  // here you can know if the IdP refused the request, 
        }
} else if (response_msg) {
        lasso_login_process_authn_response_msg(login, response_msg);
}

// looks up name_identifier in local file, database, whatever and gets back
// two things: identity_dump and session_dump
name_identifier = LASSO_PROFILE(login)->nameIdentifier
lasso_profile_set_identity_from_dump(LASSO_PROFILE(login), identity_dump);
lasso_profile_set_session_from_dump(LASSO_PROFILE(login), session_dump);

lasso_login_accept_sso(login);

if (lasso_profile_is_identity_dirty(LASSO_PROFILE(login))) {
        LassoIdentity *identity;
        char *identity_dump;
        identity = lasso_profile_get_identity(LASSO_PROFILE(login));
        identity_dump = lasso_identity_dump(identity);
        // record identity_dump in file, database...
}

if (lasso_profile_is_session_dirty(LASSO_PROFILE(login))) {
        LassoSession *session;
        char *session_dump;
        session = lasso_profile_get_session(LASSO_PROFILE(login));
        session_dump = lasso_session_dump(session);
        // record session_dump in file, database...
}

// redirect user anywhere
printf("Location: %s\n\nRedirected to site root\n", login->msg_url);

The implement an IdP you must create a single sign-on service endpoint, the needed APIs for this are lasso_login_process_authn_request_msg(), lasso_login_validate_request_msg(), lasso_login_build_assertion(), lasso_login_build_authn_response_msg() and lasso_login_build_artifact_msg(). You will have to chose between lasso_login_build_authn_response_msg() and lasso_login_build_artifact_msg() depending on the requested protocol for the response by the service provider

Example 4. Identity provider single sign-on service

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
LassoLogin *login;
char *request_method = getenv("REQUEST_METHOD");
char *artifact_msg = NULL, *lares = NULL, *lareq = NULL;
char *name_identifier;
lassoHttpMethod method;
int rc = 0;

login = lasso_login_new(server);
if (strcmp(request_method, 'GET')) { // AuthnRequest send with the HTTP-Redirect binding
    //
    lasso_profile_set_signature_verify_hint(LASSO_PROFILE(login),
            LASSO_PROFILE_SIGNATURE_VERIFY_HINT_FORCE);
    rc = lasso_process_authn_request_msg(login, getenv("QUERY_STRING"));
    if (rc != 0) {
        // handle errors
    }


} else {

Functions

lasso_login_new ()

LassoLogin *
lasso_login_new (LassoServer *server);

Creates a new LassoLogin.

Parameters

server

the LassoServer

 

Returns

a newly created LassoLogin object; or NULL if an error occured


lasso_login_new_from_dump ()

LassoLogin *
lasso_login_new_from_dump (LassoServer *server,
                           const gchar *dump);

Restores the dump to a new LassoLogin.

Parameters

server

the LassoServer

 

dump

XML login dump

 

Returns

a newly created LassoLogin; or NULL if an error occured.


lasso_login_accept_sso ()

lasso_error_t
lasso_login_accept_sso (LassoLogin *login);

Gets the assertion of the response and adds it to the LassoSession object. Builds a federation with the 2 name identifiers of the assertion and adds it into the identity. If the session or the identity are NULL, they are created.

Parameters

login

a LassoLogin

 

Returns

0 on success; or


lasso_login_build_artifact_msg ()

lasso_error_t
lasso_login_build_artifact_msg (LassoLogin *login,
                                LassoHttpMethod http_method);

Builds a SAML artifact. Depending of the HTTP method, the data for the sending of the artifact are stored in msg_url (REDIRECT) or msg_url , msg_body and msg_relayState (POST).

Parameters

login

a LassoLogin

 

http_method

the HTTP method to send the artifact (REDIRECT or POST)

 

Returns

0 on success; or

  • LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ if login is not a LassoLogin object,

  • LASSO_PROFILE_ERROR_MISSING_REMOTE_PROVIDERID if no remote provider ID was setup in the login profile object, it's usually done by lasso_login_process_authn_request_msg,

  • LASSO_PROFILE_ERROR_INVALID_HTTP_METHOD if the HTTP method is neither LASSO_HTTP_METHOD_REDIRECT or LASSO_HTTP_METHOD_POST (ID-FF 1.2 case) or neither LASSO_HTTP_METHOD_ARTIFACT_GET or LASSO_HTTP_METHOD_ARTIFACT_POST (SAML 2.0 case) for SAML 2.0),

  • LASSO_PROFILE_ERROR_INVALID_PROTOCOLPROFILE if the current protocolProfile is not

  • LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_ART (only for ID-FF 1.2),

  • LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND if the remote provider is not known to our server object which impeach us to find a service endpoint,

  • LASSO_PROFILE_ERROR_MISSING_RESPONSE if the response object is missing,

  • LASSO_PROFILE_ERROR_MISSING_STATUS_CODE if the response object is missing a status code,


lasso_login_build_assertion ()

lasso_error_t
lasso_login_build_assertion (LassoLogin *login,
                             const char *authenticationMethod,
                             const char *authenticationInstant,
                             const char *reauthenticateOnOrAfter,
                             const char *notBefore,
                             const char *notOnOrAfter);

Builds an assertion and stores it in profile session. authenticationInstant , reauthenticateOnOrAfter, notBefore and notOnOrAfter may be NULL. If authenticationInstant is NULL, the current time will be used. Time values must be encoded in UTC.

Construct the authentication assertion for the response. It must be called after validating the request using lasso_login_validate_request_msg(). The created assertion is accessed using lasso_login_get_assertion().

Parameters

login

a LassoLogin

 

authenticationMethod

the authentication method

 

authenticationInstant

the time at which the authentication took place

 

notBefore

the earliest time instant at which the assertion is valid

 

notOnOrAfter

the time instant at which the assertion has expired

 

Returns

0 on success; or


lasso_login_build_authn_request_msg ()

lasso_error_t
lasso_login_build_authn_request_msg (LassoLogin *login);

Converts profile authentication request (request member) into a Liberty message, either an URL in HTTP-Redirect profile or an URL and a field value in Browser-POST (form) profile.

The URL is set into the msg_url member and the eventual field value (LAREQ) is set into the msg_body member.

Parameters

login

a LassoLogin

 

Returns

0 on success; or


lasso_login_build_authn_response_msg ()

lasso_error_t
lasso_login_build_authn_response_msg (LassoLogin *login);

Converts profile authentication response (response member) into a Liberty message.

The URL is set into the msg_url member and the field value (LARES) is set into the msg_body member.

Parameters

login

a LassoLogin

 

Returns

0 on success; or

  • LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ if login is not a LassoLogin object,

  • LASSO_PROFILE_ERROR_INVALID_PROTOCOLPROFILE if the current protocol profile is not

  • LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_POST or LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_LECP,

  • LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND if the remote provider ID is not registered in the server object,

  • LASSO_PROFILE_ERROR_UNKNOWN_PROFILE_URL if the metadata of the remote provider does not contain an URL for the assertion consuming service,

  • LASSO_PROFILE_ERROR_MISSING_SERVER the server object is needed to sign a message and it is missing,

  • LASSO_DS_ERROR_PRIVATE_KEY_LOAD_FAILED the private key for signing could not be found,

  • LASSO_PROFILE_ERROR_MISSING_RESPONSE if the response object is missing,

  • LASSO_PROFILE_ERROR_UNSUPPORTED_PROFILE if the SSO profile is not supported by the targeted provider,

  • LASSO_PROFILE_BUILDING_QUERY_FAILED if using LASSO_HTTP_METHOD_REDIRECT building of the redirect URL failed,

  • LASSO_PROFILE_BUILDING_MSG_FAILED if using LASSO_HTTP_METHOD_POST, LASSO_HTTP_METHOD_SOAP or LASSO_HTTP_METHOD_PAOS and building the msg_body failed.


lasso_login_build_request_msg ()

lasso_error_t
lasso_login_build_request_msg (LassoLogin *login);

Produce a SOAP Artifact Resolve message. It must follows a call to lasso_login_init_request() on the artifact message. Converts artifact request into a Liberty SOAP message.

The URL is set into the msg_url member and the SOAP message is set into the msg_body member. You should POST the msg_body to the msg_url afterward.

Parameters

login

a LassoLogin

 

Returns

0 on success; or LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ if login is not a LassoLogin object, LASSO_PROFILE_ERROR_MISSING_REMOTE_PROVIDERID if not remote provider ID was setup -- it usually means that lasso_login_init_request was not called before, LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND if the remote provider ID is not registered in the server object.


lasso_login_build_response_msg ()

lasso_error_t
lasso_login_build_response_msg (LassoLogin *login,
                                gchar *remote_providerID);

Converts profile assertion response (response member) into a Liberty SOAP messageresponse message.

The URL is set into the msg_url member and the SOAP message is set into the msg_body member.

Parameters

login

a LassoLogin

 

remote_providerID

service provider ID

 

Returns

0 on success; or a negative value otherwise. LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ if login is not a LassoLogin object, LASSO_PROFILE_ERROR_SESSION_NOT_FOUND if no session object was found in the login profile object -- it should be created by lasso_login_build_assertion() if you did not set it manually before calling lasso_login_build_assertion().


lasso_login_destroy ()

void
lasso_login_destroy (LassoLogin *login);

Destroys a LassoLogin object.

Deprecated : Since 2.2.1, use g_object_unref() instead.

Parameters

login

a LassoLogin

 

lasso_login_dump ()

gchar *
lasso_login_dump (LassoLogin *login);

Dumps login content to an XML string.

Parameters

login

a LassoLogin

 

Returns

the dump string. It must be freed by the caller.

[transfer full]


lasso_login_get_assertion ()

LassoNode *
lasso_login_get_assertion (LassoLogin *login);

Return the last build assertion.

Parameters

login

a LassoLogin object

 

Returns

a LassoNode representing the build assertion (generally a LassoSamlAssertion when using ID-FF 1.2 or a LassoSaml2Assertion when using SAML 2.0)


lasso_login_init_authn_request ()

lasso_error_t
lasso_login_init_authn_request (LassoLogin *login,
                                const gchar *remote_providerID,
                                LassoHttpMethod http_method);

Initializes a new AuthnRequest from current service provider to remote identity provider specified in remote_providerID (if NULL the first known identity provider is used).

For ID-FF 1.2 the default NameIDPolicy in an AuthnRequest is None, which imply that a federation must already exist on the IdP side.

For SAML 2.0 the default NameIDPolicy is the first listed in the metadatas of the current provider, or if none is specified, Transient, which ask the IdP to give a one-time federation

Parameters

login

a LassoLogin

 

remote_providerID

the providerID of the identity provider (may be NULL).

[allow-none]

http_method

HTTP method to use for request transmission.

[default LASSO_HTTP_METHOD_REDIRECT]

Returns

0 on success; or

  • LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ if login is not a LassoLogin object,

  • LASSO_PROFILE_ERROR_MISSING_REMOTE_PROVIDERID if remote_providerID is NULL and no default remote provider could be found from the server object -- usually the first one in the order of adding to the server object --,

  • LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND if the remote_providerID is not known to our server object.

  • LASSO_PROFILE_ERROR_INVALID_HTTP_METHOD if the HTTP method is neither LASSO_HTTP_METHOD_REDIRECT or LASSO_HTTP_METHOD_POST,

  • LASSO_PROFILE_ERROR_BUILDING_REQUEST_FAILED if creation of the request object failed.


lasso_login_init_idp_initiated_authn_request ()

lasso_error_t
lasso_login_init_idp_initiated_authn_request
                               (LassoLogin *login,
                                const gchar *remote_providerID);

Generates an authentication response without matching authentication request.

The choice of NameIDFormat is the same as for lasso_login_init_authn_request() but with the target remote_providerID as the current provider

If remote_providerID is NULL, the first known provider is used.

Parameters

login

a LassoLogin.

 

remote_providerID

the providerID of the remote service provider (may be NULL)

 

Returns

0 on success; or a negative value otherwise. Error codes are the same as lasso_login_init_authn_request().


lasso_login_init_request ()

lasso_error_t
lasso_login_init_request (LassoLogin *login,
                          gchar *response_msg,
                          LassoHttpMethod response_http_method);

Initializes an artifact request. response_msg is either the query string (in redirect mode) or the form LAREQ field (in browser-post mode). It should only be used if you received an artifact message, response_msg must be content of the artifact field for the POST artifact binding of the query string for the REDIRECT artifact binding. You must set the response_http_method argument according to the way you received the artifact message.

Parameters

login

a LassoLogin

 

response_msg

the authentication response received

 

response_http_method

the method used to receive the authentication response

 

Returns

0 on success; or

  • LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ if login is not a LassoLogin object,

  • LASSO_PARAM_ERROR_INVALID_VALUE if response_msg is NULL,

  • LASSO_PROFILE_ERROR_INVALID_HTTP_METHOD if the HTTP method is neither LASSO_HTTP_METHOD_REDIRECT or LASSO_HTTP_METHOD_POST (in the ID-FF 1.2 case) or neither LASSO_HTTP_METHOD_ARTIFACT_GET or LASSO_HTTP_METHOD_ARTIFACT_POST (in the SAML 2.0 case),

  • LASSO_PROFILE_ERROR_MISSING_ARTIFACT if no artifact field was found in the query string (only possible for the LASSO_HTTP_METHOD_REDIRECT case),

  • LASSO_PROFILE_ERROR_INVALID_ARTIFACT if decoding of the artifact failed -- whether because the base64 encoding is invalid or because the type code is wrong --,

  • LASSO_PROFILE_ERROR_MISSING_REMOTE_PROVIDERID if no provider ID could be found corresponding to the hash contained in the artifact.


lasso_login_must_ask_for_consent ()

gboolean
lasso_login_must_ask_for_consent (LassoLogin *login);

Evaluates if consent must be asked to the Principal to federate him.

Parameters

login

a LassoLogin

 

Returns

TRUE if consent must be asked


lasso_login_must_authenticate ()

gboolean
lasso_login_must_authenticate (LassoLogin *login);

Evaluates if user must be authenticated.

Parameters

login

a LassoLogin

 

Returns

TRUE if user must be authenticated


lasso_login_process_authn_request_msg ()

lasso_error_t
lasso_login_process_authn_request_msg (LassoLogin *login,
                                       const char *authn_request_msg);

Processes received authentication request, checks it is signed correctly, checks if requested protocol profile is supported, etc.

Parameters

login

a LassoLogin

 

authn_request_msg

the authentication request received

 

Returns

0 on success; or


lasso_login_process_authn_response_msg ()

lasso_error_t
lasso_login_process_authn_response_msg
                               (LassoLogin *login,
                                gchar *authn_response_msg);

Processes received authentication response.

Parameters

login

a LassoLogin

 

authn_response_msg

the authentication response received

 

Returns

0 on success; or


lasso_login_process_paos_response_msg ()

lasso_error_t
lasso_login_process_paos_response_msg (LassoLogin *login,
                                       gchar *msg);

lasso_login_process_request_msg ()

lasso_error_t
lasso_login_process_request_msg (LassoLogin *login,
                                 gchar *request_msg);

Processes received artifact request.

Parameters

login

a LassoLogin

 

request_msg

the artifact request received

 

Returns

0 on success; or a negative value otherwise.


lasso_login_process_response_msg ()

lasso_error_t
lasso_login_process_response_msg (LassoLogin *login,
                                  gchar *response_msg);

Processes received assertion response.

Parameters

login

a LassoLogin

 

response_msg

the assertion response received

 

Returns

0 on success; or


lasso_login_validate_request_msg ()

lasso_error_t
lasso_login_validate_request_msg (LassoLogin *login,
                                  gboolean authentication_result,
                                  gboolean is_consent_obtained);

Initializes a response to the authentication request received.

Parameters

login

a LassoLogin

 

authentication_result

whether user has authenticated succesfully

 

is_consent_obtained

whether user consent has been obtained

 

Returns

0 on success; or

Types and Values

struct LassoLogin

struct LassoLogin {
	LassoLoginProtocolProfile protocolProfile;
	gchar *assertionArtifact;
};

Single sign-on profile for the current transaction; possibly an assertionArtifact to be used by the service provider in its "assertionConsumerServiceURL" and the assertion created or received for the principal.

Members

LassoLoginProtocolProfile protocolProfile;

the kind of binding used for this authentication request.

 

gchar *assertionArtifact;

a string representing the artifact received through an artifact resolution. request

 
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSamlp2Terminate.html0000644000000000000000000000013214404126163023575 xustar0030 mtime=1678814323.029964812 30 atime=1678814323.029964812 30 ctime=1678814323.029964812 lasso-2.8.2/docs/reference/lasso/html/LassoSamlp2Terminate.html0000644000175000017500000001242314404126163027047 0ustar00bdauvergnebdauvergne00000000000000 LassoSamlp2Terminate: lasso Reference Manual

LassoSamlp2Terminate

LassoSamlp2Terminate — <samlp2:Terminate>

Functions

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlp2Terminate

Description

Figure 93. Schema fragment for samlp2:Terminate


<complexType name="TerminateType"/>

Functions

lasso_samlp2_terminate_new ()

LassoNode *
lasso_samlp2_terminate_new (void);

Creates a new LassoSamlp2Terminate object.

Returns

a newly created LassoSamlp2Terminate object

Types and Values

struct LassoSamlp2Terminate

struct LassoSamlp2Terminate;
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSamlp2AuthnRequest.html0000644000000000000000000000013214404126163024275 xustar0030 mtime=1678814323.025964789 30 atime=1678814323.025964789 30 ctime=1678814323.025964789 lasso-2.8.2/docs/reference/lasso/html/LassoSamlp2AuthnRequest.html0000644000175000017500000001617014404126163027552 0ustar00bdauvergnebdauvergne00000000000000 LassoSamlp2AuthnRequest: lasso Reference Manual

LassoSamlp2AuthnRequest

LassoSamlp2AuthnRequest — <samlp2:AuthnRequest>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlp2RequestAbstract
            ╰── LassoSamlp2AuthnRequest

Description

Figure 72. Schema fragment for samlp2:AuthnRequest


<complexType name="AuthnRequestType">
  <complexContent>
    <extension base="samlp:RequestAbstractType">
      <sequence>
        <element ref="saml:Subject" minOccurs="0"/>
        <element ref="samlp:NameIDPolicy" minOccurs="0"/>
        <element ref="saml:Conditions" minOccurs="0"/>
        <element ref="samlp:RequestedAuthnContext" minOccurs="0"/>
        <element ref="samlp:Scoping" minOccurs="0"/>
      </sequence>
      <attribute name="ForceAuthn" type="boolean" use="optional"/>
      <attribute name="IsPassive" type="boolean" use="optional"/>
      <attribute name="ProtocolBinding" type="anyURI" use="optional"/>
      <attribute name="AssertionConsumerServiceIndex" type="unsignedShort" use="optional"/>
      <attribute name="AssertionConsumerServiceURL" type="anyURI" use="optional"/>
      <attribute name="AttributeConsumingServiceIndex" type="unsignedShort" use="optional"/>
      <attribute name="ProviderName" type="string" use="optional"/>
    </extension>
  </complexContent>
</complexType>

Functions

lasso_samlp2_authn_request_new ()

LassoNode *
lasso_samlp2_authn_request_new (void);

Creates a new LassoSamlp2AuthnRequest object.

Returns

a newly created LassoSamlp2AuthnRequest object

Types and Values

struct LassoSamlp2AuthnRequest

struct LassoSamlp2AuthnRequest {
	/* elements */
	LassoSaml2Subject *Subject;
	LassoSamlp2NameIDPolicy *NameIDPolicy;
	LassoSaml2Conditions *Conditions;
	LassoSamlp2RequestedAuthnContext *RequestedAuthnContext;
	LassoSamlp2Scoping *Scoping;
	/* attributes */
	gboolean ForceAuthn;
	gboolean IsPassive;
	char *ProtocolBinding;
	int AssertionConsumerServiceIndex;
	char *AssertionConsumerServiceURL;
	int AttributeConsumingServiceIndex;
	char *ProviderName;

	/* This field is deprecated do not use it,
	 * kept for ABI compatibility */
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSamlp2Status.html0000644000000000000000000000013214404126163023130 xustar0030 mtime=1678814323.029964812 30 atime=1678814323.029964812 30 ctime=1678814323.029964812 lasso-2.8.2/docs/reference/lasso/html/LassoSamlp2Status.html0000644000175000017500000001301214404126163026375 0ustar00bdauvergnebdauvergne00000000000000 LassoSamlp2Status: lasso Reference Manual

LassoSamlp2Status

LassoSamlp2Status — <samlp2:Status>

Functions

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlp2Status

Description

Figure 91. Schema fragment for samlp2:Status


<complexType name="StatusType">
  <sequence>
    <element ref="samlp:StatusCode"/>
    <element ref="samlp:StatusMessage" minOccurs="0"/>
    <element ref="samlp:StatusDetail" minOccurs="0"/>
  </sequence>
</complexType>

Functions

lasso_samlp2_status_new ()

LassoNode *
lasso_samlp2_status_new (void);

Creates a new LassoSamlp2Status object.

Returns

a newly created LassoSamlp2Status object

Types and Values

struct LassoSamlp2Status

struct LassoSamlp2Status {
	/* elements */
	LassoSamlp2StatusCode *StatusCode;
	char *StatusMessage;
	LassoSamlp2StatusDetail *StatusDetail;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSoapHeader.html0000644000000000000000000000013214404126163022601 xustar0030 mtime=1678814323.033964834 30 atime=1678814323.033964834 30 ctime=1678814323.033964834 lasso-2.8.2/docs/reference/lasso/html/LassoSoapHeader.html0000644000175000017500000001237714404126163026063 0ustar00bdauvergnebdauvergne00000000000000 LassoSoapHeader: lasso Reference Manual

LassoSoapHeader

LassoSoapHeader — <soap:Header>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSoapHeader

Description

Functions

lasso_soap_header_new ()

LassoSoapHeader *
lasso_soap_header_new (void);

lasso_soap_header_new_from_message ()

LassoSoapHeader *
lasso_soap_header_new_from_message (const gchar *message);

Types and Values

struct LassoSoapHeader

struct LassoSoapHeader;
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/lasso-Utility-functions-for-SAML-2.0.html0000644000000000000000000000013214404126163026167 xustar0030 mtime=1678814323.045964902 30 atime=1678814323.045964902 30 ctime=1678814323.045964902 lasso-2.8.2/docs/reference/lasso/html/lasso-Utility-functions-for-SAML-2.0.html0000644000175000017500000001712614404126163031446 0ustar00bdauvergnebdauvergne00000000000000 Utility functions for SAML 2.0: lasso Reference Manual

Utility functions for SAML 2.0

Utility functions for SAML 2.0 — Misc functions used inside Lasso

Stability Level

Internal, unless otherwise indicated

Description

Functions

lasso_build_unique_id ()

char *
lasso_build_unique_id (unsigned int size);

Builds an ID which has an unicity probability of 2^(-size*4).

Parameters

size

the ID's length (between 32 and 40)

 

Returns

a "unique" ID (begin always with _ character).

[transfer full]


lasso_profile_is_saml_query ()

gboolean
lasso_profile_is_saml_query (const gchar *query);

lasso_provider_saml2_node_encrypt ()

LassoSaml2EncryptedElement *
lasso_provider_saml2_node_encrypt (const LassoProvider *provider,
                                   LassoNode *lasso_node);

Dump the node object to an XML fragment, then encrypt this fragment using encryption key of provider , then encapsulate the resulting encrypted content into a LassoSaml2EncryptedElement.

Parameters

provider

a LassoProvider object

 

lasso_node

a LassoNode object

 

Returns

a newly created LassoSaml2EncryptedElement if successfull, NULL otherwise.

lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSaml2Assertion.html0000644000000000000000000000013214404126163023434 xustar0030 mtime=1678814323.013964721 30 atime=1678814323.013964721 30 ctime=1678814323.013964721 lasso-2.8.2/docs/reference/lasso/html/LassoSaml2Assertion.html0000644000175000017500000016206414404126163026715 0ustar00bdauvergnebdauvergne00000000000000 LassoSaml2Assertion: lasso Reference Manual

LassoSaml2Assertion

LassoSaml2Assertion — <saml2:Assertion>

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSaml2Assertion

Description

Figure 46. Schema fragment for saml2:Assertion


<complexType name="AssertionType">
  <sequence>
    <element ref="saml:Issuer"/>
    <element ref="ds:Signature" minOccurs="0"/>
    <element ref="saml:Subject" minOccurs="0"/>
    <element ref="saml:Conditions" minOccurs="0"/>
    <element ref="saml:Advice" minOccurs="0"/>
    <choice minOccurs="0" maxOccurs="unbounded">
      <element ref="saml:Statement"/>
      <element ref="saml:AuthnStatement"/>
      <element ref="saml:AuthzDecisionStatement"/>
      <element ref="saml:AttributeStatement"/>
    </choice>
  </sequence>
  <attribute name="Version" type="string" use="required"/>
  <attribute name="ID" type="ID" use="required"/>
  <attribute name="IssueInstant" type="dateTime" use="required"/>
</complexType>

Functions

lasso_saml2_assertion_new ()

LassoNode *
lasso_saml2_assertion_new (void);

Creates a new LassoSaml2Assertion object.

Returns

a newly created LassoSaml2Assertion object


lasso_saml2_assertion_has_audience_restriction ()

gboolean
lasso_saml2_assertion_has_audience_restriction
                               (LassoSaml2Assertion *saml2_assertion);

Verify that a LassoSaml2AudienceRestriction is present in the assertion.

Parameters

saml2_assertion

a LassoSaml2Assertion object

 

Returns

TRUE if a LassoSaml2AudienceRestriction is present in the Conditions of the LassoSaml2Assertion.


lasso_saml2_assertion_is_audience_restricted ()

gboolean
lasso_saml2_assertion_is_audience_restricted
                               (LassoSaml2Assertion *saml2_assertion,
                                char *providerID);

Verify that the assertion is restricted to the given providerID.

Parameters

saml2_assertion

a LassoSaml2Assertion object

 

providerID

the providerID that will be compared to the audience restriction declarations.

 

Returns

TRUE if providerID is part of a LassoSaml2AudienceRestriction element in the assertion, FALSE otherwise.


lasso_saml2_assertion_set_subject_name_id ()

void
lasso_saml2_assertion_set_subject_name_id
                               (LassoSaml2Assertion *saml2_assertion,
                                LassoNode *node);

Set the subject NameID, which can be a simple LassoSaml2NameID object or an encrypted LassoSaml2NameID as a LassoSaml2EncryptedElement.

Parameters

saml2_assertion

a LassoSaml2Assertion object

 

node

a LassoSaml2NameID or LassoSaml2EncryptedElement

 

lasso_saml2_assertion_set_subject_confirmation_name_id ()

void
lasso_saml2_assertion_set_subject_confirmation_name_id
                               (LassoSaml2Assertion *saml2_assertion,
                                LassoNode *node);

Set the subject NameID, which can be a simple LassoSaml2NameID object or an encrypted LassoSaml2NameID as a LassoSaml2EncryptedElement.

Parameters

saml2_assertion

a LassoSaml2Assertion object

 

node

a LassoSaml2NameID or LassoSaml2EncryptedElement

 

lasso_saml2_assertion_get_subject_confirmation_data ()

LassoSaml2SubjectConfirmationData *
lasso_saml2_assertion_get_subject_confirmation_data
                               (LassoSaml2Assertion *saml2_assertion,
                                gboolean create);

lasso_saml2_assertion_set_subject_confirmation_data ()

void
lasso_saml2_assertion_set_subject_confirmation_data
                               (LassoSaml2Assertion *saml2_assertion,
                                time_t tolerance,
                                time_t length,
                                const char *Recipient,
                                const char *InResponseTo,
                                const char *Address);

lasso_saml2_assertion_set_basic_conditions ()

void
lasso_saml2_assertion_set_basic_conditions
                               (LassoSaml2Assertion *saml2_assertion,
                                time_t tolerance,
                                time_t length,
                                gboolean one_time_use);

Set conditions limiting usage of the assertion.

tolerance and length are time quantity measured in seconds, it defines the time range in which the assertion is valid, it is computed as [now()-tolerance, now()+length+tolerance]. one_time_use allows the issuer to limit caching of the assertion. proxy_count specify how many proxy hop can be traversed before this assertion should lose any trust.

Parameters

tolerance

tolerance to the range of time when the assertion is valid.

[default -1]

length

length of the range of time when the assertion is valid.

[default -1]

one_time_use

can the assertion be kept or should it be used immediately.

[default FALSE]

lasso_saml2_assertion_add_audience_restriction ()

void
lasso_saml2_assertion_add_audience_restriction
                               (LassoSaml2Assertion *saml2_assertion,
                                const char *providerID);

Add an audience restriction to a LassoSaml2Assertion.

Parameters

saml2_assertion

a LassoSaml2Assertion object

 

providerId

the provider id to restrict audience to

 

lasso_saml2_assertion_add_proxy_limit ()

void
lasso_saml2_assertion_add_proxy_limit (LassoSaml2Assertion *saml2_assertion,
                                       int proxy_count,
                                       GList *proxy_audiences);

A LassoSaml2ProxyRestriction to the conditions of consumption of saml2_assertion .

Parameters

saml2_assertion

a LassoSaml2Assertion object

 

proxy_count

the number of hops in the proxy chain, a negative value means no limitation.

[default -1]

proxy_audiences

a list of audience restriction for newly issued assertion based on the saml2_assertion assertion. An empty list means no audience restriction.

[allow-none][element-type string]

lasso_saml2_assertion_validate_conditions ()

LassoSaml2AssertionValidationState
lasso_saml2_assertion_validate_conditions
                               (LassoSaml2Assertion *saml2_assertion,
                                const char *relaying_party_providerID);

Check the validation of the assertion with respect to the conditions of consumption that it contains. System functions are used for getting current time and checking eventual time constraints.

Parameters

saml2_assertion

a LassoSaml2Assertion object

 

relaying_party_providerID

the providerID of the current relaying party, use to check for audience restrictions.

[allow-none]

Returns

LASSO_SAML2_ASSERTION_VALID if the assertion is valid, LASSO_SAML2_ASSERTION_INVALID is some check failed, LASSO_SAML2_ASSERTION_INDETERMINATE if somehting was impossible to eveluate.


lasso_saml2_assertion_validate_time_checks ()

LassoSaml2AssertionValidationState
lasso_saml2_assertion_validate_time_checks
                               (LassoSaml2Assertion *saml2_assertion,
                                unsigned int tolerance,
                                time_t now);

Check if the saml2_assertion conditions about NotBefore and NotOnOrAfter are valid with respect to the now time or the current time. tolerance allows to loosely check for validatity, i.e. start time is decreased of tolerance seconds and end time is increased of tolerance seconds.

Parameters

saml2_assertion

a LassoSaml2Assertion object

 

tolerance

a duration as seconds

 

now

the current time as seconds since EPOCH or 0 to use the system time.

[default 0]

Returns

a value among LassoSaml2AssertionValidationState.


lasso_saml2_assertion_validate_audience ()

LassoSaml2AssertionValidationState
lasso_saml2_assertion_validate_audience
                               (LassoSaml2Assertion *saml2_assertion,
                                const gchar *audience);

Check if the saml2_assertion is directed to a given audience .

Parameters

saml2_assertion

a LassoSaml2Assertion object

 

audience

the name of an entity

 

Returns

a value among LassoSaml2AssertionValidationState enumeration.


lasso_saml2_assertion_allows_proxying ()

LassoSaml2AssertionValidationState
lasso_saml2_assertion_allows_proxying (LassoSaml2Assertion *saml2_assertion);

Test whether this saml2_assertion allows to mint new assertion on the basis of it.

It verifies that the proxying count is positive (or absent).

Parameters

saml2_assertion

a LassoSaml2Assertion object

 

Returns

a value among LassoSaml2AssertionValidationState enumeration. LASSO_SAML2_ASSERTION_INDETERMINATE usually means that an element was not conform to the XML Schema for SAML 2.0.


lasso_saml2_assertion_allows_proxying_to ()

LassoSaml2AssertionValidationState
lasso_saml2_assertion_allows_proxying_to
                               (LassoSaml2Assertion *saml2_assertion,
                                const char *audience);

Test whether this saml2_assertion allows to mint new assertion on the basis of it targetted for audience.

It verifies that if audience is non-NULL it is part of the proxy Audience restriction. If audience is NULL, it checks that no proxying Audience restriction is present.

Parameters

saml2_assertion

a LassoSaml2Assertion object

 

audience

the relaying party which we want to proxy to.

[allow-none]

Returns

a value among LassoSaml2AssertionValidationState enumeration. LASSO_SAML2_ASSERTION_INDETERMINATE usually means that an element was not conform to the XML Schema for SAML 2.0.


lasso_saml2_assertion_get_issuer_provider ()

LassoProvider *
lasso_saml2_assertion_get_issuer_provider
                               (const LassoSaml2Assertion *saml2_assertion,
                                const LassoServer *server);

Return the LassoProvider object for the provider who created this assertion.

Parameters

saml2_assertion

a LassoSaml2 assertion

 

server

a LassoServer object

 

Returns

a LassoProvider object, or NULL if the Issuer element is missing, or the given provider unknown to the LassoServer object.


lasso_saml2_assertion_add_attribute_with_node ()

lasso_error_t
lasso_saml2_assertion_add_attribute_with_node
                               (LassoSaml2Assertion *assertion,
                                const char *name,
                                const char *nameformat,
                                LassoNode *content);

Add a new attribute declaration and set this node as the content.

Parameters

assertion

a LassoSaml2Assertion object

 

name

the attribute name

 

name_format

the attribute name format (the namespace of the name)

 

content

a LassoNode object to put as content of the attribute

 

Returns

0 if successful, an error code otherwise.


lasso_saml2_assertion_get_in_response_to ()

const char *
lasso_saml2_assertion_get_in_response_to
                               (LassoSaml2Assertion *assertion);

Return the ID of the request this assertion respond to.

Parameters

assertion

a LassoSaml2Assertion object

 

Returns

the InResponseTo attribute content of the SubjectConfirmationData if found


lasso_saml2_assertion_decrypt_subject ()

lasso_error_t
lasso_saml2_assertion_decrypt_subject (LassoSaml2Assertion *assertion,
                                       LassoServer *server);

Decipher (if needed) the EncryptedID of the Subject.

Parameters

assertion

a LassoSaml2Assertion object

 

server

a LassoServer object

 

Returns

0 if successful, an error code otherwise. See lasso_saml2_encrypted_element_server_decrypt().


lasso_saml2_assertion_has_one_time_use ()

gboolean
lasso_saml2_assertion_has_one_time_use
                               (LassoSaml2Assertion *saml2_assertion);

Return whether this assertion has the OneTimeUse property.

In this case the relaying party must add the assertion ID to a OneTimeUser cache and discards any assertion received in the future with the same ID.

Parameters

saml2_assertion

a LassoSaml2Assertion object

 

Returns

TRUE if this assertion has the property OneTimeUse, FALSE otherwise.


lasso_saml2_assertion_set_one_time_use ()

void
lasso_saml2_assertion_set_one_time_use
                               (LassoSaml2Assertion *saml2_assertion,
                                gboolean one_time_use);

Set the one time use condition on this assertion.

Parameters

saml2_assertion

a LassoSaml2Assertion object

 

one_time_use

is this assertion to be used one time only ?

 

Types and Values

struct LassoSaml2Assertion

struct LassoSaml2Assertion {
	/* elements */
	LassoSaml2NameID *Issuer;
	LassoSaml2Subject *Subject;
	LassoSaml2Conditions *Conditions;
	LassoSaml2Advice *Advice;
	GList *Statement; /* of LassoSaml2StatementAbstract */
	GList *AuthnStatement; /* of LassoSaml2AuthnStatement */
	GList *AuthzDecisionStatement; /* of LassoSaml2AuthzDecisionStatement */
	GList *AttributeStatement; /* of LassoSaml2AttributeStatement */
	/* attributes */
	char *Version;
	char *ID;
	char *IssueInstant;
};

enum LassoSaml2AssertionValidationState

Members

LASSO_SAML2_ASSERTION_VALID

   

LASSO_SAML2_ASSERTION_INVALID

   

LASSO_SAML2_ASSERTION_INDETERMINATE

   

LASSO_DURATION_DAY

#define LASSO_DURATION_DAY 24*LASSO_DURATION_HOUR

Number of seconds in a day.


LASSO_DURATION_HOUR

#define LASSO_DURATION_HOUR 3600

Number of seconds in a hour.


LASSO_DURATION_MINUTE

#define LASSO_DURATION_MINUTE 60

Number of seconds in a minute.


LASSO_DURATION_WEEK

#define LASSO_DURATION_WEEK 7*LASSO_DURATION_DAY

Number of seconds in a week.

lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/left-insensitive.png0000644000000000000000000000013214404126162022673 xustar0030 mtime=1678814322.933964265 30 atime=1678814322.933964265 30 ctime=1678814322.933964265 lasso-2.8.2/docs/reference/lasso/html/left-insensitive.png0000644000175000017500000000061314404126162026143 0ustar00bdauvergnebdauvergne00000000000000‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEå $$ñا IDAT8ËÍ’­NQ…¿éö†…@¡p üdsÛÀÖ`*š4Á@ò„W@ A!ÈÔ†@6Ü^ƒ 5hxèIH R`sQpäÌ™339þBÊó|Ês¤ªKEQTÛíöK°@·ÛÎià¦^¯Ï~îWʆ½÷‹ÀÕûðå`0˜åTJ6·Tõ˜‘cYn6›AÞû Æ€½~¿ß±Ö>}Ç­Žœs;ªº ¨ˆlYkwËÞürˆ¼†ºó£ Þû5U= °/"›ÖÚç  ¬µ‡"ÒuU=ɲlü×ArÎÕDä˜zÃáp5I’ûà4^E+ÀP3Æœçàq_«êp Ì¥iñ¯ðUY¥‚p=#IEND®B`‚lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSaml2SubjectLocality.html0000644000000000000000000000013214404126163024565 xustar0030 mtime=1678814323.017964743 30 atime=1678814323.017964743 30 ctime=1678814323.017964743 lasso-2.8.2/docs/reference/lasso/html/LassoSaml2SubjectLocality.html0000644000175000017500000001323214404126163030036 0ustar00bdauvergnebdauvergne00000000000000 LassoSaml2SubjectLocality: lasso Reference Manual

LassoSaml2SubjectLocality

LassoSaml2SubjectLocality — <saml2:SubjectLocality>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSaml2SubjectLocality

Description

Figure 66. Schema fragment for saml2:SubjectLocality


<complexType name="SubjectLocalityType">
  <attribute name="Address" type="string" use="optional"/>
  <attribute name="DNSName" type="string" use="optional"/>
</complexType>

Functions

lasso_saml2_subject_locality_new ()

LassoNode *
lasso_saml2_subject_locality_new (void);

Creates a new LassoSaml2SubjectLocality object.

Returns

a newly created LassoSaml2SubjectLocality object

Types and Values

struct LassoSaml2SubjectLocality

struct LassoSaml2SubjectLocality {
	/* attributes */
	char *Address;
	char *DNSName;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSamlp2StatusResponse.html0000644000000000000000000000013214404126163024647 xustar0030 mtime=1678814323.029964812 30 atime=1678814323.029964812 30 ctime=1678814323.029964812 lasso-2.8.2/docs/reference/lasso/html/LassoSamlp2StatusResponse.html0000644000175000017500000001624214404126163030124 0ustar00bdauvergnebdauvergne00000000000000 LassoSamlp2StatusResponse: lasso Reference Manual

LassoSamlp2StatusResponse

LassoSamlp2StatusResponse — <samlp2:StatusResponse>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlp2StatusResponse
            ├── LassoSamlp2ArtifactResponse
            ├── LassoSamlp2LogoutResponse
            ├── LassoSamlp2ManageNameIDResponse
            ├── LassoSamlp2NameIDMappingResponse
            ╰── LassoSamlp2Response

Description

Figure 90. Schema fragment for samlp2:StatusResponse


<complexType name="StatusResponseType">
  <sequence>
    <element ref="saml:Issuer" minOccurs="0"/>
    <element ref="ds:Signature" minOccurs="0"/>
    <element ref="samlp:Extensions" minOccurs="0"/>
    <element ref="samlp:Status"/>
  </sequence>
  <attribute name="ID" type="ID" use="required"/>
  <attribute name="InResponseTo" type="NCName" use="optional"/>
  <attribute name="Version" type="string" use="required"/>
  <attribute name="IssueInstant" type="dateTime" use="required"/>
  <attribute name="Destination" type="anyURI" use="optional"/>
  <attribute name="Consent" type="anyURI" use="optional"/>
</complexType>

Functions

lasso_samlp2_status_response_new ()

LassoNode *
lasso_samlp2_status_response_new (void);

Creates a new LassoSamlp2StatusResponse object.

Returns

a newly created LassoSamlp2StatusResponse object

Types and Values

struct LassoSamlp2StatusResponse

struct LassoSamlp2StatusResponse {
	/* elements */
	LassoSaml2NameID *Issuer;
	LassoSamlp2Extensions *Extensions;
	LassoSamlp2Status *Status;
	/* attributes */
	char *ID;
	char *InResponseTo;
	char *Version;
	char *IssueInstant;
	char *Destination;
	char *Consent;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSamlp2StatusDetail.html0000644000000000000000000000013214404126163024253 xustar0030 mtime=1678814323.029964812 30 atime=1678814323.029964812 30 ctime=1678814323.029964812 lasso-2.8.2/docs/reference/lasso/html/LassoSamlp2StatusDetail.html0000644000175000017500000001303014404126163027520 0ustar00bdauvergnebdauvergne00000000000000 LassoSamlp2StatusDetail: lasso Reference Manual

LassoSamlp2StatusDetail

LassoSamlp2StatusDetail — <samlp2:StatusDetail>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlp2StatusDetail

Description

Figure 89. Schema fragment for samlp2:StatusDetail


<complexType name="StatusDetailType">
  <sequence>
    <any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
  </sequence>
</complexType>

Functions

lasso_samlp2_status_detail_new ()

LassoNode *
lasso_samlp2_status_detail_new (void);

Creates a new LassoSamlp2StatusDetail object.

Returns

a newly created LassoSamlp2StatusDetail object

Types and Values

struct LassoSamlp2StatusDetail

struct LassoSamlp2StatusDetail;
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoLibNameIdentifierMappingResponse.html0000644000000000000000000000013214404126163027133 xustar0030 mtime=1678814323.005964675 30 atime=1678814323.005964675 30 ctime=1678814323.005964675 lasso-2.8.2/docs/reference/lasso/html/LassoLibNameIdentifierMappingResponse.html0000644000175000017500000002560714404126163032415 0ustar00bdauvergnebdauvergne00000000000000 LassoLibNameIdentifierMappingResponse: lasso Reference Manual

LassoLibNameIdentifierMappingResponse

LassoLibNameIdentifierMappingResponse — <lib:NameIdentifierMappingResponse>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlpResponseAbstract
            ╰── LassoLibNameIdentifierMappingResponse

Description

Figure 14. Schema fragment for lib:NameIdentifierMappingResponse

<xs:element name="NameIdentifierMappingResponse" type="NameIdentifierMappingResponseType"/>
<xs:complexType name="NameIdentifierMappingResponseType">
  <xs:complexContent>
    <xs:extension base="samlp:ResponseAbstractType">
      <xs:sequence>
        <xs:element ref="Extension" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="ProviderID"/>
        <xs:element ref="samlp:Status"/>
        <xs:element ref="saml:NameIdentifier" minOccurs="0"/>
      </xs:sequence>
    </xs:extension>
  </xs:complexContent>
</xs:complexType>

Functions

lasso_lib_name_identifier_mapping_response_new ()

LassoNode *
lasso_lib_name_identifier_mapping_response_new
                               (void);

Creates a new LassoLibNameIdentifierMappingResponse object.

Returns

a newly created LassoLibNameIdentifierMappingResponse object


lasso_lib_name_identifier_mapping_response_new_full ()

LassoNode *
lasso_lib_name_identifier_mapping_response_new_full
                               (char *provideRID,
                                const char *statusCodeValue,
                                LassoLibNameIdentifierMappingRequest *request,
                                LassoSignatureType sign_type,
                                LassoSignatureMethod sign_method);

Creates a new LassoLibNameIdentifierMappingResponse object and initializes it with the parameters.

Parameters

providerID

the providerID of the responder

 

statusCodeValue

a response status code

 

request

the request which is asnwered by this response

 

sign_type

a LassoSignatureType value

 

sign_method

a LassoSignatureMethod value

 

Returns

a newly created LassoLibNameIdentifierMappingResponse object

Types and Values

struct LassoLibNameIdentifierMappingResponse

struct LassoLibNameIdentifierMappingResponse {
	/* <xs:element ref="Extension" minOccurs="0" maxOccurs="unbounded"/> */
	GList *Extension; /* of xmlNode* */
	/* <xs:element ref="ProviderID"/> */
	char *ProviderID;
	/* <xs:element ref="samlp:Status"/> */
	LassoSamlpStatus *Status;
	/* <xs:element ref="saml:NameIdentifier" minOccurs="0"/> */
	LassoSamlNameIdentifier *NameIdentifier;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSoapBody.html0000644000000000000000000000013214404126163022306 xustar0030 mtime=1678814323.033964834 30 atime=1678814323.033964834 30 ctime=1678814323.033964834 lasso-2.8.2/docs/reference/lasso/html/LassoSoapBody.html0000644000175000017500000001360314404126163025561 0ustar00bdauvergnebdauvergne00000000000000 LassoSoapBody: lasso Reference Manual

LassoSoapBody

LassoSoapBody — <soap:Body>

Types and Values

struct LassoSoapBody

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSoapBody

Description

Figure 97. Schema fragment for soap:Body


<xs:element name="Body" type="tns:Body"/>
  <xs:complexType name="Body">
  <xs:sequence>
    <xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
  </xs:sequence>
  <xs:anyAttribute namespace="##any" processContents="lax">
<xs:annotation>
<xs:documentation>
    Prose in the spec does not specify that attributes are allowed on the Body element
</xs:documentation>
     </xs:annotation>
  </xs:anyAttribute>
</xs:complexType>

Functions

lasso_soap_body_new ()

LassoSoapBody *
lasso_soap_body_new (void);

lasso_soap_body_new_from_message ()

LassoSoapBody *
lasso_soap_body_new_from_message (const gchar *message);

Types and Values

struct LassoSoapBody

struct LassoSoapBody;
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSamlAuthenticationStatement.html0000644000000000000000000000013214404126163026247 xustar0030 mtime=1678814323.021964766 30 atime=1678814323.021964766 30 ctime=1678814323.021964766 lasso-2.8.2/docs/reference/lasso/html/LassoSamlAuthenticationStatement.html0000644000175000017500000001663114404126163031526 0ustar00bdauvergnebdauvergne00000000000000 LassoSamlAuthenticationStatement: lasso Reference Manual

LassoSamlAuthenticationStatement

LassoSamlAuthenticationStatement — <saml:AuthenticationStatement>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlStatementAbstract
            ╰── LassoSamlSubjectStatementAbstract
                ╰── LassoSamlAuthenticationStatement
                    ╰── LassoLibAuthenticationStatement

Description

Figure 28. Schema fragment for saml:AuthenticationStatement


<element name="AuthenticationStatement" type="saml:AuthenticationStatementType"/>
<complexType name="AuthenticationStatementType">
  <complexContent>
    <extension base="saml:SubjectStatementAbstractType">
      <sequence>
        <element ref="saml:SubjectLocality" minOccurs="0"/>
        <element ref="saml:AuthorityBinding" minOccurs="0" maxOccurs="unbounded"/>
      </sequence>
      <attribute name="AuthenticationMethod" type="anyURI" use="required"/>
      <attribute name="AuthenticationInstant" type="dateTime" use="required"/>
    </extension>
  </complexContent>
</complexType>

Functions

lasso_saml_authentication_statement_new ()

LassoNode *
lasso_saml_authentication_statement_new
                               (void);

Creates a new LassoSamlAuthenticationStatement object.

Returns

a newly created LassoSamlAuthenticationStatement object

Types and Values

struct LassoSamlAuthenticationStatement

struct LassoSamlAuthenticationStatement {
	/* <element ref="saml:SubjectLocality" minOccurs="0"/> */
	LassoSamlSubjectLocality *SubjectLocality;
	/* <element ref="saml:AuthorityBinding" minOccurs="0" maxOccurs="unbounded"/> */
	GList *AuthorityBinding; /* of LassoNode */
	/* <attribute name="AuthenticationMethod" type="anyURI" use="required"/> */
	char *AuthenticationMethod;
	/* <attribute name="AuthenticationInstant" type="dateTime" use="required"/> */
	char *AuthenticationInstant;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSaml2AudienceRestriction.html0000644000000000000000000000013214404126163025430 xustar0030 mtime=1678814323.013964721 30 atime=1678814323.013964721 30 ctime=1678814323.013964721 lasso-2.8.2/docs/reference/lasso/html/LassoSaml2AudienceRestriction.html0000644000175000017500000001406214404126163030703 0ustar00bdauvergnebdauvergne00000000000000 LassoSaml2AudienceRestriction: lasso Reference Manual

LassoSaml2AudienceRestriction

LassoSaml2AudienceRestriction — <saml2:AudienceRestriction>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSaml2ConditionAbstract
            ╰── LassoSaml2AudienceRestriction

Description

Figure 50. Schema fragment for saml2:AudienceRestriction


<complexType name="AudienceRestrictionType">
  <complexContent>
    <extension base="saml:ConditionAbstractType">
      <sequence>
        <element ref="saml:Audience" maxOccurs="unbounded"/>
      </sequence>
    </extension>
  </complexContent>
</complexType>

Functions

lasso_saml2_audience_restriction_new ()

LassoNode *
lasso_saml2_audience_restriction_new (void);

Creates a new LassoSaml2AudienceRestriction object.

Returns

a newly created LassoSaml2AudienceRestriction object

Types and Values

struct LassoSaml2AudienceRestriction

struct LassoSaml2AudienceRestriction {
	/* elements */
	char *Audience;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/lasso-Base-Strings.html0000644000000000000000000000012714404126163023210 xustar0029 mtime=1678814323.04196488 29 atime=1678814323.04196488 29 ctime=1678814323.04196488 lasso-2.8.2/docs/reference/lasso/html/lasso-Base-Strings.html0000644000175000017500000001011314404126163026450 0ustar00bdauvergnebdauvergne00000000000000 Base Strings: lasso Reference Manual

Base Strings

Base Strings — General strings constants for Lasso

Types and Values

Includes

#include <lasso/xml/strings.h>

Description

Functions

Types and Values

LASSO_PYTHON_HREF

#define LASSO_PYTHON_HREF "http://www.entrouvert.org/namespaces/python/0.0"

LASSO_LASSO_PREFIX

#define LASSO_LASSO_PREFIX "lasso"

Preferred prefix for the lasso internal serialization format namespace.


LASSO_LASSO_HREF

#define LASSO_LASSO_HREF   "http://www.entrouvert.org/namespaces/lasso/0.0"

Namespace for Lasso internal serialization format

lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSamlp2AssertionIDRequest.html0000644000000000000000000000013214404126163025402 xustar0030 mtime=1678814323.025964789 30 atime=1678814323.025964789 30 ctime=1678814323.025964789 lasso-2.8.2/docs/reference/lasso/html/LassoSamlp2AssertionIDRequest.html0000644000175000017500000001301114404126163030646 0ustar00bdauvergnebdauvergne00000000000000 LassoSamlp2AssertionIDRequest: lasso Reference Manual

LassoSamlp2AssertionIDRequest

LassoSamlp2AssertionIDRequest

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlp2RequestAbstract
            ╰── LassoSamlp2AssertionIDRequest

Description

Functions

lasso_samlp2_assertion_id_request_new ()

LassoNode *
lasso_samlp2_assertion_id_request_new (void);

Creates a new LassoSamlp2AssertionIDRequest object.

Returns

a newly created LassoSamlp2AssertionIDRequest object

Types and Values

struct LassoSamlp2AssertionIDRequest

struct LassoSamlp2AssertionIDRequest {
	/* elements */
	char *AssertionIDRef;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSession.html0000644000000000000000000000013214404126163022211 xustar0030 mtime=1678814323.033964834 30 atime=1678814323.033964834 30 ctime=1678814323.033964834 lasso-2.8.2/docs/reference/lasso/html/LassoSession.html0000644000175000017500000005435714404126163025477 0ustar00bdauvergnebdauvergne00000000000000 LassoSession: lasso Reference Manual

LassoSession

LassoSession — Principal Session

Types and Values

struct LassoSession

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSession

Description

Functions

lasso_session_new ()

LassoSession *
lasso_session_new (void);

Creates a new LassoSession.

Returns

a newly created LassoSession


lasso_session_new_from_dump ()

LassoSession *
lasso_session_new_from_dump (const gchar *dump);

Restores the dump to a new LassoSession.

Parameters

dump

XML server dump

 

Returns

a newly created LassoSession; or NULL if an error occured


lasso_session_dump ()

gchar *
lasso_session_dump (LassoSession *session);

Dumps session content to an XML string.

Parameters

session

a LassoSession

 

Returns

the dump string. It must be freed by the caller.

[transfer full]


lasso_session_destroy ()

void
lasso_session_destroy (LassoSession *session);

Destroys a session.

Parameters

session

a LassoSession

 

lasso_session_get_assertions ()

GList *
lasso_session_get_assertions (LassoSession *session,
                              const char *provider_id);

Gets the assertions for the given provider_id .

Parameters

session

a LassoSession

 

provider_id

the provider ID

 

Returns

a list of LassoSamlAssertion.

[allow-none][transfer container][element-type LassoNode]


lasso_session_get_assertion ()

LassoNode *
lasso_session_get_assertion (LassoSession *session,
                             const gchar *providerID);

Gets the assertion for the given providerID .

Parameters

session

a LassoSession

 

providerID

the provider ID

 

Returns

the assertion or NULL if it didn't exist. This LassoSamlAssertion is internally allocated and must not be freed by the caller.

[transfer none][allow-none]


lasso_session_remove_assertion ()

lasso_error_t
lasso_session_remove_assertion (LassoSession *session,
                                const gchar *providerID);

Removes assertion for providerID from session .

Parameters

session

a LassoSession

 

providerID

the provider ID

 

Returns

0 on success; or a negative value otherwise.


lasso_session_add_assertion ()

lasso_error_t
lasso_session_add_assertion (LassoSession *session,
                             const char *providerID,
                             LassoNode *assertion);

Adds assertion to the principal session. This function also add the assertion to the index by assertionID.

Parameters

session

a LassoSession

 

providerID

the provider ID

 

assertion

the assertion

 

Returns

0 on success; or a negative value otherwise.


lasso_session_get_provider_index ()

gchar *
lasso_session_get_provider_index (LassoSession *session,
                                  gint index);

Looks up and returns the nth provider id.

Parameters

session

a LassoSession

 

index

index of requested provider

 

Returns

the provider id; or NULL if there were no nth provider. This string must be freed by the caller.

[transfer full][allow-none]


lasso_session_is_empty ()

gboolean
lasso_session_is_empty (LassoSession *session);

Returns TRUE if session is empty.

Parameters

session

a LassoSession

 

Returns

TRUE if empty

Types and Values

struct LassoSession

struct LassoSession;

LassoSession stores the assertions received or emitted during the current session. It stores state for using profiles like LassoLogin or LassoLogout.

Members

lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSaml2EncryptedElement.html0000644000000000000000000000013214404126163024734 xustar0030 mtime=1678814323.017964743 30 atime=1678814323.017964743 30 ctime=1678814323.017964743 lasso-2.8.2/docs/reference/lasso/html/LassoSaml2EncryptedElement.html0000644000175000017500000003213714404126163030212 0ustar00bdauvergnebdauvergne00000000000000 LassoSaml2EncryptedElement: lasso Reference Manual

LassoSaml2EncryptedElement

LassoSaml2EncryptedElement — <saml2:EncryptedElement>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSaml2EncryptedElement

Description

This element can contain an encrypted XML document fragment, use lasso_saml2_encrypted_element_decrypt() to retrieve it.

Figure 57. Schema fragment for saml2:EncryptedElement


<complexType name="EncryptedElementType">
  <sequence>
    <element ref="xenc:EncryptedData"/>
    <element ref="xenc:EncryptedKey" minOccurs="0" maxOccurs="unbounded"/>
  </sequence>
</complexType>

Functions

lasso_saml2_encrypted_element_new ()

LassoNode *
lasso_saml2_encrypted_element_new (void);

Creates a new LassoSaml2EncryptedElement object.

Returns

a newly created LassoSaml2EncryptedElement object


lasso_saml2_encrypted_element_decrypt ()

lasso_error_t
lasso_saml2_encrypted_element_decrypt (LassoSaml2EncryptedElement *encrypted_element,
                                       xmlSecKey *encryption_private_key,
                                       LassoNode **decrypted_node);

Decrypt the content of a LassoSaml2EncryptedElement using the given xmlSecKey. The xmlNode resulting of decrypting it is converted into a LassoNode object.

Parameters

encrypted_element

the LassoSaml2EncryptedElement to decrypt

 

encryption_private_key

the xmlSecKey to decrypt the node

 

Returns

0 if successful, an error otherwise.


lasso_saml2_encrypted_element_build_encrypted_persistent_name_id ()

LassoSaml2EncryptedElement *
lasso_saml2_encrypted_element_build_encrypted_persistent_name_id
                               (const char *id,
                                const char *idpID,
                                const LassoProvider *provider);

lasso_saml2_encrypted_element_server_decrypt ()

lasso_error_t
lasso_saml2_encrypted_element_server_decrypt
                               (LassoSaml2EncryptedElement *encrypted_element,
                                LassoServer *server,
                                LassoNode **decrypted_node);

Decrypt the given encrypted element using the encryption private key of the server object

Parameters

encrypted_element

a LassoSaml2EncryptedElement object

 

server

a LassoServer object

 

decrypted_node

an output arg for a LassoNode.

[out]

Returns

0 if successful, an error code otherwise. See lasso_saml2_encrypted_element_server_decrypt().

Types and Values

struct LassoSaml2EncryptedElement

struct LassoSaml2EncryptedElement {
	/* elements */
	xmlNode *EncryptedData;
	GList *EncryptedKey; /* of xmlNode* */
	LassoNode *original_data;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSamlp2Response.html0000644000000000000000000000013214404126163023443 xustar0030 mtime=1678814323.029964812 30 atime=1678814323.029964812 30 ctime=1678814323.029964812 lasso-2.8.2/docs/reference/lasso/html/LassoSamlp2Response.html0000644000175000017500000001354314404126163026721 0ustar00bdauvergnebdauvergne00000000000000 LassoSamlp2Response: lasso Reference Manual

LassoSamlp2Response

LassoSamlp2Response — <samlp2:Response>

Functions

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlp2StatusResponse
            ╰── LassoSamlp2Response

Description

Figure 86. Schema fragment for samlp2:Response


<complexType name="ResponseType">
  <complexContent>
    <extension base="samlp:StatusResponseType">
      <choice minOccurs="0" maxOccurs="unbounded">
        <element ref="saml:Assertion"/>
        <element ref="saml:EncryptedAssertion"/>
      </choice>
    </extension>
  </complexContent>
</complexType>

Functions

lasso_samlp2_response_new ()

LassoNode *
lasso_samlp2_response_new (void);

Creates a new LassoSamlp2Response object.

Returns

a newly created LassoSamlp2Response object

Types and Values

struct LassoSamlp2Response

struct LassoSamlp2Response {
	/* elements */
	GList *Assertion; /* of LassoSaml2Assertion */
	GList *EncryptedAssertion; /* of LassoSaml2EncryptedElement */
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSamlSubjectStatementAbstract.html0000644000000000000000000000013214404126163026353 xustar0030 mtime=1678814323.021964766 30 atime=1678814323.021964766 30 ctime=1678814323.021964766 lasso-2.8.2/docs/reference/lasso/html/LassoSamlSubjectStatementAbstract.html0000644000175000017500000001231514404126163031625 0ustar00bdauvergnebdauvergne00000000000000 LassoSamlSubjectStatementAbstract: lasso Reference Manual

LassoSamlSubjectStatementAbstract

LassoSamlSubjectStatementAbstract — <saml:SubjectStatementAbstractType>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlStatementAbstract
            ╰── LassoSamlSubjectStatementAbstract
                ├── LassoSamlAuthenticationStatement
                ├── LassoSamlAttributeStatement
                ╰── LassoSamlSubjectStatement

Description

Figure 42. Schema fragment for saml:SubjectStatementAbstractType


<complexType name="SubjectStatementAbstractType" abstract="true">
  <complexContent>
    <extension base="saml:StatementAbstractType">
      <sequence>
        <element ref="saml:Subject"/>
      </sequence>
    </extension>
  </complexContent>
</complexType>

Functions

Types and Values

struct LassoSamlSubjectStatementAbstract

struct LassoSamlSubjectStatementAbstract {
	/* <element ref="saml:Subject"/> */
	LassoSamlSubject *Subject;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSamlp2Scoping.html0000644000000000000000000000013214404126163023247 xustar0030 mtime=1678814323.029964812 30 atime=1678814323.029964812 30 ctime=1678814323.029964812 lasso-2.8.2/docs/reference/lasso/html/LassoSamlp2Scoping.html0000644000175000017500000001305014404126163026516 0ustar00bdauvergnebdauvergne00000000000000 LassoSamlp2Scoping: lasso Reference Manual

LassoSamlp2Scoping

LassoSamlp2Scoping — <samlp2:Scoping>

Functions

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlp2Scoping

Description

Figure 87. Schema fragment for samlp2:Scoping


<complexType name="ScopingType">
  <sequence>
    <element ref="samlp:IDPList" minOccurs="0"/>
    <element ref="samlp:RequesterID" minOccurs="0" maxOccurs="unbounded"/>
  </sequence>
  <attribute name="ProxyCount" type="nonNegativeInteger" use="optional"/>
</complexType>

Functions

lasso_samlp2_scoping_new ()

LassoNode *
lasso_samlp2_scoping_new (void);

Creates a new LassoSamlp2Scoping object.

Returns

a newly created LassoSamlp2Scoping object

Types and Values

struct LassoSamlp2Scoping

struct LassoSamlp2Scoping {
	/* elements */
	LassoSamlp2IDPList *IDPList;
	char *RequesterID;
	/* attributes */
	char *ProxyCount;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoMiscTextNode.html0000644000000000000000000000013214404126163023134 xustar0030 mtime=1678814323.009964697 30 atime=1678814323.009964697 30 ctime=1678814323.009964697 lasso-2.8.2/docs/reference/lasso/html/LassoMiscTextNode.html0000644000175000017500000003034614404126163026412 0ustar00bdauvergnebdauvergne00000000000000 LassoMiscTextNode: lasso Reference Manual

LassoMiscTextNode

LassoMiscTextNode

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoMiscTextNode

Description

Functions

lasso_misc_text_node_new ()

LassoNode *
lasso_misc_text_node_new (void);

Creates a new LassoMiscTextNode object.

Returns

a newly created LassoMiscTextNode object


lasso_misc_text_node_new_with_string ()

LassoMiscTextNode *
lasso_misc_text_node_new_with_string (const char *content);

Creates a new LassoMiscTextNode object and initializes it with content . Beware that no nodename, so it would create a text child, not an element.

Parameters

content

the content of newly created LassoMiscTextNode

 

Returns

a newly created LassoMiscTextNode object


lasso_misc_text_node_new_with_xml_node ()

LassoMiscTextNode *
lasso_misc_text_node_new_with_xml_node
                               (xmlNode *xml_node);

Creates a new LassoMiscTextNode object and initialize it with xml_node .

Parameters

xml_node

an xmlNode

 

Returns

a newly created LassoMiscTextNode object


lasso_misc_text_node_get_xml_content ()

xmlNode *
lasso_misc_text_node_get_xml_content (LassoMiscTextNode *misc_text_node);

Return the xml content in this node.

Parameters

misc_text_node

a LassoMiscTextNode

 

Returns

an xmlNode or NULL.

[transfer none]


lasso_misc_text_node_set_xml_content ()

void
lasso_misc_text_node_set_xml_content (LassoMiscTextNode *misc_text_node,
                                      xmlNode *node);

Set the xml content of this LassoMiscTextNode

Parameters

misc_text_node

a LassoMiscTextNode

 

Types and Values

struct LassoMiscTextNode

struct LassoMiscTextNode {
	/* elements */
	char *content;

	char *name;
	char *ns_href;
	char *ns_prefix;
	gboolean text_child;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoFederation.html0000644000000000000000000000013214404126163022646 xustar0030 mtime=1678814323.001964653 30 atime=1678814323.001964653 30 ctime=1678814323.001964653 lasso-2.8.2/docs/reference/lasso/html/LassoFederation.html0000644000175000017500000002715014404126163026123 0ustar00bdauvergnebdauvergne00000000000000 LassoFederation: lasso Reference Manual

LassoFederation

LassoFederation — Principal federation between two providers

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoFederation

Description

A LassoFederation represents the an identifier shared by two provider, usually an identity provider and a service provider. Instance of this class are usually never accessed directly.

Functions

lasso_federation_new ()

LassoFederation *
lasso_federation_new (const gchar *remote_providerID);

Creates a new LassoFederation with the remote provider.

Parameters

remote_providerID

remote Provider ID

 

Returns

a newly created LassoFederation


lasso_federation_build_local_name_identifier ()

void
lasso_federation_build_local_name_identifier
                               (LassoFederation *federation,
                                const gchar *nameQualifier,
                                const gchar *format,
                                const gchar *content);

Builds federation local name identifier.

Parameters

federation

a LassoFederation

 

nameQualifier

the name identifier qualifier

 

format

the name identifier format

 

content

the name identifier content

 

lasso_federation_destroy ()

void
lasso_federation_destroy (LassoFederation *federation);

Destroys a federation.

Parameters

federation

a LassoFederation

 

lasso_federation_verify_name_identifier ()

gboolean
lasso_federation_verify_name_identifier
                               (LassoFederation *federation,
                                LassoNode *name_identifier);

Checks whether federation is for name_identifier .

Parameters

federation

a LassoFederation

 

name_identifier

the LassoSamlNameIdentifier

 

Returns

TRUE if the federation is for name_identifier .

Types and Values

struct LassoFederation

struct LassoFederation {
	gchar *remote_providerID;
	LassoNode *local_nameIdentifier;
	LassoNode *remote_nameIdentifier;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSamlSubject.html0000644000000000000000000000013214404126163023002 xustar0030 mtime=1678814323.021964766 30 atime=1678814323.021964766 30 ctime=1678814323.021964766 lasso-2.8.2/docs/reference/lasso/html/LassoSamlSubject.html0000644000175000017500000001330014404126163026247 0ustar00bdauvergnebdauvergne00000000000000 LassoSamlSubject: lasso Reference Manual

LassoSamlSubject

LassoSamlSubject — <saml:Subject>

Functions

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlSubject
            ╰── LassoLibSubject

Description

Figure 43. Schema fragment for saml:Subject


<element name="Subject" type="saml:SubjectType"/>
<complexType name="SubjectType">
  <choice>
    <sequence>
      <element ref="saml:NameIdentifier"/>
      <element ref="saml:SubjectConfirmation" minOccurs="0"/>
    </sequence>
    <element ref="saml:SubjectConfirmation"/>
  </choice>
</complexType>

Functions

lasso_saml_subject_new ()

LassoNode *
lasso_saml_subject_new (void);

Creates a new LassoSamlSubject object.

Returns

a newly created LassoSamlSubject object

Types and Values

struct LassoSamlSubject

struct LassoSamlSubject {
	LassoSamlNameIdentifier *NameIdentifier;
	LassoSamlSubjectConfirmation *SubjectConfirmation;
	LassoSaml2EncryptedElement *EncryptedNameIdentifier;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSamlp2ArtifactResolve.html0000644000000000000000000000013214404126163024742 xustar0030 mtime=1678814323.021964766 30 atime=1678814323.021964766 30 ctime=1678814323.021964766 lasso-2.8.2/docs/reference/lasso/html/LassoSamlp2ArtifactResolve.html0000644000175000017500000001366014404126163030220 0ustar00bdauvergnebdauvergne00000000000000 LassoSamlp2ArtifactResolve: lasso Reference Manual

LassoSamlp2ArtifactResolve

LassoSamlp2ArtifactResolve — <samlp2:ArtifactResolve>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlp2RequestAbstract
            ╰── LassoSamlp2ArtifactResolve

Description

Figure 68. Schema fragment for samlp2:ArtifactResolve


<complexType name="ArtifactResolveType">
  <complexContent>
    <extension base="samlp:RequestAbstractType">
      <sequence>
        <element ref="samlp:Artifact"/>
      </sequence>
    </extension>
  </complexContent>
</complexType>

Functions

lasso_samlp2_artifact_resolve_new ()

LassoNode *
lasso_samlp2_artifact_resolve_new (void);

Creates a new LassoSamlp2ArtifactResolve object.

Returns

a newly created LassoSamlp2ArtifactResolve object

Types and Values

struct LassoSamlp2ArtifactResolve

struct LassoSamlp2ArtifactResolve {
	/* elements */
	char *Artifact;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/lasso.devhelp20000644000000000000000000000013214404126162021451 xustar0030 mtime=1678814322.925964219 30 atime=1678814322.925964219 30 ctime=1678814322.925964219 lasso-2.8.2/docs/reference/lasso/html/lasso.devhelp20000644000175000017500000043445014404126162024733 0ustar00bdauvergnebdauvergne00000000000000 lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/up-insensitive.png0000644000000000000000000000013214404126162022365 xustar0030 mtime=1678814322.933964265 30 atime=1678814322.933964265 30 ctime=1678814322.933964265 lasso-2.8.2/docs/reference/lasso/html/up-insensitive.png0000644000175000017500000000056614404126162025644 0ustar00bdauvergnebdauvergne00000000000000‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEå $$ñا IDAT8Ëí’?/QÅÏ™?[êu$¾€V³î›ÑâHTD³ø”ÛˆBM+¡!™ÂÌ<ˆDã+èô[mdÞ\…·bø{º{sÎ/97˜ªSÖÚ£º®»<ìTõ8ŒcÌÉ¿UU­‘¼‡•WÕÍ,Ë®ÿ”e¹EÑ €žªîÉSïmÛ®æy~û+À9·è½¿0`hŒ9u†ªº`Çñr¿ßùpÎÍ{ïÌ8‘m’ ªJkí€-o$—Dä¢  išË¾'¹; ‡ Jr‡äCð\¨*¿HΑ|JÓtCDÆßo#"ã$IÖ<«êBQ½é£êêÉ]•TKúIEND®B`‚lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/annotation-glossary.html0000644000000000000000000000013214404126163023577 xustar0030 mtime=1678814323.033964834 30 atime=1678814323.033964834 30 ctime=1678814323.033964834 lasso-2.8.2/docs/reference/lasso/html/annotation-glossary.html0000644000175000017500000001060014404126163027044 0ustar00bdauvergnebdauvergne00000000000000 Annotation Glossary: lasso Reference Manual

Annotation Glossary

A

allow-none

NULL is OK, both for passing and for returning.

D

default

Default parameter value (in case a function which shadows this one via rename-to has fewer parameters).

E

element-type

Generics and defining elements of containers and arrays.

O

out

Parameter for returning results. Default is transfer full.

S

Stable

The intention of a Stable interface is to enable arbitrary third parties to develop applications to these interfaces, release them, and have confidence that they will run on all minor releases of the product (after the one in which the interface was introduced, and within the same major release). Even at a major release, incompatible changes are expected to be rare, and to have strong justifications.

T

transfer container

The caller owns the data container, but not the data inside it.

transfer full

The caller owns the data, and is responsible for free it.

transfer none

The data is owned by the callee, which is responsible of freeing it.

lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/lasso-Strings-for-SOAP.html0000644000000000000000000000013214404126163023660 xustar0030 mtime=1678814323.045964902 30 atime=1678814323.045964902 30 ctime=1678814323.045964902 lasso-2.8.2/docs/reference/lasso/html/lasso-Strings-for-SOAP.html0000644000175000017500000000772714404126163027145 0ustar00bdauvergnebdauvergne00000000000000 Strings for SOAP: lasso Reference Manual

Strings for SOAP

Strings for SOAP

Types and Values

Description

Functions

Types and Values

LASSO_SOAP_ENV_HREF

#define LASSO_SOAP_ENV_HREF   "http://schemas.xmlsoap.org/soap/envelope/"

Namespace for SOAP 1.1 messages


LASSO_SOAP_ENV_PREFIX

#define LASSO_SOAP_ENV_PREFIX "s"

Preferred prefix for namespace of SOAP 1.1 messages


LASSO_SOAP_ENV_ACTOR

#define LASSO_SOAP_ENV_ACTOR "http://schemas.xmlsoap.org/soap/actor/next"
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSamlpResponse.html0000644000000000000000000000013214404126163023361 xustar0030 mtime=1678814323.029964812 30 atime=1678814323.029964812 30 ctime=1678814323.029964812 lasso-2.8.2/docs/reference/lasso/html/LassoSamlpResponse.html0000644000175000017500000001411714404126163026635 0ustar00bdauvergnebdauvergne00000000000000 LassoSamlpResponse: lasso Reference Manual

LassoSamlpResponse

LassoSamlpResponse — <samlp:Response>

Functions

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlpResponseAbstract
            ╰── LassoSamlpResponse
                ╰── LassoLibAuthnResponse

Description

Figure 36. Schema fragment for samlp:Response


<element name="Response" type="samlp:ResponseType"/>
<complexType name="ResponseType">
  <complexContent>
    <extension base="samlp:ResponseAbstractType">
      <sequence>
        <element ref="samlp:Status"/>
        <element ref="saml:Assertion" minOccurs="0" maxOccurs="unbounded"/>
      </sequence>
    </extension>
  </complexContent>
</complexType>

Functions

lasso_samlp_response_new ()

LassoNode *
lasso_samlp_response_new (void);

Creates a new LassoSamlpResponse object.

Returns

a newly created LassoSamlpResponse object

Types and Values

struct LassoSamlpResponse

struct LassoSamlpResponse {
	/* <element ref="samlp:Status"/> */
	LassoSamlpStatus *Status;
	/* <element ref="saml:Assertion" minOccurs="0" maxOccurs="unbounded"/> */
	GList *Assertion; /* of LassoSamlAssertion */
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/lasso-assertion-query.html0000644000000000000000000000013214404126163024055 xustar0030 mtime=1678814323.045964902 30 atime=1678814323.045964902 30 ctime=1678814323.045964902 lasso-2.8.2/docs/reference/lasso/html/lasso-assertion-query.html0000644000175000017500000006475314404126163027344 0ustar00bdauvergnebdauvergne00000000000000 LassoAssertionQuery: lasso Reference Manual

LassoAssertionQuery

LassoAssertionQuery

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoProfile
            ╰── LassoAssertionQuery

Description

Functions

lasso_assertion_query_new ()

LassoAssertionQuery *
lasso_assertion_query_new (LassoServer *server);

Creates a new LassoAssertionQuery.

Parameters

server

the LassoServer

 

Returns

a newly created LassoAssertionQuery object; or NULL if an error occured


lasso_assertion_query_destroy ()

void
lasso_assertion_query_destroy (LassoAssertionQuery *assertion_query);

Destroys a LassoAssertionQuery object.

Parameters

assertion_query

a LassoAssertionQuery

 

lasso_assertion_query_init_request ()

lasso_error_t
lasso_assertion_query_init_request (LassoAssertionQuery *assertion_query,
                                    char *remote_provider_id,
                                    LassoHttpMethod http_method,
                                    LassoAssertionQueryRequestType query_request_type);

Initializes a new Assertion Query Request. For the AssertionID request type, the remote_provider_id is mandatory, for all other kind of request it is optional if we can find a provider supporting the associated role, i.e. IDP; authentication, attribute and authorization authority.

Parameters

assertion_query

a LassoAssertionQuery

 

remote_provider_id

the providerID of the remote provider.

[allow-none]

http_method

if set, then it get the protocol profile in metadata corresponding of this HTTP request method.

 

query_request_type

the type of request.

 

Returns

0 on success; or a negative value otherwise.


lasso_assertion_query_validate_request ()

lasso_error_t
lasso_assertion_query_validate_request
                               (LassoAssertionQuery *assertion_query);

Processes a Assertion query or request; caller must add assertions to the response afterwards.

Parameters

assertion_query

a LassoAssertionQuery

 

Returns

0 on success; or a negative value otherwise.


lasso_assertion_query_build_request_msg ()

lasso_error_t
lasso_assertion_query_build_request_msg
                               (LassoAssertionQuery *assertion_query);

Build an Assertion Query profile request message.

Parameters

assertion_query

a LassoAssertionQuery

 

Returns

0 on success; or a negative value otherwise.


lasso_assertion_query_process_request_msg ()

lasso_error_t
lasso_assertion_query_process_request_msg
                               (LassoAssertionQuery *assertion_query,
                                gchar *request_msg);

Processes a Assertion query or request message. Rebuilds a request object from the message and check its signature.

Parameters

assertion_query

a LassoAssertionQuery

 

request_msg

the Assertion query or request message

 

Returns

0 on success; or a negative value otherwise.


lasso_assertion_query_build_response_msg ()

lasso_error_t
lasso_assertion_query_build_response_msg
                               (LassoAssertionQuery *assertion_query);

Builds the Response message.

Parameters

assertion_query

a LassoAssertionQuery

 

Returns

0 on success; or a negative value otherwise.


lasso_assertion_query_process_response_msg ()

lasso_error_t
lasso_assertion_query_process_response_msg
                               (LassoAssertionQuery *assertion_query,
                                gchar *response_msg);

Parses the response message and builds the corresponding response object.

Parameters

assertion_query

a LassoAssertionQuery

 

response_msg

the response message

 

Returns

0 on success; or a negative value otherwise.


lasso_assertion_query_add_attribute_request ()

lasso_error_t
lasso_assertion_query_add_attribute_request
                               (LassoAssertionQuery *assertion_query,
                                char *format,
                                char *name);

Append a new attribute designator to the current attribute request.

Parameters

assertion_query

a LassoAssertionQuery object

 

attribute_format

the attribute designator format

 

attribute_name

the attribute designator name

 

Returns

0 if successful, an error code otherwise.


lasso_assertion_query_get_request_type ()

LassoAssertionQueryRequestType
lasso_assertion_query_get_request_type
                               (LassoAssertionQuery *assertion_query);

Return the type of the last processed request.

Parameters

assertion_query

a LassoAssertionQuery object

 

Types and Values

enum LassoAssertionQueryRequestType

Enumerate the existing kind of AssertionQuery requests.

Members

LASSO_ASSERTION_QUERY_REQUEST_TYPE_UNSET

the unknown value

 

LASSO_ASSERTION_QUERY_REQUEST_TYPE_ASSERTION_ID

an AssertionID request, to retrieve an assertion by its ID.

 

LASSO_ASSERTION_QUERY_REQUEST_TYPE_AUTHN

an AuthnQuery request, which is used to request existing authentication assertions about a given subject from an Authentication Authority

 

LASSO_ASSERTION_QUERY_REQUEST_TYPE_ATTRIBUTE

an AttributeQuery, which is used to retrieve attribute an a principal.

 

LASSO_ASSERTION_QUERY_REQUEST_TYPE_AUTHZ_DECISION

an AuthzDecisionQuery, which is used to request authorisation to let a principal access a certain resource.

 

LASSO_ASSERTION_QUERY_REQUEST_TYPE_LAST

   

struct LassoAssertionQuery

struct LassoAssertionQuery;
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSamlp2RequestedAuthnContext.html0000644000000000000000000000013214404126163026153 xustar0030 mtime=1678814323.025964789 30 atime=1678814323.025964789 30 ctime=1678814323.029964812 lasso-2.8.2/docs/reference/lasso/html/LassoSamlp2RequestedAuthnContext.html0000644000175000017500000001427214404126163031431 0ustar00bdauvergnebdauvergne00000000000000 LassoSamlp2RequestedAuthnContext: lasso Reference Manual

LassoSamlp2RequestedAuthnContext

LassoSamlp2RequestedAuthnContext — <samlp2:RequestedAuthnContext>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlp2RequestedAuthnContext

Description

Figure 85. Schema fragment for samlp2:RequestedAuthnContext


<complexType name="RequestedAuthnContextType">
  <choice>
    <element ref="saml:AuthnContextClassRef" maxOccurs="unbounded"/>
    <element ref="saml:AuthnContextDeclRef" maxOccurs="unbounded"/>
  </choice>
  <attribute name="Comparison" type="samlp:AuthnContextComparisonType" use="optional"/>
</complexType>

Functions

lasso_samlp2_requested_authn_context_new ()

LassoNode *
lasso_samlp2_requested_authn_context_new
                               (void);

Creates a new LassoSamlp2RequestedAuthnContext object.

Returns

a newly created LassoSamlp2RequestedAuthnContext object

Types and Values

struct LassoSamlp2RequestedAuthnContext

struct LassoSamlp2RequestedAuthnContext {
	/* elements */
	GList *AuthnContextClassRef; /* of strings */
	GList *AuthnContextDeclRef; /* of strings */
	/* attributes */
	char *Comparison;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/lasso-LassoPaosRequest.html0000644000000000000000000000012714404126163024164 xustar0029 mtime=1678814323.04196488 29 atime=1678814323.04196488 29 ctime=1678814323.04196488 lasso-2.8.2/docs/reference/lasso/html/lasso-LassoPaosRequest.html0000644000175000017500000001761414404126163027441 0ustar00bdauvergnebdauvergne00000000000000 LassoPaosRequest: lasso Reference Manual

LassoPaosRequest

LassoPaosRequest — <paos:Request>

Description

Figure 21. Schema fragment for paos:Request


<xs:element name="Request" type="RequestType"/>
<xs:complexType name="RequestType">
    <xs:attribute name="responseConsumerURL" type="xs:anyURI" use="required"/>
    <xs:attribute name="service" type="xs:anyURI" use="required"/>
    <xs:attribute name="messageID" type="IDType" use="optional"/>
    <xs:attribute ref="S:mustUnderstand" use="required"/>
    <xs:attribute ref="S:actor" use="required"/>
</xs:complexType>

Functions

lasso_paos_request_validate ()

int
lasso_paos_request_validate (LassoPaosRequest *node);

Validates the object conforms to required values.

Parameters

request

The LassoPaosRequest object to validate

 

Returns

0 on success, error code otherwise


lasso_paos_request_new ()

LassoNode *
lasso_paos_request_new (const gchar *responseConsumerURL,
                        const gchar *messageID);

The LassoPaosRequest object is initialized as follows:


  responseConsumerURL = responseConsumerURL (if non-NULL)
  messageID = messageID (if non-NULL) otherwise generated unique id
  mustUnderstand = TRUE
  actor = LASSO_SOAP_ENV_ACTOR
  service = LASSO_ECP_HREF

Parameters

responseConsumerURL

.

[allow-none]

messageID

.

[allow-none]

Returns

newly created & initialized LassoPaosRequest object

lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/right-insensitive.png0000644000000000000000000000013214404126162023056 xustar0030 mtime=1678814322.933964265 30 atime=1678814322.933964265 30 ctime=1678814322.933964265 lasso-2.8.2/docs/reference/lasso/html/right-insensitive.png0000644000175000017500000000056514404126162026334 0ustar00bdauvergnebdauvergne00000000000000‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEå $$ñا IDAT8ËÍ’±JÃ`…¿ ‚“‹³«/ S’_$ÄÁÁAqrÐÙW(>€“à‚®©“m¥"]\œ„è(‘49.NÚdÒ3¸ß9Ü{á¯eM#MSI‡Î¹·E¯iHz|3{̲l½3 ,K˜k’ž†ÃáV'@EŸEQlwÀŠçyišî·Äqüçù‘™]KÀíh4:mµÄ¦²,;“t˜¤sç\aƒÆR5/¬7'¹W×õp”’Žs×­I’,Kº1³=àËÌÂ0´j0Wg³ÙØ>€Ý ¦­¯PUÕýïð»¤0 §]?qCÒ«™ùιgþ½~œÉkÄAâ…_IEND®B`‚lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/lasso-LassoEcpRequest.html0000644000000000000000000000012714404126163023771 xustar0029 mtime=1678814323.04196488 29 atime=1678814323.04196488 29 ctime=1678814323.04196488 lasso-2.8.2/docs/reference/lasso/html/lasso-LassoEcpRequest.html0000644000175000017500000001726714404126163027252 0ustar00bdauvergnebdauvergne00000000000000 LassoEcpRequest: lasso Reference Manual

LassoEcpRequest

LassoEcpRequest — <ecp:Request>

Description

Figure 94. Schema fragment for ecp:Request


<element name="Request" type="ecp:RequestType"/>
<complexType name="RequestType">
    <sequence>
        <element ref="saml:Issuer"/>
        <element ref="samlp:IDPList" minOccurs="0"/>
    </sequence>
    <attribute ref="S:mustUnderstand" use="required"/>
    <attribute ref="S:actor" use="required"/>
    <attribute name="ProviderName" type="string" use="optional"/>
    <attribute name="IsPassive" type="boolean" use="optional"/>
</complexType>

Functions

lasso_ecp_request_validate ()

int
lasso_ecp_request_validate (LassoEcpRequest *request);

Validates the LassoEcpRequest object conforms to required values.

Parameters

request

the LassoEcpRequest object to validate

 

Returns

0 on success, error code otherwise


lasso_ecp_request_new ()

LassoNode *
lasso_ecp_request_new (const gchar *Issuer,
                       gboolean IsPassive,
                       const gchar *ProviderName,
                       LassoSamlp2IDPList *IDPList);

Creates and intializes new LassoEcpRequest object.

The LassoEcpRequest object is initialized as follows:


  Issuer = Issuer
  IsPassive = IsPassive
  ProviderName = ProviderName
  IDPList = IDPList (if non-NULL)
  mustUnderstand = TRUE
  actor = LASSO_SOAP_ENV_ACTOR

Parameters

IDPList

.

[allow-none]

Returns

a newly created and initialized LassoEcpRequest object

lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoLibRegisterNameIdentifierRequest.html0000644000000000000000000000013214404126163027156 xustar0030 mtime=1678814323.005964675 30 atime=1678814323.005964675 30 ctime=1678814323.005964675 lasso-2.8.2/docs/reference/lasso/html/LassoLibRegisterNameIdentifierRequest.html0000644000175000017500000003107514404126163032434 0ustar00bdauvergnebdauvergne00000000000000 LassoLibRegisterNameIdentifierRequest: lasso Reference Manual

LassoLibRegisterNameIdentifierRequest

LassoLibRegisterNameIdentifierRequest — <lib:RegisterNameIdentifierRequest>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlpRequestAbstract
            ╰── LassoLibRegisterNameIdentifierRequest

Description

Figure 15. Schema fragment for lib:RegisterNameIdentifierRequest

<xs:element name="RegisterNameIdentifierRequest" type="RegisterNameIdentifierRequestType"/>
<xs:complexType name="RegisterNameIdentifierRequestType">
  <xs:complexContent>
    <xs:extension base="samlp:RequestAbstractType">
      <xs:sequence>
        <xs:element ref="Extension" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="ProviderID"/>
        <xs:element ref="IDPProvidedNameIdentifier"/>
        <xs:element ref="SPProvidedNameIdentifier" minOccurs="0"/>
        <xs:element ref="OldProvidedNameIdentifier"/>
        <xs:element ref="RelayState" minOccurs="0"/>
      </xs:sequence>
    </xs:extension>
  </xs:complexContent>
</xs:complexType>
<xs:element name="IDPProvidedNameIdentifier" type="saml:NameIdentifierType"/>
<xs:element name="SPProvidedNameIdentifier" type="saml:NameIdentifierType"/>
<xs:element name="OldProvidedNameIdentifier" type="saml:NameIdentifierType"/>

<xs:element name="ProviderID" type="md:entityIDType"/>
<xs:element name="RelayState" type="xs:string"/>

Functions

lasso_lib_register_name_identifier_request_new ()

LassoNode *
lasso_lib_register_name_identifier_request_new
                               (void);

Creates a new LassoLibRegisterNameIdentifierRequest object.

Returns

a newly created LassoLibRegisterNameIdentifierRequest object


lasso_lib_register_name_identifier_request_new_full ()

LassoNode *
lasso_lib_register_name_identifier_request_new_full
                               (const char *providerID,
                                LassoSamlNameIdentifier *idpNameIdentifier,
                                LassoSamlNameIdentifier *spNameIdentifier,
                                LassoSamlNameIdentifier *oldNameIdentifier,
                                LassoSignatureType sign_type,
                                LassoSignatureMethod sign_method);

Creates a new LassoLibRegisterNameIdentifierRequest object and initializes it with the parameters.

Parameters

providerID

the providerID of the requester

 

idpNameIdentifier

a LassoSamlNameIdentifier object, giving the new idp provided name identifier

 

spNameIdentifier

a LassoSamlNameIdentifier object, giving the new sp provided name identifier

 

oldNameIdentifier

a LassoSamlNameIdentifier object, giving the old name identifier

 

sign_type

a LassoSignatureType value

 

sign_method

a LassoSignatureMethod value

 

Returns

a newly created LassoLibRegisterNameIdentifierRequest object

Types and Values

struct LassoLibRegisterNameIdentifierRequest

struct LassoLibRegisterNameIdentifierRequest {
	/* <xs:element ref="Extension" minOccurs="0" maxOccurs="unbounded"/> */
	GList *Extension; /* of xmlNode* */
	/* <xs:element ref="ProviderID"/> */
	char *ProviderID;
	/* <xs:element ref="IDPProvidedNameIdentifier"/> */
	LassoSamlNameIdentifier *IDPProvidedNameIdentifier;
	/* <xs:element ref="SPProvidedNameIdentifier" minOccurs="0"/> */
	LassoSamlNameIdentifier *SPProvidedNameIdentifier;
	/* <xs:element ref="OldProvidedNameIdentifier"/> */
	LassoSamlNameIdentifier *OldProvidedNameIdentifier;
	/* <xs:element ref="RelayState" minOccurs="0"/> */
	char *RelayState;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoDsKeyInfo.html0000644000000000000000000000013214404126162022420 xustar0030 mtime=1678814322.997964629 30 atime=1678814322.997964629 30 ctime=1678814322.997964629 lasso-2.8.2/docs/reference/lasso/html/LassoDsKeyInfo.html0000644000175000017500000001147414404126162025677 0ustar00bdauvergnebdauvergne00000000000000 LassoDsKeyInfo: lasso Reference Manual

LassoDsKeyInfo

LassoDsKeyInfo — object mapping for an XML DSIG KeyInfo element

Functions

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoDsKeyInfo

Description

Functions

lasso_ds_key_info_new ()

LassoDsKeyInfo *
lasso_ds_key_info_new (void);

Creates a new LassoDsKeyInfo object.

Returns

a newly created LassoDsKeyInfo object

Types and Values

struct LassoDsKeyInfo

struct LassoDsKeyInfo;
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/lasso-LassoEcpResponse.html0000644000000000000000000000012714404126163024137 xustar0029 mtime=1678814323.04196488 29 atime=1678814323.04196488 29 ctime=1678814323.04196488 lasso-2.8.2/docs/reference/lasso/html/lasso-LassoEcpResponse.html0000644000175000017500000001577714404126163027424 0ustar00bdauvergnebdauvergne00000000000000 LassoEcpResponse: lasso Reference Manual

LassoEcpResponse

LassoEcpResponse — <ecp:Response>

Description

Figure 95. Schema fragment for ecp:Response


<element name="Response" type="ecp:ResponseType"/>
<complexType name="ResponseType">
    <attribute ref="S:mustUnderstand" use="required"/>
    <attribute ref="S:actor" use="required"/>
    <attribute name="AssertionConsumerServiceURL" type="anyURI" use="required"/>
</complexType>

Functions

lasso_ecp_response_validate ()

int
lasso_ecp_response_validate (LassoEcpResponse *response);

Validates the LassoEcpResponse object conforms to required values.

  • AssertionConsumerServiceURL must be non-NULL
  • mustUnderstand must be TRUE
  • actor must be equal to LASSO_SOAP_ENV_ACTOR

Parameters

response

The LassoEcpResponse object to validate

 

Returns

0 on success, error code otherwise


lasso_ecp_response_new ()

LassoNode *
lasso_ecp_response_new (const gchar *AssertionConsumerServiceURL);

Creates and initializes a new LassoEcpResponse object.

The # object is initialized as follows:


  AssertionConsumerServiceURL = AssertionConsumerServiceURL
  mustUnderstand = TRUE
  actor = LASSO_SOAP_ENV_ACTOR

Parameters

AssertionConsumerServiceURL

.

[allow-none]

Returns

a newly created and initialized LassoEcpResponse object

lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSamlAssertion.html0000644000000000000000000000013214404126163023352 xustar0030 mtime=1678814323.017964743 30 atime=1678814323.017964743 30 ctime=1678814323.017964743 lasso-2.8.2/docs/reference/lasso/html/LassoSamlAssertion.html0000644000175000017500000001630514404126163026627 0ustar00bdauvergnebdauvergne00000000000000 LassoSamlAssertion: lasso Reference Manual

LassoSamlAssertion

LassoSamlAssertion — <saml:Assertion>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlAssertion
            ╰── LassoLibAssertion

Description

Figure 24. Schema fragment for saml:Assertion


<element name="Assertion" type="saml:AssertionType"/>
<complexType name="AssertionType">
  <sequence>
    <element ref="saml:Conditions" minOccurs="0"/>
    <element ref="saml:Advice" minOccurs="0"/>
    <choice maxOccurs="unbounded">
      <element ref="saml:Statement"/>
      <element ref="saml:SubjectStatement"/>
      <element ref="saml:AuthenticationStatement"/>
      <element ref="saml:AuthorizationDecisionStatement"/>
      <element ref="saml:AttributeStatement"/>
    </choice>
    <element ref="ds:Signature" minOccurs="0"/>
  </sequence>
  <attribute name="MajorVersion" type="integer" use="required"/>
  <attribute name="MinorVersion" type="integer" use="required"/>
  <attribute name="AssertionID" type="saml:IDType" use="required"/>
  <attribute name="Issuer" type="string" use="required"/>
  <attribute name="IssueInstant" type="dateTime" use="required"/>
</complexType>

From oasis-sstc-saml-schema-assertion-1.0.xsd:
<simpleType name="IDType">
  <restriction base="string"/>
</simpleType>

Functions

lasso_saml_assertion_new ()

LassoSamlAssertion *
lasso_saml_assertion_new (void);

Creates a new LassoSamlAssertion object.

Returns

a newly created LassoSamlAssertion object

Types and Values

struct LassoSamlAssertion

struct LassoSamlAssertion {
	/* <element ref="saml:Conditions" minOccurs="0"/> */
	LassoSamlConditions *Conditions;
	/* <element ref="saml:Advice" minOccurs="0"/> */
	LassoSamlAdvice *Advice;
	void *Statement; /* XXX LassoSamlStatement missing from lasso */
	LassoSamlSubjectStatement *SubjectStatement;
	LassoSamlAuthenticationStatement *AuthenticationStatement;
	void *AuthorizationDecisionStatement;
		/* XXX LassoSamlAuthorizationDecisionStatement missing from lasso*/
	LassoSamlAttributeStatement *AttributeStatement;

	int MajorVersion;
	int MinorVersion;
	char *AssertionID;
	char *Issuer;
	char *IssueInstant;

	/* ds:Signature stuff */
	LassoSignatureType sign_type;
	LassoSignatureMethod sign_method;
	char *private_key_file;
	char *certificate_file;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoLibAuthenticationStatement.html0000644000000000000000000000013214404126163026061 xustar0030 mtime=1678814323.001964653 30 atime=1678814323.001964653 30 ctime=1678814323.001964653 lasso-2.8.2/docs/reference/lasso/html/LassoLibAuthenticationStatement.html0000644000175000017500000002710014404126163031331 0ustar00bdauvergnebdauvergne00000000000000 LassoLibAuthenticationStatement: lasso Reference Manual

LassoLibAuthenticationStatement

LassoLibAuthenticationStatement — <lib:AuthenticationStatement>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlStatementAbstract
            ╰── LassoSamlSubjectStatementAbstract
                ╰── LassoSamlAuthenticationStatement
                    ╰── LassoLibAuthenticationStatement

Description

Figure 2. Schema fragment for lib:AuthenticationStatement

<xs:element name="AuthenticationStatement" type="AuthenticationStatementType"
  substitutionGroup="saml:Statement"/>
<xs:complexType name="AuthenticationStatementType">
  <xs:complexContent>
    <xs:extension base="saml:AuthenticationStatementType">
      <xs:sequence>
        <xs:element ref="AuthnContext" minOccurs="0"/>
      </xs:sequence>
      <xs:attribute name="ReauthenticateOnOrAfter" type="xs:dateTime" use="optional"/>
      <xs:attribute name="SessionIndex" type="xs:string" use="required"/>
    </xs:extension>
  </xs:complexContent>
</xs:complexType>

Functions

lasso_lib_authentication_statement_new ()

LassoLibAuthenticationStatement *
lasso_lib_authentication_statement_new
                               (void);

Creates a new LassoLibAuthenticationStatement object.

Returns

a newly created LassoLibAuthenticationStatement object


lasso_lib_authentication_statement_new_full ()

LassoLibAuthenticationStatement *
lasso_lib_authentication_statement_new_full
                               (const char *authenticationMethod,
                                const char *authenticationInstant,
                                const char *reauthenticateOnOrAfter,
                                LassoSamlNameIdentifier *sp_identifier,
                                LassoSamlNameIdentifier *idp_identifier);

Creates a new LassoLibAuthenticationStatement object and initializes its subject, its AuthenticationMethod, its AuthenticationInstant,

Parameters

authenticationMethod

an URI identifier for the authentication method

 

authenticationInstant

an ISO-8601 formatted timestamp for the authentication instant.

[allow-none]

reauthenticateOnOrAfter

an ISO-8601 formatted timestamp to set a limit on the value of this authentication.

[allow-none]

sp_identifier

(allow-none) a LassoSamlNameIdentifier object, the SP qualifier for the subject of this statement

 

idp_identifier

a LassoSamlNameIdentifier object, the IdP qualifier for the subject of this statemtn

 

Returns

a newly created LassoLibAuthenticationStatement object

Types and Values

struct LassoLibAuthenticationStatement

struct LassoLibAuthenticationStatement {
	/* <xs:element ref="AuthnContext" minOccurs="0"/> */
	LassoLibAuthnContext *AuthnContext;
	/* <xs:attribute name="ReauthenticateOnOrAfter" type="xs:dateTime" use="optional"/> */
	char *ReauthenticateOnOrAfter;
	/* <xs:attribute name="SessionIndex" type="xs:string" use="required"/> */
	char *SessionIndex;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoLibIDPEntries.html0000644000000000000000000000013214404126163023163 xustar0030 mtime=1678814323.001964653 30 atime=1678814323.001964653 30 ctime=1678814323.001964653 lasso-2.8.2/docs/reference/lasso/html/LassoLibIDPEntries.html0000644000175000017500000001300314404126163026430 0ustar00bdauvergnebdauvergne00000000000000 LassoLibIDPEntries: lasso Reference Manual

LassoLibIDPEntries

LassoLibIDPEntries — <lib:IDPEntries>

Functions

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoLibIDPEntries

Description

Figure 8. Schema fragment for lib:IDPEntries

<xs:element name="IDPEntries">
  <xs:complexType>
    <xs:sequence>
      <xs:element ref="IDPEntry" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

Functions

lasso_lib_idp_entries_new ()

LassoNode *
lasso_lib_idp_entries_new (void);

Creates a new LassoLibIDPEntries object.

Returns

a newly created LassoLibIDPEntries object

Types and Values

struct LassoLibIDPEntries

struct LassoLibIDPEntries {
	/* <xs:element ref="IDPEntry" maxOccurs="unbounded"/> */
	GList *IDPEntry; /* of LassoLibIDPEntry */
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/rn01.html0000644000000000000000000000013214404126163020344 xustar0030 mtime=1678814323.049964926 30 atime=1678814323.049964926 30 ctime=1678814323.049964926 lasso-2.8.2/docs/reference/lasso/html/rn01.html0000644000175000017500000006272514404126163023630 0ustar00bdauvergnebdauvergne00000000000000 Application Programming Interface: lasso Reference Manual

Application Programming Interface


Table of Contents

Lasso Architecture
LassoServer — Representation of the current server
LassoProvider — Service or identity provider
LassoIdentity — Principal identity
LassoFederation — Principal federation between two providers
LassoSession — Principal Session
LassoProfile — Base class for all identity profiles
Error Codes — Error codes returned by lasso functions
LassoNode — Base class for all Lasso objects
Base Strings — General strings constants for Lasso
registry — Class to store a mapping of qualified names (QName) to other qualified names.
LassoMiscTextNode
Identity Federation Framework - ID-FF 1.2 profiles
LassoLogin — Single Sign-On and Federation Profile
LassoLogout — Single Logout Profile
LassoDefederation — Federation Termination Notification Profile (ID-FF)
LassoNameRegistration — Name Registration Profile (ID-FF)
LassoNameIdentifierMapping — Liberty Enabled Client and Proxy Profile (ID-FF)
LassoLecp — Liberty Enabled Client and Proxy Profile (ID-FF)
Objects from ID-FF 1.2 schemas
Strings for ID-FF 1.2
LassoLibAssertion — <lib:Assertion>
LassoLibAuthenticationStatement — <lib:AuthenticationStatement>
LassoLibAuthnContext — <lib:AuthnContext>
LassoLibAuthnRequestEnvelope — <lib:AuthnRequestEnvelope>
LassoLibAuthnRequest — <lib:AuthnRequest>
LassoLibAuthnResponseEnvelope — <lib:AuthnResponseEnvelope>
LassoLibAuthnResponse — <lib:AuthnResponse>
LassoLibFederationTerminationNotification — <lib:FederationTerminationNotification>
LassoLibIDPEntries — <lib:IDPEntries>
LassoLibIDPEntry — <lib:IDPEntry>
LassoLibIDPList — <lib:IDPList>
LassoLibLogoutRequest — <lib:LogoutRequest>
LassoLibLogoutResponse — <lib:LogoutResponse>
LassoLibNameIdentifierMappingRequest — <lib:NameIdentifierMappingRequest>
LassoLibNameIdentifierMappingResponse — <lib:NameIdentifierMappingResponse>
LassoLibRegisterNameIdentifierRequest — <lib:RegisterNameIdentifierRequest>
LassoLibRegisterNameIdentifierResponse — <lib:RegisterNameIdentifierResponse>
LassoLibRequestAuthnContext — <lib:RequestAuthnContext>
LassoLibScoping — <lib:Scoping>
LassoLibStatusResponse — <lib:StatusResponse>
LassoLibSubject — <lib:Subject>
LassoPaosRequest — <paos:Request>
LassoPaosResponse — <paos:Response>
LassoSamlAdvice — <saml:Advice>
LassoSamlAssertion — <saml:Assertion>
LassoSamlAttributeDesignator — object mapping for a saml:AttributeDesignator
LassoSamlAttributeStatement — object mapping for a saml:AttributeStatement
LassoSamlAttributeValue — value of an attribute in SAML 1.0/1.1 assertion
LassoSamlAttribute
LassoSamlAudienceRestrictionCondition
LassoSamlAuthenticationStatement — <saml:AuthenticationStatement>
LassoSamlAuthorityBinding — <saml:AuthorityBinding>
LassoSamlConditionAbstract — <:saml:ConditionAbstract>
LassoSamlConditions — <saml:Conditions>
LassoSamlNameIdentifier — <saml:NameIdentifier>
LassoSamlpRequestAbstract — <samlp:RequestAbstractType>
LassoSamlpRequest — <samlp:Request>
LassoSamlpResponseAbstract — <samlp:ResponseAbstractType>
LassoSamlpResponse — <samlp:Response>
LassoSamlpStatusCode — <samlp:StatusCode>
LassoSamlpStatus — <samlp:Status>
LassoSamlStatementAbstract — <saml:StatementAbstract>
LassoSamlSubjectConfirmation — <saml:SubjectConfirmation>
LassoSamlSubjectLocality — <saml:SubjectLocality>
LassoSamlSubjectStatementAbstract — <saml:SubjectStatementAbstractType>
LassoSamlSubjectStatement
LassoSamlSubject — <saml:Subject>
SAML 2.0 Single Sign On profiles
LassoAssertionQuery
LassoNameIdManagement — Name Id Management Profile (SAMLv2)
LassoEcp — Enhanced Client or Proxy Profile (SAMLv2)
Utility functions for SAML 2.0 — Misc functions used inside Lasso
Objects from SAML 2.0 schemas
SAML 2.0 Strings — String constants from SAML 2.0 specifications
LassoSaml2Action — <saml2:Action>
LassoSaml2Advice — <saml2:Advice>
LassoSaml2Assertion — <saml2:Assertion>
LassoSaml2AttributeStatement — <saml2:AttributeStatement>
LassoSaml2AttributeValue — value of an attribute in a SAML 2.0 assertion
LassoSaml2Attribute — <saml2:Attribute>
LassoSaml2AudienceRestriction — <saml2:AudienceRestriction>
LassoSaml2AuthnContext — <saml2:AuthnContext>
LassoSaml2AuthnStatement — <saml2:AuthnStatement>
LassoSaml2AuthzDecisionStatement — <saml2:AuthzDecisionStatement>
LassoSaml2BaseIDAbstract — <saml2:BaseIDAbstract>
LassoSaml2ConditionAbstract — <saml2:ConditionAbstract>
LassoSaml2Conditions — <saml2:Conditions>
LassoSaml2EncryptedElement — <saml2:EncryptedElement>
LassoSaml2Evidence — <saml2:Evidence>
LassoSaml2KeyInfoConfirmationData — <saml2:KeyInfoConfirmationData>
LassoSaml2NameID — <saml2:NameID>
LassoSaml2OneTimeUse — <saml2:OneTimeUse>
LassoSaml2ProxyRestriction — <saml2:ProxyRestriction>
LassoSaml2StatementAbstract — <saml2:StatementAbstract>
LassoSaml2SubjectConfirmationData — <saml2:SubjectConfirmationData>
LassoSaml2SubjectConfirmation — <saml2:SubjectConfirmation>
LassoSaml2SubjectLocality — <saml2:SubjectLocality>
LassoSaml2Subject — <saml2:Subject>
LassoSamlp2ArtifactResolve — <samlp2:ArtifactResolve>
LassoSamlp2ArtifactResponse — <samlp2:ArtifactResponse>
LassoSamlp2AssertionIDRequest
LassoSamlp2AttributeQuery — <samlp2:AttributeQuery>
LassoSamlp2AuthnQuery — <samlp2:AuthnQuery>
LassoSamlp2AuthnRequest — <samlp2:AuthnRequest>
LassoSamlp2AuthzDecisionQuery — <samlp2:AuthzDecisionQuery>
LassoSamlp2Extensions — <samlp2:Extensions>
LassoSamlp2IDPEntry — <samlp2:IDPEntry>
LassoSamlp2IDPList — <samlp2:IDPList>
LassoSamlp2LogoutRequest — <samlp2:LogoutRequest>
LassoSamlp2LogoutResponse — <samlp2:LogoutResponse>
LassoSamlp2ManageNameIDRequest — <samlp2:ManageNameIDRequest>
LassoSamlp2ManageNameIDResponse — <samlp2:ManageNameIDResponse>
LassoSamlp2NameIDMappingRequest — <samlp2:NameIDMappingRequest>
LassoSamlp2NameIDMappingResponse — <samlp2:NameIDMappingResponse>
LassoSamlp2NameIDPolicy — <samlp2:NameIDPolicy>
LassoSamlp2RequestAbstract — <samlp2:RequestAbstract>
LassoSamlp2RequestedAuthnContext — <samlp2:RequestedAuthnContext>
LassoSamlp2Response — <samlp2:Response>
LassoSamlp2Scoping — <samlp2:Scoping>
LassoSamlp2StatusCode — <samlp2:StatusCode>
LassoSamlp2StatusDetail — <samlp2:StatusDetail>
LassoSamlp2StatusResponse — <samlp2:StatusResponse>
LassoSamlp2Status — <samlp2:Status>
LassoSamlp2SubjectQueryAbstract — <samlp2:SubjectQueryAbstract>
LassoSamlp2Terminate — <samlp2:Terminate>
LassoEcpRequest — <ecp:Request>
LassoEcpResponse — <ecp:Response>
LassoEcpRelayState — <ecp:RelayState>
Object from the SOAP 1.1 schemas
LassoSoapBody — <soap:Body>
LassoSoapDetail
LassoSoapEnvelope — <soap:Envelope>
LassoSoapFault — object mapping for a soap11:Fault
LassoSoapHeader — <soap:Header>
Strings for SOAP
Object from the XML-DSIG schemas
LassoDsKeyInfo — object mapping for an XML DSIG KeyInfo element
LassoDsKeyValue — object mapping for an XML DSIG KeyValue element
LassoDsRsaKeyValue
Strings for XML-DSIG — General strings constants for XMLDsig
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/right.png0000644000000000000000000000013214404126162020520 xustar0030 mtime=1678814322.933964265 30 atime=1678814322.933964265 30 ctime=1678814322.933964265 lasso-2.8.2/docs/reference/lasso/html/right.png0000644000175000017500000000040514404126162023767 0ustar00bdauvergnebdauvergne00000000000000‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEå $$ñا ’IDAT8ËÕÒ¯aÇñ?›M´½IdErš,¾Ù-¸ÑhîAâIl’Í ¯r’äy§ž}¿ç·s¿X6èæ ö!9¢Ÿ#èD‚ Œr$-¬BrÃ$GÒÀ"$”¹;™á‰æŸÍú—WZêä&–!¸cš·±øŠq \`ðÃÔ軀Oä¾ò=QouføòIEND®B`‚lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoLecp.html0000644000000000000000000000013214404126163021451 xustar0030 mtime=1678814323.001964653 30 atime=1678814323.001964653 30 ctime=1678814323.001964653 lasso-2.8.2/docs/reference/lasso/html/LassoLecp.html0000644000175000017500000005275414404126163024736 0ustar00bdauvergnebdauvergne00000000000000 LassoLecp: lasso Reference Manual

LassoLecp

LassoLecp — Liberty Enabled Client and Proxy Profile (ID-FF)

Types and Values

struct LassoLecp

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoProfile
            ╰── LassoLogin
                ╰── LassoLecp

Description

Functions

lasso_lecp_new ()

LassoLecp *
lasso_lecp_new (LassoServer *server);

Creates a new LassoLecp.

Parameters

server

the LassoServer

 

Returns

a newly created LassoLecp object; or NULL if an error occured


lasso_lecp_build_authn_request_envelope_msg ()

lasso_error_t
lasso_lecp_build_authn_request_envelope_msg
                               (LassoLecp *lecp);

Builds an enveloped authentication request message. Sets msg_body to that message.

Parameters

lecp

a LassoLecp

 

Returns

0 on success; or a negative value otherwise.


lasso_lecp_build_authn_request_msg ()

lasso_error_t
lasso_lecp_build_authn_request_msg (LassoLecp *lecp);

Builds an authentication request. The data for the sending of the request are stored in msg_url and msg_body (SOAP POST).

Parameters

lecp

a LassoLecp

 

Returns

0 on success; or a negative value otherwise.


lasso_lecp_build_authn_response_msg ()

lasso_error_t
lasso_lecp_build_authn_response_msg (LassoLecp *lecp);

Builds the lecp authentication response message (base64). Sets msg_body to that message.

Parameters

lecp

a LassoLecp

 

Returns

0 on success; or a negative value otherwise.


lasso_lecp_build_authn_response_envelope_msg ()

lasso_error_t
lasso_lecp_build_authn_response_envelope_msg
                               (LassoLecp *lecp);

Builds the enveloped LECP authentication response message (SOAP message). Sets msg_body to that message.

Parameters

lecp

a LassoLecp

 

Returns

0 on success; or a negative value otherwise.


lasso_lecp_destroy ()

void
lasso_lecp_destroy (LassoLecp *lecp);

Destroys a LassoLecp object

Parameters

lecp

a LassoLecp

 

lasso_lecp_init_authn_request ()

lasso_error_t
lasso_lecp_init_authn_request (LassoLecp *lecp,
                               const char *remote_providerID);

Initializes a new lib:AuthnRequest.

Parameters

lecp

a LassoLecp

 

remote_providerID

the providerID of the identity provider. When NULL, the first known identity provider is used.

 

Returns

0 on success; or a negative value otherwise.


lasso_lecp_process_authn_request_msg ()

lasso_error_t
lasso_lecp_process_authn_request_msg (LassoLecp *lecp,
                                      const char *authn_request_msg);

Processes received authentication request, checks it is signed correctly, checks if requested protocol profile is supported, etc.

Parameters

lecp

a LassoLecp

 

authn_request_msg

the authentication request received

 

Returns

0 on success; or a negative value otherwise.


lasso_lecp_process_authn_request_envelope_msg ()

lasso_error_t
lasso_lecp_process_authn_request_envelope_msg
                               (LassoLecp *lecp,
                                const char *request_msg);

Processes received enveloped authentication request, extracts the authentication request out of it.

Parameters

lecp

a LassoLecp

 

request_msg

the enveloped authentication request received

 

Returns

0 on success; or a negative value otherwise.


lasso_lecp_process_authn_response_envelope_msg ()

lasso_error_t
lasso_lecp_process_authn_response_envelope_msg
                               (LassoLecp *lecp,
                                const char *response_msg);

Processes received enveloped authentication response, extracts the authentication response out of it and stores it in response .

Parameters

lecp

a LassoLecp

 

response_msg

the enveloped authentication response received

 

Returns

0 on success; or a negative value otherwise.

Types and Values

struct LassoLecp

struct LassoLecp {
	LassoLibAuthnRequestEnvelope *authnRequestEnvelope;
	LassoLibAuthnResponseEnvelope *authnResponseEnvelope;
	char *assertionConsumerServiceURL;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/left.png0000644000000000000000000000013214404126162020335 xustar0030 mtime=1678814322.933964265 30 atime=1678814322.933964265 30 ctime=1678814322.933964265 lasso-2.8.2/docs/reference/lasso/html/left.png0000644000175000017500000000040614404126162023605 0ustar00bdauvergnebdauvergne00000000000000‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEå $$ñا “IDAT8ËÕÒ¯Áa‡ñ?ÁDAPY‘\‚$‹º[p¢+ÐÜIÐIªMlfü('Úì}MpâÙyží{Îá_ª…ž¨¤ÂÞ¥Â}œ^£‘q xZ <Æ=àYjî) <0ù4\~Ó+Púöl#Ü"ÂÕÉ—,QÏ‘ôp ÉÍIÇlswÒÆ>÷•[/]_i0‘3ÃIEND®B`‚lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSaml2AuthnContext.html0000644000000000000000000000013214404126163024111 xustar0030 mtime=1678814323.013964721 30 atime=1678814323.013964721 30 ctime=1678814323.013964721 lasso-2.8.2/docs/reference/lasso/html/LassoSaml2AuthnContext.html0000644000175000017500000001415514404126163027367 0ustar00bdauvergnebdauvergne00000000000000 LassoSaml2AuthnContext: lasso Reference Manual

LassoSaml2AuthnContext

LassoSaml2AuthnContext — <saml2:AuthnContext>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSaml2AuthnContext

Description

Figure 51. Schema fragment for saml2:AuthnContext


<complexType name="AuthnContextType">
  <sequence>
    <choice>
      <sequence>
        <element ref="saml:AuthnContextClassRef"/>
        <choice minOccurs="0">
          <element ref="saml:AuthnContextDecl"/>
          <element ref="saml:AuthnContextDeclRef"/>
        </choice>
      </sequence>
      <choice>
        <element ref="saml:AuthnContextDecl"/>
        <element ref="saml:AuthnContextDeclRef"/>
      </choice>
    </choice>
    <element ref="saml:AuthenticatingAuthority" minOccurs="0" maxOccurs="unbounded"/>
  </sequence>
</complexType>

Functions

lasso_saml2_authn_context_new ()

LassoNode *
lasso_saml2_authn_context_new (void);

Creates a new LassoSaml2AuthnContext object.

Returns

a newly created LassoSaml2AuthnContext object

Types and Values

struct LassoSaml2AuthnContext

struct LassoSaml2AuthnContext {
	/* elements */
	char *AuthnContextClassRef;
	/* XXX */ void *AuthnContextDecl;
	char *AuthnContextDeclRef;
	char *AuthenticatingAuthority;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoLibAuthnResponse.html0000644000000000000000000000013214404126163024013 xustar0030 mtime=1678814323.001964653 30 atime=1678814323.001964653 30 ctime=1678814323.001964653 lasso-2.8.2/docs/reference/lasso/html/LassoLibAuthnResponse.html0000644000175000017500000001724514404126163027274 0ustar00bdauvergnebdauvergne00000000000000 LassoLibAuthnResponse: lasso Reference Manual

LassoLibAuthnResponse

LassoLibAuthnResponse — <lib:AuthnResponse>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlpResponseAbstract
            ╰── LassoSamlpResponse
                ╰── LassoLibAuthnResponse

Description

Figure 6. Schema fragment for lib:AuthnResponse

<xs:element name="AuthnResponse" type="AuthnResponseType"/>
<xs:complexType name="AuthnResponseType">
  <xs:complexContent>
    <xs:extension base="samlp:ResponseType">
      <xs:sequence>
        <xs:element ref="Extension" minOccurs="0" maxOccurs="unbounded"/>
	<xs:element ref="ProviderID"/>
	<xs:element ref="RelayState" minOccurs="0"/>
      </xs:sequence>
      <xs:attribute ref="consent" use="optional"/>
    </xs:extension>
  </xs:complexContent>
</xs:complexType>

<xs:element name="ProviderID" type="md:entityIDType"/>
<xs:element name="RelayState" type="xs:string"/>

Functions

lasso_lib_authn_response_new ()

LassoNode *
lasso_lib_authn_response_new (char *providerID,
                              LassoLibAuthnRequest *request);

Creates a new LassoLibAuthnResponse object.

Parameters

providerID

the identity provider ID

 

request

the LassoLibAuthnRequest it is a response to

 

Returns

a newly created LassoLibAuthnResponse object

Types and Values

struct LassoLibAuthnResponse

struct LassoLibAuthnResponse {
	/* <xs:element ref="Extension" minOccurs="0" maxOccurs="unbounded"/> */
	GList *Extension; /* of xmlNode* */
	/* <xs:element ref="ProviderID"/> */
	char *ProviderID;
	/* <xs:element ref="RelayState" minOccurs="0"/> */
	char *RelayState;
	/* <xs:attribute ref="consent" use="optional"/> */
	char *consent;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoLibRequestAuthnContext.html0000644000000000000000000000013214404126163025212 xustar0030 mtime=1678814323.005964675 30 atime=1678814323.005964675 30 ctime=1678814323.005964675 lasso-2.8.2/docs/reference/lasso/html/LassoLibRequestAuthnContext.html0000644000175000017500000001531014404126163030462 0ustar00bdauvergnebdauvergne00000000000000 LassoLibRequestAuthnContext: lasso Reference Manual

LassoLibRequestAuthnContext

LassoLibRequestAuthnContext — <lib:RequestAuthnContext>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoLibRequestAuthnContext

Description

Information describing which authentication context the requester desires the identity provider to use in authenticating the Principal.

Figure 17. Schema fragment for lib:RequestAuthnContext

<xs:element name="RequestAuthnContext">
  <xs:complexType>
    <xs:sequence>
      <xs:choice>
        <xs:element name="AuthnContextClassRef" type="xs:anyURI" maxOccurs="unbounded"/>
        <xs:element name="AuthnContextStatementRef" type="xs:anyURI" maxOccurs="unbounded"/>
      </xs:choice>
      <xs:element name="AuthnContextComparison"
          type="AuthnContextComparisonType" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

Functions

lasso_lib_request_authn_context_new ()

LassoLibRequestAuthnContext *
lasso_lib_request_authn_context_new (void);

Creates a new LassoLibRequestAuthnContext object.

Returns

a newly created LassoLibRequestAuthnContext object

Types and Values

struct LassoLibRequestAuthnContext

struct LassoLibRequestAuthnContext {
	/* <xs:element name="AuthnContextClassRef" type="xs:anyURI" maxOccurs="unbounded"/> */
	GList *AuthnContextClassRef; /* of strings */
	/* <xs:element name="AuthnContextStatementRef" type="xs:anyURI" maxOccurs="unbounded"/> */
	GList *AuthnContextStatementRef; /* of strings */
	/* <xs:element name="AuthnContextComparison" type="AuthnContextComparisonType"
	 *   minOccurs="0"/> */
	char *AuthnContextComparison;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/style.css0000644000000000000000000000013214404126162020547 xustar0030 mtime=1678814322.933964265 30 atime=1678814322.933964265 30 ctime=1678814322.933964265 lasso-2.8.2/docs/reference/lasso/html/style.css0000644000175000017500000002736114404126162024030 0ustar00bdauvergnebdauvergne00000000000000body { font-family: cantarell, sans-serif; } .synopsis, .classsynopsis { /* tango:aluminium 1/2 */ background: #eeeeec; background: rgba(238, 238, 236, 0.5); border: solid 1px rgb(238, 238, 236); padding: 0.5em; } .programlisting { /* tango:sky blue 0/1 */ /* fallback for no rgba support */ background: #e6f3ff; border: solid 1px #729fcf; background: rgba(114, 159, 207, 0.1); border: solid 1px rgba(114, 159, 207, 0.2); padding: 0.5em; } .variablelist { padding: 4px; margin-left: 3em; } .variablelist td:first-child { vertical-align: top; } span.nowrap { white-space: nowrap; } div.gallery-float { float: left; padding: 10px; } div.gallery-float img { border-style: none; } div.gallery-spacer { clear: both; } a, a:visited { text-decoration: none; /* tango:sky blue 2 */ color: #3465a4; } a:hover { text-decoration: underline; /* tango:sky blue 1 */ color: #729fcf; } .function_type, .variable_type, .property_type, .signal_type, .parameter_name, .struct_member_name, .union_member_name, .define_keyword, .datatype_keyword, .typedef_keyword { text-align: right; } /* dim non-primary columns */ .c_punctuation, .function_type, .variable_type, .property_type, .signal_type, .define_keyword, .datatype_keyword, .typedef_keyword, .property_flags, .signal_flags, .parameter_annotations, .enum_member_annotations, .struct_member_annotations, .union_member_annotations { color: #888a85; } .function_type a, .function_type a:visited, .function_type a:hover, .property_type a, .property_type a:visited, .property_type a:hover, .signal_type a, .signal_type a:visited, .signal_type a:hover, .signal_flags a, .signal_flags a:visited, .signal_flags a:hover { color: #729fcf; } td p { margin: 0.25em; } div.informaltable table[border="1"], div.table table { border-collapse: collapse; border-spacing: 0px; /* tango:aluminium 3 */ border: solid 1px #babdb6; } div.informaltable table[border="1"] td, div.informaltable table th, div.table table td, div.table table th { /* tango:aluminium 3 */ border: solid 1px #babdb6; padding: 3px; vertical-align: top; } div.informaltable table[border="1"] th, div.table table th { /* tango:aluminium 2 */ background-color: #d3d7cf; } h4 { color: #555753; margin-top: 1em; margin-bottom: 1em; } hr { /* tango:aluminium 1 */ color: #d3d7cf; background: #d3d7cf; border: none 0px; height: 1px; clear: both; margin: 2.0em 0em 2.0em 0em; } dl.toc dt { padding-bottom: 0.25em; } dl.toc > dt { padding-top: 0.25em; padding-bottom: 0.25em; font-weight: bold; } dl.toc > dl { padding-bottom: 0.5em; } .parameter { font-style: normal; } .footer { padding-top: 3.5em; /* tango:aluminium 3 */ color: #babdb6; text-align: center; font-size: 80%; } .informalfigure, .figure { margin: 1em; } .informalexample, .example { margin-top: 1em; margin-bottom: 1em; } .warning { /* tango:orange 0/1 */ background: #ffeed9; background: rgba(252, 175, 62, 0.1); border-color: #ffb04f; border-color: rgba(252, 175, 62, 0.2); } .note { /* tango:chameleon 0/0.5 */ background: #d8ffb2; background: rgba(138, 226, 52, 0.1); border-color: #abf562; border-color: rgba(138, 226, 52, 0.2); } div.blockquote { border-color: #eeeeec; } .note, .warning, div.blockquote { padding: 0.5em; border-width: 1px; border-style: solid; margin: 2em; } .note p, .warning p { margin: 0; } div.warning h3.title, div.note h3.title { display: none; } p + div.section { margin-top: 1em; } div.refnamediv, div.refsynopsisdiv, div.refsect1, div.refsect2, div.toc, div.section { margin-bottom: 1em; } /* blob links */ h2 .extralinks, h3 .extralinks { float: right; /* tango:aluminium 3 */ color: #babdb6; font-size: 80%; font-weight: normal; } .lineart { color: #d3d7cf; font-weight: normal; } .annotation { /* tango:aluminium 5 */ color: #555753; font-weight: normal; } .structfield { font-style: normal; font-weight: normal; } acronym,abbr { border-bottom: 1px dotted gray; } .listing_frame { /* tango:sky blue 1 */ border: solid 1px #729fcf; border: solid 1px rgba(114, 159, 207, 0.2); padding: 0px; } .listing_lines, .listing_code { margin-top: 0px; margin-bottom: 0px; padding: 0.5em; } .listing_lines { /* tango:sky blue 0.5 */ background: #a6c5e3; background: rgba(114, 159, 207, 0.2); /* tango:aluminium 6 */ color: #2e3436; } .listing_code { /* tango:sky blue 0 */ background: #e6f3ff; background: rgba(114, 159, 207, 0.1); } .listing_code .programlisting { /* override from previous */ border: none 0px; padding: 0px; background: none; } .listing_lines pre, .listing_code pre { margin: 0px; } @media screen { /* these have a as a first child, but since there are no parent selectors * we can't use that. */ a.footnote { position: relative; top: 0em ! important; } /* this is needed so that the local anchors are displayed below the naviagtion */ div.footnote a[name], div.refnamediv a[name], div.refsect1 a[name], div.refsect2 a[name], div.index a[name], div.glossary a[name], div.sect1 a[name] { display: inline-block; position: relative; top:-5em; } /* this seems to be a bug in the xsl style sheets when generating indexes */ div.index div.index { top: 0em; } /* make space for the fixed navigation bar and add space at the bottom so that * link targets appear somewhat close to top */ body { padding-top: 2.5em; padding-bottom: 500px; max-width: 60em; } p { max-width: 60em; } /* style and size the navigation bar */ table.navigation#top { position: fixed; background: #e2e2e2; border-bottom: solid 1px #babdb6; border-spacing: 5px; margin-top: 0; margin-bottom: 0; top: 0; left: 0; z-index: 10; } table.navigation#top td { padding-left: 6px; padding-right: 6px; } .navigation a, .navigation a:visited { /* tango:sky blue 3 */ color: #204a87; } .navigation a:hover { /* tango:sky blue 2 */ color: #3465a4; } td.shortcuts { /* tango:sky blue 2 */ color: #3465a4; font-size: 80%; white-space: nowrap; } td.shortcuts .dim { color: #babdb6; } .navigation .title { font-size: 80%; max-width: none; margin: 0px; font-weight: normal; } } @media screen and (min-width: 60em) { /* screen larger than 60em */ body { margin: auto; } } @media screen and (max-width: 60em) { /* screen less than 60em */ #nav_hierarchy { display: none; } #nav_interfaces { display: none; } #nav_prerequisites { display: none; } #nav_derived_interfaces { display: none; } #nav_implementations { display: none; } #nav_child_properties { display: none; } #nav_style_properties { display: none; } #nav_index { display: none; } #nav_glossary { display: none; } .gallery_image { display: none; } .property_flags { display: none; } .signal_flags { display: none; } .parameter_annotations { display: none; } .enum_member_annotations { display: none; } .struct_member_annotations { display: none; } .union_member_annotations { display: none; } /* now that a column is hidden, optimize space */ col.parameters_name { width: auto; } col.parameters_description { width: auto; } col.struct_members_name { width: auto; } col.struct_members_description { width: auto; } col.enum_members_name { width: auto; } col.enum_members_description { width: auto; } col.union_members_name { width: auto; } col.union_members_description { width: auto; } .listing_lines { display: none; } } @media print { table.navigation { visibility: collapse; display: none; } div.titlepage table.navigation { visibility: visible; display: table; background: #e2e2e2; border: solid 1px #babdb6; margin-top: 0; margin-bottom: 0; top: 0; left: 0; height: 3em; } } pre { line-height: 125%; } td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .hll { background-color: #ffffcc } .c { color: #3D7B7B; font-style: italic } /* Comment */ .err { border: 1px solid #FF0000 } /* Error */ .k { color: #008000; font-weight: bold } /* Keyword */ .o { color: #666666 } /* Operator */ .ch { color: #3D7B7B; font-style: italic } /* Comment.Hashbang */ .cm { color: #3D7B7B; font-style: italic } /* Comment.Multiline */ .cp { color: #9C6500 } /* Comment.Preproc */ .cpf { color: #3D7B7B; font-style: italic } /* Comment.PreprocFile */ .c1 { color: #3D7B7B; font-style: italic } /* Comment.Single */ .cs { color: #3D7B7B; font-style: italic } /* Comment.Special */ .gd { color: #A00000 } /* Generic.Deleted */ .ge { font-style: italic } /* Generic.Emph */ .gr { color: #E40000 } /* Generic.Error */ .gh { color: #000080; font-weight: bold } /* Generic.Heading */ .gi { color: #008400 } /* Generic.Inserted */ .go { color: #717171 } /* Generic.Output */ .gp { color: #000080; font-weight: bold } /* Generic.Prompt */ .gs { font-weight: bold } /* Generic.Strong */ .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ .gt { color: #0044DD } /* Generic.Traceback */ .kc { color: #008000; font-weight: bold } /* Keyword.Constant */ .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */ .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */ .kp { color: #008000 } /* Keyword.Pseudo */ .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */ .kt { color: #B00040 } /* Keyword.Type */ .m { color: #666666 } /* Literal.Number */ .s { color: #BA2121 } /* Literal.String */ .na { color: #687822 } /* Name.Attribute */ .nb { color: #008000 } /* Name.Builtin */ .nc { color: #0000FF; font-weight: bold } /* Name.Class */ .no { color: #880000 } /* Name.Constant */ .nd { color: #AA22FF } /* Name.Decorator */ .ni { color: #717171; font-weight: bold } /* Name.Entity */ .ne { color: #CB3F38; font-weight: bold } /* Name.Exception */ .nf { color: #0000FF } /* Name.Function */ .nl { color: #767600 } /* Name.Label */ .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */ .nt { color: #008000; font-weight: bold } /* Name.Tag */ .nv { color: #19177C } /* Name.Variable */ .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */ .w { color: #bbbbbb } /* Text.Whitespace */ .mb { color: #666666 } /* Literal.Number.Bin */ .mf { color: #666666 } /* Literal.Number.Float */ .mh { color: #666666 } /* Literal.Number.Hex */ .mi { color: #666666 } /* Literal.Number.Integer */ .mo { color: #666666 } /* Literal.Number.Oct */ .sa { color: #BA2121 } /* Literal.String.Affix */ .sb { color: #BA2121 } /* Literal.String.Backtick */ .sc { color: #BA2121 } /* Literal.String.Char */ .dl { color: #BA2121 } /* Literal.String.Delimiter */ .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */ .s2 { color: #BA2121 } /* Literal.String.Double */ .se { color: #AA5D1F; font-weight: bold } /* Literal.String.Escape */ .sh { color: #BA2121 } /* Literal.String.Heredoc */ .si { color: #A45A77; font-weight: bold } /* Literal.String.Interpol */ .sx { color: #008000 } /* Literal.String.Other */ .sr { color: #A45A77 } /* Literal.String.Regex */ .s1 { color: #BA2121 } /* Literal.String.Single */ .ss { color: #19177C } /* Literal.String.Symbol */ .bp { color: #008000 } /* Name.Builtin.Pseudo */ .fm { color: #0000FF } /* Name.Function.Magic */ .vc { color: #19177C } /* Name.Variable.Class */ .vg { color: #19177C } /* Name.Variable.Global */ .vi { color: #19177C } /* Name.Variable.Instance */ .vm { color: #19177C } /* Name.Variable.Magic */ .il { color: #666666 } /* Literal.Number.Integer.Long */lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoLibNameIdentifierMappingRequest.html0000644000000000000000000000013214404126163026765 xustar0030 mtime=1678814323.005964675 30 atime=1678814323.005964675 30 ctime=1678814323.005964675 lasso-2.8.2/docs/reference/lasso/html/LassoLibNameIdentifierMappingRequest.html0000644000175000017500000002630214404126163032240 0ustar00bdauvergnebdauvergne00000000000000 LassoLibNameIdentifierMappingRequest: lasso Reference Manual

LassoLibNameIdentifierMappingRequest

LassoLibNameIdentifierMappingRequest — <lib:NameIdentifierMappingRequest>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlpRequestAbstract
            ╰── LassoLibNameIdentifierMappingRequest

Description

Figure 13. Schema fragment for lib:NameIdentifierMappingRequest

<xs:element name="NameIdentifierMappingRequest" type="NameIdentifierMappingRequestType"/>
<xs:complexType name="NameIdentifierMappingRequestType">
  <xs:complexContent>
    <xs:extension base="samlp:RequestAbstractType">
      <xs:sequence>
        <xs:element ref="Extension" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="ProviderID"/>
        <xs:element ref="saml:NameIdentifier"/>
        <xs:element name="TargetNamespace" type="md:entityIDType"/>
      </xs:sequence>
      <xs:attribute ref="consent" use="optional"/>
    </xs:extension>
  </xs:complexContent>
</xs:complexType>

<xs:element name="ProviderID" type="md:entityIDType"/>

Functions

lasso_lib_name_identifier_mapping_request_new ()

LassoNode *
lasso_lib_name_identifier_mapping_request_new
                               (void);

Creates a new LassoLibNameIdentifierMappingRequest object.

Returns

a newly created LassoLibNameIdentifierMappingRequest object


lasso_lib_name_identifier_mapping_request_new_full ()

LassoNode *
lasso_lib_name_identifier_mapping_request_new_full
                               (char *providerID,
                                LassoSamlNameIdentifier *nameIdentifier,
                                const char *targetNamespace,
                                LassoSignatureType sign_type,
                                LassoSignatureMethod sign_method);

Creates a new LassoLibNameIdentifierMappingRequest object and initializes it with the parameters. It also setups the signature on the request object, you must preceise the signing key later.

Parameters

providerID

the provider ID requesting the name identifier mapping

 

nameIdentifier

a LassoSamlNameIdentifier object

 

targetNamespace

an URI for the target namespace

 

sign_type

a LassoSignatureType value

 

sign_method

a LassoSignatureMethod value

 

Returns

a newly created LassoLibNameIdentifierMappingRequest object

Types and Values

struct LassoLibNameIdentifierMappingRequest

struct LassoLibNameIdentifierMappingRequest {
	/* <xs:element ref="Extension" minOccurs="0" maxOccurs="unbounded"/> */
	GList *Extension; /* of xmlNode* */
	/* <xs:element ref="ProviderID"/> */
	char *ProviderID;
	/* <xs:element ref="saml:NameIdentifier"/> */
	LassoSamlNameIdentifier *NameIdentifier;
	/* <xs:element name="TargetNamespace" type="md:entityIDType"/> */
	char *TargetNamespace;
	/* <xs:attribute ref="consent" use="optional"/> */
	char *consent;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoLibStatusResponse.html0000644000000000000000000000013214404126163024217 xustar0030 mtime=1678814323.005964675 30 atime=1678814323.005964675 30 ctime=1678814323.005964675 lasso-2.8.2/docs/reference/lasso/html/LassoLibStatusResponse.html0000644000175000017500000001532414404126163027474 0ustar00bdauvergnebdauvergne00000000000000 LassoLibStatusResponse: lasso Reference Manual

LassoLibStatusResponse

LassoLibStatusResponse — <lib:StatusResponse>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlpResponseAbstract
            ╰── LassoLibStatusResponse
                ├── LassoLibLogoutResponse
                ╰── LassoLibRegisterNameIdentifierResponse

Description

Figure 19. Schema fragment for lib:StatusResponse

<xs:complexType name="StatusResponseType">
  <xs:complexContent>
    <xs:extension base="samlp:ResponseAbstractType">
      <xs:sequence>
        <xs:element ref="Extension" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="ProviderID"/>
        <xs:element ref="samlp:Status"/>
        <xs:element ref="RelayState" minOccurs="0"/>
      </xs:sequence>
    </xs:extension>
  </xs:complexContent>
</xs:complexType>

<xs:element name="ProviderID" type="md:entityIDType"/>
<xs:element name="RelayState" type="xs:string"/>

Functions

lasso_lib_status_response_new ()

LassoNode *
lasso_lib_status_response_new (void);

Creates a new LassoLibStatusResponse object.

Returns

a newly created LassoLibStatusResponse object

Types and Values

struct LassoLibStatusResponse

struct LassoLibStatusResponse {
	/* <xs:element ref="Extension" minOccurs="0" maxOccurs="unbounded"/> */
	GList *Extension; /* of xmlNode* */
	/* <xs:element ref="ProviderID"/> */
	char *ProviderID;
	/* <xs:element ref="samlp:Status"/> */
	LassoSamlpStatus *Status;
	/* <xs:element ref="RelayState" minOccurs="0"/> */
	char *RelayState;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoLibIDPList.html0000644000000000000000000000013214404126163022465 xustar0030 mtime=1678814323.001964653 30 atime=1678814323.001964653 30 ctime=1678814323.005964675 lasso-2.8.2/docs/reference/lasso/html/LassoLibIDPList.html0000644000175000017500000001275414404126163025746 0ustar00bdauvergnebdauvergne00000000000000 LassoLibIDPList: lasso Reference Manual

LassoLibIDPList

LassoLibIDPList — <lib:IDPList>

Functions

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoLibIDPList

Description

Figure 10. Schema fragment for lib:IDPList

<xs:element name="IDPList" type="IDPListType"/>
<xs:complexType name="IDPListType">
  <xs:sequence>
    <xs:element ref="IDPEntries"/>
    <xs:element ref="GetComplete" minOccurs="0"/>
  </xs:sequence>
</xs:complexType>

<xs:element name="GetComplete" type="xs:anyURI"/>

Functions

lasso_lib_idp_list_new ()

LassoNode *
lasso_lib_idp_list_new (void);

Creates a new LassoLibIDPList object.

Returns

a newly created LassoLibIDPList object

Types and Values

struct LassoLibIDPList

struct LassoLibIDPList {
	/* <xs:element ref="IDPEntries"/> */
	LassoLibIDPEntries *IDPEntries;
	/* <xs:element ref="GetComplete" minOccurs="0"/> */
	char *GetComplete;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/lasso-Error-Codes.html0000644000000000000000000000012714404126163023033 xustar0029 mtime=1678814323.04196488 29 atime=1678814323.04196488 29 ctime=1678814323.04196488 lasso-2.8.2/docs/reference/lasso/html/lasso-Error-Codes.html0000644000175000017500000016653614404126163026320 0ustar00bdauvergnebdauvergne00000000000000 Error Codes: lasso Reference Manual

Error Codes

Error Codes — Error codes returned by lasso functions

Types and Values

#define LASSO_ERROR_UNDEFINED
#define LASSO_ERROR_UNIMPLEMENTED
#define LASSO_ERROR_OUT_OF_MEMORY
#define LASSO_ERROR_CAST_FAILED
#define LASSO_XML_ERROR_NODE_NOT_FOUND
#define LASSO_XML_ERROR_NODE_CONTENT_NOT_FOUND
#define LASSO_XML_ERROR_ATTR_NOT_FOUND
#define LASSO_XML_ERROR_ATTR_VALUE_NOT_FOUND
#define LASSO_XML_ERROR_INVALID_FILE
#define LASSO_XML_ERROR_OBJECT_CONSTRUCTION_FAILED
#define LASSO_XML_ERROR_MISSING_NAMESPACE
#define LASSO_DS_ERROR_SIGNATURE_NOT_FOUND
#define LASSO_DS_ERROR_INVALID_SIGNATURE
#define LASSO_DS_ERROR_SIGNATURE_TMPL_CREATION_FAILED
#define LASSO_DS_ERROR_CONTEXT_CREATION_FAILED
#define LASSO_DS_ERROR_PUBLIC_KEY_LOAD_FAILED
#define LASSO_DS_ERROR_PRIVATE_KEY_LOAD_FAILED
#define LASSO_DS_ERROR_CERTIFICATE_LOAD_FAILED
#define LASSO_DS_ERROR_SIGNATURE_FAILED
#define LASSO_DS_ERROR_KEYS_MNGR_CREATION_FAILED
#define LASSO_DS_ERROR_KEYS_MNGR_INIT_FAILED
#define LASSO_DS_ERROR_SIGNATURE_VERIFICATION_FAILED
#define LASSO_DS_ERROR_CA_CERT_CHAIN_LOAD_FAILED
#define LASSO_DS_ERROR_INVALID_SIGALG
#define LASSO_DS_ERROR_DIGEST_COMPUTE_FAILED
#define LASSO_DS_ERROR_SIGNATURE_TEMPLATE_NOT_FOUND
#define LASSO_DS_ERROR_TOO_MUCH_REFERENCES
#define LASSO_DS_ERROR_INVALID_REFERENCE_FOR_SAML
#define LASSO_DS_ERROR_DECRYPTION_FAILED
#define LASSO_DS_ERROR_ENCRYPTION_FAILED
#define LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND
#define LASSO_SERVER_ERROR_ADD_PROVIDER_FAILED
#define LASSO_SERVER_ERROR_ADD_PROVIDER_PROTOCOL_MISMATCH
#define LASSO_SERVER_ERROR_SET_ENCRYPTION_PRIVATE_KEY_FAILED
#define LASSO_LOGOUT_ERROR_UNSUPPORTED_PROFILE
#define LASSO_LOGOUT_ERROR_REQUEST_DENIED
#define LASSO_LOGOUT_ERROR_FEDERATION_NOT_FOUND
#define LASSO_LOGOUT_ERROR_UNKNOWN_PRINCIPAL
#define LASSO_PROFILE_ERROR_INVALID_QUERY
#define LASSO_PROFILE_ERROR_INVALID_POST_MSG
#define LASSO_PROFILE_ERROR_INVALID_SOAP_MSG
#define LASSO_PROFILE_ERROR_MISSING_REQUEST
#define LASSO_PROFILE_ERROR_INVALID_HTTP_METHOD
#define LASSO_PROFILE_ERROR_INVALID_PROTOCOLPROFILE
#define LASSO_PROFILE_ERROR_INVALID_MSG
#define LASSO_PROFILE_ERROR_MISSING_REMOTE_PROVIDERID
#define LASSO_PROFILE_ERROR_UNSUPPORTED_PROFILE
#define LASSO_PROFILE_ERROR_UNKNOWN_PROFILE_URL
#define LASSO_PROFILE_ERROR_IDENTITY_NOT_FOUND
#define LASSO_PROFILE_ERROR_FEDERATION_NOT_FOUND
#define LASSO_PROFILE_ERROR_NAME_IDENTIFIER_NOT_FOUND
#define LASSO_PROFILE_ERROR_BUILDING_QUERY_FAILED
#define LASSO_PROFILE_ERROR_BUILDING_REQUEST_FAILED
#define LASSO_PROFILE_ERROR_BUILDING_MESSAGE_FAILED
#define LASSO_PROFILE_ERROR_BUILDING_RESPONSE_FAILED
#define LASSO_PROFILE_ERROR_SESSION_NOT_FOUND
#define LASSO_PROFILE_ERROR_BAD_IDENTITY_DUMP
#define LASSO_PROFILE_ERROR_BAD_SESSION_DUMP
#define LASSO_PROFILE_ERROR_MISSING_RESPONSE
#define LASSO_PROFILE_ERROR_MISSING_STATUS_CODE
#define LASSO_PROFILE_ERROR_MISSING_ARTIFACT
#define LASSO_PROFILE_ERROR_MISSING_RESOURCE_OFFERING
#define LASSO_PROFILE_ERROR_MISSING_SERVICE_DESCRIPTION
#define LASSO_PROFILE_ERROR_MISSING_SERVICE_TYPE
#define LASSO_PROFILE_ERROR_MISSING_ASSERTION
#define LASSO_PROFILE_ERROR_MISSING_SUBJECT
#define LASSO_PROFILE_ERROR_MISSING_NAME_IDENTIFIER
#define LASSO_PROFILE_ERROR_INVALID_ARTIFACT
#define LASSO_PROFILE_ERROR_MISSING_ENCRYPTION_PRIVATE_KEY
#define LASSO_PROFILE_ERROR_STATUS_NOT_SUCCESS
#define LASSO_PROFILE_ERROR_MISSING_ISSUER
#define LASSO_PROFILE_ERROR_MISSING_SERVICE_INSTANCE
#define LASSO_PROFILE_ERROR_MISSING_ENDPOINT_REFERENCE
#define LASSO_PROFILE_ERROR_MISSING_ENDPOINT_REFERENCE_ADDRESS
#define LASSO_PROFILE_ERROR_INVALID_ISSUER
#define LASSO_PROFILE_ERROR_MISSING_SERVER
#define LASSO_PROFILE_ERROR_UNKNOWN_PROVIDER
#define LASSO_PROFILE_ERROR_CANNOT_VERIFY_SIGNATURE
#define LASSO_PROFILE_ERROR_CANNOT_FIND_A_PROVIDER
#define LASSO_PROFILE_ERROR_RESPONSE_DOES_NOT_MATCH_REQUEST
#define LASSO_PROFILE_ERROR_INVALID_REQUEST
#define LASSO_PROFILE_ERROR_INVALID_RESPONSE
#define LASSO_PROFILE_ERROR_UNSUPPORTED_BINDING
#define LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ
#define LASSO_PARAM_ERROR_INVALID_VALUE
#define LASSO_PARAM_ERROR_CHECK_FAILED
#define LASSO_PARAM_ERROR_NON_INITIALIZED_OBJECT
#define LASSO_LOGIN_ERROR_FEDERATION_NOT_FOUND
#define LASSO_LOGIN_ERROR_CONSENT_NOT_OBTAINED
#define LASSO_LOGIN_ERROR_INVALID_NAMEIDPOLICY
#define LASSO_LOGIN_ERROR_REQUEST_DENIED
#define LASSO_LOGIN_ERROR_INVALID_SIGNATURE
#define LASSO_LOGIN_ERROR_UNSIGNED_AUTHN_REQUEST
#define LASSO_LOGIN_ERROR_STATUS_NOT_SUCCESS
#define LASSO_LOGIN_ERROR_UNKNOWN_PRINCIPAL
#define LASSO_LOGIN_ERROR_NO_DEFAULT_ENDPOINT
#define LASSO_LOGIN_ERROR_ASSERTION_REPLAY
#define LASSO_LOGIN_ERROR_ASSERTION_DOES_NOT_MATCH_REQUEST_ID
#define LASSO_DEFEDERATION_ERROR_MISSING_NAME_IDENTIFIER
#define LASSO_SOAP_ERROR_REDIRECT_REQUEST_FAULT
#define LASSO_SOAP_ERROR_MISSING_ENVELOPE
#define LASSO_SOAP_ERROR_MISSING_HEADER
#define LASSO_SOAP_ERROR_MISSING_BODY
#define LASSO_SOAP_ERROR_MISSING_SOAP_FAULT_DETAIL
#define LASSO_REGISTRY_ERROR_KEY_EXISTS
#define LASSO_PROVIDER_ERROR_MISSING_PUBLIC_KEY

Includes

#include <lasso/errors.h>

Description

Most functions in lasso return signed integer error codes. The convention is to give:

  • a negative error code for programming or runtime recoverable errors,

  • a positive error code for Liberty Alliance recoverable errors.

Beware that this convention is not always well followed.

Functions

Types and Values

LASSO_ERROR_UNDEFINED

#define LASSO_ERROR_UNDEFINED -1

Undefined error.


LASSO_ERROR_UNIMPLEMENTED

#define LASSO_ERROR_UNIMPLEMENTED -2

Unimplemented part of Lasso.


LASSO_ERROR_OUT_OF_MEMORY

#define LASSO_ERROR_OUT_OF_MEMORY -3

Out of memory


LASSO_ERROR_CAST_FAILED

#define LASSO_ERROR_CAST_FAILED -4

Expected GObject class was not found, cast failed


LASSO_XML_ERROR_NODE_NOT_FOUND

#define LASSO_XML_ERROR_NODE_NOT_FOUND -10

Unable to get child of element.


LASSO_XML_ERROR_NODE_CONTENT_NOT_FOUND

#define LASSO_XML_ERROR_NODE_CONTENT_NOT_FOUND -11

Unable to get content of element.


LASSO_XML_ERROR_ATTR_NOT_FOUND

#define LASSO_XML_ERROR_ATTR_NOT_FOUND -12

Unable to get attribute of element.


LASSO_XML_ERROR_ATTR_VALUE_NOT_FOUND

#define LASSO_XML_ERROR_ATTR_VALUE_NOT_FOUND -13

Unable to get attribute value of element.


LASSO_XML_ERROR_INVALID_FILE

#define LASSO_XML_ERROR_INVALID_FILE -14

Invalid XML file


LASSO_XML_ERROR_OBJECT_CONSTRUCTION_FAILED

#define LASSO_XML_ERROR_OBJECT_CONSTRUCTION_FAILED     -15

Construction of an object from an XML document failed.


LASSO_XML_ERROR_MISSING_NAMESPACE

#define LASSO_XML_ERROR_MISSING_NAMESPACE              -16

A namespace is missing.


LASSO_DS_ERROR_SIGNATURE_NOT_FOUND

#define LASSO_DS_ERROR_SIGNATURE_NOT_FOUND 101

Signature element not found.


LASSO_DS_ERROR_INVALID_SIGNATURE

#define LASSO_DS_ERROR_INVALID_SIGNATURE 102

Invalid signature.


LASSO_DS_ERROR_SIGNATURE_TMPL_CREATION_FAILED

#define LASSO_DS_ERROR_SIGNATURE_TMPL_CREATION_FAILED -103

LASSO_DS_ERROR_CONTEXT_CREATION_FAILED

#define LASSO_DS_ERROR_CONTEXT_CREATION_FAILED -104

Failed to create signature context.


LASSO_DS_ERROR_PUBLIC_KEY_LOAD_FAILED

#define LASSO_DS_ERROR_PUBLIC_KEY_LOAD_FAILED -105

Failed to load public key.


LASSO_DS_ERROR_PRIVATE_KEY_LOAD_FAILED

#define LASSO_DS_ERROR_PRIVATE_KEY_LOAD_FAILED -106

Failed to load private key.


LASSO_DS_ERROR_CERTIFICATE_LOAD_FAILED

#define LASSO_DS_ERROR_CERTIFICATE_LOAD_FAILED -107

Failed to load certificate.


LASSO_DS_ERROR_SIGNATURE_FAILED

#define LASSO_DS_ERROR_SIGNATURE_FAILED -108

Failed to sign the node.


LASSO_DS_ERROR_KEYS_MNGR_CREATION_FAILED

#define LASSO_DS_ERROR_KEYS_MNGR_CREATION_FAILED -109

Failed to create keys manager.


LASSO_DS_ERROR_KEYS_MNGR_INIT_FAILED

#define LASSO_DS_ERROR_KEYS_MNGR_INIT_FAILED -110

Failed to initialize keys manager.


LASSO_DS_ERROR_SIGNATURE_VERIFICATION_FAILED

#define LASSO_DS_ERROR_SIGNATURE_VERIFICATION_FAILED -111

Failed to verify signature.


LASSO_DS_ERROR_CA_CERT_CHAIN_LOAD_FAILED

#define LASSO_DS_ERROR_CA_CERT_CHAIN_LOAD_FAILED      -112

LASSO_DS_ERROR_INVALID_SIGALG

#define LASSO_DS_ERROR_INVALID_SIGALG -113

Invalid signature algorithm.


LASSO_DS_ERROR_DIGEST_COMPUTE_FAILED

#define LASSO_DS_ERROR_DIGEST_COMPUTE_FAILED          -114

Computation of an SHA1 digest failed.


LASSO_DS_ERROR_SIGNATURE_TEMPLATE_NOT_FOUND

#define LASSO_DS_ERROR_SIGNATURE_TEMPLATE_NOT_FOUND -115

Signature template has not been found.


LASSO_DS_ERROR_TOO_MUCH_REFERENCES

#define LASSO_DS_ERROR_TOO_MUCH_REFERENCES -116

SAML signature must contain only one reference


LASSO_DS_ERROR_INVALID_REFERENCE_FOR_SAML

#define LASSO_DS_ERROR_INVALID_REFERENCE_FOR_SAML -117

SAML signature reference must be to a Request, a Reponse or an Assertion ID attribute


LASSO_DS_ERROR_DECRYPTION_FAILED

#define LASSO_DS_ERROR_DECRYPTION_FAILED 118

Decryption of an encrypted node failed


LASSO_DS_ERROR_ENCRYPTION_FAILED

#define LASSO_DS_ERROR_ENCRYPTION_FAILED -119

Creation of an encrypted node failed


LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND

#define LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND -201

The identifier of a provider is unknown to LassoServer. To register a provider in a LassoServer object, you must use the methods lasso_server_add_provider() or lasso_server_add_provider_from_buffer().


LASSO_SERVER_ERROR_ADD_PROVIDER_FAILED

#define LASSO_SERVER_ERROR_ADD_PROVIDER_FAILED -202

Failed to add new provider.


LASSO_SERVER_ERROR_ADD_PROVIDER_PROTOCOL_MISMATCH

#define LASSO_SERVER_ERROR_ADD_PROVIDER_PROTOCOL_MISMATCH -203

Failed to add new provider (protocol mismatch). It means that you tried to add a provider supporting a protocol imcompatible with the protocol declared for your LassoServer, for example metadata for ID-FF 1.2 with metadata for SAML 2.0.


LASSO_SERVER_ERROR_SET_ENCRYPTION_PRIVATE_KEY_FAILED

#define LASSO_SERVER_ERROR_SET_ENCRYPTION_PRIVATE_KEY_FAILED 204

Failed to load encryption private key.


LASSO_LOGOUT_ERROR_UNSUPPORTED_PROFILE

#define LASSO_LOGOUT_ERROR_UNSUPPORTED_PROFILE -301

Unsupported protocol profile


LASSO_LOGOUT_ERROR_REQUEST_DENIED

#define LASSO_LOGOUT_ERROR_REQUEST_DENIED 302

Request denied by identity provider


LASSO_LOGOUT_ERROR_FEDERATION_NOT_FOUND

#define LASSO_LOGOUT_ERROR_FEDERATION_NOT_FOUND 303

Federation not found on logout


LASSO_LOGOUT_ERROR_UNKNOWN_PRINCIPAL

#define LASSO_LOGOUT_ERROR_UNKNOWN_PRINCIPAL 304

Unknown principal on logout


LASSO_PROFILE_ERROR_INVALID_QUERY

#define LASSO_PROFILE_ERROR_INVALID_QUERY -401

Invalid URL query


LASSO_PROFILE_ERROR_INVALID_POST_MSG

#define LASSO_PROFILE_ERROR_INVALID_POST_MSG -402

Invalid POST message


LASSO_PROFILE_ERROR_INVALID_SOAP_MSG

#define LASSO_PROFILE_ERROR_INVALID_SOAP_MSG -403

Invalid SOAP message


LASSO_PROFILE_ERROR_MISSING_REQUEST

#define LASSO_PROFILE_ERROR_MISSING_REQUEST -404

Missing request


LASSO_PROFILE_ERROR_INVALID_HTTP_METHOD

#define LASSO_PROFILE_ERROR_INVALID_HTTP_METHOD -405

Invalid HTTP method


LASSO_PROFILE_ERROR_INVALID_PROTOCOLPROFILE

#define LASSO_PROFILE_ERROR_INVALID_PROTOCOLPROFILE -406

Invalid protocol profile


LASSO_PROFILE_ERROR_INVALID_MSG

#define LASSO_PROFILE_ERROR_INVALID_MSG -407

Invalid message


LASSO_PROFILE_ERROR_MISSING_REMOTE_PROVIDERID

#define LASSO_PROFILE_ERROR_MISSING_REMOTE_PROVIDERID -408

ProviderID not found


LASSO_PROFILE_ERROR_UNSUPPORTED_PROFILE

#define LASSO_PROFILE_ERROR_UNSUPPORTED_PROFILE -409

Unsupported protocol profile


LASSO_PROFILE_ERROR_UNKNOWN_PROFILE_URL

#define LASSO_PROFILE_ERROR_UNKNOWN_PROFILE_URL -410

Unable to find Profile URL in metadata


LASSO_PROFILE_ERROR_IDENTITY_NOT_FOUND

#define LASSO_PROFILE_ERROR_IDENTITY_NOT_FOUND -411

Identity not found


LASSO_PROFILE_ERROR_FEDERATION_NOT_FOUND

#define LASSO_PROFILE_ERROR_FEDERATION_NOT_FOUND -412

Federation not found


LASSO_PROFILE_ERROR_NAME_IDENTIFIER_NOT_FOUND

#define LASSO_PROFILE_ERROR_NAME_IDENTIFIER_NOT_FOUND -413

Name identifier not found


LASSO_PROFILE_ERROR_BUILDING_QUERY_FAILED

#define LASSO_PROFILE_ERROR_BUILDING_QUERY_FAILED -414

Error building request QUERY url


LASSO_PROFILE_ERROR_BUILDING_REQUEST_FAILED

#define LASSO_PROFILE_ERROR_BUILDING_REQUEST_FAILED -415

Error building request object


LASSO_PROFILE_ERROR_BUILDING_MESSAGE_FAILED

#define LASSO_PROFILE_ERROR_BUILDING_MESSAGE_FAILED -416

Error building request message


LASSO_PROFILE_ERROR_BUILDING_RESPONSE_FAILED

#define LASSO_PROFILE_ERROR_BUILDING_RESPONSE_FAILED -417

Error building response object


LASSO_PROFILE_ERROR_SESSION_NOT_FOUND

#define LASSO_PROFILE_ERROR_SESSION_NOT_FOUND -418

Session not found


LASSO_PROFILE_ERROR_BAD_IDENTITY_DUMP

#define LASSO_PROFILE_ERROR_BAD_IDENTITY_DUMP -419

Failed to create identity from dump


LASSO_PROFILE_ERROR_BAD_SESSION_DUMP

#define LASSO_PROFILE_ERROR_BAD_SESSION_DUMP -420

Failed to create session from dump


LASSO_PROFILE_ERROR_MISSING_RESPONSE

#define LASSO_PROFILE_ERROR_MISSING_RESPONSE -421

Missing response


LASSO_PROFILE_ERROR_MISSING_STATUS_CODE

#define LASSO_PROFILE_ERROR_MISSING_STATUS_CODE -422

Missing status code


LASSO_PROFILE_ERROR_MISSING_ARTIFACT

#define LASSO_PROFILE_ERROR_MISSING_ARTIFACT -423

Missing SAML artifact


LASSO_PROFILE_ERROR_MISSING_RESOURCE_OFFERING

#define LASSO_PROFILE_ERROR_MISSING_RESOURCE_OFFERING 424

Missing ressource offering


LASSO_PROFILE_ERROR_MISSING_SERVICE_DESCRIPTION

#define LASSO_PROFILE_ERROR_MISSING_SERVICE_DESCRIPTION 425

Missing service description


LASSO_PROFILE_ERROR_MISSING_SERVICE_TYPE

#define LASSO_PROFILE_ERROR_MISSING_SERVICE_TYPE 426

Missing service type


LASSO_PROFILE_ERROR_MISSING_ASSERTION

#define LASSO_PROFILE_ERROR_MISSING_ASSERTION -427

When looking for an assertion we did not found it.


LASSO_PROFILE_ERROR_MISSING_SUBJECT

#define LASSO_PROFILE_ERROR_MISSING_SUBJECT -428

Missing subject


LASSO_PROFILE_ERROR_MISSING_NAME_IDENTIFIER

#define LASSO_PROFILE_ERROR_MISSING_NAME_IDENTIFIER -429

Missing name identifier


LASSO_PROFILE_ERROR_INVALID_ARTIFACT

#define LASSO_PROFILE_ERROR_INVALID_ARTIFACT -430

Invalid artifact


LASSO_PROFILE_ERROR_MISSING_ENCRYPTION_PRIVATE_KEY

#define LASSO_PROFILE_ERROR_MISSING_ENCRYPTION_PRIVATE_KEY -431

Found an encrypted element but encryption private key is not set


LASSO_PROFILE_ERROR_STATUS_NOT_SUCCESS

#define LASSO_PROFILE_ERROR_STATUS_NOT_SUCCESS -432

Status code is not success


LASSO_PROFILE_ERROR_MISSING_ISSUER

#define LASSO_PROFILE_ERROR_MISSING_ISSUER -433

Missing issuer


LASSO_PROFILE_ERROR_MISSING_SERVICE_INSTANCE

#define LASSO_PROFILE_ERROR_MISSING_SERVICE_INSTANCE -434

Missing service instance


LASSO_PROFILE_ERROR_MISSING_ENDPOINT_REFERENCE

#define LASSO_PROFILE_ERROR_MISSING_ENDPOINT_REFERENCE -435

Missing endpoint reference


LASSO_PROFILE_ERROR_MISSING_ENDPOINT_REFERENCE_ADDRESS

#define LASSO_PROFILE_ERROR_MISSING_ENDPOINT_REFERENCE_ADDRESS -436

Missing endpoint reference address


LASSO_PROFILE_ERROR_INVALID_ISSUER

#define LASSO_PROFILE_ERROR_INVALID_ISSUER -437

Assertion issuer is not the same as the requested issuer


LASSO_PROFILE_ERROR_MISSING_SERVER

#define LASSO_PROFILE_ERROR_MISSING_SERVER -438

No server object set in the profile


LASSO_PROFILE_ERROR_UNKNOWN_PROVIDER

#define LASSO_PROFILE_ERROR_UNKNOWN_PROVIDER 439

The issuer of the message is unknown to us

Parameters

Deprecated

Since 2.2.3

 

LASSO_PROFILE_ERROR_CANNOT_VERIFY_SIGNATURE

#define LASSO_PROFILE_ERROR_CANNOT_VERIFY_SIGNATURE 440

The profile cannot verify a signature on the message


LASSO_PROFILE_ERROR_CANNOT_FIND_A_PROVIDER

#define LASSO_PROFILE_ERROR_CANNOT_FIND_A_PROVIDER -441

Profile was called without a specific provider and we cannot find one.


LASSO_PROFILE_ERROR_RESPONSE_DOES_NOT_MATCH_REQUEST

#define LASSO_PROFILE_ERROR_RESPONSE_DOES_NOT_MATCH_REQUEST -442

Received response does not refer to the request sent


LASSO_PROFILE_ERROR_INVALID_REQUEST

#define LASSO_PROFILE_ERROR_INVALID_REQUEST 443

Received request is not of the expected type.


LASSO_PROFILE_ERROR_INVALID_RESPONSE

#define LASSO_PROFILE_ERROR_INVALID_RESPONSE 444

LASSO_PROFILE_ERROR_UNSUPPORTED_BINDING

#define LASSO_PROFILE_ERROR_UNSUPPORTED_BINDING 445

LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ

#define LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ -501

An object type provided as parameter is invalid or object is NULL.


LASSO_PARAM_ERROR_INVALID_VALUE

#define LASSO_PARAM_ERROR_INVALID_VALUE -502

A parameter value is invalid.


LASSO_PARAM_ERROR_CHECK_FAILED

#define LASSO_PARAM_ERROR_CHECK_FAILED -503

The error return location should be either NULL or contains a NULL error.


LASSO_PARAM_ERROR_NON_INITIALIZED_OBJECT

#define LASSO_PARAM_ERROR_NON_INITIALIZED_OBJECT      -504

The call failed because an argument is a partially-initialized object.


LASSO_LOGIN_ERROR_FEDERATION_NOT_FOUND

#define LASSO_LOGIN_ERROR_FEDERATION_NOT_FOUND 601

Federation not found on login


LASSO_LOGIN_ERROR_CONSENT_NOT_OBTAINED

#define LASSO_LOGIN_ERROR_CONSENT_NOT_OBTAINED         602

Consent of the principal was not obtained.


LASSO_LOGIN_ERROR_INVALID_NAMEIDPOLICY

#define LASSO_LOGIN_ERROR_INVALID_NAMEIDPOLICY -603

Invalid NameIDPolicy in lib:AuthnRequest


LASSO_LOGIN_ERROR_REQUEST_DENIED

#define LASSO_LOGIN_ERROR_REQUEST_DENIED 604

Request denied.


LASSO_LOGIN_ERROR_INVALID_SIGNATURE

#define LASSO_LOGIN_ERROR_INVALID_SIGNATURE            605

The signature of a message or of an assertion is invalid. That is badly computed or with an unknown key.


LASSO_LOGIN_ERROR_UNSIGNED_AUTHN_REQUEST

#define LASSO_LOGIN_ERROR_UNSIGNED_AUTHN_REQUEST       606

An unsigned authn request was received but the metadata specify that they must be signed.


LASSO_LOGIN_ERROR_STATUS_NOT_SUCCESS

#define LASSO_LOGIN_ERROR_STATUS_NOT_SUCCESS 607

Status code is not success


LASSO_LOGIN_ERROR_UNKNOWN_PRINCIPAL

#define LASSO_LOGIN_ERROR_UNKNOWN_PRINCIPAL 608

Unknown principal


LASSO_LOGIN_ERROR_NO_DEFAULT_ENDPOINT

#define LASSO_LOGIN_ERROR_NO_DEFAULT_ENDPOINT 609

No default endpoint


LASSO_LOGIN_ERROR_ASSERTION_REPLAY

#define LASSO_LOGIN_ERROR_ASSERTION_REPLAY 610

Assertion replay


LASSO_LOGIN_ERROR_ASSERTION_DOES_NOT_MATCH_REQUEST_ID

#define LASSO_LOGIN_ERROR_ASSERTION_DOES_NOT_MATCH_REQUEST_ID 611

If inResponseTo attribute is present, a matching request must be present too in the LassoLogin object


LASSO_DEFEDERATION_ERROR_MISSING_NAME_IDENTIFIER

#define LASSO_DEFEDERATION_ERROR_MISSING_NAME_IDENTIFIER -700

Name identifier not found in request


LASSO_SOAP_ERROR_REDIRECT_REQUEST_FAULT

#define LASSO_SOAP_ERROR_REDIRECT_REQUEST_FAULT 800

A SOAP Fault containing a Redirect Request was received


LASSO_SOAP_ERROR_MISSING_ENVELOPE

#define LASSO_SOAP_ERROR_MISSING_ENVELOPE -801

Missing SOAP envelope


LASSO_SOAP_ERROR_MISSING_HEADER

#define LASSO_SOAP_ERROR_MISSING_HEADER -802

Missing SOAP header


LASSO_SOAP_ERROR_MISSING_BODY

#define LASSO_SOAP_ERROR_MISSING_BODY -803

Missing SOAP body


LASSO_SOAP_ERROR_MISSING_SOAP_FAULT_DETAIL

#define LASSO_SOAP_ERROR_MISSING_SOAP_FAULT_DETAIL -804

Missing SOAP fault detail


LASSO_REGISTRY_ERROR_KEY_EXISTS

#define LASSO_REGISTRY_ERROR_KEY_EXISTS -1400

Key alreadys exists in the registry


LASSO_PROVIDER_ERROR_MISSING_PUBLIC_KEY

#define LASSO_PROVIDER_ERROR_MISSING_PUBLIC_KEY -1500

The provider has no known public key

lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoLibAuthnResponseEnvelope.html0000644000000000000000000000013214404126163025511 xustar0030 mtime=1678814323.001964653 30 atime=1678814323.001964653 30 ctime=1678814323.001964653 lasso-2.8.2/docs/reference/lasso/html/LassoLibAuthnResponseEnvelope.html0000644000175000017500000001532014404126163030762 0ustar00bdauvergnebdauvergne00000000000000 LassoLibAuthnResponseEnvelope: lasso Reference Manual

LassoLibAuthnResponseEnvelope

LassoLibAuthnResponseEnvelope — <lib:AuthnResponseEnvelope>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoLibAuthnResponseEnvelope

Description

Functions

lasso_lib_authn_response_envelope_new ()

LassoLibAuthnResponseEnvelope *
lasso_lib_authn_response_envelope_new (LassoLibAuthnResponse *response,
                                       char *assertionConsumerServiceURL);

Creates a new LassoLibAuthnResponseEnvelope object and initializes it with the parameters.

Parameters

response

the LassoLibAuthnResponse to envelop

 

assertionConsumerServiceURL

assertion consumer service URL on the service provider

 

Returns

a newly created LassoLibAuthnResponseEnvelope object

Types and Values

struct LassoLibAuthnResponseEnvelope

struct LassoLibAuthnResponseEnvelope {
	GList *Extension; /* of xmlNode* */
	LassoLibAuthnResponse *AuthnResponse;
	char *AssertionConsumerServiceURL;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/lasso-node.html0000644000000000000000000000013214404126163021630 xustar0030 mtime=1678814323.045964902 30 atime=1678814323.045964902 30 ctime=1678814323.045964902 lasso-2.8.2/docs/reference/lasso/html/lasso-node.html0000644000175000017500000022026414404126163025106 0ustar00bdauvergnebdauvergne00000000000000 LassoNode: lasso Reference Manual

LassoNode

LassoNode — Base class for all Lasso objects

Object Hierarchy

    GObject
    ╰── LassoNode
        ├── LassoProfile
        ├── LassoDsKeyInfo
        ├── LassoDsKeyValue
        ├── LassoDsRsaKeyValue
        ├── LassoFederation
        ├── LassoIdentity
        ├── LassoSamlAssertion
        ├── LassoSamlStatementAbstract
        ├── LassoLibAuthnContext
        ├── LassoLibAuthnRequestEnvelope
        ├── LassoSamlpRequestAbstract
        ├── LassoLibAuthnResponseEnvelope
        ├── LassoSamlpResponseAbstract
        ├── LassoLibIDPEntries
        ├── LassoLibIDPEntry
        ├── LassoLibIDPList
        ├── LassoLibRequestAuthnContext
        ├── LassoLibScoping
        ├── LassoSamlSubject
        ├── LassoMiscTextNode
        ├── LassoProvider
        ├── LassoSaml2Action
        ├── LassoSaml2Advice
        ├── LassoSaml2Assertion
        ├── LassoSaml2Attribute
        ├── LassoSaml2StatementAbstract
        ├── LassoSaml2AttributeValue
        ├── LassoSaml2ConditionAbstract
        ├── LassoSaml2AuthnContext
        ├── LassoSaml2BaseIDAbstract
        ├── LassoSaml2Conditions
        ├── LassoSaml2EncryptedElement
        ├── LassoSaml2Evidence
        ├── LassoSaml2KeyInfoConfirmationData
        ├── LassoSaml2NameID
        ├── LassoSaml2SubjectConfirmationData
        ├── LassoSaml2SubjectConfirmation
        ├── LassoSaml2Subject
        ├── LassoSaml2SubjectLocality
        ├── LassoSamlAdvice
        ├── LassoSamlAttributeDesignator
        ├── LassoSamlAttributeValue
        ├── LassoSamlConditionAbstract
        ├── LassoSamlAuthorityBinding
        ├── LassoSamlConditions
        ├── LassoSamlNameIdentifier
        ├── LassoSamlp2RequestAbstract
        ├── LassoSamlp2StatusResponse
        ├── LassoSamlp2Extensions
        ├── LassoSamlp2IDPEntry
        ├── LassoSamlp2IDPList
        ├── LassoSamlp2NameIDPolicy
        ├── LassoSamlp2RequestedAuthnContext
        ├── LassoSamlp2Scoping
        ├── LassoSamlp2StatusCode
        ├── LassoSamlp2StatusDetail
        ├── LassoSamlp2Status
        ├── LassoSamlp2Terminate
        ├── LassoSamlpStatusCode
        ├── LassoSamlpStatus
        ├── LassoSamlSubjectConfirmation
        ├── LassoSamlSubjectLocality
        ├── LassoSession
        ├── LassoSoapBody
        ├── LassoSoapDetail
        ├── LassoSoapEnvelope
        ├── LassoSoapFault
        ╰── LassoSoapHeader

Description

LassoNode is the base class for Lasso objects; just a step over GObject as defined in glib.

Functions

lasso_node_new ()

LassoNode *
lasso_node_new (void);

Creates a new LassoNode.

Returns

a newly created LassoNode object


lasso_node_new_from_dump ()

LassoNode *
lasso_node_new_from_dump (const char *dump);

Restores the dump to a new LassoNode subclass.

Parameters

dump

XML object dump

 

Returns

a newly created object; or NULL if an error occured.


lasso_node_new_from_soap ()

LassoNode *
lasso_node_new_from_soap (const char *soap);

Parses SOAP message and creates a new Lasso object with the right class.

Parameters

soap

the SOAP message

 

Returns

node if success; NULL otherwise


lasso_node_new_from_xmlNode ()

LassoNode *
lasso_node_new_from_xmlNode (xmlNode *node);

Builds a new LassoNode from an xmlNode.

Parameters

node

an xmlNode

 

Returns

a new node


lasso_node_cleanup_original_xmlnodes ()

void
lasso_node_cleanup_original_xmlnodes (LassoNode *node);

node : a LassoNode

Traverse the LassoNode tree starting at Node and remove keeped xmlNode if one is found.

Returns

None


lasso_node_destroy ()

void
lasso_node_destroy (LassoNode *node);

Destroys the LassoNode.

Parameters

node

a LassoNode

 

lasso_node_dump ()

char *
lasso_node_dump (LassoNode *node);

Dumps node . All datas in object are dumped in an XML format.

Parameters

node

a LassoNode

 

Returns

a full XML dump of node . The string must be freed by the caller.

[transfer full]


lasso_node_debug ()

char *
lasso_node_debug (LassoNode *node,
                  int level);

Create a debug dump for node , it is pretty printed so any contained signature will be uncheckable.

Parameters

node

a LassoNode

 

level

the indentation depth, i.e. the depth of the last nodes to be indented.

[default 10]

Returns

a full indented and so human readable dump of node . The string must be freed by the caller.

[transfer full]


lasso_node_export_to_base64 ()

char *
lasso_node_export_to_base64 (LassoNode *node);

Exports node to a base64-encoded message.

Parameters

node

a LassoNode

 

Returns

a base64-encoded export of node . The string must be freed by the caller.


lasso_node_export_to_query ()

char *
lasso_node_export_to_query (LassoNode *node,
                            LassoSignatureMethod sign_method,
                            const char *private_key_file);

Exports node to a HTTP query string. If private_key_file is NULL, query won't be signed.

Parameters

node

a LassoNode

 

sign_method

the Signature transform method.

[default 1]

private_key_file

the path to the private key (may be NULL).

[allow-none]

Returns

a HTTP query export of node . The string must be freed by the caller.


lasso_node_export_to_query_with_password ()

char *
lasso_node_export_to_query_with_password
                               (LassoNode *node,
                                LassoSignatureMethod sign_method,
                                const char *private_key_file,
                                const char *private_key_file_password);

Exports node to a HTTP query string. If private_key_file is NULL, query won't be signed.

Parameters

node

a LassoNode

 

sign_method

the Signature transform method.

[default 1]

private_key_file

the path to the private key (may be NULL).

[allow-none]

private_key_file_password

the password needed to decrypt the private key.

[allow-none]

Returns

a HTTP query export of node . The string must be freed by the caller.


lasso_node_export_to_soap ()

char *
lasso_node_export_to_soap (LassoNode *node);

Exports node to a SOAP message.

Parameters

node

a LassoNode

 

Returns

a SOAP export of node . The string must be freed by the caller.


lasso_node_export_to_soap_with_headers ()

char *
lasso_node_export_to_soap_with_headers
                               (LassoNode *node,
                                GList *headers);

Exports node to a SOAP message. The node becomes the SOAP body. each header in the headers list is added to the SOAP header if non-NULL. headers is permitted to be an empty list (e.g. NULL).

Example 1. Create SOAP envelope with variable number of header nodes

You need to form a SOAP message with authn_request as the body and paos_request, ecp_request and ecp_relaystate as SOAP header elements. It is possible one or more of these may be NULL and should be skipped.

char *text = NULL;
LassoNode *paos_request = NULL;
LassoNode *ecp_request = NULL;
LassoNode *ecp_relaystate = NULL;
GList *headers = NULL;

paos_request = lasso_paos_request_new(responseConsumerURL, message_id);
ecp_request = lasso_ecp_request_new(issuer, is_passive, provider_name, idp_list);

lasso_list_add_new_gobject(headers, paos_request);
lasso_list_add_new_gobject(headers, ecp_request);
lasso_list_add_new_gobject(headers, ecp_relaystate);

text = lasso_node_export_to_soap_with_headers(node, headers);

lasso_release_list_of_gobjects(headers);

Parameters

node

a LassoNode, becomes the SOAP body

 

headers

GList of LassNode.

[allow-none]

Returns

a SOAP export of node . The string must be freed by the caller.


lasso_node_export_to_xml ()

gchar *
lasso_node_export_to_xml (LassoNode *node);

Exports node to an xml message.

Parameters

node

a LassoNode

 

Returns

an xml export of node . The string must be freed by the caller.


lasso_node_export_to_paos_request ()

char *
lasso_node_export_to_paos_request (LassoNode *node,
                                   const char *issuer,
                                   const char *responseConsumerURL,
                                   const char *relay_state);

Exports node to a PAOS message.

Deprecated, use lasso_node_export_to_paos_request_full() instead

Parameters

node

a LassoNode

 

Returns

a PAOS export of node . The string must be freed by the caller.


lasso_node_export_to_paos_request_full ()

char *
lasso_node_export_to_paos_request_full
                               (LassoNode *node,
                                const char *issuer,
                                const char *responseConsumerURL,
                                const char *message_id,
                                const char *relay_state,
                                gboolean is_passive,
                                gchar *provider_name,
                                LassoSamlp2IDPList *idp_list);

Creates a new SOAP message. The SOAP headers include a PaosRequst, a EcpRequest and optionally a EcpRelayState. The SOAP body contains the node parameters.

Parameters

message_id

.

[allow-none]

relay_state

.

[allow-none]

provider_name

.

[allow-none]

idp_list

.

[allow-none]

Returns

string containing a PAOS request. The string must be freed by the caller.


lasso_node_export_to_ecp_soap_response ()

char *
lasso_node_export_to_ecp_soap_response
                               (LassoNode *node,
                                const char *assertionConsumerURL);

Exports node to a ECP SOAP message.

Parameters

node

a LassoNode

 

Returns

a ECP SOAP export of node . The string must be freed by the caller.


lasso_node_get_xmlNode ()

xmlNode *
lasso_node_get_xmlNode (LassoNode *node,
                        gboolean lasso_dump);

Builds an XML representation of node .

Parameters

node

a LassoNode

 

lasso_dump

whether to include lasso-specific nodes

 

Returns

a new xmlNode. It must be freed by the caller.


lasso_node_get_name ()

const char *
lasso_node_get_name (LassoNode *node);

Return the XML element name for this object, the one that would be used in the XML dump of this object.

Parameters

node

a LassoNode

 

Returns

the name of the object, the value must not be stored.


lasso_node_get_original_xmlnode ()

xmlNode *
lasso_node_get_original_xmlnode (LassoNode *node);

Retrieve the original xmlNode eventually associated to this LassoNode.

Parameters

node

a LassoNode

 

Returns

an xmlNodePtr or NULL.

[transfer none]


lasso_node_set_original_xmlnode ()

void
lasso_node_set_original_xmlnode (LassoNode *node,
                                 xmlNode *xmlnode);

Set the underlying XML representation of the object.

Parameters

node

the LassoNode object

 

xmlnode

an xmlNode

 

lasso_node_set_custom_namespace ()

void
lasso_node_set_custom_namespace (LassoNode *node,
                                 const char *prefix,
                                 const char *href);

Set a custom namespace for an object instance, use it with object existing a lot of revision of the nearly same namespace.

Parameters

node

a LassoNode object

 

prefix

the prefix to use for the definition

 

href

the URI of the namespace

 

lasso_node_set_custom_nodename ()

void
lasso_node_set_custom_nodename (LassoNode *node,
                                const char *nodename);

Set a custom nodename for an object instance, use it with object implement a schema type and not a real element.

Parameters

node

a LassoNode object

 

nodename

the name to use for the node

 

lasso_node_get_namespace ()

const char *
lasso_node_get_namespace (LassoNode *node);

lasso_node_init_from_message ()

LassoMessageFormat
lasso_node_init_from_message (LassoNode *node,
                              const char *message);

Parses message and initialiazes node fields with data from it. Message type may be base64, SOAP, XML or query string, correct type is found automatically.

Parameters

node

a LassoNode (or derived class)

 

message

a Liberty message

 

Returns

a LassoMessageFormat value.


lasso_node_init_from_query ()

gboolean
lasso_node_init_from_query (LassoNode *node,
                            const char *query);

Initialiazes node fields with data from query string.

Parameters

node

a LassoNode (or derived class)

 

query

the query string

 

Returns

TRUE if success


lasso_node_init_from_xml ()

lasso_error_t
lasso_node_init_from_xml (LassoNode *node,
                          xmlNode *xmlnode);

Initialiazes node fields with data from xmlnode XML node.

Parameters

node

a LassoNode (or derived class)

 

xmlnode

the libxml2 node

 

Returns

0 on success; or a negative value otherwise.


lasso_strerror ()

const char *
lasso_strerror (int error_code);

Convert an error code from a lasso fuction to a human readable string.

Parameters

error_code

a gint error code returned by a lasso function

 

Returns

a static string.

Types and Values

enum LassoMessageFormat

Return code for lasso_node_init_from_message; it describes the type of the message that was passed to that function.

Members

LASSO_MESSAGE_FORMAT_XSCHEMA_ERROR

   

LASSO_MESSAGE_FORMAT_ERROR

error while determining format

 

LASSO_MESSAGE_FORMAT_UNKNOWN

unknown format

 

LASSO_MESSAGE_FORMAT_XML

XML

 

LASSO_MESSAGE_FORMAT_BASE64

base-64 encoded

 

LASSO_MESSAGE_FORMAT_QUERY

query string

 

LASSO_MESSAGE_FORMAT_SOAP

SOAP

 

enum LassoSignatureType

Signature type.

Members

LASSO_SIGNATURE_TYPE_NONE

no signature

 

LASSO_SIGNATURE_TYPE_SIMPLE

sign with the private key, copy the public part in the signature.

 

LASSO_SIGNATURE_TYPE_WITHX509

sign with the private key, copy the associated certificat in the signature.

 

LASSO_SIGNATURE_TYPE_LAST

   

enum LassoSignatureMethod

Signature method.

Members

LASSO_SIGNATURE_METHOD_NONE

   

LASSO_SIGNATURE_METHOD_RSA_SHA1

sign using a RSA private key

 

LASSO_SIGNATURE_METHOD_DSA_SHA1

sign using a DSA private key

 

LASSO_SIGNATURE_METHOD_HMAC_SHA1

sign using a HMAC-SHA1 secret key

 

LASSO_SIGNATURE_METHOD_RSA_SHA256

sign using a RSA private key and use SHA256 digest

 

LASSO_SIGNATURE_METHOD_HMAC_SHA256

sign using a HMAC-SHA256 secret key

 

LASSO_SIGNATURE_METHOD_RSA_SHA384

sign using a RSA private key and use SHA384 digest

 

LASSO_SIGNATURE_METHOD_HMAC_SHA384

sign using a HMAC-SHA384 secret key

 

LASSO_SIGNATURE_METHOD_RSA_SHA512

sign using a RSA private key and use SHA521 digest

 

LASSO_SIGNATURE_METHOD_HMAC_SHA512

sign using a HMAC-SHA512 secret key

 

LASSO_SIGNATURE_METHOD_LAST

   

LassoNodeClassData

typedef struct _LassoNodeClassData LassoNodeClassData;

struct LassoNode

struct LassoNode;

Base type for all XML contents, or for object using serialization to XML.

lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSoapFault.html0000644000000000000000000000013214404126163022464 xustar0030 mtime=1678814323.033964834 30 atime=1678814323.033964834 30 ctime=1678814323.033964834 lasso-2.8.2/docs/reference/lasso/html/LassoSoapFault.html0000644000175000017500000001735214404126163025744 0ustar00bdauvergnebdauvergne00000000000000 LassoSoapFault: lasso Reference Manual

LassoSoapFault

LassoSoapFault — object mapping for a soap11:Fault

Stability Level

Stable, unless otherwise indicated

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSoapFault

Description

Figure 98. Schema fragment for soap11:Fault


<xs: element name="Fault" type="tns: Fault"/>
<xs: complexType name="Fault" final="extension">
  <xs: annotation>
    <xs: documentation>
      Fault reporting structure
    </xs: documentation>
  </xs: annotation>
  <xs: sequence>
    <xs: element name="faultcode" type="xs: QName"/>
    <xs: element name="faultstring" type="xs: string"/>
    <xs: element name="faultactor" type="xs: anyURI" minOccurs="0"/>
    <xs: element name="detail" type="tns: detail" minOccurs="0"/>
  </xs: sequence>
 </xs: complexType>

 <xs: complexType name="detail">
   <xs: sequence>
     <xs: any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
   </xs: sequence>
   <xs: anyAttribute namespace="##any" processContents="lax"/>
 </xs: complexType>


Functions

lasso_soap_fault_new ()

LassoSoapFault *
lasso_soap_fault_new (void);

lasso_soap_fault_new_from_message ()

LassoSoapFault *
lasso_soap_fault_new_from_message (const gchar *message);

lasso_soap_fault_new_full ()

LassoSoapFault *
lasso_soap_fault_new_full (const char *faultcode,
                           const char *faultstring);

Types and Values

struct LassoSoapFault

struct LassoSoapFault;
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoLibAuthnContext.html0000644000000000000000000000013214404126163023641 xustar0030 mtime=1678814323.001964653 30 atime=1678814323.001964653 30 ctime=1678814323.001964653 lasso-2.8.2/docs/reference/lasso/html/LassoLibAuthnContext.html0000644000175000017500000001405314404126163027114 0ustar00bdauvergnebdauvergne00000000000000 LassoLibAuthnContext: lasso Reference Manual

LassoLibAuthnContext

LassoLibAuthnContext — <lib:AuthnContext>

Functions

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoLibAuthnContext

Description

Figure 3. Schema fragment for lib:AuthnContext

<xs:element name="AuthnContext">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="AuthnContextClassRef" type="xs:anyURI" minOccurs="0"/>
      <xs:choice>
        <xs:element ref="ac:AuthenticationContextStatement"/>
        <xs:element name="AuthnContextStatementRef" type="xs:anyURI"/>
      </xs:choice>
    </xs:sequence>
  </xs:complexType>
</xs:element>

Functions

lasso_lib_authn_context_new ()

LassoNode *
lasso_lib_authn_context_new (void);

Creates a new LassoLibAuthnContext object.

Returns

a newly created LassoLibAuthnContext object

Types and Values

struct LassoLibAuthnContext

struct LassoLibAuthnContext {
	/* <xs:element name="AuthnContextClassRef" type="xs:anyURI" minOccurs="0"/> */
	char *AuthnContextClassRef;
	/* <xs:element name="AuthnContextStatementRef" type="xs:anyURI"/> */
	char *AuthnContextStatementRef;
	/* <xs:element ref="ac:AuthenticationContextStatement"/> */
	void *AuthenticationContextStatement; /* TODO: support that element */
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSaml2BaseIDAbstract.html0000644000000000000000000000013214404126163024240 xustar0030 mtime=1678814323.017964743 30 atime=1678814323.017964743 30 ctime=1678814323.017964743 lasso-2.8.2/docs/reference/lasso/html/LassoSaml2BaseIDAbstract.html0000644000175000017500000001315514404126163027515 0ustar00bdauvergnebdauvergne00000000000000 LassoSaml2BaseIDAbstract: lasso Reference Manual

LassoSaml2BaseIDAbstract

LassoSaml2BaseIDAbstract — <saml2:BaseIDAbstract>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSaml2BaseIDAbstract

Description

Figure 54. Schema fragment for saml2:BaseIDAbstract


<complexType name="BaseIDAbstractType" abstract="true">
  <attributeGroup ref="saml:IDNameQualifiers"/>
</complexType>

Functions

lasso_saml2_base_idabstract_new ()

LassoNode *
lasso_saml2_base_idabstract_new (void);

Creates a new LassoSaml2BaseIDAbstract object.

Returns

a newly created LassoSaml2BaseIDAbstract object

Types and Values

struct LassoSaml2BaseIDAbstract

struct LassoSaml2BaseIDAbstract {
	/* attributes */
	char *NameQualifier;
	char *SPNameQualifier;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSamlp2AttributeQuery.html0000644000000000000000000000013214404126163024636 xustar0030 mtime=1678814323.025964789 30 atime=1678814323.025964789 30 ctime=1678814323.025964789 lasso-2.8.2/docs/reference/lasso/html/LassoSamlp2AttributeQuery.html0000644000175000017500000001424314404126163030112 0ustar00bdauvergnebdauvergne00000000000000 LassoSamlp2AttributeQuery: lasso Reference Manual

LassoSamlp2AttributeQuery

LassoSamlp2AttributeQuery — <samlp2:AttributeQuery>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlp2RequestAbstract
            ╰── LassoSamlp2SubjectQueryAbstract
                ╰── LassoSamlp2AttributeQuery

Description

Figure 70. Schema fragment for samlp2:AttributeQuery


<complexType name="AttributeQueryType">
  <complexContent>
    <extension base="samlp:SubjectQueryAbstractType">
      <sequence>
        <element ref="saml:Attribute" minOccurs="0" maxOccurs="unbounded"/>
      </sequence>
    </extension>
  </complexContent>
</complexType>

Functions

lasso_samlp2_attribute_query_new ()

LassoNode *
lasso_samlp2_attribute_query_new (void);

Creates a new LassoSamlp2AttributeQuery object.

Returns

a newly created LassoSamlp2AttributeQuery object

Types and Values

struct LassoSamlp2AttributeQuery

struct LassoSamlp2AttributeQuery {
	/* elements */
	GList *Attribute; /* of LassoSaml2Attribute */
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoLibIDPEntry.html0000644000000000000000000000013214404126163022653 xustar0030 mtime=1678814323.001964653 30 atime=1678814323.001964653 30 ctime=1678814323.001964653 lasso-2.8.2/docs/reference/lasso/html/LassoLibIDPEntry.html0000644000175000017500000001303314404126163026123 0ustar00bdauvergnebdauvergne00000000000000 LassoLibIDPEntry: lasso Reference Manual

LassoLibIDPEntry

LassoLibIDPEntry — <lib:IDPEntry>

Functions

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoLibIDPEntry

Description

Figure 9. Schema fragment for lib:IDPEntry

<xs:element name="IDPEntry">
  <xs:complexType>
    <xs:sequence>
      <xs:element ref="ProviderID"/>
      <xs:element name="ProviderName" type="xs:string" minOccurs="0"/>
      <xs:element name="Loc" type="xs:anyURI"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

Functions

lasso_lib_idp_entry_new ()

LassoNode *
lasso_lib_idp_entry_new (void);

Creates a new LassoLibIDPEntry object.

Returns

a newly created LassoLibIDPEntry object

Types and Values

struct LassoLibIDPEntry

struct LassoLibIDPEntry {
	/* <xs:element ref="ProviderID"/> */
	char *ProviderID;
	/* <xs:element name="ProviderName" type="xs:string" minOccurs="0"/> */
	char *ProviderName;
	/* <xs:element name="Loc" type="xs:anyURI"/> */
	char *Loc;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSamlpRequestAbstract.html0000644000000000000000000000013214404126163024677 xustar0030 mtime=1678814323.029964812 30 atime=1678814323.029964812 30 ctime=1678814323.029964812 lasso-2.8.2/docs/reference/lasso/html/LassoSamlpRequestAbstract.html0000644000175000017500000001452014404126163030151 0ustar00bdauvergnebdauvergne00000000000000 LassoSamlpRequestAbstract: lasso Reference Manual

LassoSamlpRequestAbstract

LassoSamlpRequestAbstract — <samlp:RequestAbstractType>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlpRequestAbstract
            ├── LassoLibAuthnRequest
            ├── LassoLibFederationTerminationNotification
            ├── LassoLibLogoutRequest
            ├── LassoLibNameIdentifierMappingRequest
            ├── LassoLibRegisterNameIdentifierRequest
            ╰── LassoSamlpRequest

Description

Figure 33. Schema fragment for samlp:RequestAbstractType


<complexType name="RequestAbstractType" abstract="true">
  <sequence>
    <element ref="samlp:RespondWith" minOccurs="0" maxOccurs="unbounded"/>
    <element ref="ds:Signature" minOccurs="0"/>
  </sequence>
  <attribute name="RequestID" type="saml:IDType" use="required"/>
  <attribute name="MajorVersion" type="integer" use="required"/>
  <attribute name="MinorVersion" type="integer" use="required"/>
  <attribute name="IssueInstant" type="dateTime" use="required"/>
</complexType>

<element name="RespondWith" type="QName"/>

From oasis-sstc-saml-schema-assertion-1.0.xsd:
<simpleType name="IDType">
  <restriction base="string"/>
</simpleType>

Functions

Types and Values

struct LassoSamlpRequestAbstract

struct LassoSamlpRequestAbstract {
	/* <element ref="samlp:RespondWith" minOccurs="0" maxOccurs="unbounded"/> */
	GList *RespondWith; /* of strings */
	/* <attribute name="RequestID" type="saml:IDType" use="required"/> */
	char *RequestID;
	/* <attribute name="MajorVersion" type="integer" use="required"/> */
	int MajorVersion;
	/* <attribute name="MinorVersion" type="integer" use="required"/> */
	int MinorVersion;
	/* <attribute name="IssueInstant" type="dateTime" use="required"/> */
	char *IssueInstant;

	/* ds:Signature stuffs */
	LassoSignatureType sign_type;
	LassoSignatureMethod sign_method;
	char *private_key_file;
	char *certificate_file;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSamlAttributeValue.html0000644000000000000000000000013214404126163024343 xustar0030 mtime=1678814323.021964766 30 atime=1678814323.021964766 30 ctime=1678814323.021964766 lasso-2.8.2/docs/reference/lasso/html/LassoSamlAttributeValue.html0000644000175000017500000001470614404126163027623 0ustar00bdauvergnebdauvergne00000000000000 LassoSamlAttributeValue: lasso Reference Manual

LassoSamlAttributeValue

LassoSamlAttributeValue — value of an attribute in SAML 1.0/1.1 assertion

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlAttributeValue

Includes

#include <lasso/xml/saml_attribute_value.h>

Description

Figure 27. Schema fragment for samlp2:Extensions


<element name="AttributeValue" type="anyType"/>


This object support a special of specifying its content. If the any field is NULL, then you can attach an xmlNode using lasso_node_set_original_xmlnode() and it will be used to generate the content of the serialized

xmlNode for this object. The content (attributes, childrent and namespaces) of the xmlNode will be copied to the result node returned by calls to

lasso_node_get_xmlNode().

Functions

lasso_saml_attribute_value_new ()

LassoSamlAttributeValue *
lasso_saml_attribute_value_new (void);

Types and Values

struct LassoSamlAttributeValue

struct LassoSamlAttributeValue {
	GList *any; /* of LassoNode */
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSamlAttributeStatement.html0000644000000000000000000000013214404126163025233 xustar0030 mtime=1678814323.021964766 30 atime=1678814323.021964766 30 ctime=1678814323.021964766 lasso-2.8.2/docs/reference/lasso/html/LassoSamlAttributeStatement.html0000644000175000017500000001475714404126163030521 0ustar00bdauvergnebdauvergne00000000000000 LassoSamlAttributeStatement: lasso Reference Manual

LassoSamlAttributeStatement

LassoSamlAttributeStatement — object mapping for a saml:AttributeStatement

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlStatementAbstract
            ╰── LassoSamlSubjectStatementAbstract
                ╰── LassoSamlAttributeStatement

Description

The schema fragment (oasis-sstc-saml-schema-assertion-1.1.xsd):

Figure 26. Schema fragment for saml:AttributeStatement


<element name="AttributeStatement" type="saml:AttributeStatementType"/>
<complexType name="AttributeStatementType">
  <complexContent>
    <extension base="saml:SubjectStatementAbstractType">
      <sequence>
        <element ref="saml:Attribute" maxOccurs="unbounded"/>
      </sequence>
    </extension>
  </complexContent>
</complexType>


Functions

lasso_saml_attribute_statement_new ()

LassoSamlAttributeStatement *
lasso_saml_attribute_statement_new (void);

Creates a new LassoSamlAttributeStatement object.

Returns

a newly created LassoSamlAttributeStatement object

Types and Values

struct LassoSamlAttributeStatement

struct LassoSamlAttributeStatement {
	GList *Attribute; /* of LassoNode */
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSamlp2RequestAbstract.html0000644000000000000000000000013214404126163024761 xustar0030 mtime=1678814323.025964789 30 atime=1678814323.025964789 30 ctime=1678814323.025964789 lasso-2.8.2/docs/reference/lasso/html/LassoSamlp2RequestAbstract.html0000644000175000017500000001672614404126163030245 0ustar00bdauvergnebdauvergne00000000000000 LassoSamlp2RequestAbstract: lasso Reference Manual

LassoSamlp2RequestAbstract

LassoSamlp2RequestAbstract — <samlp2:RequestAbstract>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlp2RequestAbstract
            ├── LassoSamlp2ArtifactResolve
            ├── LassoSamlp2AssertionIDRequest
            ├── LassoSamlp2SubjectQueryAbstract
            ├── LassoSamlp2AuthnRequest
            ├── LassoSamlp2LogoutRequest
            ├── LassoSamlp2ManageNameIDRequest
            ╰── LassoSamlp2NameIDMappingRequest

Description

Figure 84. Schema fragment for samlp2:RequestAbstract


<complexType name="RequestAbstractType" abstract="true">
  <sequence>
    <element ref="saml:Issuer" minOccurs="0"/>
    <element ref="ds:Signature" minOccurs="0"/>
    <element ref="samlp:Extensions" minOccurs="0"/>
  </sequence>
  <attribute name="ID" type="ID" use="required"/>
  <attribute name="Version" type="string" use="required"/>
  <attribute name="IssueInstant" type="dateTime" use="required"/>
  <attribute name="Destination" type="anyURI" use="optional"/>
  <attribute name="Consent" type="anyURI" use="optional"/>
</complexType>

Functions

lasso_samlp2_request_abstract_new ()

LassoNode *
lasso_samlp2_request_abstract_new (void);

Creates a new LassoSamlp2RequestAbstract object.

Returns

a newly created LassoSamlp2RequestAbstract object

Types and Values

struct LassoSamlp2RequestAbstract

struct LassoSamlp2RequestAbstract {
	/* elements */
	LassoSaml2NameID *Issuer;
	LassoSamlp2Extensions *Extensions;
	/* attributes */
	char *ID;
	char *Version;
	char *IssueInstant;
	char *Destination;
	char *Consent;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSamlp2ManageNameIDResponse.html0000644000000000000000000000013214404126163025572 xustar0030 mtime=1678814323.025964789 30 atime=1678814323.025964789 30 ctime=1678814323.025964789 lasso-2.8.2/docs/reference/lasso/html/LassoSamlp2ManageNameIDResponse.html0000644000175000017500000001371314404126163031047 0ustar00bdauvergnebdauvergne00000000000000 LassoSamlp2ManageNameIDResponse: lasso Reference Manual

LassoSamlp2ManageNameIDResponse

LassoSamlp2ManageNameIDResponse — <samlp2:ManageNameIDResponse>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlp2StatusResponse
            ╰── LassoSamlp2ManageNameIDResponse

Description

Figure 80. Schema fragment for samlp2:ManageNameIDResponse


<element name="ManageNameIDResponse" type="samlp:StatusResponseType"/>

Functions

lasso_samlp2_manage_name_id_response_new ()

LassoNode *
lasso_samlp2_manage_name_id_response_new
                               (void);

Creates a new LassoSamlp2ManageNameIDResponse object.

Returns

a newly created LassoSamlp2ManageNameIDResponse object

Types and Values

struct LassoSamlp2ManageNameIDResponse

struct LassoSamlp2ManageNameIDResponse;
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/index.html0000644000000000000000000000012714404126163020677 xustar0029 mtime=1678814323.04196488 29 atime=1678814323.04196488 29 ctime=1678814323.04196488 lasso-2.8.2/docs/reference/lasso/html/index.html0000644000175000017500000006360314404126163024153 0ustar00bdauvergnebdauvergne00000000000000 lasso Reference Manual: lasso Reference Manual

for lasso 2.8.2. The latest version of this documentation can be found on-line at http://lasso.entrouvert.org/documentation/index.html.

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.


Lasso & Liberty Alliance Overview
I. Application Programming Interface
Lasso Architecture
LassoServer — Representation of the current server
LassoProvider — Service or identity provider
LassoIdentity — Principal identity
LassoFederation — Principal federation between two providers
LassoSession — Principal Session
LassoProfile — Base class for all identity profiles
Error Codes — Error codes returned by lasso functions
LassoNode — Base class for all Lasso objects
Base Strings — General strings constants for Lasso
registry — Class to store a mapping of qualified names (QName) to other qualified names.
LassoMiscTextNode
Identity Federation Framework - ID-FF 1.2 profiles
LassoLogin — Single Sign-On and Federation Profile
LassoLogout — Single Logout Profile
LassoDefederation — Federation Termination Notification Profile (ID-FF)
LassoNameRegistration — Name Registration Profile (ID-FF)
LassoNameIdentifierMapping — Liberty Enabled Client and Proxy Profile (ID-FF)
LassoLecp — Liberty Enabled Client and Proxy Profile (ID-FF)
Objects from ID-FF 1.2 schemas
Strings for ID-FF 1.2
LassoLibAssertion — <lib:Assertion>
LassoLibAuthenticationStatement — <lib:AuthenticationStatement>
LassoLibAuthnContext — <lib:AuthnContext>
LassoLibAuthnRequestEnvelope — <lib:AuthnRequestEnvelope>
LassoLibAuthnRequest — <lib:AuthnRequest>
LassoLibAuthnResponseEnvelope — <lib:AuthnResponseEnvelope>
LassoLibAuthnResponse — <lib:AuthnResponse>
LassoLibFederationTerminationNotification — <lib:FederationTerminationNotification>
LassoLibIDPEntries — <lib:IDPEntries>
LassoLibIDPEntry — <lib:IDPEntry>
LassoLibIDPList — <lib:IDPList>
LassoLibLogoutRequest — <lib:LogoutRequest>
LassoLibLogoutResponse — <lib:LogoutResponse>
LassoLibNameIdentifierMappingRequest — <lib:NameIdentifierMappingRequest>
LassoLibNameIdentifierMappingResponse — <lib:NameIdentifierMappingResponse>
LassoLibRegisterNameIdentifierRequest — <lib:RegisterNameIdentifierRequest>
LassoLibRegisterNameIdentifierResponse — <lib:RegisterNameIdentifierResponse>
LassoLibRequestAuthnContext — <lib:RequestAuthnContext>
LassoLibScoping — <lib:Scoping>
LassoLibStatusResponse — <lib:StatusResponse>
LassoLibSubject — <lib:Subject>
LassoPaosRequest — <paos:Request>
LassoPaosResponse — <paos:Response>
LassoSamlAdvice — <saml:Advice>
LassoSamlAssertion — <saml:Assertion>
LassoSamlAttributeDesignator — object mapping for a saml:AttributeDesignator
LassoSamlAttributeStatement — object mapping for a saml:AttributeStatement
LassoSamlAttributeValue — value of an attribute in SAML 1.0/1.1 assertion
LassoSamlAttribute
LassoSamlAudienceRestrictionCondition
LassoSamlAuthenticationStatement — <saml:AuthenticationStatement>
LassoSamlAuthorityBinding — <saml:AuthorityBinding>
LassoSamlConditionAbstract — <:saml:ConditionAbstract>
LassoSamlConditions — <saml:Conditions>
LassoSamlNameIdentifier — <saml:NameIdentifier>
LassoSamlpRequestAbstract — <samlp:RequestAbstractType>
LassoSamlpRequest — <samlp:Request>
LassoSamlpResponseAbstract — <samlp:ResponseAbstractType>
LassoSamlpResponse — <samlp:Response>
LassoSamlpStatusCode — <samlp:StatusCode>
LassoSamlpStatus — <samlp:Status>
LassoSamlStatementAbstract — <saml:StatementAbstract>
LassoSamlSubjectConfirmation — <saml:SubjectConfirmation>
LassoSamlSubjectLocality — <saml:SubjectLocality>
LassoSamlSubjectStatementAbstract — <saml:SubjectStatementAbstractType>
LassoSamlSubjectStatement
LassoSamlSubject — <saml:Subject>
SAML 2.0 Single Sign On profiles
LassoAssertionQuery
LassoNameIdManagement — Name Id Management Profile (SAMLv2)
LassoEcp — Enhanced Client or Proxy Profile (SAMLv2)
Utility functions for SAML 2.0 — Misc functions used inside Lasso
Objects from SAML 2.0 schemas
SAML 2.0 Strings — String constants from SAML 2.0 specifications
LassoSaml2Action — <saml2:Action>
LassoSaml2Advice — <saml2:Advice>
LassoSaml2Assertion — <saml2:Assertion>
LassoSaml2AttributeStatement — <saml2:AttributeStatement>
LassoSaml2AttributeValue — value of an attribute in a SAML 2.0 assertion
LassoSaml2Attribute — <saml2:Attribute>
LassoSaml2AudienceRestriction — <saml2:AudienceRestriction>
LassoSaml2AuthnContext — <saml2:AuthnContext>
LassoSaml2AuthnStatement — <saml2:AuthnStatement>
LassoSaml2AuthzDecisionStatement — <saml2:AuthzDecisionStatement>
LassoSaml2BaseIDAbstract — <saml2:BaseIDAbstract>
LassoSaml2ConditionAbstract — <saml2:ConditionAbstract>
LassoSaml2Conditions — <saml2:Conditions>
LassoSaml2EncryptedElement — <saml2:EncryptedElement>
LassoSaml2Evidence — <saml2:Evidence>
LassoSaml2KeyInfoConfirmationData — <saml2:KeyInfoConfirmationData>
LassoSaml2NameID — <saml2:NameID>
LassoSaml2OneTimeUse — <saml2:OneTimeUse>
LassoSaml2ProxyRestriction — <saml2:ProxyRestriction>
LassoSaml2StatementAbstract — <saml2:StatementAbstract>
LassoSaml2SubjectConfirmationData — <saml2:SubjectConfirmationData>
LassoSaml2SubjectConfirmation — <saml2:SubjectConfirmation>
LassoSaml2SubjectLocality — <saml2:SubjectLocality>
LassoSaml2Subject — <saml2:Subject>
LassoSamlp2ArtifactResolve — <samlp2:ArtifactResolve>
LassoSamlp2ArtifactResponse — <samlp2:ArtifactResponse>
LassoSamlp2AssertionIDRequest
LassoSamlp2AttributeQuery — <samlp2:AttributeQuery>
LassoSamlp2AuthnQuery — <samlp2:AuthnQuery>
LassoSamlp2AuthnRequest — <samlp2:AuthnRequest>
LassoSamlp2AuthzDecisionQuery — <samlp2:AuthzDecisionQuery>
LassoSamlp2Extensions — <samlp2:Extensions>
LassoSamlp2IDPEntry — <samlp2:IDPEntry>
LassoSamlp2IDPList — <samlp2:IDPList>
LassoSamlp2LogoutRequest — <samlp2:LogoutRequest>
LassoSamlp2LogoutResponse — <samlp2:LogoutResponse>
LassoSamlp2ManageNameIDRequest — <samlp2:ManageNameIDRequest>
LassoSamlp2ManageNameIDResponse — <samlp2:ManageNameIDResponse>
LassoSamlp2NameIDMappingRequest — <samlp2:NameIDMappingRequest>
LassoSamlp2NameIDMappingResponse — <samlp2:NameIDMappingResponse>
LassoSamlp2NameIDPolicy — <samlp2:NameIDPolicy>
LassoSamlp2RequestAbstract — <samlp2:RequestAbstract>
LassoSamlp2RequestedAuthnContext — <samlp2:RequestedAuthnContext>
LassoSamlp2Response — <samlp2:Response>
LassoSamlp2Scoping — <samlp2:Scoping>
LassoSamlp2StatusCode — <samlp2:StatusCode>
LassoSamlp2StatusDetail — <samlp2:StatusDetail>
LassoSamlp2StatusResponse — <samlp2:StatusResponse>
LassoSamlp2Status — <samlp2:Status>
LassoSamlp2SubjectQueryAbstract — <samlp2:SubjectQueryAbstract>
LassoSamlp2Terminate — <samlp2:Terminate>
LassoEcpRequest — <ecp:Request>
LassoEcpResponse — <ecp:Response>
LassoEcpRelayState — <ecp:RelayState>
Object from the SOAP 1.1 schemas
LassoSoapBody — <soap:Body>
LassoSoapDetail
LassoSoapEnvelope — <soap:Envelope>
LassoSoapFault — object mapping for a soap11:Fault
LassoSoapHeader — <soap:Header>
Strings for SOAP
Object from the XML-DSIG schemas
LassoDsKeyInfo — object mapping for an XML DSIG KeyInfo element
LassoDsKeyValue — object mapping for an XML DSIG KeyValue element
LassoDsRsaKeyValue
Strings for XML-DSIG — General strings constants for XMLDsig
API Index
Annotation Glossary
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSamlp2StatusCode.html0000644000000000000000000000013214404126163023723 xustar0030 mtime=1678814323.029964812 30 atime=1678814323.029964812 30 ctime=1678814323.029964812 lasso-2.8.2/docs/reference/lasso/html/LassoSamlp2StatusCode.html0000644000175000017500000001306214404126163027175 0ustar00bdauvergnebdauvergne00000000000000 LassoSamlp2StatusCode: lasso Reference Manual

LassoSamlp2StatusCode

LassoSamlp2StatusCode — <samlp2:StatusCode>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlp2StatusCode

Description

Figure 88. Schema fragment for samlp2:StatusCode


<complexType name="StatusCodeType">
  <sequence>
    <element ref="samlp:StatusCode" minOccurs="0"/>
  </sequence>
  <attribute name="Value" type="anyURI" use="required"/>
</complexType>

Functions

lasso_samlp2_status_code_new ()

LassoNode *
lasso_samlp2_status_code_new (void);

Creates a new LassoSamlp2StatusCode object.

Returns

a newly created LassoSamlp2StatusCode object

Types and Values

struct LassoSamlp2StatusCode

struct LassoSamlp2StatusCode {
	/* elements */
	LassoSamlp2StatusCode *StatusCode;
	/* attributes */
	char *Value;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/saml2.html0000644000000000000000000000013214404126163020602 xustar0030 mtime=1678814323.049964926 30 atime=1678814323.049964926 30 ctime=1678814323.049964926 lasso-2.8.2/docs/reference/lasso/html/saml2.html0000644000175000017500000000550014404126163024052 0ustar00bdauvergnebdauvergne00000000000000 SAML 2.0 Single Sign On profiles: lasso Reference Manual

SAML 2.0 Single Sign On profiles

LassoAssertionQuery
LassoNameIdManagement — Name Id Management Profile (SAMLv2)
LassoEcp — Enhanced Client or Proxy Profile (SAMLv2)
Utility functions for SAML 2.0 — Misc functions used inside Lasso

The profile LassoLogin and LassoLogout are shared between SAML 2.0 and ID-FF 1.2, depending on the declared protocol support, Lasso will create request respecting the chosen standard. Beware that initialization of the LassoLogin object, after construction, differ between the two stacks of profiles. The LassoNameIdManagement profile replace the nearly equivalent LassoDefederation profile from ID-FF 1.2.

lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoDsKeyValue.html0000644000000000000000000000013214404126162022601 xustar0030 mtime=1678814322.997964629 30 atime=1678814322.997964629 30 ctime=1678814322.997964629 lasso-2.8.2/docs/reference/lasso/html/LassoDsKeyValue.html0000644000175000017500000001155114404126162026054 0ustar00bdauvergnebdauvergne00000000000000 LassoDsKeyValue: lasso Reference Manual

LassoDsKeyValue

LassoDsKeyValue — object mapping for an XML DSIG KeyValue element

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoDsKeyValue

Description

Functions

lasso_ds_key_value_new ()

LassoDsKeyValue *
lasso_ds_key_value_new (void);

Creates a new LassoDsKeyValue object.

Returns

a newly created LassoDsKeyValue object

Types and Values

struct LassoDsKeyValue

struct LassoDsKeyValue;
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSaml2SubjectConfirmationData.html0000644000000000000000000000013214404126163026227 xustar0030 mtime=1678814323.017964743 30 atime=1678814323.017964743 30 ctime=1678814323.017964743 lasso-2.8.2/docs/reference/lasso/html/LassoSaml2SubjectConfirmationData.html0000644000175000017500000001521314404126163031501 0ustar00bdauvergnebdauvergne00000000000000 LassoSaml2SubjectConfirmationData: lasso Reference Manual

LassoSaml2SubjectConfirmationData

LassoSaml2SubjectConfirmationData — <saml2:SubjectConfirmationData>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSaml2SubjectConfirmationData

Description

Figure 64. Schema fragment for saml2:SubjectConfirmationData


<complexType name="SubjectConfirmationDataType" mixed="true">
  <complexContent>
    <restriction base="anyType">
      <sequence>
        <any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
      </sequence>
      <attribute name="NotBefore" type="dateTime" use="optional"/>
      <attribute name="NotOnOrAfter" type="dateTime" use="optional"/>
      <attribute name="Recipient" type="anyURI" use="optional"/>
      <attribute name="InResponseTo" type="NCName" use="optional"/>
      <attribute name="Address" type="string" use="optional"/>
      <anyAttribute namespace="##other" processContents="lax"/>
    </restriction>
  </complexContent>
</complexType>

Functions

lasso_saml2_subject_confirmation_data_new ()

LassoNode *
lasso_saml2_subject_confirmation_data_new
                               (void);

Creates a new LassoSaml2SubjectConfirmationData object.

Returns

a newly created LassoSaml2SubjectConfirmationData object

Types and Values

struct LassoSaml2SubjectConfirmationData

struct LassoSaml2SubjectConfirmationData {
	/* attributes */
	char *NotBefore;
	char *NotOnOrAfter;
	char *Recipient;
	char *InResponseTo;
	char *Address;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSaml2KeyInfoConfirmationData.html0000644000000000000000000000013214404126163026174 xustar0030 mtime=1678814323.017964743 30 atime=1678814323.017964743 30 ctime=1678814323.017964743 lasso-2.8.2/docs/reference/lasso/html/LassoSaml2KeyInfoConfirmationData.html0000644000175000017500000001412214404126163031444 0ustar00bdauvergnebdauvergne00000000000000 LassoSaml2KeyInfoConfirmationData: lasso Reference Manual

LassoSaml2KeyInfoConfirmationData

LassoSaml2KeyInfoConfirmationData — <saml2:KeyInfoConfirmationData>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSaml2KeyInfoConfirmationData

Description

Figure 59. Schema fragment for saml2:KeyInfoConfirmationData


<complexType name="KeyInfoConfirmationDataType" mixed="false">
  <complexContent>
    <restriction base="saml:SubjectConfirmationDataType">
      <sequence>
        <element ref="ds:KeyInfo" maxOccurs="unbounded"/>
      </sequence>
    </restriction>
  </complexContent>
</complexType>

Functions

lasso_saml2_key_info_confirmation_data_new ()

LassoNode *
lasso_saml2_key_info_confirmation_data_new
                               (void);

Creates a new LassoSaml2KeyInfoConfirmationData object.

Returns

a newly created LassoSaml2KeyInfoConfirmationData object

Types and Values

struct LassoSaml2KeyInfoConfirmationData

struct LassoSaml2KeyInfoConfirmationData {
	/* elements */
	/* XXX */ void *KeyInfo;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSamlp2NameIDMappingResponse.html0000644000000000000000000000013214404126163025775 xustar0030 mtime=1678814323.025964789 30 atime=1678814323.025964789 30 ctime=1678814323.025964789 lasso-2.8.2/docs/reference/lasso/html/LassoSamlp2NameIDMappingResponse.html0000644000175000017500000001447014404126163031253 0ustar00bdauvergnebdauvergne00000000000000 LassoSamlp2NameIDMappingResponse: lasso Reference Manual

LassoSamlp2NameIDMappingResponse

LassoSamlp2NameIDMappingResponse — <samlp2:NameIDMappingResponse>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlp2StatusResponse
            ╰── LassoSamlp2NameIDMappingResponse

Description

Figure 82. Schema fragment for samlp2:NameIDMappingResponse


<complexType name="NameIDMappingResponseType">
  <complexContent>
    <extension base="samlp:StatusResponseType">
      <choice>
        <element ref="saml:NameID"/>
        <element ref="saml:EncryptedID"/>
      </choice>
    </extension>
  </complexContent>
</complexType>

Functions

lasso_samlp2_name_id_mapping_response_new ()

LassoNode *
lasso_samlp2_name_id_mapping_response_new
                               (void);

Creates a new LassoSamlp2NameIDMappingResponse object.

Returns

a newly created LassoSamlp2NameIDMappingResponse object

Types and Values

struct LassoSamlp2NameIDMappingResponse

struct LassoSamlp2NameIDMappingResponse {
	/* elements */
	LassoSaml2NameID *NameID;
	LassoSaml2EncryptedElement *EncryptedID;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoNameIdManagement.html0000644000000000000000000000013214404126163023720 xustar0030 mtime=1678814323.009964697 30 atime=1678814323.009964697 30 ctime=1678814323.009964697 lasso-2.8.2/docs/reference/lasso/html/LassoNameIdManagement.html0000644000175000017500000006002214404126163027170 0ustar00bdauvergnebdauvergne00000000000000 LassoNameIdManagement: lasso Reference Manual

LassoNameIdManagement

LassoNameIdManagement — Name Id Management Profile (SAMLv2)

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoProfile
            ╰── LassoNameIdManagement

Description

Functions

lasso_name_id_management_new ()

LassoNameIdManagement *
lasso_name_id_management_new (LassoServer *server);

Creates a new LassoNameIdManagement.

Parameters

server

the LassoServer

 

Returns

a newly created LassoNameIdManagement object; or NULL if an error occured


lasso_name_id_management_new_from_dump ()

LassoNameIdManagement *
lasso_name_id_management_new_from_dump
                               (LassoServer *server,
                                const char *dump);

Restores the dump to a new LassoLogout.

Parameters

server

the LassoServer

 

dump

XML name_id_management dump

 

Returns

a newly created LassoLogout; or NULL if an error occured


lasso_name_id_management_dump ()

char *
lasso_name_id_management_dump (LassoNameIdManagement *name_id_management);

Dumps name_id_management content to an XML string.

Parameters

name_id_management

a LassoLogout

 

Returns

the dump string. It must be freed by the caller.

[transfer full]


lasso_name_id_management_destroy ()

void
lasso_name_id_management_destroy (LassoNameIdManagement *name_id_management);

Destroys a LassoNameIdManagement object.

Parameters

name_id_management

a LassoNameIdManagement

 

lasso_name_id_management_init_request ()

lasso_error_t
lasso_name_id_management_init_request (LassoNameIdManagement *name_id_management,
                                       char *remote_provider_id,
                                       char *new_name_id,
                                       LassoHttpMethod http_method);

Initializes a new Name Id Management Request. If new_name_id is NULL, it is a Termination request, if not and we are an IdP is a NameID change request, if we are a SP, it is a request to add a SP provided Id to the NameID of the IdP. It can be useful if the SP do not want to store the federation, instead he can export its own identifiers to the IdP.

Parameters

name_id_management

a LassoNameIdManagement

 

remote_provider_id

the providerID of the remote provider.

 

new_name_id

the new NameId or NULL to terminate a federation

 

http_method

if set, then it get the protocol profile in metadata corresponding of this HTTP request method.

 

Returns

0 on success; or a negative value otherwise.


lasso_name_id_management_build_request_msg ()

lasso_error_t
lasso_name_id_management_build_request_msg
                               (LassoNameIdManagement *name_id_management);

Builds the Name Id Management request message.

Parameters

name_id_management

a LassoNameIdManagement

 

Returns

0 on success; or a negative value otherwise.


lasso_name_id_management_process_request_msg ()

lasso_error_t
lasso_name_id_management_process_request_msg
                               (LassoNameIdManagement *name_id_management,
                                gchar *request_msg);

Processes a Name Id Management request message. Rebuilds a request object from the message and check its signature.

Parameters

name_id_management

a LassoNameIdManagement

 

request_msg

the Name Id Management request message

 

Returns

0 on success; or a negative value otherwise.


lasso_name_id_management_validate_request ()

lasso_error_t
lasso_name_id_management_validate_request
                               (LassoNameIdManagement *name_id_management);

Processes a Name Id Management request, performing requested actions against principal federations. Profile identity may have to be saved afterwards.

Parameters

name_id_management

a LassoNameIdManagement

 

Returns

0 on success; or a negative value otherwise.


lasso_name_id_management_build_response_msg ()

lasso_error_t
lasso_name_id_management_build_response_msg
                               (LassoNameIdManagement *name_id_management);

Builds the Name Id Management response message.

Parameters

name_id_management

a LassoNameIdManagement

 

Returns

0 on success; or a negative value otherwise.


lasso_name_id_management_process_response_msg ()

lasso_error_t
lasso_name_id_management_process_response_msg
                               (LassoNameIdManagement *name_id_management,
                                gchar *response_msg);

Parses the response message and builds the corresponding response object. Performs requested actions against principal federations. Profile identity may have to be saved afterwards.

Parameters

name_id_management

a LassoNameIdManagement

 

response_msg

the response message

 

Returns

0 on success; or a negative value otherwise.

Types and Values

struct LassoNameIdManagement

struct LassoNameIdManagement;
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSaml2Advice.html0000644000000000000000000000013214404126163022660 xustar0030 mtime=1678814323.013964721 30 atime=1678814323.013964721 30 ctime=1678814323.013964721 lasso-2.8.2/docs/reference/lasso/html/LassoSaml2Advice.html0000644000175000017500000001317414404126163026136 0ustar00bdauvergnebdauvergne00000000000000 LassoSaml2Advice: lasso Reference Manual

LassoSaml2Advice

LassoSaml2Advice — <saml2:Advice>

Functions

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSaml2Advice

Description

Figure 45. Schema fragment for saml2:Advice


<complexType name="AdviceType">
  <choice minOccurs="0" maxOccurs="unbounded">
    <element ref="saml:AssertionIDRef"/>
    <element ref="saml:AssertionURIRef"/>
    <element ref="saml:Assertion"/>
    <element ref="saml:EncryptedAssertion"/>
    <any namespace="##other" processContents="lax"/>
  </choice>
</complexType>

Functions

lasso_saml2_advice_new ()

LassoNode *
lasso_saml2_advice_new (void);

Creates a new LassoSaml2Advice object.

Returns

a newly created LassoSaml2Advice object

Types and Values

struct LassoSaml2Advice

struct LassoSaml2Advice {
	/* elements */
	GList *AssertionIDRef; /* of LassoNode */
	GList *AssertionURIRef; /* of LassoNode */
	GList *Assertion; /* of LassoSaml2Assertion */
	GList *EncryptedAssertion; /* of LassoSaml2EncryptedElement */
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSaml2ConditionAbstract.html0000644000000000000000000000013214404126163025077 xustar0030 mtime=1678814323.017964743 30 atime=1678814323.017964743 30 ctime=1678814323.017964743 lasso-2.8.2/docs/reference/lasso/html/LassoSaml2ConditionAbstract.html0000644000175000017500000001465214404126163030357 0ustar00bdauvergnebdauvergne00000000000000 LassoSaml2ConditionAbstract: lasso Reference Manual

LassoSaml2ConditionAbstract

LassoSaml2ConditionAbstract — <saml2:ConditionAbstract>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSaml2ConditionAbstract
            ├── LassoSaml2AudienceRestriction
            ├── LassoSaml2OneTimeUse
            ╰── LassoSaml2ProxyRestriction

Description

Figure 55. Schema fragment for saml2:ConditionAbstract


<complexType name="ConditionAbstractType" abstract="true"/>
<element name="AudienceRestriction" type="saml:AudienceRestrictionType"/>
<complexType name="AudienceRestrictionType">
  <complexContent>
    <extension base="saml:ConditionAbstractType">
      <sequence>
        <element ref="saml:Audience" maxOccurs="unbounded"/>
      </sequence>
    </extension>
  </complexContent>
</complexType>

Functions

lasso_saml2_condition_abstract_new ()

LassoNode *
lasso_saml2_condition_abstract_new (void);

Creates a new LassoSaml2ConditionAbstract object.

Returns

a newly created LassoSaml2ConditionAbstract object

Types and Values

struct LassoSaml2ConditionAbstract

struct LassoSaml2ConditionAbstract;
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSaml2OneTimeUse.html0000644000000000000000000000013214404126163023502 xustar0030 mtime=1678814323.017964743 30 atime=1678814323.017964743 30 ctime=1678814323.017964743 lasso-2.8.2/docs/reference/lasso/html/LassoSaml2OneTimeUse.html0000644000175000017500000001307114404126163026754 0ustar00bdauvergnebdauvergne00000000000000 LassoSaml2OneTimeUse: lasso Reference Manual

LassoSaml2OneTimeUse

LassoSaml2OneTimeUse — <saml2:OneTimeUse>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSaml2ConditionAbstract
            ╰── LassoSaml2OneTimeUse

Description

Figure 61. Schema fragment for saml2:OneTimeUse


<complexType name="OneTimeUseType">
  <complexContent>
    <extension base="saml:ConditionAbstractType"/>
  </complexContent>
</complexType>

Functions

lasso_saml2_one_time_use_new ()

LassoNode *
lasso_saml2_one_time_use_new (void);

Creates a new LassoSaml2OneTimeUse object.

Returns

a newly created LassoSaml2OneTimeUse object

Types and Values

struct LassoSaml2OneTimeUse

struct LassoSaml2OneTimeUse;
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSaml2Subject.html0000644000000000000000000000013214404126163023064 xustar0030 mtime=1678814323.017964743 30 atime=1678814323.017964743 30 ctime=1678814323.017964743 lasso-2.8.2/docs/reference/lasso/html/LassoSaml2Subject.html0000644000175000017500000001341614404126163026341 0ustar00bdauvergnebdauvergne00000000000000 LassoSaml2Subject: lasso Reference Manual

LassoSaml2Subject

LassoSaml2Subject — <saml2:Subject>

Functions

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSaml2Subject

Description

Figure 67. Schema fragment for saml2:Subject


<complexType name="SubjectType">
  <choice>
    <sequence>
      <choice>
        <element ref="saml:BaseID"/>
        <element ref="saml:NameID"/>
        <element ref="saml:EncryptedID"/>
      </choice>
      <element ref="saml:SubjectConfirmation" minOccurs="0" maxOccurs="unbounded"/>
    </sequence>
    <element ref="saml:SubjectConfirmation" maxOccurs="unbounded"/>
  </choice>
</complexType>

Functions

lasso_saml2_subject_new ()

LassoNode *
lasso_saml2_subject_new (void);

Creates a new LassoSaml2Subject object.

Returns

a newly created LassoSaml2Subject object

Types and Values

struct LassoSaml2Subject

struct LassoSaml2Subject {
	/* elements */
	LassoSaml2BaseIDAbstract *BaseID;
	LassoSaml2NameID *NameID;
	LassoSaml2EncryptedElement *EncryptedID;
	LassoSaml2SubjectConfirmation *SubjectConfirmation;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoEcp.html0000644000000000000000000000013214404126163021275 xustar0030 mtime=1678814323.001964653 30 atime=1678814323.001964653 30 ctime=1678814323.001964653 lasso-2.8.2/docs/reference/lasso/html/LassoEcp.html0000644000175000017500000010147514404126163024555 0ustar00bdauvergnebdauvergne00000000000000 LassoEcp: lasso Reference Manual

LassoEcp

LassoEcp — Enhanced Client or Proxy Profile (SAMLv2)

Types and Values

struct LassoEcp

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoProfile
            ╰── LassoEcp

Description

Introduction

The LassoEcp object is used to implement a SAMLv2 ECP client. If you want to support ECP in a SP see [ecp-sp]. If you want to support ECP in a IdP see [ecp-idp].


ECP Operational Steps

SAML2 Profile for ECP (Section 4.2) defines these steps for an ECP transaction

  1. ECP issues HTTP Request to SP

  2. SP issues <samlp:AuthnRequest> to ECP using PAOS

  3. ECP determines IdP

  4. ECP conveys <samlp:AuthnRequest> to IdP using SOAP

  5. IdP identifies principal

  6. IdP issues <samlp:Response> to ECP, targeted at SP using SOAP

  7. ECP conveys <samlp:Response> to SP using PAOS

  8. SP grants or denies access to principal

Functions

lasso_ecp_is_provider_in_sp_idplist ()

gboolean
lasso_ecp_is_provider_in_sp_idplist (LassoEcp *ecp,
                                     const gchar *entity_id);

Check to see if the provider with entity_id is in the ecp IDPList returned by the SP.

Parameters

ecp

a LassoEcp

 

entity_id

EntityID to check if member of LassoEcp.IDPList

 

Returns

TRUE if entity_id is in LassoEcp.IDPList, FALSE otherwise


lasso_ecp_is_idp_entry_known_idp_supporting_ecp ()

gboolean
lasso_ecp_is_idp_entry_known_idp_supporting_ecp
                               (LassoEcp *ecp,
                                const LassoSamlp2IDPEntry *idp_entry);

Check to see if the idp_entry is in the entity_id_list

Parameters

ecp

a LassoEcp

 

idp_entry

LassoSamlp2IDPEntry to check if member of entity_id_list

 

Returns

TRUE if entity_id is in idp_list , FALSE otherwise


lasso_ecp_set_known_sp_provided_idp_entries_supporting_ecp ()

void
lasso_ecp_set_known_sp_provided_idp_entries_supporting_ecp
                               (LassoEcp *ecp);

The SP may provide a list of LassoSamlp2IDPEntry (LassoEcp.sp_idp_list) which it trusts. The ECP client has a list of IDP EntityID's it knows supports ECP (LassoEcp.known_idp_entity_ids_supporting_ecp). The set of possible IDP's which can service the SP's authn request are the interesection of these two lists (the IDP's the SP approves and IDP's the ECP knows about). This find the common members between the two lists and assign them to LassoEcp.known_sp_provided_idp_entries_supporting_ecp.

Parameters

ecp

a LassoEcp

 

lasso_ecp_has_sp_idplist ()

gboolean
lasso_ecp_has_sp_idplist (LassoEcp *ecp);

Returns TRUE if the SP provided an IDP List, FALSE otherwise.

Parameters

ecp

a LassoEcp

 

lasso_ecp_get_endpoint_url_by_entity_id ()

gchar *
lasso_ecp_get_endpoint_url_by_entity_id
                               (LassoEcp *ecp,
                                const gchar *entity_id);

Returns the SingleSignOnService SOAP endpoint URL for the specified entity_id . If the provider cannot be found or if the provider does not have a matching endpoint NULL will be returned.

Parameters

ecp

a LassoEcp

 

entity_id

the EntityID of the IdP

 

Returns

url (must be freed by caller)


lasso_ecp_process_sp_idp_list ()

int
lasso_ecp_process_sp_idp_list (LassoEcp *ecp,
                               const LassoSamlp2IDPList *sp_idp_list);

The SP may optionally send a list of IdP's it trusts in ecp:IDPList. The ecp:IDPList may not be complete if the IDPList.GetComplete is non-NULL. If so the IDPList.GetComplete is a URL where a complete IDPList may be fetched.

Whenever the IDPList is updated this function needs to be called because it sets the LassoEcp.known_sp_provided_idp_entries_supporting_ecp and the default IdP URL (LassoProfile.msg_url).

The LassoEcp client has a list of IdP's it knows supports ECP (LassoEcp.known_idp_entity_ids_supporting_ecp). The set of IdP's available to select from should be those in common between SP provided IdP list and those known by this ECP client to support ECP.

This routine sets the LassoEcp.known_sp_provided_idp_entries_supporting_ecp list to the common members (e.g. intersection) of the SP provided IdP list and the list of known IdP's supporting ECP.

A default IdP will be selected and it's endpoint URL will be assigned to LassoProfile.msg_url.

If the SP provided an IDP list then the default URL will be taken from first IDPEntry in LassoEcp.known_sp_provided_idp_entries_supporting_ecp otherwise it will be taken from LassoEcp.known_idp_entity_ids_supporting_ecp.

Parameters

ecp

a LassoEcp

 

lasso_ecp_new ()

LassoEcp *
lasso_ecp_new (LassoServer *server);

Creates a new LassoEcp.

Returns

a newly created LassoEcp object; or NULL if an error occured


lasso_ecp_process_authn_request_msg ()

lasso_error_t
lasso_ecp_process_authn_request_msg (LassoEcp *ecp,
                                     const char *authn_request_msg);

This function implements the following ECP step: ECP Step 3, ECP determines IdP ECP Step 4, parse SP PAOS Authn request, build SOAP for IdP

This is to be used in an ECP client. The authn_request_msg is the SOAP PAOS message received from the SP in response to a resource request with an HTTP Accept header indicating PAOS support.

The following actions are implemented:

  • Extract the samlp:AuthnRequest from the SOAP body and build a new SOAP message containing the samlp:AuthnRequest which will be forwarded to the IdP. This new SOAP message is stored in the LassoProfile.msg_body.

  • Parse the SOAP header which will contain a paos:Request, a ecp:Request and optionally a ecp:RelayState. Some of the data in these headers need to be preserved for later processing steps.

    1. The paos:Request.responseConsumerURL is copied to the LassoEcp.response_consumer_url. This is necessary because the ECP client MUST assure it matches the ecp:Response.AssertionConsumerServiceURL returned by the IdP to prevent man-in-the-middle attacks. It must also match the samlp:AuthnRequest.AssertionConsumerServiceURL.

    2. If the paos:Request contained a messageID it is copied to LassoEcp.message_id so it can be returned in the subsequent paos:Response.refToMessageID. This allows a provider to correlate messages.

    3. If an ecp:RelayState is present it is copied to LassoEcp.relaystate. This is necessary because in step 7 when the ECP responds to the SP it must include RelayState provided in the request.

  • In addition the following items are copied to the LassoEcp for informational purposes:

    • LassoEcp.issuer = ecp:Request.Issuer

    • LassoEcp.provider_name = ecp:Request.ProviderName

    • LassoEcp.is_passive = ecp:Request.IsPassive

    • LassoEcp.sp_idp_list = ecp:Request.IDPList

IdP Selection

In Step 3. The ECP must determine the IdP to forward the AuthnRequest to. There are two sets of IdP's which come into play. The ECP client has a set of IdP's it knows about because their metadata has been loaded into the LassoServer object. The SP may optionally send a list of IdP's in the ecp:Request that it trusts.

The selected IdP *must* be one of the IdP's loaded into the LassoServer object from metadata because the IdP endpoints must be known. Furthermore the IdP *must* support the SingleSignOnService using the SOAP binding. Therefore the known IdP's are filtered for those that match this criteria and a list of their EntityID's are assigned to LassoEcp.known_idp_entity_ids_supporting_ecp. The selected IdP *must* be a member of this list.

The SP may optionally send a list of IdP's it trusts. If the SP sends an IDPList the selected IdP should be a member of this list and from above we know it must also be a member of the LassoEcp.known_idp_entity_ids_supporting_ecp. Therefore the LassoEcp.known_sp_provided_idp_entries_supporting_ecp list is set to the common members (e.g. intersection) of the SP provided IdP list and the list of known IdP's supporting ECP.

When making an IdP selection if the SP provided an IdP List (use LassoEcp.lasso_ecp_has_sp_idplist()) then it should be selected from the LassoEcp.known_sp_provided_idp_entries_supporting_ecp list. Otherwise the IdP should be selected from LassoEcp.known_idp_entity_ids_supporting_ecp.

A default IdP will be selected using the above logic by picking the first IdP in the appropriate list, it's endpoint URL will be assigned to LassoProfile.msg_url. The above processing is implemented by LassoEcp.lasso_ecp_process_sp_idp_list() and if the SP IDPList is updated this routine should be called.

A note about the 3 IdP lists. The LassoEcp.sp_idp_list.IDPList and LassoEcp.known_sp_provided_idp_entries_supporting_ecp are GList's of LassoSamlp2IDPEntry object which have a ProviderID, Name, and Loc attribute. You may wish to use this SP provided information when making a decision or presenting in a user interface that allows a user to make a choice. The LassoEcp.known_idp_entity_ids_supporting_ecp is a GList of EntityID strings.

Given the EntityID of an IdP you can get the ECP endpoint by calling LassoEcp.lasso_ecp_get_endpoint_url_by_entity_id()


Results

After a successful return from this call you are ready to complete Step 4. and forward the request the IdP.

The URL to send to the request to will be LassoProfile.msg_url (if you accept the default IdP) and the body of the message to post will be LassoProfile.msg_body.


Side Effects

After a successful return the LassoEcp object will be updated with:

  • ecp->response_consumer_url = paos_request->responseConsumerURL

  • ecp->message_id = paos_request->messageID

  • ecp->relaystate = ecp_relaystate->RelayState

  • ecp->issuer = ecp_request->Issue

  • ecp->provider_name = ecp_request->ProviderName

  • ecp->is_passive = ecp_request->IsPassive

  • ecp->known_idp_entity_ids_supporting_ecp

  • ecp->sp_idp_list = ecp_request->IDPList

  • ecp->known_sp_provided_idp_entries_supporting_ecp

Parameters

ecp

this LassoEcp object

 

authn_request_msg

the PAOS authn request received from the SP

 

lasso_ecp_process_response_msg ()

lasso_error_t
lasso_ecp_process_response_msg (LassoEcp *ecp,
                                const char *response_msg);

The function implements ECP Step 7; parse IdP SOAP response and build PAOS response for SP.

See SAML Profile Section 4.2.4.5 PAOS Response Header Block: ECP to SP

This is to be used in an ECP client. The response_msg parameter contains the SOAP response from the IdP. We extract the ECP Header Block and body from it. We will generate a new PAOS message to send to the SP, the SOAP header will contain a paos:Response. If we received a paos:Request.MessageID in Step. 4 from the SP then we will copy it back to the paos:Response.refToMessageID. If we received a RelayState we will add that to the SOAP header as well.

To prevent a man-in-the-middle attack we verify the responseConsumerURL we received in Step 4 matches the ecp:Response.AssertionConsumerServiceURL we just received back from the IdP. If they do not match we return a LASSO_ECP_ERROR_ASSERTION_CONSUMER_URL_MISMATCH error and set the LassoProvider.msg_body to the appropriate SOAP fault.

The new PAOS message for the SP we are buiding contains the IdP response in the new SOAP body and the new SOAP headers will contain a paso:Response and optionally an ecp:RelayState.

After a successful return from this call you are ready to complete Step 7. and forward the response to the SP.

The PASO message is assigned to the LassoProvider.msg_body and the desination URL is assigned to the LassoProvider.msg_url.

Side Effects

After a successful return the LassoEcp object will be updated with:

  • ecp->assertion_consumer_url = ecp_response->AssertionConsumerServiceURL

  • ecp.profile.msg_url = ecp->assertion_consumer_url

  • ecp.profile.msg_body_url = PAOS response to SP

Parameters

ecp

this LassoEcp object

 

response_msg

the SOAP response from the IdP

 

lasso_ecp_destroy ()

void
lasso_ecp_destroy (LassoEcp *ecp);

Destroys a LassoEcp object

Parameters

ecp

a LassoEcp

 

Types and Values

struct LassoEcp

struct LassoEcp {
	gchar *assertion_consumer_url;
	gchar *message_id;
	gchar *response_consumer_url;
	gchar *relaystate;
	LassoSaml2NameID *issuer;
	gchar *provider_name;
	gboolean is_passive;
	LassoSamlp2IDPList *sp_idp_list;
	GList *known_sp_provided_idp_entries_supporting_ecp; /* of LassoSamlp2IDPEntry */
	GList *known_idp_entity_ids_supporting_ecp;	         /* of strings */
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSamlSubjectLocality.html0000644000000000000000000000013214404126163024503 xustar0030 mtime=1678814323.021964766 30 atime=1678814323.021964766 30 ctime=1678814323.021964766 lasso-2.8.2/docs/reference/lasso/html/LassoSamlSubjectLocality.html0000644000175000017500000001356014404126163027760 0ustar00bdauvergnebdauvergne00000000000000 LassoSamlSubjectLocality: lasso Reference Manual

LassoSamlSubjectLocality

LassoSamlSubjectLocality — <saml:SubjectLocality>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlSubjectLocality

Description

Figure 41. Schema fragment for saml:SubjectLocality


<element name="SubjectLocality" type="saml:SubjectLocalityType"/>
<complexType name="SubjectLocalityType">
  <attribute name="IPAddress" type="string" use="optional"/>
  <attribute name="DNSAddress" type="string" use="optional"/>
</complexType>

Functions

lasso_saml_subject_locality_new ()

LassoNode *
lasso_saml_subject_locality_new (void);

Creates a new LassoSamlSubjectLocality object.

Returns

a newly created LassoSamlSubjectLocality object

Types and Values

struct LassoSamlSubjectLocality

struct LassoSamlSubjectLocality {
	/* <attribute name="IPAddress" type="string" use="optional"/> */
	char *IPAddress;
	/* <attribute name="DNSAddress" type="string" use="optional"/> */
	char *DNSAddress;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoDsRsaKeyValue.html0000644000000000000000000000013214404126162023247 xustar0030 mtime=1678814322.997964629 30 atime=1678814322.997964629 30 ctime=1678814322.997964629 lasso-2.8.2/docs/reference/lasso/html/LassoDsRsaKeyValue.html0000644000175000017500000001171414404126162026523 0ustar00bdauvergnebdauvergne00000000000000 LassoDsRsaKeyValue: lasso Reference Manual

LassoDsRsaKeyValue

LassoDsRsaKeyValue

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoDsRsaKeyValue

Description

Functions

lasso_ds_rsa_key_value_new ()

LassoDsRsaKeyValue *
lasso_ds_rsa_key_value_new (void);

Creates a new LassoDsRsaKeyValue object.

Returns

a newly created LassoDsRsaKeyValue object

Types and Values

struct LassoDsRsaKeyValue

struct LassoDsRsaKeyValue;
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSamlStatementAbstract.html0000644000000000000000000000013214404126163025033 xustar0030 mtime=1678814323.021964766 30 atime=1678814323.021964766 30 ctime=1678814323.021964766 lasso-2.8.2/docs/reference/lasso/html/LassoSamlStatementAbstract.html0000644000175000017500000001041614404126163030305 0ustar00bdauvergnebdauvergne00000000000000 LassoSamlStatementAbstract: lasso Reference Manual

LassoSamlStatementAbstract

LassoSamlStatementAbstract — <saml:StatementAbstract>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlStatementAbstract
            ╰── LassoSamlSubjectStatementAbstract

Description

Figure 39. Schema fragment for saml:StatementAbstract

<element name="Statement" type="saml:StatementAbstractType"/>
<complexType name="StatementAbstractType" abstract="true"/>

Functions

Types and Values

struct LassoSamlStatementAbstract

struct LassoSamlStatementAbstract;
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoNameRegistration.html0000644000000000000000000000013214404126163024041 xustar0030 mtime=1678814323.009964697 30 atime=1678814323.009964697 30 ctime=1678814323.009964697 lasso-2.8.2/docs/reference/lasso/html/LassoNameRegistration.html0000644000175000017500000006331414404126163027320 0ustar00bdauvergnebdauvergne00000000000000 LassoNameRegistration: lasso Reference Manual

LassoNameRegistration

LassoNameRegistration — Name Registration Profile (ID-FF)

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoProfile
            ╰── LassoNameRegistration

Description

Functions

lasso_name_registration_new ()

LassoNameRegistration *
lasso_name_registration_new (LassoServer *server);

Creates a new LassoNameRegistration.

Parameters

server

the LassoServer

 

Returns

a newly created LassoNameRegistration object; or NULL if an error occured


lasso_name_registration_new_from_dump ()

LassoNameRegistration *
lasso_name_registration_new_from_dump (LassoServer *server,
                                       const char *dump);

Restores the dump to a new LassoNameRegistration.

Parameters

server

the LassoServer

 

dump

XML logout dump

 

Returns

a newly created LassoNameRegistration; or NULL if an error occured


lasso_name_registration_build_request_msg ()

lasso_error_t
lasso_name_registration_build_request_msg
                               (LassoNameRegistration *name_registration);

Builds a register name identifier request message.

It gets the register name identifier protocol profile and:

  • if it is a SOAP method, then it builds the register name identifier request SOAP message, optionally signs his node, sets msg_body, gets the SoapEndpoint url and sets msg_url.

  • if it is a HTTP-Redirect method, then it builds the register name identifier request QUERY message (optionally signs the request message), builds the request url with register name identifier url with register name identifier service url, sets msg_url in the register name identifier object, sets msg_body to NULL.

Parameters

name_registration

a LassoNameRegistration

 

Returns

0 on success; or a negative value otherwise.


lasso_name_registration_build_response_msg ()

lasso_error_t
lasso_name_registration_build_response_msg
                               (LassoNameRegistration *name_registration);

Builds the register name idendifier response message.

It gets the request message method and:

  • if it is a SOAP method, then it builds the response SOAP message, sets the msg_body attribute, gets the register name identifier service return url and sets msg_url of the object.

  • if it is a HTTP-Redirect method, then it builds the response QUERY message, builds the response url, sets msg_url with the response url and sets the msg_body with NULL

If private key and certificate are set in server object it will also signs the message (either with X509 if SOAP or with a simple signature for query strings).

Parameters

name_registration

a LassoNameRegistration

 

Returns

0 on success; or a negative value otherwise.


lasso_name_registration_destroy ()

void
lasso_name_registration_destroy (LassoNameRegistration *name_registration);

Destroys a LassoNameRegistration object.

Parameters

name_registration

a LassoNameRegistration

 

lasso_name_registration_dump ()

gchar *
lasso_name_registration_dump (LassoNameRegistration *name_registration);

Dumps name_registration content to an XML string.

Parameters

name_registration

a LassoNameRegistration

 

Returns

the dump string. It must be freed by the caller.

[transfer full]


lasso_name_registration_init_request ()

lasso_error_t
lasso_name_registration_init_request (LassoNameRegistration *name_registration,
                                      char *remote_providerID,
                                      LassoHttpMethod http_method);

Initializes a new lib:RegisterNameIdentifierRequest request; it sets name_registration->nameIdentifier to the new name identifier and name_registration->oldNameIdentifier to the old one.

Parameters

name_registration

a LassoNameRegistration

 

remote_providerID

the providerID of the identity provider.

 

http_method

if set, then it get the protocol profile in metadata corresponding of this HTTP request method.

 

Returns

0 on success; or a negative value otherwise.


lasso_name_registration_process_request_msg ()

lasso_error_t
lasso_name_registration_process_request_msg
                               (LassoNameRegistration *name_registration,
                                gchar *request_msg);

Processes a lib:RegisterNameIdentifierRequest message. Rebuilds a request object from the message and optionally verifies its signature. Sets profile->nameIdentifier to local name identifier. If it changed (when this is IdP-initiated and there was no previously defined local name identifier) profile->nameIdentifier will be the new one and profile->oldNameIdentiifer the old one.

Parameters

name_registration

a LassoNameRegistration

 

request_msg

the register name identifier request message

 

Returns

0 on success; or a negative value otherwise.


lasso_name_registration_process_response_msg ()

lasso_error_t
lasso_name_registration_process_response_msg
                               (LassoNameRegistration *name_registration,
                                gchar *response_msg);

Processes a lib:RegisterNameIdentifierResponse message. Rebuilds a response object from the message and optionally verifies its signature.

If the response depicts Success it will also update Principal federation.

Parameters

name_registration

a LassoNameRegistration

 

response_msg

the register name identifier response message

 

Returns

0 on success; or a negative value otherwise.


lasso_name_registration_validate_request ()

lasso_error_t
lasso_name_registration_validate_request
                               (LassoNameRegistration *name_registration);

Checks profile request with regards to message status and principal federations, update them accordingly and prepares a lib:RegisterNameIdentifierResponse accordingly.

Parameters

name_registration

a LassoNameRegistration

 

Returns

0 on success; or a negative value otherwise.

Types and Values

struct LassoNameRegistration

struct LassoNameRegistration {
	LassoSamlNameIdentifier *oldNameIdentifier;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSamlp2IDPEntry.html0000644000000000000000000000013214404126163023303 xustar0030 mtime=1678814323.025964789 30 atime=1678814323.025964789 30 ctime=1678814323.025964789 lasso-2.8.2/docs/reference/lasso/html/LassoSamlp2IDPEntry.html0000644000175000017500000001275114404126163026561 0ustar00bdauvergnebdauvergne00000000000000 LassoSamlp2IDPEntry: lasso Reference Manual

LassoSamlp2IDPEntry

LassoSamlp2IDPEntry — <samlp2:IDPEntry>

Functions

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlp2IDPEntry

Description

Figure 75. Schema fragment for samlp2:IDPEntry


<complexType name="IDPEntryType">
  <attribute name="ProviderID" type="anyURI" use="required"/>
  <attribute name="Name" type="string" use="optional"/>
  <attribute name="Loc" type="anyURI" use="optional"/>
</complexType>

Functions

lasso_samlp2_idp_entry_new ()

LassoNode *
lasso_samlp2_idp_entry_new (void);

Creates a new LassoSamlp2IDPEntry object.

Returns

a newly created LassoSamlp2IDPEntry object

Types and Values

struct LassoSamlp2IDPEntry

struct LassoSamlp2IDPEntry {
	/* attributes */
	char *ProviderID;
	char *Name;
	char *Loc;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSamlpResponseAbstract.html0000644000000000000000000000013214404126163025045 xustar0030 mtime=1678814323.029964812 30 atime=1678814323.029964812 30 ctime=1678814323.029964812 lasso-2.8.2/docs/reference/lasso/html/LassoSamlpResponseAbstract.html0000644000175000017500000001643114404126163030322 0ustar00bdauvergnebdauvergne00000000000000 LassoSamlpResponseAbstract: lasso Reference Manual

LassoSamlpResponseAbstract

LassoSamlpResponseAbstract — <samlp:ResponseAbstractType>

Functions

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlpResponseAbstract
            ├── LassoSamlpResponse
            ├── LassoLibStatusResponse
            ╰── LassoLibNameIdentifierMappingResponse

Description

Figure 35. Schema fragment for samlp:ResponseAbstractType


<complexType name="ResponseAbstractType" abstract="true">
  <sequence>
     <element ref="ds:Signature" minOccurs="0"/>
  </sequence>
  <attribute name="ResponseID" type="saml:IDType" use="required"/>
  <attribute name="InResponseTo" type="saml:IDReferenceType" use="optional"/>
  <attribute name="MajorVersion" type="integer" use="required"/>
  <attribute name="MinorVersion" type="integer" use="required"/>
  <attribute name="IssueInstant" type="dateTime" use="required"/>
  <attribute name="Recipient" type="anyURI" use="optional"/>
</complexType>

From oasis-sstc-saml-schema-assertion-1.0.xsd:
<simpleType name="IDType">
  <restriction base="string"/>
</simpleType>
<simpleType name="IDReferenceType">
  <restriction base="string"/>
</simpleType>

Functions

lasso_samlp_response_abstract_fill ()

void
lasso_samlp_response_abstract_fill (LassoSamlpResponseAbstract *response,
                                    const char *InResponseTo,
                                    const char *Recipient);

Types and Values

struct LassoSamlpResponseAbstract

struct LassoSamlpResponseAbstract {
	/* <attribute name="ResponseID" type="saml:IDType" use="required"/> */
	char *ResponseID;
	/* <attribute name="InResponseTo" type="saml:IDReferenceType" use="optional"/> */
	char *InResponseTo;
	/* <attribute name="MajorVersion" type="integer" use="required"/> */
	int MajorVersion;
	/* <attribute name="MinorVersion" type="integer" use="required"/> */
	int MinorVersion;
	/* <attribute name="IssueInstant" type="dateTime" use="required"/> */
	char *IssueInstant;
	/* <attribute name="Recipient" type="anyURI" use="optional"/> */
	char *Recipient;

	/* ds:Signature stuffs */
	LassoSignatureType sign_type;
	LassoSignatureMethod sign_method;
	char *private_key_file;
	char *certificate_file;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSamlNameIdentifier.html0000644000000000000000000000013214404126163024266 xustar0030 mtime=1678814323.021964766 30 atime=1678814323.021964766 30 ctime=1678814323.021964766 lasso-2.8.2/docs/reference/lasso/html/LassoSamlNameIdentifier.html0000644000175000017500000001777314404126163027555 0ustar00bdauvergnebdauvergne00000000000000 LassoSamlNameIdentifier: lasso Reference Manual

LassoSamlNameIdentifier

LassoSamlNameIdentifier — <saml:NameIdentifier>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlNameIdentifier

Description

Figure 32. Schema fragment for saml:NameIdentifier


<element name="NameIdentifier" type="saml:NameIdentifierType"/>
<complexType name="NameIdentifierType">
  <simpleContent>
    <extension base="string">
      <attribute name="NameQualifier" type="string" use="optional"/>
      <attribute name="Format" type="anyURI" use="optional"/>
    </extension>
  </simpleContent>
</complexType>

Functions

lasso_saml_name_identifier_new ()

LassoSamlNameIdentifier *
lasso_saml_name_identifier_new (void);

Creates a new LassoSamlNameIdentifier object.

Returns

a newly created LassoSamlNameIdentifier object


lasso_saml_name_identifier_new_from_xmlNode ()

LassoSamlNameIdentifier *
lasso_saml_name_identifier_new_from_xmlNode
                               (xmlNode *xmlnode);

Types and Values

struct LassoSamlNameIdentifier

struct LassoSamlNameIdentifier {
	char *NameQualifier;
	char *Format;
	char *content;
};

NameQualifier is the provider ID of the provider that created the name identifier.

Format is a string constant defined by the Liberty Alliance. The following constants are defined: LASSO_LIB_NAME_IDENTIFIER_FORMAT_FEDERATED, LASSO_LIB_NAME_IDENTIFIER_FORMAT_ONE_TIME, LASSO_LIB_NAME_IDENTIFIER_FORMAT_ENCRYPTED (when providers transmit name identifiers) and LASSO_LIB_NAME_IDENTIFIER_FORMAT_ENTITYID.

lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoIdentity.html0000644000000000000000000000013214404126163022357 xustar0030 mtime=1678814323.001964653 30 atime=1678814323.001964653 30 ctime=1678814323.001964653 lasso-2.8.2/docs/reference/lasso/html/LassoIdentity.html0000644000175000017500000003007314404126163025632 0ustar00bdauvergnebdauvergne00000000000000 LassoIdentity: lasso Reference Manual

LassoIdentity

LassoIdentity — Principal identity

Types and Values

struct LassoIdentity

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoIdentity

Description

A LassoIdentity object records the identifers that a principal use two federate pairs of providers.

Functions

lasso_identity_new ()

LassoIdentity *
lasso_identity_new (void);

Creates a new LassoIdentity.

Returns

a newly created LassoIdentity


lasso_identity_new_from_dump ()

LassoIdentity *
lasso_identity_new_from_dump (const gchar *dump);

Restores the dump to a new LassoIdentity.

Parameters

dump

XML server dump

 

Returns

a newly created LassoIdentity; or NULL if an error occured


lasso_identity_get_federation ()

LassoFederation *
lasso_identity_get_federation (LassoIdentity *identity,
                               const char *providerID);

Looks up and returns the LassoFederation for this provider ID.

Parameters

identity

a LassoIdentity

 

providerID

the provider ID

 

Returns

the LassoFederation; or NULL if it didn't exist. The LassoFederation is internally allocated. It must not be freed, modified or stored.

[transfer none]


lasso_identity_destroy ()

void
lasso_identity_destroy (LassoIdentity *identity);

Destroys an identity.

Parameters

identity

a LassoIdentity

 

lasso_identity_dump ()

gchar *
lasso_identity_dump (LassoIdentity *identity);

Dumps identity content to an XML string.

Parameters

identity

a LassoIdentity

 

Returns

the dump string. It must be freed by the caller.

[transfer full]

Types and Values

struct LassoIdentity

struct LassoIdentity {
	GHashTable *federations; /* of LassoFederation */
	gboolean is_dirty;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/soap.html0000644000000000000000000000013214404126163020526 xustar0030 mtime=1678814323.049964926 30 atime=1678814323.049964926 30 ctime=1678814323.049964926 lasso-2.8.2/docs/reference/lasso/html/soap.html0000644000175000017500000000510414404126163023776 0ustar00bdauvergnebdauvergne00000000000000 Object from the SOAP 1.1 schemas: lasso Reference Manual

Object from the SOAP 1.1 schemas

LassoSoapBody — <soap:Body>
LassoSoapDetail
LassoSoapEnvelope — <soap:Envelope>
LassoSoapFault — object mapping for a soap11:Fault
LassoSoapHeader — <soap:Header>
Strings for SOAP
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoProfile.html0000644000000000000000000000013214404126163022166 xustar0030 mtime=1678814323.009964697 30 atime=1678814323.009964697 30 ctime=1678814323.009964697 lasso-2.8.2/docs/reference/lasso/html/LassoProfile.html0000644000175000017500000015765214404126163025456 0ustar00bdauvergnebdauvergne00000000000000 LassoProfile: lasso Reference Manual

LassoProfile

LassoProfile — Base class for all identity profiles

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoProfile
            ├── LassoAssertionQuery
            ├── LassoDefederation
            ├── LassoEcp
            ├── LassoLogin
            ├── LassoLogout
            ├── LassoNameIdentifierMapping
            ├── LassoNameIdManagement
            ╰── LassoNameRegistration

Description

Functions

lasso_profile_get_request_type_from_soap_msg ()

LassoRequestType
lasso_profile_get_request_type_from_soap_msg
                               (const gchar *soap);

Looks up and return the type of the request in a SOAP message.

Parameters

soap

the SOAP message

 

Returns

the type of request


lasso_profile_set_soap_fault_response ()

lasso_error_t
lasso_profile_set_soap_fault_response (LassoProfile *profile,
                                       const char *faultcode,
                                       const char *faultstring,
                                       GList *details);

Set the response to a SOAP fault, using faultcode , faultstring , and details to initialize it.

Parameters

profile

a LassoProfile object

 

faultcode

the code for the SOAP fault

 

faultstring

the description for the SOAP fault.

[allow-none]

details

a list of nodes to add as details.

[element-type LassoNode][allow-none]

Returns

0 if successful, an error code otherwise.


lasso_profile_is_liberty_query ()

gboolean
lasso_profile_is_liberty_query (const gchar *query);

Tests the query string to know if the URL is called as the result of a Liberty redirect (action initiated elsewhere) or not.

Parameters

query

HTTP query string

 

Returns

TRUE if Liberty query, FALSE otherwise


lasso_profile_get_identity ()

LassoIdentity *
lasso_profile_get_identity (LassoProfile *profile);

Gets the identity bound to profile .

Parameters

profile

a LassoProfile

 

Returns

the identity or NULL if it none was found. The LassoIdentity object is internally allocated and must not be freed by the caller.

[transfer none]


lasso_profile_get_session ()

LassoSession *
lasso_profile_get_session (LassoProfile *profile);

Gets the session bound to profile .

Parameters

profile

a LassoProfile

 

Returns

the session or NULL if it none was found. The LassoSession object is internally allocated and must not be freed by the caller.

[transfer none]


lasso_profile_is_identity_dirty ()

gboolean
lasso_profile_is_identity_dirty (LassoProfile *profile);

Checks whether identity has been modified (and should therefore be saved).

Parameters

profile

a LassoProfile

 

Returns

TRUE if identity has changed


lasso_profile_is_session_dirty ()

gboolean
lasso_profile_is_session_dirty (LassoProfile *profile);

Checks whether session has been modified (and should therefore be saved).

Parameters

profile

a LassoProfile

 

Returns

TRUE if session has changed


lasso_profile_set_identity_from_dump ()

lasso_error_t
lasso_profile_set_identity_from_dump (LassoProfile *profile,
                                      const gchar *dump);

Builds a new LassoIdentity object from XML dump and binds it to profile .

Parameters

profile

a LassoProfile

 

dump

XML identity dump

 

Returns

0 on success; or a negative value otherwise.


lasso_profile_set_session_from_dump ()

lasso_error_t
lasso_profile_set_session_from_dump (LassoProfile *profile,
                                     const gchar *dump);

Builds a new LassoSession object from XML dump and binds it to profile .

Parameters

profile

a LassoProfile

 

dump

XML session dump

 

Returns

0 on success; or a negative value otherwise.


lasso_profile_get_nameIdentifier ()

LassoNode *
lasso_profile_get_nameIdentifier (LassoProfile *profile);

Looks up appropriate federation in object and gets the service provider name identifier (which is actually a LassoSamlNameIdentifier in ID-FF 1.2 and LassoSaml2NameID in SAML 2.0).

Parameters

profile

a LassoProfile

 

Returns

the name identifier or NULL if none was found. The LassoNode object is internally allocated and must not be freed by the caller.

[transfer none]


lasso_profile_get_artifact ()

char *
lasso_profile_get_artifact (LassoProfile *profile);

Return the artifact token

Parameters

profile

a LassoProfile object

 

Returns

a newly allocated string or NULL.

[transfer full][allow-none]


lasso_profile_get_artifact_message ()

char *
lasso_profile_get_artifact_message (LassoProfile *profile);

Return the artifact message.

Parameters

profile

a LassoProfile object

 

Returns

a newly allocated string or NULL.

[transfer full][allow-none]


lasso_profile_set_artifact_message ()

void
lasso_profile_set_artifact_message (LassoProfile *profile,
                                    const char *message);

Set message as the content for the ArtifactResolve response.

Parameters

profile

a LassoProfile object

 

message

the artifact message content

 

lasso_profile_get_server ()

LassoServer *
lasso_profile_get_server (LassoProfile *profile);

Return the LassoServer linked to this profile object. A profile object should always contains one. It allows to find metadatas of other providers and to know our own metadatas.

Parameters

profile

a LassoProfile object

 

Returns

a LassoServer or NULL if profile is not a LassoProfile or no LassoServer object was setup at the creation of this profile.

[transfer none]


lasso_profile_set_signature_hint ()

void
lasso_profile_set_signature_hint (LassoProfile *profile,
                                  LassoProfileSignatureHint signature_hint);

By default each profile will choose to sign or not its messages, this method allow to force or forbid the signature of messages, on a per transaction basis.

Parameters

profile

a LassoProfile object

 

signature_hint

wheter next produced messages should be signed or not (or let Lasso choose from implicit information).

 

lasso_profile_get_signature_hint ()

LassoProfileSignatureHint
lasso_profile_get_signature_hint (LassoProfile *profile);

Return the value of the signature hint attribute (see lasso_profile_set_signature_hint()).

Parameters

profile

a LassoProfile object

 

Returns

a value in the enum type LassoProfileSignatureHint.


lasso_profile_set_signature_verify_hint ()

void
lasso_profile_set_signature_verify_hint
                               (LassoProfile *profile,
                                LassoProfileSignatureVerifyHint signature_verify_hint);

By default each profile will choose to verify or not its messages, this method allow to force or forbid the signature of messages, on a per transaction basis.

Parameters

profile

a LassoProfile object

 

signature_verify_hint

whether next received message signatures should be checked or not (or let Lasso choose from implicit information).

 

lasso_profile_get_signature_verify_hint ()

LassoProfileSignatureVerifyHint
lasso_profile_get_signature_verify_hint
                               (LassoProfile *profile);

Return the value of the signature verify hint attribute (see lasso_profile_set_signature_verify_hint()).

Parameters

profile

a LassoProfile object

 

Returns

a value in the enum type LassoProfileSignatureVerifyHint.


lasso_profile_sso_role_with ()

LassoProviderRole
lasso_profile_sso_role_with (LassoProfile *profile,
                             const char *remote_provider_id);

Returns whether the current provider is a service provider relatively to another provider. It uses the LassoProfile.identity to find if a federation qualifier by the given provider exists or the reverse.

Parameters

profile

a LassoProfile object

 

remote_provider_id

the identifier of a provider

 

Returns

LASSO_PROVIDER_ROLE_NONE if nothing can be said, LASSO_PROVIDER_ROLE_SP if a federation qualifier by remote_provider_id exists or LASSO_PROVIDER_ROLE_IDP if a federation qualifier by our own LassoProvider.ProviderID exists.


lasso_profile_get_signature_status ()

lasso_error_t
lasso_profile_get_signature_status (LassoProfile *profile);

Returns the signature status from the last parsed message.

Parameters

profile

a LassoProfile object

 

Returns

0 if no error from signature checking occurred, an error code otherwise.

Types and Values

struct LassoProfile

struct LassoProfile {
	LassoServer *server;

	LassoNode *request;
	LassoNode *response;

	LassoNode *nameIdentifier;

	gchar *remote_providerID;

	gchar *msg_url;
	gchar *msg_body;
	gchar *msg_relayState;
};

LassoProfile, child class of LassoNode is the basis object of profiles object like LassoLogin, LassoLogout, LassoDefederation, LassoNameIdentifierMapping, LassoNameRegistration, LassoNameIdManagement or LassoAssertionQuery. It handles the minimal state used by all theses profiles.

Members

LassoServer *server;

LassoServer object representing the provider intiating this profile,

 

LassoNode *request;

the currently initialized request, or the last request parsed,

 

LassoNode *response;

the currently intialized request, or the last response parsed,

 

LassoNode *nameIdentifier;

for profiles which transmit a name identifier (that is, most of them), the parsed name identifier, can be a LassoSamlNameIdentifier or a LassoSaml2NameID,

 

gchar *remote_providerID;

the provider ID of the issuer of the last parsed message, whatever it is (a request or a response),

 

gchar *msg_url;

when generating a request or a response, it give the URL to contact

 

gchar *msg_body;

when generating a request or a response using HTTP POST binding (can be HTTP-SOAP or HTTP-Post binding), the body of the POST will be in this field,

 

gchar *msg_relayState;

put there the relaystate to put in the genereated URL for HTTP-Redirect or HTTP-Get binding.

 

enum LassoRequestType

Request types (known for SOAP endpoints)

Members

LASSO_REQUEST_TYPE_INVALID

invalid

 

LASSO_REQUEST_TYPE_LOGIN

Single Sign On and Federation

 

LASSO_REQUEST_TYPE_LOGOUT

Single Logout

 

LASSO_REQUEST_TYPE_DEFEDERATION

Federation Termination

 

LASSO_REQUEST_TYPE_NAME_REGISTRATION

Name Registration

 

LASSO_REQUEST_TYPE_NAME_IDENTIFIER_MAPPING

Name Identifier Mapping

 

LASSO_REQUEST_TYPE_LECP

Liberty-Enabled Client / Proxy

 

LASSO_REQUEST_TYPE_NAME_ID_MANAGEMENT

SAML 2.0 NameID Management request

 

enum LassoProfileSignatureHint

Advice a LassoProfile object about the policy for generating request and response signatures.

Members

LASSO_PROFILE_SIGNATURE_HINT_MAYBE

let Lasso decide what to do.

 

LASSO_PROFILE_SIGNATURE_HINT_FORCE

generate and validate all signatures.

 

LASSO_PROFILE_SIGNATURE_HINT_FORBID

do not generate or validate any signature.

 

enum LassoProfileSignatureVerifyHint

Advice a LassoProfile object about the policy checking request and response signatures.

Members

LASSO_PROFILE_SIGNATURE_VERIFY_HINT_MAYBE

let Lasso decide what to do.

 

LASSO_PROFILE_SIGNATURE_VERIFY_HINT_FORCE

always check signatures.

 

LASSO_PROFILE_SIGNATURE_VERIFY_HINT_IGNORE

check signatures but do not stop protocol handling on failures. The result of signature checking is still available in LassoProfile.signature_status

 

LASSO_PROFILE_SIGNATURE_VERIFY_HINT_LAST

   
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSamlConditions.html0000644000000000000000000000013214404126163023514 xustar0030 mtime=1678814323.021964766 30 atime=1678814323.021964766 30 ctime=1678814323.021964766 lasso-2.8.2/docs/reference/lasso/html/LassoSamlConditions.html0000644000175000017500000001415314404126163026770 0ustar00bdauvergnebdauvergne00000000000000 LassoSamlConditions: lasso Reference Manual

LassoSamlConditions

LassoSamlConditions — <saml:Conditions>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlConditions

Description

Figure 31. Schema fragment for saml:Conditions


<element name="Conditions" type="saml:ConditionsType"/>
<complexType name="ConditionsType">
  <choice minOccurs="0" maxOccurs="unbounded">
    <element ref="saml:AudienceRestrictionCondition"/>
    <element ref="saml:Condition"/>
  </choice>
  <attribute name="NotBefore" type="dateTime" use="optional"/>
  <attribute name="NotOnOrAfter" type="dateTime" use="optional"/>
</complexType>

Functions

lasso_saml_conditions_new ()

LassoSamlConditions *
lasso_saml_conditions_new (void);

Creates a new LassoSamlConditions object.

Returns

a newly created LassoSamlConditions object

Types and Values

struct LassoSamlConditions

struct LassoSamlConditions {
	/* <element ref="saml:Condition"/> */
	GList *Condition; /* of LassoNode */
	/* <element ref="saml:AudienceRestrictionCondition"/> */
	GList *AudienceRestrictionCondition; /* of LassoSamlAudienceRestrictionCondition */
	/* <attribute name="NotBefore" type="dateTime" use="optional"/> */
	char *NotBefore;
	/* <attribute name="NotOnOrAfter" type="dateTime" use="optional"/> */
	char *NotOnOrAfter;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoLogout.html0000644000000000000000000000013214404126163022037 xustar0030 mtime=1678814323.009964697 30 atime=1678814323.009964697 30 ctime=1678814323.009964697 lasso-2.8.2/docs/reference/lasso/html/LassoLogout.html0000644000175000017500000016307314404126163025321 0ustar00bdauvergnebdauvergne00000000000000 LassoLogout: lasso Reference Manual

LassoLogout

LassoLogout — Single Logout Profile

Functions

Types and Values

struct LassoLogout

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoProfile
            ╰── LassoLogout

Description

This profile Send logout notifications between providers. Any receiving provider must retransmit the notification to any other providers with which it shares the current identity by any means supported by the two, that is any provider federated with the current provider. There can be partial failures if no binding can be found to notify a federating partner or if a partner fails to respond.

It is generally advised to apply the local logout transaction before sending a logout request to a partner. In short:

  • an identity provider receiving a logout request should kill the local session before sending logout request to other service provider and proxyied identity providers.

  • a service provider intitiating a logout request must first kill its local session, then proceeds with the logout exchange with its identity provider

The following examples must not be used 'as-is' they lack most of the error checking code that is needed for a secured and robust program, but they give an idea of how to use the API

Example 5. Service Provider Initiated Logout

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
LassoLogout *logout;
char *session_dump; // must contain the session dump
                    // for the current user
int rc; // hold return codes
char *soap_response;

LassoHttpMethod method; // method to use, LASSO_HTTP_METHOD_REDIRECT, 
                        // LASSO_HTTP_METHOD_POST or LASSO_HTTP_METHOD_SOAP,
                        // other methods are rarely supported

logout = lasso_logout_new(server);
lasso_profile_set_session_from_dump(&logout->parent, session_dump);
// the second argument can be NULL, lasso_logout_init_request() will automatically choose the
// identity provider from the first assertion int the session
rc = lasso_logout_init_request(logout, "http://identity-provider-id/",
                method);
if (rc != 0) {
  ... // handle errors, most of them are related to bad initialization
      // or unsupported binding
}
rc = lasso_logout_build_request_msg(logout);
if (rc != 0) {
  ... // handle errors, most of them are related to bad initialization
      // or impossibility to build the query string (missing private keys for signing)
}

// now send the request
switch (method) {
    case LASSO_HTTP_METHOD_REDIRECT:
        // LASSO_PROFILE(logout)->msg_url contains the URL where the 
        // User Agent must be redirected
        ...
        // save the session and logout object, and store them attached to the RequestID of the
        // request, you will need them for handling the response
        session_dump = lasso_node_dump((LassoNode*)logout->parent.session);
        logout_dump = lasso_node_dump((LassoNode*)logout);
        break;
    case LASSO_HTTP_METHOD_POST:
        // you must build a form with a field name SAMLRequest (SAML 2.0) or LAREQ (ID-FF 1.2)
        // with the content of LASSO_PROFILE(logout)->msg_body
        // posting to the address LASSO_PROFILE(logout)->msg_url
        ...
        // save the session and logout object, and store them attached to the RequestID of the
        // request, you will need them for handling the response
        session_dump = lasso_node_dump((LassoNode*)logout->parent.session);
        logout_dump = lasso_node_dump((LassoNode*)logout);
        break;
    case LASSO_HTTP_SOAP:
        // makes a SOAP call, soap_call is NOT a Lasso function
        soap_response = soap_call(login->parent.msg_url, login->parent.msg_body);
        rc = lasso_logout_process_response_msg(logout, soap_response);
        if (rc != 0) {
            // handle errors, important ones are LASSO_LOGOUT_ERROR_UNSUPPORTED_PROFILE meaning
            // that one other service provider of the current session cannot be contacted by the
            // identity provider with the current binding, for example it only accept REDIRECT
            (asynchronous-binding) or
            // POST an we are using SOAP (synchronous-binding).
            ...
        }
        // everything is ok save the session
        session_dump = lasso_node_dump(logout->parent.session);
        // nothing to save because you killed the local session already
        break;
    default:
        // other binding neither are frequent or largely supported
        // so report an error
        break;
    }

The next example show the endpoint for handling response to request with asynchronous binding (POST and Redirect).

Example 6. Service Provider Logout Request Endpoint

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
LassoLogout *logout;
char *request_method = getenv("REQUEST_METHOD");

logout = lasso_logout_new(server);

if (strcmp(request_method, "GET") == 0) {
    char query_string = getenv("QUERY_STRING");
    rc = lasso_logout_process_response_msg(logout, query_string);
} elif (strcmp(request_method, "POST") == 0) {
    char *message;
    // message should contain the content of LARES or SAMLResponse fied, depending if this is an
    // ID-FF 1.2 or SAML 2.0 service.
    rc = lasso_logout_process_response_msg(logout, message);
}
if (rc != 0) {
    // handle errors, as we are already unlogged, those must go to a log file or audit trail,
    // because at this time the user do not care anymore. A report about a failure to logout to
    // the IdP can be eventually shown.
    ...
}

The next snippet show how to implement a logout endpoint, to receive a logout request and respond.

Example 7. Service Provider Logout Request Endpoint

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
LassoLogout *logout;
char *session_dump;
char *request_method = getenv("REQUEST_METHOD");
int rc;
int method;

logout = lasso_logout_new(server);
// server must be previously initialized, it can be kept around
// and used for many transaction, it is never modified by any profile
if (strcmp(request_method. "GET") == 0) {
    method = LASSO_HTTP_METHOD_REDIRECT;
    char query_string = getenv("QUERY_STRING");
    rc = lasso_logout_process_request_msg(logout, query_string);
    if (rc != 0) {
        // handle errors
        ...
    }
} else if (strcmp(request_method, "POST") == 0) {
    char *message;
    // read submitted content if this is a form, put LAREQ or SAMLRequest field into message and
    set method to LASSO_HTTP_METHOD_POST
    // if content type is application/xml then put the full body of the POST inside message and
    // set method to LASSO_HTTP_METHOD_SOAP
    rc = lasso_logout_process_request_msg(logout, message);
    if (rc != 0) {
        // handle errors
        ...
    }
}
protocolProfile = lasso_provider_get_protocol_conformance(LASSO_PROVIDER(server));
if (protocolProfile == LASSO_LIBERTY_1_2) {
    char *session_index;
    LassoSamlNameIdentifier *name_id;
    LibLogoutRequest *logout_request;

    logout_request = LIB_LOGOUT_REQUEST(LASSO_PROFILE(logout)->request);
    session_index = logout_request->SessionIndex;
    name_id = logout_request->NameIdentifier;
    // lookup the session dump using session_index and name_id
} else if (protocolProfile == LASSO_SAML_2_0) {
    char *session_index;
    LassoSaml2NameID *name_id;
    LassoSamlp2LogoutRequest *logout_request;

    logout_request = LASSO_SAMLP2_LOGOUT_REQUEST(LASSO_PROFILE(logout)->request);
    session_index = logout_request->SessionIndex;
    name_id = logout_request->NameID;
    // lookup the session dump using session_index and name_id
}
lasso_profile_set_session_from_dump(LASSO_PROFILE(logout), session_dump);
// you can check other property of the request here if you want
// 
if (request is accepted) {
    rc = lasso_logout_validate_request(logout);
    if (rc != 0) {
        // handle errors..
        ...
    } else {
    .... // kill the local session
         // if local server is an identity provider, then traverse the session using
         // lasso_logout_get_next_providerID() and send logout request to all logged 
         // service providers.
    }
}
// if lasso_logout_validate_request() was not called this will automatically create a Failure
// response.
rc = lasso_logout_build_response_msg(logout);
if (rc != 0) {
    // handle errors..
    ...
}
// the response is produced with the same binding as the request
// see the previous request example for how to send the response
// the only change is for SOAP, you just need to print the msg_body as page content with a
// Content-type of application/xml.

Functions

lasso_logout_new ()

LassoLogout *
lasso_logout_new (LassoServer *server);

Creates a new LassoLogout.

Parameters

server

the LassoServer

 

Returns

a newly created LassoLogout object; or NULL if an error occured


lasso_logout_new_from_dump ()

LassoLogout *
lasso_logout_new_from_dump (LassoServer *server,
                            const gchar *dump);

Restores the dump to a new LassoLogout.

Parameters

server

the LassoServer

 

dump

XML logout dump

 

Returns

a newly created LassoLogout; or NULL if an error occured


lasso_logout_build_request_msg ()

lasso_error_t
lasso_logout_build_request_msg (LassoLogout *logout);

Builds the logout request message.

It gets the HTTP method retrieved to send the request and:

  • if it is a SOAP method, then it builds the logout request SOAP message, sets the msg_body attribute, gets the single logout service url and sets msg_url in the logout object.

  • if it is a HTTP-Redirect method, then it builds the logout request QUERY message, builds the logout request url, sets msg_url in the logout request url, sets msg_body to NULL.

If private key and certificate are set in server object it will also signs the message (either with X509 if SOAP or with a simple signature for query strings).

Parameters

logout

a LassoLogout

 

Returns

0 on success; or a negative value otherwise.


lasso_logout_build_response_msg ()

lasso_error_t
lasso_logout_build_response_msg (LassoLogout *logout);

Builds the logout response message.

It gets the request message method and:

  • if it is a SOAP method, then it builds the logout response SOAP message, sets the msg_body attribute, gets the single logout service return url and sets msg_url in the logout object.

  • if it is a HTTP-Redirect method, then it builds the logout response QUERY message, builds the logout response url, sets msg_url with the logout response url, sets msg_body to NULL

If private key and certificate are set in server object it will also signs the message (either with X509 if SOAP or with a simple signature for query strings).

Parameters

logout

a LassoLogout

 

Returns

0 on success; or a negative value otherwise.


lasso_logout_destroy ()

void
lasso_logout_destroy (LassoLogout *logout);

Destroys a logout object.

Parameters

logout

a LassoLogout

 

lasso_logout_dump ()

gchar *
lasso_logout_dump (LassoLogout *logout);

Dumps logout content to an XML string.

Parameters

logout

a LassoLogout

 

Returns

the dump string. It must be freed by the caller.

[transfer full]


lasso_logout_get_next_providerID ()

gchar *
lasso_logout_get_next_providerID (LassoLogout *logout);

Returns the provider id from providerID_index in list of providerIDs in principal session with the exception of initial service provider ID.

Parameters

logout

a LassoLogout

 

Returns

a newly allocated string or NULL.

[transfer full]


lasso_logout_init_request ()

lasso_error_t
lasso_logout_init_request (LassoLogout *logout,
                           gchar *remote_providerID,
                           LassoHttpMethod request_method);

Initializes a new SLO request.

Parameters

logout

a LassoLogout

 

remote_providerID

the providerID of the identity provider. If NULL the first identity provider is used.

 

request_method

if set, then it get the protocol profile in metadata corresponding of this HTTP request method.

 

Returns

0 on success; or a negative value otherwise.


lasso_logout_process_request_msg ()

lasso_error_t
lasso_logout_process_request_msg (LassoLogout *logout,
                                  gchar *request_msg);

Processes a SLO LogoutRequest message. Rebuilds a request object from the message and optionally verifies its signature.

Parameters

logout

a LassoLogout

 

request_msg

the logout request message

 

Returns

0 on success; or a negative value otherwise.


lasso_logout_process_response_msg ()

lasso_error_t
lasso_logout_process_response_msg (LassoLogout *logout,
                                   gchar *response_msg);

Parses the response message and builds the response object.

Checks the status code value and if it is not success, then if the local provider is a Service Provider and response method is SOAP, then builds a new logout request message for HTTP Redirect / GET method and returns the error code LASSO_LOGOUT_ERROR_UNSUPPORTED_PROFILE.

If it is a SOAP method or, IDP type and http method is Redirect/GET, then removes assertion.

If local server is an Identity Provider and if there is no more assertion (Identity Provider has logged out every Service Providers), then restores the initial response.

Parameters

logout

a LassoLogout

 

response_msg

the response message

 

Returns

0 on success; or a negative value otherwise.


lasso_logout_reset_providerID_index ()

lasso_error_t
lasso_logout_reset_providerID_index (LassoLogout *logout);

Reset the providerID_index attribute (set to 0).

Parameters

logout

a LassoLogout

 

Returns

0 on success; or a negative value otherwise.


lasso_logout_validate_request ()

lasso_error_t
lasso_logout_validate_request (LassoLogout *logout);
  • Sets the remote provider id

  • Sets a logout response with status code value to success.

  • Checks current signature status, if verification failed, stop processing and set the status code value to failure.

  • Verifies federation and authentication.

  • If the request http method is a SOAP method, then verifies every other Service Providers supports SOAP method : if not, then sets status code value to UnsupportedProfile and returns a code error with LASSO_LOGOUT_ERROR_UNSUPPORTED_PROFILE.

  • Every tests are ok, then removes assertion.

  • If local server is an Identity Provider and if there is more than one Service Provider (except the initial Service Provider), then saves the initial request, response and remote provider id.

Parameters

logout

a LassoLogout

 

Returns

0 on success; or LASSO_PROFILE_ERROR_MISSING_REQUEST if no request has been found -- usually means that lasso_logout_process_request_msg was not called, LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND if the requesting provider is not known to the server object, LASSO_PROFILE_ERROR_BUILDING_RESPONSE_FAILED if creation of the response object failed, LASSO_PROFILE_ERROR_NAME_IDENTIFIER_NOT_FOUND if the request do not contain a NameID element, LASSO_PROFILE_ERROR_SESSION_NOT_FOUND if the logout profile object do not contain a session object, LASSO_PROFILE_ERROR_MISSING_ASSERTION if no assertion from the requesting provider was found, LASSO_PROFILE_ERROR_IDENTITY_NOT_FOUND if the logout profile object do not contain an identity object, LASSO_PROFILE_ERROR_FEDERATION_NOT_FOUND if no federation for the requesting provider was found, LASSO_LOGOUT_ERROR_UNSUPPORTED_PROFILE if the requested HTTP method is not supported by all the remote provider of the current session.

Types and Values

struct LassoLogout

struct LassoLogout;
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSaml2Evidence.html0000644000000000000000000000013214404126163023207 xustar0030 mtime=1678814323.017964743 30 atime=1678814323.017964743 30 ctime=1678814323.017964743 lasso-2.8.2/docs/reference/lasso/html/LassoSaml2Evidence.html0000644000175000017500000001331014404126163026455 0ustar00bdauvergnebdauvergne00000000000000 LassoSaml2Evidence: lasso Reference Manual

LassoSaml2Evidence

LassoSaml2Evidence — <saml2:Evidence>

Functions

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSaml2Evidence

Description

Figure 58. Schema fragment for saml2:Evidence


<complexType name="EvidenceType">
  <choice maxOccurs="unbounded">
    <element ref="saml:AssertionIDRef"/>
    <element ref="saml:AssertionURIRef"/>
    <element ref="saml:Assertion"/>
    <element ref="saml:EncryptedAssertion"/>
  </choice>
</complexType>

Functions

lasso_saml2_evidence_new ()

LassoNode *
lasso_saml2_evidence_new (void);

Creates a new LassoSaml2Evidence object.

Returns

a newly created LassoSaml2Evidence object

Types and Values

struct LassoSaml2Evidence

struct LassoSaml2Evidence {
	/* elements */
	GList *AssertionIDRef; /* of LassoNode */
	GList *AssertionURIRef; /* of LassoNode */
	GList *Assertion; /* of LassoSaml2Assertion */
	GList *EncryptedAssertion; /* of LassoSaml2EncryptedElement */
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSamlp2LogoutResponse.html0000644000000000000000000000013214404126163024635 xustar0030 mtime=1678814323.025964789 30 atime=1678814323.025964789 30 ctime=1678814323.025964789 lasso-2.8.2/docs/reference/lasso/html/LassoSamlp2LogoutResponse.html0000644000175000017500000001324514404126163030112 0ustar00bdauvergnebdauvergne00000000000000 LassoSamlp2LogoutResponse: lasso Reference Manual

LassoSamlp2LogoutResponse

LassoSamlp2LogoutResponse — <samlp2:LogoutResponse>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlp2StatusResponse
            ╰── LassoSamlp2LogoutResponse

Description

Figure 78. Schema fragment for samlp2:LogoutResponse


<element name="LogoutResponse" type="samlp:StatusResponseType"/>

Functions

lasso_samlp2_logout_response_new ()

LassoNode *
lasso_samlp2_logout_response_new (void);

Creates a new LassoSamlp2LogoutResponse object.

Returns

a newly created LassoSamlp2LogoutResponse object

Types and Values

struct LassoSamlp2LogoutResponse

struct LassoSamlp2LogoutResponse;
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/xml-dsig.html0000644000000000000000000000013214404126163021310 xustar0030 mtime=1678814323.049964926 30 atime=1678814323.049964926 30 ctime=1678814323.049964926 lasso-2.8.2/docs/reference/lasso/html/xml-dsig.html0000644000175000017500000000456414404126163024571 0ustar00bdauvergnebdauvergne00000000000000 Object from the XML-DSIG schemas: lasso Reference Manual

Object from the XML-DSIG schemas

LassoDsKeyInfo — object mapping for an XML DSIG KeyInfo element
LassoDsKeyValue — object mapping for an XML DSIG KeyValue element
LassoDsRsaKeyValue
Strings for XML-DSIG — General strings constants for XMLDsig
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSoapEnvelope.html0000644000000000000000000000013214404126163023166 xustar0030 mtime=1678814323.033964834 30 atime=1678814323.033964834 30 ctime=1678814323.033964834 lasso-2.8.2/docs/reference/lasso/html/LassoSoapEnvelope.html0000644000175000017500000002154714404126163026447 0ustar00bdauvergnebdauvergne00000000000000 LassoSoapEnvelope: lasso Reference Manual

LassoSoapEnvelope

LassoSoapEnvelope — <soap:Envelope>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSoapEnvelope

Description

Functions

lasso_soap_envelope_new ()

LassoSoapEnvelope *
lasso_soap_envelope_new (LassoSoapBody *body);

Creates a new LassoSoapEnvelope with a new empty LassoSoapBody member. Note, this function does not add a LassoSoapHeader, if you need both headers and a body use lasso_soap_envelope_new_full() instead.

Returns

new LassoSoapEnvelope


lasso_soap_envelope_new_full ()

LassoSoapEnvelope *
lasso_soap_envelope_new_full (void);

Creates a new LassoSoapEnvelope with new empty LassoSoapHeader and LassoSoapBody members.

Returns

new LassoSoapEnvelope


lasso_soap_envelope_new_from_message ()

LassoSoapEnvelope *
lasso_soap_envelope_new_from_message (const gchar *message);

Given an XML document in message , parse it and convert it into a LassoNode, then insert that LassoNode into the body of the newly returned LassoSoapEnvelope.

Parameters

message

XML document

 

Returns

new LassoSoapEnvelope

Types and Values

struct LassoSoapEnvelope

struct LassoSoapEnvelope;
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSaml2AttributeStatement.html0000644000000000000000000000013214404126163025315 xustar0030 mtime=1678814323.013964721 30 atime=1678814323.013964721 30 ctime=1678814323.013964721 lasso-2.8.2/docs/reference/lasso/html/LassoSaml2AttributeStatement.html0000644000175000017500000001424514404126163030573 0ustar00bdauvergnebdauvergne00000000000000 LassoSaml2AttributeStatement: lasso Reference Manual

LassoSaml2AttributeStatement

LassoSaml2AttributeStatement — <saml2:AttributeStatement>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSaml2StatementAbstract
            ╰── LassoSaml2AttributeStatement

Description

Figure 47. Schema fragment for saml2:AttributeStatement


<complexType name="AttributeStatementType">
  <complexContent>
    <extension base="saml:StatementAbstractType">
      <choice maxOccurs="unbounded">
        <element ref="saml:Attribute"/>
        <element ref="saml:EncryptedAttribute"/>
      </choice>
    </extension>
  </complexContent>
</complexType>

Functions

lasso_saml2_attribute_statement_new ()

LassoNode *
lasso_saml2_attribute_statement_new (void);

Creates a new LassoSaml2AttributeStatement object.

Returns

a newly created LassoSaml2AttributeStatement object

Types and Values

struct LassoSaml2AttributeStatement

struct LassoSaml2AttributeStatement {
	/* elements */
	GList *Attribute; /* of LassoSaml2Attribute */
	GList *EncryptedAttribute; /* of LassoSaml2EncryptedElement */
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoLibSubject.html0000644000000000000000000000013214404126163022614 xustar0030 mtime=1678814323.005964675 30 atime=1678814323.005964675 30 ctime=1678814323.005964675 lasso-2.8.2/docs/reference/lasso/html/LassoLibSubject.html0000644000175000017500000001332714404126163026072 0ustar00bdauvergnebdauvergne00000000000000 LassoLibSubject: lasso Reference Manual

LassoLibSubject

LassoLibSubject — <lib:Subject>

Functions

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlSubject
            ╰── LassoLibSubject

Description

Figure 20. Schema fragment for lib:Subject

<xs:complexType name="SubjectType">
  <xs:complexContent>
    <xs:extension base="saml:SubjectType">
      <xs:sequence>
        <xs:element ref="IDPProvidedNameIdentifier"/>
      </xs:sequence>
    </xs:extension>
  </xs:complexContent>
</xs:complexType>
<xs:element name="Subject" type="SubjectType" substitutionGroup="saml:Subject"/>

Functions

lasso_lib_subject_new ()

LassoLibSubject *
lasso_lib_subject_new (void);

Creates a new LassoLibSubject object.

Returns

a newly created LassoLibSubject object

Types and Values

struct LassoLibSubject

struct LassoLibSubject {
	/* <xs:element ref="IDPProvidedNameIdentifier"/> */
	LassoSamlNameIdentifier *IDPProvidedNameIdentifier;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoLibScoping.html0000644000000000000000000000013214404126163022617 xustar0030 mtime=1678814323.005964675 30 atime=1678814323.005964675 30 ctime=1678814323.005964675 lasso-2.8.2/docs/reference/lasso/html/LassoLibScoping.html0000644000175000017500000001311114404126163026064 0ustar00bdauvergnebdauvergne00000000000000 LassoLibScoping: lasso Reference Manual

LassoLibScoping

LassoLibScoping — <lib:Scoping>

Functions

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoLibScoping

Description

Figure 18. Schema fragment for lib:Scoping

<xs:complexType name="ScopingType">
  <xs:sequence>
    <xs:element name="ProxyCount" type="xs:nonNegativeInteger" minOccurs="0"/>
    <xs:element ref="IDPList" minOccurs="0"/>
  </xs:sequence>
</xs:complexType>
<xs:element name="Scoping" type="ScopingType"/>

Functions

lasso_lib_scoping_new ()

LassoLibScoping *
lasso_lib_scoping_new (void);

Creates a new LassoLibScoping object.

Returns

a newly created LassoLibScoping object

Types and Values

struct LassoLibScoping

struct LassoLibScoping {
	/* <xs:element name="ProxyCount" type="xs:nonNegativeInteger" minOccurs="0"/> */
	int ProxyCount;
	/* <xs:element ref="IDPList" minOccurs="0"/> */
	LassoLibIDPList *IDPList;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/lasso-registry.html0000644000000000000000000000013214404126163022553 xustar0030 mtime=1678814323.049964926 30 atime=1678814323.045964902 30 ctime=1678814323.049964926 lasso-2.8.2/docs/reference/lasso/html/lasso-registry.html0000644000175000017500000002676314404126163026041 0ustar00bdauvergnebdauvergne00000000000000 registry: lasso Reference Manual

registry

registry — Class to store a mapping of qualified names (QName) to other qualified names.

Description

A qualified name is a name or a string in the context of another name, or namespace. This object implement a function of a tuple (namespace, name, namespace) to a name. For the moment there is no need to enumerate all tuples (namespace, name) pair given a base pair, i.e. a function from tuple (namespace, name) to a list of tuples (namespace,name).

We support two kinds of mapping:

  • you can give a direct mapping between two QName,

  • or you can give a function that will manage mapping between one namespace and another one.

For internal use inside lasso we define the following namespaces:

For functional mappings the mapping function must return constant strings created using g_intern_string() or using g_type_name().

Functions

LassoRegistryTranslationFunction ()

const char *
(*LassoRegistryTranslationFunction) (const char *from_namespace,
                                     const char *from_name,
                                     const char *to_namespace);

lasso_registry_default_add_direct_mapping ()

lasso_error_t
lasso_registry_default_add_direct_mapping
                               (const char *from_namespace,
                                const char *from_name,
                                const char *to_namespace,
                                const char *to_name);

Add a new mapping from a QName to a QName.

Parameters

from_namespace

the namespace of the mapped QName

 

from_name

the name of the mapped QName

 

to_namespace

the namepsace of the mapped to QName

 

to_name

the name of the mapped to QName

 

Returns

0 if successfull, LASSO_REGISTRY_ERROR_KEY_EXISTS if this mapping is already registered, LASSO_PARAM_ERROR_INVALID_VALUE if one the argument is invalid.


lasso_registry_default_add_functional_mapping ()

lasso_error_t
lasso_registry_default_add_functional_mapping
                               (const char *from_namespace,
                                const char *to_namespace,
                                LassoRegistryTranslationFunction translation_function);

from_namespace : URI of the source namespace to_namespace : URI of the destination namespace translation_function : a function mapping string to string from the first namespace to the second one

Register a new mapping from from_namesapce to to_namespace using the translation_function into the default mapping. This functions is not forced to return a value for any string, it can return NULL.

Returns

0 if successfull, LASSO_REGISTRY_ERROR_KEY_EXISTS if this mapping is already registered, LASSO_PARAM_ERROR_INVALID_VALUE if one the argument is invalid.


lasso_registry_default_get_mapping ()

const char *
lasso_registry_default_get_mapping (const char *from_namespace,
                                    const char *from_name,
                                    const char *to_namespace);

Retrieve the name of the QName in the namespace to_namespace that maps the QName from_namespace:from_name.

Parameters

from_namespace

the namespace of the mapped QName

 

from_name

the name of the mapped QName

 

to_namespace

the namepsace of the mapped to QName

 

Returns

the name string of the QName or NULL if no mapping exists.

lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/api-index-full.html0000644000000000000000000000013114404126163022401 xustar0030 mtime=1678814323.037964858 30 atime=1678814323.037964858 29 ctime=1678814323.04196488 lasso-2.8.2/docs/reference/lasso/html/api-index-full.html0000644000175000017500000075706414404126163025675 0ustar00bdauvergnebdauvergne00000000000000 API Index: lasso Reference Manual

API Index

A

LassoAssertionQuery, struct in LassoAssertionQuery
LassoAssertionQueryRequestType, enum in assertion_query
lasso_assertion_query_add_attribute_request, function in LassoAssertionQuery
lasso_assertion_query_build_request_msg, function in LassoAssertionQuery
lasso_assertion_query_build_response_msg, function in LassoAssertionQuery
lasso_assertion_query_destroy, function in LassoAssertionQuery
lasso_assertion_query_get_request_type, function in LassoAssertionQuery
lasso_assertion_query_init_request, function in LassoAssertionQuery
lasso_assertion_query_new, function in LassoAssertionQuery
lasso_assertion_query_process_request_msg, function in LassoAssertionQuery
lasso_assertion_query_process_response_msg, function in LassoAssertionQuery
lasso_assertion_query_validate_request, function in LassoAssertionQuery

B

lasso_build_unique_id, function in Utility functions for SAML 2.0

C

LassoCheckVersionMode, enum in Initialization functions
lasso_check_version, function in Initialization functions

D

LassoDefederation, struct in LassoDefederation
lasso_defederation_build_notification_msg, function in LassoDefederation
lasso_defederation_destroy, function in LassoDefederation
LASSO_DEFEDERATION_ERROR_MISSING_NAME_IDENTIFIER, macro in Error Codes
lasso_defederation_init_notification, function in LassoDefederation
lasso_defederation_new, function in LassoDefederation
lasso_defederation_process_notification_msg, function in LassoDefederation
lasso_defederation_validate_notification, function in LassoDefederation
LassoDsKeyInfo, struct in LassoDsKeyInfo
LassoDsKeyValue, struct in LassoDsKeyValue
LassoDsRsaKeyValue, struct in LassoDsRsaKeyValue
LASSO_DS_ERROR_CA_CERT_CHAIN_LOAD_FAILED, macro in Error Codes
LASSO_DS_ERROR_CERTIFICATE_LOAD_FAILED, macro in Error Codes
LASSO_DS_ERROR_CONTEXT_CREATION_FAILED, macro in Error Codes
LASSO_DS_ERROR_DECRYPTION_FAILED, macro in Error Codes
LASSO_DS_ERROR_DIGEST_COMPUTE_FAILED, macro in Error Codes
LASSO_DS_ERROR_ENCRYPTION_FAILED, macro in Error Codes
LASSO_DS_ERROR_INVALID_REFERENCE_FOR_SAML, macro in Error Codes
LASSO_DS_ERROR_INVALID_SIGALG, macro in Error Codes
LASSO_DS_ERROR_INVALID_SIGNATURE, macro in Error Codes
LASSO_DS_ERROR_KEYS_MNGR_CREATION_FAILED, macro in Error Codes
LASSO_DS_ERROR_KEYS_MNGR_INIT_FAILED, macro in Error Codes
LASSO_DS_ERROR_PRIVATE_KEY_LOAD_FAILED, macro in Error Codes
LASSO_DS_ERROR_PUBLIC_KEY_LOAD_FAILED, macro in Error Codes
LASSO_DS_ERROR_SIGNATURE_FAILED, macro in Error Codes
LASSO_DS_ERROR_SIGNATURE_NOT_FOUND, macro in Error Codes
LASSO_DS_ERROR_SIGNATURE_TEMPLATE_NOT_FOUND, macro in Error Codes
LASSO_DS_ERROR_SIGNATURE_TMPL_CREATION_FAILED, macro in Error Codes
LASSO_DS_ERROR_SIGNATURE_VERIFICATION_FAILED, macro in Error Codes
LASSO_DS_ERROR_TOO_MUCH_REFERENCES, macro in Error Codes
LASSO_DS_HREF, macro in Strings for XML-DSIG
lasso_ds_key_info_new, function in LassoDsKeyInfo
lasso_ds_key_value_new, function in LassoDsKeyValue
LASSO_DS_PREFIX, macro in Strings for XML-DSIG
lasso_ds_rsa_key_value_new, function in LassoDsRsaKeyValue
LASSO_DURATION_DAY, macro in LassoSaml2Assertion
LASSO_DURATION_HOUR, macro in LassoSaml2Assertion
LASSO_DURATION_MINUTE, macro in LassoSaml2Assertion
LASSO_DURATION_WEEK, macro in LassoSaml2Assertion

E

LassoEcp, struct in LassoEcp
lasso_ecp_destroy, function in LassoEcp
lasso_ecp_get_endpoint_url_by_entity_id, function in LassoEcp
lasso_ecp_has_sp_idplist, function in LassoEcp
LASSO_ECP_HREF, macro in Strings for ID-FF 1.2
lasso_ecp_is_idp_entry_known_idp_supporting_ecp, function in LassoEcp
lasso_ecp_is_provider_in_sp_idplist, function in LassoEcp
lasso_ecp_new, function in LassoEcp
LASSO_ECP_PREFIX, macro in Strings for ID-FF 1.2
lasso_ecp_process_authn_request_msg, function in LassoEcp
lasso_ecp_process_response_msg, function in LassoEcp
lasso_ecp_process_sp_idp_list, function in LassoEcp
lasso_ecp_relay_state_new, function in LassoEcpRelayState
lasso_ecp_relay_state_validate, function in LassoEcpRelayState
lasso_ecp_request_new, function in LassoEcpRequest
lasso_ecp_request_validate, function in LassoEcpRequest
lasso_ecp_response_new, function in LassoEcpResponse
lasso_ecp_response_validate, function in LassoEcpResponse
lasso_ecp_set_known_sp_provided_idp_entries_supporting_ecp, function in LassoEcp
LassoEncryptionMode, enum in LassoProvider
LassoEncryptionSymKeyType, enum in LassoProvider
LASSO_ERROR_CAST_FAILED, macro in Error Codes
LASSO_ERROR_OUT_OF_MEMORY, macro in Error Codes
LASSO_ERROR_UNDEFINED, macro in Error Codes
LASSO_ERROR_UNIMPLEMENTED, macro in Error Codes
LASSO_EXPORT, macro in Initialization functions
LASSO_EXPORT_VAR, macro in Initialization functions

F

LassoFederation, struct in LassoFederation
lasso_federation_build_local_name_identifier, function in LassoFederation
lasso_federation_destroy, function in LassoFederation
lasso_federation_new, function in LassoFederation
lasso_federation_verify_name_identifier, function in LassoFederation

H

LassoHttpMethod, enum in LassoProvider

I

LassoIdentity, struct in LassoIdentity
lasso_identity_destroy, function in LassoIdentity
lasso_identity_dump, function in LassoIdentity
lasso_identity_get_federation, function in LassoIdentity
lasso_identity_new, function in LassoIdentity
lasso_identity_new_from_dump, function in LassoIdentity
lasso_init, function in Initialization functions

L

LASSO_LASSO_HREF, macro in Base Strings
LASSO_LASSO_PREFIX, macro in Base Strings
LassoLecp, struct in LassoLecp
lasso_lecp_build_authn_request_envelope_msg, function in LassoLecp
lasso_lecp_build_authn_request_msg, function in LassoLecp
lasso_lecp_build_authn_response_envelope_msg, function in LassoLecp
lasso_lecp_build_authn_response_msg, function in LassoLecp
lasso_lecp_destroy, function in LassoLecp
lasso_lecp_init_authn_request, function in LassoLecp
lasso_lecp_new, function in LassoLecp
lasso_lecp_process_authn_request_envelope_msg, function in LassoLecp
lasso_lecp_process_authn_request_msg, function in LassoLecp
lasso_lecp_process_authn_response_envelope_msg, function in LassoLecp
LassoLibAssertion, struct in LassoLibAssertion
LassoLibAuthenticationStatement, struct in LassoLibAuthenticationStatement
LassoLibAuthnContext, struct in LassoLibAuthnContext
LassoLibAuthnRequest, struct in LassoLibAuthnRequest
LassoLibAuthnRequestEnvelope, struct in LassoLibAuthnRequestEnvelope
LassoLibAuthnResponse, struct in LassoLibAuthnResponse
LassoLibAuthnResponseEnvelope, struct in LassoLibAuthnResponseEnvelope
LassoLibFederationTerminationNotification, struct in LassoLibFederationTerminationNotification
LassoLibIDPEntries, struct in LassoLibIDPEntries
LassoLibIDPEntry, struct in LassoLibIDPEntry
LassoLibIDPList, struct in LassoLibIDPList
LassoLibLogoutRequest, struct in LassoLibLogoutRequest
LassoLibLogoutResponse, struct in LassoLibLogoutResponse
LassoLibNameIdentifierMappingRequest, struct in LassoLibNameIdentifierMappingRequest
LassoLibNameIdentifierMappingResponse, struct in LassoLibNameIdentifierMappingResponse
LassoLibRegisterNameIdentifierRequest, struct in LassoLibRegisterNameIdentifierRequest
LassoLibRegisterNameIdentifierResponse, struct in LassoLibRegisterNameIdentifierResponse
LassoLibRequestAuthnContext, struct in LassoLibRequestAuthnContext
LassoLibScoping, struct in LassoLibScoping
LassoLibStatusResponse, struct in LassoLibStatusResponse
LassoLibSubject, struct in LassoLibSubject
lasso_lib_assertion_new, function in LassoLibAssertion
lasso_lib_assertion_new_full, function in LassoLibAssertion
lasso_lib_authentication_statement_new, function in LassoLibAuthenticationStatement
lasso_lib_authentication_statement_new_full, function in LassoLibAuthenticationStatement
LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_INTERNET_PROTOCOL, macro in Strings for ID-FF 1.2
LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_INTERNET_PROTOCOL_PASSWORD, macro in Strings for ID-FF 1.2
LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_ONE_FACTOR_CONTRACT, macro in Strings for ID-FF 1.2
LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_ONE_FACTOR_UNREGISTERED, macro in Strings for ID-FF 1.2
LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_TWO_FACTOR_CONTRACT, macro in Strings for ID-FF 1.2
LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_TWO_FACTOR_UNREGISTERED, macro in Strings for ID-FF 1.2
LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PASSWORD, macro in Strings for ID-FF 1.2
LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PASSWORD_PROTECTED_TRANSPORT, macro in Strings for ID-FF 1.2
LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PREVIOUS_SESSION, macro in Strings for ID-FF 1.2
LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SMARTCARD, macro in Strings for ID-FF 1.2
LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SMARTCARD_PKI, macro in Strings for ID-FF 1.2
LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SOFTWARE_PKI, macro in Strings for ID-FF 1.2
LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_TIME_SYNC_TOKEN, macro in Strings for ID-FF 1.2
LASSO_LIB_AUTHN_CONTEXT_COMPARISON_BETTER, macro in Strings for ID-FF 1.2
LASSO_LIB_AUTHN_CONTEXT_COMPARISON_EXACT, macro in Strings for ID-FF 1.2
LASSO_LIB_AUTHN_CONTEXT_COMPARISON_MAXIMUM, macro in Strings for ID-FF 1.2
LASSO_LIB_AUTHN_CONTEXT_COMPARISON_MINIMUM, macro in Strings for ID-FF 1.2
lasso_lib_authn_context_new, function in LassoLibAuthnContext
lasso_lib_authn_request_envelope_new, function in LassoLibAuthnRequestEnvelope
lasso_lib_authn_request_envelope_new_full, function in LassoLibAuthnRequestEnvelope
lasso_lib_authn_request_new, function in LassoLibAuthnRequest
lasso_lib_authn_response_envelope_new, function in LassoLibAuthnResponseEnvelope
lasso_lib_authn_response_new, function in LassoLibAuthnResponse
LASSO_LIB_CONSENT_INAPPLICABLE, macro in Strings for ID-FF 1.2
LASSO_LIB_CONSENT_OBTAINED, macro in Strings for ID-FF 1.2
LASSO_LIB_CONSENT_OBTAINED_CURRENT_EXPLICIT, macro in Strings for ID-FF 1.2
LASSO_LIB_CONSENT_OBTAINED_CURRENT_IMPLICIT, macro in Strings for ID-FF 1.2
LASSO_LIB_CONSENT_OBTAINED_PRIOR, macro in Strings for ID-FF 1.2
LASSO_LIB_CONSENT_UNAVAILABLE, macro in Strings for ID-FF 1.2
lasso_lib_federation_termination_notification_new, function in LassoLibFederationTerminationNotification
lasso_lib_federation_termination_notification_new_full, function in LassoLibFederationTerminationNotification
LASSO_LIB_HREF, macro in Strings for ID-FF 1.2
lasso_lib_idp_entries_new, function in LassoLibIDPEntries
lasso_lib_idp_entry_new, function in LassoLibIDPEntry
lasso_lib_idp_list_new, function in LassoLibIDPList
lasso_lib_logout_request_new, function in LassoLibLogoutRequest
lasso_lib_logout_request_new_full, function in LassoLibLogoutRequest
lasso_lib_logout_response_new, function in LassoLibLogoutResponse
lasso_lib_logout_response_new_full, function in LassoLibLogoutResponse
LASSO_LIB_MAJOR_VERSION_N, macro in Strings for ID-FF 1.2
LASSO_LIB_MINOR_VERSION_N, macro in Strings for ID-FF 1.2
LASSO_LIB_NAMEID_POLICY_TYPE_ANY, macro in Strings for ID-FF 1.2
LASSO_LIB_NAMEID_POLICY_TYPE_FEDERATED, macro in Strings for ID-FF 1.2
LASSO_LIB_NAMEID_POLICY_TYPE_NONE, macro in Strings for ID-FF 1.2
LASSO_LIB_NAMEID_POLICY_TYPE_ONE_TIME, macro in Strings for ID-FF 1.2
LASSO_LIB_NAME_IDENTIFIER_FORMAT_ENCRYPTED, macro in Strings for ID-FF 1.2
LASSO_LIB_NAME_IDENTIFIER_FORMAT_ENTITYID, macro in Strings for ID-FF 1.2
LASSO_LIB_NAME_IDENTIFIER_FORMAT_FEDERATED, macro in Strings for ID-FF 1.2
LASSO_LIB_NAME_IDENTIFIER_FORMAT_ONE_TIME, macro in Strings for ID-FF 1.2
lasso_lib_name_identifier_mapping_request_new, function in LassoLibNameIdentifierMappingRequest
lasso_lib_name_identifier_mapping_request_new_full, function in LassoLibNameIdentifierMappingRequest
lasso_lib_name_identifier_mapping_response_new, function in LassoLibNameIdentifierMappingResponse
lasso_lib_name_identifier_mapping_response_new_full, function in LassoLibNameIdentifierMappingResponse
LASSO_LIB_PREFIX, macro in Strings for ID-FF 1.2
LASSO_LIB_PROTOCOL_PROFILE_BRWS_ART, macro in Strings for ID-FF 1.2
LASSO_LIB_PROTOCOL_PROFILE_BRWS_LECP, macro in Strings for ID-FF 1.2
LASSO_LIB_PROTOCOL_PROFILE_BRWS_POST, macro in Strings for ID-FF 1.2
LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_IDP_HTTP, macro in Strings for ID-FF 1.2
LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_IDP_SOAP, macro in Strings for ID-FF 1.2
LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_SP_HTTP, macro in Strings for ID-FF 1.2
LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_SP_SOAP, macro in Strings for ID-FF 1.2
LASSO_LIB_PROTOCOL_PROFILE_NIM_SP_HTTP, macro in Strings for ID-FF 1.2
LASSO_LIB_PROTOCOL_PROFILE_RNI_IDP_HTTP, macro in Strings for ID-FF 1.2
LASSO_LIB_PROTOCOL_PROFILE_RNI_IDP_SOAP, macro in Strings for ID-FF 1.2
LASSO_LIB_PROTOCOL_PROFILE_RNI_SP_HTTP, macro in Strings for ID-FF 1.2
LASSO_LIB_PROTOCOL_PROFILE_RNI_SP_SOAP, macro in Strings for ID-FF 1.2
LASSO_LIB_PROTOCOL_PROFILE_SLO_IDP_HTTP, macro in Strings for ID-FF 1.2
LASSO_LIB_PROTOCOL_PROFILE_SLO_IDP_SOAP, macro in Strings for ID-FF 1.2
LASSO_LIB_PROTOCOL_PROFILE_SLO_SP_HTTP, macro in Strings for ID-FF 1.2
LASSO_LIB_PROTOCOL_PROFILE_SLO_SP_SOAP, macro in Strings for ID-FF 1.2
lasso_lib_register_name_identifier_request_new, function in LassoLibRegisterNameIdentifierRequest
lasso_lib_register_name_identifier_request_new_full, function in LassoLibRegisterNameIdentifierRequest
lasso_lib_register_name_identifier_response_new, function in LassoLibRegisterNameIdentifierResponse
lasso_lib_register_name_identifier_response_new_full, function in LassoLibRegisterNameIdentifierResponse
lasso_lib_request_authn_context_new, function in LassoLibRequestAuthnContext
lasso_lib_scoping_new, function in LassoLibScoping
LASSO_LIB_STATUS_CODE_FEDERATION_DOES_NOT_EXIST, macro in Strings for ID-FF 1.2
LASSO_LIB_STATUS_CODE_INVALID_ASSERTION_CONSUMER_SERVICE_INDEX, macro in Strings for ID-FF 1.2
LASSO_LIB_STATUS_CODE_INVALID_SIGNATURE, macro in Strings for ID-FF 1.2
LASSO_LIB_STATUS_CODE_NO_AUTHN_CONTEXT, macro in Strings for ID-FF 1.2
LASSO_LIB_STATUS_CODE_NO_AVAILABLEIDP, macro in Strings for ID-FF 1.2
LASSO_LIB_STATUS_CODE_NO_PASSIVE, macro in Strings for ID-FF 1.2
LASSO_LIB_STATUS_CODE_NO_SUPPORTEDIDP, macro in Strings for ID-FF 1.2
LASSO_LIB_STATUS_CODE_PROXY_COUNT_EXCEEDED, macro in Strings for ID-FF 1.2
LASSO_LIB_STATUS_CODE_UNKNOWN_PRINCIPAL, macro in Strings for ID-FF 1.2
LASSO_LIB_STATUS_CODE_UNSIGNED_AUTHN_REQUEST, macro in Strings for ID-FF 1.2
LASSO_LIB_STATUS_CODE_UNSUPPORTED_PROFILE, macro in Strings for ID-FF 1.2
lasso_lib_status_response_new, function in LassoLibStatusResponse
lasso_lib_subject_new, function in LassoLibSubject
LassoLogin, struct in LassoLogin
lasso_login_accept_sso, function in LassoLogin
lasso_login_build_artifact_msg, function in LassoLogin
lasso_login_build_assertion, function in LassoLogin
lasso_login_build_authn_request_msg, function in LassoLogin
lasso_login_build_authn_response_msg, function in LassoLogin
lasso_login_build_request_msg, function in LassoLogin
lasso_login_build_response_msg, function in LassoLogin
lasso_login_destroy, function in LassoLogin
lasso_login_dump, function in LassoLogin
LASSO_LOGIN_ERROR_ASSERTION_DOES_NOT_MATCH_REQUEST_ID, macro in Error Codes
LASSO_LOGIN_ERROR_ASSERTION_REPLAY, macro in Error Codes
LASSO_LOGIN_ERROR_CONSENT_NOT_OBTAINED, macro in Error Codes
LASSO_LOGIN_ERROR_FEDERATION_NOT_FOUND, macro in Error Codes
LASSO_LOGIN_ERROR_INVALID_NAMEIDPOLICY, macro in Error Codes
LASSO_LOGIN_ERROR_INVALID_SIGNATURE, macro in Error Codes
LASSO_LOGIN_ERROR_NO_DEFAULT_ENDPOINT, macro in Error Codes
LASSO_LOGIN_ERROR_REQUEST_DENIED, macro in Error Codes
LASSO_LOGIN_ERROR_STATUS_NOT_SUCCESS, macro in Error Codes
LASSO_LOGIN_ERROR_UNKNOWN_PRINCIPAL, macro in Error Codes
LASSO_LOGIN_ERROR_UNSIGNED_AUTHN_REQUEST, macro in Error Codes
lasso_login_get_assertion, function in LassoLogin
lasso_login_init_authn_request, function in LassoLogin
lasso_login_init_idp_initiated_authn_request, function in LassoLogin
lasso_login_init_request, function in LassoLogin
lasso_login_must_ask_for_consent, function in LassoLogin
lasso_login_must_authenticate, function in LassoLogin
lasso_login_new, function in LassoLogin
lasso_login_new_from_dump, function in LassoLogin
lasso_login_process_authn_request_msg, function in LassoLogin
lasso_login_process_authn_response_msg, function in LassoLogin
lasso_login_process_paos_response_msg, function in LassoLogin
lasso_login_process_request_msg, function in LassoLogin
lasso_login_process_response_msg, function in LassoLogin
lasso_login_validate_request_msg, function in LassoLogin
LassoLogout, struct in LassoLogout
lasso_logout_build_request_msg, function in LassoLogout
lasso_logout_build_response_msg, function in LassoLogout
lasso_logout_destroy, function in LassoLogout
lasso_logout_dump, function in LassoLogout
LASSO_LOGOUT_ERROR_FEDERATION_NOT_FOUND, macro in Error Codes
LASSO_LOGOUT_ERROR_REQUEST_DENIED, macro in Error Codes
LASSO_LOGOUT_ERROR_UNKNOWN_PRINCIPAL, macro in Error Codes
LASSO_LOGOUT_ERROR_UNSUPPORTED_PROFILE, macro in Error Codes
lasso_logout_get_next_providerID, function in LassoLogout
lasso_logout_init_request, function in LassoLogout
lasso_logout_new, function in LassoLogout
lasso_logout_new_from_dump, function in LassoLogout
lasso_logout_process_request_msg, function in LassoLogout
lasso_logout_process_response_msg, function in LassoLogout
lasso_logout_reset_providerID_index, function in LassoLogout
lasso_logout_validate_request, function in LassoLogout
lasso_log_remove_handler, function in Logging
lasso_log_set_handler, function in Logging

M

LassoMdProtocolType, enum in LassoProvider
LassoMessageFormat, enum in node
LASSO_METADATA_HREF, macro in Strings for ID-FF 1.2
LASSO_METADATA_PREFIX, macro in Strings for ID-FF 1.2
LassoMiscTextNode, struct in LassoMiscTextNode
lasso_misc_text_node_get_xml_content, function in LassoMiscTextNode
lasso_misc_text_node_new, function in LassoMiscTextNode
lasso_misc_text_node_new_with_string, function in LassoMiscTextNode
lasso_misc_text_node_new_with_xml_node, function in LassoMiscTextNode
lasso_misc_text_node_set_xml_content, function in LassoMiscTextNode

N

LassoNameIdentifierMapping, struct in LassoNameIdentifierMapping
LassoNameIdManagement, struct in LassoNameIdManagement
LassoNameRegistration, struct in LassoNameRegistration
lasso_name_identifier_mapping_build_request_msg, function in LassoNameIdentifierMapping
lasso_name_identifier_mapping_build_response_msg, function in LassoNameIdentifierMapping
lasso_name_identifier_mapping_destroy, function in LassoNameIdentifierMapping
lasso_name_identifier_mapping_init_request, function in LassoNameIdentifierMapping
lasso_name_identifier_mapping_new, function in LassoNameIdentifierMapping
lasso_name_identifier_mapping_process_request_msg, function in LassoNameIdentifierMapping
lasso_name_identifier_mapping_process_response_msg, function in LassoNameIdentifierMapping
lasso_name_identifier_mapping_validate_request, function in LassoNameIdentifierMapping
lasso_name_id_management_build_request_msg, function in LassoNameIdManagement
lasso_name_id_management_build_response_msg, function in LassoNameIdManagement
lasso_name_id_management_destroy, function in LassoNameIdManagement
lasso_name_id_management_dump, function in LassoNameIdManagement
lasso_name_id_management_init_request, function in LassoNameIdManagement
lasso_name_id_management_new, function in LassoNameIdManagement
lasso_name_id_management_new_from_dump, function in LassoNameIdManagement
lasso_name_id_management_process_request_msg, function in LassoNameIdManagement
lasso_name_id_management_process_response_msg, function in LassoNameIdManagement
lasso_name_id_management_validate_request, function in LassoNameIdManagement
lasso_name_registration_build_request_msg, function in LassoNameRegistration
lasso_name_registration_build_response_msg, function in LassoNameRegistration
lasso_name_registration_destroy, function in LassoNameRegistration
lasso_name_registration_dump, function in LassoNameRegistration
lasso_name_registration_init_request, function in LassoNameRegistration
lasso_name_registration_new, function in LassoNameRegistration
lasso_name_registration_new_from_dump, function in LassoNameRegistration
lasso_name_registration_process_request_msg, function in LassoNameRegistration
lasso_name_registration_process_response_msg, function in LassoNameRegistration
lasso_name_registration_validate_request, function in LassoNameRegistration
LassoNode, struct in LassoNode
LassoNodeClassData, struct in node
lasso_node_cleanup_original_xmlnodes, function in LassoNode
lasso_node_debug, function in LassoNode
lasso_node_destroy, function in LassoNode
lasso_node_dump, function in LassoNode
lasso_node_export_to_base64, function in LassoNode
lasso_node_export_to_ecp_soap_response, function in LassoNode
lasso_node_export_to_paos_request, function in LassoNode
lasso_node_export_to_paos_request_full, function in LassoNode
lasso_node_export_to_query, function in LassoNode
lasso_node_export_to_query_with_password, function in LassoNode
lasso_node_export_to_soap, function in LassoNode
lasso_node_export_to_soap_with_headers, function in LassoNode
lasso_node_export_to_xml, function in LassoNode
lasso_node_get_name, function in LassoNode
lasso_node_get_namespace, function in LassoNode
lasso_node_get_original_xmlnode, function in LassoNode
lasso_node_get_xmlNode, function in LassoNode
lasso_node_init_from_message, function in LassoNode
lasso_node_init_from_query, function in LassoNode
lasso_node_init_from_xml, function in LassoNode
lasso_node_new, function in LassoNode
lasso_node_new_from_dump, function in LassoNode
lasso_node_new_from_soap, function in LassoNode
lasso_node_new_from_xmlNode, function in LassoNode
lasso_node_set_custom_namespace, function in LassoNode
lasso_node_set_custom_nodename, function in LassoNode
lasso_node_set_original_xmlnode, function in LassoNode

P

LASSO_PAOS_HREF, macro in Strings for ID-FF 1.2
LASSO_PAOS_PREFIX, macro in Strings for ID-FF 1.2
lasso_paos_request_new, function in LassoPaosRequest
lasso_paos_request_validate, function in LassoPaosRequest
lasso_paos_response_new, function in LassoPaosResponse
lasso_paos_response_validate, function in LassoPaosResponse
LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ, macro in Error Codes
LASSO_PARAM_ERROR_CHECK_FAILED, macro in Error Codes
LASSO_PARAM_ERROR_INVALID_VALUE, macro in Error Codes
LASSO_PARAM_ERROR_NON_INITIALIZED_OBJECT, macro in Error Codes
LassoProfile, struct in LassoProfile
LassoProfileSignatureHint, enum in LassoProfile
LassoProfileSignatureVerifyHint, enum in LassoProfile
LASSO_PROFILE_ERROR_BAD_IDENTITY_DUMP, macro in Error Codes
LASSO_PROFILE_ERROR_BAD_SESSION_DUMP, macro in Error Codes
LASSO_PROFILE_ERROR_BUILDING_MESSAGE_FAILED, macro in Error Codes
LASSO_PROFILE_ERROR_BUILDING_QUERY_FAILED, macro in Error Codes
LASSO_PROFILE_ERROR_BUILDING_REQUEST_FAILED, macro in Error Codes
LASSO_PROFILE_ERROR_BUILDING_RESPONSE_FAILED, macro in Error Codes
LASSO_PROFILE_ERROR_CANNOT_FIND_A_PROVIDER, macro in Error Codes
LASSO_PROFILE_ERROR_CANNOT_VERIFY_SIGNATURE, macro in Error Codes
LASSO_PROFILE_ERROR_FEDERATION_NOT_FOUND, macro in Error Codes
LASSO_PROFILE_ERROR_IDENTITY_NOT_FOUND, macro in Error Codes
LASSO_PROFILE_ERROR_INVALID_ARTIFACT, macro in Error Codes
LASSO_PROFILE_ERROR_INVALID_HTTP_METHOD, macro in Error Codes
LASSO_PROFILE_ERROR_INVALID_ISSUER, macro in Error Codes
LASSO_PROFILE_ERROR_INVALID_MSG, macro in Error Codes
LASSO_PROFILE_ERROR_INVALID_POST_MSG, macro in Error Codes
LASSO_PROFILE_ERROR_INVALID_PROTOCOLPROFILE, macro in Error Codes
LASSO_PROFILE_ERROR_INVALID_QUERY, macro in Error Codes
LASSO_PROFILE_ERROR_INVALID_REQUEST, macro in Error Codes
LASSO_PROFILE_ERROR_INVALID_RESPONSE, macro in Error Codes
LASSO_PROFILE_ERROR_INVALID_SOAP_MSG, macro in Error Codes
LASSO_PROFILE_ERROR_MISSING_ARTIFACT, macro in Error Codes
LASSO_PROFILE_ERROR_MISSING_ASSERTION, macro in Error Codes
LASSO_PROFILE_ERROR_MISSING_ENCRYPTION_PRIVATE_KEY, macro in Error Codes
LASSO_PROFILE_ERROR_MISSING_ENDPOINT_REFERENCE, macro in Error Codes
LASSO_PROFILE_ERROR_MISSING_ENDPOINT_REFERENCE_ADDRESS, macro in Error Codes
LASSO_PROFILE_ERROR_MISSING_ISSUER, macro in Error Codes
LASSO_PROFILE_ERROR_MISSING_NAME_IDENTIFIER, macro in Error Codes
LASSO_PROFILE_ERROR_MISSING_REMOTE_PROVIDERID, macro in Error Codes
LASSO_PROFILE_ERROR_MISSING_REQUEST, macro in Error Codes
LASSO_PROFILE_ERROR_MISSING_RESOURCE_OFFERING, macro in Error Codes
LASSO_PROFILE_ERROR_MISSING_RESPONSE, macro in Error Codes
LASSO_PROFILE_ERROR_MISSING_SERVER, macro in Error Codes
LASSO_PROFILE_ERROR_MISSING_SERVICE_DESCRIPTION, macro in Error Codes
LASSO_PROFILE_ERROR_MISSING_SERVICE_INSTANCE, macro in Error Codes
LASSO_PROFILE_ERROR_MISSING_SERVICE_TYPE, macro in Error Codes
LASSO_PROFILE_ERROR_MISSING_STATUS_CODE, macro in Error Codes
LASSO_PROFILE_ERROR_MISSING_SUBJECT, macro in Error Codes
LASSO_PROFILE_ERROR_NAME_IDENTIFIER_NOT_FOUND, macro in Error Codes
LASSO_PROFILE_ERROR_RESPONSE_DOES_NOT_MATCH_REQUEST, macro in Error Codes
LASSO_PROFILE_ERROR_SESSION_NOT_FOUND, macro in Error Codes
LASSO_PROFILE_ERROR_STATUS_NOT_SUCCESS, macro in Error Codes
LASSO_PROFILE_ERROR_UNKNOWN_PROFILE_URL, macro in Error Codes
LASSO_PROFILE_ERROR_UNKNOWN_PROVIDER, macro in Error Codes
LASSO_PROFILE_ERROR_UNSUPPORTED_BINDING, macro in Error Codes
LASSO_PROFILE_ERROR_UNSUPPORTED_PROFILE, macro in Error Codes
lasso_profile_get_artifact, function in LassoProfile
lasso_profile_get_artifact_message, function in LassoProfile
lasso_profile_get_identity, function in LassoProfile
lasso_profile_get_nameIdentifier, function in LassoProfile
lasso_profile_get_request_type_from_soap_msg, function in LassoProfile
lasso_profile_get_server, function in LassoProfile
lasso_profile_get_session, function in LassoProfile
lasso_profile_get_signature_hint, function in LassoProfile
lasso_profile_get_signature_status, function in LassoProfile
lasso_profile_get_signature_verify_hint, function in LassoProfile
lasso_profile_is_identity_dirty, function in LassoProfile
lasso_profile_is_liberty_query, function in LassoProfile
lasso_profile_is_saml_query, function in Utility functions for SAML 2.0
lasso_profile_is_session_dirty, function in LassoProfile
lasso_profile_set_artifact_message, function in LassoProfile
lasso_profile_set_identity_from_dump, function in LassoProfile
lasso_profile_set_session_from_dump, function in LassoProfile
lasso_profile_set_signature_hint, function in LassoProfile
lasso_profile_set_signature_verify_hint, function in LassoProfile
lasso_profile_set_soap_fault_response, function in LassoProfile
lasso_profile_sso_role_with, function in LassoProfile
LassoProtocolConformance, enum in LassoProvider
LassoProvider, struct in LassoProvider
LassoProviderRole, enum in LassoProvider
lasso_provider_accept_http_method, function in LassoProvider
LASSO_PROVIDER_ERROR_MISSING_PUBLIC_KEY, macro in Error Codes
lasso_provider_get_assertion_consumer_service_url, function in LassoProvider
lasso_provider_get_base64_succinct_id, function in LassoProvider
lasso_provider_get_cache_duration, function in LassoProvider
lasso_provider_get_default_name_id_format, function in LassoProvider
lasso_provider_get_encryption_mode, function in LassoProvider
lasso_provider_get_first_http_method, function in LassoProvider
lasso_provider_get_idp_supported_attributes, function in LassoProvider
lasso_provider_get_metadata_keys_for_role, function in LassoProvider
lasso_provider_get_metadata_list, function in LassoProvider
lasso_provider_get_metadata_list_for_role, function in LassoProvider
lasso_provider_get_metadata_one, function in LassoProvider
lasso_provider_get_metadata_one_for_role, function in LassoProvider
lasso_provider_get_organization, function in LassoProvider
lasso_provider_get_protocol_conformance, function in LassoProvider
lasso_provider_get_roles, function in LassoProvider
lasso_provider_get_sp_name_qualifier, function in LassoProvider
lasso_provider_get_valid_until, function in LassoProvider
lasso_provider_has_protocol_profile, function in LassoProvider
lasso_provider_match_conformance, function in LassoProvider
lasso_provider_new, function in LassoProvider
lasso_provider_new_from_buffer, function in LassoProvider
lasso_provider_new_from_dump, function in LassoProvider
lasso_provider_saml2_node_encrypt, function in Utility functions for SAML 2.0
lasso_provider_set_encryption_mode, function in LassoProvider
lasso_provider_set_encryption_sym_key_type, function in LassoProvider
lasso_provider_set_protocol_conformance, function in LassoProvider
lasso_provider_verify_single_node_signature, function in LassoProvider
LASSO_PYTHON_HREF, macro in Base Strings

R

LassoRegistryTranslationFunction, user_function in registry
lasso_registry_default_add_direct_mapping, function in registry
lasso_registry_default_add_functional_mapping, function in registry
lasso_registry_default_get_mapping, function in registry
LASSO_REGISTRY_ERROR_KEY_EXISTS, macro in Error Codes
LassoRequestType, enum in LassoProfile

S

LassoSaml2Action, struct in LassoSaml2Action
LassoSaml2Advice, struct in LassoSaml2Advice
LassoSaml2Assertion, struct in LassoSaml2Assertion
LassoSaml2AssertionValidationState, enum in LassoSaml2Assertion
LassoSaml2Attribute, struct in LassoSaml2Attribute
LassoSaml2AttributeStatement, struct in LassoSaml2AttributeStatement
LassoSaml2AttributeValue, struct in LassoSaml2AttributeValue
LassoSaml2AudienceRestriction, struct in LassoSaml2AudienceRestriction
LassoSaml2AuthnContext, struct in LassoSaml2AuthnContext
LassoSaml2AuthnStatement, struct in LassoSaml2AuthnStatement
LassoSaml2AuthzDecisionStatement, struct in LassoSaml2AuthzDecisionStatement
LassoSaml2BaseIDAbstract, struct in LassoSaml2BaseIDAbstract
LassoSaml2ConditionAbstract, struct in LassoSaml2ConditionAbstract
LassoSaml2Conditions, struct in LassoSaml2Conditions
LassoSaml2EncryptedElement, struct in LassoSaml2EncryptedElement
LassoSaml2Evidence, struct in LassoSaml2Evidence
LassoSaml2KeyInfoConfirmationData, struct in LassoSaml2KeyInfoConfirmationData
LassoSaml2NameID, struct in LassoSaml2NameID
LassoSaml2OneTimeUse, struct in LassoSaml2OneTimeUse
LassoSaml2ProxyRestriction, struct in LassoSaml2ProxyRestriction
LassoSaml2StatementAbstract, struct in LassoSaml2StatementAbstract
LassoSaml2Subject, struct in LassoSaml2Subject
LassoSaml2SubjectConfirmation, struct in LassoSaml2SubjectConfirmation
LassoSaml2SubjectConfirmationData, struct in LassoSaml2SubjectConfirmationData
LassoSaml2SubjectLocality, struct in LassoSaml2SubjectLocality
LASSO_SAML2_ACTION_GHPP_GET, macro in SAML 2.0 Strings
LASSO_SAML2_ACTION_GHPP_HEAD, macro in SAML 2.0 Strings
LASSO_SAML2_ACTION_GHPP_POST, macro in SAML 2.0 Strings
LASSO_SAML2_ACTION_GHPP_PUT, macro in SAML 2.0 Strings
LASSO_SAML2_ACTION_NAMESPACE_GHPP, macro in SAML 2.0 Strings
LASSO_SAML2_ACTION_NAMESPACE_RWEDC, macro in SAML 2.0 Strings
LASSO_SAML2_ACTION_NAMESPACE_RWEDC_NEGATION, macro in SAML 2.0 Strings
LASSO_SAML2_ACTION_NAMESPACE_UNIX, macro in SAML 2.0 Strings
lasso_saml2_action_new, function in LassoSaml2Action
lasso_saml2_action_new_with_string, function in LassoSaml2Action
LASSO_SAML2_ACTION_RWEDC_CONTROL, macro in SAML 2.0 Strings
LASSO_SAML2_ACTION_RWEDC_DELETE, macro in SAML 2.0 Strings
LASSO_SAML2_ACTION_RWEDC_EXECUTE, macro in SAML 2.0 Strings
LASSO_SAML2_ACTION_RWEDC_NEGATION, macro in SAML 2.0 Strings
LASSO_SAML2_ACTION_RWEDC_READ, macro in SAML 2.0 Strings
LASSO_SAML2_ACTION_RWEDC_WRITE, macro in SAML 2.0 Strings
lasso_saml2_advice_new, function in LassoSaml2Advice
lasso_saml2_assertion_add_attribute_with_node, function in LassoSaml2Assertion
lasso_saml2_assertion_add_audience_restriction, function in LassoSaml2Assertion
lasso_saml2_assertion_add_proxy_limit, function in LassoSaml2Assertion
lasso_saml2_assertion_allows_proxying, function in LassoSaml2Assertion
lasso_saml2_assertion_allows_proxying_to, function in LassoSaml2Assertion
lasso_saml2_assertion_decrypt_subject, function in LassoSaml2Assertion
lasso_saml2_assertion_get_in_response_to, function in LassoSaml2Assertion
lasso_saml2_assertion_get_issuer_provider, function in LassoSaml2Assertion
lasso_saml2_assertion_get_subject_confirmation_data, function in LassoSaml2Assertion
lasso_saml2_assertion_has_audience_restriction, function in LassoSaml2Assertion
lasso_saml2_assertion_has_one_time_use, function in LassoSaml2Assertion
LASSO_SAML2_ASSERTION_HREF, macro in SAML 2.0 Strings
lasso_saml2_assertion_is_audience_restricted, function in LassoSaml2Assertion
lasso_saml2_assertion_new, function in LassoSaml2Assertion
LASSO_SAML2_ASSERTION_PREFIX, macro in SAML 2.0 Strings
lasso_saml2_assertion_set_basic_conditions, function in LassoSaml2Assertion
lasso_saml2_assertion_set_one_time_use, function in LassoSaml2Assertion
lasso_saml2_assertion_set_subject_confirmation_data, function in LassoSaml2Assertion
lasso_saml2_assertion_set_subject_confirmation_name_id, function in LassoSaml2Assertion
lasso_saml2_assertion_set_subject_name_id, function in LassoSaml2Assertion
lasso_saml2_assertion_validate_audience, function in LassoSaml2Assertion
lasso_saml2_assertion_validate_conditions, function in LassoSaml2Assertion
lasso_saml2_assertion_validate_time_checks, function in LassoSaml2Assertion
LASSO_SAML2_ATTRIBUTE_NAME_FORMAT_BASIC, macro in SAML 2.0 Strings
LASSO_SAML2_ATTRIBUTE_NAME_FORMAT_UNSPECIFIED, macro in SAML 2.0 Strings
LASSO_SAML2_ATTRIBUTE_NAME_FORMAT_URI, macro in SAML 2.0 Strings
lasso_saml2_attribute_new, function in LassoSaml2Attribute
lasso_saml2_attribute_statement_new, function in LassoSaml2AttributeStatement
lasso_saml2_attribute_value_new, function in LassoSaml2AttributeValue
lasso_saml2_audience_restriction_new, function in LassoSaml2AudienceRestriction
LASSO_SAML2_AUTHN_CONTEXT_AUTHENTICATED_TELEPHONY, macro in SAML 2.0 Strings
LASSO_SAML2_AUTHN_CONTEXT_INTERNET_PROTOCOL, macro in SAML 2.0 Strings
LASSO_SAML2_AUTHN_CONTEXT_INTERNET_PROTOCOL_PASSWORD, macro in SAML 2.0 Strings
LASSO_SAML2_AUTHN_CONTEXT_KERBEROS, macro in SAML 2.0 Strings
LASSO_SAML2_AUTHN_CONTEXT_MOBILE_ONE_FACTOR_CONTRACT, macro in SAML 2.0 Strings
LASSO_SAML2_AUTHN_CONTEXT_MOBILE_ONE_FACTOR_UNREGISTERED, macro in SAML 2.0 Strings
LASSO_SAML2_AUTHN_CONTEXT_MOBILE_TWO_FACTOR_CONTRACT, macro in SAML 2.0 Strings
LASSO_SAML2_AUTHN_CONTEXT_MOBILE_TWO_FACTOR_UNREGISTERED, macro in SAML 2.0 Strings
lasso_saml2_authn_context_new, function in LassoSaml2AuthnContext
LASSO_SAML2_AUTHN_CONTEXT_NOMAD_TELEPHONY, macro in SAML 2.0 Strings
LASSO_SAML2_AUTHN_CONTEXT_PASSWORD, macro in SAML 2.0 Strings
LASSO_SAML2_AUTHN_CONTEXT_PASSWORD_PROTECTED_TRANSPORT, macro in SAML 2.0 Strings
LASSO_SAML2_AUTHN_CONTEXT_PERSONALIZED_TELEPHONY, macro in SAML 2.0 Strings
LASSO_SAML2_AUTHN_CONTEXT_PGP, macro in SAML 2.0 Strings
LASSO_SAML2_AUTHN_CONTEXT_PREVIOUS_SESSION, macro in SAML 2.0 Strings
LASSO_SAML2_AUTHN_CONTEXT_SECURE_REMOTE_PASSWORD, macro in SAML 2.0 Strings
LASSO_SAML2_AUTHN_CONTEXT_SMARTCARD, macro in SAML 2.0 Strings
LASSO_SAML2_AUTHN_CONTEXT_SMARTCARD_PKI, macro in SAML 2.0 Strings
LASSO_SAML2_AUTHN_CONTEXT_SOFTWARE_PKI, macro in SAML 2.0 Strings
LASSO_SAML2_AUTHN_CONTEXT_SPKI, macro in SAML 2.0 Strings
LASSO_SAML2_AUTHN_CONTEXT_TELEPHONY, macro in SAML 2.0 Strings
LASSO_SAML2_AUTHN_CONTEXT_TIME_SYNC_TOKEN, macro in SAML 2.0 Strings
LASSO_SAML2_AUTHN_CONTEXT_TLS_CLIENT, macro in SAML 2.0 Strings
LASSO_SAML2_AUTHN_CONTEXT_UNSPECIFIED, macro in SAML 2.0 Strings
LASSO_SAML2_AUTHN_CONTEXT_X509, macro in SAML 2.0 Strings
LASSO_SAML2_AUTHN_CONTEXT_XMLDSIG, macro in SAML 2.0 Strings
lasso_saml2_authn_statement_new, function in LassoSaml2AuthnStatement
lasso_saml2_authz_decision_statement_new, function in LassoSaml2AuthzDecisionStatement
lasso_saml2_base_idabstract_new, function in LassoSaml2BaseIDAbstract
lasso_saml2_conditions_new, function in LassoSaml2Conditions
lasso_saml2_condition_abstract_new, function in LassoSaml2ConditionAbstract
LASSO_SAML2_CONFIRMATION_METHOD_BEARER, macro in SAML 2.0 Strings
LASSO_SAML2_CONFIRMATION_METHOD_HOLDER_OF_KEY, macro in SAML 2.0 Strings
LASSO_SAML2_CONSENT_EXPLICIT, macro in SAML 2.0 Strings
LASSO_SAML2_CONSENT_IMPLICIT, macro in SAML 2.0 Strings
LASSO_SAML2_CONSENT_INAPPLICABLE, macro in SAML 2.0 Strings
LASSO_SAML2_CONSENT_OBTAINED, macro in SAML 2.0 Strings
LASSO_SAML2_CONSENT_PRIOR, macro in SAML 2.0 Strings
LASSO_SAML2_CONSENT_UNAVAILABLE, macro in SAML 2.0 Strings
LASSO_SAML2_DEFLATE_ENCODING, macro in SAML 2.0 Strings
lasso_saml2_encrypted_element_build_encrypted_persistent_name_id, function in LassoSaml2EncryptedElement
lasso_saml2_encrypted_element_decrypt, function in LassoSaml2EncryptedElement
lasso_saml2_encrypted_element_new, function in LassoSaml2EncryptedElement
lasso_saml2_encrypted_element_server_decrypt, function in LassoSaml2EncryptedElement
lasso_saml2_evidence_new, function in LassoSaml2Evidence
LASSO_SAML2_FIELD_ARTIFACT, macro in SAML 2.0 Strings
LASSO_SAML2_FIELD_RELAYSTATE, macro in SAML 2.0 Strings
LASSO_SAML2_FIELD_REQUEST, macro in SAML 2.0 Strings
LASSO_SAML2_FIELD_RESPONSE, macro in SAML 2.0 Strings
LASSO_SAML2_FIELD_SIGALG, macro in SAML 2.0 Strings
LASSO_SAML2_FIELD_SIGNATURE, macro in SAML 2.0 Strings
lasso_saml2_key_info_confirmation_data_new, function in LassoSaml2KeyInfoConfirmationData
LASSO_SAML2_METADATA_BINDING_ARTIFACT, macro in SAML 2.0 Strings
LASSO_SAML2_METADATA_BINDING_PAOS, macro in SAML 2.0 Strings
LASSO_SAML2_METADATA_BINDING_POST, macro in SAML 2.0 Strings
LASSO_SAML2_METADATA_BINDING_REDIRECT, macro in SAML 2.0 Strings
LASSO_SAML2_METADATA_BINDING_SOAP, macro in SAML 2.0 Strings
LASSO_SAML2_METADATA_HREF, macro in SAML 2.0 Strings
LASSO_SAML2_METADATA_PREFIX, macro in SAML 2.0 Strings
LASSO_SAML2_NAME_IDENTIFIER_FORMAT_EMAIL, macro in SAML 2.0 Strings
LASSO_SAML2_NAME_IDENTIFIER_FORMAT_ENCRYPTED, macro in SAML 2.0 Strings
LASSO_SAML2_NAME_IDENTIFIER_FORMAT_ENTITY, macro in SAML 2.0 Strings
LASSO_SAML2_NAME_IDENTIFIER_FORMAT_KERBEROS, macro in SAML 2.0 Strings
LASSO_SAML2_NAME_IDENTIFIER_FORMAT_PERSISTENT, macro in SAML 2.0 Strings
LASSO_SAML2_NAME_IDENTIFIER_FORMAT_TRANSIENT, macro in SAML 2.0 Strings
LASSO_SAML2_NAME_IDENTIFIER_FORMAT_UNSPECIFIED, macro in SAML 2.0 Strings
LASSO_SAML2_NAME_IDENTIFIER_FORMAT_WINDOWS, macro in SAML 2.0 Strings
LASSO_SAML2_NAME_IDENTIFIER_FORMAT_X509, macro in SAML 2.0 Strings
lasso_saml2_name_id_build_persistent, function in LassoSaml2NameID
lasso_saml2_name_id_equals, function in LassoSaml2NameID
lasso_saml2_name_id_new, function in LassoSaml2NameID
lasso_saml2_name_id_new_with_persistent_format, function in LassoSaml2NameID
lasso_saml2_name_id_new_with_string, function in LassoSaml2NameID
lasso_saml2_one_time_use_new, function in LassoSaml2OneTimeUse
LASSO_SAML2_PROTOCOL_HREF, macro in SAML 2.0 Strings
LASSO_SAML2_PROTOCOL_PREFIX, macro in SAML 2.0 Strings
lasso_saml2_proxy_restriction_new, function in LassoSaml2ProxyRestriction
lasso_saml2_statement_abstract_new, function in LassoSaml2StatementAbstract
LASSO_SAML2_STATUS_CODE_AUTHN_FAILED, macro in SAML 2.0 Strings
LASSO_SAML2_STATUS_CODE_INVALID_ATTR_NAME, macro in SAML 2.0 Strings
LASSO_SAML2_STATUS_CODE_INVALID_NAME_ID_POLICY, macro in SAML 2.0 Strings
LASSO_SAML2_STATUS_CODE_NO_AUTHN_CONTEXT, macro in SAML 2.0 Strings
LASSO_SAML2_STATUS_CODE_NO_AVAILABLE_IDP, macro in SAML 2.0 Strings
LASSO_SAML2_STATUS_CODE_NO_PASSIVE, macro in SAML 2.0 Strings
LASSO_SAML2_STATUS_CODE_NO_SUPPORTED_IDP, macro in SAML 2.0 Strings
LASSO_SAML2_STATUS_CODE_PARTIAL_LOGOUT, macro in SAML 2.0 Strings
LASSO_SAML2_STATUS_CODE_PROXY_COUNT_EXCEEDED, macro in SAML 2.0 Strings
LASSO_SAML2_STATUS_CODE_REQUESTER, macro in SAML 2.0 Strings
LASSO_SAML2_STATUS_CODE_REQUEST_DENIED, macro in SAML 2.0 Strings
LASSO_SAML2_STATUS_CODE_REQUEST_UNSUPPORTED, macro in SAML 2.0 Strings
LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_DEPRECATED, macro in SAML 2.0 Strings
LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_TOO_HIGH, macro in SAML 2.0 Strings
LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_TOO_LOW, macro in SAML 2.0 Strings
LASSO_SAML2_STATUS_CODE_RESOURCE_NOT_RECOGNIZED, macro in SAML 2.0 Strings
LASSO_SAML2_STATUS_CODE_RESPONDER, macro in SAML 2.0 Strings
LASSO_SAML2_STATUS_CODE_SUCCESS, macro in SAML 2.0 Strings
LASSO_SAML2_STATUS_CODE_TOO_MANY_RESPONSES, macro in SAML 2.0 Strings
LASSO_SAML2_STATUS_CODE_UNKNOWN_ATTR_PROFILE, macro in SAML 2.0 Strings
LASSO_SAML2_STATUS_CODE_UNKNOWN_PRINCIPAL, macro in SAML 2.0 Strings
LASSO_SAML2_STATUS_CODE_UNSUPPORTED_BINDING, macro in SAML 2.0 Strings
LASSO_SAML2_STATUS_CODE_VERSION_MISMATCH, macro in SAML 2.0 Strings
lasso_saml2_subject_confirmation_data_new, function in LassoSaml2SubjectConfirmationData
lasso_saml2_subject_confirmation_new, function in LassoSaml2SubjectConfirmation
lasso_saml2_subject_locality_new, function in LassoSaml2SubjectLocality
lasso_saml2_subject_new, function in LassoSaml2Subject
LassoSamlAdvice, struct in LassoSamlAdvice
LassoSamlAssertion, struct in LassoSamlAssertion
LassoSamlAttribute, struct in LassoSamlAttribute
LassoSamlAttributeDesignator, struct in LassoSamlAttributeDesignator
LassoSamlAttributeStatement, struct in LassoSamlAttributeStatement
LassoSamlAttributeValue, struct in LassoSamlAttributeValue
LassoSamlAudienceRestrictionCondition, struct in LassoSamlAudienceRestrictionCondition
LassoSamlAuthenticationStatement, struct in LassoSamlAuthenticationStatement
LassoSamlAuthorityBinding, struct in LassoSamlAuthorityBinding
LassoSamlConditionAbstract, struct in LassoSamlConditionAbstract
LassoSamlConditions, struct in LassoSamlConditions
LassoSamlNameIdentifier, struct in LassoSamlNameIdentifier
LassoSamlp2ArtifactResolve, struct in LassoSamlp2ArtifactResolve
LassoSamlp2ArtifactResponse, struct in LassoSamlp2ArtifactResponse
LassoSamlp2AssertionIDRequest, struct in LassoSamlp2AssertionIDRequest
LassoSamlp2AttributeQuery, struct in LassoSamlp2AttributeQuery
LassoSamlp2AuthnQuery, struct in LassoSamlp2AuthnQuery
LassoSamlp2AuthnRequest, struct in LassoSamlp2AuthnRequest
LassoSamlp2AuthzDecisionQuery, struct in LassoSamlp2AuthzDecisionQuery
LassoSamlp2Extensions, struct in LassoSamlp2Extensions
LassoSamlp2IDPEntry, struct in LassoSamlp2IDPEntry
LassoSamlp2IDPList, struct in LassoSamlp2IDPList
LassoSamlp2LogoutRequest, struct in LassoSamlp2LogoutRequest
LassoSamlp2LogoutResponse, struct in LassoSamlp2LogoutResponse
LassoSamlp2ManageNameIDRequest, struct in LassoSamlp2ManageNameIDRequest
LassoSamlp2ManageNameIDResponse, struct in LassoSamlp2ManageNameIDResponse
LassoSamlp2NameIDMappingRequest, struct in LassoSamlp2NameIDMappingRequest
LassoSamlp2NameIDMappingResponse, struct in LassoSamlp2NameIDMappingResponse
LassoSamlp2NameIDPolicy, struct in LassoSamlp2NameIDPolicy
LassoSamlp2RequestAbstract, struct in LassoSamlp2RequestAbstract
LassoSamlp2RequestedAuthnContext, struct in LassoSamlp2RequestedAuthnContext
LassoSamlp2Response, struct in LassoSamlp2Response
LassoSamlp2Scoping, struct in LassoSamlp2Scoping
LassoSamlp2Status, struct in LassoSamlp2Status
LassoSamlp2StatusCode, struct in LassoSamlp2StatusCode
LassoSamlp2StatusDetail, struct in LassoSamlp2StatusDetail
LassoSamlp2StatusResponse, struct in LassoSamlp2StatusResponse
LassoSamlp2SubjectQueryAbstract, struct in LassoSamlp2SubjectQueryAbstract
LassoSamlp2Terminate, struct in LassoSamlp2Terminate
lasso_samlp2_artifact_resolve_new, function in LassoSamlp2ArtifactResolve
lasso_samlp2_artifact_response_new, function in LassoSamlp2ArtifactResponse
lasso_samlp2_assertion_id_request_new, function in LassoSamlp2AssertionIDRequest
lasso_samlp2_attribute_query_new, function in LassoSamlp2AttributeQuery
lasso_samlp2_authn_query_new, function in LassoSamlp2AuthnQuery
lasso_samlp2_authn_request_new, function in LassoSamlp2AuthnRequest
lasso_samlp2_authz_decision_query_new, function in LassoSamlp2AuthzDecisionQuery
lasso_samlp2_extensions_new, function in LassoSamlp2Extensions
lasso_samlp2_idp_entry_new, function in LassoSamlp2IDPEntry
lasso_samlp2_idp_list_new, function in LassoSamlp2IDPList
lasso_samlp2_logout_request_get_session_indexes, function in LassoSamlp2LogoutRequest
lasso_samlp2_logout_request_new, function in LassoSamlp2LogoutRequest
lasso_samlp2_logout_request_set_session_indexes, function in LassoSamlp2LogoutRequest
lasso_samlp2_logout_response_new, function in LassoSamlp2LogoutResponse
lasso_samlp2_manage_name_id_request_new, function in LassoSamlp2ManageNameIDRequest
lasso_samlp2_manage_name_id_response_new, function in LassoSamlp2ManageNameIDResponse
lasso_samlp2_name_id_mapping_request_new, function in LassoSamlp2NameIDMappingRequest
lasso_samlp2_name_id_mapping_response_new, function in LassoSamlp2NameIDMappingResponse
lasso_samlp2_name_id_policy_new, function in LassoSamlp2NameIDPolicy
lasso_samlp2_requested_authn_context_new, function in LassoSamlp2RequestedAuthnContext
lasso_samlp2_request_abstract_new, function in LassoSamlp2RequestAbstract
lasso_samlp2_response_new, function in LassoSamlp2Response
lasso_samlp2_scoping_new, function in LassoSamlp2Scoping
lasso_samlp2_status_code_new, function in LassoSamlp2StatusCode
lasso_samlp2_status_detail_new, function in LassoSamlp2StatusDetail
lasso_samlp2_status_new, function in LassoSamlp2Status
lasso_samlp2_status_response_new, function in LassoSamlp2StatusResponse
lasso_samlp2_subject_query_abstract_new, function in LassoSamlp2SubjectQueryAbstract
lasso_samlp2_terminate_new, function in LassoSamlp2Terminate
LassoSamlpRequest, struct in LassoSamlpRequest
LassoSamlpRequestAbstract, struct in LassoSamlpRequestAbstract
LassoSamlpResponse, struct in LassoSamlpResponse
LassoSamlpResponseAbstract, struct in LassoSamlpResponseAbstract
LassoSamlpStatus, struct in LassoSamlpStatus
LassoSamlpStatusCode, struct in LassoSamlpStatusCode
lasso_samlp_request_new, function in LassoSamlpRequest
lasso_samlp_response_abstract_fill, function in LassoSamlpResponseAbstract
lasso_samlp_response_new, function in LassoSamlpResponse
lasso_samlp_status_code_new, function in LassoSamlpStatusCode
lasso_samlp_status_new, function in LassoSamlpStatus
LassoSamlStatementAbstract, struct in LassoSamlStatementAbstract
LassoSamlSubject, struct in LassoSamlSubject
LassoSamlSubjectConfirmation, struct in LassoSamlSubjectConfirmation
LassoSamlSubjectLocality, struct in LassoSamlSubjectLocality
LassoSamlSubjectStatement, struct in LassoSamlSubjectStatement
LassoSamlSubjectStatementAbstract, struct in LassoSamlSubjectStatementAbstract
lasso_saml_advice_new, function in LassoSamlAdvice
LASSO_SAML_ASSERTION_HREF, macro in Strings for ID-FF 1.2
lasso_saml_assertion_new, function in LassoSamlAssertion
LASSO_SAML_ASSERTION_PREFIX, macro in Strings for ID-FF 1.2
lasso_saml_attribute_designator_new, function in LassoSamlAttributeDesignator
lasso_saml_attribute_new, function in LassoSamlAttribute
lasso_saml_attribute_statement_new, function in LassoSamlAttributeStatement
lasso_saml_attribute_value_new, function in LassoSamlAttributeValue
lasso_saml_audience_restriction_condition_new, function in LassoSamlAudienceRestrictionCondition
lasso_saml_audience_restriction_condition_new_full, function in LassoSamlAudienceRestrictionCondition
LASSO_SAML_AUTHENTICATION_METHODS_PKI, macro in Strings for ID-FF 1.2
LASSO_SAML_AUTHENTICATION_METHOD_HARDWARE_TOKEN, macro in Strings for ID-FF 1.2
LASSO_SAML_AUTHENTICATION_METHOD_KERBEROS, macro in Strings for ID-FF 1.2
LASSO_SAML_AUTHENTICATION_METHOD_LIBERTY, macro in Strings for ID-FF 1.2
LASSO_SAML_AUTHENTICATION_METHOD_PASSWORD, macro in Strings for ID-FF 1.2
LASSO_SAML_AUTHENTICATION_METHOD_PGP, macro in Strings for ID-FF 1.2
LASSO_SAML_AUTHENTICATION_METHOD_SECURE_REMOTE_PASSWORD, macro in Strings for ID-FF 1.2
LASSO_SAML_AUTHENTICATION_METHOD_SMARTCARD_PKI, macro in Strings for ID-FF 1.2
LASSO_SAML_AUTHENTICATION_METHOD_SOFTWARE_PKI, macro in Strings for ID-FF 1.2
LASSO_SAML_AUTHENTICATION_METHOD_UNSPECIFIED, macro in Strings for ID-FF 1.2
LASSO_SAML_AUTHENTICATION_METHOD_XKMS, macro in Strings for ID-FF 1.2
LASSO_SAML_AUTHENTICATION_METHOD_XMLD_SIG, macro in Strings for ID-FF 1.2
lasso_saml_authentication_statement_new, function in LassoSamlAuthenticationStatement
lasso_saml_authority_binding_new, function in LassoSamlAuthorityBinding
lasso_saml_conditions_new, function in LassoSamlConditions
LASSO_SAML_CONFIRMATION_METHOD_ARTIFACT, macro in Strings for ID-FF 1.2
LASSO_SAML_CONFIRMATION_METHOD_ARTIFACT01, macro in Strings for ID-FF 1.2
LASSO_SAML_CONFIRMATION_METHOD_BEARER, macro in Strings for ID-FF 1.2
LASSO_SAML_CONFIRMATION_METHOD_HOLDER_OF_KEY, macro in Strings for ID-FF 1.2
LASSO_SAML_CONFIRMATION_METHOD_SENDER_VOUCHES, macro in Strings for ID-FF 1.2
LASSO_SAML_MAJOR_VERSION_N, macro in Strings for ID-FF 1.2
LASSO_SAML_MINOR_VERSION_N, macro in Strings for ID-FF 1.2
lasso_saml_name_identifier_new, function in LassoSamlNameIdentifier
lasso_saml_name_identifier_new_from_xmlNode, function in LassoSamlNameIdentifier
LASSO_SAML_PROTOCOL_HREF, macro in Strings for ID-FF 1.2
LASSO_SAML_PROTOCOL_PREFIX, macro in Strings for ID-FF 1.2
LASSO_SAML_STATUS_CODE_REQUESTER, macro in Strings for ID-FF 1.2
LASSO_SAML_STATUS_CODE_REQUEST_DENIED, macro in Strings for ID-FF 1.2
LASSO_SAML_STATUS_CODE_REQUEST_VERSION_DEPRECATED, macro in Strings for ID-FF 1.2
LASSO_SAML_STATUS_CODE_REQUEST_VERSION_TOO_HIGH, macro in Strings for ID-FF 1.2
LASSO_SAML_STATUS_CODE_REQUEST_VERSION_TOO_LOW, macro in Strings for ID-FF 1.2
LASSO_SAML_STATUS_CODE_RESOURCE_NOT_RECOGNIZED, macro in Strings for ID-FF 1.2
LASSO_SAML_STATUS_CODE_RESPONDER, macro in Strings for ID-FF 1.2
LASSO_SAML_STATUS_CODE_SUCCESS, macro in Strings for ID-FF 1.2
LASSO_SAML_STATUS_CODE_TOO_MANY_RESPONSES, macro in Strings for ID-FF 1.2
LASSO_SAML_STATUS_CODE_VERSION_MISMATCH, macro in Strings for ID-FF 1.2
lasso_saml_subject_confirmation_new, function in LassoSamlSubjectConfirmation
lasso_saml_subject_locality_new, function in LassoSamlSubjectLocality
lasso_saml_subject_new, function in LassoSamlSubject
lasso_saml_subject_statement_new, function in LassoSamlSubjectStatement
LassoServer, struct in LassoServer
lasso_server_add_provider, function in LassoServer
lasso_server_add_provider2, function in LassoServer
lasso_server_add_provider_from_buffer, function in LassoServer
lasso_server_destroy, function in LassoServer
lasso_server_dump, function in LassoServer
LASSO_SERVER_ERROR_ADD_PROVIDER_FAILED, macro in Error Codes
LASSO_SERVER_ERROR_ADD_PROVIDER_PROTOCOL_MISMATCH, macro in Error Codes
LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND, macro in Error Codes
LASSO_SERVER_ERROR_SET_ENCRYPTION_PRIVATE_KEY_FAILED, macro in Error Codes
lasso_server_get_endpoint_url_by_id, function in LassoServer
lasso_server_get_filtered_provider_list, function in LassoServer
lasso_server_get_provider, function in LassoServer
lasso_server_load_affiliation, function in LassoServer
lasso_server_load_metadata, function in LassoServer
lasso_server_new, function in LassoServer
lasso_server_new_from_buffers, function in LassoServer
lasso_server_new_from_dump, function in LassoServer
lasso_server_saml2_assertion_setup_signature, function in LassoServer
lasso_server_set_encryption_private_key, function in LassoServer
lasso_server_set_encryption_private_key_with_password, function in LassoServer
LassoSession, struct in LassoSession
lasso_session_add_assertion, function in LassoSession
lasso_session_destroy, function in LassoSession
lasso_session_dump, function in LassoSession
lasso_session_get_assertion, function in LassoSession
lasso_session_get_assertions, function in LassoSession
lasso_session_get_provider_index, function in LassoSession
lasso_session_is_empty, function in LassoSession
lasso_session_new, function in LassoSession
lasso_session_new_from_dump, function in LassoSession
lasso_session_remove_assertion, function in LassoSession
lasso_set_flag, function in Initialization functions
lasso_shutdown, function in Initialization functions
LassoSignatureMethod, enum in node
LassoSignatureType, enum in node
LassoSoapBody, struct in LassoSoapBody
LassoSoapDetail, struct in LassoSoapDetail
LassoSoapEnvelope, struct in LassoSoapEnvelope
LassoSoapFault, struct in LassoSoapFault
LassoSoapHeader, struct in LassoSoapHeader
lasso_soap_body_new, function in LassoSoapBody
lasso_soap_body_new_from_message, function in LassoSoapBody
lasso_soap_detail_new, function in LassoSoapDetail
lasso_soap_detail_new_from_message, function in LassoSoapDetail
lasso_soap_envelope_new, function in LassoSoapEnvelope
lasso_soap_envelope_new_from_message, function in LassoSoapEnvelope
lasso_soap_envelope_new_full, function in LassoSoapEnvelope
LASSO_SOAP_ENV_ACTOR, macro in Strings for SOAP
LASSO_SOAP_ENV_HREF, macro in Strings for SOAP
LASSO_SOAP_ENV_PREFIX, macro in Strings for SOAP
LASSO_SOAP_ERROR_MISSING_BODY, macro in Error Codes
LASSO_SOAP_ERROR_MISSING_ENVELOPE, macro in Error Codes
LASSO_SOAP_ERROR_MISSING_HEADER, macro in Error Codes
LASSO_SOAP_ERROR_MISSING_SOAP_FAULT_DETAIL, macro in Error Codes
LASSO_SOAP_ERROR_REDIRECT_REQUEST_FAULT, macro in Error Codes
LASSO_SOAP_FAULT_CODE_CLIENT, macro in Strings for SOAP 1.1
LASSO_SOAP_FAULT_CODE_MUST_UNDERSTAND, macro in Strings for SOAP 1.1
LASSO_SOAP_FAULT_CODE_SERVER, macro in Strings for SOAP 1.1
LASSO_SOAP_FAULT_CODE_VERSION_MISMATCH, macro in Strings for SOAP 1.1
lasso_soap_fault_new, function in LassoSoapFault
lasso_soap_fault_new_from_message, function in LassoSoapFault
lasso_soap_fault_new_full, function in LassoSoapFault
lasso_soap_header_new, function in LassoSoapHeader
lasso_soap_header_new_from_message, function in LassoSoapHeader
lasso_strerror, function in LassoNode

W

LASSO_WSUTIL1_HREF, macro in Strings for WS-*
LASSO_WSUTIL1_PREFIX, macro in Strings for WS-*

X

LASSO_XML_ERROR_ATTR_NOT_FOUND, macro in Error Codes
LASSO_XML_ERROR_ATTR_VALUE_NOT_FOUND, macro in Error Codes
LASSO_XML_ERROR_INVALID_FILE, macro in Error Codes
LASSO_XML_ERROR_MISSING_NAMESPACE, macro in Error Codes
LASSO_XML_ERROR_NODE_CONTENT_NOT_FOUND, macro in Error Codes
LASSO_XML_ERROR_NODE_NOT_FOUND, macro in Error Codes
LASSO_XML_ERROR_OBJECT_CONSTRUCTION_FAILED, macro in Error Codes
LASSO_XSI_HREF, macro in Strings for WS-*
LASSO_XSI_PREFIX, macro in Strings for WS-*
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSaml2Attribute.html0000644000000000000000000000013214404126163023430 xustar0030 mtime=1678814323.013964721 30 atime=1678814323.013964721 30 ctime=1678814323.013964721 lasso-2.8.2/docs/reference/lasso/html/LassoSaml2Attribute.html0000644000175000017500000001342514404126163026705 0ustar00bdauvergnebdauvergne00000000000000 LassoSaml2Attribute: lasso Reference Manual

LassoSaml2Attribute

LassoSaml2Attribute — <saml2:Attribute>

Functions

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSaml2Attribute

Description

Figure 49. Schema fragment for saml2:Attribute


<complexType name="AttributeType">
  <sequence>
    <element ref="saml:AttributeValue" minOccurs="0" maxOccurs="unbounded"/>
  </sequence>
  <attribute name="Name" type="string" use="required"/>
  <attribute name="NameFormat" type="anyURI" use="optional"/>
  <attribute name="FriendlyName" type="string" use="optional"/>
  <anyAttribute namespace="##other" processContents="lax"/>
</complexType>

Functions

lasso_saml2_attribute_new ()

LassoNode *
lasso_saml2_attribute_new (void);

Creates a new LassoSaml2Attribute object.

Returns

a newly created LassoSaml2Attribute object

Types and Values

struct LassoSaml2Attribute

struct LassoSaml2Attribute {
	/* elements */
	GList *AttributeValue; /* of LassoNode */
	/* attributes */
	char *Name;
	char *NameFormat;
	char *FriendlyName;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/lasso-Strings-for-XML-DSIG.html0000644000000000000000000000013214404126163024302 xustar0030 mtime=1678814323.045964902 30 atime=1678814323.045964902 30 ctime=1678814323.045964902 lasso-2.8.2/docs/reference/lasso/html/lasso-Strings-for-XML-DSIG.html0000644000175000017500000000731714404126163027562 0ustar00bdauvergnebdauvergne00000000000000 Strings for XML-DSIG: lasso Reference Manual

Strings for XML-DSIG

Strings for XML-DSIG — General strings constants for XMLDsig

Types and Values

#define LASSO_DS_HREF
#define LASSO_DS_PREFIX

Includes

#include <lasso/xml/dsig/strings.h>

Description

Functions

Types and Values

LASSO_DS_HREF

#define LASSO_DS_HREF   "http://www.w3.org/2000/09/xmldsig#"

Namespace for FIXME


LASSO_DS_PREFIX

#define LASSO_DS_PREFIX "ds"

Preferred prefix for namespace of FIXME

lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSaml2AuthnStatement.html0000644000000000000000000000013214404126163024431 xustar0030 mtime=1678814323.013964721 30 atime=1678814323.013964721 30 ctime=1678814323.013964721 lasso-2.8.2/docs/reference/lasso/html/LassoSaml2AuthnStatement.html0000644000175000017500000001452014404126163027703 0ustar00bdauvergnebdauvergne00000000000000 LassoSaml2AuthnStatement: lasso Reference Manual

LassoSaml2AuthnStatement

LassoSaml2AuthnStatement — <saml2:AuthnStatement>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSaml2StatementAbstract
            ╰── LassoSaml2AuthnStatement

Description

Figure 52. Schema fragment for saml2:AuthnStatement


<complexType name="AuthnStatementType">
  <complexContent>
    <extension base="saml:StatementAbstractType">
      <sequence>
        <element ref="saml:SubjectLocality" minOccurs="0"/>
        <element ref="saml:AuthnContext"/>
      </sequence>
      <attribute name="AuthnInstant" type="dateTime" use="required"/>
      <attribute name="SessionIndex" type="string" use="optional"/>
      <attribute name="SessionNotOnOrAfter" type="dateTime" use="optional"/>
    </extension>
  </complexContent>
</complexType>

Functions

lasso_saml2_authn_statement_new ()

LassoNode *
lasso_saml2_authn_statement_new (void);

Creates a new LassoSaml2AuthnStatement object.

Returns

a newly created LassoSaml2AuthnStatement object

Types and Values

struct LassoSaml2AuthnStatement

struct LassoSaml2AuthnStatement {
	/* elements */
	LassoSaml2SubjectLocality *SubjectLocality;
	LassoSaml2AuthnContext *AuthnContext;
	/* attributes */
	char *AuthnInstant;
	char *SessionIndex;
	char *SessionNotOnOrAfter;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/lasso-LassoPaosResponse.html0000644000000000000000000000012714404126163024332 xustar0029 mtime=1678814323.04196488 29 atime=1678814323.04196488 29 ctime=1678814323.04196488 lasso-2.8.2/docs/reference/lasso/html/lasso-LassoPaosResponse.html0000644000175000017500000001550314404126163027602 0ustar00bdauvergnebdauvergne00000000000000 LassoPaosResponse: lasso Reference Manual

LassoPaosResponse

LassoPaosResponse — <paos:Response>

Description

Figure 22. Schema fragment for paos:Response


<xs:element name="Response" type="ResponseType"/>
<xs:complexType name="ResponseType">
    <xs:attribute name="refToMessageID" type="IDType" use="optional"/>
    <xs:attribute ref="S:mustUnderstand" use="required"/>
    <xs:attribute ref="S:actor" use="required"/>
</xs:complexType>

Functions

lasso_paos_response_validate ()

int
lasso_paos_response_validate (LassoPaosResponse *node);

Validates the object conforms to required values.

Parameters

response

The LassoPaosResponse object to validate

 

Returns

0 on success, error code otherwise


lasso_paos_response_new ()

LassoNode *
lasso_paos_response_new (const gchar *refToMessageID);

The LassoPaosResponse object is initialized as follows:


  refToMessageID = refToMessageID (if non-NULL)
  mustUnderstand = TRUE
  actor = LASSO_SOAP_ENV_ACTOR

Parameters

refToMessageID

.

[allow-none]

Returns

a newly created and initialized LassoPaosResponse object

lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoProvider.html0000644000000000000000000000013214404126163022360 xustar0030 mtime=1678814323.013964721 30 atime=1678814323.013964721 30 ctime=1678814323.013964721 lasso-2.8.2/docs/reference/lasso/html/LassoProvider.html0000644000175000017500000025420314404126163025636 0ustar00bdauvergnebdauvergne00000000000000 LassoProvider: lasso Reference Manual

LassoProvider

LassoProvider — Service or identity provider

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoProvider
            ╰── LassoServer

Description

The LassoProvider object holds metadata about a provider. Metadata are sorted into descriptors, each descriptor being assigned a role. We refer you to Liberty Metadata Description and Discovery Specification and Metadata for the OASIS Security Assertion Markup Language (SAML) V2.0.

Roles are represented by the enumeration LassoProviderRole, you can access descriptors content using lasso_provider_get_metadata_list_for_role() and lasso_provider_get_metadata_by_role(). Descriptors resources are flattened inside a simple hashtable. For example to get the URL(s) for the SAML 2.0 single logout response endpoint using binding HTTP-POST of the SP descriptor of a provider called x, you would call:

GList *urls = lasso_provider_get_metadata_list_for_role(x, LASSO_PROVIDER_ROLE_SP, "SingleLogoutService HTTP-POST ResponseLocation");

A provider usually possess a default role stored in the LassoProvider.role field, which is initialized by the lasso_server_add_provider() method when registering a new remote provider to our current provider. The methods lasso_provider_get_metadata() and lasso_provider_get_metadata_list() use this default role to access descriptors.

Functions

lasso_provider_new ()

LassoProvider *
lasso_provider_new (LassoProviderRole role,
                    const char *metadata,
                    const char *public_key,
                    const char *ca_cert_chain);

Creates a new LassoProvider.

Parameters

role

provider role, identity provider or service provider

 

metadata

path to the provider metadata file

 

public_key

path to the provider public key file (may be a certificate) or NULL.

[allow-none]

ca_cert_chain

path to the provider CA certificate chain file or NULL.

[allow-none]

Returns

a newly created LassoProvider; or NULL if an error occured


lasso_provider_new_from_buffer ()

LassoProvider *
lasso_provider_new_from_buffer (LassoProviderRole role,
                                const char *metadata,
                                const char *public_key,
                                const char *ca_cert_chain);

Creates a new LassoProvider.

Parameters

role

provider role, identity provider or service provider

 

metadata

string buffer containing a metadata file

 

public_key

path to the provider public key file (may be a certificate) or NULL.

[allow-none]

ca_cert_chain

path to the provider CA certificate chain file or NULL.

[allow-none]

Returns

a newly created LassoProvider; or NULL if an error occured


lasso_provider_get_assertion_consumer_service_url ()

gchar *
lasso_provider_get_assertion_consumer_service_url
                               (LassoProvider *provider,
                                const char *service_id);

Extracts the AssertionConsumerServiceURL from the provider metadata descriptor.

Parameters

provider

a LassoProvider

 

service_id

the AssertionConsumerServiceID, NULL for default.

[allow-none]

Returns

the element value, NULL if the element was not found. This string must be freed by the caller.

[allow-none][transfer full]


lasso_provider_get_metadata_one ()

gchar *
lasso_provider_get_metadata_one (LassoProvider *provider,
                                 const char *name);

Extracts the element name from the provider metadata descriptor.

Parameters

provider

a LassoProvider

 

name

the element name

 

Returns

the element value, NULL if the element was not found. This string must be freed by the caller.

[transfer full][allow-none]


lasso_provider_get_metadata_list ()

GList *
lasso_provider_get_metadata_list (LassoProvider *provider,
                                  const char *name);

Extracts zero to many elements from the provider metadata descriptor.

Parameters

provider

a LassoProvider

 

name

the element name

 

Returns

a GList with the elements. This GList is internally allocated and points to internally allocated strings. It must not be freed, modified or stored.

[transfer none][element-type string]


lasso_provider_new_from_dump ()

LassoProvider *
lasso_provider_new_from_dump (const gchar *dump);

Restores the dump to a new LassoProvider.

Parameters

dump

XML provider dump

 

Returns

a newly created LassoProvider; or NULL if an error occured.


lasso_provider_get_first_http_method ()

LassoHttpMethod
lasso_provider_get_first_http_method (LassoProvider *provider,
                                      LassoProvider *remote_provider,
                                      LassoMdProtocolType protocol_type);

Looks up and returns a LassoHttpMethod appropriate for performing the protocol_type between provider and remote_provider .

Parameters

provider

a LassoProvider.

[transfer none]

remote_provider

a LassoProvider depicting the remote provider

 

protocol_type

a Liberty profile

 

Returns

the LassoHttpMethod


lasso_provider_accept_http_method ()

gboolean
lasso_provider_accept_http_method (LassoProvider *provider,
                                   LassoProvider *remote_provider,
                                   LassoMdProtocolType protocol_type,
                                   LassoHttpMethod http_method,
                                   gboolean initiate_profile);

Gets if http_method is an appropriate method for the protocol_type profile between provider and remote_provider .

Parameters

provider

a LassoProvider

 

remote_provider

a LassoProvider depicting the remote provider

 

protocol_type

a Liberty profile type

 

http_method

an HTTP method

 

initiate_profile

whether provider initiates the profile

 

Returns

TRUE if it is appropriate


lasso_provider_has_protocol_profile ()

gboolean
lasso_provider_has_protocol_profile (LassoProvider *provider,
                                     LassoMdProtocolType protocol_type,
                                     const char *protocol_profile);

Gets if provider supports protocol_profile .

Parameters

provider

a LassoProvider

 

protocol_type

a Liberty profile type

 

protocol_profile

a fully-qualified Liberty profile

 

Returns

TRUE if it is supported


lasso_provider_get_base64_succinct_id ()

gchar *
lasso_provider_get_base64_succinct_id (const LassoProvider *provider);

Computes and returns the base64-encoded provider succinct ID.

Parameters

provider

a LassoProvider

 

Returns

the provider succinct ID. This string must be freed by the caller.

[transfer full][allow-none]


lasso_provider_get_organization ()

xmlNode *
lasso_provider_get_organization (const LassoProvider *provider);

Returns the provider metadata <Organization> XML node.

Parameters

provider

a LassoProvider

 

Returns

the <Organization/> node (libxml2 xmlNode*); or NULL if it is not found. This xmlnode must be freed by the caller.

[transfer full][allow-none]


lasso_provider_get_protocol_conformance ()

LassoProtocolConformance
lasso_provider_get_protocol_conformance
                               (const LassoProvider *provider);

Return the protocol conformance of the given provider, it should allow to switch behaviour of SP and IdP code toward a specific protocol. See also LassoProtocolConformance.

Parameters

provider

a LassoProvider object

 

Returns

a value in the LassoProtocolConformance enumeration.


lasso_provider_get_encryption_mode ()

LassoEncryptionMode
lasso_provider_get_encryption_mode (LassoProvider *provider);

Return the current encryption mode.

Parameters

provider

a LassoProvider object

 

Returns

a value in the LassoEncryptionMode enumeration.


lasso_provider_set_encryption_mode ()

void
lasso_provider_set_encryption_mode (LassoProvider *provider,
                                    LassoEncryptionMode encryption_mode);

Activate or desactivate encryption

Parameters

provider

provider to set encryption for

 

encryption_mode

TRUE to activate, FALSE to desactivate

 

lasso_provider_set_encryption_sym_key_type ()

void
lasso_provider_set_encryption_sym_key_type
                               (LassoProvider *provider,
                                LassoEncryptionSymKeyType encryption_sym_key_type);

Set the type of the generated encryption symetric key

Parameters

provider

provider to set encryption for

 

encryption_sym_key_type

enum type for generated symetric key

 

lasso_provider_verify_single_node_signature ()

lasso_error_t
lasso_provider_verify_single_node_signature
                               (LassoProvider *provider,
                                LassoNode *node,
                                const char *id_attr_name);

Return wheter the provider signed this node.

Parameters

provider

a LassoProvider object

 

node

a LassoNode object, still having its originalXmlnode content, and containing an XML signature.

 

id_attr_name

the name of the ID attribute to lookup.

 

Returns

0 if the node is signed by this provider, an error code otherwise.


lasso_provider_get_default_name_id_format ()

gchar *
lasso_provider_get_default_name_id_format
                               (LassoProvider *provider);

If the provider has a list of supported name id formats in its metadatas, return the first one.

Parameters

provider

a LassoProvider object

 

Returns

a NameIDFormat URI or NULL, the returned value must be freed by the caller.

[transfer full][allow-none]


lasso_provider_get_sp_name_qualifier ()

const char *
lasso_provider_get_sp_name_qualifier (LassoProvider *provider);

Return the entityID to use for qualifying NameIdentifier.

Parameters

provider

a LassoPRovider object

 

Returns

a private string or NULL. Do not keep a reference on this string or free it.

[transfer none][allow-none]


lasso_provider_get_idp_supported_attributes ()

GList *
lasso_provider_get_idp_supported_attributes
                               (LassoProvider *provider);

If the provider supports the IDP SSO role, then return the list of Attribute definition that this provider declared supporting.

Parameters

provider

a LassoProvider object

 

Returns

a list of LassoSaml2Attribute or LassoSamlAttribute.

[transfer none][element-type LassoNode]


lasso_provider_get_valid_until ()

char *
lasso_provider_get_valid_until (LassoProvider *provider);

Return the time after which the metadata for this provider will become invalid. This is an ISO-8601 formatted string.

Parameters

provider

a LassoProvider object

 

Returns

an internally allocated string, you can copy it but not store it.

[transfer none]


lasso_provider_get_cache_duration ()

char *
lasso_provider_get_cache_duration (LassoProvider *provider);

Return the time during which the metadata for this provider can be kept.

Parameters

provider

a LassoProvider object

 

Returns

an internally allocated string, you can copy it but not store it.

[transfer none]


lasso_provider_get_metadata_one_for_role ()

char *
lasso_provider_get_metadata_one_for_role
                               (LassoProvider *provider,
                                LassoProviderRole role,
                                const char *name);

Return the given information extracted from the metadata of the given LassoProvider for the given role descriptor.

Retun value: a newly allocated string or NULL. If non-NULL must be freed by the caller.

Parameters

provider

a LassoProvider object

 

role

a LassoProviderRole value

 

name

a metadata information name

 

lasso_provider_get_metadata_list_for_role ()

GList *
lasso_provider_get_metadata_list_for_role
                               (const LassoProvider *provider,
                                LassoProviderRole role,
                                const char *name);

Extracts zero to many elements from the provider descriptor for the given role .

Parameters

provider

a LassoProvider

 

role

a LassoProviderRole value

 

name

the element name

 

Returns

a GList with the elements. This GList is internally allocated and points to internally allocated strings. It must not be freed, modified or stored.

[transfer none][element-type string]


lasso_provider_get_metadata_keys_for_role ()

GList *
lasso_provider_get_metadata_keys_for_role
                               (LassoProvider *provider,
                                LassoProviderRole role);

Returns the list of metadata keys existing for the given provider.

Parameters

provider

a LassoProvider object

 

role

a LassoProviderRole value

 

Returns

a newly allocated list of strings.

[element-type utf8][transfer full]


lasso_provider_get_roles ()

LassoProviderRole
lasso_provider_get_roles (LassoProvider *provider);

Return the bitmask of the supported roles.

Parameters

provider

a LassoProvider object

 

Returns

a LassoProviderRole enumeration value.


lasso_provider_match_conformance ()

gboolean
lasso_provider_match_conformance (LassoProvider *provider,
                                  LassoProvider *another_provider);

Return whether the two provider support a same protocol. See also LassoProtocolConformance.

Parameters

provider

a LassoProvider object

 

another_provider

a LassoProvider object

 

Returns

TRUE or FALSE.


lasso_provider_set_protocol_conformance ()

void
lasso_provider_set_protocol_conformance
                               (LassoProvider *provider,
                                LassoProtocolConformance protocol_conformance);

Normally the protocol conformance is set when the metadata for the provider is loaded because the metadata defines the type of server. However some LassoServer variants do not have metadata (e.g. ECP) therefore instead of loading the metadata it is necessary to explicitly set the protocol conformance because parts of the Lasso library dispatch based on the protocol conformance. Without the protocol conformance being set it is likely the wrong code will execute.

**WARNING**, do not manually set the protocol conformance if metadata has been loaded, metadata is the final arbiter of protocol conformance.

Parameters

provider

a LassoProvider object

 

protocol_conformance

LassoProtocolConformance enumerated value.

 

Returns

0 on success; another value if an error occured.

Types and Values

struct LassoProvider

struct LassoProvider {
	gchar *ProviderID;
	LassoProviderRole role;

	char *metadata_filename;
	gchar *public_key;
	gchar *ca_cert_chain;
};

Any kind of provider, identity provider, service provider, attribute authority, authorization authority will be represented by a LassoProvider object. This object will holds public keys, certificate chains and metadata informations. The ID-FF 1.2 and SAML 2.0 metadata files are flattened inside a key-value map that you can access using the functions lasso_provider_get_metadata_one_for_role(), lasso_provider_get_metadata_list_for_role(), lasso_provider_get_metadata_keys_for_role().

Members

gchar *ProviderID;

the identifier URI of this provider

 

LassoProviderRole role;

the role prescribed when this LassoProvider was built

 

char *metadata_filename;

file path or content of the metadata description for this provider.

 

gchar *public_key;

file path or content of the public key file for this provider.

 

gchar *ca_cert_chain;

file path or content of the CA cert chain used to validate signature of this provider (can be used instead of a public key to limit the need for metadata updates).

 

enum LassoProviderRole

LassoProviderRole is an enumeration allowing to enumerate the roles handled by a provider, it can be used in a bitmask as each value is a power of 2 (except LASSO_PROVIDER_ROLE_ANY which is the full bitmask and LASSO_PROVIDER_ROLE_NONE).

Members

LASSO_PROVIDER_ROLE_ANY

   

LASSO_PROVIDER_ROLE_NONE

unitialized value (internal use)

 

LASSO_PROVIDER_ROLE_SP

service provider.

 

LASSO_PROVIDER_ROLE_IDP

identity provider.

 

LASSO_PROVIDER_ROLE_BOTH

service&identity provider.

 

LASSO_PROVIDER_ROLE_AUTHN_AUTHORITY

an authentification authority, i.e. an endpoint able to return previously returned assertion,

 

LASSO_PROVIDER_ROLE_AUTHZ_AUTHORITY

an authorization authority, i.e. an endpoint able to return assertion providing authorization about a principal acessing a resource,

 

LASSO_PROVIDER_ROLE_ATTRIBUTE_AUTHORITY

an attribute authority, i.e. an endpoint able to return attributes aboute a principal,

 

LASSO_PROVIDER_ROLE_LAST

all values in the enumeration are guaranteed to be < to LASSO_PROVIDER_ROLE_LAST .

 

LASSO_PROVIDER_ROLE_ALL

   

enum LassoHttpMethod

Method.

Members

LASSO_HTTP_METHOD_NONE

invalid value (internal use)

 

LASSO_HTTP_METHOD_ANY

any method will do

 

LASSO_HTTP_METHOD_IDP_INITIATED

not a method, for IdP initiated profile

 

LASSO_HTTP_METHOD_GET

HTTP GET

 

LASSO_HTTP_METHOD_POST

Browser POST

 

LASSO_HTTP_METHOD_REDIRECT

HTTP-Redirect based

 

LASSO_HTTP_METHOD_SOAP

SOAP/HTTP based

 

LASSO_HTTP_METHOD_ARTIFACT_GET

Artifact by HTTP GET (SAML 2.0)

 

LASSO_HTTP_METHOD_ARTIFACT_POST

Artifact by HTTP POST (SAML 2.0)

 

LASSO_HTTP_METHOD_PAOS

PAOS/HTTP based (SAML 2.0)

 

LASSO_HTTP_METHOD_LAST

   

enum LassoMdProtocolType

Liberty Metadata Type.

Members

LASSO_MD_PROTOCOL_TYPE_FEDERATION_TERMINATION

Federation Termination Notification

 

LASSO_MD_PROTOCOL_TYPE_NAME_IDENTIFIER_MAPPING

Name Identifier Mapping

 

LASSO_MD_PROTOCOL_TYPE_REGISTER_NAME_IDENTIFIER

Name Registration

 

LASSO_MD_PROTOCOL_TYPE_SINGLE_LOGOUT

Single Logout

 

LASSO_MD_PROTOCOL_TYPE_SINGLE_SIGN_ON

Single Sign-On and Federation

 

LASSO_MD_PROTOCOL_TYPE_ARTIFACT_RESOLUTION

Artifact Resolution (SAML 2.0)

 

LASSO_MD_PROTOCOL_TYPE_MANAGE_NAME_ID

Manage Name Identifier (SAML 2.0)

 

LASSO_MD_PROTOCOL_TYPE_ASSERTION_ID_REQUEST

Assertion ID Request (SAML 2.0)

 

LASSO_MD_PROTOCOL_TYPE_AUTHN_QUERY

   

LASSO_MD_PROTOCOL_TYPE_AUTHZ

   

LASSO_MD_PROTOCOL_TYPE_ATTRIBUTE

   

LASSO_MD_PROTOCOL_TYPE_LAST

   

enum LassoProtocolConformance

Provider protocol conformance.

Members

LASSO_PROTOCOL_NONE

   

LASSO_PROTOCOL_LIBERTY_1_0

Liberty ID-FF 1.0

 

LASSO_PROTOCOL_LIBERTY_1_1

Liberty ID-FF 1.1

 

LASSO_PROTOCOL_LIBERTY_1_2

Liberty ID-FF 1.2

 

LASSO_PROTOCOL_SAML_2_0

SAML 2.0

 

enum LassoEncryptionMode

Encryption mode.

Members

LASSO_ENCRYPTION_MODE_NONE

Encrypt nothing

 

LASSO_ENCRYPTION_MODE_NAMEID

Encrypt NameIDs

 

LASSO_ENCRYPTION_MODE_ASSERTION

Encrypt Assertions

 

enum LassoEncryptionSymKeyType

Encryption symetric key type.

Members

LASSO_ENCRYPTION_SYM_KEY_TYPE_DEFAULT

Default type (AES 128)

 

LASSO_ENCRYPTION_SYM_KEY_TYPE_AES_256

Aes 256 bits key

 

LASSO_ENCRYPTION_SYM_KEY_TYPE_AES_128

Aes 128 bits key

 

LASSO_ENCRYPTION_SYM_KEY_TYPE_3DES

Triple DES 192 bits key

 

LASSO_ENCRYTPION_SYM_KEY_TYPE_LAST

   
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/home.png0000644000000000000000000000013214404126162020333 xustar0030 mtime=1678814322.925964219 30 atime=1678814322.925964219 30 ctime=1678814322.925964219 lasso-2.8.2/docs/reference/lasso/html/home.png0000644000175000017500000000040014404126162023575 0ustar00bdauvergnebdauvergne00000000000000‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEå $$ñا IDAT8ËÝÒ½ AÅñßž¦f`n v`6`/¶`Y€š˜Ü¡`f&k$,Ëá}˜ˆ ÌüßÀ0ü§bŒ+Ô¸aQW~bæ ËOà e˜{‡y N°Á£üö[LáØÌ}.pÇiÀ­÷¨BzüžÆmm Šoæ·.I]7Ì^[úÃô;%:å†ÁVIEND®B`‚lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSoapDetail.html0000644000000000000000000000013214404126163022613 xustar0030 mtime=1678814323.033964834 30 atime=1678814323.033964834 30 ctime=1678814323.033964834 lasso-2.8.2/docs/reference/lasso/html/LassoSoapDetail.html0000644000175000017500000001233314404126163026065 0ustar00bdauvergnebdauvergne00000000000000 LassoSoapDetail: lasso Reference Manual

LassoSoapDetail

LassoSoapDetail

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSoapDetail

Description

Functions

lasso_soap_detail_new ()

LassoSoapDetail *
lasso_soap_detail_new (void);

lasso_soap_detail_new_from_message ()

LassoSoapDetail *
lasso_soap_detail_new_from_message (const gchar *message);

Types and Values

struct LassoSoapDetail

struct LassoSoapDetail;
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSamlp2AuthnQuery.html0000644000000000000000000000013214404126163023752 xustar0030 mtime=1678814323.025964789 30 atime=1678814323.025964789 30 ctime=1678814323.025964789 lasso-2.8.2/docs/reference/lasso/html/LassoSamlp2AuthnQuery.html0000644000175000017500000001416714404126163027233 0ustar00bdauvergnebdauvergne00000000000000 LassoSamlp2AuthnQuery: lasso Reference Manual

LassoSamlp2AuthnQuery

LassoSamlp2AuthnQuery — <samlp2:AuthnQuery>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlp2RequestAbstract
            ╰── LassoSamlp2SubjectQueryAbstract
                ╰── LassoSamlp2AuthnQuery

Description

Figure 71. Schema fragment for samlp2:AuthnQuery


<complexType name="AuthnQueryType">
  <complexContent>
    <extension base="samlp:SubjectQueryAbstractType">
      <sequence>
        <element ref="samlp:RequestedAuthnContext" minOccurs="0"/>
      </sequence>
      <attribute name="SessionIndex" type="string" use="optional"/>
    </extension>
  </complexContent>
</complexType>

Functions

lasso_samlp2_authn_query_new ()

LassoNode *
lasso_samlp2_authn_query_new (void);

Creates a new LassoSamlp2AuthnQuery object.

Returns

a newly created LassoSamlp2AuthnQuery object

Types and Values

struct LassoSamlp2AuthnQuery

struct LassoSamlp2AuthnQuery {
	/* elements */
	LassoSamlp2RequestedAuthnContext *RequestedAuthnContext;
	/* attributes */
	char *SessionIndex;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoDefederation.html0000644000000000000000000000013214404126162023156 xustar0030 mtime=1678814322.997964629 30 atime=1678814322.997964629 30 ctime=1678814322.997964629 lasso-2.8.2/docs/reference/lasso/html/LassoDefederation.html0000644000175000017500000004065014404126162026433 0ustar00bdauvergnebdauvergne00000000000000 LassoDefederation: lasso Reference Manual

LassoDefederation

LassoDefederation — Federation Termination Notification Profile (ID-FF)

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoProfile
            ╰── LassoDefederation

Description

The Federation Termination Notification Profiles serves to suppress federations between identity providers and services providers. It can be initiated by any of the partners using Redirect or SOAP binding.

Functions

lasso_defederation_new ()

LassoDefederation *
lasso_defederation_new (LassoServer *server);

Creates a new LassoDefederation.

Parameters

server

the LassoServer

 

Returns

a newly created LassoDefederation object; or NULL if an error occured


lasso_defederation_build_notification_msg ()

lasso_error_t
lasso_defederation_build_notification_msg
                               (LassoDefederation *defederation);

Builds the federation termination notification message.

It gets the federation termination notification protocol profile and:

  • if it is a SOAP method, then it builds the federation termination notification SOAP message, optionally signs the notification node, sets msg_body, gets the SoapEndpoint url and sets msg_url of the federation termination object.

  • if it is a HTTP-Redirect method, then it builds the federation termination notification QUERY message (optionally signs the notification message), builds the federation termination notification url with federation termination service url, sets msg_url in the federation termination object, sets msg_body to NULL.

Parameters

defederation

a LassoDefederation

 

Returns

0 on success; or a negative value otherwise.


lasso_defederation_destroy ()

void
lasso_defederation_destroy (LassoDefederation *defederation);

Destroys a LassoDefederation object.

Parameters

defederation

a LassoDefederation

 

lasso_defederation_init_notification ()

lasso_error_t
lasso_defederation_init_notification (LassoDefederation *defederation,
                                      gchar *remote_providerID,
                                      LassoHttpMethod http_method);

Sets a new federation termination notification to the remote provider id with the provider id of the requester (from the server object) and the name identifier of the federated principal.

Parameters

defederation

a LassoDefederation

 

remote_providerID

the provider id of the federation termination notified provider.

 

http_method

the HTTP method to send the message.

 

Returns

0 on success; or a negative value otherwise.


lasso_defederation_process_notification_msg ()

lasso_error_t
lasso_defederation_process_notification_msg
                               (LassoDefederation *defederation,
                                gchar *notification_msg);

Processes a lib:FederationTerminationNotification message. Rebuilds a request object from the message and optionally verifies its signature.

Set the msg_nameIdentifier attribute with the NameIdentifier content of the notification object and optionally set the msg_relayState attribute with the RelayState content of the notification object.

Parameters

defederation

the federation termination object

 

notification_msg

the federation termination notification message

 

Returns

0 on success; or a negative value otherwise.


lasso_defederation_validate_notification ()

lasso_error_t
lasso_defederation_validate_notification
                               (LassoDefederation *defederation);

Checks notification with regards to message status and principal federations; update them accordingly.

Parameters

defederation

a LassoDefederation

 

Returns

0 on success; or a negative value otherwise.

Types and Values

struct LassoDefederation

struct LassoDefederation;
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSamlp2NameIDPolicy.html0000644000000000000000000000013214404126163024122 xustar0030 mtime=1678814323.025964789 30 atime=1678814323.025964789 30 ctime=1678814323.025964789 lasso-2.8.2/docs/reference/lasso/html/LassoSamlp2NameIDPolicy.html0000644000175000017500000002331314404126163027374 0ustar00bdauvergnebdauvergne00000000000000 LassoSamlp2NameIDPolicy: lasso Reference Manual

LassoSamlp2NameIDPolicy

LassoSamlp2NameIDPolicy — <samlp2:NameIDPolicy>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlp2NameIDPolicy

Description

Figure 83. Schema fragment for samlp2:NameIDPolicy


<complexType name="NameIDPolicyType">
  <attribute name="Format" type="anyURI" use="optional"/>
  <attribute name="SPNameQualifier" type="string" use="optional"/>
  <attribute name="AllowCreate" type="boolean" use="optional"/>
</complexType>

Functions

lasso_samlp2_name_id_policy_new ()

LassoNode *
lasso_samlp2_name_id_policy_new (void);

Creates a new LassoSamlp2NameIDPolicy object.

Returns

a newly created LassoSamlp2NameIDPolicy object

Types and Values

struct LassoSamlp2NameIDPolicy

struct LassoSamlp2NameIDPolicy {
	/* attributes */
	char *Format;
	char *SPNameQualifier;
	gboolean AllowCreate;
};

NameIDPolicy element is part of AuthnRequest and allows to give hint to the identity provider about the NameID the service provider desire to receive.

Members

char *Format;

the name-identifier format, see LASSO_SAML2_NAME_IDENTIFIER_FORMAT_EMAIL, LASSO_SAML2_NAME_IDENTIFIER_FORMAT_X509, LASSO_SAML2_NAME_IDENTIFIER_FORMAT_WINDOWS, LASSO_SAML2_NAME_IDENTIFIER_FORMAT_KERBEROS, LASSO_SAML2_NAME_IDENTIFIER_FORMAT_ENTITY, LASSO_SAML2_NAME_IDENTIFIER_FORMAT_PERSISTENT, LASSO_SAML2_NAME_IDENTIFIER_FORMAT_TRANSIENT or LASSO_SAML2_NAME_IDENTIFIER_FORMAT_ENCRYPTED.

 

char *SPNameQualifier;

other providerID to use as SPNameQualifier in the returned assertion. By default an IdP create a NameID for the requesting entity, this field allows to obtain a NameID qualified for a third party.

 

gboolean AllowCreate;

authorize the identity provider to create a new federation, otherwise it must report a failure in case no existing federation is found (status code of LASSO_LIB_STATUS_CODE_FEDERATION_DOES_NOT_EXIST and error code of LASSO_PROFILE_ERROR_FEDERATION_NOT_FOUND).

 
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSamlp2Extensions.html0000644000000000000000000000013214404126163024004 xustar0030 mtime=1678814323.025964789 30 atime=1678814323.025964789 30 ctime=1678814323.025964789 lasso-2.8.2/docs/reference/lasso/html/LassoSamlp2Extensions.html0000644000175000017500000001376714404126163027272 0ustar00bdauvergnebdauvergne00000000000000 LassoSamlp2Extensions: lasso Reference Manual

LassoSamlp2Extensions

LassoSamlp2Extensions — <samlp2:Extensions>

Functions

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlp2Extensions

Description

Figure 74. Schema fragment for samlp2:Extensions


<complexType name="ExtensionsType">
  <sequence>
    <any namespace="##other" processContents="lax" maxOccurs="unbounded"/>
  </sequence>
</complexType>

To specify the content of this object you must attach an xmlNode to it using lasso_node_set_original_xmlnode(). The content (attributes, children and namespaces) of this node will be copied to the result node returned by calls to lasso_node_get_xmlNode().

Functions

lasso_samlp2_extensions_new ()

LassoNode *
lasso_samlp2_extensions_new (void);

Creates a new LassoSamlp2Extensions object.

Returns

a newly created LassoSamlp2Extensions object

Types and Values

struct LassoSamlp2Extensions

struct LassoSamlp2Extensions;
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSamlp2ArtifactResponse.html0000644000000000000000000000013214404126163025121 xustar0030 mtime=1678814323.025964789 30 atime=1678814323.021964766 30 ctime=1678814323.025964789 lasso-2.8.2/docs/reference/lasso/html/LassoSamlp2ArtifactResponse.html0000644000175000017500000001402014404126163030366 0ustar00bdauvergnebdauvergne00000000000000 LassoSamlp2ArtifactResponse: lasso Reference Manual

LassoSamlp2ArtifactResponse

LassoSamlp2ArtifactResponse — <samlp2:ArtifactResponse>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlp2StatusResponse
            ╰── LassoSamlp2ArtifactResponse

Description

Figure 69. Schema fragment for samlp2:ArtifactResponse


<complexType name="ArtifactResponseType">
  <complexContent>
    <extension base="samlp:StatusResponseType">
      <sequence>
        <any namespace="##any" processContents="lax" minOccurs="0"/>
      </sequence>
    </extension>
  </complexContent>
</complexType>

Functions

lasso_samlp2_artifact_response_new ()

LassoNode *
lasso_samlp2_artifact_response_new (void);

Creates a new LassoSamlp2ArtifactResponse object.

Returns

a newly created LassoSamlp2ArtifactResponse object

Types and Values

struct LassoSamlp2ArtifactResponse

struct LassoSamlp2ArtifactResponse {
	/* elements */
	LassoNode *any;
};
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/lasso-SAML-2.0-Strings.html0000644000000000000000000000013214404126163023363 xustar0030 mtime=1678814323.045964902 30 atime=1678814323.045964902 30 ctime=1678814323.045964902 lasso-2.8.2/docs/reference/lasso/html/lasso-SAML-2.0-Strings.html0000644000175000017500000016142514404126163026644 0ustar00bdauvergnebdauvergne00000000000000 SAML 2.0 Strings: lasso Reference Manual

SAML 2.0 Strings

SAML 2.0 Strings — String constants from SAML 2.0 specifications

Stability Level

Stable, unless otherwise indicated

Types and Values

#define LASSO_SAML2_METADATA_HREF
#define LASSO_SAML2_METADATA_PREFIX
#define LASSO_SAML2_PROTOCOL_HREF
#define LASSO_SAML2_PROTOCOL_PREFIX
#define LASSO_SAML2_ASSERTION_HREF
#define LASSO_SAML2_ASSERTION_PREFIX
#define LASSO_SAML2_METADATA_BINDING_SOAP
#define LASSO_SAML2_METADATA_BINDING_REDIRECT
#define LASSO_SAML2_METADATA_BINDING_POST
#define LASSO_SAML2_METADATA_BINDING_ARTIFACT
#define LASSO_SAML2_METADATA_BINDING_PAOS
#define LASSO_SAML2_DEFLATE_ENCODING
#define LASSO_SAML2_NAME_IDENTIFIER_FORMAT_UNSPECIFIED
#define LASSO_SAML2_NAME_IDENTIFIER_FORMAT_EMAIL
#define LASSO_SAML2_NAME_IDENTIFIER_FORMAT_X509
#define LASSO_SAML2_NAME_IDENTIFIER_FORMAT_WINDOWS
#define LASSO_SAML2_NAME_IDENTIFIER_FORMAT_KERBEROS
#define LASSO_SAML2_NAME_IDENTIFIER_FORMAT_ENTITY
#define LASSO_SAML2_NAME_IDENTIFIER_FORMAT_PERSISTENT
#define LASSO_SAML2_NAME_IDENTIFIER_FORMAT_TRANSIENT
#define LASSO_SAML2_NAME_IDENTIFIER_FORMAT_ENCRYPTED
#define LASSO_SAML2_ATTRIBUTE_NAME_FORMAT_UNSPECIFIED
#define LASSO_SAML2_ATTRIBUTE_NAME_FORMAT_URI
#define LASSO_SAML2_ATTRIBUTE_NAME_FORMAT_BASIC
#define LASSO_SAML2_ACTION_NAMESPACE_RWEDC
#define LASSO_SAML2_ACTION_NAMESPACE_RWEDC_NEGATION
#define LASSO_SAML2_ACTION_NAMESPACE_GHPP
#define LASSO_SAML2_ACTION_NAMESPACE_UNIX
#define LASSO_SAML2_ACTION_RWEDC_READ
#define LASSO_SAML2_ACTION_RWEDC_WRITE
#define LASSO_SAML2_ACTION_RWEDC_EXECUTE
#define LASSO_SAML2_ACTION_RWEDC_DELETE
#define LASSO_SAML2_ACTION_RWEDC_CONTROL
#define LASSO_SAML2_ACTION_RWEDC_NEGATION
#define LASSO_SAML2_ACTION_GHPP_GET
#define LASSO_SAML2_ACTION_GHPP_HEAD
#define LASSO_SAML2_ACTION_GHPP_PUT
#define LASSO_SAML2_ACTION_GHPP_POST
#define LASSO_SAML2_CONSENT_OBTAINED
#define LASSO_SAML2_CONSENT_PRIOR
#define LASSO_SAML2_CONSENT_IMPLICIT
#define LASSO_SAML2_CONSENT_EXPLICIT
#define LASSO_SAML2_CONSENT_UNAVAILABLE
#define LASSO_SAML2_CONSENT_INAPPLICABLE
#define LASSO_SAML2_STATUS_CODE_SUCCESS
#define LASSO_SAML2_STATUS_CODE_REQUESTER
#define LASSO_SAML2_STATUS_CODE_RESPONDER
#define LASSO_SAML2_STATUS_CODE_VERSION_MISMATCH
#define LASSO_SAML2_STATUS_CODE_AUTHN_FAILED
#define LASSO_SAML2_STATUS_CODE_INVALID_ATTR_NAME
#define LASSO_SAML2_STATUS_CODE_INVALID_NAME_ID_POLICY
#define LASSO_SAML2_STATUS_CODE_NO_AUTHN_CONTEXT
#define LASSO_SAML2_STATUS_CODE_NO_AVAILABLE_IDP
#define LASSO_SAML2_STATUS_CODE_NO_PASSIVE
#define LASSO_SAML2_STATUS_CODE_NO_SUPPORTED_IDP
#define LASSO_SAML2_STATUS_CODE_PARTIAL_LOGOUT
#define LASSO_SAML2_STATUS_CODE_PROXY_COUNT_EXCEEDED
#define LASSO_SAML2_STATUS_CODE_REQUEST_DENIED
#define LASSO_SAML2_STATUS_CODE_REQUEST_UNSUPPORTED
#define LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_DEPRECATED
#define LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_TOO_HIGH
#define LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_TOO_LOW
#define LASSO_SAML2_STATUS_CODE_RESOURCE_NOT_RECOGNIZED
#define LASSO_SAML2_STATUS_CODE_TOO_MANY_RESPONSES
#define LASSO_SAML2_STATUS_CODE_UNKNOWN_ATTR_PROFILE
#define LASSO_SAML2_STATUS_CODE_UNKNOWN_PRINCIPAL
#define LASSO_SAML2_STATUS_CODE_UNSUPPORTED_BINDING
#define LASSO_SAML2_AUTHN_CONTEXT_AUTHENTICATED_TELEPHONY
#define LASSO_SAML2_AUTHN_CONTEXT_INTERNET_PROTOCOL
#define LASSO_SAML2_AUTHN_CONTEXT_INTERNET_PROTOCOL_PASSWORD
#define LASSO_SAML2_AUTHN_CONTEXT_KERBEROS
#define LASSO_SAML2_AUTHN_CONTEXT_MOBILE_ONE_FACTOR_CONTRACT
#define LASSO_SAML2_AUTHN_CONTEXT_MOBILE_ONE_FACTOR_UNREGISTERED
#define LASSO_SAML2_AUTHN_CONTEXT_MOBILE_TWO_FACTOR_CONTRACT
#define LASSO_SAML2_AUTHN_CONTEXT_MOBILE_TWO_FACTOR_UNREGISTERED
#define LASSO_SAML2_AUTHN_CONTEXT_NOMAD_TELEPHONY
#define LASSO_SAML2_AUTHN_CONTEXT_PERSONALIZED_TELEPHONY
#define LASSO_SAML2_AUTHN_CONTEXT_PGP
#define LASSO_SAML2_AUTHN_CONTEXT_PASSWORD_PROTECTED_TRANSPORT
#define LASSO_SAML2_AUTHN_CONTEXT_PASSWORD
#define LASSO_SAML2_AUTHN_CONTEXT_PREVIOUS_SESSION
#define LASSO_SAML2_AUTHN_CONTEXT_SMARTCARD
#define LASSO_SAML2_AUTHN_CONTEXT_SMARTCARD_PKI
#define LASSO_SAML2_AUTHN_CONTEXT_SOFTWARE_PKI
#define LASSO_SAML2_AUTHN_CONTEXT_SPKI
#define LASSO_SAML2_AUTHN_CONTEXT_SECURE_REMOTE_PASSWORD
#define LASSO_SAML2_AUTHN_CONTEXT_TLS_CLIENT
#define LASSO_SAML2_AUTHN_CONTEXT_X509
#define LASSO_SAML2_AUTHN_CONTEXT_TELEPHONY
#define LASSO_SAML2_AUTHN_CONTEXT_TIME_SYNC_TOKEN
#define LASSO_SAML2_AUTHN_CONTEXT_XMLDSIG
#define LASSO_SAML2_AUTHN_CONTEXT_UNSPECIFIED
#define LASSO_SAML2_CONFIRMATION_METHOD_BEARER
#define LASSO_SAML2_CONFIRMATION_METHOD_HOLDER_OF_KEY
#define LASSO_SAML2_FIELD_RESPONSE
#define LASSO_SAML2_FIELD_REQUEST
#define LASSO_SAML2_FIELD_ARTIFACT
#define LASSO_SAML2_FIELD_RELAYSTATE
#define LASSO_SAML2_FIELD_SIGNATURE
#define LASSO_SAML2_FIELD_SIGALG

Includes

#include <lasso/xml/saml-2.0/saml2_strings.h>

Description

Functions

Types and Values

LASSO_SAML2_METADATA_HREF

#define LASSO_SAML2_METADATA_HREF "urn:oasis:names:tc:SAML:2.0:metadata"

Namespace for SAML 2.0 metadata


LASSO_SAML2_METADATA_PREFIX

#define LASSO_SAML2_METADATA_PREFIX "md"

Preferred prefix for namespace of SAML 2.0 metadata


LASSO_SAML2_PROTOCOL_HREF

#define LASSO_SAML2_PROTOCOL_HREF "urn:oasis:names:tc:SAML:2.0:protocol"

Namespace for SAML 2.0 protocol.


LASSO_SAML2_PROTOCOL_PREFIX

#define LASSO_SAML2_PROTOCOL_PREFIX "samlp"

Preferred prefix for namespace of SAML 2.0 protocol


LASSO_SAML2_ASSERTION_HREF

#define LASSO_SAML2_ASSERTION_HREF "urn:oasis:names:tc:SAML:2.0:assertion"

Namespace for SAML 2.0 assertion


LASSO_SAML2_ASSERTION_PREFIX

#define LASSO_SAML2_ASSERTION_PREFIX "saml"

Preferred prefix for namespace of SAML 2.0 assertion


LASSO_SAML2_METADATA_BINDING_SOAP

#define LASSO_SAML2_METADATA_BINDING_SOAP "urn:oasis:names:tc:SAML:2.0:bindings:SOAP"

URI for the SOAP binding.


LASSO_SAML2_METADATA_BINDING_REDIRECT

#define LASSO_SAML2_METADATA_BINDING_REDIRECT "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect"

URI for the HTTP-Redirect binding.


LASSO_SAML2_METADATA_BINDING_POST

#define LASSO_SAML2_METADATA_BINDING_POST "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"

URI for the HTTP-Post binding.


LASSO_SAML2_METADATA_BINDING_ARTIFACT

#define LASSO_SAML2_METADATA_BINDING_ARTIFACT "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact"

URI for the HTTP-Artifact binding.


LASSO_SAML2_METADATA_BINDING_PAOS

#define LASSO_SAML2_METADATA_BINDING_PAOS "urn:oasis:names:tc:SAML:2.0:bindings:PAOS"

URI for the PAOS (or reverse SOAP) binding.


LASSO_SAML2_DEFLATE_ENCODING

#define LASSO_SAML2_DEFLATE_ENCODING "urn:oasis:names:tc:SAML:2.0:bindings:URL-Encoding:DEFLATE"

URI for URL-Encoding of kind DEFLATE (compress message content before encoding in the URI).


LASSO_SAML2_NAME_IDENTIFIER_FORMAT_UNSPECIFIED

#define             LASSO_SAML2_NAME_IDENTIFIER_FORMAT_UNSPECIFIED

Name identifier format for local names, or free format name.

From saml-core-2.0-os.pdf:

The interpretation of the content of the element is left to individual implementations.

LASSO_SAML2_NAME_IDENTIFIER_FORMAT_EMAIL

#define             LASSO_SAML2_NAME_IDENTIFIER_FORMAT_EMAIL

Name identifier format for email addresses.

From saml-core-2.0-os.pdf:

Indicates that the content of the element is in the form of an email address, specifically "addr-spec" as defined in IETF RFC 2822 [RFC 2822] Section 3.4.1. An addr-spec has the form local-partdomain. Note that an addr-spec has no phrase (such as a common name) before it, has no comment (text surrounded in parentheses) after it, and is not surrounded by "<" and ">".

LASSO_SAML2_NAME_IDENTIFIER_FORMAT_X509

#define             LASSO_SAML2_NAME_IDENTIFIER_FORMAT_X509

LASSO_SAML2_NAME_IDENTIFIER_FORMAT_WINDOWS

#define             LASSO_SAML2_NAME_IDENTIFIER_FORMAT_WINDOWS

LASSO_SAML2_NAME_IDENTIFIER_FORMAT_KERBEROS

#define             LASSO_SAML2_NAME_IDENTIFIER_FORMAT_KERBEROS

LASSO_SAML2_NAME_IDENTIFIER_FORMAT_ENTITY

#define             LASSO_SAML2_NAME_IDENTIFIER_FORMAT_ENTITY

Name identifier format for SAML 2.0 entities, i.e. identity and service providers.

From saml-core-2.0-os.pdf:

Indicates that the content of the element is the identifier of an entity that provides SAML-based services (such as a SAML authority, requester, or responder) or is a participant in SAML profiles (such as a service provider supporting the browser SSO profile). Such an identifier can be used in the <Issuer> element to identify the issuer of a SAML request, response, or assertion, or within the <NameID> element to make assertions about system entities that can issue SAML requests, responses, and assertions. It can also be used in other elements and attributes whose purpose is to identify a system entity in various protocol exchanges.

The syntax of such an identifier is a URI of not more than 1024 characters in length. It is RECOMMENDED that a system entity use a URL containing its own domain name to identify itself.

The NameQualifier, SPNameQualifier, and SPProvidedID attributes MUST be omitted.


LASSO_SAML2_NAME_IDENTIFIER_FORMAT_PERSISTENT

#define             LASSO_SAML2_NAME_IDENTIFIER_FORMAT_PERSISTENT

Name identifier format for SAML 2.0 federation.


LASSO_SAML2_NAME_IDENTIFIER_FORMAT_TRANSIENT

#define             LASSO_SAML2_NAME_IDENTIFIER_FORMAT_TRANSIENT

Name identifier format for temporary SAML 2.0 federation.


LASSO_SAML2_NAME_IDENTIFIER_FORMAT_ENCRYPTED

#define             LASSO_SAML2_NAME_IDENTIFIER_FORMAT_ENCRYPTED

LASSO_SAML2_ATTRIBUTE_NAME_FORMAT_UNSPECIFIED

#define LASSO_SAML2_ATTRIBUTE_NAME_FORMAT_UNSPECIFIED "urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified"

Attribute format whose interpretation is left to individual implementations.


LASSO_SAML2_ATTRIBUTE_NAME_FORMAT_URI

#define LASSO_SAML2_ATTRIBUTE_NAME_FORMAT_URI "urn:oasis:names:tc:SAML:2.0:attrname-format:uri"

From saml-core-2.0-os.pdf:

The attribute name follows the convention for URI references [RFC 2396], for example as used in XACML attribute identifiers. The interpretation of the URI content or naming scheme is application- specific. See [SAMLProf] for attribute profiles that make use of this identifier.

LASSO_SAML2_ATTRIBUTE_NAME_FORMAT_BASIC

#define LASSO_SAML2_ATTRIBUTE_NAME_FORMAT_BASIC "urn:oasis:names:tc:SAML:2.0:attrname-format:basic"

Attribute format whose names are in the xs:Name domain.


LASSO_SAML2_ACTION_NAMESPACE_RWEDC

#define LASSO_SAML2_ACTION_NAMESPACE_RWEDC "urn:oasis:names:tc:SAML:1.0:action:rwedc"

Namespace for actions among: Read, Write, Execute, Delete and Control.


LASSO_SAML2_ACTION_NAMESPACE_RWEDC_NEGATION

#define LASSO_SAML2_ACTION_NAMESPACE_RWEDC_NEGATION "urn:oasis:names:tc:SAML:1.0:action:rwedc-negation"

Namespace for actions among: Read, Write, Execute, Delete and Control and their negations, ~Read, ~Write, ~Execute, ~Delete, ~Control.


LASSO_SAML2_ACTION_NAMESPACE_GHPP

#define LASSO_SAML2_ACTION_NAMESPACE_GHPP "urn:oasis:names:tc:SAML:1.0:action:ghpp"

Namespace for actions among: GET, HEAD, PUT, POST.


LASSO_SAML2_ACTION_NAMESPACE_UNIX

#define LASSO_SAML2_ACTION_NAMESPACE_UNIX "urn:oasis:names:tc:SAML:1.0:action:unix"

Namespace for actions represented by a four digit numeric code in octal value, as Unix file permissions codes.


LASSO_SAML2_ACTION_RWEDC_READ

#define LASSO_SAML2_ACTION_RWEDC_READ "Read"

LASSO_SAML2_ACTION_RWEDC_WRITE

#define LASSO_SAML2_ACTION_RWEDC_WRITE "Write"

LASSO_SAML2_ACTION_RWEDC_EXECUTE

#define LASSO_SAML2_ACTION_RWEDC_EXECUTE "Execute"

LASSO_SAML2_ACTION_RWEDC_DELETE

#define LASSO_SAML2_ACTION_RWEDC_DELETE "Delete"

LASSO_SAML2_ACTION_RWEDC_CONTROL

#define LASSO_SAML2_ACTION_RWEDC_CONTROL "Control"

LASSO_SAML2_ACTION_RWEDC_NEGATION

#define LASSO_SAML2_ACTION_RWEDC_NEGATION "~"

LASSO_SAML2_ACTION_GHPP_GET

#define LASSO_SAML2_ACTION_GHPP_GET "GET"

LASSO_SAML2_ACTION_GHPP_HEAD

#define LASSO_SAML2_ACTION_GHPP_HEAD "HEAD"

LASSO_SAML2_ACTION_GHPP_PUT

#define LASSO_SAML2_ACTION_GHPP_PUT "PUT"

LASSO_SAML2_ACTION_GHPP_POST

#define LASSO_SAML2_ACTION_GHPP_POST "POST"

LASSO_SAML2_CONSENT_OBTAINED

#define LASSO_SAML2_CONSENT_OBTAINED "urn:oasis:names:tc:SAML:2.0:consent:obtained"

LASSO_SAML2_CONSENT_PRIOR

#define LASSO_SAML2_CONSENT_PRIOR "urn:oasis:names:tc:SAML:2.0:consent:prior"

LASSO_SAML2_CONSENT_IMPLICIT

#define LASSO_SAML2_CONSENT_IMPLICIT "urn:oasis:names:tc:SAML:2.0:consent:current-implicit"

LASSO_SAML2_CONSENT_EXPLICIT

#define LASSO_SAML2_CONSENT_EXPLICIT "urn:oasis:names:tc:SAML:2.0:consent:current-explicit"

LASSO_SAML2_CONSENT_UNAVAILABLE

#define LASSO_SAML2_CONSENT_UNAVAILABLE "urn:oasis:names:tc:SAML:2.0:consent:unavailable"

LASSO_SAML2_CONSENT_INAPPLICABLE

#define LASSO_SAML2_CONSENT_INAPPLICABLE "urn:oasis:names:tc:SAML:2.0:consent:inapplicable"

LASSO_SAML2_STATUS_CODE_SUCCESS

#define LASSO_SAML2_STATUS_CODE_SUCCESS "urn:oasis:names:tc:SAML:2.0:status:Success"

LASSO_SAML2_STATUS_CODE_REQUESTER

#define LASSO_SAML2_STATUS_CODE_REQUESTER "urn:oasis:names:tc:SAML:2.0:status:Requester"

LASSO_SAML2_STATUS_CODE_RESPONDER

#define LASSO_SAML2_STATUS_CODE_RESPONDER "urn:oasis:names:tc:SAML:2.0:status:Responder"

LASSO_SAML2_STATUS_CODE_VERSION_MISMATCH

#define             LASSO_SAML2_STATUS_CODE_VERSION_MISMATCH

LASSO_SAML2_STATUS_CODE_AUTHN_FAILED

#define LASSO_SAML2_STATUS_CODE_AUTHN_FAILED "urn:oasis:names:tc:SAML:2.0:status:AuthnFailed"

LASSO_SAML2_STATUS_CODE_INVALID_ATTR_NAME

#define             LASSO_SAML2_STATUS_CODE_INVALID_ATTR_NAME

LASSO_SAML2_STATUS_CODE_INVALID_NAME_ID_POLICY

#define             LASSO_SAML2_STATUS_CODE_INVALID_NAME_ID_POLICY

LASSO_SAML2_STATUS_CODE_NO_AUTHN_CONTEXT

#define             LASSO_SAML2_STATUS_CODE_NO_AUTHN_CONTEXT

LASSO_SAML2_STATUS_CODE_NO_AVAILABLE_IDP

#define             LASSO_SAML2_STATUS_CODE_NO_AVAILABLE_IDP

LASSO_SAML2_STATUS_CODE_NO_PASSIVE

#define             LASSO_SAML2_STATUS_CODE_NO_PASSIVE

LASSO_SAML2_STATUS_CODE_NO_SUPPORTED_IDP

#define             LASSO_SAML2_STATUS_CODE_NO_SUPPORTED_IDP

LASSO_SAML2_STATUS_CODE_PARTIAL_LOGOUT

#define             LASSO_SAML2_STATUS_CODE_PARTIAL_LOGOUT

LASSO_SAML2_STATUS_CODE_PROXY_COUNT_EXCEEDED

#define             LASSO_SAML2_STATUS_CODE_PROXY_COUNT_EXCEEDED

LASSO_SAML2_STATUS_CODE_REQUEST_DENIED

#define             LASSO_SAML2_STATUS_CODE_REQUEST_DENIED

LASSO_SAML2_STATUS_CODE_REQUEST_UNSUPPORTED

#define             LASSO_SAML2_STATUS_CODE_REQUEST_UNSUPPORTED

LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_DEPRECATED

#define             LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_DEPRECATED

LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_TOO_HIGH

#define             LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_TOO_HIGH

LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_TOO_LOW

#define             LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_TOO_LOW

LASSO_SAML2_STATUS_CODE_RESOURCE_NOT_RECOGNIZED

#define             LASSO_SAML2_STATUS_CODE_RESOURCE_NOT_RECOGNIZED

LASSO_SAML2_STATUS_CODE_TOO_MANY_RESPONSES

#define             LASSO_SAML2_STATUS_CODE_TOO_MANY_RESPONSES

LASSO_SAML2_STATUS_CODE_UNKNOWN_ATTR_PROFILE

#define             LASSO_SAML2_STATUS_CODE_UNKNOWN_ATTR_PROFILE

LASSO_SAML2_STATUS_CODE_UNKNOWN_PRINCIPAL

#define             LASSO_SAML2_STATUS_CODE_UNKNOWN_PRINCIPAL

LASSO_SAML2_STATUS_CODE_UNSUPPORTED_BINDING

#define             LASSO_SAML2_STATUS_CODE_UNSUPPORTED_BINDING

LASSO_SAML2_AUTHN_CONTEXT_AUTHENTICATED_TELEPHONY

#define             LASSO_SAML2_AUTHN_CONTEXT_AUTHENTICATED_TELEPHONY

LASSO_SAML2_AUTHN_CONTEXT_INTERNET_PROTOCOL

#define             LASSO_SAML2_AUTHN_CONTEXT_INTERNET_PROTOCOL

LASSO_SAML2_AUTHN_CONTEXT_INTERNET_PROTOCOL_PASSWORD

#define             LASSO_SAML2_AUTHN_CONTEXT_INTERNET_PROTOCOL_PASSWORD

LASSO_SAML2_AUTHN_CONTEXT_KERBEROS

#define             LASSO_SAML2_AUTHN_CONTEXT_KERBEROS

LASSO_SAML2_AUTHN_CONTEXT_MOBILE_ONE_FACTOR_CONTRACT

#define             LASSO_SAML2_AUTHN_CONTEXT_MOBILE_ONE_FACTOR_CONTRACT

LASSO_SAML2_AUTHN_CONTEXT_MOBILE_ONE_FACTOR_UNREGISTERED

#define             LASSO_SAML2_AUTHN_CONTEXT_MOBILE_ONE_FACTOR_UNREGISTERED

LASSO_SAML2_AUTHN_CONTEXT_MOBILE_TWO_FACTOR_CONTRACT

#define             LASSO_SAML2_AUTHN_CONTEXT_MOBILE_TWO_FACTOR_CONTRACT

LASSO_SAML2_AUTHN_CONTEXT_MOBILE_TWO_FACTOR_UNREGISTERED

#define             LASSO_SAML2_AUTHN_CONTEXT_MOBILE_TWO_FACTOR_UNREGISTERED

LASSO_SAML2_AUTHN_CONTEXT_NOMAD_TELEPHONY

#define             LASSO_SAML2_AUTHN_CONTEXT_NOMAD_TELEPHONY

LASSO_SAML2_AUTHN_CONTEXT_PERSONALIZED_TELEPHONY

#define             LASSO_SAML2_AUTHN_CONTEXT_PERSONALIZED_TELEPHONY

LASSO_SAML2_AUTHN_CONTEXT_PGP

#define             LASSO_SAML2_AUTHN_CONTEXT_PGP

LASSO_SAML2_AUTHN_CONTEXT_PASSWORD_PROTECTED_TRANSPORT

#define             LASSO_SAML2_AUTHN_CONTEXT_PASSWORD_PROTECTED_TRANSPORT

LASSO_SAML2_AUTHN_CONTEXT_PASSWORD

#define             LASSO_SAML2_AUTHN_CONTEXT_PASSWORD

LASSO_SAML2_AUTHN_CONTEXT_PREVIOUS_SESSION

#define             LASSO_SAML2_AUTHN_CONTEXT_PREVIOUS_SESSION

LASSO_SAML2_AUTHN_CONTEXT_SMARTCARD

#define             LASSO_SAML2_AUTHN_CONTEXT_SMARTCARD

LASSO_SAML2_AUTHN_CONTEXT_SMARTCARD_PKI

#define             LASSO_SAML2_AUTHN_CONTEXT_SMARTCARD_PKI

LASSO_SAML2_AUTHN_CONTEXT_SOFTWARE_PKI

#define             LASSO_SAML2_AUTHN_CONTEXT_SOFTWARE_PKI

LASSO_SAML2_AUTHN_CONTEXT_SPKI

#define             LASSO_SAML2_AUTHN_CONTEXT_SPKI

LASSO_SAML2_AUTHN_CONTEXT_SECURE_REMOTE_PASSWORD

#define             LASSO_SAML2_AUTHN_CONTEXT_SECURE_REMOTE_PASSWORD

LASSO_SAML2_AUTHN_CONTEXT_TLS_CLIENT

#define             LASSO_SAML2_AUTHN_CONTEXT_TLS_CLIENT

LASSO_SAML2_AUTHN_CONTEXT_X509

#define             LASSO_SAML2_AUTHN_CONTEXT_X509

LASSO_SAML2_AUTHN_CONTEXT_TELEPHONY

#define             LASSO_SAML2_AUTHN_CONTEXT_TELEPHONY

LASSO_SAML2_AUTHN_CONTEXT_TIME_SYNC_TOKEN

#define             LASSO_SAML2_AUTHN_CONTEXT_TIME_SYNC_TOKEN

LASSO_SAML2_AUTHN_CONTEXT_XMLDSIG

#define             LASSO_SAML2_AUTHN_CONTEXT_XMLDSIG

LASSO_SAML2_AUTHN_CONTEXT_UNSPECIFIED

#define             LASSO_SAML2_AUTHN_CONTEXT_UNSPECIFIED

LASSO_SAML2_CONFIRMATION_METHOD_BEARER

#define LASSO_SAML2_CONFIRMATION_METHOD_BEARER "urn:oasis:names:tc:SAML:2.0:cm:bearer"

LASSO_SAML2_CONFIRMATION_METHOD_HOLDER_OF_KEY

#define LASSO_SAML2_CONFIRMATION_METHOD_HOLDER_OF_KEY "urn:oasis:names:tc:SAML:2.0:cm:holder-of-key"

LASSO_SAML2_FIELD_RESPONSE

#define LASSO_SAML2_FIELD_RESPONSE "SAMLResponse"

LASSO_SAML2_FIELD_REQUEST

#define LASSO_SAML2_FIELD_REQUEST "SAMLRequest"

LASSO_SAML2_FIELD_ARTIFACT

#define LASSO_SAML2_FIELD_ARTIFACT "SAMLart"

LASSO_SAML2_FIELD_RELAYSTATE

#define LASSO_SAML2_FIELD_RELAYSTATE "RelayState"

LASSO_SAML2_FIELD_SIGNATURE

#define LASSO_SAML2_FIELD_SIGNATURE "Signature"

LASSO_SAML2_FIELD_SIGALG

#define LASSO_SAML2_FIELD_SIGALG "SigAlg"
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/xml-idff.html0000644000000000000000000000013214404126163021272 xustar0030 mtime=1678814323.049964926 30 atime=1678814323.049964926 30 ctime=1678814323.049964926 lasso-2.8.2/docs/reference/lasso/html/xml-idff.html0000644000175000017500000002406614404126163024552 0ustar00bdauvergnebdauvergne00000000000000 Objects from ID-FF 1.2 schemas: lasso Reference Manual

Objects from ID-FF 1.2 schemas

Strings for ID-FF 1.2
LassoLibAssertion — <lib:Assertion>
LassoLibAuthenticationStatement — <lib:AuthenticationStatement>
LassoLibAuthnContext — <lib:AuthnContext>
LassoLibAuthnRequestEnvelope — <lib:AuthnRequestEnvelope>
LassoLibAuthnRequest — <lib:AuthnRequest>
LassoLibAuthnResponseEnvelope — <lib:AuthnResponseEnvelope>
LassoLibAuthnResponse — <lib:AuthnResponse>
LassoLibFederationTerminationNotification — <lib:FederationTerminationNotification>
LassoLibIDPEntries — <lib:IDPEntries>
LassoLibIDPEntry — <lib:IDPEntry>
LassoLibIDPList — <lib:IDPList>
LassoLibLogoutRequest — <lib:LogoutRequest>
LassoLibLogoutResponse — <lib:LogoutResponse>
LassoLibNameIdentifierMappingRequest — <lib:NameIdentifierMappingRequest>
LassoLibNameIdentifierMappingResponse — <lib:NameIdentifierMappingResponse>
LassoLibRegisterNameIdentifierRequest — <lib:RegisterNameIdentifierRequest>
LassoLibRegisterNameIdentifierResponse — <lib:RegisterNameIdentifierResponse>
LassoLibRequestAuthnContext — <lib:RequestAuthnContext>
LassoLibScoping — <lib:Scoping>
LassoLibStatusResponse — <lib:StatusResponse>
LassoLibSubject — <lib:Subject>
LassoPaosRequest — <paos:Request>
LassoPaosResponse — <paos:Response>
LassoSamlAdvice — <saml:Advice>
LassoSamlAssertion — <saml:Assertion>
LassoSamlAttributeDesignator — object mapping for a saml:AttributeDesignator
LassoSamlAttributeStatement — object mapping for a saml:AttributeStatement
LassoSamlAttributeValue — value of an attribute in SAML 1.0/1.1 assertion
LassoSamlAttribute
LassoSamlAudienceRestrictionCondition
LassoSamlAuthenticationStatement — <saml:AuthenticationStatement>
LassoSamlAuthorityBinding — <saml:AuthorityBinding>
LassoSamlConditionAbstract — <:saml:ConditionAbstract>
LassoSamlConditions — <saml:Conditions>
LassoSamlNameIdentifier — <saml:NameIdentifier>
LassoSamlpRequestAbstract — <samlp:RequestAbstractType>
LassoSamlpRequest — <samlp:Request>
LassoSamlpResponseAbstract — <samlp:ResponseAbstractType>
LassoSamlpResponse — <samlp:Response>
LassoSamlpStatusCode — <samlp:StatusCode>
LassoSamlpStatus — <samlp:Status>
LassoSamlStatementAbstract — <saml:StatementAbstract>
LassoSamlSubjectConfirmation — <saml:SubjectConfirmation>
LassoSamlSubjectLocality — <saml:SubjectLocality>
LassoSamlSubjectStatementAbstract — <saml:SubjectStatementAbstractType>
LassoSamlSubjectStatement
LassoSamlSubject — <saml:Subject>
lasso-2.8.2/docs/reference/lasso/html/PaxHeaders/LassoSamlp2SubjectQueryAbstract.html0000644000000000000000000000013214404126163025756 xustar0030 mtime=1678814323.029964812 30 atime=1678814323.029964812 30 ctime=1678814323.029964812 lasso-2.8.2/docs/reference/lasso/html/LassoSamlp2SubjectQueryAbstract.html0000644000175000017500000001524014404126163031230 0ustar00bdauvergnebdauvergne00000000000000 LassoSamlp2SubjectQueryAbstract: lasso Reference Manual

LassoSamlp2SubjectQueryAbstract

LassoSamlp2SubjectQueryAbstract — <samlp2:SubjectQueryAbstract>

Types and Values

Object Hierarchy

    GObject
    ╰── LassoNode
        ╰── LassoSamlp2RequestAbstract
            ╰── LassoSamlp2SubjectQueryAbstract
                ├── LassoSamlp2AttributeQuery
                ├── LassoSamlp2AuthnQuery
                ╰── LassoSamlp2AuthzDecisionQuery

Description

Figure 92. Schema fragment for samlp2:SubjectQueryAbstract


<complexType name="SubjectQueryAbstractType" abstract="true">
  <complexContent>
    <extension base="samlp:RequestAbstractType">
      <sequence>
        <element ref="saml:Subject"/>
      </sequence>
    </extension>
  </complexContent>
</complexType>

Functions

lasso_samlp2_subject_query_abstract_new ()

LassoNode *
lasso_samlp2_subject_query_abstract_new
                               (void);

Creates a new LassoSamlp2SubjectQueryAbstract object.

Returns

a newly created LassoSamlp2SubjectQueryAbstract object

Types and Values

struct LassoSamlp2SubjectQueryAbstract

struct LassoSamlp2SubjectQueryAbstract {
	/* elements */
	LassoSaml2Subject *Subject;
};
lasso-2.8.2/docs/reference/lasso/PaxHeaders/style.css0000644000000000000000000000013213766621500017611 xustar0030 mtime=1608196928.766895334 30 atime=1678098073.269514781 30 ctime=1678814322.901964082 lasso-2.8.2/docs/reference/lasso/style.css0000644000175000017500000000171013766621500023060 0ustar00bdauvergnebdauvergne00000000000000/* modified from gtk-doc style.css */ body { margin: 0 8em; padding: 0; } .synopsis, .classsynopsis, .programlisting { padding: 6px; -moz-border-radius: 8px; background-color: #F6F6F6; border: solid 1px #DDDDDD; color: #222; } .variablelist { padding: 4px; margin-left: 3em; } .variablelist td:first-child { vertical-align: top; } table.navigation { background-color: #BD2C4A; border: 1px solid #000000; color: white; margin: 1em 0 1ex 0; } .navigation a { color: white; } .navigation a:visited { color: #770000; } .navigation .title { font-size: 200%; } div.refnamediv { margin-top: 2em; } div.gallery-float { float: left; padding: 10px; } div.gallery-float img { border-style: none; } div.gallery-spacer { clear: both; } a { text-decoration: none; } a:hover { text-decoration: underline; } table.navigation th { padding: 0.4ex 0; font-size: 150%; } p.releaseinfo { font-weight: bold; } lasso-2.8.2/docs/reference/lasso/PaxHeaders/lasso-sections.txt0000644000000000000000000000013214404126162021440 xustar0030 mtime=1678814322.941964311 30 atime=1678814303.033851044 30 ctime=1678814322.941964311 lasso-2.8.2/docs/reference/lasso/lasso-sections.txt0000644000175000017500000022373214404126162024721 0ustar00bdauvergnebdauvergne00000000000000
utilities Utilities
server LassoServer LassoServer lasso_server_new lasso_server_new_from_buffers lasso_server_new_from_dump lasso_server_add_provider lasso_server_add_provider2 lasso_server_add_provider_from_buffer lasso_server_load_metadata lasso_server_destroy lasso_server_dump lasso_server_get_provider lasso_server_set_encryption_private_key lasso_server_set_encryption_private_key_with_password lasso_server_load_affiliation lasso_server_get_endpoint_url_by_id lasso_server_get_filtered_provider_list lasso_server_saml2_assertion_setup_signature LASSO_SERVER LASSO_IS_SERVER LASSO_TYPE_SERVER lasso_server_get_type LASSO_SERVER_CLASS LASSO_IS_SERVER_CLASS LASSO_SERVER_GET_CLASS
defederation LassoDefederation LassoDefederation lasso_defederation_new lasso_defederation_build_notification_msg lasso_defederation_destroy lasso_defederation_init_notification lasso_defederation_process_notification_msg lasso_defederation_validate_notification LASSO_DEFEDERATION LASSO_IS_DEFEDERATION LASSO_TYPE_DEFEDERATION lasso_defederation_get_type LASSO_DEFEDERATION_CLASS LASSO_IS_DEFEDERATION_CLASS LASSO_DEFEDERATION_GET_CLASS
name_registration LassoNameRegistration LassoNameRegistration lasso_name_registration_new lasso_name_registration_new_from_dump lasso_name_registration_build_request_msg lasso_name_registration_build_response_msg lasso_name_registration_destroy lasso_name_registration_dump lasso_name_registration_init_request lasso_name_registration_process_request_msg lasso_name_registration_process_response_msg lasso_name_registration_validate_request LASSO_NAME_REGISTRATION LASSO_IS_NAME_REGISTRATION LASSO_TYPE_NAME_REGISTRATION lasso_name_registration_get_type LASSO_NAME_REGISTRATION_CLASS LASSO_IS_NAME_REGISTRATION_CLASS LASSO_NAME_REGISTRATION_GET_CLASS
profile LassoProfile LassoProfile LassoRequestType LassoProfileSignatureHint LassoProfileSignatureVerifyHint lasso_profile_get_request_type_from_soap_msg lasso_profile_set_soap_fault_response lasso_profile_is_liberty_query lasso_profile_get_identity lasso_profile_get_session lasso_profile_is_identity_dirty lasso_profile_is_session_dirty lasso_profile_set_identity_from_dump lasso_profile_set_session_from_dump lasso_profile_get_nameIdentifier lasso_profile_get_artifact lasso_profile_get_artifact_message lasso_profile_set_artifact_message lasso_profile_get_server lasso_profile_set_signature_hint lasso_profile_get_signature_hint lasso_profile_set_signature_verify_hint lasso_profile_get_signature_verify_hint lasso_profile_sso_role_with lasso_profile_get_signature_status LASSO_PROFILE LASSO_IS_PROFILE LASSO_TYPE_PROFILE lasso_profile_get_type LASSO_PROFILE_CLASS LASSO_IS_PROFILE_CLASS LASSO_PROFILE_GET_CLASS
identity LassoIdentity LassoIdentity lasso_identity_new lasso_identity_new_from_dump lasso_identity_get_federation lasso_identity_destroy lasso_identity_dump LASSO_IDENTITY LASSO_IS_IDENTITY LASSO_TYPE_IDENTITY lasso_identity_get_type LASSO_IDENTITY_CLASS LASSO_IS_IDENTITY_CLASS LASSO_IDENTITY_GET_CLASS
provider LassoProvider LassoProvider lasso_provider_new LassoProviderRole lasso_provider_new_from_buffer lasso_provider_get_assertion_consumer_service_url lasso_provider_get_metadata_one lasso_provider_get_metadata_list lasso_provider_new_from_dump lasso_provider_get_first_http_method lasso_provider_accept_http_method LassoHttpMethod LassoMdProtocolType lasso_provider_has_protocol_profile lasso_provider_get_base64_succinct_id lasso_provider_get_organization lasso_provider_get_protocol_conformance LassoProtocolConformance lasso_provider_get_encryption_mode lasso_provider_set_encryption_mode LassoEncryptionMode lasso_provider_set_encryption_sym_key_type LassoEncryptionSymKeyType lasso_provider_verify_single_node_signature lasso_provider_get_default_name_id_format lasso_provider_get_sp_name_qualifier lasso_provider_get_idp_supported_attributes lasso_provider_get_valid_until lasso_provider_get_cache_duration lasso_provider_get_metadata_one_for_role lasso_provider_get_metadata_list_for_role lasso_provider_get_metadata_keys_for_role lasso_provider_get_roles lasso_provider_match_conformance lasso_provider_set_protocol_conformance LASSO_PROVIDER LASSO_IS_PROVIDER LASSO_TYPE_PROVIDER lasso_provider_get_type LASSO_PROVIDER_CLASS LASSO_IS_PROVIDER_CLASS LASSO_PROVIDER_GET_CLASS
session LassoSession LassoSession lasso_session_new lasso_session_new_from_dump lasso_session_dump lasso_session_destroy lasso_session_get_assertions lasso_session_get_assertion lasso_session_remove_assertion lasso_session_add_assertion lasso_session_get_provider_index lasso_session_is_empty LASSO_SESSION LASSO_IS_SESSION LASSO_TYPE_SESSION lasso_session_get_type LASSO_SESSION_CLASS LASSO_IS_SESSION_CLASS LASSO_SESSION_GET_CLASS
lecp LassoLecp LassoLecp lasso_lecp_new lasso_lecp_build_authn_request_envelope_msg lasso_lecp_build_authn_request_msg lasso_lecp_build_authn_response_msg lasso_lecp_build_authn_response_envelope_msg lasso_lecp_destroy lasso_lecp_init_authn_request lasso_lecp_process_authn_request_msg lasso_lecp_process_authn_request_envelope_msg lasso_lecp_process_authn_response_envelope_msg LASSO_LECP LASSO_IS_LECP LASSO_TYPE_LECP lasso_lecp_get_type LASSO_LECP_CLASS LASSO_IS_LECP_CLASS LASSO_LECP_GET_CLASS
login LassoLogin LassoLogin lasso_login_new lasso_login_new_from_dump lasso_login_accept_sso lasso_login_build_artifact_msg lasso_login_build_assertion lasso_login_build_authn_request_msg lasso_login_build_authn_response_msg lasso_login_build_request_msg lasso_login_build_response_msg lasso_login_destroy lasso_login_dump lasso_login_get_assertion lasso_login_init_authn_request lasso_login_init_idp_initiated_authn_request lasso_login_init_request lasso_login_must_ask_for_consent lasso_login_must_authenticate lasso_login_process_authn_request_msg lasso_login_process_authn_response_msg lasso_login_process_paos_response_msg lasso_login_process_request_msg lasso_login_process_response_msg lasso_login_validate_request_msg LASSO_LOGIN LASSO_IS_LOGIN LASSO_TYPE_LOGIN lasso_login_get_type LASSO_LOGIN_CLASS LASSO_IS_LOGIN_CLASS LASSO_LOGIN_GET_CLASS
federation LassoFederation LassoFederation lasso_federation_new lasso_federation_build_local_name_identifier lasso_federation_destroy lasso_federation_verify_name_identifier LASSO_FEDERATION LASSO_IS_FEDERATION LASSO_TYPE_FEDERATION lasso_federation_get_type LASSO_FEDERATION_CLASS LASSO_IS_FEDERATION_CLASS LASSO_FEDERATION_GET_CLASS
logout LassoLogout LassoLogout lasso_logout_new lasso_logout_new_from_dump lasso_logout_build_request_msg lasso_logout_build_response_msg lasso_logout_destroy lasso_logout_dump lasso_logout_get_next_providerID lasso_logout_init_request lasso_logout_process_request_msg lasso_logout_process_response_msg lasso_logout_reset_providerID_index lasso_logout_validate_request LASSO_LOGOUT LASSO_IS_LOGOUT LASSO_TYPE_LOGOUT lasso_logout_get_type LASSO_LOGOUT_CLASS LASSO_IS_LOGOUT_CLASS LASSO_LOGOUT_GET_CLASS
name_identifier_mapping LassoNameIdentifierMapping LassoNameIdentifierMapping lasso_name_identifier_mapping_new lasso_name_identifier_mapping_build_request_msg lasso_name_identifier_mapping_build_response_msg lasso_name_identifier_mapping_destroy lasso_name_identifier_mapping_init_request lasso_name_identifier_mapping_process_request_msg lasso_name_identifier_mapping_process_response_msg lasso_name_identifier_mapping_validate_request LASSO_NAME_IDENTIFIER_MAPPING LASSO_IS_NAME_IDENTIFIER_MAPPING LASSO_TYPE_NAME_IDENTIFIER_MAPPING lasso_name_identifier_mapping_get_type LASSO_NAME_IDENTIFIER_MAPPING_CLASS LASSO_IS_NAME_IDENTIFIER_MAPPING_CLASS LASSO_NAME_IDENTIFIER_MAPPING_GET_CLASS
authentication LassoUserAccount LassoSaslMechanisms LassoAuthentication LassoAuthentication lasso_authentication_new lasso_authentication_destroy lasso_authentication_client_start lasso_authentication_client_step lasso_authentication_get_mechanism_list lasso_authentication_init_request lasso_authentication_process_request_msg lasso_authentication_process_response_msg lasso_authentication_server_start lasso_authentication_server_step LASSO_AUTHENTICATION LASSO_IS_AUTHENTICATION LASSO_TYPE_AUTHENTICATION lasso_authentication_get_type LASSO_AUTHENTICATION_CLASS LASSO_IS_AUTHENTICATION_CLASS LASSO_AUTHENTICATION_GET_CLASS
personal_profile_service LassoPersonalProfileService LassoPersonalProfileService lasso_personal_profile_service_new lasso_personal_profile_service_new_full lasso_personal_profile_service_get_email LASSO_PERSONAL_PROFILE_SERVICE LASSO_IS_PERSONAL_PROFILE_SERVICE LASSO_TYPE_PERSONAL_PROFILE_SERVICE lasso_personal_profile_service_get_type LASSO_PERSONAL_PROFILE_SERVICE_CLASS LASSO_IS_PERSONAL_PROFILE_SERVICE_CLASS LASSO_PERSONAL_PROFILE_SERVICE_GET_CLASS
interaction_profile_service LassoInteractionProfileService LassoInteractionProfileService lasso_interaction_profile_service_new lasso_interaction_profile_service_init_request lasso_interaction_profile_service_process_request_msg lasso_interaction_profile_service_process_response_msg LASSO_INTERACTION_PROFILE_SERVICE LASSO_IS_INTERACTION_PROFILE_SERVICE LASSO_TYPE_INTERACTION_PROFILE_SERVICE lasso_interaction_profile_service_get_type LASSO_INTERACTION_PROFILE_SERVICE_CLASS LASSO_IS_INTERACTION_PROFILE_SERVICE_CLASS LASSO_INTERACTION_PROFILE_SERVICE_GET_CLASS
data_service LassoDataService LassoDataService lasso_data_service_new lasso_data_service_new_full lasso_data_service_init_query lasso_data_service_add_query_item lasso_data_service_build_modify_response_msg lasso_data_service_build_response_msg lasso_data_service_process_query_response_msg lasso_data_service_get_answer lasso_data_service_get_answers lasso_data_service_get_answers_by_select lasso_data_service_get_answers_by_item_id lasso_data_service_init_modify lasso_data_service_add_modification lasso_data_service_process_modify_response_msg lasso_data_service_process_request_msg lasso_data_service_validate_request lasso_data_service_build_query_response_msg lasso_data_service_get_query_item lasso_data_service_set_resource_data lasso_data_service_get_resource_data LASSO_DATA_SERVICE LASSO_IS_DATA_SERVICE LASSO_TYPE_DATA_SERVICE lasso_data_service_get_type LASSO_DATA_SERVICE_CLASS LASSO_IS_DATA_SERVICE_CLASS LASSO_DATA_SERVICE_GET_CLASS
discovery LassoDiscovery LassoDiscovery lasso_discovery_new lasso_discovery_new_full lasso_discovery_init_modify lasso_discovery_add_insert_entry lasso_discovery_add_remove_entry lasso_discovery_init_query lasso_discovery_add_requested_service_type lasso_discovery_process_request_msg lasso_discovery_build_response_msg lasso_discovery_process_modify_response_msg lasso_discovery_process_query_response_msg lasso_discovery_get_service lasso_discovery_get_services LassoWsfProfileConstructor lasso_discovery_register_constructor_for_service_type lasso_discovery_unregister_constructor_for_service_type LASSO_DISCOVERY LASSO_IS_DISCOVERY LASSO_TYPE_DISCOVERY lasso_discovery_get_type LASSO_DISCOVERY_CLASS LASSO_IS_DISCOVERY_CLASS LASSO_DISCOVERY_GET_CLASS
lib_federation_termination_notification LassoLibFederationTerminationNotification LassoLibFederationTerminationNotification lasso_lib_federation_termination_notification_new lasso_lib_federation_termination_notification_new_full LASSO_LIB_FEDERATION_TERMINATION_NOTIFICATION LASSO_IS_LIB_FEDERATION_TERMINATION_NOTIFICATION LASSO_TYPE_LIB_FEDERATION_TERMINATION_NOTIFICATION lasso_lib_federation_termination_notification_get_type LASSO_LIB_FEDERATION_TERMINATION_NOTIFICATION_CLASS LASSO_IS_LIB_FEDERATION_TERMINATION_NOTIFICATION_CLASS LASSO_LIB_FEDERATION_TERMINATION_NOTIFICATION_GET_CLASS
strings Base Strings LASSO_PYTHON_HREF LASSO_LASSO_PREFIX LASSO_LASSO_HREF
ws_strings Strings for WS-* LASSO_WSSE_HREF LASSO_WSSE_PREFIX LASSO_WSSE1_HREF LASSO_WSSE1_PREFIX LASSO_WSUTIL1_HREF LASSO_WSUTIL1_PREFIX LASSO_WSA_HREF LASSO_WSA_PREFIX LASSO_WSU_HREF LASSO_WSU_PREFIX LASSO_XSI_HREF LASSO_XSI_PREFIX
soap_strings Strings for SOAP 1.1 LASSO_SOAP_FAULT_CODE_SERVER LASSO_SOAP_FAULT_CODE_CLIENT LASSO_SOAP_FAULT_CODE_MUST_UNDERSTAND LASSO_SOAP_FAULT_CODE_VERSION_MISMATCH LASSO_SOAP_FAULT_STRING_SERVER LASSO_SOAP_FAULT_STRING_IDENTITY_NOT_FOUND
id_ff_strings Strings for ID-FF 1.2 LASSO_LIB_HREF LASSO_LIB_PREFIX LASSO_METADATA_HREF LASSO_METADATA_PREFIX LASSO_SAML_ASSERTION_HREF LASSO_SAML_ASSERTION_PREFIX LASSO_SAML_PROTOCOL_HREF LASSO_SAML_PROTOCOL_PREFIX LASSO_PAOS_HREF LASSO_PAOS_PREFIX LASSO_ECP_HREF LASSO_ECP_PREFIX LASSO_LIB_MAJOR_VERSION_N LASSO_LIB_MINOR_VERSION_N LASSO_SAML_MAJOR_VERSION_N LASSO_SAML_MINOR_VERSION_N LASSO_LIB_NAMEID_POLICY_TYPE_NONE LASSO_LIB_NAMEID_POLICY_TYPE_ONE_TIME LASSO_LIB_NAMEID_POLICY_TYPE_FEDERATED LASSO_LIB_NAMEID_POLICY_TYPE_ANY LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_INTERNET_PROTOCOL LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_INTERNET_PROTOCOL_PASSWORD LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_ONE_FACTOR_UNREGISTERED LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_TWO_FACTOR_UNREGISTERED LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_ONE_FACTOR_CONTRACT LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_MOBILE_TWO_FACTOR_CONTRACT LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PASSWORD LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PASSWORD_PROTECTED_TRANSPORT LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_PREVIOUS_SESSION LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SMARTCARD LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SMARTCARD_PKI LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_SOFTWARE_PKI LASSO_LIB_AUTHN_CONTEXT_CLASS_REF_TIME_SYNC_TOKEN LASSO_LIB_AUTHN_CONTEXT_COMPARISON_EXACT LASSO_LIB_AUTHN_CONTEXT_COMPARISON_MINIMUM LASSO_LIB_AUTHN_CONTEXT_COMPARISON_MAXIMUM LASSO_LIB_AUTHN_CONTEXT_COMPARISON_BETTER LASSO_SAML_AUTHENTICATION_METHOD_PASSWORD LASSO_SAML_AUTHENTICATION_METHOD_KERBEROS LASSO_SAML_AUTHENTICATION_METHOD_SECURE_REMOTE_PASSWORD LASSO_SAML_AUTHENTICATION_METHOD_HARDWARE_TOKEN LASSO_SAML_AUTHENTICATION_METHOD_SMARTCARD_PKI LASSO_SAML_AUTHENTICATION_METHOD_SOFTWARE_PKI LASSO_SAML_AUTHENTICATION_METHOD_PGP LASSO_SAML_AUTHENTICATION_METHODS_PKI LASSO_SAML_AUTHENTICATION_METHOD_XKMS LASSO_SAML_AUTHENTICATION_METHOD_XMLD_SIG LASSO_SAML_AUTHENTICATION_METHOD_UNSPECIFIED LASSO_SAML_AUTHENTICATION_METHOD_LIBERTY LASSO_LIB_STATUS_CODE_FEDERATION_DOES_NOT_EXIST LASSO_LIB_STATUS_CODE_INVALID_ASSERTION_CONSUMER_SERVICE_INDEX LASSO_LIB_STATUS_CODE_INVALID_SIGNATURE LASSO_LIB_STATUS_CODE_NO_AUTHN_CONTEXT LASSO_LIB_STATUS_CODE_NO_AVAILABLEIDP LASSO_LIB_STATUS_CODE_NO_PASSIVE LASSO_LIB_STATUS_CODE_NO_SUPPORTEDIDP LASSO_LIB_STATUS_CODE_PROXY_COUNT_EXCEEDED LASSO_LIB_STATUS_CODE_UNKNOWN_PRINCIPAL LASSO_LIB_STATUS_CODE_UNSIGNED_AUTHN_REQUEST LASSO_LIB_STATUS_CODE_UNSUPPORTED_PROFILE LASSO_SAML_STATUS_CODE_SUCCESS LASSO_SAML_STATUS_CODE_VERSION_MISMATCH LASSO_SAML_STATUS_CODE_REQUESTER LASSO_SAML_STATUS_CODE_RESPONDER LASSO_SAML_STATUS_CODE_REQUEST_VERSION_TOO_HIGH LASSO_SAML_STATUS_CODE_REQUEST_VERSION_TOO_LOW LASSO_SAML_STATUS_CODE_REQUEST_VERSION_DEPRECATED LASSO_SAML_STATUS_CODE_TOO_MANY_RESPONSES LASSO_SAML_STATUS_CODE_RESOURCE_NOT_RECOGNIZED LASSO_SAML_STATUS_CODE_REQUEST_DENIED LASSO_LIB_PROTOCOL_PROFILE_BRWS_ART LASSO_LIB_PROTOCOL_PROFILE_BRWS_POST LASSO_LIB_PROTOCOL_PROFILE_BRWS_LECP LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_IDP_HTTP LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_IDP_SOAP LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_FED_TERM_SP_SOAP LASSO_LIB_PROTOCOL_PROFILE_NIM_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_RNI_IDP_HTTP LASSO_LIB_PROTOCOL_PROFILE_RNI_IDP_SOAP LASSO_LIB_PROTOCOL_PROFILE_RNI_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_RNI_SP_SOAP LASSO_LIB_PROTOCOL_PROFILE_SLO_SP_HTTP LASSO_LIB_PROTOCOL_PROFILE_SLO_SP_SOAP LASSO_LIB_PROTOCOL_PROFILE_SLO_IDP_HTTP LASSO_LIB_PROTOCOL_PROFILE_SLO_IDP_SOAP LASSO_LIB_NAME_IDENTIFIER_FORMAT_FEDERATED LASSO_LIB_NAME_IDENTIFIER_FORMAT_ONE_TIME LASSO_LIB_NAME_IDENTIFIER_FORMAT_ENCRYPTED LASSO_LIB_NAME_IDENTIFIER_FORMAT_ENTITYID LASSO_LIB_CONSENT_OBTAINED LASSO_LIB_CONSENT_OBTAINED_PRIOR LASSO_LIB_CONSENT_OBTAINED_CURRENT_IMPLICIT LASSO_LIB_CONSENT_OBTAINED_CURRENT_EXPLICIT LASSO_LIB_CONSENT_UNAVAILABLE LASSO_LIB_CONSENT_INAPPLICABLE LASSO_SAML_CONFIRMATION_METHOD_ARTIFACT LASSO_SAML_CONFIRMATION_METHOD_ARTIFACT01 LASSO_SAML_CONFIRMATION_METHOD_BEARER LASSO_SAML_CONFIRMATION_METHOD_HOLDER_OF_KEY LASSO_SAML_CONFIRMATION_METHOD_SENDER_VOUCHES
saml2_strings SAML 2.0 Strings LASSO_SAML2_METADATA_HREF LASSO_SAML2_METADATA_PREFIX LASSO_SAML2_PROTOCOL_HREF LASSO_SAML2_PROTOCOL_PREFIX LASSO_SAML2_ASSERTION_HREF LASSO_SAML2_ASSERTION_PREFIX LASSO_SAML2_METADATA_BINDING_SOAP LASSO_SAML2_METADATA_BINDING_REDIRECT LASSO_SAML2_METADATA_BINDING_POST LASSO_SAML2_METADATA_BINDING_ARTIFACT LASSO_SAML2_METADATA_BINDING_PAOS LASSO_SAML2_DEFLATE_ENCODING LASSO_SAML2_NAME_IDENTIFIER_FORMAT_UNSPECIFIED LASSO_SAML2_NAME_IDENTIFIER_FORMAT_EMAIL LASSO_SAML2_NAME_IDENTIFIER_FORMAT_X509 LASSO_SAML2_NAME_IDENTIFIER_FORMAT_WINDOWS LASSO_SAML2_NAME_IDENTIFIER_FORMAT_KERBEROS LASSO_SAML2_NAME_IDENTIFIER_FORMAT_ENTITY LASSO_SAML2_NAME_IDENTIFIER_FORMAT_PERSISTENT LASSO_SAML2_NAME_IDENTIFIER_FORMAT_TRANSIENT LASSO_SAML2_NAME_IDENTIFIER_FORMAT_ENCRYPTED LASSO_SAML2_ATTRIBUTE_NAME_EPR LASSO_SAML2_ATTRIBUTE_NAME_FORMAT_UNSPECIFIED LASSO_SAML2_ATTRIBUTE_NAME_FORMAT_URI LASSO_SAML2_ATTRIBUTE_NAME_FORMAT_BASIC LASSO_SAML2_ACTION_NAMESPACE_RWEDC LASSO_SAML2_ACTION_NAMESPACE_RWEDC_NEGATION LASSO_SAML2_ACTION_NAMESPACE_GHPP LASSO_SAML2_ACTION_NAMESPACE_UNIX LASSO_SAML2_ACTION_RWEDC_READ LASSO_SAML2_ACTION_RWEDC_WRITE LASSO_SAML2_ACTION_RWEDC_EXECUTE LASSO_SAML2_ACTION_RWEDC_DELETE LASSO_SAML2_ACTION_RWEDC_CONTROL LASSO_SAML2_ACTION_RWEDC_NEGATION LASSO_SAML2_ACTION_GHPP_GET LASSO_SAML2_ACTION_GHPP_HEAD LASSO_SAML2_ACTION_GHPP_PUT LASSO_SAML2_ACTION_GHPP_POST LASSO_SAML2_CONSENT_OBTAINED LASSO_SAML2_CONSENT_PRIOR LASSO_SAML2_CONSENT_IMPLICIT LASSO_SAML2_CONSENT_EXPLICIT LASSO_SAML2_CONSENT_UNAVAILABLE LASSO_SAML2_CONSENT_INAPPLICABLE LASSO_SAML2_STATUS_CODE_SUCCESS LASSO_SAML2_STATUS_CODE_REQUESTER LASSO_SAML2_STATUS_CODE_RESPONDER LASSO_SAML2_STATUS_CODE_VERSION_MISMATCH LASSO_SAML2_STATUS_CODE_AUTHN_FAILED LASSO_SAML2_STATUS_CODE_INVALID_ATTR_NAME LASSO_SAML2_STATUS_CODE_INVALID_NAME_ID_POLICY LASSO_SAML2_STATUS_CODE_NO_AUTHN_CONTEXT LASSO_SAML2_STATUS_CODE_NO_AVAILABLE_IDP LASSO_SAML2_STATUS_CODE_NO_PASSIVE LASSO_SAML2_STATUS_CODE_NO_SUPPORTED_IDP LASSO_SAML2_STATUS_CODE_PARTIAL_LOGOUT LASSO_SAML2_STATUS_CODE_PROXY_COUNT_EXCEEDED LASSO_SAML2_STATUS_CODE_REQUEST_DENIED LASSO_SAML2_STATUS_CODE_REQUEST_UNSUPPORTED LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_DEPRECATED LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_TOO_HIGH LASSO_SAML2_STATUS_CODE_REQUEST_VERSION_TOO_LOW LASSO_SAML2_STATUS_CODE_RESOURCE_NOT_RECOGNIZED LASSO_SAML2_STATUS_CODE_TOO_MANY_RESPONSES LASSO_SAML2_STATUS_CODE_UNKNOWN_ATTR_PROFILE LASSO_SAML2_STATUS_CODE_UNKNOWN_PRINCIPAL LASSO_SAML2_STATUS_CODE_UNSUPPORTED_BINDING LASSO_SAML2_AUTHN_CONTEXT_AUTHENTICATED_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_INTERNET_PROTOCOL LASSO_SAML2_AUTHN_CONTEXT_INTERNET_PROTOCOL_PASSWORD LASSO_SAML2_AUTHN_CONTEXT_KERBEROS LASSO_SAML2_AUTHN_CONTEXT_MOBILE_ONE_FACTOR_CONTRACT LASSO_SAML2_AUTHN_CONTEXT_MOBILE_ONE_FACTOR_UNREGISTERED LASSO_SAML2_AUTHN_CONTEXT_MOBILE_TWO_FACTOR_CONTRACT LASSO_SAML2_AUTHN_CONTEXT_MOBILE_TWO_FACTOR_UNREGISTERED LASSO_SAML2_AUTHN_CONTEXT_NOMAD_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_PERSONALIZED_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_PGP LASSO_SAML2_AUTHN_CONTEXT_PASSWORD_PROTECTED_TRANSPORT LASSO_SAML2_AUTHN_CONTEXT_PASSWORD LASSO_SAML2_AUTHN_CONTEXT_PREVIOUS_SESSION LASSO_SAML2_AUTHN_CONTEXT_SMARTCARD LASSO_SAML2_AUTHN_CONTEXT_SMARTCARD_PKI LASSO_SAML2_AUTHN_CONTEXT_SOFTWARE_PKI LASSO_SAML2_AUTHN_CONTEXT_SPKI LASSO_SAML2_AUTHN_CONTEXT_SECURE_REMOTE_PASSWORD LASSO_SAML2_AUTHN_CONTEXT_TLS_CLIENT LASSO_SAML2_AUTHN_CONTEXT_X509 LASSO_SAML2_AUTHN_CONTEXT_TELEPHONY LASSO_SAML2_AUTHN_CONTEXT_TIME_SYNC_TOKEN LASSO_SAML2_AUTHN_CONTEXT_XMLDSIG LASSO_SAML2_AUTHN_CONTEXT_UNSPECIFIED LASSO_SAML2_CONFIRMATION_METHOD_BEARER LASSO_SAML2_CONFIRMATION_METHOD_HOLDER_OF_KEY LASSO_SAML2_FIELD_RESPONSE LASSO_SAML2_FIELD_REQUEST LASSO_SAML2_FIELD_ARTIFACT LASSO_SAML2_FIELD_RELAYSTATE LASSO_SAML2_FIELD_SIGNATURE LASSO_SAML2_FIELD_SIGALG
soap_strings Strings for SOAP LASSO_SOAP_ENV_HREF LASSO_SOAP_ENV_PREFIX LASSO_SOAP_ENV_ACTOR
dsig_strings Strings for XML-DSIG LASSO_DS_HREF LASSO_DS_PREFIX
ds_key_info LassoDsKeyInfo LassoDsKeyInfo lasso_ds_key_info_new LASSO_DS_KEY_INFO LASSO_IS_DS_KEY_INFO LASSO_TYPE_DS_KEY_INFO lasso_ds_key_info_get_type LASSO_DS_KEY_INFO_CLASS LASSO_IS_DS_KEY_INFO_CLASS LASSO_DS_KEY_INFO_GET_CLASS
saml_subject_locality LassoSamlSubjectLocality LassoSamlSubjectLocality lasso_saml_subject_locality_new LASSO_SAML_SUBJECT_LOCALITY LASSO_IS_SAML_SUBJECT_LOCALITY LASSO_TYPE_SAML_SUBJECT_LOCALITY lasso_saml_subject_locality_get_type LASSO_SAML_SUBJECT_LOCALITY_CLASS LASSO_IS_SAML_SUBJECT_LOCALITY_CLASS LASSO_SAML_SUBJECT_LOCALITY_GET_CLASS
node LassoMessageFormat LassoSignatureType LassoSignatureMethod LassoNodeClassData LassoNode LassoNode lasso_node_new lasso_node_new_from_dump lasso_node_new_from_soap lasso_node_new_from_xmlNode lasso_node_cleanup_original_xmlnodes lasso_node_destroy lasso_node_dump lasso_node_debug lasso_node_export_to_base64 lasso_node_export_to_query lasso_node_export_to_query_with_password lasso_node_export_to_soap lasso_node_export_to_soap_with_headers lasso_node_export_to_xml lasso_node_export_to_paos_request lasso_node_export_to_paos_request_full lasso_node_export_to_ecp_soap_response lasso_node_get_xmlNode lasso_node_get_name lasso_node_get_original_xmlnode lasso_node_set_original_xmlnode lasso_node_set_custom_namespace lasso_node_set_custom_nodename lasso_node_get_namespace lasso_node_init_from_message lasso_node_init_from_query lasso_node_init_from_xml lasso_strerror LASSO_NODE LASSO_IS_NODE LASSO_TYPE_NODE lasso_node_get_type LASSO_NODE_CLASS LASSO_IS_NODE_CLASS LASSO_NODE_GET_CLASS
samlp_request_abstract LassoSamlpRequestAbstract LassoSamlpRequestAbstract LASSO_SAMLP_REQUEST_ABSTRACT LASSO_IS_SAMLP_REQUEST_ABSTRACT LASSO_TYPE_SAMLP_REQUEST_ABSTRACT lasso_samlp_request_abstract_get_type LASSO_SAMLP_REQUEST_ABSTRACT_CLASS LASSO_IS_SAMLP_REQUEST_ABSTRACT_CLASS LASSO_SAMLP_REQUEST_ABSTRACT_GET_CLASS
saml_name_identifier LassoSamlNameIdentifier LassoSamlNameIdentifier lasso_saml_name_identifier_new lasso_saml_name_identifier_new_from_xmlNode LASSO_SAML_NAME_IDENTIFIER LASSO_IS_SAML_NAME_IDENTIFIER LASSO_TYPE_SAML_NAME_IDENTIFIER lasso_saml_name_identifier_get_type LASSO_SAML_NAME_IDENTIFIER_CLASS LASSO_IS_SAML_NAME_IDENTIFIER_CLASS LASSO_SAML_NAME_IDENTIFIER_GET_CLASS
lib_idp_list LassoLibIDPList LassoLibIDPList lasso_lib_idp_list_new LASSO_LIB_IDP_LIST LASSO_IS_LIB_IDP_LIST LASSO_TYPE_LIB_IDP_LIST lasso_lib_idp_list_get_type LASSO_LIB_IDP_LIST_CLASS LASSO_IS_LIB_IDP_LIST_CLASS LASSO_LIB_IDP_LIST_GET_CLASS
lib_authn_context LassoLibAuthnContext LassoLibAuthnContext lasso_lib_authn_context_new LASSO_LIB_AUTHN_CONTEXT LASSO_IS_LIB_AUTHN_CONTEXT LASSO_TYPE_LIB_AUTHN_CONTEXT lasso_lib_authn_context_get_type LASSO_LIB_AUTHN_CONTEXT_CLASS LASSO_IS_LIB_AUTHN_CONTEXT_CLASS LASSO_LIB_AUTHN_CONTEXT_GET_CLASS
lib_idp_entries LassoLibIDPEntries LassoLibIDPEntries lasso_lib_idp_entries_new LASSO_LIB_IDP_ENTRIES LASSO_IS_LIB_IDP_ENTRIES LASSO_TYPE_LIB_IDP_ENTRIES lasso_lib_idp_entries_get_type LASSO_LIB_IDP_ENTRIES_CLASS LASSO_IS_LIB_IDP_ENTRIES_CLASS LASSO_LIB_IDP_ENTRIES_GET_CLASS
samlp_request LassoSamlpRequest LassoSamlpRequest lasso_samlp_request_new LASSO_SAMLP_REQUEST LASSO_IS_SAMLP_REQUEST LASSO_TYPE_SAMLP_REQUEST lasso_samlp_request_get_type LASSO_SAMLP_REQUEST_CLASS LASSO_IS_SAMLP_REQUEST_CLASS LASSO_SAMLP_REQUEST_GET_CLASS
saml_conditions LassoSamlConditions LassoSamlConditions lasso_saml_conditions_new LASSO_SAML_CONDITIONS LASSO_IS_SAML_CONDITIONS LASSO_TYPE_SAML_CONDITIONS lasso_saml_conditions_get_type LASSO_SAML_CONDITIONS_CLASS LASSO_IS_SAML_CONDITIONS_CLASS LASSO_SAML_CONDITIONS_GET_CLASS
lib_logout_response LassoLibLogoutResponse LassoLibLogoutResponse lasso_lib_logout_response_new lasso_lib_logout_response_new_full LASSO_LIB_LOGOUT_RESPONSE LASSO_IS_LIB_LOGOUT_RESPONSE LASSO_TYPE_LIB_LOGOUT_RESPONSE lasso_lib_logout_response_get_type LASSO_LIB_LOGOUT_RESPONSE_CLASS LASSO_IS_LIB_LOGOUT_RESPONSE_CLASS LASSO_LIB_LOGOUT_RESPONSE_GET_CLASS
lib_status_response LassoLibStatusResponse LassoLibStatusResponse lasso_lib_status_response_new LASSO_LIB_STATUS_RESPONSE LASSO_IS_LIB_STATUS_RESPONSE LASSO_TYPE_LIB_STATUS_RESPONSE lasso_lib_status_response_get_type LASSO_LIB_STATUS_RESPONSE_CLASS LASSO_IS_LIB_STATUS_RESPONSE_CLASS LASSO_LIB_STATUS_RESPONSE_GET_CLASS
lib_name_identifier_mapping_response LassoLibNameIdentifierMappingResponse LassoLibNameIdentifierMappingResponse lasso_lib_name_identifier_mapping_response_new lasso_lib_name_identifier_mapping_response_new_full LASSO_LIB_NAME_IDENTIFIER_MAPPING_RESPONSE LASSO_IS_LIB_NAME_IDENTIFIER_MAPPING_RESPONSE LASSO_TYPE_LIB_NAME_IDENTIFIER_MAPPING_RESPONSE lasso_lib_name_identifier_mapping_response_get_type LASSO_LIB_NAME_IDENTIFIER_MAPPING_RESPONSE_CLASS LASSO_IS_LIB_NAME_IDENTIFIER_MAPPING_RESPONSE_CLASS LASSO_LIB_NAME_IDENTIFIER_MAPPING_RESPONSE_GET_CLASS
lib_assertion LassoLibAssertion LassoLibAssertion lasso_lib_assertion_new lasso_lib_assertion_new_full LASSO_LIB_ASSERTION LASSO_IS_LIB_ASSERTION LASSO_TYPE_LIB_ASSERTION lasso_lib_assertion_get_type LASSO_LIB_ASSERTION_CLASS LASSO_IS_LIB_ASSERTION_CLASS LASSO_LIB_ASSERTION_GET_CLASS
lib_request_authn_context LassoLibRequestAuthnContext LassoLibRequestAuthnContext lasso_lib_request_authn_context_new LASSO_LIB_REQUEST_AUTHN_CONTEXT LASSO_IS_LIB_REQUEST_AUTHN_CONTEXT LASSO_TYPE_LIB_REQUEST_AUTHN_CONTEXT lasso_lib_request_authn_context_get_type LASSO_LIB_REQUEST_AUTHN_CONTEXT_CLASS LASSO_IS_LIB_REQUEST_AUTHN_CONTEXT_CLASS LASSO_LIB_REQUEST_AUTHN_CONTEXT_GET_CLASS
saml_subject_statement LassoSamlSubjectStatement LassoSamlSubjectStatement lasso_saml_subject_statement_new LASSO_SAML_SUBJECT_STATEMENT LASSO_IS_SAML_SUBJECT_STATEMENT LASSO_TYPE_SAML_SUBJECT_STATEMENT lasso_saml_subject_statement_get_type LASSO_SAML_SUBJECT_STATEMENT_CLASS LASSO_IS_SAML_SUBJECT_STATEMENT_CLASS LASSO_SAML_SUBJECT_STATEMENT_GET_CLASS
soap_fault LassoSoapFault LassoSoapFault lasso_soap_fault_new lasso_soap_fault_new_from_message lasso_soap_fault_new_full lasso_soap_fault_add_to_detail lasso_soap_fault_get_detail LASSO_SOAP_FAULT LASSO_IS_SOAP_FAULT LASSO_TYPE_SOAP_FAULT lasso_soap_fault_get_type LASSO_SOAP_FAULT_CLASS LASSO_IS_SOAP_FAULT_CLASS LASSO_SOAP_FAULT_GET_CLASS
ds_key_value LassoDsKeyValue LassoDsKeyValue lasso_ds_key_value_new LASSO_DS_KEY_VALUE LASSO_IS_DS_KEY_VALUE LASSO_TYPE_DS_KEY_VALUE lasso_ds_key_value_get_type LASSO_DS_KEY_VALUE_CLASS LASSO_IS_DS_KEY_VALUE_CLASS LASSO_DS_KEY_VALUE_GET_CLASS
lib_subject LassoLibSubject LassoLibSubject lasso_lib_subject_new LASSO_LIB_SUBJECT LASSO_IS_LIB_SUBJECT LASSO_TYPE_LIB_SUBJECT lasso_lib_subject_get_type LASSO_LIB_SUBJECT_CLASS LASSO_IS_LIB_SUBJECT_CLASS LASSO_LIB_SUBJECT_GET_CLASS
samlp_response LassoSamlpResponse LassoSamlpResponse lasso_samlp_response_new LASSO_SAMLP_RESPONSE LASSO_IS_SAMLP_RESPONSE LASSO_TYPE_SAMLP_RESPONSE lasso_samlp_response_get_type LASSO_SAMLP_RESPONSE_CLASS LASSO_IS_SAMLP_RESPONSE_CLASS LASSO_SAMLP_RESPONSE_GET_CLASS
saml_attribute_designator LassoSamlAttributeDesignator LassoSamlAttributeDesignator lasso_saml_attribute_designator_new LASSO_SAML_ATTRIBUTE_DESIGNATOR LASSO_IS_SAML_ATTRIBUTE_DESIGNATOR LASSO_TYPE_SAML_ATTRIBUTE_DESIGNATOR lasso_saml_attribute_designator_get_type LASSO_SAML_ATTRIBUTE_DESIGNATOR_CLASS LASSO_IS_SAML_ATTRIBUTE_DESIGNATOR_CLASS LASSO_SAML_ATTRIBUTE_DESIGNATOR_GET_CLASS
saml_authority_binding LassoSamlAuthorityBinding LassoSamlAuthorityBinding lasso_saml_authority_binding_new LASSO_SAML_AUTHORITY_BINDING LASSO_IS_SAML_AUTHORITY_BINDING LASSO_TYPE_SAML_AUTHORITY_BINDING lasso_saml_authority_binding_get_type LASSO_SAML_AUTHORITY_BINDING_CLASS LASSO_IS_SAML_AUTHORITY_BINDING_CLASS LASSO_SAML_AUTHORITY_BINDING_GET_CLASS
lib_register_name_identifier_request LassoLibRegisterNameIdentifierRequest LassoLibRegisterNameIdentifierRequest lasso_lib_register_name_identifier_request_new lasso_lib_register_name_identifier_request_new_full LASSO_LIB_REGISTER_NAME_IDENTIFIER_REQUEST LASSO_IS_LIB_REGISTER_NAME_IDENTIFIER_REQUEST LASSO_TYPE_LIB_REGISTER_NAME_IDENTIFIER_REQUEST lasso_lib_register_name_identifier_request_get_type LASSO_LIB_REGISTER_NAME_IDENTIFIER_REQUEST_CLASS LASSO_IS_LIB_REGISTER_NAME_IDENTIFIER_REQUEST_CLASS LASSO_LIB_REGISTER_NAME_IDENTIFIER_REQUEST_GET_CLASS
saml_subject_statement_abstract LassoSamlSubjectStatementAbstract LassoSamlSubjectStatementAbstract LASSO_SAML_SUBJECT_STATEMENT_ABSTRACT LASSO_IS_SAML_SUBJECT_STATEMENT_ABSTRACT LASSO_TYPE_SAML_SUBJECT_STATEMENT_ABSTRACT lasso_saml_subject_statement_abstract_get_type LASSO_SAML_SUBJECT_STATEMENT_ABSTRACT_CLASS LASSO_IS_SAML_SUBJECT_STATEMENT_ABSTRACT_CLASS LASSO_SAML_SUBJECT_STATEMENT_ABSTRACT_GET_CLASS
lib_register_name_identifier_response LassoLibRegisterNameIdentifierResponse LassoLibRegisterNameIdentifierResponse lasso_lib_register_name_identifier_response_new lasso_lib_register_name_identifier_response_new_full LASSO_LIB_REGISTER_NAME_IDENTIFIER_RESPONSE LASSO_IS_LIB_REGISTER_NAME_IDENTIFIER_RESPONSE LASSO_TYPE_LIB_REGISTER_NAME_IDENTIFIER_RESPONSE lasso_lib_register_name_identifier_response_get_type LASSO_LIB_REGISTER_NAME_IDENTIFIER_RESPONSE_CLASS LASSO_IS_LIB_REGISTER_NAME_IDENTIFIER_RESPONSE_CLASS LASSO_LIB_REGISTER_NAME_IDENTIFIER_RESPONSE_GET_CLASS
lib_name_identifier_mapping_request LassoLibNameIdentifierMappingRequest LassoLibNameIdentifierMappingRequest lasso_lib_name_identifier_mapping_request_new lasso_lib_name_identifier_mapping_request_new_full LASSO_LIB_NAME_IDENTIFIER_MAPPING_REQUEST LASSO_IS_LIB_NAME_IDENTIFIER_MAPPING_REQUEST LASSO_TYPE_LIB_NAME_IDENTIFIER_MAPPING_REQUEST lasso_lib_name_identifier_mapping_request_get_type LASSO_LIB_NAME_IDENTIFIER_MAPPING_REQUEST_CLASS LASSO_IS_LIB_NAME_IDENTIFIER_MAPPING_REQUEST_CLASS LASSO_LIB_NAME_IDENTIFIER_MAPPING_REQUEST_GET_CLASS
saml_attribute_value LassoSamlAttributeValue LassoSamlAttributeValue lasso_saml_attribute_value_new LASSO_SAML_ATTRIBUTE_VALUE LASSO_IS_SAML_ATTRIBUTE_VALUE LASSO_TYPE_SAML_ATTRIBUTE_VALUE lasso_saml_attribute_value_get_type LASSO_SAML_ATTRIBUTE_VALUE_CLASS LASSO_IS_SAML_ATTRIBUTE_VALUE_CLASS LASSO_SAML_ATTRIBUTE_VALUE_GET_CLASS
lib_idp_entry LassoLibIDPEntry LassoLibIDPEntry lasso_lib_idp_entry_new LASSO_LIB_IDP_ENTRY LASSO_IS_LIB_IDP_ENTRY LASSO_TYPE_LIB_IDP_ENTRY lasso_lib_idp_entry_get_type LASSO_LIB_IDP_ENTRY_CLASS LASSO_IS_LIB_IDP_ENTRY_CLASS LASSO_LIB_IDP_ENTRY_GET_CLASS
lib_authn_response_envelope LassoLibAuthnResponseEnvelope LassoLibAuthnResponseEnvelope lasso_lib_authn_response_envelope_new LASSO_LIB_AUTHN_RESPONSE_ENVELOPE LASSO_IS_LIB_AUTHN_RESPONSE_ENVELOPE LASSO_TYPE_LIB_AUTHN_RESPONSE_ENVELOPE lasso_lib_authn_response_envelope_get_type LASSO_LIB_AUTHN_RESPONSE_ENVELOPE_CLASS LASSO_IS_LIB_AUTHN_RESPONSE_ENVELOPE_CLASS LASSO_LIB_AUTHN_RESPONSE_ENVELOPE_GET_CLASS
saml_statement_abstract LassoSamlStatementAbstract LassoSamlStatementAbstract LASSO_SAML_STATEMENT_ABSTRACT LASSO_IS_SAML_STATEMENT_ABSTRACT LASSO_TYPE_SAML_STATEMENT_ABSTRACT lasso_saml_statement_abstract_get_type LASSO_SAML_STATEMENT_ABSTRACT_CLASS LASSO_IS_SAML_STATEMENT_ABSTRACT_CLASS LASSO_SAML_STATEMENT_ABSTRACT_GET_CLASS
soap_header LassoSoapHeader LassoSoapHeader lasso_soap_header_new lasso_soap_header_new_from_message LASSO_SOAP_HEADER LASSO_IS_SOAP_HEADER LASSO_TYPE_SOAP_HEADER lasso_soap_header_get_type LASSO_SOAP_HEADER_CLASS LASSO_IS_SOAP_HEADER_CLASS LASSO_SOAP_HEADER_GET_CLASS
lib_logout_request LassoLibLogoutRequest LassoLibLogoutRequest lasso_lib_logout_request_new lasso_lib_logout_request_new_full LASSO_LIB_LOGOUT_REQUEST LASSO_IS_LIB_LOGOUT_REQUEST LASSO_TYPE_LIB_LOGOUT_REQUEST lasso_lib_logout_request_get_type LASSO_LIB_LOGOUT_REQUEST_CLASS LASSO_IS_LIB_LOGOUT_REQUEST_CLASS LASSO_LIB_LOGOUT_REQUEST_GET_CLASS
misc_text_node LassoMiscTextNode LassoMiscTextNode lasso_misc_text_node_new lasso_misc_text_node_new_with_string lasso_misc_text_node_new_with_xml_node lasso_misc_text_node_get_xml_content lasso_misc_text_node_set_xml_content LASSO_MISC_TEXT_NODE LASSO_IS_MISC_TEXT_NODE LASSO_TYPE_MISC_TEXT_NODE lasso_misc_text_node_get_type LASSO_MISC_TEXT_NODE_CLASS LASSO_IS_MISC_TEXT_NODE_CLASS LASSO_MISC_TEXT_NODE_GET_CLASS
saml_subject_confirmation LassoSamlSubjectConfirmation LassoSamlSubjectConfirmation lasso_saml_subject_confirmation_new LASSO_SAML_SUBJECT_CONFIRMATION LASSO_IS_SAML_SUBJECT_CONFIRMATION LASSO_TYPE_SAML_SUBJECT_CONFIRMATION lasso_saml_subject_confirmation_get_type LASSO_SAML_SUBJECT_CONFIRMATION_CLASS LASSO_IS_SAML_SUBJECT_CONFIRMATION_CLASS LASSO_SAML_SUBJECT_CONFIRMATION_GET_CLASS
samlp_status LassoSamlpStatus LassoSamlpStatus lasso_samlp_status_new LASSO_SAMLP_STATUS LASSO_IS_SAMLP_STATUS LASSO_TYPE_SAMLP_STATUS lasso_samlp_status_get_type LASSO_SAMLP_STATUS_CLASS LASSO_IS_SAMLP_STATUS_CLASS LASSO_SAMLP_STATUS_GET_CLASS
saml_condition_abstract LassoSamlConditionAbstract LassoSamlConditionAbstract LASSO_SAML_CONDITION_ABSTRACT LASSO_IS_SAML_CONDITION_ABSTRACT LASSO_TYPE_SAML_CONDITION_ABSTRACT lasso_saml_condition_abstract_get_type LASSO_SAML_CONDITION_ABSTRACT_CLASS LASSO_IS_SAML_CONDITION_ABSTRACT_CLASS LASSO_SAML_CONDITION_ABSTRACT_GET_CLASS
soap_body LassoSoapBody LassoSoapBody lasso_soap_body_new lasso_soap_body_new_from_message LASSO_SOAP_BODY LASSO_IS_SOAP_BODY LASSO_TYPE_SOAP_BODY lasso_soap_body_get_type LASSO_SOAP_BODY_CLASS LASSO_IS_SOAP_BODY_CLASS LASSO_SOAP_BODY_GET_CLASS
saml_subject LassoSamlSubject LassoSamlSubject lasso_saml_subject_new LASSO_SAML_SUBJECT LASSO_IS_SAML_SUBJECT LASSO_TYPE_SAML_SUBJECT lasso_saml_subject_get_type LASSO_SAML_SUBJECT_CLASS LASSO_IS_SAML_SUBJECT_CLASS LASSO_SAML_SUBJECT_GET_CLASS
lib_scoping LassoLibScoping LassoLibScoping lasso_lib_scoping_new LASSO_LIB_SCOPING LASSO_IS_LIB_SCOPING LASSO_TYPE_LIB_SCOPING lasso_lib_scoping_get_type LASSO_LIB_SCOPING_CLASS LASSO_IS_LIB_SCOPING_CLASS LASSO_LIB_SCOPING_GET_CLASS
lib_authn_request LassoLibAuthnRequest LassoLibAuthnRequest lasso_lib_authn_request_new LASSO_LIB_AUTHN_REQUEST LASSO_IS_LIB_AUTHN_REQUEST LASSO_TYPE_LIB_AUTHN_REQUEST lasso_lib_authn_request_get_type LASSO_LIB_AUTHN_REQUEST_CLASS LASSO_IS_LIB_AUTHN_REQUEST_CLASS LASSO_LIB_AUTHN_REQUEST_GET_CLASS
saml_attribute LassoSamlAttribute LassoSamlAttribute lasso_saml_attribute_new LASSO_SAML_ATTRIBUTE LASSO_IS_SAML_ATTRIBUTE LASSO_TYPE_SAML_ATTRIBUTE lasso_saml_attribute_get_type LASSO_SAML_ATTRIBUTE_CLASS LASSO_IS_SAML_ATTRIBUTE_CLASS LASSO_SAML_ATTRIBUTE_GET_CLASS
saml_advice LassoSamlAdvice LassoSamlAdvice lasso_saml_advice_new LASSO_SAML_ADVICE LASSO_IS_SAML_ADVICE LASSO_TYPE_SAML_ADVICE lasso_saml_advice_get_type LASSO_SAML_ADVICE_CLASS LASSO_IS_SAML_ADVICE_CLASS LASSO_SAML_ADVICE_GET_CLASS
saml_authentication_statement LassoSamlAuthenticationStatement LassoSamlAuthenticationStatement lasso_saml_authentication_statement_new LASSO_SAML_AUTHENTICATION_STATEMENT LASSO_IS_SAML_AUTHENTICATION_STATEMENT LASSO_TYPE_SAML_AUTHENTICATION_STATEMENT lasso_saml_authentication_statement_get_type LASSO_SAML_AUTHENTICATION_STATEMENT_CLASS LASSO_IS_SAML_AUTHENTICATION_STATEMENT_CLASS LASSO_SAML_AUTHENTICATION_STATEMENT_GET_CLASS
saml_audience_restriction_condition LassoSamlAudienceRestrictionCondition LassoSamlAudienceRestrictionCondition lasso_saml_audience_restriction_condition_new lasso_saml_audience_restriction_condition_new_full LASSO_SAML_AUDIENCE_RESTRICTION_CONDITION LASSO_IS_SAML_AUDIENCE_RESTRICTION_CONDITION LASSO_TYPE_SAML_AUDIENCE_RESTRICTION_CONDITION lasso_saml_audience_restriction_condition_get_type LASSO_SAML_AUDIENCE_RESTRICTION_CONDITION_CLASS LASSO_IS_SAML_AUDIENCE_RESTRICTION_CONDITION_CLASS LASSO_SAML_AUDIENCE_RESTRICTION_CONDITION_GET_CLASS
lib_authentication_statement LassoLibAuthenticationStatement LassoLibAuthenticationStatement lasso_lib_authentication_statement_new lasso_lib_authentication_statement_new_full LASSO_LIB_AUTHENTICATION_STATEMENT LASSO_IS_LIB_AUTHENTICATION_STATEMENT LASSO_TYPE_LIB_AUTHENTICATION_STATEMENT lasso_lib_authentication_statement_get_type LASSO_LIB_AUTHENTICATION_STATEMENT_CLASS LASSO_IS_LIB_AUTHENTICATION_STATEMENT_CLASS LASSO_LIB_AUTHENTICATION_STATEMENT_GET_CLASS
lib_authn_request_envelope LassoLibAuthnRequestEnvelope LassoLibAuthnRequestEnvelope lasso_lib_authn_request_envelope_new lasso_lib_authn_request_envelope_new_full LASSO_LIB_AUTHN_REQUEST_ENVELOPE LASSO_IS_LIB_AUTHN_REQUEST_ENVELOPE LASSO_TYPE_LIB_AUTHN_REQUEST_ENVELOPE lasso_lib_authn_request_envelope_get_type LASSO_LIB_AUTHN_REQUEST_ENVELOPE_CLASS LASSO_IS_LIB_AUTHN_REQUEST_ENVELOPE_CLASS LASSO_LIB_AUTHN_REQUEST_ENVELOPE_GET_CLASS
saml_attribute_statement LassoSamlAttributeStatement LassoSamlAttributeStatement lasso_saml_attribute_statement_new LASSO_SAML_ATTRIBUTE_STATEMENT LASSO_IS_SAML_ATTRIBUTE_STATEMENT LASSO_TYPE_SAML_ATTRIBUTE_STATEMENT lasso_saml_attribute_statement_get_type LASSO_SAML_ATTRIBUTE_STATEMENT_CLASS LASSO_IS_SAML_ATTRIBUTE_STATEMENT_CLASS LASSO_SAML_ATTRIBUTE_STATEMENT_GET_CLASS
samlp_status_code LassoSamlpStatusCode LassoSamlpStatusCode lasso_samlp_status_code_new LASSO_SAMLP_STATUS_CODE LASSO_IS_SAMLP_STATUS_CODE LASSO_TYPE_SAMLP_STATUS_CODE lasso_samlp_status_code_get_type LASSO_SAMLP_STATUS_CODE_CLASS LASSO_IS_SAMLP_STATUS_CODE_CLASS LASSO_SAMLP_STATUS_CODE_GET_CLASS
soap_detail LassoSoapDetail LassoSoapDetail lasso_soap_detail_new lasso_soap_detail_new_from_message LASSO_SOAP_DETAIL LASSO_IS_SOAP_DETAIL LASSO_TYPE_SOAP_DETAIL lasso_soap_detail_get_type LASSO_SOAP_DETAIL_CLASS LASSO_IS_SOAP_DETAIL_CLASS LASSO_SOAP_DETAIL_GET_CLASS
soap_envelope LassoSoapEnvelope LassoSoapEnvelope lasso_soap_envelope_new lasso_soap_envelope_new_full lasso_soap_envelope_new_from_message LASSO_SOAP_ENVELOPE LASSO_IS_SOAP_ENVELOPE LASSO_TYPE_SOAP_ENVELOPE lasso_soap_envelope_get_type LASSO_SOAP_ENVELOPE_CLASS LASSO_IS_SOAP_ENVELOPE_CLASS LASSO_SOAP_ENVELOPE_GET_CLASS
ds_rsa_key_value LassoDsRsaKeyValue LassoDsRsaKeyValue lasso_ds_rsa_key_value_new LASSO_DS_RSA_KEY_VALUE LASSO_IS_DS_RSA_KEY_VALUE LASSO_TYPE_DS_RSA_KEY_VALUE lasso_ds_rsa_key_value_get_type LASSO_DS_RSA_KEY_VALUE_CLASS LASSO_IS_DS_RSA_KEY_VALUE_CLASS LASSO_DS_RSA_KEY_VALUE_GET_CLASS
samlp_response_abstract LassoSamlpResponseAbstract LassoSamlpResponseAbstract lasso_samlp_response_abstract_fill LASSO_SAMLP_RESPONSE_ABSTRACT LASSO_IS_SAMLP_RESPONSE_ABSTRACT LASSO_TYPE_SAMLP_RESPONSE_ABSTRACT lasso_samlp_response_abstract_get_type LASSO_SAMLP_RESPONSE_ABSTRACT_CLASS LASSO_IS_SAMLP_RESPONSE_ABSTRACT_CLASS LASSO_SAMLP_RESPONSE_ABSTRACT_GET_CLASS
lib_authn_response LassoLibAuthnResponse LassoLibAuthnResponse lasso_lib_authn_response_new LASSO_LIB_AUTHN_RESPONSE LASSO_IS_LIB_AUTHN_RESPONSE LASSO_TYPE_LIB_AUTHN_RESPONSE lasso_lib_authn_response_get_type LASSO_LIB_AUTHN_RESPONSE_CLASS LASSO_IS_LIB_AUTHN_RESPONSE_CLASS LASSO_LIB_AUTHN_RESPONSE_GET_CLASS
saml_assertion LassoSamlAssertion LassoSamlAssertion lasso_saml_assertion_new LASSO_SAML_ASSERTION LASSO_IS_SAML_ASSERTION LASSO_TYPE_SAML_ASSERTION lasso_saml_assertion_get_type LASSO_SAML_ASSERTION_CLASS LASSO_IS_SAML_ASSERTION_CLASS LASSO_SAML_ASSERTION_GET_CLASS
samlp2_artifact_response LassoSamlp2ArtifactResponse LassoSamlp2ArtifactResponse lasso_samlp2_artifact_response_new LASSO_SAMLP2_ARTIFACT_RESPONSE LASSO_IS_SAMLP2_ARTIFACT_RESPONSE LASSO_TYPE_SAMLP2_ARTIFACT_RESPONSE lasso_samlp2_artifact_response_get_type LASSO_SAMLP2_ARTIFACT_RESPONSE_CLASS LASSO_IS_SAMLP2_ARTIFACT_RESPONSE_CLASS LASSO_SAMLP2_ARTIFACT_RESPONSE_GET_CLASS
saml2_authz_decision_statement LassoSaml2AuthzDecisionStatement LassoSaml2AuthzDecisionStatement lasso_saml2_authz_decision_statement_new LASSO_SAML2_AUTHZ_DECISION_STATEMENT LASSO_IS_SAML2_AUTHZ_DECISION_STATEMENT LASSO_TYPE_SAML2_AUTHZ_DECISION_STATEMENT lasso_saml2_authz_decision_statement_get_type LASSO_SAML2_AUTHZ_DECISION_STATEMENT_CLASS LASSO_IS_SAML2_AUTHZ_DECISION_STATEMENT_CLASS LASSO_SAML2_AUTHZ_DECISION_STATEMENT_GET_CLASS
samlp2_manage_name_id_response LassoSamlp2ManageNameIDResponse LassoSamlp2ManageNameIDResponse lasso_samlp2_manage_name_id_response_new LASSO_SAMLP2_MANAGE_NAME_ID_RESPONSE LASSO_IS_SAMLP2_MANAGE_NAME_ID_RESPONSE LASSO_TYPE_SAMLP2_MANAGE_NAME_ID_RESPONSE lasso_samlp2_manage_name_id_response_get_type LASSO_SAMLP2_MANAGE_NAME_ID_RESPONSE_CLASS LASSO_IS_SAMLP2_MANAGE_NAME_ID_RESPONSE_CLASS LASSO_SAMLP2_MANAGE_NAME_ID_RESPONSE_GET_CLASS
saml2_subject_confirmation LassoSaml2SubjectConfirmation LassoSaml2SubjectConfirmation lasso_saml2_subject_confirmation_new LASSO_SAML2_SUBJECT_CONFIRMATION LASSO_IS_SAML2_SUBJECT_CONFIRMATION LASSO_TYPE_SAML2_SUBJECT_CONFIRMATION lasso_saml2_subject_confirmation_get_type LASSO_SAML2_SUBJECT_CONFIRMATION_CLASS LASSO_IS_SAML2_SUBJECT_CONFIRMATION_CLASS LASSO_SAML2_SUBJECT_CONFIRMATION_GET_CLASS
saml2_subject LassoSaml2Subject LassoSaml2Subject lasso_saml2_subject_new LASSO_SAML2_SUBJECT LASSO_IS_SAML2_SUBJECT LASSO_TYPE_SAML2_SUBJECT lasso_saml2_subject_get_type LASSO_SAML2_SUBJECT_CLASS LASSO_IS_SAML2_SUBJECT_CLASS LASSO_SAML2_SUBJECT_GET_CLASS
saml2_name_id LassoSaml2NameID LassoSaml2NameID lasso_saml2_name_id_new lasso_saml2_name_id_new_with_string lasso_saml2_name_id_build_persistent lasso_saml2_name_id_equals lasso_saml2_name_id_new_with_persistent_format LASSO_SAML2_NAME_ID LASSO_IS_SAML2_NAME_ID LASSO_TYPE_SAML2_NAME_ID lasso_saml2_name_id_get_type LASSO_SAML2_NAME_ID_CLASS LASSO_IS_SAML2_NAME_ID_CLASS LASSO_SAML2_NAME_ID_GET_CLASS
samlp2_authz_decision_query LassoSamlp2AuthzDecisionQuery LassoSamlp2AuthzDecisionQuery lasso_samlp2_authz_decision_query_new LASSO_SAMLP2_AUTHZ_DECISION_QUERY LASSO_IS_SAMLP2_AUTHZ_DECISION_QUERY LASSO_TYPE_SAMLP2_AUTHZ_DECISION_QUERY lasso_samlp2_authz_decision_query_get_type LASSO_SAMLP2_AUTHZ_DECISION_QUERY_CLASS LASSO_IS_SAMLP2_AUTHZ_DECISION_QUERY_CLASS LASSO_SAMLP2_AUTHZ_DECISION_QUERY_GET_CLASS
samlp2_idp_entry LassoSamlp2IDPEntry LassoSamlp2IDPEntry lasso_samlp2_idp_entry_new LASSO_SAMLP2_IDP_ENTRY LASSO_IS_SAMLP2_IDP_ENTRY LASSO_TYPE_SAMLP2_IDP_ENTRY lasso_samlp2_idp_entry_get_type LASSO_SAMLP2_IDP_ENTRY_CLASS LASSO_IS_SAMLP2_IDP_ENTRY_CLASS LASSO_SAMLP2_IDP_ENTRY_GET_CLASS
samlp2_status LassoSamlp2Status LassoSamlp2Status lasso_samlp2_status_new LASSO_SAMLP2_STATUS LASSO_IS_SAMLP2_STATUS LASSO_TYPE_SAMLP2_STATUS lasso_samlp2_status_get_type LASSO_SAMLP2_STATUS_CLASS LASSO_IS_SAMLP2_STATUS_CLASS LASSO_SAMLP2_STATUS_GET_CLASS
samlp2_subject_query_abstract LassoSamlp2SubjectQueryAbstract LassoSamlp2SubjectQueryAbstract lasso_samlp2_subject_query_abstract_new LASSO_SAMLP2_SUBJECT_QUERY_ABSTRACT LASSO_IS_SAMLP2_SUBJECT_QUERY_ABSTRACT LASSO_TYPE_SAMLP2_SUBJECT_QUERY_ABSTRACT lasso_samlp2_subject_query_abstract_get_type LASSO_SAMLP2_SUBJECT_QUERY_ABSTRACT_CLASS LASSO_IS_SAMLP2_SUBJECT_QUERY_ABSTRACT_CLASS LASSO_SAMLP2_SUBJECT_QUERY_ABSTRACT_GET_CLASS
saml2_attribute LassoSaml2Attribute LassoSaml2Attribute lasso_saml2_attribute_new LASSO_SAML2_ATTRIBUTE LASSO_IS_SAML2_ATTRIBUTE LASSO_TYPE_SAML2_ATTRIBUTE lasso_saml2_attribute_get_type LASSO_SAML2_ATTRIBUTE_CLASS LASSO_IS_SAML2_ATTRIBUTE_CLASS LASSO_SAML2_ATTRIBUTE_GET_CLASS
samlp2_requested_authn_context LassoSamlp2RequestedAuthnContext LassoSamlp2RequestedAuthnContext lasso_samlp2_requested_authn_context_new LASSO_SAMLP2_REQUESTED_AUTHN_CONTEXT LASSO_IS_SAMLP2_REQUESTED_AUTHN_CONTEXT LASSO_TYPE_SAMLP2_REQUESTED_AUTHN_CONTEXT lasso_samlp2_requested_authn_context_get_type LASSO_SAMLP2_REQUESTED_AUTHN_CONTEXT_CLASS LASSO_IS_SAMLP2_REQUESTED_AUTHN_CONTEXT_CLASS LASSO_SAMLP2_REQUESTED_AUTHN_CONTEXT_GET_CLASS
saml2_evidence LassoSaml2Evidence LassoSaml2Evidence lasso_saml2_evidence_new LASSO_SAML2_EVIDENCE LASSO_IS_SAML2_EVIDENCE LASSO_TYPE_SAML2_EVIDENCE lasso_saml2_evidence_get_type LASSO_SAML2_EVIDENCE_CLASS LASSO_IS_SAML2_EVIDENCE_CLASS LASSO_SAML2_EVIDENCE_GET_CLASS
saml2_key_info_confirmation_data LassoSaml2KeyInfoConfirmationData LassoSaml2KeyInfoConfirmationData lasso_saml2_key_info_confirmation_data_new LASSO_SAML2_KEY_INFO_CONFIRMATION_DATA LASSO_IS_SAML2_KEY_INFO_CONFIRMATION_DATA LASSO_TYPE_SAML2_KEY_INFO_CONFIRMATION_DATA lasso_saml2_key_info_confirmation_data_get_type LASSO_SAML2_KEY_INFO_CONFIRMATION_DATA_CLASS LASSO_IS_SAML2_KEY_INFO_CONFIRMATION_DATA_CLASS LASSO_SAML2_KEY_INFO_CONFIRMATION_DATA_GET_CLASS
samlp2_artifact_resolve LassoSamlp2ArtifactResolve LassoSamlp2ArtifactResolve lasso_samlp2_artifact_resolve_new LASSO_SAMLP2_ARTIFACT_RESOLVE LASSO_IS_SAMLP2_ARTIFACT_RESOLVE LASSO_TYPE_SAMLP2_ARTIFACT_RESOLVE lasso_samlp2_artifact_resolve_get_type LASSO_SAMLP2_ARTIFACT_RESOLVE_CLASS LASSO_IS_SAMLP2_ARTIFACT_RESOLVE_CLASS LASSO_SAMLP2_ARTIFACT_RESOLVE_GET_CLASS
samlp2_name_id_policy LassoSamlp2NameIDPolicy LassoSamlp2NameIDPolicy lasso_samlp2_name_id_policy_new LASSO_SAMLP2_NAME_ID_POLICY LASSO_IS_SAMLP2_NAME_ID_POLICY LASSO_TYPE_SAMLP2_NAME_ID_POLICY lasso_samlp2_name_id_policy_get_type LASSO_SAMLP2_NAME_ID_POLICY_CLASS LASSO_IS_SAMLP2_NAME_ID_POLICY_CLASS LASSO_SAMLP2_NAME_ID_POLICY_GET_CLASS
samlp2_name_id_mapping_response LassoSamlp2NameIDMappingResponse LassoSamlp2NameIDMappingResponse lasso_samlp2_name_id_mapping_response_new LASSO_SAMLP2_NAME_ID_MAPPING_RESPONSE LASSO_IS_SAMLP2_NAME_ID_MAPPING_RESPONSE LASSO_TYPE_SAMLP2_NAME_ID_MAPPING_RESPONSE lasso_samlp2_name_id_mapping_response_get_type LASSO_SAMLP2_NAME_ID_MAPPING_RESPONSE_CLASS LASSO_IS_SAMLP2_NAME_ID_MAPPING_RESPONSE_CLASS LASSO_SAMLP2_NAME_ID_MAPPING_RESPONSE_GET_CLASS
samlp2_logout_response LassoSamlp2LogoutResponse LassoSamlp2LogoutResponse lasso_samlp2_logout_response_new LASSO_SAMLP2_LOGOUT_RESPONSE LASSO_IS_SAMLP2_LOGOUT_RESPONSE LASSO_TYPE_SAMLP2_LOGOUT_RESPONSE lasso_samlp2_logout_response_get_type LASSO_SAMLP2_LOGOUT_RESPONSE_CLASS LASSO_IS_SAMLP2_LOGOUT_RESPONSE_CLASS LASSO_SAMLP2_LOGOUT_RESPONSE_GET_CLASS
saml2_encrypted_element LassoSaml2EncryptedElement LassoSaml2EncryptedElement lasso_saml2_encrypted_element_new lasso_saml2_encrypted_element_decrypt lasso_saml2_encrypted_element_build_encrypted_persistent_name_id lasso_saml2_encrypted_element_server_decrypt LASSO_SAML2_ENCRYPTED_ELEMENT LASSO_IS_SAML2_ENCRYPTED_ELEMENT LASSO_TYPE_SAML2_ENCRYPTED_ELEMENT lasso_saml2_encrypted_element_get_type LASSO_SAML2_ENCRYPTED_ELEMENT_CLASS LASSO_IS_SAML2_ENCRYPTED_ELEMENT_CLASS LASSO_SAML2_ENCRYPTED_ELEMENT_GET_CLASS
saml2_attribute_value LassoSaml2AttributeValue LassoSaml2AttributeValue lasso_saml2_attribute_value_new LASSO_SAML2_ATTRIBUTE_VALUE LASSO_IS_SAML2_ATTRIBUTE_VALUE LASSO_TYPE_SAML2_ATTRIBUTE_VALUE lasso_saml2_attribute_value_get_type LASSO_SAML2_ATTRIBUTE_VALUE_CLASS LASSO_IS_SAML2_ATTRIBUTE_VALUE_CLASS LASSO_SAML2_ATTRIBUTE_VALUE_GET_CLASS
saml2_advice LassoSaml2Advice LassoSaml2Advice lasso_saml2_advice_new LASSO_SAML2_ADVICE LASSO_IS_SAML2_ADVICE LASSO_TYPE_SAML2_ADVICE lasso_saml2_advice_get_type LASSO_SAML2_ADVICE_CLASS LASSO_IS_SAML2_ADVICE_CLASS LASSO_SAML2_ADVICE_GET_CLASS
saml2_authn_statement LassoSaml2AuthnStatement LassoSaml2AuthnStatement lasso_saml2_authn_statement_new LASSO_SAML2_AUTHN_STATEMENT LASSO_IS_SAML2_AUTHN_STATEMENT LASSO_TYPE_SAML2_AUTHN_STATEMENT lasso_saml2_authn_statement_get_type LASSO_SAML2_AUTHN_STATEMENT_CLASS LASSO_IS_SAML2_AUTHN_STATEMENT_CLASS LASSO_SAML2_AUTHN_STATEMENT_GET_CLASS
samlp2_authn_request LassoSamlp2AuthnRequest LassoSamlp2AuthnRequest lasso_samlp2_authn_request_new LASSO_SAMLP2_AUTHN_REQUEST LASSO_IS_SAMLP2_AUTHN_REQUEST LASSO_TYPE_SAMLP2_AUTHN_REQUEST lasso_samlp2_authn_request_get_type LASSO_SAMLP2_AUTHN_REQUEST_CLASS LASSO_IS_SAMLP2_AUTHN_REQUEST_CLASS LASSO_SAMLP2_AUTHN_REQUEST_GET_CLASS
saml2_assertion LassoSaml2Assertion LassoSaml2Assertion LassoSaml2AssertionValidationState LASSO_DURATION_DAY LASSO_DURATION_HOUR LASSO_DURATION_MINUTE LASSO_DURATION_WEEK lasso_saml2_assertion_new lasso_saml2_assertion_has_audience_restriction lasso_saml2_assertion_is_audience_restricted lasso_saml2_assertion_set_subject_name_id lasso_saml2_assertion_set_subject_confirmation_name_id lasso_saml2_assertion_get_subject_confirmation_data lasso_saml2_assertion_set_subject_confirmation_data lasso_saml2_assertion_set_basic_conditions lasso_saml2_assertion_add_audience_restriction lasso_saml2_assertion_add_proxy_limit lasso_saml2_assertion_validate_conditions lasso_saml2_assertion_validate_time_checks lasso_saml2_assertion_validate_audience lasso_saml2_assertion_allows_proxying lasso_saml2_assertion_allows_proxying_to lasso_saml2_assertion_get_issuer_provider lasso_saml2_assertion_add_attribute_with_node lasso_saml2_assertion_get_in_response_to lasso_saml2_assertion_decrypt_subject lasso_saml2_assertion_has_one_time_use lasso_saml2_assertion_set_one_time_use LASSO_SAML2_ASSERTION LASSO_IS_SAML2_ASSERTION LASSO_TYPE_SAML2_ASSERTION lasso_saml2_assertion_get_type LASSO_SAML2_ASSERTION_CLASS LASSO_IS_SAML2_ASSERTION_CLASS LASSO_SAML2_ASSERTION_GET_CLASS
saml2_proxy_restriction LassoSaml2ProxyRestriction LassoSaml2ProxyRestriction lasso_saml2_proxy_restriction_new LASSO_SAML2_PROXY_RESTRICTION LASSO_IS_SAML2_PROXY_RESTRICTION LASSO_TYPE_SAML2_PROXY_RESTRICTION lasso_saml2_proxy_restriction_get_type LASSO_SAML2_PROXY_RESTRICTION_CLASS LASSO_IS_SAML2_PROXY_RESTRICTION_CLASS LASSO_SAML2_PROXY_RESTRICTION_GET_CLASS
samlp2_idp_list LassoSamlp2IDPList LassoSamlp2IDPList lasso_samlp2_idp_list_new LASSO_SAMLP2_IDP_LIST LASSO_IS_SAMLP2_IDP_LIST LASSO_TYPE_SAMLP2_IDP_LIST lasso_samlp2_idp_list_get_type LASSO_SAMLP2_IDP_LIST_CLASS LASSO_IS_SAMLP2_IDP_LIST_CLASS LASSO_SAMLP2_IDP_LIST_GET_CLASS
samlp2_attribute_query LassoSamlp2AttributeQuery LassoSamlp2AttributeQuery lasso_samlp2_attribute_query_new LASSO_SAMLP2_ATTRIBUTE_QUERY LASSO_IS_SAMLP2_ATTRIBUTE_QUERY LASSO_TYPE_SAMLP2_ATTRIBUTE_QUERY lasso_samlp2_attribute_query_get_type LASSO_SAMLP2_ATTRIBUTE_QUERY_CLASS LASSO_IS_SAMLP2_ATTRIBUTE_QUERY_CLASS LASSO_SAMLP2_ATTRIBUTE_QUERY_GET_CLASS
saml2_action LassoSaml2Action LassoSaml2Action lasso_saml2_action_new lasso_saml2_action_new_with_string LASSO_SAML2_ACTION LASSO_IS_SAML2_ACTION LASSO_TYPE_SAML2_ACTION lasso_saml2_action_get_type LASSO_SAML2_ACTION_CLASS LASSO_IS_SAML2_ACTION_CLASS LASSO_SAML2_ACTION_GET_CLASS
samlp2_terminate LassoSamlp2Terminate LassoSamlp2Terminate lasso_samlp2_terminate_new LASSO_SAMLP2_TERMINATE LASSO_IS_SAMLP2_TERMINATE LASSO_TYPE_SAMLP2_TERMINATE lasso_samlp2_terminate_get_type LASSO_SAMLP2_TERMINATE_CLASS LASSO_IS_SAMLP2_TERMINATE_CLASS LASSO_SAMLP2_TERMINATE_GET_CLASS
saml2_one_time_use LassoSaml2OneTimeUse LassoSaml2OneTimeUse lasso_saml2_one_time_use_new LASSO_SAML2_ONE_TIME_USE LASSO_IS_SAML2_ONE_TIME_USE LASSO_TYPE_SAML2_ONE_TIME_USE lasso_saml2_one_time_use_get_type LASSO_SAML2_ONE_TIME_USE_CLASS LASSO_IS_SAML2_ONE_TIME_USE_CLASS LASSO_SAML2_ONE_TIME_USE_GET_CLASS
saml2_statement_abstract LassoSaml2StatementAbstract LassoSaml2StatementAbstract lasso_saml2_statement_abstract_new LASSO_SAML2_STATEMENT_ABSTRACT LASSO_IS_SAML2_STATEMENT_ABSTRACT LASSO_TYPE_SAML2_STATEMENT_ABSTRACT lasso_saml2_statement_abstract_get_type LASSO_SAML2_STATEMENT_ABSTRACT_CLASS LASSO_IS_SAML2_STATEMENT_ABSTRACT_CLASS LASSO_SAML2_STATEMENT_ABSTRACT_GET_CLASS
samlp2_authn_query LassoSamlp2AuthnQuery LassoSamlp2AuthnQuery lasso_samlp2_authn_query_new LASSO_SAMLP2_AUTHN_QUERY LASSO_IS_SAMLP2_AUTHN_QUERY LASSO_TYPE_SAMLP2_AUTHN_QUERY lasso_samlp2_authn_query_get_type LASSO_SAMLP2_AUTHN_QUERY_CLASS LASSO_IS_SAMLP2_AUTHN_QUERY_CLASS LASSO_SAMLP2_AUTHN_QUERY_GET_CLASS
samlp2_status_code LassoSamlp2StatusCode LassoSamlp2StatusCode lasso_samlp2_status_code_new LASSO_SAMLP2_STATUS_CODE LASSO_IS_SAMLP2_STATUS_CODE LASSO_TYPE_SAMLP2_STATUS_CODE lasso_samlp2_status_code_get_type LASSO_SAMLP2_STATUS_CODE_CLASS LASSO_IS_SAMLP2_STATUS_CODE_CLASS LASSO_SAMLP2_STATUS_CODE_GET_CLASS
samlp2_assertion_id_request LassoSamlp2AssertionIDRequest LassoSamlp2AssertionIDRequest lasso_samlp2_assertion_id_request_new LASSO_SAMLP2_ASSERTION_ID_REQUEST LASSO_IS_SAMLP2_ASSERTION_ID_REQUEST LASSO_TYPE_SAMLP2_ASSERTION_ID_REQUEST lasso_samlp2_assertion_id_request_get_type LASSO_SAMLP2_ASSERTION_ID_REQUEST_CLASS LASSO_IS_SAMLP2_ASSERTION_ID_REQUEST_CLASS LASSO_SAMLP2_ASSERTION_ID_REQUEST_GET_CLASS
samlp2_status_response LassoSamlp2StatusResponse LassoSamlp2StatusResponse lasso_samlp2_status_response_new LASSO_SAMLP2_STATUS_RESPONSE LASSO_IS_SAMLP2_STATUS_RESPONSE LASSO_TYPE_SAMLP2_STATUS_RESPONSE lasso_samlp2_status_response_get_type LASSO_SAMLP2_STATUS_RESPONSE_CLASS LASSO_IS_SAMLP2_STATUS_RESPONSE_CLASS LASSO_SAMLP2_STATUS_RESPONSE_GET_CLASS
saml2_attribute_statement LassoSaml2AttributeStatement LassoSaml2AttributeStatement lasso_saml2_attribute_statement_new LASSO_SAML2_ATTRIBUTE_STATEMENT LASSO_IS_SAML2_ATTRIBUTE_STATEMENT LASSO_TYPE_SAML2_ATTRIBUTE_STATEMENT lasso_saml2_attribute_statement_get_type LASSO_SAML2_ATTRIBUTE_STATEMENT_CLASS LASSO_IS_SAML2_ATTRIBUTE_STATEMENT_CLASS LASSO_SAML2_ATTRIBUTE_STATEMENT_GET_CLASS
saml2_condition_abstract LassoSaml2ConditionAbstract LassoSaml2ConditionAbstract lasso_saml2_condition_abstract_new LASSO_SAML2_CONDITION_ABSTRACT LASSO_IS_SAML2_CONDITION_ABSTRACT LASSO_TYPE_SAML2_CONDITION_ABSTRACT lasso_saml2_condition_abstract_get_type LASSO_SAML2_CONDITION_ABSTRACT_CLASS LASSO_IS_SAML2_CONDITION_ABSTRACT_CLASS LASSO_SAML2_CONDITION_ABSTRACT_GET_CLASS
samlp2_response LassoSamlp2Response LassoSamlp2Response lasso_samlp2_response_new LASSO_SAMLP2_RESPONSE LASSO_IS_SAMLP2_RESPONSE LASSO_TYPE_SAMLP2_RESPONSE lasso_samlp2_response_get_type LASSO_SAMLP2_RESPONSE_CLASS LASSO_IS_SAMLP2_RESPONSE_CLASS LASSO_SAMLP2_RESPONSE_GET_CLASS
saml2_subject_locality LassoSaml2SubjectLocality LassoSaml2SubjectLocality lasso_saml2_subject_locality_new LASSO_SAML2_SUBJECT_LOCALITY LASSO_IS_SAML2_SUBJECT_LOCALITY LASSO_TYPE_SAML2_SUBJECT_LOCALITY lasso_saml2_subject_locality_get_type LASSO_SAML2_SUBJECT_LOCALITY_CLASS LASSO_IS_SAML2_SUBJECT_LOCALITY_CLASS LASSO_SAML2_SUBJECT_LOCALITY_GET_CLASS
samlp2_scoping LassoSamlp2Scoping LassoSamlp2Scoping lasso_samlp2_scoping_new LASSO_SAMLP2_SCOPING LASSO_IS_SAMLP2_SCOPING LASSO_TYPE_SAMLP2_SCOPING lasso_samlp2_scoping_get_type LASSO_SAMLP2_SCOPING_CLASS LASSO_IS_SAMLP2_SCOPING_CLASS LASSO_SAMLP2_SCOPING_GET_CLASS
samlp2_extensions LassoSamlp2Extensions LassoSamlp2Extensions lasso_samlp2_extensions_new LASSO_SAMLP2_EXTENSIONS LASSO_IS_SAMLP2_EXTENSIONS LASSO_TYPE_SAMLP2_EXTENSIONS lasso_samlp2_extensions_get_type LASSO_SAMLP2_EXTENSIONS_CLASS LASSO_IS_SAMLP2_EXTENSIONS_CLASS LASSO_SAMLP2_EXTENSIONS_GET_CLASS
saml2_audience_restriction LassoSaml2AudienceRestriction LassoSaml2AudienceRestriction lasso_saml2_audience_restriction_new LASSO_SAML2_AUDIENCE_RESTRICTION LASSO_IS_SAML2_AUDIENCE_RESTRICTION LASSO_TYPE_SAML2_AUDIENCE_RESTRICTION lasso_saml2_audience_restriction_get_type LASSO_SAML2_AUDIENCE_RESTRICTION_CLASS LASSO_IS_SAML2_AUDIENCE_RESTRICTION_CLASS LASSO_SAML2_AUDIENCE_RESTRICTION_GET_CLASS
samlp2_manage_name_id_request LassoSamlp2ManageNameIDRequest LassoSamlp2ManageNameIDRequest lasso_samlp2_manage_name_id_request_new LASSO_SAMLP2_MANAGE_NAME_ID_REQUEST LASSO_IS_SAMLP2_MANAGE_NAME_ID_REQUEST LASSO_TYPE_SAMLP2_MANAGE_NAME_ID_REQUEST lasso_samlp2_manage_name_id_request_get_type LASSO_SAMLP2_MANAGE_NAME_ID_REQUEST_CLASS LASSO_IS_SAMLP2_MANAGE_NAME_ID_REQUEST_CLASS LASSO_SAMLP2_MANAGE_NAME_ID_REQUEST_GET_CLASS
samlp2_request_abstract LassoSamlp2RequestAbstract LassoSamlp2RequestAbstract lasso_samlp2_request_abstract_new LASSO_SAMLP2_REQUEST_ABSTRACT LASSO_IS_SAMLP2_REQUEST_ABSTRACT LASSO_TYPE_SAMLP2_REQUEST_ABSTRACT lasso_samlp2_request_abstract_get_type LASSO_SAMLP2_REQUEST_ABSTRACT_CLASS LASSO_IS_SAMLP2_REQUEST_ABSTRACT_CLASS LASSO_SAMLP2_REQUEST_ABSTRACT_GET_CLASS
samlp2_status_detail LassoSamlp2StatusDetail LassoSamlp2StatusDetail lasso_samlp2_status_detail_new LASSO_SAMLP2_STATUS_DETAIL LASSO_IS_SAMLP2_STATUS_DETAIL LASSO_TYPE_SAMLP2_STATUS_DETAIL lasso_samlp2_status_detail_get_type LASSO_SAMLP2_STATUS_DETAIL_CLASS LASSO_IS_SAMLP2_STATUS_DETAIL_CLASS LASSO_SAMLP2_STATUS_DETAIL_GET_CLASS
saml2_base_idabstract LassoSaml2BaseIDAbstract LassoSaml2BaseIDAbstract lasso_saml2_base_idabstract_new LASSO_SAML2_BASE_IDABSTRACT LASSO_IS_SAML2_BASE_IDABSTRACT LASSO_TYPE_SAML2_BASE_IDABSTRACT lasso_saml2_base_idabstract_get_type LASSO_SAML2_BASE_IDABSTRACT_CLASS LASSO_IS_SAML2_BASE_IDABSTRACT_CLASS LASSO_SAML2_BASE_IDABSTRACT_GET_CLASS
saml2_subject_confirmation_data LassoSaml2SubjectConfirmationData LassoSaml2SubjectConfirmationData lasso_saml2_subject_confirmation_data_new LASSO_SAML2_SUBJECT_CONFIRMATION_DATA LASSO_IS_SAML2_SUBJECT_CONFIRMATION_DATA LASSO_TYPE_SAML2_SUBJECT_CONFIRMATION_DATA lasso_saml2_subject_confirmation_data_get_type LASSO_SAML2_SUBJECT_CONFIRMATION_DATA_CLASS LASSO_IS_SAML2_SUBJECT_CONFIRMATION_DATA_CLASS LASSO_SAML2_SUBJECT_CONFIRMATION_DATA_GET_CLASS
samlp2_name_id_mapping_request LassoSamlp2NameIDMappingRequest LassoSamlp2NameIDMappingRequest lasso_samlp2_name_id_mapping_request_new LASSO_SAMLP2_NAME_ID_MAPPING_REQUEST LASSO_IS_SAMLP2_NAME_ID_MAPPING_REQUEST LASSO_TYPE_SAMLP2_NAME_ID_MAPPING_REQUEST lasso_samlp2_name_id_mapping_request_get_type LASSO_SAMLP2_NAME_ID_MAPPING_REQUEST_CLASS LASSO_IS_SAMLP2_NAME_ID_MAPPING_REQUEST_CLASS LASSO_SAMLP2_NAME_ID_MAPPING_REQUEST_GET_CLASS
samlp2_logout_request LassoSamlp2LogoutRequest LassoSamlp2LogoutRequest lasso_samlp2_logout_request_new lasso_samlp2_logout_request_get_session_indexes lasso_samlp2_logout_request_set_session_indexes LASSO_SAMLP2_LOGOUT_REQUEST LASSO_IS_SAMLP2_LOGOUT_REQUEST LASSO_TYPE_SAMLP2_LOGOUT_REQUEST lasso_samlp2_logout_request_get_type LASSO_SAMLP2_LOGOUT_REQUEST_CLASS LASSO_IS_SAMLP2_LOGOUT_REQUEST_CLASS LASSO_SAMLP2_LOGOUT_REQUEST_GET_CLASS
saml2_conditions LassoSaml2Conditions LassoSaml2Conditions lasso_saml2_conditions_new LASSO_SAML2_CONDITIONS LASSO_IS_SAML2_CONDITIONS LASSO_TYPE_SAML2_CONDITIONS lasso_saml2_conditions_get_type LASSO_SAML2_CONDITIONS_CLASS LASSO_IS_SAML2_CONDITIONS_CLASS LASSO_SAML2_CONDITIONS_GET_CLASS
saml2_authn_context LassoSaml2AuthnContext LassoSaml2AuthnContext lasso_saml2_authn_context_new LASSO_SAML2_AUTHN_CONTEXT LASSO_IS_SAML2_AUTHN_CONTEXT LASSO_TYPE_SAML2_AUTHN_CONTEXT lasso_saml2_authn_context_get_type LASSO_SAML2_AUTHN_CONTEXT_CLASS LASSO_IS_SAML2_AUTHN_CONTEXT_CLASS LASSO_SAML2_AUTHN_CONTEXT_GET_CLASS
ecp LassoEcp LassoEcp lasso_ecp_is_provider_in_sp_idplist lasso_ecp_is_idp_entry_known_idp_supporting_ecp lasso_ecp_set_known_sp_provided_idp_entries_supporting_ecp lasso_ecp_has_sp_idplist lasso_ecp_get_endpoint_url_by_entity_id lasso_ecp_process_sp_idp_list lasso_ecp_new lasso_ecp_process_authn_request_msg lasso_ecp_process_response_msg lasso_ecp_destroy LASSO_ECP LASSO_IS_ECP LASSO_TYPE_ECP lasso_ecp_get_type LASSO_ECP_CLASS LASSO_IS_ECP_CLASS LASSO_ECP_GET_CLASS
name_id_management LassoNameIdManagement LassoNameIdManagement lasso_name_id_management_new lasso_name_id_management_new_from_dump lasso_name_id_management_dump lasso_name_id_management_destroy lasso_name_id_management_init_request lasso_name_id_management_build_request_msg lasso_name_id_management_process_request_msg lasso_name_id_management_validate_request lasso_name_id_management_build_response_msg lasso_name_id_management_process_response_msg LASSO_NAME_ID_MANAGEMENT LASSO_IS_NAME_ID_MANAGEMENT LASSO_TYPE_NAME_ID_MANAGEMENT lasso_name_id_management_get_type LASSO_NAME_ID_MANAGEMENT_CLASS LASSO_IS_NAME_ID_MANAGEMENT_CLASS LASSO_NAME_ID_MANAGEMENT_GET_CLASS
assertion_query LassoAssertionQueryRequestType LassoAssertionQuery LassoAssertionQuery lasso_assertion_query_new lasso_assertion_query_destroy lasso_assertion_query_init_request lasso_assertion_query_validate_request lasso_assertion_query_build_request_msg lasso_assertion_query_process_request_msg lasso_assertion_query_build_response_msg lasso_assertion_query_process_response_msg lasso_assertion_query_add_attribute_request lasso_assertion_query_get_request_type LASSO_ASSERTION_QUERY LASSO_IS_ASSERTION_QUERY LASSO_TYPE_ASSERTION_QUERY lasso_assertion_query_get_type LASSO_ASSERTION_QUERY_CLASS LASSO_IS_ASSERTION_QUERY_CLASS LASSO_ASSERTION_QUERY_GET_CLASS
errors Error Codes LASSO_ERROR_UNDEFINED LASSO_ERROR_UNIMPLEMENTED LASSO_ERROR_OUT_OF_MEMORY LASSO_ERROR_CAST_FAILED LASSO_XML_ERROR_NODE_NOT_FOUND LASSO_XML_ERROR_NODE_CONTENT_NOT_FOUND LASSO_XML_ERROR_ATTR_NOT_FOUND LASSO_XML_ERROR_ATTR_VALUE_NOT_FOUND LASSO_XML_ERROR_INVALID_FILE LASSO_XML_ERROR_OBJECT_CONSTRUCTION_FAILED LASSO_XML_ERROR_MISSING_NAMESPACE LASSO_DS_ERROR_SIGNATURE_NOT_FOUND LASSO_DS_ERROR_INVALID_SIGNATURE LASSO_DS_ERROR_SIGNATURE_TMPL_CREATION_FAILED LASSO_DS_ERROR_CONTEXT_CREATION_FAILED LASSO_DS_ERROR_PUBLIC_KEY_LOAD_FAILED LASSO_DS_ERROR_PRIVATE_KEY_LOAD_FAILED LASSO_DS_ERROR_CERTIFICATE_LOAD_FAILED LASSO_DS_ERROR_SIGNATURE_FAILED LASSO_DS_ERROR_KEYS_MNGR_CREATION_FAILED LASSO_DS_ERROR_KEYS_MNGR_INIT_FAILED LASSO_DS_ERROR_SIGNATURE_VERIFICATION_FAILED LASSO_DS_ERROR_CA_CERT_CHAIN_LOAD_FAILED LASSO_DS_ERROR_INVALID_SIGALG LASSO_DS_ERROR_DIGEST_COMPUTE_FAILED LASSO_DS_ERROR_SIGNATURE_TEMPLATE_NOT_FOUND LASSO_DS_ERROR_TOO_MUCH_REFERENCES LASSO_DS_ERROR_INVALID_REFERENCE_FOR_SAML LASSO_DS_ERROR_DECRYPTION_FAILED LASSO_DS_ERROR_ENCRYPTION_FAILED LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND LASSO_SERVER_ERROR_ADD_PROVIDER_FAILED LASSO_SERVER_ERROR_ADD_PROVIDER_PROTOCOL_MISMATCH LASSO_SERVER_ERROR_SET_ENCRYPTION_PRIVATE_KEY_FAILED LASSO_LOGOUT_ERROR_UNSUPPORTED_PROFILE LASSO_LOGOUT_ERROR_REQUEST_DENIED LASSO_LOGOUT_ERROR_FEDERATION_NOT_FOUND LASSO_LOGOUT_ERROR_UNKNOWN_PRINCIPAL LASSO_PROFILE_ERROR_INVALID_QUERY LASSO_PROFILE_ERROR_INVALID_POST_MSG LASSO_PROFILE_ERROR_INVALID_SOAP_MSG LASSO_PROFILE_ERROR_MISSING_REQUEST LASSO_PROFILE_ERROR_INVALID_HTTP_METHOD LASSO_PROFILE_ERROR_INVALID_PROTOCOLPROFILE LASSO_PROFILE_ERROR_INVALID_MSG LASSO_PROFILE_ERROR_MISSING_REMOTE_PROVIDERID LASSO_PROFILE_ERROR_UNSUPPORTED_PROFILE LASSO_PROFILE_ERROR_UNKNOWN_PROFILE_URL LASSO_PROFILE_ERROR_IDENTITY_NOT_FOUND LASSO_PROFILE_ERROR_FEDERATION_NOT_FOUND LASSO_PROFILE_ERROR_NAME_IDENTIFIER_NOT_FOUND LASSO_PROFILE_ERROR_BUILDING_QUERY_FAILED LASSO_PROFILE_ERROR_BUILDING_REQUEST_FAILED LASSO_PROFILE_ERROR_BUILDING_MESSAGE_FAILED LASSO_PROFILE_ERROR_BUILDING_RESPONSE_FAILED LASSO_PROFILE_ERROR_SESSION_NOT_FOUND LASSO_PROFILE_ERROR_BAD_IDENTITY_DUMP LASSO_PROFILE_ERROR_BAD_SESSION_DUMP LASSO_PROFILE_ERROR_MISSING_RESPONSE LASSO_PROFILE_ERROR_MISSING_STATUS_CODE LASSO_PROFILE_ERROR_MISSING_ARTIFACT LASSO_PROFILE_ERROR_MISSING_RESOURCE_OFFERING LASSO_PROFILE_ERROR_MISSING_SERVICE_DESCRIPTION LASSO_PROFILE_ERROR_MISSING_SERVICE_TYPE LASSO_PROFILE_ERROR_MISSING_ASSERTION LASSO_PROFILE_ERROR_MISSING_SUBJECT LASSO_PROFILE_ERROR_MISSING_NAME_IDENTIFIER LASSO_PROFILE_ERROR_INVALID_ARTIFACT LASSO_PROFILE_ERROR_MISSING_ENCRYPTION_PRIVATE_KEY LASSO_PROFILE_ERROR_STATUS_NOT_SUCCESS LASSO_PROFILE_ERROR_MISSING_ISSUER LASSO_PROFILE_ERROR_MISSING_SERVICE_INSTANCE LASSO_PROFILE_ERROR_MISSING_ENDPOINT_REFERENCE LASSO_PROFILE_ERROR_MISSING_ENDPOINT_REFERENCE_ADDRESS LASSO_PROFILE_ERROR_INVALID_ISSUER LASSO_PROFILE_ERROR_MISSING_SERVER LASSO_PROFILE_ERROR_UNKNOWN_PROVIDER LASSO_PROFILE_ERROR_CANNOT_VERIFY_SIGNATURE LASSO_PROFILE_ERROR_CANNOT_FIND_A_PROVIDER LASSO_PROFILE_ERROR_RESPONSE_DOES_NOT_MATCH_REQUEST LASSO_PROFILE_ERROR_INVALID_REQUEST LASSO_PROFILE_ERROR_INVALID_RESPONSE LASSO_PROFILE_ERROR_UNSUPPORTED_BINDING LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ LASSO_PARAM_ERROR_INVALID_VALUE LASSO_PARAM_ERROR_CHECK_FAILED LASSO_PARAM_ERROR_NON_INITIALIZED_OBJECT LASSO_LOGIN_ERROR_FEDERATION_NOT_FOUND LASSO_LOGIN_ERROR_CONSENT_NOT_OBTAINED LASSO_LOGIN_ERROR_INVALID_NAMEIDPOLICY LASSO_LOGIN_ERROR_REQUEST_DENIED LASSO_LOGIN_ERROR_INVALID_SIGNATURE LASSO_LOGIN_ERROR_UNSIGNED_AUTHN_REQUEST LASSO_LOGIN_ERROR_STATUS_NOT_SUCCESS LASSO_LOGIN_ERROR_UNKNOWN_PRINCIPAL LASSO_LOGIN_ERROR_NO_DEFAULT_ENDPOINT LASSO_LOGIN_ERROR_ASSERTION_REPLAY LASSO_LOGIN_ERROR_ASSERTION_DOES_NOT_MATCH_REQUEST_ID LASSO_DEFEDERATION_ERROR_MISSING_NAME_IDENTIFIER LASSO_SOAP_ERROR_REDIRECT_REQUEST_FAULT LASSO_SOAP_ERROR_MISSING_ENVELOPE LASSO_SOAP_ERROR_MISSING_HEADER LASSO_SOAP_ERROR_MISSING_BODY LASSO_SOAP_ERROR_MISSING_SOAP_FAULT_DETAIL LASSO_REGISTRY_ERROR_KEY_EXISTS LASSO_PROVIDER_ERROR_MISSING_PUBLIC_KEY
lasso Initialization functions LASSO_EXPORT LASSO_EXPORT_VAR lasso_init lasso_shutdown LassoCheckVersionMode lasso_check_version lasso_set_flag
registry LassoRegistryTranslationFunction lasso_registry_default_add_direct_mapping lasso_registry_default_add_functional_mapping lasso_registry_default_get_mapping
saml2_utils Utility functions for SAML 2.0 lasso_build_unique_id lasso_profile_is_saml_query lasso_provider_saml2_node_encrypt
logging Logging lasso_log_set_handler lasso_log_remove_handler
paos_request LassoPaosRequest lasso_paos_request_validate lasso_paos_request_new
paos_response LassoPaosResponse lasso_paos_response_validate lasso_paos_response_new
ecp_request LassoEcpRequest lasso_ecp_request_validate lasso_ecp_request_new
ecp_response LassoEcpResponse lasso_ecp_response_validate lasso_ecp_response_new
ecp_relaystate LassoEcpRelayState lasso_ecp_relay_state_validate lasso_ecp_relay_state_new
lasso-2.8.2/PaxHeaders/compile0000644000000000000000000000007414215102164013276 xustar0030 atime=1678098069.969488882 30 ctime=1678814319.905947024 lasso-2.8.2/compile0000755000175000017500000001635014215102164016551 0ustar00bdauvergnebdauvergne00000000000000#! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2018-03-07.03; # UTC # Copyright (C) 1999-2021 Free Software Foundation, Inc. # Written by Tom Tromey . # # 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 Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN* | MSYS*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/* | msys/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi if test -f "$dir/lib$lib.a"; then found=yes lib=$dir/lib$lib.a break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \ icl | *[/\\]icl | icl.exe | *[/\\]icl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: lasso-2.8.2/PaxHeaders/install-sh0000644000000000000000000000007414215102164013724 xustar0030 atime=1678098069.977488944 30 ctime=1678814319.913947069 lasso-2.8.2/install-sh0000755000175000017500000003577614215102164017214 0ustar00bdauvergnebdauvergne00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2020-11-14.01; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. tab=' ' nl=' ' IFS=" $tab$nl" # Set DOITPROG to "echo" to test this script. doit=${DOITPROG-} doit_exec=${doit:-exec} # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_mkdir= # Desired mode of installed file. mode=0755 # Create dirs (including intermediate dirs) using mode 755. # This is like GNU 'install' as of coreutils 8.32 (2020). mkdir_umask=22 backupsuffix= chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false is_target_a_directory=possibly usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -p pass -p to $cpprog. -s $stripprog installed files. -S SUFFIX attempt to back up existing files, with suffix SUFFIX. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG By default, rm is invoked with -f; when overridden with RMPROG, it's up to you to specify -f if you want it. If -S is not specified, no backups are attempted. Email bug reports to bug-automake@gnu.org. Automake home page: https://www.gnu.org/software/automake/ " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -p) cpprog="$cpprog -p";; -s) stripcmd=$stripprog;; -S) backupsuffix="$2" shift;; -t) is_target_a_directory=always dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) is_target_a_directory=never;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done # We allow the use of options -d and -T together, by making -d # take the precedence; this is for compatibility with GNU install. if test -n "$dir_arg"; then if test -n "$dst_arg"; then echo "$0: target directory not allowed when installing a directory." >&2 exit 1 fi fi if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then if test $# -gt 1 || test "$is_target_a_directory" = always; then if test ! -d "$dst_arg"; then echo "$0: $dst_arg: Is not a directory." >&2 exit 1 fi fi fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? # Don't chown directories that already exist. if test $dstdir_status = 0; then chowncmd="" fi else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename. if test -d "$dst"; then if test "$is_target_a_directory" = never; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dstbase=`basename "$src"` case $dst in */) dst=$dst$dstbase;; *) dst=$dst/$dstbase;; esac dstdir_status=0 else dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi fi case $dstdir in */) dstdirslash=$dstdir;; *) dstdirslash=$dstdir/;; esac obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false # The $RANDOM variable is not portable (e.g., dash). Use it # here however when possible just to lower collision chance. tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap ' ret=$? rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null exit $ret ' 0 # Because "mkdir -p" follows existing symlinks and we likely work # directly in world-writeable /tmp, make sure that the '$tmpdir' # directory is successfully created first before we actually test # 'mkdir -p'. if (umask $mkdir_umask && $mkdirprog $mkdir_mode "$tmpdir" && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. test_tmpdir="$tmpdir/a" ls_ld_tmpdir=`ls -ld "$test_tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null fi trap '' 0;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac oIFS=$IFS IFS=/ set -f set fnord $dstdir shift set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=${dstdirslash}_inst.$$_ rmtmp=${dstdirslash}_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && { test -z "$stripcmd" || { # Create $dsttmp read-write so that cp doesn't create it read-only, # which would cause strip to fail. if test -z "$doit"; then : >"$dsttmp" # No need to fork-exec 'touch'. else $doit touch "$dsttmp" fi } } && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # If $backupsuffix is set, and the file being installed # already exists, attempt a backup. Don't worry if it fails, # e.g., if mv doesn't support -f. if test -n "$backupsuffix" && test -f "$dst"; then $doit $mvcmd -f "$dst" "$dst$backupsuffix" 2>/dev/null fi # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: